PanelOutlook VCL 组件介绍
作者:张 翔该组件包括 PanelOutlook.dcu(组件程序文件)、PanelOutlookReg.dcu(组件注册文件)、PanelOutlookReg.dcr(组件图标文件)、bitmap.res(组件资源文件)、PanelOutlookD60.dcu(组件包文件)。正确安装该组建后面板会出现三个组件,分别如图 OutlookFrame、 OutlookSheet、 OutlookChildButton。下面分别介绍这三个组件的功能。一:OutlookFrame  
该组件是PanelOutlook组件中的框架组件,通过对该组件的设置可以实现对其内部的OutlookSheet进行设置以及管理,所以OutlookSheet组件需要放在OutlookFrame上面才会显示分页效果。
主要属性:
1. About:
该组件的版本以及作者信息。
2. ActiveSheet:Integer :
Frame中当前的激活的Sheet页0表示第一个
3. AutoSetSheet:TAutoSetSheet :
是否设置sheet页的具体内容与Frame中设置的相同,其中TAutoSetSheet定义如下:
TAutoSetSheets=(alBigSize,alSmallSize,alColor,alLargeButton,alFlat,alFont);
TAutoSetSheet=set of TAutoSetSheets;
通过设置不同的属性可以设置Sheet页中的相关属性是否根据Frame中的属性变化。
4. Align
5. SheetColor:Tcolor
Sheet页的颜色。
6. BigSize:integer
当Sheet显示为大图标时的尺寸。
7. SmallSize:integer
当Sheet显示为小图标时的尺寸。
8. LargeButton:Boolean
Sheet页中显示的图标是否为大图标,True为大图标,False为小图标。
9. Flat:Boolean
Sheet页中的图标是否为Flat样式。
10. SheetFont:TFont
Sheet页中的字体。主要方法:
1. function SetActiveByName(const SheetName:String):boolean;
说  明:通过Sheet的Name来设置当前页。
参  数:SheetName 为当前页的Name。
返回值:成功返回 True,否则返回架。注意事项:
1. Frame只对其内部的Sheet页进行管理,管理内容包括位置、大小和当前页等。Frame不能对去外部的Sheet页及以在其内部不是Sheet组件进行管理。本人建议不要再其内部放置其它组件。
2. 在设计期间如果改变Frame的大小或ActiveSheet属性值,Sheet组建会重新排列位置,所以Sheet页就会把Frame全部覆盖,再次放置Sheet时要注意不要把Sheet放在其它的Sheet上。
3. 为了使Frame内部的所有Sheet风格一致,建议把AutoSetSheet属性设置成所有值也就是:(alBigSize,alSmallSize,alColor,alLargeButton,alFlat,alFont)。这样修改Frame的属性时起包含的Sheet页会跟随一起变化。二:OutlookSheet  
该组件是Frame的Sheet页组件,本组件主要对其内部的Button进行管理和控制。
主要属性:
1. About:
该组件的版本以及作者信息。
2. AutoSetChildButton:TAutoSetChildButton
是否设置其内部的Button的属性与自己相同,其中TAutoSetChildButton的定义如下:
TAutoSetChildButtons=(clFont,clFlat);
TAutoSetChildButton= set of TAutoSetChildButtons;
通过设置不同的值来控制其内部的Button的属性与Sheet相同。
3. BigSize:Integer
大图标时Button的大小。
4. ButtonCaption:Tcaption
Sheet中上方按钮的Caption。
5. Flat:Boolean
Sheet内部的Button是否为Flat样式。
6. Font:TFont
Sheet的字体,如果在AutoSetChildButton中包括clFont同时也设置Button的字体。
7. SmallSize:Integer
小图标时Button的大小。
8. Sound:Boolean
在单击Sheet也上方按钮是否有声音。
9. LargeButton:Boolean
其内部的Button是否为大图标。具体含义同Frame。主要事件:
1. OnClick:
当鼠标单击Sheet页上方的按钮时触发该事件。主要方法:
1. procedure RefreshButton;
刷新其内部Button的位置、大小、样式等。当出现内部Button排列不正常时可以通过该函数来重新排列Button。注意事项:
1. Sheet页只能对其内部的OutlookChildButton组件进行管理与控制,所以不建议放入其它组件。
2. 当Sheet的大小改变时,Sheet会根据具体Button的情况来设置Button的位置,所以开发人员不需考虑Button的位置问题。
3. 在Sheet不能全部显示所有的Button时,Sheet会自动的显示上翻和下翻按钮以提供Button移动功能。
4. 为了保持内部Button风格的一致建议AutoSetChildButton属性设置为(clFont,clFlat)。三:OutlookChildButton  
该组件的父类为TSpeedButton所以具有其全部的属性,在这里只介绍本人开发时新增加的属性和有所改动的属性。主要属性:
1. About:
该组件的版本以及作者信息。
2. LabelPosition:TLabelPosition
在Button边的Label的位置可用的值为:lpBelow,lpAbove, lpLeft, lpRight。
3. Caption:String
这里的Caption为位于Button边的Label的Caption而不是Button的Caption。
4. ButtonSpace:integer
Label与Button之间的距离。
5. Font:TFont
Label的字体。主要事件:
1. OnMouseMoveLeave
当鼠标离开时触发该事件。结束语
历时一个月,在我的工作之余终于编写完成了类似Outlook、QQ面板的组件。我暂且命名为PanelOutlook,在编写的过程中我又重新地认识了Delphi,在这个美妙的语言中我深深地爱上了她,无论是从程序的设计思想还是语言结构上我都非常的喜欢。虽然我以前用过诸如PB、VB、VC但是从内心来说我还是热衷于Delphi,因为它的组件思想给了我们更加发挥的空间,初学者无需懂得太多的Windows编程原理就可以编写出非常漂亮的程序;而对于高级程序设计者来说她强大的对Windows的支持给了我们像VC一样的功能。
以上是我的一点点地观点,不知大家能否认同,如果大家有兴趣和我一起讨论Delphi得知识请给我发E-mail:[email protected]。同时也希望大家能够指出本组件的缺点以求达到做好的效果。
希望大家和我联系。谢谢大家使用我的软件。效果图、例子程序:http://www.pdriver.com/bbs3/cgi-bin/topic.cgi?forum=7&topic=118&show=0