提起上位机上的Delphi,在以前可能熟悉的人很多,虽然前几年随着Borland公司的倒闭,使用Delphi的人越来越少,但是这并不能掩盖她先进的VCL框架、全能选手的光芒。在Windows平台上,无论从Win95,还是到Win8.1,编译过一次的exe文件可以在无需安装任何运行时库的情况下直接运行,曾经也是病毒编写优先考虑的语言;而在各种管理系统的开发中,Delphi也是开发效率运、行效率极其优秀的语言。只是由于Borland公司过度捆绑Windows的策略,使其应用于其他平台的机会大大减少。她的姐妹,在x86的Linux上的Kilix也是昙花一现没有流行起来,在ARM上就更不用说了。 近期,被易博龙收购了的Delphi,在新的公司的带领下开始绝地反击,推出的Delphi XE系列不仅可以开发Windows 32位、64位的原生程序,同时也可以在不更改代码的情况下直接编译为Android和iOS的程序,大大扩展了应用场合。而且继续保持了快速开发、控件丰富等优点。试想一下可视开发,直接在窗体中拖过来几个按钮输入框什么的,就能在你的设备上运行起来,这样的开发简直是种享受。
说了这么多,该轮到主角现身了。不过别着急,这次的主角不是Delphi,而是非常类似于Delphi的但无任何血缘关系的兄弟:free pascal。都是基于pascal语言,但是这个兄弟更加神通广大,无论是x86的Windows、Linux、Android、MacOS等,还是ARM的WinCE、Linux、Android、iOS之类的,亦或是MIPS架构的操作系统,都可以成为他活跃的平台。和Delphi的相似度达到98%以上,并且秉承Delphi的优点,号称可以“一次编写,到处编译”。编写好的程序,采用自身不同的编译器,可以直接编译为对应系统的程序,极大地减少了系统间移植的工作量。
free pascal正如其名,他是免费的,无论是学习还是开发产品都在许可之内。free pascal是一种语言,他有自己的IDE环境:Lazarus。经过了很长一段时间的发展,修正了许许多多的bug之后,现在的版本是1.2x,比较稳定了,可以正式使用了。他的长相和Delphi 5很像,不管是新手还是老手都可以很快的使用起来。等不及了,还是快快请Lazarus展示一下吧。
忍不住还是要罗嗦几句,此次所提到的开发环境、编译环境、运行环境,都是在香蕉派上的ARM Lubuntu进行的,而环境的搭建没有任何高难度操作,没有花哨的技巧,一切只为了简单实用、快速开发。对于其他Linux的发行版亦是如此,其他的ARM设备同样操作。在香蕉派上编译出的可执行文件,可以直接拷贝到其他ARM板上运行(牵扯到的底层驱动除外),不需要携带一大堆的so或其他文件。
言归正传,开始安装Lazarus。只需要4条命令: 1.sudo apt-get update 2.sudo apt-get upgrade 3.sudo apt-get install fpc 4.sudo apt-get install lazarus 其实只要最后一条命令也是可以的,在安装lazarus时,fpc编译器在某些Linux版本中可以自动安装。不过为了保险起见,还是单独安装一下比较好。并且为了保证安装的是最新版本,最前面的两条命令也是执行一下为好。
安装过程就不再赘述了,没有需要手动更改的东西。程序比较大,大概2、300M的样子,网速和SD卡的速度很大程度上影响安装速度,但是我已很满足,至少比QT之类的要快速和容易很多。安装好后,在开始菜单中的编程子菜单中可以找到它,Lazarus,运行吧。
运行后,是这个样子地:
都是英文的,不怕,常用的操作没有几个。不过Lazarus还是很贴心地提供了中文语言,这个语言插件是由中国爱好者开发的,再次感谢他。中文语言可以在菜单“Tools”->“Options”->“Desktop”->“Language”中选择。
保存设置后,需要关闭Lazarus,再次运行后就变成中文了。
Lazarus运行后,默认创建一个带有窗体的工程,根据图中的编号,各个部分的功能简单介绍如下:
1.可视化的编辑窗体:这个窗体就是编译程序显示的窗体,所见即所得; 2.运行、断点调试部分:可直接运行当前的程序,并可以单步执行每一条语句。执行到断点时,将鼠标放在某一变量上会显示当前的运行值; 3.组件工具栏部分:选择需要的组件,可以放置在编辑窗体上合适的位置,双击后可以直接跳转到对应的代码行,自行添加功能代码; 4.对象观察器:显示编辑窗体上已放置的所有组件,由于覆盖而造成不能用鼠标点击的组件可以在这里选择; 5.属性和事件编辑部分:选择某个组件后,可以在这里设置一些属性值,改变其功能或样式,也可为其添加事件等(窗体也是组件); 6.代码编辑器:这个不用多说了,写代码的地方。用鼠标点击行号前的空白可以设置断点,再次点击取消断点; 7.消息窗体:编译时的一些信息在这里显示,包括警告、错误等;
大体功能介绍完毕,还是来看一下运行之后是什么样子的吧。如果直接点击运行调试部分的绿色三角运行起来,那实在是太没意思了,还是来点实用的功能吧:点击关闭按钮,弹出对话框,让用户选择是否退出程序。
首先,在组件工具栏中选择"Button",并放置在窗体中;在属性中找到"Caption",并更改值为"Quit"回车,这个是在按钮上显示的文字;
然后,双击窗体中的这个"Button",自动跳转到代码编辑器中的"Button_Click"事件代码中,在其中编写代码 Close;
不区分大小写;
最后,选择窗体,再在事件属性和事件编辑部分选择事件标签,找到"OnCloseQuery",双击跳转到代码后,编写代码 CanClose:= Application.MessageBox('Are you sure?', 'Title', MB_OKCANCEL) = IDOK; 别忘了在代码编辑器最上边的代码uses后面加入一个常量定义的单元LCLType;如果不加这个单元,就要把MB_OKCANCEL和IDOK都改为1,否则会在编译时提示找不到定义。
开始运行,点击绿色的三角,第一次运行时间有些长,尤其是带有窗体的程序。从第二次之后就快很多了。运行之后,点击Quit按钮,弹出对话框
选择“OK”,退出程序;选择“Cancel”,返回到窗体。
运行原理:当点击"Quit"按钮时执行关闭代码,正常情况下应该直接关闭窗体退出程序。但是由于添加了"OnCloseQuery"事件,也就是在关闭窗体前触发的事件,并在其中添加了对话框来让用户选择是否退出,根据用户选择的结果来判断下一步需要执行的动作。如果用户取消了操作,则不再执行关闭窗体的动作了。
现在你已经编写了一个可以在Windows95~8.1、Linux、MacOS、WinCE、ARM Linux、Android上运行的程序代码,只要到相应的平台下编译就OK了。至此对Lazarus有了感性的认识,操作起来是否比较方便?如果有兴趣,请看下一节,讲述pascal代码单元的结构及常用调试方法。 如果想下载ClassA20的封装类库文件,请访问:https://github.com/tjCFeng/ClassA20。
|