![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хочу создать формочку из bpl [D7, WinXP]
Oleon © (2004-11-17 17:39:00)создал bpl
в ней одна формочка...
в ней в секции initialization пишу
RegisterClass( TForm1 );
ShowMessage('FFFF');
Потом когда в приложении делаю
LoadPackage('Package1.bpl');
FindClass('TForm1');
он мне показывает FFFFF
а потом пишет, что класс TForm1 не найден...
почему такое может быть?
ведь если показывает FFFF то по идее дожна была и класс зарегистрировать?
Спасибо.
Виктор (2004-11-21 14:27:00) [1]Вот ссылки по которым я начинал разработку:
http://delphi.olympus.ru/dk/mastering/m001.htm
http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/mastering/plugins01.htm
А по конретной строчке в твоей программе я бы посоветовал бы сделать как это работает у меня:
TChildFormClass = class of TChildForm;
private
FChildForm: TChildForm;
begin
TransModuleHandle := LoadPackage(FileLibName);
ChildFormClass := TChildFormClass(FindClass(ChildFormClassName));
FChildForm:=ChildFormClass.Create(self);
,где
ChildFormClass- класс форм которых я вызываю -TChildFormClass.
ChildFormClassName - имя формы которую вызываю, например:
"TfmTools".
FChildForm- экземпляр формы которой создаю.
Для твоего случая переписать все на TForm не представляет сложности. Успехов.
Oleon (2004-11-19 17:23:00) [2]Виктор, я же показал вроде в первом посте.
Самое простое пишу в проекте
LoadPackage('Primer.bpl')
в самой bpl одна формочка, проект о ней не знает...
в той формочке, которая находится в bpl в секции инитиализайтион пишу :
initialization
RegisterClass(TForm1);
ShowMessage('Проверяем выполняется ли');
Так вот ShowMessage сообщение выходит у меня...значит код выполняется...
но когда я после LoadPackage
пишу FindCLass(TForm1), то этот класс не находится...
как это можно сделать правильно?
Если дадите ссылки буду признателен сильно.
Виктор (2004-11-19 15:14:00) [3]Покажи код. У меня работает проект который загружает формы из bpl и показывает и модально и не модально на закладках PageControl-a. Поделюсь опытом и ссылками по которым шагал на пути к познанию.
Oleon (2004-11-19 12:30:00) [4]Нет, я понимаю, что она на диске должна находиться...
Но как так сделать, чтобы exe-шник не знал какую ему bpl подсунут...
я так попробовал подгрузить отвлеченную bpl, а в этом bpl в одной из форм в секции Initialization прописал RegisterClass( TForm1 )
LoadPackage прошел нормально, но вот из приложения это зарегистрированный класс не находится...
это можно как-то побороть или это вообще неправильный подход?
спасибо.
Amoeba (2004-11-18 15:08:00) [5]
> SiJack © (18.11.04 14:56) [4]
Задай свой вопрос в новой ветке, а то его здесь могут и не увидеть.
SiJack (2004-11-18 14:56:00) [6]Доброго времени суток!
Не ответите и на мой вопрос связанный с bpl
Соответственно создаю проек с пустой формой, потом засовываю
ее в пакет компилю получаю bpl. В моем проекте загружаю bpl. Это понятно.
Вопрос: теперь чтобы показать форму нужное ее создать. Я просто перед показом ее проверяю созданаона или нет если нет то создаю.
Может это не совсем правильно ? Подскажите
Amoeba (2004-11-18 12:52:00) [7]
> Oleon © (18.11.04 12:22) [2]
> А можно так сделать, чтобы все bpl хранилась в базе.
> Во время запуска модуля брались оттуда и уже выполнялось
> LoadPackage...
Н а момент загрузки BPL должна находиться на диске, а как она туда попадет - дело 10-е.
Oleon (2004-11-18 12:22:00) [8]А можно так сделать, чтобы все bpl хранилась в базе.
Во время запуска модуля брались оттуда и уже выполнялось LoadPackage...
или так нельзя.
Т.е. чтобы в exe не прописывалось какие bpl я ему подсуну...
Shaman_Naydak (2004-11-17 19:40:00) [9]у тя и пакет и приложение должно компилироваться с включенной галочкой "использовать пакеты". Для того, чтобы на 2их использовалась одна и та же копия vclx.bpl
соответственно