Autor Beitrag
rakert125
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 28.02.16 18:20 
Guten Tag liebe Community,
ich hätte da eine Frage bezüglich meiner "Würfelanimation".
Wie ihr sehen könnt, sollen die 6 Panels nacheinander rot gefärbt werden und entsprechend der zufallsgenerierten Zahl das jeweilige Panel grün gefärbt werden. Dieser Vorgang soll das Würfeln animieren. Das klappt soweit auch ganz gut, jedoch hätte ich es gerne, dass der Timer bei jedem Knopfdruck neustartet. Ich habe es bereits mehrfach versucht per Timer1.enabled:=false und dann wieder auf true setzen, aber das hat nicht funktioniert. Vielleicht könnt ihr mir js weiterhelfen. Vielen Dank!

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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
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;
    Panel6: TPanel;
    Timer1: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
   
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var f: array[1..6of Tpanel;
i,t,we:integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := false;
Timer1.Enabled := true;
     

timer1.Interval:=100;
randomize;
we:=random(6)+1;
end;





procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
f[1]:=panel1;
f[2]:=panel2;
f[3]:=panel3;
f[4]:=panel4;
f[5]:=panel5;
f[6]:=panel6;

for i := 1 to 6 do
f[i].Color:=clwhite;
i:=1;

timer1.enabled:=false;

t:=8;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
dec(t);
case t of
7:panel1.Color:=clred;
6:begin
panel2.Color:=clred;
panel1.Color:=clwhite;
end;
5:begin
panel3.Color:=clred;
panel2.Color:=clwhite;
end;
4begin
panel4.Color:=clred;
panel3.Color:=clwhite;
end;
3:begin
panel5.Color:=clred;
panel4.Color:=clwhite;
end;
2:  begin
panel6.Color:=clred;
panel5.Color:=clwhite;
end;

1begin
panel6.Color:=clwhite;
timer1.Interval:=1000;
end;

0begin
f[we].Color:=clgreen;

end;

end;


end;



end.


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 28.02.16 22:13 
Hallo und :welcome:

Den Timer wieder starten ändert nichts an deiner Variable t oder an der Farbe der Panels. Das ist jedoch genau was du beim Start des Programms in FormCreate machst. Das musst du daher auch für deinen Neustart machen.

Sprich:
Pack die Initialisierung (mindestens das t:=8;, vermutlich auch die Schleife, in der du die Farbe auf weiß setzt) in eine neue Prozedur, z.B. Restart, und rufe diese in FormCreate und dem Buttonklick auf.

Wenn du damit nicht weiter kommst, sag Bescheid. ;-)
Ich weiß ja nicht, ob du schon eigene Prozeduren angelegt hast usw.