Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизЭкспорт 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c