تحريك وتغيير حجم عناصر التحكم في وقت التشغيل

click fraud protection

فيما يلي كيفية تمكين سحب وتغيير عناصر التحكم (في نموذج دلفي) باستخدام الماوس ، أثناء تشغيل التطبيق.

محرر النماذج في وقت التشغيل

بمجرد وضع عنصر تحكم (مكون مرئي) في النموذج ، يمكنك ضبط موضعه وحجمه وخصائص وقت التصميم الأخرى. هناك حالات ، على الرغم من ذلك ، عندما يتعين عليك السماح لمستخدم التطبيق بإعادة ضبط عناصر التحكم في النموذج وتغيير حجمها ، في وقت التشغيل.

لتمكين حركة المستخدم وقت التشغيل وتغيير حجم عناصر التحكم في نموذج باستخدام الماوس ، ثلاثة الأحداث ذات الصلة بالماوس تحتاج إلى معالجة خاصة: OnMouseDown و OnMouseMove و OnMouseUp.

من الناحية النظرية ، لنفترض أنك تريد تمكين المستخدم من تحريك (وتغيير حجم) عنصر تحكم زر ، باستخدام الماوس ، في وقت التشغيل. أولاً ، تتعامل مع حدث OnMouseDown لتمكين المستخدم من "انتزاع" الزر. بعد ذلك ، يجب أن يقوم حدث OnMouseMove بتغيير موضع (نقل ، سحب) الزر. أخيرًا ، يجب أن ينهي OnMouseUp عملية النقل.

سحب وتغيير حجم عناصر التحكم في الممارسة

أولاً ، أسقط عدة عناصر تحكم في نموذج. لديك CheckBox لتمكين أو تعطيل عناصر التحكم في تحريك وتغيير الحجم في وقت التشغيل.

بعد ذلك ، حدد ثلاثة إجراءات (في

instagram viewer
واجهه المستخدم مقطع من إعلان النموذج) الذي سيتعامل مع أحداث الماوس كما هو موضح أعلاه:

اكتب
TForm1 = صف دراسي(TForm)... إجراء ControlMouseDown (المرسل: TObject؛ زر: TMouseButton ؛ التحول: TShiftState ؛ X ، Y: عدد صحيح) ؛ إجراء ControlMouseMove (المرسل: TObject؛ التحول: TShiftState ؛ X ، Y: عدد صحيح) ؛ إجراء ControlMouseUp (المرسل: TObject؛ زر: TMouseButton ؛ التحول: TShiftState ؛ X ، Y: عدد صحيح) ؛ نشر
inReposition: منطقي. oldPos: TPoint ؛ 

ملاحظة: مطلوب متغيرين على مستوى النموذج لتحديد ما إذا كانت حركة التحكم تحدث (فيالوضع) وتخزين السيطرة على الموقف القديم (oldPos).

في حدث OnLoad الخاص بالنموذج ، قم بتعيين إجراءات معالجة أحداث الماوس للأحداث المقابلة (لعناصر التحكم التي تريد أن تكون قابلة للسحب / تغيير الحجم):

إجراء TForm1.FormCreate (المرسل: TObject) ؛ ابدأ
Button1.OnMouseDown: = ControlMouseDown؛ Button1.OnMouseMove: = ControlMouseMove؛ Button1.OnMouseUp: = ControlMouseUp؛ Edit1.OnMouseDown: = ControlMouseDown؛ Edit1.OnMouseMove: = ControlMouseMove؛ Edit1.OnMouseUp: = ControlMouseUp؛ Panel1.OnMouseDown: = ControlMouseDown؛ Panel1.OnMouseMove: = ControlMouseMove؛ Panel1.OnMouseUp: = ControlMouseUp؛ Button2.OnMouseDown: = ControlMouseDown؛ Button2.OnMouseMove: = ControlMouseMove ؛ Button2.OnMouseUp: = ControlMouseUp ، النهاية; (* FormCreate *)

ملاحظة: يتيح الكود أعلاه إعادة تشغيل Button1 و Edit1 و Panel1 و Button2 في وقت التشغيل.

أخيرًا ، إليك الرمز السحري:

إجراءTForm1.ControlMouseDown ( المرسل: الهدف ؛ زر: TMouseButton ؛ التحول: TShiftState ؛ X ، Y: عدد صحيح) ؛ابدأإذا (chkPositionRunTime. التحقق) و
(مرسل يكون TWinControl) ثمابدأ
inReposition: = صحيح ؛ SetCapture (TWinControl (المرسل).) GetCursorPos (oldPos) ؛ النهاية; النهاية; (* ControlMouseDown *)

