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

📄 dxribbonstatusbar.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  Result := ADockControl.ColorScheme;
end;

{ TdxDefaultRibbonStatusBarBarControlPainter }

function TdxDefaultRibbonStatusBarBarControlPainter.GetButtonBorderHeight: Integer;
begin
  Result := 4;
  if IsCompositionEnabled then
    Dec(Result, 2);
end;

function TdxDefaultRibbonStatusBarBarControlPainter.GetToolbarContentOffsets(
  ABar: TdxBar; ADockingStyle: TdxBarDockingStyle;
  AHasSizeGrip: Boolean): TRect;
begin
  Result := cxRect(1, 1, 1, 3);
end;

function TdxDefaultRibbonStatusBarBarControlPainter.MarkButtonOffset: Integer;
begin
  Result := 0;
end;

function TdxDefaultRibbonStatusBarBarControlPainter.MarkSizeX(ABarControl: TdxBarControl): Integer;
begin
  Result := 0;
end;

{ TdxRibbonStatusBarBarControlViewInfo }

function TdxRibbonStatusBarBarControlViewInfo.CanShowButtonGroups: Boolean;
begin
  Result := True;
end;

function TdxRibbonStatusBarBarControlViewInfo.CanShowSeparators: Boolean;
begin
  Result := True;
end;

{ TdxRibbonStatusBarBarControl }

function TdxRibbonStatusBarBarControl.CanShowPopupMenuOnMouseClick(
  AMousePressed: Boolean): Boolean;
begin
  Result := (Ribbon <> nil) and inherited CanShowPopupMenuOnMouseClick(AMousePressed) and
    ((csDesigning in ComponentState) or Bar.AllowQuickCustomizing);
end;

procedure TdxRibbonStatusBarBarControl.DoPaintItem(AControl: TdxBarItemControl;
  ACanvas: TcxCanvas; const AItemRect: TRect);
begin
  if Ribbon = nil then
  begin
    AControl.Paint(ACanvas, AItemRect, GetPaintType);
    DrawSelectedItem(ACanvas.Handle, AControl, AItemRect);
  end
  else
    inherited DoPaintItem(AControl, ACanvas, AItemRect);
end;

function TdxRibbonStatusBarBarControl.GetDefaultItemGlyph: TBitmap;
begin
  Result := nil;
end;

function TdxRibbonStatusBarBarControl.GetItemControlDefaultViewLevel(
  AItemControl: TdxBarItemControl): TdxBarItemViewLevel;
begin
  Result := IdxBarItemControlViewInfo(AItemControl.ViewInfo).GetViewLevelForButtonGroup;
end;

function TdxRibbonStatusBarBarControl.GetMinHeight(
  AStyle: TdxBarDockingStyle): Integer;
begin
  if (Ribbon <> nil) and IsValid then
    Result := Painter.GetButtonHeight(BarManager.ImageOptions.GlyphSize, TextSize)
  else
    Result := 18;
end;

function TdxRibbonStatusBarBarControl.GetRibbon: TdxCustomRibbon;
var
  ADockControl: TdxRibbonStatusBarDockControl;
begin
  ADockControl := TdxRibbonStatusBarDockControl(DockControl);
  if (ADockControl = nil) or (ADockControl.StatusBar = nil) then
    Result := nil
  else
    Result := ADockControl.StatusBar.Ribbon;
end;

function TdxRibbonStatusBarBarControl.GetViewInfoClass: TCustomdxBarControlViewInfoClass;
begin
  Result := TdxRibbonStatusBarBarControlViewInfo;
end;

procedure TdxRibbonStatusBarBarControl.InitCustomizationPopup(AItemLinks: TdxBarItemLinks);
var
  I: Integer;
  AItemLink: TdxBarItemLink;
  ASubItemButton: TdxRibbonQuickAccessPopupSubItemButton;
