加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:19:54 所属栏目:大数据 来源:网络整理
导读:是的,这也是这个问题: 如何在启用主题的应用程序上使用Delphi7- Delphi2007更改TCheckBox(或任何处理的控件)的字体颜色? 在网上和本网站上看了很多,我找到了4种答案: 和大多数人(甚至来自QC):你不能,它是由微软设计的. 创建一个组件,让您可以按照自己的
是的,这也是这个问题:

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

在网上和本网站上看了很多,我找到了4种答案:

>和大多数人(甚至来自QC):你不能,它是由微软设计的.
>创建一个组件,让您可以按照自己的意愿绘制它.
>购买符合您需要的昂贵组件集.
>不要使用主题.

好的,但我仍然不满意.

为用户提供有关他在表单上拥有的财产/数据状态的彩色反馈,对我来说似乎是合法的.

然后我刚刚安装了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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读