TreeGadget - Ajouter une image devant l'icône
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
TreeGadget - Ajouter une image devant l'icône
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 !
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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 !
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Non, je te parles de celui là:
http://forums.purebasic.com/english/vie ... adget+icon
C'est bien toi qui a posté ici.
http://purebasic.hmt-forum.com/viewtopic.php?t=4057
http://forums.purebasic.com/english/vie ... adget+icon
C'est bien toi qui a posté ici.
http://purebasic.hmt-forum.com/viewtopic.php?t=4057
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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 !
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
J'ai pris le code de LSI et réussi pour avoir ce que je voulais
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 !
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
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Personne pour m'aider ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
C'est un peu grand comme code
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"


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"


Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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 !
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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 ...
Réexplique moi mieux ton pb et je verai ce que je peux faire...
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 ...

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 !
Participez à son extension: ajouter vos programmes et partagez vos codes !
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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
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
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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
)
Donc dsl ..
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

Donc dsl ..

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
NON !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Search an professional of the api, plz
Cherche un utilisateur de l'api pour aide, merci !
Search an professional of the api, plz
Cherche un utilisateur de l'api pour aide, merci !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net