OVH Cloud OVH Cloud

Treeview

9 réponses
Avatar
FortonMichael
Bonjour, je recherche des informations sur le=20
fonctionnement d'un treeview!!
Je voudrais faire sur un formulaire un bouton parcourir=20
qui me donnerais la liste des r=E9pertoires de mon ou de mes=20
disques dures de mon pc, cliquez sur un r=E9pertoire pour=20
avoir le path de ce r=E9pertoires, je ne veux pas afficher=20
es fichiers qui sont dans les r=E9pertoires.
Est ce que le treeview peux m'etre utiles??? ou existe=20
t'il d'autre solution???
Merci d'avance

9 réponses

Avatar
ng
Salut,

Il faudra faire ca par récurrence (avec les APIs FindFirstFile(),
FindNextFile() et FindClose()) sinon tu peux utiliser une DirListBox à la
place.

Il y a aussi l'API SHBrowseForFolder() qui affiche la boite de dialogue
standart permettant de choisir un dossier.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



FortonMichael a écrit :

Bonjour, je recherche des informations sur le
fonctionnement d'un treeview!!
Je voudrais faire sur un formulaire un bouton parcourir
qui me donnerais la liste des répertoires de mon ou de mes
disques dures de mon pc, cliquez sur un répertoire pour
avoir le path de ce répertoires, je ne veux pas afficher
es fichiers qui sont dans les répertoires.
Est ce que le treeview peux m'etre utiles??? ou existe
t'il d'autre solution???
Merci d'avance


Avatar
le_troll
Bonjour,

Tu peux utiliser aussi l'association de DirListBoxe, DriveListBoxe et
FileListBoxe, tu auras ainsi le path évoqué, comme ça, c'est une copie pour
l'exemple de mon pense-bête (la bête c'est moi!):

DriveListBox, DirListBox, FileListBox


Dim combien_numeros_liste As Long

Dim contenu_liste As String



combien_numéros_liste = Nom_FileListBox .ListCount

Contenu_Liste = Nom_FileListBox.List(Variable_indice)

'

Dir1 = ""

List1 = ""

Drive1 = "c:"

Dir1 = "c:"

List1 = "c:"

Text1 = Drive1

End Sub

'

Sub Drive1_Change() ' DriveListBox

On Error Resume Next

Dir1.Path = Drive1.Drive

Text1 = Drive1

End Sub

'

Sub Dir1_Change() ' DisListBox

File1.Path = Dir1.Path

Text1 = Dir1

End Sub

'

Sub File1_Click() ' FileListBox

Text1 = Dir1 & "" & File1

End Sub


Remettre le path en fin de service:
ChDrive App.Path

ChDir App.Path


--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"FortonMichael" a écrit dans le message de news:
be7701c47a09$70e385f0$
Bonjour, je recherche des informations sur le
fonctionnement d'un treeview!!
Je voudrais faire sur un formulaire un bouton parcourir
qui me donnerais la liste des répertoires de mon ou de mes
disques dures de mon pc, cliquez sur un répertoire pour
avoir le path de ce répertoires, je ne veux pas afficher
es fichiers qui sont dans les répertoires.
Est ce que le treeview peux m'etre utiles??? ou existe
t'il d'autre solution???
Merci d'avance
Avatar
le_troll
Solution autre, tu as aussi ça, avec une Form + textBox

' boîte de dialogue
'
Sub Form_Load()
Dim chemin As String
'
chemin = strSelectFolder(Me.hwnd) 'go
MsgBox chemin 'retour
End
End Sub

