📄 jvdbactions.pas
字号:
Dialog := TJvDynControlDataSourceEditDialog.Create;
try
AOptions.SetOptionsToDialog(Dialog);
if Dialog.DynControlEngineDB.SupportsDataComponent(ADataComponent) then
Dialog.DataComponent := ADataComponent
else
Dialog.DataComponent := GetDataSource(ADataComponent);
Dialog.ShowDialog;
finally
Dialog.Free;
end;
end;
//=== { TJvDatabaseActionDBGridEngine } ======================================
function TJvDatabaseActionDBGridEngine.GetDataSource(ADataComponent: TComponent): TDataSource;
begin
if Assigned(ADataComponent) and (ADataComponent is TCustomDBGrid) then
Result := TCustomDBGrid(ADataComponent).DataSource
else
Result := nil;
end;
type
TAccessCustomDBGrid = class(TCustomDBGrid);
TAccessCustomControl = class(TCustomControl);
procedure TJvDatabaseActionDBGridEngine.OnCreateDataControls(ADynControlEngineDB: TJvDynControlEngineDB;
AParentControl: TWinControl; AFieldCreateOptions: TJvCreateDBFieldsOnControlOptions);
var
I: Integer;
ds: TDataSource;
Field: TField;
LabelControl: TControl;
Control: TWinControl;
Column: TColumn;
begin
if Assigned(FCurrentDataComponent) and (FCurrentDataComponent is TCustomDBGrid) then
begin
ds := GetDataSource(FCurrentDataComponent);
with AFieldCreateOptions do
for I := 0 to TAccessCustomDBGrid(FCurrentDataComponent).ColCount - 2 do
begin
Column := TAccessCustomDBGrid(FCurrentDataComponent).Columns[I];
if Column.Visible or ShowInvisibleFields then
begin
Field := Column.Field;
Control := ADynControlEngineDB.CreateDBFieldControl(Field, AParentControl, AParentControl, '', ds);
if FieldDefaultWidth > 0 then
Control.Width := FieldDefaultWidth
else
begin
if Field.Size > 0 then
Control.Width :=
TAccessCustomControl(AParentControl).Canvas.TextWidth(' ') * Field.Size;
if (FieldMaxWidth > 0) and (Control.Width > FieldMaxWidth) then
Control.Width := FieldMaxWidth
else
if (FieldMinWidth > 0) and (Control.Width < FieldMinWidth) then
Control.Width := FieldMinWidth;
end;
LabelControl := ADynControlEngineDB.DynControlEngine.CreateLabelControlPanel(AParentControl, AParentControl,
'', '&' + Column.Title.Caption, Control, True, 0);
if FieldWidthStep > 0 then
if (LabelControl.Width mod FieldWidthStep) <> 0 then
LabelControl.Width := ((LabelControl.Width div FieldWidthStep) + 1) * FieldWidthStep;
end;
end;
end;
end;
function TJvDatabaseActionDBGridEngine.Supports(ADataComponent: TComponent): Boolean;
begin
Result := Assigned(ADataComponent) and (ADataComponent is TCustomDBGrid);
end;
procedure TJvDatabaseActionDBGridEngine.ShowSingleRecordWindow(AOptions: TJvShowSingleRecordWindowOptions;
ADataComponent: TComponent);
var
Dialog: TJvDynControlDataSourceEditDialog;
begin
Dialog := TJvDynControlDataSourceEditDialog.Create;
try
AOptions.SetOptionsToDialog(Dialog);
FCurrentDataComponent := ADataComponent;
if Dialog.DynControlEngineDB.SupportsDataComponent(ADataComponent) then
Dialog.DataComponent := ADataComponent
else
Dialog.DataComponent := GetDataSource(ADataComponent);
Dialog.OnCreateDataControlsEvent := OnCreateDataControls;
Dialog.ShowDialog;
finally
Dialog.Free;
end;
end;
//=== { TJvDatabaseActionDevExpCxGridEngine } ================================
{$IFDEF USE_3RDPARTY_DEVEXPRESS_CXGRID}
function TJvDatabaseActionDevExpCxGridEngine.GetGridView(ADataComponent: TComponent): TcxCustomGridTableView;
begin
if Assigned(ADataComponent) then
if ADataComponent is TcxGrid then
if TcxGrid(ADataComponent).FocusedView is TcxCustomGridTableView then
Result := TcxCustomGridTableView(TcxGrid(ADataComponent).FocusedView)
else
Result := nil
else
if ADataComponent is TcxCustomGridTableView then
Result := TcxCustomGridTableView(ADataComponent)
else
Result := nil
else
Result := nil;
end;
function TJvDatabaseActionDevExpCxGridEngine.GetDataSource(ADataComponent: TComponent): TDataSource;
begin
if Assigned(ADataComponent) then
if ADataComponent is TcxGrid then
if (TcxGrid(ADataComponent).FocusedView is TcxCustomGridTableView) and
(TcxCustomGridTableView(TcxGrid(ADataComponent).FocusedView).DataController is TcxGridDBDataController) then
Result := TcxGridDBDataController(TcxCustomGridTableView(
TcxGrid(ADataComponent).FocusedView).DataController).DataSource
else
Result := nil
else
if ADataComponent is TcxCustomGridTableView then
if TcxCustomGridTableView(ADataComponent).DataController is TcxGridDBDataController then
Result := TcxGridDBDataController(TcxCustomGridTableView(ADataComponent).DataController).DataSource
else
Result := nil
else
Result := inherited GetDataSource(ADataComponent)
else
Result := nil;
end;
function TJvDatabaseActionDevExpCxGridEngine.Supports(ADataComponent: TComponent): Boolean;
begin
Result := Assigned(GetGridView(ADataComponent));
end;
function TJvDatabaseActionDevExpCxGridEngine.Bof(ADataComponent: TComponent): Boolean;
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
Result := View.DataController.FocusedRowIndex = 0
else
Result := inherited Bof(ADataComponent);
end;
function TJvDatabaseActionDevExpCxGridEngine.RecNo(ADataComponent: TComponent): Integer;
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
Result := View.DataController.FocusedRowIndex+1
else
Result := inherited RecNo(ADataComponent);
end;
function TJvDatabaseActionDevExpCxGridEngine.RecordCount(ADataComponent: TComponent): Integer;
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
Result := View.DataController.RecordCount
else
Result := inherited RecordCount(ADataComponent);
end;
function TJvDatabaseActionDevExpCxGridEngine.CanInsert(ADataComponent: TComponent): Boolean;
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
Result := View.OptionsData.Inserting and inherited CanInsert(ADataComponent)
else
Result := inherited CanInsert(ADataComponent);
end;
function TJvDatabaseActionDevExpCxGridEngine.CanUpdate(ADataComponent: TComponent): Boolean;
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
Result := View.OptionsData.Editing and inherited CanUpdate(ADataComponent)
else
Result := inherited CanUpdate(ADataComponent);
end;
function TJvDatabaseActionDevExpCxGridEngine.CanDelete(ADataComponent: TComponent): Boolean;
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
Result := View.OptionsData.Deleting and inherited CanDelete(ADataComponent)
else
Result := inherited CanDelete(ADataComponent);
end;
procedure TJvDatabaseActionDevExpCxGridEngine.First(ADataComponent: TComponent);
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
View.DataController.GotoFirst;
end;
procedure TJvDatabaseActionDevExpCxGridEngine.Last(ADataComponent: TComponent);
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
View.DataController.GotoLast;
end;
procedure TJvDatabaseActionDevExpCxGridEngine.MoveBy(ADataComponent: TComponent; Distance: Integer);
var
View: TcxCustomGridTableView;
begin
View := GetGridView(ADataComponent);
if Assigned(View) then
View.DataController.MoveBy(Distance)
end;
{$ENDIF USE_3RDPARTY_DEVEXPRESS_CXGRID}
//=== { TJvDatabaseBaseAction } ==============================================
constructor TJvDatabaseBaseAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if Assigned(AOwner) and (AOwner is TJvDatabaseActionList) then
DataComponent := TJvDatabaseActionList(AOwner).DataComponent;
end;
function TJvDatabaseBaseAction.GetDataSet: TDataSet;
begin
if Assigned(DataEngine) then
Result := DataEngine.GetDataSet(DataComponent)
else
Result := nil;
end;
function TJvDatabaseBaseAction.GetDataSource: TDataSource;
begin
if Assigned(DataEngine) then
Result := DataEngine.GetDataSource(DataComponent)
else
Result := nil;
end;
procedure TJvDatabaseBaseAction.SetDataComponent(Value: TComponent);
begin
FDataComponent := Value;
if FDataComponent <> nil then
FDataComponent.FreeNotification(Self);
if Assigned(IntRegisteredActionEngineList) then
FDataEngine := IntRegisteredActionEngineList.GetEngine(FDataComponent)
else
FDataEngine := nil;
end;
procedure TJvDatabaseBaseAction.SetEnabled(Value: Boolean);
begin
if Enabled <> Value then
Enabled := Value;
end;
function TJvDatabaseBaseAction.EngineIsActive: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.IsActive(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineHasData: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.HasData(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineFieldCount: Integer;
begin
if Assigned(DataEngine) then
Result := DataEngine.FieldCount(DataComponent)
else
Result := -1;
end;
function TJvDatabaseBaseAction.EngineRecordCount: Integer;
begin
if Assigned(DataEngine) then
Result := DataEngine.RecordCount(DataComponent)
else
Result := -1;
end;
function TJvDatabaseBaseAction.EngineRecNo: Integer;
begin
if Assigned(DataEngine) then
Result := DataEngine.RecNo(DataComponent)
else
Result := -1;
end;
function TJvDatabaseBaseAction.EngineCanInsert: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.CanInsert(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineCanUpdate: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.CanUpdate(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineCanDelete: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.CanDelete(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineEof: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.Eof(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineBof: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.Bof(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineControlsDisabled: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.ControlsDisabled(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.EngineEditModeActive: Boolean;
begin
if Assigned(DataEngine) then
Result := DataEngine.EditModeActive(DataComponent)
else
Result := False;
end;
function TJvDatabaseBaseAction.HandlesTarget(Target: TObject): Boolean;
begin
// Result := inherited HandlesTarget(Target);
Result := Assigned(DataEngine);
end;
procedure TJvDatabaseBaseAction.UpdateTarget(Target: TObject);
begin
if Assigned(DataSet) and not EngineControlsDisabled then
SetEnabled(True)
else
SetEnabled(False);
end;
procedure TJvDatabaseBaseAction.ExecuteTarget(Target: TObject);
begin
if Assigned(FOnExecute) then
FOnExecute(Self, DataEngine, DataComponent)
else
if Assigned(FOnExecuteDataSource) then
FOnExecuteDataSource(Self, DataSource)
else
inherited ExecuteTarget(Target);
end;
procedure TJvDatabaseBaseAction.Notification(AComponent: TComponent; Operation: TOperation);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -