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

معلومة:إضافة بنود جديدة إلى قائمة النظام

مغلق
بدأه محمد سامر أبو سلو في 16 سبتمبر 2005 · 21 رد · 1,643 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

16_09_05_12_45_25_1126899925_1.JPG

أولا – في قسم الإعلانات العامة نضيف التعريفات التالية:

    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, _
        ByVal bRevert As Boolean) As Integer

    Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _
        (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer _
        , ByVal lpNewItem As String) As Integer

    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _
            ByVal nPosition As Long, ByVal wFlags As Long) As Long

    Const MF_BYPOSITION = &H400&
    Const MF_REMOVE = &H1000&
    Const MF_SEPARATOR = &H800&
    Const WM_SYSCOMMAND As Integer = &H112

ثانيا – في حدث التحميل للنموذج نقوم بالحصول على مقبض نافذة النظام بواسطة الأمر GetSystemMenu ثم نقوم بإضافة البنود التي نريدها لقائمة النظام بواسطة AppendMenu

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim hSysMenu As Integer
        hSysMenu = GetSystemMenu(Me.Handle.ToInt32, False)
        'appends new menu items
        AppendMenu(hSysMenu, MF_SEPARATOR, 1000, "")
        AppendMenu(hSysMenu, 0, 1001, "New Item1")
        AppendMenu(hSysMenu, 0, 1002, "New Item2")
    End Sub

ثالثا – في الـ Override لـ WndProc نستخدم كود شبيه بالتالي لمعرفة أي بند من القائمة تم نقره

   Protected Overrides Sub WndProc(ByRef m As Message)
        MyBase.WndProc(m)
        If m.Msg = WM_SYSCOMMAND Then
            Select Case m.WParam.ToInt32
                Case 1001
                    MsgBox("Clicked: New Item1")
                Case 1002
                    MsgBox("Clicked: New Item2")
            End Select
        End If
    End Sub

تم تعديل هذه المشاركة بواسطة crazy-man في 24 سبتمبر 2005 في 03:53

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

جزاك الله خيرا يا أخ محمد ولكن لو ممكن توضح أكثر عن ما هي وظيفة الـ MyBase.WndProc(m)

في الـ Overrides Sub WndProc ؟؟؟

وأنا فكرت أعمل كلاس لهذه الفكره بس أنا معرفش ازاي أبني Event عند الضغط علي زر القائمه

ففكرت أمرر الحدث كـ Sub زي ما في الصوره لكن برضه لا أعرف كيف ذلك ...؟؟؟

16_09_05_11_10_56_1126937456e.JPG

فهل تقدر تساعدني ؟؟؟

تم تعديل هذه المشاركة بواسطة hazzoom في 17 سبتمبر 2005 في 09:23

#3
hazzoom كتب:
جزاك الله خيرا يا أخ محمد ولكن لو ممكن توضح أكثر عن ما هي وظيفة الـ MyBase.WndProc(m)

في الـ  Overrides Sub WndProc ؟؟؟

وأنا فكرت أعمل كلاس لهذه الفكره بس أنا معرفش ازاي أبني Event عند الضغط علي زر القائمه

ففكرت أمرر الحدث كـ Sub زي ما في الصوره لكن برضه لا أعرف كيف ذلك ...؟؟؟

16_09_05_11_10_56_1126937456e.JPG

فهل تقدر تساعدني ؟؟؟

الموضوع بسيط

انظر الصورة

17_09_05_02_05_52_1126947952_1.JPG

من القائمة اليسارية بتختار overrides الخاصة بـ form1 مثلا ثم من القائمة اليمينية بتختار WndProc وهيك بيئة التطوير بتنشئلك الإجرائية لوحدها وبيصفى عليك كتابة الكود بس بس لا تنس استدعاء الأمر MyBase.WndProc(m) كأول سطر في الكود يللي بدك تكتبوا

17_09_05_02_11_33_1126948293_.JPG

