Announcement

Collapse
No announcement yet.

schliesen eines Programms in dessen OnCreate

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

  • schliesen eines Programms in dessen OnCreate

    Hallo zusammen,
    ein kleines Problem.

    Wenn ich beim Programmstart(Form1 ist mein HauptFormular) in die OnCreate Routine von Form1 irgendwas abfrage und darauf das Programm wieder schliesen will funktioniert die Methode close nicht. Er springt mir zwar in die OnClose Funktion geht aber dann ganz normal in OnCreate weiter.

    Mit "Halt" futzt es. (ist aber auch nicht die feine Art ein Programm zu beenden)

  • #2
    Nimm statt Close in der OnCreate-Funktion folgendes in der OnShow-Methode:

    <pre>
    if MeineAbfrageObStart = FALSE then
    PostMessage(self->Handle, WM_CLOSE, 0, 0)
    else
    begin
    // Normaler OnCreate-Ablauf
    end;
    </pre&gt

    Comment


    • #3
      Nimm statt Close in der OnCreate-Funktion folgendes in der OnShow-Methode (dürfte etwas Eleganter als mit Halt funktionieren):

      <pre>
      if MeineAbfrageObStart = FALSE then
      PostMessage(self->Handle, WM_CLOSE, 0, 0)
      else
      begin
      // Normaler OnCreate-Ablauf
      end;
      </pre&gt

      Comment


      • #4
        recht elegant, funktioniert leider nicht ...

        Comment


        • #5
          Hallo zusammen,

          man kann die Bedingung auch direkt in den Programmquelltext packen:

          program Project1;<br>
          <br>
          uses<br>
          Forms,<br>
          Unit1 in 'Unit1.pas' {Form1};<br>
          <br>
          {$R *.RES}<br>
          <br>
          begin<br>
          Application.Initialize;<br>
          Application.CreateForm(TForm1, Form1);<br>
          if MeineBedingung then Application.Run;<br>
          end.<br>
          <br>

          Damit habe ich sichergestellt, daß das Prog im bei Nichterfüllter Bedingung gar nicht erst gestartet (und damit auch nichts sichtbar) wird.

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            doch, futzt schon!! sorry...

            vielen Dan

            Comment


            • #7
              kann vielleicht jemand den Effekt erklären?
              d.h. warum Close nicht funktioniert wenn ich im OnCreate bin

              Comment


              • #8
                1, Was futzt schon????

                2, Close wird deshalb nicht funktionieren weil er ja erst im OnCreate bzw. OnShow ist und der in der Close-Methode abgearbeitet Code

                <pre>
                procedure TCustomForm.Close;
                var
                CloseAction: TCloseAction;
                begin
                if fsModal in FFormState then
                ModalResult := mrCancel
                else
                if CloseQuery then
                begin
                if FormStyle = fsMDIChild then
                if biMinimize in BorderIcons then
                CloseAction := caMinimize else
                CloseAction := caNone
                else
                CloseAction := caHide;
                DoClose(CloseAction);
                if CloseAction <> caNone then
                if Application.MainForm = Self then Application.Terminate
                else if CloseAction = caHide then Hide
                else if CloseAction = caMinimize then WindowState := wsMinimized
                else Release;
                end;
                end;
                </pre>

                Nicht in der Zeile Application.Terminate landet

                Comment


                • #9
                  1. Dein Beispiel funktioniert schon...
                  2. Vielen Dank. ich habe leider nur die Std. Version und daher hab ich keinen Einblick in diese Routin

                  Comment

                  Working...
                  X