第11章用MapBasic建立用户系统.docx

上传人:b****4 文档编号:26985328 上传时间:2023-06-24 格式:DOCX 页数:24 大小:242.55KB
下载 相关 举报
第11章用MapBasic建立用户系统.docx_第1页
第1页 / 共24页
第11章用MapBasic建立用户系统.docx_第2页
第2页 / 共24页
第11章用MapBasic建立用户系统.docx_第3页
第3页 / 共24页
第11章用MapBasic建立用户系统.docx_第4页
第4页 / 共24页
第11章用MapBasic建立用户系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

第11章用MapBasic建立用户系统.docx

《第11章用MapBasic建立用户系统.docx》由会员分享,可在线阅读,更多相关《第11章用MapBasic建立用户系统.docx(24页珍藏版)》请在冰豆网上搜索。

第11章用MapBasic建立用户系统.docx

第11章用MapBasic建立用户系统

第11章用MapBasic建立用户系统

11.lMapBasic程序结构

前一章介绍了MapBasic的基本元素,由它们构成MapBasic的不同种类的语句,再由语句组织成程序。

但是MapBasic程序中的语句必须以一个特定的方式被安排,而不是任意的。

例如:

Global语句就不能放在Sub…EndSub结构中,下面给出的是MapBasic程序中不同组件排列顺序的一个典型的格式:

全局级的语句出现在程序的项部

Include“mapbasic.def”

其他的Includc语句

Type…EndType语句

DeclareSub语句

DeclareFunction语句

Define语句

Global语句

…接下来是主过程定义…

SubMain

Dim语句

EndSub

....接着是其他的子过程定义

Sub....

Dim语句

EndSub

......用户函数定义....

Function....

Dim语句

EndFunction

11.2用户界面程序实例

为了能让读者迅速掌握用MapBasic进行应用程序开发的最基本方法,本节将通过剖析一个程序实例来展示MapBasic强大的开发功能。

由于该程序只是一个演示程序,所以它的重点只放在用户界面的创建。

对于其他一些辅助功能,本程序只提供了功能框架,而没有给出具有完整功能的程序模块。

有兴趣的读者可以对本程序的部分或全部进行修改、增加和精简,以便完善该程序的功能。

11.2.1程序功能简介

一个优秀的应用程序,必须有一个令人赏心悦目的用户界面。

一个设计良好的用户界面不但能够使用户得到视觉上的享受,而且能够提高人机交互的效率。

本程序的最主要部分是生成一个用户界面,其中包括创建一个全用户化的菜单、定制符合用户要求的按钮盒和对话框,并且在必要时能及时打开一个合适的窗口(如地图窗口、浏览窗口或统计窗口等)。

1。

用户菜单

一般情况下,我们并不需要完全放弃MapInfo的原始菜单,而只要在该菜单系统的基础上,适当地删去一些不需要的菜单或菜单项,再增加一些新的菜单或菜单项就可以制作出符合自己要求的菜单。

但MapBasic同样支持你创建一个全新的菜单系统,本程序就是采用了这种方式。

当运行该演示程序时,屏幕上将出现如图11.1所示的用户界面。

程序

图11-1演示程序的显示情况

除了显示一个用户菜单及用户按钮盒外,还打开了一个地图窗口,在地图窗口中打开了几个MapInfo表。

其中菜单栏在屏幕的最上方,它包括:

系统菜单、演示菜单、对象、旅游查询、旅游统计图及帮助。

·系统菜申.它由“打开表”、“关闭表”、“全部关闭”、“世界地图”和“退出”五个菜单项组成。

主要完成对MapInfo表的打开与关闭操作,并同时将它显示在一个地图窗口中。

其中“打开”是让用户选择并打开一个表,而“世界地图”是直接由MapBasic打开一个事先选定的表(World.tab);“关闭”是让用户选择一个当前打开的表把它关闭,并保存相应工作空间,而“全部关闭”是将当前矽甫打开的表全部关闭;“退出”是退出该演示程序恢复到原来的MapInfo界面。

.演示菜单它包含一个“建介”了菜单。

该子菜单用于生成一个用户菜单、按钮盒或对话柜。

对应于此英申的MapBaslc功能模块就是生成用户界面的最典型方法。

菜单项“工具栏”实质上是一个对话框,只是该对话框只包含四个复选框:

主、常用、绘图、用户。

当选中了其中的一个或多个,相应的按钮盒就会在屏幕亡显示,否则就会隐藏按钮盒。

这里按钮盒“主”、“常用”和“绘图”是MapInfo系统自带的,而“用户”按钮盒则是由本演示程序自制的。

