2011年8月1日
摘要: 有时候因为需要交换两个节点的位置,用了很多方法,效果都不是很理想,经过多次测试,发现一个方法能达到很好的效果,如下:AcxTreeListColumn.AddNode(AcxTreeListColumn.FocusedNode.GetNext,AcxTreeListColumn.FocusedNode, nil, tlamInsert);这个是将当前选中的节点移到前选中的节点的一下位置,也就是节点下移AcxTreeListColumn.AddNode(AcxTreeListColumn.FocusedNode,AcxTreeListColumn.FocusedNode.GetPrev, nil 阅读全文
posted @ 2011-08-01 09:27 stwo 阅读(1397) 评论(0) 推荐(0) 编辑
摘要: NativeXml默认的字符类型为Utf8String,有时在读取中文时还是会出现乱码问题,在329版本中提供一种类型转换函数sdUtf8ToWide(),我们可以这样sdUtf8ToWide(AXmlNode.Value)进行类型转换,对之前的版本中XML节点有ValueWide属性可正确取得中文,在329版本中这个属性可能变成了ValueUnicode,但效果并不是很理想。 阅读全文
posted @ 2011-08-01 09:16 stwo 阅读(1483) 评论(0) 推荐(1) 编辑
  2011年7月30日
摘要: NativeXml可以在官网上下载,下载后将文件夹放在指定地方,打开DELPHI在其环境变量中引用NativeXml路径,然后在程序中引用NativeXml单元,我们就可以使用NativeXml了。NativeXml的方法属性:ANativeXml := TNativeXml.Create(Self);//创建ANativeXml.XmlFormat := xfReadable; //格式ANativeXml.EncodingString := 'UTF-8';//编码ANativeXml.ExternalEncoding := seUTF8;ANativeXml.LoadFr 阅读全文
posted @ 2011-07-30 13:47 stwo 阅读(3867) 评论(0) 推荐(1) 编辑
  2011年7月29日
摘要: 如果我们在带包编译DLL,当我们用EXE程序调用此DLL时,有时会弹出类似“A class named AClassName already exists”的错误,解决方法是:在我们EXE程序和DLL中链接的BPL(runtime packages)中,要包含EXE程序和DLL中用的引用的单元所需的BPL,也就是说在这个BPL的requires部分,要将所需的BPL引用进来! 阅读全文
posted @ 2011-07-29 15:31 stwo 阅读(737) 评论(0) 推荐(0) 编辑
  2011年7月26日
摘要: 静态数组:静态数组的局部变量,不管数组元素是什么类型,其内存总是在栈上分配。因为栈的大小相对固定,如果静态数组占用的内存超过栈的总大小,将会出错。动态数组:动态数组变量只占用4个字节,其内存是在堆中动态分配的,在负偏移处保存着8字节的引用计数和长度计数。这中内存结构和长字符串的内存结构是一致的。 阅读全文
posted @ 2011-07-26 11:20 stwo 阅读(364) 评论(0) 推荐(0) 编辑
  2011年7月25日
摘要: {要引用的单元uRODynamicRequest, uROClasses, uRODL}var lParam:TRORequestParam; lArray:DataParameterArray; aParam:DataParameter;begin with DARemoteCommand1.ExecuteCall do begin MethodName := 'ExecuteCommandEx'; Params.Clear(); OutgoingCommandNameParameter := Params.Add('aCommandName', rtStri 阅读全文
posted @ 2011-07-25 14:32 stwo 阅读(416) 评论(0) 推荐(0) 编辑
  2011年7月23日
摘要: 短字符串:至少分配一个字节,其首地址用来存放字符串的长度,称为计数位,其后,开始存放字符串中的各个字符。(注:堆栈是以4字节为单位进行分配的,这可能造成字符的长度与实际内存空间不一致)PChar:以Null结尾字符串规则的数据类型,由于没有使用的内存块都可以是Null的,所以以Null结尾的字符串是一个弱类型检测的定义AnsiString:缺省以String关键字定义的,或者直接以AnsiString关键字定义的字符串变量都是长字符串,长字符串的首地址和短字符串的的首地址作用一样是用来存放字符串长度,并和PChar一样以Null结尾,长字符能以字符数组形式时进行操作。长字符串变量总是占用4字节 阅读全文
posted @ 2011-07-23 16:40 stwo 阅读(870) 评论(0) 推荐(0) 编辑
  2011年7月11日
摘要: 在函数、过程或者方法中定义一个字符串变量时,由于我们知道在函数、过程或者方法中定义的变量为局部变量,它的内存是在栈中分配的,但是这里有个小细节我们要注意,对于一个局部的字符串变量,它的大小为4字节,这个在栈中分配的4字节是不是就是字符串变量的全部呢?答案是否定的,它在栈中保存的只是这个字符变量的大小和字符变量的值在堆中的内存地址!,这就是说,该字符变量的值并不在对应的栈中,而是在堆中!我们了解到在堆上分配的内存是要程序员来处理内存释放的,而我们在使用String类型的变量时从来就没有处理过该变量占用的内存!这是什么原因呢?这里我们就要讲到编译器的引用计数原理了,正是因为它为我们省去了很多麻烦( 阅读全文
posted @ 2011-07-11 16:11 stwo 阅读(2128) 评论(0) 推荐(0) 编辑
摘要: 应用程序可用的内存区分三类:全局变量区(存放全局变量)、栈(Stack)、堆(Heap)。应用程序开始时所有的全局变量的内存都被分配到全局变量区,局部变量分配到应用程序栈,应用程序结束时分配到栈中的变量内存会被栈管理器自动释放,堆上的变量内存必须手工释放。堆(内存)堆表示程序可用的内存区,也叫动态内存区。堆内存的分配与释放次序是随机的,这就是说,如果你按次序分配三块内存,那么到时并不按分配时的次序释放内存。 堆管理器会负责所有操作,你只需简单地使用GetMem 函数请求新内存或调用constructor 建立对象, Delphi 会返回一个新的内存块(随意重用已经丢弃的内存块)。堆是应用程序可 阅读全文
posted @ 2011-07-11 14:07 stwo 阅读(716) 评论(0) 推荐(0) 编辑
摘要: 全局变量:如果我们在应用程序一个单元中的interface关键字和implementation关键字之间的区域,定义一个全局变量,假如这个单元在别的地方被引用,那么这个单元的全局变量能够在别的地方被访问到,当然我们也可以在应用程序一个单元中的implementation关键字的后面定义全局变量,不过此时在这里定义的全局变量只能在本单元中被访问到,也就是说它是这个单元私有的,在别的单元中将不能被访问到。全局变量在应用程序的数据区分配内存,它存在于可执行模块(EXE或DLL等)的文件影像内部,在程序编译期就被决定,直到应用程序结束,全局变量所占用的内存地址是固定不变的。全局的非指针类型,声明后自动 阅读全文
posted @ 2011-07-11 11:00 stwo 阅读(6924) 评论(6) 推荐(0) 编辑