www.pudn.com > VBkongjian.rar > FileDialogs.bas


Attribute VB_Name = "basFileDialogs" 
 
'-------------------------------' 
' Ariad Development Library 2.0 ' 
'-------------------------------' 
'       API File Common Dialogs ' 
'                   Version 1.0 ' 
'-------------------------------' 
'Copyright © 1998-9 by Ariad Software. All Rights Reserved 
 
'Date Created: 
'Last Updated: 
 
Option Explicit 
DefInt A-Z 
 
Public Const OFN_ALLOWMULTISELECT = &H200 
Public Const OFN_CREATEPROMPT = &H2000 
Public Const OFN_ENABLEHOOK = &H20 
Public Const OFN_ENABLETEMPLATE = &H40 
Public Const OFN_ENABLETEMPLATEHANDLE = &H80 
Public Const OFN_EXPLORER = &H80000 
Public Const OFN_EXTENSIONDIFFERENT = &H400 
Public Const OFN_FILEMUSTEXIST = &H1000 
Public Const OFN_HIDEREADONLY = &H4 
Public Const OFN_LONGNAMES = &H200000 
Public Const OFN_NOCHANGEDIR = &H8 
Public Const OFN_NODEREFERENCELINKS = &H100000 
Public Const OFN_NOLONGNAMES = &H40000 
Public Const OFN_NONETWORKBUTTON = &H20000 
Public Const OFN_NOREADONLYRETURN = &H8000 
Public Const OFN_NOTESTFILECREATE = &H10000 
Public Const OFN_NOVALIDATE = &H100 
Public Const OFN_OVERWRITEPROMPT = &H2 
Public Const OFN_PATHMUSTEXIST = &H800 
Public Const OFN_READONLY = &H1 
Public Const OFN_SHAREAWARE = &H4000 
Public Const OFN_SHAREFALLTHROUGH = 2 
Public Const OFN_SHAREWARN = 0 
Public Const OFN_SHARENOWARN = 1 
Public Const OFN_SHOWHELP = &H10 
Public Const OFS_MAXPATHNAME = 128 
 
Public Const OFS_FILE_OPEN_FLAGS = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or OFN_NODEREFERENCELINKS Or OFN_HIDEREADONLY 
Public Const OFS_FILE_SAVE_FLAGS = OFN_EXPLORER Or OFN_LONGNAMES Or OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST 
 
Type OPENFILENAME 
 lStructSize        As Long 
 hWndOwner          As Long 
 hInstance          As Long 
 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 Long 
 lpTemplateName     As String 
End Type 
 
Public OFN As OPENFILENAME 
 
Public Declare Function CommDlgExtendedError Lib "COMDLG32.DLL" () As Long 
Public Declare Function GetOpenFileName Lib "COMDLG32.DLL" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long 
Public Declare Function GetSaveFileName Lib "COMDLG32.DLL" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long 
 
Public Enum FileDlgModes 
 fdmOpenFile = 1 
 fdmSaveFile 
 fdmSaveFileNoConfirm 
 fdmOpenFileOrPrompt 
End Enum 
 
Public Const PIC_FILTER1$ = "Pictures (*.bmp;*.dib;*.ico;*.gif;*.jpg;*.rle)|*.bmp;*.dib;*.ico;*.gif;*.jpg;*.rle|Bitmaps (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|Icons (*.ico)|*.ico|Internet Images (*.gif;*.jpg)|*.gif;*.jpg" 
 
Public Function SelectFile$(OwnerHWnd As Long, Optional Title$ = "", Optional Filter$ = "All Files (*.*)|*.*", Optional FilterIDX As Long = 0, Optional DefFile$, Optional DefPath$, Optional DefExt$, Optional ByVal FileMode As FileDlgModes = fdmOpenFile) 
 Dim R As Long, SP As Long, ShortSize As Long, Z As Long 
 With OFN 
  .lStructSize = Len(OFN) 
  .hWndOwner = OwnerHWnd 
  .hInstance = App.hInstance 
  .lpstrFilter = Replace$(Filter$, "|", Chr$(0)) & Chr$(0) 
  .nFilterIndex = FilterIDX 
  .lpstrFile = DefFile$ & String$(257 - Len(DefFile$), 0) 
  .nMaxFile = Len(.lpstrFile) - 1 
  .lpstrFileTitle = .lpstrFile 
  .nMaxFileTitle = .nMaxFile 
  .lpstrDefExt = DefExt$ & Chr$(0) 
  .lpstrInitialDir = IIf(Len(DefPath$), DefPath$, CurDir$) & Chr$(0) 
  .lpstrTitle = Title$ & Chr$(0) 
  If FileMode = fdmSaveFile Or FileMode = fdmSaveFileNoConfirm Then 
   .Flags = OFS_FILE_SAVE_FLAGS 
   If FileMode = fdmSaveFile Then .Flags = .Flags Or OFN_OVERWRITEPROMPT 
   R = GetSaveFileName(OFN) 
  Else 
   .Flags = OFS_FILE_OPEN_FLAGS 
   If FileMode = fdmOpenFileOrPrompt Then .Flags = .Flags Or OFN_CREATEPROMPT 
   R = GetOpenFileName(OFN) 
  End If 
  If R Then 
   SP = InStr(.lpstrFile, Chr$(0)) 
   If SP Then .lpstrFile = Left$(.lpstrFile, SP - 1) 
   SelectFile$ = Trim$(Replace$(.lpstrFile, Chr$(0), "")) 
  Else 
   Z = CommDlgExtendedError() 
   If Z Then MsgBox "Unable to get filename(s)." & vbCr & vbCr & "CommDlgExtendedError returned " & Z, vbCritical 
  End If 
 End With 
End Function