AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Label-Font passend verkleinern

Ein Thema von hoika · begonnen am 5. Sep 2011 · letzter Beitrag vom 7. Sep 2011
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

Label-Font passend verkleinern

  Alt 5. Sep 2011, 07:17
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:
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;
Das kann man auch noch etwas komprimieren, ich weiss.
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Label-Font passend verkleinern

  Alt 5. Sep 2011, 07:18
Ein temporärer TCanvas mit demselben Font?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Label-Font passend verkleinern

  Alt 5. Sep 2011, 07:38
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Label-Font passend verkleinern

  Alt 5. Sep 2011, 07:41
Vielleicht klappt es mit MSDN-Library durchsuchenDrawText und DT_CALCRECT?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Label-Font passend verkleinern

  Alt 5. Sep 2011, 08:13
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#6

AW: Label-Font passend verkleinern

  Alt 5. Sep 2011, 08:31
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

PS: Delphi-Referenz durchsuchenTStaticText ist das "echte" Label des Windows (als eigentständiges Control)

TLabel ist optimiert, um weniger GDI-Objekte zu benötigen (vermutlich wegen den Beschränkungen unter Win31/9x) und damit es schneller ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Sep 2011 um 08:33 Uhr)
  Mit Zitat antworten Zitat
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
269 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Label-Font passend verkleinern

  Alt 7. Sep 2011, 14:03
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"...
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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