0.前言
在Lazarus中使用Delphi編寫的檔案是一件很簡單的事情,這是因為Lazarus可以直接開啟Delphi的任何檔案,甚至有些檔案可以不做任何修改就可以直接使用到你的Lazarus程式中。
不過,Lazarus與Delphi畢竟不是同一個東西,還是存在一些區別的,這就需要將Delphi檔案轉換為Lazarus需要的格式。
關於從Delphi轉換到Lazarus的方法,我在這篇文章裡將會介紹以下內容:
- Lazarus中提供的Delphi轉換器
- 轉換二進位制的DFM到LFM
- 轉換Delphi單元為Lazarus單元
- 轉換Delphi專案為Lazarus專案
- 轉換Delphi軟體包為Lazarus軟體包
- 關於轉換的一點說明
1.Lazarus中提供的Delphi轉換器
在Lazarus中提供了Delphi轉換器,用於把Delphi格式的檔案轉換成Lazarus需要的格式。
點選主選單[工具->Delphi轉換器],它的後面還有四個選單項,用來轉換Delphi檔案為Lazarus檔案。每個選單項對應一種型別的檔案,下面將分別講解。
2.轉換二進位制的DFM到LFM
點選主選單[工具->Delphi轉換器->轉換二進位制的DFM到LFM…],選擇你要轉換的dfm檔案,然後[開啟],在提示視窗中回答[確定],轉換工作就完成了。
使用過Delphi的人都知道,Delphi的窗體副檔名為dfm,是一個二進位制檔案,在Delphi中開啟可以看到所見即所得的窗體畫面,也可以透過[檢視原始碼]看到以文字形式表示的窗體檔案。
在Lazarus中,窗體檔案的副檔名是lfm,在任何可以檢視文字檔案的程式中你都可以看到Delphi的[檢視原始碼]中看到的內容,而在Lazarus中開啟lfm看到的是所見即所得的窗體畫面。上面的插圖中看到的是將一個名為ULineExample.dfm的二進位制檔案轉換為名為ULineExample.lfm文字檔案。
3.轉換Delphi單元為Lazarus單元
點選主選單[工具->Delphi轉換器->轉換Delphi單元為Lazarus單元…],選擇你要轉換的pas檔案,然後[開啟],在出現的視窗中點選[開始轉換],轉換工作就完成了,轉換後的檔案會在Lazarus中開啟,你可以原名儲存或者另存為其他的檔名。
Lazarus和Delphi的原始碼檔案的副檔名都是pas,為了轉換後不影響引用這個單元檔案的其他相關檔案,你需要保持原有的檔名。你不必擔心原來的檔案會被覆蓋,因為Lazarus已經新建了一個資料夾把原來的檔案備份了。你已經看到上面介面中[其他]欄目中的[製作更改檔案的備份]已經被選中了。
從介面中你也看到了其他的幾個選項,這些都不重要,你覺得需要了解就自己去嘗試一下。
不是說Lazarus可以直接使用Delphi的檔案嗎?轉換後的單元檔案與原來的有什麼不同呢?主要有以下幾點:
- 在單元檔案的頭部新增了一個編譯選項{$MODE Delphi}。在Lazarus自己建立的單元檔案中這個選項是{$mode objfpc}
- 將原來的Delphi單元檔案中的{$R *.dfm}改為{$R *.lfm}。這是因為Lazarus的窗體檔案的副檔名是lfm
- 當Delphi與Lazarus中提供相同功能的單元有不同的名字時,要將uses下單Delphi單元名替換成Lazarus的單元名。比如Delphi的Messages要替換為Lazarus的LMessages
- 或許還有我沒有發現的其他修改,其實這些知道與否必要性不大。不過我猜想條件編譯中可能有需要修改的東西,你可以在使用中關注一下。
4.轉換Delphi專案為Lazarus專案
點選主選單[工具->Delphi轉換器->轉換Delphi專案為Lazarus專案…],選擇你要轉換的dpr檔案,然後[開啟],在出現的視窗中點選[開始轉換],轉換工作就完成了。
專案轉換的介面跟單元轉換的介面是相同的,差別只是轉換檔案的副檔名不同而已。
Delphi專案檔案的副檔名是dpr,Lazarus的專案副檔名是lpr。
比如轉換一個名為LineExample.dpr的專案檔案,將會生成一個LineExample.lpr檔案。同時還伴隨生成LineExample.lpi、LineExample.lps兩個檔案,這是系統自己維護的,你不需要關注他們。
5.轉換Delphi軟體包為Lazarus軟體包
轉換軟體包的操作跟轉換專案一樣,只是點選的是主選單[工具->Delphi轉換器->轉換Delphi軟體包為Lazarus軟體包…],副檔名從dpk轉換為lpk。
軟體包裡包含元件,需要安裝後才能使用。
6.關於轉換的一點說明{$ENDIF}
理論上Lazarus可以直接使用Delphi的檔案,個別檔案需要轉換為Lazarus的檔名,但在實際應用中可能不是這麼簡單。主要有以下幾個方面:
- 轉換的窗體檔案中可能包含Lazarus中不存在或者沒有安裝的元件,這時開啟窗體檔案時會提示你刪除這些元件。可能你在Delphi中開啟從網上下載的原始碼時也會遇到這種情況。這是因為沒有安裝相應的元件,不是Lazarus的錯誤
- Lazarus追求的是跨平臺程式設計,“一次編寫,到處編譯”。如果你轉換的Delphi檔案只支援Windows,那麼它在Linux上編譯時可能會出現問題。當然,如果你只想你的程式在Windows下執行,可以不用擔心這個問題。
- 如果你轉換的單元檔案中有為了適應Delphi的不同版本而設定的條件編譯程式碼,那麼可能需要你新增對Lazarus的支援。當然如果沒有相應的設定,{$ELSE} 與{$ENDIF} 之間的程式碼將被認為是可以在Lazarus中使用的。
- 還可能有一些其他的問題,只有當你在Lazarus中編譯時才會發現。這些問題需要你去發現和修改。