Toon posts:

[VB6] Externe dir selecteren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Yow, ik moet dus via zo een verkenner like ding een dir selecteren. Nu hebt ge een Dir listbox, Drive listbox & filelistbox.
Het probleem is dat de dir die ik moet selecteren via het netwerk gaat. Iemand een idee welk object dat is? En welke controlset ik daarvoor moet aanvinken? :)

Thx

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 19:44

Gerco

Professional Newbie

Dat kun je doen met de SHBrowseForFolder API, die kun je niet aanvinken omdat er geen control voor is.

Knal deze code in een module en dan kun je door die functie aan te roepen zo'n mooie dialoog tevoorschijn halen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Option Explicit

Public 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

Public Const BIF_RETURNONLYFSDIRS = 1
Public Const MAX_PATH = 260

Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long

Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String) As String
     
    'declare variables to be used
     Dim iNull As Integer
     Dim lpIDList As Long
     Dim lResult As Long
     Dim sPath As String
     Dim udtBI As BrowseInfo

    'initialise variables
     With udtBI
      .hwndOwner = hwndOwner
      .lpszTitle = lstrcat(sPrompt, "")
      .ulFlags = BIF_RETURNONLYFSDIRS
     End With

    'Call the browse for folder API
     lpIDList = SHBrowseForFolder(udtBI)
     
    'get the resulting string path
     If lpIDList Then
      sPath = String$(MAX_PATH, 0)
      lResult = SHGetPathFromIDList(lpIDList, sPath)
      Call CoTaskMemFree(lpIDList)
      iNull = InStr(sPath, vbNullChar)
      If iNull Then sPath = Left$(sPath, iNull - 1)
     End If

    'If cancel was pressed, sPath = ""
     BrowseForFolder = sPath

End Function

Het enige wat je moet doen is de ulFlags aanpassen. Nu returnt hij alleen lokale dirs, maar als je de goede constante even uit de MSDN vist, kun je ook netwerk dirs selecteren.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Je kan ook gewoon Treeview gebruiken

Verwijderd

eeeuh like . .wat wil je nou ??? als je een dir wil selecteren . . .dan maakt het toch geen r33t uit of dat nou een netwerk- of een gewone dir is ...wat dacht je van van CommonDialog.ShowOpen

Verwijderd

CommonDialog is voor Files, de bovenstaande windows-functie is het standaardschermpje voor directories dat in elke windows-applicatie gebruikt (zou moeten) word(en). In veel houtje-touwtje applicaties zie ik idd de CommonDialog met als filename 'Filename will be ignored', dat staat *erg* knullig. De dir-browser component van standaard-vb is niet geschikt voor netwerk-browsing.

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Op donderdag 11 juli 2002 07:41 schreef Gerco het volgende:
Dat kun je doen met de SHBrowseForFolder API, die kun je niet aanvinken omdat er geen control voor is.

Knal deze code in een module en dan kun je door die functie aan te roepen zo'n mooie dialoog tevoorschijn halen.
code:
1
...

Het enige wat je moet doen is de ulFlags aanpassen. Nu returnt hij alleen lokale dirs, maar als je de goede constante even uit de MSDN vist, kun je ook netwerk dirs selecteren.
Dit werkt goed. Maar waarvoor dient de Long hwndOwner die je aan de functie meegeeft. Ik geef er nu gewoon 0 aan mee, maar ik begrijp niet goed waarvoor deze juist dient.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 19:44

Gerco

Professional Newbie

Op donderdag 11 juli 2002 11:45 schreef WimB het volgende:
Dit werkt goed. Maar waarvoor dient de Long hwndOwner die je aan de functie meegeeft. Ik geef er nu gewoon 0 aan mee, maar ik begrijp niet goed waarvoor deze juist dient.
Daar kun je de hWnd van je form aan meegeven (meestal die met het knopje "browse" erop). Dan blokkeert hij invoer naar dat form zolang de dialoog open is. Wel zo handig.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1