![]() |
Canvas, Vertikaler Text
Hi,
weiß jemand von euch wie ich einen Text auf ein einfaches Canvas vertikal ausgeben kan? (Ungerfähr so wie auf einem TPageControl) (Hoffe das ist die richtige Sparte, Multimedia ginge vieleicht auch...) Danke, igel457 |
Re: Canvas, Vertikaler Text
willst du den Text gedreht ausgeben oder oder so:
D E I N T E X T |
Re: Canvas, Vertikaler Text
Gebe deinen Text auf einem Tbitmap aus und drehe dieses dann.
|
Re: Canvas, Vertikaler Text
|
Re: Canvas, Vertikaler Text
Ich meinte um 90° Drehen.
Danke, das Problem wäre damit gelöst!!! |
Re: Canvas, Vertikaler Text
Zitat:
Das machst du halt etwa so:
Delphi-Quellcode:
also so in etwa. Mit den Y-Werten musst du mal rumexperimentieren. Das hängt natürlich auch von der Schriftgröße ab...
var S: String;
i: Integer; begin S:= 'Hallo'; //Canvas.Brush.Style := bsClear; for i:= 1 to Length(S) do begin Canvas.Textout(0,I*16,S[i]); end; end; EDIT: Also mit Standard-Schriftgröße funktioniert das prima. |
Re: Canvas, Vertikaler Text
Zitat:
|
Re: Canvas, Vertikaler Text
Rotierten Text gibt man so aus (vorausgesetzt, der Font kann das, z.b. TrueType):
Delphi-Quellcode:
Var aFt : LOGFONT; begin ... GetObject (aCanvas.Font.Handle, SizeOf (aFt), @Aft); aFt.lfEscapement := 10 * Rotation; // Rotate ist der Winkel in Grad aFt.lfOrientation := aft.lfEscapement; aCanvas.Font.Handle := CreateFontIndirect(aFt); |
Re: Canvas, Vertikaler Text
um jede art von Text um 90° zu drehen braucht man nur den Hintergrund in die andere Richtung um 90° drehen, dann den Text drauf schreiben, und dann wieder zurück drehen. (Bilder um 90° drehen ist ja kein problem)
|
Re: Canvas, Vertikaler Text
Gut ich hab mir ne Funktion geschrieben, die das nun für mich erledigt.
Das wie alzaimar es Vorgeschlagen hat, hat nicht geklappt. Also, wen es noch interessiert, so ist's gemacht:
Delphi-Quellcode:
procedure VerticalText(x,y:integer;text:string;target:TCanvas);
Var bmp:TBitmap; begin with target do begin bmp := TBitmap.Create; bmp.Canvas.Font := font; bmp.Width := textwidth(text); bmp.Height := textheight(text); bmp.Canvas.TextOut(0,0,text); turn(bmp); draw(x,y,bmp); bmp.Free; end; end; type TMyhelp = array[0..0] of TRGBQuad; procedure Turn(const Bitmap: TBitmap); var P: PRGBQuad; //^THelpRGB; x,y,b,h : Integer; RowOut: ^TMyHelp; help: TBitmap; begin Bitmap.PixelFormat := pf32bit; help := TBitmap.Create; try help.PixelFormat := pf32bit; b := bitmap.Height; h := bitmap.Width; help.Width := b; help.height := h; for y := 0 to (h-1) do begin rowOut := help.ScanLine[y]; P := Bitmap.scanline[bitmap.height-1]; inc(p,y); for x := 0 to (b-1) do begin rowout[x] := p^; inc(p,h); end; end; finally bitmap.Assign(help); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz