GUI应用程序中的空主表单从Delphi转换为Lazarus

时间:2009-11-25 09:58:22

标签: delphi lazarus freepascal fpc

我已将我的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写的许多警告和提示之一很重要吗?

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

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

修改

Lazarus转换工具已转换为.dfm - &gt; .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}

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  • 在项目选项关闭当前项目
  • 在名为项目向导的小主窗口上,使用convert Delphi项目选项。

答案 2 :(得分:0)

对不起,我不能直截了当地回答你。根据我的理解,资源文件存在问题。在德尔福那是* .res,我不知道它们在拉撒路中的样子。使用resedit,http://www.resedit.net/等程序打开资源文件。我试了一下,找到了一个“文件夹”图标,其中有一个帖子MAINICON。我猜你有两个。在这种情况下,删除其中一个。