很难的问题:关于动态创建TButton的问题(200分)

  • 主题发起人 主题发起人 小xiao鸟
  • 开始时间 开始时间

小xiao鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]我想建立一个窗体,上面放一个button,当点击这个button时,可产生一个新的button,
而且这个新的button可以响应一些事件(如drag,click等),应该如何去做,清指教[/red
[?]]
 

var
b1:tbutton;
begin
b1:=tbutton.create(self);
b1.parent:=form1;
b1.visible:=true;
b1.onclick:=某个方法,你需要作的事情
b1.ondrag:=某个方法,你需要作的事情
end;
 
这个难吗?
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var button: TButton;
begin
button := TButton.Create(self);
button.Parent := self;
button.Top := 10;
button.Left := 10;
button.Caption := 'click me';
button.OnClick := Button2Click;
button.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('hello');
end;
 
哈哈,有人比我早呀.
 
var button: TButton;
begin
button := TButton.Create(self);
button.Parent := self;
button.Top := 10;
button.Left := 10;
button.Caption := 'click';
button.OnClick := tempClick;
//tempclick定义形式为 Procedure tempclick(sender:Tobject);不能直接写成Procedure tempclick;
button.Show;
end;
 
同意,方法一样!知道就不难,不知道不就难了落~!
 
我认为 newbutton: TButton;
应该是全局的,不能在过程或者函数中定义,否则你将不能访问
 
如果需要动态生成很多个呢??
比方说是个八个的,用户可以输入一个数字
然后按顺序生成?

如果要访问的话就得是全局的,
如果只是生成以后就不管了,让他自己去响应函数去的话,局部就可以了
 
你定义的Button一定是全局的,否则你不能访问!
所响应的事件处理过程其实是一个指针,你直接赋值就可以了。
For Example:
NewButton.OnClick:=MyClick;
你动态创建的Button要有一个Parent,但是还应该有一个Name(切记)
 
Produce myclick(sender:Tobject);
这个函数可以在该单元的private或public或protected里声明看需要
button.OnClick := myClick;
把指针地址负给button.onclick可以在窗体create时负值,当然在过程里负也没问题
其实这是一种模式设计,属于事件委托,也就是事先在控件里定义好一个该类事件地址
再把委托事件对象负给控件对象中的属性即:onclick,但相互声明参数要一致。
dotnet,java 里也是这样的,delphi一般情况下会自动加入委托事件,当然自定义也可以拉
 
private
procedure NewClick(Sender: TObject);
end;
var
MyButton : Tbutton;

procedure TForm1.Button1Click(Sender: TObject);
begin
//创建
MyButton :=tbutton.create(self);
MyButton .parent:=form1;
MyButton .visible:=true;
MyButton.left := 11;
MyButton.top := 11;
MyButton.height := 11;
MyButton.width := 11;
MyButton .onclick:= NewClick;
///MyButton .ondrag:=某个方法,你需要作的事情,类似Click事件

end;
procedure TForm1.NewClick(Sender: TObject);
begin
showmessage('Designed Click')
end;
 
這樣豈不是要定義n個button變量??
 
這樣豈不是要定義n個button變量??
 
后退
顶部