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

Share your advanced PureBasic knowledge/code with the community.
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4954
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: 4173
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: 4954
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: 4173
Joined: Thu Apr 18, 2019 8:17 am

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

Post by BarryG »

New post below.
Last edited by BarryG on Sat Aug 03, 2024 1:45 am, edited 1 time in total.
hoangdiemtinh
User
User
Posts: 97
Joined: Wed Nov 16, 2022 1:51 pm

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

Post by hoangdiemtinh »

It's work fine on my Win10 Pro 21H1. 8)
PC: Windows 10 x64, 8GB RAM. PB ver: 6.x
--
I love PB5 vs PB6 :)
BarryG
Addict
Addict
Posts: 4173
Joined: Thu Apr 18, 2019 8:17 am

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

Post by BarryG »

Trying to get this to work with just a standard PanelGadget size (no resizing of tabs or giving them fancy fonts), and without using the hack of ImageGadgets for each tab. Here's what I've got, but it doesn't work. Any tips?

Code: Select all

hnd0 = CreateImage(0,1,1,24,#Black)
hnd1 = CreateImage(1,16,16,24,#Red)
hnd2 = CreateImage(2,16,16,24,#Green)

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_SETITEM, tab, @t)
  SetGadgetItemImage(gad, tab, hnd0)
  SetGadgetState(gad,0)
EndProcedure

OpenWindow(0, 0, 0, 400,300, "Show\Hide Panel Tab", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
PanelGadget     (0, 10, 10, 380, 210)
AddGadgetItem (0, -1, " Panel 1 ", hnd1)
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 ", hnd2)

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,130,24,"Hide\Show Panel 2")
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,"")          
          Else            
            HideTab(0,1,itemtext$)
          EndIf
      EndSelect   
  EndSelect
Until Quit = 1
Post Reply