![]() |
Zeitabfrage im timer
HI
ich habe ein fahrstuhl programm hergestellt der von etage zu etage fährt und dann die tür öffnet und stehen bleibt. ich möchte aber nun das die tür nachdem er 3-5 sec steht wieder zu geht . habt ihr ein paar ideen wie sich das realisieren lässt?
Delphi-Quellcode:
unit Fahrstuhl;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg, RackCtls, MPlayer; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Image1: TImage; Timer1: TTimer; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Button12: TButton; Button13: TButton; Button14: TButton; Image2: TImage; Image3: TImage; Label1: TLabel; Image4: TImage; Timer12: TTimer; Image5: TImage; btn_open: TButton; btn_close: TButton; Button16: TButton; Button7: TButton; procedure Timer1Timer(Sender: TObject); procedure Button14Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Timer12Timer(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); procedure Button12Click(Sender: TObject); procedure Button13Click(Sender: TObject); procedure Button16Click(Sender: TObject); procedure btn_closeClick(Sender: TObject); procedure btn_openClick(Sender: TObject); procedure Button7Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; z: integer; a: integer; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); // Timer für auf bzw ab Bewegung var x : integer; begin x:=-2; if image1.top>z then //muss runterfahren Image1.top:=Image1.top+x; //bild fahrstuhl if image1.top<z then //muss rauffahren Image1.top:=Image1.top-x; if image4.top>z then //muss runterfahren Image4.top:=Image1.top+x; //bild Tür if image4.top<z then //muss rauffahren Image4.top:=Image1.top-x; if image5.top>z then //muss runterfahren Image5.top:=Image1.top+x; //bild gehäuse if image5.top<z then //muss rauffahren Image5.top:=Image1.top-x; timer12.enabled:=true; case Image1.Top of 120: Label1.Caption := '4'; 0: Label1.Caption := '5'; //anzeige fahrstuhl der etagen 240: Label1.Caption := '3'; 360: Label1.Caption := '2'; 480: Label1.Caption := '1'; 600: Label1.Caption := '0'; end; end; procedure TForm1.Button14Click(Sender: TObject); // Programm verlassen begin close; end; procedure TForm1.Timer12Timer(Sender: TObject); // Timer zum Türen öffnen bzw schliessen var y : integer; begin y:=2; { case not Image1.Top of 120: timer12.enabled:=false; 0: timer12.enabled:=false; 240: timer12.enabled:=false; 360: timer12.enabled:=false; 480: timer12.enabled:=false; 600: timer12.enabled:=false; end; } if not ( (a=2 ) or (a=1 ) ) then // tür auf oder zu knöpf gedrückt? begin if z <> Image4.top then //ziel nicht erreicht? begin if image4.left>=100 then //tür geschlossen? begin timer1.enabled:=true; timer12.enabled:=false; image4.left:=100; exit; end; Image4.left:=Image4.left+y; //tür schliessen end else if (z = Image4.top) then //ziel erreicht begin if image4.left<=30 then begin timer12.enabled:=false; timer1.enabled:=false; image4.left:=30; exit; end; Image4.left:=Image4.left-y; //tür öffnet end; end else begin if a=2 then // tür zu knöpf gedrückt? begin if image4.left>=100 then // tür auf geschlossen position? begin timer12.enabled:=false; image4.left:=100; a:=0; // zurückgesetzt der globalen variablen a exit; end; Image4.left:=Image4.left+y; // tür wird geöffnet end else if a=1 then // tür auf knopf gedrückt? begin if image4.left<=30 then // tür auf offen position? begin timer12.enabled:=false; image4.left:=30; a:=0; exit; end; Image4.left:=Image4.left-y; //tür wird geschlossen end; end; end; procedure TForm1.Button8Click(Sender: TObject); // Fahrstuhlknopf innen EG begin timer12.enabled:=true; z:=600; end; procedure TForm1.Button9Click(Sender: TObject); // 1.OG begin timer12.enabled:=true; z:=480; end; procedure TForm1.Button10Click(Sender: TObject); // 2.OG begin timer12.enabled:=true; z:=360; end; procedure TForm1.Button11Click(Sender: TObject); // 3.OG begin z:=240; timer12.enabled:=true; timer1.enabled:=false; end; procedure TForm1.Button12Click(Sender: TObject); // 4.OG begin timer12.enabled:=true; z:=120; end; procedure TForm1.Button13Click(Sender: TObject); // 5.OG begin timer12.enabled:=true; z:=0; end; procedure TForm1.Button16Click(Sender: TObject); // notruf var s: string; begin windows.Beep(900,300); // piepton aus dem speaker 900 macht die höhe und 300 die länge des tones S:= '"Ein Mitarbeiter ist unterwegs! bitte bewahren sie ruhe!"'; showmessage (s) ; end; procedure TForm1.btn_closeClick(Sender: TObject); // Tür zu begin a:=2; case Image1.Top of 120: timer12.enabled:=true; 0: timer12.enabled:=true; // wenn fahrstuhl nicht auf einer der etagen 240: timer12.enabled:=true; // dann button deaktiviert 360: timer12.enabled:=true; 480: timer12.enabled:=true; 600: timer12.enabled:=true; end; end; procedure TForm1.btn_openClick(Sender: TObject); // Tür auf begin a:=1; case Image1.Top of 120: timer12.enabled:=true; 0: timer12.enabled:=true; 240: timer12.enabled:=true; // wenn fahrstuhl nicht auf einer der etagen 360: timer12.enabled:=true; // dann button deaktiviert 480: timer12.enabled:=true; 600: timer12.enabled:=true; end; end; procedure TForm1.Button7Click(Sender: TObject); // notaus schaltet timer ab begin windows.Beep(900,300); // piepton aus dem speaker 900 macht die höhe und 300 die länge des tones timer1.enabled:=false; timer12.enabled:=false; end; end. |
Re: Zeitabfrage im timer
Du musst hier nicht jede Deklaration und sonstige Funktion posten. Die wichtigen Zeilen reichen wirklich.
Wenn du den Aufzug eine Zeitlang aufhalten willst, kannst du einfach eine Integervariable benutzen.
Delphi-Quellcode:
Das oben in den Timer und sobald du unten die Wartezeit auf einen positiven Wert setzt, wird in den nächsten TimerAufrufen nur die Wartezeit runtergezählt.
onTimer:
if (Wartezeit>0) then begin Wartezeit--; return; end; (Ich versteh dein Problem nicht ganz und habe auch keine Lust mit den ganzen Code reinzuziehen, aber mit diesem Ansatz wirst du sicher was passendes basteln können) |
Re: Zeitabfrage im timer
:gruebel: Niklas, kann man in Delphi jetzt schon C-Syntax verwenden?
|
Re: Zeitabfrage im timer
Tschuldigung. Ich musste in den letzten Wochen für die Uni C++ und Java lernen...
Delphi-Quellcode:
//Edit: ich hoffe so ist's jetzt Pascal...
onTimer:
if Wartezeit>0 then begin Wartezeit:= Wartezeit -1; exit; end; |
Re: Zeitabfrage im timer
exit ;)
|
Re: Zeitabfrage im timer
danke für die hilfe war nix passendes bei ^^
hab es jetzt anders gelöst.
Delphi-Quellcode:
funktioniert einwandfrei.
begin
timer1.enabled:=false; image4.left:=30; inc(Fdoortimer); if Fdoortimer>=100 then begin a:=2 ; fdoortimer:=0; exit; trotzdem danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz