TreeGadget - CustomDraw - Récupérer les info de l'élément

Programmation d'applications complexes
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

TreeGadget - CustomDraw - Récupérer les info de l'élément

Message par Le Soldat Inconnu »

Salut

je galère sur les TreeGadget CustomDraw (personnalisez quoi)

je butte sur la récupèration des informations suivantes avec l'API :
- élément sélectionné
- élément coché
- élément déployé (noeud ouvert).
- élément à un noeuds
- texte de l'élément

car avec PB, pas de problème (sauf pour savoir si l'élément à un noeud)

Code : Tout sélectionner

Enumeration
  #RechercheFichier_Tree
EndEnumeration

Procedure.l TreeGadget_CustomDraw(WindowID.l, Message.l, wParam.l, lParam.l)
  #NM_CUSTOMDRAW = #NM_FIRST - 12
  #CDDS_ITEM = $10000
  #CDDS_SUBITEM = $20000
  #CDDS_PREPAINT = $1
  #CDDS_POSTPAINT = $2
  #CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
  #CDDS_ITEMPOSTPAINT = #CDDS_ITEM | #CDDS_POSTPAINT
  #CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM | #CDDS_ITEMPREPAINT
  #CDRF_DODEFAULT = $0
  #CDRF_NEWFONT = $2
  #CDRF_SKIPDEFAULT = $4
  #CDRF_NOTIFYITEMDRAW = $20
  #CDRF_NOTIFYPOSTPAINT = $10
  #CDRF_NOTIFYSUBITEMDRAW = $20
  #CDIS_SELECTED = $1
  #CDIS_CHECKED = $8
  
  If Message = #WM_NOTIFY
    *TVCDHeader.NMTVCUSTOMDRAW = lParam
    If *TVCDHeader\nmcd\hdr\hWndFrom = GadgetID(#RechercheFichier_Tree) And * TVCDHeader\nmcd\hdr\code = #NM_CUSTOMDRAW
      Select *TVCDHeader\nmcd\dwDrawStage
          
        Case #CDDS_PREPAINT
          ProcedureReturn #CDRF_NOTIFYITEMDRAW
          
        Case #CDDS_ITEMPREPAINT
    
          Debug *TVCDHeader\nmcd\uItemState
          If *TVCDHeader\nmcd\uItemState & #CDIS_SELECTED ; Si sélectionné
            Debug "Sélectionné"
          EndIf
          If *TVCDHeader\nmcd\uItemState & #CDIS_CHECKED ; Si coché
            Debug "Coché"
          EndIf
          
          Element = TreeGadgetItemNumber(#RechercheFichier_Tree, *TVCDHeader\nmcd\dwItemSpec)
          Etat = GetGadgetItemState(#RechercheFichier_Tree, Element)
          If Etat & #PB_Tree_Selected ; Si sélectionné
            Debug "PB : Sélectionné"
          EndIf
          If Etat & #PB_Tree_Checked ; Si coché
            Debug "PB : Coché"
          EndIf
          If Etat & #PB_Tree_Expanded ; Si coché
            Debug "PB : Déployé"
          EndIf
          Debug "PB : Texte = " + GetGadgetItemText(#RechercheFichier_Tree, Element, 0)
          
          Debug ""
          ProcedureReturn #CDRF_NEWFONT
          
        Default
          ProcedureReturn #PB_ProcessPureBasicEvents
          
      EndSelect
    Else
      ProcedureReturn #PB_ProcessPureBasicEvents
    EndIf
  Else
    ProcedureReturn #PB_ProcessPureBasicEvents
  EndIf
EndProcedure













; Ouvre une fenêtre
If OpenWindow(0, 0, 0, 500, 450, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
  MessageRequester("Erreur", "Imossible de créer la fenêtre")
  End
EndIf

TreeGadget(#RechercheFichier_Tree, 0, 0, 500, 400, #PB_Tree_AlwaysShowSelection | #PB_Tree_CheckBoxes)
SetWindowCallback( @TreeGadget_CustomDraw())

For n = 1 To 10
  AddGadgetItem(#RechercheFichier_Tree, -1, "Elément " + Str(n))
Next
OpenTreeGadgetNode(#RechercheFichier_Tree)
For n = 11 To 20
  AddGadgetItem(#RechercheFichier_Tree, -1, "Elément " + Str(n))
Next
CloseTreeGadgetNode(#RechercheFichier_Tree)
For n = 21 To 30
  AddGadgetItem(#RechercheFichier_Tree, -1, "Elément " + Str(n))
Next

Repeat
  Event = WaitWindowEvent()
  
Until Event = #PB_Event_CloseWindow
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

boarf, laisser tomber, je me suis débrouiller en bidouillant entre l'API et PB

Pas simple en tous cas de dessiner soi-même le contenu d'un TreeGadget, je vous ferais un exemple ;)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Répondre