Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeitabfrage im timer (https://www.delphipraxis.net/99575-zeitabfrage-im-timer.html)

stexxy 14. Sep 2007 09:42


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.

Nikolas 14. Sep 2007 09:54

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:
onTimer:
if (Wartezeit>0) then
begin
 Wartezeit--;
 return;
end;
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.
(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)

sirius 14. Sep 2007 09:56

Re: Zeitabfrage im timer
 
:gruebel: Niklas, kann man in Delphi jetzt schon C-Syntax verwenden?

Nikolas 14. Sep 2007 09:59

Re: Zeitabfrage im timer
 
Tschuldigung. Ich musste in den letzten Wochen für die Uni C++ und Java lernen...


Delphi-Quellcode:
onTimer:
if Wartezeit>0 then
begin
Wartezeit:= Wartezeit -1;
exit;
end;
//Edit: ich hoffe so ist's jetzt Pascal...

DeddyH 14. Sep 2007 10:16

Re: Zeitabfrage im timer
 
exit ;)

stexxy 14. Sep 2007 11:06

Re: Zeitabfrage im timer
 
danke für die hilfe war nix passendes bei ^^
hab es jetzt anders gelöst.

Delphi-Quellcode:
begin
         
          timer1.enabled:=false;
          image4.left:=30;
          inc(Fdoortimer);
          if Fdoortimer>=100 then
          begin
            a:=2 ;
            fdoortimer:=0;
            exit;
funktioniert einwandfrei.

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