Page 1 sur 1

[Résolu]Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 11:12
par Stefou
Salut à tous,

J'ai enfin réussi à rendre éditable mon treegadget, mais je n'arrive pas à récupérer le nouveau nom.

Mes pistes sont : TVM_GETEDITCONTROL et TVN_ENDLABELEDIT

Mais je n'y arrive pas.

Merci à vous

Code : Tout sélectionner

id_gadget_tree=0 

 If OpenWindow(0, 0, 0, 300, 400, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
    TreeGadget(id_gadget_tree, 10, 10, 290, 390)  
    
    Style = GetWindowLong_(GadgetID(id_gadget_tree), #GWL_STYLE)
    resu=SetWindowLong_(GadgetID(id_gadget_tree),#GWL_STYLE	,Style |#TVS_EDITLABELS); liste arborescente standard

      For a = 0 To 10
        AddGadgetItem (id, -1, "Elément normal "+Str(a), 0, 0) ; si vous souhaitez ajouter une image, utilisez 
        AddGadgetItem (id, -1, "Noeud "+Str(a), 0, 0)          ; ImageID(x) comme 4ème paramètre
        AddGadgetItem (id, -1, "Sous-élément 1", 0, 1)         ; Ceux-là sont au premier sous-niveau 
        AddGadgetItem (id, -1, "Sous-élément 2", 0, 1)
        AddGadgetItem (id, -1, "Sous-élément 3", 0, 1)
        AddGadgetItem (id, -1, "Sous-élément 4", 0, 1)
        AddGadgetItem (id, -1, "Fichier "+Str(a), 0, 0) ; sous-niveau 0 à nouveau
      Next
   
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 13:03
par Ar-S
J'ai pas bien compris ton soucis de "récupérer le nouveau nom"
un simple GetGadgetText ne te suffit pas ?

Code : Tout sélectionner

    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_Gadget
          Select EventGadget()
            case id
              debug GetGadgetText(id)
              
          EndSelect
       
    EndSelect
  Until WaitWindowEvent() = #PB_Event_CloseWindow 

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 13:39
par dayvid
hé ! pas mal sa, sa peut toujours servire :mrgreen:

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 14:29
par Stefou
Merci pour vos réponse,

@Ar-S : As-tu l'id du gadget concerné ?

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 14:51
par Ar-S
Ce serait pas le résultat de debug GetGadgetState(id) à ajouter après debug GetGadgetText(id) ?

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 15:39
par Stefou
J'avance mais cela ne me semble pas beau, je n'arrive pas à récupérer les évenements de fin d'édition....
J'ai mis en place le code d'une callback si quelqu'un veut bien m'aider. (mais je ne m'en sert pas)
La procedure Test me permet de récupérer le nom saisie.

Code : Tout sélectionner

#id_gadget_tree=0

Procedure MaProcedureCallback(WindowID, Message, wParam, lParam)
  Resultat = #PB_ProcessPureBasicEvents
  If wParam=GadgetID(#id_gadget_tree)
    Debug "Hnd"+Str(WindowID)+" : "+"msg "+Str(Message)+" : "+"wParam "+Str(wParam)+" : "+"lParam "+Str(lParam)
    
    
  EndIf
  ProcedureReturn Resultat
EndProcedure

Procedure test(ess)
  hd_gadget=SendMessage_(GadgetID(#id_gadget_tree),#TVM_GETEDITCONTROL,0,0)
  ligne.s
  ligne=Space(256)
  Repeat
    Delay(200)
    resu=GetWindowText_(hd_gadget,@ligne,256)
    hd_gadget=SendMessage_(GadgetID(#id_gadget_tree),#TVM_GETEDITCONTROL,0,0)
    
    If ligne<>""
      nv_nom$=ligne
    EndIf
    
  Until hd_gadget=0
  Debug "NOUVEAU NOM : "+nv_nom$
EndProcedure

 

If OpenWindow(0, 0, 0, 300, 400, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  TreeGadget(#id_gadget_tree, 10, 20, 270, 390)  
  ButtonGadget(3,0,0,200,20,"Editer un élément") 
  
  Style = GetWindowLong_(GadgetID(#id_gadget_tree), #GWL_STYLE)
  resu=SetWindowLong_(GadgetID(#id_gadget_tree),#GWL_STYLE	,Style |#TVS_EDITLABELS); liste arborescente standard
  ;SetWindowCallback(@MaProcedureCallback()) 
  
  SendMessage_(GadgetID(#id_gadget_tree),#TVM_EDITLABEL,0,GadgetItemID(#id_gadget_tree,0))
  
  
  AddGadgetItem (#id_gadget_tree, -1, "Elément normal "+Str(a), 0, 0)
  AddGadgetItem (#id_gadget_tree, -1, "Noeud "+Str(a), 0, 0)         
  AddGadgetItem (#id_gadget_tree, -1, "Sous-élément 1", 0, 1)        
  AddGadgetItem (#id_gadget_tree, -1, "Sous-élément 2", 0, 1)
  AddGadgetItem (#id_gadget_tree, -1, "Sous-élément 3", 0, 1)
  AddGadgetItem (#id_gadget_tree, -1, "Sous-élément 4", 0, 1)
  AddGadgetItem (#id_gadget_tree, -1, "Fichier "+Str(a), 0, 0) 
  
  
  
  
  Repeat 
    event=WaitWindowEvent()
    Select event
      Case #PB_Event_Gadget  ;{
        
        Select EventGadget()
          Case 3
            SendMessage_(GadgetID(#id_gadget_tree), #TVM_EDITLABEL, 0,GadgetItemID(#id_gadget_tree,1))
            CreateThread(@test(),1)
        EndSelect
    EndSelect
  Until event = #PB_Event_CloseWindow
EndIf
  

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 16:30
par gnozal
Ci-dessous un example pour rendre éditable un TreeGadget.
Selon la réponse du callback (ReturnValue) aux évènements #TVN_BEGINLABELEDIT et #TVN_ENDLABELEDIT, on peut autoriser ou refuser l'édition ou la modification (ReturnValue = #True ou #False).

Code : Tout sélectionner

;
; Editable TreeGadget
;
Procedure WindowCallBack(Window,Message,wParam,lParam)
  Protected *hdr.NMHDR, *tvinfo.NMTVDISPINFO, TextEdite.s
  ReturnValue = #PB_ProcessPureBasicEvents 
  ;
  If Message=#WM_NOTIFY    
    *hdr = lParam
    If *hdr\idFrom = 0 ; Gadget numéro 0
      If *hdr\code = #TVN_BEGINLABELEDIT 
        *tvinfo = lParam
        ; On autorise l'édition
        ReturnValue = #False
        ; On refuse l'édition
        ; ReturnValue = #True
      ElseIf *hdr\code = #TVN_ENDLABELEDIT 
        *tvinfo = lParam
        If *tvinfo\item\psztext
          TextEdite = PeekS(*tvinfo\item\psztext)
          Debug "Texte modifié : " + TextEdite
          If TextEdite
            ; On garde la modification
            ReturnValue = #True
          Else
            ; On annule la modification
            ReturnValue = #False
          EndIf
        EndIf
      EndIf 
    EndIf 
  EndIf 
  ;
  ProcedureReturn ReturnValue
EndProcedure
;
If OpenWindow(0 ,300,300,200,150,"Editable TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TreeGadget(0, 10,10,180,120)
  ; On rend le gadget éditable
  SetWindowLong_(GadgetID(0), #GWL_STYLE, GetWindowLong_(GadgetID(0), #GWL_STYLE) | #TVS_EDITLABELS) 
  AddGadgetItem (0, 0, "Label 1")  
  AddGadgetItem (0, 1, "Label 2")  
  AddGadgetItem (0, 2, "Label 3")  
  AddGadgetItem (0, 3, "Label 4")
  AddGadgetItem (0, 4, "Label 5")
  AddGadgetItem (0, 5, "Label 6")
  SetWindowCallback(@WindowCallBack())
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf

Re: Edition d'un treegadget : récupérer le nouveau nom

Publié : mar. 10/août/2010 17:10
par Stefou
Merci grand Chef :D

J'ai quand même passé quelques heures à essayer de le sortir tout seul, mais j'ai fini par abandonné. Pourtant je retrouve mes pistes dans tes lignes de code.

Encore merci j'ai tout ce que j'espérais dans mes rêves les plus fou !!! :D