Case语句(50分)

  • 主题发起人 主题发起人 QianQi
  • 开始时间 开始时间
Q

QianQi

Unregistered / Unconfirmed
GUEST, unregistred user!
当运行程序时,在Case TIconButton(Sender).Tag of行处出错。
missing operator or semicolon(缺少操作符或分号)。
但我已仔细检查过,未发现次类问题。以下是部分代码:
procedure TForm1.CMMouseEnter(var Msg:TMessage);
var
TIconButton:TObject;
begin
TIconButton:=TObject(Msg.lParam);
if TIconButton<>nil then
begin
Case TIconButton(Sender).Tag of
1:Edit1.Text:='Enter';
2:Edit2.Text:='Enter';
3:Edit3.Text:='Enter';
4:Edit4.Text:='Enter';
end;
end;
end;
应该是个比较简单的问题,但本人较笨。请指教!
 
应该是:
switch TIconButton(Sender).Tag of
case 1:
case 2:
end;
 
改成
Case (TIconButton as tedit).Tag of
如何?
请把函数申明也贴出好吗?
 
提示这行出错,事实上不一定出错的。
看看前面的代码
 
关键字冲突了
您的变量名也叫TIconButton, 编译器不知道您case语句中的TIconButton(Sender)是个
类型转换还是一个变量函数, 根据局部变量优先的原则, 它将此TIconButton认为是您
定义的变量, 所以判断出变量的使用中存在非法形式, 因此报错
所以将var部分的变量 名改一下, 比如叫IconButton
 
TMessage 在windows中声明是一个记录类型
而TObject是一个类
把记录类型强制转换到类就算能成功
但这个类能好用吗?
 
TMessage 在windows中声明是一个记录类型
而TObject是一个类
把记录类型强制转换到类就算能成功
但这个类能好用吗?
 
Another_eYes
说的对
 
TObject哪里有Tag属性?

TComponent或其子类才有的说。
 
QianQi :
其实真正的问题是
1. TObject没有Tag,将TObject改为TButton。
2. Case语句中的TIconButton(Sender)是错误的,应该直接用 case TIconButton.Tag of...
这里的TIconButton是变量而不是类型。

chudx:
你应该看到,QianQi并不是把Msg转换成TObject,而是把Msg.lParam转换...,从其上下文
看来是对的,只是其目标类型不对而已。
 
多人接受答案了。
 
后退
顶部