有一個彈出菜單附加到窗體上的按鈕,但也像TCharts的東西,我想知道哪個組件被右鍵單擊以啓動彈出菜單第一個地方。什麼是一個彈出菜單點擊發起的組件
click方法的Sender參數只是指向TMenuItem,其父對象是彈出式菜單(或父級菜單項)。
如何獲取原始組件?
有一個彈出菜單附加到窗體上的按鈕,但也像TCharts的東西,我想知道哪個組件被右鍵單擊以啓動彈出菜單第一個地方。什麼是一個彈出菜單點擊發起的組件
click方法的Sender參數只是指向TMenuItem,其父對象是彈出式菜單(或父級菜單項)。
如何獲取原始組件?
您的意思是PopupMenu1.PopupComponent?
作爲最後的手段,您可以使用Mouse.CursorPos
的TPopupMenu.OnPopup
在窗體上查找此組件。但是,可能有更好/更簡單的方法。
這隻有在通過鼠標點擊打開彈出式菜單時纔有幫助,還有一個鍵(或組合鍵)可以打開聚焦控件的上下文菜單。 – Wolf 2015-01-20 12:35:02
您可以通過
Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent;
一個這樣的PopupMenu的被分配到幾個列表框和解決導出到文件功能範例中得到這樣的PopupMenu的TMenuItem的單擊事件中主叫組件:
procedure TForm1.mniExportFileClick(Sender: TObject);
var Caller: TObject;
begin
if SaveTextFileDialog1.Execute then
begin
Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent;
(Caller as TListBox).Items.
SaveToFile(SaveTextFileDialog1.FileName,
StandardEncodingFromName(
SaveTextFileDialog1.Encodings[SaveTextFileDialog1.EncodingIndex]));
end;
end;
+1。或者,爲了更通用,我會在菜單的OnPopup事件中使用它:(發件人爲TPopupMenu).PopupComponent – 2010-03-24 10:21:32
@BruceMcGee爲什麼/這將如何變得更「通用」? – Wolf 2015-01-20 12:39:55
@Wolf:更通用,因爲它不需要知道組件的名稱。如果組件名稱發生更改,則更易碎,同一事件可能被多個組件使用。 – 2015-01-20 21:11:51