Componentes.Terceros.DevExp.../internal/x.44/1/XP Theme Manager/Sources/dxUxTheme.pas
2009-06-29 12:09:02 +00:00

874 lines
39 KiB
ObjectPascal

{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressXPThemeManager }
{ }
{ Copyright (c) 1998-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 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 DELPHI6}
Types,
{$ENDIF}
Windows, Classes, CommCtrl;
const
dxMaxIntListCount = 10;
{$IFDEF CBUILDER11}
{$EXTERNALSYM BPBF_COMPATIBLEBITMAP}
{$ENDIF}
BPBF_COMPATIBLEBITMAP = 0; // Compatible bitmap
{$IFDEF CBUILDER11}
{$EXTERNALSYM BPBF_DIB}
{$ENDIF}
BPBF_DIB = 1; // Device-independent bitmap
{$IFDEF CBUILDER11}
{$EXTERNALSYM BPBF_TOPDOWNDIB}
{$ENDIF}
BPBF_TOPDOWNDIB = 2; // Top-down device-independent bitmap
{$IFDEF CBUILDER11}
{$EXTERNALSYM BPBF_TOPDOWNMONODIB}
{$ENDIF}
BPBF_TOPDOWNMONODIB = 3; // Top-down monochrome device-independent bitmap
{$IFDEF CBUILDER11}
{$EXTERNALSYM BPBF_COMPOSITED}
{$ENDIF}
BPBF_COMPOSITED = BPBF_TOPDOWNDIB;
type
TdxTheme = THandle;
TdxThemeSize = Integer;
TdxMargins = packed record
cxLeftWidth: Integer;
cxRightWidth: Integer;
cyTopHeight: Integer;
cyBottomHeight: Integer;
end;
PdxMargins = ^TdxMargins;
TdxIntList = packed record
iValueCount: Integer;
iValues: array[0..dxMaxIntListCount - 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: PWideChar): TdxTheme;
function CloseThemeData(hTheme: TdxTheme): HRESULT;
// functions for basic drawing support
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;
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;
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;
pContentRect: PRect;
out ExtentRect: TRect): HRESULT;
function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
prc: PRect; eSize: TdxThemeSize; psz: PSize): HRESULT; overload;
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: PWideChar; iCharCount: Integer; dwTextFlags: DWORD;
pBoundingRect: PRect; 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;
pRect: PRect; out Region: HRGN): HRESULT;
function HitTestThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
dwOptions: DWORD; pRect: PRect;
hRgn: HRGN; ptTest: TPoint; out wHitTestCode: WORD): HRESULT;
function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pDestRect: PRect; uEdge, uFlags: UINT; pContentRect: PRect): HRESULT; overload;
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;
pRect: PRect; 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: PWideChar; 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: LOGFONTW): HRESULT;
function GetThemeRect(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out Rect: TRect): HRESULT;
function GetThemeMargins(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer;
prc: PRect; 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:
PWideChar): HRESULT;
function GetThemeFilename(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
pszThemeFileName: PWideChar; 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: LOGFONTW): HRESULT;
function GetThemeSysString(hTheme: TdxTheme; iStringId: Integer; pszStringBuff:
PWideChar; 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: PWideChar;
cchMaxNameChars: Integer; pszColorBuff: PWideChar;
cchMaxColorChars: Integer; pszSizeBuff: PWideChar;
cchMaxSizeChars: Integer): HRESULT;
function GetThemeDocumentationProperty(
pszThemeName, pszPropertyName, pszValueBuff: PWideChar;
cchMaxValChars: Integer): HRESULT;
//vista extention
type
TdxBPPaintParams = packed record
cbSize: DWORD;
dwFlags: DWORD; // BPPF_ flags
prcExclude: PRect;
pBlendFunction: Pointer;
end;
PdxBPPaintParams = ^TdxBPPaintParams;
function BufferedPaintInit: HRESULT;
function BufferedPaintUnInit: HRESULT;
function BeginBufferedPaint(hdcTarget: HDC; prcTarget: PRect;
dwFormat: DWORD; pPaintParams: PdxBPPaintParams; out dc: HDC): TdxPaintBuffer;
function EndBufferedPaint(hBufferedPaint: TdxPaintBuffer; fUpdateTarget: BOOL): HRESULT;
function BufferedPaintSetAlpha(hBufferedPaint: TdxPaintBuffer; prc: PRect; alpha: Byte): HRESULT;
function IsThemeLibraryLoaded: Boolean;
implementation
uses
ComCtrls;
const
ThemeLibraryName = 'UxTheme.dll';
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: DWORD; pPaintParams: PdxBPPaintParams; var 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;
var
FThemeLibrary: HMODULE = 0;
FThemeLibraryMethodPointersKeeper: TThemeLibraryMethodPointersKeeper;
function OpenThemeData(hWnd: HWND; pszClassList: PWideChar): TdxTheme;
begin
Result := FThemeLibraryMethodPointersKeeper.FOpenThemeData(hWnd, pszClassList);
end;
function CloseThemeData(hTheme: TdxTheme): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FCloseThemeData(hTheme);
end;
function DrawThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pRect: PRect; pClipRect: PRect = nil
): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FDrawThemeBackground(hTheme, DC,
iPartId, iStateId, pRect, pClipRect);
end;
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;
function DrawThemeText(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pszText: PWideChar;
iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD;
pRect: PRect): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FDrawThemeText(hTheme, DC, iPartId, iStateId,
pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect);
end;
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;
//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
Result := FThemeLibraryMethodPointersKeeper.FDrawThemeTextEx(hTheme, DC, iPartId, iStateId,
PWideChar(pszText), iCharCount, dwTextFlags, @pRect, pOptions);
end;
function GetThemeBackgroundContentRect(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
const BoundingRect: TRect; out ContentRect: TRect): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeBackgroundContentRect(hTheme,
DC, iPartId, iStateId, BoundingRect, ContentRect);
end;
function GetThemeBackgroundExtent(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pContentRect: PRect;
out ExtentRect: TRect): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeBackgroundExtent(hTheme, DC,
iPartId, iStateId, pContentRect, ExtentRect);
end;
function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
prc: PRect; eSize: TdxThemeSize;
psz: PSize): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemePartSize(hTheme, DC, iPartId,
iStateId, prc, eSize, psz);
end;
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;
function GetThemePartSize(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
eSize: TdxThemeSize; out psz: TSize): HRESULT;
begin
Result := GetThemePartSize(hTheme, DC, iPartId, iStateId, nil, eSize, @psz);
end;
function GetThemeTextExtent(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pszTextL: PWideChar; iCharCount: Integer; dwTextFlags: DWORD;
pBoundingRect: PRect; out ExtentRect: TRect): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeTextExtent(hTheme, DC, iPartId,
iStateId, pszTextL, iCharCount, dwTextFlags, pBoundingRect, ExtentRect);
end;
function GetThemeTextMetrics(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
out tm: TEXTMETRIC): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeTextMetrics(hTheme, DC, iPartId,
iStateId, tm);
end;
function GetThemeBackgroundRegion(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pRect: PRect; out Region: HRGN): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeBackgroundRegion(hTheme,
DC, iPartId, iStateId, pRect, Region);
end;
function HitTestThemeBackground(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
dwOptions: DWORD; pRect: PRect;
hRgn: HRGN; ptTest: TPoint; out wHitTestCode: WORD): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FHitTestThemeBackground(hTheme, DC,
iPartId, iStateId, dwOptions, pRect, hRgn, ptTest, wHitTestCode);
end;
function DrawThemeEdge(hTheme: TdxTheme; DC: HDC; iPartId, iStateId: Integer;
pDestRect: PRect;
uEdge, uFlags: UINT; pContentRect: PRect): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FDrawThemeEdge(hTheme, DC, iPartId, iStateId,
pDestRect, uEdge, uFlags, pContentRect);
end;
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;
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;
pRect: PRect; himl: HIMAGELIST; iImageIndex: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FDrawThemeIcon(hTheme, DC, iPartId, iStateId,
pRect, himl, iImageIndex);
end;
function IsThemePartDefined(hTheme: TdxTheme; iPartId: Integer; iStateId: Integer): BOOL;
begin
Result := FThemeLibraryMethodPointersKeeper.FIsThemePartDefined(hTheme, iPartId, iStateId);
end;
function IsThemeBackgroundPartiallyTransparent(hTheme: TdxTheme;
iPartId: Integer; iStateId: Integer): BOOL;
begin
Result := FThemeLibraryMethodPointersKeeper.FIsThemeBackgroundPartiallyTransparent(hTheme,
iPartId, iStateId);
end;
function DrawThemeParentBackground(hWnd: HWND; DC: HDC; const prc: TRect): HRESULT;
var
AFontHandle: HFONT;
begin
AFontHandle := GetCurrentObject(DC, OBJ_FONT);
Result := FThemeLibraryMethodPointersKeeper.FDrawThemeParentBackground(hWnd, DC, prc);
SelectObject(DC, AFontHandle);
end;
function GetThemeColor(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out Color: TColorRef): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeColor(hTheme, iPartId, iStateId, iPropId, Color);
end;
function GetThemeMetric(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer;
out iVal: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeMetric(hTheme, DC, iPartId,
iStateId, iPropId, iVal);
end;
function GetThemeString(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
pszBuff: PWideChar; cchMaxBuffChars: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeString(hTheme, iPartId, iStateId,
iPropId, pszBuff, cchMaxBuffChars);
end;
function GetThemeBool(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out fVal: BOOL): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeBool(hTheme, iPartId, iStateId,
iPropId, fVal);
end;
function GetThemeInt(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out iVal: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeInt(hTheme, iPartId, iStateId,
iPropId, iVal);
end;
function GetThemeEnumValue(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out iVal: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeEnumValue(hTheme, iPartId,
iStateId, iPropId, iVal);
end;
function GetThemePosition(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out Point: TPoint): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemePosition(hTheme, iPartId, iStateId,
iPropId, Point);
end;
function GetThemeFont(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer;
out Font: LOGFONTW): HRESULT;
var
S: array [0 .. 1000] of Char;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeFont(hTheme, DC, iPartId, iStateId,
iPropId, Font);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, Result, LOCALE_USER_DEFAULT, S, 1001, nil);
end;
function GetThemeRect(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out Rect: TRect): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeRect(hTheme, iPartId, iStateId,
iPropId, Rect);
end;
function GetThemeMargins(hTheme: TdxTheme; DC: HDC; iPartId, iStateId, iPropId: Integer;
prc: PRect; out Margins: TdxMargins): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeMargins(hTheme, DC, iPartId,
iStateId, iPropId, prc, Margins);
end;
function GetThemeIntList(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out IntList: TdxIntList): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeIntList(hTheme, iPartId, iStateId,
iPropId, IntList);
end;
function GetThemePropertyOrigin(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
out Origin: TdxPropertyOrigin): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemePropertyOrigin(hTheme, iPartId,
iStateId, iPropId, Origin);
end;
function SetWindowTheme(hWnd: HWND; pszSubAppName, pszSubIdList:
PWideChar): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FSetWindowTheme(hWnd, pszSubAppName, pszSubIdList);
end;
function GetThemeFilename(hTheme: TdxTheme; iPartId, iStateId, iPropId: Integer;
pszThemeFileName: PWideChar; cchMaxBuffChars: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeFilename(hTheme, iPartId,
iStateId, iPropId, pszThemeFileName, cchMaxBuffChars);
end;
function GetThemeSysColor(hTheme: TdxTheme; iColorId: Integer): COLORREF;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysColor(hTheme, iColorId);
end;
function GetThemeSysColorBrush(hTheme: TdxTheme; iColorId: Integer): HBRUSH;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysColorBrush(hTheme, iColorId);
end;
function GetThemeSysBool(hTheme: TdxTheme; iBoolId: Integer): BOOL;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysBool(hTheme, iBoolId);
end;
function GetThemeSysSize(hTheme: TdxTheme; iSizeId: Integer): Integer;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysSize(hTheme, iSizeId);
end;
function GetThemeSysFont(hTheme: TdxTheme; iFontId: Integer;
out lf: LOGFONTW): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysFont(hTheme, iFontId, lf);
end;
function GetThemeSysString(hTheme: TdxTheme; iStringId: Integer; pszStringBuff:
PWideChar; cchMaxStringChars: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysString(hTheme, iStringId,
pszStringBuff, cchMaxStringChars);
end;
function GetThemeSysInt(hTheme: TdxTheme; iIntId: Integer; var iValue: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeSysInt(hTheme, iIntId, iValue);
end;
function IsThemeActive: BOOL;
begin
if @FThemeLibraryMethodPointersKeeper.FIsThemeActive = nil then
Result := False
else
Result := FThemeLibraryMethodPointersKeeper.FIsThemeActive;
end;
function IsAppThemed: BOOL;
begin
Result := FThemeLibraryMethodPointersKeeper.FIsAppThemed;
end;
function GetWindowTheme(hWnd: HWND): TdxTheme;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetWindowTheme(hWnd);
end;
function EnableThemeDialogTexture(hWnd: HWND; dwFlags: DWORD): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FEnableThemeDialogTexture(hWnd, dwFlags);
end;
function IsThemeDialogTextureEnabled(hWnd: HWND): BOOL;
begin
Result := FThemeLibraryMethodPointersKeeper.FIsThemeDialogTextureEnabled(hWnd);
end;
function GetThemeAppProperties: DWORD;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeAppProperties;
end;
procedure SetThemeAppProperties(dwFlags: DWORD);
begin
FThemeLibraryMethodPointersKeeper.FSetThemeAppProperties(dwFlags);
end;
function GetCurrentThemeName(pszThemeFileName: PWideChar;
cchMaxNameChars: Integer; pszColorBuff: PWideChar;
cchMaxColorChars: Integer; pszSizeBuff: PWideChar;
cchMaxSizeChars: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetCurrentThemeName(pszThemeFileName,
cchMaxNameChars, pszColorBuff, cchMaxColorChars, pszSizeBuff, cchMaxSizeChars);
end;
function GetThemeDocumentationProperty(
pszThemeName, pszPropertyName, pszValueBuff: PWideChar;
cchMaxValChars: Integer): HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FGetThemeDocumentationProperty(pszThemeName,
pszPropertyName, pszValueBuff, cchMaxValChars);
end;
//vista extention
function BufferedPaintInit: HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FBufferedPaintInit;
end;
function BufferedPaintUnInit: HRESULT;
begin
Result := FThemeLibraryMethodPointersKeeper.FBufferedPaintUnInit;
end;
function BeginBufferedPaint(hdcTarget: HDC; prcTarget: PRect;
dwFormat: DWORD; pPaintParams: PdxBPPaintParams; 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;
function IsThemeLibraryLoaded: Boolean;
begin
Result := FThemeLibrary <> 0;
end;
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;
initialization
InitCommonControls;
FThemeLibrary := LoadLibrary(ThemeLibraryName);
if FThemeLibrary <> 0 then
SetMethodPointers;
finalization
if FThemeLibrary <> 0 then
FreeLibrary(FThemeLibrary);
end.