OVH Cloud OVH Cloud

ListBox et checkbox

26 réponses
Avatar
scraper
bonjour à tous !

un petit souci sur le quel je sèche :

dans un listbox, j'aimerais afficher plusieurs colonnes, définir moi même
les tabulations (mise en page) et aussi avoir la possibilité d'afficher des
checkbox

or il semble qu'avec SendMessage, la redéfinition de la largeur de colonnes
ne fonctionne pas si le style du listbox est à 1 - checkbox)

y aurait il une solution pour ce faire, ou dois je m'orienter définitivement
vers un autre type de contrôle ?

(et si oui, lequel ?)


merci de votre aide



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

10 réponses

1 2 3
Avatar
Aski
Bonsoir Scraper,

En folâtrant sur son clavier, scraper s'est exprimé ainsi :

|| et de là, j'aimerais bien charge l'icone correpondant à la position
|| 153 dans mon ListView ??
||
Tu devrais trouver ton bonheur dans VBExplorer qui donne la méthode pour
récupérer les icônes dans un TreeView.
C'est assez hard ..
Si tu ne trouves pas ton bonheur sur le Web, je peux t'envoyer la source
(zip de 65 Ko).

Aski
Avatar
Jacques93
Bonsoir,
scraper wrote:
Bonjour Inssoukira, dans le message
news:%
tu disais :


A l'adresse ci-dessous tu as un exemple simple et commenté de
listview. http://www.vbfrance.com/code.aspx?ID)43



j'ai été voir, mais ça ne correspond pas à mes attentes ...

en fait, maintenant, je souhaiterais savoir comment charger un ImageList
depuis des icones contenues dans des dll ??

donc, je récupère les infos de stockage d'icones dans les dll qui
m'intéressent (pas de souci)
je les affiche dans un picturebox sur ma form (pas de souci)

ensuite, j'arrive absolument pas à charger l'image que je viens
d'afficher dans mon imagelist ??

(ceci dans le but d'afficher ensuite ces images stockées dans mon
ListView ....)

peut être m'y prends je mal ??

si quelqu'un a des infos là dessus ...

je précise que je dois partir depuis une icone stockée dans une dll
...par exemple, j'ai le chemin :

C:WindwosSystem32shell32.dll,-153

et de là, j'aimerais bien charge l'icone correpondant à la position 153
dans mon ListView ??

merci d'avance




Créer l'image à la position 153 d'un ImageList implique que les 152
précédentes existent, ce qui n'est peut être pas l'idéal. Mais tu peux
contourner (en supposant que ton image ait été transférée de ta dll dans
Picture1) par :

Private Sub Command1_Click()
Me.ListView1.View = lvwSmallIcon
Me.ImageList1.ListImages.Add , "K153", Me.Picture1.Picture
With Me.ListView1
.SmallIcons = Me.ImageList1
.ListItems.Add , , "Test", , GetIndexOf("K153")
End With
End Sub

Private Function GetIndexOf(MyKey As String) As Integer
Dim i As Integer

For i = 1 To Me.ImageList1.ListImages.Count
If Me.ImageList1.ListImages(i).Key = MyKey Then
GetIndexOf = i
Exit Function
End If
Next i
GetIndexOf = 0
End Function


--
Cordialement,

Jacques.
Avatar
scraper
Bonjour Aski, dans le message
news:ebRA%
tu disais :


Bonsoir Scraper,

En folâtrant sur son clavier, scraper s'est exprimé ainsi :

et de là, j'aimerais bien charge l'icone correpondant à la position
153 dans mon ListView ??





Tu devrais trouver ton bonheur dans VBExplorer qui donne la méthode
pour récupérer les icônes dans un TreeView.
C'est assez hard ..
Si tu ne trouves pas ton bonheur sur le Web, je peux t'envoyer la
source (zip de 65 Ko).



euh ... tu es certain que les icones sont extraites d'un fichier dll ?
parce que les sources que j'ai vues les extrayaient de fichiers, et là,
c'est pas tout à fait pareil (y'a même une api pour ça ;-) ... alors que
pour extraire les icones d'une dll, je dois utiliser (sauf avis contraire ?)
l'API ExtractIcon





Aski



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
scraper
Bonjour Jacques93, dans le message
news:
tu disais :


et de là, j'aimerais bien charge l'icone correpondant à la position
153 dans mon ListView ??

merci d'avance




Créer l'image à la position 153 d'un ImageList implique que les 152
précédentes existent, ce qui n'est peut être pas l'idéal.



hemm .... me suis mal exprimé !
je voulais dire, position 153 dans la dll, bien évidemment ! :-(

je teste ton code immédiatement !

merci :-)



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Aski
Salut scraper,

En folâtrant sur son clavier, scraper s'est exprimé ainsi :


|| euh ... tu es certain que les icones sont extraites d'un fichier dll
|| ? parce que les sources que j'ai vues les extrayaient de fichiers,
|| et là, c'est pas tout à fait pareil (y'a même une api pour ça ;-)
|| ... alors que pour extraire les icones d'une dll, je dois utiliser
|| (sauf avis contraire ?) l'API ExtractIcon

