![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Связь 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.