Total 的mapbasic教学---定制工具按钮图标
2005-04-05 23:04
309 查看
大家好,我是Total(为什么叫Total?因为我的网名是”偷着来上网”,在古城热线的论坛里大家都叫我”偷偷”,于是取个英文的同音词,就是Total了,嘿嘿).其实我觉得自己并没有什么资格给大家讲课,写教学的目的只在于抛砖引玉,希望在论坛里看到更多的原创作品.
我也不会常来写东西,一个是由于个人水平有限,一个是由于我是一名通信工程师,而并非是程序员,我的首要工作还是搞好该死的通信网络,其次才是编程.好了费话少说,开始今天的正题.做为见面礼,给大家讲一个高级技巧好了.
Mapbasic高级编程之定制工具图标
下面是程序的原码
‘程序在Windows2000英文版(SP4),Mapinfo6.0英文版(SP1),Mapbasic5.5调试通过
Include "mapbasic.def"
Declare Sub Main
Declare Sub TestDLLCall
Declare Function InitResDLL () As String
Declare Function MyDllFunc_w32 Lib "win32/ico32.dll" Alias "MyDllFunc"
(ByVal myparm As Integer) As Integer
Declare Function MyDllFunc_w16 Lib "win16/ico16.dll" Alias "MyDllFunc"
(ByVal myparm As Integer) As Integer
Declare Function MyDllFunc (ByVal myparm As Integer) As Integer
Sub Main 'Ö÷³ÌÐò
Dim icodll As String
icodll = InitResDLL()
Print Chr$(12)
Print "IcoTest program is loaded from "+ApplicationDirectory$()
Print "Resource DLL is "+icodll
Create ButtonPad "IcoTest" As
ToolButton Calling TestDLLCall
Icon 138 File icodll
Cursor 136 File icodll
ToolButton Calling TestDLLCall
Icon 134 File icodll
Cursor 136 File icodll
End Sub
Function InitResDLL () As String
if (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN16) Then
InitResDLL = ApplicationDirectory$()+"win16/ico16.dll"
elseif (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN32) Then
InitResDLL = ApplicationDirectory$()+"win32/ico32.dll"
else
Note "This application is not supported on this platform."
End Program
end if
End Function
Function MyDllFunc (ByVal myparm As Integer) As Integer
if (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN16) Then
MyDllFunc = MyDllFunc_w16(myparm)
elseif (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN32) Then
MyDllFunc = MyDllFunc_w32(myparm)
else
Note "This application is not supported on this platform."
End Program
end if
End Function
Global parmval As Integer
Sub TestDLLCall
parmval = parmval + 1
Print "The answer is: " + Str$(MyDllFunc(parmval))
End Sub
上面代码主要来源于一个mapbasic自带的例程,即然有现成的东东,就不用我自己动手了吧(哎呀~~~~谁打我??!!).
其实写这个程序的难点并不在于程序的本身,而是那个DLL文件的生成.
1. 图标文件的格式
按钮图标文件在Mapbasic中有严格的要求.图标文件只能是位图格式(BMP图像格式),大小为小图标18pixles宽16pixles高,大图标26pixles宽24pixles高,小图标是用在普通按钮上的,而大图标是在你在Mapinfo中选择使用大按钮之后才会用到.
2. DLL 文件的编辑
编辑好了图标文件,现在来把它们添加到DLL中,我们无需重新的编写一段C语言代码来实现DLL文件的生成,那样你首先的会C语言.我说的方法是直接的利用Mapbasic例程中的DLL文件.
用资源编辑软件打开DLL文件,将编辑好的BMP文件添加到DLL中,注意保存顺序,首先是小的位图,然后是大的位图,在命名时要注意两个文件必须相连,例如:小图标命名为138,那么大图标就应该命名为139.保存DLL.这样就好了,你只需在上面的程序代码中修改ICON的号码就可以看到你的图标文件了.
OK,就这么多了,有什么没说清楚的地方,欢迎大家提问和讨论.
共同学习,共同进步.
Total 2004.07.01 23:07 写于新疆乌鲁木齐
我也不会常来写东西,一个是由于个人水平有限,一个是由于我是一名通信工程师,而并非是程序员,我的首要工作还是搞好该死的通信网络,其次才是编程.好了费话少说,开始今天的正题.做为见面礼,给大家讲一个高级技巧好了.
Mapbasic高级编程之定制工具图标
下面是程序的原码
‘程序在Windows2000英文版(SP4),Mapinfo6.0英文版(SP1),Mapbasic5.5调试通过
Include "mapbasic.def"
Declare Sub Main
Declare Sub TestDLLCall
Declare Function InitResDLL () As String
Declare Function MyDllFunc_w32 Lib "win32/ico32.dll" Alias "MyDllFunc"
(ByVal myparm As Integer) As Integer
Declare Function MyDllFunc_w16 Lib "win16/ico16.dll" Alias "MyDllFunc"
(ByVal myparm As Integer) As Integer
Declare Function MyDllFunc (ByVal myparm As Integer) As Integer
Sub Main 'Ö÷³ÌÐò
Dim icodll As String
icodll = InitResDLL()
Print Chr$(12)
Print "IcoTest program is loaded from "+ApplicationDirectory$()
Print "Resource DLL is "+icodll
Create ButtonPad "IcoTest" As
ToolButton Calling TestDLLCall
Icon 138 File icodll
Cursor 136 File icodll
ToolButton Calling TestDLLCall
Icon 134 File icodll
Cursor 136 File icodll
End Sub
Function InitResDLL () As String
if (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN16) Then
InitResDLL = ApplicationDirectory$()+"win16/ico16.dll"
elseif (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN32) Then
InitResDLL = ApplicationDirectory$()+"win32/ico32.dll"
else
Note "This application is not supported on this platform."
End Program
end if
End Function
Function MyDllFunc (ByVal myparm As Integer) As Integer
if (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN16) Then
MyDllFunc = MyDllFunc_w16(myparm)
elseif (SystemInfo(SYS_INFO_MIPLATFORM) = MIPLATFORM_WIN32) Then
MyDllFunc = MyDllFunc_w32(myparm)
else
Note "This application is not supported on this platform."
End Program
end if
End Function
Global parmval As Integer
Sub TestDLLCall
parmval = parmval + 1
Print "The answer is: " + Str$(MyDllFunc(parmval))
End Sub
上面代码主要来源于一个mapbasic自带的例程,即然有现成的东东,就不用我自己动手了吧(哎呀~~~~谁打我??!!).
其实写这个程序的难点并不在于程序的本身,而是那个DLL文件的生成.
1. 图标文件的格式
按钮图标文件在Mapbasic中有严格的要求.图标文件只能是位图格式(BMP图像格式),大小为小图标18pixles宽16pixles高,大图标26pixles宽24pixles高,小图标是用在普通按钮上的,而大图标是在你在Mapinfo中选择使用大按钮之后才会用到.
2. DLL 文件的编辑
编辑好了图标文件,现在来把它们添加到DLL中,我们无需重新的编写一段C语言代码来实现DLL文件的生成,那样你首先的会C语言.我说的方法是直接的利用Mapbasic例程中的DLL文件.
用资源编辑软件打开DLL文件,将编辑好的BMP文件添加到DLL中,注意保存顺序,首先是小的位图,然后是大的位图,在命名时要注意两个文件必须相连,例如:小图标命名为138,那么大图标就应该命名为139.保存DLL.这样就好了,你只需在上面的程序代码中修改ICON的号码就可以看到你的图标文件了.
OK,就这么多了,有什么没说清楚的地方,欢迎大家提问和讨论.
共同学习,共同进步.
Total 2004.07.01 23:07 写于新疆乌鲁木齐
相关文章推荐
- 动态改变工具栏按钮图标及工具提示文本
- Total的Mapbasic教学-输出特定信息到一个文本文件和如何算出线的另一个端点
- Swift - 修改导航栏“返回”按钮文字,图标
- 整理的汇编工具、汇编网站和汇编教学平台总结
- vs2010 添加删除工具栏资源的上图标按钮
- ArcMap工具箱中的工具不全,工具带有“锁”图标问题
- Jquery 通过切换按钮中图标的类来控制出现不同的按钮图标
- 跟我一起学extjs5(06--使用图标字体来美化按钮)
- Python针对特定服务定制的代理工具V2.0----------------(代码组织简介)
- iOS UI设计与开发 按钮、图标和图片
- 重写QTabWidget,在标签后面添加图标按钮
- 分享2个第三方社会化分享按钮及分享工具
- Bug管理工具(TCE)之缺陷流程定制
- 《BREW进阶与精通――3G移动增值业务的运营、定制与开发》连载之59---BREW toolsuite 工具
- 真彩图标工具栏实现类
- 1.制作字体图标网站https://icomoon.io 2.制作bootstrap按钮样式,生成css代码 http://blog.koalite.com/bbg/
- 通过继承封装导航栏,使导航栏上面出现的按钮和图标均相同
- easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
- Java-如何定制自己的工具库: mytools or myutil
- Mac 点击dock图标显示窗口,点击关闭按钮隐藏窗口