Effectivement, ExtracIcon n'est pas utilisé, mais le programme VBExplorer
est proche de Explorer et extrait les icônes du système.
Ci-joint quelques extraits de ce programme :

///////////////////////
' Assign the handles of the system's small and large icon imagelists to
the
' ListView. We will set the ListItem image indices directly in LoadIcons
' proc below. As far as the VB ListView's internal code is concerned, it's
' not using an imagelist, and its ListItem icon properties return 0.
Call ListView_SetImageList(m_hwndLV, GetSystemImagelist(SHGFI_SMALLICON),
LVSIL_SMALL)
Call ListView_SetImageList(m_hwndLV, GetSystemImagelist(SHGFI_LARGEICON),
LVSIL_NORMAL)

' Get the handle to the system's small icon imagelist and assign it to the
' TreeView. We will set the Node image indices directly in InsertFolder.
' As far as the VB TreeView's internal code is concerned, it's not using
' an imagelist. (treeviews share imagelists by default)
Call TreeView_SetImageList(m_hwndTV, GetSystemImagelist(SHGFI_SMALLICON),
TVSIL_NORMAL)
//////////////////////

Si tu trouves plus simple ailleurs, oublie les tuyaux que j'essaie de te
fournir.

Aski
Avatar
scraper
Bonjour Jacques93, dans le message
news:
tu disais :


Créer l'image à la position 153 d'un ImageList implique que les 152
précédentes existent, ce qui n'est peut être pas l'idéal. Mais tu peux
contourner (en supposant que ton image ait été transférée de ta dll
dans Picture1) par :




bon, j'ai examiné ton code mais ça fonctionne tjs pas ?
(faut dire que j'ai jamais manipulé les images, ça doit venir de là ...

il semble justement que mon problème réside dans l'affichage de la dll
extraite

alors, j'arrive bien à extraire l'icone de la dll choisie; je l'affiche dans
mon picturebox, mais ensuite, je n'arrive pas à charger l'image extraite
dans le ListView ???

si je ne mets pas d'image dans le picturebox, j'obtiens un "Image non
valide"
et si je mets une image au préalable (j'ai lu que c'est préférable ?) je
duplique cette image, et non celles que je veux charger, dans mon ListView
??

disons pour une ligne, je fais :

Me.Picture1.Cls
return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32", "-153")
return2& = DrawIcon(Me.Picture1.hDC, 0, 0, return1&)
Me.ImageList1.ListImages.Add 1, , Me.Picture1.Picture
Set Me.lstFiles.SmallIcons = Me.ImageList1
Me.lstFiles.ListItems.Add , , "Test", , 1


doit manquer qque chose, mais quoi ??

merci de ton aide ....




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Jacques93
Bonsoir,
scraper wrote:
Bonjour Jacques93, dans le message
news:
tu disais :




[...]

disons pour une ligne, je fais :

Me.Picture1.Cls
return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32", "-153")
return2& = DrawIcon(Me.Picture1.hDC, 0, 0, return1&)
Me.ImageList1.ListImages.Add 1, , Me.Picture1.Picture
Set Me.lstFiles.SmallIcons = Me.ImageList1
Me.lstFiles.ListItems.Add , , "Test", , 1


doit manquer qque chose, mais quoi ??




Me.Picture1.Cls
Me.lstFiles.View = lvwSmallIcon ' IMPORTANT (1)
return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32Shell32.dll",
"-153")
Me.Picture1.AutoRedraw = True ' IMPORTANT AUSSI
return2& = DrawIcon(Me.Picture1.hdc, 0, 0, return1)
Me.Picture1.Picture = Me.Picture1.Image
Me.ImageList1.ListImages.Add 1, , Me.Picture1.Picture
Me.lstFiles.SmallIcons = Me.ImageList1
Me.lstFiles.ListItems.Add , , "Test", , 1


Chez moi, comme ça, ça tourne, sauf que l'image fait 45 x 49, il
faudrait qu'elle fassent 16x16 dans un listview en mode SmallIcon

(1) Il faut que l'ImageList associé au ListView corresponde au
mode d'affichage (ici SmallIcon)

Important à savoir aussi, il est impossible de modifier un ImageList à
partir du moment où il a été lié à un ListView.
--
Cordialement,

Jacques.
Avatar
scraper
Bonjour Jacques93, dans le message
news:
tu disais :

doit manquer qque chose, mais quoi ??




Me.Picture1.Cls
Me.lstFiles.View = lvwSmallIcon ' IMPORTANT (1)



ah oui, j'ai oublié de préciser, je voudrais tout ça en mode report ! :-(

désolé ...
mais ça devrait fonctionner quand même, non ?
puisque j'arrive à insérer l'icone de mon picturebox
ce qui se passe, c'est que je change dynamiquement l'image du picturebox ,
mais c'est comme si c'était pas pris en compte ??

return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32Shell32.dll",
"-153")
Me.Picture1.AutoRedraw = True ' IMPORTANT AUSSI



euh ... je l'ai précisé dans les propriétés du picturebox
est il important de le repréciser dans le code ?

