[Gelöst] - Problem mit SetGadgetState()

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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

dann ist es vielleicht etwas viel auf einmal.

hier nochmal die codezeilen, die den Kernpunkt beschreiben:

Code: Alles auswählen

#PB_Event_TimeOut = 0

Repeat
  EvID = WaitWindowEvent(10) ; als beispiel 10ms
  Select EvID
    Case #PB_Event_TimeOut
          SetGadgetState(#Gadget_ProgressBar, Counter)
  EndSelect
Until EXIT = 1
----------------------------------------------------

> ... vielleicht sollten wir den Thread in das Anfängerforum schieben. Da ist er
> meines Erachtens besser aufgehoben.

stattgegeben
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 »

Bitte Clicken: http://simonsimcity.si.ohost.de/weitererfehler.jpg
Bild ist immer noch zu groß - Kaeru fecit

....


Sag mir, was hab ich jetzt wieder falsch gemacht???

Ich hab deine Anweisung genau befolgt!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Kiffi hat geschrieben:
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.
dein aktuelles problem, dass dein gadget nicht erkannt wird,
hat nichts mit deinem event-handling-problem zu tun.

bei sowas ist aber ne ferndiagnose extrem schwierig.
es könnte wirklich an einer fehlerhaften installation liegen,
denn es sieht auf dem bild tatsächlich so aus,
als ob das gadget grad eben initialisiert wurde, und jetzt ist es nicht vorhanden.
Zuletzt geändert von Kaeru Gaman am 20.08.2007 13:40, insgesamt 1-mal geändert.
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:
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.
Und was soll ich deines Erachtens nach tun?
PureBasic zum 5. Mal deinstallieren und neu aufspielen, oder mein System zum min.10. Mal neu aufsetzen?

Kaeru Gaman hat geschrieben: dein aktuelles problem, dass dein gadget nicht erkannt wird,
hat nichts mit deinem event-handling-problem zu tun.
d.h.??
Was muss ich tun, damit ich das Gadget bekommen kann??
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nuja... du hast aber auch kein eventhandling in der schleife...
kein WindowEvent oder WaitWindowEvent...
also, welches EvID willst du da eigentlich prüfen.

außerdem steckt das alles in einer Proc... steckt es am ende noch in einem thread?

ich hab keine ahnung, wo da der fehler liegt, aber ich hab beim programmieren schon mehr als einmal pferde vor die apotheke kotzen sehen.

kann sein, dass der fehler wo ganz andreas verursacht wird.

ich würde ja fast vorschlagen, dass du deinen kompletten code mal zum download bereitstellst,
damit man mal reinschaun kann.

aber anscheinend benutzt du ja auch ne beta von 4.1,
vermute ich jedenfalls mal anhand der XML-geschichten.
da könnte ich dir auch nicht weiterhelfen, weil ich noch 4.02 benutze.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Wie wäre es mal damit, Rückgabewerte zu prüfen? Wurde das Fenster
korrekt erstellt? Wurde die GadgetList korrekt erstellt? Wurde das Gadget
korrekt erstellt? Und bei dem Select hast du einfach EvID hingeschrieben
anstatt WaitWindowEvent(1).

Hier mal meine Idee zur Verwirklichung:

Code: Alles auswählen

  ;...vorheriger Code...
  
  If OpenWindow(23, 244, 202, 290, 40, "Fortschritt", #PB_Window_BorderLess)
    If CreateGadgetList(WindowID(23))
      ProgressBarGadget(22, 0, 0, 290, 40, 0, 100)
      
      #PB_Event_TimeOut = 0
      If XMLChildCount(*Node)
        Repeat
          If WindowEvent() = 0
            i + 1
            __ReadContentFromXML_ForData(iXML, ChildXMLNode(*Node, i), bNewContent)
            SetGadgetState(22, Counter)
          EndIf 
        Until i = XMLChildCount(*Node)
      EndIf
      
      CloseWindow(23) ;Gadget wird automatisch 'gefreet' ;)
    Else
      MessageRequester("Fehler", "CreateGadgetList()")
    EndIf
  Else
    MessageRequester("Fehler", "OpenWindow()")
  EndIf
EndProcedure
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Probiere doch erst einmal die Beispiele zu den Gadget aus.

Ein Fenster mit einem Gadget. Nix aufregendes.

Vielleicht tritt der Fehler ja auch nicht bei allen Gadgets auf :?

Schalte ruhig auch EnableExplicit

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 200, "Gadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ProgressbarGadget(0, 10, 10, 200, 20,0,100)
  SetGadgetState(0,30)
  Repeat
  
    
  Until WaitWindowEvent() = #PB_Event_CloseWindow
   
EndIf
Wenn da schon Fehler auftauchen, dann gute Nacht :shock: :allright:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@NicTheQuick

aua.. danke.
den Rat hätt ich ihm gleich geben sollen.

...das war wieder so ne baum und wald geschichte... Bild
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 »

Die Lösung hat man nicht auf den 1. Blick gesehen :)

Ich habe folgende 2 Proceduren zum Auslesen der XML-Datei bekommen und auch dort das Problem bereits behoben...
Kam halt daher, dass diese 2 Proceduren nicht selbst geschrieben habe, sonst hätte ich den Fehler schon viel früher gemerkt...

Code: Alles auswählen

