首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> Symbian入门 >> 正文
OPL 速成教程(二)
作者:姜 译    文章来源:http://www.allaboutsymbian.com/features/item/Part_2_Understanding_the_Event_Core.php    更新时间:2006-11-11 9:24:53

此文为开发视界翻译转载者请注明出处(开发视界 www.sf.org.cn)否则追究法律责任
第二部分:事件处理核心
在这部分,介绍FreEPOC的事件处理核心,讨论OPL框架工作的原理,学习更多关于程序的知识(比如:如何向程序传递值),检测键盘输入和按钮系统。最后,我们将看一个已经可以安全运行的程序。
获得EVENT Core
我们使用的EVENT Core是FreEPOC提供的,可以从他们的网站下载:www.freepoc.org/core.htm。你可以把它下载下来,这样我们就可以看到OPL的代码,在这里讨论。OPL的安装指导也在这里:http://www.allaboutsymbian.com/develop/opl/oplsdk.php
建立模块:我们再编写一段程序
上一节里面,我们掌握了如何编写一个程序。在我们开始学习EVENT Core之前,我想告诉大家如何更快的编写一个程序,请大家看下面的代码:
PROC addition:(one%,two%)
   LOCAL foo%
   foo%=one%+two%
   RETURN foo%
ENDP
这是一个非常简单的程序,但是这段程序告诉了我们两条原则。你可以看到,我们可以在这段程序中应用更多更复杂的程序。
向程序传递变量:局部常量
在我们定义一个程序的时候,我们再程序名称后面加了两个带括号的整数,当调用该程序的时候,我们需要向这两个整数赋值:
addition:(200,100)
或者...
addition:(number%,300)
我们不需要像定义变量那样定义one%和two%,因为他们不是变量,他们是只存在于这个程序中的一个常量。我们可以把他们看成是局部常量。当我们退出该程序的时候,他们的值就不存在了,因此每调用该程序的时候,我们就需要向这两个量赋值(因此,他们的值是可以变动的)。
返回值
这个方法非常的实用。不需要调用子程序,只需要以下一行代码:
gnu%=addition:(100,200)
我们就可以把addition:的值返回到gnu。当程序运行的时候,如果遇到returen语句,程序马上停止执行以下的代码,而是立即反回,就好像遇到了EDNP语句一样。
如果你不使用RETURN语句,当程序遇到ENDP的时候,ENDP函数也会使程序返回,但是返回值是 0。
详细介绍
在OPL 速成教程(一)中,我们说程序就像是一门语言。我坚持这个比喻,而且我还要说,程序就像是一段故事。故事时有文字组成的。通常比较好的虚构故事都有三个部分:开始,中间部分,结尾。
OPL程序的开始,会搜集处理器的个人信息和用户正在使用的优先的信息。然后建立程序所需要的图表,最后绘制整个屏幕,为中间的程序做好准备。
中间部分是程序功能实现的部分。在这段程序中不停的执行一些循环语句,反复判断键盘输入和电脑信息,处理键盘输入信息,检测处理结果,终而复始,直到程序结束。
程序结束的时候清除无用的信息,将有用的信息保存,然后退出系统。
因此,在编成的时候要遵守上述的原则。
比如下面的这段代码:
PROC main:
   GLOBAL exit%
   initialise:
   exit%=0
   DO
      main_loop:
   UNTIL exit%=1
   clean_up:
