Wäre möglich, was ich nur absolut nicht weiß ist, wie verhält sich das, wenn zur Laufzeit die Systemeinstellungen verändert werden.
Bei meinen Programmen ist es mir bisher nie gelungen dann noch ein (halbwegs) vernünftiges Aussehen hinzubekommen.
Nach 'nem Neustart der Applikation passt es dann meist wieder.
Ansonsten hab' ich mir angewöhnt alles auf (randlose) Panels zu legen. Die haben AutoSize = True. Labels haben ebenfalls AutoSize = True.
ParentFont ist ebenfalls True.
Der Anwender kann über's Menü die Schriftgröße der Application selbst verändern. Der Rest passt sich dann eigentlich automatisch an.
Ggfls. müssen in der "Schriftveränderungsroutine" noch einzelnen Komponenten, bei denen Parentfont nicht sinnvoll einsetzbar ist (z. B. Editorkomponenten, Memos ... mit Font Courier New ...), angepasst werden.
Für Buttons ... nutze ich so 'ne Spielerei:
Delphi-Quellcode:
Type
tDimension = record
Height : Integer;
Width : Integer;
end;
function GetDimension(s : String; f : TFont) : tDimension;
var
lb : TLabel;
begin
lb := TLabel.Create(Nil);
lb.Font := f;
lb.AutoSize := True;
lb.Caption := s;
Result.Height := lb.Height;
Result.Width := lb.Width;
lb.Free;
end;
// Button.Align ist entweder alLeft oder alRight.
procedure TFormXY.SetButton(btn : TSpeedButton; pn : TPanel);
var
d : TDimension;
begin
d := GetDimension(btn.Caption,pn.Font);
btn.Width := d.Width + 16;
pn.Height := d.Height + (pn.BorderWidth * 2) + 8;
// Hat man mehrere "Sachen" auf dem Panel, muss man
// die hier ebenfalls anpassen ... und die Parameterlist ergänzen ...
end;
procedure TFormXY.SetButtons(pn : TPanel);
var
d : TDimension;
i : Integer;
begin
for i := 0 to pn.ComponentCount - 1 do begin
if pn.Components[i] is TSpeedButton then begin
d := GetDimension(TSpeedButton(pn.Components[i]).Caption,pn.Font);
TSpeedButton(pn.Components[i]).Caption).Width := d.Width + 16;
pn.Height := d.Height + (pn.BorderWidth * 2) + 8;
end;
end;
end;
Passt --- meistens