AHMAD FATHY

تعلم معنا صناعة الدوال بنفسك

34 ردود في هذا الموضوع

السلام عليكم

اليوم اشرح لكم كيفية صناعة الدوال Functions فى برنامجك

بسم الله نبدأ

أولا يجب أن تعرف أن الدالة تعنى باللغه الانجليزية Function

هناك مجموعة من الدوال الثابتة أو المحجوزة فى الفيجوال بيسك مثل دالة جييب الزاوية Sin و داله جيب التمام Cos كمثال للدوال الرياضية

مثال آخر : الدالة Len و فائدتها معرفة عدد حروف نص معين

مثلا

msgbox Len("Ahmad")

سيكون الناتج 5 لأن عدد حروف الكلمة هو 5 حروف

كما ترى فإن الدالة تأخد مدخلات Inputs و ترجع لك مخرجات

إذن لكل داله مدخلات و مخرجات

ميكانيكية عمل الداله:

ترسل المدخلات إلى الداله -- ثم تقوم الدالة بعملية معالجة المدخلات حسب وظيفه كل داله -- ترسل الداله لك المخرجات

الآن تعالا بنا نكتب أول داله

ايه رأيك نعمل دالة جمع رقمين ؟؟

ستكون بالشكل التالى

Function Add(ByVal X As Integer, ByVal Y As Integer) As Integer
Add = X + Y
End Function

الشرح:

1- نكتب كلمة Function للاعلان عن الدالة

2- اكتب اسم الدالة و انا سميتها فى هذا المثال Add

3- افتح قوس

4- نبدأ فى تعريف المتغيرات التى ستأخذها الداله أى المدخلات ،، إذا كنا نستخدم كلمه Dim فى تعريف المتغيرات العادية فإننا نستخدم كلمة ByVal فى تعريف مدخلات الدوال ( يعنى استبدل Dim بـ ByVal)

و على فكرة ByVal دى اختصار لـ By Value

5- قمت بتعريف متغير اسمه X نوعه Integer بالجمله ByVal X as Integer

6- ضع علامة الفصلة السفلية لتعريف متغير آخر ,

7- قمت بتعريف متغير Y نوعه Integer بالجمله ByVal Y as Integer

8- اقفل القوس

9 - اكتب كلمة As و بعدها نكتب نوع النتيجة يعنى ال Data Type بتاع النتيجة ،، فلو كانت الدالة هترجع لك رقم يبقى As Integer و لو هترجع لك True , false يبقى As Boolean

و فى المثال ده أنا عملت النتيجة اللى هترجع رقم

10- اضغط Enter للانتقال لسطر جديد

11- افتكر معايا كده الداله كان اسمها ايه ؟؟ بتقول ايه ؟؟ Add صح ؟ شاطر :D

بنبدأ عملية معالجة البيانات ،، يعنى فى المنطقة دى بنكتب وظيفة الداله

احنا قولنا فى اول كلامنا اننا بنعمل دالة جمع

يبقى المفروض النتيجة اللى هترجع من الدالة تكون حاصل جمع X و Y

خلاص انت حليتها

اكتب Add = X + Y

يعنى بنقول الدالة Add هترجع مجموع X و Y

12- طبعا هتقفل الدالة بجمله End Function

استدعاء دالة الجمع من الكود:

Private Sub Command1_Click()
MsgBox Add(5, 6)
End Sub

يعنى لما تحب تستدعى الدالة بتكتب اسمها و بعدين بين القوسين تحط قيم المدخلات X و Y

و طبعا المخرجات هتطلع فى صندوق رسالة = 11

:o فمهنا لحد هنا ؟؟

تمام شكلك فهمت :D

يلا ناخد مثال اصعب شوية،، بس انا عارفك معلم كبير و مفيش حاجة تصعب عليك :D

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

نفترض مثلا ان النجاح من 150

نبدأ نكتب كود الداله و عينك على المدخلات و المخرجات و النوع بتاعهم

Function Check(ByVal Result As Integer) As String
If Result > 150 Then
Check = "ناجح"
Else
Check = "راسب"
End If
End Function

فى المثال اسم الداله Check

