📄 jvdbactions.pas
字号:
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvDBActions.Pas, released on 2004-12-30.
The Initial Developer of the Original Code is Jens Fudickar [jens dott fudicker att oratool dott de]
Portions created by Jens Fudickar are Copyright (C) 2002 Jens Fudickar.
All Rights Reserved.
Contributor(s): -
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvDBActions.pas,v 1.22 2005/02/17 10:20:19 marquardt Exp $
unit JvDBActions;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
{$IFDEF MSWINDOWS}
Windows, ActnList, ImgList, Graphics,
{$ENDIF MSWINDOWS}
{$IFDEF UNIX}
QActnList, QWindows, QImgList, QGraphics,
{$ENDIF UNIX}
Forms, Controls, Classes, DB,
{$IFDEF USE_3RDPARTY_DEVEXPRESS_CXGRID}
cxGridCustomTableView,
{$ENDIF USE_3RDPARTY_DEVEXPRESS_CXGRID}
{$IFDEF USE_3RDPARTY_SMEXPORT}
SMEWIZ, ExportDS, SMEEngine,
{$ENDIF USE_3RDPARTY_SMEXPORT}
{$IFDEF USE_3RDPARTY_SMIMPORT}
SMIWiz, SMIBase,
{$ENDIF USE_3RDPARTY_SMIMPORT}
JvPanel, JvDynControlEngineDB, JvDynControlEngineDBTools;
type
TComponentClass = class of TComponent;
TJvShowSingleRecordWindowOptions = class(TPersistent)
private
FDialogCaption: string;
FPostButtonCaption: string;
FCancelButtonCaption: string;
FCloseButtonCaption: string;
FBorderStyle: TFormBorderStyle;
FPosition: TPosition;
FTop: Integer;
FLeft: Integer;
FWidth: Integer;
FHeight: Integer;
FArrangeConstraints: TSizeConstraints;
FArrangeSettings: TJvArrangeSettings;
FFieldCreateOptions: TJvCreateDBFieldsOnControlOptions;
protected
procedure SetArrangeSettings(Value: TJvArrangeSettings);
procedure SetArrangeConstraints(Value: TSizeConstraints);
procedure SetFieldCreateOptions(Value: TJvCreateDBFieldsOnControlOptions);
public
constructor Create;
destructor Destroy; override;
procedure SetOptionsToDialog(ADialog: TJvDynControlDataSourceEditDialog);
published
property DialogCaption: string read FDialogCaption write FDialogCaption;
property PostButtonCaption: string read FPostButtonCaption write FPostButtonCaption;
property CancelButtonCaption: string read FCancelButtonCaption write FCancelButtonCaption;
property CloseButtonCaption: string read FCloseButtonCaption write FCloseButtonCaption;
property BorderStyle: TFormBorderStyle read FBorderStyle write FBorderStyle default bsDialog;
property Position: TPosition read FPosition write FPosition default poScreenCenter;
property Top: Integer read FTop write FTop default 0;
property Left: Integer read FLeft write FLeft default 0;
property Width: Integer read FWidth write FWidth default 640;
property Height: Integer read FHeight write FHeight default 480;
property ArrangeConstraints: TSizeConstraints read FArrangeConstraints write SetArrangeConstraints;
property ArrangeSettings: TJvArrangeSettings read FArrangeSettings write SetArrangeSettings;
property FieldCreateOptions: TJvCreateDBFieldsOnControlOptions read FFieldCreateOptions
write SetFieldCreateOptions;
end;
TJvDatabaseActionList = class(TActionList)
private
FDataComponent: TComponent;
protected
procedure SetDataComponent(Value: TComponent);
public
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
published
property DataComponent: TComponent read FDataComponent write SetDataComponent;
end;
TJvDatabaseActionBaseEngine = class(TObject)
protected
function GetDataSource(ADataComponent: TComponent): TDataSource; virtual;
function GetDataSet(ADataComponent: TComponent): TDataSet; virtual;
public
function Supports(ADataComponent: TComponent): Boolean; virtual;
function IsActive(ADataComponent: TComponent): Boolean; virtual;
function HasData(ADataComponent: TComponent): Boolean; virtual;
function FieldCount(ADataComponent: TComponent): Integer; virtual;
function RecordCount(ADataComponent: TComponent): Integer; virtual;
function RecNo(ADataComponent: TComponent): Integer; virtual;
function CanInsert(ADataComponent: TComponent): Boolean; virtual;
function CanUpdate(ADataComponent: TComponent): Boolean; virtual;
function CanDelete(ADataComponent: TComponent): Boolean; virtual;
function Eof(ADataComponent: TComponent): Boolean; virtual;
function Bof(ADataComponent: TComponent): Boolean; virtual;
procedure DisableControls(ADataComponent: TComponent); virtual;
procedure EnableControls(ADataComponent: TComponent); virtual;
function ControlsDisabled(ADataComponent: TComponent): Boolean; virtual;
function EditModeActive(ADataComponent: TComponent): Boolean; virtual;
procedure First(ADataComponent: TComponent); virtual;
procedure Last(ADataComponent: TComponent); virtual;
procedure MoveBy(ADataComponent: TComponent; Distance: Integer); virtual;
procedure ShowSingleRecordWindow(AOptions: TJvShowSingleRecordWindowOptions;
ADataComponent: TComponent); virtual;
end;
TJvDatabaseActionBaseEngineClass = class of TJvDatabaseActionBaseEngine;
TJvDatabaseActionDBGridEngine = class(TJvDatabaseActionBaseEngine)
private
FCurrentDataComponent: TComponent;
protected
function GetDataSource(ADataComponent: TComponent): TDataSource; override;
procedure OnCreateDataControls(ADynControlEngineDB: TJvDynControlEngineDB;
AParentControl: TWinControl; AFieldCreateOptions: TJvCreateDBFieldsOnControlOptions);
public
function Supports(ADataComponent: TComponent): Boolean; override;
procedure ShowSingleRecordWindow(AOptions: TJvShowSingleRecordWindowOptions;
ADataComponent: TComponent); override;
end;
{$IFDEF USE_3RDPARTY_DEVEXPRESS_CXGRID}
TJvDatabaseActionDevExpCxGridEngine = class(TJvDatabaseActionBaseEngine)
protected
function GetGridView(ADataComponent: TComponent): TcxCustomGridTableView;
function GetDataSource(ADataComponent: TComponent): TDataSource; override;
public
function Bof(ADataComponent: TComponent): Boolean; override;
function RecNo(ADataComponent: TComponent): Integer; override;
function RecordCount(ADataComponent: TComponent): Integer; override;
function CanInsert(ADataComponent: TComponent): Boolean; override;
function CanUpdate(ADataComponent: TComponent): Boolean; override;
function CanDelete(ADataComponent: TComponent): Boolean; override;
procedure First(ADataComponent: TComponent); override;
procedure Last(ADataComponent: TComponent); override;
procedure MoveBy(ADataComponent: TComponent; Distance: Integer); override;
function Supports(ADataComponent: TComponent): Boolean; override;
end;
{$ENDIF USE_3RDPARTY_DEVEXPRESS_CXGRID}
TJvDatabaseExecuteEvent = procedure(Sender: TObject; DataEngine: TJvDatabaseActionBaseEngine;
DataComponent: TComponent) of object;
TJvDatabaseExecuteDataSourceEvent = procedure(Sender: TObject; DataSource: TDataSource) of object;
TJvDatabaseBaseAction = class(TAction)
private
FOnExecute: TJvDatabaseExecuteEvent;
FOnExecuteDataSource: TJvDatabaseExecuteDataSourceEvent;
FDataEngine: TJvDatabaseActionBaseEngine;
FDataComponent: TComponent;
protected
procedure SetDataComponent(Value: TComponent);
procedure SetEnabled(Value: Boolean);
function GetDataSet: TDataSet;
function GetDataSource: TDataSource;
function EngineIsActive: Boolean;
function EngineHasData: Boolean;
function EngineFieldCount: Integer;
function EngineRecordCount: Integer;
function EngineRecNo: Integer;
function EngineCanInsert: Boolean;
function EngineCanUpdate: Boolean;
function EngineCanDelete: Boolean;
function EngineEof: Boolean;
function EngineBof: Boolean;
function EngineControlsDisabled: Boolean;
function EngineEditModeActive: Boolean;
property DataEngine: TJvDatabaseActionBaseEngine read FDataEngine;
public
constructor Create(AOwner: TComponent); override;
procedure UpdateTarget(Target: TObject); override;
function HandlesTarget(Target: TObject): Boolean; override;
procedure ExecuteTarget(Target: TObject); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
property DataSource: TDataSource read GetDataSource;
property DataSet: TDataSet read GetDataSet;
published
property OnExecute: TJvDatabaseExecuteEvent read FOnExecute write FOnExecute;
property OnExecuteDataSource: TJvDatabaseExecuteDataSourceEvent
read FOnExecuteDataSource write FOnExecuteDataSource;
property DataComponent: TComponent read FDataComponent write SetDataComponent;
end;
TJvDatabaseSimpleAction = class(TJvDatabaseBaseAction)
private
FIsActive: Boolean;
FHasData: Boolean;
FCanInsert: Boolean;
FCanUpdate: Boolean;
FCanDelete: Boolean;
FEditModeActive: Boolean;
protected
public
constructor Create(AOwner: TComponent); override;
procedure UpdateTarget(Target: TObject); override;
published
property IsActive: Boolean read FIsActive write FIsActive default True;
property HasData: Boolean read FHasData write FHasData default True;
property CanInsert: Boolean read FCanInsert write FCanInsert default False;
property CanUpdate: Boolean read FCanUpdate write FCanUpdate default False;
property CanDelete: Boolean read FCanDelete write FCanDelete default False;
property EditModeActive: Boolean read FEditModeActive write FEditModeActive default False;
end;
TJvDatabaseBaseActiveAction = class(TJvDatabaseBaseAction)
public
procedure UpdateTarget(Target: TObject); override;
end;
TJvDatabaseBaseEditAction = class(TJvDatabaseBaseActiveAction)
public
procedure UpdateTarget(Target: TObject); override;
end;
TJvDatabaseBaseNavigateAction = class(TJvDatabaseBaseActiveAction)
end;
TJvDatabaseFirstAction = class(TJvDatabaseBaseNavigateAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseLastAction = class(TJvDatabaseBaseNavigateAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabasePriorAction = class(TJvDatabaseBaseNavigateAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseNextAction = class(TJvDatabaseBaseNavigateAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabasePriorBlockAction = class(TJvDatabaseBaseNavigateAction)
public
FBlockSize: Integer;
public
constructor Create(AOwner: TComponent); override;
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
published
property BlockSize: Integer read FBlockSize write FBlockSize default 50;
end;
TJvDatabaseNextBlockAction = class(TJvDatabaseBaseNavigateAction)
private
FBlockSize: Integer;
public
constructor Create(AOwner: TComponent); override;
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
published
property BlockSize: Integer read FBlockSize write FBlockSize default 50;
end;
TJvDatabaseRefreshAction = class(TJvDatabaseBaseActiveAction)
private
FRefreshLastPosition: Boolean;
FRefreshAsOpenClose: Boolean;
protected
procedure Refresh;
public
constructor Create(AOwner: TComponent); override;
procedure ExecuteTarget(Target: TObject); override;
published
property RefreshLastPosition: Boolean read FRefreshLastPosition write FRefreshLastPosition default True;
property RefreshAsOpenClose: Boolean read FRefreshAsOpenClose write FRefreshAsOpenClose default False;
end;
TJvDatabasePositionAction = class(TJvDatabaseBaseNavigateAction)
public
procedure ShowPositionDialog;
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseInsertAction = class(TJvDatabaseBaseEditAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseOnCopyRecord = procedure(Field: TField; OldValue: Variant) of object;
TJvDatabaseBeforeCopyRecord = procedure(DataSet: TDataSet; var RefreshAllowed: Boolean) of object;
TJvDatabaseAfterCopyRecord = procedure(DataSet: TDataSet) of object;
TJvDatabaseCopyAction = class(TJvDatabaseBaseEditAction)
private
FBeforeCopyRecord: TJvDatabaseBeforeCopyRecord;
FAfterCopyRecord: TJvDatabaseAfterCopyRecord;
FOnCopyRecord: TJvDatabaseOnCopyRecord;
public
procedure CopyRecord;
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
published
property BeforeCopyRecord: TJvDatabaseBeforeCopyRecord read FBeforeCopyRecord write FBeforeCopyRecord;
property AfterCopyRecord: TJvDatabaseAfterCopyRecord read FAfterCopyRecord write FAfterCopyRecord;
property OnCopyRecord: TJvDatabaseOnCopyRecord read FOnCopyRecord write FOnCopyRecord;
end;
TJvDatabaseEditAction = class(TJvDatabaseBaseEditAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseDeleteAction = class(TJvDatabaseBaseEditAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabasePostAction = class(TJvDatabaseBaseEditAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseCancelAction = class(TJvDatabaseBaseEditAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseSingleRecordWindowAction = class(TJvDatabaseBaseActiveAction)
private
FOptions: TJvShowSingleRecordWindowOptions;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ExecuteTarget(Target: TObject); override;
published
property Options: TJvShowSingleRecordWindowOptions read FOptions write FOptions;
end;
TJvDatabaseOpenAction = class(TJvDatabaseBaseActiveAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
TJvDatabaseCloseAction = class(TJvDatabaseBaseActiveAction)
public
procedure UpdateTarget(Target: TObject); override;
procedure ExecuteTarget(Target: TObject); override;
end;
{$IFDEF USE_3RDPARTY_SMEXPORT}
TJvDatabaseSMExportOptions = class(TPersistent)
private
FHelpContext: THelpContext;
FFormats: TExportFormatTypes;
FTitle: TCaption;
FDefaultOptionsDirectory: string;
FKeyGenerator: string;
FOptions: TSMOptions;
public
constructor Create;
destructor Destroy; override;
procedure SMEWizardDlgGetCellParams(Sender: TObject; Field: TField; var Text: string;
AFont: TFont; var Alignment: TAlignment; var Background: TColor; var CellType: TCellType);
procedure SMEWizardDlgOnBeforeExecute(Sender: TObject);
published
property HelpContext: THelpContext read FHelpContext write FHelpContext;
property Formats: TExportFormatTypes read FFormats write FFormats;
property Title: TCaption read FTitle write FTitle;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -