Элемент управления RichEdit в Delphi XE2 не будет отображать цвета шрифта при определенных стилях

Я только что заметил, что в некоторых новых стилях VCL в Delphi XE2 попытка изменить цвет текста в элементе управления 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;

Любые идеи о том, как изменить цвет шрифта в элементе управления RichEdit при использовании стилей Delphi XE2?

2 ответа

Решение

Кажется, ошибка VCL Styles, но вы можете легко исправить это, используя хук стиля.

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);

Прошлый 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.
Другие вопросы по тегам