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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

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

Message 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
Dernière modification par Stefou le mar. 10/août/2010 17:12, modifié 2 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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 
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

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

Message par dayvid »

hé ! pas mal sa, sa peut toujours servire :mrgreen:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

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

Message par Stefou »

Merci pour vos réponse,

@Ar-S : As-tu l'id du gadget concerné ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

Ce serait pas le résultat de debug GetGadgetState(id) à ajouter après debug GetGadgetText(id) ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

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

Message 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
  
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

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

Message 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
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

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

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