2

嗨,我不知道为什么这行不通。我有一个图像和一个选择,我希望图像始终与选择的大小和位置相同,所以我把这段代码放在一个计时器中:

  procedure TfrmMainUI.tmrUpdateTimer(Sender: TObject);
  var i : integer; 
  begin
    Image1.Width:=Selection1.Width;
    Image1.Height:=Selection1.Height;
    Image1.Position.X:=Selection1.Position.X;
    Image1.Position.Y:=Selection1.Position.Y;
  end;

但它不起作用。

应该发生的是图像调整大小以适应选择,并且它的位置也跟随选择。但是发生的事情是我可以移动和调整选择的大小,并且图像只是停留在它所在的位置并且不会调整大小。

图像停留在原处

4

1 回答 1

2

正如@Mike Sutton 在评论中指出的那样,您应该使用OnTrack事件TSelection来触发对图像的更新。

文档说:

OnTrack 事件的事件处理程序在 TSelection 对象正在移动或调整大小的过程中从 MouseMove 方法循环调用。

编写自定义 OnTrack 事件处理程序以在 TSelection 正在移动或调整大小的过程中执行特定操作。

您在评论中声明,组件是在运行时动态创建的,而不是在设计时表面上。因此,您还需要在代码中分配您的处理程序。像这样做:

Selection1.OnTrack := SelectionTrack;

您的事件处理程序将如下所示:

procedure TfrmMainUI.SelectionTrack(Sender: TObject);
begin
  Image1.Width:=Selection1.Width;
  Image1.Height:=Selection1.Height;
  Image1.Position.X:=Selection1.Position.X;
  Image1.Position.Y:=Selection1.Position.Y;
end;

您还在评论中说您需要跟踪许多链接图像和选择的选择更改。您可以像这样修改事件处理程序:

procedure TfrmMainUI.SelectionTrack(Sender: TObject);
var
  Selection: TSelection;
  Image: TImage;
begin
  Selection := Sender as TSelection;
  Image := ImageFromSelection(Selection);//you need to implement this function
  Image.Width:=Selection.Width;
  Image.Height:=Selection.Height;
  Image.Position.X:=Selection.Position.X;
  Image.Position.Y:=Selection.Position.Y;
end;
于 2013-02-17T14:12:41.817 回答