Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
1-210
AlexMey
2002-03-20 12:40
2002.04.01
Как определить координаты курсора?


1-241
anod
2002-03-20 22:32
2002.04.01
Скрыть форму?


14-285
vic_vm
2002-02-18 14:29
2002.04.01
Вопрос к lel


6-273
eblade
2002-01-16 22:18
2002.04.01
TClientSocket и переопределение OnConnect


1-142
Zool
2002-03-21 22:53
2002.04.01
Ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский