Einzelnen Beitrag anzeigen

Benutzerbild von Pussyranger
Pussyranger

Registriert seit: 15. Mär 2011
25 Beiträge
 
Delphi XE2 Architect
 
#4

AW: StringGrid-Zelle mit mehreren Zeilen vertikal zentrieren

  Alt 6. Okt 2011, 20:46
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?
Miniaturansicht angehängter Grafiken
unbenannt.png  
  Mit Zitat antworten Zitat