Buttons nach Zeit auslösen



  • Hallo,
    ich kenne mich nicht sehr gut in C++ aus. Muss aber was für die Schule machen.
    Ich habe bei 8 Buttons. Hinter jedem ist eine andere Funktion hinterlegt.
    Wenn man auf die Buttons klickt, funktioniert auch alles.

    Ich möchte das jetzt so haben, wenn man z.B. auf den Button "Starten" klickt, dass nach 1 sekunde Button 1 ausgelöst werden soll, nach 5 Sek Button 2, nach 3 Sek Button 3 und so weiter bis Button 8.
    Wenn dann alle Buttons durch sind, soll er wieder normal am Anfang anfangen.
    Es soll auch noch einen Button "Stop" geben, wo dann alles aufhört!
    Bitte helf mit einer, wie ich das mit dem Borland C++ Builder 5 schaffe!
    Danke
    MFG
    chr-krieger



  • schau mal in der Hilfe nach TTimer



  • hab ich schon. hab das dann auch so gemacht.
    aber ich schaffe es nur, den letzten Button auszulösen. den rest überspribgt der



  • Hallo

    dann zeig doch mal Code.

    bis bald
    akari



  • hab ich leider nicht mehr.
    gelöscht, da es nicht funktionierte.
    muss ich wenn ich mehere Zeit-Abstände haben, mehere Timer nehmen oder kann man die zeiten problemlos ändern?



  • Hallo

    der Witz an der Timer-Lösung ist, das du dir merken mußt, welchen Button du als letztes ausgelöst hast. Dazu nimmst du am einfachsten eine Integer-Variable als Member des Forms, das die Nummer des letzten Buttons speichert (Anfangswert 0). Wenn dann OnTimer aufgerufen wird, kannst du anhand des Wertes entscheiden, welcher Button als nächster ausgeführt werden soll, und den Wert dieses Buttons in den besagten Zwischenspeicher stecken.

    bis bald
    akari



  • könntest du das vielleicht nochmal erklärn, und vll ein Bespiel an 3 Buttons oder so machen.
    wäre dir sehr dankbar.
    ach und das mit dem wiedeholen, in ne Schleife?



  • Hallo

    also gut . Ich habe mal ein kleines Beispiel erstellt.
    Ich habe eine neue Anwendung erstellt und darin drei Buttons, einen Timer (Enabled = false, Interval = 2000) und einen Button für Start/Stop.
    Die Headerdatei des Forms erweiterst du so

    private:	// Anwender-Deklarationen
            int LastButton; // Der neue Zwischenspeicher für den Zustand des Timers
    public:		// Anwender-Deklarationen
    

    Dann erstellst du für den Start/Stop-Button diesen Event

    void __fastcall TForm1::ButtonStartStopClick(TObject *Sender)
    {
      Timer->Enabled = !(Timer->Enabled); // Timer an- oder abschalten
      LastButton = 0; // Zustand auf ersten Button setzen
    }
    

    Für den ersten der drei Funktions-Button erstellst du diesen Event

    void __fastcall TForm1::ButtonFunc(TObject *Sender)
    {
      ShowMessage(LastButton); // Aktuellen Zustand anzeigen       
    }
    

    und weist diesen auf den anderen beiden Funktions-Button zu.

    Zum Schluß erstellst du noch den Timer-Event

    void __fastcall TForm1::TimerTimer(TObject *Sender)
    {
    
      // je nach Zustand einen der Buttons ausführen
      switch(LastButton)
      {
        case 0 :
          Button1->Click();
          LastButton = 1;
          break;
        case 1 :
          Button2->Click();
          LastButton = 2;
          break;
        case 2 :
          // Dies ist der letzte Zustand. Je nach deiner Aufgabe kannst du den
          // Zustand wieder auf Anfang setzen
          Button3->Click(); 
          LastButton = 0;
          // oder du deaktivierts den Timer
          // Timer->Enabled = false;
          break;
        }
    }
    

    Dies ist die einfachste Art, das zu lösen. Du kannst dir ja je nach deinem Ziel für das ganze noch elegantere Abwandlungen einfallen lassen.

    bis bald
    akari



  • cool danke. nur 2 sachen habe ich nit verstanden.

    wofür ist das?

    void __fastcall TForm1::ButtonFunc(TObject *Sender)
    {
    ShowMessage(LastButton); // Aktuellen Zustand anzeigen
    }

    und was ist das mit dem case?



  • Hallo

    probier das doch einfach mal aus.
    zu ShowMessage und switch : einfach mal Cursor darauf setzen und F1 drücken...

    bis bald
    akari



  • cool danke funktioniert alles.


Anmelden zum Antworten