gpt4 book ai didi

Delphi:当组件放置在表单上时,错误的单元添加单元到源文件的使用子句

转载 作者:行者123 更新时间:2023-12-03 18:40:18 24 4
gpt4 key购买 nike

我的一个组件有一个奇怪的情况:当组件放置在表单上时,我无法让 Delphi IDE 在源代码中添加正确的单位 .在某些情况下,不仅包括错误的单位,而且正确的单位(我试图使用 TSelectionEditor 后代添加)不包括在内。

这些组件应该是标准 TOpenDialog/TSaveDialog 组件的替代品。它们实际上是代理组件,将根据一些全局配置实例化正确的类型(基本对话框或自定义对话框)。

我已经编写了几个单元来实现所有必要的类和组件,其中一些应该包含在使用组件的任何地方:

  • git.dialogs.pasTComponent已实现注册的后代(以及所有实用程序和公共(public)功能和类)
  • git.dialogs.interfaces.pas包含用于与组件交互的所有接口(interface),应包含在内以访问依赖于实现的属性和方法

  • 组件的注册放在一个名为“git.dialogs.registration.pas”的单元中。它包含一个 TSelectionEditor覆盖 RequiresUnits 的后代方法如下:
    uses System.Classes, GIT.Dialogs, DesignEditors, DesignIntf;

    type
    TGITDialogSelectionEditor = class(TSelectionEditor)
    public
    procedure RequiresUnits(Proc: TGetStrProc); override;
    end;

    procedure register;
    begin
    RegisterComponents('GIT Dialogs', [GIT.Dialogs.TGITFileOpenDialogCpn, GIT.Dialogs.TGITFileSaveDialogCpn]);
    RegisterSelectionEditor(GIT.Dialogs.TGITFileOpenDialogCpn, TGITDialogSelectionEditor);
    RegisterSelectionEditor(GIT.Dialogs.TGITFileSaveDialogCpn, TGITDialogSelectionEditor);
    end;

    { TGITDialogSelectionEditor }

    procedure TGITDialogSelectionEditor.RequiresUnits(Proc: TGetStrProc);
    begin
    inherited;
    Proc('GIT.Dialogs');
    Proc('GIT.Dialogs.Interfaces');
    end;

    然后该类在通常的 register 中注册。使用 RegisterSelectionEditor 的程序.

    理论上,当我将其中一个组件放到表单上时,IDE 应该会自动添加 GIT.DialogsGIT.Dialogs.Interfaces源文件的接口(interface)使用子句的单位。然而,它没有:
  • 它添加了 GIT.Dialogs.Interfaces正确。
  • 它添加了一个未列出的单位GIT.Dialogs.FileDialog.Base其中包含其他几个 TComponent内部使用但未在任何地方注册的后代。
  • 如果源文件已经包含 Dialogs单位(来自 VCL),然后是 GIT.Dialogs不添加单位。

  • 我该如何解决这种情况? GIT.Dialogs.FileDialog.Base的添加单位不是什么大问题,因为它无论如何都会在使用组件时被链接,但事实上 GIT.Dialogs不添加文件需要手动修复组件被删除或使用的每个表单。

    最佳答案

    完全指定默认的 VCL 单元,即 Dialogs应指定为 Vcl.Dialogs .这不仅可以解决在表单上放置此类组件时的特定问题,还有助于消除 other problems也是。习惯使用完全限定的单位名称。

    对于现有的表格,没有其他方法可以重写它们的单元子句。多文档搜索和替换工具可能会很方便。

    关于Delphi:当组件放置在表单上时,错误的单元添加单元到源文件的使用子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40883918/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com