这里最简洁的解决方案是创建一个自定义组件,并让您的设计远离如此繁重且扁平的设计时布局。这些自然变得难以维护和修改。
也就是说,如果您想要快速破解以节省大量打字和点击,您可以使用插入器类来注入此鼠标行为。
在表单单元的interface 部分,在表单的类声明上方添加以下类:
type
TImage = class(Vcl.ExtCtrls.TImage)
private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
end;
TForm1 = class(TForm)
{ ... rest of your form as normal }
end;
然后,在implementation 部分中,添加以下内容:
procedure TImage.CMMouseEnter(var Message: TMessage);
begin
inherited;
Top := Top + 3;
Left := Left + 3;
end;
procedure TImage.CMMouseLeave(var Message: TMessage);
begin
inherited;
Top := Top - 3;
Left := Left - 3;
end;
像这样定义插入器会有效地导致您修改后的TImage 类替换在设计时放置在表单上的所有现有TImage 组件。
请注意,此示例仅适用于 Windows 上的 VCL。对于使用 FMX 的跨平台解决方案,所有 UI 控件都有虚拟的 DoMouseEnter() 和 DoMouseLeave() 方法,您可以使用 override 代替,例如:
type
TImage = class(FMX.Objects.TImage)
protected
procedure DoMouseEnter; override;
procedure DoMouseLeave; override;
end;
...
procedure TImage.DoMouseEnter;
begin
inherited;
Top := Top + 3;
Left := Left + 3;
end;
procedure TImage.DoMouseLeave;
begin
inherited;
Top := Top - 3;
Left := Left - 3;
end;