delphi7.0学习经验积累

时间:2024.5.13

delphi7.0学习经验积累 [原]

20xx年开始学习delphi一路以来的经验积累吐血大公开。若这些经验对你有所帮助,能使你少走些许弯路,恳请能告诉我,或若愿意和我分享经验,探讨vb、delphi、vc、asp问题请留下评论或email。本人email:boythl@163.com。用得不多。

===================================================

2006、10、11

在制作DLL时,在最后一定要把要发布的函数列出来,不然调用时会程序初始化失败,无法进入;

exports FunctionName;

MKDir(Path) 函数创建文件夹;

在创建数据库时,用户名需要设为Admin,改成txtx时发生了“无法启动应用程序。工作组信息文件丢失”的错误。

2006、10、12

StrUnits单元中

DupeString 函数 = VB string函数 重复N次某字符

PosEx可以从某个特定位置开始查找某字符

MidStr函数 = VB Mid函数

ReverseString函数 翻转字符串

StuffString函数 向一个字符串在某位置插入一个子字符串

RightStr 函数,从字符串最后取字符

StrRScan 字符最后次出现的指针

只有有序的数字和字母才能作为集合(sets),且个数不能超过255个.

TStrings对象的NameValueSeparator属性可以设置TStrings对象的文本包含Name和Value,如a=1,设置NameValueSeparator:='='可以使用getName等方法提取Name和Value

2006、10、17

ItemProps属性可以控制valueeditlist控件显示下拉框,在使用时需要注意self.vldFields.Row-1,因为表头的Key value行index=0

procedure TForm1.vldFieldsClick(Sender: TObject);

begin

self.vldFields.ItemProps[self.vldFields.Row-1].EditStyle:=esPickList; //显示下拉框

self.vldFields.ItemProps[self.vldFields.Row-1].PickList:= TargetFields;

end;

2006、10、18

今天发现在SQL中,若两文本字段其中一个文本字段为null(非""),另一个文本字段非Null则两个字段可通过等号检索到(F1=F2),而若两个文本字段都为null时则等号检索不到,但用不等号也不能检索出来。很奇怪!!! 2006、10、23

只有在Richedit处于活动时才自动滚屏 或发送

EM_SCROLLCARET sendmessage(self.rdtHistory.Handle ,EM_SCROLLCARET,0,0)

2006、10、24

TIDUDPSERVER在设置DefaultPort之前必须设置Active为false,否则新端口无效.

FlashWindow必须传入Application.Handle才能实现闪动标题栏

FlashWindow(self.Handle ,true);

FlashWindow(application.Handle,true);

2006、10、25

可以设置动态控件数组,如chk:array of TcheckBox; 然后setlength即可; 在动态创建数组时,必须设置控件的parent属性,一般为TWinControl类对象,如form1,否则控件无法显示。

API中指针类型参数不能随便设为空,否则有可能引起地址访问失败。 2006、10、26

AnsiStrRScan 函数可以从右边提取字符串,如: AnsiStrRScan('abcdefg','d') 结果='defg'

2006、10、30

控件的Perform方法很有用,可代替对该控件的sendmessge方法,如checkbox.perform(BM_SETCHECK, Ord(CheckIt), 0); 选中复选框

在文件传输时使用TFileStream而非TMemoryStream可提高速度。速度可由200K提高到10M

2006、11、1

在showmodule对话框窗体时不需要手动self.close关闭窗体,把button的ModaulResult设为mrOK会自动关闭窗体,且不能在formcreate中关闭 2006、11、3

可以使用strtoint的报错信息来判断是否数字类型,也可以用trystrtoint函数,是数字返回true

2006、11、6

messagedlg的返回值为mrOK,mrCancel

TAdoQuery对象的FieldByName('Name').AsString可提供对Open方法返回的数据集值的直接操控读取.

2006、11、8

strCat函数将改变头一个参数的值. strcat(a,b) 返回a+b, a 的值也变成a+b. 2006、11、13

RTF的合并不复制到剪贴板也可以,如下:

self.RichTextBox3.TextRTF:=self.RichTextBox2.TextRTF;

self.RichTextBox3.SelLength:=length(self.RichTextBox3.Text); self.RichTextBox1.SelStart:=length(self.RichTextBox1.Text); self.RichTextBox1.SelRTF:=self.RichTextBox3.TextRTF;

LockWindowsUpdate API函数可以锁住控件,暂停刷新屏幕,值取0时停止锁定,可用于避免屏幕闪烁

2006、11、14

GIF插入richtextbox网上说可以使用QQ带的imageole.dll支持。QQ、MSN派生自webBrowser

2006、11、15

AnsiEndsText函数可以判断一个字符串是否是另一个字符串的结尾,可用来判断扩展名如AnsiEndsText('.jpg',name) true则是jpg格式,也可用 ExtractFileExt函数判断。

加入JPEG单元TPictrue的loadFromFile才可以打开JPEG格式图片。若无JPEG单元,OpenPictureDialog在选择jpg格式图片时会引发非法图片格式的错误。

