![]() |
ShowModal verschachteln?
Hi zusammen,
Ich komm gedanklich nicht weiter... Aus einem Programm heraus soll ein Modales dialogfeld aufgerufen werden. in erster Linie deshalb Modal, damit's nicht minimierbar ist, und die steuerung, ohne weiteres gehampel, wieder ans Hauptformular zurückgeht, wenn man da fertig ist. Soweit, so schön. Das Modale formular, nennen wir es ModalForm, hat 3 Schalter: Hinzufügen, Ok, Abbrechen. Ok und abbrechen glaub ich mir noch, ;-), aber: Wenn man den Schalter "Hinzufügen" betätigt, soll sich ein weiteres, modales, Dialogfeld öffnen, dort wird was hinzugefügt, und, jetzt kommen wir zum Problem, dann natürlich wieder zum ModalForm zurückkehren, dieses aktualisieren, nämlich mit dem, was hinzugefügt wurde, und das ModalForm wieder anzeigen. Und genau bei dem teil scheitere ich, sprich im onClick vom Hinzufuegen-Button.. Meine Fragen: kann man das überhaupt so lösen, oder vielleicht eher schlicht das Minimieren verbieten? Wenn die Modal-Verschachtelung geht, wie sieht dann das onClick vom Hinzufuegen aus? Meine ShowModal sieht folgendermaßen aus:
Delphi-Quellcode:
und das onClick
function TModalForm.ShowModal: integer;
begin { fuelle listen, bla bla } result := inherited ShowModal; end;
Delphi-Quellcode:
Für eine Antwort wäre ich sehr dankbar!
procedure TModalForm.HinzufuegenClick(sender: TObject);
begin Application.CreateForm (THinzufuegenFormular, HinzufuegenFormular); HinzufuegenFormular.ShowModal; HinzuFuegenFormular.Free; {und nu???} end; Viele Grüße Marco [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit] |
Re: ShowModal verschachteln?
Statt
Delphi-Quellcode:
solltest du lieber
Application.CreateForm (THinzufuegenFormular, HinzufuegenFormular);
Delphi-Quellcode:
und
HinzufuegenFormular := THinzufuegenFormular.Create( self);
Delphi-Quellcode:
verwenden.
FreeAndNil(HinzuFuegenFormular);
|
Re: ShowModal verschachteln?
Hi,
vielen Dank. Liest sich auch besser als meine Anweisung. ;-) und der rest? :-( Viel Grüße Marco |
Re: ShowModal verschachteln?
In etwas so
Delphi-Quellcode:
Lable.Caption := HinzufuegenForm.Edit.Text;
Update; |
Re: ShowModal verschachteln?
So würd ichs machen... :-)
Delphi-Quellcode:
procedure TModalForm.HinzufuegenClick(sender: TObject);
begin HinzufuegenFormular := THinzufuegenFormular.Create( self); try case HinzufuegenFormular.ShowModal of mrok:{tu was}; mrcancel:{tu nix}; end; finally HinzuFuegenFormular.Free; end; end; |
Re: ShowModal verschachteln?
Hallo Marco,
die Verschachtelung modaler Fenster ist technisch kein Problem, zählt aber zu den kritischen Designfragen bei der Gestaltung der Benutzer-Schnittstelle. Deine Funktion ShowModal() ist keine gute Lösung - einmal weil du eine Methode überladen würdest und außerdem führt man nicht ShowModal() innerhalb von ShowModal() aus:
Delphi-Quellcode:
Dabei ist UpdateUI eine von dir zu schreibende Methode von TModalForm, die alle relevanten UI-Controls inhaltlich aktualisiert.
procedure TMainForm.ShowModalForm;
begin with TModalForm.Create(self) do try case ShowModal of mrOK: // ; mrCancel: // ; end; finally Free; end; end; // ---------- procedure TModalForm.HinzufuegenClick(Sender: TObject); begin with THinzufuegenFormular.Create(self) do try if ShowModal = mrOK then UpdateUI; finally Free; end; end; Grüße vom marabu |
Re: ShowModal verschachteln?
Zitat:
Gruß oki |
Re: ShowModal verschachteln?
Hallo oki,
dass ich technisch nicht daran gehindert werde modale Fenster auf modale Fenster zu legen, hatte ich ja geschrieben. Was ich mit dem von dir zitierten Satz ausdrücken wollte erschließt sich wohl nur, wenn man diesen Code aus Beitrag #1 im Auge behält:
Delphi-Quellcode:
In Verbindung mit der Frage:
function TModalForm.ShowModal: integer;
begin { fuelle listen, bla bla } result := inherited ShowModal; end; Zitat:
Freundliche Grüße |
Re: ShowModal verschachteln?
Hi marabu,
ok, geb ich dir recht. Ich hatte es so verstanden, dass man in einem modalen Fenster ein weiteres modales Fenster öffnet, dieses dann schließt und die result-Werte im ersten modalen fenster einträgt um dort weiter zu machen. Das zweite Modale stehen zu lassen und das aufrufende zwischendurch zu aktualisieren finde ich etwas ungewöhnlich. Ich glaub sowas ist mir noch nicht untergekommen. Ich hab ab und zu den Fall, dass ich eine Suchmaske öffne (in einem seperaten Fenster wegen Platzangebot) und je nach Suchergebnis (vorallem bei nearest) die Ansicht im Hauptfenster ändere. Dann rufe ich das Suchfenster aber ganz normal mit show auf und mach es eben StayOnTop. Irgentwann wird es schon stören und somit auch zu gemacht. Wenn das in einem aufrufenden Fenster passiert welches irgentwann auch mal geschlossen wird (Modal), dann muß ich beim Schließen eben dafür Sorge tragen, dass alle meine StayOnTops geschlossen werden. Ist einfach ne Frages eines sauberen Steil's. Gruß oki |
Re: ShowModal verschachteln?
Hi Oki und Marabu, und natürlich alle anderen! ;-)
Genau, daß "Autobahnbrückengelender" war auch ein bißchen mein Problem, weil mir nicht gefallen hat, ShowModal im ShowModal im ShowModal ... zu machen. Aber wenn ich's gar nicht neu anzeigen muß sondenr schlicht aktualisieren, dann komme ich in keinerlei bedrängnis. Manchmal sieht man den Wald vor lauter Bäumen nicht! ;-) Kurz noch zum Sinn, warum überhaupt Modal: das ganze prog wird beim Minimieren in die TNA verschoben. Ich möchte auf gar keinen fall, daß jemand die Anwenderverwaltung offen hat, das ding minimiert, und es in der TNA vergißt. Deshalb sollte die Anwenderverwaltung modal sein. Beim hinzufügen eines neuen anwenders, löschen, ändern etc. sollte sich aber natürlich die Liste der Anwender aktualisieren! Vielen herzlichen Dank für die wirklich hilfreichen antworten! Ach ja: mit StayOnTop nutzt bei mir nich so richtig was, da ich blind bin und wenn mein sprachprogramm zu viele übereinanderliegende fenster kriegt, steigt es ab und zu aus! ;-) Viele herzliche Grüße Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz