【问题标题】:`E1026 File not found Unit2.dfm``E1026 文件未找到 Unit2.dfm`
【发布时间】:2016-03-16 00:42:19
【问题描述】:

我有一个从 Internet 复制的简单 TCP 服务器应用程序。

unit TCPServer;

interface

uses
  System.SysUtils, System.Variants, System.Classes,
  FMX.Forms, FMX.Dialogs, IdBaseComponent, IdComponent, IdSocketHandle,
  IdCustomTCPServer, IdTCPServer, IdContext;

type
  TForm2 = class(TForm)
    Tserver: TIdTCPServer;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TserverExecute(AContext: TIdContext);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Binding : TIdSocketHandle;
begin
  Tserver.DefaultPort := 16000;
  Tserver.Bindings.Clear;
  Binding := Tserver.Bindings.Add;
  Binding.IP := '0.0.0.0';
  Binding.Port := 16000;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 Tserver.Active := True;
end;

procedure TForm1.TserverExecute(AContext: TIdContext);
Var
C : String;
begin
 C:= AContext.Connection.Socket.ReadLn();

 if C = 'TESTSTRING' then
 begin
   AContext.Connection.Socket.Writeln('SENT');
 end;


end;

end.

我正在尝试让它在 Android 设备上编译。我创建了一个新的多设备表单Unit2 (Unit2.pas and Unit2.fmx )并将上述文件粘贴到Unit2.pas中。

当我编译项目时出现错误

E1026 File not found Unit2.dfm

我是 delphi 编程的新手。我想知道dfm 文件是什么。它与 fmx 文件有何不同,这似乎是在我的 IDE 上创建表单的正确方法。我正在使用 Embarcadero® Delphi 10 Seattle

【问题讨论】:

  • 我有点困惑。 Firemonkey 不使用dfm 文件。它使用fmx 文件。 dfm 特定于 VCL 框架,仅适用于 Windows。您需要在 Firemonkey 应用程序中实现此代码。
  • @JerryDodge - Firemonkey 是什么?使用类似的(Unit1.pas 和 Unit1.fmx),我可以将其加载到 Android 中)
  • 基于此问题和您之前的问题,我强烈建议您在深入研究之前进行更多研究,然后在遇到问题时提出问题。
  • 如果您使用 Delphi,特别是如果您打算以 Android 为目标,您必须知道 Firemonkey 是什么。这就是您正在使用的整个框架。传统的 Delphi 使用 VCL 框架,仅适用于 Windows,但 FMX (Firemonkey) 是可以针对多个平台的新框架。你不能把两者混在一起。我的意思是从技术上讲你可以,但那是一个完全不同的故事,与你的情况无关。
  • 形式不是最重要的。重要的部分是您正在编写的应用程序的类型。您的代码正在寻找dfm 文件的事实告诉我您正在尝试编写仅适用于Windows 的VCL Forms 应用程序。您需要从头开始一个新的 Firemonkey Multi-Platform 应用程序,并在那里重新编写上面的代码。但同样,在深入研究之前,您还有很多学习要做。在你还不知道如何踩水之前,你就已经潜入深渊,你肯定会淹死的。

标签: android delphi


【解决方案1】:

根据我在您的代码中看到的内容,您正在使用 VCL Forms Application,它仅适用于 Windows。然而你说你的目标是Android。这里有多个问题,所以我从头开始。

E1026 文件未找到 Unit2.dfm

我在您的代码中没有看到对Unit2 的任何引用。这里没有任何迹象表明这样的文件甚至首先存在。您上面的单位是TCPServer.pas,我在任何uses 子句中都没有看到Unit2。如果我不得不猜测的话,这个单元最初的名称是 Unit2.pas,但是您在没有指示项目更改名称的情况下将单元顶部的名称修改为 TCPServer

我正在尝试让它在 Android 设备上编译。

如果这是你的意图,那你就走错路了。您的上述单元适用于VCL 应用程序,但VCL 仅适用于Windows。它不适用于任何移动平台,期间。

我想知道什么是 dfm 文件。它与 fmx 文件有何不同

DFM 文件与VCL 应用程序相关联,我知道这就是您当前项目的目标。 FMX 文件与 Firemonkey 应用程序相关联,这是您针对多平台所需要的。如果您的目标是移动平台,则不能在同一个应用程序中将两者混合在一起。 DFMFMX 都是包含表单设计(与代码相反)的文件,并且在两个框架之间有所不同。

我是 delphi 编程的新手。

我强烈建议您在尝试开始编码之前先退后一步阅读 Delphi,尤其是如果您的目标是移动平台。

另一方面,您的单位在其使用条款中引用FMX 单位,但请查看{$R *.dfm} 的行。这意味着它正在寻找 DFM 文件。我不知道你是如何获得这段代码的,但它是一个巨大的混淆,不可能在任何一个框架下编译。

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2011-09-06
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    相关资源
    最近更新 更多