delphi4arab منتديات دلفي للعرب
اتعامل مع StringGrid و اريد التنقل - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : اتعامل مع StringGrid و اريد التنقل (/showthread.php?tid=11795)

الصفحات: 1 2 3 4


RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 04-02-2022

فهمت المشكلة المشكل انه كان فيه 10 صفوف يجب ان تملأ كاملة حتى تتم عملية الجمع ؟
يعني هناك مشكلة متلا ماذا لو لدينا خلية واحد او اتنان او تلاتة هل يجب ان املائها كلها ؟
كيف اجعل الكود اذا كانت الخلية فارغة اعطيها قيمة صفر او يتجهلها افضل
لانه في الطبعة ستظر 0

بارك الله فيك على المجهود الجبار


RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 04-02-2022

نعم يجب ملؤها جميعها لحساب النتيجة بطريقة امنة و لقد ذكرت ذلك في السابق اما ان كنت تريد تتجاهل الخانات الفارغة فهاذا اسهل


كود :
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


RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 04-02-2022

اشغل الحمد لله في ميزان حسناتك

بخصوص جمع الاعداد التي تحتوي على فاصلة هل يكفي تغير StrToFloatDef الى StrToFloat ام كل دالة لها طريقة عملها ؟

شكرا اخي الكريم ساعتدني كتيرا جزاك الله خيرا


RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 04-02-2022

نعم كلتا الدالتين للاعداد الحقيقية و التي قد تحتوي فاصلة StrToFloatDef تعمل عندما تكون القراءة غير مهمة في حال ادخال text لا يمثل عدد فترسل القيمة المحددة سلفا عادة تكون الصفر اما StrToFloat فتلزم بادخال عدد و الا فترسل رسالة تحذير و يتوقف البرنامج ,,,هناك نسختين اخريين للاعداد الصحيحة StrToIntDef و StrToInt ,,,

ملاحظة مهمة ان اردت اعتماد الكود في حال ادخال قيمة ثم الخروج مباشرة من StringGrid كالضغط على زر button او الكتابة في edit فان الحساب لا يتم,, اذا ينبغي وضع كود الحساب في دالة منفصلة ثم ستعماله على مرتين الاولى فى OnSelectCell و الثانية في OnExit انظر في الملف الذي في الرابط في التعليق السابق...


RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 04-02-2022

<p>[صورة: Capture.jpg]<br><br><br>نفس الشيئ لا يقوم بحساب الاعداد التى بها فاصلة&nbsp;</p>


RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 04-02-2022

نعم انا استعملت الاعداد الصحيحة باستعمال StrToIntDef ....فعلت ذالك لان الاعداد الفاصلة لها مشكل مع حرف الفاصلة اي احيانا هنا من يستعمل . و هناك ,يسمى Decimalseparator و هذه تسبب احيانا مشاكل لهذا فضلت ان اكتب مثال للاعداد بدون فاصلة... هذا ليس مشكل يمكنك اعادة كود السابق للاعداد الفاصلة..انقله الى الدلة Calculate


RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 04-02-2022

وهو كذالك المشكلة يجب عدم استخدام النقطة التي في لوح المفاتيح الموجودة مع الارقام بل استخدام فاصلة الموجودة مع الحروف

اريد اظهار الارقام بهذا الشكل FormatFloat('#,##0.00' الموجودة في عمود StringGrid1 ؟

وجدت هذا الشخص قام بها سابقا لكن لم استطع استخلاص الكود

https://delphi4arab.net/forum/showthread.php?tid=10827&highlight=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>


RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 04-02-2022

إقتباس :وهو كذالك المشكلة يجب عدم استخدام النقطة التي في لوح المفاتيح الموجودة مع الارقام بل استخدام فاصلة الموجودة مع الحرو
ف

البرنامج يقوم بقراءة الاعدادت اللغة و التاريخ و الارقام في الحاسوب اذا الامر يتعلق بالاعدادات الخارجية و لكن يمكن تغير ذلك بوضع كود  في FormCreate
كود :
Decimalseparator : ='.'

بنسبة للفرمات اظن انها تعمل على العمود الرابع وليس الاول حاول تغير الى ACol=0 ..اشك انها ستعمل...غدا ان شاء الله.


RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 04-02-2022

بانسبة لنقطة حللت المشكلة وجدت كود يقوم بتحويل النقطة الى فاصلة عنذ الضغط الحمد لله لم انتبه حتى اخبرتني انت كنت طوال الوقت اكتب نقطة
ولا تظهر اي نتيجة مهما عدلت الكود

هل يمكنك تجريب كود تحويل العمود الى مئات عندك لم يشتغل عندي اكيد وضعت 0


RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 05-02-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;