Bilder mit Executable schicken

Anfängerfragen zum Programmieren mit PureBasic.
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Bilder mit Executable schicken

Beitrag von cyerangle »

Hallo zusammen,
ich schreibe an einem Wüfelspiel und möchte die 7 Würfelbilder ( Würfel von 1 - 6 und 1 fliegender Würfel) mit dem Programm mitschicken.
Ich mache das mit :

Code: Alles auswählen

DataSection
  Image_WF_1:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
  Image_WF_2:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
  Image_WF_3:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
  Image_WF_4:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
  Image_WF_5:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
  Image_WF_6:   
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
EndDataSection
Dann rufe ich die Bilder mit CatchImage() auf das klappt gut.
Nun möchte ich aber eine Prozedur schreiben wo die mit dem Zufallgenerator gewürfeltenZahlen den Bildern zugeordnet werden dazu habe ich eine
Select Schleife von 1 bis 6 für die gewürfelten werte doch dann findet das Programm die Sprungmarke nicht.

bei werft = ?Image_WF_1 sagt er mir : Label not found(?Image_WF_1)

die gleiche Fehlermeldung kommt wenn ich es mit einem Zeiger versuche *zeig1 = ?Image_WF_1

bitte konnt Ihr mir helfen???

Danke Mike
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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

Re: Bilder mit Executable schicken

Beitrag von NicTheQuick »

Ohne Code kann ich nur raten: Label funktionieren nur im selben Scope. Das heißt wenn du ein Label im Hauptcode definierst, existiert er in einer Procedure nicht, und umgekehrt.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Bilder mit Executable schicken

Beitrag von jacdelad »

Ich würde die Bilder alle beim Programmstart laden und die Handles in einer Map speichern, mit den Bezeichnungen "1" bis "6". Dann kannst du sie aus der Map supereinfach per Zufall abrufen.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: Bilder mit Executable schicken

Beitrag von Lord »

Das funktioniert bei mir im Prinzip so:

Code: Alles auswählen

Dim ImgAdr(6)

Procedure ReadImgAdr()
  Shared ImgAdr()
  ImgAdr(0)=?Image_flieg
  ImgAdr(1)=?Image_WF_1
  ImgAdr(2)=?Image_WF_2
  ImgAdr(3)=?Image_WF_3
  ImgAdr(4)=?Image_WF_4
  ImgAdr(5)=?Image_WF_5
  ImgAdr(6)=?Image_WF_6
EndProcedure
Procedure RollDice()
  Shared ImgAdr()
;   Debug ImgAdr(Random(6, 0))
  Debug ImgAdr(Random(6, 1))
EndProcedure

ReadImgAdr()
RollDice()

DataSection
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
  Image_WF_1:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
  Image_WF_2:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
  Image_WF_3:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
  Image_WF_4:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
  Image_WF_5:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
  Image_WF_6:   
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
EndDataSection
Bild
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Re: Bilder mit Executable schicken

Beitrag von cyerangle »

Hallo Lord,
ich habe das Programm etwas am meine Bedürfnisse angepasst, aber nun sagt er mir in Enumeration sind nur konstanten. erlaubt.
Hier mein Programm.

Code: Alles auswählen

Dim ImgAdr(6)

Global Image_25, Image_26, Image_27

Enumeration FormImage
  #Img_Hf_1_0
  #Img_Hf_1_1    ;;;   0 bis 2 für Würfel
  #Img_Hf_1_2
EndEnumeration

Enumeration Fenster
  #HaupFenst


Procedure ReadImgAdr()
  Shared ImgAdr()
  ImgAdr(0)=?Image_flieg
  ImgAdr(1)=?Image_WF_1
  ImgAdr(2)=?Image_WF_2
  ImgAdr(3)=?Image_WF_3
  ImgAdr(4)=?Image_WF_4
  ImgAdr(5)=?Image_WF_5
  ImgAdr(6)=?Image_WF_6
EndProcedure
Procedure RollDice()
  Shared ImgAdr()
  Debug ImgAdr(Random(3, 1))
  Debug ImgAdr(Random(3, 1))
  Debug ImgAdr(Random(3, 1))
  Debug ?Image_WF_1
  Debug ?Image_WF_2
  Debug ?Image_WF_3
EndProcedure

