嗨,我无法弄清楚为什么这不起作用。 我有一个图像和一个选择,我希望图像始终与选择的大小和位置相同,所以我把这个代码放在一个计时器:
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;
但它不起作用。
应该发生的是图像调整大小到选区,其位置也跟随选择。 但是,我可以移动和调整选择的大小,图像只是停留在原来的位置,不会调整大小。
答案 0 :(得分: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;