今天发送"TXM1.5"文件夹失败,可以采用DirectionaryExist和FileExist来判断是文件还是文件夹,不能用判断是否有扩展名。

strLineNO:array of array of String; //定义二维动态数组 ,用

setLength(strLineNO,2,DS.RecordCount); 定义数组大小

2006、11、16

创建带FORM的DLL时需要添加一个UNIT到DLL工程,在工程文件里export创建窗体的函数,在DLL里写窗体操作类,若都写到DLL工程文件里运行时会提示"Resource ** NOT FOUND" **窗体类名。

调用com对象时使用:(如同vb的CreateObject)

obj:=CreateOleObject('Mapinfo.Application'); //Comobj单元

也可以使用CreateComObject

2006、11、17

setmessage发送按钮单击事件必须发送一对WM_LBUTTONDOWN和WM_LBUTTONUP,其它都不管用。

API BlockInput可以阻塞键盘输入

2006、11、20

判断pchar类型变量是否为空可用p^<>#0,不可直接用P<>',否则p空值时p<>'为true

构造器不用overload, constructor Create(const MSG:WideString); 函数

体里 inherited Create(IsSuspended);

点击系统菜单里的关闭、最大化、最小化按钮会发送WM_SYSCOMMAND消息,WParam参数分别为:SC_CLOSE/ SC_SIZE/ SC_MOVE / SC_MINIMIZE /

SC_MAXIMIZE/SC_RESTORE(恢复先前的视图位置)

2006、11、21

在做快捷方式时发现pwidechar不能使用pchar直接类型转换,好像是不兼容的。得用StringToWideChar来转换

2006、11、22

使用了ocx的时候,在安装时需要用reg注册该OCX,否则会无法启动,“程序出现异常。软件发生未知异常”或是“程序遇到问题需要关闭”,然后程序崩溃。前者会提示“未注册类别”,后者会出现modaule kernel32.dll等。 在创建TCustromForm类的继承类时,若构造器不同于TCustomForm预定义

create方法时,不能使用override,编译器提示'create' hide virtual method of base type 'TCustomForm',使用reintroduce关键字可以取消编译器警告。如:constructor Create(AOwner: TComponent;const

UserOnline:TStringList);reintroduce;

2006、11、24

在释放窗体时BORLAND推荐使用release,因为该方法会等待所有的过程执行完毕后释放内存,不推荐使用terminate和destroy

SecondsBetween可以获取两时间Tdatetime间的秒数,若直接使用两Tdatetime时间相减,将得到一个浮点值,且单位是天,需要乘以86400方得到秒。 format函数中,%%可以输出%

2006、11、27

非模态对话框关闭时释放窗体所在的内存可在onclose事件里使用

Action:=caFree;

2006、11、28

使用expandfullpath返回的路径是相对当前目录的路径,可以用getCurrentDir函数返回当前目录,使用

SetCurrentDir( ExtractFilePath(application.ExeName));可把exe所在目录设为当前目录,建议每次使用expandfullpath前都手动设定当前目录,因为当前目录经常会变化.比如用户使用公用对话框选择了文件名或保存文件名,都会引起当前目录改变.

2006、11、29

SQL语句支持五大join连接查询,left join ,right join, outer join, full join ,inner join

sql中创建查询语法: Create View View_Name AS (Select col_name FROM TABNAME WHERE CONDITION) ACCESS不直接支持Create View,需要使用adodb.connection对象

2006、12、07

TImage组件只有在stretch=true时,align=alClient才会发挥作用; 下面两句可以重绘画板,

self.imgDraw.Picture:=nil;

self.imgDraw.Canvas.FillRect(self.imgDraw.canvas.ClipRect); //使画板填白,使用canvas.brush.color颜色

2006、12、12

ACCESS支持的SQL不支持replace函数,但支持left,right和mid等函数,以下sql语句替代replace函数使用.chr(10)是要删除的换行符.

UPDATE NODE SET NODE.Node_ID =left(node_ID,instr(Node_ID,chr(10))-1) & mid(node_ID,instr(Node_ID,chr(10))+1)

闪烁标题栏按钮必须true和false配合使用,true开始,false停止,并使用application.Handle,

flashWindow(application.Handle,false);

2006、12、19

strAlloc字符指针申请内存,strDispose释放strAlloc申请的字符指针内存. 2006、12、22

下面两种方法可以打开文件所在的文件夹,并定位到文件上.

WinExec('explorer /n,/select,'+FileName,SW_SHOWNORMAL);

//

shellexecute(0,'open','explorer.exe','/e,/select,'+FileName,nil,SW_SHOWNORMAL);

API函数MAKELPARAM可以根据低位和高位数字合成LPARAM,传给window Message的参数.

2006、12、23

SetForegroundWindow 将一个窗口带到最上层(z-order),但若函数由非foreground进程调用,将只是闪动任务栏图标,并不会将窗体提前。 Delphi带API帮助中SetActiveWindow 一节如此描述:

The SetForegroundWindow window function, on the other hand, activates a window and forces it into the foreground. An application should only call SetForegroundWindow if it needs to display critical errors or information that needs the user's immediate attention .

2007、01、05

