Autor Beitrag
Cryptonite
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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.

ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Fr 07.09.07 18:45 
Zu diesem Fehler:

Zitat:
Constant expression violates subrange bounds

schätz' ich mal liegt daran:

ausblenden Delphi-Quelltext
1:
2:
3:
for Variable := Integer Expression to Integer Expression do Statement;

type Integer = -2147483648..2147483647;  // At the time of writing


Vom Rest hab' ich kein Wort verstanden...

Gruß

Calculon
--
Cryptonite Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 07.09.07 19:06 
user profile iconChryzler 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 95, Win 98, Win NT, Win XP (used), Win Vista
D3, D4, D6, D7, D2005, BDS2006 Arch. UPD2
BeitragVerfasst: Fr 07.09.07 19:22 
Break; und Exit;
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 07.09.07 20:40 
user profile iconCryptonite 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:

ausblenden 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.


user profile iconCryptonite 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.