Seite 1 von 1

SpinGadget updaten => Bug?

Verfasst: 25.11.2004 23:52
von Sven
Hier! Hier! Ich habe einen Bug gefunden!

Oder was falsch gemacht? Im folgenden Code sollen bei SpinGadgets automatisch Wert und Inhalt aneinander angepasst werden. Das funzt unter PB3.91 auch für das Gadget im Fenster und das Gadget auf einem PanelGadget. Bei SpinGadgets auf ScrollArea- und ContainerGadgets ist keine sinnvolle Eingabe möglich, aber das Spin auf und ab geht. Unter PB3.8 war auch für PanelGadgets keine Eingabe möglich.

Habe ich was nicht beachtet? Wenn es ein Bug ist, kann er behoben werden? Darauf läßt ja hoffen, dass es für das PanelGadget anscheinend schon behoben ist. Oder geht das einfach nicht?

Sven

Code: Alles auswählen

Enumeration
  #idwdmain
EndEnumeration

Enumeration
  #idspin1
  #idspin2
  #idspin3
  #idspin4
  #idpan
  #idscroll
  #idcont
  #idexit
EndEnumeration

;- Prozeduren

Procedure CreateDialog()  ;Dialog Control aufbauen
  If CreateGadgetList(WindowID())
    SpinGadget(#idspin1, 20, 20, 60, 20, 0, 100)  ;SpinGadget auf Fenster
    PanelGadget(#idpan, 10, 60, 120, 60)  ;Panel erzeugen
      AddGadgetItem(#idpan, -1, "Panel")
      SpinGadget(#idspin2, 10, 10, 60, 20, 0, 100)  ;SpinGadget auf Fenster
    CloseGadgetList()
    ScrollAreaGadget(#idscroll, 10, 140, 120, 60, 150, 60, 5, #PB_ScrollArea_Raised)  ;ScrollBereich erzeugen
      SpinGadget(#idspin3, 10, 10, 60, 20, 0, 100)  ;SpinGadget auf Scrollbereich
    CloseGadgetList()
    ContainerGadget(#idcont, 10, 220, 120, 60, #PB_Container_Raised)  ;Container erzeugen
      SpinGadget(#idspin4, 10, 10, 60, 20, 0, 100)  ;SpinGadget auf Container
    CloseGadgetList()
  EndIf
  SetGadgetText(#idspin1, Str(1))
  SetGadgetState(#idspin1, 1)
  SetGadgetText(#idspin2, Str(3))
  SetGadgetState(#idspin2, 3)
  SetGadgetText(#idspin3, Str(5))
  SetGadgetState(#idspin3, 5)
  SetGadgetText(#idspin4, Str(7))
  SetGadgetState(#idspin4, 7)
EndProcedure

Procedure UpdateSpinGadget(GadgetID.l)
  Protected GadgetID
  If GetGadgetState(GadgetID) <> Val(GetGadgetText(GadgetID))  ;Vergleich Wert mit Text
    If EventType() = #PB_EventType_Change  ;Eingabe in Textfeld 
      SetGadgetState(GadgetID, Val(GetGadgetText(GadgetID)))  ;Wert an Text anpassen
      If GetGadgetState(GadgetID) <> Val(GetGadgetText(GadgetID))  ;Vergleich auf Bereich
        SetGadgetText(GadgetID, Str(GetGadgetState(GadgetID)))  ;Text update
      EndIf
    Else
      SetGadgetText(GadgetID, Str(GetGadgetState(GadgetID)))  ;Text an Wert anpassen
    EndIf 
  EndIf   
EndProcedure

If OpenWindow(#idwdmain, 50, 50, 240, 320,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar , "SpinGadgetTest")
  CreateDialog() 
  Repeat
    EventID.l = WaitWindowEvent()
    If EventID = #PB_EventCloseWindow
      End
    ElseIf EventID = #PB_Event_Gadget  ;Dingsbums gedrückt
      GadgetID.l = EventGadgetID()
      Select GadgetID
        Case #idspin1  ;SpinGadget #1
          UpdateSpinGadget(GadgetID)
        Case #idspin2  ;SpinGadget #2
          UpdateSpinGadget(GadgetID)
        Case #idspin3  ;SpinGadget #3
          UpdateSpinGadget(GadgetID)
        Case #idspin4  ;SpinGadget #4
          UpdateSpinGadget(GadgetID)
        Case #idexit  ;Button Exit
          End
        Default
      EndSelect
    EndIf 
  Until 0
EndIf
[/b]

Verfasst: 29.11.2004 22:01
von Sven
Wie jetzt? Ihr wollt doch nicht behaupten, dass der Fehler nur bei mir auftritt? Hat noch niemand SpinGadgets in ein ScrollArea-Gadget gesetzt? Ich hätte da schon verstärktes Interesse dran.

Danke, Sven

Verfasst: 30.11.2004 00:40
von Team100
Der Debugger ist Dein Freund ! <)

Wenn man sich mit dem Debugger den Wert von EventType() vor
Zeile 45 ansieht, wo auf EventType() = #PB_EventType_Change
abgefragt wird, dann sieht man, daß beim Eintragen in das
SpinGadget beim Scroll- und ContainerGadget nicht
768 (= #PB_EventType_Change) kommt, sondern 1024.

Für 1024 habe ich in den mir zur Verfügung stehenden Listen keinen
Konstantennamen gefunden, ist eventuell namenlos?

Wenn man die Abfrage in Zeile 45 auf dieses 1024
erweitert, dann läuft es.

Ob das ein Bug ist oder nur nicht dokumentiert ?

PureBasic, immer für Überraschungen gut !! :mrgreen: :mrgreen:

@Sven: Das Programm sollte noch ein wenig nachgebessert werden,
damit man keine Buchstaben in das Spin-Gadget eintippen kann ....

Alles hier Gesagte für PB3.91 und WinXP