【问题标题】:Flash window frame around in the same way as SDI modal form do以与 SDI 模态窗体相同的方式闪烁窗口框架
【发布时间】:2018-06-22 06:11:09
【问题描述】:

我知道 Windows 函数 FlashWindow 和 FlashWindowEx,但它们会在任务栏上显示窗口标题和按钮。

但是如何以与单击模态窗口后面的非活动窗口相同的方式对 Flash 窗口进行编程? 你知道主窗口+你显示一些模态表单,然后你点击非活动的主窗口然后你的模态表单在窗口周围闪烁整个框架。

更新 我需要标准的方式。我知道我可以使用桌面窗口管理器 (DWM) API 并自行绘制框架。但我尽量避免这一步,因为它需要未来的维护。 而且我不想花时间分析如何以“相同”的方式绘制它,因为它是自动完成的。

【问题讨论】:

  • 如果您使用常规机制制作窗口模式,则无需关心闪烁。否则,请解释为什么您不能以正常方式执行此操作。就目前而言,这听起来像是XY problem
  • 您是否还希望闪烁窗口保持活动窗口?你想用这个来完成什么?为什么不让它成为模态的?
  • 因为我模拟模态形式。我有表格链。每个链都有一个或多个“模态”形式。当我单击链 1 中的非活动窗口时,我需要从该链中闪烁“模态”表单。现在我使用FlashWindowEx,但这里效果不好。我这里需要标准闪烁。
  • 为什么要“模拟”模态而不是“实际”模态?
  • 因为我需要用户可以访问其他表单,例如 MDI,但我根本不喜欢 MDI,我的用户也不喜欢。所有人都很高兴拥有像表单序列(链)这样的“模态”,他们可以点击菜单,例如在主窗体中并打开其他数据窗体。这一切都很好。我只需要通过闪烁窗口框架而不是 FlashWindowEx 来进行外观改进

标签: delphi winapi


【解决方案1】:

我看到可以通过 FlashWindowEx 来完成 :)

我只是在这个函数中省略了 dwTimeout 参数,我误解了名称 “FLASHW_CAPTION”不仅表示Title,还表示窗口frame。 效果可以通过这段代码解决:

Var f: TFlashWInfo;
begin
  f.cbSize:= SizeOf(TFlashWInfo);
  f.hwnd:= Handle;
  f.dwFlags:= FLASHW_CAPTION;
  f.uCount:= 8;
  f.dwTimeout:= 60;
  FlashWindowEx(f)

闪烁 8 次(这实际上意味着 8 次中转而不是次) 仅使用 FLASHW_CAPTION 以 60 毫秒的速率闪烁。

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多