Autor Beitrag
chickenfigt1989
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.03.11 11:29 
Hallo
Ich habe folgenden Code beim Button klick:
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:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ComboBox1.ItemIndex=0 then
      begin
Showmessage('Bitte wähle eine Pflanze aus!');
end;
if  ComboBox1.ItemIndex=1 then
begin
Timer1.enabled:=true;
Label4.visible:=true;
Label5.visible:=true;
Label3.visible:=true;
Button1.Visible:=false;
ct:=10;
label4.caption:=inttostr(ct);
end;
if ComboBox1.ItemIndex=2 then
      begin
Timer2.enabled:=true;
Label4.visible:=true;
Label3.visible:=true;
Button1.Visible:=false;
ct:=20;
label4.caption:=inttostr(ct);
end;
if ComboBox1.ItemIndex=3 then
      begin
Timer3.enabled:=true;
Label4.visible:=true;
Label3.visible:=true;
Button1.Visible:=false;
ct:=30;
label4.caption:=inttostr(ct);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ct:=ct-1;
label4.caption:=inttostr(ct);
if ct=0 then timer1.enabled:=false;
if ct=0 then Label4.caption:='Fertig';
if ct=0 then Button2.Visible:=true;
end;


Folgenden Code im Timer1:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ct:=ct-1;
label4.caption:=inttostr(ct);
if ct=0 then timer1.enabled:=false;
if ct=0 then Label4.caption:='Fertig';
if ct=0 then Button2.Visible:=true;
end;


Wenn ich nun in der Combobox einen eintrag auswähle und auf Start klicke,
läuft die Zeit ab und es funktioniert bis auf eine Kleinigkeit.
Bei den ersten beiden Einträgen läuft die Zeit zu Schnell ab und Stoppt nicht bei 0,
sondern geht dann ins Minus nur beim letzten eintrag funzt es wie gewollt
wo liegt da der fehler?
lg
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Mo 07.03.11 12:30 
Weil du evtl unterschiedliche Timer hast?

Was steht denn bei den Anderen Timer-Events drin?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if combobox1.itemindex>0 then
begin
  Label4.visible:=true;
  Label5.visible:=true;
  Label3.visible:=true;
  Button1.Visible:=false;
  ct:=10* combobox1.itemindex; //erst startbedingung setzen,
  timer1.enable:=true;         //danach erst den timer anschalten
end;


Edith sagt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ct>0 then
begin
  ct:=ct-1;
  label4.caption:=inttostr(ct);
end else begin
  timer1.enabled:=false;
  Label4.caption:='Fertig';
  Button2.Visible:=true;
end;
end;


ich würd' den quelltext in diese richtung abändern.
Hart auf 0 zu vergleichen ist okay. Aber da muss der Rest wirklich stimmen. Besser ist da ein Unscharfer vergleich (klingt bisl blöd) auf größer oder kleiner Null. Damit deckst du einen größeren Bereich ab. Spätestens bei Zustandsautomaten wirst sehen was ich meine ;)

grüße


Zuletzt bearbeitet von KleinesPferd am Mo 07.03.11 12:39, insgesamt 1-mal bearbeitet
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.03.11 12:32 
Da steht das gleiche drin wie bei den anderen
lg
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 07.03.11 12:35 
Moin!

Bei mehreren Timern stellt sich die Frage, was das soll. Normalerweise braucht man nur einen Timer, dann hat man auch keine Synchronisationsprobleme. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.03.11 12:37 
Oke aber ich hab für jeden Combobox eintrag eine andere zeit
Reicht es dann wen ich nur einen TImer hab?

lg
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 07.03.11 12:41 
Moin!

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
ich hab für jeden Combobox eintrag eine andere zeit
Reicht es dann wen ich nur einen TImer hab?
Ja, klar. Wenn du mehrere unterschiedliche Zeiten verarbeiten willst, brauchst du halt nur mehrere Variablen für die abgelaufene Zeit. Wenn die letzte dieser Zeitkonten "leer" gelaufen ist, dann stoppst du den Timer. :idea:

cu
Narses

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



