Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MDI in DLL


Страницы:   1 2

Feds ©   (2007-04-02 14:10:00) 

День добрый!
Сталкнулся с проблемой и никак не могу решить!
Ситуация. Создал МДИ-форму, положил ее в ДЛЛ. Подгружаю Длл. Создаю форму. Форма создается. Все работает. НО!
как бы не передается полностью ей управление. т.е. таб бегает по контролам главной форме, хотя активно мое МДИ окно.
В чем может крыться подвох?


Frozzen   (2007-04-04 06:07:00) [1]

Действительно наверно выход переход на бпл. С длл все непросто там с классами выходит


Сергей М.   (2007-04-03 16:41:00) [2]

Ну и чаво ты этим кодом хотел сказать ?

Ну да, ну любой объект-наследник TForm тем самым заносится в упомянутый список...

и чаво ?

И это - "регистрация класса" называется ?


vl_chel   (2007-04-03 16:37:00) [3]

Sorry в Screen

constructor TCustomForm.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
 inherited Create(AOwner);
.........
 Screen.AddForm(Self);
end;

procedure TScreen.AddForm(AForm: TCustomForm);
begin
 FCustomForms.Add(AForm);
 if AForm is TForm then
 begin
   FForms.Add(AForm);
   Application.UpdateVisible;
 end;
end;


Сергей М.   (2007-04-03 16:22:00) [4]


> при создании окна через класс TForm, экземпляр окна регистрируется
> в объекте Application


Чавой-то ?

Цитируй код ..


vl_chel   (2007-04-03 16:19:00) [5]

Но при создании окна через класс TForm, экземпляр окна регистрируется в объекте Application. Эти экземпляры для библиотеки и приложения разные, форма будет нормально создаваться, в принципе корректно работать до тех пор пока ее модель поведения не пересекается с другими формами приложения, поэтому и надо согласовывать работу экземпляров Application. Для MDI приложений это намного сложнее - в свое время изза этого отказался от этой архитектуры.

В классической литературе (Том Сван, Тексейра) вызов функции библиотеки, создающей экземпляр TForm и называется "экспортом формы из библиотеки"


Сергей М.   (2007-04-03 15:48:00) [6]

Это называется "вызываю некую ф-цию, которую экспортирует моя dll".


vl_chel   (2007-04-03 15:39:00) [7]

>>Ситуация. Создал МДИ-форму, положил ее в ДЛЛ. Подгружаю Длл. Создаю форму. Форма создается. Все работает. НО!

А как это называеться?


Сергей М.   (2007-04-03 15:32:00) [8]


> vl_chel ©   (03.04.07 15:25) [21]
>
> Если хотите нормально экспортировать форму


dll не экспортирует никаких "форм".
dll экспортирует именованые и/или индексированные адреса.
Точно так же как и bpl - разницы никакой.


vl_chel   (2007-04-03 15:25:00) [9]

Если хотите нормально экспортировать форму из dll то в нее надо передать Application.Handle приложения и связать с объектом Application который в dll
А для MDI Child (наверное) нужно передать Handle MDI главного окна
и не забыть все востановить при выгрузки dll


Сергей М.   (2007-04-03 14:14:00) [10]

Тебе уже сказано - пользуй пакеты (bpl), там под твои задачи "заточено" все.


Lex3912   (2007-04-03 14:09:00) [11]

ну... дык как получается быть с использованием одного и тогоже класса компонента в двух разных длл, одноврменно подгружаемых? Не понимаю. Так как я использую компонент, класс нужен в обоих длл.. Каким образом чего объявляется в таких ситуациях?


Сергей М.   (2007-04-03 13:59:00) [12]

"поместил туда форму" = декларировалкласс формы !


> я сам руками нигде не прописывал регистрацию классов


Регистрация декларированного тобой класса в RTTI происходит в ран-тайм, т.е. при загрузке модуля.


Lex3912   (2007-04-03 13:54:00) [13]

я сам руками нигде не прописывал регистрацию классов....


Lex3912   (2007-04-03 13:50:00) [14]

т.е. я создал 2 длл. поместил туда форму. на форме разместил сх-компонент. скомпилировал с ран-тайм. и при загрузке обоих длл получаю эту ошибку...


Lex3912   (2007-04-03 13:43:00) [15]

я возможно покажусь тормозом, но где они деклариуются? откуда вырезать?


Сергей М.   (2007-04-03 13:38:00) [16]


> Обе длл используют сх-компаненты


Да по барабану что они используют)

Важно что они декларируют!


Сергей М.   (2007-04-03 13:36:00) [17]


> длл компилится не будет


Это как ?

С луны готовая свалится что ли ?)


Lex3912   (2007-04-03 13:26:00) [18]

Обе длл используют сх-компаненты. Соответсвенно в uses имеют один и тот жде модуль с этим класом.


Lex3912   (2007-04-03 13:13:00) [19]

Так скорее всего не получится, потому как длл компилится не будет. Ругается в частности на TcxRect.


Сергей М.   (2007-04-03 12:47:00) [20]


> Как это обрулить?


"Обрулить" оч просто - убрать к чертям дублирование декларации одного и того же класса в более чем одном из взаимодействующих модулей, обращающихся к этому классу.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо