Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Autosize für Button?


JayK - Fr 20.01.06 22:56
Titel: Autosize für Button?
Hallo,

wie kriege ich es hin, dass ein Button seine Größe immer der Länge seiner Caption anpasst (mitwächst), wenn sich diese ändert? Ich möchte keine neue Komponente erstellen, sondern nur wissen, wie ich zur Laufzeit dafür sorgen kann, dass das Teil die Größe nach dem Platzbedarf des Textes ändert.

Schonmal Danke im Voraus
JayK


mkinzler - Fr 20.01.06 23:00

Nur manuell, d.h nach Ändern von Caption Breite berechnen und setzen. Da ein Button keine eigenschaft autosize besitzt und es kein Event für die Änderung von caption gibt, kann das ein Button nicht selber.


JayK - Fr 20.01.06 23:38

Ja das ist mir schon klar. Mir ging es vorrangig darum, wie ich denn die Breite nun berechnen kann. Ich hab da keine Idee :nixweiss:


mkinzler - Fr 20.01.06 23:45

user profile iconJayK hat folgendes geschrieben:
Ja das ist mir schon klar. Mir ging es vorrangig darum, wie ich denn die Breite nun berechnen kann. Ich hab da keine Idee :nixweiss:

Irgendwie mit (Button.Font.Size + <Abstand zwischen Zeichen>)*Length(Button.Caption) + 2*<Abstand Text zu Rand>


Marc. - Fr 20.01.06 23:47

voherigen beitrag editiert.. bzw komplett ersetzt!


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1Change(Sender: TObject);
begin
button1.Caption := edit1.Text;
 button1.Width := length(button1.Caption) * 10;
end;


allerdings ist das ergebnis wieder exponential...


Lannes - Sa 21.01.06 00:16

Hallo,

die Prozedur setzt die Button-Größe in Abhängigkeit zur Stringlänge und dem Font des Buttons:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure SetButtonWidthHeight(aButton: TButton;S: String);
var B : TBitmap;
begin
  B := TBitmap.Create;
  B.Canvas.Font := aButton.Font;
  aButton.Width := B.Canvas.TextWidth(S)+14;
  aButton.Height := B.Canvas.TextHeight(S)+14;
  aButton.Caption := S;
  B.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SetButtonWidthHeight(Button1,'Ein Schalter');
end;


JayK - Sa 21.01.06 16:07

Dankesehr, das klappt wunderbar :-D