2012-02-16 3 views
2

Я только заметил, что в некоторых новых стилях VCL в Delphi XE2 попытка изменить цвет текста в элементе управления RichEdit не работает. Например, Smokey Quarts Kamri и Carbon будут показывать только текст в черном цвете, а в Cobalt XEMedia можно изменить цвет шрифта. Это код, который я использовал, чтобы изменить цвет шрифта (жирный, кажется, работает во всех стилях)Управление RichEdit в Delphi XE2 не отображает цвета шрифта в определенных стилях

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

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

ответ

9

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

Прошлое 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. 

 Смежные вопросы

  • Нет связанных вопросов^_^