ResForm脚本语言基础及应用初步_第1页
ResForm脚本语言基础及应用初步_第2页
ResForm脚本语言基础及应用初步_第3页
ResForm脚本语言基础及应用初步_第4页
ResForm脚本语言基础及应用初步_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、resform技术资料汇编resform脚本语言基础及其应用(一)西安海卓石油信息技术有限公司前 言resform脚本语言是由西安海卓石油信息技术有限公司研制开发,专门为该公司所发布的基于resform构架的地质工作室软件产品(以下简称geooffice)配置的编程语言。利用resform脚本语言,可以通过编程方式实现对geooffice软件产品常规功能的高度自动化操作,包括各种格式的地质成果图模板的自动生成、各种地质参数的获取和分析、geooffice软件产品与其他流行办公软件的交互操作等等。 resform脚本语言面向该公司geooffice软件产品的中高级用户,为他们提供了一个通过编程方

2、式实现对geooffice软件产品功能扩展的有效手段。 geooffice软件产品具有灵活实用、功能丰富、易于掌握的特点,更为重要的是该软件产品充分考虑了地质人员的工作习惯。实际上,该软件产品的作者本身就是石油地质方面的专家,所以研制开发出的产品符合地质人员的工作习惯是非常自然的。因为有了上述的特点,geooffice软件产品一经推出,就在全国各大油田的相关行业中产生了较大的影响。目前,该软件的用户群正在不断扩大,并由此带来了相关领域油田工作效率的明显提高。与此同时在这个用户群中还涌现出不少这样的用户,他们对计算机的了解比较深入,大都有过用某种计算机语言编程的经验,同时这些用户对于geooff

3、ice软件产品功能的掌握比一般用户更为全面和深入,因此在他们希望能够更多更好地掌握resform脚本语言,以解决地质研究工作中更多更繁杂的问题。鉴于这种情况,公司决定除了在geooffice软件产品的说明书中向用户提供有关resform脚本语言基础知识外,再面向geooffice软件产品的中高级用户提供一套更为详尽的resform脚本语言应用方面的教材。resform脚本语言可用应用的领域很多,从单井资料的处理分析、油藏剖面相关数据的计算、一直到geooffice软件产品针对的整个油田区块相关地质参数的提取,以这些参数的空间分布规律的研究等等,都可以是resform脚本语言的用武之地。本书主要

4、是关于resform脚本语言基础方面的介绍,以及resform脚本语言在单井数据资料的处理和分析方面的部分应用示例。有关更多应用方面的介绍将在后续发布的有关专辑中进行。书中列出的绝大部分实例来源于公司技术支持部门对于全国各油田用户所提问题的实际解决方案,因而这些实例的针对性和实用性是显而易见的。除此之外,其中有几个解决方案具有行业内通用的性质,关于这一点当您在仔细阅读每个示例时,当会有切身的体验。本书的内容分两部分,第一部分是resform脚本语言基础知识的介绍;第二部分是resform脚本语言在油田中应用的初步介绍。本书假定读者具有至少一种计算机编程语言的应用经验并且已经熟悉西安海卓石油信息

5、技术有限公司发布的geooffice软件产品的基本操作方法。在本书的编写过程中,得到了全国各油田新老用户的大力支持。其中特别要提到的是长庆油田的姜英昆、大庆油田的郑建东、大港油田的陈长伟、青海油田的谢丽、中石油总院廊坊分院的张凤敏、南阳油田的田云和华北油田的朱昌灵这几位专家,由于他们的悉心指导,使得参与该书写作的人员得以对油田的地质研究工作有了更加准确地了解,这使得该书在实用性上有了很大的改进。对此,西安海卓石油信息技术有限公司全体员工深表谢意!由于编者技术经历和专业水平所限,加之时间仓促,书中肯定有不少错漏之处,敬请各位专家和读者不吝指教。 西安海卓石油信息技术有限公司 2009年5月4日目

6、 录第一篇 resform脚本语言基础知识.4第一章 resform脚本语言入门.5第二章 resform用户界面编程. 18第二篇 resform脚本语言应用范例.86第一章 自动生成综合录井图模板.87第二章 地层泥质含量计算.95第三章 地层孔隙度计算.98第四章 地层渗透率计算.102第五章 地层含水饱和度计算.103第六章 地层岩性分析.108附录. .125第一篇 resform脚本语言基础这一部分介绍resform脚本语言的基础知识,通过这部分的介绍您将能够从了解resform脚本语言是什么开始,直到掌握利用resform脚本语言解决一些相对复杂的地质问题。这部分给出的所有样例代

