恳请回答如何触发程序中用CREATE产生的BUTTON?(50分)

  • 主题发起人 主题发起人 rmaohua
  • 开始时间 开始时间
不明白什么意思!
是要动态生成Button还是怎么样?
如果是要求动态生成Button,可以:
var
myBtn:TButton
begin
myBtn.Create
myBtn.Left:=xxx
myBtn.Top :=xxx
...
myBtn.Free
end;
 
myBtn->Click();
 
要对这个单独的Button编程怎么实现呢?
如:点击这个生成的Button就showmessage("Hello World")呢?
 
事先定义一个procedure

procedure MyClick( );
....

然后
MyBtn.onClick:=MyClick;
 
Form中OnMouseClick事件
procedure form1.onmouseclick.........var x,y:integer
var button1:tbutton;
begin
button1.create(self);
end
 
大致同意 cheka, 好象.... 记不清了,试试吧。

事先定义一个procedure

procedure TForm1.Myclick(Sender: TObject);
....

然后
MyBtn.onClick:=MyClick;
 
同意cheka的

那个Procedure 的Param 必须同Button.OnClick
 
老问题。定义一个过程,然后把动态生成的控件的click事件指向该过程。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure MyClick(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.MyClick;
begin
ShowMessage('Hello!')
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with TButton.Create(Self) do
begin
Parent:=Self;
Left:=1;
Top:=1;
Caption:='Click me!';
OnClick:=Form1.MyClick
end
end;

end.
 
我想你的问题是用了create语句,但run时窗口中并没有出现你create的button.
这是因为你还没有设置此button的parent属性:
button1:=tbutton.create(self);
button1.parent:=form1{或其他容器类控件}
如果不设top,left,则默认以parent为参照,top=0,left=0
 
补充一下,如果你的Button有多个,数目事先不知道的,
而所需要进行的操作又不一样的话,

可以在创建的时候为每个Button.Tag编个号,
然后再OnClick响应函数中根据对(Sender As TButton).Tag的判断已执行不同操作。
 
var mybutton:tbutton;
begin
mybutton:=tbutton.create(application);
mybutton.parent:=form1;
mybutton.left:=50;
mybutton.top:=50;
mybutton.caption:='button1';
end;
要在use中加入 StdCtrls(如果没有的话)
 
在哪里或什么时候需要创建BUTTON?可以说清楚吗?:)
 
多人接受答案了。
 
后退
顶部