begin
  while AItemLinks.Count > 0 do
    AItemLinks.Items[0].Item.Free;
  for I := 0 to ItemLinks.AvailableItemCount - 1 do
  begin
    AItemLink := ItemLinks.AvailableItems[I];
    ASubItemButton := TdxRibbonQuickAccessPopupSubItemButton(AItemLinks.AddItem(TdxRibbonQuickAccessPopupSubItemButton).Item);
    ASubItemButton.Tag := Integer(AItemLink);
    ASubItemButton.ButtonStyle := bsChecked;
    ASubItemButton.Down := AItemLink.Visible;
    ASubItemButton.Caption := AItemLink.Caption;
    BarDesignController.AddInternalItem(ASubItemButton);
  end;
end;

function TdxRibbonStatusBarBarControl.IsValid: Boolean;
begin
  Result := HandleAllocated and (BarManager <> nil) and
    (BarManager.ComponentState * [csDestroying, csLoading] = []);
end;

function TdxRibbonStatusBarBarControl.MarkExists: Boolean;
begin
  Result := False;
end;

procedure TdxRibbonStatusBarBarControl.UpdateDoubleBuffered;
begin
  DoubleBuffered := True;
end;

procedure TdxRibbonStatusBarBarControl.CMFontChanged(var Message: TMessage);
begin
  inherited;
  if (StatusBar <> nil) and StatusBar.IsRibbonValid then
    StatusBar.Invalidate;
end;

function TdxRibbonStatusBarBarControl.GetStatusBar: TdxRibbonStatusBar;
var
  ADockControl: TdxRibbonStatusBarDockControl;
begin
  ADockControl := TdxRibbonStatusBarDockControl(DockControl);
  if ADockControl = nil then
    Result := nil
  else
    Result := ADockControl.StatusBar;
end;

{ TdxRibbonStatusBarBarControlDesignHelper }

class function TdxRibbonStatusBarBarControlDesignHelper.GetForbiddenActions: TdxBarCustomizationActions;
begin
  Result := inherited GetForbiddenActions - [caChangeViewLevels, caChangeButtonGroup];
end;

{ TdxRibbonStatusBarDockControl }

constructor TdxRibbonStatusBarDockControl.Create(AOwner: TdxStatusBarToolbarPanelStyle);
begin
  inherited Create(AOwner.StatusBarControl);
  FStatusBar := TdxRibbonStatusBar(AOwner.StatusBarControl);
  FPanel := AOwner.Owner;
  Parent := FStatusBar;
  AllowDocking := False;
  Align := dalNone;
  ControlStyle := ControlStyle + [csNoDesignVisible];
end;

destructor TdxRibbonStatusBarDockControl.Destroy;
begin
  FPainter.Free;
  inherited Destroy;
end;

procedure TdxRibbonStatusBarDockControl.CalcLayout;
begin
  inherited CalcLayout;
  StatusBar.Recalculate;
  StatusBar.Invalidate;
end;

procedure TdxRibbonStatusBarDockControl.UpdateDoubleBuffered;
begin
  DoubleBuffered := True;
end;

procedure TdxRibbonStatusBarDockControl.FillBackground(DC: HDC; const ADestR,
  ASourceR: TRect; ABrush: HBRUSH; AColor: TColor);
var
  R: TRect;
begin
  R := ClientRect;
  R.Bottom := StatusBar.Height;
  if ColorScheme = nil then
    FillRectByColor(DC, ClientRect, clBtnFace)
  else
    ColorScheme.DrawStatusBarPanel(DC, cxRectOffset(R, Left, Top), R,
      Panel.Bevel <> dxpbRaised);
end;

function TdxRibbonStatusBarDockControl.GetDockedBarControlClass: TdxBarControlClass;
begin
  Result := TdxRibbonStatusBarBarControl;
end;

function TdxRibbonStatusBarDockControl.GetOwner: TPersistent;
begin
  Result := nil;
end;

