swap Tab on Panel Gadget ( procedure swap_onglet() )
Posted: Tue Mar 27, 2012 9:20 pm
based on a code of Gnozal and SROD
I put Procedure for the simplicities
; The procedure swap_onglet (), for swapping two of a same tab panel
; Useful to reorganize a Gadget Panel
; He just provided :
- The number of PanelGadget
- The starting tab number
- The number of the tab to come (ex: exchange between Tab 1 and 20)
code Sample :
I put Procedure for the simplicities

; The procedure swap_onglet (), for swapping two of a same tab panel
; Useful to reorganize a Gadget Panel
; He just provided :
- The number of PanelGadget
- The starting tab number
- The number of the tab to come (ex: exchange between Tab 1 and 20)
code Sample :
Code: Select all
; *******************************************************************************
; Basé sur un code de Gnozal et de Srod
; mis en "Luniere" et en Procedure Par Dobro
; Purebasic 4.60 ( All Version )
; la procedure swap_onglet() , se charge d"echanger 2 onglet d'un meme panel
; utile pour réorganiser un Panel Gadget
; on lui fourni juste
; - le numero du Panelgadget
; - le numerode l'onglet de depart
; - le numero de l'onglet d'arrivé (exemple echange entre l'onglet 1 et 2)
; *******************************************************************************
Enumeration
#window
#panel
#bouton1
#bouton2
#bouton3
EndEnumeration
Declare swap_onglet(panel_gadget,onglet_depart,onglet_arrive)
If OpenWindow(#window, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; ************* dessin des gadgets *******************************************
PanelGadget (#panel, 8, 50, 306, 130)
AddGadgetItem (#panel, -1, "Panel 1")
ButtonGadget(#bouton1, 10, 15, 150, 24,"Swap onglet1 -> onglet2")
ButtonGadget(#bouton2, 190, 15, 80, 24,"Button 2")
AddGadgetItem (#panel, -1,"Panel 2")
ButtonGadget(#bouton2, 190, 15, 80, 24,"Button 3")
CloseGadgetList()
; *****************************************************************************
; boucle
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
case #bouton1
; *************
num_window=#window
panel_gadget=#panel
onglet_depart=GetGadgetState(#panel) ; onglet actuel
; un swap entre l'onglet actuel et l'onglet 20 par exemple
if onglet_arrive=1
onglet_arrive=0
onglet_depart=1
else
onglet_arrive=1
onglet_depart=0
endif
swap_onglet(panel_gadget,onglet_depart,onglet_arrive) ; cette procedure fait le boulot de swap entre les onglets
; ************
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
procedure swap_onglet(panel_gadget,onglet_depart,onglet_arrive)
Structure rc
left.l
top.l
right.l
bottom.l
EndStructure
rc.rc
tci0.TC_ITEM
tci0\mask=#TCIF_TEXT | #TCIF_IMAGE | #TCIF_PARAM
Buffer1$ = Space(256)
tci0\pszText = @Buffer1$
tci0\cchTextMax = 256
;
tci1.TC_ITEM
tci1\mask=#TCIF_TEXT | #TCIF_IMAGE | #TCIF_PARAM
Buffer2$ = Space(256)
tci1\pszText = @Buffer2$
tci1\cchTextMax = 256
SendMessage_(GadgetID(panel_gadget), #TCM_GETITEM, onglet_depart, tci0)
hPanel0 = tci0\lParam ;This holds the windows handle of the static control attached to tab 0.
SendMessage_(GadgetID(panel_gadget), #TCM_GETITEM, onglet_arrive, tci1)
hPanel1 = tci1\lParam ;This holds the windows handle of the static control attached to tab 1.
;Switch the panels.
SendMessage_(GadgetID(panel_gadget), #TCM_SETITEM, onglet_depart, tci1)
SendMessage_(GadgetID(panel_gadget), #TCM_SETITEM, onglet_arrive, tci0)
; Force a redraw.
Select GetGadgetState(panel_gadget)
Case onglet_depart
ShowWindow_(hPanel0, #SW_HIDE)
GetClientRect_(hPanel0, @rc)
MapWindowPoints_(hPanel0, GadgetID(panel_gadget), rc, 2)
SetWindowPos_(hPanel1, 0, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, #SWP_NOZORDER | #SWP_SHOWWINDOW)
Case onglet_arrive
ShowWindow_(hPanel1, #SW_HIDE)
GetClientRect_(hPanel1, @rc)
MapWindowPoints_(hPanel1, GadgetID(panel_gadget), rc, 2)
SetWindowPos_(hPanel0, 0, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, #SWP_NOZORDER | #SWP_SHOWWINDOW)
EndSelect
SetGadgetState(panel_gadget,onglet_arrive)
endprocedure
;
; EPb