PDA

Vollständige Version anzeigen : CommonDialog


AAA_Christian
08.02.2001, 14:36
Hey,
habe auf einem PC mit Office Developper ein CommonDialog 6.0 Control eingebunden. Für einen Datei-Öffnen Dialog (ShowOpen).
Auf manchen anderen Rechnern geht der Dialog, auf manchen nicht. Woran liegts? Vermute daran, ob dort die comdlg32.dll überhaupt bzw. in der richtigen Version installiert ist, richtig? Wenn ja, wie kann ich die installierte Version feststellen, wie eine neue installieren?
Oder wie kann ich das Problem sonst lösen?
Dank, Christian

sekoe
09.02.2001, 12:06
High,

Mein Vvorschlag sieht wie folgt aus:
(Ist im Moment nur für Ordner gedacht, klappt aber immer)

Type OFFICEGETFILENAMEINFO
hwndOwner As Long
szAppName As String * 255
szDlgTitle As String * 255
szOpenTitle As String * 255
szFile As String * 4096
szInitialDir As String * 255
szFilter As String * 255
nFilterIndex As Long
lView As Long
flags As Long
End Type

' Deklaration
Declare Function OfficeGetDirName Lib "msaccess.exe" Alias "#56" _
(gfni As OFFICEGETFILENAMEINFO, ByVal fopen As Integer) As Long

Public Function fktSelectDir(ByVal strStartPfad As String, strFensterName As String) As String
' -------------------------------------------------------------------------
' Zweck : Ordnerauswahlbox
' Eingangsparameter : strStartPfad: Voreingestellter Pfad
' strFensterName: Fenstername
' Rückgabewert : String des neuen Pfades,
' Wenn NeuerPfad = "" dann wurde Abbruch gedrückt
' -------------------------------------------------------------------------
'
' - Flags wurden noch nicht implementiert (Nur für Ordnerauswahl)
' - Entspricht dem Import-Dialog von MS-Access
'

On Error GoTo fktSelectDir_Error

Dim strDir As String
Dim intOpen As Integer
Dim openDir As OFFICEGETFILENAMEINFO
Dim dmy As Long

With openDir
.hwndOwner = Application.hWndAccessApp
.szAppName = strFensterName & Chr(0)
.szDlgTitle = "Bitte Verzeichnis für Export wählen" & Chr(0)
.szOpenTitle = "&Ok" & Chr(0)
.szFile = Chr(0)
.szInitialDir = strStartPfad & Chr(0)
.szFilter = Chr(0)
.nFilterIndex = 5
.lView = 0
.flags = &H20
End With
dmy = OfficeGetDirName(openDir, intOpen)
strDir = Trim(Nz(openDir.szFile))
fktSelectDir = Mid(strDir, 1, InStr(strDir, Chr(0)) - 1)
fktSelectDir_Done:
Exit Function

fktSelectDir_Error:
Resume fktSelectDir_Done

End Function

immelmann
18.01.2002, 15:49
Hallo,
das klappt ja diesmal prima unter WInNT.
Ich hatte vorher versucht, es über comdlg32.dll zu versuchen, wie es die meisten wahrscheinlich machen :-))
Die msaccess.exe (A2000) hat ja dann somit jeder und das läuft dann.

Woher bekomme ich nun die Flags/Parameter für die DATEI-auswahl und nicht nur wie hier Verzeichnisse.

Danke für Tipps.
Torsten

Sascha Trowitzsch
18.01.2002, 16:16
Tja, die "Useful Office Exports" von Mike Kaplan...

Ich wäre vorsichtig. Das sind undokumentierte Funktionen, die nicht unbedingt mit jeder Access-Version funktionieren müssen. Zitat:

