Listbox et common dialog

Résolu
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007 - 25 juil. 2004 à 12:26
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 - 26 juil. 2004 à 20:16
Bonjour tout le monde.

Dans mon programme, j'inclu un petit lecteur wav (prévisualisation) et je voudrais que l'on puisse ajouter plusieurs .wav dans une listbox a partir de mon common dialog.

Lorsque j'ajoute un seul fichier, le path et le filename sont ajouté correctement dans la listbox (c:\path\fichier.wav), mais lorsque je saisi plusieurs wav, il ne rajoute qu'une seule ligne, avec seulement le path (c:\path\)
J'ai essayer avec une boucle for next, mais cela ne fonctionne pas.
J'ai regarder des sources, mais aucunes ne permet de selectionner plusieurs fichiers simulatennement pour les rajouté dans une listbox.

J'espère avoir été clair, c'est pas facile a expliquer.
Merci de vos réponses :)
AigleNoir ?-)

14 réponses

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
25 juil. 2004 à 23:15
Oups,

j'ai retester le code et visiblement y a un ptit truc que j'ai oublier
(en fait le dernier fichier ne s'ajoute pas au listbox)

je vais tout de suite ajouter ce code source dans ce merveilleux site si tu veux le consulter.

Voici le code à nouveau avec quelques commentaire :

' cdlOFNAllowMultiselect : multi-sélection
' cdlOFNNoLongNames :Afficher les noms de fichiers longs en mode DOS
cdl.Flags = cdlOFNAllowMultiselect Or cdlOFNNoLongNames
cdl.Filter = "*.*"
cdl.FileName = "*.*"
cdl.Action = 1
List1.Clear ' effacer la liste
result = Trim(cdl.FileName) 'extrait le resultat de la boite de dialogue
j = 1
testchemin = 0
chemin = "" 'variable pour le chemin
For i = 1 To Len(result)
Debug.Print Mid(result, i, 1) If Mid(result, i, 1) Chr$(32) Or i Len(result) - 1 Then
If testchemin = 0 Then ' extraire la première partie du résultat (le chemin)
chemin = Trim(Mid(result, j, i))
testchemin = 1
j = i + 1
Else ' extraire la partie suivante du résultat (le fichier) et lui ajouter le chemin au début
List1.AddItem chemin + Mid(result, j, i - j)
j = i + 1
End If
End If
Next
' tester si la liste est vide alors c'est que le résultat contient seulement un fichier séléctionné
If List1.ListCount = 0 Then List1.AddItem Trim(cdl.FileName)
3
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
25 juil. 2004 à 17:36
salut,

il faut que tu actives le Flags du control par la ligne suivante :

cdl.Flags = cdlOFNAllowMultiSelect or cdlOFNNoLongNames

ca te permet de selectionner plusieurs fichiers et meme des noms de fichiers longs. tu auras une chaine de caracteres qui contient les noms de fichiers selectionnes séparé par des espaces (chr(32)) .

Tu n'aura qu'à les spérarer.

Bonne chance
0
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007
25 juil. 2004 à 19:42
Merci.

J'ai déja ce code en faite, mon problème c'est que je n'arrive pas a trouvé de méthode pour mettre les fichiers selectionnés a la suite dans une listbox :(
Je vais encore essayer des manip ce soir, mais je n'y arrive pas, donc si on pourrais m'aider un tout petit peu :)

Thx d'avance
AigleNoir ?-)
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
25 juil. 2004 à 22:32
Bon,

Je n'ai pas trop le temps de commenter le bout de code que j'ai fais pour toi.

Et SVP de ne pas critiquer ma facon de coder en VB car ca m'a pris 10 minutes pour faire ce code alors je n'ai pas fais attention à l'optimisation ou chercher une meilleur méthode. mais l'essentiel c'est que ca marche.

List1 : ListBox
cdl : Commondialog

Voici le code :

'************************************************
cdl.Flags = cdlOFNAllowMultiselect Or cdlOFNNoLongNames
cdl.Filter = "*.*"
cdl.Action = 1
List1.Clear
result = Trim(cdl.FileName)
j = 1
testchemin = 0
chemin = ""
For i = 1 To Len(result)
Debug.Print Mid(result, i, 1)
If Mid(result, i, 1) = Chr$(32) Then
If testchemin = 0 Then
chemin = Trim(Mid(result, j, i))
testchemin = 1
j = i + 1
Else
List1.AddItem chemin + Mid(result, j, i - j)
j = i + 1
End If
End If
Next
If List1.ListCount = 0 Then List1.AddItem Trim(cdl.FileName)

