الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف لي أن اعرف متى توقفت الفأرة عن الحركة

مغلق
بدأه samsor في 15 يونيو 2006 · 11 رد · 1,044 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ....

أريد في برنامجي عندما يترك المستخدم الجهاز فترة من الوقت أن تظهر شاشة الدخول لعدم العبث بالبرنامج من قبل شخص أخر...

الفكرة أنني أريد عندما تتوقف الماوس لفترة من الزمن يبدأ بحساب عدد الثواني ثم عن عدد معين تظهر شاشة الدخول..

ومشكلتي لاأعرف كيف أحدد توقف الماوس

هل من مساعدة؟؟

جزاكم الله خيرا

تم تعديل هذه المشاركة بواسطة الغملاسي في 19 يونيو 2006 في 00:15

#2

ولا رد؟

#4

انا استخدم VS2005

#5

أخي لما بدك تبدا مشروع جديد بتلاقي في مشروع خاص بشاشة التوقف

#6

السلام عليكم

أبحث عن الـ API وهو GetCursorPos Lib الذي كان يستخدم في الاصدارات السابقة من اللغات كــ VB 6 أو ما كان قبل .

اما في الـ VB.NET فقد استبدل بـ System.Window.Forms.Cursor.Position

لكن عملية التحقق من وقوف الفأرة هذا يحتاج إلى Delegate انت تقوم بإنشائه و يعمل بمثابة مؤشر Pointer على موقع الفأرة السيني و الصادي

أو ربما تسعفك هذه الطريقة التي كانت تستخدم في VB 6 إليك الوصلة التالية

بالتوفيق إن شاء الله.

في المثال يتضح المقال

#7

السلام عليكم ورحمة الله وبركاته

لقد توصلت لحل قد يكون بدائي ولكنه يفي بالغرض - على الأقل بالنسبة لي - وأحببت وضعه للفائدة

وشكرا لك أخي الغملاسي لأعطائي الفكرة

انظر الى البرنامج واجعل الماوس ثابتة لمدة 5 ثواني

Mouse.rar

#8

المشكلة التي وجدتها في الكود السابق هي أن لو كان المستخدم منشغل في الكتابة على الكيبورد فإن البرنامج لا يتأثر طبعا بهذا الحدث ويظهر شاشة التوقف بمجرد وقوف الماوس عن الحركة بالمدة التي حددتها

فهل أحدا منكم ممكن يساعدني بكيفية معرفة اذا ترك المستخدم الجهاز لمدة معينة ...

مشكورين

#9

