




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1.4 往字符串列表中加入对象字符串列表除了能在Strings属性中贮存字符串外,还可以在Objects属性中贮存对象。与Stings一样,Objects也是可以索引的,它是对象的索引。在应用程序使用列表中的字符串与列表中是否有对象没有多大关系。除非程序特地访问对象,否则Objects中的内容不变,Delphi只是保存了这些信息,应用程序在必要时对其进行操作。有些字符串列表忽略加入的对象。如TMemo部件中代表行的列表对加入其中的对象不保存。还有一些字符串列表,把对象与字符串联系起来,如TNotebook部件的Pages属性,它同时保存着页的名字和代表页的对象。如果应用程序往Pages中加入或删除字符串,Delphi自动的加入或删除与之相应的对象。虽然程序可分配任何类型的对象到列表中,但最常用的是在自画式控制中把位图与字符串联系起来,注意位图与字符串成对使用。Delphi在释放对象的内存空间时并不破坏与之相应的字符串。 操作字符串列表中的对象对于字符串的每一种操作方法,列表中的对象均有相应的方法。例如,应用程序可利用对象的索引来访问对象。与字符串不同的是,不能省略Objects,因为Strings才是列表的缺省属性。表3.1中总结了字符串对字符串和对象操作的方法。表3.1 TStrings的字符串属性和对象操作属性的方法 操 作 字符串对象 访问 Strings属性 Objects属性 加入项目 Add 方法 AddObjects方法 插入项目 Insert方法InsertObjects方法 项目定位 Indexof方法 IndexofObject方法Delete,Clear,More操作整个项目,即删除字符串时把相应的对象也删除了。但LoadFromFile,SaveToFile方法只对字符串进行操作。 加入对象如果把对象与已存在的字符串联系起来,Delphi将分配给该对象同样的索引号。例如,一个叫Fruits的列表中有字符串(apple),程序可将名为AppleBitmap的位图与apple字符相联系。With Fruits do ObjectsIndexof(apple):=AppleBitmap;另一种方法是调用列表的AddObject方法,AddObject有两个参数:字符串和对象,如下:Fruits AddObject(Apple,AppleBitmap);3.2 字符串列表应用 Delphi应用程序经常要用到字符串列表,我们编写的strlist. dpr是应用字符串列表的简单程序。程序运行状态如图3.2所示。列表框列出了屏幕支持的各种字体名称,并且以名称所代表的字体显示在列表中;Tabs的标签不只以字符串来表示,而且附有位图。这就是所谓的自画式控制。下面介绍字符串列表在自画式控制中的应用。 列表框、组合框、Tabset部件中有一个叫“自画(Ownerdraw)”的风格,它能替代Windows的文本输出,部件的自画式控制在运行状态对每个项目进行重新绘制。最常用的是用图像代替文本输出。自画式控制有一个共同特点:它们都包含有项目列表,缺省情况下这些列表就是字符串列表,Windows把它们当成文本显示。Delphi可以把字符串列表与某一对象相联系,这就使得应用程序能用对象来绘制项目。通常,创建自画式控制有以下三个步骤:1. 设置自画风格;2. 把图像对象加入字符串列表中;3. 绘制自画项目。3.2.1 设置自画风格每个能进行自画式控制的部件都有一个叫Style的属性,Style决定部件是以缺省方式还是以自画方式绘制项目。对于列表框和组合框,也有自画式风格选项,表3.2列出了Style的取值及含义。表3.2 Style的取值及含义Style 含义举例Fixed 每个项目有相同的高度 1bOwnerDrawFixed 高度由ItenHeight属性决定 csOwnerDrawFixedVarible 每个项目有不同的高度 1bOwnweDrawVarible 由运行数据决定 csOwnerDrawVaribletab-set与字符串网格的Style属性通常是Varible.在Strlist程序中,列表框与tab-set取值如表3.3:表3.3 列表框与tab-set的取值名称styleListBox1 lbOwnerDrawVariableTabset1 tsOwnerDrawVariable 3.2.2 把图像加入字符串列表上节已介绍如何把对象加入字符串列表,例程把位图对象加入Tabset1的Tabs中:procedure TForm1.FormCreate(Sender: TObject);varBitmap: TBitMap;beginListbox1.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的声明如下:ListBox1 MeasureItem(Control: TwinControl;Index: Integer; var Height: Integer);例程中响应OnMeasureItem事件的代码如下: procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;var Height: Integer);beginwith ListBox1.Canvas dobeginFont.Name := ListBox1.ItemsIndex;Height := TextHeight(A);end;end;procedure TForm1.TabSetMeasureTab(Sender: TObject; Index: Integer;var TabWidth: Integer);varBitmapWidth: Integer;beginBitmapWidth := TBitmap( TabSet1.Tabs.ObjectsIndex).Width;Inc(TabWidth, 2 + BitmapWidth);end;在OnMeasureItem事件发生后,Windows激发一个叫OnDrawItem的事件,这个事件也随部件名称不同而不同,常见的有OnDrawItem、OnDrawTab、OnDrawCell。OnMeasureItem的声明如下:DrawItem( Control: TWinControl; Index: integer; Rect: TRect; State: TOwnerDraw);其中Control是包含项目的部件引用Index是项目的索引号Rect 是绘制的矩形State 是项目的状态,如选中,得到焦点等。在例程的列表框中,所列项目是屏幕支持的各种字体名称,当列表框发生OnDrawItem事件时,程序把输出字体设置成该项目所代表的字体,因而列表框的项目呈现出不同的字体,其代码如下: procedure TForm1.DrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState);beginwith ListBox1.Canvas dobeginFillRect(Rect);Font.Name := ListBox1.ItemsIndex;TextOut(Rect.Left, Rect.Top, ListBox1.ItemsIndex);end;end;在Tabset部件中,则把位图与文本同时输出,其代码如下:procedure TForm1.TabSet1DrawTab(Sender: TObject; TabCanvas: TCanvas;R: TRect; Index: Integer; Selected:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国际经济贸易领域招聘面试预测题与解析大全
- 2025年制造业生产管理岗位竞聘面试模拟题与实战技巧
- 2025年微纤维玻璃棉项目发展计划
- 抽油机基础知识培训
- 2025年公寓式酒店项目合作计划书
- 2025年VXI总线各类卡式仪器项目合作计划书
- 2025年光电器件用低温封接玻璃合作协议书
- 2025-2026学年北师大版(2024)小学数学三年级上册《里程表》教学设计
- 2025年拉杆球头项目合作计划书
- 抗酸染色课件
- 乳牙根管治疗的护理配合
- 经编车间安全操作规程模版
- 《小学三年级英语开学第一课》课件
- 新入职教师安全培训
- 2023年gmp指南教学课件
- 突发性耳聋演示课件
- 中医基础理论9病机课件
- 2023年全国出版专业技术人员职业资格考试出版专业基础知识(中级)试题及参考答案
- ISO22000-2018全套程序文件模板
- 胃恶性肿瘤的护理查房
- 软件正版化培训课件
评论
0/150
提交评论