Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга о KOL.doc
Скачиваний:
40
Добавлен:
30.04.2019
Размер:
2 Мб
Скачать
☆

6.14.2. Апплет панели управления (cpl)

Пакет CPL Applet Богуслава Брандыса (Польша) содержит объект TCPLApplet с визуальным зеркалом, который позволяет организовать приложение как апплет панели управления. Коротко говоря – это способ поместить ярлык на ваше приложение в Панель управления, среди прочих системных настроек. Вряд ли вам это понадобится делать для обычного приложения, но если вы напишете какой-нибудь драйвер или системную утилиту, то имейте в виду эту возможность.

6.14.3. Написание собственного драйвера

Кстати (продолжая предыдущий параграф), как раз архив KOLDriver может помочь вам написать собственный драйвер устройства (и не только для коврика от мыши, но и серьезный драйвер для настоящего устройства). В этом архиве содержится шаблон кода, на основе которого вполне возможно выполнить поставленную задачу. Автор пакета Thaddy de Koning (Нидерланды).

6.14.4. Управление привилегиями NT

Автор пакета KOLNTprivileges – Александр Шахайло (Украина). Посвящен пакет, как вы понимаете, управлению привилегиями NT в операционных системах, начиная с NT. В качестве бонуса, имеется переведенный на Паскаль модуль isaapi.

6.15. Прочие полезные расширения.

6.15.1. Работа с ярлыками, регистрация файловых расширений

Часть функций, необходимых для выполнения указанных в заглавии данного пункта задач, вынесена в отдельный модуль Lnk.pas.

CreateLink, CreateLinkDesc – позволяют создать ярлык;

ResolveLink, IsLink2RecycleBin – помогают в анализе существующего ярлыка;

FileTypeReg, FileTypeRegEx, FileTypeReg2 – полезны для создании ассоциации приложения с указанными файловыми расширениями;

FileTypeGetReg – возвращает сведения о текущей ассоциации файлового расширения.

Еще один пакет KOLNKDir предназначен для упрощения определения местонахождения системных директорий, таких как «Мои документы», «Программы» и т.д. Автор Дмитрий Жаров a.k.a. Gandalf.

6.15.2. Разделение памяти между приложениями

Пакет KOL_ShareMem упрощает разделение памяти между приложениями. Используется файл отображаемый на память. Автор адаптации к KOL – neuron.

Еще один пакет похожего назначения – KOLmapmem. (Автор?)

6.15.3. Сохранение и восстановление свойств формы

Пакет KOLFormSave позволяет приложению сохранить в реестре 5 параметров, задающих размер и видимость формы, и восстановить их при повторном старте приложения. Несложно расширяется, если следует сохранить больше параметров. Автор пакета Александр Шахайло (Украина).

6.15.4. Дополнительные кнопки на заголовке окна

Пакет KOLGets позволяет добавить кнопку (или несколько) в заголовок формы. Автор Александр Шахайло (Украина).

6.15.5. Макроассемблирование в память (PC Asm)

Пакет PCAsm я создавал для своих целей (и использовал, по крайней мере, в одном приложении). Назначение его весьма специфическое: компиляция ассемблерного текста в машинный код в памяти, с возможностью последующего выполнения этого кода в течение этого же сеанса работы приложения. Звучит необычно, не правда ли? В Delphi имеется свой встроенный ассемблер, и он достаточно неплох. Но, к сожалению, он не поддерживает макрокоманды. Бывают ситуации (и мне как раз попалась такая), когда без макрокоманд обойтись практически невозможно. В моем случае речь шла о необходимости предельной оптимизации кода, при возможности настройки его на огромное сочетание всевозможных входных параметров, причем выбрать надо было только одно такое сочетание, и исключить из кода все проверки условий. Речь идет о проверке условий в глубоко вложенных циклах, разумеется.

Данный ассемблер поддерживает все основные машинные команды IBP PC 486, Pentium, и даже MMX-инструкции. Кстати, один из вариантов применения: это когда во вложенном цикле одну и ту же операцию следует выполнять по возможности с использованием MMX-инструкций из имеющегося множества. Для разных множеств пишется код, выполняющий одну и ту же работу, но с использованием различных инструкций, и далее этот код компилируется с символами условной компиляции (символическими переменными, если угодно), значение которых перед вызовом компилятора устанавливается в зависимости от текущей конфигурации оборудования.

С точки зрения уменьшения кода приложения, данный подход может даже принести пользу в случае, когда прямое выписывание всех возможных вариантов кода и включение их всех в конечный исполнимый модуль существенно увеличивает размер приложения за счет большого числа вариантов. Хотя в моем случае вариантов было настолько велико, что прямое выписывание всех вариантов алгоритма, в зависимости от конфигурации оборудования и прочих входящих условий, что я уже физически был не в состоянии поддержать все эти конфигурации. Таким образом, решение с компиляцией кода в память «на ходу» оказалось единственно подходящим средством.

Возможно, одно из неудобств такого подхода – это необходимость часть кода держать в виде исходного текста (брать из внешнего файла или из ресурсов). Компиляция тоже занимает некоторое время, хотя я и постарался ее оптимизировать, по возможности. И самое неприятное следствие – это то, что для тестирования даже факта компилируемости всех вариантов кода необходимо выполнять обширное тестирование. Иначе, ошибка компиляции может возникнуть в приложении, уже переданном пользователю, и исправить эту ошибку может быть проблематично. А вообще, может быть, кто-нибудь найдет для этого пакета еще какие-либо применения.