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/)
-   -   Delphi Unterschiedliche Controls an gleicher Position (https://www.delphipraxis.net/192535-unterschiedliche-controls-gleicher-position.html)

Hobbycoder 27. Apr 2017 07:30

Unterschiedliche Controls an gleicher Position
 
Hi,

ich erstelle eine Eingabemaske zum festlegen von Bedingungen für später stattfindende Ereignisse, die sich aber dynamisch verändern soll.
In Eingabemaske wählt der Benutzer als aller erstes eine Quellobjekt aus, dessen Eigenschaften für die Bedingung überprüft werden sollen.
Nun haben nicht alle Objekte die gleichen Eigenschaften, so dass das Eingabecontrol für den Vergleichswert unterschiedlich sein kann.
Für manch ein Objekt benötige ich für den Vergleichswert ein Edit, für andere eine Combobox und für wieder anderes einen DateTimePicker.

Ich könnte natürlich alle Controls an ihre Position setzen, und nach Auswahl des Objektes nur das Visible machen, welches für die Eingabe sinnvoll ist.
Das wäre aber für die spätere Bearbeitung der Form unschön, weil ich nicht alle Controls sehen kann.

Ich könnte auch die Controls irgendwo auf die Form legen, und nach Auswahl des Objektes nicht nur das passen Visible machen, sondern auch passend platzieren.

Auch könnte ich das Control dynamisch erstellen lassen.

Gibt es noch andere Möglichkeiten sowas zu realisieren, von denen ich vielleicht noch nichts weiß, oder nicht von selbst drauf komme?
Wie macht ihr sowas?

Aviator 27. Apr 2017 07:39

AW: Unterschiedliche Controls an gleicher Position
 
Du könntest dir mal (vererbte) Frames anschauen.

Poelser 27. Apr 2017 07:48

AW: Unterschiedliche Controls an gleicher Position
 
Ich mache so etwas mit einem Pagecontrol, in dem zur Laufzeit die Tabs invisible sind. Auf jeder Page sind dann die Benötigten Controls. In Abhängigkeit von den benötigten Daten wird dann das entsprechende TabSheet aktiviert.
Wenn du das noch in ein Frame packst, dann kannst du das auch noch mehrfach verwenden. Bei mir ist das z.B. für einen Filter für Tabellenansichten so gemacht.

HTH, Poelser

sko1 27. Apr 2017 08:30

AW: Unterschiedliche Controls an gleicher Position
 
oder einen Frame an die gewünschte Position und zur Laufzeit

Delphi-Quellcode:
Edit1.Parent := Frame1;
RadioButton1.Parent := Frame1;
...
Die Controls selbst legst Du zur Entwurfszeit irgendwo aufs Formular

Ciao
Stefan

stahli 27. Apr 2017 10:04

AW: Unterschiedliche Controls an gleicher Position
 
Man sollt sicher unterscheiden, ob man ganz unterschiedliche Masken pro Thema hat oder sich nur einzelne Controls marginal unterscheiden.

Für den ersten Fall wären sicher Frames oder embedded Forms sinnvoll.
Die enthalten in sich schon alle Controls und die GUI-Logik und werden nach Bedarf erzeugt und an die gewünschte Stelle platziert bzw. später wieder freigegeben.

PageControls ohne sichtbare Reiter wären eine Alternative, aber m.E. unhandlicher.

Edits ein- und ausblenden und verschieben würde ich nur im zweiten Fall, wenn es in den Masken nur geringe Unterschiede gibt.

Hobbycoder 27. Apr 2017 10:30

AW: Unterschiedliche Controls an gleicher Position
 
Danke für eure Anregungen.

ich werde das so machen, dass ich tatsächlich die Controls über Visible und Position anzeige bzw. ausblende.
Es handelt sich bei der Maske im Grunde nur im 1 Control, im einem Fall auch mal um 2. Alles anderen Controls sind bei allen Objekten gleich, so dass über Frames oder PageControl sich da nichts einsparen lässt.

Hatte gedacht, es gäbe noch irgendwas diesbezüglich in Delphi, was ich noch nicht kenne. Dem ist ja nicht der Fall.

Also, danke nochmal.

nahpets 27. Apr 2017 10:49

AW: Unterschiedliche Controls an gleicher Position
 
Für Sachen der Art benutze ich entweder Frames oder Panels.

Die Controls werden alle mit Align := alLeft "ausgestattet".

Durch Ändern von Visible braucht man sich nun nicht mehr um die Position kümmern, da sie sich immer alle linksbündig "nebeneinander" legen.

Man muss allerdings bei der Reihenfolge des Sichtbarmachens von links nach rechts vorgehen, da ansonsten die Reihenfolge "strubbelig" wird. Hat man allerdings links eine immer gleiche Anordnung und möchte nur beim rechten Control eine Auswahl haben, ist das ganze recht unproblematisch.

Frickler 27. Apr 2017 11:56

AW: Unterschiedliche Controls an gleicher Position
 
Ich verwende dafür Panels, die ich zur Designzeit auf dem Formular so verteile, dass ich alle darauf befindlichen Steuerelemente gut bearbeiten kann. Zur Laufzeit werden die Panels dann im OnCreate an die gleiche Stelle gesetzt und bis auf das jeweils anzuzeigende unsichtbar gemacht.

himitsu 27. Apr 2017 11:58

AW: Unterschiedliche Controls an gleicher Position
 
Zitat:

Zitat von Frickler (Beitrag 1369295)
Ich verwende dafür Panels, die ich zur Designzeit auf dem Formular so verteile, dass ich alle darauf befindlichen Steuerelemente gut bearbeiten kann. Zur Laufzeit werden die Panels dann im OnCreate an die gleiche Stelle gesetzt und bis auf das jeweils anzuzeigende unsichtbar gemacht.

TNotebook war vom Prinzip her nett, aber ist aber eine "schlechte" Demokomponente.

Also TPageControl, Tabs ausblenden und wie ein Panel mit mehreren Seiten verwenden.

Beim Visible-Ändern und die Controls (mit Margins) oder besser Panels auf alTop ... da muß man halt auf die Reihenfolge achten, da sie sich ändern könnte.
Möglich wäre auch Height=0 zu setzen, aber da muß man auf den Fokus achten und müsste eventuell noch mit Enabled rumspielen.
* Eventuell einfach Tag mit der "Sortierung" füllen oder die Erstellungsreihenfolge verwenden und dann nach Sichtbarkeisänderung das Top überall nochmal anpassen.
* Oder immer erst "alles" ausblenden und dann neu in der richtigen Reihenfolge das Einblenden, was grade benötigt wird.


Oder, wenn es nur einzene Controls sind, dann nicht mit Visible arbeiten, sondern mit Enabled und alles an seiner Position belassen.

Bentissimo 27. Apr 2017 13:59

AW: Unterschiedliche Controls an gleicher Position
 
Scheint mir ein Fall für einen "Objektinspektor" zu sein. Oder allgemeiner ausgedrückt ein vertikales Grid.

Ich persönlich verwende DevExpress, da ist sowas dabei, aber sehr wahrscheinlich gibt es auch was kostenloses (Jedi?).


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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