遇到奇怪问题 请大家赐教

flyfoolishbird 2003-08-22 12:48:07
在 button 中 调用一个 edit 的 keypress事件

如果写声 edit1keypress(edit1,#13) 提示参数不一致
但如果写成
var
key :Char;
begin
key := #13;
edit1keypress(edit1,key);
end;
就可以了,是什么原因?
...全文
40 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ray00 2003-08-25
  • 打赏
  • 举报
回复
在过程或函数的参数定义中如果使用var说明,则是用传址方式传递的变参。
如你的例子中过程中的key变量共享主程序中key变量的地址,所以调用时参数应是变量,而不能是常数。
简单说,过程内部对key变量值的改变会改变调用处的变量值,所以调用处显然应是变量。
如你在procedure Edit1KeyPress中写key:=#32,
主程序
var
key :Char;
begin
key := #13;
edit1keypress(edit1,key);
此时输出key看,key的值变成了#32
end;
xuejinlong 2003-08-23
  • 打赏
  • 举报
回复
Const的当然可以时常数,不是告诉你了吗 Key是Var类型,变参,当然不可以用常量。
flyfoolishbird 2003-08-23
  • 打赏
  • 举报
回复
没人回答了吗
zjan521 2003-08-22
  • 打赏
  • 举报
回复
因为Edit1KeyPress肯定是你的对Edit1的OnKeyPress的时间的相应函数,所以其原型就必定是(Sender: TObject; var Key: WORD); Key是VAR的参数你自然不能传常量给他
flyfoolishbird 2003-08-22
  • 打赏
  • 举报
回复
既然定义的是参数 为什么不能传常量 普通定义的函数 如
procedure aa ( const aa:string);

aa('aa') 和
var
bb :string;
begin
bb := 'aa';
aa(bb);
end
都可以这么做

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