home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 October / tst.iso / programs / borland / RUNIMAGE / DELPHI40 / DOC / DBCTRLS.INT < prev    next >
Encoding:
Text File  |  1998-06-17  |  29.2 KB  |  993 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1995,98 Inprise Corporation       }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit DBCtrls;
  11.  
  12. {$R-}
  13.  
  14. interface
  15.  
  16. uses Windows, SysUtils, Messages, Classes, Controls, Forms,
  17.      Graphics, Menus, StdCtrls, ExtCtrls, Mask, Buttons, ComCtrls, Db;
  18.  
  19. type
  20.  
  21. { TFieldDataLink }
  22.  
  23.   TFieldDataLink = class(TDataLink)
  24.   protected
  25.     procedure ActiveChanged; override;
  26.     procedure EditingChanged; override;
  27.     procedure FocusControl(Field: TFieldRef); override;
  28.     procedure LayoutChanged; override;
  29.     procedure RecordChanged(Field: TField); override;
  30.     procedure UpdateData; override;
  31.   public
  32.     constructor Create;
  33.     function Edit: Boolean;
  34.     procedure Modified;
  35.     procedure Reset;
  36.     property CanModify: Boolean;
  37.     property Control: TComponent;
  38.     property Editing: Boolean;
  39.     property Field: TField;
  40.     property FieldName: string;
  41.     property OnDataChange: TNotifyEvent;
  42.     property OnEditingChange: TNotifyEvent;
  43.     property OnUpdateData: TNotifyEvent;
  44.     property OnActiveChange: TNotifyEvent;
  45.   end;
  46.  
  47. { TPaintControl }
  48.  
  49.   TPaintControl = class
  50.   public
  51.     constructor Create(AOwner: TWinControl; const ClassName: string);
  52.     destructor Destroy; override;
  53.     procedure DestroyHandle;
  54.     property Ctl3DButton: Boolean;
  55.     property Handle: HWnd;
  56.   end;
  57.  
  58. { TDBEdit }
  59.  
  60.   TDBEdit = class(TCustomMaskEdit)
  61.   protected
  62.     procedure Change; override;
  63.     function EditCanModify: Boolean; override;
  64.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  65.     procedure KeyPress(var Key: Char); override;
  66.     procedure Loaded; override;
  67.     procedure Notification(AComponent: TComponent;
  68.       Operation: TOperation); override;
  69.     procedure Reset; override;
  70.   public
  71.     constructor Create(AOwner: TComponent); override;
  72.     destructor Destroy; override;
  73.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  74.     function UpdateAction(Action: TBasicAction): Boolean; override;
  75.     function UseRightToLeftAlignment: Boolean; override;
  76.     property Field: TField;
  77.   published
  78.     property Anchors;
  79.     property AutoSelect;
  80.     property AutoSize;
  81.     property BiDiMode;
  82.     property BorderStyle;
  83.     property CharCase;
  84.     property Color;
  85.     property Constraints;
  86.     property Ctl3D;
  87.     property DataField: string;
  88.     property DataSource: TDataSource;
  89.     property DragCursor;
  90.     property DragKind;
  91.     property DragMode;
  92.     property Enabled;
  93.     property Font;
  94.     property ImeMode;
  95.     property ImeName;
  96.     property MaxLength;
  97.     property ParentBiDiMode;
  98.     property ParentColor;
  99.     property ParentCtl3D;
  100.     property ParentFont;
  101.     property ParentShowHint;
  102.     property PasswordChar;
  103.     property PopupMenu;
  104.     property ReadOnly: Boolean default False;
  105.     property ShowHint;
  106.     property TabOrder;
  107.     property TabStop;
  108.     property Visible;
  109.     property OnChange;
  110.     property OnClick;
  111.     property OnDblClick;
  112.     property OnDragDrop;
  113.     property OnDragOver;
  114.     property OnEndDock;
  115.     property OnEndDrag;
  116.     property OnEnter;
  117.     property OnExit;
  118.     property OnKeyDown;
  119.     property OnKeyPress;
  120.     property OnKeyUp;
  121.     property OnMouseDown;
  122.     property OnMouseMove;
  123.     property OnMouseUp;
  124.     property OnStartDock;
  125.     property OnStartDrag;
  126.   end;
  127.  
  128. { TDBText }
  129.  
  130.   TDBText = class(TCustomLabel)
  131.   protected
  132.     function GetLabelText: string; override;
  133.     procedure Loaded; override;
  134.     procedure Notification(AComponent: TComponent;
  135.       Operation: TOperation); override;
  136.     procedure SetAutoSize(Value: Boolean); override;
  137.   public
  138.     constructor Create(AOwner: TComponent); override;
  139.     destructor Destroy; override;
  140.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  141.     function UpdateAction(Action: TBasicAction): Boolean; override;
  142.     function UseRightToLeftAlignment: Boolean; override;
  143.     property Field: TField;
  144.   published
  145.     property Align;
  146.     property Alignment;
  147.     property Anchors;
  148.     property AutoSize default False;
  149.     property BiDiMode;
  150.     property Color;
  151.     property Constraints;
  152.     property DataField: string;
  153.     property DataSource: TDataSource;
  154.     property DragCursor;
  155.     property DragKind;
  156.     property DragMode;
  157.     property Enabled;
  158.     property Font;
  159.     property ParentBiDiMode;
  160.     property ParentColor;
  161.     property ParentFont;
  162.     property ParentShowHint;
  163.     property PopupMenu;
  164.     property Transparent;
  165.     property ShowHint;
  166.     property Visible;
  167.     property WordWrap;
  168.     property OnClick;
  169.     property OnDblClick;
  170.     property OnDragDrop;
  171.     property OnDragOver;
  172.     property OnEndDock;
  173.     property OnEndDrag;
  174.     property OnMouseDown;
  175.     property OnMouseMove;
  176.     property OnMouseUp;
  177.     property OnStartDock;
  178.     property OnStartDrag;
  179.   end;
  180.  
  181. { TDBCheckBox }
  182.  
  183.   TDBCheckBox = class(TCustomCheckBox)
  184.   protected
  185.     procedure Toggle; override;
  186.     procedure KeyPress(var Key: Char); override;
  187.     procedure Notification(AComponent: TComponent;
  188.       Operation: TOperation); override;
  189.     procedure WndProc(var Message: TMessage); override;
  190.   public
  191.     constructor Create(AOwner: TComponent); override;
  192.     destructor Destroy; override;
  193.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  194.     function UpdateAction(Action: TBasicAction): Boolean; override;
  195.     function UseRightToLeftAlignment: Boolean; override;
  196.     property Checked;
  197.     property Field: TField;
  198.     property State;
  199.   published
  200.     property Action;
  201.     property Alignment;
  202.     property AllowGrayed;
  203.     property Anchors;
  204.     property BiDiMode;
  205.     property Caption;
  206.     property Color;
  207.     property Constraints;
  208.     property Ctl3D;
  209.     property DataField: string;
  210.     property DataSource: TDataSource;
  211.     property DragCursor;
  212.     property DragKind;
  213.     property DragMode;
  214.     property Enabled;
  215.     property Font;
  216.     property ParentBiDiMode;
  217.     property ParentColor;
  218.     property ParentCtl3D;
  219.     property ParentFont;
  220.     property ParentShowHint;
  221.     property PopupMenu;
  222.     property ReadOnly: Boolean default False;
  223.     property ShowHint;
  224.     property TabOrder;
  225.     property TabStop;
  226.     property ValueChecked: string;
  227.     property ValueUnchecked: string;
  228.     property Visible;
  229.     property OnClick;
  230.     property OnDragDrop;
  231.     property OnDragOver;
  232.     property OnEndDock;
  233.     property OnEndDrag;
  234.     property OnEnter;
  235.     property OnExit;
  236.     property OnKeyDown;
  237.     property OnKeyPress;
  238.     property OnKeyUp;
  239.     property OnMouseDown;
  240.     property OnMouseMove;
  241.     property OnMouseUp;
  242.     property OnStartDock;
  243.     property OnStartDrag;
  244.   end;
  245.  
  246. { TDBComboBox }
  247.  
  248.   TDBComboBox = class(TCustomComboBox)
  249.   protected
  250.     procedure Change; override;
  251.     procedure Click; override;
  252.     procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd;
  253.       ComboProc: Pointer); override;
  254.     procedure CreateWnd; override;
  255.     procedure DropDown; override;
  256.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  257.     procedure KeyPress(var Key: Char); override;
  258.     procedure Loaded; override;
  259.     procedure Notification(AComponent: TComponent;
  260.       Operation: TOperation); override;
  261.     procedure SetStyle(Value: TComboboxStyle); override;
  262.     procedure WndProc(var Message: TMessage); override;
  263.   public
  264.     constructor Create(AOwner: TComponent); override;
  265.     destructor Destroy; override;
  266.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  267.     function UpdateAction(Action: TBasicAction): Boolean; override;
  268.     function UseRightToLeftAlignment: Boolean; override;
  269.     property Field: TField;
  270.     property Text;
  271.   published
  272.     property Style; {Must be published before Items}
  273.     property Anchors;
  274.     property BiDiMode;
  275.     property Color;
  276.     property Constraints;
  277.     property Ctl3D;
  278.     property DataField: string;
  279.     property DataSource: TDataSource;
  280.     property DragCursor;
  281.     property DragKind;
  282.     property DragMode;
  283.     property DropDownCount;
  284.     property Enabled;
  285.     property Font;
  286.     property ImeMode;
  287.     property ImeName;
  288.     property ItemHeight;
  289.     property Items write SetItems;
  290.     property ParentBiDiMode;
  291.     property ParentColor;
  292.     property ParentCtl3D;
  293.     property ParentFont;
  294.     property ParentShowHint;
  295.     property PopupMenu;
  296.     property ReadOnly: Boolean default False;
  297.     property ShowHint;
  298.     property Sorted;
  299.     property TabOrder;
  300.     property TabStop;
  301.     property Visible;
  302.     property OnChange;
  303.     property OnClick;
  304.     property OnDblClick;
  305.     property OnDragDrop;
  306.     property OnDragOver;
  307.     property OnDrawItem;
  308.     property OnDropDown;
  309.     property OnEndDock;
  310.     property OnEndDrag;
  311.     property OnEnter;
  312.     property OnExit;
  313.     property OnKeyDown;
  314.     property OnKeyPress;
  315.     property OnKeyUp;
  316.     property OnMeasureItem;
  317.     property OnStartDock;
  318.     property OnStartDrag;
  319.   end;
  320.  
  321. { TDBListBox }
  322.  
  323.   TDBListBox = class(TCustomListBox)
  324.   protected
  325.     procedure Click; override;
  326.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  327.     procedure KeyPress(var Key: Char); override;
  328.     procedure Notification(AComponent: TComponent;
  329.       Operation: TOperation); override;
  330.   public
  331.     constructor Create(AOwner: TComponent); override;
  332.     destructor Destroy; override;
  333.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  334.     function UpdateAction(Action: TBasicAction): Boolean; override;
  335.     function UseRightToLeftAlignment: Boolean; override;
  336.     property Field: TField;
  337.   published
  338.     property Align;
  339.     property Anchors;
  340.     property BiDiMode;
  341.     property BorderStyle;
  342.     property Color;
  343.     property Constraints;
  344.     property Ctl3D default True;
  345.     property DataField: string;
  346.     property DataSource: TDataSource;
  347.     property DragCursor;
  348.     property DragKind;
  349.     property DragMode;
  350.     property Enabled;
  351.     property Font;
  352.     property ImeMode;
  353.     property ImeName;
  354.     property IntegralHeight;
  355.     property ItemHeight;
  356.     property Items write SetItems;
  357.     property ParentBiDiMode;
  358.     property ParentColor;
  359.     property ParentCtl3D;
  360.     property ParentFont;
  361.     property ParentShowHint;
  362.     property PopupMenu;
  363.     property ReadOnly: Boolean default False;
  364.     property ShowHint;
  365.     property Style;
  366.     property TabOrder;
  367.     property TabStop;
  368.     property Visible;
  369.     property OnClick;
  370.     property OnDblClick;
  371.     property OnDragDrop;
  372.     property OnDragOver;
  373.     property OnDrawItem;
  374.     property OnEndDock;
  375.     property OnEndDrag;
  376.     property OnEnter;
  377.     property OnExit;
  378.     property OnKeyDown;
  379.     property OnKeyPress;
  380.     property OnKeyUp;
  381.     property OnMeasureItem;
  382.     property OnMouseDown;
  383.     property OnMouseMove;
  384.     property OnMouseUp;
  385.     property OnStartDock;
  386.     property OnStartDrag;
  387.   end;
  388.  
  389. { TDBRadioGroup }
  390.  
  391.   TDBRadioGroup = class(TCustomRadioGroup)
  392.   protected
  393.     procedure Change; dynamic;
  394.     procedure Click; override;
  395.     procedure KeyPress(var Key: Char); override;
  396.     function CanModify: Boolean; override;
  397.     procedure Notification(AComponent: TComponent;
  398.       Operation: TOperation); override;
  399.     property DataLink: TFieldDataLink;
  400.   public
  401.     constructor Create(AOwner: TComponent); override;
  402.     destructor Destroy; override;
  403.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  404.     function UpdateAction(Action: TBasicAction): Boolean; override;
  405.     function UseRightToLeftAlignment: Boolean; override;
  406.     property Field: TField;
  407.     property ItemIndex;
  408.     property Value: string;
  409.   published
  410.     property Align;
  411.     property Anchors;
  412.     property BiDiMode;
  413.     property Caption;
  414.     property Color;
  415.     property Columns;
  416.     property Constraints;
  417.     property Ctl3D;
  418.     property DataField: string;
  419.     property DataSource: TDataSource;
  420.     property DragCursor;
  421.     property DragKind;
  422.     property DragMode;
  423.     property Enabled;
  424.     property Font;
  425.     property Items write SetItems;
  426.     property ParentBiDiMode;
  427.     property ParentColor;
  428.     property ParentCtl3D;
  429.     property ParentFont;
  430.     property ParentShowHint;
  431.     property PopupMenu;
  432.     property ReadOnly: Boolean default False;
  433.     property ShowHint;
  434.     property TabOrder;
  435.     property TabStop;
  436.     property Values: TStrings;
  437.     property Visible;
  438.     property OnChange: TNotifyEvent;
  439.     property OnClick;
  440.     property OnDragDrop;
  441.     property OnDragOver;
  442.     property OnEndDock;
  443.     property OnEndDrag;
  444.     property OnEnter;
  445.     property OnExit;
  446.     property OnStartDock;
  447.     property OnStartDrag;
  448.   end;
  449.  
  450. { TDBMemo }
  451.  
  452.   TDBMemo = class(TCustomMemo)
  453.   protected
  454.     procedure Change; override;
  455.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  456.     procedure KeyPress(var Key: Char); override;
  457.     procedure Loaded; override;
  458.     procedure Notification(AComponent: TComponent;
  459.       Operation: TOperation); override;
  460.     procedure WndProc(var Message: TMessage); override;
  461.   public
  462.     constructor Create(AOwner: TComponent); override;
  463.     destructor Destroy; override;
  464.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  465.     procedure LoadMemo;
  466.     function UpdateAction(Action: TBasicAction): Boolean; override;
  467.     function UseRightToLeftAlignment: Boolean; override;
  468.     property Field: TField;
  469.   published
  470.     property Align;
  471.     property Alignment;
  472.     property Anchors;
  473.     property AutoDisplay: Boolean default True;
  474.     property BiDiMode;
  475.     property BorderStyle;
  476.     property Color;
  477.     property Constraints;
  478.     property Ctl3D;
  479.     property DataField: string;
  480.     property DataSource: TDataSource;
  481.     property DragCursor;
  482.     property DragKind;
  483.     property DragMode;
  484.     property Enabled;
  485.     property Font;
  486.     property ImeMode;
  487.     property ImeName;
  488.     property MaxLength;
  489.     property ParentBiDiMode;
  490.     property ParentColor;
  491.     property ParentCtl3D;
  492.     property ParentFont;
  493.     property ParentShowHint;
  494.     property PopupMenu;
  495.     property ReadOnly: Boolean default False;
  496.     property ScrollBars;
  497.     property ShowHint;
  498.     property TabOrder;
  499.     property TabStop;
  500.     property Visible;
  501.     property WantTabs;
  502.     property WordWrap;
  503.     property OnChange;
  504.     property OnClick;
  505.     property OnDblClick;
  506.     property OnDragDrop;
  507.     property OnDragOver;
  508.     property OnEndDock;
  509.     property OnEndDrag;
  510.     property OnEnter;
  511.     property OnExit;
  512.     property OnKeyDown;
  513.     property OnKeyPress;
  514.     property OnKeyUp;
  515.     property OnMouseDown;
  516.     property OnMouseMove;
  517.     property OnMouseUp;
  518.     property OnStartDock;
  519.     property OnStartDrag;
  520.   end;
  521.  
  522. { TDBImage }
  523.  
  524.   TDBImage = class(TCustomControl)
  525.   protected
  526.     procedure CreateParams(var Params: TCreateParams); override;
  527.     function GetPalette: HPALETTE; override;
  528.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  529.     procedure KeyPress(var Key: Char); override;
  530.     procedure Notification(AComponent: TComponent;
  531.       Operation: TOperation); override;
  532.     procedure Paint; override;
  533.   public
  534.     constructor Create(AOwner: TComponent); override;
  535.     destructor Destroy; override;
  536.     procedure CopyToClipboard;
  537.     procedure CutToClipboard;
  538.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  539.     procedure LoadPicture;
  540.     procedure PasteFromClipboard;
  541.     function UpdateAction(Action: TBasicAction): Boolean; override;
  542.     property Field: TField;
  543.     property Picture: TPicture;
  544.   published
  545.     property Align;
  546.     property Anchors;
  547.     property AutoDisplay: Boolean default True;
  548.     property BorderStyle: TBorderStyle default bsSingle;
  549.     property Center: Boolean default True;
  550.     property Color;
  551.     property Constraints;
  552.     property Ctl3D;
  553.     property DataField: string;
  554.     property DataSource: TDataSource;
  555.     property DragCursor;
  556.     property DragKind;
  557.     property DragMode;
  558.     property Enabled;
  559.     property Font;
  560.     property ParentColor default False;
  561.     property ParentCtl3D;
  562.     property ParentFont;
  563.     property ParentShowHint;
  564.     property PopupMenu;
  565.     property ReadOnly: Boolean default False;
  566.     property QuickDraw: Boolean default True;
  567.     property ShowHint;
  568.     property Stretch: Boolean default False;
  569.     property TabOrder;
  570.     property TabStop default True;
  571.     property Visible;
  572.     property OnClick;
  573.     property OnDblClick;
  574.     property OnDragDrop;
  575.     property OnDragOver;
  576.     property OnEndDock;
  577.     property OnEndDrag;
  578.     property OnEnter;
  579.     property OnExit;
  580.     property OnKeyDown;
  581.     property OnKeyPress;
  582.     property OnKeyUp;
  583.     property OnMouseDown;
  584.     property OnMouseMove;
  585.     property OnMouseUp;
  586.     property OnStartDock;
  587.     property OnStartDrag;
  588.   end;
  589.  
  590. const
  591.   InitRepeatPause = 400;  { pause before repeat timer (ms) }
  592.   RepeatPause     = 100;  { pause before hint window displays (ms)}
  593.   SpaceSize       =  5;   { size of space between special buttons }
  594.  
  595. type
  596.   TNavButton = class;
  597.   TNavDataLink = class;
  598.  
  599.   TNavGlyph = (ngEnabled, ngDisabled);
  600.   TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast,
  601.                   nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh);
  602.   TButtonSet = set of TNavigateBtn;
  603.   TNavButtonStyle = set of (nsAllowTimer, nsFocusRect);
  604.  
  605.   ENavClick = procedure (Sender: TObject; Button: TNavigateBtn) of object;
  606.  
  607. { TDBNavigator }
  608.  
  609.   TDBNavigator = class (TCustomPanel)
  610.   protected
  611.     Buttons: array[TNavigateBtn] of TNavButton;
  612.     procedure DataChanged;
  613.     procedure EditingChanged;
  614.     procedure ActiveChanged;
  615.     procedure Loaded; override;
  616.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  617.     procedure Notification(AComponent: TComponent;
  618.       Operation: TOperation); override;
  619.     procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
  620.   public
  621.     constructor Create(AOwner: TComponent); override;
  622.     destructor Destroy; override;
  623.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  624.     procedure BtnClick(Index: TNavigateBtn); virtual;
  625.   published
  626.     property DataSource: TDataSource;
  627.     property VisibleButtons: TButtonSet default [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh];
  628.     property Align;
  629.     property Anchors;
  630.     property Constraints;
  631.     property DragCursor;
  632.     property DragKind;
  633.     property DragMode;
  634.     property Enabled;
  635.     property Flat: Boolean default False;
  636.     property Ctl3D;
  637.     property Hints: TStrings;
  638.     property ParentCtl3D;
  639.     property ParentShowHint;
  640.     property PopupMenu;
  641.     property ConfirmDelete: Boolean default True;
  642.     property ShowHint;
  643.     property TabOrder;
  644.     property TabStop;
  645.     property Visible;
  646.     property BeforeAction: ENavClick;
  647.     property OnClick: ENavClick;
  648.     property OnDblClick;
  649.     property OnDragDrop;
  650.     property OnDragOver;
  651.     property OnEndDock;
  652.     property OnEndDrag;
  653.     property OnEnter;
  654.     property OnExit;
  655.     property OnResize;
  656.     property OnStartDock;
  657.     property OnStartDrag;
  658.   end;
  659.  
  660. { TNavButton }
  661.  
  662.   TNavButton = class(TSpeedButton)
  663.   protected
  664.     procedure Paint; override;
  665.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  666.       X, Y: Integer); override;
  667.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  668.       X, Y: Integer); override;
  669.   public
  670.     destructor Destroy; override;
  671.     property NavStyle: TNavButtonStyle;
  672.     property Index : TNavigateBtn;
  673.   end;
  674.  
  675. { TNavDataLink }
  676.  
  677.   TNavDataLink = class(TDataLink)
  678.   protected
  679.     procedure EditingChanged; override;
  680.     procedure DataSetChanged; override;
  681.     procedure ActiveChanged; override;
  682.   public
  683.     constructor Create(ANav: TDBNavigator);
  684.     destructor Destroy; override;
  685.   end;
  686.  
  687. { TDBLookupControl }
  688.  
  689.   TDBLookupControl = class;
  690.  
  691.   TDataSourceLink = class(TDataLink)
  692.   protected
  693.     procedure FocusControl(Field: TFieldRef); override;
  694.     procedure ActiveChanged; override;
  695.     procedure LayoutChanged; override;
  696.     procedure RecordChanged(Field: TField); override;
  697.   public
  698.     constructor Create;
  699.   end;
  700.  
  701.   TListSourceLink = class(TDataLink)
  702.   protected
  703.     procedure ActiveChanged; override;
  704.     procedure DataSetChanged; override;
  705.     procedure LayoutChanged; override;
  706.   public
  707.     constructor Create;
  708.   end;
  709.  
  710.   TDBLookupControl = class(TCustomControl)
  711.   protected
  712.     function CanModify: Boolean; virtual;
  713.     function GetBorderSize: Integer; virtual;
  714.     function GetTextHeight: Integer; virtual;
  715.     procedure KeyValueChanged; virtual;
  716.     procedure ListLinkDataChanged; virtual;
  717.     function LocateKey: Boolean; virtual;
  718.     procedure Notification(AComponent: TComponent;
  719.       Operation: TOperation); override;
  720.     procedure ProcessSearchKey(Key: Char); virtual;
  721.     procedure SelectKeyValue(const Value: Variant); virtual;
  722.     procedure UpdateDataFields; virtual;
  723.     procedure UpdateListFields; virtual;
  724.     property DataField: string;
  725.     property DataSource: TDataSource;
  726.     property HasFocus: Boolean;
  727.     property KeyField: string;
  728.     property KeyValue: Variant;
  729.     property ListActive: Boolean;
  730.     property ListField: string;
  731.     property ListFieldIndex: Integer default 0;
  732.     property ListFields: TList;
  733.     property ListLink: TListSourceLink;
  734.     property ListSource: TDataSource;
  735.     property ParentColor default False;
  736.     property ReadOnly: Boolean default False;
  737.     property SearchText: string;
  738.     property TabStop default True;
  739.   public
  740.     constructor Create(AOwner: TComponent); override;
  741.     destructor Destroy; override;
  742.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  743.     function UpdateAction(Action: TBasicAction): Boolean; override;
  744.     property Field: TField;
  745.   end;
  746.  
  747. { TDBLookupListBox }
  748.  
  749.   TDBLookupListBox = class(TDBLookupControl)
  750.   protected
  751.     procedure CreateParams(var Params: TCreateParams); override;
  752.     procedure CreateWnd; override;
  753.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  754.     procedure KeyPress(var Key: Char); override;
  755.     procedure KeyValueChanged; override;
  756.     procedure ListLinkDataChanged; override;
  757.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  758.       X, Y: Integer); override;
  759.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  760.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  761.       X, Y: Integer); override;
  762.     procedure Paint; override;
  763.     procedure UpdateListFields; override;
  764.   public
  765.     constructor Create(AOwner: TComponent); override;
  766.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  767.     function UpdateAction(Action: TBasicAction): Boolean; override;
  768.     function UseRightToLeftAlignment: Boolean; override;
  769.     property KeyValue;
  770.     property SelectedItem: string;
  771.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  772.   published
  773.     property Align;
  774.     property Anchors;
  775.     property BiDiMode;
  776.     property BorderStyle: TBorderStyle default bsSingle;
  777.     property Color;
  778.     property Constraints;
  779.     property Ctl3D;
  780.     property DataField;
  781.     property DataSource;
  782.     property DragCursor;
  783.     property DragKind;
  784.     property DragMode;
  785.     property Enabled;
  786.     property Font;
  787.     property ImeMode;
  788.     property ImeName;
  789.     property KeyField;
  790.     property ListField;
  791.     property ListFieldIndex;
  792.     property ListSource;
  793.     property ParentBiDiMode;
  794.     property ParentColor;
  795.     property ParentCtl3D;
  796.     property ParentFont;
  797.     property ParentShowHint;
  798.     property PopupMenu;
  799.     property ReadOnly;
  800.     property RowCount: Integer;
  801.     property ShowHint;
  802.     property TabOrder;
  803.     property TabStop;
  804.     property Visible;
  805.     property OnClick;
  806.     property OnDblClick;
  807.     property OnDragDrop;
  808.     property OnDragOver;
  809.     property OnEndDock;
  810.     property OnEndDrag;
  811.     property OnEnter;
  812.     property OnExit;
  813.     property OnKeyDown;
  814.     property OnKeyPress;
  815.     property OnKeyUp;
  816.     property OnMouseDown;
  817.     property OnMouseMove;
  818.     property OnMouseUp;
  819.     property OnStartDock;
  820.     property OnStartDrag;
  821.   end;
  822.  
  823. { TDBLookupComboBox }
  824.  
  825.   TPopupDataList = class(TDBLookupListBox)
  826.   protected
  827.     procedure CreateParams(var Params: TCreateParams); override;
  828.   public
  829.     constructor Create(AOwner: TComponent); override;
  830.   end;
  831.  
  832.   TDropDownAlign = (daLeft, daRight, daCenter);
  833.  
  834.   TDBLookupComboBox = class(TDBLookupControl)
  835.   protected
  836.     procedure CreateParams(var Params: TCreateParams); override;
  837.     procedure Paint; override;
  838.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  839.     procedure KeyPress(var Key: Char); override;
  840.     procedure KeyValueChanged; override;
  841.     procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  842.       X, Y: Integer); override;
  843.     procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
  844.     procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
  845.       X, Y: Integer); override;
  846.     procedure UpdateListFields; override;
  847.   public
  848.     constructor Create(AOwner: TComponent); override;
  849.     procedure CloseUp(Accept: Boolean); virtual;
  850.     procedure DropDown; virtual;
  851.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  852.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  853.     function UpdateAction(Action: TBasicAction): Boolean; override;
  854.     function UseRightToLeftAlignment: Boolean; override;
  855.     property KeyValue;
  856.     property ListVisible: Boolean;
  857.     property Text: string;
  858.   published
  859.     property Anchors;
  860.     property BiDiMode;
  861.     property Color;
  862.     property Constraints;
  863.     property Ctl3D;
  864.     property DataField;
  865.     property DataSource;
  866.     property DragCursor;
  867.     property DragKind;
  868.     property DragMode;
  869.     property DropDownAlign: TDropDownAlign default daLeft;
  870.     property DropDownRows: Integer default 7;
  871.     property DropDownWidth: Integer default 0;
  872.     property Enabled;
  873.     property Font;
  874.     property ImeMode;
  875.     property ImeName;
  876.     property KeyField;
  877.     property ListField;
  878.     property ListFieldIndex;
  879.     property ListSource;
  880.     property ParentBiDiMode;
  881.     property ParentColor;
  882.     property ParentCtl3D;
  883.     property ParentFont;
  884.     property ParentShowHint;
  885.     property PopupMenu;
  886.     property ReadOnly;
  887.     property ShowHint;
  888.     property TabOrder;
  889.     property TabStop;
  890.     property Visible;
  891.     property OnClick;
  892.     property OnCloseUp: TNotifyEvent;
  893.     property OnDragDrop;
  894.     property OnDragOver;
  895.     property OnDropDown: TNotifyEvent;
  896.     property OnEndDock;
  897.     property OnEndDrag;
  898.     property OnEnter;
  899.     property OnExit;
  900.     property OnKeyDown;
  901.     property OnKeyPress;
  902.     property OnKeyUp;
  903.     property OnMouseDown;
  904.     property OnMouseMove;
  905.     property OnMouseUp;
  906.     property OnStartDock;
  907.     property OnStartDrag;
  908.   end;
  909.  
  910. { TDBRichEdit }
  911.  
  912.   TDBRichEdit = class(TCustomRichEdit)
  913.   protected
  914.     procedure Change; override;
  915.     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
  916.     procedure KeyPress(var Key: Char); override;
  917.     procedure Loaded; override;
  918.     procedure Notification(AComponent: TComponent;
  919.       Operation: TOperation); override;
  920.   public
  921.     constructor Create(AOwner: TComponent); override;
  922.     destructor Destroy; override;
  923.     function ExecuteAction(Action: TBasicAction): Boolean; override;
  924.     procedure LoadMemo;
  925.     function UpdateAction(Action: TBasicAction): Boolean; override;
  926.     function UseRightToLeftAlignment: Boolean; override;
  927.     property Field: TField;
  928.   published
  929.     property Align;
  930.     property Alignment;
  931.     property Anchors;
  932.     property AutoDisplay: Boolean default True;
  933.     property BiDiMode;
  934.     property BorderStyle;
  935.     property Color;
  936.     property Constraints;
  937.     property Ctl3D;
  938.     property DataField: string;
  939.     property DataSource: TDataSource;
  940.     property DragCursor;
  941.     property DragKind;
  942.     property DragMode;
  943.     property Enabled;
  944.     property Font;
  945.     property HideSelection;
  946.     property HideScrollBars;
  947.     property ImeMode;
  948.     property ImeName;
  949.     property MaxLength;
  950.     property ParentBiDiMode;
  951.     property ParentColor;
  952.     property ParentCtl3D;
  953.     property ParentFont;
  954.     property ParentShowHint;
  955.     property PlainText;
  956.     property PopupMenu;
  957.     property ReadOnly: Boolean default False;
  958.     property ScrollBars;
  959.     property ShowHint;
  960.     property TabOrder;
  961.     property TabStop;
  962.     property Visible;
  963.     property WantReturns;
  964.     property WantTabs;
  965.     property WordWrap;
  966.     property OnChange;
  967.     property OnClick;
  968.     property OnDblClick;
  969.     property OnDragDrop;
  970.     property OnDragOver;
  971.     property OnEndDock;
  972.     property OnEndDrag;
  973.     property OnEnter;
  974.     property OnExit;
  975.     property OnKeyDown;
  976.     property OnKeyPress;
  977.     property OnKeyUp;
  978.     property OnMouseDown;
  979.     property OnMouseMove;
  980.     property OnMouseUp;
  981.     property OnResizeRequest;
  982.     property OnSelectionChange;
  983.     property OnProtectChange;
  984.     property OnSaveClipboard;
  985.     property OnStartDock;
  986.     property OnStartDrag;
  987.   end;
  988.  
  989. function OkToChangeFieldAlignment(AField: TField; Alignment: TAlignment): Boolean;
  990. function DBUseRightToLeftAlignment(AControl: TControl; AField: TField): Boolean;
  991.  
  992. implementation
  993.