有没有办法圆化 Delphi VCL表单的边框?

wooyq4lh  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(124)

我希望VCL表单具有圆角,如下图所示:

(For现在不需要阴影,只需要圆角)。
我已经试了一些代码,但似乎没有任何变化。

unit UMainWindow;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, 
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TFMainWindow = class(TForm)
  procedure FormCreate(Sender: TObject);
  end;

var
  FMainWindow: TFMainWindow;

implementation

procedure TFMainWindow.FormCreate(Sender: TObject);
var
  rgn: HRGN;
begin
  rgn := CreateRoundRectRgn(0, 0,ClientWidth,ClientHeight,40,40);
  SetWindowRgn(Handle, rgn, True);
end;

end.

这是我的结果

5ktev3wc

5ktev3wc1#

在Windows 11中,现在可以使用以下方法(从下面提到的Win11Forms.pas复制):

uses
  Winapi.Dwmapi, VCL.Dialogs, System.SysUtils;

const
  DWMWCP_DEFAULT    = 0; // Let the system decide whether or not to round window corners (default)
  DWMWCP_DONOTROUND = 1; // Never round window corners
  DWMWCP_ROUND      = 2; // Round the corners if appropriate
  DWMWCP_ROUNDSMALL = 3; // Round the corners if appropriate, with a small radius

  DWMWA_WINDOW_CORNER_PREFERENCE = 33; // WINDOW_CORNER_PREFERENCE controls the policy that rounds top-level window corners

var
  CornerPreference: Cardinal; // set to 0..3 from DWMWCP consts above

Winapi.Dwmapi.DwmSetWindowAttribute(Handle, DWMWA_WINDOW_CORNER_PREFERENCE, @CornerPreference, sizeof(CornerPreference));

GitHub上有两个项目以两种不同的方式执行此操作。https://github.com/checkdigits/rounded_corners为您提供了一个函数,您可以在其中传递一个句柄(它只是 Package 了上面的函数),https://github.com/marcocantu/DelphiSessions/tree/master/Win11_Delphi11/Win11Round包含一个单元“Win11Forms”,该单元向vcl.forms TForm类添加了设置默认值并允许覆盖默认值的功能。

相关问题