controllo RichEdit in Delphi XE2 non mostra i colori dei font sotto certi stili
-
25-10-2019 - |
Domanda
Ho appena notato che in alcuni dei nuovi stili VCL in Delphi XE2, cercando di cambiare il colore del testo in un controllo RichEdit non funziona. Per esempio Smokey Quarts Kamri e Carbon verranno visualizzati solo testo in nero, mentre in cobalto XEMedia il colore del carattere può essere modificata. Questo è il codice che ho usato per cambiare il colore del carattere (grassetto sembra funzionare in tutti gli stili)
memo.selStart:= length (text);
memo.selLength:= 0;
memo.SelAttributes.Color:= clRed;
memo.SelAttributes.Style:= [fsBold];
memo.selText := text;
Tutte le idee su come cambiare il colore del carattere su un controllo RichEdit durante l'utilizzo di stili di Delphi XE2?
Soluzione
Sembra un bug Stili VCL, ma si può facilmente risolvere questo problema utilizzando un gancio di stile.
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;
e l'uso in questo modo
TStyleManager.Engine.RegisterStyleHook(TRichEdit, TRichEditStyleHookFix);
Altri suggerimenti
Past TStyleManager.Engine.RegisterStyleHook (TRichEdit, TRichEditStyleHookFix); nel file * .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.