⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxbardbnav.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        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 + -