『公告』 预祝您龙年大吉,万事如意, 过节期间, 大家如需数据服务,请拨打400 或直接添加客服微信,再祝大家龙年,心想事成。
关注我们 新浪 腾讯

MO打包终结篇

MO打包终结篇

有关MOMapObjects)打包的文章在网上看了好多,可是拿来一试没有一个可以真正做得尽如人意的,经过一番的折腾,兄弟我终于摸索出一套MO打包切实可行的方法,今天我就给MO打包来一个彻底的了结,希望各位能够喜欢。

       有关MOMapObjects)打包的文章在网上看了好多,可是拿来一试没有一个可以真正做得尽如人意的,经过一番的折腾,兄弟我终于摸索出一套MO打包切实可行的方法,今天我就给MO打包来一个彻底的了结,希望各位能够喜欢。

       这个打包程序是用InstallShield6.22来完傻模訫O2.2为例,今天有关InstallShield6.22的一些应用还请给位自行掌握,在这里我就不再罗嗦了,因为使用起来比较简单。

       首先我们来看看MO2.2的一些组件文件,它的组件文件最常见的就有两种,一种是*.ocx一种是*.dll,当然还有其它格式的,只是这两种是开发所必须,如果你想让你的MO2.2程序能够正常运行的话。

       其实这两种文件在InstallShield6.22中有可以分为两种,一种是需要注册的,一种是不需要注册的。

       下面是需要注册的一些文件 ①:Mo20.ocxMO21Legend.ocxMO21ScaleBar.ocxweblink.ocxMemTable21.dllMemTableServer.dllStreet20.dllVpf20.dllInfoTable20.dllJetTable20.dllADOTable20.dllaiimage20.dllCAD20.dllCoverage20.dllMoImageCat.dllMoSde81.dllMoSde82.dllMoSde83.dllMoSde302.dllMoMrSID.dllMoSde80.dllOdbcTbl20.dllShape20.dll

       下面是那些不需要注册的文件 ②:dforrt.dllefileio.dllelib.dllergxlib.dllethrlib.dllISO8211.dlllibtiff.dllmobase.dllMoe.dllmofeat.dllmogridio.dllpe80.dllPe81.dllpe82.dllpe83.dllSde30.dllSde80.dllSde81.dllSde82.dllSde83.dllSg80.dllSg81.dllSg82.dllSg83.dllShapeLT20.dllAFLT20.dllAiSetup.dllCADE.dllCADPI.dllpe.dllSg.dllAF20.dllmtch.dllEDGE32.dllsdeora8isrvr81.dllsdeora8isrvr82.dllsdeora9isrvr82.dllsdesqlsrvr81.dllsdesqlsrvr82.dllMo20.lic

       以上这些文件,均可在安装了MO2.2的机子的X:\Program Files\Common Files\ESRIX代表当前操作系统所在的目录)目录下找到。下面就让我们行动起来吧,请看一下步骤:

       1、在InstallShield6.22的“File Groups”视图下新建两个文件组“MOOCX”和“MODLL”,在前一个文件组中插入文件 ①,后一个文件组中放入文件②。

       2、在“File Groups”视图中选中“MOOCX”文件组,在右边将它的“Sel-Registered”值设为“Yes”,文件组“MODLL”正好相反设为“NO”。

       3、需要特别注意的一点那就是,一定要将 MOOCX”和“MODLL 文件组的“Destination”值设置为相同的目录(比如TARGETDIR),不然就不能够正确的完成MO2.2的注册。

       这样就完成了MO2.2基本控件的注册安装问题简单吧,一句代码都不用写。

       接下来我们就来看看MO2.2字体的安装吧,看过好多例子都是通过写注册表的启动项,然后重启,以此来达到字体的安装。就我个人认为这种办法实在是麻烦,而且成功的机率不是很高。

       在这里我给大家介绍一种,通过给操作系统发消息的方发法来完成MO2.2字体的安装。这个方法就稍微的麻烦一些了,需通过写脚本来实现,其实也不难,下面就看一下据体操作吧。

1 现在把InstallShield6.22切换到“Scripts”视图下,在它右面的编辑框中的 // your DLL function prototypes”的下一行添加下面一行代码:

prototype number GDI32.AddFontResource(BYREF STRING);

并在“// your global variables”的下一行声明两个常量:

#define HWND_BROADCAST 0xFFFF

#define WM_FONTCHANGE 0x001D

2 然后在“// your script function prototypes”的下一行声明一个函数:

export prototype number InstallFonts(string szFontsName, sting szFontsFiles);

并在脚本最后将这个自定义函数的实现完成,具体代码如下:

function number InstallFonts(szFontName, szFontFiles)

string szKey;

begin

szKey = "Software\\Microsoft\\Windows";

if (SYSINFO.WINNT.bWinNT) then

szKey = szKey + " NT\\CurrentVersion\\Fonts";

elseif (SYSINFO.WIN9X.bWin98) then

szKey = szKey + "\\CurrentVersion\\Fonts";

endif;

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

RegDBSetKeyValueEx (szKey,szFontName,REGDB_STRING,szFontFiles,-1);

AddFontResource(szFontFiles);

//向操作系统发送安装字体的消息

SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);

end;

       这样整个安装字体的函数就全部写完了,不是很难吧。 3 首先,在InstallShield6.22的“File Groups”视图下新建一个“MOFonts”文件组,将它的“Destination”值设置为“<WINDIR>Fonsts”,在安装了MO2.2的机子上的“Fonts”目录下,把MO2.2的所有字体都找到放到“MOFonts”文件组中。接下来就是适时的调用InstallFonts这个函数进行字体的安装了。在OnFirstUIAfter函数中以下面的方法进行调用InstallFonts就可以了,具体操作:

InstallFonts("ESRI Cartography (TrueType)","Esri_1.ttf");

InstallFonts("ESRI Environmental & Icons (TrueType)","Esri_2.ttf");

InstallFonts("ESRI Geometric Symbols (TrueType)","Esri_3.ttf");

......其它的字体也可以以此来完成安装。

       最后,还要说的就是,有的朋友要用到MO2.2能够支持的更多的图形格式的话,只是打包上面所列出的那些文件是远远不够的。为了能够让你的程序支持更多的图形格式,建议你把X:\Program Files\Common Files\ESRI\MO_imageX代表当前操作系统所在的目录)整个目录都放在“MODLL”这个组件下,最好不要改变它的目录结构,当然为了节省空间你可以删掉里面的pdf文件。这样以来你就可以在你的程序中处理所有MO2.2所能够支持的图形格式了。

      京ICP备2025132830号-1 京公网安备 号