وبالنسبة للأمر MyBase.WndProc(m) هو استدعاء للوظيفة التي تقوم بعمل override لها والموجودة في الكلاس الأب لأنك وقت بتعمل override لوظيفة بتصير الوظيفة الخاصة بالكلاس الأب ما بتتنفذ وبتتنفذ الوظيفة الجديدة يللي أنت عملتها هون ببعض الأحيان بيكون من الضروري إبقاء وظيفة الكلاس الأب تنفذ لهذا بنضع هذا الأمر أول سطر بالوظيفة الجديدة بعدين منكتب الكود الجديد يللي بدنا إياه

أعتقد أن الأمر صار واضح هيك

تم تعديل هذه المشاركة بواسطة samerselo في 17 سبتمبر 2005 في 12:11

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#4

يا أخ محمد أنا عايز أعرف وظيفة هذه الـ Override Sub ؟؟؟

اقتباس
وأنا فكرت أعمل كلاس لهذه الفكره بس أنا معرفش ازاي أبني Event عند الضغط علي زر القائمه

ففكرت أمرر الحدث كـ Sub زي ما في الصوره لكن برضه لا أعرف كيف ذلك ...؟؟؟

16_09_05_11_10_56_1126937456e.JPG

كيف يمكن عمل باراميتر من النوع السابق الذي يأخذ الـ Sub كمتغير أو ما هو نوعه ؟؟؟ أرجو أن يجيبني أحد !!!

تم تعديل هذه المشاركة بواسطة hazzoom في 17 سبتمبر 2005 في 17:04

#5

أخ hazzoom الموضوع ما بدوا كل هالتعقيد ومافي داعي تستخدم thread لتنفذ العملية لأنو عملية إضافة البنود لازم تتم في عملية بداية تحميل الفورم وال sub المستخدم هون عم يتلقى الرسائل الخاصة بالنافذة form1 ولا أعتقد بإمكانية استقبالها بشكل صحيح من thread آخر

بالنسبة لموضوع override sub

مثلا عندي كلاس

class Hazzoom

overridable sub Test()
   MsgBox("Hi Hazzoom")
end sub

end class

وأن وقت بشتق من الكلاس hazzoom كلا س جديد samer وبدي غير وظيفة الاجراء test

class Samer
inherits hazzoom

overrides sub test()
msgbox("Hi samer")
end sub

end class

هلق وقت بدي استخدم الكلاس القديم

dim h as new hazzoom
h.test

وهون بتطلعلك رسالة hi hazzoom

بس وقت بستخدم الكلاس الجديد

dim s as new samer
s.test

هون بتطلع الرسالة الجديدة hi samer

أعتقد أني جاوبت على سؤالك وعلى كل حال إذا ما عرفت وضحلك مزبوط خبرني وبحاول اشرح قدر الإمكان

إن كنت اخطأت في شئ يرجى من الإخوة المشرفين والخبراء التصحيح

تم تعديل هذه المشاركة بواسطة samerselo في 18 سبتمبر 2005 في 11:39

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

يا أخ محمد يبدو انك لم تفهمني جيدا , أنا لم أقل اني لا أعرف ما هو الـ Overriding أو كيف أستعمله ولكن خلاص مش مشكله تتعوض مره تاني !!!

وبالنسبه للـ Threading أنا لم أقل اني أريد عمل Threading ولكن أقول كيف يمكن عمل داله تأخذ Sub Procedure كـ Parameter عن طريق الـ AddressOf مثل الـ Threading ولست أريد عمل Thread , هل فهمتني ولا لأ ؟؟؟

يا جماعه اللي يعرف كيفية انشاء باراميتر من نوع Sub Procedure يقول ويفيدنا , جزاكم الله خيرا ,,,

#7

إذا كنت فهمتك صح هالمرة

وقت بدك تستخدم sub كبارامتر لـ adderssof بعبارة الـ threading عندك شغلة مهمة وهي استخدام sub بدون بارامترات نهائيا لايستقبل ولا يعيد قيمة وعملية تبادل البيانات وبينه وبين البرنامج الرئيسي تتم عبر ما يدعى بـ shared members

ارجو أن أكون فهمتك صح هالمرة

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#8

الحمد لله انت كده فهمتني :rolleyes: ,,,

