home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 August / VPR9608A.BIN / del20try / install / data.z / DBGRIDS.INT < prev    next >
Text File  |  1996-05-08  |  12KB  |  306 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,96 Borland International     }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DBGrids;
  11.  
  12. {$R-}
  13.  
  14. interface
  15.  
  16. uses SysUtils, Windows, Messages, Classes, Controls, Forms,
  17.   Graphics, DB, DBTables, Grids, DBCtrls;
  18.  
  19. type
  20.   TColumnValue = (cvColor, cvWidth, cvFont, cvAlignment, cvReadOnly, cvTitleColor,
  21.     cvTitleCaption, cvTitleAlignment, cvTitleFont);
  22.   TColumnValues = set of TColumnValue;
  23.  
  24. const
  25.   ColumnTitleValues = [cvTitleColor..cvTitleFont];
  26.   cm_DeferLayout = WM_USER + 100;
  27.  
  28. { TColumn defines internal storage for column attributes.  Values assigned
  29.   to properties are stored in this object, the grid- or field-based default
  30.   sources are not modified.  Values read from properties are the previously
  31.   assigned value, if any, or the grid- or field-based default values if
  32.   nothing has been assigned to that property. This class also publishes the
  33.   column attribute properties for persistent storage.  }
  34. type
  35.   TColumn = class;
  36.   TCustomDBGrid = class;
  37.  
  38.   TColumnTitle = class(TPersistent)
  39.   protected
  40.     procedure RefreshDefaultFont;
  41.   public
  42.     constructor Create(Column: TColumn);
  43.     destructor Destroy; override;
  44.     procedure Assign(Source: TPersistent); override;
  45.     function DefaultAlignment: TAlignment;
  46.     function DefaultColor: TColor;
  47.     function DefaultFont: TFont;
  48.     function DefaultCaption: string;
  49.     procedure RestoreDefaults; virtual;
  50.   published
  51.     property Alignment: TAlignment;
  52.     property Caption: string;
  53.     property Color: TColor;
  54.     property Font: TFont;
  55.   end;
  56.  
  57.   TColumnButtonStyle = (cbsAuto, cbsEllipsis, cbsNone);
  58.  
  59.   TColumn = class(TCollectionItem)
  60.   protected
  61.     function  CreateTitle: TColumnTitle; virtual;
  62.     function  GetGrid: TCustomDBGrid;
  63.     procedure RefreshDefaultFont;
  64.   public
  65.     constructor Create(Collection: TCollection); override;
  66.     destructor Destroy; override;
  67.     procedure Assign(Source: TPersistent); override;
  68.     function  DefaultAlignment: TAlignment;
  69.     function  DefaultColor: TColor;
  70.     function  DefaultFont: TFont;
  71.     function  DefaultReadOnly: Boolean;
  72.     function  DefaultWidth: Integer;
  73.     procedure RestoreDefaults; virtual;
  74.     property  AssignedValues: TColumnValues;
  75.     property  Field: TField;
  76.   published
  77.     property  Alignment: TAlignment;
  78.     property  ButtonStyle: TColumnButtonStyle default cbsAuto;
  79.     property  Color: TColor;
  80.     property  DropDownRows: Integer default 7;
  81.     property  FieldName: String;
  82.     property  Font: TFont;
  83.     property  PickList: TStrings;
  84.     property  ReadOnly: Boolean;
  85.     property  Title: TColumnTitle;
  86.     property  Width: Integer;
  87.   end;
  88.  
  89.   TColumnClass = class of TColumn;
  90.  
  91.   TDBGridColumnsState = (csDefault, csCustomized);
  92.  
  93.   TDBGridColumns = class(TCollection)
  94.   protected
  95.     procedure Update(Item: TCollectionItem); override;
  96.   public
  97.     constructor Create(Grid: TCustomDBGrid; ColumnClass: TColumnClass);
  98.     function  Add: TColumn;
  99.     procedure RestoreDefaults;
  100.     procedure RebuildColumns;
  101.     property State: TDBGridColumnsState;
  102.     property Grid: TCustomDBGrid;
  103.     property Items[Index: Integer]: TColumn; default;
  104.   end;
  105.  
  106.   TGridDataLink = class(TDataLink)
  107.   protected
  108.     procedure ActiveChanged; override;
  109.     procedure DataSetChanged; override;
  110.     procedure DataSetScrolled(Distance: Integer); override;
  111.     procedure EditingChanged; override;
  112.     procedure LayoutChanged; override;
  113.     procedure RecordChanged(Field: TField); override;
  114.     procedure UpdateData; override;
  115.     function  GetMappedIndex(ColIndex: Integer): Integer;
  116.   public
  117.     constructor Create(AGrid: TCustomDBGrid);
  118.     destructor Destroy; override;
  119.     function AddMapping(const FieldName: string): Boolean;
  120.     procedure ClearMapping;
  121.     procedure Modified;
  122.     procedure Reset;
  123.     property DefaultFields: Boolean;
  124.     property FieldCount: Integer;
  125.     property Fields[I: Integer]: TField;
  126.     property SparseMap: Boolean;
  127.   end;
  128.  
  129.   TBookmarkList = class
  130.   protected
  131.     function CurrentRow: TBookmarkStr;  // shortcut to grid.datasource...
  132.     function Compare(const Item1, Item2: TBookmarkStr): Integer;
  133.     procedure LinkActive(Value: Boolean);
  134.   public
  135.     constructor Create(AGrid: TCustomDBGrid);
  136.     destructor Destroy; override;
  137.     procedure Clear;           // free all bookmarks
  138.     procedure Delete;          // delete all selected rows from dataset
  139.     function  Find(const Item: TBookmarkStr; var Index: Integer): Boolean;
  140.     function  IndexOf(const Item: TBookmarkStr): Integer;
  141.     function  Refresh: Boolean;// drop orphaned bookmarks; True = orphans found
  142.     property Count: Integer;
  143.     property CurrentRowSelected: Boolean;
  144.     property Items[Index: Integer]: TBookmarkStr; default;
  145.   end;
  146.  
  147.   TDBGridOption = (dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator,
  148.     dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,
  149.     dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect);
  150.   TDBGridOptions = set of TDBGridOption;
  151.  
  152.   { The DBGrid's DrawDataCell virtual method and OnDrawDataCell event are only
  153.     called when the grid's Columns.State is csDefault.  This is for compatibility
  154.     with existing code. These routines don't provide sufficient information to
  155.     determine which column is being drawn, so the column attributes aren't
  156.     easily accessible in these routines.  Column attributes also introduce the
  157.     possibility that a column's field may be nil, which would break existing
  158.     DrawDataCell code.   DrawDataCell, OnDrawDataCell, and DefaultDrawDataCell
  159.     are obsolete, retained for compatibility purposes. }
  160.   TDrawDataCellEvent = procedure (Sender: TObject; const Rect: TRect; Field: TField;
  161.     State: TGridDrawState) of object;
  162.  
  163.   { The DBGrid's DrawColumnCell virtual method and OnDrawColumnCell event are
  164.     always called, when the grid has defined column attributes as well as when
  165.     it is in default mode.  These new routines provide the additional
  166.     information needed to access the column attributes for the cell being
  167.     drawn, and must support nil fields.  }
  168.  
  169.   TDrawColumnCellEvent = procedure (Sender: TObject; const Rect: TRect;
  170.     DataCol: Integer; Column: TColumn; State: TGridDrawState) of object;
  171.  
  172.   TCustomDBGrid = class(TCustomGrid)
  173.   protected
  174.     FUpdateFields: Boolean;
  175.     FAcquireFocus: Boolean;
  176.     function  RawToDataColumn(ACol: Integer): Integer;
  177.     function  DataToRawColumn(ACol: Integer): Integer;
  178.     function  AcquireLayoutLock: Boolean;
  179.     procedure BeginLayout;
  180.     procedure BeginUpdate;
  181.     procedure CancelLayout;
  182.     function  CanEditAcceptKey(Key: Char): Boolean; override;
  183.     function  CanEditModify: Boolean; override;
  184.     function  CanEditShow: Boolean; override;
  185.     procedure ColumnMoved(FromIndex, ToIndex: Longint); override;
  186.     procedure ColEnter; dynamic;
  187.     procedure ColExit; dynamic;
  188.     procedure ColWidthsChanged; override;
  189.     function  CreateColumns: TDBGridColumns; dynamic;
  190.     function  CreateEditor: TInplaceEdit; override;
  191.     procedure CreateWnd; override;
  192.     procedure DeferLayout;
  193.     procedure DefineFieldMap; virtual;
  194.     procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
  195.     procedure DrawDataCell(const Rect: TRect; Field: TField;
  196.       State: TGridDrawState); dynamic; { obsolete }
  197.     procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;
  198.       Column: TColumn; State: TGridDrawState); dynamic;
  199.     procedure EditButtonClick; dynamic;
  200.     procedure EndLayout;
  201.     procedure EndUpdate;
  202.     function  GetColField(DataCol: Integer): TField;
  203.     function  GetEditLimit: Integer; override;
  204.     function  GetEditMask(ACol, ARow: Longint): string; override;
  205.     function  GetEditText(ACol, ARow: Longint): string; override;
  206.     function  GetFieldValue(ACol: Integer): string;
  207.     function  HighlightCell(DataCol, DataRow: Integer; const Value: string;
  208.       AState: TGridDrawState): Boolean; virtual;
  209.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  210.     procedure KeyPress(var Key: Char); override;
  211.     procedure LayoutChanged; virtual;
  212.     procedure LinkActive(Value: Boolean); virtual;
  213.     procedure Loaded; override;
  214.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  215.       X, Y: Integer); override;
  216.     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  217.     procedure Scroll(Distance: Integer); virtual;
  218.     procedure SetColumnAttributes; virtual;
  219.     procedure SetEditText(ACol, ARow: Longint; const Value: string); override;
  220.     function  StoreColumns: Boolean;
  221.     procedure TimedScroll(Direction: TGridScrollDirection); override;
  222.     property Columns: TDBGridColumns;
  223.     property DefaultDrawing: Boolean default True;
  224.     property DataSource: TDataSource;
  225.     property DataLink: TGridDataLink;
  226.     property IndicatorOffset: Byte;
  227.     property LayoutLock: Byte;
  228.     property Options: TDBGridOptions default [dgEditing, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit];
  229.     property ParentColor default False;
  230.     property ReadOnly: Boolean default False;
  231.     property SelectedRows: TBookmarkList;
  232.     property TitleFont: TFont;
  233.     property UpdateLock: Byte;
  234.     property OnColEnter: TNotifyEvent;
  235.     property OnColExit: TNotifyEvent;
  236.     property OnDrawDataCell: TDrawDataCellEvent; { obsolete }
  237.     property OnDrawColumnCell: TDrawColumnCellEvent;
  238.     property OnEditButtonClick: TNotifyEvent;
  239.     property OnColumnMoved: TMovedEvent;
  240.   public
  241.     constructor Create(AOwner: TComponent); override;
  242.     destructor Destroy; override;
  243.     procedure DefaultDrawDataCell(const Rect: TRect; Field: TField;
  244.       State: TGridDrawState); { obsolete }
  245.     procedure DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer;
  246.       Column: TColumn; State: TGridDrawState);
  247.     function ValidFieldIndex(FieldIndex: Integer): Boolean;
  248.     property EditorMode;
  249.     property FieldCount: Integer;
  250.     property Fields[FieldIndex: Integer]: TField;
  251.     property SelectedField: TField;
  252.     property SelectedIndex: Integer;
  253.   end;
  254.  
  255.   TDBGrid = class(TCustomDBGrid)
  256.   public
  257.     property Canvas;
  258.     property SelectedRows;
  259.   published
  260.     property Align;
  261.     property BorderStyle;
  262.     property Color;
  263.     property Columns stored StoreColumns;
  264.     property Ctl3D;
  265.     property DataSource;
  266.     property DefaultDrawing;
  267.     property DragCursor;
  268.     property DragMode;
  269.     property Enabled;
  270.     property FixedColor;
  271.     property Font;
  272.     property Options;
  273.     property ParentColor;
  274.     property ParentCtl3D;
  275.     property ParentFont;
  276.     property ParentShowHint;
  277.     property PopupMenu;
  278.     property ReadOnly;
  279.     property ShowHint;
  280.     property TabOrder;
  281.     property TabStop;
  282.     property TitleFont;
  283.     property Visible;
  284.     property OnColEnter;
  285.     property OnColExit;
  286.     property OnColumnMoved;
  287.     property OnDrawDataCell;  { obsolete }
  288.     property OnDrawColumnCell;
  289.     property OnDblClick;
  290.     property OnDragDrop;
  291.     property OnDragOver;
  292.     property OnEditButtonClick;
  293.     property OnEndDrag;
  294.     property OnEnter;
  295.     property OnExit;
  296.     property OnKeyDown;
  297.     property OnKeyPress;
  298.     property OnKeyUp;
  299.     property OnStartDrag;
  300.   end;
  301.  
  302. const
  303.   IndicatorWidth = 11;
  304.  
  305. implementation
  306.