【问题标题】:Tab-modality in windows applicationWindows 应用程序中的选项卡模式
【发布时间】:2011-05-07 03:47:00
【问题描述】:

在 Windows XP 上使用 Delphi 2009 开发桌面应用程序。

有没有办法让窗口对话框模式化到选项卡,而不是应用程序。我怎样才能做到这一点?线程?任何支持这一点的框架?

类似

提前致谢。

亲切的问候, 帕万。

【问题讨论】:

    标签: delphi windows-xp


    【解决方案1】:

    一种模拟方法是:

    1. 暂时禁用标签页的所有子控件
    2. 创建表单
    3. 将其Parent 设置为标签页
    4. 设置FormStyle := fsStayOnTop
    5. 设置BorderStyle := bsNone

    这样,您在标签页顶部有一个对话框,这是用户可以在此标签页上与之交互的唯一内容,但它不会阻止主窗体 ui 或其他标签页。

    【讨论】:

    • 它只模拟外观,但不模拟模型功能,即调出此对话框的代码需要等待此对话框的模态结果,同时它应该能够调出另一个对话框在另一个选项卡中并等待模态结果。尝试使用以下逻辑模拟此行为。
    • SendMessage(Handle, CM_ACTIVATE, 0, 0); SendMessage(句柄,WM_NCACTIVATE,Ord(真),0);模态结果:= 0;重复 Application.HandleMessage;如果 Application.Terminated 然后 ModalResult := mrCancel;直到 ModalResult 0;结果:=模态结果; SendMessage(Handle, CM_DEACTIVATE, 0, 0);但这不起作用,因为它希望在关闭第一个选项卡中的第一个对话框之前关闭第二个选项卡中的第二个对话框。
    • 为什么要等?从按钮对 OnClick 事件做出反应有什么问题?
    • 对话框自己不处理任何事情,但它是调用线程的责任。一句话,我正在寻找一个像“ShowModal”这样的功能,但它是一个选项卡或任何控件而不是整个应用程序的模态。
    • @Pavan:混合线程代码和 VCL 不是一个好主意,您可以向按钮按下事件的处理线程发出信号。一种可能性是在用户关闭对话框时将标志设置为True,如果已设置该标志,则检查线程,否则使用“睡眠”或类似方法等待。
    【解决方案2】:

    你也许可以使用这样的东西来制作窗口模式

    窗口列表:指针; WindowList := DisableTaskWindows(MyForm.Handle);

    EnableTaskWindows(WindowList);

    取消模态它。这应该允许您模拟模态表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多