【问题标题】:How to make OpenDialog show modal in Firemonkey?如何使 OpenDialog 在 Firemonkey 中显示模式?
【发布时间】:2012-01-09 13:20:27
【问题描述】:

当我在 ButtonClick 事件上从我的表单中调用 OpenDialog 时。该对话框不显示为模式,也显示在任务栏中(在 WindowsXP 中)。我可以返回主窗体并一次又一次地单击打开 - 一次弹出多个对话框..

如何使 OpenDialog 在 Firemonkey 中成为模态? 是不是专门为了FM的多平台特性而不允许模态对话框?

编辑:该错误已在更新 3 中修复。

【问题讨论】:

  • 刚刚代表你做了很多实验,似乎没有办法让它成为模态。不仅如此,它似乎还请求平台生成并显示打开对话框,这似乎在单独的线程上运行。在这个阶段我能想到的最好的方法是隐藏表单,执行打开对话框,然后显示表单。这很糟糕,但这是一种方式!
  • 或者,您可以让一个透明的面板覆盖表单的控件(或禁用每个控件),或者为表单添加模糊效果,执行打开的对话框,然后在对话框之后撤消这些更改关闭。不过,这些都不是优雅的解决方案。
  • 感谢您的回复和努力!
  • 我建议您在 QC 上发布您的问题!做到这一点,在此处发布链接......我将尝试使用 Embarcadero 为您重点关注它。在我看来,这实际上是一个重大缺陷!如果不是模态的,Dialog 是没用的,而且这种行为莫名其妙地破坏了线性执行模型!
  • 很遗憾我还没有 QC 帐户。

标签: delphi modal-dialog delphi-xe2 firemonkey fileopendialog


【解决方案1】:

我认为这是一个错误。 FireMonkey 有很多模态类型的错误,希望他们能尽快修复它们。目前,即使是模态形式也不是模态的。

对于您的问题,我有一个适用于 Windows 的解决方法,但您可能不喜欢它。

您需要在 FMX.Platform.Win 中的 TPlatformWin.DialogOpenFiles() 方法中修复以下行。

with OpenFile do下改:

hwndOwner := 0;

到这里:

hWndOwner := FmxHandleToHWND(Application.MainForm.Handle);

该函数使用 Windows GetOpenFileName API 调用,尽管它在 Vista 及更高版本上已被弃用。如果传入了所有者句柄,则对话框是模态的,否则不是。

您可能希望将此作为错误连同解决方法一起提交给 qc.embarcadero.com。

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 2016-04-26
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多