نفس السؤال ... :( .. ابحث عنه ..............................

#10

السلام عليكم

لربما هنالك حيله نستطيع بها ولو بشكل نسبي أن نعرف متى توقفت الفأرة .

الطريقة أننا ندرج عنصر من نوع Timer يعمل بالثانية و ندرج عنصر اخر من نوع Timer يعمل بالثانيتين

ثم ننشئ مصفوفتين طولهما 1 اي صفر و واحد فقط.

الخانية الصفرية ستضم القيمة العائدة من الـ Timer 1

و الخانة الاحادية ستضم القيمة العائدة من الـ Timer2

ثم نختبر القيمة X0 هل تساوي X1 و هل Y0 هل تساوي Y1

فلو كانت X0 لا تساوي X1 فهذا يعني ان الفأرة تتحرك تحرك سيني

ولو كانت Y0 لا تساوي Y1 فهذا يعني ان الفأرة تتحرك تحرك صادي

لذلك الشرط لا بد ان نقول ان X0 يجب أن تساوي X1 و كذلك Y0 يجب أن تساوي Y1 حتى نقول ان الفأرة توقفت عن الحركة.

شاهد النصوص البرمجية التي تمكنك كذلك من معرفة هل الفارة داخل النموذج أو خارجة,

كذلك في النصوص البرمجية سنقوم بعملية تعرف بـ Recursion وهي تعني تنفيذ نفس المهمة حتى لا يتحقق شرطٌ ما.

في هذه المهمه سنقوم بإنشاء إجرائين الاول يقوم بعملية مراقبة الضغط على الزر Key down سواءً للنموذج أو اي عنصر فيه

و الاخر يراقب عملية تحرير الفأرة key up كذلك للنموذج أو اي عنصر يركن فيه. شاهد المثال المرفق.

#Region " Variables Declaration "

	'Array hold 2 elements of mouse X1 and mouse X2
	Private X(1) As Integer

	'Array hold 2 elements of mouse Y1 and mouse Y2
	Private Y(1) As Integer

#End Region

#Region " Loading form "

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Try
			DelegateAllControlsToKeyPressDownEvent(Me)
			DelegateAllControlsToKeyReleasedEvent(Me)
		Catch ex As Exception
			MsgBox(ex.Message)
		End Try
	End Sub

#End Region

#Region " Timer Ticks "

	Private Sub T1_Tick(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles timSecond1.Tick

		'Check the current mouse position. after 1 second. 
		X(0) = Windows.Forms.Cursor.Position.X
		Y(0) = Windows.Forms.Cursor.Position.Y

		x0.Text = "X0 position is: " & X(0).ToString
		y0.Text = "Y0 position is: " & Y(0).ToString

		MousePositionOnTheForm()

	End Sub

	Private Sub T2_Tick(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles timSecond2.Tick

		'Check the current mouse position. after 2 second. 
		X(1) = Windows.Forms.Cursor.Position.X
		Y(1) = Windows.Forms.Cursor.Position.Y

		x1.Text = "X1 position is: " & X(1).ToString
		y1.Text = "Y1 position is: " & Y(1).ToString

		'Compare the Postion x0 & x1 & y0 & y1
		If IntegerComparor(X(0), X(1)) = 0 And _
		IntegerComparor(Y(0), Y(1)) = 0 Then

			lblResult.Text = "Mouse is stopped "

		Else

			lblResult.Text = "Mouse is moving "

		End If

	End Sub

	Private Sub MousePositionOnTheForm()

		Dim T As Integer = Me.Top
		Dim B As Integer = Me.Bottom
		Dim L As Integer = Me.Left
		Dim R As Integer = (L + Me.Width)

		Dim XPos As Integer = Windows.Forms.Cursor.Position.X
		Dim YPos As Integer = Windows.Forms.Cursor.Position.Y

		If XPos < L OrElse XPos > R OrElse _
		YPos < T OrElse YPos > B Then

			lblMouseDetection.Text = "Detection Mouse is OutSide Client Area"

		Else

			lblMouseDetection.Text = "Detection Mouse is InSide Client Area"

		End If
	End Sub

#End Region

#Region " Integer Compartion function "

	Public Function IntegerComparor( _
	ByVal Int1 As Integer, _
	ByVal Int2 As Integer) As Integer

		Try
			Return StrComp(CStr(Int1), CStr(Int2), CompareMethod.Text)
		Catch ex As Exception
			MsgBox("خطأ أثناء المقارنة بين الارقام  ", ex.Message)
		End Try

	End Function

#End Region

#Region " Keys Down & Keys Up "

	Private Sub KeyPressDown(ByVal sender As Object, _
	ByVal e As System.Windows.Forms.KeyEventArgs)
		Me.lblKeysEvents.Text = " Key is Pressed Down "
	End Sub


	Private Sub DelegateAllControlsToKeyPressDownEvent(ByVal control As Control)
		AddHandler control.KeyDown, AddressOf KeyPressDown
		If Me.HasChildren Then
			' Recursively call this method for each child control.
			Dim childControl As Control
			For Each childControl In control.Controls
				DelegateAllControlsToKeyPressDownEvent(childControl)
			Next childControl
		End If
	End Sub


	Private Sub KeyReleased(ByVal sender As Object, _
	   ByVal e As System.Windows.Forms.KeyEventArgs)
		Me.lblKeysEvents.Text = String.Empty
	End Sub

	Private Sub DelegateAllControlsToKeyReleasedEvent(ByVal control As Control)
		AddHandler control.KeyUp, AddressOf KeyReleased
		If Me.HasChildren Then
			' Recursively call this method for each child control.
			Dim childControl As Control
			For Each childControl In control.Controls
				DelegateAllControlsToKeyReleasedEvent(childControl)
			Next childControl
		End If
	End Sub

#End Region

MouserDetection.rar

تم تعديل هذه المشاركة بواسطة الغملاسي في 24 يونيو 2006 في 17:09

في المثال يتضح المقال

#11

السلام عليكم . . .

أشكرك أخي الغملاسي على مشاركتك . . .

لقد وجدت حلا مناسبا لي وقد استفد من موضوع الأخ MohamedElSadany برنامج لإصدار صوت أثناء الكتابة

وأحب أن أشكره جزيل الشكر فقد استفدت من موضوعه استفادة كبيرة ...

فما رأيك أخي الغملاسي في الحل؟؟ :)

Mouse.rar

#12

مشروع الاخ محمد ممتاز جداً .

وهو جزء من الحل للطريقة التي تبحث عنها.

وفقكما الله لما فيه الخير.

في المثال يتضح المقال

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…