我刚接触delphi,对Delphi的窗口有点迷惑。
1.比如要用到三个窗口,示例程序里一般都在Application中CreateForm三个窗口。我的疑问,这个时候是不是三个窗口全部建立了,只是hide?那么是不是该应用以外的程序也可以show这三个窗口了?
2.程序中要“打开”这三个窗口,用form.show?我发现,比如在该from中输入一些信息,当close该from后再次show,输入的信息仍然留在from中。是不是另外有Destroy的方法?

解决方案 »

  1.   

    回答1:Application.CreateForm(TForm, vForm1) 的时候,窗口已经建立,当然可以在任何时候调用vForm1.Show;当然必须在vForm1的作用域内了。
    第二个问题是你有些概念的模糊。CLOSE后有些东西保留是因为你在PROJECT OPTION里选择了AUTO CREATE,把这个移掉,变为AVAILBAL FORM,所谓的信息就没有了,其实就是些class而已,Destory也是不需要你主动去调用的。在UNIT1 把下面的代码放上去,在project option 的Forms里把auto create的form1移到对面。试试看
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      vForm1: TForm1;implementation{$R *.dfm}initialization
      Application.CreateForm(TForm, vForm1);
      vForm1.Caption := 'The First Form';
      vForm1.Show;end.
      

  2.   

    楼主:把你的问题保留起来,继续看书,看那些从头开始讲“面向对象编程”的书,不管是Delphi的,还是C++的,都可以。过一段时间再来看这几个问题,自己就解决了。顺便说:“窗口”(Window)的概念 包含 “窗体”(Form)
      

  3.   

    程序初始化时,一般只显示主窗体
    建议你不要用静态创建窗口,采用动态创建吧,关闭时Action:=caFree
      

  4.   

      with TForm2.Create(nil) do
      begin
        try
          ShowModal;
          if ModalResult = mrOK then
          begin
            //处理
          end;
        finally
          FreeAndNil(Form2);
        end;
      end;
      

  5.   

    问题2:close窗口后,窗口对象还存在,没有释放对象资源,你下次再show,当然还是以前的信息。