Announcement

Collapse
No announcement yet.

Programm beenden aber wie?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Programm beenden aber wie?

    Hallo zusammen,

    ich habe das Problem, aus einem Hauptprogramm ein anderes Programm zu starten. Dieses andere Programm macht im OnShow-Ereignis etwas und soll sich selbst, entweder nach Abarbeitung der Anweisungen oder im Fehlerfall per Close schliessen. Wenn ich das Programm aus dem Hauptprogramm starte schliesst sich dieses Programm nicht sondern legt mir den ganzen Rechner lahm (CPU ständig auf 100%).
    Hat hier irgendjemand ne Idee wie man das richtig macht, bzw. wo hier der Fehler liegt?

    Gruß
    Uwe

  • #2
    Hallo,<br>wie startest du denn das andere Programm? <br>Wartest du im Hauptprogramm auf dessen Beendigung?<br><br>Michae

    Comment


    • #3
      Das Hauptprogramm läuft immer und starten tue ich das andere Programm mit ShellExecute. Ich warte NICHT auf die Beendigung des gestarteten Programms, deshalb mache ich das ja mit dem extra Programm

      Comment


      • #4
        was macht dieses zweite Programm? Kannst du es ohne diesen fehler "extern" starten? Wenn du lange Schleifen hat, setze ein "application.processmessages" rein, damit dein Windows, wenigstens ab und zu ;-), was anderes machen kann.<br>Michae

        Comment


        • #5
          Ja von aussen kann ich's starten, es braucht zwar dann auch ne zeit aber irgendwann beendet es sich dann trotzdem. Ich habe mal alles auskommentiert in der ShowForm methode, ein ShowMessage aufgerufen und anschliessend sofort ein close. Das Programm scheint sich allerdings bei dem close nicht sofort zu beenden sondern macht irgendwie noch weiter. Kapier ich nicht.. Habt ihr ne Idee??

          Comment


          • #6
            beendest du das Programm, wenn es sich gerade aufbauen will? :-)<br>lege mal einen Timer auf dein Form. setze diesen auf 100mS und enabled.<br>Im OnTimer-Ereignis stellst du enabled auf false. Deinen weiteren Code setzt du auch in's OnTimer Ereignis..

            Comment


            • #7
              Hallo,

              wie sieht die Implementierung im Detail aus

              Comment


              • #8
                In dem FormShow Ereignis werden einige Variablen mit Werten aus Tabellen vorbelegt und dann wird versucht eine DFÜ Verbindung zu starten. Gelingt dies nicht sollte das Programm dies in ein Logfile schreiben und sich dann wieder beenden.
                Was ich jetzt bemerkt habe ist, das ich nach dem Close noch ein Exit aufrufen muss damit die Prozedur auch direkt verlassen wird. Ich bin davon ausgegangen das nach dem Close das Programm sich sofort beendet und nicht noch mit weiteren Anweisungen weitermacht

                Comment


                • #9
                  Hallo,

                  also die radikalste Methode (wenn wir hier wirklich von einem anderen Programm sprechen) ist natürlich der Befehl "Halt;". Probier den mal aus, dann klappts auch.

                  Allerdings sind auch andere Lösungen möglich. Z.B. einen Timer zu dem Deine FormShow Funktionen verlegt und ausgeführt werden. Nach dem Abarbeiten und wenn die Verbindung nicht zustande kam, kannst Du dann mit "Close" arbeiten. In FormShow oder Create funktioniert das nicht.

                  MfG
                  Sebastian Hagedor

                  Comment


                  • #10
                    Sachen, die nach dem Start ausgeführt werden sollen (inkl. Beenden), lege ich in eigene proceduren, die auf Messages reagieren. Dann setze ich im OnShow einfach ein PostMessage ab. Das kommt in die Messageloop, die dann erst nach dem Start abgearbeitet wird. Dann kann der Check problemlos erfolgen und das Formular auch wieder geschlossen werden.<p>
                    Problem: Das Formular wird angezeigt. Willst Du das nicht, solltest Du mal ShowMainForm versuchen oder besser die Routine ganz aus dem Formular auslagern und das Form erst nach Erfolg der Routine erzeugen.<p>
                    Schöne Grüße, Mario Noac
                    Schöne Grüße, Mario

                    Comment


                    • #11
                      Genau so habe ich es auch gemacht, eine eigene Routine geschrieben und mit PostMessage aus FormShow angesprochen. Trotzdem blieb das Problem das nach dem Close sich das Programm nicht abrupt beendet hat. Erst nach einem Exit klappte es (zumindest bisher) ohne Schutzverletzung

                      Comment


                      • #12
                        Ein Exit verlässt doch nur die aktuelle Procedure. Wie beendest Du damit ein ganzes Programm?<p>
                        Alternativ: Application.Terminate;<p>
                        Schöne Grüße, Mario Noac
                        Schöne Grüße, Mario

                        Comment

                        Working...
                        X