首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語 | 成人英語三級(jí) | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011年計(jì)算機(jī)等級(jí)考試Delphi講義:文件管理

本章首先介紹Delphi文件管理的基本概念和標(biāo)準(zhǔn)過程/函數(shù),并提供了一個(gè)記錄文件的應(yīng)用實(shí)例,這是從我們實(shí)際課題開發(fā)中提取出來的。而后介紹Delphi提供的文件控件的使用方法。最后提供的一個(gè)綜合例程MDI文件管理器則是對(duì)Delphi文件管理功能的綜合應(yīng)用。

  6.3.3 文件名瀏覽查找系統(tǒng)的功能和實(shí)現(xiàn)

  6.3.3.1 按指定后綴名顯示當(dāng)前目錄中的文件

  實(shí)現(xiàn)這一功能只需要在控件間建立正確的聯(lián)系即可,不需要代碼支持。建立聯(lián)系的方法如(6.3.1)中的介紹。

  6.3.3.2 把選中的文件添加到列表框中

  在FileListBox1的OnClick事件中:

  procedure TFileCtrForm.FileListBox1Click(Sender: TObject);

  begin

  if Searched then

  begin

  Searched := False;

  ListBox1.Items.Clear;

  Label5.Caption := 'Selected Files';

  end;

  if NotInList(ExtractFileName(FileListBox1.FileName),ListBox1.Items) then

  ListBox1.Items.Add(ExtractFileName(FileListBox1.FileName));

  end;

  Searched是一個(gè)全局變量,用于標(biāo)明ListBox1當(dāng)前顯示內(nèi)容是查找的結(jié)果還是從FileListBox1中選定的文件。

  函數(shù)NotInList用于判斷待添加的字符串是否已存在于一個(gè)TStrings對(duì)象中。函數(shù)返回一個(gè)布爾型變量。

  NotInList的具體實(shí)現(xiàn)如下。

  Function TFileCtrForm.NotInList(FileName: String;Items: TStrings): Boolean;

  var

  i: Integer;

  begin

  for I := 0 to Items.Count-1 do

  if Items[i] = FileName then

  begin

  NotInList := False;

  Exit;

  end;

  NotInList := True;

  end;

  6.3.3.3 按指定匹配字符串顯示當(dāng)前目錄中的文件

  當(dāng)在FileEdit中輸入一個(gè)匹配字符串,并回車,文件列表框?qū)@示匹配結(jié)果。這一功能在FileEdit的OnKeyPress事件中實(shí)現(xiàn)。

  procedure TFileCtrForm.FileEditKeyPress(Sender: TObject; var Key: Char);

  begin

  if Key = #13 then

  begin

  FileListBox1.ApplyFilePath(FileEdit.Text);

  Key := #0;

  end;

  end;

  文件列表框提供的ApplyFilePath方法是解決這一問題的關(guān)鍵所在。

  6.3.3.4 按指定匹配字符串查找當(dāng)前目錄中的文件

  為了進(jìn)行比較,我們用另一種方法來實(shí)現(xiàn)文件的查找功能,即利用標(biāo)準(zhǔn)過程FindFirst、FindNext。FileList1與ListBox1 中的內(nèi)容完全一致。

  當(dāng)用戶單擊“查找”按鈕時(shí),與FileEdit 中字符串相匹配的文件將顯示在ListBox1中。下面是實(shí)現(xiàn)代碼。

  procedure TFileCtrForm.Button1Click(Sender: TObject);

  var

  i: Integer;

  SearchRec: TSearchRec;

  begin

  Searched := True;

  Label5.Caption := 'Search Result';

  ListBox1.Items.Clear;

  FindFirst(FileEdit.text,faAnyFile,SearchRec);

  ListBox1.Items.Add(SearchRec.Name);

  Repeat

  i := FindNext(SearchRec);

  If i = 0 then

  ListBox1.Items.Add(SearchRec.Name);

  until i <> 0;

  end;

  SearchRec是一個(gè)TSearchRec類型的記錄。TSearchRec的定義如下:

  TSearchRec = record

  Fill: array[1..21] of Byte;

  Attr: Byte;

  Time: Longint;

  Size: Longint;

  Name: string[12];

  end;

  在這一結(jié)構(gòu)中提供了很多信息,靈活應(yīng)用將給編程帶來很大方便。下面我們舉幾個(gè)例子。

  1. 檢測(cè)給定文件的大小。

  function GetFileSize(const FileName: String): LongInt;

  var

  SearchRec: TSearchRec;

  begin

  if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then

  Result := SearchRec.Size

  else

  Result := -1;

  end;

  這一程序?qū)⒃谙乱还?jié)中應(yīng)用。

  2. 獲取給定文件的時(shí)間戳,事實(shí)上等價(jià)于FileAge函數(shù)。

  function GetFileTime(const FileName: String): Longint;

  var

  SearchRec: TSearchRec;

  begin

  if FindFirst(ExpandFileName(FileName),faAnyFile, SearchRec) = 0 then

  Result := SearchRec.Time

  else

  Result := -1;

  end;

  3. 檢測(cè)文件的屬性。如果文件具有某種屬性,則

  SearchRec.Attr And GivenAttr > 0

  屬性常量對(duì)應(yīng)的值與意義如下表:

  表6.6 屬性常量對(duì)應(yīng)的值與意義

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

  常量 值 描述

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

  faReadOnly $01 只讀文件

  faHidden $02 隱藏文件

  faSysFile $04 系統(tǒng)文件

  faVolumeID $08 卷標(biāo)文件

  faDirectory $10 目錄文件

  faArchive $20 檔案文件

  faAnyFile $3F 任何文件

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

  6.4 文件管理綜合舉例:文件管理器的實(shí)現(xiàn)

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

  6.4.1 設(shè)計(jì)基本思路

  6.4.1.1 窗口設(shè)計(jì)

  文件管理器的主窗口是一個(gè)多文檔界面(MDI)。有關(guān)文件、目錄的顯示和文件管理功能的實(shí)現(xiàn)都放在子窗口中。在程序執(zhí)行過程中將根據(jù)需要彈出一些完成不同操作的對(duì)話框。這些對(duì)話框都是在需要時(shí)動(dòng)態(tài)生成的。表6.7給出了本程序所設(shè)計(jì)窗體的清單。

  表6.7 FileManger窗體清單

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

  窗體類 功能 用于創(chuàng)建該類窗體的菜單項(xiàng)

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

  TFileManager 主窗口

  TFMForm 子窗口 Windows|New Window

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

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

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

  TDiskViewForm 顯示磁盤信息 Function|Disk View

  TViewDir 輸入待創(chuàng)建的子目錄 Directory|CreateDirectory

  TAboutBox 顯示版權(quán)信息 Help|About

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

  6.4.1.2 界面設(shè)計(jì)

  主窗口界面主要是主菜單和用于表示當(dāng)前目錄、當(dāng)前文件的狀態(tài)條。

  表6.8 主窗口界面設(shè)計(jì)

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

  部件 屬性 功能

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

  FileManager Style=fsMDI 主窗口

  WindowMenu=Windows

  Position=poDefault

  MainMenu1 主菜單

  FilePanel Align=alBottom 顯示當(dāng)前選中文件

  BevelInner=bvLowered

  BevelWidth=2

  DirectoryPanel Align=alBottom 顯示當(dāng)前選中目錄

  Alignment=taLeftJustify

  BevelInner=bvLowered

  BevelWidth=2

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

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

  子窗口界面包括主菜單、目錄樹(DirectoryOutline)、文件列表框、 用于顯示驅(qū)動(dòng)器的標(biāo)簽集(TabSet)以及三個(gè)用于顯示驅(qū)動(dòng)器類型的TImage部件。

  表6.9 子窗口界面設(shè)計(jì)

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

  部件 屬性 功能

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

  FMForm ActiveControl=DirectoryOutline 子窗口

  Position=poDefault

  Style=fsMDIChild

  MainMenu1 主菜單

  DriveTabSet Align=alTop 顯示驅(qū)動(dòng)器

  style=tsOwnerDraw

  DirectoryOutline Align=alLeft 顯示當(dāng)前驅(qū)動(dòng)器的目錄樹

  options=[ooDrawTreeRoot,

  ooDrawFocusRect,ooStretchBitmaps]

  FileList Align=alClient 顯示當(dāng)前目錄中的文件

  FileType=[ftReadOnly,

  ftHidden,ftSystem,ftArchive,ftNormal]

  ShowGlyphs=True

  Network(Image) Picture(Network.bmp) 標(biāo)志網(wǎng)絡(luò)驅(qū)動(dòng)器

  Vsible=False

  Floppy(Image) Picture(Floppy.bmp) 標(biāo)志軟驅(qū)

  Visible=False

  Fixed(Image) Picture(Fixed.bmp) 標(biāo)志硬驅(qū)

  Visible=False

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

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

  由于對(duì)話框界面設(shè)計(jì)很簡(jiǎn)單,這里不再進(jìn)行贅述。 讀者可直接參考后面將給出的對(duì)話框界面圖(圖6.8---6.13)進(jìn)行設(shè)計(jì)。

  6.4.2 子窗口的創(chuàng)建、布置和關(guān)閉

  子窗口的創(chuàng)建、布置由父窗口的Windows菜單控制,其菜單項(xiàng)如下:

  ● New Windows : 創(chuàng)建新的子窗口

  ● Tile : 平鋪

  ● Cascade : 層疊

  ● ArrangeIcon : 排列圖標(biāo)

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

  子窗口的創(chuàng)建只需要簡(jiǎn)單調(diào)用窗體的Create方法:

  FileMan := TFMForm.Create(Application);

  子窗口的標(biāo)準(zhǔn)排列方式直接調(diào)用MDI窗口的標(biāo)準(zhǔn)方法Tile、Cascade和ArrangeIcons。

  極小化所有子窗口的實(shí)現(xiàn)利用MDI窗口的兩個(gè)屬性:MDIChildCount和MDIChildren:

  for i := 0 to MDICount - 1 do

  MDIChildren[i].Windowstate := wsMinimized;

  子窗口關(guān)閉時(shí)釋放內(nèi)存空間,為此在子窗口TFMForm的OnClose事件中令

  Action := OnFree;

  為了保持和Windows的File Manager的一致性,我們也禁止關(guān)閉最后一個(gè)子窗口,這需要在子窗口的OnCloseQuery事件處理過程中實(shí)現(xiàn):

  If FileManager.MDIChildCount <= 1 then

  CanClose := False;

  CanClose是OnCloseQuery事件過程返回的一個(gè)參數(shù),用于判定窗口是否可以關(guān)閉。

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

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

  為此我們需要判斷發(fā)出關(guān)閉消息的是子窗口的系統(tǒng)菜單還是菜單的Exit項(xiàng)。

上一頁  1 2 3 4 5 6 7 8 9 下一頁
  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題
       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
       2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開通
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。