AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShowModal verschachteln?

Ein Thema von Marco Steinebach · begonnen am 8. Nov 2006 · letzter Beitrag vom 9. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#1

ShowModal verschachteln?

  Alt 8. Nov 2006, 20:22
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:
function TModalForm.ShowModal: integer;
begin
  { fuelle listen, bla bla }
  result := inherited ShowModal;
end;
und das onClick
Delphi-Quellcode:
procedure TModalForm.HinzufuegenClick(sender: TObject);
begin
  Application.CreateForm (THinzufuegenFormular, HinzufuegenFormular);
  HinzufuegenFormular.ShowModal;
  HinzuFuegenFormular.Free;
  {und nu???}
end;
Für eine Antwort wäre ich sehr dankbar!

Viele Grüße
Marco

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]
Marco Steinebach
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ShowModal verschachteln?

  Alt 8. Nov 2006, 20:27
Statt
Application.CreateForm (THinzufuegenFormular, HinzufuegenFormular); solltest du lieber
HinzufuegenFormular := THinzufuegenFormular.Create( self); und
  FreeAndNil(HinzuFuegenFormular); verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: ShowModal verschachteln?

  Alt 8. Nov 2006, 21:13
Hi,
vielen Dank. Liest sich auch besser als meine Anweisung.
und der rest?

Viel Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ShowModal verschachteln?

  Alt 8. Nov 2006, 21:23
In etwas so

Delphi-Quellcode:
  Lable.Caption := HinzufuegenForm.Edit.Text;
  Update;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Duke_2004
Duke_2004

Registriert seit: 26. Jan 2005
61 Beiträge
 
#5

Re: ShowModal verschachteln?

  Alt 9. Nov 2006, 06:22
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: ShowModal verschachteln?

  Alt 9. Nov 2006, 06:23
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:
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;
Dabei ist UpdateUI eine von dir zu schreibende Methode von TModalForm, die alle relevanten UI-Controls inhaltlich aktualisiert.

Grüße vom marabu
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: ShowModal verschachteln?

  Alt 9. Nov 2006, 07:10
Zitat von marabu:
außerdem führt man nicht ShowModal() innerhalb von ShowModal() aus
Warum nicht?

Gruß oki
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: ShowModal verschachteln?

  Alt 9. Nov 2006, 08:44
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:
function TModalForm.ShowModal: integer;
begin
  { fuelle listen, bla bla }
  result := inherited ShowModal;
end;
In Verbindung mit der Frage:

Zitat von Marco:
... dann natürlich wieder zum ModalForm zurückkehren, dieses aktualisieren, nämlich mit dem, was hinzugefügt wurde, und das ModalForm wieder anzeigen. ...
Um ModalForm nach Änderungen "wieder anzuzeigen" ruft man nicht ShowModal auf. Der Inhalt muss aktualisiert werden, nicht das Fenster. Vielleicht war diese Warnung überflüssig, aber es macht mich nervös, wenn jemand auf dem Geländer der Autobahnbrücke balanciert: Will er springen oder genießt er nur die Aussicht?.

Freundliche Grüße
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: ShowModal verschachteln?

  Alt 9. Nov 2006, 09:13
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
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: ShowModal verschachteln?

  Alt 9. Nov 2006, 11:39
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
Marco Steinebach
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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