Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Отображение прогресса сжатия с пом.zlib


Автор: MrDmitry 18.2.2011, 02:21
Всем привет. Прочитал статью http://pblog.ru/?p=67
В ней говорится об создании архивов zlib. Все прекрасно работает. 
Код

procedure TWait.FormShow(Sender: TObject);
var
 SearchRec:TSearchRec;
 ser:string; //cfg
begin
 if arch=1 then
  begin
   ser:=path+'*.cfg';
   sSaveDialog1.Execute;
   If FindFirst(ser, faAnyFile, SearchRec) = 0 then
  repeat
    if ((SearchRec.Name <> '.') and (SearchRec.Name <> '..')) then
      if (SearchRec.Attr and faDirectory) = 0 then
      CreateDir('c:\cscsarch');
       CopyFile(PChar(path+ExtractFileName(SearchRec.name)),PChar('c:\cscsarch\'+ExtractFileName(SearchRec.name)),false)
       until FindNext(SearchRec) <> 0;
      FindClose(SearchRec);
 end;
 DoFolderAction('c:\cscsarch',sSaveDialog1.FileName,DODO2);
 arch:=0;
 MyRemoveDir('c:\cscsarch');
 Wait.Close;
end;

Но в первой статье говорится о том что процесс архивирования и разархивирования отображается на gauge. А у меня ни чего не отображается (

M
MetalFan
Название темы должно отражать ее суть! О чем говорило название "zlib"??? Отредактировано

Автор: Данкинг 18.2.2011, 02:34
А где в твоём примере вообще упоминание о gauge?

Автор: northener 18.2.2011, 02:42
Цитата(MrDmitry @  18.2.2011,  02:21 Найти цитируемый пост)
Но в первой статье говорится о том что процесс архивирования и разархивирования отображается на gauge. 

А что говорится во второй статье? И в следующих?

Автор: northener 18.2.2011, 03:06
Цитата(MrDmitry @  18.2.2011,  02:21 Найти цитируемый пост)
Но в первой статье говорится о том что процесс архивирования и разархивирования отображается на gauge. А у меня ни чего не отображается ( 

Лентяй и копипастер!
Даже не удосужился прочитать статью полностью! А там есть ссылка на более раннюю статью этого автора, в которой реализовано визуальное отображение процесса!

P.S. Читать нужно уметь! Не достаточно быть "просто не чукчей"!

Автор: MrDmitry 18.2.2011, 23:01
Бррррррррр, я вообще прочитал все, в как я вам покажу gauge? uses ... gauge компонент на форме. И именно об этом я и писал. 

Если отбросить мой код и сделать так


Код

uses ...  FolderActions, ZLibAdvTools, gauge;

...


function DODO2(fl1,fl2:string):boolean;
begin
 Result:=ZLATCompressFile(fl1,fl2,2,false,true,nil,0,0) <> 0;
end;

procedure TFrom.Button1Click(Sender: TObject);
Begin
 SaveDialog1.execute;
 DoFolderAction('c:\cscsarch',SaveDialog1.FileName,DODO2);
end;


В gaguge не отображается ход процесса. Дело в том что мне нужно упаковать папку а не 1 файл, метод которого описывается в 1 статье

Автор: Gwire 19.2.2011, 17:08
MrDmitry, без обид, но мне кажется програмирование это не твое.
Там действительно не кода управления gauge,
но даже беглым взглядом можно понять где его нужно поставить. 
Мало того, если разобаться, можно вписать управление 
gauge для общего прогресса и gauge для каждого файла.

А писать на форум "вставьте мне не достающие строки" это смешно.
PS: northener, верно говоришь - "Лентяй и копипастер".
 

Автор: MrDmitry 20.2.2011, 18:18
я так понял что нужно было писать так

Код

 function DODO2(fl1,fl2:string):boolean;
begin
 Result:=ZLATCompressFile(fl1,fl2,2,true,true,TGauge,0,0) <> 0;
end;

procedure TFrom.Button1Click(Sender: TObject);
Begin
 SaveDialog1.execute;
 DoFolderAction('c:\cscsarch',SaveDialog1.FileName,DODO2);
end


Но так в модуле из статье возникает ошибка (

Автор: uwannadie 21.2.2011, 14:55
Код

function ZLATCompressFile(

                          sourcefile:string;          //<—-|—- это понятно

                          destinationfile:string;    //<—-|

                          compressRatio:integer;// степень сжатия

                          refreshWnd:boolean;// надо ли обновлять окно во время архивации

                          needcreate:boolean;// надо ли создавать файл-результат

                          progress:Pointer;//указатель на компонент прогресса,      

                           min_value:integer; //<—- это тоже очень сильно пригодится

                          max_value:integer; //<—|

                          PositionPropName:string=’Progress’     // имя свойства прогресса

                          ):integer;// результат 

а если бы ТС еще бы включил мозг и воспользовался поиском а-ля гуголь/яндекс, то сразу бы нашел тему:
http://www.programmersclub.ru/ahillesarhiv/

Автор: MrDmitry 22.2.2011, 00:07
Цитата(uwannadie @ 21.2.2011,  14:55)
Код

function ZLATCompressFile(

                          sourcefile:string;          //<—-|—- это понятно

                          destinationfile:string;    //<—-|

                          compressRatio:integer;// степень сжатия

                          refreshWnd:boolean;// надо ли обновлять окно во время архивации

                          needcreate:boolean;// надо ли создавать файл-результат

                          progress:Pointer;//указатель на компонент прогресса,      

                           min_value:integer; //<—- это тоже очень сильно пригодится

                          max_value:integer; //<—|

                          PositionPropName:string=’Progress’     // имя свойства прогресса

                          ):integer;// результат 

а если бы ТС еще бы включил мозг и воспользовался поиском а-ля гуголь/яндекс, то сразу бы нашел тему:
http://www.programmersclub.ru/ahillesarhiv/

Да штошь вы емае. Я соглашусь со всем, что я чайник, тупой копипастер и лентяй. Я видел эту статья и отталкивался от неё, но в упор не врубаю как все отоброзить на progress bar. К томуже эта статья, ссылку которую вы дали, я изучил уже сотни раз. в не говорится об упаковки одного файла. Но да эта не суть, суть проблемы в том что я не понимаю как прикрутить progressbar. 


Код

function DODO2(fl1,fl2:string):boolean;
begin
 Result:=ZLATCompressFile(fl1,fl2,2,true,true,TGauge,0,0) <> 0;
end;
procedure TFrom.Button1Click(Sender: TObject);
Begin
 SaveDialog1.execute;
 DoFolderAction('c:\cscsarch',SaveDialog1.FileName,DODO2);
end;


Как я понял в nil - тоесть пусто или 0 нужно вписать указатель на компонент который собственно и будет выводить прогресс. Но если туда вписать как я TGauge то программа тупо вылетает с ошибкой. 


Автор: northener 22.2.2011, 00:15
Цитата(MrDmitry @  22.2.2011,  00:07 Найти цитируемый пост)
Но если туда вписать как я TGauge то программа тупо вылетает с ошибкой. 

Ну так ты покажи как ты вписывал. И ошибку процитируй.

Автор: northener 22.2.2011, 01:55
Цитата(northener @  22.2.2011,  00:15 Найти цитируемый пост)
Ну так ты покажи как ты вписывал.

Ага. Нашел.
Код

  Result:=ZLATCompressFile(fl1,fl2,2,true,true,TGauge,0,0) <> 0;


Цитата(MrDmitry @  18.2.2011,  23:01 Найти цитируемый пост)
как я вам покажу gauge? uses ... gauge компонент на форме.


Функция ZLATCompressFile требует чтобы ей шестым параметром передали ссылку на экземпляр класса, реально созданный в программе. Буде он создан в дизайн-тайм или в ран-тайм. А ты чего туда передаёшь? Имя класса. 
Ну то есть. Допустим ты в дизайнере IDE выбрал в палитре компонентов TGauge. кликнул мышкой на форме. Дизайнер поместил его на форму и присвоил ему имя (типа Gauge1). Вот это имя и нужно использовать в качестве ссылки на экземпляр класса в шестом параметре той функции.

Купи учебник, а уж потом читай статьи и пробуй их использовать. 

Автор: uwannadie 23.2.2011, 12:43
MrDmitry, элементарного не знать, ужас...
Код

Result:=ZLATCompressFile(fl1,fl2,2,true,true,@Gauge_Name_In_Your_Project,Progress_Min_Value,Progress_Max_Value) <> 0;
 smile 
где 
Progress_Min_Vlue - минимальное значение прогресса упаковки (обычно стоит 0)
Progress_Max_Value - максимальное значение прогресса упаковки на компоненте (не всегда равно максимальному значению Gauge)

если и это не поможет, кидаю простейший пример

Код

ZLATCompressFile('D:\somefile.txt', 'D:\somefile.dat', 2, true, true, @Gauge1, 0, 100,);

Автор: MrDmitry 9.3.2011, 13:23
Спасибо, за помощь, появилась другая проблема, данный код показывает на gaguge процесс упаковки каждого файла, а не подскажите как можно сделать чтоб показывался общий прогресс? Наверное стоит использовать другой компонент? 

Автор: Keeper89 9.3.2011, 14:52
MrDmitry, конечно, ищи TSuperComponentZlibPackWithCurrentAndOverallProgress smile

Автор: MrDmitry 10.3.2011, 20:05
А если серьезно? Кто то может посоветовать как переделать этот скрипт, или какой то другой, который бы показывал общий ход упаковки, раcпоковки  zlib?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)