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;这是我写的,但是有时候切换不过来,不知道为什么,想不出原因

解决方案 »

  1.   

    你别这样,你不如用个timer,定时检查当前鼠标位置,是否在图片内,不要再图片的事件中判断
      

  2.   

    就是鼠标的位置在这个图片范围内,原始A图片切换为B图片,当鼠标不在该图片的范围,B切换为原来的A图片
      

  3.   

    写在窗口的onmousemove消息里。
    否则鼠标上一次在图片里面,下一次就在图片范围外的话无法响应图片的onmousemove消息。图片地址用绝对路径,不要用相对路径。
    有时候当前目录会被改变的。不要每次响应都读图片,设置一个状态,如果图片和所需状态一致就不要读图片了。
    15ms(在鼠标运动时,onmousemove消息15ms一次)时间很短,反复读图片可能有问题。
      

  4.   

    在image的鼠标移动事件里面判断时,尤其在image控件的边缘时,这个效果不会很好的实现,容易造成图片闪烁,用定时器判断,这个方法还不错。
      

  5.   

    处理MouseEnter和MouseLeave事件.别告诉我你的Delphi版本老到没有这两个事件.
      

  6.   

    捕捉Image控件 CM_MOUSEENTER 和 CM_MOUSELEAVE 的消息呢
      

  7.   

      TMyImage = Class(TImage)
      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
    能实现你要的,就代码多了点,可以试试
      

  8.   

    给你一个建议。因为你的程序执行次数太多,加上读文件有一定时间。鼠标移动过程中,频繁激活事件,造成文件还没有读好,就要执行下一句代码了。
    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;这样也许能解决问题。自己再作一些调整。  
      

  9.   

    用mousemove,判断XY轴可以吗?