CFA LogoCFA Logo Computer
Загрузка поиска
Новости Компьютеры Прайс-лист [Новое] Прайс-лист [Б/У] Для ноутбуков Конфигуратор ПК Заказ, Оплата, Доставка Сервис объявления Драйвера Статьи Как нас найти Контакты
Новости
RSS канал новостей
Компания Hewlett-Packard выпустила в продажу ноутбук модели HP Envy x360, основой для которого послужил ...
Компания G.Skill в эти дни объявила о выпуске новых представителей серии оперативной памяти Trident ...
Список материнских плат компании Biostar пополнился свежими моделями под поколения процессоров Intel ...
Похоже, что компания Gionee в эти дни очень сильно занята. Только недавно мы сообщали об анонсе ...
Компания Enermax в своем коротеньком пресс-релизе рассказала общественности о старте серии недорогих ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Сила сжатия Делфи

Владислав ТКАЧУК Vlad.tkachuk@ua.fm

В жизни каждого программиста рано или поздно наступает момент, когда необходимо обеспечить возможность работы собственных программ с компрессированными данными или, говоря проще, архивами, без привлечения каких-либо посторонних приложений. Примеров использования архивов можно привести много — например собственная программа-инсталлятор. Решений этой проблемы также немало, и об одном из них мы сейчас и поговорим. Речь пойдет о работе программ, созданных в среде Delphi 3 и выше, с zip-архивами версии 2.0.

Не стоит изобретать велосипед

Как известно, одной из самых прекрасных особенностей программирования под Delphi является возможность использования компонентов — уже готовых объектов, предназначенных для решений различных задач. Их можно легко внедрять в среду программирования, а потом использовать при создании собственных проектов. Очевидно, что и для работы с архивами нам не придется изобретать велосипед, так как уже много людей сделало это до нас. В качестве примера подобного решения мы воспользуемся бесплатно распространяемым (лицензия GNU Lesser General Public License) пакетом Zip Master 1.72.1.2, который можно загрузить из сети по адресу http://www.geocities.com/rjpeters_au/zipmaster.zip. Размер файла инсталляции составляет приблизительно 1050 Кб, что по нынешним меркам не так уж много. Однако в этом архиве (созданном, кстати, с использованием технологии Zip Master) имеется все необходимое для реализации механизма работы с архивами в среде Delphi. Помимо необходимых библиотек и различных дополнений к ним также имеется добрый десяток исходников программ-примеров, демонстрирующих возможности использования компонента — от элементарных функций извлечения файлов, до создания собственного архиватора с поддержкой модулей .sxf. В отличие от предыдущих релизов, этот архив уже не содержит исходников всех используемых в проекте библиотек на языке C++, поскольку теперь они распространяются отдельно.

Теперь нам необходимо внедрить соответствующий компонент в оболочку Borland Delphi, или, говоря иными словами, инсталлировать его. Разработчики предусмотрели совместимость со всеми версиями программы начиная со второй. Процедуры установки компонента для 4, 5 и 6 Делфи практически одинаковы, однако два предыдущих релиза имеют ряд специфических моментов и особенностей. Поскольку наиболее широкое распространение у нас в стране получили именно «старшие» версии этого популярной среды программирования, подробнее мы остановимся на использовании механизмов архивирования именно в этих оболочках (в частности, для наших экспериментов будем использовать Borland Delphi 5). Пользователи более ранних версий программы от разработчиков из компании Borland могут найти подробные инструкции по установке Zip Master во входящем в поставку файле install.txt.

Компонент своими руками

В нашем же случае схема действий будет выглядеть следующим образом. В главном меню Делфи выбираем раздел Component, а из выпадающего меню — пункт Install Component. Перед нами возникает окно инсталляции компонента (Рис. 1). Следуя рекомендациям разработчиков, мы не будем внедрять компонент уже в существующий модуль dclusr50.dpk, являющийся по сути своеобразным хранилищем всех стандартных компонентов системы. Вместо этого создадим новый модуль, используя закладку into new package. Пустые поля окна необходимо заполнить следующим образом:

Unit Filename: с помощью кнопки просмотра выбираем файл sortgrid.pas (он находится во вложенной папке \vcl\grid\ в директории, в которую изначально был распакован дистрибутив);

Package file name: ZipMaster.

Остальные поля можно оставлять без изменений. После нажатия кнопки OK возникнет сообщение о компиляции файла. Не вдаваясь в подробности, лишь сообщим, что на вопрос из Message Box следует отвечать отрицательно, вплоть до завершения добавления всех нужных файлов (после первого файла необходимо аналогичным образом еще добавить \vcl\sfx\zsfxslave.pas и \vcl\zipmstr.pas). Завершив добавление третьего файла, на сообщение ZipMaster.bpl will be built then installed. Continue? Следует ответить утвердительно (Рис. 2). Следующее сообщение о компиляции и регистрации TsortGrid и TzipMaster свидетельствует об успешном завершении процесса установки компонента. Теперь на палитре инструментов появится новая закладка —Delphi Zip (Рис. 3).

Рис. 1. Окно инсталяции   Рис. 2. Окно добавления файла

Рис. 3. Delphi Zip

Не исключено, что в процессе инсталляции на вашем компьютере могут возникнуть предупреждения об ошибках. Не стоит волноваться, эти сообщения можно смело проигнорировать, так как на процесс установки они никак не влияют. По завершении можно также закрыть без сохранения изменений все окна, возникшие в рабочей области Delphi.

