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

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

Связь Dll и TPanel [D6, D7, WinXP]


Warstone ©   (2005-06-12 23:23:00) 

Ситуация: Есть приложение, в нем есть панель DllPanel. Есть Dll, в которой при вызове функции RunDll(APanel:TPanel); stdcall; В эту панель пихаются компоненты TButton, TLabel. Для отрисовки этих компонент надо Установить у них св-во Parent:=APanel. На это месте возникает ошибка EConversionError Cannot assign TFont to TFont - Как с этим бороться или обойти это?
Начальная задача: Из Dll создавать компоненты на компоненте родителе - приложения


Profi   (2005-06-13 16:54:00) [1]

VVV-First   (13.06.05 16:52) [18]
Короче замес в том, что не обрабатывается именно само нажатие кнопки. Событие не передается в модулью


VVV-First   (2005-06-13 16:52:00) [2]

давай:)


Profi   (2005-06-13 16:51:00) [3]

VVV-First   (13.06.05 16:45) [16]
Ладно, буду еще думать!


VVV-First   (2005-06-13 16:45:00) [4]

я делал так

type
Tmy = class
procedure Onclick(sendr:Tobject);
end;

а потом объявлял переменную этого типа и присваивал его он-клик к тому компоненту , которому нам надо


Profi   (2005-06-13 16:38:00) [5]

VVV-First   (13.06.05 16:35) [14]
Короче ясно. В том то и дело, что мне нужна такая поддержка plugin'ов, чтобы сторонний разработчик если хотел, мог добавлять свои кнопки на любой компонент (Panel или саму Форму) и присваевать им свои процедуры.


VVV-First   (2005-06-13 16:35:00) [6]

и это что все в библиотека напиванно?


Profi   (2005-06-13 16:32:00) [7]

VVV-First   (13.06.05 16:31) [11]
Я так делаю:

procedure TForm1.Button1Click(Sender: TObject);
var P:Tpanel;
b:Tbutton;
begin
P:=TPanel(Inf.GetMainForm.FindComponent('ManagPanel'));
b:=Tbutton.Create(nil);
b.Caption:='Урааааааа!';
b.Parent:=nil;
b.ParentWindow:=p.Handle;
b.Top:=10;
b.Left:=10;
b.OnClick:=Form1.ClickButton;
end;


Procedure TForm1.ClickButton(Sender:Tobject);
begin
showmessage('');
end;


Ничего!


VVV-First   (2005-06-13 16:31:00) [8]

как ты это делаешь? и что он говорит?


VVV-First   (2005-06-13 16:31:00) [9]

ну чего так я все вещал очень даже хорошо получается


Profi   (2005-06-13 16:29:00) [10]

VVV-First   (13.06.05 16:28) [9]
Кстати. Чего-то не могу ничего на OnClick повесить. Ошибок нет, но ничего и не происходит.


VVV-First   (2005-06-13 16:28:00) [11]

ну сочувствую только:)


Profi   (2005-06-13 16:26:00) [12]

VVV-First   (13.06.05 16:24) [7]
Я уже около месяца мучился. Читал все про COM и Interface. Да еще экзамены приходилось сдавать.


VVV-First   (2005-06-13 16:24:00) [13]


> Я мозги парил,
ха ты парил , сам два дня не спал:)))))))))


Profi   (2005-06-13 16:18:00) [14]

VVV-First   (13.06.05 15:51) [5]
Блин, ну ты гений! Я мозги парил, а оказалось действительно работает! Зато с plugin'ом через interface разобрался.


VVV-First   (2005-06-13 15:51:00) [15]

а я делал так
Parent := nil
ParentWindow := parent (тот на который ставится компонент) почему так сам незнаю ено у меня работало:)_


Profi   (2005-06-13 14:14:00) [16]

Warstone ©   (12.06.05 23:59) [2]
А чтобы все работало без Build with Run-Time packages, то нужно делать через interface (как сам еще не разобрался).


-=XP=-   (2005-06-13 00:11:00) [17]

TFont в приложении и TFont в DLL - разные классы. Более того, для DLL класс TFont из приложения - не класс вовсе, а некая абстрактная ссылка. И наоборот. Все это из-за того, что RTTI (Run-Time Type Information) в DLL и в приложении - разные. Компиляция с использованием Run-Time Packages позволяет объединить RTTI о некоторых типах данных воедино. Но вообще, предавать из DLL в приложение, и из приложения в DLL ссылки на объекты - порочная практика. Ибо достаточно будет перекомпилировать какой-то (обычно сторонний) пакет отдельно от DLL или приложения - и вся эта связка рухнет с грохотом.


Warstone   (2005-06-12 23:59:00) [18]

Большое ПАСИБО! Всё работает. Но чтоб до конца... Зачем это надо было сделать?


Defunct   (2005-06-12 23:29:00) [19]

классическая проблема.
> Как с этим бороться или обойти это?
Компилировать и хост приложение и DLL с галочкой Build with Run-Time packages.


Наверх

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