首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 記錄文件管理:結果綜合、輸入驗證與文件關閉操作詳解

     編輯:Delphi

6.2.8 結果綜合機制

在系統安全性綜合評估管理系統中,不同評估方法的結果需按特定公式進行綜合計算。當用戶點擊「計算」按鈕時,系統自動執行運算並將綜合結果顯示於 HazAttr 唯讀編輯框中。為確保顯示數據的準確性,每當執行增加、修改或刪除記錄操作並確認後,HazAttr 編輯框會自動清空,避免殘留舊數據誤導用戶。

6.2.9 編輯對話框的輸入檢查策略

當用戶點擊「增加」或「修改」按鈕時,系統彈出編輯對話框,包含三個編輯框與一個組合列表框,分別對應 TMethod 記錄的四個字段。由於 Result 域必須為 [0,1] 區間的小數,因此在用戶按下 OK 鍵關閉對話框時,必須進行類型與範圍驗證。

傳統 VB 模式的局限

在 VB 開發中,需逐個判斷用戶輸入的鍵碼,這種方法不僅繁瑣,且難以完美支持編輯鍵(如退格鍵、刪除鍵等),用戶體驗較差。

Object Pascal 的優雅解決方案:Val 函數

Object Pascal 提供了更高效的 Val 函數進行字符串到數值的轉換與驗證:

procedure Val(Str: String; var V; var Code: Integer);
  • V:轉換後的整型或實型數值
  • Code:錯誤位置標識,轉換成功時為 0,失敗時返回錯誤字符位置
  • 字符串非法不會引發轉換異常,這是關鍵優勢

驗證邏輯:先用 Val 轉換,若超出 [0,1] 範圍則顯式將 Code 設為 -1,最後統一檢測 Code <> 0 判定輸入非法。

OnCloseQuery 事件中的實現

將驗證邏輯置於對話框的 OnCloseQuery 事件中,非法輸入時阻止關閉、清空輸入框並聚焦至 Result 編輯框。但若用戶按下 Cancel,則跳過驗證。引入布爾變量 IsCancel 標識取消操作:對話框創建時為 False,按下 Cancel 時置為 True。

procedure TEditForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Res: Real;
  k: Integer;
begin
  if IsCancel = False then
  begin
    val(Result.Text, Res, k);
    if (Res > 1) or (Res < 0) then k := -1;
    if k <> 0 then
    begin
      MessageDlg('非法輸入!', mtWarning, [mbOK], 0);
      Result.Text := '';
      CanClose := False;
      Result.SetFocus;
    end;
  end;
end;

6.2.10 文件與系統的關閉處理

文件關閉

調用 CloseFile(MethodFile) 關閉文件,並重置系統狀態:將 FileOpened := False、清空網格、啟用「打開」與「新建」按鈕、禁用「關閉」按鈕、恢復窗口標題。

procedure TRecFileForm.CloseButtonClick(Sender: TObject);
begin
  if FileOpened then
  begin
    CloseFile(MethodFile);
    FileOpened := False;
    ClearGrid;
    OpenButton.Enabled := True;
    NewButton.Enabled := True;
    CloseButton.Enabled := False;
    RecFileForm.Caption := FormCaption;
  end;
end;

系統關閉前的檢查

在主窗口的 OnCloseQuery 事件中檢測是否有打開的文件,若有則先關閉文件再允許系統退出。

procedure TRecFileForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if FileOpened then
    CloseFile(MethodFile);
end;

6.2.11 記錄文件操作小結

本節示例雖簡單,但涵蓋了記錄文件操作的核心方面:靈活運用 Delphi 文件管理函數、異常捕獲保障健壯性。雖然數據庫技術發展降低了記錄文件的重要性,但對簡單問題仍具實用價值。示例為單文檔界面(SDI),讀者可輕松擴展為多文檔界面(MDI)。

6.3 文件控件的應用:快速構建文件瀏覽系統

Delphi 文件管理的一大特色是提供專用文件操作控件,僅需少量代碼即可開發功能強大的文件名瀏覽系統,這種「代碼極少、功能極強」的反差正是 Delphi 生命力的體現。

6.3.1 核心文件控件及其屬性關聯

Delphi 提供四大專用文件控件(位於 Component Palette 的 System 頁):

控件名功能
DriveComboBox驅動器組合列表框,用於選擇當前驅動器
FileListBox文件列表框,顯示當前目錄文件並選中文件
FilterComboBox文件類型組合列表框,篩選顯示文件類型
DirectoryOutline目錄樹(Samples 頁),層級顯示目錄結構

加上文件編輯框(FileEdit)、目錄標籤框(DirLabel),可構建完整文件操作系統。它們之間的聯繫幾乎無需代碼,僅需在設計時或運行時設置屬性:

DriveComboList.DirList := DirectoryListBox;
DirectoryListBox.DirLabel := DirLabel;
DirectoryListBox.FileList := FileListBox;
FileFilterComboList.FileList := FileListBox;
FileListBox.FileEdit := FileEdit;

關鍵屬性補充

  • FileFilterComboList.Filter:設置組合列表框的選擇項
  • FileListBox.Mask:設置顯示文件類型,允許脫離 FileFilterComboList 獨立工作

文件控件的方法、事件多繼承自 ListBox 和 ComboBox,但 FileListBox 的 ApplyFilePath 方法極具實用價值,後文將演示用法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved