2

我刚刚注意到,在 Delphi XE2 中的一些新 VCL 样式中,尝试更改 RichEdit 控件中文本的颜色是行不通的。例如,Smokey Quarts Kamri 和 Carbon 只会以黑色显示文本,而在 Cobalt XEMedia 中,字体颜色可以更改。这是我用来更改字体颜色的代码(粗体似乎适用于所有样式)

 memo.selStart:= length (text);
 memo.selLength:= 0;
 memo.SelAttributes.Color:= clRed;
 memo.SelAttributes.Style:= [fsBold];
 memo.selText := text;

关于如何在使用 Delphi XE2 样式时更改 RichEdit 控件上的字体颜色的任何想法?

4

2 回答 2

9

这似乎是一个 VCL 样式错误,但您可以使用样式挂钩轻松解决此问题。

uses
 Vcl.Forms,
 Vcl.Themes,
 Winapi.RichEdit;

type
  TRichEditStyleHookFix = class(TScrollingStyleHook)
  strict private
    procedure EMSetBkgndColor(var Message: TMessage); message EM_SETBKGNDCOLOR;
  end;

{ TRichEditStyleHookFix }

procedure TRichEditStyleHookFix.EMSetBkgndColor(var Message: TMessage);
begin
  Message.LParam := ColorToRGB(StyleServices.GetStyleColor(scEdit));
  Handled := False;
end;

并像这样使用

  TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2012-02-16T01:00:50.660 回答
1

过去的 TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix); 在您的 *.dpr 文件中

情商:

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  TStyleManager.TrySetStyle('Carbon');
  TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
于 2012-02-21T09:20:48.917 回答