About.com에 좋은 자료가 있어서 공유한다.
TTreeView의 노드(Node)에 힌트를 보여주는 예제로 마우스 올리면 현재 노드의 인덱스를 구한다.
불행하게도 노드별 힌트를 자체 저장하지 못하므로 노드가 아닌 트리뷰의 힌트를 이용하여 표시한다.
노드별로 힌트를 저장하고자 할 경우는 별도의 TListBox TMemo 등을 이용하여 인덱스로 연결하면 될 듯하다.
procedure TfrmMyCF.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
tree: TTreeView;
hoverNode: TTreeNode;
hitTest : THitTests;
ht : THitTest;
begin
// TreeView의 ShowHint속성을 True로 설정하고
if (Sender is TTreeView) then
tree := TTreeView(Sender)
else
Exit;
hoverNode := tree.GetNodeAt(X, Y) ; //현재 위치의 Node를 구한다.
hitTest := tree.GetHitTestInfoAt(X, Y) ; //현재 위치의 hittest를 구한다
if (lastHintNode <> hoverNode) then //Node가 바뀌었으면
begin
Application.CancelHint; //어플리케이션의 힌트를 안보이게
if (hitTest <= [htOnItem, htOnIcon, htOnLabel, htOnStateIcon]) then
begin
lastHintNode := hoverNode;
tree.Hint := NodeHint(hoverNode) ;
end;
end;
// 추가로 HitTest의 값 출력
// THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon,
// htOnIndent, htOnLabel, htOnRight, htOnStateIcon, htToLeft, htToRight);
edHitTest.Text := '';
for ht in hitTest do
begin
edHitTest.Text := edHitTest.Text + GetEnumName(TypeInfo(THitTest), integer(ht)) + ', '; // uses TypInfo
end;
end;
function TfrmMyCF.NodeHint(tn: TTreeNode): string; //여러줄로 힌트 표시
begin
result := Format('노드 힌트 인덱스 ' + #13#10 +
'AbsoluteIndex: %d' + #13#10 +
'ParentIndex: %d' + #13#10 +
'Index: %d', [tn.AbsoluteIndex, tn.Parent.Index, tn.Index]) ;
end;
'델파이' 카테고리의 다른 글
InstallShield에서 설치파일 하위버전 덮어쓰기 설정 (0) | 2014.01.21 |
---|---|
사용자 계정 컨트롤 해제 및 관리자 권한으로 실행 (0) | 2014.01.09 |
콤보박스(TComboBox)에 한번 입력한 값 Items에 추가 (0) | 2013.11.16 |
키보드이벤트 KEYBD_EVENT 통한 한영전환 (0) | 2013.10.29 |
리눅스 ssh, telnet, shell(쉘) 일괄파일 삭제 스크립트 (0) | 2013.08.21 |