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

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

編輯:Delphi

6.4 文件管理綜合舉例:文件管理器的實現 

在本章的最後,我們利用Delphi提供的文件控件和文件管理函數開發一個簡單的文件管理器。雖然這一文件管理器還無法和Windows提供的文件管理器相比擬,但它也為一般的文件操作提供了足夠多的功能,而且如果讀者感興趣,還可以對它做進一步的擴充。在後邊的拖放操作一章中,我們就為它提供了拖放支持,使它看起來更象一個“文件管理器”。

6.4.1 設計基本思路 

6.4.1.1 窗口設計 

文件管理器的主窗口是一個多文檔界面(MDI)。有關文件、目錄的顯示和文件管理功能的實現都放在子窗口中。在程序執行過程中將根據需要彈出一些完成不同操作的對話框。這些對話框都是在需要時動態生成的。表6.7給出了本程序所設計窗體的清單。 

表6.7 FileManger窗體清單

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

窗體類 功能 用於創建該類窗體的菜單項

──────────────────────────────────────

TFileManager 主窗口

TFMForm 子窗口 Windows|New Window

TFileAttrForm 顯示文件屬性 File|Properties;Function|Search

TChangeForm 文件移動、拷貝、改名、改變 File|Move.Cope.Rename 當前目錄等操作的輸入對話框 Directory|change Directory

TSearchForm 輸入待查找文件的名稱和路徑 Function|Search

TDiskViewForm 顯示磁盤信息 Function|Disk View

TViewDir 輸入待創建的子目錄 Directory|CreateDirectory

TAboutBox 顯示版權信息 Help|About

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6.4.1.2 界面設計 

主窗口界面主要是主菜單和用於表示當前目錄、當前文件的狀態條。 

表6.8 主窗口界面設計

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部件 屬性 功能

 ─────────────────────────────

FileManager Style=fsMDI 主窗口

WindowMenu=Windows

Position=poDefault

MainMenu1 主菜單

FilePanel Align=alBottom 顯示當前選中文件

BevelInner=bvLowered

BevelWidth=2

DirectoryPanel Align=alBottom 顯示當前選中目錄

Alignment=taLeftJustify

BevelInner=bvLowered

BevelWidth=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

主窗口主菜單包括File、WIndows、Help三項。File菜單項在子窗口生成時被子窗口同名菜單項所取代。設置Windows、Help的GroupIndex = 9,可以使子窗口生成時這兩個菜單項仍存在。

子窗口界面包括主菜單、目錄樹(DirectoryOutline)、文件列表框、 用於顯示驅動器的標簽集(TabSet)以及三個用於顯示驅動器類型的TImage部件。 

  表6.9 子窗口界面設計

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

部件 屬性 功能

───────────────────────────────────────

FMForm ActiveControl=DirectoryOutline 子窗口

Position=poDefault

Style=fsMDIChild

MainMenu1 主菜單

DriveTabSet Align=alTop 顯示驅動器

style=tsOwnerDraw

DirectoryOutline Align=alLeft 顯示當前驅動器的目錄樹

options=[ooDrawTreeRoot,

ooDrawFocusRect,ooStretchBitmaps]

FileList Align=alClient 顯示當前目錄中的文件

FileType=[ftReadOnly,

ftHidden,ftSystem,ftArchive,ftNormal]

ShowGlyphs=True

Network(Image) Picture(Network.bmp) 標志網絡驅動器

Vsible=False

Floppy(Image) Picture(Floppy.bmp) 標志軟驅

Visible=False

Fixed(Image) Picture(Fixed.bmp) 標志硬驅

Visible=False

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

子窗口主菜單包括File、Function、Directory三個菜單項, 分別用於完成文件的基本管理功能、其它管理功能和目錄管理功能。

由於對話框界面設計很簡單,這裡不再進行贅述。 讀者可直接參考後面將給出的對話框界面圖(圖6.8---6.13)進行設計。

6.4.2 子窗口的創建、布置和關閉

子窗口的創建、布置由父窗口的Windows菜單控制,其菜單項如下:

● New Windows : 創建新的子窗口

● Tile : 平鋪

● Cascade : 層疊

● ArrangeIcon : 排列圖標

  ● Minimized All : 極小化所有子窗口

子窗口的創建只需要簡單調用窗體的Create方法:

FileMan := TFMForm.Create(Application);

子窗口的標准排列方式直接調用MDI窗口的標准方法Tile、Cascade和ArrangeIcons。

極小化所有子窗口的實現利用MDI窗口的兩個屬性:MDIChildCount和MDIChildren:

for i := 0 to MDICount - 1 do

MDIChildren[i].Windowstate := wsMinimized;

子窗口關閉時釋放內存空間,為此在子窗口TFMForm的OnClose事件中令

Action := OnFree;

為了保持和Windows的File Manager的一致性,我們也禁止關閉最後一個子窗口,這需要在子窗口的OnCloseQuery事件處理過程中實現:

If FileManager.MDIChildCount <= 1 then

CanClose := False;

CanClose是OnCloseQuery事件過程返回的一個參數,用於判定窗口是否可以關閉。

由於這一過程歸子窗口所有,因而MDIChildCount前必須加上其對象名FileManager。

但不幸的是:這樣一來我們的程序無法終止了!原來MDI窗口關閉前首先關閉其所有的子窗口。如果子窗口不能關閉,MDI窗口也不能關閉。

為此我們需要判斷發出關閉消息的是子窗口的系統菜單還是菜單的Exit項。

定義一個全局變量

var

ExitClick: Boolean;

在子窗口的Exit1Click事件處理過程中:

ExitClick := True;

FileManager.Exit1Click(Sender);

子窗口關閉前可以利用這一全局變量檢測是否應關閉:

If (FileManager.MDIChildCount <= 1) and (Not ExitClick) then

CanClose := False;

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