TreeGadget - Ajouter une image devant l'icône

Programmation d'applications complexes
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

TreeGadget - Ajouter une image devant l'icône

Message par Progi1984 »

Voilà bijour à tous enfin bonsoir !

J'ai encore besoin de votre aide :

J'aurais besoin d'ajouter une image créé par mes soins via StarDrawing devant chaque item. Elle représentera l'avancement de chaque projet/caégorie ou tache pour mon logiciel Progitodo (cf ma signature). Donc chaque image sera différente généré à partir d'une variable, et modifié à chque modficiation de cette variable.
J'ai bien trouvé ce code mais impossible de comprendre quelque chose, mon niveau en PB est encore trop faible !
http://purebasic.hmt-forum.com/viewtopi ... 11443649a5

Merci encore d'avance de votre aide !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Aprés une demi de journée de prise de tete sur ce code, je vens vous redemander de l'aide !

Meme un code ou on place une image avant l'icone me serait utile tant qu'il n'est pas aussi compliqué que celui de LSI !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu as essayé avec l'api et les fonctions ImageList ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Mais, j'y pense!

Tu avais bien trouvé un code sur le forum anglais, non?
Qu'est-ce qui ne va pas avec ce code?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Le code de LSI que j'ai trouvé etant d'une taille déjà iomportante, puis trés compliqué car gestion de recherche de fichiers, d'afficahe, etc... Je n'ai pas réussi à le comprendre et à extraire ce que je voulais : cad mettre une image juste devant l'icone et la modifier facilement !
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Non, c'est tout à fait différent, là, c'est pour définir l'icone dans un treegadget !

Alors que moi, je veux rajouter une image devant l'icone du treegadget : regarde le lien que je t'ai passé et teste le code, tu comprendras !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

J'ai pris le code de LSI et réussi pour avoir ce que je voulais

Code : Tout sélectionner

Enumeration
  #RechercheFichier_Tree
 
  ;- Images
  ; TreeGadget
  #Fichier0
  #Fichier1
  #Dossier0
  #Dossier1
  #Fichier0_Selected
  #Fichier1_Selected
  #Dossier0_Selected
  #Dossier1_Selected
  #Tree_Glyph_Closed
  #Tree_Glyph_Opened
EndEnumeration

;- Contantes et variables de paramétrage
Global RechercheFichier_Espace.l
Global ColorBackGround_Selected.l, ColorBackGround_Normal.l, ColorBorder_Selected.l, ColorBorder_Normal.l
#RechercheFichier_EspacePx = 8

