Autor Beitrag
Lernenochdazu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Do 07.07.22 10:16 
Guten Tag, habt ihr eine Idee wie ich Shapes bis zur ClientWidth automatisch 3 Reihen untereinander generieren lassen kann? Ein Shape soll eine Width von 100 haben und eine Height von 32. Zudem soll zwischen den Shapes 5 Abstand sein. LG
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 07.07.22 11:06 
Hallo,

dazu einfach ein Array (oder eine TList o.ä.) anlegen und dann in zwei geschachtelten Schleifen (x, y) die Shape-Objekte erzeugen, s.a. Komponenten zur Laufzeit erzeugen.
Am besten dazu eine eigene Funktion CreateShape(TControl parent, int x, int y) erzeugen, welche ein neues Shape-Objekt erzeugt (daher ist der letzte Code im obigen Link auch nicht so optimal).

PS: Auf das Array (bzw. die Liste) kann verzichtet werden, wenn du danach im Code nicht mehr darauf zugreifen möchtest, sondern es nur zur statischen Anzeige benutzt wird.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 07.07.22 13:37 
Dafür bietet sich TFlowPanel an. Darauf kannst du Komponenten legen bzw. zur Laufzeit drauf setzen und je nach Breite des Panels ordnet es diese automatisch an. Die Abstände kannst du realisieren, indem du bei den einzelnen Shapes die Eigenschaft Margin entsprechend der gewünschten Abstände setzt und AlignWithMargins auf True setzt.

Nebenbei weise ich mal auf mein altes Demo-Projekt hin, bei dem ich eine ähnliche Grafik ohne Shapes oder ähnliche Komponenten realisiert habe. Heute würde ich den Code sicherlich anders schreiben, aber vielleicht gibt es dir ja eine Idee: Periodensystem Xtreme 1.1 beta

Moderiert von user profile iconTh69: URL-Titel hinzugefügt
Lernenochdazu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Fr 08.07.22 11:14 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dafür bietet sich TFlowPanel an. Darauf kannst du Komponenten legen bzw. zur Laufzeit drauf setzen und je nach Breite des Panels ordnet es diese automatisch an. Die Abstände kannst du realisieren, indem du bei den einzelnen Shapes die Eigenschaft Margin entsprechend der gewünschten Abstände setzt und AlignWithMargins auf True setzt.


Ich habe ein TFlowPanel verwendet und darauf mein Shape gepackt. AliginWithMargins aktiviert und bei Margins die Abstände eingestellt. Allerdings sehe ich nach wie vor nur dieses eine Shape und es werden keine weiteren dynamisch generiert.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 08.07.22 13:16 
Auch beim TFlowPanel mußt du die Controls alle selber erzeugen und dann zuweisen (mittels Parent) - es sorgt nur für die passende Ausrichtung (entsprechend des FlowStyle) - es kann ja nicht wissen, wieviele und mit welchen Eigenschaften diese erzeugt werden sollen.