第 9 章 mapbasic 编程

98
9 9 MapBasic 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 第第第第

Upload: morwen

Post on 27-Jan-2016

148 views

Category:

Documents


0 download

DESCRIPTION

第 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 地图窗口 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 9 章 MapBasic 编程

第第 99 章章 MapBasicMapBasic 编程编程

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 浏览窗口

Page 2: 第 9 章 MapBasic 编程

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

Page 3: 第 9 章 MapBasic 编程

9.1 9.1 制作菜单栏制作菜单栏

菜单栏是 MapInfo 工作区域顶部的水平条,初始状态下的 MapInfo 的菜单栏包括“ File” “, Edit” “, Objects” “, Query” 等。

Page 4: 第 9 章 MapBasic 编程

9.1.1 9.1.1 制作全新的菜单栏制作全新的菜单栏

语法: Create Menu Bar As

{ 菜单名 或 ID 菜单号 }

[,{ 菜单名 或 ID 菜单号 }...]

Page 5: 第 9 章 MapBasic 编程

【 例 9-1 】 制 作 一 个 全 新 菜 单 栏 , 包含“ File” “, Edit” “, Query” “, Map” “, Browse” 菜单。

代码如下: Create Menu Bar As

"File","Edit","Query","Map","Browse"

图 9-1 全新菜单栏

Page 6: 第 9 章 MapBasic 编程

9.1.2 9.1.2 修改已有菜单栏修改已有菜单栏1. 删除菜单 语法: Alter Menu Bar Remove

{ 菜单名 或 ID 菜单号 }

[,{ 菜单名 或 ID 菜单号 }...]

【例 9-2 】在原有菜单栏的基础上,删除“ Windows” “, Help” 菜单。

Page 7: 第 9 章 MapBasic 编程

代码如下: Alter Menu Bar Remove ID 6, ID 7

图 9-2 删除菜单

Page 8: 第 9 章 MapBasic 编程

2. 增加菜单语法:Alter Menu Bar Add  

{ 菜单名 或 ID 菜单号 }  

[,{ 菜单名 或 ID 菜单号 }...]

【例 9-3 】在原有菜单栏的基础上,增加“ DataEntry” 菜单。

代码如下:Alter Menu Bar Add "DataEntry"

Page 9: 第 9 章 MapBasic 编程

图 9-3 增加菜单

图 9-4 在菜单栏中间增加菜单

Page 10: 第 9 章 MapBasic 编程

3. 恢复菜单 语法: Create Menu Bar As Default

若放弃对菜单栏的修改,恢复原有菜单样式,可以运行以下代码:

Create Menu Bar As Default

Page 11: 第 9 章 MapBasic 编程

9.2 9.2 菜单制作菜单制作

9.2.1 9.2.1 全新菜单的制作全新菜单的制作 语法:Create Menu 新菜单名 [ID 菜单号 ]As  

菜单项 1 [ ID 菜单号 ] { Calling handler | As 菜单名 }  

[, 菜单项 2...]

Page 12: 第 9 章 MapBasic 编程

【例 9-4 】制作全新菜单“ DataEntry” 。 代码如下: Create Menu "DataEntry" As ' 制作“ DataEntry” 菜

单 "Add" , ' 菜单有三个菜单项 "Edit" , "Delete" Alter Menu Bar Add "DataEntry" ' 将菜单添加到菜单栏中

图 9-5 制作全新菜单

Page 13: 第 9 章 MapBasic 编程

9.2.2 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"

Page 14: 第 9 章 MapBasic 编程

图 9-6 更改原有菜单

Page 15: 第 9 章 MapBasic 编程

9.3 9.3 对话框制作对话框制作

9.3.1 标准对话框1. 消息对话框 语法:Note 消息 图 9-7 消息对话框 【例 9-6 】例如显示一个“查询成功!”的消息

对话框。 代码如下: Note " 查询成功! "

Page 16: 第 9 章 MapBasic 编程

2. 询问对话框 语法:Ask ( 提示信息 , 确定文本 , 取消文本 )

【例 9-7 】下面的例子用生成一个简单询问对话框。

Dim more As Logical

