Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков программирования и крэкерства 6.0
(актуальность: февраль 2017)
Свежие инструменты, новые видеоуроки!

  • 300+ видеоуроков
  • 800 инструментов
  • 80 свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



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.
 
 *)
 
 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.
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS