6.2.8 结果综合 对不同方法的评估结果,可按一定的公式进行综合。当用户按下“计算”按钮时,系统进行计算并把综合结果写入HazAttr只读编辑框中。 为保证结果显示的正确性,每次增加、修改、删除操作确认后HazAttr编辑框清空。 6.2.9 编辑对话框的输入检查 当用户单击“增加”或“修改”按钮时系统将弹出一个编辑对话框,让用户输入或修改记录内容。其中的三个编辑框,一个组合列表框分别对应TMethod 的四个域。由于TMethod的Result域必须是[0,1]间的小数,因此当用户按OK键关闭对话框时应进行类型和范围检查。 在VB中我做过同样的工作,那时需要对用户输入的键码逐个进行判断。但这种方法很繁琐、很难做圆满(如不能很好地支持编辑键)。而Object Pascal提供了更好的方法。这种方法的关键就在于它的类型转换函数Val: procedure Val(Str: String;var V; var Code: Integer); V是由Str转换成的整型或实型数。若字符串非法,则出错位置返至Code;否则置Code为0。字符串非法并不会引发一个转换异常。 如果转换后的数超出了我们的范围,则显式把Code置为-1。最后统一通过检测Code是否为0来判断输入是否合法。 我们把输入检查放在对话框的OnCloseQuery事件处理过程中。如输入非法,则禁止对话框关闭,并将输入焦点置于Result编辑框中。但假如用户按了Cancel按钮,则这种检查是多余的。为此定义一个布尔变量IsCancel,对话框生成时置为False。假如用户按下Cancel,则置为True,此时OnCloseQuery事件不进行输入检查。 对话框的OnCloseQuery事件处理过程的程序清单如下: 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过程: CloseFile(MethodFile); 并对系统的状态重新进行设置。 系统关闭时首先检测当前是否有打开的文件。若有则先关闭文件。这在主窗口的OnCloseQuery事件中实现。 实现文件关闭的程序清单如下: 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; 实现系统关闭前检查的程序清单如下: procedure TRecFileForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if FileOpened then closeFile(MethodFile); end; 6.2.11 记录文件小结 我们所举的例子虽然简单,但基本覆盖了记录文件操作的主要方面。这里关键问题在于灵活应用Delphi提供的文件管理函数。同时,为了保证程序的健壮性应对异常进行捕获并处理。在数据库应用技术发展的今天,记录文件的重要性也许有所下降,但对象我们这里所处理的简单问题它仍有用武之地。 这里所举的例子一次只能处理一个文件。但读者可以很容易把它改为一个MDI程序。虽然对于这里的实际情况来说,似乎并无必要。 6.3 文件控件的应用 Delphi文件管理的最大特色是提供了一组文件操作控件。利用这些控件我们可以快速开发一个文件名浏览系统。其功能强大与其所需书写代码之少所形成的强烈反差,正是Dephi生命力的体现。 6.3.1 文件控件及其相互关系 Delphi提供的专用文件控件如下表所示。 表6.4 Delphi专用文件控件━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 控件名 功能───────────────────────────────────── DriveComboBox 驱动器组合列表框。用于选择当前驱动器 FileListBox 文件列表框。用于显示当前目录中的文件和选中当前文件 FilterComboBox 文件类型组合列表框。用于选择显示文件的类型 DirectoryOutline 目录树(6.4节专门介绍) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 以上控件前四个在Component Palette(部件选择板)的System页中,DirectoryOutline在Component Palette的Samples页中。 以上文件控件再加上文件编辑框、目录标签框(事实上是一般的编辑框、标签框)就可以构成一个完整的文件操作系统。它们之间的联系几乎不用代码支持,只要设置好相应的属性就可以了。 FileEdit、DirLabel、FileListBox、FileFilterComloList、 DirectoryListBox、DriveComboList六个控件间的属性联系如下: DriveComboList .DirList := DirectoryListBox; DirectoryListBox.DirLabel := DirLabel;DirectoryListBox.FileList := FileListBox; FileFilterComboList.FileList := FileListBox; FileListBox.FileEdit := FileEdit; 以上联系可以在设计时完成。只要打开相应属性的选择列表框进行选择即可。也可以在运行时利用如上的赋值语句建立联系。 文件控件的关键属性基本上都在以上联系中反映出来了。除此之外,FileFilterComboList有一个Filter属性,用来设置组合列表框的选择项;FileListBox 有一个Mask属性,用于设置显示文件的类型,这就允许FileListBox在脱离FileFilterComboList单独应用时仍能根据需要显示特定的文件。在6.4节中我们将应用这一功能。 文件控件的方法、事件基本是从ListBox和ComboBox中继承的。但FileListBox 中有一个ApplyFilePath方法很有用,我们将在后边给出其用法。  
2/2 首页 上一页 1 2 |