📄 main.pas
字号:
Procedure UnZIP1Progress(Sender: TObject; ByFile, ByArchive: Byte);
Procedure UnZIP1RenameFile(Sender: TObject; FileName: String;
Var NewFileName: String);
Procedure Zip1Activate(Sender: TObject);
Procedure Zip1Begin(Sender: TObject; FName: String; Count: Integer;
Var Extract: Boolean);
{$IFDEF DEL4_OR_HIGHER}
Procedure Zip1ClearDisk(Sender: TObject; Drive: String; RequiredSpace,
FreeSpace, TotalSpace: Int64; Var Cancel: Boolean);
{$ELSE}
Procedure Zip1ClearDisk(Sender: TObject; Drive: String; RequiredSpace,
FreeSpace, TotalSpace: Comp; Var Cancel: Boolean);
{$ENDIF DEL4_OR_HIGHER}
Procedure Zip1Deactivate(Sender: TObject);
Procedure Zip1DiskSpanFileExists(Sender: TObject; FileName: String;
FileDate: TDateTime; Var OverwriteMode: TOverwriteMode);
Procedure Zip1DiskWriteProtectErr(Sender: TObject; Var Abort: Boolean);
Procedure Zip1DiskInDrvErr(Sender: TObject; Var Abort: Boolean);
Procedure Zip1DeleteFile(Sender: TObject; FileName: String; Count,
MaxCount: Integer);
Procedure Zip1End(Sender: TObject; FN: String; CRC_PASS: Boolean);
Procedure Zip1ExcludeFile(Sender: TObject; FileName: String);
Procedure Zip1FileExists(Sender: TObject; Filename: String; FileDate: TDateTime;
Var OverwriteMode: TOverwriteMode);
Procedure Zip1FileScanStatus(Sender: TObject; FileName: String;
FilesCount: Integer; FilesSize: Int64);
Procedure Zip1InsertDisk(Sender: TObject; VolumeName: String;
Var Cancel: Boolean);
Procedure Zip1NonWriteableArchive(Sender: TObject; ArchiveFile: String;
Var WriteToFile: Boolean);
Procedure Zip1RecurseDir(Sender: TObject; Directory: String);
Procedure Zip1RenameDupeFile(Sender: TObject; FileName: String;
Var NewFileName: String; Var Rename: Boolean);
Procedure Zip1ReplaceFile(Sender: TObject; FileName,
NewFileName: String; Date, NewDate: TDateTime; FileSize,
NewFileSize: Int64; Attr, NewAttr: Integer; Var Replace: Boolean);
Procedure Zip1TmpFileMoveBegin(Sender: TObject; archive,
TempFileName: String; Var Cancel: Boolean);
Procedure Zip1TmpFileProgress(Sender: TObject; ByFile, ByArchive: Byte);
Procedure Zip1TmpFileMoveEnd(Sender: TObject);
Procedure ZipSplitter1SplitDeleteVolume(Sender: TObject; VolumeName:
String; Var DeleteToRecycleBin: Boolean);
Procedure ZipSplitter1SplitNewVolume(Sender: TObject; Index: Cardinal;
NewVolumeName: String);
Procedure ZipSplitter1SplitBegin(Sender: TObject; archive, TempFileName:
String; Var Cancel: Boolean);
Procedure ZipTV1Activate(Sender: TObject);
Procedure ZipTV1CorruptZipHeader(Sender: TObject; HeadFlag:
THeaderTypeState; Var Cancel: Boolean);
Procedure ZipTV1Deactivate(Sender: TObject);
Procedure ZipTV1Error(Sender: TObject; FileName, ExtendedMsg,
VolumeID: String; ECode: Integer);
Procedure ZipTV1GetZipFirstDisk(Sender: TObject; Var Cancel: Boolean);
Procedure ZipTV1GetZipNextDisk(Sender: TObject; VolumeName: String;
Var Cancel: Boolean);
Procedure ZipTV1GetZipLastDisk(Sender: TObject; Var Cancel: Boolean);
Procedure ZipTV1NextVolume(Sender: TObject; Var VolumeName: String;
VolumeID: Integer; FExists: Boolean; Var Cancel: Boolean);
Procedure ZipTV1Read(Sender: TObject; Offset, Filenum: Integer);
Procedure ZipTV1ReadFile(Sender: TObject; FileName: String);
Procedure ZipTV1Totals(Sender: TObject; UnpackSize, PackSize: Int64;
Ratio, NumFiles: Integer);
Procedure ZipView1DblClick(Sender: TObject);
Procedure ZipView1Click(Sender: TObject; Row, Col: Integer);
Procedure ZipView1HeaderClick(HeaderControl: THeaderControl;
Section: THeaderSection);
Procedure ZipView1SortCompare(Sender: TObject; Var Item1, Item2: String;
Column: Integer);
Procedure Edit1KeyPress(Sender: TObject; Var Key: Char);
Procedure ComboBox1Click(Sender: TObject);
Procedure FormClose(Sender: TObject; Var Action: TCloseAction);
Procedure FormShow(Sender: TObject);
Procedure ComboBox1KeyPress(Sender: TObject; Var Key: Char);
Procedure RegArchive1Association(Sender: TObject; Appname: String;
Var Cancel: Boolean);
Procedure BitBtn1Click(Sender: TObject);
Procedure BitBtn2Click(Sender: TObject);
Procedure BitBtn3Click(Sender: TObject);
Procedure BitBtn4Click(Sender: TObject);
Procedure BitBtn5Click(Sender: TObject);
Procedure BitBtn6Click(Sender: TObject);
Procedure CheckBox1Click(Sender: TObject);
Private
{$IFDEF ListView}
fSortColumn: Integer;
fSortForward: Boolean;
{$ENDIF ListView}
Public
End;
Var
frmMain: TfrmMain;
ExtractComponent: TUnBase; (* Base class for decompression components *)
CompressComponent: TCompBASE; (* Base class for compression components *)
DoCancel: TSetCancel; (* Variable to point to current component's Cancel method *)
Implementation
Uses
Unit1, (* frmAddFiles *)
Unit2, (* frmExtract *)
Unit3, (* frmOverwrite *)
Unit4, (* frmUUEncode *)
Unit5, (* frmErrorMges *)
Unit6, (* frmRunFile *)
Unit7, (* frmEditComments *)
Unit8, (* frmTestArchive *)
Unit9, (* frmComment *)
Unit10, (* frmInput *)
Unit11, (* frmSplitArchive *)
ztvCrypt,
ztvStreams,
ztvConsts;
Const
ZipTVDemoKey = 'Software\Visual Developer\Delphi By Design\ZipTVDemo';
Const
(* Column Headers *)
COLUMN_FILENAME = 0;
COLUMN_DATETIME = 1;
COLUMN_PACKED = 2;
COLUMN_UNPACKED = 3;
COLUMN_RATIO = 4;
COLUMN_METHOD = 5;
COLUMN_ATTR = 6;
COLUMN_FOLDER = 7;
COLUMN_FILETYPE = 8;
COLUMN_CRC = 9;
COLUMN_OFFSET = 10;
COLUMN_ENCRYPTED = 11;
COLUMN_VOLUMENAME = 12;
COLUMN_COMMENT = 13;
Const
TOTALS = 0;
Selected = 1;
SELECTALL = 2;
{$R *.DFM}
{$R Main.RES}
//-------------------------------------------------------------
Procedure TfrmMain.ApplicationBusy;
Begin
Application.ProcessMessages();
{$IFDEF ListView}
ListView1.Cursor := crHourGlass;
ListView1.Items.BeginUpdate();
{$ELSE}
ZipView1.Cursor := crHourGlass;
ZipView1.Items.BeginUpdate();
{$ENDIF ListView}
SetLedColor(clRed);
End;
//-------------------------------------------------------------
Procedure TfrmMain.ApplicationWaiting;
Begin
{$IFDEF ListView}
ListView1.Items.EndUpdate();
ListView1.Cursor := crDefault;
{$ELSE}
ZipView1.Items.EndUpdate();
ZipView1.Cursor := crDefault;
{$ENDIF ListView}
SetLedColor(clGreen);
End;
//-------------------------------------------------------------
(* Menu - File/Enable & File/Disable *)
Procedure TfrmMain.EnableMenus;
Var
CommentSupported: Boolean;
CompressSupported: Boolean;
DecompressSupported: Boolean;
ValidationSupported: Boolean;
Begin
CommentSupported := ZipTV1.IsCommentEditable(ZipTV1.ArcType);
CompressSupported := ZipTV1.IsArcCompressable(ZipTV1.ArcType);
DecompressSupported := ZipTV1.IsArcDecompressable(ZipTV1.ArcType);
ValidationSupported := ZipTV1.IsArcVerifyable(ZipTV1.ArcType);
(* Currently can't add files to a CAB archive... only create new *)
If Not ZipTV1.IsArcValid(ZipTV1.ArcType) Then
Begin
mnuAction1.Visible := False; // action menu
mnuClose1.Enabled := False; // close menu
mnuSaveAs1.Enabled := False; // saveas menu
mnuSort1.Enabled := False; // sort menu
BitBtn3.Enabled := False; // add button
BitBtn4.Enabled := False; // extract button
BitBtn5.Enabled := False; // view button
BitBtn6.Enabled := False; // test button
End
Else
Begin
mnuAction1.Visible := True; // action menu
mnuClose1.Enabled := True; // close menu
mnuSaveAs1.Enabled := True; // saveas menu
mnuSort1.Enabled := True; // sort menu
// add button
BitBtn3.Enabled := CompressSupported And (Not (ZipTV1.ArcType = atCab));
BitBtn4.Enabled := DecompressSupported; // extract button
BitBtn5.Enabled := DecompressSupported; // view button
BitBtn6.Enabled := ValidationSupported; // test button
End;
mnuDelete1.Enabled := CompressSupported And (Not (ZipTV1.ArcType = atCab));
mnuDelete2.Enabled := mnuDelete1.Enabled; //popup menu
mnuExtract1.Enabled := DecompressSupported;
mnuAddFiles1.Enabled := CompressSupported And (Not (ZipTV1.ArcType = atCab));
mnuAddFiles2.Enabled := mnuAddFiles1.Enabled; //popup menu
mnuEditComment1.Enabled := CommentSupported;
mnuEditComment2.Enabled := CommentSupported; //popup menu
mnuTestArchive1.Enabled := ValidationSupported;
mnuTestArchive2.Enabled := ValidationSupported; //popup menu
End;
//-------------------------------------------------------------
Procedure TfrmMain.DisplayFile(FileName: String);
Var
ComboBoxIndex: Integer;
// sTemp : String;
Begin
SetCurrentDir(ExtractFileDir(FileName));
ZipTV1.FileSpec.Clear();
If Edit1.Text <> '' Then
ZipTV1.FileSpec.Add(Edit1.Text)
Else
ZipTV1.FileSpec.Add('*.*');
ZipTV1.RecurseDirs := cbRecurseDirs.Checked;
RefreshList(FileName);
mnuClose1.Enabled := True;
If (ZipTV1.IsArcValid(ZipTV1.ArcType)) And (ZipTV1.FileSpec.Count > 0) Then
Begin
ComboBoxIndex := ComboBox1.Items.IndexOf(ZipTV1.ArchiveFile);
If ComboBoxIndex > -1 Then
ComboBox1.Items.Delete(ComboBoxIndex);
ComboBox1.Items.Insert(0, LowerCase(ZipTV1.ArchiveFile));
ComboBox1.ItemIndex := 0;
Caption := ZipTV1.ArchiveFile;
End
Else
Caption := '';
End;
//-------------------------------------------------------------
(* Menu - File/Exit *)
Procedure TfrmMain.mnuExit1Click(Sender: TObject);
Begin
Close();
End;
//-------------------------------------------------------------
(* Menu - File/Close *)
Procedure TfrmMain.mnuClose1Click(Sender: TObject);
Begin
ZipTV1.ArchiveFile := '';
ApplicationBusy();
{$IFDEF ListView}
ListView1.Items.Clear();
{$ELSE}
ZipView1.Clear();
{$ENDIF ListView}
ApplicationWaiting();
Caption := 'ZipTV Components demo...';
StatusBar1.SimplePanel := True;
ComboBox1.ItemIndex := -1;
EnableMenus();
End;
//-------------------------------------------------------------
(* Menu - Action/Delete selected item *)
Procedure TfrmMain.mnuDelete1Click(Sender: TObject);
Var
i: Integer;
HoldFileSpec: TStrings; //restore original filespec property
FilesDeleted: Integer;
Begin
{$IFDEF ListView}
If (ListView1.Selected <> Nil) And (ZipTV1.ArchiveFile <> '') Then
{$ELSE}
If (ZipView1.SelCount > 0) And (ZipTV1.ArchiveFile <> '') Then
{$ENDIF ListView}
Begin
If MessageDlg('Delete selected file(s)?',
mtConfirmation,
[mbYes, mbNo],
0) = mrNo Then
Exit;
(* DefineCompressComponent is a function defined in this module *)
If Not DefineCompressComponent() Then
Exit;
{$IFDEF ListView}
ListView1.Cursor := crHourGlass;
{$ELSE}
ZipView1.Cursor := crHourGlass;
{$ENDIF ListView}
CompressComponent.ArchiveFile := ZipTV1.ArchiveFile;
HoldFileSpec := TStringList.Create;
HoldFileSpec.Assign(CompressComponent.FileSpec);
Try
CompressComponent.FileSpec.Clear();
CompressComponent.ExcludeSpec.Clear();
(* Add all selected rows to filespec property *)
{$IFDEF ListView}
For i := 0 To Pred(ListView1.Items.Count) Do
If ListView1.Items[i].Selected Then
CompressComponent.FileSpec.Add(ListView1.Items[i].Caption);
{$ELSE}
For i := 0 To ZipView1.Items.Count - 1 Do
If ZipView1.Selected[i] Then
CompressComponent.FileSpec.Add(ZipView1.Column[i, COLUMN_FOLDER] +
ZipView1.Column[i, COLUMN_FILENAME]);
{$ENDIF ListView}
(* If we have any filespecs, process file deletion *)
CompressComponent.Switch := swDelete;
If CompressComponent.FileSpec.Count > 0 Then
Begin
(* Set local cancel pointer to correct component *)
DoCancel := CompressComponent.SetCancel;
FilesDeleted := CompressComponent.Compress();
If FilesDeleted > 0 Then
Begin
{$IFDEF ListView}
//...ListView can't delete rows
{$ELSE}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -