📄 jvdbactions.pas
字号:
begin
inherited Notification(AComponent, Operation);
end;
//=== { TJvDatabaseSimpleAction } ============================================
constructor TJvDatabaseSimpleAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FIsActive := True;
FHasData := True;
FCanInsert := False;
FCanUpdate := False;
FCanDelete := False;
FEditModeActive := False;
end;
procedure TJvDatabaseSimpleAction.UpdateTarget(Target: TObject);
var
Res: Boolean;
begin
if Assigned(DataSet) and not EngineControlsDisabled then
begin
Res := False;
if IsActive then
Res := Res and EngineIsActive;
if HasData then
Res := Res and EngineHasData;
if CanInsert then
Res := Res and EngineCanInsert;
if CanUpdate then
Res := Res and EngineCanUpdate;
if CanDelete then
Res := Res and EngineCanDelete;
if EditModeActive then
Res := Res and EngineEditModeActive;
SetEnabled(Res)
end
else
SetEnabled(False);
end;
//=== { TJvDatabaseBaseActiveAction } ========================================
procedure TJvDatabaseBaseActiveAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and EngineIsActive);
end;
//=== { TJvDatabaseBaseEditAction } ==========================================
procedure TJvDatabaseBaseEditAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and EngineIsActive and (EngineCanInsert or EngineCanUpdate or EngineCanDelete));
end;
//=== { TJvDatabaseFirstAction } =============================================
procedure TJvDatabaseFirstAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataEngine) and not EngineControlsDisabled and EngineIsActive and not EngineBof);
end;
procedure TJvDatabaseFirstAction.ExecuteTarget(Target: TObject);
begin
DataEngine.First(DataComponent);
end;
//=== { TJvDatabaseLastAction } ==============================================
procedure TJvDatabaseLastAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataEngine) and not EngineControlsDisabled and EngineIsActive and not EngineEof);
end;
procedure TJvDatabaseLastAction.ExecuteTarget(Target: TObject);
begin
DataEngine.Last(DataComponent);
end;
//=== { TJvDatabasePriorAction } =============================================
procedure TJvDatabasePriorAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataEngine) and not EngineControlsDisabled and EngineIsActive and not EngineBof);
end;
procedure TJvDatabasePriorAction.ExecuteTarget(Target: TObject);
begin
DataEngine.MoveBy(DataComponent, -1);
end;
//=== { TJvDatabaseNextAction } ==============================================
procedure TJvDatabaseNextAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataEngine) and not EngineControlsDisabled and EngineIsActive and not EngineEof);
end;
procedure TJvDatabaseNextAction.ExecuteTarget(Target: TObject);
begin
DataEngine.MoveBy(DataComponent, 1);
end;
//=== { TJvDatabasePriorBlockAction } ========================================
constructor TJvDatabasePriorBlockAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBlockSize := 50;
end;
procedure TJvDatabasePriorBlockAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataEngine) and not EngineControlsDisabled and EngineIsActive and not EngineBof);
end;
procedure TJvDatabasePriorBlockAction.ExecuteTarget(Target: TObject);
begin
with DataEngine do
try
DisableControls(DataComponent);
MoveBy(DataComponent, -BlockSize);
finally
EnableControls(DataComponent);
end;
end;
//=== { TJvDatabaseNextBlockAction } =========================================
constructor TJvDatabaseNextBlockAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBlockSize := 50;
end;
procedure TJvDatabaseNextBlockAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataEngine) and not EngineControlsDisabled and EngineIsActive and not EngineEof);
end;
procedure TJvDatabaseNextBlockAction.ExecuteTarget(Target: TObject);
begin
with DataEngine do
try
DisableControls(DataComponent);
MoveBy(DataComponent, BlockSize);
finally
EnableControls(DataComponent);
end;
end;
//=== { TJvDatabaseRefreshAction } ===========================================
constructor TJvDatabaseRefreshAction.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FRefreshLastPosition := True;
FRefreshAsOpenClose := False;
end;
procedure TJvDatabaseRefreshAction.ExecuteTarget(Target: TObject);
begin
Refresh;
end;
procedure TJvDatabaseRefreshAction.Refresh;
var
MyBookmark: TBookmark;
begin
with DataEngine.GetDataSet(DataComponent) do
begin
MyBookmark := nil;
if RefreshLastPosition then
MyBookmark := GetBookmark;
try
if RefreshAsOpenClose then
begin
Close;
Open;
end
else
Refresh;
if RefreshLastPosition then
if Active then
if Assigned(MyBookmark) then
if BookmarkValid(MyBookmark) then
try
GotoBookmark(MyBookmark);
except
end;
finally
if RefreshLastPosition then
FreeBookmark(MyBookmark);
end;
end;
end;
//=== { TJvDatabasePositionAction } ==========================================
procedure TJvDatabasePositionAction.UpdateTarget(Target: TObject);
const
cFormat = ' %3d / %3d ';
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and EngineIsActive and EngineHasData);
try
if not EngineIsActive then
Caption := Format(cFormat, [0, 0])
else
if EngineRecordCount = 0 then
Caption := Format(cFormat, [0, 0])
else
Caption := Format(cFormat, [EngineRecNo, EngineRecordCount]);
except
Caption := Format(cFormat, [0, 0]);
end;
end;
procedure TJvDatabasePositionAction.ExecuteTarget(Target: TObject);
begin
ShowPositionDialog;
end;
procedure TJvDatabasePositionAction.ShowPositionDialog;
const
cCurrentPosition = 'CurrentPosition';
cNewPosition = 'NewPosition';
cKind = 'Kind';
var
ParameterList: TJvParameterList;
Parameter: TJvBaseParameter;
S: string;
Kind: Integer;
begin
if not Assigned(DataSet) then
Exit;
ParameterList := TJvParameterList.Create(Self);
try
Parameter := TJvBaseParameter(TJvEditParameter.Create(ParameterList));
with TJvEditParameter(Parameter) do
begin
SearchName := cCurrentPosition;
ReadOnly := True;
Caption := RsDBPosCurrentPosition;
AsString := IntToStr(EngineRecNo + 1) + ' / ' + IntToStr(EngineRecordCount);
Width := 150;
LabelWidth := 80;
Enabled := False;
end;
ParameterList.AddParameter(Parameter);
Parameter := TJvBaseParameter(TJvEditParameter.Create(ParameterList));
with TJvEditParameter(Parameter) do
begin
Caption := RsDBPosNewPosition;
SearchName := cNewPosition;
// EditMask := '999999999;0;_';
Width := 150;
LabelWidth := 80;
end;
ParameterList.AddParameter(Parameter);
Parameter := TJvBaseParameter(TJvRadioGroupParameter.Create(ParameterList));
with TJvRadioGroupParameter(Parameter) do
begin
Caption := RsDBPosMovementType;
SearchName := cKind;
Width := 305;
Height := 54;
Columns := 2;
ItemList.Add(RsDBPosAbsolute);
ItemList.Add(RsDBPosForward);
ItemList.Add(RsDBPosBackward);
ItemList.Add(RsDBPosPercental);
ItemIndex := 0;
end;
ParameterList.AddParameter(Parameter);
ParameterList.ArrangeSettings.WrapControls := True;
ParameterList.ArrangeSettings.MaxWidth := 350;
ParameterList.Messages.Caption := RsDBPosDialogCaption;
if ParameterList.ShowParameterDialog then
begin
S := ParameterList.ParameterByName(cNewPosition).AsString;
if S = '' then
Exit;
Kind := TJvRadioGroupParameter(ParameterList.ParameterByName(cKind)).ItemIndex;
DataSet.DisableControls;
try
case Kind of
0:
begin
DataSet.First;
DataSet.MoveBy(StrToInt(S) - 1);
end;
1:
DataSet.MoveBy(StrToInt(S));
2:
DataSet.MoveBy(StrToInt(S) * -1);
3:
begin
DataSet.First;
DataSet.MoveBy(Round((EngineRecordCount / 100.0) * StrToInt(S)) - 1);
end;
end;
finally
DataSet.EnableControls;
end;
end;
finally
ParameterList.Free;
end;
end;
//=== { TJvDatabaseInsertAction } ============================================
procedure TJvDatabaseInsertAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and
EngineIsActive and EngineCanInsert and not EngineEditModeActive);
end;
procedure TJvDatabaseInsertAction.ExecuteTarget(Target: TObject);
begin
DataSet.Insert;
end;
//=== { TJvDatabaseCopyAction } ==============================================
procedure TJvDatabaseCopyAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and EngineIsActive and
EngineCanInsert and EngineHasData and not EngineEditModeActive);
end;
procedure TJvDatabaseCopyAction.ExecuteTarget(Target: TObject);
begin
CopyRecord;
end;
procedure TJvDatabaseCopyAction.CopyRecord;
var
Values: array of Variant;
I: Integer;
Value: Variant;
Allowed: Boolean;
begin
with DataSet do
begin
if not Active then
Exit;
if State in [dsInsert, dsEdit] then
Post;
if State <> dsBrowse then
Exit;
Allowed := True;
end;
if Assigned(FBeforeCopyRecord) then
FBeforeCopyRecord(DataSet, Allowed);
with DataSet do
begin
// (rom) this suppresses AfterCopyRecord. Is that desired?
if not Allowed then
Exit;
SetLength(Values, FieldCount);
for I := 0 to FieldCount - 1 do
Values[I] := Fields[I].AsVariant;
Insert;
if Assigned(FOnCopyRecord) then
for I := 0 to FieldCount - 1 do
begin
Value := Values[I];
FOnCopyRecord(Fields[I], Value);
end
else
for I := 0 to FieldCount - 1 do
Fields[I].AsVariant := Values[I];
end;
if Assigned(FAfterCopyRecord) then
FAfterCopyRecord(DataSet);
end;
//=== { TJvDatabaseEditAction } ==============================================
procedure TJvDatabaseEditAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and EngineIsActive and
EngineCanUpdate and EngineHasData and not EngineEditModeActive);
end;
procedure TJvDatabaseEditAction.ExecuteTarget(Target: TObject);
begin
DataSet.Edit;
end;
//=== { TJvDatabaseDeleteAction } ============================================
procedure TJvDatabaseDeleteAction.UpdateTarget(Target: TObject);
begin
SetEnabled(Assigned(DataSet) and not EngineControlsDisabled and EngineIsActive and
EngineCanDelete and EngineHasData and not EngineEditModeActive);
end;
procedure TJvDatabaseDeleteAction.ExecuteTarget(Target: TObject);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -