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

مشاهدة النسخة كاملة : [تمرين] تلوين DBGrid : (س) سطر ب (س) سطر


hanipino
31-12-2008, 11:10 PM
السلام عليكم

تلوين جدول سطر ب سطر او سطرين ب سطرين , على حسب ما هو مكتوب فى Edit
مثلا مكتوب العدد 3 : سيتم تلوين 3 اسطر بالازرق و 3 اسطر بالبنى . مثلا . و هكذا حتى نهاية الجدول .

الصورة التالية للتوضيح .

http://up.zyzoom.org/uploads/images/zyzoom-e63fe372e3.gif

hanipino
05-01-2009, 11:40 PM
السلام عليكم

حلى يوجد فيه بعض الاضافات الغير مطلوبة فى التمرين .
بهذا (الاجراء + الدالة) يمكن تلوين :

(س)سطر ب (ع)سطر .
(س)عمود ب(ع)عمود .
(س)سطر ب (ع)سطر ب عمود .

الدالة :

Function ColumnAndLine(NmbrLine1,NmbrLine2:Byte;DataSource: TDataSource;Column:TColumn):TColor;
var
I:Integer; Count,No:Byte;
begin
I:=1; Result:=0;
With DataSource.DataSet do
begin
Count:=RecordCount;
No :=RecNo;
end;
Case Column.Field.FieldNo Mod 2 Of
1:
begin

While I < Count do
begin
if (No >= I) and (No <= I+NmbrLine1) then
Result:= $00E6D9C4;
I:=I+(NmbrLine1);

if (No >= I) and (No <= I+NmbrLine2) then
Result:= $00EAF7FF;
I:=I+(NmbrLine2);
end;
end;
0:
Result:= $00E6D9C4
end;
end;


الاجراء :

Procedure ColorDBGrid(ColumnOrLine,Lin_Col1,Lin_Col2:Byte;Da taSource:TDataSource;Column:TColumn);
var
I: Integer; Count,No:Byte; Result:TColor;
begin
I:=1; Result:= 0; Count:=0; No:=0;

Case ColumnOrLine of
0:
With DataSource.DataSet do
begin
Count:=RecordCount;
No :=RecNo;
end;
1:
begin
Count:=TDBGrid(Column.Grid).Columns.Count;
No :=Column.Field.FieldNo;
end;
end;

While I < Count do
begin
if (No >= I) and (No <= I+Lin_Col1) then
Result:= $00E6D9C4;
I:=I+(Lin_Col1);

if (No >= I) and (No <= I+Lin_Col2) then
Result:= $00EAF7FF;
I:=I+(Lin_Col2);
end;

Case ColumnOrLine of
0,1:TDBGrid(Column.Grid).Canvas.Brush.Color:=Resul t;
2 :TDBGrid(Column.Grid).Canvas.Brush.Color:=
ColumnAndLine(Lin_Col1,Lin_Col2,DataSource,Column) ;
end; end;


الاستدعاء فى حدث : DrawColumnCell
نستدعى الاجراء الذى بدوره يستدعى الدالة .

var
Lin_Col1,Lin_Col2:Byte;
ColumnOrLine:Integer;
begin
ColumnOrLine:=StrToInt(Edit3.Text);
Lin_Col1:=StrToInt(Edit1.Text);Lin_Col2:=StrToInt( Edit2.Text);

ColorDBGrid(ColumnOrLine,Lin_Col1,Lin_Col2,DataSou rce1,Column);
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column, State);
end;


و السلام عليكم .