Sul forum ufficiale in inglese, verso la fine del thread, anche altri hanno avuto difficoltà in passato, e gli è stato consigliato il pacchetto RichMemo.
Qui il thread:
https://forum.lazarus.freepascal.org/index.php?topic=15327.0
Per quanto riguarda la StringGrid, non serve un componente aggiuntivo, lo puoi già fare tu sfruttando l'evento "onPrepareCanvas". Ti Copio&Incollo un pezzo di codice che ho in un mio programma:
procedure TForm1.TabellaEsitiPrepareCanvas(sender: TObject; aCol,
aRow: Integer; aState: TGridDrawState);
var WrkTextStyle:TTextStyle;
ColoreSfondo, ColoreTesto:TColor;
WrkDataOggiStr:String;
begin
//Allineamento delle colonne
with Sender as TStringGrid do begin
if (aRow >= FixedRows) then begin
WrkTextStyle:=Canvas.TextStyle;
WrkTextStyle.Alignment:=CarthColTabellaEsiti.ArrayCarthCol[aCol].Allineamento;
Canvas.TextStyle:=WrkTextStyle;
end else begin
//Faccio in modo che la testata sia centrata nella colonna
WrkTextStyle:=Canvas.TextStyle;
WrkTextStyle.Alignment:=taCenter;
Canvas.TextStyle:=WrkTextStyle;
end;
end;
//Coloro le righe
with Sender as TStringGrid do begin
//Imposto i colori di default
ColoreSfondo:=clWindow;
ColoreTesto:=clWindowText;
//Determino la data di oggi
WrkDataOggiStr:=MyDateToStr(Trunc(Now()));
if (aCol >= FixedCols) and (aRow >= FixedRows) then begin
//Se il documento non ha come "Data di lock" la data di oggi, probabilmente
//è ststo chiuso male dall'ultima persona che lo ha aperto, quindi lo segnalo
//colorando lo sfondo in maniera differente
if (Pos(WrkDataOggiStr, Cells[ColInData, aRow]) = 0) then begin
ColoreSfondo:=clYellow;
end;
end else begin
//Disegno delle "Celle fisse (testate)"
ColoreSfondo:=clBtnFace;
ColoreTesto:=clWindowText;
end;
//Ora che ho determinato qual'è il colore da dare allo sfondo ed al testo, li imposto
if CambiaColoriCella((Sender as TStringGrid), aRow, ColoreSfondo, ColoreTesto, True) then begin
Canvas.Brush.Color:=ColoreSfondo;
Canvas.Font.Color:=ColoreTesto;
end;
end;
end;
Ciao, Mario