Skip to content

Commit 0fffc47

Browse files
committed
Fixed issue RRUZ#90
DIC - Added support for TBitBtn
1 parent abc838b commit 0fffc47

File tree

11 files changed

+213
-116
lines changed

11 files changed

+213
-116
lines changed

delphi-ide-theme-editor/IDE PlugIn/Colorizer.Hook.Forms.pas

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ implementation
4747
DDetours,
4848
Windows,
4949
SysUtils,
50+
StrUtils,
5051
Controls,
5152
Vcl.ComCtrls,
5253
StdCtrls,
@@ -184,12 +185,12 @@ function HandleColorizerStyleMessage(Self : TWinControl;var Message: TMessage; W
184185
LHook:=HookedControls[Self];
185186
end
186187
// else
187-
// if (Self is TComboBox) or (Self is TCustomComboBox) then
188+
// if (Self is TComboBox) or (Self is TCustomComboBox) or (MatchText(Self.ClassName, ['TDesktopComboBox', 'THistoryPropComboBox'])) then //
188189
// begin
189190
// HookedControls.Add(Self, TColorizerComboBoxStyleHook.Create(Self));
190191
// LHook:=HookedControls[Self];
191192
// end
192-
// ;
193+
;
193194

194195
end;
195196

delphi-ide-theme-editor/IDE PlugIn/Colorizer.Hooks.UxTheme.pas

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ function Detour_UxTheme_OpenThemeData(hwnd: hwnd; pszClassList: LPCWSTR) : HTHEM
157157
ColorizerLock.Enter;
158158
try
159159
Result := TrampolineOpenThemeData(hwnd, pszClassList);
160-
//AddLog('Detour_UxTheme_OpenThemeData', 'pszClassList '+string(pszClassList));
160+
//AddLog2('Detour_UxTheme_OpenThemeData', 'pszClassList '+string(pszClassList));
161161

162162
if THThemesClasses.Classes.ContainsKey(Result) then
163163
THThemesClasses.Classes.Remove(Result);
@@ -209,6 +209,7 @@ function Detour_UxTheme_DrawThemeBackground(THEME: HTHEME; dc: HDC; iPartId, iS
209209
var
210210
LScrollDetails: TThemedScrollBar;
211211
begin
212+
AddLog2('DrawScrollBarVCLStyles');
212213
LStyleServices := ColorizerStyleServices;
213214
LScrollDetails := tsScrollBarRoot;
214215
LDetails.Element := TThemedElement.teScrollBar;
@@ -581,8 +582,10 @@ function Detour_UxTheme_DrawThemeBackground(THEME: HTHEME; dc: HDC; iPartId, iS
581582
end;
582583

583584
begin
585+
// AddLog2('TrampolineDrawThemeBackground 1');
584586
if not (THThemesClasses.Classes.ContainsKey(THEME) and Assigned(TColorizerLocalSettings.ColorMap) and Assigned(TColorizerLocalSettings.Settings) and TColorizerLocalSettings.Settings.Enabled) then
585587
Exit(TrampolineDrawThemeBackground(THEME, dc, iPartId, iStateId, pRect, pClipRect));
588+
// AddLog2('TrampolineDrawThemeBackground 2');
586589

587590
if SameText(THThemesClasses.Classes.Items[THEME], VSCLASS_TOOLTIP) then
588591
begin
@@ -1174,18 +1177,18 @@ procedure InstallHooksUXTheme;
11741177
themelib = 'uxtheme.dll';
11751178
sBaseVirtualTreeOriginalWMNCPaint = '@Idevirtualtrees@TBaseVirtualTree@OriginalWMNCPaint$qqrp5HDC__';
11761179
begin
1177-
if {$IFDEF DELPHIXE2_UP}StyleServices.Available {$ELSE} ThemeServices.ThemesAvailable {$ENDIF} then
1180+
THThemesClasses.Classes := TDictionary<HTHEME, String>.Create();
1181+
THThemesClasses.Windows := TDictionary<HTHEME, HWND>.Create();
1182+
if {$IFDEF DELPHIXE2_UP}StyleServices.Available {and StyleServices.Enabled} {$ELSE} ThemeServices.ThemesAvailable {$ENDIF} then
11781183
begin
1179-
THThemesClasses.Classes := TDictionary<HTHEME, String>.Create();
1180-
THThemesClasses.Windows := TDictionary<HTHEME, HWND>.Create();
1181-
THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[teScrollBar], VSCLASS_SCROLLBAR);
1182-
THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[teTreeview], VSCLASS_TREEVIEW);
1183-
THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[tebutton], VSCLASS_BUTTON);
1184-
THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[teToolTip], VSCLASS_TOOLTIP);
1184+
// THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[teScrollBar], VSCLASS_SCROLLBAR);
1185+
// THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[teTreeview], VSCLASS_TREEVIEW);
1186+
// THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[tebutton], VSCLASS_BUTTON);
1187+
// THThemesClasses.Classes.Add({$IFDEF DELPHIXE2_UP}StyleServices{$ELSE}ThemeServices{$ENDIF}.Theme[teToolTip], VSCLASS_TOOLTIP);
11851188

