Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Application.Terminate geht nicht mehr ? (https://www.delphipraxis.net/178525-application-terminate-geht-nicht-mehr.html)

arnof 13. Jan 2014 09:10

Application.Terminate geht nicht mehr ?
 
Hi im Zuge auf meine Umstellung D5 auf XE2 ist mir aufgefallen, das Application.Terminate keine Funktion mehr hat!

Ich will die Application abschießen (Passwort falsch; keine Lizenz usw.)

himitsu 13. Jan 2014 09:14

AW: Application.Terminate geht nicht mehr ?
 
Ich bin mir sicher, daß es noch funktioniert.

Wie und wo nutzt du es denn?

(doch hoffentlich nicht erst im OnCreate der MainForm)

Der schöne Günther 13. Jan 2014 09:15

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von himitsu (Beitrag 1243372)
(doch hoffentlich nicht erst im OnCreate der MainForm)

Selbst da geht es bei mir :stupid:



VCL oder FMX?

arnof 13. Jan 2014 09:24

AW: Application.Terminate geht nicht mehr ?
 
VCL bei Programmstart d.h. entweder bei Create oder showForm

Ich rufe es auf und die Applikation läuft munter weiter (Passwort falsch, dann habe ich Adminrechte :oops:)

Union 13. Jan 2014 09:32

AW: Application.Terminate geht nicht mehr ?
 
Das ging ja noch nie so wirklich. Wenn Du sowas machst, solltest Du ein (Application.Terminated) Flag parallel dazu auswerten und noch ablaufenden "Restcode" bedingt ausführen.

Der schöne Günther 13. Jan 2014 09:35

AW: Application.Terminate geht nicht mehr ?
 
Delphi-Quellcode:
Application.Terminate()
tut doch im Endeffekt eh nichts anderes als nur eine
Delphi-Quellcode:
WM_QUIT
-Message zu senden, oder?

Wenn ich so etwas habe, dass ich mich nach dem Prüfen von irgendwas eventuell direkt wieder beenden möchte mache ich das generell noch vor
Delphi-Quellcode:
Application.Run()
. Ob das eine gute Idee ist weiß ich allerdings auch nicht.

Union 13. Jan 2014 09:38

AW: Application.Terminate geht nicht mehr ?
 
Bestimmt geht es um eine Benutzeranmeldung die ausgelöst durch ein OnAfterOpen einer Benutzertabelle während der Anzeige eines SplashScreens o.ä. erfolgen soll. Schägt die fehl, soll das Program beeendet werden.

arnof 13. Jan 2014 09:41

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von Union (Beitrag 1243380)
Bestimmt geht es um eine Benutzeranmeldung die ausgelöst durch ein OnAfterOpen einer Benutzertabelle während der Anzeige eines SplashScreens o.ä. erfolgen soll. Schägt die fehl, soll das Program beeendet werden.

So ist es, bevor die Hauptform benutzbar ist muss ich wissen, ob der User es auch darf und was er darf. Bisher ging das Ohne Probleme. Der Quellcode von Delphi her ist bei Application.terminate auch gleich. Anscheinend wird die Message WM_Quit ignoriert!

arnof 13. Jan 2014 09:46

AW: Application.Terminate geht nicht mehr ?
 
Wenn Die Anwendung läuft geht es, anscheinend verträgt er es nicht beim Create (dort kann/konnte man auch kein Close setzen). Ich werde es nun über einen Timer lösen, der eingreift!

Zacherl 13. Jan 2014 09:47

AW: Application.Terminate geht nicht mehr ?
 
Alternativ ein gutes altes ExitProcess(0) :P

DeddyH 13. Jan 2014 09:50

AW: Application.Terminate geht nicht mehr ?
 
Oder eine selbstdefinierte Message posten und in deren Handler Anwendung beenden.

arnof 13. Jan 2014 09:55

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von Zacherl (Beitrag 1243383)
Alternativ ein gutes altes ExitProcess(0) :P

Danke: Problem gelöst!

Union 13. Jan 2014 10:11

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von arnof (Beitrag 1243370)
Hi im Zuge auf meine Umstellung D5 auf XE2 ist mir aufgefallen, das Application.Terminate keine Funktion mehr hat!

Randbemerkung: Das hat bereits bei D7 schon nicht mehr so funktioniert.

Der schöne Günther 13. Jan 2014 10:13

AW: Application.Terminate geht nicht mehr ?
 
Nochmal das gleiche Thema:

http://stackoverflow.com/questions/912280/

Darin: Wenn du schon "hart" abschießen möchtest, dann besser über Halt:
Zitat:

Aside from that, do not call ExitProcess. Call Halt instead. Halt calls ExitProcess, but it also calls unit finalization sections and other Delphi-specific process-shutdown tasks.

jaenicke 13. Jan 2014 10:54

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von arnof (Beitrag 1243377)
Ich rufe es auf und die Applikation läuft munter weiter (Passwort falsch, dann habe ich Adminrechte :oops:)

Das heißt man muss nur das Beenden der Anwendung verhindern und schon hat man Adminrechte? Das hört sich eher nach einem Designproblem an.
Wieso wird die Anwendung denn überhaupt gestartet, sprich Fenster erstellt usw., wenn das Passwort falsch ist?

Viel sinnvoller wäre doch im Projektquelltext die Prüfungen zu machen, sei es dort direkt oder in einem Steuerungsobjekt. Dann brauchst du auch nichts explizit beenden, weil du einfach nur bei richtigem Passwort etwas machst. Und sonst bist du dann am end des Projekts und es ist automatisch beendet...

arnof 13. Jan 2014 12:05

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von jaenicke (Beitrag 1243402)
Zitat:

Zitat von arnof (Beitrag 1243377)
Ich rufe es auf und die Applikation läuft munter weiter (Passwort falsch, dann habe ich Adminrechte :oops:)

Das heißt man muss nur das Beenden der Anwendung verhindern und schon hat man Adminrechte? Das hört sich eher nach einem Designproblem an.
Wieso wird die Anwendung denn überhaupt gestartet, sprich Fenster erstellt usw., wenn das Passwort falsch ist?

Viel sinnvoller wäre doch im Projektquelltext die Prüfungen zu machen, sei es dort direkt oder in einem Steuerungsobjekt. Dann brauchst du auch nichts explizit beenden, weil du einfach nur bei richtigem Passwort etwas machst. Und sonst bist du dann am end des Projekts und es ist automatisch beendet...

Bitte mal richtig lesen, da ist kein Designfehler! Wenn das Programm sich nicht beendet, obwohl es das sollte werden auch keine Einschränkungen mehr gezogen, da es eigentlich schon beendet sein sollte nach einem falschen Login!

baumina 13. Jan 2014 12:12

AW: Application.Terminate geht nicht mehr ?
 
jaenicke meint es bestimmt so:

Delphi-Quellcode:
program PLM2012;

{$R *.res}

begin
  Application.Initialize;
...
  If AllesOK then Application.Run;
end.

arnof 13. Jan 2014 13:24

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von baumina (Beitrag 1243410)
jaenicke meint es bestimmt so:

Delphi-Quellcode:
program PLM2012;

{$R *.res}

begin
  Application.Initialize;
...
  If AllesOK then Application.Run;
end.

Sie läuft doch schon sonst müsste nicht Terminiert werden!

Aber das Problem ist doch gelöst zu Designtipps werde ich Fragen stellen, wenn ich Tipps brauche :wink:

jaenicke 13. Jan 2014 13:31

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von arnof (Beitrag 1243418)
Aber das Problem ist doch gelöst zu Designtipps werde ich Fragen stellen, wenn ich Tipps brauche :wink:

Ich glaube zwar weiter nicht, dass das kein Designproblem ist, aber wenn du keine Tipps in die Richtung möchtest, kannst du natürlich gerne bei deinem Weg bleiben, dann werde ich mich bei Posts von dir in Zukunft mit Tipps in Richtung Design oder Architektur entsprechend zurückhalten. Kein Problem. ;-)

