Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Application.Terminate in Form1.OnCreate? (https://www.delphipraxis.net/4019-application-terminate-form1-oncreate.html)

X-Dragon 11. Apr 2003 10:35


Application.Terminate in Form1.OnCreate?
 
Delphi-Quellcode:
procedure TFmHaupt1.FormCreate(Sender: TObject);
{**********************************************}
var
  i, j,
  a, x : Integer;
  txt : String;
begin
  progdir := ExtractFilePath(Application.ExeName);

  Application.OnDeactivate := AppDeactivate;
  Application.OnActivate  := AppActivate;
  Application.OnException := AppException;

  reginfo[1] := 'Werkstattplaner';
  reginfo[2] := 'xyz';
  reginfo[3] := IntToStr(Floor(GetCDriveSerial));

  SetDevPassword(PChar(reginfo[2]));

  if IntToStr(AppDaysLeft(PChar(cn), PChar(reginfo[1]))) <> '9999' then
    reginfo[4] := '0'
    else
      reginfo[4] := '1';

  if reginfo[4] = '0' then
  begin
    if SharewareLimit(cn, PChar(reginfo[1]), 30) then
    begin
      MessageDlg('Das 30 Tage-Zeitlimit ist überschritten.'+
                 'Bitte registrieren sie sich!', mtInformation,[mbOk], 0);

      Application.Terminate;
    end
      else
        txt := reginfo[1]+'     Testversion für '
               +IntToStr(AppDaysLeft(PChar(cn), PChar(reginfo[1])))+' Tag(e)!';
  end
    else
      txt := reginfo[1]+'     Registriert für '
             +GetEncrypted(PChar(cn),PChar(reginfo[1]),'RegName');

  FmHaupt1.Caption := txt;
  AliasCheck('Kalender');

  // ...
end;
Kann mir vielleicht jemand sagen was Delphi veranlassen könntem das "Application.Terminate" einfach zu ignorieren (ja, auch wenn die Bedingungen dafür zutreffen)?

Noch zur Erläuterung, die meisten Befehle gehören zu einer Komponente die kontrolliert ob die Software registriert ist bzw wie lange sie noch gültig ist.

nailor 11. Apr 2003 10:57

??? was willst du? Wenn du Delphi sagst: "Application.Terminate", dann wird es auch Application.Terminate ausführen. Du kannst die Zeile auskommentieren, dann gehts nichtmehr, aber ich glaube, das meinst du nicht?!?!

X-Dragon 11. Apr 2003 10:59

Zitat:

Zitat von Nailor
??? was willst du? Wenn du Delphi sagst: "Application.Terminate", dann wird es auch Application.Terminate ausführen. Du kannst die Zeile auskommentieren, dann gehts nichtmehr, aber ich glaube, das meinst du nicht?!?!

Genau so sollte es sein, nur bei mir ignoriert Delphi diese Zeile einfach und läßt das Programm weiter laufen.

roderich 11. Apr 2003 11:06

Application.Terminate beendet die Anwendung nicht sofort, siehe Delphi-Hilfe.

Zum sofortigen Beenden müßtest Du Halt verwenden, aber es ist angeblich nicht zu empfehlen, weil Speicher nicht richtig aufgeräumt werden kann (weiß nicht, ob das stimmt, ich meine, daß manchmal meine geladenen DLL's hängen geblieben sind).

Ich verwende daher Application.Terminate an der geeigneten Stelle und danach ein exit in der Methode, damit der weitere Code nicht ausgeführt wird.

Gruß
Roderich

Luckie 11. Apr 2003 11:19

Setze eine globale Variable, überprüf sie in OnShow von TForm und beende deine Anwendung gegebenenfalls dort sauber mit Close.

X-Dragon 11. Apr 2003 11:34

Super danke Leute :thuimb:

Ich schliess das Programm jetzt in OnShow, über einer globalen Variable, ganz normal mit Close (naja und mit ein paar Anpassungen in OnCloseQuery) :).


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