function TdxRibbonStatusBarDockControl.GetPainter: TdxBarPainter;
begin
  if Ribbon <> nil then
  begin
    if FPainter = nil then
      FPainter := TdxRibbonStatusBarBarControlPainter.Create(Integer(Ribbon));
  end
  else
    FreeAndNil(FPainter);
  if FPainter = nil then
    Result := StatusBar.DefaultBarPainter
  else
    Result := FPainter;
end;

procedure TdxRibbonStatusBarDockControl.ShowCustomizePopup;
var
  ABarControl: TdxRibbonStatusBarBarControl;
begin
  ABarControl := BarControl;
  if (ABarControl <> nil) and ABarControl.CanShowPopupMenuOnMouseClick(False) then
    ABarControl.ShowPopup(nil);
end;

procedure TdxRibbonStatusBarDockControl.VisibleChanged;
begin
  Changed;
end;

function TdxRibbonStatusBarDockControl.GetBarControl: TdxRibbonStatusBarBarControl;
begin
  if (RowCount > 0) and (Rows[0].ColCount > 0) then
    Result := TdxRibbonStatusBarBarControl(Rows[0].Cols[0].BarControl)
  else
    Result := nil;
end;

function TdxRibbonStatusBarDockControl.GetColorScheme: TdxCustomRibbonSkin;
begin
  if Ribbon <> nil then
    Result := Ribbon.ColorScheme
  else
    Result := nil;
end;

function TdxRibbonStatusBarDockControl.GetRibbon: TdxCustomRibbon;
begin
  if StatusBar.IsRibbonValid then
    Result := StatusBar.Ribbon
  else
    Result := nil;
end;

{ TdxStatusBarToolbarPanelStyle }

constructor TdxStatusBarToolbarPanelStyle.Create(AOwner: TdxStatusBarPanel);
begin
  inherited Create(AOwner);
  FDockControl := TdxRibbonStatusBarDockControl.Create(Self);
end;

destructor TdxStatusBarToolbarPanelStyle.Destroy;
begin
  Toolbar := nil;
  FreeAndNil(FDockControl);
  inherited Destroy;
end;

procedure TdxStatusBarToolbarPanelStyle.Assign(Source: TPersistent);

  function IsInheritanceUpdating: Boolean;
  begin
    Result := (Owner.Collection <> nil) and (csUpdating in StatusBarControl.ComponentState);
  end;

begin
  BeginUpdate;
  try
    inherited Assign(Source);
    if Source is TdxStatusBarToolbarPanelStyle then
    begin
      if (TdxStatusBarToolbarPanelStyle(Source).Toolbar <> nil) and IsInheritanceUpdating then
        ToolBar := FindBarManager.BarByComponentName(TdxStatusBarToolbarPanelStyle(Source).Toolbar.Name)
      else
        Toolbar := TdxStatusBarToolbarPanelStyle(Source).Toolbar;
    end;
  finally
    EndUpdate;
  end;
end;

function TdxStatusBarToolbarPanelStyle.CanDelete: Boolean;
begin
  Result := (Toolbar = nil) or not (csAncestor in Toolbar.ComponentState);
end;

function TdxStatusBarToolbarPanelStyle.CanSizing: Boolean;
begin
  Result := not GetPanelFixed;
end;

procedure TdxStatusBarToolbarPanelStyle.DefineProperties(Filer: TFiler);

  function NeedWriteToolbarName: Boolean;
  var
    AAncestorToolbar: TdxBar;
  begin
    if Filer.Ancestor <> nil then
    begin
      AAncestorToolbar := TdxStatusBarToolbarPanelStyle(Filer.Ancestor).ToolBar;
      Result := (AAncestorToolbar = nil) and (Toolbar <> nil) or
        (AAncestorToolbar <> nil) and (ToolBar = nil) or
        (AAncestorToolbar <> nil) and (AAncestorToolbar.Name <> Toolbar.Name);
    end
    else
      Result := ToolBar <> nil;
  end;

begin
  inherited DefineProperties(Filer);
  Filer.DefineProperty('ToolbarName', ReadToolbarName, WriteToolbarName, NeedWriteToolbarName);