Public Function strSelectFolder(hwnd&) As String
Dim shellOperator As Object
Dim folRepSel As Object
Dim foliFile As Object
Dim rep As Object
Dim sFullPath As String
Dim sNameFolder As String
Dim sComplement As String
'
'Affiche la boite de sélection des répertoire
Set shellOperator = CreateObject("Shell.Application")
Set folRepSel = shellOperator.BrowseForFolder(hwnd&, "Chemins des disques
et fichiers :", 1)
If folRepSel Is Nothing Then
strSelectFolder = ""
Exit Function
End If
'
'récupère la collection des fichiers contenus dans le répertoire
Set rep = folRepSel.Items
sComplement = ""
If rep.Count = 0 Then 'récupère le premier élément du répertoire parent
Set foliFile = folRepSel.ParentFolder.Items.Item(0)
sComplement = folRepSel.Title + ""
Else
Set foliFile = rep.Item(0)
'premier élément, on récupère le nom du répertoire
End If
'
sFullPath = foliFile.Path 'récupère le chemin de l'item
'construction du chemin
If sFullPath = "" Then
'choix d'un ordinateur réseau (il faut mettre NOM_ORDI)
sFullPath = "" + sComplement
Else
'pas racine d'un ordi distant récupère le nom de l'item
sNameFolder = foliFile.Name
'construction du path
sFullPath = Left(sFullPath, Len(sFullPath) - Len(sNameFolder)) +
sComplement
End If
Set foliFile = Nothing
Set shellOperator = Nothing
Set folRepSel = Nothing
strSelectFolder = sFullPath
End Function

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"FortonMichael" a écrit dans le message de news:
be7701c47a09$70e385f0$
Bonjour, je recherche des informations sur le
fonctionnement d'un treeview!!
Je voudrais faire sur un formulaire un bouton parcourir
qui me donnerais la liste des répertoires de mon ou de mes
disques dures de mon pc, cliquez sur un répertoire pour
avoir le path de ce répertoires, je ne veux pas afficher
es fichiers qui sont dans les répertoires.
Est ce que le treeview peux m'etre utiles??? ou existe
t'il d'autre solution???
Merci d'avance
Avatar
ng
Salut,

Dir1 = ""
List1 = ""
Drive1 = "c:"
Dir1 = "c:"
List1 = "c:"
Text1 = Drive1



Je te conseille d'éviter d'utiliser les propriétés par défaut (c'est surtout
utile pour les collections afin d'éviter d'utiliser Item.) car ton code est
moins lisible et peut te reserver des surprises. De plus cela ne facilitera
pas ta migration vers dotNet.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



le_troll a écrit :

Bonjour,

Tu peux utiliser aussi l'association de DirListBoxe,
DriveListBoxe et FileListBoxe, tu auras ainsi le path évoqué, comme
ça, c'est une copie pour l'exemple de mon pense-bête (la bête c'est
moi!):

DriveListBox, DirListBox, FileListBox


Dim combien_numeros_liste As Long

Dim contenu_liste As String



combien_numéros_liste = Nom_FileListBox .ListCount

Contenu_Liste = Nom_FileListBox.List(Variable_indice)

'

Dir1 = ""

List1 = ""

Drive1 = "c:"

Dir1 = "c:"

List1 = "c:"

Text1 = Drive1

End Sub

'

Sub Drive1_Change() ' DriveListBox

On Error Resume Next

Dir1.Path = Drive1.Drive

Text1 = Drive1

End Sub

'

Sub Dir1_Change() ' DisListBox

File1.Path = Dir1.Path

Text1 = Dir1

End Sub

'

Sub File1_Click() ' FileListBox

Text1 = Dir1 & "" & File1

End Sub


Remettre le path en fin de service:
ChDrive App.Path

ChDir App.Path


Avatar
le_troll
3eme solution, (en déclarant le composant, menucomposants), avec:

COMMANDDIALOG

CommonDialog = boite
boite.DialogTitle = "titre de la boîte"

boite.Filter = "EXE, BIN, TXT | *.exe; *.bin; *.txt"

......1........2

1 = indication visuelle des filtres

2 | filtre1, 2.

boite.Filter = "All Files (*.*)|*.*"

boite.ShowOpen

variable_receptrice = boite.FileName


--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"FortonMichael" a écrit dans le message de news:
be7701c47a09$70e385f0$
Bonjour, je recherche des informations sur le
fonctionnement d'un treeview!!
Je voudrais faire sur un formulaire un bouton parcourir
qui me donnerais la liste des répertoires de mon ou de mes
disques dures de mon pc, cliquez sur un répertoire pour
avoir le path de ce répertoires, je ne veux pas afficher
es fichiers qui sont dans les répertoires.
Est ce que le treeview peux m'etre utiles??? ou existe
t'il d'autre solution???
Merci d'avance
Avatar
ng
Salut,

Set shellOperator = CreateObject("Shell.Application")


Gardons plutot ca pour le scripting, en VB on pourra directement appeler
l'API SHBrowseForFolder() comme je l'ai spécifié dans mon message.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



le_troll a écrit :

Solution autre, tu as aussi ça, avec une Form + textBox

' boîte de dialogue
'
Sub Form_Load()
Dim chemin As String
'
chemin = strSelectFolder(Me.hwnd) 'go
MsgBox chemin 'retour
End
End Sub

Public Function strSelectFolder(hwnd&) As String
Dim shellOperator As Object
Dim folRepSel As Object
Dim foliFile As Object
Dim rep As Object
Dim sFullPath As String
Dim sNameFolder As String
Dim sComplement As String
'
'Affiche la boite de sélection des répertoire
Set shellOperator = CreateObject("Shell.Application")
Set folRepSel = shellOperator.BrowseForFolder(hwnd&, "Chemins des
disques et fichiers :", 1)
If folRepSel Is Nothing Then
strSelectFolder = ""
Exit Function
End If
'
'récupère la collection des fichiers contenus dans le répertoire
Set rep = folRepSel.Items
sComplement = ""
If rep.Count = 0 Then 'récupère le premier élément du répertoire
parent Set foliFile = folRepSel.ParentFolder.Items.Item(0)
sComplement = folRepSel.Title + ""
Else
Set foliFile = rep.Item(0)
'premier élément, on récupère le nom du répertoire
End If
'
sFullPath = foliFile.Path 'récupère le chemin de l'item
'construction du chemin
If sFullPath = "" Then
'choix d'un ordinateur réseau (il faut mettre NOM_ORDI)
sFullPath = "" + sComplement
Else
'pas racine d'un ordi distant récupère le nom de l'item
sNameFolder = foliFile.Name
'construction du path
sFullPath = Left(sFullPath, Len(sFullPath) - Len(sNameFolder)) +
sComplement
End If
Set foliFile = Nothing
Set shellOperator = Nothing
Set folRepSel = Nothing
strSelectFolder = sFullPath
End Function


Avatar
ng
Pareil, pour limiter les dépendance on préférera utiliser l'api
GetOpenFileName() plutot que le composant.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



le_troll a écrit :

3eme solution, (en déclarant le composant, menucomposants), avec:

COMMANDDIALOG

CommonDialog = boite
boite.DialogTitle = "titre de la boîte"

boite.Filter = "EXE, BIN, TXT | *.exe; *.bin; *.txt"

......1........2

1 = indication visuelle des filtres

2 | filtre1, 2.

boite.Filter = "All Files (*.*)|*.*"

boite.ShowOpen

variable_receptrice = boite.FileName


Avatar
François Picalausa
Hello,

ou en pur VB, l'utilisation de Dir (attention, au buffer unique!).
Ces différents techniques sont montrées dans la KB:
http://support.microsoft.com/default.aspx?kbid5476
http://support.microsoft.com/default.aspx?kbid9497

Concernant cette seconde méthode, il faudrait (pour bien faire) détruire le
PIDL retourné:
The calling application is responsible for freeing the returned PIDL by
using the Shell allocator's IMalloc::Free method. To retrieve a handle to
that IMalloc interface, call SHGetMalloc. For further discussion of the
Shell allocator and PIDLs, see The Shell Namespace.

Voici un odl compilable avec mktyplib qui fait celà:
[
uuid(0d3f1d9d-70d6-4b1b-a400-dfd588f839ec),
helpstring("VB Malloc"),
version(1.0)
]
library Malloc
{
importlib("stdole2.tlb");

[
uuid(00000002-0000-0000-C000-000000000046),
odl
]

interface IMalloc : IUnknown
{
long Alloc([in] long cb);
long Realloc ([in] void *pv, [in] long cb);
void Free([in] void *pv);
long GetSize([in] void *pv);
long DidAlloc([in] void *pv);
void HeapMinimize(void);
}

[dllname("shell32.dll")]
module ShellFunc
{

[helpstring("Retrieves a pointer to the Shell's IMalloc interface."),
entry("SHGetMalloc")]
long SHGetMalloc([out] IMalloc** ppMalloc);
}
}

et un exemple d'utilisation:
Public Function BrowseForFolder() As String
Dim oMalloc As IMalloc

m_bCanceled = False

If SHGetMalloc(oMalloc) = 0 Then
Dim BI As BROWSEINFO
Dim lpIDList As Long
Dim tBrowseInfo As BROWSEINFO

With tBrowseInfo
.hWndOwner = 0
.ulFlags = BIF_BROWSEINCLUDEFILES Or BIF_USENEWUI
.lpszTitle = "hello!"
End With

lpIDList = SHBrowseForFolder(tBrowseInfo)

m_bCanceled = (lpIDList = 0)

If (lpIDList) Then
BrowseForFolder = String$(MAX_PATH, vbNullChar)
SHGetPathFromIDList lpIDList, BrowseForFolder
BrowseForFolder = Left(BrowseForFolder, InStr(BrowseForFolder,
vbNullChar) - 1)
mFolder.FolderPath = BrowseForFolder

oMalloc.Free lpIDList
End If

Set oMalloc = Nothing
End If
End Function

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ng" a écrit dans le message de
news:
Salut,

Il faudra faire ca par récurrence (avec les APIs FindFirstFile(),
FindNextFile() et FindClose()) sinon tu peux utiliser une DirListBox
à la place.

Il y a aussi l'API SHBrowseForFolder() qui affiche la boite de
dialogue standart permettant de choisir un dossier.


Avatar
fortonmichael
Excellent cette solution avec une text box!!!
merci
-----Message d'origine-----
Solution autre, tu as aussi ça, avec une Form + textBox

' boîte de dialogue
'
Sub Form_Load()
Dim chemin As String
'
chemin = strSelectFolder(Me.hwnd) 'go
MsgBox chemin 'retour
End
End Sub

Public Function strSelectFolder(hwnd&) As String
Dim shellOperator As Object
Dim folRepSel As Object
Dim foliFile As Object
Dim rep As Object
Dim sFullPath As String
Dim sNameFolder As String
Dim sComplement As String
'
'Affiche la boite de sélection des répertoire
Set shellOperator = CreateObject("Shell.Application")
Set folRepSel = shellOperator.BrowseForFolder


(hwnd&, "Chemins des disques
et fichiers :", 1)
If folRepSel Is Nothing Then
strSelectFolder = ""
Exit Function
End If
'
'récupère la collection des fichiers contenus dans le


répertoire
Set rep = folRepSel.Items
sComplement = ""
If rep.Count = 0 Then 'récupère le premier élément du


répertoire parent
Set foliFile = folRepSel.ParentFolder.Items.Item(0)
sComplement = folRepSel.Title + ""
Else
Set foliFile = rep.Item(0)
'premier élément, on récupère le nom du répertoire
End If
'
sFullPath = foliFile.Path 'récupère le chemin de l'item
'construction du chemin
If sFullPath = "" Then
'choix d'un ordinateur réseau (il faut mettre


NOM_ORDI)
sFullPath = "" + sComplement
Else
'pas racine d'un ordi distant récupère le nom de


l'item
sNameFolder = foliFile.Name
'construction du path
sFullPath = Left(sFullPath, Len(sFullPath) - Len


(sNameFolder)) +
sComplement
End If
Set foliFile = Nothing
Set shellOperator = Nothing
Set folRepSel = Nothing
strSelectFolder = sFullPath
End Function

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours


raison !
------------------------------------------


"FortonMichael" a écrit dans


le message de news:
be7701c47a09$70e385f0$
Bonjour, je recherche des informations sur le
fonctionnement d'un treeview!!
Je voudrais faire sur un formulaire un bouton parcourir
qui me donnerais la liste des répertoires de mon ou de mes
disques dures de mon pc, cliquez sur un répertoire pour
avoir le path de ce répertoires, je ne veux pas afficher
es fichiers qui sont dans les répertoires.
Est ce que le treeview peux m'etre utiles??? ou existe
t'il d'autre solution???
Merci d'avance


.