如何动态生成对象?如何响应其消息?(50分)

  • 主题发起人 jinhongyu
  • 开始时间
J

jinhongyu

Unregistered / Unconfirmed
GUEST, unregistred user!
敬请各位不吝赐教:
如何动态生成一个可见或不可见的对象,对可见对象如何响应其消息?
 
C

casso

Unregistered / Unconfirmed
GUEST, unregistred user!
如以下代码:
var
yourObject: TObject
//TObject可为任意你想要的对象

在需要使用时使用
yourObject:=TObject.Create;

响应其消息可以完全照搬一般可视控件的用法。
(就是自己要申明一下,而不是让Delphi 自动帮你完成代码。
 
S

Sunset

Unregistered / Unconfirmed
GUEST, unregistred user!
Here is an example:

//处理ButtonClick的函数
procedure TForm1.ButtonClick(Sender: TObject)

begin
ShowMessage('Button clicked');
end;

//动态创建Button的函数
procedure TForm1.Button1Click(Sender: TObject);
var
Button: TButton;
begin
//创建Button
Button := TButton.Create(Self)

Button.Parent := Self;
Button.Left := 20;
Button.Top := 20;

//给Button的OnClick事件指定处理函数
Button.OnClick := ButtonClick

end;
 
C

chenke

Unregistered / Unconfirmed
GUEST, unregistred user!
删除此对象用free方法如下所示:

if assign(Button) then Button.free;
 
H

huizhang

Unregistered / Unconfirmed
GUEST, unregistred user!
动态创建对象的关键如下:

1. 一定要先声明一个相应类的对象名称, 可以在任何位置声明, 根据需要而定
2. 创建时调用该类的 create 方法并给出相应参数(一般为Owner)
3. 创建后要付给必要的属性,特别是定位属性
4. 一定要指定它的 parent, 否则你看不到该对象
5. 在程序结束前一定要调用它的 free 方法释放它
6. 要想动态创建的对象执行某一个动作, 可以预先写一个相应的方法或事件, 对象
创建或赋值相应的事件给该对象
7. 如果类似的对象较多, 可以创建一个动态的对象组(此论坛已经讨论过)

SUNSET 的例子有错误, 程序关闭前没有释放新建对象, 不可用.
下面是一个完整的例子:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Button1: TButton;
Edit1: TEdit;
public
{ Public declarations }
procedure ButtonClick(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ButtonClick(Sender: TObject);
begin
Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1:=TButton.create(self);
with Button1 do
begin
top:=20;
Left:=20;
width:=100;
Caption:='&Click Here';
OnClick:=ButtonClick;
parent:=self;
end;
Edit1:=TEdit.create(self);
with Edit1 do
begin
top:=Button1.Top+Button1.Height+5;
Left:=20;
width:=100;
Text:='0';
parent:=self;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Button1.free;
Edit1.free;
end;

end.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部