DBGrid компонент, который отображает разными цветами удалённые, обновлённые и добавленные записи
"...Для продолжения установки Win'2000 вставьте 45234-ю дискету..."
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.
*)interfaceuses
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);
protectedprocedure DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); override;
procedure DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); override;
publicconstructor Create(AOwner: TComponent); override;
publishedproperty 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;
procedureregister;
implementationprocedureregister;
begin
RegisterComponents('ATC DB Compo', [TatcDBGrid]);
end;
constructor TatcDBGrid.Create(AOwner: TComponent);
(*
Description: Record Type Showing is All except Deletes.
*)begininherited;
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;
begininherited;
ifnot Assigned(Column.Field) then
exit;
// Copy Rect into Variable.
CopyRect(ARect, Rect);
if Assigned(DataLink) and (DataLink.Active) and (DataLink.DataSet <> nil) thenbegin// если текущая запись измененаif DataLink.DataSet.UpdateStatus = usModified thenbegin
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// если текущая запись добавлена.elseif DataLink.DataSet.UpdateStatus = usInserted thenbegin
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// если текущая запись удалена.elseif DataLink.DataSet.UpdateStatus = usDeleted thenbegin
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;
begininherited;
CopyRect(ARect, Rect);
if Assigned(DataLink) and (DataLink.Active) and (DataLink.DataSet <> nil) thenbegin// если текущая запись измененаif DataLink.DataSet.UpdateStatus = usModified thenbegin
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// если текущая запись добавлена.elseif DataLink.DataSet.UpdateStatus = usInserted thenbegin
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// если текущая запись удалена.elseif DataLink.DataSet.UpdateStatus = usDeleted thenbegin
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;
ifnot Assigned(DataSource) ornot Assigned(DataSource.DataSet) then
exit;
// для показа только выбранного типа записей.if Assigned(DataLink) and Assigned(DataLink.DataSet) and (DataLink.Active) thenbegincase 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.
Обзор компонента TатcDBGrid
Компонент TатcDBGrid является наследником стандартного компонента TDBGrid и добавляет некоторые пользовательские функции для отображения записей с разными цветами в зависимости от их типа (вставленные, измененные, удаленные).
Свойства
atcCachedShow: Enum-свойство (тип TCachedShow), которое определяет типы записей, которые должны быть отображены.
atcDeletedColor: Цвет для удаленных записей.
atcInsertedColor: Цвет для вставленных записей.
atcModifiedColor: Цвет для измененных записей.
Методы
SetCachedShow(const Value: TCachedShow): Метод, который устанавливает свойство atcCachedShow и обновляет типы записей в датасете соответственно.
DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState): Переопределенный метод для рисования ячейки столбца с конкретным цветом в зависимости от типа записи (вставленной, измененной, удаленной).
DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState): Переопределенный метод для рисования ячейки данных с конкретным цветом в зависимости от типа записи (вставленной, измененной, удаленной).
Имплементация
Компонент имеет три метода, которые переопределяют стандартное поведение компонента TDBGrid:
SetCachedShow(const Value: TCachedShow): Метод, который устанавливает свойство atcCachedShow и обновляет типы записей в датасете соответственно.
DrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState): Метод, который рисует ячейку столбца с конкретным цветом в зависимости от типа записи (вставленной, измененной, удаленной).
DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState): Метод, который рисует ячейку данных с конкретным цветом в зависимости от типа записи (вставленной, измененной, удаленной).
Компонент также имеет некоторые внутренние переменные и константы:
FCachedShow: Enum-свойство, которое определяет типы записей, которые должны быть отображены.
FDeletedColor, FInsertedColor и FModifiedColor: Цвета для удаленных, вставленных и измененных записей соответственно.
AlignFlags и RTL: Константы, используемые в методах рисования.
В целом, компонент TатcDBGrid предназначен для предоставления пользовательского способа отображения базовых записей с разными цветами в зависимости от их типа.
Компонент DBGrid, который отображает записи в зависимости от их состояния (удаленные, обновленные, добавленные) различными цветами.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.