📄 themes.pas
字号:
ttTabRoot,
ttTabItemNormal, ttTabItemHot, ttTabItemSelected, ttTabItemDisabled, ttTabItemFocused,
ttTabItemLeftEdgeNormal, ttTabItemLeftEdgeHot, ttTabItemLeftEdgeSelected, ttTabItemLeftEdgeDisabled, ttTabItemLeftEdgeFocused,
ttTabItemRightEdgeNormal, ttTabItemRightEdgeHot, ttTabItemRightEdgeSelected, ttTabItemRightEdgeDisabled, ttTabItemRightEdgeFocused,
ttTabItemBothEdgeNormal, ttTabItemBothEdgeHot, ttTabItemBothEdgeSelected, ttTabItemBothEdgeDisabled, ttTabItemBothEdgeFocused,
ttTopTabItemNormal, ttTopTabItemHot, ttTopTabItemSelected, ttTopTabItemDisabled, ttTopTabItemFocused,
ttTopTabItemLeftEdgeNormal, ttTopTabItemLeftEdgeHot, ttTopTabItemLeftEdgeSelected, ttTopTabItemLeftEdgeDisabled, ttTopTabItemLeftEdgeFocused,
ttTopTabItemRightEdgeNormal, ttTopTabItemRightEdgeHot, ttTopTabItemRightEdgeSelected, ttTopTabItemRightEdgeDisabled, ttTopTabItemRightEdgeFocused,
ttTopTabItemBothEdgeNormal, ttTopTabItemBothEdgeHot, ttTopTabItemBothEdgeSelected, ttTopTabItemBothEdgeDisabled, ttTopTabItemBothEdgeFocused,
ttPane,
ttBody
);
// 'TaskBand' theme data
TThemedTaskBand = (
ttbTaskBandDontCare,
ttbTaskBandRoot,
ttbGroupCount,
ttbFlashButton,
ttpFlashButtonGroupMenu
);
// 'TaskBar' theme data
TThemedTaskBar = (
ttTaskBarDontCare,
ttTaskBarRoot,
ttbTimeNormal
);
// 'ToolBar' theme data
TThemedToolBar = (
ttbToolBarDontCare,
ttbToolBarRoot,
ttbButtonNormal, ttbButtonHot, ttbButtonPressed, ttbButtonDisabled,
ttbButtonChecked, ttbButtonCheckedHot, ttbDropDownButtonNormal,
ttbDropDownButtonHot, ttbDropDownButtonPressed, ttbDropDownButtonDisabled,
ttbDropDownButtonChecked, ttbDropDownButtonCheckedHot,
ttbSplitButtonNormal, ttbSplitButtonHot, ttbSplitButtonPressed,
ttbSplitButtonDisabled, ttbSplitButtonChecked, ttbSplitButtonCheckedHot,
ttbSplitButtonDropDownNormal, ttbSplitButtonDropDownHot,
ttbSplitButtonDropDownPressed, ttbSplitButtonDropDownDisabled,
ttbSplitButtonDropDownChecked, ttbSplitButtonDropDownCheckedHot,
ttbSeparatorNormal, ttbSeparatorHot, ttbSeparatorPressed, ttbSeparatorDisabled,
ttbSeparatorChecked, ttbSeparatorCheckedHot, ttbSeparatorVertNormal,
ttbSeparatorVertHot, ttbSeparatorVertPressed, ttbSeparatorVertDisabled,
ttbSeparatorVertChecked, ttbSeparatorVertCheckedHot
);
// 'ToolTip' theme data
TThemedToolTip = (
tttToolTipDontCare,
tttToolTipRoot,
tttStandardNormal, tttStandardLink,
tttStandardTitleNormal, tttStandardTitleLink,
tttBaloonNormal, tttBaloonLink,
tttBaloonTitleNormal, tttBaloonTitleLink,
tttCloseNormal, tttCloseHot, tttClosePressed
);
// 'TrackBar' theme data
TThemedTrackBar = (
ttbTrackBarDontCare,
ttbTrackBarRoot,
ttbTrack,
ttbTrackVert,
ttbThumbNormal, ttbThumbHot, ttbThumbPressed, ttbThumbFocused, ttbThumbDisabled,
ttbThumbBottomNormal, ttbThumbBottomHot, ttbThumbBottomPressed, ttbThumbBottomFocused, ttbThumbBottomDisabled,
ttbThumbTopNormal, ttbThumbTopHot, ttbThumbTopPressed, ttbThumbTopFocused, ttbThumbTopDisabled,
ttbThumbVertNormal, ttbThumbVertHot, ttbThumbVertPressed, ttbThumbVertFocused, ttbThumbVertDisabled,
ttbThumbLeftNormal, ttbThumbLeftHot, ttbThumbLeftPressed, ttbThumbLeftFocused, ttbThumbLeftDisabled,
ttbThumbRightNormal, ttbThumbRightHot, ttbThumbRightPressed, ttbThumbRightFocused, ttbThumbRightDisabled,
ttbThumbTics,
ttbThumbTicsVert
);
// 'TrayNotify' theme data
TThemedTrayNotify = (
ttnTrayNotifyDontCare,
ttnTrayNotifyRoot,
ttnBackground,
ttnAnimBackground
);
// 'Treeview' theme data
TThemedTreeview = (
ttTreeviewDontCare,
ttTreeviewRoot,
ttItemNormal, ttItemHot, ttItemSelected, ttItemDisabled, ttItemSelectedNotFocus,
ttGlyphClosed, ttGlyphOpened,
ttBranch
);
// 'Window' theme data
TThemedWindow = (
twWindowDontCare,
twWindowRoot,
twCaptionActive, twCaptionInactive, twCaptionDisabled,
twSmallCaptionActive, twSmallCaptionInactive, twSmallCaptionDisabled,
twMinCaptionActive, twMinCaptionInactive, twMinCaptionDisabled,
twSmallMinCaptionActive, twSmallMinCaptionInactive, twSmallMinCaptionDisabled,
twMaxCaptionActive, twMaxCaptionInactive, twMaxCaptionDisabled,
twSmallMaxCaptionActive, twSmallMaxCaptionInactive, twSmallMaxCaptionDisabled,
twFrameLeftActive, twFrameLeftInactive,
twFrameRightActive, twFrameRightInactive,
twFrameBottomActive, twFrameBottomInactive,
twSmallFrameLeftActive, twSmallFrameLeftInactive,
twSmallFrameRightActive, twSmallFrameRightInactive,
twSmallFrameBottomActive, twSmallFrameBottomInactive,
twSysButtonNormal, twSysButtonHot, twSysButtonPushed, twSysButtonDisabled,
twMDISysButtonNormal, twMDISysButtonHot, twMDISysButtonPushed, twMDISysButtonDisabled,
twMinButtonNormal, twMinButtonHot, twMinButtonPushed, twMinButtonDisabled,
twMDIMinButtonNormal, twMDIMinButtonHot, twMDIMinButtonPushed, twMDIMinButtonDisabled,
twMaxButtonNormal, twMaxButtonHot, twMaxButtonPushed, twMaxButtonDisabled,
twCloseButtonNormal, twCloseButtonHot, twCloseButtonPushed, twCloseButtonDisabled,
twSmallCloseButtonNormal, twSmallCloseButtonHot, twSmallCloseButtonPushed, twSmallCloseButtonDisabled,
twMDICloseButtonNormal, twMDICloseButtonHot, twMDICloseButtonPushed, twMDICloseButtonDisabled,
twRestoreButtonNormal, twRestoreButtonHot, twRestoreButtonPushed, twRestoreButtonDisabled,
twMDIRestoreButtonNormal, twMDIRestoreButtonHot, twMDIRestoreButtonPushed, twMDIRestoreButtonDisabled,
twHelpButtonNormal, twHelpButtonHot, twHelpButtonPushed, twHelpButtonDisabled,
twMDIHelpButtonNormal, twMDIHelpButtonHot, twMDIHelpButtonPushed, twMDIHelpButtonDisabled,
twHorzScrollNormal, twHorzScrollHot, twHorzScrollPushed, twHorzScrollDisabled,
twHorzThumbNormal, twHorzThumbHot, twHorzThumbPushed, twHorzThumbDisabled,
twVertScrollNormal, twVertScrollHot, twVertScrollPushed, twVertScrollDisabled,
twVertThumbNormal, twVertThumbHot, twVertThumbPushed, twVertThumbDisabled,
twDialog,
twCaptionSizingTemplate,
twSmallCaptionSizingTemplate,
twFrameLeftSizingTemplate,
twSmallFrameLeftSizingTemplate,
twFrameRightSizingTemplate,
twSmallFrameRightSizingTemplate,
twFrameBottomSizingTemplate,
twSmallFrameBottomSizingTemplate
);
TThemeData = array[TThemedElement] of HTHEME;
PThemedElementDetails = ^TThemedElementDetails;
TThemedElementDetails = record
Element: TThemedElement;
Part,
State: Integer;
end;
TThemeServices = class(TObject)
private
FNewComCtrls,
FThemesAvailable,
FUseThemes: Boolean;
FThemeData: TThemeData;
FOnThemeChange: TNotifyEvent;
function GetTheme(Element: TThemedElement): HTHEME;
function GetThemesEnabled: Boolean;
protected
procedure DoOnThemeChange; virtual;
procedure UnloadThemeData;
public
constructor Create; virtual;
destructor Destroy; override;
procedure ApplyThemeChange;
function ColorToRGB(Color: TColor;
Details: PThemedElementDetails = nil): COLORREF;
function ContentRect(DC: HDC; Details: TThemedElementDetails;
BoundingRect: TRect): TRect;
procedure DrawEdge(DC: HDC; Details: TThemedElementDetails;
const R: TRect; Edge, Flags: Cardinal;
ContentRect: PRect = nil);
procedure DrawElement(DC: HDC; Details: TThemedElementDetails;
const R: TRect; ClipRect: PRect = nil);
procedure DrawIcon(DC: HDC; Details: TThemedElementDetails;
const R: TRect; himl: HIMAGELIST; Index: Integer);
procedure DrawParentBackground(Window: HWND; Target: HDC;
Details: PThemedElementDetails; OnlyIfTransparent: Boolean;
Bounds: PRect = nil);
procedure DrawText(DC: HDC; Details: TThemedElementDetails;
const S: WideString; R: TRect; Flags, Flags2: Cardinal);
function GetElementDetails(Detail: TThemedButton): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedClock): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedComboBox): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedEdit): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedExplorerBar): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedHeader): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedListView): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedMenu): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedPage): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedProgress): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedRebar): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedScrollBar): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedSpin): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedStartPanel): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedStatus): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedTab): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedTaskBand): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedTaskBar): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedToolBar): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedToolTip): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedTrackBar): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedTrayNotify): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedTreeview): TThemedElementDetails; overload;
function GetElementDetails(Detail: TThemedWindow): TThemedElementDetails; overload;
function HasTransparentParts(Details: TThemedElementDetails): Boolean;
procedure PaintBorder(Control: TWinControl; EraseLRCorner: Boolean);
procedure UpdateThemes;
property Theme[Element: TThemedElement]: HTHEME read GetTheme;
property ThemesAvailable: Boolean read FThemesAvailable;
property ThemesEnabled: Boolean read GetThemesEnabled;
property OnThemeChange: TNotifyEvent read FOnThemeChange write FOnThemeChange;
end;
TThemeServicesClass = class of TThemeServices;
function ThemeServices: TThemeServices;
var
ThemeServicesClass: TThemeServicesClass = TThemeServices;
implementation
uses
SysUtils, ComCtrls;
const
Copyright: string = 'Theme manager
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -