6

TImageの派生物は、クリックされたときにカーソルをフォローし、もう一度クリックされたときにフォローを停止する必要があります。このために、TImageまたは派生物を指す「Attached」という名前のポインターを作成しました。

var Attached: ^TImage;

また、Timageの派生物がクリックされたときに、プロシージャChangeAttachStateを呼び出すように設定しました。

ここで、ChangeAttachStateプロシージャで、クリックした画像を指すポインタを変更するか、画像がすでに添付されている場合はnilを指すようにします。コード内:

procedure TForm1.ChangeAttachState(Sender:TObject);
begin
  if Attached = nil then
    Attached := @Sender
  else
    Attached := nil;
end;

ただし、「Attached:= @Sender」という行は機能していないようで、ポインタを使用して画像を右に移動したい場合にアクセス違反が発生します。

ポインタが間違った場所を指していると思います。ポインタを正しい保存アドレスに向けたり、クリックした画像を他の方法でマウスに追従させるにはどうすればよいですか?

(英語は私の母国語ではないので、正しい専門用語を使用したと思います)

4

1 に答える 1

6

オブジェクトはすでにポインタであり、(ではなく)aを宣言しAttachedTImage(ではなく) 'ChangeAttachedState'の^TImageようにオブジェクトに割り当てることができます。Attached := Sender as TImageAttached := @Sender

次に、次のようにフォームにマウス移動ハンドラーをアタッチできます。

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Assigned(Attached) then begin
    Attached.Left := X;
    Attached.Top := Y;
  end;
end;
于 2012-10-23T17:38:08.883 に答える