Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизСвязь Dll и TPanel Найти похожие ветки
← →
Warstone © (2005-06-12 23:23) [0]Ситуация: Есть приложение, в нем есть панель DllPanel. Есть Dll, в которой при вызове функции RunDll(APanel:TPanel); stdcall; В эту панель пихаются компоненты TButton, TLabel. Для отрисовки этих компонент надо Установить у них св-во Parent:=APanel. На это месте возникает ошибка EConversionError Cannot assign TFont to TFont - Как с этим бороться или обойти это?
Начальная задача: Из Dll создавать компоненты на компоненте родителе - приложения
← →
Defunct © (2005-06-12 23:29) [1]классическая проблема.
> Как с этим бороться или обойти это?
Компилировать и хост приложение и DLL с галочкой Build with Run-Time packages.
← →
Warstone © (2005-06-12 23:59) [2]Большое ПАСИБО! Всё работает. Но чтоб до конца... Зачем это надо было сделать?
← →
-=XP=- © (2005-06-13 00:11) [3]TFont в приложении и TFont в DLL - разные классы. Более того, для DLL класс TFont из приложения - не класс вовсе, а некая абстрактная ссылка. И наоборот. Все это из-за того, что RTTI (Run-Time Type Information) в DLL и в приложении - разные. Компиляция с использованием Run-Time Packages позволяет объединить RTTI о некоторых типах данных воедино. Но вообще, предавать из DLL в приложение, и из приложения в DLL ссылки на объекты - порочная практика. Ибо достаточно будет перекомпилировать какой-то (обычно сторонний) пакет отдельно от DLL или приложения - и вся эта связка рухнет с грохотом.
← →
Profi © (2005-06-13 14:14) [4]Warstone © (12.06.05 23:59) [2]
А чтобы все работало без Build with Run-Time packages, то нужно делать через interface (как сам еще не разобрался).
← →
VVV-First (2005-06-13 15:51) [5]а я делал так
Parent := nil
ParentWindow := parent (тот на который ставится компонент) почему так сам незнаю ено у меня работало:)_
← →
Profi © (2005-06-13 16:18) [6]VVV-First (13.06.05 15:51) [5]
Блин, ну ты гений! Я мозги парил, а оказалось действительно работает! Зато с plugin"ом через interface разобрался.
← →
VVV-First (2005-06-13 16:24) [7]
> Я мозги парил,
ха ты парил , сам два дня не спал:)))))))))
← →
Profi © (2005-06-13 16:26) [8]VVV-First (13.06.05 16:24) [7]
Я уже около месяца мучился. Читал все про COM и Interface. Да еще экзамены приходилось сдавать.
← →
VVV-First (2005-06-13 16:28) [9]ну сочувствую только:)
← →
Profi © (2005-06-13 16:29) [10]VVV-First (13.06.05 16:28) [9]
Кстати. Чего-то не могу ничего на OnClick повесить. Ошибок нет, но ничего и не происходит.
← →
VVV-First (2005-06-13 16:31) [11]ну чего так я все вещал очень даже хорошо получается
← →
VVV-First (2005-06-13 16:31) [12]как ты это делаешь? и что он говорит?
← →
Profi © (2005-06-13 16:32) [13]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:35) [14]и это что все в библиотека напиванно?
← →
Profi © (2005-06-13 16:38) [15]VVV-First (13.06.05 16:35) [14]
Короче ясно. В том то и дело, что мне нужна такая поддержка plugin"ов, чтобы сторонний разработчик если хотел, мог добавлять свои кнопки на любой компонент (Panel или саму Форму) и присваевать им свои процедуры.
← →
VVV-First (2005-06-13 16:45) [16]я делал так
type
Tmy = class
procedure Onclick(sendr:Tobject);
end;
а потом объявлял переменную этого типа и присваивал его он-клик к тому компоненту , которому нам надо
← →
Profi © (2005-06-13 16:51) [17]VVV-First (13.06.05 16:45) [16]
Ладно, буду еще думать!
← →
VVV-First (2005-06-13 16:52) [18]давай:)
← →
Profi © (2005-06-13 16:54) [19]VVV-First (13.06.05 16:52) [18]
Короче замес в том, что не обрабатывается именно само нажатие кнопки. Событие не передается в модулью
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.055 c