baumina 13. Jan 2014 13:35

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von arnof
Sie läuft doch schon sonst müsste nicht Terminiert werden!

Die Frage bleibt : WARUM läuft sie schon, wenn man das Login VOR dem Application.Run machen könnte.

arnof 13. Jan 2014 13:43

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von jaenicke (Beitrag 1243420)
Zitat:

Zitat von arnof (Beitrag 1243418)
Aber das Problem ist doch gelöst zu Designtipps werde ich Fragen stellen, wenn ich Tipps brauche :wink:

Ich glaube zwar weiter nicht, dass das kein Designproblem ist, aber wenn du keine Tipps in die Richtung möchtest, kannst du natürlich gerne bei deinem Weg bleiben, dann werde ich mich bei Posts von dir in Zukunft mit Tipps in Richtung Design oder Architektur entsprechend zurückhalten. Kein Problem. ;-)

ja wir reden nicht von einem kleinen Projekt das man mal schnell Umdesignen könnte. Alles wieder zu testen würde sicher 1/2 Mann Jahr Zeit beanspruchen, das werde ich sicher nicht investieren nur wegen Application.Terminate! Mit dem Anmelden ist ja nur ein Beipiel wo es beim Betatesten aufgefallen ist (lustiger weise Tritt es nicht auf, wenn ich eine andere Art von Datenbankserver Connectet bin, warum ist eine Frage, die man sich stellen könnte, aber ich muss diese Woche Liefern!)

