您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页MAS参考手册

MAS参考手册

来源:五一七教育网
mastudio document

2013-4-29 1/68

中高移动互联应用平台

MAS参考手册

CHE3003 – WD – 2007 Version 3.0

Approved by :

Copyright March , 2007 by mastudio Inc.

This document and the information contained in it shall not be used, or published, or disclosed outside of mastudio in whole or in part without Mastudio‟s consent. The copyright notice does not imply publication of this document.

1

mastudio document

2013-4-29 2/68

目 录

一、概要.......................................................................................................................... 3 二、快速入门................................................................................................................... 4 三、语法结构................................................................................................................... 5 四、语法函数................................................................................................................... 7 五、对象列表................................................................................................................... 8 六、对象定义................................................................................................................... 9 七、语法范例................................................................................................................. 45 八、表达式 .................................................................................................................... 50 九、正则定义................................................................................................................. 52 十、事件接口................................................................................................................. 60 十一、资源文件 ............................................................................................................. 61 十二、安全机制 ............................................................................................................. 67

中高移动互联应用平台简称

2

MAS系统或则MASTUDIO

无线终端设备指:智能手机、PDA

mastudio document 2013-4-29 3/68

一、概要

中高移动互联平台实现各种手机和PDA等掌上设备,便捷访问本地局域网络的所有资源,包括数据库查询、办公文件批阅、文件浏览、文件上传和下载,让用户快速建立个性化的移动应用,系统采用智能客户端技术,一次部署终身免维护。

系统可以识别本地网络中各种常见的数据库,可以无缝挂接到已经运行的各种数据库应用系统、挂接各种办公应用系统,无需二次开发,无需改动原有的数据库应用,即可将本地数据库应用延伸到掌上。

系统与具体业务数据无关,可自定义业务流程和菜单,可自定义客户端界面,支持各种常用类型的数据库,自动识别各种类型的数据字段。

系统采用偶尔编程技术,系统定义有常见的功能组件,不需要进行编写程序即可使用,满足一般功能的需求。在少些地方也可通过编写程序来实现复杂功能,MAS系统采用兼容BASIC语法规则。

3

mastudio document 2013-4-29 4/68

二、快速入门

平台分为服务器部分和客户部分,服务器部分用于安装在局域网机器中,客户部分安装于手机上,假设您已经正确安装了系统,并且手机已经通过数据线和服务器同步。

首先,新建立一个登陆帐号,打开D:\\mastudio\\Common\\account.ini文件,增加如下内容:

[wangxh]

Home=test.mas

Dir=D:\\mastudio\\sample

在D:\\mastudio\\sample目录下新建文本文件,文件名为test.mas。打开该文件输入如下

对于计算机编程应用,似乎从例程“Hello World”起步已经成为传统。因此,我们第一

个目的就是掌握如何让手机显示“Hello World”。

内容:

OBJECT wxCOMMON aCommon

{ aCommon.Background[]= , Menu_Main.bmp }

OBJECT wxLABEL aLabel { }

aLabel.Rect[]= 30, 100, 120, 40 aLabel.Font[]= 15, 0x33FF22 aLabel.Text= \"Hello World\"

运行手机上客户端程序,输入用户名为wangxh,密码为空。点菜单确定后登陆进入系统即显示“Hello World”。本例程运用了wxLABEL来实现文本的显示。

每一个.mas文件对应于手机的一屏,每一个.mas文件都包含各种类似wxLABEL的组

件来控制当前屏幕的显示和动作。根据显示需要可编写任意多的.mas文件,.mas文件之间可进行切换以及相互调用。

所有的.mas文件都在服务器端进行编写,即写即所得,手机端不需要任何改变登陆后就可显示最新的内容。关联.mas文件用记事本程序来编辑。

4

mastudio document 2013-4-29 5/68

三、语法结构

MAS语言体系由以下语法规则组成,采用BNF来描述语法元语言(metalanguage)所使用的符号有五种,::= 定义为: <> 非终端符号 {} 重复0-n | 或则 \\ 必选一

::= { }

::= | | < oOBJECT >

< NonloopStatement >::= | | |

::= | | | | |

::==

::= IF THEN ELSE ENDIF

::=FOR = TO [STEP] ::=NEXT

::=REPEAT

::=UNTIL

::=WHILE ::=WEND

::=PRINT [\\|\\ { \\,|;\\ \\|\\ } ] ::=REM

::= {\\+|-\\ } ::= {\\*|/\\ }

::= | | ( ) ::= \\<|=|>\\ ::=" {}" ::= { | } ::={ }

::=[.]

5

mastudio document 2013-4-29 6/68

::= OBJECT

::= { | } ::= { | }

::= { ::= }

::= \\ | | \\

::= = ::= =

::= = .

::= \\ | | \\

::= []= {, }

::= []= { , } ::= []= . { , . }

::= {.} | {.}

::= { | | '-' | '_' } :: | | |

::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|

A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

{ }

{ . } { . }

::= 0|1|2|3|4|5|6|7|8|9

::= +|-|*|/|<|>|.|,|;|?|_|!|@|#|$|%|^|&|*|(|)|[|] ::= <0 | >256 ::= Enter Key

备注: 每个语法单元由.mas文件保存,也可直接运行也可编译成.pkg文件运行。将Comm\\Compiler.exe拷贝到.mas所在目录,运行后将编译成.pkg文件。

6

mastudio document 2013-4-29 7/68

四、语法函数

平台所支持的常用函数: 次序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

7

函数名 ITOA ATOI FTOA ATOF LEN LEFT RIGHT MIDDLE TRIM SPLIT YEAR MONTH DAY HOUR MINUTE SECOND NOW int string float string string 参数 备注 整数转换到字符传 字符串转换到整数 浮点数字转换到字符串 字符串转换到浮点数字 字符串长度 取字符串左边n位 取字符串右边n位 取字符串中间n位 去字符串头尾空格 拆分字符串 当前年 当前月 当前日 当前时 当前分 当前秒 当前完整日期时间 string int string int string int int string string string int - - - - - - - mastudio document 2013-4-29 8/68

五、对象列表

编号 1 2 对象名 wxCOMMON wxDEFAULT wxMENU wxPANEL wxHREF 3 wxDATASOURCE wxQUERY wxPROCEDURE 4 wxGRID wxFORM wxTEXT wxCURVE 5 6 7 8 9 10 11 12 13 14

8

备注 页面背景 默认动作 菜单 导航按钮 快捷方式 数据库 查询 脚本 表格 表单 文本 曲线 标签 目录 下载 上传 视图 事件 签字 命令 重定向 系统全局对象 页码 9 9 10 11 12 13 15 18 20 22 27 28 29 30 32 33 34 -- 41 42 43 44 wxLABEL wxDIR wxDOWNLOAD wxUPLOAD wxVIEW wxNOTIFY wxINKPAD wxSHELL wxREDIRECT sysGLOBAL mastudio document 2013-4-29 9/68

六、对象定义

OBJECT wxCOMMON 对象是用来定义整个页面的背景,所以当需要设置一个页面的背景的时候,可将如下定义放在.mas文件中,注意必须放在文件的最上部分。

OBJECT wxCOMMON aCommon {

aCommon.Background[]= 0x33B0FF, Menu_Main.bmp }

设置页面的背景颜色和背景图片,当只选用其中之一的时候,可以分别写成: aCommon.Background[]= 0x33B0FF 或: aCommon.Background[]= , Menu_Main.bmp (注意这里有,号)

一般情况下只需要选择设置颜色或则背景其中一种。

OBJECT wxDEFAULT 对象是用来设置页面的默认动作,当没有任何对象定义有Link参数的时候,此默认对象起作用。

OBJECT wxDEFALUT aDefault { }

aDefault.Attachment[]= 1, 0 aDefault.Link= index.mas

备注:后续所有Link参数中,当Link串中有%key的形式的时候,其会自动被参数中key所对应的值来替换,这主要应用于根据不通的记录而进入不同的mas文件。

9

mastudio document 2013-4-29 10/68

OBJECT wxMENU对象是用来显示一个菜单,选中后可以进入连接文件.mas,当第一次鼠标点中时,表示选中该项,第二次鼠标点中的时候表示执行。菜单项太多可分页显示,翻页按钮通过Prompt来定义。

OBJECT wxMENU aMenu { }

备注:当向右执行连接文件的需要传递参数,可进行如下定义: OBJECT wxITEM aItem {

….

OBJECT wxPARAMETER aPara { }

aPara.Name= menu OBJECT wxITEM aItem { }

OBJECT wxITEM bItem { }

aMenu.Rect[]= 18, 58, 160, 220

显示位置范围

字体颜色大小 指示条的风格

1=立体 0=平面 ,指示条颜色和字颜色 菜单分页按钮的位置和大小 菜单的背景和颜色(可选)

bItem.Title= \"Menu22222\" bItem.Icon= 4 bItem.Link= Menu.mas

菜单下一选项 图标编号 连接文件

aItem.Title= \"Menu11111\" aItem.Icon= 3

aItem.Link= Menu.mas

菜单选择项目标题 图标编号 连接文件

aMenu.Font[]= 16, 0x3333FF aMenu.Banna[]= 1, 0x3333FF, 0xEEAAEE aMenu.Prompt[]= 100, 80, 18, 32 aMenu.Background[]= , menu_main.bmp

aMenu.Attachment[]= 1, 0

第一个参数表示按下左键时退回的层数,必须>=1

第二个参数表示按下右键时是否清除自己 =1清除 =0不清除

}

每个菜单项目都可以定义自己的参数。

10

mastudio document 2013-4-29 11/68

OBJECT wxPANEL对象用来显示一个导航面板,定义面板的大小位置以及行数,每行显示的按钮个数。按钮的图标请参看资源文件定义部分。