المدخلات : متغير اسمه Result و هى نتيجة الطالب ،، نوع المتغير Integer

المخرجات : نوعه String يعنى نص

الدالة بتشوف المدخلات ، لو أكبر من 150 بترجع لك كلمه ناجح

لو أقل من 150 بترجع لك كلمة راسب

استدعاء الدالة:

Private Sub Command2_Click()
MsgBox Check(Text1.Text)
End Sub

لاحظ انى هعرض المخرجات فى صندوق رسالة

كتبت MsgBox

بعد كده كتبت Check لاستدعاء الداله ،، فتحت قوس ،، كتبت قيمة المتغير و قيمته هنا هى قيمه text1.text يعنى المتغير بياخد قيمته من التيكست بوكس ،، قفلت القوس

سيتم عرض الناتج فى صندوق الرسالة

نكتفى بهذا القدر و إن شاء الله نقول دوال أكثر تعقيداً بعد ذلك ;)

و لو فى أى أسئلة أنا موجود

مع أطيب تمنياتى AHMAD FATHY

مرفق المثال

functions.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

الباشا أحمد الله يفتح عليك ويزيدك إن شاء الله

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

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

لعلك فهمت الأن................... :D

ثانيا أنا أقوم بشرح سطور الأكواد للجميع وليس بالخصوص لصاحب المشكلة

عموما دعنى أشكرك على الموضوع الرائع..... ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تسلم يا باشا على ذوقك العالى :D

و مستنى منك شرح الطباعه برضو :D :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

درس ممتاز ،،

يعطيك ألف عافية أخي أحمد ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

يعطيك العافيه ،،

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

تحياتي لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

يعطيك العافية

شرح رائع ولكن عندي سؤال محيرني

هو انتو اخوات :lol:

أقصد انت والأخ عبد الله فتحي

تم تعديل بواسطه nasser50001
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

شكرا لذوقكم العالى يا شباب :D

هو انتو اخوات

أقصد انت والأخ عبد الله فتحي

يا سيدى هو أنا أطول :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ما شاء الله عليك يا أخ أحمد

شرحك لذيذ - ربنا ينفع بيك الأمة

ما أجمل أن كل من يعرف معلومة وعنده القدرة أنه يوصلها

قال صلى الله عليه وسلم:

بلغوا عنى ولو آية فرُبّ مُبـلَّـغٍ أوعى من سامع

صدق الحبيب المصطفى

ردا على الأخ nasser50001

لا - دى بلد - و دى بلد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تشكر اخ احمد فتحى على المعلومات القيمة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أحبائى

اليوم الدرس الثانى :)

تطبيق عملى لما تعلمناه فى الدرس الأول

فى هذا المثال نصنع دالة باسم Swap

المشكلة التى دعتنا إلى صناعتها:

نفرض أن لدينا text1 و text2

text1.multiline = True أى يمكن كتابة أكثر من سطر

text2.multiline = False أى لا يمكن كتابه أكثر من سطر

نفرض أن لدينا Command1 ،، نكتب له الكود التالى

text2.text = text1.text

الآن قم بتشغيل البرنامج لتكتشف المشكلة بنفسك :D

اكتب فى text1 ما يلى:

أحمد

فتحى

ثم اضغط على command1 فماذا كانت النتيجة فى text2 ؟؟؟؟؟؟

ستكون كالتالى

أحمدسح فتحى

:D :D سح أليس كذلك ؟

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

وظيفة الدالة:

استبدال المسافة بين السطرين بمسافة فارغه " "

خطوات كتابه الدالة:

Function Swap(ByVal Text As String) As String
Swap = Replace(Text, vbCrLf, " ")
End Function

1- كما تعلمنا من الدرس الاول ،، اسم الداله Swap ،، المدخلات عبارة عن متغير اسمه Text نوعه String أى متغير نصى

المخرجات نوعها String اى المخرجات تكون نص أيضاً..

2- قلنا للبرنامج أن الدالة Swap ستأخذ قيمة العملية التالية

Replace(Text, vbCrLf, " ")

ما هى تلك العملية؟؟

باستخدام الداله المحفوظة Reserved Function التى اسمها Recplace سيتم استبدال كل مسافة بين سطرين vbCrLf بمسافه فارغه " "

و ستتم كل عمليات الاستبدال فى النص المدخل إلى الدالة Swap و تذكر معى أن المتغير فى المدخلات هو Text

إذا ميكانيكية العمل:

نرسل المدخلات إلى الدالة Swap ،، توضع المدخلات فى المتغير Text ،، تأخد الدالة Swap قيمة الداله Replace ،، دور الدالة Replace هو استبدال كل مسافه بين سطرينvbCrLf فى المتغير النصى Text بمسافه فارغه ،، توضع نتيجة الاستبدال فى مخرجات الدالة Swap

----

لاحظ أننا استخدمنا داله لصناعه دالة آخرى ;) حلوه صح :D

استدعاء الدالة:

نرجع إلى مشروعنا الأول اللى ظهرت فيه المشكلة

اعمل زر جديد command2

اكتب له هذا الكود

Private Sub Command2_Click()
Text2.Text = Swap(Text1.Text)
End Sub

و بذلك نرسل للداله Swap النص المكتوب فى text1.text لتتم عليه عمليات الاستبدال ،، ثم توضع مخرجات الدالة فى text2.text

جربها ;)

المثال مرفق ;)

functions2.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بارك الله فيك أخي أحمد ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تشكر اخ احمد فتحى على المعلومات القيمة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

اعجبني ذا الدرس كثير اخواني

ولقد عملت دله اسمها booo7 تقوم بعمل shell

وهذه الشفره

طبعا وضعت زر كومند وتيكست بوكس بحيث اذا وضعت مسار اي برنامج في التيكست بوكس يشتغل البرنامج عن الضغط على زر كومند

Function booo7(ByVal txt As String) As String
booo7 Shell(txt)
End Function

Private Sub Command1_Click()
booo7 Text1.Text
End Sub

وهل من المنطق ان اقول عملت داله اسمها booo7 تقوم بعمل shell

وهل استطيع ان اصنع اي داله تقوم بعمل ما مثل البحث او ارسال او الحذف

وبنظري انا لم اعمل داله فقط انا اعتبرها تغيير مسمى فامثلا بدال shell اصبحت booo7

ارجو التعقيب علي لضروره ولزيادة العلم

اخوكم طلال العنزي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الله يعطيك العافيه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم الأخ boooo7

أسف جدا جدا على التأخير بس و الله لم الاحظ ردك ..

بص يا سيدى الفاضل إلى السطر الأول فى كودك

Function booo7(ByVal txt As String) As String

لقد حددت مخرجات الدالة على انها نص بالرغم من أن الدالة التى صنعتها لا ترجع نتائج نصية

بالفعل هذه لا ينطبق عليها تعريف الدالة،، فيمكنك كتابة الكود بالشكل التالى

Sub bo7(Path As String)
Shell (Path)
End Sub

أى انه يمكن كتابه الكود على شكل Sub دون تطرق لموضوع الداله ،، و يمكنك استدعاءه بشكل طبيعى.

وهل استطيع ان اصنع اي داله تقوم بعمل ما مثل البحث او ارسال او الحذف

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

و اى مشكلة انا معاك اخ طلال

تحت امرك يا almazuon شكراً ليك

تم تعديل بواسطه AHMAD FATHY
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اشكرك من صميم قلبي واتمنى ان تعطينا امثله كثيره

تريد ان اتعمق اكثر في الفينكوشن وsub اكثر ياليت تكمل معروفك وتضرب امثله اكثر اخوي العزيز

مازلت انتظرك اخوي العزيز

اخوك طلال العنزي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
Sub booo7(path As String)

path = x

Shell "C:\Program Files\MSN Messenger\msnmsgr.exe"

End Sub

Private Sub Command1_Click()

booo7 (x)

End Sub

كذا ضبط معي

ياليت نتكلم اكثر عن sub

ياليت تشرحها اكثر

لان احب مثل هذه الاشياء لان احس فيها مرونه اكثر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكورين

كلكم

وكل واحد على حدا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مجهود رائع أخي الكريم

بارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكوووووور اخي ع الموضوع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .