Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - problem mit dem wiederaufrufen eines timers
haasler88 - Mo 31.03.08 01:01
Titel: problem mit dem wiederaufrufen eines timers
Hallo DF!
Ich habe 10 Panels und alle sollen nacheinander die Farbe rot erhalten. Ich möchte dies mit einem Timer realisieren. Der Timer funktioniert, allerdings weiß ich nicht wie ich die Panels nacheinander einfärben kann. Wisst ihr, soll im Grunde genommen wie ne Ampelschaltung sein, nur, dass die Felder, wenn sie die Farbe einmal erhalten haben auch die Farbe behalten sollen.
Könnt ihr mir bitte helfen? Ich bin voll schlecht im Programmieren.
Hier sind schon mal meine Ansätze:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TForm1.FormCreate(Sender: TObject); begin timer1.Enabled:=false; end;
procedure TForm1.BitBtn1Click(Sender: TObject); begin intervall:=2000; timer1.Interval:=intervall; timer1.Enabled :=true; end;
procedure TForm1.Timer1Timer(Sender: TObject); var MyPanels : array[0..9] of TPanel; i : Integer; begin MyPanels[0]:=Panel1; MyPanels[1]:=Panel2; MyPanels[2]:=Panel3; MyPanels[3]:=Panel4; MyPanels[4]:=Panel5; MyPanels[5]:=Panel6; MyPanels[6]:=Panel7; MyPanels[7]:=Panel8; MyPanels[8]:=Panel9; MyPanels[9]:=Panel10;
MyPanels[0].Color:=clred;
end; |
Moderiert von
Narses: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Programmierwerkzeuge verschoben am Mo 31.03.2008 um 01:04
elundril - Mo 31.03.08 01:28
beschreib mal bitte was dein programm ausführt bzw was es nicht ausführt. oder anders gesagt: was passiert wenn du bei dem derzeitigen code auf den button drückst??
lg elundril
Narses - Mo 31.03.08 01:31
Titel: Re: problem mit dem wiederaufrufen eines timers
Moin!
haasler88 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.FormCreate(Sender: TObject); begin timer1.Enabled:=false; end; | |
Stell mal im ObjectInspector die Eigenschaft .Enabled des Timers auf FALSE, dann kannst du dir das hier sparen. :idea:
haasler88 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.BitBtn1Click(Sender: TObject); begin timer1.Enabled :=true; end; | |
Du kannst auch den Wert für das Intervall direkt im OI für den Timer vorgeben, dann brauchst du nur noch "einschalten". :idea:
haasler88 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Timer1Timer(Sender: TObject); var MyPanels : array[0..9] of TPanel; i : Integer; begin MyPanels[0]:=Panel1; MyPanels[1]:=Panel2; MyPanels[2]:=Panel3; MyPanels[3]:=Panel4; MyPanels[4]:=Panel5; MyPanels[5]:=Panel6; MyPanels[6]:=Panel7; MyPanels[7]:=Panel8; MyPanels[8]:=Panel9; MyPanels[9]:=Panel10;
MyPanels[0].Color:=clred;
end; | |
Das hier ist allerdings ist eher unsinnig. Statt das Array mit den Panel-Referenzen in der Timer-Methode zu füllen, solltest du das lieber im FormCreate tun und das Array (klassen-)global deklarieren. :idea:
Aber der entscheidende Punkt: du brauchst eine Zustandsvariable, in der du den aktuellen "Fortschritt" deiner Panelfärberei von einem Timeraufruf zum nächsten zwischenspeicherst. :idea: ;)
cu
Narses
haasler88 - Mo 31.03.08 01:34
elundril hat folgendes geschrieben: |
beschreib mal bitte was dein programm ausführt bzw was es nicht ausführt. oder anders gesagt: was passiert wenn du bei dem derzeitigen code auf den button drückst??
lg elundril |
mmh... wie schon gesagt, es soll die Panels nacheinander füllen.
Es füllt das erste Panel, mehr nicht. Ich glaube eigentlich ist es ein For To Schleifen Problem. Ich weiß einfach nicht wie ich das machen soll...
Narses - Mo 31.03.08 01:37
Moin!
haasler88 hat folgendes geschrieben: |
Es füllt das erste Panel, mehr nicht. Ich glaube eigentlich ist es ein For To Schleifen Problem. |
Nein, ist es nicht. ;)
haasler88 hat folgendes geschrieben: |
Ich weiß einfach nicht wie ich das machen soll... |
Setze doch schonmal die Änderungsvorschläge aus meinem Beitrag um. Wenn du dann noch nicht weiter kommst, stell mal die komplette .pas-Datei deines Projekts hier in den Anhang.
cu
Narses
oldmax - Di 01.04.08 13:06
Hi
Nun gut, machen wir es kurz..
Auf deinem Formular hast du 10 Panels mit den Namen Panel1 bis Panel10.
Ok, nun zum Timer. Der wird mit dem Objektinspektor parametriert, also, Intervall = irgendwas (z.B.1000ms) und Enabled=false sowie die Ereignisprocedure OnTimer mit Doppelclick..
Im Bereich der globalen, also überall im Programm verfügbaren Variablen deklarierst du die Variable
Delphi-Quelltext
1: 2:
| var ...... Schritt : Integer; |
die du im OnCreate der Form sowie im OnButtonclick auf 1 setzt.
so:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.FormCreate(Sender: TObject); begin Schritt:=1; end; |
Mit deinem Button setzt du
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.BitBtn1Click(Sender: TObject); begin Schritt:=1; timer1.Enabled :=true; end; |
nun noch die OnTimer-Procedure
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Timer1Timer(Sender: TObject); Begin TPanel(FindComponent('Panel'+IntToStr(Schritt))).Color:=ClRed; Schritt:=Schritt+1; if Schritt > 10 then Timer.Enabled:=False; end; |
Die Function Findcomponent kennst du vielleicht nicht, aber die Delphi-Hilfe wird's dir erklären. Du brauchst also weder eine Schleife noch sonst was, sondern nur diese wenigen simplen Anweisungen..
Gruß oldmax
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!