📄 dxribbon.pas
字号:
function GetScrollWidth: Integer;
function GetTabViewInfo(Index: Integer): TdxRibbonTabViewInfo;
procedure RemoveScrolling;
procedure SetScrollPosition(Value: Integer);
protected
procedure CalculateComplexTabLayout; virtual;
procedure CalculateSimpleTabLayout; virtual;
procedure CalculateScrollingTabLayout; virtual;
procedure BalancedReduce(ATotalDelta: Integer);
procedure DrawScrollButton(ACanvas: TcxCanvas; const ABounds: TRect;
AButton: TdxRibbonScrollButton; APressed, AHot: Boolean); virtual;
procedure SimpleReduce(ATotalDelta: Integer);
property Owner: TdxRibbonViewInfo read FOwner;
public
constructor Create(AOwner: TdxRibbonViewInfo);
destructor Destroy; override;
procedure Calculate(const ABounds: TRect); virtual;
procedure Clear; override;
function GetHitInfo(var AHitInfo: TdxRibbonHitInfo; X, Y: Integer): Boolean;
function GetRealBounds: TRect;
procedure Invalidate;
procedure InvalidateScrollButtons;
procedure MakeTabVisible(ATab: TdxRibbonTab);
procedure Paint(ACanvas: TcxCanvas);
procedure UpdateDockControls;
procedure UpdateTabList;
property Bounds: TRect read FBounds;
property Items[Index: Integer]: TdxRibbonTabViewInfo read GetTabViewInfo; default;
property NeedShowHint: Boolean read FNeedShowHint;
property Painter: TdxRibbonPainter read GetPainter;
property ScrollButtonBounds[Index: TdxRibbonScrollButton]: TRect read GetScrollButtonBounds;
property ScrollButtonHot[Index: TdxRibbonScrollButton]: Boolean read GetScrollButtonHot;
property ScrollButtonPressed[Index: TdxRibbonScrollButton]: Boolean read GetScrollButtonPressed;
property ScrollButtons: TdxRibbonScrollButtons read FScrollButtons;
property ScrollPosition: Integer read FScrollPosition write SetScrollPosition;
end;
{ TdxRibbonViewInfo }
TdxRibbonViewInfo = class
private
FApplicationButtonBounds: TRect;
FApplicationButtonFadingHelper: TdxRibbonApplicationButtonFadingHelper;
FApplicationButtonImageBounds: TRect;
FBounds: TRect;
FDrawEmptyRibbon: Boolean;
FFont: TFont;
FFormCaptionBounds: TRect;
FHelpButtonBounds: TRect;
FHelpButtonFadingHelper: TdxRibbonHelpButtonFadingHelper;
FGroupsDockControlSiteBounds: TRect;
FMDIButtonBounds: array[TdxBarMDIButton] of TRect;
FMDIButtonFadingHelpers: array[TdxBarMDIButton] of TdxRibbonMDIButtonFadingHelper;
FQATBarControlSize: TSize;
FQuickAccessToolbarBounds: TRect;
FRibbon: TdxCustomRibbon;
FSupportNonClientDrawing: Boolean;
FTabGroupsDockControlBounds: TRect;
FTabsViewInfo: TdxRibbonTabsViewInfo;
FUseGlass: Boolean;
procedure CheckHelpButtonHitTest(var AHitTest: TdxRibbonHitTest; X: Integer; Y: Integer);
procedure CheckMDIButtonsHitTest(var AHitTest: TdxRibbonHitTest; X: Integer; Y: Integer);
function GetButtonState(AButton: TdxRibbonHitTest): TdxBorderIconState;
function GetCanvas: TcxCanvas;
function GetGroupsDockControlSiteViewInfo: TdxRibbonGroupsDockControlSiteViewInfo;
function GetIsFormCaptionActive: Boolean;
function GetMDIButtonState(AButton: TdxBarMDIButton): TdxBorderIconState;
function GetPainter: TdxRibbonPainter;
function GetQATDockControl: TdxRibbonQuickAccessDockControl;
function GetScrollButtonWidth: Integer;
function GetTabsVerticalOffset: Integer;
procedure UpdateGroupsDockControlSite;
protected
procedure CalculateApplicationButton; virtual;
procedure CalculateQuickAccessToolbar; virtual;
procedure CalculateRibbonFormCaption; virtual;
procedure CalculateTabGroups; virtual;
procedure CalculateTabs; virtual;
procedure CheckButtonsHitTest(var AHitTest: TdxRibbonHitTest; X: Integer; Y: Integer);
function GetRibbonHeight: Integer; virtual;
function GetApplicationButtonBounds: TRect; virtual;
function GetApplicationButtonGlyphSize: TSize; virtual;
function GetApplicationButtonImageBounds: TRect; virtual;
function GetApplicationButtonOffset: TRect; virtual;
function GetApplicationButtonRegion: HRGN; virtual;
function GetApplicationButtonSize: TSize; virtual;
function GetApplicationButtonState: TdxApplicationButtonState; virtual;
function GetNonClientAreaHeight: Integer; virtual;
//form caption
function GetCaption: string; virtual;
function GetDocumentName: string; virtual;
function GetRibbonFormCaptionClientBounds: TRect; virtual;
function GetRibbonFormCaptionTextBounds: TRect; virtual;
//QuickAccessToolbar
function GetQATAvailWidth: Integer;
function GetQATBarControlSize: TSize; virtual;
function GetQATBounds: TRect; virtual;
function GetQATHeight: Integer; virtual;
function GetQATLeft: Integer; virtual;
function GetQATOverrideWidth(AIgnoreHidden: Boolean = False): Integer;
function GetQATTop: Integer; virtual;
function GetQATWidth: Integer; virtual;
function GetQATDockControlBounds: TRect; virtual;
function GetQATDockControlOffset(AIgnoreHidden: Boolean = False): TRect; virtual;
//TabGroups
function GetGroupsDockControlSiteBounds: TRect; virtual;
function GetTabGroupsDockControlBounds: TRect; virtual;
function GetTabGroupsDockControlOffset: TRect; virtual;
function GetTabGroupsHeight(AIgnoreHidden: Boolean = False): Integer; virtual;
//Tabs
function GetTabsBounds: TRect; virtual;
function GetTabsHeight: Integer; virtual;
function GetTabViewInfoClass: TdxRibbonTabViewInfoClass; virtual;
//MDI support
procedure CalculateMDIButtons;
procedure DrawMDIButtons(ACanvas: TcxCanvas);
function HasMDIButtons: Boolean;
procedure InvalidateMDIButtons;
function IsMDIButtonEnabled(AButton: TdxBarMDIButton; AState: Integer): Boolean;
procedure CalculateHelpButton;
function CanShowBarControls(AIgnoreHidden: Boolean = False): Boolean;
procedure DrawHelpButton(ACanvas: TcxCanvas);
procedure DrawRibbonBackground(ACanvas: TcxCanvas);
function HasHelpButton: Boolean;
procedure InvalidateHelpButton;
function IsNeedDrawBottomLine: Boolean;
function IsNeedHideControl: Boolean;
function IsQATAtBottom: Boolean;
procedure SetSize;
procedure UpdateQATDockControl;
function GetPainterClass: TdxRibbonPainterClass; virtual;
property Canvas: TcxCanvas read GetCanvas;
property DrawEmptyRibbon: Boolean read FDrawEmptyRibbon;
property QATDockControl: TdxRibbonQuickAccessDockControl read GetQATDockControl;
property ScrollButtonWidth: Integer read GetScrollButtonWidth;
property TabsHeight: Integer read GetTabsHeight;
property UseGlass: Boolean read FUseGlass;
public
constructor Create(ARibbon: TdxCustomRibbon); virtual;
destructor Destroy; override;
procedure Calculate(const ABounds: TRect); virtual;
function GetDocumentNameTextColor(AIsActive: Boolean): TColor;
function GetFormCaptionFont(AIsActive: Boolean): TFont;
function GetFormCaptionText: TCaption;
function GetHitInfo(X, Y: Integer): TdxRibbonHitInfo;
function GetTabAtPos(X, Y: Integer): TdxRibbonTab;
function IsApplicationButtonVisible(AIgnoreHidden: Boolean = False): Boolean;
function IsQATAtNonClientArea(AIgnoreHidden: Boolean = False): Boolean;
function IsQATOnGlass: Boolean;
function IsQATVisible(AIgnoreHidden: Boolean = False): Boolean;
function IsTabsVisible(AIgnoreHidden: Boolean = False): Boolean;
function IsTabGroupsVisible(AIgnoreHidden: Boolean = False): Boolean;
procedure Paint(ACanvas: TcxCanvas);
property Bounds: TRect read FBounds;
property FormCaptionBounds: TRect read FFormCaptionBounds;
property ApplicationButtonBounds: TRect read FApplicationButtonBounds;
property ApplicationButtonFadingHelper: TdxRibbonApplicationButtonFadingHelper read FApplicationButtonFadingHelper;
property ApplicationButtonImageBounds: TRect read FApplicationButtonImageBounds;
property ApplicationButtonState: TdxApplicationButtonState read GetApplicationButtonState;
property HelpButtonBounds: TRect read FHelpButtonBounds;
property HelpButtonFadingHelper: TdxRibbonHelpButtonFadingHelper read FHelpButtonFadingHelper;
property IsFormCaptionActive: Boolean read GetIsFormCaptionActive;
property Painter: TdxRibbonPainter read GetPainter;
property QuickAccessToolbarBounds: TRect read FQuickAccessToolbarBounds;
property Ribbon: TdxCustomRibbon read FRibbon;
property SupportNonClientDrawing: Boolean read FSupportNonClientDrawing;
property GroupsDockControlSiteBounds: TRect read FGroupsDockControlSiteBounds;
property TabGroupsDockControlBounds: TRect read FTabGroupsDockControlBounds;
property GroupsDockControlSiteViewInfo: TdxRibbonGroupsDockControlSiteViewInfo read GetGroupsDockControlSiteViewInfo;
property TabsViewInfo: TdxRibbonTabsViewInfo read FTabsViewInfo;
end;
{ TdxRibbonBarPainter }
TdxRibbonBarPainter = class(TdxBarSkinnedPainter)
private
FCollapsedGroupElementSizeDenominator: Integer;
FCollapsedGroupElementSizeNumerator: Integer;
FDrawParams: TdxBarButtonLikeControlDrawParams;
FRibbon: TdxCustomRibbon;
function GetCollapsedGroupGlyph(ABarControl: TdxBarControl): TBitmap;
function GetCollapsedGroupGlyphBackgroundSize(ABarControl: TdxBarControl): TSize;
function GetCollapsedGroupGlyphSize(ABarControl: TdxBarControl): TSize;
function GetGroupState(ABarControl: TdxBarControl): Integer;
function InternalGetGroupCaptionHeight(ATextHeight: Integer): Integer;
protected
procedure DrawCollapsedToolbarBackgroundPart(ABarControl: TdxRibbonGroupBarControl;
ACanvas: TcxCanvas; AGroupState: Integer);
procedure DrawCollapsedToolbarContentPart(ABarControl: TdxRibbonGroupBarControl;
ACanvas: TcxCanvas; AGroupState: Integer);
procedure DrawToolbarContentPart(ABarControl: TdxBarControl; ACanvas: TcxCanvas); override;
procedure DrawToolbarNonContentPart(ABarControl: TdxBarControl; DC: HDC); override;
function GetCollapsedGroupWidth(ABarControl: TdxRibbonGroupBarControl): Integer; virtual;
function GetGroupCaptionHeight(ACaptionFont: TFont): Integer; virtual;
function GetCollapsedGroupCaptionRect(const AGroupRect: TRect): TRect; virtual;
function GetGroupMinWidth(ABarControl: TdxRibbonGroupBarControl): Integer; virtual;
property DrawParams: TdxBarButtonLikeControlDrawParams read FDrawParams;
public
constructor Create(AData: Integer); override;
destructor Destroy; override;
procedure BarDrawBackground(ABarControl: TdxBarControl; ADC: HDC;
const ADestRect: TRect; const ASourceRect: TRect; ABrush: HBRUSH;
AColor: TColor); override;
function BarMarkRect(ABarControl: TdxBarControl): TRect; override;
function BarMarkItemRect(ABarControl: TdxBarControl): TRect; override;
function GetGroupRowHeight(AIconSize: Integer; AGroupFont: TFont): Integer;
function GetToolbarContentOffsets(ABar: TdxBar;
ADockingStyle: TdxBarDockingStyle; AHasSizeGrip: Boolean): TRect; override;
function SubMenuControlBeginGroupSize: Integer; override;
function SubMenuGetSeparatorSize: Integer; override;
property Ribbon: TdxCustomRibbon read FRibbon;
end;
{ TdxCustomRibbonDockControl }
TdxCustomRibbonDockControl = class(TdxBarDockControl)
private
procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED;
procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;
protected
function AllowUndockWhenLoadFromIni: Boolean; override;
procedure FillBackground(DC: HDC; const ADestR, ASourceR: TRect; ABrush: HBRUSH; AColor: TColor); override;
function IsDrawDesignBorder: Boolean; override;
function IsTransparent: Boolean; override;
function IsNeedRedrawBarControlsOnPaint: Boolean; virtual;
procedure Paint; override;
procedure VisibleChanged; virtual;
public
procedure UpdateColorScheme; virtual;
end;
{ IdxRibbonGroupViewInfo }
TdxRibbonGroupOffsetsInfo = record
ButtonGroupOffset: Integer;
ContentLeftOffset: Integer;
ContentRightOffset: Integer;
end;
IdxRibbonGroupViewInfo = interface
['{A2CAD367-1836-4FA7-8730-8E7531463C8C}']
procedure AddSeparator(const Value: TdxBarItemSeparatorInfo);
procedure DeleteSeparators;
function GetContentSize: TSize;
function GetItemControlCount: Integer;
function GetItemControlViewInfo(AIndex: Integer): IdxBarItemControlViewInfo;
function GetMinContentWidth: Integer;
function GetOffsetsInfo: TdxRibbonGroupOffsetsInfo;
function GetSeparatorCount: Integer;
function GetSeparatorInfo(AIndex: Integer): TdxBarItemSeparatorInfo;
procedure SetContentSize(const Value: TSize);
procedure SetSeparatorInfo(AIndex: Integer;
const Value: TdxBarItemSeparatorInfo);
end;
{ IdxRibbonGroupLayoutCalculator }
IdxRibbonGroupLayoutCalculator = interface
['{894AC146-F69A-4ED2-9293-AA54AAAE1189}']
procedure CalcInit(AGroupViewInfo: IdxRibbonGroupViewInfo);
procedure CalcLayout(AGroupViewInfo: IdxRibbonGroupViewInfo);
function CollapseMultiColumnItemControls(
AGroupViewInfo: IdxRibbonGroupViewInfo): Boolean;
function DecreaseMultiColumnItemControlsColumnCount(
AGroupViewInfo: IdxRibbonGroupViewInfo): Boolean;
function Reduce(AGroupViewInfo: IdxRibbonGroupViewInfo;
AUpToViewLevel: TdxBarItemRealViewLevel): Boolean;
procedure ReduceInit(AGroupViewInfo: IdxRibbonGroupViewInfo);
end;
{ TdxRibbonGroupsDockControl }
TdxRibbonGroupsDockControl = class(TdxCustomRibbonDockControl)
private
FTab: TdxRibbonTab;
procedure DesignMenuClick(Sender: TObject);
function GetRibbon: TdxCustomRibbon;
procedure InitDesignMenu(AItemLinks: TdxBarItemLinks);
procedure ShowDesignMenu;
protected
FViewInfo: TdxRibbonGroupsDockControlViewInfo;
procedure AlignControls(AControl: TControl; var Rect: TRect); override;
procedure CalcRowToolbarPositions(ARowIndex: Integer; AClientSize: Integer); override;
procedure DblClick; override;
procedure FillBackground(DC: HDC; const ADestR, ASourceR: TRect; ABrush: HBRUSH; AColor: TColor); override;
function GetAccessibilityHelperClass: TdxBarAccessibilityHelperClass; override;
function GetDockedBarControlClass: TdxBarControlClass; override;
function GetPainter: TdxBarPainter; override;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -