![]() |
Timer macht nicht was er machen soll?!
Hallo,
bin neu in Delphi und habe von meinem "Lehrer" eine Aufgabe bekommen eine Kreuzung zu programmieren mit Ampeln die per Timer sich aktivieren, aber leider macht der Timer das nicht. Hier mal mein Code:
Delphi-Quellcode:
Also ich drücke einen Button, der Alle Bilder resettet und das so aussehen lassen soll wie es ist.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Button1: TButton; Panel6: TPanel; Panel7: TPanel; Panel8: TPanel; Panel9: TPanel; Panel10: TPanel; Panel11: TPanel; Panel12: TPanel; Panel13: TPanel; Panel14: TPanel; Panel15: TPanel; Panel16: TPanel; Panel17: TPanel; Panel18: TPanel; Panel19: TPanel; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button2: TButton; Timer1: TTimer; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; Image10: TImage; Image11: TImage; Image12: TImage; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(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.Button2Click(Sender: TObject); begin Image1.Visible := true; Image2.Visible := true; Image3.Visible := true; Image4.Visible := true; Image5.Visible := false; Image6.Visible := false; Image7.Visible := false; Image8.Visible := false; Image9.Visible := false; Image10.Visible := false; Image11.Visible := false; Image12.Visible := false; end; procedure TForm1.Button3Click(Sender: TObject); begin //Platzhalter end; procedure TForm1.Timer1Timer(Sender: TObject); begin If Image1.Visible = True and Image2.Visible = True and Image3.Visible = true and Image4.Visible = true then begin Image1.Visible := false; Image2.Visible := false; Image3.Visible := false; Image4.Visible := false; Image5.Visible := True; Image6.Visible := false; Image7.Visible := false; Image8.Visible := True; Image9.Visible := false; Image10.Visible := false; Image11.Visible := false; Image12.Visible := false; end; end; end. Das funktioniert ja auch. Dann drück ich den nächsten Button der den Timer aktivieren soll. Hab auch beim Timer im Obejekt insperktor den OneTimer auf Button 3 gestellt, aber es passiert einfach nichts... Interval auf 3000 gestellt. Was mache ich falsch? |
Re: Timer macht nicht was er machen soll?!
Du bist nicht der erste, der eine Ampel programmiert. Such einfach mal nach
![]() |
Re: Timer macht nicht was er machen soll?!
Abgesehen davon, was Michael geschrieben hat: Was soll denn passieren? Dein Timer überprüft alle 3 Sekunden (ich dachte das höchste Timerintervall wären 1000 ms? [edit] Dank Neutral General wissen wir es ja jetzt besser :thumb: Aber ich meine, dunkel in erinnerung zu haben, dass zumindest der Objektinspektor bei mir in irgendeiner Delphi Version mal meinte, dass der höchste Wert 1000 wäre, kann das sein?[/edit]) ob die bilder 1,2,3,4 sichtbar sind und falls ja, werden sie unsichtbar. D.h. der Timer wird die Bilder anfangs auf unsichtbar stellen und dann, im nächsten durchlauf nix mehr zu tun haben...
|
Re: Timer macht nicht was er machen soll?!
Auch wenn du noch Anfänger bist solltest du ggf. an der Übersicht deiner Komponenten arbeiten. Mich würds nämlich mal interessieren ob du in 2 Wochen noch weißt was Panel19 für eine Funktion hat :mrgreen:
Am Besten wäre es in deinem Fall auch eine eigene Klasse (TAmpel z.B.) zu erstellen, aber vermutlich seid ihr noch nicht bei der OOP angekommen. |
Re: Timer macht nicht was er machen soll?!
[OT]: Timer.Interval = Cardinal.
Also kannst du das Interval auch bis maximal High(Cardinal) setzen ;) Zitat:
|
Re: Timer macht nicht was er machen soll?!
Zitat:
|
Re: Timer macht nicht was er machen soll?!
Um nochmal auf die Frage zurückzukommen: der Timer macht ja nur dann etwas, wenn die Images 1 bis 4 sichtbar sind. Wenn nicht, dann passiert eben nichts. Übrigens solltest Du Dir gleich am Anfang eine nachvollziehbare Einrückung an- und Vergleiche auf true abgewöhnen. Dann könnte Dein Timer-Code z.B. so aussehen:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin If Image1.Visible and Image2.Visible and Image3.Visible and Image4.Visible then begin Image1.Visible := false; Image2.Visible := false; Image3.Visible := false; Image4.Visible := false; Image5.Visible := True; Image6.Visible := false; Image7.Visible := false; Image8.Visible := True; Image9.Visible := false; Image10.Visible := false; Image11.Visible := false; Image12.Visible := false; end; end; |
Re: Timer macht nicht was er machen soll?!
Zitat:
Damals hab ich Strings auch nicht in Variablen gespeichert, sondern in unsichtbaren Labels :stupid: :mrgreen: |
Re: Timer macht nicht was er machen soll?!
Tut mir Leid, aber verstehe immernoch nicht so richtig, zwischen den ganzem Ot Gespamme. .P
Die ersten 4 Image sind ja da, also die sieht man ja, da cih ja vorher die Button gedrückt habe der nur die 4 Bilder sichtbar macht, aber der Timer macht dann nicht die nächsten 2 Bilder sichtbar und die anderen alle weg. Sry, das ich so hol bin, was muss ich genau anders machen? EDIT: Die Panels machen garnicht sind nur Graß bzw Mittelstreifen. :D |
Re: Timer macht nicht was er machen soll?!
Ist der Timer auch wirklich eingeschaltet?
|
Re: Timer macht nicht was er machen soll?!
Ja der ist an. Mit Sicherheit.
|
Re: Timer macht nicht was er machen soll?!
Hast Du die Vergleiche auf true mal rausgenommen wie von mir gezeigt?
[edit] Übrigens sehe ich nirgends in Deinem Code, dass der Timer aktiviert wird. Welcher Button soll das denn tun? [/edit] |
Re: Timer macht nicht was er machen soll?!
Ja habe ich gemacht ändert nicht viel.
Hab bei dem Timer eingestellt das der per Button aktiviert werden soll. Events > One Timer > Button 3 Click beim Object Inspektor Im Code wo steht "//Platzhalter" weil sonst geht der Eintrag weg so nicht. :) |
Re: Timer macht nicht was er machen soll?!
Das hast Du völlig falsch verstanden. So hast Du Delphi jetzt gesagt, dass der Timer nicht die Methode Timer1Timer, sondern die Methode Button3Click ausführen soll. Weise also im Objektinspektor wieder die Timer-Methode zu und aktiviere den Timer im Button3Click.
|
Re: Timer macht nicht was er machen soll?!
Wie kann ich den Timer im Button3Click aktivieren?
|
Re: Timer macht nicht was er machen soll?!
Hallo,
Delphi-Quellcode:
mit ein wenig selber nachdenken und ab und an mal in die Hilfe schauen,
procedure TForm1.Button3Click(Sender: TObject);
begin //Platzhalter ersetzen durch Timer1.enabled := true; end; wärest Du auch selber darauf gekommen. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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