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?

È stato utile?

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

entrare descrizione dell'immagine qui entrare descrizione dell'immagine qui entrare descrizione dell'immagine qui

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top