Seite 1 von 1
Button-Abfrage um eine Uhr zu stellen...
Verfasst: 21.06.2012 11:34
von Ghosty1967
Ich bastel gerade ein kleines Tool, indem unter naderem auch eine Stoppuhr/Wecker/Timer eingebaut ist.
Nun kennt doch bestimmt jeder von euch diese kleinen elektronischen eieruhren, die per magischer Kraft
an den Kühlschranktüren kleben
Meist gibt es an diesem Uhren einen Knopf, der wenn man ihn kurz drückt die Sekunden langsam hochzählt,
bzw. schneller wenn man ihn länger drückt und dann auch die Minuten bzw. Stunden hochtickert.
Kann mir jemand einen Tipp geben, wie ich soetwas innerhalb einer "WindowEvent-Schleife" oder per
"Callback" und einem ButtonGadget realisiern kann. Ich habe schon etwas hin und her gebastelt, komme aber
so garnicht weiter.
Wäre für Beispiele und Anregungen dankbar!
Übrigens wünsch ich allen einen schönen "SOMMERANFANG"

Re: Button-Abfrage um eine Uhr zu stellen...
Verfasst: 21.06.2012 12:14
von ts-soft
Ich denke mal, es geht Dir darum zu ermitteln, wie lange der Knopp gedrückt wurde?
Code: Alles auswählen
Procedure SubClassCB(hWnd, uMsg, wParam, lParam)
Protected oldproc = GetProp_(hWnd, "oldproc")
Static time
Select uMsg
Case #WM_NCDESTROY
RemoveProp_(hWnd, "oldproc")
Case #WM_LBUTTONUP
If GetDlgCtrlID_(hWnd) = 1
Debug ElapsedMilliseconds() - time
time = 0
EndIf
Case #WM_LBUTTONDOWN
If GetDlgCtrlID_(hWnd) = 1
time = ElapsedMilliseconds()
EndIf
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure SubClassGadget(ID)
Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @SubClassCB())
ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
ButtonGadget(1, 10, 10, 80, 20, "Test")
SubClassGadget(1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: Button-Abfrage um eine Uhr zu stellen...
Verfasst: 21.06.2012 12:24
von STARGÅTE
Oder so zum Beispiel:
Code: Alles auswählen
Enumeration
#Window
#Gadget_Button
#Gadget_Text
#Timer_Wait
#Timer_Count
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(#Gadget_Button, 10, 10, 100, 20, "Minuten")
TextGadget(#Gadget_Text, 120, 10, 100, 20, "00")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_Button
RemoveWindowTimer(#Window, #Timer_Wait)
RemoveWindowTimer(#Window, #Timer_Count)
EndSelect
Case #WM_LBUTTONDOWN, #WM_LBUTTONDBLCLK
SetGadgetText(#Gadget_Text, RSet(Str((Val(GetGadgetText(#Gadget_Text))+1)%60),2,"0"))
AddWindowTimer(#Window, #Timer_Wait, 600)
Case #PB_Event_Timer
Select EventTimer()
Case #Timer_Wait
RemoveWindowTimer(#Window, #Timer_Wait)
AddWindowTimer(#Window, #Timer_Count, 100)
Case #Timer_Count
SetGadgetText(#Gadget_Text, RSet(Str((Val(GetGadgetText(#Gadget_Text))+1)%60),2,"0"))
EndSelect
EndSelect
ForEver
Klick erhöht die Minuten normal, und lange drücken macht einen Vorlauf.
Re: Button-Abfrage um eine Uhr zu stellen...
Verfasst: 21.06.2012 12:34
von Ghosty1967
Danke an euch beide...
Habe im Moment nur Stargates Vorschlag getestet aber das sieht schon sehr gut aus. Ich glaube ich bekomme
mit euren Tipps mein Problen auseinanderklamüsert!

Re: Button-Abfrage um eine Uhr zu stellen...
Verfasst: 21.06.2012 12:50
von STARGÅTE
Ich weiß nicht genau wo du dein Ziel liegt, aber vielleicht wäre das CanvasGadget für dein Vorhaben besser geeignet, denn dort bekommst du ja die nötigen Events alle.