2012-10-23 18 views
6

Voglio una derivata di TImage seguire il cursore quando è stato fatto clic e smettere di seguire quando viene cliccato di nuovo. Per questo, ho creato un puntatore, denominato 'Attached', che punta a una TImage o una derivata.Delphi 7: Allegare l'immagine al mouse

var Attached: ^TImage; 

Ho anche impostare il derivato di Timage per richiamare la procedura ChangeAttachState quando il suo cliccato.

Ora, nella procedura ChangeAttachState, voglio cambiare il puntatore che punta sull'Immagine cliccata o indicare a zero quando un'immagine era già collegata. In Code:

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

Tuttavia, la linea 'In allegato: = @Sender' non sembra funzionare, causando una violazione di accesso quando voglio usare il puntatore per vale a dire spostare l'immagine verso destra.

Penso che il puntatore punti in una posizione sbagliata. Come posso far puntare il puntatore sull'indirizzo di salvataggio corretto o fare clic sull'immagine con il mouse con altri metodi?

(spero che ho usato i termini tecnici giusti, come l'inglese non è la mia lingua madre)

risposta

6

un oggetto è già un puntatore, dichiarare la vostra Attached un TImage (al contrario di ^TImage) ed è possibile assegnare ad esso come Attached := Sender as TImage in 'ChangeAttachedState' (in contrasto con Attached := @Sender).

È possibile quindi collegare un gestore di movimento del mouse sulla forma in questo modo:

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

che funziona perfettamente, grazie! Non sapevo di questa possibilità. – restcoser