Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 开发新的TEditButton类型需要dclfmxstd包,该包不作为dcp存在_Delphi_Packages_Firemonkey_Delphi 10.1 Berlin - Fatal编程技术网

Delphi 开发新的TEditButton类型需要dclfmxstd包,该包不作为dcp存在

Delphi 开发新的TEditButton类型需要dclfmxstd包,该包不作为dcp存在,delphi,packages,firemonkey,delphi-10.1-berlin,Delphi,Packages,Firemonkey,Delphi 10.1 Berlin,我正在使用Delphi Berlin Enterprise,我需要扩展TClearEditButton和TDropDownEditButton的一些功能。因此,我开发了自己的TMEClearEditButton和TMEDropDownListEditButton。它们是标准FireMonkey的子类,所以我使用了FMX.Edit单元。我通过代码创建按钮做了一些测试,到目前为止没有问题 当我决定构建一个只包含设计时的包,以便能够直接在IDE中添加编辑按钮时,问题就开始了。从FMX.Editors复

我正在使用Delphi Berlin Enterprise,我需要扩展TClearEditButton和TDropDownEditButton的一些功能。因此,我开发了自己的TMEClearEditButton和TMEDropDownListEditButton。它们是标准FireMonkey的子类,所以我使用了FMX.Edit单元。我通过代码创建按钮做了一些测试,到目前为止没有问题

当我决定构建一个只包含设计时的包,以便能够直接在IDE中添加编辑按钮时,问题就开始了。从FMX.Editors复制一些代码后,我得出以下结论:

Unit ME.Editors;

Interface

Uses
  System.Classes,
  DesignIntf,
  FMX.Editor.Items,
  FMX.Design.Items;

Type
  TMEEditEditor = Class(TItemsEditor)
  Public
    Constructor Create(AComponent: TComponent; ADesigner: IDesigner); Override;
  End;

Implementation

Uses
  FMX.Edit,
  ME.Edit;

Constructor TMEEditEditor.Create(AComponent: TComponent; ADesigner: IDesigner);
Begin
  Inherited Create(AComponent, ADesigner);
  FAllowChild := False;
  SetLength(FItemsClasses, 10);
  FItemsClasses[0] := TItemClassDesc.Create(TEditButton);
  FItemsClasses[1] := TItemClassDesc.Create(TMEClearEditButton);
  FItemsClasses[2] := TItemClassDesc.Create(TPasswordEditButton);
  FItemsClasses[3] := TItemClassDesc.Create(TSearchEditButton);
  FItemsClasses[4] := TItemClassDesc.Create(TEllipsesEditButton);
  FItemsClasses[5] := TItemClassDesc.Create(TDropDownEditButton);
  FItemsClasses[6] := TItemClassDesc.Create(TMEDropDownListEditButton);
  FItemsClasses[7] := TItemClassDesc.Create(TMEDropDownDateEditButton);
  FItemsClasses[8] := TItemClassDesc.Create(TMEDropDownTimeEditButton);
  FItemsClasses[9] := TItemClassDesc.Create(TSpinEditButton);
End;

End.
现在编译它需要一些标准的delphi designtime包:

  • 指定人
  • fmxdesigner
  • dclcommon
。。。但这似乎还不够。它现在可以编译了,但警告说以下单元已隐式导入到我的包中:

  • FMX.Design.Lang
  • FmxDsnConst
  • FMX.Editor.Items
  • FMX.Design.Items
。。。并建议我应该将dclfmxstd包添加到requires列表中

如果我这样做,它将无法工作,因为我的计算机上任何地方都不存在dclfmxstd.dcp。在我的18.0\bin目录中有一个dclfmxstd240.bpl包库,但在任何地方都没有dcp编译包

我还试图在我的开发目录中复制这4个单元,并将它们显式地包含在我的包中。。。但这不起作用,因为它声明这些单元已经包含在dclfmxstd240包中

关于如何走出这一困境并继续前进,有什么提示吗

PS-作为旁白。。。最好有一个delphi单元到包的映射,以便知道哪些包必须被引用。。。在Lib中的所有DCP上不使用二进制搜索工具;)


我已经报告了这个问题,我想我会把它作为一个答案发布出来,因为尽管它不能以一种非常令人满意的方式解决您的问题,但我至少已经得到了一个FMX组件,我可以在IDE中安装它,它有一个自定义的设计器。我所做的可能会给你一些下一步的想法

以下是我所做的:

  • 我创建了一个单元,其中包含FMX的TEdit的最小后代TMyEdit。它使用以下FMX单位:FMX.Types、FMX.Controls、FMX.Forms、FMX.Graphics、FMX.Dialogs、FMX.Controls.Presentation和FMX.Edit。 我还创建了一个单独的单元(就像你应该做的那样),包含一个最小的组件编辑。本单元仅使用System.Class、DesignIntf、FMX.Editor.Items和FMX.Design.Items

  • 我将这两个单元都添加到一个新的.Dpk项目中,并将其
    Requires
    子句设置为列出RTL.DCP、FMX.DCP和FMXDesigner.DCP

  • 我编译了.Dpk并试图安装它。我得到的对话框与您建议将DclFMXStd.DCP添加到我的需求列表中的对话框相同。然后,当然,它抱怨说它找不到它

  • 我在整个h/磁盘上搜索了DclFMXStd.*当然,除了DclFMXStd230.BPL之外,它什么也没找到,但没有找到对应的.DCP文件

  • 于是我想知道“它是从哪里得到‘DclFMXStd’这个名字的?我在西雅图安装的Grep搜索(这就是我正在使用的,尽管我已经安装到东京了)发现唯一包含该名称的文件是包文件DclFMXStd230.Bpl,其中包含它的3个实例。我通过在.Bpl上运行Delphi的TDump实用程序确认了这一点

  • 于是,我想‘如果我从IDE卸载DclFMXStd230.Bpl会怎么样?’。我试过了,现在我的包可以毫无怨言地编译和安装了,当然,IDE现在没有提供的FMX组件

  • 所以,我想如果我处在你的位置,那就足够提交一份合法的QP报告了

    如果您想恢复其他FMX组件,我想您可以考虑将它们添加到您的包中,尽管您可能想检查您的Delphi许可证条款是否允许这样做

    我一直想知道的另一件事是‘当然,其他FMX作者一定遇到过这个问题,尽管谷歌只找到了你的SO帖子?所以可能值得追踪一个最好是免费的FMX库,并查看作者如何解决或避免这个问题


    祝你好运!

    非常感谢Martyn。添加FMX组件将是一件非常痛苦的事情,因为Embarcadero提供了源代码,但没有提供重建的包……见鬼,仅此一点就可能给我们一些见解。我还确信,一定有一些FMX作者在附近的某个地方知道如何解决这个问题。我在EDN上写道论坛,但没有得到答案,但我并没有提交一份QP报告。