![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Christoph |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 667 Регистрация: 23.1.2008 Где: Харьков Репутация: 5 Всего: 11 |
Интересует вопрос как разместить в длл какой то ресурс...любой...
нашел пример, как в длл закинуть форму, вот эта статья http://www.delphimaster.ru/articles/usedll/index.html
Не понимаю самого кода...ни названия длл ничего...как оно туда пишет не понятно ![]() Помогите разобраться. Или показать другой пример как в длл закинуть какой то ресурс... Это сообщение отредактировал(а) Christoph - 25.8.2008, 23:04 -------------------- ![]() |
|||
|
||||
Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
А что не понятно? Это и есть длл. Как она называется, не имеет значения. Форма создаётся динамически.
|
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Christoph, посмотри прикрепленные файлы из вот этой вот темы:
http://forum.vingrad.ru/forum/topic-225395.html Там форму в ДЛЛ пихали. А ресурсы, в прямом смысле слова, как в ДЛЛ пихать посмотри например в примере, который я когда то давал: http://forum.vingrad.ru/forum/topic-214004...y1530458/0.html |
|||
|
||||
Christoph |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 667 Регистрация: 23.1.2008 Где: Харьков Репутация: 5 Всего: 11 |
Кто то может подкинуть теорию или статейку....про то как закинуть какой ресурс в файл мне THandle дал ссылки ...но я не могу понять порядок действий...А нельзя ли прописать в разделе описании логики, ну например процедуру для загрузки рисунка
-------------------- ![]() |
|||
|
||||
THandle |
|
||||||||||||||||||||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Christoph, ладно...
Разместим форму в DLL, и будем загружать её двумя способами: явно и неявно. Явная загрузка будет осуществляться с помощью функции LoadLibrary, получении адреса нужной нам процедуры/функции с помощью GetProcAddress, вызова данной процедуры(забегая вперед скажу - процедура у нас будет одна: она будет показывать форму, дожидаться когда пользователь с ней поработает, после чего уничтожит форму), и последующего освобождения загруженной библиотеки с помощью FreeLibrary. Неявная же загрузка будет произведена с помощью экспортирования нашей процедуры из библиотеки. При неявной загрузке библиотеки, она будет загружена вместе с программой, при явной - только тогда, когда нам это требуется(чтоб память не кушать). После всех этих загрузок выгрузок мы еще попробуем пихать в ресурсы библиотеки картинки. Итак, начнем. Явная загрузка: Открываем Delphi. У меня сейчас 7 версия. Закрываем все открытые проекты с помощью File->Close All. И создаем новый проект - библиотеку DLL. File -> New -> Other -> DLL wizard Дожен появится проект с вот таким кодом(ненужные нам комментарии опущены):
Теперь добавим в наш проект форму: File -> New -> Form Как можно заметить по изменившемуся коду библиотеки - форма добавилась. Теперь она в DLL:
Положим на форму для красивости кнопку. По щелчку на ней будет показываться приветствие. Вот обработчик OnClick кнопки:
Наша форма готова к бою. Теперь самое главное - напишем процедуру, которая будет показывать нашу формочку. Объявим её в разделе interface модуля нашей формы:
Теперь опишем её в разделе implementation:
Модуль с формой должен теперь стать такого вот вида:
Тепрь осталось только добавить нашу процедуру ShowForm в экспорт библиотеки: Пишем в коде самой DLL следующее:
Код библиотеки теперь должен выглядеть так:
Все. Теперь жмем File -> Save All и сохраняем библиотеку и форму в один каталог. Проект библиотеки я назвал DLLProj. Теперь осталось только скомпилировать библиотеку нажав CTRL + F9. Все. Снова жмем Close All в Delphi. Сейчас мы создадим программу, которая эту DLL будет загружать. Жмем File -> New-> Application. Сохраняем этот проект в папку, куда уже была сохранена библиотека. Теперь импортируем нашу функцию ShowForm. Пишем в разделе implementation формы нашей программы следующее:
Все. Теперь эту процедуру можно вызывать. Кстати, скажу. В delphi есть такие директивы, как name и index. С помощью них можно было экспортировать нашу процедуру из DLL под каким-то именем или номером. Но тут нам это не требуется. Так, я что-то отвлекся. Кладем на форму в нашем приложении кнопку и в её обработчике вызываем нашу функцию, полученную из библиотеки:
Модуль формы в приложении теперь должен выглядеть вот так:
Все!!! Сохранить проект мы уже сохранили - теперь компилируем и запускаем. Результат - при нажатии кнопки из программы показывается форма находящаяся в DLL. Пример всего этого дела в аттаче. Об остальном напишу чуть позже. Это сообщение отредактировал(а) THandle - 26.8.2008, 17:45 Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
||||||||||||||||||||||
|
|||||||||||||||||||||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Ну чтож. Не вижу ничего такого, что мешало бы мне продолжить повествование
![]() Итак, неявная загрузка: Создаем библиотеку. (Как это делать описано в предыдущем посте) Точно так же создаем форму, пишем тот же обработчик для положенной на нее для красоты кнопки. В принципе все это можно делать читая предыдущий пост. ![]() В общем делаем точно такую же DLL. Можно даже ту скопировать ![]() Сохраняем её в какую-нибудь папочку, компилируем... Теперь закрываем, как и в прошлый раз, все проекты в Delphi, и создаем новое приложение. Никаких процедур из библиотеки не импортируем, а сразу кладем на форму кнопку и пишем такой вот обработчик:
Все. Сохраняем проект в папочку вместе с библиотекой и можно запускать. Пример в аттаче. Сейчас буду писать про ресурсы. Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
THandle |
|
||||||||||||||||||||||||||||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Ну а теперь последнее - загрузим в ресурсы DLL картинку.
Какие типы данных можно запихнуть в ресурсы - можно посмотреть тут: http://msdn.microsoft.com/en-us/library/aa381043(VS.85).aspx Так для чего нам нужно помещать нашу картинку в ресурсы? 1. Чтобы не таскать отдельных за своей программой - картинка будет находится в ресурсах библиотеки/программы(это смотря куда её запихнуть!!!). К тому же отдельный файл легко можно удалить - и все, наша программа останется без картинки. ![]() 2. Нам надобно научится это делать. Не так ли? Почему мы будем помещать картинку именно в ресурсы DLL, а не программы? Да, патаму чта аффтару темы так захотелось(в ICQ) ![]() Итакс, начнем. Сначала мы создадим папку, где разместим проект. У меня путь к ней будет такой:
Так вот. Папку создали. Надеюсь с этим особых проблем не возникло... Едем дальше... Теперь берем любую картинку с расширением BMP, лучше не очень большую. Смысла в большой нету. Копируем её в нашу папку. Картинку у меня зовут так:
![]() Так. Картинка есть. Теперь открываем Delphi. (У меня, как вы наверное знаете, на данный момент стоит 7 версия. Надо ставить 2007... но лень...) Жмем Филе->Клосе Алл. Теперь создаем DLL. Создавать будем так: File -> New -> Other -> DLL Wizard Создав библиотеку мы сразу же сохраняем её в нашу папку. Я назвал проект DLLProj.dpr. Теперь, (Внимание!!!) сворачиваем, а не закрываем Delphi. Открываем любой текстовый редактор(я предпочитаю Notepad++ или ASUE(виноват - "водка"). Создаем пустой текстовый документ. Сохраняем его в нашу папочку под следующим именем:
Примечание: в дальнейшем, если у вас имена файлов не совпадают с моими - настоятельно рекомендую везде писать имена СВОИХ файлов, а не моих. Теперь пишем в этом файле:
Что это такое? Это описание файла ресурсов с одним пунктом данных внутри. Это - наша картинка. Тут: KARTINKO - имя, с которым данные будут помещены в ресурс. BITMAP - тип данных. kartinko.bmp - файл, откуда эти данные(картинка) берутся. Теперь сохраняем файл. Текстовый редактор закрываем. Теперь запускаем командную строку Windows(cmd), и пишем в ней следующее:
Если все прошло успешно и компилятор ресурсов, который мы вызывали в командной сроке, не выдал никаких ошибок - в нашей папке должен появится файл:
Если это так, то едем дальше, иначе - устраняем ошибки компиляции ресурса. После этого разворачиваем с панели задач Delphi. Все остальные наши манипуляции будут происходить там. Теперь подключим наш ресурс к нашей же(ну надо же!!!) DLL, с помощью директивы компилятора {$R}:
Наш проект выглядит теперь так:
Теперь жмем пункт меню New -> Form. Создаем форму. Кладем на форму два компонента - TImage и TButton. Так зачем мы выполняли столько манипуляций, когда можно добиться того же результата просто загрузив нужную картинку в Image с помощью свойства Picture? ![]() Эээ... Товарищи... Надо все уметь делать вручную ![]() Так вот. Положили мы теперь эти компоненты. Что дальше? А дальше тыкаем два раза на кнопке мышем, чтобы создать обработчик события OnClick. В нем мы будем загружать картинку из ресурсов в DLL в наш компонент TImage. Как вообще можно загрузить картинку из ресурсов? Вариантов очень много. Это и многофункциональный LoadImage, и более мелкоспециализированные функции типа LoadBitmap, LoadIcon, это и ресурсный поток... В TBitmap можно еще загрузить с помощью методов:
В общем вариантов уйма и советую вам со всеми познакомится ![]() Как видно из описания функции - первый параметр это дескриптор модуля, откуда будет браться ресурс. В нашем случае это HInastance. Второй параметр это имя картинки в ресурсе:
Теперь осталось только написать в обработчике OnClick нашей злостчастной кнопки код на загрузку картинки из ресурса:
Теперь нам осталось только где-то создать наше окошко. Опять будем писать процедуру и экспортировать её из DLL? Фигвам, а не процедура. Напишем все в самой точке входа DLL(вообще есть всякие DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, но с ними мы заморачиваться не будем, а сделаем все просто и ясно:
Да. Именно так теперь выглядит код самой библиотеки. Теперь жмем File->Save all. Сохраняем рядом с проектом библиотеки еще несохраненную форму. Ну и саму DLL естественно сохраняем. Теперь компилируем с помощью CTRL+F9 и спокойно жмем File->Close ALL. Далее создаем новый проект: File->New->Application. Бросаем на форму кнопку. Пишем в её обработчике:
Сохраняем проект в нашу папочку. Компилируем. Запускаем. Все. Проект в аттаче. Присоединённый файл ( Кол-во скачиваний: 20 ) ![]() |
||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |