最近我又开始写我的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中是不是出现了刚才我们建立的窗口呢.