Delphi 7: прикрепить изображение к мыши

Я хочу, чтобы производная от TImage следовала за курсором, когда по нему щелкнули, и перестала следовать, когда по нему снова щелкнули. Для этого я создал указатель с именем «Attached», который указывает на TImage или его производное.

var Attached: ^TImage;

Я также установил производную от Timage для вызова процедуры ChangeAttachState при ее нажатии.

Теперь в процедуре ChangeAttachState я хочу изменить указатель, который он указывает на изображение, по которому щелкнули, или указать на ноль, когда изображение уже было прикреплено. В коде:

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

Однако строка «Прикреплено: = @Sender», похоже, не работает, вызывая нарушение прав доступа, когда я хочу использовать указатель, т. е. переместить изображение вправо.

Я думаю, что указатель указывает на неправильное место. Как я могу сделать так, чтобы указатель указывал на правильный адрес сохранения или чтобы изображение, по которому щелкнули, следовало за мышью другими методами?

(Надеюсь, я использовал правильные технические термины, поскольку английский не является моим родным языком)


person restcoser    schedule 23.10.2012    source источник


Ответы (1)


Объект уже является указателем, объявите свой Attached как 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;
person Sertac Akyuz    schedule 23.10.2012
comment
Это работает отлично, спасибо! Не знал о такой возможности. - person restcoser; 23.10.2012