另外,你还会看到三个呈现灰色的菜单项“设置更新口令”、“数据备份”和“数据恢复”,由于这些功能在本程序中还没有全部制作进去,所以这里把这些菜单项设置为不可选。

·对象MapBasic可以创建、修改对象,而且可以把一个对象赋给一个表的对象列。

该菜单包括一个“创建对象”子菜单和两个菜单项“折线转换成区域”、“区域转换成折线”。

其中两个菜单项是呈灰色的,表示它们不可选择。

而“创建对象”子菜单是用于创建MapInfo的图形对象,当用户选择了该子菜单下的一个菜单项时,程序首先将建立一个MapInfo表,并将该表地图化,接着为它追加一条记录,并把创建的对象赋值给该记录的对象列。

最后,程序将在一个地图窗口的一个可编辑图居中显示该对象。

·旅游查询该菜申的所有菜单项都是不可选的。

用户可以根据自己的要求编写相应的程序以完成该项功能。

.旅游统计图这个菜单的功能是将某些MapInfo表中的信息以统计图的形式显示在屏幕上,使得观察更加直观方便,当然你可以通过设置来指定统计图的格式。

.帮助该菜单提供了MapInfo主要功能的在线查询,通过Intemet访问MapInfo站点,以及有关本演水程序的一些信息。

2.按钮盒

按钮盒是用户界面的重要组成部分。

它以工具箱的形式为用户提供某些常用的功能。

MgpBasic中的按钮盒中的按钮有三种类型:

工具按钮、触发式按钮和按压式按钮(或称开关式按钮)。

一般地,当选中一个工具按钮时,应用程序并不立即调用相应的处理程序,而只是作好了一些必要的设置(如改变光标的形状),只有在选中该按钮后,继续在相应的窗口中进行单击或拖拉时应用程序才调用相应处理程序,如MapInfo“绘图”按钮盒中的“画线”、“画椭圆”等按钮就属此类。

触发式按钮是在选中该按钮时就立即调用处理程序,而按压式按钮是在“按压”或“恢复”该按钮时都调用处理程序。

用户可以根据各自的需要选择合适的按钮类型。

本演示程序有两处涉及按钮盒的创建,一个是在程序开始运行时就出现在屏幕上的“用户”按钮盒。

这里选择了一些对地图窗口进行操作的常用工具,如放大、缩小视图等。

该按钮盒是漂浮在整个桌面上的。

