![]() |
Textgrösse auf Fenstergrösse anpassen
Hallo, wer kann mir helfen?
Ich möchte einen Monitor als Nummernanzeige verwenden. d.h. die Nummern, die aus einer Datenbank kommen, sollen so gross wie das jeweilige Fenster angezeigt werden. Die Nummern haben je nach dem 1-4 Stellen. Die Textausgabe soll sich in Abhängigkeit der String-Länge an das aktuelle Fenster anpassen. Bei einer Auflösung von 800x600 soll eine 1-stellige Nummer in der max. Größe gezeichnet werden. Wenn dann die Nummern 2-stellig werden halt eben etwas kleiner, damit sie ins Fenster passt. (usw. bei 3 u. 4 Stellen). Wäre euch dankbar für einen Code-Schnipsel. Versuche seit Tagen weiterzukommen, muss aber passen. :gruebel: |
Re: Textgrösse auf Fenstergrösse anpassen
Mit den Funktionen TextWidth und TextHeight von TCanvas kannst du die Textbreite bzw. Höhe eines best. Textes mit eingestellter Schrift bekommen.
d.h. mach eine Schleife, in der du jedes mal die Schriftgröße kleiner machst, und sobald es passt, kannste es zeichen. :spin2: Also quasi so ungefähr:
Delphi-Quellcode:
for i:=100 downto 1 do
begin Canvas.Font.Size:=i; if ((Canvas.TextHeight(TheText)<TheHeight) and (Canvas.TextWidth(TheText)<TheWidth)) then break; end; |
Re: Textgrösse auf Fenstergrösse anpassen
Hi,
vielleicht hilft Dir ja auch die Methode ScaleBy weiter. Grüsse Woki |
Re: Textgrösse auf Fenstergrösse anpassen
Vielen Dank, das ging ja schnell;
Leider bin ich zu blöd um das umzusetzen. Hab zum Beispiel ein Formular mit einem Label darauf mit dem Text '1234'. Wäre dankbar für weitere Hilfe. |
Re: Textgrösse auf Fenstergrösse anpassen
Zitat:
Delphi-Quellcode:
for i:=100 downto 1 do
begin Canvas.Font.Size:=i; if ((Canvas.TextHeight('1234')<ClientHeight) and (Canvas.TextWidth('1234')<ClientWidth)) then break; end; Label1.Font.Size:=i; |
Re: Textgrösse auf Fenstergrösse anpassen
Super. Kannst Du mir noch beibringen wie man das ganze dann noch zentriert auf dem Screen ausgibt? - Danke im voraus.
|
Re: Textgrösse auf Fenstergrösse anpassen
Zitat:
Delphi-Quellcode:
Label1.Left:=(ClientWidth-Label1.Width) div 2;
Label1.Top:=(ClientHeight-Label1.Height) div 2; |
Re: Textgrösse auf Fenstergrösse anpassen
Zitat:
Habe es so versucht. Mein Fenster 800x600 und dann folgendes probiert. procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin Label1.Left:=(Form1.ClientWidth-Label1.Width) div 2; Label1.Top:=(Form1.ClientHeight-Label1.Height) div 2; for i:=400 downto 1 do begin Canvas.Font.Size:=i; if ((Canvas.TextHeight(Label1.Caption)<Form1.ClientHe ight) and (Canvas.TextWidth(Label1.Caption)<Form1.ClientWidt h)) then break; end; Label1.Font.Size:=i; end; end. |
Re: Textgrösse auf Fenstergrösse anpassen
Top und Left darfste natürlich erst anpassen, nachdem die Größe festgelegt wurde (sonst zentriert er es für die Ausgangsschriftgröße).
Die beiden Zeilen also erst nach "Label1.Font.Size:=i;" einfügen. :zwinker: Dann sollte es funktionieren. |
Re: Textgrösse auf Fenstergrösse anpassen
Jetzt funktionierts. Hab aber jetzt noch eine Frage mit dem zugewiesenen Font.
Bei 'Font = Arial' schaut es gut aus, nur bei 'Font = Arial Black' schneidet es die Ziffern ab. Vielleich kannst Du mir auch hier weiterhelfen. Danke. |
Re: Textgrösse auf Fenstergrösse anpassen
Hab jetzt nicht 'Arial Black' ausgewählt sondern 'Arial' und Eigenschaft 'fett' - jetzt siehts gut aus.
Wäre toll wenn man überall so gute und schnelle Hilfe bekäme. Tausend Dank nochmal. Hast mir echt super weitergeholfen. |
Re: Textgrösse auf Fenstergrösse anpassen
Hatte ich ganz vergessen zu erwähnen:
Wenn du eine andere Schriftart einstellen willst, darfst du das nicht nur beim TLabel tun, sondern musst das vorher auch beim Canvas einstellen. Also direkt vor oder nach der Zeile "Canvas.Font.Size:=i;". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 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