
要点
liuliu0103
这个作者很懒,什么都没留下…
展开
-
方法的调用机制
默认情况下,方法使用register调用约定:(简单的)参数和返回值要从调用代码传递到函数中,并且使用CPU寄存器而不是堆栈返回。这个过程可以使方法调用更快捷。register:寄存器 与内存相比具有更快的速度。原创 2010-12-24 12:36:00 · 406 阅读 · 0 评论 -
mciSendString参数 摘录
mciSendString(发送命令串),函数原型为: MCIERROR mciSendString( // 出错返回非零值(错误代码) // 可用mciGetErrorString获得错误的文本描述 LPCTSTR lpszCommand, // 指向以null结尾的命令字符串:”命令 设备[ 参数]” LPTSTR lpszReturnString,原创 2011-01-08 11:47:00 · 960 阅读 · 0 评论 -
音量大小控制
<br />函数说明: <br /><br />waveOutSetVolume <br />第一个参数是波形文件输出设备标识符; <br />第二个参娄是音量大小。这是一个32位的整数,低16位表示左声道的音量, <br />高16位表示右声道的音量。 <br /><br />waveOutGetVolume <br />第一个参数是波形文件输出设备标识符; <br />第二个参数是一个32位整数的指针。 <br /><br /><br />可以用auxoutsetvolume(id:integer,vo原创 2011-01-08 12:11:00 · 915 阅读 · 0 评论 -
2011.1.10
1.Tsplitter 如何横向分割?2.获取本机IP的方法?控件类 IPWatch 将IdWatch1的HistoryEnabled设置为False,在TForm1.FormCreate中添加如下代码:statBar1.Panels.Items[0].Text:=idpwtch1.LocalIP; 函数API类function ComputerLocalIP: string;var ch: array[1..32] of char; wsData: TWSAData; myHost: PHos原创 2011-01-10 14:31:00 · 446 阅读 · 0 评论 -
delphi自带Tmediaplayer控件循环播放
<br /><br />媒体控制方法(如Back、Close、Eject、Next、Open、Pause、PauseOnly、Play、Previous、Resume、StartRecording、Step或Stop等)执行结束时触发事件OnNotify.<br /> <br />通过OnNotify实现循环播放<br />procedure TForm5.MediaPlayer1Notify(Sender: TObject);<br />begin<br /> if (mediaplayer1.Po原创 2011-01-10 15:52:00 · 7563 阅读 · 0 评论 -
image的picture属性中需注意的
<br /><br />执行此代码后,image的picture中的width和height自动调节为OpenPictureDialog2.FileName的宽和高,需手工调回.(影响picture的canvas大小)<br /> image2.Center:=true;<br /> image2.picture.LoadFromFile(OpenPictureDialog2.FileName);<br /><br />手动设置代码 <br /> image2.picture.Graphic.Wid原创 2011-01-10 14:34:00 · 1533 阅读 · 0 评论 -
2011.1.12
<br />1.激活TListView的OnClick事件后,点击TListView控件空白处,会报错.如何处理?<br />加上条件语句 if ListView.Selected<>nil then(ListView.Selected为被点击项)原创 2011-01-12 15:25:00 · 387 阅读 · 0 评论 -
TStream 类
<br /><br />TStream 类<br />所谓"流", 就是一段数据或是一块内存;<br />在进行流操作时, 我们不必关心流中的数据到底是什么; 只需要知道流的大小和当前的指针位置. 所以流只有两个属性: <br />Size、Position.<br />对流的操作, 不过就是读取和写入. 所以流最主要的方法就是 Read 和 Write.<br />在很多控件的使用中, 读取主要用 LoadFromStream,LoadFromFile; 写入主要用 SaveToStream,SaveTo原创 2011-01-13 18:07:00 · 563 阅读 · 0 评论 -
2011.1.17
1.Tlist的复制(将list中的内容复制给list2)?list3.Assign(List1,Operater,List2);将List1与list2经过Operater操作后赋给list3.Operater的主要参数有laCopy ,其他见帮助.2.将局部变量指针p赋给list1(即list1.add(p))后,free(p)会导致list1.items[i]的内容为零(即初始化).原因: free(p)不仅将p的内容释放,并且将p指向地址中的内容释放。改为FreeAndNil即可。原创 2011-01-18 12:18:00 · 398 阅读 · 0 评论 -
构造和析构
<br />当程序员调用Create和Destroy时,编译器会自动在他们两端插入_ClassCreate和_ClassDestroy的代码。<br />真正实现构造和析构的全局过程_ClassCreate和_ClassDestroy,Create和Destroy的作用是在构造后和析构前初始化和反初始化对象成员。<br />即一个对象的构造和析构过程如下:<br />_ClassCreate->Create->AfterConstruction(->DoCreate/ OnCreate)->适用对象->Be原创 2011-01-05 19:24:00 · 424 阅读 · 0 评论 -
inherited, dynamic ,virtual , override , overload
inherited使用格式inherited XXX(ParamsList);表示使用父类中的名为XXX的方法,ParamList为方法的参数列表;调用时可不加方法名,表示调用父类中同名方法,若父类中有多个同名方法时不可用。待续原创 2011-01-04 19:20:00 · 436 阅读 · 0 评论 -
参数传递
参数传递分两种:按值传递(by val):传递时形参拷贝实参的数据,故形参的改变不会影响实参。 按值传递可以指定默认值,默认值必须是常数表达式,带默认值的参数必须位于参数列表的最后。 按值传递的参数如果是个指针型变量,会生成一个指针地址的拷贝。即改变形参指向的内容,实参指向的内容改变;改变形参指针地址的指向,实参地址不变。引用(by ref):形参和实参是同一个变量,可以将形参看做实参的别名,故形参改变,实参随之改变。通过在参数前加var来声明。原创 2010-12-25 14:00:00 · 347 阅读 · 0 评论 -
方法
<br />从调用者角度可分为:普通方法(只能被对象调用),类方法(可以被对象和类调用,声明时带class前缀,实现时不能依赖于任何实例)。<br /> <br />从调用机制上分:<br /> 静态方法:一般方法,无后缀。<br /> 虚方法:可以在子类中对其覆盖(override),声明时带virtual或dynamic后缀。<br /> 普通虚方法:必须有实现部分,即使只有begin...end。<br /> 抽象方法:只有声明,没有实现。必须在子类中覆盖并实现后才能调用。又称纯虚方法原创 2010-12-25 15:03:00 · 331 阅读 · 0 评论 -
对象名的实质 和 过程中create效果及影响
<br />在Delphi中一个对象名只是一个指向该对象的指针,可以有多个指针指向同一个对象地址。<br />范例中在Createlabel中create二个label,并使label1依次指向它们.退出过程后,label1自动释放,但生成的2个label控件并没有释放(因为它们由create创建).由于没有指向他们的指针,也就无法被调用和释放.这2个label直到程序结束时才被Application释放.<br />解决方法建立两个全局指针l1,l2分别指向他们,这样就可以在以后的过程中调用或释放他们.<原创 2010-12-24 12:53:00 · 372 阅读 · 0 评论 -
变量的内存分配和释放
<br /> 无论是全局变量还是局部变量,如果他是非指针类型的,则声明后被自动分配内存。<br /> 如果是全局变量,还会被初始化为0(数值型)或False(boolean型)或‘’(字符型),指针型不会被自动分配内存,初值是nil;<br /> 如果是局部变量,不会被初始化,它的值是不确定的;指针型也不会分配内存,但是会随即指向一个地址。<br />这种分配方式也被称为静态分配。<br /> 全局变量内存分配在全局变量区;局部变量分配在应用程序栈(stack)。<br />原创 2010-12-25 12:05:00 · 553 阅读 · 0 评论 -
内存块分配函数
procedure GetMem(指针名,size(所要分配的内存块的字节数))。主要用于创建缓冲区,并使P指向它。一些函数和过程通过缓冲区返回一些执行结果。比如文件读写,流读写以及大量的API函数。与之相对的时FreeMem(P)。 function AllocMem(Size:Cardinal);Pointer;分配大小为Size字节的内存块并初始化为零,返回地址指针。 Procedure ReallocMem(指针名,Size);中途改变之前用GetMem或者AllocMem分配的原创 2010-12-25 12:28:00 · 455 阅读 · 0 评论 -
局部过程和全局过程
<br />全局过程:声明于interface部分的过程,可定义在uses模块后的任何位置。<br />局部过程:无声明,直接在implementation部分实现的过程。局部过程只能在本单元中调用,且调用位置必须在它的实现后面。<br />原创 2010-12-25 13:44:00 · 637 阅读 · 0 评论 -
属性-主要应用于组件开发
<br />待续原创 2011-01-04 18:48:00 · 663 阅读 · 4 评论 -
事件
<br />事件本质是属性。同时事件总是属于一个方法类型,所以说事件是方法指针。原创 2011-01-04 19:08:00 · 320 阅读 · 0 评论 -
1.如何检查本机中已安装字体 2.MessageDlg与Timer冲突 3.复制文件
1.MessageDlg和ShowMessage都默认为ShowModal形式,即阻塞式的,它们运行后停止后台的工作,直到它们完成(关闭).但它们运行后,Timer控件仍在工作,当Timer调用Form中控件时会报错.我的解决方法是重新声明的一个新的函数,在其中调用Message原创 2011-01-13 18:06:00 · 1739 阅读 · 0 评论