idudpclient和idudpserver同时使用同一端口时会给idtcpclient分配一个随机端口。若只使用idudpserver监听和发送消息则端口和给定的相同。 2007、01、18

使用trunc函数判断是否有第六位小数时遇到个奇怪问题。语句如下: Item[j].X*100000<>Trunc((Item[j].X*100000))

若Item[j].X=14.12784 会出现1412784<>1412783 的情况,就是trunc会使结

果减1,网上讨论是类型转换问题。今天偶然解决,方法:

dblTmp:double;

dblTmp:=Item[j].X*100000;

dblTmp<>trunc(dblTmp) 结果1412784=1412784

恶心的delphi!

2007、01、19

TGlyph图象使用的位图“The lower left pixel of the bitmap is reserved for the "Transparent" color.”,经试验,发现若要使用透明色,需要把位图bmp格式转成index模式,索引色模式,非常用的RGB模式,然后把底色改成color table中的最后一个颜色

2007、02、04

遍历文件夹下所有文件时可以使用TStringList来保存遍历结果。然后遍历返回后循环Tstringlist变量中文件名。

Delphi中的Excel对象索引(参数提示index)都是从1开始并非0开始。 2007、02、05

Delphi中Excel的Worksheet需要先Activate才能对Range进行Select操作。否则会报错。

2007、02、06

在向TImageList动态添加图片时,若要实现透明图片效果,可以使用ImageList.AddMasked和ReplaceMasked代替Add和Replace,如:

intIndex:=self.imglstICON.AddMasked(bmpHead,bmpHead.Canvas.Pixels[0,0]); //使透明

其中第一个参数是要添加的BMP,第二个参数是透明色,这里取左上角第一个象素值。

其它的动态添加方法试验时好像都不能实现透明。

更多相关推荐:
delphi学习

Delphi学习心得一IDE界面Delphi是Inprise公司推出的基于对象Pascal语言的可视化集成开发工具利用Delphi编程可以快速高效地开发出基于Windows环境的各类程序尤其在数据库和网络方面D...

用Delphi编写WebService的心得体会

用Delphi编写WebService的心得体会相关名词Dispatch派遣分派Invoke调用Invokable可调用接口TReomtableWebService中自定义类都是继承自该类TSOAPAttach...

Delphi与Dll学习体会

Delphi与dll学习体会Dll的创建1如果要在dll中加入窗体最好先在其他应用程序工程中设计窗体功能确定可行以后再在dll工程中添加2在窗体相应的单元文件中加入Application对象同步程序SynApp...

1虚拟仪器技术及l a b v i ew学习小结

labview的模拟温度采集检测系统实验小结与心得Labview使用了所见即所得的可视化技术建立人机界面提供了许多仪器面板中的控制对象如表头旋钮开关及坐标平面图等用户可以通过使用编辑器将控制对象改变为适合自己工...

Labview学习心得

对LabVIEW软件及虚拟仪器的学习心得一学期的Labview课程结束了通过这一学期的学习我主要了解到对LabVIEW软件及虚拟仪器的理解以下几方面的内容1一开始老师通过关于此课程的基础概念讲解是我了解了使用l...

labview心得

LABVIEW学习心得这学期的课程设计主要讲授了一些LabVIEW的基本操作和编程技巧LabVIEW作为一门新式的以图形化编程的语言不仅提供了简单易学的编程方法而且提供了海量的可调用的模块子vi涉及到各个方面L...

labview学习总结

labview学习总结转眼间已经学习labview一个多月了因为在学校里没有学习过这门课程其他的编程语言掌握的也不是很好可以说是一点编程的基础也没有所以在这期间让我遇到了很多的困难不过最后经过努力也都解决了下面...

labview学习问题总结

labview学习问题总结1用xy图来显示曲线图时要赔以For并在For循环内按要求将x及y变量用捆绑函数组合为簇将xy图函数放在For循环外这样才能在For循环结束时使所有的值通过自动索引隧道一次性的传到xy...

labview学习感受

学习labview有快半年了做个总结回顾一下自己的摸索过程幸运的是有个项目用到Labview因此边学边用由于有前一项目的经验作参考可以说是在模仿中学习从学习到使用给我最大感受是labview编程容易上手帮助文档...

InDesign CS4 学习技巧总结 快捷基础教程

InDesignCS4学习技巧总结快捷基础教程问我在排版过程中经常要用到一些相同的字体字号度量单位笔画粗细等每次都要做一些重复的操作非常麻烦如何预先设定并储存这些共享的设定提高排版效率答开启InDesign在未...

没接触过indesign 速学教程

没接触过indesign速学教程以一本书的排版为例首先打开indesing文件新建文档ctrln新建文档的设置用途打印页数100页根据自己所需要的页数排这个地方要选中后面的对页这样就是书本展开的样子页面大小我做...

Adobe InDesign常见问题总结

AdobeInDesign常見問題總結在一个系统内同时安装InDesign20及InDesignCS会不会产生冲突在按照正确安装方法安装InDesign的情况下理论上应该不会有冲突现象不过无论先安装CS还是20...

delphi学习心得(4篇)