动态添加一个菜单,想把这个菜单的onclick事件与一个函数对应起来,可是报错!!
unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;var
pop : TPopupMenu;
i1: TMenuItem;
i2: TMenuItem;procedure popMenu();
implementation
procedure i1Click(Sender: TObject);
begin
showmessage('dddd');
end; procedure popMenu();
begin
pop := TPopupMenu.Create(nil);
i1 := TMenuItem.Create(pop);
i2 := TMenuItem.Create(pop);
i1.Caption :='y1';
i2.Caption :='y2'; i1.OnClick := i1Click;//此处报错!!!!
pop.Items.Insert(0,i1);
pop.Items.Insert(1,i2); pop.Popup(100,100); end;
end.错误::
[Error] Unit3.pas(31): Incompatible types: 'method pointer and regular procedure'
[Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit3.pas'
到底怎么连接这个事件!!!谢谢!!!!
unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;var
pop : TPopupMenu;
i1: TMenuItem;
i2: TMenuItem;procedure popMenu();
implementation
procedure i1Click(Sender: TObject);
begin
showmessage('dddd');
end; procedure popMenu();
begin
pop := TPopupMenu.Create(nil);
i1 := TMenuItem.Create(pop);
i2 := TMenuItem.Create(pop);
i1.Caption :='y1';
i2.Caption :='y2'; i1.OnClick := i1Click;//此处报错!!!!
pop.Items.Insert(0,i1);
pop.Items.Insert(1,i2); pop.Popup(100,100); end;
end.错误::
[Error] Unit3.pas(31): Incompatible types: 'method pointer and regular procedure'
[Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit3.pas'
到底怎么连接这个事件!!!谢谢!!!!
解决方案 »
- delphi 怎么判断一个动态库是否注册!
- delphi的vcl form和windows form有什么区别吗?
- 请问谁有DEPHI6的皮肤控件?
- 如何修改报表的宽度
- 如何屏蔽父控件的属性?
- 如何检测EDIT中输入的内容是数据库A表中一字段的内容?
- 在a表中,有id字段,其值分别为5,7,9,11,23等,如何使id按照任何要求的顺序显示,如:显示顺序为:9,23,7,5,11.且要对id进行distinct和分组.
- 看书遇到一个问题谁来看看……(十万火急)!!
- 请问如何做一个自己定义纸张大小,打印内容及打印位置
- 一个三类结构的问题,凡了我好几个星期了!
- 如何批量输入字段内容
- 怎么取得网页数据?
必须申明?
还是有错误!!!
错误::
[Error] Unit3.pas(31): Incompatible types: 'method pointer and regular procedure'
[Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit3.pas'
private
procedure i1Click(Sender:TObject); //把方法放在某个类里
end;implementationprocedure TForm1.i1Click(Sender: TObject);
begin
showmessage('dddd');
end;
unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;type TForm1=class(TForm)
private
procedure i1Click(sender:TObject);//把方法放在某个类里
end;var
pop : TPopupMenu;
i1: TMenuItem;
i2: TMenuItem;
procedure popMenu();implementation procedure TForm1.i1Click(sender: TObject);
begin
showmessage('dddd');
end; procedure popMenu(); begin
pop := TPopupMenu.Create(nil);
i1 := TMenuItem.Create(pop);
i2 := TMenuItem.Create(pop);
i1.Caption :='y1';
i2.Caption :='y2'; i1.OnClick := i1Click;//还是出错
pop.Items.Insert(0,i1);
pop.Items.Insert(1,i2); pop.Popup(100,100); end;
end.
错误:
[Error] Unit3.pas(38): Undeclared identifier: 'i1Click'
[Hint] Unit3.pas(13): Private symbol 'i1Click' declared but never used
[Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit3.pas'
到底怎么回事呀!!!!
TForm1=class(TForm)
end;var
Form1:TForm1;之类的语句。这时就像我之前说的那样改,然后将
i1.OnClick := i1Click;//还是出错
改成
i1.OnClick := Form1.i1Click; //Form1是i1Click所在的类的对象,必须已经创建。