Page 1 of 1

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

Posted: Fri May 28, 2021 12:53 am
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

Re: Show\Hide PanelGadget TAB (Windows)

Posted: Fri May 28, 2021 10:52 am
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.

Re: Show\Hide PanelGadget TAB (Windows)

Posted: Fri May 28, 2021 1:25 pm
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

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

Posted: Sat May 29, 2021 10:22 am
by BarryG
New post below.

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

Posted: Sat May 11, 2024 10:30 am
by hoangdiemtinh
It's work fine on my Win10 Pro 21H1. 8)

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

Posted: Sat Aug 03, 2024 1:47 am
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