Каков компонент, из которого вызывается всплывающее меню

Наличие всплывающего меню, прикрепленного к нескольким компонентам формы (кнопки, но также вещи, такие как TCharts), я хотел бы знать, какой компонент был нажат правой кнопкой мыши, чтобы запустить всплывающее меню в первую очередь.

Параметр Sender метода click указывает только TMenuItem, его родительский элемент во всплывающее меню (или элемент меню родительского контроля).

Как получить исходный компонент?

Ответы

Ответ 1

Вы имели в виду PopupMenu1.PopupComponent?

Ответ 2

Вы можете получить компонент вызывающего абонента в событии клика 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; 

Ответ 3

В качестве последнего средства вы можете использовать Mouse.CursorPos в TPopupMenu.OnPopup, чтобы найти этот компонент в форме. Но, вероятно, лучше/проще.