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 :lol:
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! :mrgreen:

Übrigens wünsch ich allen einen schönen "SOMMERANFANG" :? :allright:

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! :allright:

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.