在DELPHI中动态生成菜单项,如何解决它的事件问题.
我在编程时遇到一个问题: 不能给每个动态生成的菜单分配一个有用事件处理过程(同一过程)
具体问题如下: 本人在一程序中采用了动态生成菜单项来管理备份的文件,既备份一次,增加一项,以后用菜单来调出备份的文件.
菜单项:
Caption属性 用的是备份时间表示,
Name属性 用"一字符(B) + intToStr(一整型变量(自动递增))",
Hint属性 用的是"文件的备份路径及文件名表示"(用作传递给响应菜单单击 事件过程的参数)
OnClick属性 用的一个自定义过程.
问题来了:
如何在自定义过程中获得是那个菜单项的单击事件发生,并且要把它的Hint属性值取出,作为查询是的参数.
请各位朋友指教,谢谢
问题点数:100、回复次数:5Top
1 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2002-05-19 13:57:16 得分 0
暂时还没这样做过,今天有点烦想不了事,只好帮忙UP了……Top
2 楼xxmmmx(踢踏)回复于 2002-05-19 14:05:05 得分 0
/uuuuu..ppTop
3 楼lizhenjia(暴雪)回复于 2002-05-19 14:07:49 得分 100
很简单,判断事件的Sender参数就可以啊!如:
unit Unit1;
interface
uses
Windows, Messages,Menus, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure MyClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyClick(Sender: TObject);
begin
showmessage((Sender as tmenuitem).Caption);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mymainmenu:tmainmenu;
myitem:array[0..2] of tmenuitem;
a,b:tmenuitem;
i:integer;
begin
mymainmenu:=tmainmenu.Create(self);
for i:=0 to 2 do
myitem[i]:=tmenuitem.Create(self);
myitem[0].caption:='java' ;
myitem[1].caption:='delphi' ;
mymainmenu.Items.Add(myitem[0]) ;
mymainmenu.Items.Add(myitem[1]) ;
myitem[0].onclick:=MyClick;
myitem[1].onclick:=MyClick;
end;
end.
Top
4 楼lizhenjia(暴雪)回复于 2002-05-19 14:10:24 得分 0
忘了加hint了!
unit Unit1;
interface
uses
Windows, Messages,Menus, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure MyClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MyClick(Sender: TObject);
begin
showmessage((Sender as tmenuitem).Caption);
showmessage((Sender as tmenuitem).hint);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mymainmenu:tmainmenu;
myitem:array[0..2] of tmenuitem;
a,b:tmenuitem;
i:integer;
begin
mymainmenu:=tmainmenu.Create(self);
for i:=0 to 2 do
myitem[i]:=tmenuitem.Create(self);
myitem[0].caption:='java' ;
myitem[0].Hint:='j' ;
myitem[1].caption:='delphi' ;
myitem[1].Hint:='d' ;
mymainmenu.Items.Add(myitem[0]) ;
mymainmenu.Items.Add(myitem[1]) ;
myitem[0].onclick:=MyClick;
myitem[1].onclick:=MyClick;
end;
end.
Top
5 楼zyq_123(我们愿意和各界朋友,相聚珠海,拥有成功,拥抱明天。)回复于 2003-01-24 22:20:47 得分 0
mrTop




