![]() |
|
آلة حاسبة بسيطة بالدلفي - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13) +--- الموضوع : آلة حاسبة بسيطة بالدلفي (/showthread.php?tid=42) |
آلة حاسبة بسيطة بالدلفي - merouane - 21-02-2008 السلام عليكم هذا مثال لبرنامج آلة حاسبة مبرمجة بلغة الدلفي لقد حاولت جاهدا أن أبسط الشرح، و عذرا إذا كان التعبير قاصرا فلست متعودا على مثل هذه المقالات هدفي إثراء المنتدى للفائدة العامة أولا ، ثم تبسيط استعمال الدلفي للمبتدئين. نبدأ بسم الله سوف نستعمل دلفي 2006 1- مبادئ الحساب: [INDENT]- عملية الإدخال ستكون متسلسلة أي رقم يليه رقم أو عملية. - الأرقام من نوع العدد الصحيح. - حيز الكتابة (ظهور الأرقام) لا يقبل سوى الأرقام الطبيعية (0..9) ، الفاصلة و مؤشر العدد السالب - العمليات هي الجمع، الطرح، الضرب، القسمة و النتيجة[/INDENT] 2- الخوارزمية: [INDENT]- تهيئة (initialisation) الأرقام تكون العدد 0 (صفر) - إدخال الرقم عبارة عن الحرف السابق متبوع بالحرف الجديد. - العمليات عبارة عن متغير حيث (القسمة: 1، الضرب: 2، الطرح: 3، الجمع: 4)[/INDENT] 3- تصميم الشكل الخارجي: - إقلاع الدلفي 2006 - إنشاء برنامج جديد (win32) كود : http://up103.arabsh.com/files/b2vffuhcexlp562q4z6v.gif- ثم بعد ظهور form نعدل على قياساتها كالأتي: Height: 225 Width: 260 Caption: (حسب اللغة المرادة) مثلا Calculatrice كود : http://up103.arabsh.com/files/zs5es7ehpe8xumscrde3.gifنعدل على قياساتها كالأتي: Left : 10 Top : 10 Width : 230 BiDiMode : bdRightToLeft Text : نمحي الكتابة الموجودة كود : http://up103.arabsh.com/files/wupt1d0wlmx5dxirx4s2.gifهناك خدعة () في الدلفي بحيث تكفي نقرة واحدة بالفأرة لإضافة مكوِّن بعدد ما نريد. وهي الضغط على Shift و النقر على المكون في الوقت نفسه. أو – بكل بساطة - ننقر على المكون TButton ثم نذهب إلى الواجهة form وننقر بالفأرة مرة واحدة بحيث نحصل عل الأتي: كود : http://up103.arabsh.com/files/qqealkmdezxbml7x0slx.gifالآن نعدل على قياسات الزر: Left : 10 Top : 35 Width : 32 Height: 32 Caption : نمحي الكتابة الموجودة ثم نقوم بنسخ الزر (ctrl+c) أو النقر بالزر الأيمن ثم Edit ثم copy بعدها ننسخ (17 مرة) يتبع ..
آلة حاسبة بسيطة بالدلفي - محمد عبد العزيز - 21-02-2008 بسم الله الرحمن الرحيم بارك الله فيك اخي مروان تصدق كنت اكتب درس مشابه لكن باختلافات صغيرة استحدمت دلفي7 بدلا من 2006 استعملت TLabel بدلا من TEdit ولم استخدم الخاصية Tag ولم اغير اسماء الازرار اختلاف تام في الزر +/- وزر القاصلة وطريقة الحساب... وتفاصيا اخرى صغيرة ... لكن نفس الفكرة في استخدام Sender واجرائية واحدة لكل ازرار الارقام بانتظار درس مقبل والسلام عليكم ورحمة الله آلة حاسبة بسيطة بالدلفي - merouane - 22-02-2008 كود : http://up102.arabsh.com/my/9d62eab.pngكود : http://up102.arabsh.com/my/34cb54b.gifC: 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;كود : 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كود : http://up103.arabsh.com/files/oympimuxxq712r9tr5wz.jpgالآن تذهب إلى الزر c ، ننقر عليه مرتين ونكتب الكود التالي: كود : Edit1.Text := '0'كود : Edit1.Text := FloatToStr(- StrToFloat(Edit1.Text))StrToFloat: تحول متغير كتابي String إلى العدد الصحيح Float ننتقل الآن إلى العمليات نصعد في الكود حتى نجد كود : var
Form1: TForm1;كود : 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 ;أما الزر الفاصلة ننقر مرتين على 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;ملاحظة: البرنامج غير كامل على القراء بعد التطبيق إكتشاف الأخطاء سواء من الناحية البرمجية أو من ناحية عمله في نظام التشغيل وأرحب بكل التعليقات تحياتي آلة حاسبة بسيطة بالدلفي - merouane - 22-02-2008 السلام عليكم تصحيحا للأخطاء سهوا إقتباس :ثم بالنسبة لأزرار *، -، + نذهب إلى Event ونختار من قائمة الخاصة بـ OnClick الإجراء BivClick ثم بالنسبة لأزرار *، -، + نذهب إلى Event ونختار من قائمة الخاصة بـ OnClick الإجراء BDivClick هنا كنت برمجت بإنشاء إجراء BOper لكن للتسهيل حافظت على BDivClick كود : 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;التصحيح كود : if key in ['+','-','*','/'] then
begin
if key = '+' then BDivClick(BAdd)
else if key = '-' then BDivClick(BDiff)
else if key = '*' then BDivClick(BMult)
else if key = '/' then BDivClick(BDiv);
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;فعذرا
آلة حاسبة بسيطة بالدلفي - merouane - 22-02-2008 DeltaAziz كتب : وفيك بركة أخي DeltaAziz أود أن تضع درسك لأنك والظاهر أكثر تجربة مني في مجال الشروحات وأيضا لكي نتعلم منك ومن خبرتك تقبل تحياتي
آلة حاسبة بسيطة بالدلفي - Free_M - 06-12-2008 الف شكر اخ مروان على الشرح الاكثر من رائع
اتضحت لي الكثير من الامور بعد درسك والحمد لله كنت قد برمجة الة حاسبة لكن اغلب اكوادها كان بالباسكال شكرا شكرا مرة اخرى آلة حاسبة بسيطة بالدلفي - سفيان أبو أنس - 19-03-2010 شكرا على الدرس الرائع فقط عندي ملاحظة الآلة الحاسبة تجمع بين عددين فقط وهذه المشكلة حصلت معي لو وضعنا مثلا 3+3+3 ستعطيك النتيجة 6 لأنها مبرمجة لحساب n1 و n2 فقط يا ريت لو تطور الآلة الحاسبة أكثر جزاكم الله خيرا آلة حاسبة بسيطة بالدلفي - محمد عبد العزيز - 19-03-2010 إقتباس :لو وضعنا مثلا 3+3+3السلام عليكم ورحمة الله هذا درس للانطلاق وليس برنامج كامل على المتلقي التفكير بنفسه بالتكملة ان واجهتك مشكلة يمكنك طرح سؤال بقسم الاسئلة آلة حاسبة بسيطة بالدلفي - kachwahed - 20-03-2010 الأخ nabilsoft مرحبا بك في المنتدى هنا تجد آلة حاسبة تكاد تكون (تقريبا) مكتملة: http://www.delphi4arab.net/forum/showpost.php?p=3572&postcount=13 آلة حاسبة بسيطة بالدلفي - Kamal120 - 04-03-2012 و عليكم السلام و رحمة الله و بركاته شكرا لك اخي على الدرس و السورس و الله البراحة كنت فكرت في عمل مثل هذة الحاسبة و صممت الواجهة تقريبا بنفس هذا المثال قلت ساجرب نفسي مع ابسط شيء لاتعلم لكن عندما و صلت الى الاكواد حصلت شوي مع اني مبتدئ الحمد لله وجدت هذا الموضوع استفدت منك كثيرا بارك الله فيك و يزيدك علم على علم . تحية لك اخي العزيز |