Problem bei SetGadgetItemText PB 3.92

Für allgemeine Fragen zur Programmierung mit PureBasic.
Pfaelzer
Beiträge: 10
Registriert: 06.10.2004 15:31

Problem bei SetGadgetItemText PB 3.92

Beitrag 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"
Pfaelzer
Beiträge: 10
Registriert: 06.10.2004 15:31

Beitrag 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....
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Pfaelzer
Beiträge: 10
Registriert: 06.10.2004 15:31

Beitrag 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.
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Pfaelzer
Beiträge: 10
Registriert: 06.10.2004 15:31

Beitrag 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.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Ich denke hier haben wir einen Bug, oder ?
Ich denke auch. /:->
Werde deshalb dieses Beispiel an Fred zur Prüfung weiterleiten.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten