AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm beenden

Ein Thema von EarlyBird · begonnen am 31. Mär 2010 · letzter Beitrag vom 1. Apr 2010
Antwort Antwort
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#1

Programm beenden

  Alt 31. Mär 2010, 08:59
Hallo,
ich habe eine Komponente die beim Start meines Programmes ein Fenster öffnet.
(es ist ein LoggIn Dialog)
Wie kann ich es erreichen das bei einem nicht erfolgreichen loggin der Start des Programmes abgebrochen wird und das Programm sofort beendet wird.
Im Augenblick mache ich es so:
Delphi-Quellcode:
procedure TRegisterDlg.loaded();
begin
  inherited;
  IF csDesigning IN ComponentState THEN // Komponente ist zur Designtime (=DragDrop) erstellt worden
    BEGIN
      Exit;
    END;

  if FShowonstartup then
    begin
     showform;
    end;
end;


function TRegisterDlg.showForm() : Integer;
begin
   IF csDesigning in ComponentState THEN
    BEGIN
      Exit;
    END;
   if not Assigned(FRegisterform) then
     begin
       FRegisterform := TStart.Create(Nil);
     end;
   if FRegisterform.ShowModal = idCancel then
     begin
       FRegisterform.Close;
       freeAndNil(FRegisterform);
       Application.terminate;
     end;
end;
Dann wird aber das Fenster des Programmes erst noch fertig erstellt und dann das Porgramm geschlossen.
Wie kann ich den Programmstart abbrechen?

Danke für Eure Hilfe
EarlyBird
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Programm beenden

  Alt 31. Mär 2010, 09:25
Hallo,

Halt ?


Heiko
Heiko
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#3

Re: Programm beenden

  Alt 31. Mär 2010, 11:04
Danke für den Tipp.

leider geht es nicht mit Halt innerhalb der Komponente.

Ich mache es jetzt im onCreate des DataModules
Delphi-Quellcode:
procedure TOraData.DataModuleCreate(Sender: TObject);
begin
  if not RegisterDlg1.isLoggedIn then
    Halt;
end;
Das funktioniert.
Ist aber nicht so schön da ich das Programm gern in der Komponente selbst beenden würde.
Ist das überhaupt möglich?

EarlyBird
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Programm beenden

  Alt 31. Mär 2010, 11:09
Zur Not Forms in die uses aufnehmen und per Application.Terminate in die ewigen Jagdgründe übergehen.
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#5

Re: Programm beenden

  Alt 31. Mär 2010, 11:20
Application.Terminate beendet den create Prozess des Programmes nicht.
Der Prozess wird erst fertig ausgeführt und dann wird das Programm beendet.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Programm beenden

  Alt 31. Mär 2010, 11:28
Hi,

ok, andere Möglichkeit, die ich gerne nutze:

Quellcode der dpr-Datei:

Delphi-Quellcode:
  LoginForm := TLoginForm.Create(Application);
  if (LoginForm.ShowModal = mrOK) then
  begin
    FreeAndNil(frmLanguageSelector);
    Application.CreateForm(TdmData, dmData);
    Application.CreateForm(TfrmMain, frmMain);
    Application.Run;
  end;
Ich hoffe, dass Prinzip ist Dir klar?
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Programm beenden

  Alt 31. Mär 2010, 15:41
Um ein Formular während des Aufrufs abzubrechen, bevor es überhaupt erscheint, überschreibe ich immer den Konstruktor des Formulars.

Delphi-Quellcode:
Type
  TMyForm = Class(TForm)
    ...
  public
    constructor Create(AOwner: TComponent); override;
    ...
  end;

implementation

constructor TMyForm.Create(AOwner: TComponent);
begin
  ... Abbruchprüfung ...
  if <Abbruchbedingung erfüllt> then Raise Exception.Create(<Fehlermeldung>);
  inherited;
  ...
end;
In der aufrufenden Prozedur muss die Exception dann per Try .. Except abgefangen werden, damit sie nicht nach außen dringt.

Gruß
Daddy
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#8

Re: Programm beenden

  Alt 31. Mär 2010, 18:11
@Daddy:
Im Prinzip mache ich es jetzt auch so.

Im DataModul das meine Komponente enthält prüfe ich im onCreate den Booleanwert einer Property meiner Komponente.
Delphi-Quellcode:
procedure TOraData.DataModuleCreate(Sender: TObject);
begin
  if not MeineKomponente.isLoggedIn then
    Halt;
end;
So kann ich auf die Exeption verzichten.
Das klappt auch ganz gut so.

Noch lieber wäre es mir aber ich könnte das Ganze direkt in meine Komponente verlagern.
Da habe ich noch keinen Weg gefunden.

@Muhkuh:
Das Prinzip ist mir klar.
Hilft mir aber leider mit meiner Komponente nicht weiter.

Gruß
EarlyBird
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Programm beenden

  Alt 1. Apr 2010, 10:42
Hallo EarlyBird!

Was mir noch nicht ganz klar ist: Kannst Du denn nicht im DPR-File den Aufruf Deines Formulars verhindern? Etwa in dieser Form:

Delphi-Quellcode:
...

begin
  ...
  if MeineKomponente.isLoggedIn then
  begin
    ...
    Application.Run;
    ...
  end;
  ...
end.
Gruß
Daddy

[Edit] Siehe auch bereits Beitrag #6 [/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Programm beenden

  Alt 1. Apr 2010, 10:57
Genau das wollte ich damit auch sagen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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