![]() |
Label-Font passend verkleinern
Hallo #,
ich lade den Inhalt eines Labels aus einer DB. Auf den Inhalt habe ich fast keinen Einfluss. Der Text soll aber immer vollständig dargestellt werden. Die gewünschte Lösung: Font verkleinern, bis es passt.
Delphi-Quellcode:
Das kann man auch noch etwas komprimieren, ich weiss.
procedure TForm1.FitQuestionFont;
var iMaxLength: Integer; iCurLength: Integer; iFontSize : Integer; begin Application.ProcessMessages; iMaxLength:= Label1.Width; iCurLength:= Label1.Canvas.TextWidth(LblQuestion1.Caption); if iCurLength>iMaxLength then begin for iFontSize:= Label1.Font.Size-1 downto 1 do begin Label1.Font.Size:= iFontSize; Application.ProcessMessages; iCurLength:= Label1.Canvas.TextWidth(Label1.Caption); if iCurLength<=iMaxLength then Break; end; end; end; Ist aber nicht das Problem. Problem ist, dass es ohne die Application.ProcessMessages nicht geht (funktioniert nicht, weil in FormActivate), mit dem A.Pro kann man dem Label praktisch zusehen, wie es kleiner wird. Ein Visible False kleppt auch nicht. Wie bekomme ich das Verkleinern ohne "Zuschauer" hin ? AutoSize fällt übrigens flach. Danke Heiko |
AW: Label-Font passend verkleinern
Ein temporärer TCanvas mit demselben Font?
|
AW: Label-Font passend verkleinern
Hallo, das klappt nicht.
MyCanvas.TextWidth(LblQuestion1.Caption); Hier kommt die Meldung Leinwand/Bild erlaubt kein Zeichnen Egal, hebe ich mir für Version 1.1 auf ... Danke Heiko |
AW: Label-Font passend verkleinern
Vielleicht klappt es mit
![]() |
AW: Label-Font passend verkleinern
Ein Canvas allein ist auch nichts. TCanvas stellt nur Zeichenmethoden bereit, aber keine eigene Zeichenfläche in dem Sinne von Speicher für Gezeichnetes. (Ja, der Name ist nicht sonderlich gut gewählt...) Mit einem temporären TBitmap sollte das wunderbar klappen.
|
AW: Label-Font passend verkleinern
Wann wird diese Methode aufgerufen?
Etwa noch bevor die Form (das Parent) sichtbar sind? Ein TLabel hat kein eigenes Canvas. Es zeichnet sich auf dem Canvas seines Parents. (z.B. die Form oder ein Panel) Und bezüglich dem ProcessMessages: Es ist so optimiert, daß es sich erst neu zeichnet, wenn der Parent das nächste mal neu gezeichnet wird und da wird vermutlich auch erst der neue Font kurzzeitig zugewiesen, wärend des Zeichnens. Außerhalb des Zeichnens ist dem Canvas meistens den Font des Parents zugewiesen :wink: PS: ![]() TLabel ist optimiert, um weniger GDI-Objekte zu benötigen (vermutlich wegen den Beschränkungen unter Win31/9x) und damit es schneller ist. |
AW: Label-Font passend verkleinern
Warum setzt Du denn den Text nicht einfach erst ein, wenn Du die Font-Größe schon berechnet hast?
Einem leeren Label kann man schließlich nicht "zusehen"... ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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