'-----------------------------------------
' UsefulOfficeExports
'
' WARNING: All of these calls were figured out through
' trial and error and lots of crashing. NONE of them
' are officially supported and they may all disappear in
' future versions. But most of them exist not only in
' MSO9.DLL but also in MSO97.dll and MSO97rt.dll
' too (the former is for Office 97 apps, the latter is
' for Access runtime apps and VB5/VB6 IDE).
'
' (c) 1999 Trigeminal Software, Inc. All Rights Reserved
'------------------------------------------

Aber ich geb zu, ich verwende auch einige.

Ciao, Sascha

Sascha Trowitzsch
18.01.2002, 16:52
Hier noch ein anderes Beispiel aus Google:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private</span> <span class="TOKEN">Type</span> OFFICEGETFILENAMEINFO
hwndOwner <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
szAppName <span class="TOKEN">As</span> <span class="TOKEN">String</span> * 255
szDlgTitle <span class="TOKEN">As</span> <span class="TOKEN">String</span> * 255
szOpenTitle <span class="TOKEN">As</span> <span class="TOKEN">String</span> * 255
szFile <span class="TOKEN">As</span> <span class="TOKEN">String</span> * 4096
szInitialDir <span class="TOKEN">As</span> <span class="TOKEN">String</span> * 255
szFilter <span class="TOKEN">As</span> <span class="TOKEN">String</span> * 255
nFilterIndex <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
lView <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
Flags <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">End</span> <span class="TOKEN">Type</span>
&nbsp;
<span class="TOKEN">Private</span> <span class="TOKEN">Declare</span> <span class="TOKEN">Function</span> OfficeGetFileName <span class="TOKEN">Lib</span> &quot;msaccess.exe&quot; <span class="TOKEN">Alias</span> &quot;#56&quot;
(gfni <span class="TOKEN">As</span> OFFICEGETFILENAMEINFO, <span class="TOKEN">ByVal</span> fOpen <span class="TOKEN">As</span> <span class="TOKEN">Integer</span>) <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
&nbsp;
<span class="TOKEN">Public Function</span> GetFileName(ApplicationName, Title, OpenTitle, File,
InitialDir, Filter, OpenMode, <span class="TOKEN">Optional</span> Flags = 0, <span class="TOKEN">Optional</span> View = 0) <span class="TOKEN">As</span>
<span class="TOKEN">String</span>
<span class="TOKEN">Dim</span> r <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> lngPos <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> OGFI <span class="TOKEN">As</span> OFFICEGETFILENAMEINFO
&nbsp;
<span class="TOKEN">With</span> OGFI
<span class="TOKEN">If</span> (Len(VBA.Trim$(.szAppName)) = 0) <span class="TOKEN">Then</span>
.szAppName = ApplicationName &amp; VBA.Chr$(0)
<span class="TOKEN">Else</span>
.szAppName = VBA.RTrim$(ApplicationName) &amp; VBA.Chr$(0)
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
.szDlgTitle = VBA.RTrim$(Title) &amp; VBA.Chr$(0)
.szOpenTitle = VBA.RTrim$(OpenTitle) &amp; VBA.Chr$(0)
.szFile = VBA.RTrim$(File) &amp; VBA.Chr$(0)
.szInitialDir = VBA.RTrim$(InitialDir) &amp; VBA.Chr$(0)
.szFilter = VBA.RTrim$(Filter) &amp; VBA.Chr$(0)
.Flags = Flags
.lView = View
&nbsp;
SysCmd acSysCmdClearHelpTopic
&nbsp;
r = OfficeGetFileName(OGFI, OpenMode)
&nbsp;
<span class="TOKEN">If</span> r = 0 <span class="TOKEN">Then</span>
lngPos = VBA.InStr(1, .szFile, VBA.vbNullChar,
VBA.vbBinaryCompare)
<span class="TOKEN">If</span> lngPos &gt; 0 <span class="TOKEN">Then</span>
GetFileName = VBA.left(.szFile, lngPos - 1)
<span class="TOKEN">Else</span>
GetFileName = .szFile
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">End</span> <span class="TOKEN">Function</span></pre></div>