Ответ 1
Вы имели в виду PopupMenu1.PopupComponent?
Наличие всплывающего меню, прикрепленного к нескольким компонентам формы (кнопки, но также вещи, такие как TCharts), я хотел бы знать, какой компонент был нажат правой кнопкой мыши, чтобы запустить всплывающее меню в первую очередь.
Параметр Sender метода click указывает только TMenuItem, его родительский элемент во всплывающее меню (или элемент меню родительского контроля).
Как получить исходный компонент?
Вы имели в виду PopupMenu1.PopupComponent?
Вы можете получить компонент вызывающего абонента в событии клика TMenuItem PopupMenu с помощью
Caller := ((Sender as TMenuItem).GetParentMenu as TPopupMenu).PopupComponent;
Пример PopupMenu, который присваивается нескольким спискам и решает проблему экспорта в файл:
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;
В качестве последнего средства вы можете использовать Mouse.CursorPos
в TPopupMenu.OnPopup
, чтобы найти этот компонент в форме. Но, вероятно, лучше/проще.