12-05-2017, 08:40 PM
(آخر تعديل لهذه المشاركة: 12-05-2017, 08:42 PM بواسطة sniper0027.)
مرحبا
01.png (الحجم : 31.32 ك ب / التحميلات : 90)
هذه هي procedure
ثم ننتقل الى المرحلة الأخيرة وهي منادات procedure في الحدث OnResize كما في الصورة 02
02.png (الحجم : 11.04 ك ب / التحميلات : 75)
هذه هي الطريقة
وفي الاخير ارجو من اهل الخبرة ان يعدلوه ليتوافق مع stringGrid او ياتونة بحل آخر
وشكرا
نرجو ممن استفادة الدعاء في ذهر الغيب لان الملائك تقول لك ولك بالمثل
نسيت ذكر المصدر
https://edn.embarcadero.com/article/27548
للكاتب: Philippe Randour
جأتكم بطريقة رائعة لملائمة حجم الاعمد مع الشاشة بستعمال dbgrid عادي والتي لم اجد اي شخص قد تحدت عنها في المحتوى العربي فبعد بحث طويل وجدتها بالاجليزية
فقررت ان اعممها خاصتا اني سألت في المنتدى ولم يجبني احد ولاحيطكم علما اني غاظب بسبب الغيرعلى مسؤولي المنتدى لعدم اترائه في الآونة الاخيرة لاني تعلمة كثيرا منه في بداياتي لكنه لم يعد ينفعني الا قليلا
أولا اريد شكر المنتدى لانه رافقني ايام دراستي للدلفي وسوف اشارك بعض الدروس لأرد الجميل .
فل ندخل صلبة الموضوع
نضع هده procédure في الواجه الرئيسية تحت implementation كما في الصورة 01
01.png (الحجم : 31.32 ك ب / التحميلات : 90)
هذه هي 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
02.png (الحجم : 11.04 ك ب / التحميلات : 75)
هذه هي الطريقة
كود :
procedure TForm1.FormResize(Sender: TObject);
begin
AdjustColumnWidths(DBGrid1);
end;
وفي الاخير ارجو من اهل الخبرة ان يعدلوه ليتوافق مع stringGrid او ياتونة بحل آخر
وشكرا
نرجو ممن استفادة الدعاء في ذهر الغيب لان الملائك تقول لك ولك بالمثل
نسيت ذكر المصدر
https://edn.embarcadero.com/article/27548
للكاتب: Philippe Randour