ばかげた質問かもしれませんが、多くの TTreeViewItem にリンクされたポップアップ メニューがあります。問題は、TTreeView.Selected プロパティが右クリックで設定されないことです。GetMousePos は、次または前の TTreeViewItem の座標を返す傾向があります。実際にポップアップをトリガーしたアイテムを取得するにはどうすればよいですか?
1746 次
2 に答える
2
PopupMenu のアイテムをクリックするとポイントがTPopupMenu.PopupPoint
返されるようです ( Delphi XE2では、メニューの位置を設定するために内部で使用され、メニューが消えると 0 に設定されるようです)。したがって、この状況では、最も簡単な方法は、選択したアイテムへの参照を保存できる場所を処理し、それをポップアップアイテムイベントハンドラーで使用することです。(0,0)
TreeView.OnMouseDown
そのため、以下の例のコードではFClickedItem : TTreeViewItem
、フォーム クラスに追加しました。
procedure TSampleForm.SampleTreeViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
if button = TMouseButton.mbRight then
FClickedItem := SampleTreeView.ItemByPoint(x,y)
else FClickedItem := nil;
end;
procedure TSampleForm.TestMenuItemClick(Sender: TObject);
begin
if Assigned(FClickedItem) then
ShowMessage(Format('Item `%s (%s)` was selected!', [FClickedItem.Text, FClickedItem.Name]))
else ShowMessage('there is nothing to show');
end;
更新:ソース コードを参照したところTPopupMenu.FPopupPoint
、実装コードでプライベート変数 (読み取り専用プロパティ) が使用されていないため、常に =(0,0)
于 2013-12-25T14:08:48.693 に答える