{********************************************************************} { } { Developer Express Visual Component Library } { ExpressXPThemeManager } { } { Copyright (c) 1998-2007 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 EXPRESSXPTHEMEMANAGER 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 dxUxTheme; {$I cxVer.inc} interface uses {$IFDEF CLR} System.Text, System.Runtime.InteropServices, {$ENDIF} {$IFDEF DELPHI6} Types, {$ENDIF} Windows, Classes, CommCtrl; const // DrawThemeText() flags DTT_GRAYED = $1; // HitTestThemeBackground(), HitTestThemeBackgroundRegion() flags HTTB_BACKGROUNDSEG = $0; // Fixed border hit test option HTTB_FIXEDBORDER = $2; // Caption hit test option HTTB_CAPTION = $4; // Resizing border hit test flags HTTB_RESIZINGBORDER_LEFT = $10; HTTB_RESIZINGBORDER_TOP = $20; HTTB_RESIZINGBORDER_RIGHT = $40; HTTB_RESIZINGBORDER_BOTTOM = $80; HTTB_RESIZINGBORDER = HTTB_RESIZINGBORDER_LEFT or HTTB_RESIZINGBORDER_TOP or HTTB_RESIZINGBORDER_RIGHT or HTTB_RESIZINGBORDER_BOTTOM; HTTB_SIZINGTEMPLATE = $100; HTTB_SYSTEMSIZINGMARGINS = $200; (*// DrawThemeLine() flags DTL_LEFT = $1; DTL_TOP = $2; DTL_RIGHT = $4; DTL_BOTTOM = $8;*) MAX_INTLIST_COUNT = 10; ETDT_DISABLE = $1; ETDT_ENABLE = $2; ETDT_USETABTEXTURE = $4; ETDT_ENABLETAB = ETDT_ENABLE or ETDT_USETABTEXTURE; // flags to control theming within an app STAP_ALLOW_NONCLIENT = $1; STAP_ALLOW_CONTROLS = $2; STAP_ALLOW_WEBCONTENT = $4; SZ_THDOCPROP_DISPLAYNAME = 'DisplayName'; SZ_THDOCPROP_CANONICALNAME = 'ThemeName'; SZ_THDOCPROP_TOOLTIP = 'ToolTip'; SZ_THDOCPROP_AUTHOR = 'author'; TS_MIN = 0; TS_TRUE = 1; TS_DRAW = 2; //vista extension DTT_TEXTCOLOR = (1 shl 0); // crText has been specified DTT_BORDERCOLOR = (1 shl 1); // crBorder has been specified DTT_SHADOWCOLOR = (1 shl 2); // crShadow has been specified DTT_SHADOWTYPE = (1 shl 3); // iTextShadowType has been specified DTT_SHADOWOFFSET = (1 shl 4); // ptShadowOffset has been specified DTT_BORDERSIZE = (1 shl 5); // iBorderSize has been specified DTT_FONTPROP = (1 shl 6); // iFontPropId has been specified DTT_COLORPROP = (1 shl 7); // iColorPropId has been specified DTT_STATEID = (1 shl 8); // IStateId has been specified DTT_CALCRECT = (1 shl 9); // Use pRect as and in/out parameter DTT_APPLYOVERLAY = (1 shl 10); // fApplyOverlay has been specified DTT_GLOWSIZE = (1 shl 11); // iGlowSize has been specified DTT_CALLBACK = (1 shl 12); // pfnDrawTextCallback has been specified DTT_COMPOSITED = (1 shl 13); // Draws text with antialiased alpha (needs a DIB section) type {$IFDEF CLR} Pointer = IntPtr; PRect = IntPtr; {$ENDIF} TdxTheme = THandle; TdxThemeSize = Integer; TdxMargins = record cxLeftWidth: Integer; cxRightWidth: Integer; cyTopHeight: Integer; cyBottomHeight: Integer; end; PdxMargins = ^TdxMargins; TdxIntList = record iValueCount: Integer; iValues: array[0..MAX_INTLIST_COUNT - 1] of Integer; end; PdxIntList = ^TdxIntList; TdxPropertyOrigin = (PO_STATE, PO_PART, PO_CLASS, PO_GLOBAL, PO_NOTFOUND); // vista extention TdxPaintBuffer = THandle; TdxDTTOpts = packed record dwSize: DWORD; dwFlags: DWORD; crText: COLORREF; crBorder: COLORREF; crShadow: COLORREF; iTextShadowType: Integer; ptShadowOffset: TPoint; iBorderSize: Integer; iFontPropId: Integer; iColorPropId: Integer; iStateId: Integer; fApplyOverlay: BOOL; iGlowSize: Integer; pfnDrawTextCallback: DWORD; lParam: LPARAM; end; PdxDTTOpts = ^TdxDTTOpts; function OpenThemeData(hWnd: HWND; pszClassList: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}): TdxTheme; function CloseThemeData(hTheme: TdxTheme): HRESULT; // functions for basic drawing support {$IFNDEF CLR} function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pRect: PRect; pClipRect: PRect = nil): HRESULT; overload; function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRect = nil): HRESULT; overload; function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect; const pClipRect: TRect): HRESULT; overload; {$ELSE} function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect; const pClipRect: TRect): HRESULT; overload; function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect): HRESULT; overload; {$ENDIF} {$IFNDEF CLR} function DrawThemeText(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszText: PWideChar; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; pRect: PRect): HRESULT; overload; function DrawThemeText(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszText: string; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; overload; {$ELSE} function DrawThemeText(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszText: string; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; {$ENDIF} function DrawThemeTextEx(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pszText: WideString; iCharCount: Integer; dwTextFlags: DWORD; const pRect: TRect; const pOptions: TdxDTTOpts): HRESULT; function GetThemeBackgroundContentRect(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const BoundingRect: TRect; out ContentRect: TRect): HRESULT; function GetThemeBackgroundExtent(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pContentRect: PRect{$ELSE}const pContentRect: TRect{$ENDIF}; out ExtentRect: TRect): HRESULT; {$IFNDEF CLR} function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; prc: PRect; eSize: TdxThemeSize; psz: PSize): HRESULT; overload; {$ENDIF} function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const prc: TRect; eSize: TdxThemeSize; out psz: TSize): HRESULT; overload; function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; eSize: TdxThemeSize; out psz: TSize): HRESULT; overload; function GetThemeTextExtent(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszTextL: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}; iCharCount: Integer; dwTextFlags: DWORD; {$IFNDEF CLR}pBoundingRect: PRect{$ELSE}const pBoundingRect: TRect{$ENDIF}; out ExtentRect: TRect): HRESULT; function GetThemeTextMetrics(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; out tm: TEXTMETRIC): HRESULT; function GetThemeBackgroundRegion(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}; out Region: HRGN): HRESULT; function HitTestThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; dwOptions: DWORD; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}; hRgn: HRGN; ptTest: TPoint; out wHitTestCode: WORD): HRESULT; {$IFNDEF CLR} function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pDestRect: PRect; uEdge, uFlags: UINT; pContentRect: PRect): HRESULT; overload; {$ENDIF} function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT; out pContentRect: TRect): HRESULT; overload; function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT): HRESULT; overload; function DrawThemeIcon(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}; himl: HIMAGELIST; iImageIndex: Integer): HRESULT; function IsThemePartDefined(hTheme: TdxTheme; iPartId, iStateId: Integer): BOOL; function IsThemeBackgroundPartiallyTransparent(hTheme: TdxTheme; iPartId, iStateId: Integer): BOOL; function DrawThemeParentBackground(hWnd: HWND; DC: HDC; const prc: TRect): HRESULT; // lower-level theme information services function GetThemeColor(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Color: TColorRef): HRESULT; function GetThemeMetric(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; function GetThemeString(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxBuffChars: Integer): HRESULT; function GetThemeBool(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out fVal{???}: BOOL): HRESULT; // TODO function GetThemeInt(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; function GetThemeEnumValue(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; function GetThemePosition(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Point: TPoint): HRESULT; function GetThemeFont(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; out Font: {$IFNDEF CLR}LOGFONTW{$ELSE}LOGFONT{$ENDIF}): HRESULT; function GetThemeRect(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Rect: TRect): HRESULT; function GetThemeMargins(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; {$IFNDEF CLR}prc: PRect{$ELSE}const prc: TRect{$ENDIF}; out Margins: TdxMargins): HRESULT; function GetThemeIntList(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out IntList: TdxIntList): HRESULT; function GetThemePropertyOrigin(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Origin: TdxPropertyOrigin): HRESULT; function SetWindowTheme(hWnd: HWND; pszSubAppName, pszSubIdList: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}): HRESULT; function GetThemeFilename(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszThemeFileName: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxBuffChars: Integer): HRESULT; function GetThemeSysColor(hTheme: TdxTheme; iColorId: Integer): COLORREF; function GetThemeSysColorBrush(hTheme: TdxTheme; iColorId: Integer): HBRUSH; function GetThemeSysBool(hTheme: TdxTheme; iBoolId: Integer): BOOL; function GetThemeSysSize(hTheme: TdxTheme; iSizeId: Integer): Integer; function GetThemeSysFont(hTheme: TdxTheme; iFontId: Integer; out lf: {$IFNDEF CLR}LOGFONTW{$ELSE}LOGFONT{$ENDIF}): HRESULT; function GetThemeSysString(hTheme: TdxTheme; iStringId: Integer; pszStringBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxStringChars: Integer): HRESULT; function GetThemeSysInt(hTheme: TdxTheme; iIntId: Integer; var iValue: Integer): HRESULT; // TODO var -> out ??? function IsThemeActive: BOOL; function IsAppThemed: BOOL; function GetWindowTheme(hWnd: HWND): TdxTheme; function EnableThemeDialogTexture(hWnd: HWND; dwFlags: DWORD): HRESULT; function IsThemeDialogTextureEnabled(hWnd: HWND): BOOL; function GetThemeAppProperties: DWORD; procedure SetThemeAppProperties(dwFlags: DWORD); function GetCurrentThemeName(pszThemeFileName: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxNameChars: Integer; pszColorBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxColorChars: Integer; pszSizeBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxSizeChars: Integer): HRESULT; function GetThemeDocumentationProperty( {$IFNDEF CLR} pszThemeName, pszPropertyName, pszValueBuff: PWideChar; {$ELSE} pszThemeName, pszPropertyName: string; pszValueBuff: StringBuilder; {$ENDIF} cchMaxValChars: Integer): HRESULT; //vista extention {$IFNDEF CLR} type BP_BUFFERFORMAT = ( BPBF_COMPATIBLEBITMAP, BPBF_DIB, BPBF_TOPDOWNDIB, BPBF_TOPDOWNMONODIB); TBPBufferFormat = BP_BUFFERFORMAT; BP_PAINTPARAMS = packed record cbSize: DWORD; dwFlags: DWORD; // BPPF_ flags prcExclude: PRect; pBlendFunction: Pointer; end; TBPPaintParams = BP_PAINTPARAMS; PBPPaintParams = ^TBPPaintParams; function BufferedPaintInit: HRESULT; function BufferedPaintUnInit: HRESULT; function BeginBufferedPaint(hdcTarget: HDC; prcTarget: PRect; dwFormat: TBPBufferFormat; pPaintParams: PBPPaintParams; out dc: HDC): TdxPaintBuffer; function EndBufferedPaint(hBufferedPaint: TdxPaintBuffer; fUpdateTarget: BOOL): HRESULT; function BufferedPaintSetAlpha(hBufferedPaint: TdxPaintBuffer; prc: PRect; alpha: Byte): HRESULT; {$ENDIF} function IsThemeLibraryLoaded: Boolean; function IsWindowsXPOrLater: Boolean; implementation {$IFNDEF CLR} uses ComCtrls; {$ENDIF} const ThemeLibraryName = 'UxTheme.dll'; {$IFNDEF CLR} type TCloseThemeData = function(hTheme: TdxTheme): HRESULT; stdcall; TDrawThemeBackground = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pRect: PRect; pClipRect: PRect = nil): HRESULT; stdcall; TDrawThemeEdge = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pDestRect: PRect; uEdge, uFlags: UINT; pContentRect: PRect): HRESULT; stdcall; TDrawThemeIcon = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pRect: PRect; himl: HIMAGELIST; iImageIndex: Integer): HRESULT; stdcall; TDrawThemeParentBackground = function(hWnd: HWND; DC: HDC; const prc: TRect): HRESULT; stdcall; TDrawThemeText = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszText: PWideChar; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; pRect: PRect): HRESULT; stdcall; TDrawThemeTextEx = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pszText: WideString; iCharCount: Integer; dwTextFlags: DWORD; pRect: PRect; const pOptions: TdxDTTOpts): HRESULT; stdcall; TEnableThemeDialogTexture = function(hWnd: HWND; dwFlags: DWORD): HRESULT; stdcall; TGetCurrentThemeName = function(pszThemeFileName: PWideChar; cchMaxNameChars: Integer; pszColorBuff: PWideChar; cchMaxColorChars: Integer; pszSizeBuff: PWideChar; cchMaxSizeChars: Integer): HRESULT; stdcall; TGetThemeAppProperties = function: DWORD; stdcall; TGetThemeBackgroundContentRect = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const BoundingRect: TRect; out ContentRect: TRect): HRESULT; stdcall; TGetThemeBackgroundRegion = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pRect: PRect; out Region: HRGN): HRESULT; stdcall; TGetThemeBackgroundExtent = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pContentRect: PRect; out ExtentRect: TRect): HRESULT; stdcall; TGetThemeBool = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out fVal: BOOL): HRESULT; stdcall; TGetThemeColor = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Color: TColorRef): HRESULT; stdcall; TGetThemeDocumentationProperty = function(pszThemeName, pszPropertyName, pszValueBuff: PWideChar; cchMaxValChars: Integer): HRESULT; stdcall; TGetThemeEnumValue = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; stdcall; TGetThemeFilename = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszThemeFileName: PWideChar; cchMaxBuffChars: Integer): HRESULT; stdcall; TGetThemeFont = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; out pFont: LOGFONTW): HRESULT; stdcall; TGetThemeInt = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; stdcall; TGetThemeIntList = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out IntList: TdxIntList): HRESULT; stdcall; TGetThemeMargins = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; prc: PRect; out Margins: TdxMargins): HRESULT; stdcall; TGetThemeMetric = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; stdcall; TGetThemePartSize = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; prc: PRect; eSize: TdxThemeSize; psz: PSize): HRESULT; stdcall; TGetThemePosition = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Point: TPoint): HRESULT; stdcall; TGetThemePropertyOrigin = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Origin: TdxPropertyOrigin): HRESULT; stdcall; TGetThemeRect = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Rect: TRect): HRESULT; stdcall; TGetThemeString = function(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszBuff: PWideChar; cchMaxBuffChars: Integer): HRESULT; stdcall; TGetThemeSysBool = function(hTheme: TdxTheme; iBoolId: Integer): BOOL; stdcall; TGetThemeSysColor = function(hTheme: TdxTheme; iColorId: Integer): COLORREF; stdcall; TGetThemeSysColorBrush = function(hTheme: TdxTheme; iColorId: Integer): HBRUSH; stdcall; TGetThemeSysFont = function(hTheme: TdxTheme; iFontId: Integer; out lf: LOGFONTW): HRESULT; stdcall; TGetThemeSysInt = function(hTheme: TdxTheme; iIntId: Integer; var iValue: Integer): HRESULT; stdcall; TGetThemeSysSize = function(hTheme: TdxTheme; iSizeId: Integer): Integer; stdcall; TGetThemeSysString = function(hTheme: TdxTheme; iStringId: Integer; pszStringBuff: PWideChar; cchMaxStringChars: Integer): HRESULT; stdcall; TGetThemeTextExtent = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszTextL: PWideChar; iCharCount: Integer; dwTextFlags: DWORD; pBoundingRect: PRect; out ExtentRect: TRect): HRESULT; stdcall; TGetThemeTextMetrics = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; out tm: TEXTMETRIC): HRESULT; stdcall; TGetWindowTheme = function(hWnd: HWND): TdxTheme;stdcall; THitTestThemeBackground = function(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; dwOptions: DWORD; pRect : PRect; hRgn: HRGN; ptTest: TPoint; out wHitTestCode: WORD): HRESULT; stdcall; TIsAppThemed = function: BOOL; stdcall; TIsThemeActive = function: BOOL; stdcall; TIsThemePartDefined = function(hTheme: TdxTheme; iPartId, iStateId: Integer): BOOL; stdcall; TIsThemeBackgroundPartiallyTransparent = function(hTheme: TdxTheme; iPartId, iStateId: Integer): BOOL; stdcall; TIsThemeDialogTextureEnabled = function(hWnd: HWND): BOOL; stdcall; TOpenThemeData = function(hWnd: HWND; pszClassList: PWideChar): TdxTheme; stdcall; TSetThemeAppProperties = procedure(dwFlags: DWORD); stdcall; TSetWindowTheme = function(hWnd: HWND; pszSubAppName, pszSubIdList: PWideChar): HRESULT; stdcall; //vista extention TBufferedPaintInit = function: HRESULT; stdcall; TBufferedPaintUnInit = function: HRESULT; stdcall; TBeginBufferedPaint = function(hdcTarget: HDC; prcTarget: PRect; dwFormat: TBPBufferFormat; pPaintParams: PBPPaintParams; out dc: HDC): TdxPaintBuffer; stdcall; TEndBufferedPaint = function(hBufferedPaint: TdxPaintBuffer; fUpdateTarget: BOOL): HRESULT; stdcall; TBufferedPaintSetAlpha = function(hBufferedPaint: TdxPaintBuffer; prc: PRect; alpha: Byte): HRESULT; stdcall; TThemeLibraryMethodPointersKeeper = record FCloseThemeData: TCloseThemeData; FDrawThemeBackground: TDrawThemeBackground; FDrawThemeEdge: TDrawThemeEdge; FDrawThemeIcon: TDrawThemeIcon; FDrawThemeParentBackground: TDrawThemeParentBackground; FDrawThemeText: TDrawThemeText; FDrawThemeTextEx: TDrawThemeTextEx; FEnableThemeDialogTexture: TEnableThemeDialogTexture; FGetCurrentThemeName: TGetCurrentThemeName; FGetThemeAppProperties: TGetThemeAppProperties; FGetThemeBackgroundContentRect: TGetThemeBackgroundContentRect; FGetThemeBackgroundRegion: TGetThemeBackgroundRegion; FGetThemeBackgroundExtent: TGetThemeBackgroundExtent; FGetThemeBool: TGetThemeBool; FGetThemeColor: TGetThemeColor; FGetThemeDocumentationProperty: TGetThemeDocumentationProperty; FGetThemeEnumValue: TGetThemeEnumValue; FGetThemeFilename: TGetThemeFilename; FGetThemeFont: TGetThemeFont; FGetThemeInt: TGetThemeInt; FGetThemeIntList: TGetThemeIntList; FGetThemeMargins: TGetThemeMargins; FGetThemeMetric: TGetThemeMetric; FGetThemePartSize: TGetThemePartSize; FGetThemePosition: TGetThemePosition; FGetThemePropertyOrigin: TGetThemePropertyOrigin; FGetThemeRect: TGetThemeRect; FGetThemeString: TGetThemeString; FGetThemeSysBool: TGetThemeSysBool; FGetThemeSysColor: TGetThemeSysColor; FGetThemeSysColorBrush: TGetThemeSysColorBrush; FGetThemeSysFont: TGetThemeSysFont; FGetThemeSysInt: TGetThemeSysInt; FGetThemeSysSize: TGetThemeSysSize; FGetThemeSysString: TGetThemeSysString; FGetThemeTextExtent: TGetThemeTextExtent; FGetThemeTextMetrics: TGetThemeTextMetrics; FGetWindowTheme: TGetWindowTheme; FHitTestThemeBackground: THitTestThemeBackground; FIsAppThemed: TIsAppThemed; FIsThemeActive: TIsThemeActive; FIsThemePartDefined: TIsThemePartDefined; FIsThemeBackgroundPartiallyTransparent: TIsThemeBackgroundPartiallyTransparent; FIsThemeDialogTextureEnabled: TIsThemeDialogTextureEnabled; FOpenThemeData: TOpenThemeData; FSetThemeAppProperties: TSetThemeAppProperties; FSetWindowTheme: TSetWindowTheme; //vista extention FBufferedPaintInit: TBufferedPaintInit; FBufferedPaintUnInit: TBufferedPaintUnInit; FBeginBufferedPaint: TBeginBufferedPaint; FEndBufferedPaint: TEndBufferedPaint; FBufferedPaintSetAlpha: TBufferedPaintSetAlpha; end; {$ELSE} [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'OpenThemeData')] function _OpenThemeData(hwnd: HWND; pszClassList: string): TdxTheme; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'CloseThemeData')] function _CloseThemeData(hTheme: TdxTheme): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeBackground')] function _DrawThemeBackground(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; const pClipRect: TRect): HRESULT; overload; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeBackground')] function _DrawThemeBackground(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: IntPtr): HRESULT; overload; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeText')] function _DrawThemeText(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; pszText: string; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeTextEx')] function _DrawThemeTextEx(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; pszText: string; iCharCount: Integer; dwTextFlags: DWORD; const pRect: TRect; const pOptions: TdxDTTOpts): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeBackgroundContentRect')] function _GetThemeBackgroundContentRect(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pBoundingRect: TRect; out pContentRect: TRect): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeBackgroundExtent')] function _GetThemeBackgroundExtent(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pContentRect: TRect; out pExtentRect: TRect): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemePartSize')] function _GetThemePartSize(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const prc: TRect; eSize: TdxThemeSize; out psz: TSize): HRESULT; overload; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeTextExtent')] function _GetThemeTextExtent(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; pszText: string; iCharCount: Integer; dwTextFlags: DWORD; const pBoundingRect: TRect; out pExtentRect: TRect): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeTextMetrics')] function _GetThemeTextMetrics(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; out ptm: TEXTMETRIC): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeBackgroundRegion')] function _GetThemeBackgroundRegion(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; out pRegion: HRGN): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'HitTestThemeBackground')] function _HitTestThemeBackground(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; dwOptions: DWORD; const pRect: TRect; hrgn: HRGN; ptTest: TPoint; out pwHitTestCode: WORD): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeEdge')] function _DrawThemeEdge(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT; out pContentRect: TRect): HRESULT; overload; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeIcon')] function _DrawThemeIcon(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; himl: HIMAGELIST; iImageIndex: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'IsThemePartDefined')] function _IsThemePartDefined(hTheme: TdxTheme; iPartId, iStateId: Integer): BOOL; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'IsThemeBackgroundPartiallyTransparent')] function _IsThemeBackgroundPartiallyTransparent(hTheme: TdxTheme; iPartId, iStateId: Integer): BOOL; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'DrawThemeParentBackground')] function _DrawThemeParentBackground(hwnd: HWND; hdc: HDC; const prc: TRect): HRESULT; overload; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeColor')] function _GetThemeColor(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out pColor: COLORREF): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeMetric')] function _GetThemeMetric(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId, iPropId: Integer; out piVal: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeString')] function _GetThemeString(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszBuff: StringBuilder; cchMaxBuffChars: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeBool')] function _GetThemeBool(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out pfVal: BOOL): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeInt')] function _GetThemeInt(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out piVal: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeEnumValue')] function _GetThemeEnumValue(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out piVal: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemePosition')] function _GetThemePosition(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out pPoint: TPoint): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeFont')] function _GetThemeFont(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId, iPropId: Integer; out pFont: LOGFONT): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeRect')] function _GetThemeRect(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out pRect: TRect): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeMargins')] function _GetThemeMargins(hTheme: TdxTheme; hdc: HDC; iPartId, iStateId, iPropId: Integer; const prc: TRect; out pMargins: TdxMargins): HRESULT; overload; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeIntList')] function _GetThemeIntList(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out pIntList: TdxIntList): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemePropertyOrigin')] function _GetThemePropertyOrigin(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out pOrigin: TdxPropertyOrigin): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'SetWindowTheme')] function _SetWindowTheme(hwnd: HWND; pszSubAppName: string; pszSubIdList: string): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeFilename')] function _GetThemeFilename(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszThemeFileName: StringBuilder; cchMaxBuffChars: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysColor')] function _GetThemeSysColor(hTheme: TdxTheme; iColorId: Integer): COLORREF; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysColorBrush')] function _GetThemeSysColorBrush(hTheme: TdxTheme; iColorId: Integer): HBRUSH; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysBool')] function _GetThemeSysBool(hTheme: TdxTheme; iBoolId: Integer): BOOL; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysSize')] function _GetThemeSysSize(hTheme: TdxTheme; iSizeId: Integer): Integer; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysFont')] function _GetThemeSysFont(hTheme: TdxTheme; iFontId: Integer; out plf: LOGFONT): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysString')] function _GetThemeSysString(hTheme: TdxTheme; iStringId: Integer; pszStringBuff: StringBuilder; cchMaxStringChars: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeSysInt')] function _GetThemeSysInt(hTheme: TdxTheme; iIntId: Integer; out piValue: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'IsThemeActive')] function _IsThemeActive: BOOL; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'IsAppThemed')] function _IsAppThemed: BOOL; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetWindowTheme')] function _GetWindowTheme(hwnd: HWND): TdxTheme; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'EnableThemeDialogTexture')] function _EnableThemeDialogTexture(hwnd: HWND; dwFlags: DWORD): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'IsThemeDialogTextureEnabled')] function _IsThemeDialogTextureEnabled(hwnd: HWND): BOOL; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeAppProperties')] [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeAppProperties')] function _GetThemeAppProperties: DWORD; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'SetThemeAppProperties')] procedure _SetThemeAppProperties(dwFlags: DWORD); external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetCurrentThemeName')] function _GetCurrentThemeName(pszThemeFileName: StringBuilder; cchMaxNameChars: Integer; pszColorBuff: StringBuilder; cchMaxColorChars: Integer; pszSizeBuff: StringBuilder; cchMaxSizeChars: Integer): HRESULT; external; [DllImport(ThemeLibraryName, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'GetThemeDocumentationProperty')] function _GetThemeDocumentationProperty(pszThemeName, pszPropertyName: string; pszValueBuff: StringBuilder; cchMaxValChars: Integer): HRESULT; external; {$ENDIF} var FIsWindowsXPOrLater: Boolean; FThemeLibrary: HMODULE = 0; {$IFNDEF CLR} FThemeLibraryMethodPointersKeeper: TThemeLibraryMethodPointersKeeper; {$ENDIF} function OpenThemeData(hWnd: HWND; pszClassList: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}): TdxTheme; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FOpenThemeData(hWnd, pszClassList); {$ELSE} Result := _OpenThemeData(hWnd, pszClassList); {$ENDIF} end; function CloseThemeData(hTheme: TdxTheme): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FCloseThemeData(hTheme); {$ELSE} Result := _CloseThemeData(hTheme); {$ENDIF} end; function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR} pRect: PRect; pClipRect: PRect = nil {$ELSE} const pRect: TRect; const pClipRect: TRect {$ENDIF}): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FDrawThemeBackground(hTheme, DC, iPartId, iStateId, pRect, pClipRect); {$ELSE} Result := _DrawThemeBackground(hTheme, DC, iPartId, iStateId, pRect, pClipRect); {$ENDIF} end; {$IFNDEF CLR} function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: PRect = nil): HRESULT; begin Result := DrawThemeBackground(hTheme, DC, iPartId, iStateId, @pRect, pClipRect); end; function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect; const pClipRect: TRect): HRESULT; begin Result := DrawThemeBackground(hTheme, DC, iPartId, iStateId, @pRect, @pClipRect); end; {$ELSE} function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pRect: TRect): HRESULT; begin Result := _DrawThemeBackground(hTheme, DC, iPartId, iStateId, pRect, nil); end; {$ENDIF} function DrawThemeText(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszText: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FDrawThemeText(hTheme, DC, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect); {$ELSE} Result := _DrawThemeText(hTheme, DC, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect); {$ENDIF} end; {$IFNDEF CLR} function DrawThemeText(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszText: string; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; begin Result := DrawThemeText(hTheme, DC, iPartId, iStateId, PWideChar(WideString(pszText)), iCharCount, dwTextFlags, dwTextFlags2, @pRect); end; {$ENDIF} //vista extention function DrawThemeTextEx(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pszText: WideString; iCharCount: Integer; dwTextFlags: DWORD; const pRect: TRect; const pOptions: TdxDTTOpts): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FDrawThemeTextEx(hTheme, DC, iPartId, iStateId, PWideChar(pszText), iCharCount, dwTextFlags, @pRect, pOptions); {$ELSE} Result := _DrawThemeTextEx(hTheme, DC, iPartId, iStateId, pszText, iCharCount, dwTextFlags, pRect, pOptions); {$ENDIF} end; function GetThemeBackgroundContentRect(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const BoundingRect: TRect; out ContentRect: TRect): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeBackgroundContentRect(hTheme, DC, iPartId, iStateId, BoundingRect, ContentRect); {$ELSE} Result := _GetThemeBackgroundContentRect(hTheme, DC, iPartId, iStateId, BoundingRect, ContentRect); {$ENDIF} end; function GetThemeBackgroundExtent(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pContentRect: PRect{$ELSE}const pContentRect: TRect{$ENDIF}; out ExtentRect: TRect): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeBackgroundExtent(hTheme, DC, iPartId, iStateId, pContentRect, ExtentRect); {$ELSE} Result := _GetThemeBackgroundExtent(hTheme, DC, iPartId, iStateId, pContentRect, ExtentRect); {$ENDIF} end; function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}prc: PRect{$ELSE}const prc: TRect{$ENDIF}; eSize: TdxThemeSize; {$IFNDEF CLR}psz: PSize{$ELSE}out psz: TSize{$ENDIF}): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemePartSize(hTheme, DC, iPartId, iStateId, prc, eSize, psz); {$ELSE} Result := _GetThemePartSize(hTheme, DC, iPartId, iStateId, prc, eSize, psz); {$ENDIF} end; {$IFNDEF CLR} function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const prc: TRect; eSize: TdxThemeSize; out psz: TSize): HRESULT; begin Result := GetThemePartSize(hTheme, DC, iPartId, iStateId, @prc, eSize, @psz); end; {$ENDIF} function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; eSize: TdxThemeSize; out psz: TSize): HRESULT; begin {$IFNDEF CLR} Result := GetThemePartSize(hTheme, DC, iPartId, iStateId, nil, eSize, @psz); {$ELSE} Result := GetThemePartSize(hTheme, DC, iPartId, iStateId, TRect.Empty, eSize, psz); {$ENDIF} end; function GetThemeTextExtent(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; pszTextL: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}; iCharCount: Integer; dwTextFlags: DWORD; {$IFNDEF CLR}pBoundingRect: PRect{$ELSE}const pBoundingRect: TRect{$ENDIF}; out ExtentRect: TRect): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeTextExtent(hTheme, DC, iPartId, iStateId, pszTextL, iCharCount, dwTextFlags, pBoundingRect, ExtentRect); {$ELSE} Result := _GetThemeTextExtent(hTheme, DC, iPartId, iStateId, pszTextL, iCharCount, dwTextFlags, pBoundingRect, ExtentRect); {$ENDIF} end; function GetThemeTextMetrics(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; out tm: TEXTMETRIC): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeTextMetrics(hTheme, DC, iPartId, iStateId, tm); {$ELSE} Result := _GetThemeTextMetrics(hTheme, DC, iPartId, iStateId, tm); {$ENDIF} end; function GetThemeBackgroundRegion(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}; out Region: HRGN): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeBackgroundRegion(hTheme, DC, iPartId, iStateId, pRect, Region); {$ELSE} Result := _GetThemeBackgroundRegion(hTheme, DC, iPartId, iStateId, pRect, Region); {$ENDIF} end; function HitTestThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; dwOptions: DWORD; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}; hRgn: HRGN; ptTest: TPoint; out wHitTestCode: WORD): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FHitTestThemeBackground(hTheme, DC, iPartId, iStateId, dwOptions, pRect, hRgn, ptTest, wHitTestCode); {$ELSE} Result := _HitTestThemeBackground(hTheme, DC, iPartId, iStateId, dwOptions, pRect, hRgn, ptTest, wHitTestCode); {$ENDIF} end; function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pDestRect: PRect{$ELSE}const pDestRect: TRect{$ENDIF}; uEdge, uFlags: UINT; {$IFNDEF CLR}pContentRect: PRect{$ELSE}out pContentRect: TRect{$ENDIF}): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FDrawThemeEdge(hTheme, DC, iPartId, iStateId, pDestRect, uEdge, uFlags, pContentRect); {$ELSE} Result := _DrawThemeEdge(hTheme, DC, iPartId, iStateId, pDestRect, uEdge, uFlags, pContentRect); {$ENDIF} end; {$IFNDEF CLR} function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT; out pContentRect: TRect): HRESULT; begin Result := DrawThemeEdge(hTheme, DC, iPartId, iStateId, @pDestRect, uEdge, uFlags, @pContentRect); end; {$ENDIF} function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT): HRESULT; var R: TRect; begin Result := DrawThemeEdge(hTheme, DC, iPartId, iStateId, pDestRect, uEdge, uFlags, R); end; function DrawThemeIcon(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer; {$IFNDEF CLR}pRect: PRect{$ELSE}const pRect: TRect{$ENDIF}; himl: HIMAGELIST; iImageIndex: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FDrawThemeIcon(hTheme, DC, iPartId, iStateId, pRect, himl, iImageIndex); {$ELSE} Result := _DrawThemeIcon(hTheme, DC, iPartId, iStateId, pRect, himl, iImageIndex); {$ENDIF} end; function IsThemePartDefined(hTheme: TdxTheme; iPartId: Integer; iStateId: Integer): BOOL; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FIsThemePartDefined(hTheme, iPartId, iStateId); {$ELSE} Result := _IsThemePartDefined(hTheme, iPartId, iStateId); {$ENDIF} end; function IsThemeBackgroundPartiallyTransparent(hTheme: TdxTheme; iPartId: Integer; iStateId: Integer): BOOL; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FIsThemeBackgroundPartiallyTransparent(hTheme, iPartId, iStateId); {$ELSE} Result := _IsThemeBackgroundPartiallyTransparent(hTheme, iPartId, iStateId); {$ENDIF} end; function DrawThemeParentBackground(hWnd: HWND; DC: HDC; const prc: TRect): HRESULT; var AFontHandle: HFONT; begin AFontHandle := GetCurrentObject(DC, OBJ_FONT); {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FDrawThemeParentBackground(hWnd, DC, prc); {$ELSE} Result := _DrawThemeParentBackground(hWnd, DC, prc); {$ENDIF} SelectObject(DC, AFontHandle); end; function GetThemeColor(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Color: TColorRef): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeColor(hTheme, iPartId, iStateId, iPropId, Color); {$ELSE} Result := _GetThemeColor(hTheme, iPartId, iStateId, iPropId, Color); {$ENDIF} end; function GetThemeMetric(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeMetric(hTheme, DC, iPartId, iStateId, iPropId, iVal); {$ELSE} Result := _GetThemeMetric(hTheme, DC, iPartId, iStateId, iPropId, iVal); {$ENDIF} end; function GetThemeString(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxBuffChars: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeString(hTheme, iPartId, iStateId, iPropId, pszBuff, cchMaxBuffChars); {$ELSE} Result := _GetThemeString(hTheme, iPartId, iStateId, iPropId, pszBuff, cchMaxBuffChars); {$ENDIF} end; function GetThemeBool(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out fVal: BOOL): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeBool(hTheme, iPartId, iStateId, iPropId, fVal); {$ELSE} Result := _GetThemeBool(hTheme, iPartId, iStateId, iPropId, fVal); {$ENDIF} end; function GetThemeInt(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeInt(hTheme, iPartId, iStateId, iPropId, iVal); {$ELSE} Result := _GetThemeInt(hTheme, iPartId, iStateId, iPropId, iVal); {$ENDIF} end; function GetThemeEnumValue(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out iVal: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeEnumValue(hTheme, iPartId, iStateId, iPropId, iVal); {$ELSE} Result := _GetThemeEnumValue(hTheme, iPartId, iStateId, iPropId, iVal); {$ENDIF} end; function GetThemePosition(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Point: TPoint): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemePosition(hTheme, iPartId, iStateId, iPropId, Point); {$ELSE} Result := _GetThemePosition(hTheme, iPartId, iStateId, iPropId, Point); {$ENDIF} end; function GetThemeFont(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; out Font: {$IFNDEF CLR}LOGFONTW{$ELSE}LOGFONT{$ENDIF}): HRESULT; {$IFNDEF CLR} var S: array [0 .. 1000] of Char; {$ENDIF} begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeFont(hTheme, DC, iPartId, iStateId, iPropId, Font); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, Result, LOCALE_USER_DEFAULT, S, 1001, nil); {$ELSE} Result := _GetThemeFont(hTheme, DC, iPartId, iStateId, iPropId, Font); {$ENDIF} end; function GetThemeRect(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Rect: TRect): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeRect(hTheme, iPartId, iStateId, iPropId, Rect); {$ELSE} Result := _GetThemeRect(hTheme, iPartId, iStateId, iPropId, Rect); {$ENDIF} end; function GetThemeMargins(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer; {$IFNDEF CLR}prc: PRect{$ELSE}const prc: TRect{$ENDIF}; out Margins: TdxMargins): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeMargins(hTheme, DC, iPartId, iStateId, iPropId, prc, Margins); {$ELSE} Result := _GetThemeMargins(hTheme, DC, iPartId, iStateId, iPropId, prc, Margins); {$ENDIF} end; function GetThemeIntList(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out IntList: TdxIntList): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeIntList(hTheme, iPartId, iStateId, iPropId, IntList); {$ELSE} Result := _GetThemeIntList(hTheme, iPartId, iStateId, iPropId, IntList); {$ENDIF} end; function GetThemePropertyOrigin(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; out Origin: TdxPropertyOrigin): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemePropertyOrigin(hTheme, iPartId, iStateId, iPropId, Origin); {$ELSE} Result := _GetThemePropertyOrigin(hTheme, iPartId, iStateId, iPropId, Origin); {$ENDIF} end; function SetWindowTheme(hWnd: HWND; pszSubAppName, pszSubIdList: {$IFNDEF CLR}PWideChar{$ELSE}string{$ENDIF}): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FSetWindowTheme(hWnd, pszSubAppName, pszSubIdList); {$ELSE} Result := _SetWindowTheme(hWnd, pszSubAppName, pszSubIdList); {$ENDIF} end; function GetThemeFilename(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer; pszThemeFileName: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxBuffChars: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeFilename(hTheme, iPartId, iStateId, iPropId, pszThemeFileName, cchMaxBuffChars); {$ELSE} Result := _GetThemeFilename(hTheme, iPartId, iStateId, iPropId, pszThemeFileName, cchMaxBuffChars); {$ENDIF} end; function GetThemeSysColor(hTheme: TdxTheme; iColorId: Integer): COLORREF; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysColor(hTheme, iColorId); {$ELSE} Result := _GetThemeSysColor(hTheme, iColorId); {$ENDIF} end; function GetThemeSysColorBrush(hTheme: TdxTheme; iColorId: Integer): HBRUSH; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysColorBrush(hTheme, iColorId); {$ELSE} Result := _GetThemeSysColorBrush(hTheme, iColorId); {$ENDIF} end; function GetThemeSysBool(hTheme: TdxTheme; iBoolId: Integer): BOOL; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysBool(hTheme, iBoolId); {$ELSE} Result := _GetThemeSysBool(hTheme, iBoolId); {$ENDIF} end; function GetThemeSysSize(hTheme: TdxTheme; iSizeId: Integer): Integer; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysSize(hTheme, iSizeId); {$ELSE} Result := _GetThemeSysSize(hTheme, iSizeId); {$ENDIF} end; function GetThemeSysFont(hTheme: TdxTheme; iFontId: Integer; out lf: {$IFNDEF CLR}LOGFONTW{$ELSE}LOGFONT{$ENDIF}): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysFont(hTheme, iFontId, lf); {$ELSE} Result := _GetThemeSysFont(hTheme, iFontId, lf); {$ENDIF} end; function GetThemeSysString(hTheme: TdxTheme; iStringId: Integer; pszStringBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxStringChars: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysString(hTheme, iStringId, pszStringBuff, cchMaxStringChars); {$ELSE} Result := _GetThemeSysString(hTheme, iStringId, pszStringBuff, cchMaxStringChars); {$ENDIF} end; function GetThemeSysInt(hTheme: TdxTheme; iIntId: Integer; var iValue: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysInt(hTheme, iIntId, iValue); {$ELSE} Result := _GetThemeSysInt(hTheme, iIntId, iValue); {$ENDIF} end; function IsThemeActive: BOOL; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FIsThemeActive; {$ELSE} Result := _IsThemeActive; {$ENDIF} end; function IsAppThemed: BOOL; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FIsAppThemed; {$ELSE} Result := _IsAppThemed; {$ENDIF} end; function GetWindowTheme(hWnd: HWND): TdxTheme; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetWindowTheme(hWnd); {$ELSE} Result := _GetWindowTheme(hWnd); {$ENDIF} end; function EnableThemeDialogTexture(hWnd: HWND; dwFlags: DWORD): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FEnableThemeDialogTexture(hWnd, dwFlags); {$ELSE} Result := _EnableThemeDialogTexture(hWnd, dwFlags); {$ENDIF} end; function IsThemeDialogTextureEnabled(hWnd: HWND): BOOL; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FIsThemeDialogTextureEnabled(hWnd); {$ELSE} Result := _IsThemeDialogTextureEnabled(hWnd); {$ENDIF} end; function GetThemeAppProperties: DWORD; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeAppProperties; {$ELSE} Result := _GetThemeAppProperties; {$ENDIF} end; procedure SetThemeAppProperties(dwFlags: DWORD); begin {$IFNDEF CLR} FThemeLibraryMethodPointersKeeper.FSetThemeAppProperties(dwFlags); {$ELSE} _SetThemeAppProperties(dwFlags); {$ENDIF} end; function GetCurrentThemeName(pszThemeFileName: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxNameChars: Integer; pszColorBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxColorChars: Integer; pszSizeBuff: {$IFNDEF CLR}PWideChar{$ELSE}StringBuilder{$ENDIF}; cchMaxSizeChars: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars); {$ELSE} Result := _GetCurrentThemeName(pszThemeFileName, cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars); {$ENDIF} end; function GetThemeDocumentationProperty( {$IFNDEF CLR} pszThemeName, pszPropertyName, pszValueBuff: PWideChar; {$ELSE} pszThemeName, pszPropertyName: string; pszValueBuff: StringBuilder; {$ENDIF} cchMaxValChars: Integer): HRESULT; begin {$IFNDEF CLR} Result := FThemeLibraryMethodPointersKeeper.FGetThemeDocumentationProperty(pszThemeName, pszPropertyName, pszValueBuff, cchMaxValChars); {$ELSE} Result := _GetThemeDocumentationProperty(pszThemeName, pszPropertyName, pszValueBuff, cchMaxValChars); {$ENDIF} end; //vista extention {$IFNDEF CLR} function BufferedPaintInit: HRESULT; begin Result := FThemeLibraryMethodPointersKeeper.FBufferedPaintInit; end; function BufferedPaintUnInit: HRESULT; begin Result := FThemeLibraryMethodPointersKeeper.FBufferedPaintUnInit; end; function BeginBufferedPaint(hdcTarget: HDC; prcTarget: PRect; dwFormat: TBPBufferFormat; pPaintParams: PBPPaintParams; out dc: HDC): TdxPaintBuffer; begin Result := FThemeLibraryMethodPointersKeeper.FBeginBufferedPaint(hdcTarget, prcTarget, dwFormat, pPaintParams, dc); end; function EndBufferedPaint(hBufferedPaint: TdxPaintBuffer; fUpdateTarget: BOOL): HRESULT; begin Result := FThemeLibraryMethodPointersKeeper.FEndBufferedPaint(hBufferedPaint, fUpdateTarget); end; function BufferedPaintSetAlpha(hBufferedPaint: TdxPaintBuffer; prc: PRect; alpha: Byte): HRESULT; begin Result := FThemeLibraryMethodPointersKeeper.FBufferedPaintSetAlpha(hBufferedPaint, prc, alpha); end; {$ENDIF} function IsThemeLibraryLoaded: Boolean; begin Result := FThemeLibrary <> 0; end; function IsWindowsXPOrLater: Boolean; begin Result := FIsWindowsXPOrLater; end; procedure CheckOSVersion; var Info: TOSVersionInfo; begin {$IFNDEF CLR} Info.dwOSVersionInfoSize := SizeOf(Info); {$ELSE} Info.dwOSVersionInfoSize := Marshal.SizeOf(TypeOf(Info)); {$ENDIF} GetVersionEx(Info); FIsWindowsXPOrLater := (Info.dwMajorVersion > 5) or ((Info.dwMajorVersion = 5) and (Info.dwMinorVersion >= 1)); end; {$IFNDEF CLR} procedure SetMethodPointers; begin with FThemeLibraryMethodPointersKeeper do begin @FCloseThemeData := GetProcAddress(FThemeLibrary, 'CloseThemeData'); @FDrawThemeBackground := GetProcAddress(FThemeLibrary, 'DrawThemeBackground'); @FDrawThemeEdge := GetProcAddress(FThemeLibrary, 'DrawThemeEdge'); @FDrawThemeIcon := GetProcAddress(FThemeLibrary, 'DrawThemeIcon'); @FDrawThemeParentBackground := GetProcAddress(FThemeLibrary, 'DrawThemeParentBackground'); @FDrawThemeText := GetProcAddress(FThemeLibrary, 'DrawThemeText'); @FDrawThemeTextEx := GetProcAddress(FThemeLibrary, 'DrawThemeTextEx'); @FEnableThemeDialogTexture := GetProcAddress(FThemeLibrary, 'EnableThemeDialogTexture'); @FGetCurrentThemeName := GetProcAddress(FThemeLibrary, 'GetCurrentThemeName'); @FGetThemeAppProperties := GetProcAddress(FThemeLibrary, 'GetThemeAppProperties'); @FGetThemeBackgroundContentRect := GetProcAddress(FThemeLibrary, 'GetThemeBackgroundContentRect'); @FGetThemeBackgroundRegion := GetProcAddress(FThemeLibrary, 'GetThemeBackgroundRegion'); @FGetThemeBackgroundExtent := GetProcAddress(FThemeLibrary, 'GetThemeBackgroundExtent'); @FGetThemeBool := GetProcAddress(FThemeLibrary, 'GetThemeBool'); @FGetThemeColor := GetProcAddress(FThemeLibrary, 'GetThemeColor'); @FGetThemeDocumentationProperty := GetProcAddress(FThemeLibrary, 'GetThemeDocumentationProperty'); @FGetThemeEnumValue := GetProcAddress(FThemeLibrary, 'GetThemeEnumValue'); @FGetThemeFilename := GetProcAddress(FThemeLibrary, 'GetThemeFilename'); @FGetThemeFont := GetProcAddress(FThemeLibrary, 'GetThemeFont'); @FGetThemeInt := GetProcAddress(FThemeLibrary, 'GetThemeInt'); @FGetThemeIntList := GetProcAddress(FThemeLibrary, 'GetThemeIntList'); @FGetThemeMargins := GetProcAddress(FThemeLibrary, 'GetThemeMargins'); @FGetThemeMetric := GetProcAddress(FThemeLibrary, 'GetThemeMetric'); @FGetThemePartSize := GetProcAddress(FThemeLibrary, 'GetThemePartSize'); @FGetThemePosition := GetProcAddress(FThemeLibrary, 'GetThemePosition'); @FGetThemePropertyOrigin := GetProcAddress(FThemeLibrary, 'GetThemePropertyOrigin'); @FGetThemeRect := GetProcAddress(FThemeLibrary, 'GetThemeRect'); @FGetThemeString := GetProcAddress(FThemeLibrary, 'GetThemeString'); @FGetThemeSysBool := GetProcAddress(FThemeLibrary, 'GetThemeSysBool'); @FGetThemeSysColor := GetProcAddress(FThemeLibrary, 'GetThemeSysColor'); @FGetThemeSysColorBrush := GetProcAddress(FThemeLibrary, 'GetThemeSysColorBrush'); @FGetThemeSysFont := GetProcAddress(FThemeLibrary, 'GetThemeSysFont'); @FGetThemeSysInt := GetProcAddress(FThemeLibrary, 'GetThemeSysInt'); @FGetThemeSysSize := GetProcAddress(FThemeLibrary, 'GetThemeSysSize'); @FGetThemeSysString := GetProcAddress(FThemeLibrary, 'GetThemeSysString'); @FGetThemeTextExtent := GetProcAddress(FThemeLibrary, 'GetThemeTextExtent'); @FGetThemeTextMetrics := GetProcAddress(FThemeLibrary, 'GetThemeTextMetrics'); @FGetWindowTheme := GetProcAddress(FThemeLibrary, 'GetWindowTheme'); @FHitTestThemeBackground := GetProcAddress(FThemeLibrary, 'HitTestThemeBackground'); @FIsAppThemed := GetProcAddress(FThemeLibrary, 'IsAppThemed'); @FIsThemeActive := GetProcAddress(FThemeLibrary, 'IsThemeActive'); @FIsThemePartDefined := GetProcAddress(FThemeLibrary, 'IsThemePartDefined'); @FIsThemeBackgroundPartiallyTransparent := GetProcAddress(FThemeLibrary, 'IsThemeBackgroundPartiallyTransparent'); @FIsThemeDialogTextureEnabled := GetProcAddress(FThemeLibrary, 'IsThemeDialogTextureEnabled'); @FOpenThemeData := GetProcAddress(FThemeLibrary, 'OpenThemeData'); @FSetThemeAppProperties := GetProcAddress(FThemeLibrary, 'SetThemeAppProperties'); @FSetWindowTheme := GetProcAddress(FThemeLibrary, 'SetWindowTheme'); //vista extention @FBufferedPaintInit := GetProcAddress(FThemeLibrary, 'BufferedPaintInit'); @FBufferedPaintUnInit := GetProcAddress(FThemeLibrary, 'BufferedPaintUnInit'); @FBeginBufferedPaint := GetProcAddress(FThemeLibrary, 'BeginBufferedPaint'); @FEndBufferedPaint := GetProcAddress(FThemeLibrary, 'EndBufferedPaint'); @FBufferedPaintSetAlpha := GetProcAddress(FThemeLibrary, 'BufferedPaintSetAlpha'); end; end; {$ENDIF} initialization CheckOSVersion; {$IFNDEF CLR} InitCommonControls; {$ENDIF} if FIsWindowsXPOrLater (*and (GetComCtlVersion >= $60000) *)then begin FThemeLibrary := LoadLibrary(ThemeLibraryName); {$IFNDEF CLR} if FThemeLibrary <> 0 then SetMethodPointers; {$ENDIF} end; finalization if FThemeLibrary <> 0 then FreeLibrary(FThemeLibrary); end.