Seite 1 von 1

Frage! Wie kann man mir Pure Basic die SystemZeit auslesen?

Verfasst: 07.11.2005 11:26
von Morpheus
Hallo an alle erstmal.

Also kann mir einer verraten wie man die Windows Systemzeit ausliest? Weil ich gerne einen Countdownzähler versuchen will zu Programmieren, habe aber keine Ahnung wie ich die Zeit auslese und auch nicht wo.

Bitte um eure Hilfe... :cry:

MfG
Morpheus

Verfasst: 07.11.2005 11:47
von Hroudtwolf
debug GetTickCount_()

Ich arbeite auch gerade mit nem Countdown ...

Verfasst: 07.11.2005 12:18
von hiltwin
... zum Lernen hat mir dieses hier entsprechend geholfen ...

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=3129&highlight=
; Author: MPERLE
; Date: 13. December 2003


; Programm TeeUhr - Erstes Programm in Purebasic 

If InitSound() = 0 
  MessageRequester("Fehler", "Fehler beim Soundinitialisieren!") 
  End 
EndIf 
 
If LoadSound(1, "erinner.wav") = 0 
  MessageRequester("Fehler", "Fehler beim Soundladen!") 
  End 
EndIf 
 
SoundVolume(1, 50) 


If OpenWindow(0,100,100,300,190,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered,"Die Teeuhr") 
  

  If CreateGadgetList(WindowID()) 
    ButtonGadget(1,10,160,80,20,"Start") 
    ButtonGadget(2,110,160,80,20,"Stop") 
    ButtonGadget(3,210,160,80,20,"Beenden") 
    SpinGadget  (4,20,20,50,26,1,30) 
    SetGadgetState (4,1) 
    SetGadgetText(4,"1") 
    TextGadget(5,80,20,200,26,"Wieviele Minuten soll Ihr Tee ziehen? (1-30 Minuten)") 
    If LoadImage(11, "TeeUhr.bmp") 
      ImageGadget(7,100,60,100,83,UseImage(11)) 
    EndIf 
    If LoadImage(12, "Teetasse.bmp") 
      ImageGadget(7,10,60,100,83,UseImage(12)) 
    EndIf 
    TextGadget(8,140,110,100,20,"Countdown wartet ...",#PB_Text_Center) 
    Frame3DGadget(0,10,5,280,50,"") 
    Frame3DGadget(0,10,55,280,100,"") 
  EndIf 
  
  Repeat 
    EventID = WaitWindowEvent()                                   ;Fenster-Events abfragen 
    If EventID = #PB_Event_CloseWindow                            ;Wenn ... 
      Quit = 1 
    EndIf 
    HideGadget(2,1) 
    If EventID = #PB_Event_Gadget                                 ;Gadget-Events abfragen 
      If EventGadgetID()=1                                        ;Button "Start" gedrückt 
        HideGadget(1,1) 
        HideGadget(3,1) 
        HideGadget(2,0) 
        CountDown = GetGadgetState(4) *60 
        ProgressBarGadget(9,100,130,180,15,1,CountDown,#PB_ProgressBar_Smooth) 
        
        SendMessage_(GadgetID(9),#CCM_SETBKCOLOR,0,RGB(60,50,0))  ;  Hintergrundfarbe im ProgressBarGadget ändern 
        SendMessage_(GadgetID(9),#WM_USER+9,0,RGB(181,49,16)) 
        SetGadgetState(9,CountDown) 
         Time = GetTickCount_() + CountDown * 1000 
        Repeat 
          WindowEvent() 
          If (Time - GetTickCount_()) / 1000 < CountDown 
            CountDown - 1 
            SetGadgetText(8,FormatDate("%ii:%ss",CountDown)+ " Minuten") 
            SetGadgetState(9,CountDown) 
            SetWindowText_(WindowID(0),GetGadgetText(8)) 
          EndIf 
        Until CountDown = 0 Or EventGadgetID()=2 
        ; Meldung anzeigen 
        PlaySound(1, 0) 
        MessageRequester("Die Teeuhr","It's Teatime!",0) 
        SetGadgetText(8,"Countdown wartet ...") 
        SetGadgetState (4,1) 
        SetGadgetText(4,"1") 
        HideGadget(9,1) 
        SetGadgetState(9,0) 
        HideGadget(1,0) 
        HideGadget(3,0) 
        SetWindowText_(WindowID(0),"Die Teeuhr") 
      EndIf 
       If EventGadgetID()=3            ;Button "Beenden" gedrückt 
        Quit=1 
      EndIf 
      If EventGadgetID()=4 
        SetGadgetText(4,Str(GetGadgetState(4))) 
        WindowEvent()      
      EndIf 
    EndIf 
    
  Until Quit = 1 
EndIf 
End
; ExecutableFormat=Windows
; FirstLine=1
; EnableXP
; DisableDebugger
; EOF

Verfasst: 07.11.2005 18:26
von Froggerprogger
Wenn Du Zeitabstände messen willst, dann nimm einfach ElapsedMilliseconds(), das ist eine PB-Funktion und macht dasselbe wie GetTickCount_(). Der zurückgegebene Wert sind die seit dem Start des Computers vergangenen Millisekunden, also nicht die Systemzeit. Die Funktionen sind aber schön schnell, also wenn man Zeitabstände braucht, wie z.B. dass etwas nach 5 Minuten passiert, etc. die richtige Wahl.

Die echte Systemzeit erhält man mit der WinAPI-Funktion GetLocalTime_(), siehe folgendes Beispiel:

Code: Alles auswählen

GetLocalTime_(@time.SYSTEMTIME)
debug Str(time\wYear) + " (Jahr)"
debug Str(time\wMonth) + " (Monat)"
debug Str(time\wDayOfWeek) + " (Wochentag)"
debug Str(time\wDay) + " (Tag im Monat)"
debug Str(time\wHour) + " (Stunde)"
debug Str(time\wMinute) + " (Minute)"
debug Str(time\wSecond) + " (Sekunde)"
debug Str(time\wMilliseconds) + " (Millisekunde)"

Verfasst: 07.11.2005 22:15
von NicTheQuick
Froggerprogger hat geschrieben:Die echte Systemzeit erhält man mit der WinAPI-Funktion GetLocalTime_(), siehe folgendes Beispiel:

Code: Alles auswählen

GetLocalTime_(@time.SYSTEMTIME)
debug Str(time\wYear) + " (Jahr)"
debug Str(time\wMonth) + " (Monat)"
debug Str(time\wDayOfWeek) + " (Wochentag)"
debug Str(time\wDay) + " (Tag im Monat)"
debug Str(time\wHour) + " (Stunde)"
debug Str(time\wMinute) + " (Minute)"
debug Str(time\wSecond) + " (Sekunde)"
debug Str(time\wMilliseconds) + " (Millisekunde)"
Oder mit [c]Date()[/c].

Verfasst: 08.11.2005 00:35
von Froggerprogger
:iamwithstupid:

Jau, oder mit Date().
Oder bei Obi.

Verfasst: 08.11.2005 00:44
von ts-soft
Bei der Lösung mit Date() müßte der gesamte Thread ja wieder verschoben werden, ist ja kein API-Befehl :mrgreen:

Verfasst: 08.11.2005 10:30
von NicTheQuick
Wieso? Wir sind doch bei den Anfängern?
Oder war der Thread vorher noch unter "API"?

Naja, egal... :wink:

Verfasst: 08.11.2005 13:20
von freedimension
NicTheQuick hat geschrieben:Wieso? Wir sind doch bei den Anfängern?
Oder war der Thread vorher noch unter "API"?
Ich glaube den hat ein kleiner Wichtel der gerade nichts besseres zu tun hatte verschoben.

Mein Problem ist immer, dass ich stets über "Beiträge seit dem letzten Besuch anzeigen" in die jeweiligen Threads gelange und mir daher nie so richtig bewusst ist in welchem Forum ich gerade unterwegs bin :(