• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

DELPHI编程技巧集锦

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

<!-- @page { margin: 2cm } H1 { margin-top: 0.6cm; margin-bottom: 0.58cm; line-height: 200%; page-break-inside: avoid } H1.western { font-family: "DejaVu Serif", serif; font-size: 22pt } H1.cjk { font-family: "DejaVu Sans"; font-size: 22pt; font-style: normal; font-weight: bold } H2 { margin-top: 0.46cm; margin-bottom: 0.46cm; line-height: 173%; page-break-inside: avoid } H2.western { font-family: "Arial", sans-serif; font-size: 16pt } H2.cjk { font-family: "黑体"; font-size: 16pt; font-style: normal } H2.ctl { font-family: "文泉驿正黑"; font-size: 12pt; font-weight: normal } H3 { margin-top: 0.46cm; margin-bottom: 0.46cm; line-height: 173%; page-break-inside: avoid } H3.western { font-family: "DejaVu Serif", serif; font-size: 16pt } H3.cjk { font-family: "DejaVu Sans"; font-size: 16pt; font-style: normal } H3.ctl { font-family: "文泉驿正黑"; font-size: 12pt; font-weight: normal } P { margin-bottom: 0.21cm } A:link { color: #0000ff } -->

DELPHI 编程技巧集锦

董占山

( 中国农科院棉花研究所,河南安阳, 455112)

美国著名的《Delphi 开发者杂志(Delphi Developer\'s Journal) 》是世界上众多Delphi 程序员必读的专业杂志,在国内我们很少有机会读到这份优秀的专业刊物,但是我们可以在Inprise 公司(http://www.inprise.com )的网页上看到该杂志刊登的一些优秀文章。同时,还可以通过电子邮件订阅该杂志免费提供的Delphi 使用技巧,订阅网址为http://www.zdtips.com/ddj/bor-f.htm 。笔者从中筛选出一些十分有用的Delphi 使用技巧和文章,编译出来,与广大Delphi 爱好者分享。有什么意见和建议可以直接给笔者发电子邮件([email protected] )。读者请注意,本文中的内容多以Delphi 4 为例进行介绍,请使用其他版本的读者根据实际情况灵活运用。

一、Delphi 集成环境与代码调试

A 修改Delphi 的系统信息

默认的Delphi 消息、警告和例外描述都是英文的,将这些内容翻译成另一种语言或修改它们使其适合你的需要的最简单方法是编辑资源文件并改变相应的字符串,这些文件位于BIN 目录。主要资源文件有:SysUtils 单元的信息(文件没有找到、转换错误信息等)在sysutils.res 中,数据库错误信息在dbconsts.res 中,VCL 信息在consts.res 中。注意一些字符串使用格式字符,如%s%d ,来产生最终的字符串,在这种情况下,应将这些字符保留在适当的位置。

B 如何清除无用代码

Delphi 提供了自动清除源代码中无用代码的强大功能,一般来说,当你保存文件时,Delphi 自动将源代码中空的类方法删除,保证了源代码的清洁。在没有编译和保存文件的前提下,也可以清除无用代码,方法是:在Delphi 3/4 中单击“File”*“Save As...” 菜单命令(在Delphi 1/2 中单击“File”*“Save File As...” 菜单命令),打开“Save As...” 对话窗口,单击“取消”按钮即可。

C Delphi 4 集成环境中不使用浮动功能

你无疑知道Delphi 4 集成环境支持大多数窗口的浮动功能。但是,有时你不想让一个窗口具有浮动功能。浮动窗口在需要时,十分有用,但在不需要时,也十分恼人。有两种方法可以改变一个窗口的浮动属性。

第一种方法是:每个可浮动窗口具有一个本地菜单项目---Dockable ,如果你不希望一个特定的窗口具有浮动功能,简单地用鼠标右键单击窗口,选空Dockable 菜单项目。这个窗口的浮动功能就关闭了,直到你再选中Dockable 项目为止。

这一技术可以防止特定的窗口可停靠。但有时,你仅仅希望暂时关闭浮动功能,这时,只需要按下<Ctrl> 键,再拖动窗口。

D 在工具菜单中添加项目

Delphi 集成环境中按F1 键可以打开多数Delphi 帮助标题,这种方法可以快速打开相关标题的帮助窗口。但是这种快速方法对第3方工具和常问问题(FAQs )是不可用的,Delphi 提供了一个变通的方法,使在集成环境下快速打开这些工具成为可能。

在工具菜单添加用户项目的方法是:单击“Tools”*“Configure Tools” 命令,打开一个包含所有可用工具列表的对话窗口,单击“Add” 按钮,打开“Tool Properties” 对话窗口,分别设置4 个编辑框,然后单击“Ok” 按钮,再单击“Close” 按钮,完成设置。

E 设置条件断点

一般来说,大家都会使用断点来调试程序,但是如何使用条件断点来调试程序呢?条件断点,顾名思义,就是指需要满足一定条件时的断点。这种断点在调试很长的ForWhile 循环时十分有用,当你只希望看一看一个特定循环的执行情况而非所有循环时,就需要在循环中设定一个条件断点,当设定的条件满足时,Delphi 停止应用程序的执行。

设置条件断点的方法是:按常规的方法建立断点,单击“View”*“Debug Windows”*“Breakpoints” 命令,弹出一个断点列表窗口,用鼠标右键单击欲设置为条件断点的断点,在快捷菜单中单击“Properties” 命令,打开一个断点编辑窗口,在这个窗口的条件域中输入一个逻辑表达式即可。在调试程序时,Delphi 判断这个逻辑表达式,当逻辑表达式为真时,就中断程序运行,返回代码窗口。

F 不要让集成调试器打断调试过程

在调试程序时,Delphi 的集成调试器监视一切运行时错误。当调试器发现一个运行时错误时,Delphi 中断应用程序并返回到设计状态,并显示一个错误信息窗口。当关闭错误信息窗口后,需要按<Ctrl-F2> 重新开始启动程序,或者按<F9> 继续运行程序。无疑,Delphi 集成调试器是十分有用的,但有时也让人烦恼。能否暂时关闭集成调试器呢?可以。使用下面的方法可防止集成调试器中断应用程序:

1 单击“Tools”*“Environment Options...” 菜单命令;

2 单击“Preferences” 对话页标签;

3 选空“Integrated debugging option” 复选框;

4 单击“Ok” 完成操作。

这样当你在集成环境下调试应用程序时,Delphi 的集成调试器探测到运行时错误时,就不再切换到设计状态并显示错误信息了。

G 调试Delphi 3/4 集成环境的插件

Delphi 1, 要调试集成环境的插件/ 专家是十分困难的。Delphi 3/4 提供了调试DLL 的能力,从而简化了这项工作。

第一步,保证插件/ 专家没有包括在Windows 注册表的插件/ 专家列表中,然后,启动Delphi 3/4 并装载需要调试的专家DLL ,修改注册表,使Delphi 3/4 能够调用这个DLL

第二步,单击“Run”*“Parameters” 菜单命令,打开“Run Parameters” 对话窗口,单击“Local” 对话页上的“Host Application” 编辑框右边的“Browse” 按钮,查找“Delphi32.exe” 程序的位置(本例为C:/Program Files/Borland/Delphi4/Bin/delphi32.exe );

第三步,运行待调试的DLL ,将启动Delphi 的第二个实例,并装载要调试的DLL ,允许对其进行调试。

二、窗体设计的相关技巧

A 透明象素点

当将一个image 图象,一般为BMP 文件,放到一个TBitBtn 上时,图片左下角的一个象素点决定图片中的哪种颜色为透明色。图片上任何具有这种颜色的象素点,在按钮上都是透明的。假如不希望图片上的任何象素点是透明的,就需要将图片左下角的这个象素点的颜色设置为不同于图片上任何象素点的颜色。

B 自动调整窗体的分辨率

创建应用程序时,总是依监视器的分辨率进行的,其缺点是:假如在较高分辨率下设计应用程序,它可能大于用户的有效屏幕大小,在用户使用程序时,就不能显示出全部窗体内容,给用户带来不便。一种简单的解决办法是:在程序运行时,让Delphi 自动添加滚动条来解决这个问题。

但是,使用Delphi 的自动调整比例过程将产生更加专业的结果。在运行时,Delphi 获得系统的屏幕分辨率,并将结果保存在应用程序的Screen 对象的PixelsPerInch 属性中,然后,使用这个属性的值将窗体调整到当前分辨率。

记住,为了有效地使用这项技术,需要设置窗体的Scaled 属性为真,并且只用TrueType 字体,如果开发程序时,使用了Windows 的小字体,应将窗体的AutoScroll 属性设置为假(FALSE )。

C 为控制设置一种自定义颜色

窗体和各种控制都具有一个Color 属性,当你选择它们的Color 属性时,可以在列表框中选择一种Windows 系统默认的各种颜色,也可以建立一种自定义颜色,使它们显得与众不同。为窗体或控制设定自定义颜色的步骤如下:

1 双击组件的Color 属性,弹出颜色对话窗口;

2 选择一种最接近你想要的基色;

3 单击“Define Custom Colors>>” 按钮,颜色对话窗口将扩展,显示出一个色谱区域;

4 使用十字光标在这个色谱区域选择你想要的颜色,然后单击“Add to Custom Colors” 按钮;这样你选定的特定颜色就被添加到颜色对话窗口中了;

5 单击“Ok” 按钮,就将刚定义的颜色应用到选定的控件了。

D 缩小步长

大多数程序员在设计窗体时喜爱“(靠到格线)Snap to grid” 功能,可以节省安置组件的时间,但是,有时你还需要微调其位置和大小。

其一:将组件在窗体上一次移动一个象素点。首先,选中你想移动的组件,然后,按下<Ctrl> 键不放,按光标键,选中的控制将一次移动一个象素点,方向与光标键所指方向相同。

其二:每次按一个象素点调整控制的大小。选中控制,按下<Shift> 键不放,按光标键,根据光标键所指方向不同,选中的控制每次放大或缩小一个象素点。

E 控制滚动条的有效方法

TFormHorzScrollBarVertScrollBar 属性使用Tracking 子属性来管理窗体的显示,Tracking 属性是一个布尔型属性。若此属性设置为真,窗体随用户拖动滚动条而移动;若此属性设置为假,窗体不随用户拖动滚动块而移动,只有用户释放滚动块时才移动。这种差别对查看列表和图象的用户十分重要。如果要平滑地显示列表和图象,将Tracking 属性设置为真,但当图象或列表信息特别复杂时,窗口的滚动特别地缓慢。如果要快速显示列表和图象信息,将Tracking 属性设置为假,这样窗口的滚动就会加快,但是由于不能看到实际位置,所以使用时难以掌握。除了TForm 以外,TScrollBox 组件也使用Tracking 属性来管理其显示内容。

F 选择合适的组合框

Delphi 提供了5 类组合框,它们具有相同的特性,但是也有不同的特点。了解其间的差别,可帮助程序员根据需要选择合适的组合框类型。

所有的组合框都是一个列表框和编辑框的组合,用户可以在列表框中选择或在编辑框中直接输入值。当用户从列表框中选择时,这个条目将显示在编辑框中。5 类组合框的不同特性决定了它们的显示和与用户交互的方式。下表列出了5 种类型组合框的的独有特征。

1 格式描述

格式

说明

Simple

这种格式就是列表框上显示一个编辑框,用户可以从列表框中选取条目,也可以直接在编辑框中输入文本

Drop-down

除了列表框开始不显示外,其他特性均类似于simple 格式。在编辑框的左边有一个下拉按钮,单击可以打开列表框,从中选取条目;也可在编辑框中直接输入项目。

Drop-down list

这是组合框中限制条件最多的一种,显示格式类似于drop-down ,开始时列表框不显示。用户单击下拉按钮打开列表框并从中选取条目,但是不能在编辑框中直接输入文本。

OwnerDrawFixed

这种组合框类似于Simple 类,不同的是其列表框中的条目高度是根据用户在ItemHeight 定义的值而设置的。

OwnerDrawVariable

这种组合框类似于OwnerDrawFixed 类,特点是列表条目的高度是可变的。

当窗体上有足够的空间和列表很短时,使用Simple 格式的组合框较为合适。否则,使用Drop-down 格式的组合框。当想让用户只能从预定义项目中选取条目时,用Drop-down list 格式的组合框。需要可变高度列表项时,使用后两种。

G 使非可视组件易于辨认

非可视组件没有标题属性,一个窗体中多个同类非可视组件时,由于它们看起来一模一样,故难以辨认。DELPHI 提供了一种变通的方法,就是将非可视组件的名称放置在组件图标之下,使它们易于辨认。设置方法如下:

1 单击“Tools”*“Environment Option” ,弹出一个对话窗口;

2 单击“Preferences” 标签,切换到Preferences 对话页;

3 选中“Show component captions” 复选框;

4 单击“Ok” 完成。

这时,在当前的设计窗体上,就可以看到每个非可视组件下显示出一个标签。这个选项设置之后,对所有窗体都是有效的。

H 标签的加速键

对含有Caption 属性的组件,添加快捷键是比较容易的,只需在Caption 属性中特定字符前加上“&” 符号即可。那么,怎样给没有Caption 属性的控制添加快捷键呢?现以给一个TMemo 控制添加快捷键为例说明如下:在窗体上放置一个TMemo 控制,再在其旁边放置一个TLabel 控制,将其Caption 属性设置为“&Memo1” ,将TLabelFocusControl 属性设置为“Memo1” 。编译并运行这个程序,按快捷键 <ALT+M> ,就可以快速存取Memo1 控制的内容。这项技术不需要任何代码,可以应用到所有没有Caption 属性的控件上。

I 选择组件的父组件和多个组件

Delphi 集成环境中,在设计窗体时,如果父组件是不可见的,要选择父组件就比较困难。其实有一个简单的方法:选择不可见组件的一个子组件,按<ESC> 键,就可以选中其父组件。

当窗体上有多个组件时,可以通过按下鼠标左键拖动鼠标,将虚线矩形框包围要选择的组件,就可以方便地选择它们。但是, 如果想选择放置在一个面板类组件(如TPanel )上的一组组件时,单击并拖动将移动这组组件下的父组件,达不到预期的效果。为了避免这种情况的发生,需要按下<Ctrl> 键,然后再执行上述操作。

另外,按下<Shift> 键,单击一个组件,可以选择或取消选择一个组件。这对需要选择不同面板组件上的子组件时十分有用。

J 移动组件或调整其大小

在窗体上移动组件或调整其大小时,有时希望一次一个象素点地进行。采用Object Inspector 来修改组件的left, top, widthheight 属性可以做到这一点。但是还有一种更为简单的方法,就是使用<Shift><Ctrl> 键加上箭头键。按<Shift+ 箭头键> 组合键在箭头指向的方向上调整组件的大小;按<Ctrl+ 箭头键> 组合键在箭头指向的方向上移动组件。这两种组合键对选定的多个组件同时有效。

K TNotebook 组件的所有页面上显示组件

若希望在TNotebookTPageControl 组件的所有页面上显示某些组件(例如浏览数据库的列表框)时,不需要在在每个页面上重复设置这些组件,只需要首先建立它们,然后再添加TNotebookTPageControl 控件,调整它们的大小和位置,用鼠标右键单击TNotebookTPageControl 组件,单击弹出菜单中的“Send To Back” 属性,这时最先添加的控件就显示在TNotebookTPageControl 控件之上,按通常的方法添加其他组件到TNotebookTPageControl 组件即可。

此方法只对控件有效,所以TDBText 需用TDBEdit 代替,并设置其为只读,边界属性设置为空,Ctrl3D 属性设置为假。同理,需要用TPanel 组件代替TLabel 组件。

另一种更为有效的方法是编写一段代码,来动态改变组件的位置,这种方法对所有的组件均有效。以TPageControl 为例,在其OnChange 事件处理程序中插入如下代码:

procedure TForm1.PageControl1Change(Sender: TObject);

begin

Panel1.Parent := PageControl1.ActivePage;

//other code follows

end;

实际使用时,用自己的组件代替Panel1 。记住:应当将组件放置在程序运行时,打开对话框时首先显示的对话页上,以避免在窗体的OnCreate 事件处理程序中编写代码。

L 取消拖动操作

在设计窗体时,如果在移动一个组件的位置时,发现选错了组件,这时该怎么办呢?无疑,你想取消这一步的拖动操作,其实很简单,在没有释放鼠标键之前,按<ESC> 键,这个组件就会返回到原来的位置。

M Y2K 格式化tDateTimePickers 的日期显示

Delphi 中使用TDateTimePicker.DateFormat 来指明日期格式,DateFormatTDTDateFormat 类型属性,取值为dfShortdfLong 。若取dfShort, 日期格式类似于是“3/21/97” ;若取dfLong, 日期格式类似于“Friday, March 21, 1997”

为了兼容Y2K 格式,需将日期格式设置为YYYY-MM-DD ,根据上面的解释,tDateTimePicker 组件在设置为短日期格式时就不敷应用了。但是, 如果你在控制面板中设置了短格日期式(使用区域设置),tDateTimePicker 将使用Windows 的设置,所以它还是可以使用的。

DELPHI 编程技巧集锦(2

董占山

( 中国农科院棉花研究所,河南安阳, 455112)

 

三、代码设计的相关技巧

A 使用特殊字符

应用程序有时需要用到键盘上没有的字符,例如,版权符号(© )、英镑符() 和日圆符() 等。为了输入这些字符,需要使用Windows 字模映射程序。

打开字模映射程序,从“字体”列表框中选中合适的字体,在下面的列表框选中一个字符,在窗口的右下角将显示出这个字符的ASCII 码值。例如英镑符的ASCII 码为0163 ,在键盘上按下<ALT> 键的同时按下0163 ,就可以输入英镑符。也可以使用字模映射程序的选择和复制按钮将选定字符复制到Windows 的剪贴板上,然后再使用“粘贴”命令或按<SHIFT+INS> 键盘命令将字符粘贴到目标程序代码中。

B 在代码中设置位置标记

Delphi 代码编辑器允许在源代码中放置一些位置标记,就向老式的WordStar 所具有的那种。使用位置标记的目的是快速地在文档不同位置之间进行切换。比如在创建一个类函数时,希望看一下它的声明部分,位置标记就派上用场了。在代码编辑器中设定位置标记的快捷键为:<CTRL+K>+<1-9 之间的任意数字> ,移动到已有位置标记的快捷键为:<CTRL+Q> + <1-9 之间的任意数字> 。在默认状态下,Delphi 并不保存用户在代码中设定的位置标记,为了让Delphi 将设定的位置标记保存到文件中,一便下次利用,需要在“Environment Options” 对话窗口的“Preferences” 对话页选中“Autosave” 复选项,这样Delphi 就将位置标记信息保存到项目的DSK 文件中。

C 使用键盘快捷键快速进行代码块缩进

在编辑程序源代码时,不同代码块之间保持不同的缩进距离,可以使代码易于阅读。当程序结构调整之后,需要调整代码的缩进量,通常我们使用上下光标键在不同代码行之间进行切换,用< 空格><Tab><Del> 键来增加或减少缩进空间。使用过Turbo Pascal 的老用户可能还记得它的集成编辑器提供了一组快捷键来快速切换代码块的缩进量,使用十分方便。其实,Delphi 集成编辑器也提供了两个组合键来快速增加或减少多行代码的缩进量。首先选择待改变缩进量的代码块,按<Ctrl+Shift+I> 组合键来扩展代码块的缩进量,按<Ctrl+Shift+U> 组合键来缩小代码块的缩进量。

D 在代码编辑窗口中选择一个矩形区域

大家知道在Microsoft Word 97 中可以选择一个矩形区域,在Delphi 的集成编辑器也有类似功能。为了选择一个矩形区域,按下<Alt> 键不放,然后用鼠标和键盘选择文本。

E 跳到VCL 源代码去

通过下面的方法,可以转跳到VCL 库例程的源代码:

  1. 按下<Ctrl> 键;

  1. 将鼠标光标移到想看其源码的类型声明的名字上;

  1. 单击之即可调出VCL 源程序代码进行查看。

F 在集成环境中记录击键并回放

在使用Delphi 编写程序时,由于需要多次输入同一个变量名称或一段固定的代码,你或许想过将这段代码的击键记录下来,在需要时回放它们,以实现快速编码,减少无效劳动,就象在DOS 时代使用F3 键回放刚刚输入的一行命令一样。Delphi 集成编辑器同样提供这项功能:按<Ctrl+Shift+R> 开始录制击键,然后键入你希望录制的击键,再按<Ctrl+Shift+R> 停止录制。按<Ctrl+Shift+P> 回放刚刚录制的击键。注意:这种功能仅仅在默认的编辑器键盘模式下有效。为了查找你使用了那种编辑器键盘模式,单击“Tools”*“Environment Options” 菜单项,单击“Editor” 标签,就可以在编辑器设置组合框中看到当前使用的编辑器键盘模式了。

G 代码模板

Delphi 的代码模板(Code Template )可以减少重复输入。在Delphi 编辑器中,按<CTRL+J> 键打开模板选择列表框;或者键入一个模板的名称,然后按<CTRL+J> 来扩展模板。

选择“Tools”*“Environment Options” 菜单命令,单击“Code Insight” 标签,可以添加自己的代码模板。用户可以输入任何代码,不仅仅是数组、循环等。模板在下列情况下十分有用:为过程、函数和方法所写的标准初始化代码、注释块或其他用途。

H 使用代码完成功能

Delphi 3/4 中一项易被忽视的功能是代码完成特征,该项功能弹出一个列表框,列出所有可能的赋值。下面的例子演示了这项功能。

开始一个新的项目,双击窗体,切换到代码窗口,编写窗体的OnCreate 事件处理程序,如下:

procedure TForm1.FormCreate(Sender: TObject);

var

temp : string;

temp2 : integer;

begin

end;

这时,在过程体中输入“temp :=” ,按<Ctrl+ 空格> 键,稍侯,就可以看到一个含有一些变量、方法和对象的列表,以及潜在的有效赋值。一些选择项后带有省略号,表明这些对象或记录含有兼容的方法或字段可以作为赋值。

四、数据库程序设计技巧

A 充分利用数据库窗体专家(Database Form Expert

数据库窗体专家(Database Form Expert ),在Delphi 3 中称为向导,对所有版本的Delphi 都是有效的。窗体专家的用途是帮助用户快速地创建数据库应用程序。但是,不足的是它产生的窗体存在控制和字段位置、大小不适中的问题。但是,其优点还是很显然的。很明显,程序员需要和客户一起来设计窗体,使其更加美观实用。数据库窗体专家可以建立数据存取控件并完成他们的基本连接属性。虽然位置和大小不适中,它可以建立大多数数据输入字段和其标签,所以充分利用数据库窗体专家,可以节省设计窗体原型的时间。

B 将数据库转换为CSV 格式

如果想将数据库表格转换为以逗号分割的文本文件(CSV 格式),可以使用如下的过程代码:

procedure BackupTableToCSV(tableName:TTable);

var

i,j: integer; (*i-field, j-record*)

s: string; (*Record string*)

theStringList: TStringList; (*temp storage*)

begin

s:=\'\';

theStringList:=TStringList.Create;

with tableName do begin

try

Active:=True;

except

showmessage(\' 不能激活数据库:\'+ Name);

end;

for j:=0 to (RecordCount-1) do begin

s:=\'\';

for i:=1 to (FieldCount-1) do begin

(*add next field w/comma delimiter*)

s:=s+(Fields[i].AsString)+\',\';

end; (*i for*)

theStringList.add(s);

Next;

end; (*j for*)

theStringList.savetofile(Name+\'.csv\'); (*memo1.lines.*)

Showmessage(Name+ \' 已被转换完毕.\');

close;

end; (*with*)

end; (*BackupTableToCSV*)

C 动态更新DBGrid 的行颜色

DBGrid 是显示表格数据的好控件,本例旨在演示如何动态地改变其中的文本颜色。例如,我们想用DBGrid 中的行来显示国家的信息,如果国家的人口大于2 亿,数据行显示将为兰色。在 DBGrid 组件的OnDrawColumnCell 事件处理程序中测试数据并改变颜色,程序代码如下:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

begin

if Table1.FieldByName(\'Population\').AsInteger > 20000000 then

DBGrid1.Canvas.Font.Color := clBlue;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

这是一项简单实用的技术,它除了可以显示数据内容,还可以显示信息的意义,例如太多人口、账号透支、零件到货等。

D 在程序运行时创建报告

使用Quick Report 提供的QRCreateList 函数,可以在运行时建立报告。下面是一个实例:

QRCreateList(aReport, Self, qryCountry, \'Country Report\', FieldList);

其中,aReport 为报告的名称;qryCountry 为数据表名称;\'Country Report\' 为报告题目;FieldList 为包含在报告中的字段列表,如果这个列表等于nil 或包含0 个项目,所有字段都将被使用。

在运行时建立一个报告的代码如下:

{ 默认的字段列表为nil }

FieldList := nil;

{ 确保新报告对象指向nil, 否则使用QRCreateList 函数建立报告时,将出错 }

aReport := nil;

{ 调用QRCreateList 函数建立报告,将自动建立一个含有列头带和细目带的报告,

用户可以在预览或打印前,添加组带、汇总带等内容 }

QRCreateList(aReport, Self, qryCountry, \'Country Report\', FieldList);

E 巧用字段编辑器

字段编辑器(Fields Editor )除了可以建立永久的字段对象外,还可以帮助程序员迅速将数据库控件放置到窗体上。方法如下:

从字段编辑器将一个字段名拖放到窗体上,当你松开鼠标键时,Delphi 就向窗体上添加一个TLabel 和一个TDBEdit 控件。这些被建立的控件使用在字段编辑器中设定的属性:包括AlignmentDisplayLabelDisplayWidthEditMask 属性。当然,DBEditDataSourceDataField 属性也被设置好了。

F 加速数据库的搜索过程

想增加数据库的检索速度吗?在进行数据检索之前,调用数据表的DisableControls 方法,将DataSetDataSource 组件的联系断开,当检索结束时,调用数据表的EnableControls 方法,重新在DataSetDataSource 组件之间建立联系,这样就可以节省更新数据控制的时间,从而加速检索的速度。下面是一个实例:

unit Unit1;

.

.

type

TForm1 = class(TForm)

DataSource1: TDataSource;

Table1: TTable;

Button1: TButton;

.

.

procedure TForm1.Button1Click(Sender: TObject);

var

SeekValue: string;

begin

Table1.DisableControls;

Table1.FindKey([SeekValue]);

Table1.EnableControls;

end;

 

end.

G 增强数据表的处理能力

对使用数据表的应用程序,怎样在减少代码维护的同时增加程序的性能?使用Delphi 的数据模块就可以做到这一点。方法如下:

1 在程序计划中添加一个数据模块(Data Module );

2 将数据表存取组件放到数据模块窗体上:为应用程序使用的每个数据表都添加一个TTableTDataSource 组件到数据模块窗体上,并正确设置它们的DatabaseNameTableNameDataSet 属性。

3 在使用数据表的每个窗体上加入对数据模块单元的应用,这样就可以在这些窗体上使用数据控制组件了,将这些组件的DataSource 设置为数据模块的合适的TDataSource 组件。

使用数据模块窗体将所有数据表都集中起来后,有以下三个优点:第一,免去了向每个窗体均添加数据表存取组件;第二,如果同一数据字段在不同的窗体中使用并修改,这样的修改在不同的窗体间是共享的,而且不需要增加任何代码;第三,由于程序减少了在不同窗体上校验同一数据表的代码,所以程序的性能达到一定的改善。

 

DELPHI 编程技巧集锦(3

董占山

( 中国农科院棉花研究所,河南安阳, 455112)

五、操作系统相关的技巧

A 如何决定Windows 的版本

Windows 具有多个版本,一个应用程序或者具有运行在多个Windows 版本下的灵活性,或者通过条件编译指令,编译成只能在一个操作平台下工作。

下面介绍一种方法,可以使应用程序能动态地决定Windows 操作系统的版本。应用程序通过调用Windows API 函数GetVersionEx 可以获得Windows 的版本信息,该函数使用一个TOSVersionInfo 类的变参,所有Windows 版本信息就包含在其中,其结构如下:

typedef struct _OSVERSIONINFO{

DWORD dwOSVersionInfoSize; // 结构的大小

DWORD dwMajorVersion; // 主版本

DWORD dwMinorVersion; // 副版本

DWORD dwBuildNumber; // 建立版本

DWORD dwPlatformId; // 操作平台标识

TCHAR szCSDVersion[ 128 ]; // 版本标识字符串

} OSVERSIONINFO;

下面是使用该函数的一个例子:

procedure TForm1.Button1Click(Sender: TObject);

var

VersionInfo: TOSVersionInfo;

begin

VersionInfo.dwOSVersionInfoSize := Sizeof(TOSVersionInfo);

GetVersionEx(VersionInfo);


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap