程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第三章-字符串列表及應用(二)(1)

第三章-字符串列表及應用(二)(1)

編輯:Delphi

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. 繪制自畫項目。 

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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved