Komme mit dem SpinGadget() nicht klar

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Komme mit dem SpinGadget() nicht klar

Beitrag 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?
pws32
Beiträge: 52
Registriert: 27.09.2004 12:33

Beitrag 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
ich weis das ich nix weis
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag 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?
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag 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?
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

TNX Danilo
Coole Lösung :allright: Ich verstehe :D !!!!
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.
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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 :lol:

(freak meinte doch das PB/Linux mit GUI ordentlich funktioniert.
Bist Du gerade hier und kannst das erklären, freak?)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag 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.
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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 :D ). 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.".
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Antworten