Элемент управления RichEdit в Delphi XE2 не будет отображать цвета шрифта при определенных стилях - PullRequest
2 голосов
/ 16 февраля 2012

Я только что заметил, что в некоторых новых стилях 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 ]

9 голосов
/ 16 февраля 2012

Кажется, ошибка 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);

enter image description here enter image description here enter image description here

1 голос
/ 21 февраля 2012

Past TStyleManager.Engine.RegisterStyleHook (TRichEdit, TRichEditStyleHookFix);в вашем * .dpr файле

eq:

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.
...