Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Загрузка Frame из Dll. Ошибка!


Автор: FShadow 1.10.2010, 12:44
Господа программисты помогите разобраться.
Здесь на форуме искал но полного решения вызова фреймов не нашел.
Есть код создания фрема в Dll
Код

function ShowFrame(aParent: TWinControl): TFrame;stdcall;
begin
  Result:= TfrContact.Create(aParent);
  Result.Parent := aParent;
end;  


Код процедуры создания фрейма в основной программе
Код

procedure TForm1.FormCreate(Sender: TObject);
var
  NewTabSheet: TTabSheet;
  frMy: TFrame;
begin
       // Создаем страницу в TPageControl
       NewTabSheet:= TTabSheet.Create(PageControl1);
       NewTabSheet.Visible:= True;
       NewTabSheet.PageControl:= PageControl1;
       NewTabSheet.Caption:= GetNameModule;

       frMy:= ShowFrame(NewTabSheet);
       frMy.Visible:= True;
     end;
end;


При вызове его из основной программы вылетает ошибка "Cannot assign a TFont to a TFont".
Как ее победить и что надо сделать чтоб фрейм из dll отображался нормально?


Автор: bems 1.10.2010, 14:31
Использовать bpl

Автор: Frees 1.10.2010, 14:43
http://www.delphikingdom.ru/asp/listerrors.asp?Action=1&ID=123

Автор: FShadow 7.11.2010, 12:43
Если кому еще интересно нашел в сети следующее решение. Использовать bpl не требуется.

Код


procedure ShowFrame(App: Integer; aParent: TWinControl);stdcall;
var
  DllApp: TApplication;
begin
  DllApp:= Application;
  Application:= TApplication(App);
  Frame1 := TFrame1.Create(Application);
  Frame1.ParentWindow := aParent.Handle;
  SetParent(Frame1.Handle, aParent.Handle);
  Application:= DllApp; 
end; 
 


вот и все. Тему можно считать закрытой.

Автор: bems 7.11.2010, 14:58
У приложения и длл разные классы. Подобные решения работают до тех пор пока тебе везет

Автор: Caduser 9.12.2011, 14:36
Цитата(FShadow @ 7.11.2010,  12:43)
Если кому еще интересно нашел в сети следующее решение. Использовать bpl не требуется.

Код


procedure ShowFrame(App: Integer; aParent: TWinControl);stdcall;
var
  DllApp: TApplication;
begin
  DllApp:= Application;
  Application:= TApplication(App);
  Frame1 := TFrame1.Create(Application);
  Frame1.ParentWindow := aParent.Handle;
  SetParent(Frame1.Handle, aParent.Handle);
  Application:= DllApp; 
end; 
 


вот и все. Тему можно считать закрытой.

Такой вариант работает но фрейм не подгоняется под размер формы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)