我这样定义了一下,编译能通过,但是怎样定义Click呢?
type
  TClick=procedure(sender:tobject) of object;implementation
var
click:tclick;
////////////////////////
我这样定义了一下,编译能通过,但是怎样定义Click呢?

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure aaa(Sender: TObject);
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.aaa(Sender: TObject);
    begin
      showmessage('Hello');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
       Self.OnClick:=aaa;
    end;end.
      

  2.   

    我不知道你的Self是代替什么控件,
    但是.OnClick前的对象应是可视控件类
    可以用 (Object As TClass).OnEvent 实现
    例如:  (Sender As TButton).OnClick;
    [email protected]
      

  3.   

         其实就如 reaky(Reaky) 的那样简单
      

  4.   

    我的意思是我自己的procedure是一个全局的过程,不是任何类的成员。
    但是我想自动生成一个TMenuitem,并且给这个Menuitem指定onclick响应函数,不想这个函数是任何类的成员,我以前隐约记得可以用of object来修饰这个全局procedure,但是怎么用我忘记了,还望提点!我的意思是我自己的procedure是一个全局的过程,不是任何类的成员。
    但是我想自动生成一个TMenuitem,并且给这个Menuitem指定onclick响应函数,不想这个函数是任何类的成员,我以前隐约记得可以用of object来修饰这个全局procedure,但是怎么用我忘记了,还望提点!我的意思是我自己的procedure是一个全局的过程,不是任何类的成员。
    但是我想自动生成一个TMenuitem,并且给这个Menuitem指定onclick响应函数,不想这个函数是任何类的成员,我以前隐约记得可以用of object来修饰这个全局procedure,但是怎么用我忘记了,还望提点!我的意思是我自己的procedure是一个全局的过程,不是任何类的成员。
    但是我想自动生成一个TMenuitem,并且给这个Menuitem指定onclick响应函数,不想这个函数是任何类的成员,我以前隐约记得可以用of object来修饰这个全局procedure,但是怎么用我忘记了,还望提点!
      

  5.   

    源代码如下:
    ///////////
    procedure Myproc(parentmenu:tmenuitem);//不是Tform1.myproc!!!
    var
    newmenu;
    begin
    newmenu:=tmenuitem.create(parentmenu);
    newmenu.caption:='sss';
    newmenu.onclick:=???????????????//怎样定义??我想知道of object修饰付的用法。
    parentmenu.add(newitem);end;
      

  6.   

    不好意思,先前看这个问题很简单,后来仔细考虑如下.先前答错了,不好意思。
    以下程序编译通过。d3+win2000
    // Unit1.pas 部分
    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls,Unit2;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        procedure Click; override;
        { Public declarations }
      end;
      procedure aaa(Sender: TObject);
    var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Click;
    var Sender:TObject;
    begin
      inherited Click;
      aaa(Sender);
    end;procedure aaa(Sender: TObject);
    begin
      ss:='Hello';
      showmessage(ss);
    end;end.// Unit2.Pas 公共过程部分
    Unit2.pas
    unit Unit2;interfacevar ss:string;implementationprocedure aaa(Sender: TObject);
    begin
      ss:='Hello';
    end;end.
    如有不明处,e-mail:[email protected]
      

  7.   

    感谢你的帮助,但事情看请我的本意:)源代码如下:
    ///////////
    procedure Myproc(parentmenu:tmenuitem);//不是Tform1.myproc
    var
    newmenu;
    begin
    newmenu:=tmenuitem.create(parentmenu);
    newmenu.caption:='sss';
    newmenu.onclick:=???????????????//怎样定义??我想知道of object修饰付的用法。
    parentmenu.add(newitem);end;/////////////
    感谢!
      

  8.   

    因为事件的响应函数类型为方法指针(Of Object),所以全局函数指针不能直接赋值,可以这样:
    type
      TA =class
        procedure AAA(sender:tobject);
      end;
    A:TA;procedure Myproc(parentmenu:tmenuitem);//不是Tform1.myproc
    var
    newmenu;
    begin
    newmenu:=tmenuitem.create(parentmenu);
    newmenu.caption:='sss';
    newmenu.onclick:=A.AAA;//必须保证A已被Create,并且在newmenu被释放前未被释放
    parentmenu.add(newitem);end;
      

  9.   

    可是全局函数procedure后面加上of object修饰不行么?
    of object修饰付干什么用的呢?
      

  10.   

    of object表示声明的是一个方法指针,它所指的是一个类的方法,可以把另一个对象的方法赋给这个指针,但不能把全局过程赋给这个指针,所以可以定义一个类,创建他的实例(一般就用窗体对象本身),然后...
    "全局函数procedure后面加上of object"本身就不对,of object只用在声明方法指针
      

  11.   

    看这样行否
    procedure Myproc(parentmenu:tmenuitem);//不是Tform1.myproc!!!
    var
    newmenu; TMenuItem;
    M: TMethod;begin
    newmenu:=tmenuitem.create(parentmenu);
    newmenu.caption:='sss';
    M.Code := @AA;
    M.Data := nil;
    //newmenu.onclick:=???????????????//怎样定义??我想知道of object修饰付的用法。
    newmenu.onclick:= TNotifyEvent(M);
    parentmenu.add(newitem);end;
      

  12.   

    那就
    M.Data := NewMenu;
      

  13.   

    昏,直接定义
    procedure MyClick(Sender:TObject);
    然后在你要处理的地方
    xxx.click := MyClick;
    就可以了!