Seite 1 von 2
Komme mit dem SpinGadget() nicht klar
Verfasst: 27.09.2004 09:14
von Lebostein
Irgendwie scheint das Spin-Gadget nicht zu funktionieren
Code: Alles auswählen
OpenWindow(0,100,100,200,200,#PB_Window_SystemMenu,"Spin")
CreateGadgetList(WindowID())
SpinGadget(1,20,20,100,20,1,100)
Repeat
event=WaitWindowEvent()
Until event=#PB_EventCloseWindow
Man kann in das Gadget zwar Zahlen eingeben, aber wenn man die Up/Down-Buttons drückt, passiert nichts...
..außerdem kann man Text(!) eingeben. Ziemlich unsinnig für ein Spin-Gadget.
Ein Bug?
Verfasst: 27.09.2004 12:35
von pws32
Hi,
schau doch mal ins Handbuch da steht das :
Code: Alles auswählen
If OpenWindow(0,0,0,140,70,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"SpinGadget") And CreateGadgetList(WindowID(0))
SpinGadget (0,20,20,100,25,0,1000)
SetGadgetState (0,5) : SetGadgetText(0,"5") ; Anfangswert festlegen
Repeat
ev.l = WaitWindowEvent()
If EventGadgetID() = 0
SetGadgetText(0,Str(GetGadgetState(0)))
WindowEvent() ; absolut notwendig, um Endlos-Schleifen zu vermeiden
EndIf
Until ev.l = #PB_Event_CloseWindow
EndIf
Gruss Peter
Verfasst: 27.09.2004 12:45
von mueckerich
Versuch mal folgene Anweisung:
Code: Alles auswählen
SetGadgetText(#Gadget_Spin0, Str(GetGadgetState(#Gadget_Spin0)))
War wohl etwas zu laaaaaannngsam
Habe aber auch ein Problem. Die Anweisung EventType sollte eigentlich den Ereignisstyp des Gadget zurückgeben, mit der UP-Schaltfläche erhalte ich bei gedrückter Maustaste (links) den Wert 1 und bei loslassen -1. Die Down-Schaltfläche liefert immer eine -1. Sollte beim klick mit der linken Maustaste nicht eine 0 (#PB_EventType_LeftClick) und mit der Rechten eine 1 (#PB_EventType_RightClick) geliefert werden?
Verfasst: 27.09.2004 20:35
von Lars
mueckerich hat geschrieben:Die Anweisung EventType sollte eigentlich den Ereignisstyp des Gadget zurückgeben, mit der UP-Schaltfläche erhalte ich bei gedrückter Maustaste (links) den Wert 1 und bei loslassen -1.
Ist das nicht eigentlich völlig nebensächlich, da PB den GadgetState
selbstständig verwaltet? Schön ist das natürlich nicht, aber die
EventType()s funktionieren ohnehin nur bei ein paar wenigen Gadgets.
Verfasst: 28.09.2004 08:30
von mueckerich
Ist das nicht eigentlich völlig nebensächlich, da PB den GadgetState
selbstständig verwaltet?
Eigentlich wollte ich damit eine art "rollover" proggen, d.h. wenn der ober bzw untere Grenzwert erreicht ist, dann soll in äbhängigkeit des angeklickten Up oder Down auf den jeweils anderen Grenzwert umgeschaltet werden. Ich meine zum Beispiel bei einer Uhrzeiteinstellung mit dem Up von 23 auf 0. Oder gibt's da eine andere Lösung?
Verfasst: 28.09.2004 08:53
von Danilo
mueckerich hat geschrieben:Eigentlich wollte ich damit eine art "rollover" proggen, d.h.
wenn der ober bzw untere Grenzwert erreicht ist, dann soll
in äbhängigkeit des angeklickten Up oder Down auf den jeweils
anderen Grenzwert umgeschaltet werden.
Ich meine zum Beispiel bei einer Uhrzeiteinstellung mit dem
Up von 23 auf 0. Oder gibt's da eine andere Lösung?
Code: Alles auswählen
OpenWindow(0,0,0,200,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Spin")
CreateGadgetList(WindowID())
SpinGadget(1,10,10,100,20,0,25) ; 2 groesser als gebraucht
SetGadgetText(1,"0")
Repeat
Select WaitWindowEvent()
Case #PB_EVent_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
state = GetGadgetState(1)
If state = 0
state = 24 : SetGadgetState(1,state)
ElseIf state = 25
state = 1 : SetGadgetState(1,state)
EndIf
SetGadgetText(1,Str(state-1))
EndSelect
EndSelect
ForEver
In etwa so?
Verfasst: 28.09.2004 09:38
von mueckerich
TNX Danilo
Coole Lösung

Ich verstehe

!!!!
Das mit dem rollover über die 0 hat mich zum Verzweifeln gebracht, darum der Versuch mittels dem EventType. Man lernt nie aus. Bin nach 10 Jahren VB zu PB umgestiegen, und in VB gibt es den Event für sowas.
Verfasst: 28.09.2004 12:28
von Danilo
BTW, hat das mal jemand auf Linux probiert?
Bei mir geht das nicht, das SpinGadget scheint auf Linux
zu spinnen:
Code: Alles auswählen
OpenWindow(0,0,0,200,100,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Spin")
CreateGadgetList(WindowID())
SpinGadget(1,10,10,100,20,0,25) ; 2 groesser als gebraucht
SetGadgetText(1,"0")
Repeat
Select WaitWindowEvent()
Case #PB_EVent_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
state = GetGadgetState(1)
;If state = 0
; state = 24 : SetGadgetState(1,state)
;ElseIf state = 25
; state = 1 : SetGadgetState(1,state)
;EndIf
SetGadgetText(1,Str(state-1))
EndSelect
EndSelect
ForEver
Bei mir passiert auf dem oberen Button des SpinGadgets
garnichts - beim, unteren Button kommt immer 0 und -1.
Wenn ich die 5 Zeilen auskommentiere, dann kommt oben
wieder Nichts, beim unteren Button zählt es in 2er-Schritten
nach unten. Oh well... LOL
(freak meinte doch das PB/Linux mit GUI ordentlich funktioniert.
Bist Du gerade hier und kannst das erklären, freak?)
Verfasst: 28.09.2004 16:39
von Lebostein
Also ich finde:
- das Einhalten der oberen und unteren Grenze muss automatisch erfolgen
- das Eingeben der Zahl und des Erhöhen und Erniedrigen muss ohne zusätzlichen Code funktionieren
Das ist doch nicht im Sinne von PureBasic, wenn ich mir anschaue, was ich alles noch einbauen muss, damit das Spingadget ordentlich funktioniert. Bei einem mag das ja noch gehen, aber bei 10 oder gar 100? Da kann ich auch gleich ein Textgadget und zwei Buttons hinsetzten - der gleiche Aufwand, sogar logischer.
Ich frag mich sowieso warum ich die Grenzen bei der Gadgetdefinition angeben muss, wenn ich dann eh nochmal "von Hand" die Grenzen programmieren muss -> siehe Danilos Beispiel.
Verfasst: 28.09.2004 17:45
von Lars
Lebostein hat geschrieben:- das Einhalten der oberen und unteren Grenze muss automatisch erfolgen
- das Eingeben der Zahl und des Erhöhen und Erniedrigen muss ohne zusätzlichen Code funktionieren
Tut es beides (unter WIN zu mindestens

). Das einzige, was nicht getan
wird, ist, den Text im Spingadget zu aktualisieren, da wird nur der
GadgetState aktualisiert. Man kann das aber auch als ein Feature sehen,
so sind einige schicke Sachen möglich, z.B. Masken für die Zahl, also so
etwas wie "Es ist 7 Uhr.".