Ändern des Image eines Button Image Gadget

Anfängerfragen zum Programmieren mit PureBasic.
Helmut_number_one
Beiträge: 9
Registriert: 19.09.2020 19:13

Ändern des Image eines Button Image Gadget

Beitrag von Helmut_number_one »

Nach über 10 Jahren habe ich mich wieder mit Purebasic beschäftigt und ein Problem:
Ein ButtonImageGadget (Toogle) soll bei Betätigung das Image wechseln.
Da mache ich was falsch, weiß aber nicht weiter woran es liegt.
Grundgerüst ist mit IceDesigner erstellt. Bilder werden richtig geladen, wenn ich sie in der Declaration mal tausche.
Schonmal DANKE für Antworten

Code: Alles auswählen

; -----------------------------------------------------------------------------
;           Name:
;    Description:
;         Author:
;           Date: 2022-12-05
;        Version:
;     PB-Version:
;             OS:
;         Credit:
;          Forum:
;     Created by: IceDesign
; -----------------------------------------------------------------------------

EnableExplicit

;- Enumerations
Enumeration Window
  #Window_0
EndEnumeration

Enumeration Gadgets
  #Img_Backgound
  #LeuchteEsszimmer
EndEnumeration

Enumeration Image
  #Imag_0
  #Imag_1
  #Imag_2
EndEnumeration

;- Load Images
UsePNGImageDecoder()
UseJPEGImageDecoder()

CatchImage(#Imag_0, ?Imag_0)
CatchImage(#Imag_1, ?Imag_1)
CatchImage(#Imag_2, ?Imag_2)

Global AppQuit

;- Declare
Declare Resize_Window_0()
Declare Open_Window_0(X = 0, Y = 0, Width = 600, Height = 600)

Procedure Resize_Window_0()
  Protected ImageBackground

  ImageBackground = CopyImage(#Imag_1, #PB_Any)
  If ImageBackground
    CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      SendMessage_(WindowID(#Window_0), #WM_SETREDRAW, #False, 0)
    CompilerEndIf
    ResizeImage(ImageBackground, DesktopScaledX(WindowWidth(#Window_0)), DesktopScaledY(WindowHeight(#Window_0)))
    SetGadgetState(#Img_Backgound, ImageID(ImageBackground))
    CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      SendMessage_(WindowID(#Window_0), #WM_SETREDRAW, #True, 0)
      RedrawWindow_(WindowID(#Window_0), #Null, #Null, #RDW_INVALIDATE | #RDW_ERASE | #RDW_ALLCHILDREN | #RDW_UPDATENOW)
    CompilerEndIf
  EndIf
EndProcedure

Procedure Open_Window_0(X = 0, Y = 0, Width = 600, Height = 600)
  If OpenWindow(#Window_0, X, Y, Width, Height, "Erdgeschoss", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_NoActivate)
      ; Uncomment to Add Transparency to the Window (Windows Only)
      ;SetWindowLongPtr_(WindowID(#Window_0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(#Window_0), #GWL_EXSTYLE) | #WS_EX_LAYERED) : SetLayeredWindowAttributes_(WindowID(#Window_0), 0, 192, #LWA_ALPHA)   ; Tranparency=192
    ImageGadget(#Img_Backgound, 0, 0, 800, 600, ImageID(#Imag_1))
      DisableGadget(#Img_Backgound, #True)
    ButtonImageGadget(#LeuchteEsszimmer, 190, 400, 32, 32, ImageID(#Imag_2), #PB_Button_Toggle)

    BindEvent(#PB_Event_SizeWindow, @Resize_Window_0(), #Window_0)
    PostEvent(#PB_Event_SizeWindow, #Window_0, 0)
  EndIf
EndProcedure

;- Main Program
Open_Window_0()

;- Event Loop
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      AppQuit = #True

      ;-> Event Gadget
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #LeuchteEsszimmer
          SetGadgetState(#LeuchteEsszimmer, ImageID(#Imag_0)) ; WARUM ändert das Image nicht ????
          MessageRequester("Information", "Button Image Name : #LeuchteEsszimmer")
      EndSelect

  EndSelect
Until AppQuit

;- DataSection
DataSection
  Imag_0: : IncludeBinary "Seewarte\Bulb_32.png"
  Imag_2: : IncludeBinary "Seewarte\Bulb_Off_32.png"
  Imag_1: : IncludeBinary "C:\fp\Haus\MyHomemyCastle3_800_600.jpg"
EndDataSection
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: Ändern des Image eines Button Image Gadget

Beitrag von HeX0R »

Willkommen zurück.

Die Icons eines ButtonImages werden nicht mit SetGadgetState() verändert, siehe auch Hilfe:
https://www.purebasic.com/documentation ... adget.html
Helmut_number_one
Beiträge: 9
Registriert: 19.09.2020 19:13

Re: Ändern des Image eines Button Image Gadget

Beitrag von Helmut_number_one »

Danke für den Willkommensgruß
Das mit den Attributen habe ich nicht verstanden und erkenne beim Lesen auch keine Info darüber.

Code: Alles auswählen

SetGadgetAttribute(#LeuchteEsszimmer,2, ImageID(#Imag_0)) 
Habe jetzt eine 1 gesetzt 0 geht nicht 2 auch noch.

Edit: Durch probieren: Eine 1 toogelt den Button, lädt das neue Bild, das Bild bleibt dann auch bei neuem Tastendruck.
Eine 2 lädt das erste Bild bei erneutem Druck wieder und so weiter.
Das kann ich gebrauchen ;-)

Wie bekomme die Info welcher toogle Zustand gerade da ist?

Und/Oder wie bekomme ich Den ausgelesen?.

Letztendlich soll was geschaltet werden und da brauche ich den Zustand.
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Ändern des Image eines Button Image Gadget

Beitrag von jacdelad »

Steht aber alles in der Hilfe, bei Gadgets -> ButtonImageGadget:

Code: Alles auswählen

SetGadgetAttribute(#Gadget,#PB_Button_PressedImage,ImageID(#Image))
Den Toggle-Zustand bekommst du durch

Code: Alles auswählen

GetGadgetState(#Gadget)
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Helmut_number_one
Beiträge: 9
Registriert: 19.09.2020 19:13

Re: Ändern des Image eines Button Image Gadget

Beitrag von Helmut_number_one »

Ich habe gelernt was Attribute sind ;-)
Debug = GetGadgetState(#LeuchteEsszimmer)
schmeißt Syntax Fehler, laut Hilfe aber richtig....
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ändern des Image eines Button Image Gadget

Beitrag von Kiffi »

Helmut_number_one hat geschrieben: 05.12.2022 17:10 Debug = GetGadgetState(#LeuchteEsszimmer)
schmeißt Syntax Fehler, laut Hilfe aber richtig....
Steht das wirklich so in der Doku?

(Entferne mal das Gleich-Zeichen)
Hygge
Helmut_number_one
Beiträge: 9
Registriert: 19.09.2020 19:13

Re: Ändern des Image eines Button Image Gadget

Beitrag von Helmut_number_one »

So steht es drin und ich wollte keine Variable spendieren, dachte mit Debug geht's auch. DENKEN...
Ergebnis = GetGadgetState(#Gadget)
Vielen Dank euch allen
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Ändern des Image eines Button Image Gadget

Beitrag von Nino »

Helmut_number_one hat geschrieben: 05.12.2022 17:30 dachte mit Debug geht's auch.
Es geht ja auch mit Debug, nur dann eben ohne Gleichheitszeichen (wie Kiffi schon schrieb).
Antworten