| Autor |
Beitrag |
Tony-S
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Di 28.07.09 18:58
Hallo Community,
Ich habe eine kleine Stpuhr programmiert mit hilfe einer Zeitvariable (bei mir Temp), einem Timer, einem Panel und ein paar Buttons.
Start und Stop funktioniert in so weit schonmal wie es soll, nur an an einem button der die Stopuhr weiterlaufen lässt scheitere ich..
Hier erstmal das was ich bis jetzt habe:
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:
| var Form1: TForm1; temp:ttime;
procedure TForm1.Timer2Timer(Sender: TObject); begin Panel1.caption := formatdatetime('hh:mm:ss:zzz',temp - time); end;
procedure TForm1.Btn_StartClick(Sender: TObject); begin temp := time; Timer2.Enabled:=True; end;
procedure TForm1.Btn_StopClick(Sender: TObject); begin Timer2.Enabled:=False; end;
procedure TForm1.Btn_go_onClick(Sender: TObject); begin Timer2.Enabled:=True; Temp:=StrTotime(Panel1.Caption); end; |
Wenn ich die Zeile mit Temp weglasse, läuft die Zeit im Hintergrund weiter, aber das soll ja so nicht sein ^^.
Wäre nett wenn ihr mir n Tipp geben oder mir helfen könntet.
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Di 28.07.09 19:22
Hm, mit deinem Ansatz kriegst du das nicht hin. Du speicherst ja nur den Anfangspunkt und ziehst ihn vom Endpunkt ab. Abhilfe könnte sowas verschaffen:
- Beim Pausieren eine weitere Variable auf Now stellen
- Beim Fortfahren die Zeit der Pause berechnen und diese Zeit zur Variable temp dazuzählen.
Wenn du um 12:00 Uhr angefangen hast mit Zählen, um 12:07 Uhr bis 12:11 Uhr Pause machst, tust du so, als hättest du um 12:04 angefangen. Denn: 12:11 - 12:04 = 7 Minuten. Und das ist ja genau das, was der Timer beim Fortfahren anzeigen soll.
PS: Verwende statt einer globalen Variable ( temp) lieber ein privates Feld:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| type TForm1 = class(TForm) private FTemp: TTime; end; |
Das ist im Sinne von moderner objektorientierter Programmierung.
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Mi 29.07.09 00:28
Danke hab mir das mal zu Herzen genommen
und mich ne weile lang damit beschäftigt  ...
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:
| var Form1: TForm1; zeit,temp,last:ttime;
procedure TForm1.XButton1click(Sender: TObject); begin if not(timer.enabled) then begin temp:= time;zeit := last end else last := zeit; timer.enabled := not(timer.enabled);
XButton1.Visible:=False;
XBtn_Pause.Visible:=True; end;
und eben noch pause und weiter
procedure TForm1.XBtn_go_onclick(Sender: TObject); begin XButton1.click; XBtn_Pause.Visible:=True; XBtn_go_on.Visible:=False; end;
procedure TForm1.XBtn_Pauseclick(Sender: TObject); begin XButton1.click; XBtn_Pause.Visible:=False; XBtn_go_on.Visible:=True; end; |
Danke das du mir helfen konntest, aber das mit dem Private hab ich nicht ganz verstanden, wozu braucht man das, oder besser was macht das?
--- Moderiert von Narses: Beiträge zusammengefasst---
achja den timer vergessen xD
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.timerTimer(Sender: TObject); begin zeit := last + temp - time; XPanel1.Caption:= formatdatetime('hh:mm:ss:zzz',zeit); end; |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 29.07.09 11:44
Tony-S hat folgendes geschrieben : | | Danke das du mir helfen konntest, aber das mit dem Private hab ich nicht ganz verstanden, wozu braucht man das, oder besser was macht das? |
In diesem Fall ist es eigentlich egal, aber du solltest dir GLOBALE VARIABLEN abgewöhnen. Wenn du später mal mit mehrere Instanzen einer Klasse arbeitest, also ein Fenster öfters anzeigst, bekommst du sonst Probleme.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Mi 29.07.09 18:39
Tony-S hat folgendes geschrieben : |
das mit dem Private hab ich nicht ganz verstanden, wozu braucht man das, oder besser was macht das? |
Das steht dafür, dass Du die Variable nicht von außen - also von einer anderen Form aus - z.B. mittels Delphi-Quelltext 1: 2: 3: 4:
| procedure FormIrgendeineAndere.ButtonClick(Sender: TObject) begin FormMitDerVariable.VariablenName:=NeuerVariablenWert; end; | ansprechen kannst.
Wenn Du das aber doch gerne möchtest, dann musst Du die Deklaration nur in das public statt in das private stellen - wobei es immer besser ist, wenn man die Variablen nur in der eigenen Form "einfach so mal eben" verändern kann.
Wenn Du dann doch diesen Wert aus einer anderen Form abrufen oder sogar ändern möchtest, dann wäre es besser, wenn Du dafür
eine procedure schreibst, in der Du nach einer Prüfung (ob der Wert möglich ist) diesen dann setzt
oder eine function schreibst, durch die Du Dir dann den Wert zurückgeben lässt.
Ich hoffe, dass ich das jetzt nicht "zu hochtrabend" für Dich beschrieben habe.
PS: Funktioniert denn Dein Timer jetzt so, wie er soll?
Zuletzt bearbeitet von ffgorcky am Mi 29.07.09 20:07, insgesamt 3-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 29.07.09 18:56
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Mo 10.08.09 21:01
Hallo ich hatte jetzt noch mal eine kleine Idee, so eine Art Rundenzeit mit einzubauen, klappt auch fast, nur meine Umsetzung scheint mir etwas naja nicht ganz korrekt  .
Ich habe also einen Button "Lap", welcher eine 2. mitlaufende Zeit jeweils in eine Listbox schreibt, jetzt habe ich aber das Problem das mein "go on" oder meinetwegen auch weiter Button nicht mehr ganz das macht was er soll, und genau dabei liegt mein Problem.
Ich füge hier nochmal die Hauptprozeduren mit hinzu und die exe, vielleicht kann mir so jemand helfen.
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:
| procedure TForm1.XButton2click(Sender: TObject); begin inc(count);
Listbox1.items.Add(formatdatetime('hh:mm:ss:zzz',zeit2)+' Lap ' + IntToStr(Count)); Listbox1.ItemIndex:=Count; temp2:=Time; end;
procedure TForm1.timerTimer(Sender: TObject); begin zeit := last + temp - time; XPanel1.Caption:= formatdatetime('hh:mm:ss:zzz',zeit); end;
procedure TForm1.Timer1Timer(Sender: TObject); begin zeit2 := last2 + temp2 - time; XPanel2.Caption:= formatdatetime('hh:mm:ss:zzz',zeit2); end;
procedure TForm1.FormCreate(Sender: TObject); begin count:=0; end;
procedure TForm1.XBtn_Pauseclick(Sender: TObject); begin XButton1.click; end;
procedure TForm1.XBtn_go_onclick(Sender: TObject); begin temp2:=time; Timer.Enabled:=True; Timer1.Enabled:=True; end;
procedure TForm1.XButton1click(Sender: TObject); begin if not(timer.enabled) then begin temp:= time;zeit := last end else last := zeit; timer.enabled := not(timer.enabled);
if not(timer1.enabled) then begin temp2:= time;zeit2 := last2 end else last2 := zeit2; timer1.enabled := not(timer1.enabled);
XButton1.Visible:=False;
XBtn_Pause.Visible:=True; end; |
Ich hoffe da kann jemand durchblicken
Moderiert von Narses: Delphi-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 10.08.09 21:20
Hm.. hat die Frage "Rundenzeit" noch etwas mit der Überschrift "Stoppuhr nach pausieren weiterlaufen lassen " zu tun? Nein? Dann mach bitte einen neuen Thread auf.
In dem kannst du dann auch direkt üben, deinen Quellcode mit Delphi TAGs zu umschließen, wie man es dir schon mehrmals vorgemacht hat
Außerdem wäre es sinnvoller, das Projekt anzuhängen, statt nur die exe. So kann man sich dsa direkt selber kompilieren.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Tony-S 
      
Beiträge: 184
Erhaltene Danke: 6
Windows 7, XP, Ubtuntu
Delphi 7, Visual Basic.net
|
Verfasst: Mo 10.08.09 21:26
Hm ich war der Meinung das es noch dazu passt aber ok, mach ich einen neuen thread auf. Wie das mit den Tags geht weiß ich nicht..
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 10.08.09 21:43
Tony-S hat folgendes geschrieben : | | Wie das mit den Tags geht weiß ich nicht.. |
Dann klick bei einem deiner früheren Beiträge, wo ein Mod das nachgetragen hat, auf Bearbeiten und schau es dir an.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
|