Container als Globals

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Container als Globals

Beitrag von Velindos »

Hallo Leute,
habe gerade meine Container Schaltung auf Globals umgestellt und stehe irgendwie auf der Leitung, die Schalted nicht mehr!

Code: Alles auswählen

EnableExplicit
;- Const
Enumeration
  
EndEnumeration
;- Global
Global Main
Global Container_01
Global Container_02
Global Container_03
Global Container_04
Global Container_05
Global Container_06

Global StatusBar

Global Btn_Im_Container_01
Global Btn_Im_Container_02
Global Btn_Im_Container_03
Global Btn_Im_Container_04
Global Btn_Im_Container_05
Global Btn_Im_Container_06

Global Btn_Container_1
Global Btn_Container_2
Global Btn_Container_3
Global Btn_Container_4
Global Btn_Container_5
Global Btn_Container_6

Global FensterTitel$      = "Container Window"
Global flags
Global ContainerZeiger
Global ContainerMode
Global MyWindowFenster_X  = 667
Global MyWindowFenster_Y  = 732
Global MyButton_X         = (MyWindowFenster_X/6) ;111
Global MyButton_Y         = 20
;
Procedure ShowContainer(index)
  Debug "Index= " + index
  ; ???????????????????????????????????????????????
  For ContainerZeiger =  Container_01 To Container_06
    HideGadget(ContainerZeiger, #True)
  Next
  HideGadget(index, #False)
  ContainerMode = index
EndProcedure
Procedure Main_Window()
  ;{ Window
  flags =  #PB_Window_SystemMenu |#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Invisible
  Main = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,MyWindowFenster_X,MyWindowFenster_Y,FensterTitel$,flags)
  ; Begrenzung auf die vorgebene Grösse
  WindowBounds(Main,MyWindowFenster_X,MyWindowFenster_Y,MyWindowFenster_X,MyWindowFenster_Y)
  ;}
  ;{ StatusBar
  StatusBar =  CreateStatusBar(#PB_Any, WindowID(Main))
  ; StatusBar 0
  AddStatusBarField(MyWindowFenster_X)   
  ;}
  ;{ [01] Container
  Container_01 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_01 = ButtonGadget(#PB_Any,(MyButton_X*0),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_01")
  CloseGadgetList()
  ;}
  ;{ [02] Container
  Container_02 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_02 = ButtonGadget(#PB_Any,(MyButton_X*1),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_02")
  CloseGadgetList()
  ;}
  ;{ [03] Container
  Container_03 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_03 = ButtonGadget(#PB_Any,(MyButton_X*2),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_03")
  CloseGadgetList()
  ;}
  ;{ [04] Container
  Container_04 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_04 = ButtonGadget(#PB_Any,(MyButton_X*3),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_04")
  CloseGadgetList()
  ;}
  ;{ [05] Container
  Container_05 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_05 = ButtonGadget(#PB_Any,(MyButton_X*4),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_05")
  CloseGadgetList()
  ;}
  ;{ [06] Container
  Container_06 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_06 = ButtonGadget(#PB_Any, (MyButton_X*5),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_06")
  CloseGadgetList()
  ;}
  ;{ Fix_Btn
  Btn_Container_1 = ButtonGadget(#PB_Any ,(MyButton_X*0),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 1")
  Btn_Container_2 = ButtonGadget(#PB_Any, (MyButton_X*1),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 2")
  Btn_Container_3 = ButtonGadget(#PB_Any, (MyButton_X*2),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 3")
  Btn_Container_4 = ButtonGadget(#PB_Any, (MyButton_X*3),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 4")
  Btn_Container_5 = ButtonGadget(#PB_Any, (MyButton_X*4),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 5")
  Btn_Container_6 = ButtonGadget(#PB_Any, (MyButton_X*5),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 6")
  ;}
  ;{ Container ON
  HideWindow(Main, #False)                                          
  ;}
EndProcedure
Procedure Main_Events(EEventID,WWindowNr)
  Static Key.l
  Select EEventID
      ;{ SELECT
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget 
      ;  GADGET
      Select EventGadget() 
          ; LEER
        Case Btn_Im_Container_01, Btn_Im_Container_02, Btn_Im_Container_03, Btn_Im_Container_04, Btn_Im_Container_05, Btn_Im_Container_06
          MessageRequester("Info", "Container Btn = "+Str(ContainerMode),#PB_MessageRequester_Ok)
          
        Case Btn_Container_1
          ShowContainer(Container_01)
        Case Btn_Container_2
          ShowContainer(Container_02)
        Case Btn_Container_3
          ShowContainer(Container_03)
        Case Btn_Container_4
          ShowContainer(Container_04)
        Case Btn_Container_5
          ShowContainer(Container_05)
        Case Btn_Container_6
          ShowContainer(Container_06)
      EndSelect
      
      
    Case #PB_Event_Timer
      ;  TIMER
      Select EventTimer()
          ; LEER
      EndSelect
      
      
    Case #PB_Event_Menu
      ;  MENUE
      Select EventMenu()
          ; LEER
      EndSelect
      
      
    Case #WM_KEYUP  
      ; TASTEN
      Key.l = EventwParam()
      ; Debug "#KEYUP:   " + Str(EventwParam())
      Select KEY
        Case 13
          ; LEER
        Case 27
          End
      EndSelect
      ;}
  EndSelect
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- R U N 
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Main_Window()
ShowContainer(Container_01)
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- REPEAT
Define EventID,WindowNr,Key.l
; REPEAT
Repeat
  EventID = WaitWindowEvent()
  WindowNr = EventWindow()
  Select WindowNr
      ;{ PRESENT
    Case Main
      Main_Events(EventID,WindowNr)
      ;}
  EndSelect
ForEver
;}
Jemand einen Tip?

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Container als Globals

Beitrag von NicTheQuick »

Ohne es zu testen kann ich dir das Problem sagen:

Code: Alles auswählen

For ContainerZeiger =  Container_01 To Container_06
    HideGadget(ContainerZeiger, #True)
  Next
Schau dir mal die Werte der Variablen Container_01 bis Container_06 an. Die sind nicht aufsteigend durchnummeriert wie es bei einer Enumeration ist, sondern das sind jetzt Handles, als Pointer im Heapspeicherbereich. Damit funktioniert eine For-Schleife natürlich nicht mehr.
Im Übrigens ist das kein schöner Stil die Variablennamen durchzunummerieren. Nutze besser Strukturen und Arrays. Damit sparst du viel Schreibarbeit und kannst sogar wieder deine For-Schleife benutzen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Container als Globals

Beitrag von RSBasic »

Wenn du sowieso alle Container ausblenden möchtest, kannst du auch alle Container in einem separaten Container einfügen und diesen Container ein- und ausblenden.

Deine Schleife von Container_01 bis Container_06 ist unzuverlässig. Wenn du mal alle Variablen ausgibst, wirst du feststellen, dass die zurückgegebenen IDs unterschiedlich sind, da du #PB_Any verwendest:
36258752
36258944
36259136
36259328
36259520
36259712
Speichere die einzelnen IDs lieber in eine LinkedList.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Container als Globals

Beitrag von Velindos »

Hallo, habe die Sache wie folgt gelöst und die Läuft!

Dachte mir, jemand hat bereits eine einfache Lösung, dann mal die!

Code: Alles auswählen

;-  FKT_561_CONTAINER_004
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Compiler: PB 5.61
; Author:   Franco Velindos
; Date:     21.11.2017
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- Const
Enumeration
 
EndEnumeration
;- Global
Global Main
Global Container_01
Global Container_02
Global Container_03
Global Container_04
Global Container_05
Global Container_06

Global StatusBar

Global Btn_Im_Container_01
Global Btn_Im_Container_02
Global Btn_Im_Container_03
Global Btn_Im_Container_04
Global Btn_Im_Container_05
Global Btn_Im_Container_06

Global Btn_Container_1
Global Btn_Container_2
Global Btn_Container_3
Global Btn_Container_4
Global Btn_Container_5
Global Btn_Container_6

Global FensterTitel$      = "Container Window"
Global flags
Global ContainerZeiger
Global ContainerMode
Global MyWindowFenster_X  = 667
Global MyWindowFenster_Y  = 732
Global MyButton_X         = (MyWindowFenster_X/6) ;111
Global MyButton_Y         = 20
;
Procedure ShowContainer2(index)
  ; Funzt nicht
  Debug "Index= " + index
  ; ???????????????????????????????????????????????
  For ContainerZeiger =  Container_01 To Container_06
    HideGadget(ContainerZeiger, #True)
  Next
  HideGadget(index, #False)
  ContainerMode = index
EndProcedure
Procedure ShowContainer(ContainerIndex)
  ; Die Funzt 
  ; Alle OFF
  HideGadget(Container_01, #True)
  HideGadget(Container_02, #True)
  HideGadget(Container_03, #True)
  HideGadget(Container_04, #True)
  HideGadget(Container_05, #True)
  HideGadget(Container_06, #True)
  ; Welcher soll gechalted Werden ???
  If Container_01 = ContainerIndex
  HideGadget(Container_01, #False)
  ContainerMode = 1
  ElseIf Container_02 = ContainerIndex
  HideGadget(Container_02, #False)
  ContainerMode = 2
  ElseIf Container_03 = ContainerIndex
  HideGadget(Container_03, #False)
  ContainerMode = 3
  ElseIf Container_04 = ContainerIndex
  HideGadget(Container_04, #False)
  ContainerMode = 4
  ElseIf Container_05 = ContainerIndex
  HideGadget(Container_05, #False)
  ContainerMode = 5
  ElseIf Container_06 = ContainerIndex
  HideGadget(Container_06, #False)
  ContainerMode = 6
  EndIf
EndProcedure

Procedure Main_Window()
  ;{ Window
  flags =  #PB_Window_SystemMenu |#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Invisible
  Main = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,MyWindowFenster_X,MyWindowFenster_Y,FensterTitel$,flags)
  ; Begrenzung auf die vorgebene Grösse
  WindowBounds(Main,MyWindowFenster_X,MyWindowFenster_Y,MyWindowFenster_X,MyWindowFenster_Y)
  ;}
  ;{ StatusBar
  StatusBar =  CreateStatusBar(#PB_Any, WindowID(Main))
  ; StatusBar 0
  AddStatusBarField(MyWindowFenster_X)   
  ;}
  ;{ [01] Container
  Container_01 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_01 = ButtonGadget(#PB_Any,(MyButton_X*0),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_01")
  CloseGadgetList()
  ;}
  ;{ [02] Container
  Container_02 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_02 = ButtonGadget(#PB_Any,(MyButton_X*1),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_02")
  CloseGadgetList()
  ;}
  ;{ [03] Container
  Container_03 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_03 = ButtonGadget(#PB_Any,(MyButton_X*2),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_03")
  CloseGadgetList()
  ;}
  ;{ [04] Container
  Container_04 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_04 = ButtonGadget(#PB_Any,(MyButton_X*3),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_04")
  CloseGadgetList()
  ;}
  ;{ [05] Container
  Container_05 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_05 = ButtonGadget(#PB_Any,(MyButton_X*4),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_05")
  CloseGadgetList()
  ;}
  ;{ [06] Container
  Container_06 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  Btn_Im_Container_06 = ButtonGadget(#PB_Any, (MyButton_X*5),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_06")
  CloseGadgetList()
  ;}
  ;{ Fix_Btn
  Btn_Container_1 = ButtonGadget(#PB_Any ,(MyButton_X*0),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 1")
  Btn_Container_2 = ButtonGadget(#PB_Any, (MyButton_X*1),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 2")
  Btn_Container_3 = ButtonGadget(#PB_Any, (MyButton_X*2),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 3")
  Btn_Container_4 = ButtonGadget(#PB_Any, (MyButton_X*3),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 4")
  Btn_Container_5 = ButtonGadget(#PB_Any, (MyButton_X*4),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 5")
  Btn_Container_6 = ButtonGadget(#PB_Any, (MyButton_X*5),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 6")
  ;}
  ;{ Container ON
  HideWindow(Main, #False)                                         
  ;}
EndProcedure
Procedure Main_Events(EEventID,WWindowNr)
  Static Key.l
  Select EEventID
      ;{ SELECT
    Case #PB_Event_CloseWindow
      End
    Case #PB_Event_Gadget
      ;  GADGET
      Select EventGadget()
          ; LEER
        Case Btn_Im_Container_01, Btn_Im_Container_02, Btn_Im_Container_03, Btn_Im_Container_04, Btn_Im_Container_05, Btn_Im_Container_06
          MessageRequester("Info", "Container Btn = "+Str(ContainerMode),#PB_MessageRequester_Ok)
         
        Case Btn_Container_1
          ShowContainer(Container_01)
        Case Btn_Container_2
          ShowContainer(Container_02)
        Case Btn_Container_3
          ShowContainer(Container_03)
        Case Btn_Container_4
          ShowContainer(Container_04)
        Case Btn_Container_5
          ShowContainer(Container_05)
        Case Btn_Container_6
          ShowContainer(Container_06)
      EndSelect
     
     
    Case #PB_Event_Timer
      ;  TIMER
      Select EventTimer()
          ; LEER
      EndSelect
     
     
    Case #PB_Event_Menu
      ;  MENUE
      Select EventMenu()
          ; LEER
      EndSelect
     
     
    Case #WM_KEYUP 
      ; TASTEN
      Key.l = EventwParam()
      ; Debug "#KEYUP:   " + Str(EventwParam())
      Select KEY
        Case 13
          ; LEER
        Case 27
          End
      EndSelect
      ;}
  EndSelect
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- R U N
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Main_Window()
ShowContainer(Container_01)
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- REPEAT
Define EventID,WindowNr,Key.l
; REPEAT
Repeat
  EventID = WaitWindowEvent()
  WindowNr = EventWindow()
  Select WindowNr
      ;{ PRESENT
    Case Main
      Main_Events(EventID,WindowNr)
      ;}
  EndSelect
ForEver
;}
Zu den Vorschlag
Im Übrigens ist das kein schöner Stil ...
meinst du "Global dim Btn_Im_Container(10)", geht das auch bei Gadget´s????

Des weiteren der Vorschlag
Deine Schleife von Container_01 bis Container_06 ist unzuverlässig. Wenn du mal alle Variablen ausgibst, wirst du feststellen, dass die zurückgegebenen IDs unterschiedlich sind, da du #PB_Any verwendest:
Wenn das Ding läuft bleiben doch die Zuordnungen, oder wie????

Noch zu Erklärung meines Vorhaben:
Ich möchte meine Containerschaltung so zerlegen, das ich die einzelnen Container über eine XIncludeFile "Z:\[Pure@Library]\Desk_Container_001.pbi" und unter Zuhilfenahme des Compilerif Befehls, sie getrennt ausprogrammieren und testen kann!

Gruss ... Velindos

PS: Wenn ich angemeldet bleibe, blockiere ich dann die Antworten?
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Container als Globals

Beitrag von RSBasic »

Velindos hat geschrieben:
Deine Schleife von Container_01 bis Container_06 ist unzuverlässig. Wenn du mal alle Variablen ausgibst, wirst du feststellen, dass die zurückgegebenen IDs unterschiedlich sind, da du #PB_Any verwendest:
Wenn das Ding läuft bleiben doch die Zuordnungen, oder wie????
Gemeint war, dass eine Zählschleife (for next) immer auf- oder absteigend zählt.
Wenn du folgendest versuchst:

Code: Alles auswählen

For ContainerZeiger =  Container_01 To Container_06
  HideGadget(ContainerZeiger, #True)
Next
Dann versucht PB folgendes:

Code: Alles auswählen

HideGadget(36258752, #True) ; < Gadget existiert
HideGadget(36258753, #True) ; < Gadget existiert nicht -> Fehler
HideGadget(36258754, #True) ; < Gadget existiert nicht -> Fehler
HideGadget(36258755, #True) ; < Gadget existiert nicht -> Fehler
HideGadget(36258756, #True) ; < Gadget existiert nicht -> Fehler
[...]
HideGadget(36258944, #True) ; < Gadget existiert
HideGadget(36258945, #True) ; < Gadget existiert nicht -> Fehler
HideGadget(36258946, #True) ; < Gadget existiert nicht -> Fehler
HideGadget(36258947, #True) ; < Gadget existiert nicht -> Fehler
HideGadget(36258948, #True) ; < Gadget existiert nicht -> Fehler
[...]
HideGadget(36259136, #True) ; < Gadget existiert
[...]
Erkennst du jetzt deinen Fehler?
Selbst wenn du beispielsweise eine IsGadget-Abfrage einbaust, wäre das ein Performance-Killer, da insgesamt 960 Schleifenvorgänge durchgeführt werden, nur um die 6 Gadgets zu verstecken.
Deshalb sollst du lieber nur die IDs verstecken, die auch existieren. Die IDs kannst du beispielsweise in eine LinkedList speichern oder wie du in deinem zweiten Code gemacht hast, die einzelnen IDs manuell.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Container als Globals

Beitrag von NicTheQuick »

Eigentlich meinte ich es so. Das ist einfach. Du kannst jetzt auch mit der Konstante #maxContainer die Anzahl der Container steuern. Nur die Berechnung der Gadgetgrößen müsstest du noch anpassen.

Code: Alles auswählen

;-  FKT_561_CONTAINER_004
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Compiler: PB 5.61
; Author:   Franco Velindos
; Date:     21.11.2017
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EnableExplicit
;- Const
Enumeration
	
EndEnumeration
;- Global
Global Main

Structure Container
	handle.i
	inButton.i
	outButton.i
EndStructure

#maxContainer = 6
Global Dim containers.Container(#maxContainer - 1)

Global StatusBar

Global FensterTitel$      = "Container Window"
Global flags
Global ContainerZeiger
Global ContainerMode
Global MyWindowFenster_X  = 667
Global MyWindowFenster_Y  = 732
Global MyButton_X         = (MyWindowFenster_X / #maxContainer) ;111
Global MyButton_Y         = 20

Procedure ShowContainer(ContainerIndex)
	Protected i.i
	For i = 0 To #maxContainer - 1
		HideGadget(containers(i)\handle, Bool(i <> ContainerIndex))
	Next
	ContainerMode = ContainerIndex
EndProcedure

Procedure Main_Window()
	;{ Window
	flags =  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_Invisible
	Main = OpenWindow(#PB_Any, #PB_Ignore, #PB_Ignore, MyWindowFenster_X, MyWindowFenster_Y, FensterTitel$, flags)
	; Begrenzung auf die vorgebene Grösse
	WindowBounds(Main, MyWindowFenster_X, MyWindowFenster_Y, MyWindowFenster_X, MyWindowFenster_Y)
	;}
	;{ StatusBar
	StatusBar =  CreateStatusBar(#PB_Any, WindowID(Main))
	; StatusBar 0
	AddStatusBarField(MyWindowFenster_X)   
	;}
	
	Protected i.i
	For i = 0 To #maxContainer - 1
		containers(i)\handle = ContainerGadget(#PB_Any, 0, 0, MyWindowFenster_X, MyWindowFenster_Y - StatusBarHeight(StatusBar) - (MyButton_Y * 2))
		containers(i)\inButton = ButtonGadget(#PB_Any, MyButton_X * i, MyButton_Y * 3, MyButton_X, MyButton_Y, "Container_" + RSet(Str(i + 1), 2, "0"))
		CloseGadgetList()
		containers(i)\outButton = ButtonGadget(#PB_Any , MyButton_X *i, MyWindowFenster_Y - MyButton_Y - StatusBarHeight(StatusBar), MyButton_X, MyButton_Y, "Container " + Str(i + 1))
	Next
	
	;{ Container ON
	HideWindow(Main, #False)                                         
	;}
EndProcedure
Procedure Main_Events(EEventID, WWindowNr)
	Protected eventGadget.i, i.i
	Static Key.l
	Select EEventID
			;{ SELECT
		Case #PB_Event_CloseWindow
			End
		Case #PB_Event_Gadget
			;  GADGET
			eventGadget = EventGadget()
			
			For i = 0 To #maxContainer - 1
				Select eventGadget
					Case containers(i)\inButton
						MessageRequester("Info", "Container Btn = " + Str(i + 1), #PB_MessageRequester_Ok)
					Case containers(i)\outButton
						ShowContainer(i)
				EndSelect
			Next
			
		Case #PB_Event_Timer
			;  TIMER
			Select EventTimer()
					; LEER
			EndSelect
			
			
		Case #PB_Event_Menu
			;  MENUE
			Select EventMenu()
					; LEER
			EndSelect
			
			
; 		Case #WM_KEYUP
; 			; TASTEN
; 			Key.l = EventwParam()
; 			; Debug "#KEYUP:   " + Str(EventwParam())
; 			Select KEY
; 				Case 13
; 					; LEER
; 				Case 27
; 					End
; 			EndSelect
			;}
	EndSelect
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- R U N
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Main_Window()
ShowContainer(0)
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- REPEAT
Define EventID,WindowNr,Key.l
; REPEAT
Repeat
	EventID = WaitWindowEvent()
	WindowNr = EventWindow()
	Select WindowNr
			;{ PRESENT
		Case Main
			Main_Events(EventID,WindowNr)
			;}
	EndSelect
ForEver
;}
Velindos hat geschrieben:PS: Wenn ich angemeldet bleibe, blockiere ich dann die Antworten?
Ähm, nein? :? Wie sollst du das blockieren können?
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Container als Globals

Beitrag von Velindos »

Hallo,
DANKE für eure Erklärungen. Nun, da ich damit meinen Velindos steuere, änderts sich oft was an den Gadget´s in dem Container. Aus diesem Grund verliert man leicht die Übersicht am Projekt! Um das zu vermeiden habe ich vor, die Sache wie folgt zu lösen, um jeden Container einzeln testen zu können und ggf. diese Wunschgemäß einbinden zu können!

1. Ansatz:

Code: Alles auswählen

Procedure Main_Window()
  ;{ Window
  flags =  #PB_Window_SystemMenu |#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Invisible
  Main = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,MyWindowFenster_X,MyWindowFenster_Y,FensterTitel$,flags)
  ; Begrenzung auf die vorgebene Grösse
  WindowBounds(Main,MyWindowFenster_X,MyWindowFenster_Y,MyWindowFenster_X,MyWindowFenster_Y)
  ;}
  ;{ StatusBar
  StatusBar =  CreateStatusBar(#PB_Any, WindowID(Main))
  ; StatusBar 0
  AddStatusBarField(MyWindowFenster_X)   
  ;}
  
  ;{ [01] Container
  XIncludeFile ".\Container_001.pbi"  
  ;}
  ;{ [02] Container
  XIncludeFile ".\Container_002.pbi"  
  ;}
  ;{ [03] Container
  XIncludeFile ".\Container_003.pbi"  
  ;}
  ;{ [04] Container
  XIncludeFile ".\Container_004.pbi"  
  ;}
  ;{ [05] Container
  XIncludeFile ".\Container_005.pbi"  
  ;}
  ;{ [06] Container
  XIncludeFile ".\Container_006.pbi"  
  ;}
  ;{ Fix_Btn
  Btn_Container_1 = ButtonGadget(#PB_Any ,(MyButton_X*0),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 1")
  Btn_Container_2 = ButtonGadget(#PB_Any, (MyButton_X*1),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 2")
  Btn_Container_3 = ButtonGadget(#PB_Any, (MyButton_X*2),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 3")
  Btn_Container_4 = ButtonGadget(#PB_Any, (MyButton_X*3),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 4")
  Btn_Container_5 = ButtonGadget(#PB_Any, (MyButton_X*4),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 5")
  Btn_Container_6 = ButtonGadget(#PB_Any, (MyButton_X*5),MyWindowFenster_Y-MyButton_Y-StatusBarHeight(StatusBar), MyButton_X, MyButton_Y,"Container 6")
  ;}
  ;{ Container ON
  HideWindow(Main, #False)                                         
  ;}
EndProcedure
Des weiteren in der XIncludeFile der folgende:

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;- Container_006.pbi
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Compiler: PB 5.61
; Author:   Franco Velindos
; Date:     21.11.2017
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Global Dim Btn_Im_Container(10)
; XIncludeFile ".\Container_006.pbi" 
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CompilerIf #PB_Compiler_IsMainFile
  ; Nimmt OpenWindow
  
  
  
  
  
  
  
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CompilerElse 
  ;{ [06] Container
  Container_06 = ContainerGadget(#PB_Any,0,0,MyWindowFenster_X,MyWindowFenster_Y-StatusBarHeight(StatusBar)-(MyButton_Y*2))
  ; --------------------------------------
  Btn_Im_Container_06 = ButtonGadget(#PB_Any, (MyButton_X*5),(MyButton_Y*3), MyButton_X, MyButton_Y, "Container_06")
  ; --------------------------------------
  CloseGadgetList()
  ;}
CompilerEndIf
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Eure Vorschläge muss ich erst studieren, da ich die Struktur des Programm schnell erfassen muss, damit ich Änderunge leicht einbauen kann!

Danke für die Plausiblierung des "Globals" sowie für das Beispiel der Containerschaltung mit Struct!

Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Container als Globals

Beitrag von RSBasic »

Velindos hat geschrieben:PS: Wenn ich angemeldet bleibe, blockiere ich dann die Antworten?
Ach du bist es. Ich habe mich schon gewundert, warum ich ständig meine Session verliere und ausgeloggt bin. Ich musste deshalb meine Antworten schon 5x neu schreiben. Wegen dir war sogar NicTheQuick schneller als ich beim Antworten, weil ich mich erst einloggen musste.
:mrgreen:
Alles nur Spaß :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten