如果要处理一个TDBGrid的OntitleClick事件,只要在它对应的Events里双击OnTitleClick,Delphi即会自动帮我生成一个对应的空函数,可是现在dbGrid是动态生成的,我要在该dbGrid的OnTitleClick事件里写一些代码,怎么搞。

解决方案 »

  1.   

    转一些给你看看,有问题再问Tbutton *tmp=new Tbutton(this);
    tmp->Caption="ok";
    tmp->OnClick=abcd; //abcd为事先定义好的函数
    tmp->Parent=this;思想就是这样:动态生的组件是指在运行期创发的组件,这种组的事件显然不能在设计期响应,
    下谈谈怎样响应动态生成的组件的事件:如动态生成一按钮,然后响应onClick事件
    先定义:
    private
      MyBtn:TButton;
    public
    procedure MyBtnClick(Sender: TObject);
    implementation 
    //事先写好动态按钮响应onClick事件时的代码
    procedure TForm1.MyBtnClick(Sender: TObject);
    begin
    showmessage('我是动态创建的');
    //...你的代码
    end;
    //在适当的时候生成按钮,并将预先写好的事件句柄赋予onClick属性
    MyBtn:=TButton.Create(Form1);
    MyBtn.OnClick:=MyBtnClick;
    //要显示按钮必需要指定parent属性
    MyBtn.Parent:=form1;
    MyBtn.left:=10;
    MyBtn.top:=10;
    //别忘记适当的时候free掉
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
        procedure btnClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.btnClick(Sender: TObject);
    begin
      ShowMessage('ok');
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      mybutton:Tbutton;
    begin
      mybutton:=Tbutton.Create(nil);
      with mybutton do
      begin
        parent:=Form1;
        left:=100;
        top:=100;
        caption:='click';
        onclick:=btnClick;
      end;
    end;end.