sniper0027
(مبرمج جديد)
**

تاريخ الإنتساب : 07-03-2014
تاريخ الميلاد : 01-01-1991 (27 العمر)
التوقيت المحلي : 24-09-2018 في 11:37 PM
الحالة : غير متصل

sniper0027 معلومات المنتدى
إنضم إلينا : 07-03-2014
آخر زيارة 19-09-2018, 03:33 PM
إجمالي المشاركات : 10 (0.01 مشاركات في اليوم الواحد | 0.02 في المئة من إجمالي المشاركات)
(إيجاد مشاركات العضو)
اجمالي المواضيع : 4 (0 مواضيع في اليوم | 0.05 في المئه من اجمالي المواضيع)
(إيجاد مواضيع العضو)
فترة البقاء متصل : 1 يوم, 11 ساعات, 35 دقائق
الأعضاء المحالين: 0
Total Thanks Received: 4 (0 0.1 per day | 4012 percent of total 0.1)
(Find All Threads Thanked ForFind All Posts Thanked For)
Total Thanks Given: 0 (0 0 per day | 4027 percent of total 0)
(Find All Thanked ThreadsFind All Thanked Posts)

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



[attachment=3502]

هذه هي 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

[attachment=3503]

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

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

 AdjustColumnWidths(DBGrid1);

end;


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

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

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

للكاتب: Philippe Randour