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

مشكلة ظهر فورم في الزوايا الشاشة الاربع

بدأه mdf في 31 يوليو 2010 · 11 رد · 699 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

استخدمت شرح موجود في المنتدى في طريقة اخراج الفورم في الزوايا الاربع .....لكن حاولت ان افهم الطريقه للتطبيقها لكن لم افلح........في المرفقات فورمين الثاني عن الموجود في المنتدى والفورم 2 من موقع اخرى.....اريد احدى الفورمين استطيع تطبيقه في الزوايا اربع

WindowsApplication8.rar

#3

هل من توضيح للكود

#4

هذا الشرح الذي قلت عنه

محمد رضى كتب:

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

كيف نظهر نافذة بالقرب من شريط المهام مهما كان مكانه؟

post-207152-1252937763_thumb.jpg

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

أولا سنحتاج كما المعتاد لبعض التعاريف...

	  ' اسم فئة نافذة شريط المهام
	   Private TrayWndClassName As String = "Shell_TrayWnd"
	   ' المساحة الخالية بين نافذة المهام و النافذة
	   Private WndPosBlank As Integer = 10

الأول يمثل اسم فئة نافذة شريط المهام. هذا الإسم سنمرره لدالة WinAPI FindWindow للوصول إلى نافذة شريط المهام. الثاني يمثل المساحة الخالية التي سنتركها بين نافذة شريط المهام و نافذة برنامجنا.

في إطار التعريفات كذلك, سنحتاج لتعريف دوال WinAPI التي سنحتاج إليها للوصول إلى نافذة شريط المهام و مكانه :

	  ' الحصول على النافذة من خلال اسم فئتها
	   <DllImport("user32.dll")> _
	   Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
	   End Function

	   ' الوصول إلى المربع الذي تحتله نافذة
	   <DllImport("user32.dll")> _
	   Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As Rectangle) As Boolean
	   End Function

لحساب مكان نافذة نريد إظهارها بالقرب من نافذة شريط المهام, نحتاج أولا للوصول إلى نافذة شريط المهام و ذلك عبر المناداة على الدالة FindWindow و نمرر لها اسم فئة نافذة شريط المهام :

		  ' الحصول على النافذة من خلال اسم فئتها
		   Dim hwnd As IntPtr = FindWindow(TrayWndClassName, Nothing)

بعد ذلك سنحتاج إلى الحصول على المربع الذي يحتله شريط المهام على الشاشة :

		  ' الوصول إلى المربع الذي تحتله نافذة
		   Dim rc As Rectangle
		   GetWindowRect(hwnd, rc)

بعد ذلك سنحتاج للوصول إلى الشاشة التي يظهر عليها شريط المهام :

		  ' الوصول إلى الشاشة التي عليها مربع المهام
		   Dim scr As Screen = Screen.FromHandle(hwnd)

الآن, نكون قد حصلنا على المربع الذي يحتله شريط المهام و على الشاشة التي يظهر عليها. لا يبقى لنا سوى حساب المكان الذي نريد إظهار نافذتنا عليه. شريط المهام يمكن أن يحتل أربع أماكن على الأطراف الأربعة للشاشة. لكل واحد منها حسابه الخاص. لن أتطرق لموضوع حساب مكان النافذة و لكن هذا كود بسيط للتجربة :

		  ' تحديد مكان النافذة
		   '' أعلى أو أسفل الشاشة
		   If rc.Width = scr.Bounds.Width Then
			   Left = rc.Width - Width - WndPosBlank
			   If rc.Top <= 0 Then
				   Top = rc.Height + WndPosBlank
				   If rc.Height = scr.Bounds.Height Then
					   Top = 0 + WndPosBlank
					   Left = rc.Left - Width - WndPosBlank
				   End If
			   Else
				   Top = rc.Top - Height - WndPosBlank
			   End If
			   '' يمين أو يسار الشاشة
		   ElseIf rc.Height = scr.Bounds.Height Then
			   Top = WndPosBlank
			   If rc.Left <= 0 Then
				   Left = rc.Width + WndPosBlank
			   Else
				   Left = rc.Left - Width - WndPosBlank
			   End If
		   End If

في الملف المرفق تجدون مشروعا صغيرا يشغل الكود الذي تكلمنا عليه الآن ليظهر النافذة بالقرب من شريط المهام عند التشغيل.

traypos.rar

تحياتي...

#5

حدد بالضبط أي مقطع من الكود تجد فيه صعوبة أو ضع أسئلة محددة حول الموضوع,,,

#6
محمد رضى كتب:

حدد بالضبط أي مقطع من الكود تجد فيه صعوبة أو ضع أسئلة محددة حول الموضوع,,,

أهلاً وسهلاً بسيد محمد انت فين مش شيفك هذا الايام...منور

المقطع هو

ان مش عارف الافترضيه يمين الشاشة ان عاوز يسار الشاشة اعلى شاشة يمين يسار مش عارف الكود اصلاً

جالس احول فيه يومين و لا فائده

