程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第六章-文件管理(二)(5)

第六章-文件管理(二)(5)

編輯:Delphi

6.4.3 文件控件的聯系

在本例中我們使用了一組新的控件:TabSet、DirectoryOutline、FileListBox,用於顯示和選擇驅動器、目錄和文件。與(6.3)中所用方法相比,使用這一組控件需要少量的代碼支持。

TabSet與DirectoryOutline的聯系在TabSet的Click事件處理過程中建立:

With DriveTabSet do

DirectoryOutline.Drive := Tabs[TabIndex][1];

DirectoryOutline與FileListBox的聯系在DirectoryOutline的Change事件處理過程中建立:

FileList.Directory := DirectoryOutline.Directory;

FileList.Update;

6.4.4 DriveTabSet的自畫風格顯示 

Dephi為一些控件提供了自畫風格的顯示,如ListBox、ComboBox、TabSet等。 在缺省情況下,這些控件自動顯示文本。而在自畫風格下,擁有控件的窗體在運行時間內自己畫出控件的每一項目。

自畫風格顯示通常的應用是為項目除文本外再添加圖形顯示。能以自畫風格顯示的控件有一個共同特點:都擁有一個TStrings類型的項目鏈。由於TStrings類的特點(參第三章),它們都可以加入一個和對應文本相聯系的對象。 而這正是自畫風格顯示的關鍵。

通常情況下產生一個自畫風格需要三個步驟:

1.設置自畫風格;

2.向字符串鏈表添加圖形對象;

3.畫出自畫項目。 

6.4.4.1 設置自畫風格 

控件屬性Style 用於設置自畫風格。對於DriveTabSet,我們把Style 屬性設置為tsOwnerDraw。

對於ListBox、ComboBox等控件的設置與TabSet略有差異,讀者可參閱聯機幫助文檔。 

6.4.4.2 向字符串鏈表添加圖形對象 

1.在應用程序中添加圖片部件

在本程序中我們設置了三個圖片部件NetWork、Floppy、Fixed,並分別與三個位圖文件NetWork.bmp、Floppy.bmp、Fixed.bmp相關聯。

2.把圖片添加到字符串鏈表中

根據字符串鏈表的性質,我們可以把對象與已存在的字符串建立聯系,也可以同時添加字符串和對象。這裡我們采用後一種方法。

在子窗口的OnCreate事件處理過程中,我們利用一個循環依次檢測從a到z的驅動器是否存在以及驅動器的類型。這利用了Windwos API函數GetDrivetype, 如果驅動器不存在則返回0,否則返回驅動器的類型(DRIVE_REMOVABLE、DRIVE_FIXED、DRIVE_REMOTE)。根據驅動器類型我們可以判斷與文本(驅動器名)同時添加到Tabs中的不同圖形對象。在添加過程中,DriveTabSet的TabIndex被設置為當前驅動器。

程序清單如下: 

procedure TFMForm.FormCreate(Sender: TObject);

var

Drive, AddedIndex: Integer;

DriveLetter: Char;

begin

for Drive := 0 to 25 do

begin

DriveLetter := Chr(Drive + ord('a'));

case GetDrivetype(Drive) of

DRIVE_REMOVABLE:

AddedIndex := DriveTabSet.Tabs.AddObject(DriveLetter, Floppy.Picture.Graphic);

DRIVE_FIXED:

AddedIndex := DriveTabSet.Tabs.AddObject(DriveLetter, Fixed.Picture.Graphic);

DRIVE_REMOTE:

AddedIndex := DriveTabSet.Tabs.AddObject(DriveLetter, Network.Picture.Graphic);

end;

if UpCase(DriveLetter) = UpCase(FileList.Drive) then

DriveTabSet.TAbIndex := AddedIndex;

end;

end;

6.4.4.3 畫出自畫項目 

當把一個控件的風格設置為自畫時,Windows不再負責往屏幕上畫出控件的項目,而是為每個可見項目產生自畫事件。應用程序可以通過處理自畫事件畫出控件的項目。 

1.確定自畫項目的大小 

對於TabSet而言,這在OnMeasureTab事件處理過程中完成。我們需要把DriveTabSet每個標簽的寬度增大到足以同時放下文本和位圖。 

procedure TFMForm.DriveTabSetMeasureTab(Sender: TObject; Index: Integer;

var TabWidth: Integer);

var

BitmapWidth: Integer;

begin

BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;

Inc(TabWidth, 2 + BitmapWidth);

end;

由於TStrings的Objects屬性中存放的對象都是TObject類型,並沒有Width屬性,因而需要再把它轉化為TBitmap類型的對象: 

  BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;

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