Ich habe Delphi hier nicht installiert, daher kann ich nicht so einfach nachsehen. Ich denke aber, bei den DT-Parametern fehlt ein DT_WORDBREAK und das DT_SINGLELINE ist zuviel.
DT_VCENTER und DT_WORDBREAK funktionieren glube ich nicht zusammen (also nur: entweder - oder). Wenn du den Text mit Zeilenumbruch vertikal zentrieren willst, musst du Drawtext erst mit dem Parameter DT_CALCRECT aufrufen. In ARect befindet sich dann der tatsächlich benötigte Platz für die vorgegebene Breite des Rechtecks. Dann kannst du ausrechnen, wo du ARect plazieren must.
Beispiel (die Angaben in Gänsefüßchen ind erklärende Bezeichnungen dessen, was da hin soll):
ARect.Left := „Linke Position des Textes“;
ARect.Right := „Linke Position des Textes plus max. Breite der Textzeilen“
ARect.Top := 0;
ARect.Bottom := 0;
DrawText
(
Printer.Canvas.Handle,
PChar(Memo2.Lines.Text),
-1,
ARect,
DT_LEFT or DT_WORDBREAK or DT_CALCRECT
);
OffsetRect
(
ARect,
0,
„Gesamthöhe des Bereichs, der für die Ausgabe des Textes zur Verfügung steht“ - ARect.Bottom div 2
);
DrawText
(
Printer.Canvas.Handle,
PChar(Memo2.Lines.Text),
-1,
ARect,
DT_LEFT or DT_WORDBREAK
);
Gruß
Jochen