Probleme mit HideGadget

Anfängerfragen zum Programmieren mit PureBasic.
Andy76
Beiträge: 11
Registriert: 07.02.2007 15:26

Probleme mit HideGadget

Beitrag von Andy76 »

Hi

Ich möchte in einem Fenster bestimmte Gagets einblenden, je
nach dem welche Eintrag ich in einem Treegaget ausgewählt habe.

Sind erstmal Gagets zu sehen sollen die natürlich wieder gelöcht (versteckt)
werden sobald man einen anderen Eintrag im Treegaget ausgewählt hat.
Und die neuen Gagets solen eingeblendet werden.

Wie macht man das am betsen?
Man könnte IsGaget nehmen um
zu überprüfen ob ein bestimter Gaget schon vorhanden ist und ihn
dann mit HideGadget ausblenden. Das erscheint mir aber sehr komplex
zu werden bei sehr vielen Gagets.

Wie macht man so etwas einfach?

Hier mein kleiner Code:

Code: Alles auswählen


Enumeration
  #Window_0
  #Tree_0
  #Button_0
  #Button_1A
  #Button_2A
  #Button_3A
EndEnumeration

  If OpenWindow(#Window_0, 268, 87, 600, 527, "Danke",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      TreeGadget(#Tree_0, 10, 10, 140, 490, #PB_Tree_AlwaysShowSelection )
      AddGadgetItem (#Tree_0, 0, "Option 1")
      AddGadgetItem (#Tree_0, 1, "Option 2")
      AddGadgetItem (#Tree_0, 2, "Option 3")
      ButtonGadget(#Button_0, 500, 490, 90, 25, "Schließen")
      ButtonGadget(#Button_1A, 240, 240, 80, 30, "Option 1A")    
    EndIf
  EndIf

  Repeat
  
    Select WindowEvent()
            
                Case #PB_Event_Gadget
                Select EventGadget()           
                        
                Case #Tree_0
                markierung = GetGadgetState(#Tree_0)
                    If  markierung = 0
                    ButtonGadget(#Button_1A, 240, 240, 80, 30, "Button 1A")
                    ElseIf  markierung = 1
                    ButtonGadget(#Button_2A, 240, 240, 90, 40, "Button 2A")
                    ElseIf  markierung = 2
                    ButtonGadget(#Button_3A, 240, 240, 100, 50, "Button 3A")
                    EndIf
                
                Case #Button_1A
                MessageRequester("", "Button 1A gedrückt", 0) 
                
                Case #Button_2A
                MessageRequester("", "Button 2A gedrückt", 0) 
                
                Case #Button_3A
                MessageRequester("", "Button 3A gedrückt", 0) 
                
                Case #Button_0
                End
                
                EndSelect
        
    Case #PB_Event_CloseWindow
    End
    
    EndSelect 
       
ForEver 
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du kannst ein array einrichten, wo du flags für deine Gadgets mitführst,
dann weißt du jederzeit ohne überprüfung welchen zustand eines hat.

IsGadget() prüft übrigens nur, ob ein Gadget existiert, nicht ob es versteckt ist.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Oder, alternativ, den API Befehl IsWindowVisible_().
Windows 10 Pro, 64-Bit / Outtakes | Derek
Andy76
Beiträge: 11
Registriert: 07.02.2007 15:26

Beitrag von Andy76 »

Hi

Danke für die Antworten.

Wie macht man das mit dem Array?

Also speichere ich im Array ein 0 für nicht angezeigt und eine 1
für angezeigt.

Wenn ich die Gagets die Angezeigt werden unsichtbar machen will, dann
mache ich eine For to next Schleife und setzte jedes Gaget
das im Array auf 1 steht mit Hidegaget auf unsichtbar.

stimmt das so?

aber wie erzeuge ich denn das Array?
Muss ich dann bei jedem Gaget darunter immer Array(0) = 1,
Array(1) = 1 usw. schreiben

und wenn ich es verstecke Array(0) = 0, Array(1) = 0 machen?

sorry ich bin Anfänger.

Ich werde das mal ausprobieren,
aber kann man das nicht einfacher machen in dem
man einen Containergaget wo sich die Gagets drinnen befinden
sichtbar und unsichtbar macht?

cu
Andy
PB 4.02
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Andy76 hat geschrieben: aber kann man das nicht einfacher machen in dem
man einen Containergaget wo sich die Gagets drinnen befinden
sichtbar und unsichtbar macht?
Waere bei vielen Gadgets wohl sinnvoller.
KGs Vorschlag finde ich nicht so toll, da waere die von Fluid Byte
erwaehnte API besser. Um Flags zu testen kann man auch
GetWindowLong benutzen.

Beispiel :

Code: Alles auswählen

hwnd = OpenWindow(0,0,0,100,100,"")

CreateGadgetList(hwnd)
ButtonGadget(0,0,0,100,20,"")
HideGadget(0,1)

style = GetWindowLong_(GadgetID(0),#GWL_STYLE)

If style & #WS_VISIBLE
  Debug "VISIBLE"
Else
  Debug "Hide"
EndIf
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

Ich weiß zwar nicht, ob so zu aufwendig ist, aber sicherlich eine Lösung:

Code: Alles auswählen

Enumeration
  #Window_0
  #Tree_0
  #Button_0
  #Button_1A
  #Button_1B
  #Button_2B
  #Button_3B
EndEnumeration
  If OpenWindow(#Window_0, 268, 87, 600, 527, "Danke",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      TreeGadget(#Tree_0, 10, 10, 140, 490, #PB_Tree_AlwaysShowSelection )
      AddGadgetItem (#Tree_0, 0, "Option 1")
      AddGadgetItem (#Tree_0, 1, "Option 2")
      AddGadgetItem (#Tree_0, 2, "Option 3")
      ButtonGadget(#Button_0, 500, 490, 90, 25, "Schließen")
      ButtonGadget(#Button_1A, 240, 240, 80, 30, "Option 1A")
      ButtonGadget(#Button_1B, 240, 240, 80, 30, "Button 1B")
      ButtonGadget(#Button_2B, 240, 240, 90, 40, "Button 2B")
      ButtonGadget(#Button_3B, 240, 240, 100, 50, "Button 3B")  
    EndIf
  EndIf
  HideGadget(#Button_1B,1)
  HideGadget(#Button_2B,1)
  HideGadget(#Button_3B,1)
  bid=#Button_1B
  Repeat
 
    Select WindowEvent()
           
                Case #PB_Event_Gadget
                Select EventGadget()           
                       
                Case #Tree_0
                markierung = GetGadgetState(#Tree_0)
                    If  markierung = 0
                    HideGadget(bid,1)
                    HideGadget(#Button_1B,0)
                    bid=#Button_1B
                    ElseIf  markierung = 1
                    HideGadget(bid,1)
                    HideGadget(#Button_2B,0)
                    bid=#Button_2B
                    ElseIf  markierung = 2
                    HideGadget(bid,1)
                    HideGadget(#Button_3B,0)
                    bid=#Button_3B
                    EndIf
               
                Case #Button_1B
                MessageRequester("", "Button 1B gedrückt", 0)
               
                Case #Button_2B
                MessageRequester("", "Button 2B gedrückt", 0)
               
                Case #Button_3B
                MessageRequester("", "Button 3B gedrückt", 0)
               
                Case #Button_0
                End
               
                EndSelect
       
    Case #PB_Event_CloseWindow
    End
   
    EndSelect
       
ForEver 
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Andy76
Beiträge: 11
Registriert: 07.02.2007 15:26

Beitrag von Andy76 »

Hi

ich hab eure Beispile durchprobiert.

Ich hab dann aber gesehen das man ja ein ContainerGaget auch
mit Hidegaget unsichtbar machen kann , inkl. aller darin enthaltenen
Gagets.
(warum bin ich nicht schneler darauf gekommen :( )

Ich hoffe der Code ist so halbwegs gut.
Kann das Probleme verursachen wenn man Gagets versteckt?

Code: Alles auswählen

; PureBasic v4.02 (Windows - x86)
Enumeration
  #Tree_0 
  
  #Container_0
  #Button_1
  #Button_2
  #Button_3
 
  #Container_1
  #Button_4
  #Button_5
  #Button_6
  
  #Container_2
  #Button_7
  #Button_8
  #Button_9
  #Button_99
EndEnumeration

  If OpenWindow(0, 216, 0, 600, 680, "Yup",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(0))
    
      TreeGadget(#Tree_0, 20, 20, 160, 610, #PB_Tree_AlwaysShowSelection)
      AddGadgetItem (#Tree_0, 0, "Option 1")
      AddGadgetItem (#Tree_0, 1, "Option 2")
      AddGadgetItem (#Tree_0, 2, "Option 3")  
     
      ContainerGadget(#Container_0, 200, 20, 380, 610, #PB_Container_BorderLess )
      ButtonGadget(#Button_1, 45, 220, 100, 20, "1")
      ButtonGadget(#Button_2, 145, 280, 100, 20, "1")
      ButtonGadget(#Button_3, 245, 220, 100, 20, "1")  
      CloseGadgetList()
      
      ContainerGadget(#Container_1, 200, 20, 380, 610, #PB_Container_Single)
      ButtonGadget(#Button_4, 45, 220, 100, 40, "2")
      ButtonGadget(#Button_5, 145, 280, 100, 40, "2")
      ButtonGadget(#Button_6, 245, 220, 100, 40, "2")  
      CloseGadgetList()
      
      ContainerGadget(#Container_2, 200, 20, 380, 610, #PB_Container_Raised )
      ButtonGadget(#Button_7, 45, 220, 100, 60, "3")
      ButtonGadget(#Button_8, 145, 280, 100, 60, "3")
      ButtonGadget(#Button_9, 245, 220, 100, 60, "3")  
      CloseGadgetList()

      ButtonGadget(#Button_99, 480, 645, 100, 25, "Schließen")

      HideGadget(#Container_0, 1)
      HideGadget(#Container_1, 1)
      HideGadget(#Container_2, 1)
    EndIf
  EndIf
  
Repeat     
 WindowEventID = WaitWindowEvent()

    If WindowEventID =  #PB_Event_CloseWindow
             Break
    EndIf
    
    If  WindowEventID =  #PB_Event_Gadget
             Select EventGadget()     
                 
              Case #Tree_0
                markierung = GetGadgetState(#Tree_0)
                  If  markierung = 0
                  HideGadget(#Container_0, 0)
                  HideGadget(#Container_1, 1)
                  HideGadget(#Container_2, 1)
                  ElseIf markierung = 1
                  HideGadget(#Container_0, 1)
                  HideGadget(#Container_1, 0)
                  HideGadget(#Container_2, 1)
                  ElseIf markierung = 2
                  HideGadget(#Container_0, 1)
                  HideGadget(#Container_1, 1)
                  HideGadget(#Container_2, 0)
                  EndIf  
                  
               Case #Button_99
                  Break
                
              EndSelect
     EndIf

ForEver
End



lg
Andy
PB 4.02
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Nein , ist schon ok so. Allerdings wuerde ich nur das letzte offene Gadget
verstecken. Wenn du da mehrere Seiten hast steht bei dir ja nur HideGadget.

Beispiel :

Code: Alles auswählen


; PureBasic v4.02 (Windows - x86)
Enumeration
  #Tree_0
  
  #Container_0
  #Button_1
  #Button_2
  #Button_3
  
  #Container_1
  #Button_4
  #Button_5
  #Button_6
  
  #Container_2
  #Button_7
  #Button_8
  #Button_9
  #Button_99
EndEnumeration

If OpenWindow(0, 216, 0, 600, 680, "Yup",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
    
    TreeGadget(#Tree_0, 20, 20, 160, 610, #PB_Tree_AlwaysShowSelection)
    AddGadgetItem (#Tree_0, 0, "Option 1")
    AddGadgetItem (#Tree_0, 1, "Option 2")
    AddGadgetItem (#Tree_0, 2, "Option 3") 
    
    ContainerGadget(#Container_0, 200, 20, 380, 610, #PB_Container_BorderLess )
    ButtonGadget(#Button_1, 45, 220, 100, 20, "1")
    ButtonGadget(#Button_2, 145, 280, 100, 20, "1")
    ButtonGadget(#Button_3, 245, 220, 100, 20, "1") 
    CloseGadgetList()
    
    ContainerGadget(#Container_1, 200, 20, 380, 610, #PB_Container_Single)
    ButtonGadget(#Button_4, 45, 220, 100, 40, "2")
    ButtonGadget(#Button_5, 145, 280, 100, 40, "2")
    ButtonGadget(#Button_6, 245, 220, 100, 40, "2") 
    CloseGadgetList()
    
    ContainerGadget(#Container_2, 200, 20, 380, 610, #PB_Container_Raised )
    ButtonGadget(#Button_7, 45, 220, 100, 60, "3")
    ButtonGadget(#Button_8, 145, 280, 100, 60, "3")
    ButtonGadget(#Button_9, 245, 220, 100, 60, "3") 
    CloseGadgetList()
    
    ButtonGadget(#Button_99, 480, 645, 100, 25, "Schlieࠥn")
    
    ;HideGadget(#Container_0, 1)
    HideGadget(#Container_1, 1)
    HideGadget(#Container_2, 1)
  EndIf
EndIf
 
LastCon.l = #Container_0

Repeat     
  WindowEventID = WaitWindowEvent()
  
  If WindowEventID =  #PB_Event_CloseWindow
    Break
  EndIf
  
  If  WindowEventID =  #PB_Event_Gadget
    Select EventGadget()     
      
      Case #Tree_0
        markierung = GetGadgetState(#Tree_0)
        If  markierung = 0
          HideGadget(LastCon, 1)
          LastCon = #Container_0
          HideGadget(LastCon, 0)
        ElseIf markierung = 1
          HideGadget(LastCon, 1)
          LastCon = #Container_1
          HideGadget(LastCon, 0)
        ElseIf markierung = 2
          HideGadget(LastCon, 1)
          LastCon = #Container_2
          HideGadget(LastCon, 0)
        EndIf 
        
      Case #Button_99
        Break
        
    EndSelect
  EndIf
  
ForEver
End


oder so :

Code: Alles auswählen

; PureBasic v4.02 (Windows - x86)
Enumeration
  #Tree_0
  
  #Container_0
  #Button_1
  #Button_2
  #Button_3
  
  #Container_1
  #Button_4
  #Button_5
  #Button_6
  
  #Container_2
  #Button_7
  #Button_8
  #Button_9
  #Button_99
EndEnumeration

If OpenWindow(0, 216, 0, 600, 680, "Yup",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
    
    TreeGadget(#Tree_0, 20, 20, 160, 610, #PB_Tree_AlwaysShowSelection)
    AddGadgetItem (#Tree_0, 0, "Option 1")
    AddGadgetItem (#Tree_0, 1, "Option 2")
    AddGadgetItem (#Tree_0, 2, "Option 3") 
    
    ContainerGadget(#Container_0, 200, 20, 380, 610, #PB_Container_BorderLess )
    ButtonGadget(#Button_1, 45, 220, 100, 20, "1")
    ButtonGadget(#Button_2, 145, 280, 100, 20, "1")
    ButtonGadget(#Button_3, 245, 220, 100, 20, "1") 
    CloseGadgetList()
    
    ContainerGadget(#Container_1, 200, 20, 380, 610, #PB_Container_Single)
    ButtonGadget(#Button_4, 45, 220, 100, 40, "2")
    ButtonGadget(#Button_5, 145, 280, 100, 40, "2")
    ButtonGadget(#Button_6, 245, 220, 100, 40, "2") 
    CloseGadgetList()
    
    ContainerGadget(#Container_2, 200, 20, 380, 610, #PB_Container_Raised )
    ButtonGadget(#Button_7, 45, 220, 100, 60, "3")
    ButtonGadget(#Button_8, 145, 280, 100, 60, "3")
    ButtonGadget(#Button_9, 245, 220, 100, 60, "3") 
    CloseGadgetList()
    
    ButtonGadget(#Button_99, 480, 645, 100, 25, "Schlieࠥn")
    
    SetGadgetItemData(0,0,#Container_0)
    SetGadgetItemData(0,1,#Container_1)
    SetGadgetItemData(0,2,#Container_2)
    
    ;HideGadget(#Container_0, 1)
    HideGadget(#Container_1, 1)
    HideGadget(#Container_2, 1)
  EndIf
EndIf
 
LastCon.l = #Container_0

Repeat     
  WindowEventID = WaitWindowEvent()
  
  If WindowEventID =  #PB_Event_CloseWindow
    Break
  EndIf
  
  If  WindowEventID =  #PB_Event_Gadget
    Select EventGadget()     
      
      Case #Tree_0
        markierung = GetGadgetState(#Tree_0)
        Con        = GetGadgetItemData(0,markierung)
        
        HideGadget(LastCon, 1)
        HideGadget(Con, 0) 
        LastCon    =  Con
        
      Case #Button_99
        Break
        
    EndSelect
  EndIf
  
ForEver
End
Andy76
Beiträge: 11
Registriert: 07.02.2007 15:26

Beitrag von Andy76 »

Hi Edel

vielen Dank für den super Code :allright: ,
das vereinfacht das ganze sehr.

lg
Andy
PB 4.02
Antworten