Sign in Join
Wiki copytemporary

Delphi Converter in Lazarus/zh CN: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-****Delphi 项目、Delphi 包和单个单元文件可以转换为 Lazarus。 这些条目可以在 Lazarus 的工具菜单中找到:
2-
3- * **将 Delphi 单元转换为 Lazarus 单元...**
4- * **将 Delphi 项目转换为 Lazarus 项目...**
5- * **将 Delphi 包转换为 Lazarus 包...**
6-
7-此外还有:
1+Delphi 项目、Delphi 包和单个单元文件可以转换为 Lazarus。 这些条目可以在 Lazarus 的工具菜单中找到:
82
9- * **将二进制 DFM 文件转换为文本 LFM 并检查语法...**
3+- **将 Delphi 单元转换为 Lazarus 单元...**
4+- **将 Delphi 项目转换为 Lazarus 项目...**
5+- **将 Delphi 包转换为 Lazarus 包...**
106
11-这通常是不必要的,因为在转换单元时,DFM 表单文件总是会被转换。
7+此外还有:
128
13-## Contents
9+- **将二进制 DFM 文件转换为文本 LFM 并检查语法...**
1410
15- * 1 转换
16- * 1.1 单元文件
17- * 1.2 表单文件
18- * 2 设置对话框
19- * 2.1 目标
20- * 2.2 单元名称替换和移除
21- * 2.3 未知属性移除
22- * 2.4 类型替换
23- * 2.5 函数调用替换
24- * 2.6 坐标偏移
25- * 3 问题
11+这通常是不必要的,因为在转换单元时,DFM 表单文件总是会被转换。
2612
2713# 转换
2814
29-这里简要列出了不同的转换。具体细节请参见下面的部分。
15+这里简要列出了不同的转换。具体细节请参见下面的部分。
3016
3117## 单元文件
3218
33- * 所有单元源文件都会添加一个 **{$mode delphi}** 指令。这使得编译器支持的语言语法与 Delphi 完全一致。这是有意义的,因为我们毕竟是在转换 Delphi 程序。如果用户以后想要利用 **{$mode objfpc}** 的特性,可以手动进行必要的更改。
19+- 所有单元源文件都会添加一个 **{\$mode delphi}** 指令。这使得编译器支持的语言语法与 Delphi 完全一致。这是有意义的,因为我们毕竟是在转换 Delphi 程序。如果用户以后想要利用 **{\$mode objfpc}** 的特性,可以手动进行必要的更改。
3420
35- * 如果表单文件被重命名和转换,**{$R *.DFM}** 会被替换为 **{$R *.lfm}** 。如果目标是 **Lazarus 和 Delphi** ,则会使用条件编译。
21+- 如果表单文件被重命名和转换,**{\$R *.DFM}** 会被替换为 **{\$R *.lfm}**。如果目标是 **Lazarus 和 Delphi**,则会使用条件编译。
3622
37- * Uses 部分中的单元名称和包含的文件名会被修正以匹配文件系统中实际的大小写敏感名称。这对于大小写敏感的文件系统是必要的。
23+- Uses 部分中的单元名称和包含的文件名会被修正以匹配文件系统中实际的大小写敏感名称。这对于大小写敏感的文件系统是必要的。
3824
39- * Uses 部分中的一些单元名称要么被替换,要么被移除。
25+- Uses 部分中的一些单元名称要么被替换,要么被移除。
4026
41- * 一些 Delphi 类型会被替换为 "回退" LCL 类型(与表单文件中的处理方式相同)。
27+- 一些 Delphi 类型会被替换为 "回退" LCL 类型(与表单文件中的处理方式相同)。
4228
43- * 代码中调用的一些函数名称会被替换。
29+- 代码中调用的一些函数名称会被替换。
4430
4531## 表单文件
4632
47- * 旧的 Delphi 版本使用二进制格式用于 .dfm 表单文件。它们总是被转换为 ASCII 文本格式。
33+- 旧的 Delphi 版本使用二进制格式用于 .dfm 表单文件。它们总是被转换为 ASCII 文本格式。
4834
49- * .dfm 表单文件被重命名或复制到 .lfm 并根据需要进行转换。还有一个选项可以直接使用相同的 Delphi 表单文件。请参见下面的 **目标** 部分。
35+- .dfm 表单文件被重命名或复制到 .lfm 并根据需要进行转换。还有一个选项可以直接使用相同的 Delphi 表单文件。请参见下面的 **目标** 部分。
5036
51- * 未知的属性会被移除。
37+- 未知的属性会被移除。
5238
53- * 一些 Delphi 类型会被替换为 "回退" LCL 类型(与单元文件中的处理方式相同)。
39+- 一些 Delphi 类型会被替换为 "回退" LCL 类型(与单元文件中的处理方式相同)。
5440
55- * 可视容器内控件的 Top 和 Left 坐标偏移量调整。
41+- 可视容器内控件的 Top 和 Left 坐标偏移量调整。
5642
5743# 设置对话框
5844
59-从工具菜单中选择一个条目后,然后选择要转换的单元/项目/包,用户将看到一个设置对话框。 所有设置都保存在本地 Lazarus 配置目录中的 **delphiconverter.xml** 文件中。 对话框允许配置转换的许多细节:
45+从工具菜单中选择一个条目后,然后选择要转换的单元/项目/包,用户将看到一个设置对话框。 所有设置都保存在本地 Lazarus 配置目录中的 **delphiconverter.xml** 文件中。 对话框允许配置转换的许多细节:
6046
61- * **项目路径** 显示所选路径。
47+- **项目路径** 显示所选路径。
6248
63- * **更改的文件制作备份** 将原始文件保存到所选目录下的 ConverterBackup 目录中。
49+- **更改的文件制作备份** 将原始文件保存到所选目录下的 ConverterBackup 目录中。
6450
65- * **在编辑器中保持转换后的文件打开** 。如果选中,转换后的单元文件在转换后保持打开状态。
51+- **在编辑器中保持转换后的文件打开**。如果选中,转换后的单元文件在转换后保持打开状态。
6652
67-对话框的其余设置将在下面介绍。
53+对话框的其余设置将在下面介绍。
6854
69-[![Delphi 转换器的设置对话框图片](/wiki-images/0/06/ConvertSettings.png)](</File:ConvertSettings.png> "Delphi 转换器的设置对话框图片")
55+![](/wiki-images/0/06/ConvertSettings.png)
7056
7157## 目标
7258
73-转换目标在设置对话框中定义。它可以是:
59+转换目标在设置对话框中定义。它可以是:
7460
75- * **跨平台** \-- 用跨平台等效项替换 Windows 特定单元。
61+- **跨平台** -- 用跨平台等效项替换 Windows 特定单元。
7662
77- * **支持 Delphi** \-- 尝试使单元与 Delphi 和 Lazarus 兼容,通过在 Uses 部分使用 {$IFDEF...}。Delphi 表单文件 .dfm 被复制到 Lazarus 表单文件 .lfm 并进行转换。
63+- **支持 Delphi** -- 尝试使单元与 Delphi 和 Lazarus 兼容,通过在 Uses 部分使用 {\$IFDEF...}。Delphi 表单文件 .dfm 被复制到 Lazarus 表单文件 .lfm 并进行转换。
7864
79- * **使用相同的 DFM 表单文件** \-- Delphi 表单文件 .dfm 也与 Lazarus 一起使用。除非需要,否则不对其进行修改,除非需要将二进制格式转换为 ASCII 文本格式。
65+- **使用相同的 DFM 表单文件** -- Delphi 表单文件 .dfm 也与 Lazarus 一起使用。除非需要,否则不对其进行修改,除非需要将二进制格式转换为 ASCII 文本格式。
8066
81-然而,后来同时在 Delphi 和 Lazarus 中维护该文件是有问题的,因为组件具有略微不同的属性。
67+然而,后来同时在 Delphi 和 Lazarus 中维护该文件是有问题的,因为组件具有略微不同的属性。
8268
8369## 单元名称替换和移除
8470
85-当 Uses 部分中列出的单元找不到时,它可以被替换或移除。 替换是可配置的,请参阅设置对话框中的 "单元替换"。空 "新名称" 表示移除。 例如,默认情况下,"Windows" 被替换为 "LCLIntf, LCLType, LMessages"。
71+当 Uses 部分中列出的单元找不到时,它可以被替换或移除。 替换是可配置的,请参阅设置对话框中的 "单元替换"。空 "新名称" 表示移除。 例如,默认情况下,"Windows" 被替换为 "LCLIntf, LCLType, LMessages"。
8672
87-替换支持正则表达式语法。例如:
73+替换支持正则表达式语法。例如:
8874
89- * ^Q(.+) --> $1
75+- ^Q(.+) --\> \$1
9076
91-意味着匹配以 'Q' 开头、后跟任何内容的字符串,并保存 'Q' 后面的部分, 然后用保存的部分替换。本质上,这是在开头移除了 'Q'。
77+意味着匹配以 'Q' 开头、后跟任何内容的字符串,并保存 'Q' 后面的部分, 然后用保存的部分替换。本质上,这是在开头移除了 'Q'。
9278
93-替换可以是交互式的或自动的。在交互式模式下,用户可以在应用替换之前编辑它们。
79+替换可以是交互式的或自动的。在交互式模式下,用户可以在应用替换之前编辑它们。
9480
95-如果在替换后仍然缺少单元,用户将被询问它们。 然后,他可以选择将它们注释掉或搜索它们的单元路径。
81+如果在替换后仍然缺少单元,用户将被询问它们。 然后,他可以选择将它们注释掉或搜索它们的单元路径。
9682
97-[![Delphi 转换器的“未找到单元”对话框图片](/wiki-images/6/63/ConvertUnitsNotFound.jpg)](</File:ConvertUnitsNotFound.jpg> "Delphi 转换器的“未找到单元”对话框图片")
83+![](/wiki-images/6/63/ConvertUnitsNotFound.jpg)
9884
9985## 未知属性移除
10086
101-并非所有 Delphi 组件属性都在 LCL 组件中实现。这些属性可以被移除。LCL 中有一个系统,其中不存在的属性被注册,表单加载器会忽略它们。转换器也会自动或交互式地移除它们。 目前的交互式移除发生在用于组件类型替换的同一个对话框中(见下文)。属性也可以被替换,但通常不需要这样做。
87+并非所有 Delphi 组件属性都在 LCL 组件中实现。这些属性可以被移除。LCL 中有一个系统,其中不存在的属性被注册,表单加载器会忽略它们。转换器也会自动或交互式地移除它们。 目前的交互式移除发生在用于组件类型替换的同一个对话框中(见下文)。属性也可以被替换,但通常不需要这样做。
10288
10389## 类型替换
10490
105-一些 Delphi 组件在 LCL 中不存在。许多第三方组件也仅存在于 Delphi 中。 这些类型可以用回退 LCL 类型替换。例如:
91+一些 Delphi 组件在 LCL 中不存在。许多第三方组件也仅存在于 Delphi 中。 这些类型可以用回退 LCL 类型替换。例如:
10692
107- * TCoolBar --> TToolBar。
93+- TCoolBar --\> TToolBar。
10894
109-这也是可配置的,请参阅设置对话框中的 "类型替换"。
95+这也是可配置的,请参阅设置对话框中的 "类型替换"。
11096
111-这里支持与单元名称替换中使用的相同的正则表达式语法。
97+这里支持与单元名称替换中使用的相同的正则表达式语法。
11298
113-这些类型在 Pascal 源文件和表单文件 (.lfm) 中都会被替换。 替换也适用于嵌套的组件结构,其中被替换类型的组件具有也必须被替换的子组件。
99+这些类型在 Pascal 源文件和表单文件 (.lfm) 中都会被替换。 替换也适用于嵌套的组件结构,其中被替换类型的组件具有也必须被替换的子组件。
114100
115-原始组件和替换组件之间的不同属性可能会在转换后引起问题。 对于这个问题没有简单的解决方案。
101+原始组件和替换组件之间的不同属性可能会在转换后引起问题。 对于这个问题没有简单的解决方案。
116102
117-最好的解决方案是制作更多与 Delphi 兼容的组件,并将所有第三方组件移植到 Lazarus。 由于这些潜在问题,类型转换总是交互式的。
103+最好的解决方案是制作更多与 Delphi 兼容的组件,并将所有第三方组件移植到 Lazarus。 由于这些潜在问题,类型转换总是交互式的。
118104
119-[![Delphi 转换器的“修复 LFM”对话框图片](/wiki-images/2/2a/ConvertFixLfm.jpg)](</File:ConvertFixLfm.jpg> "Delphi 转换器的“修复 LFM”对话框图片")
105+![](/wiki-images/2/2a/ConvertFixLfm.jpg)
120106
121107## 函数调用替换
122108
123-源代码中的一些仅限 Windows 的函数调用可以被替换为功能上相似的 RTL / LCL 库函数调用。 这是可配置的,请参阅设置对话框中的 "函数替换"。
109+源代码中的一些仅限 Windows 的函数调用可以被替换为功能上相似的 RTL / LCL 库函数调用。 这是可配置的,请参阅设置对话框中的 "函数替换"。
124110
125-每个函数都定义了一个类别。可以通过类别启用或禁用替换。 例如,有一个 "UTF8Names" 类别用于与文件操作相关的函数。
111+每个函数都定义了一个类别。可以通过类别启用或禁用替换。 例如,有一个 "UTF8Names" 类别用于与文件操作相关的函数。
126112
127-替换的语法是:
113+替换的语法是:
128114
129- * FileExists --> FileExistsUTF8($1)
115+- FileExists --\> FileExistsUTF8(\$1)
130116
131-其中 ($1) 表示原始函数调用中的第一个参数用于替换函数。 还有更高级的语法可用。例如:
117+其中 (\$1) 表示原始函数调用中的第一个参数用于替换函数。 还有更高级的语法可用。例如:
132118
133- * ShellExecute --> if $3 match ":/" then OpenURL($3); OpenDocument($3)
119+- ShellExecute --\> if \$3 match ":/" then OpenURL(\$3); OpenDocument(\$3)
134120
135-ShellExecute 可以映射到两个不同的 LCL 函数。关键字 "match" 后面的字符串再次是一个正则表达式。 如果匹配,则使用其后的替换项,否则使用下一个替换项。
121+ShellExecute 可以映射到两个不同的 LCL 函数。关键字 "match" 后面的字符串再次是一个正则表达式。 如果匹配,则使用其后的替换项,否则使用下一个替换项。
136122
137123## 坐标偏移
138124
139-在 Delphi 和 Lazarus 中,当组件位于可视容器内时,Top 和 Left 坐标具有不同的含义。 在 Delphi 中,坐标是相对于容器的 Top 和 Left。 在 Lazarus 中,它们是相对于容器的客户端区域,不包括边框。 这对于 TGroupBox 来说是最明显的问题,因为它在边框上有标题文本。
125+在 Delphi 和 Lazarus 中,当组件位于可视容器内时,Top 和 Left 坐标具有不同的含义。 在 Delphi 中,坐标是相对于容器的 Top 和 Left。 在 Lazarus 中,它们是相对于容器的客户端区域,不包括边框。 这对于 TGroupBox 来说是最明显的问题,因为它在边框上有标题文本。
140126
141-从坐标中减去偏移量可以使表单布局看起来与在 Delphi 中相同。 偏移量在设置对话框的 "坐标偏移" 中定义。
127+从坐标中减去偏移量可以使表单布局看起来与在 Delphi 中相同。 偏移量在设置对话框的 "坐标偏移" 中定义。
142128
143129# 问题
144130
145-当 Delphi 程序包含未在 RTL/LCL 中移植的 Windows API 调用时,没有自动转换它的方法。 其他 Windows 特定技术,如 OLE,也会引起同样的问题。
131+当 Delphi 程序包含未在 RTL/LCL 中移植的 Windows API 调用时,没有自动转换它的方法。 其他 Windows 特定技术,如 OLE,也会引起同样的问题。
146132
147-数据库连接通常需要进行更改。要么 DB,要么连接组件不兼容。
133+数据库连接通常需要进行更改。要么 DB,要么连接组件不兼容。
148134
149-另一个问题是某些库与 Delphi 库不兼容。例如,XML 的使用方式略有不同。也许转换器将来可以在这个领域进行改进。
135+另一个问题是某些库与 Delphi 库不兼容。例如,XML 的使用方式略有不同。也许转换器将来可以在这个领域进行改进。
150136
151-如前所述,在 Lazarus/LCL 中不存在的 Delphi 组件即使被替换为回退组件类型也会引起问题,因为它们具有不同的属性。
137+如前所述,在 Lazarus/LCL 中不存在的 Delphi 组件即使被替换为回退组件类型也会引起问题,因为它们具有不同的属性。
152138
153139然而,如果程序仅使用 VCL 类和函数,转换成功的几率很大。
154140
155141---
156-*From the Free Pascal wiki, page "Delphi Converter in Lazarus/zh CN", as the Internet Archive kept it on 2025-01-16. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
142+*From the Free Pascal wiki, page "Delphi Converter in Lazarus/zh CN", as it stood on 2024-05-03 after a change by Hieroly, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
143+Category: Lazarus

Back to history