Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schliessen verhindern - und später wieder erlauben (https://www.delphipraxis.net/112713-schliessen-verhindern-und-spaeter-wieder-erlauben.html)

Z4ppy 25. Apr 2008 20:59


Schliessen verhindern - und später wieder erlauben
 
Ich hab nen SplashScreen, während der angezeigt wird, soll das Programm (und damit der SplashScreen) nicht schliessbar sein, der TaskManager sollte das ebenfalls nicht können.
Wird dann die Hauptform angezeigt und das Programm über einen Button dieser Hauptform beendet (es gibt einen Exit-Button), dann soll auch der SplashScreen geschlossen werden...

Ich hab das mit dem unschliessbar mit CanClose:=false; beim OnCloseQuery-Event gelöst, allerdings kann der TaskManager den Prozess immer noch killen. Ausserdem: Wenn ich dann in der Hauptform auf Exit klicke, dann wird das Programm nicht beendet, da die Form2 nicht geschlossen werden kann (wegen dem CanClose:=false)... Wie kann ich CanClose wieder auf true setzen, sobald die Hauptform angezeigt wird? Ich habe mehreres ausprobiert, es geht aber nich :wall:

Nun mal paar Codeschnipsel:
Das anzeigen der Hauptform (wird mit einem Timer im SplashScreen geregelt):
Delphi-Quellcode:
Application.CreateForm(TForm1, Form1);
Form1.ShowModal;
Das Hiden des SplashScreens (OnCreate der Hauptform):
Delphi-Quellcode:
Form2.Hide;
Wie kann ich nun beim OnClose-Ereignis der Hauptform den SplashScreen closen?

MfG Z4ppy

Edit: Noch etwas hab ich hinzuzufügen: Das mit dem TaskManager muss nur auf XP funktionieren, da das Programm schon so eingerichtet wurde, dass es eh nur unter XP geht :D Es ist also wichtig, dass der TaskManager von XP das Programm nicht killen kann...

Fussball-Robby 25. Apr 2008 21:39

Re: Schliessen verhindern - und später wieder erlauben
 
Zitat:

Zitat von Z4ppy
Es ist also wichtig, dass der TaskManager von XP das Programm nicht killen kann...

Nicht mal Windows ist so blöd, eine Funktion zu bieten, mit der sich ein Programm "unsterblich" machen kann. Aber erstmal eine Frage: Wieso um alles in der Welt wilst du es dem Benutzer verbieten, dein Programm zu schließen?

Z4ppy 25. Apr 2008 21:40

Re: Schliessen verhindern - und später wieder erlauben
 
Hmm, es könnte ja sein, dass beim SplashScreen auch noch Daten geladen werden... Wenn nun die Hälfte geladen ist und die andere nicht, dann gibt das erstens beim nächsten Programmstart Probleme und zweitens Datenmüll ;)

Und wegen dem unsterblich: AntiViren-Programme und Firewalls schaffen es ja auch, warum sollte es dann ein Normalsterblicher net schaffen? :D

MfG Z4ppy

Edit: Ich habe inzwischen eine Teillösung gefunden... Aber das Programm lässt sich immer noch via TaskManager beenden...
Meine Lösung:
Statt wie oben nur Form2.Hide; halt so:
Delphi-Quellcode:
Form2.Hide;
Form2.OnCloseQuery:=nil;
Dass ich da net früher drauf gekommen bin :wall:

Fussball-Robby 25. Apr 2008 21:45

Re: Schliessen verhindern - und später wieder erlauben
 
Dann weise den Benutzer ausdrücklich darauf hin, das Programm während des Ladens nicht zu beenden. Außerdem solltest du besser versuchen, dass Problem am Ursprung zu lösen (Sprich: Die Daten so laden, dass beim Beenden nichts verloren geht etc.) als die Folgen zu unterdrücken.
Und die Idee mit dem unsterblichen Programm solltest du ganz schnell wieder vergessen, das wirst du nicht hinbekommen (und außerdem: Welcher User hat schon gerne ein Programm, das er nicht vollständig im Griff hat!?).

Mfg

Z4ppy 25. Apr 2008 21:51

Re: Schliessen verhindern - und später wieder erlauben
 
Hmm... Naja, das klinngt ganz sinnvoll :gruebel:

Zitat:

Welcher User hat schon gerne ein Programm, das er nicht vollständig im Griff hat!?
Jeder, der ein AntiViren-Programm hat :roll: Das kann man schliesslich auch nicht killen... Oder zumindest nicht so einfach :D

MfG Z4ppy

Fussball-Robby 25. Apr 2008 21:53

Re: Schliessen verhindern - und später wieder erlauben
 
Bei einem AntiVirenprogramm ist das doch auch einleuchtend, denn immerhin schützen diese das System unter anderem gegen unerwünschte Zugriffe. Wäre schon blöd, wenn man ein solches Programm mit einer einzigen Zeile Code beenden könnte :wink:

Z4ppy 25. Apr 2008 22:02

Re: Schliessen verhindern - und später wieder erlauben
 
Naja, es beweist immerhin, dass es möglich sein muss... Nun ist nur noch die Frage, wie :D
Aber ich löse das nun wohl anders...

MfG Z4ppy

Luckie 25. Apr 2008 22:54

Re: Schliessen verhindern - und später wieder erlauben
 
Antiviren-Programme sind als Dienst implementiert. Diese kann nur der Administrator beenden. Allerdings die Benutzerschnittstellen lassen sich durchau auch von einem normalen Benutzer beenden.

Und wie Fussball-Robby schon sagt, bau dein Programm so, dass ein Beenden die Daten nicht zerstört.

Z4ppy 25. Apr 2008 23:40

Re: Schliessen verhindern - und später wieder erlauben
 
"Diese kann nur der Administrator beenden"
Hööh? Auch wenn ich als Admin angemeldet bin, kann ich z.B. den Guard von AntiVir nicht beenden ;)

MfG Z4ppy

mkinzler 26. Apr 2008 07:42

Re: Schliessen verhindern - und später wieder erlauben
 
Ist auch ein Dienst, der mit dem SYSTEM-Konto läuft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 Uhr.
Seite 1 von 2  1 2      

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