Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text vertikal auf Canvas ausgeben (https://www.delphipraxis.net/93071-text-vertikal-auf-canvas-ausgeben.html)

messie 31. Mai 2007 09:50


Text vertikal auf Canvas ausgeben
 
Hallo,

bestimmt gibt es dieses Thema hier schon, mit fehlt aber das passende Stichwort, jedenfalls habe ich nix gefunden.
Wie bekomme ich einen Text 90° hochkant auf einem Canvas ausgegeben?

Danke, Messie

SirTwist 31. Mai 2007 09:57

Re: Text vertikal auf Canvas ausgeben
 
Such mal bei Torry nach Rotate Text. Im Prinzip musst Du Dir mit der Windows-API einen neuen Font anlegen und damit dann zeichnen.

uwewo 31. Mai 2007 10:18

Re: Text vertikal auf Canvas ausgeben
 
Hi Messie,

hatte das auch mal gebraucht und kurz in einem alten Source nachgesehen.

Hier ein Auschnitt

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
   LF  : TLogFont;
   TF  : TFont;
begin
    Form1.Canvas.Font.Color := clBlack;
    Form1.Canvas.Font.Name  :='Arial';
    TF := TFont.Create;
    TF.Assign(Form1.Canvas.Font);
    GetObject(tf.Handle, sizeof(LF), @LF);
    LF.lfEscapement := 900;
    LF.lfOrientation := 900;
    TF.Handle := CreateFontIndirect(LF);
    Form1.Canvas.Font.Assign(TF);
    TF := TFont.Create;
    Form1.Canvas.TextOut(100,100,'Hallo');
    tf.free;
end;
Habe es nur auf die schnelle den Canvas auf Form1 geändert und das wichtigste rauskopiert.

Nicht getestet sollte aber funktionieren.

messie 31. Mai 2007 11:02

Re: Text vertikal auf Canvas ausgeben
 
Danke, das ist super, die LogFont-Struktur kann man sicher häufiger mal gebrauchen.
lfOrientation scheint nicht zu funktionieren, so wie ich es im SDK verstanden habe, sollten sich damit die Zeichen noch einzeln gegen ihre Basis drehen lassen.

Grüße, Messie

semo 31. Mai 2007 14:10

Re: Text vertikal auf Canvas ausgeben
 
also bei mir funzt das 100%:

Zitat:

lfEscapement: Specifies the angle, in tenths of degrees, between the escapement vector and the x-axis of the device. The escapement vector is parallel to the base line of a row of text.

lfOrientation: Specifies the angle, in tenths of degrees, between each character's base line and the x-axis of the device.

SirThornberry 31. Mai 2007 14:22

Re: Text vertikal auf Canvas ausgeben
 
man sollte dabei beachten das diese Variante nur mit TrueType-Fonts ordentlich funktioniert. Andere lassen sich teilweise nicht frei drehen.
Für den fall wäre eine alternative den Text normal auf ein Zeischenbild zu schreiben und dieses dann zu drehen.

messie 31. Mai 2007 14:22

Re: Text vertikal auf Canvas ausgeben
 
Zitat:

Zitat von computer-glossar.de
also bei mir funzt das 100%:

Vielleicht hast Du mal ein grafisches Beispiel, wie es funzt. Vielleicht habe ich es auch anders verstanden als es ist.

Grüße, Messie

EDIT: Hmpf, wieder keine Mitteilung, daß neue Posts vorhanden sind.
Übrigens benutze ich das Beispiel oben mit Arial...

uwewo 31. Mai 2007 14:36

Re: Text vertikal auf Canvas ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Habe mein Beispiel nun selbst getestet 1:1 in ein neues Projekt kopiert.

Funktioniert wie gewünscht Bilder im Anhang.

messie 31. Mai 2007 14:48

Re: Text vertikal auf Canvas ausgeben
 
Ja, so hatte ich das auch. Da kannst Du aber lfOrientation rauslöschen oder auf beliebige Werte setzen, das sieht immer so aus. Ich hatte aus der SDK-Hilfe verstanden, daß ich die Buchstaben mit lfOrientation selbst nochmal rotieren kann.

Aber für das was ich brauchte ist Dein Beispiel super. Der Rest ist Spielerei.

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz