2

こんにちは私はこれがうまくいかない理由を理解できません。画像とセレクションがあり、画像を常にセレクションと同じサイズと位置にしたいので、このコードをタイマーに入れます。

  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;

しかし、それは機能しません。

発生するはずの画像は選択範囲に合わせてサイズ変更され、その位置も選択範囲に従います。しかし、何が起こるかというと、選択範囲を移動してサイズを変更でき、画像はそのままの位置に留まり、サイズは変更されません。

画像はそのままになります

4

1 に答える 1

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;
于 2013-02-17T14:12:41.817 に答える