Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Динамическое копирование частей форы из DLL   Найти похожие ветки 

 
LeoTon ©   (2007-06-18 12:22) [0]

Нужно скопировать панель, хранящуюся в DLL в главное окно программы. Ведь, простым присвоением Parent"ов тут не обойдешься...
Я использую такой код, который найден в инете, но не работает:
DLL

function crGetInterface(pn: Cardinal): Pointer; register;
begin
 unForm.crFMain.Panel1.Parent := nil;
 unForm.crFMain.Panel1.ParentWindow := pn;
 Result := unForm.crFMain.Panel1;
end;
exports crGetInterface;

EXE
<credit>
func := GetProcAddress(crH,"crGetInterface");
TPanel(func(Form1.Handle)).Parent := Form1;
</credit>

Загрузка DLL происходит по всем правилам, там нареканий быть ен может. Ошибка срабатывает именно на вызове функции из DLL.

Первоистоник: http://www.delphirus.com/article70.html

Подскажите кому не трудно, где мне себе руки ровнять и как. По возможности, исправте код на правильный...

Зарание, спасибо.


 
vpbar   (2007-06-18 14:02) [1]

Тут телепатов мало. И хоть я не телепат но попробую.
>>connecting to brain .... пи пи
>>ok

Вы проверьте ваша панель вообще создана, ибо если она nil, то ошибка буде
Вот у меня код в длл
procedure CreateForm; register;
begin
Form1:=TForm1.Create(nil);
end;
function crGetInterface(pn: Cardinal): Pointer; register;
begin
Form1.Panel1.Parent := nil;
Form1.Panel1.ParentWindow := pn;
Result := Form1.Panel1;
end;
exports crGetInterface,CreateForm;

Это код в программе
....
procedure CreateForm; register;  external "Project1.dll";
function crGetInterface(pn: Cardinal): Pointer; register;  external "Project1.dll";
....
procedure TForm1.SpeedButton2Click(Sender: TObject);
var P:TPanel;
begin
CreateForm; // если не создать форму в длл то ошибка
P:= TPanel(crGetInterface(self.Handle));// поместим панель на форму
P.Top:=100; // позицию моно поменять
P.Left:=20; //
// хотя позвращать указатель не всегда гуд.
//В приложении придется использовать TPanel что увеличит размер exe
// лучще Хендл возвращать и посылать сообщения
end;
....

И все работает



Страницы: 1 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
2-1186348283
tigraman
2007-08-06 01:11
2007.08.26
Подскажите компонент типа DBGrid


4-1173266962
Vermouth
2007-03-07 14:29
2007.08.26
Список типичных задач в папках (XP)


15-1185270324
DillerXX
2007-07-24 13:45
2007.08.26
Восход Эндимиона - это последняя книга?


15-1185207849
Nikfel
2007-07-23 20:24
2007.08.26
Как платить за размер в интернете.


15-1185522868
Alkid
2007-07-27 11:54
2007.08.26
Зараза vs. Virtual Machine