7、码,都是经过认真地斟酌后选定的,具有很强的针对性,对于理解书中介绍的知识是很有帮助的,请仔细阅读。所有书中列出的样例代码都在geooffice软件产品中调试通过,您也可以将书中列出的代码录入您的geooffice软件产品的resform 脚本编辑器进行练习,这也对于加快学习的进度也是很有好处的。第一章 resform脚本语言入门我们的讨论从一个最简单的例子开始。就个人的体验来讲,通过几个恰当选择的例子来理解一门编程语言是一种非常有效的途径。当然,为了开始顺利地进入角色,您得做些必要的准备工作,第一要使geooffice软件本身运行起来。resform脚本置身于geooffice软件中,是个寄生

8、的家伙,没有geooffice软件的首先运行它自己什么也做不了。geooffice软件开始运行的初始界面(图 01)就象下面这个样子。现在,您该打开某个工作区,有时您可能还得做些配置服务器或数据准备等等诸如此类的工作。有关这一部分操作的详细介绍,请参考随每个geooffice产品发布的相关说明书。因为我们现在主要关注的是resform脚本语言基础知识。而在后面的示例中主要是针对单井数据处理方面的,所以在上面的准备工作做完之后,您得打开您想要用resform脚本语言进行处理的某口井的测井或录井的成果图。至于resform脚本语言在geooffice软件其它类别的项目,如剖面图对象或某种类型平面图

9、对象上的数据处理,其做法是大致相同的。有关这些方面的详细讨论将在以后其他的相关资料中介绍。(图 01)准备工作进行到现阶段应该在屏幕上可以见到类似下面这样的画面了(图 02)。请注意,在打开一个单井成果图文件后,工具栏会出现“编辑/执行宏”这样一个命令按钮。现在好了吗?如果没有问题了,我们就继续往下进行。编辑/执行宏(图 02)现在单击“编辑/执行宏”按钮,类似(图03)这个样子的界面显示出来,我们所有的 resform脚本的编码、调试和运行都将在这里完成。中间那块黑色的区域就是我们可以编辑代码的地方。后面我们就叫它resform脚本语言编辑区吧,名不正则言不顺,为了叙述起来方便,总得有个头衔

10、才好。执行(图03)现在开始我们的第一个resform 脚本程序,请将下面用两条虚线围起来的所有内容,敲入代码编辑区,点击上面的(图03)中标出的“执行”命令按钮,感觉怎样? /-/我们的第一个resform脚本程序void main()/-当然感觉不是很好是吗?这个程序啥也没做,您应该是没有什么感觉的。但这确实是一个完整的resform脚本程序,可以正确地通过编译和并可以正确地运行。而且,这个程序包含了几个重要的概念,这些概念对于我们从总体上掌握resform脚本语言是很有帮助的。现在我们就来逐行地看一下上面的程序。第一行,是两个注释行,resform脚本语言规定用“/”标记一个注释行的开始

11、,程序在执行时,注释行被忽略,我们经常用注释行来对程序做一些注解,如说明程序的主要功能是什么,采用了哪些什么关键的算法,有些什么需要特别注意的问题等等,总之,注释行里你可以写上任何你想写的东西,而且,一个注释行可放在程序的任何地方,只要觉得有道理。第二行是resform 脚本程序的入口点,是脚本真正开始做事的地方,也称主函数头。第三和第四行这个“”和“”符号对标记的是一个称作函数体的东西,通常我们所写的我们用resform脚本语言写的所有语句就放在这个函数体里。实际上,刚才所叙述的差不多就是整个resform脚本程序的样子了,任何一个resform语言的脚本程序由main()主函数开始,后面紧