more = Ask("Do you want to

continue?", "OK", "Stop") 运行结果如图 9-8 所示。 图 9-8 询问对话框

Page 17: 第 9 章 MapBasic 编程

3. 选择文件对话框 语法: FileOpenDlg( 路径 , 文件名 , 文件类型 ,

标题 )

【例 9-8 】下面的程序用 FileOpenDlg() 函数显示提示用户打开一个文件的对话框。

Dim s_filename As String

s_filename=

FileOpenDlg("","","TAB","Open Table")

运行结果如图 9-9 所示。

Page 18: 第 9 章 MapBasic 编程

图 9-9 选择文件对话框

Page 19: 第 9 章 MapBasic 编程

9.3.2 9.3.2 自定义对话框制作自定义对话框制作【例 9-9 】下面是生成一个自定义对话框的代码:Dialog title " 按省份名 " Control Statictext title " 请输省份名 :"Control Edittext Control Okbutton Title " 确定 "Control CancelbuttonTitle " 取消 "

Page 20: 第 9 章 MapBasic 编程

图 9-10 自定义对话框

图 9-11 指定位置和大小

Page 21: 第 9 章 MapBasic 编程

9.3.3 9.3.3 控件的位置和大小控件的位置和大小

控件的大小由 Width (宽)和 Height (高)控制。位置和大小采用对话框单位为单位,每个对话框单位表示一个字符宽度的 1/4 或一个字符高度的 1/8 ,以对话框的左上角为原点,它的位置是( 0 , 0 )。

【例 9-10 】下面的例程指定了控件的位置及大小。 Dialog Title " 按省份名 " Control StaticText

Page 22: 第 9 章 MapBasic 编程

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 所示。

Page 23: 第 9 章 MapBasic 编程

9.3.4 9.3.4 控件类型控件类型

1. 静态文本控件语法: Control StaticText  

[ Position x , y ]  

[ Width 宽度 ] [ Height 高度 ]  

[ ID 控件号 ]  

[ Title 标题 ]  

Page 24: 第 9 章 MapBasic 编程

【例 9-11 】下面是生成一个静态文本控件的代码: Dialog

Control StaticText

Title "Enter map title:"

Position 5, 10

Control OkButton 图 9-12 静态文本控件 Control CancelButton

运行结果如图 9-12 所示。

Page 25: 第 9 章 MapBasic 编程

2. 输入文本控件 语法: Control EditText

[ Position x , y ] [ Width 宽度 ] [ Height 高度 ] [ ID 控件号 ] [ Value 初始值 ] [ Into 变量 ]

【例 9-12 】下面是生成一个输入文本控件的代码: Dialog Control EditText

Page 26: 第 9 章 MapBasic 编程

Control OkButton

Control CancelButton

运行结果如图 9-13 所示。

图 9-13 输入文本控件

Page 27: 第 9 章 MapBasic 编程

3. 组合框控件 语法: Control GroupBox

[ Position x , y ]

[ Width 宽度 ] [ Height 高度 ]

[ Title 标题 ]

【例 9-13 】下面是生成一个组合框的代码: Dialog

Control GroupBox

Title "Level of Detail"

Page 28: 第 9 章 MapBasic 编程

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 字符串变量 }]  

Page 29: 第 9 章 MapBasic 编程

[ Value 初始选项 ]  

[ Into 变量 ]  

【例 9-14 】下面是生成一个单选项组合控件的代码:

Dialog

Control RadioGroup

Title "&Full Details;&Partial Details"

Position 15, 42

Control OkButton

Control CancelButton

运行结果如图 9-15 所示。

Page 30: 第 9 章 MapBasic 编程

5. Picker 选取对象类控件 语法: Control { PenPicker 或 BrushPicker 或

SymbolPicker 或 FontPicker }  

[ Position x , y ] [ Width 宽度 ] [ Height 高度 ]  

[ ID 控件号 ]  

[ Calling 过程 ]  

[ Value 样式表达式 ]  

[ Into 样式变量 ]

Page 31: 第 9 章 MapBasic 编程

【例 9-15 】下面是生成一个文本选取控件的代码: Dialog

Control FontPicker

Position 140,42

Control OkButton

Control CancelButton

运行结果如图 9-16 所示。图 9-16 文本选取控件

Page 32: 第 9 章 MapBasic 编程