ENDP
请注意,我们是如何在main_loop:的任何一个地方使用一个变量,从而退出程序。这样,可以停止正在执行的代码,返回主程序,然后执行clean_up,确保所有有用的信息能够存储下来。
我们仔细看一下这段代码,这也是打开enent core OPL的一个方法(core.opl)。
开始
大部分的工作都是由EVENT Core的initialise:按照下面的顺序执行得。
文件在哪里?
首先,我们需要查明能否找到执行的app程序的支持文件。因为,任何一个app文件都有很多图表,这部分的目的就是要寻找.mbm图标文件。通过使用一个应用的名字,我们从C:
盘向D:盘开始搜索(最后是MMC Card),如果找到了,我们我们会把位置存在path$和data$。Path$存储了.mbm文件所在的驱动器的名称,data$中存储了除了驱动器信息外的其他信息。(你马上就会知道这样存储的原因)。
这里边的判断部分使用了IF…ELSE…EDDIF…循环,我们在第一部分已经讲过,我们同样可以在这个语句中加入另外一个判断ELSEIF,这样,无论你需要判断多少语句都能满足要求。
私有保护-.ini 文件
下面了解一下私有保护。他们被存放在core.ini。在PROC中打开LoadINIFile,如果文件存在,我们就打开文件;如果文件不存在,就输入默认值,然后保存。
在这里,我们需要使用data$,因为.ini文件必须存放在本地硬盘。事实上,.ini文件就是一个小数据库,这些小数据库在打开的时候都被分配一个字母,每个文件都被赋予了一个暂时的标签。
OPEN "C:"+data$,A,label%
上面的代码表示,我们在C:盘上打开了应用文件.ini,我们把它看成数据库A,它所有的区域都被暂时指向为sound_vol%。
我们就可以用下面的代码行定义应用变量:
sound_vol%=A.sound_vol%
注意如何使用数据库字母和标签。在一个应用程序里面,变量的名字可以和标签的名字一样,而且我们建议这样,但是这不是必须的。
结束后关闭数据库。要养成这样的习惯,因为这样可以节省内存,确保你的程序能够运行的更快。
存储私有保护基本相似,但是首先确定C盘上存在这个地址。如果有以前的.ini文件,我们就把以前的删除,然后重新创建新的.ini文件,然后设置新的值。
当所有的值都设置完毕,要把所有的改变存储到数据库,这时候需要使用APPEND函数。它能够把这些信息加入到数据库的最后。如果这是一个新的数据库(我们已经删除了以前的),那么这个信息将会成为第一条记录,然后象以前一样关闭就可以了。
注意TRAP的使用。如果其他代码行出现错误信息,TRAP会隐瞒这些错误信息,因此即使我们想创建的地址不存在,程序也不会中止,而是继续运行。
设置屏幕尺寸和工具栏
当OPL程序启动的时候,它就会马上为自己创建一个全屏的空白的窗口。有些程序员可能使用这些窗口,有些把他们当成背景,还有一些会改变他们的形状然后再他们后后面隐藏其他的东西,他可以被用来做任何事情。下面是使用EVENT Core显示屏幕的方法:
gDEFAULTWIN x,y,width,height
(x,y)决定了窗口的左上角的坐标,width和height可以改变屏幕的大小。
屏幕的宽度是640像素。左边的任务栏,他们设置成开关都可以,尺寸是由样式决定的,设置成1的时候宽度是32像素,设置成0的时候就是标准的96像素宽。
AfSetStatus%:(AfStatusType%)
AfSetstatusVisible%:(AfStatusOn%)右边的CBA键即可以设置成永远可见,也可以设置成当CBA键被敲击的时候可见。宽度从80像素到130像素,取决于按钮的文本标签的长度。
AfSetCBAVisible%:(AfCVA%)
屏幕最上方的蓝色标题栏,它的长度,可见性可以用如下方法设置:
AfTitleVisible%:(AfTitleOn%)
你也可以用下面的命令来指定标题栏上显示的文本内容,通常我们使用这个位置来显示运行程序的名称。
AfSetTitle:("Title Here",KAfTitleTypeMainTitle%)
以上任务栏的所有的属性值将被EVEBT Core的.ini文件中。这个时候,你再编写代码的时候,就可以通过app确定屏幕的形式,而且他们是不可改变的。下面,我们要实现

[1] [2] 下一页

相关文章:
Symbian数据库
S60平台:Bluetooth API开发伙伴指南——搜索和发布
S60 Python 编程指南——程序菜单练习(1)
S60 Python 编程指南——如何创建pys60应用程序
OPL 速成教程(五)
安全共享数据及数据库加密
S60平台: 使用DBMS APIs —共享数据库
S60平台: 使用DBMS APIs —补充的数据库操作
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号