Button-Abfrage um eine Uhr zu stellen...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Button-Abfrage um eine Uhr zu stellen...

Beitrag 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:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Button-Abfrage um eine Uhr zu stellen...

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Button-Abfrage um eine Uhr zu stellen...

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Ghosty1967
Beiträge: 205
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Re: Button-Abfrage um eine Uhr zu stellen...

Beitrag 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:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Button-Abfrage um eine Uhr zu stellen...

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten