在 button 中 调用一个 edit 的 keypress事件 如果写声 edit1keypress(edit1,#13) 提示参数不一致
但如果写成
    var
         key :Char;
    begin
         key := #13;
         edit1keypress(edit1,key); 
    end;
就可以了,是什么原因?

解决方案 »

  1.   

    因为Edit1KeyPress肯定是你的对Edit1的OnKeyPress的时间的相应函数,所以其原型就必定是(Sender: TObject; var Key: WORD); Key是VAR的参数你自然不能传常量给他
      

  2.   

    既然定义的是参数 为什么不能传常量 普通定义的函数 如
      procedure aa ( const aa:string);  aa('aa') 和
      var 
        bb :string;
      begin
        bb := 'aa';
        aa(bb);
      end  
      都可以这么做 
      

  3.   

    Const的当然可以时常数,不是告诉你了吗 Key是Var类型,变参,当然不可以用常量。
      

  4.   

    在过程或函数的参数定义中如果使用var说明,则是用传址方式传递的变参。
    如你的例子中过程中的key变量共享主程序中key变量的地址,所以调用时参数应是变量,而不能是常数。
    简单说,过程内部对key变量值的改变会改变调用处的变量值,所以调用处显然应是变量。
    如你在procedure Edit1KeyPress中写key:=#32,
    主程序
        var
             key :Char;
        begin
             key := #13;
             edit1keypress(edit1,key);
             此时输出key看,key的值变成了#32 
        end;