加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows 7风格通知在Delphi中的弹出窗口

发布时间:2020-12-13 20:12:13 所属栏目:Windows 来源:网络整理
导读:关于Microsoft通知区域的建议,我正在寻找想法或Delphi组件来实现 Notification Area Flyouts. 第一个“自然”的想法是使用标准的Delphi形式,但我面临两个问题: 我无法使用标准的“BorderStyle”属性获取表单边框行为.尝试使用GlassFrame属性“Border”,并将
关于Microsoft通知区域的建议,我正在寻找想法或Delphi组件来实现 Notification Area Flyouts.

第一个“自然”的想法是使用标准的Delphi形式,但我面临两个问题:

>我无法使用标准的“BorderStyle”属性获取表单边框行为.尝试使用GlassFrame属性“Border”,并将BorderStyle设置为bsNone,但是当没有边框时(至少在Delphi 2007中)没有GlassFrame.
>我无法弄清楚当用户单击窗体本身的任何位置时,如何使表单关闭.昨天我正在尝试用不同的信息,但没有人按预期工作.

我会感谢任何线索或组件让它发生:)

最好的祝福.

jachguate.

PS. converting notification area icon to Program icon in Win7 (Delphi)有一个相关的问题.

更新[0]
我还在寻找建议. @skamradt的答案看起来很不错,但不幸的是在实践中效果不佳.

更新[1]
最后,自动关闭行为在调用SetForegroundWindog之后使用WM_ACTIVATE消息来强制弹出“激活”

begin
  FlyoutForm.Show;
  SetForegroundWindow(FlyoutForm.Handle);
end;

现在,我正在寻找建议来达到边界行为和视觉风格,因为最接近的行为是以WS_POPUP或WS_DLGFRAME的风格实现的,而最接近的目标是实现WS_POPUP或WS_THICKFRAME的设置风格.

我相信你以后是以下几点:
TForm1 = class(TForm)
  :
protected
  procedure CreateParams(var Params: TCreateParams); override;
  procedure WMActivate(Var msg:tMessage); message WM_ACTIVATE;
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := WS_POPUP or WS_THICKFRAME;
end;

procedure TForm4.WMActivate(var msg: tMessage);
begin
  if Msg.WParam = WA_INACTIVE then
    Hide; // or close
end;

这将给你一个大的弹出窗口与玻璃框架.由于缺少标准的窗口标题,因此无需额外的编程即可移动窗口.当另一个窗口获得焦点时,FormDeactivate事件将被触发…但只有当您切换到同一个应用程序中的另一个窗体时.要处理它,无论应用程序切换,请使用消息捕获方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读