Wie beende ich mein Programm



  • Hallo,

    also erstmal Code :

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      // ***************
      // *  Main Modul *
      // ***************
    
      // Parameter auswerten
      int anzParameter = ParamCount();
      String Parameter;
      if (anzParameter != 1)
      {
        Application->Terminate();
      }
    
      Parameter = LowerCase(ParamStr(1));
     //...
    }
    

    Das funktioniert aber nicht. Wenn ich wirklich in anzParameter einen Wert ungleich 1 habe springt er mir zwar in den if Block hinein, beendet das Programm aber nicht. Auch exit(0) funktioniert nicht. Es gibt immer eine MessageBox aus : "Abnormal Programm Termination". Das kann es ja auch nicht sein.

    Wer weiss Hilfe ?

    Gruß

    PsiAgent



  • Close();

    ???



  • Tja, was sagt man dazu: Es gibt eine ganz einfache Funktion zum Beenden:

    Close();

    Oder Ausführlich geschrieben:

    Form1->Close();

    Edit: Mist, schonwieder zu lahm 😉



  • Hi,

    hoffe habe dich richtig verstanden, wenn das dein Hauptfenster ist, schliesse es doch einfach mit:

    Close();

    Hoffe konnte dir helfen.



  • Bei mir funktioniert das Application->Terminate(); aber auch und ich würd das auch bevorzugen ... hab BCB 6 Enterprise

    Wobei ich sagen muss es nicht wirklich guter stil ist in einem Konstruktor den Destruktor aufzurufen .. 🙄



  • Bau die Abfrage am Anfang der WinMain-Funktion deines Programmes ein (Project|View Source).
    Wenn die Bedingung nicht erfüllt ist kannst du gleich zum return springen.



  • Close funktioniert leider auch nicht, Programm springt einfach weiter.



  • Svenson schrieb:

    Close funktioniert leider auch nicht, Programm springt einfach weiter.

    hast du in diesem Teil hier :

    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    

    irgendwelchen Source Code stehen ??



  • Das hat funktioniert . Danke !!! Wieso die anderen Befehle versagen istr mir jedoch schleierhaft.

    Danke !!!



  • Hmm... Darauf muss man erstmal kommen. 🙄



  • steht .. auch in der BCB Hilfe nen Hinweis dazu
    quote :

    Hinweis:	Das Ereignis OnCreate sollte in C++Builder nicht verwendet 
    werden, da es zu Konflikten mit dem Formularkonstruktor führen kann (siehe OldCreateOrder). Es wird empfohlen, statt dessen den Formularkonstruktor entsprechend zu überschreiben.
    

    edit :

    problem hat ich auch schonmal .. Wenn man nämlich den Formular Konstruktor leer lässt .. dann geht FormCreate aber wenn in beidem was steht reagiert der C++ builder seltsam ..



  • 1ntrud0r schrieb:

    Svenson schrieb:

    Close funktioniert leider auch nicht, Programm springt einfach weiter.

    hast du in diesem Teil hier :

    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    

    irgendwelchen Source Code stehen ??

    nein habe ich nicht. Sollte dort Programmcode stehen ?

    Danke



  • Da müsste das Application->Terminate() aber ohne probleme Funktionieren auch ohne es in die WINMAIN zu schreiben ..

    jedoch ist die Lösung von Jansen vom Stil her besser .



  • Manchmal ist man gezwungen OnCreate oder OnAktivate zu benutzen und anhand irgend welcher bedingungen Formular/Application doch dann noch zu beenden.

    Wie schon gesagt funzt da Close() oder Application->Terminate() nicht

    in sio einem fahll nutze ich folgende kostruktion:

    if (irgendwas_ist_fasch_und_prog_mus_beendet_werden)
    {
        PostMessage(Handle, WM_CLOSE, 0, 0); // Close();
        return;
    }
    

    funtzt immer.



  • Danke !!!


Anmelden zum Antworten