Selection d'un rep avec commondialog

Résolu
odan71 Messages postés 140 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 11 décembre 2007 - 9 mai 2005 à 16:05
odan71 Messages postés 140 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 11 décembre 2007 - 9 mai 2005 à 16:54
bonjour,
j'ai besoin de récuperer le chemin d'un dossier en reseau, seulement le dirlistbox ne le permet pas. la commondialog ne permet, quant à elle, de ne selectionner que des fichiers. pourtant j'ai déjà vu des soft fonctionner avec cette commondialog qui permettait la selection de dossier.
est-ce-que quelqu'un sait comment faire?
merci

"Si tu téléphones à une voyante et qu'elle ne décroche pas avant que ça sonne, raccroche." -- Jean-Claude Vandamme

odan71

2 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
9 mai 2005 à 16:24
Tu ne peux pas le faire avec un commonDialog.



Copies ceci dans un module, nommé Module1 par exemple.

Ensuite, l'appel se fait comme ceci :





monRep = Module1.GetDirectory("Selectionnez un répertoire")





'------------------------------------------------------------------------------
Public
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long





Const DirFlags = vbArchive Or vbSystem Or vbHidden Or vbReadOnly



Private Pattern As String







Private Declare Function SHBrowseForFolder Lib _

"shell32" (lpbi As BrowseInfo) As Long

Private Declare Function SHGetPathFromIDList Lib "shell32" _

(ByVal pidList As Long, ByVal lpBuffer As String) As Long

Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" _

(ByVal lpString1 As String, ByVal lpString2 As String) As Long

Private Const BIF_RETURNONLYFSDIRS = 1

Private Const BIF_DONTGOBELOWDOMAIN = 2

Private Type BrowseInfo

hWndOwner As Long

pIDLRoot As Long

pszDisplayName As Long

lpszTitle As Long

ulFlags As Long

lpfnCallback As Long

lParam As Long

iImage As Long

End Type



Private Const MAX_PATH = 260



Private Type FILETIME

dwLowDateTime As Long

dwHighDateTime As Long

End Type



Private Type WIN32_FIND_DATA

dwFileAttributes As Long

ftCreationTime As FILETIME

ftLastAccessTime As FILETIME

ftLastWriteTime As FILETIME

nFileSizeHigh As Long

nFileSizeLow As Long

dwReserved0 As Long

dwReserved1 As Long

cFileName As String * MAX_PATH

cAlternate As String * 14

End Type



'----------------------------------------------

'------Déclarations propres à la fonction------

'----------------------------------------------

Private Type ListeFichier

Fichiers() As WIN32_FIND_DATA

chemin() As String * MAX_PATH

Nombre As Long

End Type



Private Const INVALID_HANDLE_VALUE = -1

Private Const FILE_ATTRIBUTE_READONLY = &H1

Private Const FILE_ATTRIBUTE_HIDDEN = &H2

Private Const FILE_ATTRIBUTE_SYSTEM = &H4

Private Const FILE_ATTRIBUTE_DIRECTORY = &H10

Private Const FILE_ATTRIBUTE_ARCHIVE = &H20

Private Const FILE_ATTRIBUTE_NORMAL = &H80

Private Const FILE_ATTRIBUTE_TEMPORARY = &H100

Private Const FILE_ATTRIBUTE_COMPRESSED = &H800



'---Les API---

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _

(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _

(ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)









Private Function GetDirectory(stTitre As String) As String

' This function let the operator choose a directory.

Dim stTmp As String

Dim biStruct As BrowseInfo

Dim lgRep As Long



' On passe le handle de la fenêtre appellante

' (ici on suppose que c'est la fenêtre courante).

biStruct.hWndOwner = Me.hWnd

' On utilise lstrcat pour récupérer un pointeur sur une chaîne.

biStruct.lpszTitle = lstrcat(stTitre, vbNullString)

biStruct.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN

' Affichage de la fenêtre de sélection.

lgRep = SHBrowseForFolder(biStruct)

If lgRep Then

stTmp = Space$(MAX_PATH)

' On récupère le répertoire choisit.

SHGetPathFromIDList lgRep, stTmp

stTmp = Left$(stTmp, InStr(stTmp, vbNullChar) - 1)

Else

stTmp = vbNullString

End If

' Retourne la valeur (ou un chaîne vide en cas d'erreur).

GetDirectory = stTmp





End Function



'-------------------------------------------------------------------------






Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
3
odan71 Messages postés 140 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 11 décembre 2007
9 mai 2005 à 16:54
merci Manu :-)

"Si tu téléphones à une voyante et qu'elle ne décroche pas avant que ça sonne, raccroche." -- Jean-Claude Vandamme

odan71
0
Rejoignez-nous