SHBrowseForFolder unter Win'98 bzw. Win'XP

27/05/2008 - 14:14 von Michael König | Report spam
Hallo zusammen,

mit unten stehendem Code möchte ich in A2k ein (u.U. schon vorbelegtes)
Verzeichnis auswàhlen lassen. Dabei passiert folgendes: Unter beiden
angegebenen Betriebssystem wird die DB einfach komplett geschlossen,
wenn man im Auswahlfenster auf "Abbrechen" klickt ohne vorher ein
Verzeichnis angeklickt zu haben. Unter Win'98 klappt die Vorbelegung
nicht, sondern es wird das Verzeichnis C:\ markiert.
Kann mir bitte jemand helfen?

Gruß und Danke
Michael König

Hier der (fehlerhafte ?) Code:

'--
Option Compare Database
Option Explicit

'--
Private Const BIF_RETURNONLYFSDIRS = &H1
Private Const BFFM_SETSELECTION = &H466
Private Const BFFM_INITIALIZED = 1

'--
Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

'--
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias
"SHGetPathFromIDListA" _
(ByVal pidl As Long, _
ByVal pszPath As String) As Long

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias
"SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal Msg As Long, _
wParam As Any, _
lParam As Any) As Long

Private StartDir As String

'--
Private Sub cmdVerzeichnisauswahl_Click()
'--

strArchivPfad = holVerzeichnis("Wàhlen Sie bitte das Verzeichnis aus!", _
Me!txtVerzeichnis)
If ((Not IsNull(strArchivPfad)) And (strArchivPfad <> "")) Then
If Right(strArchivPfad, 1) <> "\" Then _
strArchivPfad = strArchivPfad & "\"
Me!txtVerzeichnis = strArchivPfad
Me!cmdWeiter.Enabled = True
Else
cmdZurueck_Click
End If

End Sub

'--
Public Function holVerzeichnis(szDialogTitle As String, StartVerzeichnis
As String) As String
'--

Dim X As Long
Dim bi As BROWSEINFO
Dim dwIList As Long
Dim szPath As String
Dim wPos As Integer

StartDir = StartVerzeichnis

With bi
.hOwner = hWndAccessApp
.lpszTitle = szDialogTitle
.ulFlags = BIF_RETURNONLYFSDIRS
.lpfn = DummyFunc(AddressOf BrowseCallbackProc)
End With

dwIList = SHBrowseForFolder(bi)
szPath = Space$(512)
X = SHGetPathFromIDList(ByVal dwIList, ByVal szPath)

If X Then
wPos = InStr(szPath, Chr(0))
holVerzeichnis = left$(szPath, wPos - 1)
Else
holVerzeichnis = ""
End If

End Function

'--
Private Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As
Long, _
ByVal lParam As Long, ByVal lpData
As Long) As Long
'--

Dim pathstring As String
Dim RetVal As Long

Select Case uMsg
Case BFFM_INITIALIZED
pathstring = StartDir
RetVal = SendMessage(hWnd, BFFM_SETSELECTION, ByVal CLng(1), ByVal
pathstring)
End Select

BrowseCallbackProc = 0

End Function

'--
Private Function DummyFunc(ByVal param As Long) As Long
'--

DummyFunc = param

End Function

'--
 

Lesen sie die antworten

#1 Thomas Möller
27/05/2008 - 19:49 | Warnen spam
Hallo Michael,

"Michael König" schrieb im Newsbeitrag
news:g1gtvu$imf$
mit unten stehendem Code möchte ich in A2k ein (u.U. schon
vorbelegtes) Verzeichnis auswàhlen lassen. Dabei passiert folgendes:
Unter beiden angegebenen Betriebssystem wird die DB einfach komplett
geschlossen, wenn man im Auswahlfenster auf "Abbrechen" klickt ohne
vorher ein Verzeichnis angeklickt zu haben.



kannst Du mal bitte einen Haltepunkt in den Code setzen und den Code
dann Schritt für Schritt ausführen. Welches ist die Codezeile, die zum
Absturz führt?

CU
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen