首页 考试吧论坛 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文件管理功能的综合应用。

  6.3.3 文件名浏览查找系统的功能和实现

  6.3.3.1 按指定后缀名显示当前目录中的文件

  实现这一功能只需要在控件间建立正确的联系即可,不需要代码支持。建立联系的方法如(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是一个全局变量,用于标明ListBox1当前显示内容是查找的结果还是从FileListBox1中选定的文件。

  函数NotInList用于判断待添加的字符串是否已存在于一个TStrings对象中。函数返回一个布尔型变量。

  NotInList的具体实现如下。

  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 按指定匹配字符串显示当前目录中的文件

  当在FileEdit中输入一个匹配字符串,并回车,文件列表框将显示匹配结果。这一功能在FileEdit的OnKeyPress事件中实现。

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

  begin

  if Key = #13 then

  begin

  FileListBox1.ApplyFilePath(FileEdit.Text);

  Key := #0;

  end;

  end;

  文件列表框提供的ApplyFilePath方法是解决这一问题的关键所在。

  6.3.3.4 按指定匹配字符串查找当前目录中的文件

  为了进行比较,我们用另一种方法来实现文件的查找功能,即利用标准过程FindFirst、FindNext。FileList1与ListBox1 中的内容完全一致。

  当用户单击“查找”按钮时,与FileEdit 中字符串相匹配的文件将显示在ListBox1中。下面是实现代码。

  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是一个TSearchRec类型的记录。TSearchRec的定义如下:

  TSearchRec = record

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

  Attr: Byte;

  Time: Longint;

  Size: Longint;

  Name: string[12];

  end;

  在这一结构中提供了很多信息,灵活应用将给编程带来很大方便。下面我们举几个例子。

  1. 检测给定文件的大小。

  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;

  这一程序将在下一节中应用。

  2. 获取给定文件的时间戳,事实上等价于FileAge函数。

  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. 检测文件的属性。如果文件具有某种属性,则

  SearchRec.Attr And GivenAttr > 0

  属性常量对应的值与意义如下表:

  表6.6 属性常量对应的值与意义

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

  常量 值 描述

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

  faReadOnly $01 只读文件

  faHidden $02 隐藏文件

  faSysFile $04 系统文件

  faVolumeID $08 卷标文件

  faDirectory $10 目录文件

  faArchive $20 档案文件

  faAnyFile $3F 任何文件

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

  6.4 文件管理综合举例:文件管理器的实现

  在本章的最后,我们利用Delphi提供的文件控件和文件管理函数开发一个简单的文件管理器。虽然这一文件管理器还无法和Windows提供的文件管理器相比拟,但它也为一般的文件操作提供了足够多的功能,而且如果读者感兴趣,还可以对它做进一步的扩充。在后边的拖放操作一章中,我们就为它提供了拖放支持,使它看起来更象一个“文件管理器”。

  6.4.1 设计基本思路

  6.4.1.1 窗口设计

  文件管理器的主窗口是一个多文档界面(MDI)。有关文件、目录的显示和文件管理功能的实现都放在子窗口中。在程序执行过程中将根据需要弹出一些完成不同操作的对话框。这些对话框都是在需要时动态生成的。表6.7给出了本程序所设计窗体的清单。

  表6.7 FileManger窗体清单

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

  窗体类 功能 用于创建该类窗体的菜单项

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

  TFileManager 主窗口

  TFMForm 子窗口 Windows|New Window

  TFileAttrForm 显示文件属性 File|Properties;Function|Search

  TChangeForm 文件移动、拷贝、改名、改变 File|Move.Cope.Rename 当前目录等操作的输入对话框 Directory|change Directory

  TSearchForm 输入待查找文件的名称和路径 Function|Search

  TDiskViewForm 显示磁盘信息 Function|Disk View

  TViewDir 输入待创建的子目录 Directory|CreateDirectory

  TAboutBox 显示版权信息 Help|About

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

  6.4.1.2 界面设计

  主窗口界面主要是主菜单和用于表示当前目录、当前文件的状态条。

  表6.8 主窗口界面设计

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

  部件 属性 功能

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

  FileManager Style=fsMDI 主窗口

  WindowMenu=Windows

  Position=poDefault

  MainMenu1 主菜单

  FilePanel Align=alBottom 显示当前选中文件

  BevelInner=bvLowered

  BevelWidth=2

  DirectoryPanel Align=alBottom 显示当前选中目录

  Alignment=taLeftJustify

  BevelInner=bvLowered

  BevelWidth=2

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

  主窗口主菜单包括File、WIndows、Help三项。File菜单项在子窗口生成时被子窗口同名菜单项所取代。设置Windows、Help的GroupIndex = 9,可以使子窗口生成时这两个菜单项仍存在。

  子窗口界面包括主菜单、目录树(DirectoryOutline)、文件列表框、 用于显示驱动器的标签集(TabSet)以及三个用于显示驱动器类型的TImage部件。

  表6.9 子窗口界面设计

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

  部件 属性 功能

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

  FMForm ActiveControl=DirectoryOutline 子窗口

  Position=poDefault

  Style=fsMDIChild

  MainMenu1 主菜单

  DriveTabSet Align=alTop 显示驱动器

  style=tsOwnerDraw

  DirectoryOutline Align=alLeft 显示当前驱动器的目录树

  options=[ooDrawTreeRoot,

  ooDrawFocusRect,ooStretchBitmaps]

  FileList Align=alClient 显示当前目录中的文件

  FileType=[ftReadOnly,

  ftHidden,ftSystem,ftArchive,ftNormal]

  ShowGlyphs=True

  Network(Image) Picture(Network.bmp) 标志网络驱动器

  Vsible=False

  Floppy(Image) Picture(Floppy.bmp) 标志软驱

  Visible=False

  Fixed(Image) Picture(Fixed.bmp) 标志硬驱

  Visible=False

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

  子窗口主菜单包括File、Function、Directory三个菜单项, 分别用于完成文件的基本管理功能、其它管理功能和目录管理功能。

  由于对话框界面设计很简单,这里不再进行赘述。 读者可直接参考后面将给出的对话框界面图(图6.8---6.13)进行设计。

  6.4.2 子窗口的创建、布置和关闭

  子窗口的创建、布置由父窗口的Windows菜单控制,其菜单项如下:

  ● New Windows : 创建新的子窗口

  ● Tile : 平铺

  ● Cascade : 层叠

  ● ArrangeIcon : 排列图标

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

  子窗口的创建只需要简单调用窗体的Create方法:

  FileMan := TFMForm.Create(Application);

  子窗口的标准排列方式直接调用MDI窗口的标准方法Tile、Cascade和ArrangeIcons。

  极小化所有子窗口的实现利用MDI窗口的两个属性:MDIChildCount和MDIChildren:

  for i := 0 to MDICount - 1 do

  MDIChildren[i].Windowstate := wsMinimized;

  子窗口关闭时释放内存空间,为此在子窗口TFMForm的OnClose事件中令

  Action := OnFree;

  为了保持和Windows的File Manager的一致性,我们也禁止关闭最后一个子窗口,这需要在子窗口的OnCloseQuery事件处理过程中实现:

  If FileManager.MDIChildCount <= 1 then

  CanClose := False;

  CanClose是OnCloseQuery事件过程返回的一个参数,用于判定窗口是否可以关闭。

  由于这一过程归子窗口所有,因而MDIChildCount前必须加上其对象名FileManager。

  但不幸的是:这样一来我们的程序无法终止了!原来MDI窗口关闭前首先关闭其所有的子窗口。如果子窗口不能关闭,MDI窗口也不能关闭。

  为此我们需要判断发出关闭消息的是子窗口的系统菜单还是菜单的Exit项。

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