这个问题让我急坏了,关于动态生成按钮(100分)

  • 主题发起人 主题发起人 舞鹤
  • 开始时间 开始时间

舞鹤

Unregistered / Unconfirmed
GUEST, unregistred user!
我想动态生成一个按钮
并且能够在这个动态生成的按钮上写入事件,也就是能让它做事
比如,窗体上面有一个叫新建的按钮
点击之后,能够在窗体上自动出现一个按钮
然后点击这个新生成的按钮
让它做事,如让它在MEMO1显示工程的名字
最好是带源码
 
论坛里面太多这样的帖子了
 
设置这个新的按钮的OnClick为你的一个希望他做什么事的函数。如:

procedure NewBtnClick(Sender :TObject);
....
....

Btn := TButton.Create(Self);
....初始化
Btn.OnClick := NewBtnClick;
 
你先写个过程,然后在生成按键是这样btn.onclick:=过程名
前天好象还有人问你可以搜索一下
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure myclick(sender:Tobject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure Tform1.myclick(sender:Tobject);
begin
showmessage('执行成功');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
mybutton:Tbutton;
begin
mybutton:=Tbutton.Create(self);
mybutton.Parent:=self;
mybutton.Caption:='按钮';
mybutton.OnClick :=myclick;

end;

end.
 
这个是很基本的东西,一般的书都有。还是自己做做吧!可以提高自己的编程能力。
 
private
procedure NewBtnClick(Sender :TObject);


procedure Form1.NewBtnClick(Sender :TObject);
....
....

Btn := TButton.Create(Self);
btn.parent:=form1;
....初始化
Btn.OnClick := Form1.NewBtnClick;
 
随便写一下。
声明一个过程
procedure ButtonClick(Sender: TObject);

过程实现(也就是按钮点击事件):
procedure TMainForm.ButtonClick(Sender: TObject);
begin
memo1.text.text:=Application.name;
end;
//创建按钮过程(你可以放到以按钮事件里):
var
Button:TButton;
begin
Button:=TButton.Create(Self);
Button.Parent:=Self;
//位置信息。
Button.Left:=20;
Button.top:=20;
//事件赋值,其实事件也就是属性。Ok了。
Button.OnClick:=ButtonClick;
Button.Caption:='动态按钮';

end;



 
TForm1 = class(TForm)
private
NewBtn: TButton;
procedure NewButtonClick(Sender: TObject);
end;

implementation

procedure TForm1.NewButtonClick(Sender: TObject);
begin
Memo1.Text := Caption;//Application.Title;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
NewBtn := TButton.Create(Self);
NewBtn.Parent := Self;
NewBtn.Left := 100;
NewBtn.Top := 50;
NewBtn.Width := 75;
NewBtn.Heigth := 25;
NewBtn.Caption := 'Click me';
NewBtn.OnClick := NewButtonClick;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if NewBtn <> nil then FreeAndNil(NewBtn);
end;
 
其实我是想实现一个动态菜单
我这样写为什么会出错
procedure TForm1.Button1Click(Sender: TObject);
var mainmenu:TMainMenu;
open:TMenuItem;

begin
mainmenu:=tmainmenu.Create(self);
mainmenu.Items.Add(open);
end;
 
public
procedure mopenClick(Sender: TObject);
。。。
procedure TForm1.mopenClick(Sender: TObject);
begin
showmessage('click');
end;
procedure TForm1.Button1Click(Sender: TObject);
var mainmenu:TMainMenu;
open:TMenuItem;
begin
mainmenu:=tmainmenu.Create(self);
open:=tmenuitem.Create(mainmenu);
open.OnClick:=mopenClick;
open.Caption:='open';
mainmenu.Items.Add(open);
end;
 
谢大伙了
 
后退
顶部