![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
Вот тут какой еще вопрос есть:
можно ли написать(и если ДА, то КАК) dll, которая могла бы создавать компоненты на форме и их события переводить на другую функцию их библиотеки. Например, передаем библиотеке TPanel -> она создает на нем кнопку, событие OnClick которой обрабатывается тоже в библиотеке Благодарен за помощь, UVSoft. --------------------
Старый глюк лучше новых двух. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
uvsoft Используй Package-и и будет тебе счастье )
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
А что это и с чем едят?8) --------------------
Старый глюк лучше новых двух. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Конечно можно. Объяви в библиотеке указатель на панель и кнопочку.
В секции инициализации обнули их (т.е. :nil) Потом сделай функцию, которая получает указатель на панель и записывает ее в тот указатель. Потом создай кнопочку через второй указатель. Дай ей в свойство parent ту панель и задай Left и Right. Все. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
neutrino! Я был бы очень признателен, если бы ты написал код этой самой ДЛЛ. Напиши, plz, а то твои слова что-то мало сказали мне:/
--------------------
Старый глюк лучше новых двух. |
|||
|
||||
| uvsoft |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 4.2.2003 Репутация: нет Всего: нет |
HELP
--------------------
Старый глюк лучше новых двух. |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
neutrino Если ты что-то ответишь, это поможет сразу двум людям (еще и мне)
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| <Spawn> |
|
||||||||||||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Сам сейчас нуждаюсь в написании Plugin-ов к своей проге и начал детально изучать пакеты. Приведу примеры испоьзования 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> - 8.11.2003, 10:58 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
||||||||||||
|
|||||||||||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Я разобрался в чем дело с LoadPackage. Для этого нужно компилить свою прогу с Build with runtime package.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
![]()
|
| Правила форума "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. |