![]() |
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:
Das Hiden des SplashScreens (OnCreate der Hauptform):
Application.CreateForm(TForm1, Form1);
Form1.ShowModal;
Delphi-Quellcode:
Wie kann ich nun beim OnClose-Ereignis der Hauptform den SplashScreen closen?
Form2.Hide;
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... |
Re: Schliessen verhindern - und später wieder erlauben
Zitat:
|
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:
Dass ich da net früher drauf gekommen bin :wall:
Form2.Hide;
Form2.OnCloseQuery:=nil; |
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 |
Re: Schliessen verhindern - und später wieder erlauben
Hmm... Naja, das klinngt ganz sinnvoll :gruebel:
Zitat:
MfG Z4ppy |
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:
|
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 |
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. |
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 |
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 04:01 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