'***************************************************

J'espère t'avoir aider
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
25 juil. 2004 à 23:25
bonsoir je voulai juste te signaler qu'il y a probleme dans ton code .
en multiselection,tous les 2 fichiers il sont separer d'un espace.
donc tu te retrouve avec 2 fichier sur une mem ligne de la liste.
a bientot et merci d'aider les autre c cool.
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
25 juil. 2004 à 23:32
c'est bon ton code marche a merveil c cool.
par si tu peux me dire pourkoi avec le code flag &H80000 soit style windows.
impossible de recuperer les chemin complet en multiselection.
VB.c'est quoi se bordel.
je suis parti du mem principe que toi mais il me sort que la directorie.essai de voir tu comprendra mieu.
merci de ton aide et @+.
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
25 juil. 2004 à 23:54
ca c'est normal puique en style windows il prend les noms des fichiers en mode windows

Dans ce cas il faut précisé que le style de la boite de dialogue est &H80000 et en meme temps les récupérer en mode DOS

donc change le flag comme suit :

cdl.Flags = cdlOFNAllowMultiselect Or (cdlOFNNoLongNames And &H80000)

3 lettres qui font des miracles = AND

:big)
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 00:06
ta commande de flag ne me lance pas la boite de windows donc j'ai fais :

cdl.Flags = cdlOFNAllowMultiselect + cdlOFNNoLongNames + &H80000
mais toujour pas possible de recuperrer le nom des fichier dans une liste (en multiselection) par contre un fichier ca fonctionne il me donne bien DIRECTORIE\FICHIER
ah oui tres important je voulai precider que par contre je recupere bien tous les fichier mais en debugage fenetre.

je voulais ajouter qu'il il faudra qu'il augmente aussi la taille du buffer de son cdl sinon il va pas pouvoir s'endormir en ecoutant des wav assez longtemps.lol

HELP ME PLEASE
0
DDelec24 Messages postés 109 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 23 octobre 2007
26 juil. 2004 à 10:37
Je te remerci beaucoup!!!!
J'avais bien fais avec une boucle, mais une erreur quelque part faisais que ca ne marchais pas :(
Peut etre est-ce parceque je n'est pas utilisé la fonction trim()

En tout cas merci de ton aide!!! :-p
AigleNoir ?-)
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
26 juil. 2004 à 14:42
Désolé J'ai mis beaucoup de temps pour vous répondre.

Si vous êtes toujours partant pour une boite de dialogue de style OFFICE 2000 vous trouverez mon nouvezu code sur :

http://www.vbfrance.com/code.aspx?ID=24888

J'espère vous avoir aider de mon mieux
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 16:25
bonjour a toi frop01 la source ne fonctionne pas correctement si les fichiers comportent des espace. (en multiselection)
j'ai essayer de mon coter mais ca donne rien.
bonne continuation.
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
26 juil. 2004 à 18:11
Est ce qu'on parle du meme programme ?

j'ai déposé un nouveau source sur

http://www.vbfrance.com/code.aspx?ID=24888

Qui s'y frotte, s'y pique .
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
26 juil. 2004 à 18:52
ci c'est celle qui comporte un module "IDBAS_commondialog"
c'est qu'on parle bien de la meme.
celle ci a un probleme.
celle ci quand tu ouvres 2 fichier wav aillant des espace chacun
le "" de la directorie finale ne ressort pas.dit moi si j'me trompe.
je parle bien en multiselection
si tu ouvre 1 seul fichier comportant un espace pas de prob mais avec 2 si.
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
26 juil. 2004 à 20:16
ahhh oui j'a vais pas vu ca
merci bobo

allez dans Form1 puis dans la procedure Command1

Au lieu de :

For Count = 1 To sOpen.nFilesSelected
List1.AddItem sOpen.sLastDirectory + sOpen.sFiles
Next Count

chez par :

For Count = 1 To sOpen.nFilesSelected

If Right$(Trim(sOpen.sLastDirectory), 1) <> "" Then
List1.AddItem sOpen.sLastDirectory + "" + sOpen.sFiles(Count)
Else
List1.AddItem sOpen.sLastDirectory + sOpen.sFiles(Count)
End If
Next Count

je crois que ca marche ca ;)

Qui s'y frotte, s'y pique .
0
Rejoignez-nous