Procedure __ReadContentFromXML_ForData(iXML.l, *Node, bNewContent.b = #False)
  Protected i.l
  
  If XMLStatus(iXML) <> #PB_XML_Success
    Debug "ERROR"
    Debug Str(XMLErrorLine(iXML))+":"+Str(XMLErrorPosition(iXML))
    Debug XMLError(iXML)
    CallDebugger
  EndIf
  
  If XMLNodeType(*Node) = #PB_XML_Normal And LCase(GetXMLNodeName(*Node)) = "phpkit_content"
    bNewContent = #True
    AddElement(Content())
  EndIf
  
  If bNewContent
    Select LCase(GetXMLNodeName(*Node))
      Case "content_id"             : Content()\id             = Val(GetXMLNodeText(*Node))
      Case "content_cat"            : Content()\cat            = Val(GetXMLNodeText(*Node))
      Case "content_time"           : Content()\time           = Val(GetXMLNodeText(*Node))
      Case "content_title"          : Content()\title          = GetXMLNodeText(*Node)
      Case "content_autor"          : Content()\autor          = GetXMLNodeText(*Node)
      Case "content_text"           : Content()\text           = GetXMLNodeText(*Node)
      Case "content_altdat"         : Content()\altdat         = GetXMLNodeText(*Node)
      Case "content_altdat2"        : Content()\altdat2        = GetXMLNodeText(*Node)
      Case "content_option"         : Content()\option         = Val(GetXMLNodeText(*Node))
      Case "content_status"         : Content()\status         = Val(GetXMLNodeText(*Node))
      Case "content_subid"          : Content()\subid          = Val(GetXMLNodeText(*Node))
      Case "content_expire"         : Content()\expire         = Val(GetXMLNodeText(*Node))
      Case "content_header"         : Content()\header         = GetXMLNodeText(*Node)
      Case "content_autorid"        : Content()\autorid        = Val(GetXMLNodeText(*Node))
      Case "content_themeid"        : Content()\themeid        = Val(GetXMLNodeText(*Node))
      Case "content_views"          : Content()\views          = Val(GetXMLNodeText(*Node))
      Case "content_rating"         : Content()\rating         = Val(GetXMLNodeText(*Node))
      Case "content_rating_total"   : Content()\rating_total   = Val(GetXMLNodeText(*Node))
      Case "content_comment_status" : Content()\comment_status = Val(GetXMLNodeText(*Node))
      Case "content_rating_status"  : Content()\rating_status  = Val(GetXMLNodeText(*Node))
      Case "content_ubb"            : Content()\ubb            = Val(GetXMLNodeText(*Node))
      Case "content_html"           : Content()\html           = Val(GetXMLNodeText(*Node))
      Case "content_smilies"        : Content()\smilies        = Val(GetXMLNodeText(*Node))
      Case "content_filesize"       : Content()\filesize       = Val(GetXMLNodeText(*Node))
      Case "content_template"       : Content()\template       = GetXMLNodeText(*Node)
      Case "content_teaser"         : Content()\teaser         = GetXMLNodeText(*Node)
      Case "content_related"        : Content()\related        = GetXMLNodeText(*Node)
      Case "phpkit_content"
      Default                                
        Debug "Falscher Eintrag!!! ("+GetXMLNodeName(*Node)+")"
    EndSelect
    SetGadgetItemState(#KalenderGadget, Content()\time, #PB_Calendar_Bold)
  EndIf
  
  

  If XMLChildCount(*Node)
    For i=1 To XMLChildCount(*Node)
      If Not bNewContent
        SetGadgetAttribute(22, #PB_ProgressBar_Maximum, XMLChildCount(*Node))
        SetGadgetState(22, i)
      EndIf
      __ReadContentFromXML_ForData(iXML.l, ChildXMLNode(*Node, i), bNewContent)
    Next i
  EndIf
  
EndProcedure
Procedure.b ReadContentFromXML(XMLFile.s)
  Protected iXML.l = LoadXML(#PB_Any, XMLFile)
  If Not IsXML(iXML)
    ProcedureReturn #False
  EndIf
  OpenWindow(23, 244, 202, 290, 40, "Fortschritt", #PB_Window_BorderLess)
   CreateGadgetList(WindowID(23))
    ProgressBarGadget(22, 0,0,290, 40, 0, 100)

  __ReadContentFromXML_ForData(iXML.l, RootXMLNode(iXML))

  FreeGadget(22)
  CloseWindow(23)
  FreeXML(iXML)
  ProcedureReturn #True
EndProcedure


Vorhin sah das Ende so aus:

Code: Alles auswählen

  
  OpenWindow(23, 244, 202, 290, 40, "Fortschritt", #PB_Window_BorderLess)
   CreateGadgetList(WindowID(23))
    ProgressBarGadget(22, 0,0,290, 40, 0, 100)

  If XMLChildCount(*Node)
    For i=1 To XMLChildCount(*Node)
      __ReadContentFromXML_ForData(iXML.l, ChildXMLNode(*Node, i), bNewContent)
      SetGadgetState(22, i)
    Next i
  EndIf
  
  FreeGadget(22)
  CloseWindow(23)
EndProcedure
Procedure.b ReadContentFromXML(XMLFile.s)
  Protected iXML.l = LoadXML(#PB_Any, XMLFile)
  If Not IsXML(iXML)
    ProcedureReturn #False
  EndIf
  __ReadContentFromXML_ForData(iXML.l, RootXMLNode(iXML))
  FreeXML(iXML)
  ProcedureReturn #True
EndProcedure
Der Fehler lag darin, dass das Window incl Gadget 2x geladen wurde...

Aber das müsste doch eigendlich einen anderen Fehler hervorrufen, oder????
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

fremden fish-code benutzen, und den fehler im eigenen suchen... Bild


aber gut, dann kannst du dich ja jetzt um dein event-handlich problem kümmern...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten