2012-10-23 29 views
6

Tôi muốn một dẫn xuất của TImage theo dõi con trỏ khi nó đã được nhấp và dừng sau khi nó được nhấp lại. Đối với điều này, tôi tạo ra một con trỏ, đặt tên là 'Đính kèm', trỏ đến một TImage hoặc một derivate.Delphi 7: Đính kèm hình ảnh vào Chuột

var Attached: ^TImage; 

Tôi cũng đặt derivate Timage để gọi thủ tục ChangeAttachState khi được nhấp.

Bây giờ, trong quy trình ChangeAttachState, tôi muốn thay đổi con trỏ mà nó trỏ trên Hình ảnh được nhấp hoặc trỏ tới nil khi Hình ảnh đã được đính kèm. Trong Mã số:

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

Tuy nhiên, dòng 'đính kèm: = @Sender' dường như không làm việc, gây ra một sự vi phạm truy cập khi tôi muốn sử dụng con trỏ để ví dụ: di chuyển các hình ảnh bên phải.

Tôi nghĩ con trỏ trỏ vào vị trí sai. Làm thế nào tôi có thể làm cho con trỏ trỏ vào đúng địa chỉ lưu hoặc làm cho hình ảnh được nhấp chuột theo các phương pháp khác?

(Tôi hy vọng tôi đã sử dụng thuật ngữ kỹ thuật đúng, như tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi)

Trả lời

6

Một đối tượng đã là một con trỏ, tuyên bố của bạn Attached một TImage (như trái ngược với ^TImage) và bạn có thể gán nó giống như Attached := Sender as TImage trong 'ChangeAttachedState' (trái ngược với Attached := @Sender).

Sau đó bạn có thể đính kèm một handler di chuyển chuột trên các hình thức như sau:

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

Đó hoạt động hoàn hảo, cảm ơn bạn! Không biết về khả năng đó. – restcoser

Các vấn đề liên quan