PDA

Показать полную графическую версию : Delphi 7


IM13
26-10-2004, 16:38
моя программа используется для групового архивирования и разар. файлов в разных дирректориях процедура архивации и разар. я взял из примера
Var
* FilesCompressed: Integer;
Begin
* Cursor := crHourGlass;
* ListBox1.Clear();

* If FileExists(Edit1.Text) Then
* * *If MessageDlg(
* * * * 'Archive exists... overwrite?',
* * * * mtConfirmation,
* * * * [mbYes, mbNo],
* * * * 0) = mrYes Then
* * * * // move to recycle bin
* * * * EraseFile(Edit1.Text, doAllowUndo) // EraseFile is in ztvBase.pas
* * *Else
* * * * Exit;

* Zip1.ArchiveFile := Edit1.Text; * * *// archive filename
* Zip1.DateAttribute := daFileDate; * *// default value
* Zip1.StoredDirNames := sdRelative; * // default value
* Zip1.CompressMethod := cmDeflate; * *// default value
* Zip1.RecurseDirs := CheckBox2.Checked; // default = False
* Zip1.Switch := swAdd; * * * * * * * *// default value
* Zip1.StoreEmptySubDirs := False; * * // default value
* Zip1.EncryptHeaders := CheckBox1.Checked; // default = False

* Zip1.ExcludeSpec.Clear();
* Zip1.FileSpec.Clear();
* Zip1.FileSpec.Add(Edit2.Text); * * * // test with c:\windows\*.txt

* // ****************************************************************
* // NOTE: for a better understanding of how the Attributes property
* // works with file attributes see demo demos\filescan\fs_demo.dpr.
* // ****************************************************************

* // See the Attributes property in the object inspector
* // Set Zip1 Attributes property by calling the SetAttribute method
* Zip1.SetAttribute(fsZeroAttr, True); // default
* Zip1.SetAttribute(fsArchive, True); *// default
* Zip1.SetAttribute(fsDirectory, True); // default = False
* Zip1.SetAttribute(fsHidden, True); * // default = False
* Zip1.SetAttribute(fsReadOnly, True); // default
* Zip1.SetAttribute(fsSysFile, True); *// default = False

* // See the AttributesEx property in teh object inspector
* // Set the AttributesEx property by calling the SetAttributeEx method.
* // Exclude none
* Zip1.SetAttributeEx(fsZeroAttr, False); // default
* Zip1.SetAttributeEx(fsArchive, False); // default
* Zip1.SetAttributeEx(fsDirectory, False); // default
* Zip1.SetAttributeEx(fsHidden, False); // default
* Zip1.SetAttributeEx(fsReadOnly, False); // default
* Zip1.SetAttributeEx(fsSysFile, False); // default

* FilesCompressed := Zip1.Compress();
* ShowMessage('Files Compressed: ' + IntToStr(FilesCompressed));

* Cursor := crDefault;
End;

на строке FilesCompressed := Zip1.Compress(); процесс автоматически переходит на
Procedure TForm1.Zip1Begin(Sender: TObject; FName: String; Count: Integer;
* Var Extract: Boolean);
Begin
* ListBox1.Items.Add(FName);
* StatusBar1.SimpleText := FName;
End;
и выводит в listbox все файлы которые она сжимает, я сделал пости точную копию и вставил в свою прогу но у меня такого перехода не происходит - прога просто производит действия сжатия. Кто нибудь пояснит мне в чем проблема ?

Исправлено: Prisoner, 2:27 27-10-2004

Prisoner
27-10-2004, 02:36
Так... стало быть программа должна переходить на Zip1Begin? Но этого не делдает? Я все верно понял? Если да, то было бы интересно взглянуть на реализацию метода Compress и узнать список компонентов на форме Form1.

IM13
27-10-2004, 12:33
Да вы поняли правильно в премере на использования метода архивации стоит точноя копия я изменяю только edit*.Text на нужные мне пути, которые передает другая процедура через поиск findfirst - findnext
прилагаю  свой From1

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
 Forms,  qdialogs,  Dialogs,   XPMan,   StdCtrls,    Buttons,  ztvRegister,   ztvBase,   ztvGbls,   ztvConsts,   ztvZip,   ztvMakeCab,   ztvUnZip,   ztvUnCab,
  ztvHeaders,   ztvFileIo,   ComCtrls,  // Gauges,
     ExtCtrls;

 type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   BitBtn1: TBitBtn;
   XPManifest1: TXPManifest;
   BitBtn2: TBitBtn;
   Zip1: TZip;
   UnZip1: TUnZip;
   Label1: TLabel;
   Edit4: TEdit;
   Label2: TLabel;
   Label3: TLabel;
   CheckBox2: TCheckBox;
   CheckBox1: TCheckBox;
   Label4: TLabel;
   ListBox1: TListBox;
   BitBtn3: TBitBtn;
   CheckBox3: TCheckBox;
   CheckBox4: TCheckBox;

это весь список компонентов я туда включил все что надо и не надо на счет метода compress в верху это он и есть,а алггоритм копрессии происходит через подключенные модули zip1: tzip.
Такой же переход на туже процедуру происходит и с процедурой декомпрессии

Prisoner
28-10-2004, 02:43
Хм... может это именно то, что надо (хотя странно, что ошибок нет) - в процедуре TForm1.Zip1Begin есть строки использующие ListBox1 и StatusBar1, но в объявлении формы их нет, что в большинстве случаев указывает, что их нет вообще. Самый первый кусок кода не может быть методом Compress - этот метод вызывается конце кода - рекурсия без выхода.




© OSzone.net 2001-2012