熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:文本編輯器的設計(二)[3]

2013-11-23 17:52:04  來源: Delphi編程 

       替換對話框部件

  替換對話框部件為應用程序提供替換對話框如圖它包括查找對話框的所有功能此外還允許使用者更換被選中的字符串FindText 屬性是應用程序需查找的字符串ReplaceText屬性是被選中字符的替換字符串Options 屬性決定對話框的顯示方式其值如表所示

  與查找對話框一樣替換對話框亦有OnFind 事件用戶輸入查找字符串並按FindNext按鈕時發生OnFind 事件用戶選擇Replace 或ReplacAll 時 對話框發生OnRelpace事件要替換的字符串存入ReplaceText屬性中要編寫相應的代碼以支持替換功能

  表 替換對話框的Options屬性的取值及含義

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

    取值                          含義

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

  frRelpace          如果是真值 應用程序將ReplaceText 屬性中的字符串替換FindText屬性中的字符串

  frReplacAll        如果是真值應用程序將ReplaceText屬性中的字符串替換查找到的所有FindText屬性中的字符串

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

  例程中TEditFormReplace方法響應OnReplace事件Replace方法首先判斷控制中被選中字符串是否與替換字符串相等如果不等則進行替換而後根據Options中的方式循環進行查找替換直至無匹配字符串為止其代碼如下

  procedure TEditFormReplace(Sender: TObject)

  var

  Found: Boolean;

  begin

  with ReplaceDialog do

  begin

  if AnsiCompareText(MemoSelText FindText) = then

  MemoSelText := ReplaceText;

  Found := SearchMemo(Memo FindText Options)

  while Found and (frReplaceAll in Options) do

  begin

  MemoSelText := ReplaceText;

  Found := SearchMemo(Memo FindText Options)

  end;

  if (not Found) and (frReplace in Options) then

  ShowMessage(Cannot find + FindText +

  end;

  end;

   打開對話框部件

  打開對話框部件為應用程序顯示打開對話框使用Execute方法可顯示打開對話框用戶通過選擇文件類型下拉框中的文件類型可以確定顯示在文件列表中的文件 例如如果用戶選擇*txt文件類型那麼只有在當前目錄下的文本文件才會顯示在文件列表中文件擴展名通常也稱為過濾器

  打開對話框包含一個Filters(過濾器)的屬性它可確定文件類型和在文件類型下拉框中的順序應用程序可以為打開對話框定義多個過濾器對話框的FilterIndex 屬性可以決定哪個過濾器是文件類型下拉框中的缺省過濾器如FilterIndex等於表示程序運行時出現在文件類型下拉框的過濾器是第個過濾器

  例程中關於文件打開的代碼如下

  procedure TEditFormOpen/Click(Sender : TObject)

  begin

  if OpenDialog/Execult then

  begin

  …

  Open(Open Dialog/FileName)

  end

  end;

  打開保存對話框中的Options屬性值見表

  表 打開保存對話框的Options屬性取值及含義

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

             值                   含義

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

  ofAllowMultiSelect     如果是真值則允許在文件名列表中選擇多個文件

  ofCreatePrompt        如果是真值當用戶在文件編輯框中輸入一不存在的文件名並選擇OK按鈕則會出現消息框 提示用戶此文件不存在並詢問是否以此文件名創建一新文件

  ofExiengronDifferent 如果是真值從對話框中返回的文件擴展名將不同於缺省擴展名其值存入DefaultExt屬性中

  ofFileMustExist         如果是真值 當用戶在文件編輯框中輸入一個不存在的文件名時並選擇OK按鈕 則會出現一消息框提示用戶此文件不存並詢問是否輸入了正確的路徑和文件名

  ofNoChangeDir        如果是真值當前目錄將設置成對話框第一次出現的目錄並忽略任何目錄改變

  ofOverWritePrompt  如果是真值當用戶試圖保存一個已存在的文件時 將出現一消息框提示用戶此文件已存在並詢問是否覆蓋

  ofPathMastExit         如果是真值用戶在文件名編輯框只能輸入有效路徑名 否則出現消息框提示用戶路徑無效

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

  表 打開保存對話框中的Options屬性取值及含義

  文件保存對話框與打開對話框類似如圖它的Option屬性見上表例程在保存文件前先對文件進行讀寫判斷如果文件是只讀文件或未指定文件名的新文件 則程序對文件不保存否則備份文件代碼如下

  procedure TEditFormSaveClick(Sender: TObject)

  procedure CreateBackup(const Filename: string)

  var

  BackupFilename: string;

  begin

  BackupFilename := ChangeFileExt(Filename BackupExt)

  DeleteFile(BackupFilename)

  RenameFile(Filename BackupFilename)

  end;

  function IsReadOnly(const Filename: string) Boolean;

  begin

  Result := Boolean(FileGetAttr(Filename) and faReadOnly)

  if Result then MessageDlg(Format(%s is read only

  [ExtractFilename(Filename)]) mtWarning [mbOK]

  end;

  begin

  if (Filename = ) or IsReadOnly(Filename) then

  SaveAsClick(Sender)

  else

  begin

  CreateBackup(Filename)

  MemoLinesSaveToFile(Filename)

  MemoModified := False;

  end;

  end;

  其中CreateBackup過程用以改變需備份文件的擴展名IsReadOnly 用以判斷文件屬性

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25250.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.