![]() |
|
اتعامل مع 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) |
RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 05-02-2022 <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) ;RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 09-02-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;RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 09-02-2022 شكرا جزيلا اخي الكريم هذا ما كنت بحاجة ايه لو متلا اردت اضافة زر حذف او اضافة سطر في StringGrid1 كيف اقوم بذلك متلا لدي جدول به 3 اعمدة في هذا الجدول به صفوف وقفت على سطر واردت حذفه او اضافة قبله سطر ؟ RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 10-02-2022 على مايبدو انت تحاول كتابة تطبيق قاعدة بيانات او شيء من هذا القبيل فكل المشاكل التي ذكرتها تم معالجتها في المكون TDBGrid لذا يمكنك استعمال ادوات و مكونات قاعدة بيانات صغيرة و سهلة اما باستعمال TClientDataSet او TADO والتي تسهل لك عملية الطباعة ان كنت تحتاتها,, إقتباس :لو متلا اردت اضافة زر حذف او اضافة سطر في StringGrid1 كيف اقوم بذلك لقد قمت باضافت كلاس 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;RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 11-02-2022 بطل والله جزاك الله خيرا بانسبة لتطبيق انا لا اريد التعامل مع dbgrid لانه عند التكابة في الخلية يتم الحفظ بشكل تلقائ في قاعدة البينات دون ان تطلب ذالك StringGrid1 احسن اريد بعد ملئها ان يقوم المستخدم بحفظها على راحته او يقوم بطباعتها فيما بعد اريد وضع جدولين في قاعدة البينات احدهم فيها مستخدم id user متلا والتاني خلايا StringGrid1 كل مستخدم عند له عدد من StringGrid1 خاصة به نفس فكرة masterdétail بانسبة للكودين السابقين هذا ما اردته يبقى مشكل يواجهني متلا عندا خذف سطر اريد ان يبقى التحديد في السطر الذي تحته لانه بعد الحذف اكيد سيصعد السطر السلفي الى الاعلى او يبقى في مكانه مدام السطر السفلي هو الذي سيصعد الانه الان يتوجه الى اخر خلية في StringGrid1 نفس الشئ عند اضافة سطر جديد اريد ان يبقى التحديد في السطر الذي فوق اي السطر الجديد RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 11-02-2022 إقتباس :انسبة لتطبيق انا لا اريد التعامل مع dbgrid لانه عند التكابة في الخلية يتم الحفظ بشكل تلقائ في قاعدة البينات دون ان تطلب ذالكلاباس ان كان التعامل مع StringGrid تفي بالغرض لاحاجة لاعادة كتابت البرنامج خاصة اذا كنت قطعت شوط بعيد ,,,المهم في حال اردت تعامل مع قاعدة بيانات دون تغيير محتواها يمكنك استعمال StartTransaction, عند بدء عملية تحرير المعطيات ثم مناداة Commit لتخزين التغييرات في قاعدة البيانات او Rollback لالغاء كل شيء ,,,بالتوفيق ان شاء الله إقتباس :متلا عندا خذف سطر اريد ان يبقى التحديد في السطر الذي تحته لانه بعد الحذف اكيد سيصعد السطر السلفي الى الاعلى او يبقى في مكانه الكود السابق كان فيه خطا بسيط في حال حذف ثم اذافة سطر فهذا السطر الجديد لايكون فارغ لذا كان يجب حذف معطيات المرافقة,,, اما بالنسبة لاختيار السطر بعد الحذف فقط قم بتسجيل ترتيب 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;RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 12-02-2022 عمل ممتاز في ميزان حسناك ان شاء الله ظهر مشكل لم انتبه له من قبل عند حذف خلية اكيد سيصعد العموذ السفلي وهذا مارادته المشكل<br>عند تحديد الخلية يظهر الرقم من جهتين يمنى ويسرى لانه في الوضع الافتراضي يكون يسار ونحن قمنا بجعله يمين كيف يمكن حل هذا الشكل عند التحديد لايظهر سوى من الجهة اليمنى
RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 12-02-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;RE: اتعامل مع StringGrid و اريد التنقل - Med-01 - 12-02-2022 السلام علكيم اخي الكريم شكرا لكل مجهود تبذله من اجل المساعدة ان الله لايضيع اجر المسحنين هل جزاء الاحسان الا الاحسان في ميزان حسناتك يارب بخصوص الكود قم بتحميل الكود br> https://www.casimages.com/f_get.php?f=8X7IBnRL4Xb املاء متلا خليتين متلا 100 و 200 اي رقم لا يهم بعدها ضع المؤشر في اول خلية اضغط على shift و سهم الاسفل لتحديد الخليا سيظهر اما 100 رقم 100 اخر و امام 200 رقم 200 اخر
RE: اتعامل مع StringGrid و اريد التنقل - Ndagor - 13-02-2022 نعم لقد فهمت و رايت ذلك السلوك في المثال الذي ارسلته و لكن اعتقد ان مشكل في نسخة الدلفي لان البرنامج المصمم في D2009 لاتظهر فيه هذه المشكلة انظر الى ملف D2009في الملف المرفق,,, لقد قمت باجراء بعض التعديلات لالغاء عملية كتابة النص لاصلية ل TStringGrid و الاكتفاء فقط بالكود DrawCell ,,, https://www.casimages.com/f_get.php?f=M8X3NOLW4Xb |