前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

PowerBuilder和MapInfo的集成开发技术_教学论文_理工论文_计算机与信息技术论文 首页 | 用户登录 | 加入收藏 资源分类:课件 教案 试卷 素材 图片 教学参考 论文 计划总结 文书写作 学科中心:语文 数学 英语 物理 化学 历史 地理 生物 资源搜索: 课件 教案 试卷 图片 视频 音频 教学参考 论文 计划总结 文书写作 全部科目 语文 数学 英语 物理 化学 政治 历史 地理 生物 美音体 信息技术 所有年级 七年级 八年级 九年级 中考 初中 高一 高二 高三 高考 高中 一年级 二年级 三年级 四年级 五年级 六年级 小学 首页 >> 教学论文 >> 理工论文 >> 计算机与信息技术论文 PowerBuilder和MapInfo的集成开发技术 ------------------------------------------------------------------------------------------- PowerBuilder和MapInfo的集成开发技术中国人民解放军电子工程学院 梁亚声摘要:本文介绍了客户/服务器开发工具PowerBuilder和桌面地图信息系统MapInfo集成开发的基本方法。重点讨论了集成开发中的一些关键技术的实现方法。关键词:PowerBuilder,MapInfo,MapBasic,系统集成,OLE自动化,回调0引言PowerBuilder是一个面向对象的用于构造基于客户/服务器(Client/Server)数据库应用系统的开发工具,它通过ODBC可同时支持Sysbase、Oracle、Informix、SQLServer等多种关系数据库,具有强大的数据库应用程序开发功能,尤其是它提供的如数据窗口(DataWindow)等工具,使其能够更加方便有效地访问与操纵数据库。MapInfo是由美国MapInfo公司推出的地理信息系统开发平台,其核心包括MapInfoProfessional和MapBasic两个部件。通过MapInfo平台,能把大量信息直观地与地理图形有机联系起来,使枯燥的表格数据可视化,从而极大地方便了数据分析和辅助决策。利用PowerBuilder强大的数据访问与操纵能力和MapInfo的地图信息管理功能,结合IntegratedMapping技术、OLE自动化技术等,将MapInfo地图集成到PowerBuilder的应用中,可以迅速地开发出具有强大地图处理能力的应用程序,使数据库中繁杂抽象的数据快速、准确、灵活地显示于电子地图之上,将数据可视化,实现空间数据和属性数据的有机结合。1开发框架使用PowerBuilder和MapInfo集成开发技术所开发的应用程序,称为集成的地图应用程序(IntegratedMappingApplication)。在集成的地图应用程序中,以客户/服务器的开发模式,使用PowerBuilder开发的应用程序称为客户程序。客户程序运行在前台,通过OLE调用在后台运行的作为OLE自动化服务器的Mapinfo。在集成的地图应用程序中,根据MapInfo提供的IntegratedMapping接口,在PowerBuilder客户程序中使用OutboundOLEAutomation(输出OLE自动化)技术,将MapInfo的地图窗口集成到客户程序中,从而使客户程序具备地图处理能力。客户程序使用MapInfoOLE自动化对象、MapBasicOLE自动化对象的有关属性和方法,通过MapInfoOLE自动化服务器对集成的地图窗口进行控制。图1给出了客户程序和服务器程序间的关系。图1PowerBuilder客户程序和MapInfo服务器的关系2.建立PowerBuilder客户程序和MapInfoOLE服务器的连接建立PowerBuilder客户程序和MapInfoOLE服务器的连接在原理上是:在PowerBuilder开发的客户程序中,通过使用OutboundOLEAutomation技术实现客户程序和MapInfo服务器的连接,借助OLE调用MapInfo服务器。具体实现上是:在包含地图窗口的框架窗口的Open事件中添加代码,创建一个新的OLEObject,而将MapInfo作为这个新的OLEObject的OLE服务器。要调用MapInfo服务,则需调用ConnectToNewObject()函数并传递OLEProgrammableObject的程序标识,即“MapInfo.Application”://OLEObject对象的实例OLEObjectMapInfo//接收错误代码IntegerErrCode//创建一个与MapInfo进行通信的OLE自动化对象MapInfo=CreateOLEObject//连接OLE自动化对象到MapInfo服务器ErrCode=MapInfo.ConnectToNewObject("MapInfo.Application")IfErrCode<>0ThenMessageBox("FatalError","Errorconnectingtothemapserver.Exiting...")RuturnEndIf在退出应用程序时,要调用DisConnectToObject()函数断开OLE自动化对象和MapInfoOLE自动化服务器之间的连接,并撤消OLE自动化对象,以释放其占用的系统资源。为此,可在上述框架窗口的Close事件中添加代码实现://断开与OLE自动化对象与MapInfo服务器的连接MapInfo.DisConnectToObject()//释放OLE自动化对象DestroyMapInfo3.将地图窗口集成到PowerBuilder应用程序中要将MapInfo的地图窗口集成到PowerBuilder开发的客户程序中,必须在客户程序中为MapInfo中的应用窗口重新指定父窗口,并指定一个Picture控件作为集成的地图窗口的父窗口。可以使用OLE自动化对象的Do方法实现上述功能://重新指定MapInfo中的应用窗口的父窗口为应用程序窗口//其中w_map为一个窗口MapInfo.Application.Do("SetApplicationWindow"+String(Handle(w_map)))//指定一个Picture控件棗p_map为地图窗口的父窗口,将地图窗口集成到客户程序中MapInfo.Do("SetNextDocumentParent"+string(Handle(p_map))+"Style1")图2回调技术的实现4.实现回调在PowerBuilder的客户程序中,是通过OLE自动化对象对集成的地图窗口进行控制,如图2所示。当客户程序在地图窗口进行有关的操作后(例如使用某个自定义工具在地图窗口上单击某个地图对象时),对应的事件只传递给MapInfo服务器,而不直接传递给客户程序,为了在客户程序中对事件进行处理,必须采用回调技术。由于在PowerBuilder中不能定义公共的回调类,因此必须编写一个在MapInfo服务器中运行的MapBasic应用程序,用来将回调信息反馈给PowerBuilder客户程序。其实现过程为:首先,在包含集成地图窗口的PowerBuilder应用窗口创建一个用户自定义事件ue_SelectionMade,事件ID为pbm_Custom01(=1024)。然后,编写一个在MapInfo服务器中运行的MapBasic应用程序,在此应用程序中添加对地图窗口事件进行处理的子程序。当对客户程序中的集成地图窗口进行操作时,MapBasic程序中对应的事件处理程序被触发。在事件处理程序中,可以将要传递给客户程序的信息保存到MapBasic中定义的一个全局变量中,然后使用Win32API函数PostMessage(),以PowerBuilder应用窗口的句柄和该窗口的用户自定义事件的ID为参数,向PowerBuilder客户程序发送消息,这样PowerBuilder客户程序就可以在该窗口的用户自定义事件中处理地图窗口事件了,并且还可以使用MBApplications对象的方法,获取MapBasic全局变量中保存的事件信息。如下代码展示了MapBasic应用程序在接收到地图对象选择事件时的处理的过程:'预定义PowerBuilder应用窗口的用户自定义事件的唯一数值标识符DEFINESELECTION_MADE1024'响应地图对象选择事件SubSelChangedHandler()'如果选中一个地图对象IfCommandInfo(CMD_INFO_SELTYPE)=1Then'保存地图对象所在的表的名称g_seltabname=SelectionInfo(SEL_INFO_TABLENAME)'向PowerBuilder客户程序发送消息iRc=PostMessage(g_pbhwnd_bg,SELECTION_MADE,0,0)EndIfEndSub下面的程序段中给出了实现回调时PowerBuilder客户程序的处理过程。该处理过程使用了MapBasic编写的mbserver.mbx程序。在MapBasic程序中保存事件信息的变量为g_SelTabName,而g_PbHWnd是MapBasic程序中用来接收PowerBuilder客户程序窗口句柄的全局变量。//在MapInfo服务器中运行MapBasic应用程序MapInfo.Do("RunApplication~""+gs_AppDir+"DataFusion.mbx~"")//创建对MapBasic应用程序进行控制的OLE自动化对象MBAppOleObject=CreateOleObjectMBAppOleObject=MapInfo.MBApplications.Item(1)//传递PowerBuilder客户程序中的窗口句柄给MapBasic应用程序//以便MapBasic应用程序将返回给PowerBuilder客户程序MBAppOleObject.MBGlobals.Item("g_pbhwnd_bg").Value=String(Handle(this))由下面代码所示的PowerBuilder客户程序就可以在窗口w_map的用户自定义事件ue_SelectionMade中处理地图窗口事件://在PowerBuilder客户程序的用户自定义事件中使用MBAppOleObject对象获取回调信息ls_MI_CommandInfo=MBAppOleObject.MBGlobals.Item("g_CommandInfoString").Value5.充分利用MapBasic应用程序MapBasic是MapInfo提供的用户系统开发工具,它具有对地图对象的管理、对含有地图对象的MapInfo表的管理等方面的强大功能。在将MapInfo地图集成到PowerBuilder的开发应用中,MapBasic不仅仅能用来实现回调,还可实现其它诸多功能。例如,在开发过程中经常会遇到需要保存地图对象类型的中间结果的问题,而在PowerBuilder中没有与之对应的数据类型,又难以通过MapInfoOLE自动化对象的方法和属性实现等诸如此类的问题,若利用MapBasic应用程序以及使用它的OLE自动化对象MBApplications的方法和属性来解决,可以达到事半功倍之效果。与MapInfoOLE自动化对象相似,MapBasic的OLE自动化对象MBApplications也有自己的Do方法和Eval方法。每当PowerBuilder客户程序调用它们时,MapInfo就会自动调用MapBasic的保留过程RemoteMsgHandler()或RemoteQueryHandler()过程,并可以在过程中通过CommandInfo(CMD_INFO_MSG)得到调用Do方法或Eval方法的参数。以下代码运用MBApplications的Do方法,实现改变当前选中地图对象的颜色://要求将当前选中地图对象的颜色改为兰色MBAppOleObject.Do("Blue")MapInfo将自动调用RemoteMsgHandler()过程:SubRemoteMsgHandler()DimMyObjectAsObject'获取并分析Do方法的参数CmdInfoStr=CommandInfo(CMD_INFO_MSG)'改变地图对象的颜色IfCmdStr="Blue"thenMyObject=Selection.objAlterObjectMyObjectInfo2,MakeCustomSymbol("Towe1-32.bmp",RGB(0,0,255),18,2)UpdateSelectionsetobj=MyObjectWhereRowID=1EndIfEndSubMBApplications的Eval方法的调用与Do方法的类似,只不过MapInfo将自动调用RemoteQueryHandler()过程,并要求返回一个结果。6结束语目前,关于MapInfo地图的集成应用大都是利用VB、VC++开发的,利用PowerBuilder开发的实际应用却很少,以至很多人认为难以利用PowerBuilder实现对MapInfo的集成开发,就算实现了也难以很好地完成对地图窗口的控制。本文介绍了如何将MapInfo地图集成到PowerBuilder的开发应用中的基本方法,以及其中的一些关键技术。运用此方法开发应用程序,可以充分发挥PowerBuilder强大的数据访问与操纵能力和MapInfo的地图信息管理功能,迅速地、灵活地开发基于地理信息系统的客户/服务器的信息管理系统。参考文献:1.WilliamB.Heys著,王艺,徐利平,范维等译PowerBuilder6开发指南,19982.张剑平,任福继,叶荣华,骆红波著,地理信息系统与MapInfo应用,科学出版社,19993.宜晨等著,MapInfo4.0实用培训教程,电子工业出版社,1998 ------------------------------------------------------------------------------------------- “地方文献国际学术研讨会”综述 由国家图书馆主办的“地方文献国际学术研讨会”于2004“地方文献国际学术研讨会”综述2.《由文献中心到交流中心》 张廷银  (王 珊 副研究馆员 国家图书馆分馆副馆长) 〔出处〕 国家图书馆学“流式播放”多媒体服务系统“流式播放”多媒体服务系统2004年度河南省广播电视优秀科技论文一等奖 前 言 流式媒体服务   关于亿库 | 联系我们 | 留言建议 | 免责声明 | 搜索帮助 | 备案:粤ICP备06006520号 &copy; CopyRight 2006-2008 eku.cc All Rights Reserved