temp1:='edit1';
j:=length(temp1);
//showmessage(temp2);
setlength(temp2,j);
edit2.Clear;
edit2.Text:=temp2;
temp2并没有赋值,可是把temp2赋值给edit2时edit2却变成了'edit'.
而加上一句showmessage(temp2);后,就正常了,edit2就为空了。
temp2没有赋值,哪来的值呢?不懂不懂!!!!
更好玩的。
我重新写这样一段:
setlength(temp2,15);
edit2.Clear;
edit2.Text:=temp2;
结果edit2显示的是:'comctl32.dll'.佩服

解决方案 »

  1.   

    Delphi6好像不是这样的。
    很正常。
    是不是,edit2.onchange有事件。
      

  2.   

    其实SetLength()函数是有一个返回值的,这个值是所开辟内存空间的入口地址,也就是temp2的入口地址.具体跟踪一下汇编代码就知道了.至于为什么这个值会是comctl32.dll,这个可能和系统内存有关吧,在2000下试得是这个字符串,在XP和98则不是
      

  3.   

    setlength(temp2,j);
    这句是这样的,设置字串长度为其分配内存,不过内容为空,所以此时的值为随机分配的,内存中一个变量的值,所以可以是任何值 ,如果你重启机器的话,就会换成另一个值了。
      

  4.   

    setlength去找一块内存,没有重新初始化,就会出现原先这块地址的内容了,很正常
      

  5.   

    只有你使用了temp2,才真正初始化。delphi自动这样的
      

  6.   

    我剛測試下,沒你說的情況, edit2.text 變為空的
      

  7.   

    我显示的全是乱码  我是win2000
      

  8.   

    setlength不会初始化你的变量,其实你可以这样定义一个变量:
    var a array of byte;setlength(a,10);
    此后你会发现a的成员不都是0