gpt4 book ai didi

delphi - 在 Delphi 中仅设计一个 VCL 组件的样式

转载 作者:行者123 更新时间:2023-12-03 14:57:10 24 4
gpt4 key购买 nike

我知道,可以禁用组件的自定义样式,但如何才能仅为一个组件类启用样式?例如,让整个窗体及其上的所有组件不蒙皮,并且仅对 TButton 进行蒙皮。就像这张图片一样。

enter image description here

最佳答案

大多数 VCL 控件在内部使用 StyleServices全局函数来获取绘制控件的方法。因此,如果您不使用 Vcl 样式,StyleServices 将向 Windows API 函数返回一个实例来绘制主题控件(UxTheme API)。因为没有办法将皮肤(应用 Vcl 样式)仅应用于单个类控件(至少是您自己绘制的控件)。

因此,唯一的选择是应用 Vcl 样式,然后禁用除您要查找的一种类型之外的所有控件。

你可以使用这样的东西

procedure DisableVclStyles(Control : TControl;const ClassToIgnore:string);
var
i : Integer;
begin
if Control=nil then
Exit;

if not Control.ClassNameIs(ClassToIgnore) then
Control.StyleElements:=[];

if Control is TWinControl then
for i := 0 to TWinControl(Control).ControlCount-1 do
DisableVclStyles(TWinControl(Control).Controls[i], ClassToIgnore);
end;

使用 Vcl 样式检查此表单

enter image description here

现在在调用上述方法之后

DisableVclStyles(Self,'TButton');

enter image description here

注意:使用 StyleElements 属性来启用或禁用 vcl 样式不适用于某些组件,例如(TStringGrid、TBitBtn、TSpeedButton 等)

关于delphi - 在 Delphi 中仅设计一个 VCL 组件的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031125/

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