delphi将自定义文件编辑器集成到IDE中

delphi将自定义文件编辑器集成到IDE中,delphi,ide,integration,Delphi,Ide,Integration,我开发了一个自定义文件类型,以及一个自定义编辑器(基本上是一个带有多个数据页和几个额外按钮的树)。好的,我可以单独运行它,这很好,甚至可以将它添加到“工具”菜单中,但是我想将它集成到Delphi IDE中,这样我的自定义编辑器(或类似的新版本)就会出现在IDE中,就像DFM文件有自定义编辑器一样。我可以在DelphiIDE中找到对大多数扩展的引用,但这一个没有。有向导吗?请注意,这不是一个属性或组件编辑器(文件类型与这两者都无关),也不是简单的文本文件语法高亮显示。AFAIK目前无法将自定义编辑

我开发了一个自定义文件类型,以及一个自定义编辑器(基本上是一个带有多个数据页和几个额外按钮的树)。好的,我可以单独运行它,这很好,甚至可以将它添加到“工具”菜单中,但是我想将它集成到Delphi IDE中,这样我的自定义编辑器(或类似的新版本)就会出现在IDE中,就像DFM文件有自定义编辑器一样。我可以在DelphiIDE中找到对大多数扩展的引用,但这一个没有。有向导吗?请注意,这不是一个属性或组件编辑器(文件类型与这两者都无关),也不是简单的文本文件语法高亮显示。

AFAIK目前无法将自定义编辑器可靠地集成到Delphi IDE中。所需的API根本不存在。看

在Delphi2010和XeBetas期间,我花了大部分业余时间尝试集成资源编辑器。尽管这一努力得到了Embarcadero的官方支持,并得到了IDE工程师的一些半心半意的支持,但我始终无法让他们兑现承诺并发布模块API。我最终放弃了这个项目

更新:我现在检查了关于这一点的旧通信,结果发现部分问题是
IOTAModuleCreator
(用于实现文件|自定义文件类型的新功能)和
IoDaeditorContent
(用于向自定义模块传输数据或从自定义模块传输数据)只支持文本数据。二进制数据被破坏。

您可能可以通过使用ToolsAPI的IDE插件来实现这一点(请参阅IDE源文件夹中的ToolsAPI.pas(例如,
程序文件(x86)\Embarcadero\Studio\source\ToolsAPI\ToolsAPI.pas

有关编写插件的一般信息,请参阅。一旦您了解了基础知识,即编写“向导”并让它完成一些工作,您就需要集成编辑器

我从来没有这样做过,所以我不能保证这是可能的。但是,一些看起来值得研究和实现的接口是
INTACustomEditorView
,它代表一个“视图”(文件打开时的文件选项卡-想想代码编辑器、欢迎视图、类型库编辑器等)和
IOTADEditorViewServices
,以注册您的自定义视图。我不知道如何将视图类型与文件类型相关联,抱歉-可能与个性界面有关。您可能还对
INTACustomEditorSubView
感兴趣,它在文件底部创建了一个选项卡


祝你好运,如果你找到了解决办法,请写在这里,这样其他人也可以学习!

很有趣。请看我的答案,这意味着什么(尽管我从未做过)可以创建自定义视图。但我不知道如何将其与文件类型关联。您是否尝试了这些方法,并发现IDE需要更多的公开信息?API只允许注册自定义模块处理程序(自定义文件类型的处理程序)和读取模块数据。API不提供任何从编辑器回写数据的方法。因此,可以使用自定义模块查看器,但不能使用模块编辑器。也就是说,正如您的回答正确指出的,可以创建自定义视图,因此,如果您不介意数据不能通过正常的IDE机制保存,那么这就是kinda是可能的。但编辑器不会真正集成。它看起来更像是一个独立的应用程序,已停靠在IDE中。这一切都非常令人兴奋。我的自定义文件类型是纯文本,所以这不是一个问题,我只需要一个编辑器来编辑一个文件类型。我确实需要保存数据,但不需要通过IDE。这不是问题它不是典型的流式或派生自TPersistent。至于它是一个停靠在IDE中的独立应用程序,我不确定。当然,在项目管理器中单击该文件将打开编辑器?如果是,这就是我所需要的。向导在IDE中生成两个文件并修改另外两个文件,因此我必须解决如何不显示y Delphi正确,但这一切听起来都是可行的。我仍然有一些源代码展示了自定义文件类型和编辑器集成的基本实现。如果你愿意,我可以将其发送给你。明白了。我会准备源代码并尽快将其发送给你。我建议你删除你的评论以保护你的电子邮件地址。谢谢你的帮助。我有一直在使用Marco Cantu的优秀著作,并创建了几个属性和组件编辑器,是的,我确实创建了一个向导,它运行得很好。我甚至把它添加到菜单系统中,但是它并没有紧密地集成到系统中,因为我不能自动添加我需要的文件引用。我确实考虑了CREA。设置一个只包含文件名的组件并创建一个组件编辑器,但结果会不太好。如果自定义文件类型为文本,它看起来(从这里的另一个答案来看)会起作用。您可以将编辑器添加为子视图。这样就够了吗?嗨,David。我不确定您所说的子视图是什么意思?您指的是选项卡吗(如代码、设计、历史)在主编辑器中?如果是,是的,这正是我所需要的。我不需要文本作为子视图,但我不介意它是否存在。我将始终通过树编辑器进行编辑。我希望向上投票。我已经尝试过两次(一次是在看到答案时,刚刚尝试过)但是它被拒绝了。显然我没有足够的声誉。对不起,我一直在浏览ToolsAPI.pas,看起来我应该能够做我想做的事情,但是我是通过一个模块(没有很好的文档记录,但看起来像我需要的)还是一个向导(有更好的文档记录,但不是真正针对我想做的事情)这仍然是一个悬而未决的问题。我倾向于尝试这两种方法,因为一种方法更可能成功,但如果我能让它发挥作用,另一种方法会更好。@DavidM对我来说是+1。我也认为你的答案是值得的。