gpt4 book ai didi

delphi - 如何更改启用主题的控件的字体颜色?

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

是的,这又是这个问题:

如何在启用主题的应用程序上使用 Delphi7->Delphi2007 更改 TCheckBox(或任何已处理控件)的字体颜色?

在互联网和这个网站上阅读了大量内容后,我找到了 4 种答案:

  1. 最受欢迎(甚至来自 QC):你不能,它是 Microsoft 设计的。
  2. 创建一个组件,让您可以按照自己的意愿进行绘制。
  3. 购买昂贵的组件套件,按照您想要的方式绘制。
  4. 不要使用主题。

好吧,但我还是不满意。

向用户提供有关表单上属性/数据状态的彩色反馈,对我来说似乎是合法的。

然后我刚刚安装了MSVC# 2008 Express版本,令人惊讶的是,他们可以改变字体的颜色(复选框的属性ForeColor)然后呢?

它似乎并不是“微软就是这样设计的”。那么现在问题又来了:

如何在启用主题的应用程序上使用 Delphi 7 到 Delphi 2007 更改 TCheckBox(或任何已处理控件)的字体颜色?

最佳答案

这需要一些调整才能成为完美的解决方案,但对我有用:

向您的复选框组件添加 2 个方法

    FOriginalCaption: string;
_MySetCap: Boolean;
procedure WMPaint(var msg: TWMPaint); message WM_PAINT;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;

并以这种方式实现:

procedure TMyCheckbox.CMTextChanged(var Message: TMessage);
begin
inherited;
if _MySetCap then Exit;
FOriginalCaption := Caption;
end;

procedure TMyCheckbox.WMPaint(var msg: TWMPaint);
var
BtnWidth: Integer;
canv: TControlCanvas;
begin
BtnWidth := GetSystemMetrics(SM_CXMENUCHECK);

_MySetCap := True;
if not (csDesigning in ComponentState) then
Caption := '';
_MySetCap := False;
inherited;
canv := TControlCanvas.Create;
try
canv.Control := Self;
canv.Font := Font;
SetBkMode(canv.Handle, Ord(TRANSPARENT));
canv.TextOut(BtnWidth + 1, 2, FOriginalCaption);
finally
canv.Free;
end;
end;

关于delphi - 如何更改启用主题的控件的字体颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2356431/

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