AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Prüfen, ob ShowModal läuft?

Ein Thema von AlexII · begonnen am 22. Mai 2015 · letzter Beitrag vom 17. Mär 2018
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#1

AW: Prüfen, ob ShowModal läuft?

  Alt 15. Mär 2018, 17:40
Zitat:
nachvollziehbar
Nicht wirklich.
OK, in Bezug auf dass du die selbe Form nochmal modal aufrufen willst, obwohl sie gerade sichtbar ist (modal oder nicht) ... ja, da muß eine Exception kommen.

Wenn du die Forms aber nicht automatisch beim Programmstart erstellen lässt, sondern erst beim Anzeigen/Aufrufen dynamisch erzeugst, dann kannst du jedes Fenster mehrmals "gleichzeitig" erzeugen und anzeigen.
(in den Forms z.B. ins OnClose ein Action:=caFree )

aktuell bei dir:
* Delphi-Referenz durchsuchenApplication.ModalLevel gibt an, wie viele modale Forms es gibt
* in Delphi-Referenz durchsuchenTForm.FormState steht ob es grade Modal angezeigt wird (fsModal), aber auch einfach auf DeineForm.Visible schauen reicht, also ob die Form schon sichtbar ist
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Mär 2018 um 17:46 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Prüfen, ob ShowModal läuft?

  Alt 15. Mär 2018, 17:43
Hallo,
Action:= caFree war doch nur für MDI?

Zitat:
bin ich mit dieser Kette derzeit am Ende und es kommt eine nachvollziehbare Fehlermeldung
Warum am Ende?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#3

AW: Prüfen, ob ShowModal läuft?

  Alt 15. Mär 2018, 17:48
Am Ende, weil dann bestimmt die Fehlermeldung "Eine sichtbare Form kann nicht Modal angezeigt werden" kommt.
Form1.ShowModal -> Form2.ShowModal -> Form1.ShowModal *peng*

caFree: Nein, das geht bei allen Fenstern.
Damit wird ja nur dafür gesorgt, dass sich das Fenster selber freigibt, wenn man es z.B. mit [X] schließt. (externe Variablen, welche auf diese Form zeigen sollte man da natürlich auch wegräumen oder erst garnicht sowas einbauen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Prüfen, ob ShowModal läuft?

  Alt 15. Mär 2018, 21:53
Vorschlag:
Ein neues Hauptformular erstellen was im End-Effekt nur ein Wrapper für die anderen Formulare wird.
Vielleicht ein mini-Fenster (ohne Titelleiste) mit ein paar Knöpfen drauf um die Formulare sichtbar zu machen?
(oder die Knöpfe als multi-funktions-anzeige nutzen, beispiel geöffnete Formulare = der Knopf hat ein anderes Bild)
Die Original Formulare selbst aus der .dpr rausnehmen und dynamisch einbinden, jetzt nur noch eine Fenster-Kontrolle einbauen damit nichts doppelt geöffnet wird.
Nachtrag: das Wrapper Fenster kann ja in den SysTray abgelegt werden sowie ein Formular offen ist, oder ein miniaturisiertes Formular, oder transparent oder dies oder das.
Dreh- und Angelpunkt ist dann der Wrapper dem Du alles beibringen musst was Du benötigst, könnte auch dienen um Daten zwischen Formularen auszutauschen (senden/empfangen). Je nach Bedürfnis.
Achja, und generell auf ShowModal in diesem Zusammenhang verzichten da ja verschiedene Fenster aktiv sein könnten oder ShowModal konsequenter einsetzen ohne das im ShowModal weitere Fenster erstellt werden.
Ich nutze ShowModal nur bei Fenstern wo ich unbedingt eine User-Eingabe erwarte. Beispiel: Datei überschreiben Dialog.
Ps: Ich habe auch bei ShowModal oft das Problem das falls ein Fehler Auftritt, der Windows-Fehler-Dialog "unter" dem ShowModal erstellt wird, sprich: ich komm nicht ran um "Ok" zu klicken. Alt-Tab und Eingabetaste mag zwar eine Notlösung sein, aber ein nicht-OnTopModal-Fenster ist unkomplizierter in solchen Fällen.
Gruß vom KodeZwerg

Geändert von KodeZwerg (15. Mär 2018 um 22:21 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Prüfen, ob ShowModal läuft?

  Alt 16. Mär 2018, 06:58
Hallo,
Zitat:
Die Original Formulare selbst aus der .dpr rausnehmen und dynamisch einbinden,
OK, das geht einfach

Zitat:
jetzt nur noch eine Fenster-Kontrolle einbauen damit nichts doppelt geöffnet wird.
Aber
Form2 öffnet Form3, Form3 öffnet Form2, Form2 öffnet Form3

Wie soll das gehen?
Dazu müsste man sich den jeweiligen Status merken.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.368 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Prüfen, ob ShowModal läuft?

  Alt 16. Mär 2018, 07:20
Einige Vorschläge gruseln mich wirklich.

1. Die Formen (in dieser Konstellation) immer dynamisch erzeugen.
2. Kein direkter Zugriff von einer Form auf die andere und umgekehrt. Parameter sind da hilfreich beim Erzeugen.

Ich mache das üblicherweise so:
Delphi-Quellcode:
class function TForm3.ShowFormModal(Sender: TComponent; <Parameterliste>): TModalResult;
var
  frm : TForm3;
begin
  frm := TForm3.Create(Sender);
  try
    Result := frm.ShowModal;
  finally
    frm.Free;
  end;
end;
Bitte beachten, dass es sich um eine CLASS FUNCTION handelt.
Wenn man das analog für Form2 macht, kollidiert auch nichts.
Ein eventueller Informationsaustausch erfolgt über die angedeutete Parameterliste. Mit Var-Parametern kann man sich dann auch Informationen zurück geben lassen.

Die entsprechenden globalen Variablen Form2 und Form3 zur Sicherheit gleich löschen. Dann kann man die auch nicht mehr versehentlich benutzen.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#7

AW: Prüfen, ob ShowModal läuft?

  Alt 16. Mär 2018, 07:34
Und soll diese Form nur einmal existieren, dann kommt frm in eine CLASS VAR. (Free > FreeAndNil)
So kann man vor dem Create mit Assign prüfen und dann entweder einen Fehler werfen oder die bestehende Form wiederverwenden, also z.B. mit neuem Inhalt füllen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:39 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-2025 by Thomas Breitkreuz