关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > OLE自动化技术在Delphi与MapInfo集成地图开发中

OLE自动化技术在Delphi与MapInfo集成地图开发中

作者:时间:2011-04-07来源:网络收藏

(2) 应用程序中 窗口
Ole 对象建立后,后台 成功启动,可以使用该对象的Do 方法向
发送命令,如:
Olemapinfo.do(’set application window ’+winhand);
Olemapinfo.do(’set next document parent’+winhand+’style l’);//重定位MapInfo 文件窗口其中,还可用来重定位其他特殊窗口或图例,可采用 MapBasic 的”setwindow”语句;
“style1”也可以为“style2”或“style3”,它表明所创建窗口的类型。
完成上述设置,就可以在客户程序中打开 MapInfo 文件了,如:
Olemapinfo.do (‘open table”city.tab”’);
Olemapinfo.do (‘map from city ’);//打开MapInfo 表直接调用MapInfo 菜单或按钮命令对窗口进行操作,只需调用MapInfo 的
RunMenuCommand 方法,从而保留有标准的MapInfo 按钮的功能,大大减少了重新编程的
难度而轻松实现MapInfo 的基本功能。具体语句如下:
Olemapinfo.runmenucommand(1705);//放大
Olemapinfo.runmenucommand(1706);//缩小
Olemapinfo.runmenucommand(1702);//漫游
(3) 终止MapInfo 程序
在调用 的CreateOleObject0 函数来创建一个新的MapInfo 事件时,在释放该对象
变量时,该MapInfo 事件就终止了,当该对象变量为局域变量时, 当退出局域过程时,该
MapInfo 事件就被释放了,若为全局变量时,必将其赋值为”Unassigned”才能得以释放。语
句如下:Olemapinfo:=Unassigned;//释放全局变量,终止MapInfo程序Application.Terminate;//终止 程序
3.3 Delphi 中MapInfo CallBack 的实现
通过对程序的设置,可以使MapInfo 能自动地向客户程序发送信息,这种类型的标志信息,即事件导致MapInfo 调用客户程序,这种消息称之为回调。

本文引用地址:http://www.eepw.com.cn/article/162202.htm

要使用回调,客户端程序必须能充当 服务器,而利用Delphi 能很轻易实现。
其实现原理如图2:

图 2 Delphi 中实现MapInfo 的callback 的原理图
Fig.2 The schematic diagram of realizing callback of MapInfo in Delphi
要实现 Maplnfo 的CallBack,一般有以下几个步骤:
1)创建一个类,定义若干 方法(Method)。如果要得到MapInfo 的状态栏上的内容,
则创建SetStatusText 方法(带一个字符串参数);如果要取得发生变化的窗口的ID 号,
则创建Windowcontentschanged 方法(带一个整形参数);
2)为在1)中定义的类创建一个对象;
3)在确认MapInfo 已经启动后,调用MapInfo 的SetCallBack 方法,将 对象
注册MapInfo 所发送消息的“接收器”中;
4)自定义菜单或按钮,通过这些菜单或按钮来调用在1)中定义的方法。
当 MapInfo 中发生一个事件时,MapInfo 就会将相应的信息组织成一定的形式,以方法
的参数方式传递到客户应用程序。在这些方法的内部,程序员可以对这些信息进行处理,提
取所需的信息。以自定义客户程序的状态栏为例,回调的使用方法如下:
1)建一个类,定义SetStatusText 方法。此方法带一个WideString 类型的参数StatusText。
这个参数是MapInfo 向客户程序传递过来的。
在 Delphi6.0 中选择File|New|ActiveX|Automation Object,通过启动Automation
Object 向导打开“Type Library”编辑器来实现。这里假设创建的类名为TmyCallBack。
2)应用程序窗体中添加状态栏。
3)使用第一步中定义的类创建一个对象。
varCallBack := TMyCallBack.Create;
4)调用自动OLE 对象的SetCallBack 方法传递参数。
oleMapInfo.SetCallback(varCallBack As IMyCallBack);
5)在SetStatusText 方法中处理由MapInfo 传递的StatusText 参数,控制状态栏的显示。
procedure TMyCallBack.SetStatusText(const StatusText: WideString);
begin MainForm.StatusBar1.Panels[0].Text := StatusText;
//MainForm 是容纳地图组件的窗体,StatusBar1 是添加状态栏的缺省名,panel,用于显
示MapInfo 的状态栏上的内容;
End;
4 结束语
利用 OLE 自动化, 通过 Delphi 实现了MapInfo 的二次,充分发挥了Delphi
编程工具强大的数据库编程能力和MapInfo Professional 的图形处理能力。而在过程中,
两者是相互独立的,Delphi 可以很方便地并不需做任何改动地调用MapBasic 代码,实现通
过简单的OLE 自动化提交控制命令来完成MapInfo Professional 的功能和效果,取得很
好的应用效果。同时,在进行MapInfo 消息回调处理方法上,也可利用OLE 自动化
MapInfo Professional 的自动回调消息。

pid控制相关文章:pid控制原理



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