RemoveGadgetColumn()

Archive.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

RemoveGadgetColumn()

Message 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
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Active les thèmes XP et réessaie tu va voir ;)
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Difficile sous WIN 98 :mrgreen:
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message 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 ! :roll:
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

:D
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

La je cale. C'est un bug de Windows ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 ? :D :roll:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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 :cry:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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... :D

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 8O
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Aaaaarrrggghhhh!!! :oops:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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. :cry:

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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 :cry:

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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

En fait, il faudrait pouvoir modifier l'index des colonnes, pas leur position.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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
Répondre