Danke, genau so wie ich's wollte!
Der Quellcode sieht jetzt so aus:
Delphi-Quellcode:
VAR R1,R2: TRect; Hoehe: integer;
{[...]}
R1:=Rect;
R2:=Rect;
//Höhe des Texts ermitteln
Hoehe:=DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[ACol, ARow]),
Length(StringGrid1.Cells[ACol, ARow]),
R1, DT_CENTER OR DT_WORDBREAK OR DT_CALCRECT);
//neue Position des zu zeichnenden Textes berechnen
R2.Top:=R2.Top+Round(R2.Height/2)-Round(Hoehe/2);
//Zelle färben bzw. "leeren"
StringGrid1.Canvas.FillRect(Rect);
//neuen Text schreiben
DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[ACol, ARow]),
Length(StringGrid1.Cells[ACol, ARow]),
R2, DT_CENTER OR DT_WORDBREAK);
Jetzt gibt es aber noch ein weiteres Problem:
FillRect() überzeichnet nicht die Linien zwischen den Zellen. Die Linien daher noch vom alten Text "befleckt" (siehe Anhang).
Was kann man dagegen tun?