📄 jvdyncontrolenginedb.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 Initial Developer of the Original Code is Jens Fudickar [jens dott fudickar att oratool dott de]
All Rights Reserved.
Contributor(s):
Jens Fudickar [jens dott fudickar att oratool dott de]
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: JvDynControlEngineDB.pas,v 1.11 2005/02/17 10:20:27 marquardt Exp $
unit JvDynControlEngineDB;
{$I jvcl.inc}
interface
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
Classes, Controls, DB,
JvDynControlEngine, JvDynControlEngineDBIntf;
const
jctDBEdit = TJvDynControlType('DBEdit');
jctDBText = TJvDynControlType('DBText');
jctDBListBox = TJvDynControlType('DBListBox');
jctDBCheckBox = TJvDynControlType('DBCheckBox');
jctDBComboBox = TJvDynControlType('DBComboBox');
jctDBImage = TJvDynControlType('DBImage');
jctDBRadioGroup = TJvDynControlType('DBRadioGroup');
jctDBMemo = TJvDynControlType('DBMemo');
jctDBDateTimeEdit = TJvDynControlType('DBDateTimeEdit');
jctDBDateEdit = TJvDynControlType('DBDateEdit');
jctDBTimeEdit = TJvDynControlType('DBTimeEdit');
jctDBCalculateEdit = TJvDynControlType('DBCalculateEdit');
jctDBSpinEdit = TJvDynControlType('DBSpinEdit');
jctDBDirectoryEdit = TJvDynControlType('DBDirectoryEdit');
jctDBFileNameEdit = TJvDynControlType('DBFileNameEdit');
jctDBGrid = TJvDynControlType('DBGrid');
jctDBButtonEdit = TJvDynControlType('DBButtonEdit');
jctDBNavigator = TJvDynControlType('DBNavigator');
type
TJvCreateDBFieldsOnControlOptions = class(TPersistent)
private
FShowInvisibleFields: Boolean ;
FLabelOnTop: Boolean ;
FLabelDefaultWidth: Integer ;
FFieldDefaultWidth: Integer ;
FFieldMinWidth: Integer ;
FFieldMaxWidth: Integer ;
FFieldWidthStep: Integer;
protected
procedure SetFieldWidthStep(Value: Integer);
public
constructor Create;
procedure Assign (Source: TPersistent); override;
published
property ShowInvisibleFields: Boolean read FShowInvisibleFields write FShowInvisibleFields default False;
property LabelOnTop: Boolean read FLabelOnTop write FLabelOnTop default True;
property LabelDefaultWidth: Integer read FLabelDefaultWidth write FLabelDefaultWidth default 0;
property FieldDefaultWidth: Integer read FFieldDefaultWidth write FFieldDefaultWidth default 0;
property FieldMinWidth: Integer read FFieldMinWidth write FFieldMinWidth default 20;
property FieldMaxWidth: Integer read FFieldMaxWidth write FFieldMaxWidth default 300;
property FieldWidthStep: Integer read FFieldWidthStep write SetFieldWidthStep default 50;
end;
TJvDynControlEngineDB = class(TJvCustomDynControlEngine)
private
FDynControlEngine: TJvDynControlEngine;
protected
function GetFieldControlType(AField: TField): TJvDynControlType; virtual;
function GetDynControlEngine: TJvDynControlEngine;
procedure SetDynControlEngine(ADynControlEngine: TJvDynControlEngine);
public
function IsControlTypeValid(const ADynControlType: TJvDynControlType;
AControlClass: TControlClass): Boolean; override;
function CreateDBFieldControl(AField: TField; AOwner: TComponent;
AParentControl: TWinControl; AControlName: string; ADataSource: TDataSource): TWinControl; virtual;
function CreateDBControl(AControlType: TJvDynControlType; AOwner: TComponent;
AParentControl: TWinControl; AControlName: string;
ADataSource: TDataSource; const ADataField: string): TControl; virtual;
function CreateDBTextControl(AOwner: TComponent;
AParentControl: TWinControl; const AControlName: string;
ADataSource: TDataSource; const ADataField: string; const ACaption: string): TWinControl;
function CreateDBEditControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBCheckboxControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource;
const ADataField, ACaption: string): TWinControl; virtual;
function CreateDBComboBoxControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string;
AItems: TStrings): TWinControl; virtual;
function CreateDBImageControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBRadioGroupControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField, ACaption: string;
AItems: TStrings): TWinControl; virtual;
function CreateDBMemoControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBListBoxControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string;
AItems: TStrings): TWinControl; virtual;
function CreateDBDateTimeControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBDateControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBTimeControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBCalculateControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBSpinControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl; virtual;
function CreateDBDirectoryControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl;
function CreateDBFileNameControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl;
function CreateDBGridControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource): TWinControl; virtual;
function CreateDBNavigatorControl(AOwner: TComponent; AParentControl: TWinControl;
const AControlName: string; ADataSource: TDataSource): TWinControl; virtual;
function CreateControlsFromDataSourceOnControl(ADataSource: TDataSource;
AControl: TWinControl; AOptions: TJvCreateDBFieldsOnControlOptions): Boolean; virtual;
function CreateControlsFromDataComponentOnControl(ADataComponent: TComponent;
AControl: TWinControl; AOptions: TJvCreateDBFieldsOnControlOptions): Boolean; virtual;
function GetDataSourceFromDataComponent(ADataComponent: TComponent): TDataSource; virtual;
function SupportsDataComponent(ADataComponent: TComponent): Boolean;
property DynControlEngine: TJvDynControlEngine read GetDynControlEngine write SetDynControlEngine;
end;
procedure SetDefaultDynControlEngineDB(AEngine: TJvDynControlEngineDB);
function DefaultDynControlEngineDB: TJvDynControlEngineDB;
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvDynControlEngineDB.pas,v $';
Revision: '$Revision: 1.11 $';
Date: '$Date: 2005/02/17 10:20:27 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
implementation
uses
{$IFDEF HAS_UNIT_VARIANTS}
Variants,
{$ENDIF HAS_UNIT_VARIANTS}
SysUtils, TypInfo,
JvResources, JvTypes, JvDynControlEngineIntf, JvDynControlEngineVCLDB;
var
GlobalDefaultDynControlEngineDB: TJvDynControlEngineDB = nil;
//=== { TJvCreateDBFieldsOnControlOptions } ==================================
constructor TJvCreateDBFieldsOnControlOptions.Create;
begin
inherited Create;
FShowInvisibleFields := False;
FLabelOnTop := True;
FLabelDefaultWidth := 0;
FFieldDefaultWidth := 0;
FFieldMinWidth := 20;
FFieldMaxWidth := 300;
FFieldWidthStep := 50;
end;
procedure TJvCreateDBFieldsOnControlOptions.Assign(Source: TPersistent);
begin
if Assigned(Source) and (Source is TJvCreateDBFieldsOnControlOptions) then
begin
ShowInvisibleFields := TJvCreateDBFieldsOnControlOptions(Source).ShowInvisibleFields;
LabelOnTop := TJvCreateDBFieldsOnControlOptions(Source).LabelOnTop;
LabelDefaultWidth := TJvCreateDBFieldsOnControlOptions(Source).LabelDefaultWidth;
FieldDefaultWidth := TJvCreateDBFieldsOnControlOptions(Source).FieldDefaultWidth;
FieldMinWidth := TJvCreateDBFieldsOnControlOptions(Source).FieldMinWidth;
FieldMaxWidth := TJvCreateDBFieldsOnControlOptions(Source).FieldMaxWidth;
FieldWidthStep := TJvCreateDBFieldsOnControlOptions(Source).FieldWidthStep;
end
else
inherited Assign(Source);
end;
procedure TJvCreateDBFieldsOnControlOptions.SetFieldWidthStep(Value: Integer);
begin
if Value < 1 then
FFieldWidthStep := 1
else
FFieldWidthStep := Value;
end;
//=== { TJvDynControlEngineDB } ==============================================
procedure TJvDynControlEngineDB.SetDynControlEngine(ADynControlEngine: TJvDynControlEngine);
begin
FDynControlEngine := ADynControlEngine;
end;
function TJvDynControlEngineDB.GetDynControlEngine: TJvDynControlEngine;
begin
if Assigned(FDynControlEngine) then
Result := FDynControlEngine
else
Result := DefaultDynControlEngine;
end;
function TJvDynControlEngineDB.IsControlTypeValid(const ADynControlType: TJvDynControlType;
AControlClass: TControlClass): Boolean;
var
Valid: Boolean;
begin
Valid := inherited IsControlTypeValid(ADynControlType, AControlClass);
// if ADynControlType = jctDBText then
// Valid := Valid and Supports(AControlClass, IJvDynControlLabel)
// else
if ADynControlType = jctDBButtonEdit then
Valid := Valid and
Supports(AControlClass, IJvDynControlButton) and
Supports(AControlClass, IJvDynControlData)
else
if ADynControlType = jctDBMemo then
Valid := Valid and
Supports(AControlClass, IJvDynControlItems) and
Supports(AControlClass, IJvDynControlData) and
Supports(AControlClass, IJvDynControlMemo)
else
if (ADynControlType = jctDBRadioGroup) or
(ADynControlType = jctDBComboBox) then
Valid := Valid and
Supports(AControlClass, IJvDynControlItems) and
Supports(AControlClass, IJvDynControlData)
else
if (ADynControlType = jctDBEdit) or
(ADynControlType = jctDBCalculateEdit) or
(ADynControlType = jctDBSpinEdit) or
(ADynControlType = jctDBCheckBox) or
(ADynControlType = jctDBDateTimeEdit) or
(ADynControlType = jctDBDateEdit) or
(ADynControlType = jctDBTimeEdit) or
(ADynControlType = jctDBDirectoryEdit) or
(ADynControlType = jctDBFileNameEdit) then
Valid := Valid and Supports(AControlClass, IJvDynControlData);
if (ADynControlType = jctDBEdit) or
(ADynControlType = jctDBCalculateEdit) or
(ADynControlType = jctDBSpinEdit) or
(ADynControlType = jctDBCheckBox) or
(ADynControlType = jctDBDateTimeEdit) or
(ADynControlType = jctDBDateEdit) or
(ADynControlType = jctDBTimeEdit) or
(ADynControlType = jctDBDirectoryEdit) or
(ADynControlType = jctDBFileNameEdit) or
(ADynControlType = jctDBText) or
(ADynControlType = jctDBListBox) or
(ADynControlType = jctDBImage) or
(ADynControlType = jctDBRadioGroup) or
(ADynControlType = jctDBMemo) or
(ADynControlType = jctDBGrid) then
Valid := Valid and Supports(AControlClass, IJvDynControlDataBase);
Result := Valid;
end;
function TJvDynControlEngineDB.GetFieldControlType(AField: TField): TJvDynControlType;
begin
if not Assigned(AField) then
raise EJVCLException.CreateRes(@RsEUnassignedField);
case AField.DataType of
ftOraClob, ftMemo:
Result := jctDBMemo;
ftGraphic:
Result := jctDBImage;
ftString:
Result := jctDBEdit;
ftDate:
Result := jctDBDateEdit;
ftTime:
Result := jctDBTimeEdit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -