procedure Tfrm_log.img_OkMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (x<=2) or (x>= 95) or (y<=2)
or (Y>=30) then
begin
img_Ok.Picture.LoadFromFile('.\images\Logoff.png')
end
else
begin
img_Ok.Picture.LoadFromFile('.\images\Logon.png')
end;
end;这是我写的,但是有时候切换不过来,不知道为什么,想不出原因
解决方案 »
- 对象关系图的自动排列,我现在用flowchart程序控制画出来的好乱,有没有谁知道好一点的算法自动排列?
- aiirii(ari-爱的眼睛),把如何在DELPHI中对USB口进行操作发给我?
- 关于代码优化问题
- 如何做动画鼠标?如何做鼠标文件?
- 怎么使按下回车键时光标定位下一个控件?
- 重金求如何取字符串“C001 | 张三”之中的字符串“C001”的方法。
- 高难度问题:如何利用程序查看局域网上某电脑占用集线器的某个端口。(100分)
- 请教TMessage的Result小问题。谢谢
- 如何用delphi带的Image Editor将32*32的图标转换为16*16的图标?
- 如何调用Windows 2000/Me的最新打开文件对话框
- TreeView 使用方法。连接access数据库。。。 急!
- 运行delphi2010出问题了,无法进入界面直接退出了T_T
否则鼠标上一次在图片里面,下一次就在图片范围外的话无法响应图片的onmousemove消息。图片地址用绝对路径,不要用相对路径。
有时候当前目录会被改变的。不要每次响应都读图片,设置一个状态,如果图片和所需状态一致就不要读图片了。
15ms(在鼠标运动时,onmousemove消息15ms一次)时间很短,反复读图片可能有问题。
private
FEnterImg: String;
FLeaveImg: String;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; published
property EnterImg: String read FEnterImg write FEnterImg;
property LeaveImg: String read FLeaveImg write FLeaveImg;
end;procedure TMyImage.CMMouseEnter(var Message: TMessage);
begin
if FileExists(FEnterImg) then
Self.Picture.LoadFromFile(FEnterImg);
end;procedure TMyImage.CMMouseLeave(var Message: TMessage);
begin
if FileExists(FLeaveImg) then
Self.Picture.LoadFromFile(FLeaveImg);
end;动态创建一个 TMyImage,指定它的EnterImg,LeaveImg
能实现你要的,就代码多了点,可以试试
1、在USES中定义全局变量 ShowImage:boolean; // 保存是已否读图片1
2、事件修改
procedure Tfrm_log.img_OkMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ((x<=2) or (x>= 95) or (y<=2) or (Y>=30)) and
not ShowImage then
begin
ShowImage:=True;
img_Ok.Picture.LoadFromFile('.\images\Logoff.png')
end
else
ShowImage:=False;
begin
img_Ok.Picture.LoadFromFile('.\images\Logon.png')
end;
end;这样也许能解决问题。自己再作一些调整。