这段代码工作正常: procedure TForm2.Timer1Timer(Sender: TObject);var Text: string;begin SetLength (Text,555); GetWindowText (getforegroundwindow, PChar (Text),555); Form2.gtListBox1.Items.Add ( IntToStr (getforegroundwindow) + ': '
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部分中的’text:string”我得到错误:E2197常量对象不能作为var参数传递
根据文件:
This error message appears when you
try to send a constant as a var or out
parameter for a function or procedure.
但我没有宣布文本为常数,为什么我得到这个错误?
编辑:@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;
我的第一个代码没有工作,因为我将文本声明为字符串,你说:”编译器可能认为它是对类型的引用而不是变量”,而不是为什么编译器认为它不是对类型的引用而不是在这种情况下的变量?我很迷惑
编辑2:我现在明白了什么是错的,但仍然有一个混乱我没有使用一个声明然后为什么德尔福正在对待我好像在使用:
with form1 do text := 'blahblahblah';
这在delphi部分是错的,我的意思是delphi不应该让我们做文本:=’blah’但是form1.text:= blah;或者用form1做文字:=’blah’;我是否需要打开/关闭一些编译器设置我在没有任何ide专家的情况下使用delphi 2010
实际上,如果在实现部分声明Text并在Timer1Timer(Sender:TObject)中使用它,编译器会将Text视为Form1.Text.将文本名称更改为sText,它将起作用.
编辑1:
因为Form1.Char之类的表单没有属性/字段.