gpt4 book ai didi

delphi - 如何将窗体边框更改为 Windows Basic 而不是 Aero Style?

转载 作者:行者123 更新时间:2023-12-03 15:25:00 25 4
gpt4 key购买 nike

我想知道是否可能,如果可以,如何将表单边框样式更改为 Windows Basic 而不是 Aero 主题?显然首先要考虑Aero是否启用,如果没有则无需尝试更改边框样式。

所以代替:

enter image description here

我们会有:(模型图像)

enter image description here

MDI 应用程序已经为子表单执行此操作,但我不想要或不需要 MDI 应用程序。我尝试查看 Vcl.Forms 的源代码,看看是否可以找到任何相关内容,但我无法找到 - 我可能是错的,但我实际上认为 MDI 窗体的绘制方式是由 Windows 决定的,而不是 Delphi。

DSiWin32包含一些与 Aero 相关的功能,例如确定是否启用 Aero,以及能够启用和禁用 Aero - 然而,这似乎是系统范围内的更改,而不是基于每个窗体/窗口,当主题改变时,它还会导致屏幕延迟,这不好。

我现在不确定该从哪里开始。有什么简单的事情我可能忽略了吗?我们是否需要使用一些特定的标志等创建和覆盖我们自己的 TForm 来实现此目的,或者可能有一种方法可以随时更改表单样式,例如为表单启用/禁用 Aero?

简单地说,我想知道是否可以在不诉诸 MDI 应用程序的情况下将任何表单/窗口边框更改为 Windows Basic 主题,前提是首先启用 Aero?

最佳答案

调用DwmSetWindowAttribute传递值为 DWMNCRP_DISABLEDDWMWA_NCRENDERING_POLICY 属性。

type
TForm1 = class(TForm)
protected
procedure CreateWnd; override;
end;

procedure TForm1.CreateWnd;
var
Policy: Integer;
begin
inherited;
Policy := DWMNCRP_DISABLED;
DwmSetWindowAttribute(WindowHandle, DWMWA_NCRENDERING_POLICY, @Policy,
SizeOf(Policy));
end;

我在这里忽略了错误检查。您可能会认为响应错误是值得的。我也没有做任何测试操作系统是否支持这个函数调用,但是如果你需要支持XP,你可以选择这样做。

请注意,CreateWnd 是调用 DwmSetWindowAttribute 的正确位置。窗口句柄是在CreateWnd中创建的,我们希望尽快应用此策略。将代码放入 CreateWnd 中还可以使其对重新创建具有鲁棒性。

普通航空形式:

enter image description here

通过调用DwmSetWindowAttribute形成表单:

enter image description here

关于delphi - 如何将窗体边框更改为 Windows Basic 而不是 Aero Style?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com