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