按分析出的错误的多少和分析原因的详细给分。谢谢!unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, StdCtrls;
type
  TTBPhone = class(TToolBar)
    procedure PhoneClick(Sender: TObject);
  end;type
  TForm1 = class(TForm)
    Button1: TButton;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  BtnPhone:array [1..10] of TToolButton;
  i:integer;
begin
  for i:= 1 to 10 do
  begin
    BtnPhone[i] := TToolButton.Create(self);
    BtnPhone[i].Parent := ToolBar1;
    BtnPhone[i].Height := 65;
    BtnPhone[i].Width := 65;
    case i of
    1:
    begin
      BtnPhone[i].Caption := '拨/挂';
      BtnPhone[i].OnClick := TTBPhone.PhoneClick(BtnPhone[i]);
    end;
    else
    end;  end;
end;procedure TTBPhone.PhoneClick(Sender: TObject);
begin
  showmessage('phone');
end;end.

解决方案 »

  1.   

    For i:=1 to 10 Do
      Begin
        BtnPhone[i] := TToolButton.Create(self);
        BtnPhone[i].Parent := ToolBar1;
        BtnPhone[i].Height := 65;
        BtnPhone[i].Width := 65;
        BtnPhone[i].Onclick:=BtnClkHandler;
      End;procedure TTBPhone.BtnClkHandler(Sender:TObject);
    begin
      with Sender as TButton do
        begin
          //做你想做的 
        end;
    end;
      

  2.   

    to cornermoss(角落的青苔:射手无弓?你混得太糗了吧~)
    不行啊,undeclared identifier :btnclkhandler
    我在前面已经声明过的。你调试通过了吗?
      

  3.   

    For i:=1 to 10 Do
      Begin
        BtnPhone[i] := TToolButton.Create(self);
        BtnPhone[i].Parent := ToolBar1;
        BtnPhone[i].Height := 65;
        BtnPhone[i].Width := 65;
        BtnPhone[i].Name := Phone+inttostr(i);
        BtnPhone[i].Visible := True;    BtnPhone[i].Onclick:=BtnClkHandler;
      End;procedure TTBPhone.BtnClkHandler(Sender:TObject);
    begin
      with Sender as TButton do
        begin
          //做你想做的 
        end;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var
      i:integer;
      BtnPhone:array[1..10] of TToolButton;
    begin
      For i:=1 to 10 Do
      Begin
        BtnPhone[i] := TToolButton.Create(self);
        BtnPhone[i].Parent := ToolBar1;
        BtnPhone[i].Height := 65;
        BtnPhone[i].Width := 65;
        BtnPhone[i].Onclick:=BtnClkHandler;
      End;
    end;procedure TForm1.BtnClkHandler(Sender:TObject);
    begin
      with Sender as TToolButton do
        begin
          showmessage('phone');
        end;
    end;
      

  5.   

    问题的主要原因可能出在给自动创建的控件的事件赋值的过程中,因按以下方法:
    1、先声明一个与所创建控件的父控件相对应的事件参数一致的全局过程;
    如在本例中声明的PhoneClick过程;
    2、给所创建的控件的事件赋值,赋值时,只需给出过程名就可以不用给参数。
    如:
    BtnPhone[i].OnClick := PhoneClick;
    不知可以不?
      

  6.   

    to jieson(风之子):这句错了,
    procedure TTBPhone.BtnClkHandler(Sender:TObject);
    应该为procedure TForm1.BtnClkHandler(Sender:TObject);
    申明在TForm1的私有段
      

  7.   

    with Sender as TButton do 也该改
    with Sender as TToolButton do
      

  8.   

    cornermoss(角落的青苔:射手无弓?你混得太糗了吧~) 的方法是对了!
    我已经试过了