استخدمت شرح موجود في المنتدى في طريقة اخراج الفورم في الزوايا الاربع .....لكن حاولت ان افهم الطريقه للتطبيقها لكن لم افلح........في المرفقات فورمين الثاني عن الموجود في المنتدى والفورم 2 من موقع اخرى.....اريد احدى الفورمين استطيع تطبيقه في الزوايا اربع
مشكلة ظهر فورم في الزوايا الشاشة الاربع
الشرح اخذا من هذا الموضوع /index.php?showtopic=204131&st=0&p=1014109entry1014109
وانا مستعد للتوضيح
هل من توضيح للكود
هذا الشرح الذي قلت عنه
محمد رضى كتب:السلام عليكم و رحمة الله تعالى و بركاته,,,
كيف نظهر نافذة بالقرب من شريط المهام مهما كان مكانه؟
البرامج التي تشتغل في الخفاء أمثال مقاومات الفيروسات و غيرها تقوم بإظهار رسائل للمستخدمين عبر نوافذ صغيرة تظهر دائما بالقرب من شريط المهام للويندوز. هذا الموضوع يتكلم عن كيفية الوصول إلى المربع الذي يحتله شريط المهام لكي نقوم بإظهار نوافذ برامجنا بالقرب منه.
أولا سنحتاج كما المعتاد لبعض التعاريف...
' اسم فئة نافذة شريط المهام 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في الملف المرفق تجدون مشروعا صغيرا يشغل الكود الذي تكلمنا عليه الآن ليظهر النافذة بالقرب من شريط المهام عند التشغيل.
تحياتي...
حدد بالضبط أي مقطع من الكود تجد فيه صعوبة أو ضع أسئلة محددة حول الموضوع,,,
محمد رضى كتب:حدد بالضبط أي مقطع من الكود تجد فيه صعوبة أو ضع أسئلة محددة حول الموضوع,,,
أهلاً وسهلاً بسيد محمد انت فين مش شيفك هذا الايام...منور
المقطع هو
ان مش عارف الافترضيه يمين الشاشة ان عاوز يسار الشاشة اعلى شاشة يمين يسار مش عارف الكود اصلاً
جالس احول فيه يومين و لا فائده
' تحديد مكان النافذة
'' أعلى أو أسفل الشاشة
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الكود المرفق يقوم بتحديد مكان النافذة إلى أقرب نقطة من الأيقونات التي تظهر على شريط المهام. يعني أنك في أي مكان حولت إليه شريط المهام يمين, يسار, أعلى أو أسفل الشاشة, الكود سيقوم بتحديد مكان النافذة بالقرب من Tray icons.
WndPosBlank تحدد فيها عدد البيكسلات التي يجب إبعاد النافذة عن شريط المهام.
اقتباسأهلاً وسهلاً بسيد محمد انت فين مش شيفك هذا الايام...منور
بارك الله فيك أخي الكريم:) اتمنى من الله العلي القدير أياما أحسن من هاته التي تمر علي حاليا حتى يعود النشاط لسابق عهده إن شاء الله...
تم تعديل هذه المشاركة بواسطة محمد رضى في 3 أغسطس 2010 في 15:02
محمد رضى كتب:الكود المرفق يقوم بتحديد مكان النافذة إلى أقرب نقطة من الأيقونات التي تظهر على شريط المهام. يعني أنك في أي مكان حولت إليه شريط المهام يمين, يسار, أعلى أو أسفل الشاشة, الكود سيقوم بتحديد مكان النافذة بالقرب من 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
الكود أخي mdf يعمل كما يعمل المسنجر عندما يتم الإتصال بأحد اصدقائك حيث ستظهر نافذة بالقرب من أيقونات Tray مهما كان مكان تواجد شريط المهام, النافذة التي تخبرك أن صديقا لك قام بفتح حسابه على المسنجر...
حاول تغيير مكان شريط المهام إلى يمين, يسار, أعلى ألشاشة أو أسفلها ثم قم بتشغيل البرنامج و سترى أن النافذة ستظهر دائما بالقرب من أيقونات Tray لشريط المهام مهما كان مكانه
محمد رضى كتب:الكود أخي mdf يعمل كما يعمل المسنجر عندما يتم الإتصال بأحد اصدقائك حيث ستظهر نافذة بالقرب من أيقونات Tray مهما كان مكان تواجد شريط المهام, النافذة التي تخبرك أن صديقا لك قام بفتح حسابه على المسنجر...
حاول تغيير مكان شريط المهام إلى يمين, يسار, أعلى ألشاشة أو أسفلها ثم قم بتشغيل البرنامج و سترى أن النافذة ستظهر دائما بالقرب من أيقونات Tray لشريط المهام مهما كان مكانه
اعرف ذالك وسبق ان جربته......لكن انا اقصد ان يخرج الفورم إلى الجهه اليسرى و جربته على جهاز اكس بي عربي وخرج امام قائمة استارت يمين ولم يخرج اعلى الساعة يسار
تم تعديل هذه المشاركة بواسطة mdf في 5 أغسطس 2010 في 01:19
هل اتضح لك كلامي
' تحديد مكان النافذة
'' أعلى أو أسفل الشاشة
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هذا الكود راح يطلع الفورم يمين سوى النظام نسخة عربيه ام انجليزيه (انا جربت ذالك ) ....الذي اقصد اريد الفورم يخرج يسار حاولت لكن دون فائده فرجعت لك