我想在程序中让程序自动建立快捷菜单,比如说在我的程序单元中有几Button按钮,程序运行时,各按钮的名称能自动加入到快捷菜单中,并能响应其事件,我用下这段代码总是出错,各位同仁帮帮我吧
var pop:tpopupmenu;
i:integer;
begin
pop:=tpopupmenu.Create(nil);
for i:=0 to componentcount-1 do
begin
if components[i] is TButton then
begin
with pop.Items do
begin
add(Newitem(TButton (components[i]).Caption,0,false,true,TButton (components[i]).OnClick ,0,'menuitem'+inttostr(i)))
end;
end;
end;
Form1.PopupMenu:=pop;
var pop:tpopupmenu;
i:integer;
begin
pop:=tpopupmenu.Create(nil);
for i:=0 to componentcount-1 do
begin
if components[i] is TButton then
begin
with pop.Items do
begin
add(Newitem(TButton (components[i]).Caption,0,false,true,TButton (components[i]).OnClick ,0,'menuitem'+inttostr(i)))
end;
end;
end;
Form1.PopupMenu:=pop;
下面的函数经过测试,正确var
Form1: TForm1;
pop: TPopupMenu; //声明为全局变量implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
pop:=TPopupMenu.Create(Form1);
//最好给它指定Owner,pop可以在Form1关闭时自动释放,
//免得造成内存漏洞
for i:=0 to Form1.ComponentCount-1 do
if Form1.Components[i] is TButton then
pop.Items.add(Newitem(TButton (components[i]).Caption,0,false,true,TButton (components[i]).OnClick ,0,'menuitem'+inttostr(i)));
Form1.PopupMenu:=pop;
end;