Delphi: TFrame 错误没有可插入的帧

Delphi: TFrame error No frames are available to insert

我碰巧 Delphi XE6 IDE 忘记了 我过去创建的所有 TFrame 后代。

更具体地说,当我点击标准 -> 框架时,选择我的框架的对话框不再显示。

而是显示以下错误消息:

No frames are available to insert. New frames may be created from the File|New|Other selections..

有办法补救吗?

EDIT1 遗憾的是无法重现步骤:老实说,我不确定这是怎么发生的,但确实发生了。我认为从某些版本的 Delphi 升级到另一个版本时可能是罪魁祸首。随着时间的推移我多次升级,我记得在 Delphi 7 开始这个项目,然后有一些我不记得是哪些版本,我使用的最后两个版本是 XE2,直到现在是 XE6 .


Edit2 如果框架是使用 XE2 之前的 Delphi 版本创建的,则会发生这种情况。

问题的原因在于添加 Firemonkey 框架时对 .dproj 文件的更改。为了区分为 vcl 制作的帧和为 fmx 制作的帧,在 .dproj 文件中添加了一行,如下所示。要更正 .dproj 文件,请执行以下操作:

  1. 关闭 Delphi IDE.

  2. 使用您选择的文本编辑器打开 .dproj 文件。

  3. 一一查找TFrame

  4. 假设以下是您的 TFrame 部分:

    <DCCReference Include="Results.pas">
        <Form>FrameResults</Form>
        <DesignClass>TFrame</DesignClass>
    </DCCReference>
    
  5. 修复方法是将以下行添加到该部分:

        <FormType>dfm</FormType>
    

(在 fmx 项目中,行是 <FormType>fmx</FormType>

我遇到过这种情况;就我而言,它要简单得多。

我有一个有一些框架的 fmx 项目和一个没有在单个项目组(不同的子目录)中的 vcl 项目。

如果我打开一个 fmx 单元并尝试从组件菜单添加一个框架,但将 vcl 项目作为编译目标,那么我会收到此消息。将编译目标更改为包含我打开的单元和帧集合的应用程序停止了错误。

IDE 中似乎有错误。具体来说,IDE提供了IOTASourceEditor接口,其中有CreateWriter方法获取IOTAEditWriter接口。

一些 IDE 扩展可能使用 IOTAEditWriter 接口的方法来(例如)编辑 .dpr 文件的内容(基本上,只是一系列 .DeleteTo.Insert 足够)。显然,这会以某种方式迫使 IDE 损坏 .dproj 文件。