[Gelöst] - Problem mit SetGadgetState()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

[Gelöst] - Problem mit SetGadgetState()

Beitrag 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...
Zuletzt geändert von SimonSimCity am 20.08.2007 14:04, insgesamt 4-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem mit SetGadgetState()

Beitrag von Kiffi »

Die Bildverknüpfung ist kapoot
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag 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...
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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? :?
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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.
a²+b²=mc²
Antworten