tree view에서 클릭했을때...선택된 대상으로 넘어가게 했는데요...
+기호를 선택하면 트리만 밑으로 보여주어야 하는데.. 스크롤이생기면서
그 밑에 있는 포인트값을 구해서 대상이 선택되어버립니다...
아래는 소스
if GetCursorPos(ptMousePos) = True then begin
//ClickedNode := TTreeNode.Create(TreeMenu.Items);
ptMousePos := ScreenToClient(ptMousePos);
ClickedNode := TreeMenu.GetNodeAt(ptMousePos.X, ptMousePos.Y - PnlNode.Height);
TreeMenu.Selected := ClickedNode;
end;
if GetCursorPos(ptMousePos) = True then begin
ptMousePos := ScreenToClient(ptMousePos);
MmcNode := TreeMenu.GetNodeAt(ptMousePos.X, ptMousePos.Y - PnlNode.Height);
if (MmcNode <> nil) and (TreeMenu.Selected <> nil) then
if (not MmcNode.HasChildren) and (MmcNode = TreeMenu.Selected) then
begin
ShowMmcForm(PTreeMenu(MmcNode.Data), MmcNode.Text);
end;
end;
너무 어렵게 구현하신듯 하네요.
간단하게, 클릭한 위치의 노드를 구해서 처리하는 것이라면,
OnMouseDown에서 처리하면 간단하게 됩니다.
procedure TMainForm.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if TreeView1.GetNodeAt(X, Y)<>nil then
// ...
end;
이렇게 하면, 스크롤된 위치에 따라서 자동으로 클릭한 위치의 노드를 찾아서 원하는 처리를 할 수 있습니다.