كونترولموسداون باختصار: بمجرد أن يضغط المستخدم على زر الماوس فوق عنصر تحكم ، إذا تم تمكين إعادة تعيين وقت التشغيل (مربع الاختيار chkPositionRunTime يتم التحقق منه) والتحكم الذي تلقى الماوس لأسفل حتى مشتق من TWinControl ، ضع علامة على أن إعادة ضبط التحكم تحدث (inReposition: = True) وتأكد من التقاط جميع عمليات معالجة الماوس لعنصر التحكم - لمنع حدوث أحداث "النقر" الافتراضية معالجتها.

إجراءTForm1.ControlMouseMove ( المرسل: الهدف ؛ التحول: TShiftState ؛ X ، Y: عدد صحيح) ؛مقدار ثابت
minWidth = 20 ؛ minHeight = 20 ؛ فار
newPos: TPoint؛ frmPoint: TPoint؛ ابدأإذا فيالوضع ثمابدأمع TWinControl (المرسل) فعلابدأ
GetCursorPos (newPos) ؛ إذا ssShift في تحول ثمابدأ//resize
شاشة. المؤشر: = crSizeNWSE ؛ frmPoint: = ScreenToClient (الماوس. CursorPos) ؛ إذا frmPoint. X> minWidth ثم
العرض: = frmPoint. X ؛ إذا frmPoint. Y> minHeight ثم
الارتفاع: = frmPoint. Y ؛ النهايةآخر//moveابدأ
شاشة. المؤشر: = crSize ؛ اليسار: = Left - oldPos. X + newPos. X ؛ الأعلى: = Top - oldPos. Y + newPos. Y ؛ oldPos: = newPos ؛ النهاية; النهاية; النهاية; النهاية; (* ControlMouseMove *)

ControlMouseMove باختصار: قم بتغيير مؤشر الشاشة ليعكس العملية: إذا تم الضغط على مفتاح Shift يسمح بتغيير حجم التحكم ، أو ببساطة قم بنقل عنصر التحكم إلى موضع جديد (حيث يذهب الماوس). ملحوظة: minWidth و minHeight توفر الثوابت نوعًا من قيود الحجم (الحد الأدنى لعرض وارتفاع العرض).

عند تحرير زر الماوس ، ينتهي السحب أو تغيير الحجم:

إجراءTForm1.ControlMouseUp ( المرسل: الهدف ؛ زر: TMouseButton ؛ التحول: TShiftState ؛ X ، Y: عدد صحيح) ؛ابدأإذا فيالوضع ثمابدأ
شاشة. المؤشر: = crDefault ؛ الإصدار inReposition: = خطأ ؛ النهاية; النهاية; (* ControlMouseUp *)

ControlMouseUp باختصار: عندما ينتهي المستخدم من تحريك (أو تغيير حجم عنصر التحكم) ، قم بتحرير التقاط الماوس (لتمكين معالجة النقرات الافتراضية) ووضع علامة على انتهاء إعادة الوضع.

وهذا ما يفعله! قم بتنزيل نموذج التطبيق وحاول بنفسك.

ملاحظة: هناك طريقة أخرى لنقل عناصر التحكم في وقت التشغيل وهي استخدام دلفي اسحب واسقط الخصائص والأساليب ذات الصلة (DragMode ، OnDragDrop ، DragOver ، BeginDrag ، وما إلى ذلك). يمكن استخدام السحب والإسقاط للسماح للمستخدمين بسحب العناصر من عنصر تحكم واحد - مثل مربع قائمة أو طريقة عرض شجرة - إلى عنصر تحكم آخر.

كيف تتذكر موضع التحكم وحجمه؟

إذا سمحت للمستخدم بنقل عناصر التحكم بالنموذج وتغيير حجمها ، يجب عليك التأكد من أن موضع التحكم بطريقة أو بأخرى يتم حفظها عند إغلاق النموذج واستعادة موضع كل عنصر تحكم عند إنشاء / تحميل النموذج. فيما يلي كيفية تخزين خصائص Left و Top و Width و Height لكل عنصر تحكم في نموذج في ملف INI ملف.

ماذا عن مقابض 8 الحجم؟

عندما تسمح للمستخدم بتحريك وتغيير حجم عناصر التحكم في نموذج دلفي ، في وقت التشغيل باستخدام الماوس ، إلى تحاكي تمامًا بيئة وقت التصميم ، يجب عليك إضافة ثمانية مقابض حجم إلى عنصر التحكم الموجود تغيير الحجم.

instagram story viewer