delphi编程培训(DELPHI基础教程:文件管理(二)[4])

2026-05-01 20:30:02 :0

delphi编程培训(DELPHI基础教程:文件管理(二)[4])

各位老铁们好,相信很多人对delphi编程培训都不是特别的了解,因此呢,今天就来为大家分享下关于delphi编程培训以及DELPHI基础教程:文件管理(二)[4]的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

DELPHI基础教程:文件管理(二)[4]

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

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

   子窗口的创建 布置和关闭

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

  ● New Windows : 创建新的子窗口

  ● Tile : 平铺

  ● Cascade : 层叠

  ● ArrangeIcon : 排列图标

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

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

  FileMan := TFMForm Create(Application)

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

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

  for i := to MDICount do

  MDIChildren Windowstate := wsMinimized;

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

  Action := OnFree;

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

  If FileManager MDIChildCount 《= then

  CanClose := False;

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

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

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

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

  定义一个全局变量

  var

  ExitClick: Boolean;

  在子窗口的Exit Click事件处理过程中

  ExitClick := True;

  FileManager Exit Click(Sender)

  子窗口关闭前可以利用这一全局变量检测是否应关闭

  If (FileManager MDIChildCount 《= ) and (Not ExitClick) then

  CanClose := False;

   文件控件的联系

  在本例中我们使用了一组新的控件 TabSet DirectoryOutline FileListBox 用于显示和选择驱动器 目录和文件 与( )中所用方法相比 使用这一组控件需要少量的代码支持

  TabSet与DirectoryOutline的联系在TabSet的Click事件处理过程中建立

  With DriveTabSet do

  DirectoryOutline Drive := Tabs;

  DirectoryOutline与FileListBox的联系在DirectoryOutline的Change事件处理过程中建立

  FileList Directory := DirectoryOutline Directory;

  FileList Update;

   DriveTabSet的自画风格显示

  Dephi为一些控件提供了自画风格的显示 如ListBox ComboBox TabSet等 在缺省情况下 这些控件自动显示文本 而在自画风格下 拥有控件的窗体在运行时间内自己画出控件的每一项目

  自画风格显示通常的应用是为项目除文本外再添加图形显示 能以自画风格显示的控件有一个共同特点 都拥有一个TStrings类型的项目链 由于TStrings类的特点(参第三章) 它们都可以加入一个和对应文本相联系的对象 而这正是自画风格显示的关键

  通常情况下产生一个自画风格需要三个步骤

   设置自画风格

   向字符串链表添加图形对象

   画出自画项目

   设置自画风格

  控件属性Style 用于设置自画风格 对于DriveTabSet 我们把Style 属性设置为tsOwnerDraw

  对于ListBox ComboBox等控件的设置与TabSet略有差异 读者可参阅联机帮助文档

   向字符串链表添加图形对象

   在应用程序中添加图片部件

  在本程序中我们设置了三个图片部件NetWork Floppy Fixed 并分别与三个位图文件NetWork bmp Floppy bmp Fixed bmp相关联

   把图片添加到字符串链表中

  根据字符串链表的性质 我们可以把对象与已存在的字符串建立联系 也可以同时添加字符串和对象 这里我们采用后一种方法

  在子窗口的OnCreate事件处理过程中 我们利用一个循环依次检测从a到z的驱动器是否存在以及驱动器的类型 这利用了Windwos API函数GetDrivetype 如果驱动器不存在则返回 否则返回驱动器的类型(DRIVE_REMOVABLE DRIVE_FIXED DRIVE_REMOTE) 根据驱动器类型我们可以判断与文本(驱动器名)同时添加到Tabs中的不同图形对象 在添加过程中 DriveTabSet的TabIndex被设置为当前驱动器

  程序清单如下

  procedure TFMForm FormCreate(Sender: TObject)

  var

  Drive AddedIndex: Integer;

  DriveLetter: Char;

  begin

  for Drive := to do

  begin

  DriveLetter := Chr(Drive + ord( a ))

  case GetDrivetype(Drive) of

  DRIVE_REMOVABLE:

  AddedIndex := DriveTabSet Tabs AddObject(DriveLetter Floppy Picture Graphic)

  DRIVE_FIXED:

  AddedIndex := DriveTabSet Tabs AddObject(DriveLetter Fixed Picture Graphic)

  DRIVE_REMOTE:

  AddedIndex := DriveTabSet Tabs AddObject(DriveLetter Neork Picture Graphic)

  end;

  if UpCase(DriveLetter) = UpCase(FileList Drive) then

  DriveTabSet TAbIndex := AddedIndex;

  end;

  end;

   画出自画项目

  当把一个控件的风格设置为自画时 Windows不再负责往屏幕上画出控件的项目 而是为每个可见项目产生自画事件 应用程序可以通过处理自画事件画出控件的项目

   确定自画项目的大小

  对于TabSet而言 这在OnMeasureTab事件处理过程中完成 我们需要把DriveTabSet每个标签的宽度增大到足以同时放下文本和位图

  procedure TFMForm DriveTabSetMeasureTab(Sender: TObject; Index: Integer;

  var TabWidth: Integer)

  var

  BitmapWidth: Integer;

  begin

  BitmapWidth := TBitmap(DriveTabSet Tabs Objects) Width;

  Inc(TabWidth + BitmapWidth)

  end;

  由于TStrings的Objects属性中存放的对象都是TObject类型 并没有Width属性 因而需要再把它转化为TBitmap类型的对象

  BitmapWidth := TBitmap(DriveTabSet Tabs Objects) Width;

   返回目录 DELPHI基础教程

       推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

  ORACLE G数据库开发优化指南

  Java程序性能优化 让你的Java程序更快 更稳定

  C嵌入式编程设计模式

  Android游戏开发实践指南

lishixinzhi/Article/program/Delphi/201311/25239

DELPHI基础教程:简单数据库应用的创建及MASTAPP介绍(三)[4]

  基于数据库表的有效性验证

  在用户创建数据库表时就建立有效性验证机制 如在使用DBD创建一个表时 我们可以为创建的数据库表说明一些验证手段 包括字段的最大值 最小值 图形字段的显示格式等等 在设定这些有效性验证机制时 不需要编写任何程序代码 基于数据库表的有效性验证是当数据写到数据库之前 由数据库本身来执行 Delphi也执行一些有效性验证 如在数据写到数据库之前Delphi会验证每一个字段是否被填入相应的值 有关这种途径来验证数据的有效性的详细情况请参考DBD的使用

  基于字段的有效性验证

  一般有两种方法来进行这种方式的有效性验证

  ①为记录中需要设置有效性验证的字段编写Onvalidate事件处理过程 这样每当该字段的值被修改时 该字段的OnValidate事件处理过程就会被调用 进而对被修改的字段值进行验证

  ②对于记录中要求非空的字段(如口令或关键字等) 我们必须首先设置这些字段的Required属性为True 然后为这些字段编写OnValidate事件处理过程 这样在修改现存记录或插入新记录时 在写入数据库之前 如果要求非空的字段中没有填入适当的字段值 那么会出现错误信息提示用户必须输入字段值

  基于记录的有效性验证

  这种验证方式一般在TTable部件的BeforePost事件处理过程中进行处理 即在记录写回到数据库之前对记录的每个字段值进行有效性验证

  例 在程序中对字段值的有效性进行验证

   创建一个用TEdit部件浏览ORDERS DB表的应用 如图 所示

   修改TDataSource部件的AutoEdit属性为True

   双击TTable部件打开字段器Fields Editor 并单击SaleDate字段

   在Object Inspector中双击SaleDate字段对象的OnValidate事件 为该字段对象编写事件处理过程如下

  TForm Table SaleDateValidate(Sender:TField)

  begin

  If SaleDate Value》Now then

  raise Exception Create( 不能输入一个未来的日期 )

  end;

  当这个应用程序运行时 用户修改或插入ORDERS DB中的记录时 该应用程序会对销售日期(SaleDate)字段的值进行验证 该字段值不能晚于系统的当前日期 程序中调用Now方法获得系统的当前日期 如果字段值大于系统的当前日期会出现一错误信息提示框 告知用户不能输入一个未来的日期

  使用TDBComBox部件和TDBLookupComBox部件来限制用户输入字段值的范围

  创建查看orders db表的应用 窗体中显示Terms 字段的是TDBComBox部件 显示EmpNo字段的是TDBLookupComBox部件

  TDBComBox和TDBLookupComBox部件的属性值如表 所示

  表 窗体中各部件的属性设置

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

  部 件 属 性 属 性 值

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

  DataField Terms

  DBComBox DataSource DataSource

  Items Prepaid

  Net

  COD

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

  DataField EmpNo

  DataSource DataSource

  DBLookupComBox LookupSource DataSource

  KeyField EmpNo

  LookupField EmpNo

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

  DataSource DataSet Table

  AutoEdit True

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

  DataSource DataSet Table

  AutoEdit True

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

  Table DatabaseName DemosDB

  TableName orders db

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

  Table DatabaseName DemosDB

  TableName orders db

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

  该应用运行时 当用户修改和插入记录到ORDERS DB表中时 Terms字段的值可以从组合框中的Prepaid Net COD三个值中任选 EmpNo字段的值是从另一个表Employee中获得的雇员号码 用户可以从中选择

   返回目录 DELPHI基础教程

       推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

  ORACLE G数据库开发优化指南

  Java程序性能优化 让你的Java程序更快 更稳定

  C嵌入式编程设计模式

  Android游戏开发实践指南

