📄 dxribbonskins.pas
字号:
procedure DrawDropDownGalleryVerticalSizeGrip(DC: HDC; const R: TRect);
procedure LoadFormSkin;
procedure LoadRibbonSkin;
procedure LoadCommonRibbonSkinBitmap(out ABitmap: GpBitmap); virtual;
procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); virtual; abstract;
procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); virtual; abstract;
procedure LoadCommonControlSkinFromBitmap(ABitmap: GpBitmap); virtual;
procedure LoadCustomControlSkinFromBitmap(ABitmap: GpBitmap); virtual;
procedure LoadFormSkinFromBitmap(ABitmap: GpBitmap); virtual;
procedure LoadApplicationButton(ABitmap: GpBitmap); virtual;
procedure LoadBorderIcons(ABitmap: GpBitmap); virtual;
procedure LoadCustomButtonParts(ABitmap: GpBitmap); virtual;
procedure LoadCustomGroup(ABitmap: GpBitmap); virtual;
procedure LoadCustomMenuParts(ABitmap: GpBitmap); virtual;
procedure LoadCustomProgressParts(ABitmap: GpBitmap); virtual;
procedure LoadCustomScrollArrow(ABitmap: GpBitmap); virtual;
procedure LoadCustomScreenTip(ABitmap: GpBitmap); virtual;
procedure LoadGallery(ABitmap: GpBitmap); virtual;
procedure LoadTab(ABitmap: GpBitmap);
procedure LoadScrollButtons(ABitmap: GpBitmap);
procedure LoadCollapsedToolbar(ABitmap: GpBitmap);
procedure LoadQAT(ABitmap: GpBitmap);
procedure LoadStatusBar(ABitmap: GpBitmap);
property LowColors: Boolean read FLowColors write FLowColors;
public
constructor Create;
procedure LoadElementParts(ABitmap: GpBitmap;
var AParts; const R: TRect; AID: Integer; const AFixedSize: TRect;
const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = [];
AIsTopDown: Boolean = True; AInterpolationMode: Integer = InterpolationModeDefault);
procedure LoadBitmapFromStream(const AResName: string; out ABitmap: GpBitmap);
procedure LoadElementPartsFromFile(const AFileName: string;
var AParts; AID: Integer; const AFixedSize: TRect;
const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = []);
procedure DrawApplicationButton(DC: HDC; const R: TRect; AState: TdxApplicationButtonState); virtual;
procedure DrawApplicationMenuButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawApplicationMenuBorder(DC: HDC; const R: TRect); virtual;
procedure DrawApplicationMenuContentHeader(DC: HDC; const R: TRect); virtual;
procedure DrawApplicationMenuContentFooter(DC: HDC; const R: TRect); virtual;
procedure DrawArrowDown(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMenuArrowDown(DC: HDC; const R: TRect); virtual;
procedure DrawMenuArrowRight(DC: HDC; const R: TRect); virtual;
procedure DrawButtonGroup(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawButtonGroupBorderLeft(DC: HDC; const R: TRect); virtual;
procedure DrawButtonGroupBorderMiddle(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawButtonGroupBorderRight(DC: HDC; const R: TRect); virtual;
procedure DrawButtonGroupSplitButtonSeparator(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawCollapsedToolbarBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawCollapsedToolbarGlyphBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawDropDownBorder(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryBackground(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryBottomSizeGrip(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryBottomSizingBand(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryBottomVerticalSizeGrip(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryTopSizeGrip(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryTopSizingBand(DC: HDC; const R: TRect); virtual;
procedure DrawDropDownGalleryTopVerticalSizeGrip(DC: HDC; const R: TRect); virtual;
procedure DrawEditArrowButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawEditButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawEditEllipsisButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawEditSpinDownButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawEditSpinUpButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawFormBorders(DC: HDC; const ABordersWidth: TRect;
ACaptionHeight: Integer; const AData: TdxRibbonFormData); virtual;
procedure DrawFormBorderIcon(DC: HDC; const R: TRect; AIcon: TdxBorderDrawIcon; AState: TdxBorderIconState); virtual;
procedure DrawFormCaption(DC: HDC; const R: TRect; const AData: TdxRibbonFormData); virtual;
procedure DrawFormStatusBarPart(DC: HDC; const R: TRect; AIsLeft, AIsActive, AIsRaised, AIsRectangular: Boolean); virtual;
procedure DrawHelpButton(DC: HDC; const R: TRect; AState: TdxBorderIconState); virtual;
procedure DrawHelpButtonGlyph(DC: HDC; const R: TRect; AGlyph: TBitmap); virtual;
procedure DrawGalleryFilterBandBackground(DC: HDC; const R: TRect); virtual;
procedure DrawGalleryGroupHeaderBackground(DC: HDC; const R: TRect); virtual;
procedure DrawGroupScrollButton(DC: HDC; const R: TRect; ALeft: Boolean; AState: Integer); virtual;
procedure DrawInRibbonGalleryBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawInRibbonGalleryScrollBarButton(DC: HDC; const R: TRect;
AButtonKind: TdxInRibbonGalleryScrollBarButtonKind; AState: Integer); virtual;
procedure DrawLargeButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawLargeButtonGlyphBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawLargeButtonDropButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawLaunchButtonBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawLaunchButtonDefaultGlyph(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMDIButton(DC: HDC; const R: TRect; AButton: TdxBarMDIButton; AState: TdxBorderIconState); virtual;
procedure DrawMDIButtonGlyph(DC: HDC; const R: TRect; AButton: TdxBarMDIButton; AState: TdxBorderIconState); virtual;
procedure DrawMenuCheck(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMenuCheckMark(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMenuContent(DC: HDC; const R: TRect); virtual;
procedure DrawMenuDetachCaption(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMenuGlyph(DC: HDC; const R: TRect); virtual;
procedure DrawMenuMark(DC: HDC; const R: TRect); virtual;
procedure DrawMenuSeparatorHorz(DC: HDC; const R: TRect); virtual;
procedure DrawMenuSeparatorVert(DC: HDC; const R: TRect); virtual;
procedure DrawMenuScrollArea(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawProgressSolidBand(DC: HDC; const R: TRect); virtual;
procedure DrawProgressSubstrate(DC: HDC; const R: TRect); virtual;
procedure DrawProgressDiscreteBand(DC: HDC; const R: TRect); virtual;
procedure DrawRibbonBackground(DC: HDC; const R: TRect); virtual;
procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); virtual;
procedure DrawRibbonClientTopArea(DC: HDC; const R: TRect); virtual;
procedure DrawSmallButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawSmallButtonGlyphBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawSmallButtonDropButton(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawScrollArrow(DC: HDC; const R: TRect); virtual;
procedure DrawScreenTip(DC: HDC; const R: TRect); virtual;
procedure DrawTab(DC: HDC; const R: TRect; AState: TdxRibbonTabState); virtual;
procedure DrawTabGroupBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawTabGroupHeaderBackground(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMarkArrow(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawMarkTruncated(DC: HDC; const R: TRect; AState: Integer); virtual;
procedure DrawTabGroupsArea(DC: HDC; const R: TRect); virtual;
procedure DrawTabScrollButton(DC: HDC; const R: TRect; ALeft: Boolean; AState: Integer); virtual;
procedure DrawTabSeparator(DC: HDC; const R: TRect; Alpha: Byte); virtual;
procedure DrawQuickAccessToolbar(DC: HDC; const R: TRect;
ABellow, ANonClientDraw, AHasApplicationButton, AIsActive, ADontUseAero: Boolean); virtual;
procedure DrawQuickAccessToolbarDefaultGlyph(DC: HDC; const R: TRect); virtual;
procedure DrawQuickAccessToolbarGroupButton(DC: HDC; const R: TRect;
ABellow, ANonClientDraw, AIsActive: Boolean; AState: Integer); virtual;
procedure DrawQuickAccessToolbarPopup(DC: HDC; const R: TRect); virtual;
procedure DrawStatusBar(DC: HDC; const R: TRect); virtual;
procedure DrawStatusBarGripBackground(DC: HDC; const R: TRect); virtual;
procedure DrawStatusBarPanel(DC: HDC; const Bounds, R: TRect; AIsLowered: Boolean); virtual;
procedure DrawStatusBarPanelSeparator(DC: HDC; const R: TRect); virtual;
procedure DrawStatusBarSizeGrip(DC: HDC; const R: TRect); virtual;
procedure DrawStatusBarToolbarSeparator(DC: HDC; const R: TRect); virtual;
function GetApplicationMenuGlyphSize: TSize; virtual;
function GetCaptionFontSize(ACurrentFontSize: Integer): Integer; virtual;
function GetMenuSeparatorSize: Integer; virtual;
function GetPartColor(APart: Integer; AState: Integer = 0): TColor; virtual;
function GetPartContentOffsets(APart: Integer): TRect; virtual;
function GetSkinName: string; virtual;
function GetQuickAccessToolbarLeftIndent(AHasApplicationButton: Boolean;
AUseAeroGlass: Boolean): Integer; virtual;
function GetQuickAccessToolbarMarkButtonOffset(AHasApplicationButton: Boolean;
ABelow: Boolean): Integer; virtual;
function GetQuickAccessToolbarOverrideWidth(AHasApplicationButton: Boolean;
AUseAeroGlass: Boolean): Integer; virtual;
function GetQuickAccessToolbarRightIndent(AHasApplicationButton: Boolean): Integer; virtual;
function GetWindowBordersWidth(AHasStatusBar: Boolean): TRect; virtual;
function HasGroupTransparency: Boolean; virtual;
function NeedDrawGroupScrollArrow: Boolean; virtual;
//
procedure UpdateBitsPerPixel;
end;
TdxBlueRibbonSkin = class(TdxCustomRibbonSkin)
protected
function GetName: string; override;
procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); override;
procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); override;
public
procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); override;
function GetPartColor(APart: Integer; AState: Integer = 0): TColor; override;
end;
{ TdxBlackRibbonSkin }
TdxBlackRibbonSkin = class(TdxCustomRibbonSkin)
protected
function GetName: string; override;
procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); override;
procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); override;
public
procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); override;
function GetPartColor(APart: Integer; AState: Integer = 0): TColor; override;
end;
{ TdxSilverRibbonSkin }
TdxSilverRibbonSkin = class(TdxBlackRibbonSkin)
protected
function GetName: string; override;
procedure LoadCustomRibbonSkinBitmap(out ABitmap: GpBitmap); override;
procedure LoadFormSkinBitmap(out ABitmap: GpBitmap); override;
public
procedure DrawRibbonBottomBorder(DC: HDC; const R: TRect); override;
function GetPartColor(APart: Integer; AState: Integer = 0): TColor; override;
end;
function IsRectangularFormBottom(const AData: TdxRibbonFormData): Boolean; {$IFDEF DELPHI9} inline; {$ENDIF}
implementation
uses
{$IFDEF DELPHI6}
Types,
{$ENDIF}
cxGeometry, dxOffice11, Math, cxDWMApi;
{$R 'skins.res' 'skins.rc'}
const
DropDownGalleryVerticalSizeGripBitmapSize: TSize = (cx: 18; cy: 7);
function IsRectangularFormBottom(const AData: TdxRibbonFormData): Boolean;
begin
Result := (AData.Border in [bsDialog, bsSingle, bsToolWindow]) or (AData.Style = fsMDIChild);
end;
procedure ExcludeClipRect(DC: HDC; const R: TRect);
begin
Windows.ExcludeClipRect(DC, R.Left, R.Top, R.Right, R.Bottom);
end;
procedure DrawFrame(DC: HDC; const R: TRect; AColor, ABorderColor: TColor;
const ABorders: TcxBorders = cxBordersAll; ABorderWidth: Integer = 1);
var
ABrush: HBRUSH;
ABounds, ABorderBounds: TRect;
ABorder: TcxBorder;
function GetBorderBounds: TRect;
begin
Result := R;
with Result do
case ABorder of
bLeft:
begin
Right := Left + ABorderWidth;
Inc(ABounds.Left, ABorderWidth);
end;
bTop:
begin
Bottom := Top + ABorderWidth;
Inc(ABounds.Top, ABorderWidth);
end;
bRight:
begin
Left := Right - ABorderWidth;
Dec(ABounds.Right, ABorderWidth);
end;
bBottom:
begin
Top := Bottom - ABorderWidth;
Dec(ABounds.Bottom, ABorderWidth);
end;
end;
end;
begin
if cxRectIsEmpty(R) then Exit;
ABounds := R;
if ABorders <> [] then
begin
ABrush := CreateSolidBrush(ColorToRGB(ABorderColor));
for ABorder := Low(ABorder) to High(ABorder) do
if ABorder in ABorders then
begin
ABorderBounds := GetBorderBounds;
if not cxRectIsEmpty(ABorderBounds) then
FillRect(DC, ABorderBounds, ABrush);
end;
DeleteObject(ABrush);
end;
if AColor <> clNone then
FillRectByColor(DC, ABounds, AColor);
end;
procedure OutError;
begin
raise Exception.Create('');
end;
{ TdxCustomRibbonSkin }
constructor TdxCustomRibbonSkin.Create;
begin
inherited Create(GetName);
LoadFormSkin;
LoadRibbonSkin;
UpdateBitsPerPixel;
end;
procedure TdxCustomRibbonSkin.LoadBitmapFromStream(const AResName: string;
out ABitmap: GpBitmap);
var
S: TStream;
begin
S := TResourceStream.Create(HInstance, AResName, RT_RCDATA);
try
ABitmap := GetImageFromStream(S);
finally
S.Free;
end;
end;
procedure TdxCustomRibbonSkin.LoadElementParts(ABitmap: GpBitmap;
var AParts; const R: TRect; AID: Integer; const AFixedSize: TRect;
const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = [];
AIsTopDown: Boolean = True; AInterpolationMode: Integer = InterpolationModeDefault);
var
I, J, AImageIndex: Integer;
AOffsetSize: TSize;
ALoadRect: TRect;
begin
J := 0;
if AIsTopDown then
begin
AOffsetSize.cx := 0;
AOffsetSize.cy := cxRectHeight(R);
end
else
begin
AOffsetSize.cx := cxRectWidth(R);
AOffsetSize.cy := 0;
end;
for I := Low(TStatesArray) to High(TStatesArray) do
begin
if (APossibleStates = []) or (I in APossibleStates) then
begin
if Length(AImageIndexes) = 0 then
AImageIndex := J
else
if J < Length(AImageIndexes) then
AImageIndex := AImageIndexes[J]
else
AImageIndex := 0;
ALoadRect := cxRectOffset(R, AOffsetSize.cx * AImageIndex, AOffsetSize.cy * AImageIndex);
Inc(J);
if cxRectIsEqual(cxEmptyRect, AFixedSize) then
TStatesArray(AParts)[I] := AddPart1x1(ABitmap, ALoadRect, AID, '', AInterpolationMode)
else
TStatesArray(AParts)[I] := AddPart3x3(ABitmap, ALoadRect, AFixedSize, AID, '', AInterpolationMode);
end;
Inc(AID);
end;
end;
procedure TdxCustomRibbonSkin.LoadElementPartsFromFile(const AFileName: string;
var AParts; AID: Integer; const AFixedSize: TRect;
const AImageIndexes: array of Byte; const APossibleStates: TdxByteSet = []);
var
ABitmap: GpGraphics;
AImageRect: TRect;
begin
if not CheckGdiPlus then Exit;
GdipCheck(GdipLoadImageFromFile(PWideChar(WideString(AFileName)), ABitmap));
AImageRect.Left := 0;
AImageRect.Top := 0;
GdipCheck(GdipGetImageWidth(ABitmap, AImageRect.Right));
GdipCheck(GdipGetImageHeight(ABitmap, AImageRect.Bottom));
LoadElementParts(ABitmap, AParts, AImageRect, AID, AFixedSize, AImageIndexes,
APossibleStates);
GdipDisposeImage(ABitmap);
end;
// DRAWING
procedure TdxCustomRibbonSkin.DrawApplicationButton(DC: HDC; const R: TRect;
AState: TdxApplicationButtonState);
begin
if LowColors then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -