Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PageControl и форма из DLL 
V
    Опции темы
LordMadman
Дата 19.2.2011, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.7.2009

Репутация: нет
Всего: нет



Есть главная форма и dll. Форма из dll вставляется в PageControl.
Проблема - после вставки формы, она не отображается. Появляется только, после перехода на другой TabSheet и возврата на TabSheet-родитель

Главный модуль:
процедура показа формы из dll
Код

procedure TMainForm.Button4Click(Sender: TObject);
begin
  with Forma do
   begin
     Parent := TabSheet1;
     Top := 0;
     Left := 0;
     Width := Parent.ClientWidth;
     Height := Parent.ClientHeight;
     Visible := True;
     Repaint;
     Refresh;
     Update;
     Invalidate;
   end;
  with TabSheet1 do
   begin
     Repaint;
     Refresh;
     Update;
     Invalidate;
   end;
end;


Код

 Forma: TForm;
...
procedure TMainForm.Button1Click(Sender: TObject);
begin
   DllHandle := LoadLibrary('ProjectDll');
   ProcAddr := GetProcAddress(DllHandle, 'ProvaChild');
   if ProcAddr <> nil then
   begin
      ProvaChild := ProcAddr;
      Forma := ProvaChild(Application,Self);
   end;
end;

Код из dll
Код

function ProvaChild(ParentApplication: TApplication; ParentForm: TForm): TForm; export; stdcall;
var
  DllProc: Pointer;             { Called whenever DLL entry point is called }

begin
   Application:=ParentApplication;

   Form1:=TForm1.Create(ParentForm);
   Form1.MyParentForm:=ParentForm;
   Form1.MyParentApplication:=ParentApplication;
   Result := Form1;
end;


PM MAIL   Вверх
Gwire
Дата 20.2.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



Попробу вместо "Visible := True;" вписать "Show;"
Разница не большая, но все же может BringToFront сотворит чудо (я не проверял).
Не один раз создавал формы из библиотек - такой как у тебя проблемы не было.
Код

Top := 0;
Left := 0;
Width := Parent.ClientWidth;
Height := Parent.ClientHeight;
// Можно заменить на 
Align = alClient;




PM MAIL   Вверх
LordMadman
Дата 23.2.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.7.2009

Репутация: нет
Всего: нет



Не помогает
PM MAIL   Вверх
Gwire
Дата 23.2.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4



Я когда-то создавал пост: 
Delphi: WinAPI и системное программирование/p-2126138.html
Там все заработало. Пробуй через Handle окна. 


Это сообщение отредактировал(а) Gwire - 23.2.2011, 15:54
PM MAIL   Вверх
gesper
Дата 15.9.2014, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Новую тему создавать не стану, задам вопрос тут:
Q:Делается проект в Lazarus, по этому спрашиваю. В Delphi если создать dll и загнать в нее форму, то при вызове из основного приложения команды создания формы и попытки засунуть ее в компоненты pageControl все проходит нормально, или есть какие то шаманства с присвоением владельцев, родителей и т.п. ?

 У меня при попытке вызова
Код

 MyFormInspector.ManualDock(PageControl1)
 
вылетает сообщение
Цитата

control of class TTabsheet can't have control of class TFInspector as child

Не пойму как лечить. Проблема исключительно при вызове из dll.
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
drkot
Дата 16.9.2014, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(gesper @  15.9.2014,  21:49 Найти цитируемый пост)
есть какие то шаманства

есть шаманства. форма из длл имеет свой TApplication. 

На мой взгляд это не самое правильное решение с концепций языка.
Либо использовать пакеты, либо просто показывать форму как отдельное окно.

Добавлено через 4 минуты и 27 секунд
Цитата(gesper @  15.9.2014,  21:49 Найти цитируемый пост)
can't have control of class TFInspector as child

для того чтобы ошибка не возникала, нужно зарегистрировать класс TFInspector


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
gesper
Дата 16.9.2014, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Не прокатывает, либо я как то не так регистрирую.
Есть разница как регистрировать? Может пример.
Пробовал вызывать функцию программы, которая делает регистрацию класса из библиотеки.
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
Alexeis
Дата 16.9.2014, 17:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Дело скорее всего даже не в TApplication, а в RTTI . Возможно оно заработает если и программа и длл будут использовать общий набор пакетов. Имея общие пакеты получается общая реализация классов и общий RTTI . Если делать без пакетов, то при наложения нужно работать через WinAPI. Т.е. приваивать ParentWindow и все взаимодйствия осуществлять через хэндл окна. Но и это не избавит от возможных глюков. VCL обертка вокруг окон работает не здорово в длл. Там бывают чудеса при зажатии кнопки ALT, и некорректная обработка WM_SHOWWINDOW.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.