![]() |
Canvas.TextOut zentrieren
Hallo Leute,
ich würde gerne eine Ausgabe per TextOut auf dem Form zentrieren.
Delphi-Quellcode:
kommt bei der Schriftgröße schon einigermaßen hin, aber bei manchen texten hängt es.
x := Form1.Width div 2 - (Canvas.TextWidth(text) div 2);
Habt ihr da vl eine schöne Lösung oder irgendwelche Parameter die ich hier gebrauchen könnte? lg Nico |
AW: Canvas.TextOut zentrieren
sorry alter code
Delphi-Quellcode:
ist der aktuelle. Leider genau das gleiche problem.
x := round((Form1.Width - Canvas.TextWidth(text)) / 2);
canvas.TextOut(round((form1.ClientWidth - canvas.TextWidth('ZENTRIERT')) / 2),200,'ZENTRIERT'); von ![]() bringt leider nicht das gewünschte ergebnis EDIT: Das Problem scheint nur bei bold texten zu bestehen. da geht anscheinend die textwidth nicht richtig drauf? |
AW: Canvas.TextOut zentrieren
IMHO geht das mit
![]() |
AW: Canvas.TextOut zentrieren
Delphi-Quellcode:
var
r:TRect; s:String; begin r.Left := 0; r.Top := 0; r.Right := 300; r.Bottom := 100; s := 'Testtest'; Canvas.TextRect(r,s,[tfVerticalCenter,tfCenter,tfSingleLine]); end; |
AW: Canvas.TextOut zentrieren
Hi! Vielen Dank für eure Antworten,
beide Möglichkeiten scheinen aber Formatierungen wie bold/underline nicht zuzulassen oder? lg Nico |
AW: Canvas.TextOut zentrieren
Du musst vorher Canvas.Font.Style einstellen.
|
AW: Canvas.TextOut zentrieren
Ah schon müde :)
Danke für die Antwort, gerade selber gesehen dass das eh ganz normal über die Canvas lauft. Vielen Dank erstmal an alle! lg und einen schönen Abend Nico |
AW: Canvas.TextOut zentrieren
@Bummi, das ist leider mit Delphi 7 nicht möglich, da ist die Graphics wohl aufgewertet worden.
|
AW: Canvas.TextOut zentrieren
Zitat:
Man kann sich das aber für Delphi 7 leicht selber zusammenbauen:
Code:
In der Anwendung:
procedure TextOutEx(canvas: TCanvas; r: TRect; s: string; Font: TFont = nil);
var x, y: integer; StringWidthInPixel, StringHeightInPixel: integer; begin if Font <> nil then Canvas.Font := Font; StringWidthInPixel := Canvas.Textwidth(s); StringHeightInPixel := Canvas.Textheight(s); with r do begin x := (right - left - StringWidthInPixel) div 2; y := (bottom - top - StringHeightInPixel) div 2; end; Canvas.TextOut(x, y, s); end;
Code:
procedure TForm1.Button1Click(Sender: TObject);
var r: TRect; Font: TFont; begin // hier ist der Canvas der eines TImage r:=Image1.ClientRect; // falls benötigt: Font := TFont.Create; try with Font do begin color := clRed; Style := [fsbold, fsItalic]; size := 14; end; // oder Font als Parameter weglassen, falls nichts Spezielles gewünscht TextOutEx(Image1.canvas, r, 'Test-Test', Font); finally Font.Free; end; end; |
AW: Canvas.TextOut zentrieren
Liste der Anhänge anzeigen (Anzahl: 1)
Erstens: Vielen Dank für eure Bemühungen.
Hab es jetzt auch mit deiner Methode probiert asm aber leider kommt folgendes heraus(Anhang) Der Bold Text wird verschoben, da kommt anscheinend das Textwidth nicht zusammen, kann das sein? lg Nico |
AW: Canvas.TextOut zentrieren
Also bei mir sieht das hier ganz ordentlich aus:
Delphi-Quellcode:
procedure TFormTest.FormPaint(Sender: TObject);
const DRAWFLAGS = DT_SINGLELINE or DT_CENTER or DT_VCENTER; YOffset = 35; var s: string; R: TRect; OldFont: TFont; procedure DrawRect; begin R.Top := R.Top + YOffset; R.Bottom := R.Bottom + YOffset; DrawText(Canvas.Handle, PChar(s), -1, R, DRAWFLAGS); end; begin OldFont := TFont.Create; try //alten Font sichern OldFont.Assign(Canvas.Font); R := Rect(0, 0, ClientWidth, YOffset); s := 'Erste Zeile'; DrawRect; Canvas.Font.Size := 14; Canvas.Font.Style := [fsBold]; s := 'Zweite Zeile'; DrawRect; Canvas.Font.Size := 12; Canvas.Font.Style := [fsBold, fsItalic]; s := 'Dritte Zeile'; DrawRect; Canvas.Font.Size := 20; Canvas.Font.Name := 'Times New Roman'; Canvas.Font.Style := [fsItalic]; s := 'Vierte Zeile'; DrawRect; //Gesicherten Font wiederherstellen Canvas.Font.Assign(OldFont); finally OldFont.Free; end; end; |
AW: Canvas.TextOut zentrieren
Danke DeddyH! Das hat prima funktioniert.
Würde mich trotzdem itneressieren warum das TextWidth mit dem fsbold nicht umgehen kann. lg Nico |
AW: Canvas.TextOut zentrieren
Das kann ich aus dem Hut leider auch nicht sagen. Evtl. bringt ein Blick in die Delphi-Sourcen Licht ins Dunkel.
|
AW: Canvas.TextOut zentrieren
kann es sein dass Du TextWidth nicht neu berechnen lässt nach der Umstellung auf Bold ?
|
AW: Canvas.TextOut zentrieren
Vielleicht ein Reihenfolgeproblem,
erst Bold, dann TextWidth setzen? Ciao Frank EDIT: Thomas war schneller |
AW: Canvas.TextOut zentrieren
Wenn er ASMs Code 1:1 übernommen hat, kann es daran ja eigentlich nicht liegen, da dort der Font erzeugt, übergeben und anschließend ausgewertet wird.
|
AW: Canvas.TextOut zentrieren
Nein wurde zuerst bold gesetzt und dann berechnet. Wirklich seltsam.
|
AW: Canvas.TextOut zentrieren
Zitat:
setzen?! Nur Vermutung: Image1.Picture.Graphic.Width := Image1.Width; Image1.Picture.Graphic.Height := Image1.Height; neu setzen. Schöne Grüße aus Nürnberg, Manfred |
AW: Canvas.TextOut zentrieren
Wieso Image? Er hat doch direkt auf das Formular gezeichnet.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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