首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > Delphi > 复习资料 > 正文

2011年计算机等级考试Delphi讲义:文件管理

来源:考试吧Exam8.com) 2010-10-27 14:27:37 考试吧:中国教育培训第一门户 模拟考场
本章首先介绍Delphi文件管理的基本概念和标准过程/函数,并提供了一个记录文件的应用实例,这是从我们实际课题开发中提取出来的。而后介绍Delphi提供的文件控件的使用方法。最后提供的一个综合例程MDI文件管理器则是对Delphi文件管理功能的综合应用。

  这里所显示的删除操作简单明了。但在程序开始设计时我却走了一条弯路,后来发现虽然这种方法用于记录的删除操作显得笨拙、可笑,但却恰恰是记录插入、排序的思想。

  这种思想的核心是创建一个新文件保存更新后的内容。若新文件顺利创建,则删除原文件,否则恢复原来的文件。程序清单如下:

  procedure TRecFileForm.DeleteButtonClick(Sender: TObject);

  var

  NewFile: MethodFileType;

  MethodRec: TMethod;

  NewFileName: String;

  i: Integer;

  begin

  if FileOpened = False then Exit;

  CurrentRec := StringGrid1.Row-1;

  if CurrentRec < 0 then Exit;

  if MessageDlg('Delete Current Record ?', mtConfirmation,

  [mbYes, mbNo], 0) = idYes then

  begin

  HazAttr.text := '';

  NewFileName := ChangeFileExt(FileName,'.sav');

  try

  AssignFile(NewFile,FileName);

  ReWrite(NewFile);

  Except

  On EInOutError do

  begin

  Rename(MethodFile,FileName);

  Exit;

  end;

  end;

  for i := 1 to Count do

  if I <> CurrentRec+1 then

  begin

  MethodRec := GridToRec(i);

  Write(NewFile,MethodRec);

  end;

  closeFile(MethodFile);

  try

  AssignFile(MethodFile,Filename);

  Reset(MethodFile);

  except

  on EInOutError do

  begin

  DeleteFile(FileName);

  AssignFile(MethodFile,NewFileName);

  Reset(MethodFile);

  Rename(MethodFile,FileName);

  Exit;

  end;

  DeleteFile(NewFileName);

  Count:=Count-1;

  ChangeGrid;

  end;

  end;

  对于记录插入,方法基本同上。对于排序,可先将关键域读入排序,而后再按排序结果对应的记录号顺序重写文件。

  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方法很有用,我们将在后边给出其用法。

  6.3.2 文件名浏览查找系统的设计思路

  作为文件控件的应用实例,我们开发了一个简单的文件名浏览查找系统。这个系统可用于文件名的显示,把选中的文件写入列表框,并能按文件编辑框中输入的通配符对文件进行查找。

  表6.5 部件的设计

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

  部件 属性 功能

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

  FileCtrForm Position=poDefault 主窗口

  DirLabel 显示当前目录

  FileEdit TabOrder=0 显示当前文件/输入文件显示匹配符

  FileListBox1 FileEdit=FileEdit 显示当前目录文件

  DirectoryListBox1 DirLabel=DirLabel 显示当前驱动器目录

  FileList= FileListBox1

  DriveComboBox1 DirList= DirectoryListBox1 选择当前驱动器

  FilterComboBox1 FileList=FileListBox1 选择文件显示类型

  Filter='All Files(*.*)|*.*|

  Source Files(*.pas)|*.pas|

  Form Files(*.dfm)|*.dfm|

  Project Files(*.dpr)|*.dpr'

  ListBox1 显示选中或查找的文件

  Button1 Caption='查找' 按 FileEdit 中的内容进行查找

  Button2 Caption='退出' 退出系统

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

上一页  1 2 3 4 5 6 7 8 9 下一页
  相关推荐:2010年9月计算机等级考试试题及答案解析专题
       预告:名师解析2010年9月计算机等级考试试题答案
       2010年9月计算机等级考试成绩查询时间及入口
       2010年9月计算机等考成绩查询短信免费提醒开通
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。