将图像大小调整为选择矩形Delphi

时间:2013-02-17 06:19:09

标签: image delphi firemonkey

嗨,我无法弄清楚为什么这不起作用。 我有一个图像和一个选择,我希望图像始终与选择的大小和位置相同,所以我把这个代码放在一个计时器:

  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;

但它不起作用。

应该发生的是图像调整大小到选区,其位置也跟随选择。 但是,我可以移动和调整选择的大小,图像只是停留在原来的位置,不会调整大小。

Image stays where it is

1 个答案:

答案 0 :(得分:2)

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

documentation说:

  

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;