else if key=$41 then
        num2:= strtoint(edit2.Text)+1;
        edit2.Text:= inttostr(num2)
在这里少了个begin ..end;
第一次模拟f4按键时没有执行num2:= strtoint(edit2.Text)+1;
所以num2没有初始化.
但执行了edit2.Text:= inttostr(num2)
第二次为什么没改变还请那位高手指点一下。

解决方案 »

  1.   

    哦,对了,第二次没改变是因为发送f4模拟按键时又把edit2.text置回初始值。
    就相当与在一个动作里对edit2.text做两次操作。
    f4:edit2.Text:= inttostr(num2);
    A:edit2.Text:= inttostr(strtoint(edit2.text)+1);
    所以表面看不出来;
      

  2.   

    我设了断点,发现第二个程序执行sendmessage(h, WM_KEYDOWN, $41, 0)前
    edit2的值是4423400,执行sendmessage(h, WM_KEYDOWN, $41, 0)后,edit2是4423401,然后就不再变化了,而且每次都是这样,按说没有初始化的值应该是随机的,为什么每次都是同一个值呢?
    另外,有没有办法两个程序一起调试?
      

  3.   

    没初试化的值不是随机的,它是内存里的一个地址上的值,如果你的机器没有RESET的话或其他程序没改变到那个地址上的值的话,原地址的值是就不会有改变!你两个程序一起调试的话,就把两个单元放到一个工程里,然后你显示第一个窗体上加个按纽 并 form2.show ;
      

  4.   

    to chinakiss8848(似乎明白了) 我也这么想!可怎么会就这么巧,刚好就分配那个地址,我这都乱七八糟执行了好多东西了。
      

  5.   

    你可以在
    num2:= strtoint(edit2.Text)+1;
    处设置断点,然后run到断点的地方,就点DELPHI的‘||’暂停,就有一个
    汇编调试框出来,你看看那个上面edit2.text值的地址改了没?当然没改,只要你
    没reset!
      

  6.   

    先设一下断点,恩,还有
    else if key=$41 then
            num2:= strtoint(edit2.Text)+1;
            edit2.Text:= inttostr(num2)
    这里漏了一个BEGIN和AND。
    调试一下,应该没问题啊。
      

  7.   

    谢谢大家,忘写begin和end的问题我已经解决了。现在的疑问是,整数的初始化是到底怎么回事?
    to:chinakiss8848(似乎明白了)
    我下午运行时是4423400,刚才刚刚开了机器,运行还是4423400。没这么巧的事情吧。再说,机器里哪一片内存的值是4423400呢?
      

  8.   

    如果你不相信是内存本来的值的话,你可以这样:你在:if key=VK_F4 then
        begin
            num1:= strtoint前加个sum1:=0;来改变一下!看看效果然后你再注释掉它,在看看是什么
      

  9.   

    在win32中,系统为每个进程开辟一个独立的空间,两个不同进程可以有相同的内存编号,但访问的是不同区域。所以,只要你远行环境不变,程序不变,程序中变量分配的地址就不会改变。~~不对之处还望指点,可以给分了吧~~~