AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pause in einer Schleife

Ein Thema von nlz · begonnen am 25. Nov 2010 · letzter Beitrag vom 25. Nov 2010
Antwort Antwort
nlz

Registriert seit: 11. Okt 2010
7 Beiträge
 
Delphi 7 Personal
 
#1

Pause in einer Schleife

  Alt 25. Nov 2010, 07:46
Hallo und Guten Morgen liebe Delphi freunde,

habe ein kleines Problem, und sehe wahrscheinlich den wald vor lauter bäumen nicht. Habe Delphi 7

Ich habe ein Programm geschrieben das einen art weg in ein stringgrid.array schreibt. das funktioniert auch ganz gut. der weg wird von unten an angefangen ( Start ) und geht dann immer eine zeile höher bis er ganz oben an gekommen ist.... sow ie bei tabalugas final runde egen den frost schneemann , wers kennt !

Nun wird der Weg allerdings sehr schnell gezeichnet. Das ganze ist in einer while schleife eingebunden.:

Code:
while ARow <> 0 do
[weg weiter zeichenn]
end;
Ich möchte nun das nach jedem wegpunkt eine kleine Pause von ca ner 0,5 sekunden kommt, damit der spieler sich den weg genau einprägen kann. also:
Code:
while Arow <> 0 do
[weg weiter zeichen ]
pause = 500 msec;
end;
da der code für das wegzeichenn unwichtig ist habe ich ihn mal aus faulheit weg gelassen....

Hoffe Ihr könnt mir helfen wie schon so oft !!!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 07:54
Hallo,


Sleep(500) wäre das einfachste.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 07:56
Hallo,

Delay oder MSDN-Library durchsuchenSleep sollte dir weiterhelfen.
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 08:14
Häng noch ein Application.ProcessMessages vor Dein Sleep, oder wie beschrieben Delay.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#5

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 10:52
Häng noch ein Application.ProcessMessages vor Dein Sleep, oder wie beschrieben Delay.
Hallo Bummi,

wieso empfiehlst Du dem OP ein Application.ProcessMessages ?
Aus seiner Frage wird doch ersichtlich: er möchte, daß ein (Win)Control (StringGrid) neugezeichnet werden soll. Und nicht, daß die Messagequeue abgearbeitet werden soll. Wird denn überhaupt berücksichtigt, wie sich die Applikation dann verhalten würde bei Benutzeraktionen (z.B. Alt+F4, Resize, Klick auf irgendwelche Schalflächen...) während dieser Zeit ?

Falls jemand fragt, was er tun soll um seine alten Liebesbriefe von seiner Ex Manuela zu löschen, könnte man antworten "dann zünd doch Dein Haus an". Stimmt natürlich. Die alten Briefe von der Manuela sind danach weg. Die gleiche Antwort kann recycelt werden, für Fragen nach alten Liebesbriefen von Claudia, Tom, Anita...

Zurück zum Thema: Für Neuzeichnen von WinControls gibt es z.B. Repaint und Update.
Das leider häufig empfohlene Application.ProcessMessages hat seinen Sinn, aber woanders.

Gruß,
blauweiss
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 11:04
Einer von uns beiden hat die Anforderung falsch verstanden, kann gut sein daß ich das bin.
so ähnlich hatte ich das verstanden
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:INteger;
begin
  for I := 20 downto 0 do
      begin
      Stringgrid1.Cells[1,i] := 'AAAA' ;
      Sleep(500);
      Application.ProcessMessages;
      end;
end;
und da wird es ohne Application.ProcessMessages duster...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#7

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 11:59
Einer von uns beiden hat die Anforderung falsch verstanden, kann gut sein daß ich das bin.
so ähnlich hatte ich das verstanden
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:INteger;
begin
  for I := 20 downto 0 do
      begin
      Stringgrid1.Cells[1,i] := 'AAAA' ;
      Sleep(500);
      Application.ProcessMessages;
      end;
end;
und da wird es ohne Application.ProcessMessages duster...

Hallo Bummi,

Du hast offensichtlich nicht nur die Anforderung falsch verstanden, sondern auch meine Antwort.

Pausiert werden kann mit z.B. Sleep(500).
Neugezeichnet werden kann mit z.B. a) Repaint, b) Update oder c) Application.ProcessMessages. Die Variante c) hat Nebeneffekte, auf die der Programmierer vorbereitet sein muß, sonst kann es ganz gewaltig knatschen. Ich kann Dir gerne Beispiele geben.

Application.ProcessMessages wird leider hier gerne Foristen empfohlen, die offensichtlich unerfahren sind. Das halte ich für fahrlässig, wenn man selber mehr darüber weiß.

Zurück zur Anforderung.
Z.B. hiermit wird das geänderte StringGrid neugezeichnet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i:INteger;
begin
  for I := 20 downto 0 do
      begin
      Stringgrid1.Cells[1,i] := 'AAAA' ;
      Sleep(500);
      Stringgrid1.Repaint; // oder Stringgrid1.Update
      end;
end;
Gruß
blauweiss
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 12:24
Dann geht der Punkt im Sinne des TE an Dich.
Da ich blockierende Anwendungen nicht akzeptabel finde werde ich auch weiterhin mit Application.ProcessMessages arbeiten (Anforderungen wie in diesem Beispiel würde ich ohnehin wenn Umfangreicher in einem Thread, wenn so banal in einem Timer abarbeiten)
Wenn man sich im klaren ist was asynchrone Abarbeitung für Seiteneffekt ziehen kann ist es nicht schwierig die von Dir genannten Probleme zu vermeiden.
Wenn ich die 2. 15 Jahre mit Delphi hinter mir habe darf ich mich hoffentlich auch zu den nicht mehr unerfahrenen Programmieren zählen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#9

AW: Pause in einer Schleife

  Alt 25. Nov 2010, 13:24
Hallo Bummi,

halt, Mißverständnis... das mit dem "unerfahren" hatte ich auf den TE bezogen, nicht auf Dich !
Wenn ich Deine Posts hier lese, ziehe ich durch die Bank den Hut vor Dir und Deinem Wissen.
Sorry, wenn das so rüberkam. War so nicht gemeint von mir !

Es ist wohl wie oft, Lob gibt's eher selten und Kritik schnell... vermutlich ahnt dieser TE und andere gar nicht, was im auf-den-ersten-Blick-ja-funktionierenden Code für Fallstricke lauern. Und er wird vielleicht auch nie drüber stolpern.

Außerdem noch ein Sorry von mir: an Dich, weil -wie ich glaube- mein Ton in meinem letzten Beitrag etwas harsch war... danke für Deine trotzdem offene und freundliche Antwort, Respekt.
Punkt also an Dich !

Gruß,
blauweiss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz