Announcement

Collapse
No announcement yet.

OnAktivate aktiviert zuviel!

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

  • OnAktivate aktiviert zuviel!

    Hallo,
    ein vielleicht kleines Problem. Ich verwende in meinem Programm mehrere Form. Wenn bsplw. Form2 wieder die Hauptform Form1 aufruft, führt diese natürlich auch OnAktivate aus. In dieser Funktion lade ich Stammdaten, stelle grundsätzliche Parameter beim Programmstart ein usw. Jetzt werden all diese Programmschritte natürlich beim Formwechsel erneut ausgeführt, was spätestens bei zweiten Mal weniger hilfreich ist. Meine Frage: Muß man damit leben und von hand auf einen zweiten Aufruf testen, oder kann man das PRoblem eleganter umgehen?

    Fred Ziebell

  • #2
    Hallo Fred
    ich habe das folgendermassen gelöst. Ich definiere eine Variable die für beide Forms bekannt ist (z.B. varFormName). Beim OnCreate-Ereignis erhält die Variable den Wert Form1.Name bzw. Form2.Name. Im OnActivate-Ereignis von Form1 mache ich dann eine If-Abfrage. Ich weiss nicht ob das elgant ist (die Cracks wissen vielleicht was besseres), aber ich kann damit auch darauf reagieren wenn ich zum Beispiel Form2 unter verschiedenen Bedingungen verlasse oder ein Form3 habe. Hoffentlich konnte ich Dir helfen.
    Gruss Walte

    Comment


    • #3
      Hallo Walter,
      vielen Dank für die Antwort. Also doch über eine Variablen-Abfrage. Ich werde es so umsetzen.
      Gruß Fre

      Comment


      • #4
        Hallo Walter. Nochmal zur Sache. Deine Erwähnung von OnCreate war goldrichtig. Ich habe meine gesamte Initialisierungsprozedur einfach logisch aufgeteilt. Der Hauptteil wurde nach OnCreate bzw. OnShow verschoben. Diese beiden Routinen werden tatsächlich nur einmalig beim Programmstart ausgeführt. der Rest,die jeweils für die aktive Form wichtigen Fragmente blieben in OnAktivate. Nochmals besten Dank. Problem gelöst.
        Gruß Fre

        Comment


        • #5
          Hallo Fred
          OnShow würde ich nicht verwenden, soviel ich weiss wird das Ereignis auch ausgeführt wenn eine andere Anwendung aktiviert ist und Du Deine Anwendung wieder in den Vordergrund holst, ich glaube sogar jedesmal wenn Windows Dein Anwendungsfenster neu zeichnet.
          Gruss Walte

          Comment


          • #6
            Hallo Walter,

            OnShow wird nur ausgeführt, wenn ein Fenster mittels Show oder ShowModal-Methode angezeigt wird (Also Visible = TRUE gesetzt wird). Das was Du meinst ist da OnActivate-Ereignis. Dies wird jedesmal ausgelößt, wenn das Formular den Fokus erhält. Falls man von einer anderen Anwendung den Fokus erhält, so wird das Ereignis OnActivate der Applikation ausgeführt (siehe auch Delphi-Hilfe zu OnShow/OnActivate

            Comment


            • #7
              Hallo Bernhard
              Sorry, Du hast natürlich recht. Ich verwende OnShow nie.
              Gruss Walte

              Comment


              • #8
                Hallo,
                folgendes ist mir aufgefallen: wenn die Hauptform Form1 den Dialog Form2 mittels showmodal aufruft und dieser Dialog/Form beendet wird, wird bei der jetzt wieder aktiven Form1 onaktivate NICHT! ausgeführt!?

                Gruß Fred Ziebel

                Comment


                • #9
                  Ist auch so gewollt.

                  Wenn in ein Formular mittels ShowModal aufgerufen wird, so wird der Programmfaden im ersten Formular an der stelle des Aufrufs ShowModal angehalten und kehrt erst zurück wenn das aufgerufene Formular geschlossen wird. Also ist ein OnActivate nicht nötig, da das Formular (der Programmfaden im Formular) nur angehalten wurde, aber das Formular nicht deaktiviert wurde, wie es geschehen würde, wenn zwischen zwei nichtmodalen Formularen hin und hergesprungen würde.

                  So, der Satz war jetzt lang genug

                  Comment


                  • #10
                    Ähm....ja....genau! :-)

                    Fred Ziebel

                    Comment

                    Working...
                    X