请教下,一下两段代码有什么区别?
TForm.Create创建窗体:
V_CKQuery := TV_CKQuery.Create(nil);   //注意此处
  V_CKQuery.ShowModal;
finally
  V_CKQuery.Free;
end;
 Application.Run;
=============================================
Application.CreateForm创建窗体:
Application.CreateForm(TV_CKQuery, V_CKQuery); //注意此处
try      
  V_CKQuery.ShowModal;
finally
  V_CKQuery.Free;
end;
Application.Run;

解决方案 »

  1.   

    用Application.CreateForm,创建的窗体的owner就是Application.
    而用TForm.Create的话,可以指定owner
    我是这么理解的
      

  2.   

    Application.CreateForm 创建的窗体,在窗体销毁 等操作时,会发消息给Application,就是他owner。TForm.Create相同操作 会发消息给指定owner,如果owner 为nil,只省略这一步。
      

  3.   

    Application.CreateForm 创建的窗体,在窗体销毁 等操作时,会发消息给Application,就是他owner。TForm.Create相同操作 会发消息给指定owner,如果owner 为nil,只省略这一步。
      

  4.   

    Application.CreateForm 创建的窗体,在窗体销毁 等操作时,会发消息给Application,就是他owner。TForm.Create相同操作 会发消息给指定owner,如果owner 为nil,只省略这一步。
      

  5.   

    使用上差别不大,但简单跟踪一下就能发现实现方法不同
    以D7为例
    1、Application.CreateForm产生的对象是经由TObject.NewInstance,最终由InitInstance函数生成(System单元)
    2、TForm.Create产生的对象则是通过MakeObjectInstance函数(Classes单元)感兴趣可以自行探寻一下
      

  6.   

    增加一点:
    如果不自动生成窗体的话,Application会将Application.CreateForm产生的第一个Form默认为主窗体
      

  7.   

    运行效果是一样,不过form的父是一个应用程序、一个是nil,如果在多线程中求句柄的话一个就是应用程序句柄,一个是nil句柄;在通常的单线程(主线程)中是一样的。
      

  8.   

    一个是以类厂的形式存在,Application.CreateForm不是仅仅只能创建窗体的,还可以创建其它TComponentClass
      

  9.   

    李维的INSIDE VCL里有详细的分析,楼上去看下