1

我找的,如果我右鍵點擊一個節點時,都會激發(或一般的VirtualStringTree)的程序或東西VirtualStringTree OnNodeRightClick

我有以下情形:

  • 我有我VST接近列表視圖。
  • 我可以用鼠標(保持mousebutton並移動鼠標)唯一的多選擇根節點
  • 如果我點擊任何子節點(右或左) - 它被選中(+ VSelected]國)
  • 如果我右鍵單擊根節點,它會自動選擇並打開一個彈出菜單。

現在我想爲所有我的孩子節點(只有當他們被選中)有一個不同的popupmenu(1常見)。

希望你能明白我的意思,謝謝你的幫助。

回答

5

我不會回答你的問題,而是指出你正確的事件,因爲你說你想爲每個節點有不同的彈出菜單。至少在失蹤的菜單鍵按下時,右鍵點擊解決方案也會有一個弱點,即調用彈出式菜單。

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如何使鼠標右鍵點擊節點選擇?

並允許鼠標​​右鍵節點選擇,只需將toRightClickSelect選項添加到TreeOptions.SelectionOptions選項集。

1

您可以使用正常的OnMouseDown事件,確保ButtonmbRight,然後使用GetHitTestInfoAt功能檢查哪個節點是光標下(如果有的話)。

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

還有OnGetPopupMenu它給你的一個節點,一列,讓你返回任何TPopupMenu

+0

謝謝。我猜想錯過了這個事件,因爲我非常專注於用鼠標右鍵點擊。 – 2012-08-14 06:39:13

+5

我知道你的意思。起初,虛擬樹視圖上的選項和事件的數量可能會不堪重負:) – jpfollenius 2012-08-14 06:51:23

相關問題