vbAccelerator - Contents of code file: frmUnzip.frm
VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form frmUnzip
AutoRedraw = -1 'True
Caption = "Unzip Tester"
ClientHeight = 5940
ClientLeft = 3990
ClientTop = 2370
ClientWidth = 8685
BeginProperty Font
Name = "Tahoma"
Size = 8.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Icon = "frmUnzip.frx":0000
LinkTopic = "VBUnzFrm"
ScaleHeight = 5940
ScaleWidth = 8685
Begin MSComctlLib.ImageList ilsIcons16
Left = 7800
Top = 4200
_ExtentX = 1005
_ExtentY = 1005
BackColor = -2147483643
ImageWidth = 16
ImageHeight = 16
MaskColor = 12632256
_Version = 393216
BeginProperty Images {2C247F25-8591-11D1-B16A-00C0F0283628}
NumListImages = 2
BeginProperty ListImage1 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "frmUnzip.frx":1272
Key = "DEFAULT"
EndProperty
BeginProperty ListImage2 {2C247F27-8591-11D1-B16A-00C0F0283628}
Picture = "frmUnzip.frx":13CC
Key = "OPEN"
EndProperty
EndProperty
End
Begin MSComctlLib.ListView lvwZip
Height = 5115
Left = 60
TabIndex = 5
Top = 420
Width = 7455
_ExtentX = 13150
_ExtentY = 9022
View = 3
MultiSelect = -1 'True
LabelWrap = -1 'True
HideSelection = -1 'True
_Version = 393217
ForeColor = -2147483640
BackColor = -2147483643
BorderStyle = 1
Appearance = 1
NumItems = 0
End
Begin MSComctlLib.StatusBar sbrMain
Align = 2 'Align Bottom
Height = 255
Left = 0
TabIndex = 4
Top = 5685
Width = 8685
_ExtentX = 15319
_ExtentY = 450
_Version = 393216
BeginProperty Panels {8E3867A5-8586-11D1-B16A-00C0F0283628}
NumPanels = 1
BeginProperty Panel1 {8E3867AB-8586-11D1-B16A-00C0F0283628}
AutoSize = 1
Object.Width = 14790
EndProperty
EndProperty
End
Begin VB.CommandButton cmdInvert
Caption = "&Invert"
Enabled = 0 'False
Height = 315
Left = 3660
TabIndex = 3
Top = 60
Width = 1155
End
Begin VB.CommandButton cmdAll
Caption = "&Select All"
Enabled = 0 'False
Height = 315
Left = 2460
TabIndex = 2
Top = 60
Width = 1155
End
Begin VB.CommandButton cmdExtract
Caption = "&Extract..."
Enabled = 0 'False
Height = 315
Left = 1260
TabIndex = 1
Top = 60
Width = 1155
End
Begin VB.CommandButton cmdOpen
Caption = "&Open..."
Height = 315
Left = 60
TabIndex = 0
Top = 60
Width = 1155
End
Begin VB.Menu mnuFileTOP
Caption = "&File"
Begin VB.Menu mnuFile
Caption = "&Open..."
Index = 0
Shortcut = ^O
End
Begin VB.Menu mnuFile
Caption = "Ex&tract..."
Enabled = 0 'False
Index = 1
Shortcut = {F5}
End
Begin VB.Menu mnuFile
Caption = "-"
Index = 2
Visible = 0 'False
End
Begin VB.Menu mnuFile
Caption = ""
Index = 3
Visible = 0 'False
End
Begin VB.Menu mnuFile
Caption = ""
Index = 4
Visible = 0 'False
End
Begin VB.Menu mnuFile
Caption = ""
Index = 5
Visible = 0 'False
End
Begin VB.Menu mnuFile
Caption = ""
Index = 6
Visible = 0 'False
End
Begin VB.Menu mnuFile
Caption = "-"
Index = 7
End
Begin VB.Menu mnuFile
Caption = "&Close"
Index = 8
End
End
Begin VB.Menu mnuEditTOP
Caption = "&Edit"
Begin VB.Menu mnuEdit
Caption = "&Select All"
Enabled = 0 'False
Index = 0
Shortcut = ^A
End
Begin VB.Menu mnuEdit
Caption = "&Invert Selection"
Enabled = 0 'False
Index = 1
End
End
Begin VB.Menu mnuHelpTOP
Caption = "&Help"
Begin VB.Menu mnuHelp
Caption = "&About..."
Index = 0
End
End
End
Attribute VB_Name = "frmUnzip"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'
===============================================================================
=======
' Name: vbAccelerator Unzip sample
' Author: Steve McMahon (steve@vbaccelerator.com)
' Date: 1 December 2000
'
' Requires: Info-ZIP's Unzip32.DLL v5.40, renamed to vbuzip10.dll
' mUnzip.bas
'
' Copyright 2000 Steve McMahon for vbAccelerator
'
-------------------------------------------------------------------------------
-------
' Visit vbAccelerator - advanced free source code for VB programmers
' http://vbaccelerator.com
'
-------------------------------------------------------------------------------
-------
'
' This sample uses decompression code by the Info-ZIP group. The
' original Info-Zip sources are freely available from their website
' at
' http://www.cdrcom.com/pubs/infozip/
'
' Please ensure you visit the site and read their free source licensing
' information and requirements before using their code in your own
' application.
'
'
===============================================================================
=======
Private WithEvents m_cUnzip As cUnzip
Attribute m_cUnzip.VB_VarHelpID = -1
Private m_cExtractToMRU As cMRU
Private m_cZipMRU As cMRU
Private m_sBaseKey As String
Private Function pOpen(ByVal sFIle As String) As Boolean
Dim i As Long
Dim sIcon As String
Dim itmX As ListItem
lvwZip.ListItems.Clear
' Get the file directory:
m_cUnzip.ZipFile = sFIle
m_cUnzip.Directory
If m_cUnzip.FileCount > 0 Then
m_cZipMRU.Add sFIle
pShowOpenMRU
End If
pEnableControls
' Display it in the ListView:
For i = 1 To m_cUnzip.FileCount
sIcon = AddIconToImageList(m_cUnzip.Filename(i), ilsIcons16, "DEFAULT")
sFIle = m_cUnzip.Filename(i)
If m_cUnzip.FileEncrypted(i) Then
' the way WinZip represents it. I guess a nicer way would be
' to use overlay icons/state icons and/or colour changes in the LV
sFIle = sFIle & "+"
End If
Set itmX = lvwZip.ListItems.Add(, "File" & i, sFIle, , sIcon)
itmX.SubItems(1) = m_cUnzip.FileSize(i)
itmX.SubItems(2) = Format$(m_cUnzip.FileDate(i), "short date") & " " &
Format$(m_cUnzip.FileDate(i), "short time")
itmX.SubItems(3) = m_cUnzip.FilePackedSize(i)
itmX.SubItems(4) = m_cUnzip.FileDirectory(i)
Next i
End Function
Private Function FileExists(ByVal sFIle As String) As Boolean
Dim s As String
On Error Resume Next
s = Dir(sFIle)
FileExists = ((s <> "") And (Err.Number = 0))
End Function
Private Function KillFileIfExists(ByVal sFIle As String) As Boolean
On Error Resume Next
Kill sFIle
KillFileIfExists = ((Err.Number = 0) Or (Err.Number = 53))
End Function
Private Sub pEnableControls()
Dim bS As Boolean
bS = (m_cUnzip.FileCount > 0)
cmdExtract.Enabled = bS
mnuFile(1).Enabled = bS
cmdAll.Enabled = bS
mnuEdit(0).Enabled = bS
cmdInvert.Enabled = bS
mnuEdit(1).Enabled = bS
End Sub
Private Sub pShowOpenMRU()
Dim i As Long
Dim iC As Long
If m_cZipMRU.Count > 0 Then
mnuFile(2).Visible = True
iC = m_cZipMRU.Count
If iC > 4 Then iC = 4
For i = 1 To iC
mnuFile(i + 2).Visible = True
mnuFile(i + 2).Caption = "&" & i & ") " & m_cZipMRU.Item(i)
mnuFile(i + 2).Tag = m_cZipMRU.Item(i)
If i = 1 Then
mnuFile(i + 2).Checked = (m_cUnzip.FileCount > 0)
End If
Next i
End If
End Sub
Private Function pbLoadOptions(ByRef hKey As ERegistryClassConstants) As Boolean
On Error Resume Next
Dim cR As New cRegistry
cR.ClassKey = hKey
cR.SectionKey = m_sBaseKey
If cR.KeyExists Then
cR.ValueType = REG_DWORD
cR.ValueKey = "UseFolderNames"
m_cUnzip.UseFolderNames = Not (cR.Value = 0)
cR.ValueKey = "OverwritePrompt"
m_cUnzip.PromptToOverwrite = Not (cR.Value = 0)
cR.SectionKey = m_sBaseKey & "\ExtractToMRU"
If cR.KeyExists Then
m_cExtractToMRU.DeSerialise cR
cR.SectionKey = m_sBaseKey & "\FileOpenMRU"
If cR.KeyExists Then
m_cZipMRU.DeSerialise cR
pbLoadOptions = True
pShowOpenMRU
End If
End If
End If
End Function
Private Sub pSaveOptions(ByVal hKey As ERegistryClassConstants)
Dim cR As New cRegistry
cR.ClassKey = hKey
cR.SectionKey = m_sBaseKey & "\ExtractToMRU"
m_cExtractToMRU.Serialise cR
cR.SectionKey = m_sBaseKey & "\FileOpenMRU"
m_cZipMRU.Serialise cR
cR.ValueType = REG_DWORD
cR.SectionKey = m_sBaseKey
cR.ValueKey = "UseFolderNames"
cR.Value = Abs(m_cUnzip.UseFolderNames)
cR.ValueKey = "OverwritePrompt"
cR.Value = Abs(m_cUnzip.PromptToOverwrite)
End Sub
Private Sub cmdAll_Click()
Dim itmX As ListItem
For Each itmX In lvwZip.ListItems
itmX.Selected = True
Next itmX
End Sub
Private Sub cmdExtract_Click()
Dim itmX As ListItem
Dim bSel As Boolean
Dim sFolder As String
Dim iItem As Long
' Choose Selected items:
For Each itmX In lvwZip.ListItems
iItem = CLng(Mid$(itmX.Key, 5))
m_cUnzip.FileSelected(iItem) = (itmX.Selected)
If itmX.Selected Then
bSel = True
End If
Next itmX
' If none selected do entire zip:
If Not bSel Then
For iItem = 1 To m_cUnzip.FileCount
m_cUnzip.FileSelected(iItem) = True
Next iItem
End If
' Get extract folder and do it:
sFolder = GetFolder()
If (sFolder <> "") Then
m_cExtractToMRU.Add sFolder
m_cUnzip.UnzipFolder = sFolder
m_cUnzip.Unzip
End If
End Sub
Private Function GetFolder() As String
Dim i As Long
Me.Enabled = False
Dim fC As New frmExtractTo
fC.LoadMRU m_cExtractToMRU
Dim c As New cCaptureBF
With c
With .Browse
.hWndOwner = Me.hwnd
If m_cExtractToMRU.Count > 0 Then
.InitialDir = m_cExtractToMRU.Item(1)
Else
.InitialDir = App.Path
End If
.FileSystemOnly = True
.Title = ""
End With
.Show fC
End With
If Not fC.Cancelled Then
' Add selected location to the extract dir:
m_cExtractToMRU.Add fC.SelectedFolder
' Store the selected options:
m_cUnzip.PromptToOverwrite = fC.OverwritePrompt
m_cUnzip.UseFolderNames = fC.UseFolderNames
GetFolder = fC.SelectedFolder
End If
End Function
Private Sub cmdInvert_Click()
Dim itmX As ListItem
For Each itmX In lvwZip.ListItems
itmX.Selected = Not (itmX.Selected)
Next itmX
End Sub
Private Sub cmdOpen_Click()
Dim cc As New GCommonDialog
Dim sFIle As String
If (cc.VBGetOpenFileName(sFIle, , , , , , "Zip Files (*.ZIP)|*.ZIP|All Files
(*.*)|*.*", , , "Choose Zip FIle to Open", "ZIP", Me.hwnd)) Then
pOpen sFIle
End If
End Sub
Private Sub Form_Load()
' Apologies for the old school interface in this
' sample :)
' Pls feel welcome to add a real toolbar, add sorting
' to the ListView and so forth...
' Set up ListView
With lvwZip
.SmallIcons = ilsIcons16
With .ColumnHeaders
.Add , , "Filename", 160 * Screen.TwipsPerPixelX
.Add , , "Size", 32 * Screen.TwipsPerPixelX
.Add , , "Date", 96 * Screen.TwipsPerPixelX
.Add , , "Packed", 32 * Screen.TwipsPerPixelX
.Add , , "Folder", 160 * Screen.TwipsPerPixelX
End With
End With
' Set up unzipping object
Set m_cUnzip = New cUnzip
' Set up Extract To MRU:
Set m_cExtractToMRU = New cMRU
' Set up Zip FIles MRU:
Set m_cZipMRU = New cMRU
m_sBaseKey = "SOFTWARE\vbAccelerator\VBUnZip"
If Not pbLoadOptions(HKEY_LOCAL_MACHINE) Then
pbLoadOptions HKEY_CURRENT_USER
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
pSaveOptions HKEY_CURRENT_USER
pSaveOptions HKEY_LOCAL_MACHINE
End Sub
Private Sub Form_Resize()
On Error Resume Next
lvwZip.Move lvwZip.Left, lvwZip.Top, Me.ScaleWidth - lvwZip.Left * 2,
Me.ScaleHeight - lvwZip.Top - sbrMain.Height - 4 * Screen.TwipsPerPixelY
End Sub
Private Sub m_cUnzip_Cancel(ByVal sMsg As String, bCancel As Boolean)
Debug.Print "Cancel:" & sMsg
End Sub
Private Sub m_cUnzip_OverWritePrompt(ByVal sFIle As String, eResponse As
EUZOverWriteResponse)
'Debug.Print "Overwrite request: " & sFIle
Dim fO As New frmOverwrite
With fO
.TheCaption = "Do you want to overwrite the existing copy of " & sFIle &
"?"
fO.Show vbModal, Me
If fO.Response = vbYes Then
If fO.ApplyToAll Then
eResponse = euzOverwriteAllFiles
Else
eResponse = euzOverwriteThisFile
End If
ElseIf fO.Response = vbNo Then
If fO.ApplyToAll Then
eResponse = euzOverwriteNone
Else
eResponse = euzDoNotOverwrite
End If
Else
' Hmmm...
eResponse = euzOverwriteNone
End If
End With
End Sub
Private Sub m_cUnzip_PasswordRequest(sPassword As String, bCancel As Boolean)
Dim fP As New frmPassword
With fP
.Show vbModal, Me
If Not fP.Cancelled Then
sPassword = fP.Password
Else
bCancel = True
End If
End With
End Sub
Private Sub m_cUnzip_Progress(ByVal lCount As Long, ByVal sMsg As String)
sbrMain.Panels(1).Text = sMsg
End Sub
Private Sub mnuEdit_Click(Index As Integer)
Select Case Index
Case 0
cmdAll_Click
Case 1
cmdInvert_Click
End Select
End Sub
Private Sub mnuFile_Click(Index As Integer)
Select Case Index
Case 0
cmdOpen_Click
Case 1
cmdExtract_Click
Case 8
Unload Me
Case Else
If mnuFile(Index).Tag <> "" Then
pOpen mnuFile(Index).Tag
End If
End Select
End Sub
Private Sub mnuHelp_Click(Index As Integer)
MsgBox "vbAccelerator UnZip Demonstration." & vbCrLf & vbCrLf & "This sample
uses decompression code by the Info-ZIP group. The original Info-Zip
sources are freely available from their website at
http://www.cdrcom.com/pubs/infozip/", vbInformation
End Sub
|
|