6.ListBox 列表框控件 语法: Control ListBox

[ Position x , y ] [ Width 宽度 ] [ Height 高度 ] [ ID 控件号 ][ Calling 过程 ][ Title { 字符串表达式 或 From Variable 字符串变量 }] [ Value 初始选项 ] [ Into 变量 ]

【例 9-16 】下面是生成一个列表框控件的代码:

Page 33: 第 9 章 MapBasic 编程

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 列表框控件

Page 34: 第 9 章 MapBasic 编程

7. 多重列表框控件 语法: Control MultiListBox

[ Position x , y ] [ Width 宽度 ]

[ Height 高度 ]

[ ID 控件号 ]

[ Calling 过程 ]

[ Title { 字符串表达式 或 From Variable 字符 串变量 }]

[ Value 初始选项 ]

[ Into 变量 ]

Page 35: 第 9 章 MapBasic 编程

【例 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 多重列表框控件

Page 36: 第 9 章 MapBasic 编程

8. 下拉列表框控件 语法: Control PopupMenu

[ Position x , y ][ Width 宽度 ] [ ID 控件号 ] [ Calling 过程 ] [ Title { [ Title { 字 符 串 表 达 式 或 From Variable 字符串变量 }][ Value 初始选项 ] [ Into 选项变量 ]

Page 37: 第 9 章 MapBasic 编程

【例 9-18 】下面是生成一个下拉列表框控件的代码:

Dialog Control PopupMenu Title

"Town;County;Territory;Region;Entire state"

Position 10, 150 Control OkButton Control CancelButton 图 9-19 下拉列表框控件

Page 38: 第 9 章 MapBasic 编程

9. 复选框控件 语法: Control CheckBox

[ Position x , y ] [ Width 宽度 ]

[ ID 控件号 ]

[ Calling 过程 ]

[ Title 标题 ]

[ Value 逻辑值 ]

[ Into 逻辑变量 ]

Page 39: 第 9 章 MapBasic 编程

【例 9-19 】下面是生成一个复选框控件的代码:Dialog

Control CheckBox

Title "Include &Legend"

Position 115, 155

Control OkButton 图 9-20 复选框控件 Control CancelButton

运行结果如图 9-20 所示。

Page 40: 第 9 章 MapBasic 编程

10. 按钮控件 MapBasic 包含两个按钮: OkButton 和

CancelButton 。9.3.5 控件的初值和终值 大部分控件都有一可选的 Value 从句,

这个从句定义了对话框第一次显示时该控件的状态。

大多控件都有一 Into 从句,这个从句后面有一个变量, MapInfo 用这个变量存储对话框的数据。如果有 Into 从句,用户通过单击“ Ok” 按钮确认该对话框后, MapInfo 会用Into 后的变量存储控件的最终值。

Page 41: 第 9 章 MapBasic 编程

9.4 9.4 窗口窗口 MapBasic 应用程序能够控制所有的MapInfo 窗口,包括标准窗口、地图窗口、浏览( Browse )窗口、布局( Layout )窗口、专题图( Graph )窗口、信息窗口。9.4.1 9.4.1 窗口的大小和位置窗口的大小和位置 窗口的大小和位置可以通过两种方法控制: ① 在打开的窗口的同时指定窗口的大小和位置。

Page 42: 第 9 章 MapBasic 编程

【例 9-20 】下面的语句指定地图窗口及布局窗口的位置及大小:Open Table "world"Open Table "cust1994" As customersMap from customers, worldPosition (1,1) Width 3 Height 2

 Layout Position (0, 0) Width 2 Height 4

Page 43: 第 9 章 MapBasic 编程

② 在打开窗口后调整窗口的位置和大小。使用 Set Window 语句。

语法:Set Window 窗口号 [ Position ( x , y ) [ Units 纸面单位 ] ]

[ Width 窗口宽度 [ Units 纸面单位 ] ]

[ Height 窗口高度 [ Units 纸面单位 ] ]

Page 44: 第 9 章 MapBasic 编程

9.4.2 9.4.2 地图窗口地图窗口1. 图层的操作

增加图层的语法为:Add Map

[ Window 窗口号 ]

Layer 表 1 [ , 表 2 ... ]

[ Auto ]

[ Animate ]

Page 45: 第 9 章 MapBasic 编程

2. 设置地图投影 可以使用 Set Map CoordSys... 语句改变地图投影,若要保存投影,使用 Commit Table ...As...CoordSys.. 语句。

3. 制作专题图 专题图有六种形式。每种都可以用相应的MapBasic 语句实现。 (1) 范围值 (ranges of values) 语法:

Shade [ Window 窗口号 ] { 图层号 或 图层名 } With 表达式

Page 46: 第 9 章 MapBasic 编程

[ 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)

Page 47: 第 9 章 MapBasic 编程

(2) 独立值 (individual values) 语法:

Shade [ Window 窗口号 ] { 图层号 或 图层名 } With 表达式[ Ignore 忽略的数值 ] Values 字段 1 [ Pen... ] [ Line...] [ Brush... ] [ Symbol... ]

[ , 字段 2 [ Pen... ] [ Line...] [ Brush... ] [ Symbol... ] ... ]

Page 48: 第 9 章 MapBasic 编程

【例 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"

Page 49: 第 9 章 MapBasic 编程

(3) 点密度 (dot density) 语法:Shade [ Window 窗口号 ]

{ 图层号 或 图层名 } With 表达式Density 数值 : 点的尺寸[ Color 颜色号 ]

【例 9-24 】下面的例子根据人口制作点密度图, 60000个人用一个 4 个像元大小的点表示。

Open Table "States"Map From statesShade states With Num_HH_90 Density 60000:4

Page 50: 第 9 章 MapBasic 编程

(4) 等级符号 (graduated symbols)

语法:Shade [ Window 窗口号 ]

{ 图层号 或 图层名 }

With 表达式Graduated 最小值 : 符号大小 最大值 : 符号大小

Symbol . . .

[ Inflect Symbol . . . ]

[ Vary Size By {" LOG" 或 "SQRT" 或 "CONST"} ]

Page 51: 第 9 章 MapBasic 编程

【例 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"

Page 52: 第 9 章 MapBasic 编程

(5) 饼图 (pie charts) 语法:Shade [ Window 窗口号 ]

{ 图层号 或 图层名 或 选择集 } With 表达式 1 ,表达式 2...

[ Half ] Pie [ Angle 角度 ] [ Counter ] [ Fixed ] [ Max Size 饼尺寸 [ Units 单

位名称 ] [ At Value 最大值 [ Vary Size By {" LOG" | "SQRT" | "CONST"} ] ] ]

Page 53: 第 9 章 MapBasic 编程

【例 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

Page 54: 第 9 章 MapBasic 编程

【例 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)

Page 55: 第 9 章 MapBasic 编程

(6) 直方图 (bar charts) 语法:Shade [ Window 窗口号 ]

{ 图层号 或 图层名 或 选择集 } With 表达式 1 ,表达式 2...

{ Bar [ Normalized ] 或 Stacked Bar [ Fixed ] }

[ Max Size 最大尺寸 [ Units 单位名称 ] [ At Value 最 大 值 [ Vary Size By {" LOG" 或 "SQRT" 或 "CONST"} ] ] ]

Page 56: 第 9 章 MapBasic 编程

【例 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)

