![]() |
|
Capture Mouse Position within Control Coordinates - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : Capture Mouse Position within Control Coordinates (/showthread.php?tid=14093) |
Capture Mouse Position within Control Coordinates - silverlight - 11-12-15 السلام عليكم ورجمة الله و بركاته إيجاد مكان الماوس عي الكونترول في أي وقت أمر هام جدا و أهميته تكمن في أننا تستطيع إستخدامه في كثير من الحلول البرمجية خاصة في ألعاب الكمبيوتر و تحريك الأشياء المرسومة مثل الأشكال الهندسية المختلفة و في تحريك الصور او تحريك اي شئ موجود داخل الكونترول أو حتي إيجاد أي شئ علي الكونترول في أي وقت خاصة وقت التشغيل وأفضل مثال عملي للفكرة التي اريد كتابتها هو Google Maps أغلب المبرمجين يعتمدون علي طرق و دوال موجودة بالفعل في الكونترول مثل : - Control.PointToClient Method Control.MousePosition Cursor.Position و لأني مهتم جدا بالجرافكس و Animation وجدت انني دائما ما يجب علي أن أتعامل مع أجداث الماوس المختلفة حتي أستطيع تحديد مكان الماوس علي الكونترول و لكي أوفر علي نفسي مشقة تكرار كتابة هذه الأكواد وجدت انني أحتاج الي تطوير الكونترول الخاص بشركة مايكروسوفت و إضافة بعض الصفات الإضافية له و التي أستطيع بإستخدامها تحديد مكان الماوس داخل حدود الكونترول في أي وقت وكان شرطا لدي لتنفيذ هذه الفكرة هو أن لا أستخدم الدوال والطرق الخاصة بشركة مايكروسوفت والمذكورة أعلاه الفكرة: لكي أقوم بتنفيذ الفكرة كنت في حاجة الي إطلاق حدث جديد EventHandler داخل أحداث الماوس المختلفة مثل MouseMove و مثل MouseDown بحيث يتم ربط عناصر هذا الحدث مع مكان الماوس وبالتالي استطيع أن أستفيد من هذا الحدث في استرجاع مكان الماوس داخل الكونترول في اي وقت. الكود : الكود الخاص بهذا EventHandler مع EventArgs الخاصة به موجود أدناه و هو بسيط جدا حيث أن عناصره عبارة عن نقطة Point PHP كود : Public Class MouseLocationChangedEventArgsPHP كود : Public Delegate Sub MouseLocationChangedEventHandler(sender As Object, e As MouseLocationChangedEventArgs) الأن يتبقي السؤال كيف يتم الربط بين الأكواد أعلاه و أي كونترول أخر؟ وللعلم فقط يمكن استخدام الأكواد اعلاه مع أي كونترول جديد يتم كتابته أو مع اي كونترول يتم توريثه من أي كونترول أخر و حتي يمكن إستخدامه مع الفورم وهنا سوف استخدم الأكواد أعلاه في يناء كونترول جديد و بسيط و علي المهتمين بالفكرة إستخدام نفس الأسلوب مع أي كونترول أخر. الفكرة العامة هنا هي عمل HitTest لمكان الماوس علي أن يتم عمل Clamp للنقطة التي سوف تستخدم لإيجاد مكان الماوس بحيث انها لا تخرج عن حدود الكونترول ومن ثم يتم تمرير هذا النقطة الي الحدث الموجود في الكود أعلاه من داخل أحداث الماوس الكونترول : PHP كود : Imports System.ComponentModelالأن لنقوم بعمل Build لهذا الكونترول ثم نضعه داخل الفورم ثم نقوم بإطلاق الحدث MouseLocationChangedEventArgs و الخاص بهذا الكونترول من داخل الفورم بحيث يكون الكود كالتالي والهدف هنا هو اختبار نجاح الفكرة التي نتحدث هنا PHP كود : Public Class Form1الأن لنقوم بعمل Run للفورم و لننظر إلي التكست الخاص بالفورم وخاصة عندما يكون الماوس داخل حدود الكونترول الجديد أتمني تكون الفكرة مفيدة لكم و في المرفقات ستجدون نسخة من الكود بنسخة الفيجوال استوديو 2012 و إن شاء الله وفي المشاركات اللاحقة سوف أوضح كيفية الإستفادة من الأكواد التي كتبناها أعلاه و كيفية استخدامها مع أشياء أخري مثل تحريك الرسومات او تحريك الكونترول أو ايجاد اي كونترول تقبلوا تحياتي |