Entwickler-Ecke
Sonstiges (Delphi) - Wait befehl
Finger - Do 13.04.06 09: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 09: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 10:50
Hi all,
zu TurboPascal-Zeiten hieß das Ding delay, war aber genauso zu bedienen:
Tschö,
nullplan
del1312 - Do 13.04.06 11:42
hm delay kennt er nicht, hab delphi 7 ?!?
Miri - Do 13.04.06 11: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 11:46
oh, ok danke :o)
Finger - Do 13.04.06 12: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 12: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 13: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 03:38
was hälts du davon, einfach die schrittweite selbst zu berechnen und Progressbar.position selbst zuzuzweien?
Delete - Sa 27.01.07 03: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!