12、跟一对花括号,所有可执行的语句都放在这对花括号界定的函数体里面。利用这个结构差不多可以解决我们遇到的绝大多数的问题了。任何别的更加复杂的问题无非也就是对这样一个结构的不断扩充而已。/-void main()/干点什么事/-resform脚本语言编程差不多就是这样了,如果记住了,就可以大胆地往前走了。 当然,这摆活了半天啥也没见着,确实有点说不过去。下面就举个例子,干点什么事,至于怎么把这段代码写到resform代码编辑区,怎样运行这段代码就不用再说了吧。/第二个例子,介绍一个常用行数messagebox(.)/-void main()messagebox.show(hello, world !

13、);/-运行程序,现在,可以看见点东西了,是否多少有点成就感了呢?当然,如果您想说的其实是这个老掉牙的例子,使您一下子想起了万恶的旧社会的话,就保持沉默好了,“做人要厚道”。(图04)这段小程序的真正的目的是想向您介绍一个在resform脚本程序中使用频率极高的messagebox函数的,这在以后您也会会经常要用到。比如说,我们在调试一个程序时,会经常想知道,这个程序现在运行到什么地方了?这对于我们在调试一个代码较长又相对费时的程序来说,尤其是这样。做到这一点很容易,在您想停下来观察的位置插入一个messagebox.show() 函数就好。在上面给出的是messagebox.show() 函

14、数最简单的用法。messagebox.show()函数有好几个不同的变体,以用于不同的场合,我不知道您将怎样使用它,所以下面我根据自己的经验选择几个可能对会更加常用的做个介绍,也好容您有个选择余地。常用messagebox.show()函数的几中不同形式:1. dialogresult messagebox.show( string text );功能 显示具有指定文本的消息框。这种形式最简单,也是前面我们用过的。参数说明text: 要在消息框中显示的文本, 类型 string。 返回值:: dialogresult 值之一,类型:dialogresult。默认情况下,消息框显示一个“确定”按

15、钮。2. dialogresult messagebox.show(string text, string caption);功能 显示具有指定文本和标题的消息框。参数说明text: 要在消息框中显示的文本, 类型 string。 caption 要在消息框的标题栏中显示的文本,类型:string返回值:: dialogresult 值之一,类型:dialogresult。默认情况下,消息框显示一个“确定”按钮。3. dialogresult messagebox.show( string text, string caption, messageboxbuttons buttons);功能显

16、示具有指定文本、标题和按钮的消息框。参数说明text: 要在消息框中显示的文本, 类型 string。 caption 要在消息框的标题栏中显示的文本,类型:stringbuttons messageboxbuttons 值之一,可指定在消息框中显示哪些按钮, 类型:messageboxbuttons返回值:: dialogresult 值之一,类型:dialogresult。dialogresult、messageboxbuttons和 string 数据类型:dialogresult 是一个枚举,其实就是resform内部定义好的一些整数,对外是用字符表示的,这便于阅读和记忆,resfor

17、m用这些整数标识在对话框的操作中,用户动了对话框的哪个按钮或别的什么东西,然后根据用户的操作返回一个相应的值。至于这些整数等于3或是7就不管了吧,有道是多一事不如少一事,知道怎么用就好。下面就具体给出dialogresult可能的取值:none 从对话框返回了 dialogresult.nothing。这表明有模式对话框继续运行。ok 对话框的返回值是 dialogresult.ok(通常从标签为“确定”的按钮发送, 即指示用户按下了“确定”按钮。cancel 对话框的返回值是 dialogresult.cancel(通常从标签为“取消”的按钮发送, 即指示用户按下了“取消”按钮)。abort

18、 对话框的返回值是 abort(通常从标签为“中止”的按钮发送)。retry 对话框的返回值是 retry(通常从标签为“重试”的按钮发送)。ignore 对话框的返回值是 ignore(通常从标签为“忽略”的按钮发送)。yes 对话框的返回值是 yes(通常从标签为“是”的按钮发送)。no 对话框的返回值是 no(通常从标签为“否”的按钮发送)。messageboxbuttons是一个枚举,其实就是resform内部定义好的一些整数,用以定义 messagebox 上将显示哪些按钮。ok消息框包含“确定”按钮。okcancel消息框包含“确定”和“取消”按钮。abortretryignore

19、消息框包含“中止”、“重试”和“忽略”按钮。yesnocancel消息框包含“是”、“否”和“取消”按钮。yesno消息框包含“是”和“否”按钮。retrycancel 消息框包含“重试”和“取消”按钮。string resform脚本语言中的关键字之一,表示数据类型。string数据类型表示零个或更多unicode字符组成的序列。为了后面的讨论更加方便,下面介绍在使用resform脚本语言编写程序时,将会频繁使用的几个最基本的数据类型和在我们讨论有关单井数据处理分析时将用的几个关键函数。要说明的是,这里列出的数据类型是不全面的,主要是为了满足我们在本书所讨论问题的需要。有关resform脚本

20、语言中数据类型的全面介绍请参考相关的其他资料。其实,如果您掌握了本书介绍的这几个基本数据类型的相关知识,那么对与其它数据类型的用法也就掌握了。整型 int 关键字表示一种有符号 32 位整型数。可表示-2,147,483,648 到 2,147,483,647范围内的任意整数。可以声明并初始化 int 类型的变量,例如:int i = 123;浮点型 float 关键字表示32 位浮点类型数。可表示 1.510-45 到 3.41038范围内的任意实数。有7位精度。可以声明并初始化 float类型的变量,例如:float x = 3.5;双精度型 double 关键字表示 64 位浮点型数。可

21、表示 5.010-324 到 1.710308范围内的任意实数。有15 到 16 位精度。可以声明并初始化double类型的变量,例如:double y = 4.9;object 类型,把它理解成是一个杂货铺子好了,您可以往里放任何东西,但您必须得记得怎么把它取出来。关于这个类型的具体用法您现在可以先不去管它,等到后面在我们具体用到时您看一下一个具体事例然后如法炮制就好。上面列出的是通用数据类型,下面列出resform脚本语言特有的部分数据类型。图列类型 swellcolumn 关键字表示resform脚本中的列类型数据对象。一个列对象可以存放一条或多条数据道也可以放一个channels,这跟

22、后面将提到的channels有点像,但swellcolumn 可直接提供对swelltrace布局的控制。通用图道类型 swelltrace关键字表示resform脚本中的通用道类型数据对象。这是一个通用列类型,即该类型的变量可以存放任意数据到对象,如曲线道、岩性道或文本道等等。曲线道类型 scurvetrace关键字表示resform脚本中的曲线道数据对象。曲线道专用于表示具有等间隔采样特征的一类数据序列。这类数据中,典型的如常规的电测曲线。离散道类型 sdiscretetrace 关键字表示resform脚本中的离散道数据对象。离散数据道专用于具有非等间隔采样特征的一类数据序列。这类数据中

23、,比较典型的如岩样的孔隙度、渗透率和流体饱和度的分析化验数据。文本道类型 stexttrace关键字表示resform脚本中的文本道数据对象。文本道可用于像岩性描述等类似的场合。岩性道类型 slithotrace关键字表示resform脚本中的岩性道数据对象。符号道类型 ssymbol 关键字表示resform脚本中的符号道数据对象。符号道可用于表达油气显示或在某个层位地层中见到的特定地层构造,如某种层理,某种生物遗迹等等。地层单元道类型sstratiunittrace关键字表示resform脚本中的地层单元道数据对象。砂层组道类型 ssandset 关键字表示resform脚本中的砂层组道数

24、据对象。砂层道类型 ssandtrace关键字表示resform脚本中的砂层道数据对象。下面的部分是有关单井成果图操作的几个重要概念和核心函数。这里介绍的内容对于满足我们掌握resform脚本语言的目的而言,应该是够用的。this关键字 当我们正在操作某个单井成果图时,这个单井成果图时就是this.以下函数获取当前成果图上所有的数据道this.channels.gettraces();以下函数获取当前成果图上所有的曲线数据道数据道this.channels.getcurvetraces();以下函数获取当前成果图上所有的离散数据道this.channels.getdiscretetraces(

25、);以下函数获取当前成果图上所有的岩性数据道this.channels.getlithotraces();以下函数获取当前成果图上所有的地层单元数据道this.channels.getstratiunittraces();以下函数获取当前成果图上所有的砂层组数据道this.channels.getsandsettraces();以下函数获取当前成果图上所有的砂层数据道this.channels.getsandtraces();以下函数获取当前成果图上所有的油层组数据道this.channels.getreservoirgrouptraces();以下函数获取当前成果图上所有的产出剖面数据道th

26、is.channels.getproducingzonetraces();以下函数获取当前成果图上所有的符号数据道this.channels.getsymboltraces();以下函数获取当前成果图上所有的试油数据道this.channels.gettestoiltraces();以下函数获取当前成果图上所有的射孔数据道this.channels.getperforationtraces();以下函数获取当前成果图上所有的曲线数据道数据道this.channels.getcoringtraces();以下函数在当前成果图上建立一个新列swellcolumn this.channels.add

27、column(string title);其中,title 是列标题以下函数在当前成果图上建立一个新道swelltrace this.channels.addtrace(welltracetypes type, string name);其中,type 是道类型。name 是道名称。那么,channels是什么?一个忠告:最好不要招惹他,随便他是什么,我们只要按上面所述可以在当前成果图上建立一个新列或新数据道就好。如果一定要说点什么,您就把一个channels看成是成果图上按某种规格组合起来的数据道的集合好了。整个单井成果图包含一个channels,这个channels含有成果图上所有的数据道

28、。一个channels也可包含若干swellcolumn。上面也说过一个swellcolumn也可以包括一个channels。数据道则是像自然伽马测井曲线或岩性道等等这样的单个数据道对象。晕了吧,那就别想了。看看这些东西实际是怎么起作用的,就一切都明白了。现在就来举几个使用上述函数的示例。希望通过这几个示例,您可以熟练掌握上述函数的用法。以下代码生成一条曲线道,接名称为”ac”,并设置其左右值分别为150和600/-void main()scurvetrace newtrace = this.channels.addtrace(welltracetypes.curve, ac);newtrac

29、e.left = 150;newtrace.right = 600;/-以下代码在当前成果图上生成一个列对象,然后在该列中创建两个曲线道,并设置它们的左右值/-void main()swellcolumn newcolumn = this.channels.addcolumn(newcolumn);newcolumn.horzarrange = false;scurvetrace newtrace1 = newcolumn.channels.addtrace(welltracetypes.curve, newtrace1);newtrace1.left = 150;newtrace1.righ

30、t = 600;scurvetrace newtrace2 = newcolumn.channels.addtrace(welltracetypes.curve, newtrace2);newtrace2.left = 0;newtrace2.right = 100;/-以下代码是一个利用当前成果图上的自然伽马测井曲线计算泥质含量的简单例子,其中引入了几个新的概念,请注意代码中的注释。其中,this.cursor是尤其需要特别重视的一个新概念,后面会反复用到。其实,this.cursor表示的就是成果图上的当前深度,有点像数据库中游标的概念。/-void main()scurvetrace v

31、 = this.channels.addtrace(welltracetypes.curve, vsh);v.left = 0;v.right = 100.0;/设置曲线颜色为红色v.curvecolor = color.fromargb(255, 0, 0);/设置曲线宽度为3像素v.curvewdith = 3;/设置曲线线型为3实线v.curvestyle = pendashstyle.solid;/设置曲线填充方式为左充填v.fillmode = filllogcurvemode.left;/设置曲线填充图案的前景色为暗红色,背景色为桔红色,填充图案则为水平/短划线v.fillbrus

32、h = new xbrush(colorref.darkred, colorref.orange, hatchstyle.dashedhorizontal);float d1, d2, m1, m2;d1 = 500; /开始深度d2 = 3400; /结束深度m1 = this.gr.left; /gr 最大值m2 = this.gr.right; /gr 最小值float c = 3.7; /地区经验系数for(this.cursor = d1; this.cursor d2; this.cursor += 0.125) float val = (this.gr.value-m2)/(m1

33、-m2);v.value = 100 * (0.83 * val * val + 1.7 * val);/-这是一个某油田利用自己本地区经验公式计算孔隙度的例子。这个油田的xx井岩心分析孔隙度与补偿密度测井曲线相关性比较好,相关系数达 r=0.8315, 可用下面的关系式计算:por = -63.1726 *den + 171.04,用此关系式计算孔隙度。/-void main()scurvetrace newtrace = this.channels.addtrace(welltracetypes.curve, por_den);newtrace.left = 0;newtrace.righ

34、t = 100;newtrace.curvecolor = color.fromargb(0, 127, 127);newtrace.curvewidth = 5;newtrace.curvestyle = pendashstyle.solid;newtrace.fillmode = filllogcurvemode.left;newtrace.fillbrush = new xbrush(color.darkred, color.brown, hatchstyle.dashedhorizontal);for(this.cursor = 500; this.cursor 3000; this.

35、cursor += 0.125)newtrace.value = -63.1726 * this.den.value + 171.04;/-再举一个计算饱和度的简单例子,来结束这一部分的讨论。运行这个程序需要成果图上已存在名为“por_den”的孔隙度曲线道,如果现在还没有,您可以先运行前面那个程序得到它。此处饱和度的计算使用了阿尔奇公式so = 1- (a*b*rw)/(rt * porm)n其中,so地层含水饱和度;rw 地层水电阻率,rt 地层真电阻率;por 地层孔隙度;a = 0.8, b = 1.1467;m = 1.8701, n = 2.1025;/-void main()sc

36、urvetrace v = this.channels.addtrace(welltracetypes.curve,so_auto);v.left = 0;v.right = 100;v.curvecolor = color.fromargb(255, 0, 0);v.curvewith = 3;v.curvestyle = pendashstyle.solid;float a,b,m,n;a = 0.8, b = 1.1467;m = 1.8701, n = 2.1025;float rw,v1,v2;rw = 0.038;for( this.cursor = 500; this.curso

37、r 0) v1 = a * b * rw;v2 = this.rild.value * math.pow(this.por_den.value * 0.01, m);v.value = 100 * (1 - math.pow(v1/v2, 1/n);/-上面这几个例子都非常简单,主要目的是想提供一个大致的框架。在实际使用时您可根据实际要求修改那些代码,以满足您的需要。第二章 resform用户界面编程前面是对resform脚本语言的一个入门性的介绍,下面讨论resform脚本语言的用户界面编程部分。对于一个实用的resform脚本程序来说,建立一个实际可以使用并且用户友好的对话框是非常重要的。

38、实际上这一部分经常是最为费时和令人劳神的地方,在一些极端情况下,设计一个好用的对话框,有可能占到整个程序设计的百分之九十的代码量。这部分可否省掉呢,大部分情况下不行,尤其当您打算利用resform脚本语言开发一个想在多个地方都可以使用,而且还希望除了您自己之外,其他人甚至包括并不懂resform脚本语言的人也可以使用的一个resform脚本程序时,更是如此。这个道理非常明显,我们将使用resform脚本语言来解决的问题,往往需要用户进行干预,需要能够根据具体用户的实际需要行事,不同的用户往往有不同的需求,既是对同一个用户也有在不同时间和地点提出不同要求的时候,所以您就必须得给用户选择的便利。否

39、则,您写的程序就不会有很好的适应性,那直接的结果就是,这样的程序注定没有多长的寿命。当然是有一个办法解决这个问题,那就是由于resform脚本语言写的程序都以源码形式存在,由用户根据实际情况修改源码好了,这听起来是很有道理的,而且在特定情况下对于特定的人群来讲这也是不错的个办法,但如果您照着这个思路来开发resform脚本程序的话,这就很成问题,除非您写的程序就您一个人用,那么您怎么写,确实倒也无关紧要,解决当前的问题就好。在有些时候,可能就是为了解决当下的个别问题,而这类问题今后也许再也见不着了,那您就根本用不着花费太多精力来考虑界面设计问题。如果不是这种情况,花些时间考虑如何创建一个好用的

40、用户界面是有益的,有时设计一个好的用户界面往往就成了您写的程序成败与否的决定性因素。好在利用resform脚本语言创建一个优秀的用户界面倒也并不是多难的事, 首先,resform脚本语言提供的工具是足够您使用的, 其次,各种工具使用起来也非常灵活。但是您也确实需要花些时间来学习和了解。下面就来一步步地了解如何用resform 脚本语言来创建我们的用户界面的问题,也就是建立一个合用的对话框的问题。第一节 resform 脚本语言中的form控件在一个resform脚本程序中,我们设计的用户界面绝大多是用在必须由用户提供某些参数或做出某些选择的场合,在这种场合下如果没有提供这些参数或作出某些选择脚

41、本程序将不应该继续往前运行。因为这个时候,我们的脚本尚不清楚他的主人叫它做什么或如何做才好,所以只好等等再说。为满足这样的要求,我们用得着resform脚本语言中模态(modal)对话框或模态窗体的概念。一个模态对话框或模态窗体被设计成具有这样的行为,即你必须先关闭或隐藏一个打开的模态对话框或模态窗体,才能继续运行脚本程序的其他部分。利用resform脚本语言提供的form对象所具有的相关特性来实现这样一个模态窗体或对话框是轻而易举的事。下面,我们将举一个简单的例子来示范如何用我们的resform脚本语言里创建这样一个对话框或窗体。在这一章,我们将来认识一下在用resform脚本语言建立一个用

42、户界面时所必须用到的第一个角色。这个角色很基本,也很重要,因为我们在resform脚本语言中创建的所有用户界面将由此而生,也由此而灭。这个角色就是form,后面我们叫它为窗体,至于我们将讨论的一个个用户界面就叫对话框好了,这样更通俗些。form 是应用程序中所显示的任何窗口的表示形式,是构成一个对话框的所有其它零部件的容器,所有其它的零部件都寄宿于form,后面我们称这些零部件为控件。form有很多的属性,使用 form 中可用的属性,您可以确定所创建窗口或对话框的外观、大小、颜色和窗口管理功能。对我们来讲常用的属性有下面几个:text 您用这个属性在标题栏中指定窗口的标题。size 您用这个

43、属性定义窗口在显示时的大小。desktoplocation 您用这个属性定义窗口在显示时的大小和位置。forecolor 颜色属性 您用这个属性更改窗体上放置的所有控件的默认前景色。 formborderstyle、minimizebox 和 maximizebox 利用这几个属性允许您可以控制运行时窗体是否可以最小化、最大化或调整窗体大小。form有很多的方法,您可以使用它的方法来操作窗体。例如,对我们而言最重要莫过于showdialog 方法, resform脚本语言中就是使用 showdialog 方法来将对话框在屏幕上显示出来的。另外一个常用的方法是 setdesktoplocatio

44、n,可以使用setdesktoplocation方法在桌面上定位窗体。form 中还有事件的概念,事件允许您响应对窗体执行的操作。关于这一部分将在后面介绍button控件时再做介绍。下面具体创建一个 form 的实例,看看到底是什么样子。该示例设置了form 的text 、size 、 formborderstyle、minimizebox、maximizebox 和 startposition 属性。您可以自己试验一下,当给这些属性以不同值时,其效果是怎样的。/-void main()/建立一个form. form myfirstform = new form(); /设置form 的 te

45、xt myfirstform.text = 我的第一个窗体; /设置form 的 边框属性(formborderstyle). myfirstform.formborderstyle = formborderstyle.fixeddialog; /设置form 的 最大化控制框属性(maximizebox)./当最大化按钮属性值为假(false)时,窗体的标题栏中将不显示最大化控制框myfirstform.maximizebox = false; /设置form 的 最小化控制框属性(minimizebox)./当最小化按钮属性值为假(false)时,窗体的标题栏中将不显示最小化控制框myfi

46、rstform.minimizebox = false; /设置form 的初始位置属性(startposition).使窗体显示在屏幕中央myfirstform.startposition = formstartposition.centerscreen;/设置窗体大小myfirstform.size = new size(360,200); / 显示我们创建的窗体(对话框). myfirstform.showdialog();/-运行上面的脚本,创建出来的窗体是下面这个样子,感觉怎样?好象不是太有趣,别急这刚刚开始,从这出发,我们将会一步步创造出我们想要的功能丰富的用户界面。在接下来的讨论

47、中上面那段代码将被反复使用,请一定掌握。 (图05)第二节 button, label和text控件这一部分我们介绍在resform脚本语言界面编程中,三个最常用、也是最简单的控件。可不要小瞧这三个控件,实际上,有了这三个控件再加上前一章介绍的form,我们就可解决resform脚本语言界面编程中相当大量的问题,下面我们就来逐个认识它们。resform脚本语言中的button控件button 控件允许用户通过单击来执行操作。button 控件既可以显示文本,又可以显示图像。当该按钮被单击时,它看起来像是被按下,然后被释放。每当用户单击按钮时,即调用 click 事件处理程序。可将代码放入 click 事件处理程序来执行所选择的任意操作。按钮上显示的文本包含在 text 属性中。文本的外观受 font 属性和 textalign 属性控制。如果文本超出按钮宽度,则换到下一行。但是,如果控件无法容纳文本的总体高度,则将剪裁文本。text 属性可以包含访问键,允许用户通过同时按 alt 键和访问键来“单击”控件。button 控件还可以使用 image 和 imagelist 属性显示图像。有关这一部分就其作用而言只是可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论