Mega Code Archive

 
Categories / Delphi / Graphic
 

DBGrid Component that show deleted and updated and inserted new records in diffrent colors

Title: DBGrid Component that show deleted and updated and inserted new records in diffrent colors. Question: DBGrid Show all state of the related DataSet Answer: This component show state of the related data set of DBGrid and used for data base controlers. it's appreciate to send any note or comment or suggestion to Vafaeija@yahoo.com 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 current record is modified 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 // if current record is inserted. 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 // if current record is deleted. 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); (* Description: Draw Cell *) var ARect: TRect; begin inherited; CopyRect(ARect, Rect); if Assigned(DataLink) and (DataLink.Active) and (DataLink.DataSet nil) then begin // if current record is modified. 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 // if current record is inserted. 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 // if current record is deleted. 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; // for showing selected record type only. 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.