Page 57: 第 9 章 MapBasic 编程

9.4.3 9.4.3 浏览窗口浏览窗口 语法:Browse 表达式列表 From 表

[ Position ( x , y ) [ Units 纸面单位 ] ]

[ Width 窗口宽度 [ Units 纸面单位 ] ]

[ Height 窗口高度 [ Units 纸面单位 ] ]

[ Row 行号 ]

[ Column 列号 ]

[ Min 或 Max ]

Page 58: 第 9 章 MapBasic 编程

【例 9-29 】下面的例子仅显示省份和人口。Browse 省份 ,人口 from 政区

图 9-21 显示所有字段 图 9-22 显示选择字段

Page 59: 第 9 章 MapBasic 编程

【例 9-31 】下面的例子将第十九行和第二列显示在浏览窗口的左上角。

Browse * from World

Row 19

Column 2

图 9-23 浏览窗口

Page 60: 第 9 章 MapBasic 编程

【例 9-32 】下面的例子指定了表达式,用人口除以面积得到密度这一项,并将该表 达 式 的 名称改 为 “ Density” “( 密度”)。

Open Table "world"

Browse

country,

population,

population/area(obj, "sq km") "Density"

From world

Page 61: 第 9 章 MapBasic 编程

9.4.4 9.4.4 统计窗口统计窗口语法:Graph

