📄 dxbardbnav.pas
字号:
BarDBNavigator.AddButton(Self);
Glyph.LoadFromResourceName(HInstance,
PChar(BtnResStr + IntToStr(Integer(FNavButton) + 1)));
end;
try
if BarManager.Designing then
Name := (BarManager as IdxBarDesigner).UniqueName(dxBarDBNavBtnName + dxBarNames[FNavButton]);
Caption := cxGetResourceString(PResStrs[FNavButton]);
Hint := Caption;
except
raise;
end;
end;
end;
procedure TdxBarDBNavButton.Loaded;
begin
inherited Loaded;
if BarDBNavigator <> nil then
begin
BarDBNavigator.AddButton(Self);
BarDBNavigator.ActiveChanged;
end;
end;
procedure TdxBarDBNavButton.DoClick;
begin
inherited;
if Assigned(OnClick) then Exit;
if BarDBNavigator <> nil then
with BarDBNavigator.FDataLink.DataSet do
case FNavButton of
dxbnFirst: First;
dxbnPrior: Prior;
dxbnNext: Next;
dxbnLast: Last;
dxbnInsert: Insert;
dxbnDelete:
if not BarDBNavigator.ConfirmDelete or
(Application.MessageBox(PChar(cxGetResourceString(@dxSBAR_DELETERECORD)),
PChar(Application.Title), MB_ICONQUESTION or MB_YESNO) = ID_YES) then
Delete;
dxbnEdit: Edit;
dxbnPost: Post;
dxbnCancel: Cancel;
dxbnRefresh: Refresh;
end;
end;
{ TdxBarDBNavigator }
constructor TdxBarDBNavigator.Create(AOwner: TComponent);
var
ABarManager: TdxBarManager;
begin
ABarManager := GetBarManagerForComponent(AOwner);
{if (ABarManager = nil) and (dxBarManagerList.Count <> 0) then
ABarManager := dxBarManagerList[0];}
inherited Create(AOwner);
FBarManager := ABarManager;
FDataLink := TdxBarDBNavDataLink.Create;
FDataLink.FNavigator := Self;
FCategoryName := cxGetResourceString(@dxSBAR_CATEGORYNAME);
FDBCheckLinks := TdxBarDBCheckLinks.Create(TdxBarDBCheckLink);
FDBCheckLinks.FDBNavigator := Self;
end;
destructor TdxBarDBNavigator.Destroy;
begin
VisibleButtons := [];
FDBCheckLinks.Free;
FDataLink.FNavigator := nil;
FDataLink.Free;
inherited Destroy;
end;
procedure TdxBarDBNavigator.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then
begin
if AComponent = BarManager then BarManager := nil;
if AComponent = DataSource then DataSource := nil;
end;
end;
procedure TdxBarDBNavigator.CheckItemsEnable;
var
I: Integer;
Flag: Boolean;
begin
for I := 0 to FDBCheckLinks.Count - 1 do
with FDBCheckLinks[I] do
if Item <> nil then
begin
Flag := FDataLink.Active;
if dxdbtCanModify in EnableTypes then
Flag := Flag and FDataLink.DataSet.CanModify;
if dxdbtNotEOF in EnableTypes then
Flag := Flag and not FDataLink.DataSet.EOF;
if dxdbtNotBOF in EnableTypes then
Flag := Flag and not FDataLink.DataSet.BOF;
if dxdbtHasRecords in EnableTypes then
Flag := Flag and not (FDataLink.DataSet.BOF and FDataLink.DataSet.EOF);
if dxdbtIsModified in EnableTypes then
Flag := Flag and FDataLink.Editing;
if dxdbtIsNotModified in EnableTypes then
Flag := Flag and not FDataLink.Editing;
Item.Enabled := Flag;
end;
end;
procedure TdxBarDBNavigator.DataChanged;
var
UpEnable, DnEnable: Boolean;
begin
UpEnable := FDataLink.Active and not FDataLink.DataSet.BOF;
DnEnable := FDataLink.Active and not FDataLink.DataSet.EOF;
if Buttons[dxbnFirst] <> nil then
Buttons[dxbnFirst].Enabled := UpEnable;
if Buttons[dxbnPrior] <> nil then
Buttons[dxbnPrior].Enabled := UpEnable;
if Buttons[dxbnNext] <> nil then
Buttons[dxbnNext].Enabled := DnEnable;
if Buttons[dxbnLast] <> nil then
Buttons[dxbnLast].Enabled := DnEnable;
if Buttons[dxbnDelete] <> nil then
Buttons[dxbnDelete].Enabled := FDataLink.Active and FDataLink.DataSet.CanModify and
not (FDataLink.DataSet.BOF and FDataLink.DataSet.EOF);
if Buttons[dxbnRefresh] <> nil then
Buttons[dxbnRefresh].Enabled := FDataLink.Active;
CheckItemsEnable;
end;
procedure TdxBarDBNavigator.EditingChanged;
var
CanModify: Boolean;
begin
CanModify := FDataLink.Active and FDataLink.DataSet.CanModify;
if Buttons[dxbnInsert] <> nil then
Buttons[dxbnInsert].Enabled := CanModify;
if Buttons[dxbnEdit] <> nil then
Buttons[dxbnEdit].Enabled := CanModify and not FDataLink.Editing;
if Buttons[dxbnPost] <> nil then
Buttons[dxbnPost].Enabled := CanModify and FDataLink.Editing;
if Buttons[dxbnCancel] <> nil then
Buttons[dxbnCancel].Enabled := CanModify and FDataLink.Editing;
CheckItemsEnable;
end;
procedure TdxBarDBNavigator.ActiveChanged;
var
I: TdxBarDBNavButtonType;
J: Integer;
begin
if not FDataLink.Active then
begin
for I := Low(Buttons) to High(Buttons) do
if Buttons[I] <> nil then
Buttons[I].Enabled := False;
for J := 0 to FDBCheckLinks.Count - 1 do
if FDBCheckLinks[J].Item <> nil then
FDBCheckLinks[J].Item.Enabled := False;
end
else
begin
DataChanged;
EditingChanged;
end;
end;
function TdxBarDBNavigator.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;
procedure TdxBarDBNavigator.SetBarManager(Value: TdxBarManager);
var
SaveVisButtons: TdxBarDBNavButtonTypes;
begin
if FBarManager <> Value then
begin
SaveVisButtons := FVisibleButtons;
VisibleButtons := [];
FBarManager := Value;
VisibleButtons := SaveVisButtons;
end;
end;
procedure TdxBarDBNavigator.SetCategoryName(Value: string);
var
Index1, Index2: Integer;
I: TdxBarDBNavButtonType;
begin
if FCategoryName <> Value then
if csLoading in ComponentState then
FCategoryName := Value
else
if BarManager <> nil then
begin
Index1 := BarManager.Categories.IndexOf(FCategoryName);
FCategoryName := Value;
Index2 := BarManager.Categories.IndexOf(FCategoryName);
if Index2 = -1 then
begin
BarManager.Categories.Add(FCategoryName);
Index2 := BarManager.Categories.IndexOf(FCategoryName);
end;
for I := Low(Buttons) to High(Buttons) do
if Buttons[I] <> nil then Buttons[I].Category := Index2;
if (Index1 > -1) and (BarManager.GetCountByCategory(Index1) = 0) then
BarManager.Categories.Delete(Index1);
end;
end;
procedure TdxBarDBNavigator.SetDataSource(Value: TDataSource);
begin
FDataLink.DataSource := Value;
if not (csLoading in ComponentState) then ActiveChanged;
if Value <> nil then Value.FreeNotification(Self);
end;
procedure TdxBarDBNavigator.SetDBNavItems(Value: TdxBarDBCheckLinks);
begin
FDBCheckLinks.Assign(Value);
DataChanged;
end;
procedure TdxBarDBNavigator.SetVisibleButtons(Value: TdxBarDBNavButtonTypes);
var
I: TdxBarDBNavButtonType;
AIndex: Integer;
begin
if FVisibleButtons <> Value then
begin
FVisibleButtons := Value;
FSetVisFlag := True;
if not (csLoading in ComponentState) and (BarManager <> nil) then
for I := Low(Buttons) to High(Buttons) do
begin
if (Buttons[I] <> nil) and //not (csDestroying in Buttons[I].ComponentState) and
not (I in Value) then
begin
Buttons[I].Free;
Buttons[I] := nil;
end;
if (Buttons[I] = nil) and (I in Value) then
begin
Buttons[I] := TdxBarDBNavButton.Create(Owner);
with Buttons[I] do
begin
BarDBNavigator := Self;
AIndex := BarManager.Categories.IndexOf(FCategoryName);
if AIndex = -1 then
begin
BarManager.Categories.Add(FCategoryName);
AIndex := BarManager.Categories.IndexOf(FCategoryName);
end;
Category := AIndex;
NavButton := I;
end;
end;
end;
ActiveChanged;
FSetVisFlag := False;
end;
if (FVisibleButtons = []) and (BarManager <> nil) and
not (csDestroying in BarManager.ComponentState) then
begin
AIndex := BarManager.Categories.IndexOf(FCategoryName);
if (AIndex > -1) and (BarManager.GetCountByCategory(AIndex) = 0) then
BarManager.Categories.Delete(AIndex);
end;
end;
procedure TdxBarDBNavigator.AddButton(AButton: TdxBarDBNavButton);
begin
Buttons[AButton.NavButton] := AButton;
FVisibleButtons := FVisibleButtons + [AButton.NavButton];
end;
procedure TdxBarDBNavigator.RemoveButton(AButton: TdxBarDBNavButton);
begin
Buttons[AButton.NavButton] := nil;
FVisibleButtons := FVisibleButtons - [AButton.NavButton];
end;
initialization
dxBarRegisterItem(TdxBarDBNavButton, TdxBarButtonControl, False);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -