Autor Beitrag
DelphiUnfreak
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 04.04.05 11:21 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202

WIN XP
Delphi 5 Ent, Delphi 2005 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



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

_________________
Stellen Sie sich bitte Zirkusmusik vor.
Backslash
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202

WIN XP
Delphi 5 Ent, Delphi 2005 Prof
BeitragVerfasst: Mo 04.04.05 11:34 
Perfekt, die Lösung ist sogar noch besser anstelle der Form-Globalen Variable.
DelphiUnfreak Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mo 04.04.05 11:37 
ausblenden volle Höhe 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.
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 04.04.05 11:45 
schonmal was von delphi-tags gehört, DelphiUnfreak? :wink:
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



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

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

_________________
Stellen Sie sich bitte Zirkusmusik vor.
DelphiUnfreak Threadstarter
Hält's aus hier
Beiträge: 10



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

Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
BeitragVerfasst: 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 ;)

_________________
JSXGraph
zemy
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 207

Win XP Prof.
D7
BeitragVerfasst: 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.

_________________
LifeIsToShortToThinkAboutTheShortness
DelphiUnfreak Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 06.04.05 22:27 
Danke, habs gepackt!