Delphi中Frame的使用方法

Frame是组件面板上的第一个组件,但不是每个人都知道怎么用它,因为它不像Button和Label一样简单明了。实际上,Frame按钮只是打开一个Frame的列表,如果你没有创建任何的Frame,自然什么也不会看到。

那么Frame到底是什么呢?简单来说:

1. Frame是组件容器,类似Panel

2. Frame在使用上类似Components组件,但并没有构造器和解析器,依赖于父容器完成Destroy的工作

3. Frame可以继承和嵌套

4. Frame内部的控件都是公开的,可以在IDE里重置属性和事件,所以frame的内部封装一般都是松散的。访问frame上的组件用frame.control方式

5. Frame的使用范围仅在当前工程内

6. Frame的使用不像一般组件component有独立的功能,很多时候需要和父容器耦合在一起

 

看了半天还是不明白?看个例子吧:

上图是一个客户信息的Frame,因为在客户信息在很多的地方都需要显示,并且带编辑,查询,发邮件等按钮。当然你可以每次用到都拷贝一遍,但是做成frame组件,用的时候只要告诉frame客户id,剩下都交由组件本身完成,岂不是方便很多?

所以,frame和普通components组件一样,都是为复用设计的。只是frame是Delphi的特技,是一种简化版组件。如果你有一组可视化组件的集合,在多个地方重复出现,就应该考虑使用Frame了。

 

如何创建一个Frame呢,如图:

你可以把frame添加到组件面板,如图:

 

Frame在写代码时和一般组件有什么不同呢?比如(1)中的客户信息的frame,如果想重写客户编辑按钮的click事件,会发生什么呢:

procedure TBusOnSiteManager.FrameCustomerButtonEditCustomerClick(Sender: TObject); begin   inherited;   FrameCustomer.ButtonEditCustomerClick(Sender);
end;
可见,IDE会自动加上调用Frame中按钮click的方法,当然,你可以注释掉它,写上自己的代码。

 

因为Frame没有自己的构造器和解析器,如果你想初始化一些东西,可以override frame的以下两个方法:

  public     { Public declarations }     procedure AfterConstruction; override;   //类似OnCreate事件     procedure BeforeDestruction; override; //类型OnDestroy事件   end;

procedure TFrameCustomer.AfterConstruction; begin   inherited;   ParentForm := GetOwner as TTAppSQLForm;  //此处取得父窗口 end;
procedure TFrameCustomer.BeforeDestruction; begin   inherited;
end;

posted @ 2015-04-23 11:37  出离  阅读(1243)  评论(0编辑  收藏  举报