本人打算声明一个普通的procedure,然后将其指针赋予菜单项MenuItem的OnClick事件(TNotifyEvent指针),编译报“类型无效”;尝试用一个Form的方法(响应该Form的某菜单项的OnClick事件)赋予原来那个菜单项的OnClick,倒是可以实现。
不知那位大侠能帮我把程序再提高一些?就是实现用普通的过程指针转换成TNotifyEvent指针?
不知那位大侠能帮我把程序再提高一些?就是实现用普通的过程指针转换成TNotifyEvent指针?
解决方案 »
- 请问这个问题该怎么解决啊???
- 关于“length函数使用时报错”的问题!【附源码和错误信息】‘Unsatisfied forward or external declaration’
- ADO通过TCPIP连接数据库的问题
- 开发的软件使用SQLServer2000数据库,打包时能让数据库、数据文件自动安装么?(全自动安装)
- 如何解决鼠标滚动问题?
- 马上找工作了,带什么样的作品招聘单位才看得上呢?
- 谁能用通俗的语言让我明白句柄这个词的含义??
- 为何我的MediaPlay不能播放较大的AVI文件(如200M), 小文件则可以望高手指点一二?
- 怎么用Qreporte打印第一页正常,第二页就是黑呼呼一片了
- 有关listview的问题?
- 我用的数据库是ms server200,在delphi中设置了查询,怎么把结果输出到excel中?
- 100分:数据库连结(ADOconnection)。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
fdgg1: TMenuItem;
procedure ff(sender:tobject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.ff(sender: tobject);
begin
showmessage('ffff');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
fdgg1.OnClick := ff;
end;end.
请大家去 http://www.new7wonders.com/c/voting.php 投长城一票
应该这样
var
Form1: TForm1;mm:TNotifyEvent ;implementation{$R *.dfm}procedure mmm(Sender: TObject);
begin
showmessage(' ');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
@mm:=pointer(@mmm);
button1.OnClick := mm;
end;
Form1: TForm1;
mm:TNotifyEvent ;implementation{$R *.dfm}
procedure TForm1.OnFormCreate(Sender: TObject);
var
item:tmenuitem;
begin
mm:=test;
item:=tmenuitem.create(self);
item.onclick:=mm;
mainitem1.add(item);
end;
procedure TForm1.test(Sender: TObject);
begin
showmessage(tmenuitem(sender).caption);
end;
直接来:
var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.OnFormCreate(Sender: TObject);
var
item:tmenuitem;
begin
item:=tmenuitem.create(self);
item.onclick:=test;
mainitem1.add(item);
end;
procedure TForm1.test(Sender: TObject);
begin
showmessage(tmenuitem(sender).caption);
end;
var
obj:tobject;
begin
mm(obj);
end;
不过@取出来的函数的入口点没必要再用Pointer转化,直接可以复制给另一个函数入口点。
另外两位没理解我的意思,恕不能给分了,抱歉!