Passt die Größe einer Delphi-Schaltfläche automatisch an

8

Ich möchte die Beschriftung in TButton dynamisch ändern. Das Problem ist, dass TButton die Größe nicht selbst ändert, wenn die Beschriftung zu lang ist, um auf die Schaltfläche zu passen. so blutet der Text über die Ränder der Schaltfläche.

Wie kann ich mit der Taste die Größe ändern, um sie an die Beschriftung anzupassen?

Einige Ideen:

  • Verwenden Sie eine andere Schaltflächenkomponente, die ihre Größe ändern kann. Gibt es einen?
  • Unterklasse TButton und AutoSize=True setzen (habe das nicht versucht, weiß nicht, ob es funktioniert).
  • Berechnen Sie die Größe der Beschriftung in Pixeln und ändern Sie die Breite bei jeder Änderung der Beschriftung manuell.
awmross 13.03.2012, 03:35
quelle

2 Antworten

5

Ich entschied mich für Option 3 ("Berechne die Größe der Beschriftung in Pixeln und ändere die Breite jedes Mal manuell, wenn ich die Beschriftung ändere")

Mein Code sieht ungefähr so ​​aus:

%Vor%     
awmross 13.03.2012, 23:24
quelle
17

Unterklasse TButton , machen Sie die bereits vorhandene Eigenschaft AutoSize öffentlich und implementieren Sie CanAutoSize :

%Vor%

Aktualisierung:

Um Davids Kommentar zu beantworten, warum die hartcodierten 8 Pixel : Einfach gesagt, es sieht gut aus. Aber ich habe ein wenig visuelle Nachforschungen über Randbreiten von Knöpfen gemacht:

%Vor%

Informationen zum Betriebssystem finden Sie unter Abrufen der Windows-Version . Theming könnte durch Auswertung von Themes.ThemeServices.ThemesEnabled berücksichtigt werden. Wenn dies der Fall ist, kann der für den Text reservierte Inhalt mit GetThemeBackgroundContentRect , die von der ThemeServices -Variable umschlossen wird:

%Vor%

Wenn ich meinen Test mit dieser Routine wiederhole, wird eine konstante Rahmengröße von 3 Pixeln in jeder Version und mit jedem Knopfzustand angezeigt. Somit belassen 8 Pixel des gesamten Rands 1 Pixel Atempause für den Text.

Und um die Schriftgröße zu berücksichtigen, schlage ich folgende Änderung vor:

%Vor%

Und ich muss ehrlich sein: Es sieht besser aus.

    
NGLN 13.03.2012 05:47
quelle