Entwickler-Ecke

Sonstiges (Delphi) - Prozedur unterbrechen


DelphiUnfreak - Mo 04.04.05 11:21
Titel: Prozedur unterbrechen
Hallo Leute!
Ich muss im Informatikunterricht in der Schule ein Delphiprojekt machen und habe dabei ein kleines Problem. Ich habe nämlich eine Prozedur und einen Timer. Die Prozedur soll erst weiterlaufen, wenn die Variable 0 ist. Dabei komme ich auf den Timer. Im Timer wird die Variable verringert. Nun soll die Prozedur so lange anhalten, bis der Timer den "0-Wert" für die Variable liefert. Erst dann soll die Prozedur weitermachen.
Ich denke, dass das für euch Delphi-Profis keine Schwierigkeit ist und hoffe mir kann hier schnell jemand helfen. Dafür bedanke ich mich schon einmal im Vorraus!

Moderiert von user profile iconraziel: Titel geändert.


Backslash - Mo 04.04.05 11:25

Ich hab schon länger nicht mehr im Timerbereich gearbeitet aber ich glaub, dass Sleep(x) hier denkbar ungünstig ist.

Bau doch einfach ne boolsche Variable in dein Formular für den Timerstate ein. Wenn das Timerereignis aufgerufen wird, wird diese Variable als erstes ausgewertet. Ist sie False, wird im Timerereignis nichts ausgeführt, ist sie true wird der Code ausgeführt. Man nehme eine If-Anweisung dafür ;-) Du kannst die Variable jederzeit im Timerereignis verändern, wenn ein bestimmter State erfüllt ist.

Gruß

\\ Backslash \\


opfer.der.genauigkeit - Mo 04.04.05 11:30
Titel: Re: Prozedur unterbrechen[Wichtig!]
user profile iconDelphiUnfreak hat folgendes geschrieben:
Hallo Leute!
Ich muss im Informatikunterricht in der Schule ein Delphiprojekt machen und habe dabei ein kleines Problem. Ich habe nämlich eine Prozedur und einen Timer. Die Prozedur soll erst weiterlaufen, wenn die Variable 0 ist. Dabei komme ich auf den Timer. Im Timer wird die Variable verringert. Nun soll die Prozedur so lange anhalten, bis der Timer den "0-Wert" für die Variable liefert. Erst dann soll die Prozedur weitermachen.
Ich denke, dass das für euch Delphi-Profis keine Schwierigkeit ist und hoffe mir kann hier schnell jemand helfen. Dafür bedanke ich mich schon einmal im Vorraus!



Es gibt Timer.Enabled, dann ruft der auf, was im Timer- Durchlauf definiert wurde.
Ansonsten hilft dir noch ein Loop.


Backslash - Mo 04.04.05 11:34

Perfekt, die Lösung ist sogar noch besser anstelle der Form-Globalen Variable.


DelphiUnfreak - Mo 04.04.05 11:37


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:
procedure TForm2.Button1Click(Sender: TObject);
var b,zu,erg,rest:integer;
begin
randomize;
zu:=random(200);
pfeil.start(zu);
timer1.Enabled:=true;
{
 Hier ist der Knackpunkt. Jetzt muss ich irgendwie sagen,
dass er erst den Timer beenden muss und dann weitermacht
mit der Rechnung, die ich jetzt mal gekürzt habe. Ich weiß
leider nicht wie ich eure Tips einbauen soll, aber danke
schon einmal dafür.
}

erg:=pfeil.x div 50;
rest:=pfeil.x mod 50;
if (erg=0or ((erg=1and (rest=0)) then b:=1;
...
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
pfeil.va:=pfeil.va-0.5;
anzeigen(pfeil);
end;

procedure anzeigen(pfeil:tpfeil);
begin
pfeil.zeichnen(form2.canvas, form2.color);
if pfeil.va<=0 then pfeil.va:=0;
pfeil.x:=pfeil.x+round(pfeil.va);
if pfeil.x>form2.ClientWidth then pfeil.x:=0;
pfeil.zeichnen(form2.Canvas, pfeil.farbe);
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


Delete - Mo 04.04.05 11:45

schonmal was von delphi-tags gehört, DelphiUnfreak? :wink:


opfer.der.genauigkeit - Mo 04.04.05 11:48

Also,

nach dem Timer nen loop, der auf z.B. Timer.Enabled = false prüft.

Bei wahr, durchlauf deines restlichen codes, oder der Timer prüft auf true.

Is ja egal.

z.B.


Delphi-Quelltext
1:
2:
3:
4:
5:
Timer1.enabled := true;

while Timer1.Enabled do begin
  Application.ProcessMessages;
end;


Dazu sollte aber der Timer, irgendwann auch auf enabled = false gesetzt werden.


DelphiUnfreak - Mi 06.04.05 15:02

Was sind denn Delphi-Tags? Was ist ein Loop?
Was ist das:Application.ProcessMessages;?

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


raziel - Mi 06.04.05 15:54

user profile iconDelphiUnfreak hat folgendes geschrieben:
Was sind denn Delphi-Tags?


Siehe auch unsere hervorragende Delphi-Forum.de Hilfe [http://www.delphi-forum.de/sites.php?id=40&sub=,19,27,32] ;)


zemy - Mi 06.04.05 16:50

user profile iconDelphiUnfreak hat folgendes geschrieben:
Was sind denn Delphi-Tags? Was ist ein Loop?
Was ist das:Application.ProcessMessages;?

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


Delphi-Tags: siehe oben
Loop: ne Schleife (For, While, Repeat-until, habe ich eine vergessen?)
Application.ProcessMessages;: damit sagts du Delphi: Reagier auf Eingaben. Nützlich, wenn man in Schleifen zum Beispiel den Fortschrit anzeigen lassen will.


DelphiUnfreak - Mi 06.04.05 22:27

Danke, habs gepackt!