procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  var
  Btn:TButton;
begin
  Btn:=TButton.Create(Form1);
  Btn.Parent:=Form1;
  Btn.Left:=X;
  Btn.top:=Y;
  Btn.Width:=Btn.Width + 50;
  Btn.Caption:=Format('Button at %d,%d',[X,Y]);
end;
我使用的是OnMouseDown事件 程序要实现的是:在鼠标单击窗体的位置上建立按钮
并用标题表明确切的位置   可为什么要错啊    我是个菜鸟 什么都不懂 请大家多多指教  小妹不胜感激~~~~

解决方案 »

  1.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Btn:TButton;
    begin
      Btn:=TButton.Create(Form1);
      Btn.Parent:=Form1;
      Btn.Left:=X;
      Btn.top:=Y;
      Btn.Width:=Btn.Width + 50;
      Btn.Caption:=Format('Button at %d,%d',[X,Y]);
    end;
      

  2.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    //var
      var
      Btn:TButton;
    begin
      Btn:=TButton.Create(Form1);
      Btn.Parent:=Form1;
      Btn.Left:=X;
      Btn.top:=Y;
      Btn.Width:=Btn.Width + 50;
      Btn.Caption:=Format('Button at %d,%d',[X,Y]);
    end;
      

  3.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    //var  多了
      var
      Btn:TButton;
    begin
    //  Btn:=TButton.Create(Form1); 这里面使用Form1不是好习惯
      Btn:=TButton.Create(Self);
      Btn.Parent:=Form1;
      Btn.Left:=X;
      Btn.top:=Y;
      Btn.Width:=Btn.Width + 50;
      Btn.Caption:=Format('Button at %d,%d',[X,Y]);
    end;
      

  4.   

    对不起  我是在复制的时候多了一个var  其实我程序里只有一个    但是还是有错啊 怎么办????
      

  5.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
      Procedure CreateBtn;
        var
        Btn:TButton;
      begin
        Btn:=TButton.Create(Form1);
        Btn.Parent:=Form1;
        Btn.Left:=X;
        Btn.top:=Y;
        Btn.Width:=Btn.Width + 50;
        Btn.Caption:=Format('Button at %d,%d',[X,Y]);
      end;
    begin
      CreateBtn;
    end;
      //来抢分的,嘻嘻
      

  6.   

    Tbtuuon是一个组件类,在定义之后还要建立,也就是
     var Btn:Tbutton;
     Btn:=Tbutton.create(self);
     Btn.Parent:=Form1;
     这样之后才能用。我以前也遇到过这样的问题呢.
      

  7.   

    //  Btn:=TButton.Create(Form1); 这里面使用Form1不是好习惯
      Btn:=TButton.Create(Self);
    //这也不是好习惯吧, pazee(耙子) ,如果返上边的那种写法的看,这种就会死QQ的,嘻嘻
    看在什么情况下,对吗?
      

  8.   

    调试通过 记得要引用StdCtrls单元
    Uses StdCtrls;
      

  9.   

    To snowpine999([彼岸花]) 
      嘻嘻,嘻嘻;一起学习了啦;
    To  jan2002(阿吉) 
      只要有一个Std控件,StdCtrls就自动的加上去了;
      

  10.   

    请问各位GG  Sender: TObject;      这一句是什么意思??? 有什么用??
                Button: TMouseButton; 这一句又是什么意思? 有什么用?
                Shift: TShiftState;   这一句又是什么意思? 有什么用?
                X, Y: Integer         这一句又是什么意思? 有什么用?
    小妹现在是从"零"开始学习Delphi 才学几个星期 总是要遇到好多好多这样那样的问题  我一遇到问题 就不知道该怎么办  身边也没有老师可以指点指点我  只好请教大家了  希望GG多帮帮我这个入门菜鸟~_~
      

  11.   

    Sender: TObject//这个就是说Sender属于一个Tobject类型;
    Button:TmouseButton://这个判断建值是什么..
    你可以查一查:
      TShiftState = set of (ssShift, ssAlt, ssCtrl,
        ssLeft, ssRight, ssMiddle, ssDouble);
      TMouseButton = (mbLeft, mbRight, mbMiddle);这些就是了;
      

  12.   

    senhor(百合) !!!!!!!!!!!!!!!!!!!
    你真是气死我了   你~~~~~~~~~~~你~~~~~~~~~~~~~~~
    你不知道我才学Delphi几个星期呀  请说国语好么??? 
    你说得真是太精辟了!!  我一句都看不懂!!!!!!!!!!!!!!!!!!!
    我是个菜鸟耶~~~~~
      

  13.   

    哎呀  senhor(百合) !!!!!!!!!!!!!!!!!!!   你有QQ号没有  我加你 这样刷新来刷新去的看斗都不舒服  慢得象蜗牛  QQ联系方便些  嘻  我下班了   下午见~~~
      

  14.   

    给你一个例子:procedure TForm1.FormCreate(Sender: TObject);
    var
    button : TButton;
    i:integer;
    begin
    button:= TButton.Create (self);
    button.Parent :=  form1;
    button.name := 'buttonxx';
    button.Left :=250;
    button.Top:=130;
    button.Width :=80;
    button.Height :=30;
    button.OnClick :=newbutton;
    end;procedure tform1.newbutton(sender:tobject);
    begin
    showmessage('ok');
    end;另外,别忘记了声明procedure newbutton(sender:tobject);
      

  15.   

    to 百合MM//  Btn:=TButton.Create(Form1); 这里面使用Form1不是好习惯
    这句话一点错也没有!!你想:在类的方法里对对象进行操作,这本身就违背面向对象的原则!!可能这么说你不觉的那么换个方式,你看下面的代码VAR Form1,Form2:Tform1;
    ……procedure TForm1.FormCreate(Sender: TObject);
    begin
      self.caption:= '百合MM';
    end;这样,所有的对象创建以后,caption都是‘ 百合MM ’
    而如果
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Form1.caption:= '百合MM';
    end;结果是什么呢?只有Form1的caption是‘ 百合MM ’
      

  16.   

    在下面中的uses部分中添加一'StdCtrls'就行了
    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
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
     var
      Btn:TButton;
    begin
      Btn:=TButton.Create(Form1);
      Btn.Parent:=Form1;
      Btn.Left:=X;
      Btn.top:=Y;
      Btn.Width:=Btn.Width + 50;
      Btn.Caption:=Format('Button at %d,%d',[X,Y]);
    end;end.
      

  17.   

    bnabinge(狂欢)   在uses 不加你那个StdCtrls 也可以呀 为什么要加它呀???????????
      

  18.   

    虽然没什么问题,但我觉得 btn 这个变量最好不要在这个事件过程中声明为局部变量。