| Autor |
Beitrag |
Cryptonite
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 07.09.07 18:26
Hallo,
ich habe eine Frage bezüglich des Beendens oder Unterbrechens einer Endlosschleife.
Ich habe einige Prozeduren, die ich Nach klicken auf einen Button aneinandergereiht als Endlosschleife ablaufen lasse.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.start; begin sleep(5000); procedure_1; sleep(5000); procedure_2; [...] start; end; |
So läuft alles Problemlos. Ich möchte nun, wenn die Maus bewegt wurde, die Prozedur "start" beenden oder unterbrechen und das Formular1 und 2 wieder anzeigen lassen.
Delphi-Quelltext 1: 2: 3: 4: 5:
| if Mouse.CursorPos.X <> p.X then begin for i:=1 to 99999999999999 do sleep(1000); Form1.Show; Form2.Show; end; |
So in die Richtung könnte es gehen, aber bei Einfügen des Codes zwischen den einzelnen Prozeduren kommt folgenede Fehlermeldung:
"[Error] Unit1.pas(2[Angepasst an 2. Code]): Constant expression violates subrange bounds"
p.X ist definiert, daran sollte es also eig. nicht liegen.
Vilt. ist der Ansatz auch schon völlig falsch...
Erstmal Danke fürs lesen, würde mich über Lösungsansätze oder auch Komplettlösungen freuen!
Gruß Cryptonite
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 07.09.07 18:38
So würd ich das auf keinen Fall machen (geht imho auch gar ned). Entweder du steckst die start-Prozedur in einen eigenen Thread, wenn sich's lohnt, ansonsten prüf doch einfach zwischen denn Sleeps ob die Maus bewegt wurde und geh ansonsten aus der Prozedur raus.
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: Fr 07.09.07 18:45
Zu diesem Fehler:
| Zitat: | | Constant expression violates subrange bounds |
schätz' ich mal liegt daran:
Delphi-Quelltext 1: 2: 3:
| for Variable := Integer Expression to Integer Expression do Statement;
type Integer = -2147483648..2147483647; |
Vom Rest hab' ich kein Wort verstanden...
Gruß
Calculon
--
|
|
Cryptonite 
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 07.09.07 19:06
Chryzler hat folgendes geschrieben: | | [...]ansonsten prüf doch einfach zwischen denn Sleeps ob die Maus bewegt wurde und geh ansonsten aus der Prozedur raus. |
Die Prüfung soll ja zwischen den einzelenen Sleeps laufen. Break; funktioniert nicht, weils wohl auf die If-Schleife bezogen wird und nicht auf Start. Ich bin wirklich noch Anfänger und bräuchte ne nähere Erklärung. 
|
|
#Crasher
      
Beiträge: 23
Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
|
Verfasst: Fr 07.09.07 19:22
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 07.09.07 20:06
Da Du noch Anfänger bist, findest Du hier einen kleinen Rat.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Cryptonite 
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 07.09.07 20:25
@#Crasher, ok, danke, bringt mir nur nix, wenn ich net weiß, wie und wo ich es einzusetzen habe.
@BenBE, Vielen Dank für die Belehrung. Welchen Vorteil bringt es mit denn, das zu wissen?
Gruß Cryptonite
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 07.09.07 20:40
Cryptonite hat folgendes geschrieben: | | @#Crasher, ok, danke, bringt mir nur nix, wenn ich net weiß, wie und wo ich es einzusetzen habe. |
Christians Crashkurs schon gelesen? Dort gibt es u.a. auch eine Einführung in die wichtigsten Konstrukte noch mal etwas detaillierter erklärt.
Aber grob zu deinem Problem:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Procedure Start; begin MouseMoved := False;
Repeat Proc1; MouseMoved := CheckMouseMoved(); If MouseMoved Then Continue;
Proc2; MouseMoved := CheckMouseMoved(); If MouseMoved Then Continue;
Proc3; MouseMoved := CheckMouseMoved(); Until MouseMoved; end; |
Wobei MouseMoved ein Boolean ist und True wird, wenn sich die Mouse-Position geändert hat.
CheckMouseMoved ist eine Funktion, die prüft, ob sich die Mouse-Position geändert hat.
Die Beschreibung der anderen Schlüsselwörter im Quelltext findest Du entweder im Crashkurs oder in der Delphi-Hilfe erklärt.
Cryptonite hat folgendes geschrieben: | @BenBE, Vielen Dank für die Belehrung. Welchen Vorteil bringt es mit denn, das zu wissen?
Gruß Cryptonite |
Später Hohn und Gelächter zu vermeiden, da es einen wesentlichen Unterschied macht, ob man eine Schleife programmiert hat, oder eine Programm-Verzweigung.
Auch sollte man beachten, dass der Sinn von Endlos-Schleifen ist, endlos zu sein; sonst hätten sie eine Abbruchbedingung.
Aber gut, das sind Feinheiten, an die man sich gewöhnen muss; folg da am Besten so eng wie möglich der Beschreibung der Konstrukte 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|