Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TCheckBox, Caption leer - 200% (https://www.delphipraxis.net/192470-tcheckbox-caption-leer-200-a.html)

hoika 20. Apr 2017 19:38

TCheckBox, Caption leer - 200%
 
Hallo,
ich habe ein CheckBox ohne Caption, etwas weiter daneben ein Label.
Bei 200% Skalierung überschreibt der nicht vorhandene Text (Caption) der CheckBox das Label.

Bei 150% geht es gerade noch so.
Es siht so aus, als ob die CheckBox trotzdem eine minimale Caption zeichnet,
die mit steigernder Skalierung immer größer wird.

Wie kann ich das verhindern?
Die CheckBox, also das Symbol selbst soll natürlich größer werden,
aber was soll das mit der Caption ?

PS: Der Abstand ist zwischen CheckBox und Label ist schon extra etwas größer.

nahpets 20. Apr 2017 21:20

AW: TCheckBox, Caption leer - 200%
 
Wenn Du die beiden auf ein randloses TPanel legst und für die TCheckBox Align auf alLeft setzt und für das Label auf alClient, dürfte die "Überlagerung" weg sein.

Die Frage die sich dann stellt ist nur: "Wie berechnet man die richtige Breite für das Panel?"

a.def 20. Apr 2017 21:25

AW: TCheckBox, Caption leer - 200%
 
Zitat:

Zitat von nahpets (Beitrag 1368512)
Die Frage die sich dann stellt ist nur: "Wie berechnet man die richtige Breite für das Panel?"

Was würde denn das auslesen der Größe einer CheckBox unter 200% Skalierung ausgeben? Das skalierte Maß oder das originale, kleine Maß?
Wenn das skalierte, dann würde ich einfach die Größe der CheckBox auslesen.

Weiß leider nicht mehr wie es funktioniert sonst würde ich es hier schreiben.

nahpets 20. Apr 2017 21:26

AW: TCheckBox, Caption leer - 200%
 
Prinzipiell ja, aber bei welchen Ereignissen?

p80286 20. Apr 2017 21:52

AW: TCheckBox, Caption leer - 200%
 
OnResize, wenn man den Font setzt?
und dann Client....?

Gruß
K-H

nahpets 20. Apr 2017 22:21

AW: TCheckBox, Caption leer - 200%
 
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 :-(

himitsu 20. Apr 2017 22:43

AW: TCheckBox, Caption leer - 200%
 
Lösung: Du nimmst statt des Labels die Caption der Checkbox zum Anzeigen des Textes. :roll:

Oder TStaticText (das echte Label von Windows) statt des TLabel (dem Pseudocontrol der VCL).
TLabel, TImage und andere sind keine eigenständigen Controls, malen sich nur auf den Canvas ihres Parents und alle anderen Komponenten liegen somit immer davor.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz