السلام عليكم و رحمة الله بركاته
اثناء تصفحي لأحد المنتديات اليمينة التابعة للكلية التي تخرجت منها
لفت انتباهي الموضوع التالي : (http://www.ecstudents.com/forum/viewtopic.php?f=27&t=5008)
فقد ذكرني بكوني قد احتجت في مرة سابقة قديما شيئا ممثالا وهو تبادل رسائل بين برنامجين في نفس الجهاز ..
وطبعا هي مسئلة ليست صعبة خاصة و اننا يمكننا القيام بالكثير من الطرق كالريجستري او عن طريق ملف نصي او
عن طريق برمجة السوكت (Winsock سابقا) و و و ..
ولانني اكره الخوض في تفاصيل جانبية اثناء شروعي ببناء برنامج معين ..ارتئيت انه سيكون من المفيد بناء فئة
بسيطة جاهزة للإستخدام لاحقا ...
فكرتها الاعتماد على رسائل نصية بين نوافذ البرنامجين .. بإستخدام SendMessage و الرسالة WM_COPYDATA ...
بحيث يكون إستخدامها سهل ومرن ..
اسم الفئة rtaWindowsMessage
تحتي على دالة وحيدة هي Send و المستخدمة في ارسال اي رسالة إعتمادة اما على عنوان النافذة الهذف او رقمها
Handle و بالتالي فيمكن إستخدامها بالشكل التالي :
Dim msg AS New rtaWindowsMessage(Me)
msg.Send("Program Two","How Are You?")وبهذا سيتم ارسال رسالة الى البرنامج الذي عنوانه هو "Program Two" و الرسالة هي "How Are You?" ... كما
تحتوي الفئة على ثلاث خواص هي :
Parent
وهي الفورم الحالية التي يتم ربط الفئة بها عن إنشائها كما يظهر في السطر الاول (Me) في الكود السابق
TargetWindowHandle
وفيه يتم تعيين عنوان او الـ Handle التابع للفورم الذي نريد الارسال لها
TargetWindowTitle
ويستخدم لتعيين العنوان الخاص بالفورم الهذف
بكلمات اخرى اذا استخدمت ايا من الخاصيتين الاخيرتين TargetWindowTitle او TargetWindowHandle فأنه يمكنك
استخدام الامر Send مباشرة كالتالي:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load msg.TargetWindowTitle = "Program Two" End Sub
وبهذا يمكن ان ترسل اي رسالة بالشكل التالي :
msg.Send("Welcome")وذلك للسهولة
اخيرا و ليس آخرا يوجد حدث مضاف الى الفئة بإسم MessageArrived ويفيد بأن البرنامج قام بإستلام رسالة خارجية يمكنك ان تعرضها مثلا في MsgBox بالشكل التالي :
Private WithEvents msg as New rtaWindowsMessage(Me) Private Sub msg_MessageArrived(ByVal Sender As Object, ByVal msg As String) Handles msg.MessageArrived MsgBox(msg) End Sub
لاحظ انني استخدمت الكلمة WithEvents في التعريف لانني اريد استخدام احداث الفئة.
على العموم مرفق مع الموضوع برنامج بسيط يوضح استخدامها ... متضمنا الكود الكامل للفئة .. مع التركيز على كوني اكملت بناء الفئة من دقائق مضت ولم اختبرها جيدا فلربما احتوت على اخطاء معينة سنقوم بتعديها سويا بإذن الله تعالى
السلام عليكم و رحمة الله و بركاته