查看: 2925|回复: 3

【ClassA20类库分析】 1.ARM上的Delphi - Lazarus

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-11-5 09:42:52 | 显示全部楼层 |阅读模式
    分享到:
        提起上位机上的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,运行吧。

        运行后,是这个样子地:

    1.JPG

        都是英文的,不怕,常用的操作没有几个。不过Lazarus还是很贴心地提供了中文语言,这个语言插件是由中国爱好者开发的,再次感谢他。中文语言可以在菜单“Tools”->“Options”->“Desktop”->“Language”中选择。

    2.JPG

        保存设置后,需要关闭Lazarus,再次运行后就变成中文了。

    3.JPG

        Lazarus运行后,默认创建一个带有窗体的工程,根据图中的编号,各个部分的功能简单介绍如下:

    4.JPG
    1.可视化的编辑窗体:这个窗体就是编译程序显示的窗体,所见即所得;
    2.运行、断点调试部分:可直接运行当前的程序,并可以单步执行每一条语句。执行到断点时,将鼠标放在某一变量上会显示当前的运行值;
    3.组件工具栏部分:选择需要的组件,可以放置在编辑窗体上合适的位置,双击后可以直接跳转到对应的代码行,自行添加功能代码;
    4.对象观察器:显示编辑窗体上已放置的所有组件,由于覆盖而造成不能用鼠标点击的组件可以在这里选择;
    5.属性和事件编辑部分:选择某个组件后,可以在这里设置一些属性值,改变其功能或样式,也可为其添加事件等(窗体也是组件);
    6.代码编辑器:这个不用多说了,写代码的地方。用鼠标点击行号前的空白可以设置断点,再次点击取消断点;
    7.消息窗体:编译时的一些信息在这里显示,包括警告、错误等;

        大体功能介绍完毕,还是来看一下运行之后是什么样子的吧。如果直接点击运行调试部分的绿色三角运行起来,那实在是太没意思了,还是来点实用的功能吧:点击关闭按钮,弹出对话框,让用户选择是否退出程序。

        首先,在组件工具栏中选择"Button",并放置在窗体中;在属性中找到"Caption",并更改值为"Quit"回车,这个是在按钮上显示的文字;
    5.JPG

        然后,双击窗体中的这个"Button",自动跳转到代码编辑器中的"Button_Click"事件代码中,在其中编写代码
    Close;
    6.JPG
    不区分大小写;

        最后,选择窗体,再在事件属性和事件编辑部分选择事件标签,找到"OnCloseQuery",双击跳转到代码后,编写代码
    CanClose:= Application.MessageBox('Are you sure?', 'Title', MB_OKCANCEL) = IDOK;
    别忘了在代码编辑器最上边的代码uses后面加入一个常量定义的单元LCLType;如果不加这个单元,就要把MB_OKCANCEL和IDOK都改为1,否则会在编译时提示找不到定义。

    7.JPG
    8.JPG

        开始运行,点击绿色的三角,第一次运行时间有些长,尤其是带有窗体的程序。从第二次之后就快很多了。运行之后,点击Quit按钮,弹出对话框
    9.JPG
    选择“OK”,退出程序;选择“Cancel”,返回到窗体。

        运行原理:当点击"Quit"按钮时执行关闭代码,正常情况下应该直接关闭窗体退出程序。但是由于添加了"OnCloseQuery"事件,也就是在关闭窗体前触发的事件,并在其中添加了对话框来让用户选择是否退出,根据用户选择的结果来判断下一步需要执行的动作。如果用户取消了操作,则不再执行关闭窗体的动作了。

        现在你已经编写了一个可以在Windows95~8.1、Linux、MacOS、WinCE、ARM Linux、Android上运行的程序代码,只要到相应的平台下编译就OK了。至此对Lazarus有了感性的认识,操作起来是否比较方便?如果有兴趣,请看下一节,讲述pascal代码单元的结构及常用调试方法。
        如果想下载ClassA20的封装类库文件,请访问:https://github.com/tjCFeng/ClassA20。



    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-11-10 21:00
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-11-5 14:26:14 | 显示全部楼层
    一堆Delphi控件能跨平台兼容吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-11-5 14:29:14 | 显示全部楼层
    本帖最后由 tjcfeng 于 2014-11-5 14:31 编辑
    FishX 发表于 2014-11-5 14:26
    一堆Delphi控件能跨平台兼容吗?

    Delphi不只有控件,好多东西不是只能靠控件来实现的。
    另外能不能跨平台要看这个控件是怎样实现的,如果调用了某种平台的API来实现就不能跨平台了,除非作者发布了该平台的控件。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-11-5 15:02:28 | 显示全部楼层
    FishX 发表于 2014-11-5 14:26
    一堆Delphi控件能跨平台兼容吗?

    本身自带的这一堆控件都是可以跨任何平台的。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 20:45 , Processed in 0.167854 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.