Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.052 c
1-1119483831
paule
2005-06-23 03:43
2005.07.11
Прогресс бар


1-1119472018
TStas
2005-06-23 00:26
2005.07.11
КАк прокрутить RichEdit на выделенную облась


1-1118677570
Earth
2005-06-13 19:46
2005.07.11
Edit - выделение


14-1118754991
X-Disa
2005-06-14 17:16
2005.07.11
Лагает винда с запуском exe!!!


1-1118784256
сабжект
2005-06-15 01:24
2005.07.11
Как переименовать секцию в INI файле ?