关于TNotifyEvent事件响应函数指针

slough 2002-09-23 10:00:28
本人打算声明一个普通的procedure,然后将其指针赋予菜单项MenuItem的OnClick事件(TNotifyEvent指针),编译报“类型无效”;尝试用一个Form的方法(响应该Form的某菜单项的OnClick事件)赋予原来那个菜单项的OnClick,倒是可以实现。
不知那位大侠能帮我把程序再提高一些?就是实现用普通的过程指针转换成TNotifyEvent指针?
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
slough 2002-09-24
  • 打赏
  • 举报
回复
感谢Del_C_Sharp的发表!!
不过@取出来的函数的入口点没必要再用Pointer转化,直接可以复制给另一个函数入口点。
另外两位没理解我的意思,恕不能给分了,抱歉!
stanely 2002-09-23
  • 打赏
  • 举报
回复
TNotifyenent其实就是一个指针类型。

mm:TNotifyEvent ;这句就是定义一个指针。当然初始化为空了。

如果你给mm负值指向一个procedure 的话,可以这样使用:
var
obj:tobject;
begin
mm(obj);
end;
stanely 2002-09-23
  • 打赏
  • 举报
回复
实现这个功能,你用TNotufyevent干什么?舍近求远呀!
直接来:
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;
stanely 2002-09-23
  • 打赏
  • 举报
回复
var
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;
del_c_sharp 2002-09-23
  • 打赏
  • 举报
回复
楼上可能没理解清楚.
应该这样


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;
newyj 2002-09-23
  • 打赏
  • 举报
回复
没有问题
unit Unit1;

interface

uses
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 投长城一票

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