return2& = DrawIcon(Me.Picture1.hdc, 0, 0, return1)
Me.Picture1.Picture = Me.Picture1.Image
Me.ImageList1.ListImages.Add 1, , Me.Picture1.Picture
Me.lstFiles.SmallIcons = Me.ImageList1
Me.lstFiles.ListItems.Add , , "Test", , 1


Chez moi, comme ça, ça tourne, sauf que l'image fait 45 x 49, il
faudrait qu'elle fassent 16x16 dans un listview en mode SmallIcon



je vais réessayer ...

(1) Il faut que l'ImageList associé au ListView corresponde au
mode d'affichage (ici SmallIcon)



ben là j'avoue que je vois pas trop, en mode report, comment le signifier ?
mais encore une fois, ça fonctionne, sauf que c'est x fois la même icone qui
est affichée dans mon ListView !
donc, c'est le changement que j'arrive pas à faire (ou qui pose problème)
dans le picturebox

Important à savoir aussi, il est impossible de modifier un ImageList à
partir du moment où il a été lié à un ListView.



oui


merci de ton aide, j'avoue que c'est bien nébuleux pour moi, tout ça ! :-(


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Jacques93
Bonsoir,
scraper wrote:
Bonjour Jacques93, dans le message
news:
tu disais :

doit manquer qque chose, mais quoi ??





Me.Picture1.Cls
Me.lstFiles.View = lvwSmallIcon ' IMPORTANT (1)




ah oui, j'ai oublié de préciser, je voudrais tout ça en mode report ! :-(

désolé ...



En mode Report (Détails), il faut créer des colonnes (au moins une)

mais ça devrait fonctionner quand même, non ?
puisque j'arrive à insérer l'icone de mon picturebox
ce qui se passe, c'est que je change dynamiquement l'image du picturebox
, mais c'est comme si c'était pas pris en compte ??

return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32Shell32.dll",
"-153")
Me.Picture1.AutoRedraw = True ' IMPORTANT AUSSI




euh ... je l'ai précisé dans les propriétés du picturebox
est il important de le repréciser dans le code ?



A priori non,

Code modifié pour mode 'Report'

Me.Picture1.Cls
Me.lstFiles.View = lvwReport
Me.lstFiles.ColumnHeaders.Add , , "Titre de la colonne", 2000
return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32Shell32.dll",
"-153")
'return1& = ExtractIconEx("C:Windowssystem32Shell32.dll", -153,
0&, ics, 1)
Me.Picture1.AutoRedraw = True
return2& = DrawIcon(Me.Picture1.hdc, 0, 0, return1)
Me.Picture1.Picture = Me.Picture1.Image
Me.ImageList1.ListImages.Add 1, , Me.Picture1.Picture
Me.lstFiles.SmallIcons = Me.ImageList1
Me.lstFiles.ListItems.Add , , "Hello ", , 1


--
Cordialement,

Jacques.
Avatar
scraper
Bonjour Jacques93, dans le message
news:%
tu disais :


ah oui, j'ai oublié de préciser, je voudrais tout ça en mode report
! :-( désolé ...



En mode Report (Détails), il faut créer des colonnes (au moins une)



oui, désolé, je ne l'avais pas précisé ...
j'avais créé 2 colonnes !

euh ... je l'ai précisé dans les propriétés du picturebox
est il important de le repréciser dans le code ?



A priori non,



et pourtant, pas rapport à mes essais, ton code (celui du message précédent)
fonctionne !
en fait, j'ai rajouté à mon projet

Me.Picture1.AutoRedraw = True
et
Me.Picture1.Picture = Me.Picture1.Image

et là, ça roule !!


juste un petit bémol : malgré le Me.Picture1.Cls, les icones s'empilent dans
le picturebox !
je sais pas trop que faire pour nettoyer ça ...

j'ajoute que j'ai préféré opter pour ExtractIconEx et DrawIconEx, qui me
permettent d'extraire une icone de petite taille (sinon, c'est bcp moins
propre ...)
=> je vois que tu l'avais mentionné dans ton code ci dessous ;-)

me reste donc plus que ce problème de superposition d'images dans le
picturebox :-)

si tu as une idée ?

merci en tout cas de ton aide précieuse ...



Code modifié pour mode 'Report'

Me.Picture1.Cls
Me.lstFiles.View = lvwReport
Me.lstFiles.ColumnHeaders.Add , , "Titre de la colonne", 2000
return1& = ExtractIcon(Me.hWnd, "C:Windowssystem32Shell32.dll",
"-153")
'return1& = ExtractIconEx("C:Windowssystem32Shell32.dll", -153,
0&, ics, 1)
Me.Picture1.AutoRedraw = True
return2& = DrawIcon(Me.Picture1.hdc, 0, 0, return1)
Me.Picture1.Picture = Me.Picture1.Image
Me.ImageList1.ListImages.Add 1, , Me.Picture1.Picture
Me.lstFiles.SmallIcons = Me.ImageList1
Me.lstFiles.ListItems.Add , , "Hello ", , 1



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
1 2 3