lishixinzhi/Article/program/Delphi/201311/25166

以上就是我们为大家找到的有关“delphi编程培训(DELPHI基础教程:文件管理(二)[4])”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

delphi编程培训(DELPHI基础教程:文件管理(二)[4])

本文编辑:admin

更多文章:


c++字符串转为数字(C++,怎么把字符转换成数字)

c++字符串转为数字(C++,怎么把字符转换成数字)

本篇文章给大家谈谈c++字符串转为数字,以及C++,怎么把字符转换成数字对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录C++,怎么把字符转

2025年9月1日 04:00

绝对值函数画法(含绝对值的函数图象怎么画啊 举个例子)

绝对值函数画法(含绝对值的函数图象怎么画啊 举个例子)

各位老铁们,大家好,今天由我来为大家分享绝对值函数画法,以及含绝对值的函数图象怎么画啊 举个例子的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录含绝

2026年8月27日 11:30

爬虫的使用说明书(如何使用nodeJs爬虫)

爬虫的使用说明书(如何使用nodeJs爬虫)

这篇文章给大家聊聊关于爬虫的使用说明书,以及如何使用nodeJs爬虫对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录如何使用nodeJs爬虫Python瞎老弟的爬虫心得之requests篇②requests基本使用如何使用no

2026年1月21日 19:30

justifiable(justified 和justifiable的区别)

justifiable(justified 和justifiable的区别)

大家好,justifiable相信很多的网友都不是很明白,包括justified 和justifiable的区别也是一样,不过没有关系,接下来就来为大家分享关于justifiable和justified 和justifiable的区别的一些

2025年7月16日 16:00

excel怎么串联文本(excel使用公式进行文本拼接的方法)

excel怎么串联文本(excel使用公式进行文本拼接的方法)

大家好,excel怎么串联文本相信很多的网友都不是很明白,包括excel使用公式进行文本拼接的方法也是一样,不过没有关系,接下来就来为大家分享关于excel怎么串联文本和excel使用公式进行文本拼接的方法的一些知识点,大家可以关注收藏,免

2025年9月24日 06:00

人工智能大作业python(人工智能中的python怎么样呀)

人工智能大作业python(人工智能中的python怎么样呀)

本篇文章给大家谈谈人工智能大作业python,以及人工智能中的python怎么样呀对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录人工智能中

2026年4月14日 18:30

domino判断浏览器(如何在 Notes 客户端配置与实现 iNotes 的单点登录)

domino判断浏览器(如何在 Notes 客户端配置与实现 iNotes 的单点登录)

“domino判断浏览器”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看domino判断浏览器(如何在 Notes 客户端配置与实现 iNotes 的单点登录)!本文目录如何在 Notes 客户端配置与实现 iNotes 的

2025年12月29日 15:45

为什么fread读不出数据(在TC下用fread读取数据出错)

为什么fread读不出数据(在TC下用fread读取数据出错)

本篇文章给大家谈谈为什么fread读不出数据,以及在TC下用fread读取数据出错对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录在TC下用

