例如:我动态创建一个按钮,他如何执行单击事件。原先静态创建时,直接在单击事件里写代码就行了,可动态创建,往哪里写啊。

解决方案 »

  1.   

    produce MyClick(Sender: TObject);  //定义自己的单击事件
    produce MyClick(Sender: TObject); //实现
    begin
      //
    end;
    var
      button: TButton;
    begin
      button := TButton.Create(self);
      button.parent := self;
      button.caption := 'btn1';
      button.click := MyClick;  //给事件赋值 
    end;
      

  2.   

    同意一楼!,只是...button.OnClick := MyClick(Sender);  //
      

  3.   

    先写一个事件,然后赋给它
    例如
      1. 先定义一个过程 buttontest(里面的参数直接想写哪个控件就用对应事件的参数)
      2. 之后  button.onclick := buttontes就可以了
      

  4.   

    例子如下:
    //Unit1 Code
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure ButtonClick(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.ButtonClick(Sender: TObject);
    begin
      TButton(Sender).Caption:='OnClick Event OK!';
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      With TButton.create(Self) do
      begin
        parent:=Form1;
        OnClick:=ButtonClick;
      end;
    end;end.
      

  5.   

    var
      button: TButton;
    begin
      button := TButton.Create(self);
      button.parent := self;
      button.caption := 'btn1';
      button.left := 100;
      button.top := 200;
      button.onClick := MyClick;  //给事件赋值 ---
    end;
      

  6.   

    一般的可以,如果类似于:
    控件的事件声明:
    ………………
    Taa:procedure(param1,param2……)of object; 
    ………………
    xx=class
    …………
    Faa:Taa;
    procedure aa:Taa read Faa write Faa;
    这样的如何给事件赋值
      

  7.   

    写错了,应该是
    控件的事件声明:
    ………………
    Taa:procedure(param1,param2……)of object; 
    ………………
    xx=class
    …………
    Faa:Taa;
    proprety aa:Taa read Faa write Faa;
    这样的如何给aa事件赋值
      

  8.   

    谢谢各位的积极回复==================================
    回复人: boatzm(晓舟)【塑料的玫瑰花】(●)  
    你试过了么?
    ========================================
    回复人: yywulan(鬼见怕) 
       先自定义一个事件过程。然后在:=给它不就得了吗?
    -------------------------------------------------  
    能通过么?能给个例子么? 
      

  9.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        procedure ButtonClick(Sender:TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      i:integer=1;
    implementation{$R *.dfm}procedure TForm1.ButtonClick(Sender: TObject);
    begin
      ShowMessage((Sender as TButton).Caption);
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var tmpbutton:TButton;
    begin
      if Button=mbLeft then
      begin
        tmpbutton:=TButton.Create(self);
        tmpbutton.Parent:=Self;
        tmpbutton.Name:='Button'+IntToStr(i);
        tmpbutton.Caption:='Button'+IntToStr(i);
        tmpbutton.OnClick:=ButtonClick;
        tmpbutton.Left:=X;
        tmpbutton.Top:=Y;
        Inc(i);
      end;
    end;
    end.
      

  10.   

    to hare007(横刀立马) ???一直这么用的呀?大量使用,怎么了?