📄 dxuxtheme.pas
字号:
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;
function IsWindowsXPOrLater: Boolean;
begin
Result := FIsWindowsXPOrLater;
end;
procedure CheckOSVersion;
var
Info: TOSVersionInfo;
begin
Info.dwOSVersionInfoSize := SizeOf(Info);
GetVersionEx(Info);
FIsWindowsXPOrLater := (Info.dwMajorVersion > 5) or
((Info.dwMajorVersion = 5) and (Info.dwMinorVersion >= 1));
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
CheckOSVersion;
InitCommonControls;
if FIsWindowsXPOrLater (*and (GetComCtlVersion >= $60000) *)then
begin
FThemeLibrary := LoadLibrary(ThemeLibraryName);
if FThemeLibrary <> 0 then
SetMethodPointers;
end;
finalization
if FThemeLibrary <> 0 then
FreeLibrary(FThemeLibrary);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -