Einzelnen Beitrag anzeigen

bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#9

AW: Fontfarbe in TStringgrid ändern ;-)

  Alt 4. Mai 2017, 08:19
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.
  Mit Zitat antworten Zitat