Элемент управления 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.