mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
4327 lines
184 KiB
ObjectPascal
4327 lines
184 KiB
ObjectPascal
//**************************************************************************************************
|
|
//
|
|
// Unit Vcl.Styles.UxTheme
|
|
// unit for the VCL Styles Utils
|
|
// https://github.com/RRUZ/vcl-styles-utils/
|
|
//
|
|
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
|
|
// you may not use this file except in compliance with the License. You may obtain a copy of the
|
|
// License at http://www.mozilla.org/MPL/
|
|
//
|
|
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
|
// ANY KIND, either express or implied. See the License for the specific language governing rights
|
|
// and limitations under the License.
|
|
//
|
|
// The Original Code is Vcl.Styles.UxTheme.pas.
|
|
//
|
|
// The Initial Developer of the Original Code is Rodrigo Ruz V.
|
|
// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2017 Rodrigo Ruz V.
|
|
// All Rights Reserved.
|
|
//
|
|
//**************************************************************************************************
|
|
unit Vcl.Styles.UxTheme;
|
|
|
|
interface
|
|
|
|
implementation
|
|
|
|
{ TODO
|
|
|
|
|
|
|
|
done W8 Check Color text disabled on listview hot item
|
|
done Test on W10
|
|
done Test Task Dialogs
|
|
done fix preview windows background color when no elements are shown
|
|
done fix background of homegroup folder (and related)
|
|
done remove unused code of DrawThemeText and DrawThemeTextEx, (replaced by GetThemeColor)
|
|
done fix navigation buttons W8, W10
|
|
done improve drawing navigation buttons W7
|
|
|
|
fix related shell dialogs
|
|
Add support for custom titlebars.
|
|
msstyles
|
|
|
|
Add support for Classic Theme
|
|
fix menu
|
|
fix popup windows with trackbar
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
{$DEFINE HOOK_Button}
|
|
{$DEFINE HOOK_Scrollbar}
|
|
{$DEFINE HOOK_TaskDialog}
|
|
{$DEFINE HOOK_ProgressBar}
|
|
{$DEFINE HOOK_DateTimePicker}
|
|
{$DEFINE HOOK_TreeView}
|
|
{$DEFINE HOOK_ListView}
|
|
{$DEFINE HOOK_ListBox}
|
|
{$DEFINE HOOK_ComboBox}
|
|
{$DEFINE HOOK_Spin}
|
|
{$DEFINE HOOK_EDIT}
|
|
{$DEFINE HOOK_Rebar}
|
|
{$DEFINE HOOK_ToolBar}
|
|
{$DEFINE HOOK_Menu}
|
|
{$DEFINE HOOK_TrackBar}
|
|
{$DEFINE HOOK_ToolTip}
|
|
{$DEFINE HOOK_Tab}
|
|
|
|
|
|
//Undocumented Windows Themes
|
|
|
|
//Introduced in Windows Vista
|
|
|
|
{$DEFINE HOOK_CommandModule}
|
|
{$DEFINE HOOK_SearchBox}
|
|
{$DEFINE HOOK_AddressBand}
|
|
{$DEFINE HOOK_PreviewPane}
|
|
{$DEFINE HOOK_TRYHARDER}
|
|
{$DEFINE HOOK_BREADCRUMBAR}
|
|
{$DEFINE HOOK_InfoBar}
|
|
|
|
//Introduced in Windows 8
|
|
{$DEFINE HOOK_Navigation}
|
|
|
|
|
|
uses
|
|
DDetours,
|
|
System.SyncObjs,
|
|
System.SysUtils,
|
|
System.Types,
|
|
System.Classes,
|
|
System.UITypes,
|
|
System.Math,
|
|
System.Generics.Collections,
|
|
System.Generics.Defaults,
|
|
WinApi.Windows,
|
|
Winapi.UxTheme,
|
|
Winapi.Messages,
|
|
Vcl.Graphics,
|
|
Vcl.GraphUtil,
|
|
Vcl.Themes,
|
|
Vcl.Imaging.pngimage,
|
|
Vcl.Styles.Hooks,
|
|
Vcl.Styles.Utils.Graphics,
|
|
Vcl.Styles.FontAwesome,
|
|
Vcl.Styles.Utils.SysControls;
|
|
|
|
type
|
|
TDrawThemeBackground = function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer): HRESULT; stdcall;
|
|
|
|
{$IFDEF HOOK_ProgressBar}
|
|
const
|
|
VSCLASS_PROGRESS_INDERTERMINATE = 'Indeterminate::Progress';
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_ListView}
|
|
const
|
|
VSCLASS_ITEMSVIEW_LISTVIEW = 'ItemsView::ListView';
|
|
VSCLASS_ITEMSVIEW_HEADER = 'ItemsView::Header';
|
|
VSCLASS_EXPLORER_LISTVIEW = 'Explorer::ListView';
|
|
VSCLASS_ITEMSVIEW = 'ItemsView';
|
|
VSCLASS_LISTVIEWPOPUP = 'ListViewPopup';
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_CommandModule}
|
|
const
|
|
VSCLASS_COMMANDMODULE = 'CommandModule';
|
|
VSCLASS_CPLCOMMANDMODULE = 'CPLCommandModule::CommandModule';
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_SearchBox}
|
|
const
|
|
VSCLASS_SEARCHEDITBOX = 'SearchEditBox';
|
|
VSCLASS_SEARCHBOX = 'SearchBox';
|
|
VSCLASS_CompositedSEARCHBOX = 'SearchBoxCompositedSearchBox::SearchBox';
|
|
VSCLASS_INACTIVESEARCHBOX = 'InactiveSearchBoxCompositedSearchBox::SearchBox';
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_AddressBand}
|
|
const
|
|
VSCLASS_ADDRESSBAND = 'AddressBand';
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFDEF HOOK_PreviewPane}
|
|
const
|
|
VSCLASS_PREVIEWPANE = 'PreviewPane';
|
|
VSCLASS_READINGPANE = 'ReadingPane';
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFDEF HOOK_TRYHARDER}
|
|
const
|
|
VSCLASS_TRYHARDER = 'TryHarder';
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_BREADCRUMBAR}
|
|
const
|
|
VSCLASS_BREADCRUMBAR = 'BreadcrumbBar';
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFDEF HOOK_Navigation}
|
|
const
|
|
VSCLASS_NAVIGATION = 'Navigation';
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_TreeView}
|
|
const
|
|
VSCLASS_PROPERTREE = 'PROPERTREE';
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFDEF HOOK_InfoBar}
|
|
const
|
|
VSCLASS_INFOBAR = 'InfoBar';
|
|
{$ENDIF}
|
|
|
|
|
|
{$IFDEF HOOK_Menu}
|
|
const
|
|
MARLETT_RESTORE_CHAR = Char(50);
|
|
MARLETT_MINIMIZE_CHAR = Char(48);
|
|
MARLETT_CLOSE_CHAR = Char(114);
|
|
MARLETT_MAXIMIZE_CHAR = Char(49);
|
|
{$ENDIF}
|
|
|
|
type
|
|
TFuncDrawThemeBackground = function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
|
|
var
|
|
Trampoline_UxTheme_OpenThemeDataEx : function(hwnd: HWND; pszClassList: LPCWSTR; dwFlags: DWORD): HTHEME; stdcall = nil;
|
|
Trampoline_UxTheme_OpenThemeData : function(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall = nil;
|
|
{$IF CompilerVersion >= 30}
|
|
Trampoline_UxTheme_OpenThemeDataForDPI : function(hwnd: HWND; pszClassList: LPCWSTR; dpi: UINT): HTHEME; stdcall = nil;
|
|
{$IFEND}
|
|
|
|
|
|
Trampoline_UxTheme_CloseThemeData : function(hTheme: HTHEME): HRESULT; stdcall = nil;
|
|
Trampoline_UxTheme_DrawThemeBackground : function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: Pointer): HRESULT; stdcall = nil;
|
|
Trampoline_UxTheme_DrawThemeBackgroundEx : function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pOptions: Pointer): HResult; stdcall = nil;
|
|
Trampoline_UxTheme_GetThemeColor : function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var pColor: COLORREF): HRESULT; stdcall = nil;
|
|
Trampoline_UxTheme_GetThemeSysColor : function(hTheme: HTHEME; iColorId: Integer): COLORREF; stdcall = nil;
|
|
Trampoline_UxTheme_GetThemeSysColorBrush : function(hTheme: HTHEME; iColorId: Integer): HBRUSH; stdcall = nil;
|
|
Trampoline_UxTheme_DrawThemeText : function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; stdcall = nil;
|
|
Trampoline_UxTheme_DrawThemeTextEx : function(hTheme: HTHEME; hdc: HDC; iPartId: Integer; iStateId: Integer; pszText: LPCWSTR; cchText: Integer; dwTextFlags: DWORD; pRect: PRect; var pOptions: TDTTOpts): HResult; stdcall = nil;
|
|
Trampoline_UxTheme_DrawThemeEdge : function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT; pContentRect: PRECT): HRESULT; stdcall = nil;
|
|
|
|
THThemesClasses : TDictionary<HTHEME, string>;
|
|
THThemesHWND : TDictionary<HTHEME, HWND>;
|
|
|
|
FuncsDrawThemeBackground : TDictionary<string, TFuncDrawThemeBackground>;
|
|
|
|
VCLStylesLock : TCriticalSection = nil;
|
|
|
|
|
|
function Detour_UxTheme_OpenThemeData(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall;
|
|
begin
|
|
//OutputDebugString(PChar('Detour_UxTheme_OpenThemeData '+pszClassList));
|
|
VCLStylesLock.Enter;
|
|
try
|
|
Result:=Trampoline_UxTheme_OpenThemeData(hwnd, pszClassList);
|
|
if THThemesClasses.ContainsKey(Result) then
|
|
THThemesClasses.Remove(Result);
|
|
THThemesClasses.Add(Result, pszClassList);
|
|
|
|
if THThemesHWND.ContainsKey(Result) then
|
|
THThemesHWND.Remove(Result);
|
|
THThemesHWND.Add(Result, hwnd);
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
//OutputDebugString(PChar('Detour_UxTheme_OpenThemeData '+pszClassList+' hTheme '+IntToStr(Result)+' Handle '+IntToHex(hwnd, 8)));
|
|
end;
|
|
|
|
{$IF CompilerVersion >= 30}
|
|
//HTHEME WINAPI OpenThemeDataForDpi(HWDN hwnd, PCWSTR pszClassIdList, UINT dpi);
|
|
function Detour_UxTheme_OpenThemeDataForDPI(hwnd: HWND; pszClassList: LPCWSTR; dpi: UINT): HTHEME; stdcall;
|
|
begin
|
|
VCLStylesLock.Enter;
|
|
try
|
|
Result := Trampoline_UxTheme_OpenThemeDataForDPI(hwnd, pszClassList, dpi);
|
|
if THThemesClasses.ContainsKey(Result) then
|
|
THThemesClasses.Remove(Result);
|
|
THThemesClasses.Add(Result, pszClassList);
|
|
|
|
if THThemesHWND.ContainsKey(Result) then
|
|
THThemesHWND.Remove(Result);
|
|
THThemesHWND.Add(Result, hwnd);
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
end;
|
|
{$IFEND}
|
|
|
|
function Detour_UxTheme_OpenThemeDataEx(hwnd: HWND; pszClassList: LPCWSTR; dwFlags: DWORD): HTHEME; stdcall;
|
|
begin
|
|
//OutputDebugString(PChar('Detour_UxTheme_OpenThemeDataEx '+pszClassList));
|
|
VCLStylesLock.Enter;
|
|
try
|
|
Result:=Trampoline_UxTheme_OpenThemeDataEx(hwnd, pszClassList, dwFlags);
|
|
if THThemesClasses.ContainsKey(Result) then
|
|
THThemesClasses.Remove(Result);
|
|
THThemesClasses.Add(Result, pszClassList);
|
|
|
|
if THThemesHWND.ContainsKey(Result) then
|
|
THThemesHWND.Remove(Result);
|
|
THThemesHWND.Add(Result, hwnd);
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
//OutputDebugString(PChar('Detour_UxTheme_OpenThemeDataEx '+pszClassList+' hTheme '+IntToStr(Result)+' Handle '+IntToHex(hwnd, 8)));
|
|
end;
|
|
|
|
|
|
function GetStyleHighLightColor : TColor;
|
|
begin
|
|
if ColorIsBright(StyleServices.GetSystemColor(clBtnFace)) or not ColorIsBright(StyleServices.GetSystemColor(clHighlight)) then
|
|
Result := StyleServices.GetSystemColor(clBtnText)
|
|
else
|
|
Result := StyleServices.GetSystemColor(clHighlight);
|
|
end;
|
|
|
|
function GetStyleBtnTextColor : TColor;
|
|
begin
|
|
if not StyleServices.GetElementColor(StyleServices.GetElementDetails(tbPushButtonNormal), ecTextColor, Result) then
|
|
Result := StyleServices.GetSystemColor(clBtnText);
|
|
end;
|
|
|
|
function GetStyleMenuTextColor : TColor;
|
|
begin
|
|
Result:= StyleServices.GetStyleFontColor(sfPopupMenuItemTextNormal);
|
|
end;
|
|
|
|
|
|
|
|
function GetThemeClass(hTheme: HTHEME ; iPartId, iStateId: Integer) : string;
|
|
var
|
|
hThemeNew : WinApi.UxTheme.HTHEME;
|
|
begin
|
|
Result:='';
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_SCROLLBAR);
|
|
if hThemeNew=hTheme then
|
|
Exit(VSCLASS_SCROLLBAR)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_LISTVIEW);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_LISTVIEW)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_ITEMSVIEW_HEADER);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_ITEMSVIEW_HEADER)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_NAVIGATION);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_NAVIGATION)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_COMMANDMODULE);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_COMMANDMODULE)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_EDIT);
|
|
if hThemeNew=hTheme then
|
|
Exit(VSCLASS_EDIT)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_LISTBOX);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_LISTBOX)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_BUTTON);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_BUTTON)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_MENU);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_MENU)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
|
|
hThemeNew := Trampoline_UxTheme_OpenThemeData(0, VSCLASS_MENUBAND);
|
|
if hThemeNew = hTheme then
|
|
Exit(VSCLASS_MENUBAND)
|
|
else
|
|
CloseThemeData(hThemeNew);
|
|
end;
|
|
|
|
|
|
|
|
function UxTheme_InfoBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LColor : TColor;
|
|
begin
|
|
case iPartId of
|
|
1 :
|
|
begin
|
|
case iStateId of
|
|
1 : //normal
|
|
begin
|
|
LDetails := StyleServices.GetElementDetails(tpPanelBackground);
|
|
StyleServices.GetElementColor(LDetails, ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
2 : //hot
|
|
begin
|
|
LDetails := StyleServices.GetElementDetails(tpPanelBackground);
|
|
StyleServices.GetElementColor(LDetails, ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
3 : //Pressed
|
|
begin
|
|
LDetails := StyleServices.GetElementDetails(tpPanelBackground);
|
|
StyleServices.GetElementColor(LDetails, ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
4 : //selected
|
|
begin
|
|
LDetails := StyleServices.GetElementDetails(tpPanelBackground);
|
|
StyleServices.GetElementColor(LDetails, ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_InfoBar class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_BreadCrumBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
1 :
|
|
begin
|
|
case iStateId of
|
|
1 :
|
|
begin
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonNormal), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tsArrowBtnLeftNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
2 :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonNormal), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tsArrowBtnLeftNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
3 : //Pressed
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonPressed), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tsArrowBtnLeftPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
8 : //fade out (hot)
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonHot), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tsArrowBtnLeftHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_BreadCrumBar class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
|
|
function UxTheme_TryHarder(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
0 :
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clWindow));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_TryHarder class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_Tab(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
TABP_TOPTABITEM :
|
|
begin
|
|
case iStateId of
|
|
TIS_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemNormal), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TIS_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemHot), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
TIS_SELECTED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemSelected), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
TABP_TOPTABITEMLEFTEDGE :
|
|
begin
|
|
case iStateId of
|
|
TILES_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemLeftEdgeNormal), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TILES_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemLeftEdgeHot), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TILES_SELECTED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemLeftEdgeSelected), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TILES_DISABLED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemLeftEdgeDisabled), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
TABP_TOPTABITEMRIGHTEDGE :
|
|
begin
|
|
case iStateId of
|
|
TIRES_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemRightEdgeNormal), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TIRES_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemRightEdgeHot), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TIRES_SELECTED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemRightEdgeSelected), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TIRES_DISABLED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttTabItemRightEdgeDisabled), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
TABP_PANE :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttPane), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_Tab class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_ListViewPopup(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
0 :
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clWindow));
|
|
//Windows Vista - W7
|
|
if (TOSVersion.Major=6) and ((TOSVersion.Minor=0) or (TOSVersion.Minor=1)) then
|
|
SetTextColor(hdc, ColorToRGB(StyleServices.GetSystemColor(clWindowText)));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_ListViewPopup class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_ToolTip(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LStartColor, LEndColor : TColor;
|
|
LCanvas : TCanvas;
|
|
SaveIndex : Integer;
|
|
begin
|
|
case iPartId of
|
|
|
|
TTP_STANDARD :
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetStyleColor(TStyleColor.scPanel));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TTP_BALLOON :
|
|
begin
|
|
//DrawStyleFillRect(hdc, pRect, StyleServices.GetStyleColor(TStyleColor.scPanel));
|
|
LStartColor := GetHighLightColor(StyleServices.GetStyleColor(TStyleColor.scPanel), 10);
|
|
LEndColor := StyleServices.GetStyleColor(TStyleColor.scPanel);
|
|
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
|
|
GradientFillCanvas(LCanvas, LStartColor, LEndColor,
|
|
Rect(pRect.Left, pRect.Top, pRect.Width, pRect.Bottom), TGradientDirection.gdVertical);
|
|
finally
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TTP_BALLOONSTEM :
|
|
begin
|
|
//if iStateId = 0 then
|
|
DrawStyleFillRect(hdc, pRect, GetHighLightColor(StyleServices.GetStyleColor(TStyleColor.scPanel), 10));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_ToolTip class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_TrackBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
TKP_TRACKVERT :
|
|
begin
|
|
case iStateId of
|
|
TKS_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbTrackVert), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
TKP_THUMBRIGHT :
|
|
begin
|
|
case iStateId of
|
|
TUS_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbThumbRightNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TUS_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbThumbRightHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TUS_PRESSED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbThumbRightPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TUS_FOCUSED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbThumbRightFocused), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TUS_DISABLED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbThumbRightDisabled), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_TrackBar class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_PreviewPane(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LColor : TColor;
|
|
begin
|
|
case iPartId of
|
|
1:
|
|
begin
|
|
case iStateId of
|
|
//background
|
|
1 :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tcpThemedHeader), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
3:
|
|
begin
|
|
case iStateId of
|
|
//left border of listview
|
|
0 :
|
|
begin
|
|
StyleServices.GetElementColor(StyleServices.GetElementDetails(tpPanelBackground), ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
4:
|
|
begin
|
|
case iStateId of
|
|
//left border of preview pane
|
|
0 :
|
|
begin
|
|
StyleServices.GetElementColor(StyleServices.GetElementDetails(tpPanelBackground), ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_PreviewPane class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_ToolBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LRect : TRect;
|
|
|
|
begin
|
|
case iPartId of
|
|
0 :
|
|
begin
|
|
case iStateId of
|
|
|
|
0 :
|
|
begin
|
|
if (hwnd <> 0) then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
|
|
LDetails.Element := teToolBar;
|
|
LDetails.Part := 0;
|
|
LDetails.State := 0;
|
|
//DrawStyleFillRect(hdc, pRect, clYellow);
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
TP_BUTTON :
|
|
begin
|
|
case iStateId of
|
|
|
|
TS_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_PRESSED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_NEARHOT :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonNearHot), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clRed);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
TP_SPLITBUTTON :
|
|
|
|
begin
|
|
case iStateId of
|
|
|
|
TS_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_PRESSED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
TS_NEARHOT :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonNearHot), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clRed);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_OTHERSIDEHOT :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonOtherSideHot), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clBlue);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
TP_SPLITBUTTONDROPDOWN :
|
|
begin
|
|
case iStateId of
|
|
|
|
TS_NORMAL :
|
|
begin
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 9;
|
|
LRect.Left := LRect.Left + 3;
|
|
DrawStyleArrow(hdc, TScrollDirection.sdDown, LRect.Location, 3, StyleServices.GetSystemColor(clWindowText));
|
|
//
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_PRESSED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TS_OTHERSIDEHOT :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownOtherSideHot), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_ToolBar hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_Rebar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
RP_BAND :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(trBand), pRect);
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clBtnFace));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
RP_BACKGROUND :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(trBackground), pRect);
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clBtnFace));
|
|
Exit(S_OK);
|
|
end
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_Rebar hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_AddressBand(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
case iPartId of
|
|
//address bar control
|
|
1 :
|
|
begin
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollNormal), pRect);
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clWindow));
|
|
DrawStyleRectangle(hdc, pRect, StyleServices.GetSystemColor(clBtnShadow));
|
|
Exit(S_OK);
|
|
end;
|
|
//hot
|
|
2:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollHot), pRect);
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clWindow));
|
|
DrawStyleRectangle(hdc, pRect, StyleServices.GetSystemColor(clBtnShadow));
|
|
Exit(S_OK);
|
|
end;
|
|
//editing
|
|
4:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollFocused), pRect);
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clWindow));
|
|
DrawStyleRectangle(hdc, pRect, StyleServices.GetSystemColor(clBtnShadow));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_AddressBand hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_SearchBox(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
begin
|
|
// OutputDebugString(PChar(Format('UxTheme_SearchBox hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
|
|
case iPartId of
|
|
//searchbox control
|
|
1 :
|
|
begin
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
//hot
|
|
2:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
4://editing
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollFocused), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
// X
|
|
// 2 :
|
|
// begin
|
|
// case iStateId of
|
|
//
|
|
// 1:
|
|
// begin
|
|
// AwesomeFont.DrawChar(hdc, fa_remove, pRect, StyleServices.GetSystemColor(clWindowText));
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// 2, //hot
|
|
// 3: //pressed
|
|
//
|
|
// begin
|
|
// LColor := StyleServices.GetSystemColor(clHighlight);
|
|
// AwesomeFont.DrawChar(hdc, fa_remove, pRect, LColor);
|
|
// //AlphaBlendRectangle(hdc, LColor, pRect, 32);
|
|
// Exit(S_OK);
|
|
// end;
|
|
// end;
|
|
// end;
|
|
|
|
//Magnifier
|
|
3 :
|
|
begin
|
|
case iStateId of
|
|
|
|
1: //normal
|
|
begin
|
|
FontAwesome.DrawChar(hdc, fa_search, pRect, StyleServices.GetSystemColor(clHighlight));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_SearchBox hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
|
|
|
|
function UxTheme_MonthCal(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
SaveIndex : Integer;
|
|
LRect : TRect;
|
|
LStartColor, LEndColor : TColor;
|
|
LCanvas : TCanvas;
|
|
begin
|
|
case iPartId of
|
|
MC_BORDERS :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(teEditBorderNoScrollNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_BACKGROUND,
|
|
MC_GRIDBACKGROUND :
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetStyleColor(scGrid));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
MC_COLHEADERSPLITTER : begin
|
|
LStartColor := StyleServices.GetSystemColor(clWindow);
|
|
LEndColor := StyleServices.GetSystemColor(clHighlight);
|
|
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
LRect:=pRect;
|
|
|
|
GradientFillCanvas(LCanvas, LStartColor, LEndColor,
|
|
Rect(LRect.Left, LRect.Top, LRect.Width div 2, LRect.Bottom), TGradientDirection.gdHorizontal);
|
|
|
|
GradientFillCanvas(LCanvas, LEndColor, LStartColor,
|
|
Rect(LRect.Width div 2, LRect.Top, LRect.Width, LRect.Bottom), TGradientDirection.gdHorizontal);
|
|
|
|
finally
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_GRIDCELLBACKGROUND : begin
|
|
|
|
LStartColor := StyleServices.GetSystemColor(clHighlight);
|
|
if iStateId = MCGCB_TODAY then
|
|
AlphaBlendRectangle(hdc, LStartColor, pRect, 200)
|
|
else
|
|
AlphaBlendRectangle(hdc, LStartColor, pRect, 96);
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_NAVNEXT : begin
|
|
case iStateId of
|
|
MCNN_NORMAL : LDetails := StyleServices.GetElementDetails(tsArrowBtnRightNormal);
|
|
MCNN_HOT : LDetails := StyleServices.GetElementDetails(tsArrowBtnRightHot);
|
|
MCNN_PRESSED : LDetails := StyleServices.GetElementDetails(tsArrowBtnRightPressed);
|
|
MCNN_DISABLED : LDetails := StyleServices.GetElementDetails(tsArrowBtnRightDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_NAVPREV : begin
|
|
case iStateId of
|
|
MCNP_NORMAL : LDetails := StyleServices.GetElementDetails(tsArrowBtnLeftNormal);
|
|
MCNP_HOT : LDetails := StyleServices.GetElementDetails(tsArrowBtnLeftHot);
|
|
MCNP_PRESSED : LDetails := StyleServices.GetElementDetails(tsArrowBtnLeftPressed);
|
|
MCNP_DISABLED: LDetails := StyleServices.GetElementDetails(tsArrowBtnLeftDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_MonthCal hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_DatePicker(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LRect : TRect;
|
|
LColor : TColor;
|
|
begin
|
|
case iPartId of
|
|
DP_DATEBORDER :
|
|
begin
|
|
case iStateId of
|
|
DPDB_NORMAL : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollNormal);
|
|
DPDB_HOT : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollHot);
|
|
DPDB_FOCUSED : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollFocused);
|
|
DPDB_DISABLED : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
DP_SHOWCALENDARBUTTONRIGHT :
|
|
begin
|
|
|
|
case iStateId of
|
|
DPSCBR_NORMAL :LDetails := StyleServices.GetElementDetails(tcBorderNormal);
|
|
DPSCBR_HOT :LDetails := StyleServices.GetElementDetails(tcBorderHot);
|
|
DPSCBR_PRESSED :LDetails := StyleServices.GetElementDetails(tcBorderHot);
|
|
DPSCBR_DISABLED :LDetails := StyleServices.GetElementDetails(tcBorderDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
|
|
case iStateId of
|
|
DPSCBR_NORMAL :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clWindowText);
|
|
end;
|
|
|
|
DPSCBR_HOT :
|
|
begin
|
|
LColor:= GetStyleHighLightColor;
|
|
end;
|
|
|
|
DPSCBR_PRESSED :
|
|
begin
|
|
LColor:= GetStyleHighLightColor;
|
|
end;
|
|
|
|
DPSCBR_DISABLED :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clGrayText);
|
|
end;
|
|
|
|
else
|
|
LColor := StyleServices.GetSystemColor(clWindowText);
|
|
end;
|
|
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -2, -2);
|
|
DrawStyleFillRect(hdc, LRect, StyleServices.GetStyleColor(TStyleColor.scEdit));
|
|
|
|
LRect:=Rect(0, 0, 14, 14);
|
|
RectVCenter(LRect, pRect);
|
|
OffsetRect(LRect, (pRect.Width - LRect.Width) div 2, 0);
|
|
FontAwesome.DrawChar(hdc, fa_calendar_o, LRect, LColor);
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_DatePicker hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_ListView(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
SaveIndex : Integer;
|
|
LCanvas : TCanvas;
|
|
LRect : TRect;
|
|
LColor, LStartColor : TColor;
|
|
begin
|
|
case iPartId of
|
|
LVP_LISTITEM :
|
|
begin
|
|
case iStateId of
|
|
LIS_HOT,
|
|
LISS_HOTSELECTED,
|
|
LIS_SELECTEDNOTFOCUS,
|
|
LIS_SELECTED :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
LRect := pRect;
|
|
if not SameText(LThemeClass, VSCLASS_LISTVIEW) then
|
|
InflateRect(LRect, -1, -1);
|
|
|
|
if iStateId=LISS_HOTSELECTED then
|
|
AlphaBlendRectangle(hdc, LColor, LRect, 96)
|
|
else
|
|
AlphaBlendRectangle(hdc, LColor, LRect, 50);
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
LVP_LISTDETAIL :
|
|
begin
|
|
case iStateId of
|
|
|
|
LIS_NORMAL,
|
|
LIS_HOT :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
LRect := pRect;
|
|
if not SameText(LThemeClass, VSCLASS_LISTVIEW) then
|
|
InflateRect(LRect, -1, -1);
|
|
|
|
if iStateId=LIS_HOT then
|
|
AlphaBlendRectangle(hdc, LColor, LRect, 96)
|
|
else
|
|
AlphaBlendRectangle(hdc, LColor, LRect, 50);
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
LVP_EXPANDBUTTON :
|
|
begin
|
|
case iStateId of
|
|
LVEB_NORMAL : LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedNormal);
|
|
LVEB_HOVER : LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedHot);
|
|
LVEB_PUSHED : LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedPressed);
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedNormal);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
LVP_COLLAPSEBUTTON :
|
|
begin
|
|
case iStateId of
|
|
LVCB_NORMAL : LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedNormal);
|
|
LVCB_HOVER : LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedHot);
|
|
LVCB_PUSHED : LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedPressed);
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedNormal);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
Exit(S_OK);
|
|
end;
|
|
LVP_GROUPHEADER :
|
|
begin
|
|
case iStateId of
|
|
LVGH_OPENMIXEDSELECTIONHOT,
|
|
LVGH_OPENSELECTED,
|
|
LVGH_OPENSELECTEDNOTFOCUSEDHOT,
|
|
LVGH_OPENSELECTEDHOT,
|
|
LVGH_CLOSEHOT,
|
|
LVGH_CLOSESELECTEDHOT,
|
|
LVGH_CLOSESELECTEDNOTFOCUSEDHOT,
|
|
LVGHL_CLOSESELECTED,
|
|
LVGH_CLOSESELECTEDNOTFOCUSED,
|
|
LVGH_CLOSEMIXEDSELECTION,
|
|
LVGH_CLOSEMIXEDSELECTIONHOT,
|
|
LVGH_OPENHOT :
|
|
begin
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
AlphaBlendRectangle(hdc, StyleServices.GetSystemColor(clHighlight), LRect, 96);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
LVP_GROUPHEADERLINE :
|
|
begin
|
|
|
|
case iStateId of
|
|
LVGHL_CLOSEHOT,
|
|
LVGHL_OPENHOT,
|
|
LVGHL_OPENMIXEDSELECTIONHOT,
|
|
LVGHL_OPENSELECTEDNOTFOCUSEDHOT,
|
|
LVGHL_CLOSESELECTEDNOTFOCUSEDHOT,
|
|
LVGHL_OPENSELECTED,
|
|
LVGHL_CLOSESELECTED,
|
|
LVGHL_CLOSESELECTEDHOT,
|
|
LVGHL_CLOSEMIXEDSELECTION,
|
|
LVGHL_CLOSEMIXEDSELECTIONHOT,
|
|
LVGHL_OPENSELECTEDHOT :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clWindowText);
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
LRect:=pRect;
|
|
GradientFillCanvas(LCanvas, StyleServices.GetSystemColor(LColor), StyleServices.GetStyleColor(TStyleColor.scEdit){StyleServices.GetSystemColor(clWindow)},
|
|
LRect, TGradientDirection.gdHorizontal);
|
|
finally
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
LVGHL_CLOSE,
|
|
LVGHL_OPENSELECTEDNOTFOCUSED,
|
|
LVGHL_OPEN,
|
|
LVGHL_OPENMIXEDSELECTION :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clWindowText);
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
LRect:=pRect;
|
|
GradientFillCanvas(LCanvas, StyleServices.GetSystemColor(LColor), StyleServices.GetStyleColor(TStyleColor.scEdit),
|
|
LRect, TGradientDirection.gdHorizontal);
|
|
finally
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
LVP_COLUMNDETAIL :
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clWindow);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK)
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_ListView hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
//DrawStyleFillRect(hdc, pRect, clYellow);
|
|
//Exit(S_OK)
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
|
|
function UxTheme_Header(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LRect : TRect;
|
|
LColor : TColor;
|
|
SaveIndex : Integer;
|
|
begin
|
|
case iPartId of
|
|
0 :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tcpThemedHeader), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
HP_HEADERITEM :
|
|
begin
|
|
case iStateId of
|
|
HIS_NORMAL : LDetails := StyleServices.GetElementDetails(thHeaderItemNormal);
|
|
HIS_HOT : LDetails := StyleServices.GetElementDetails(thHeaderItemHot);
|
|
HIS_PRESSED : LDetails := StyleServices.GetElementDetails(thHeaderItemPressed);
|
|
|
|
HIS_SORTEDNORMAL : LDetails := StyleServices.GetElementDetails(thHeaderItemNormal);
|
|
HIS_SORTEDHOT : LDetails := StyleServices.GetElementDetails(thHeaderItemHot);
|
|
HIS_SORTEDPRESSED : LDetails := StyleServices.GetElementDetails(thHeaderItemPressed);
|
|
|
|
HIS_ICONNORMAL : LDetails := StyleServices.GetElementDetails(thHeaderItemNormal);
|
|
HIS_ICONHOT : LDetails := StyleServices.GetElementDetails(thHeaderItemHot);
|
|
HIS_ICONPRESSED : LDetails := StyleServices.GetElementDetails(thHeaderItemPressed);
|
|
|
|
HIS_ICONSORTEDNORMAL : LDetails := StyleServices.GetElementDetails(thHeaderItemNormal);
|
|
HIS_ICONSORTEDHOT : LDetails := StyleServices.GetElementDetails(thHeaderItemHot);
|
|
HIS_ICONSORTEDPRESSED : LDetails := StyleServices.GetElementDetails(thHeaderItemPressed);
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(thHeaderItemNormal);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
HP_HEADERSORTARROW :
|
|
begin
|
|
// case iStateId of
|
|
// HSAS_SORTEDUP : LDetails := StyleServices.GetElementDetails(thHeaderSortArrowSortedUp);
|
|
// HSAS_SORTEDDOWN : LDetails := StyleServices.GetElementDetails(thHeaderSortArrowSortedDown);
|
|
// end;
|
|
|
|
LColor := GetStyleHighLightColor();
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 3;
|
|
if (iStateId=HSAS_SORTEDUP) then
|
|
DrawStyleArrow(hdc, TScrollDirection.sdUp, LRect.Location, 3, LColor)
|
|
else
|
|
DrawStyleArrow(hdc, TScrollDirection.sdDown, LRect.Location, 3, LColor);
|
|
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
HP_HEADERDROPDOWN :
|
|
begin
|
|
case iStateId of
|
|
HDDS_NORMAL : LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal); //tcDropDownButtonNormal, thHeaderDropDownNormal
|
|
HDDS_SOFTHOT : LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); //tcDropDownButtonHot, thHeaderDropDownSoftHot
|
|
HDDS_HOT : LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); //tcDropDownButtonHot, thHeaderDropDownHot
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
HP_HEADERDROPDOWNFILTER :
|
|
begin
|
|
case iStateId of
|
|
HDDFS_NORMAL : LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal); //tcDropDownButtonNormal, thHeaderDropDownNormal
|
|
HDDFS_SOFTHOT : LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); //tcDropDownButtonHot, thHeaderDropDownSoftHot
|
|
HDDFS_HOT : LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); //tcDropDownButtonHot, thHeaderDropDownHot
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_Header hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_ComboBox(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LRect : TRect;
|
|
begin
|
|
case iPartId of
|
|
CP_BORDER :
|
|
begin
|
|
case iStateId of
|
|
CBB_NORMAL : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcBorderNormal), pRect); Exit(S_OK); end;
|
|
CBB_HOT : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcBorderHot), pRect); Exit(S_OK); end;
|
|
CBB_FOCUSED : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcBorderFocused), pRect); Exit(S_OK); end;
|
|
CBB_DISABLED : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcBorderDisabled), pRect); Exit(S_OK); end;
|
|
end;
|
|
end;
|
|
|
|
CP_DROPDOWNBUTTONRIGHT :
|
|
begin
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -2, -2);
|
|
case iStateId of
|
|
CBXSR_NORMAL : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcDropDownButtonNormal), LRect); Exit(S_OK); end;
|
|
CBXSR_HOT : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcDropDownButtonHot), LRect); Exit(S_OK); end;
|
|
CBXSR_PRESSED : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcDropDownButtonPressed), LRect); Exit(S_OK); end;
|
|
CBXSR_DISABLED : begin DrawStyleElement(hdc, StyleServices.GetElementDetails(tcDropDownButtonDisabled), LRect); Exit(S_OK); end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_ComboBox class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_Spin(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LRect : TRect;
|
|
LColor : TColor;
|
|
begin
|
|
case iPartId of
|
|
SPNP_UP :
|
|
begin
|
|
case iStateId of
|
|
UPS_NORMAL : LDetails := StyleServices.GetElementDetails(tsUpNormal);
|
|
UPS_HOT : LDetails := StyleServices.GetElementDetails(tsUpHot);
|
|
UPS_PRESSED : LDetails := StyleServices.GetElementDetails(tsUpPressed);
|
|
UPS_DISABLED : LDetails := StyleServices.GetElementDetails(tsUpDisabled);
|
|
end;
|
|
|
|
LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextNormal);
|
|
case iStateId of
|
|
UPS_NORMAL : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextNormal);
|
|
UPS_HOT : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextHot);
|
|
UPS_PRESSED : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextPressed);
|
|
UPS_DISABLED : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextDisabled);
|
|
end;
|
|
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 3;
|
|
LRect.Left := LRect.Left + 5;
|
|
DrawStyleArrow(hdc, TScrollDirection.sdUp, LRect.Location, 2, LColor);
|
|
|
|
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
SPNP_DOWN :
|
|
begin
|
|
case iStateId of
|
|
DNS_NORMAL : LDetails := StyleServices.GetElementDetails(tsDownNormal);
|
|
DNS_HOT : LDetails := StyleServices.GetElementDetails(tsDownHot);
|
|
DNS_PRESSED : LDetails := StyleServices.GetElementDetails(tsDownPressed);
|
|
DNS_DISABLED : LDetails := StyleServices.GetElementDetails(tsDownDisabled);
|
|
end;
|
|
|
|
LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextNormal);
|
|
case iStateId of
|
|
DNS_NORMAL : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextNormal);
|
|
DNS_HOT : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextHot);
|
|
DNS_PRESSED : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextPressed);
|
|
DNS_DISABLED : LColor := StyleServices.GetStyleFontColor(TStyleFont.sfButtonTextDisabled);
|
|
end;
|
|
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 3;
|
|
LRect.Left := LRect.Left + 5;
|
|
DrawStyleArrow(hdc, TScrollDirection.sdDown, LRect.Location, 2, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_Spin class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_ListBox(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
begin
|
|
case iPartId of
|
|
LBCP_BORDER_NOSCROLL :
|
|
begin
|
|
case iStateId of
|
|
LBPSN_NORMAL : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollNormal);
|
|
LBPSN_FOCUSED : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollFocused);
|
|
LBPSN_HOT : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollHot);
|
|
LBPSN_DISABLED : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_ListBox class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
|
|
function UxTheme_Navigation(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LColor : TColor;
|
|
LCanvas : TCanvas;
|
|
LRect : TRect;
|
|
LBitmap : TBitmap;
|
|
LIcon : Word;
|
|
begin
|
|
case iPartId of
|
|
1, //left button
|
|
2 ://right button
|
|
begin
|
|
|
|
case iStateId of
|
|
1, //enabled left
|
|
2, //hot left
|
|
3, //pressed left
|
|
4 : //disabled left
|
|
begin
|
|
LBitmap := TBitmap.Create;
|
|
try
|
|
if iPartId = 1 then
|
|
LIcon:= fa_arrow_left
|
|
else
|
|
LIcon:= fa_arrow_right;
|
|
|
|
LBitmap.PixelFormat := pf24bit;
|
|
LBitmap.SetSize(pRect.Width, pRect.Height);
|
|
LRect:= Rect(0, 0, LBitmap.Width, LBitmap.Height);
|
|
|
|
LColor:= StyleServices.GetSystemColor(clBtnFace);
|
|
DrawStyleFillRect(LBitmap.Canvas.Handle, pRect, LColor);
|
|
|
|
case iStateId of
|
|
|
|
1 :
|
|
begin
|
|
DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(ttbButtonNormal), pRect);
|
|
//DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(tbCommandLinkGlyphNormal), LRect);
|
|
LRect := Rect(0, 0, 16, 16);
|
|
RectVCenter(LRect, pRect);
|
|
OffsetRect(LRect, (pRect.Width - LRect.Width) div 2, 0);
|
|
FontAwesome.DrawChar(LBitmap.Canvas.Handle, LIcon, LRect, StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
2 :
|
|
begin
|
|
DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(ttbButtonHot), pRect);
|
|
//DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(tbCommandLinkGlyphHot), LRect);
|
|
LRect := Rect(0, 0, 16, 16);
|
|
RectVCenter(LRect, pRect);
|
|
OffsetRect(LRect, (pRect.Width - LRect.Width) div 2, 0);
|
|
FontAwesome.DrawChar(LBitmap.Canvas.Handle, LIcon, LRect, StyleServices.GetSystemColor(clHighlight));
|
|
end;
|
|
|
|
3 :
|
|
begin
|
|
DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(ttbButtonPressed), pRect);
|
|
//DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(tbCommandLinkGlyphPressed), LRect);
|
|
LRect := Rect(0, 0, 16, 16);
|
|
RectVCenter(LRect, pRect);
|
|
OffsetRect(LRect, (pRect.Width - LRect.Width) div 2, 0);
|
|
FontAwesome.DrawChar(LBitmap.Canvas.Handle, LIcon, LRect, StyleServices.GetSystemColor(clHighlight));
|
|
end;
|
|
|
|
4 :
|
|
begin
|
|
DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(ttbButtonDisabled), pRect);
|
|
//DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(tbCommandLinkGlyphDisabled), LRect);
|
|
LRect := Rect(0, 0, 16, 16);
|
|
RectVCenter(LRect, pRect);
|
|
OffsetRect(LRect, (pRect.Width - LRect.Width) div 2, 0);
|
|
FontAwesome.DrawChar(LBitmap.Canvas.Handle, LIcon, LRect, StyleServices.GetSystemColor(clGrayText));
|
|
end;
|
|
end;
|
|
|
|
|
|
//FlipBitmap24Horizontal(LBitmap);
|
|
LCanvas := TCanvas.Create;
|
|
try
|
|
LCanvas.Handle := hdc;
|
|
LCanvas.Draw(pRect.Left, pRect.Top, LBitmap);
|
|
finally
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
end;
|
|
|
|
finally
|
|
LBitmap.Free;
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
|
|
|
|
3 : //drop down button
|
|
begin
|
|
case iStateId of
|
|
1 : //enabled
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clBtnFace));
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
2 : //hot
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clBtnFace));
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
3 : //pressed
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clBtnFace));
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
4 : //disabled
|
|
begin
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clBtnFace));
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(ttbSplitButtonDropDownDisabled), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_Navigation class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_TreeView(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LColor : TColor;
|
|
LRect : TRect;
|
|
begin
|
|
case iPartId of
|
|
TVP_GLYPH :
|
|
begin
|
|
LColor:= StyleServices.GetSystemColor(clWindowText);
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 5;
|
|
LRect.Left := LRect.Left + 5;
|
|
|
|
if (iStateId=GLPS_OPENED) or (iStateId=HGLPS_OPENED) then
|
|
DrawStyleArrow(hdc, TScrollDirection.sdDown, LRect.Location, 3, LColor)
|
|
else
|
|
DrawStyleArrow(hdc, TScrollDirection.sdRight, LRect.Location, 3, LColor);
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TVP_HOTGLYPH :
|
|
begin
|
|
LColor:= StyleServices.GetSystemColor(clHighlightText);
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 5;
|
|
LRect.Left := LRect.Left + 5;
|
|
|
|
if (iStateId=HGLPS_OPENED) then
|
|
DrawStyleArrow(hdc, TScrollDirection.sdDown, LRect.Location, 3, LColor)
|
|
else
|
|
DrawStyleArrow(hdc, TScrollDirection.sdRight, LRect.Location, 3, LColor);
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TVP_TREEITEM :
|
|
begin
|
|
case iStateId of
|
|
TREIS_HOT,
|
|
TREIS_SELECTED,
|
|
TREIS_SELECTEDNOTFOCUS,
|
|
TREIS_HOTSELECTED
|
|
:
|
|
begin
|
|
AlphaBlendRectangle(hdc, StyleServices.GetSystemColor(clHighlight), pRect, 96);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_TreeView class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_Button(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
SaveIndex : Integer;
|
|
begin
|
|
case iPartId of
|
|
|
|
BP_PUSHBUTTON :
|
|
begin
|
|
case iStateId of
|
|
PBS_NORMAL : LDetails := StyleServices.GetElementDetails(tbPushButtonNormal);
|
|
PBS_HOT : LDetails := StyleServices.GetElementDetails(tbPushButtonHot);
|
|
PBS_PRESSED : LDetails := StyleServices.GetElementDetails(tbPushButtonPressed);
|
|
PBS_DISABLED : LDetails := StyleServices.GetElementDetails(tbPushButtonDisabled);
|
|
PBS_DEFAULTED : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaulted);
|
|
PBS_DEFAULTED_ANIMATING : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaultedAnimating);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
BP_COMMANDLINK :
|
|
begin
|
|
|
|
case iStateId of
|
|
CMDLS_NORMAL : LDetails := StyleServices.GetElementDetails(tbPushButtonNormal);
|
|
CMDLS_HOT : LDetails := StyleServices.GetElementDetails(tbPushButtonHot);
|
|
CMDLS_PRESSED : LDetails := StyleServices.GetElementDetails(tbPushButtonPressed);
|
|
CMDLS_DISABLED : LDetails := StyleServices.GetElementDetails(tbPushButtonDisabled);
|
|
CMDLS_DEFAULTED : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaulted);
|
|
CMDLS_DEFAULTED_ANIMATING : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaultedAnimating);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
BP_COMMANDLINKGLYPH :
|
|
begin
|
|
case iStateId of
|
|
CMDLGS_NORMAL : LDetails := StyleServices.GetElementDetails(tbCommandLinkGlyphNormal);
|
|
CMDLGS_HOT : LDetails := StyleServices.GetElementDetails(tbCommandLinkGlyphHot);
|
|
CMDLGS_PRESSED : LDetails := StyleServices.GetElementDetails(tbCommandLinkGlyphPressed);
|
|
CMDLGS_DISABLED : LDetails := StyleServices.GetElementDetails(tbCommandLinkGlyphDisabled);
|
|
CMDLGS_DEFAULTED: LDetails := StyleServices.GetElementDetails(tbCommandLinkGlyphDefaulted);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
BP_RADIOBUTTON :
|
|
begin
|
|
case iStateId of
|
|
RBS_UNCHECKEDNORMAL : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedNormal);
|
|
RBS_UNCHECKEDHOT : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedHot);
|
|
RBS_UNCHECKEDPRESSED : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedPressed);
|
|
RBS_UNCHECKEDDISABLED : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedDisabled);
|
|
RBS_CHECKEDNORMAL : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedNormal);
|
|
RBS_CHECKEDHOT : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedHot);
|
|
RBS_CHECKEDPRESSED : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedPressed);
|
|
RBS_CHECKEDDISABLED : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
BP_CHECKBOX :
|
|
begin
|
|
case iStateId of
|
|
CBS_UNCHECKEDNORMAL : LDetails := StyleServices.GetElementDetails(tbCheckBoxUncheckedNormal);
|
|
CBS_UNCHECKEDHOT : LDetails := StyleServices.GetElementDetails(tbCheckBoxUncheckedHot);
|
|
CBS_UNCHECKEDPRESSED : LDetails := StyleServices.GetElementDetails(tbCheckBoxUncheckedPressed);
|
|
CBS_UNCHECKEDDISABLED : LDetails := StyleServices.GetElementDetails(tbCheckBoxUncheckedDisabled);
|
|
CBS_CHECKEDNORMAL : LDetails := StyleServices.GetElementDetails(tbCheckBoxCheckedNormal);
|
|
CBS_CHECKEDHOT : LDetails := StyleServices.GetElementDetails(tbCheckBoxCheckedHot);
|
|
CBS_CHECKEDPRESSED : LDetails := StyleServices.GetElementDetails(tbCheckBoxCheckedPressed);
|
|
CBS_CHECKEDDISABLED : LDetails := StyleServices.GetElementDetails(tbCheckBoxCheckedDisabled);
|
|
CBS_MIXEDNORMAL : LDetails := StyleServices.GetElementDetails(tbCheckBoxMixedNormal);
|
|
CBS_MIXEDHOT : LDetails := StyleServices.GetElementDetails(tbCheckBoxMixedHot);
|
|
CBS_MIXEDPRESSED : LDetails := StyleServices.GetElementDetails(tbCheckBoxMixedPressed);
|
|
CBS_MIXEDDISABLED : LDetails := StyleServices.GetElementDetails(tbCheckBoxMixedDisabled);
|
|
{ For Windows >= Vista }
|
|
CBS_IMPLICITNORMAL : LDetails := StyleServices.GetElementDetails(tbCheckBoxImplicitNormal);
|
|
CBS_IMPLICITHOT : LDetails := StyleServices.GetElementDetails(tbCheckBoxImplicitHot);
|
|
CBS_IMPLICITPRESSED : LDetails := StyleServices.GetElementDetails(tbCheckBoxImplicitPressed);
|
|
CBS_IMPLICITDISABLED : LDetails := StyleServices.GetElementDetails(tbCheckBoxImplicitDisabled);
|
|
CBS_EXCLUDEDNORMAL : LDetails := StyleServices.GetElementDetails(tbCheckBoxExcludedNormal);
|
|
CBS_EXCLUDEDHOT : LDetails := StyleServices.GetElementDetails(tbCheckBoxExcludedHot);
|
|
CBS_EXCLUDEDPRESSED : LDetails := StyleServices.GetElementDetails(tbCheckBoxExcludedPressed);
|
|
CBS_EXCLUDEDDISABLED : LDetails := StyleServices.GetElementDetails(tbCheckBoxExcludedDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_Button class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
function UxTheme_TaskDialog(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LStartColor, LEndColor, LColor : TColor;
|
|
SaveIndex : Integer;
|
|
LDetails : TThemedElementDetails;
|
|
LCanvas : TCanvas;
|
|
begin
|
|
case iPartId of
|
|
|
|
TDLG_PRIMARYPANEL :
|
|
begin
|
|
//LDetails := StyleServices.GetElementDetails(ttdPrimaryPanel); //ttdPrimaryPanel this element is not included in the VCL Styles yet
|
|
|
|
LColor := StyleServices.GetStyleColor(scEdit);
|
|
if LColor = StyleServices.GetStyleColor(scBorder) then
|
|
LColor := StyleServices.GetStyleColor(scPanel);//GetShadowColor(LColor, -10);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TDLG_FOOTNOTEPANE,
|
|
TDLG_SECONDARYPANEL :
|
|
begin
|
|
//LDetails := StyleServices.GetElementDetails(tpPanelBackground); //ttdSecondaryPanel this element is not included in the VCL Styles yet
|
|
StyleServices.GetElementColor(StyleServices.GetElementDetails(tpPanelBackground), ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TDLG_EXPANDOBUTTON :
|
|
begin
|
|
case iStateId of
|
|
TDLGEBS_NORMAL : LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedNormal);
|
|
TDLGEBS_HOVER : LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedHot);
|
|
TDLGEBS_PRESSED : LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedPressed);
|
|
TDLGEBS_EXPANDEDNORMAL : LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedNormal);
|
|
TDLGEBS_EXPANDEDHOVER : LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedHot);
|
|
TDLGEBS_EXPANDEDPRESSED : LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedPressed);
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if (hwnd <> 0) then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
TDLG_FOOTNOTESEPARATOR :
|
|
begin
|
|
LStartColor := StyleServices.GetSystemColor(clBtnShadow);
|
|
LEndColor := StyleServices.GetSystemColor(clBtnHighlight);
|
|
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
LCanvas.Pen.Color:=LStartColor;
|
|
LCanvas.MoveTo(pRect.Left, pRect.Top);
|
|
LCanvas.LineTo(pRect.Right, pRect.Top);
|
|
LCanvas.Pen.Color:=LEndColor;
|
|
LCanvas.MoveTo(pRect.Left, pRect.Top+1);
|
|
LCanvas.LineTo(pRect.Right, pRect.Top+1);
|
|
finally
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_TaskDialog class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
function UxTheme_ProgressBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
SaveIndex : Integer;
|
|
begin
|
|
case iPartId of
|
|
PP_BAR : LDetails := StyleServices.GetElementDetails(tpBar);
|
|
PP_BARVERT : LDetails := StyleServices.GetElementDetails(tpBarVert);
|
|
PP_CHUNK : LDetails := StyleServices.GetElementDetails(tpChunk);
|
|
PP_CHUNKVERT : LDetails := StyleServices.GetElementDetails(tpChunkVert);
|
|
|
|
PP_FILL : if SameText(LThemeClass, VSCLASS_PROGRESS) then
|
|
LDetails := StyleServices.GetElementDetails(tpChunk)//GetElementDetails(tpChunk);//GetElementDetails(tpFill); not defined
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(tpBar);
|
|
PP_FILLVERT : LDetails := StyleServices.GetElementDetails(tpChunkVert);//GetElementDetails(tpFillVert); not defined
|
|
|
|
// Use the Native PP_PULSEOVERLAY part to get better results.
|
|
// PP_PULSEOVERLAY : if SameText(THThemesClasses.Items[hTheme], VSCLASS_PROGRESS) then
|
|
// LDetails := StyleServices.GetElementDetails(tpChunk)//GetElementDetails(tpPulseOverlay);
|
|
// else
|
|
// LDetails := StyleServices.GetElementDetails(tpBar);
|
|
|
|
PP_MOVEOVERLAY : if SameText(LThemeClass, VSCLASS_PROGRESS) then
|
|
LDetails := StyleServices.GetElementDetails(tpMoveOverlay)
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(tpChunk);
|
|
|
|
// PP_PULSEOVERLAYVERT : LDetails := StyleServices.GetElementDetails(tpPulseOverlayVert);
|
|
// PP_MOVEOVERLAYVERT : LDetails := StyleServices.GetElementDetails(tpMoveOverlayVert);
|
|
|
|
PP_TRANSPARENTBAR : LDetails := StyleServices.GetElementDetails(tpBar);//GetElementDetails(tpTransparentBarNormal); not defined
|
|
PP_TRANSPARENTBARVERT : LDetails := StyleServices.GetElementDetails(tpBarVert);//GetElementDetails(tpTransparentBarVertNormal); not defined
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('UxTheme_ProgressBar hTheme %d iPartId %d iStateId %d', [hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
end;
|
|
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
if hwnd<>0 then
|
|
DrawStyleParentBackground(hwnd, hdc, pRect);
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
Result := S_OK;
|
|
end;
|
|
|
|
|
|
function UxTheme_ScrollBar(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LScrollDetails: TThemedScrollBar;
|
|
begin
|
|
LScrollDetails := tsScrollBarRoot;
|
|
LDetails.Element := TThemedElement.teScrollBar;
|
|
LDetails.Part := iPartId;
|
|
LDetails.State := iStateId;
|
|
LDetails := StyleServices.GetElementDetails(TThemedScrollBar.tsThumbBtnHorzNormal);
|
|
|
|
case iPartId of
|
|
SBP_ARROWBTN :
|
|
begin
|
|
case iStateId of
|
|
ABS_UPNORMAL : LScrollDetails := tsArrowBtnUpNormal;
|
|
ABS_UPHOT : LScrollDetails := tsArrowBtnUpHot;
|
|
ABS_UPPRESSED : LScrollDetails := tsArrowBtnUpPressed;
|
|
ABS_UPDISABLED : LScrollDetails := tsArrowBtnUpDisabled;
|
|
ABS_DOWNNORMAL : LScrollDetails := tsArrowBtnDownNormal;
|
|
ABS_DOWNHOT : LScrollDetails := tsArrowBtnDownHot;
|
|
ABS_DOWNPRESSED : LScrollDetails := tsArrowBtnDownPressed;
|
|
ABS_DOWNDISABLED : LScrollDetails := tsArrowBtnDownDisabled;
|
|
ABS_LEFTNORMAL : LScrollDetails := tsArrowBtnLeftNormal;
|
|
ABS_LEFTHOT : LScrollDetails := tsArrowBtnLeftHot;
|
|
ABS_LEFTPRESSED : LScrollDetails := tsArrowBtnLeftPressed;
|
|
ABS_LEFTDISABLED : LScrollDetails := tsArrowBtnLeftDisabled;
|
|
ABS_RIGHTNORMAL : LScrollDetails := tsArrowBtnRightNormal;
|
|
ABS_RIGHTHOT : LScrollDetails := tsArrowBtnRightHot;
|
|
ABS_RIGHTPRESSED : LScrollDetails := tsArrowBtnRightPressed;
|
|
ABS_RIGHTDISABLED : LScrollDetails := tsArrowBtnRightDisabled;
|
|
ABS_UPHOVER : LScrollDetails := tsArrowBtnUpNormal;//tsArrowBtnUpHover;
|
|
ABS_DOWNHOVER : LScrollDetails := tsArrowBtnDownNormal;//tsArrowBtnDownHover;
|
|
ABS_LEFTHOVER : LScrollDetails := tsArrowBtnLeftNormal;//tsArrowBtnLeftHover;
|
|
ABS_RIGHTHOVER : LScrollDetails := tsArrowBtnRightNormal;//tsArrowBtnRightHover;
|
|
end;
|
|
end;
|
|
|
|
SBP_THUMBBTNHORZ:
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsThumbBtnHorzNormal;
|
|
SCRBS_HOT : LScrollDetails := tsThumbBtnHorzHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsThumbBtnHorzPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsThumbBtnHorzDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsThumbBtnHorzNormal;
|
|
end;
|
|
end;
|
|
|
|
SBP_THUMBBTNVERT:
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsThumbBtnVertNormal;
|
|
SCRBS_HOT : LScrollDetails := tsThumbBtnVertHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsThumbBtnVertPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsThumbBtnVertDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsThumbBtnVertNormal;
|
|
end;
|
|
end;
|
|
|
|
SBP_LOWERTRACKHORZ:
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsLowerTrackHorzNormal;
|
|
SCRBS_HOT : LScrollDetails := tsLowerTrackHorzHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsLowerTrackHorzPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsLowerTrackHorzDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsLowerTrackHorzNormal;//tsLowerTrackHorzHover; //no support for hover
|
|
end;
|
|
end;
|
|
|
|
SBP_UPPERTRACKHORZ :
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsUpperTrackHorzNormal;
|
|
SCRBS_HOT : LScrollDetails := tsUpperTrackHorzHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsUpperTrackHorzPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsUpperTrackHorzDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsUpperTrackHorzNormal;//tsUpperTrackHorzHover; //no support for hover
|
|
end;
|
|
end;
|
|
|
|
SBP_LOWERTRACKVERT:
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsLowerTrackVertNormal;
|
|
SCRBS_HOT : LScrollDetails := tsLowerTrackVertHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsLowerTrackVertPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsLowerTrackVertDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsLowerTrackVertNormal;//tsLowerTrackVertHover; //no support for hover
|
|
end;
|
|
end;
|
|
|
|
SBP_UPPERTRACKVERT:
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsUpperTrackVertNormal;
|
|
SCRBS_HOT : LScrollDetails := tsUpperTrackVertHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsUpperTrackVertPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsUpperTrackVertDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsUpperTrackVertNormal;//tsUpperTrackVertHover; //no support for hover
|
|
end;
|
|
end;
|
|
|
|
SBP_SIZEBOX :
|
|
begin
|
|
case iStateId of
|
|
SZB_RIGHTALIGN : LScrollDetails := tsSizeBoxRightAlign;
|
|
SZB_LEFTALIGN : LScrollDetails := tsSizeBoxLeftAlign;
|
|
SZB_TOPRIGHTALIGN : LScrollDetails := tsSizeBoxTopRightAlign;
|
|
SZB_TOPLEFTALIGN : LScrollDetails := tsSizeBoxTopLeftAlign;
|
|
SZB_HALFBOTTOMRIGHTALIGN : LScrollDetails := tsSizeBoxHalfBottomRightAlign;
|
|
SZB_HALFBOTTOMLEFTALIGN : LScrollDetails := tsSizeBoxHalfBottomLeftAlign;
|
|
SZB_HALFTOPRIGHTALIGN : LScrollDetails := tsSizeBoxHalfTopRightAlign;
|
|
SZB_HALFTOPLEFTALIGN : LScrollDetails := tsSizeBoxHalfTopLeftAlign;
|
|
end;
|
|
end;
|
|
|
|
SBP_GRIPPERHORZ :
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsGripperHorzNormal;
|
|
SCRBS_HOT : LScrollDetails := tsGripperHorzHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsGripperHorzPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsGripperHorzDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsGripperHorzHover;//tsGripperHorzHover; //no support for hover
|
|
end;
|
|
end;
|
|
|
|
SBP_GRIPPERVERT :
|
|
begin
|
|
case iStateId of
|
|
SCRBS_NORMAL : LScrollDetails := tsGripperVertNormal;
|
|
SCRBS_HOT : LScrollDetails := tsGripperVertHot;
|
|
SCRBS_PRESSED : LScrollDetails := tsGripperVertPressed;
|
|
SCRBS_DISABLED : LScrollDetails := tsGripperVertDisabled;
|
|
SCRBS_HOVER : LScrollDetails := tsGripperVertNormal;//tsGripperVertHover; //no support for hover
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
LDetails := StyleServices.GetElementDetails(LScrollDetails);
|
|
|
|
if (iPartId=SBP_THUMBBTNHORZ) then
|
|
StyleServices.DrawElement(hdc, StyleServices.GetElementDetails(tsUpperTrackHorzNormal), pRect, nil)
|
|
else
|
|
if (iPartId=SBP_THUMBBTNVERT) then
|
|
StyleServices.DrawElement(hdc, StyleServices.GetElementDetails(tsUpperTrackVertNormal), pRect, nil);
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_ScrollBar class %s hTheme %d iPartId %d iStateId %d Left %d Top %d Width %d Height %d',
|
|
//[THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId, PRect.Left, prect.Top, prect.Width, prect.Height])));
|
|
StyleServices.DrawElement(hdc, LDetails, pRect, nil);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
function UxTheme_Edit(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND = 0): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
begin
|
|
//OutputDebugString(PChar(Format('UxTheme_Edit class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme], hTheme, iPartId, iStateId])));
|
|
case iPartId of
|
|
|
|
EP_BACKGROUNDWITHBORDER,
|
|
EP_EDITBORDER_NOSCROLL :
|
|
begin
|
|
case iStateId of
|
|
EPSN_NORMAL : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollNormal);
|
|
EPSN_HOT : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollHot);
|
|
EPSN_FOCUSED : LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollFocused);
|
|
EPSN_DISABLED :
|
|
begin
|
|
//LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollDisabled);
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clWindow));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
EP_EDITBORDER_HSCROLL :
|
|
begin
|
|
case iStateId of
|
|
EPSH_NORMAL : LDetails := StyleServices.GetElementDetails(teEditBorderHScrollNormal);
|
|
EPSH_HOT : LDetails := StyleServices.GetElementDetails(teEditBorderHScrollHot);
|
|
EPSH_FOCUSED : LDetails := StyleServices.GetElementDetails(teEditBorderHScrollFocused);
|
|
EPSH_DISABLED : LDetails := StyleServices.GetElementDetails(teEditBorderHScrollDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
EP_EDITBORDER_VSCROLL :
|
|
begin
|
|
case iStateId of
|
|
EPSV_NORMAL : LDetails := StyleServices.GetElementDetails(teEditBorderVScrollNormal);
|
|
EPSV_HOT : LDetails := StyleServices.GetElementDetails(teEditBorderVScrollHot);
|
|
EPSV_FOCUSED : LDetails := StyleServices.GetElementDetails(teEditBorderVScrollFocused);
|
|
EPSV_DISABLED : LDetails := StyleServices.GetElementDetails(teEditBorderVScrollDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
EP_EDITBORDER_HVSCROLL :
|
|
begin
|
|
case iStateId of
|
|
EPSHV_NORMAL : LDetails := StyleServices.GetElementDetails(teEditBorderHVScrollNormal);
|
|
EPSHV_HOT : LDetails := StyleServices.GetElementDetails(teEditBorderHVScrollHot);
|
|
EPSHV_FOCUSED : LDetails := StyleServices.GetElementDetails(teEditBorderHVScrollFocused);
|
|
EPSHV_DISABLED : LDetails := StyleServices.GetElementDetails(teEditBorderHVScrollDisabled);
|
|
end;
|
|
|
|
DrawStyleElement(hdc, LDetails, pRect);
|
|
Exit(S_OK);
|
|
end
|
|
|
|
end;
|
|
//OutputDebugString(PChar(Format('UxTheme_Edit class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
|
|
end;
|
|
|
|
|
|
|
|
{$IFDEF HOOK_Menu}
|
|
|
|
procedure DrawMenuSpecialChar(DC: HDC; const Sign: Char; DestRect: TRect; const Bold: Boolean = False; const Disabled: Boolean = False);
|
|
var
|
|
LogFont: TLogFont;
|
|
pOldFont: HGDIOBJ;
|
|
AFont: HFONT;
|
|
oldColor: COLORREF;
|
|
OldMode: integer;
|
|
begin
|
|
LogFont.lfHeight := DestRect.Height;
|
|
LogFont.lfWidth := 0;
|
|
LogFont.lfEscapement := 0;
|
|
LogFont.lfOrientation := 0;
|
|
if Bold then
|
|
LogFont.lfWeight := FW_BOLD
|
|
else
|
|
LogFont.lfWeight := FW_NORMAL;
|
|
LogFont.lfItalic := 0;
|
|
LogFont.lfUnderline := 0;
|
|
LogFont.lfStrikeOut := 0;
|
|
LogFont.lfCharSet := DEFAULT_CHARSET;
|
|
LogFont.lfOutPrecision := OUT_DEFAULT_PRECIS;
|
|
LogFont.lfClipPrecision := CLIP_DEFAULT_PRECIS;
|
|
LogFont.lfQuality := ANTIALIASED_QUALITY;//DEFAULT_QUALITY;
|
|
LogFont.lfPitchAndFamily := DEFAULT_PITCH;
|
|
LogFont.lfFaceName := 'Marlett';
|
|
|
|
if Disabled then
|
|
oldColor := ColorToRGB(StyleServices.GetStyleFontColor(sfPopupMenuItemTextDisabled))
|
|
else
|
|
oldColor := ColorToRGB(StyleServices.GetStyleFontColor(sfPopupMenuItemTextNormal));
|
|
|
|
AFont := CreateFontIndirect(LogFont);
|
|
if AFont <> 0 then
|
|
try
|
|
oldColor := SetTextColor(DC, oldColor);
|
|
pOldFont := SelectObject(DC, AFont);
|
|
try
|
|
OldMode := SetBkMode(DC, Transparent);
|
|
Winapi.Windows.DrawText(DC, Sign, 1, DestRect, DT_LEFT or DT_SINGLELINE);
|
|
SetBkMode(DC, OldMode);
|
|
SelectObject(DC, oldColor);
|
|
finally
|
|
if pOldFont <> 0 then
|
|
SelectObject(DC, pOldFont);
|
|
end;
|
|
finally
|
|
DeleteObject(AFont);
|
|
end;
|
|
end;
|
|
|
|
function UxTheme_Menu(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LRect, LRect2 : TRect;
|
|
LColor : TColor;
|
|
LPRect : System.Types.PRect;
|
|
begin
|
|
|
|
case iPartId of
|
|
|
|
MENU_POPUPBORDERS : //OK
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBorders), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MENU_POPUPITEM : //OK
|
|
begin
|
|
case iStateId of
|
|
MPI_NORMAL :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupItemNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MPI_HOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupItemHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MPI_DISABLED :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupItemDisabled), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MPI_DISABLEDHOT :
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupItemHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// MENU_BARBACKGROUND :
|
|
// begin
|
|
// case iStateId of
|
|
// MB_ACTIVE :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarBackgroundActive), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// MB_INACTIVE :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarBackgroundInactive), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
// end;
|
|
// end;
|
|
//
|
|
// MENU_BARITEM :
|
|
// begin
|
|
// case iStateId of
|
|
// MBI_NORMAL :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemNormal), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// MBI_HOT :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemHot), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// MBI_PUSHED :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemPushed), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// MBI_DISABLED :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemDisabled), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// MBI_DISABLEDHOT :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemDisabledHot), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
//
|
|
// MBI_DISABLEDPUSHED :
|
|
// begin
|
|
// DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemDisabledPushed), pRect);
|
|
// Exit(S_OK);
|
|
// end;
|
|
// end;
|
|
// end;
|
|
|
|
MENU_POPUPSEPARATOR : //ok
|
|
|
|
begin
|
|
//W7 Only ??
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupItemNormal), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupSeparator), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MENU_POPUPGUTTER :
|
|
begin
|
|
if Foo<>nil then
|
|
begin
|
|
LPRect:=Foo;
|
|
if (LPRect.Width>0) and (LPRect.Height>0) then
|
|
begin
|
|
LRect2:=LPRect^;
|
|
//DrawStyleParentBackground(hwnd, hdc, LRect2);
|
|
DrawStyleFillRect(hdc, LRect2, StyleServices.GetSystemColor(clMenu));
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), LRect2);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
DrawStyleFillRect(hdc, pRect, StyleServices.GetSystemColor(clMenu));
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
MENU_POPUPBACKGROUND :
|
|
begin
|
|
LPRect:=nil;
|
|
if Foo<>nil then
|
|
begin
|
|
LPRect:=Foo;
|
|
if (LPRect.Width=0) or (LPRect.Height=0) then
|
|
LPRect:=nil;
|
|
end;
|
|
|
|
if LPRect=nil then
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), pRect);
|
|
Exit(S_OK);
|
|
end
|
|
else
|
|
begin
|
|
LRect2:=LPRect^;
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), LRect2);
|
|
//DrawStyleParentBackgroundEx(hwnd, hdc, LRect2);
|
|
DrawStyleFillRect(hdc, LRect2, StyleServices.GetSystemColor(clMenu));
|
|
//Windows Vista - W7
|
|
if (TOSVersion.Major=6) and ((TOSVersion.Minor=0) or (TOSVersion.Minor=1)) then
|
|
SetTextColor(hdc, ColorToRGB(GetStyleMenuTextColor));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
|
|
MENU_POPUPSUBMENU : //OK
|
|
begin
|
|
case iStateId of
|
|
MSM_DISABLED,
|
|
MSM_NORMAL :
|
|
begin
|
|
if iStateId=MSM_DISABLED then
|
|
LColor:= StyleServices.GetStyleFontColor(sfPopupMenuItemTextDisabled)
|
|
else
|
|
LColor:= StyleServices.GetStyleFontColor(sfPopupMenuItemTextNormal);
|
|
|
|
LRect:= pRect;
|
|
LRect.Top := LRect.Top + 3;
|
|
DrawStyleArrow(hdc, TScrollDirection.sdRight, LRect.Location, 3, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
MENU_POPUPCHECKBACKGROUND :
|
|
begin
|
|
case iStateId of
|
|
MCB_DISABLED ://OK
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemNormal), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clFuchsia);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MCB_NORMAL : //OK
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemNormal), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clBlue);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MCB_BITMAP : //OK
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmMenuBarItemNormal), pRect);
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
MENU_POPUPCHECK :
|
|
begin
|
|
case iStateId of
|
|
MC_CHECKMARKNORMAL : //OK
|
|
begin
|
|
//DrawStyleFillRect(hdc, pRect, clFuchsia);
|
|
FontAwesome.DrawChar(hdc, fa_check, pRect, StyleServices.GetSystemColor(clMenuText));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_CHECKMARKDISABLED : //OK
|
|
begin
|
|
//DrawStyleFillRect(hdc, pRect, clBlue);
|
|
FontAwesome.DrawChar(hdc, fa_check, pRect, StyleServices.GetSystemColor(clGrayText));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_BULLETNORMAL : //OK
|
|
begin
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
FontAwesome.DrawChar(hdc, fa_circle, pRect, StyleServices.GetSystemColor(clMenuText));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_BULLETDISABLED : //OK
|
|
begin
|
|
//DrawStyleFillRect(hdc, pRect, clGreen);
|
|
FontAwesome.DrawChar(hdc, fa_circle, pRect, StyleServices.GetSystemColor(clGrayText));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
MENU_SYSTEMRESTORE :
|
|
begin
|
|
case iStateId of
|
|
MSYSR_NORMAL :
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Top:= LRect.Top + 3;
|
|
LRect.Width:=10;
|
|
LRect.Height:=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_RESTORE_CHAR, LRect, False, False);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MSYSR_DISABLED :
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Top:= LRect.Top + 3;
|
|
LRect.Width:=10;
|
|
LRect.Height:=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_RESTORE_CHAR, LRect, False, True);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
MENU_SYSTEMMINIMIZE :
|
|
begin
|
|
case iStateId of
|
|
MSYSMN_NORMAL :
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Top:= LRect.Top + 3;
|
|
LRect.Width:=10;
|
|
LRect.Height:=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_MINIMIZE_CHAR, LRect, False, False);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MSYSMN_DISABLED :
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Top:= LRect.Top + 3;
|
|
LRect.Width:=10;
|
|
LRect.Height:=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_MINIMIZE_CHAR, LRect, False, True);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
MENU_SYSTEMMAXIMIZE :
|
|
begin
|
|
case iStateId of
|
|
MSYSMX_NORMAL :
|
|
begin
|
|
LRect := pRect;
|
|
LRect.Top := LRect.Top + 3;
|
|
LRect.Width := 10;
|
|
LRect.Height := 10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_MAXIMIZE_CHAR, LRect, False, False);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MSYSMX_DISABLED :
|
|
begin
|
|
LRect := pRect;
|
|
LRect.Top := LRect.Top + 3;
|
|
LRect.Width :=10;
|
|
LRect.Height :=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_MAXIMIZE_CHAR, LRect, False, True);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
MENU_SYSTEMCLOSE : //OK
|
|
begin
|
|
case iStateId of
|
|
MSYSC_NORMAL :
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tmSystemCloseNormal), pRect);
|
|
LRect:=pRect;
|
|
LRect.Top:= LRect.Top + 3;
|
|
LRect.Width:=10;
|
|
LRect.Height:=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_CLOSE_CHAR, LRect, False, False);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MSYSC_DISABLED :
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Top:= LRect.Top + 3;
|
|
LRect.Width:=10;
|
|
LRect.Height:=10;
|
|
DrawMenuSpecialChar(hdc, MARLETT_CLOSE_CHAR, LRect, False, True);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_Menu class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
//DrawStyleFillRect(hdc, pRect, clBlue);
|
|
//Exit(S_OK);
|
|
end;
|
|
{$ENDIF}
|
|
|
|
function UxTheme_CommandModule(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground; LThemeClass : string; hwnd : HWND): HRESULT; stdcall;
|
|
var
|
|
LDetails : TThemedElementDetails;
|
|
LColor : TColor;
|
|
LRect : TRect;
|
|
begin
|
|
case iPartId of
|
|
//Top Bar
|
|
1 :
|
|
begin
|
|
case iStateId of
|
|
0:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tcpThemedHeader), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//Buttons background
|
|
3 :
|
|
begin
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
//Hot
|
|
2:
|
|
begin
|
|
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonHot), pRect);
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//pressed
|
|
3:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonPressed), pRect);
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//focused
|
|
4:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonDefaulted), pRect);
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 50);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//button with dropdown
|
|
4 :
|
|
begin
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//hot
|
|
2:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//pressed
|
|
3:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonPressed), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//focused
|
|
4:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonDefaulted), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
5: // hot arrow button
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonHot), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//arrow button with dropdown - background
|
|
5 :
|
|
begin
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
//hot on arrow
|
|
2:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonHot), pRect);
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//pressed arrow (button down)
|
|
3:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonPressed), pRect);
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//selected
|
|
4:
|
|
begin
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonDefaulted), pRect);
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 50);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//hot on button
|
|
5:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
//DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonHot), pRect);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
|
|
//dropdown arrow
|
|
6 :
|
|
begin
|
|
case iStateId of
|
|
0:
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Left := LRect.Left + 5;
|
|
LRect.Width := LRect.Width + 5;
|
|
DrawStyleDownArrow(hdc, LRect, GetStyleBtnTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//down arrow normal
|
|
1:
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Left := LRect.Left + 2;
|
|
LRect.Width := LRect.Width + 2;
|
|
DrawStyleDownArrow(hdc, LRect, GetStyleBtnTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
8 ://arrow button - Top Bar of listview
|
|
begin
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Left := LRect.Left + 5;
|
|
LRect.Width := LRect.Width + 5;
|
|
DrawStyleDownArrow(hdc, LRect, GetStyleBtnTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
//hot
|
|
2:
|
|
begin
|
|
LRect:=pRect;
|
|
LRect.Left := LRect.Left + 5;
|
|
LRect.Width := LRect.Width + 5;
|
|
DrawStyleDownArrow(hdc, LRect, GetStyleBtnTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
9 : //button -Top Bar of listview
|
|
begin
|
|
|
|
case iStateId of
|
|
//normal
|
|
1:
|
|
begin
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//hot
|
|
2:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect := pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
3: //pressed arrow (button down)
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect := pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
//selected
|
|
4:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 50);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect := pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
|
|
//hot on button
|
|
5:
|
|
begin
|
|
LColor := StyleServices.GetSystemColor(clHighlight);
|
|
//AlphaBlendFillCanvas(hdc, LColor, pRect, 96);
|
|
DrawStyleElement(hdc, StyleServices.GetElementDetails(tbPushButtonNormal), pRect);
|
|
LRect:=pRect;
|
|
InflateRect(LRect, -1, -1);
|
|
DrawStyleRectangle(hdc, LRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
//Top Bar of listview - background solid color
|
|
11 :
|
|
begin
|
|
case iStateId of
|
|
0:
|
|
begin
|
|
LDetails := StyleServices.GetElementDetails(tpPanelBackground);
|
|
StyleServices.GetElementColor(LDetails, ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//Top Bar of listview - backgroundimage
|
|
12 :
|
|
begin
|
|
case iStateId of
|
|
0:
|
|
begin
|
|
LDetails := StyleServices.GetElementDetails(tpPanelBackground);
|
|
StyleServices.GetElementColor(LDetails, ecFillColor, LColor);
|
|
DrawStyleFillRect(hdc, pRect, LColor);
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('UxTheme_CommandModule class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
|
|
|
|
|
|
|
|
function Detour_UxTheme_DrawThemeMain(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline : TDrawThemeBackground): HRESULT; stdcall;
|
|
var
|
|
LThemeClass : string;
|
|
LHWND : HWND;
|
|
LFuncDrawThemeBackground : TFuncDrawThemeBackground;
|
|
begin
|
|
VCLStylesLock.Enter;
|
|
try
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled then
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
|
|
if not THThemesClasses.ContainsKey(hTheme) then
|
|
begin
|
|
LThemeClass := GetThemeClass(hTheme, iPartId, iStateId);
|
|
if LThemeClass<>'' then
|
|
begin
|
|
THThemesClasses.Add(hTheme, LThemeClass);
|
|
THThemesHWND.Add(hTheme, 0);
|
|
end
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeMain class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
end
|
|
else
|
|
LThemeClass := THThemesClasses.Items[hTheme];
|
|
//
|
|
// DrawStyleFillRect(hdc, pRect, clGray);
|
|
// Exit(S_OK);
|
|
|
|
LHWND := THThemesHWND.Items[hTheme];
|
|
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeMain class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
if FuncsDrawThemeBackground.ContainsKey(LThemeClass) then
|
|
begin
|
|
LFuncDrawThemeBackground := FuncsDrawThemeBackground.Items[LThemeClass];
|
|
Exit(LFuncDrawThemeBackground(hTheme, hdc, iPartId, iStateId, pRect, Foo, Trampoline, LThemeClass, LHWND));
|
|
end
|
|
else
|
|
begin
|
|
|
|
// OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeMain class %s hTheme %d iPartId %d iStateId %d', [LThemeClass, hTheme, iPartId, iStateId])));
|
|
// DrawStyleFillRect(hdc, pRect, clPurple);
|
|
// Exit(S_OK);
|
|
//
|
|
Exit(Trampoline(hTheme, hdc, iPartId, iStateId, pRect, Foo));
|
|
end;
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
end;
|
|
|
|
function Detour_UxTheme_DrawThemeBackgroundEx(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pOptions: Pointer): HRESULT; stdcall;
|
|
begin
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled then
|
|
Exit(Trampoline_UxTheme_DrawThemeBackgroundEx(hTheme, hdc, iPartId, iStateId, pRect, pOptions))
|
|
else
|
|
Exit(Detour_UxTheme_DrawThemeMain(hTheme, hdc, iPartId, iStateId, pRect, pOptions, Trampoline_UxTheme_DrawThemeBackgroundEx));
|
|
end;
|
|
|
|
function Detour_UxTheme_DrawThemeBackground(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; pClipRect: Pointer): HRESULT; stdcall;
|
|
begin
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled then
|
|
Exit(Trampoline_UxTheme_DrawThemeBackground(hTheme, hdc, iPartId, iStateId, pRect, pClipRect))
|
|
else
|
|
Exit(Detour_UxTheme_DrawThemeMain(hTheme, hdc, iPartId, iStateId, pRect, pClipRect, Trampoline_UxTheme_DrawThemeBackground));
|
|
end;
|
|
|
|
|
|
function Detour_UxTheme_DrawThemeEdge(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, uFlags: UINT; pContentRect: PRECT): HRESULT; stdcall;
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeEdge class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId])));
|
|
Exit(Trampoline_UxTheme_DrawThemeEdge(hTheme, hdc, iPartId, iStateId, pDestRect, uEdge, uFlags, pContentRect));
|
|
end;
|
|
|
|
function Detour_UxTheme_GetThemeSysColor(hTheme: HTHEME; iColorId: Integer): COLORREF; stdcall;
|
|
begin
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled then
|
|
Result:= Trampoline_UxTheme_GetThemeSysColor(hTheme, iColorId)
|
|
else
|
|
Result:= StyleServices.GetSystemColor(iColorId or Integer($FF000000));
|
|
end;
|
|
|
|
function Detour_UxTheme_GetThemeSysColorBrush(hTheme: HTHEME; iColorId: Integer): HBRUSH; stdcall;
|
|
begin
|
|
//OutputDebugString(PChar(Format('GetThemeSysColorBrush hTheme %d iColorId %d', [hTheme, iColorId])));
|
|
Exit(Trampoline_UxTheme_GetThemeSysColorBrush(hTheme, iColorId));
|
|
end;
|
|
|
|
{
|
|
Doesn't affect Menus colors
|
|
Doesn't affect Compressed files font color (blue)
|
|
}
|
|
|
|
function Detour_UxTheme_GetThemeColor(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var pColor: COLORREF): HRESULT; stdcall;
|
|
var
|
|
LThemeClass : string;
|
|
LColor : TColor;
|
|
begin
|
|
|
|
VCLStylesLock.Enter;
|
|
try
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled or not THThemesClasses.ContainsKey(hTheme) then
|
|
Exit(Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor));
|
|
LThemeClass:=THThemesClasses.Items[hTheme];
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
|
|
|
|
case iPropId of
|
|
|
|
TMT_TEXTCOLOR :
|
|
if not SameText(LThemeClass, VSCLASS_TASKDIALOGSTYLE) then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
if (Result = S_OK) and (@Trampoline_user32_GetSysColor <> nil) then
|
|
begin
|
|
//OutputDebugString(PChar(Format('Intercepted Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
//pColor := ColorToRGB(clRed);
|
|
pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
Exit(S_OK);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
//Debug Output: Detour_GetThemeColor Class Communications::Rebar hTheme 65566 iPartId 0 iStateId 0 iPropId 3803 Color FAFAFA Process ThemedSysControls.exe (13176)
|
|
//Debug Output: Detour_GetThemeColor Class TryHarder hTheme 65579 iPartId 1 iStateId 1 iPropId 3803 Color 5B391E Process ThemedSysControls.exe (13176)
|
|
//Debug Output: Detour_GetThemeColor Class CONTROLPANELSTYLE hTheme 65569 iPartId 7 iStateId 1 iPropId 3803 Color CC6600 Process ThemedSysControls.exe (13176)
|
|
|
|
//Debug Output: Intercepted Detour_GetThemeColor Class CPLCommandModule::CommandModule hTheme 65575 iPartId 3 iStateId 1 iPropId 3803 Color 0 Process ThemedSysControls.exe (14304)
|
|
//Debug Output: Intercepted Detour_GetThemeColor Class InfoBar hTheme 65576 iPartId 2 iStateId 1 iPropId 3803 Color 0 Process ThemedSysControls.exe (14304)
|
|
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
|
|
if LThemeClass<>'' then
|
|
begin
|
|
if SameText(LThemeClass, 'Tooltip') then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
4 :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clHighlight));
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
|
|
end
|
|
ELSE
|
|
if SameText(LThemeClass, VSCLASS_CONTROLPANELSTYLE) then
|
|
begin
|
|
pColor:=clNone;
|
|
// case iPartId of
|
|
// EP_EDITTEXT :
|
|
// case iStateId of
|
|
// ETS_CUEBANNER : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
// end;
|
|
// end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_EDIT) then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
EP_EDITTEXT :
|
|
case iStateId of
|
|
ETS_CUEBANNER : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_TRYHARDER) then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
|
|
0 :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
end;
|
|
|
|
1 :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_MENU) then
|
|
begin
|
|
pColor:=clNone;
|
|
// case iPartId of
|
|
//
|
|
// MENU_BARITEM :
|
|
// case iStateId of
|
|
// 0 : pColor:= ColorToRGB(clRed);//ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
// end;
|
|
//
|
|
// MENU_POPUPBACKGROUND :
|
|
// case iStateId of
|
|
// 0 : pColor:= ColorToRGB(clGreen);//ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
// end;
|
|
//
|
|
// MENU_POPUPITEM :
|
|
// case iStateId of
|
|
// 0 : pColor:= ColorToRGB(clFuchsia);//ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
// end;
|
|
//
|
|
// end;
|
|
|
|
if TColor(pColor) = clNone then
|
|
begin
|
|
Result := Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(VSCLASS_SEARCHEDITBOX, LThemeClass) then
|
|
begin
|
|
pColor := clNone;
|
|
case iPartId of
|
|
1 : case iStateId of
|
|
2 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result := Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_TOOLTIP) then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
|
|
TTP_STANDARD :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_TEXTSTYLE) then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
|
|
TEXT_MAININSTRUCTION :
|
|
case iStateId of
|
|
0 : begin
|
|
pColor:= ColorToRGB(StyleServices.GetSystemColor(clHighlightText));
|
|
end;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
if TColor(pColor) = clNone then
|
|
begin
|
|
Result := Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
{$IFDEF HOOK_ListView}
|
|
if (SameText(LThemeClass, VSCLASS_HEADER) or SameText(LThemeClass, VSCLASS_ITEMSVIEW_HEADER)) then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
|
|
HP_HEADERITEM :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
|
|
{$IFDEF HOOK_PreviewPane}
|
|
if SameText(LThemeClass, VSCLASS_READINGPANE) then
|
|
begin
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
|
|
1 : //preview background
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindow));
|
|
end;
|
|
|
|
2 : //preview text
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor) = clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_PREVIEWPANE) then
|
|
begin
|
|
pColor := clNone;
|
|
case iPartId of
|
|
|
|
5 :
|
|
case iStateId of
|
|
0 : ColorToRGB(StyleServices.GetSystemColor(clHighlight));
|
|
end;
|
|
|
|
6 :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
|
|
7 :
|
|
case iStateId of
|
|
1 : pColor:= GetStyleHighLightColor();
|
|
2 : pColor:= ColorToRGB(clGreen);
|
|
end;
|
|
|
|
8 :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(clRed);
|
|
end;
|
|
|
|
9 :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(clBlue);
|
|
2 : pColor:= ColorToRGB(clYellow);
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor) = clNone then
|
|
begin
|
|
Result := Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_TaskDialog}
|
|
if SameText(LThemeClass, VSCLASS_TASKDIALOGSTYLE) then
|
|
begin
|
|
pColor := clNone;
|
|
case iPartId of
|
|
TDLG_MAININSTRUCTIONPANE : begin
|
|
pColor := ColorToRGB(GetStyleHighLightColor());
|
|
if StyleServices.GetStyleColor(scEdit) = StyleServices.GetStyleColor(scBorder) then
|
|
pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
|
|
TDLG_CONTENTPANE : begin
|
|
pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
if StyleServices.GetStyleColor(scEdit)=StyleServices.GetStyleColor(scBorder) then
|
|
pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
TDLG_EXPANDOTEXT,
|
|
TDLG_EXPANDEDFOOTERAREA,
|
|
TDLG_FOOTNOTEPANE,
|
|
TDLG_VERIFICATIONTEXT,
|
|
//TDLG_RADIOBUTTONPANE,
|
|
TDLG_EXPANDEDCONTENT : begin
|
|
pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
if StyleServices.GetStyleColor(scEdit)=StyleServices.GetStyleColor(scBorder) then
|
|
pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
end;
|
|
end;
|
|
|
|
|
|
if TColor(pColor) = clNone then
|
|
begin
|
|
Result := Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_TreeView}
|
|
if SameText(LThemeClass, VSCLASS_TREEVIEW) or SameText(LThemeClass, VSCLASS_PROPERTREE) then
|
|
begin
|
|
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
0, 2 :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindow));//OK
|
|
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_ListView}
|
|
if (SameText(LThemeClass, VSCLASS_ITEMSVIEW) or SameText(LThemeClass, VSCLASS_LISTVIEW) or SameText(LThemeClass, VSCLASS_LISTVIEWSTYLE) or SameText(LThemeClass, VSCLASS_ITEMSVIEW_LISTVIEW) or SameText(LThemeClass, VSCLASS_EXPLORER_LISTVIEW)) then
|
|
begin
|
|
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
0 :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindow));
|
|
end;
|
|
|
|
LVP_LISTITEM :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(ClRed);
|
|
end;
|
|
|
|
LVP_LISTSORTEDDETAIL :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
//normal main column (name)
|
|
2 : pColor:= ColorToRGB(clWindowText);
|
|
|
|
//SELECTED
|
|
3 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
|
|
//hot text
|
|
4 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
5 : pColor:= ColorToRGB(clBlue);
|
|
6 : pColor:= ColorToRGB(clYellow);
|
|
7 : pColor:= ColorToRGB(clGreen);
|
|
8 : pColor:= ColorToRGB(clFuchsia);
|
|
end;
|
|
|
|
|
|
LVP_EMPTYTEXT :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clHighlight));
|
|
end;
|
|
|
|
LVP_GROUPHEADER :
|
|
case iStateId of
|
|
0 : pColor:= ColorToRGB(StyleServices.GetSystemColor(clWindowText));
|
|
end;
|
|
end;
|
|
|
|
if TColor(pColor)=clNone then
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
end
|
|
else
|
|
Result:= S_OK;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_CommandModule}
|
|
if SameText(LThemeClass, VSCLASS_COMMANDMODULE) or SameText(LThemeClass, VSCLASS_CPLCOMMANDMODULE) then
|
|
begin
|
|
|
|
pColor:=clNone;
|
|
case iPartId of
|
|
|
|
//button with dropdown
|
|
3 :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(GetStyleBtnTextColor);//GetStyleHighLightColor;
|
|
6 : pColor:= ColorToRGB(clYellow);//StyleServices.GetSystemColor(clBtnShadow);
|
|
end;
|
|
|
|
4 :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(GetStyleBtnTextColor);
|
|
end;
|
|
|
|
|
|
9 :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(GetStyleBtnTextColor);//ColorToRGB(StyleServices.GetSystemColor(clBtnText));
|
|
//Highlight
|
|
2 : pColor:= ColorToRGB(GetStyleBtnTextColor);//ColorToRGB(StyleServices.GetSystemColor(clBtnText)); //OK
|
|
3 : pColor:= ColorToRGB(GetStyleBtnTextColor);//ColorToRGB(StyleServices.GetSystemColor(clBtnText)); //OK
|
|
6 : pColor:= ColorToRGB(clLime);//StyleServices.GetSystemColor(clBtnShadow);
|
|
end;
|
|
|
|
//header text
|
|
10 :
|
|
case iStateId of
|
|
1 : pColor:= ColorToRGB(GetStyleHighLightColor);
|
|
end;
|
|
end;
|
|
|
|
Result := S_OK;
|
|
//if pColor=clNone then
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//pColor:=ColorToRGB(clRed);
|
|
//Result := S_OK;
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor Class %s hTheme %d iPartId %d iStateId %d iPropId %d Color %8.x', [LThemeClass, hTheme, iPartId, iStateId, iPropId, pColor])));
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
Result:=Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor);
|
|
//OutputDebugString(PChar(Format('Detour_GetThemeColor hTheme %d iPartId %d iStateId %d Color %8.x', [hTheme, iPartId, iStateId, pColor])));
|
|
//OutputDebugString2(Format('Detour_GetThemeColor hTheme %d iPartId %d iStateId %d Color %8.x', [hTheme, iPartId, iStateId, pColor]));
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure _DrawControlText(Canvas: TCanvas; const S: string; var R: TRect; Flags: Cardinal; ThemeTextColor: TColor);
|
|
var
|
|
TextFormat: TTextFormatFlags;
|
|
begin
|
|
//Canvas.Font := TWinControlClass(Control).Font;
|
|
Canvas.Font.Color := ThemeTextColor;
|
|
TextFormat := TTextFormatFlags(Flags);
|
|
DrawText(Canvas.Handle, S, Length(S), R, TTextFormatFlags(TextFormat));
|
|
end;
|
|
|
|
|
|
function Detour_UxTheme_DrawThemeText(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; stdcall;
|
|
var
|
|
LThemeClass : string;
|
|
LThemeClasses : TStrings;
|
|
LDetails: TThemedElementDetails;
|
|
ThemeTextColor : TColor;
|
|
p, SaveIndex : Integer;
|
|
LCanvas : TCanvas;
|
|
plf: LOGFONTW;
|
|
LText : string;
|
|
LRect : TRect;
|
|
begin
|
|
LThemeClasses := TStringList.Create;
|
|
try
|
|
VCLStylesLock.Enter;
|
|
try
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled or (dwTextFlags and DT_CALCRECT <> 0) or not THThemesClasses.ContainsKey(hTheme) then
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
|
|
LThemeClass := THThemesClasses.Items[hTheme];
|
|
ExtractStrings([';'], [], PChar(LThemeClass), LThemeClasses);
|
|
// OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d iPartId %d iStateId %d text %s %s', [hTheme, iPartId, iStateId, pszText, LThemeClass])));
|
|
|
|
// if Pos('Search', pszText)>0 then
|
|
// OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d class %s iPartId %d iStateId %d text %s', [hTheme, LThemeClass, iPartId, iStateId, pszText])));
|
|
//
|
|
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
|
|
if (LThemeClass <> '') then
|
|
begin
|
|
|
|
{$IFDEF HOOK_ToolBar}
|
|
if SameText(LThemeClass, VSCLASS_TOOLBAR) then //OK
|
|
begin
|
|
case iPartId of
|
|
0 :
|
|
begin
|
|
case iStateId of
|
|
TS_NORMAL :
|
|
begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clWindowText); //StyleServices.GetSystemColor(clBtnText);
|
|
LDetails := StyleServices.GetElementDetails(ttbButtonNormal);
|
|
end;
|
|
|
|
TS_HOT :
|
|
begin
|
|
//ThemeTextColor := GetStyleHighLightColor();
|
|
ThemeTextColor := StyleServices.GetSystemColor(clWindowText);
|
|
LDetails := StyleServices.GetElementDetails(ttbButtonHot);
|
|
end;
|
|
|
|
TS_PRESSED :
|
|
begin
|
|
//ThemeTextColor := GetStyleHighLightColor();
|
|
ThemeTextColor := StyleServices.GetSystemColor(clWindowText);
|
|
LDetails := StyleServices.GetElementDetails(ttbButtonPressed);
|
|
end;
|
|
|
|
TS_NEARHOT :
|
|
begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clWindowText);//StyleServices.GetSystemColor(clBtnText);
|
|
LDetails := StyleServices.GetElementDetails(ttbButtonHot);
|
|
end;
|
|
|
|
TS_OTHERSIDEHOT :
|
|
begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clWindowText);//GetStyleHighLightColor();
|
|
LDetails := StyleServices.GetElementDetails(ttbButtonHot);
|
|
end;
|
|
|
|
TS_DISABLED :
|
|
begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clGrayText);
|
|
LDetails := StyleServices.GetElementDetails(ttbButtonDisabled);
|
|
end;
|
|
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeTextEx hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d class %s iPartId %d iStateId %d text %s', [hTheme, LThemeClass, iPartId, iStateId, pszText])));
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(hdc, LDetails, string(pszText), LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
else
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_CommandModule}
|
|
if SameText(LThemeClass, VSCLASS_COMMANDMODULE) then
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeTextEx hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Menu}
|
|
if SameText(LThemeClass, VSCLASS_MENU) then
|
|
begin
|
|
case iPartId of
|
|
|
|
MENU_POPUPITEM :
|
|
begin
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
case iStateId of
|
|
MPI_NORMAL : LDetails := StyleServices.GetElementDetails(tmPopupItemNormal);
|
|
MPI_HOT : LDetails := StyleServices.GetElementDetails(tmPopupItemHot);
|
|
//MPI_PUSHED : LDetails := StyleServices.GetElementDetails(tmMenuBarItemPushed);
|
|
MPI_DISABLED : LDetails := StyleServices.GetElementDetails(tmPopupItemDisabled);
|
|
MPI_DISABLEDHOT : LDetails := StyleServices.GetElementDetails(tmPopupItemDisabledHot);
|
|
//MPI_DISABLEDPUSHED : LDetails := StyleServices.GetElementDetails(tmMenuBarItemDisabledPushed);
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(tmPopupItemNormal);
|
|
end;
|
|
|
|
LRect:=pRect;
|
|
StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor);
|
|
LText := string(pszText);
|
|
|
|
StyleServices.DrawText(hdc, LDetails, LText, LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
Exit(S_OK);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
end;
|
|
|
|
MENU_BARITEM :
|
|
begin
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
case iStateId of
|
|
MBI_NORMAL : LDetails := StyleServices.GetElementDetails(tmPopupItemNormal);
|
|
MBI_HOT : LDetails := StyleServices.GetElementDetails(tmMenuBarItemHot);
|
|
MBI_PUSHED : LDetails := StyleServices.GetElementDetails(tmMenuBarItemPushed);
|
|
MBI_DISABLED : LDetails := StyleServices.GetElementDetails(tmMenuBarItemDisabled);
|
|
MBI_DISABLEDHOT : LDetails := StyleServices.GetElementDetails(tmMenuBarItemDisabledHot);
|
|
MBI_DISABLEDPUSHED : LDetails := StyleServices.GetElementDetails(tmMenuBarItemDisabledPushed);
|
|
end;
|
|
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(hdc, LDetails, string(pszText), LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
Exit(S_OK);
|
|
finally
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
end;
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeTextEx hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_DateTimePicker}
|
|
if SameText(LThemeClass, VSCLASS_DATEPICKER) then
|
|
begin
|
|
case iPartId of
|
|
DP_DATETEXT :
|
|
begin
|
|
case iStateId of
|
|
DPDT_NORMAL :begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clWindowText);
|
|
LDetails := StyleServices.GetElementDetails(teEditTextNormal);
|
|
end;
|
|
DPDT_DISABLED :begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clGrayText);
|
|
LDetails := StyleServices.GetElementDetails(teEditTextDisabled);
|
|
end;
|
|
DPDT_SELECTED :begin
|
|
ThemeTextColor := StyleServices.GetSystemColor(clHighlightText);
|
|
LDetails := StyleServices.GetElementDetails(tgCellSelected); //Fix issue with selected text color
|
|
end;
|
|
end;
|
|
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(hdc, LDetails, string(pszText), LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
else
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end
|
|
else
|
|
if SameText(LThemeClass, VSCLASS_MONTHCAL) then
|
|
begin
|
|
case iPartId of
|
|
MC_TRAILINGGRIDCELLUPPER,
|
|
MC_GRIDCELLUPPER,
|
|
MC_GRIDCELL : begin
|
|
// case iStateId of
|
|
// MCGCB_SELECTED : LDetails := StyleServices.GetElementDetails(tgCellSelected);
|
|
// MCGCB_HOT : LDetails := StyleServices.GetElementDetails(tgFixedCellHot);
|
|
// MCGCB_SELECTEDHOT : LDetails := StyleServices.GetElementDetails(tgCellSelected);
|
|
// MCGCB_SELECTEDNOTFOCUSED : LDetails := StyleServices.GetElementDetails(tgCellSelected);
|
|
// MCGCB_TODAY : LDetails := StyleServices.GetElementDetails(tgFixedCellHot);
|
|
// else
|
|
// LDetails := StyleServices.GetElementDetails(tgCellNormal);
|
|
// end;
|
|
|
|
LDetails := StyleServices.GetElementDetails(tgCellNormal);
|
|
|
|
if not StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor) then
|
|
ThemeTextColor := StyleServices.GetSystemColor(clBtnText);
|
|
|
|
LCanvas := TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle := hdc;
|
|
ZeroMemory(@plf, SizeOf(plf));
|
|
plf.lfHeight := 13;
|
|
plf.lfCharSet := DEFAULT_CHARSET;
|
|
StrCopy(plf.lfFaceName, 'Tahoma');
|
|
LCanvas.Font.Handle := CreateFontIndirect(plf);
|
|
|
|
LText := string(pszText);
|
|
p := Pos(Chr($A), LText);
|
|
if p > 1 then
|
|
LText := Copy(LText, 1, p-1);
|
|
|
|
LRect := pRect;
|
|
StyleServices.DrawText(LCanvas.Handle, LDetails, LText, LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
finally
|
|
DeleteObject(LCanvas.Font.Handle);
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
MC_TRAILINGGRIDCELL :
|
|
begin
|
|
case iStateId of
|
|
MCTGC_HOT : LDetails := StyleServices.GetElementDetails(tgFixedCellHot);
|
|
MCTGC_HASSTATE : LDetails := StyleServices.GetElementDetails(tgCellSelected);
|
|
MCTGC_HASSTATEHOT : LDetails := StyleServices.GetElementDetails(tgCellSelected);
|
|
MCTGC_TODAY : LDetails := StyleServices.GetElementDetails(tgFixedCellHot);
|
|
else
|
|
LDetails := StyleServices.GetElementDetails(teEditTextDisabled);
|
|
end;
|
|
|
|
if not StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor) then
|
|
ThemeTextColor := StyleServices.GetSystemColor(clBtnText);
|
|
|
|
LCanvas := TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle := hdc;
|
|
ZeroMemory(@plf, SizeOf(plf));
|
|
plf.lfHeight := 13;
|
|
plf.lfCharSet := DEFAULT_CHARSET;
|
|
StrCopy(plf.lfFaceName, 'Tahoma');
|
|
LCanvas.Font.Handle := CreateFontIndirect(plf);
|
|
|
|
LText := string(pszText);
|
|
p := Pos(Chr($A), LText);
|
|
if p > 1 then
|
|
LText:=Copy(LText, 1, p - 1);
|
|
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(LCanvas.Handle, LDetails, LText, LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
finally
|
|
DeleteObject(LCanvas.Font.Handle);
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
Exit(S_OK);
|
|
end;
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Button}
|
|
if LThemeClasses.IndexOf(VSCLASS_BUTTON)>=0 then //SameText(LThemeClass, VSCLASS_BUTTON) then
|
|
begin
|
|
case iPartId of
|
|
BP_PUSHBUTTON :
|
|
begin
|
|
case iStateId of
|
|
PBS_NORMAL : LDetails := StyleServices.GetElementDetails(tbPushButtonNormal);
|
|
PBS_HOT : LDetails := StyleServices.GetElementDetails(tbPushButtonHot);
|
|
PBS_PRESSED : LDetails := StyleServices.GetElementDetails(tbPushButtonPressed);
|
|
PBS_DISABLED : LDetails := StyleServices.GetElementDetails(tbPushButtonDisabled);
|
|
PBS_DEFAULTED : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaulted);
|
|
PBS_DEFAULTED_ANIMATING : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaultedAnimating);
|
|
end;
|
|
|
|
//StyleServices.DrawText(hdc, LDetails, string(pszText), pRect, dwTextFlags, dwTextFlags2);
|
|
|
|
if not StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor) then
|
|
ThemeTextColor := StyleServices.GetSystemColor(clBtnText);
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(hdc, LDetails, string(pszText), LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
BP_RADIOBUTTON : begin
|
|
case iStateId of
|
|
RBS_UNCHECKEDNORMAL : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedNormal);
|
|
RBS_UNCHECKEDHOT : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedHot);
|
|
RBS_UNCHECKEDPRESSED : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedPressed);
|
|
RBS_UNCHECKEDDISABLED : LDetails := StyleServices.GetElementDetails(tbRadioButtonUncheckedDisabled);
|
|
RBS_CHECKEDNORMAL : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedNormal);
|
|
RBS_CHECKEDHOT : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedHot);
|
|
RBS_CHECKEDPRESSED : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedPressed);
|
|
RBS_CHECKEDDISABLED : LDetails := StyleServices.GetElementDetails(tbRadioButtonCheckedDisabled);
|
|
end;
|
|
|
|
if not StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor) then
|
|
ThemeTextColor := StyleServices.GetSystemColor(clBtnText);
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(hdc, LDetails, string(pszText), LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
Exit(S_OK);
|
|
end;
|
|
|
|
BP_COMMANDLINK :
|
|
begin
|
|
|
|
case iStateId of
|
|
CMDLS_NORMAL : LDetails := StyleServices.GetElementDetails(tbPushButtonNormal);
|
|
CMDLS_HOT : LDetails := StyleServices.GetElementDetails(tbPushButtonHot);
|
|
CMDLS_PRESSED : LDetails := StyleServices.GetElementDetails(tbPushButtonPressed);
|
|
CMDLS_DISABLED : LDetails := StyleServices.GetElementDetails(tbPushButtonDisabled);
|
|
CMDLS_DEFAULTED : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaulted);
|
|
CMDLS_DEFAULTED_ANIMATING : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaultedAnimating);
|
|
end;
|
|
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
ZeroMemory(@plf, SizeOf(plf));
|
|
plf.lfHeight := 14;
|
|
plf.lfCharSet := DEFAULT_CHARSET;
|
|
StrCopy(plf.lfFaceName, 'Tahoma');
|
|
LCanvas.Font.Handle := CreateFontIndirect(plf);
|
|
if not StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor) then
|
|
ThemeTextColor := StyleServices.GetSystemColor(clBtnText);
|
|
LRect:=pRect;
|
|
StyleServices.DrawText(LCanvas.Handle, LDetails, string(pszText), LRect, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
finally
|
|
DeleteObject(LCanvas.Font.Handle);
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Exit(S_OK);
|
|
end
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeText hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
end;
|
|
end
|
|
else
|
|
Exit(Trampoline_UxTheme_DrawThemeText(hTheme, hdc, iPartId, iStateId, pszText, iCharCount, dwTextFlags, dwTextFlags2, pRect));
|
|
finally
|
|
LThemeClasses.Free;
|
|
end;
|
|
end;
|
|
|
|
function Detour_UxTheme_DrawThemeTextEx(hTheme: HTHEME; hdc: HDC; iPartId: Integer; iStateId: Integer; pszText: LPCWSTR; cchText: Integer; dwTextFlags: DWORD; pRect: PRect; var pOptions: TDTTOpts): HResult; stdcall;
|
|
var
|
|
LDetails: TThemedElementDetails;
|
|
ThemeTextColor : TColor;
|
|
SaveIndex : Integer;
|
|
LCanvas : TCanvas;
|
|
LThemeClass : string;
|
|
plf: LOGFONTW;
|
|
begin
|
|
VCLStylesLock.Enter;
|
|
try
|
|
if StyleServices.IsSystemStyle or not TSysStyleManager.Enabled or (dwTextFlags and DT_CALCRECT <> 0) or not THThemesClasses.ContainsKey(hTheme) then
|
|
Exit(Trampoline_UxTheme_DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions));
|
|
|
|
LThemeClass:= THThemesClasses.Items[hTheme];
|
|
finally
|
|
VCLStylesLock.Leave;
|
|
end;
|
|
|
|
if LThemeClass<>'' then
|
|
begin
|
|
{$IFDEF HOOK_ListView}
|
|
if SameText(LThemeClass, VSCLASS_LISTVIEW) or SameText(LThemeClass, VSCLASS_ITEMSVIEW_LISTVIEW) then
|
|
begin
|
|
case iPartId of
|
|
LVP_GROUPHEADER :
|
|
begin
|
|
if iStateId=0 then
|
|
begin
|
|
LCanvas:=TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle:=hdc;
|
|
if pOptions.dwFlags AND DTT_FONTPROP <> 0 then
|
|
begin
|
|
ZeroMemory(@plf, SizeOf(plf));
|
|
plf.lfHeight := 13;
|
|
plf.lfCharSet := DEFAULT_CHARSET;
|
|
StrCopy(plf.lfFaceName, 'Tahoma');
|
|
LCanvas.Font.Handle := CreateFontIndirect(plf);
|
|
end;
|
|
LDetails := StyleServices.GetElementDetails(tlListItemNormal);
|
|
ThemeTextColor := StyleServices.GetStyleFontColor(sfListItemTextNormal);
|
|
StyleServices.DrawText(LCanvas.Handle, LDetails, string(pszText), pRect^, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
finally
|
|
if pOptions.dwFlags AND DTT_FONTPROP <> 0 then
|
|
DeleteObject(LCanvas.Font.Handle);
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeTextEx hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions));
|
|
end;
|
|
end;
|
|
|
|
else
|
|
begin
|
|
//OutputDebugString(PChar(Format('Detour_UxTheme_DrawThemeTextEx hTheme %d iPartId %d iStateId %d text %s', [hTheme, iPartId, iStateId, pszText])));
|
|
Exit(Trampoline_UxTheme_DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions));
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Button}
|
|
if SameText(LThemeClass, VSCLASS_BUTTON) then
|
|
begin
|
|
case iPartId of
|
|
BP_COMMANDLINK :
|
|
begin
|
|
case iStateId of
|
|
CMDLS_NORMAL : LDetails := StyleServices.GetElementDetails(tbPushButtonNormal);
|
|
CMDLS_HOT : LDetails := StyleServices.GetElementDetails(tbPushButtonHot);
|
|
CMDLS_PRESSED : LDetails := StyleServices.GetElementDetails(tbPushButtonPressed);
|
|
CMDLS_DISABLED : LDetails := StyleServices.GetElementDetails(tbPushButtonDisabled);
|
|
CMDLS_DEFAULTED : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaulted);
|
|
CMDLS_DEFAULTED_ANIMATING : LDetails := StyleServices.GetElementDetails(tbPushButtonDefaultedAnimating);
|
|
end;
|
|
|
|
|
|
if not StyleServices.GetElementColor(LDetails, ecTextColor, ThemeTextColor) then
|
|
ThemeTextColor := StyleServices.GetSystemColor(clBtnText);
|
|
|
|
LCanvas := TCanvas.Create;
|
|
SaveIndex := SaveDC(hdc);
|
|
try
|
|
LCanvas.Handle := hdc;
|
|
if pOptions.dwFlags AND DTT_FONTPROP <> 0 then
|
|
begin
|
|
//GetThemeSysFont(hTheme, pOptions.iFontPropId, plf); // is not working
|
|
ZeroMemory(@plf, SizeOf(plf));
|
|
plf.lfHeight := 13;
|
|
plf.lfCharSet := DEFAULT_CHARSET;
|
|
StrCopy(plf.lfFaceName, 'Tahoma');
|
|
LCanvas.Font.Handle := CreateFontIndirect(plf);
|
|
end;
|
|
StyleServices.DrawText(LCanvas.Handle, LDetails, string(pszText), pRect^, TTextFormatFlags(dwTextFlags), ThemeTextColor);
|
|
finally
|
|
if pOptions.dwFlags AND DTT_FONTPROP <> 0 then
|
|
DeleteObject(LCanvas.Font.Handle);
|
|
LCanvas.Handle := 0;
|
|
LCanvas.Free;
|
|
RestoreDC(hdc, SaveIndex);
|
|
end;
|
|
|
|
Result := S_OK;
|
|
end
|
|
else
|
|
Result:=Trampoline_UxTheme_DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions);
|
|
end;
|
|
end
|
|
else
|
|
{$ENDIF}
|
|
Result:=Trampoline_UxTheme_DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions);
|
|
end
|
|
else
|
|
Result:=Trampoline_UxTheme_DrawThemeTextEx(hTheme, hdc, iPartId, iStateId, pszText, cchText, dwTextFlags, pRect, pOptions);
|
|
end;
|
|
|
|
{$IF CompilerVersion >= 30}
|
|
function InterceptCreateOrdinal(const Module : string; MethodName: integer; const InterceptProc: Pointer; ForceLoadModule: Boolean = True;
|
|
Options: Byte = v1compatibility): Pointer;
|
|
|
|
var
|
|
pOrgPointer: Pointer;
|
|
LModule: THandle;
|
|
begin
|
|
Result := nil;
|
|
LModule := GetModuleHandle(PChar(Module));
|
|
if (LModule = 0) and ForceLoadModule then
|
|
LModule := LoadLibrary(PChar(Module));
|
|
|
|
if LModule <> 0 then
|
|
begin
|
|
pOrgPointer := GetProcAddress(LModule, PChar(MethodName));
|
|
if Assigned(pOrgPointer) then
|
|
Result := DDetours.InterceptCreate(pOrgPointer, InterceptProc, Options);
|
|
end;
|
|
end;
|
|
{$IFEND}
|
|
|
|
const
|
|
themelib = 'uxtheme.dll';
|
|
|
|
initialization
|
|
VCLStylesLock := TCriticalSection.Create;
|
|
THThemesClasses := TDictionary<HTHEME, string>.Create;
|
|
THThemesHWND := TDictionary<HTHEME, HWND>.Create;
|
|
FuncsDrawThemeBackground:= TDictionary<string, TFuncDrawThemeBackground>.Create(TIStringComparer.Ordinal);
|
|
|
|
if StyleServices.Available then
|
|
begin
|
|
{$IFDEF HOOK_InfoBar}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_INFOBAR, @UxTheme_InfoBar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_BREADCRUMBAR}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_BREADCRUMBAR, @UxTheme_BreadCrumBar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_TRYHARDER}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TRYHARDER, @UxTheme_TryHarder);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Tab}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TAB, @UxTheme_Tab);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_ToolTip}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TOOLTIP, @UxTheme_ToolTip);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_TrackBar}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TRACKBAR, @UxTheme_TrackBar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_PreviewPane}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_PREVIEWPANE, @UxTheme_PreviewPane);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_ToolBar}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TOOLBAR, @UxTheme_ToolBar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_AddressBand}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_ADDRESSBAND, @UxTheme_AddressBand);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_SearchBox}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_SEARCHBOX, @UxTheme_SearchBox);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_CompositedSEARCHBOX, @UxTheme_SearchBox);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_INACTIVESEARCHBOX, @UxTheme_SearchBox);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_CommandModule}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_COMMANDMODULE, @UxTheme_CommandModule);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Menu}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_MENU, @UxTheme_Menu);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Rebar}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_REBAR, @UxTheme_Rebar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Edit}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_EDIT, @UxTheme_Edit);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_ListBox}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_LISTBOX, @UxTheme_ListBox);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Spin}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_SPIN, @UxTheme_Spin);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_ComboBox}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_COMBOBOX, @UxTheme_ComboBox);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_ListView}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_LISTVIEWPOPUP, @UxTheme_ListViewPopup);
|
|
|
|
FuncsDrawThemeBackground.Add(VSCLASS_HEADER, @UxTheme_Header);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_ITEMSVIEW_HEADER, @UxTheme_Header);
|
|
|
|
FuncsDrawThemeBackground.Add(VSCLASS_LISTVIEW, @UxTheme_ListView);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_ITEMSVIEW, @UxTheme_ListView);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_ITEMSVIEW_LISTVIEW, @UxTheme_ListView);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_EXPLORER_LISTVIEW, @UxTheme_ListView);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_DateTimePicker}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_DATEPICKER, @UxTheme_DatePicker);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_MONTHCAL, @UxTheme_MonthCal);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Scrollbar}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_SCROLLBAR, @UxTheme_ScrollBar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Progressbar}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_PROGRESS, @UxTheme_ProgressBar);
|
|
FuncsDrawThemeBackground.Add(VSCLASS_PROGRESS_INDERTERMINATE, @UxTheme_ProgressBar);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_TaskDialog}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TASKDIALOG, @UxTheme_TaskDialog);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Button}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_BUTTON, @UxTheme_Button);
|
|
FuncsDrawThemeBackground.Add('Button-OK;Button', @UxTheme_Button);
|
|
FuncsDrawThemeBackground.Add('Button-CANCEL;Button', @UxTheme_Button);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_TreeView}
|
|
FuncsDrawThemeBackground.Add(VSCLASS_TREEVIEW, @UxTheme_TreeView);
|
|
{$ENDIF}
|
|
{$IFDEF HOOK_Navigation}
|
|
if TOSVersion.Check(6, 2) then //Windows 8
|
|
FuncsDrawThemeBackground.Add(VSCLASS_NAVIGATION, @UxTheme_Navigation);
|
|
{$ENDIF}
|
|
|
|
@Trampoline_UxTheme_OpenThemeData := InterceptCreate(themelib, 'OpenThemeData', @Detour_UxTheme_OpenThemeData);
|
|
{$IF CompilerVersion >= 30}
|
|
if TOSVersion.Check(10) then
|
|
begin
|
|
@Trampoline_UxTheme_OpenThemeDataForDPI := InterceptCreate(themelib, 'OpenThemeDataForDpi', @Detour_UxTheme_OpenThemeDataForDPI);
|
|
if (@Trampoline_UxTheme_OpenThemeDataForDPI = nil) and (TOSVersion.Build < 15063) then //W10 Creators Update?
|
|
@Trampoline_UxTheme_OpenThemeDataForDPI := InterceptCreateOrdinal(themelib, 129, @Detour_UxTheme_OpenThemeDataForDPI);
|
|
end;
|
|
{$IFEND}
|
|
@Trampoline_UxTheme_OpenThemeDataEx := InterceptCreate(themelib, 'OpenThemeDataEx', @Detour_UxTheme_OpenThemeDataEx);
|
|
@Trampoline_UxTheme_DrawThemeBackground := InterceptCreate(themelib, 'DrawThemeBackground', @Detour_UxTheme_DrawThemeBackground);
|
|
@Trampoline_UxTheme_DrawThemeBackgroundEx := InterceptCreate(themelib, 'DrawThemeBackgroundEx', @Detour_UxTheme_DrawThemeBackgroundEx);
|
|
@Trampoline_UxTheme_DrawThemeEdge := InterceptCreate(themelib, 'DrawThemeEdge', @Detour_UxTheme_DrawThemeEdge);
|
|
|
|
@Trampoline_UxTheme_DrawThemeText := InterceptCreate(themelib, 'DrawThemeText', @Detour_UxTheme_DrawThemeText);
|
|
@Trampoline_UxTheme_DrawThemeTextEx := InterceptCreate(themelib, 'DrawThemeTextEx', @Detour_UxTheme_DrawThemeTextEx);
|
|
@Trampoline_UxTheme_GetThemeSysColor := InterceptCreate(themelib, 'GetThemeSysColor', @Detour_UxTheme_GetThemeSysColor);
|
|
@Trampoline_UxTheme_GetThemeSysColorBrush := InterceptCreate(themelib, 'GetThemeSysColorBrush', @Detour_UxTheme_GetThemeSysColorBrush);
|
|
@Trampoline_UxTheme_GetThemeColor := InterceptCreate(themelib, 'GetThemeColor', @Detour_UxTheme_GetThemeColor);
|
|
end;
|
|
|
|
finalization
|
|
InterceptRemove(@Trampoline_UxTheme_GetThemeSysColor);
|
|
InterceptRemove(@Trampoline_UxTheme_GetThemeSysColorBrush);
|
|
InterceptRemove(@Trampoline_UxTheme_OpenThemeData);
|
|
{$IF CompilerVersion >= 30}
|
|
if TOSVersion.Check(10) then
|
|
InterceptRemove(@Trampoline_UxTheme_OpenThemeDataForDPI);
|
|
{$IFEND}
|
|
InterceptRemove(@Trampoline_UxTheme_OpenThemeDataEx);
|
|
InterceptRemove(@Trampoline_UxTheme_GetThemeColor);
|
|
InterceptRemove(@Trampoline_UxTheme_DrawThemeBackground);
|
|
InterceptRemove(@Trampoline_UxTheme_DrawThemeText);
|
|
InterceptRemove(@Trampoline_UxTheme_DrawThemeTextEx);
|
|
InterceptRemove(@Trampoline_UxTheme_DrawThemeBackgroundEx);
|
|
InterceptRemove(@Trampoline_UxTheme_DrawThemeEdge);
|
|
|
|
THThemesClasses.Free;
|
|
THThemesHWND.Free;
|
|
FuncsDrawThemeBackground.Free;
|
|
|
|
VCLStylesLock.Free;
|
|
VCLStylesLock := nil;
|
|
end.
|