Alphabet per Timer ausgeben



  • Ja also ich wollte in der Edit-Box mit nem Timer das alphabet (interval = 100) von A bis Z ausgeben ich hab es so gemacht:

    Edit1->Text = "A";
    Sleep(100);
    Edit1->Text = "B";
    Sleep(100);
    Edit1->Text = "C";
    Sleep(100);
    Edit1->Text = "D";
    Sleep(100);
    Edit1->Text = "E";
    Sleep(100);
    Edit1->Text = "F";
    Sleep(100);
    Edit1->Text = "G";
    Sleep(100);
    Edit1->Text = "H";
    Sleep(100);
    Edit1->Text = "I";
    Sleep(100);
    Edit1->Text = "J";
    Sleep(100);
    Edit1->Text = "K";
    Sleep(100);
    Edit1->Text = "L";
    Sleep(100);
    Edit1->Text = "M";
    Sleep(100);
    Edit1->Text = "N";
    Sleep(100);
    Edit1->Text = "O";
    Sleep(100);
    Edit1->Text = "P";
    Sleep(100);
    Edit1->Text = "Q";
    Sleep(100);
    Edit1->Text = "R";
    Sleep(100);
    Edit1->Text = "S";
    Sleep(100);
    Edit1->Text = "T";
    Sleep(100);
    Edit1->Text = "U";
    Sleep(100);
    Edit1->Text = "V";
    Sleep(100);
    Edit1->Text = "W";
    Sleep(100);
    Edit1->Text = "X";
    Sleep(100);
    Edit1->Text = "Y";
    Sleep(100);
    Edit1->Text = "Z";
    

    also mit sleep geht es nicht ! den er gibt gleich Z aus und lässt die anderen weg.. auch ohne sleep 😕



  • Probiers doch mal mit... nem Timer...? TTimer, um genau zu sein. 🙄 Dann noch ne char-Variable, die du hochzählst und wieder haben wir deine Hausaufgaben gemacht.



  • Du mußt da, vor jedem Sleep noch ein Application->ProcessMessages(); setzen.

    Allerdings würde ich das in einer Schleife machen.

    for (char Zeichen = 'A'; Zeichen <= 'Z'; ++Zeichen)
    {
       Edit->Text = AnsiString(Zeichen);
       Application->ProcessMessages();
       Sleep(100);
    }
    

    Application->ProcessMessages() arbeitet die Botschaftswarteschlange ab. Ohne das wird die Oberfläche der Anwendung nur aktualisiert, wenn Sie 'idle' ist.



  • Sieht man denn da noch was? Immerhin wird auf einen Zeichenwechsel nur 0.1s gewartet.



  • Na ja, ist ja einfach anzupassen. Ich habs gerade mal ausprobiert, ist zwar recht zügig, aber noch lesbar.



  • also man kann das auch mit einer schleife machen oder?

    for (int i=0 ; i<26 ; i++)
    {
     Edit1->Text = (char)i+65;
     Application->ProcessMessages;
     Sleep(100);
    }
    


  • Hallo

    wenn dann so

    for (int i=0 ; i<26 ; i++)
    {
     Edit1->Text = char(i+65);
     Application->ProcessMessages();
     Sleep(100);
    }
    

    Halte aber Joes Variante für lesbarer.

    bis bald
    akari



  • Über Timer sieht das ungefähr so aus:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    }
    
    char alph;
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       alph='a';
       Timer1->Interval = 100;
       Timer1->Enabled = true;
    }
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
       Edit1->Text = alph;
       if(alph=='z') Timer1->Enabled = false;
       else alph++;
    }
    

Anmelden zum Antworten