wp_xyz hat geschrieben: Fr 4. Dez 2020, 12:46
Angenommen ich möchte aus dem Hauptformular heraus einen Dialog ähnlich wie den mit dem "umfangreichem Panel" aus deinem Demo-Projekt aufrufen, wie mache ich das?
Im hochgeladenen Demoprojekts siehst du, wie das geht. Das Panel wird im Form des Hauptfensters unsichtbar angelegt und mit der Prozedur DlgAddControl in den Abfragedialog eingehängt. Dadurch sind sämtliche Ein- und Ausgabekomponenten des Panels mit allen Eingabedaten ohne Zusatzschritte in allen Methoden des Hauptformulars verfügbar, dort werden die Eingabewerte ja auch gebraucht.
vor allem wenn vielleicht zu dem einen Dialog noch ein Dutzend andere dazukommen.
Naja, das Maximum, was ich in meinen Projekten (damals noch mit Delphi) in einer Unit gebraucht habe, waren vier Dialoge mit eigenem Panel, im Schnitt sind es weniger als zwei. Aber das bedeutet, dass in einem großen Projekt sich die Anzahl der Units, die du brauchst, gut und gerne halbiert. Bzw. ist es nach meiner Erfahrung eher umgekehrt, wenn die Möglichkeit nicht besteht, begnügt man sich mit dem, was da ist, ruft zwei mal hinterinander inputbox auf, statt die zwei Eingabefelder gemeinsam in einem Dialog abzufragen und erstellt halt auch sonst nicht ganz so optimale Dialoge, um sich die Inflation an separaten Units zu ersparen. Eine gewisse Bequemlichkeit liegt im Wesen der meisten Programmierer, die ich kennengelernt habe, nicht nur in meinem.
Und das "versteckte Panel" aus dem sichtbaren Bereich des Formulars herauszuschieben ist eine sichere Methode, den Kollegen, der nach dir das Programm warten soll, zu verwirren, ganz abgesehen davon, dass die Controls auf dem versteckten Panel weiterhin im Objekt-Inspektor vorkommen.
Natürlich ist es auch eine Programmiermethode, die der Kollege kennen sollte, oder zumindest kennenlernen sollte, wenn er das Programm in Zukunft wartet. Und es spricht ja nichts dagegen, das Formular zur Designtime größer zu machen und es im Onshow auf die richtige Größe zu setzen - wobei meine normalen Formulare sich ohnehin so gut wie immer ihre Position in einem INi-File oder einer Datenbank merken, sodass man nur beim allerersten Programmstart die Fenstergröße anpassen muss. Wenn er das gar nicht kennt, ist er natürlich verwirrt. Aber sobald man weiß, wie es funktioniert, ist da nichts verwirrendes mehr dran. Abstrakte Methoden, Generics, und hunderterlei andere Konstrukte können einen Programmierer auch verwirren, wenn er sie nicht kennt.
Und natürlich sollen diese Controls auch im OI angezeigt werden. Darin besteht ja der Vorteil von dem Konzept, dass diese Dialoge genauso bequem im OI konfiguriert werden können, wie wenn man den Abfragedialog in einer separaten Unit angelegt hätte. Nur eben viel bequemer, weil du in der Unit, in der du sie brauchst, direkt den Zugriff auf die Ein-Ausgabefelder des Dialogs hast, und eben nicht für jeden etwas komplexeren Abfragedialog eine eigene Unit brauchst (die ihrerseits in Prüffunktinen oft Zugriff auf Daten des Hauptformulars braucht).