大家好!
一个Image控件,在鼠标移动上去的时候是一张图,鼠标离开的时候又是另一张图,按下去又是一张图。下面是已实现的部分代码:
    procedure CMMouseEnter(var msg:tmessage);message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg:tmessage);message CM_MOUSELEAVE;procedure TForm1.CMMouseEnter(var msg:tmessage);
var
 obj:TObject;
begin
 obj:=Tobject(msg.lParam);//鼠标所在的控件
 if obj<>nil then
 begin
  if obj=image1 then
    ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
    Image1.repaint;
 end;
end;procedure TForm1.CMMouseLeave(var msg:tmessage);
var
 obj:TObject;
begin
 obj:=Tobject(msg.lParam);//鼠标所在的控件
 if obj<>nil then
 begin
  if obj=image1 then
  begin
    ImageList1.GetBitmap(1,Image1.Picture.Bitmap);
    Image1.repaint;
  end;
 end;
end;还有Click的代码也差不多~问题是:我有多个图(其实是用来模拟类似PageControl的按钮的),不仅要做到以上的效果,而且还要做到--如果一个Image当前是被按下的,那么它就不能响应鼠标的移入和移出事件!
我已试过用Enable:=False;但是没有用,谁能够帮我解决一下~谢谢!

解决方案 »

  1.   

    在CMMouseLeave和CMMouseEnter中判断一下鼠标是否已按下即可。
      

  2.   

    要做到--如果一个Image当前是被按下的,那么它就不能响应鼠标的移入和移出事件 恐怕很难,消息是Windows系统发出的,响应是Borland的VCL的对应操作。你可以这样试试。
    1,设一个boolean成员变量FbClicked,鼠标按下时设置其为true,
    2。在鼠标的移入和移出事件里首先判断 FbClicked,
       if FbClicked then 
          exit;
       不就行了,试试看。