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

📄 dxribbonstatusbar.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{********************************************************************}
{                                                                    }
{       Developer Express Visual Component Library                   }
{       ExpressStatusBar                                             }
{                                                                    }
{       Copyright (c) 1998-2008 Developer Express Inc.               }
{       ALL RIGHTS RESERVED                                          }
{                                                                    }
{   The entire contents of this file is protected by U.S. and        }
{   International Copyright Laws. Unauthorized reproduction,         }
{   reverse-engineering, and distribution of all or any portion of   }
{   the code contained in this file is strictly prohibited and may   }
{   result in severe civil and criminal penalties and will be        }
{   prosecuted to the maximum extent possible under the law.         }
{                                                                    }
{   RESTRICTIONS                                                     }
{                                                                    }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES            }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE     }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS    }
{   LICENSED TO DISTRIBUTE THE EXPRESSSTATUSBAR AND ALL              }
{   ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{                                                                    }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED       }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE         }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE        }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT   }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                       }
{                                                                    }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON        }
{   ADDITIONAL RESTRICTIONS.                                         }
{                                                                    }
{********************************************************************}

unit dxRibbonStatusBar;

{$I cxVer.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Graphics, ImgList, Forms, Types,
  ExtCtrls, dxThemeManager, cxClasses, cxGraphics, cxControls, cxLookAndFeels,
  dxBar, dxStatusBar, dxRibbonSkins, dxRibbon;

type
  TdxRibbonStatusBar = class;
  TdxStatusBarToolbarPanelStyle = class;

  { TdxRibbonStatusBarBarControlPainter }

  TdxRibbonStatusBarBarControlPainter = class(TdxBarSkinnedPainter)
  protected
    procedure DrawToolbarContentPart(ABarControl: TdxBarControl; ACanvas: TcxCanvas); override;
    procedure DrawToolbarNonContentPart(ABarControl: TdxBarControl; DC: HDC); override;
  public
    function BarBeginGroupSize: Integer; override;
    procedure BarDrawBeginGroup(ABarControl: TCustomdxBarControl; DC: HDC;
      ABeginGroupRect: TRect; AToolbarBrush: HBRUSH; AHorz: Boolean); override;
    function GetButtonBorderHeight: Integer; override;
    function GetEnabledTextColor(ABarItemControl: TdxBarItemControl;
      ASelected, AFlat: Boolean): TColor; override;
    procedure GetDisabledTextColors(ABarItemControl: TdxBarItemControl;
      ASelected, AFlat: Boolean; var AColor1, AColor2: TColor); override;
    function GetToolbarContentOffsets(ABar: TdxBar;
      ADockingStyle: TdxBarDockingStyle; AHasSizeGrip: Boolean): TRect; override;
    function MarkButtonOffset: Integer; virtual;
    function MarkSizeX(ABarControl: TdxBarControl): Integer; override;

    function GetColorScheme(ABarControl: TCustomdxBarControl): TdxCustomRibbonSkin;
  end;

  { TdxDefaultRibbonStatusBarBarControlPainter }

  TdxDefaultRibbonStatusBarBarControlPainter = class(TdxBarFlatPainter)
  public
    function GetButtonBorderHeight: Integer; override;
    function GetToolbarContentOffsets(ABar: TdxBar;
      ADockingStyle: TdxBarDockingStyle; AHasSizeGrip: Boolean): TRect; override;
    function MarkButtonOffset: Integer; virtual;
    function MarkSizeX(ABarControl: TdxBarControl): Integer; override;
  end;

  { TdxRibbonStatusBarBarControlViewInfo }

  TdxRibbonStatusBarBarControlViewInfo = class(TdxRibbonQuickAccessBarControlViewInfo)
  protected
    function CanShowButtonGroups: Boolean; override;
    function CanShowSeparators: Boolean; override;
  end;

  { TdxRibbonStatusBarBarControl }

  TdxRibbonStatusBarBarControl = class(TdxRibbonQuickAccessBarControl)
  private
    procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
    function GetStatusBar: TdxRibbonStatusBar;
  protected
    function CanShowPopupMenuOnMouseClick(AMousePressed: Boolean): Boolean; override;
    procedure DoPaintItem(AControl: TdxBarItemControl; ACanvas: TcxCanvas; const AItemRect: TRect); override;
    function GetDefaultItemGlyph: TBitmap; override;
    function GetItemControlDefaultViewLevel(
      AItemControl: TdxBarItemControl): TdxBarItemViewLevel; override;
    function GetMinHeight(AStyle: TdxBarDockingStyle): Integer; override;
    function GetRibbon: TdxCustomRibbon; override;
    function GetViewInfoClass: TCustomdxBarControlViewInfoClass; override;
    procedure InitCustomizationPopup(AItemLinks: TdxBarItemLinks); override;
    function IsValid: Boolean;
    function MarkExists: Boolean; override;
    procedure UpdateDoubleBuffered; override;

    property StatusBar: TdxRibbonStatusBar read GetStatusBar;
  end;

  { TdxRibbonStatusBarBarControlDesignHelper }

  TdxRibbonStatusBarBarControlDesignHelper = class(TCustomdxBarControlDesignHelper)
  public
    class function GetForbiddenActions: TdxBarCustomizationActions; override;
  end;

  { TdxRibbonStatusBarDockControl }

  TdxRibbonStatusBarDockControl = class(TdxCustomRibbonDockControl)
  private
    FStatusBar: TdxRibbonStatusBar;
    FPainter: TdxBarPainter;
    FPanel: TdxStatusBarPanel;
    function GetBarControl: TdxRibbonStatusBarBarControl;
    function GetColorScheme: TdxCustomRibbonSkin;
    function GetRibbon: TdxCustomRibbon;
  protected
    procedure CalcLayout; override;
    procedure UpdateDoubleBuffered; override;
    procedure FillBackground(DC: HDC; const ADestR, ASourceR: TRect; ABrush: HBRUSH; AColor: TColor); override;
    function GetDockedBarControlClass: TdxBarControlClass; override;
    function GetOwner: TPersistent; override;
    function GetPainter: TdxBarPainter; override;
    procedure ShowCustomizePopup; override;
    procedure VisibleChanged; override;

    property BarControl: TdxRibbonStatusBarBarControl read GetBarControl;
  public
    constructor Create(AOwner: TdxStatusBarToolbarPanelStyle); reintroduce; virtual;
    destructor Destroy; override;

    property ColorScheme: TdxCustomRibbonSkin read GetColorScheme;
    property Panel: TdxStatusBarPanel read FPanel;
    property Ribbon: TdxCustomRibbon read GetRibbon;
    property StatusBar: TdxRibbonStatusBar read FStatusBar;
  end;

  { TdxStatusBarToolbarPanelStyle }

  TdxStatusBarToolbarPanelStyle = class(TdxStatusBarPanelStyle)
  private
    FDockControl: TdxRibbonStatusBarDockControl;
    FLoadedToolbarName: string;
    FToolbar: TdxBar;
    function GetToolbar: TdxBar;
    procedure ReadToolbarName(AReader: TReader);
    procedure SetToolbar(Value: TdxBar);
    procedure UpdateToolbarValue;
    procedure WriteToolbarName(AWriter: TWriter);
  protected
    function CanDelete: Boolean; override;
    function CanSizing: Boolean; override;
    procedure DefineProperties(Filer: TFiler); override;
    procedure DrawContent(ACanvas: TcxCanvas; R: TRect; APainter: TdxStatusBarPainterClass); override;
    function GetMinWidth: Integer; override;
    class function GetVersion: Integer; override;
    procedure Loaded; override;
    procedure PanelVisibleChanged; override;

    function FindBarManager: TdxBarManager;
    procedure UpdateByRibbon(ARibbon: TdxCustomRibbon); virtual;
  public
    constructor Create(AOwner: TdxStatusBarPanel); override;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;

    property DockControl: TdxRibbonStatusBarDockControl read FDockControl;
  published
    property Toolbar: TdxBar read GetToolbar write SetToolbar stored False;
  end;

  { TdxRibbonStatusBarPainter }

  TdxRibbonStatusBarPainter = class(TdxStatusBarPainter)
  public
    // calc
    class function BorderSizes(AStatusBar: TdxCustomStatusBar): TRect; override;
    class function GripAreaSize: TSize; override;
    class function SeparatorSize: Integer; override;
    // draw
    class procedure DrawBorder(AStatusBar: TdxCustomStatusBar; ACanvas: TcxCanvas;
      var R: TRect); override;
    class procedure DrawPanelBorder(AStatusBar: TdxCustomStatusBar; ABevel: TdxStatusBarPanelBevel;
      ACanvas: TcxCanvas; var R: TRect); override;
    class procedure DrawPanelSeparator(AStatusBar: TdxCustomStatusBar; ACanvas: TcxCanvas;
      const R: TRect); override;
    class procedure DrawSizeGrip(AStatusBar: TdxCustomStatusBar; ACanvas: TcxCanvas;
      R: TRect; AOverlapped: Boolean); override;
    class function GetPanelBevel(APanel: TdxStatusBarPanel): TdxStatusBarPanelBevel; override;
    class function TopBorderSize: Integer; override;
  end;

  { TdxRibbonStatusBarViewInfo }

  TdxRibbonStatusBarViewInfo = class(TdxStatusBarViewInfo)
  private
    function GetStatusBar: TdxRibbonStatusBar;
  protected
    function CanUpdateDockControls: Boolean;
    procedure UpdateDockControls(const ABounds: TRect);
  public
    procedure Calculate(const ABounds: TRect); override;
    property StatusBar: TdxRibbonStatusBar read GetStatusBar;
  end;

  { TdxRibbonStatusBar }

  TdxRibbonStatusBar = class(
    TdxCustomStatusBar,
    IdxRibbonFormStatusBarDraw)
  private
    FColor: TColor;
    FCreating: Boolean;
    FDefaultBarPainter: TdxBarPainter;
    FRibbon: TdxCustomRibbon;
    procedure CheckAssignRibbon;
    procedure CheckRemoveToolbar(ABar: TdxBar);
    procedure SetColor(const Value: TColor);
    procedure SetRibbon(const Value: TdxCustomRibbon);
    procedure UpdateToolbars;
    procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
  protected
    FNeedSizeGripSeparator: Boolean;
    FRisedSideStates: array[Boolean] of Boolean;
    //IdxRibbonFormStatusBarDraw
    function IdxRibbonFormStatusBarDraw.GetActive = FormDrawGetActive;
    function IdxRibbonFormStatusBarDraw.GetHeight = FormDrawGetHeight;
    function IdxRibbonFormStatusBarDraw.GetIsRaised = FormDrawGetIsRaised;
    function FormDrawGetActive(AForm: TCustomForm): Boolean;
    function FormDrawGetHeight: Integer;
    function FormDrawGetIsRaised(ALeft: Boolean): Boolean;

    procedure AdjustTextColor(var AColor: TColor; Active: Boolean); override;
    procedure Calculate; override;
    procedure CalculateFormSidesAndSizeGrip;
    procedure CheckMinHeight;
    procedure ColorSchemeChanged(Sender: TObject; const AEventArgs); virtual;
    function CreateViewInfo: TdxStatusBarViewInfo; override;
    function GetMinHeight: Integer; virtual;
    function GetPainterClass: TdxStatusBarPainterClass; override;
    function GetPaintStyle: TdxStatusBarPaintStyle; override;
    function IsRibbonValid: Boolean;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
    procedure PaintStyleChanged; override;
    procedure SetParent(AParent: TWinControl); override;
    procedure VisibleChanged; override;
    procedure UpdatePanels; override;

    property DefaultBarPainter: TdxBarPainter read FDefaultBarPainter;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function CanAcceptPanelStyle(Value: TdxStatusBarPanelStyleClass): Boolean; override;
    procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  published
    property Images;
    property Panels;
    property Ribbon: TdxCustomRibbon read FRibbon write SetRibbon;
    property SizeGrip;
    property LookAndFeel;
    property OnHint;
    property BorderWidth;
    { TcxControl properties}
    property Anchors;
    property BiDiMode;
    property Color: TColor read FColor write SetColor default clDefault;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property Font;
    property Constraints;
    property ShowHint;
    property ParentBiDiMode;
    property ParentFont default False;
    property ParentShowHint;
    property PopupMenu;
    property Visible;
{$IFDEF DELPHI5}
    property OnContextPopup;
{$ENDIF}
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnResize;
    property OnStartDock;
    property OnStartDrag;
  end;

implementation

uses
  dxThemeConsts, dxUxTheme, dxOffice11, ActnList, StdActns, cxGeometry, Math,
  dxBarStrs, cxDWMApi, dxBarSkinConsts;

resourcestring
  cxSToolbarPanelStyle = 'Toolbar Panel';

const
  GRIP_AREA_SIZE = 19;
  GRIP_SIZE = 12;

{ TdxRibbonStatusBarBarControlPainter }

function TdxRibbonStatusBarBarControlPainter.BarBeginGroupSize: Integer;
begin
  Result := 2;
end;

procedure TdxRibbonStatusBarBarControlPainter.BarDrawBeginGroup(
  ABarControl: TCustomdxBarControl; DC: HDC; ABeginGroupRect: TRect;
  AToolbarBrush: HBRUSH; AHorz: Boolean);
var
  AColorScheme: TdxCustomRibbonSkin;
begin
  AColorScheme := TdxRibbonStatusBarDockControl(TdxBarControl(ABarControl).DockControl).ColorScheme;
  if AColorScheme <> nil then
  begin
    Dec(ABeginGroupRect.Top, GetToolbarContentOffsets(nil, dsTop, False).Top);
    AColorScheme.DrawStatusBarToolbarSeparator(DC, ABeginGroupRect);
  end;
end;

procedure TdxRibbonStatusBarBarControlPainter.DrawToolbarContentPart(
  ABarControl: TdxBarControl; ACanvas: TcxCanvas);
var
  AColorScheme: TdxCustomRibbonSkin;
  ADockControl: TdxRibbonStatusBarDockControl;
  R, AOffs: TRect;
begin
  ADockControl := TdxRibbonStatusBarDockControl(ABarControl.DockControl);
  R := ABarControl.ClientRect;
  AOffs := GetToolbarContentOffsets(ABarControl.Bar, dsTop, False);
  Dec(R.Top, AOffs.Top);
  R.Bottom := R.Top + ADockControl.StatusBar.Height;
  AColorScheme := ADockControl.ColorScheme;
  if AColorScheme <> nil then
    AColorScheme.DrawStatusBarPanel(ACanvas.Handle,
      cxRectOffset(R, ADockControl.Left, ADockControl.Top), R,
      ADockControl.Panel.Bevel <> dxpbRaised)
end;

procedure TdxRibbonStatusBarBarControlPainter.DrawToolbarNonContentPart(
  ABarControl: TdxBarControl; DC: HDC);
var
  AColorScheme: TdxCustomRibbonSkin;
  ADockControl: TdxRibbonStatusBarDockControl;
  ASaveIndex: Integer;
  R: TRect;
begin
  ASaveIndex := SaveDC(DC);
  with ABarControl.ClientBounds do
    ExcludeClipRect(DC, Left, Top, Right, Bottom);
  ADockControl := TdxRibbonStatusBarDockControl(ABarControl.DockControl);
  R := cxRectBounds(0, 0, ABarControl.Width, ADockControl.StatusBar.Height);
  AColorScheme := ADockControl.ColorScheme;
  if AColorScheme <> nil then
    AColorScheme.DrawStatusBarPanel(DC,
      cxRectOffset(R, ADockControl.Left, ADockControl.Top), R,
      ADockControl.Panel.Bevel <> dxpbRaised);
  RestoreDC(DC, ASaveIndex);
end;

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

procedure TdxRibbonStatusBarBarControlPainter.GetDisabledTextColors(
  ABarItemControl: TdxBarItemControl; ASelected, AFlat: Boolean; var AColor1,
  AColor2: TColor);
var
  ADockControl: TdxRibbonStatusBarDockControl;
begin
  ADockControl := TdxRibbonStatusBarDockControl(TdxBarControl(ABarItemControl.Parent).DockControl);
  if (ADockControl <> nil) and (ADockControl.ColorScheme <> nil) then
  begin
    AColor1 := ADockControl.ColorScheme.GetPartColor(rspStatusBarText, DXBAR_DISABLED);
    AColor2 := AColor1;
  end
  else
    inherited;
end;

function TdxRibbonStatusBarBarControlPainter.GetEnabledTextColor(
  ABarItemControl: TdxBarItemControl; ASelected, AFlat: Boolean): TColor;
const
  States: array[Boolean] of Integer = (DXBAR_NORMAL, DXBAR_HOT);
var
  ADockControl: TdxRibbonStatusBarDockControl;
begin
  ADockControl := TdxRibbonStatusBarDockControl(TdxBarControl(ABarItemControl.Parent).DockControl);
  if (ADockControl <> nil) and (ADockControl.ColorScheme <> nil) then
    Result := ADockControl.ColorScheme.GetPartColor(rspStatusBarText, States[ASelected])
  else
    Result := inherited GetEnabledTextColor(ABarItemControl, ASelected, AFlat);
end;

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

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

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

function TdxRibbonStatusBarBarControlPainter.GetColorScheme(
  ABarControl: TCustomdxBarControl): TdxCustomRibbonSkin;
var
  ADockControl: TdxRibbonStatusBarDockControl;
begin
  ADockControl := TdxRibbonStatusBarDockControl(TdxBarControl(ABarControl).DockControl);

⌨️ 快捷键说明

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