Bri*_*ost 25 delphi components tframe
我在Delphi中使用了多年的框架,它们是VCL最强大的功能之一,但它们的标准使用似乎有一些风险,例如:
很容易意外地移动或编辑框架主机窗体上的框架子组件,而没有意识到你正在"调整"框架 - 我知道这不会影响原始框架代码,但它通常不是你想要的.
使用框架时,您仍然可以使用其子组件进行可视化编辑,即使该框架已有数年之久且不应触及.
所以我开始思考......
是否有一种"分组"组件的方式,使他们的位置"锁定"?这对完成的表格和框架都很有用.通常其他开发人员将代码返回给我,其中只有表单边界发生了变化,甚至他们也不打算进行任何更改.
有没有办法将框架及其组件转换为单个Delphi组件?如果是这样,框架内部构件将完全隐藏,其可用性将进一步增加.
我对任何想法感兴趣......
布莱恩.
Jer*_*ers 24
将帧注册为组件可以解决1.和2:
但是:有一些捕获(可以解决,见文章链接),其中最重要的是这一个:
当您将组件放在框架上,然后将该框架作为组件放在Delphi表单或框架上时,组件在结构窗格中可见.
问题是因为它们在结构窗格中可见,您可以删除它们,从而导致访问冲突.
解决这个问题的诀窍就是不要忘记'小树枝'.
我在DelphiLive 2009 期间从Ray Konopka那里学到了宝贵的一课.
由于课程非常有价值,我在其上写了一篇博文,详细描述了它.
关键部分是这一小段代码(博客文章中有更多细节):
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;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
--jeroen
Joh*_*mas 18
是的,只需将它们注册为组件即可.:-)
正常设计您的框架,然后注册它.另外,请确保不要对不同的单元有不必要的依赖关系,因为在使用"组件"时这些依赖关系.您也可以添加published属性,以便稍后在Object Inspector中使用它们.例如,请参阅IDE生成的以下代码(另请参阅我的注释):
unit myUnit;
uses
...
type
TmyComp = class(TFrame) //set your frame name to be the name your component
ToolBar1: TToolBar; //different components added in the form designer
aliMain: TActionList;
...
published //this section is added by hand
property DataSource: TDataSource read FDataSource write SetDataSource; //some published properties added just for exemplification
property DefFields: string read FDefFields write SetDefFields;
...
end;
procedure Register; //added by hand
implementation
{$R *.DFM}
procedure Register;
begin
RegisterComponents('MyFrames', [TmyComp]); //register the frame in the desired component category
end;
Run Code Online (Sandbox Code Playgroud)
在您选择的软件包中编译上面的内容,安装它并检查组件面板.:-)
HTH
只是为了增加贡献,请注意,如果您转到Structure窗口并右键单击您选择的TFrame名称,然后单击Add to Palete菜单选项.这将使您的Frame中的组件成为一个组件,您不需要创建任何Register过程.;-)
| 归档时间: |
|
| 查看次数: |
10620 次 |
| 最近记录: |