Autor Beitrag
haasler88
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 31.03.08 01:01 
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:
ausblenden volle Höhe 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..9of 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 user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Programmierwerkzeuge verschoben am Mo 31.03.2008 um 01:04
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 31.03.08 01:31 
Moin!

user profile iconhaasler88 hat folgendes geschrieben:
ausblenden 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:

user profile iconhaasler88 hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// intervall:=2000;            | unnötig, zugehörige Variablendeklaration auch
// timer1.Interval:=intervall; | unnötig
 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:

user profile iconhaasler88 hat folgendes geschrieben:
ausblenden 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..9of 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
haasler88 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 31.03.08 01:34 
user profile iconelundril 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 31.03.08 01:37 
Moin!

user profile iconhaasler88 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. ;)

user profile iconhaasler88 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
2:
var   ......
      Schritt   : Integer;// global, damit überall gültig !

die du im OnCreate der Form sowie im OnButtonclick auf 1 setzt.
so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);  
  begin  
    Schritt:=1
  end;

Mit deinem Button setzt du
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.BitBtn1Click(Sender: TObject);  
 begin  
   Schritt:=1
   timer1.Enabled :=true;  // Timer starten
 end;

nun noch die OnTimer-Procedure
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Timer1Timer(Sender: TObject); 
 Begin
   TPanel(FindComponent('Panel'+IntToStr(Schritt))).Color:=ClRed;
   Schritt:=Schritt+1// Inc(Schritt) geht auch
   if Schritt > 10 then Timer.Enabled:=False; //alle Panels müssten jetzt rot sein
 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

_________________
Zier dich nich so, ich krieg dich schon....