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

标签 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

最佳答案

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

documentation说:

The event handler of the OnTrack event is called cyclically from the MouseMove method while the TSelection object is in the process of moving or resizing.

Write a custom OnTrack event handler to perform a specific action when TSelection is in the process of moving or resizing.

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

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;

关于image - 将图像大小调整为选择矩形 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14918540/

相关文章:

ios - 我如何快速获取按钮的图像?

德尔福XE2 : Possible to instantiate a FireMonkey Form in VCL application?

delphi - 我可以一次从两个数据集中进行查找吗?

delphi - TList <T> 的快速复制?

delphi - 如何更改 FM2 中 StringGrid 的字体大小

android - SQLite 数据库部署到 Android 设备的路径是什么?

php - 使用 CSS 加载从文件夹更改的图像

java - 显示 ImageView 对象的修改后的图像

c# - 添加到 WPF Canvas 的图像更改大小

delphi - 在 Delphi 中如何让 PChar 越过十六进制 00 到达文件末尾?