6

我希望 TImage 的衍生物在被单击时跟随光标,并在再次单击时停止跟随。为此,我创建了一个名为“Attached”的指针,它指向 TImage 或派生类。

var Attached: ^TImage;

我还将 Timage 的派生设置为在单击时调用过程 ChangeAttachState。

现在,在 ChangeAttachState 过程中,我想更改它指向单击的图像上的指针,或者在已附加图像时指向 nil。在代码中:

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

但是,“附加:= @Sender”行似乎不起作用,当我想使用指针将图像向右移动时,会导致访问冲突。

我认为指针指向错误的位置。如何使指针指向正确的保存地址或使用其他方法使单击的图像跟随鼠标?

(我希望我使用了正确的技术术语,因为英语不是我的母语)

4

1 回答 1

6

一个对象已经是一个指针,声明你Attached的 a TImage(而不是^TImage),你可以像Attached := Sender as TImage在 'ChangeAttachedState' 中分配给它(而不是Attached := @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 回答