PanelGadget, onglet, gadgetList et tout le fourbi ...
PanelGadget, onglet, gadgetList et tout le fourbi ...
Le titre est vague.
Bien que je pratique PB depuis 2000 ou 2001 (je ne me souviens plus), je ne sais pas vraiment si c'est possible.
Sur un panel, chaque onglet a ses propres gadget et on peut ajouter modifier avec OpenGadgetList et le numéro d'onglet.
Mais ce que je recherche, c'est de pouvoir faire migrer un gadget d'un onglet à l'autre sans le détruire car c'est pour afficher des listview ou listicon de quelques milliers d'éléments, je pense que c'est mieux que d'en avoir plusieurs identiques (limite la mémoire et l'affichage serait presque instantané).
J'ai essayé avec des Setparent_() GetParent_() et des Opengadgetlist, j'arrive à faire migrer une fois et c'est tout.
Vous avez une idée ?
Je ne met pas de code car c'est extrait de mon outil asm que je redéveloppe pour PB 4.20 et le code est très long et pas pratique à réduire.
A+
Denis
Bien que je pratique PB depuis 2000 ou 2001 (je ne me souviens plus), je ne sais pas vraiment si c'est possible.
Sur un panel, chaque onglet a ses propres gadget et on peut ajouter modifier avec OpenGadgetList et le numéro d'onglet.
Mais ce que je recherche, c'est de pouvoir faire migrer un gadget d'un onglet à l'autre sans le détruire car c'est pour afficher des listview ou listicon de quelques milliers d'éléments, je pense que c'est mieux que d'en avoir plusieurs identiques (limite la mémoire et l'affichage serait presque instantané).
J'ai essayé avec des Setparent_() GetParent_() et des Opengadgetlist, j'arrive à faire migrer une fois et c'est tout.
Vous avez une idée ?
Je ne met pas de code car c'est extrait de mon outil asm que je redéveloppe pour PB 4.20 et le code est très long et pas pratique à réduire.
A+
Denis
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Essaie un de mes codes retrouvés sur le forum anglais :
Code : Tout sélectionner
If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
PanelGadget (0, 8, 50, 306, 130)
AddGadgetItem (0, -1, "Panel 1")
ButtonGadget(2, 10, 15, 80, 24,"Button 1")
ButtonGadget(3, 95, 15, 80, 24,"Button 2")
AddGadgetItem (0, -1,"Panel 2")
ButtonGadget(4, 10, 15, 80, 24,"Button 3")
CloseGadgetList()
ButtonGadget(1, 0,0,120,30,"Move gadget in panel!")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case 1 ;Let's reorder the panels.
tci.TC_ITEM
tci\mask=#TCIF_PARAM
SendMessage_(GadgetID(0), #TCM_GETITEM, 0, tci)
hPanel0 = tci\lparam ;This holds the windows handle of the static control attached to tab 0.
SendMessage_(GadgetID(0), #TCM_GETITEM, 1, tci)
hPanel1 = tci\lparam ;This holds the windows handle of the static control attached to tab 1.
SetParent_(GadgetID(2), HPanel1)
SetParent_(GadgetID(4), HPanel0)
Default
If GadgetType(EventGadget()) = #PB_GadgetType_Button
Debug GetGadgetText(EventGadget())
EndIf
EndSelect
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
salut Progi1984
merci pour le code je vais tester. C'est presque la même chose que j'ai fait mais ça ne marchait pas.
Ma grande question est de savoir comment fonctionne la gadgetlist de l'onglet qui n'a plus le gadget en référence, et le gadget qui a migré, comment PB va gérer ça avec la gadgetlist correspondante ?
Surement une quetion à poser à Fred
A+
Denis
merci pour le code je vais tester. C'est presque la même chose que j'ai fait mais ça ne marchait pas.
Ma grande question est de savoir comment fonctionne la gadgetlist de l'onglet qui n'a plus le gadget en référence, et le gadget qui a migré, comment PB va gérer ça avec la gadgetlist correspondante ?
Surement une quetion à poser à Fred
A+
Denis
En effet, il est peut-être prudent de faire un SetGadgetState() après le swap pour "réinitialiser" l'onglet.Denis a écrit :Ma grande question est de savoir comment fonctionne la gadgetlist de l'onglet qui n'a plus le gadget en référence, et le gadget qui a migré, comment PB va gérer ça avec la gadgetlist correspondante ?
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Et Fred répondit... 

Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Kwai chang caine
- Messages : 6989
- Inscription : sam. 23/sept./2006 18:32
- Localisation : Isere
Denis, j'utilise ce code dans PureFORM et çà fonctionne :
Le code est juste copié de ma source et non exécutable directement, désolé.
Code : Tout sélectionner
; Swap panels in form
tci0\mask = #TCIF_TEXT | #TCIF_IMAGE | #TCIF_PARAM
Buffer1$ = Space(256)
tci0\pszText = @Buffer1$
tci0\cchTextMax = 256
tci1\mask = #TCIF_TEXT | #TCIF_IMAGE | #TCIF_PARAM
Buffer2$ = Space(256)
tci1\pszText = @Buffer2$
tci1\cchTextMax = 256
; Get window handle of the static control attached to first tab
SendMessage_(GadgetID(PanelGadget), #TCM_GETITEM, FirstTab, @tci0)
hPanel0 = tci0\lParam
; Get window handle of the static control attached to second tab
SendMessage_(GadgetID(PanelGadget), #TCM_GETITEM, SecondTab, @tci1)
hPanel1 = tci1\lParam
; Switch the panels.
SendMessage_(GadgetID(PanelGadget), #TCM_SETITEM, FirstTab, @tci1)
SendMessage_(GadgetID(PanelGadget), #TCM_SETITEM, SecondTab, @tci0)
; Force a redraw.
Select GetGadgetState(PanelGadget)
Case FirstTab
ShowWindow_(hPanel0, #SW_HIDE)
GetClientRect_(hPanel0, @rc)
MapWindowPoints_(hPanel0, GadgetID(PanelGadget), rc, 2)
SetWindowPos_(hPanel1, 0, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, #SWP_NOZORDER | #SWP_SHOWWINDOW)
Case SecondTab
ShowWindow_(hPanel1, #SW_HIDE)
GetClientRect_(hPanel1, @rc)
MapWindowPoints_(hPanel1, GadgetID(PanelGadget), rc, 2)
SetWindowPos_(hPanel0, 0, rc\left, rc\top, rc\right-rc\left, rc\bottom-rc\top, #SWP_NOZORDER | #SWP_SHOWWINDOW)
EndSelect
SetGadgetState(PanelGadget, SecondTab)
Merci Gnozal, je vais regarder ton code.
Je dois déplacer de nombreuses fois (en théorie sans limite) 2 listicon dans 3 onglets différents, aujourd'hui j'en ai créé 6 mais j'ai 20 M0 de RAM utilisé par mon code (ce ne sont pas ces 6 listicon qui consomment tout mais j'aimerais pouvoir n'en utiliser que 2).
Denis
Je dois déplacer de nombreuses fois (en théorie sans limite) 2 listicon dans 3 onglets différents, aujourd'hui j'en ai créé 6 mais j'ai 20 M0 de RAM utilisé par mon code (ce ne sont pas ces 6 listicon qui consomment tout mais j'aimerais pouvoir n'en utiliser que 2).
Denis