Delphi经验技巧集锦
delphi教程
delphi教程
Delphi 是一种基于 Pascal 的编程语言,用于创建窗体应用程序和控制台应用程序。
以下是一些Delphi的教程和指南,可以帮助您入门以及深入了解Delphi的各种功能和特性。
1. Delphi 简介和基础知识
- Delphi 是什么?它的历史和背景
- 安装和设置 Delphi 开发环境
- Delphi IDE 的界面和基本功能介绍
- Delphi 的 Pascal 语法和常用关键字
2. Delphi 窗体应用程序开发
- 创建一个简单的窗体应用程序
- 窗体的属性和事件
- 使用组件和控件设计用户界面
- 处理用户输入和事件响应
3. Delphi 数据库应用程序开发
- 连接和操作数据库
- 使用 SQL 查询和更新数据库
- 数据库表格和字段的创建和管理
- 数据集和数据绑定
4. Delphi 高级特性和技巧
- 使用面向对象编程技术
- 使用线程和并发处理
- 图形和图像处理
- 异常处理和调试技巧
5. Delphi 与其他技术的集成
- 使用外部 DLL 和动态链接库
- 与 Web 服务进行通信
- 与其他编程语言进行互操作
- 创建和使用自定义组件和控件
以上是一些Delphi教程的主要内容,在学习过程中,您可以通过搜索更多的资料来深入了解每个主题。
准备好了解Delphi 的强大功能和灵活性吗?开始学习吧!。
delphi常用技巧
delphi常用技巧
Delphi是一种强大的编程语言,有许多有用的技巧和功能可以帮助提高开发效率。
以下是一些Delphi常用的技巧:
1. 使用快捷键:Delphi支持许多快捷键,使用这些快捷键可以快速完成常见的任务,如Ctrl+C用于复制,Ctrl+V用于粘贴等。
2. 快速查找和替换:使用Ctrl+Shift+F可以打开查找和替换对话框,输入要查找的文本,然后输入要替换的文本,最后点击“全部替换”即可。
3. 调试技巧:在调试时,可以使用断点、观察表达式、单步执行等技巧来检查程序的运行情况。
4. 自定义控件:Delphi支持自定义控件,可以创建自己的控件来满足特定的需求。
5. 使用第三方控件:Delphi有许多第三方控件可用,这些控件可以提供更多的功能和更好的用户体验。
6. 优化代码:使用一些技巧可以优化代码的运行速度和可读性,例如使用局部变量、避免不必要的对象创建等。
7. 使用异常处理:在Delphi中,可以使用异常处理来处理运行时错误和异常情况。
8. 使用多线程:Delphi支持多线程编程,可以使用多线程来提高程序的性能和响应速度。
9. 使用数据库:Delphi支持多种数据库连接方式,可以使用数据库来存储和检索数据。
10. 使用第三方库:Delphi有许多第三方库可用,这些库可以提供更多的功能和更好的性能。
希望这些技巧可以帮助你更好地使用Delphi进行开发。
delphi十个小技巧
delphi十个小技巧1、判断一个字符串是否包含于另外一个字符串的方法例如:if pos('ab','abcd')<>0 thenmessagedlg('ab是包含于abcd',mtConfirmation,[mbYes, mbNo],0);pos(obj,target) 在target字符串中找出第一个出现obj的第一个字符位置,如果找不到,返回0.2、如何使窗口全屏,类似游戏一样,而不是窗口的最大化!(1)BorderStyle 为 bsNone(2)Windowstate 为 wsMaximized(3) 退出时可加一个按钮之类的,写上 close 即可退出。
3、数字格式化输出format('%8.2f',[123.456]),返回字符串'123.46'。
4、播放一个wav文件usemmsystem;SndPlaySound('hello.wav',SND_FILENAME or SND_SYNC);5、InputBox,InputQuery和ShowMessage函数的威力usesdialogs;vars,s1:string;b:boolean;begins:=trim(Inputbox('NewPassword','Password','masterkey'));b:=s<>'';s1:=s;if b then b:=InputQuery('ConfirmPassword','Password',s1);if not b or (s1<>s) thenShowMessage('Password Failed');end;6、几个有关子目录的操作的过程MkDir(str); ChDir(str); GetDir(DriveID,str); SetCurrentDir(str);IOResult --上面几个过程调用成功即返回0值7、将一个可视控件变成图形类型例如将一个带背景的LABEL变成一个TIMAGE图片类型,可以这样做:image1.width:=label1.width;image1.height:=label1.height;label1.perform(WM_PAINT,image1.Canvas.Handle,0);8、如何得到字符的ASCII值得到字符的ASCII值,可以用如下语句:var: a:integer;string1:string;beginstring1:='ABC';a:=byte(string[1]); {此时就得到'A'的ASCII值}end;9、动态更新DBGrid的颜色例如,如果一个城市的人口大于200万,我们就让它显示为蓝色。
delphi7.0学习经验积累
delphi7.0学习经验积累 [原]2006年开始学习delphi一路以来的经验积累吐血大公开。
若这些经验对你有所帮助,能使你少走些许弯路,恳请能告诉我,或若愿意和我分享经验,探讨vb、delphi、vc、asp问题请留下评论或email。
本人email:boythl@。
用得不多。
===================================================2006、10、11在制作DLL时,在最后一定要把要发布的函数列出来,不然调用时会程序初始化失败,无法进入;exports FunctionName;MKDir(Path) 函数创建文件夹;在创建数据库时,用户名需要设为Admin,改成txtx时发生了“无法启动应用程序。
工作组信息文件丢失”的错误。
2006、10、12StrUnits单元中DupeString 函数 = VB string函数重复N次某字符PosEx可以从某个特定位置开始查找某字符MidStr函数 = VB Mid函数ReverseString函数翻转字符串StuffString函数向一个字符串在某位置插入一个子字符串RightStr 函数,从字符串最后取字符StrRScan 字符最后次出现的指针只有有序的数字和字母才能作为集合(sets),且个数不能超过255个.TStrings对象的NameValueSeparator属性可以设置TStrings对象的文本包含Name和Value,如a=1,设置NameValueSeparator:='='可以使用getName等方法提取Name和Value2006、10、17ItemProps属性可以控制valueeditlist控件显示下拉框,在使用时需要注意self.vldFields.Row-1,因为表头的Key value行index=0procedure TForm1.vldFieldsClick(Sender: TObject);beginself.vldFields.ItemProps[self.vldFields.Row-1].EditStyle:=esPickL ist; //显示下拉框self.vldFields.ItemProps[self.vldFields.Row-1].PickList:= TargetFields;end;今天发现在SQL中,若两文本字段其中一个文本字段为null(非""),另一个文本字段非Null则两个字段可通过等号检索到(F1=F2),而若两个文本字段都为null时则等号检索不到,但用不等号也不能检索出来。
delphi2010小技巧集
delphi2010小技巧集
delphi2010小技巧集
━━━━━━━━━━━━━━━━━━━━━━━━━━
Delphi2007以后的版本,可以在事件内任何地方敲入 var, 然后连续敲3次tab 键,看到什么?对,它自动将这个变量申明写入该写入的地方了,方便不少吧?
for in 语法就不多说了,2009以后泛型也支持了。
最重要的是支持 win7 的新的 api
━━━━━━━━━━━━━━━━━━━━━━━━━━
另外如果大家尝试一下扩展目前的Code模板你会发现代码的生产力又是一个等级的提升. 这个code模板比cnpack带的更强大. 去看一下Embarcodero网站视频吧, 举个例子先:
假如有一种类型TTestKind = {tk1, tk2, tk3, tk4, tk5}
定义一个变量 a: TTestKind
在下面敲 case 空格 a tab 直接生成以下代码
case a of
tk1:;
tk2:;
tk3:;
tk4:;
tk5:;
end;
更强大的功能大家自己体验吧, 它可以结合CodeCompletion
━━━━━━━━━━━━━━━━━━━━━━━━━━。
Delphi的8个技巧
Delphi的8个技巧2. Delphi hint的字体和色彩如何改变Delphi中TApplicatio n的属性有HintColor及HintPauseo可以通过设置HintColor改变应用程序中的Hint的颜色、通过设置HintPause 改变触发出nt的时间。
但遗憾的是: Delphi中Hint的字体不可以改变。
3. Delphi里如何计算日期算时间在delphi中是最容易的,如下:var ss:TDateTime其实Tdatetime是个双精度的浮点数,它的小数点前表示天数:如ss二ss+20 表示从ss开始向后20天,如果ss二234.567它就表示234.567天,当然是从公元0年开始计算的!4 如何用Delphi编ScreenSaver? (null)屏幕保护程序无非是扩展名换成了SCR的可执行程序,它接受两种命令行参数: s运行命令参数c配置命令参数Windows通过向程序发s命令行参数来启动程序。
要注意的是:程序的窗口是无边框和标题:窗口大小应与屏幕大小样;还要注意窗口的事件的处理。
5. Delphi 中如何改目录的名字调用RenameFile函数,如:RenameFile('c:\wang\temp','c:\wang\tmp');6. DELPHI显示JPE G图像文件只要uses中加入JPE G就行JPE G单元里是有个TJPEGlmage类,可定义变量如Jpe g,用LoadFromFile调入某个JPEG文件,然后用Form的Canvas.Draw(x,y,Jpeg)即可显示7. Delphi中对Jpe g格式文件的处理..(1).在Uses 中加入JPEG单元!(2).定义个全程变量,例如var AJPEG: TJPEGlmage;(3).在Form 的OnCreate事件中加入·Canvas.Pen.Co1or:二clB1ackCanvas.Pen.Sty1e:二psSo1id;Canvas.Brush.co1or:二clBtnFaceCanvas.Brush.Sty1e:二bsSo1id;//此上是设置Canvas的一些属性,便于以后//C1ear Form and Load a new]PEG fi1e;A]peg:二T]peglmage.Create;//动态生成A]peg; A]peg.LoadFromFi1时'D:\Temp.j阻')//生成A]peg 后,调入]PEG 文件!(4).在Form 的OnPain事件中加入Canvas.Rectang1e(2,2,560,430); //画个黑框的矩形将图片围住!x:二10; y:二10;Form1.Canvas.Draw(x,y,A]peg); //以(x,y)为左上角输出]PEG文件!//实际上其作用是当图形被破坏是使图形恢复!(5).在,Load'或,Browse' 按钮的OnClick事件中加入:beginif OpenPictureDia1og1.ExecutethenbeginA]peg.Free;//释放旧A]peg;A]peg:二T]peglmage.Create;//产生一个新的A]peg;A]peg.LoadFro mF i1e(OpenPictureDia1og1. Fi1ename);//载入]PE G文件!endCanvas.Rectang1e(2,2,560,430);//将Form C1ear;x:二10y:二10;Form1.Canvas.Draw(x,y,A]peg);//显示新的A]peg;end8. DELPHI3启动画面in your *.dbrfi1es do itbegin{Create a sp1ashform}sp1ash:二Tsp1ash.Create(self);sp1ash.Show;sp1ash.updateApp1ication.lnitia1ize;App1ication.CreateForm(..)end;sp1ash. close; sp1ash.free; App1ication.Run。
Delphi快速入门教程(三)
1.2.4.3 汉化界面及字体选取如果您的Windows95系统中安装了中文系统,对界面做汉化是极其方便的。
例如,您可以将Button1的Caption属性改成“&R矩形”,同样地可改变其它部件的属性,将窗体做成中文的操作界面。
若对中、西文字体不满意,则可以调整Font属性以满足您的要求。
Font属性的前面,有一个小小的“+”号,这说明它表征的是集属性,也即属性不再是一个单值,而是一个属性的集合。
双击Font,Object Inspector将在下面扩充显示它的其它属性。
Color用来表示文本的颜色,Name定义了字体名,如System,MsSerif,Arial,宋体,黑体等。
Style下又拥有四个属性:fsBold,fsItalic,fsUnderline和fsTrikeOut。
如果想让字体有其中的某种风格,可把相应的属性值设成True。
Font对话框可以更为直接地设定以上属性。
Font属性右侧值段有带省略号的按钮,单击它可以激活Font对话框,如图1.7所示:这一对话框中包含了上述的全部属性,使得调整字形更为直接方便。
但要申明的是,对于窗体Form来讲,Font属性改变的是窗体中其它部件的显示字形,它本身的标题字体是缺省的System字体,不能通过属性来改变。
1.2.4.4使用图形编辑对话框最后,我们用图标按钮BitBtn1来控制Shape部件的颜色。
选中图标按钮,将它的Cap tion属性改为“&Color”(或“&C颜色”)。
可以在按钮中加入一个图标来形象地表述它的功能。
选用Object Inspector中的Glyph属性,点动值段的三点按钮,弹出图形编辑对话框。
您可以通过图形编辑对话框装入图标,在本例程中,按动Load按钮,选择\Delphi 2. 0\Images\Buttons\Brush.bmp文件装入,Bitbtn1就成为一个图标按钮。
另外,Delphi还为您提供了丰富的Windows标准图标按钮。
DelphiIDE使用的一些主要技巧
DelphiIDE使⽤的⼀些主要技巧Delphi IDE使⽤的⼀些主要技巧1、查找和替换(1)<ctrl>+F[1]:选择页“Find”,进⾏查找,则根据查找⽅向继续查找。
选择页“Findin Files”,则进⾏该⼯程内的全⽂查找。
(2)<ctrl>+R:替换。
(3)设置书签和定位:设置书签:<ctrl>+<shift>+数字[2]定位书签:<ctrl>+数字2、窗体编辑(1)<F12>:在窗体编辑和代码编辑间进⾏切换。
(2)<F11>:调⽤窗体组件属性/事件浏览设置器(Object Inspector)。
(3)<菜单:view>+<菜单:Alignment Palette>:对齐⾯板:⽤于对齐各个可视组件。
3、代码编写⽅⾯(1)<ctrl>+J:调⽤⾃动代码完成模板,实现成段代码的⾃动完成。
关于模板的配置,可以在<菜单:Tools> + <菜单:Editor Options…> + <⾯板:Source Options> + <按钮:Edit Code Templates…>中完成。
(2) <ctrl>+ <⿏标:单击>:查看所在⽅法的实现代码、所在变量的声明等内容。
(3)<ctrl>+<Space>:代码⾃动完成提⽰<ctrl>+<shift>+<Space>:⽅法体内参数提⽰。
4、程序编译和运⾏⽅⾯(1)<F9>:编译并运⾏(可以设置断点进⾏调试)。
<F8>:单步调试,但是不进⼊到相关的⼦函数/过程体内<F7>:逐步调试,调试深⼊每⼀个相关的⼦函数/过程体内。
<ctrl>+<F2>:结束程序调试运⾏状态,回到程序编辑状态。
DELPHI编程技巧集锦(2)
在编辑程序源代码时,不同代码块之间保持不同的缩进距离,可以使代码易于阅读。当程序结构调整之后,需要调整代码的缩进量,通常我们使用上下光标键在不同代码行之间进行切换,用<空格>、<Tab>和<Del>键来增加或减少缩进空间。使用过Turbo Pascal的老用户可能还记得它的集成编辑器提供了一组快捷键来快速切换代码块的缩进量,使用十分方便。其实,Delphi集成编辑器也提供了两个组合键来快速增加或减少多行代码的缩进量。首先选择待改变缩进量的代码块,按<Ctrl+Shift+I>组合键来扩展代码块的缩进量,按<Ctrl+Shift+U>组合键来缩小代码块的缩进量。
2将数据表存取组件放到数据模块窗体上:为应用程序使用的每个数据表都添加一个TTable和TDataSource组件到数据模块窗体上,并正确设置它们的DatabaseName、TableName和DataSet属性。
3在使用数据表的每个窗体上加入对数据模块单元的应用,这样就可以在这些窗体上使用数据控制组件了,将这些组件的DataSource设置为数据模块的合适的TDataSource组件。
C
DBGrid是显示表格数据的好控件,本例旨在演示如何动态地改变其中的文本颜色。例如,我们想用DBGrid中的行来显示国家的信息,如果国家的人口大于2亿,数据行显示将为兰色。在DBGrid组件的OnDrawColumnCell事件处理程序中测试数据并改变颜色,程序代码如下:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
theStringList: TStringList; (*temp storage*)
Delphi实用技巧经验(图文)
‘’空‘’空格空格调整对齐方式窗体的visible属性设置相当于showmodalaq一行一行执行,所以要把一些语句写在循环里(除了在grid添加数据)Caption,Text:显示名Name:系统名Sql表:create,drop,alter 数据:insert,delete,update数据模块在uses里时用文件名,调用时用系统名全局变量:用于不同表单间的传值。
如在public中定义变量a,使用时把值赋给form.a,具体可参考设置第一列为下拉式菜单Delphi设置切换窗体project-options-forms 字体tools-options-display问题处理属性栏消失按F11Image提示“unknown picture file extension(.jpg) ”在uses中加Jpeg重建某个窗体(如unit2):新建unit1unit2,退出再重建,使之产生dcu文件,再将这三个文件复制到所需目录下,同时删除history 文件夹DBGrid某列的小数位数(at默认会去掉末尾的0,如1.00->1)TFloatField(dbGrid1.Columns[2].Field).DisplayFormat := '0.00'; 函数定位posex(str1, str2,[n]) 在str1在str2从n的位置开始的位置,默认从1开始,输出int类型,必须在uses中加入StrUtils posex('b','abcabcabc',3)=5复制copy(str,2,3),输入输出都是str,如copy(inttostr(1234),2,2)=23长度length(str) 输出int重复dupestring(chr(9),10) 将Tab重复10次,必须在uses中加入StrUtils左取leftstr(str,2),rightstr(str,2),必须在uses中加入StrUtils保留小数位数(2位),会四舍五入FormatFloat('0.00',1.111),str类型格式小数小数定义成real,转换floattoint,inttofloat;floattostr ,strtofloat Asfloat 验证trystrtofloat(同理trystrtoint)Vars: string;x:double;begins:='123.45x';if not trystrtofloat(s,x)then showmessage('数据类型转换出错');end保留小数位数(2位),会四舍五入FormatFloat('0.00',1.111),str类型DBGrid某列的小数位数(默认会去掉末尾的0,如1.00->1,下面语句只改变DBGrid显示格式,若从at取出数据给edit,显示的还是去0,但是sql表中定义成money类型而delphi中提交如1,则sql表中自动转换为 1.00)TFloatField(dbGrid1.Columns[2].Field).DisplayFormat := '0.00';日期定义成date1:TDateTime,转换用datetostr, strtodate [ if not TryStrToDate(str,date1) then...] AsDateTime常见键值vbKeyBack 8 BACKSPACE 键vbKeyTab 9 TAB 键vbKeyReturn 13 ENTER 键警告窗口application.MessageBox('输入内容','标题 ', MB_ICONEXCLAMATION);1.指定讯息视窗上的图示1.1 MB_ICONEXCLAMATION 或 MB_ICONWARNING出现「黄三角形内有一个惊叹号」图示1.2 MB_ICONINFORMATION 或 MB_ICONASTERISK出现「白色椭圆内有一个蓝色小写 i」图示1.3 MB_ICONQUESTION出现「问号」图示1.4 MB_ICONSTOP 或 MB_ICONERROR 或 MB_ICONHAND出现「红色X」图示2.指定讯息视窗出现的按钮2.1 MB_ABORTRETRYIGNORE出现「Abort」「Retry」「Ignore」三个按钮2.2 MB_OK出现「Ok」按钮,为预设值。
delphi编程技巧与实例精解
一、概述Delphi是一种基于Pascal语言的集成开发环境,它提供了丰富的工具和功能,使得程序员可以轻松进行Windows应用程序开发。
在Delphi编程中,掌握一些技巧和实例是非常重要的,可以帮助程序员提高开发效率,降低错误率,提升编程水平。
本文将对Delphi编程技巧和实例进行精解,希望能帮助读者更好地掌握这门技术。
二、Delphi编程技巧1. 使用正确的数据类型在Delphi编程中,使用正确的数据类型是非常重要的。
不同的数据类型有不同的大小和范围,选择合适的数据类型可以节省内存空间并提高程序的运行效率。
如果需要存储一个整数,应该选择合适大小的整型而不是使用大整数型,以避免浪费内存空间。
2. 合理使用循环结构循环结构是程序中常用的控制结构之一,合理使用循环结构可以简化程序逻辑,提高代码的可读性。
在Delphi中,有多种循环结构可供选择,如while循环、for循环和repeat-until循环,程序员应根据具体情况选择合适的循环结构。
3. 异常处理在编写程序时,应该考虑到各种异常情况,并做好相应的处理。
Delphi提供了丰富的异常处理机制,程序员可以自定义异常类,并使用try-except结构捕获异常,从而保证程序的稳定性和健壮性。
4. 使用面向对象编程面向对象编程是一种重要的编程范式,它能够提高程序的复用性和可维护性。
在Delphi中,使用面向对象编程可以更好地组织和管理代码,提高编程效率。
5. 性能优化在编写程序时,应该考虑程序的性能问题,并采取相应措施进行优化。
Delphi提供了丰富的性能优化工具和技术,程序员可以通过分析程序的性能瓶颈,改进算法和数据结构,提高程序的性能。
三、Delphi编程实例1. 界面设计界面设计是Delphi编程中的一个重要环节,一个美观、简洁的界面可以提升用户体验。
程序员可以使用Delphi提供的界面设计工具,如VCL控件和FireMonkey框架,快速实现各种界面效果。
Delphi使用技巧四则
Delphi使用技巧四则在Delphi的可视化设计界面中,使用最频繁的地方要数位于屏幕左上角的加速按钮栏(Speedbar) 了。
在实践过程中,笔者无意中发现了Speedbar的定制方法,这在我用过的四本Delphi参考书中均未提及到。
步骤如下:右键点击Speedbar,在弹出菜单中选Propertie s,这时会出现个名为Speedbar Editor 的对话框。
假设想要增设项"语法检查"的功能,可在左边Categories列表框中选Project,再把右侧的Syntax Chec k医l标拖放到Speedbar的合适的位置上,这项功能就已经加上了。
如果speedbar上没有多余的空间来容纳新的按钮,可将鼠标停在speedbar右框处,变为双向箭头的形状时,向右拖动段距离,就可腾出空间。
如想删除speedbar上的某个按钮,可简单地把它拖出speedbar的范围,就能删除。
操作十分方便。
建议把Syntax Chec k、Project Options(工程选项)、WindowsApi Help加到Speedbar中,可以提高开发效率。
二、设计For m时的快捷键使用快捷键可以加快设计速度。
下面列出的快捷键,可根据实际情况,有选择地熟练掌握。
Del :删除所选组件:Esc :选择当前组件的容器(通常是Panel,Group或Form);Fll:在Form或Unit和对象检查器之间切换:F12 :在Form和代码编辑器问切换:Ctrl+F12 :显示"查看Uni t"对话框:Shift+F12:显示"查看Form" 对话框:TAB :下个组件!Shift+TAB:上个组件! 方向键:选中此方向上最近的组件! Ctrl+方向键:将所选组件移动个点!Shift+方向键.将所选组件改变一个点的大小!Ctr1+Shift+方向键·将所选组件移动个格!Shift+click:按住Shift键再用鼠标点击组件,可以选择多个组件。
DELPHI编程技巧集锦
DELPHI编程技巧集锦(1)董占山(中国农科院棉花研究所,河南安阳,455112)美国著名的《Delphi开发者杂志(Delphi Developer's Journal)》是世界上众多Delphi程序员必读的专业杂志,在国内我们很少有机会读到这份优秀的专业刊物,但是我们可以在Inprise公司()的网页上看到该杂志刊登的一些优秀文章。
同时,还可以通过电子邮件订阅该杂志免费提供的Delphi使用技巧,订阅网址为/ddj/bor-f.htm。
笔者从中筛选出一些十分有用的Delphi使用技巧和文章,编译出来,与广大Delphi爱好者分享。
有什么意见和建议可以直接给笔者发电子邮件(dzs@)。
读者请注意,本文中的内容多以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...”对话窗口,单击“取消”按钮即可。
DELPHI编程技巧集锦(4)
ShGetFileInfo(PChar(Ext), 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_SMALLICON or
SHGFI_SYSICONINDEX or SHGFI_TYPENAME);
result:= SHFileInfo.iIcon;
end;
下面将系统图象列表连接到TListView控件上。注意我们设置动态建立的图象列表的ShareImages属性为真,这可以确保我们不试图释放Windows系统拥有的图象。在窗体的OnCreate事件处理程序中加上:
with YourListView do
begin
SmallImages := TImageList.CreateSize(16,16);
if (ssCtrl in Shift) and (chr(Key) in ['A', 'a']) then ShowMessage('Ctrl-A');
OnKeyDown事件处理程序将捕获击键,并执行指定的代码。
六、
A
假如编写一个衍生类的初始化例程,并希望将参数传递给基类的初始化例程,一般使用如下方法:
J
假如你需要存取WIN95的系统图象列表,这里给出具体方法。第一个函数将系统图象列表的索引保存到一个特殊类型的文件中:
function GetFileIcoIndex(Filename:String):Integer;
var
Ext: String;
ShFileInfo: TSHFILEINFO;
begin
上述代码只能动态地开关一个菜单的菜单条目,如果要同时动态改变所有菜单的菜单条目,需要使用窗体的Components属性,代码如下:
Delphi编程技巧十则
Delphi编程技巧十则Delphi编程技巧十则裔隽Delphi作为一|丁新起的叭lindows编程语言,由于其集众多的优秀特性于一身,因而越来越得到广大编程人员和发烧友的青睐。
以下十则技巧涉及的面比较广泛,希望能够对Delphi的爱好者有所禅益。
1 类似,于vb中的doevenls功能。
大家或许发现,在Delphi中没有类似于vb 中的doevenls函数,这样有的时候,我们将无法使叭lindows响应多个同时发生的事件。
其实,在Delphi的applica lion对象中包括类似的一个方法ProcessMessage,你可以通过调用Applicalion,ProcessMessage来完成象飞Ib中的doevenls 样的功能。
2 在Delphi中调用NelscapeNavigalor"随着Inlerne的火爆,有没有想过在你的Delphi程序l中启动Nelscape浏览器,显示出你指定的vwvw地址的主页。
下面这个程序能够完成这一功能。
programNelscape;usesDDEMan;procedureGo loURL(sURL,slring)vardde,TDDEClienlConv;begindde,TDDEClienlConv,Creale(nil)wilhddedobegin//specifythelocat旧nofnetscape.exeServiceApplication,'c,ms32lprogrammetscape.exe'//activatetheNetscapeNavigatorSetLinkC' Netscape' ,'VWVW-Activate' )Reques tD ataC'口xFFFFFFFF'),//gotothespecifiedURLSetLinkC' Netscape' ,'叭N叭N-OpenURL'),Reques tD ataCsURL+' ,,OxFFFFFFFF,Ox3,,,'),Close Li nk,end,dde. Free,end,beginGotoURLC' http,///. )end3 格式化整数输出。
Delphi常用技巧
Delphi常用技巧在网上行走时,经常会看到弹出的桌面小窗体,有时做广告,有时向你致以节日的问候;人们称其为桌面小精灵;有的桌面小精灵会自动移动,有的固定在屏幕的某一角落,动画闪烁,煞是迷人。
本人用Delphi 制作了一款桌面小精灵,愿与大家共享。
桌面小精灵的实现功能:当运行时,在屏幕的左下角显示一无边框、无标题栏的小窗体,并自动向屏幕的右上角移动,窗体上的小精灵——可爱的马先生,一会跃起,高呼“马到成功!”,一会含情脉脉地向你招手“再见”;同时,还不断地闪烁显示当前时间,时刻提醒你抓紧时间呦!当你嫌它碍事时,你可以按下鼠标左键,将它拖到任意位置。
如果你厌烦它不停移动,你可以双击鼠标左键,它会老老实实地呆在原地不动,只要你用鼠标轻轻一点,它又会高高兴兴地上路,当你单击“再见”时,桌面小精灵就会消失,你不想一试身手吗?请跟我来!运行后效果图生成一窗体,设置窗体属性如下:Name属性为Form1,BorderStyle属性为bsNone,FormStyle属性为StyOnTop,Height属性值240,Width属性值209。
窗体上分别添加组件,设置属性如下:(1)添加两个Image组件,Name属性分别设为Image1、Image2,Align属性均设为alClient (以使Image 组件充满整个窗体),Image1的Enabled为False,Image2的Enabled为True,然后通过Picture属性为Image1、Image2添加图片(适合的图片格式:BMP、JPG )。
(2)在Image上再添加两个Timer组件,Name属性分别为Timer1、Timer2,Enabled属性均为True,Interval 属性均为1000毫秒。
(3)在Image上再添加一个Label组件,Name:=Label1,Caption:=“马到成功!”,Enabled:=True,Font属性为“华文行楷,粗斜体,三号字,红色”(根据你的图片设置适当的字体、字号、字体颜色)。
Delphi操作ACCESS技巧集
Delphi操作ACCESS技巧集1.DELPHI中操作access数据库(建⽴.mdb⽂件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第⼆版⽆ACCESS环境下运⾏成功.//在之前uses ComObj,ActiveX//声明连接字符串ConstSConnectionString = 'PRovider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'+'Jet OLEDB:Database PassWord=%s;';//=============================================================================// Procedure: GetTempPathFileName// Author : ysai// Date : 2003-01-27// Arguments: (None)// Result : string//=============================================================================function GetTempPathFileName():string;//取得临时⽂件名varSPath,SFile:array [0..254] of char;beginGetTempPath(254,SPath);GetTempFileName(SPath,'~SM',0,SFile);result:=SFile;DeleteFile(PChar(result));end;//=============================================================================// Procedure: CreateAccessFile// Author : ysai// Date : 2003-01-27// Arguments: FileName:String;PassWord:string=''// Result : boolean//=============================================================================function CreateAccessFile(FileName:String;PassWord:string=''):boolean;//建⽴Access⽂件,如果⽂件存在则失败varSTempFileName:string;vCatalog:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvCatalog:=CreateOleObject('ADOX.Catalog');vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));result:=CopyFile(PChar(STempFileName),PChar(FileName),True);DeleteFile(STempFileName);exceptresult:=false;end;end;//=============================================================================// Procedure: CompactDatabase// Author : ysai// Date : 2003-01-27// Arguments: AFileName,APassWord:string// Result : boolean//=============================================================================function CompactDatabase(AFileName,APassWord:string):boolean;//压缩与修复数据库,覆盖源⽂件varSTempFileName:string;vJE:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvJE:=CreateOleObject('JRO.JetEngine');pactDatabase(format(SConnectionString,[AFileName,APassWord]),format(SConnectionString,[STempFileName,APassWord]));result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);DeleteFile(STempFileName);exceptresult:=false;end;end;//=============================================================================// Procedure: ChangeDatabasePassword// Author : ysai// Date : 2003-01-27// Arguments: AFileName,AOldPassWord,ANewPassWord:string// Result : boolean//=============================================================================function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;//修改ACCESS数据库密码varSTempFileName:string;vJE:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvJE:=CreateOleObject('JRO.JetEngine');pactDatabase(format(SConnectionString,[AFileName,AOldPassWord]),format(SConnectionString,[STempFileName,ANewPassWord]));result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);DeleteFile(STempFileName);exceptend;end;2.ACCESS中使⽤SQL语句应注意的地⽅及⼏点技巧以下SQL语句在ACCESS XP的查询中测试通过建表:Create Table Tab1 (ID Counter,Name string,Age integer,[Date] DateTime);技巧:⾃增字段⽤ Counter 声明.字段名为关键字的字段⽤⽅括号[]括起来,数字作为字段名也可⾏.建⽴索引:下⾯的语句在Tab1的Date列上建⽴可重复索引Create Index iDate ON Tab1 ([Date]);完成后ACCESS中字段Date索引属性显⽰为 - 有(有重复).下⾯的语句在Tab1的Name列上建⽴不可重复索引Create Unique Index iName ON Tab1 (Name);完成后ACCESS中字段Name索引属性显⽰为 - 有(⽆重复).下⾯的语句删除刚才建⽴的两个索引Drop Index iDate ON Tab1;Drop Index iName ON Tab1;ACCESS与SQLSERVER中的UPDATE语句对⽐:SQLSERVER中更新多表的UPDATE语句:UPDATE Tab1SET = FROM Tab1 a,Tab2 bWHERE a.ID = b.ID;同样功能的SQL语句在ACCESS中应该是UPDATE Tab1 a,Tab2 bSET = WHERE a.ID = b.ID;即:ACCESS中的UPDATE语句没有FROM⼦句,所有引⽤的表都列在UPDATE关键字后.上例中如果Tab2可以不是⼀个表,⽽是⼀个查询,例:UPDATE Tab1 a,(Select ID,Name From Tab2) bSET = WHERE a.ID = b.ID;访问多个不同的ACCESS数据库-在SQL中使⽤In⼦句:Select a.*,b.* From Tab1 a,Tab2 b In 'db2.mdb' Where a.ID=b.ID;上⾯的SQL语句查询出当前数据库中Tab1和db2.mdb(当前⽂件夹中)中Tab2以ID为关联的所有记录.缺点-外部数据库不能带密码.补充:看到ugvanxk在⼀贴中的答复,可以⽤Select * from [c:\aa\a.mdb;pwd=1111].table1;ACCESS XP测试通过ACCESS⽀持⼦查询ACCESS⽀持外连接,但不包括完整外部联接,如⽀持LEFT JOIN 或 RIGHT JOIN但不⽀持FULL OUTER JOIN 或 FULL JOINACCESS中的⽇期查询注意:ACCESS中的⽇期时间分隔符是#⽽不是引号Select * From Tab1 Where [Date]>#2002-1-1#;在DELPHI中我这样⽤SQL.Add(Format('Select * From Tab1 Where [Date]>#%s#;',[DateToStr(Date)]));ACCESS中的字符串可以⽤双引号分隔,但SQLSERVER不认,所以为了迁移⽅便和兼容,建议⽤单引号作为字符串分隔符.delphi读取⼀个ACCESS数据库中的表名ADOConnection1.Close;ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ Edit1.Text + ';Persist Security Info=False';ADOConnection1.Open;ADOConnection1.GetTableNames(ComboBox1.Items);ComboBox1.ItemIndex := 0;View Codedelphi和access连接的⽅式1.SQL数据库的联接⽅式:条件:控件名:AdoConnecion1,数据库名:Sample,⽤户名:sa 密码:123,数据库地址:本机AdoConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=Sample;Data Source=.'; Adoconnection1.LoginPrompt:=False;Adoconnection1.Connected:=True;上⾯这段代码为SQL数据库的联接⽅式:最后⼀句Data Source=. 其中的“.”表⽰为数据库在本机,如果数据在其它地⽅,则将点改为IP地址或是服务器名称。
Delphi实用编程经验二则
De lphi实用编程经验二则De1phi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。
下面是两则De1phi编梧的实用经验,希望能与大家共享:1使用超文本链接标示语言(HTML)。
使用Windows中的打开方式(如IE等)访问HTML 文件,受系统限制太大,不够灵活。
De1phi提供了THT阻控件,它能调用HTML文件,但在它的属性中却没有详细说明怎样调用本机的HTML文件。
其实,只要使用正确的URL格式,是能够完成这一功能的,其格式如下:fi1e://&1t;host>/&1t;path>举一个例子:如果有一个HTML文件路径为C:\He1p\Home Htm;那么其正确的URL格式应该为:fi1e://C:\He1p\Home htmo因此,对于控件HTM L1调用该HTML文件则应该为:HTM L1 Reques tD oc(fi1e://c:\He1p\Home Htm)。
这样,就可以自己编写一个程序来调用HTML文件以形成独立的帮助文件系统。
2使用SQL实现字段数据的模糊查询。
De1phi作为一个强大的数据库应用开发工具的一个重要标志,就是支持SQL编稽。
在实际的过程中,经常需要对某些字段进行模糊查询。
如对"姓名"字段进行查询,当输入"王"时,能自动地将王姓的所有记录列出来。
其实,通过结合SQL和De1phi的特点,就能很容易地完成这个功能。
其基本原理是:查询时每查询的范围控制在姓名大于‘查询字符串+chr(O),与小于‘查询字符串+chr($ff),之间,就能将满足条件的所有记录查询出来了。
下面是具体的例子:VarNameStr:String;//设置字符串中间变量BeginNameStr:二F 王FQuery1SQL C1ear{清除SQL属性中的SQL命令语句}Query1SQL Add('Se1ect士FromCustom dbwhere(Name1>二N1)and(Name2&1t;二N2)');//SQL命令语句Query1params[O]AsString:二NameStr+chr(0); //控制参数在NameStr+Chr(0)Query1params[l]AsString:二NameStr+chr($ff); //和NameStr+Chr($ff)之间Query1Open;//打开数据库,执行SQL查询End;(陕西杨波)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
---- 一.为列表框添光彩
---- 为了改变Listbox和Combobox两个控件的单调风格, 我想在它们的每一项前面加上个图标。从表面上看好像不大可能啦。就在走投无路的时候,我忽然发现这两个构件都有一个style属性, 它可以设为lbOwnerDrawFixed,Draw这个单词吸引了我,然后我又从Delphi的在线帮助中找到了一个相关的事件OnDrawItem,在这个事件中写一段代码,就可以在列表框中的每一项前面添加一个小图标啦。
Offset := Bitmap.width + 6;
TextOut(Rect.Left + Offset, Rect.Top,
(Control as TListBox).Items[Index])
end;
end;
---- 进一步,利用OnDrawItem事件的参数Index还可以在不同项前面添加不同的图标。还要告诉你的是,当用add方法为列表框或下拉框添加项目时,会自动执行 OnDrawItem事件,这样新添加的项目前面也就有了一个图标。
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;
IDC—EXIT=2;
---- 当然要把它放在一个unit里(类似于C++的.h文件) ,在使用的单元里再uses一下就可以了,这样应用感觉是不是很爽呢?
txtCaption:=LoadStr(IDC—EXIT);
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个子属性,其功能如下:
//指定图文件是d:\temp1\1.bmp
BrushCopy(Bounds(Rect.Left + 2, Rect.Top,
Bitmap.Width, Bitmap.Height),
Bitmap, Bounds(0, 0, Bitmap.Width,
Bitmap.Height), clRed);
Shift+方向键 :将所选组件改变一个点的大小;
Ctrl+Shift+方向键 :将所选组件移动一个格;
Shift+click :按住Shift键再用鼠标点击组件,可以选择多个组件。
---- 下面这条是我摸索出来的: Ctrl+drag :按住Ctrl键在一个容器组件(如Panel,QReport,Groupbox等)里拖动鼠标,可强制选择鼠标拖过的矩形框中的所有属于此容器的可视组件(不包括该容器组件)。
---- 六.命令行参数的使用
---- Delphi提供了访问命令行参数的方便的方式,那就是使用ParamStr和ParamCount函数。其中ParamStr(0)返回的是当前程序名,如C:\TEST\MYPROG.EXE,ParamStr(1)返回第一个参数,以此类推;ParamCount则是参数个数。示例如下:
---- 下面是在Listbox 的OnDrawItem事件中添加的代码:
procedure TForm1.ListBox1DrawItem(Control:
TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
---- 四.定制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中,可以提高开发效率。
---- 然后,找到Delphi的Bin子目录下的BRCC32.EXE文件进行编译, 命令格式为: BRCC32 LB.RC,编译结束后即生成一个资源文件lb.res。要使用该资源文件,需要在单元文件implementation部分的开始处包括资源文件:{$R LB.RES}。在本例中,上面的字符串用于给一个命令按钮更换Caption设置,使用的函数是Windows API函数 LoadString,以下是使用实例:
end;
---- 这样就可以在程序运行时改变各种属性,而不需要在程序中出现字符串。如果使用另一个Delphi函数LoadStr,会显得更加简单:
var
txtCaption:String;
begin
txtCaption:=LoadStr(2);
if txtCaption〈〉′′ then
//在FormCreat过程中:
var
txtCaption:array [0..255] of char;
begin
//
if LoadString(HInstance,1,txtCaption,SizeOf
(txtCaption))〉0 then
btnStart.Caption:=StrPas(txtCaption);
end;
end;
---- 七.DCU文件(编译的库单元)的重用
---- (1)在interface里的uses子句中引用。如Windows,Dialogs等,要求被引用的DCU一定要放在Delphi4\Lib子目录中。
---- (2)在implementation里的uses子句中引用。如果是自行编写的DCU文件,应采用这一方式,并将被引用的DCU文件放入当前工程所在的子目录中。
---- 八.使用字符串资源的技巧
---- 不同于其它资源,字符串资源不能直接编辑,需要先按格式编制一个文本文件,再用程序将其编译成资源文件。下面用一个简单的例子来说明。首先用文本编辑器编一个文件lb.rc,其内容如下:
STRINGTABLE
BEGIN
1,"开始"
2,"退出"
END
VAR i:integer;
Begin
i:=0;
Table1.open;
Table1.First;
While not Table1.eof do
BEG1N
i:=i+1;
Table1.nexttostr(i);
如果使用了TQuery控件,具体步骤如下:
Color 显示网格线颜色
Style 报表网格线的形状,如实线、虚线等
Width 网格线的宽度
DrawBottom 网格的底部
Drawlefl 网格的左边
DrawRight 网格的右边
DrawTop 网格的底部
---- 在制做报表前,最好在数据库表中添加几个记录,然后根据需要修改这些属性,使用报表的预览功能在设计期间看修改效果,不满意可立即修改。
---- 二.获取count值
---- Delphi与Power Builder一样,都提供了SQL语言,来实现对数据库的访问,仅仅是实现语句的长短不同。Delphi是在Pascal语言基础之上发展起来的,它提供了强大的功能,各种控件提供了丰富的属性和方法。我们应该充分利用这些属性和方法。要想知道某数据库的记录数, 用一个简单的语句即可完成。例如求Delphi的DBDemos数据库中表 day.db的记录总数,假设Table控件已加到Form上,具体实现语句为:
end;
//在btnStartClick过程中:
var
txtCaption:array [0..255] of char;
begin
if LoadString(HInstance,2,txtCaption,
SizeOf(txtCaption))〉0 then
btnStart.Caption:=StrPas(txtCaption);
---- 五.设计Form时的快捷键
---- 使用快捷键可以加快设计速度。下面列出的快捷键,可根据实际情况,有选择地熟练掌握。