probier's mal hiermit:
Option Explicit
'''' Deklaration der Funktionen für Aufruf der WinAPI
' Private gilt nur in diesem Modul
Private Declare PtrSafe Function GetSaveFileName Lib "comdlg32.dll" Alias _
"GetSaveFileNameA" (lpOpenfilename As OpenFilename) As Long
Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (lpOpenfilename As OpenFilename) As Long ' String vs long
Private Declare PtrSafe Function CommDlgExtendedError Lib _
"comdlg32" () As Integer
Private Declare PtrSafe Function GetActiveWindow Lib "user32" () _
As Long
'''' Deklaration für Hilfsvariablen für WINAPI
' Datentyp zur Übergabe von Parametern
Type OpenFilename
lStructSize As Long
hwndOwner As LongPtr
hInstance As LongPtr
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As LongPtr
lpTemplateName As String
End Type
Private Const MAX_PATH = 260
' Konstanten für die Steuerung des Dialog
Private Const OFN_ALLOWMULTISELECT = &H200
'Zeigt ein Dialogfeld mit der Möglichkeit, mehrere Dateien
'auszuwählen. In diesem Fall enthält lpstrFile den Pfad und
'anschließend alle Dateinamen.
'nFileOffset zeigt auf den Index des ersten Dateinamens nach
'der Pfadangabe.
'lpstrFile enthält alle Dateinamen durch Chr$(0) getrennt.
'Am Ende folgt ein zweites Chr$(0). Bei alten Win-3.x-
'Dialoge) sind die Dateinamen durch Leerzeichen getrennt.
'Diese Variante kennt keine langen Dateinamen.
Private Const OFN_CREATEPROMPT = &H2000
'Zeigt eine Meldung, wenn die Datei nicht existiert und
'fragt den Anwender, ob sie erzeugt werden soll.
Private Const OFN_ENABLEHOOK = &H20
'Aktiviert die Rückruffunktion lpfnHook.
Private Const OFN_ENABLETEMPLATE = &H40
'Aktiviert die Dialogfeldvorlage.
Private Const OFN_ENABLETEMPLATEHANDLE = &H80
'Aktiviert die Dialogfeldvorlage.
Private Const OFN_EXPLORER = &H80000
'Nutzt Explorer-Dialoge. Diese Einstellung ist die Vorgabe,
'selbst wenn Sie dieses Flag nicht angeben. Für alte
'Win-3.x-Dialoge müssen Sie das Flag löschen.
'Sie müssen es in den folgenden Fällen setzen:
'- bei OFN_ALLOWMULTISELECT.
'- wenn Sie Dialogfeldvorlagen und Rückruffunktionen benutzen.
Private Const OFN_EXTENSIONDIFFERENT = &H400&
'Gibt an, dass der Anwender einen Dateinamen mit einer
'anderen Erweiterung als lpstrDefExt eingeben kann.
Private Const OFN_FILEMUSTEXIST = &H1000
'Gibt an, dass der Anwender nur die Namen von existierenden
'Dateien eingeben kann. Andernfalls wird eine Warnmeldung
'ausgegeben.
'OFN_PATHMUSTEXIST muß ebenfalls gesetzt werden.
Private Const OFN_HIDEREADONLY = &H4&
'Versteckt das Kontrollkästchen "Nur lesen".
Private Const OFN_LONGNAMES = &H200000
'Aktiviert die Unterstützung von langen Dateinamen in den
'alten Win-3.x-Dialogen.
Private Const OFN_NOCHANGEDIR = &H8&
'Stellt das ursprüngliche Verzeichnis bei Ende des Dialoges
'wieder her, wenn der Anwender anderes Verzeichnis
'eingestellt hat.
Private Const OFN_NODEREFERENCELINKS = &H100000
'Weist das Dialogfeld an, bei einer markierten Verknüpfung
'Namen und Pfad der Verknüpungsdatei zurückzugeben, anstatt
'Namen und Pfad der Datei, auf die die Verknüpfung verweist.
Private Const OFN_NOLONGNAMES = &H40000
'Deaktiviert die Unterstützung von langen Dateinamen in den
'alten Win-3.x-Dialogen.
Private Const OFN_NONETWORKBUTTON = &H20000
'Versteckt die Schaltfläche "Netzwerk".
Private Const OFN_NOTESTFILECREATE = &H10000
'Gibt an, dass keine Testdatei erzeugt wird, bevor der
'Dialog endet. In diesem Fall überprüft das Dialogfeld nicht
'auf Schreibschutz, Platzmangel auf dem Datenträger oder
'korrekten Netzwerkzugriff.
Private Const OFN_OVERWRITEPROMPT = &H2&
'Gibt im Dialog "Speichern" eine Warnmeldung aus, wenn die
'Datei bereits existiert und durch das Speichern
'überschrieben wird.
Private Const OFN_PATHMUSTEXIST = &H800
'Gibt an, dass der Anwender nur die Namen von existierenden
'Verzeichnissen eingeben kann. Andernfalls wird eine
'Warnmeldung ausgegeben.
Private Const OFN_READONLY = &H1
'Gibt an, das das Kontrollkästchen "Nur Lesen" angekreuzt
'ist, wenn der Dialog angezeigt wird.
Private Const OFN_SHAREAWARE = &H4000
'Gibt an, dass die Funktion fehlschlägt, wenn ein
'Netzwerkfehler auftritt.
Private Const OFN_SHAREFALLTHROUGH = 2
Private Const OFN_SHAREWARN = 0
Private Const OFN_SHARENOWARN = 1
Private Const OFN_SHOWHELP = &H10
'Zeigt im Dialogfeld den Hilfe-Schalter an. hwndOwner muß auf
'ein Fenster zeigen, das die Hilfe anzeigen kann. Explorer-
'Dialoge senden die Nachricht CDN_HELP an die Rückruffunktion.
Public Function GetSaveName(ByVal Filter$, ByVal DefExt$, _
ByVal InitialDir$, ByVal DialogTitle As String, ByVal InitFilename As String) As String
Dim OFN As OpenFilename
Dim Temp$
Dim n As Integer
'Bestimmen der Optionen für den Dialog
With OFN
'Größe der Struktur festlegen
.lStructSize = LenB(OFN)
'Das aktive Fenster (AutoCAD) wird zum Besitzer des Dialogs
.hwndOwner = GetActiveWindow()
'Der Filtzer wird vorbereitet
.lpstrFilter = Replace(Filter$, "|", vbNullChar)
'Speicher reservieren für kompletten Pfad
.lpstrFile = InitFilename & String$(700 - LenB(InitFilename), vbNullChar)
'Größe des reservierten Speichers angeben
.nMaxFile = 700
'Speicher reservieren für Dateinamen
.lpstrFileTitle = String$(MAX_PATH, vbNullChar)
'Größe des reservierten Speichers angeben
.nMaxFileTitle = MAX_PATH
'Das Vorgabeverzeichnis bestimmen
.lpstrInitialDir = InitialDir$ & vbNullChar
'Der Titel des Dialoges
.lpstrTitle = DialogTitle & vbNullChar
'Optionen bestimmen
.flags = OFN_EXTENSIONDIFFERENT Or _
OFN_NOCHANGEDIR Or OFN_OVERWRITEPROMPT _
Or OFN_HIDEREADONLY
'Standarderweiterung für die Dateien bestimmen
.lpstrDefExt = DefExt$
End With
If GetSaveFileName(OFN) Then
Temp$ = OFN.lpstrFile
'Alles nach dem NULL-Zeichen verwerfen
n = InStr(Temp$, vbNullChar)
If n > 1 Then
GetSaveName = Left$(Temp$, n - 1)
Else
GetSaveName = ""
End If
Else
GetSaveName = ""
End If
End Function
Public Function GetOpenName(ByVal Filter As String, ByVal DefExt$, _
ByVal InitialDir$, ByVal DialogTitle As String, ByVal InitFilename As String) As String
Dim OFN As OpenFilename
Dim Temp$
Dim n As Integer
'Bestimmen der Optionen für den Dialog
With OFN
'Größe der Struktur festlegen
.lStructSize = LenB(OFN)
'Das aktive Fenster (AutoCAD) wird zum Besitzer des Dialogs
.hwndOwner = GetActiveWindow()
'Der Filtzer wird vorbereitet
.lpstrFilter = Replace(Filter$, "|", vbNullChar)
'Speicher reservieren für kompletten Pfad
.lpstrFile = InitFilename & String$(700 - LenB(InitFilename), vbNullChar)
'Größe des reservierten Speichers angeben
.nMaxFile = 700
'Speicher reservieren für Dateinamen
.lpstrFileTitle = String$(MAX_PATH, vbNullChar)
'Größe des reservierten Speichers angeben
.nMaxFileTitle = MAX_PATH
'Das Vorgabeverzeichnis bestimmen
.lpstrInitialDir = InitialDir$ & vbNullChar
'Der Titel des Dialoges
.lpstrTitle = DialogTitle & vbNullChar
'Optionen bestimmen
.flags = OFN_EXTENSIONDIFFERENT Or _
OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST
'Standarderweiterung für die Dateien bestimmen
.lpstrDefExt = DefExt$
End With
If GetOpenFileName(OFN) Then
Temp$ = OFN.lpstrFile
'Alles nach dem NULL-Zeichen verwerfen
n = InStr(Temp$, vbNullChar)
If n > 1 Then
GetOpenName = Left$(Temp$, n - 1)
Else
GetOpenName = ""
End If
Else
GetOpenName = ""
End If
End Function
da hätte ich nach dem Portieren auf die 64bit-Version doch mal einen Probelauf machen sollen und nicht denken sollen, dass ohne Fehlermeldung alles passt... grad hab ich's ausprobiert: Der Dialog öffnet sich.
------------------
http://www.stupidedia.org/stupi/Rechter_Winkel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP