Autor Beitrag
Nerzhul
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.04.04 18:42 
Hallo,

Ich habe zwei Formulare, Form1 und Form2. Von Form1 aus wird Form2 modal angezeigt. In Form2 befindet sich ein Button mit einem Modalresultwert 'mrAbort'. Wenn dieser Button gedrückt wird schließt sich Form2 automatisch und dieser Wert wird zurückgeliefert. So weit, so gut.

Ich möchte das gleiche jetzt aber auch aus einer Prozedur in Form2 heraus machen, also in etwa so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if Bedingung then
begin
 Form2.Modalresult := mrAbort;
 Form2.Close;
end;


Dies funktioniert so aber nicht :-( Was ist zu tun?

-M
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.04.04 18:51 
Was funktioniert denn nicht? Wird das Formular nicht geschlossen, bekommst Du eine Fehlermeldung, explodiert der Bildschirm?

Ansich wird das Formular schon bei der Zuweisung zu ModalResult geschlossen, ein Form2.Close ist nicht mehr nötig.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Mo 19.04.04 18:55 
Peter Lustig hat folgendes geschrieben:

Ansich wird das Formular schon bei der Zuweisung zu ModalResult geschlossen, ein Form2.Close ist nicht mehr nötig.


Hätte das Fast übersehen, und wollte das gleiche posten :)

Jetzt frag nicht wieso ich trotzdem poste :)

Wenn du eine Exception bekommst, dann weil das close überflüssig ist, da deine Form2 bereits im Grab liegt :)


Martin
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.04.04 18:57 
Also, der Code wird ausgeführt, Form2 bleibt aber geöffnet.

Kann es daran liegen, dass der Code beim OnActivate-Ereignis ausgeführt wird?

Gruß,

-M

Edit: Auch ohne Form2.Close tut sich nix...
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Mo 19.04.04 19:00 
Glaube im OnActivate kannste die Form nicht schliessen, weiss nicht ob OnShow besser ist
Wenn du die Form2 eh sofort schliesst, wieso machst du sie dann überhaupt? Dann spar dir das doch.
Ansonsten starte im OnActivate einfach nen Timer und warte dann

Martin
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.04.04 19:02 
Ein Timer ist nicht sehr elegant, finde ich. Die vorherige Prüfung ist IMHO die bessere Lösung.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.04.04 19:08 
*seufz* Mit OnShow gehts auch nicht...

Ich möchte bestimmten Code ausführen [und zwar automatisch, sobald das Fenster angezeigt wird] und das Fenster unter bestimmten Bedingungen dann automatisch schließen.

Hmmm ... dann muss ich wohl doch nen Timer nehmen, auch wenn das ziemlich stillos ist, oder? ;-)

Gruß,

-M
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.04.04 19:17 
Wie wird denn die Bedingung bestimmt? Da im OnActivate-Ereignis in Form2 noch keine Interkation mit dem Nutzer statt gefunden haben kannn, sollte man diese Bedingung doch auch vor Aufruf von Form2.ShowModal bestimmen lassen, oder?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.04.04 19:23 
Doch, es erfolgt eine Interaktion über einen Dialog [MessageDlg], der vorher aufgerufen wird. Die Bedingung an sich wird ja auch durchlaufen, nur schließen tut sich nix :-(

-M
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.04.04 19:36 
Der MessageDlg muss doch aber nicht im OnActivate-Ereignis aufgerufen werden, oder? Den kannste doch noch in Form1 aufrufen! (Vermute ich jetzt einfach mal, am Besten postest Du mal das OnActivate-Ereignis.)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: Mo 19.04.04 20:06 
@Peter: Klar ist der Timer keine gute Lösung, aber ich habe keine bessere Lösung für mein Problem damals gefunden, ausser mir selbst eine WM_USER +X zu schicken. Und da war der Timer für das Miniprojekt sinnvoller. Da musste die Form aber auch eine gewisse Zeit offen bleiben.

Aber der Dialog kann ja vorher kommen und daraufhin entscheiden ob der Dialog angezeigt werden soll oder nicht.
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.04.04 20:08 
Hmmmnaja, es geht ja nicht nur um den MessageDialog. In Form2 läuft ein ganzer Prozeß [im Sinne von Anreihung von Anweisungen und Ereignissen] automatisch ab, aber darum geht es ja auch nicht.

Ich hab das jetzt so gelöst dass in Form2 ein Timer ist, der im OnActivate-Ereignis aktiviert wird. Im Timer-Ereignis wird der Timer dann wieder ausgeschaltet und der Prozeß angestoßen.

-M
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.04.04 20:28 
Das ist so ziemlich der schlimmste Missbrauch eines Timers, von dem ich je gehört habe .... :roll:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Mo 19.04.04 20:59 
Statt Timer gibt es eine wesentlich einfachere Methode..!
ausblenden Delphi-Quelltext
1:
PostMessage(Handle, WM_CLOSE, 00);					

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mo 19.04.04 21:26 
Danke, mit PostMessage funktionierts wunderbar :-)

-M
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 20.04.04 00:54 
Kann es sein, dass da irgendwo die Logik auf der Strecke bleibt? Wenn die Bedingung nicht erfüllt ist, dann öffne es doch gar nicht erst. :roll:
Nerzhul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Di 20.04.04 12:47 
Äh, nicht alle Bedingungen stehen schon zur Entwurfs- oder zum Beginn der Laufzeit fest, sonst könnte man sich ja tatsächlich große Programmteile sparen ;-)

Gruß,

-M
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 20.04.04 12:53 
Moment. Wenn du beim Erzeugen des Fensters die Bedingung abfragen kannst, dann sollte das auch vor ShowModal möglich sein. Wenn nicht dann stimmt was nicht mit deinem Programmdesign. Das was du da jedenfalls machst ist eine Katastrophe.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 20.04.04 15:45 
:lol: Habe ich auch alles schon gesagt, aber vielleicht hast Du (@Luckie) ja mehr Glück!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".