form:=Tform.Create(nil);
Form := TForm.Create(self);
Application.creatform(Tform,form);
他们所建立的的窗体不同吗?

解决方案 »

  1.   

    1,创建一个没有父类的窗口;
    2,创建一个父类为Self的窗口;
    3,创建一个父类为Application的窗口。-----------------------------------------------------------------
    我是中国鹰派!
    拒绝日货!打倒小日本!
      

  2.   

    Form := TForm.Create(nil);
    由于Owner是Nil,需要自行释放;Form := TForm.Create(Self);
    由于Owner是当前窗体,可以自行释放,当前窗体在退出时也会帮你释放;Application.CreateForm(TForm, Form);
    系统创建的窗体,会自动释放。如果是第一个由系统创建的窗体,Form就会被作为整个程序的主窗体。主窗体的关闭意味着整个程序的结束。
      

  3.   

    form:=TForm.Create(nil)
    该窗口的拥有者为nil,没有任何东西负责Free该窗口
    那么你需要手工释放该窗口Form := TForm.Create(self);
    该窗口的拥有者(Owner)是self,通常该代码写在项目里,基本上
    self 就是application,那么程序结束时,该窗口由Application对象
    自动释放,程序员可以不考虑窗口的释放问题。再谈Application.creatform(Tform,form);
    如果项目中Application.creatform(Tform,form);是第一次调用
    或者说项目还没有主窗口,那么该语句除了创建该窗口外,同时把form设置
    为应用程序主窗口,
    如果不是第一次调用(或者说应用程序已经有主窗口)那么该句和第2句作用
    差不多。无论是哪种情况,Application.creatform(Tform,form);都将form的
    拥有者设置为application,也就是说可以不考虑该窗口的释放问题。一般来讲,不建议使用form:=Tform.Create(nil);