1

I합니다 (VirtualStringTree 또는 일반적으로) 내가 바로 노드를 클릭하면 트리거됩니다 프로 시저 또는 뭔가 나는 다음과 같은 시나리오 한VirtualStringTree OnNodeRightClick

찾고 있어요 : 나는

  • 이 내 listview에 가까운 VST.
  • 나는 (마우스 홀드 mousebutton 및 이동) 마우스 만 다중 선택 루트 노드
  • 나는 모든 자식 노드 (왼쪽 또는 오른쪽)을 클릭하면 수 있습니다 - 그것은 선택 (+ [VSelected] 주)
  • 루트 노드를 마우스 오른쪽 버튼으로 클릭하면 자동으로 선택되고 팝업 메뉴가 열립니다.

이제 내 모든 하위 노드 (및 선택되어있는 경우에만)에 대해 (1 개의 공통) 다른 팝업 메뉴를 갖고 싶습니다.

희망을 말하면 내 뜻을 이해할 수 있습니다. 도움을 주셔서 감사합니다. (어떤이있는 경우)

답변

5

나는 각 노드마다 다른 팝업 메뉴를 갖고 싶다고 말했기 때문에 귀하의 질문에 답변하지는 않겠지 만 올바른 이벤트를 알려줄 것입니다. 오른쪽 클릭 솔루션은 팝업 메뉴를 호출하는 누락 된 메뉴 키 누름에도 약점이 있습니다.

1 1.1 노드 레벨에 따라 각 노드마다 다른 팝업 메뉴를 사용하는 방법은 무엇입니까?

procedure TForm1.VirtualTreeGetPopupMenu(Sender: TBaseVirtualTree; 
    Node: PVirtualNode; Column: TColumnIndex; const P: TPoint; 
    var AskParent: Boolean; var PopupMenu: TPopupMenu); 
begin 
    case VirtualTree.GetNodeLevel(Node) of 
    0: PopupMenu := PopupMenu1; 
    1: PopupMenu := PopupMenu2; 
    end; 
end; 

1.2 방법은 마우스 오른쪽 버튼을 클릭 노드 선택을 가능하게?

오른쪽 마우스 버튼 노드를 선택할 수있게하려면 TreeOptions.SelectionOptions 옵션 세트에 toRightClickSelect 옵션을 추가하기 만하면됩니다.

1

당신은 커서 아래에있는 노드를 확인하기 위해 GetHitTestInfoAt 기능을 사용 후, 정상적인 OnMouseDown 이벤트를 사용하는 ButtonmbRight 있는지 확인 할 수 있습니다.

var 
    HitInfo : THitInfo; 
... 
TreeView.GetHitTestInfoAt(X, Y, HitInfo); 
if (HitInfo.Node = ?) and (HitInfo.Column = ?) then 
    begin 
    ... 
    end; 

당신에게 노드와 열을 제공하고 당신이 어떤 TPopupMenu를 반환 할 수있는도 OnGetPopupMenu 있습니다.

+0

감사합니다. 마우스 오른쪽 버튼으로 뭔가를 찾으려고 너무 집중했기 때문에 그 이벤트를 놓친 것 같습니다. –

+5

나는 당신이 의미하는 것을 안다. 가상 트리 뷰의 옵션 및 이벤트 수는 처음에는 압도적입니다. – jpfollenius