Positionierung von Controls( Anchor, Autosize etc)

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
charlytango
Beiträge: 333
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Positionierung von Controls( Anchor, Autosize etc)

Beitrag von charlytango »

scheninbar bin ich trotz Lesen von Anchor-Docs et.al nicht in der Lage die Einstellungen zu finde die ich brauche
Screenshot 2021-04-27 181406.png
Screenshot 2021-04-27 181406.png (1.62 KiB) 193 mal betrachtet
was muss ich einstellen damit das markierte Control sich so verhält dass es bis zur rechten Seite der parent-Komponente geht und sich automatisch bei Größenänderungen anpasst?

Mit Anchor scheint es nicht zu klappen -- ach ja, ich kann auch keinen Anchor-Editor verwenden weil die Controls zur Laufzeit erzeugt werden.

Muster: Project Options in der IDE

wp_xyz
Beiträge: 3633
Registriert: Fr 8. Apr 2011, 09:01

Re: Positionierung von Controls( Anchor, Autosize etc)

Beitrag von wp_xyz »

charlytango hat geschrieben:
Di 27. Apr 2021, 18:29
ach ja, ich kann auch keinen Anchor-Editor verwenden weil die Controls zur Laufzeit erzeugt werden.
Was zur Designzeit funktioniert, muss auch zur Laufzeit funktionieren!

Um den Anker-Editor zur Laufzeit nachzubauen, verwendest du die AnchorSide* Properties, wobei * für Left, Top, Right und Bottom steht, und jede AnchorSide zwei Unter-Properties Control und Side (das Control und die Seite, woran das zu verankernde Control hängt). Side hat die Werte asrTop, asrBottom und asrCenter, wobei diese - und das ist etwas unschön - auch für die horizontale Verankerung verwendet werden und dann für links-rechts-Mitte stehen: wenn du also etwas mit der rechten Seite eines anderen Controls verankern willst, musst du Side trotzdem auf asrBottom setzen, obwohl es sprachlich deutlich daneben ist.

Im folgenden Beispiel werden ein Label und ein TFileNameEdit zur Laufzeit erzeugt und horizontal passend nebeneinander positioniert, wobei sich bei Größenänderung des Formulars die Breite des FileNameEdit anpasst:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  lbl: TLabel;
  ed: TFilenameEdit;
begin
  lbl := TLabel.Create(self);
  lbl.Caption := 'File name:';
  lbl.BorderSpacing.Left := 6;
  lbl.AnchorSideLeft.Control := Self;
  lbl.Parent := self;

  ed := TFileNameEdit.Create(self);
  ed.Parent := self;

  ed.AnchorSideTop.Control := self;
  ed.AnchorSideRight.Control := self;
  ed.AnchorSideRight.Side := asrBottom;
  ed.AnchorSideLeft.Control := lbl;
  ed.AnchorSideLeft.Side := asrBottom;
  ed.Anchors := [akLeft, akRight, akTop];
  ed.BorderSpacing.Around := 6;

  lbl.AnchorSideTop.Control := ed;
  lbl.AnchorSideTop.Side := asrCenter;
end; 
Statt AnchorSideLeft kann man auch AnchorSide[akLeft] verwenden, usw.

charlytango
Beiträge: 333
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Positionierung von Controls( Anchor, Autosize etc)

Beitrag von charlytango »

merci vielmals...das lässt meine grauen Zellen wieder mal rauchen ;)

Habs gerade getestet -- perfekt.
nun muss ich das noch in meinen Code bringen

danke nochmal

wp_xyz
Beiträge: 3633
Registriert: Fr 8. Apr 2011, 09:01

Re: Positionierung von Controls( Anchor, Autosize etc)

Beitrag von wp_xyz »

charlytango hat geschrieben:
Di 27. Apr 2021, 19:25
das lässt meine grauen Zellen wieder mal rauchen ;)
Hier noch etwas Zunder: https://wiki.freepascal.org/Anchor_Sides

Antworten