Seite 1 von 2

SpinGadget - Bug?

Verfasst: 25.08.2008 21:01
von RSBasic
Hallo,

ich hab mal was programmiert und ich stellte fest, dass der SpinGadget einen Bug hat?

Beispiel 1 (Kein Problem):

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    SpinGadget(1,10,10,50,20,1,10000,0)
  EndIf
  SetGadgetText(1,"1")
  SetGadgetState(1,1)
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      SetGadgetText(1,Str(GetGadgetState(1)))
  EndSelect
EndIf
Until EventID=#PB_Event_CloseWindow
EndIf
Beispiel 2 (Problem):

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    SpinGadget(1,10,10,50,20,1,60000,0)
  EndIf
  SetGadgetText(1,"1")
  SetGadgetState(1,1)
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      SetGadgetText(1,Str(GetGadgetState(1)))
  EndSelect
EndIf
Until EventID=#PB_Event_CloseWindow
EndIf
Wenn man die Zahl erhöht oder verringert, dann funktioniert das garnicht.
Kann jemand dies bestätigen?
Wieso ist das so? :?

Verfasst: 25.08.2008 21:08
von Fluid Byte
Geht doch alles?! :?

Verfasst: 25.08.2008 21:16
von RSBasic
Bei Beispiel 2:
Bild

Nur weil ich bei Maximum "60000" eingestellt habe :?
Bei Beispiel 1 ist alles in Ordnung. (Maximum-Wert: 10000)

Verfasst: 25.08.2008 21:23
von Falko
Genau das Gleiche kommt bei mir auch heraus, wenn ich den zweiten Source
probiere. Weiterhin habe ich geprüft, da wohl das Spingadget die Zahl 65535
ausgibt, die Hälfte davon als max zu setzen. Also 32767. Damit geht es noch
und es wird korrekt hochgezählt. Sobald ich um eins erhöhe, geht es nicht
mehr. Ich erhalte ebenfalls nur diese drei Werte. In der Hilfe steht auch
keine Beschränkung drinne :o ?

Verfasst: 25.08.2008 21:43
von Kaeru Gaman
das klingt nach einem klassischen overflow.
wieder mal so ein Wert, der Window-seitig nur 16bit hat, signed Word,
deshalb kann die Grenze mit > nicht korrekt abgefragt werden.

Verfasst: 25.08.2008 21:46
von Falko
Nicht ganz :D. Das Negative wird unterschlagen. Denn da kann ich bis 65535, wenn ich weiter auf den Hochpfeil gedrückt halte, zählt er Rückwärts.

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    SpinGadget(1,10,10,50,20,-32767,32767,0); This ist to high and the max i can set to 32767 :(
  EndIf
  SetGadgetText(1,"1")
  SetGadgetState(1,1)
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      SetGadgetText(1,Str(GetGadgetState(1)))
  EndSelect
EndIf
Until EventID=#PB_Event_CloseWindow
EndIf

Verfasst: 25.08.2008 21:46
von RSBasic
@Kaeru Gaman
Ah danke für die Begründung der Ursache, ich hab mich schon gefragt, wieso das so ist.

Zwei Fragen habe ich:
1. Wie kann man das Problem beheben? Oder kann nur Fred das Problem beheben? Oder liegt das an Windows?

2. Kann jemand diesen Bug im englischen Forum ankündigen?

Verfasst: 25.08.2008 21:56
von ts-soft
Ist eine Windows-Limitation, ist bekannt, wurde hier bereits besprochen,
braucht nicht gemeldet werden, ....

Verfasst: 25.08.2008 22:04
von marco2007
MSDN hat geschrieben:CreateUpDownControl Function
Creates an up-down control. Note: This function is obsolete. It is a 16 bit function and cannot handle 32 bit values for range and position.
...dürfte das hier sein.

Verfasst: 25.08.2008 22:26
von Falko
OK, das ist schon klar, das Microsoft das hier schön erklärt:

http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Und das PB diese API aus comctl32.dll benutzt, welche wohl auch 16-Bit-Funktionen enthält.

Vielleicht könnte Andrè diese Windows und API-Limitierung in der Hilfe mit reinschreiben. Es sei denn, Fred programmiert ein eigenes Spingadget.