DBGrid компонент c разными цветами удалённые, обновлённые и добавленные записи

=== DBGrid компонент c разными цветами удалённые, обновлённые и добавленные записи ===
unit atcDBGrid;
{
 (c) Aveen Tech
 2001 - 2002
 FileName: atcDBGrid.pas
 Version Date Author Comment
 1.0 13/06/2000 Majid Vafai Jahan Create.
OVERVIEW
 - This grid is inherited from DBGrid and add some required functionality to it.
Functionality:
 - Record type are all records that may be modified, unmodified, inserted, deleted.
 - Coloring according to Record type.
 - show selected Record Type.
}
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Grids, DBGrids, dbTables, db;
const
 AlignFlags : array [TAlignment] of Integer =
 ( DT_LEFT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
 DT_RIGHT or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX,
 DT_CENTER or DT_WORDBREAK or DT_EXPANDTABS or DT_NOPREFIX );
 RTL: array [Boolean] of Integer = (0, DT_RTLREADING);
type
 TCachedShow = (csModify, csUnModify, csRemoved, csInserted, csAll, csNormal);
 TatcDBGrid = class(TDBGrid)
 private
 FCachedShow: TCachedShow;
 FModifiedColor: TColor;
 FInsertedColor: TColor;
 FDeletedColor: TColor;
 procedure SetCachedShow(const Value: TCachedShow);
 protected
 procedure DrawDataCell(const Rect: TRect; Field: TField;
 State: TGridDrawState); override;
 procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
 Column: TColumn; State: TGridDrawState); override;
 public
 constructor Create(AOwner: TComponent); override;
 published
 property atcCachedShow: TCachedShow read FCachedShow write SetCachedShow;
 property atcDeletedColor: TColor read FDeletedColor write FDeletedColor;
 property atcInsertedColor: TColor read FInsertedColor write FInsertedColor;
 property atcModifiedColor: TColor read FModifiedColor write FModifiedColor;
 end;
procedure Register;
implementation
procedure Register;
begin
 RegisterComponents('ATC DB Compo', [TatcDBGrid]);
end;
constructor TatcDBGrid.Create(AOwner: TComponent);
{Description: Record Type Showing is All except Deletes. }
begin
 inherited;
 FCachedShow := csNormal;
 FDeletedColor := clGray;
 FInsertedColor := clAqua;
 FModifiedColor := clRed;
end;
procedure TatcDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;
 Column: TColumn; State: TGridDrawState);
{Description: On Drawing Column Color Updated Records.}
var
 ARect: TRect;
begin
 inherited;
 if not Assigned(Column.Field) then
 exit;
 // Copy Rect into Variable.
 CopyRect(ARect, Rect);
 if Assigned(DataLink) and (DataLink.Active) and (DataLink.DataSet <> nil) then
 begin
 // если текущая запись изменена
 if DataLink.DataSet.UpdateStatus = usModified then
 begin
 Canvas.Brush.Color := atcModifiedColor;
 Canvas.Font.Color := clBlack;
 Canvas.FillRect(Rect);
 DrawText(Canvas.Handle, PChar(Column.Field.Text), Length(Column.Field.Text), ARect,
 AlignFlags[Column.Alignment] or RTL[UseRightToLeftAlignmentForField(Column.Field, Column.Alignment)]);
 end
 // если текущая запись добавлена.
 else if DataLink.DataSet.UpdateStatus = usInserted then
 begin
 Canvas.Brush.Color := atcInsertedColor;
 Canvas.Font.Color := clBlack;
 Canvas.FillRect(Rect);
 DrawText(Canvas.Handle, PChar(Column.Field.Text), Length(Column.Field.Text), ARect,
 AlignFlags[Column.Alignment] or RTL[UseRightToLeftAlignmentForField(Column.Field, Column.Alignment)]);
 end
 // если текущая запись удалена.
 else if DataLink.DataSet.UpdateStatus = usDeleted then
 begin
 Canvas.Brush.Color := atcDeletedColor;
 Canvas.Font.Color := clWhite;
 Canvas.FillRect(Rect);
 DrawText(Canvas.Handle, PChar(Column.Field.Text), Length(Column.Field.Text), ARect,
 AlignFlags[Column.Alignment] or RTL[UseRightToLeftAlignmentForField(Column.Field, Column.Alignment)]);
 end;
 end;
end;
procedure TatcDBGrid.DrawDataCell(const Rect: TRect; Field: TField;
 State: TGridDrawState);
{Описание: Рисуем ячейки}
var
 ARect: TRect;
begin
 inherited;
 CopyRect(ARect, Rect);
 if Assigned(DataLink) and (DataLink.Active) and (DataLink.DataSet <> nil) then
 begin
 // если текущая запись изменена
 if DataLink.DataSet.UpdateStatus = usModified then
 begin
 Canvas.Brush.Color := clRed;
 Canvas.Font.Color := clBlack;
 Canvas.FillRect(Rect);
 DrawText(Canvas.Handle, PChar(Field.Text), Length(Field.Text), ARect,
 AlignFlags[Field.Alignment] or RTL[UseRightToLeftAlignmentForField(Field, Field.Alignment)]);
 end
 // если текущая запись добавлена.
 else if DataLink.DataSet.UpdateStatus = usInserted then
 begin
 Canvas.Brush.Color := clAqua;
 Canvas.Font.Color := clBlack;
 Canvas.FillRect(Rect);
 DrawText(Canvas.Handle, PChar(Field.Text), Length(Field.Text), ARect,
 AlignFlags[Field.Alignment] or RTL[UseRightToLeftAlignmentForField(Field, Field.Alignment)]);
 end
 // если текущая запись удалена.
 else if DataLink.DataSet.UpdateStatus = usDeleted then
 begin
 Canvas.Brush.Color := clGray;
 Canvas.Font.Color := clWhite;
 Canvas.FillRect(Rect);
 DrawText(Canvas.Handle, PChar(Field.Text), Length(Field.Text), ARect,
 AlignFlags[Field.Alignment] or RTL[UseRightToLeftAlignmentForField(Field, Field.Alignment)]);
 end;
 end;
end;
procedure TatcDBGrid.SetCachedShow(const Value: TCachedShow);
{Description: Record type for showing in grid.
 Parameters: Value cached record show. }
begin
 FCachedShow := Value;
 if ComponentState = [csDesigning] then
 exit;
 if not Assigned(DataSource) or not Assigned(DataSource.DataSet) then
 exit;
 // для показа только выбранного типа записей.
 if Assigned(DataLink) and Assigned(DataLink.DataSet) and (DataLink.Active) then
 begin
 case FCachedShow of
 csAll:
 TBDEDataSet(DataSource.DataSet).UpdateRecordTypes := [rtModified, rtInserted, rtDeleted, rtUnmodified];
 csModify:
 TBDEDataSet(DataSource.DataSet).UpdateRecordTypes := [rtModified];
 csUnModify:
 TBDEDataSet(DataSource.DataSet).UpdateRecordTypes := [rtUnmodified];
 csInserted:
 TBDEDataSet(DataSource.DataSet).UpdateRecordTypes := [rtInserted];
 csRemoved:
 TBDEDataSet(DataSource.DataSet).UpdateRecordTypes := [rtDeleted];
 csNormal:
 TBDEDataSet(DataSource.DataSet).UpdateRecordTypes := [rtModified, rtInserted, rtUnmodified];
 end;
 end;
end;
end.
Source: Взято из http://forum.sources.ru
ID: 03018
Category:Базы данных
Category:DBGrid