#CheckBox_Size = 12 ; Taille des boite à cocher
#ColorBackGround_Selected = $707070 ; Couleur de fond du texte sélectionné
#ColorBackGround_Normal = $E0FFFF ; Couleur de fond du texte normal
#ColorBorder_Normal = $FFFFFF ; Couleur de bordure du texte sélectionné
#ColorBorder_Selected = 0 ; Couleur de bordure du texte normal
#ColorText_NormalSelected = $FFFFFF ; Couleur du texte sélectionné
#ColorText_Normal = 0 ; couleur du texte normal
ColorBackGround_Selected = CreateSolidBrush_(#ColorBackGround_Selected)
ColorBackGround_Normal = CreateSolidBrush_(#ColorBackGround_Normal)
ColorBorder_Selected = CreateSolidBrush_(#ColorBorder_Selected)
ColorBorder_Normal = CreateSolidBrush_(#ColorBorder_Normal)
#ColorCheckBox_Element = $74C274 ; Couleur de l'élement signifiant que la case est cochée
#ColorCheckBox_Border = 0 ; Couleur de bordure des boites à cocher
#ColorCheckBox_Selected = $74D6FF ; Coleur des boites à cocher sélectionnées

#Tree_Glyph_Space = 19 ; décalage en pixel après chaque noeuds

;- Polices de caractère
Global FontID_Defaut.l
FontID_Defaut = GetStockObject_(#DEFAULT_GUI_FONT)


; Cette liste va recevoir le contenu du dossier dans lequel on a lancé la recherche
Structure InfoFichier
  Nom.s
  Type.l
  Info1.l
  Info2.l
  Niveau.l
EndStructure
NewList RechercheFichier.InfoFichier()
Global DossierRecherche.s

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
  #CDRF_NOTIFYPOSTERASE = $40
  #CDIS_SELECTED = $1
  #CDIS_CHECKED = $8
 
  Select Message
    Case #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
            ; Modifier la couleur de fond
            ; *TVCDHeader\clrTextBk = RGB(255, 255, 223)
            ; Modifier la couleur du texte
            ; *TVCDHeader\clrText = RGB(0, 0, 0)
            ; Modifier la police
            ; SelectObject_(*TVCDHeader\nmcd\hDC, FontBold)
           
            ; Le numéro de la ligne affichée
            Item.l = TreeGadgetItemNumber(#RechercheFichier_Tree, *TVCDHeader\nmcd\dwItemSpec)
            If Item >= 0 And * TVCDHeader\nmcd\rc\Right <> 0
              ; *TVCDHeader\nmcd\rc\Right <> 0
              ; Quand le TreeGadget est trop petit pour afficher le texte en entier, un ToolTip apparait et dans ce cas la zone de dessin est nulle
              ; il faut donc filtrer cet affichage
             
              Level.l = *TVCDHeader\iLevel ; Le niveau de l'item (dans combien de noeuds il se trouve)
              *TVCDHeader\nmcd\rc\Left - GetScrollPos_(GadgetID(#RechercheFichier_Tree), #SB_HORZ) ; Prendre en compte le décalage horizontal (la ScrollBar horizontale)
             
              ; On sélectionne l'élément dans la liste
              SelectElement(RechercheFichier(), Item)
             
              ; On regarde si on a associé un icône à l'élément
              pitem.TV_ITEM\mask = #TVIF_IMAGE
              pitem\hItem = *TVCDHeader\nmcd\dwItemSpec
              SendMessage_(GadgetID(#RechercheFichier_Tree), #TVM_GETITEM, 0, pitem)
              If pitem\iImage = 0 ; Si pas d'icône
                Fichier.s = DossierRecherche + RechercheFichier()\Nom ; on récupère le nom du fichier
                SHGetFileInfo_(Fichier, 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON | #SHGFI_SMALLICON) ; on extrait l'icône associé au fichier
                pitem.TV_ITEM\mask = #TVIF_IMAGE | #TVIF_SELECTEDIMAGE
                pitem\iImage = InfosFile\iIcon
                pitem\iSelectedImage = InfosFile\iIcon
                SendMessage_(GadgetID(#RechercheFichier_Tree), #TVM_SETITEM, 0, pitem) ; On mets l'icône sur l'item
              EndIf
             
              ; Le niveau de l'item (on décale l'affichage en fonction du nombre de noeuds avant l'item)
              *TVCDHeader\nmcd\rc\Left + Level * #Tree_Glyph_Space
             
              ; On dessine les textes sans couleur de fond
              SetBkMode_(*TVCDHeader\nmcd\hDC, #TRANSPARENT)
             
              ItemExpanded = GetGadgetItemState(#RechercheFichier_Tree, Item)
              ItemSelected = ItemExpanded & #PB_Tree_Selected ; Si la ligne est sélectionnée
              ItemExpanded = ItemExpanded & #PB_Tree_Expanded ; Si la ligne est déployée (pour les dossier)
             
              ; On choisi les couleurs du cadre autour du texte et la couleur du texte
              If ItemSelected
                ColorBackGround = ColorBackGround_Selected ; Couleur de fond
                ColorBorder = ColorBorder_Selected ; Couleur de bordure
                SetTextColor_(*TVCDHeader\nmcd\hDC, #ColorText_NormalSelected) ; Couleur du texte
              Else
                ColorBackGround = ColorBackGround_Normal
                ColorBorder = ColorBorder_Normal
                SetTextColor_(*TVCDHeader\nmcd\hDC, #ColorText_Normal)
              EndIf
             
              ; On choisi les images des boites à cocher
              If RechercheFichier()\Type = 1 ; Si on a un fichier
                If ItemSelected
                  If RechercheFichier()\Info1
                    Image1 = #Fichier1_Selected
                  Else
                    Image1 = #Fichier0_Selected
                  EndIf
                  If RechercheFichier()\Info2
                    Image2 = #Fichier1_Selected
                  Else
                    Image2 = #Fichier0_Selected
                  EndIf
                Else
                  If RechercheFichier()\Info1
                    Image1 = #Fichier1
                  Else
                    Image1 = #Fichier0
                  EndIf
                  If RechercheFichier()\Info2
                    Image2 = #Fichier1
                  Else
                    Image2 = #Fichier0
                  EndIf
                EndIf
              Else ; Si on a un dossier
                If ItemSelected
                  If RechercheFichier()\Info1
                    Image1 = #Dossier1_Selected
                  Else
                    Image1 = #Dossier0_Selected
                  EndIf
                  If RechercheFichier()\Info2
                    Image2 = #Dossier1_Selected
                  Else
                    Image2 = #Dossier0_Selected
                  EndIf
                Else
                  If RechercheFichier()\Info1
                    Image1 = #Dossier1
                  Else
                    Image1 = #Dossier0
                  EndIf
                  If RechercheFichier()\Info2
                    Image2 = #Dossier1
                  Else
                    Image2 = #Dossier0
                  EndIf
                EndIf
               
                ; On dessine le noeud
                If ItemExpanded
                  Image = #Tree_Glyph_Opened
                Else
                  Image = #Tree_Glyph_Closed
                EndIf
                DrawState_(*TVCDHeader\nmcd\hDC, 0, 0, UseImage(Image), 0, *TVCDHeader\nmcd\rc\Left, *TVCDHeader\nmcd\rc\Top, 19, 16, #DST_BITMAP | #DSS_NORMAL)
              EndIf
             
              *TVCDHeader\nmcd\rc\Left + #Tree_Glyph_Space
             
              ; On dessine les boites à cocher
              DrawState_(*TVCDHeader\nmcd\hDC, 0, 0, UseImage(Image1), 0, *TVCDHeader\nmcd\rc\Left, *TVCDHeader\nmcd\rc\Top + (16 - #CheckBox_Size) / 2, #CheckBox_Size, #CheckBox_Size, #DST_BITMAP | #DSS_NORMAL)
              ;DrawState_(*TVCDHeader\nmcd\hDC, 0, 0, UseImage(Image2), 0, *TVCDHeader\nmcd\rc\Left + #CheckBox_Size + 1, *TVCDHeader\nmcd\rc\Top + (16 - #CheckBox_Size) / 2, #CheckBox_Size, #CheckBox_Size, #DST_BITMAP | #DSS_NORMAL)
             
              ; On dessine l'icône
              himl = SendMessage_(GadgetID(Gadget), #TVM_GETIMAGELIST, #TVSIL_NORMAL, 0)
              ImageList_Draw_(himl, pitem\iImage, *TVCDHeader\nmcd\hDC, *TVCDHeader\nmcd\rc\Left + #CheckBox_Size + 8, *TVCDHeader\nmcd\rc\Top, #ILD_NORMAL)
             
              ; On regarde la longueur en pixel du texte
              Txt.s = GetFilePart(RechercheFichier()\Nom)
              GetTextExtentPoint32_(*TVCDHeader\nmcd\hDC, Txt, Len(Txt), TxtSize.SIZE)
             
              ; On dessine le cadre autour du texte
              *TVCDHeader\nmcd\rc\Left + #CheckBox_Size + 8 + 16 + 3
              *TVCDHeader\nmcd\rc\Right = *TVCDHeader\nmcd\rc\Left + 6 + TxtSize\cx
              FillRect_(*TVCDHeader\nmcd\hDC, *TVCDHeader\nmcd\rc, ColorBackGround) ; Le fond
              FrameRect_(*TVCDHeader\nmcd\hDC, *TVCDHeader\nmcd\rc, ColorBorder) ; La bordure
             
              ; On dessine le texte
              *TVCDHeader\nmcd\rc\Left + 3
              DrawTextEx_(*TVCDHeader\nmcd\hDC, Txt, -1, *TVCDHeader\nmcd\rc, #DT_EXPANDTABS | #DT_VCENTER | #DT_SINGLELINE | Alignement, 0)
            EndIf
            ProcedureReturn #CDRF_SKIPDEFAULT
           
        EndSelect
      EndIf
     
  EndSelect
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure AddTreeGadgetImageList(Gadget)
  himl = SendMessage_(GadgetID(Gadget), #TVM_GETIMAGELIST, #TVSIL_NORMAL, 0)
  If himl = 0 ; Pas d'imagelist associé au TreeGadget
    himl = SHGetFileInfo_("", 0, @InfosFile.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_SYSICONINDEX | #SHGFI_SMALLICON)
    SendMessage_(GadgetID(Gadget), #TVM_SETIMAGELIST, #TVSIL_NORMAL, himl) ; On associe l'imagelist avec le gadget
    SetWindowCallback( @TreeGadget_CustomDraw()) ; Cette callback sert à personnaliser l'apparence du TreeGadget
  EndIf
EndProcedure

Procedure AnalyseDossier(Num, Dossier.s)
  If Right(Dossier, 1) <> "\" : Dossier + "\" : EndIf
 
  ; Le dossier 2
  Dossier2.s = RemoveString(Dossier, DossierRecherche)
  Dossier3.s = ReplaceString(Left(Dossier2, Len(Dossier2) - 1), "\", "\?1?")
  ; on met ?1? devant le nom des dossier et ?2? devant le nom des fichiers
  ; Ainsi lors du tri des données, les dossiers seront placés avant les fichiers
  ; Il suffira ensuite de supprimer les ?1? et ?2? des noms de fichiers ou dossiers
  ; Le caratère ? n'étant pas utilisable dans les noms de fichiers, cet ajout ne présente aucun problème
  If Dossier3
    Dossier3 = "?1?" + Dossier3 + "\"
  EndIf
 
  If ExamineDirectory(Num, Dossier, "*.*")
    Repeat
      FileType = NextDirectoryEntry()
     
      If FileType = 1
        ; On a un fichier
        Name.s = DirectoryEntryName()
        AddElement(RechercheFichier())
        RechercheFichier()\Nom = Dossier3 + "?2?" + Name
        RechercheFichier()\Type = 1
       
      ElseIf FileType = 2
        ; On a un dossier
        Name.s = DirectoryEntryName()
        If Name <> "." And Name <> ".."
          AddElement(RechercheFichier())
          RechercheFichier()\Nom = Dossier3 + "?1?" + Name
          RechercheFichier()\Type = 2
         
          ; On lance l'analyse sur ce nouveau dossier (analyse récursive)
          AnalyseDossier(Num + 1, Dossier + Name)
          ; On réactive le dossier de recherche en cours
          UseDirectory(Num)
         
        EndIf
      EndIf
     
    Until FileType = 0
  EndIf
EndProcedure

Procedure RechercheFichiers(Dossier.s)
 
  If Right(Dossier, 1) <> "\" : Dossier + "\" : EndIf ; On s'assure qu'il y a bien un \ à la fin du nom du dossier
 
  AddTreeGadgetImageList(#RechercheFichier_Tree)
  ClearGadgetItemList(#RechercheFichier_Tree)
  ClearList(RechercheFichier())
 
  DossierRecherche = Dossier
 
  AnalyseDossier(0, Dossier)
 
  ; On tri les noms de fichiers et dossiers
  ; Je passe ici par un SortStructuredList car SortList à une erreur dans PB 3.93 avec le tri de listes chainés contenant du texte, ceci doit-être résolu pour les future version.
  SortStructuredList(RechercheFichier(), 2, 0, #PB_Sort_String)
 
  ; On retire les ?1? et ?2?, et également l'adresse du dossier d'origine
  ForEach RechercheFichier()
    RechercheFichier()\Nom = RemoveString(RemoveString(RechercheFichier()\Nom, "?1?"), "?2?")
  Next
 
  ; On rempli la liste de fichier
  HideGadget(#RechercheFichier_Tree, 1) ; Le fait de cacher le gadget permet de le remplir plus rapidement
  Nb_Dossier = 0
  n = 0
  Txt.s = Space(RechercheFichier_Espace)
  ForEach RechercheFichier()
    RechercheFichier()\Niveau = CountString(RechercheFichier()\Nom, "\") ; On regarde le niveau de l'élément
    If RechercheFichier()\Niveau < Nb_Dossier
      Nb_Dossier - 1
      CloseTreeGadgetNode(#RechercheFichier_Tree)
      AddGadgetItem(#RechercheFichier_Tree, n, Txt + GetFilePart(RechercheFichier()\Nom) + Txt)
    ElseIf RechercheFichier()\Niveau > Nb_Dossier
      Nb_Dossier + 1
      OpenTreeGadgetNode(#RechercheFichier_Tree)
      AddGadgetItem(#RechercheFichier_Tree, n, Txt + GetFilePart(RechercheFichier()\Nom) + Txt)
      SetGadgetItemState(#RechercheFichier_Tree, n - 1, #PB_Tree_Expanded)
    Else
      AddGadgetItem(#RechercheFichier_Tree, n, Txt + GetFilePart(RechercheFichier()\Nom) + Txt)
    EndIf
    n + 1
  Next
 
  ; Les icônes ne sont pas affichées ici, elles sont gérer par la callback
  ; Pourquoi ?
  ; Les icônes sont très long à charger, donc plutot que de récupérer les icônes de tous les éléments
  ; La callback récupère les icônes uniquement pour les éléments affichés
  ; Ce qui donne un gain de temps considérable
 
  SetGadgetState(#RechercheFichier_Tree, 0) ; On sélectionne le premier élément
 
  HideGadget(#RechercheFichier_Tree, 0)
 
EndProcedure








; Ouvre une fenêtre
If OpenWindow(0, 0, 0, 200, 250, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered, "Recherche fichiers") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf


;{ Nombre d'espace nécessaire au décalage des textes du TreeGadget
; A quoi sert ceci ?
; Comme je dessine entièreement le TreeGadget, la longueur de la ligne n'est pas forcément identiques à la ligne standard
; Alors j'ajoute des espaces pour ajusté la longueur
StartDrawing(WindowOutput())
  DrawingFont(FontID_Defaut)
  RechercheFichier_Espace = 0
  Repeat
    RechercheFichier_Espace + 1
  Until TextLength(Space(RechercheFichier_Espace)) >= (#RechercheFichier_EspacePx + 2 * #CheckBox_Size) / 2
StopDrawing()
;}
;{ Création des images du TreeGadget
CreateImage(#Fichier0, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  DrawingMode(4)
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, #ColorCheckBox_Border)
StopDrawing()
CreateImage(#Fichier1, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  Box(2, 2, #CheckBox_Size - 4, #CheckBox_Size - 4, #ColorCheckBox_Element)
  DrawingMode(4)
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, #ColorCheckBox_Border)
StopDrawing()

CreateImage(#Dossier0, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  DrawingMode(4)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2, #ColorCheckBox_Border)
StopDrawing()
CreateImage(#Dossier1, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2 - 2, #ColorCheckBox_Element)
  DrawingMode(4)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2, #ColorCheckBox_Border)
StopDrawing()

CreateImage(#Fichier0_Selected, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  Box(1, 1, #CheckBox_Size - 2, #CheckBox_Size - 2, #ColorCheckBox_Selected)
  DrawingMode(4)
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, #ColorCheckBox_Border)
StopDrawing()
CreateImage(#Fichier1_Selected, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  Box(1, 1, #CheckBox_Size - 2, #CheckBox_Size - 2, #ColorCheckBox_Selected)
  Box(2, 2, #CheckBox_Size - 4, #CheckBox_Size - 4, #ColorCheckBox_Element)
  DrawingMode(4)
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, #ColorCheckBox_Border)
StopDrawing()

CreateImage(#Dossier0_Selected, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2, #ColorCheckBox_Selected)
  DrawingMode(4)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2, #ColorCheckBox_Border)
StopDrawing()
CreateImage(#Dossier1_Selected, #CheckBox_Size, #CheckBox_Size)
StartDrawing(ImageOutput())
  Box(0, 0, #CheckBox_Size, #CheckBox_Size, $FFFFFF)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2, #ColorCheckBox_Selected)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2 - 2, #ColorCheckBox_Element)
  DrawingMode(4)
  Circle(#CheckBox_Size / 2, #CheckBox_Size / 2, #CheckBox_Size / 2, #ColorCheckBox_Border)
StopDrawing()

CreateImage(#Tree_Glyph_Closed, 19, 16)
StartDrawing(ImageOutput())
  Box(0, 0, 19, 16, $FFFFFF)
  DrawingMode(4)
  Box(5, 4, 9, 9, 0)
  Line(9, 6, 0, 5, 0)
  Line(7, 8, 5, 0, 0)
StopDrawing()

CreateImage(#Tree_Glyph_Opened, 19, 16)
StartDrawing(ImageOutput())
  Box(0, 0, 19, 16, $FFFFFF)
  DrawingMode(4)
  Box(5, 4, 9, 9, 0)
  Line(7, 8, 5, 0, 0)
StopDrawing()

;}


TreeGadget(#RechercheFichier_Tree, 0, 0, 200, 200, #PB_Tree_AlwaysShowSelection)

Temps1 = ElapsedMilliseconds()

; On lance la recherche
; Vous devez mettre ici le dossier de votre choix
; 3700 fichiers en 16 secondes sur mon 900mhz
RechercheFichiers("C:\Program Files\MSN Gaming Zone Extended\Catalogs")

Temps2 = ElapsedMilliseconds()

TextGadget(#PB_Any, 0, 200, 200, 15, Str(CountList(RechercheFichier())) + " fichiers et dossiers")
TextGadget(#PB_Any, 0, 215, 200, 15, Str(Temps2 - Temps1) + " ms")

Repeat
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_EventGadget
      Select EventGadgetID()
        Case #RechercheFichier_Tree
          Select EventType()
            Case #PB_EventType_LeftClick
              GetCursorPos_( @MouseClic.TV_HITTESTINFO\pt) ; Coordonnée de la souris
              ScreenToClient_(GadgetID(#RechercheFichier_Tree), @MouseClic\pt) ; On convertit les coordonnées par rapport au gadget
              SendMessage_(GadgetID(#RechercheFichier_Tree), #TVM_HITTEST, 0, MouseClic) ; On récupère le handle de l'élément cliqué
              Item = TreeGadgetItemNumber(#RechercheFichier_Tree, MouseClic\hItem) ; On récupère le numéro de l'item cliqué
              If Item >= 0
                SetGadgetState(#RechercheFichier_Tree, Item) ; On sélectionne l'item (FULLROWSELECT)
               
                SelectElement(RechercheFichier(), Item) ; on récupère l'élément de la liste
               
                MouseClic\pt\X + GetScrollPos_(GadgetID(#RechercheFichier_Tree), #SB_HORZ) ; prise en compte du décalage du à la ScrollBar verticale
               
                ; Si on clique sur la première case à cocher
                If MouseClic\pt\X >= RechercheFichier()\Niveau * #Tree_Glyph_Space + #Tree_Glyph_Space And MouseClic\pt\X < RechercheFichier()\Niveau * #Tree_Glyph_Space + #Tree_Glyph_Space + #CheckBox_Size
                  ; On change l'état de la case à cocher
                  RechercheFichier()\Info1 = 1 - RechercheFichier()\Info1
                  InvalidateRect_(GadgetID(#RechercheFichier_Tree), 0, 0) ; On dit de redessiner le gadget
               
                  ; Si on clique sur la deuxième case à cocher
                ElseIf MouseClic\pt\X >= RechercheFichier()\Niveau * #Tree_Glyph_Space + #Tree_Glyph_Space + #CheckBox_Size + 1 And MouseClic\pt\X < RechercheFichier()\Niveau * #Tree_Glyph_Space + #Tree_Glyph_Space + #CheckBox_Size * 2 + 1
                  ; On change l'état de la case à cocher
                  RechercheFichier()\Info2 = 1 - RechercheFichier()\Info2
                  InvalidateRect_(GadgetID(#RechercheFichier_Tree), 0, 0) ; On dit de redessiner le gadget
                EndIf
              EndIf
          EndSelect
      EndSelect
  EndSelect
 
Until Event = #PB_Event_CloseWindow
Mais impossible de faire ce que je veux :
Cad créer un treegadget
Ajouter des items avec icone et image attaché !
Puis modifier les images quand je le veux !


SI Régis, tu passes par là, Help me !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Personne pour m'aider ?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

C'est un peu grand comme code :o
J'ai pas ma clé USB sur moi, dc je pex pas tester.
Je récupérerai ton code une autre fois si personne ne t'a répondu.

Mais perso, c'est pas ma spécialiser les gadgets.
Demande au pro ... "Gadget35" :lol: 8)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Lionel, je te remercie beaucoup !

Ca fait une semaine que j'y suis mais impossible d'y arriver ! Bizarre la technique est peu compliqué mais quoique je fasse, ca ne fonctionne pas !

Donc je remercie d'avance tout ce qui se penche dessus !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'ai regarder ton code, mais je ne comprend pas ce qui marche pas.
A part peut être un problème au niveau de la variable : RechercheFichier_Espace. Par défaut, elle vaut 6 je crois. Or le "pop-up menu" n'apparait pas. Il y a que qd je la met à une valeur supérieure ou égale à 12 que cela marche.

Sinon, c'est un super code, je le garde dans mes archives ... :D

Réexplique moi mieux ton pb et je verai ce que je peux faire...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

En fait, le code marche parfaitement meme, mais je n'arrive pas à le simplifier

Je souhaite faire un truc dans ce genre

On créer un treegadget
On ajoute des items avec icone et image attaché !
On modifier les images quand je le veux !

Et le tout le plus simplement possible

Ce qui me perds doit etre la recherche de fichiers, etc.. En fait, faudrait un code avec un ajout des items via un tablo ou un truc prédéfini dans ce genre !

Merci de ton aide
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Oula, je crois pas pouvoir t'aider là.
Je suis pas encore intime avec l'API et les gadgets recolorés j'y ai justé gouté un peu avec mon ALP (dont je vais reprogrammer certaines parties et j'ai ajouté un nouveau skin :D)

Donc dsl .. :?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

NON !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Search an professional of the api, plz

Cherche un utilisateur de l'api pour aide, merci !
Répondre