Из какого компонента произошел щелчок во всплывающем меню - PullRequest
16 голосов
/ 24 марта 2010

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

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

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

Ответы [ 3 ]

35 голосов
/ 24 марта 2010

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

10 голосов
/ 15 августа 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...