标注列 , 表达式 1 ,表达式 2...

From 表[ Position ( x , y ) [ Units 纸面单位 ] ]

[ Width 窗口宽度 [ Units 纸面单位 ] ]

[ Height 窗口高度 [ Units 纸面单位 ] ]

[ Min 或 Max ]

Page 62: 第 9 章 MapBasic 编程

【例 9-33 】下面的例子创建人口统计图。 Graph

人口 From 政区 运行结果如图 9-24 所示。

图 9-24 统计窗口

Page 63: 第 9 章 MapBasic 编程

9.4.5 9.4.5 布局窗口布局窗口语法:Layout

[ Position ( x , y ) [ Units 纸面单位 ] ] [Width 窗口宽度 [ Units 纸面单位 ] ] [ Height 窗口高度 [ Units 纸面单位 ] ] [ { Min 或 Max } ]

【例 9-34 】例如下面的例子选择布局窗口中所有的对象。

Select * From Layout1

Page 64: 第 9 章 MapBasic 编程

【例 9-35 】下面的例子创建一个布局窗口。 Layout Position (0, 0) Width 2 Height 4

运行结果如图 9-25 所示。

图 9-25 布局窗口

Page 65: 第 9 章 MapBasic 编程

9.4.6 9.4.6 信息窗口信息窗口【例 9-36 】下面的例子创建一个信息窗口。Include "MapBasic.def"Open Table "World" InteractiveSelect Country , Capital,Inflat_Rate+0 "Inflation"From World Into World_QuerySet 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

Page 66: 第 9 章 MapBasic 编程

9.4.7 9.4.7 消息窗口消息窗口 语法: Print 消息 在窗口信息中实现换行,可以用下面的语句: 图 9-26 消息窗口的换行

Print "Map Layers:" +

Chr$(10)

+ " World, Capitals" 运行结果如图 9-26 所示。图 9-27设置消息的字体及颜色

Page 67: 第 9 章 MapBasic 编程

【例 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 所示。

Page 68: 第 9 章 MapBasic 编程

9.5 9.5 工具条

图 9-28 标准工具条 图 9-29 绘图工具条 图 9-30 主工具条

Page 69: 第 9 章 MapBasic 编程

9.5.1 9.5.1 工具条的类型工具条的类型1. PushButtons 按钮 这种叫做触发式按钮。当用户按下 ToolButtons 按

钮后,按钮立即复位,并调用相应的处理程序。 2. ToggleButtons 按钮 这种按钮叫做开关式按钮。当用户单击

ToggleButtons 按钮时,这种按钮会在按下与没按下之间切换。

3. ToolButton 按钮 这种称为工具按钮。当用户单击这种按钮时,它处于活动状态,直到用户单击了另外的按钮。

Page 70: 第 9 章 MapBasic 编程

9.5.2 9.5.2 工具条的操作工具条的操作 1. 创建工具条 创建一个新工具条的语句为: Create ButtonPad

2. 激活工具条 创建一个工具条,并不能立刻显示在窗口中,需要使用下面的语句激活:

Alter ButtonPad

3. 激活按钮 4. 按钮的返回值

Page 71: 第 9 章 MapBasic 编程

9.5.3 9.5.3 创建触发式型按钮创建触发式型按钮9.5.4 9.5.4 创建工具按钮创建工具按钮9.5.5 9.5.5 向“主”工具条添加一个按钮向“主”工具条添加一个按钮9.5.6 9.5.6 选择按钮图表选择按钮图表【例 9-41 】下面的语句定义了一个按钮,并为按钮选择

了一个图标,图标代码定义为 MI_ICON_INFO : Alter ButtonPad " 主 " Add Separator Add PushButton Icon MI_ICON_INFO Calling procedure_name

Page 72: 第 9 章 MapBasic 编程

图 9-31 图标例子窗口

Page 73: 第 9 章 MapBasic 编程

