Componentes.Terceros.DevExp.../internal/x.46/2/ExpressNavBar 2/Sources/dxNavBarXPViews.pas

1062 lines
36 KiB
ObjectPascal

{*******************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressNavBar }
{ }
{ Copyright (c) 2002-2009 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 EXPRESSNAVBAR 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 dxNavBarXPViews;
{$I cxVer.inc}
interface
uses
Windows, Graphics, dxNavBar, dxNavBarCollns, dxNavBarStyles, dxNavBarGraphics,
dxNavBarCustomPainters, dxNavBarBaseViews, dxNavBarExplorerViews, dxNavBarOfficeViews,
dxThemeManager;
type
TdxNavBarXP1GroupViewInfo = class(TdxNavBarExplorerBarGroupViewInfo)
private
function IsDefaultBgColor: Boolean;
function IsDefaultCaptionColor: Boolean;
public
function BgBackColor: TColor; override;
function BgBackColor2: TColor; override;
function BgAlphaBlend: Byte; override;
function BgAlphaBlend2: Byte; override;
function BgGradientMode: TdxBarStyleGradientMode; override;
function CaptionBackColor: TColor; override;
function CaptionBackColor2: TColor; override;
function CaptionAlphaBlend: Byte; override;
function CaptionAlphaBlend2: Byte; override;
function CaptionGradientMode: TdxBarStyleGradientMode; override;
end;
TdxNavBarXP1ViewInfo = class(TdxNavBarBaseViewInfo)
public
procedure AssignDefaultBackgroundStyle; override;
procedure AssignDefaultGroupBackgroundStyle; override;
procedure AssignDefaultGroupHeaderStyle; override;
procedure AssignDefaultItemStyle; override;
procedure AssignDefaultItemDisabledStyle; override;
end;
TdxNavBarXP1Painter = class(TdxNavBarFlatPainter)
protected
class function GetViewInfoClass: TdxNavBarViewInfoClass; override;
class function GetGroupViewInfoClass: TdxNavBarGroupViewInfoClass; override;
class function ScrollButtonsPainterClass: TdxNavBarCustomScrollButtonsPainterClass; override;
class function SelectionPainterClass: TdxNavBarCustomSelectionPainterClass; override;
public
procedure DrawGroupCaptionButton(AGroupViewInfo: TdxNavBarGroupViewInfo); override;
end;
TdxNavBarXP2Painter = class(TdxNavBarOffice1Painter)
protected
class function BackgroundPainterClass: TdxNavBarCustomBackgroundPainterClass; override;
class function ButtonPainterClass: TdxNavBarCustomButtonPainterClass; override;
class function GroupBackgroundPainterClass: TdxNavBarCustomGroupBackgroundPainterClass; override;
class function ScrollButtonsPainterClass: TdxNavBarCustomScrollButtonsPainterClass; override;
class function SelectionPainterClass: TdxNavBarCustomSelectionPainterClass; override;
end;
TdxNavBarXPExplorerBarLinkViewInfo = class(TdxNavBarExplorerBarLinkViewInfo)
public
function Font: TFont; override;
function FontColor: TColor; override;
end;
TdxNavBarXPExplorerBarGroupViewInfo = class(TdxNavBarExplorerBarGroupViewInfo)
public
function BorderColor: TColor; override;
function BgBackColor: TColor; override;
function BgBackColor2: TColor; override;
function BgAlphaBlend: Byte; override;
function BgAlphaBlend2: Byte; override;
function BgGradientMode: TdxBarStyleGradientMode; override;
function CaptionBackColor: TColor; override;
function CaptionBackColor2: TColor; override;
function CaptionAlphaBlend: Byte; override;
function CaptionAlphaBlend2: Byte; override;
function CaptionGradientMode: TdxBarStyleGradientMode; override;
function CaptionFont: TFont; override;
function CaptionFontColor: TColor; override;
end;
TdxNavBarXPExplorerBarViewInfo = class(TdxNavBarExplorerBarViewInfo)
protected
procedure CreateColors; override;
procedure RefreshColors; override;
procedure ReleaseColors; override;
function GetGroupCaptionHeightAddon: Integer; override;
function GetGroupCaptionSignSize: TSize; override;
public
function BgBackColor: TColor; override;
function BgBackColor2: TColor; override;
function BgAlphaBlend: Byte; override;
function BgAlphaBlend2: Byte; override;
function BgGradientMode: TdxBarStyleGradientMode; override;
end;
TdxNavBarXPExplorerBarPainter = class(TdxNavBarExplorerBarPainter)
protected
class function GetViewInfoClass: TdxNavBarViewInfoClass; override;
class function GetGroupViewInfoClass: TdxNavBarGroupViewInfoClass; override;
class function GetLinkViewInfoClass: TdxNavBarLinkViewInfoClass; override;
class function BackgroundPainterClass: TdxNavBarCustomBackgroundPainterClass; override;
class function ButtonPainterClass: TdxNavBarCustomButtonPainterClass; override;
class function SignPainterClass: TdxNavBarCustomSignPainterClass; override;
end;
TdxNavBarXPExplorerBarButtonPainter = class(TdxNavBarCustomButtonPainter)
protected
class function GetButtonBitmap(AState: TdxNavBarObjectStates): TBitmap;
class procedure InternalDrawButton(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode; ABorderColor: TColor;
AState: TdxNavBarObjectStates); override;
end;
TdxNavBarXPExplorerBarSignPainter = class(TdxNavBarExplorerBarSignPainter)
protected
class procedure CreateBitmap(var ADC: HDC; var ABitmap, AOldBitmap: HBITMAP; var AData: Pointer; AWidth, AHeight: Integer);
class procedure DeleteBitmap(var ADC: HDC; var ABitmap, AOldBitmap: HBITMAP; var AData: Pointer);
class procedure DrawMaskBitmap(DestX, DestY: Integer; DestHandle: THandle; Bitmap: TBitmap);
class function GetSignBitmap(AState: TdxNavBarObjectStates): TBitmap;
class procedure InternalDrawSign(ACanvas: TCanvas; ARect: TRect;
AForeColor, ABackColor1, ABackColor2 : TColor; AState: TdxNavBarObjectStates); override;
end;
TdxNavBarXPPainter = class
public
class function DrawObject(ACanvas: TCanvas; ARect: TRect; AObject: TdxThemedObjectType;
iPartId, iStateId: Integer): Boolean;
class function DrawText(ACanvas: TCanvas; ARect: TRect;
ACaption: string; ADrawTextFlag: Integer;
AObject: TdxThemedObjectType; iPartId, iStateId: Integer): Boolean;
end;
TdxNavBarXPBackgroundPainter = class(TdxNavBarCustomBackgroundPainter)
protected
class procedure InternalDrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
AEraseBackground: Boolean; ABackgroundColor: TColor;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode); override;
end;
TdxNavBarXPGroupBackgroundPainter = class(TdxNavBarCustomGroupBackgroundPainter)
protected
class procedure InternalDrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode); override;
end;
TdxNavBarXPSelectionPainter = class(TdxNavBarBaseSelectionPainter)
protected
class procedure InternalDrawSelection(ACanvas: TCanvas; ARect: TRect;
ABackColor: TColor; AState: TdxNavBarObjectStates); override;
end;
TdxNavBarXPScrollButtonsPainter = class(TdxNavBarBaseScrollButtonsPainter)
protected
class procedure InternalDrawBottomButton(ACanvas: TCanvas; ARect: TRect;
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
ABorderColor: TColor; AState: TdxNavBarObjectStates); override;
class procedure InternalDrawTopButton(ACanvas: TCanvas; ARect: TRect;
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
ABorderColor: TColor; AState: TdxNavBarObjectStates); override;
end;
TdxNavBarXPButtonPainter = class(TdxNavBarOfficeButtonPainter)
protected
class procedure InternalDrawButton(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode; ABorderColor: TColor;
AState: TdxNavBarObjectStates); override;
end;
TdxNavBarXPExplorerBarBackgroundPainter = class(TdxNavBarCustomBackgroundPainter)
protected
class function GetBackgroundBitmap: TBitmap;
class procedure InternalDrawBackground(ACanvas: TCanvas; ARect: TRect; APicture: TPicture;
AEraseBackground: Boolean; ABackgroundColor: TColor;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode); override;
end;
implementation
uses
Types, CommCtrl, ImgList, Buttons,
dxNavBarViewsFact, dxNavBarConsts,
dxThemeConsts, dxUxTheme, cxGeometry;
{ TdxNavBarXP1GroupViewInfo }
function TdxNavBarXP1GroupViewInfo.BgAlphaBlend: Byte;
begin
if IsDefaultBgColor then
Result := 255
else Result := inherited BgAlphaBlend;
end;
function TdxNavBarXP1GroupViewInfo.BgAlphaBlend2: Byte;
begin
if IsDefaultBgColor then
Result := 255
else Result := inherited BgAlphaBlend2;
end;
function TdxNavBarXP1GroupViewInfo.BgBackColor: TColor;
begin
if IsDefaultBgColor then
Result := LightLightColor(clInactiveCaption)
else Result := inherited BgBackColor;
end;
function TdxNavBarXP1GroupViewInfo.BgBackColor2: TColor;
begin
if IsDefaultBgColor then
Result := clInactiveCaption
else Result := inherited BgBackColor2;
end;
function TdxNavBarXP1GroupViewInfo.BgGradientMode: TdxBarStyleGradientMode;
begin
if IsDefaultBgColor then
Result := gmHorizontal
else Result := inherited BgGradientMode;
end;
function TdxNavBarXP1GroupViewInfo.CaptionAlphaBlend: Byte;
begin
if IsDefaultCaptionColor then
Result := 255
else Result := inherited CaptionAlphaBlend;
end;
function TdxNavBarXP1GroupViewInfo.CaptionAlphaBlend2: Byte;
begin
if IsDefaultCaptionColor then
Result := 255
else Result := inherited CaptionAlphaBlend2;
end;
function TdxNavBarXP1GroupViewInfo.CaptionBackColor: TColor;
begin
if IsDefaultCaptionColor then
Result := clActiveCaption
else Result := inherited CaptionBackColor;
end;
function TdxNavBarXP1GroupViewInfo.CaptionBackColor2: TColor;
begin
if IsDefaultCaptionColor then
begin
if Group = NavBar.HotTrackedGroup then
Result := clActiveCaption
else Result := DarkColor(clActiveCaption);
end
else Result := inherited CaptionBackColor2;
end;
function TdxNavBarXP1GroupViewInfo.CaptionGradientMode: TdxBarStyleGradientMode;
begin
if IsDefaultCaptionColor then
Result := gmHorizontal
else Result := inherited CaptionGradientMode;
end;
function TdxNavBarXP1GroupViewInfo.IsDefaultBgColor: Boolean;
begin
Result := (inherited BgBackColor = clNone) or (inherited BgBackColor2 = clNone);
end;
function TdxNavBarXP1GroupViewInfo.IsDefaultCaptionColor: Boolean;
begin
Result := (inherited CaptionBackColor = clNone) or (inherited CaptionBackColor2 = clNone);
end;
{ TdxNavBarXP1ViewInfo }
procedure TdxNavBarXP1ViewInfo.AssignDefaultBackgroundStyle;
begin
NavBar.DefaultStyles.Background.ResetValues;
NavBar.DefaultStyles.Background.BackColor := clAppWorkSpace;
NavBar.DefaultStyles.Background.BackColor2 := clAppWorkSpace;
end;
procedure TdxNavBarXP1ViewInfo.AssignDefaultGroupBackgroundStyle;
begin
NavBar.DefaultStyles.GroupBackground.ResetValues;
NavBar.DefaultStyles.GroupBackground.BackColor := clNone;
NavBar.DefaultStyles.GroupBackground.BackColor2 := clNone;
end;
procedure TdxNavBarXP1ViewInfo.AssignDefaultGroupHeaderStyle;
begin
NavBar.DefaultStyles.GroupHeader.ResetValues;
NavBar.DefaultStyles.GroupHeader.BackColor := clNone;
NavBar.DefaultStyles.GroupHeader.BackColor2 := clNone;
NavBar.DefaultStyles.GroupHeader.Font.Color := clCaptionText;
NavBar.DefaultStyles.GroupHeader.HAlignment := haCenter;
end;
procedure TdxNavBarXP1ViewInfo.AssignDefaultItemStyle;
begin
NavBar.DefaultStyles.Item.ResetValues;
NavBar.DefaultStyles.Item.Font.Color := clBtnText;
NavBar.DefaultStyles.Item.HAlignment := haCenter;
end;
procedure TdxNavBarXP1ViewInfo.AssignDefaultItemDisabledStyle;
begin
NavBar.DefaultStyles.ItemDisabled.Assign(NavBar.DefaultStyles.Item);
NavBar.DefaultStyles.ItemDisabled.Font.Color := clBtnShadow;
end;
{ TdxNavBarXP1Painter }
procedure TdxNavBarXP1Painter.DrawGroupCaptionButton(AGroupViewInfo: TdxNavBarGroupViewInfo);
var
Color1, Color2: TColor;
begin
with AGroupViewInfo do
begin
Color1 := LightLightColor(CaptionBackColor);
if NavBar.HotTrackedGroup = Group then
Color2 := LightColor(CaptionBackColor)
else Color2 := CaptionBackColor;
ButtonPainterClass.DrawButton(Canvas, CaptionRect, CaptionImage,
Color1, Color2, CaptionAlphaBlend, CaptionAlphaBlend2,
CaptionGradientMode, CaptionBorderColor, State);
end;
end;
class function TdxNavBarXP1Painter.GetViewInfoClass: TdxNavBarViewInfoClass;
begin
Result := TdxNavBarXP1ViewInfo;
end;
class function TdxNavBarXP1Painter.GetGroupViewInfoClass: TdxNavBarGroupViewInfoClass;
begin
Result := TdxNavBarXP1GroupViewInfo;
end;
class function TdxNavBarXP1Painter.ScrollButtonsPainterClass: TdxNavBarCustomScrollButtonsPainterClass;
begin
Result := TdxNavBarXPScrollButtonsPainter;
end;
class function TdxNavBarXP1Painter.SelectionPainterClass: TdxNavBarCustomSelectionPainterClass;
begin
Result := TdxNavBarXPSelectionPainter;
end;
{ TdxNavBarXP2Painter }
class function TdxNavBarXP2Painter.BackgroundPainterClass: TdxNavBarCustomBackgroundPainterClass;
begin
Result := TdxNavBarXPBackgroundPainter;
end;
class function TdxNavBarXP2Painter.ButtonPainterClass: TdxNavBarCustomButtonPainterClass;
begin
Result := TdxNavBarXPButtonPainter;
end;
class function TdxNavBarXP2Painter.GroupBackgroundPainterClass: TdxNavBarCustomGroupBackgroundPainterClass;
begin
Result := TdxNavBarXPGroupBackgroundPainter;
end;
class function TdxNavBarXP2Painter.ScrollButtonsPainterClass: TdxNavBarCustomScrollButtonsPainterClass;
begin
Result := TdxNavBarXPScrollButtonsPainter;
end;
class function TdxNavBarXP2Painter.SelectionPainterClass: TdxNavBarCustomSelectionPainterClass;
begin
Result := TdxNavBarXPSelectionPainter;
end;
{ TdxNavBarXPExplorerBarLinkViewInfo }
function TdxNavBarXPExplorerBarLinkViewInfo.Font: TFont;
var
AFont: TFont;
begin
Result := inherited Font;
if (OpenTheme(totExplorerBar) <> 0) and CheckShellInstance then
begin
if sHotTracked in State then
AFont := dxXPExplorerBarItemFontHot
else AFont := dxXPExplorerBarItemFont;
if AFont <> nil then
begin
Result.Assign(AFont);
if sDisabled in State then
Result.Style := Result.Style - [fsUnderline];
end;
end;
end;
function TdxNavBarXPExplorerBarLinkViewInfo.FontColor: TColor;
begin
Result := inherited FontColor;
if (OpenTheme(totExplorerBar) <> 0) and CheckShellInstance then
begin
Result := Font.Color;
if sDisabled in State then
Result := LightColor(Result);
end;
end;
{ TdxNavBarXPExplorerBarGroupViewInfo }
function TdxNavBarXPExplorerBarGroupViewInfo.BorderColor: TColor;
var
APart: Integer;
AColor: COLORREF;
begin
APart := EBP_NORMALGROUPBACKGROUND;
if dxXPExplorerBarGroupBorderColor <> clNone then
Result := dxXPExplorerBarGroupBorderColor
else if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_BORDERCOLOR, AColor)) then
Result := AColor
else Result := inherited BorderColor;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.BgBackColor: TColor;
var
APart: Integer;
AColor: COLORREF;
begin
APart := EBP_NORMALGROUPBACKGROUND;
if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_FILLCOLOR, AColor)) then
Result := AColor
else if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_GRADIENTCOLOR1, AColor)) then
Result := AColor
else Result := inherited BgBackColor;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.BgBackColor2: TColor;
var
APart: Integer;
AColor: COLORREF;
begin
APart := EBP_NORMALGROUPBACKGROUND;
if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_FILLCOLOR, AColor)) then
Result := AColor
else if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_GRADIENTCOLOR2, AColor)) then
Result := AColor
else Result := inherited BgBackColor2;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.BgAlphaBlend: Byte;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := 255
else Result := inherited BgAlphaBlend;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.BgAlphaBlend2: Byte;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := 255
else Result := inherited BgAlphaBlend2;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.BgGradientMode: TdxBarStyleGradientMode;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := gmHorizontal
else Result := inherited BgGradientMode;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionBackColor: TColor;
var
APart: Integer;
AColor: COLORREF;
begin
if sSpecial in State then
APart := EBP_SPECIALGROUPHEAD
else APart := EBP_NORMALGROUPHEAD;
if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_FILLCOLOR, AColor)) then
Result := AColor
else if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_GRADIENTCOLOR1, AColor)) then
Result := AColor
else Result := inherited CaptionBackColor;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionBackColor2: TColor;
var
APart: Integer;
AColor: COLORREF;
begin
if sSpecial in State then
APart := EBP_SPECIALGROUPHEAD
else APart := EBP_NORMALGROUPHEAD;
if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_FILLCOLOR, AColor)) then
Result := AColor
else if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), APart, 0, TMT_GRADIENTCOLOR2, AColor)) then
Result := AColor
else Result := inherited CaptionBackColor2;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionAlphaBlend: Byte;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := 255
else Result := inherited CaptionAlphaBlend;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionAlphaBlend2: Byte;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := 255
else Result := inherited CaptionAlphaBlend2;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionGradientMode: TdxBarStyleGradientMode;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := gmHorizontal
else Result := inherited CaptionGradientMode;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionFont: TFont;
var
AFont: TFont;
begin
Result := inherited CaptionFont;
if (OpenTheme(totExplorerBar) <> 0) and CheckShellInstance then
begin
if sHotTracked in State then
AFont := dxXPExplorerBarGroupHeaderFontHot
else AFont := dxXPExplorerBarGroupHeaderFont;
if AFont <> nil then
begin
Result.Assign(AFont);
Result.Style := Result.Style - [fsUnderline];
end;
end;
end;
function TdxNavBarXPExplorerBarGroupViewInfo.CaptionFontColor: TColor;
begin
if (OpenTheme(totExplorerBar) <> 0) and CheckShellInstance then
begin
Result := CaptionFont.Color;
if sSpecial in State then Result := clWhite;
end
else Result := inherited CaptionFontColor;
end;
{ TdxNavBarXPExplorerBarViewInfo }
function TdxNavBarXPExplorerBarViewInfo.BgBackColor: TColor;
var
AColor: COLORREF;
begin
if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), EBP_HEADERBACKGROUND, -1, TMT_GRADIENTCOLOR1, AColor)) then
Result := AColor
else Result := inherited BgBackColor;
end;
function TdxNavBarXPExplorerBarViewInfo.BgBackColor2: TColor;
var
AColor: COLORREF;
begin
if (OpenTheme(totExplorerBar) <> 0) and not Failed(GetThemeColor(OpenTheme(totExplorerBar), EBP_HEADERBACKGROUND, -1, TMT_GRADIENTCOLOR2, AColor)) then
Result := AColor
else Result := inherited BgBackColor2;
end;
function TdxNavBarXPExplorerBarViewInfo.BgAlphaBlend: Byte;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := 255
else Result := inherited BgAlphaBlend;
end;
function TdxNavBarXPExplorerBarViewInfo.BgAlphaBlend2: Byte;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := 255
else Result := inherited BgAlphaBlend2;
end;
function TdxNavBarXPExplorerBarViewInfo.BgGradientMode: TdxBarStyleGradientMode;
begin
if OpenTheme(totExplorerBar) <> 0 then
Result := gmVertical
else Result := inherited BgGradientMode;
end;
procedure TdxNavBarXPExplorerBarViewInfo.CreateColors;
begin
CreateXPExplorerBarColors;
end;
procedure TdxNavBarXPExplorerBarViewInfo.RefreshColors;
begin
RefreshXPExplorerBarColors;
end;
procedure TdxNavBarXPExplorerBarViewInfo.ReleaseColors;
begin
ReleaseXPExplorerBarColors;
end;
function TdxNavBarXPExplorerBarViewInfo.GetGroupCaptionHeightAddon: Integer;
begin
if OpenTheme(totExplorerBar) = 0 then
Result := inherited GetGroupCaptionHeightAddon
else
Result := 12;
end;
function TdxNavBarXPExplorerBarViewInfo.GetGroupCaptionSignSize: TSize;
begin
if OpenTheme(totExplorerBar) = 0 then
Result := inherited GetGroupCaptionSignSize
else
Result := cxSize(22, 22);
end;
{ TdxNavBarXPExplorerBarPainter }
class function TdxNavBarXPExplorerBarPainter.GetViewInfoClass: TdxNavBarViewInfoClass;
begin
Result := TdxNavBarXPExplorerBarViewInfo;
end;
class function TdxNavBarXPExplorerBarPainter.GetGroupViewInfoClass: TdxNavBarGroupViewInfoClass;
begin
Result := TdxNavBarXPExplorerBarGroupViewInfo;
end;
class function TdxNavBarXPExplorerBarPainter.GetLinkViewInfoClass: TdxNavBarLinkViewInfoClass;
begin
Result := TdxNavBarXPExplorerBarLinkViewInfo;
end;
class function TdxNavBarXPExplorerBarPainter.BackgroundPainterClass: TdxNavBarCustomBackgroundPainterClass;
begin
Result := TdxNavBarXPExplorerBarBackgroundPainter;
end;
class function TdxNavBarXPExplorerBarPainter.ButtonPainterClass: TdxNavBarCustomButtonPainterClass;
begin
Result := TdxNavBarXPExplorerBarButtonPainter;
end;
class function TdxNavBarXPExplorerBarPainter.SignPainterClass: TdxNavBarCustomSignPainterClass;
begin
Result := TdxNavBarXPExplorerBarSignPainter;
end;
{ TdxNavBarXPExplorerBarButtonPainter }
class function TdxNavBarXPExplorerBarButtonPainter.GetButtonBitmap(AState: TdxNavBarObjectStates): TBitmap;
begin
if (sSpecial in AState) and (dxXPExplorerBarSpecialGroupHeader <> nil) then
Result := dxXPExplorerBarSpecialGroupHeader
else Result := dxXPExplorerBarNormalGroupHeader;
end;
class procedure TdxNavBarXPExplorerBarButtonPainter.InternalDrawButton(
ACanvas: TCanvas; ARect: TRect; APicture: TPicture; AColor1,
AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode; ABorderColor: TColor;
AState: TdxNavBarObjectStates);
var
ABitmap: TBitmap;
ATheme: TdxTheme;
begin
ATheme := OpenTheme(totExplorerBar);
ABitmap := GetButtonBitmap(AState);
if (ATheme <> 0) and (ABitmap <> nil) then
begin
ABitmap.PixelFormat := pf32bit;
ABitmap.Transparent := True;
ABitmap.TransparentColor := clFuchsia;
ACanvas.StretchDraw(ARect, ABitmap);
end
else
inherited;
end;
{ TdxNavBarXPExplorerBarSignPainter }
class procedure TdxNavBarXPExplorerBarSignPainter.CreateBitmap(var ADC: HDC;
var ABitmap, AOldBitmap: HBITMAP; var AData: Pointer; AWidth, AHeight: Integer);
var
TempDC: HDC;
BitInfo: TBitmapInfo;
begin
TempDC := GetDC(0);
ADC := CreateCompatibleDC(TempDC);
with BitInfo.bmiHeader do
begin
biSize := SizeOf(TBitmapInfoHeader);
biPlanes := 1;
biBitCount := 32;
biCompression := BI_RGB;
biWidth := AWidth;
biHeight := AHeight;
biSizeImage := 0;
biXPelsPerMeter := 0;
biYPelsPerMeter := 0;
biClrUsed := 0;
biClrImportant := 0;
end;
ABitmap := CreateDIBSection(ADC, BitInfo, DIB_RGB_COLORS, AData, 0, 0);
GDIFlush;
AOldBitmap := SelectObject(ADC, ABitmap);
ReleaseDC(0, TempDC);
end;
class procedure TdxNavBarXPExplorerBarSignPainter.DeleteBitmap(var ADC: HDC;
var ABitmap, AOldBitmap: HBITMAP; var AData: Pointer);
begin
GDIFlush;
SelectObject(ADC, AOldBitmap);
DeleteObject(ABitmap);
DeleteDC(ADC);
AData := nil;
end;
class procedure TdxNavBarXPExplorerBarSignPainter.DrawMaskBitmap(DestX, DestY: Integer;
DestHandle: THandle; Bitmap: TBitmap);
var
I, J: Integer;
DC1, DC2: HDC;
Bitmap1, Bitmap2: HBITMAP;
OldBitmap1, OldBitmap2: HBITMAP;
Data1, Data2: Pointer;
ASourceData, ADestData: Pointer;
sR, sG, sB, sA: Byte;
dR, dG, dB: Byte;
R, G, B: Word;
begin
CreateBitmap(DC1, Bitmap1, OldBitmap1, Data1, Bitmap.Width, Bitmap.Height);
CreateBitmap(DC2, Bitmap2, OldBitmap2, Data2, Bitmap.Width, Bitmap.Height);
try
BitBlt(DC1, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
BitBlt(DC2, 0, 0, Bitmap.Width, Bitmap.Height, DestHandle, DestX, DestY, SRCCOPY);
ASourceData := Pointer(Integer(Data1) + ((Bitmap.Height - 1) * Bitmap.Width * 4));
ADestData := Pointer(Integer(Data2) + ((Bitmap.Height - 1) * Bitmap.Width * 4));
for I := 0 to Bitmap.Height - 1 do
begin
for J := 0 to Bitmap.Width - 1 do
begin
sA := PByte(Integer(ASourceData) + 3)^;
sG := PByte(ASourceData)^;
dG := PByte(ADestData)^;
G := (sG * sA) + (dG * (255 - sA));
PByte(ADestData)^ := G div 256 + 1;
sB := PByte(Integer(ASourceData) + 1)^;
dB := PByte(Integer(ADestData) + 1)^;
B := (sB * sA) + (dB * (255 - sA));
PByte(Integer(ADestData) + 1)^ := B div 256 + 1;
sR := PByte(Integer(ASourceData) + 2)^;
dR := PByte(Integer(ADestData) + 2)^;
R := (sR * sA) + (dR * (255 - sA));
PByte(Integer(ADestData) + 2)^ := R div 256 + 1;
PByte(Integer(ADestData) + 3)^ := PByte(Integer(ASourceData) + 3)^;
ASourceData := Pointer(Integer(ASourceData) + 4);
ADestData := Pointer(Integer(ADestData) + 4);
end;
ASourceData := Pointer(Integer(ASourceData) - Bitmap.Width * 4 * 2);
ADestData := Pointer(Integer(ADestData) - Bitmap.Width * 4 * 2);
end;
BitBlt(DestHandle, DestX, DestY, Bitmap.Width, Bitmap.Height, DC2, 0, 0, SRCCOPY);
finally
DeleteBitmap(DC1, Bitmap1, OldBitmap1, Data1);
DeleteBitmap(DC2, Bitmap2, OldBitmap2, Data2);
end;
end;
class function TdxNavBarXPExplorerBarSignPainter.GetSignBitmap(AState: TdxNavBarObjectStates): TBitmap;
begin
if (sExpanded in AState) then
begin
if sHotTracked in AState then
begin
if (sSpecial in AState) and (dxXPExplorerBarSpecialGroupCollapseHot <> nil) then
Result := dxXPExplorerBarSpecialGroupCollapseHot
else Result := dxXPExplorerBarNormalGroupCollapseHot
end
else
begin
if (sSpecial in AState) and (dxXPExplorerBarSpecialGroupCollapse <> nil) then
Result := dxXPExplorerBarSpecialGroupCollapse
else Result := dxXPExplorerBarNormalGroupCollapse;
end;
end
else
begin
if sHotTracked in AState then
begin
if (sSpecial in AState) and (dxXPExplorerBarSpecialGroupExpandHot <> nil) then
Result := dxXPExplorerBarSpecialGroupExpandHot
else Result := dxXPExplorerBarNormalGroupExpandHot
end
else
begin
if (sSpecial in AState) and (dxXPExplorerBarSpecialGroupExpand <> nil) then
Result := dxXPExplorerBarSpecialGroupExpand
else Result := dxXPExplorerBarNormalGroupExpand;
end;
end;
end;
class procedure TdxNavBarXPExplorerBarSignPainter.InternalDrawSign(ACanvas: TCanvas;
ARect: TRect; AForeColor, ABackColor1, ABackColor2 : TColor;
AState: TdxNavBarObjectStates);
var
ABitmap: TBitmap;
ATheme: TdxTheme;
begin
ATheme := OpenTheme(totExplorerBar);
ABitmap := GetSignBitmap(AState);
if (ATheme <> 0) and (ABitmap <> nil) then
begin
if TdxNavBarXPExplorerBarButtonPainter.GetButtonBitmap(AState) <> nil then
DrawMaskBitmap(ARect.Left, ARect.Top, ACanvas.Handle, ABitmap)
else
begin
ABitmap.PixelFormat := pf32bit;
ABitmap.Transparent := True;
ABitmap.TransparentColor := clFuchsia;
ACanvas.StretchDraw(ARect, ABitmap);
end
end
else inherited;
end;
{ TdxNavBarXPPainter }
class function TdxNavBarXPPainter.DrawObject(ACanvas: TCanvas; ARect: TRect;
AObject: TdxThemedObjectType; iPartId, iStateId: Integer): Boolean;
var
ATheme: TdxTheme;
begin
ATheme := OpenTheme(AObject);
if ATheme <> 0 then
begin
DrawThemeBackground(ATheme, ACanvas.Handle, iPartId, iStateId, @ARect);
Result := True;
end
else Result := False;
end;
class function TdxNavBarXPPainter.DrawText(ACanvas: TCanvas; ARect: TRect;
ACaption: string; ADrawTextFlag: Integer;
AObject: TdxThemedObjectType; iPartId, iStateId: Integer): Boolean;
var
ATheme: TdxTheme;
begin
ATheme := OpenTheme(AObject);
if ATheme <> 0 then
begin
DrawThemeText(ATheme, ACanvas.Handle, iPartId, iStateId, ACaption,
-1, ADrawTextFlag, 0, ARect);
Result := True;
end
else Result := False;
end;
{ TdxNavBarXPBackgroundPainter }
class procedure TdxNavBarXPBackgroundPainter.InternalDrawBackground(ACanvas: TCanvas;
ARect: TRect; APicture: TPicture; AEraseBackground: Boolean; ABackgroundColor: TColor;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
begin
if not TdxNavBarXPPainter.DrawObject(ACanvas, ARect, totTab, TABP_BODY, 0) then
inherited;
end;
{ TdxNavBarXPGroupBackgroundPainter }
class procedure TdxNavBarXPGroupBackgroundPainter.InternalDrawBackground(ACanvas: TCanvas;
ARect: TRect; APicture: TPicture; AColor1, AColor2: TColor;
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode);
begin
TdxNavBarXPBackgroundPainter.DrawBackground(ACanvas, ARect, APicture, False, clNone,
AColor1, AColor2, AAlphaBlend1, AAlphaBlend2, AGradientMode);
end;
{ TdxNavBarXPSelectionPainter }
class procedure TdxNavBarXPSelectionPainter.InternalDrawSelection(ACanvas: TCanvas;
ARect: TRect; ABackColor: TColor; AState: TdxNavBarObjectStates);
var
AStateID: Integer;
begin
if [sPressed, sSelected] * AState <> [] then
AStateID := TS_PRESSED
else
if (sHotTracked in AState) then
AStateID := TS_HOT
else
AStateID := TS_NORMAL;
if not TdxNavBarXPPainter.DrawObject(ACanvas, ARect, totToolBar, TP_BUTTON, AStateID) then
inherited;
end;
{ TdxNavBarXPButtonPainter }
class procedure TdxNavBarXPButtonPainter.InternalDrawButton(ACanvas: TCanvas;
ARect: TRect; APicture: TPicture; AColor1, AColor2: TColor; AAlphaBlend1,
AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode; ABorderColor: TColor;
AState: TdxNavBarObjectStates);
var
AStateID: Integer;
begin
if sPressed in AState then
AStateID := PBS_PRESSED
else
if sHotTracked in AState then
AStateID := PBS_HOT
else
if sActive in AState then
AStateID := PBS_DEFAULTED
else
AStateID := PBS_NORMAL;
if not TdxNavBarXPPainter.DrawObject(ACanvas, ARect, totButton, BP_PUSHBUTTON, AStateID) then
inherited;
end;
{ TdxNavBarXPScrollButtonsPainter }
class procedure TdxNavBarXPScrollButtonsPainter.InternalDrawBottomButton(
ACanvas: TCanvas; ARect: TRect;
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
ABorderColor: TColor; AState: TdxNavBarObjectStates);
var
ATheme: TdxTheme;
AStateID: Integer;
begin
ATheme := OpenTheme(totScrollBar);
if ATheme <> 0 then
begin
if sPressed in AState then
AStateID := ABS_DOWNPRESSED
else if sHotTracked in AState then
AStateID := ABS_DOWNHOT
else AStateID := ABS_DOWNNORMAL;
TdxNavBarXPPainter.DrawObject(ACanvas, ARect, totScrollBar, SBP_ARROWBTN, AStateID);
ExcludeClipRect(ACanvas.Handle, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
end
else inherited;
end;
class procedure TdxNavBarXPScrollButtonsPainter.InternalDrawTopButton(
ACanvas: TCanvas; ARect: TRect;
AButtonPainterClass: TdxNavBarCustomButtonPainterClass; AColor1, AColor2: TColor;
AAlphaBlend1, AAlphaBlend2: Byte; AGradientMode: TdxBarStyleGradientMode;
ABorderColor: TColor; AState: TdxNavBarObjectStates);
var
ATheme: TdxTheme;
AStateID: Integer;
begin
ATheme := OpenTheme(totScrollBar);
if ATheme <> 0 then
begin
if sPressed in AState then
AStateID := ABS_UPPRESSED
else if sHotTracked in AState then
AStateID := ABS_UPHOT
else AStateID := ABS_UPNORMAL;
TdxNavBarXPPainter.DrawObject(ACanvas, ARect, totScrollBar, SBP_ARROWBTN, AStateID);
ExcludeClipRect(ACanvas.Handle, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
end
else inherited;
end;
{ TdxNavBarXPExplorerBarBackgroundPainter }
class function TdxNavBarXPExplorerBarBackgroundPainter.GetBackgroundBitmap: TBitmap;
begin
Result := dxXPExplorerBarBackground;
end;
class procedure TdxNavBarXPExplorerBarBackgroundPainter.InternalDrawBackground(ACanvas: TCanvas;
ARect: TRect; APicture: TPicture; AEraseBackground: Boolean; ABackgroundColor: TColor;
AColor1, AColor2: TColor; AAlphaBlend1, AAlphaBlend2: Byte;
AGradientMode: TdxBarStyleGradientMode);
var
ABitmap: TBitmap;
ATheme: TdxTheme;
begin
ATheme := OpenTheme(totExplorerBar);
ABitmap := GetBackgroundBitmap;
if (ATheme <> 0) and (ABitmap <> nil) then
begin
ABitmap.PixelFormat := pf32bit;
ABitmap.Transparent := True;
ABitmap.TransparentColor := clFuchsia;
ACanvas.StretchDraw(ARect, ABitmap);
end
else inherited;
end;
initialization
RegisterView(dxNavBarXP1View, 'XP1View', TdxNavBarXP1Painter);
RegisterView(dxNavBarXP2View, 'XP2View', TdxNavBarXP2Painter);
RegisterView(dxNavBarXPExplorerBarView, 'XPExplorerBarView', TdxNavBarXPExplorerBarPainter);
finalization
UnRegisterView(dxNavBarXP1View);
UnRegisterView(dxNavBarXP2View);
UnRegisterView(dxNavBarXPExplorerBarView);
end.