{********************************************************************} { } { Developer Express Visual Component Library } { ExpressEditors } { } { Copyright (c) 1998-2009 Developer Express Inc. } { ALL RIGHTS RESERVED } { } { The entire contents of this file is protected by U.S. and } { International Copyright Laws. Unauthorized reproduction, } { reverse-engineering, and distribution of all or any portion of } { the code contained in this file is strictly prohibited and may } { result in severe civil and criminal penalties and will be } { prosecuted to the maximum extent possible under the law. } { } { RESTRICTIONS } { } { THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES } { (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE } { SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS } { LICENSED TO DISTRIBUTE THE EXPRESSEDITORS AND ALL } { ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. } { } { THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED } { FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE } { COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE } { AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT } { AND PERMISSION FROM DEVELOPER EXPRESS INC. } { } { CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON } { ADDITIONAL RESTRICTIONS. } { } {********************************************************************} unit cxDBEdit; {$I cxVer.inc} interface uses Variants, Windows, Messages, Classes, Controls, DB, DBCtrls, SysUtils, cxBlobEdit, cxButtonEdit, cxCalc, cxCalendar, cxCheckBox, cxClasses, cxContainer, cxCurrencyEdit, cxCustomData, cxDataUtils, cxDB, cxDropDownEdit, cxEdit, cxHyperLinkEdit, cxImage, cxImageComboBox, cxListBox, cxMaskEdit, cxMemo, cxMRUEdit, cxRadioGroup, cxSpinEdit, cxTextEdit, cxTimeEdit; type TcxDBTextEdit = class; { TcxCustomDBEditDefaultValuesProvider } TcxCustomDBEditDefaultValuesProvider = class(TcxCustomEditDefaultValuesProvider) private FDataSource: TDataSource; FField: TField; FFreeNotifier: TcxFreeNotificator; procedure FieldFreeNotification(Sender: TComponent); procedure SetDataSource(Value: TDataSource); procedure SetField(Value: TField); public constructor Create(AOwner: TPersistent); override; destructor Destroy; override; function CanSetEditMode: Boolean; override; function DefaultAlignment: TAlignment; override; function DefaultBlobKind: TcxBlobKind; override; function DefaultCanModify: Boolean; override; function DefaultDisplayFormat: string; override; function DefaultEditFormat: string; override; function DefaultEditMask: string; override; function DefaultIsFloatValue: Boolean; override; function DefaultMaxLength: Integer; override; function DefaultMaxValue: Double; override; function DefaultMinValue: Double; override; function DefaultPrecision: Integer; override; function DefaultReadOnly: Boolean; override; function DefaultRequired: Boolean; override; function IsBlob: Boolean; override; function IsCurrency: Boolean; override; function IsDataAvailable: Boolean; override; function IsDataStorage: Boolean; override; function IsDisplayFormatDefined(AIsCurrencyValueAccepted: Boolean): Boolean; override; function IsOnGetTextAssigned: Boolean; override; function IsOnSetTextAssigned: Boolean; override; function IsValidChar(AChar: Char): Boolean; override; property DataSource: TDataSource read FDataSource write SetDataSource; property Field: TField read FField write SetField; end; { TcxDBFieldDataLink } TcxDBFieldDataLink = class(TcxCustomFieldDataLink) protected procedure FocusControl(Field: TFieldRef); override; procedure VisualControlChanged; override; procedure UpdateRightToLeft; override; end; { TcxDBDataBinding } TcxDBDataBinding = class(TcxCustomDBDataBinding) protected function GetDataLinkClass: TcxCustomFieldDataLinkClass; override; published property DataSource; property DataField; end; { TcxEditFieldDataLink } TcxDBEditDataBinding = class; TcxEditFieldDataLink = class(TDataLink) private FControl: TComponent; FDataBinding: TcxDBEditDataBinding; FEditing: Boolean; FField: TField; FFieldName: string; FFreeNotifier: TcxFreeNotificator; FMasterField: TField; FModified: Boolean; procedure FieldFreeNotification(Sender: TComponent); function GetCanModify: Boolean; procedure InternalSetField(Value: TField); procedure SetEditing(Value: Boolean); procedure SetField(Value: TField); procedure SetFieldName(const Value: string); procedure UpdateField; procedure UpdateMasterField; procedure UpdateRightToLeft; protected procedure ActiveChanged; override; procedure DataEvent(Event: TDataEvent; Info: Longint); override; procedure EditingChanged; override; procedure FocusControl(Field: TFieldRef); override; procedure LayoutChanged; override; procedure RecordChanged(Field: TField); override; procedure UpdateData; override; procedure ResetModified; public constructor Create(ADataBinding: TcxDBEditDataBinding); destructor Destroy; override; function Edit: Boolean; procedure Modified; procedure Reset; property CanModify: Boolean read GetCanModify; property Control: TComponent read FControl write FControl; property Editing: Boolean read FEditing; property Field: TField read FField; property FieldName: string read FFieldName write SetFieldName; end; { TcxDBEditDataBinding } TcxDBEditDataBinding = class(TcxEditDataBinding) private FDataLink: TcxEditFieldDataLink; FRefreshCount: Integer; function GetDataField: string; function GetDataSource: TDataSource; function GetDefaultValuesProvider: TcxCustomDBEditDefaultValuesProvider; function GetField: TField; procedure SetDataField(const Value: string); procedure SetDataSource(Value: TDataSource); protected procedure DefaultValuesChanged; override; procedure DisableRefresh; procedure EnableRefresh; function GetEditing: Boolean; override; function GetModified: Boolean; override; function GetStoredValue: TcxEditValue; override; function IsNull: Boolean; override; function IsInnerControlHaveToBeReadOnly: Boolean; override; function IsRefreshDisabled: Boolean; procedure Reset; override; procedure SetDisplayValue(const Value: TcxEditValue); override; function SetEditMode: Boolean; override; procedure SetStoredValue(const Value: TcxEditValue); override; procedure DataChanged; virtual; procedure DataSetChange; virtual; procedure EditingChanged; virtual; function IsLookupControl: Boolean; virtual; procedure UpdateData; virtual; property DefaultValuesProvider: TcxCustomDBEditDefaultValuesProvider read GetDefaultValuesProvider; public constructor Create(AEdit: TcxCustomEdit); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; function CanCheckEditorValue: Boolean; override; function CanModify: Boolean; override; function CanPostEditorValue: Boolean; override; function ExecuteAction(Action: TBasicAction): Boolean; override; class function GetDefaultValuesProviderClass: TcxCustomEditDefaultValuesProviderClass; override; procedure SetModified; override; function UpdateAction(Action: TBasicAction): Boolean; override; procedure UpdateDisplayValue; override; procedure UpdateNotConnectedDBEditDisplayValue; override; property DataLink: TcxEditFieldDataLink read FDataLink; property Field: TField read GetField; published property DataField: string read GetDataField write SetDataField; property DataSource: TDataSource read GetDataSource write SetDataSource; end; { TcxDBTextEditDataBinding } TcxDBTextEditDataBinding = class(TcxDBEditDataBinding) protected procedure SetDisplayValue(const Value: TcxEditValue); override; public procedure UpdateNotConnectedDBEditDisplayValue; override; end; { TcxDBTextEdit } TcxDBTextEdit = class(TcxCustomTextEdit) private function GetActiveProperties: TcxTextEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxTextEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxTextEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; function SupportsSpelling: Boolean; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxTextEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxTextEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnEndDock; property OnStartDock; end; { TcxDBMemo } TcxDBMemo = class(TcxCustomMemo) private function GetActiveProperties: TcxMemoProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxMemoProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxMemoProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxMemoProperties read GetActiveProperties; published property Align; property Anchors; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxMemoProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBMaskEdit } TcxDBMaskEdit = class(TcxCustomMaskEdit) private function GetActiveProperties: TcxMaskEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxMaskEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxMaskEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; function SupportsSpelling: Boolean; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxMaskEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxMaskEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnEndDock; property OnStartDock; end; { TcxDBButtonEdit } TcxDBButtonEdit = class(TcxCustomButtonEdit) private function GetActiveProperties: TcxButtonEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxButtonEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxButtonEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxButtonEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxButtonEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnEndDock; property OnStartDock; end; { TcxDBCheckBox } TcxDBCheckBox = class(TcxCustomCheckBox) private function GetActiveProperties: TcxCheckBoxProperties; function GetDataBinding: TcxDBEditDataBinding; function GetProperties: TcxCheckBoxProperties; procedure SetDataBinding(Value: TcxDBEditDataBinding); procedure SetProperties(Value: TcxCheckBoxProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxCheckBoxProperties read GetActiveProperties; property Checked; published property Action; property Align; property Anchors; property AutoSize; property Caption; property Constraints; property DataBinding: TcxDBEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ParentBackground; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxCheckBoxProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Transparent; property Visible; property OnClick; property OnContextPopup; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnEndDock; property OnStartDock; end; { TcxDBComboBox } TcxDBComboBox = class(TcxCustomComboBox) private function GetActiveProperties: TcxComboBoxProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxComboBoxProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxComboBoxProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; function SupportsSpelling: Boolean; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxComboBoxProperties read GetActiveProperties; property ItemIndex; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxComboBoxProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnEndDock; property OnStartDock; end; { TcxDBPopupEdit } TcxDBPopupEdit = class(TcxCustomPopupEdit) private function GetActiveProperties: TcxPopupEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxPopupEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxPopupEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; function SupportsSpelling: Boolean; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxPopupEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxPopupEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDrag; property OnEndDock; property OnStartDock; end; { TcxDBSpinEdit } TcxDBSpinEdit = class(TcxCustomSpinEdit) private function GetActiveProperties: TcxSpinEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxSpinEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxSpinEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxSpinEditProperties read GetActiveProperties; property Value; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxSpinEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBTimeEdit } TcxDBTimeEdit = class(TcxCustomTimeEdit) private function GetActiveProperties: TcxTimeEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxTimeEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxTimeEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxTimeEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxTimeEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBBlobEdit } TcxDBBlobEdit = class(TcxCustomBlobEdit) private function GetActiveProperties: TcxBlobEditProperties; function GetDataBinding: TcxDBEditDataBinding; function GetProperties: TcxBlobEditProperties; procedure SetDataBinding(Value: TcxDBEditDataBinding); procedure SetProperties(Value: TcxBlobEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxBlobEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxBlobEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnGetGraphicClass; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBCalcEdit } TcxDBCalcEdit = class(TcxCustomCalcEdit) private function GetActiveProperties: TcxCalcEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxCalcEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxCalcEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxCalcEditProperties read GetActiveProperties; property Value; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxCalcEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop default True; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBDateEdit } TcxDBDateEdit = class(TcxCustomDateEdit) private function GetActiveProperties: TcxDateEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxDateEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxDateEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxDateEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxDateEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop default True; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBCurrencyEdit } TcxDBCurrencyEdit = class(TcxCustomCurrencyEdit) private function GetActiveProperties: TcxCurrencyEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxCurrencyEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxCurrencyEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxCurrencyEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxCurrencyEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnEditing; property OnEndDock; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; end; { TcxDBHyperLinkEdit } TcxDBHyperLinkEdit = class(TcxCustomHyperLinkEdit) private function GetActiveProperties: TcxHyperLinkEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxHyperLinkEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxHyperLinkEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxHyperLinkEditProperties read GetActiveProperties; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxHyperLinkEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnEditing; property OnEndDock; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; end; { TcxDBImage } TcxDBImage = class(TcxCustomImage) private function GetActiveProperties: TcxImageProperties; function GetDataBinding: TcxDBEditDataBinding; function GetProperties: TcxImageProperties; procedure SetDataBinding(Value: TcxDBEditDataBinding); procedure SetProperties(Value: TcxImageProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxImageProperties read GetActiveProperties; published property Align; property Anchors; property AutoSize; property Constraints; property DataBinding: TcxDBEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ParentColor; property PopupMenu; property Properties: TcxImageProperties read GetProperties write SetProperties; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnGetGraphicClass; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; { TcxDBImageComboBox } TcxDBImageComboBox = class(TcxCustomImageComboBox) private function GetActiveProperties: TcxImageComboBoxProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxImageComboBoxProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxImageComboBoxProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxImageComboBoxProperties read GetActiveProperties; property ItemIndex; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxImageComboBoxProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnEditing; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; end; { TcxDBMRUEdit } TcxDBMRUEdit = class(TcxCustomMRUEdit) private function GetActiveProperties: TcxMRUEditProperties; function GetDataBinding: TcxDBTextEditDataBinding; function GetProperties: TcxMRUEditProperties; procedure SetDataBinding(Value: TcxDBTextEditDataBinding); procedure SetProperties(Value: TcxMRUEditProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxMRUEditProperties read GetActiveProperties; protected class function GetDataBindingClass: TcxEditDataBindingClass; override; published property Anchors; property AutoSize; property BeepOnEnter; property Constraints; property DataBinding: TcxDBTextEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ImeMode; property ImeName; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxMRUEditProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Visible; property OnClick; property OnContextPopup; property OnDblClick; property OnEditing; property OnEndDock; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; end; { TcxDBRadioGroupButton } TcxDBRadioGroupButton = class(TcxCustomRadioGroupButton) private procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; public constructor Create(AOwner: TComponent); override; end; { TcxDBRadioGroup } TcxDBRadioGroup = class(TcxCustomRadioGroup) private function GetActiveProperties: TcxRadioGroupProperties; function GetDataBinding: TcxDBEditDataBinding; function GetProperties: TcxRadioGroupProperties; procedure SetDataBinding(Value: TcxDBEditDataBinding); procedure SetProperties(Value: TcxRadioGroupProperties); procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK; public class function GetPropertiesClass: TcxCustomEditPropertiesClass; override; property ActiveProperties: TcxRadioGroupProperties read GetActiveProperties; protected function GetButtonInstance: TWinControl; override; class function GetDataBindingClass: TcxEditDataBindingClass; override; published property Align; property Alignment; property Anchors; property Caption; property Constraints; property Ctl3D; property DataBinding: TcxDBEditDataBinding read GetDataBinding write SetDataBinding; property DragCursor; property DragKind; property DragMode; property Enabled; property ParentBackground; property ParentColor; property ParentCtl3D; property ParentFont; property ParentShowHint; property PopupMenu; property Properties: TcxRadioGroupProperties read GetProperties write SetProperties; property ShowHint; property Style; property StyleDisabled; property StyleFocused; property StyleHot; property TabOrder; property TabStop; property Transparent; property Visible; property OnClick; property OnContextPopup; property OnDragDrop; property OnDragOver; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnStartDock; property OnStartDrag; end; { TcxDBListBox } TcxDBListBox = class(TcxListBox) private function GetDataBinding: TcxDBDataBinding; procedure SetDataBinding(Value: TcxDBDataBinding); protected function GetDataBindingClass: TcxCustomDataBindingClass; override; published property DataBinding: TcxDBDataBinding read GetDataBinding write SetDataBinding; end; function GetcxDBEditDataLink(AEdit: TcxCustomEdit): TDataLink; implementation uses cxVariants, StdCtrls; type TcxCustomEditAccess = class(TcxCustomEdit); TcxDataSetAccess = class(TDataSet); function GetcxDBEditDataLink(AEdit: TcxCustomEdit): TDataLink; begin if TcxCustomEditAccess(AEdit).DataBinding is TcxDBEditDataBinding then Result := TcxDBEditDataBinding(TcxCustomEditAccess(AEdit).DataBinding).DataLink else Result := nil; end; { TcxCustomDBEditDefaultValuesProvider } constructor TcxCustomDBEditDefaultValuesProvider.Create(AOwner: TPersistent); begin inherited Create(AOwner); FFreeNotifier := TcxFreeNotificator.Create(nil); FFreeNotifier.OnFreeNotification := FieldFreeNotification; end; destructor TcxCustomDBEditDefaultValuesProvider.Destroy; begin FreeAndNil(FFreeNotifier); inherited Destroy; end; function TcxCustomDBEditDefaultValuesProvider.CanSetEditMode: Boolean; begin Result := (DataSource <> nil) and (DataSource.AutoEdit or (DataSource.State in [dsEdit, dsInsert])); end; function TcxCustomDBEditDefaultValuesProvider.DefaultAlignment: TAlignment; begin if IsDataAvailable then Result := Field.Alignment else Result := inherited DefaultAlignment; end; function TcxCustomDBEditDefaultValuesProvider.DefaultBlobKind: TcxBlobKind; begin if IsDataAvailable then case Field.DataType of {$IFDEF DELPHI10}ftWideMemo,{$ENDIF}ftMemo, ftFmtMemo, ftOraClob: Result := bkMemo; ftGraphic: Result := bkGraphic; ftParadoxOle, ftDBaseOle: Result := bkOle; else Result := bkNone; end else Result := bkNone; end; function TcxCustomDBEditDefaultValuesProvider.DefaultCanModify: Boolean; begin Result := not DefaultReadOnly and IsDataAvailable; Result := Result and (Field.CanModify or (Field.Lookup and CanModifyLookupField(Field))); end; function TcxCustomDBEditDefaultValuesProvider.DefaultDisplayFormat: string; begin if IsDataAvailable and (Field is TNumericField) then Result := TNumericField(Field).DisplayFormat else Result := inherited DefaultDisplayFormat; end; function TcxCustomDBEditDefaultValuesProvider.DefaultEditFormat: string; begin if IsDataAvailable and (Field is TNumericField) then Result := TNumericField(Field).EditFormat else Result := inherited DefaultEditFormat; end; function TcxCustomDBEditDefaultValuesProvider.DefaultEditMask: string; begin if IsDataAvailable then Result := Field.EditMask else Result := inherited DefaultEditMask; end; function TcxCustomDBEditDefaultValuesProvider.DefaultIsFloatValue: Boolean; begin if IsDataAvailable then Result := Field.DataType in [ftFloat, ftCurrency, ftBCD] else Result := inherited DefaultIsFloatValue; end; function TcxCustomDBEditDefaultValuesProvider.DefaultMaxLength: Integer; begin if IsDataAvailable and (Field.DataType in [ftString, ftWideString]) then Result := Field.Size else Result := inherited DefaultMaxLength; end; function TcxCustomDBEditDefaultValuesProvider.DefaultMaxValue: Double; begin Result := inherited DefaultMaxValue; if IsDataAvailable then begin if Field is TIntegerField then Result := TIntegerField(Field).MaxValue else if Field is TFloatField then begin Result := StrToFloat(FloatToStrF(TFloatField(Field).MaxValue, ffGeneral, TFloatField(Field).Precision, TFloatField(Field).Precision)); end else if Field is TBCDField then Result := TBCDField(Field).MaxValue; end; end; function TcxCustomDBEditDefaultValuesProvider.DefaultMinValue: Double; begin Result := inherited DefaultMinValue; if IsDataAvailable then begin if Field is TIntegerField then Result := TIntegerField(Field).MinValue else if Field is TFloatField then begin Result := StrToFloat(FloatToStrF(TFloatField(Field).MinValue, ffGeneral, TFloatField(Field).Precision, TFloatField(Field).Precision)); end else if Field is TBCDField then Result := TBCDField(Field).MinValue; end; end; function TcxCustomDBEditDefaultValuesProvider.DefaultPrecision: Integer; begin if Field is TFloatField then Result := TFloatField(Field).Precision else if Field is TBCDField then Result := TBCDField(Field).Precision else if Field is TAggregateField then Result := TAggregateField(Field).Precision else if Field is TFMTBCDField then Result := TFMTBCDField(Field).Precision else Result := inherited DefaultPrecision; end; function TcxCustomDBEditDefaultValuesProvider.DefaultReadOnly: Boolean; begin if IsDataAvailable then Result := Field.ReadOnly else Result := inherited DefaultReadOnly; end; function TcxCustomDBEditDefaultValuesProvider.DefaultRequired: Boolean; begin if IsDataAvailable then Result := Field.Required else Result := inherited DefaultRequired; end; function TcxCustomDBEditDefaultValuesProvider.IsBlob: Boolean; begin Result := IsDataAvailable and Field.IsBlob; end; function TcxCustomDBEditDefaultValuesProvider.IsCurrency: Boolean; begin Result := inherited IsCurrency; if IsDataAvailable then if Field is TFloatField then Result := TFloatField(Field).Currency else if Field is TBCDField then Result := TBCDField(Field).Currency else if Field is TAggregateField then Result := TAggregateField(Field).Currency else if Field is TFMTBCDField then Result := TFMTBCDField(Field).Currency end; function TcxCustomDBEditDefaultValuesProvider.IsDataAvailable: Boolean; begin Result := (FField <> nil) and (FField.DataSet <> nil) and (FField.DataSet.State <> dsInactive); end; function TcxCustomDBEditDefaultValuesProvider.IsDataStorage: Boolean; begin Result := True; end; function TcxCustomDBEditDefaultValuesProvider.IsDisplayFormatDefined(AIsCurrencyValueAccepted: Boolean): Boolean; begin Result := IsDataAvailable; if Result and not Assigned(Field.OnGetText) then begin Result := False; if Field is TFloatField then Result := Result or TFloatField(Field).Currency and AIsCurrencyValueAccepted; if Field is TBCDField then Result := Result or TBCDField(Field).Currency and AIsCurrencyValueAccepted; if Field is TDateTimeField then Result := Result or (TDateTimeField(Field).DisplayFormat <> ''); if Field is TAggregateField then with TAggregateField(Field) do Result := Result or (DisplayFormat <> '') or Currency and AIsCurrencyValueAccepted; if Field is TFMTBCDField then Result := Result or TFMTBCDField(Field).Currency and AIsCurrencyValueAccepted; if Field is TSQLTimeStampField then Result := Result or (TSQLTimeStampField(Field).DisplayFormat <> ''); if Field is TNumericField then Result := Result or (TNumericField(Field).DisplayFormat <> ''); end; end; function TcxCustomDBEditDefaultValuesProvider.IsOnGetTextAssigned: Boolean; begin Result := IsDisplayFormatDefined(False) and (DefaultDisplayFormat = ''); end; function TcxCustomDBEditDefaultValuesProvider.IsOnSetTextAssigned: Boolean; begin Result := IsDataAvailable and Assigned(Field.OnSetText); end; function TcxCustomDBEditDefaultValuesProvider.IsValidChar(AChar: Char): Boolean; begin if IsDataAvailable then Result := Field.IsValidChar(AChar) else Result := inherited IsValidChar(AChar); end; procedure TcxCustomDBEditDefaultValuesProvider.FieldFreeNotification(Sender: TComponent); begin if Sender = DataSource then DataSource := nil else Field := nil; end; procedure TcxCustomDBEditDefaultValuesProvider.SetDataSource(Value: TDataSource); begin if Value <> FDataSource then begin if FDataSource <> nil then FFreeNotifier.RemoveSender(FDataSource); FDataSource := Value; if FDataSource <> nil then FFreeNotifier.AddSender(FDataSource); end; end; procedure TcxCustomDBEditDefaultValuesProvider.SetField(Value: TField); begin if Value <> FField then begin if FField <> nil then FFreeNotifier.RemoveSender(FField); FField := Value; if FField <> nil then FFreeNotifier.AddSender(FField); end; end; { TcxDBFieldDataLink } procedure TcxDBFieldDataLink.FocusControl(Field: TFieldRef); var AVisualControl: TWinControl; begin if not(DataBinding.VisualControl is TWinControl) then Exit; AVisualControl := TWinControl(DataBinding.VisualControl); if (Field^ <> nil) and (Field^ = Self.Field) and AVisualControl.CanFocus then begin Field^ := nil; AVisualControl.SetFocus; end; end; procedure TcxDBFieldDataLink.VisualControlChanged; begin VisualControl := DataBinding.VisualControl is TWinControl; end; procedure TcxDBFieldDataLink.UpdateRightToLeft; var AIsRightAligned: Boolean; AUseRightToLeftAlignment: Boolean; AVisualControl: TWinControl; begin if DataBinding.VisualControl is TWinControl then begin AVisualControl := TWinControl(DataBinding.VisualControl); if AVisualControl.IsRightToLeft then begin AIsRightAligned := (GetWindowLong(AVisualControl.Handle, GWL_EXSTYLE) and WS_EX_RIGHT) = WS_EX_RIGHT; AUseRightToLeftAlignment := DBUseRightToLeftAlignment(AVisualControl, Field); if AIsRightAligned and not AUseRightToLeftAlignment or not AIsRightAligned and AUseRightToLeftAlignment then AVisualControl.Perform(CM_RECREATEWND, 0, 0); end; end; end; { TcxDBDataBinding } function TcxDBDataBinding.GetDataLinkClass: TcxCustomFieldDataLinkClass; begin Result := TcxDBFieldDataLink; end; { TcxEditFieldDataLink } constructor TcxEditFieldDataLink.Create(ADataBinding: TcxDBEditDataBinding); begin inherited Create; VisualControl := True; FDataBinding := ADataBinding; FFreeNotifier := TcxFreeNotificator.Create(nil); FFreeNotifier.OnFreeNotification := FieldFreeNotification; end; destructor TcxEditFieldDataLink.Destroy; begin InternalSetField(nil); FreeAndNil(FFreeNotifier); inherited Destroy; end; function TcxEditFieldDataLink.Edit: Boolean; begin if CanModify then inherited Edit; Result := FEditing; end; procedure TcxEditFieldDataLink.Modified; begin FModified := True; end; procedure TcxEditFieldDataLink.Reset; begin RecordChanged(nil); end; procedure TcxEditFieldDataLink.ActiveChanged; begin FDataBinding.DefaultValuesProvider.DataSource := DataSource; FDataBinding.DisableRefresh; try UpdateField; FDataBinding.DataSetChange; finally FDataBinding.EnableRefresh; FModified := False; FDataBinding.DataChanged; end; end; procedure TcxEditFieldDataLink.DataEvent(Event: TDataEvent; Info: Longint); begin inherited DataEvent(Event, Info); if Event = deDataSetChange then begin FDataBinding.DisableRefresh; try FDataBinding.DataSetChange; finally FDataBinding.EnableRefresh; FModified := False; end; end; end; procedure TcxEditFieldDataLink.EditingChanged; begin SetEditing(inherited Editing and CanModify); FDataBinding.EditingChanged; end; procedure TcxEditFieldDataLink.FocusControl(Field: TFieldRef); begin if (Field^ <> nil) and (Field^ = FField) and (FControl is TWinControl) then if TWinControl(FControl).CanFocus then begin Field^ := nil; TWinControl(FControl).SetFocus; end; end; procedure TcxEditFieldDataLink.LayoutChanged; begin UpdateField; end; procedure TcxEditFieldDataLink.RecordChanged(Field: TField); begin if (Field = nil) or (Field = FMasterField) then begin FDataBinding.DataChanged; if not FDataBinding.IsRefreshDisabled then FModified := False; end; end; procedure TcxEditFieldDataLink.UpdateData; begin if FModified then begin if Field <> nil then FDataBinding.UpdateData; if not FDataBinding.IsRefreshDisabled then FModified := False; end; end; procedure TcxEditFieldDataLink.ResetModified; begin FModified := False; end; procedure TcxEditFieldDataLink.FieldFreeNotification(Sender: TComponent); begin InternalSetField(nil); end; function TcxEditFieldDataLink.GetCanModify: Boolean; begin Result := not ReadOnly and (Field <> nil) and (Field.CanModify or (Field.Lookup and CanModifyLookupField(Field))); end; procedure TcxEditFieldDataLink.InternalSetField(Value: TField); begin if Value <> FField then begin if FField <> nil then FFreeNotifier.RemoveSender(FField); FField := Value; if FField <> nil then FFreeNotifier.AddSender(FField); UpdateMasterField; end; end; procedure TcxEditFieldDataLink.SetEditing(Value: Boolean); begin if FEditing <> Value then begin FEditing := Value; if not FDataBinding.IsRefreshDisabled then FModified := False; end; end; procedure TcxEditFieldDataLink.SetField(Value: TField); begin if FField <> Value then begin InternalSetField(Value); FDataBinding.DefaultValuesChanged; EditingChanged; RecordChanged(nil); UpdateRightToLeft; end; end; procedure TcxEditFieldDataLink.SetFieldName(const Value: string); begin if FFieldName <> Value then begin FFieldName := Value; UpdateField; end; end; procedure TcxEditFieldDataLink.UpdateField; begin if Active and (FFieldName <> '') then begin InternalSetField(nil); if Assigned(FControl) then SetField(GetFieldProperty(DataSource.DataSet, FControl, FFieldName)) else SetField(DataSource.DataSet.FieldByName(FFieldName)); end else SetField(nil); end; procedure TcxEditFieldDataLink.UpdateMasterField; begin if FField = nil then FMasterField := nil else if not FDataBinding.IsLookupControl or (FField.FieldKind <> fkLookup) or (Pos(';', FField.KeyFields) > 0) then FMasterField := FField else if Assigned(FControl) then FMasterField := GetFieldProperty(DataSource.DataSet, FControl, FField.KeyFields) else FMasterField := DataSource.DataSet.FieldByName(FField.KeyFields); end; procedure TcxEditFieldDataLink.UpdateRightToLeft; var AIsRightAligned: Boolean; AUseRightToLeftAlignment: Boolean; begin if Assigned(FControl) and (FControl is TWinControl) and TWinControl(FControl).IsRightToLeft then begin AIsRightAligned := (GetWindowLong(TWinControl(FControl).Handle, GWL_EXSTYLE) and WS_EX_RIGHT) = WS_EX_RIGHT; AUseRightToLeftAlignment := DBUseRightToLeftAlignment(TControl(FControl), Field); if (AIsRightAligned and (not AUseRightToLeftAlignment)) or ((not AIsRightAligned) and AUseRightToLeftAlignment) then TWinControl(FControl).Perform(CM_RECREATEWND, 0, 0); end; end; { TcxDBEditDataBinding } constructor TcxDBEditDataBinding.Create(AEdit: TcxCustomEdit); begin inherited Create(AEdit); FDataLink := TcxEditFieldDataLink.Create(Self); if AEdit.InnerControl <> nil then FDataLink.Control := AEdit.InnerControl else FDataLink.Control := AEdit; end; destructor TcxDBEditDataBinding.Destroy; begin FreeAndNil(FDataLink); inherited Destroy; end; procedure TcxDBEditDataBinding.Assign(Source: TPersistent); begin if Source is TcxDBTextEditDataBinding then begin DataField := TcxDBTextEditDataBinding(Source).DataField; DataSource := TcxDBTextEditDataBinding(Source).DataSource; DataChanged; end; inherited Assign(Source); end; function TcxDBEditDataBinding.CanCheckEditorValue: Boolean; begin Result := False; end; function TcxDBEditDataBinding.CanModify: Boolean; begin Result := inherited CanModify and DataLink.CanModify; end; function TcxDBEditDataBinding.CanPostEditorValue: Boolean; begin Result := Editing and DataLink.FModified; end; function TcxDBEditDataBinding.ExecuteAction(Action: TBasicAction): Boolean; begin Result := FDataLink.ExecuteAction(Action); end; class function TcxDBEditDataBinding.GetDefaultValuesProviderClass: TcxCustomEditDefaultValuesProviderClass; begin Result := TcxCustomDBEditDefaultValuesProvider; end; procedure TcxDBEditDataBinding.SetModified; begin if Editing then DataLink.Modified; end; function TcxDBEditDataBinding.UpdateAction(Action: TBasicAction): Boolean; begin Result := FDataLink.UpdateAction(Action); end; procedure TcxDBEditDataBinding.UpdateDisplayValue; begin Edit.LockClick(True); try if IsDataAvailable then FDataLink.Reset else inherited UpdateDisplayValue; finally Edit.LockClick(False); end; end; procedure TcxDBEditDataBinding.DefaultValuesChanged; begin DefaultValuesProvider.Field := Field; inherited DefaultValuesChanged; end; procedure TcxDBEditDataBinding.DisableRefresh; begin Inc(FRefreshCount); end; procedure TcxDBEditDataBinding.EnableRefresh; begin if FRefreshCount > 0 then Dec(FRefreshCount); end; function TcxDBEditDataBinding.GetEditing: Boolean; begin Result := IsDataAvailable and FDataLink.Editing; end; function TcxDBEditDataBinding.GetModified: Boolean; begin Result := GetEditing and FDataLink.FModified; end; function TcxDBEditDataBinding.GetStoredValue: TcxEditValue; var AEditValueSource: TcxDataEditValueSource; begin AEditValueSource := Edit.ActiveProperties.GetEditValueSource(Edit.InternalFocused); if not IsDataAvailable or (IsNull and ((AEditValueSource <> evsText) or not Assigned(Field.OnGetText))) then Result := Null else begin Result := Null; case AEditValueSource of evsKey: if Field.KeyFields <> '' then Result := Field.DataSet.FieldValues[Field.KeyFields] else Result := Field.Value; evsText: if Edit.Focused and FDataLink.CanModify then Result := Field.Text else if Field.IsBlob then Result := Field.AsString else Result := Field.DisplayText; evsValue: Result := Field.Value; end; end; end; function TcxDBEditDataBinding.IsNull: Boolean; begin if Field is TAggregateField then Result := VarIsNull(TcxDataSetAccess(DataLink.DataSet).GetAggregateValue(Field)) else Result := Field.IsNull; end; function TcxDBEditDataBinding.IsInnerControlHaveToBeReadOnly: Boolean; begin Result := not Editing; end; function TcxDBEditDataBinding.IsRefreshDisabled: Boolean; begin Result := FRefreshCount > 0; end; procedure TcxDBEditDataBinding.Reset; begin if IsDataAvailable then begin FDataLink.Reset; Edit.SelectAll; end; end; procedure TcxDBEditDataBinding.SetDisplayValue(const Value: TcxEditValue); begin if IsDataAvailable then SetInternalDisplayValue(Value) else SetInternalDisplayValue(''); end; function TcxDBEditDataBinding.SetEditMode: Boolean; begin Result := IDefaultValuesProvider.DefaultCanModify; if not Result then Exit; DisableRefresh; try FDatalink.Edit; Result := FDatalink.Editing; if Result then FDatalink.Modified; finally EnableRefresh; end; end; procedure TcxDBEditDataBinding.SetStoredValue(const Value: TcxEditValue); procedure SetFieldValue(AField: TField; const AValue: TcxEditValue); begin if VarIsStr(AValue) and (AValue = '') and not (Field.DataType in [ftString, ftWideString]) then AField.Value := Null else if (Field is TFMTBCDField) and VarIsType(AValue, varDouble) then AField.Value := FloatToStrF(AValue, ffFixed, 15, 18) // bug in VarToBcd when the type AValue is double: VarToStr(0.000012) returns 1.2E-05 which is incorrect for StrToBcd else AField.Value := AValue; end; var AEditValueSource: TcxDataEditValueSource; AFieldList: TList; I: Integer; begin if IsDataAvailable then begin DisableRefresh; try if FDataLink.Edit then begin AEditValueSource := Edit.ActiveProperties.GetEditValueSource(True(*Edit.InternalFocused*)); if (*(*)AEditValueSource = evsText(*) or Assigned(Field.OnSetText)*) then Field.Text := VarToStr(Value) else if (AEditValueSource = evsKey) and (Field.KeyFields <> '') then if Pos(';', Field.KeyFields) = 0 then SetFieldValue(Field.DataSet.FieldByName(Field.KeyFields), Value) else begin AFieldList := TList.Create; try Field.DataSet.GetFieldList(AFieldList, Field.KeyFields); for I := 0 to AFieldList.Count - 1 do SetFieldValue(TField(AFieldList[I]), Value[I]); finally AFieldList.Free; end; Field.DataSet.FieldValues[Field.KeyFields] := Value; end else SetFieldValue(Field, Value); FDataLink.ResetModified; end; finally EnableRefresh; end; end; end; procedure TcxDBEditDataBinding.UpdateNotConnectedDBEditDisplayValue; begin if not IsDataAvailable then Edit.EditValue := Null; end; procedure TcxDBEditDataBinding.DataChanged; begin if IsRefreshDisabled then Exit; if Edit.IsDesigning and not IsDataAvailable then UpdateNotConnectedDBEditDisplayValue else begin if not TcxCustomEditAccess(Edit).Focused and Edit.ActiveProperties.IsValueEditorWithValueFormatting then begin if not IsDataAvailable or IsNull then TcxCustomEditAccess(Edit).FEditValue := Null else TcxCustomEditAccess(Edit).FEditValue := Field.Value; Edit.LockClick(True); try SetInternalDisplayValue(StoredValue); finally Edit.LockClick(False); end; end else Edit.EditValue := StoredValue; end; end; procedure TcxDBEditDataBinding.DataSetChange; begin DefaultValuesChanged; end; procedure TcxDBEditDataBinding.EditingChanged; begin TcxCustomEditAccess(Edit).EditingChanged; end; function TcxDBEditDataBinding.IsLookupControl: Boolean; begin Result := False; end; procedure TcxDBEditDataBinding.UpdateData; begin if IsDataAvailable then begin if Edit.ValidateEdit(True) then StoredValue := Edit.EditValue; end; end; function TcxDBEditDataBinding.GetDataField: string; begin Result := FDataLink.FieldName; end; function TcxDBEditDataBinding.GetDataSource: TDataSource; begin Result := FDataLink.DataSource; end; function TcxDBEditDataBinding.GetDefaultValuesProvider: TcxCustomDBEditDefaultValuesProvider; begin Result := TcxCustomDBEditDefaultValuesProvider(IDefaultValuesProvider.GetInstance); end; function TcxDBEditDataBinding.GetField: TField; begin Result := FDataLink.Field; end; procedure TcxDBEditDataBinding.SetDataField(const Value: string); begin FDataLink.FieldName := Value; end; procedure TcxDBEditDataBinding.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and Edit.IsLoading) then begin FDataLink.DataSource := Value; DefaultValuesProvider.DataSource := Value; end; end; { TcxDBTextEditDataBinding } procedure TcxDBTextEditDataBinding.UpdateNotConnectedDBEditDisplayValue; begin if not IsDataAvailable then begin Edit.LockClick(True); try DisplayValue := ''; finally Edit.LockClick(False); end; end; end; procedure TcxDBTextEditDataBinding.SetDisplayValue(const Value: TcxEditValue); begin if IsDataAvailable then SetInternalDisplayValue(Value) else if Edit.IsDesigning then SetInternalDisplayValue(Edit.Name) else SetInternalDisplayValue(''); end; { TcxDBTextEdit } class function TcxDBTextEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxTextEditProperties; end; class function TcxDBTextEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBTextEdit.SupportsSpelling: Boolean; begin Result := IsTextInputMode; end; function TcxDBTextEdit.GetActiveProperties: TcxTextEditProperties; begin Result := TcxTextEditProperties(InternalGetActiveProperties); end; function TcxDBTextEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := FDataBinding as TcxDBTextEditDataBinding; end; function TcxDBTextEdit.GetProperties: TcxTextEditProperties; begin Result := TcxTextEditProperties(FProperties); end; procedure TcxDBTextEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBTextEdit.SetProperties(Value: TcxTextEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBTextEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBMemo } class function TcxDBMemo.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxMemoProperties; end; class function TcxDBMemo.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBMemo.GetActiveProperties: TcxMemoProperties; begin Result := TcxMemoProperties(InternalGetActiveProperties); end; function TcxDBMemo.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBMemo.GetProperties: TcxMemoProperties; begin Result := TcxMemoProperties(FProperties); end; procedure TcxDBMemo.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBMemo.SetProperties(Value: TcxMemoProperties); begin FProperties.Assign(Value); end; procedure TcxDBMemo.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBMaskEdit } class function TcxDBMaskEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxMaskEditProperties; end; class function TcxDBMaskEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBMaskEdit.SupportsSpelling: Boolean; begin Result := IsTextInputMode; end; function TcxDBMaskEdit.GetActiveProperties: TcxMaskEditProperties; begin Result := TcxMaskEditProperties(InternalGetActiveProperties); end; function TcxDBMaskEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := FDataBinding as TcxDBTextEditDataBinding; end; function TcxDBMaskEdit.GetProperties: TcxMaskEditProperties; begin Result := TcxMaskEditProperties(FProperties); end; procedure TcxDBMaskEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBMaskEdit.SetProperties(Value: TcxMaskEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBMaskEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBButtonEdit } class function TcxDBButtonEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxButtonEditProperties; end; class function TcxDBButtonEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBButtonEdit.GetActiveProperties: TcxButtonEditProperties; begin Result := TcxButtonEditProperties(InternalGetActiveProperties); end; function TcxDBButtonEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := FDataBinding as TcxDBTextEditDataBinding; end; function TcxDBButtonEdit.GetProperties: TcxButtonEditProperties; begin Result := TcxButtonEditProperties(FProperties); end; procedure TcxDBButtonEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBButtonEdit.SetProperties(Value: TcxButtonEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBButtonEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBCheckBox } class function TcxDBCheckBox.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxCheckBoxProperties; end; class function TcxDBCheckBox.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBEditDataBinding; end; function TcxDBCheckBox.GetActiveProperties: TcxCheckBoxProperties; begin Result := TcxCheckBoxProperties(InternalGetActiveProperties); end; function TcxDBCheckBox.GetDataBinding: TcxDBEditDataBinding; begin Result := TcxDBEditDataBinding(FDataBinding); end; function TcxDBCheckBox.GetProperties: TcxCheckBoxProperties; begin Result := TcxCheckBoxProperties(FProperties); end; procedure TcxDBCheckBox.SetDataBinding(Value: TcxDBEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBCheckBox.SetProperties(Value: TcxCheckBoxProperties); begin FProperties.Assign(Value); end; procedure TcxDBCheckBox.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBComboBox } class function TcxDBComboBox.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxComboBoxProperties; end; class function TcxDBComboBox.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBComboBox.SupportsSpelling: Boolean; begin Result := IsTextInputMode; end; function TcxDBComboBox.GetActiveProperties: TcxComboBoxProperties; begin Result := TcxComboBoxProperties(InternalGetActiveProperties); end; function TcxDBComboBox.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBComboBox.GetProperties: TcxComboBoxProperties; begin Result := TcxComboBoxProperties(FProperties); end; procedure TcxDBComboBox.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBComboBox.SetProperties(Value: TcxComboBoxProperties); begin FProperties.Assign(Value); end; procedure TcxDBComboBox.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBPopupEdit } class function TcxDBPopupEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxPopupEditProperties; end; class function TcxDBPopupEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBPopupEdit.SupportsSpelling: Boolean; begin Result := IsTextInputMode; end; function TcxDBPopupEdit.GetActiveProperties: TcxPopupEditProperties; begin Result := TcxPopupEditProperties(InternalGetActiveProperties); end; function TcxDBPopupEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBPopupEdit.GetProperties: TcxPopupEditProperties; begin Result := TcxPopupEditProperties(FProperties); end; procedure TcxDBPopupEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBPopupEdit.SetProperties(Value: TcxPopupEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBPopupEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBSpinEdit } class function TcxDBSpinEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxSpinEditProperties; end; class function TcxDBSpinEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBSpinEdit.GetActiveProperties: TcxSpinEditProperties; begin Result := TcxSpinEditProperties(InternalGetActiveProperties); end; function TcxDBSpinEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBSpinEdit.GetProperties: TcxSpinEditProperties; begin Result := TcxSpinEditProperties(FProperties); end; procedure TcxDBSpinEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBSpinEdit.SetProperties(Value: TcxSpinEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBSpinEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBTimeEdit } class function TcxDBTimeEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxTimeEditProperties; end; class function TcxDBTimeEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBTimeEdit.GetActiveProperties: TcxTimeEditProperties; begin Result := TcxTimeEditProperties(InternalGetActiveProperties); end; function TcxDBTimeEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBTimeEdit.GetProperties: TcxTimeEditProperties; begin Result := TcxTimeEditProperties(FProperties); end; procedure TcxDBTimeEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBTimeEdit.SetProperties(Value: TcxTimeEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBTimeEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBBlobEdit } class function TcxDBBlobEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxBlobEditProperties; end; class function TcxDBBlobEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBEditDataBinding; end; function TcxDBBlobEdit.GetActiveProperties: TcxBlobEditProperties; begin Result := TcxBlobEditProperties(InternalGetActiveProperties); end; function TcxDBBlobEdit.GetDataBinding: TcxDBEditDataBinding; begin Result := TcxDBEditDataBinding(FDataBinding); end; function TcxDBBlobEdit.GetProperties: TcxBlobEditProperties; begin Result := TcxBlobEditProperties(FProperties); end; procedure TcxDBBlobEdit.SetDataBinding(Value: TcxDBEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBBlobEdit.SetProperties(Value: TcxBlobEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBBlobEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBCalcEdit } class function TcxDBCalcEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxCalcEditProperties; end; class function TcxDBCalcEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBCalcEdit.GetActiveProperties: TcxCalcEditProperties; begin Result := TcxCalcEditProperties(InternalGetActiveProperties); end; function TcxDBCalcEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBCalcEdit.GetProperties: TcxCalcEditProperties; begin Result := TcxCalcEditProperties(FProperties); end; procedure TcxDBCalcEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBCalcEdit.SetProperties(Value: TcxCalcEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBCalcEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBDateEdit } class function TcxDBDateEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxDateEditProperties; end; class function TcxDBDateEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBDateEdit.GetActiveProperties: TcxDateEditProperties; begin Result := TcxDateEditProperties(InternalGetActiveProperties); end; function TcxDBDateEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBDateEdit.GetProperties: TcxDateEditProperties; begin Result := TcxDateEditProperties(FProperties); end; procedure TcxDBDateEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBDateEdit.SetProperties(Value: TcxDateEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBDateEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBCurrencyEdit } class function TcxDBCurrencyEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxCurrencyEditProperties; end; class function TcxDBCurrencyEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBCurrencyEdit.GetActiveProperties: TcxCurrencyEditProperties; begin Result := TcxCurrencyEditProperties(InternalGetActiveProperties); end; function TcxDBCurrencyEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBCurrencyEdit.GetProperties: TcxCurrencyEditProperties; begin Result := TcxCurrencyEditProperties(FProperties); end; procedure TcxDBCurrencyEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBCurrencyEdit.SetProperties(Value: TcxCurrencyEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBCurrencyEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBHyperLinkEdit } class function TcxDBHyperLinkEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxHyperLinkEditProperties; end; class function TcxDBHyperLinkEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBHyperLinkEdit.GetActiveProperties: TcxHyperLinkEditProperties; begin Result := TcxHyperLinkEditProperties(InternalGetActiveProperties); end; function TcxDBHyperLinkEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBHyperLinkEdit.GetProperties: TcxHyperLinkEditProperties; begin Result := TcxHyperLinkEditProperties(FProperties); end; procedure TcxDBHyperLinkEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBHyperLinkEdit.SetProperties(Value: TcxHyperLinkEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBHyperLinkEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBImage } class function TcxDBImage.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxImageProperties; end; class function TcxDBImage.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBEditDataBinding; end; function TcxDBImage.GetActiveProperties: TcxImageProperties; begin Result := TcxImageProperties(InternalGetActiveProperties); end; function TcxDBImage.GetDataBinding: TcxDBEditDataBinding; begin Result := TcxDBEditDataBinding(FDataBinding); end; function TcxDBImage.GetProperties: TcxImageProperties; begin Result := TcxImageProperties(FProperties); end; procedure TcxDBImage.SetDataBinding(Value: TcxDBEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBImage.SetProperties(Value: TcxImageProperties); begin FProperties.Assign(Value); end; procedure TcxDBImage.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBImageComboBox } class function TcxDBImageComboBox.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxImageComboBoxProperties; end; class function TcxDBImageComboBox.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBImageComboBox.GetActiveProperties: TcxImageComboBoxProperties; begin Result := TcxImageComboBoxProperties(InternalGetActiveProperties); end; function TcxDBImageComboBox.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBImageComboBox.GetProperties: TcxImageComboBoxProperties; begin Result := TcxImageComboBoxProperties(FProperties); end; procedure TcxDBImageComboBox.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBImageComboBox.SetProperties(Value: TcxImageComboBoxProperties); begin FProperties.Assign(Value); end; procedure TcxDBImageComboBox.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBMRUEdit } class function TcxDBMRUEdit.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxMRUEditProperties; end; class function TcxDBMRUEdit.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBTextEditDataBinding; end; function TcxDBMRUEdit.GetActiveProperties: TcxMRUEditProperties; begin Result := TcxMRUEditProperties(InternalGetActiveProperties); end; function TcxDBMRUEdit.GetDataBinding: TcxDBTextEditDataBinding; begin Result := TcxDBTextEditDataBinding(FDataBinding); end; function TcxDBMRUEdit.GetProperties: TcxMRUEditProperties; begin Result := TcxMRUEditProperties(FProperties); end; procedure TcxDBMRUEdit.SetDataBinding(Value: TcxDBTextEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBMRUEdit.SetProperties(Value: TcxMRUEditProperties); begin FProperties.Assign(Value); end; procedure TcxDBMRUEdit.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBRadioGroupButton } constructor TcxDBRadioGroupButton.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csReplicatable]; end; procedure TcxDBRadioGroupButton.CMGetDataLink(var Message: TMessage); begin RadioGroup.Perform(Message.Msg, Message.WParam, Message.LParam); end; { TcxDBRadioGroup } class function TcxDBRadioGroup.GetPropertiesClass: TcxCustomEditPropertiesClass; begin Result := TcxRadioGroupProperties; end; function TcxDBRadioGroup.GetButtonInstance: TWinControl; begin Result := TcxDBRadioGroupButton.Create(Self); end; class function TcxDBRadioGroup.GetDataBindingClass: TcxEditDataBindingClass; begin Result := TcxDBEditDataBinding; end; function TcxDBRadioGroup.GetActiveProperties: TcxRadioGroupProperties; begin Result := TcxRadioGroupProperties(InternalGetActiveProperties); end; function TcxDBRadioGroup.GetDataBinding: TcxDBEditDataBinding; begin Result := TcxDBEditDataBinding(FDataBinding); end; function TcxDBRadioGroup.GetProperties: TcxRadioGroupProperties; begin Result := TcxRadioGroupProperties(FProperties); end; procedure TcxDBRadioGroup.SetDataBinding(Value: TcxDBEditDataBinding); begin FDataBinding.Assign(Value); end; procedure TcxDBRadioGroup.SetProperties(Value: TcxRadioGroupProperties); begin FProperties.Assign(Value); end; procedure TcxDBRadioGroup.CMGetDataLink(var Message: TMessage); begin Message.Result := Integer(GetcxDBEditDataLink(Self)); end; { TcxDBListBox } function TcxDBListBox.GetDataBindingClass: TcxCustomDataBindingClass; begin Result := TcxDBDataBinding; end; function TcxDBListBox.GetDataBinding: TcxDBDataBinding; begin Result := TcxDBDataBinding(FDataBinding); end; procedure TcxDBListBox.SetDataBinding(Value: TcxDBDataBinding); begin FDataBinding.Assign(Value); end; end.