Ajouter une colonne dans un ListView avec SendMessage

Signaler
Messages postés
25
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
5 octobre 2006
-
Messages postés
25
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
5 octobre 2006
-
Salut à tous,

Je galère pour ajouter une colonne à un ListView dont je possède le handle, avec l'API SendMessage. La constante à utiliser est LVM_INSERTCOLUMNA. J'ai essayé de retoucher une fonction d'une source vraiment complète prise sur vbAccelerator, sans succès

Je n'ai pas trouvé d'autres exemples sur internet... Quelqu'un saurait-il comment faire fonctionner tout cela

Merci d'avance

VBEnJ0Y

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
lol, tu n'as qu'à le demander à l'auteur de la source en question ...
Chez toi, combien vaut ta constante ?
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_INSERTCOLUMNA As Long = (LVM_FIRST + 27)

Quel syntaxe de SendMessage utilises-tu ? et qu'est ce qui ne va pas ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
Messages postés
25
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
5 octobre 2006

Hello jack,

En fait, les quelques fois où j'ai envoyé un mail à un programmeur anglais, je n'ai obtenu aucune réponse. Peut-être que mon anglais leur fait peur

Oui, c'est bien ça pour les constantes. J'avais essayé de faire une fonction au début :

Private Const LVM_FIRST As Long = &H1000
Private Const LVM_INSERTCOLUMNA As Long = (LVM_FIRST + 27)
Private Const LVCF_FMT As Long = &H1
Private Const LVCF_IMAGE As Long = &H10
Private Const LVCF_ORDER As Long = &H20
Private Const LVCF_SUBITEM As Long = &H8
Private Const LVCF_TEXT As Long = &H4
Private Const LVCF_WIDTH As Long = &H2
Private Const LVCFMT_BITMAP_ON_RIGHT As Long = &H1000
Private Const LVCFMT_CENTER As Long = &H2
Private Const LVCFMT_COL_HAS_IMAGES As Long = &H8000
Private Const LVCFMT_IMAGE As Long = &H800
Private Const LVCFMT_JUSTIFYMASK As Long = &H3
Private Const LVCFMT_LEFT As Long = &H0
Private Const LVCFMT_RIGHT As Long = &H1

Private Type LVCOLUMN
mask As Long
fmt As Integer
cx As Integer
pszText As String
cchTextMax As Integer
iSubItem As Integer
End Type

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lparam As Any) As Long

'ajoute une colonne
Public Function InsertColumn(Byval hListView as Long, ByVal sName As String, ByVal index As Long, Optional ByVal Width As Long = 1040) As Boolean
Dim pCol As LVCOLUMN
With pCol
.cchTextMax = Len(sName)
.cx = Width
.fmt = LVCFMT_LEFT
.iSubItem = index
.mask = LVCF_WIDTH Or LVCF_FMT Or LVCF_SUBITEM Or LVCF_TEXT
.pszText = sName
End With
InsertColumn = SendMessage(hListView, LVM_INSERTCOLUMNA, index , pCol)
End Function

Malheureusement, aucune colonne ne s'ajoutait au ListView. Après j'ai repris celle tiré de vbAccelerator, sans succès non plus

Je ne vois pas ce qui cloche pourtant !

Merci encore

VBEnJ0Y
Messages postés
25
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
5 octobre 2006

Au fait, j'ai oublié de préciser pourquoi je voudrai faire tout ça:

Je prépare une classe pour lire facilement les GIF animés, elle renvoie toutes les infos contenus dans le fichier... Et je voudrai faire en sorte que dès l'ouverture d'un CommonDialog, quand on affiche les fichiers en mode 'Détails', des colonnes soient rajoutées, comme "Hauteur", "Largeur", "Nombre de couleurs", "Couleur de fond"... et bien sûr d'afficher les infos dans les colonnes respectives

Je précise au cas où il y a moyen de le faire sans passer un 'SendMessage' ni par le SubClassing ou le Hooking, ce serait l'idéal

Donc si vous avez une idée pour ajouter des colonnes dans ce fameux CommonDialog, faites-moi signe

Merci d'avance...

VBEnJ0Y