Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > готовая форма в dll


Автор: Teleport 19.7.2008, 14:14
Пожалуйста помогите разобраться - имеется готовая форма, с набором компонентов, которые взаимодействуют между собой. 
Как мне ее запихать грамотно в dll. Хочу вызывать эту dll из моего основного приложения. 

Вот пример основого приложения и формы, которую надо в dll засунуть.   smile  smile 

Автор: VICTAR 19.7.2008, 14:39
есть в drkb

Автор: Teleport 20.7.2008, 18:57
я и в drkb и в DWorld читал и пробовал раз пятьдесят!!!. Но постоянно компилятор не принимает этого! Всегда куча ошибок вылазиет!!!
Мне просто нужно показать на моем примере. 

Автор: THandle 20.7.2008, 19:16
Teleport, создаешь Dll.

(File->New->Other->Dll Wizard)

Сохраняешь её.
В dll прописываешь в uses юнит с формой.

Создаешь форму.

Вот код библиотеки:
Код


library Project2;

uses
  SysUtils,
  Classes, Unit1;

{$R *.res}

begin
  Form1 := TForm1.Create(nil);
  Form1.ShowModal;
  Form1.Free;
end.


Компилируешь её. 

Дальше в своем приложении загружаешь эту библиотеку(LoadLibrary). 

И никакие дополнительные проекты не нужны(project1.dpr в папке "форма, которую надо в dll запихнуть").

Автор: Akella 20.7.2008, 22:40
Работай  с формами в DLL, как и с обычным проектом.

Автор: Teleport 21.7.2008, 13:52
2 THandle -  все  получилось!  smile 
Спасибо!!!  smile 

Akella - разобрался )))))), спасиб))))))  smile 

Автор: Teleport 21.7.2008, 14:51
не могу разобраться со следующим вопросом... 
Когда я вызываю форму из dll, то пока она открыта - я не могу получить допуск к своему основному приложению. 
Как сделать чтобы я вызвал из dll форму и мог и сней работать и с основным приложением одновременно?

Автор: Qu1nt 21.7.2008, 15:08
Код

Form1.ShowModal;

меняем на
Код

Form1.Show;

Автор: Teleport 21.7.2008, 15:27
2 Qu1nt
так я сразу попробовал!!! Так вот не хочет так!!
Форма тогда сразу исчезает с экрана!!
Она грузится (по оперативке смотрел) и исчезает сразу!
Может Form1.Free; куда-то перенести?? только вот куда?

Автор: Rennigth 21.7.2008, 15:43
Teleport, форму сделай саморазрушающейся. В OnClose выполни такой код.
Код

  Action := caFree;


Добавлено через 35 секунд
Teleport, 
ну и естественно убери Form1.Free;

Автор: Akella 21.7.2008, 21:10
Конечно, ты ж наверное делаешь
Код

form1 := TForm1.create(nil);
form1.show;
form11.Free

так?  smile 
прочти о разнице между Show и ShowModal  smile 

Автор: Teleport 22.7.2008, 15:06
2 Akella эту разницу я знаю хорошо  smile и этот вариант я сразу отбросил. Только один раз попробовал, для контрольной проверки  smile 
2 Rennigth  - неа, тоже пробовал... Ошибки возникают. Когда форму из  dll вызываю, то сразу "Выполнило недопустимую ошибку. Приложение будет закрыто..."

Form1.Free если просто убираю, то сразу ошибки эти лезут...  smile 

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