Bildwechsel im ImageGadget() funktioniert nicht richtig?

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Bildwechsel im ImageGadget() funktioniert nicht richtig?

Beitrag von AND51 »

Hallo!

Ich habe ein Problem mit dem MageGadget() unter PB 4.00. ich hoffe, es ist kein Bug, abr lieber eine Fehlmeldung zu viel als ein "verschleppter Bug" in PB 5.0 :roll:

Folgendes Problem: Immer, wenn ein ComboBoxGadget verändert wird, soll ein zum Eintrag passendes 16x16 ICO in einem separatem ImageGadget angezeigt werden. Ist leider so kompliziert, weil man den Einträgen in der ComboBox nicht direkt Bilder zuweisen kann.

Das wechseln des Bildes im ImageGadget an sich funktioniert aber nur fehlerhaft: Das neue Bild wird einfach drübergezeichnet. Beim ersten Eintrag in der ComboBox soll nämlich das Bild wieder gelöscht werden. Das geht nicht mit <SetGadgetState(#ImageGadget, 0)> und auch nicht mit einem Dummyicon.

InvalidateRecht_() bzw. UpdateWindow_() zeigen auch keine Wirkung und wären bestenfälls umständliche Workaorunds.

Oder könnte das ganze daran liegen, dass ich gnozales (vTuT :D ) PureLVSORT und PureRESIZE (natürlich die 4.00-Versionen) benutze?

MfG, AND51
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
tobe
Beiträge: 146
Registriert: 14.09.2006 17:33
Wohnort: Oktoberfest

Beitrag von tobe »

hi AND51,

ein kleines test beispiel wäre praktisch :)
PureBasic 4.40 (Windows - x86)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

OK, hier ist es:

Code: Alles auswählen

; Erstelung des Gadgets
	ImageGadget(#container_zugriff_aktion_bild, 215, 255, 16, 16, 0)
	PureRESIZE_SetGadgetResize(#container_zugriff_aktion_bild, 1, 0, 0, 0)



; Hauptschleife mit WaitWIndowEvent(5), hier die Select/Case Abfrage, was im ComboBoxgadget ausgewählt wurde
					Select GetGadgetState(#container_zugriff_aktion)
						Case 0 ; nichts tun
							SetGadgetState(#container_zugriff_aktion_bild, ImageID(#bild_leer16))

						Case 1 ; Abbrechen
							SetGadgetState(#container_zugriff_aktion_bild, ImageID(#bild_abbrechen16))
						
							EndIf
					EndSelect
Ich denke mal, so oder so ähnlich wurde jeder einen Bildwechsel realisieren. Bloß, was mache ich falsch?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
tobe
Beiträge: 146
Registriert: 14.09.2006 17:33
Wohnort: Oktoberfest

Beitrag von tobe »

naja, unter test beispiel hab ich mir eigentlich ein kurzes lauffähiges stück code vorgestellt ;)
so eine art demonstation deines problems
zb sowas: (deinen fehler konnte ich nicht reproduzieren)

Code: Alles auswählen

#container_zugriff_aktion = 0
#container_zugriff_aktion_bild = 1
If OpenWindow(0, 0, 0, 95, 50, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(0))
  ComboBoxGadget(#container_zugriff_aktion, 28, 9, 60, 200)
  AddGadgetItem(#container_zugriff_aktion, -1, "nix")
  ImageGadget(#container_zugriff_aktion_bild,  10, 11, 16, 16, 0)
  For g = 0 To 5
    CreateImage(g, 16, 16)
    StartDrawing(ImageOutput(g))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(3,0, Str(g), $FFFFFF)
    StopDrawing()
    AddGadgetItem(#container_zugriff_aktion, -1, "nr " + Str(g))
  Next
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #container_zugriff_aktion
            index = GetGadgetState(#container_zugriff_aktion)
            If index > 0
              SetGadgetState(#container_zugriff_aktion_bild, ImageID(index-1))
            Else
              SetGadgetState(#container_zugriff_aktion_bild, 0)
            EndIf
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
PureLVSORT und PureRESIZE hab ich nicht installiert
PureBasic 4.40 (Windows - x86)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

> naja, unter test beispiel hab ich mir eigentlich ein kurzes lauffähiges stück code vorgestellt
:oops: Oh, ähhh, entschuldige.

Habe mir deinen Code natürlich angeschaut und damit herumexperimentiert. Kann meinen Fehler da nicht wiederfinden. Ich werde an diesem Problem noch ein bisschen tüfteln.

Ansonsten: Ich habe es so gemacht, dass bei NIX einfach das ImageGadget versteckt wird, klappt ganz gut. Danke für deine Bemühungen!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Gesperrt