国产深度操作系统Deepin平台+Lazarus实现Linux环境下的APP开发备忘
1,Deepin 操作系统的安装:
上图为安装好的 Deepin 操作系统,还是非常美观的,关键是菜单及 UI 操作很简洁、顺手。
2,在 Deepin 中安装最新版本的 Lazarus。
2.1,安装方法:在官网下载 lazarus 的 3 个 deb 包,复制到 Deepin 中,逐个双击安装即可。
安装后界面如下图,俨然 Delphi 7 的风格吧:)
2.2,但若用习惯了 Delphi XE 之后的一体式 IDE,可以将上面分散的各 IDE 模块通过下面的方法融合起来,效果如下图:
具体是如何实现的呢?
在 Deepin 操作系统中,进入 [/usr/share/lazarus/2.0.6/components/anchordocking/design] 这个目录,用 Lazarus 打开里面的 anchordockingdsgn.lpk 这个文件,如下图:
注意,有的组件安装后 lazarus 会弹出类似“该组件为静态,需要重新编译 Lazarus 方可生效”这样的提示,此时就 Build 一下 lazarus 即可,Build 成功后,会自动关闭重启。
2.3,如何手动编译 Lazarus?请看下图所示:
如上图,Build 会自动开始直到重新自动启动。
2.4,解决 Lazarus 的一个重大 BUG!
当你切身使用 lazarus 后,会发现在代码编辑区,是无法切换到中文输入法的,无法正常用键盘输入中文,但可以别的地方(比如记事本)复制一串中文粘贴进去,而且 lazarus 的各种文本控件是可以正常接受中文输入的,唯独在代码编辑区有 bug,网上搜索一番后发现这个 bug 是从原始时代就存在的,lazarus 的代码编辑器是用的 synEdit 组件,开发者老外不用输入法,所以这个问题是专门留给我们东方人的 -_-!
2.4.1,那么问题来了,如何解决呢?参照网上网友 (感谢 http://blog.sina.com.cn/s/blog_b36b1ed90101fceg.html) 们的多种方式,现综合起来研究出一个相对简洁的办法:在代码编辑时,若到了需要输入中文字符串的地方,按 Ctrl+ 回车键,此时代码框上方会弹出一个 InputBox,输入相应中文内容后,直接回车或点击 OK 键,内容就会自动插入到代码中,下面是按下 Ctrl+Enter 后的效果图及点击 OK 后的效果图,可以看到,中文已经比较方便的插入到合适的位置:
(细心的网友可能也已发现上图中插入的中文与字母代码不是等高的,看着很怪异,这是由字体不合适造成的,后面第 3.4 章节专门提供了解决办法)
2.4.2,具体是如何实现上面的效果的呢?参见以下方法及代码:
(1)用 Lazarus 打开/usr/share/lazarus/2.0.6/ide/sourceeditor.pp
(2)在源码里面查找InsertCVSKeyword,会先找到这么一行:
procedure InsertCVSKeyword(const AKeyWord: string);
在这一行下面加上一行:
F3 继续找其实现,找到以下代码:
begin
if ReadOnly then Exit;
FEditor.InsertTextAtCaret('$'+AKeyWord+'$'+LineEnding);
end;
复制它们,在下面粘贴,并改成:
procedure TSourceEditor.InsertKeyword(const AKeyWord: string);
if ReadOnly then Exit;
FEditor.InsertTextAtCaret(AKeyWord);
end;
这样,就给 TSourceEditor 增加了一个叫“InsertKeyword”的过程,作用是可以通过编程语句在光标所在位置添加指定字符串。
下面,要实现的就是 Ctrl+Enter 的功能,我们要在代码编辑器窗口的 OnKeyDown 事件中下手:
procedure TSourceNotebook . FormKeyDown(Sender: TObject; var Key: Word ; Shift: TShiftState); var _sInS: string ; begin if (ssCtrl in Shift) and (Key = 13 ) then begin Key := 0 ; _sInS := Trim(InputBox( '插入文本' , '' , '' )); if _sInS<> '' then begin GetActiveSE . InsertKeyword(_sIns); FocusEditor; end ; end ; end ; |
注:我在改的时候遇到的问题是 SourceEditor.pp 无法保存,提示说文件是只读属性,这个简单,把/usr/share/lazarus/2.0.6/ide/sourceeditor.pp 鼠标右键,权限里把 [只读] 改成 [读写] 就能保存了。
改好代码保存就 OK 了,最后参照第 2.3 步,将 lazarus 重新编译一下,即可体验比较方便的中文输入方法了。
3,lazarus 开发中遇到的坑及填坑方法
3.1,lazarus 中使用 uniDAC 或 zeosdbo 等数据库组件时,代码中的 SQL 语句必须要注意大小写,比如我用的 MySQL 中的表名全是小写,那查询的 SQL 也必须为小写,否则会提示“未发现表名”。
3.2,默认配置下编译一个只有 ShowMessge 的程序,积极可达 20M,可按下图配置后将体积减小到 4M。但切记,一旦取消勾选下面两项,则会造成无法断点调试,所以在需要调试时就要勾上:
3.3,在 Lazarus 中使用 uniDAC 组件连接 MySQL 数据库时,设计期连接成功,但一旦编译后运行就提示连接 MySQL 服务器失败,具体原因未知,但按网络上的解决办法是如下图,对项目添加一个自定义的设置参数:-dUseCThreads,如此这般,便“能开启线程”,问题得到解决。
3.4,字体原因导致英文代码与中文不等高的问题,现象如下:
解决办法是在 IDE Options 的 Editor-Display 中更换 Default editor font 字体,经测,换成 [Noto Sans Mono CJK SC] 这个字体后效果不错:
3.5,等发现了再来补充吧:)