git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jcl@20 c37d764d-f447-7644-a108-883140d013fb
290 lines
12 KiB
ObjectPascal
290 lines
12 KiB
ObjectPascal
unit UProperties;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, JclCompression, ActnList;
|
|
|
|
type
|
|
TFormArchiveSettings = class(TForm)
|
|
GroupBoxGeneralSettings: TGroupBox;
|
|
EditPassword: TEdit;
|
|
LabelPassword: TLabel;
|
|
EditNumberOfThreads: TEdit;
|
|
LabelNumberOfThreads: TLabel;
|
|
GroupBoxCompressionProperties: TGroupBox;
|
|
EditCompressionLevel: TEdit;
|
|
LabelCompressionLevel: TLabel;
|
|
ComboBoxCompressionMethod: TComboBox;
|
|
LabelCompressionMethod: TLabel;
|
|
ComboBoxEncryptionMethod: TComboBox;
|
|
LabelEncryptionMethod: TLabel;
|
|
EditDictionarySize: TEdit;
|
|
LabelDictionarySize: TLabel;
|
|
EditNumberOfPasses: TEdit;
|
|
LabelNumberOfPasses: TLabel;
|
|
GroupBox1: TGroupBox;
|
|
CheckBoxRemoveSfxBlock: TCheckBox;
|
|
CheckBoxCompressHeader: TCheckBox;
|
|
CheckBoxCompressHeaderFull: TCheckBox;
|
|
CheckBoxEncryptHeader: TCheckBox;
|
|
CheckBoxSaveCreationDateTime: TCheckBox;
|
|
CheckBoxSaveLastAccessDateTime: TCheckBox;
|
|
CheckBoxSaveLastSaveDateTime: TCheckBox;
|
|
ButtonClose: TButton;
|
|
CheckBoxSolidExtension: TCheckBox;
|
|
LabelSolidBlockSize: TLabel;
|
|
EditSolidBlockSize: TEdit;
|
|
procedure EditPasswordExit(Sender: TObject);
|
|
procedure EditNumberOfThreadsExit(Sender: TObject);
|
|
procedure EditCompressionLevelExit(Sender: TObject);
|
|
procedure ComboBoxCompressionMethodExit(Sender: TObject);
|
|
procedure ComboBoxEncryptionMethodChange(Sender: TObject);
|
|
procedure EditDictionarySizeExit(Sender: TObject);
|
|
procedure EditNumberOfPassesExit(Sender: TObject);
|
|
procedure CheckBoxRemoveSfxBlockExit(Sender: TObject);
|
|
procedure CheckBoxCompressHeaderExit(Sender: TObject);
|
|
procedure CheckBoxCompressHeaderFullExit(Sender: TObject);
|
|
procedure CheckBoxEncryptHeaderExit(Sender: TObject);
|
|
procedure CheckBoxSaveCreationDateTimeExit(Sender: TObject);
|
|
procedure CheckBoxSaveLastAccessDateTimeExit(Sender: TObject);
|
|
procedure CheckBoxSaveLastSaveDateTimeExit(Sender: TObject);
|
|
procedure CheckBoxSolidExtensionExit(Sender: TObject);
|
|
procedure EditSolidBlockSizeExit(Sender: TObject);
|
|
protected
|
|
FArchive: TJclCompressionArchive;
|
|
FNumberOfThreads: IJclArchiveNumberOfThreads;
|
|
FCompressionLevel: IJclArchiveCompressionLevel;
|
|
FCompressionMethod: IJclArchiveCompressionMethod;
|
|
FEncryptionMethod: IJclArchiveEncryptionMethod;
|
|
FDictionarySize: IJclArchiveDictionarySize;
|
|
FNumberOfPasses: IJclArchiveNumberOfPasses;
|
|
FRemoveSfxBlock: IJclArchiveRemoveSfxBlock;
|
|
FCompressHeader: IJclArchiveCompressHeader;
|
|
FEncryptHeader: IJclArchiveEncryptHeader;
|
|
FSaveCreationDateTime: IJclArchiveSaveCreationDateTime;
|
|
FSaveLastAccessDateTime: IJclArchiveSaveLastAccessDateTime;
|
|
FSaveLastWriteDateTime: IJclArchiveSaveLastWriteDateTime;
|
|
FAlgoritm: IJclArchiveAlgorithm;
|
|
FSolid: IJclArchiveSolid;
|
|
public
|
|
class procedure Execute(Archive: TJclCompressionArchive);
|
|
procedure RefreshValues;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
TypInfo;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxCompressHeaderExit(Sender: TObject);
|
|
begin
|
|
FCompressHeader.CompressHeader := CheckBoxCompressHeader.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxCompressHeaderFullExit(Sender: TObject);
|
|
begin
|
|
FCompressHeader.CompressHeaderFull := CheckBoxCompressHeaderFull.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxEncryptHeaderExit(Sender: TObject);
|
|
begin
|
|
FEncryptHeader.EncryptHeader := CheckBoxEncryptHeader.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxRemoveSfxBlockExit(Sender: TObject);
|
|
begin
|
|
FRemoveSfxBlock.RemoveSfxBlock := CheckBoxRemoveSfxBlock.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxSaveCreationDateTimeExit(Sender: TObject);
|
|
begin
|
|
FSaveCreationDateTime.SaveCreationDateTime := CheckBoxSaveCreationDateTime.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxSaveLastAccessDateTimeExit(Sender: TObject);
|
|
begin
|
|
FSaveLastAccessDateTime.SaveLastAccessDateTime := CheckBoxSaveLastAccessDateTime.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxSaveLastSaveDateTimeExit(Sender: TObject);
|
|
begin
|
|
FSaveLastWriteDateTime.SaveLastWriteDateTime := CheckBoxSaveLastSaveDateTime.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.CheckBoxSolidExtensionExit(Sender: TObject);
|
|
begin
|
|
FSolid.SolidExtension := CheckBoxSolidExtension.Checked;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.ComboBoxCompressionMethodExit(Sender: TObject);
|
|
begin
|
|
FCompressionMethod.CompressionMethod := TJclCompressionMethod(GetEnumValue(TypeInfo(TJclCompressionMethod),ComboBoxCompressionMethod.Text));
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.ComboBoxEncryptionMethodChange(Sender: TObject);
|
|
begin
|
|
FEncryptionMethod.EncryptionMethod := TJclEncryptionMethod(GetEnumValue(TypeInfo(TJclEncryptionMethod),ComboBoxEncryptionMethod.Text));
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.EditCompressionLevelExit(Sender: TObject);
|
|
begin
|
|
FCompressionLevel.CompressionLevel := StrToInt(EditCompressionLevel.Text);
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.EditDictionarySizeExit(Sender: TObject);
|
|
begin
|
|
FDictionarySize.DictionarySize := StrToInt(EditDictionarySize.Text);
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.EditNumberOfPassesExit(Sender: TObject);
|
|
begin
|
|
FNumberOfPasses.NumberOfPasses := StrToInt(EditNumberOfPasses.Text);
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.EditNumberOfThreadsExit(Sender: TObject);
|
|
begin
|
|
FNumberOfThreads.NumberOfThreads := StrToInt(EditNumberOfThreads.Text);
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.EditPasswordExit(Sender: TObject);
|
|
begin
|
|
FArchive.Password := EditPassword.Text;
|
|
RefreshValues;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.EditSolidBlockSizeExit(Sender: TObject);
|
|
begin
|
|
FSolid.SolidBlockSize := StrToInt64(EditSolidBlockSize.Text);
|
|
RefreshValues;
|
|
end;
|
|
|
|
class procedure TFormArchiveSettings.Execute(Archive: TJclCompressionArchive);
|
|
var
|
|
AFormSettings: TFormArchiveSettings;
|
|
CompressionMethod: TJclCompressionMethod;
|
|
EncryptionMethod: TJclEncryptionMethod;
|
|
begin
|
|
AFormSettings := TFormArchiveSettings.Create(Application);
|
|
try
|
|
Supports(IUnknown(Archive),IJclArchiveNumberOfThreads,AFormSettings.FNumberOfThreads);
|
|
Supports(IUnknown(Archive),IJclArchiveCompressionLevel,AFormSettings.FCompressionLevel);
|
|
Supports(IUnknown(Archive),IJclArchiveCompressionMethod,AFormSettings.FCompressionMethod);
|
|
Supports(IUnknown(Archive),IJclArchiveEncryptionMethod,AFormSettings.FEncryptionMethod);
|
|
Supports(IUnknown(Archive),IJclArchiveDictionarySize,AFormSettings.FDictionarySize);
|
|
Supports(IUnknown(Archive),IJclArchiveNumberOfPasses,AFormSettings.FNumberOfPasses);
|
|
Supports(IUnknown(Archive),IJclArchiveRemoveSfxBlock,AFormSettings.FRemoveSfxBlock);
|
|
Supports(IUnknown(Archive),IJclArchiveCompressHeader,AFormSettings.FCompressHeader);
|
|
Supports(IUnknown(Archive),IJclArchiveEncryptHeader,AFormSettings.FEncryptHeader);
|
|
Supports(IUnknown(Archive),IJclArchiveSaveCreationDateTime,AFormSettings.FSaveCreationDateTime);
|
|
Supports(IUnknown(Archive),IJclArchiveSaveLastAccessDateTime,AFormSettings.FSaveLastAccessDateTime);
|
|
Supports(IUnknown(Archive),IJclArchiveSaveLastWriteDateTime,AFormSettings.FSaveLastWriteDateTime);
|
|
Supports(IUnknown(Archive),IJclArchiveSolid,AFormSettings.FSolid);
|
|
AFormSettings.FArchive := Archive;
|
|
|
|
if Assigned(AFormSettings.FCompressionLevel) then
|
|
AFormSettings.LabelCompressionLevel.Caption := Format(AFormSettings.LabelCompressionLevel.Caption,
|
|
[AFormSettings.FCompressionLevel.CompressionLevelMin,AFormSettings.FCompressionLevel.CompressionLevelMax])
|
|
else
|
|
AFormSettings.LabelCompressionLevel.Caption := Format(AFormSettings.LabelCompressionLevel.Caption,[0,0]);
|
|
|
|
if Assigned(AFormSettings.FCompressionMethod) then
|
|
for CompressionMethod := Low(TJclCompressionMethod) to High(TJclCompressionMethod) do
|
|
if CompressionMethod in AFormSettings.FCompressionMethod.SupportedCompressionMethods then
|
|
AFormSettings.ComboBoxCompressionMethod.Items.Add(GetEnumName(TypeInfo(TJclCompressionMethod),Integer(CompressionMethod)));
|
|
|
|
if Assigned(AFormSettings.FEncryptionMethod) then
|
|
for EncryptionMethod := Low(TJclEncryptionMethod) to High(TJclEncryptionMethod) do
|
|
if EncryptionMethod in AFormSettings.FEncryptionMethod.SupportedEncryptionMethods then
|
|
AFormSettings.ComboBoxEncryptionMethod.Items.Add(GetEnumName(TypeInfo(TJclEncryptionMethod),Integer(EncryptionMethod)));
|
|
|
|
AFormSettings.RefreshValues;
|
|
AFormSettings.ShowModal;
|
|
finally
|
|
AFormSettings.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TFormArchiveSettings.RefreshValues;
|
|
begin
|
|
// password
|
|
EditPassword.Text := FArchive.Password;
|
|
// number of threads
|
|
EditNumberOfThreads.Enabled := Assigned(FNumberOfThreads);
|
|
if Assigned(FNumberOfThreads) then
|
|
EditNumberOfThreads.Text := IntToStr(FNumberOfThreads.NumberOfThreads);
|
|
// compression level
|
|
EditCompressionLevel.Enabled := Assigned(FCompressionLevel);
|
|
if Assigned(FCompressionLevel) then
|
|
EditCompressionLevel.Text := IntToStr(FCompressionLevel.CompressionLevel);
|
|
// compression method
|
|
if Assigned(FCompressionMethod) then
|
|
ComboBoxCompressionMethod.ItemIndex := ComboBoxCompressionMethod.Items.IndexOf(GetEnumName(TypeInfo(TJclCompressionMethod),Integer(FCompressionMethod.CompressionMethod)))
|
|
else
|
|
ComboBoxCompressionMethod.Enabled := False;
|
|
// encryption method
|
|
if Assigned(FEncryptionMethod) then
|
|
ComboBoxEncryptionMethod.ItemIndex := ComboBoxEncryptionMethod.Items.IndexOf(GetEnumName(TypeInfo(TJclEncryptionMethod),Integer(FEncryptionMethod.EncryptionMethod)))
|
|
else
|
|
ComboBoxEncryptionMethod.Enabled := False;
|
|
// dictionary size
|
|
if Assigned(FDictionarySize) then
|
|
EditDictionarySize.Text := IntToStr(FDictionarySize.DictionarySize)
|
|
else
|
|
EditDictionarySize.Enabled := False;
|
|
// number of passes
|
|
if Assigned(FNumberOfPasses) then
|
|
EditNumberOfPasses.Text := IntToStr(FNumberOfPasses.NumberOfPasses)
|
|
else
|
|
EditNumberOfPasses.Enabled := False;
|
|
// solid block size
|
|
if Assigned(FSolid) then
|
|
EditSolidBlockSize.Text := IntToStr(FSolid.SolidBlockSize)
|
|
else
|
|
EditSolidBlockSize.Enabled := False;
|
|
// remove sfx
|
|
CheckBoxRemoveSfxBlock.Enabled := Assigned(FRemoveSfxBlock);
|
|
CheckBoxRemoveSfxBlock.Checked := Assigned(FRemoveSfxBlock) and FRemoveSfxBlock.RemoveSfxBlock;
|
|
// compress header
|
|
CheckBoxCompressHeader.Enabled := Assigned(FCompressHeader);
|
|
CheckBoxCompressHeader.Checked := Assigned(FCompressHeader) and FCompressHeader.CompressHeader;
|
|
// compress header full
|
|
CheckBoxCompressHeaderFull.Enabled := Assigned(FCompressHeader);
|
|
CheckBoxCompressHeaderFull.Checked := Assigned(FCompressHeader) and FCompressHeader.CompressHeaderFull;
|
|
// encrypt header
|
|
CheckBoxEncryptHeader.Enabled := Assigned(FEncryptHeader);
|
|
CheckBoxEncryptHeader.Checked := Assigned(FEncryptHeader) and FEncryptHeader.EncryptHeader;
|
|
// save creation date time
|
|
CheckBoxSaveCreationDateTime.Enabled := Assigned(FSaveCreationDateTime);
|
|
CheckBoxSaveCreationDateTime.Checked := Assigned(FSaveCreationDateTime) and FSaveCreationDateTime.SaveCreationDateTime;
|
|
// save last access date time
|
|
CheckBoxSaveLastAccessDateTime.Enabled := Assigned(FSaveLastAccessDateTime);
|
|
CheckBoxSaveLastAccessDateTime.Checked := Assigned(FSaveLastAccessDateTime) and FSaveLastAccessDateTime.SaveLastAccessDateTime;
|
|
// save last write date time
|
|
CheckBoxSaveLastSaveDateTime.Enabled := Assigned(FSaveLastWriteDateTime);
|
|
CheckBoxSaveLastSaveDateTime.Checked := Assigned(FSaveLastWriteDateTime) and FSaveLastWriteDateTime.SaveLastWriteDateTime;
|
|
// solid by extension
|
|
CheckBoxSolidExtension.Enabled := Assigned(FSolid);
|
|
CheckBoxSolidExtension.Checked := Assigned(FSolid) and FSolid.SolidExtension;
|
|
end;
|
|
|
|
end.
|
|
|