تحسين شكل المكون DBgrid بتلوين الاعمدة او الاسطر
#1
السلام عليكم ورحمة الله

لإعطاء المكون DbGrid شكل خاص وجميل سوف نقوم بتلوين الأعمدة Colums أو الأسطر Lines الخاصة بهذا المكون ليصبح على الشكل التالي:

[صورة: dbgridht4.jpg]

ومن أجل عمل هذا نقوم بما يلي:
نقوم بزيادة السطر التالي مباشرة تحت
كود :
{$R *.DFM}

كود :
type AlternGrid = class(TCustomDBGrid);

ثم نذهب إلى الحدث OnDrawColumCell الخاص بالمكون DbGrid ونكتب الكود التالي:

كود :
var dataset:Tdataset; begin dataset:= (Sender as TDBGrid).DataSource.DataSet; with AlternGrid(Sender) do begin if (DataSet.RecNo mod 2 = 1 ) then Canvas.Brush.Color := $00E6D9C4 else Canvas.Brush.Color := $00EAF7FF; if DataLink.ActiveRecord = Row -1 then begin Canvas.Font.Color:=clwhite ; Canvas.Brush.Color:=clblack; end; end ; DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column, State);

السورس في المرفقات
وبالتـــوفيق.Big Grin


الملفات المرفقة
.rar   dbgrid.rar (الحجم : 5.67 ك ب / التحميلات : 1,578)
الرد
#2
و هذه إضافة مني لكيفية تلوين الأعمدة

[صورة: columnscolordh8.jpg]


كود :
{this source created by mahdi, a member of delphi4arab forum http://www.delphi4arab.net/forum/ تم إنجاز السورس من طرف مهدي العضو بمنتدى دلفي للعرب} procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin I:=0; while I<DBGrid1.Columns.Count-1 do begin DBGrid1.Columns[i].Color:=$00E6D9C4; // DBGrid1.Columns[i].Title.Color:=$00EAF7FF; I:=I+1; DBGrid1.Columns[i].Color:=$00EAF7FF; // DBGrid1.Columns[i].Title.Color:=$00E6D9C4; I:=I+1; end; end;
المشروع في المرفقات



ملاحظة: الكود لا يعمل مع الكود الأول الخاص بالأسطر


الملفات المرفقة
.rar   Columns_color.rar (الحجم : 5.48 ك ب / التحميلات : 662)
من تشبه بقوم فهو منهم
الرد
#3
السلام عليكم ورحمة الله وبركاته

لاكن أخي إذا إستعملنا الفلترة Filtre في الطريقة الأولي فستختلط الألوان
يقول المثل الشعبي الجزائري
أقري علمك و علما لا تدريه و قل ربي زدني علما و فوق كل ذي علم عليم
الرد
#4
السلام عليكم ورحمة الله وبركاته
يا إخواني هناك طريقة أبسط من ذلك وبدون كود وهي أن تقوم ( دوبل كليك ) على Dbgrid
فتظهر لك نافة ( Modification de Dbgrid1.Columns ) فتنقر بالزر الأيسر للماوس و تختار Ajouter
فيظهر سطر مكتوب فيه TColumn قم بتبديله ما هو موجود في قاعدة البينات ولكين Nom مثلا ثم تضف
آخر فليكن Adresse ثم تذهب ل: Inspecteur d'objets فأختر اللون المناسب عن طريق الضغط على Color
بالنسبة لـ: Nom أصفر مثلا وأضغط على Adresse وأختر المناسب له.........وشكرا.
الرد
#5
و عليكم السلام و رحمة الله

إقتباس :يا إخواني هناك طريقة أبسط من ذلك وبدون كود

هذه الطريقة تصلح مع المثال الثاني فقط و لا تصلح مع الأول
من تشبه بقوم فهو منهم
الرد
#6
ولجعل تجيلات السطر الذي يؤشر اليه المؤشر ملونة عليك بهذا الكود :

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
If gdFocused in State then
with (Sender as TDBGrid).Canvas do
begin

Brush.Color := clRed;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, Field.AsString);

end;

end;

end.
الرد
#7
السلام عليكم
إليكم أول كود أضعه هنا

من يريد Dbgrid
شفاف Wink

كود :
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Text: string; Rct: TRect; begin Text := Field.AsString; Rct:= Rect; BitBlt(DBGrid1.Canvas.handle, Rct.left, Rct.top, Rct.right - Rct.left, Rct.bottom - Rct.top, Image1.Canvas.Handle, Rct.left + DBGrid1.Left, Rct.Top + DBGrid1.Top , SRCCOPY); SetBkModE(DBGrid1.Canvas.Handle, TRANSPARENT); DBGrid1.Canvas.Font.Style := [fsBold]; DBGrid1.Font.color := cLblue; DrawtextEx(DBGrid1.Canvas.Handle, PChar(Text), Length(Text), Rct, DT_WORDBREAK, nil); end;

)َضع Timage وراء Dbgrid )
في الحقيقة يقوم هذا البرنامج بنسخ كل Pixel من Image1 على Dbgrid1 هكذا يظهر ال Dbgrid وكأنه شفاف
بالتوفيق
الرد
#8
شكرا matrix

في رأيي، من الأفضل " من يريد صورة في خلفية DBGrid "
الرد
#9
@merouane على الرحب و السعد
"في رأيي، من الأفضل " من يريد صورة في خلفية DBGrid ""
ربما صحيح, لا كن في حالة إذا لم يكن image1 وراء Dbgrid تماما Wink "أنت تفهم قصدي"
حظ موفق
الرد
#10
ما فائدة السطر الذى اضفناه فى البداية
PHP كود :
AlternGrid = class(TCustomDBGrid); 
فى الوقت الذى نجح مع الكود فى تلوين صف وترك الاخر بهذا الكود دون اضافة السطر السابق ذكره
PHP كود :
procedure TfrCataloge.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DBGrid1.DataSource.DataSet.RecNo mod 2 =1 then
begin
DBGrid1
.Canvas.Brush.Color:=clHighlight;
 
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end; 
مع فائق شكرى
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم