Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Timer macht nicht was er machen soll?! (https://www.delphipraxis.net/142937-timer-macht-nicht-er-machen-soll.html)

Hazel 6. Nov 2009 11:17


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:
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.
Also ich drücke einen Button, der Alle Bilder resettet und das so aussehen lassen soll wie es ist.
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?

Luckie 6. Nov 2009 11:33

Re: Timer macht nicht was er machen soll?!
 
Du bist nicht der erste, der eine Ampel programmiert. Such einfach mal nach Delphi-Referenz durchsuchentimer ampel und du solltest genug Lösungen finden.

alleinherrscher 6. Nov 2009 11:35

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...

Forlan 6. Nov 2009 11:37

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.

Neutral General 6. Nov 2009 11:38

Re: Timer macht nicht was er machen soll?!
 
[OT]: Timer.Interval = Cardinal.

Also kannst du das Interval auch bis maximal High(Cardinal) setzen ;)

Zitat:

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
In meinem ersten größeren Programm gab es ein "Image1013" und einen "Timer31" :mrgreen:

Forlan 6. Nov 2009 11:48

Re: Timer macht nicht was er machen soll?!
 
Zitat:

Zitat von Neutral General
In meinem ersten größeren Programm gab es ein "Image1013" und einen "Timer31" :mrgreen:

[OT] :cyclops: Wofür denn bitte 31 Timer? =D[/OT]

DeddyH 6. Nov 2009 12:30

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;

Neutral General 6. Nov 2009 12:44

Re: Timer macht nicht was er machen soll?!
 
Zitat:

Zitat von Forlan
Zitat:

Zitat von Neutral General
In meinem ersten größeren Programm gab es ein "Image1013" und einen "Timer31" :mrgreen:

[OT] :cyclops: Wofür denn bitte 31 Timer? =D[/OT]

Ach.. war mein erster 2D-Shooter.. Da musste ganz viel getimed werden :mrgreen:
Damals hab ich Strings auch nicht in Variablen gespeichert, sondern in unsichtbaren Labels :stupid: :mrgreen:

Hazel 6. Nov 2009 14:02

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

ATSV 6. Nov 2009 14:09

Re: Timer macht nicht was er machen soll?!
 
Ist der Timer auch wirklich eingeschaltet?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.
Seite 1 von 2  1 2      

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