سؤال

لدي واجهة المستخدم الرسومية VCL تم تطويرها في Codegear. لقد قمت بإنشاء DropTarget لـ Mainform وينفذ كائن DropTarget واجهة IdroPtarget التي تتيح لي سحب الملفات وإسقاطها من Explorer. الآن لأنني أريد فقط أن تكون بعض مكونات الطفل أهدافًا (وليس النموذج بأكمله) ، فأنا لا أحصل إلا على طريقة Dragenter S_ok عندما تكون إحداثيات PointL ضمن حدود المكون.

ومع ذلك ، إذا قمت بسحب العنصر ببطء إلى حدود النموذج ولكن ليس المكون ، فإن Dragenter يرجع E_Nointerface ، وبالتالي عدم السماح بإسقاط. إذا واصلت السحب إلى Dropzone ، فلن تطلق Dragenter ، فأنا أفهم سبب عدم إطلاقه. لذا سؤالي كيف يمكنني إطلاق حدث Dragenter يدويًا?

هل كانت مفيدة؟

المحلول

يبدو أنك تتجاهل أن idroptarget لديها طريقة Dragover () تحتاج إلى استخدامها بالإضافة إلى Dragenter (). إذا لم يبدأ Dragenter () بإحداثيات تسمح بها ، فعليك العودة S_OK مع معلمة PDWEFFECT DROPEFFECT_NONE, ، ثم دع Dragover () تستمر في القيام بالتحقق من الإحداثيات الخاصة به بعد ذلك.

بالإضافة إلى ذلك ، نظرًا لأنك ترغب فقط في السحب على عنصر تحكم معين ، يجب أن تتصل بـ RecordDragDrop () لكل من عناصر التحكم الفردية (على افتراض أنها أحفاد التوأم) ، وليس من أجل TForm نفسها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top