📄 dbctrlseh.pas
字号:
{*******************************************************}
{ }
{ EhLib v4.0 }
{ TDBEditEh, TDBDateTimeEditEh, TDBComboBoxEh, }
{ TDBNumberEditEh, TDBCheckBoxEh components }
{ (Build 4.0.08) }
{ }
{ Copyright (c) 2001-2005 by Dmitry V. Bolshakov }
{ }
{*******************************************************}
{$I EhLib.Inc}
{$IFDEF EH_LIB_VCL}
unit DBCtrlsEh {$IFDEF CIL} platform {$ENDIF};
{$ELSE}
unit QDBCtrlsEh;
{$ENDIF}
interface
{$IFDEF EH_LIB_VCL}
uses Windows, SysUtils, Messages, Classes, Controls, Forms, Graphics, Menus,
{$IFDEF EH_LIB_5} Contnrs, {$ENDIF}
{$IFDEF EH_LIB_6} Variants, StrUtils, {$ENDIF}
{$IFDEF CIL}
EhLibVCLNET,
{$ELSE}
EhLibVCL,
{$ENDIF}
StdCtrls, ExtCtrls, Mask, Buttons, ComCtrls, Db, DBCtrls, Imglist,
ToolCtrlsEh, ActnList, Consts, Math;
{$ELSE}
uses SysUtils, Classes, QControls, QForms, QGraphics, QMenus,
QStdCtrls, QExtCtrls, QMask, QButtons, QComCtrls, QActnList, QToolCtrlsEh,
Db, DBCtrls, Imglist, Consts, Variants;
{$ENDIF}
const
CM_EDITIMAGECHANGEDEH = WM_USER + 101;
// CM_IGNOREEDITDOWN = WM_USER + 102;
type
{ IInplaceEditHolderEh }
IInplaceEditHolderEh = interface
['{4BE708F1-4EA2-4AC7-BA64-89D7D2B83E09}']
function InplaceEditCanModify(Control: TWinControl): Boolean;
procedure GetMouseDownInfo(var Pos: TPoint; var Time: LongInt);
procedure InplaceEditWndProc(Control: TWinControl; var Message: TMessage);
procedure InplaceEditKeyDown(Control: TWinControl; var Key: Word; Shift: TShiftState);
procedure InplaceEditKeyPress(Control: TWinControl; var Key: Char);
procedure InplaceEditKeyUp(Control: TWinControl; var Key: Word; Shift: TShiftState);
end;
IInplaceEditEh = interface
['{81F0C558-B001-4477-BAA6-2DC373FCDF88}']
function GetFont: TFont;
procedure SetInplaceEditHolder(AInplaceEditHolder: TWinControl);
procedure SetBorderStyle(ABorderStyle: TBorderStyle);
procedure SetFont(AFont: TFont);
procedure SetColor(AColor: TColor);
procedure SetOnKeyPress(AKeyPressEvent: TKeyPressEvent);
procedure SetOnExit(AKeyPressEvent: TNotifyEvent);
end;
{ TEditImageEh }
TEditImageEh = class(TPersistent)
private
FEditControl: TWinControl;
FImageIndex: Integer;
FImages: TCustomImageList;
FUseImageHeight: Boolean;
FVisible: Boolean;
FWidth: Integer;
procedure SetImageIndex(const Value: Integer);
procedure SetImages(const Value: TCustomImageList);
procedure SetUseImageHeight(const Value: Boolean);
procedure SetVisible(const Value: Boolean);
procedure SetWidth(const Value: Integer);
public
constructor Create(EditControl: TWinControl);
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property ImageIndex: Integer read FImageIndex write SetImageIndex default -1;
property Images: TCustomImageList read FImages write SetImages;
property UseImageHeight: Boolean read FUseImageHeight write SetUseImageHeight default True;
property Visible: Boolean read FVisible write SetVisible default False;
property Width: Integer read FWidth write SetWidth default 0;
end;
{ TFieldDataLinkEh }
TFieldDataLinkEh = class(TDataLink)
private
FFields: TFieldsArrEh;
FFieldName: string;
FControl: TComponent;
//FEditing: Boolean;
//FModified: Boolean;
FOnDataChange: TNotifyEvent;
FOnEditingChange: TNotifyEvent;
FOnUpdateData: TNotifyEvent;
FOnActiveChange: TNotifyEvent;
FMultiFields: Boolean;
FDataIndepended: Boolean;
FEditing: Boolean;
FModified: Boolean;
function GetActive: Boolean;
function GetCanModify: Boolean;
function GetDataSetActive: Boolean;
function GetDataSource: TDataSource;
function GetField: TField;
function GetFieldsCount: Integer;
function GetFieldsField(Index: Integer): TField;
procedure SetDataSource(const Value: TDataSource);
procedure SetEditing(Value: Boolean);
procedure SetField(Value: TObjectList);
procedure SetFieldName(const Value: string);
procedure SetMultiFields(const Value: Boolean);
procedure UpdateRightToLeft;
protected
function FieldFound(Value: TField): Boolean;
procedure ActiveChanged; override;
{$IFDEF CIL}
procedure DataEvent(Event: TDataEvent; Info: TObject); virtual;
{$ELSE}
procedure DataEvent(Event: TDataEvent; Info: Integer); override;
{$ENDIF}
procedure EditingChanged; override;
{$IFDEF CIL}
procedure FocusControl(const Field: TField); override;
{$ELSE}
procedure FocusControl(Field: TFieldRef); override;
{$ENDIF}
procedure LayoutChanged; override;
procedure RecordChanged(Field: TField); override;
procedure UpdateData; override;
procedure UpdateDataIndepended;
procedure UpdateField; virtual;
public
DataIndependentValue: Variant; { TODO : Rewrite as property Value }
constructor Create;
function Edit: Boolean;
procedure Modified;
procedure SetModified(Value: Boolean);
procedure SetText(Text: String);
procedure SetValue(Value: Variant);
procedure Reset;
property Active: Boolean read GetActive;
property CanModify: Boolean read GetCanModify;
property Control: TComponent read FControl write FControl;
property DataIndepended: Boolean read FDataIndepended;
property DataSetActive: Boolean read GetDataSetActive;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property Editing: Boolean read FEditing;
property Field: TField read GetField;
property FieldName: string read FFieldName write SetFieldName;
property Fields[Index: Integer]: TField read GetFieldsField;
property FieldsCount: Integer read GetFieldsCount;
property MultiFields: Boolean read FMultiFields write SetMultiFields;
property OnActiveChange: TNotifyEvent read FOnActiveChange write FOnActiveChange;
property OnDataChange: TNotifyEvent read FOnDataChange write FOnDataChange;
property OnEditingChange: TNotifyEvent read FOnEditingChange write FOnEditingChange;
property OnUpdateData: TNotifyEvent read FOnUpdateData write FOnUpdateData;
end;
{ TCustomDBEditEh }
TGetImageIndexEventEh = procedure(Sender: TObject; var ImageIndex: Integer) of object;
TOnCheckDrawRequiredStateEventEh = procedure(Sender: TObject; var DrawState: Boolean) of object;
TDBEditEhValue = (evAlignmentEh, evEditMaskEh);
TDBEditEhValues = set of TDBEditEhValue;
TCustomDBEditEh = class(TCustomMaskEdit, IInplaceEditEh, IComboEditEh {$IFNDEF CIL}, IUnknown {$ENDIF})
private
FAlwaysShowBorder: Boolean;
FAssignedValues: TDBEditEhValues;
FCanvas: TControlCanvas;
FCompleteKeyPress: String;
FEditButton: TEditButtonEh;
FEditButtons: TEditButtonsEh;
FEditImage: TEditImageEh;
FFlat: Boolean;
FHighlightRequired: Boolean;
FMRUList: TMRUListEh;
FMRUListControl: TWinControl;
FOnButtonClick: TButtonClickEventEh;
FOnButtonDown: TButtonDownEventEh;
FOnCheckDrawRequiredState: TOnCheckDrawRequiredStateEventEh;
FOnGetImageIndex: TGetImageIndexEventEh;
FOnUpdateData: TUpdateDataEventEh;
FReadOnly: Boolean;
FShowHint: Boolean;
FTooltips: Boolean;
FWantReturns: Boolean;
FWantTabs: Boolean;
FWordWrap: Boolean;
function CheckHintTextRect(var TextWidth, TextHeight: Integer): Boolean;
function GetAlignment: TAlignment;
{$IFNDEF EH_LIB_6}
function GetAutoSize: Boolean;
{$ENDIF}
function GetCanvas: TCanvas;
function GetEditMask: String;
function GetField: TField;
function GetImages: TCustomImageList;
function GetMRUListControl: TWinControl;
function GetPasswordChar: Char;
function GetReadOnly: Boolean;
function GetShowHint: Boolean;
function GetText: String;
function GetTextMargins: TPoint;
function GetValue: Variant;
function GetVisible: Boolean;
function ImageRect: TRect;
function IsAlignmentStored: Boolean;
function IsEditMaskStored: Boolean;
function IsTextStored: Boolean;
function IsValueStored: Boolean;
procedure ActiveChange(Sender: TObject);
procedure CheckCursor;
procedure CMCancelMode(var Message: TCMCancelMode); message CM_CANCELMODE;
procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
procedure CMEditImageChangedEh(var Message: TMessage); message CM_EDITIMAGECHANGEDEH;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
{$IFNDEF CIL}
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
{$ENDIF}
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
procedure CMParentShowHintChanged(var Message: TMessage); message CM_PARENTSHOWHINTCHANGED;
procedure CMRecreateWnd(var Message: TMessage); message CM_RECREATEWND;
procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE;
procedure CMWantSpecialKey(var Message: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
procedure DataChange(Sender: TObject);
procedure DrawBorder(DC: HDC; ActiveBorder: Boolean);
procedure DrawEditImage(DC: HDC);
procedure EditButtonChanged(Sender: TObject);
procedure EditingChange(Sender: TObject);
procedure InternalMove(const Loc: TRect; Redraw: Boolean);
procedure InternalUpdateData(Sender: TObject);
procedure ReadEditMask(Reader: TReader);
procedure SetAlignment(const Value: TAlignment);
procedure SetAlwaysShowBorder(const Value: Boolean);
procedure SetEditButton(const Value: TEditButtonEh);
procedure SetEditButtons(const Value: TEditButtonsEh);
procedure SetEditImage(const Value: TEditImageEh);
procedure SetEditMask(const Value: String);
procedure SetEditRect;
procedure SetFlat(const Value: Boolean);
procedure SetImages(const Value: TCustomImageList);
procedure SetMRUList(const Value: TMRUListEh);
procedure SetOnGetImageIndex(const Value: TGetImageIndexEventEh);
procedure SetPasswordChar(const Value: Char);
procedure SetReadOnly(Value: Boolean);
procedure SetShowHint(const Value: Boolean);
procedure SetText(const Value: String); {$IFDEF CIL} reintroduce; {$ENDIF}
procedure SetTooltips(const Value: Boolean);
procedure SetValue(const Value: Variant);
procedure SetVisible(const Value: Boolean);
procedure SetWordWrap(const Value: Boolean);
procedure UpdateDrawBorder;
procedure WMCancelMode(var Message: TWMCancelMode); message WM_CANCELMODE;
procedure WMChar(var Message: TWMChar); message WM_CHAR;
procedure WMCut(var Message: TWMCut); message WM_CUT;
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure WMPaste(var Message: TWMPaste); message WM_PASTE;
procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMUndo(var Message: TWMUndo); message WM_UNDO;
procedure WriteEditMask(Writer: TWriter);
protected
FAlignment: TAlignment;
FBorderActive: Boolean;
FButtonHeight: Integer;
FButtonWidth: Integer;
FDataLink: TFieldDataLinkEh;
FDataPosting: Boolean;
FDownButton: Integer;
FDroppedDown: Boolean;
FEditButtonControlList: TEditButtonControlList;
FFocused: Boolean;
FImageWidth: Integer;
FInplaceEditHolder: TWinControl;
FInplaceMode: Boolean;
FIntfInplaceEditHolder: IInplaceEditHolderEh;
FMouseAboveControl: Boolean;
FNoClickCloseUp: Boolean;
FPressed: Boolean;
FPressedRect: TRect;
FUserTextChanged: Boolean;
function ButtonEnabled: Boolean; virtual;
function ButtonRect: TRect;
function CreateDataLink: TFieldDataLinkEh; virtual;
function CreateEditButton: TEditButtonEh; virtual;
function CreateEditButtonControl: TEditButtonControlEh; virtual;
function CreateEditButtons: TEditButtonsEh; virtual;
function CreateEditImage: TEditImageEh; virtual;
function CreateMRUListControl: TWinControl; virtual;
function DataIndepended: Boolean; virtual;
function DefaultAlignment: TAlignment; virtual;
function DefaultEditMask: String; virtual;
function DefaultImageIndex: Integer; virtual;
function EditCanModify: Boolean; override;
function EditRect: TRect;
function GetDataField: string; virtual;
function GetDataSource: TDataSource; virtual;
function GetDisplayTextForPaintCopy: String; virtual;
function GetEditButtonByShortCut(ShortCut: TShortCut): TEditButtonEh;
function GetFont: TFont;
function GetVariantValue: Variant; virtual;
function IsValidChar(InputChar: Char): Boolean; virtual;
function PostDataEvent: Boolean;
procedure ActiveChanged; virtual;
procedure AdjustHeight; virtual;
procedure ButtonDown(IsDownButton: Boolean); virtual;
procedure CalcEditRect(var ARect: TRect); virtual;
procedure Change; override;
procedure CheckInplaceEditHolderKeyDown(var Key: Word; Shift: TShiftState);
procedure CheckInplaceEditHolderKeyPress(var Key: Char);
procedure CheckInplaceEditHolderKeyUp(var Key: Word; Shift: TShiftState);
procedure CloseUp(Accept: Boolean); virtual;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DataChanged; virtual;
procedure DefineProperties(Filer: TFiler); override;
procedure DropDown; virtual;
procedure EditButtonClick(Sender: TObject); virtual;
procedure EditButtonDown(Sender: TObject; TopButton: Boolean; var AutoRepeat: Boolean; var Handled: Boolean); virtual;
procedure EditButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); virtual;
procedure EditButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual;
procedure EditingChanged; virtual;
procedure FilterMRUItem(AText: String; var Accept: Boolean); virtual;
procedure InternalSetText(AText: String); virtual;
procedure InternalSetValue(AValue: Variant); virtual;
procedure InternalUpdatePostData; virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
procedure Loaded; override;
procedure MRUListCloseUp(Sender: TObject; Accept: Boolean);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -