2012-10-23 10 views
6

मैं चाहता हूं कि टीआईमेज का व्युत्पन्न कर्सर का पालन करें जब इसे क्लिक किया गया हो और इसे दोबारा क्लिक करने पर रोकें। इसके लिए, मैंने 'संलग्न' नामक एक पॉइंटर बनाया, जो कि टीआईमेज या व्युत्पन्न को इंगित करता है।डेल्फी 7: माउस को छवि संलग्न करें

var Attached: ^TImage; 

मैं भी जब इसकी क्लिक किया प्रक्रिया ChangeAttachState कॉल करने के लिए Timage के व्युत्पन्न निर्धारित किया है।

अब, चेंजएटैचस्टेट प्रक्रिया में मैं उस पॉइंटर को बदलना चाहता हूं जो क्लिक किए गए छवि पर इंगित करता है या जब कोई छवि पहले से संलग्न होती है तो शून्य पर इंगित करें।

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

हालांकि, लाइन 'अटैच किया गया:: = @Sender' कोड में जब मैं अर्थात करने के लिए सूचक का उपयोग करने का अधिकार छवि ले जाना चाहते हैं एक पहुँच उल्लंघन के कारण काम करने के लिए नहीं लगता है,।

मुझे लगता है कि सूचक एक गलत स्थान पर इंगित करता है। मैं सही सहेजने वाले पते पर सूचक बिंदु कैसे बना सकता हूं या क्लिक की गई छवि को अन्य विधियों के साथ माउस का पालन कर सकता हूं?

(मुझे आशा है कि मैं सही तकनीकी शब्दों का इस्तेमाल किया, के रूप में अंग्रेजी मेरी मूल भाषा नहीं है)

उत्तर

6

एक वस्तु पहले से ही एक सूचक है, की घोषणा अपने Attached एक TImage (के रूप में ^TImage के खिलाफ) और आप प्रदान कर सकते हैं इसे 'चेंजएटेडस्टेट' में Attached := Sender as TImage की तरह (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; 
+2

कि पूरी तरह से काम करता है, धन्यवाद! उस संभावना के बारे में नहीं पता था। – restcoser

संबंधित मुद्दे