📄 032.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-程序应用-->Delphi经验技巧集锦</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-程序应用 Delphi经验技巧集锦">
<META NAME="description" CONTENT=" - DELPHI专题文档-程序应用 - Delphi经验技巧集锦">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index6.html">返回</a>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">Delphi经验技巧集锦</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>一.为列表框添光彩</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 为了改变Listbox和Combobox两个控件的单调风格,
我想在它们的每一项前面加上
个图标。从表面上看好像不大可能啦。就在走投无路的时候,我忽然发现这两个构件都
有一个style属性, 它可以设为lbOwnerDrawFixed,Draw这个单词吸引了我,然后我又
从Delphi的在线帮助中找到了一个相关的事件OnDrawItem,在这个事件中写一段代码,
就可以在列表框中的每一项前面添加一个小图标啦。 </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 下面是在Listbox 的OnDrawItem事件中添加的代码:
</span></p>
<BR>
<pre><span style="font-size: 9pt">
procedure TForm1.ListBox1DrawItem(Control:
TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Bitmap: TBitmap;
Offset: Integer;
begin
with (Control as TListBox).Canvas do
begin
FillRect(Rect);
Offset := 2;
Bitmap := TBitmap.create;
Bitmap.LoadFromFile(′d:\temp1\1.bmp′);
//指定图文件是d:\temp1\1.bmp
BrushCopy(Bounds(Rect.Left + 2, Rect.Top,
Bitmap.Width, Bitmap.Height),
Bitmap, Bounds(0, 0, Bitmap.Width,
Bitmap.Height), clRed);
Offset := Bitmap.width + 6;
TextOut(Rect.Left + Offset, Rect.Top,
(Control as TListBox).Items[Index])
end;
end;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 进一步,利用OnDrawItem事件的参数Index还可以在不同项前面添加不同的图标。
还要告诉你的是, 当用add方法为列表框或下拉框添加项目时,
会自动执行 OnDrawItem事件,这样新添加的项目前面也就有了一个图标。
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>二.获取count值</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> Delphi与Power Builder一样,都提供了SQL语言,来实现对数据库的访问,仅仅是
实现语句的长短不同。Delphi是在Pascal语言基础之上发展起来的,它提供了强大的功
能,各种控件提供了丰富的属性和方法。我们应该充分利用这些属性和方法。要想知道
某数据库的记录数, 用一个简单的语句即可完成。例如求Delphi的DBDemos数据库中表
day.db的记录总数,假设Table控件已加到Form上,具体实现语句为: </span></p>
<BR>
<pre><span style="font-size: 9pt">
Edit1.text:=inttostr(Table1.recordcount);
如果是要知道符合某条件的记录数,也非常方便,具体实现语句为:
Edit1.text:=inttostr(Query1.recordcount);
Recordcount属性用来表示为数据集相连的表的记录总数。
还有一种通用的方法,具体实现语句为:
VAR i:integer;
Begin
i:=0;
Table1.open;
Table1.First;
While not Table1.eof do
BEG1N
i:=i+1;
Table1.next;
End;
Edit1.text:=inttostr(i);
如果使用了TQuery控件,具体步骤如下:
Query1.close;
Query1.SQl.clear;
query1.SQL.add (′ ...... ′);
//某查询语句
Query1.open
Query1.first;
i:=0;
While not Query1.eof do
BEG1N
i:=i+1;
Query1.next;
EnD
Edit1.text:=Inttostr(i);
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>三.给数据库报表加上网格线</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> Delphi 1.0和2.0版捆绑了Reportsmith报表制作工具,实现报表打印。如果打印一
个很简单的报表,在程序中启动Reportsmith,就显得比较麻烦。对于比较简单的报表,
我们一般按本报63期相应文章的方法实现报表打印。例如,用Delphi 1.0编写的商业财
务软件《保灵商务营销管理系统》中报表打印就是自主开发的,整个系统显得短小、整
体性比较好。Delphi 3.0和Delphi 4.0就不再捆绑Reportsmith,但增加了QReport组中
报表控件的功能,
使得报表制作更加灵活。给报表加上网格线就太容易了。在QReport
组件中用来显示数据的TQRExpr。 它就有一个Frame属性, 按下 F11键, 在
“Object inspect”中,修改“Frame”属性,它提供7个子属性,其功能如下:
</span></p>
<BR>
<pre><span style="font-size: 9pt">
Color 显示网格线颜色
Style 报表网格线的形状,如实线、虚线等
Width 网格线的宽度
DrawBottom 网格的底部
Drawlefl 网格的左边
DrawRight 网格的右边
DrawTop 网格的底部
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
在制做报表前,最好在数据库表中添加几个记录,然后根据需要修改这些属性,使
用报表的预览功能在设计期间看修改效果,不满意可立即修改。 </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>四.定制Speedbar</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 在Delphi的可视化设计界面中,使用最频繁的地方要数位于屏幕左上角的加速按钮
栏(Speedbar)了。在实践过程中,笔者无意中发现了Speedbar的定制方法,这在我用
过的四本Delphi参考书中均未提及到。步骤如下: </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 右键点击Speedbar,
在弹出菜单中选Properties, 这时会出现一个名为Speedbar Editor的对话框。假设想要增设一项“语法检查”的功能,可在左边Categories列表框
中选Project, 再把右侧的Syntax Check图标拖放到Speedbar的合适的位置上,这项功
能就已经加上了。 如果speedbar上没有多余的空间来容纳新的按钮,
可将鼠标停在 speedbar右框处,变为双向箭头的形状时,向右拖动一段距离,就可腾出空间。如想删
除speedbar上的某个按钮,可简单地把它拖出speedbar的范围,就能删除。操作十分方
便。 建议把Syntax Check、 Project Options(工程选项) 、 WindowsApi Help加到
Speedbar中,可以提高开发效率。 </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>五.设计Form时的快捷键</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
使用快捷键可以加快设计速度。下面列出的快捷键,可根据实际情况,有选择地熟
练掌握。 </span></p>
<BR>
<pre><span style="font-size: 9pt">
Del :删除所选组件;
Esc :选择当前组件的容器(通常是Panel,Group或Form);
F11 :在Form或Unit和对象检查器之间切换;
F12 :在Form和代码编辑器间切换;
Ctrl+F12 :显示“查看Unit”对话框;
Shift+F12 :显示“查看Form”对话框;
TAB :下一个组件;
Shift+TAB :上一个组件;
方向键 :选中此方向上最近的组件;
Ctrl+方向键 :将所选组件移动一个点;
Shift+方向键 :将所选组件改变一个点的大小;
Ctrl+Shift+方向键 :将所选组件移动一个格;
Shift+click :按住Shift键再用鼠标点击组件,可以选择多个组件。
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
下面这条是我摸索出来的: Ctrl+drag :按住Ctrl键在一个容器组件(如Panel,QReport,Groupbox等)里拖动
鼠标,可强制选择鼠标拖过的矩形框中的所有属于此容器的可视组件(不包括该容器组
件)。 </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>六.命令行参数的使用</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> Delphi提供了访问命令行参数的方便的方式,那就是使用ParamStr和ParamCount函
数。其中ParamStr(0)返回的是当前程序名,如C:\TEST\MYPROG.EXE,ParamStr(1)返回
第一个参数,以此类推;ParamCount则是参数个数。示例如下: </span></p>
<BR>
<pre><span style="font-size: 9pt">
var
I: Word;
Y: Integer;
begin
Y := 10;
for I := 1 to ParamCount do begin
Canvas.TextOut(5, Y, ParamStr(I));
Y := Y + Canvas.TextHeight(ParamStr(I)) + 5;
end;
end;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>七.DCU文件(编译的库单元)的重用</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> (1)在interface里的uses子句中引用。如Windows,Dialogs等,要求被引用的DCU一
定要放在Delphi4\Lib子目录中。 </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> (2)在implementation里的uses子句中引用。如果是自行编写的DCU文件,应采用这
一方式,并将被引用的DCU文件放入当前工程所在的子目录中。 </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>八.使用字符串资源的技巧</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
不同于其它资源,字符串资源不能直接编辑,需要先按格式编制一个文本文件,再
用程序将其编译成资源文件。下面用一个简单的例子来说明。首先用文本编辑器编一个
文件lb.rc,其内容如下: </span></p>
<BR>
<pre><span style="font-size: 9pt">
STRINGTABLE
BEGIN
1,"开始"
2,"退出"
END
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 然后, 找到Delphi的Bin子目录下的BRCC32.EXE文件进行编译,
命令格式为: BRCC32 LB.RC,编译结束后即生成一个资源文件lb.res。要使用该资源文件,需要在单
元文件implementation部分的开始处包括资源文件:{$R LB.RES}。在本例中,上面的
字符串用于给一个命令按钮更换Caption设置, 使用的函数是Windows API函数
LoadString,以下是使用实例: </span></p>
<BR>
<pre><span style="font-size: 9pt">
//在FormCreat过程中:
var
txtCaption:array [0..255] of char;
begin
//
if LoadString(HInstance,1,txtCaption,SizeOf
(txtCaption))〉0 then
btnStart.Caption:=StrPas(txtCaption);
end;
//在btnStartClick过程中:
var
txtCaption:array [0..255] of char;
begin
if LoadString(HInstance,2,txtCaption,
SizeOf(txtCaption))〉0 then
btnStart.Caption:=StrPas(txtCaption);
end;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
这样就可以在程序运行时改变各种属性,而不需要在程序中出现字符串。如果使用
另一个Delphi函数LoadStr,会显得更加简单: </span></p>
<BR>
<pre><span style="font-size: 9pt">
var
txtCaption:String;
begin
txtCaption:=LoadStr(2);
if txtCaption〈〉′′ then
btnStart.Caption:=txtCaption;
end;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
或许大家可以从以上的过程中看出, 使用123来标识一个字符串有些简陋,也很容
易出错,那么怎么办呢?我们可以采取像C++中使用字符串的方法,为每个字符串预定
义一个ID,如: </span></p>
<BR>
<pre><span style="font-size: 9pt">
const
IDC—START=1;
IDC—EXIT=2;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
当然要把它放在一个unit里(类似于C++的.h文件)
,在使用的单元里再uses一
下就可以了,这样应用感觉是不是很爽呢? </span></p>
<BR>
<pre><span style="font-size: 9pt"> txtCaption:=LoadStr(IDC—EXIT);</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> <b>九.让图像旋转</b>
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> Delphi中的Image构件可以显示位图,进一步,我们还可以用它完成位图旋转。
</span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
把一个点绕原点旋转α角度后,新的坐标位置与原坐标位置的关系是:
</span></p>
<BR>
<pre><span style="font-size: 9pt">
X=x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -