我的程序如下:
procedure CreateForm(Cap:String);
var FForm:TForm;
    Lab  :TLabel;
    Edt  :TEdit;
    Btn  :TBitBtn;
    i    :integer;
    St   :Tstrings;begin
//建立窗体;
St := Tstringlist.Create;
St.Clear ;
St.Add('审核');
St.Add('取消');
FForm := TForm.Create(nil);
with FForm do
begin
 Caption := Cap;
 Width := 300;
 Height := 400;
 Position := poDesktopCenter;
 BorderStyle := bsSingle;
 BorderIcons := [BiSystemMenu];
end;
//建立LABEL和BUTTON;
for i:= 1 to DM.ADOConfirm.FieldCount -1 do
begin
 Lab := TLabel.Create(FForm);
 Lab.Name := 'Label'+inttoStr(i);
 Lab.Caption := DM.ADOConfirm.Fields [i].DisplayName ;
 Lab.Top := Lab.Height + (i-1)*25;
 Lab.Left := 30;
 Lab.Width := 50;
 Lab.AutoSize := false;
 Lab.Parent := FForm;
 Edt := TEdit.Create(FForm);
 Edt.Name := 'Edit'+inttoStr(i);
 Edt.Text := DM.ADOConfirm.Fields [i].AsString ;
 Edt.Top := Lab.Top - 1;
 Edt.Left := 120;
if (i in [1,2,DM.ADOConfirm.FieldCount-1,DM.ADOConfirm.FieldCount-2]) then
 begin
  Edt.ReadOnly := true;
  Edt.Color := clScrollBar;
 end;
 Edt.Parent := FForm;
if i < 3 then
begin
 Btn := TBitbtn.Create(FForm);
 Btn.Name := 'TBitBtn'+inttostr(i);
 Btn.Caption := St[i-1];
 Btn.Top := 320;
 Btn.Left := 60 + i*20 + Btn.Width ;
 Btn.Parent := FForm;
// Btn.Click := FClose(Sender);
 Btn.OnClick
 if i= 1 then
  Btn.OnClick := azFrmconfirm.BitBtn1Click;
  //AZSHPUB.Confirm;
 if i= 2 then
//  Btn.OnClick := AZSHPUB.FClose(FForm);
end;
end;
// Btn.OnClick := azFrmconfirm.BitBtn1Click;
 FForm.ShowModal;
end;procedure FClose(uForm:TForm);
begin
 uForm.Close;
end;procedure Confirm(Sender: TObject);
beginend;

解决方案 »

  1.   

    我想将ONCLICK 事件指向我定义的PROCEDURE,该怎么办?
      

  2.   

    Btn.OnClick := azFrmconfirm.BitBtn1Click;應該是這樣, 就是將對應的事件指定到预先定義好的例程中
      

  3.   

    Btn.OnClick := AZSHPUB.FClose(FForm);我是想实现这个!是在本地定义的;Btn.OnClick := azFrmconfirm.BitBtn1Click;这是我在其他地方定义的。
      

  4.   

    定义一个procedure然后传地址给你的Button的OnClick事件procedure MyBtnClick(Sender :TObject);
    begin
      //....
    end;Btn.OnClick := MyBtnClick;
      

  5.   

    把这个FForm:TForm定义成为全局变量
    ...
       Btn.OnClick := AZSHPUB.FClose;
    ...procedure AZSHPUB.FClose(Sender:TObject);
    begin
        FForm.close;
    end;
      

  6.   

    Btn.OnClick必须设置为对象方法
    因此不能把FClose赋值给Btn.OnClick属性,你可以这样先构造一个对象TShareFun = class(TObject)
    public
      procedure FClose(Sender: TObject);
    end;
    完成对象中的FClose方法
    procedure TShareFun.FClose(Sender: TObject)
    begin
      (Sender as TForm).Close;
    end;在interface部分声明一个该对象
      var
        ShareFun: TShareFun;在本Unit的最后加上:
    initlization
      ShareFun := TShareFun.Create;
    finalization
      ShareFun.Free;
    最后在你的CreateForm中使用:
      Btn.OnClick := ShareFun.FClose;
      

  7.   

    是这样吗?
    procedure CreateForm(Cap:String);
    var FForm:TForm;
        Lab  :TLabel;
        Edt  :TEdit;
        Btn  :TBitBtn;
        i    :integer;
        St   :Tstrings;
    proceder MyBtnClick(Sender :TObject);
    begin
      //....
    end;begin
    //...
    end;
      

  8.   

    TO :zwjchina(蒲石) ;
    按你的方法肯定可行,但是好麻烦!
    并且procedure TShareFun.FClose(Sender: TObject)
    begin
      (Sender as TForm).Close;
    end;
    不能执行。因为SENDER是TBITBTN。
    错误提示:  Invalid class typecase!
      

  9.   

    proceder MyBtnClick(Sender :TObject);
    begin
      //....
    end;procedure CreateForm(Cap:String);
    var FForm:TForm;
        Lab  :TLabel;
        Edt  :TEdit;
        Btn  :TBitBtn;
        i    :integer;
        St   :Tstrings;
    begin
    //...
    end;
      

  10.   

    楼上的你的方法不行。TO:  zzlingaaa(小舟)
      

  11.   

    TO :zwjchina(蒲石) 、 Sorder(剑客) 。
    感谢两位!
    谁有更好的方法么?
    下班前结贴!
      

  12.   

    proceder TForm1.MyBtnClick(Sender :TObject);
    begin
      //....
    end;
    应该行了
      

  13.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        procedure btnclick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnclick(Sender: TObject);
    begin
      showmessage('ok');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      btn: TButton;
    begin
      btn := TButton.Create(Form1);
      btn.Caption := 'test';
      btn.Width := 20;
      btn.Height := 20;
      btn.Top := 10;
      btn.Left := 10;
      btn.Parent := Form1;
      btn.OnClick := btnclick;
    end;end.