1

我已将我的 2 个 GUI 应用程序从 Delphi 转换为 Lazarus。这两个应用程序都针对 Win32 平台、i386 和 GUI 进行编译。主窗体是使用 Lazarus 工具转换的,可以从 IDE 进行编辑。但是当我运行这样的应用程序时,主窗体并没有出现,只有空白窗体,没有任何控件。

我试图调试这个。它运行初始化部分中的所有代码,并运行来自 .lpr 项目的代码,但是在 CreateForm() 中发生了一些错误,因为它没有在主窗体 OnCreate 事件中运行代码。在事件日志中,我可以看到我写给它的所有文本,'<App.Run'在我关闭这个空表单后出现。

.lpr 项目中的代码:

  Application.Initialize;
  AddToEventLogInfo('App.CreateForm');
  Application.CreateForm(TfrmTst, frmTst);
  AddToEventLogInfo('App.Run>');
  Application.Run;
  AddToEventLogInfo('<App.Run');

我检查了我是否能够从 Lazarus 创建简单的 GUI 应用程序,但是两个转换后的 GUI 应用程序都不能按预期工作。有什么问题?我错过了什么吗?也许拉撒路写的许多警告和提示之一很重要?

当我运行我的应用程序时,Lazarus 写道:

  windres: warning: 14: "MAINICON": 1045: duplicate value
  windres: warning: 16: 1: 1045: duplicate value
  Project "Tst_fpc" successfully built. :)

编辑:

Lazarus 转换工具转换了 .dfm -> .lfm,但 .pas 文件存在一些问题。我不得不手动:

  1. 将 Lazarus 单位添加到用途:

    使用 {$IFDEF FPC} LCLIntf,LResources,{$ENDIF}

  2. 条件编译 Delphi 形式 {$R *.dfm}:

    {$IFNDEF FPC} {$R *.dfm} {$ENDIF}

  3. 在初始化代码中添加 .lrs 资源:

    初始化 {$IFDEF FPC} {$i myunit.lrs} {$ENDIF}

4

3 回答 3

2

我怀疑主窗体单元(我假设它称为 utest)在其初始化部分没有 {$I utest.lrs} 。.lrs 是 lazarus 资源文件,由 delphi 中的 lfm (dfm) 创建。

于 2009-11-25T22:26:50.660 回答
1

空表单是当前项目的表单,因为您从工具中使用了转换 Delphi 项目,这意味着当前项目处于活动状态。
试试这个:

  • 在项目选项上关闭当前项目
  • 在名为项目向导的小主窗口上,使用转换 Delphi 项目选项。
于 2015-01-11T14:05:40.447 回答
0

对不起,我不能给你一个直接的答案。据我了解,资源文件有问题。在 delphi 中,那是 *.res,我不知道它们在 Lazarus 中的样子。使用 resedit 之类的程序http://www.resedit.net/打开资源文件。我试了一下,找到了一个“文件夹”图标,里面有一个帖子 MANICON。我猜你有两个。在这种情况下,删除其中一个。

于 2009-11-25T10:56:33.460 回答