أنا عايز أمرر Sub لا تأخذ Parameters لـ AِdderssOf وطبيعي الـ Sub لا تعيد قيمه ,,,

فهل ممكن مثال يا أخ محمد جزاك الله خيرا ..؟؟؟

#9

الحمد لله أني فهمتك أخيرا

بس بدك تعذرني مخي مشوش شوي بسبب كتر المعلومات بالفترة الأخير وبعض المشاكل في العمل

وبحاول أعملك مثال قدر المستطاع بأقرب وقت ممكن .. إذا ما سبقني حدا

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#10

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

اخي العزيز hazzoom نعم يمكن ذلك عن طريق تعريف دالة sub و عمل Delegate ثم تمرير التفويض Delegate كا براميتر AddressOf فمثلا اذا كان لديك دالة بإسم mySub بالشكل التالي :

Sub mySub()
	.
	.
	.
End Sub

ولديك تفويض Delegate لها بإسم myDelegate ... فيمكنك ببساطة لتمرير الدالة الى اي اجراء آخر داخل كلاس مثلا ان تقوم بتعريفه بالشكل التالي :

Sub insideClass( yourSub As myDelegate)

End Sub

و الان ببساطة يمكنك استدعائها بالشكل التالي:

insideSub( AddressOf mySub )

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

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

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 19 سبتمبر 2005 في 17:32

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#11

اخ رغيد الطيب كلامك صح بس ليش أعمل delegate طالما فيني اختصر الاستدعاء بسطر واحد مع انو الطريقتين صح وبما انو addressof هي نفسها بتعيد delegate

وإليك مثال مبسط

افتح مشروع جديد وضع زرا على الفورم الظاهر ثم افتح محرر الكود الخاص بالفورم وبعد Windows Form Designer generated code أدخل الكود التالي

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' you can declare a thread in the easiest way as this
        ' lien of code you just need a parameterless sub
        ' that do the functionality of the thread
        Dim Th As New Threading.Thread(AddressOf Test)

        ' just start the thread and it will do his job 
        ' then termaintes it self
        Th.Start()

    End Sub

    Private Sub Test()
        ' this is only demo you can put what's you like of code here
        MsgBox("This is form thread")
    End Sub

وجرب المشروع

في المرفقات المثال المذكور

+ امثلة إضافية مرفقة بالأصل مع كتاب احتراف Visual Basic .Net لـ محمد حمدي غانم

حيث يمكنك الحصول على الكتاب كاملا إن أحببت من صفحة تحميل الكتاب

Temp.zip

تم تعديل هذه المشاركة بواسطة samerselo في 19 سبتمبر 2005 في 22:37

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#12

السلام عليكم

شكرا لمتابعتم يا اخواني وأعتقد انك فهمتني أخي رغيد , ولكن أنا حاليا مش عارف يا أخ محمد ان كنت فهمتني ولا لأ الأمثله التي أرفقتها تدل علي انك لم تفهمني !!!

وسأحاول التوضيح مره أخري :

أنا قمت بوضع دوال الـ API في كلاس هكذا :

Public Class FormSystemMenu
    
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, ByVal bRevert As Boolean) As Integer
    Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer, ByVal lpNewItem As String) As Integer
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    
    Const MF_BYPOSITION = &H400&
    Const MF_REMOVE = &H1000&
    Const MF_SEPARATOR = &H800&
    Const WM_SYSCOMMAND As Integer = &H112
    
    Dim hSysMenu As Integer

    Public Function Add_Sys_Menu(ByVal myform As Form, ByVal Menu_Name As String,ByVal Sub_Event as 'sub)
        hSysMenu = GetSystemMenu(myform.Handle.ToInt32, False)
        AppendMenu(hSysMenu, 0, 1001, Menu_Name)
    End Function

    Public Function Add_Separator(ByVal myform As Form)
        hSysMenu = GetSystemMenu(myform.Handle.ToInt32, False)
        AppendMenu(hSysMenu, MF_SEPARATOR, 1000, "")
    End Function

    Public Function Remove_Sys_Menu(ByVal myform As Form, ByVal Menu_Name As String)
        hSysMenu = GetSystemMenu(myform.Handle.ToInt32, False)
        'remove specific button in system menu
    End Function

End Class

وفي حدث تحميل الفورم نستخدم الكلاس كالتالي :

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim xx As New FormSystemMenu
        xx.Add_Sys_Menu(Me, "About", 'addressOf About_Event)
    End Sub

ويكون هناك Sub بها ما سوف يحدث عند الضغط علي زر About الذي قمنا باضافته ....,,,

    Sub About_Event()
        MsgBox("you clicked about button in system menu")
    End Sub

وبالطبع سوف يحدث خطأ , لذلك أنا أريد تمرير الـ Sub الي دالة اضافه الزر في القائمه عن طريق الـ AddressOf !!!

الكود السابق موجود في المرفقات لذلك أرجو تنزيله والقاء نظره عليه كي تتضح الأمور ؟؟؟

SysMenu.rar

#13

حتى تنجح الفكرة الخاصة بك يجب عليك اصطياد الرسائل الموجهة للنافذة التي أضفت القوائم لنافذة النظام الخاصة بها ثم معالجتها بطريقة مشابهة للطريقة التي عالجتها بها أنا في البداية في الحدث WndProc ثم عمل raise event من داخل الكلاس الخاص بك بخصوص اي من القوائم تم نقره

حيث رأيت طريقة تعمل على نفس المبدأ هنا في المنتدى عندما ناقشنا الكود البديل لتحكم notifyIcon حيث يستخدم طريقة مشابهة لما ذكرت الآن للالتقاط الأحداث الخاصة بـ NotifyIcon

وأعتقد أن هذه الطريقة أفضل من طريقة الـ sub التي تفكر بها حسب رأيي الشخصي

على كل حال سأرى الكود الذي أرفقته

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#14

وأنا منتظر ,,,

لكن المشكله أنه لم أتعامل مع الـ Events حتي الآن !!!

ولكن سأحاول والله الموفق ,,,

تم تعديل هذه المشاركة بواسطة hazzoom في 20 سبتمبر 2005 في 17:25

#15

طيب يا أخ hazzoom

شو رأيك تساعدني بشغلتين ما عم يزبطوا معي وأنا بعمل الكلاس كامل مع الـ events وبحطوا هون للكل جاهز

أولا - موضوع حذف القائمة

ثانيا - كيف بدي أعرف انو المستخدم نقر هذا الأمر بالذات هلق أنا وقت حطيت الكود الأصلي كنت عم بقدر أعرف هي الشغلة لأنو الرسالة يللي عم تروح لـ form1 عم بستقبلها من نفس كلاس form1 و عم عالجها متل ما بدي بس هاد بما أنو كلاس تاني كيف بدي استقبل الرسائل يللي رايحة لـ form1 من الكلاس الجديد يللي عم بعملوا وإذا عرفت تجيب هالنقطة أنا بعالج الرسالة وبعملك raise لـ events على كيفك

يرجى المساعدة من الجميع في هاتين النقطتن

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#16

وأنا أيضا أضم صوتي لصوتك , "يرجى المساعدة من الجميع في هاتين النقطتين" ,,,

#17

بسم الله الرحمن الرحيم

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

اولا اعتذر كثيرا عن غيابي عن الموضوع لظروف خارجة عن ارادتي ... و اما ما اريد التنويه اليه بأن المسألة الان تبدو لي واضحة اراده اخينا العزيز hazzoom بعد ان وضع المثال الذي يريد الوصول اليه.

كما ان ملاحظات الاخ العزيز samerselo صحيحة و في الحقيقة توجد الكثير من الطرق التي يمكن ان نتحايل بها للقيام بالمطلوب هنا ... و قد وضعت تصور بسيط للمثال الذي ارته اخي الحبيب ... حيث كونت فئة Class جديدة بإسم RgheedSysMenu و يمكنك ان تقوم بتعريفها بالشكل التالي :

Dim WithEvents Menu As New RgheedSysMenu(Me)

لاحظ شيئين مهمين وهو ان المتغير تم تعريفه بواسطة الكلمة WithEvents وتعني انها اريد تعريف هذا المتغير مع كافة الاحداث الموجودة في الفئة RgheedSysMenu .. و الشيء الثاني هو انه ينبغي تمرير الفورم التي تريد إنشاء القوائم عليها وعي في المثال السابق تتمثل في الكلمة Me وتعني الفورم الحالية.

لإضافة اي عنصر جديد للقائمة استخدم الامر :

menu.AddMenu("About...")

وهذا الامر سوف يضيف امر جديد الى القائمة بإسم About.. و للحذف نستخدم الامر RemoveMenu.

يوجد في الفئة حدث وحيد يمكنك ان تكتب الكود التابع لك فيه وهو الحدث MenuClickو الذي يعني ان احد العناصر في القائمة قد تم النقر عليه ولمعرفة اسم الامر الذي تم الضغط عليه يتم تمرير القيمة menuName و التي يمكنك اختبارها بالشكل التالي على افتراض ان لدينا قائمتين هما About Us و About Me فإن شفرة الحدث MenuClick ستكون بالشكل التالي :

    Private Sub mnu_MenuClick(ByVal menuName As String) Handles mnu.MenuClick
        Select Case menuName
            Case "About Us"
                MsgBox("الفريق العربي للبرمجة")
            Case "About Me"
                MsgBox("رغيد الطيب أحمد علي")
        End Select
    End Sub

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

اما للاخ العزيز samerselo وكيفية نقل المعالجة من الفورم الاساسية الى الفئة التي صنعناها فهني يمكن الاستفادة كثيرا من الفئة NativeWindow و اعطائها عنوان ( مقبض Handle ) النافذة الأم ... و يمكن ايضا القيام بعمل subclassing للفورم بالطريقة التقليدية بإستخدام الـ API و هو موضوع مختلف ليتني اجد الوقت للتطرق اليه غير ان صفحات المنتدى لابد و تحتوي الكثير عن الـ Subclassing بإذن الله تعالى.

على العموم يمكن الأطلاع على البرنامج البسيط المرفق ثم نناقش سويا اي امور غامضع فيه بإذن الله تعالى.

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

RgheedSysMenus.zip

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#18

شكرا لك أخ رغيد

في الحقيقة لن أستطيع إجابتك إلا بعد أنا أقوم بدراسة الكود الذي وضعته عمليا

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#19

شكرا لك أخ رغيد

بعد نظرة مبدئية وتجربة الكود

فعلا رائع

بس اسمحلي عدلت شغلة صغيرة بالكود

عدلت شوي على الاجرائية Addmenu حتى نتمكن من إضافة فاصل وهي الاجرائية الجديدة

    Public Function AddMenu(ByVal menuName As String, Optional ByVal Seperator As Boolean = False) As Boolean
        For Each mnu As DictionaryEntry In menus
            If mnu.Value.ToLower = menuName.ToLower Then
                Return False
            End If
        Next

        ID = ID + 1
        menus.Add(ID, menuName)
        If Seperator = False Then
            APIs.AppendMenu(APIs.GetSystemMenu(Parent.Handle.ToInt32, 0), 0, ID, menuName)
        Else
            APIs.AppendMenu(APIs.GetSystemMenu(Parent.Handle.ToInt32, 0), APIs.MF_SEPARATOR, ID, menuName)
        End If

        Return True
    End Function

وطبعا ضفت السطر التالي لـ APis بالمشروع

Public Const MF_SEPARATOR = &H800&

مرفق الكود بعد التعديلات البسيطة التي قمت بها

RgheedSysMenus_Altered By Samer.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#20

على كل حال سأقوم بدراسة الكود بالتفصيل

بس عندي رجاء لو كان طلبي غليظ

في مجال تحط شرح مفصل للكود الموجود بالملف RgheedSysMenu.vb حتى تعم الفائدة لجميع أعضاء المنتدى

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#21

أعذروني يا أخواني لم أقرأ الموضوع والكلاس الا الآن , وهي تؤدي الغرض تماما وهي رائعه ,

ولكن أخي رغيد أعتقد أن الكلاس تحتاج الي شرح فعلا ....,,,

#22

شكرا جزيلا :P

1.GIF

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

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

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

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

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

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