TVirtualStreeTree.HintMode = hmTooltip 인 경우 노드 텍스트가 완전히 표시되지 않은 노드 및 열 위에 마우스를 올려 놓으면 노드 텍스트가 힌트 텍스트가됩니다. 그러나 HintMode = hmHint를 설정해야합니다. 그래서 심지어 짝수 핸들러에서 현재 마우스 커서의 위치를 기반으로 다양한 힌트 텍스트를 제공하고 힌트 텍스트가 자동으로 생성되지 않습니다.
내 질문은 노드 텍스트가 완전하게 표시되는지 아닌지를 아는 방법입니다. 그래서 노드 텍스트 또는 빈 문자열을 힌트 텍스트로 제공해야합니까?
감사합니다.Virtual StringTree : 노드 텍스트가 완전히 표시되었는지 확인하는 방법은 무엇입니까?
답변
TBaseVirtualTree.GetDisplayRect
을 호출하여 노드의 텍스트 범위를 결정할 수 있습니다. Unclipped
매개 변수에 따라 전체 또는 실제 텍스트 너비가 표시됩니다. TextOnly
은 True
로 설정해야합니다 : 그것은 아직 초기화되어 있지 않은 경우 함수가 암시 적으로 노드를 초기화합니다
function IsTreeTextClipped(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean;
var
FullRect, ClippedRect: TRect;
begin
FullRect := Tree.GetDisplayRect(Node, Column, True, True);
ClippedRect := Tree.GetDisplayRect(Node, Column, True, False);
Result := (ClippedRect.Right - ClippedRect.Left) < (FullRect.Right - FullRect.Left);
end;
하는 것으로.
트리 컨트롤 자체에서 사용할 항목을 사용할 수 있습니다. 다음은 hmTooltip
모드가 적용될 때 단일 행 노드에 대한 cm_HintShow
메시지 처리기에서 발췌 한 내용입니다. ShowOwnHint
이 참
NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, True, True);
BottomRightCellContentMargin := DoGetCellContentMargin(HitInfo.HitNode, HitInfo.HitColumn
, ccmtBottomRightOnly);
ShowOwnHint := (HitInfo.HitColumn > InvalidColumn) and PtInRect(NodeRect, CursorPos) and
(CursorPos.X <= ColRight) and (CursorPos.X >= ColLeft) and
(
// Show hint also if the node text is partially out of the client area.
// "ColRight - 1", since the right column border is not part of this cell.
((NodeRect.Right + BottomRightCellContentMargin.X) > Min(ColRight - 1, ClientWidth)) or
(NodeRect.Left < Max(ColLeft, 0)) or
((NodeRect.Bottom + BottomRightCellContentMargin.Y) > ClientHeight) or
(NodeRect.Top < 0)
);
경우에, 당신은 힌트 텍스트로 노드의 텍스트를 반환해야합니다. 그렇지 않으면 힌트 텍스트를 공백으로 두십시오.
해당 코드를 사용하는 데있어서 가장 큰 장애물은 DoGetCellContentMargin
이 보호되어 있으므로 직접 호출 할 수 없다는 것입니다. 소스를 편집하여 공개하거나 자신의 기능에서 기능을 복제 할 수 있습니다. OnBeforeCellPaint
이벤트를 처리하지 않으면 항상 (0, 0)을 반환합니다.
HitInfo
데이터는 GetHitTestInfoAt
에서 가져온 것입니다.
안녕하세요 롭, 미안 해요, TOndrej의 코드가 작동 한 이후로 시도하지 않았습니다. 모두 감사합니다! –
- 1. Rails 객체가 marked_for_destruction으로 표시되었는지 확인하는 방법은 무엇입니까?
- 2. 스크롤바가 브라우저 (jQuery)에 표시되었는지 확인하는 방법은 무엇입니까?
- 3. 기본 ASP : ASPSESSIONID * 쿠키가 안전한 것으로 표시되었는지 확인하는 방법은 무엇입니까?
- 4. TinyMCE 내부의 노드 클래스를 확인하는 방법은 무엇입니까?
- 5. 가상 StringTree : OnGetHint 이벤트 처리기에서 반환 한 텍스트가 힌트 창에 표시되지 않음
- 6. RegEx : 텍스트가 통화 기호로 시작하는지 확인하는 방법은 무엇입니까?
- 7. Firefox의 표 셀에 텍스트가 넘쳐 흐르고 있는지 확인하는 방법은 무엇입니까?
- 8. 내 jQueryUI 버튼 텍스트가 25자를 넘지 않는지 확인하는 방법은 무엇입니까?
- 9. ASP.NET 페이지의 텍스트 상자에 텍스트가 입력되지 않았는지 확인하는 방법은 무엇입니까?
- 10. 파일에 일반 텍스트가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 11. AS3 "Object"변수가 완전히 비어 있는지 확인하는 방법은 무엇입니까?
- 12. VirtualStringTree - 노드 컬렉션이 검사 된 시간을 확인하는 방법은 무엇입니까?
- 13. 서비스가 삭제로 표시되었는지 확인
- 14. django.contrib.auth를 완전히 비활성화하는 방법은 무엇입니까?
- 15. 셀렌 : 일부 텍스트가 굵게 표시되는지 확인하는 방법
- 16. 노드 이름을 지정하는 방법은 무엇입니까?
- 17. Textbox 텍스트가 6 자 이상인 경우 RegularExpressionValidator에서 확인하는 식은 무엇입니까?
- 18. 운영체제를 확인하는 방법은 무엇입니까?
- 19. null인지 확인하는 방법은 무엇입니까?
- 20. 여권을 확인하는 방법은 무엇입니까?
- 21. LDIF를 확인하는 방법은 무엇입니까?
- 22. iframe에 특정 문장이 있는지 확인하는 방법은 무엇입니까?
- 23. 어레이가 있는지 확인하는 방법은 무엇입니까?
- 24. 가장 좋은 방법은 완전히 다른
- 25. .NET에서 Microsoft Virtual PC 파일 시스템을 마운트하는 방법은 무엇입니까?
- 26. Microsoft Virtual PC의 Windows XP에서 xampp을 실행하는 방법은 무엇입니까?
- 27. Git Submodules. 그것들을 완전히 포함시키는 방법은 무엇입니까?
- 28. nib에서로드 한보기 컨트롤러를 완전히 언로드하는 방법은 무엇입니까?
- 29. TFS에서 디렉토리를 완전히 삭제하는 방법은 무엇입니까?
- 30. vim의 파일 기능을 완전히 끄는 방법은 무엇입니까?
감사합니다 TOndrej, 코드가 매력처럼 작동했습니다! GetDisplayRect를 시도했지만이 기능 만 사용하여이 작업을 수행 할 수 있다는 것을 알지 못했습니다! –