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中编译时才会发现。这些问题需要你去发现和修改。