' تحديد مكان النافذة 
                   '' أعلى أو أسفل الشاشة 
                   If rc.Width = scr.Bounds.Width Then 
                           Left = rc.Width - Width - WndPosBlank 
                           If rc.Top <= 0 Then 
                                   Top = rc.Height + WndPosBlank 
                                   If rc.Height = scr.Bounds.Height Then 
                                           Top = 0 + WndPosBlank 
                                           Left = rc.Left - Width - WndPosBlank 
                                   End If 
                           Else 
                                   Top = rc.Top - Height - WndPosBlank 
                           End If 
                           '' يمين أو يسار الشاشة 
                   ElseIf rc.Height = scr.Bounds.Height Then 
                           Top = WndPosBlank 
                           If rc.Left <= 0 Then 
                                   Left = rc.Width + WndPosBlank 
                           Else 
                                   Left = rc.Left - Width - WndPosBlank 
                           End If 
                   End If
#7

الكود المرفق يقوم بتحديد مكان النافذة إلى أقرب نقطة من الأيقونات التي تظهر على شريط المهام. يعني أنك في أي مكان حولت إليه شريط المهام يمين, يسار, أعلى أو أسفل الشاشة, الكود سيقوم بتحديد مكان النافذة بالقرب من Tray icons.

WndPosBlank تحدد فيها عدد البيكسلات التي يجب إبعاد النافذة عن شريط المهام.

اقتباس
أهلاً وسهلاً بسيد محمد انت فين مش شيفك هذا الايام...منور

بارك الله فيك أخي الكريم:) اتمنى من الله العلي القدير أياما أحسن من هاته التي تمر علي حاليا حتى يعود النشاط لسابق عهده إن شاء الله...

تم تعديل هذه المشاركة بواسطة محمد رضى في 3 أغسطس 2010 في 15:02

#8
محمد رضى كتب:

الكود المرفق يقوم بتحديد مكان النافذة إلى أقرب نقطة من الأيقونات التي تظهر على شريط المهام. يعني أنك في أي مكان حولت إليه شريط المهام يمين, يسار, أعلى أو أسفل الشاشة, الكود سيقوم بتحديد مكان النافذة بالقرب من Tray icons.

WndPosBlank تحدد فيها عدد البيكسلات التي يجب إبعاد النافذة عن شريط المهام.

بارك الله فيك أخي الكريم:) اتمنى من الله العلي القدير أياما أحسن من هاته التي تمر علي حاليا حتى يعود النشاط لسابق عهده إن شاء الله...

الله يبارك فيك

لكن لم تفهم علي....... انا حاولت ان اجعل النافذه يسار الشاشة لم تنفع معي الطريقه وهناك اكودا لم افهمها في الكود

' تحديد مكان النافذة  
                   '' أعلى أو أسفل الشاشة  
                   If rc.Width = scr.Bounds.Width Then  
                           Left = rc.Width - Width - WndPosBlank  
                           If rc.Top <= 0 Then  
                                   Top = rc.Height + WndPosBlank  
                                   If rc.Height = scr.Bounds.Height Then  
                                           Top = 0 + WndPosBlank  
                                           Left = rc.Left - Width - WndPosBlank  
                                   End If  
                           Else  
                                   Top = rc.Top - Height - WndPosBlank  
                           End If  
                           '' يمين أو يسار الشاشة  
                   ElseIf rc.Height = scr.Bounds.Height Then  
                           Top = WndPosBlank  
                           If rc.Left <= 0 Then  
                                   Left = rc.Width + WndPosBlank  
                           Else  
                                   Left = rc.Left - Width - WndPosBlank  
                           End If  
                   End If

يعني الكود لم افهم ليه اساس استطيع اختيار اليسار والاعلى يمين و الاعلى يسار

تم تعديل هذه المشاركة بواسطة mdf في 3 أغسطس 2010 في 21:27

#9

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

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

#10
محمد رضى كتب:

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

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

اعرف ذالك وسبق ان جربته......لكن انا اقصد ان يخرج الفورم إلى الجهه اليسرى و جربته على جهاز اكس بي عربي وخرج امام قائمة استارت يمين ولم يخرج اعلى الساعة يسار

تم تعديل هذه المشاركة بواسطة mdf في 5 أغسطس 2010 في 01:19

#11

هل اتضح لك كلامي

#12
' تحديد مكان النافذة   
                   '' أعلى أو أسفل الشاشة   
                   If rc.Width = scr.Bounds.Width Then   
                           Left = rc.Width - Width - WndPosBlank   
                           If rc.Top <= 0 Then   
                                   Top = rc.Height + WndPosBlank   
                                   If rc.Height = scr.Bounds.Height Then   
                                           Top = 0 + WndPosBlank   
                                           Left = rc.Left - Width - WndPosBlank   
                                   End If   
                           Else   
                                   Top = rc.Top - Height - WndPosBlank   
                           End If   
                           '' يمين أو يسار الشاشة   
                   ElseIf rc.Height = scr.Bounds.Height Then   
                           Top = WndPosBlank   
                           If rc.Left <= 0 Then   
                                   Left = rc.Width + WndPosBlank   
                           Else   
                                   Left = rc.Left - Width - WndPosBlank   
                           End If   
                   End If

هذا الكود راح يطلع الفورم يمين سوى النظام نسخة عربيه ام انجليزيه (انا جربت ذالك ) ....الذي اقصد اريد الفورم يخرج يسار حاولت لكن دون فائده فرجعت لك

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

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

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

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

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