比如 我在一个过程中动态创建一个窗口类,我用两种方式  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 。搞不定,请教高手。

解决方案 »

  1.   

    with TForm1.create(application) do
    begin
      name:='ddd';
      left:=100;
      ...
    end;
      

  2.   

    with TForm1.create(application) do 
    begin 
      name:='ddd'; 
      left:=100; 
      ... 
    end;
    这样是可以的
      

  3.   


    帅哥,我是要在AA中创建,在BB中给name赋值啊...你这样在BB写的话,变成又创建了一个form了 , 此 form 非 我在AA中的form啊
      

  4.   

    你的代码有很多问题;用下面方式联系我!
    MSN:[email protected]
      

  5.   

    写错,写错,8好意思方法1中,应该是 frm:=TForm.create(application); 方法2中,应该是 TForm.create(application); 
      

  6.   

    写错,写错,8好意思方法1中,应该是 frm:=TForm.create(application); 方法2中,应该是 TForm.create(application); 
      

  7.   

    我就是想 找到 方法2中的TForm1.create(application);创建的 对象,再加以操作
      

  8.   

    BB里面创建的窗口你不可能引用,虽然该窗口是存在的,你也可以通过API什么的查找到,但是你并不知道此窗口是否是BB中创建的窗口,因为该窗口没有什么固定的标识。而AA在创建的窗口可以引用是因为该窗口在创建后其对象也可以说是地址、指针赋给了FRM,所以你可以通过FRM来调用AA创建的窗口
      

  9.   

    楼上 各位经过与xingyongjian同学的交流 与 本人的测试,结果表明,若使用方法2中AA创建的窗体,
    在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”好像欠妥
      

  10.   

    觉得把 动态创建 和 给动态创建的窗体设置属性,这两项操作放在一个方法里不可以吗?
    这样什么时候需要,什么时候就直接一调用。。
    或者,在 动态创建 的时候返回一个窗体类型。如下:
    function TForm1.BB : TForm
    (当然这种方法也就相当于你的第一种方法了)
    不知道以上的方法符合不符合LZ的要求。
      

  11.   

    procedure TForm1.AA;
        begin
          TForm1.create(application);
        end;AA 是TForm1的一个方法,在调用的时候已经是创建了一个 TForm1 对象了.否则你无法调用AA方法.begin
      TForm.create(application);这样创建一个新的TForm对象.但是你没有保存它的指针,所以你没办法
    在外部调用这个新对象的方法.
    end;应该将过个窗体的指针保存下来.
      

  12.   

    TForm.create(application)是创建一个TForm类的新实例
    D的"所有"教程中都说应保存创建的实例,除非你创建完后不再想再操作它,否则何必自增麻烦呢~~纠正一下:
    if trim(TForm(application.Components[i]).Name)='' then这句在D中是永远都不会成立的!!
    想想为什么吧...
      

  13.   

    使用TList对象保存你所有的动态创建的对象吧!
    不要创建不负责的对象,把他们集中管理!
    我们不可能创建一大群我们管理不了的对象把!