ReadImgAdr()
RollDice()
CatchImage(#Img_Hf_1_0, ?Image_WF_0)

;CatchImage(#Img_Hf_1_0, ?Image_WF_4)
;CatchImage(#Img_Hf_1_0, ?Image_WF_6)

HauptFenst_1 = OpenWindow(#HaupFenst , 0, 0, 808, 688, "Shock out", #PB_Window_SystemMenu)
SetWindowColor(#HaupFenst, RGB(254,255,0))
;Image_25 = ImageGadget(#PB_Any, 200, 472, 51, 68, ImageID(#Img_Hf_1_0), #PB_Image_Border)
;Image_26 = ImageGadget(#PB_Any, 304, 472, 51, 68, ImageID(#Img_Hf_1_6), #PB_Image_Border)
;Image_27 = ImageGadget(#PB_Any, 400, 472, 51, 68, ImageID(#Img_Hf_1_6), #PB_Image_Border)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

DataSection
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
  Image_WF_1:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
  Image_WF_2:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
  Image_WF_3:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
  Image_WF_4:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
  Image_WF_5:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
  Image_WF_6:   
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
EndDataSection
Was mache ich falsch
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Re: Bilder mit Executable schicken

Beitrag von cyerangle »

Sorry irgend wie wurde ein EndEnumeration bei mir gelöscht. Jetzt meckert er in Zeile 45
Das können doch nur Flüchtikeitsfehler von mir sein
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Bilder mit Executable schicken

Beitrag von mk-soft »

Nicht jedesmal das Image mit CatchImage überschreiben.
Einmal am Anfang alle Bilder einmal übernehmen und dann nach Zufall zum ImageGadget zuweisen

Da ich die Bilder nicht habe, mit #Demo = 1 Dummy Bilder erstellt

Code: Alles auswählen

;-TOP

#ProgramTitle = "Main Window"
#ProgramVersion = "v1.01.2"

Enumeration Windows
  #Main
EndEnumeration

Enumeration MenuBar
  #MainMenu
EndEnumeration

Enumeration MenuItems
  #MainMenuAbout
  #MainMenuExit
EndEnumeration

Enumeration Gadgets
  #MainImage
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

; ----

UseJPEGImageDecoder()

Global Dim MyImage(6)

#Demo = 1

Procedure InitImages()
  CompilerIf Not #Demo
    MyImage(0) = CatchImage(#PB_Any, ?Image_flieg)
    MyImage(1) = CatchImage(#PB_Any, ?Image_WF_1)
    MyImage(2) = CatchImage(#PB_Any, ?Image_WF_2)
    MyImage(3) = CatchImage(#PB_Any, ?Image_WF_3)
    MyImage(4) = CatchImage(#PB_Any, ?Image_WF_4)
    MyImage(5) = CatchImage(#PB_Any, ?Image_WF_5)
    MyImage(6) = CatchImage(#PB_Any, ?Image_WF_6)
  CompilerElse
    MyImage(0) = CreateImage(#PB_Any, 200, 200, 32, RGB(255,255,255))
    MyImage(1) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(2) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(3) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(4) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(5) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(6) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
  CompilerEndIf
EndProcedure

; ----

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
  ; Resize gadgets
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
    ; Menu
    CreateMenu(#MainMenu, WindowID(#Main))
    MenuTitle("&File")
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
      MenuItem(#PB_Menu_About, "")
    CompilerElse
      MenuItem(#MainMenuAbout, "About")
    CompilerEndIf
    ; Menu File Items
    
    CompilerIf Not #PB_Compiler_OS = #PB_OS_MacOS
      MenuBar()
      MenuItem(#MainMenuExit, "E&xit")
    CompilerEndIf
    
    ; StatusBar
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
    ImageGadget(#MainImage, 10, 10, 200, 200, 0)
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    ; Init Program
    InitImages()
    
    AddWindowTimer(#Main, 1, 1000)
    
    ; Event Loop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case #Main
              Break
              
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS   
              Case #PB_Menu_About
                PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
                
              Case #PB_Menu_Preferences
                
              Case #PB_Menu_Quit
                PostEvent(#PB_Event_CloseWindow, #Main, #Null)
                
            CompilerEndIf
            
          Case #MainMenuAbout
            MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
              
          Case #MainMenuExit
            PostEvent(#PB_Event_CloseWindow, #Main, #Null)
            
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
              
          EndSelect
          
        Case #PB_Event_Timer
          Select EventTimer()
            Case 1
              nummer = Random(6)
              SetGadgetState(#MainImage, ImageID(MyImage(nummer)))
              StatusBarText(#MainStatusBar, 0, "Nummer: " + nummer)
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

CompilerIf Not #Demo
  
  DataSection
    Image_WF_1:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
    Image_WF_2:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
    Image_WF_3:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
    Image_WF_4:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
    Image_WF_5:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
    Image_WF_6:   
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
    Image_flieg:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
  EndDataSection
  
CompilerEndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Re: Bilder mit Executable schicken

Beitrag von cyerangle »

Hallo zusammen besonderrs MK-Soft,
Ich habe Dein Programm direkt einmal ausprobiert, und da sind mir benahe die Ohren abgefallen.

Da sind Sachen drinnen, von denen habe ich noch nichts gehört, oder die sind in der Hilfe in der Frorm nicht zu finden. z.B.
steht in der Hilfe nicht das man Randam() auch mit Hexea Zahlen betreiben kann. auch die ganzen Compiler Direktiven habe ich mir noch nie
angesehen. Zum Glück habe ich ab morgen anderthalb Wochen Urlaub da werde ich mein Tablet mitnehmen und mich mit dem Programm
befassen. Was ich dann nicht verstehe werde ich hier posten und hoffe, da jemand von Euch mir unter die Arme greifen kann.

Vielen Dank Mike
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Antworten