Timer hochzählen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Timer hochzählen

Beitrag 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?
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Also bei mir geht das ganz Problemlos
PB 3.94
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Also ich hab auch 3.94 und da sagt er in Zeile 12 (OpenWindow()): "Bad Parameter Type. A string is expected."
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag 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
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

Jup, funktioniert jetzt prima :D

Vielen Dank
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@alves
bei 3.94 sind die openwindow-parameter "titel" und "flags" andersherum als bei 4.00
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Alves? *sich umguckt* wo ist hier Alves?
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Hier!
DNA
Beiträge: 40
Registriert: 25.02.2006 23:54

Beitrag 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.
Antworten