① 运行图标示例程序“ ICONDEMO.MBX” 。显

示图标例子菜单,如图 9-31 所示。 ② 单击图标示例菜单,选择一个菜单项,出现一个自定义图标按钮盒。如图 9-32 所示。 ③ 单击某个图标,出现如图 9-33 所示的对话框。 ④ 将对话框中的图标代码复制到剪贴板中。 ⑤ 打开 MapBasic 程序,用〈 Ctrl 〉 + 〈 V〉键将

图标代码粘贴到应用程序中。

Page 74: 第 9 章 MapBasic 编程

图 9-32 自定义图标按钮盒

图 9-33 图标代码对话框

Page 75: 第 9 章 MapBasic 编程

9.5.7 9.5.7 运行运行 MapBasicMapBasic 应用程序应用程序 Startup 是一个特殊的工作空间,如果该工作空间存在于用户的系统中, MapInfo 将自动加载该工作空间,若 Startup 工作空间中有 Run Application 语句,则 MapInfo 将自动运行指定的

程序。 例如,用户要运行应用程序 Query ,可以创建如下 Startup 工作空间: !Workspace !Version 400 !Charset Neutral Run Application "Query.mbx"

Page 76: 第 9 章 MapBasic 编程

9.6 9.6 MapBasicMapBasic 过程过程9.6.1 9.6.1 MapBasicMapBasic 主过程主过程Declare Sub Main '声明一个主过程Sub Main ' 主过程开始 Note "Testing, one two three." ' 显示 一个消息End Sub ' 结束主过程

Page 77: 第 9 章 MapBasic 编程

9.6.2 9.6.2 MapBasicMapBasic 子过程子过程

子过程的声明 方法如下:Declare Sub

子过程名

图 9-34 查询菜单

Page 78: 第 9 章 MapBasic 编程

图 9-35 ProvinceName 子过程

Page 79: 第 9 章 MapBasic 编程

9.7 9.7 MapBasicMapBasic 变量变量 MapBasic 变量包括全局变量( Global )和

局部变量( Dim )。全局变量在整个程序中起作用,而局部变量仅在声明该变量的过程中其作用。

变量的类型有短整型( SmallInt )、整型( Integer )、浮点型( Float )、定长字符型( String )、可变长字符型( String*n )、布尔型( Logical )、日期型( Date )、对象型( Object )、列变量( Alias )、线型( Pen )、填充( Brush )、字体( Font )、符号( Symbol )。

Page 80: 第 9 章 MapBasic 编程

9.8 9.8 MapBasicMapBasic 的表达式的表达式

9.8.1 9.8.1 MapBasicMapBasic 的函数的函数 MapBasic 支持许多不同的函数。每

一个函数都有不同的作用,如 Sqr() 函数计算正方形的面积,而 Ucase$() 函数将文本字符串改成大写。在表达式中引用函数时,程序就调用该函数并返回函数值。

Page 81: 第 9 章 MapBasic 编程

9.8.2 9.8.2 MapBasicMapBasic 的运算符的运算符1. 数字运算符

操作符 用途

+ 相加

- 相减

* 相乘

/ 相除

\ 整除

Mod 取余

^ 乘方

Page 82: 第 9 章 MapBasic 编程

2. 字符串运算符 字 符 运 算 符

有“ +” 、“ &” 、“ Like” 。3. 日期运算符

表 9-3 MapBasic 的日期运算符

表达式 结果

date+integer日期型值,表示以后的日期

date- integer日期型值,表示以前的日期

date-date整型数,表示过去的天数

Page 83: 第 9 章 MapBasic 编程

4. 比较运算符 表 9-4 比较运算符

运算符 返回 TRUE 值

= 相等

<> 不相等

< 小于

> 大于

<= 小于等于

>= 大于等于

Between ...And ... 在…范围内 

Page 84: 第 9 章 MapBasic 编程

5. 逻辑运算符表 9-5 逻辑运算符

运算符 返回 TRUE 值 举例

And 两操作数为真 If a And b Then

Or 任一操作数为真 If a Or b Then

Not 操作数为假 If Not a Then

Page 85: 第 9 章 MapBasic 编程

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

 

Page 86: 第 9 章 MapBasic 编程

