git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
602 lines
26 KiB
ObjectPascal
602 lines
26 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
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.delphi-jedi.org
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvDynControlEngineDB.pas 12461 2009-08-14 17:21:33Z obones $
|
|
|
|
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;
|
|
FUseFieldSizeForWidth: Boolean;
|
|
FUseParentColorForReadOnly: Boolean;
|
|
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;
|
|
property UseFieldSizeForWidth: Boolean read FUseFieldSizeForWidth write FUseFieldSizeForWidth default True;
|
|
property UseParentColorForReadOnly: Boolean read FUseParentColorForReadOnly write FUseParentColorForReadOnly default True;
|
|
end;
|
|
|
|
TJvDynControlEngineDB = class(TJvCustomDynControlEngine)
|
|
private
|
|
FDynControlEngine: TJvDynControlEngine;
|
|
protected
|
|
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 GetFieldControlType(AField: TField): TJvDynControlType; 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: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_39/run/JvDynControlEngineDB.pas $';
|
|
Revision: '$Revision: 12461 $';
|
|
Date: '$Date: 2009-08-14 19:21:33 +0200 (ven., 14 août 2009) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses
|
|
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;
|
|
FUseFieldSizeForWidth := True;
|
|
FUseParentColorForReadOnly := True;
|
|
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;
|
|
UseFieldSizeForWidth := TJvCreateDBFieldsOnControlOptions(Source).UseFieldSizeForWidth;
|
|
UseParentColorForReadOnly := TJvCreateDBFieldsOnControlOptions(Source).UseParentColorForReadOnly;
|
|
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, ftFmtMemo{$IFDEF COMPILER10_UP}, ftWideMemo{$ENDIF COMPILER10_UP}:
|
|
Result := jctDBMemo;
|
|
ftGraphic:
|
|
Result := jctDBImage;
|
|
ftString:
|
|
Result := jctDBEdit;
|
|
ftDate:
|
|
Result := jctDBDateEdit;
|
|
ftTime:
|
|
Result := jctDBTimeEdit;
|
|
ftDateTime, ftTimestamp
|
|
{$IFDEF COMPILER10_UP}, ftOraTimestamp{$ENDIF COMPILER10_UP}:
|
|
Result := jctDBDateTimeEdit;
|
|
ftBoolean:
|
|
Result := jctDBCheckBox;
|
|
else
|
|
Result := jctDBEdit;
|
|
end;
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBFieldControl(AField: TField; AOwner: TComponent;
|
|
AParentControl: TWinControl; AControlName: string; ADataSource: TDataSource): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(GetFieldControlType(AField), AOwner, AParentControl,
|
|
AControlName, ADataSource, AField.FieldName));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBControl(AControlType: TJvDynControlType;
|
|
AOwner: TComponent; AParentControl: TWinControl; AControlName: string;
|
|
ADataSource: TDataSource; const ADataField: string): TControl;
|
|
var
|
|
DynCtrl: IJvDynControlDatabase;
|
|
begin
|
|
Result := CreateControl(AControlType, AOwner, AParentControl, AControlName);
|
|
if not Supports(Result, IJvDynControlDatabase, DynCtrl) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrl.ControlSetDatasource(ADataSource);
|
|
DynCtrl.ControlSetDatafield(ADataField);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBTextControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string;
|
|
ADataSource: TDataSource; const ADataField: string; const ACaption: string): TWinControl;
|
|
var
|
|
DynCtrl: IJvDynControlCaption;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBText, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
if not Supports(Result, IJvDynControlCaption, DynCtrl) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrl.ControlSetCaption(ACaption);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBEditControl(AOwner: TComponent; AParentControl: TWinControl;
|
|
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl;
|
|
var
|
|
DynCtrlEdit: IJvDynControlEdit;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
if not Supports(Result, IJvDynControlEdit, DynCtrlEdit) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBCheckboxControl(AOwner: TComponent; AParentControl: TWinControl;
|
|
const AControlName: string; ADataSource: TDataSource; const ADataField, ACaption: string): TWinControl;
|
|
var
|
|
DynCtrl: IJvDynControlCaption;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBCheckBox, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
if not Supports(Result, IJvDynControlCaption, DynCtrl) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrl.ControlSetCaption(ACaption);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBComboBoxControl(AOwner: TComponent; AParentControl: TWinControl;
|
|
const AControlName: string; ADataSource: TDataSource; const ADataField: string;
|
|
AItems: TStrings): TWinControl;
|
|
var
|
|
DynCtrlItems: IJvDynControlItems;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBComboBox, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
if not Supports(Result, IJvDynControlItems, DynCtrlItems) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrlItems.ControlSetItems(AItems);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBImageControl(AOwner: TComponent; AParentControl: TWinControl;
|
|
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBImage, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBRadioGroupControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField, ACaption: string; AItems: TStrings): TWinControl;
|
|
var
|
|
DynCtrl: IJvDynControlCaption;
|
|
DynCtrlItems: IJvDynControlItems;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBRadioGroup, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
if not Supports(Result, IJvDynControlCaption, DynCtrl) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrl.ControlSetCaption(ACaption);
|
|
if not Supports(Result, IJvDynControlItems, DynCtrlItems) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrlItems.ControlSetItems(AItems);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBMemoControl(AOwner: TComponent; AParentControl: TWinControl;
|
|
const AControlName: string; ADataSource: TDataSource; const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBMemo, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBListBoxControl(AOwner: TComponent; AParentControl: TWinControl;
|
|
const AControlName: string; ADataSource: TDataSource; const ADataField: string;
|
|
AItems: TStrings): TWinControl;
|
|
var
|
|
DynCtrlItems: IJvDynControlItems;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBListBox, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
if not Supports(Result, IJvDynControlItems, DynCtrlItems) then
|
|
raise EIntfCastError.CreateRes(@RsEIntfCastError);
|
|
DynCtrlItems.ControlSetItems(AItems);
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBDateTimeControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBDateTimeEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBDateControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBDateEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBTimeControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBTimeEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBCalculateControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBCalculateEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBSpinControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBSpinEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBDirectoryControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBDirectoryEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBFileNameControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource;
|
|
const ADataField: string): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBFileNameEdit, AOwner, AParentControl,
|
|
AControlName, ADataSource, ADataField));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBGridControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBGrid, AOwner, AParentControl,
|
|
AControlName, ADataSource, ''));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateDBNavigatorControl(AOwner: TComponent;
|
|
AParentControl: TWinControl; const AControlName: string; ADataSource: TDataSource): TWinControl;
|
|
begin
|
|
Result := TWinControl(CreateDBControl(jctDBNavigator, AOwner, AParentControl,
|
|
AControlName, ADataSource, ''));
|
|
end;
|
|
|
|
type
|
|
TAccessCustomControl = class(TCustomControl);
|
|
|
|
function TJvDynControlEngineDB.CreateControlsFromDataSourceOnControl(ADataSource: TDataSource;
|
|
AControl: TWinControl; AOptions: TJvCreateDBFieldsOnControlOptions): Boolean;
|
|
var
|
|
I: Integer;
|
|
Control: TWinControl;
|
|
LabelControl: TWinControl;
|
|
CreateOptions: TJvCreateDBFieldsOnControlOptions;
|
|
begin
|
|
//Result := False;
|
|
if not Assigned(ADataSource) or not Assigned(ADataSource.DataSet) or not Assigned(AControl) then
|
|
raise EJVCLException.CreateRes(@RsEUnassignedMultiple);
|
|
if not ADataSource.DataSet.Active then
|
|
raise EJVCLException.CreateRes(@RsEUnassignedDataSet);
|
|
if not Assigned(AOptions) then
|
|
CreateOptions := TJvCreateDBFieldsOnControlOptions.Create
|
|
else
|
|
CreateOptions := AOptions;
|
|
try
|
|
for I := 0 to ADataSource.DataSet.FieldCount - 1 do
|
|
if ADataSource.DataSet.Fields[I].Visible or CreateOptions.ShowInvisibleFields then
|
|
begin
|
|
Control := CreateDBFieldControl(ADataSource.DataSet.Fields[I], AControl, AControl, '', ADataSource);
|
|
if CreateOptions.FieldDefaultWidth > 0 then
|
|
Control.Width := CreateOptions.FieldDefaultWidth
|
|
else
|
|
begin
|
|
if CreateOptions.UseFieldSizeForWidth then
|
|
if ADataSource.DataSet.Fields[I].Size > 0 then
|
|
Control.Width :=
|
|
TAccessCustomControl(AControl).Canvas.TextWidth('X') * ADataSource.DataSet.Fields[I].Size
|
|
else
|
|
if (GetFieldControlType(ADataSource.DataSet.Fields[I])= jctDBMemo) and (CreateOptions.FieldMaxWidth > 0) then
|
|
Control.Width := CreateOptions.FieldMaxWidth
|
|
else
|
|
else
|
|
if ADataSource.DataSet.Fields[I].DisplayWidth > 0 then
|
|
Control.Width :=
|
|
TAccessCustomControl(AControl).Canvas.TextWidth('X') * ADataSource.DataSet.Fields[I].DisplayWidth;
|
|
if (CreateOptions.FieldMaxWidth > 0) and (Control.Width > CreateOptions.FieldMaxWidth) then
|
|
Control.Width := CreateOptions.FieldMaxWidth
|
|
else
|
|
if (CreateOptions.FieldMinWidth > 0) and (Control.Width < CreateOptions.FieldMinWidth) then
|
|
Control.Width := CreateOptions.FieldMinWidth
|
|
end;
|
|
|
|
if CreateOptions.UseParentColorForReadOnly then
|
|
// Use ParentColor when the field is ReadOnly
|
|
if not ADataSource.DataSet.CanModify or ADataSource.DataSet.Fields[I].ReadOnly then
|
|
if isPublishedProp(Control, 'ParentColor') then
|
|
SetOrdProp(Control, 'ParentColor', Ord(True));
|
|
LabelControl := GetDynControlEngine.CreateLabelControlPanel(AControl, AControl,
|
|
'', '&' + ADataSource.DataSet.Fields[I].DisplayLabel, Control, CreateOptions.LabelOnTop, CreateOptions.LabelDefaultWidth);
|
|
if CreateOptions.FieldWidthStep > 0 then
|
|
if (LabelControl.Width mod CreateOptions.FieldWidthStep) <> 0 then
|
|
LabelControl.Width := ((LabelControl.Width div CreateOptions.FieldWidthStep) + 1) * CreateOptions.FieldWidthStep;
|
|
end;
|
|
finally
|
|
if not Assigned(AOptions) then
|
|
CreateOptions.Free;
|
|
end;
|
|
Result := True;
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.GetDataSourceFromDataComponent(ADataComponent: TComponent): TDataSource;
|
|
begin
|
|
if ADatacomponent is TDataSource then
|
|
Result := TDataSource(ADataComponent)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.SupportsDataComponent(ADataComponent: TComponent): Boolean;
|
|
begin
|
|
Result := Assigned(ADataComponent) and Assigned(GetDataSourceFromDataComponent(ADataComponent));
|
|
end;
|
|
|
|
function TJvDynControlEngineDB.CreateControlsFromDataComponentOnControl(ADataComponent: TComponent;
|
|
AControl: TWinControl; AOptions: TJvCreateDBFieldsOnControlOptions): Boolean;
|
|
var
|
|
DS: TDataSource;
|
|
begin
|
|
DS := GetDataSourceFromDataComponent(ADataComponent);
|
|
if Assigned(DS) then
|
|
Result := CreateControlsFromDataSourceOnControl(DS, AControl, AOptions)
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
procedure SetDefaultDynControlEngineDB(AEngine: TJvDynControlEngineDB);
|
|
begin
|
|
if AEngine is TJvDynControlEngineDB then
|
|
GlobalDefaultDynControlEngineDB := AEngine;
|
|
end;
|
|
|
|
function DefaultDynControlEngineDB: TJvDynControlEngineDB;
|
|
begin
|
|
Result := GlobalDefaultDynControlEngineDB;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
initialization
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
|
|
finalization
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|