我的问题是如何捕捉以某种形式按下的菜单项?举个例子:
我有一个带按钮的表格。当我按下按钮时,应用程序的菜单将处于焦点,子表单等待选择菜单项。在我选择一个之后,子表单显示一条消息,其中包含我按下的菜单项的名称。
谁能告诉我怎么做?
提前致谢!
答案 0 :(得分:2)
这样的事情直接回答了你的问题:
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 :(得分:1)
示例:
全局变量(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;