المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
04-02-2022, 05:56 PM
(آخر تعديل لهذه المشاركة: 04-02-2022, 06:05 PM بواسطة Med-01.)
فهمت المشكلة المشكل انه كان فيه 10 صفوف يجب ان تملأ كاملة حتى تتم عملية الجمع ؟
يعني هناك مشكلة متلا ماذا لو لدينا خلية واحد او اتنان او تلاتة هل يجب ان املائها كلها ؟
كيف اجعل الكود اذا كانت الخلية فارغة اعطيها قيمة صفر او يتجهلها افضل
لانه في الطبعة ستظر 0
بارك الله فيك على المجهود الجبار
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
04-02-2022, 06:21 PM
(آخر تعديل لهذه المشاركة: 04-02-2022, 06:52 PM بواسطة Ndagor.)
نعم يجب ملؤها جميعها لحساب النتيجة بطريقة امنة و لقد ذكرت ذلك في السابق اما ان كنت تريد تتجاهل الخانات الفارغة فهاذا اسهل
كود :
procedure TForm5.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var
I:integer;
Total:Double;
begin
Total:= 0.0;
with StringGrid1 do
for I := FixedRows to RowCount - 1 do
Total:=Total + StrToFloatDef(Cells[FixedCols+0,I],0);
Edit1.Text:=FloatToStr(Total);
end;
إقتباس :كيف اجعل الكود اذا كانت الخلية فارغة اعطيها قيمة صفر او يتجهلها افضل
كما قلت سابقا ابحث في help عن الفرق بين TryStrToFloat StrToFloatDef StrToFloat
ملف
https://www.casimages.com/f_get.php?f=gpyBsuK61Xb
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
اشغل الحمد لله في ميزان حسناتك
بخصوص جمع الاعداد التي تحتوي على فاصلة هل يكفي تغير StrToFloatDef الى StrToFloat ام كل دالة لها طريقة عملها ؟
شكرا اخي الكريم ساعتدني كتيرا جزاك الله خيرا
كل من 1 user says قال شكرا ل Med-01 على المشاركة المفيدة1 user says Thank You to Med-01 for this post
• Ndagor
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
04-02-2022, 08:14 PM
(آخر تعديل لهذه المشاركة: 04-02-2022, 08:19 PM بواسطة Ndagor.)
نعم كلتا الدالتين للاعداد الحقيقية و التي قد تحتوي فاصلة StrToFloatDef تعمل عندما تكون القراءة غير مهمة في حال ادخال text لا يمثل عدد فترسل القيمة المحددة سلفا عادة تكون الصفر اما StrToFloat فتلزم بادخال عدد و الا فترسل رسالة تحذير و يتوقف البرنامج ,,,هناك نسختين اخريين للاعداد الصحيحة StrToIntDef و StrToInt ,,,
ملاحظة مهمة ان اردت اعتماد الكود في حال ادخال قيمة ثم الخروج مباشرة من StringGrid كالضغط على زر button او الكتابة في edit فان الحساب لا يتم,, اذا ينبغي وضع كود الحساب في دالة منفصلة ثم ستعماله على مرتين الاولى فى OnSelectCell و الثانية في OnExit انظر في الملف الذي في الرابط في التعليق السابق...
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
<p>
![[صورة: Capture.jpg]](https://i.postimg.cc/FR3Qt7RG/Capture.jpg)
<br><br><br>نفس الشيئ لا يقوم بحساب الاعداد التى بها فاصلة </p>
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
04-02-2022, 09:01 PM
(آخر تعديل لهذه المشاركة: 04-02-2022, 09:12 PM بواسطة Ndagor.)
نعم انا استعملت الاعداد الصحيحة باستعمال StrToIntDef ....فعلت ذالك لان الاعداد الفاصلة لها مشكل مع حرف الفاصلة اي احيانا هنا من يستعمل . و هناك ,يسمى Decimalseparator و هذه تسبب احيانا مشاكل لهذا فضلت ان اكتب مثال للاعداد بدون فاصلة... هذا ليس مشكل يمكنك اعادة كود السابق للاعداد الفاصلة..انقله الى الدلة Calculate
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
04-02-2022, 09:26 PM
(آخر تعديل لهذه المشاركة: 04-02-2022, 10:25 PM بواسطة Med-01.)
وهو كذالك المشكلة يجب عدم استخدام النقطة التي في لوح المفاتيح الموجودة مع الارقام بل استخدام فاصلة الموجودة مع الحروف
اريد اظهار الارقام بهذا الشكل FormatFloat('#,##0.00' الموجودة في عمود StringGrid1 ؟
وجدت هذا الشخص قام بها سابقا لكن لم استطع استخلاص الكود
https://delphi4arab.net/forum/showthread...StringGrid
<p>
حاولت تجريب هذا الكود ولم يشتغل هل يمكن المشكلة من النسخة ؟
<br><br>
كود :
procedure TfrmMain.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if ACol = 3 then // le 3 est un exemple , faut voir le numéro de ta colonne
With TStringGrid(Sender) do
Cells[ACol,ARow] := FormatFloat('0.00', StrToFloat(Cells[ACol,ARow],0.00));
end;
<br></p>
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
04-02-2022, 11:23 PM
(آخر تعديل لهذه المشاركة: 04-02-2022, 11:28 PM بواسطة Ndagor.)
إقتباس :وهو كذالك المشكلة يجب عدم استخدام النقطة التي في لوح المفاتيح الموجودة مع الارقام بل استخدام فاصلة الموجودة مع الحرو
ف
البرنامج يقوم بقراءة الاعدادت اللغة و التاريخ و الارقام في الحاسوب اذا الامر يتعلق بالاعدادات الخارجية و لكن يمكن تغير ذلك بوضع كود في FormCreate
كود :
Decimalseparator : ='.'
بنسبة للفرمات اظن انها تعمل على العمود الرابع وليس الاول حاول تغير الى ACol=0 ..اشك انها ستعمل...غدا ان شاء الله.
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
بانسبة لنقطة حللت المشكلة وجدت كود يقوم بتحويل النقطة الى فاصلة عنذ الضغط الحمد لله لم انتبه حتى اخبرتني انت كنت طوال الوقت اكتب نقطة
ولا تظهر اي نتيجة مهما عدلت الكود
هل يمكنك تجريب كود تحويل العمود الى مئات عندك لم يشتغل عندي اكيد وضعت 0
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
إقتباس :هل يمكنك تجريب كود تحويل العمود الى مئات عندك لم يشتغل عندي اكيد وضعت 0
جرب هذا الكود OnDrawCell ,يعمل عندي
كود :
var
Value:Double;
begin
with StringGrid1 do
if (ACol=0) then
begin
Value :=StrToFloatDef(Cells[ACol, ARow],0);
Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2,
FormatFloat('0.00',Value));
end;
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01