Entwickler-Ecke
Sonstiges (Delphi) - Shapes bis zur ClientBreite automatisch generieren lassen
Lernenochdazu - Do 07.07.22 10:16
Titel: Shapes bis zur ClientBreite automatisch generieren lassen
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 - 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 [
https://www.delphi-treff.de/tipps-tricks/komponenten/allgemein/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 - 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 [
https://entwickler-ecke.de/viewtopic.php?t=91534]
Moderiert von Th69: URL-Titel hinzugefügt
Lernenochdazu - Fr 08.07.22 11:14
jaenicke hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!