المساعد الشخصي الرقمي

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


delphi4ever
22-03-2008, 11:38 PM
السلام عليكم ورحمة الله

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

http://img88.imageshack.us/img88/1422/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);

السورس في المرفقات
وبالتـــوفيق.:D

مهدي
03-04-2008, 12:32 AM
و هذه إضافة مني لكيفية تلوين الأعمدة

http://img98.imageshack.us/img98/3543/columnscolordh8.jpg



{this source created by mahdi, a member of delphi4arab forum
http://www.delphi4arab.com/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;
المشروع في المرفقات



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

taha_gh
03-04-2008, 06:18 PM
السلام عليكم ورحمة الله وبركاته

لاكن أخي إذا إستعملنا الفلترة Filtre في الطريقة الأولي فستختلط الألوان

diali
07-04-2008, 12:54 AM
السلام عليكم ورحمة الله وبركاته
يا إخواني هناك طريقة أبسط من ذلك وبدون كود وهي أن تقوم ( دوبل كليك ) على Dbgrid
فتظهر لك نافة ( Modification de Dbgrid1.Columns ) فتنقر بالزر الأيسر للماوس و تختار Ajouter
فيظهر سطر مكتوب فيه TColumn قم بتبديله ما هو موجود في قاعدة البينات ولكين Nom مثلا ثم تضف
آخر فليكن Adresse ثم تذهب ل: Inspecteur d'objets فأختر اللون المناسب عن طريق الضغط على Color
بالنسبة لـ: Nom أصفر مثلا وأضغط على Adresse وأختر المناسب له.........وشكرا.

مهدي
07-04-2008, 04:25 PM
و عليكم السلام و رحمة الله


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


هذه الطريقة تصلح مع المثال الثاني فقط و لا تصلح مع الأول

أمير الدلفي
01-05-2008, 09:13 PM
ممكن أن نجعل السجل الذي فيه المؤشر ملون باللون الأصفر مثلا
سيكون المنظر جميل

أمير الدلفي
02-05-2008, 11:37 PM
ولجعل تجيلات السطر الذي يؤشر اليه المؤشر ملونة عليك بهذا الكود :

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.

matrix
25-05-2008, 11:24 AM
السلام عليكم
إليكم أول كود أضعه هنا

من يريد Dbgrid
شفاف ;)


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 وكأنه شفاف
بالتوفيق

merouane
25-05-2008, 11:28 AM
شكرا matrix

في رأيي، من الأفضل " من يريد صورة في خلفية DBGrid "

matrix
25-05-2008, 11:45 AM
@merouane على الرحب و السعد
"في رأيي، من الأفضل " من يريد صورة في خلفية DBGrid ""
ربما صحيح, لا كن في حالة إذا لم يكن image1 وراء Dbgrid تماما ;) "أنت تفهم قصدي"
حظ موفق