另外一个按钮盒是通过选择[演示菜单1>[建立]>[按钮盒]来创建的,该按钮盒是固定在窗口顶部,其中包含三个按钮,它们分别属于三种不同的类型。

3.对话框

该程序创建的一个最典型的对话框是通过选择[演示菜申—1>[建立3>[对话框]建立的。

它包括以下对话框控件:

StaticText、EditText、GroupBox、PopupMenu、ListBox、RadioGroup、SymbolPicker、CheckBox、OkButton和CancelButton。

另外,“系统菜单”中的“退出”菜单项、“演示菜单”中的“工具栏”菜单项、“帮助”菜单中的“关于”菜单项都是对话框的例子。

4.窗口

窗口也是用户界面的重要组成部分,Maplnfo包括多种类型的窗口,如地图窗口、浏览窗口、统汁窗口、布局窗口以及普通的信息窗口等。

本演示程序一执行就先打开一个地图窗口,并将窗口标题设置为“一个用户界面程序的演示示例”,另外,还可以用[系统菜单]>[打开]或[系统菜单]>[世界地图]打开一个地图窗口。

通过选择[旅游统计图]>[旅游人口]可以打开一个统计图窗口。

至于其他类型的统计图,本程序没有涉及,用户可以技类似的方法自己建立。

11.2.2源程序及其注解

1.源程序清单

‘一个用户界面演示程序:

Ye_Demo.mb

‘制作日期:

1998.7

‘目的:

快速掌握MapBasic程序开发.

‘内容:

生成用户界面的MapBasic程序

‘主要语句:

‘CreateMenu菜单名as生成菜单

‘子菜单名calling进程

‘CreateButtonPad按钮盒名As生成按钮盒

‘按钮类型[PushButton、ToolButton、Togg1eButton]

‘Dialog生成对话框

‘Title对话框标题

‘控制类型

‘***********标准定义文件***********

Include“mapbasic.def”

Include“icons.def”

Include“menu.def”

‘**********进程声明**********

DeclareSubMain

DeclareSubYe_denm

DeclareSubYe_ButtonPad

DeclareSubYe_Menu

DeclareSubYe_Tool

DeclareSubYe_graph

DeclareSubYe_Dialog

DeclareSubMenu_Test

DeclareSubButton_Test

DeclareSubYe_about

DeclareSubYe_Exit

DeclareSubYe_Button1

DeclareSubYe_Buttonn2

DeclareSubClose_all

DeclareSubClose_some

DeclareSubOpen_File

DeclareSubOpen_world

DeclareSubMake_ellipse

‘*************************

‘建立主菜单

‘*************************

SUBMain

0nerrorgotosub_err

CreateMenu“风景点”As

“按地区分”CallingYe_demo,

“按类型分”CallingYe_demo,

“按最佳旅游季节分”CallingYe_demo,

“(-“,

“风景点向导”CallingYe_demo

CREATEMENU“建立”As

“用户菜单“CallingYe_menu

“按钮盒\tCtrl+B/W^B/Mb/XCtrl+b”CallingYe_Buttonpad

“对话框\tCtrl+D/W^D/Md/XCtrl+d”CallingYe_Dialog

CreateMenu“创建对象”As

“点”CallingYe_demo,

“直线”CallingYe_demo,

“椭圆”CallingMmake_ellipse,

“折线”CallingYe_demo,

“矩形”CallingYe_demo,

“圆角矩形”CallingYe_demo,

“圆弧”CallingYe_demo,

“区域”CallingYe_demo,

“文本”CallingYe_demo,

“标签”CallingM_TOOLS_LABELER

CreateMENU“演示菜单”As‘****建立用户主菜单****

“建立”As“建立”,

“工具栏...”CallingYe_Tool,

“(-“,

“设置更新口令”CallingYe_demo,

“(-“,

“数据备份”CallingYe_demo,

“数据恢复”CallingYe_demo

CreateMenu“系统菜单”As

“打开表”ID111CallingOpen_File,

“关闭表”CallingClose_some,

“全部关闭”CallingClose_all,

“(-“,

“世界地图”IDll2CallingOpen_world,

“(-“,

“退出”CallingYe_exit

CreateMenu“旅游查询”As

“风景点”As“风景点”,

“风土人情”CallingYe_demo,

“路线”CallingYe_demo

CreateMenu“旅游统计图”As

“旅游收入”CallingYe_graph,

“旅游人数”CallingYe_demo,

“旅游淡旺季”CallingYe_demo

CreateMenu“帮助”As

“主题索引”CallingM_HELP_CONTENTS,

“Web页搜索”CallingM_HELP_CONNECT_MIFORUM,

“(-“,

“关于”CallingYe_about

CreateMenu“对象”As

“创建对象”As“创建对象”,

“(-“,

“折线转换成区域”CaingYe_demo,

“区域转换成折线”CallingYe_demo

AlterMenuItemYe_demoDisable

CreateMenuBarAs

“系统菜单”,”演示菜单”,”对象”,”旅游查询”,”旅游统计图”,”帮助”

‘’’****将所建立的用户菜单加入菜单栏*******

AlterBUTTONPAD“绘图”Hide‘**将不使用的按钮盒隐藏**

AlterBUTTONPAD“ODBC”HIDE

ALTERBUITONPAD“主”HIDE

ALTERBUTTONPAD“常用”HIDE

MENUBARSHOW‘****显示新菜单栏****

OpenTable“景点分布”As景点分布Interactive

OpenTable“省”As省Interactive

OpenTable“市”As市Interactive

MapFrom景点分布,市,省

Position(0.0520833,0.0520833)Units“in”

Width4.125Units“in”Height2.36458Units“in”

SetWindowFrontWindow()MaxScrollBarsOffAutoscrollOn

SetMap

CoordSysEarthProjection1,0

Center(119.6263825,29,3124845)

Zoom86.15402206Units“mi”

PreserveZoomDisplayZoom

XYUnits“degree”DistanceUnits“mi”AreaUnits“sqmi”

SetMap

Layer1

DisplayGraphic

LabelLineArrowPositionRightFont(“Arial”,0,12,0)Pen(1,2,0)

Withname

ParallelOnAutoOffOverlapOffDuplicatesOnOffset2

VisibilityOn

Layer2

DisplayGraphic

LabelLineArrowPositionRightFont(“Arial”,0,12,0)Pen(1,2,0)

With市

ParallelOnAutoOffOverlapOffDuplicatesOnOffset2

VisibilityOn

Layer3

DisplayGraphic

LabelLineArrowPositionRightFont(“Arial”,0,12,0)Pen(1,2,0)

With省

ParallelOnAutoOffOverlapOffDuplicatesOnOffset2

VisibilityOn

CreateButtonPad“用户”As

ToolButton

IconMI_ICON_ARROW

CallingM_TOOLS_SELECTOR

HelpMsg“Selectobjectsforediting\n选择”

ToolButton

IconMI_ICON_ZOOM_IN

CallingM_TOOLS_EXPAND

HelpMsg“工具按钮\n放大”

ToolButton

IconMI_ICON_ZOOM_OUT

CallingM_TOOLS_SHRINK

HelpMsg“工具按钮\n缩小”

ToolButton

IconMI_ICON_ZOOM_QUESTION

HelpMsg“工具按钮\n问题”

ToolButton

IconMI_ICON_GRABBER

CallingM_TOOLS_RECENTER

HelpMsg“工具按钮\n平移”

ToolButton

IconMI_ICON_INFO

CallingM_TOOLS_PNT_QUERY

HelpMsg“工具按钮\n信息”

PushButton

IconMI_ICON_MISC_15

CallingYe_Button1

HelpMeg“用户开关按钮\n按压式”

ToggleButton

IconMI_ICON_MAPSYMB_20

CallingYe_Button2

HelpMsg“用户触发式按钮\n触发式”

Show

SetwindowFrontWindow()title“一个用户界面程序的演示示例”

ExitSub

Sub_err:

NoteError$()

ExitSub

EndSub

‘’****************

‘’建立菜单

‘’****************

SUBYe_Menu

Onerrorgotosub_err

Createmenu“新菜单”as

“菜单项一”id3000CallingMenu_Test,

“删除菜单”id3001CallingMenu_Test

altermenubaradd“新菜单”

menubarshows

exitsub

sub_err:

noteError$()

exitsub

EndSub

‘’***************

‘’菜单调试

‘’**************

SUBMenuTest

DoCaselnt(CommandInfo(CMD_INFO_MENUITEM))

Case3000

Nots“您已经选用了菜单项一”

Case3001

Note“新菜单将被删除”

Altermenubarremove“新菜单”

EndCase

Menubarshow

EndSub

‘’**********************

‘’建立按钮盒

‘’**********************

SUBYe_buttonPad

CreateBUTTONNPAD“用户按钮”As

ToolButton‘’具按钮

IconMI_ICON_ARROW‘图标

CursorMI_CURSOR_CROSSSHAIR‘光标

CallingButton_Test‘调用进程

Id1001‘ID号

HelpMsg“工具按钮\n工具按钮”‘帮助信息

PUSHBUTTON‘佃发式按钮

ICONMI_ICON_HELP

CallingButton_Test

HelpMsg“触发式按钮\n触发式按钮”

Id1002

ToggleButton

IconMI_ICON_MAPSYMB_16

CallingButton_Test

ID1003

HelpMsg“开关式按钮\n开关式按钮”

SHOW

FIXED

EndSub

‘’*************

‘’按钮盒测试

‘’*************

SUBButton_Test

Onerrorgotosub_err

DOCaseInt(CommandInfo(CMD_INFO_TOOLBTN))

Case1001

Ifnumwindows()=OThen

NOTE“工具型技钮盒”+CHR$(10)+”请在地图窗口中使用”

Exitsub

ElseIfWindowInfo(FrontWindow(),WIN_INFO_TYPE)<>WIN_MAPPERThen

NOTE“工具型按钮盒”+CHR$(10)+”请在地图窗口中使用”

exitsub

else

note“当前光标位置”+CHR$(10)+”x:

”+str$(CommandInfo(CMD_INFO_X))+”y:

”+str$(CommandInfo(CMD_INFO_Y))

EndIf

Case1002

Note“触发型按钮盒”

Case1003

Note“按压型按钮盒”

EndCase

Exitsub

Sub_err:

NoteError$()

Exitsub

EndSub

SubYe_Button1

Note“按压型按钮盒”

EndSub

SubYe_Button2

Note“触发型按钮盒”

EndSub

‘’**********

‘’建立对话框

‘’**********

SUBYe_dialog

DimfilenameasString

Dimcntrl_valasInteger

Dialog

Title“一个用户界面演示程序”

ControlStaticText

Title“面板文本”

Position20,5

ControlPopupMenu

Title“下拉式菜单选项—1选项—2:

Position90,5

ControlGroupBox

Title“群组选择框”

Position10,20

Width80Height40

ControlRadioGroup

Title“&R单选一;&R单选二”

Position20,32

Valuel

Intocntrl_val

ControlListBox

Title“列表选择框;选项—1;选项—2;选项—3选项—4;选项—5;选项—6”

Width80height40

Positionl05,25

ControlStaticText

Title“线型:

Position20,70

ControlPenPicker

Position60,70

Width20Height20

ControlGroupBox

Title“编辑文本将存于:

Position10,100

Width160Height40

ControlEditText

Value“文件名”

Int

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1