Wie Uwe schon gesagt hat, malt der Inplace-Editor den Text neu, wenn das Grid den Focus verliert. Dabei kannst du die Textfarbe nicht beeinflussen. Das OnDrawCell des Grid ist hier nicht mehr zuständig.
Im OnExit den Text neu zu malen ist auch keine Option, denn das kommt zu früh. Der Inplace-Editor malt später nochmal drüber.
Man muss also eine Möglichkeit finden, den Text verzögert zu malen, nachdem der Inplace-Editor fertig ist.
Deshalb meine Lösung mit einem Timer:
Nimm einem Timer, setze Enabled auf false und Interval auf 10.
Im OnExit des Grid setzt du nur
Timer.enabled:=true;
Der Timer-Event sieht dann so aus:
Delphi-Quellcode:
procedure TForm1.TimerTimer(Sender: TObject);
var Rect: TRect;
begin
if (StringGrid1.Col=4) and (StringGrid1.Row>0) then begin
Rect:=StringGrid1.CellRect(StringGrid1.Col, StringGrid1.Row);
StringGrid1.Canvas.Font.Color:=clred;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.Textout(Rect.Left+2,Rect.Top+2, StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]);
Timer.Enabled:=false;
end;
end;
Nicht besonders schön, funktioniert aber.