11861189
TrampolineTWinControl_WMNCPaint :=InterceptCreate(TWinControl(nil).GetWMNCPaintAddr, @Detour_TWinControl_WMNCPaint);
11871190
if Assigned(DrawThemeText) then
1188-
Trampoline_DrawThemeText := InterceptCreate(@DrawThemeText, @Detour_UxTheme_DrawThemeText);
1191+
Trampoline_DrawThemeText := InterceptCreate(@DrawThemeText, @Detour_UxTheme_DrawThemeText);
11891192
TrampolineOpenThemeData := InterceptCreate(themelib, 'OpenThemeData', @Detour_UxTheme_OpenThemeData);
11901193
TrampolineDrawThemeBackground := InterceptCreate(themelib, 'DrawThemeBackground', @Detour_UxTheme_DrawThemeBackground);
11911194
TrampolineBaseVirtualTreeOriginalWMNCPaint := InterceptCreate(sVclIDEModule, sBaseVirtualTreeOriginalWMNCPaint, @Detour_TBaseVirtualTree_OriginalWMNCPaint);
@@ -1205,11 +1208,8 @@ procedure RemoveHooksUXTheme;
12051208
// InterceptRemove(@TrampolineSetScrollPos);
12061209
// InterceptRemove(@TrampolineSetScrollInfo);
12071210

1208-
if {$IFDEF DELPHIXE2_UP}StyleServices.Available {$ELSE} ThemeServices.ThemesAvailable {$ENDIF} then
1209-
begin
1210-
THThemesClasses.Classes.Free;
1211-
THThemesClasses.Windows.Free;
1212-
end;
1211+
THThemesClasses.Classes.Free;
1212+
THThemesClasses.Windows.Free;
12131213
end;
12141214

12151215

delphi-ide-theme-editor/IDE PlugIn/Colorizer.Hooks.Windows.pas

