Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   auf der suche nach einem befehl (https://www.delphipraxis.net/8442-auf-der-suche-nach-einem-befehl.html)

juhu 4. Sep 2003 17:06


auf der suche nach einem befehl
 
hi

ich muss für die schule eine fahrstuhlsimulation programmieren. das aussehen ist fertig. auch bewegt sich der fahrstuhl auf und ab. nur habe ich ein problem mit den türen. auf und zu gehen sie. aber: wie bekomme ich das programm dazu, dass es die türen schließt, einen augenblick wartet und dann erst dedn fahrstuhl fahren lässt?

danke im voraus!

Daniel B 4. Sep 2003 17:12

Re: auf der suche nach einem befehl
 
Hallo und herzlich Willkommen im Forum!

Was Du suchst nennt sich Timer, ist eine Komponente, indest Du oben bei den Komponenten, auf den Reiter System, gleich als erstes.

Oder, Du benutzt Sleep, oder Delay, such doch mal in der Code-Library nach Delay, damit kannst Du eine Pause im Programm machen und danach weiter arbeiten.

MSCH 4. Sep 2003 18:31

Re: auf der suche nach einem befehl
 
only Timer, Sleep/Delay gibts imho nicht mehr unter Windows.
grez
msch

neolithos 4. Sep 2003 18:32

Re: auf der suche nach einem befehl
 
Sleep gibt es noch!

Und man kann ja die funktionalität simulieren!

nailor 4. Sep 2003 18:35

Re: auf der suche nach einem befehl
 
sleep gibts noch und delay ist ne selbstprogrammierte funktion (gibts hier) und imho für sowas genau das richtige

Daniel B 4. Sep 2003 18:48

Re: auf der suche nach einem befehl
 
Hi,

Sleep gibt es sehr wohl noch und Delay ist das von Luckie, was auf GetTickCount basiert, also damit gemacht ist. Daher sagte ich ja auch, in der Code-Library nach Delay suchen, nciht nur aus Spass. ;)
http://www.delphipraxis.net/internal...ighlight=delay

MSCH 4. Sep 2003 19:01

Re: auf der suche nach einem befehl
 
achso, tja, schon mal den Code genannter Delay-Funktion ausprobiert? Dort steht: Application.ProcessMessages. Das mag für viele Einsätze vieleicht reichen, aber baut das mal in eine Proc ein, und drückt den Close-Button eurer Anwendung. Die dürfte sich dann nach Ablauf des codes korrekt beenden. Windows basiert größten Teils auf Nachrichten, wenn ich diese Weiterleite, hab ich manchmal nicht viel von "sleep". Ausserdem gibts einen guten Grund warum man das nicht mehr unterstützt wird: Sleep/Delay gabs in DOSe, in einer Multitask-Umgebung ist diese "Syntax" schlicht und ergreifend schlechter Programmierstil.
Wenn schon, sollte eine solche Funktion bitte doch auch die Nachrichtenpipeline für meine Anwendung "stilllegen".

nichtsdesotrotz viel Spass dabei.
grez
msch

P.S. jetzt folgt bestimmt eine Grundsatzdiskusion mit n*10² Beiträgen?

juhu 4. Sep 2003 19:35

Re: auf der suche nach einem befehl
 
soweit so gut .
nur wie lautet denn jetzt der befehl mit dem ich dem fahrstuhl "sagen" kann das er warten soll?

Daniel B 4. Sep 2003 19:39

Re: auf der suche nach einem befehl
 
Hi,

Delphi-Quellcode:
//Fahrstuhl HALT!
Delay(2500);
//Fahrstuhl WEITER!
Der steht jetzt 2,5 Sek. Wie Du Deinen Fahrstuhl fahren und anhalten lässt, können wir hier nicht wissen, manche von uns haben Ihre Glaskugeln in der Werkstatt, wegen Wartung und Tunning. ;)

juhu 4. Sep 2003 19:57

Re: auf der suche nach einem befehl
 
und wo muss man den code dann hinschreiben?

Daniel B 4. Sep 2003 20:03

Re: auf der suche nach einem befehl
 
Da wo Du den Fahrstuhl anhälst und weiter fahren willst!!

Das können wir doch nicht wissen, zeig dochmal was Du bis jetzt hast, jedenfalls zwischen der Zeile wo Du den Fahrstuhl anhälst, und dann der Zeile wo Du den weiterfahren lässt, muss dieses Delay hin, und die ganze Prozedur von Luckie natürlich auch nicht irgendwo rein zwischen Deinen normalen Prozeduren.

juhu 4. Sep 2003 20:11

Re: auf der suche nach einem befehl
 
Code:
unit UFahrstuhl;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel2: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    Panel10: TPanel;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    button3: TButton;
    stuhl: TImage;
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin

stuhl.Top:=448;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
stuhl.Top:=560;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
stuhl.Top:=336;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

stuhl.Top:=224;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  stuhl.Top:=112;
end;

end.
der fahrstuhl springt zwar. das macht aber erstmal nichts.

nailor 4. Sep 2003 20:18

Re: auf der suche nach einem befehl
 
dann pack es immer vor das

Delphi-Quellcode:
stuhl.Top:=XXX;
Dann wartet er damit solange, wie bei delay(YYY) angegeben, und lässt den Fahrstuhl dann springen...

Daniel B 4. Sep 2003 20:22

Re: auf der suche nach einem befehl
 
Hmm, also das macht so überhaupt keinen Sinn, da DU selbst die Bremse schon bist, weil Du immer einen Button drücken musst und das muss schonmal weg, Du musst da 1-2 Timer mit reinbringen, und dann nur noch ein Rauf- und Runter-Button einbauen, nicht 30 Buttons.

Wiedem auch sei, zwischen den Prozeduren der Buttons, schreibst Du die Prozedur von Luckie rein, und da wo der Aufzug warten soll, vor der Zeile schriebst Du das Delay(1000); rein.

juhu 4. Sep 2003 20:25

Re: auf der suche nach einem befehl
 
dann sagt er mir
Code:
Undefinierter bezeichner:'delay'

Matze 5. Sep 2003 07:51

Re: auf der suche nach einem befehl
 
Zitat:

Zitat von Basti
Hi,

es gibt eine procedure Delay, die du aber erst definineren musst:
(erstell einfach eine neue Unit und kopier das hier rein)

Delphi-Quellcode:
unit DelayUnit;

interface

uses Windows, Forms;

procedure Delay(MSecs: Integer);

implementation

procedure Delay(MSecs: Integer);
var
FirstTickCount : LongInt;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages; {allowing access to other controls, etc.} 
//Application.HandleMessage;
until ((GetTickCount-FirstTickCount) >= LongInt(MSecs));
end;

end.
Zitat:

Zitat von Basti
Danach kannst du in deinem Programm den Befehl "Delay" benutzten (natürlich musst du die Unit "DelayUnit" aufrufen.

Während diesem Befehl, der genauso wie Sleep funktioniert, nur das er das Programm nicht anhält, kannst du das Programm nur nicht beenden. Das ist der einzige Nachteil.
Viel Spaß damit.


Dannyboy 5. Sep 2003 13:52

Re: auf der suche nach einem befehl
 
Dann nimm entweder sleep oder schnappe Dir das Delay von unserem Luckie
und tippe die Procedure ein, damit Delphi das kennt.
Dann funzt das auch. :wink:

juhu 5. Sep 2003 20:23

Re: auf der suche nach einem befehl
 
Danke für eure hilfe!
funktioniert jetz wunderbar!!!! :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 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