Fahrstuhl 3 Etagen
-
- Beiträge: 7
- Registriert: Mi 10. Sep 2014, 16:53
Fahrstuhl 3 Etagen
Hallo,
ich habe ein Problem bei meinem Infoprojekt, ich versuch einen Fahrstuhl mit 3 Buttons auf jeder Etage zu programmieren. Mein Problem ist das er die Variabel nicht annimmt. Hier ein kurzer Ausschnitt aus meinem Quelltext:
procedure TForm1.tRufen2Timer(Sender: TObject);
begin
i:=i+1;
if img.top=600 then
img.Top:=img.top-i;
if img.top=300 then
tRufen2.enabled:=false;
end;
Habt ihr irgendwelche Lösungsansätze für dieses Problem.
Ich bedanke mich im Vorraus für jede Hilfe.
ich habe ein Problem bei meinem Infoprojekt, ich versuch einen Fahrstuhl mit 3 Buttons auf jeder Etage zu programmieren. Mein Problem ist das er die Variabel nicht annimmt. Hier ein kurzer Ausschnitt aus meinem Quelltext:
procedure TForm1.tRufen2Timer(Sender: TObject);
begin
i:=i+1;
if img.top=600 then
img.Top:=img.top-i;
if img.top=300 then
tRufen2.enabled:=false;
end;
Habt ihr irgendwelche Lösungsansätze für dieses Problem.
Ich bedanke mich im Vorraus für jede Hilfe.
- Dateianhänge
-
- Lazarus.bmp (2.3 MiB) 3456 mal betrachtet
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Fahrstuhl 3 Etagen
Bitte führe ein wenig aus was "das er die Variabel nicht annimmt" bedeutet.
Zum Thema Fahrstuhlsimulation mit Free Pascal gibt es hier ein Kapitel.
Zum Thema Fahrstuhlsimulation mit Free Pascal gibt es hier ein Kapitel.
-
- Beiträge: 7
- Registriert: Mi 10. Sep 2014, 16:53
Re: Fahrstuhl 3 Etagen
Ja also damit meinte ich das sobald man i bei img.top einträgt sich der Fahrstuhl garnicht mehr bewegt. Trägt man allerdings die Koordinaten dirt ein klappts.
Re: Fahrstuhl 3 Etagen
Ich rate mal ins Blaue, wenn img.top = 300 ist, dann wird der Timer tRufen2 auf False gestellt und ist somit aus.
Na mal ganz ehrlich, mit der Fragestellung wird Dir hier wahrscheinlich niemand eine wirklich hilfreiche Antwort geben können. Wenn Du Schwierigkeiten hast, das Problem genau zu beschreiben, wäre es wahrscheinlich das Einfachste, Du lädst hier Dein Projekt (kompletter Quellcode als .zip) hoch und beschreibst, was Du machst und was Du erhoffst, was Dein Programm dann machen soll und wo es dann klemmt.
Na mal ganz ehrlich, mit der Fragestellung wird Dir hier wahrscheinlich niemand eine wirklich hilfreiche Antwort geben können. Wenn Du Schwierigkeiten hast, das Problem genau zu beschreiben, wäre es wahrscheinlich das Einfachste, Du lädst hier Dein Projekt (kompletter Quellcode als .zip) hoch und beschreibst, was Du machst und was Du erhoffst, was Dein Programm dann machen soll und wo es dann klemmt.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Fahrstuhl 3 Etagen
Hast du schon mal einen Haltepunkt in die fragliche procedure gesetzt und bist sie Schritt für Schritt mit F8 durchgegangen und hast die Variablenwerte kontrolliert ob sie tun was du dir vorstellst? Machmal wird man dabei sehr überrascht.
-
- Beiträge: 152
- Registriert: Mo 3. Feb 2014, 14:07
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Fahrstuhl 3 Etagen
Kleiner Tipp : Eine globale Variable mit dem Namen i ist gar nicht gut. Gib ihr einen vernünftigen Namen. Wenn eine Variable i heißt, sollte diese nur lokal für z.B. for-Schleifen verwendet werden. Evtl. verbirgt sich da ja auch schon das Problem. Wenn du nämlich eine globale UND eine lokale Variable i haben solltest, ist das Chaos perfekt.
.
-
- Beiträge: 7
- Registriert: Mi 10. Sep 2014, 16:53
Re: Fahrstuhl 3 Etagen
So habe jetzt die Datei als Zip angehängt, werde mich heute Abend noch weiter damit beschäftigen. Werde dann nochmal berichten.
- Dateianhänge
-
Fahrstuhl.zip
- (4.15 MiB) 134-mal heruntergeladen
-
- Beiträge: 6914
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Fahrstuhl 3 Etagen
Was ich nicht verstehe, wieso hast du auf jeder Etage 3 Knöpfe. Bei uns im Haus, hat es dort nur eine Knopf, dafür hat es im Lift selbst für jede Etage einen Knopf.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Fahrstuhl 3 Etagen
Ich habe neulich einen Fahrstuhl mit 4 bis 5 Knöpfen auf jeder Etage gesehen; sinnvoll waren davon vielleicht "Hoch", "Runter" und "Hoch oder Runter"; bei dem Rest war keine Beschriftung dran.Mathias hat geschrieben:Was ich nicht verstehe, wieso hast du auf jeder Etage 3 Knöpfe. Bei uns im Haus, hat es dort nur eine Knopf, dafür hat es im Lift selbst für jede Etage einen Knopf.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 6914
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Fahrstuhl 3 Etagen
Diese beiden Knöpfe machen bei stark beanspruchten Lifts Sinn..sinnvoll waren davon vielleicht "Hoch", "Runter"
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Fahrstuhl 3 Etagen
Ich habe mir eben auch Dein Projekt runtergeladen. Ich habe keine Ahnung wie Du Dir die Struktur Deines Programms vorstellst. Das ist bisher nicht wirklich zu erkennen.
Ich weiss auch nicht, ob Dir das hilft. Eine sichtbare Bewegung bekommst Du z.B. so hin:lazarus047 hat geschrieben:Mein Problem ist das er die Variabel nicht annimmt.
Code: Alles auswählen
procedure TForm1.btRufen2Click(Sender: TObject);
begin
tRufen2.enabled:=true;
end;
procedure TForm1.tRufen2Timer(Sender: TObject);
begin
i:=i+1;
// if img.top=600 then
img.Top:=img.top-i;
if img.top=300 then
tRufen2.enabled:=false;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 7
- Registriert: Mi 10. Sep 2014, 16:53
Re: Fahrstuhl 3 Etagen
So habe jetzt denn Quellcode von Michl ausprobiert, dieser hat mir auch sehr weitergeholfen.Habe lediglich noch das Problem das einzelne Koordinaten vom Timer übersprungen werden. Werde nochmal berichten.
-
- Beiträge: 7
- Registriert: Mi 10. Sep 2014, 16:53
Re: Fahrstuhl 3 Etagen
Habe den Fahrstuhl nun soweit, dass er problemlos in die 2. Etage fährt und dann auch nach unten fährt, allerdings kriege ich es jetzt nicht hin das er auch in der 1. Etage anhält. Das Problem ist, das er irgendwie die Koordinaten zum anhalten überspringt. Gibt es vielleicht irgendeine Formel um die Zahl auszurechnen die ich für i benötige(i:=i+ die Zahl), damit er bei circa img.top=300 anhält. Es geht nur um die beiden Timer tRufen2 und tRufen22.
Ich hänge meine Dateien nochmal an.
Ich hänge meine Dateien nochmal an.
- Dateianhänge
-
Fahrstuhl.zip
- (4.15 MiB) 127-mal heruntergeladen
-
- Beiträge: 6914
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Fahrstuhl 3 Etagen
Ich konnte es nicht lassen und habe in der schnelle einen Lift programmiert. Optisch könnte er noch bessser sein. 
Man könnte es noch eleganter machen, wen man die Button dynamisch erzeugt. Z.B. mit eine Auswahl am Anfang mit anzahl Stockwerken.

Man könnte es noch eleganter machen, wen man die Button dynamisch erzeugt. Z.B. mit eine Auswahl am Anfang mit anzahl Stockwerken.
- Dateianhänge
-
Lift.zip
- (830.21 KiB) 149-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 7
- Registriert: Mi 10. Sep 2014, 16:53
Re: Fahrstuhl 3 Etagen
Habe jetzt nur noch das Problem das wenn ich z.B. if img.top < 600 then tRufen3.enabled:=true; habe, dass dann bei allen Werten kleiner 600 der Timer aktiviert wird. gibt es jetzt noch eine Möglichkeit das man Lazarus sagen kann, dass der Timer zwischen 590 und 600 angeht und nicht bei allen Werten unter 600.