unit main;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls,shellapi;type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ary1: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure createbutton;
    procedure myclick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  btn:Tbutton;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
createbutton;
end;procedure Tform1.createbutton;
var
  i:integer;
begin
  for i:=1 to 3 do
  begin
  btn:=TButton.Create(nil);
  btn.Top:=40;
  btn.Left:=i*80;
  btn.Width:=75;
  btn.Height:=24;
  btn.Caption:='clik'+intToStr(i);
  btn.Parent:=form1;
  btn.onclick:=myclick;
  end;
end;procedure Tform1.myclick(Sender: TObject);
begin
with btn do
if caption='click1' then
shellexecute(0,nil,'notepad.exe',nil,nil,sw_normal);
if caption='click1' then
shellexecute(0,nil,'cmd.exe',nil,nil,sw_normal);
if caption='click1' then
shellexecute(0,nil,'cmd.exe',nil,nil,sw_normal);
end;end.这样子可以生成按钮,但是单击事件不行呀~~帮帮忙

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure OnBtnClick(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
      btn: array[1..4] of TButton;
    begin
       for i:=1 to 4 do
       begin
           btn[i]:= TButton.Create(Self);
           btn[i].Parent:= Form1;
           btn[i].Name:='btn_'+IntToStr(i);
           btn[i].Height:= 25;
           btn[i].Width:= 75;
           btn[i].Top:= 10+25*(i-1);
           btn[i].Left:= 10;
           btn[i].Visible:= True;
           btn[i].OnClick:= OnBtnClick;
       end;
    end;procedure TForm1.OnBtnClick(Sender: TObject);
    begin
       if TButton(Sender).Name='btn_1' then
           ShowMessage('btn_1 click');
       if TButton(Sender).Name='btn_2' then
           ShowMessage('btn_2 click');
       if TButton(Sender).Name='btn_3' then
           ShowMessage('btn_3 click');
       if TButton(Sender).Name='btn_4' then
           ShowMessage('btn_4 click');
    end;end.
      

  2.   

    你的代码有个地方写错了
    btn.Caption:='clik'+intToStr(i); //初始化这里 是 clik
    而onclick事件里
    if caption='click1' then //这里是 click
    shellexecute(0,nil,'notepad.exe',nil,nil,sw_normal);当然单击事件没有反应了阿
      

  3.   

    解决方法如下:
    1、定义一事件过程如:procedure MyBitBtn1Click(Sender: TObject);
    2、将定义一事件过程赋予Button
    需要代码的话,请给我联系[email protected] 不过你得给我分