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。