follow my heart...
分类:
2007-07-11 13:56:17
摘要:
Gambas 是现在 Linux 下面可以使用的 Basic 之一。 在本文中我们要开发一个实例程序,来看看在日常工作中 Gambas 是多么的简单和强大。
Basic 是使用的最广泛的、最简单的编程语言之一,尤其是对于新手。 迄今为止,最常用的 Basic 开发环境是 Microsoft 的 Visual Basic 集成开发环境。 近来,Linux 的使用范围已经延伸到了桌面环境。从最初的仅限于服务器应用,使得人都是领导者,它正在变成一个客户端计算机的操作系统, 满足了类似阅读电子邮件、上网冲浪和文字编辑这样的需求。顺着这种发展趋势,出现了好几个 Basic 开发环境。 Gambas 就是我们要在本文中见到的一个,一个 Basic 的图形开发环境。就像我们马上要见到的,它的编程风格和 Visual Basic 非常相像, 但是它也有自己的。我要使用的版本是 0.64a,包括在 SuSE 9.0 发行版中。 就是我写这段文字的时候,我们可以在他的上看到最新的版本是0.81,不过这个不会影响到本文。
因为我已经做了一段时间的 Visual Basic 开发者, 所以我不需要什么更多的就可以直接着手这个例子。 此外,这是我一次接触 Gambas,这证明了任何曾经用过 Visual Basic 的人都能用它。 此外,它还是一个说明能简单的 Basic 在很多事情中非常有用的一个例子。
因为我喜欢边学边做,所以我们通过一个例子开始。 这个非常简单的应用程序是一个在屏幕上显示的有倒计时功能的秒表。我们可以随心所欲的调整时间、停止或者启动它。
在启动 Gambas 之后我们就能看见这个帮助::
选择新建工程。在下一个窗口我们会被问到工程名称。 我们的工程叫做CountDown。 在第二对话框里我们要选择工程目录。我们选择工作目录,并且在底部的文本框中。输入要创建的目录名。
如果这是第一次启动 Gambas 或者还没有禁用这个选项,就能看到每日技巧提示。阅读感兴趣的并且关闭这个窗口。我们已经在开发环境中准备开始工作了。 我们能在桌面上看见几个窗口。如果我们在 KDE 这样的有多桌面的环境里,我们也许会很有兴趣的把其中的一个给 Gambas 使用,这样可以统一控制所有窗口。 就个人而言,我在 KDE 中第一个激活的选项就是每个桌面仅仅显示自己的图标。
我们马上要创建程序的主窗体。在工程窗口的任何地方单击右键新建窗体。
在对话框中我们要指定窗体名称,在这个情况下是FCountDown, 其他的都保留默认值。
我们现在已经有了第一个窗体,不过现在还是空的。
现在我们要把秒表用刀的控件包含近来。点击工具栏上我们要在窗体中包含的元素。移动鼠标指针经过控件就可以看到控件的名称。双击控件就能把控件放置到窗体的左上角。 单击控件就能把控件放置到窗体上我们喜欢的地方并且改变大小。在我们的程序中我们需要一个标签、一个文本框、一个计时器、 两个按钮和一个切换按钮。
一旦所有的控件都放置好了,看起来就是这个样子(或多或少有一些不同, 每个人都可以按照他的喜好放置):
一旦我们把所有的控件都放置到了窗体里面,我们就可以把他们的名字改成有意义的。 要做到这一步,编辑属性表里面的名称。如果在屏幕上看不见属性表,可以通过工程窗口的属性按钮来激活。 要找到这个按钮我们可以在按钮上移动鼠标指针来定位我们要的这个按钮。
我把 Label1 控件命名为 lblContador: 点击这个控件然后就可以在属性表里面更改名称了。这一步,要编辑名称属性并且赋值为 lblContador。 然后把字体改得大一些。要完成这个,在它的字体属性里点击...标签,选择 Courier Bold 72 字体并且确认(OK)。 用同样的方法,我把 ToggleButton1 改名为 tglFuncionando。 TextBox1 控件变成了 txtSegundos, Timer1 控件变成了clkMiReloj, Button1 变成了cmdPonerSegundos, 最后我把 Button2 改名为 cmdSalir。 另外我还把 txtSegundos 的对齐属性改成了右对齐。
现在我们要开始着手写 Basic 代码了。它非常的简单而且语法也不是很严格。我们首先要做的就是把在窗体中见到的文本都改成实际的值。 尽管很多选项都在变化,我们也可以通过控件的属性表来更改,用这两种方法的任何一种都能得到相同的结果。
当窗口一打开,我们就填写所有我们希望的控件的标题。 当我们说当窗口一打开的时候,我们谈论的是对事件的管理:打开窗口的事件。这一步我们双击窗体里没有控件的地方。 打开了一个编辑窗口,光标定位在一个新的过程:Public Sub Form_Open() (如果以前在 Visual Basic 里面写过程序,我们也许会使用 Form_Load 事件)。 我们现在要让 lblContador 控件显示出倒计时还剩余的秒数。 窗体类的第一行程序看起来是这个样子的:
' Gambas class file CONST fSegundosPorDefecto AS Float=120.0 fSegundos AS Float PRIVATE SUB VerValores() DIM nMinutos AS Integer nMinutos = Int(Int(fSegundos) / 60) lblContador.Caption = nMinutos & ":" & Format (fSegundos - nMinutos * 60, "00.0") END PRIVATE SUB VerActivarDesactivar() IF tglFuncionando.Value THEN tglFuncionando.Text = ("&Detener") ELSE tglFuncionando.Text = ("&Arrancar") ENDIF END PUBLIC SUB Form_Open() fSegundos = fSegundosPorDefecto VerValores tglFuncionando.Value = FALSE VerActivarDesactivar txtSegundos.Text = fSegundos cmdPonerSegundos.Text = ("&Reiniciar") cmdSalir.Text = ("&Salir") END
我们已经在 Gambas 自动生成的注释,'Gambas class file,后面添加了一个用来保持秒表的默认秒数的常量,fSegundosPorDefecto, 它的值是 120 秒(两分钟),和一个 fSegundos 变量用来保持倒计时。 现在我们还创建了两个过程:VerValores,用来显示倒计时的值, 还有 VerActivarDesactivar,用来改变启动/停止按钮的文字。
现在我们已经有了一个能够工作的窗体。但是它现在还不能作任何有用的事情, 不过它让我们理解了我们所做的事情,所以这还是值得一试的。我们通过秒表工程的主窗口保存更改,然后用 F5 键启动程序, 或者通过同一个窗口的工具栏上的执行按钮。我们会看见:
如果这个没有出现或者得到了任何错误,我们就必须要回头看看我们刚才作的。 即使我们按启动、复位或退出按钮没有任何用途。这就是我们的下一个任务:把事件关联给按钮,当用户按按钮的时候,事件被触发了。 在继续之前,让我们一起来玩玩我们的程序,看看他都有什么。我们可以按右上角的 X 来关闭它。我在用 SuSE 的 KDE 环境, 就像你看见的,不过也许你要用另一种方式来关闭窗口。
让我们先拿按钮作一些最简单的工作:当用户按退出按钮的时候会发生什么?我们必须要关闭程序。要解释当用户按这个按钮的时候执行的 Basic 代码, 我们双击上面写有退出的按钮(cmbExit)。可以看见 Gambas 已经自动生成了一些代码,光标被放在中间。 这是我们必须要介绍的代码。这个过程会在用户点击按钮的时候执行。要关闭程序我们必须执行 Me.Close,所以这个事件的代码是:
PUBLIC SUB cmdSalir_Click()
ME.Close
END
下一个我们要控制的按钮是复位。用同样的方法: 双击按钮然后在 Gambas 显示出来的代码窗口里插入:
PUBLIC SUB cmdPonerSegundos_Click()
fSegundos = txtSegundos.Text
VerValores
END
好像现在还是没有发生任何事情。必须要给程序一些动作。 我们要从一开始就激活窗体里的定时器控件。要做到这一步,就必须设置接受时钟事件的间隔。要么在上一个 Form_Open 事件里放置代码,要么插入到窗体里。现在我们就用这个方法。 我们点击窗体里的定时器对象然后再它的属性表里面把 延迟值由 1000ms 改为 100,这样就可以每十分之一秒接收一次事件, 这也是我们的秒表的精度。
我们仍然没有在每次时钟激发的时候的执行的代码,以及激活的方法。 要生成时钟的代码,实在是太简单了,就像一直做得,双击它。这会把我们带到代码窗口的正确的地方。我们要按照这个样子插入代码:
PUBLIC SUB clkMiReloj_Timer() IF fSegundos < 0.1 THEN tglFuncionando.Value = FALSE tglFuncionando_Click ELSE fSegundos = fSegundos - 0.1 VerValores END IF END
最后我们要按照用户的意愿通过切换按钮来激活秒表, 这是我们一直都没有管到的。双击这个按钮然后插入代码:
PUBLIC SUB tglFuncionando_Click() clkMiReloj.Enabled = tglFuncionando.Value VerActivarDesactivar END
现在我们已经可以测试我们的工作了。
Gambas 的另一个特征就是对多语言的支持。如果你看过了代码, 你就会注意到字符串都是用大括号括起来的。这是用来通知 Gambas 来翻译这些字符串的。 窗体控件的文本不需要这些大括号。我们的项目已经非常有用了,人们就会要求用他们自己的语言显示。没有什么比这更简单了。 我们到工程窗口的工程/属性菜单。
在这里我们设置工程的标题并且激活允许翻译工程选项,这样我们就可以翻译对话框了。现在我们的菜单里多了一个新的选项:工程/翻译。 打开对话框,就可以看见翻译工作是非常的直观:
首先我们在上面的部分选择目标语言。当我们要翻一个字符串, 选择它并且填写下面的部分。等到所有的字符串都翻译好了,如果之前我们设置了 LANG 变量为我们要翻译的语言, 我们就以在终端里面调用程序测试了。如果我们想看看翻译成英语的结果, 关闭 Gambas,并且执行
$ LANG=en_US; gambas
要返回上一个状态,通过 KDE 菜单启动 Gambas,因为在这里没有定义环境变量, 环境变量仅仅在他自己的控制台里生存。
尽管它仅仅是一个解释型语言,而且我们必须全部安装,但是它是开始开发 Linux 桌面应用程序的一个好的起点,就像我们已经见到的,它非常的简单, 开发起来也很快速。它对于很多日常工作已经足够了。
除去文件/打开事例菜单里面的例子,在线帮助也非常的详尽。 我们还可以去, 在友情链接一栏里,有很多有趣的 Basic 工程。 这仅仅是一个项目的开始,但是我已经预言到了它的美好的未来。