Ver 2:Show\Hide PanelGadget TAB with Icons (Windows)

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4659
Joined: Sun Apr 12, 2009 6:27 am

Ver 2:Show\Hide PanelGadget TAB with Icons (Windows)

Post by RASHAD »

Hi
The title say it all

Code: Select all

Procedure HideTab(gad,tab,text$)
  t.TC_ITEM
  t\mask = #TCIF_TEXT
  t\cchTextMax = 0
  t\pszText = @text$
  SendMessage_( GadgetID(gad), #TCM_SETMINTABWIDTH, 0,0)
  SendMessage_( GadgetID(gad), #TCM_SETPADDING, 0,1)
  SendMessage_(GadgetID(gad),#TCM_SETITEM, tab, @t)
  SetGadgetState(gad,0)
EndProcedure

LoadFont(0,"Tahoma",12)  
OpenWindow(0, 0, 0, 400,300, "Show\Hide TAB", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  PanelGadget     (0, 10, 10, 380, 210)
  SetGadgetFont(0,FontID(0)) 
    AddGadgetItem (0, -1, " Panel 1 ")
    PanelGadget (1, 5, 5, 350, 166)
      AddGadgetItem(1, -1, " Sub-Panel 1 ")
      AddGadgetItem(1, -1, " Sub-Panel 2 ")
      AddGadgetItem(1, -1, " Sub-Panel 3 ")
    CloseGadgetList()
    
    AddGadgetItem (0, -1," Panel 2 ")
    ButtonGadget(2, 10, 15, 80, 24,"Button 2")
    ButtonGadget(3, 95, 15, 80, 24,"Button 3")
    
    AddGadgetItem (0, -1," Panel 3 ")
    ButtonGadget(4, 10, 15, 80, 24,"Button 4")
    ButtonGadget(5, 95, 15, 80, 24,"Button 5")
  CloseGadgetList()
  
  ButtonGadget(10,10,260,90,24,"Hide\Show")
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 10
          run ! 1
          If run = 1
            itemtext$ = GetGadgetItemText(1,1)           
            HideTab(1,1,"")
          Else          
            HideTab(1,1,itemtext$)
          EndIf
      EndSelect   
  EndSelect
Until Quit = 1
End
#2 :

Code: Select all

hnd1 = ExtractIcon_(0,"Shell32.dll",$55)
hnd2 = ExtractIcon_(0,"Shell32.dll",$82)

Procedure HideTab(gad,tab,text$)
  t.TC_ITEM
  t\mask = #TCIF_TEXT
  t\cchTextMax = 0
  t\pszText = @text$
  SendMessage_(GadgetID(gad), #TCM_SETMINTABWIDTH, 0,0)
  SendMessage_(GadgetID(gad), #TCM_SETPADDING, 0,0)
  SendMessage_(GadgetID(gad),#TCM_SETITEM, tab, @t)
  SetGadgetState(gad,0)
EndProcedure

LoadFont(0,"Tahoma",12)  
OpenWindow(0, 0, 0, 400,300, "Show\Hide TAB", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  PanelGadget     (0, 10, 10, 380, 210)
  SendMessage_( GadgetID(0), #TCM_SETITEMSIZE, 0,0|40<<16)
  SetGadgetFont(0,FontID(0)) 
    AddGadgetItem (0, -1, "        Panel 1  ")
    PanelGadget (1, 5, 5, 350, 166)
      AddGadgetItem(1, -1, " Sub-Panel 1  ")
      AddGadgetItem(1, -1, " Sub-Panel 2  ")
      AddGadgetItem(1, -1, " Sub-Panel 3  ")
    CloseGadgetList()
    
    AddGadgetItem (0, -1,"        Panel 2  ")
    
    ButtonGadget(2, 10, 15, 80, 24,"Button 2")
    ButtonGadget(3, 95, 15, 80, 24,"Button 3")
    
    AddGadgetItem (0, -1," Panel 3  ")
    ButtonGadget(4, 10, 15, 80, 24,"Button 4")
    ButtonGadget(5, 95, 15, 80, 24,"Button 5")
  CloseGadgetList()
  
  ImageGadget(100,GadgetX(0)+4,GadgetY(0)+6,32,32,hnd1)
  DisableGadget(100,1)
  BringWindowToTop_(GadgetID(100))
  
  SendMessage_(GadgetID(0),#TCM_GETITEMRECT,1,item.RECT)
  ImageGadget(110,item\left+15,item\top+15,32,32,hnd2)
  DisableGadget(110,1)
  BringWindowToTop_(GadgetID(110))
  
  ButtonGadget(10,10,260,90,24,"Hide\Show")
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 10
          run ! 1
          If run = 1
            itemtext$ = GetGadgetItemText(0,1)
            HideTab(0,1,"")          
            ResizeGadget(110,0,0,0,0)
          Else            
            SendMessage_(GadgetID(0),#TCM_GETITEMRECT,1,item.RECT)
            HideTab(0,1,itemtext$)
            ResizeGadget(110,item\left+15,item\top+15,32,32)
          EndIf
      EndSelect   
  EndSelect
Until Quit = 1
End

Edit :More advanced
Last edited by RASHAD on Fri May 28, 2021 5:21 pm, edited 1 time in total.
Egypt my love
BarryG
Addict
Addict
Posts: 3318
Joined: Thu Apr 18, 2019 8:17 am

Re: Show\Hide PanelGadget TAB (Windows)

Post by BarryG »

Thanks Rashad! Doesn't work with images on the hidden tab but I can work around that for now by not including one. Had to set the padding to 0 too, otherwise I could still click the "hidden" tab. Seems to be a good compromise for now, so again: thanks.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4659
Joined: Sun Apr 12, 2009 6:27 am

Re: Show\Hide PanelGadget TAB (Windows)

Post by RASHAD »

Hi Barry
Consider it a solution for PB PanelGadget() (No image) :)
@BarryG
Don't use ImageList to add images or icons
Maybe if you added ImageGadget() to the Tab and used (or not) SetParent_() between the Tab & ImageGadget() you can get a proper solution
Good luck
Egypt my love
BarryG
Addict
Addict
Posts: 3318
Joined: Thu Apr 18, 2019 8:17 am

Re: Ver 2:Show\Hide PanelGadget TAB with Icons (Windows)

Post by BarryG »

Thanks for the second example, Rashad! It works 100% perfectly for me.
Post Reply