代码之家  ›  专栏  ›  技术社区  ›  Gregor Brandt

让C++Builder/Delphi在启动时创建TF窗体,还是手动创建?

  •  6
  • Gregor Brandt  · 技术社区  · 14 年前

    当在builder(或delphi)中创建tform时,代码将添加到 main 要在应用程序启动时创建这些表单,请执行以下操作:

    Application->CreateForm( __classid( TxForm), &xForm );
    

    这使事情变得简单,但是当应用程序有10、20、50、100个表单时,这是明智的吗?我假设这可以获取所有类型的内存和系统句柄。如果需要,可以随时创建表单,方法是使用“项目”->选项”->表单对话框将其删除,然后:

    std::auto_ptr< TxForm > myForm( new TxForm( this ));
    
    myForm->ShowModal();
    

    因此,问题是,最好让C++ Builder自己的方式,或者在需要时手动创建表单?

    5 回复  |  直到 14 年前
        1
  •  2
  •   Josh Kelley    14 年前

    创建但不可见的窗体占用内存并影响启动时间,但不应使用任何系统句柄,因为窗口句柄之类的东西在实际显示窗口之前不会被分配。

    说到这里,我几乎总是手工创建表单(使用类似于 auto_ptr ,因为我不能忍受有全局变量。手动创建表单有几个优点:应用程序启动更快,表单总是以已知良好的状态显示,并且如果需要,以后更容易切换到一次显示多个表单实例。

    AS the VCL documentation explains , delete 直接(或间接地,通过使用股票 std::auto_ptr )可能会导致内存错误,因为表单可能有未处理的消息。为了避免这个问题,我编写了两个智能指针类来处理调用 Release 而不是 删除 . 您可以从下载它们 http://gist.github.com/671452 .

        2
  •  5
  •   AlexV    14 年前

    这实际上取决于您如何在应用程序中使用表单。我通常在需要时快速创建它们,然后在完成后释放它们。这是更手动的工作,但节省了资源(每次花费一点CPU,这会导致延迟)。

    如果你很少使用表单,我会说在需要的时候手动创建/释放(删除),但是如果你一直在使用表单,并且在应用程序的整个生命周期中,使用默认的方式。

        3
  •  5
  •   Rob Kennedy    14 年前

    建议让IDE“按自己的方式来做”,这意味着IDE正在使用某种 智力 它生成用于创建窗体和数据模块的代码的方式。 不是的。 它只是按照你告诉它要创建的内容,按照你告诉它要使用的顺序来创建。如果您没有通过“项目选项”对话框明确地告诉它要做什么,那么它只是按照您将它们添加到项目中的顺序创建内容。IDE并不比你知道得更好。

    使用自动创建的表单和数据模块鼓励使用IDE声明的全局变量来引用这些对象。你不需要它们。

    只自动创建主窗体。当您需要其他东西时,可以使用创建对象的典型方法自己创建它:调用构造函数,并将对对象的引用存储在其他对象的局部变量或字段中,而不是您应该删除的由IDE提供的全局变量中。别费心了 CreateForm . I wrote an article explaining why.

        4
  •  2
  •   Chris Thornton    14 年前

    在我看来,自动创建那些你可能不会使用的表单,比如about box,是浪费。我通常自动创建主窗体,然后根据需要动态创建其余的窗体。

        5
  •  0
  •   Fabricio Araujo    14 年前

    除非应用程序只是 非常小 试验台或POC, 只创建主窗体(和/或全局数据模块,如果是 您的风格/设计)并手动创建所有其他。

    在加载时创建所有表单只是一种浪费(取决于 在窗体上执行的操作)可以使程序像SEA一样快速加载 龟在沙滩上行走…