Seite 1 von 3

Timer hochzählen

Verfasst: 09.06.2006 18:47
von Rubiko
Huhu, ich hab mal wiedern Problem ;)

Ich hab einen Timer der hochzählt, bis die 6 Stunden erreicht sind und dann wieder von neu anfängt und wieder hochzählt usw.

Da der PBOSL timer nicht ging, warum auch immer hab ich dann den von Windows genommen und mir selbst so'ne Uhr gebastelt (stellen sind markiert)

Code: Alles auswählen


;;;;;;;;;UHR;;;;;;;;;;;;;
TimerDigit1.l
TimerDigit2.l
TimerDigit3.l
TimerDigit4.l
TimerDigit5.l
TimerDigit6.l
;;;;;;;;;;/Uhr;;;;;;;;;;;;

If OpenWindow(0, 0, 0, 400, 200, FormatDate("%dd.%mm.%yyyy", Date()), #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
  Timer.l = SetTimer_(WindowID(0), 1, 1000, 0)
  
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1, 10, 10, 80, 25, "Send to tray")
    StringGadget(2, 20, 60, 50, 20, "")
    StringGadget(3, 20, 110, 50, 20, "")
    StringGadget(4, 20, 160, 50, 20, Str(TimerDigit1)+Str(TimerDigit2)+":"+Str(TimerDigit3)+Str(TimerDigit4)+":"+Str(TimerDigit5)+Str(TimerDigit6))

    ButtonGadget(5, 120, 10, 80, 25, "Timer Starten")
  EndIf
   
  Repeat

    If Event = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          HideWindow(0, 1)
          AddSysTrayIcon(0, WindowID(0), LoadImage(0, "C:\Programme\PureBasic\Examples\Sources\Data\CdPlayer.ico"))
        Case 5

      EndSelect
    EndIf 
  
    If Event = #PB_Event_SysTray
      If EventType() = #PB_EventType_LeftDoubleClick
        HideWindow(0, 0)
      EndIf
    EndIf
    
    If Event
      Select Event
        Case #WM_TIMER
          SetGadgetText(3, FormatDate("%hh:%mm:%ss", Date()))
          SetGadgetText(4, Str(TimerDigit1)+Str(TimerDigit2)+":"+Str(TimerDigit3)+Str(TimerDigit4)+":"+Str(TimerDigit5)+Str(TimerDigit6))

 
;;;;;;;;;;;;;;;;;;;;;;;;;;UHR;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
          TimerDigit6 + 1
          If TimerDigit6 > 9 : TimerDigit6 = 0 : TimerDigit5 + 1 : EndIf
          If TimerDigit5 > 5 : TimerDigit5 = 0 : TimerDigit4 + 1 : EndIf
          If TimerDigit4 > 9 : TimerDigit4 = 0 : TimerDigit3 + 1 : EndIf
          If TimerDigit3 > 5 : TimerDigit3 = 0 : TimerDigit2 + 1 : EndIf
          If TimerDigit2 = 6 : TimerDigit2 = 0 : TimerDigit3 = 0 : TimerDigit4 = 0 : TimerDigit5 = 0 : TimerDigit6 = 0 : EndIf
 ;;;;;;;;;;;;;;;;;;;;;;;/UHR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       
 
      EndSelect
    EndIf
    Event.l = WaitWindowEvent()   
   
  Until Event = #PB_Event_CloseWindow Or GetAsyncKeyState_(#VK_ESCAPE)
  
EndIf
mein einziges Problem dabei ist jetzt, ich will, dass der timer erst anfängt zu zählen wenn man auf einen Button drückt.

Ich hab das schon bei der Abfrage der events nochmal eingebaut, aber da zählt er ja nur einmal dazu und ne Repeat Schleife geht da nicht^^
Hab es vorhin auch mal mit Goto probiert (aber das soll ja nicht so elegant sein) aber da fängt er komischerweise immer bei 2 an zu zählen und nicht bei 1
Hab das ganze Forum schon mit der Suche durchsucht aber nicht wirklich ne Hilfe für mich gefunden :/

Also was mach ich falsch? Denkanstöße wären nett

Würde mich auf eine Antwort freuen :)

Grüße,
Rubiko

P.S. Geht das mit der Uhr auch einfacher oder passt die so wie ich sie gemacht habe?

Verfasst: 09.06.2006 19:01
von Macros
Also bei mir geht das ganz Problemlos
PB 3.94

