Cos*_*und 8 forms delphi repository delphi-2010
我有一个我需要在多个项目中继承的自定义框架.这个框架包含一些代码和一些组件,它位于磁盘上的某个位置,位于它自己的项目目录中.我不想将它复制到Object Repository文件夹,这对我来说似乎不对:我最终有两个表单副本,一个在我的Mercurial支持的存储库中,一个在Delphi的Object Repository中.绝对不是个好主意.
我想要的是让我的框架在一个包中,并让包执行使IDE知道框架所需的所有内容,并允许IDE创建给定框架的新兄弟,而无需实际将框架添加到每个项目.
到目前为止我做了什么,我遇到的问题,我试过的解决方案:
RegisterClass和RegisterNoIcon. 问题:当我进入一些其他的项目,并尝试打开得出的帧编辑它说,它无法找到我原来的框架.RegisterCustomModule(TMyFrameName, TCustomModule).问题:在"其他"项目中,我打开派生框架,IDE不会在原始框架上创建组件,并且IDE抱怨其中一个"继承"组件缺失.InitInheritedComponent(Self, TFrame).这有助于,当我尝试在"其他"项目中打开框架时,所有内容都重新创建,我能够按照我的预期看到框架.问题:当我保存框架时,它会忘记所有有关继承组件的内容,将每个组件视为添加到此特定框架的新组件.如果我查看保存的DFM,一切都以"对象"开头,没有任何东西以"继承"开头,正如我所料.不幸的是我遇到了问题"3".我尝试深入研究Classes.pas,ToolsAPI,DesignIntf和DesignEditors,但没有找到任何有用的东西.显然我希望在DFM中看到的"继承"属性是由TWriter在流式传输TComponent之前分配"TWriter.Ancestor"属性时生成的,但是我无法设置它,IDE需要设置它起来.我不能说服IDE为我做这件事.
以下是累积的相关代码部分:
TTestFrame = class(TFrame)
public
constructor Create(Owner:TComponent);override;
end;
constructor TTestFrame.Create(Owner: TComponent);
begin
inherited;
if csDesignInstance in ComponentState then InitInheritedComponent(Self, TFrame);
end;
procedure Register;
begin
RegisterClass(TTestFrame);
RegisterNoIcon([TTestFrame]);
RegisterCustomModule(TTestFrame, TCustomModule);
end;
Run Code Online (Sandbox Code Playgroud)
任何想法,除了"放弃并将你的东西放入对象存储库"?谢谢!
编辑
为什么我需要这样做以及为什么依赖于实际路径名称的解决方案被写入我的项目文件中的原因不起作用:我想支持分支:当一个分支时,合理地期望同一个项目的多个版本"活着"同一台机器上的不同目录.推论,我不能在同一个地方同时拥有同一个项目的多个版本.
为了确保这项工作,我决定让我的项目不依赖于生活的地方,为了实施这一点,我的团队克隆(Mercurial术语)或Check Out(SVN术语)的每个人都在不同的目录中.我系统上的硬编码路径在我的同事系统中不会很好:如果我们中的任何一个人犯了将任何路径硬编码到应用程序中的错误,那么它不久就会对我们中的一个进行制动,所以错误得到修复.
这当然是我们需要继承的某些库(因此它们不在我们项目的目录中)的一部分的表单和框架的问题!为了在处理这些文件时获得IDE支持,我们需要暂时将它们添加到项目中,我们不必忘记在完成后删除它们.如果我们忘记并推送/检查更改,更改将为我们的同事制造构建(因为他们在不同位置检查了库).
为了解决这个问题,我尝试将这些框架和表单添加到设计时包中(使用完整路径将包加载到IDE中,但路径不是项目文件的一部分,所以没关系).不幸的是,这失败了,我发布了这个问题.
呃,如果只是将要重用的框架添加到要重用的项目中,有什么问题吗?
例如
编辑
如果您不想在 dpr 中包含框架的硬编码路径,则始终可以使用 IDE 的环境变量。
| 归档时间: |
|
| 查看次数: |
5060 次 |
| 最近记录: |