📄 unit1.pas
字号:
Unit Unit1;
Interface
{$I compiler.inc}
{$IFDEF DEL6_OR_HIGHER}
{$WARN UNIT_PLATFORM OFF}
{$ENDIF}
Uses
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
FileCtrl,
ComCtrls,
Err_Msgs,
ExtCtrls,
ztvBase,
ztvZipSearch,
ztvTurboSearch,
Buttons,
ztvRegister;
Type
TForm1 = Class(TForm)
TurboSearch1: TTurboSearch;
OpenDialog1: TOpenDialog;
TreeView1: TTreeView;
ComboBox1: TComboBox;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Panel1: TPanel;
Panel2: TPanel;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
ckbArchive: TCheckBox;
ckbHidden: TCheckBox;
ckbReadOnly: TCheckBox;
ckbSysFile: TCheckBox;
ckbZeroAttr: TCheckBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
StatusBar1: TStatusBar;
StatusBar2: TStatusBar;
ProgressBar1: TProgressBar;
Procedure ApplicationBusy;
Procedure ApplicationWaiting;
Procedure BitBtn1Click(Sender: TObject);
Procedure BitBtn2Click(Sender: TObject);
Procedure Button1Click(Sender: TObject);
Procedure Button2Click(Sender: TObject);
Procedure FormActivate(Sender: TObject);
Procedure Panel5Click(Sender: TObject);
Procedure Panel5MouseMove(Sender: TObject; Shift: TShiftState; x, y: Integer);
Procedure SetFileAttributes(Sender: TObject);
Procedure TurboSearch1Activate(Sender: TObject);
Procedure TurboSearch1Deactivate(Sender: TObject);
Procedure TurboSearch1ElapsedTime(Sender: TObject; ElapsedTime: Single);
Procedure TurboSearch1Error(Sender: TObject; FileName, ExtendedMsg,
VolumeID: String; ECode: Integer);
Procedure TurboSearch1Finish(Sender: TObject; files, Matches, Bytes: Integer);
Procedure TurboSearch1GetPassword(Sender: TObject; FileName: String; Var Password:
String; Var TryAgain: Boolean);
Procedure TurboSearch1MatchInFile(Sender: TObject; SearchFile: String);
Procedure TurboSearch1Match(Sender: TObject; FileName: String; Offset: Integer);
Procedure TurboSearch1NextVolume(Sender: TObject; Var VolumeName: String;
VolumeID: Integer; FExists: Boolean; Var Cancel: Boolean);
Procedure TurboSearch1Progress(Sender: TObject; ByFile, ByArchive: Byte);
Procedure TurboSearch1SearchBegin(Sender: TObject; FileName: String;
Count: Integer; Var SearchThisFile: Boolean);
Procedure TurboSearch1SearchEnd(Sender: TObject; matches: Integer);
//Procedure TurboSearch1NestedTarFile(Sender: TObject; FileName: String;
// Var doUnTar: Boolean);
Private
Public
End;
Var
Form1: TForm1;
Implementation
{$R *.DFM}
Uses
ztvConsts,
Unit2,
Unit3;
Var
TotalTime: Real; (* search time (seconds) *)
RootNode: TTreeNode;
//-------------------------------------------------------------
(* Form - OnActivate event *)
Procedure TForm1.FormActivate(Sender: TObject);
Begin
(* Assign visual form objects from TurboSearch1's properties *)
{$ifdef debug_proj}
//Edit1.Text := 'd:\3\arj\v250\encrypt.arj';
Edit1.Text := 'd:\3\zip\bug\damaged.zip';
Edit2.Text := 'procedure';
Edit3.Text := '*.*';
{$else}
Edit1.Text := TurboSearch1.ArchiveFile;
Edit2.Text := TurboSearch1.SearchText;
If TurboSearch1.FileSpec.Count > 0 Then
Edit3.Text := TurboSearch1.FileSpec[0];
{$endif debug_proj}
Edit4.Text := IntToStr(TurboSearch1.OffsetBegin);
Edit5.Text := IntToStr(TurboSearch1.OffsetEnd);
ComboBox1.ItemIndex := Ord(TurboSearch1.SearchMode);
CheckBox1.Checked := (stDecompress In TurboSearch1.SearchType);
CheckBox2.Checked := (stNonArchive In TurboSearch1.SearchType);
{$ifdef debug_proj}
CheckBox3.Checked := True;
{$else}
CheckBox3.Checked := TurboSearch1.RecurseDirs;
{$endif debug_proj}
CheckBox4.Checked := TurboSearch1.CaseSensitive;
ckbArchive.Checked := (fsArchive In TurboSearch1.Attributes);
ckbReadOnly.Checked := (fsReadOnly In TurboSearch1.Attributes);
ckbHidden.Checked := (fsHidden In TurboSearch1.Attributes);
ckbSysFile.Checked := (fsSysFile In TurboSearch1.Attributes);
ckbZeroAttr.Checked := (fsZeroAttr In TurboSearch1.Attributes);
End;
//-------------------------------------------------------------
(* "Search these files" button *)
Procedure TForm1.Button1Click(Sender: TObject);
Begin
TreeView1.Items.Clear;
Form3.Dump.Lines.Clear();
TotalTime := 0.0;
ApplicationBusy();
Try
(******** Set properties from forms visual controls *********)
(* Search all files in the directory.
This will include RawData searches
for normal files and decompression
searches for supported archives.
Unsupported archives are searched
as RawData *)
If Edit3.Text <> '' Then
Begin
TurboSearch1.FileSpec.Clear();
TurboSearch1.FileSpec.Add(Edit3.Text);
End
Else
Exit;
(************ *************** *************** *************)
TurboSearch1.ArchiveFile := Edit1.Text;
TurboSearch1.SetSearchType(stDecompress, CheckBox1.Checked);
TurboSearch1.SetSearchType(stNonArchive, CheckBox2.Checked);
TurboSearch1.RecurseDirs := CheckBox3.Checked;
TurboSearch1.CaseSensitive := CheckBox4.Checked;
TurboSearch1.Cancel := False;
// Mode: smAsc, smBin, smDec, smHex, smOct
TurboSearch1.SearchMode := TztvSearchMode(ComboBox1.ItemIndex);
// string to search
TurboSearch1.SearchText := Edit2.Text;
// Set beginning/ending search offsets
TurboSearch1.OffsetBegin := StrToInt(Edit4.Text);
TurboSearch1.OffsetEnd := StrToInt(Edit5.Text);
TurboSearch1.Search; // Activate the search
Finally
ApplicationWaiting();
If Form3.Dump.Lines.Count > 0 Then
Form3.ShowModal();
End;
End;
//-------------------------------------------------------------
Procedure TForm1.ApplicationBusy;
Begin
Panel1.Cursor := crHourGlass;
End;
//-------------------------------------------------------------
Procedure TForm1.ApplicationWaiting;
Begin
Panel1.Cursor := crDefault;
End;
//-------------------------------------------------------------
(* The cbkArchive, cbkSysFile, cbkHidden, cbkReadOnly, cbkZeroAttr checkboxes *)
(* OnClick events reference this procedure *)
Procedure TForm1.SetFileAttributes(Sender: TObject);
Begin
TurboSearch1.SetAttribute(fsZeroAttr, ckbZeroAttr.Checked);
TurboSearch1.SetAttribute(fsArchive, ckbArchive.Checked);
TurboSearch1.SetAttribute(fsReadOnly, ckbReadOnly.Checked);
TurboSearch1.SetAttribute(fsHidden, ckbHidden.Checked);
TurboSearch1.SetAttribute(fsSysFile, ckbSysFile.Checked);
End;
//-------------------------------------------------------------
Procedure TForm1.Button2Click(Sender: TObject);
Begin
StatusBar1.SimpleText := 'Aborting...';
Close;
End;
//-------------------------------------------------------------
Procedure TForm1.TurboSearch1Activate(Sender: TObject);
Begin
StatusBar1.SimpleText := '';
StatusBar2.SimpleText := '';
Panel4.Visible := True;
End;
//-------------------------------------------------------------
Procedure TForm1.TurboSearch1Deactivate(Sender: TObject);
Begin
Panel4.Visible := False;
End;
//-------------------------------------------------------------
(* OnSearchBegin event *)
Procedure TForm1.TurboSearch1SearchBegin(Sender: TObject; FileName: String;
Count: Integer; Var SearchThisFile: Boolean);
Begin
If Not TurboSearch1.IsArcValid(TurboSearch1.ArcType) Then
StatusBar1.SimpleText := '';
//StatusBar2.SimpleText := MinimizeName(FileName, StatusBar2.Canvas, StatusBar2.Width);
StatusBar2.SimpleText := FileName;
End;
//-------------------------------------------------------------
Procedure TForm1.TurboSearch1SearchEnd(Sender: TObject; matches: Integer);
Begin
StatusBar2.SimpleText := '';
End;
//-------------------------------------------------------------
(* TurboSearch1 - OnError event
For a continous operation, write this information out to a file
instead of the current dialog display.
To use the dialog display, unrem the following code. *)
Procedure TForm1.TurboSearch1Error(Sender: TObject; FileName, ExtendedMsg,
VolumeID: String; ECode: Integer);
Begin
Form3.Dump.Lines.Add('*' + VolumeID);
Form3.Dump.Lines.Add(#9 + 'File: ' + FileName);
Form3.Dump.Lines.Add(#9 + 'Msg: ' + ExtendedMsg);
Form3.Dump.Lines.Add(#9 + 'Error# ' + IntToStr(ECode));
Form3.Dump.Lines.Add(#9 + LoadStr(ECode));
End;
//-------------------------------------------------------------
(* OnElapsedTime event - collect total time *)
Procedure TForm1.TurboSearch1ElapsedTime(Sender: TObject; ElapsedTime: Single);
Begin
TotalTime := ElapsedTime;
End;
//-------------------------------------------------------------
(* OnFinish event - activated when finished searching each file.
Collect total information *)
Procedure TForm1.TurboSearch1Finish(Sender: TObject; files, Matches, Bytes: Integer);
Begin
MessageDlg('Matches = ' + IntToStr(Matches) +
#13'Files Searched = ' + IntToStr(files) +
#13'Bytes Searched = ' + IntToStr(Bytes) +
#13#13 + Format('Seconds: %g', [TotalTime]),
mtInformation,
[mbOK],
0);
End;
//-------------------------------------------------------------
(* OnGetPassword event - enter the password for password
encrypted archives *)
Procedure TForm1.TurboSearch1GetPassword(Sender: TObject; FileName: String;
Var Password: String; Var TryAgain: Boolean);
Var
AF: String;
Begin
AF := MinimizeName(TTurboSearch(Sender).fVolumeName, Canvas, 200);
//StatusBar2.SimpleText := MinimizeName(FileName, StatusBar2.Canvas, StatusBar2.Width);
(* InputQuery is a Delphi function *)
If Not InputQuery(AF, 'Enter password', Password) Then
TryAgain := False;
End;
//-------------------------------------------------------------
(* OnNextVolume event *)
Procedure TForm1.TurboSearch1NextVolume(Sender: TObject; Var VolumeName: String;
VolumeID: Integer; FExists: Boolean; Var Cancel: Boolean);
Begin
// We're not processing multi-volume archives. To do so,
// see the OnNextVolume event in demos\MainDemo\MainDemo.dpr
Cancel := True;
End;
//-------------------------------------------------------------
(* OnFoundMatchInFile event
Activated once for each archive/disk-file a match was found in.
In this demo, we start a TreeView node with each new FileName. *)
Procedure TForm1.TurboSearch1MatchInFile(Sender: TObject; SearchFile: String);
Begin
StatusBar1.SimpleText := SearchFile;
//StatusBar1.SimpleText := MinimizeName(SearchFile, StatusBar1.Canvas,
// StatusBar1.Width);
RootNode := TreeView1.Items.Add(TreeView1.TopItem, SearchFile);
End;
//-------------------------------------------------------------
(* OnMatch event
Activated once for each archive/disk-file a match was found in.
In this demo, we don't use the Offset parameter. The offset
parameter returns the position in which the match was found. *)
Procedure TForm1.TurboSearch1Match(Sender: TObject; FileName: String; Offset: Integer);
Begin
TreeView1.Items.AddChild(RootNode, FileName);
End;
//-------------------------------------------------------------
(* Cancel button *)
Procedure TForm1.Panel5Click(Sender: TObject);
Begin
TurboSearch1.Cancel := True;
StatusBar1.SimpleText := 'Aborting...';
StatusBar1.Update();
End;
//-------------------------------------------------------------
(* Exclude Exts button *)
Procedure TForm1.BitBtn2Click(Sender: TObject);
Begin
Form2.Show;
End;
//-------------------------------------------------------------
Procedure TForm1.Panel5MouseMove(Sender: TObject; Shift: TShiftState; x, y: Integer);
Begin
Panel5.Cursor := crArrow;
End;
//-------------------------------------------------------------
(* File selection button *)
Procedure TForm1.BitBtn1Click(Sender: TObject);
Begin
OpenDialog1.Options := [ofHideReadOnly, ofFileMustExist, ofPathMustExist];
OpenDialog1.InitialDir := ExtractFilePath(Edit1.Text);
If OpenDialog1.Execute Then
Edit1.Text := OpenDialog1.FileName;
End;
//-------------------------------------------------------------
//Procedure TForm1.TurboSearch1NestedTarFile(Sender: TObject;
// FileName: String; Var doUnTar: Boolean);
//Begin
// doUnTar := True;
//End;
//-------------------------------------------------------------
Procedure TForm1.TurboSearch1Progress(Sender: TObject; ByFile,
ByArchive: Byte);
Begin
ProgressBar1.Position := ByArchive;
ProgressBar1.Update();
End;
//-------------------------------------------------------------
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -