Entwickler-Ecke
Sonstiges (Delphi) - Wait befehl
Finger - Do 13.04.06 08:48
Titel:  Wait befehl
Hallo ich wollte ma fragen (da ich nicht weiss in welche Kategorie frage ich hier) ob es einen Befehl gibt um zu warten! Also das man sagt wait.1 oder so das es eine sekunde wartet bevor es weiterfährt im Programm!
Stefan.Buchholtz - Do 13.04.06 08:59
Die Funktion dafür heisst 
sleep und erwartet die Zeit in Millisekunden. Die hat allerdings den Nachteil, dass das Programm während der Wartezeit wirklich nichts macht, d.h. Fenster werden nicht neu gezeichnet, sind nicht verschiebbar usw. 
Eine bessere Lösung ist meistens, in einer Schleife zu warten, die regelmässig 
Application.ProcessMessages aufruft, dann macht das Programm nicht den Eindruck, als hätte es sich aufgehängt:
            
Delphi-Quelltext    
                                        | 1:2:
 3:
 4:
 5:
 6:
 
 | startTime := GetTickCount;while GetTickCount < startTime + 1000 do
 begin
 sleep(100);
 Application.ProcessMessages;
 end;
 | 
        
      
Stefan
 
nullplan001 - Do 13.04.06 09:50
Hi all,
zu TurboPascal-Zeiten hieß das Ding delay, war aber genauso zu bedienen:
Tschö,
nullplan
 
del1312 - Do 13.04.06 10:42
hm delay kennt er nicht, hab delphi 7 ?!?
Miri - Do 13.04.06 10:45
	  |  nullplan001 hat folgendes geschrieben: | 
		  | Hi all, zu TurboPascal-Zeiten hieß das Ding delay
 | 
weiter oben steht doch der richtige befehl:
 
del1312 - Do 13.04.06 10:46
oh, ok danke :o)
Finger - Do 13.04.06 11:54
[highlight]startTime := GetTickCount;
while GetTickCount < startTime + 1000 do
begin
  sleep(100);
  Application.ProcessMessages;
end;[/highlight]
Wie muss ich denn den Einbauen? Ich weiss nicht genau wie?
del1312 - Do 13.04.06 11:59
du setzte den code einfach genau an die stelle wo eine pause gemacht werden soll. vergiss aber nicht starttime als variable zu deklarieren.
Finger - Do 13.04.06 12:04
            
Delphi-Quelltext    
                                        | 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 
 | procedure TForm1.testknopfClick(Sender: TObject);
 var a, b, i, starttime:integer;
 
 begin
 
 
 
 Listbox1.Clear  ;
 
 a:=strtoint(eingabe.Text);
 b:=Strtoint(schluss.Text);
 
 if a > b then
 begin
 form3.show      ;
 eingabe.text:= '' ;
 schluss.text:= ''  ;
 end
 else begin
 
 if a > b then begin      i := a;
 a := b;
 b := i;
 end;
 
 Progressbar1.Position := 0;
 Progressbar1.Max := abs(b-a);
 Progressbar1.Step := 1;
 
 Listbox1.items.Clear;
 for i := a to b do begin
 startTime := GetTickCount;
 while GetTickCount < startTime + 100 do
 begin
 sleep(100);
 Application.ProcessMessages;
 end;
 Progressbar1.StepIt;
 end;
 
 repeat
 
 ListBox1.Items.Add(IntToStr(a));
 
 a:=a+1;
 
 
 
 
 
 until a>b;
 Progressbar1.Position := 0;
 eingabe.text:= ''     ;
 schluss.text:= ''      ;
 
 
 
 end;
 | 
        
      
Es geht! Aber jetzt ist der Progress bar auch nach abgeschlossener ausrechnung noch am laufen!!! was kann ich dagegen tun!
Hab herausgefunden das die bar korrekt funktioniert wenn ich 0 sleep gebe! ansonsten füllt sie sich und das programm ist nicht mehr zu beenden!
 
NCortex - Sa 27.01.07 02:38
was hälts du davon, einfach die schrittweite selbst zu berechnen und Progressbar.position selbst zuzuzweien?
Delete - Sa 27.01.07 02:47
tja, finger biste schon weiter??? falls ja, was hälst du davon den thread auf beantwortet zu setzen?
Entwickler-Ecke.de  based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!