Page 1 sur 1

[Résolu] Editer un élément d'un ExplorerListGadget

Publié : sam. 12/janv./2013 8:51
par Stefou
Bonjour à tous !

Bonne année et plein de jolies codes sans bug pour cette année 2013. 8)

J'aurais besoin d'éditer un élément dans un ExplorerListGadget, comme lorsque l'on appuie sur F2 ou que l'on clique dessus lorsqu'il est déjà sélectionné.

Ma première piste est : SendMessage_(GadgetItemID(id,num), #LVM_EDITLABEL, num, 0)
mais cela ne marche pâs ! (http://msdn.microsoft.com/en-us/library/ee500546.aspx)



Merci d'avance et bon week-end


Stefou

Code : Tout sélectionner

OpenWindow(0,10,10,400,400,"Ess",#PB_Window_SystemMenu)


ExplorerListGadget(1,10,10,300,300,"c:\")

id=1
num=3
SetActiveGadget(1)

LVITEM.LV_ITEM
LVITEM\mask = #LVIF_STATE   
LVITEM\state = #LVIS_SELECTED
LVITEM\stateMask = #LVIS_SELECTED
SendMessage_(GadgetID(id), #LVM_SETITEMSTATE, num, @LVITEM)
  ;SetFocus_(GadgetItemID(id,num))
SendMessage_(GadgetItemID(id,num), #LVM_EDITLABEL, num, 0)


Repeat
  
Until WaitWindowEvent()=#PB_Event_CloseWindow

Re: Editer un élément d'un ExplorerListGadget

Publié : sam. 12/janv./2013 10:14
par Stefou
Voilà je l'ai, reste à traiter les actions qui en découle....

Code : Tout sélectionner

OpenWindow(0,10,10,400,400,"Ess",#PB_Window_SystemMenu)


ExplorerListGadget(1,10,10,300,300,"c:\")
Style = GetWindowLong_(GadgetID(1), #GWL_STYLE)
resu=SetWindowLong_(GadgetID(1),#GWL_STYLE	,Style |#LVS_EDITLABELS)


Repeat 
  event=WaitWindowEvent()
  Select event
    Case #WM_KEYDOWN  ;{touche clavier
      Debug "Appuye touche "+Str(EventwParam())
      id_touche=EventwParam()
      
      Select id_touche
          
        Case 113 ;F2
          
          resu=SendMessage_(GadgetID(1), #LVM_EDITLABEL, GetGadgetState(1), 0)

          
      EndSelect
      
    Case #PB_Event_Gadget
      

      
  EndSelect
Until event=#PB_Event_CloseWindow

Re: Editer un élément d'un ExplorerListGadget

Publié : sam. 12/janv./2013 10:39
par Mesa
On peut changer un élément sans passer par les api.
Le code ci-dessous change le texte d'un élément mais ne change pas le nom du fichier sur le disque dur.

Code : Tout sélectionner

OpenWindow(0,10,10,400,400,"Ess",#PB_Window_SystemMenu)


ExplorerListGadget(1,10,10,300,300,"c:\")
ButtonGadget(2,10,320,100,30,"ok")

id=1
num=3
SetActiveGadget(1)


Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_Gadget
    
    Select EventGadget()
      Case 1
        If EventType() =#PB_EventType_LeftClick       
          pos = GetGadgetState(1)
          Debug pos
          Debug GetGadgetItemText(1,pos)
        EndIf
        
      Case 2
        ;If EventType() =
        ;MessageRequester("Info", GetGadgetItemText(1,pos), 0)
        SetGadgetItemText(1,pos, "ZZZZZ")
        
        ; EndIf
        
        
        
    EndSelect
    
  EndIf
  
Until Event = #PB_Event_CloseWindow

Mesa.

Re: Editer un élément d'un ExplorerListGadget

Publié : sam. 12/janv./2013 10:45
par Stefou
@Mesa : Merci mais cela ne remplie pas le cahier des charges !


Et voilà de quoi me satisfaire !

Code : Tout sélectionner

Procedure MaProcedureCallback(WindowID, Message, wParam, lParam)
  Resultat = #PB_ProcessPureBasicEvents

  Select Message 
      
    Case #WM_NOTIFY    

      
      *pnmh.NMHDR = lParam 
      Select *pnmh\code 
        Case #LVN_ENDLABELEDIT
          Debug "-----------------FIN EDIT"
          *pnmlvdi.NMLVDISPINFO = lParam 
          If *pnmlvdi\item\mask & #LVIF_TEXT 
            nv_nom$= PeekS(*pnmlvdi\item\psztext,*pnmlvdi\item\cchTextMax )
            
            Debug "RENOMMER  : "+GetGadgetItemText(1,GetGadgetState(1))+" -en- "+nv_nom$

          EndIf 
      EndSelect
      
          
      ;}
  EndSelect 
  ;}
  

  
  ;
  ProcedureReturn Resultat
EndProcedure

OpenWindow(0,10,10,400,400,"Ess",#PB_Window_SystemMenu)


ExplorerListGadget(1,10,10,300,300,"c:\")
Style = GetWindowLong_(GadgetID(1), #GWL_STYLE)
resu=SetWindowLong_(GadgetID(1),#GWL_STYLE	,Style |#LVS_EDITLABELS)

SetWindowCallback(@MaProcedureCallback(),0)
Repeat 
  event=WaitWindowEvent()
  Select event
      
    Case #WM_KEYDOWN  ;{touche clavier
      
      Select id_touche

        Case 113 ;F2
          
          resu=SendMessage_(GadgetID(1), #LVM_EDITLABEL, GetGadgetState(1), 0)

      EndSelect
      
    Case #PB_Event_Gadget
      

      
  EndSelect
Until event=#PB_Event_CloseWindow