Seite 1 von 3

[Gelöst] - Problem mit SetGadgetState()

Verfasst: 20.08.2007 09:07
von SimonSimCity
Bitte Clicken: http://simonsimcity.si.ohost.de/gadgetfehler.jpg
Bild war zu groß - Kaeru fecit

Wenn ihr euch das Bild mal anschaut, dann seht ihr ja auch folgenden Codeabschnitt:

Code: Alles auswählen

    For i = 1 To XMLChildCount(*Node)
      SetGadgetState(#DDD, 55)
      __ReadContentFromXML_ForData(iXML.l, ChildXMLNode(*Node, i), bNewContent)
    Next i
Wenn ich den Abschnitt so schreibe funktioniert es nicht, aber wenn ich es so schreibe:

Code: Alles auswählen

    SetGadgetState(#DDD, 55)
    For i = 1 To XMLChildCount(*Node)
      __ReadContentFromXML_ForData(iXML.l, ChildXMLNode(*Node, i), bNewContent)
    Next i
Dann geht es einwandfrei... (bzw ohne Fehler, aber den gewünschten Effekt hätte ich gerne!)

PureBasicVersion wie immer in der Signatur...

Re: Problem mit SetGadgetState()

Verfasst: 20.08.2007 09:19
von Kiffi
Die Bildverknüpfung ist kapoot

Verfasst: 20.08.2007 10:24
von Kaeru Gaman
@Simon

SetGadgetState() erzeugt ein event.

du erzeugst also in deiner schleife n Events [ n=XMLChildCount ],
die nicht abgearbeitet werden und für die kein refresh stattfindet.

wenn du den effekt (welchen auch immer) sehen willst, musst du dieses event abarbeiten.
du kannst also entweder deine schleife um ein "While WindowEvent() : Wend" erweitern,
was fishy ist, weil sie alle in der zeit anfallenden events verschlucken würde,

oder du verzichtest auf die for/next-schleife und erstellst eine korrekte
Eventschleife mit counter innerhalb derer du deine ChildXMLNodes ausliest.

Verfasst: 20.08.2007 10:55
von SimonSimCity
Kiffi hat geschrieben:Die Bildverknüpfung ist kapoot
Das Forum hat was gegen Linux-Server und Groß-und-Kleinschreibung...

Kaeru Gaman hat geschrieben:@Simon

SetGadgetState() erzeugt ein event.

du erzeugst also in deiner schleife n Events [ n=XMLChildCount ],
die nicht abgearbeitet werden und für die kein refresh stattfindet.

wenn du den effekt (welchen auch immer) sehen willst, musst du dieses event abarbeiten.
du kannst also entweder deine schleife um ein "While WindowEvent() : Wend" erweitern,
was fishy ist, weil sie alle in der zeit anfallenden events verschlucken würde,

oder du verzichtest auf die for/next-schleife und erstellst eine korrekte
Eventschleife mit counter innerhalb derer du deine ChildXMLNodes ausliest.
:?: :?: :?:
Du sprichst für mich in Rätseln...

Kannst du mir evtl einen BeispielCode senden?

p.s. Der Effekt soll sein:
Ich will einen Statusbalken, der mir anzeigt, wieviel von der XML-Datei schon abgearbeitet ist.

Verfasst: 20.08.2007 11:05
von Kiffi
SimonSimCity hat geschrieben:
Kiffi hat geschrieben:Die Bildverknüpfung ist kapoot
Das Forum hat was gegen Linux-Server und Groß-und-Kleinschreibung...
dann korrigiere das doch bitte. Andere Board-Teilnehmer haben dieses
Problem schließlich auch nicht.
SimonSimCity hat geschrieben: :?: :?: :?:
Du sprichst für mich in Rätseln...
hier noch mal in Kurzform:
Kaeru Gaman hat geschrieben:du kannst also entweder deine schleife um ein "While WindowEvent() : Wend" erweitern,
bedeutet konkret:

Code: Alles auswählen

For i = 1 To XMLChildCount(*Node)
  SetGadgetState(#DDD, i)
  While WindowEvent() : Wend
  __ReadContentFromXML_ForData(iXML.l, ChildXMLNode(*Node, i), bNewContent)
Next i
dann allerdings bitte auch folgendes beachten:
Kaeru Gaman hat geschrieben:was fishy ist

Verfasst: 20.08.2007 11:20
von Kaeru Gaman
so, nachdem das bild da ist... HÄ?

...wieso "Gadget object not initialized"? :shock:

nächstens schreib doch bitte ausführliche beschreibungen

1.
> funktioniert es nicht

= bekomme ich einen "Gadget object not initialized"-error

2.
> den gewünschten Effekt hätte ich gerne

= ich würde gern mein Progressbargadget während des Vorgangs aktualisiert sehen.

--------------
davon ab:
dein Event-Problem besteht trotzdem.

Verfasst: 20.08.2007 11:40
von Kaeru Gaman
mit absicht doppelposting.

hier ein lösungsvorschlag fürs Eventhandling

Code: Alles auswählen

; **********************************************
; ***
; *** SetGadgetState_Demo.pb
; ***
; *** Eventhandling on Gadgets' content change
; *** and variable Event waiting
; ***
; *** PB Ver 4.02
; ***
; *** Kaeru Gaman, 2007-08-20
; ***
; **********************************************

EnableExplicit
#PB_Event_TimeOut = 0

Enumeration 
  #Gadget_GoButton
  #Gadget_Counter
  #Gadget_ProgressBar
EndEnumeration

Define.l EvID, GadID, EXIT, Flood, Counter

OpenWindow( 0, #PB_Ignore, #PB_Ignore, 200, 100, "SetGadgetState - Event")
  CreateGadgetList(WindowID(0))
    ButtonGadget( #Gadget_GoButton, 20, 20, 60, 20, "GO")
    StringGadget( #Gadget_Counter, 145, 20, 35, 20, "-")
    ProgressBarGadget( #Gadget_ProgressBar, 20, 60, 160, 20, 0, 1023)

Repeat
  If Flood = 0
    EvID = WaitWindowEvent()
  Else
    EvID = WindowEvent()
    ;Delay(1)
  EndIf
  
  GadID = EventGadget()
  
  Select EvID
  ;{ *** TimeOut
    Case #PB_Event_TimeOut
      If Flood
        Counter +1
        If Counter < 1024
          SetGadgetText(#Gadget_Counter, Str(Counter))
          SetGadgetState(#Gadget_ProgressBar, Counter)
        Else
          Flood = 0
        EndIf
      EndIf
  ;} ***

  ;{ *** Gadgets
    Case #PB_Event_Gadget
      Select GadID
        Case #Gadget_GoButton
          If Flood = 0
            Flood = 1
            Counter = 0
          EndIf
      EndSelect
  ;} ***

  ;{ *** End
    Case #PB_Event_CloseWindow
      EXIT = 1
  ;} ***
  EndSelect

Until EXIT = 1

Verfasst: 20.08.2007 11:42
von SimonSimCity
Sagt das Bild nich schon alles?
Oder soll ich euch noch den Rest des über 700-Zeilen Codes posten??

<) <)

Aber in diesem Code sehe ich nicht den geringsten Sinn, tut mir leid...

Verfasst: 20.08.2007 11:47
von PureLust
SimonSimCity hat geschrieben:Sagt das Bild nich schon alles?
Sagen die Postings von Kiffi und Kaeru mit den diversen Hinweisen auf Dein mangelhaftes Event-Handling nicht schon alles? :?

Verfasst: 20.08.2007 11:52
von Kiffi
SimonSimCity hat geschrieben:Sagt das Bild nich schon alles?
das Bild sagt lediglich aus, dass Du anscheinend eine fehlerhafte
PB-Installation hast. Wenn Du ein Gadget erstellst und 2 Zeilen darunter eine
Fehlermeldung bekommst, dass es nicht initialisiert ist, dann ist was an
Deinem System faul.

Wenn Kaeru, PureLust und ich Deinen begleitenden Text richtig
interpretieren, dann hast Du ein Problem mit dem Eventhandling. Das hat
aber nicht das geringste mit dem von Dir gezeigten Bild zu tun.
SimonSimCity hat geschrieben:Aber in diesem Code sehe ich nicht den geringsten Sinn, tut mir leid...
... vielleicht sollten wir den Thread in das Anfängerforum schieben. Da ist er
meines Erachtens besser aufgehoben.