Windows消息最小化应用程序最小化子项

时间:2009-04-23 16:12:11

标签: windows delphi

我有一个delphi应用程序,其中主窗体是一个登录表单 - 它包含程序所需的各种数据库和用户对象。用户登录后,我会隐藏此表单并打开另一个表单。

我的问题是,如何在最小化子表单时使应用程序最小化?我想出了如何在使用Windows消息恢复主要时恢复孩子,但我无法弄清楚如何让应用程序最小化,因此当他们点击任务栏时他们只需要点击一次 - 而不是一次最小化和然后再次恢复。

感谢任何帮助 - 我试图使用NCACTIVATE - 但在某些情况下会导致无限循环打印对话框和其他窗口......

谢谢, 克里斯蒂

3 个答案:

答案 0 :(得分:3)

我发现的最佳方式是架构略有变化。您不希望您的登录表单成为您的应用程序的主要表单。您可以通过两种不同的方式解决这个问题,但由于您在登录表单上维护数据库控件,我认为这是理想的方法。

  1. 选择其他表单作为主表单并将其设置为首先创建。
  2. 在您的DPR中,使用 loginForm:= TLoginForm.Create(nil)手动创建您的登录表单,而不是使用 Application.CreateForm
  3. Application.Run 之前显示登录表单。当你完成它之后,只需隐藏它而不是释放它。
  4. 理想情况下,您应该将所有数据库组件移动到DataModule中,以便在登录完成后释放LoginForm。

答案 1 :(得分:2)

为什么不将主窗体设置为现有子窗体,将数据库逻辑放在数据模块中,手动创建和处理登录窗体?这是我通常使用的模式:

  

创建一个数据模块   在列表中自动创建FIRST(之前   主要形式)。 Tee datamodule in   OnCreate将初始化数据库   并显示一个非NOT的登录表单   在自动创建列表中,是   完全创建和处理   数据模块。如果我需要一个飞溅   屏幕,然后数据模块也   提供了该功能   同样的方式。

     

主要形式OnCreate检查确保   用户成功登录,   如果不是那么电话   application.terminate;

答案 2 :(得分:0)

当非主要表单最小化时,我使用TMinModal来最小化我的应用程序。

http://vvv.truls.org/pascal/Units.Delphi/UI/MinModal.pas