image - 如何检测鼠标何时不再位于控件中?

标签 image delphi delphi-7 onmousemove

<分区>

我已将图像 (TImage) 作为我程序中的按钮。我想添加一些额外的效果,所以在 OnMouseMove 中(每当用户将鼠标移到图像上时)图像被另一个图像替换以提供额外的效果:

procedure TForm1.Image4MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var 
  Path, Destination: String;
begin
  Path := ParamStr(0);
  Destination := Extractfilepath(Path) + 'Images\Image2.bmp';
  Image4.Picture.LoadFromFile(Destination);
end;

但是无论何时用户将鼠标移开(当他离开图像时),它都不会撤消已完成的操作(变回 Image1)。我该怎么做?没有 OnMouseLeave 事件。我正在使用 delphi 7。

最佳答案

首先,你问题中的代码太可怕了!每次光标在图像控件内移动一个像素时,它都会(重新)加载位图!这太浪费 CPU 时间了!

无论如何,在现代版本的 Delphi 中,您只需使用 OnMouseEnterOnMouseLeave 事件。我认为这些在 Delphi 7 中不存在,所以你必须这样做:

TImage = class(ExtCtrls.TImage)
protected
  procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
  procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
end;

在哪里

{ TImage }

procedure TImage.CMMouseEnter(var Message: TMessage);
begin
  // Do something
end;

procedure TImage.CMMouseLeave(var Message: TMessage);
begin
  // Do something else 
end;

此示例采用插入器类的形式,但当然您最好制作一个适当的子类化控件。

关于image - 如何检测鼠标何时不再位于控件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934271/

相关文章:

javascript - 无法在服务器中打开上传的文件

delphi - 如何在Delphi XE中自动生成*_TLB.pas?

delphi - TJvCsvDataSet 和过滤器

xml - 使用 Delphi XML 数据绑定(bind)向导时不存在必需的标记

Delphi 7 更新连接表

c# - Delphi中加载C# DLL找不到依赖库DLL

delphi - "JPEG Error #42"无法通过 try catch ...除非加载损坏的图像

html - 照片网格列布局

java - 从 JPanel 创建小图像

image - 与 OCR 逆向工程作斗争