比如 我在一个过程中动态创建一个窗口类,我用两种方式 1、全局中设置 frm:TForm;
procedure TForm1.AA;
begin
frm:=TForm1.create(application);
end;或2、procedure TForm1.AA;
begin
TForm1.create(application);
end;接下来我在另一个过程中设置 动态创建的这个窗口 的name属性:若 我是用方法1动态创建的form ,则可以:
procedure TForm1.BB;
begin
frm.name:='frm';
end;若我用方法2动态创建的form,应该怎么设置?若'TForm1.create(application).name:='ddd';'的话,就又动态创建了一个form 。搞不定,请教高手。
procedure TForm1.AA;
begin
frm:=TForm1.create(application);
end;或2、procedure TForm1.AA;
begin
TForm1.create(application);
end;接下来我在另一个过程中设置 动态创建的这个窗口 的name属性:若 我是用方法1动态创建的form ,则可以:
procedure TForm1.BB;
begin
frm.name:='frm';
end;若我用方法2动态创建的form,应该怎么设置?若'TForm1.create(application).name:='ddd';'的话,就又动态创建了一个form 。搞不定,请教高手。
begin
name:='ddd';
left:=100;
...
end;
begin
name:='ddd';
left:=100;
...
end;
这样是可以的
帅哥,我是要在AA中创建,在BB中给name赋值啊...你这样在BB写的话,变成又创建了一个form了 , 此 form 非 我在AA中的form啊
MSN:[email protected]
在BB中这样写,是符合我的要求的:procedure TForm1.BB;
var i:integer;
begin
for i:=0 to application.ComponentCount-1 do
if application.Components[i] is TForm then
if trim(TForm(application.Components[i]).Name)='' then
TForm(application.Components[i]).Name:='Test';
end;不过 如果有一批用'TForm1.create(application); '创建的窗口,这个判断:“if trim(TForm(application.Components[i]).Name)='' then”好像欠妥
这样什么时候需要,什么时候就直接一调用。。
或者,在 动态创建 的时候返回一个窗体类型。如下:
function TForm1.BB : TForm
(当然这种方法也就相当于你的第一种方法了)
不知道以上的方法符合不符合LZ的要求。
begin
TForm1.create(application);
end;AA 是TForm1的一个方法,在调用的时候已经是创建了一个 TForm1 对象了.否则你无法调用AA方法.begin
TForm.create(application);这样创建一个新的TForm对象.但是你没有保存它的指针,所以你没办法
在外部调用这个新对象的方法.
end;应该将过个窗体的指针保存下来.
D的"所有"教程中都说应保存创建的实例,除非你创建完后不再想再操作它,否则何必自增麻烦呢~~纠正一下:
if trim(TForm(application.Components[i]).Name)='' then这句在D中是永远都不会成立的!!
想想为什么吧...
不要创建不负责的对象,把他们集中管理!
我们不可能创建一大群我们管理不了的对象把!