jaenicke 13. Jan 2014 14:53

AW: Application.Terminate geht nicht mehr ?
 
Das ist ein anderer Punkt und das ist klar, das geht wohl jedem in der Praxis immer wieder so.

Jumpy 13. Jan 2014 15:54

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von baumina (Beitrag 1243410)
jaenicke meint es bestimmt so:

Delphi-Quellcode:
program PLM2012;

{$R *.res}

begin
  Application.Initialize;
...
  If AllesOK then Application.Run;
end.

Es gibt ja keine dummen Fragen, deswegen trau ich mich mal. Wenn die Anwendung noch nicht gestartet ist wie macht man dann das Login-Formular? Das ist doch schon Teil der Anwendung? Bezogen auf das Zitat, was mach AllesOK?

pHL 13. Jan 2014 16:17

AW: Application.Terminate geht nicht mehr ?
 
Zitat:

Zitat von Jumpy (Beitrag 1243453)
Zitat:

Zitat von baumina (Beitrag 1243410)
jaenicke meint es bestimmt so:

Delphi-Quellcode:
program PLM2012;

{$R *.res}

begin
  Application.Initialize;
...
  If AllesOK then Application.Run;
end.

Es gibt ja keine dummen Fragen, deswegen trau ich mich mal. Wenn die Anwendung noch nicht gestartet ist wie macht man dann das Login-Formular? Das ist doch schon Teil der Anwendung? Bezogen auf das Zitat, was mach AllesOK?

Suche mal nach Splash-Screen - das hab ich auf die schnelle gefunden :)

http://www.swissdelphicenter.ch/de/showcode.php?id=420

MfG
pHL

jaenicke 13. Jan 2014 16:19

AW: Application.Terminate geht nicht mehr ?
 
Das sieht normalerweise so ca. aus:
Delphi-Quellcode:
program Foo;

uses
  Vcl.Forms,
  Vcl.Controls,
  ...;

{$R *.res}

var
  LoginForm: TfrmLogin;
  InitSuccess: Boolean;
  App: TApplication;
begin
  App := Application;
  App.Initialize;
  App.MainFormOnTaskbar := True;
  LoginForm := TfrmLogin.Create(nil);
  try
    InitSuccess := IsPositiveResult(LoginForm.ShowModal);
  finally
    LoginForm.Free;
  end;
  if InitSuccess then
  begin
    App.CreateForm(TfrmMain, frmMain);
    App.Run;
  end;
end.
Natürlich ist das so trivial zu knacken, sprich man müsste das Ergebnis in InitSuccess noch ein wenig verschleiern, mehrfach prüfen, usw., aber als Beispiel reicht das ja.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 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