OBJECT wxPANEL aPanel {

aPanel.Attachment[]= 1, 0

第一个参数表示按下左键时退回的层数,必须>=1

第二个参数表示按下右键时是否清除自己 =1清除 =0不清除 OBJECT wxITEM aItem { }

OBJECT wxITEM bItem { bItem.Title= \"Grid\" bItem.Icon= 2 }

aPanel.Rect[]= 18, 58, 180, 220 aPanel.Cell[]= 2, 3

显示位置范围 面板列数行数

字体颜色大小 选中按钮文字

第一个参数保留,后面表示前景和背景 面板分页按钮的位置和大小

aItem.Title= \"Panel\" aItem.Icon= 1

面板按钮文字 图标编号 连接文件

aItem.Link= Panel.mas

面板下一按钮 图标编号 连接文件

bItem.Link= Grid.mas

aPanel.Font[]= 12, 0x3333FF aPanel.Banna[]= 1, 0x3333FF, 0xEEAAEE

aPanel.Prompt[]= 180, 80, 18, 32

}

备注:当向右执行连接文件的需要传递参数方法如同wxMENU所描述。

11

mastudio document 2013-4-29 12/68

OBJECT wxHREF 对象用来显示一个超链接,分为文字链接和图片按钮链接,第一点鼠标选中,第二点鼠标执行连接。

OBJECT wxHREF aHref { aHref.Link= grid.mas aHref.Attachment= 1, 0 }

备注: 必须位于.mas文件的根一级中,wxHREF中同样可以放置wxPARAMETER传递参数给链接页面。

12

连接文件 连接属性 链接范围

按钮图片开始位置和选中后的开始位置 文字链接

文字大小和颜色以及选中后的颜色

aHref.Rect[]= 10, 10, 40, 30 aHref.Button[]= 10, 10, 30, 30 aHref.Text= \"表格\"

aHref.Font[]= 12, 0xFFAAFF, 0xEEFFEE

aHref.Link= VK_UP aHref.Link= VK_DOWN aHref.Link= VK_LEFT aHref.Link= VK_RIGHT 表示按下向上 表示按下向下 表示返回上页 表示进入下页

aHref.Link= VK_EXIT 表示退出系统 可选参数DClick= True 表示必须双点才执行。

mastudio document 2013-4-29 13/68

OBJECT wxDATASOURCE对象用来定义和数据库的连接,该对象包含各种数据库的连接,连接的定义提供给wxQUERY、wxPROCEDURE使用。

OBJECT wxDATASOURCE aSource {

private: aSource.Database= MSSQL }

标签private: 表示以下语句只允许在服务器中使用,不将此参数传递到客户端中。 数据库连接类型分为关系型数据库、Lotus数据库、Mail数据库三种类型,各种数据库的连接参数如下:

针对MSSQL SERVER: Database= Server= Login=

针对ORACLE:

Database= Server= Login=

ORACLE KLMIS mastudio

aSource.Server= 192.168.1. aSource.Login= mastudio aSource.Pwd= mas123 aSource.Timeout= 10

数据库类型 主机地址 登陆名 密码 超时

MSSQL 127.0.0.1 mastudio

Pwd= 123 Pwd= 123 Timeout= 10

对于MSSQL SERVER通过可选参数Db=来执行访问的数据库,或者将该数据库设置为登陆帐号默认数据库。

针对DB2: Database= Server= Login= Pwd=

针对ODBC:

Database= Dsn= login= Pwd=

ODBC mastudio mastudio 123

DB2 172.1.1.1

MAStudio Co..Ltd 123

针对ACCESS:

针对 EXCEL:

Database= EXCEL

Dbq= “c:\\mastudio\\sample.xls”

Dabase= Dbq=

ACCESS

“c:\emp\\my.mdb”

13

mastudio document

针对LOTUS: 2013-4-29 14/68

针对MAIL:

Database= MAIL

Server= “mail.active-web.net” Login= “info@active-web.net” Pwd= 123 Appellation= Bai

Database= DOMINO Server= \"maserver/mastudio\" Login= \"D: \\Lotus\\notes\\data\id\" Pwd= 123

Nsf= \"test.nsf\"

针对HTTP Database= HTTP

Server= \"http://www.active-web.net/index.asp\" Port= 80

Method= Post or Get 可选子对象:

OBJECT wxPARAMETER aPara {

aPara.Preget= http://2.1.2.33/iOffice/login.aspx?ReturnUrl=%2fioffice%2fDefault.aspx }

aPara.Lex=

注意Server=参数必须是全路径的格式,不可以只写域名的形式。

可选对象wxPARAMETER是针对Post的情况下用的,其用来预先获取hidden的名字和值,并将其自动处理到Post的数据中。

备注: 服务器地址:.Server= 和查询页面地址:.Url= 以及提交的参数.Flow= ,其前缀可以通过如下来控制编码方式: --ascii-- 标准的asciii编码方式,也是系统默认的方式

--utf8-- UTF8编码方式

--unicode-- UNICODE编码方式

如:aQuery.Url= “--utf8--http://www.active-web.net/index.asp?xxx=123”

14

mastudio document 2013-4-29 15/68

OBJECT wxQUERY对象用来对连接的数据库进行查询,针对不同类型的数据库连接采用不同的参数模式来查询数据。

OBJECT wxQUERY aQuery {

关系型数据库 数据源名 数据记录 分页大小 当前第n页

aQuery.wxDATASOURCE= aSource aQuery.wxRECORDSET= aRecord aQuery.Split= 12 aQuery.Page= 1

private: aQuery.Sql= \"select ID, Value from dev\" 查询语句 }

参数aQuery.Sql可以是查询语句和存储过程,其中Split和Page参数对于各类型的数据库都通用。参数wxDATASOURCE 和wxRECORDSET在所有的wxQUERY中都必须包含。

OBJECT wxQUERY aQuery {

Lotus数据库 数据源名 数据记录

来自视图文档答复 视图名或文档编号 查询字段 附件保存位置

aQuery.wxDATASOURCE= aSource aQuery.wxRECORDSET= aRecord

aQuery.Notes= View / Document / Response aQuery.From= student / NotesID / NotesID aQuery.Field= “name, age” aQuery.Temp= “c:/temp/zhangxh”

}

aQuery.Notes值为View表示查询From中指定的视图student;值为Document或则Response表示查询文档或则文档的答复,From中的参数表示文档编号。

aQuery.Notes值为View查询视图的时候,不论Field有几个字段,系统会自动增加一字段显示每个文档的编号,通过此编号可查该文档。

aQuery.Field值为查询的字段列表,字段名区分大小写。

aQuery.Temp值为保存附件的目录,当查询的字段中包含附件的时候,系统自动创建此目录,并且只保留最后一个文档查看所下载的附件。可通过wxDIR对象将此目录下的附件提供给用户下载或则查看。

15

mastudio document

2013-4-29 16/68

OBJECT wxQUERY aQuery { }

Mail数据库 数据源名 数据记录 邮件编号 字段列表 附件的保存目录

aQuery.wxDATASOURCE= aSource aQuery.wxRECORDSET= aRecord

aQuery.From= All aQuery.Field= \"No, Date, Subject,Content\" aQuery.Temp= “c:/temp”

aQuery.From值表示查询一个邮件或则全部邮件,当值为All查看所有邮件,否则此值作为邮件编号,查询此邮件编号的邮件。默认的每一次查询将自动增加一个字段保存邮件编号,可通过aQuery.Field(5)的形式来获取后传递给下一页面。

aQuery.Field值表示查显示的字段列表,字段一共只有No、From、Data、Subject, Content五个参数可选择,分别表示邮件编号、发件人、日期、标题、内容。

通过如下方法可为每个登陆用户设置自己的附件保存目录: root= \"D:/mastudio/Sample/mail/temp/\" root= root+ sysGLOBAL.USER PRINT \" aQuery.Temp=\"\"\

16

mastudio document

2013-4-29 17/68

OBJECT wxQUERY aQuery {

访问HTTP数据源 数据源名 数据记录

aQuery.wxDATASOURCE= aSource aQuery.wxRECORDSET= aRecord

aQuery.Url=“ http://www.active-web.net/sample.htm” 访问数据页面 aQuery.Begin= \"\" 开始定义点 aQuery.End= \"\" aQuery.Lex=

结束定义点

\".+?(.+?).+?(.+?).+?(.+?).+?\" 数据匹配定义

可选项:

aQuery. Refer=“ http://www.active-web.net ” aQuery.Flow= xxxxxxxxxxxxxxxx aQuery.Flows= yyyyyyyyyyyyy aQuery.Method= Post aQuery.Order[]= 2, 3, 1 aQuery.Cache= 20

上下文页面 POST数据

继续POST数据 采用POST 排列次序

缓存数据n秒 可选

OBJECT wxPARAMETER aPara {

aPara.Preget= \"http://2.3.4.5/iOffice/login.aspx?ReturnUrl=%2fioffice%2fDefault.aspx\" aPara.Lex= \"\" 可选:

bPara.Order= False

表示以上键名和值是相反的

}

}

aQuery.Lex参数中定义的()中间的内容依次表示取出的第一列、第二列下去,如果要改变次序,则通过Order参数来调整。关于数据匹配定义请参看相关章节语法定义。

对于Post数据,在其中增加“--boundary=-----------------------------7d81992df09a9”则表示将post的数据以Content-Type: multipart/form-data形式发送到服务器。增加着个字段则用来表示其为上传文件的段--attachment=ATTACHMENT。

AQuery.Lex参数可以在前面加上--raw—参数,将表示获取的值为源代码,形式为:

aQuery.Lex= \"--raw—.+?(.+?).+?(.+?)”

这个功能用在wxVIEW直接查看某段HTML页面内容的时候。

Url和Flow前可以增加—raw—参数,来让系统保持原文格式,不进行自动编码处理。 aQuery.State= “”将获取的VIEWSTATE保存下来,在后续的POST中会自动加上去。

17

mastudio document 2013-4-29 18/68

OBJECT wxPROCEDURE对象用来执行数据库的脚本程序,包括存储过程、代理等。针对不同的数据库连接,其参数有所变化。

所有wxPROCEDURE都具有 .METHOD = POST属性,用来决定该程序执行的时间,=POST表示只在post页面中执行,=REQUEST表示只在请求页面时执行,无设置参数表示均执行。

OBJECT wxPROCEDURE aProc {

aProc.Sql= “delete from list” }

OBJECT wxPROCEDURE aProc {

aProc.Agent= CommitGas aProc.Document= 1322

aProc.wxDATASOURCE= aSource }

在文件Resource.ini中定义该脚本执行成功或则失败的反馈信息,依据段名为 Agent名字 ,没有Agent名字默认为“DoProc”,具体用法参看wxFORM对象。

OBJECT wxPROCEDURE aProc {

aProc.Execute= Update / Upload aProc.Document= 1322 aProc.Field= name aProc.Value= 123

写值或上传 文档参数 字段列表 值列表

Lotus数据库

代理名称 文档参数

存储过程 数据来源

aProc.wxDATASOURCE= aSource

关系型数据库

Lotus数据库

aProc.wxDATASOURCE= aSource

}

aProc.Execute值为Update表示将对应的值写到文档对应的字段中,没有该字段自动增加。 aProc.Execute值为Upload表示将对应的值文件上传到文档中。此时Value参数为文件的全路径。以上字段列表和值可通过”f1, f2, f3”形式来表示多个字段以及对应的值。

18

mastudio document

2013-4-29 19/68

OBJECT wxPROCEDURE emSEND { }

OBJECT wxPROCEDURE aProc {

MAIL数据库

emSEND.To= sysPOST.PARAMETER.pAddr

emSEND.Subject= sysPOST.PARAMETER.pSubject emSEND.Content= sysPOST.PARAMETER.pContent emSEND.wxDATASOURCE= aSource emSEND.METHOD= POST

HTTP数据提交 数据库来源

aProc.wxDATASOURCE= aSource

aProc.Refer= \"http://www.active-web.net/forum/post.asp?action=new&boardid=8\" aProc.Url=\"http://www.active-web.net /Save.asp?boardid=8&Body=test&topic=hi\" aProc.Method= Post

OBJECT wxPARAMETER aPara {

可选

aPara.Preget=

\"http://202.103.234.33/iOffice/login.aspx?ReturnUrl=%2fioffice%2fDefault.aspx\" aPara.Lex= \"\" }

}

Refer 表示HTTP协议中的Referer参数,表示提交页面是从哪里来的,本参数为可选项。

19

mastudio document 2013-4-29 20/68

OBJECT wxGRID用来显示表格数据,数据来源于wxQUERY,所以在使用wxGRID前必须定义好数据库连接以及查询语句,在 .mas文件中的位置也必须保持前后关系。

OBJECT wxGRID aGrid {

aGrid.Prompt[]= 220, 220, 18, 32

aGrid.Automatic[]= 5000, 4001, 0xFF0000 }

备注:在使用EXCEL作为数据来源的时候,需要先在电子表格文件编辑状态下选中查询区域,然后使用菜单『插入』→『名称』→『定义』,定义的名称则为表名。

OR SELECT 考生编号,考生姓名,来源 FROM [student2$]

可选参数:aGrid.Choice将表格设置为可多选,多选后的参数可通过如下形式读取每一个选中的值sysPARAMETER.No[n] ,也可通过sysPARAMETER.No形式读所有值,所有值的排列形式为:xxx,yyy,zzz依次。

20

aGrid.wxCAPTION= aCaption aGrid.wxCOLUMN= aColumn aGrid.wxSECTION= aSection aGrid.wxQUERY= aQuery

标题部分定义 列部分定义 段部分定义 数据源名 光标编号

指示条的定义 多选条的定义 画笔定义 表格范围 表格背景

aGrid.Icon= 36 aGrid.Banna[]= 0, 0x3333FF, 0xEEAAEE aGrid.Choice[]= 0, 0xFF3333, 0xAAEEEE aGrid.Pen[]= 1, 0x20FF30 aGrid.Rect[]= 18, 8, 160, 220 aGrid.Background[]= , menu_main.bmp OBJECT wxPARAMETER aPara { }

aPara.No= aQuery.Filed(1) aPara.Name= aQuery.Filed(2)

连接参数一 连接参数二

上下翻页按钮

aGrid.Link= grid.mas aGrid.Attachment[]= 1, 0

连接文件

参数定义同上

自动刷新数据

毫秒,识别编码,变化颜色

mastudio document 2013-4-29 21/68

OBJECT wxGRID需要相关的辅助设置,这些辅助设置信息只可为wxGRID所使用。

OBJECT wxCAPTION aCaption { aCaption.Titlel= hello }

OBJECT wxCOLUMN aColumn {

aColumn.Count= 3 aColumn.Height= 20

列数 高度 字段名称 字段宽度 字体定义 对齐方式 背景定义 列数据颜色

表格标题 字体 对齐 高度 背景

aCaption.Font[]= 18,0xDDEEDD aCaption.Align= left aCaption.Height= 20 aCaption.Background= 0xAABBCC

aColumn.Field[]= name, sex, age aColumn.Width[]= 30, 40, 50 aColumn.Font[]= 14, 0xDDEEDD aColumn.Align[]= left, left, left aColumn.Background= 0xAABBCC

aColumn.Color[]= 0xFF0000, 0x00FF00 }

OBJECT wxSECTION aSection {

aSection.Background= 0xAABBCC aSection.Font[]= 12, 0xDDEEDD aSection.Align[]= left, left, left aSection.Dyestuff= 6

背景定义 字体定义 对齐方式 行数据颜色

}

备注: 列数据颜色定义,为0则不起作用;行数据颜色定义表示指定wxQUERY中指定的列数据作为该行的数据颜色值。

21

mastudio document 2013-4-29 22/68

OBJECT wxFORM用来定义一个输入表单,支持显示如下所有控件,输入完成提交到.mas文件通过数据库连接以及存储过程来实现把数据内容保存到数据库中。

OBJECT wxFORM aForm { OBJECT wxEDIT aEdit { aEdit.Name= Name aEdit.Rect[]= 10, 10, 60, 20 aEdit.Default= wang01

}

OBJECT wxRICHEDIT aREdit { aREdit.Name= Name2 aREdit.Rect[]= 10, 40, 60, 30 aREdit.Default= wang02

}

OBJECT wxCHECKBOX aCheckBox { aCheckBox.Name= Name3

aCheckBox.Rect[]= 10, 80, 12, 12 aCheckBox.Default= 1

}

OBJECT wxCOMBOBOX aComboBox { aComboBox.Name= Name4 aComboBox.Rect[]= 10, 92, 80, 80

aComboBox.Default= \"aa\\bb\\cc\\dd\\ee\\ff\"

}

OBJECT wxLISTBOX aListBox { aListBox.Name= Name5

aListBox.Rect[]= 10, 122, 80, 80

aListBox.Default= \"aa\\bb\\cc\\dd\\ee\\ff\"

}

文本框 大小 默认值

富文本框 大小 默认值

复选择框 大小 默认值

列表框 大小 默认值

列表框 大小 默认值

22

mastudio document

2013-4-29 23/68

OBJECT wxBUTTON aButton { }

OBJECT wxBUTTON bButton { }

aForm.Rect[]= 18, 58, 160, 140 aForm.Background[]= , menu_main.bmp aForm.wxPROCEDURE= aProc aForm.Link= grid.mas aForm.Attachment[]= 1, 0

表单大小 表单背景

bButton.Name= Bt2

按钮 大小 文字 函数

aButton.Name= Bt1 aButton.Rect[]= 10, 222, 80, 20 aButton.Default= \"Back\" aButton.Command= VK_LEFT

按钮 大小 文字 函数

bButton.Rect[]= 100, 222, 80, 20 bButton.Default= \"Forward\" bButton.Command= VK_RIGHT

连接文件 连接参数

}

备注:

wxBUTTON按钮的.Command定义支持:VK_LEFT、VK_RIGHT、VK_UP、VK_DOWN、VK_PASSWORD、VK_SUBMIT

23

mastudio document 2013-4-29 24/68

当按下定义为VK_RIGHT的按钮的时候,开始执行连接文件,系统自动根据控件名形成如下对象参数定义,此对象参数在下一页的.mas文件可直接读取:

OBJECT sysPARAMETER aPara {

aPara.控件A名= 控件值 aPara.控件B名= 控件值 }

在下一个页面中可读取到如上定义的参数,读取参数形式为:sysPARAMETER.Name。 在执行的连接文件中作如下对象定义,可完成提交输入保存到数据库中或则执行修改操作。

OBJECT wxPROCEDURE aProc {

PRINT \" aProc.Sql=\"\"\

aProc.wxDATASOURCE= aSource }

以上描述的是REQUEST页面的时候参数读取方法, 当POST请求的时候,参数如下方法读取:

sysPOST.PARAMETER.pSubject

24

SQL= \"update student set age=\"

SQL= SQL+ sysPARAMETER.Name SQL= SQL+\" where name= „mas‟ \"

mastudio document 2013-4-29 25/68

当按下定义为VK_SUBMIT的按钮的时候,则不进行翻页而是执行提交数据接收反馈信息,在wxFORM必须做如下形式定义:

OBJECT wxPROCEDURE aProc {

aProc.Name= CommitGas aProc.wxDATASOURCE= aSource aProc.METHOD= POST }

OBJECT wxFORM aForm {

aForm.wxPROCEDURE= aProc

}

当按下VK_SUBMIT的时候当前画面不动,执行服务器数据库存储过程,

形式为:CommitGas para,其中para由Form中的控件值来组合而成,采用逗号分开。

aProc.METHOD= POST表示只许可post调用,当页面处于request的时候服务器不执行。 aProc.METHOD= REQUEST表示只许可request调用,当页面处于post的时候服务器不执行。 aProc.METHOD参数没有的时候表示post和request都许可执行。

当wxPROCEDURE应用于DOMINO和EMAIL的时候,可通过如下方法来读取POST传递的参数

aProc.Subject= sysPOST.PARAMETER.pSubject

OBJECT wxPROCEDURE emSEND

{

emSEND.To= \"info@active-web.net\"

emSEND.Subject= sysPOST.PARAMETER.pSubject emSEND.Content= \"how are you\"

emSEND.wxDATASOURCE= aSource emSEND.METHOD= POST }

25

mastudio document 2013-4-29 26/68

当按下定义为VK_PASSWORD的按钮的时候,则不进行翻页而是执行改变登陆密码的请求,并接受反馈信息,在wxFORM中必须做如下定义:

OBJECT wxFORM aForm {

OBJECT wxEDIT aEdit { }

OBJECT wxEDIT bEdit { }

bEdit.Name= RePwd bEdit.Rect[]= 10, 40, 60, 20 aEdit.Name= Pwd

aEdit.Rect[]= 10, 10, 60, 20

}

其中两个输入框的名字必须是Pwd和RePwd,不接受空密码修改。

VK_SUBMIT和VK_PASSWORD的反馈信息在服务所在目录中Resource.ini文件中定义, 针对VK_PASSWORD 针对VK_SUBMIT,段名为wxPROCEDURE名称 [Password] Rect= 10,150,90,40 Font= 15,0x33FF22 Success= 修改成功 Aborted= 修改失败

备注: 当同一个页面同时存在wxFORM和wxGRID的时候,当点击wxGRID进入下一页面时,wxFORM中的控件值也一同作为sysPARAMETER的一部分传递下去。

26

[aProc]

Rect= 10,150,90,40 Font= 15,0x33FF22 Success= ok Aborted= bad

在下一级页面中,通过如下的形式来读取: aCaption.Titlel= sysPARAMETER.sysFORM[2] ID= aCaption.Titlel= sysPARAMETER.sysFORM[1]

mastudio document 2013-4-29 27/68

OBJECT wxTEXT对象用来显示一个文本阅读区域,可用来阅读数据中的文本、文件中的文本,支持各种常见的文件格式。

OBJECT wxTEXT aText { aText.Rect[]= 10,80,200,220 aText.Font[]= 14, 0xFFEEFF }

OBJECT wxDOCUMENT aDocument { }

OBJECT wxSCROLLBAR aBar { aBar.Color[]= 62, 192, 192

aDocument.wxQUERY= aQuery aDocument.Column= 2

来自数据库 第n列 来自word文件

文件密码

来自文本文件 \"c:/001.txt\" 来自网页文件 \"c:/001.html\" 来自PDF文件 “c:/001.pdf”

aText.Space[]= 1, 0

显示范围 字体 间距 文挡定义 滚动条定义

aText.wxDOCUMENT= aDocument aText.wxSCROLLBAR= aBar

aDocument.File= \"c:/003.doc\" aDocument.Pwd= 123

颜色值 R、G、B

}

备注: aBar.Color必须是定义为RGB格式,不定义wxSCROLLBAR对象则不显示滚动条。 wxDOCUMENT文件来源只能选择其中一种。

27

mastudio document 2013-4-29 28/68

OBJECT wxCURVE对象用来显示一个或多个曲线,首先需要定义数据库连接和查询部分,定义方法等同于wxGRID对象中所描述:

OBJECT wxCURVE aCurve { aCurve.Rect[]= 10, 20, 220, 250

曲线范围 字体

横坐标参数 纵坐标参数

大小 颜色 格数 小数位 最小值 最大值

格式化显示 指示线定义 段大小和步进 段提示标志

aCurve.Font[]= 16, 0xDD33DD aCurve.Axesx[]= 1, 0xDD22DD, 5, 0

aCurve.Axesy[]= 1, 0xDDDDDD, 5, 1, 0, 5 aCurve.Format= \"??????hh????\" aCurve.Indicator[]= 1, 0xDD22DD, 2.0

aCurve.Segment[]= 30000, 5000 aCurve.Prompt[]= 10, 10, 0, 300, 20, 16

OBJECT wxUNIT aUnit { aUnit.Style[]= 1, 0xDD22DD aUnit.wxQUERY= aQuery }

aCurve.Background= 0xFFEEFF, menu.bmp aCurve.Link= grid.mas aCurve.Attachment[]= 1, 0

线风格 线数据

背景定义 连接文件 连接参数

}

备注:可依据OBJECT wxUNIT来同时显示多条曲线。

对于日期类型作为X坐标值,必须将其转换成整数数字,转换方法为将其从转换日期值开始连续往下乘。格式化显示\"??????hh????\" 依据其中显示屏蔽位而显示。

显示屏蔽位:{\"yy\转换日期值:{ 12, 31, 24, 60, 60, 1 };

例如:

aQuery.Sql= \"SELECT hour(dt)*60*60+minute(dt)*60 AS x, Data FROM curve order by dt\" 格式化显示 \"??????hhmi??\"

可选参数aCurve.Segment定义分段显示图形,通过左右键移动查看。参数分别表示段的大小以及移动步进的大小。aCurve.Prompt为按下中间键时提示显示位置和来源位置和大小。

28

mastudio document 2013-4-29 29/68

OBJECT wxLABEL用来显示一个标签,此对象的定义必须位于.mas文件的根目录下。

OBJECT wxLABEL aLabel { aLabel.Rect[]= 10, 10, 60, 40 }

29

标签范围 标签字体 标签内容

aLabel.Font[]= 15, 0x33FFDD aLabel.Text= \"hello ni hao: \"

mastudio document 2013-4-29 30/68

OBJECT wxDIR对象用来显示服务器中指定目录下的文件列表,并可将全路径的文件名提交给下一级.mas文件。

OBJECT wxDIR aDir { aDir.Root= \"c:/temp\" aDir.Attrs[]= doc, txt }

OBJECT wxLIST aList { aList.Rect[]= 10,52,220,260 aList.Font[]= 16, 0x3333FF

显示目录

只显示此类属性 只显示此文件名 列表框定义 链接参数 下载文件 打开文件 下载提示

aDir.Files[]= \"003.pdf\aDir.wxLIST= aList

aDir.Attachment= 1, 0 aDir.Open= file.mas

aDir.Download= download.mas

aDir.Prompt[]= 10, 52

列表范围 字体颜色 指示条 翻页条

aList.Banna[]= 1, 0x3333FF, 0xEEAAEE aList.Prompt[]= 160, 180, 18, 32

}

这里wxDIR提交连接的时候,默认连接到.Open参数的文件,当下中间键会依据.Prompt的位置显示下载标志,此时按向右连接到.Download参数的文件。

提交连接会自动包含有参数:sysPARAMETER.File sysPARAMETER.Attr 分别表明提交的文件的全路径文件名和后缀,通过此下一级页面可进行下载或打开浏览。

例如打开浏览可在下一级页面做如下定义:

OBJECT wxTEXT aText { }

OBJECT wxDOCUMENT aDocument { }

30

aText.wxDOCUMENT= aDocument

aDocument.Text= sysPARAMETER.File

mastudio document 2013-4-29 31/68

可将URL作为文件来源,通过目录组件提供下载和打开浏览,其中加入OBJECT wxFILE aFile组建即可。

OBJECT wxDIR aDir {

OBJECT wxFILE aFile { }

OBJECT wxFILE bFile { }

bFile.Source= \"http://www.active-web.net/images/2001415Image1.jpg\" aFile.Source= http://www.active-web.net/download/PocketPc.rar aFile.Display= \"PocketPc\" //显示名 aFile.Local= \"PocketPc.rar\"

//另存为

//来源

}

其中aFile.Display和aFile.Local为可选项,对于如下URL中没有文件名的形式则可将下载后文件改成新的名字:http://dlc2.pconline.com.cn/filedown.jsp?dlid=47590&linkid=336727

备注:aDir.Root支持多种形式:aDir.Root= “c:/temp” 或 aDir.Root= “c:/temp/*.doc” aFile.Source参数可加--raw—来设置url不进行编码而直接提交下载 对于通过url下载后文件名会变化的,务必要采用aFile.Lcaol参数来进行更名。

31

mastudio document 2013-4-29 32/68

OBJECT wxDOWNLOAD对象用来设置一个文件下载,可配合wxDIR来下载服务器任意目录下的所有文件。

OBJECT wxDOWNLOAD aDownload { aDownload.Source= \"c:/cw_log.txt\" aDownload.Target= \"/\" }

对于上一页面的向右按键:aMenu.Attachment= 1, 0, 1 增加三个参数表示按下右键时是否开新窗口 1=不开新窗口,这样当前显示下载的进度就可以在当前页面显示,下载完毕就自动结束。

aDownload.Font[]= 16, 0x3333FF, 0xEEAAEE第三个参数如不填写,表示不显示背景矩形框。

对于文本类型文件必须保存在\\My Documents图片文件保存到\\根目录下方可执行打开aDownload.Run= true参数,不同的机器可能有所区别。

32

文件下载来源 手机保存位置 完成后是否运行 是否压缩传输 进度提示区域定义

aDownload.Run= true aDownload.Zip= true

aDownload.Prompt[]= 50, 50, 160, 80

aDownload.Font[]= 16, 0x3333FF, 0xEEAAEE

mastudio document 2013-4-29 33/68

OBJECT wxUPLOAD对象用来定义一个文件上传,首先定义文件的来源,来源指手机上的目录,文件保存指上传后保存到服务器的目录。 列表框负责显示文件来源目录下的所有文件,选中后向右即开始上传,可连续上传、随时停止。

OBJECT wxUPLOAD aLoad { aLoad.From= \"\\My Documents\" aLoad.To= \"c:\emp\" aLoad.Zip= True

aLoad.Prompt[]= 50, 50, 160, 80 aLoad.Font[]= 16, 0x3333FF, 0xEEAAEE

aLoad.wxLIST= aList

}

OBJECT wxLIST aList { aList.Rect[]= 10,52,220,260 aList.Font[]= 16, 0x3333FF aList.Banna[]= 1, 0x3333FF, 0xEEAAEE aList.Prompt[]= 100, 80, 18, 32

}

文件来源 文件保存 压缩传输 进度显示 字体 列表

列表框范围 字体 指示 翻页

33

mastudio document 2013-4-29 34/68

OBJECT wxVIEW对象用来显示一个视图区域,可进行图文、表格混排模式,支持放大缩小和移动显示。

OBJECT wxVIEW aView { aView.Rect[]= 7, 70, 226, 300 视图显示范围 aView.Message[]= 120, 52, 16, 0xAA00BB, \"第\页 共\页\"

aView.Magnify[]= 10, 50, 61, 2 放大图标位置和编号 aView.Shrink[]= 30, 50, 62, 6

缩小图标位置和编号

aView.Backward[]= 50, 50, 63, 13 上页图标位置和编号 aView.Forward[]= 70, 50, , 8

下页图标位置和编号

OBJECT wxPAGE aPage

分页对象定义

{ aPage.Background[]= 0xAABBCC, background_page.bmp aPage.Size[]= 400, 297

OBJECT wxSENTENCE aSentence

文字段落定义

{ aSentence.Font[]= 13, 0xFFAABB aSentence.Space[]= -3, 1

aSentence.Text= \"hello, this is a test text from sentence\"

}

OBJECT wxPICTURE aPic

图片文件定义

{

aPic.Fullname= \"D:\\mastudio\\Sample\\office\\view\\icon.jpg\"

}

OBJECT wxTABLE aTable 表格文件定义

{ aTable.Width= 300

aTable.Width[]= 30, 30, 40 aTable.Pen[]= 1, 0x0000FF

aTable.Align= left

aTable.Font[]= 15, 0xFF0000

OBJECT wxTR aTr

行定义 {

OBJECT wxTD aTd

列定义

34

mastudio document

{ aTd.Align= left aTd.Text= \"hello\"

} OBJECT wxTD bTd

{ aTd.Align= left bTd.Text= \"hello\" }

OBJECT wxTD cTd { cTd.align= left

cTd.Font[]= 18, 0xFFAABB cTd.Text= \"hello\" }

} OBJECT wxTR bTr

{ OBJECT wxTD aTd { aTd.Colspan= 2 aTd.Text= \"hello\" aTd.Align= center

}

OBJECT wxTD bTd { bTd.Align= left

bTd.Font[]= 13, 0xFFAABB bTd.Text= \"hello\"

}

}

OBJECT wxTR cTr { OBJECT wxTD aTd {

aTd.Text= \"hello\" }

OBJECT wxTD bTd

2013-4-29 35/68

35

mastudio document

{

bTd.Text= \"hello\" }

OBJECT wxTD cTd { cTd.Text= \"hello\"

}

}

OBJECT wxTR dTr { OBJECT wxTD aTd { aTd.Text= \"hello\"

aTd.Rowspan= 2

}

OBJECT wxTD bTd {

bTd.Text= \"hello\" }

OBJECT wxTD cTd { cTd.Text= \"hello\" }

}

OBJECT wxTR eTr { OBJECT wxTD aTd { aTd.Text= \"hello\"

}

OBJECT wxTD bTd { bTd.Text= \"hello\" }

}

OBJECT wxTR fTr

{

2013-4-29 36/68

36

mastudio document

OBJECT wxTD aTd { aTd.Text= \"hello\" aTd.Rowspan= 2 aTd.Colspan= 2

}

OBJECT wxTD bTd { bTd.Text= \"hello\" }

}

OBJECT wxTR gTr { OBJECT wxTD aTd { aTd.Text= \"hello\"

}

}

}

}

OBJECT wxPAGE bPage 分页显示定义二

{ bPage.Background[]= 0xAABBCC, background_page.bmp bPage.Size[]= 300, 297

OBJECT wxTABLE aTable { aTable.Width= 300 aTable.Width[]= 30, 30, 40

aTable.Pen[]= 1, 0x0000FF

aTable.Align= left

aTable.Font[]= 15, 0xFF0000

OBJECT wxTR aTr {

OBJECT wxTD aTd

2013-4-29 37/68

37

mastudio document

2013-4-29 38/68

} } }

{ aTd.Align= left aTd.Text= \"page2\"

}

OBJECT wxTD bTd { aTd.Align= left bTd.Text= \"page2\"

}

OBJECT wxTD cTd { cTd.align= left

cTd.Font[]= 18, 0xFFAABB cTd.Text= \"page2\" }

}

OBJECT wxTR aTr { OBJECT wxTD aTd { aTd.Align= left aTd.Text= \"page2\" }

OBJECT wxTD bTd { aTd.Align= left bTd.Text= \"page2\"

}

OBJECT wxTD cTd { cTd.align= left

cTd.Font[]= 18, 0xFFAABB cTd.Text= \"page2\"

}

}

38

mastudio document 2013-4-29 39/68

定义显示一个PDF文件,系统自动进行分页:

OBJECT wxVIEW aView { aView.Rect[]= 7, 70, 226, 300 aView.Message[]= 120, 52, 16, 0xAA00BB, \"第\页 共\页\"

aView.Magnify[]= 10, 50, 61, 2 aView.Shrink[]= 30, 50, 62, 6

aView.Backward[]= 50, 50, 63, 13 aView.Forward[]= 70, 50, , 8

aView.Document= \"D:\\mastudio\\Sample\\office\\view\\mas.pdf\" }

备注: aView.Document参数支持word、excel、pdf等各种文件。

定义显示一个WORD文件,系统自动进行分页:

OBJECT wxVIEW aView { aView.Rect[]= 7, 70, 226, 300 aView.Message[]= 120, 52, 16, 0xAA00BB, \"第\页 共\页\"

aView.Magnify[]= 10, 50, 61, 2 aView.Shrink[]= 30, 50, 62, 6 aView.Backward[]= 50, 50, 63, 13 aView.Forward[]= 70, 50, , 8

aView.Font[]= 16, 0xAA0000

aView.Content= \"D:\\mastudio\\Sample\\office\\view\\mas.doc\" (注意这里的参数变化)

}

39

mastudio document 2013-4-29 40/68

定义显示一段HTML页面,将获取的源代码传递给wxVIEW来显示:

OBJECT wxQUERY aQuery { aQuery.wxDATASOURCE= aSource }

OBJECT wxVIEW aView {

aView.Rect[]= 7, 70, 226, 300

aView.Message[]= 120, 52, 16, 0xAA00BB, \"第\页 共\页\"

aView.Magnify[]= 10, 50, 61, 2 aView.Shrink[]= 30, 50, 62, 6 aView.Backward[]= 50, 50, 63, 13 aView.Forward[]= 70, 50, , 8 aView.Font[]= 14, 0x000000

OBJECT wxHTML aHtml { aHtml.wxQUERY= aQuery }

aHtml.Field= 1

aQuery.Url= \"http://www.active-web.net/sample/get_grid.asp\"

aQuery.Begin= \"\" aQuery.Lex= \"--raw-- (.+)\" // 注意,这里必须加上--raw—前缀 aQuery.End= \"\" aQuery.Method= Get

}

如果需要多个HTML页面同时显示出来,则可以通过增加wxHTML对象,系统自动进行分页显示多个wxHTML.

OBJECT wxHTML bHtml { }

bHtml.wxQUERY= bQuery bHtml.Field= 1

40

mastudio document 2013-4-29 41/68

对于获取的HTML代码,在很多情况下是不规则的,这里可以通过wxPARAMETER来对代码进行修正,在wxHTML对象中增加子对象如下:

OBJECT wxPARAMETER aPara { }

OBJECT wxPARAMETER bPara { }

bPara.Lex= \"(colspan=.+?\"\")\" bPara.Replace= \" \" aPara.Lex= \"(height=.+?\"\")\" aPara.Replace= \" \"

对于表格各列没有宽度,系统一律根据列多少进行均分。在wxHTML中增加属性aHtml. Runlog= true 则可以将中间代码记录到HTTP日志中。

41

mastudio document 2013-4-29 42/68

OBJECT wxINKPAD对象用来设置一个手写签名的区域。

OBJECT wxINKPAD aPad { aPad.Pen[]= 1, 0xFF0000

笔宽度颜色 手写区域 区域背景 链接页面 链接参数

aPad.Rect[]= 10,80,200,220 aPad.Background[]= 0x0000FF aPad.Link= write.mas aPad.Attachment= 1, 0

}

当提交给链接页面的时候,系统自带有参数sysPARAMETER.Ink ,该参数保存了笔迹数据,可通过此参数把笔迹数据保存到数据库中。

数据格式为:

hits,x,y,hits,x,y…..

hits=1表示笔点下 hits=2表示移动 hits=4表示笔抬起

依次序排下去,

后台应用系统可利用此数据库格式来恢复笔迹的显示。

OBJECT wxSHELL对象用来执行一个命令程序

OBJECT wxSHELL aShell {

aShell.Run= \"c:/mastudio/common/tools/send.exe\" OBJECT wxPARAMETER aPara { }

aPara.pContent= \"hello\"

}

这里的参数可依次排下去,系统会自动将其全部追加到Run的命令后面作为参数传递过来。

42

mastudio document 2013-4-29 43/68

OBJECT wxREDIRECT 对象用自动重定向到新的页面,需要注意的是Attachement[]=参数中第2个参数务必为1,否则从重定向后的页面返回的时候,会返回到中间页面。

OBJECT wxREDIRECT aDirect { }

OBJECT sysGLOBAL对象由系统提供给每个.mas文件,其中存放了相关的全局变量,可在任意一个.mas文件中直接读取。

OBJECT sysGLOBAL aGlobal { aGlobal.USER= 登陆名 aGlobal.IMEI= 设备号 }

例如:

43

aDirect.Attachment[]= 1, 1 aDirect.Link= grid.mas

aGlobal.IP= 网络地址 aGlobal.DATETIME= 登陆日期 aGlobal.PATH= 安装目录\\Common\\Temp\\IMEI\\

SQL= “aQuery.Sql= ”

SQL= SQL+ “SELECT * FROM student WHERE name= „ ” SQL= SQL+ sysGLOBAL.USER SQL= SQL+ “ „ ” PRINT SQL

mastudio document

Global.mas全局文件

2013-4-29 44/68

Global.mas文件的内容有效于所有当前目录下文件以及子目录文件,直到在子目录中遇到新的Global.mas文件停止。这些文件均默认自动包含有Global.mas文件中的内容。

例如Global.mas内容为:

OBJECT wxQUERY aQuery { }

则当前目录下所有.mas文件中都默认有OBJECT wxQUERY aQuery对象的定义,所以可以将共性的内容放到Global.mas中。如背景设置、数据库连接、全局变量等。

44

Query.Sql= “select * from table”

mastudio document 2013-4-29 45/68

七、语法范例

1、变量和运算符

a= 10

b= a* 10-10+10*10/10

b= a/10+ a%2

str= “hello”

str= str+ 10

2、IF语句

IF a=10 THEN PRINT \" aMenu.a=\

ELSE PRINT \" aMenu.b=\

ENDIF

3、FOR语句

FOR i=1 TO 3 STEP 1 str= \" aMenu.FOR\"+ i+ \"=\"+ i PRINT str NEXT i

4、WHILE语句

i= 3

WHILE i>0 str= \" aMenu.WHILE\"+ i+ \"=\"+ i PRINT str i= i- 1 WEND

5、REPEAT语句

j= 1

REPEAT str= \" aMenu.REPEAT\"+ j+ \"=\"+ j PRINT str j= j+ 1

UNTIL j= 4

45

mastudio document

6、私有属性

2013-4-29 46/68

private: aMenu.Username= mastudio

aMenu.Password= mas123

public: aMenu.Col[]= \"姓名,年龄,性别,驻地,颜色\" aMenu.Row[]= \"bai, 32, m, nj, green\"

7、嵌套对象定义

OBJECT wxMENU aMenu { aMenu.Rect[]= 10, 10, 200, 320 OBJECT wxCSS aCss

{ }

aCss.size= 10

aCss.color= 0xFFDDGG

}

8、双引号的写法及字符串与数字相加 str= \" aMenu.SQL= \"\" \" str= str+ \"select * from list_\" str= str+ 200612 str= str+ \" \"\" \" PRINT str

9、外部对象数据的读取 OBJECT wxSERVER aServer { aServer.host=192.168.1.1 }

OBJECT wxMENU aMenu { str= \" aMenu.HOST= \"\" \" str= str+ aServer.host }

str= str+ \" \"\" \" PRINT str

46

mastudio document

10、外部对象函数的调用

2013-4-29 47/68

REM 演示 str= \" aMenu.Field= \"\" \" str= str+ aQuery.Field(2) str= str+ \" \"

str= str+ aServer.db[2] str= str+ \" \"\" \" PRINT str

11、函数调用

str= \" aMenu.Year= \"+ YEAR() PRINT str; str= \" aMenu.Month= \"+ MONTH() PRINT str; str= \" aMenu.Day= \"+ DAY() PRINT str; str= \" aMenu.Hour= \"+ HOUR() PRINT str; str= \" aMenu.Minute= \"+ MINUTE() PRINT str; str= \" aMenu.Second= \"+ SECOND() PRINT str; str= \" aMenu.Now= \"\"\"+ NOW()+ \"\"\" PRINT str;

a= 10

b= 10+ ITOA(a) PRINT \"aFun.b= \

c= 10+ ATOI(b)

PRINT \"aFun.c= \

d= 10.23

e= 10+ FTOA(d) PRINT \"aFun.e= \

f= 10+ ATOF(e) PRINT \"aFun.f= \

g= LEN(e)

PRINT \"aFun.elen= \

47

mastudio document 2013-4-29 48/68

str= \"abcdefghijklmn\" lstr= LEFT(str, 3)

PRINT \"aFun.strl3= \

rstr= RIGHT(str, 3)

PRINT \"aFun.strr3= \ mstr= MIDDLE(str, 3, 3) PRINT \"aFun.strm3= \

str= \" xyz \" str= TRIM(str)

PRINT \"aFun.trim= \

str= \"name/sex/age\"

str=SPLIT(TRIM(str), \"/\ PRINT \"aFun.split= \

12、OBJECT综合语法

OBJECT wxDATASOURCE aData { aData.SQL= \"select * from list\" aData.HOST= 192.168.1.1 OBJECT wxCONNECT aConnect }

{ }

aConnect.timeout= 12

OBJECT wxSTYLE aStyle { aStyle.x= 10 aStyle.font[]= 20, 0xFFDDFF, 0xDDHHAA OBJECT wxSTYLE bStyle

{ }

bStyle.x= 10

bStyle.font[]= 10, 0xFFDDFF, 0xDDHHAA

}

下页继续:

48

mastudio document 2013-4-29 49/68

OBJECT wxGRID aGrid { aGrid.ax= aStyle.x aGrid.afont= aStyle.font[1] }

aGrid.acnt= aStyle.Count() aGrid.afld= aStyle.Field(1) aGrid.abx= aStyle.bStyle.x

aGrid.abfont= aStyle.bStyle.font[1] aGrid.abcnt= aStyle.bStyle.Count() aGrid.abfld= aStyle.bStyle.Field(1) aGrid.mx= mStyle.x aGrid.mfont= mStyle.font[1] aGrid.mcnt= mStyle.Count() aGrid.mfld= mStyle.Field(1) aGrid.mnx= mStyle.nStyle.x aGrid.mnfont= mStyle.nStyle.font[1] aGrid.mncnt= mStyle.nStyle.Count() aGrid.mnfld= mStyle.nStyle.Field(1) OBJECT wxSTYLE mStyle { }

mStyle.x= 10

mStyle.font[]= 20, 0xFFDDFF, 0xDDHHAA OBJECT wxSTYLE nStyle { }

nStyle.x= 10

nStyle.font[]= 10, 0xFFDDFF, 0xDDHHAA

aGrid.wxDATASOURCE= aData

aGrid.wxCONNECT= aData.aConnect

备注:IF\\WHILE\\REPEAT\\FOR支持嵌套使用。

49

mastudio document 2013-4-29 50/68

八、表达式

1、MAS语法的不需要定义即可以使用变量,变量类型分为整数、小数和字符串。

如:

2、支持+-*/%五种运算符号以及优先符号()

如:

x= ( (10+ 10- 2)* 2/ 3 ) % 3

3、字符串变量可以与整数变量直接相加,相加后为字符串变量。

如:

str= “hello ” x= 10 str= str+ x PRINT str

结果为hello10 x= 10 y= 8.2 str= “hello”

4、OBJECT属性可直接被变量应用 如:

Name= Name+ sysPARAMETER.Name

Name= Name+ aPARAMETER.Name Name= Name+ aQuery.Field(1) Name= Name+ aGrid.Font[2]

aQuery.Name= sysPARAMETER.Name aQuery.Name= aPARAMETER.Name aQuery.Name= aQuery.Field(1) aQuery.Name= aGrid.Font[2]

这里的对象名字可以是全路径的形式oName.oName或则oBase.oName

特别注意:sysPARAMETER.Name不能直接赋值给变量,如x= sysPARAMETER.Name将不被许可,而x= y+ sysPARAMETER.Name 则可以。

5、动态创建OBJECT语句

SQL= \"SELECT datepart(month,datetime )*31*24*60*60+ datepart(day,datetime )*24*60*60, high FROM barDay where productID=\"

SQL= SQL+ sysPARAMETER.ID

SQL= SQL+\" and datepart(year,datetime)=datepart(year,getdate()) order by datetime\"

PRINT \"aQuery.Sql=\"\"\

50

mastudio document 2013-4-29 51/68

6、动态创建一组OBJECT对象

i= 1

ID= sysPARAMETER.ID[i] n= LEN( ID )

WHILE n>0

PRINT \"OBJECT wxLABEL aLabel\PRINT \"{\"

PRINT \"aLabel\PRINT \"aLabel\PRINT \"aLabel\PRINT \

i= i+ 1

ID= sysPARAMETER.ID[i]

n= LEN( ID ) WEND

7、遍历wxQUERY对象的所有记录集

n= aQuery.Count()- 1 str= \" \"

FOR i=1 TO n STEP 1

str= str+ aQuery.Field(1) bEof= aQuery.Next( )

NEXT i

当移动指针到记录集最后一条记录的时候,aQuery.Next()返回0,否则返回1。 N= aQuery.First( ) 返回头指针。

这里特别需要注意书写格式,必须是var= aQuery.Next()形式,不可以直接书写成

aQuery.Next( )。

51

mastudio document 2013-4-29 52/68

九、正则定义

引言

正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。

正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。

正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。

1. 正则表达式规则

1.1 普通字符

字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是\"普通字符\"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

举例1:表达式 \"c\",在匹配字符串 \"abcde\" 时,匹配结果是:成功;匹配到的内容是:\"c\";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)

举例2:表达式 \"bcd\",在匹配字符串 \"abcde\" 时,匹配结果是:成功;匹配到的内容是:\"bcd\";匹配到的位置是:开始于1,结束于4。

1.2 简单的转义字符

一些不便书写的字符,采用在前面加 \"\\\" 的方法。这些字符其实我们都已经熟知了。

表达式 \\r, \\n \ \\\\

52

可匹配 代表回车和换行符 制表符 代表 \"\\\" 本身 mastudio document 2013-4-29 53/68

还有其他一些在后边章节中有特殊用处的标点符号,在前面加 \"\\\" 后,就代表该符号本身。比如:^, $ 都有特殊意义,如果要想匹配字符串中 \"^\" 和 \"$\" 字符,则表达式就需要写成 \"\\^\" 和 \"\\$\"。 表达式 \\^ \\$ \\. 可匹配 匹配 ^ 符号本身 匹配 $ 符号本身 匹配小数点(.)本身 这些转义字符的匹配方法与 \"普通字符\" 是类似的。也是匹配与之相同的一个字符。

举例1:表达式 \"\\$d\",在匹配字符串 \"abc$de\" 时,匹配结果是:成功;匹配到的内容是:\"$d\";匹配到的位置是:开始于3,结束于5。

1.3 能够与 '多种字符' 匹配的表达式

正则表达式中的一些表示方法,可以匹配 '多种字符' 其中的任意一个字符。比如,表达式 \"\\d\" 可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。这就好比玩扑克牌时候,大小王可以代替任意一张牌,但是只能代替一张牌。 表达式 \\d \\w \\s .

举例1:表达式 \"\\d\\d\",在匹配 \"abc123\" 时,匹配的结果是:成功;匹配到的内容是:\"12\";匹配到的位置是:开始于3,结束于5。

举例2:表达式 \"a.\\d\",在匹配 \"aaa100\" 时,匹配的结果是:成功;匹配到的内容是:\"aa1\";匹配到的位置是:开始于1,结束于4。

53

可匹配 任意一个数字,0~9 中的任意一个 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个 包括空格、制表符、换页符等空白字符的其中任意一个 小数点可以匹配除了换行符(\\n)以外的任意一个字符 mastudio document 2013-4-29 54/68

1.4 自定义能够匹配 '多种字符' 的表达式

使用方括号 [ ] 包含一系列字符,能够匹配其中任意一个字符。用 [^ ] 包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。 表达式 [ab5@] [^abc] [f-k] 可匹配 匹配 \"a\" 或 \"b\" 或 \"5\" 或 \"@\" 匹配 \"a\之外的任意一个字符 匹配 \"f\"~\"k\" 之间的任意一个字母 [^A-F0-3] 匹配 \"A\"~\"F\之外的任意一个字符 举例1:表达式 \"[bcd][bcd]\" 匹配 \"abc123\" 时,匹配的结果是:成功;匹配到的内容是:\"bc\";匹配到的位置是:开始于1,结束于3。

举例2:表达式 \"[^abc]\" 匹配 \"abc123\" 时,匹配的结果是:成功;匹配到的内容是:\"1\";匹配到的位置是:开始于3,结束于4。

1.5 修饰匹配次数的特殊符号

前面章节中讲到的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符其中任意一个的表达式,都只能匹配一次。如果使用表达式再加上修饰匹配次数的特殊符号,那么不用重复书写表达式就可以重复匹配。

使用方法是:\"次数修饰\"放在\"被修饰的表达式\"后边。比如:\"[bcd][bcd]\" 可以写成 \"[bcd]{2}\"。 表达式 {n} {m,n} {m,} ? + * 作用 表达式重复n次,比如:\"\\w{2}\" 相当于 \"\\w\\w\";\"a{5}\" 相当于 \"aaaaa\" 表达式至少重复m次,最多重复n次,比如:\"ba{1,3}\"可以匹配 \"ba\"或\"baa\"或\"baaa\" 表达式至少重复m次,比如:\"\\w\\d{2,}\"可以匹配 \"a12\匹配表达式0次或者1次,相当于 {0,1},比如:\"a[cd]?\"可以匹配 \"a\表达式至少出现1次,相当于 {1,},比如:\"a+b\"可以匹配 \"ab\表达式不出现或出现任意次,相当于 {0,},比如:\"\\^*b\"可以匹配 \"b\ 举例1:表达式 \"\\d+\\.?\\d*\" 在匹配 \"It costs $12.5\" 时,匹配的结果是:成功;

匹配到的内容是:\"12.5\";匹配到的位置是:开始于10,结束于14。

举例2:表达式 \"go{2,8}gle\" 在匹配 \"Ads by goooooogle\" 时,匹配的结果是:成功;匹配到的内容是:\"goooooogle\";匹配到的位置是:开始于7,结束于17。

54

mastudio document 2013-4-29 55/68

1.6 其他一些代表抽象意义的特殊符号

一些符号在表达式中代表抽象的特殊意义: 表达式 ^ $ \\b 作用 与字符串开始的地方匹配,不匹配任何字符 与字符串结束的地方匹配,不匹配任何字符 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符 进一步的文字说明仍然比较抽象,因此,举例帮助大家理解。

举例1:表达式 \"^aaa\" 在匹配 \"xxx aaa xxx\" 时,匹配结果是:失败。因为 \"^\" 要求与字符串开始的地方匹配,因此,只有当 \"aaa\" 位于字符串的开头的时候,\"^aaa\" 才能匹配,比如:\"aaa xxx xxx\"。

举例2:表达式 \"aaa$\" 在匹配 \"xxx aaa xxx\" 时,匹配结果是:失败。因为 \"$\" 要求与字符串结束的地方匹配,因此,只有当 \"aaa\" 位于字符串的结尾的时候,\"aaa$\" 才能匹配,比如:\"xxx xxx aaa\"。

举例3:表达式 \".\\b.\" 在匹配 \"@@@abc\" 时,匹配结果是:成功;匹配到的内容是:\"@a\";匹配到的位置是:开始于2,结束于4。

进一步说明:\"\\b\" 与 \"^\" 和 \"$\" 类似,本身不匹配任何字符,但是它要求它在匹配结果中所处位置的左右两边,其中一边是 \"\\w\" 范围,另一边是 非\"\\w\" 的范围。

举例4:表达式 \"\\bend\\b\" 在匹配 \"weekend,endfor,end\" 时,匹配结果是:成功;匹配到的内容是:\"end\";匹配到的位置是:开始于15,结束于18。 一些符号可以影响表达式内部的子表达式之间的关系: 表达式 | ( ) 作用 左右两边表达式之间 \"或\" 关系,匹配左边或者右边 (1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 (2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到 举例5:表达式 \"Tom|Jack\" 在匹配字符串 \"I'm Tom, he is Jack\" 时,匹配结果是:成功;匹配到的内容是:\"Tom\";匹配到的位置是:开始于4,结束于7。匹配下一个时,匹配结果是:成功;匹配到的内容是:\"Jack\";匹配到的位置时:开始于15,结束于19。

举例6:表达式 \"(go\\s*)+\" 在匹配 \"Let's go go go!\" 时,匹配结果是:成功;匹配到内容是:\"go go go\";匹配到的位置是:开始于6,结束于14。

举例7:表达式 \"¥(\\d+\\.?\\d*)\" 在匹配 \"$10.9,¥20.5\" 时,匹配的结果是:成功;匹配到的内容是:\"¥20.5\";匹配到的位置是:开始于6,结束于10。单独获取括号范围匹配到的内容是:\"20.5\"。

55

mastudio document 2013-4-29 56/68

2. 正则表达式中的一些高级规则

2.1 匹配次数中的贪婪与非贪婪

在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:\"{m,n}\\"{m,}\\"?\\"*\\"+\",具体匹配的次数随被匹配的字符串而定。这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配。比如,针对文本 \"dxxxdxxxd\",举例如下: 表达式 (d)(\\w+) 匹配结果 \"\\w+\" 将匹配第一个 \"d\" 之后的所有字符 \"xxxdxxxd\" \"\\w+\" 将匹配第一个 \"d\" 和最后一个 \"d\" 之间的所有字符 \"xxxdxxx\"。虽然 (d)(\\w+)(d) \"\\w+\" 也能够匹配上最后一个 \"d\",但是为了使整个表达式匹配成功,\"\\w+\" 可以 \"让出\" 它本来能够匹配的最后一个 \"d\" 由此可见,\"\\w+\" 在匹配的时候,总是尽可能多的匹配符合它规则的字符。虽然第二个举例中,它没有匹配最后一个 \"d\",但那也是为了让整个表达式能够匹配成功。同理,带 \"*\" 和 \"{m,n}\" 的表达式都是尽可能地多匹配,带 \"?\" 的表达式在可匹配可不匹配的时候,也是尽可能的 \"要匹配\"。这 种匹配原则就叫作 \"贪婪\" 模式 。 非贪婪模式:

在修饰匹配次数的特殊符号后再加上一个 \"?\" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 \"不匹配\"。这种匹配原则叫作 \"非贪婪\" 模式,也叫作 \"勉强\" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。举例如下,针对文本 \"dxxxdxxxd\" 举例: 表达式 (d)(\\w+?) 匹配结果 \"\\w+?\" 将尽可能少的匹配第一个 \"d\" 之后的字符,结果是:\"\\w+?\" 只匹配了一个 \"x\" 为了让整个表达式匹配成功,\"\\w+?\" 不得不匹配 \"xxx\" 才可以让后边的 \"d\" 匹配,从而使整个表达式匹配成功。因此,结果是:\"\\w+?\" 匹配 \"xxx\" (d)(\\w+?)(d) 更多的情况,举例如下:

举例1:表达式 \"(.*)\" 与字符串 \"

aa

bb

\" 匹配时,匹配的结果是:成功;匹配到的内容是 \"

aa

bb

\" 整个字符串, 表达式中的 \"\" 将与字符串中最后一个 \"\" 匹配。

举例2:相比之下,表达式 \"(.*?)\" 匹配举例1中同样的字符串时,将只得到 \"

aa

\", 再次匹配下一个时,可以得到第二个 \"

bb

\"。

56

mastudio document

2.2 反向引用 \\1, \\2...

2013-4-29 57/68

表达式在匹配时,表达式引擎会将小括号 \"( )\" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 \"(.*?)\"。

其实,\"小括号包含的表达式所匹配到的字符串\" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 \"括号内的子匹配已经匹配到的字符串\"。引用方法是 \"\\\" 加上一个数字。\"\\1\" 引用第1对括号内匹配到的字符串,\"\\2\" 引用第2对括号内匹配到的字符串„„以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 \"(\" 在前,那这一对就先排序号。 举例如下:

举例1:表达式 \"('|\")(.*?)(\\1)\" 在匹配 \" 'Hello', \"World\" \" 时,匹配结果是:成功;匹配到的内容是:\" 'Hello' \"。再次匹配下一个时,可以匹配到 \" \"World\" \"。

举例2:表达式 \"(\\w)\\1{4,}\" 在匹配 \"aa bbbb abcdefg ccccc 111121111 999999999\" 时,匹配结果是:成功;匹配到的内容是 \"ccccc\"。再次匹配下一个时,将得到 999999999。这个表达式要求 \"\\w\" 范围的字符至少重复5次,注意与 \"\\w{5,}\" 之间的区别。

举例3:表达式 \"<(\\w+)\\s*(\\w+(=('|\").*?\\4)?\\s*)*>.*?\" 在匹配 \"\" 时,匹配结果是成功。如果 \"\" 与 \"\" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。

2.3 预搜索,不匹配;反向预搜索,不匹配

前面的章节中,我讲到了几个代表抽象意义的特殊符号:\"^\",\"$\",\"\\b\"。它们都有一个共同点,那就是:它们本身不匹配任何字符,只是对 \"字符串的两头\" 或者 \"字符之间的缝隙\" 附加了一个条件。理解到这个概念以后,本节将继续介绍另外一种对 \"两头\" 或者 \"缝隙\" 附加条件的,更加灵活的表示方法。 正向预搜索:\"(?=xxxxx)\",\"(?!xxxxx)\"

格式:\"(?=xxxxx)\",在被匹配的字符串中,它对所处的 \"缝隙\" 或者 \"两头\" 附加的条件是:所在缝隙的右侧,必须能够匹配上 xxxxx 这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似 \"\\b\",本身不匹配任何字符。\"\\b\" 只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

举例1:表达式 \"Windows (?=NT|XP)\" 在匹配 \"Windows 98, Windows NT, Windows 2000\" 时,将只匹配 \"Windows NT\" 中的 \"Windows \",其他的 \"Windows \" 字样则不被匹配。

举例2:表达式 \"(\\w)((?=\\1\\1\\1)(\\1))+\" 在匹配字符串 \"aaa ffffff 999999999\"

57

mastudio document 2013-4-29 58/68

时,将可以匹配6个\"f\"的前4个,可以匹配9个\"9\"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。当然,这个表达式可以不这样写,在此的目的是作为演示之用。

格式:\"(?!xxxxx)\",所在缝隙的右侧,必须不能匹配 xxxxx 这部分表达式。

举例3:表达式 \"((?!\\bstop\\b).)+\" 在匹配 \"fdjka ljfdl stop fjdsla fdj\" 时,将从头一直匹配到 \"stop\" 之前的位置,如果字符串中没有 \"stop\",则匹配整个字符串。

举例4:表达式 \"do(?!\\w)\" 在匹配字符串 \"done, do, dog\" 时,只能匹配 \"do\"。在本条举例中,\"do\" 后边使用 \"(?!\\w)\" 和使用 \"\\b\" 效果是一样的。 反向预搜索:\"(?<=xxxxx)\",\"(?这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的 \"左侧\",两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与 \"正向预搜索\" 一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。

举例5:表达式 \"(?<=\\d{4})\\d+(?=\\d{4})\" 在匹配 \"12345670123456\" 时,将匹配除了前4个数字和后4个数字之外的中间8个数字。由于 JScript.RegExp 不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如:Java 1.4 以上的 java.util.regex 包,.NET 中System.Text.RegularExpressions 命名空间,以及本站推荐的最简单易用的 DEELX 正则引擎。

3. 其他通用规则

还有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解过程中没有提到。 3.1 表达式中,可以使用 \"\\xXX\" 和 \"\\" 表示一个字符(\"X\" 表示一个十六进制数) 形式 \\xXX \

3.2 在表达式 \"\\s\",\"\\d\",\"\\w\",\"\\b\" 表示特殊意义的同时,对应的大写字母表示相反的意义

表达式 可匹配 \\S \\D \\W \\B

58

字符范围 编号在 0 ~ 255 范围的字符,比如:空格可以使用 \"\\x20\" 表示 任何字符可以使用 \"\,"p":{"h":15.75,"w":47.295,"x":332.28,"y":806.175,"z":324},"ps":{"_cover":true},"t":"word再加上其编号的4位十六进制数表示,比如:\"\中\" 匹配所有非空白字符(\"\\s\" 可匹配各个空白字符) 匹配所有的非数字字符 匹配所有的字母、数字、下划线以外的字符 匹配非单词边界,即左右两边都是 \"\\w\" 范围或者左右两边都不是 \"\\w\" 范围时的字符缝隙 mastudio document 2013-4-29 59/68

3.3 在表达式中有特殊意义,需要添加 \"\\\" 才能匹配该字符本身的字符汇总 字符 ^ $ ( ) [ ] { } . ? + * | 说明 匹配输入字符串的开始位置。要匹配 \"^\" 字符本身,请使用 \"\\^\" 匹配输入字符串的结尾位置。要匹配 \"$\" 字符本身,请使用 \"\\$\" 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 \"\\(\" 和 \"\\)\" 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 \"\\[\" 和 \"\\]\" 修饰匹配次数的符号。要匹配大括号,请使用 \"\\{\" 和 \"\\}\" 匹配除了换行符(\\n)以外的任意一个字符。要匹配小数点本身,请使用 \"\\.\" 修饰匹配次数为 0 次或 1 次。要匹配 \"?\" 字符本身,请使用 \"\\?\" 修饰匹配次数为至少 1 次。要匹配 \"+\" 字符本身,请使用 \"\\+\" 修饰匹配次数为 0 次或任意次。要匹配 \"*\" 字符本身,请使用 \"\\*\" 左右两边表达式之间 \"或\" 关系。匹配 \"|\" 本身,请使用 \"\\|\" 3.4 括号 \"( )\" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 \"(?:xxxxx)\" 格式

举例1:表达式 \"(?:(\\w)\\1)+\" 匹配 \"a bbccdd efg\" 时,结果是 \"bbccdd\"。括号 \"(?:)\" 范围的匹配结果不进行记录,因此 \"(\\w)\" 使用 \"\\1\" 来引用。

59

mastudio document 2013-4-29 60/68

十、事件接口

可以通过执行message.exe程序来向客户端发送消息,message.exe参数定义如下: _host _port _login _pwd _from _to _msg _time

这八个参数是必须的,分别表示为mas主机地址、端口号、登陆名、密码、发信人、收信人、消息内容、消息时间,同样在account.ini中为message.exe开设一个登陆帐号。

后面还可增加参数_font _rect _background来设置消息框的字体和位置范围以及背景颜色。 例如:12,0x332233 10,10,50,50 0x000000

收信人名为all则表示发送给所有在线的用户,收信人名采用前部分匹配模式,只要前部分匹配则表示为收信人,如发送给收信人an 则以an开头的anx、any 用户都将收到。

收信为名为IMEI号码,则表示发送消息给指定IMEI号码的机器,这对于公用帐号而需要区分接受消息使用。

60

mastudio document 2013-4-29 61/68

十一、资源文件

在客户端中所用的背景图片、声音文件以及各种固化的参数都保存在手机中,不需要从服务器获取而避免不必要的流量,因为它们不需要改变。

Resource.ini文件定义安装和登陆界面的部分参数,以及各种消息提示,文件内容如下:

[Application]

Title=中高移动

Toolbar=true

alive=false

Temp= \\my documents

Runing=


    中高移动正在运行中...

align=right>

Stoped=

color=\\\"#0000FF\\\">
    中高移动停止运行!

align=right>

Exit=你确定要退出吗?

BACKGROUND=Menu_Main.bmp

[Prompt]

IDS_MESSAGE_001=连接不到服务器

IDS_MESSAGE_002=保存参数文件失败

IDS_MESSAGE_003=请输入服务器名称或者地址 IDS_MESSAGE_004=请输入端口号

IDS_MESSAGE_005=请输入手机号码

IDS_MESSAGE_006=连接服务器失败,是否重试?

IDS_MESSAGE_007=登陆服务器超时,是否继续等待?

IDS_MESSAGE_008=登陆失败,是否重新输入帐号?

[Setup]

设置安装界面参数

IDM_OK=确定

IDM_CANCEL=退出

IDC_SERVER=80,86,90,16

IDC_PORT=80,106,37,16

IDC_PHONE=80,144,90,16

IDC_PWD=80,1,37,16

IDC_SAVE=36,222,16,16

IDC_SHOW=36,224,0,0

61

mastudio document

[Login]

IDM_OK=确定

IDM_CANCEL=取消

2013-4-29 62/68

设置登陆界面参数

IDC_SERVER=80,72,90,16 IDC_PHONE=80,92,90,16 IDC_PWD=80,112,90,16 IDC_SAVE=34,225,16,16 IDC_SHOW=35,204,0,16 IDC_OFFLINE=35,244,0,16

BACKGROUND=background_dlg2.bmp

Resource.bmp文件保存所需的各种图标。 上部分16*16小图标,为菜单所用,必须采用黑色为底色,10个图标一行。

下部分32*32大图标,为导航面板所用,必须采用白色底色,5各个图表一行。上下两部分的分界为150点

所有OBJECT中定义的背景文件都是指客户端目录下的文件,当在OBJECT中指定背景文件的时候,您需要将图片文件拷贝客户端目录中,背景文件只支持.bmp格式,Symbian平台需要将.bmp转换成.mbm文件。

客户端目录可创建message.wav文件,该文件将在接收到事件消息的时候播放声音,播放10秒自动停止,点击鼠标也停止播放。

备注: [Application]中Temp表示临时文件存放目录,对于symbian机器特别需要注意设置正确,否则在查看有图片的文件时,会不成功。对于mobile机器,无此参数设置,则保存在当前位置。

62

mastudio document 2013-4-29 63/68

服务部分资源文件,D:\\mastudio\\Common下:

一、Resource.ini

[Password]

Rect= 80,170,150,40 Font= 15,0x33FF22 Success= 修改成功 Aborted= 修改失败

[emSEND]

Rect= 1,1,90,40 Font= 15,0x33FF22

Success= 邮件发送出去喽!

Aborted= 运气真不好,发送失败了。

存放执行存储过程的返回提示消息,段名为存储过程的名字。

二、Config.ini

[Application] Root= c:\\

Ip= 172.1.1.88

Port= 8400

[Pushmail]

Server= 邮件中心

Login= mail

Pwd= mail123

[Debug]

domino= true

mail= true

http= true

compile= true

database= true

其中Pushmail部分定义了邮件推送所需要的参数,login为登陆MAS系统的帐号,必须先在account.ini文件设置。

其中Debug部分用来输出调试信息,不同的模块设置调试输出信息。调试信息保存在common/debug/compile.txt 等对应的文件中。

63

mastudio document 2013-4-29 /68

在Config.ini中增加如下内容则切换系统登陆认证从数据库中获取用户名和密码,并可以自行对密码进行加密。其中Datasource部分为帐号所在数据库,可以同wxSOURCE一样进行各种数据库连接定义。

[Datasource]

Database= MSSQL Server= 192.168.1.88 Login= gas Pwd= 123

[Login] Table= auth

Field= username

//用户所在表名 //用户名字段名 //密码所在列 //设备号所在列

Password= 3 Imei= 4

Home= index.mas

Dir= D:\\mastudio\\sample

以上脚本所用表格定义如下所示范: CREATE TABLE [dbo].[Auth] (

[ID] [int] IDENTITY (1, 1) NOT NULL , [Username] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , [Password] [char] (10) COLLATE Chinese_PRC_CI_AS NULL , [Imei] [char] (100) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]

请参考Diskette\\Release\\Tools\\authentic,示范来编写对密码的加密程序,并以DLL形式拷贝到mastudio\\common目录下即可。系统检测到存在authentic.dll存在即会自动根据其中的加密算法对登陆密码进行加密,然后再和数据库进行比较认证。

mastudio document 2013-4-29 65/68

在Config.ini中增加如下内容,将切换系统到WEB登陆,判断登陆成功的依据是Result的内容匹配Lex获取到的结果。其中[User]和[Pwd]属于系统变量,将自动被替换成登陆输入的用户名和密码。 [Datasource] Database= HTTP Server= http://www.active-web.net/forum/login.asp Flow= &action=chk&username=[User]&password=[Pwd] Port= 80 Method= Post Preget= http://202.103.234.33/iOffice/login.aspx?ReturnUrl=%2fioffice%2fDefault.aspx Lex= [Login] Url= http://www.active-web.net/forum/index.asp Begin= Lex= 您的帐号(.+?)收件箱 End= Result= [User] Home= index.mas Dir= D:\\mastudio\\sample

本示范语句输入用户名test和密码44856213即可登陆成功。

65

mastudio document

三、Account.ini

2013-4-29 66/68

[mas]

Home=index.mas

Dir=D:\\mastudio\\sample

[mail]

Home=index.mas

Dir=D:\\mastudio\\sample

Pwd=mail123

设置登陆帐号和密码,以及宿主目录和首页面。

66

mastudio document 2013-4-29 67/68

十二、安全机制

1、 代码安全

程序代码文件.mas可以用编译器进行编译后发布使用,编译后的文件为.pkg文件对应于

每一个.mas文件。

编译器D:\\mastudio\\Common\\Compiler.exe,运行方式分为单文件编译后批量编译。

批量编译:

对于包含有数据连接的代码会提示警告,该警告只是告知此行代码的数据由于未执行数据库连接而处于未知状态。

2、 登陆安全

帐号文件中可增加属性IMEI=xxxxxxx-yy-nn 的形式来绑定该帐号必须用此IMEI号码的手机登陆。

在Common目录下增加License.txt文件,每个许可的手机IMEI为一行,表示只许可此文件下所列出的手机登陆系统。当手机遗失时删除对应的IMEI号码即可。

67

mastudio document 2013-4-29 68/68

十三、附录备注

备注: 安装Domino连接部分,需要在环境变量中增加路径如下,并且将lcppn30i.dll文件拷贝到Lotus\\notes目录中,切记不要放在Common目录下,否则会导致服务运行崩溃。

Path=D:\\Program Files\\Lotus\\notes;D:\\Program Files\\Lotus\\notes\\data

全文结束!

68

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务