是的,这也是这个问题:
如何在启用主题的应用程序上使用Delphi7-> Delphi2007更改TCheckBox(或任何处理的控件)的字体颜色?
在网上和本网站上看了很多,我找到了4种答案:
>和大多数人(甚至来自QC):你不能,它是由微软设计的.
>创建一个组件,让您可以按照自己的意愿绘制它.
>购买符合您需要的昂贵组件集.
>不要使用主题.
好的,但我仍然不满意.
为用户提供有关他在表单上拥有的财产/数据状态的彩色反馈,对我来说似乎是合法的.
然后我刚刚安装了MSVC#2008 Express版本,出乎意料的是,他们可以改变字体的颜色(复选框的属性ForeColor)那么什么?
它似乎并不像“微软那样设计”.那么现在问题又来了:
如何在启用主题的应用程序上使用Delphi 7到Delphi 2007更改TCheckBox(或任何已处理控件)的字体颜色?
解决方法
这需要一些调整才能成为完美的解决方案,但对我有用:
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;
原文地址:https://www.jb51.cc/delphi/101822.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。