2

ノード(または一般的にはVirtualStringTree)を右クリックすると起動するプロシージャまたは何かを探しています

次のシナリオがあります。

  • VSTをリストビューに近づけています。
  • マウスでルートノードを複数選択することしかできません(マウスボタンを押したままマウスを動かす)
  • 任意の子ノード(右または左)をクリックすると、選択されます(+ [VSelected]状態)
  • ルートノードを右クリックすると、自動的に選択され、ポップアップメニューが開きます。

ここで、すべての子ノードに対して(1つの共通)に対して異なるポップアップメニューを作成したいと思います(選択されている場合のみ)。

あなたが私が何を意味するのか理解できることを願っています、あなたの助けに感謝します。

4

2 に答える 2

6

あなたの質問には答えませんが、ノードごとに異なるポップアップ メニューを用意したいとおっしゃっていたので、適切なイベントをご紹介します。右クリック ソリューションには、少なくともポップアップ メニューを呼び出すメニュー キーを押さないという弱点があります。

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

于 2012-08-14T08:18:06.747 に答える
2

通常のOnMouseDownイベントを使用して、 でButtonあることを確認してからmbRight、関数を使用してGetHitTestInfoAt、カーソルの下にあるノードを確認できます (存在する場合)。

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

OnGetPopupMenuノードと列を提供し、任意の を返すこともできますTPopupMenu

于 2012-08-14T06:11:56.287 に答える