代码名称:结合Delphi让Mapbasic无所不能

作者/收集者:liuhui_sky from Total

开发环境:MapBasic + Delphi + MapInfo Professional

代码:

最近我又开始写我的Plankit了,顺便的将自己在编写时的一些经验分享给大家。
 我写的是一个很简单的教程,其实Delphi我才用了两天,以前我一直在用VB编写,可惜VB不能生成输出的DLL文件,我也只能改用Delphi来写了,所以请你不要问我过多的Delphi方面的问题。好了废话少说,开始进入正题。

 首先我们需要建立一个Delphi的工程,然后建立一个窗口,在窗口中添加一个按钮控键,如下图:


此主题相关图片如下:
按此在新窗口浏览图片
不要更改任何属性,直接保存为Temp_Dialog就行了。
然后建立一个DLL工程,


此主题相关图片如下:
按此在新窗口浏览图片

添加如下代码:
library Temp_dll;

uses
  Forms,
  Windows,
  SysUtils,
  Classes,
  Temp_Dialog in 'Temp_Dialog.pas';

function CreateWind(hWnd: THandle): Boolean; stdcall;
var
  bRetVal: Boolean;
begin
  bRetVal := True;
  Application.Handle := hWnd;
  try
    Form1 := Tform1.Create(Application);
  except
    bRetVal := False;
  end;
  result := bRetVal;
end;

function ShowDialog: Boolean; stdcall;
var
  bRetVal: Boolean;
begin
  bRetVal := False;
  if (form1 <> nil) then
  begin
    try
      Form1.Show;
      bRetVal := True;
    except
      bRetVal := False;
    end;
  end;
  result := bRetVal;
end;
Exports CreateWind, ShowDialog;

编译生成Temp_Dll.dll文件


然后就可以开始编写Mapbasic程序了,代码如下:
Include "mapbasic.def"
Include "menu.def"
Include "icons.def"

Declare Sub Main
Declare Function GetFocus Lib "User32"() as Integer
Declare Function ShowDialog Lib "Temp_Dll" () as Logical
Declare Function CreateWind Lib " Temp_Dll " (ByVal Handle as Integer) as Logical

Dim nWin as integer


Sub Main
  Dim Handle, Start as Integer
  Dim Result1, Result2, bGo as Logical
  Dim str as string
  
  nWin = FrontWindow()
  Handle = GetFocus()

  Result1 = CreateWind (Handle)
  
  
  
  Result2 = ShowDialog ()
End Sub


OK,编译生成MBX文件,将TEMP_DLL.dll文件和这个MBX文件考到同一个目录下,运行MBX文件,看看Mapinfo中是不是出现了刚才我们建立的窗口呢.