从Delphi到Lazarus——Delphi转换器
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的"Windows" 要替换为"LCLIntf, LCLType, LMessages"
- 或许还有我没有发现的其他修改,其实这些知道与否必要性不大。不过我猜想条件编译中可能有需要修改的东西,你可以在使用中关注一下。
上面提到的第一个改变与Lazarus的字符串表达方式有关,之所以这么做,是因为Lazarus与Delphi中字符串的表示方式是不同的。关于Lazarus中字符串的更多说明可以从以下链接中看到:
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.关于转换的几点说明
理论上Lazarus可以直接使用Delphi的文件,个别文件需要转换为Lazarus的文件名,但在实际应用中可能不是这么简单。主要有以下几个方面:
- 转换的窗体文件中可能包含Lazarus中不存在或者没有安装的组件,这时打开窗体文件时会提示你删除这些组件。可能你在Delphi中打开从网上下载的源代码时也会遇到这种情况。这是因为没有安装相应的组件,不是Lazarus的错误
- Lazarus追求的是跨平台编程,“一次编写,到处编译”。如果你转换的Delphi文件只支持Windows,那么它在Linux上编译时可能会出现问题。当然,如果你只想你的程序在Windows下运行,可以不用担心这个问题。
- 如果你转换的单元文件中有为了适应Delphi的不同版本而设置的条件编译代码,那么可能需要你添加对Lazarus的支持。当然如果没有相应的设置,{$ELSE} 与{$ENDIF} 之间的代码将被认为是可以在Lazarus中使用的。
- 实现同样功能的组件在Delphi和Lazarus中名字不同或者使用了不同的组件
- 文件中使用了Lazarus不支持的Delphi功能或者代码
- 还可能有一些其他的问题,只有当你在Lazarus中编译时才会发现。这些问题需要你去发现和修改。
7.结束语
我在这篇文章里主要说了将Delphi文件转换为Lazarus文件的操作方法,对于更深层次的修改并没有讨论。之所以这么多是因为有人已经写了这方面的文章,而且写得比我好。
我相信,当你点击以下链接打开网页后看到的内容对你将Delphi文件转换为Lazarus后出现问题的理解和修改有很大的帮助:
Lazarus For Delphi Users/zh CN - Free Pascal wiki
Free Pascal 编译器不支持的 Delphi 语言功能(英文)
Delphi Converter in Lazarus/zh CN - Free Pascal wiki
从Delphi到Lazarus——Delphi转换器的更多相关文章
- Indy 10.5.8 for Delphi and Lazarus 修改版(2011)
Indy 10.5.8 for Delphi and Lazarus 修改版(2011) Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的I ...
- Delphi、Lazarus保留字、关键字详解
Delphi.Lazarus保留字.关键字详解 来自橙子,万一的博客以及其他地方 保留字:变量等标识符可以再使用: 关键字:有特定含义,不能再次重新定义: 修饰字:类似保留字的功能,也就是说可以重用 ...
- zw版【转发·台湾nvp系列Delphi例程】Delphi 使用 HALCON库件COM控件数据格式转换
zw版[转发·台湾nvp系列Delphi例程]Delphi 使用 HALCON库件COM控件数据格式转换 Delphi 使用 HALCON库件COM控件数据格式转换,与IHObjectX接口有关 va ...
- delphi 基础之四 delphi 组织结构
delphi 组织结构 在Delphi中,一个正在开发的应用程序可以被称作项目或者工程.一般地,一个项目主要由dpr(项目).pas(单元)和dfm(窗体)三种文件组成,另外还有一些附属文件,如res ...
- 选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由
选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由 我不喜欢用InstallRite的全自动安装包 ...
- Delphi XE8中Delphi和JAVA数据类型对应关系!
Delphi XE8中Delphi和JAVA数据类型对应关系所在单元文件:Androidapi.JNI.JavaTypes 对应关系: JObject = interface;//java.lang. ...
- delphi 2010与delphi XE破解版的冲突
在系统中同时安装了Dephi 2010LITE版与Delphi XE lite后,总是会有一个有问题 是因为两者都是读取C:\ProgramData\Embarcadero目录下的license文件, ...
- Delphi 提示在Delphi的IDE中,按Ctrl+Shift+G键可以为一个接口生成一个新的GUID。
对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...
- fastscript调用delphi方法和DELPHI调用FASTSCRIPT方法
fastscript调用Delphi过程: 1. 先创建事件处理方法:TfsCallMethodEvent 2. 然后再用调用TfsScript.AddMethod方法,第一个参数为Delphi方法 ...
- delphi 权限控制(delphi TActionList方案)
在软件开发中,为软件加入权限控制功能,使不同的用户有不同的使用权限,是非常重要的一项功能,由其在开发数据库方面的应用,这项功能更为重要.但是,要为一个应用加入全面的权限控制功能,又怎样实现呢?大家知道 ...
随机推荐
- Figma 学习笔记 – Align 对齐
Figma 有几个常用的对齐方法 从左到右 1. 左对齐 Alt + A 2.左右居中对齐 Alt + H 3.右对齐 Alt + D 4.上对齐 Alt + W 5.上下居中对齐 Alt + V 6 ...
- QT框架实现自定义形状截图效果
文章目录 QT框架普通截图运行效果 QT框架系统级热键的原理 注册热键 反注册热键 获取系统级唯一的整数ID 删除系统级唯一整数ID 原生事件过滤器 QT框架截图的原理 截图窗口 拉框操作 系统剪切板 ...
- 树状数组 java模板(纯代码)
public class TrieNums { int n; /*Nums start from 0*/ int[] storage; /*TrieNums index start from 1*/ ...
- HTTP三次握手
转载:http://blog.163.com/wangzhenbo85@126/blog/static/1013632822013423502833/?suggestedreading&wum ...
- 七张图看懂 Linux profiling 机制
1 图 1 Linux profiling 手段一览 软件埋点: 手动埋点:主动调用 trace 函数来实现埋点. Android systrace 即是这样一个例子,如图 2 和 图 3 所示 自动 ...
- iOS关于搜索不规则瀑布流布局的实现小结
最近在项目开发中遇到了不规则搜索布局的问题.之前常用的解决方案是用一个tableview用一个循环动态的加载,唯一的缺点是需要动态的移除,其实也已经足够.https://download.csdn.n ...
- 泛型dotnet
// 什么是泛型List<T> T:表示类型参数,指代任意类型 T可以是任意标识 // 编写代码时使用特殊符号替代位置类型,在实例化或使用/调用时才会进行具体类型的定义 // 特点:重用代 ...
- centos下搭建php开发环境(lamp)
由于个人非常喜欢爱linux系开发php项目. 因为某些原因,经常需要手动搭建环境 经常在网上找到的教程经常不太一样 虽然最终都能完成搭建,但是总是觉得不太爽 还不如自己写一篇,需要的时候肯定能找到 ...
- 什么是WEB3.0
WEB1.0 90年代末期创建的搜狐,新浪等门户网站的特点是向用户推送信息,门户网站显示什么我们看什么,这个时代称为web1.0.WEB2.0随着技术的发展,用户可以在网上进行互动,可以在网站上发表个 ...
- 向AWS迁移系统
向AWS迁移系统的考虑事项: 1.理解现在应用的架构和运行环境: 使用的OS,软件版本,依赖库,底层硬件,数据库,资源使用用量.性能等非功能要件. 基于这些信息设计在AWS上的架构,使用Ins ...