end;

procedure TdxStatusBarToolbarPanelStyle.DrawContent(ACanvas: TcxCanvas;
  R: TRect; APainter: TdxStatusBarPainterClass);
begin
end;

function TdxStatusBarToolbarPanelStyle.GetMinWidth: Integer;
begin
  if Owner.Fixed and (Toolbar <> nil) and (Toolbar.Control is TdxRibbonStatusBarBarControl) then
    Result := TdxRibbonStatusBarBarControl(Toolbar.Control).GetSize(MaxInt).cx + 2
  else
    Result := 50;
end;

class function TdxStatusBarToolbarPanelStyle.GetVersion: Integer;
begin
  Result := 1;
end;

procedure TdxStatusBarToolbarPanelStyle.Loaded;
begin
  inherited Loaded;
  UpdateToolbarValue;
end;

procedure TdxStatusBarToolbarPanelStyle.PanelVisibleChanged;
begin
  DockControl.Visible := Owner.Visible;
end;

function TdxStatusBarToolbarPanelStyle.FindBarManager: TdxBarManager;
begin
  Result := nil;
  if (Owner.Collection <> nil) and (StatusBarControl.Owner is TCustomForm) then
    Result := GetBarManagerByForm(TCustomForm(StatusBarControl.Owner));
  if Result = nil then
    raise Exception.Create(cxGetResourceString(@dxSBAR_CANTFINDBARMANAGERFORSTATUSBAR));
end;

procedure TdxStatusBarToolbarPanelStyle.UpdateByRibbon(ARibbon: TdxCustomRibbon);
begin
  DockControl.UpdateDock;
  DockControl.RepaintBarControls;
end;

function TdxStatusBarToolbarPanelStyle.GetToolbar: TdxBar;
begin
  if (FLoadedToolbarName <> '') and (Owner.Collection <> nil) and
    IsAncestorComponentDifferencesDetection(StatusBarControl) then
      Result := FindBarManager.BarByComponentName(FLoadedToolbarName)
  else
    Result := FToolbar;
end;

procedure TdxStatusBarToolbarPanelStyle.ReadToolbarName(AReader: TReader);
begin
  FLoadedToolbarName := AReader.ReadString;
end;

procedure TdxStatusBarToolbarPanelStyle.SetToolbar(Value: TdxBar);
begin
  if FToolBar <> Value then
  begin
    if (FToolbar <> nil) and not (csDestroying in FToolbar.ComponentState) then
    begin
      FToolbar.RemoveFreeNotification(StatusBarControl);
      RibbonUndockToolBar(FToolbar);
    end;
    FToolbar := Value;
    if FToolbar <> nil then
    begin
      FToolbar.FreeNotification(StatusBarControl);
      DockControl.BarManager := FToolbar.BarManager;
      RibbonDockToolBar(FToolbar, DockControl);
    end
    else
      DockControl.BarManager := nil;
    if not (csDestroying in StatusBarControl.ComponentState) then
    begin
      TCustomForm(StatusBarControl.Owner).Realign;
      TdxRibbonStatusBar(StatusBarControl).PaintStyleChanged;
      StatusBarControl.Invalidate;
    end;
  end;
end;

procedure TdxStatusBarToolbarPanelStyle.UpdateToolbarValue;
begin
  if FLoadedToolbarName <> '' then
  begin
    ToolBar := FindBarManager.BarByComponentName(FLoadedToolbarName);
    FLoadedToolbarName := '';
  end;
end;

procedure TdxStatusBarToolbarPanelStyle.WriteToolbarName(AWriter: TWriter);
begin
  if ToolBar <> nil then
    AWriter.WriteString(ToolBar.Name)
  else
    AWriter.WriteString('');
end;

{ TdxRibbonStatusBarPainter }

class function TdxRibbonStatusBarPainter.BorderSizes(AStatusBar: TdxCustomStatusBar): TRect;
begin
  Result := Rect(1, 1, 1, 0); //!!!todo: check bottom

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -