 |
PowerBuilder和MapInfo的集成开发技术 |
★★★ |
PowerBuilder和MapInfo的集成开发技术 |
|
|
的回调类,因此必须编写一个在mapinfo服务器中运行的mapbasic应用程序,用来将回调信息反馈给powerbuilder客户程序。其实现过程为: 首先,在包含集成地图窗口的powerbuilder应用窗口创建一个用户自定义事件ue_selectionmade,事件id为pbm_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_bg,selection_made,0,0) end if end sub 下面的程序段中给出了实现回调时powerbuilder客户程序的处理过程。该处理过程使用了mapbasic编写的mbserver.mbx程序。在mapbasic程序中保存事件信息的变量为g_seltabname,而g_pbhwnd是mapbasic程序中用来接收powerbuilder客户程序窗口句柄的全局变量。 //在mapinfo服务器中运行mapbasic应用程序 mapinfo.do(run application ~ + gs_appdir + datafusion.mbx~) //创建对mapbasic应用程序进行控制的ole自动化对象 mbappoleobject = create oleobject mbappoleobject = 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).value 5.充分利用mapbasic应用程序 mapbasic是mapinfo提供的用户系统开发工具,它具有对地图对象的管理、对含有地图对象的mapinfo表的管理等方面的强大功能。 在将mapinfo地图集成到powerbuilder的开发应用中,mapbasic不仅仅能用来实现回调,还可实现其它诸多功能。例如,在开发过程中经常会遇到需要保存地图对象类型的中间结果的问题,而在powerbuilder中没有与之对应的数据类型,又难以通过mapinfo ole自动化对象的方法和属性实现等诸如此类的问题,若利用mapbasic应用程序以及使用它的ole自动化对象mbapplications的方法和属性来解决,可以达到事半功倍之效果。 与mapinfo ole自动化对象相似,mapbasic的ole自动化对象mbapplications也有自己的do方法和eval方法。每当powerbuilder客户程序调用它们时,mapinfo就会自动调用mapbasic的保留过程remotemsghandler()或remotequeryhandler()过程,并可以在过程中通过commandinfo(cmd_info_msg)得到调用do方法或eval方法的参数。 以下代码运用mbapplications的do方法,实现改变当前选中地图对象的颜色: //要求将当前选中地图对象的颜色改为兰色 mbappoleobject.do(blue) mapinfo将自动调用remotemsghandler()过程: sub remotemsghandler() dim myobject as object 获取并分析do方法的参数 cmdinfostr = commandinfo(cmd_info_msg) 改变地图对象的颜色 if cmdstr= blue then myobject = selection.obj alter object myobject info 2, makecustomsymbol (towe1-32.bmp, rgb(0,0,255), 18, 2) update selection set obj = myobject where rowid = 1 end if end sub m 上一页 [1] [2] [3] 下一页
|
|
上一个论文: 网络时代不用交税了?--互联网对税收体系的挑战 下一个论文: 网络办公自动化系统开发分析
|
|
|
看了《PowerBuilder和MapInfo的集成开发技术》的网友还看了:
[免费范文]利用开源框架Struts+Hibernate实现Web应用程序 [免费范文]LabWindows/CVI的应用特点 [免费范文]基于RRAS与虚拟专用网技术在Windows中的实现 [今日更新]巧用PowerPoint制作高中化学多媒体课件 [今日更新]基于语音技术的信息无障碍Web页面实现 [今日更新]基于TOWS矩阵的县域集群经济发展战略研究 [今日更新]Windows8是微软的翻身之战 [今日更新]Windows8 LOGO发布,经典Windows LOGO回顾 [今日更新]Web2.0网站新闻传播的特性比较与趋势 [今日更新]《mary,did you know》__圣诞歌曲
|
|