6.4.8.2 狀態條的顯示
狀態條用於顯示當前目錄和當前選中文件。它們的值在DirectoryOutline 和FileList的Change事件處理過程中修改。
DirectoryOutline和FileList最終的Change事件處理過程如下:
procedure TFMForm.DirectoryOutlineChange(Sender: TObject);
begin
CreateCaption;
FileList.clear;
FileList.Directory := DirectoryOutline.Directory;
FileList.Update;
FileManager.DirectoryPanel.Caption := DirectoryOutline.Directory;
end;
procedure TFMForm.FileListChange(Sender: TObject);
begin
with FileList do
begin
if (ItemIndex >= 0) and (Not HasAttr(FileName,faDirectory)) then
begin
TheFileName := FileName;
FileManager.FilePanel.Caption :=
Format('%s, %d bytes', [TheFileName, GetFileSize(TheFileName)]);
end
else
FileManager.FilePanel.Caption := '';
end;
end;
6.4.8.3 版本信息
當用戶單擊主窗口的Help|About菜單項時將彈出一個About對話框,用於顯示版本信息(如圖6.13)。
這一對話框是用Delphi提供的模板做的。
6.4.8.4 菜單項的變灰與使能
File菜單中定義的文件管理功能只有當活動焦點在FileList(即有當前選中文件)時才起作用。否則所有菜單項應變灰,以免導致系統崩潰。
這一功能在File菜單的Click事件處理過程中實現。這一點並不很容易被人想到,希望讀者能從中受到啟發。
procedure TFMForm.File1Click(Sender: TObject);
var
FileSelected: Boolean;
begin
FileSelected := FileList.ItemIndex >= 0;
Open1.Enabled := FileSelected;
Delete1.Enabled := FileSelected;
Copy1.Enabled := FileSelected;
Move1.Enabled := FileSelected;
Rename1.Enabled := FileSelected;
Properties1.Enabled := FileSelected;
end;
判斷是否有文件被選中是通過檢測ItemIndex屬性是否大於等於0來實現的。
FileSelected := FileList.ItemIndex >= 0;
6.4.8.5 可重用的文件處理模塊
庫單元fmxutils是一個代碼庫,提供了若干文件處理模塊。這些模塊除在本程序中使用外,讀者可以在其它應用程序中直接調用,而且不必重新編譯,只要在Uses子句中包含即可。從中我們可以體會到,Delphi 以庫單元為中心的程序組織方式提供了一種較完善的代碼重用機制。
6.4.9 小結
文件管理器是一個較為綜合的例程,使用到了絕大部分以文件名、文件句柄以及其它參數(除文件變量)為操作對象的文件管理過程/函數,同時也提供了一些程序設計開發的思想。我們的介紹是以程序功能模塊來組織的,我建議讀者在學習並試圖自己建立這一程序時采用同樣的方法。(6.4.8)中的內容或許是一開始就應了解的,但其它完全可以按順序逐步地擴充,最後得到一個完整的程序。這一例程在後邊的拖放操作和異常處理等章節中還要用到。讀者可以以此為基礎進一步完善它,使它真正成為一個完全實用的程序。
文件管理是在開發一個高級的Windows程序中不可避免的要涉及到的問題。本章介紹的思路和方法將為讀者成為一個熟練的程序員奠定基礎。