RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1277024
Accepted
ugorek
ugorek
Asked:2022-05-01 18:08:03 +0000 UTC2022-05-01 18:08:03 +0000 UTC 2022-05-01 18:08:03 +0000 UTC

为没有边框的窗口添加阴影(几乎完成)

  • 772

无边框窗口 ( BorderStype = bsNone) 可能看起来太平且不熟悉。因此,在网上搜索后,我能够理解如何手动添加阴影:

  TForm1 = class(TForm)
   ...
   procedure CreateParams(var Params:TCreateParams); override;
  end;
 
procedure TForm1.CreateParams(var Params:TCreateParams);
 begin
  inherited;
  Params.Style:=Params.Style or WS_SIZEBOX; //WS_THICKFRAME
 end;

结果证明是您所需要的,但有些意外。除了阴影之外,还出现了一条白色细条纹代替窗口标题(Windows 10)。

带阴影的无框窗

我的技能已经不足以自己移除它了。这结束了我的权力:C

  1. 这个白色条纹怎么去掉?
  2. 还是有另一种方法可以将普通阴影(如有边框的窗口)添加到无边框窗口?
  3. 也有一个选项Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;,但它不适合。阴影完全不同,不适合可调整大小的窗口。
delphi
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    ugorek
    2022-05-02T00:17:07Z2022-05-02T00:17:07Z

    这解决了我所有的问题:

     
    interface
     
     uses
      Windows,Messages,SysUtils,Controls,Forms,DwmApi,UxTheme,Classes,StdCtrls;
     
     type
      TForm1=class(TForm)
       function SetBordelessShadow:Boolean;
       procedure CreateWindowHandle(const AParams:TCreateParams); override;
       procedure WndProc(var AMsg:TMessage); override;
      end;
     
     var
      Form1:TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function TForm1.SetBordelessShadow:Boolean;
      var
       LMargins:TMargins;
       LPolicy:LongInt;
     begin
      LPolicy:=DWMNCRP_ENABLED;
      Result:=Succeeded(DwmSetWindowAttribute(Handle,DWMWA_NCRENDERING_POLICY,@LPolicy,SizeOf(Integer)))and(DwmCompositionEnabled);
      if Result then
       begin
        LMargins.cxLeftWidth:=1;
        LMargins.cxRightWidth:=1;
        LMargins.cyTopHeight:=1;
        LMargins.cyBottomHeight:=1;
        Result:=Succeeded(DwmExtendFrameIntoClientArea(Handle,LMargins));
       end;
     end;
     
    procedure TForm1.CreateWindowHandle(const AParams: TCreateParams);
     begin
      inherited;
      if TOSVersion.Major>=6 then
       SetBordelessShadow;
     end;
     
    procedure TForm1.WndProc(var AMsg:TMessage);
     begin
      case AMsg.Msg of
       WM_DWMCOMPOSITIONCHANGED,WM_DWMNCRENDERINGCHANGED:
        if SetBordelessShadow then
         Exit;
      end;
      inherited;
     end;
     
    end.
    
    • 0

相关问题

  • 查找数值

  • 如何在 DBGrid 中选择 DBDateTimeEditEh 编辑记录字段?

  • 该程序无法在 RAD STUDIO 10.3 中编译或运行

  • 我们需要一个可视化的 Delphi 组件,类似于在旧版本的 Windows 中显示磁盘碎片整理

  • 按钮代码 OnClick 通过另一个按钮

  • 这种代码排序方法是如何工作的?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5