Seite 1 von 1

Probleme mit HideGadget

Verfasst: 06.03.2007 17:35
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 

Verfasst: 06.03.2007 17:46
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.

Verfasst: 06.03.2007 18:09
von Fluid Byte
Oder, alternativ, den API Befehl IsWindowVisible_().

Verfasst: 06.03.2007 22:10
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

Verfasst: 07.03.2007 05:54
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

Verfasst: 07.03.2007 10:05
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 

Verfasst: 07.03.2007 16:42
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

Verfasst: 07.03.2007 16:58
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

Verfasst: 07.03.2007 21:09
von Andy76
Hi Edel

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

lg
Andy