📄 main.pas
字号:
ZipView1.DeleteSelected;
{$ENDIF ListView}
ShowMessage('Deleted : ' + IntToStr(FilesDeleted) + ' files');
End;
End;
Finally
CompressComponent.FileSpec.Assign(HoldFileSpec);
HoldFileSpec.Free();
End;
(* All files could have been deleted... if so, ArchiveFile no longer
(* exists. If not exist, clear the forms caption else refresh the list *)
If FileExists(ZipTV1.ArchiveFile) Then
//RefreshList( ZipTV1.ArchiveFile )
Else
Caption := '';
{$IFDEF ListView}
ListView1.Cursor := crDefault;
{$ELSE}
ZipView1.Cursor := crDefault;
{$ENDIF ListView}
End
Else
ShowMessage('No files selected to delete');
End;
//-------------------------------------------------------------
Function TfrmMain.RefreshList(FileName: String): Boolean;
Begin
Result := False;
ApplicationBusy();
Try
{$IFDEF ListView}
ListView1.Items.Clear();
{$ELSE}
ZipView1.Clear();
{$ENDIF ListView}
If FileName <> '' Then
Begin
Try
ZipTV1.ArchiveFile := FileName;
Finally
Result := ZipTV1.IsArcValid(ZipTV1.ArcType);
If Result Then
Begin
If ZipTV1.FileSpec.Count = 0 Then
ZipTV1.FileSpec.Add('*.*');
ZipTV1.TranslateOemChar := CheckBox1.Checked; // ...foreign language chars
(* Set local cancel pointer to correct component *)
DoCancel := ZipTV1.SetCancel;
// --------------
ZipTV1.Activate();
// --------------
End;
End;
EnableMenus();
DisplayTotals(TOTALS);
{$IFDEF ListView}
ListView1.SetFocus();
{$ELSE}
ZipView1.SetFocus();
{$ENDIF ListView}
End;
Finally
ApplicationWaiting();
End;
End;
//-------------------------------------------------------------
(* Menu Action/Refresh *)
Procedure TfrmMain.mnuRefresh1Click(Sender: TObject);
Begin
DisplayFile(ZipTV1.ArchiveFile);
End;
//-------------------------------------------------------------
(* Change colors of little light in corner of form *)
Procedure TfrmMain.SetLedColor(lColor: TColor);
Begin
With imgLed.Canvas Do
Begin
Brush.Color := lColor;
FloodFill(6, 6, Pixels[6, 6], fsSurface);
End;
pbxLed.Repaint;
End;
//-------------------------------------------------------------
(* Little light in right corner of form *)
Procedure TfrmMain.pbxLedPaint(Sender: TObject);
Begin
With Sender As TPaintBox Do
Canvas.Draw((Width - imgLed.Width) Div 2,
(Height - imgLed.Height) Div 2,
imgLed.Picture.Graphic);
End;
//-------------------------------------------------------------
(* Display totals in bottom status bar *)
Procedure TfrmMain.DisplayTotals(Which: Byte);
Var
IsSelected: Boolean;
Ratio: Byte;
i: Integer;
files: Integer;
SelectedPackedSize,
SelectedUnpackedSize: Double;
Begin
SelectedPackedSize := 0;
SelectedUnpackedSize := 0;
If Which <> SELECTALL Then
{$IFDEF ListView}
If ListView1.Selected = Nil Then
Which := TOTALS;
{$ELSE}
If ZipView1.SelCount = 0 Then
Which := TOTALS;
{$ENDIF ListView}
If (Which = Selected) Or (Which = SELECTALL) Then
Begin
{$IFDEF ListView}
If Which = SELECTALL Then
files := ListView1.Items.Count
Else
files := ListView1.SelCount;
For i := 0 To ListView1.Items.Count - 1 Do
Begin
If Which = SELECTALL Then
IsSelected := True
Else
IsSelected := ListView1.Items[i].Selected;
If IsSelected Then
Begin
SelectedPackedSize :=
SelectedPackedSize +
StrToInt(ListView1.Items[i].SubItems[COLUMN_PACKED - 1]);
SelectedUnpackedSize :=
SelectedUnpackedSize +
StrToInt(ListView1.Items[i].SubItems[COLUMN_UNPACKED - 1]);
End;
End;
{$ELSE}
If Which = SELECTALL Then
files := ZipView1.Items.Count
Else
files := ZipView1.SelCount;
For i := 0 To ZipView1.Items.Count - 1 Do
Begin
If Which = SELECTALL Then
IsSelected := True
Else
IsSelected := ZipView1.Selected[i];
If IsSelected Then
Begin
(* COLUMN_??? listed at top of this unit *)
SelectedPackedSize :=
SelectedPackedSize +
StrToInt64(ZipView1.Column[i, COLUMN_PACKED]);
SelectedUnpackedSize :=
SelectedUnpackedSize +
StrToInt64(ZipView1.Column[i, COLUMN_UNPACKED]);
End;
End;
{$ENDIF ListView}
End
Else
Begin (* Which = TOTALS *)
{$IFDEF ListView}
files := ListView1.Items.Count;
{$ELSE}
files := ZipView1.Items.Count;
{$ENDIF ListView}
SelectedPackedSize := ZipTV1.TotalPackedSize;
SelectedUnpackedSize := ZipTV1.TotalUnpackedSize;
End;
Ratio := CalcRatio(SelectedPackedSize, SelectedUnpackedSize);
With StatusBar1 Do
Begin
If files > 0 Then
Panels[0].Text := ArcTypeNames[ZipTV1.ArcType]
Else
Panels[0].Text := '';
Panels[1].Text := 'Files: ' + IntToStr(files);
Panels[2].Text := 'Packed: ' + Format('%.0f', [SelectedPackedSize]);
Panels[3].Text := 'Unpacked: ' + Format('%.0f', [SelectedUnpackedSize]);
Panels[4].Text := 'Ratio: ' + IntToStr(Ratio) + '%';
End;
ProgressBar1.Position := 0;
ProgressBar2.Position := 0;
ProgressBar1.Visible := False;
ProgressBar2.Visible := False;
StatusBar1.SimplePanel := False;
StatusBar1.Update();
End;
//-------------------------------------------------------------
(* Initialize system icons *)
Procedure TfrmMain.FormCreate(Sender: TObject);
Var
r: TRegIniFile;
Begin
(* ------------------------------------------------------ *)
(* Fill combobox with history of previously used archives *)
(* ------------------------------------------------------ *)
r := TRegIniFile.Create(ZipTVDemoKey);
Try
r.ReadSection('ArchiveHistory', ComboBox1.Items);
Finally
r.Free();
End;
mnuAction1.Visible := False;
mnuClose1.Enabled := False;
{$IFDEF ListView}
(* Initialize systems image list. *)
(* Remember to 'DestroyImageList' *)
(* before exiting the program! *)
InitializeImageList(Self, ListView1);
{$ENDIF ListView}
End;
//-------------------------------------------------------------
Procedure TfrmMain.FormClose(Sender: TObject; Var Action: TCloseAction);
Var
i, j: Integer;
r: TRegIniFile;
Begin
r := TRegIniFile.Create(ZipTVDemoKey);
Try
(* delete previous key to allow storage in the same order as the *)
(* current fDirList *)
TRegistry(r).DeleteKey('ArchiveHistory');
j := ComboBox1.Items.Count - 1;
If j > 7 Then
j := 7; //15 items max of ComboBox1 saved
For i := 0 To j Do
r.WriteString('ArchiveHistory', ComboBox1.Items[i], '');
Finally
r.Free();
End;
End;
//-------------------------------------------------------------
(* Destroy the system image list *)
Procedure TfrmMain.FormDestroy(Sender: TObject);
Begin
{$IFDEF ListView}
DestroyImageList(ListView1);
{$ENDIF ListView}
End;
//-------------------------------------------------------------
(* This function assigns the variable CompressComponent to *)
(* the desired compression component. Variable CompressComponent *)
(* is then used like the acutal component. *)
(* *)
(* The ArcType property is assigned when the property "ArchiveFile" *)
(* is assigned a FileName. ArcType is used to determine which *)
(* component to assign to variable CompressComponent. *)
Function TfrmMain.DefineCompressComponent: Boolean;
Begin
CompressComponent := Nil;
If Not ZipTV1.IsArcCompressable(ZipTV1.ArcType) Then
ShowMessage('Compression not supported for this archive')
Else
Case ZipTV1.ArcType Of
atBh: CompressComponent := BlakHole1;
atCab: CompressComponent := MakeCab1;
atJar: CompressComponent := Jar1;
atLha, atLzh: CompressComponent := Lha1;
atTar: CompressComponent := Tar1;
atZip, //CompressComponent := Zip1;
atZipMV:
Begin
CompressComponent := ZipSplitter1;
ZipTV1.fArcType := atZipMV;
End;
{$IFDEF use_zlib}
atZLib: CompressComponent := ZLib1;
{$ENDIF}
End;
Result := Not (CompressComponent = Nil);
End;
//-------------------------------------------------------------
(* TPaintBox ( pbxLed ) component OnClick event -
Set the Cancel property to True *)
Procedure TfrmMain.pbxLedClick(Sender: TObject);
Begin
// activate the current component's cancel method
DoCancel(True);
StatusBar1.SimpleText := 'Aborting...';
StatusBar1.Update();
{$IFDEF ListView}
ListView1.Cursor := crDefault;
{$ELSE}
ZipView1.Cursor := crDefault;
{$ENDIF ListView}
End;
//-------------------------------------------------------------
(* ZipView's OnClick event -
Display totals in the status bar for the current select row *)
//-------------------------------------------------------------
Procedure TfrmMain.ZipView1Click(Sender: TObject; Row, Col: Integer);
Begin
//ShowMessage( ZipView1.Column[row, col] );
If Length(ZipTV1.ArchiveFile) > 0 Then
{$IFDEF ListView}
If (ListView1.Selected <> Nil) Then
{$ELSE}
If (ZipView1.SelCount > 0) Then
{$ENDIF}
DisplayTotals(Selected)
Else
DisplayTotals(TOTALS);
End;
//-------------------------------------------------------------
(* ListView's OnClick event -
Display totals in the status bar for the current select row *)
//-------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -