【发布时间】:2011-03-30 11:47:03
【问题描述】:
这段代码运行良好:
procedure TForm2.Timer1Timer(Sender: TObject);
var
Text: string;
begin SetLength (Text,555);
GetWindowText (getforegroundwindow, PChar (Text),555);
Form2.gtListBox1.Items.Add (
IntToStr (getforegroundwindow) + ': ' + Text);
end;
但是当我放的时候
var
Text: string;
从 Timer1Timer 事件处理程序到
单位实现部分或单位 var 部分中的“文本:字符串”我得到错误:E2197 常量对象不能作为 var 参数传递
根据文档:
当您 尝试将常量作为 var 或 out 发送 函数或过程的参数。
但我没有将文本声明为常量,那么为什么会出现此错误?
编辑:@mason Wheeler:我不明白为什么会这样:
implementation
{$R *.dfm}
var
char :integer;//first of all why does delphi let me declare variable that is also a type name
procedure TForm2.Button1Click(Sender: TObject);
begin
char:=11;
showmessage(IntToStr(char));
end;
我的第一个代码不起作用,因为我将文本声明为字符串,你说:''编译器可能认为它是对类型的引用,而不是对变量的引用''而不是编译器为什么不认为它是对类型的引用而不是这种情况下的变量?我很困惑
Edit2: 我现在明白出了什么问题,但仍然有 1 个困惑我没有使用 with 语句,那么为什么 delphi 会像对待我一样对待使用:
with
form1 do
text := 'blahblahblah';
这在 delphi 部分是错误的,我的意思是 delphi 不应该让我们做 text := 'blah' 但 form1.text := blah; 或 with form1 do text := 'blah'; 我是否需要打开/关闭一些编译器设置我正在使用 delphi 2010 没有任何ide专家
【问题讨论】:
-
对于每个方法体,您可以想象在函数周围有一个
with Self do块,除了Self 的成员不会像在真正的with块中那样隐藏局部变量。根据经验,如果您在表单自己的方法中使用 Delphi 生成的全局表单变量,那么您做错了。
标签: delphi error-handling