我是用如下代码生成的窗口,ACC是记录创建窗体的数目
  ACC := ACC + 1;
  with TForm.Create(nil) do
    begin
    Name := 'Form' + IntToStr(ACC);
    Caption := Name;
    Position := poMainFormCenter;
    //OnClick := MyFormClick;
    Show;
    end;MyFormClick的函数声明,写成TForm.MyFormClick(...)这样是不能运行的,那我应该如何注册窗体里的事件呢?

解决方案 »

  1.   

    procedure MyFormClick(Sender: TObject);
      

  2.   

    不能编译,错误提示:
    Incompatible types:'method pointer and regular procedure'
      

  3.   

    procedure MyFormClick(Sender: TObject);
    声明是不放在公共区域了,你把他放私有部分,应该不会出错的,
    但是我不知道原因:)
      

  4.   

    我没在implementation之前有声明“procedure MyFormClick(Sender: TObject);”,所以MyFormClick是一直都属于私有的。公有和私有都出现这个错误:Incompatible types:'method pointer and regular procedure'
      

  5.   

    我指的私有,是放在private内
    并不是说在实现节内申明并定义
      

  6.   

    type
      TMyForm = class(TForm)
        ...
      public
        procedure MyFormClick(Sender: TObject);
      end;implementationprocedure TMyForm.MyFormClick(Sender: TObject);
    begin
      //do something;
    end;
    --------------------------------------------------  ACC := ACC + 1;
      with TMyForm.Create(nil) do
        begin
        Name := 'Form' + IntToStr(ACC);
        Caption := Name;
        Position := poMainFormCenter;
        OnClick := MyFormClick;
        Show;
        end;