我在Delphi中使用了多年的框架,它们是VCL最强大的功能之一,但标准使用它们似乎有一些风险,如:
>在框架的主机表单上意外移动或编辑框架子组件很容易,而不意识到您正在对框架进行“调整” – 我知道这不会影响原始的框架代码,但通常不是您想要的。
>当使用框架时,您仍然会将其子组件暴露在可视化编辑中,即使该框架是多年,也不应该被触摸。
所以我想到了….
>有没有一种“分组”组件的方式,使他们的位置“锁定”?这对于完成的表单和框架将是有用的。通常,其他开发人员向我发送代码,只有形式界限发生了变化,甚至没有任何改变。
>有没有办法将框架及其组件转换成单个Delphi组件?如果是这样,框架内部将被完全隐藏,其可用性将进一步增加。
我对任何想法感兴趣…
布莱恩。
解决方法
将框架注册为组件可解决1.和2:
>当您将框架控件放在窗体或其他框架上时,框架上的组件将被锁定
>您将获得一个您可以设计视觉的组件(实际上是:控件)
但是,有几个catch(可以解决,看文章链接),其中最重要的是这一个:
将组件放在框架上,然后将该框架作为组件放在Delphi窗体或框架上时,组件在“结构窗格”中可见。
问题是因为它们在结构窗格中可见,您可以删除它们,从而导致访问冲突。
解决这个到not forget the ‘sprig’的伎俩。
我从Ray Konopka年DelphiLive年度获得了宝贵的教训。
由于课程非常有价值,所以我写了一个blog post,详细描述。
procedure RegisterFramesAsComponents(const Page: string; const FrameClasses: array of TFrameClass); var FrameClass: TFrameClass; begin for FrameClass in FrameClasses do begin RegisterComponents(Page,[FrameClass]); RegisterSprigType(FrameClass,TComponentSprig); end; end;
希望这可以帮助。
–jeroen