通常,创建自画式控制有以下三个步骤:
1. 设置自画风格;
2. 把图像对象加入字符串列表中;
3. 绘制自画项目。
3.2.1 设置自画风格
每个能进行自画式控制的部件都有一个叫Style的属性,Style决定部件是以缺省方式还是以自画方式绘制项目。
对于列表框和组合框,也有自画式风格选项,表3.2列出了Style的取值及含义。
表3.2 Style的取值及含义
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Style 含 义 举 例
─────────────────────────────────
Fixed 每个项目有相同的高度 1bOwnerDrawFixed
高度由ItenHeight属性决定 csOwnerDrawFixed
Varible 每个项目有不同的高度 1bOwnweDrawVarible
由运行数据决定 csOwnerDrawVarible
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
tab-set与字符串网格的Style属性通常是Varible.
在Strlist程序中,列表框与tab-set取值如表3.3:
表3.3 列表框与tab-set的取值
━━━━━━━━━━━━━━━━━━━━━━━━━━
名称 style
──────────────────────────
ListBox1 lbOwnerDrawVariable
Tabset1 tsOwnerDrawVariable
━━━━━━━━━━━━━━━━━━━━━━━━━━━
3.2.2 把图像加入字符串列表
上节已介绍如何把对象加入字符串列表,例程把位图对象加入Tabset1的Tabs中:
procedure TForm1.FormCreate(Sender: TObject);
var
Bitmap: TBitMap;
begin
Listbox1.Items := Screen.Fonts;
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('PHONE.BMP');
Tabset1.Tabs.AddObject('phone',Bitmap);
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('PRINTER.BMP');
Tabset1.Tabs.AddObject('printer ',Bitmap);
end;
3.2.3 绘制自画项目
当部件的Style属性是自画式时,Windows不再绘制部件,相反Windows为每个可视项目产生事件,而应用程序必须在事件中绘制项目。
在应用程序绘制自画控制之前,Windows产生测量项目事件,这个事件告诉程序项目显示的位置 。
通常由Windows决定项目显示的大小,但应用程序可以处理这个事件并自己选择显示区域。例如,程序要用位图代替文本显示,则需要把区域设置成位图的大小。测量项目事件的名称随部件的名称不同而不同,对于列表框和组合框,该事件叫OnMeasureItem。对于Tabset,该事件叫OnMeasureTab。
测量项目事件有两个重要参数: 项目索引号与项目的大小。这个大小是变化的。后继项目的输出位置由前面项目的大小决定。例如,在自画式列表框中,如果应用程序把第一个项目的高度设置成5个象素点,则第二个项目在第六个象素点开始输出。列表框和组合框中,应用程序只能设置成项目的高度,而项目的宽度就是部件的高度。在Tabset中,tabs的宽度是可变的,而高度则是固定的。自画式网格允许应用程序改变网格单元的高度和宽度。
OnMeasureItem的声明如下:
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




