03-10-12, 08:54 AM
كاتب الموضوع : Programmation
الســلام عليكم ورحمة الله وبركاتهالأخوة الأعضاء الكرام, كيف حال الجميع؟
أسـأل الله العظيم أن تكونوا فى أفضل حال وأتم عافية.
99 % من المبرمجين قد بدؤا رحلة البرمجة بأحد البرنامجين Hello World أو Calculator , بالنسبة للـ Calculator كنا نقوم برسم الكائنات لتحديد الرقم الاول وأخر للثاني ومن ثم إستخراج النتيجة فى كائن أخر أما الأن فلا لأستخدام الكائنات ولا إستخدام معاملات (+-*/^) داخل سطور أكوادك!!!
سوف تحصل على نتيجة عمليتك الحسابية دون كل ذلك, فلقد قمت بعمل دالة من خلالها يُمكنك إتمام عمليتك الحسابية وكأنك تكتبها بالقلم فقط تكتب المعادلة وتترك الباقي على الدالة.
الدالة(DynamicCalculate):
كود :
[color=#000000][COLOR=#0000bb] Author[/color][color=#007700]: [/color][color=#0000bb]Programmation[/color][color=#007700]([/color][color=#0000bb]OmarNegm[/color][COLOR=#007700])
Public Function [/COLOR][color=#0000bb]DynamicCalculate[/color][color=#007700]([/color][color=#0000bb]ByVal strCalculate [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]) As [/color][COLOR=#0000bb]Double
Dim cPlus [/COLOR][color=#007700]As [/color][color=#0000bb]Char [/color][color=#007700]= [/color][COLOR=#dd0000]"+"
[/COLOR][color=#0000bb]Dim cMin [/color][color=#007700]As [/color][color=#0000bb]Char [/color][color=#007700]= [/color][COLOR=#dd0000]"-"
[/COLOR][color=#0000bb]Dim cMax [/color][color=#007700]As [/color][color=#0000bb]Char [/color][color=#007700]= [/color][COLOR=#dd0000]"*"
[/COLOR][color=#0000bb]Dim cDiv [/color][color=#007700]As [/color][color=#0000bb]Char [/color][color=#007700]= [/color][COLOR=#dd0000]"/"
[/COLOR][color=#0000bb]Dim cEqu [/color][color=#007700]As [/color][color=#0000bb]Char [/color][color=#007700]= [/color][COLOR=#dd0000]"^"
[/COLOR][color=#0000bb]Dim strValues [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#dd0000]""
[/COLOR][color=#0000bb]Dim strOpertors [/color][color=#007700]As [/color][color=#0000bb]String [/color][color=#007700]= [/color][COLOR=#dd0000]""
[/COLOR][color=#0000bb]Dim LastValue [/color][color=#007700]As [/color][color=#0000bb]Double [/color][color=#007700]= [/color][COLOR=#0000bb]0
Dim Values[/COLOR][color=#007700]() As [/color][color=#0000bb]String[/color][color=#007700], [/color][color=#0000bb]Operators[/color][color=#007700]() As [/color][COLOR=#0000bb]String
[/COLOR][COLOR=#007700]Try
For [/COLOR][color=#0000bb]I [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][color=#0000bb]1 To Len[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][COLOR=#007700])
If [/COLOR][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700]) = [/color][color=#0000bb]cPlus [/color][color=#007700]Or [/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700]) = [/color][color=#0000bb]cMin [/color][color=#007700]Or [/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700]) = [/color][color=#0000bb]cMax [/color][color=#007700]Or [/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700]) = [/color][color=#0000bb]cDiv [/color][color=#007700]Or [/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700]) = [/color][COLOR=#0000bb]cEqu Then
[/COLOR][color=#007700]If [/color][color=#0000bb]strOpertors[/color][color=#007700].[/color][color=#0000bb]Trim [/color][color=#007700]= [/color][color=#dd0000]"" [/color][COLOR=#0000bb]Then
strOpertors [/COLOR][color=#007700]= [/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700])
Else
[/COLOR][color=#0000bb]strOpertors [/color][color=#007700]&= [/color][color=#dd0000]"," [/color][color=#007700]& [/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700])
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
If [/COLOR][color=#0000bb]Not strValues[/color][color=#007700].[/color][color=#0000bb]Trim [/color][color=#007700]= [/color][color=#dd0000]"" [/color][COLOR=#0000bb]Then
strValues [/COLOR][color=#007700]&= [/color][COLOR=#dd0000]","
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
Else
If [/COLOR][color=#0000bb]Not strValues[/color][color=#007700].[/color][color=#0000bb]Trim [/color][color=#007700]= [/color][color=#dd0000]"" [/color][COLOR=#0000bb]Then
strValues [/COLOR][color=#007700]&= [/color][color=#0000bb]CDbl[/color][color=#007700]([/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700]))
Else
[/COLOR][color=#0000bb]strValues [/color][color=#007700]= [/color][color=#0000bb]CDbl[/color][color=#007700]([/color][color=#0000bb]Mid[/color][color=#007700]([/color][color=#0000bb]strCalculate[/color][color=#007700], [/color][color=#0000bb]I[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700]))
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]Next
Values [/COLOR][color=#007700]= [/color][color=#0000bb]Split[/color][color=#007700]([/color][color=#0000bb]strValues[/color][color=#007700], [/color][color=#dd0000]","[/color][COLOR=#007700])
[/COLOR][color=#0000bb]Operators [/color][color=#007700]= [/color][color=#0000bb]Split[/color][color=#007700]([/color][color=#0000bb]strOpertors[/color][color=#007700], [/color][color=#dd0000]","[/color][COLOR=#007700])
[/COLOR][color=#0000bb]LastValue [/color][color=#007700]= [/color][color=#0000bb]CDbl[/color][color=#007700]([/color][color=#0000bb]Values[/color][color=#007700]([/color][color=#0000bb]0[/color][COLOR=#007700]))
For [/COLOR][color=#0000bb]I [/color][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][color=#0000bb]1 To Values[/color][color=#007700].[/color][color=#0000bb]Count [/color][color=#007700]- [/color][COLOR=#0000bb]1 Step 1
Select [/COLOR][color=#007700]Case [/color][color=#0000bb]Operators[/color][color=#007700]([/color][color=#0000bb]I [/color][color=#007700]- [/color][color=#0000bb]1[/color][COLOR=#007700])
Case [/COLOR][COLOR=#0000bb]cPlus
LastValue [/COLOR][color=#007700]= [/color][color=#0000bb]LastValue [/color][color=#007700]+ [/color][color=#0000bb]Values[/color][color=#007700]([/color][color=#0000bb]I[/color][COLOR=#007700])
Case [/COLOR][COLOR=#0000bb]cMin
LastValue [/COLOR][color=#007700]= [/color][color=#0000bb]LastValue [/color][color=#007700]- [/color][color=#0000bb]Values[/color][color=#007700]([/color][color=#0000bb]I[/color][COLOR=#007700])
Case [/COLOR][COLOR=#0000bb]cMax
LastValue [/COLOR][color=#007700]= [/color][color=#0000bb]LastValue [/color][color=#007700]* [/color][color=#0000bb]Values[/color][color=#007700]([/color][color=#0000bb]I[/color][COLOR=#007700])
Case [/COLOR][COLOR=#0000bb]cDiv
LastValue [/COLOR][color=#007700]= [/color][color=#0000bb]LastValue [/color][color=#007700]/ [/color][color=#0000bb]Values[/color][color=#007700]([/color][color=#0000bb]I[/color][COLOR=#007700])
Case [/COLOR][COLOR=#0000bb]cEqu
LastValue [/COLOR][color=#007700]= [/color][color=#0000bb]LastValue [/color][color=#007700]^ [/color][color=#0000bb]Values[/color][color=#007700]([/color][color=#0000bb]I[/color][COLOR=#007700])
[/COLOR][COLOR=#0000bb]End Select
Next
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]LastValue
[/COLOR][color=#007700]Catch [/color][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]Exception
[/COLOR][color=#007700]Return [/color][COLOR=#0000bb]0
MessageBox[/COLOR][color=#007700].[/color][color=#0000bb]Show[/color][color=#007700]([/color][color=#dd0000]"An error has occured:" [/color][color=#007700]& [/color][color=#0000bb]vbNewLine [/color][color=#007700]& [/color][color=#dd0000]"Error Description:" [/color][color=#007700]& [/color][color=#0000bb]ex[/color][color=#007700].[/color][color=#0000bb]ToString[/color][color=#007700], [/color][color=#dd0000]"Dynamic Calculate Error"[/color][color=#007700], [/color][color=#0000bb]MessageBoxButtons[/color][color=#007700].[/color][color=#0000bb]OK[/color][color=#007700], [/color][color=#0000bb]MessageBoxIcon[/color][color=#007700].[/color][color=#0000bb]Exclamation[/color][COLOR=#007700])
[/COLOR][COLOR=#0000bb]Finally
cPlus [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
cMin [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
cMax [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
cDiv [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
cEqu [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
strValues [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
strOpertors [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
LastValue [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
Values [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
Operators [/COLOR][color=#007700]= [/color][COLOR=#0000bb]Nothing
End [/COLOR][COLOR=#007700]Try
[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Function
[/COLOR][color=#0000bb][/color][/COLOR]
شرح الدالة:
تحتوي الدالة على معامل واحد فقط من نوع String تضع فيه نص عمليتك الحسابية وليكن 1+1-1 وهي تدعم المعاملات التالية للعمليات الحسابية داخل النص (+),(-),(*),(/),(^).
كيفية إستخدام الدالة:
ضع الدالة داخل وحدة Module أو داخل الـ Form خارج اي أحدث او إجراءات وبعدها يُمكنك إستدعائها بالطريقة التالية:
لنتفترض أننا نُريد تطبيق العملية الحسابية التالية:
كود :
[color=#000000][COLOR=#0000bb]100[/color][color=#007700]^[/color][color=#0000bb]2[/color][color=#007700]+[/color][color=#0000bb]1762[/color][color=#007700]-[/color][color=#0000bb]1000[/color][color=#007700]*[/color][color=#0000bb]4[/color][color=#007700]/[/color][COLOR=#0000bb]4
[/COLOR][/COLOR]
فيُكفيك السطر التالي بإستخدام الدالة DynamicCalculate :
كود :
[color=#000000][COLOR=#0000bb]TextBox1[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]= [/color][color=#0000bb]DynamicCalculate[/color][color=#007700]([/color][color=#dd0000]"100^2+1762-1000*4/4"[/color][COLOR=#007700])
[/COLOR][color=#0000bb][/color][/COLOR]
وبذلك تحصل على ناتج العملية السابقة داخل TextBox1
أتمنى أن تستفيدوا من الدالة , ولا تنسـونا من صالح دعائكم
والســلام عليكم ورحمة الله وبركاته