Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Dll и TreeView


Автор: Гость_BoB 26.7.2004, 12:57
Проблема в следущем: В DLL находится форма, на форме панель, на панели TreeView. Прорисовка контролов производится следущим образом:

fmDLL.TreeView.Parent:= nil;
fmDLL.TreeView.ParentWindow:= hPanel;

Где hPanel - хендл панели, на которой прорисовывается контрол.
Так вот само дерево показывается, картинки дерева прорисовываются, а надписи НЕТ!!! Кстати и картинки тоже странно себя видут, пропадают иногда... Помогите плиз!!!!

Автор: <Spawn> 26.7.2004, 15:45
Какое окно? Модальное или нет? Если не модальное, то ты синхронизуешь обьект Application ДЛЛ-ки с Аппликейшеном твоего проекта?

Автор: ShimON 27.7.2004, 14:08
Цитата
Какое окно? Модальное или нет? Если не модальное, то ты синхронизуешь обьект Application ДЛЛ-ки с Аппликейшеном твоего проекта?

Объясни плиз поподробнее я не очень понимаю, что значит синхронизировать?? Не мог бы ты кусочек кода написать?? Заранее спасибо!!

Автор: <Spawn> 27.7.2004, 15:06
Елси я правильно помню, то в ДЛЛ-ке пиши:
Код
Uses ...Forms;

procedure InitApplication(const App: TApplication);
begin
 Forms.Application := App;
end;

exports
 ...,
 InitApplication;


в своей программе перед созданием окна пишешь:

Код
InitApplication(Application);

Автор: ShimON 27.7.2004, 21:36
Ну если это называется синхронизировать, то я это уже давно сделал... А больше никаких советов нет???

Автор: <Spawn> 27.7.2004, 21:49
ShimON Ну я просто так выразился.smile.gif
Мне, кстати, непонятно, зачем все вот эти манипуляции:

Код
fmDLL.TreeView.Parent:= nil;
fmDLL.TreeView.ParentWindow:= hPanel;


Можно ведь ни чего не трогая разместить на форме, описать логику работы и поместить в ДЛЛ. И еще hParent - это хендл формы ДЛЛки или твоей главной формы?

Автор: ShimON 27.7.2004, 22:07
Цитата
Можно ведь ни чего не трогая разместить на форме, описать логику работы и поместить в ДЛЛ...

Если имеется ввиду чтобы в главной форме уже всё было во время создания формы, а логику писать в длл, то это не подходит по замыслу. Замысел в том чтобы сделать плагин, причём каждый создатель плагина должен мочь рисовать на моей панели всё что захочет...


Цитата
И еще hParent - это хендл формы ДЛЛки или твоей главной формы?

хендл главной формы, а что ты имел ввиду говоря зачем те строки которые я написал??? А как по другому прорисовать контролы из длл на главной форме, может тебе это проще будет предложить??? Заранее спасибо smile.gif

Автор: <Spawn> 28.7.2004, 11:11
ShimON
Контролы из ДЛЛки не осбоенно то дружат с приложением. Попробуи использовать, либо пакеты Дельфи, либо пиши ActiveX smile.gif

Автор: ShimON 28.7.2004, 14:51
Цитата
ShimON
Контролы из ДЛЛки не осбоенно то дружат с приложением. Попробуи использовать, либо пакеты Дельфи, либо пиши ActiveX smile.gif

Спасибо за совет, но пакеты мне не подойдут по причине того, что требуется хоть какая-нибудь универсальность, а вот насчёт ActivеX я подумаю, правда с ними я ещё ни разу не работал, расскажи, пожалуйста, где можно достать инфу и как это можно применить в моей ситуации.

Автор: <Spawn> 29.7.2004, 20:01
Для того чтобы создать ActiveX из компонента достаточно пойти в New->Other->ActiveX->ActiveX Control и выбрать класс из которого будет слеплен ActiveX. После этого регаешь его и подключаешь к своему проекту полученый TLB файл. Когда нужно внести изменения - то просто правишь код и формирушь новый .ocx файл. Для более сложных структур типа панель или группа с разными компонетами, пока приходит только следующая мысль - пишется наследник от нужного класса, на котором динамически формирются нужные контролы и реализуется вся функциональность, после чего регистрируется данный класс и опять же лепится ActiveX за пару кликов. Но вот только вопрос - зачем тебе такого рода контролы в твоем приложении, если они все равно не могут общаться с этим приложением стандартными способами(ну разве что организовать обмен сообщениями или создать COM сервер из твоего приложения, для получения внешних контролов доступа к каким то его свойствам или воспользоваться какой то другой технологией)?

Автор: ShimON 30.7.2004, 20:12
Спасибо тебе <Spawn> Я буду думать.... В любом случае ты мне очень помог!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)