X-Ray
Зарегистрирован: 04.12.2009 Сообщения: 38 Откуда: Казань
|
Добавлено: Ср Фев 03, 2010 1:32 am Заголовок сообщения: неактивное MI |
|
|
простенькая mbx вызывает dll на delphi, появляется окно, заказчик хочет, чтобы оно было немодальным, вроде сделала, но при работе проги инструменты и пункты меню в самой мапинфе недоступны, единственное, что можно сделать - двигать панельки инструментов
Подскажите пожалуйста в чем может быть причина? В какую сторону копать?
***************************
MBX
***************************
Include "MENU.DEF"
Include "MAPBASIC.DEF"
Declare Sub CloseAll Lib "MyDLL.dll"
Declare Sub ShowTheForm1 Lib "MyDLL.dll"
Declare Function CreateTheForm Lib "MyDLL.dll" (ByVal DispId As integer, ByVal Handle As Integer) As Logical
Declare Sub Main()
Declare sub DLL
Global Handle As Integer
Global DispId as integer
Sub Main
Call DLL
End Sub
Sub DLL
DispId = systeminfo(17) '17 == SYS_INFO_APPIDISPATCH
Handle = SystemInfo(SYS_INFO_MAPINFOWND)
If CreateTheForm(DispId,Handle)=True Then
Call ShowTheForm1
End If
Exit Sub
***************************
***************************
dll, процедура CreateTheForm(DispId,Handle)
***************************
function CreateTheForm(const DispId: IDispatch; hWnd: THandle): Boolean; stdcall;
var
Str: String;
Begin
Result:=True;
try
oleMapInfo := DispId;
Except
ShowMessage('MapInfo íå îáíàðóæåí. Âîçìîæíî ïðèëîæåíèå íå óñòàíîâëåíî');
Exit;
End;
My_Path:=ShowDllPath();
If FileExists(My_Path+'\Config.ini') then IniFile := TIniFile.Create( My_Path+'\Config.ini')
Else
Begin
Str:='Note "Îøèáêà äîñòóïà ê ôàéëó '+My_Path+'\Config.ini" ';
Olemapinfo.Do(Str);
CreateTheForm:=False;
Exit;
End;
oleMapInfo.Do ('Run Application '+'"'+IniFile.ReadString('Variable','Wor','')+'"');
If OleMapinfo.Eval('NumTables()')=0 Then
Begin
MessageDlg ('Íè îäíà òàáëèöà íå îòêðûòà', mtError, [mbOk], 0);
CreateTheForm:=False;
Exit;
End
Else
Begin
Try
oleMapInfo.Do ('Set ProgressBars Off');
if Assigned(Form1)=False Then
Begin
Report.Flag:=False;
Form1:= TForm1.Create(Application);
Form1.Caption := 'Íàâèãàòîð';
Form1.Hide;
End;
Except
MessageDlg ('Ôîðìó ñîçäàòü íå óäàëîñü', mtError, [mbOk], 0);
CreateTheForm:=False;
Exit;
End;
End;
End; |
|