هل فكر أحدكم أن يصمم كود ليجعل في نافذة برنامجه خاصية Nudge متل تلك الموجودة في المسنجر ولو للمتعة ؟
اليكم اذا الطريقة الجد جد بسيطة
دعوني أولا أشرح الفكرة العامة للعملية ثم نخوض في الكود
هذه الفكرة تقوم على تحريك الفورم فوق و أعلى و يسار و يمين لكن مع التوقف لمدة معينة بين كل تحريك يعني عند تحريك الفورم لليمين نعمل Sleep لل Sub لمدة معينة ثم نقوم بتحريكها مرة اخرى يسارا و هكذا ... سهلة العملية أليس كذلك. اذا دعونا نبدأ في الكود لأني أملا كثيرا من الكلام النظري :D
أولا نقوم باستدعاء فضاء الأسماء (namespace) الذي سنحتاجه في كودنا
Imports System.Threading
و نستدعي أيضا API لتقوم بتشغيل صوت وقت تنفيذ ال Nudge حتى يبدو الأمر حقيقيا :lol:
Private Declare Function sndPlaySoundA& Lib "winmm.dll" (ByVal lpszName As String, ByVal hModule As Int32) Private Const SND_ASYNC As Int32 = &H1
و اذا كنت قد عملت بالفيجوال 6 فلن تخفى عليك هذه الدالة التي تشغل ملف صوتي دون تشغيل أي برنامج ...
ثم بطبيعة الحال سنقوم بانشاء Sub جديد نسميه Nudge و هذا ال Sub هو الذي سنقوم بكتابة الكود فيه
الكود سيكون كالتالي :
Private Sub Nudge()
sndPlaySoundA("C:\Program Files\MSN Messenger\nudge.wav", SND_ASYNC)
For i = 0 To 4
Me.Top = Me.DesktopLocation.Y - 6
Thread.Sleep(30)
Me.Top = Me.DesktopLocation.Y + 6
Thread.Sleep(30)
Me.Left = Me.DesktopLocation.X + 6
Thread.Sleep(30)
Me.Left = Me.DesktopLocation.X - 6
Thread.Sleep(30)
Nextلنرى الآن ماذا يحدث في هذا الكود أولا نستدعي الدالة sndPlaySoundA و نمرر لها اسم الملف الصوتي الذي يجب عليها تشغيله و كما تلاحظون فهو الملف الخاص بالمسنجر نفسه يعني الصوت الذي يحدثه عند تنفيذ Nudge ;)
بعد ذلك ندخل في حلقة تكرارية من 0 الى 4 ... ماذا يحدث في هذه الحلقة يا ترى ؟؟؟؟ :o
نلاحظ في السطر الأول أنه يتم تغيير Top النافذة استناذا الى موقع النافذة على الشاشة الذي نحصل عليه عن طريق الدالة DesktopLocation ثم بعد ذلك نقوم بجعل ال Thread أو نقوم بعمل Freeze لل Sub لمدة 30 Milliseconds ثم نواصل العملية التي هي نفس العملية السابقة فنقوم بارجاع النافذة لمكانها و بعد ذلك نغير موضعها افقيا و هكذا
و من أجل الحصول على نتائج جيدة يستحسن اعادة العملية مرتين ليكون الكود النهائي لل Sub Nudge هو التالي
Private Sub Nudge()
sndPlaySoundA("C:\Program Files\MSN Messenger\nudge.wav", SND_ASYNC)
For i = 0 To 4
Me.Top = Me.DesktopLocation.Y - 6
Thread.Sleep(30)
Me.Top = Me.DesktopLocation.Y + 6
Thread.Sleep(30)
Me.Left = Me.DesktopLocation.X + 6
Thread.Sleep(30)
Me.Left = Me.DesktopLocation.X - 6
Thread.Sleep(30)
Me.Top = Me.DesktopLocation.Y - 6
Thread.Sleep(30)
Me.Top = Me.DesktopLocation.Y + 6
Thread.Sleep(30)
Me.Left = Me.DesktopLocation.X + 6
Thread.Sleep(30)
Me.Left = Me.DesktopLocation.X - 6
Thread.Sleep(30
Nextالآن سنكتب كود ال Button التي ستنفذ الأمر
و سيكون الكود هو : :)
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim new_Thread As New Thread(AddressOf Nudge) new_Thread.Priority = ThreadPriority.Lowest new_Thread.Start() End Sub
تلاحظون أننا نفذنا ال Sub ك Thread جديد و منفصل حتى لا يحدث مشكل ساعة التنفيذ بعد ذلك حددنا ال Priority لل Thread على Lowest و اخيرا عملنا Start لل Thread
و هذا كل ما في الأمر
اتمنى أن يكون شرحي واضحا و أنا لن أضع الكود جاهز لأني أتمنى أن تفهمو الطريقة و تعملوها بأنفسكم دون اللجوء للمقص :D
و السلام عليكم و رحمة الله و بركاته



