Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 将图像大小调整为选定矩形_Image_Delphi_Firemonkey - Fatal编程技术网

Image 将图像大小调整为选定矩形

Image 将图像大小调整为选定矩形,image,delphi,firemonkey,Image,Delphi,Firemonkey,嗨,我不明白为什么这不起作用。 我有一个图像和一个选择,我希望图像始终与选择的大小和位置相同,因此我将此代码放入计时器中: procedure TfrmMainUI.tmrUpdateTimer(Sender: TObject); var i : integer; begin Image1.Width:=Selection1.Width; Image1.Height:=Selection1.Height; Image1.Position.X:=Selecti

嗨,我不明白为什么这不起作用。 我有一个图像和一个选择,我希望图像始终与选择的大小和位置相同,因此我将此代码放入计时器中:

  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;
但它不起作用

应该发生的是图像根据选择调整大小,其位置也跟随选择。 但是,我可以移动并调整所选内容的大小,而图像只是停留在原来的位置,不会调整大小


正如@Mike Sutton在评论中指出的,您应该使用
t选择的
OnTrack
事件来触发图像更新

报告说:

OnTrack事件的事件处理程序从 当TSelection对象处于 移动或调整大小

编写自定义OnTrack事件处理程序以在以下情况下执行特定操作: t选择正在移动或调整大小

在注释中声明,组件是在运行时动态创建的,而不是在designtime图面上创建的。因此,您还需要在代码中分配处理程序。这样做:

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;
您的事件处理程序如下所示:

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;
您还可以在注释中指出,您需要跟踪多个链接图像和选择的选择更改。您可以按如下方式修改事件处理程序:

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;

“它不起作用”是什么意思?我们看不到你的屏幕,也看不懂你的心思。“它不工作”可能对你来说很清楚,但我们无法从这里读取你的想法或看到你的屏幕。如果你想让我们帮助你,你需要解释你试图解决的问题是什么。代码看起来很好,所以你必须解释更多没有发生的事情。但是,我建议挂起TSelection.OnTrack事件,当选择发生更改时,将立即调用该事件,而不是等待计时器计时。选择动作(可能是鼠标按下,鼠标移动)是否运行模式消息循环?在这种情况下,你的计时器不会启动。是的,“它不工作”对我们来说是没有希望的。我们不知道那是什么意思。试着想象你处在我们的位置。我们不知道您期望的是什么,我们看不到您的屏幕。@Andreas等待FMX通过alpha阶段,比如2020。@kobus我添加了一些关于您需要使用链接图像/选择数组的内容。我希望我理解正确。ImageFromSelection函数会做什么?很好。我的假设是,在选择和图像之间存在一对一的关系。但我在这一点上有所猜测!更正链接到图像的选择。另一个选项是在选择的TagObject属性中引用图像,然后您可以将其再次抛出Image:=Selection.TagObject作为TImage。