國產深度操作系統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);

在這一行下面加上一行:

procedure InsertKeyword(const AKeyWord: string);

F3繼續找其實現,找到以下代碼:

procedure TSourceEditor.InsertCVSKeyword(const AKeyWord: string);
begin
  if ReadOnly then Exit;
  FEditor.InsertTextAtCaret('$'+AKeyWord+'$'+LineEnding);
end;

復制它們,在下面粘貼,並改成:
procedure TSourceEditor.InsertKeyword(const AKeyWord: string);

begin
  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,等發現了再來補充吧:)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM