آلة حاسبة بسيطة بالدلفي
#3
كود :
http://up102.arabsh.com/my/9d62eab.png
في الأخير نحصل على ما يلي:
كود :
http://up102.arabsh.com/my/34cb54b.gif
لاحظ أننا قد غيرنا في قياسات زرين هما C و =
C: Width: 70 =: Height: 70
الآن انتهينا من الواجهة و سننتقل إلى البرمجة.
ننقر على Code في الأسفل أو بكل بساطة F12

نعود قليلا إلى الواجهة F12
ننقر مرتين على 0 (B0) فنحصل على
كود :
http://up103.arabsh.com/files/hx0cltdw259slza9prfe.jpg
سأتوقف قليلا للشرح بسيط في البرمجة غرضية التوجه
في البرمجة العادية للتطبيق المثال الآلة الحاسبة سوف نقوم بكتابة شفرة لكل زر ذات رقم
أي للزر 0 سنكتب
كود :
procedure TForm1.B0Click(Sender: TObject) ; begin Edit1.Text := Edit1.Text + ‘0’ ; end;
لكن في البرمجة غرضية التوجه سوف نقوم بكتابة إجراء (procedure) واحد بحيث يقوم بعمل 10 أزرار باستغلال (Sender : TObject) الظاهر في الإجراء حيث خانة الكتابة Edit1 سوف تجمع الكتابة السابقة لها و تعبير الزر (caption) أي

كود :
Edit1.Text := Edit1.Text + (Sender as TButton).Caption

وهذا السطر سيكون في الإجراء السابق ويعبر عن كل الأزرار حين النقر عليها، أي

B1 : OnClick : B0Click
B2 : OnClick : B0Click
B3 : OnClick : B0Click
…
B8 : OnClick : B0Click
B9 : OnClick : B0Click
و سنحصل على:
كود :
http://up103.arabsh.com/files/d3dh6k6nbpyuqpoq0d9h.jpg
ثم نذهب بالنسبة لكل زر من 1 حتى 9 إلى Event ونختار من قائمة الخاصة بـ OnClick الإجراء B0Click
كود :
http://up103.arabsh.com/files/oympimuxxq712r9tr5wz.jpg

الآن تذهب إلى الزر c ، ننقر عليه مرتين ونكتب الكود التالي:
كود :
Edit1.Text := '0'
بالنسبة لزر المؤشر SIGNAL ننقر مرتين عليه ثم نكتب الكود :
كود :
Edit1.Text := FloatToStr(- StrToFloat(Edit1.Text))
FloatToStr: تحول العدد الصحيح Float إلى متغير كتابي String

StrToFloat: تحول متغير كتابي String إلى العدد الصحيح Float
ننتقل الآن إلى العمليات
نصعد في الكود حتى نجد
كود :
var Form1: TForm1;
نضيف المتغير Operation وإذا أردنا أن نحدد عملية الجمع كعملية أساسية عندما لا يحدد المستعمل ماذا يريد يصبح لدينا

كود :
var Form1: TForm1; Operation : Integer = 4 ;


الآن ننقر مرتين على الزر / أو BDiv و نكتب الكود :
إذا كان Edit1.Text غير فارغ إذاً n1 تأخذ قيمة Edit1.Text على شكل عدد صحيح
Operation تأخذ قيمة Tag الخاص بزر العملية المختارة

Edit1 تصبح فارغة
كود :
If Edit1.Text <>'' Then n1 := StrToFloat(Edit1.Text) ; Operation := (Sender as TButton).Tag ; Edit1.Clear ;
ثم بالنسبة لأزرار *، -، + نذهب إلى Event ونختار من قائمة الخاصة بـ OnClick الإجراء BivClick
أما الزر الفاصلة ننقر مرتين على BVer ثم نضع الكود:

كود :
Edit1.Text := Edit1.Text + DecimalSeparator;

حتى الآن لقد قمنا بالعمل البسيط، ولكي نواصل لا بد من إنشاء متغيرين صحيحين n1 و n2
بعد Var
كود :
var Form1: TForm1; Operation : Integer = 4 ; N1 : Real = 0 ; N2 : Real = 0 ;

نلاحظ "=0" وهي توجه المصنف compiler أنه عند إنشاء المتغيرين أعطهم العدد 0، وبهذا سيكون لدينا n1=0 و n2=0 في البداية
الآن النتيجة:

الإجراء كما يلي:
إذا كانت قيمة edit1.Text فارغة إذاَ Edit1.Text تأخذ القيمة '0'
N2 تأخذ قيمة Edit1.Text على شكل عدد صحيح
حالة Operation من

[INDENT]1: إذا كانت قيمة n1 و n2 تساويان الصفر إذاَ[/INDENT]

[INDENT][INDENT]أظهر نافذة خطأ تحتوي على الرسالة 'نتيجة العملية غير محددة'

خروج من الإجراء[/INDENT][/INDENT]

[INDENT]وإلا إذا كانت قيمة n2 تساوي الصفر إذاَ[/INDENT]

[INDENT] أظهر نافذة خطأ تحتوي على الرسالة ' القسمة على الصفر مستحيلة '

خروج من الإجراء

وإلا النتيجة = n1 /n2[/INDENT]

[INDENT] 2: النتيجة = n1 ×n2

3: النتيجة = n1 -n2

4: النتيجة = n1 +n2
[/INDENT]
نهاية الحالة

Edit1.Text تأخذ قيمة النتيجة على شكل كتابة

كود :
procedure TForm1.BEgalClick(Sender: TObject); begin if Edit1.Text = '' Then Edit1.Text := '0'; n2 := StrToFloat(Edit1.Text); Case Operation of 1 : begin if (n1 = 0) and (n2 = 0) then begin messagedlg('نتيجة العملية غير محددة',mtError,[mbOk],-1); exit end else if n2 = 0 then begin messagedlg('القسمة على الصفر مستحيلة',mtError,[mbOk],-1); exit end else Resultat := n1/n2; end; 2 : Resultat := n1*n2; 3 : Resultat := n1-n2; 4 : Resultat := n1+n2; end; Edit1.Text := FloatToStr(Resultat); end;

الآن البرمجة عندما يدخل المستعمل الأرقام عبر لوحة المفاتيح:

للتحكم في إدخال لوحة المفاتيح هناك إجراء يساعدنا للمزيد أنظر

http://www.delphi4arab.net/forum/showthread.php?tid=5



ننقر على Form1 مرة واحدة ثم نذهب إلى Event و بالتحديد OnKeyPress ثم ننقر مرتين على الخانة المواجهة

نكتب الكود التالي:

كود :
if key in ['+','-','*','/'] then begin if key = '+' then BOper(BAdd) else if key = '-' then BOper(BDiff) else if key = '*' then BOper(BMult) else if key = '/' then BOper(BQuot); Key := #0; exit; end; if Key in ['=', #13] then begin BEgaleClick(BEgale); Key := #0; exit; end; if key in ['.',','] then begin key := DecimalSeparator; end; if not (Key in [#8, '0'..'9', DecimalSeparator]) then Key := #0;
في الأخير ننقر مرة واحدة على الواجهة Form ثم نتوجه إلى Properties عند BorderIcons نعطي لـ biMaxisimize القيمة False
ملاحظة: البرنامج غير كامل على القراء بعد التطبيق إكتشاف الأخطاء سواء من الناحية البرمجية أو من ناحية عمله في نظام التشغيل
وأرحب بكل التعليقات

تحياتي
الرد


الردود في هذا الموضوع
آلة حاسبة بسيطة بالدلفي - بواسطة merouane - 21-02-2008, 11:28 PM
آلة حاسبة بسيطة بالدلفي - بواسطة merouane - 22-02-2008, 12:12 AM
آلة حاسبة بسيطة بالدلفي - بواسطة merouane - 22-02-2008, 12:31 AM
آلة حاسبة بسيطة بالدلفي - بواسطة merouane - 22-02-2008, 12:56 AM
آلة حاسبة بسيطة بالدلفي - بواسطة Free_M - 06-12-2008, 02:29 PM
آلة حاسبة بسيطة بالدلفي - بواسطة kachwahed - 20-03-2010, 10:13 AM
آلة حاسبة بسيطة بالدلفي - بواسطة Kamal120 - 04-03-2012, 04:56 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم