ich schreibe grade an einer neuen Komponente, im Prinzip ein rotierter Label und da habe ich Probleme
mit dem Berechnen des benötigten Textrechteckes.
Eigentlich dachte ich, dass dafür die Funktion TextExtent zuständig ist.
Das scheint aber nicht richtig zu funktionieren.
Habe das auch mit verschiedenen Fonts und Größen probiert.
TextExtent liefert die gleichen "falschen" Werte wie TextWidth und Textheight bei gedrehtem Text
auch die GetTextExtendPoint32 liefert falsche Ergebnisse.
GetTextExtentPoint32(canvas.Handle,pchar(s),length(s),size);
Code: Alles auswählen
procedure TForm1.FormPaint(Sender: TObject);
var size:TSize; s:string;
begin
s:='Hallo';
canvas.Font.Orientation:=900; // Textausgabe 90,0 Grad drehen
size:=canvas.TextExtent(s); // Das benötigte Textrechteck ermitteln
label1.caption:=IntToStr(size.cx); // Ausgabe der Breite
label2.caption:=IntToStr(size.cy); // Ausgabe der Höhe
canvas.TextOut(100,100,s); // Text mal angucken :-)
label3.caption:=IntToStr(canvas.TextWidth(s));
label4.caption:=IntToStr(canvas.TextHeight(s));
// neuer Test
GetTextExtentPoint32(canvas.Handle,pchar(s),length(s),size);
label3.caption:=IntToStr(size.cx); // Ausgabe der Breite
label4.caption:=IntToStr(size.cy); // Ausgabe der Höhe
end;
Bei 90 Grad brauche ich ja nur die cx mit cy tauschen, kein Problem, aber bei anderen Winkeln ?
Habe das nur mit Windows testen können.
Habt Ihr da eine Idee, wie man das richtig macht ?
Siro