BeitragVerfasst: Mo 07.03.11 12:41 
user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Oke aber ich hab für jeden Combobox eintrag eine andere zeit
Reicht es dann wen ich nur einen TImer hab?

lg


Einer reicht. Ändert sich ja nur der Zählwert.
Zusätzlich kannst du durch If Abfragen in der Timerroutine ja nochin andere Richtungen gehen.

Grüße
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.03.11 12:42 
Ich habe ja eh folgenden Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if combobox1.itemindex>0 then
begin
  Label4.visible:=true;
  Label5.visible:=true;
  Label3.visible:=true;
  Button1.Visible:=false;
  ct:=10* combobox1.itemindex; //erst startbedingung setzen,
  timer1.enable:=true;         //danach erst den timer anschalten
end;

Soweit ich das Richtig Verstanden habe ist ct:=10 die Zeit.

Kann man die Zeit auch Formatiert anzeigen?
Bis jetzt zeigt es mir die Zeit nur in Sekunden an

lg
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 07.03.11 12:46 
Moin!

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Soweit ich das Richtig Verstanden habe ist ct:=10 die Zeit.
:gruebel: Wie "soweit ich das richtig verstanden habe"? Ist das nicht dein Code? :nixweiss:

user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
Kann man die Zeit auch Formatiert anzeigen?
Ja klar, die Frage ist: in welchem "Format" denn? ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.03.11 12:47 
Doch klar ist es mein Code ich war momentan nur bisschen Verwirrt.

Ich hau gleich mal die Restlichen Timer raus die ich nicht mehr benötige.
Es sollte in diesen Format sein: 00:00:00

lg
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Mo 07.03.11 12:56 
Mooooooooment ....
Das ist mein Code.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if combobox1.itemindex>0 then
begin
  Label4.visible:=true;
  Label5.visible:=true;
  Label3.visible:=true;
  Button1.Visible:=false;
  ct:=10* combobox1.itemindex; //erst startbedingung setzen,
  timer1.enable:=true;         //danach erst den timer anschalten
end;


deiner hingegen schaut noch etwas anders aus ;)

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:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ComboBox1.ItemIndex=0 then
      begin
Showmessage('Bitte wähle eine Pflanze aus!');
end;
if  ComboBox1.ItemIndex=1 then
begin
Timer1.enabled:=true;
Label4.visible:=true;
Label5.visible:=true;
Label3.visible:=true;
Button1.Visible:=false;
ct:=10;
label4.caption:=inttostr(ct);
end;
if ComboBox1.ItemIndex=2 then
      begin
Timer2.enabled:=true;
Label4.visible:=true;
Label3.visible:=true;
Button1.Visible:=false;
ct:=20;
label4.caption:=inttostr(ct);
end;
if ComboBox1.ItemIndex=3 then
      begin
Timer3.enabled:=true;
Label4.visible:=true;
Label3.visible:=true;
Button1.Visible:=false;
ct:=30;
label4.caption:=inttostr(ct);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ct:=ct-1;
label4.caption:=inttostr(ct);
if ct=0 then timer1.enabled:=false;
if ct=0 then Label4.caption:='Fertig';
if ct=0 then Button2.Visible:=true;
end;


---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Die Zeitausgabe ist relativ simpel. Für einen Lerneffekt empfehle ich diese mal selber zu schreiben und zu durchdenken ;)


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function sekundeninzeit(sekunden:integer):string;
var kette, platzhalter:string;
  sek, min, st: integer;
begin
sek:=sekunden div 3600;
min:=(sekunden mod 3600div 60;
st:= sekunden mod 60;

kette:=inttostr(st); //stunden

if min <10 then platzhalter:='0' else platzhalter:=''//falls minuten <10 ist, wird eine führende '0' eingefügt. sonst ''
kette:=kette+':'+platzhalter+inttostr(min);     //minuten

if sek <10 then platzhalter:='0' else platzhalter:='';//falls sekunden <10 ist, wird eine führende '0' eingefügt. sonst ''
kette:=kette+':'+platzhalter+inttostr(sek);    //sekunden

result:=kette;
end;