Seite 1 von 1

Problem bei SetGadgetItemText PB 3.92

Verfasst: 16.11.2004 11:13
von Pfaelzer
Hallo Community,

in einem meiner Programme, geschrieben unter 3.91 wird der letzte Eintrag einer ListView geprüft und ggf. abgeändert.

Dies geschah unter 3.91 durch:

Code: Alles auswählen

SetGadgetItemText(#Sql_Anzeige,CountGadgetItems(#Sql_Anzeige)-1,lastcommand$,1)
[/code]

Um den letzten Eintrag zu ermitteln zählte das Programm also alle Einträge (CountGadgetItems) und reduzierte das Ergebnis um 1 (Weil die Listview ja mit dem "0. Eintrag" beginnt.

Nach dem Update auf 3.92 scheint diese Logik allerdings nicht mehr zu funktionieren....

Seltsamerweise scheint es aber zu funktionieren, wenn ich CountGadgetItems nehme und 1 DAZUZÄHLE ???

Beispiel:
Früher:
Liste mit 10 Einträgen. beginnend bei 0. Position 9 soll geändert werden.
CountGadgetItems bringt als Ergebnis 10. -> Das bedeutet die letzte Position wäre 9 also -1.

Jetzt:
Liste mit 10 Einträgen. beginnend bei 0. Position 9 soll geändert werden.
CountGadgetItems bringt als Ergebnis 10. -> Jetzt soll das ganze um 1 erhöht werden - bringt 11 ?
fängt die Listview jetzt bei -1 an zu zählen ?

Hat jemand das selbe Problem bemerkt ?


EDIT: Sorry, habe gerade bemerkt das dies das falsche Forum ist - könnte einer der Admins meinen Beitrag bitte verschieben ?
Entschuldigung..... :(

[EDIT Danilo] Verschoben in "Allgemein"

Verfasst: 16.11.2004 16:01
von Pfaelzer
Hmmm, scheinbar kann hier keiner was dazu sagen.
Ich habe wieder die 3.91 installiert und schon läuft der ganze Spass wieder.
Vielleicht kann der ein oder andere mit Kontakt zum Programmierer das mal melden....

Ach ja, @Admin - vielen Dank für´s verschieben - sorry nochmal....

Verfasst: 16.11.2004 16:23
von Kaeru Gaman
...zwischen 10:00 und 15:00 sind nunmal nicht so viele leute hier drin... :|
...warte mal bis zwischen 17:00 und 23:00... :wink:
...ich sebst hab davon kein plan :mrgreen:

Verfasst: 16.11.2004 16:25
von Pfaelzer
Sollte kein Vorwurf an das Forum sein - sorry wenn´s so rübergekommen ist.... :oops:

Wollte eigentlich nur sagen, das durch ein Downgrade auf 3.91 das Problem wieder behoben ist - mit anderen Worten:
enweder es ist ein Bug oder ein feature ( :roll: ) der 3.92.

Verfasst: 16.11.2004 23:50
von Lars
Ich wüsste nicht, dass das irgendwelchen Sinn ergeben würde, evtl.
testest du mal, ob das an CountGadgetItems() oder an
SetGadgetItemText() liegt und meldest den Bug dann. Ich habe das ganze
übrigens nicht überprüft sondern nur gefolgert, bevor jetzt alle schreieb,
dass es doch geht.

Am besten schreibst du, Pfaelzer, mal einen Testcode, der das Problem
verdeutlicht.

Verfasst: 17.11.2004 09:18
von Pfaelzer
Okay, ich habe ein kleines Testprogramm geschrieben - ich hoffe Ihr kommt damit klar:

Code: Alles auswählen


;Fenster initialisieren
  If OpenWindow(1,1,1,600,400,#PB_Window_SystemMenu | #PB_Window_ScreenCentered,"Testprogramm ListView") = 0
    MessageRequester("Fehler","Konnte Fenster nicht initialisieren")
  EndIf

;GadgetList aufbauen
  If CreateGadgetList(WindowID()) = 0
    MessageRequester("Fehler","CreateGadgetList wurde nicht ausgeführt")
  EndIf

;Ein paar Gadgets definieren
  ListViewGadget(10,1,1,590,300)
  ButtonGadget(20,1,310,100,20,"Eintrag hinzufügen")
  ButtonGadget(21,100,310,200,20,"letzten Eintrag ändern")
  TextGadget(30,400,310,100,20,"Letzer Eintrag:")
  TextGadget(31,500,310,100,20,"ggg")

  
  
;Hauptschleife  
Repeat
  
  ;WindowEvent abfragen
  EventID=WaitWindowEvent()
   
  ;Welches Event ?
  Select EventID
    
    ;Fenster schliessen
    Case #PB_Event_CloseWindow
      Programmende=1
      
    ;Ein GadgetEvent
    Case #PB_EventGadget
        
      ;Welches GadgetEvent
      Select EventGadgetID()
        
        ;Button Eintrag hinzufügen
        Case 20
          
          ;Zufallszahl in Stringvariable schreiben
          text$=Str(Random(1000))
          
          ;Textvariable dem ListView-Gadget hinzufügen
          AddGadgetItem(10,-1,text$)
          
          ;Letzen Eintrag in TextGadget anzeigen
          SetGadgetText(31,GetGadgetItemText(10,CountGadgetItems(10)-1,1))
        
        ;Button Letzten Eintrag ändern
        Case 21
          
          ;Zufallszahl in Stringvariable schreiben
          text$=Str(Random(1000))
          
          ;Position ermitteln
          Position = CountGadgetItems(10) - 1
          
          ;Position ausgeben
          MessageRequester("Testausgabe",Str(Position)) 
          
          ;Letzten ListView-Eintrag ändern
          SetGadgetItemText(10,Position,text$,0)
          
          ;Letzten Eintrag in TextGadget schreiben
          SetGadgetText(31,GetGadgetItemText(10,CountGadgetItems(10)-1,1))
          
      EndSelect
      
      
  EndSelect
  
   
Until Programmende = 1
Nochmals zum Problem - das Programm dürfte dieses noch verdeutlichen:

Unter Version 3.91 wird beim klicken auf den "letzten Eintrag ändern"-Button der letzte Eintrag der ListView geändert und dieser Inhalt auch korrekt in dem TextGadget angezeigt.

Unter Version 3.92 wird beim klicken auf den "letzten Eintrag ändern"-Button der neue Wert VOR den letzten Eintrag geschrieben, der (echte) letzte Eintrag bleibt natürlich im TextGadget stehen.

Ändere ich den Positionswert bei SetGadgetItemText auf CountGadgetItems statt CountGadgetItems-1 fügt er den neuen Wert als neuen Eintrag hinzu statt den bisher letzten äbzuändern - wäre aber mathematisch eh falsch.

Bei CountGadgetItems+1 passiert - entgegen meiner vorherigen Behauptung- garnichts (ist ja auch korrekt so) - sorry.

CountGadgetItems liefert die korrekte Anzahl an Einträgen der ListView zurück - daran liegts also nicht.
Allerdings scheint bei SetGadgetItemText kein bestehender Eintrag geändert zu werden, sondern es wird immer ein neuer hinzugefügt - wie bei AddGadgetItem.


Ich denke hier haben wir einen Bug, oder ?

Edit: Ich habe das Programm noch etwas abgeändert, sodaß er in die Variable Position die Anzahl der Items - 1 ermittelt und diesen Wert per MessageRequester ausgibt - nur um CountGadgetItems zu prüfen.

Verfasst: 17.11.2004 15:34
von Andre
Ich denke hier haben wir einen Bug, oder ?
Ich denke auch. /:->
Werde deshalb dieses Beispiel an Fred zur Prüfung weiterleiten.