动态的创建一个菜单,如何写OnClick事件代码呢?有点。。。 还有考虑MenuItem.name的情况,比如在菜单项比较多的情况下菜单名的命名问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用tactionlist试一试,不过还是要设置tag作为标志 MenuItme1.OnClick:=MenuClick;procedure TForm1.MenuClick(Sender:TObject);begin ....end; 以下代码创建了一个FORM及BUTTON,点击BUTTON后,动态创建了FORM的弹出式菜单。点击鼠标右键,再点击菜单项,可以看到你想要的效果。unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,menus;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure MenuClick(Sender: TObject); public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);var MenuItems: Array of TMenuItem; i: Integer;begin SetLength(MenuItems,3); for i:=0 to Length(MenuItems)-1 do begin MenuItems[i] := NewItem('Menu'+inttostr(i),TextToShortCut('Ctrl+'+inttostr(i)), false,true,nil,0,'Items'+inttostr(i)); MenuItems[i].Tag := i; MenuItems[i].OnClick := MenuClick; end; Self.PopupMenu := NewPopUpMenu(Self,'MainMenu',paCenter,True,MenuItems);end;procedure TForm1.MenuClick(Sender: TObject);begin Case TMenuItem(Sender).tag of 0: showmessage('You clicked MenuItem 0'); 1: showmessage('You clicked MenuItem 1'); 2: showmessage('You clicked MenuItem 2'); end;end;end. 现在加分,非常感谢 NetFriend(NetFriend) ,Apollo47(阿波罗) 现在加分,非常感谢 NetFriend(NetFriend) ,Apollo47(阿波罗) ,和大家 仅做参考 C++Builder1. 在表单类定义末尾加入消息响应表,取得WM_SYSCOMMAND消息的处理权 BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_SYSCOMMAND,TMessage,OnWMSysCommand) END_MESSAGE_MAP(TForm) 2. 在表单类定义的private区内加入消息处理函数声明 private: // User declarations void __fastcall OnWMSysCommand(TMessage& Message); 在表单文件内(如Unit1.h) 3. 写出消息响应函数 void __fastcall TForm1::OnWMSysCommand(TMessage& Message) { if(Message.WParam==ID_SysMenu_MyItem) { // Your Code Here, Do Something } TForm::Dispatch(&Message); } Delphi 调用VC编写的DLL问题返回直的问题 关于多行打印的问题 Tinydb控件有源码,如何更改Tinytable的字段总数?目前只支持90个,能否修改成支持200个?有修改成功的,望能指点一二 好长时间没用DELPHI,想请教个问题, 执行存储过程 冬天到了,我怎么高兴不起来? 求一个最简单的加密算法,给出例程者有分 我要创建一个能包括各种对象指针的数组,请帮忙! longbool是什么? 71分求助,如何使主窗体接收文本的拖放(如ie),然后把拖放的内容存储到form2的memo里? 请问delphi中的错误信息? 搞了一年,还没解决?
procedure TForm1.MenuClick(Sender:TObject);
begin
....
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,menus;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure MenuClick(Sender: TObject);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
MenuItems: Array of TMenuItem;
i: Integer;
begin
SetLength(MenuItems,3);
for i:=0 to Length(MenuItems)-1 do
begin
MenuItems[i] := NewItem('Menu'+inttostr(i),TextToShortCut('Ctrl+'+inttostr(i)),
false,true,nil,0,'Items'+inttostr(i));
MenuItems[i].Tag := i;
MenuItems[i].OnClick := MenuClick;
end;
Self.PopupMenu := NewPopUpMenu(Self,'MainMenu',paCenter,True,MenuItems);
end;procedure TForm1.MenuClick(Sender: TObject);
begin
Case TMenuItem(Sender).tag of
0: showmessage('You clicked MenuItem 0');
1: showmessage('You clicked MenuItem 1');
2: showmessage('You clicked MenuItem 2');
end;
end;end.
1. 在表单类定义末尾加入消息响应表,取得WM_SYSCOMMAND消息的处理权
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SYSCOMMAND,TMessage,OnWMSysCommand)
END_MESSAGE_MAP(TForm) 2. 在表单类定义的private区内加入消息处理函数声明
private: // User declarations
void __fastcall OnWMSysCommand(TMessage& Message); 在表单文件内(如Unit1.h) 3. 写出消息响应函数
void __fastcall TForm1::OnWMSysCommand(TMessage& Message)
{
if(Message.WParam==ID_SysMenu_MyItem)
{
// Your Code Here, Do Something
}
TForm::Dispatch(&Message);
}