Announcement

Collapse
No announcement yet.

Codeausführung nach Fenstererstellung

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

  • Codeausführung nach Fenstererstellung

    Hallo zusammen.

    Kann mir jemand sagen wo genau ich den Code hinschreiben muss der sofort nach der Erstellung des Hauptfensters ausgeführt werden soll.

    Danke für eure Antwort. Bin noch Anfänger

  • #2
    Im Ereignis ONCREAT
    Christian

    Comment


    • #3
      Danke für deine Antwort

      Das hab ich auch schon gemacht. Leider funktioniert das bei mir nicht. Der Code in OnCreate wird bei mir schon vor der Fenstererstellung ausgeführt.

      Hier das Problem noch ein wenig Detailierter:

      Ich habe eine Componente in den BCB zugefügt mit der ich alle COM-Ports nach dem vorhanden sein eines Chipkartenlesegeräts abfragen kann. Mit dem Ereigniss OnProgress dieser Componente will ich den Fortschritt dieser Funktion über eine ProgressBar darstellen. Nur leider stellt sich bei mir gar nichts dar, da das Hauptfenster noch gar nicht dargestellt wird.

      Habe was ähnliches schon mal mit dem abspielen eines AVI-File mit der MediaPlayer-Komponente gehabt. Beim Start des Programms in der Entwicklungsumgebung von BCB zeigte es mir das AVI-File nicht an, sobald ich jedoch das exe-file direkt startete funktionierte das.

      Bei diesem Programm gehts leider nicht. Gäbe es da noch einen andern Weg

      Comment


      • #4
        Hi,<br>
        versuch mal folgendes:<br>

        1. Progressbar auf Form<br>
        2. Komponente auf Form<br>
        3. TTimer auf Form - Interval auf 10, Enabled = false<br>
        4. In das OnTimer Ereignis deine Methode zum scannen der COM Ports.<br>
        5. In das OnShow Ereignis der Form: Timer1-&gt;Enabled = true;<br>

        CU Chri

        Comment


        • #5
          Danke Chris,

          geht leider auch nicht. Habe mir den gleichen Gedanken auch schon gemacht. Hatte den Interval sogar auf ner Sekunde. Passierte jedoch wieder das gleiche. COM-Ports werden gescannt und das Hauptfenster wird nach Abschluss des scannens dargestellt. So ca. nach 30sekunden mal

          Comment


          • #6
            Vorab: Ich habe vom Builder keine Ahnung, komme aus der Delphi-Ecke, aber das Prinzip ist das gleiche<p>
            Ich würde das aber dann so angehen. Das MainForm bekommt eine neue procedure, die auf eine UserMessage reagiert (wm_User+1). Dann wird im OnCreate oder im OnShow (besser, aber wenn Deine Anwendung ausgeblendet werden kann, nicht geeignet) einfach ein PostMessage(wm_User+1,Handle,....) gemacht.<br>
            Sobald die Anwendung mit Starten wirklich fertig ist, wird Deine Message abgearbeitet und somit Deine Funktion aufgerufen.<br>
            Wo klemmt's: Wenn Du beim Start irgendwie processmessage aufrufst, wird die Sache nicht funktionieren...<p>
            Variante 2: Du gehst in die Projektdatei. Vermutlich steht auch ganz zum Schluss ein <b>Run</b>. Davor das Form anzeigen, bischen Luft mit Processmessage geben und dann Deine Routine aufrufen. Ist vom Prinzip her sicher sauberer. Allerdings ist die Projektdatei sicher nicht das, wo man als Einsteiger zuviel manipulieren wird / sollte?!<p>
            Schöne Grüße, Mario Noack<p>
            PS: Das die Anwendung in unter 1 Sekunde startet glaube ich nicht, bzw. ist nicht sichergestellt. Kommt dann der Timer früher, als wie im Projekt das Run ausgeführt wird, kann es nicht gehen. 10 Sekunden oder so wäre da sicher ein besserer, wenn auch ein wenig großzügiger Wert gewesen
            Schöne Grüße, Mario

            Comment


            • #7
              Danke Mario,

              ich habe mal deine 2. Variante ausprobiert. Leider funktioniert die auch nicht ganz. Das Hauptfenster mit seinen Komponenten wird jetzt wohl angezeigt, ich erhalte aber den Wert der Fortschrittsanzeige nicht zurückgeliefert. Die Ereignissbehandlung OnProgress des Hauptformulars ist irgendwie blockiert. Andere Ereignissbehandlungen funktionieren aber (zB. der Timer)

              Aber ich habe es jetzt ein wenig anders gelöst. Bringt jedoch nichts den Lösungsweg hier reinzuschreiben, da ich es über eine Ereignissbehandlung der COM-Komponente für meinen Chipkartenleser gemacht habe.

              Danke nochmals für eure Info

              Comment


              • #8
                Hallo!

                Vielleicht lässt sich OnActivate dafür benutzen.

                Gruss
                Peer Dah

                Comment


                • #9
                  Das Ereignis wird jedesmal ausgeführt, wenn das Fenster aktiviert wird, also in der Vordergrund kommt oder anderweitig den Focus bekommt
                  Christian

                  Comment


                  • #10
                    <PRE>
                    Hi Ralf!

                    Wenn Du in der Hilfe nachschaust, findest Du die Ablaufreihenfolge
                    der Aufrufe. Konstructor, OnCreate OnShow usw. .
                    Du muß nur genau wissen wann Du einsteigen willst.
                    Wenn Du selber etwas anzeigen willst, kannst Du erst nach dem
                    zeichnen der Form ran.

                    Gruß Fred
                    </PRE&gt

                    Comment


                    • #11
                      Im C-Builder soll man OnCreate besser nicht benutzen, da es nicht fest definiert ist, wann dieses Ereignis stattfindet, besser gleich den Konstruktor benutzen. OnCreate ist aus Kompatibilitätsgründen zu Delphi da.
                      Man kann z.B. in OnShow eine statische Variable anlegen, damit z.B. nur beim ersten Aufruf, die Initialisierung des Schnittstellen stattfindet

                      z.B<br>
                      void __fastcall TForm1::OnShow(TObject * Senser)<br>
                      {<br>
                      static bool First = true;<br>
                      <br>
                      if (First == true)<br>
                      {<br>
                      First = false;<br>
                      // Code der nur einmal ausgeführt werden soll<br>
                      ...<br>
                      }<br>
                      <br>
                      }<br>
                      <br>
                      <br>
                      <br>
                      Chri

                      Comment

                      Working...
                      X