Funktioniert bei PB 6.01 der Editor nicht richtig???

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

Funktioniert bei PB 6.01 der Editor nicht richtig???

Beitrag von cyerangle »

Hallo zusammen,
es kommt mir so for als würde der PB Editor nicht richtig funktionieren. Es wir ein Fenster mit gelben Hintergrung geöffnet. Ober ist ein schwarzes
Rechteck für eine Statuszeile. Im gelben Bereich sind 8 StringGedget mit den Zahlen 1 bis 8. Neben den Zahlen sind jeweils 3 Würfelbilder.
Hier das Programm:

Code: Alles auswählen

Enumeration Windows
  #HauptFenst
EndEnumeration

Enumeration  gadget
  #Schalter
EndEnumeration

Enumeration 
  #Str3
  #Str4
  #Str5
 
  #StrA
  #StrB
  #StrC
  #StrD
  #StrE
  #StrF
  #StrG
  #StrH
  #StrJ
  #StrK
EndEnumeration

UseJPEGImageDecoder()
Global Dim ImgAdr(7)

nr.i = 0
Define.i Image_1, Image_2, Image_3, Image_4, Image_5, Image_6

; speichert die Speicheradressen in Array
ImgAdr(0) = CatchImage(#PB_Any, ?Image_flieg)
ImgAdr(1) = CatchImage(#PB_Any, ?Image_WF_1)
ImgAdr(2) = CatchImage(#PB_Any, ?Image_WF_2)
ImgAdr(3) = CatchImage(#PB_Any, ?Image_WF_3)
ImgAdr(4) = CatchImage(#PB_Any, ?Image_WF_4)
ImgAdr(5) = CatchImage(#PB_Any, ?Image_WF_5)
ImgAdr(6) = CatchImage(#PB_Any, ?Image_WF_6)
ImgAdr(7) = CatchImage(#PB_Any, ?Image_Pfeil)

HaupFenst_1 = OpenWindow(#PB_Any, 5, 5, 808, 688, "Shock out", #PB_Window_SystemMenu)
SetWindowColor(HaupFenst_1, RGB(254,255,0))
FrameGadget(2, 5, 0, 800, 52, "", #PB_Frame_Double)

StringGadget(#StrA, 24, 96, 32, 24, " 1")
SetGadgetColor(#StrA ,#PB_Gadget_BackColor, $0000FF) ;  Aktueller Spieler ist immer rot
StringGadget(#StrB, 400, 96, 32, 24, "  2")
StringGadget(#StrC, 24, 182, 32, 24, "  3")
StringGadget(#StrD, 400, 176, 32, 24, "  4")
StringGadget(#StrE, 24, 256, 32, 24, "  5")
StringGadget(#StrF, 400, 248, 32, 24, "  6")
StringGadget(#StrG, 24, 330, 32, 24, "  7")
StringGadget(#StrH, 400, 328, 32, 24, "  8")
StringGadget(#StrJ, 6, 7, 40, 24, "ABCD")

Image_1 = ImageGadget(#PB_Any, 72, 88, 51, 68, ImageID(ImgAdr(0)), #PB_Image_Border)
Image_2 = ImageGadget(#PB_Any, 160, 88, 51, 68, ImageID(ImgAdr(0)), #PB_Image_Border)
Image_3 = ImageGadget(#PB_Any, 232, 88, 51, 68, ImageID(ImgAdr(0)), #PB_Image_Border)
Image_4 = ImageGadget(#PB_Any, 456, 88, 51, 68, ImageID(ImgAdr(0)), #PB_Image_Border)
Image_5 = ImageGadget(#PB_Any, 536, 88, 51, 68, ImageID(ImgAdr(0)), #PB_Image_Border)
Image_6 = ImageGadget(#PB_Any, 616, 88, 51, 68, ImageID(ImgAdr(0)), #PB_Image_Border)

Repeat
  Ereign = WaitWindowEvent()
  Select Ereign
    Case #PB_Event_Gadget
      Select  EventGadget()
        Case #Schalter
          If nr = 7
            nr = 0
          Else
            nr + 1
          EndIf 
          ImageGadget(#PB_Any, 72, 88, 51, 68, ImageID(ImgAdr(nr)), #PB_Image_Border) 
          ;SetGadgetState(#PB_Any, ImageID(ImgAdr(nr)))
      EndSelect
  EndSelect
          
Until Ereign = #PB_Event_CloseWindow

DataSection
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_fl.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"
  Image_Pfeil:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Pf_l.jpg"
EndDataSection
Jetzt mein Problen die 3 #Str3 bis #Stg5 im Enummeration Block beötige ich nicht aber wenn ich auch nur einen auskomentiere wird
oben das graue Rechteck nicht angezeigt. Lösche ich die #Str3 bis #Str5 wird da Rechtteck auch nicht angezeigt. Ist das bei Euch auch so?

Was kann ich tun
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Funktioniert bei PB 6.01 der Editor nicht richtig???

Beitrag von HeX0R »

Du solltest wenn schon, alle Gadgets durch Konstanten in der Enumeration definieren.
Dein Frame Gadget hat die fixe Nummer 2.
Dein erstes Gadget in der Enumeration, das Du nutzen möchtest (#StrA) hat den Wert 3.
Machst Du jetzt einen der unnötigen (z.B. #Str3) weg, wird #StrA zu 2, d.h. Du überschreibst das Frame Gadget!
cyerangle
Beiträge: 46
Registriert: 15.10.2022 13:46
Computerausstattung: Apple iMac 8 GB 3TB

Re: Funktioniert bei PB 6.01 der Editor nicht richtig???

Beitrag von cyerangle »

Hallo HeXOR danke für Deinen Tipp. Ich arbeite normal wo es geht mit PB_Any. Da ich ber bei den 8 StringGadgets mit 2 Hintergrundfarben
arbeite und SetGadgetColor kein #PB_Any kennt bin ich da auf die Enummeration ausgewichen. FrameGadget habe ich aus einerr Hilfe im Internet
und daa ist mir entgangen, das ich dort #PB_Any vergessen hatte. Das habe ich jetzt geändert und es läuft.

Nochmals Danke
Vielen Dank an Euch :praise:
und viele Grüsse
Mike
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Funktioniert bei PB 6.01 der Editor nicht richtig???

Beitrag von HeX0R »

Ich glaube hier sind so einige Verständnisprobleme.
#PB_Any wird benutzt um neue (dynamische) Objekte zu erstellen, seien es Windows, Gadgets, Images, usw...
Wieso also sollte SetGadgetColor() #PB_Any unterstützen? Da wird nix neu erstellt, es wird auf ein bereits erstelltes Gadget angewandt.
Dabei spielt es keine Rolle, ob das Gadget vorher mit Konstanten, Zahlen oder #PB_Any erstellt wurde.

Außerdem, würde ich eher empfehlen Konstanten-Enumerationen für fixe Gadgets zu nehmen, vernünftige Konstantennamen und der Code bleibt auch übersichlich.
#PB_Any, nur für solche Gadgets, die Du dynamisch erstellen musst.
In Deinem Code sehe ich überhaupt keine Notwendigkeit für dynamische Gadgets, einmal erstellt, bleiben die alle wo sie sind.
Nachteil bei #PB_Any ist auch, dass Du jede Menge Variablen mit Dir rumschleppen musst.
Konstanten kosten keinen Speicherplatz (wobei das natürlich heutzutage vernachlässigbar ist).

Übrigens hat Dein "#Schalter"-Gadget, dass Du in der Eventschleife abfrägst den selben Wert wie #Str3, da #Schalter in Deinem Beispielcode nicht bestückt wird, gehe ich davon aus, im richtigen Programm wird damit ein Gadget erstellt.
Also aufpassen, sonst rennst Du ins selbe Problem.
Gadgets gehören ALLE in EINE Enumeration!
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Funktioniert bei PB 6.01 der Editor nicht richtig???

Beitrag von mk-soft »

Ich packe dir mal mein Template als Basic wie Enumeration sein sollte hier hin.

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
  #MainEdit
  #MainButtonOk
  #MainButtonCancel
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

Enumeration Images
  ;
EndEnumeration

Enumeration Fonts
  ;
EndEnumeration

; ----

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
  ; Resize gadgets
  ResizeGadget(#MainEdit, 5, 5, dx - 10, dy - 45)
  ResizeGadget(#MainButtonok, 10, dy - 35, 120, 30)
  ResizeGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30)
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()
    EditorGadget(#MainEdit, 5, 5, dx -10, dy - 45)
    ButtonGadget(#MainButtonok, 10, dy - 35, 120, 30, "Ok")
    ButtonGadget(#MainButtonCancel, dx - 130, dy - 35, 120, 30, "Abbruch")
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    ; 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()
            Case #MainEdit
              Select EventType()
                Case #PB_EventType_Change
                  ;
                  
              EndSelect
              
            Case #MainButtonOk
              ;
            Case #MainButtonCancel
              ;
              
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

End
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten