DragDrop هي وسيلة سريعة لتشغيل Windows. كمطور يعتمد على Windows
تدعم Delphi أيضًا عمليات السحب والإفلات ، وتكون وظيفة السحب والإفلات لنظام التطبيق مريحًا للغاية ، مما يعكس حقًا
قوة وراحة دلفي.
جميع عناصر التحكم التي توفرها Delphi (التحكم ، والتي يمكن الحصول على تركيز الإدخال) تدعم عمليات السحب والإفلات
خصائص السحب والإفلات المقابلة ، السحب وإسقاط الأحداث ، وسحب وإسقاط الأساليب. بعد ذلك ، سنقدم دعم السحب والإفلات من عنصر التحكم أولاً ، ثم نعطي
الخطوات العامة وأمثلة التطبيق لإرسال عمليات السحب والإفلات.
9.1 اسحب الدعم وإسقاط عناصر التحكم
في عمليات السحب والإفلات ، يمكن تقسيم عناصر التحكم إلى فئتين: التحكم في المصدر والتحكم المستهدف. يمكن استخدام معظم عناصر التحكم كعناصر تحكم المصدر
يمكن أيضًا استخدامها كعنصر تحكم مستهدف. ولكن هناك أيضًا بعض الضوابط التي يمكن أن تدعم واحدة منها فقط.
9.1.1 اسحب وإسقاط الخصائص
هناك اثنين من خصائص السحب والإفلات الرئيسية:
● DragMode: وضع السحب
يتم تعيينها جميعًا في عنصر التحكم في مصدر السحب والإفلات. يتحكم DragMode في المستخدم عند الضغط على عنصر التحكم أثناء وقت التشغيل
كيف يتفاعل عنصر التحكم عندما يكون الماوس معطلاً. إذا تم ضبط DragMode على dmautomatic ، فحينئذًا عندما يضغط المستخدم على الماوس على عنصر التحكم
يبدأ DragMode تلقائيًا ؛
لتحديد ما إذا كان السحب يمكن أن يبدأ.
يتم استخدام DragCursor لتحديد المؤشر المعروض عند السحب.
يجب أن يحترم المطورين مواصفات الواجهة الشائعة في عملية البرمجة. ولكن في بعض الأحيان لأغراض محددة ،
يمكن للمطورين أيضًا تعيين المؤشر الخاص بهم إلى DragCursor.
9.1.2 السحب وإسقاط الحدث
هناك ثلاثة أحداث السحب والإفلات الرئيسية:
● Ondragover: إلهام عند السحب
● ONDRAGDROP: إلهام عند السحب والإسقاط
● redenddrop: إلهام عند انتهاء السحب
يتم الرد على الحدثين الأولين من خلال عنصر التحكم الهدف ، ويتم الرد على الحدث الأخير بواسطة عنصر التحكم المصدر.
تتمثل الوظيفة الرئيسية لحدث OnDragover في تحديد ما إذا كان عنصر التحكم مقبولًا عندما يسقط المستخدم السحب في مكانه.
تشمل معاييرها:
المصدر: TOBJECT ؛
الحالة: TdragState ؛
TdragState هو نوع التعداد يمثل العلاقة بين عناصر السحب والإفلات وعناصر التحكم المستهدفة.
اكتب tdragstate = (dsdragenter ، dsdragleave ، dsdragmove) ؛
معنى القيم المختلفة كما يلي:
الجدول 9.1 قيمة وأهمية السحب
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
معنى القيمة
─ ─ ─ ─
DSDragenter اسحب الكائن إلى عنصر تحكم يسمح بإسقاط الكائن المجر. هي الحالة الافتراضية.
Dsdragleave يسحب الكائن بعيدًا عن عنصر تحكم يسمح بإسقاط كائن السحب.
يتحرك كائن السحب DSDRAGMOVE داخل عنصر تحكم يسمح بإسقاط كائن السحب.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━
يمكن للمستخدم استخدام المعلمات المقدمة لتحديد ما إذا كان السحب المسقط مقبولًا ، مثل:
● نوع التحكم في المصدر القاضي:
قبول: = المصدر هو tlabel ؛
● كائن التحكم في مصدر القاضي:
قبول: = (Source = tabSet1) ؛
● القاضي المؤشر موقف:
انظر الروتين في (9.2) ، (9.3).
● القاضي حالة السحب:
إذا (المصدر هو tlabel) و (الحالة = dsdragmove) ثم
STOUND.DRAGICON: = 'new.ico' ؛
نهاية
آخر
قبول: = خطأ ؛
عند قبول = صحيح ، يمكن أن يستجيب عنصر التحكم الهدف لحدث OnDragdrop ، والذي يتم استخدامه لتحديد أن البرنامج بعد إسقاط السحب
كيفية التعامل معها.
تشمل معلمات عملية معالجة الأحداث OnDragdrop التحكم في المصدر وموضع المؤشر. يمكن استخدام هذه المعلومات للمعالجة
تأكيد.
يتم الرد على حدث onenddrag بواسطة عنصر التحكم المصدر بعد اكتمال عملية السحب ، ويستخدمه عنصر التحكم المصدر لأداء المقابل
التعامل مع. تتضمن نهاية عملية السحب كل من قبول السحب والإفلات ، ويقوم المستخدم بإطلاقه على عنصر تحكم لا يمكن إسقاطه.
ضع الماوس. تتضمن معلمات عملية معالجة الأحداث هذه التحكم الهدف (الهدف) وإحداثيات موضع الإسقاط. لو
الهدف = لا شيء ، يعني أن العنصر المجرد غير مقبول بواسطة أي عنصر تحكم.
في عملية نقل السحب والإفلات ، تم تقديم عملية نسخ السحب والإفلات في القسم 3 ، إذا نجحت العملية ، فسيتم سرد مربع قائمة الملفات أدناه.
يجب تحديث المحتوى المعروض. يتم استخدام البرنامج التالي لتنفيذ هذه الوظيفة.
الإجراء tfmform.filelistenddrag (المرسل ، الهدف: tobject ؛ x ، y: integer) ؛
يبدأ
إذا كان الهدف <> nil ثم fileList.update ؛
نهاية؛
بالإضافة إلى الأحداث الثلاثة الموضحة أعلاه ، هناك حدث آخر onmousedown ، والذي يستخدم أيضًا بشكل شائع لاستجابات السحب والإفلات.
على الرغم من أن Onmousedown ليس حدثًا خاصًا للسحب والإفلات ، إلا أن بداية السحب في الوضع اليدوي موجود في هذا
تم تنفيذها أثناء عملية معالجة الأحداث.
9.1.3 طريقة السحب والإفلات
هناك ثلاث طرق لسحب وإسقاط:
● BegindRag: ابدأ السحب في الوضع اليدوي
● enddrag:
إنهاء السحب
● السحب: يحدد ما إذا كان يتم سحب التحكم
يتم استخدام جميع الطرق الثلاثة بواسطة التحكم في المصدر.
عندما يتم ضبط DragMode على Dmmanual ، يجب أن يتصل السحب بطريقة BegindRag الخاصة بالتحكم للبدء.
Begindrag لديه معلمة منطقية فورية. إذا كانت معلمة الإدخال صحيحة ، فقم بالسحب على الفور ،
تغيير إلى إعدادات DragCursor. إذا كانت معلمة الإدخال خاطئة ، حتى يقوم المستخدم بتحريك المؤشر بمسافة معينة
(5 بكسل) قبل تغيير المؤشر والبدء في السحب. هذا يسمح للسيطرة بقبول حدث onclick دون البدء
اسحب العملية.
تعمل طريقة enddrag على إحباط حالة السحب للكائن. لديها انخفاض معلمة منطقية. إذا تم تعيين إسقاط
صحيح ، يتم إسقاط الكائن المجرى في الموضع الحالي (ما إذا كان يمكن قبوله بواسطة عنصر التحكم الهدف) ؛
إذا كان خطأ ، يتم إلغاء السحب في مكانه.
يوضح البرنامج التالي أنه يتم إلغاء السحب عند السحب إلى لوحة تحكم.
الإجراء tform1.panel1dragover (المرسل ، المصدر: tobject ؛ x ، y: integer ؛
الدولة: Tdragstate ؛
يبدأ
قبول: = خطأ ؛
إذا (المصدر هو tlabel) و (الحالة = dsdragenter) ثم
(المصدر مثل tlabel) .eddrag (false) ؛
نهاية؛
تحدد طريقة الشحنة ما إذا كان يتم سحب التحكم. في المثال التالي ، عندما يسحب المستخدم خانة اختيار مختلفة
عندما تتغير النافذة إلى لون مختلف.
الإجراء tform1.FormActivate (المرسل: tobject) ؛
يبدأ
checkbox1.dragmode: = dmautomatic ؛
checkbox2.dragmode: = dmautomatic ؛
checkbox3.dragmode: = dmautomatic ؛
نهاية؛
الإجراء tform1.formdragover (المرسل ، المصدر: tobject ؛ x ، y: integer ؛
الدولة: Tdragstate ؛
يبدأ
إذا كان checkbox1.dragging ثم
اللون: = claqua ؛
إذا كان checkbox2.dragging ثم
اللون: = clyellow ؛
إذا مربع الاختيار
اللون: = cllime ؛
نهاية؛