home *** CD-ROM | disk | FTP | other *** search
-
- ' File Open/Save structure/declarations
- Type OpenSaveFile
- lStructSize As Long
- hwndOwner As Integer
- hInstance As Integer
- lpstrFilter As Long
- lpstrCustomFilter As Long
- nMaxCustFilter As Long
- nFilterIndex As Long
- lpstrFile As Long
- nMaxFile As Long
- lpstrFileTitle As Long
- nMaxFileTitle As Long
- lpstrInitialDir As Long
- lpstrTitle As Long
- Flags As Long
- nFileOffset As Integer
- nFileExtension As Integer
- lpstrDefExt As Long
- lCustData As Long
- lpfnHook As Long
- lpTemplateName As Long
- End Type
-
- Declare Function GetOpenFileName Lib "COMMDLG.DLL" (pOpenSaveFile As OpenSaveFile) As Integer
- Declare Function GetSaveFileName Lib "COMMDLG.DLL" (pOpenSaveFile As OpenSaveFile) As Integer
- Declare Function GetFileTitle Lib "COMMDLG.DLL" (ByVal FName As String, ByVal Title As String, Size As Integer)
-
- Global Const OFN_READONLY = &H1
- Global Const OFN_OVERWRITEPROMPT = &H2
- Global Const OFN_HIDEREADONLY = &H4
- Global Const OFN_NOCHANGEDIR = &H8
- Global Const OFN_SHOWHELP = &H10
- Global Const OFN_ENABLEHOOK = &H20
- Global Const OFN_ENABLETEMPLATE = &H40
- Global Const OFN_ENABLETEMPLATEHANDLE = &H80
- Global Const OFN_NOVALIDATE = &H100
- Global Const OFN_ALLOWMULTISELECT = &H200
- Global Const OFN_EXTENSIONDIFFERENT = &H400
- Global Const OFN_PATHMUSTEXIST = &H800
- Global Const OFN_FILEMUSTEXIST = &H1000
- Global Const OFN_CREATEPROMPT = &H2000
- Global Const OFN_SHAREAWARE = &H4000
- Global Const OFN_NOREADONLYRETURN = &H8000
- Global Const OFN_NOTESTFILECREATE = &H10000
- Global Const OFN_SHAREFALLTHROUGH = 2
- Global Const OFN_SHARENOWARN = 1
- Global Const OFN_SHAREWARN = 0
-
- 'ChooseColor structure/declarations/constants
- Type ChooseColor
- lStructSize As Long
- hwndOwner As Integer
- hInstance As Integer
- RgbResult As Long
- lpCustColors As Long
- Flags As Long
- lCustData As Long
- lpfnHook As Long
- lpTemplateName As Long
- End Type
-
- Declare Function ChooseColor Lib "COMMDLG.DLL" (pCHOOSECOLOR As ChooseColor) As Integer
-
- Global Const CC_RGBINIT = &H1
- Global Const CC_FULLOPEN = &H2
- Global Const CC_PREVENTFULLOPEN = &H4
- Global Const CC_SHOWHELP = &H8
- Global Const CC_ENABLEHOOK = &H10
- Global Const CC_ENABLETEMPLATE = &H20
- Global Const CC_ENABLETEMPLATEHANDLE = &H40
-
- ' ChooseFont structures/declarations/constants
- Type ChooseFont
- lStructSize As Long
- hwndOwner As Integer
- hDC As Integer
- lpLogFont As Long
- iPointSize As Integer
- Flags As Long
- rgbColors As Long
- lCustData As Long
- lpfnHook As Long 'Integer ?
- lpTemplateName As Long
- hInstance As Integer
- lpszStyle As Long
- nfonttype As Integer
- nSizeMin As Integer
- nSizeMax As Integer
- End Type
-
- Declare Function ChooseFont Lib "COMMDLG.DLL" (pCHOOSEFONT As ChooseFont) As Integer
-
- Global Const CF_SCREENFONTS = &H1&
- Global Const CF_PRINTERFONTS = &H2&
- Global Const CF_BOTH = (CF_SCREENFONTS Or CF_PRINTERFONTS)
- Global Const CF_SHOWHELP = &H4&
- Global Const CF_ENABLEHOOK = &H8&
- Global Const CF_ENABLETEMPLATE = &H10&
- Global Const CF_ENABLETEMPLATEHANDLE = &H20&
- Global Const CF_INITTOLOGFONTSTRUCT = &H40&
- Global Const CF_USESTYLE = &H80&
- Global Const CF_EFFECTS = &H100&
- Global Const CF_APPLY = &H200&
- Global Const CF_ANSIONLY = &H400&
- Global Const CF_NOVECTORFONTS = &H800&
- Global Const CF_NOOEMFONTS = CF_NOVECTORFONTS
- Global Const CF_NOSIMULATIONS = &H1000&
- Global Const CF_LIMITSIZE = &H2000&
- Global Const CF_FIXEDPITCHONLY = &H4000&
- Global Const CF_WYSIWYG = &H8000& ' Also need CF_SCREENFONTS and CF_PRINTERFONTS
- Global Const CF_FORCEFONTEXIST = &H1000&
- Global Const CF_SCALABLEONLY = &H2000&
- Global Const CF_TTONLY = &H4000&
- Global Const CF_NOFACESEL = &H8000&
- Global Const CF_NOSTYLESEL = &H100000
- Global Const CF_NOSIZESEL = &H200000
- Global Const SIMULATED_FONTTYPE = &H8000
- Global Const PRINTER_FONTTYPE = &H4000
- Global Const SCREEN_FONTTYPE = &H2000
- Global Const BOLD_FONTTYPE = &H100
- Global Const ITALIC_FONTTYPE = &H200
- Global Const REGULAR_FONTTYPE = &H400
- Global Const WM_CHOOSEFONT_GETLOGFONT = (&H400 + 1) 'WM_USER + 1
- Global Const LF_FACESIZE = 32
-
- Type LOGFONT
- lfHeight As Integer
- lfWidth As Integer
- lfEscapement As Integer
- lfOrientation As Integer
- lfWeight As Integer
- lfItalic As String * 1
- lfUnderline As String * 1
- lfStrikeOut As String * 1
- lfCharSet As String * 1
- lfOutPrecision As String * 1
- lfClipPrecision As String * 1
- lfQuality As String * 1
- lfPitchAndFamily As String * 1
- lfFaceName As String * LF_FACESIZE
- End Type
-
- Global Const LBSELCHSTRING = "commdlg_LBSelChangedNotify"
- Global Const SHAREVISTRING = "commdlg_ShareViolation"
- Global Const FILEOKSTRING = "commdlg_FileNameOK"
- Global Const COLOROKSTRING = "commdlg_ColorOK"
- Global Const SETRGBSTRING = "commdlg_SetRGBColor"
- Global Const FINDMSGSTRING = "commdlg_FindReplace"
- Global Const HELPMSGSTRING = "commdlg_help"
- Global Const CD_LBSELNOITEMS = -1
- Global Const CD_LBSELCHANGE = 0
- Global Const CD_LBSELSUB = 1
- Global Const CD_LBSELADD = 2
-
- ' Printer related structures/declarations/constants
- Type PrintDlg
- lStructSize As Long
- hwndOwner As Integer
- hDevMode As Integer
- hDevNames As Integer
- hDC As Integer
- Flags As Long
- nFromPage As Integer
- nToPage As Integer
- nMinPage As Integer
- nMaxPage As Integer
- nCopies As Integer
- hInstance As Integer
- lCustData As Long
- lpfnPrintHook As Long
- lpfnSetupHook As Long
- lpPrintTemplateName As Long
- lpSetupTemplateName As Long
- hPrintTemplate As Integer
- hSetupTemplate As Integer
- End Type
-
- Declare Function PrintDlg Lib "COMMDLG.DLL" (pPrintDLG As PrintDlg) As Integer
-
- Global Const PD_ALLPAGES = &H0
- Global Const PD_SELECTION = &H1
- Global Const PD_PAGENUMS = &H2
- Global Const PD_NOSELECTION = &H4
- Global Const PD_NOPAGENUMS = &H8
- Global Const PD_COLLATE = &H10
- Global Const PD_PRINTTOFILE = &H20
- Global Const PD_PRINTSETUP = &H40
- Global Const PD_NOWARNING = &H80
- Global Const PD_RETURNDC = &H100
- Global Const PD_RETURNIC = &H200
- Global Const PD_RETURNDEFAULT = &H400
- Global Const PD_SHOWHELP = &H800
- Global Const PD_ENABLEPRINTHOOK = &H1000
- Global Const PD_ENABLESETUPHOOK = &H2000
- Global Const PD_ENABLEPRINTTEMPLATE = &H4000
- Global Const PD_ENABLESETUPTEMPLATE = &H8000
- Global Const PD_ENABLEPRINTTEMPLATEHANDLE = &H10000
- Global Const PD_ENABLESETUPTEMPLATEHANDLE = &H20000
- Global Const PD_USEDEVMODECOPIES = &H40000
- Global Const PD_DISABLEPRINTTOFILE = &H80000
- Global Const PD_HIDEPRINTTOFILE = &H100000
-
- Type DEVNAMES
- wDriverOffset As Integer
- wDeviceOffset As Integer
- wOutputOffset As Integer
- wDefault As Integer
- End Type
-
- Global Const DN_DEFAULTPRN = &H1
-
- Type DevMode
- dmDeviceName As String * 32
- dmSpecVersion As Integer
- dmDriverVersion As Integer
- dmSize As Integer
- dmDriverExtra As Integer
- dmFields As Long
- dmOrientation As Integer
- dmPaperSize As Integer
- dmPaperLength As Integer
- dmPaperWidth As Integer
- dmScale As Integer
- dmCopies As Integer
- dmDefaultSource As Integer
- dmPrintQuality As Integer
- dmColor As Integer
- dmDuplex As Integer
- dmYResolution As Integer
- dmTTOption As Integer
- End Type
-
- ' Returns error value
- Declare Function CommDlgExtendedError Lib "COMMDLG.DLL" () As Long
-
- ' Misc. memory declarations/constants
- Declare Sub hmemcpy Lib "Kernel" (lpDest As Any, lpSource As Any, ByVal dwBytes As Long)
- Declare Function Lstrcpy Lib "KERNEL" (p1 As Any, p2 As Any) As Long
- Declare Function GlobalAlloc Lib "Kernel" (ByVal wFlags As Integer, ByVal dwBytes As Long) As Integer
- Declare Function GlobalFree Lib "Kernel" (ByVal hMem As Integer) As Integer
- Declare Function GlobalLock Lib "Kernel" (ByVal hMem As Integer) As Long
- Declare Function GlobalUnlock Lib "Kernel" (ByVal hMem As Integer) As Integer
-
- Global Const GMEM_MOVEABLE = &H2
- Global Const GMEM_ZEROINIT = &H40
- Global Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
-
- Declare Function GetDeviceCaps Lib "GDI" (ByVal hDC As Integer, ByVal nIndex As Integer) As Integer
- Declare Function DeleteDC Lib "GDI" (ByVal hDC As Integer) As Integer
- Global Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
-
- Function DialogColor& (Ctrl As Control, CurrColor&)
- ' Sample call:
- ' Text1.BackColor = DialogColor(Text1, (Text1.BackColor))
-
- Dim i%, rc%, ArrySize%, MemHndl%, MemAddr&, ChsColor As ChooseColor
-
- ReDim CstmClrs(0 To 15) As Long ' Array for custom colors
- ArrySize% = Len(CstmClrs(0)) * 16 ' Pre-size memory block
-
- MemHndl% = GlobalAlloc(GHND, ArrySize%)
- If MemHndl% = False Then Exit Function
- MemAddr& = GlobalLock(MemHndl%)
-
- ' Preload custom colors array with WHITE
- For i% = 0 To 15
- CstmClrs(i%) = &HFFFFFF
- Next i%
-
- ' Copy custom colors array to memory
- Call hmemcpy(ByVal MemAddr&, CstmClrs(0), ArrySize%)
-
- ChsColor.lStructSize = Len(ChsColor)
- ChsColor.hwndOwner = Ctrl.Parent.hWnd
- ChsColor.lpCustColors = MemAddr&
- ChsColor.RgbResult = CurrColor&
- ChsColor.Flags = ChsColor.Flags Or CC_RGBINIT ' To pre-select dialog color to current color
- ' ChsColor.Flags = ChsColor.Flags Or CC_FULLOPEN ' To allow custom colors selection
- ChsColor.Flags = ChsColor.Flags Or CC_PREVENTFULLOPEN ' To prevent custom colors selection
-
- ' Call the ChooseColor function in the Common Dialog DLL
- rc% = ChooseColor(ChsColor)
-
- ' Copy the selected custom colors back into the array
- If rc% <> False Then Call hmemcpy(CstmClrs(0), ByVal MemAddr&, ArrySize%)
-
- i% = GlobalUnlock(MemHndl%)
- i% = GlobalFree(MemHndl%)
- ' If rc% = False Then Exit Function
-
- ' Return the selected color
- DialogColor = ChsColor.RgbResult
-
- ' Get the selected custom colors
- ' For i% = 0 To UBound(CstmClrs)
- ' = Hex$(CstmClrs(i%))
- ' Next i%
-
- End Function
-
- Function DialogFile$ (DirPath$, FileSpec$, Filters$, OpenFile%)
- ' Sample call:
- ' opening ... DirPath$ = "C:\WINDOWS\VB"
- ' FileSpec$ = "" ' limits to only matching files (wildcards allowed *.*)
- ' Filters$ = "Graphic Files|*.bmp; *.ico|Text Files|*.txt"
- ' OpenFile% = True
- ' tmpfile$ = DialogFile(DirPath$,FileSpec$, Filters$, OpenFile%)
-
- ' saving .... DirPath$ = "C:\WINDOWS\VB\PROJECTS"
- ' FileSpec$ = "MYFILE.RPT" ' default file name
- ' Filters$ = "Report Files|*.rpt"
- ' OpenFile% = False
- ' tmpfile$ = DialogFile(DirPath$,FileSpec$, Filters$, OpenFile%)
-
- Dim rc%, FileSize%, MemHndl%, MemAddr&, osFile As OpenSaveFile
-
- Do While InStr(Filters$, "|") <> False
- Mid$(Filters$, InStr(Filters$, "|"), 1) = Chr$(0) ' Separate with NULL
- Loop
- Filters$ = Filters$ & Chr$(0) & Chr$(0) ' Terminate with double NULL
-
- FileSpec$ = FileSpec$ & String$(128 - Len(FileSpec$), 0)
- FileSize% = Len(FileSpec$) + Len(Filters$)
-
- MemHndl% = GlobalAlloc(GHND, FileSize%)
- If MemHndl% = False Then Exit Function
- MemAddr& = GlobalLock(MemHndl%)
-
- Call hmemcpy(ByVal MemAddr&, ByVal (FileSpec$ + Filters$), FileSize%)
- osFile.lStructSize = Len(osFile)
- ' osFile.hwndOwner =
- osFile.Flags = osFile.Flags Or OFN_HIDEREADONLY
- osFile.Flags = osFile.Flags Or OFN_PATHMUSTEXIST
- If OpenFile% = True Then osFile.Flags = osFile.Flags Or OFN_FILEMUSTEXIST
- If OpenFile% = False Then osFile.Flags = osFile.Flags Or OFN_OVERWRITEPROMPT
- osFile.nFilterIndex = 1
- osFile.lpstrFile = MemAddr&
- osFile.nMaxFile = Len(FileSpec$)
- osFile.lpstrFilter = MemAddr& + Len(FileSpec$)
- If Len(Trim$(DirPath$)) Then ' Convert DirPath$ to a LONG integer
- If Right$(Trim$(DirPath$), 1) = "\" Then DirPath$ = Left$(DirPath$, Len(DirPath$) - 1) ' Strip any trailing '\'
- osFile.lpstrInitialDir = Lstrcpy(ByVal DirPath$, ByVal DirPath$)
- End If
- If OpenFile% = True Then
- rc% = GetOpenFileName(osFile)
- Else
- rc% = GetSaveFileName(osFile)
- End If
- If rc% <> False Then
- Call hmemcpy(ByVal FileSpec$, ByVal MemAddr&, Len(FileSpec$))
- DialogFile = Left$(FileSpec$, InStr(FileSpec$, Chr$(0)) - 1)
- ' Path = Left$(FileSpec$, osFile.nFileOffset)
- ' Filename = Right$(FileSpec$, Len(FileSpec$) - osFile.nFileOffset)
- ' Extension = Right$(FileSpec$, Len(FileSpec$) - osFile.nFileExtension)
- End If
- rc% = GlobalUnlock(MemHndl%)
- rc% = GlobalFree(MemHndl%)
-
- End Function
-
- Function DialogFont% (Ctrl As Control)
- ' Sample call:
- ' If DialogFont(Text1) = True Then Text1.Text = Text1.FontName
-
- Dim i%, rc%, MemHndl%, MemAddr&, lFont As LOGFONT, cFont As ChooseFont
-
- lFont.lfHeight = Ctrl.FontSize / (72 / GetDeviceCaps(Ctrl.Parent.hDC, LOGPIXELSY)) * -1
- If Ctrl.FontBold = True Then lFont.lfWeight = 700 Else lFont.lfWeight = 300
- If Ctrl.FontItalic = True Then lFont.lfItalic = Chr$(255)
- If Ctrl.FontStrikethru = True Then lFont.lfStrikeOut = Chr$(1)
- If Ctrl.FontUnderline = True Then lFont.lfUnderline = Chr$(1)
- lFont.lfFaceName = Ctrl.FontName & Chr$(0) ' Terminate with a NULL or it won't work
-
- ' Copy lFont to memory for .lpLogFont
- MemHndl% = GlobalAlloc(GHND, Len(lFont))
- If MemHndl% = False Then Exit Function
- MemAddr& = GlobalLock(MemHndl%)
- Call hmemcpy(ByVal MemAddr&, lFont, Len(lFont))
-
- cFont.lStructSize = Len(cFont)
- cFont.hwndOwner = Ctrl.Parent.hWnd
- cFont.Flags = cFont.Flags Or CF_SCREENFONTS ' Need this to display on screen
- cFont.Flags = cFont.Flags Or CF_EFFECTS ' Allow selection of underline, color, etc.
- cFont.Flags = cFont.Flags Or CF_INITTOLOGFONTSTRUCT ' Default to current settings
- cFont.nfonttype = SCREEN_FONTTYPE
- cFont.rgbColors = Ctrl.ForeColor
- cFont.lpLogFont = MemAddr&
-
- ' Call the ChooseFont function in the Common Dialog DLL
- rc% = ChooseFont(cFont)
-
- ' Copy to the LogFont structure from memory
- If rc% <> False Then Call hmemcpy(lFont, ByVal MemAddr&, Len(lFont))
- i% = GlobalUnlock(MemHndl%)
- i% = GlobalFree(MemHndl%)
- If rc% = False Then Exit Function
-
- ' Copy the LogFont structure to the global DlgFont structure
- Dim tmpname$
- If Len(lFont.lfFaceName) And InStr(lFont.lfFaceName, Chr$(0)) <> False Then
- tmpname$ = Left$(lFont.lfFaceName, InStr(lFont.lfFaceName, Chr$(0)) - 1)
- If Len(tmpname$) <> False Then Ctrl.FontName = tmpname$
- End If
- Ctrl.FontSize = Abs(lFont.lfHeight * (72 / GetDeviceCaps(Ctrl.Parent.hDC, LOGPIXELSY)))
- If lFont.lfWeight < 500 Then Ctrl.FontBold = False Else Ctrl.FontBold = True
- Ctrl.FontItalic = Asc(lFont.lfItalic)
- Ctrl.FontStrikethru = Asc(lFont.lfStrikeOut)
- Ctrl.FontUnderline = Asc(lFont.lfUnderline)
- Ctrl.ForeColor = cFont.rgbColors
- DialogFont = True
-
- End Function
-
-