当前位置:编程学习 > Delphi >>

Delphi经验技巧集锦

一.为列表框添光彩

---- 为了改变Listbox和Combobox两个控件的单调风格, 我想在它们的每一项前面加上 个图标。从表面上看好像不大可能啦。就在走投无路的时候,我忽然发现这两个构件都 有一个style属性, 它可以设为lbOwnerDrawFixed,Draw这个单词吸引了我,然后我又 从Delphi的在线帮助中找到了一个相关的事件OnDrawItem,在这个事件中写一段代码, 就可以在列表框中的每一项前面添加一个小图标啦。

---- 下面是在Listbox 的OnDrawItem事件中添加的代码:

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: emp11.bmp′);
 //指定图文件是d: emp11.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;

---- 进一步,利用OnDrawItem事件的参数Index还可以在不同项前面添加不同的图标。 还要告诉你的是, 当用add方法为列表框或下拉框添加项目时, 会自动执行 OnDrawItem事件,这样新添加的项目前面也就有了一个图标。

---- 二.获取count值

---- Delphi与Power Builder一样,都提供了SQL语言,来实现对数据库的访问,仅仅是 实现语句的长短不同。Delphi是在Pascal语言基础之上发展起来的,它提供了强大的功 能,各种控件提供了丰富的属性和方法。我们应该充分利用这些属性和方法。要想知道 某数据库的记录数, 用一个简单的语句即可完成。例如求Delphi的DBDemos数据库中表 day.db的记录总数,假设Table控件已加到Form上,具体实现语句为:

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);

---- 三.给数据库报表加上网格线

---- 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个子属性,其功能如下:

Color 显示网格线颜色
Style 报表网格线的形状,如实线、虚线等
Width 网格线的宽度
DrawBottom 网格的底部
Drawlefl 网格的左边
DrawRight 网格的右边
DrawTop 网格的底部

---- 在制做报表前,最好在数据库表中添加几个记录,然后根据需要修改这些属性,使 用报表的预览功能在设计期间看修改效果,不满意可立即修改。

---- 四.定制Speedbar

---- 在Delphi的可视化设计界面中,使用最频繁的地方要数位于屏幕左上角的加速按钮 栏(Speedbar)了。在实践过程中,笔者无意中发现了Speedbar的定制方法,这在我用 过的四本Delphi参考书中均未提及到。步骤如下:

---- 右键点击Speedbar, 在弹出菜单中选Properties, 这时会出现一个名为Speedbar Editor的对话框。假设想要增设一项“语法检查”的功能,可在左边Categories列表框 中选Project, 再把右侧的Syntax Check图标拖放到Speedbar的合适的位置上,这项功 能就已经加上了。 如果speedbar上没有多余的空间来容纳新的按钮, 可将鼠标停在 speedbar右框处,变为双向箭头的形状时,向右拖动一段距离,就可腾出空间。如想删 除speedbar上的某个按钮,可简单地把它拖出speedbar的范围,就能删除。操作十分方 便。 建议把Syntax Check、 Project Options(工程选项) 、 WindowsApi Help加到 Speedbar中,可以提高开发效率。

---- 五.设计Form时的快捷键

---- 使用快捷键可以加快设计速度。下面列出的快捷键,可根据实际情况,有选择地熟 练掌握。

    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键再用鼠标点击组件,可以选择多个组件。

---- 下面这条是我摸索出来的: Ctrl+drag :按住Ctrl键在一个容器组件(如Panel,QReport,Groupbox等)里拖动 鼠标,可强制选择鼠标拖过的矩形框中的所有属于此容器的可视组件(不包括该容器组 件)。

---- 六.命令行参数的使用

---- Delphi提供了访问命令行参数的方便的方式,那就是使用ParamStr和ParamCount函 数。其中ParamStr(0)返回的是当前程序名,如C:TESTMYPROG.EXE,ParamStr(1)返回 第一个参数,以此类推;ParamCount则是参数个数。示例如下:

    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;


---- 七.DCU文件(编译的库单元)的重用

---- (1)在interface里的uses子句中引用。如Windows,Dialogs等,要求被引用的DCU一 定要放在Delphi4Lib子目录中。

---- (2)在implementation里的uses子句中引用。如果是自行编写的DCU文件,应采用这 一方式,并将被引用的DCU文件放入当前工程所在的子目录中。

---- 八.使用字符串资源的技巧

---- 不同于其它资源,字符串资源不能直接编辑,需要先按格式编制一个文本文件,再 用程序将其编译成资源文件。下面用一个简单的例子来说明。首先用文本编辑器编一个 文件lb.rc,其内容如下:

STRINGTABLE
BEGIN
1,"开始"
2,"退出"
END

---- 然后, 找到Delphi的Bin子目录下的BRCC32.EXE文件进行编译, 命令格式为: BRCC32 LB.RC,编译结束后即生成一个资源文件lb.res。要使用该资源文件,需要在单 元文件implementation部分的开始处包括资源文件:{$R LB.RES}。在本例中,上面的 字符串用于给一个命令按钮更换Caption设置, 使用的函数是Windows API函数 LoadString,以下是使用实例:

//在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;


---- 这样就可以在程序运行时改变各种属性,而不需要在程序中出现字符串。如果使用 另一个Delphi函数LoadStr,会显得更加简单:

var
txtCaption:String;
begin
txtCaption:=LoadStr(2);
if txtCaption〈〉′′ then
btnStart.Caption:=txtCaption;
end;

---- 或许大家可以从以上的过程中看出, 使用123来标识一个字符串有些简陋,也很容 易出错,那么怎么办呢?我们可以采取像C++中使用字符串的方法,为每个字符串预定 义一个ID,如:

    const
    IDC—START=1;
    IDC—EXIT=2;

---- 当然要把它放在一个unit里(类似于C++的.h文件) ,在使用的单元里再uses一 下就可以了,这样应用感觉是不是很爽

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,