Delphi

Лозовский Александр

Xakep, номер #054, стр. 054-084-4


Кодинг forever

Вначале разберемся с открытием архива и экранизацией его интимных тайн :). Для этого взгляни онклик первой кнопки (с троеточием):

Как всегда все просто и занудно. Если пользователь выбрал имя файла, мы передаем его ZipTv, присваиваем маску *.* и выводим в ListBox2 файлы по этой маске. То есть все файлы из архива. Затем выводим дополнительную информацию об архиве: количество файлов, исходный размер данных, пакованный размер и, наконец, compress ratio. Дело в том, что разработчики компонента придумали для этой цели целую функцию CalcRatio. Но до ее использования я никогда не унижусь :). Принять исходный размер за 100% и вычислить, сколько же осталось, это под силу даже школьнику из приюта для олигофренов. И это будет одна и та же строчка кода, так что тяга к упрощению ущемлена не будет :).

Архивариус

В первом listbox'е ты сможешь составить список файлов, подлежащих архивации. В этом нам поможет Edit2, Button2 и Button3 (которая "Добавить!", она добавляет содержимое Edit2 в ListBox1). Button2 же просто активирует OpenDialog и вводит имя файла в Edit2. Вот как это делается:

OnClick Button2:

ListBox1.Items.Add(Edit2.Text);

OnClick Button3:

ListBox1.Items.Add(Edit2.Text);

Впрочем, маски (типа *.exe, ??e.doc) тебе придется набивать в Edit2 уже вручную.

Посмотрим на ОнКлик кнопки "Архивировать":

Переменная i будет содержать количество запакованных файлов. Далее мы определяем имя архива, соотносим содержимое ListBox1 со свойством FileSpec и вставляем пароль из Edit3. Запускаем процесс и выводим результат с помощью ShowMessage.

Разархивариус

Вот онклик кнопки "Разархивировать":

Здесь все очень похоже на паковку, кроме нового свойства ExtractDir, данные для которого берутся из Edit4.

Создаем

Создать SFX архив из обычного не просто, а очень просто. Делается это в 3 строчки кода. Я имею в виду вот эти строчки:

MakeSfx1.ArchiveFile:= Edit1.Text;

MakeSfx1.TargetFile:= Edit5.Text;

IF MakeSfx1.CreateSfx then ShowMessage ('Архив создан!');

Это и есть Онклик от кнопочки "Создать SFX". Путь к конечному файлу будет определяться содержимым Edit5. Не забудь, что по умолчанию SFX файлы ищутся в системном каталоге.

Конвертируем

Вот как это делается:

Если ты внимательно читал теорию, то уже все понял: здесь я последовательно определяю исходный и конечный файлы, выбираю способ конвертации. Вот, собственно, и весь пример. Самое время чуть-чуть его модернизировать. Не зря же я положил на форму 2 TProgressBar :).

Создай для компонента TZip1 событие OnProgress и вбей туда следующее:

ProgressBar1.Position := ProgressByFile;

ProgressBar1.Update;

ProgressBar2.Position := ProgressByArchive;

ProgressBar2.Update;

Эти простые строчки обеспечат пользователю наблюдение за двумя важными процессами: прогрессом в архивации текущего файла и архива в целом.

Клинические испытания

Я запустил нашу прогу и открыл один из своих архивов, получив краткую информацию о нем. Затем у меня появилось желание добавить в него файлик, что я и сделал с неплохим результатом - compress ratio был что-то около 34%.

Назад на стр. 054-084-3  Содержание  Вперед на стр. 054-084-5