在程序模块化过程中,一些具体功能要编成一个过程文件。而在过程中就要动态建立某一功能控件,和对功能控件的一些事件和过程进行编写。问题就是在过程中动态建立的控件的事件如何在过程中建立和编写。

解决方案 »

  1.   

    procedure myClick(Sender : TObject);procedure myClick(Sender : TObject);
    begin
      Showmessage('Click');
    end;procedure Button1.OnClick(Sender : TObject);
    var
      lLab : TLable;
    begin
      lLab := TLable.Create(self);
      lLab.Parent := Form1;
      lLab.OnClick := myClick;
      lLab.Caption := 'aaa';
    end;
      

  2.   

    创建动态的Button
    procedure TFrmMain.CreatPowerButton;
    var
       i,iArrayCount:Integer;
       iHeight:Integer;   
    begin
       iHeight:=30;
       iArrayCount:=0;
       SetLength(BnArray,0);BnArray是TButton数组
       for i:=0 to PowerIDList.Count-1 do
           if length(PowerIDList.Strings[i])=3 then
           begin
              Inc(iArrayCount);
              SetLength(BnArray,iArrayCount);
              BnArray[iArrayCount-1]:=TButton.Create(PanelOfTree);
              BnArray[iArrayCount-1].Parent   :=PanelOfTree;
              BnArray[iArrayCount-1].Height   :=iHeight;
              BnArray[iArrayCount-1].Caption  :=PowerNameList.Strings[i];
              BnArray[iArrayCount-1].OnClick  :=BnOnClick;//事件赋予
           end;    
    end;
    然后在写动态事件代码:
    procedure TFrmMain.BnOnClick(Sender: TObject);
    being
    //具体实现
    end;
      

  3.   

    引用所要建立对象的单元 uses stdUtils,....
    procedure CreateAObject(sender:Tobject);
    var
      dd:Tpanel;
    begin
      dd:=TPanel.create(Sender);
      dd.parent:=sender;
      dd.setbound(100,100,100,100);
    end;
    思想大致就是这样,没有调试。 :P
      

  4.   

    to DelUser(探索者)
    老是提示错误信息“未声明检验符myClick”,请问这是怎么回事谢谢!!还有就是激发它的事件时,该怎么定位到该控件数组的具体控件。
      

  5.   

    动态添加按钮,并排列<已调试>
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Panel1: TPanel;
        procedure Button1Click(Sender: TObject);
        procedure btnclick(sender:tobject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
     var
     i:integer;
     j:integer;
     btn:array of tbutton;
    begin
     setlength(btn,100);
     j:=0;
     for i:=0 to 16 do
     begin
       if (i=(5*j)+5) and (i<>0) then j:=j+1;
       btn[i]:=tbutton.Create(self);
       btn[i].Caption :='button' +inttostr(i);
       btn[i].Width:=50;
       btn[i].Height:=50;
       btn[i].Top:=j*(btn[i].Height+10) ;
       btn[i].Left:= (i-5*j)*btn[i].Width+10;
       btn[i].Parent:=self.Panel1 ;
       btn[i].OnClick:=btnclick;
     end;
    end;
    procedure tform1.btnclick(sender:tobject);
    var
    a:string;
    begin
      a:= tbutton(sender).Caption  ;
      application.MessageBox(pchar(a),'提示!');
    end;end.