Form friert ein -.-
-
Hallo ich versuche gerade ein paar Zahlen in einem Edit Feld hochzählen zu lassen aber immer wenn ich auf den Button klicke friert die Form ein o_O
Was mach ich da falsch?
void __fastcall TForm1::Button1Click(TObject *Sender) { int i; for (int i=0;i<200;i++) { Sleep(100); Edit1->Text=i; } }
-
Sleep lässt den Thread warten (damit auch das neuzeichnen der Fenster).
Abhilfe bringt ein Application->ProcessMessages(), besser aber nen Timer der bei ButtonClick gestartet wird.mfg
xXx
-
Friert ein?
Normal müßte der Code nach dem Click 20 Sekunden warten und dann 199 anzeigen.
wenn das also einfriert ist noch was Anderes was mit dem gezeigten Code nix zu tun hat.
-
Wie funktioniert das denn jetzt das die Zahlen langsam hochgezählt werden und nicht von 0 auf 199 in 1 Sec hochzählen ?
Das hier hab ich bis jetzt.
void __fastcall TForm1::Timer1Timer(TObject *Sender) { int i; for (int i=0;i<200;i++) { Edit1->Text=i; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Timer1->Enabled = false; }
-
z.B. so:
void __fastcall TForm1::Timer1Timer(TObject *Sender) { static int i = 0; Edit1->Text=i; i++; if( i > 199) Timer1->Enabled=false; }
klappt dann aber nur einmal...
mfg
xXx
-
Hallo,
wenn er "i" im Header deklariert und beim Starten des Timers auf 0 zurücksetzt funktioniert das auch mehrmals
LG, Micha
-
Das wäre aber langweilig
mfg
xXx
-
Funktioniert Perfekt ty