首页 > 其他分享 >从Delphi到Lazarus——Delphi转换器

从Delphi到Lazarus——Delphi转换器

时间:2024-12-05 12:09:59浏览次数:7  
标签:文件 转换 Delphi Lazarus 转换器 单元

0.前言

在Lazarus中使用Delphi编写的文件是一件很简单的事情,这是因为Lazarus可以直接打开Delphi的任何文件,甚至有些文件可以不做任何修改就可以直接使用到你的Lazarus程序中。

不过,Lazarus与Delphi毕竟不是同一个东西,还是存在一些区别的,这就需要将Delphi文件转换为Lazarus需要的格式。

关于从Delphi转换到Lazarus的方法,我在这篇文章里将会介绍以下内容:

  1. Lazarus中提供的Delphi转换器
  2. 转换二进制的DFM到LFM
  3. 转换Delphi单元为Lazarus单元
  4. 转换Delphi项目为Lazarus项目
  5. 转换Delphi软件包为Lazarus软件包
  6. 关于转换的一点说明

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

标签:文件,转换,Delphi,Lazarus,转换器,单元
From: https://www.cnblogs.com/lexyao/p/18588238

相关文章

  • delphi内存表
    delphi内存表1)TClientDataSet早年datasnap基于COM,datasnap远程方法函数可以返回OLEVariant,TClientDataSet.Data和TClientDataSet.Delta的数据格式都是OLEVariant。delphi数据集通过TDataSetProvider桥梁转换为OLEVariant。DSP+CDS组合,firedac,unidac,ado,bde,dbx。。所有数据......
  • 从Delphi到Lazarus——Lazarus编程时可以使用的组件(控件)
    0.前言使用过可视化编程的人都知道在编程时组件的重要性。可以使用的组件越多,编程越方便快捷。理论上,Delphi中的所有组件在Lazarus中都可以使用。当然,在Windows编程时多数是可以直接使用的,有些需要做适当的修改才能使用。而在Unix或Linux下编程就有些不能使用了,这涉及到操作系统......
  • 用比喻的方法大白话讲解SerDes(串行/并行转换器)
    想象你正在参加一个超级忙碌的派对,场面很热闹,每个人都在不停地讲话,但大家使用的是不同的语言。如果你是一个外语专家,你的任务就是把所有这些语言转换成你自己听得懂的语言,然后再把它们传递给你周围的人,让大家都能理解。这时,你就像一个SerDes(串行/并行转换器)!比喻:语言翻译器......
  • [原创]lazarus在(linux)设置应用在任务栏单一窗口图标显示
    如果lazarus的(linux)应用有多个form,并且form用show显示,在任务栏就会显示多个form的图标,个人感觉比较乱。如果只想显示主form图标,可以在projecr的lpk增加:Application.TaskBarBehavior:=tbSingleButton;以下是完整的lpk:programproject1;{$modeobjfpc}{$H+}uses{......
  • 第1章 Lazarus的系统结构
    第1章Lazarus的系统结构Lazarus是一个基于ObjectPascal语言的集成开发环境(IDE)。FreePascal编译器为Lazarus提供了后端支持。这种后端引擎与集成开发环境的组合类似于VisualStudio对于C++或BorlandDelphi。它生成高效且高度优化的原生代码(NativeCode)。相比之下,J......
  • 从Delphi到Lazarus——Lazarus开发环境使用入门教程
    0.前言曾经有过更换开发环境体验的编程爱好者都会有同样的感受:打开新更换的开发环境后,看到陌生的界面无从下手。想写一段小程序试一试,却你找不到自己需要的组件在哪里。其实,我们每到一个新地方,首先要找点资料熟悉周围的环境。编写程序也是这样,使用一个新的开发环境首先要熟悉这......
  • Delphi 7 编译软件申请管理员权限
    第一步,建立manifest文件,如xx.manifest文件内容如下: <?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><assemblyxmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><trustInfoxmlns="......
  • Delphi有关语句
    在Delphi中,String.Format函数用于格式化字符串。你提供的语句String.Format('|%8s|%-25s|%-25s|',['ID','NAME','DEPARTMENT'])会生成一个格式化的字符串,其中包含三个字段:ID、NAME和DEPARTMENT。具体解释如下:|%8s|:表示一个宽度为8个字符的字符串字段。%s是字符串格......
  • SY8089 兼容 MT3520B 5.5V、2A、2MHz,同步降压转换器
    产品描述SY8089是一种高效的,直流到直流的降压开关调节器,能够提供高达2A的输出电流。该设备的工作电压范围为从2.6V到5.5V的输入电压范围,并提供从0.6V到VIN的输出电压。在2MHz的固定频率下工作,允许使用小的外部组件,如陶瓷输入和输出帽,以及小的电感器,同时仍然提供低输出波纹。这......
  • (西安航天民芯)代理 MT3608 SOT-23-6 高效的1.2MHz 2A升压转换器
    产品描述MT3608是一个恒定频率、6引脚SOT23电流模式升压转换器,旨在用于小型、低功耗的应用。MT3608的开关频率为1.2MHz,并允许使用2毫米或更低高度的微型、低成本的电容器和电感器。内部软启动导致注入电流小,延长电池寿命。MT3608的特点是在光负载下自动切换到脉冲频率调制模式......