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

Вниз

Проблемы с MDI и DLL   Найти похожие ветки 

 
alexts ©   (2002-03-20 15:21) [0]

Привет всем мастерам. Есть такая проблема:
Есть MDI приложение и DLLки в которых формы описаны.
Не выходит эти формы показать. Что делать?


 
Alx2 ©   (2002-03-20 15:43) [1]

Искать в форуме. Уже четвертый раз за две недели этот вопрос всплывает.


 
Alx2 ©   (2002-03-20 15:49) [2]

Сорри, линк на этот вопрос уже уплыл за пределы активности :(


 
alexts ©   (2002-03-20 16:07) [3]

Ну дык дайте хоть где почитать.


 
MAxiMum ©   (2002-03-20 16:08) [4]

А ты сделал внешним в DLL функцию построения Form?
Типа, function(...): TMDIForm;
И получай сслыку на форму.


 
Alx2 ©   (2002-03-20 16:19) [5]

Короче говоря, делали так:
В DLL переаем контекст Application и Screen. После этого - почти работает. :)
Вот, "на скорую руку" набросал:

DLL:

uses
sharemem,
SysUtils,
Classes,
Forms,
aUnit1 in "aUnit1.pas" {MDIForm1}; // Там сидит обычная форма
Var Save : TApplication;
{$R *.RES}
procedure ClearMdiApp; stdcall;
begin
if Save<>Nil then
Application := Save
end;

function createMDIChild(app : tApplication):Tform; stdcall;
begin
if Save = Nil
then Save := Application;
Application:=app;
Result := TMDIform1.create(app);
end;

exports createMDIChild, ClearMdiApp;

begin
Save := Nil;
end.


Вот основной модуль:

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
NewMDI1: TMenuItem;
procedure NewMDI1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
function createMDIChild(app : tapplication):tForm; stdcall; external "mdi.dll";
procedure ClearMdiApp; stdcall; external "mdi.dll";
implementation

{$R *.DFM}

procedure TForm1.NewMDI1Click(Sender: TObject);
begin
CreateMDIChild(Application).FormStyle:=fsMDIChild;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ClearMdiApp;
end;

end.


 
alexts ©   (2002-03-20 17:20) [6]

чет не выходит. главное окно исчезает и все..делаю так:
Dll

library spr;
{$R *.res}
uses
Forms,
SysUtils,
Classes,DBTables,
u_add_group in "u_add_group.pas" {add_group},
dm_tov in "Dm_tov.pas" {DM_Tovar: TDataModule},
main_tovar in "main_tovar.pas" {f_sprtov},
u_add_food in "u_add_food.pas" {add_food},
add_param in "add_param.pas" {f_hartov};

function spr_foods(App:TApplication;Scr:TScreen;DB:TDataBase):TForm;
begin
Application:=App;
Screen:=Scr;
DM_Tovar:=TDM_Tovar.Create(app);
DM_Tovar.Database1:=DB;
f_sprtov:=Tf_sprtov.Create(App);
Result:=f_sprtov;
end;

exports
spr_foods;
begin
end.


Вызов из DLL

LAssort:=loadlibrary(PChar(spr_menundll.AsString));
if LAssort<>0 then
begin
@MyProc:=GetProcAddress(LAssort,PChar(spr_menunproc.AsString));
if @MyProc <> nil
then MyProc(Application,Screen,Intro.Database1)
else ShowMessage("


 
Alx2 ©   (2002-03-20 17:24) [7]

На всякий случай: воткни sharemem на первом месте в dll-овский uses и uses основного модуля программы.


 
alexts ©   (2002-03-20 17:38) [8]

Всеравно тоже самое. Главная форма пропадает, но перед этим мерцает та форма которую вызываю?????????


 
Alx2 ©   (2002-03-20 17:39) [9]

Странно. Где-то глюки....
У меня пример, который я написал, полностью работает. Попробуй на нем что-то поэкспериментировать.



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

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

Наверх




Память: 0.49 MB
Время: 0.017 c
1-202
interest
2002-03-20 08:55
2002.04.01
Переменные сохранить, а при запуске вернуть


1-141
S
2002-03-21 18:02
2002.04.01
Помогите скрыть форму!


1-218
van
2002-03-20 13:30
2002.04.01
как программно создать временную форму?


1-114
kronprince
2002-03-21 17:48
2002.04.01
TComboEdit из RxLib как TComboBox.Items?


3-75
SerKom
2002-03-07 18:20
2002.04.01
Почему для базы на IB (SQL Dialect 3) при использовании типа полей Date или Time