home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Software Sampler / Visual_Basic_Software_Sampler_Visual_Basic_Programmers_Journal_June_1996.iso / issues / 04apr96 / code / p105.txt < prev    next >
Text File  |  1996-04-24  |  7KB  |  322 lines

  1. Listing 1 [[VB4]]
  2.  
  3.  
  4. VERSION 1.0 CLASS
  5. BEGIN
  6.     MultiUse = -1    'True
  7. END
  8. Attribute VB_Name = "CommonDialog"
  9. Attribute VB_Creatable = True
  10. Attribute VB_Exposed = True
  11. Option Explicit
  12.  
  13. #If Win32 Then
  14.     Private Type OPENFILENAME
  15.             lStructSize As Long
  16.             hwndOwner As Long
  17.             hInstance As Long
  18.             lpstrFilter As String
  19.             lpstrCustomFilter As String
  20.             nMaxCustFilter As Long
  21.             nFilterIndex As Long
  22.             lpstrFile As String
  23.             nMaxFile As Long
  24.             lpstrFileTitle As String
  25.             nMaxFileTitle As Long
  26.             lpstrInitialDir As String
  27.             lpstrTitle As String
  28.             Flags As Long
  29.             nFileOffset As Integer
  30.             nFileExtension As Integer
  31.             lpstrDefExt As String
  32.             lCustData As Long
  33.             lpfnHook As Long
  34.             lpTemplateName As String
  35.     End Type
  36.     
  37.     Private Declare Function GetOpenFileName Lib _
  38.         "comdlg32.dll" Alias "GetOpenFileNameA" _
  39.         (pOPENFILENAME As OPENFILENAME) As Long
  40.     Private Declare Function GetSaveFileName Lib _
  41.         "comdlg32.dll" Alias "GetSaveFileNameA" _
  42.         (pOPENFILENAME As OPENFILENAME) As Long
  43.     Private Declare Function GetShortPathName Lib _
  44.         "kernel32" Alias "GetShortPathNameA" (ByVal _
  45.         lpszLongPath As String, ByVal lpszShortPath As _
  46.         String, ByVal cchBuffer As Long) As Long
  47.     Private Declare Function GetActiveWindow Lib _
  48.         "user32" () As Long
  49. #Else
  50.     Private Type OPENFILENAME
  51.             lStructSize As Long
  52.             hwndOwner As Integer
  53.             hInstance As Integer
  54.             lpstrFilter As String
  55.             lpstrCustomFilter As String
  56.             nMaxCustFilter As Long
  57.             nFilterIndex As Long
  58.             lpstrFile As String
  59.             nMaxFile As Long
  60.             lpstrFileTitle As String
  61.             nMaxFileTitle As Long
  62.             lpstrInitialDir As String
  63.             lpstrTitle As String
  64.             Flags As Long
  65.             nFileOffset As Integer
  66.             nFileExtension As Integer
  67.             lpstrDefExt As String
  68.             lCustData As Long
  69.             lpfnHook As Long
  70.             lpTemplateName As String
  71.     End Type
  72.     
  73.     Private Declare Function GetOpenFileName Lib _
  74.         "commdlg.dll" (pOPENFILENAME As OPENFILENAME) _
  75.         As Long
  76.     Private Declare Function GetSaveFileName Lib _
  77.         "commdlg.dll" (pOPENFILENAME As OPENFILENAME) _
  78.         As Long
  79.     Private Declare Function GetActiveWindow Lib "user" _
  80.         () As Integer
  81. #End If
  82.  
  83. 'here are some direct properties
  84. Public DefaultExt As String
  85. Public DialogTitle As String
  86. Public Filter As String
  87. Public FilterIndex As String
  88. Public Flags As Integer
  89. Public InitDir As String
  90.  
  91. 'member variables
  92. Dim mCMDLG As Object
  93. Dim mFileName As String
  94. Dim mFileTitle As String
  95. Dim mhOwner As Long
  96.  
  97. Dim NullChar As String
  98.  
  99. Public Property Let Action(Index As Integer)
  100.     Dim OFN As OPENFILENAME, sFile As String, lResult _
  101.         As Long, iDelim As Integer
  102.     Dim zTemp As String, Temp As Variant
  103.     Dim i As Integer
  104.     
  105.     If Index > 2 Then Exit Property    'get out if invalid
  106.      
  107.     OFN.lStructSize = Len(OFN)
  108.     If mhOwner = 0 Then mhOwner = GetActiveWindow()
  109.     OFN.hwndOwner = mhOwner
  110.     OFN.Flags = Flags
  111.     
  112.     OFN.lpstrDefExt = DefaultExt
  113.     
  114.     'set the initial directory, otherwise uses current
  115.     Temp = InitDir
  116.     OFN.lpstrInitialDir = Temp
  117.     
  118.     'retrieve the default file name\
  119.     'first check for wild cards
  120.     Temp = mFileName
  121.     
  122.     #If Win32 Then
  123.         If (InStr(Temp, "*") = 0) And InStr(Temp, "?") _
  124.             = 0 Then
  125.             'try to convert it to a long file name
  126.             zTemp = Dir(OFN.lpstrInitialDir & "\" & Temp)
  127.             If Len(zTemp) Then 'we found a match
  128.                 Temp = zTemp
  129.             End If
  130.         End If
  131.     #End If
  132.     
  133.     OFN.lpstrFile = Temp & String$(255 - Len(Temp), 0)
  134.     OFN.nMaxFile = 255
  135.     
  136.     OFN.lpstrFileTitle = String$(255, 0)
  137.     OFN.nMaxFileTitle = 255
  138.     
  139.     'file type filter
  140.     'we need to replace pipes with nulls
  141.     zTemp = Filter
  142.     For i = 1 To Len(zTemp)
  143.         If Mid(zTemp, i, 1) = "|" Then Mid(zTemp, i, 1) _
  144.             = NullChar
  145.     Next
  146.     zTemp = zTemp & String$(2, 0)
  147.     OFN.lpstrFilter = zTemp
  148.     OFN.nFilterIndex = FilterIndex
  149.     
  150.     OFN.lpstrTitle = DialogTitle
  151.  
  152.     If Index = 1 Then 'they want File Open dialog
  153.         lResult = GetOpenFileName(OFN)
  154.     Else                'Save As... dialog
  155.         lResult = GetSaveFileName(OFN)
  156.     End If
  157.  
  158.     If lResult <> 0 Then
  159.         iDelim = InStr(OFN.lpstrFileTitle, NullChar)
  160.         If iDelim > 0 Then
  161.             mFileTitle = Left$(OFN.lpstrFileTitle, _
  162.                 iDelim - 1)
  163.         End If
  164.         iDelim = InStr(OFN.lpstrFile, NullChar)
  165.         If iDelim > 0 Then
  166.             mFileName = Left$(OFN.lpstrFile, iDelim - 1)
  167.         End If
  168.     End If
  169. End Property
  170.  
  171. Public Property Set CMDLGControl(C As Object)
  172.     Set mCMDLG = C
  173.     FileName = mCMDLG.FileName
  174.     DefaultExt = mCMDLG.DefaultExt
  175.     Filter = mCMDLG.Filter
  176.     FilterIndex = mCMDLG.FilterIndex
  177.     Flags = mCMDLG.Flags
  178.     InitDir = mCMDLG.InitDir
  179.     mhOwner = mCMDLG.Parent.hWnd
  180. End Property
  181.  
  182. Public Property Let FileName(S As String)
  183.     mFileName = S
  184. End Property
  185.  
  186. Public Property Get FileName() As String
  187.     FileName = mFileName
  188. End Property
  189.  
  190. Public Property Get ShortFileTitle() As String
  191.     ShortFileTitle = Long2Short(mFileTitle)
  192. End Property
  193.  
  194. Public Property Get FileTitle() As String
  195.     FileTitle = mFileTitle
  196. End Property
  197.  
  198. Private Function Long2Short(ByVal S As String) As String
  199.     Dim Buff As String
  200.     Dim r As Integer
  201.     
  202.     #If Win32 Then
  203.         If Dir(S) = "" Then
  204.             Open S For Output As #1
  205.             Close
  206.         End If
  207.         Buff = Space(256)
  208.         r = GetShortPathName(S, Buff, 256)
  209.         Long2Short = Left(Buff, r)
  210.     #Else
  211.         Long2Short = S
  212.     #End If
  213. End Function
  214.  
  215. Public Property Get ShortFileName() As String
  216.     ShortFileName = Long2Short(mFileName)
  217. End Property
  218.  
  219. Private Sub Class_Initialize()
  220.     NullChar = Chr(0)
  221. End Sub
  222.  
  223.  
  224.  
  225.  
  226. Listing 2 [[VB4]]
  227.  
  228. VERSION 4.00
  229. Begin VB.Form Form1 
  230.     Caption         =    "Form1"
  231.     ClientHeight    =    4140
  232.     ClientLeft        =    1545
  233.     ClientTop        =    1830
  234.     ClientWidth     =    6690
  235.     Height            =    4830
  236.     Left            =    1485
  237.     LinkTopic        =    "Form1"
  238.     ScaleHeight     =    4140
  239.     ScaleWidth        =    6690
  240.     Top             =    1200
  241.     Width            =    6810
  242.     Begin VB.TextBox Text1 
  243.         Height            =    1815
  244.         Left            =    2040
  245.         MultiLine        =    -1    'True
  246.         ScrollBars        =    3    'Both
  247.         TabIndex        =    0
  248.         Text            =    "TEST.frx":0000
  249.         Top             =    720
  250.         Width            =    2655
  251.     End
  252.     Begin MSComDlg.CommonDialog CD 
  253.         Left            =    840
  254.         Top             =    1320
  255.         _version        =    65536
  256.         _extentx        =    847
  257.         _extenty        =    847
  258.         _stockprops     =    0
  259.         defaultext        =    "TXT"
  260.         dialogtitle     =    "Test Dialog"
  261.         filename        =    "*.TXT"
  262.         filter            =    "Text Files (*.txt)|*.txt|All _
  263.             Files (*.*)|*.*"
  264.         filterindex     =    1
  265.         initdir         =    "C:\VB4"
  266.     End
  267.     Begin VB.Menu mnuFile 
  268.         Caption         =    "&File"
  269.         Begin VB.Menu mnuFileOpen 
  270.          Caption         =    "&Open"
  271.         End
  272.         Begin VB.Menu mnuFileSaveAs 
  273.          Caption         =    "Save &As..."
  274.         End
  275.     End
  276. End
  277. Attribute VB_Name = "Form1"
  278. Attribute VB_Creatable = False
  279. Attribute VB_Exposed = False
  280.  
  281. Dim zRealFile As String
  282. Dim zFileName As String
  283.  
  284. Private Sub Form_Resize()
  285.     Text1.Move 0, 0, ScaleWidth, ScaleHeight
  286. End Sub
  287.  
  288. Private Sub mnuFileOpen_Click()
  289.     Dim C As Object
  290.     
  291.     Set C = CreateObject("cmdlgX.CommonDialog")
  292.     Set C.CMDLGControl = CD
  293.     
  294.     C.Action = 1
  295.     zFileName = C.filename
  296.     If Len(zFileName) Then
  297.         Me.Caption = "Notepad - " & zFileName
  298.         zRealFile = C.ShortFileName
  299.         Open zRealFile For Binary As #1
  300.         Text1.Text = Input(LOF(1), 1)
  301.         Close
  302.     End If
  303. End Sub
  304.  
  305. Private Sub mnuFileSaveAs_Click()
  306.     Dim C As Object
  307.     
  308.     Set C = CreateObject("cmdlgX.CommonDialog")
  309.     Set C.CMDLGControl = CD
  310.     
  311.     C.Action = 2
  312.     zFileName = C.FileTitle
  313.     If Len(zFileName) Then
  314.         Me.Caption = "Notepad - " & zFileName
  315.         zRealFile = C.ShortFileName
  316.         Open zRealFile For Binary As #1
  317.         Put #1, , Text1.Text
  318.         Close
  319.     End If
  320.  
  321. End Sub
  322.