计算机等级考试二级Delphi辅导知识:字符串列表及应用_第3页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2012年12月27日
 3.1.3.2 长期字符串列表 
  如果要在程序运行的任何时候使用字符串列表,则需在程序开始运行时就创建列表,并在程序终止前释放。
  运行时创建字符串列表的步骤为:
  1. 在程序主窗体对象的域中加入TStringsList类型的域;
  2. 在主窗体的OnCreate事件中创建句柄,该事件句柄在主窗体显示前运行;
  3. 在创建事件句柄后,创建字符串列表对象;
  4. 在主窗体的OnDestroy事件创建句柄,该事件句柄在主窗体消失之前运行。
  这样,在程序运行过程中,任何过程、事件均能访问该字符串列表。
  以下代码在程序中加入了一个Clicklist的字符串列表,用户每按一次鼠标键,程序往Clicklist中加入一字符串,程序结束前把该列表存入文件。 
  unit Unit1; 
  interface 
  uses WinTYpes, WinProcs, Classes, Graphics, Forms, Controls, Apps; 
  type
  TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  private
  { Private declarations }
  public
  { Public declarations }
  ClickList: TStrings; {declare the field}
  end; 
  var
  Form1: TForm1; 
  implementation 
  {$R *.DFM} 
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  ClickList := TStringList.Create; {construct the list}
  end; 
  procedure TForm1.FormDestroy(Sender: TObject);
  begin
  ClickList.SaveToFile(ChangeFileExt(Application.ExeName, ’.LOG’));
  {save the list}
  ClickList.Free; {destroy the list object}
  end; 
  procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  begin
  ClickList.Add(Format(’Click at (%d, %d)’, [X, Y])); {add a
  string to the list}
  end; 
  end.
  3.1.4 往字符串列表中加入对象 
  字符串列表除了能在Strings属性中贮存字符串外,还可以在Objects属性中贮存对象。与Stings一样,Objects也是可以索引的,它是对象的索引。
  在应用程序使用列表中的字符串与列表中是否有对象没有多大关系。除非程序特地访问对象,否则Objects中的内容不变,Delphi只是保存了这些信息,应用程序在必要时对其进行操作。
  有些字符串列表忽略加入的对象。如TMemo部件中代表行的列表对加入其中的对象不保存。还有一些字符串列表,把对象与字符串联系起来,如TNotebook部件的Pages属性,它同时保存着页的名字和代表页的对象。如果应用程序往Pages中加入或删除字符串,Delphi自动的加入或删除与之相应的对象。
  虽然程序可分配任何类型的对象到列表中,但最常用的是在自画式控制中把位图与字符串联系起来,注意位图与字符串成对使用。
  Delphi在释放对象的内存空间时并不破坏与之相应的字符串。 
  3.1.4.1 操作字符串列表中的对象 
  对于字符串的每一种操作方法,列表中的对象均有相应的方法。例如,应用程序可利用对象的索引来访问对象。与字符串不同的是,不能省略Objects,因为Strings才是列表的缺省属性。
  表3.1中总结了字符串对字符串和对象操作的方法。 
  表3.1 TStrings的字符串属性和对象操作属性的方法
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
  操 作 字 符 串 对 象
  ───────────────────────────────
  访 问 Strings属性 Objects属性
  加入项目 Add 方法 AddObjects方法
  插入项目 Insert方法 InsertObjects方法
  项目定位 Indexof方法 IndexofObject方法
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
  Delete,Clear,More操作整个项目,即删除字符串时把相应的对象也删除了。但LoadFromFile,SaveToFile方法只对字符串进行操作。 
  3.1.4.2 加入对象 
  如果把对象与已存在的字符串联系起来,Delphi将分配给该对象同样的索引号。例如,一个叫Fruits的列表中有字符串(’apple’),程序可将名为AppleBitmap的位图与apple字符相联系。 
  With Fruits do Objects[Indexof(’apple’)]:=AppleBitmap; 
  另一种方法是调用列表的AddObject方法,AddObject有两个参数:字符串和对象,如下: 
  Fruits AddObject(’Apple’,AppleBitmap); 
  3.2 字符串列表应用 
  Delphi应用程序经常要用到字符串列表,我们编写的strlist. dpr是应用字符串列表的简单程序。程序运行状态如图3.2所示。列表框列出了屏幕支持的各种字体名称,并且以名称所代表的字体显示在列表中;Tabs的标签不只以字符串来表示,而且附有位图。这就是所谓的自画式控制。下面介绍字符串列表在自画式控制中的应用。
  列表框、组合框、Tabset部件中有一个叫“自画(Ownerdraw)”的风格,它能替代Windows的文本输出,部件的自画式控制在运行状态对每个项目进行重新绘制。最常用的是用图像代替文本输出。
  自画式控制有一个共同特点:它们都包含有项目列表,缺省情况下这些列表就是字符串列表,Windows把它们当成文本显示。Delphi可以把字符串列表与某一对象相联系,这就使得应用程序能用对象来绘制项目。
  通常,创建自画式控制有以下三个步骤:
  1. 设置自画风格;
  2. 把图像对象加入字符串列表中;
  3. 绘制自画项目。 

相关文章