2013-04-09 2 views
1

노드를 클릭하거나 노드 항목 (즉, 더하기 기호 옆에있는 해당 텍스트 항목)을 두 번 클릭하는 이벤트는 어떻게 트리 뷰에서 추적 할 수 있습니까?TreeView에서 노드를 클릭하고 더블 클릭하는 것을 어떻게 감지합니까?

+0

http://docwiki.embarcadero.com/VCL/2010/en/ComCtrls.TCustomTreeView.OnChange http://docwiki.embarcadero.com/CodeExamples /XE2/en/VCL.ResXplorer_Sample http://lazarus-ccr.sourceforge.net/docs/lcl http://lazarus-ccr.sourceforge.net/docs/lcl /comctrls/tcustomtreeview.onselectionchanged.html 그러나 VirtualTreeView를 더 잘 사용하십시오. –

+0

Delphi 7에는 OnSelectionChanged와 같은 것이 없습니다. – Mikhail

답변

4

일반적으로 컨트롤을 클릭하거나 두 번 클릭하면 OnClickOnDblClick 이벤트가 발생합니다. 클릭 한 특정 노드를 찾으려면 컨트롤의 GetNodeAt 메서드를 마우스의 현재 좌표와 함께 사용하십시오.

GetMessagePos으로 클릭했을 당시의 좌표를 얻을 수 있습니다. Mouse.CursorPos을 읽으면 속성을 읽었을 때의 좌표가 표시되며, 시스템에 어떤 종류의 부하가있는 경우 클릭 시간과 크게 다를 수 있으며, 그렇지 않은 위치에서 클릭이 감지 될 수 있습니다 심지어 당신의 통제 범위 내에서.

+0

실제 예제를 제공해 줄 수 있습니까? 나는 그것을 클릭 할 때 노드가 갖는 좌표를 파악하는 방법조차 모른다. – Mikhail

+1

노드의 좌표를 알아낼 필요가 없습니다. 앞서 말한 것처럼 GetMessagePos를 호출하여 클릭 좌표를 찾은 다음 GetNodeAt를 호출하여 해당 노드가있는 경우 해당 노드가 있는지 확인합니다. –

+0

GetMessagePos의 위/아래 단어가 커서의 화면 위치 였고 TTreeControl.ScreenToClient를 사용하여 TTreeControl.GetNodeAt (...)에 입력 할 수있는 TTreeView 컨트롤에 상대적인 좌표로 변환해야했습니다. – Duncan

0

일반적인 OnClickOnDblClick 이벤트를 사용하고 현재 노드 항목을 확인하십시오.

http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ComCtrls.TCustomTreeView.Selected

도 연결 예를 참조하십시오.


하지만 VirtualTreeView를 사용하는 것이 좋습니다.

+1

당신의 대답은 나의 것과 동일합니다. 그래서, 내 것을 지우고 그것을 가질 수 있습니다. 그러나 전혀 다른 구성 요소를 사용하는 오프 주제에 대해서는 -1입니다. –

+0

누가 1 위를 게시 했는가가별로 다르지 않으므로 삭제가 필요하지 않습니다. 그러나 (내가 한) 질문에 대답 한 후 추가 제안을 추가 할 수 있습니다. –

+0

동일한 답변이 여러 개 나오는 점은 없습니다. 문제가 복잡해지지 않도록 기꺼이 삭제하겠습니다. 그러나 완전히 다른 구성 요소를 제안하는 것은 급진적입니다. 아마도 의견으로,하지만 그것은 대답에 아무런 도움이되지 않습니다. –

관련 문제