Page 1 sur 1
RemoveGadgetColumn()
Publié : mar. 11/mai/2004 15:19
par Anonyme2
Je ne sais pas si cela a été signalé sur le forum anglais, mais la suppression de la colonne 0 pose problème.
On efface bien une colonne, mais les éléments de la 1ere colonne restent inchangés et se sont ceux de la dernière colonne qui disparaissent.
J'ai travaillé beaucoup d'heures sur ce sujet (pour ma lib) mais je n'ai pas trouvé de solution pour effacer la 1ere colonne correctement, c'est pour ça que lorsque j'ai vu dans la doc que ça partait depuis l'index 0, j'étais content.
Voici un petit bout de code pour essai
Code : Tout sélectionner
Enumeration
#MainWindow
#ListIconGadget1
#ButtonGadget
EndEnumeration
; ;========================================================================================
; ;========================================================================================
If OpenWindow(#MainWindow, 0, 0, 480, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, " RemoveGadgetColumn()")
If CreateGadgetList(WindowID()) And ListIconGadget(#ListIconGadget1, 40, 95, 398, 180, "Col 1", 298 / 4, #PB_ListIcon_MultiSelect)
AddGadgetColumn(#ListIconGadget1, 1, "PB", 298 / 4)
AddGadgetColumn(#ListIconGadget1, 2, "Rules", 298 / 4)
ButtonGadget(#ButtonGadget, 15, 10, 250, 55, "Supprimer la 1ere colonne", #PB_Button_MultiLine)
For i.b = 1 To 10
AddGadgetItem(#ListIconGadget1, -1, "111" + Chr(10) + "222" + Chr(10) + "333")
Next i
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #ButtonGadget
RemoveGadgetColumn(#ListIconGadget1, 0)
EndSelect
Case #PB_EventCloseWindow
Quit + 1
EndSelect
Until Quit
EndIf
End
Publié : mar. 11/mai/2004 15:25
par Heis Spiter
Active les thèmes XP et réessaie tu va voir

Publié : mar. 11/mai/2004 15:39
par Anonyme2
Difficile sous WIN 98

Publié : mar. 11/mai/2004 15:43
par Heis Spiter
A mince bon sinon, je t'explique normalement : Si tu n'active pas les thèmes XP, les colones sont mal enlevées mais si tu les actives hop ! Ca marche !

Publié : mar. 11/mai/2004 15:46
par Anonyme2
Publié : mer. 29/sept./2004 17:32
par Fred
La je cale. C'est un bug de Windows ?
Publié : mer. 29/sept./2004 17:37
par Chris
SDK a écrit :Column zero of the list-view control cannot be deleted. If you must delete column zero, insert a zero length dummy column zero and delete column one and above.
Publié : mer. 29/sept./2004 17:49
par Anonyme2
Chris a écrit :SDK a écrit :Column zero of the list-view control cannot be deleted. If you must delete column zero, insert a zero length dummy column zero and delete column one and above.
J'ai bien lu ça et j'ai effectivement créer un dummy colonne comme y dise mais sans arriver à retirer la colonne 0.
Je pense qu'il doit y avoir une astuce. J'explique
Si on efface la colonne 0, son contenu lui n'est pas effacé et c'est bien là le problème. Y a bien une solution c'est de tout lire, les styles, les icon et le reste ... et de remplacer le contenu de la colonne 0 par celui de la 1 puis d'effacer la 1.
Mais il y a aussi une autre façon
Il est parfaitement possible d'intervertir 2 colonnes et ca fonctionne bien avec la colonne 0 et la 1 par exemple avec la souris lorsque ce mode est activé (j'ai fait des essais).
Donc la colonne 0 devient la , la 1devient la 0 et il suffit de supprimer cette colonne 1. Là ou je n'ai pas trouvé, c'est comment tromper la listicon en lui demandant d'intervertir les colonnes sans le faire à la souris mais par programme.
Chiadé non ?

Publié : mer. 29/sept./2004 17:58
par Chris
Code : Tout sélectionner
Enumeration
#MainWindow
#ListIconGadget1
#ButtonGadget
EndEnumeration
; ;========================================================================================
; ;========================================================================================
If OpenWindow(#MainWindow, 0, 0, 480, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, " RemoveGadgetColumn()")
If CreateGadgetList(WindowID()) And ListIconGadget(#ListIconGadget1, 40, 95, 398, 180, "Col 1", 298 / 4, #PB_ListIcon_MultiSelect)
AddGadgetColumn(#ListIconGadget1, 1, "PB", 298 / 4)
AddGadgetColumn(#ListIconGadget1, 2, "Rules", 298 / 4)
ButtonGadget(#ButtonGadget, 15, 10, 250, 55, "Supprimer la 1ere colonne", #PB_Button_MultiLine)
For i.b = 1 To 10
AddGadgetItem(#ListIconGadget1, -1, "111" + Chr(10) + "222" + Chr(10) + "333")
Next i
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #ButtonGadget
AddGadgetColumn(#ListIconGadget1,0,"",0)
RemoveGadgetColumn(#ListIconGadget1, 1)
EndSelect
Case #PB_EventCloseWindow
Quit + 1
EndSelect
Until Quit
EndIf
End
Problème, ça ne fonctionne qu'une fois

Publié : mer. 29/sept./2004 18:08
par Anonyme2
J'ai beaucoup travaillé sur cette commande avant que Fred ne la sorte. Je ne l'avait pas fait car ca ne marche pas sous 98, Xp sans les thèmes et peut-être d'autre.
Regarde bien le problème Chris.
Avec ton code, la colonne disparait...
Maintenant déplace ton curseur de la souris au début de l'entête des colonne à gauche juste à la limite de la fenetre et de l'entête. Tu vas voir apparaître un curseur de souris qui permet de redimensionner les colonnes. Tu clique et tu maintiens enfoncé et tu vas vers la droite et tu vois réapparaître la colonne 1 mais dont le texte de l'entête a disparu.
Si tu utilise la commande de ma librairie Morelisticongadget comme ceci après avoir supprimé la colonne 0
Debug GetColumnsNumber(#ListIconGadget1)
le résultat sera toujours de 3
Etonnant non

Publié : mer. 29/sept./2004 18:11
par Chris
Aaaaarrrggghhhh!!!

Publié : jeu. 30/sept./2004 18:46
par Chris
Bon ben j'arrive à modifier la position de la colonne par le code, par contre, je n'arrive pas à supprimer la colonne 0.
Dans cet exemple, je déplace la colonne 0 d'origine en dernière position.
Code : Tout sélectionner
Enumeration
#MainWindow
#ListIconGadget1
#ButtonGadget
EndEnumeration
#LVCF_ORDER = $0020
#LVM_SETCOLUMNORDERARRAY = #LVM_FIRST + 58
; #LVM_GETCOLUMNORDERARRAY = #LVM_FIRST + 59
; #LVM_GETSELECTEDCOLUMN = #LVM_FIRST + 174
; ;========================================================================================
; ;========================================================================================
; Structure _LVCOLUMN
; Mask.l
; fmt.l
; cx.l
; pszText.s
; cchTextMax.l
; iSubItem.l
; ; #if (_WIN32_IE >= 0x0300)
; iImage.l
; iOrder.l
; ; #endif
; EndStructure
; Info._LVCOLUMN
; Info\Mask = #LVCF_ORDER
; La callback ne sert qu'à vérifier comment les colonnes sont numérotées
; une fois qu'elles ont été déplacées. Cliquer sur l'en-tête de colonne
; pour afficher son n° dans le StringGadget
Procedure Callback(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*pnmh.NMHDR = lParam
If *pnmh\hwndFrom = GadgetID(#ListIconGadget1)
Select *pnmh\code
Case #LVN_COLUMNCLICK
*pnmv.NMLISTVIEW = lParam
Column.l = *pnmv\iSubItem
SetGadgetText(10,Str(Column))
Debug Column
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(#MainWindow, 0, 0, 480, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, " RemoveGadgetColumn()")
If CreateGadgetList(WindowID())And ListIconGadget(#ListIconGadget1, 40, 95, 398, 180, "Col 1", 298 / 4, #PB_ListIcon_MultiSelect|#PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(#ListIconGadget1, 1, "PB", 298 / 4)
AddGadgetColumn(#ListIconGadget1, 2, "Rules", 298 / 4)
ButtonGadget(#ButtonGadget, 15, 10, 250, 55, "Supprimer la 1ere colonne", #PB_Button_MultiLine)
StringGadget(10,270,10,40,40,"Texte")
For i.b = 1 To 10
AddGadgetItem(#ListIconGadget1, -1, "111" + Chr(10) + "222" + Chr(10) + "333")
Next i
EndIf
SetWindowCallback(@Callback())
Repeat
Select WaitWindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #ButtonGadget
AddGadgetColumn(#ListIconGadget1, 1, "", 30)
NumColumns = GetColumnsNumber(#ListIconGadget1)
Dim Colonnes(NumColumns -1)
For i = 1 To NumColumns -1 ; Je met la colonne 0 à la fin
Colonnes(i-1) = i
Next
Colonnes(NumColumns-1) = 0
SendMessage_(GadgetID(#ListIconGadget1),#LVM_SETCOLUMNORDERARRAY,NumColumns,@Colonnes())
;RemoveGadgetColumn(#ListIconGadget1, 0)
EndSelect
Case #PB_EventCloseWindow
Quit + 1
EndSelect
Until Quit
EndIf
End
Publié : jeu. 30/sept./2004 19:03
par Anonyme2
C'est Ok le déplacement.
Je viens de refaire des essais avec le déplacement à la souris et le résultat est le même que ton code
il me semblait pourtant avoir fait des essais sous WIN98 et ca marchait mais sous XP rien
On arrive à supprimer la colonne 0 si elle est seule.
Publié : jeu. 30/sept./2004 20:22
par Chris
En fait, il faudrait pouvoir modifier l'index des colonnes, pas leur position.
Publié : jeu. 30/sept./2004 20:34
par Anonyme2
Oui, mais là...
reste encore la solution de recopier la colonne 1 dans la 0 sans rien oublier puis de supprimer la colonne1