首页 > 转载 > 电脑横机针织软件设计中Delphi控件修改的研究

电脑横机针织软件设计中Delphi控件修改的研究

2012年2月23日

  随着针织工业的发展, 人们对针织产品的要求越来越高, 从传统的平针、罗纹织物发展到现在的复杂提花以及多样化织物, 手摇横机已经无法满足这些要求[1]。直至20世纪70 年代末电脑横机的出现,人们对多样化针织物的要求才得以解决。
  开发电脑横机针织软件需要一种应用程序开发工具, 目前市场上比较通用的是C++ Builder。然而, 与C++ Builder 相比, 由Borland公司推出的全新的可视化编程环境Delphi 不仅拥有强大的控件功能、精炼的编程语言, 而且开放源代码, 是一种方便、快捷的应用程序开发工具, 因此选用Delphi 作为电脑横机针织软件的开发工具。
  然而, 在运用Delphi 开发电脑横机针织软件时, 有些控件的功能并不满足用户的需求, 如: 用Image控件加载衣片图时, 不能对图片进行放大、缩小; 用MaskEdit 控件编辑数据格式电话号码、日期、时间等时, 不能对标准掩码进行增加、删除等等。虽然通过编写应用程序、书写大段代码可以完善这些功能, 然而却使应用程序繁琐、运行速度下降而且功能不能再利用。若对控件源码直接进行修改就可一劳永逸。
  1 控件修改
  针对电脑横机针织软件的需求, 对Delphi 控件进行修改。为精炼Delphi 源代码, 提高程序运行速度, 在添加控件的属性、事件或方法时, 尽可能继承Delphi内部已定义的类的属性、事件和方法。
  1.1 Object Pascal 与VCL
  Object Pascal 是Delphi 的编程语言, 既支持面向过程的程序设计, 又支持面向对象的程序设计[2]。它提供了丰富的数据类型以及控制流程的语句, 使程序具有清晰的结构、灵活通用的语句、自由的书写格式、优美的设计风格, 能够实现动态数组、过程和函数的重载等功能, 同时支持类的封装、继承、多态等面向对象技术。
  VCL 是Visual Component Library的缩写, 即可视化组件库, 它是C++ Builder、Delphi 等编程语言的基本类库, 拥有封装纯粹、可扩展性强、操作方便等特点。VCL 支持类、过程和函数的嵌套, 对事件的支持及封装也非常完整[3]。整个Delphi 通过VCL 扩展功能, VCL 是Delphi 的核心, 它开放源代码, 使用时按住Ctrl 点击对象名就可查看调用的对象或是它的方法的源代码。

  1.2 修改控件
  根据Delphi 控件的不同特性,把控件分为: 界面风格类、Shell 外观类、Editor 类、Grid 类、DB 类、Report类、图形类、综合类。尽管控件的种类繁多, 但所有控件都有属性、事件和方法3 要素。因此, 对不符合应用程序需求的控件的修改可通过3 种途径实现: 添加控件的属性; 添加控件的方法; 添加控件的事件。
  1.2.1 添加控件的属性
  属性可以是对象, 也可以是组件。在Delphi 源代码中, 属性用关键字property 声明。控件的属性分为简单类型、枚举型、集合类型和对象型[4] , 在Delphi 的对象察看器中显示了不同类型的属性, 它们的编辑方式不同。
  简单类型的属性包括数字、字符串和字符, 加入简单类型的属性, 是在类的Private 部分声明控件的内部数据, Published 部分声明控件的属性; 加入枚举型的属性, 必须首先声明一个枚举类型,然后声明一些内部的字段来代表每一个枚举值; 加入集合型的属性, 先声明一个枚举类型, 列举集合中的元素, 再把这个集合类型的属性添加到控件中; 加入对象型的属性, 必须首先声明对象, 该对象必须是从TPersistent 类或其派生类继承下来的, 然后创建对象的实例; 加入数组型的属性, 属性要带下标, 下标必须是简单类型, 要带读、写访问方法, 但不能是组件的字段。
  1.2.2 添加控件的方法
  方法是用来实现对类中数据域执行的特定操作, 有过程和函数两种形式。在控件中加入方法, 必须确定方法是在Private、Public、Protected 还是Published 中声明[5]。在Private 中声明的方法对于派生类来说不能访问; 在Public 中声明的方法允许控件的使用者访问, 可被子类继承; 在Protected 中声明的方法允许派生类访问, 不允许组件使用者访问; 在Published 中声明的方法可在Delphi 的对象察看器中查看。
  1.2.3 添加控件的事件
  事件是特殊的属性, 也是由property 关键字声明, 只是其类型必须是一个函数指针, 其所依附的数据成员也必须是函数指针。事件与相应的代码相联系, 当触发事件时, 就会调用相应的代码。添加控件的事件, 需要编写事件声明、事件属性及事件调度方法的所有代码。
  应用Delphi 开发电脑横机针织软件, 对Delphi 控件修改的思路如下:
  a. 熟练运用控件, 掌握控件的使用方法, 发现其在应用程序中存在的不足;
  b. 深入Delphi 内部, 读懂源代码, 弄清控件中类的继承关系,了解每个类中声明的属性、方法、事件的定义过程及其作用;
  c. 针对控件的不足, 确定修改控件的方法, 理清修改的思路,找到应该修改的类;
  d. 添加或修改源代码, 尽可能继承已有的类, 保证源代码简练, 提高程序运行速度;
  e. 往往反复修改才能实现需要的功能, 调试程序并应用无误即可安装修改的控件。
  2 控件修改应用举例
  在应用电脑横机针织软件时, 不可能所有的衣片图都是新建的, 往往会把典型的图片存储在数据库中作为样例以备调用,这种情况下用Delphi 中的cxImage控件打开已有的图片, 不能调整图片的大小。若是图片太大, 需要调整cxImage 边框才能显示整个图片。若在加载图片时就放大或缩小图片到所需尺寸,则大大减少操作人员的工作时间。下面以控件cxImage 的修改为例, 探讨控件修改的思路和方法。
  cxImage 控件是DExpress 控件, 属于TcxImage 类。TcxImage 类定义在unit cxImage 单元, 追踪TcxImage 类的继承关系弄清cxImage控件的全部功能。在应用软件中, 通过cxImage 控件的Picture 属性加载图片, 即双击cxImage 对象察看器中的Picture 属性弹出PictureEditor 窗体, 在Picture Editor窗体中对图片进行加载、保存或清除。要在加载时对图片进行放大或缩小, 即对Picture Editor 窗体进行修改。Picture Editor 窗体是对话框形式的属性编辑器, 对cxImage 控件的修改即是对属性编辑器的修改。
  2.1 研究原属性编辑器
  unit PicEdit 是Picture Editor窗体的单元文件, 它位于文件夹Borland\Delphi7\Source\PropertyEditors 内。unit PicEdit 中建立了对话框TPictureEditorDlg ( 如图2a 所示) , 定义了属性编辑器TPictureProperty, 编写了PictureEditor 窗体中每个按钮所响应的属性、事件、方法。
  随着针织工业的发展, 人们对针织产品的要求越来越高, 从传统的平针、罗纹织物发展到现在的复杂提花以及多样化织物, 手摇横机已经无法满足这些要求[1]。直至20世纪70 年代末电脑横机的出现,人们对多样化针织物的要求才得以解决。
  开发电脑横机针织软件需要一种应用程序开发工具, 目前市场上比较通用的是C++ Builder。然而, 与C++ Builder 相比, 由Borland公司推出的全新的可视化编程环境Delphi 不仅拥有强大的控件功能、精炼的编程语言, 而且开放源代码, 是一种方便、快捷的应用程序开发工具, 因此选用Delphi 作为电脑横机针织软件的开发工具。
  然而, 在运用Delphi 开发电脑横机针织软件时, 有些控件的功能并不满足用户的需求, 如: 用Image控件加载衣片图时, 不能对图片进行放大、缩小; 用MaskEdit 控件编辑数据格式电话号码、日期、时间等时, 不能对标准掩码进行增加、删除等等。虽然通过编写应用程序、书写大段代码可以完善这些功能, 然而却使应用程序繁琐、运行速度下降而且功能不能再利用。若对控件源码直接进行修改就可一劳永逸。
  1 控件修改
  针对电脑横机针织软件的需求, 对Delphi 控件进行修改。为精炼Delphi 源代码, 提高程序运行速度, 在添加控件的属性、事件或方法时, 尽可能继承Delphi内部已定义的类的属性、事件和方法。
  1.1 Object Pascal 与VCL
  Object Pascal 是Delphi 的编程语言, 既支持面向过程的程序设计, 又支持面向对象的程序设计[2]。它提供了丰富的数据类型以及控制流程的语句, 使程序具有清晰的结构、灵活通用的语句、自由的书写格式、优美的设计风格, 能够实现动态数组、过程和函数的重载等功能, 同时支持类的封装、继承、多态等面向对象技术。
  VCL 是Visual Component Library的缩写, 即可视化组件库, 它是C++ Builder、Delphi 等编程语言的基本类库, 拥有封装纯粹、可扩展性强、操作方便等特点。VCL 支持类、过程和函数的嵌套, 对事件的支持及封装也非常完整[3]。整个Delphi 通过VCL 扩展功能, VCL 是Delphi 的核心, 它开放源代码, 使用时按住Ctrl 点击对象名就可查看调用的对象或是它的方法的源代码。Delphi 中VCL 组件类的层次结构如图1 所示。

  1.2 修改控件
  根据Delphi 控件的不同特性,把控件分为: 界面风格类、Shell 外观类、Editor 类、Grid 类、DB 类、Report类、图形类、综合类。尽管控件的种类繁多, 但所有控件都有属性、事件和方法3 要素。因此, 对不符合应用程序需求的控件的修改可通过3 种途径实现: 添加控件的属性; 添加控件的方法; 添加控件的事件。
  1.2.1 添加控件的属性
  属性可以是对象, 也可以是组件。在Delphi 源代码中, 属性用关键字property 声明。控件的属性分为简单类型、枚举型、集合类型和对象型[4] , 在Delphi 的对象察看器中显示了不同类型的属性, 它们的编辑方式不同。
  简单类型的属性包括数字、字符串和字符, 加入简单类型的属性, 是在类的Private 部分声明控件的内部数据, Published 部分声明控件的属性; 加入枚举型的属性, 必须首先声明一个枚举类型,然后声明一些内部的字段来代表每一个枚举值; 加入集合型的属性, 先声明一个枚举类型, 列举集合中的元素, 再把这个集合类型的属性添加到控件中; 加入对象型的属性, 必须首先声明对象, 该对象必须是从TPersistent 类或其派生类继承下来的, 然后创建对象的实例; 加入数组型的属性, 属性要带下标, 下标必须是简单类型, 要带读、写访问方法, 但不能是组件的字段。
  1.2.2 添加控件的方法
  方法是用来实现对类中数据域执行的特定操作, 有过程和函数两种形式。在控件中加入方法, 必须确定方法是在Private、Public、Protected 还是Published 中声明[5]。在Private 中声明的方法对于派生类来说不能访问; 在Public 中声明的方法允许控件的使用者访问, 可被子类继承; 在Protected 中声明的方法允许派生类访问, 不允许组件使用者访问; 在Published 中声明的方法可在Delphi 的对象察看器中查看。
  1.2.3 添加控件的事件
  事件是特殊的属性, 也是由property 关键字声明, 只是其类型必须是一个函数指针, 其所依附的数据成员也必须是函数指针。事件与相应的代码相联系, 当触发事件时, 就会调用相应的代码。添加控件的事件, 需要编写事件声明、事件属性及事件调度方法的所有代码。
  应用Delphi 开发电脑横机针织软件, 对Delphi 控件修改的思路如下:
  a. 熟练运用控件, 掌握控件的使用方法, 发现其在应用程序中存在的不足;
  b. 深入Delphi 内部, 读懂源代码, 弄清控件中类的继承关系,了解每个类中声明的属性、方法、事件的定义过程及其作用;
  c. 针对控件的不足, 确定修改控件的方法, 理清修改的思路,找到应该修改的类;
  d. 添加或修改源代码, 尽可能继承已有的类, 保证源代码简练, 提高程序运行速度;
  e. 往往反复修改才能实现需要的功能, 调试程序并应用无误即可安装修改的控件。
  2 控件修改应用举例
  在应用电脑横机针织软件时, 不可能所有的衣片图都是新建的, 往往会把典型的图片存储在数据库中作为样例以备调用,这种情况下用Delphi 中的cxImage控件打开已有的图片, 不能调整图片的大小。若是图片太大, 需要调整cxImage 边框才能显示整个图片。若在加载图片时就放大或缩小图片到所需尺寸,则大大减少操作人员的工作时间。下面以控件cxImage 的修改为例, 探讨控件修改的思路和方法。
  cxImage 控件是DExpress 控件, 属于TcxImage 类。TcxImage 类定义在unit cxImage 单元, 追踪TcxImage 类的继承关系弄清cxImage控件的全部功能。在应用软件中, 通过cxImage 控件的Picture 属性加载图片, 即双击cxImage 对象察看器中的Picture 属性弹出PictureEditor 窗体, 在Picture Editor窗体中对图片进行加载、保存或清除。要在加载时对图片进行放大或缩小, 即对Picture Editor 窗体进行修改。Picture Editor 窗体是对话框形式的属性编辑器, 对cxImage 控件的修改即是对属性编辑器的修改。
  2.1 研究原属性编辑器
  unit PicEdit 是Picture Editor窗体的单元文件, 它位于文件夹Borland\Delphi7\Source\PropertyEditors 内。unit PicEdit 中建立了对话框TPictureEditorDlg ( 如图2a 所示) , 定义了属性编辑器TPictureProperty, 编写了PictureEditor 窗体中每个按钮所响应的属性、事件、方法。

  2.2 建立新属性编辑器
  unit PicEdit 是Delphi 内的标准单元文件, 不直接进行修改, 而是新建一个单元文件unitcxPictureEditor , 让其包含unitPicEdit 的所有功能。同时, 在新窗体上添加放大( ZoomIn) 、缩小( ZoomOut ) 图片的2 个Button 和显示图片宽度(PictureWidth) 、高度(PictureHeight) 的4 个Lable, 如图2b 所示。
  在unit cxPictureEditor 中编写相应代码, 完成以下功能: 点击ZoomIn( 或ZoomOut) 按钮启动放大( 或缩小) 图片功能。然后,鼠标每在Picture Editor 窗体的ImagePaintBox 上点击一次, 就对加载的图片放大( 或缩小) 一定的倍数。同时, 位于标签PictureWidth、PictureHeight 下面的Lable 分别显示图片的宽度和高度, 如图3 所示。当然, 也可以通过滚动鼠标中键来实现图片的放大或缩小。
  对于放大( 或缩小) 图片功能的实现, 主要设计思想如下: 首先,点击放大( 或缩小) 图片按钮, 就启动放大( 或缩小) 图片功能。然后,鼠标左键点击加载的图片, 在程序中新建一个位图, 把图片的高度、宽度放大( 或缩小) 一定的倍数赋给位图的高度、宽度, 再把图片相应地放大( 或缩小) 同样的倍数画到位图上, 最后把位图赋给图片,这样就实现了图片的放大( 或缩小) 。
  2.3 调试程序
  一般修改控件, 直接运行程序就可检查有无错误。但修改对话框形式的属性编辑器, 不能直接运行程序调试, 而要新建一个应用窗体, 添加cxImage 控件, 并且在应用窗体单元文件的implementation下引用属性编辑器所在的单元文件名, 再运行程序检查有无错误。
  2.4 注册新属性编辑器
  Delphi 的DsgnIntf.pas 中声明了几个属性编辑器, 它们都是从一个共同的基类TPropertyEditor 继承下来的, cxImage 控件的Picture属性编辑器也是如此。Delphi 中的属性编辑器统一在EditReg.pas 中注册。
  注册属性编辑器的关键程序代码如下:
  RegisterPropertyEditor ( TypeInfo ( TPicture) , TcxCustomImage,‘Picture’, TcxPictureProperty) ;
  2. 5 安装控件
  修改过控件cxImage 的Picture属性编辑器, 要重新安装cx-Image 控件才能使用新功能。安装控件的方法: 把资源文件压缩成压缩包, 在Delphi 主菜单Tools\ EnviromentOptions\ Library 中添加资源文件路径, 在Delphi 主菜单Component\Install Packages 中加入压缩包路径, 打开压缩包进行编译或安装即可。
  3 结束语
  本文提出了电脑横机针织软件设计中Delphi 控件修改的思想和方法( 这种思想和方法同样适应于其他应用程序设计中控件存在不足的修改) , 并且已经在多次实践中得到了检验, 为完善Delphi 提供了一种新方法。

本文转载自全球羊毛衫网。


电脑横机制版网http://www.hqzb800.com/350.html

liuhuan56 转载

分享到:

  1. 目前还没有任何评论.
  1. 目前还没有任何 trackbacks 和 pingbacks.