PowerBuilder 面象构造基客户服务器(ClientServer)数库应系统开发工具通ODBC时支持SysbaseOracleInformixSQL Server等种关系数库具强数库应程序开发功尤提供数窗口(Data Window)等工具够更加方便效访问操数库
MapInfo美国MapInfo公司推出理信息系统开发台核心包括MapInfo ProfessionalMapBasic两部件
通MapInfo台量信息直观理图形机联系起枯燥表格数视化极方便数分析辅助决策
利PowerBuilder强数访问操力MapInfo图信息理功结合Integrated Mapping技术OLE动化技术等MapInfo图集成PowerBuilder应中迅速开发出具强图处理力应程序数库中繁杂抽象数快速准确灵活显示电子图数视化实现空间数属性数机结合
1 开发框架
PowerBuilderMapInfo集成开发技术开发应程序称集成图应程序(Integrated Mapping Application)
集成图应程序中客户服务器开发模式PowerBuilder开发应程序称客户程序
客户程序运行前台通OLE调台运行作OLE动化服务器Mapinfo
集成图应程序中根MapInfo提供Integrated Mapping接口PowerBuilder客户程序中Outbound OLE Automation(输出OLE动化)技术MapInfo图窗口集成客户程序中客户程序具备图处理力
客户程序MapInfo OLE动化象MapBasic OLE
动化象关属性方法通MapInfo OLE动化服务器集成图窗口进行控制
图1出客户程序服务器程序间关系
图1 PowerBuilder客户程序MapInfo服务器关系
2.建立PowerBuilder客户程序MapInfo OLE服务器连接
建立PowerBuilder客户程序MapInfo OLE服务器连接原理:PowerBuilder开发客户程序中通Outbound OLE Automation技术实现客户程序MapInfo服务器连接助OLE调MapInfo服务器
具体实现:包含图窗口框架窗口Open事件中添加代码创建新OLEObjectMapInfo作新OLEObjectOLE服务器
调MapInfo服务需调ConnectToNewObject()函数传递OLE Programmable Object程序标识MapInfoApplication:
OLEObject象实例
OLEObject MapInfo
接收错误代码
Integer ErrCode
创建MapInfo进行通信OLE动化象
MapInfo Create OLEObject
连接OLE动化象MapInfo服务器
ErrCode MapInfoConnectToNewObject(MapInfoApplication)
If ErrCode <> 0 Then
MessageBox(Fatal Error Error connecting to the map server Exiting)
Ruturn
End If
退出应程序时调DisConnectToObject()函数断开OLE动化象MapInfo OLE动化服务器间连接撤消OLE动化象释放占系统资源
述框架窗口Close事件中添加代码实现:
断开OLE动化象MapInfo服务器连接
MapInfoDisConnectToObject()
释放OLE动化象
Destroy MapInfo
3.图窗口集成PowerBuilder应程序中
MapInfo图窗口集成PowerBuilder开发客户程序中必须客户程序中MapInfo中应窗口重新指定父窗口指定Picture控件作集成图窗口父窗口
OLE动化象Do方法实现述功:
重新指定MapInfo中应窗口父窗口应程序窗口
中w_map窗口
MapInfoApplicationDo (Set Application Window String(Handle(w_map)))
指定Picture控件棗p_map图窗口父窗口图窗口集成客户程序中
MapInfoDo (Set Next Document Parent string(Handle(p_map)) Style 1)gif (11237 字节) srclunwenUploadFiles20050520050517200008607gif width681>
图2 回调技术实现
4.实现回调
PowerBuilder客户程序中通OLE动化象集成图窗口进行控制图2示
客户程序图窗口进行关操作(例某定义工具图窗口单击某图象时)应事件传递MapInfo服务器直接传递客户程序客户程序中事件进行处理必须采回调技术
PowerBuilder中定义公回调类必须编写MapInfo服务器中运行MapBasic应程序回调信息反馈PowerBuilder客户程序
实现程:
首先包含集成图窗口PowerBuilder应窗口创建户定义事件ue_SelectionMade事件IDpbm_Custom01( 1024)
然编写MapInfo服务器中运行MapBasic应程序应程序中添加图窗口事件进行处理子程序
客户程序中集成图窗口进行操作时MapBasic程序中应事件处理程序触发
事件处理程序中传递客户程序信息保存MapBasic中定义全局变量中然Win32 API函数PostMessage()PowerBuilder应窗口句柄该窗口户定义事件ID参数PowerBuilder客户程序发送消息样PowerBuilder客户程序该窗口户定义事件中处理图窗口事件MBApplications象方法获取MapBasic全局变量中保存事件信息
代码展示MapBasic应程序接收图象选择事件时处理程:
预定义PowerBuilder应窗口户定义事件唯数值标识符
DEFINE SELECTION_MADE 1024
响应图象选择事件
Sub SelChangedHandler()
果选中图象
If CommandInfo(CMD_INFO_SELTYPE) 1 Then
保存图象表名称
g_seltabname SelectionInfo(SEL_INFO_TABLENAME)
PowerBuilder客户程序发送消息
iRc PostMessage(g_pbhwnd_bgSELECTION_MADE00)
End If
End Sub
面程序段中出实现回调时PowerBuilder客户程序处理程
该处理程MapBasic编写mbservermbx程序
MapBasic程序中保存事件信息变量g_SelTabNameg_PbHWndMapBasic程序中接收PowerBuilder客户程序窗口句柄全局变量
MapInfo服务器中运行MapBasic应程序
MapInfoDo(Run Application ~ gs_AppDir DataFusionmbx~)
创建MapBasic应程序进行控制OLE动化象
MBAppOleObject Create OleObject
MBAppOleObject MapInfoMBApplicationsItem(1)
传递PowerBuilder客户程序中窗口句柄MapBasic应程序
便MapBasic应程序返回PowerBuilder客户程序
MBAppOleObjectMBGlobalsItem(g_pbhwnd_bg)Value String(Handle(this))
面代码示PowerBuilder客户程序窗口w_map户定义事件ue_SelectionMade中处理图窗口事件:
PowerBuilder客户程序户定义事件中MBAppOleObject象获取回调信息
ls_MI_CommandInfo MBAppOleObjectMBGlobalsItem(g_CommandInfoString)Value
5.充分利MapBasic应程序
MapBasicMapInfo提供户系统开发工具具图象理含图象MapInfo表理等方面强功
MapInfo图集成PowerBuilder开发应中MapBasic仅仅实现回调实现诸功
例开发程中常会遇需保存图象类型中间结果问题PowerBuilder
中没应数类型难通MapInfo OLE动化象方法属性实现等诸类问题利MapBasic应程序OLE动化象MBApplications方法属性解决达事半功倍效果
MapInfo OLE动化象相似MapBasicOLE动化象MBApplicationsDo方法Eval方法
PowerBuilder客户程序调时MapInfo会动调MapBasic保留程RemoteMsgHandler()RemoteQueryHandler()程程中通CommandInfo(CMD_INFO_MSG)调Do方法Eval方法参数
代码运MBApplicationsDo方法实现改变前选中图象颜色:
求前选中图象颜色改兰色
MBAppOleObjectDo(Blue)
MapInfo动调RemoteMsgHandler()程:
Sub RemoteMsgHandler()
Dim MyObject As Object
获取分析Do方法参数
CmdInfoStr CommandInfo(CMD_INFO_MSG)
改变图象颜色
If CmdStr Blue then
MyObject Selectionobj
Alter Object MyObject Info 2 MakeCustomSymbol (Towe132bmp RGB(00255) 18 2)
Update Selection set obj MyObject Where RowID 1
End If
End Sub
MBApplicationsEval方法调Do方法类似MapInfo动调RemoteQueryHandler()程求返回结果
6 结束语
目前关MapInfo图集成应利VBVC 开发利PowerBuilder开发实际应少认难利PowerBuilder实现MapInfo集成开发算实现难完成图窗口控制
文介绍MapInfo图集成PowerBuilder开发应中基方法中关键技术
运方法开发应程序充分发挥PowerBuilder强数访问操力MapInfo图信息理功迅速灵活开发基理信息系统客户服务器信息理系统
参考文献:
1William BHeys著王艺徐利范维等译PowerBuilder 6 开发指南1998
2张剑福继叶荣华骆红波著理信息系统MapInfo应科学出版社1999
3宜晨等著MapInfo 40 实培训教程电子工业出版社1998
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档