![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Wowa |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Приведу примеры испоьзования Pack-ей.
Статическое подключение пакетов. Создаешь новую форму(размещаешь на ней нужные компоненты и пишешь код), после чего сохраняешь ее например в C:\Borland\Delphi7\Projects\Plugins\. Создаешь свой пакет(не закрывая созданной формы) - Components>Instal Component. Там выбираешь вкладку Into New Package. Указываешь путь к своей форме и прописываешь название нового пакета(в эту же директорию). В окне созданного пакета открываешь Options>Directories/Conditionals: в Output directory пишешь путь до текущего местонахождения пакета, что бы пакет результирующие файлы сохранялись не в Project\Bpl а в твоем каталоге. Так же указываешь этот путь в DCP Outpu directory (В данном примере C:\Borland\Delphi7\Projects\Plugins). После чего сохраняешь и компилишь пакет. Инсталить его нет необходимости. Закрываешь окно с твоим пакетом. Создаешь новый проект в этом же каталоге и в его uses добавляешь название юнита твоей формы в этом пакете, т.е. если ты не изменил его названи это Unit1, тогда код будет выглядеть примерно так: В действительности код формы в пакете будет включен в результирующий exe файл, для того чтобы этого не было необходимо использовать пакеты времени исполнения и свой пакет включить к списку пакетов времени исполнения(смотри Project>Options>Packages Runtime packages тут установи галочку Build with runtime packages, если в списке пакетов нету твоего пакета, то добавь его кнопкой Add). Загрузка пакетов во время исполнения программы Наиболее интересный на мой взгляд способ, но тут я стокнулся с одной проблемой, которую уже как 2 часа не могу решить(может кто поимет в чем дело). Открываешь созданный тобою уже пакет и добавляешь такой код. Данный код нужен для того чтобы получить доступ к этому классу функцией GetClass. Сохраняешь свой пакет и компилишь его. Создаешь тестирующее приложение:
Если тебе нужно получить доступ к полям свойствам твоей формы(не стандартным), то этого можно добиться при помощи SetPropValue (необходимо подключить модуль TypInfo), например:
Но эти свойства должны быть обязательно обьявлены в секции published. Проблема, о которой я уже писал, заключается в том, что когда я вызываю GetClass он всегда возвращает nil. Хотя похожий пример из книги "Delphi 6" Марко Кенту работает нормально. Может у кого есть идей на этот счет? Таким образом, если разобраться с этой проблемой, то можно написать класс для юзания плагинов, например в своей программе можно отвести соответствующую директорию и при каждом запуске проги получать из нее все все файлы и загружать их. Чем я и займусь, если эта проблема решится. Если тебе нужно разместить в пакете кнопку с реакцией на нажатие, то можно, например, сделать так: Создаешь наследника от нужного тебе компонента(в данном случае от TButton), причем он должен быть в свою очередь наследником TPersistent, если ты будешь подключать пакет динамически, для генерироавния соответствующей RTTI инфы. Вот пример для TButton:
Запихиваешь кнопку в пакет приведенным выше способом. Твоя прога(Подключение с помощью LoadPackage пока не могу показать, так как не разобрался почему GetClass возвращает nil):
Файл UMyButton.pas можешь удалть из этого каталога, чтобы увидеть что исползуется юнит в bpl. Ну вот пока и все. Надеюсь кто нить знает причину моей ошибки при динамическом подключении, так как мне самому это интересно. Автор: <Spawn> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |