المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
<p>اشتغل لاكن كان لدي كود في الاول من اجل تغير مسار محادات الخلية من الى اليمين الان بعد اضافة الكود الذي وضعته اصبح لا يشتغل الكل ياتي على اليسار بدل اليمين<br>مشكلة اخر اصبح يقوم بملئ جميع الخليا ب 0.00 بشكل تلقائي ؟؟؟<br><br><br>الكود الذي استخدمه من اجل المحدات الى اليمين <br><br> كود : S := StringGrid1.Cells[ACol, ARow];
SavedAlign := SetTextAlign(StringGrid1.Canvas.Handle, TA_RIGHT); // TA_RIGHT TA_CENTER
//StringGrid1.Canvas.TextRect(Rect, Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S); // TA_CENTER
StringGrid1.Canvas.TextRect(Rect, Rect.Right - 2, Rect.Top +5, S); // TA_RIGHT
SetTextAlign(StringGrid1.Canvas.Handle, SavedAlign) ;
<br></p>
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
معذرة على الرد المتأخر ,,, في الاول ان كان التطبيق بالعربية فاغير BidiMode الى bdRightToLeft فسوف يتغير Alignement الى اليمين بصفة الية و كذلك العمود الاول سيصبح على اليمين,,
إقتباس :مشكلة اخر اصبح يقوم بملئ جميع الخليا ب 0.00 بشكل تلقائي ؟؟؟
عادة في معظم التطبيقات يتم اظهار قيم العمود بنفس الطريقة ,,,ولكن لا اعلم ما تريد و لا طبيعة تطبيقك ,,,المهم هذا ليس مشكل كبير ان كنت تريد فقط اظهار القيم الصحيحة
كود : procedure TForm5.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Value:Double;
W:Integer;
S:string;
begin
with StringGrid1 do
if (ACol=0) then
begin
if TryStrToFloat(Cells[ACol, ARow],Value) then
begin
S:=FormatFloat('0.00',Value);
W:=Canvas.TextWidth(S);
Canvas.TextRect(Rect, Rect.Right-W-2, Rect.Top+2,S);
end;
end;
end;
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
09-02-2022, 09:09 PM
(آخر تعديل لهذه المشاركة: 09-02-2022, 09:41 PM بواسطة Med-01.)
شكرا جزيلا اخي الكريم هذا ما كنت بحاجة ايه
لو متلا اردت اضافة زر حذف او اضافة سطر في StringGrid1 كيف اقوم بذلك
متلا لدي جدول به 3 اعمدة في هذا الجدول به صفوف وقفت على سطر واردت حذفه او اضافة قبله سطر ؟
كل من 1 user says قال شكرا ل Med-01 على المشاركة المفيدة1 user says Thank You to Med-01 for this post
• Ndagor
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
على مايبدو انت تحاول كتابة تطبيق قاعدة بيانات او شيء من هذا القبيل فكل المشاكل التي ذكرتها تم معالجتها في المكون TDBGrid لذا يمكنك استعمال ادوات و مكونات قاعدة بيانات صغيرة و سهلة اما باستعمال TClientDataSet او TADO والتي تسهل لك عملية الطباعة ان كنت تحتاتها,,
إقتباس :لو متلا اردت اضافة زر حذف او اضافة سطر في StringGrid1 كيف اقوم بذلك
متلا لدي جدول به 3 اعمدة في هذا الجدول به صفوف وقفت على سطر واردت حذفه او اضافة قبله سطر ؟
لقد قمت باضافت كلاس TU فارغ من اجل الولوج الى الدالتين المخفيتين DeleteRow و MoveRow من اجل حذف و اضافة سطر ,,,
كود : type
TU=class(TStringGrid)
end;
procedure TForm5.DeleteRow();
begin
with TU(StringGrid1) do
begin
if RowCount > 1 then
DeleteRow(Row)
else
Rows[Row].Clear;
end;
end;
procedure TForm5.InsertRow();
begin
with TU(StringGrid1) do
begin
RowCount:=RowCount+1;
MoveRow(RowCount-1,Row);
end;
end;
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
بطل والله جزاك الله خيرا
بانسبة لتطبيق انا لا اريد التعامل مع dbgrid لانه عند التكابة في الخلية يتم الحفظ بشكل تلقائ في قاعدة البينات دون ان تطلب ذالك
StringGrid1 احسن اريد بعد ملئها ان يقوم المستخدم بحفظها على راحته او يقوم بطباعتها فيما بعد اريد وضع جدولين في قاعدة البينات
احدهم فيها مستخدم id user متلا والتاني خلايا StringGrid1 كل مستخدم عند له عدد من StringGrid1 خاصة به
نفس فكرة masterdétail
بانسبة للكودين السابقين هذا ما اردته يبقى مشكل يواجهني
متلا عندا خذف سطر اريد ان يبقى التحديد في السطر الذي تحته لانه بعد الحذف اكيد سيصعد السطر السلفي الى الاعلى او يبقى في مكانه
مدام السطر السفلي هو الذي سيصعد الانه الان يتوجه الى اخر خلية في StringGrid1
نفس الشئ عند اضافة سطر جديد اريد ان يبقى التحديد في السطر الذي فوق اي السطر الجديد
كل من 1 user says قال شكرا ل Med-01 على المشاركة المفيدة1 user says Thank You to Med-01 for this post
• Ndagor
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
إقتباس :انسبة لتطبيق انا لا اريد التعامل مع dbgrid لانه عند التكابة في الخلية يتم الحفظ بشكل تلقائ في قاعدة البينات دون ان تطلب ذالك
لاباس ان كان التعامل مع StringGrid تفي بالغرض لاحاجة لاعادة كتابت البرنامج خاصة اذا كنت قطعت شوط بعيد ,,,المهم في حال اردت تعامل مع قاعدة بيانات دون تغيير محتواها يمكنك استعمال StartTransaction, عند بدء عملية تحرير المعطيات ثم مناداة Commit لتخزين التغييرات في قاعدة البيانات او Rollback لالغاء كل شيء ,,,بالتوفيق ان شاء الله
إقتباس :متلا عندا خذف سطر اريد ان يبقى التحديد في السطر الذي تحته لانه بعد الحذف اكيد سيصعد السطر السلفي الى الاعلى او يبقى في مكانه
مدام السطر السفلي هو الذي سيصعد الانه الان يتوجه الى اخر خلية في StringGrid1
نفس الشئ عند اضافة سطر جديد اريد ان يبقى التحديد في السطر الذي فوق اي السطر الجديد
الكود السابق كان فيه خطا بسيط في حال حذف ثم اذافة سطر فهذا السطر الجديد لايكون فارغ لذا كان يجب حذف معطيات المرافقة,,, اما بالنسبة لاختيار السطر بعد الحذف فقط قم بتسجيل ترتيب Row السطر الحالي في متغير محلي قبل الحذف او الاضافة و بعد اجراء العملية نعيد Row الى ترتيب الاصلي ,,على كل حال كما في Excel يمكنك تغير هدا السلوك على حسب الطريقة التي تراها مناسبة
كود : type
TU=class(TStringGrid)
end;
procedure TForm5.DeleteRow();
var
Curr:integer;
begin
with TU(StringGrid1) do
begin
Curr:=Row;
Rows[Row].Clear;
if RowCount > 1 then
DeleteRow(Row);
if Curr = RowCount then
dec(Curr);
Row:=Curr;
end;
end;
procedure TForm5.InsertRow();
var
Curr:integer;
begin
with TU(StringGrid1) do
begin
Curr:=Row;
RowCount:=RowCount+1;
MoveRow(RowCount-1,Row);
Row :=Curr;
Rows[Row].Clear;
end;
end;
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
12-02-2022, 01:30 AM
(آخر تعديل لهذه المشاركة: 12-02-2022, 01:32 AM بواسطة Med-01.)
عمل ممتاز في ميزان حسناك ان شاء الله
ظهر مشكل لم انتبه له من قبل عند حذف خلية اكيد سيصعد العموذ السفلي وهذا مارادته المشكل<br>عند تحديد الخلية يظهر الرقم من جهتين يمنى ويسرى لانه في الوضع الافتراضي يكون يسار ونحن قمنا بجعله يمين كيف يمكن حل هذا الشكل عند التحديد لايظهر سوى من الجهة اليمنى
كل من 1 user says قال شكرا ل Med-01 على المشاركة المفيدة1 user says Thank You to Med-01 for this post
• Ndagor
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
لست متاكد اني فهمت ماقلت و لكن اظن ان النص الذي يظهر مرتين راجع الى عدم مسح الخلية قبل الكتابة ,,,في الدالة OnDrawCellلذا اضافة سطرين قبل عملية الكتابة
كود : if TryStrToFloat(Cells[ACol, ARow],Value) then
begin
S:=FormatFloat('0.00',Value);
W:=Canvas.TextWidth(S);
Canvas.Brush.Color:=Color; // <---
Canvas.FillRect(Rect); // <---
Canvas.TextRect(Rect, Rect.Right-W-2, Rect.Top+2,S);
end;
المشاركات : 126
المواضيع 27
:
: 63
الإنتساب : Jun 2013
12-02-2022, 11:36 PM
(آخر تعديل لهذه المشاركة: 12-02-2022, 11:41 PM بواسطة Med-01.)
السلام علكيم اخي الكريم شكرا لكل مجهود تبذله من اجل المساعدة
ان الله لايضيع اجر المسحنين
هل جزاء الاحسان الا الاحسان
في ميزان حسناتك يارب
بخصوص الكود قم بتحميل الكود br>
https://www.casimages.com/f_get.php?f=8X7IBnRL4Xb
املاء متلا خليتين متلا 100 و 200 اي رقم لا يهم بعدها ضع المؤشر في اول خلية اضغط على shift
و سهم الاسفل لتحديد الخليا سيظهر اما 100 رقم 100 اخر و امام 200 رقم 200 اخر
المشاركات : 143
المواضيع 4
:
: 26
الإنتساب : Feb 2022
نعم لقد فهمت و رايت ذلك السلوك في المثال الذي ارسلته و لكن اعتقد ان مشكل في نسخة الدلفي لان البرنامج المصمم في D2009 لاتظهر فيه هذه المشكلة انظر الى ملف D2009في الملف المرفق,,,
لقد قمت باجراء بعض التعديلات لالغاء عملية كتابة النص لاصلية ل TStringGrid و الاكتفاء فقط بالكود DrawCell ,,,
https://www.casimages.com/f_get.php?f=M8X3NOLW4Xb
كل من 1 user says قال شكرا ل Ndagor على المشاركة المفيدة1 user says Thank You to Ndagor for this post
• Med-01
|