【问题标题】:Empty main form in GUI app converted from Delphi to LazarusGUI 应用程序中的空主窗体从 Delphi 转换为 Lazarus
【发布时间】:2009-11-25 09:58:22
【问题描述】:

我已将我的 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}

【问题讨论】:

    标签: delphi lazarus freepascal fpc


    【解决方案1】:

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

    【讨论】:

    • 是的,就是这样。来自 Lazarus 的转换器制作了 .lfm 文件,但 .pas 文件存在一些问题。更新问题中的更多信息。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 2022-09-24
        • 2014-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多