第 9章 MapBasic编程
9.1 制作菜单栏
9.1.1 制作全新的菜单栏
9.1.2 修改已有菜单栏
9.2 菜单制作
9.2.1 全新菜单的制作
9.2.2 更改原有菜单
9.3 对话框制作
9.3.1 标准对话框
9.3.2 自定义对话框制作
9.3.3 控件的位置和大小
9.3.4 控件类型
9.3.5 控件的初值和终值
9.4 窗口
9.4.1 窗口的大小和位置
9.4.2 地图窗口
9.4.3 浏览窗口
9.4.4 统计窗口
9.4.5 布局窗口
9.4.6 信息窗口
9.4.7 消息窗口
9.5 工具条
9.5.1 工具条的类型
9.5.2 工具条的操作
9.5.3 创建触发式型按钮
9.5.4 创建工具按钮
9.5.5 向“主”工具条添加一个按钮
9.5.6 选择按钮图表
9.5.7 运行 MapBasic应用程序
9.6 MapBasic过程
9.6.1 MapBasic主过程
9.6.2 MapBasic子过程
9.7 MapBasic变量
9.8 MapBasic的表达式
9.8.1 MapBasic的函数
9.8.2 MapBasic的运算符
9.9 分支、循环和其他流程控制
9.9.1 分支语句
9.9.2 循环语句
9.9.3 其他流程控制语句
9.10 MapBasic的表操作
9.11 习题 9
9.1 制作菜单栏菜单栏是 MapInfo工作区域顶部的水平条,初始状态下的 MapInfo的菜单栏包括,File”,“Edit”,“Objects”,“Query”
等。
9.1.1 制作全新的菜单栏语法:
Create Menu Bar As
{菜单名 或 ID 菜单号 }
[,{菜单名 或 ID 菜单号 }...]
【 例 9-1】 制作一个全新菜单栏,包含,File”,“Edit”,
“Query”,“Map”,“Browse”菜单 。
代码如下:
Create Menu Bar As
"File","Edit","Query","Map","Browse"
图 9-1 全新菜单栏
9.1.2 修改已有菜单栏
1,删除菜单语法:
Alter Menu Bar Remove
{菜单名 或 ID 菜单号 }
[,{菜单名 或 ID 菜单号 }...]
【 例 9-2】 在原有菜单栏的基础上,删除
,Windows”,,Help”菜单 。
代码如下:
Alter Menu Bar Remove ID 6,ID 7
图 9-2 删除菜单
2,增加菜单语法:
Alter Menu Bar Add
{菜单名 或 ID 菜单号 }
[,{菜单名 或 ID 菜单号 }...]
【例 9-3】在原有菜单栏的基础上,增加
,DataEntry”菜单。
代码如下:
Alter Menu Bar Add "DataEntry"
图 9-3 增加菜单图 9-4 在菜单栏中间增加菜单
3,恢复菜单语法:
Create Menu Bar As Default
若放弃对菜单栏的修改,恢复原有菜单样式,可以运行以下代码:
Create Menu Bar As Default
9.2 菜单制作
9.2.1 全新菜单的制作语法:
Create Menu 新菜单名 [ID 菜单号 ]As
菜单项 1 [ ID菜单号 ] { Calling handler | As
菜单名 }
[,菜单项 2...]
【 例 9-4】 制作全新菜单,DataEntry”。
代码如下:
Create Menu "DataEntry" As '制作,DataEntry”菜单
"Add",'菜单有三个菜单项
"Edit",
"Delete"
Alter Menu Bar Add "DataEntry" '将菜单添加到菜单栏中图 9-5 制作全新菜单
9.2.2 更改原有菜单语法:
Create Menu 新菜单名 [ID 菜单号 ]As
菜单项 1 [ ID菜单项 ] { Calling handler | As 菜单名 }
[,菜单项 2...]
【 例 9-5】 更改原有菜单,File”的内容 。
代码如下:
Create Menu "&File" As
"&New",
"&Open",
"&Close",
"&Save",
"&Print",
"&Exit"
图 9-6 更改原有菜单
9.3 对话框制作
9.3.1 标准对话框
1,消息对话框语法:
Note 消息 图 9-7 消息对话框
【 例 9-6】 例如显示一个,查询成功 !,的消息对话框 。
代码如下:
Note "查询成功 ! "
2,询问对话框语法:
Ask (提示信息,确定文本,取消文本 )
【 例 9-7】 下面的例子用生成一个简单询问对话框 。
Dim more As Logical
more = Ask("Do you want to
continue?","OK","Stop")
运行结果如图 9-8所示 。 图 9-8 询问对话框
3,选择文件对话框语法:
FileOpenDlg(路径,文件名,文件类型,标题 )
【 例 9-8】 下面的程序用 FileOpenDlg()函数显示提示用户打开一个文件的对话框 。
Dim s_filename As String
s_filename=
FileOpenDlg("","","TAB","Open Table")
运行结果如图 9-9所示。
图 9-9 选择文件对话框
9.3.2 自定义对话框制作
【 例 9-9】 下面是生成一个自定义对话框的代码:
Dialog
title "按省份名 "
Control Statictext
title "请输省份名,"
Control Edittext
Control Okbutton
Title "确定 "
Control Cancelbutton
Title "取消 "
图 9-10 自定义对话框图 9-11 指定位置和大小
9.3.3 控件的位置和大小控件的大小由 Width( 宽)和 Height( 高)
控制。位置和大小采用对话框单位为单位,每个对话框单位表示一个字符宽度的 1/4或一个字符高度的 1/8,以对话框的左上角为原点,它的位置是( 0,0)。
【 例 9-10】 下面的例程指定了控件的位置及大小 。
Dialog
Title "按省份名 "
Control StaticText
Title "请输省份名,"
Control EditText
Control OkButton
Width 20
Height 12
Title "确定 "
Position 60,32
Control CancelButton
Width 20
Height 12
Title "取消 "
Position 100,32
运行结果如图 9-11所示 。
9.3.4 控件类型
1,静态文本控件语法:
Control StaticText
[ Position x,y ]
[ Width宽度 ] [ Height高度 ]
[ ID控件号 ]
[ Title标题 ]
【 例 9-11】 下面是生成一个静态文本控件的代码:
Dialog
Control StaticText
Title "Enter map title:"
Position 5,10
Control OkButton 图 9-12 静态文本控件
Control CancelButton
运行结果如图 9-12所示 。
2,输入文本控件语法:
Control EditText
[ Position x,y ]
[ Width宽度 ] [ Height高度 ]
[ ID控件号 ]
[ Value 初始值 ]
[ Into变量 ]
【 例 9-12】 下面是生成一个输入文本控件的代码:
Dialog
Control EditText
Control OkButton
Control CancelButton
运行结果如图 9-13所示。
图 9-13 输入文本控件
3,组合框控件语法:
Control GroupBox
[ Position x,y ]
[ Width宽度 ] [ Height高度 ]
[ Title标题 ]
【 例 9-13】 下面是生成一个组合框的代码:
Dialog
Control GroupBox
Title "Level of Detail"
Position 5,30
Height 40 Width 70
Control OkButton
Control CancelButton
运行结果如图 9-14所示。
4,单选项组合控件语法:
Control RadioGroup 图 9-14 组合框控件
[ Position x,y ]
[ ID控件号 ]
[ Calling过程 ]
[ Title {字符串表达式 或 From Variable 字符串变量 }]
[ Value初始选项 ]
[ Into变量 ]
【 例 9-14】 下面是生成一个单选项组合控件的代码:
Dialog
Control RadioGroup
Title "&Full Details;&Partial Details"
Position 15,42
Control OkButton
Control CancelButton
运行结果如图 9-15所示 。
5,Picker选取对象类控件语法:
Control { PenPicker 或 BrushPicker 或
SymbolPicker 或 FontPicker }
[ Position x,y ] [ Width 宽度 ] [ Height 高度 ]
[ ID控件号 ]
[ Calling过程 ]
[ Value样式表达式 ]
[ Into样式变量 ]
【 例 9-15】 下面是生成一个文本选取控件的代码:
Dialog
Control FontPicker
Position 140,42
Control OkButton
Control CancelButton
运行结果如图 9-16所示。 图 9-16 文本选取控件
6.ListBox列表框控件语法:
Control ListBox
[ Position x,y ] [ Width 宽度 ] [ Height 高度 ]
[ ID控件号 ]
[ Calling过程 ]
[ Title {字符串表达式 或 From Variable 字符串变量 }]
[ Value初始选项 ]
[ Into变量 ]
【 例 9-16】 下面是生成一个列表框控件的代码:
Dialog
Control ListBox
Title "1st Quarter;2nd Quarter;3rd Quarter;4th
Quarter"
Position 10,92 Height 40
Control OkButton
Control CancelButton
运行结果如图 9-17所示 。
图 9-17列表框控件
7,多重列表框控件语法:
Control MultiListBox
[ Position x,y ] [ Width 宽度 ]
[ Height 高度 ]
[ ID控件号 ]
[ Calling过程 ]
[ Title {字符串表达式 或 From Variable 字符串变量 }]
[ Value初始选项 ]
[ Into变量 ]
【 例 9-17】 下面是生成一个多重列表框控件的代码:
Dialog
Control MultiListBox
Title "Streets;Highways;Towns;Countries;States"
Position 10,92
Width 65
Height 35
Control OkButton
Control CancelButton
运行结果如图 9-18所示 。 图 9-18 多重列表框控件
8,下拉列表框控件语法:
Control PopupMenu
[ Position x,y ]
[ Width宽度 ]
[ ID 控件号 ]
[ Calling 过程 ]
[ Title { [ Title {字符串表达式 或 From
Variable 字符串变量 }]
[ Value 初始选项 ]
[ Into 选项变量 ]
【 例 9-18】 下面是生成一个下拉列表框控件的代码:
Dialog
Control PopupMenu
Title
"Town;County;Territory;Region;Entire
state"
Position 10,150
Control OkButton
Control CancelButton 图 9-19 下拉列表框控件
9,复选框控件语法:
Control CheckBox
[ Position x,y ] [ Width 宽度 ]
[ ID 控件号 ]
[ Calling过程 ]
[ Title标题 ]
[ Value逻辑值 ]
[ Into逻辑变量 ]
【 例 9-19】 下面是生成一个复选框控件的代码:
Dialog
Control CheckBox
Title "Include &Legend"
Position 115,155
Control OkButton 图 9-20复选框控件
Control CancelButton
运行结果如图 9-20所示 。
10,按钮控件
MapBasic包含两个按钮,OkButton和
CancelButton。
9.3.5 控件的初值和终值大部分控件都有一可选的 Value从句,这个从句定义了对话框第一次显示时该控件的状态。
大多控件都有一 Into从句,这个从句后面有一个变量,MapInfo用这个变量存储对话框的数据。如果有 Into从句,用户通过单击,Ok”
按钮确认该对话框后,MapInfo会用 Into后的变量存储控件的最终值。
9.4 窗口
MapBasic应用程序能够控制所有的
MapInfo窗口,包括标准窗口、地图窗口、浏览
( Browse) 窗口、布局( Layout) 窗口、专题图
( Graph) 窗口、信息窗口。
9.4.1 窗口的大小和位置窗口的大小和位置可以通过两种方法控制:
① 在打开的窗口的同时指定窗口的大小和位置。
【 例 9-20】 下面的语句指定地图窗口及布局窗口的位置及大小:
Open Table "world"
Open Table "cust1994" As customers
Map from customers,world
Position (1,1)
Width 3
Height 2
Layout Position (0,0)
Width 2
Height 4
② 在打开窗口后调整窗口的位置和大小 。
使用 Set Window语句 。
语法:
Set Window 窗口号
[ Position ( x,y ) [ Units 纸面单位 ] ]
[ Width 窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
9.4.2 地图窗口
1,图层的操作增加图层的语法为:
Add Map
[ Window 窗口号 ]
Layer 表 1 [,表 2,.,]
[ Auto ]
[ Animate ]
2,设置地图投影可以使用 Set Map CoordSys..,语句改变地图投影,若要保存投影,使用 Commit
Table,..As...CoordSys..语句。
3,制作专题图专题图有六种形式 。 每种都可以用相应的
MapBasic语句实现 。
(1) 范围值 (ranges of values)
语法:
Shade [ Window 窗口号 ]
{ 图层号 或 图层名 }
With 表达式
[ Ignore 忽略的数值 ]
Ranges
[ Apply { Color或 Size或 All } ]
【例 9-22】下面的例子是根据美国 1990年人口生成的范围值图,总共有三个范围,每个范围用不同颜色、样式填充。
Open Table " states "
Map From
Shade states With Pop_1990 Ranges
4827000:29280000 Brush (2,0,201326591),
1783000,4827000 Brush (8,0,16777215),
449000,1783000 Brush (5,0,16777215)
(2) 独立值 (individual values)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 }
With 表达式
[ Ignore 忽略的数值 ]
Values 字段 1 [ Pen..,] [ Line...]
[ Brush..,] [ Symbol..,]
[,字段 2 [ Pen..,] [ Line...]
[ Brush..,] [ Symbol..,],.,]
【 例 9-23】 下面的例子假定,uk_sales”表中有
,Sales_Rep”字段,该字段代表在英国销售代理的名字 。 根据销售商来制作独立值图 。
Open Table "uk_sales"
Map From uk_sales
Shade 1 With Proper$(Sales_Rep)
Ignore ""
Values
"Alan",
"Amanda",
"Bob",
"Jan"
(3) 点密度 (dot density)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 }
With 表达式
Density 数值,点的尺寸
[ Color 颜色号 ]
【 例 9-24】 下面的例子根据人口制作点密度图,60000个人用一个 4个像元大小的点表示 。
Open Table "States"
Map From states
Shade states With Num_HH_90
Density 60000:4
(4) 等级符号 (graduated symbols)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 }
With 表达式
Graduated 最小值,符号大小 最大值,符号大小
Symbol,,,
[ Inflect Symbol,,,]
[ Vary Size By {" LOG" 或 "SQRT" 或
"CONST"} ]
【 例 9-25】 下面的例子建立等级符号表示利润和亏损 。 商店盈利则用绿色上三角表示,商店亏损则用红色下三角表示 。
Shade stores With Net_Profit
Graduated
0.0:0 15000:24
Symbol(36,GREEN,24)
Inflect Symbol(37,RED,24)
Vary Size By "SQRT"
(5) 饼图 (pie charts)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 或 选择集 }
With 表达式 1,表达式 2...
[ Half ] Pie [ Angle 角度 ] [ Counter ]
[ Fixed ] [ Max Size 饼尺寸 [ Units 单位名称 ]
[ At Value 最大值 [ Vary Size By {"
LOG" | "SQRT" | "CONST"} ] ] ]
【 例 9-26】 下面的例子产生的饼图为同一尺寸 。
Shade sales_95 With phone_sales,retail_sales
Pie Fixed
Max Size 0.25 Units "Inch"
【例 9-27】下面的例子创建一个变化大小的饼图。
如果记录的总和为 85000,它对应的饼图为 0.25
英寸,记录的值越小,饼图也越小。
Shade sales_95 With phone_sales,retail_sales
Pie
Max Size 0.25 Units "Inch"
At Value 85000
【 例 9-28】 下面的例子创建专题图,将饼图放置在图形对象中央 。
Shade sales_95 With phone_sales,retail_sales
Pie Angle 180
Max Size 0.5 Units "Inch"
At Value 85000
Vary Size By "SQRT"
Border Pen (1,2,0)
Position Center Above
Style Brush(2,RED,0),Brush(2,BLUE,0)
(6) 直方图 (bar charts)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 或 选择集 }
With 表达式 1,表达式 2...
{ Bar [ Normalized ] 或 Stacked Bar
[ Fixed ] }
[ Max Size 最大尺寸 [ Units 单位名称 ]
[ At Value 最大值 [ Vary Size By {"
LOG" 或 "SQRT" 或 "CONST"} ] ] ]
【 例 9-29】 下面的例子创建直方图,并将直方图定位在地图对象中心点上方,
Shade sales_93
With phone_sales,retail_sales
Bar
Max Size 0.4 Units "Inch" At Value 1245000
Vary Size By CONST
Border Pen (1,2,0)
Position Center Above
Style Brush(2,RED,0),Brush(2,BLUE,0)
9.4.3 浏览窗口语法:
Browse 表达式列表 From 表
[ Position ( x,y ) [ Units 纸面单位 ] ]
[ Width 窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
[ Row 行号 ]
[ Column 列号 ]
[ Min 或 Max ]
【 例 9-29】 下面的例子仅显示省份和人口 。
Browse 省份,人口 from 政区图 9-21 显示所有字段 图 9-22 显示选择字段
【 例 9-31】 下面的例子将第十九行和第二列显示在浏览窗口的左上角 。
Browse * from World
Row 19
Column 2
图 9-23 浏览窗口
【 例 9-32】 下面的例子指定了表达式,用人口除以面积得到密度这一项,并将该表 达 式 的 名 称 改 为,Density”(,密度,) 。
Open Table "world"
Browse
country,
population,
population/area(obj,"sq km") "Density"
From world
9.4.4 统计窗口语法:
Graph
标注列,表达式 1,表达式 2...
From 表
[ Position ( x,y ) [ Units 纸面单位 ] ]
[ Width 窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
[ Min 或 Max ]
【 例 9-33】 下面的例子创建人口统计图 。
Graph
人口
From 政区运行结果如图 9-24所示 。
图 9-24 统计窗口
9.4.5 布局窗口语法:
Layout
[ Position ( x,y ) [ Units 纸面单位 ] ]
[Width窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
[ { Min 或 Max } ]
【 例 9-34】 例如下面的例子选择布局窗口中所有的对象 。
Select * From Layout1
【 例 9-35】 下面的例子创建一个布局窗口 。
Layout Position (0,0) Width 2 Height 4
运行结果如图 9-25所示 。
图 9-25 布局窗口
9.4.6 信息窗口
【 例 9-36】 下面的例子创建一个信息窗口 。
Include "MapBasic.def"
Open Table "World" Interactive
Select
Country,Capital,Inflat_Rate+0 "Inflation"
From World Into World_Query
Set Window Info
Title "Country Data"
Table World_Query Rec 9
Font MakeFont("Arial",1,10,BLACK,WHITE)
Width 3 Units "in"
Height 1.2 Units "in"
Position (2.5,1.5) Units "in"
Front
9.4.7 消息窗口语法:
Print 消息在窗口信息中实现换行,可以用下面的语句,图 9-26 消息窗口的换行
Print "Map Layers:" +
Chr$(10)
+ " World,Capitals"
运行结果如图 9-26所示 。 图 9-27设置消息的字体及颜色
【 例 9-37】 下面的例子创建一个消息窗口,设置了大小和字体样式 。
Include "MAPBASIC.DEF" ' needed for color name
'BLUE'
Open Window Message ' open Message window
Set Window Message
Font ("Helv",1,10,BLUE) ' Helvetica bold...
Position (0.25,0.25) ' place in upper left
Width 3.0 ' make window 3" wide
Height 1.0 ' make window 1" high
Print "MapBasic Dispatcher now on line"
运行结果如图 9-27所示 。
9.5 工具条图 9-28 标准工具条 图 9-29 绘图工具条 图 9-30 主工具条
9.5.1 工具条的类型
1,PushButtons按钮这种叫做触发式按钮。当用户按下 ToolButtons按钮后,按钮立即复位,并调用相应的处理程序。
2,ToggleButtons按钮这种按钮叫做开关式按钮。当用户单击
ToggleButtons按钮时,这种按钮会在按下与没按下之间切换。
3,ToolButton按钮这种称为工具按钮。当用户单击这种按钮时,它处于活动状态,直到用户单击了另外的按钮。
9.5.2 工具条的操作
1,创建工具条创建一个新工具条的语句为:
Create ButtonPad
2,激活工具条创建一个工具条,并不能立刻显示在窗口中,
需要使用下面的语句激活:
Alter ButtonPad
3,激活按钮
4,按钮的返回值
9.5.3 创建触发式型按钮
9.5.4 创建工具按钮
9.5.5 向,主,工具条添加一个按钮
9.5.6 选择按钮图表
【 例 9-41】 下面的语句定义了一个按钮,并为按钮选择了一个图标,图标代码定义为 MI_ICON_INFO:
Alter ButtonPad "主 "
Add Separator
Add PushButton
Icon MI_ICON_INFO
Calling procedure_name
图 9-31 图标例子窗口
① 运行图标示例程序,ICONDEMO.MBX”。 显示图标例子菜单,如图 9-31所示 。
② 单击图标示例菜单,选择一个菜单项,出现一个自定义图标按钮盒 。 如图 9-32所示 。
③ 单击某个图标,出现如图 9-33所示的对话框 。
④ 将对话框中的图标代码复制到剪贴板中 。
⑤ 打开 MapBasic程序,用〈 Ctrl〉 +〈 V〉 键将图标代码粘贴到应用程序中。
图 9-32 自定义图标按钮盒图 9-33 图标代码对话框
9.5.7 运行 MapBasic应用程序
Startup是一个特殊的工作空间,如果该工作空间存在于用户的系统中,MapInfo将自动加载该工作空间,若 Startup工作空间中有 Run
Application语句,则 MapInfo将自动运行指定的程序 。
例如,用户要运行应用程序 Query,可以创建如下 Startup工作空间:
!Workspace
!Version 400
!Charset Neutral
Run Application "Query.mbx"
9.6 MapBasic过程
9.6.1 MapBasic主过程
Declare Sub Main '声明一个主过程
Sub Main '主过程开始
Note "Testing,one two three." '显示一个消息
End Sub '结束主过程
9.6.2 MapBasic子过程子过程的声明方法如下:
Declare Sub
子过程名图 9-34 查询菜单图 9-35 ProvinceName子过程
9.7 MapBasic变量
MapBasic变量包括全局变量 ( Global) 和局部变量 ( Dim) 。 全局变量在整个程序中起作用,而局部变量仅在声明该变量的过程中其作用 。
变量的类型有短整型( SmallInt),整型
( Integer),浮点型( Float),定长字符型
( String),可变长字符型( String*n),布尔型( Logical),日期型( Date),对象型
( Object),列变量( Alias),线型( Pen)、
填充( Brush),字体( Font),符号
( Symbol)。
9.8 MapBasic的表达式
9.8.1 MapBasic的函数
MapBasic支持许多不同的函数 。 每一个函数都有不同的作用,如 Sqr()函数计算正方形的面积,而 Ucase$()函数将文本字符串改成大写 。 在表达式中引用函数时,程序就调用该函数并返回函数值 。
9.8.2 MapBasic的运算符
1,数字运算符操作符 用途
+ 相加
- 相减
* 相乘
/ 相除
\ 整除
Mod 取余
^ 乘方
2,字符串运算符字符运算符有,+”,,&”,,Like”。
3,日期运算符表 9-3 MapBasic的日期运算符表达式 结果
date+integer 日期型值,表示以后的日期
date- integer 日期型值,表示以前的日期
date-date 整型数,表示过去的天数
4,比较运算符表 9-4 比较运算符运算符 返回 TRUE值
= 相等
<> 不相等
< 小于
> 大于
<= 小于等于
>= 大于等于
Between,..And,.,在 … 范围内
5,逻辑运算符表 9-5 逻辑运算符运算符 返回 TRUE值 举例
And 两操作数为真 If a And b Then
Or 任一操作数为真 If a Or b Then
Not 操作数为假 If Not a Then
6,图形运算符表 9-6 图形运算符运算符 返回 TRUE值 举例
Contains 目标 A包含目标 B中心点 If a Contains b Then
Contains Part 目标 A包含目标 B的一部分
If a Contains Part b Then
Contains Entire 目标 A包含目标 B的全部 If a Contains Entire b
Then
Partly Within 目标 A的一部分在目标 B
内
If a Partly Within b Then
Entirely Within 目标 A的全部在目标 B内 If a Entirely Within b
Then
Intersects 目标 A和目标 B相交 If a Intersects b Then
7,运算符的优先级包含多个运算符的复杂表达式,
MapBasic会按运算符的优先级规则来确定运算的先后 。
优先级最高的是,( )”,其次指数、
取反、乘法、除法、取余、取整运算、
加法、减法、字符连接符、图形运算符、
比较运算符,Like,Not,And,最低的是,Or”。
9.9 分支、循环和其他流程控制
9.9.1 分支语句
1,If语句
(1) If...Then
(2) If...Then...Else
(3) If...Then...ElseIf...Then
【例 9-45】下面的例子用来判断当天的日期,若是 1月 1日,则系统显示一个消息窗“新年好”;若是 2月 14日,则系统显示一个消息窗
“情人节好”;若是 12月 25日,则系统显示一个消息窗“圣诞节好”;
若是 12月 25日,则系统显示一个消息窗“圣诞节好”;否则,则系统显示一个消息窗“好日子”。
2,Do Case语句语法:
Do Case 表达式
Case 结果表 1
语句体 1
Case 结果表 2
语句体 2
…
Case Else
语句体 n
End Case
3,Goto语句语法:
Goto 标号
9.9.2 循环语句
1,For...Next语句语法:
For 循环变量 =初始值 To 终值 [Step 步长 ]
[循环体 ]
Exit For
[循环体 ]
Next
2,While...Wend语句语法:
While 条件循环体
Wend
3,Do...Loop语句语法:
Do
循环体
Loop [ { Until 或 While } 条件 ]
或
Do
[ { Until 或 While } 条件 ]
循环体
Loop
9.9.3 其他流程控制语句
1,End Program语句语法:
End Program
2,Terminate Application语句语法:
Terminate Application 应用程序名
3,End MapInfo语句语法:
End MapInfo
9.10 MapBasic的表操作
1,创建新表语法:
Create Table 表
( column 字段数据类型 [,.,,] )
[ File 保存位置 ]
[ { Type NATIVE |
Type DBF [ CharSet char_set ] |
Type Access Database 数据库文件格式
2,打开表语法:
Open Table 表 [ As 别名 ]
[ Interactive ]
3,关闭表语法:
Close Table 表 [ Interactive ]
4,删除表语法:
Drop Table 表
5,查询表语法:
Select 表达式列表
From 表 1,表 2,..,[ Where 表达式条件 ]
[ Into 结果表 ]
[ Group By 字段 ]
[ Order By 字段 ]
5,修改表数据
(1) Insert语句语法:
Insert Into 表 [ ( 字段 ) ]
{ Values (字段表达式 ) 或 Select 字段 From
表 }
6,修改表结构语法:
Alter Table 表 (
[Add 字段 1 类型 1,字段 2 类型 2,..,]
[Modify字段 1 类型 1,字段 2 类型 2,..,]
[Drop字段 1,字段 2..,]
[Rename 旧字段 1 新字段 1,旧字段 2 新字段 2 [,...] ]
[Order字段 1,字段 2..,]
)
[ Interactive ]
9.11 习题 9
一,思考题
1,MapBasic的语句和 VB,QB的异同?
2,MapBasic的特点在什么地方?
3,控件有哪些类型? 说明各有什么用途 。
4,如何读取控件的终值?
二,上机练习
1,制作一个全新的菜单栏,包含若干菜单和菜单项 。
2,制作一个简单对话框,并指定它的位置和大小。
3,用各种打开窗口的语句打开一个窗口,
并指定它的位置和大小 。
4,用添加,删除工具条的语句自定义一个工具条,里面要包含一个新按钮 。
5,编辑一段小程序,实现主过程对子过程的调用 。
6,用表的操作语句,实现对表的创建、
修改、删除、重命名、修改表结构等操作。
9.1 制作菜单栏
9.1.1 制作全新的菜单栏
9.1.2 修改已有菜单栏
9.2 菜单制作
9.2.1 全新菜单的制作
9.2.2 更改原有菜单
9.3 对话框制作
9.3.1 标准对话框
9.3.2 自定义对话框制作
9.3.3 控件的位置和大小
9.3.4 控件类型
9.3.5 控件的初值和终值
9.4 窗口
9.4.1 窗口的大小和位置
9.4.2 地图窗口
9.4.3 浏览窗口
9.4.4 统计窗口
9.4.5 布局窗口
9.4.6 信息窗口
9.4.7 消息窗口
9.5 工具条
9.5.1 工具条的类型
9.5.2 工具条的操作
9.5.3 创建触发式型按钮
9.5.4 创建工具按钮
9.5.5 向“主”工具条添加一个按钮
9.5.6 选择按钮图表
9.5.7 运行 MapBasic应用程序
9.6 MapBasic过程
9.6.1 MapBasic主过程
9.6.2 MapBasic子过程
9.7 MapBasic变量
9.8 MapBasic的表达式
9.8.1 MapBasic的函数
9.8.2 MapBasic的运算符
9.9 分支、循环和其他流程控制
9.9.1 分支语句
9.9.2 循环语句
9.9.3 其他流程控制语句
9.10 MapBasic的表操作
9.11 习题 9
9.1 制作菜单栏菜单栏是 MapInfo工作区域顶部的水平条,初始状态下的 MapInfo的菜单栏包括,File”,“Edit”,“Objects”,“Query”
等。
9.1.1 制作全新的菜单栏语法:
Create Menu Bar As
{菜单名 或 ID 菜单号 }
[,{菜单名 或 ID 菜单号 }...]
【 例 9-1】 制作一个全新菜单栏,包含,File”,“Edit”,
“Query”,“Map”,“Browse”菜单 。
代码如下:
Create Menu Bar As
"File","Edit","Query","Map","Browse"
图 9-1 全新菜单栏
9.1.2 修改已有菜单栏
1,删除菜单语法:
Alter Menu Bar Remove
{菜单名 或 ID 菜单号 }
[,{菜单名 或 ID 菜单号 }...]
【 例 9-2】 在原有菜单栏的基础上,删除
,Windows”,,Help”菜单 。
代码如下:
Alter Menu Bar Remove ID 6,ID 7
图 9-2 删除菜单
2,增加菜单语法:
Alter Menu Bar Add
{菜单名 或 ID 菜单号 }
[,{菜单名 或 ID 菜单号 }...]
【例 9-3】在原有菜单栏的基础上,增加
,DataEntry”菜单。
代码如下:
Alter Menu Bar Add "DataEntry"
图 9-3 增加菜单图 9-4 在菜单栏中间增加菜单
3,恢复菜单语法:
Create Menu Bar As Default
若放弃对菜单栏的修改,恢复原有菜单样式,可以运行以下代码:
Create Menu Bar As Default
9.2 菜单制作
9.2.1 全新菜单的制作语法:
Create Menu 新菜单名 [ID 菜单号 ]As
菜单项 1 [ ID菜单号 ] { Calling handler | As
菜单名 }
[,菜单项 2...]
【 例 9-4】 制作全新菜单,DataEntry”。
代码如下:
Create Menu "DataEntry" As '制作,DataEntry”菜单
"Add",'菜单有三个菜单项
"Edit",
"Delete"
Alter Menu Bar Add "DataEntry" '将菜单添加到菜单栏中图 9-5 制作全新菜单
9.2.2 更改原有菜单语法:
Create Menu 新菜单名 [ID 菜单号 ]As
菜单项 1 [ ID菜单项 ] { Calling handler | As 菜单名 }
[,菜单项 2...]
【 例 9-5】 更改原有菜单,File”的内容 。
代码如下:
Create Menu "&File" As
"&New",
"&Open",
"&Close",
"&Save",
"&Print",
"&Exit"
图 9-6 更改原有菜单
9.3 对话框制作
9.3.1 标准对话框
1,消息对话框语法:
Note 消息 图 9-7 消息对话框
【 例 9-6】 例如显示一个,查询成功 !,的消息对话框 。
代码如下:
Note "查询成功 ! "
2,询问对话框语法:
Ask (提示信息,确定文本,取消文本 )
【 例 9-7】 下面的例子用生成一个简单询问对话框 。
Dim more As Logical
more = Ask("Do you want to
continue?","OK","Stop")
运行结果如图 9-8所示 。 图 9-8 询问对话框
3,选择文件对话框语法:
FileOpenDlg(路径,文件名,文件类型,标题 )
【 例 9-8】 下面的程序用 FileOpenDlg()函数显示提示用户打开一个文件的对话框 。
Dim s_filename As String
s_filename=
FileOpenDlg("","","TAB","Open Table")
运行结果如图 9-9所示。
图 9-9 选择文件对话框
9.3.2 自定义对话框制作
【 例 9-9】 下面是生成一个自定义对话框的代码:
Dialog
title "按省份名 "
Control Statictext
title "请输省份名,"
Control Edittext
Control Okbutton
Title "确定 "
Control Cancelbutton
Title "取消 "
图 9-10 自定义对话框图 9-11 指定位置和大小
9.3.3 控件的位置和大小控件的大小由 Width( 宽)和 Height( 高)
控制。位置和大小采用对话框单位为单位,每个对话框单位表示一个字符宽度的 1/4或一个字符高度的 1/8,以对话框的左上角为原点,它的位置是( 0,0)。
【 例 9-10】 下面的例程指定了控件的位置及大小 。
Dialog
Title "按省份名 "
Control StaticText
Title "请输省份名,"
Control EditText
Control OkButton
Width 20
Height 12
Title "确定 "
Position 60,32
Control CancelButton
Width 20
Height 12
Title "取消 "
Position 100,32
运行结果如图 9-11所示 。
9.3.4 控件类型
1,静态文本控件语法:
Control StaticText
[ Position x,y ]
[ Width宽度 ] [ Height高度 ]
[ ID控件号 ]
[ Title标题 ]
【 例 9-11】 下面是生成一个静态文本控件的代码:
Dialog
Control StaticText
Title "Enter map title:"
Position 5,10
Control OkButton 图 9-12 静态文本控件
Control CancelButton
运行结果如图 9-12所示 。
2,输入文本控件语法:
Control EditText
[ Position x,y ]
[ Width宽度 ] [ Height高度 ]
[ ID控件号 ]
[ Value 初始值 ]
[ Into变量 ]
【 例 9-12】 下面是生成一个输入文本控件的代码:
Dialog
Control EditText
Control OkButton
Control CancelButton
运行结果如图 9-13所示。
图 9-13 输入文本控件
3,组合框控件语法:
Control GroupBox
[ Position x,y ]
[ Width宽度 ] [ Height高度 ]
[ Title标题 ]
【 例 9-13】 下面是生成一个组合框的代码:
Dialog
Control GroupBox
Title "Level of Detail"
Position 5,30
Height 40 Width 70
Control OkButton
Control CancelButton
运行结果如图 9-14所示。
4,单选项组合控件语法:
Control RadioGroup 图 9-14 组合框控件
[ Position x,y ]
[ ID控件号 ]
[ Calling过程 ]
[ Title {字符串表达式 或 From Variable 字符串变量 }]
[ Value初始选项 ]
[ Into变量 ]
【 例 9-14】 下面是生成一个单选项组合控件的代码:
Dialog
Control RadioGroup
Title "&Full Details;&Partial Details"
Position 15,42
Control OkButton
Control CancelButton
运行结果如图 9-15所示 。
5,Picker选取对象类控件语法:
Control { PenPicker 或 BrushPicker 或
SymbolPicker 或 FontPicker }
[ Position x,y ] [ Width 宽度 ] [ Height 高度 ]
[ ID控件号 ]
[ Calling过程 ]
[ Value样式表达式 ]
[ Into样式变量 ]
【 例 9-15】 下面是生成一个文本选取控件的代码:
Dialog
Control FontPicker
Position 140,42
Control OkButton
Control CancelButton
运行结果如图 9-16所示。 图 9-16 文本选取控件
6.ListBox列表框控件语法:
Control ListBox
[ Position x,y ] [ Width 宽度 ] [ Height 高度 ]
[ ID控件号 ]
[ Calling过程 ]
[ Title {字符串表达式 或 From Variable 字符串变量 }]
[ Value初始选项 ]
[ Into变量 ]
【 例 9-16】 下面是生成一个列表框控件的代码:
Dialog
Control ListBox
Title "1st Quarter;2nd Quarter;3rd Quarter;4th
Quarter"
Position 10,92 Height 40
Control OkButton
Control CancelButton
运行结果如图 9-17所示 。
图 9-17列表框控件
7,多重列表框控件语法:
Control MultiListBox
[ Position x,y ] [ Width 宽度 ]
[ Height 高度 ]
[ ID控件号 ]
[ Calling过程 ]
[ Title {字符串表达式 或 From Variable 字符串变量 }]
[ Value初始选项 ]
[ Into变量 ]
【 例 9-17】 下面是生成一个多重列表框控件的代码:
Dialog
Control MultiListBox
Title "Streets;Highways;Towns;Countries;States"
Position 10,92
Width 65
Height 35
Control OkButton
Control CancelButton
运行结果如图 9-18所示 。 图 9-18 多重列表框控件
8,下拉列表框控件语法:
Control PopupMenu
[ Position x,y ]
[ Width宽度 ]
[ ID 控件号 ]
[ Calling 过程 ]
[ Title { [ Title {字符串表达式 或 From
Variable 字符串变量 }]
[ Value 初始选项 ]
[ Into 选项变量 ]
【 例 9-18】 下面是生成一个下拉列表框控件的代码:
Dialog
Control PopupMenu
Title
"Town;County;Territory;Region;Entire
state"
Position 10,150
Control OkButton
Control CancelButton 图 9-19 下拉列表框控件
9,复选框控件语法:
Control CheckBox
[ Position x,y ] [ Width 宽度 ]
[ ID 控件号 ]
[ Calling过程 ]
[ Title标题 ]
[ Value逻辑值 ]
[ Into逻辑变量 ]
【 例 9-19】 下面是生成一个复选框控件的代码:
Dialog
Control CheckBox
Title "Include &Legend"
Position 115,155
Control OkButton 图 9-20复选框控件
Control CancelButton
运行结果如图 9-20所示 。
10,按钮控件
MapBasic包含两个按钮,OkButton和
CancelButton。
9.3.5 控件的初值和终值大部分控件都有一可选的 Value从句,这个从句定义了对话框第一次显示时该控件的状态。
大多控件都有一 Into从句,这个从句后面有一个变量,MapInfo用这个变量存储对话框的数据。如果有 Into从句,用户通过单击,Ok”
按钮确认该对话框后,MapInfo会用 Into后的变量存储控件的最终值。
9.4 窗口
MapBasic应用程序能够控制所有的
MapInfo窗口,包括标准窗口、地图窗口、浏览
( Browse) 窗口、布局( Layout) 窗口、专题图
( Graph) 窗口、信息窗口。
9.4.1 窗口的大小和位置窗口的大小和位置可以通过两种方法控制:
① 在打开的窗口的同时指定窗口的大小和位置。
【 例 9-20】 下面的语句指定地图窗口及布局窗口的位置及大小:
Open Table "world"
Open Table "cust1994" As customers
Map from customers,world
Position (1,1)
Width 3
Height 2
Layout Position (0,0)
Width 2
Height 4
② 在打开窗口后调整窗口的位置和大小 。
使用 Set Window语句 。
语法:
Set Window 窗口号
[ Position ( x,y ) [ Units 纸面单位 ] ]
[ Width 窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
9.4.2 地图窗口
1,图层的操作增加图层的语法为:
Add Map
[ Window 窗口号 ]
Layer 表 1 [,表 2,.,]
[ Auto ]
[ Animate ]
2,设置地图投影可以使用 Set Map CoordSys..,语句改变地图投影,若要保存投影,使用 Commit
Table,..As...CoordSys..语句。
3,制作专题图专题图有六种形式 。 每种都可以用相应的
MapBasic语句实现 。
(1) 范围值 (ranges of values)
语法:
Shade [ Window 窗口号 ]
{ 图层号 或 图层名 }
With 表达式
[ Ignore 忽略的数值 ]
Ranges
[ Apply { Color或 Size或 All } ]
【例 9-22】下面的例子是根据美国 1990年人口生成的范围值图,总共有三个范围,每个范围用不同颜色、样式填充。
Open Table " states "
Map From
Shade states With Pop_1990 Ranges
4827000:29280000 Brush (2,0,201326591),
1783000,4827000 Brush (8,0,16777215),
449000,1783000 Brush (5,0,16777215)
(2) 独立值 (individual values)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 }
With 表达式
[ Ignore 忽略的数值 ]
Values 字段 1 [ Pen..,] [ Line...]
[ Brush..,] [ Symbol..,]
[,字段 2 [ Pen..,] [ Line...]
[ Brush..,] [ Symbol..,],.,]
【 例 9-23】 下面的例子假定,uk_sales”表中有
,Sales_Rep”字段,该字段代表在英国销售代理的名字 。 根据销售商来制作独立值图 。
Open Table "uk_sales"
Map From uk_sales
Shade 1 With Proper$(Sales_Rep)
Ignore ""
Values
"Alan",
"Amanda",
"Bob",
"Jan"
(3) 点密度 (dot density)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 }
With 表达式
Density 数值,点的尺寸
[ Color 颜色号 ]
【 例 9-24】 下面的例子根据人口制作点密度图,60000个人用一个 4个像元大小的点表示 。
Open Table "States"
Map From states
Shade states With Num_HH_90
Density 60000:4
(4) 等级符号 (graduated symbols)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 }
With 表达式
Graduated 最小值,符号大小 最大值,符号大小
Symbol,,,
[ Inflect Symbol,,,]
[ Vary Size By {" LOG" 或 "SQRT" 或
"CONST"} ]
【 例 9-25】 下面的例子建立等级符号表示利润和亏损 。 商店盈利则用绿色上三角表示,商店亏损则用红色下三角表示 。
Shade stores With Net_Profit
Graduated
0.0:0 15000:24
Symbol(36,GREEN,24)
Inflect Symbol(37,RED,24)
Vary Size By "SQRT"
(5) 饼图 (pie charts)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 或 选择集 }
With 表达式 1,表达式 2...
[ Half ] Pie [ Angle 角度 ] [ Counter ]
[ Fixed ] [ Max Size 饼尺寸 [ Units 单位名称 ]
[ At Value 最大值 [ Vary Size By {"
LOG" | "SQRT" | "CONST"} ] ] ]
【 例 9-26】 下面的例子产生的饼图为同一尺寸 。
Shade sales_95 With phone_sales,retail_sales
Pie Fixed
Max Size 0.25 Units "Inch"
【例 9-27】下面的例子创建一个变化大小的饼图。
如果记录的总和为 85000,它对应的饼图为 0.25
英寸,记录的值越小,饼图也越小。
Shade sales_95 With phone_sales,retail_sales
Pie
Max Size 0.25 Units "Inch"
At Value 85000
【 例 9-28】 下面的例子创建专题图,将饼图放置在图形对象中央 。
Shade sales_95 With phone_sales,retail_sales
Pie Angle 180
Max Size 0.5 Units "Inch"
At Value 85000
Vary Size By "SQRT"
Border Pen (1,2,0)
Position Center Above
Style Brush(2,RED,0),Brush(2,BLUE,0)
(6) 直方图 (bar charts)
语法:
Shade [ Window 窗口号 ]
{图层号 或 图层名 或 选择集 }
With 表达式 1,表达式 2...
{ Bar [ Normalized ] 或 Stacked Bar
[ Fixed ] }
[ Max Size 最大尺寸 [ Units 单位名称 ]
[ At Value 最大值 [ Vary Size By {"
LOG" 或 "SQRT" 或 "CONST"} ] ] ]
【 例 9-29】 下面的例子创建直方图,并将直方图定位在地图对象中心点上方,
Shade sales_93
With phone_sales,retail_sales
Bar
Max Size 0.4 Units "Inch" At Value 1245000
Vary Size By CONST
Border Pen (1,2,0)
Position Center Above
Style Brush(2,RED,0),Brush(2,BLUE,0)
9.4.3 浏览窗口语法:
Browse 表达式列表 From 表
[ Position ( x,y ) [ Units 纸面单位 ] ]
[ Width 窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
[ Row 行号 ]
[ Column 列号 ]
[ Min 或 Max ]
【 例 9-29】 下面的例子仅显示省份和人口 。
Browse 省份,人口 from 政区图 9-21 显示所有字段 图 9-22 显示选择字段
【 例 9-31】 下面的例子将第十九行和第二列显示在浏览窗口的左上角 。
Browse * from World
Row 19
Column 2
图 9-23 浏览窗口
【 例 9-32】 下面的例子指定了表达式,用人口除以面积得到密度这一项,并将该表 达 式 的 名 称 改 为,Density”(,密度,) 。
Open Table "world"
Browse
country,
population,
population/area(obj,"sq km") "Density"
From world
9.4.4 统计窗口语法:
Graph
标注列,表达式 1,表达式 2...
From 表
[ Position ( x,y ) [ Units 纸面单位 ] ]
[ Width 窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
[ Min 或 Max ]
【 例 9-33】 下面的例子创建人口统计图 。
Graph
人口
From 政区运行结果如图 9-24所示 。
图 9-24 统计窗口
9.4.5 布局窗口语法:
Layout
[ Position ( x,y ) [ Units 纸面单位 ] ]
[Width窗口宽度 [ Units 纸面单位 ] ]
[ Height 窗口高度 [ Units 纸面单位 ] ]
[ { Min 或 Max } ]
【 例 9-34】 例如下面的例子选择布局窗口中所有的对象 。
Select * From Layout1
【 例 9-35】 下面的例子创建一个布局窗口 。
Layout Position (0,0) Width 2 Height 4
运行结果如图 9-25所示 。
图 9-25 布局窗口
9.4.6 信息窗口
【 例 9-36】 下面的例子创建一个信息窗口 。
Include "MapBasic.def"
Open Table "World" Interactive
Select
Country,Capital,Inflat_Rate+0 "Inflation"
From World Into World_Query
Set Window Info
Title "Country Data"
Table World_Query Rec 9
Font MakeFont("Arial",1,10,BLACK,WHITE)
Width 3 Units "in"
Height 1.2 Units "in"
Position (2.5,1.5) Units "in"
Front
9.4.7 消息窗口语法:
Print 消息在窗口信息中实现换行,可以用下面的语句,图 9-26 消息窗口的换行
Print "Map Layers:" +
Chr$(10)
+ " World,Capitals"
运行结果如图 9-26所示 。 图 9-27设置消息的字体及颜色
【 例 9-37】 下面的例子创建一个消息窗口,设置了大小和字体样式 。
Include "MAPBASIC.DEF" ' needed for color name
'BLUE'
Open Window Message ' open Message window
Set Window Message
Font ("Helv",1,10,BLUE) ' Helvetica bold...
Position (0.25,0.25) ' place in upper left
Width 3.0 ' make window 3" wide
Height 1.0 ' make window 1" high
Print "MapBasic Dispatcher now on line"
运行结果如图 9-27所示 。
9.5 工具条图 9-28 标准工具条 图 9-29 绘图工具条 图 9-30 主工具条
9.5.1 工具条的类型
1,PushButtons按钮这种叫做触发式按钮。当用户按下 ToolButtons按钮后,按钮立即复位,并调用相应的处理程序。
2,ToggleButtons按钮这种按钮叫做开关式按钮。当用户单击
ToggleButtons按钮时,这种按钮会在按下与没按下之间切换。
3,ToolButton按钮这种称为工具按钮。当用户单击这种按钮时,它处于活动状态,直到用户单击了另外的按钮。
9.5.2 工具条的操作
1,创建工具条创建一个新工具条的语句为:
Create ButtonPad
2,激活工具条创建一个工具条,并不能立刻显示在窗口中,
需要使用下面的语句激活:
Alter ButtonPad
3,激活按钮
4,按钮的返回值
9.5.3 创建触发式型按钮
9.5.4 创建工具按钮
9.5.5 向,主,工具条添加一个按钮
9.5.6 选择按钮图表
【 例 9-41】 下面的语句定义了一个按钮,并为按钮选择了一个图标,图标代码定义为 MI_ICON_INFO:
Alter ButtonPad "主 "
Add Separator
Add PushButton
Icon MI_ICON_INFO
Calling procedure_name
图 9-31 图标例子窗口
① 运行图标示例程序,ICONDEMO.MBX”。 显示图标例子菜单,如图 9-31所示 。
② 单击图标示例菜单,选择一个菜单项,出现一个自定义图标按钮盒 。 如图 9-32所示 。
③ 单击某个图标,出现如图 9-33所示的对话框 。
④ 将对话框中的图标代码复制到剪贴板中 。
⑤ 打开 MapBasic程序,用〈 Ctrl〉 +〈 V〉 键将图标代码粘贴到应用程序中。
图 9-32 自定义图标按钮盒图 9-33 图标代码对话框
9.5.7 运行 MapBasic应用程序
Startup是一个特殊的工作空间,如果该工作空间存在于用户的系统中,MapInfo将自动加载该工作空间,若 Startup工作空间中有 Run
Application语句,则 MapInfo将自动运行指定的程序 。
例如,用户要运行应用程序 Query,可以创建如下 Startup工作空间:
!Workspace
!Version 400
!Charset Neutral
Run Application "Query.mbx"
9.6 MapBasic过程
9.6.1 MapBasic主过程
Declare Sub Main '声明一个主过程
Sub Main '主过程开始
Note "Testing,one two three." '显示一个消息
End Sub '结束主过程
9.6.2 MapBasic子过程子过程的声明方法如下:
Declare Sub
子过程名图 9-34 查询菜单图 9-35 ProvinceName子过程
9.7 MapBasic变量
MapBasic变量包括全局变量 ( Global) 和局部变量 ( Dim) 。 全局变量在整个程序中起作用,而局部变量仅在声明该变量的过程中其作用 。
变量的类型有短整型( SmallInt),整型
( Integer),浮点型( Float),定长字符型
( String),可变长字符型( String*n),布尔型( Logical),日期型( Date),对象型
( Object),列变量( Alias),线型( Pen)、
填充( Brush),字体( Font),符号
( Symbol)。
9.8 MapBasic的表达式
9.8.1 MapBasic的函数
MapBasic支持许多不同的函数 。 每一个函数都有不同的作用,如 Sqr()函数计算正方形的面积,而 Ucase$()函数将文本字符串改成大写 。 在表达式中引用函数时,程序就调用该函数并返回函数值 。
9.8.2 MapBasic的运算符
1,数字运算符操作符 用途
+ 相加
- 相减
* 相乘
/ 相除
\ 整除
Mod 取余
^ 乘方
2,字符串运算符字符运算符有,+”,,&”,,Like”。
3,日期运算符表 9-3 MapBasic的日期运算符表达式 结果
date+integer 日期型值,表示以后的日期
date- integer 日期型值,表示以前的日期
date-date 整型数,表示过去的天数
4,比较运算符表 9-4 比较运算符运算符 返回 TRUE值
= 相等
<> 不相等
< 小于
> 大于
<= 小于等于
>= 大于等于
Between,..And,.,在 … 范围内
5,逻辑运算符表 9-5 逻辑运算符运算符 返回 TRUE值 举例
And 两操作数为真 If a And b Then
Or 任一操作数为真 If a Or b Then
Not 操作数为假 If Not a Then
6,图形运算符表 9-6 图形运算符运算符 返回 TRUE值 举例
Contains 目标 A包含目标 B中心点 If a Contains b Then
Contains Part 目标 A包含目标 B的一部分
If a Contains Part b Then
Contains Entire 目标 A包含目标 B的全部 If a Contains Entire b
Then
Partly Within 目标 A的一部分在目标 B
内
If a Partly Within b Then
Entirely Within 目标 A的全部在目标 B内 If a Entirely Within b
Then
Intersects 目标 A和目标 B相交 If a Intersects b Then
7,运算符的优先级包含多个运算符的复杂表达式,
MapBasic会按运算符的优先级规则来确定运算的先后 。
优先级最高的是,( )”,其次指数、
取反、乘法、除法、取余、取整运算、
加法、减法、字符连接符、图形运算符、
比较运算符,Like,Not,And,最低的是,Or”。
9.9 分支、循环和其他流程控制
9.9.1 分支语句
1,If语句
(1) If...Then
(2) If...Then...Else
(3) If...Then...ElseIf...Then
【例 9-45】下面的例子用来判断当天的日期,若是 1月 1日,则系统显示一个消息窗“新年好”;若是 2月 14日,则系统显示一个消息窗
“情人节好”;若是 12月 25日,则系统显示一个消息窗“圣诞节好”;
若是 12月 25日,则系统显示一个消息窗“圣诞节好”;否则,则系统显示一个消息窗“好日子”。
2,Do Case语句语法:
Do Case 表达式
Case 结果表 1
语句体 1
Case 结果表 2
语句体 2
…
Case Else
语句体 n
End Case
3,Goto语句语法:
Goto 标号
9.9.2 循环语句
1,For...Next语句语法:
For 循环变量 =初始值 To 终值 [Step 步长 ]
[循环体 ]
Exit For
[循环体 ]
Next
2,While...Wend语句语法:
While 条件循环体
Wend
3,Do...Loop语句语法:
Do
循环体
Loop [ { Until 或 While } 条件 ]
或
Do
[ { Until 或 While } 条件 ]
循环体
Loop
9.9.3 其他流程控制语句
1,End Program语句语法:
End Program
2,Terminate Application语句语法:
Terminate Application 应用程序名
3,End MapInfo语句语法:
End MapInfo
9.10 MapBasic的表操作
1,创建新表语法:
Create Table 表
( column 字段数据类型 [,.,,] )
[ File 保存位置 ]
[ { Type NATIVE |
Type DBF [ CharSet char_set ] |
Type Access Database 数据库文件格式
2,打开表语法:
Open Table 表 [ As 别名 ]
[ Interactive ]
3,关闭表语法:
Close Table 表 [ Interactive ]
4,删除表语法:
Drop Table 表
5,查询表语法:
Select 表达式列表
From 表 1,表 2,..,[ Where 表达式条件 ]
[ Into 结果表 ]
[ Group By 字段 ]
[ Order By 字段 ]
5,修改表数据
(1) Insert语句语法:
Insert Into 表 [ ( 字段 ) ]
{ Values (字段表达式 ) 或 Select 字段 From
表 }
6,修改表结构语法:
Alter Table 表 (
[Add 字段 1 类型 1,字段 2 类型 2,..,]
[Modify字段 1 类型 1,字段 2 类型 2,..,]
[Drop字段 1,字段 2..,]
[Rename 旧字段 1 新字段 1,旧字段 2 新字段 2 [,...] ]
[Order字段 1,字段 2..,]
)
[ Interactive ]
9.11 习题 9
一,思考题
1,MapBasic的语句和 VB,QB的异同?
2,MapBasic的特点在什么地方?
3,控件有哪些类型? 说明各有什么用途 。
4,如何读取控件的终值?
二,上机练习
1,制作一个全新的菜单栏,包含若干菜单和菜单项 。
2,制作一个简单对话框,并指定它的位置和大小。
3,用各种打开窗口的语句打开一个窗口,
并指定它的位置和大小 。
4,用添加,删除工具条的语句自定义一个工具条,里面要包含一个新按钮 。
5,编辑一段小程序,实现主过程对子过程的调用 。
6,用表的操作语句,实现对表的创建、
修改、删除、重命名、修改表结构等操作。