Главная страница
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.025 c
1-41333
[BAD]Angel
2003-10-30 23:07
2003.11.13
Проверка существования файла... :(


8-41733
EvgenTss
2003-06-01 20:54
2003.11.13
требуется слить ряд файлов в один...


14-42013
gn
2003-10-17 07:11
2003.11.13
вот же буржуи


3-40934
S.A.S.
2003-10-17 16:36
2003.11.13
DBExpress


1-41486
Dunmer
2003-10-27 12:47
2003.11.13
Как проверить введен IP адресс или URl в едите?