有时 Delphi 应用程序与 C++ Builder 应用程序可能需要相互转换。 这种转换虽然费时, 但并不困难(顺便说一句,进行转换时,我将 Delphi 与 C++ Builder 同时运行) 。 这里只介绍将 Delphi 变为 C++Builder 的过程,反过来也差别不大。 将 Delphi 变为 C++ Builder 主要有两步。 第一步是将 Delphi 应用程序窗体复制到 C++ Builder 项目中,第二步是修改 Delphi 代码。一般情况下这都是没有必要的,除非你想改写为 C++代码。 下面详细介绍这两个步骤: 首先要复制 Delphi 窗体到 C++ Builder 应用
程序中。Delphi 窗体与 C++ Builder 窗 体使用相同的基本格式,但至少有一大差别。显然,窗体文件包含窗体本身和窗体上每个构 件的尺寸和位置。但窗体文件中也还包含事件信息。具体地说,窗体文件包括窗体及其构件 所建事件处理器的描述。在 Delphi 窗体文件中,事件引用的事件处理器是 Delphi 方法,而 在 C++ Builder 窗体文件中,事件指向 C++ Builder 事件处理器。自然,要删除 Pascal 引用才能在 C++ Builder 中使用窗体。你不一定要知道这些细节,但将 Delphi 转为 C++ Builder 时必须考虑这个因素。 复制 Delphi 主窗体的步骤如下: 1. 打开 Delphi 项目并记下主窗体文件名及其 Name 属性。 2. 切换到 C++ Builder 中,选择主窗体,将 Name 属性变为与 Delphi 项目主窗体同 名。 保存 C++ Builder 项目,保存主窗体单元,用 Delphi 中窗体的同一文件名 (除去.PAS 扩展名) 。将项目存为与 Delphi 项目相同的名称。 3. 切换到 Windows Explorer 中, Delphi 的项目目录中的主窗体窗体文件(.DFM 文件) 将 复制到 C++ Builder 项目目录中。一定要复制文件并不是移动文件。Windows Explorer 警告说目标目录中已经有同名文件。单击 Yes 改写 C++ Builder 目录中 的窗体文件。如果没有这个警告,则一定是保存 C++ Builder 项目时出了错。 4. 切换回 C++ Builder, 出现一个对话框, Module xxx.cpp's time/date has changed. 说 Reload?单击 Yes 重装窗体。窗体重装后,即会包含 Delphi 窗体中的构件。 5. 确保窗体选中并选择 C++ Builder 主菜单中的 Edit|Select All 选择所有窗体的构 件。然后选择主菜单中的 Edit|Cut 和 Edit|Paste,这样就把各个构件的所有声明放到 主窗体的头文件中。 6. 这时要从 C++ Builder 窗体文件中删除所有 Delphi 的事件处理器的引用,这很简 单: a) 选择 C++ Builder 主菜单中的 File|Save 或单击工具条上的 Save File b) C++ Builder 会显示每个事件处理器的消息框。每次出现对话框时单击 Yes, 以便删除所有事件处理器。也许要单击 Yes 几十次才能删除所有事件处理器 (我曾为一个窗体删除 100 个
事件处理器!)。 这样就复制了窗体,可以转入代码转换了。说明:Delphi 应用程序中的每个窗体都要重 复上述步骤。 转换代码从 Delphi 向 C++ Builder 转换代码要比复制窗体复杂得多, 有许多方法可用, 但我用的方法如下: 首先要找出编程人员(而不是 Delphi)生成的各个变量和方法。找到 Delphi 单元中的 主窗体类声明。记下 private 或 public 部分声明的各个变量和方法。 将这些声明复制到剪贴 板上。
例如,
Delphi 类声明可能如下所示: Private { Private declarations } DrawColor : TColor;procedure DoDrawing;function SetDrawColor :Integer; 这里要复制 DrawColor、DoDrawing 和 SetDrawColor 的声明。切换回 C++ Builder, 在代码编辑器中显示主窗体的头。找到 private 部分并粘贴剪贴板中的代码。 将粘贴的声明转换为 C++语法。 例如,第 3 步的声明可能转换为如下: private: // User declarations TColor DrawColor; void DoDrawing(); int SetDrawColor(); 切换回 Delphi。在 Delphi 单元的 implementation 部分,找到类声明中声明的方法(这里 为 DoDrawing 和 SetDrawC