Lines changed: 91 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,96 @@ function Detour_WinApi_DrawFrameControl(DC: HDC; Rect: PRect; uType, uState: UIN
176176
LStyleServices: TCustomStyleServices;
177177
{$ENDIF}
178178
begin
179+
AddLog2(Format('Detour_WinApi_DrawFrameControl uType %d State %d', [uType, uState]));
180+
181+
if( uType=DFC_SCROLL) and (Rect<>nil) and Assigned(TColorizerLocalSettings.Settings) and (TColorizerLocalSettings.Settings.Enabled) then
182+
begin
183+
184+
LWinControl:=nil;
185+
OrgHWND :=WindowFromDC(DC);
186+
if OrgHWND<>0 then
187+
LWinControl :=FindControl(OrgHWND);
188+
189+
if LWinControl<>nil then
190+
begin
191+
LParentForm:= GetParentForm(LWinControl);
192+
if not (Assigned(LParentForm) and Assigned(TColorizerLocalSettings.HookedWindows) and (TColorizerLocalSettings.HookedWindows.IndexOf(LParentForm.ClassName)>=0)) then
193+
Exit(Trampoline_DrawFrameControl(DC, Rect, uType, uState));
194+
end;
195+
196+
LCanvas:=TCanvas.Create;
197+
try
198+
LCanvas.Handle:=DC;
199+
{$IFDEF DELPHIXE2_UP}
200+
if TColorizerLocalSettings.Settings.UseVCLStyles and TColorizerLocalSettings.Settings.VCLStylesControls then
201+
begin
202+
LStyleServices:= ColorizerStyleServices;
203+
204+
205+
if (DFCS_SCROLLUP and uState = DFCS_SCROLLUP) then
206+
LDetails := LStyleServices.GetElementDetails(tsArrowBtnUpNormal)
207+
else
208+
if (DFCS_SCROLLDOWN and uState = DFCS_SCROLLDOWN) then
209+
LDetails := LStyleServices.GetElementDetails(tsArrowBtnDownNormal)
210+
else
211+
if (DFCS_SCROLLLEFT and uState = DFCS_SCROLLLEFT) then
212+
LDetails := LStyleServices.GetElementDetails(tsArrowBtnLeftNormal)
213+
else
214+
if (DFCS_SCROLLRIGHT and uState = DFCS_SCROLLRIGHT) then
215+
LDetails := LStyleServices.GetElementDetails(tsArrowBtnRightNormal)
216+
else
217+
if (DFCS_SCROLLSIZEGRIP and uState = DFCS_SCROLLSIZEGRIP) then
218+
LDetails := LStyleServices.GetElementDetails(tsSizeBoxLeftAlign)
219+
else
220+
if (DFCS_SCROLLSIZEGRIPRIGHT and uState = DFCS_SCROLLSIZEGRIPRIGHT) then
221+
LDetails := LStyleServices.GetElementDetails(tsSizeBoxRightAlign)
222+
else
223+
Exit(Trampoline_DrawFrameControl(DC, Rect, uType, uState));
224+
225+
LCanvas.Brush.Color := TColorizerLocalSettings.ColorMap.Color;
226+
LCanvas.FillRect(Rect^);
227+
LStyleServices.DrawElement(LCanvas.Handle, LDetails, Rect^);
228+
end
229+
else
230+
{$ENDIF}
231+
begin
232+
LSize.cx:= 13;
233+
LSize.cy:= 13;
234+
235+
LBuffer:=TBitmap.Create;
236+
try
237+
LBuffer.SetSize(LSize.cx, LSize.cy);
238+
LRect := Types.Rect(0, 0, LSize.cx, LSize.cy);
239+
LBuffer.Canvas.Brush.Color:=TColorizerLocalSettings.ColorMap.WindowColor;
240+
LBuffer.Canvas.FillRect(LRect);
241+
LBuffer.Canvas.Pen.Color :=TColorizerLocalSettings.ColorMap.FontColor;
242+
LBuffer.Canvas.Ellipse(0, 0, LSize.cx, LSize.cy);
243+
244+
if (DFCS_CHECKED and uState = DFCS_CHECKED) then
245+
begin
246+
LBuffer.Canvas.Brush.Color:= LBuffer.Canvas.Pen.Color;
247+
LBuffer.Canvas.Ellipse(3, 3, 3 + LSize.cx div 2 ,3 + LSize.cy div 2);
248+
end;
249+
250+
RectCenter(LRect, Rect^);
251+
BitBlt(dc, LRect.Left, LRect.Top, LSize.cx, LSize.cy, LBuffer.Canvas.Handle, 0, 0, SRCCOPY);
252+
finally
253+
LBuffer.Free;
254+
end;
255+
end;
256+
257+
finally
258+
LCanvas.Handle:=0;
259+
LCanvas.Free;
260+
end;
261+
Exit(True);
262+
263+
end
264+
else
179265
if( uType=DFC_BUTTON) and (Rect<>nil) and Assigned(TColorizerLocalSettings.Settings) and (TColorizerLocalSettings.Settings.Enabled) then
180266
begin
267+
AddLog2(Format('DFC_BUTTON State %d', [uState]));
268+
181269
if (DFCS_BUTTONRADIO and uState = DFCS_BUTTONRADIO) then
182270
begin
183271
LWinControl:=nil;
@@ -672,25 +760,14 @@ function Detour_WinApi_GetSysColor(nIndex: Integer): DWORD; stdcall;
672760

673761

674762
procedure InstallHooksWinAPI();
675-
var
676-
pOrgAddress : Pointer;
677763
begin
678764
Trampoline_DrawText := InterceptCreate(@Windows.DrawTextW, @Detour_WinApi_DrawText);
679765
Trampoline_DrawTextEx := InterceptCreate(@Windows.DrawTextEx, @Detour_WinApi_DrawTextEx);
680766
Trampoline_ExtTextOutW := InterceptCreate(@Windows.ExtTextOutW, @Detour_WinApi_ExtTextOutW); //OK
681-
682767
Trampoline_GetSysColor := InterceptCreate(user32, 'GetSysColor', @Detour_WinApi_GetSysColor);
683768
//TrampolineGetSysColorBrush := InterceptCreate(user32, 'GetSysColorBrush', @InterceptGetSysColorBrush);
684-
685-
pOrgAddress := GetProcAddress(GetModuleHandle(user32), 'DrawEdge');
686-
if Assigned(pOrgAddress) then
687-
Trampoline_DrawEdge := InterceptCreate(pOrgAddress, @Detour_WinApi_DrawEdge);
688-
//
689-
690-
// pOrgAddress := GetProcAddress(GetModuleHandle(user32), 'DrawFrameControl');
691-
// if Assigned(pOrgAddress) then
692-
// Trampoline_DrawFrameControl := InterceptCreate(pOrgAddress, @Detour_WinApi_DrawFrameControl);
693-
769+
Trampoline_DrawEdge := InterceptCreate(user32, 'DrawEdge', @Detour_WinApi_DrawEdge);
770+
//Trampoline_DrawFrameControl := InterceptCreate(user32, 'DrawFrameControl', @Detour_WinApi_DrawFrameControl);
694771
end;
695772

696773
procedure RemoveHooksWinAPI();
@@ -701,7 +778,7 @@ procedure RemoveHooksWinAPI();
701778
InterceptRemove(@Trampoline_GetSysColor);
702779
InterceptRemove(@TrampolineGetSysColorBrush);
703780
InterceptRemove(@Trampoline_DrawEdge);
704-
//InterceptRemove(@Trampoline_DrawFrameControl);
781+
InterceptRemove(@Trampoline_DrawFrameControl);
705782
end;
706783

707784

0 commit comments

Comments
 (0)