2012-10-23 11 views
6

Chcę, aby pochodna pliku TImage podążała za kursorem po kliknięciu i przestała obserwować po ponownym kliknięciu. W tym celu utworzyłem wskaźnik o nazwie "Załączony", który wskazuje na obraz lub pochodną.Delphi 7: Dołącz obraz do myszy

var Attached: ^TImage; 

ja również ustawić pochodną TImage wezwać ChangeAttachState procedura, gdy jego kliknięciu.

Teraz, w procedurze ChangeAttachState chcę zmienić wskaźnik, który wskazuje na kliknięty obraz lub wskaż zero, gdy obraz był już załączony. W postaci kodu:

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

Jednak linia „załączone: = @Sender” nie wydają się działać, powodując naruszenie zasad dostępu, gdy chcę użyć wskaźnika do tj przesunąć obraz w prawo.

Myślę, że wskaźnik wskazuje w niewłaściwym miejscu. Jak sprawić, by wskaźnik wskazywał prawidłowy adres zapisu lub kliknął obraz podążając za myszą innymi metodami?

(mam nadzieję, że stosowane odpowiednie warunki techniczne, jak angielski nie jest mój język ojczysty)

Odpowiedz

6

Obiekt jest już wskaźnikiem, zadeklarować AttachedTImage (w przeciwieństwie do ^TImage) i można przypisać do tego jak Attached := Sender as TImage w "ChangeAttachedState" (w przeciwieństwie do Attached := @Sender).

Następnie można dołączyć obsługi Najedź myszką na formularzu tak:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, 
    Y: Integer); 
begin 
    if Assigned(Attached) then begin 
    Attached.Left := X; 
    Attached.Top := Y; 
    end; 
end; 
+2

który działa doskonale, dziękuję! Nie wiedziałem o tej możliwości. – restcoser