2026年7月25日 05:00

余切函数的反函数(反余切的反余切函数性质)

余切函数的反函数(反余切的反余切函数性质)

其实余切函数的反函数的问题并不复杂,但是又很多的朋友都不太了解反余切的反余切函数性质,因此呢,今天小编就来为大家分享余切函数的反函数的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录反余切的反余切函数性质arc是什

2025年6月9日 18:15

override(保险柜里的词汇 override 是什么意思呀)

override(保险柜里的词汇 override 是什么意思呀)

本篇文章给大家谈谈override,以及保险柜里的词汇 override 是什么意思呀对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录保险柜里的词汇 override 是什么意思呀Overload和Override的区别ove

2026年1月13日 21:45

restapi接口是干嘛的(什么是API接口主要作用是什么)

restapi接口是干嘛的(什么是API接口主要作用是什么)

各位老铁们,大家好,今天由我来为大家分享restapi接口是干嘛的,以及什么是API接口主要作用是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目

2025年5月23日 00:00

completely放在什么位置(completelyno为什么completely放在动前面)

completely放在什么位置(completelyno为什么completely放在动前面)

本篇文章给大家谈谈completely放在什么位置,以及completelyno为什么completely放在动前面对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录completelyno为什么completely放在动前面副

2026年8月5日 11:00

csdn如何发布博客(如何在博客里发表文章)

csdn如何发布博客(如何在博客里发表文章)

今天给各位分享如何在博客里发表文章的知识,其中也会对如何在博客里发表文章进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录如何在博客里发表文章如何在博客发表文章如何在个人博客上发布信息csdn 在哪里发帖怎样创建

2026年1月4日 20:45

什么叫前端开发(前端开发,是什么)

什么叫前端开发(前端开发,是什么)

各位老铁们,大家好,今天由我来为大家分享什么叫前端开发,以及前端开发,是什么的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录前端开发,是什么web前

2025年8月1日 15:30

menu是什么学校(school’s menu还是school menu)

menu是什么学校(school’s menu还是school menu)

本篇文章给大家谈谈menu是什么学校,以及school’s menu还是school menu对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目

2026年1月27日 15:00

python中列表转换为数组(python如何将list中的字符转为数字)

python中列表转换为数组(python如何将list中的字符转为数字)

这篇文章给大家聊聊关于python中列表转换为数组,以及python如何将list中的字符转为数字对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录python如何将list中的字符转为数字如何导入数据与不同类型的文件转换成一个

2026年9月20日 05:45

fcfs算法怎么计算(短作业优先算法中的运行时间怎么计算)

fcfs算法怎么计算(短作业优先算法中的运行时间怎么计算)

今天给各位分享短作业优先算法中的运行时间怎么计算的知识,其中也会对短作业优先算法中的运行时间怎么计算进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录短作业优先算法中的运行时间怎么计算作业调度算法一道题的解析——

2026年2月15日 11:15

10000000为啥是128的补码(二进制10000000应该表示128或者-0啊,干嘛等于-128呢)

10000000为啥是128的补码(二进制10000000应该表示128或者-0啊,干嘛等于-128呢)

大家好,今天小编来为大家解答以下的问题,关于10000000为啥是128的补码,二进制10000000应该表示128或者-0啊,干嘛等于-128呢这个很多人还不知道,现在让我们一起来看看吧!本文目录二进制10000000应该表示128或者-

2025年6月1日 01:15

什么是容器类专用设备(特种设备是指哪些设备)

什么是容器类专用设备(特种设备是指哪些设备)

本篇文章给大家谈谈什么是容器类专用设备,以及特种设备是指哪些设备对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录特种设备是指哪些设备什么是特

2025年7月2日 01:00

select的名词和形容词(select 是可数还是不数)

select的名词和形容词(select 是可数还是不数)

大家好,select的名词和形容词相信很多的网友都不是很明白,包括select 是可数还是不数也是一样,不过没有关系,接下来就来为大家分享关于select的名词和形容词和select 是可数还是不数的一些知识点,大家可以关注收藏,免得下次来

2026年2月1日 08:45

近期文章

conduct well behave well(behaviour 和behavior有什么区别)
2026-09-25 03:00:02
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索