11-10-2013, 11:20 PM
السلام عليكم...
المشكلة ليست في الجملة الأخيرة، بل في واحدة أو أكثر من الجمل التي قبلها حيث تستعمل الدالة StrToInt. فإذا احتوت إحدى الـ Edit المذكورة على نص لا يمثل عدداً صحيحاً (مثلاً العدد 94.5 ليس عدداً صحيحاً) فإنه سيتسبب في حدوث خطأ بالرسالة التي ذكرتها.
الحل:
1. طالما أن القيم في مربعات النص قد تحتوي على كسور فاستعمل الدالة StrToFloat بدل StrToInt، مع تغيير نوع المتغيرات إلى Real أو Extended
2. أو - إذا كنت تريد التخلص من الكسور - فإما أن تستعمل الدالة Round لتقريب العدد الكسري، أو تستعمل الدالة Trun لحذف الكسر (كلتا الدالتين تعيد عدداً صحيحاً من النوع Int64):
* ملاحظة على الكود الأصلي: لا معنى لتعريف المتغير g كـ Extended و لا معنى لاستعمال الدالة FormatFloat بينما كل المتغيرات الداخلة في عملية الجمع من النوع Integer لأن النتيجة ستكون بالضرورة عدداً صحيحاً (طالما ليس هناك عملية قسمة).
نرجو الاستفادة و السلام.
المشكلة ليست في الجملة الأخيرة، بل في واحدة أو أكثر من الجمل التي قبلها حيث تستعمل الدالة StrToInt. فإذا احتوت إحدى الـ Edit المذكورة على نص لا يمثل عدداً صحيحاً (مثلاً العدد 94.5 ليس عدداً صحيحاً) فإنه سيتسبب في حدوث خطأ بالرسالة التي ذكرتها.
الحل:
1. طالما أن القيم في مربعات النص قد تحتوي على كسور فاستعمل الدالة StrToFloat بدل StrToInt، مع تغيير نوع المتغيرات إلى Real أو Extended
كود :
a := StrToFloat(Edit1.Text);2. أو - إذا كنت تريد التخلص من الكسور - فإما أن تستعمل الدالة Round لتقريب العدد الكسري، أو تستعمل الدالة Trun لحذف الكسر (كلتا الدالتين تعيد عدداً صحيحاً من النوع Int64):
كود :
a := Round(StrToFloat(Edit1.Text));
a := Trunc(StrToFloat(Edit1.Text));* ملاحظة على الكود الأصلي: لا معنى لتعريف المتغير g كـ Extended و لا معنى لاستعمال الدالة FormatFloat بينما كل المتغيرات الداخلة في عملية الجمع من النوع Integer لأن النتيجة ستكون بالضرورة عدداً صحيحاً (طالما ليس هناك عملية قسمة).
نرجو الاستفادة و السلام.

