Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Экспорт TToolBar из Dll-ки   Найти похожие ветки 

 
mabus ©   (2003-10-27 18:52) [0]

Приветствую всех! Возникла необходимость отобразить на главной форме ToolBar из другой формы, которая находится в Dll. Я внедряю эту дочернюю форму на главную кодом вроде этого в Dll:
1) Добавляю в дочернюю форму конструктор:
constructor TChildForm.Create(ParentFormHandle:THandle);
begin
inherited CreateParented(ParentFormHandle);
self.BorderStyle := bsNone;
end;
2)Устанавливаю размер:

procedure CreateChildForm(AppHandle:THandle;
ParentFormHandle:THandle;
SameSizeRect:TRect);
var ChildForm:TChildForm;
begin
Application.Handle:=AppHandle;

ChildForm := TChildForm.Create(ParentFormHandle);
ChildForm.Left := SameSizeRect.Left;
ChildForm.Top := SameSizeRect.Top;
ChildForm.Height := SameSizeRect.Bottom - SameSizeRect.Top;
ChildForm.Width := SameSizeRect.Right - SameSizeRect.Left;
end;

А вот перенести ToolBar на главную форму не получается. Если обе формы находятся в длл или в основной программе - все нормально, а вот если одна в длл, а вторая - в основном проекте - никак. Выдается ошибка типа
"Cannot assign a TFont to a TFont". Может кто сталкивался с подобным?


 
Юрий Зотов ©   (2003-10-27 20:04) [1]

DLL и EXE компилятся, как два отдельных самостоятельных проекта, которым друг о друге ничего не известно. Соответственно, в каждом из них компилятор строит СВОИ таблицы с информацией о классах (VMT и пр.). То есть, получается, что класс TAnyClass в EXE и тот же самый класс в DLL - это два РАЗНЫХ класса. Отсюда и идут ошибки типа "Cannot assign a TFont (из DLL) to a TFont (в EXE) ".

Если все общие классы вынести в пакет и оба проекта (EXE и DLL) скомпилировать с run-time пакетами (включая пакеты VCL), то все будет нормально. Другой вариант - использовать COM.


 
Юрий Федоров ©   (2003-10-27 20:42) [2]

Еще вариант - создавать TChildForm обычным конструктором
inherited Create(nil);
А потом установить ей ParentWindow (HWND)


 
mabus ©   (2003-10-28 00:02) [3]

Ребята, спасибо за внимание. Обидно, что не получится напрямую изменить место отображения компонента, но тут уж ничего не поделаешь. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
14-41882
Ysaev Grigoriy
2003-10-21 16:47
2003.11.13
Програмирование как искусство.


6-41794
Dennisius
2003-08-31 22:10
2003.11.13
Запуск


14-42027
Checist [root]
2003-10-16 16:25
2003.11.13
Исключение, блин


7-42206
DVM
2003-09-04 18:11
2003.11.13
Где в Windows хранится обозначение года (г.) на текущем языке.


1-41167
lirjin
2003-11-01 09:40
2003.11.13
Общие вопросы