【问题标题】:How I can change the highlight color of a TEdit component?如何更改 TEdit 组件的突出显示颜色?
【发布时间】:2013-03-24 20:44:54
【问题描述】:

我需要调整 TEdit 组件的外观,但是当文本被选中(突出显示)时,我找不到更改 TEdit 组件的突出显示颜色和字体颜色的解决方案,存在任何 WinApi 消息或函数改变高亮颜色?

【问题讨论】:

  • 我相信答案是否定的。
  • 你对主题的执着程度如何?
  • 在 XE3 FM2 中:Edit1.SelectionFill.Color := claYellow
  • TEdit 使用Delphi 很好地命名为clHighlightclHighlightText 的Windows 颜色定义(并且VCL 从全局Windows 设置中为您检索)。更改TEdit 中的唯一方法是为所有 Windows 应用程序全局更改它们。 @slotomo:这仅适用于 FMX TEdit,不适用于标准 VCL (Windows) TEdit。由于海报已标记此delphi-2007,我认为XE3 中的可能性无论如何都不适用。 :-)
  • @David:因此使用的颜色将是主题等价物。重点?这是一个全局设置,除非您自己自定义绘制控件。 :-) 好吧,至少在您升级到支持 VCL 主题的 Delphi 版本之前,D2007 不支持。

标签: delphi delphi-2007


【解决方案1】:

组件的绘制在WM_PAINT 消息内完成。在WndProc 中,您应该在调用标准WndProc 之前将所需颜色设置为clHighlightText,并在调用后将其重置为默认值。我认为这是最简单的解决方案。

【讨论】:

  • 根据您所写的内容,“将所需颜色设置为 clHighlightText”,您将如何在 WM_PAINT 消息处理程序中设置所需颜色?你能包括一个代码示例吗?或者您想建议在控件的WM_PAINT 阶段更改clHighlightText 的系统颜色?我认为,这会导致无限循环(由于将WM_SYSCOLORCHANGE 发送到控件,这将要求控件再次无效)。
  • 您可以在 WM_PAINT 处理程序期间阻止 WM_SYSCOLORCHANGE 消息。这只是一个想法,我现在没有代码。
  • 嗯,所以你的想法是从WM_PAINT 消息处理程序内部调用SetSysColors。请注意,这样做会广播WM_SYSCOLORCHANGE 消息,即使您阻止在子类编辑控件中对其进行处理,其他控件也会在处理此消息时受到影响。我只是想说,在我看来这是个坏主意。 [未投票]
猜你喜欢
  • 2014-11-02
  • 1970-01-01
  • 2011-02-02
  • 2010-12-12
  • 2012-03-27
  • 2012-10-24
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多