7. 运算符的优先级 包 含 多 个 运 算 符 的 复杂表 达

式, MapBasic 会按运算符的优先级规则来确定运算的先后。

优先级最高的是“ ( )” ,其次指数、取反、乘法、除法、取余、取整运算、加法、减法、字符连接符、图形运算符、比较运算符、 Like 、 Not 、 And ,最低的是“ Or” 。

Page 87: 第 9 章 MapBasic 编程

9.9 9.9 分支、循环和其他流程控制分支、循环和其他流程控制

9.9.1 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日,则系统显示一个消息窗“圣诞节好”;否则,则系统显示一个消息窗“好日子”。

Page 88: 第 9 章 MapBasic 编程

2. Do Case 语句 语法:Do Case 表达式

Case 结果表 1语句体 1

Case 结果表 2 语句体 2

… Case Else 语句体 n End Case

Page 89: 第 9 章 MapBasic 编程

3. Goto 语句 语法:Goto 标号 9.9.2 9.9.2 循环语句循环语句 1. For...Next 语句 语法:For 循环变量 = 初始值 To 终值 [Step 步长 ][ 循环体 ]Exit For[ 循环体 ]Next

Page 90: 第 9 章 MapBasic 编程

2. While...Wend 语句 语法:While 条件循环体Wend 3. Do...Loop 语句 语法:Do

循环体Loop [ { Until 或 While } 条件 ] 或Do [ { Until 或 While } 条件 ]

循环体Loop

Page 91: 第 9 章 MapBasic 编程

9.9.3 9.9.3 其他流程控制语句 其他流程控制语句 1. End Program 语句 语法:End Program

2. Terminate Application 语句 语法:Terminate Application 应用程序名3. End MapInfo 语句 语法:End MapInfo

Page 92: 第 9 章 MapBasic 编程

9.10 9.10 MapBasicMapBasic 的表操作的表操作 1. 创建新表 语法:Create Table 表 ( column 字段数据类型 [ , . . . ] )  

[ File 保存位置 ]  

[ { Type NATIVE |  

Type DBF [ CharSet char_set ] |  

Type Access Database 数据库文件格式

Page 93: 第 9 章 MapBasic 编程

2. 打开表 语法: Open Table 表 [ As 别名 ]

[ Interactive ]

3. 关闭表 语法:Close Table 表 [ Interactive ]

4. 删除表 语法:Drop Table 表

Page 94: 第 9 章 MapBasic 编程

5. 查询表 语法:Select 表达式列表 From 表 1 ,表 2, ... [ Where 表达式

条件 ]

[ Into 结果表 ]

[ Group By 字段 ]

[ Order By 字段 ]

Page 95: 第 9 章 MapBasic 编程

5. 修改表数据 (1) Insert 语句 语法:Insert Into 表 [ ( 字段 ) ]

{ Values ( 字段表 达 式 ) 或 Select 字段 From 表 }

6. 修改表结构语法:Alter Table 表 (

[Add 字段 1 类型 1 ,字段 2 类型 2, ... ] [Modify 字段 1 类型 1 ,字段 2 类型 2, ... ]

Page 96: 第 9 章 MapBasic 编程

[Drop 字段 1, 字段 2... ]

[Rename 旧字段 1 新字段 1 ,旧字段 2 新字段 2 [, ...] ]

[Order 字段 1, 字段 2... ]

)

[ Interactive ]

Page 97: 第 9 章 MapBasic 编程

9.11 9.11 习题习题 99一、 思考题 1. MapBasic 的语句和 VB 、 QB 的异同? 2. MapBasic 的特点在什么地方? 3. 控件有哪些类型?说明各有什么用途。 4. 如何读取控件的终值?二、 上机练习 1. 制作一个全新的菜单栏,包含若干菜单和菜单

项。 2. 制作一个简单对话框,并指定它的位置和大小。

Page 98: 第 9 章 MapBasic 编程

3. 用各种打开窗口的语句打开一个窗口,并指定它的位置和大小。

4. 用添加、删除工具条的语句自定义一个工具条,里面要包含一个新按钮。

5. 编辑一段小程序,实现主过程对子过程的调用。

6. 用表的操作语句,实现对表的创建、修改、删除、重命名、修改表结构等操作。