home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / Picture_Gr209645172008.psc / Backup01-07-08 / cDlg.cls next >
Text File  |  2008-01-05  |  16KB  |  570 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "cDlg"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. '<*#*>This class was modified by russell sanders to show the open file, save file and browse for folder dialogs
  17. '<*CATEGORIES*>
  18.  
  19. '<*PROPERTIES*>
  20. '<*START*>
  21. '<*PUBLIC_DEC*>
  22. '<*FORM_DEC*>
  23. '<*CODE*>
  24.  
  25. ' this is a striped down version of the code at
  26. 'http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=9260&lngWId=1
  27. '
  28. Private Type OPENFILENAME 'Open & Save Dialog
  29.     lStructSize As Long
  30.     hWndOwner As Long
  31.     hInstance As Long
  32.     lpstrFilter As String
  33.     lpstrCustomFilter As String
  34.     nMaxCustFilter As Long
  35.     nFilterIndex As Long
  36.     lpstrFile As String
  37.     nMaxFile As Long
  38.     lpstrFileTitle As String
  39.     nMaxFileTitle As Long
  40.     lpstrInitialDir As String
  41.     lpstrTitle As String
  42.     flags As Long
  43.     nFileOffset As Integer
  44.     nFileExtension As Integer
  45.     lpstrDefExt As String
  46.     lCustData As Long
  47.     lpfnHook As Long
  48.     lpTemplateName As String
  49. End Type
  50.  
  51. Private Type CHOOSECOLOR 'Color Dialog
  52.     lStructSize As Long
  53.     hWndOwner As Long
  54.     hInstance As Long
  55.     RGBResult As Long
  56.     lpCustColors As String
  57.     flags As Long
  58.     lCustData As Long
  59.     lpfnHook As Long
  60.     lpTemplateName As String
  61. End Type
  62.  
  63. Const LF_FACESIZE = 32 'Font Dialog
  64. Private Type LOGFONT 'Font Dialog
  65.     lfHeight As Long
  66.     lfWidth As Long
  67.     lfEscapement As Long
  68.     lfOrientation As Long
  69.     lfWeight As Long
  70.     lfItalic As Byte
  71.     lfUnderline As Byte
  72.     lfStrikeOut As Byte
  73.     lfCharSet As Byte
  74.     lfOutPrecision As Byte
  75.     lfClipPrecision As Byte
  76.     lfQuality As Byte
  77.     lfPitchAndFamily As Byte
  78.     lfFaceName(LF_FACESIZE) As Byte
  79. End Type
  80.  
  81. Private Type ChooseFont 'Font Dialog
  82.     lStructSize As Long
  83.     hWndOwner As Long
  84.     hdc As Long
  85.     lpLogFont As Long
  86.     iPointSize As Long
  87.     flags As Long
  88.     rgbColors As Long
  89.     lCustData As Long
  90.     lpfnHook As Long
  91.     lpTemplateName As String
  92.     hInstance As Long
  93.     lpszStyle As String
  94.     nFontType As Integer
  95.     MISSING_ALIGNMENT As Integer
  96.     nSizeMin As Long
  97.     nSizeMax As Long
  98. End Type
  99. ' extra font constant
  100. Const CF_INITTOLOGFONTSTRUCT = &H40&
  101. Const SCREEN_FONTTYPE = &H2000
  102. Const BOLD_FONTTYPE = &H100
  103. Const FW_BOLD = 700
  104. Const LOGPIXELSY = 90
  105.  
  106. '------- Dialog calling functions
  107. ' -------------- Standard
  108. Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
  109. Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
  110. Private Declare Function ChooseColorAPI Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
  111. Private Declare Function ChooseFont Lib "comdlg32.dll" Alias "ChooseFontA" (pChoosefont As ChooseFont) As Long
  112. Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
  113. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  114. Private Declare Function GetTextFace Lib "gdi32" Alias "GetTextFaceA" (ByVal hdc As Long, ByVal nCount As Long, ByVal lpFacename As String) As Long
  115. Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
  116. Private Declare Function GetDC Lib "user32" (ByVal hOwner As Long) As Long
  117. Private Declare Function lstrcpy Lib "KERNEL32" Alias "lstrcpyA" (p1 As Any, p2 As Any) As Long
  118. Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
  119.  
  120. Public Enum CdlgExt_Actions
  121.        cdlgOpen = 1
  122.        cdlgSave = 2
  123.        cdlgColor = 3
  124.        cdlgFont = 4
  125.  End Enum
  126.  
  127. Public Enum CdlgExt_Flags
  128.  ' Open & Save Dialog
  129.  cdlOFNAllowMultiselect = &H200
  130.  cdlOFNCreatePrompt = &H2000
  131.  cdlOFNExplorer = &H80000
  132.  cdlOFNExtensionDifferent = &H400
  133.  cdlOFNFileMustExist = &H1000
  134.  cdlOFNHelpButton = &H10
  135.  cdlOFNHideReadOnly = &H4
  136.  cdlOFNLongNames = &H200000
  137.  cdlOFNNoChangeDir = &H8
  138.  cdlOFNNoDereferenceLinks = &H100000
  139.  cdlOFNNoLongNames = &H40000
  140.  cdlOFNNoReadOnlyReturn = &H8000
  141.  cdlOFNNoValidate = &H100
  142.  cdlOFNOverwritePrompt = &H2
  143.  cdlOFNPathMustExist = &H800
  144.  cdlOFNReadOnly = &H1
  145.  cdlOFNShareAware = &H4000
  146.  'Color Dialog
  147.  cdlCCANYCOLOR = &H100
  148.  cdlCCFullOpen = &H2
  149.  cdlCCHelpButton = &H8
  150.  cdlCCPreventFullOpen = &H4
  151.  cdlCCRGBInit = &H1
  152. ' Font Dialog
  153.  cdlCFANSIOnly = &H400
  154.  cdlCFApply = &H200
  155.  cdlCFBoth = &H3
  156.  cdlCFEffects = &H100
  157.  cdlCFFixedPitchOnly = &H4000
  158.  cdlCFForceFontExist = &H10000
  159.  cdlCFHelpButton = &H4
  160.  cdlCFLimitSize = &H2000
  161.  cdlCFNoFaceSel = &H80000
  162.  cdlCFNoSimulations = &H1000
  163.  cdlCFNoSizeSel = &H200000
  164.  cdlCFNoStyleSel = &H100000
  165.  cdlCFNoVectorFonts = &H800
  166.  cdlCFPrinterFonts = &H2
  167.  cdlCFScalableOnly = &H20000
  168.  cdlCFScreenFonts = &H1
  169.  cdlCFTTOnly = &H40000
  170.  cdlCFWYSIWYG = &H8000
  171. End Enum
  172.  
  173. Private RetValue As Long 'General
  174. Const MAX_PATH = 260 'General
  175. Private OFN As OPENFILENAME ' Open & Save Dialog
  176.  
  177. 'Inner variables for properties
  178. Private mFileName As String
  179. Private mFileTitle As String
  180. Private mhOwner As Long
  181. Private mDialogTitle As String
  182. Private mFilter As String
  183. Private mInitDir As String
  184. Private mSelDir As String
  185. Private mDefaultExt As String
  186. Private mFilterIndex As Long
  187. Private mHelpFile As String
  188. Private mHelpKey As Long
  189. Private mRGBResult As Long
  190. Private mItalic As Boolean
  191. Private mUnderline As Boolean
  192. Private mStrikethru As Boolean
  193. Private mFontName As String
  194. Private mFontSize As Long
  195. Private mBold As Boolean
  196. Private mDialogPrompt As String
  197. Private mFlags As CdlgExt_Flags
  198. Private mCancelError As Boolean
  199. Private mhIcon As Long
  200. Private mAppName As String
  201. Private i As Integer
  202.  
  203. Private Type BrowseInfo
  204.     hWndOwner As Long
  205.     pIDLRoot As Long
  206.     pszDisplayName As Long
  207.     lpszTitle As String
  208.     ulFlags As Long
  209.     lpfnCallback As Long
  210.     lParam As Long
  211.     iImage As Long
  212. End Type
  213. Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
  214. Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
  215. Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
  216.  
  217. Function BrowseForFolder(Optional sCaption As String = "Select a folder", Optional sDefault As String = "") As String
  218.     Const BIF_RETURNONLYFSDIRS = 1
  219.     Const MAX_PATH = 260
  220.     Dim lPos As Integer, lpIDList As Long, lResult As Long
  221.     Dim sPath As String, tBrowse As BrowseInfo
  222.  
  223.     With tBrowse
  224.         'Set the owner window
  225.         .hWndOwner = mhOwner        'Me.hWnd in VB
  226.         .lpszTitle = sCaption
  227.         .ulFlags = BIF_RETURNONLYFSDIRS     'Return only if the user selected a directory
  228.     End With
  229.  
  230.     'Show the dialog
  231.     lpIDList = SHBrowseForFolder(tBrowse)
  232.     If lpIDList Then
  233.         sPath = String$(MAX_PATH, 0)
  234.         'Get the path from the IDList
  235.         SHGetPathFromIDList lpIDList, sPath
  236.         CoTaskMemFree lpIDList
  237.         lPos = InStr(sPath, vbNullChar)
  238.         If lPos Then
  239.             BrowseForFolder = Left$(sPath, lPos - 1)
  240.             If Right$(BrowseForFolder, 1) <> "\" Then
  241.                 BrowseForFolder = BrowseForFolder & "\"
  242.             End If
  243.         End If
  244.     Else
  245.         'User cancelled, return default path
  246.         BrowseForFolder = sDefault
  247.     End If
  248. End Function
  249.  
  250. Public Property Let CancelError(ByVal vData As Boolean)
  251.    mCancelError = vData
  252. End Property
  253.  
  254. Public Property Get CancelError() As Boolean
  255.   CancelError = mCancelError
  256. End Property
  257.  
  258. Public Property Get hOwner() As Long
  259.     hOwner = mhOwner
  260. End Property
  261.  
  262. Public Property Let hOwner(ByVal New_hOwner As Long)
  263.     mhOwner = New_hOwner
  264. End Property
  265.  
  266. Public Property Get flags() As CdlgExt_Flags
  267.     flags = mFlags
  268. End Property
  269.  
  270. Public Property Let flags(ByVal New_Flags As CdlgExt_Flags)
  271.     mFlags = New_Flags
  272. End Property
  273.  
  274. Public Property Get DialogTitle() As String
  275.    DialogTitle = mDialogTitle
  276. End Property
  277.  
  278. Public Property Let DialogTitle(sTitle As String)
  279.    mDialogTitle = sTitle
  280. End Property
  281.  
  282. Public Property Get DialogPrompt() As String
  283.     DialogPrompt = mDialogPrompt
  284. End Property
  285.  
  286. Public Property Let DialogPrompt(ByVal New_Prompt As String)
  287.     mDialogPrompt = New_Prompt
  288. End Property
  289.  
  290. Public Property Get AppName() As String
  291.     AppName = mAppName
  292. End Property
  293.  
  294. Public Property Let AppName(ByVal New_AppName As String)
  295.     mAppName = New_AppName
  296. End Property
  297.  
  298. Public Property Let hIcon(ByVal vData As Long)
  299.     mhIcon = vData
  300. End Property
  301.  
  302. Public Property Get hIcon() As Long
  303.    hIcon = mhIcon
  304. End Property
  305.  
  306. ' Font Properties
  307. Public Property Get FontBold() As Boolean
  308.   FontBold = mBold
  309. End Property
  310.  
  311. Public Property Let FontBold(bBold As Boolean)
  312.    mBold = bBold
  313. End Property
  314.  
  315. Public Property Get FontName() As String
  316.    FontName = mFontName
  317. End Property
  318.  
  319. Public Property Let FontName(sName As String)
  320.    mFontName = sName
  321. End Property
  322.  
  323. Public Property Get FontSize() As Long
  324.   FontSize = mFontSize
  325. End Property
  326.  
  327. Public Property Let FontSize(lSize As Long)
  328.    mFontSize = lSize
  329. End Property
  330.  
  331. Public Property Get FontItalic() As Boolean
  332.   FontItalic = mItalic
  333. End Property
  334.  
  335. Public Property Let FontItalic(BItalic As Boolean)
  336.    mItalic = BItalic
  337. End Property
  338.  
  339. Public Property Get FontStrikeThru() As Boolean
  340.    FontStrikeThru = mStrikethru
  341. End Property
  342.  
  343. Public Property Let FontStrikeThru(bStrikethru As Boolean)
  344.    mStrikethru = bStrikethru
  345. End Property
  346.  
  347. Public Property Get FontUnderline() As Boolean
  348.    FontUnderline = mUnderline
  349. End Property
  350.  
  351. Public Property Let FontUnderline(bUnderline As Boolean)
  352.    mUnderline = bUnderline
  353. End Property
  354.  
  355. ' Open , Save
  356. Public Property Get DefaultExt() As String
  357.    DefaultExt = mDefaultExt
  358. End Property
  359.  
  360. Public Property Let DefaultExt(sDefExt As String)
  361.    mDefaultExt = sDefExt
  362. End Property
  363.  
  364. Public Property Get FileName() As String
  365.    FileName = mFileName
  366. End Property
  367.  
  368. Public Property Let FileName(sFileName As String)
  369.    mFileName = sFileName
  370. End Property
  371.  
  372. Public Property Get FileTitle() As String
  373.    FileTitle = mFileTitle
  374. End Property
  375.  
  376. Public Property Let FileTitle(sTitle As String)
  377.    mFileTitle = sTitle
  378. End Property
  379.  
  380. Public Property Get Filter() As String
  381.    Filter = mFilter
  382. End Property
  383.  
  384. Public Property Let Filter(sFilter As String)
  385.    mFilter = sFilter
  386. End Property
  387.  
  388. Public Property Get FilterIndex() As Long
  389.    FilterIndex = mFilterIndex
  390. End Property
  391.  
  392. Public Property Let FilterIndex(lIndex As Long)
  393.     mFilterIndex = lIndex
  394. End Property
  395.  
  396. Public Property Get InitDir() As String
  397.    InitDir = mInitDir
  398. End Property
  399.  
  400. Public Property Let InitDir(sDir As String)
  401.     mInitDir = sDir
  402. End Property
  403.  
  404. Public Property Get SelDir() As String
  405.    SelDir = mSelDir
  406. End Property
  407.  
  408. Public Property Let SelDir(sDir As String)
  409.     mSelDir = sDir
  410. End Property
  411.  
  412. 'Color Dialog
  413. Public Property Get Color() As Long
  414.    Color = mRGBResult
  415. End Property
  416.  
  417. Public Property Let Color(lValue As Long)
  418.    mRGBResult = lValue
  419. End Property
  420.  
  421. Public Sub ShowOpen()
  422. Dim iDelim As Integer
  423.   InitOFN
  424.   RetValue = GetOpenFileName(OFN)
  425.     If RetValue > 0 Then
  426.        iDelim = InStr(OFN.lpstrFileTitle, vbNullChar)
  427.        If iDelim Then mFileTitle = Left$(OFN.lpstrFileTitle, iDelim - 1)
  428.        iDelim = InStr(OFN.lpstrFile, vbNullChar)
  429.        If iDelim Then mFileName = Left$(OFN.lpstrFile, iDelim - 1)
  430.     Else
  431.        If mCancelError Then Err.Raise 0
  432.     End If
  433. End Sub
  434. Public Sub ShowSave()
  435. Dim iDelim As Integer
  436.   InitOFN
  437.   RetValue = GetSaveFileName(OFN)
  438.     If RetValue > 0 Then
  439.        iDelim = InStr(OFN.lpstrFileTitle, vbNullChar)
  440.        If iDelim Then mFileTitle = Left$(OFN.lpstrFileTitle, iDelim - 1)
  441.        iDelim = InStr(OFN.lpstrFile, vbNullChar)
  442.        If iDelim Then mFileName = Left$(OFN.lpstrFile, iDelim - 1)
  443.     Else
  444.        If mCancelError Then Err.Raise 0
  445.     End If
  446. End Sub
  447. Private Sub InitOFN()
  448.   Dim sTemp As String, i As Integer
  449.   Dim uFlag As Long
  450.   uFlag = mFlags And (&H1 Or &H2 Or &H4 Or &H8 Or &H10 Or &H100 Or &H200 Or &H400 Or &H800 Or &H1000 Or &H2000 Or &H4000 Or &H8000 Or &H40000 Or &H80000 Or &H100000 Or &H200000)
  451.   With OFN
  452.        .lStructSize = Len(OFN)
  453.        .hWndOwner = mhOwner
  454.        .flags = uFlag
  455.        .lpstrDefExt = mDefaultExt
  456.        sTemp = mInitDir
  457.        If sTemp = "" Then sTemp = App.Path
  458.        .lpstrInitialDir = sTemp
  459.        sTemp = mFileName
  460.        .lpstrFile = sTemp & String$(255 - Len(sTemp), 0)
  461.        .nMaxFile = 255
  462.        .lpstrFileTitle = String$(255, 0)
  463.        .nMaxFileTitle = 255
  464.         sTemp = mFilter
  465.             For i = 1 To Len(sTemp)
  466.                 If Mid(sTemp, i, 1) = "|" Then
  467.                    Mid(sTemp, i, 1) = vbNullChar
  468.                 End If
  469.             Next
  470.         sTemp = sTemp & String$(2, 0)
  471.         .lpstrFilter = sTemp
  472.         .nFilterIndex = mFilterIndex
  473.         .lpstrTitle = mDialogTitle
  474.         .hInstance = App.hInstance
  475.  End With
  476. End Sub
  477.  
  478. Public Sub ShowColor()
  479. Dim cc As CHOOSECOLOR
  480. Dim a As Long
  481.     cc.lStructSize = Len(cc)
  482.     cc.hWndOwner = mhOwner
  483.     cc.hInstance = App.hInstance
  484.     cc.flags = mFlags And (&H1 Or &H2 Or &H4 Or &H8 Or &H100)
  485.     cc.lpCustColors = GetSetting(App.EXEName, "Settings", "CustomColors", String$(16 * 4, 0)) 'load custom colors
  486.     a = ChooseColorAPI(cc)
  487.         If (a) Then
  488.             mRGBResult = cc.RGBResult
  489.             SaveSetting App.EXEName, "Settings", "CustomColors", cc.lpCustColors 'save custom colors
  490.         Else
  491.             If mCancelError Then Err.Raise (RetValue)
  492.         End If
  493. End Sub
  494.  
  495. Public Sub ShowFont()
  496.   Dim CF As ChooseFont
  497.   Dim LF As LOGFONT
  498.   Dim TempByteArray() As Byte
  499.   Dim ByteArrayLimit As Long
  500.   Dim OldhDC As Long
  501.   Dim FontToUse As Long
  502.   Dim tbuf As String * 80
  503.   Dim x As Long
  504.   Dim uFlag As Long
  505.   uFlag = mFlags And (&H1 Or &H2 Or &H3 Or &H4 Or &H100 Or &H200 Or &H400 Or &H800 Or &H1000 Or &H2000 Or &H4000 Or &H8000 Or &H10000 Or &H20000 Or &H40000 Or &H80000 Or &H100000 Or &H200000)
  506.   TempByteArray = StrConv(mFontName & vbNullChar, vbFromUnicode)
  507.   ByteArrayLimit = UBound(TempByteArray)
  508.   With LF
  509.         For x = 0 To ByteArrayLimit
  510.            .lfFaceName(x) = TempByteArray(x)
  511.         Next
  512.     .lfHeight = mFontSize / 72 * GetDeviceCaps(GetDC(mhOwner), LOGPIXELSY)
  513.     .lfItalic = mItalic * -1
  514.     .lfUnderline = mUnderline * -1
  515.     .lfStrikeOut = mStrikethru * -1
  516.     If mBold Then .lfWeight = FW_BOLD
  517.   End With
  518.   With CF
  519.       .lStructSize = Len(CF)
  520.       .hWndOwner = mhOwner
  521.       .hdc = GetDC(mhOwner)
  522.       .lpLogFont = lstrcpy(LF, LF)
  523.       If Not uFlag Then
  524.          .flags = cdlCFScreenFonts
  525.       Else
  526.          .flags = uFlag Or cdlCFWYSIWYG
  527.       End If
  528.      .flags = .flags Or cdlCFEffects Or CF_INITTOLOGFONTSTRUCT
  529.      .rgbColors = mRGBResult
  530.      .lCustData = 0
  531.      .lpfnHook = 0
  532.      .lpTemplateName = 0
  533.      .hInstance = 0
  534.      .lpszStyle = 0
  535.      .nFontType = SCREEN_FONTTYPE
  536.      .nSizeMin = 0
  537.      .nSizeMax = 0
  538.      .iPointSize = mFontSize * 10
  539.     End With
  540.     RetValue = ChooseFont(CF)
  541.     If RetValue = 0 Then
  542.        If mCancelError Then Err.Raise (RetValue)
  543.     Else
  544.        With LF
  545.             mItalic = .lfItalic * -1
  546.             mUnderline = .lfUnderline * -1
  547.             mStrikethru = .lfStrikeOut * -1
  548.        End With
  549.        With CF
  550.             mFontSize = .iPointSize \ 10
  551.             mRGBResult = .rgbColors
  552.             If .nFontType And BOLD_FONTTYPE Then
  553.                 mBold = True
  554.             Else
  555.                 mBold = False
  556.             End If
  557.        End With
  558.        FontToUse = CreateFontIndirect(LF)
  559.        If FontToUse = 0 Then Exit Sub
  560.           OldhDC = SelectObject(CF.hdc, FontToUse)
  561.           RetValue = GetTextFace(CF.hdc, 79, tbuf)
  562.           mFontName = Mid$(tbuf, 1, RetValue)
  563.        End If
  564. End Sub
  565.  
  566.  
  567. '<*END*>
  568.  
  569.  
  570.