Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#6

AW: TCheckBox, Caption leer - 200%

  Alt 20. Apr 2017, 22:21
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
  Mit Zitat antworten Zitat