Verfasst: 09.06.2006 19:04
von Alves
Also ich hab auch 3.94 und da sagt er in Zeile 12 (OpenWindow()): "Bad Parameter Type. A string is expected."

Verfasst: 09.06.2006 19:08
von Rubiko
@Macros: Ja er fängt an zu zählen... ist gut so, aber ich hab keine Ahnung wie ich den timer auf knopfdruck starten soll, also durch einen Button...


mein Codeauschnitt ist übrigens für 4.0 Final

Verfasst: 09.06.2006 19:31
von Macros
Die zwei Zeilen zu konvertieren ist nicht das Probem

Hier die Lösung:

Code: Alles auswählen


;;;;;;;;;UHR;;;;;;;;;;;;;
TimerDigit1.l
TimerDigit2.l
TimerDigit3.l
TimerDigit4.l
TimerDigit5.l
TimerDigit6.l
;;;;;;;;;;/Uhr;;;;;;;;;;;;

If OpenWindow(0, 0, 0, 400, 200, FormatDate("%dd.%mm.%yyyy", Date()), #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
  
 
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1, 10, 10, 80, 25, "Send to tray")
    StringGadget(2, 20, 60, 50, 20, "")
    StringGadget(3, 20, 110, 50, 20, "")
    StringGadget(4, 20, 160, 50, 20, Str(TimerDigit1)+Str(TimerDigit2)+":"+Str(TimerDigit3)+Str(TimerDigit4)+":"+Str(TimerDigit5)+Str(TimerDigit6))

    ButtonGadget(5, 120, 10, 80, 25, "Timer Starten")
  EndIf
   
  Repeat

    If Event = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          HideWindow(0, 1)
          AddSysTrayIcon(0, WindowID(0), LoadImage(0, "C:\Programme\PureBasic\Examples\Sources\Data\CdPlayer.ico"))
        Case 5
               Timer.l = SetTimer_(WindowID(0), 1, 1000, 0)
      EndSelect
    EndIf
 
    If Event = #PB_Event_SysTray
      If EventType() = #PB_EventType_LeftDoubleClick
        HideWindow(0, 0)
      EndIf
    EndIf
   
    If Event
      Select Event
        Case #WM_TIMER
          SetGadgetText(3, FormatDate("%hh:%mm:%ss", Date()))
          

 
;;;;;;;;;;;;;;;;;;;;;;;;;;UHR;;;;;;;;;;;;;;;;;;;;;;;;;;;;       
          TimerDigit6 + 1
          If TimerDigit6 > 9 : TimerDigit6 = 0 : TimerDigit5 + 1 : EndIf
          If TimerDigit5 > 5 : TimerDigit5 = 0 : TimerDigit4 + 1 : EndIf
          If TimerDigit4 > 9 : TimerDigit4 = 0 : TimerDigit3 + 1 : EndIf
          If TimerDigit3 > 5 : TimerDigit3 = 0 : TimerDigit2 + 1 : EndIf
          If TimerDigit2 = 6 : TimerDigit2 = 0 : TimerDigit3 = 0 : TimerDigit4 = 0 : TimerDigit5 = 0 : TimerDigit6 = 0 : EndIf
 ;;;;;;;;;;;;;;;;;;;;;;;/UHR;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;       
              SetGadgetText(4, Str(TimerDigit1)+Str(TimerDigit2)+":"+Str(TimerDigit3)+Str(TimerDigit4)+":"+Str(TimerDigit5)+Str(TimerDigit6))
      EndSelect
    EndIf
    Event.l = WaitWindowEvent()   
   
  Until Event = #PB_Event_CloseWindow Or GetAsyncKeyState_(#VK_ESCAPE)
 
EndIf

Verfasst: 09.06.2006 20:01
von Rubiko
Jup, funktioniert jetzt prima :D

Vielen Dank

Verfasst: 09.06.2006 20:18
von #NULL
@alves
bei 3.94 sind die openwindow-parameter "titel" und "flags" andersherum als bei 4.00

Verfasst: 09.06.2006 20:25
von Macros
Alves? *sich umguckt* wo ist hier Alves?

Verfasst: 09.06.2006 21:11
von Alves
Hier!

Verfasst: 10.07.2007 12:51
von DNA
Das Thema ist schon lange her, aber kann man diesen Timer auch so wie die Windows-Uhr im Systray anzeigen lassen?
Dann sieht man auch direkt im Systray wieviel Zeit abgelaufen ist und muss nicht immer erst das Fenster wieder öffnen.