delphi4arab منتديات دلفي للعرب
المحاذاة التلقائية و حساب عرض الأعمدة dbGrid المناسب للشاشة - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : دروس دلفي للمبتدئين (https://delphi4arab.net/forum/forumdisplay.php?fid=13)
+--- الموضوع : المحاذاة التلقائية و حساب عرض الأعمدة dbGrid المناسب للشاشة (/showthread.php?tid=8668)



المحاذاة التلقائية و حساب عرض الأعمدة dbGrid المناسب للشاشة - sniper0027 - 12-05-2017

مرحبا
جأتكم بطريقة رائعة لملائمة حجم الاعمد مع الشاشة بستعمال dbgrid عادي والتي لم اجد اي شخص قد تحدت عنها في المحتوى العربي فبعد بحث طويل وجدتها بالاجليزية
فقررت ان اعممها خاصتا اني سألت في المنتدى ولم يجبني احد ولاحيطكم علما اني غاظب بسبب الغيرعلى مسؤولي المنتدى لعدم اترائه في الآونة الاخيرة لاني تعلمة كثيرا منه في بداياتي لكنه لم يعد ينفعني الا قليلا
أولا اريد شكر المنتدى لانه رافقني ايام دراستي للدلفي وسوف اشارك بعض الدروس لأرد الجميل .
فل ندخل صلبة الموضوع
نضع هده procédure في الواجه الرئيسية تحت implementation كما في الصورة 01




.png   01.png (الحجم : 31.32 ك ب / التحميلات : 93)

هذه هي procedure

كود :
procedure AdjustColumnWidths(DBGrid: TDBGrid); var  TotalColumnWidth, ColumnCount, GridClientWidth, Filler, i: Integer; begin  ColumnCount := DBGrid.Columns.Count;  if ColumnCount = 0 then    Exit;  // compute total width used by grid columns and vertical lines if any  TotalColumnWidth := 0;  for i := 0 to ColumnCount-1 do    TotalColumnWidth := TotalColumnWidth + DBGrid.Columns[i].Width;  if dgColLines in DBGrid.Options then    // include vertical lines in total (one per column)    TotalColumnWidth := TotalColumnWidth + ColumnCount;  // compute grid client width by excluding vertical scroll bar, grid indicator,  // and grid border  GridClientWidth := DBGrid.Width - GetSystemMetrics(SM_CXVSCROLL);  if dgIndicator in DBGrid.Options then begin    GridClientWidth := GridClientWidth - IndicatorWidth;    if dgColLines in DBGrid.Options then      Dec(GridClientWidth);  end;  if DBGrid.BorderStyle = bsSingle then begin    if DBGrid.Ctl3D then // border is sunken (vertical border is 2 pixels wide)      GridClientWidth := GridClientWidth - 4    else // border is one-dimensional (vertical border is one pixel wide)      GridClientWidth := GridClientWidth - 2;  end;  // adjust column widths  if TotalColumnWidth < GridClientWidth then begin    Filler := (GridClientWidth - TotalColumnWidth) div ColumnCount;    for i := 0 to ColumnCount-1 do      DBGrid.Columns[i].Width := DBGrid.Columns[i].Width + Filler;  end  else if TotalColumnWidth > GridClientWidth then begin    Filler := (TotalColumnWidth - GridClientWidth) div ColumnCount;    if (TotalColumnWidth - GridClientWidth) mod ColumnCount <> 0 then      Inc(Filler);    for i := 0 to ColumnCount-1 do      DBGrid.Columns[i].Width := DBGrid.Columns[i].Width - Filler;  end;  end;


ثم ننتقل الى المرحلة الأخيرة وهي منادات procedure في الحدث OnResize كما في الصورة 02


.png   02.png (الحجم : 11.04 ك ب / التحميلات : 76)

هذه هي الطريقة

كود :
procedure TForm1.FormResize(Sender: TObject); begin  AdjustColumnWidths(DBGrid1); end;


وفي الاخير ارجو من اهل الخبرة ان يعدلوه ليتوافق مع stringGrid او ياتونة بحل آخر
وشكرا
نرجو ممن استفادة الدعاء في ذهر الغيب لان الملائك تقول لك ولك بالمثل

نسيت ذكر المصدر

https://edn.embarcadero.com/article/27548

للكاتب: Philippe Randour


RE: المحاذاة التلقائية و حساب عرض الأعمدة dbGrid المناسب للشاشة - mobile - 15-05-2017

السلام عليكم ورحمة الله
اولا بارك الله فيك  اخي على المشاركة الجميلة  حتما سيستفيد منها الكثير.
 ثانيا انصحك ان  تبدأ كلامك بالسلام افضل

إقتباس :ولاحيطكم علما اني غاظب بسبب الغيرعلى مسؤولي المنتدى لعدم اترائه في الآونة الاخيرة لاني تعلمة كثيرا منه في بداياتي لكنه لم يعد ينفعني الا قليلا

ربما لانهم قدموا ما في جعبتهم وليس لديهم مزيد !
ربما لديهم اعمال ومسؤوليات لا نعرفها
ربما ..ربما ... اسباب قد لا نعرفها

ابدا انت من حيث انهوا  هم الرسالة !
معلمك في الابتدائي هل غضب لانه لم يعلمك البرمجة ؟ استاذ المتوسطة هل غضبت عليه لانه لم يعلمك البرمجة؟ ماذا عن استاذ الثانوي ؟
كلهم علموك مرحلة ما لتكبر وتكون انت عينك مرحلة ما .
كذلك مسؤولوا  المنتدى علموك مرحلة ما ، ناهيك ان المنتى وجدى لتبادل الاراء والحلول

بالتوفيق اخي


RE: المحاذاة التلقائية و حساب عرض الأعمدة dbGrid المناسب للشاشة - محمد عبد العزيز - 16-05-2017

إقتباس :ولاحيطكم علما اني غاظب بسبب الغيرعلى مسؤولي المنتدى لعدم اترائه في الآونة الاخيرة

صراحة شاهدت سؤالك وكنت ساجيب لكن امتنعت... وصلت لاستنتاج بعدم المشاركة إلا نادرا وترك الامر لاعضاء المنتدى لان هذا منتدى، ملتقى اعضاء يتم اثرائه بزواره
لو اجبتك و/أو وضعك لك مثال/كود لنسخته ببرنامجك واستخدمته ثم لم نسمع منك شيئ ولما بحثت وشاركت بموضوعك هذا
والسلام عليكم ورحمة الله وبركاته



RE: المحاذاة التلقائية و حساب عرض الأعمدة dbGrid المناسب للشاشة - sniper0027 - 01-06-2017

السلام عليكم   " ابدا بها كلامي طبقا لنصيحة الاخ الفاضل "

شكرا لتفاعلكم مع الموضوع وسوف احاولة وضع مواضيع اخرى ان شاء الله