Um die Mindestgröße eines Buttons zu ermitteln gehe ich im Prinzip so vor:
Delphi-Quellcode:
function TfrmDGB.SetButton;
var
lb : TLabel;
begin
lb := TLabel.Create(Self);
lb.Font := btnFilter.Font;
lb.AutoSize := True;
lb.Caption := btnFilter.Caption;
btnFilter.Width := lb.Width + 16;
lb.Free;
end;
Mit dieser Methode haben die Buttons auch dann noch eine korrekte Breite, wenn die Schriftgröße zur Laufzeit verändert wird.
Verallgemeinert könnte das dann eventuell ungefähr so aussehen:
Delphi-Quellcode:
function GetWidth(c : TControl; Caption : String) : Integer;
var
lb : TLabel;
begin
lb := TLabel.Create(Nil);
lb.Font := c.Font;
lb.AutoSize := True;
lb.Caption := Caption;
Result := lb.Width + 16;
lb.Free;
end;
Bei Labels, die automatisch die richtige Breite haben sollen, setze ich AutoSize auf True. Damit links und rechts ein kleiner Rand bleibt (was meiner Meinung nach besser aussieht), setze ich die Caption immer in der Form
Leerzeichen + Text + Leerzeichen
. Damit sieht das eigentlich in allen Anwendungen ordentlich aus.