Ну вот, теперь, кажется, все приготовления к работе завершены. Можно начинать программировать... Хотя, существует еще один момент, на котором следует заострить внимание.

Нужный файл — всему голова

Для работы программ с использованием компонента Zip Master будут необходимы такие файлы как zipdll.dll и unzdll.dll, а для создания самораспаковывающихся архивов может понадобиться также dzsfxus.bin (изначально все три файла расположены в папке \dll\). Эти библиотеки должны быть размещены в одной папке с исполнимым файлом, который их использует. Так, если ваша программа будет только распаковывать файлы, в ее состав должен входить файл unzdll.dll, если еще и архивировать, то понадобится и библиотека zipdll.dll. Как уже упоминалось выше, для работы полноценного архиватора с возможностью создания .sfx-архивов не обойтись и без третьего файла. Частично проблему с этими файлами можно решить, скопировав библиотеки в системную директорию WINDOWS\SYSTEM\. В этом случае они будут доступны для программы, где бы она ни находилась.

Приступая к работе, желательно завести отдельную директорию, где будут храниться все используемые в проекте файлы (для примера, пускай это будет c:\myprogram\). В эту папку, помимо уже упомянутых выше библиотек, необходимо также скопировать еще два дополнительных файла языковой поддержки сообщений, генерируемых в процессе работы программы (сообщение об ошибках, о выполнении каких-либо манипуляций с содержанием архивов и т.п.). Всего в этом релизе Zip Master поддерживается более 15 различных языков, в том числе и русский. Каждому из языков соответствуют два файла —zipmsgXX.rc и zipmsgXX.res (расположенные в поддиректории \lang\), где ХХ — условное сокращение названия языка. Например, бразильскому (португальскому) языку соответствует буквосочетание BR, китайскому —CN, а русскому —RU. Таким образом, файлы \lang\zipmsgRU.rc и \lang\zipmsgRU.res также отправляются в нашу рабочую директорию. К сожалению, в дистрибутив не входят файлы поддержки украинского языка, однако этот недочет можно легко исправить. Если вы достаточно инициативны и усидчивы, то без особых усилий, руководствуясь инструкциями из \lang\resnote.txt, сможете создать свой собственный языковой файл. Кстати, для того чтобы поддержка вывода сообщений на русском языке была скомпилирована в exe-файл, в код после слова implementation необходимо добавить специальную инструкцию —{$R zipmsgru.res}.

Делай раз, делай два...

Теперь, когда все подготовительные работы завершены, можно приступать к созданию нашей первой программы. Итак, создадим в оболочке Delphi новый проект и сразу же сохраним все его рабочие файлы (воспользовавшись копкой Save All) в заранее подготовленной директории со всеми остальными файлами. Для удобства главный файл проекта, имеющий по умолчанию имя project1.dpr, сохраним с именем myzip.dpr (теперь Рис. 4. TZipMasterаналогичное имя будет иметь и результирующий исполнимый файл).

В любое место формы (этот объект не является визуальным, поэтому его месторасположение значения не имеет) необходимо поместить компонент TZipMaster из группы компонентов Delphi Zip (на палитре компонент) — объект будет добавлен в исходный код автоматически (Рис. 4). Теперь создадим два основных события главной формы проекта, связанных с его использованием. В ответ на первое из них —OnCreate — необходимо загрузить используемые библиотеки с наборами функций архивации и деархивации с помощью процедур ZipMaster1.Load_Zip_Dll и ZipMaster1.Load_Unz_Dll соответственно. Аналогично, по событию OnDestroy библиотеки выгружаются процедурами ZipMaster1.Unload_Zip_Dll и ZipMaster1.Unload_Unz_Dll.

Для демонстрации возможностей компонента Zip Master мы попытаемся выполнить самые элементарные действия: архивацию данных, их разархивацию и удаление файлов непосредственно из архива.

Написание программы мы разобьем на три этапа, в каждом из которых попытаемся реализовать одну из вышеперечисленных функций. Итак, приступим.

Этап №1 — Архивация данных. Для начала создадим объект типа TButton (попросту говоря, кнопку) и в тело связанной с нажатием на него процедурой поместим следующий код:

Таким образом вследствие нажатия на первую кнопку произойдет добавление файла my.bmp в архив mytest.zip.

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

Очевидно, что исполнение этого участка кода приведет к извлечению файла в папку c:\windows\ — разумеется, лишь в том случае, если такой файл присутствует в архиве.

Этап № 3 — реализация функии удаления файлов из архива. Соответствующая последовательность процедур будет иметь такой вид.

В результате применения таких несложных манипуляций нам удалось добиться реализации простейших возможностей Zip Master (Рис. 5). Разумеется, возможности компонента этим не ограничиваются. Напротив, разработчикам удалось создать достаточно прочный фундамент для разработки приложений с использованием эффективной технологии архивирования файлов. В то же время они оставили и простор для дальнейшего исследования и совершенствования этой технологии.

Рис. 5. Реализации возможностей Zip Master

Всем тем, кого данная статья не оставила равнодушным, рекомендуется посетить официальный сайт Zip Delphi http://www.geocities.com/SiliconValley/Network/2114/zipbeta.html, а также страничку, содержащую последние обновления, релизы, исходники и другую полезную документацию —http://www.geocities.com/rjpeters_au/zipmaster.html.

Удачи!

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © www.sector.biz.ua 2006-2015 design by Vadim Popov