PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Delphi] Darstellungsproblem bei Schleife



cfmax
19-06-2003, 19:07
procedure TYahtzee.animate;
var zufall,i: INTEGER;
begin
for i:=1 to 10 do
begin
zufall:=random(6);
zufall:=zufall+1;
zeige(zufall);
sleep(1000);
end;
end;

Das is aus nem Yahtzee-Prog, das ich grade schreibe.
Wenn der Compi ne Zahl gewählt hat, die gewürfelt werden soll, dann möchte ich sone kleine Animation einspielen, bei der es so aussieht, als würde der Würfel rollen. deswegen habe ich des hier gebastelt.

theoretisch:
Es wird also ne Zahl erzeugt von 1 bis 6, die dann aufm Bildschirm erscheint. Dann macht der Compi ne Pause von 1000ms (einer Sekunde), damit der User Zeit hat auf seinem Bildschirm des Dingens zu erkennen. Dann wird eine neue Zufallszahl zwischen 1 und 6 erstellt und wiederum angezeigt .... dann pause.....

inner praxis sieht man aber den Vorgang gar nicht - das ganze dauert einfach nur, bis er die 9 bzw. 10 sekunden abgearbeitet hat.

WARUM?

anda_skoa
19-06-2003, 20:04
Könntest du vielleicht das nächste Mal ein bischen konkreter beim Betreff sein?

Ich werds mal Ändern, bitte korrigier mich, wenn ich was falschen angenommen habe.

Ciao,
_

peschmae
20-06-2003, 09:31
da die App nur aus einem Thread besteht (auf jeden Fall weist nichts auf das gegenteil hin)

hast du ein Problem: Du blockierst diesen Thread und damit auch die Nachrichtenschleife

solange das Programm aber die Nachrichtenschleife nicht durchläuft, wird auch nichts neu gezeichnet...

also sowas:


procedure TYahtzee.animate;
var zufall,i: INTEGER;
begin
for i:=1 to 10 do
begin
zeige(random(6)+1);
bearbeitedieNachrichtenSchleife();
sleep(1000);
end;
end;


muss noch schauen, was du für bearbeiteDienNachrichtenschleife genau einsetzen musst - schon lange nix Delphi mehr gemacht

MfG Peschmä

P.S. code-tags verwenden (der Knopf mit dem # drauf ;-))

peschmae
20-06-2003, 09:40
hi,

habs gefunden :D

http://www.delphi-treff.de/content/edhonline/index.php4?id=8

das geht dann so:



procedure TYahtzee.animate;
var zufall,i: INTEGER;
begin
for i:=1 to 10 do
begin
zeige(random(6)+1);

Application.ProcessMessages;

sleep(1000);
end;
end;


die seite (www.delphi-treff.de) ist sowieso recht lesenswert...

MfG Peschmä

cfmax
20-06-2003, 09:53
vielen dank, werds gleich asprobieren (wenn ich mich nciht mehr melde, dann gehts)
es gibt auch ne andere Warteschleife, da kam das mit den Processmessages vor - hätte ich ja auch von alleine drauf kommen können, naja, auf jeden Fall

VIELEN DANK!