Выбор Delphi меню - PullRequest
       3

Выбор Delphi меню

0 голосов
/ 03 октября 2011

Мой вопрос: как узнать, какой пункт меню был нажат в той или иной форме?Для примера:

У меня есть форма с кнопкой.Когда я нажму кнопку, меню приложения будет в фокусе, и дочерняя форма будет ждать выбора пункта меню.После того, как я выберу один, дочерняя форма покажет сообщение с названием пункта меню, который я нажал.

Может кто-нибудь сказать мне, как это сделать?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Примерно так - прямой ответ на ваш вопрос:

procedure TMyForm.MenuItemClick(Sender: TObject);
begin
  ShowMessage((Sender as TMenuItem).Caption);
end;

Этот обработчик событий должен быть подключен к каждому пункту меню, который вы хотите вести себя таким образом.


Похоже, вам нужна централизованная регистрация или мониторинг выполнения пунктов меню.Если вы используете действия и связываете их с вашими пунктами меню, вы можете получить уведомление приложения о том, что действие выполнено.Перетащите объект TApplicationEvents на основную форму и обработайте событие OnActionExecute.Как это:

procedure TMyForm.ApplicationEvents1ActionExecute(Action: TBasicAction; var Handled: Boolean);
begin
  ShowMessage((Action as TAction).Caption);
end;

Это будет срабатывать всякий раз, когда выполняется любое событие в вашем приложении.

1 голос
/ 04 октября 2011
  • 1 / По умолчанию вы устанавливаете для всех обработчиков событий TMenuItem OnClick значение Nil.
  • 2 / Когда вы нажимаете кнопку формы, вы назначаете событие каждому TMenuItem, это событие будет вызываться только один раз.и запишет 'триггер'.
  • 3 / Когда вызывается событие, вы сбрасываете все TMenuitem.OnClick на Nil
  • 4 / Чтобы упростить это, вы сохраняете все свои элементы MenuItem вTList.

пример:

глобальные переменные (частное объявление в TMyForm):

MyTriggerItem: TMenuItem; // used as pointer
MyMenuItemList: TList; // used to store all TMenuItem which are 'listened to'

ваш обработчик TButton:

Procedure TMyForm.ButtonClick(Sender: TObject);
Var
  i: Integer;
Begin
  For i:= 0 To Pred(MyMenuItemList.Count) Do TMenuItem(MyMenuItemList[i]).OnCLick := CommonMenuItemClick;    
End;        

ваш обработчик событий TMenuItem:

Procedure TMyForm.CommonMenuItemClick(Sender: TObject);
Var
  i: Integer;
Begin
  MyTriggerItem := TMenuItem(Sender);
  For i:= 0 To Pred(MyMenuItemList.Count) Do TMenuItem(MyMenuItemList[i]).OnCLick := Nil;
End;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...