في بعض الأحيان، نحتاج إلى استخدام VB لتطوير برنامج معالجة رسم بيانات الاختبار بسرعة. إن تغيير مؤشر الماوس في عنصر التحكم في الرسم إلى شكل المؤشر المتقاطع الكبير المستخدم في برنامج AutoCAD سيحقق نتائج أفضل من مؤشر السهم العادي. فكيف يمكننا تنفيذ مثل هذا المؤشر المتقاطع الكبير؟
----أولاً، دعونا نوضح التأثير الذي نريد تحقيقه إذا قمنا برسم عنصر التحكم بالصورة، فعندما يتحرك الماوس إلى عنصر التحكم هذا، يتغير مؤشر الماوس على الفور إلى شكل متقاطع كبير، ويتحول الخط الأفقي إلى شكل. يتغير المؤشر من عنصر التحكم من الحد الأيسر إلى الحد الأيمن، وينتقل الخط العمودي من الحد العلوي إلى الحد السفلي لعنصر التحكم، أي أن المؤشر المتقاطع الكبير يقسم عنصر التحكم في الرسم إلى أربعة أرباع. عندما يتحرك الماوس خارج عنصر التحكم، يعود المؤشر إلى شكله الأصلي.
---- لتنفيذ مثل هذا المؤشر، علينا أن نفعل ذلك بأنفسنا عن طريق رسم الخطوط. إذا كان الماوس في عنصر التحكم في الرسم، فقم أولاً برسم الخطوط الأفقية والعمودية للمؤشر في الموضع الحالي للماوس، وعندما يتحرك موضع الماوس، قم أولاً بمسح الخطوط الأفقية والعمودية الأصلية للمؤشر، ثم ارسم الخط الأفقي خطوط المؤشر في الموضع الجديد والخطوط العمودية، فيجب علينا الرد على حدث MouseMove الخاص بعنصر التحكم في الرسم. بالطبع، بغض النظر عن المحتوى الموجود في عنصر التحكم في الرسم، لا يمكننا تدمير المحتوى الأصلي عندما نمسح خط المؤشر ونعيد رسم خط المؤشر، لذلك نحتاج إلى ضبط DrawMode لعنصر التحكم في الرسم على vbXorPen (وضع XOR). ارسم الخط الأفقي للمؤشر عند إضافة خطوط رأسية، استخدم XOR للجمع بين الخطوط الأفقية والخطوط الرأسية. يتم ضبط لون البكسل على قيمة XOR للون المؤشر ولون البكسل الأصلي، ومن ثم يتم رسم الخطوط الرأسية والأفقية في نفس الموضع باستخدام طريقة XOR، ويتم رسم البكسلات الموجودة على الخطوط الأفقية والرأسية مرة أخرى. ستؤدي عملية XOR باستخدام لون المؤشر إلى مسح الخطوط الأفقية والعمودية للمؤشر، واستعادة المحتوى الأصلي في عنصر التحكم في الرسم.
----علينا أيضًا التأكد من أنه عندما ينتقل الماوس إلى عنصر التحكم في الرسم، يختفي مؤشر الماوس العادي ويظهر فقط المؤشر المتقاطع الكبير المرسوم، لذلك يجب أيضًا تعيين خاصية MousePointer لعنصر التحكم في الرسم على vbCuntom محدد من قبل المستخدم. بعد تعيين خاصية MousePointer لعنصر التحكم في الرسم على vbCustom، يجب تحميل الرسومات المقابلة المعرفة من قبل المستخدم في خاصية MouseIcon الخاصة بها، لأننا نأمل أن يحتوي عنصر التحكم في الرسم على المؤشر الذي نرسمه فقط وليس أي مؤشرات أخرى، لذا يجب أن يكون فارغًا (. شفاف) رسومات المؤشر. يمكنك العثور على ملف المؤشر، وتحريره من خلال أي محرر موارد، وملء رسم المؤشر بالكامل بالشفافية، وحفظه باسم NoIcon.cur حسب حاجتنا.
----من خلال الإعدادات والعمليات الرئيسية المذكورة أعلاه، يمكننا تحقيق المؤشر المتقاطع الكبير. باستخدام طريقة XOR للرسم، يمكننا أيضًا تحقيق تأثير "الشريط المطاطي" الذي يتم رؤيته بشكل شائع في برامج الرسم العامة، أي بعد استخدام الماوس لتحديد نقطة، قم بسحب الماوس ديناميكيًا لتحديد نقطة أخرى أثناء عملية الرسم ديناميكيًا بسحب الماوس، فإن النقطة التي سيتم رسمها هي أن الرسومات تتغير أيضًا ديناميكيًا وفقًا لذلك.
---- نستخدم أدناه مثالاً لتطبيق المؤشر المتقاطع الكبير بشكل كامل في التحكم في الرسم، ونوضح أيضًا كيفية استخدام تأثير "الشريط المطاطي" لرسم مستطيل:
----قم بإنشاء مشروع EXE قياسي جديد في VB، وأضف عنصر تحكم بالصورة إلى Form1، وقم بتعيين اسمه إلى PicDraw. يمكنك تحميل ملف صورة. يغطي حجم PicDraw وحجم الصورة فيه معظم ملفات الصورة النموذج 1 يكفي رمز التنفيذ هو كما يلي. يعمل هذا البرنامج في VB5.0.
خيار صريح
PRivateOld_XAsSingle
PrivateOld_YAsSingle
PrivateisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
PrivatePenColorAsLong
PrivateCrossColorAsLong
PrivateSubForm_Load()
CrossColor=QBColor(8)
لون القلم=QBColor(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=LoadPicture
(App.Path&"/no.cur")
picDraw.MousePointer=vbCustom
isMouseDown=False
Box_X0=Box_X1=Box_Y0=Box_Y1=0
EndSub
PrivateSubpicDraw_MouseDown
(زر كعدد صحيح،
ShiftAsInteger،XAsSingle،YAsSingle)
IfisMouseDown=TrueThen
'لقد تم تحديد نقطة مسبقًا باستخدام الماوس
Box_X1=س
Box_Y1=ص
isMouseDown=False
picDraw.DrawMode=vbCopyPen
picDraw.Line(Box_X0,Box_Y0)-
(Box_X1، Box_Y1)،
لون القلم، ب
picDraw.DrawMode=vbXorPen
'ارسم المؤشر
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
Old_X=X
Old_Y=Y
آخر
'يحدد الرأس الأول للمستطيل، ثم يمسح المؤشر
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
Box_X0=X
Box_Y0=ص
isMouseDown=True
EndIf
EndSub
PrivateSubpicDraw_MouseMove(ButtonAsInteger،
ShiftAsInteger،XAsSingle،YAsSingle)
IfisMouseDown=TrueThen
"اسحب الماوس لتحديد قمة أخرى للمستطيل،
عند هذه النقطة، امسح المستطيل السابق وارسم مستطيلاً جديدًا
picDraw.Line(Box_X0,Box_Y0)-(Old_X,Old_Y),
لون القلم، ب
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
آخر
"امسح خط المؤشر القديم."
picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
CrossColor
picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
CrossColor
"ارسم خط مؤشر جديد."
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
EndIf
Old_X=X
Old_Y=Y
EndSub->