diff --git a/Demo/Images/DemoPreviewStyledComponents.jpg b/Demo/Images/DemoPreviewStyledComponents.jpg new file mode 100644 index 0000000..9e4198b Binary files /dev/null and b/Demo/Images/DemoPreviewStyledComponents.jpg differ diff --git a/Demo/Images/Launcher..jpg b/Demo/Images/Launcher..jpg new file mode 100644 index 0000000..ddf35ae Binary files /dev/null and b/Demo/Images/Launcher..jpg differ diff --git a/Demo/Images/SupportingDelphi.jpg b/Demo/Images/SupportingDelphi.jpg index f89d51d..f25dddb 100644 Binary files a/Demo/Images/SupportingDelphi.jpg and b/Demo/Images/SupportingDelphi.jpg differ diff --git a/Demo/Projects/D10_1/ModernAppDemo.dpr b/Demo/Projects/D10_1/ModernAppDemo.dpr index 6f6cd9d..168184f 100644 --- a/Demo/Projects/D10_1/ModernAppDemo.dpr +++ b/Demo/Projects/D10_1/ModernAppDemo.dpr @@ -3,7 +3,7 @@ { A full example of an HighDPI - VCL Themed enabled application } { See how to select the application Theme using VCLThemeSelector Form } { } -{ Copyright (c) 2020, 2023 (Ethea S.r.l.) } +{ Copyright (c) 2020, 2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { https://github.com/EtheaDev/VCLThemeSelector } { } @@ -28,17 +28,37 @@ uses Vcl.Themes, Vcl.Styles, MidasLib, + {$IFDEF STYLEDCOMPONENTS} + Vcl.StyledButton, + Vcl.ButtonStylesAttributes, + Vcl.StyledDbNavigator, + Vcl.StyledToolbar, + Vcl.StyledButtonGroup, + Vcl.StyledCategoryButtons, + {$ENDIF} uSplitView in '..\..\Source\uSplitView.pas' {FormMain}, EditForm in '..\..\Source\EditForm.pas' {FmEdit}, FVCLThemeSelector in '..\..\..\Source\FVCLThemeSelector.pas' {VCLThemeSelectorForm}, - DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}; + DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}, + DemoAbout in '..\..\Source\DemoAbout.pas' {FrmAbout}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; - Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support - Copyright (c) Ethea S.r.l.'; + Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support'; + //Uses System Style for border / shadow of Forms + TStyleManager.FormBorderStyle := TStyleManager.TFormBorderStyle.fbsSystemStyle; + + {$IFDEF STYLEDCOMPONENTS} + TStyledButton.RegisterDefaultRenderingStyle(btRounded); + TStyledDbNavigator.RegisterDefaultRenderingStyle(btRounded); + TStyledButtonGroup.RegisterDefaultRenderingStyle(btRounded); + TStyledCategoryButtons.RegisterDefaultRenderingStyle(btRounded); + TStyledToolbar.RegisterDefaultRenderingStyle(btRoundRect); + {$ENDIF} + Application.CreateForm(TImageCollectionDataModule, ImageCollectionDataModule); Application.CreateForm(TFormMain, FormMain); Application.Run; diff --git a/Demo/Projects/D10_1/ModernAppDemo.dproj b/Demo/Projects/D10_1/ModernAppDemo.dproj index 860cef6..e4116f5 100644 --- a/Demo/Projects/D10_1/ModernAppDemo.dproj +++ b/Demo/Projects/D10_1/ModernAppDemo.dproj @@ -5,9 +5,9 @@ VCL ModernAppDemo.dpr True - Debug - Win32 - 1 + Release + Win64 + 3 Application @@ -18,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -29,6 +34,12 @@ true true + + true + Cfg_1 + true + true + true Base @@ -40,6 +51,12 @@ true true + + true + Cfg_2 + true + true + Amakrits|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Amakrits.vsf;"Amethyst Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AmethystKamri.vsf";"Aqua Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaGraphite.vsf";"Aqua Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaLightSlate.vsf";Auric|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Auric.vsf;Carbon|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Carbon.vsf;"Charcoal Dark Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CharcoalDarkSlate.vsf";"Cobalt XEMedia|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CobaltXEMedia.vsf";"Cyan Dusk|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanDusk.vsf";"Cyan Night|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanNight.vsf";"Emerald Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\EmeraldLightSlate.vsf";Glossy|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glossy.vsf;Glow|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glow.vsf;"Golden Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\GoldenGraphite.vsf";"Iceberg Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\IcebergClassico.vsf";"Lavender Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LavenderClassico.vsf";Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Light.vsf;Luna|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Luna.vsf;"Metropolis UI Black|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIBlack.vsf";"Metropolis UI Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIBlue.vsf";"Metropolis UI Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIDark.vsf";"Metropolis UI Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIGreen.vsf";Obsidian|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Obsidian.vsf;"Onyx Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\OnyxBlue.vsf";"Ruby Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\RubyGraphite.vsf";"Sapphire Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SapphireKamri.vsf";Silver|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Silver.vsf;Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;"Slate Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SlateClassico.vsf";"Smokey Quartz Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SmokeyQuartzKamri.vsf";"Tablet Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletLight.vsf";TabletDark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletDark.vsf;"Turquoise Gray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TurquoiseGray.vsf";Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows10 Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Blue.vsf";"Windows10 Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Dark.vsf";"Windows10 Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Green.vsf";"Windows10 Purple|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Purple.vsf";"Windows10 SlateGray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10SlateGray.vsf" System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) @@ -48,11 +65,11 @@ ..\..\Bin 1033 ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\SVG;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\SVGIconImageList\Image32\Source\Image32_SVG;..\..\..\..\IconFontsImageList\Source;$(DCC_UnitSearchPath) - CompanyName=Ethea S.r.l.;FileVersion=3.1.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2023 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.1;Comments=;ProgramID=;FileDescription=;ProductName= - VCLSTYLEUTILS;$(DCC_Define) + CompanyName=Ethea S.r.l.;FileVersion=3.2.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2024 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.2;Comments=;ProgramID=;FileDescription=;ProductName= + VCLSTYLEUTILS;NO_STYLEDCOMPONENTS;$(DCC_Define) true 3 - 1 + 2 $(BDS)\bin\default_app.manifest @@ -61,6 +78,14 @@ PerMonitorV2 true + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + $(BDS)\bin\default_app.manifest + ..\Ethea_vela_multires.ico + PerMonitorV2 + true + DEBUG;$(DCC_Define) true @@ -78,6 +103,11 @@ true true + + true + true + true + false RELEASE;$(DCC_Define) @@ -88,6 +118,9 @@ Debug true + + true + MainSource @@ -109,6 +142,9 @@ dfm TDataModule + +
FrmAbout
+
Cfg_2 Base @@ -131,790 +167,13 @@ ModernAppDemo.dpr - - - - ModernAppDemo.exe - true - - - - - ModernAppDemo.exe - true - - - - - 0 - .dll;.bpl - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - classes - 1 - - - - - Contents\MacOS - 0 - - - 1 - - - Contents\MacOS - 1 - - - - - res\drawable-xxhdpi - 1 - - - - - 1 - - - 1 - - - 1 - - - - - Contents\Resources - 1 - - - - - 1 - - - 1 - - - 0 - - - 1 - - - Contents\MacOS - 1 - - - library\lib\armeabi-v7a - 1 - - - 1 - - - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - 1 - - - 1 - - - 1 - - - - - library\lib\armeabi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - 0 - - - 1 - - - Contents\MacOS - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable-normal - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - ..\ - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - - - 1 - - - 1 - - - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable-mdpi - 1 - - - - - res\drawable-xlarge - 1 - - - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - library\lib\mips - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 0 - - - Contents\MacOS - 1 - .framework - - - - - library\lib\armeabi-v7a - 1 - - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable-xhdpi - 1 - - - - - res\drawable-large - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - res\drawable-hdpi - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - Contents - 1 - - - - - res\values - 1 - - - - - res\drawable-small - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - 0 - - - 0 - - - - - 0 - .bpl - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - - - 1 - - - 1 - - - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - 1 - - - - - res\drawable-ldpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - - - - - - - - - True + True 12 - diff --git a/Demo/Projects/D10_1/ModernAppDemo.res b/Demo/Projects/D10_1/ModernAppDemo.res index 237a935..efdc7d0 100644 Binary files a/Demo/Projects/D10_1/ModernAppDemo.res and b/Demo/Projects/D10_1/ModernAppDemo.res differ diff --git a/Demo/Projects/D10_2/ModernAppDemo.dpr b/Demo/Projects/D10_2/ModernAppDemo.dpr index 6f6cd9d..168184f 100644 --- a/Demo/Projects/D10_2/ModernAppDemo.dpr +++ b/Demo/Projects/D10_2/ModernAppDemo.dpr @@ -3,7 +3,7 @@ { A full example of an HighDPI - VCL Themed enabled application } { See how to select the application Theme using VCLThemeSelector Form } { } -{ Copyright (c) 2020, 2023 (Ethea S.r.l.) } +{ Copyright (c) 2020, 2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { https://github.com/EtheaDev/VCLThemeSelector } { } @@ -28,17 +28,37 @@ uses Vcl.Themes, Vcl.Styles, MidasLib, + {$IFDEF STYLEDCOMPONENTS} + Vcl.StyledButton, + Vcl.ButtonStylesAttributes, + Vcl.StyledDbNavigator, + Vcl.StyledToolbar, + Vcl.StyledButtonGroup, + Vcl.StyledCategoryButtons, + {$ENDIF} uSplitView in '..\..\Source\uSplitView.pas' {FormMain}, EditForm in '..\..\Source\EditForm.pas' {FmEdit}, FVCLThemeSelector in '..\..\..\Source\FVCLThemeSelector.pas' {VCLThemeSelectorForm}, - DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}; + DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}, + DemoAbout in '..\..\Source\DemoAbout.pas' {FrmAbout}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; - Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support - Copyright (c) Ethea S.r.l.'; + Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support'; + //Uses System Style for border / shadow of Forms + TStyleManager.FormBorderStyle := TStyleManager.TFormBorderStyle.fbsSystemStyle; + + {$IFDEF STYLEDCOMPONENTS} + TStyledButton.RegisterDefaultRenderingStyle(btRounded); + TStyledDbNavigator.RegisterDefaultRenderingStyle(btRounded); + TStyledButtonGroup.RegisterDefaultRenderingStyle(btRounded); + TStyledCategoryButtons.RegisterDefaultRenderingStyle(btRounded); + TStyledToolbar.RegisterDefaultRenderingStyle(btRoundRect); + {$ENDIF} + Application.CreateForm(TImageCollectionDataModule, ImageCollectionDataModule); Application.CreateForm(TFormMain, FormMain); Application.Run; diff --git a/Demo/Projects/D10_2/ModernAppDemo.dproj b/Demo/Projects/D10_2/ModernAppDemo.dproj index 538cd38..fe6db1c 100644 --- a/Demo/Projects/D10_2/ModernAppDemo.dproj +++ b/Demo/Projects/D10_2/ModernAppDemo.dproj @@ -5,9 +5,9 @@ VCL ModernAppDemo.dpr True - Debug - Win32 - 1 + Release + Win64 + 3 Application @@ -18,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -29,6 +34,12 @@ true true + + true + Cfg_1 + true + true + true Base @@ -40,6 +51,12 @@ true true + + true + Cfg_2 + true + true + Amakrits|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Amakrits.vsf;"Amethyst Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AmethystKamri.vsf";"Aqua Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaGraphite.vsf";"Aqua Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaLightSlate.vsf";Auric|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Auric.vsf;Carbon|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Carbon.vsf;"Charcoal Dark Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CharcoalDarkSlate.vsf";"Cobalt XEMedia|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CobaltXEMedia.vsf";"Cyan Dusk|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanDusk.vsf";"Cyan Night|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanNight.vsf";"Emerald Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\EmeraldLightSlate.vsf";Glossy|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glossy.vsf;Glow|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glow.vsf;"Golden Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\GoldenGraphite.vsf";"Iceberg Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\IcebergClassico.vsf";"Lavender Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LavenderClassico.vsf";Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Light.vsf;Luna|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Luna.vsf;"Metropolis UI Black|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIBlack.vsf";"Metropolis UI Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIBlue.vsf";"Metropolis UI Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIDark.vsf";"Metropolis UI Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIGreen.vsf";Obsidian|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Obsidian.vsf;"Onyx Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\OnyxBlue.vsf";"Ruby Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\RubyGraphite.vsf";"Sapphire Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SapphireKamri.vsf";Silver|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Silver.vsf;Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;"Slate Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SlateClassico.vsf";"Smokey Quartz Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SmokeyQuartzKamri.vsf";"Tablet Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletLight.vsf";TabletDark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletDark.vsf;"Turquoise Gray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TurquoiseGray.vsf";Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows10 Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Blue.vsf";"Windows10 Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Dark.vsf";"Windows10 Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Green.vsf";"Windows10 Purple|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Purple.vsf";"Windows10 SlateGray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10SlateGray.vsf" System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) @@ -47,12 +64,12 @@ .\$(Platform)\$(Config) ..\..\Bin 1033 - ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\SVG;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\SVGIconImageList\Image32\Source\Image32_SVG;..\..\..\..\IconFontsImageList\Source;$(DCC_UnitSearchPath) - CompanyName=Ethea S.r.l.;FileVersion=3.1.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2023 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.1;Comments=;ProgramID=;FileDescription=;ProductName= - VCLSTYLEUTILS;$(DCC_Define) + ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\IconFontsImageList\Source;..\..\..\..\StyledComponents\Source;$(DCC_UnitSearchPath) + CompanyName=Ethea S.r.l.;FileVersion=3.2.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2024 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.2;Comments=;ProgramID=;FileDescription=;ProductName= + VCLSTYLEUTILS;NO_STYLEDCOMPONENTS;$(DCC_Define) true 3 - 1 + 2 $(BDS)\bin\default_app.manifest @@ -61,6 +78,14 @@ PerMonitorV2 true + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + $(BDS)\bin\default_app.manifest + ..\Ethea_vela_multires.ico + PerMonitorV2 + true + DEBUG;$(DCC_Define) true @@ -78,6 +103,11 @@ true true + + true + true + true + false RELEASE;$(DCC_Define) @@ -88,6 +118,9 @@ Debug true + + true + MainSource @@ -109,6 +142,9 @@ dfm TDataModule + +
FrmAbout
+
Cfg_2 Base @@ -131,784 +167,13 @@ ModernAppDemo.dpr - - - - ModernAppDemo.exe - true - - - - - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 0 - - - - - classes - 1 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\mips - 1 - - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - - - res\values - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\drawable - 1 - - - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-ldpi - 1 - - - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-small - 1 - - - - - res\drawable-normal - 1 - - - - - res\drawable-large - 1 - - - - - res\drawable-xlarge - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - Contents\MacOS - 1 - .framework - - - 0 - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .bpl - - - - - 0 - - - 0 - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - 1 - - - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - - - Contents - 1 - - - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - - - - - - - - - True + True 12 - diff --git a/Demo/Projects/D10_3/ModernAppDemo.dpr b/Demo/Projects/D10_3/ModernAppDemo.dpr index 6f6cd9d..168184f 100644 --- a/Demo/Projects/D10_3/ModernAppDemo.dpr +++ b/Demo/Projects/D10_3/ModernAppDemo.dpr @@ -3,7 +3,7 @@ { A full example of an HighDPI - VCL Themed enabled application } { See how to select the application Theme using VCLThemeSelector Form } { } -{ Copyright (c) 2020, 2023 (Ethea S.r.l.) } +{ Copyright (c) 2020, 2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { https://github.com/EtheaDev/VCLThemeSelector } { } @@ -28,17 +28,37 @@ uses Vcl.Themes, Vcl.Styles, MidasLib, + {$IFDEF STYLEDCOMPONENTS} + Vcl.StyledButton, + Vcl.ButtonStylesAttributes, + Vcl.StyledDbNavigator, + Vcl.StyledToolbar, + Vcl.StyledButtonGroup, + Vcl.StyledCategoryButtons, + {$ENDIF} uSplitView in '..\..\Source\uSplitView.pas' {FormMain}, EditForm in '..\..\Source\EditForm.pas' {FmEdit}, FVCLThemeSelector in '..\..\..\Source\FVCLThemeSelector.pas' {VCLThemeSelectorForm}, - DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}; + DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}, + DemoAbout in '..\..\Source\DemoAbout.pas' {FrmAbout}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; - Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support - Copyright (c) Ethea S.r.l.'; + Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support'; + //Uses System Style for border / shadow of Forms + TStyleManager.FormBorderStyle := TStyleManager.TFormBorderStyle.fbsSystemStyle; + + {$IFDEF STYLEDCOMPONENTS} + TStyledButton.RegisterDefaultRenderingStyle(btRounded); + TStyledDbNavigator.RegisterDefaultRenderingStyle(btRounded); + TStyledButtonGroup.RegisterDefaultRenderingStyle(btRounded); + TStyledCategoryButtons.RegisterDefaultRenderingStyle(btRounded); + TStyledToolbar.RegisterDefaultRenderingStyle(btRoundRect); + {$ENDIF} + Application.CreateForm(TImageCollectionDataModule, ImageCollectionDataModule); Application.CreateForm(TFormMain, FormMain); Application.Run; diff --git a/Demo/Projects/D10_3/ModernAppDemo.dproj b/Demo/Projects/D10_3/ModernAppDemo.dproj index 85b6d2e..fe6db1c 100644 --- a/Demo/Projects/D10_3/ModernAppDemo.dproj +++ b/Demo/Projects/D10_3/ModernAppDemo.dproj @@ -6,8 +6,8 @@ ModernAppDemo.dpr True Release - Win32 - 1 + Win64 + 3 Application @@ -18,6 +18,11 @@ Base true + + true + Base + true + true Base @@ -29,6 +34,12 @@ true true + + true + Cfg_1 + true + true + true Base @@ -40,6 +51,12 @@ true true + + true + Cfg_2 + true + true + Amakrits|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Amakrits.vsf;"Amethyst Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AmethystKamri.vsf";"Aqua Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaGraphite.vsf";"Aqua Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaLightSlate.vsf";Auric|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Auric.vsf;Carbon|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Carbon.vsf;"Charcoal Dark Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CharcoalDarkSlate.vsf";"Cobalt XEMedia|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CobaltXEMedia.vsf";"Cyan Dusk|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanDusk.vsf";"Cyan Night|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanNight.vsf";"Emerald Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\EmeraldLightSlate.vsf";Glossy|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glossy.vsf;Glow|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glow.vsf;"Golden Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\GoldenGraphite.vsf";"Iceberg Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\IcebergClassico.vsf";"Lavender Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LavenderClassico.vsf";Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Light.vsf;Luna|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Luna.vsf;"Metropolis UI Black|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIBlack.vsf";"Metropolis UI Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIBlue.vsf";"Metropolis UI Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIDark.vsf";"Metropolis UI Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MetropolisUIGreen.vsf";Obsidian|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Obsidian.vsf;"Onyx Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\OnyxBlue.vsf";"Ruby Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\RubyGraphite.vsf";"Sapphire Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SapphireKamri.vsf";Silver|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Silver.vsf;Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;"Slate Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SlateClassico.vsf";"Smokey Quartz Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SmokeyQuartzKamri.vsf";"Tablet Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletLight.vsf";TabletDark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletDark.vsf;"Turquoise Gray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TurquoiseGray.vsf";Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows10 Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Blue.vsf";"Windows10 Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Dark.vsf";"Windows10 Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Green.vsf";"Windows10 Purple|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Purple.vsf";"Windows10 SlateGray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10SlateGray.vsf" System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) @@ -47,12 +64,12 @@ .\$(Platform)\$(Config) ..\..\Bin 1033 - ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\SVG;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\SVGIconImageList\Image32\Source\Image32_SVG;..\..\..\..\IconFontsImageList\Source;$(DCC_UnitSearchPath) - CompanyName=Ethea S.r.l.;FileVersion=3.1.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2023 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.1;Comments=;ProgramID=;FileDescription=;ProductName= - VCLSTYLEUTILS;$(DCC_Define) + ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\IconFontsImageList\Source;..\..\..\..\StyledComponents\Source;$(DCC_UnitSearchPath) + CompanyName=Ethea S.r.l.;FileVersion=3.2.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2024 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.2;Comments=;ProgramID=;FileDescription=;ProductName= + VCLSTYLEUTILS;NO_STYLEDCOMPONENTS;$(DCC_Define) true 3 - 1 + 2 $(BDS)\bin\default_app.manifest @@ -61,6 +78,14 @@ PerMonitorV2 true + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + $(BDS)\bin\default_app.manifest + ..\Ethea_vela_multires.ico + PerMonitorV2 + true + DEBUG;$(DCC_Define) true @@ -78,6 +103,11 @@ true true + + true + true + true + false RELEASE;$(DCC_Define) @@ -88,6 +118,9 @@ Debug true + + true + MainSource @@ -109,6 +142,9 @@ dfm TDataModule + +
FrmAbout
+
Cfg_2 Base @@ -126,909 +162,18 @@ Application - - File C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\ipstudiowinwordxp260.bpl not found - Devart Oracle Data Access Components - *** Liscor - XDB Components for Delphi Rio 10.3 e ReportBuilder 20 *** - DCPcrypt cryptographic component library v2 B3 - *** (IFIS) MS Corelab Forms Repository for Delphi Rio 10.3 e ReportBuilder 20 *** - Ethea InstantSolutions 7 Rtl Library - Ethea InstantSolutions 7 Vcl Library - Ethea InstantSolutions 7 LibreOffice/OpenOffice Components - Ethea InstantSolutions 7 Framework Library - Embarcadero DBExpress DataSnap Native Server Components - Microsoft Office 2000 Sample Automation Server Wrapper Components - + ModernAppDemo.dpr - - - - ModernAppDemo.exe - true - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - classes - 1 - - - classes - 1 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi - 1 - - - library\lib\armeabi - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\mips - 1 - - - library\lib\mips - 1 - - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-ldpi - 1 - - - res\drawable-ldpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-small - 1 - - - res\drawable-small - 1 - - - - - res\drawable-normal - 1 - - - res\drawable-normal - 1 - - - - - res\drawable-large - 1 - - - res\drawable-large - 1 - - - - - res\drawable-xlarge - 1 - - - res\drawable-xlarge - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - Contents\MacOS - 1 - .framework - - - Contents\MacOS - 1 - .framework - - - 0 - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .bpl - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - 1 - - - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - Contents - 1 - - - Contents - 1 - - - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - - - - - - - - - True + True 12 - diff --git a/Demo/Projects/D10_3/ModernAppDemo.res b/Demo/Projects/D10_3/ModernAppDemo.res index d628203..e2ccb2e 100644 Binary files a/Demo/Projects/D10_3/ModernAppDemo.res and b/Demo/Projects/D10_3/ModernAppDemo.res differ diff --git a/Demo/Projects/D10_4/ModernAppDemo.dpr b/Demo/Projects/D10_4/ModernAppDemo.dpr index 6f6cd9d..168184f 100644 --- a/Demo/Projects/D10_4/ModernAppDemo.dpr +++ b/Demo/Projects/D10_4/ModernAppDemo.dpr @@ -3,7 +3,7 @@ { A full example of an HighDPI - VCL Themed enabled application } { See how to select the application Theme using VCLThemeSelector Form } { } -{ Copyright (c) 2020, 2023 (Ethea S.r.l.) } +{ Copyright (c) 2020, 2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { https://github.com/EtheaDev/VCLThemeSelector } { } @@ -28,17 +28,37 @@ uses Vcl.Themes, Vcl.Styles, MidasLib, + {$IFDEF STYLEDCOMPONENTS} + Vcl.StyledButton, + Vcl.ButtonStylesAttributes, + Vcl.StyledDbNavigator, + Vcl.StyledToolbar, + Vcl.StyledButtonGroup, + Vcl.StyledCategoryButtons, + {$ENDIF} uSplitView in '..\..\Source\uSplitView.pas' {FormMain}, EditForm in '..\..\Source\EditForm.pas' {FmEdit}, FVCLThemeSelector in '..\..\..\Source\FVCLThemeSelector.pas' {VCLThemeSelectorForm}, - DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}; + DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}, + DemoAbout in '..\..\Source\DemoAbout.pas' {FrmAbout}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; - Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support - Copyright (c) Ethea S.r.l.'; + Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support'; + //Uses System Style for border / shadow of Forms + TStyleManager.FormBorderStyle := TStyleManager.TFormBorderStyle.fbsSystemStyle; + + {$IFDEF STYLEDCOMPONENTS} + TStyledButton.RegisterDefaultRenderingStyle(btRounded); + TStyledDbNavigator.RegisterDefaultRenderingStyle(btRounded); + TStyledButtonGroup.RegisterDefaultRenderingStyle(btRounded); + TStyledCategoryButtons.RegisterDefaultRenderingStyle(btRounded); + TStyledToolbar.RegisterDefaultRenderingStyle(btRoundRect); + {$ENDIF} + Application.CreateForm(TImageCollectionDataModule, ImageCollectionDataModule); Application.CreateForm(TFormMain, FormMain); Application.Run; diff --git a/Demo/Projects/D10_4/ModernAppDemo.dproj b/Demo/Projects/D10_4/ModernAppDemo.dproj index da74d84..3f003ad 100644 --- a/Demo/Projects/D10_4/ModernAppDemo.dproj +++ b/Demo/Projects/D10_4/ModernAppDemo.dproj @@ -1,12 +1,12 @@  {3A641B72-3BED-4F5E-9822-B594FF4EBCDC} - 19.2 + 19.5 VCL ModernAppDemo.dpr True Release - Win32 + Win64 3 Application @@ -64,12 +64,12 @@ .\$(Platform)\$(Config) ..\..\Bin 1033 - ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\SVG;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\SVGIconImageList\Image32\Source\Image32_SVG;..\..\..\..\IconFontsImageList\Source;$(DCC_UnitSearchPath) - CompanyName=Ethea S.r.l.;FileVersion=3.1.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2023 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.1;Comments=;ProgramID=;FileDescription=;ProductName= - VCLSTYLEUTILS;$(DCC_Define) + ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\IconFontsImageList\Source;..\..\..\..\StyledComponents\Source;$(DCC_UnitSearchPath) + CompanyName=Ethea S.r.l.;FileVersion=3.2.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2024 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.2;Comments=;ProgramID=;FileDescription=;ProductName= + VCLSTYLEUTILS;NO_STYLEDCOMPONENTS;$(DCC_Define) true 3 - 1 + 2 $(BDS)\bin\default_app.manifest @@ -83,6 +83,7 @@ Debug $(BDS)\bin\default_app.manifest ..\Ethea_vela_multires.ico + PerMonitorV2 true @@ -103,7 +104,6 @@ true - PerMonitorV2 true true true @@ -119,7 +119,6 @@ true - PerMonitorV2 true @@ -143,6 +142,9 @@ dfm TDataModule + +
FrmAbout
+
Cfg_2 Base @@ -165,1101 +167,6 @@ ModernAppDemo.dpr - - - - ModernAppDemo.exe - true - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - classes - 1 - - - classes - 1 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi - 1 - - - library\lib\armeabi - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\mips - 1 - - - library\lib\mips - 1 - - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-ldpi - 1 - - - res\drawable-ldpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-small - 1 - - - res\drawable-small - 1 - - - - - res\drawable-normal - 1 - - - res\drawable-normal - 1 - - - - - res\drawable-large - 1 - - - res\drawable-large - 1 - - - - - res\drawable-xlarge - 1 - - - res\drawable-xlarge - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - Contents\MacOS - 1 - .framework - - - Contents\MacOS - 1 - .framework - - - 0 - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .bpl - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - 1 - - - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen - 64 - - - ..\$(PROJECTNAME).launchscreen - 64 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - - - Contents - 1 - - - Contents - 1 - - - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - - - - - - - - - True True @@ -1269,5 +176,4 @@ -
diff --git a/Demo/Projects/D10_4/ModernAppDemo.res b/Demo/Projects/D10_4/ModernAppDemo.res index 0bdbeda..b875155 100644 Binary files a/Demo/Projects/D10_4/ModernAppDemo.res and b/Demo/Projects/D10_4/ModernAppDemo.res differ diff --git a/Demo/Projects/D10_4/VCLThemeSelectorLauncher.dproj b/Demo/Projects/D10_4/VCLThemeSelectorLauncher.dproj index 4e5a4f8..1e11142 100644 --- a/Demo/Projects/D10_4/VCLThemeSelectorLauncher.dproj +++ b/Demo/Projects/D10_4/VCLThemeSelectorLauncher.dproj @@ -58,7 +58,7 @@ true - "Aqua Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaLightSlate.vsf";CopperDark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CopperDark.vsf;Glow|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glow.vsf;"Iceberg Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\IcebergClassico.vsf";"Lavender Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LavenderClassico.vsf";Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;"Slate Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SlateClassico.vsf";"Tablet Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletDark.vsf";"Tablet Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletLight.vsf";Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows10 Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Blue.vsf";"Windows10 Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Dark.vsf";"Windows10 Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Green.vsf";"Windows10 Purple|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Purple.vsf";"Windows10 SlateGray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10SlateGray.vsf";"Windows11 Modern Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Dark.vsf";"Windows11 Modern Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Light.vsf" + Diamond|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Diamond.vsf;Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows11 Modern Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Light.vsf" System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) VCLThemeSelectorLauncher .\$(Platform)\$(Config) @@ -147,6 +147,11 @@ VCLThemeSelectorLauncher.dpr + Ethea SVGIconImageList FMX components + Sample Text Based TDataSet Component + Microsoft Office 2000 Sample Automation Server Wrapper Components + Skia4Delphi FMX Designtime package + Skia4Delphi VCL Designtime package diff --git a/Demo/Projects/D10_4/VCLThemeSelectorLauncher.res b/Demo/Projects/D10_4/VCLThemeSelectorLauncher.res index 098ffde..6b2cadf 100644 Binary files a/Demo/Projects/D10_4/VCLThemeSelectorLauncher.res and b/Demo/Projects/D10_4/VCLThemeSelectorLauncher.res differ diff --git a/Demo/Projects/D11/ModernAppDemo.dpr b/Demo/Projects/D11/ModernAppDemo.dpr index 6f6cd9d..4480a31 100644 --- a/Demo/Projects/D11/ModernAppDemo.dpr +++ b/Demo/Projects/D11/ModernAppDemo.dpr @@ -28,17 +28,37 @@ uses Vcl.Themes, Vcl.Styles, MidasLib, + {$IFDEF STYLEDCOMPONENTS} + Vcl.StyledButton, + Vcl.ButtonStylesAttributes, + Vcl.StyledDbNavigator, + Vcl.StyledToolbar, + Vcl.StyledButtonGroup, + Vcl.StyledCategoryButtons, + {$ENDIF} uSplitView in '..\..\Source\uSplitView.pas' {FormMain}, EditForm in '..\..\Source\EditForm.pas' {FmEdit}, FVCLThemeSelector in '..\..\..\Source\FVCLThemeSelector.pas' {VCLThemeSelectorForm}, - DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}; + DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}, + DemoAbout in '..\..\Source\DemoAbout.pas' {FrmAbout}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; - Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support - Copyright (c) Ethea S.r.l.'; + Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support'; + //Uses System Style for border / shadow of Forms + TStyleManager.FormBorderStyle := TStyleManager.TFormBorderStyle.fbsSystemStyle; + + {$IFDEF STYLEDCOMPONENTS} + TStyledButton.RegisterDefaultRenderingStyle(btRounded); + TStyledDbNavigator.RegisterDefaultRenderingStyle(btRounded); + TStyledButtonGroup.RegisterDefaultRenderingStyle(btRounded); + TStyledCategoryButtons.RegisterDefaultRenderingStyle(btRounded); + TStyledToolbar.RegisterDefaultRenderingStyle(btRoundRect); + {$ENDIF} + Application.CreateForm(TImageCollectionDataModule, ImageCollectionDataModule); Application.CreateForm(TFormMain, FormMain); Application.Run; diff --git a/Demo/Projects/D11/ModernAppDemo.dproj b/Demo/Projects/D11/ModernAppDemo.dproj index 55baa69..cf57fb5 100644 --- a/Demo/Projects/D11/ModernAppDemo.dproj +++ b/Demo/Projects/D11/ModernAppDemo.dproj @@ -64,12 +64,12 @@ .\$(Platform)\$(Config) ..\..\Bin 1033 - ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\SVG;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\SVGIconImageList\Image32\Source\Image32_SVG;..\..\..\..\IconFontsImageList\Source;$(DCC_UnitSearchPath) - CompanyName=Ethea S.r.l.;FileVersion=3.1.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2023 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.1;Comments=;ProgramID=;FileDescription=;ProductName= - VCLSTYLEUTILS;$(DCC_Define) + ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\IconFontsImageList\Source;..\..\..\..\StyledComponents\Source;$(DCC_UnitSearchPath) + CompanyName=Ethea S.r.l.;FileVersion=3.2.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2024 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.2;Comments=;ProgramID=;FileDescription=;ProductName= + VCLSTYLEUTILS;NO_STYLEDCOMPONENTS;$(DCC_Define) true 3 - 1 + 2 $(BDS)\bin\default_app.manifest @@ -81,6 +81,8 @@ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) Debug $(BDS)\bin\default_app.manifest + ..\Ethea_vela_multires.ico + PerMonitorV2 DEBUG;$(DCC_Define) @@ -99,7 +101,6 @@ true - PerMonitorV2 true true @@ -112,9 +113,6 @@ Debug - - PerMonitorV2 - MainSource @@ -136,6 +134,9 @@ dfm TDataModule + +
FrmAbout
+
Base @@ -153,841 +154,11 @@ Application - - Microsoft Office 2000 Sample Automation Server Wrapper Components - Microsoft Office XP Sample Automation Server Wrapper Components - + ModernAppDemo.dpr - - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - classes - 64 - - - classes - 64 - - - - - res\xml - 1 - - - res\xml - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\armeabi - 1 - - - library\lib\armeabi - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - library\lib\mips - 1 - - - library\lib\mips - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - - - library\lib\armeabi-v7a - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\values-v21 - 1 - - - res\values-v21 - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - res\drawable - 1 - - - res\drawable - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-ldpi - 1 - - - res\drawable-ldpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-mdpi - 1 - - - res\drawable-mdpi - 1 - - - - - res\drawable-hdpi - 1 - - - res\drawable-hdpi - 1 - - - - - res\drawable-xhdpi - 1 - - - res\drawable-xhdpi - 1 - - - - - res\drawable-xxhdpi - 1 - - - res\drawable-xxhdpi - 1 - - - - - res\drawable-xxxhdpi - 1 - - - res\drawable-xxxhdpi - 1 - - - - - res\drawable-small - 1 - - - res\drawable-small - 1 - - - - - res\drawable-normal - 1 - - - res\drawable-normal - 1 - - - - - res\drawable-large - 1 - - - res\drawable-large - 1 - - - - - res\drawable-xlarge - 1 - - - res\drawable-xlarge - 1 - - - - - res\values - 1 - - - res\values - 1 - - - - - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - Contents\MacOS - 1 - .framework - - - Contents\MacOS - 1 - .framework - - - Contents\MacOS - 1 - .framework - - - 0 - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .dll;.bpl - - - - - 1 - .dylib - - - 1 - .dylib - - - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - Contents\MacOS - 1 - .dylib - - - 0 - .bpl - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - Contents\Resources\StartUp\ - 0 - - - Contents\Resources\StartUp\ - 0 - - - Contents\Resources\StartUp\ - 0 - - - 0 - - - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - ..\ - 1 - - - - - Contents - 1 - - - Contents - 1 - - - Contents - 1 - - - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 1 - - - Contents\MacOS - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - ..\ - 1 - - - ..\ - 1 - - - ..\ - 1 - - - - - 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).launchscreen - 64 - - - ..\$(PROJECTNAME).launchscreen - 64 - - - - - 1 - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset - 1 - - - - - - - - - - - - - - - True True @@ -997,5 +168,4 @@ - diff --git a/Demo/Projects/D11/ModernAppDemo.res b/Demo/Projects/D11/ModernAppDemo.res index 0dee5bb..99118ca 100644 Binary files a/Demo/Projects/D11/ModernAppDemo.res and b/Demo/Projects/D11/ModernAppDemo.res differ diff --git a/Demo/Projects/D12/ModernAppDemo.dpr b/Demo/Projects/D12/ModernAppDemo.dpr new file mode 100644 index 0000000..da7b879 --- /dev/null +++ b/Demo/Projects/D12/ModernAppDemo.dpr @@ -0,0 +1,65 @@ +{******************************************************************************} +{ ModernAppDemo by Carlo Barazzetta } +{ A full example of an HighDPI - VCL Themed enabled application } +{ See how to select the application Theme using VCLThemeSelector Form } +{ } +{ Copyright (c) 2020, 2023 (Ethea S.r.l.) } +{ Author: Carlo Barazzetta } +{ https://github.com/EtheaDev/VCLThemeSelector } +{ } +{ Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 } +{ } +{ Unless required by applicable law or agreed to in writing, software } +{ distributed under the License is distributed on an "AS IS" BASIS, } +{ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. } +{ See the License for the specific language governing permissions and } +{ limitations under the License. } +{ } +{******************************************************************************} +program ModernAppDemo; + +uses + Vcl.Forms, + System.SysUtils, + Vcl.Themes, + Vcl.Styles, + MidasLib, + {$IFDEF STYLEDCOMPONENTS} + Vcl.StyledButton, + Vcl.ButtonStylesAttributes, + Vcl.StyledDbNavigator, + Vcl.StyledToolbar, + Vcl.StyledButtonGroup, + Vcl.StyledCategoryButtons, + {$ENDIF} + uSplitView in '..\..\Source\uSplitView.pas' {FormMain}, + EditForm in '..\..\Source\EditForm.pas' {FmEdit}, + FVCLThemeSelector in '..\..\..\Source\FVCLThemeSelector.pas' {VCLThemeSelectorForm}, + DImageCollections in '..\..\Source\DImageCollections.pas' {ImageCollectionDataModule: TDataModule}, + DemoAbout in '..\..\Source\DemoAbout.pas' {FrmAbout}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.Title := 'Modern App and ThemeSelector Demo with HighDPI support'; + //Uses System Style for border / shadow of Forms + TStyleManager.FormBorderStyle := TStyleManager.TFormBorderStyle.fbsSystemStyle; + + {$IFDEF STYLEDCOMPONENTS} + TStyledButton.RegisterDefaultRenderingStyle(btRounded); + TStyledDbNavigator.RegisterDefaultRenderingStyle(btRounded); + TStyledButtonGroup.RegisterDefaultRenderingStyle(btRounded); + TStyledCategoryButtons.RegisterDefaultRenderingStyle(btRounded); + TStyledToolbar.RegisterDefaultRenderingStyle(btRoundRect); + {$ENDIF} + + Application.CreateForm(TImageCollectionDataModule, ImageCollectionDataModule); + Application.CreateForm(TFormMain, FormMain); + Application.Run; +end. diff --git a/Demo/Projects/D12/ModernAppDemo.dproj b/Demo/Projects/D12/ModernAppDemo.dproj new file mode 100644 index 0000000..594c19c --- /dev/null +++ b/Demo/Projects/D12/ModernAppDemo.dproj @@ -0,0 +1,168 @@ + + + {6305D1CF-5712-4B17-9101-F7BA3D5FFD2C} + 20.1 + VCL + ModernAppDemo.dpr + True + Release + Win64 + 3 + Application + ModernAppDemo + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + "Aqua Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaLightSlate.vsf";Copper|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Copper.vsf;CopperDark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CopperDark.vsf;Coral|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Coral.vsf;Diamond|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Diamond.vsf;Emerald|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Emerald.vsf;Glow|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glow.vsf;"Iceberg Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\IcebergClassico.vsf";Jet|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Jet.vsf;"Lavender Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LavenderClassico.vsf";Radiant|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Radiant.vsf;Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;"Slate Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SlateClassico.vsf";Sterling|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sterling.vsf;"Tablet Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletDark.vsf";"Tablet Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletLight.vsf";Vapor|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Vapor.vsf;Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows10 Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Blue.vsf";"Windows10 Charcoal|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10_Charcoal.vsf";"Windows10 Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Dark.vsf";"Windows10 Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Green.vsf";"Windows10 Purple|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Purple.vsf";"Windows10 SlateGray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10SlateGray.vsf";"Windows11 MineShaft|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_MineShaft.vsf";"Windows11 Modern Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Dark.vsf";"Windows11 Modern Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Light.vsf";"Windows11 Polar Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Polar_Dark.vsf";"Windows11 Polar Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Polar_Light.vsf";"Windows11 White Smoke|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_WhiteSmoke.vsf" + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + ModernAppDemo + .\$(Platform)\$(Config) + ..\..\Bin + 1033 + ..\..\..\Source;..\..\..\Ext\VCLStyleUtils\Common;..\..\..\Ext\VCLStyleUtils\DDetours\Source;..\..\..\..\SVGIconImageList\Source;..\..\..\..\SVGIconImageList\Image32\Source;..\..\..\..\IconFontsImageList\Source;..\..\..\..\StyledComponents\Source;$(DCC_UnitSearchPath) + CompanyName=Ethea S.r.l.;FileVersion=3.2.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2024 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.2;Comments=;ProgramID=;FileDescription=;ProductName= + VCLSTYLEUTILS;NO_STYLEDCOMPONENTS;$(DCC_Define) + true + 3 + 2 + + + $(BDS)\bin\default_app.manifest + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + ..\Ethea_vela_multires.ico + PerMonitorV2 + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + $(BDS)\bin\default_app.manifest + ..\Ethea_vela_multires.ico + PerMonitorV2 + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + Debug + true + false + true + + + true + true + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + Debug + + + + MainSource + + +
FormMain
+ dfm +
+ +
FmEdit
+ dfm +
+ +
VCLThemeSelectorForm
+ dfm +
+ +
ImageCollectionDataModule
+ dfm + TDataModule +
+ +
FrmAbout
+
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + + ModernAppDemo.dpr + + + + + + True + True + + + 12 + + + +
diff --git a/Demo/Projects/D12/ModernAppDemo.res b/Demo/Projects/D12/ModernAppDemo.res new file mode 100644 index 0000000..1f95eda Binary files /dev/null and b/Demo/Projects/D12/ModernAppDemo.res differ diff --git a/Demo/Projects/D12/VCLThemeSelectorLauncher.dpr b/Demo/Projects/D12/VCLThemeSelectorLauncher.dpr new file mode 100644 index 0000000..177e114 --- /dev/null +++ b/Demo/Projects/D12/VCLThemeSelectorLauncher.dpr @@ -0,0 +1,40 @@ +{******************************************************************************} +{ VCLThemeSelector Launcher by Carlo Barazzetta } +{ A simple example to launch VCLThemeSelector } +{ } +{ Copyright (c) 2020-2023 (Ethea S.r.l.) } +{ Author: Carlo Barazzetta } +{ https://github.com/EtheaDev/VCLThemeSelector } +{ } +{ Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 } +{ } +{ Unless required by applicable law or agreed to in writing, software } +{ distributed under the License is distributed on an "AS IS" BASIS, } +{ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. } +{ See the License for the specific language governing permissions and } +{ limitations under the License. } +{ } +{******************************************************************************} +program VCLThemeSelectorLauncher; + +uses + Vcl.Forms, + System.SysUtils, + Vcl.Themes, + Vcl.Styles, + LauncherForm in '..\..\Source\LauncherForm.pas' {Launcher}, + CBVCLStylePreviewForm in '..\..\..\Source\CBVCLStylePreviewForm.pas' {CBVCLPreviewForm: TFrame}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.Title := 'VCLThemeSelector Launcher'; + Application.CreateForm(TLauncher, Launcher); + Application.Run; +end. diff --git a/Demo/Projects/D12/VCLThemeSelectorLauncher.dproj b/Demo/Projects/D12/VCLThemeSelectorLauncher.dproj new file mode 100644 index 0000000..04091f4 --- /dev/null +++ b/Demo/Projects/D12/VCLThemeSelectorLauncher.dproj @@ -0,0 +1,979 @@ + + + {E62146CE-311E-4073-BD62-EB2B42112052} + 20.1 + VCL + VCLThemeSelectorLauncher.dpr + True + Release + Win32 + 3 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + "Aqua Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaLightSlate.vsf";Copper|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Copper.vsf;CopperDark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CopperDark.vsf;Coral|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Coral.vsf;Diamond|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Diamond.vsf;Emerald|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Emerald.vsf;Glow|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glow.vsf;"Iceberg Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\IcebergClassico.vsf";Jet|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Jet.vsf;"Lavender Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LavenderClassico.vsf";Radiant|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Radiant.vsf;Sky|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sky.vsf;"Slate Classico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SlateClassico.vsf";Sterling|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Sterling.vsf;"Tablet Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletDark.vsf";"Tablet Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TabletLight.vsf";Vapor|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Vapor.vsf;Windows10|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10.vsf;"Windows10 Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Blue.vsf";"Windows10 Charcoal|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10_Charcoal.vsf";"Windows10 Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Dark.vsf";"Windows10 Green|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Green.vsf";"Windows10 Purple|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Purple.vsf";"Windows10 SlateGray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10SlateGray.vsf";"Windows11 MineShaft|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_MineShaft.vsf";"Windows11 Modern Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Dark.vsf";"Windows11 Modern Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Modern_Light.vsf";"Windows11 Polar Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Polar_Dark.vsf";"Windows11 Polar Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_Polar_Light.vsf";"Windows11 White Smoke|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows11_WhiteSmoke.vsf";Amakrits|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Amakrits.vsf;"Amethyst Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AmethystKamri.vsf";"Aqua Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\AquaGraphite.vsf";Auric|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Auric.vsf;Carbon|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Carbon.vsf;"Charcoal Dark Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CharcoalDarkSlate.vsf";"Cobalt XEMedia|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CobaltXEMedia.vsf";"Cyan Dusk|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanDusk.vsf";"Cyan Night|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CyanNight.vsf";"Emerald Light Slate|VCLSTYLE|$(BDSCOMMONDIR)\Styles\EmeraldLightSlate.vsf";"Golden Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\GoldenGraphite.vsf";Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Light.vsf;Luna|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Luna.vsf;Obsidian|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Obsidian.vsf;"Onyx Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\OnyxBlue.vsf";"Ruby Graphite|VCLSTYLE|$(BDSCOMMONDIR)\Styles\RubyGraphite.vsf";"Sapphire Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SapphireKamri.vsf";Silver|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Silver.vsf;"Smokey Quartz Kamri|VCLSTYLE|$(BDSCOMMONDIR)\Styles\SmokeyQuartzKamri.vsf";"Turquoise Gray|VCLSTYLE|$(BDSCOMMONDIR)\Styles\TurquoiseGray.vsf";Calypso|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Calypso.vsf;"Calypso LE|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CalypsoLE.vsf";"Calypso SE|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CalypsoSE.vsf";"Calypso SLE|VCLSTYLE|$(BDSCOMMONDIR)\Styles\CalypsoSLE.vsf";"Flat UI Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\FlatUILight.vsf";Glossy|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Glossy.vsf;"Lucky Point|VCLSTYLE|$(BDSCOMMONDIR)\Styles\LuckyPoint.vsf";"Material Oxford Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MaterialOxfordBlue.vsf";"Material Oxford Blue SE|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MaterialOxfordBlueSE.vsf";"Material Patterns Blue|VCLSTYLE|$(BDSCOMMONDIR)\Styles\MaterialPatternsBlue.vsf";"Puerto Rico|VCLSTYLE|$(BDSCOMMONDIR)\Styles\PuertoRico.vsf";Stellar|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Stellar.vsf;"Stellar Dark|VCLSTYLE|$(BDSCOMMONDIR)\Styles\StellarDark.vsf";"Wedgewood Light|VCLSTYLE|$(BDSCOMMONDIR)\Styles\WedgewoodLight.vsf";"Windows10 BlackPearl|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10BlackPearl.vsf";"Windows10 Blue Whale|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10BlueWhale.vsf";"Windows10 Blue Whale LE|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10BlueWhaleLE.vsf";"Windows10 Clear Day|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10ClearDay.vsf";"Windows10 Malibu|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Windows10Malibu.vsf";Zircon|VCLSTYLE|$(BDSCOMMONDIR)\Styles\Zircon.vsf;"Zircon SE|VCLSTYLE|$(BDSCOMMONDIR)\Styles\ZirconSE.vsf" + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + VCLThemeSelectorLauncher + .\$(Platform)\$(Config) + ..\..\Bin + 1033 + ..\..\..\Source;$(DCC_UnitSearchPath) + CompanyName=Ethea S.r.l.;FileVersion=3.0.0.0;InternalName=;LegalCopyright=Copyright (c) 2020-2022 - Ethea S.r.l.;LegalTrademarks=;OriginalFilename=;ProductVersion=3.0;Comments=;ProgramID=;FileDescription=;ProductName= + true + 3 + + + $(BDS)\bin\default_app.manifest + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + true + ..\Ethea_vela_multires.ico + PerMonitorV2 + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + $(BDS)\bin\default_app.manifest + ..\Ethea_vela_multires.ico + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + Debug + false + + + true + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + PerMonitorV2 + + + + MainSource + + +
Launcher
+ dfm +
+ +
CBVCLPreviewForm
+ dfm + TFrame +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + + + + + VCLThemeSelectorLauncher.dpr + + + + + + + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 64 + + + classes + 64 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + + + + + + + + + + + + + True + True + + + 12 + + + + +
diff --git a/Demo/Projects/D12/VCLThemeSelectorLauncher.res b/Demo/Projects/D12/VCLThemeSelectorLauncher.res new file mode 100644 index 0000000..05af7c8 Binary files /dev/null and b/Demo/Projects/D12/VCLThemeSelectorLauncher.res differ diff --git a/Demo/Source/DImageCollections.dfm b/Demo/Source/DImageCollections.dfm index 88e1c91..05ff9a7 100644 --- a/Demo/Source/DImageCollections.dfm +++ b/Demo/Source/DImageCollections.dfm @@ -1,5 +1,4 @@ object ImageCollectionDataModule: TImageCollectionDataModule - OldCreateOrder = True Height = 302 Width = 584 object SVGIconImageCollection: TSVGIconImageCollection diff --git a/Demo/Source/DImageCollections.pas b/Demo/Source/DImageCollections.pas index d08a30c..e832abe 100644 --- a/Demo/Source/DImageCollections.pas +++ b/Demo/Source/DImageCollections.pas @@ -3,7 +3,7 @@ { A full example of an HighDPI - VCL Themed enabled application } { See how to select the application Theme using VCLThemeSelector Form } { } -{ Copyright (c) 2020-2023 (Ethea S.r.l.) } +{ Copyright (c) 2020-2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { https://github.com/EtheaDev/VCLThemeSelector } { } diff --git a/Demo/Source/DemoAbout.dfm b/Demo/Source/DemoAbout.dfm new file mode 100644 index 0000000..51c6e8f --- /dev/null +++ b/Demo/Source/DemoAbout.dfm @@ -0,0 +1,156 @@ +object FrmAbout: TFrmAbout + Left = 651 + Top = 323 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + ClientHeight = 311 + ClientWidth = 427 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poMainFormCenter + OnClose = FormClose + OnCreate = FormCreate + DesignSize = ( + 427 + 311) + TextHeight = 13 + object TitleLabel: TLabel + Left = 190 + Top = 8 + Width = 229 + Height = 89 + AutoSize = False + Caption = 'Modern App Demo' + WordWrap = True + end + object SVGIconImage2: TSVGIconImage + Left = 9 + Top = 3 + Width = 175 + Height = 53 + AutoSize = False + SVGText = + ''#13#10''#13#10' '#13#10' '#13#10' '#13#10'' + + #13#10 + end + object Panel1: TPanel + Left = 0 + Top = 260 + Width = 427 + Height = 51 + Align = alBottom + BevelOuter = bvNone + Color = clWindow + ParentBackground = False + TabOrder = 0 + object btnOK: TButton + Left = 267 + Top = 16 + Width = 75 + Height = 25 + Caption = 'CLOSE' + Default = True + TabOrder = 0 + OnClick = btnOKClick + end + object ButtonHelp: TButton + Left = 348 + Top = 16 + Width = 75 + Height = 25 + Caption = 'HELP' + TabOrder = 1 + OnClick = ButtonHelpClick + end + end + object MemoCopyRights: TMemo + Left = 8 + Top = 108 + Width = 414 + Height = 146 + Anchors = [akLeft, akTop, akBottom] + Color = clBtnFace + Lines.Strings = ( + 'Author:' + 'Carlo Barazzetta' + 'https://github.com/EtheaDev/VCLThemeSelector' + 'Copyright '#169' 2022-2024 all rights reserved.' + '' + 'License: this Demo is inspired by TSplitView demo' + + '(original software is Copyright (c) 2015 Embarcadero Technologie' + + 's, Inc.)' + 'and is released under Apache 2.0 license') + ReadOnly = True + ScrollBars = ssVertical + TabOrder = 1 + end +end diff --git a/Demo/Source/DemoAbout.pas b/Demo/Source/DemoAbout.pas new file mode 100644 index 0000000..ad152ac --- /dev/null +++ b/Demo/Source/DemoAbout.pas @@ -0,0 +1,106 @@ +{******************************************************************************} +{ } +{ Markdown Help Viewer: Demo About Form } +{ (Help Viewer and Help Interfaces for Markdown files) } +{ } +{ Copyright (c) 2023-2024 (Ethea S.r.l.) } +{ Author: Carlo Barazzetta } +{ } +{ https://github.com/EtheaDev/MarkdownHelpViewer } +{ } +{******************************************************************************} +{ } +{ Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 } +{ } +{ Unless required by applicable law or agreed to in writing, software } +{ distributed under the License is distributed on an "AS IS" BASIS, } +{ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. } +{ See the License for the specific language governing permissions and } +{ limitations under the License. } +{ } +{******************************************************************************} +unit DemoAbout; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + StdCtrls, ExtCtrls, + {$IFDEF STYLEDCOMPONENTS}Vcl.StyledComponentsHooks,{$ENDIF} + SVGIconImage; + +const + HELP_URL = 'https://github.com/EtheaDev/VCLThemeSelector'; +type + TFrmAbout = class(TForm) + Panel1: TPanel; + btnOK: TButton; + TitleLabel: TLabel; + MemoCopyRights: TMemo; + ButtonHelp: TButton; + SVGIconImage2: TSVGIconImage; + procedure btnOKClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure ButtonHelpClick(Sender: TObject); + private + FTitle: string; + procedure SetTitle(const Value: string); + public + property Title: string read FTitle write SetTitle; + end; + +procedure ShowAboutForm(const ATitle: string); + +implementation + +uses + ShellApi; + +{$R *.dfm} + +procedure ShowAboutForm(const ATitle: string); +var + LFrm: TFrmAbout; +begin + LFrm := TFrmAbout.Create(nil); + try + LFrm.Title := ATitle; + LFrm.ShowModal; + finally + LFrm.Free; + end; +end; + +procedure TFrmAbout.btnOKClick(Sender: TObject); +begin + Close(); +end; + +procedure TFrmAbout.ButtonHelpClick(Sender: TObject); +begin + ShellExecute(Handle, 'open', PChar(HELP_URL), nil, nil, SW_SHOW); +end; + +procedure TFrmAbout.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TFrmAbout.FormCreate(Sender: TObject); +begin + TitleLabel.Font.Height := Round(TitleLabel.Font.Height * 1.6); +end; + +procedure TFrmAbout.SetTitle(const Value: string); +begin + FTitle := Value; + Caption := FTitle; + TitleLabel.Caption := Value; +end; + +end. diff --git a/Demo/Source/EditForm.dfm b/Demo/Source/EditForm.dfm index d0e700c..53ea823 100644 --- a/Demo/Source/EditForm.dfm +++ b/Demo/Source/EditForm.dfm @@ -11,8 +11,7 @@ object FmEdit: TFmEdit OnAfterMonitorDpiChanged = FormAfterMonitorDpiChanged OnClose = FormClose OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 25 + TextHeight = 15 object PageControl1: TPageControl Left = 0 Top = 29 @@ -26,15 +25,15 @@ object FmEdit: TFmEdit object Label1: TLabel Left = 8 Top = 7 - Width = 47 - Height = 25 + Width = 32 + Height = 15 Caption = 'Name' end object Label2: TLabel Left = 271 Top = 7 - Width = 70 - Height = 25 + Width = 47 + Height = 15 Caption = 'Surname' end object NameEdit: TEdit @@ -60,8 +59,8 @@ object FmEdit: TFmEdit Top = 72 Width = 257 Height = 33 - EditLabel.Width = 96 - EditLabel.Height = 25 + EditLabel.Width = 64 + EditLabel.Height = 15 EditLabel.Caption = 'Labeled Edit' TabOrder = 2 Text = 'Text' @@ -221,9 +220,10 @@ object FmEdit: TFmEdit Top = 152 end object SVGIconVirtualImageList: TSVGIconVirtualImageList - Size = 24 ImageCollection = ImageCollectionDataModule.SVGIconImageCollection - Scaled = True + Width = 24 + Height = 24 + Size = 24 Left = 416 Top = 208 end diff --git a/Demo/Source/EditForm.pas b/Demo/Source/EditForm.pas index 1956fc4..270f130 100644 --- a/Demo/Source/EditForm.pas +++ b/Demo/Source/EditForm.pas @@ -46,7 +46,11 @@ interface , SVGIconVirtualImageList //https://github.com/EtheaDev/SVGIconImageList , IconFontsImageListBase //If don't compile you must before download and installa IconFontsImageList components , IconFontsVirtualImageList //https://github.com/EtheaDev/IconFontsImageList - , DImageCollections, Vcl.ToolWin; + , DImageCollections, Vcl.ToolWin + {$IFDEF STYLEDCOMPONENTS} + , Vcl.StyledComponentsHooks + {$ENDIF} + ; type TFmEdit = class(TForm) diff --git a/Demo/Source/LauncherForm.dfm b/Demo/Source/LauncherForm.dfm index 4accd91..9f1b66e 100644 --- a/Demo/Source/LauncherForm.dfm +++ b/Demo/Source/LauncherForm.dfm @@ -15,921 +15,669 @@ object Launcher: TLauncher Position = poScreenCenter PixelsPerInch = 96 TextHeight = 13 - object Image1: TImage + object EtheaImage: TImage Left = 184 Top = 16 Width = 145 Height = 53 Picture.Data = { - 0954506E67496D61676589504E470D0A1A0A0000000D49484452000001380000 - 005E0806000000B7A508990000000473424954080808087C0864880000000970 - 48597300000B1200000B1201D2DD7EFC00000016744558744372656174696F6E - 2054696D650030352F31392F30357CE75A720000002574455874536F66747761 - 7265004D6163726F6D656469612046697265776F726B73204D58203230303487 - 76ACCF000007BD70725657789CED5B7B6C1445189FBBEE75B7DBD77659DA52A8 - 8542798B90466B3408D222D1148AC100F111396DAF34F61568A3A91002025108 - 0FD10047C04645FD0342688882B1A11885A09CD2AA18F8A702A2FCA178151BE0 - 14A8F3CDECFB71776D941EC9FEEE666F76E7F9CD6FBE6FBED9DDFBFAF6D1306A - 4413FA3042F803871009C1505F101F83A1402814C0C760301008160743C5C160 - 7120541C08A26010E16320808A835F8E0D795B4F7557CEFCE4E97BDAD95DE39E - 295DDCB178D6C4CE73B373BE6FDBF6505B88B975F6D29ABFD65EB9F6FADE5E7F - FB84B28E09E35F9D2D8ED9F044614B75C5F5C259A37B47747FD47C3D5CDB3BB1 - 2C6F5566C9C7C737AF7EE77279E78DCD05916D33226F3F1FD9BE2AB2B335B2AB - 23B2FBA74891E0D9E92D2D18F564F79EF09643E19F3BC3FED78A2E4C496EF6B7 - CC2FBFB7B7A4A7F9D90F93D7862E2CEA797905E7FFFDC7AE155D3F1485B79586 - 435B87CC19BBE1E6E463AF9C1582D9574756BC94BB65F465A165D6F2FC8355F3 - B23EE839238C093CF2E7BEBD2B0FAF6B3F9475624D5976F68CE7C6AD1ADA59D3 - B2A7247D520AFF79B134E774DAE3A71142AB71E018846E2621021C45020E5938 - A4217AD29A897F3D08F1F4071D691B8524390E635E448BA2F10DF968E674D6B7 - F4B76412900372EFCB46B9537198964DCE4F5ECA41277FC1E1D71C747E5DEBD5 - 48C55261DF9B1C9A34EED039E84F01C925C9BD7A1435A326D48096A12AA7065C - B81874B02C075F1C63684CF7F5AAE95E353FE3949F5C5113E3854FA4C00AC4E3 - 1F49D42089B82286C6352565E9051C4B35E6C75958F9D4D8014D2FC18A5418DB - E7E5D25E2D2AAAF5326AFF18B50047CE05537E9A85930BA7C72DBE973485BF1E - A53E4917B01C5E1A37CA2F11F979435E22BF2E1E1F38A5F7567968358CBDFC22 - 8A22BF28F2F1B6AF8AECA1A5254360C9F84B06465972AE8CBF2EBF4F499368F7 - E201230A822864E0A3174A0B702A0312189BF9A7975F10B2045206BEB406B97C - 7F54C0082A5586722AF3AF8DBFC6BF038CE507D4BE28AA33D867969F55E77FD4 - 0AB40E93B55ABF5EC66A9FF0AB16A67C26EBDA97C4A8043343FA3503ADED1BE4 - 8FC2BF13845819A222D5C85F92B3FE3B81F630D6383B81CA9FA99C46D17F27D0 - 22DA0CACE967FB92BE34E3ACFF8EC82065982839087C3CCFF1BC7CD0B52FEA2D - B86AFFD9CC0C3E836775F2D32BF8939E8A3F69B8478C40A2427C36D06C3D2952 - 8DA3A7DA7F6A173883FD578CA7C5FEC7501102D6D0BE517E1BFE79D9AE69FA1F - C5FECB79A322DDB07AA9F29BF857ED3F4F229C4EFFA3D97F3808B6CDEA2A7696 - 5FB2EABF22BFD3FA2779CDF2479F81A6DEC7E09FA1D7A594B8D67F39A83310D8 - A47B9265784F42C1E2499F82E77E0A568014F3FCD7F857ED3FE4E7799F7EFEEB - CBF3E022628DE2693ED3A0F603F6FA6FB6FF51F51F51DD9206B40A3BF1AF20B6 - FD536B893103ED61E27F00F61F20AB4D4C1B68452CFB1F73FDA7A0C506B00AC7 - 67FF634E2D3EAE6172286867FF15C4C7BF326EB00A4F29797FE1EE6FBFCB6ACD - 404B769C587F2D7A4127FBAF203EFE152FC47E06FA78BC50E1D54B7754D3E25F - FFD974432DA619C19B15C79A666B2B9DECBF26BFDEFFB7ABC1D071BB19E8B536 - 2FAABD8F5FFF4DED9B2515948C7E548F1AF429A40AE34E07F63F144EF65F93DF - C1FE9B759DA5D76DFC4041B4C228BF8DFDD7B76F3BFE66F9E9C849D69D8869E5 - A3414D4DB7F5FF75FCD3ADB947DBFF9B575005190E3380A33729943B17F8A0BF - 65E1A3D775B9218F4E2C5A06C792F5E559EB383324B15F77435CFC2F00DFA70C - 3563EFC78FFD1FFF6077C7852DF69F657C6077B73265951BCBBBB2363672E881 - B6BC24EDDEBAE2C72E4455A816DBD417F1DEB2099D4723F16F3D3EBE40CE5D0C - 3E804BB0FC9786ED3F70E00D6EF6A7873F5BDF72F4E21558662897609681CBF9 - 582B1B306B55383419D749170901E01234EFDDFC23D2FD9E6973B79FABEDF8AA - 3A2F2878CCCFBCE662FE2A896E82768E4401C22CE8A91FD5E1EBCB5CDB3BC800 - 2EC1B7327399B4D5CC6599BC56826DADC31F3FAA2656B60A5F594E186D22E9EE - 7A3A58002E81A92DA6F512D65023978F91E7D075842DD7C22622804BD8D399B9 - 84D71DE82B0FB0BDF278A2D5E12231005C0E41562EC18F75B9BCBB005C8215BD - B8A9A9EEC14D5F94EF5FD2937270D1F1459A1FABD8D8A7C8DEA341F67C1AF16E - B3DE5D1F130AC0E55064E512749272790F527C9F2AE2E32CC39CB6E0D020FB3D - 8D64AF524DFC58EA13B9181C0097F0569EF93D3C781790DE7003BD4C726DEC5D - 00E0320759EFFBC0333FF39EA486EC23EBB17652ADACC15A4977978D3A3DF563 - EB5B49CE5DDC590097B9C8CA25783C462EADF7F05C1E130BC0E53064E512ECAB - 91CB52F28CCB8FF9ECDFBB3E2EEE1480CB3C645D2FDDF7D6EF3EB49FF2F9C0B1 - 3173197D4FE22211015C026F662E35DF47D99394620EEB64EFA7C9B5B30908E0 - 1278F39EF9E6CCEE29C385B776602E27470EC0B31323970B64BFA78A783E2E12 - 0FA1CB856838FE5DB0329C56F97757D67B4908DD28B8F247BCF70A5C240E80CB - 11C8CAA5D5F759489E512ED7ED4002385EEBF29930002EF391954B6D4F027A09 - DED13CB25E6A77ED2AC9B368F7F957E200B804B6CC5CC29B749A5E029756BDA4 - 6F19B8DC260A80CB02393EC6DBCD1E133834753AEBE30E16A2DB7D7D7D70BDF7 - E14292EEA17FDD46B7F0754873618F7F3C2CD727F42118436E6A211AECFEB870 - F15FE05F1B43500D67C55E34000000486D6B4246FADECAFE0000000400000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000029A433A1 - 00001BFC6D6B5453789CED5D5B73DBC692C6E6C4B125DBB29D64731EF645555B - 5BFB941C5C7979144551524C490C41D9725E5C2048D8DCC8528E6E89C3C27F3D - 3F65BB7B0620301880004491920FCCB286C46080C1D7DDDF74F7CC9007AF5B37 - D34E7F7B32D5FCFE2F879369DDA8D7B551D33FE96E7B53D57FC78AB7FB6D6F6A - 68BABFB73FF0A64DD3EFEFD8DEB4AEFB7DFB7802F5AD5DB88247FFFC5EB77B33 - 6DF5E0CFF6D6E072AAAC2943C555DE2B3D65AC9CC1BB8972EAEF1F1E40CDDFA1 - E60C6A34E547A89D287FC219A7CAA6B20547AFE0F38FF0EE144A47B9849A91DF - 6F1F0DF1665B8774CF2D7B3235C60DBFD5DEC7EEB70E0EA00F50C061C76FD93B - 7492DDA13A7B8F8A56970EB65E53B17DC82FB0D3A1CFFD019DD469B1A24F070F - D941BB3799366B7E6BD0A2A30376F581CD6E72C0AEC78AFDAD21B438C45EA97E - FB489B4C1B50E87899F6914145070EEA50E8AC30B0F07361B62EC36C99C8A8B7 - 4446BD2B649E726476950BD098DF958F5077A58C33B1311936E30C6C542936AE - 1BC346CDD01AB7C1B031F4C27AA3990C1E87C1E330781A0C9E0683A7E1DBBD5F - E12E43DFB679D93B02D42C070EF037F9007CC501DC56CEC1ECCE0146303A30C7 - E8995130E1C284A66E65A1E9E44053D0B42C34054D7316AB690461AD2681D0EE - B5588DCDCA28A44F38A42D62AA89E272405F70406D00D3035DDC54FAF0EE1A8E - 8DE6F299144BCD3317CB68865B92D19CA2769B86D1B304465DA83D2B63B7223A - B974ED61A0B307C72FC8184BA39387D50A307E016CD4BBC1E645029B5B5AD782 - C7C4E52114507A9B10FA484F1FC728521343320B23FD9E3290B670945E4A516A - 93360D6128CCB6B6FB8A93BE709C36A43871FB2B8ED1CA19294B932C8690C510 - B26E656F7B503ACA8DF2F9418EF85ADC17B5184C1683C96130390C26B9A799D7 - E006A0461370DC1FAAC1190B37B8B510A773708DAE96E83466BAE0AE59D22F52 - 19342A834665D0A80C1A9541A3C6A079C6A1D902C5B88011BE057FAF11240ED0 - 130E50BE110D451AC1A7663280A87E2E400D3303208AED22108D6E39F6EB0C21 - 9D216432844C8690C9023E146B2CE2C3C7A070050E14C130889B07A05E7F8292 - 5DB3C02F1B49A90D6603A9353994FA302B7816A12C143E9706536FE603738383 - B90D0A774AC9A90F61BAE1B360B5A8949FE0FDB9729E9DA0E166AB19B9DD514D - 358BDBADA53224891010492F2B7A8E5BAEDEC88DA5D1E071B4A18D0A63976DD0 - F51183AEE132E4C60B722BD42CB7422F4976F9202B0BD02F60A7133C2B069069 - 3180B4A1A05B41F64F6518B959868A6A315FB788102338D5F8A0404A75074025 - 752B34D4B206DA87DA2119E859A69A69CDC5EAD962930D77A367DF708CDEC258 - 702545A72EA898E07564E562B0690C1F7DE5F8507E8F92A8AD04E93F0DF1FA48 - B18E0B1AE38469D3409B7A445957F3F3F171BC987B368FEFBD80EF7114CCA951 - A14572C86824CD3772163149B4443B1843D124D9601ABC415CD9681ABCE9F331 - 283FC48FE349C222F012D3CDF58235DD2D81EF988FA7D81801A6DCF44201EE03 - AEFA78CC3013A92E1BB3326E9DDC9429BF9F0E9DAB1727BBD0A9B374061DC330 - 1F76DA38B741878AA77B252C7A9B2043272E3B72172D1A9F45C281026E75B738 - 6E269FFD70B8491B23F34E6C3A3ECCB682B91089E1AE8548E208F299C6D232B1 - 593C34A310A1644E360F25EA0DEEA55050921340439701586300D61880350620 - 830BDF0C3D8114718CE9EF2534321DC7C7A1B7E228BFCD498D34188A4D8622B9 - 681114D5DBA268321499B14A61C43941C451CFC0D1E2690070AB588AA4C991E4 - BA58E3CA5833D3C00C67E602303D79E6295D2907343DEC2ABF1531EC5C5A99CF - 7B96AB25D1229AF570E123099935B16100643F3A66B3513C5D3D03C2ECD0120D - 9CA61B60AE4E505186EAD962A75E72E60DD4C52CD590C3594B4CB9B7388A762B - 39C59E0D56348B7E0116BDA91CF07763E5228F7517D146CD1AE7C95FC94799BB - 048FA5AFD27DED6CECF62866F9C863978FE4755F481727907B42B6ACC6B89139 - 35096E948671E43BE64DB238778A5D7EA882A9886E0851BAA289219D2BCDEEE9 - 1911DDCC812EE1CDDC999E45878A992B1398ADD618C7F0FC86E37924596ED5A2 - B9090CEFE6CD4E3865A79691F3E70167080370306004A11DC92831FC6A39DC67 - 3C4A33141C3EBDC146081A0FB66858233C71090C8E0F269614BECEC5F06918BD - E1DC8EC36732B2A9CE91067179601C8DB39256AE238D43C2102E33259AE2C698 - DC8D31199286CB90A4D2A09290A4D137B9AEA87FC4C9B0D7E7E8F619DA7D3B19 - F265A9A80DB0A2BB83EB1F2EF38C2341BE399807D19CF16DE741B89A5A829AC6 - 0D1CC7660457CB00B766160337004EF342F78500D4E7ABE777F24099CF94E433 - FA7A49A3CFE5D270AFDB7384F43D87D31CC66CDE94D97C002711A7C1AD9CEB30 - 4D73F3D93728E3F321CC41EC3340ED3EE703FE1981D6BCDC3CF02AC2A5186E23 - C44BE104CCA0E4E0049D6BADAB0BA430E2B90996439A430BA0DD52A85DBE6CD3 - E504EB36C4E886D8207823270AF626486CA05C48402810965A9370C6732E8AB7 - 04F398673B688167A9A0486F489344E48DCE230F4CF7148C898C2043849EECAD - 6222431613D192CEB4459FC5602C1205799C82BD38057BCE821C85DB7AA37227 - 419721C8FCA9A8DE86C1A43803985F15F32D9911A6A1439F3EDF928702CA1884 - 932125909B71AB7CA5741577984C9FE58D284E0ADEF48F22439DCA1858588C1C - E43EFADC1538573E251C857FC220E7D03097ED285865E7BD0A40CB86B3882F5B - 208B0E439F349384C73BFC78871D27273698DDD7EA1CD33A23D1605023B76B8F - 916A3E4C039B7F477866DB7C9C3773CDFB0478E6D96EC0DD84A174718EE02448 - 6D3ECDE74ACBCBC5B3C4881BE1682762FA74F882D000B71C9C291ECE35E2CE1F - 198C9A6532186B71EA740A30674DAA96AA542D29A35966094F30F8C4376DE87C - F4A1D2A09259718D9BB1C895F3758EAD0ACBB6604366C1C2ECBFDC84D5FC2A47 - BC9BC46A68CECF05873A275830122D33619D7BFAF886F9A610B633DF14DFF402 - 0CEDC07EFB0157B228351FA6C1747707DD7F19A24333E68406DA572432CD3462 - C250966397C74E1C534386A9DB907BA04D9E2069F2B98A666DC68AFD20F5DB9A - B161900A4E594F760C809DD1407E4D7167E0E63FE2501A4ABBC464633DCF5ABC - 3C392623EE46C66104E297C44CF9E27BBD21C994ECB121BB084EEB339C2010DA - 2537E88F6CC4A4D69C6FF962009936DF9C5DA9356B6399E6692B81EC088E5F51 - F277DE5698454066E58FCD05C89AF307DD605251182D1604581072E3DA9409ED - AA2D1672CB13C199E825E6BF0C69D0DD6CC4836E4F6AA7F27CA6302DEBCA954E - 4677E24EC959B8CDF92E9AE2A0F10551AF5BCCAD113CED79E03F0FE3C1731AA9 - 3F02F07C8950B6CE2E6E817B163336A40B1B31BA8F20AE1749CEA5692DF30FED - A48F330FC18D08827F526A629362C7C218D2B29E024B94431CCDF99E62E9BDCF - E80AE6D8DD4BE1A05B972C23A079343A10BC0932733DEE8CE323B2C450C43B17 - 1344F3A4F00397C21B4A86BAB42DEA92B6E92303E3DEE0CD19C114A713B65C26 - AF624BD924AED8C2F84509A42497141AF30D9EF930F8060E28894BB878F85C09 - 7348B97062313B492B92456DC493A8053DAC6761D4F4915627E1F4DF38B18A55 - 04BF5676624ACB3FFB19E6498C5AF1F535419E64DE6EF7BD204BB797CCD2E51D - 103B00192EA02E9A832E3120E6F2C0682157643C74E40EC538FFCC89E8FD4BC9 - 3950DA7E9849E64193DFE9B66FA69DE82E5C8F80B5296137896C51F208D043FA - C2804F04F5716A0D87B6C31EADC3B4AAC3ACB2B3437AD4E9B7E9947E9FD5EDB1 - E2040BBF138DE55887F88668CCBF085D8AD61CA7D694EB92CEBA04C56ED8A357 - D01F37FC028A11E7C6ABC8F7295C869E81CB674250EF5CE53718D582AFABE8EC - BE01E00FB7D9C5F7E1FD6E0FBF82A5C3BE6245A57F7EA44A0BAAF8F7AF60DD3B - AC536F7F1DADE425822AFCD789AE58F0F8BAAC09E57EAFE9F945B9F5397A4955 - 8AD694939BC1E46654722B22B70D2EB73E20E3C2D362F6E48320BD8D5046B273 - 8E739C534EA20E93A85349B48844D7434BC4C42B7AD6D128DB8B246583BAE38C - BA72923399E4CC4A72656C9149E08ABCF18B002FC116E5E71CE738E756ECAA69 - 95488B8874E65B39F4BD67B3C5CA1E9FB00B8E1FA71C2F272E8B89CBAAA45546 - 5A3D7222DDC85E748FE7DA82E3C729C7CB49ABCEA455AFA455465A1D426414E2 - 11486576FC38E57839693598B41A95B48A48EB3997D60EDF97FA3BF15BD43979 - CEE5233BE378EE19E564D964B26C56B22C22CBC75C962D5A1A71194E5E7BE1AE - B08BD0EAC4A3E5E4E43239B9959C8AC8692D0CEED056D8D7EF8801F9AC460CC8 - 6735E5643662321B55322B33AABDA54572E3C4A8363B7E9C72BC9CB4C64C5AE3 - 4A5A6582EDDE2CC91CFAF8EBA17718AD3BCEA82B27398F49CE8B75EC59A84663 - 65A8B449141F29071E4C34046A23D61FCFA92FD7498D677AB16C6B11443B6D3D - F6C9887D32639F067855DFDFA50476A5A6D96A5A0AA0971180AEE1AC3EED9778 - 47F3506C15CB0C2643DAB7A6AA0EF568DFD49FACD903663DBB4B1D1730BCAB9B - AC0AE05702C0116883636910FF34EBC450D51D27EDF9471E54C72B9B62CB4C98 - 177CA35541BDC1A1C69A217D1FCE15EDFC1141AEC9FB6534D016A30FA73766B5 - 7AD3A9C76B4D6B563BAC896D6B594DEB194D35B147A2E81E5EF757A5106B1185 - 40D71647B3991A98B2DE34EB664D130CC0080D60386AB856BCB211D6D65C7DAC - D5A40F32F64643779414E56ABAB0EAB16687D639D0543E4DDAEFD2F6056835CF - 4675D570E37D8B2AB9366CD6B5619A926B63D333AD1425AF396357D5D2943C79 - 614DEC512E1BBDD7DD5FB58DDAF4157837828D4A716C1A4D7008D27034757CA5 - E138B486C6504BC391FEA5E1381AE34B0A4243C5574E35B8D7DD5F951A3C0DD5 - E0773EA18CDF6CFA699E2A247D3FC0325A298E6B66645C7332063DFC2FB0ECEC - B262A5267627971EDCDFBEAF4A095E7025C0D589E7B410EE4A39E21BE13FCC8F - D8F4A6EA58CD9487AB4B79FA16D759154841481B06B2B3E0761E4041BC99D5AB - 3C00E5BBCEAA005AE70045BEC411EAE61249923B67A48CF498B0C690596B3511 - 8E883962C3BA5059B7A248D6E40E1B36F3EAB9B9E41E777FD58AC0721AC93830 - 45B7D3FBC3B310396D24CF7556CDB40C9AD0019F9791C81ABA223161EA1883AD - 6421ED5DDD6411C9DF9D4EFB66BAD389CC6B8E09E47D5A968C714C0BFEDED077 - C506F362E37061B2A35CF93B3DFB66DADEDEC13FAFA1FE7F21FEF94D1942FD84 - 0639E4F20BCEE547D0F254F9ACB0EF30F904DED03909F3028EED281EEDAB45EF - E818CE3F642BC6FDF6F61BCA7ED8F00997F35F429B4DBE4788F2CCCAB9EF47EE - FF2276A57D389F6D0798F05F4861D7FB9AFB60E358DBA7B1B607F4E51FFB4A9B - B7F91F65AAD4A9B6A668F052155DF911DEBB7004DFE1B111FDDE5D038ED5A146 - A5974567D6E1AF0635F8C98FDD756D8631E0F2197D447EC7FF50D4D899EB9133 - DFD2A2F02BE5233FF72BEC51ECECE791B383C553176CD808DBD4154B68B30357 - 057784BE1C8236DE43492B0C52FAF49C7E05F103C93AF86DAC336A7719B63062 - 2D9ED1D77B5D8296A49D2FDE61F6D5606DFE3D370EAD500970FA1B4943C46AD6 - 2AEC61E47C4378F235E8CD29A552C673A4F02272E6012D0ABDE23F0732A1002F - 68A509ADD866C0984DCDC88BB77AACFC37E0EF71CD89DF77833652FFC1890CAD - 709468BF06EDD5C8CB503C01CB3DB2C5EC2B7891977885A77485536ED1B2FE47 - 5A0B2D6DDA0732A2A790B58CF43C61D3EC070AD0FE3BE40F26EF2D3E7B52236C - D2E53F401243E5FF9895F3B68FA0B798B1B94C30428BA47645F66393E65DA56A - C6AB60772C3FF3225563C5966B614BD1AEE94C24EA121CDD279EFC507174C5D1 - 5F3C475B1547571CFD80387A2DE4E86B92036A7EC5D3154F7FE93C5DAB78BAE2 - E907C8D3C899FCEB312A9EAE78FA8BE76991712B9EAE78FA3EF3F4B7499EE6E7 - D3B20B85FD286DC5DC15737FE9CCAD57CC5D31F70362EE75CEDCBF9205FC0AF7 - FE003A5C3175C5D45F3A539B1553574CFD80983AC8854498BAE2E98AA7BF789E - 362A9EAE78FADEF1B4449FEED51ABD315FA0FCA573B45671F43DE0E86A8D5EC5 - D10F91A357BB46AFE2E88AA3AB357A1547571C7DBFD7E8553C5DF174B546AFE2 - E98AA7EFF71ABD8AA72B9EAED6E8553C5DF1F4435BA3573177C5DCD51ABD8AB9 - 2BE6BEEF6BF42AA6AE98BA5AA3573175C5D4F77B8D5EC5D3154F576BF42A9EFE - 77E6E9365C1FB530826AF825858CA7673FDEF13E76D67238FB39B445A9E1D971 - C67696C8D80E705C5331E13582EB3516C2D8D99A2CEAA12344E4EBB1D6F35665 - 47CF655F3239631853E087E8B9697A57CF7892244F1A80805558FF82F5479CDF - 2B7D5BAABED58439D6C5E95BA3B0BEA157A2DF5AE336B8C6454701D1377DC275 - 0E33BEC0E24BD3BA97B4CA8E8DFD374AB07F047F69F186C68A2FD93B3504DD49 - F74EC5ACE4C3F54DC5E758B56F5AAD4D7E88BEA926D8F697E29B1661EA3EDC77 - 424FB51CA67E9560EA4B92D2297DFED2B95AF4412BAEAEB8BAE2EA7FE73CC28B - 188E9B7465F6AB62A791586E3DB2677B56B71CC67E06B6774D328AEFCA5E663C - A7D32F223680E12092012D464ED6E1A5863C8DC7F01C4432D0980631BB475120 - B2B55F98516B02AFCC673B7136292F4FA4E9F9DD68A1594A0B9FC5B470D5B9AC - 55E9A2C53D018F7C00F414EAF032E1FCF2BA5834976549B8F0E1E6B29EC17923 - E0F06BBAFE66E4F9835F57DB222B426FB11B5AD1E512F96FC2EF8923255AC775 - C24F9DAF37287713EA3DF22735D21B0D7A6B267CCD06311BCA19F50B356B04FF - 71FC6F0A7AB341DE334890F8F93DB7F7F7F0F983324CF578E26D3E72CF2ADEEA - 6F70672BC17E239ED1CB77A7E791F3F3DF650DEA11FF4FF057BCBE96F3E9C7A9 - 1E6ED6D3CF5AE57FFAF43BA53D7DF65DC4A78F5E3FFEF42F539EFE8312FC1E69 - 9A5F938680D852D6BF0D090AF3EEF8428A449EBB3D8DA191BC8FE895CB11192A - EC67A1E4BD13719CF530DE4ED6BFE71234B2EFB621C562FE9DD6634888F788E3 - F05FC03F2D38CB231E6463E47B60BC0BE24E8C6BB09F57214BE2C8F85778B547 - C4479BF8B7204FFF0077BD08E334EE1929FF10BD2BE5277C2D89BDFF4EDEEB27 - F216CEE949AF947F49FA74CE7B558CD30D606764E5218DF0CC036882F4B4982F - 80F52875E4F431717A9362DC1148B991C81FBC220F4744F13D3D15EAE959E89F - 26EDCC159E2A4FAB5569CB7AE487DD36B9D44F97A415DF52168AB599D0EF399F - 71FFC20DFB3416B0BD4B9F7244BA6092DFE45254E3508EA929F894A85B4E2C0F - 45313DCD728D053D7A941ACFCBE28CC780E6EF148B23B69F3372316B917C03EA - D628CE758574600D8E20F3DE90962F93179E44EE7C7BCB1F87966FDCC2F2D799 - B743D677CEE39B4B7FB70770EEF60637D393EE36FE00E03B56F8B363BA65B1A3 - F826794DFC91C4455EF3D96C245EE8759F06E3DA42AFBA2A7E7BA5ECD1B3FC03 - 2222CC335D9366E27D90A3973B060EE89E0ECFF4FD4BE8D35FBC4F8BB0845168 - 09FAAD2CE123D783F9E317FAB3497CF3B47C4978141F679F418B533A77365AC4 - 75469E7F5C95267E13DD81B5249D7B1CDBF535293C1EEA341E6A5C4F7EA45CCB - 48A94962E52027322F565E15FA6BD19CC552ED7E5DC85C94B1EE78D6420FB316 - 5695B5A8B21655D6A2CA5ADCFBACC5236050DC873C0E19F9258FFE83D16993C7 - 7E5B70E5DF317BBDB4556BF17E4CF8ACC626790F9E30AB916796AC096CAB934F - E51057E30A3893D63F46B9DAA2B9887CAB19962795754297CD3B05EB169695E3 - 7F0A2D701DED0DCD2C0DA9DDA8B0D7E2D13A1195A4E011D61EBCB72233432AE1 - 8FB17ADEB1F2AEF0FF3A9CFB61E8CF3E2F07715CA1E1C1D9EECC772F8CB60675 - 1EF19F19CEA704B17839CF645968BF54766916E992AEE090CDF33396EA21FE67 - 520A34EB1BEFDBEDFD4635F41B8D5B48E77B1A4DA23D0BC6940BF23A307B36C1 - FA30CB6742CFD11ED35FB595C87F83300B62D5D5C8FE07A9EC3F110B4673A265 - A46F81F41A34A6D4A0DF3562428FC76F2659A947394E1C855C38BB4959811AF9 - 490D3AC351C47CE6026513F32B3F452411D5274798BBFE0A7B29E8635ADB9192 - B60E5FCC908A9AF14CF955C16F4EF9B422AD7825D58ABF789FCAE84293EFC240 - E9D7C25C904E3C8D3B3486A40BA82D35CA800F490F3CCA89EB943D42FF6419BA - F0327CCEB81E88F9A0AFA04F6274226BF94F28839CDBE7B0AD3E5707366855EE - 8838EE74457AF0BD540F2E22FD2A972D1CD1A86DD03A10937C549DAED9206DC0 - 99338B9801D9DF236E18913F65D248E1D1C8E02E451BBE8D3D6D518DF82EB575 - 59AD580BF5609390BD58DA9AEDEFE05880EB84DD99D66D2FD27FD3EFB5FFF698 - AF6ABAA075C2672157C78E2E5D2EDF4BE5C29ED655D8EC24E5F50B4A06D7A9E9 - F4DFE2D9D72631783D21996085DB7D938C787459F9D6DEADB17749D7316AC435 - AF2C8664BB0F923164FD5E62FF029039A39D06AC66335C33BBCCF12BB8ABCB72 - 0C347A8DC8AFC01CC32432E7C58E5F91B7F6A1749E3CCE66E67D63B3D8C8741D - 93CF7BCACE5DD2FEF445C45059D7978D9C963072FE90D1FE2A6B1F8B905F3AA4 - 19649C830BD87A8B7CCACD59CD923DAA2DD0AF0F84EE19959B619C80E3E7501A - 6BBD2489E0FCFD59D8EB7C38CED7D931691FAE64462FDCA57CA14ABED78F5433 - E4AB4E0CB8B646111D5B738FFEF898BC7AF4D17C41FAB2FE5EF3329C2F0D7574 - B933A58F15B6332EBEAE3DD829BF477D395F923E7C1DECAB58E23AA365EF778B - AF275FFC37E7D4126DE6EF78D38416F376BCA16F5E74178838DF52ED7963B348 - D59EB72F67CF5B43D0BEFCBB8DE42C1C7CAFD92131288EF9CB5A0D5A31F12298 - B8F8DEE3BB67E2E4379F545C5C71F197C7C5F9777E8A7BEFBEA5D9F6CF14076F - 2B6CDFE767786FF2A7C61D773B21431F503F8691ECEFB2668B93772EC6B79861 - D66896A9C1F76778B4277318CBABD4686D84413350F8977DC67244C796935729 - 229317C24CE28010C53B2E533EF37AB16C59E1DAD1FB27ABE8388AB33A8C8196 - 29A7AC1E2C57464D5A1DB01C197D472BBB260ACBD1DB80EB84BFC3711639382A - A527B3D5474BDE9122DEF72E24520739D469EEAD4E7370F8B7463EA64579CB3B - 94887F608348FCDED6E066DADAEE4EA69EA7D23FBFC33E698EA50E1B7EA7174A - EE096554D97718A20447E148E4256285E3D49A7EFB683885BB0C5A132C763A54 - D80793A90E9F0693A9E677FA6D3AA5DF67757BAC38C1C21F9CB46EA6ECC68FF8 - 4F9BFCA67C86C7797D337DDB83736AAABFC7CB81FD2B5C0F9E69B00F4F31D86F - 4FA60D55ADD775046070D259CC85FC9D93DECDB47330C0FE6D77A9D3BD2E3D49 - 6F8B40EE1EB2637D6CE6F70687F8B0BD2E00A1F95BBD2E2B6C2AB6B659D1A6C2 - 86AB8CE1CC36B6DFEDD21D7EEEFD32995A58DAECE3112B7A88D96E671F8B9F6D - 3CC78172877D1CE0E57EB65B846BB74797B3BBF8A96B1F63D16645D726E80FDF - 516FBAB68D4FB13738C0067B8301E97E9B340EADE50F2A69C5A47FD2A1EE9C1C - 505F07FD83216B89C5497B0B8BC303F3660A7F00529F0A8F151A2B54A180B283 - E78386583E15A0B983AD2E5DBFF7964E393884530E0EDBD031B096EE3B80BBBB - F50E54FAF52E3EC7719F3D63B8F67FB6021FD7986A680578C2C13609A1BD4F8F - BDDD459DDFC16B6DBFC6EA9DEE01A8CAC1EECDF4E4A8437B9E5811DF01454AA3 - 190DA635D698694D23AA3475CFB1BCBACFDF8F8635C30F94A969E177390DB640 - 5FF0DF9B7D78B037AC3FF060E23369FC999E269EE92DBC1FB2E7D2D873A9D9CF - 95B899BFDB6FDF4C778F4EF0A1768FDE5161C327A306E53B56729250F1052DDA - 40CABB6DBAD96EFB356313FC0F9FF6E016BBED3778A3239B8CFEC8DE22E1FD3F - E20158A82D591C60000000C16D6B4253789C5D4ECB0E823010ECD5BFF0130083 - E051CAC386AD1AA811BC81B14913130F26BD6CF6DF6D013D387B98C9EECC6664 - 9D592C1B6E30A40EB8C680FA99AE22D718C55B3A08A5314C226A8A56A3E7F662 - 9C21AB5C4A2F20E8C122EC7B8B595D8DEE7C69C0131CE51BD98A0133CCB2077B - BA79B1350B49B69381830BF2C2A779ED1705488B425616BB5339159AE9AFDEB9 - 739D83800E5E0C7752EDCD601A9012EE9512B9C144EFA234A445C7C9387CF510 - 6DB63F1DA73151AEF61669C1073ECC5DD14054032D00000AB56D6B4254FACECA - FE007F57BA000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000789CED9D8D91DB380C4653481A492129248DA490149246 - 52486E909B77F3EE0B48C959AF1DDB78339ED5EA87A40812A20090FAF9731886 - 611886611886611886617849BE7FFFFEDBEFC78F1FFF1DBB27558E7B97E1D9F9 - F0E1C36FBFAF5FBFFEAAF7DABE67FD5739AA0CC3FB81BCCFE2F6F096FEB9BBB6 - 8ED56F277FAE47570D7B3E7EFCD8D6D54AFEEEFF6C7FFAF4E9D7DF6FDFBEFDFC - F2E5CB7FFAA2F617B5AFF2292A2FCEE518E7914EFD5CAEDACFB1DA6FF993769D - 5B695A5FD5B161CF4ACE9DFE2F3AF97FFEFCF9D736F54FFF2DB9940C90393262 - 3FE754FEC81499D7FE6C17F46BCE253FB713DA02E51BF6ECE45F32F2F8AFE8E4 - CF31E4427FB50C9173B515F759E4C735E03EBE3A863E00CA633D31ECD9C9FFAC - FE4FF977EF0CE879E45E7FAB2D20D7DAB62CFDCC58C9DF7A00E8FB959E75C3D0 - 734DF923D792555DEB3E485FF798C079F85992C776BA21DB89F58CE55F6DC469 - 0CFF5275E2FE73B41F5DCD589C6D1FA75F67FB295959DE290FFA6DE65DD7792C - 97B2AC6DDA207A8631C9EA9A61188661188661784518C7DF9347B0D7A7FFF36F - 2FEF59F2DDFA1E5CEA6BBA36F5AE7884CBE8ED6A07CFE667489DF096F6BEBB96 - F7F39DFCCFD8F18F7C86799EF775BEC42EBD95FCFF86FEF3165CFEF4B361CFC3 - A68E4D26FD77E9DBC317E46BE9239DCF90FA243FCE5DF9034DE76FA48C5C8FFD - C8BE2CDB2FEDDFDAA597F2B71FE251DB40CADF7E361F733F297D89CE2CB9201B - 6CBEECE79CF40BD867582023EC7605E751E7B40F93F667B71DDA0CF7429E9916 - F2EEECD9995ECADF75F4A8E381AEFF037568BDE0BE6D3F8E7D7B5D8CD02E7EC8 - 7DD0765FF7FF4A3BEB78E76FCC674AF6EBF4595D92DEB3EB7F40B6E9032EECAB - 2999E16F717F4396FCBF933F7DDF3E40C7FB589FC0CEDF98F2272DFC00E4D3C9 - FF28BD57913FCFF6FA9BB2B1BC8BF4C5DB17E7FADEE906F489DB09BAC5BA1876 - FEC694BFCFEBE44F9CCA99F452FE9CD7F9C3FE76EC5B4B3F5B417DA53F2DFD77 - F6EDE5B5D46DD1D591FD7D3C47C863E54B8495BF317D88BCA775E5F178E64C7A - DEA61E1E55FEC3300CC3300CC350635BEC9BFC3C3EBF675C3DF6801963BF1FB6 - 7DF1B34DBE8B0BBD157FC3FCC3676767D3EAFCE0D609E80EC784E7DCC0F42D42 - 5EEBF36B5F673FCCF2A0AF463F9CA3B3AB20FF95DDD776307C7CD88ED01BD87F - 3DC7A748BF50C6EEDB67E773ECB7E32FC7681FD891F1490DC774FDDC7E17D77B - 91F2E7FA6E5EA77D81B6EF5AE6F80FBA79449EEB97F3CFECB7F335E888E9FFE7 - 58C97FA5FF5776F0F4A5A74F1D1B29ED22FBB16330CE1CCB7659E093D8C50B0C - FFE75AF2EF7C7EE0B95F252FCF052CCEF47F705C80CBC9B979CEB0E75AF22FD0 - C9E93B2F788617D6E1CE73F5FC5FE906B7393FFF1DAB50CCDCAF35DDBB5CED5B - BDE3797CDED90218C3E7F5C48D389DD4CFDDF89F6700E4FBBFCBCAB14C7BE43F - 0CC3300CC3300CE7185FE06B33BEC0E7863EB492E3F8029F1BDBDCC617F87AE4 - 1AABC9F8025F839DFCC717F8FC5C53FEE30B7C3CAE29FF627C818FC5CAE737BE - C061188661188661786E2EB59574EB861C617F123F6CC4F75E43E395DF11766B - ADACD8BD23AEE0FDDC7E65FB90EE29FFB4333C335ED707DB1BB6B9C26BF0AC64 - 6CF9637FC126B76A4B2B9B9CE56F7F2265F2FA3C2EE3CA9E609BC1EA5E28337A - CCF2CFF6E8750A9FC1A66CDB2B36BBFADF76B4EE9B3C9986D710C3AF870DBE6B - 375DFF2F6CD3631B5B60FD4FDAF6F9D06E7DBDD7E7F29A84ABEF0B9147CADFEB - 8EB1069AD7C47A749011B85E76DFE432297F3F3B576DC672F5359DFC1D6FE463 - F61FB39FFE497AEC3FFABE988F914FEEF77A78F78C7BB926D8C721FB8565B97A - 2EFEA9FCBBFD9DFCD317D4C522D1AFD1EDA47FF40DB9DD31FC14D6F3E4C1F147 - 67D7FFED7B2BD28F03B7927FD71E6CFB773C01FD3D7D47DDBDECDA46C6A8905E - FA291FF59D81B6EC7A491D70E447BF95FC0BAFE34BEC00ACD69CCE7BCD7BD9C9 - DF65C8EF0BFB9A47957F913132E9C7DBADAFCF71AFA79969756D661797933EBF - 2EBFD5FEDD7DACAECDEBF29CAE7E9E61EC3F0CC3300CC3300CB09A5B75B4BF9B - 2BF037F8537671ACC3EFECE6D6ADF679CE85E70A1DBD3FDE82917F8F7D18B6A1 - E59C1A58F9E777EDC5B691DA76CC3FDFE5B0DFA9F0F744F0FF818FF95ADB93F0 - 2D712F963FDFB3F13DBFEA3C11CBCC7EB68C9B8723FDDFD9E6ADFFD9E6BB3EB6 - D3D9466BFF8CDB2271FEF87AB00172ADBF51E86F0939C6C472A62CF888EEADA7 - 6ECD595B3B1CEDA76FE63A01297F400FB82D60D7A72DD8378BFC287BCE1BB1DF - AF9B53D2EDA7DDFABB40AFC2B5E5DFF59F4BE4EF391FE8EEFCD6A0BFC9B8937F - 3E0F3A9F6EC133E915E70A5F5BFF5F2A7FEB6D74B0636DECC3433EE471A4FF53 - FEB48D4C93F810C7083CB23FE7123C6EA28FD1AF6E21FFC23E3DF7E7DD3CF2BC - 36C77F3BF9E3C7ABF473FCF7E8FEDC6118866118866118867BE078CB8C995CC5 - 7FDE8ADDFBEA701D78E7B63F30D78BBC1723FF359EDFE0F87AE6C7D18F998363 - BF5DA6B3B2A1780E5EFAEA6C87F2BCA0950FD0C72813D766F9B1FF3A7E1F9FA6 - CBD3D9A35E016CA0690FC56EE7351A39AFB3A9179E57C7CF7EB75C3B14DB3F76 - FE6E8E97EDBBF6E7923665CC72A5DFD1FDBFF35562537E76F9A7FEA35EB9F755 - 0C4F374F28E97C3B2BF953CFE947F4FC347C3FD866ED1FB4FFD0F7B62A3FC772 - 8E97F7577ECF32CF6FC54EFE96D99FCA7FA5FF53FE39FFD77E648E61ABE798E7 - F2EED687DCC9DF6D14488B36F6EC6DC058FF5BFFDD4AFE85FD907ECE732EE312 - DA03799CD1FF906D8334D9B64FDCEDEF157C421EFFAD64FC9EF2F7F82FE7F8D9 - 0798FEC16235FEDBC9BFC879FEDDF8EF55E43F0CC3300CC3300CC3300CC3300C - C3300CC3300CC330BC2EC45016977E0F041FFE2AD6CE3140475CE29FBFE4DC4B - CAF0DE10DF724B58FF98B573327FE2B128DFA5F2E7BA8E4AEBECB716BA38948E - 8C273EE2925840E296BC0ECE51ACFB51FD1A62A3E0DA71F48E9DF27778890BEC - 62F72993BFEBEEB85FCA4B7C958F9176CE1720DEDC31E78ED54DBC36106B0865 - 9F652D32C79BEFFA35F99F3997F31D3F4B5E8E45BAA47E8939F2CFB151EFB1AE - 59AED746B93896EB7F110F4E3FE57E3B3A3D4A3C97EFDBDFFEA12DEC7400F1BA - C492794E41DE1BC7E967BBFE43FE8E095CE1FB4EFDE258CA4BEA97732927E95E - 4BFF675C7EE2E7327D9B36ED7DD4B3BFB7E1EF29B91EDC6E5D4FBBFB72DE1D5E - 1BCCF7B36A877E8622B7EE7B1F70E6B9E2F93239778036941CD52FD02E1C9F7A - 2D76ED3AFB2BFDC7FFA3F3B24D7BDE57971EFD8FFB4A59B9AF5AF7ADCAEAB5A2 - 6025B78C0DEDD2A46C398F85BC12E795ED9EB6991CD5AFCF234FCF557A2BE8C1 - 55FF3F3BEEFD13F9738EE7DC649A7E1E76F1E04EB79B87449DE7372A2E59E7AB - 1B2B763AD379653BF4F838CB7DA67EE9FFDD7C85B7B22BC391DE854EFE397FA3 - E0DDC07D957B42C69E237406AFE998D778EE90E3D5AD738F58C9BF6BAF8C53AC - 1F56ED9BFC2FD5E7BB754A3D6FEA0C47FDBFF03C8BD5BB4C27FFA3B2F34CACF2 - 3A0FE4445DB236DC6AAC669D99F2674C98EB047A9D2FAF2BD8BD5B7B8E99DF1D - BA72F0DD43F44DAE59D771A67EE1E85BBB1C7B8F798BBCA3AEF2CD791A096305 - C87A41BFA7DEF4BBF491DE3BD3EE77EF84ABB180C73997AC137AC9737A57BF94 - FB48AE9CF3ECF35687617833FF00A082FA20E0BF25A300000ED76D6B4254FACE - CAFE007F92810000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000789CED9D8D911C290C851D881371200EC489381007E2 - 441CC85EE9EA3ED7BB674940CFCFFE58AF6A6A67BB69101208D0839E9797C160 - 30180C0683C16030180C0683C1E03FFCFAF5EBE5E7CF9F7F7CE23AF7AAE7E273 - A5AC0065F8F7C1FF51E9F98AFE337CFFFEFDE5D3A74F7F7CE23AF7327CF9F2E5 - DFCF2EBE7DFBF63BEFB0376504F4FB4746D4FBB49E959E4FF5BF0236D1FEAEF6 - 5FF551FA7695A693D7EDDFF99D5D54F2ACE4045D1ABD5EA5CBAE67EDBC7B3E70 - 6AE7AB7AEBEC1FE56BDF75B9B46F7B1E9A0F7905AAFEAF7965F58EFB9F3F7FFE - F77BE82DD2FDF8F1E3F7BD7886BAA82F0B443ABD1EE93344FE9E26F288BCB917 - 65AB5E4817D7F579EAA069232F4F471DF47AFC8DCFAAFFC7DFAF5FBFFE7EEE0A - 3AFB734D65D1F2234D94CF33599F233DF732FBBB0C519EDB089BC7DFD099A689 - EF8C5B5C733D451A9DF338B47D453EA44717C8A9E954EEF8A00BDAB2CA1DD754 - 1FAA672D9FF17DD7FEFACC15ACFC7F5666D6FFE97F9DBC81CCFEEA6FA8535677 - EC1C7A567DD12EE2832FD03EA87E813C567276BA403ECA213FF715559DFDF990 - CFCBDF19FFEF3117B8C5FEE83CFA23F5EEE4A5FE95FD7D1DE2C0B6D83DFE465B - 207FFEF77E86ACF451DA8B42F3A14E992EF0B72E2BED91B95E657F64D4E7BDFC - 4C6F2B5B5CC52DF6A71D6BBBEFE40D64F6577F87EFCDFA287DDDFD8FEA36EE71 - DDFD24BE23B33F7AD03696E942D3A9CD6917C8EFF6C73FF24CFCE519CD37AE21 - E333EC4F5F517DD09F0175F5EFEA6F19DF1C9A1E99E95BFA3D9EA50F746BA5C8 - 8BFBF84DC0FF91C6EF21277D2F03F5C68764BAD07232F9C95FC743FA87FFEFB2 - A8FC3A97A9F4E9BA1D0C0683C16030180C3A38F797DD7FCDF26FC13DB8842B38 - 2DF3347DC5DB9EC263E5C4A558CF6471817B6255FEEAD9159FD671988FC2A9CE - AEE8B8E26DEF21ABC6B6AB672ACEAAF21F555C7AB7FC5BF9B44741E5D63D135E - A72B7275F1FC7BB5EB4C56E5D5FCFE09E755A53F29FF563EADD293F386CE29FA - 1E05E77890857C9C0359E9ACD281C615BB671E697FF4E39C5CC57969DC5E63E6 - 55FAD3F26FE1D32A3D11A30BC0B3C2F321F3CAFEC4ED541695B3D359A503B53F - 7266F267FEFFCA1E9A13FB579C9773D6CABD561CD96EF9D4F52A9F56D91FEE58 - F923E5143DFFCC46C8DCFD7FAA03CFAB927F972B5BA11AABE046F47EC5790548 - AB5C4C977EB7FC5BF9B4CE4FD287A38C680FF4359EDDB5BF8E199EF65407A7F6 - BF15EA6FE01A9477AF7C536617AEFBDCC1D39F947F2B9FD6E929B3B7CE3B1917 - B4ECCC4601E516B3B43B3A780DFBEBD8C9C7F7E2292F884F53CE0B79B2EB55FA - 93F26FE1D332DECE6503CA295665332777AE94E791674767998E3DEF4AFEAE5E - 83C16030180C0683C10AC4BE88F99C8275206B98552CAA4B1373DB1DFEE71ED8 - 9135806E1E59E6AE2CF706E76258777B0C7F05E21FACBF77D626DDFAF599FB19 - 33AE51D79481F84EACF0516576D71F098F5D07A8AFC6B7BAF6AF676348AFFACB - 9EE719EE69BD9DF78A7BEE97F4CC41A6339EE9F4497FF33886C768B3F277F2CA - 64CCD275D777CBC8F4B883551C49F7E457E7719483F038ADEED5D7E749A33E07 - 9D2B97A3F140E5EC940F7099F41C51C59FE1F3C84763FE5A97AAFC9DF25CC6AA - CCEAFA8EBCC41B55C613ACECDF9DB7045DCCD2F92FF83AEDFFE8CACF3364E73B - C9AB3A674239C8529D8DC8F4EF7C47577E9597EED77719AB32ABEB3BF2667A3C - 41C78F91DF8A67ECEC5FE97FE76C11F9FAA7CB1779D0FD8ECFD2FE9EC5E2B3F2 - 3DAF9DB3845599D5F51D79333D9E201BFF955BF4365FEDFBB9DAFF335D55FD5F - CBEEECEF1CF4AAFF6BDE5DFFAFE67F5DFFD7B2AB32ABEB3BF2DE6AFF808E2D3E - 86E19F747CE9F82B976935FEABDC6EFF809EE1ABCE9F67BA5ACD597C3CF5314E - 79C5AC7C4537FE6BFAAACCEAFA8EBCF7B03FF5AED6FF7A2F6B9BDCD73EE43C9A - CFFF3D8DCE917D4E9FCDE5BB1881CE85F99E0119FC3EE575E55779AD64ACCAAC - AEAFD2647A1C0C0683C16030180C2AE8DC5C3F5738C047A392CBD71F1F01CFE2 - 0259BBFB1ECCD53A82FDD2CF441567ABF663BE673C8B0BCCF6322BB2B880EED9 - D5FDFF27EB57B515B136BD9E716ED89F7B9E0772E875E72277B83CD2546BF4CE - 2E991EF45CA072A495BE6EE51B4FE0FBEFD53E55EC8F98137E638723543FA3F1 - 2BAEEB9E79F6EF7BBC51F9C22C8F2C5E9D71461D2F58C5FB7638BA2ED6A96713 - E1D7337DEDC8B8E2024F50F97FEC8F0C7E6E25E3685507DE47340EA7E7F8285F - FB85736E7C577D546726785E63EBF4932C46EDFD85B6C7F915B0C3D1ADB80EF2 - ABF4B52BE38A0B3CC1CAFF232B7D2FE355773842CE52685FCFCAEFE4D17CBB33 - 33210F6D96725C3755398C6DEADF287BC5D19D709D99BE7665DCE50277D0E95B - FBACFA78AFEB0E47A8EFB5CCFABF8EDF5DFFDFB13F673BF52CE76EDFD2BD03DA - 6F7738BA5DAEB3D2D795FEAFCFDF627FF7FFC8EEE33FFAC74F56E9BC3DF9B85A - D95FF3CEC6FF1DFBA323BF7665FC3FE1E876B9CE4E5F57C6FF9DB38E15AAF5BF - 72DE594C80EBDA6F3B8E10F9B09FCE31B367B23970565E9547B57E3E995B5FE1 - E876B84E4FB753F71D199F1533180C0683C1603018BC7FC0E7E8DAEF51B892B7 - BE5BE31EEFBED7D8C00976657F4F5C146B5E3800D6948FA803763C01EB5A627A - BAAFB2DB075C018EE1141A4FEC70A58EAF056216BE6E247E16F07DACBE0EC76F - E87A953318F1D1980D6D4BE30BE8ABE37655C6CEFE5D5EBB69B44EBA0FDEE5B8 - 571D41F6BB23B4F7788EEB94ABE90291E66ADFCA74C4F5EC1C0B710B8DB33A07 - A3BFCF453DD00D7A25D685DF71F9294363F1D55901B545C5D1EDA47199B4AECA - 795247FD2DA12B750C280F4B5C0FFB68AC50D31127A5DC2A5ED8A1B2BF5EAFEC - AFF171DA3D6D123D797C4BF3F2F876C5AB65FC89DB5CFD9872C88A9D3401B59F - C71F3D8E9BF17B57EAB8FADD31D2FBFB049D3B3DDDB7E5F2781CDAEB1370FB3B - 6F403EFA9B94C898E906545CD48EFD2B1E43B193063D2AEF99C9AB7C98BF47F0 - 4A1D4FB843CAE503575DF99615788E312EB399EFB5A00F395F459FD0B1A9E20D - BDFD56FD71C7FE01F57FCAE32976D228E7A8E3A0CA917DCFECBF5B47E504F1F9 - 1D77A89C9FEEC7BA021DDBF4E37B2DE2836FF4BD1CDC531D64D7955FCB9EEFCE - D783CAFEF832E5D41D3B6954269F772ADFCE77FA87B799933A06D406BAA7C7C7 - 67D7ADB69353FE4FA1E30773CCECDE6A8FDDEABAEF255A8D5B7E5FCBAF64E9D6 - AEB7A4F1B22B9D9CD6F1F4B9CC775DD9FF37180C0683C16030F8BBA0EB185DCF - DC6B1ED9ED498C7590BE2B65A74C5DAB12EFCED682EF016F415E8FE7B0EE3B3D - 4752A1B33F9C00E976ECAFB116D63B3CF716F47982B7206F168F244EEE311BE7 - B4883D3ADFA550EE56E315019E759FA33CB4C7203C26ABFCBFEA334BAB791343 - A9B8182F17F93496A31C72C729693DB5FE2A2F7CCE8E5E905DCB51B94ED09D31 - 718E47B9088DA5773EC3B97BE595E10B3C46AAF5F3F38DCEC156FE9F72B232BD - 6ED9DE6C6FFFD88DD8A7C77CB16DB66F9BB60227E27162ECADEDA2D38BCBEE72 - 9D60657FECEA6566B1FF158FE8360A3007A86C7A929F7341DE5FB2BCAB18B0EE - 0FD27837B1D6ECB7A32AEE557D8DEEAD52AE25F3192BBDB8BF43AE13ACFCBFDB - 5FE709B7DA9F7E495CFD51F6D77EB16B7FFC0679A9CF235FB7FF6A6F077E4479 - 55E50FC0AE5EAAFA9E6035FFA39E708CBA07E516FB6BB9EE876FB53F3AA41CD5 - CBAEFDC943C70EB5B9EE77D9C9077FAEFC9FCBEB3E3FD34B76CFE53A41B6FEF3 - 7D453AB7C8CE5FAB6E1C2B7BD1FE75FFC33DECAFF3BFEADC72A0B39BF771CD93 - BECCB35D3E3EFFCB64D17D182BBDF8FCCFE51A7C4CBC85F5E2E0F530F6FFBB31 - FCFE6030180CEE856CFDB78A6580B7F4AEF98E673A85AED7BAF1B68A9D9E6057 - D7F72C33CB4FE33FABBD91015D97BE055C39FB5081F8D7EE7ECD5BB0A36B4FFF - 08FB57F969EC4763157EC629E3081DC42D3C9E0E77A6BC2EFD8F3371CC7D950F - E39E7F2776AA75F0772456B192AC6E1A93D176E1F228B272B2BAC2FFB8AE358E - EF32A9BD88533B57B88BCAFF6B8C5FCF4BD1CF94F3AD38422F07DDC19D68F9E8 - 45CFD5A01F97278B39EA773F7F4B3BD2783AF2781BF0BA053C96EC7C40B60FDB - 63B3C4CFBDAE1587A7F956FAE079E2C61507BB637FF7FF40DB968E531E77CD38 - 42071C95F271AEC3EEFF5DFBA3173D8FE93207F46C8F42D36536567D65F6F7B9 - 889EADABF252FD28B7D8E9C3CBE1DE0956FEDF65CAF65A541CA1EB8434DDFB1F - EF617F64A2AD653207DE92FD2B6EF159F6CFE67FF842F597BA8F029F547184AE - 53FC7FD7FF03BBFE0EDF94E93C9BC3EFF87FAD5B26CF3DFC7F66FF8E5B7C86FF - F70FF5F773B07AEE50E7291947E8E5E8D9C1AA7D7B5AD785CE33ABB3996E37C5 - 6AFE1770FB57F3BFCE7766E574F6EFB845BF77CFF9DF5BC7BDD73B83F785B1FF - 606C3F180C0683C16030180C0683C16030180C0683C160F0F7E1117BD1D9FBF4 - 91C17E13FFACF6BDB3C7D2DF6911606F4CF679843E756FA9C3DF695C7189EC4B - F37C7DFF08EF00D20FFB379EC953767539CD47F7EDF1A9ECAFBF63C2BE23F6D9 - E93EB72CCF6A6FF0ADF2777BF5D586FA1E1087D61BDDB2874CFB04F93DAB6D57 - E8EAF2C832755FA4F68DACFF38D8AF96E5E99F6A6F9E3FBBDA1BB26B7FDECB44 - FAF8DFDFB1A1F67F6DBC86FDFD7707D43EF4C30EEC23AEA07DA9DBCB16D7F5B7 - 453AACEC4FDBA14F3B3CFFACFF739DFC79979BEEA1D47D9B01DA9BBE6B897D7E - FA8CEEB1D57CB54D9286EF273819435417FEAEA1AC6F2BA85B579EFA82CCF68C - BDF8865599E4A9EFEF5199F5FD7227F6F7BDEE5CE77FAD27E792749C5459B8CF - 77F48ACC7A2E44F3A53DA8DC577CD3C97E713D5FA1BE0079AABE4DBBDCF1E7D9 - D901CDC7F796AFE4C78F6BFE0174A7EF62533D32E6FB7CA5D2B1CF79B44EDA5F - 7D4FAFEE65D7F994E691BDDB8FF6E0FDF0744CE09C53369F716043FFEDCC6A1C - 66FDB4339623CBE9DCB0B33F7AD5310BFFE9ED48EDAFFE5DF79A93E789FDF55C - 22ED57CBCCDE5DE5F3ACCAFEFC4F3BBE322740BEECE3407E74471BCEFC3ABAAB - FCAAE77BE5DD7581CAFEEA37016D318B15E899515DDF50579D1F56E71B32FB53 - AE8EE57A5DCFA57A9FD2731F9DFD91C9DBD733D0C55D76E71691EEAADCDD7877 - D29EF4DD3ADA973EDA798AC160F0A1F10F88246AA2EB77BD16000004796D6B42 - 54FACECAFE007FA2360000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000000000000000789CED9A896DEB3010055D481A492129248DA4 - 9014924652883F36F8633C6C48D9B164F89A070C7490E2B1CB4322B5DF2BA594 - 524A29A594524AFDD7F7F7F7FEEBEB6B4A85DF83B21E974CFB12E95F53559FDD - 6E37E5F3F373FFFAFAFA737ECB75A71E55D62D55BE7F797939D863EBF4AFADF4 - FFFBFBFB2F4A75AC7A3FA3FF69FBCFE0FF993E3E3E7EDA0073016DA3AE2B8C76 - C17585D591F815CEBD599A75CC38B3B4FAB3754E19D23FA457503ECA314A73A4 - 8A576956FFE7FC91FD5F754BF0451FFF89CFB8882F729CCCF9A3C2885FE29A67 - 4B95575DD7B19E99CD45591EF2636CCAF32C5BA69F549C591B48BB54BECFE0FF - 0EB69BF9FFEDEDEDF08E887D78A6F7C74C237D419B20BCD2E29CF647FC9E561D - CB37BC97915EF77D3E9369D29EBAB22DE71CF8E8FE9F69E6FFEC3B7D9E4C4AF8 - B0EC58ED26C754CA50F733FD54DE23AFF4DFA81D67FFAEF04A1F1FD6F96C0E20 - 1E65E4FD27EF3D8AD6F83F85CD986FE9E7F96E80EDB161F6EBEC9BF4BD7C3718 - 8D15F93E9AFD3FC790F4559625CB3BABEF128FA2ADFC8F2FF16DF6B59E4E7F2F - E8E3498EB5D9F766F351D683FC7A7BC8F13CD364CCE936E964996EF93BE8AFDA - CAFFA5B251BE03966DFB7B7BF735ED24FDC0FB0469D1A678E614FF673CC624F2 - 22CD5EBE253DEAFCAF94524A29A59E5397DAE7CD74EF652FF9D694EB2097B061 - 7D1BCDBE6BFAF7D45FB5F679B53FAC39D49AC96CCD7A8DD2FF7D6D23BFF347DF - FC4B6B21AC9BF4F36B28CB39EA47FCE331BBBF94DEE87A96D72CAD51BF26EE6C - CD6956E6BF8AFDB2DCFB235FD63CF29CF6C233B9CE9E6D24F75E39670D977B39 - 26B077B326BCDB3ACB99EB89758FF566D69AFABA5285F73AD6BD4C2B6D57C7F4 - 1990575EA31EA7C47A25F74997BDEEA5329FA3EE976C6FA3FECF5A1BB6663FBE - 6B34F657BCDCC72DE823ACF3AD093F562FEC97635EFFB721F721107B1975CCB5 - CAB455A6D9F31AD9B7FF13419CD1FD91FF47653E477DFE3FC5FF197FF6FE9076 - E29CBD198EF833FFC958137E6ABDFA9C977B02F87A54A7F441B74F5ECFF2CAB0 - D13E13F7B33F739D798FCA7CAEB6F07FDF47299F50A63C2F31D6317E3296D19E - D7869F522FC21837F88F001BD3BE10736DF77F1F73728FF298FFF97F22F328F5 - FBDDFFB3329FAB63FECFB91D3BF47E92752DF5F1297D83BF88CB3CB655F831BB - 6718B6E4FD3AE761C670E262E7B4357B9DF833F7288F95837F6BF1216D276DCA - 9ED9C8FFA3329FF32EC87E5BD6297D47DFCEBA628FD15845DC4CAFE7D7FDD9FB - C19A70C296EA9561D483B9A4FB37E7F2D13718CFF7E74679F530DA40DF8B4C1B - 133FF39E95B9F7B54B6869BD403DBEF4BF524A29A594524A29A594524A5D4D3B - 1111111111111111111111111111111111111111111111111111111111111111 - 1111111111111111111111111111111111111111111111111111111111111111 - 111111111111111111111111111111111111913BE41F87978E6AD93B8E9C0000 - 01536D6B4254FACECAFE007FA585000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000789CEDD6E1698360148651077111 - 07711017711007711107B1BC810BB7A621FF8A09E781439B4FFBEB4D6CCE5392 - 24499224499224499224499224499224491FD1711CE7BEEF4FE739CBB577F7BF - BA4FF76F5DD7731CC7739AA6C7CFEC18FD2CF7D4BD7516CBB23C5EC7300C7FBE - 8774EFB263957DB36176ADCDFB3DB57FD537BFFE8DEE5FB6EB7B5639EB9FE57A - 9D7DFBC6D9BFBA5ED3FDCB73BEEF5FFFD7E7797EDA3FD7ECFF7D65DB7AEED7EF - DBB6FDFACCF7E7BFFDBFAFFA1ED7F7ABF740AED577FB9C45D59F1DD76B922449 - 922449922449FAF7060000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F8403F0AF9ACB852DA2A66000003 - 1A6D6B4254FACECAFE007FA5F700000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000789CEDDD3D6B14511886E15150C4A0 - 8D08824204B151B4F20B6CED4402DAF989BF218AB5602722DA88F80304BB606B - 2156698D5130606361A5169A525DDF612D2C04473CE7BCCFEC731777B14B3873 - E65C5B1C767626DD6432E9045BEE2E3D9814EC40F4B7635E287CCCACEE0E38D7 - BEC5817FD7BAB998D75BFC6DFDAF575813FCC7E3BF82BFADFFD198D357FC6DFD - 972AAD09FEFAFEDB623EEFF1B7F5BF51714DF0D7F77F85BFADFFF198CB3AFEB6 - FE4F2BAF09FEBAFEDBBB7AFB3EFCF5FD6BEEFBF0D7F6DF1573F880BFADFF42A3 - 35C15FD3BFF6BE0F7F5DFF530DD7E4D08073BD2A6057A28723F1EFAFF53C891E - 3768F780733D59E03825AE5DFD8896FE630E9747E23F8BAD15F0FF166D696083 - 7FF9DE15F0FF1EEDC17F94E1EF1DFEDEE1EF1DFEDEE1EF1DFEDEE1EF1DFEDEE1 - EF1DFEDEE1EF1DFEDEE1EF1DFEDEE1EF1DFEDEE1EF1DFED376C6D88B42ED68F4 - 59C77FDAAD02EB50B2C3F837F39F8F713F0998FFDE90FB3FF02FD359016FFC73 - FC37C698CF05BCF1CFF13FD64DEF5FC9F6C63FC7FFA68035FE39FE7B63BCCF02 - D6F8E7F89F1370C63FC77F438CF542C019FF1CFFD302C6F8E7F93F1330C63FC7 - BFD5339CF0D7F4BF23E08B7F8E7FBFEF5B15F0C53FC7FFCCAFF966FBE29FE3FF - 5AC076485CFFADE3DF3F33EFDA08E2F71F75FC097FC29FF027FCDDC3DF3BFCBD - C3DF3BFCBDC3DF3BFCBDC3DF3BFCBDC3DF3BFCBDC3DF3BFCBDC3DF3BFCBDC3DF - BB59F1DFDA4D7F333D2B6D6EF4599F15FF1305CE43A983F8FF93FF3D01B39271 - FFC770FFFDF1FEBA8019FE39FEE705BCF0CFF1DF14EFBD14F0C23FC7FFA28015 - FE79FE8ACF6EC4BF8DFFBE78FD51C00AFF1CFF47024EF8E7F8F7DF8FBD1170C2 - 3FC7FF8A8011FE79FECACF6EC4BFAE7FBFEF53FB7F0DF8B7F3BF2FE0837F8EFF - 91E88B800FFE39FEB7056CF0CFF3CF76C13FD7BFC59A10111111111111111111 - 1111111111111111111111111111111111111111111111D19FFB096F562CC586 - D63A2B000002446D6B4254FACECAFE007FDB6300000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000789CEDDC314AC44018 - 80D1D5151B0BD14688B616BBD82B780C4BD9423C80B258090B8228DEC0138837 - 133C83451CB10BAC8C9B99CCA0AFF89A9099C9CF6B93B4A3D973DBB3FBD0A86D - DB217B4CF0DC5F5D473C7B13EEF948745ECECE2366996438977F1DF1E7CF9F3F - 7FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CF9F3FFF9FCFDAAF - C036A68B88598EF8FFDA7F27DCF3127AADBCD388599ACE1AFEC33F7B4DF1E7CF - BFBC037FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CF9F3F7FFE - FCF9F3E7CF9F7F8DFEE3707DB367E3257B0FEA9F608E215A8F9865ADB326A7FF - 3C5C7FEFD95505FE7BE19EB704B3E4EE2C6296C3CE9A9CFE7709F65E54E0DF24 - 3A2B77B38859A619CE5DE6BF48B0F76D25FEBEFFE05FDA973F7FFEFCF9F3E7CF - 9F3F7FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CFBFB4FF5382BD1F2AF03FA8C036A6 - CB885986FCFFD749B87ED3B3E30AFCB7C23DF304B3E46E1231CB6E674D4EFF9C - 79FF2F4DFCF9F32FEFC09F3F7FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CF9F3F7FFE - FCF9F3E7CF9F3F7FFEFCF9F3E7CF9F3FFF3CFE1BA3EF772BA795B7BD8203FFFF - F5FF2FFEABF9FF95EF3FF8F3E7CF9F3F7FFEFCF9F3E7CF9F3F7FFEFCF9F3E7CF - 9F3F7FFEFCF9F3E7CF9F7F79DF1CFE9224499224499224499224499224499224 - 4992244992244992CAF5099FDAEACA96933A32000016E26D6B4254FACECAFE00 - 8007720000000100000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000000000789CED9CABB62C2B1245FB774AA64D894422B14824128B4422 - B12953A62C59B6E4FE9E5E33EAF89295DD83D5F79E3EFB75C70E88C78A173E96 - DA6B49B1F85847EB6D1EC73C6A4E397AB787D67B4CAD7A9F5B2D35F7DEAB3E55 - CF567BD0B7C498D29823E5D68F12632847EF2DE532F4CDFDE8A3B5FFDC1C7E2B - E7C825A51224672EADF4D18F9A4249CEFBD4CF91522DA1CCD96A0DF9384A4E21 - CD925A8CFD9859DFAD436BB51D2DE93872EA35167D61CE63EAA0EAAFE5FB06BF - B9C83DEA5FC95E74775582E65CBAEE33E5AC9B2C92BFCED799F53DB5E4B83F7C - AD4542CF73F6318A846F1C43D5012429930EB18D360E7DA6DEFEFE73F50FDD5A - 8A7EF3A349C22C252FA86FD761E42049A51BB94801F4472A2DF92D247D57F0E5 - 981254FAA17B9E738C9EB183DE47A955E751652025FF5ABE6FA8E70832E294DC - 631F031DAE63F669662EB125518981AFEB4C9A8C23EFD2979C742C457A9F25BF - 7985A29FD5C73A87799E3ABBA6EFD5B1C6F86BF9BE613CCFE475A1CED5711C57 - 4F2163FA924E86805E487C1F74F51CC8945CE62BCA3411ED94BA0EA3E9AE7D9A - BD9C974CA2A3F966299BFBB57CDF30CF2EF96270F2E3735E4F59BD1B2D60C17D - 4AD88ACBE7CFDA7069935831AE31B0F7A25352AC7025EFBB0B9E73B88E263F02 - A42E35B9DBCB3F74A9D2727E77393179001765123A8BEB922CB5722A32E94B51 - 4EFF9BFD94D4FD3C8E73B6222FA91FAB2965E742D187E7FBD07F41CA826EA02F - ADFC5ABE6F90AD9F447F6C58BFF2CC2ED403457ED66B12D924BFCEE83CE4E862 - 57DC4319DAD125684921C82D64B9471D817C9D6EBF2B8694E863075297DBCB7F - CC91CD01DA55CAC307E2A03E7C8E9EA003F286820EC13BAC3D573EF7F2A20935 - FBC79E05B9BA927188CD7B899FC3E63E3F73F4DBCB2F77DD93D33D4AADA75418 - 579F15F80707E3F7D8E628C58C2315FD33C4E9E40A8EAC08D7A048FAACD42686 - 79F0C3BBD37124EFE2EC394BFEFBF33F89734E1C803C1B11CE626124B689C88A - 00972E5A23EDCEA87510491A0A8B12B944313DA2A0D47C943D5C33677D1D0A24 - 4A251E10E22036FE5ABE6F10B37B56C4EB59B21DFAB58184CDB830DDA9E4F53B - 3AA11009C181E671063ECAD49506B4FEEC2935FD788B3EA14ABA7EFD6848D290 - 917E2DDF37C867BF7D942317ABCF4A599CE065CE9061BB6079BFB42B402ABB51 - 8493F2674545DC5CAEF01BDDFE31E402E40C82F285B0BBDDC9977C5C411CB7D7 - FF7E3C4FE7E5BDE4F8A4D16E7F6C9B97390411F90AA35350ACEEE182CC7ACB18 - 79ED09FEAFBF89E0A437A14001406AEF4208FBBE293B80F8CB770457FAAFE5FB - 06453DF9F46A712C17BF6D8F7D8F3904A93761AF430AE408F106610BFAA62DD5 - E08D1C4BE670BE2747856F50E0F0FA5369E4403DCC8D96DBDFBF2EBE5C8384A6 - 492EB1E01EB32E38157C2024B713098A2C3A391CE3D439EC5E5A7156694DBE9E - B326E9BE44D51F052650F07B0403F9C87E7BF9C57D92745577CF95C9EB4DC8BD - AE9038A8CF911588E3EA6B3268AF7430EF5B1C62889D0898EBF1BAA00D951A00 - 5C307E38A14EC31BA5F8B57CDF501192DF55893CFA3ADFA7D25A71975AC9FB24 - BFC8EE5444D85D194AFFE52B14FFAE4B7A61FC50F9937CC439CC59B48A0F9129 - 290EBA7D97BF1CBF96EF1B3ABE9AAB976787CB1CEFD74B645F91A0478F365310 - EB3136E7C48F6419E57AE9EAA97BC830C8FA1524FA89B9342A00FCA77085FC45 - 01E3F6FC0F752D659C98011E7F9CBAFA361B55BFD27284E8C99F59BC23138C75 - 0ED2BB911FE9A4CCD5F0F690878627EDC5E9EE0BBC4869B062CAAFE5FB0612FD - 589FAF246D4703C4F787EE1C5D1816E5AC96335A82DF5FC740CD318A53F77F8A - 33E2EC64EDC4457DA33EAC8D64A80EE247BB3FFF83D8E6F19CF27DBBD11E0AB8 - 622ED43BB0683259F9C34A5E57CFC31C1C6C51B1F11C0A06A614561F225C1402 - 0966D36768B891DBEBBF6BC472B1BC2A0F973F310F5D908495EAD62093CBB957 - AB8DCA2008120577898DC44075342B0246FD23D620FA10CA20F85BC1E8B8BDFF - 77F26F2DC46601AE76AAFF95C2AFA86E0EF20D58BBD94521BF91E40AF529C817 - 942EAE233D97AEA77C342FD728DE989DC76D24730228CEAFE5FB06AF0457CC86 - 128062D79047474451FF3C6BA6CC4D01FC739F4A6FE6744199825204E98AA8C1 - EC4AFB08FF4E9E2FC19BB355893188AAF467DC5EFF2DD3CBE4B8BA749353399C - CFCAFCBA28BDEE799A30FA82CC41674569A3281BF22558A14BE419B6EB29F8E9 - 10A10C654BA8801CE128B7975F975F5E6797F4E9234FF5347C7426FE111D8CC8 - 786184CC51FE55B0E8834C9F32B13E1BD3183440C47A68807992BF870EF0A3FF - E9F6F10F673FA96650FAA90A7E03FD55F2E7DC1E506779FEE877E78BAC99C688 - E8C0C14D5B0298A34B73F44FBD37E7A00313F9713801B21F05835FCBF70D992B - 8C41D7D7244B25802B156AB4794460C96BF479E5BFDB1E450308F3F39CB0FBA2 - BC473EDF275A3DF4074A9D22D246FDE41629298547BC7DFD832E9FD25EE53D67 - D974CBC76891FA564EFBAE8B0C8A01BAD187537627E5E052AFAB280750ACF3A4 - 7BFFBE39EEA9CD9772422A82854672A27972FFFE8FA49DA4B095FB0F819AB595 - 341B8468DB03314DB90CB15F39817538AD12A874DF8A82D4CC1426DC238F7EDA - D1F82D502632C294EF7FFF3EC89E6B4D0E023CE85AE3CE686CCA9E23DA1C4569 - ACFF65157F7D5BF0E61B08007D4A7E91A14CD5A38EAB482D144D43E3DB15136F - 6FFFF27956E6A3940DDDC39B672EFBF912030C5E2AEE368F79F3AF1C7C346FA8 - 3C108FA793526AF869F648E5A338A0D42292FA2BF975FF03FEAF72E3433EDE7A - F7CA6C45F88A1DC0542078B814B787C3A8A1394A07617FD2FEE4DA30F2AF2C59 - AADEDB38464F6EA71F40988430561FEFAFFF327EB9BCDE7D8AFA75CD8D61CFBA - 5939BB96F1FC4E17FE8F1EE42A6D4FB8B6A4348132589375E86862A61DB43FC4 - 9CFA799C3DC28A14256F7FFFF3A0ED2301BCD87DDA1E0F3FF00014FA939FCFB4 - FB18B6872EDC4A7AD9987DB2B4981AB102E1AE302942CC4C042161D22F7D1E94 - 488AF4FFF6FD5F253C2373759B44A0EE598E6BD2C4257CD5B304F47DDF83D327 - 140C127D8048A71486D3CAFE70D16D94CCA5052E94FEBACED1DEAFA9F8A760E8 - F65FCBF70D8794B5F41CAC7725DE32DAF57E9D443F3ABA959C465F76F27BF26C - F208705C2F52D0F9FB2766CA1D7A9D9117611645A0EDFD7E42A3A23E7FFBF87F - 3CDF6747ABE5DB70E729CB214A6C7A5ED60E2DD07B51A09DDBA5E5A3F8E7724B - 36DD5374508A85C1C667F6D8E764148CCEAFA20A0CF2F6F25BC02F8C7BE1DFAA - 225E1AB433DC461310062757505BD8C9E8ADF9A700E8F8761B0C1B9DAE974C7F - A73DD6C654F0D3C93029411FD0F95FCBF70D51B69F07237FA6EF9D02C6279BA3 - 98213F8F63530EB01301EC00F0FE8D30D98E4BDCDFBA1E648D3A109180B03F74 - EDFD3D7BDE76C5945FCBF70DB019BAFAD3F2B98227A4EFD1CFF779640915B700 - C94F8E0A0906C2B8471BA20D7045FD4C6C476FD7B346670CD16D0FC5837E4A89 - 36D2875FCBF70D59BE3B33EA64332062BC7183B6CCE7DFDF25FF26591502DC9E - 696E261B7B936658998C1107FD884EEA692D1385BE51319CCD8948EB40A984DF - DEFEE5BD2866F64160CF614B8AF88A87E37A5F8E2AEF7111C6151FB2D576A80A - C672DA4C504BD61E1709E2A3991987F58C0D078AE8FA2BA4FAD7F27D8355EAF4 - FB1F54792873651B0062A631591FB70651BBA02B2D1E5F289E94C6691CC9FB26 - 9A0C55D431890D8B394612A458E6F382258A39DE5FFF15CF6871D1FDC3C06502 - 847CAA9AC4050EA5C58732A051088181DBBD5E62C10AEF912118CB0C27B3A299 - 8668A41C3CDEEF3704415FFBB57CDF20AB8EB15FE22BFACD3F553C67535056C8 - 15DD6BB305495E67F78F2D5853F8B88E429ADF681ED2406FD8C2351B39A1F991 - 430CF8A02E72FBFAA7C2792BF3920163B45C5A72560BA7E049E9D788BEDBCAD9 - C489A8705B2E5CA98075A6BE3DA321CCCEBCAF98FBAC8C50D35399C87FFFFE5F - A6F9759C8CB0544BFE4BB2B6AF4CA17E0E801828966FA69DE1884CC674C8919C - DEAC1C0A050FB90DA3CCF27BE759191B1C654BB7EF7F943494B228586D743CAD - E5C91E84CD74268A5895CA08C5302F9E449DA3F699CBC41D4AFEEB3D4984E424 - 12F34F4E947F2F073EF35002B897F96BF9BE21F97E32E2153F23ABCD461DBB1C - 3ED30BB43AC8846C14D0F9F19ACC769F7FAF53FC9E5EC178FFC915301CA69841 - 5D28E81C4A8D1FB244C7E4D7F27D83B81A662F2316B56388837917C92BCF47FB - B3ED41B72B47271F101AEB1EAD3DFFAEC9B030830F1781CE3BEFD2A78480E4F4 - 4502030131DC7FFF251566388AF5F3ACEF31CEE7FBB0D13E86A2AB73B27F5906 - EADE6CB1A12BCB396505899AC864F469DF588AA0FFE1F72D2A870CD64B1313AA - B79F7F13916762A7D1E781CD7EE6B62B3DF040BAC33C6B60B2451FC6686911C3 - 5F5291E03CB143E90FA48099D1C4D81CBB5F24CE0C0CE5FBF77F53EF9F4D9FD2 - 3F91DCE6DDA9E4FA64437EC1FC5E47BF890ACAFDAD3A587520D1EAFC0741B372 - 0E891ADA7C8E76349F70A8791EBF96EF1B22465EA27E6FAB7A11D2440615CF14 - 0FB96B6B860F067F58FFB2E1875A0275DE94481BE7A1A3E0C629933DF6D8DF72 - FCA7144294A9E77EFBFA67A856EF2D59015B4A4B39BCF5B377DC8134D8E8CCF1 - 9CA3EC687BB33129517F67BDC0D2745636368E672849B9FFA1184167407E2329 - 2BB83DFF53A41E0C72C3E3F1E2B26DD6364402457165F8B5F874BE2FFA1C0A11 - CA02AADC5F67023646453A254ECF5793DF7812139411D961304221BBE935DDBE - FEAFE45F17572F1B7B95D0B58A0CD6689ECCF69EF4557945119ECC8ACFF97C32 - 22D7E5F3E4F4E50A637FBEBB1C271E51F1FE397CB4698AACE8509530FD5ABE6F - 48E4B812D7EDB1FE9B784D81B4C6C25F972B533EC72E0B83BF6CB6EA9E639ED5 - 6DDB43E6FE999762F24787633D421682719CD48E7CB8FDFD8F91CD73E3D11040 - F15D5EB07D065D19019F14FCC6536E81B918E8213B4155C9E0EE1EBE59F73F38 - 738D9FA6576020A2C4CF1EC5EDF31F6ABD09BAC31C0F330C8CFFF1376FF21FC7 - A1DC3FB3110ABF4B3604C764A4CDB8FA9D4A572B81F68FCDC8D0F96377B09243 - BBEDFEFD3FF61DF3D9F8E595CE56DBFAEC9332AF4D362823DA1E81A1F8DAC3C6 - 3C50B59DC8C2C6A4980FD32FC5F684D076A306CA8F1A03B44D2A14EF6FFF74B4 - AC89C19CAB6DB2590B54648E85369B78F28C73A5B0312A13AC0D94D3E674F717 - 8B11A2C8DBE699F8668F3A4FB9482665C412E6B8FFFD8BE746B1571B70EA4C39 - EA622B4B5FC14389A9E927DBED64D6B3512795AC187648A99DD328AF72E3F469 - 8F158A89EFF7A47FE6E3F13F30FF06A109FE53F111EB3B58FEB6C675B6761F59 - 41D877CFA05F48F938DE973E4CB6E2AA13432D6CDC958A8982E0C1E7276312CC - FECF7AFFFA5F647EA1FD1BF1ECE709A17323DAA06BB1F2078B6F8CFB90D2374F - A19C2A60E59D87A234373F4FC63DC4F84299C55792C3E27803E3FD56ACFCB57C - DFF0909F9FE2779F082007D818F72F04EFD8680D4AEDD98927D8CBD93F4A47B3 - 0BD31F129EA8791DF51AD96DBB54BFD5495B68C42E6AFC961FB87DFDC7D3B678 - B2C24843B78BBE0D1B7364D287FCDF46BC59EE12434A73D221E4643012675B41 - 9FD431D1360DD63039943B10308F275DA05FCBF70D994A1D6DEC64FB4A0C2E8E - 6943AF21DA687B31A7AFD3D93722E4A80C44545E8A8008C48D57526893564A41 - 7D3EE5FDA2B767512695B55FCBF70DF46E7A6073D51B7F6BB6EDCCFF33DD4A35 - AB2B37629DC747DB8724D07BDB02A54EE0C40EAC4424EB518A3015FDCE594407 - 8EE8C6F5BEBFFDB7A6748FA69DD25DA29867E299129E9240A9385E814EA7D582 - 07DD2E653672805957DDA7CDFC27F602D81050D2ACFF988C41E6208F9995368E - DBFBFFBA97037D4F8C6B61D68A6AD2FDF4E887F440197DA6BD890BF4813DB0A0 - 78277717C80C4365DB47B993CFE36C0C51169687DAB0B271A04978FBFA97E497 - 95D2BA520818E7FBAF499E00F7B72E1F432F747B331B2154BA94DF5F7FCFEA7C - 8BFA97310F390099C6B4697085007B2F843E890C40F1E0D7F27D03EF3D498AC6 - BA6AEAFDBCEAE61C756CE2C2287B2CCFB7589F7C3AFB7EB0A3F325F995F90456 - 67288CD21F41F6CF0A49F9ECCA284B70E7F3FEEF7F587583CA37632C34306B64 - FEC527965DC4717C7B9FD60BA544A46C58EEF2F577661D9177FD384E99FA16A8 - FE3116C60869766C0F71083BD5A05FCBF70DCA6A0EC84FFDB7BCC220AF58B04B - 24FA7400DB45F187A67E65565821F07836CA054AF4A7DC4062608804DA5E1118 - 3A4B6B9A67BA01A1DD3EFE29B93B32FEDED9B20B055D9890DC77A77FA34B1F34 - 0498EE899DC297981FA6EFDD1EC79046541A239F7A075B72EC93560207FCC995 - E7AFE5FB0671FA83A4BDFD7BCB84BD3EDE6E800987DD46C26B1B4755F073ED79 - 312B6E979B1D4B3EF40A1905AE610F8A79A7F40477397936800C7ABE7E2DDF37 - 2485330699CEBA3B1B70E3B1A3AAE83E72AC96C4F12820E5E1686B610C00D8CC - 47FD3C0A3606374EEB8FF5E82AE673FE3D95441DCFE229A7FE5ABE6F28FDFD92 - 9B8B936565163BCD7DD3FB82DF53DE94C1A78DFC96F67F8A8F682FE2F4B3D9BC - A07E4EDAAF0818F46D295346B8FE5E04D414A88AFC5ABE6F1063A7DACFEC0E15 - 5CC67810D3F61B08E5B4C4078B4CD9F65E63F6C8ABFB9F6C8837530F2B9F5201 - 5332FDD00FCEEB248594836CB797FF904F932D5BF187E99F9A77EB6B91065B5C - 9424DD6A3EF6C495EDB7294D4EBD5AB637AFFA79F542291279106DAF79DA9840 - 76E57DDD9EFFD3ED8BA2F9347736CFAF5D78CFF3BC5881648129E54ACEC7747C - B62A98A7E6696FBFC92F9E67DA9D672E8E377282A2A08EE53AACA71AE279DC3E - FF95FC953627C3DD509E667B5E3BE52CEB883B7259E5465BA4206EEF3BD4D394 - C396858FF6298BCB65D89668922ACD6B5ADB282AB3387F2DDF3730C1C4A0BB3D - E2F8D9F2C8C71578C48587F1127D7D1D84523CC76A6BE201C4E70165AE53F73C - AA713D1AE1F8476686782E8195D04C5DE9F6F11F19ABBD6D419AEF43B079AE38 - 5F32001AE2B47628EBD3D40B69D868E031EC55C0E3D3F29371F4E37AF3306C46 - 9332D1FF53497B9DB7BF7F5D2B853F5A5AF60EE2FEA0A657EDD90F1EB6B27DFF - 8693B35762A88BB1108002583124D9DE4067DC8B97F1E409688D377B17855AE2 - AFE5FB8644FBEB234E1761098F6D0B49BC9799D873520744BD99ECCD762EF064 - 4FA1D05A62D936234915D87FE3D5338FD3CC8CFF7D9E50FBB57CDF60CFBCF4E3 - 546EAFD8CDF4FA63E7195BC96F2DEDF22976B30CC8AB579985275A257C9D52F0 - 7C1E2C035124213DB6F500AB05555B17DB7E2DDF37D0C461FE53145E9AEFA8F8 - B1E13F4C22AB7676F63B9E0A0F81AD0FDB88A2CBCD33C1F21B6F260728768EEB - 399BAD91600F6484FC73FBFD2F91B48305E8E0B69D3D4F7BE2112E98CAF59AAD - 7AF67A498744936C3DB8920690E2511BCD9D41484603870DD1429EED5540DED4 - B5E9D15FCBF70D646F7D50C47BECCA57207C9327907809EC3C790AC9C2A05C3C - 3E72CCEBCA4CC988F6EF6C82571EC12E6E5716D987BD035878438084205A6FEC - D7F27D833D5752EDFDBE4D374B26AC4B3E27EFDEE90078E4474C57F29FB6DA77 - BDDF857D19A6A3EC01CC365F0703A022D17558C564D889890AE21D6F7FFFBBFF - 147E9877F4BCFC58C747016CAB43B9B01223671B7F8D7D97EB7DF2DE37F54247 - F9B7D6F91AE44FCD27965E990D399895F9F764F6EDE55F585858585858585858 - 5858585858585858585858585858585858585858585858585858585858585858 - 5858585858585858585858585858585858585858585858585858585858585858 - 5858585858585858585858585858585858585858585858585858585858585858 - 5858585858585858585858585858585858585858585858585858585858585858 - 5858585858585858585858585858585858585858F87FC07F015C8F4C6B11F4E8 - 0C000003CE6D6B4254FACECAFE00800953000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000000000789CEDDDC96FCD511887F1 - 8B86549A348A541043CB426221518A8544BA450C910A69246CD809CAB2829585 - 7958585861272212155AD3868488296123C49C98A92186EB7DD3AE457ADE5FDA - 6FCEB3F8FC01BDCFDB734EEF3DBFDB72A9E57039D135532A97CBD093DADE7D30 - D398014911FDDD29FA4B8AEAFFC454310372A2FABB0DF49713D9FFA919C90C48 - 89ECEFE6D35F4A74FF93F49712DDFFA76960066444F7771BE92FA388FECF4D2D - 3320A188FE6E21FD2514D5FF34FD2514D5FF17E7400945F577ADF4EFF78AECFF - C28C6206FAB522FB730EECFF4E589F7F694FEC7F86FEF2AE269E03673003D2DA - 12D7802DF4975653EABEDFD1DBFEAFCC306640DAF1C435A08DFED29A12FBDFA3 - BFB4DAC43DE09B99CB0C484BDD03CED25F5AEA1EE0F7036B980159BE073C4E9C - 816DF497768C7360D6FC0CF727A1FF77338F19D065ED2E27AE01EDF497B639B1 - FF33339C19905597B807B81DF4975511B007700ED4D69AD8FF8769620664D55B - BBDF8933708EFEB27C0FB814700E1CC10CC85A9FD8DF6DA77F9F1A6CAF7F6F4D - 09E8FFC68C6306FACC6B7BED7BEB6D407FB798FE7D26A25FAA4E339019C8B6BF - BF973493FED9F6775BE99F757F3F4B8C6706B2EDEF96D03FEBFEFE99C2206620 - DBFE9C03F3EEEFB81F9877FF77660233906D7FB794FE59F7F7E7CD2B98816CFB - 3BCE8179F7E77E60DEFDDF97F8EEA89CFBBB5DF4CFBAFF7D33801928D4267B7D - 8B703DA0BFDF2F5D407F49D383D6800EFA4BF27BBD0F02FABF34A39901494783 - D6803DF4973427A8BF3F2BC6FD403DBE073C0AE8EF9F0B2FA2BFA4359C03B3E6 - CF8A7F0D3A078E6106F458B38B416BC03EFA4B5ACB39306BFEAC7857D03990BB - 219A3A83D6804EFA4B5A17D4DFBF4B7E2C3320A7B2D4FD795EC40CECA5BFA423 - 41FD3F9949CC809CC6A0FEAE99FE726A02F7801BA692199013B507B846FACB89 - DC0376D35F8EEF010F83FA7FE61C28A925700D584E7F39753D7FC345F4BF6586 - 3203723A02D78059F497B33AB03FEF07EAF13DE06350FF2F66323320E742E01A - B082FE7222F780DBA68A199032C47ADD099C81D9F4977328B0FF01FACB6908EC - DFC539504E75F01EB092FE720E06F6BF5BEAFEDF147DFD33E1FF45EE016E15FD - A554F7FCDE46F5BF427F39CD81FDFDBBE4EB990129134BDDDFFD1A3503FBE92F - E77C60FF9B25EE07AA59167C0EDC497F295383FB97E90F000000000000000000 - 000000000000000000000000000000A01FFB0B0D37C18DE54E772F00000C1849 - 44415478DAED9D0FCC567515C72F99B6426D502DED9F9AD386225918BC2AE03F - 36B3321DC64A513273F3CFB4444D6B96621A33C904C36C956158CE5A2686AE3F - 0A9AE8043474BE625BE19616A6AB3417593990BEE7BDCF4BEFC3EF79DFFB3CF7 - 777EE7FC6E7C3FDBDD610CCEEF9C731F3E7B2FF7B9BF3B6ACB962D458E8C9AFD - AD5508931553EEBF65C9994F56AC390BE107DEBD2BB000BDCEA9FA43E8F70284 - AF29AC7725D6FB926583A87D1EC2171452CD41ED0B2AD67A1BC2D3385E6BD963 - 0D4E462F3FACE8651CC2935DE6EB96D558B7CFBBF98EFDE628389C84D1086B71 - ECAB9896820BFBA5E028380D5EC27138D67ECC7B0041BF990AEE7308572BA7A5 - E0C27E29380A4E8B3BB0F6F1DE0308FACD54708F231CA09C96820BFBA5E02838 - 2D9E29CA7F631BBD87D0D66F6E82C309F800C20A1C3B2BA7A6E0C27E29380A4E - 930BB0FED7BD87D0D66F8682BB03E1A30952537061BF141C05A7C99F70BC1F35 - FCC57B105BFBCD497018FE2E08EB70BC33417A0A2EEC9782A3E0B4391635DCE9 - 3D88ADFD6626B88B11AE4A949E820BFBA5E028386D6E470D33BC07B1B5DFCC04 - D78F303E517A0A2EEC9782A3E0B4D984E360D4F188F73006FACD457018BC7CA9 - 77398ED18996A0E0C27E29380A2E0517A28E6BBC8731D06F46825B86F091844B - 507061BF141C059782678BF266C3F3DE03C9427018FAAE084F14696E2E0C42C1 - 85FD5270145C2A8E432D3FF31E482E824B797361100A2EEC9782A3E052B10CB5 - A4F8BA574FB80B0E03DFAD289F3BDD3DF152145CD82F0547C1A562338E3EEF9B - 0D3908EE3884A5064B517061BF141C0597928B50CF7CCF81E420B8D4371706A1 - E0C27E29380A2E257F2ECA9B0DCF790DC4557018F67484BB8D969B8041F757D4 - F32984EFB90D448F6FA3D733AAFE1005374037827B7B513E86943BA7A197C515 - BDC8F74CFBBBCCA781EBCD066FC1C983F5B235D26683E5E4BB391B2AEA3914E1 - 9CC875E4A7D1D88D02E4A4C84FB62FD7FCFB3F47AF4BAAFE1005374037821B83 - B008C76B2C7BACC122F4F260452FF2D3682FDF5193DE8F8EA8E92ED4647185D6 - B95FEF4BD4FF37F001FA1DC23E916944F83BE383F1EFC4B552705D086E7B07B3 - 5E8930A5E65F97CFB23CD9F0B04BED149C2EF8303C85F0EEC834AFE2D8031F8A - A4974514DC00145C0598F565087323527C1E33FEAA4BED149C2E149C0D149C1D - 98F558844771BCAB660A79A2611CE6FCA279ED149C2E149C0D149C2D98F72D08 - 2746A4988B395F6E5E3705A70B05670305670BE67D14C23D1129D661CEA9760A - 1ABE6E0A4E170ACE060ACE16CCFBAD086B8AFA97A972C3EC68CCFA7ED3BA2938 - 5D28381B28387B142E537F81591F635A3305A70B05670305678FC265AA7C9EDF - 8B79BF60563305A70B05670305674FEB3275358E3D22D25C81795F6A563305A7 - 0B05670305E703E62ECFBA9E1491C2F4660305A70C05670305E703E63E0DE13E - F965CD14FFC1710C667EAF49BD149C2E149C0D149C0F98BB845FE3981691E697 - 98F9074DEAA5E074A1E06CA0E0FCC0EC2F428879F44A36BD909B0D7F4B5E2B05 - A70B05670305E707662F9FEFF545FDCB54E12B98FB1793D74AC1E942C1D940C1 - F981D9CBC69FF28ACF98CB54939B0D149C32149C0D149C2F98BFECE37875448A - 57707C08B35F9EB44E0A4E170ACE060ACE17CC7F6F04D9FB306613D05F61F631 - 9B6956D749C1E942C1D940C1F9D2BA4C95A71A0E8B4823371B0EC4FCFF9AAC4E - 0A4E170ACE060ACE1F9C83F310AE8D4C93F4B343C12943C1B5E5DF016187C8DC - 9B913B786787F13B1924ECA4B0566A36A197572B7A913B9F3B2AAD2797A9B16F - E892AF8AC89BB79E4931906482C320DF82303B49F27ADC64F2BD1B0A6E68FEF3 - 112E8ECC3D0FB91776C86D293879065376B48D95756ACE462FB755F422EF0B79 - 40693DB94C1DAB906706EABE3DC540520AEE4A844B9224AF877CB1F0F1D48B50 - 706DF9E7225C1699FB52E4BEA2436EEBF7A26EE8329F27B3D1CBCD15BDEC87B0 - CEBBD06D90C7B6A657FDF459872482C31065B781B5858EDDB5A87CF1B352EF14 - DCFFF2CBEF7D3932F725C83DAF436EBEF83924B7173F778B48A80FB5AFD14E9C - 4A7033106E8B4EA40B0517D64AC15170B970396A9FAB9D545D7018A07C2F6645 - 1177FB3805145C582B0547C1E5826C8229371B9ED64C9A42709310561571CFA9 - A580820B6BA5E028B89C3801F5FF5433610AC1C9ABC1CC76ECEC010A2EAC9582 - A3E072425E487364A7AF05D545557018DE9E457973618CF968AAA1E0C25A2938 - 0A2E27D46F36680BEE04849F380CA61B28B8B0560A8E82CB0DD57736A809AEF5 - 0D69D9E973AAD360AAA0E0C25A29380A2E375E2CCA9B0D7FD048A629B80F23DC - E937974A28B8B0560A8E82CB918F553D91D12D9A82939D058EF29C4A05145C58 - 2B0547C1E5883C4A76047AD9149B48457018DA6E4579736177EFC98C000517D6 - 4AC15170B93259E3668396E0AE4138DF7B2215507061AD141C05972B2AEF6C88 - 165CEBE6423F8EFDBD2752010517D64AC15170B9F2771CE3D0CF733149340477 - 2CC2D2226EEB620B28B8B0560A8E82CB996BD14FD495A186E064EB95FDBC27D1 - 05DC2E29AC35B5E0AE2A74F6830BB6DD3216DC3B10FEA8B0566A4E472F3756F4 - 226FB2EAF72EB44B44C4E3D1536D4969086E5691F7CD85411673C3CBA0D6D482 - EB439812997B2572AFEE90DB5270A311CE28F2BF4AB90BBDFCB6A217D9C2EC34 - 835A66E298149943FE1D1C8F9E96D54DC02DCB95A1E06CE03B19F206E76722C2 - 230AA956E0FCD4FEFA1905A70C056703059737383F6F2ECAEFB3BD273295DC64 - 988873F46CAD3A28385D28381B28B8FCC1395A8C70AA42AA853847E7D5AA8182 - D38582B38182CB1F9CA343101E544825373227D479670305A70C05670305973F - ADCB54791A61AFC854222979F3D6D29E6BA0E074A1E06CA0E09A01CED3A711BE - AB90AAD6CD060A4E190ACE060AAE19E03CC9BF852770BC3E3295DC6C3808E7AA - A7D7375270CA5070365070CD00E74982BCF7F4708574DFC0B9FA4C4FEB5370BA - 5070365070CD01E7EA4C841B1452F57CB38182538682B381826B0E38577B23C8 - 63926F884C25B29AD9CB6698149C32149C0D145CB3C0F99277251FA190EA5E9C - AF23BB5E9782D38582B381826B16385F67217C5321D5F34579B3A1AB7F1B149C - 32149C0D145CB3C0F992BBA8F26CAAC6CE43D7E19C7DB6AB7529385D28381B28 - B8E68173F61D84D31552FDA328DFBCB5BE724D0A4E170ACE060AAE79E09C4D46 - 58A594EE13386F3FAA5C9382D38582B381826B1EADBDE856163A97A9BFC13115 - E7EE5F23AE49C1E942C1D940C13513C5CB54A1AFD366A86DEB5170BA50703650 - 70CD44F9327501CEDD9C11D7A3E074A1E06CA0E09A49EB32F5211CFB2AA4DB88 - E37D23DD6CA0E094A1E06CA0E09A0BCEDD29084B94D29D88F377EBB06B0D2738 - 14218F55ECE93D0C45D66310AFA45E8482B3C1F8A533F2BAC07DE497963DD660 - 037A79C9BB882A5A3B8C3C866317857492E750F4FD72C7B546109CBC11E921EF - 612822AF1F5B977A110ACE0687F7A2F6B44D8F13B3D1CBCDDE45740366BA1CA1 - EB47AE2A38187D77FC7FBD9104B710A1A7AD4932872F7E0E6BA5E0B6B3173FE7 - 02662AAF2EBC313A51C9B04F3674141C16971FC71FC531DA7B108A507061AD14 - 1C05E742EB32551CB3AB42BA7F16E5CD86DF07EB0C23B893101A31A81EA0E0C2 - 5A29380ACE0DCCF51E84DAEF3CDD8659E8FD96608D6D058745772CCA87622778 - 0F40190A2EAC9582A3E0DC50BE4C95FDE6E466C3C6B6353A08EE648446FC4765 - 8F507061AD141C05E706E6FA3A8487711CA094F210F4DF7663B493E0EE4338CC - BBF904507061AD141C05E70A662B7BC49DA594EE7AF47F4E5BFEA1826B6D2D2C - CF76BDC9BBF104507061AD141C05E70A667B5051FE14A7817C17EEC0A1371BB6 - 159CE683B0B941C185B55270149C2B98ED1B8B728711ADCBD4B6196C151C16DA - A928BF153CCEBBE944507061AD141C05E70EE67B3DC2D94AE9E41DAC13079F5A - 1A2AB84F22DCE4DD6C4228B8B0560A8E827347F93255381573F8FE40EE2182BB - 1F61AA77B309A1E0C25A29380ACE9DD665EA0338C62BA55C89394C1BC82D826B - DD5C588363AC77B309A1E0C25A29380A2E0B30E38F23DC1A9DA8E4051C93308B - A70605771D7EE35CEF261343C185B55270145C1660C67B15E536E46394522EC2 - 2CCE1D559C72835CFFCA4B5935B62EC9190A2EAC9582A3E0B20173BE1B61BA52 - BAB538A688E0E6E317177A3767000517D64AC15170D98039CF44F8B162CAF922 - B8ED654B5F0A2EAC9582A3E0B20173969B0CFD9A39FF0BD8DE5B61A2D0F6B300 - 00000049454E44AE426082} + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000001900000 + 009108060000019A93DE4B000051CF4944415478DAED5D057C1447175F3B8F27 + 5870770910DC5AA4B4C5ADC50204D7E204777729125C8A43A105DA0FB7E0C1AD + B805877872B9BBDDFD66F66EC3E672EE81F9F35BEE6E333B3BF6E63F6FE6CD1B + 1CFB4A801BFB83AC56C888CABD3ACDC65896D186C4C975DFB5F52F9A375F9CBB + 136D7146BEDFBD9C5525A7A4FF26E532EC54DBFEB8C5B17A4A46EA6E59C8D234 + FD25104962673A0DC97A1981A8B5711E2BFC7DB6CBF0AF2323090F9F1EBE39ED + F71FAC89FCEA9B1775755FEF80ABB4FEDF2BE6CA770A86615896AD1C9CFFB4F0 + 19FE6F7A8F10E022C1A5869F20CC71B31901C24DD4DA309716DE3A13368CC471 + 9CB1342382C26801AE7DFA7F87B50CC3A8688DF25278840CDEABBD711EC36AD3 + 05134C9B8A5FD84A326564D2C48997FCFDFDF30E193A344FCDCDF335AC8636FA + B0994C94021F7EBA9FF7C155025C69E0BA022E58FAA3415CE774995582EF8632 + 524DBF78C14581EB28FC34989135AB57B3FA89E9D1B3275E73C35C06D4427A38 + 7B7B305DC2F78344B410FC369811708F31130F0BC210E9193194893B77EEFC15 + B97A75A7E4E4E4447D79014D8C02793359EDE0198DE0672BF0C2BF4C65045C22 + 5D8208418DA8F4A225759F34FF1DA485006961F143870EB5791D13B34B269361 + 1D3B754A2FE9552B57AA7BF7E92386B916BC50578F3876366C98A98E42AD6B02 + 1CFA55AAD3A243992AFBF9788AFA67DFBFBE59987E46A4BA8CB096CA080FD8C4 + F0A54B97E69549A52F6033AAB36D317BBAFD6F5C02376FDAC4760E0BC30589B3 + B83B066171BDB0AC301E231991EB32420B32C262A601338A731981BFE6CC9EFD + 7864C4A8A2B536CCA3E3EE3EFCFBF6EC55CD0C24CE21BC622C23D6CA88EED97B + E0A344A24A29E512337DDAB43B63C78D2BCD27F6E5DFC7C63EDFFDCF0CFE017D + 8167685A7D2E7C94D85842F5EF996B5A9676BF806FB0735D47E086DEF7E52681 + 93B5D6CFD56016C04CB3727546609A49DC5C22F4C1D28C262A7CA4C8920CBB12 + 994AD65466180D6852DD0D372977C360131107F8650F9D3726062709AE0B25C4 + 228CEFCD3C151E9D3894110188EFFF5C49AB1392D27B0D59CE6CE4E11FBA786C + C60D262CAB29555F7F46F4993C6AF8F452EC87D87BEE4EACD51981B0B75680F6 + 8A5F7BFBB20EFC6E446D3D0FAEEAFCDFF99B8270F07D19D2208C47F88CC98CD4 + 5C3747CDF3882D99A9B3693E0B8714FC7306883617B8DE08E355D334F1DD9685 + B42E0399DE258C278DD6F4BA1C1EB1DA6846B66FDBC6C6C7C76B802E22B2A756 + C0B33504CF9DD3FD8EE2CB095C97319DE2C4C70B6A91A8BD693E9F91DAFA35A2 + 174FBA76989E11A044A94892CC307E82FA892E410E137C3E2E3E0EFDDFC28C08 + 13692E1E2E235B366F66954AA5C10760666AAC9B9D4490A482BFC73260D0D8CD + F4A0514FCD852FA44C6504DE025775188ED7C575854CEBC7A38B1BFE9D12C685 + F3FA7AAFDEBD450C4824FCBE3A3292EED9AB17AF1F67EAC5CC0CE3E10BD4866A + D14446CE81AB864006CCCA887EDC5C46B866A4D3470C25B2C29421E7BDF2E7AE + A6FFB0918C184A4006BDDF4046B86674266C182E9011D2503C82F80B83EB619A + 46F3D7E5EE11CDF18D1B36B05DBA76C56BAE9FA3C109823494C8DA5B16B2AC60 + 2ED81E35D7540D592A237AF171610D4D2EB067BB8EA0F8E584BABB7E67E994D4 + 0C11809213819696499B2CBF7A5A336FB174BF819234D9B4ACE97E8D154CFA1F + 408DA8418D509805305623C69432276604D61A0C4F5BADEA7AEAB82B43A24A0C + 08DB10145AAE4B56CB44A68C68EFE078BD3DCB19A08BB0B0CB05BC41BFBE7075 + D7D355DBDBBB3BB1D665248BC2E68CC0D12DC6D59F76BD04769D98F686C5EB27 + 0899615585D45C375B85EB8D2D79800A61635FC63C383F784A695F6F1F8B26D1 + 1132C3A20AD1009AFAFE8F452AA02691C6C2C4DF7F72E4D6CCE58DDC9DA1AC0E + 6BD43DA8CA195542C0885213153E0A2E3921E9B0035675598646C142C01100D0 + 1C2518AA149B6135A9D7D9B68465542A93619C3DAEACB7798148C330697AE96F + 01DEBBDF92C13B402E10F6AD30AC70C18C07D428BEDFB250C37E790F3F4D60F1 + 42B381F43069B486BA1C1E61309D660B6EFAB46937C68E1B577E7564A4EAC891 + 237376EEDA358E108BA81AAB67AA4D3DC7AAD49FA27A8E0E72501D64809142B7 + AB42C0984419D57544860A8123C73A9BE63BBA4260BC5894DE2A288F0C370982 + 20C33A775E5CAB56ADFEC65EF2E8D1A363B366CF6E00A75B6AAE9BA3114C0F65 + 02E0157554B8FB161BF50A23DD5EC4C8DFD317F9050567B042CC2DFC5B981E83 + 3D49FA0D3819070AD7ECD40B040300E784418219AF82794A959FF8DB1D631503 + 87C38F37EDEDFAF6F8F94D0E2860A3E9335448D65608B814C2BF9F091B861991 + 108B00D304DE213441A90FAEC3822073409851C2670C5A37C119539AA65377EC + D83110DA9EFDD2AEDDD4A4E464EE6FF3E6CDAB3672E4C873E3C68F2FF1FAF5EB + 87DA58321BD9E9E3CE8EBF67C61E3A35C6D6CAA8B67EF6338A20F31BFBFB902A + F55BB42E1992612A4D58E0C50373EC5FDBA4B3B90AB90A2EE1E2012E30C01056 + 885D5D960099E61FF1E8E8E871D7AE5E9D0A7FE85B6A49B205E4CE56B542DB57 + 078E2FE2EFA5CF101B40EDCD0B80CC1897663B26582B808F6BA6C208AD5C0C15 + B8D0EAC5032A4438ED9879750716B24422C178EBB2DA5B17B1AC5A63B010FFDC + BB976DD9AA95C1822D3BA6DF11DFE2851A184BE0DFEDFA66F397293EDA5229B6 + C0DA0A71368708DE0B2B15EA0F7CF74727AA94E21B3DC731DC8B007F148D8A8A + 1AB461E3C68106126A51CB2E39A8EB96808AA53BE046C8047209185958C4517A + 895F8A59301A0412120924E4A6AD150286D1CA0BDD4666A8109A610830C436C4 + 21BF6366A404649704F9ED6B266FE9EF07436CEC62F828DCAA1501A8F8897CBC + 484D8A122344146702CAA84C8E7ED3414A25D8A95F065AD565593884E5606F97 + E5683DC490819F81FCC1990DB813840F77DEF0468B1D4B595A99664DD99984C8 + 5B819D68D5D75A5B09E25B9C39365A4892AA65FB57EE1BB61437A5689881ADDD + D4B70C8B0A5BDF40C06CA424819DE93C0CAE04A3392D2B6175EB8764A5BFC302 + 2E56C1D5457767E66BC057B3F4F9B5C01E7E805302B02B63F9E55C304CC42892 + FCE688D891B0BA428ACF1DA5CA9927580486BB9ACCCFE338E52527D4C929F4D9 + B06116CFF9207C81C5150287C29A5425667412D143F7C26435585C2166465A16 + 19E921988745151279E1C4E04DFF452F34F677DDD22D940E34D2B2131655C8CC + 95CB0A1F94291F19FBBBA9153004EB608DD589C9D6FF70DDAE4EEF4E5DFCC3DD + 19CAEAB0B842EAED59CE6A92524C86E1B7C2BB3B535919D6592E6E98CB9A9A41 + 393F6D4913FAE18B83EECE5456865515F2DD9F2B59754292D1BFBB8ADC2FC53C + 0BA408A28CF09E6ED75B3D0BDE8D83B0274158B890A6163EAF1F302E35C5EB49 + DCC74A825B3741B85803BBF40C210A84D5E88735F49E0C89B3B630009730A69E + 038A2176B2753FA712BC014985736BD040CF622708962CC29D7DF1A852C4897D + 5704B77E00E10E5BB84EE30FC2C619087B09DCAF6AEC218B0BEEE0DF7FB33F37 + 6D8A9718D0795D5068F96EC6C27153EE832696C11252EEDA50D616C140A3C84A + 154203AE151B5BEB315B21AB56AE4CEADDA78F57E4AA55EA3E7DFB4A19D02D09 + D7DC0D019A07816130692E6E5B501B64D0406964A50A81859EF34C97E1EF0C3D + 646CFD3B7DB56E756424D3B3572F027EAE8A8C6C76E5CA9503F0BEB935124222 + C64EFF3AC8E15D17C86075CCF04631B84F17EEF1E50B204AF0675861F5C0C549 + 16081B656785D4C0CCE322084BEBC242DBDBCBE6DE67B042E0E6E88484040D21 + D8A9C7EA163CA074F4EADD9BBBEF5BAA48B532237B9F33552971F71E1DBC3D6B + 651347578A25D02B70283912A1B5883D15E280F498AF90654B97BE934AA5D9CD + 45AC5028B0F61D3A70CFD5D9BE8465D2DC6B786D6101B8BD4274EF1472DF0310 + 5771FD30DC1FD7AE59A3D6AD6F982D3C282DCB57AC687CEDDAB5C39CC5E2C679 + 34C61AEF52199AD69C73C0BE91BA9BE6E3B476DDC520F46DA56CA910A1A96AB2 + 2A0D5FFAC32F158C7459662752F97709C2C2F24DC5BE6CF956C72953E5B77B8F + CFC07B461DE5192C5CD065012922351A0D16DEBDFB97CDC81BE69AB40B7E7A22 + EA8F980D7F76B2B34258DAF81A3DBC2F877DB69D1502C59DD05508092AA4B291 + 0AB164F010A4237561D80C031D502115418564B0C8C477EFDCC9C6C5C7678849 + 2E9763C78F1F5F7BE3C68D7F5AB76E3D3D2020A030E414388908081E0704CFC2 + 4F3EBC7791FC21E5C60D88366A24A7750161979498AA7412C7E9939D874A846B + FDA16B67B1124A4B8320519AD361C324C2A166E95553587FA95CBF4268418560 + 262AC4AE51567AE183EB8C5E578983EE4AA3EBAEB8E1AAD01D050F58195B366F + 56A7A4A4B07F6CDDDA037A493C7EE2C47A6118737C72B6F7183F4CA98AC76C00 + C8D464F031C1D8DF61851CED38582222C92F15B20E5408F9A5424E810A03F948 + AF9032ABA6B27ED22F7671EEA810FEBD462B44DF88BA70D7D68B1F6FDC3B8477 + ECB06DEB56CE5371A7CE9D3349022993CAAAAF9C6674F651ADD13017BB4758AD + 9BE8DC69985CA7CF82152234B64E05E1D24515DFB07E3D0B3941387AF22D51B8 + 72D9D17D2F535E0AEC64EB8C1687FA2E3F8530D5AD3024819DEB34D456EB7793 + CF810AC14E850DCB90711B2B24FD3DBA0AA968A442CCE643E0E3453FACBE679D + 0C9A3BFEC7962D6C6A6A6A06E9E087679437A810CB4D40719DA7118352A06168 + EC42B7512E1B02DB5221990AD5C1C35E1EA07CE1F68F71825B3F83780FE9D2FA + 451B87DFCB8EED7FD8B758C186F03B377B0BB7A4F1AEED4D80108BC43556CF34 + 6A104C133876BEF33054213A08BB47E1FBF14D9B36E1CAD4544D9FBE7DC57058 + 5B6FF7EFAC26F9CBD66743DD962118F2DF26440AADC1AE86475855218DB72DFD + 2D499556D45C38D065318043068B043661CEAC105098CBCCA5A96FC5DA233A96 + AD6A740F79C5353358B9E8CBF6CBF40A81FF81616DF6CF9F3FBF87DF0D59BE93 + 320976AA9D81AD04044E4A03FDB3559A1DF1D25465405CDFB0737CD2894BD32C + AD0C38D0A8BD693EDCD564D6BECB51A46E45859825F5AD2DBAF9E7F30D347948 + 86FEAC75064F533C4C2ED5826E07EEF3A0952A8652C808757C226D8C333265CE + CA29143040806EB9F4F7A27F6D15228C87866EF33225A258AF5F5766AF59B9B7 + 3585670EA940C18EEE6A1DA11B996637882C5C219DC147FAEEE484B454C3D3E3 + D6EC5CB2049EEC31CCD360B0A02C99C5B504702232F1E1B3A337A7FF8EBC0459 + 08632D97AAB57E4E2A66A1F7426350933876B193EB86BA5F034C161650F42069 + DB64B30B749894A86E2315B63CFB2DC374EB0523284E524CF8C9D2079C113EDF + 7334C9A835689F880DB0B83BA93863C45579DE9C212CCD30FAF355DC76692F05 + B9B4743D4A9DA6622A868420EB451BE190FEFD5BDDC2EC0C20C2F530A00A4140 + 3001A70B08A0178AF7145FB5660DCABB60DE8A5E05F25492E7C95952ECE7939B + 94887D089148048D5318953A499D98F459151BFF3231E6DDB3B183063F4979FB + E149DAA7B8574D7FFE198D13105C0EA709488901611B73D4AD12A64E4C561346 + 7C611B039C70E196C46412F2F5E133AB9EAEDB0D9D1C21014170391C2E209567 + 8DBC28C9115451B74862BD2315A0612A3FC6DE8F1E31B38CB5CF2220381A0E13 + 10E8AC7FD9FE9DDFED4D7A7D98D11D5B61533C29A9EF2FF41D9FC3DD05838000 + E1480121234FFFAFD3F697F7D69A3AD1C214A0156B4ACCBBEBD7C6CEAB64CBF3 + 08088E86C38758BAC32C0C9E4C66094899143BD56E009A5D43F00838B62102BD + 2367DD2A1D0A776EB51E272D33D432188D93768A2220580BC737421C274A0D09 + DFE95FB6780B4BAD190D2145ADC2AEF618838404C1AD704E030442527250D73F + 022A946C63E981B486608B67724F079CCC30F577A13357A8D7618E99DEC62981 + 75ADB978AD71286B2A3F9E9017FDF056BFCC0109361C31108C9CF56B84156CDF + 74254172B6CEB6F8CE667192C42F0D9A9C5D151BFF11CBE26B21A16B67A54A29 + 4A64A22C6045B601D7C1335D86D3B5B59B141C9167D888D3BDAAD4D65A6C1B14 + 023543A75DE8364A6E2E42785EC4C598A715C69EDC7F8931EC3500BEE347701D + 03EF654CBDD386BCF88338E3CCE545105E0AC2DB74A684C305046E50A7288A54 + ABB53E82E0B97AB536CC53D32A1566EBE90AD01170E2D317A76E4E5D06F7D765 + 392139F9EC013EE1F4DF074043FA01D3F318A0072820ADC17540E7ADC69179E5 + CE07845F4CC56BE8F01443D00948C8E813FB2EB386DB117C4763701DD59D88E6 + C8BC70DB9ACDE545085BB75DD82520952A55C2F3E7CB177AF4E8D1470989899F + 091C277BF7E9B3B14A6868C76EE1E119E2B6C471A6D9C4CAA5D899B6596B862B + FCEF4D64922AADC9EBA4F83D9869E18070BB800021569ED33B54D310A0856AD4 + CBC75946402C39E5C810EC6E6C2B962F4F028CA1983F7F7EB5FBFFFD7771FDBA + 759C8307A1EF01ED9B70B250A716D3737D576D189CEDB2E5B01ECE048561E8E7 + 7BFF3734E6D0C915D06D8ABDE977364005C2E10A3CF7D192E145FA104B2720C6 + 8658C6C6FDACDEA7307CCEB3BA2196994695E9803A832FB24D401C36C4D21310 + 61BCB8DE270F18E60E78AE9C352FB3A491C25E8F96CBE5799B376B36312424A4 + 4D7070B02F496A3B43A552894181808DD74BA1C0FF3E70606EBD7AF586C29374 + BDBCBCB05FDBB7CFBCB7576FF7BB2D20019B9CCA026CA273A661713AF59C4611 + 86FE6EA281C30E037A4A6E8BE9F95A32E58C4A0FCE1210871DCF60A28C60A3FC + 095C7B31C39D082C9F49E09A2574DE650A462BAE4183063D7B84874782A15306 + 878BD6000A0D78169F32756AE9172F5EDC67053E39CA8EE977D0A7488146BAF5 + 12DBD8043C7777E1BA7AB1B7FE3B0B99C59E42CF4AB040405A993A7ED41D02E2 + C2B28169F90BD34E10181BD21602697A6A497C9932067D60252626726E95EC39 + B330434901C1002C93DCA76F5F1FFDBFD9CB26DC4C174130DFD2914A48402C2A + 23E886053A8FD14F1BD7B15AAAB4738180BE40B668D162569DDAB5071336EA07 + 460A1182E1850DBA6EECD0B16326FF5DC57AB5FF3D5BB50A3D6DD54D20AC74E5 + E5348C3CB617BF18F3B401CDB2D0E7BEB5C30AD890B682EB1EEFEFCC105C2120 + 204C1FF03D2F66A0F127ABD264D77A8E1D023D8D5831C49A8539460781AC3011 + C4A9D4E5059E246F68F607DE9B6A2A224B84041E39488E1B3B7677FEFCF99B58 + 3A9462B4CA313FB68602C051997EE396CB6458874E9DF03CB973179D3469D203 + E87D6BD1E2C58DEFDDBB778235E0E0B5DEDE15AC2631D9A65283232E2518C145 + BBD0479D8134E0634EEC2F7CEED5E387B4C58E72323C4FAB19BAB59AA60F8006 + 6874C868F4EC6E96D530187B50A956B702CFDB2B20D0317B35CC809043678720 + 7EDC4A0171EB2C96A1F4C52A533EDFE93D21C854207CD6AC598AE05CB992542A + A39E6558A9548A1F3E7264D1A64D9B86700F65F41280F38DBD5DBB76539B376D + 3A2E55A94C3756F4F6F6C67EF9F5573C5BB66C79972C5EFC22C3CC9601545D3E + 258692CB729AF2C26C0A9442869D6CD3DF6D42A2AB309B8C35A14FA9DE156BB7 + 6E5BB2D2019189D55FA19F2921A0CFA922FED90FAE6DD2A995D0EF943EF4FD50 + E9E15B111008D8D1AF01577F638C8B4747478FBF7EEDDA4436B3893A0B865EB8 + C9060D9943AB78674A24F46C0A9D2C4356118BC55858972EF02BC19A779E8957 + 9C39225A96335B395B6CB9589A56BF8EBAB2F1D29C957DB20506BA5471B7B711 + 2001B1188E121008584EDFA5D19AB397C323329519FEEFBFFFFE1AF3EAD516A1 + 8000855AB3FFAFBF8683BFFDCE08D71A4083A5A412718DF5B35318A58A1BD65C + 1E3C359B2A2EE1A37EC4244952CD9B371FF543A3461345007DFBF593A4A559EE + 00ADEECE65AC262595B569BD4422C6A25C6C0D0C2A0A9E3201D73C6C7E2F1010 + 1608C8930E65AA98F4BEEE22012906BE2B30C33A080904E4B2950252D141450D + DF759D9FA605F18662E68F0F806501A77E0B60562AEDDCCD1DDBB7C3992BEE06 + 148EA3C78ECDD8B367CF144630758A53145E7BF37C8651A59F296791F7DEAD7F + FCC1C6030001F1B3BC0870B2688F5F22B3D7A8D8C51616D1300C76A86D1F7980 + 978F7D8B2D1E0A570888B93478FA2C9621587B0402040E9467EAC5F3E7F3AB56 + ADDA172AE97058A53FD324F2F50EA8BA74D2274CB7F690FE30456251E1A3A44C + 9ACA264330533077E49B294087F2FFFC32C0DB5FAE48B229020F071210DB6142 + 47E4EE83B466E890D30345464626B10C23BE79EBD6DEE5CB977714CE32C1E10E + 9DAA3454482C2911E3A7DBFFE6D0E10C3C6248E72EC8A67859318545B51FECF4 + 2156E7FDEB89A7719F1C169FEE780DB38DC9990202CA5D19E51C5B2C87ACA4EB + 8E84B759E0EA6C9A9F9B669857469A169DA8529EB8DE63EC0FE9C78408FFBA6E + ED5AE6E2C58B5B56AF59D34D38BC32E4875F2FD18CC84B419C6CD30F87BEF7A1 + F5AD55A9C6C13F1663CB8EEE7BC0A768C1C61861FB222514DAF72F633E3C1CBF + C8E98E1F74BD91C3ECC1744A7A3BA0A41F7497926EA9352FDC0772C17A6B5EBB + CB8A011DE71FCDBBF917F40F8AB3E579D8A7975B3DADB7AF44B60433B0D20E89 + 812208E8517F3DECAC32656CF8B0617FCE9B3FBFA5F09E35ABDD7016090CC944 + EF4E5FDEF178F3DE41AACFF1EF8D850D6E54BB77E1B0562BC133C242B5ABE7C7 + 49123BD36908CCB853693D64CD745A2192586567650E9E308BE5E9E6EED02A77 + 7BCB70B3C719980348CF55F0010D178DE9B8BE20DD0916556ECD0D7355A043B7 + CAF99B3B0099EBF1EE83A3DF1E3AB510B3F3F85063E8F7CF36FCD6FB98BF58D3 + B63E3601098879384A40204CA4297D66CB2201A1E43245F555D3A18EE2883C3A + 0550381EFC7578D1FB3F8F8CE65D9D3A1A60D849F43EB435FCC6FB57AB591B56 + CACD812408AC7FA57AAD7F2D5D79BF29012917390D084866D984A3D2A201D9FF + D9DCAC6B1353025274F904D64F624440C0C8FA46CF7166DB051490F3AF9E541C + 7E6CCF651365013B91C397BB8F6642D7CE74908060D8DE36BD02F2FB05C63A22 + 3E53E98A4F535A383CC07122B072D94625FA763A8093DC09156EB779E2C15BF5 + DE98B4B84CD2B357F730270FAD10BE2D58D5D0B9EDB31BE7A9856B21EE049C1C + 202562C2D1B36808083C6C6A58E523FAEEF42A56A0A53DD6B7B642EBD81A63E4 + 817EE491663D91602038157635B0EC352BB52A39A8EB1E4D2A679C88394B5874 + C3288C148BF0D747A3163F5AB76BB0EB8B0AE15B84C31AB44FB182A115260FBE + 04875F2CC3D22066BB365C41A51B0C9F289661D81B931787243C7A7EC3DD8585 + F0EDC1293D3E4551B846A361E5410141B9EAD7E89DAD7AC54E09045302BA14C5 + A0CC707CC072DFE11A883A212925E1E1B3D36F4F5E58853D7AB54F170DB717DE + DD0584F06D038DE111104C000908028209200141403001970B089BF1F429B821 + 8AD5DDE7D302FFCECF8AA1453F04B7C2A902C2377A5E086AFFD4388F77E17C95 + 1579739593660F2C42C96581944226857FD324A7A8E83475BC3A31E95DDAA7B8 + E73E18F9A44B8BD64F523F7C7EF6D3F7F513DC5D5008DF269CCB2024962FEF80 + B09D01658A570DF0F3C3E83415C6F925FD02A1F56E664B5E1C277192C024FE7E + 18A3D160B1B7FEBB7075ECBCEAEE2E34846F078E17100227450AB9A2FAEA99F1 + 0C1408B8AFC4062774D03052AD5225DF9EB7BA51CAC3E7E7F8D831646B85E042 + 385A40C8809052B54A0FEF7992D5D8BE844129E458EA86BFCA5C3CF0EF9DF884 + 04DCD7C727CB1D7980F075C0F187781AD99E6B29F8F309CB55284FDEBC7E032D + 1422B8150E1310A89007F76D7FB450D58A756D3D9B109A977CBC7C73F3C3C86D + BD189AF6F8A30D10BE7E3894414AFD3E91F55778D97C9214102CEC5CCFD1325A + 99663B05212038100E1590D22BA7B0FE32B3C7DB1905299560A77E1988162F11 + 3C060E1690C9404014363F4F884518DAFC84E0497068632C3E3F82CE161464B3 + FF23B8EDE3DAB80525525FBF7B00CDDCDD5D3808088E1410A2D4E06E5BFDCB73 + 67A3DBACA4C7DEFE6FFFBD45EB7F61BFA113A3103C170E651069F6C03C95E78D + 7989D9E1F183F29263275BF743C32C048F80C31B62BD3D2B584D926D87E040C0 + EDB5B7672C0FCD2FF3BE7AF3C64D34CC42702B1C2B20044115E9D26A5E8EDAA1 + FD7092B4D9D11C52D6113C054E698475772D83AE4A6D3ADB439B28F0EFC09990 + 533BFFBCC15B022320B803CE1010A24C449F3F7D8B17FAD956659D4B98448C9D + 71F121380808FA705A03ACB7EB77784294CDCF3334AD8EF9E7D494177BFE9DC5 + 32567A8BF75068681A7618A61811A7042E47A1077547BD1BC4CBE8E234E5703B + C3FBEDCC8FBBF39221ACAD708E80005DA470E7163373D6AD3A18E822369F5F4E + CAA4D8A97603BE1A16B9FAE64503F061CA2D25553157BE63BAB0D02421D441AF + 6640BC6774F1E6041FF0783543E58A170FCC714E2196587454DEE59867DF91C6 + 7D0093E09DC775EFF4021F951C94170D88374A176F1EF051D84CF82B20BCCDB3 + 464E6D7C8E98D162693AF95CF7086F67A6D3159876E650DEC34FEFBD30738829 + 71A6CB70BCF6C679B05E8A82EB9E035E0D7BF85410AF378817F6F861E05A09AE + 4C1D173C6475CDCF9D828B05E6786349C415564F67BDC51263F911E6051E3370 + D54145190BE20DAAAD3D90A73FB8E663C6BDECC3B4BD03E1F3D8FA32E7090828 + 6CEFC2F9CA951B37E0AAF6A70D8771726E4659E6F1E67DDD3E9CB9BC9556ABB3 + ECE221A8D0E7A0A5E6C5CC943974B95F4BDBA8602F7FDF01AF86029202E2F5AA + A515902EE05A8519101088754D3A5B2C20E523A7B1DE12A92579290FAE6B0E2A + CACF20DE40DD895503C0B500332E20260FE8B4044E1110280CBCBBD0AA4B273D + A7BC15796C3DF71C829449C0502B6B1B315A7A7E3A1210B3B0464020B8B3D057 + FED8BE7F99ECB9ADD6471CDDE888E1C386EDBF76FDFA5FC78F1F5FC79F73586F + F77256939C6273A450D84452297EF2D7AC2724F0C82F3014990C1AD228CC48A3 + 14C2DD02B2160848F1AF4B40D2D362CBCBEC6E702B962F7FD7B75FBFF4F300E1 + B1CF2F5EBE7C181111518CBB4110645068D9C6C57B77DC6FEBD983BAA1162D7F + F961D9A7FDC7875F8D8ECE5243ADEAEBE7B0DA6355CCC3DD0292DF3720F88F16 + E15F9D80E4F3F1AF23A54467D7350DB36A5DCD6E01D9BC6913DB7FC000FFC4C4 + C4F8A0A0A03CB366CE7C2197CBB1F61D3A6488BBEAB2C9AF282F792E7B865A04 + 456217FB4DF05127252731B4E75BFBEA14D4D20CCBDEB2B45F70B78080170703 + A5F66B1310E87F2A194E5458FB32BB04C4CFCF2FC7FC79F3DE4A2412AC53E7CE + 789E3C79CA4C9A38F1164DD39A0D1B37B6BF70E1C25EE1AC4DBDBD2B584DA2ED + B35A10226F2FEC44AB3E5966A8052AF22DF808C22C2B6B424F40E02C967E4780 + EB7DEAC3D0381B0A88B7250202107CD63902721533BD0664296241BC41020199 + 87651410431DB0CDCABAC50F408F88863C1D6EDAB8914D4D4DD55CBD7A753310 + 8AFE2B57AC4881AEAF140A45461601CCA1C893B370C8F4E1DC5E0F9B8F796618 + 3AED53EC7F5786CF2CED80C2763A4045D6C54CAF7D0841814A3CAD7B0E1E2218 + A2F77758662BC0550A33DE6BC2C6E8A5778F01F15E708780E8F2A2D0A5CB11D0 + 80782FE9E2CD053E0A0ACA263BB8F61A7B0E5C3B60FEC1F3160FD1CD3552F877 + 4EEA4342423A366CD06078FEFCF92B04040468FF08DA38185A31BA70F8BA75EB + DA0C1A3468777272320659E4E0C183A30F1C3CB888E157C28190941ADA7D877F + E9A2CD750B88B6EA23EC7F2BFE68F6F1CAAD7F310FDF37A2EBE92C063C11D6C4 + B3B0BCE0825F15CC8880E87A6DC250BCEE12105BCAC19232D2B1132EBC6FEE34 + 5D6B59C464E05CB97215983061C22D6F2F2FAF9494145AD7EBE3C67A7F7E6A97 + FFBB4C26C33A76EA94296C9DED4B585A9966338B4090721976AA6DFF2C33D472 + 14400380ABC85531130262E259B709888BCA06E66F02B8C618C91F14ACA6E0FA + 57D8119942A60C80364BC2E9D9C855AB92098290EB377A6BC04DCF5214DE353C + 3CD3B38E98FAA5E432FC6B3245B10448402C2A23636B4EF09E1AA44B62695C19 + 22000241162952A4E2A409132E25A7A4704327BB8E51831A3A185E5DBA7C79ED + FAF5EB0730FC7088C049DFE28543CB46F4390FC3D8F80E20C60C9DF0F0E9E15B + 3357FCECA4B2F6382001B1A88CEE808F125866859D171AD26A0601C24155AB56 + AD69F7F0F0BDAC1D5B66F501E3A2280A1B3868906F52525222F66526032F3DA2 + E71EBF92459A40E3465B190A27093C7AC4AC02691F3EBF6068DAE3A77EED0512 + 10B3E503DF190CAE574682C04EFA3481E3F54F870D33DB5ED2CFE4080E0E2E30 + 7DDAB4C7199DAF3B0E408DC17E6DDF3E5381D5FE6311CBA8D576E92394B7023B + D9AAAFC70CB5740DD11661C5CDCDB0B84A408CE501465E223027BBBA4927D6D3 + 9474E1DF1DA5ACA707DAB17D3B9B9898E8A83CA403CE6691244981E115131919 + D93CFAEAD543FA16ADF6AE8FC0BD231FA3AEFE1E78FFE588F351E7DCBE770454 + CE22F0618B8225051537D44CDCAE121068259BA6FF4710390304E42E1090AD56 + 4CF3C2E9D8810E2ADE5410EF549D70C0A3307EC2320FA5E0EF9AE0AA81195E17 + A10183746859BCC29E2155EB9BEC90F00F1F3EE0B367CD3A5CAC58B17A7098E5 + A04C70904AA5D8D66DDB86B46CD162012488D4D4D45830D40ACC98029C10FBFB + 04545D32F103D0296C7E97D8C70B3BDED2BD0B8870ADA8C29AE9DF7B8BA58730 + C315630EA4B99ECD8502027BE04C8D07444E0301F91308C8AF562C144273F768 + 0715335C28CC56EB8BB9BBFE42A120A998418601E016F5C010CB6C7BE1026CDC + B08155A954668739BA192D56C700E947A51106B6D642E5FCE6AD5BFB962D5BD6 + 76C3FAF52C3C165A2291E09DC3C232BF0328ED45BAB49E9BBD76E800C256670F + 2CA6C9CF8AB66EE93A281C64C36D6B23A0D1D0A0D1D83C9C3027203536CC8D02 + 01AAC2D9466B9F0F593D9D149354178A205681E72D11904CD009C85E2020EDB2 + 90A9893E38016957B292FF80D07A71A602E2050B14E83B7AF4E82526D883930B + 283C7075FCEEBD7BE76FDEB8F1F7EBD7AF1FCA150AAFD2A54A3504CA7D072000 + 703895614A582C1663615DBAE0D9B367CF3B63FAF417E01D6C78F7EE461B4F9D + 6D8B5946A5366B126E24919C4FAD536DDCB736522E722AE1239141E1B4290FB1 + CA14EC4EEF09269F6BBB6775D49BA478830C92A25661577B8C31FA3CB42C5E73 + 2DAACB96DB1757D12CFB2D0B082C0B46CDD0172E8547D434150E9F307EFCFBBC + 79F30619630FA843809E9F1A3E6244EE8F1F3FBEE61ED23338842F93CBE55ECB + 962E4D50ABD534A9DB660B9FDDBE6347AF13274EAC5F1D19A93A79F2E46230E4 + 8AE0CDE0F54148C454CD7573D4B62AED2C78DF83D5DBDB29EF3CDE9F9890E0D2 + 93A8741576005C0D310BCCDA0D214E998ADDEE3DDE64BEDBEC8E8C7A9B9C6093 + 80A8699A8CBC7AA6CBCE7BD1DFBC806016DA67E14B172F66A53299D10679ECD8 + B119DBB66F1F8B09CC4E4CA15DDBB6931A356A3491FFCDDB640507071703ACF3 + C0CCE378C599232ECB7266AB608B47146E8BAE5A9378AEE7685F1B0ACC6E989B + 393107242016C151020201277486836B99B1D9431CF4FA2C54A685E057CFB76F + DFDEF338E8FD0DEEA38663606D3826E36D9CAC51A346CB6E5DBBEEE2E3993173 + 66C8F3E7CF6FC1992C4B520D875A749A799D481FDCCABD97023FD9C6B5AE4B75 + 95D51E5C1B31DB2B0B09886570A480A4A7D3D8DF0C0A0854B09F3C79727CD6EC + D98D317DD680C32B203039EA56E998B35EB5DE37262FA9932952106640FFFE5B + CB962DDB1AFEFEEFC183230B162C6862C661413AAAAD98F69E9449826C5D1B79 + 306D79C1F70F9F3CB3A7D0AC85BDEC018104C422C059AC00470A08400E10E77B + 83F95DBA64090B8D0A85C864AA2E4089815D36E5A81DDA599394AC616926C5D4 + 7066FBD6AD6C5272325C5F89193274685E8B920A842B20A454A39203BB1C04C3 + 2CAB6783A00FADF8539727DF5ABF7316902F97AD89800A832E7AE0FB6C662F20 + 20241090CBA6C2B850402A6306F69680C85920207140409E5AB10E021B584907 + 15353477BFA98B371BF8C86341994361E7F7A3E8878579BC05E2AC60E8417CE6 + 8C19AA6CD9B2A54FAD42C51A28D23DCF9C39B399D13325AFBD6521C3A8541A68 + 1A022DA1DE1C3FBFE4C91FFB4761861DBBE1A323228EE7CF9FBFFAB3E7CFA366 + CF9EDDD0520681A8BB6329B4F8B5BAF4E07E11FC73C2853343A7D676A5DB525D + 4F6917740C6232CD2E141083F1E856D2311B56D21D36EC05F1A6979125F1C2F0 + 201C6CCB566FA6C23B76ECB8B76E9D3ACDE05A061CC37B7B7BE3864C4242178C + FB4FECEF5308EA1E9CD712D0101FADDFDDEDDDD92B5B0DEDC980C3AC36AD5B4F + 6ADCB8F1F8DF060F86765809D61442BD3DCB594D924DD6BEAC1427DE1D0D1B9A + CBEE9AF040B84A402C498B27DA6219826E38D61C5CBB310342029ABD2659AD9A + 04BECDBADE735C86B68C7B7B799503FAC1759DAB1E262626267AD2E4C955BE84 + C0717970F64221D3873F8271F17A011CCAC4FC7372FAB3DDFF4E33C62063C78C + 3975FEFCF90D274E9EDC600D7B40D8719C342BA34449473AFEE6E3E27A700990 + 80D80E5BECB3B81BDBA0AE9094C4CD922E5DB6ACE19D3B774E09875735D6CE4E + C249422E549A6158D0C3BFB93860626E532F854C6295708007BC0AE629577EC2 + A0EBB6DA2FCA48EAE3914E83B339ABA0DD092420B6416766B3155CAD3023EB54 + 048E17AD9433DFE3858DDAA60B12978119D3A7DF067A484991484474EDD62D53 + A6A03EA04955B2FA02E2AC0D4B557F9F1C4329380F28B6ACA8336442CAF5D383 + 263ACA17AC470109887D30B5990A0848CCE9B061192693B840818181417366CF + FE0067B33A74EC98C1D1827FB912DF951ADCEDB0A11925D81895EF3EDE8E1E35 + DB311BF2C1FBA4D903832BCF897869EB462ACEA9C3DDC7EB2FCF59D9C7D93659 + 95D6CE24C170CE6113014049C781926E32CDCE16101CC383CF74199625F6A4DB + 82DA1BE7A5800A9362860524930163FA8FC855ABA0829EC91349F13E1DD60455 + 291F6668659BF79DFB6CD7A18131FF9C8AC48C98905804280C203E7B1D5EC379 + FAEF08DF5F2777EAF1A7B305A4DAFA396B2882B0495132042020322020DD4D85 + 71B680F4A85033B86BF9EA8EF66A02A762231C544CD085D1485B1E3CF8F01611 + F5EA7183332F1EFDC31A9ED1D204CA140B2AE7CA3F7A7CED9F3821D42ADCA0B3 + CE95336749A0ACDFC9C0200015260FBEA0C897BB324EE0461763A09CBC391A35 + E3C9967D636DCA324150A45844D6DEB25069CF3E75084A2CC2BA30818A6E1D3B + D9179109800226C79FFA6B286870938110DA7CD49C3E808050EE5E285CFD73C7 + E09241B91CED170B9ABB5F715031C185C2ECF6445067D37C9631B16B56C87C19 + 0A139ABD77E9DA35A3804C1972519137180A88498A844738E314899FEB112165 + 546A0D74338A31669573CEBEAB78BF4EEBB2D7AADC8D55DBB7AE07194DEAE78B + 1F6BD1CBE9635F40D50EDC98AC8527ACA46715E7D5B63EBCFEFA3972FDCDF3AB + 8080C07D31C6F4B0CA60B875156EC9CD5098128944AA5028023E7FFECC59EDC2 + 215689FE9D3707562AD30E37B3998AB7BB025C80D369EAE4876B7776FD702E7A + B7B1F0B2E01C858B86B78D0CA850F27B75429246B72FDDAE92E37C44A4A4C69C + EF37219F5D1199C0C34FEFF19BEF5F155A74E9F8232420594F407898F17CF209 + 6ECAC230734BF4384E06FF50BB57C15F9A2C3127207A2F80CA3243C965244E51 + 18A352610C3C2F0BC748522AE15E0B875280E768F0D52687D6065F0CDE797FE1 + BA7A73878C8A0AEFD6CD69E6EE3536CC7D06129CD71E3FC3868004C422384A40 + A04B583854332420E92BEB661BA6347B60DECAF3C6BCC01C3EA0702C58F08F52 + 28B0532EB0E4B5F4AC0F6B8104C422D82D204007C1C110AB9C2E4D86CA4B037A + ED1DDF1728DEC5A20A864EDED449C976791E71367096D5E44E66962DFBB5C7F0 + A0C040A7CC5EC11D7915D7CC98AB104BA0030287EEDF87400262111CC22010A6 + 56D681806070CAD7A2065F6DE5B48F606814E0C90222F1F5C68EB5E8EDF4F495 + 5A39995588C44E893B2E2D157BD86F8AC93C34DBB1FCCA9BE4844A86183D45A3 + 36B965170808B53CFA54F8B63B9757D186B6E680EADDD2AC6BEEE241395F5B92 + DEE22B26B13E62E34E0A2F771F8D87AE9D09D3039D703BCA69432A88576E6F24 + 205DB083819E5B7E33F47738C7D4B0608946E61B141867FB142D50B1ECE8BE17 + 6D313F77015886A6352FF7FCFB5B9E38D5EAF351516E77FB83F075803BD1C0D2 + C075772D63E91487AD893932132C2112E1673A0EF6587643C8BAB0AC51C1136B + 8BE4AF506E6C7F48931EA58B500A39E6EA2DB608DF0EAC6A5855964C7C268227 + D6DAE050C12900047863F2D290C427CF6F5AB02889806035ACEE79AB6F5BC412 + 696ACCED24C2B2CCA5A5EBFBAAA2EFAEC50C7800444070046C6AE575F72C6769 + DB76FB392CD557566C1E987AEEFAEFAEDC568BF0EDC16A0179FDFA35F471C57E + F7E74A56159F68F71922D602AEC4DF98B6AC4EDCADFFCE618839109C0CBB1A76 + ADCDF3D5D0C05077DEA05301BD268ABCBDA893F0D8356859CCD8615A8F806021 + ECEEF9F3366B30A47058AB05EAC4241ACE7639924D38FB4796D588BC14D48BFD + 47663ED9B26F8C7B8B0BE15B83DD8D191A3142070EA547F43A90AD6AF99F5509 + 496A9B3DB4635FAC82214388FDBCA977672E6FBFBB705D7BC8529045DC5D6008 + DF161CA93B707B3BF234AD3FB8E0AF4D16121485695252A18EC29A9A164E1708 + 96A571123CA59063AA4F719F9993D19D2F6CDD73E8EAB56B44C5901034858BE0 + 16385CB91689C5941A3A9703C856A96C83E0863507288A14A81FAF527AE11489 + 696D88709D38B11893A6C252DF7E7CFCF1CACD5D89C7CFAFC434EC73F86CDEFC + F9C997CF9F233D03C1AD70EAEC13B402C1B42BEF66A762A1A5AC3B0FBE414030 + 0464A281806002484010104C00090802020202824D400482808080806013BE2A + 02A1198624B4862E0CF870F9D222F44F89653CBE9E4513D70808085F2BB22481 + CC9B3F9FEBA0870F1B964E12ABB66ECE93241787CEDEB4A6A62C77CE1059F6C0 + 22221FEF9CA44C22264892DB7AC841EBD34EE71184D5FE16BA07C1F1F452D172 + 11FF83FF8F85DEEEA06931C6C04BA5563369AA444D72CA675542D27B7542D23B + 7562D287B4F8C40FAA8FB14FAE6CDDBBA574F1122A77971902020282A3916508 + 841289080DE8ABE1F780D2C52AE56DD6609C7FD9E2CD29850C079D38C65D34AD + A1351A963BA65A67766FEB192346C07B5264B983422992A2E4328CD5D0584ACC + DB8771771F1E89BDF5E068D2B3575795EF3E3E7777992120202038131E4F20A0 + 8B260129D0BE258B542DF95BD7BFA5D903B38151BED6325E7728AFB377FBF2EF + 80A73B101231481189A55EB93DEFC55F4767BF7EF0F8231F2E285B36CEA7DEC7 + 0F1F90653E0202C2570F8F25908993261293274D66BCF206170C9939FC314C2B + A3D6B88C3474E0340EB857126EF8051AC6E9EB1317D5E5FEC0B2F02413B4B711 + 0101E19B85471208E72D182E8217CDDBBAFEDC71BB959FE335701FAE0B89834F + 0747208488C2AE8D9D5F26E9D9AB3B98F6BC01B4308E8080F0CDC323090462FA + 928539372A5F3FCD953BB794D6B87EA0AF7335048F8F23AE4F5A5C23FEDEA3F3 + F0D80778BC9BBBCB06010101C113E07104A2A1699222497AC5C97FBA2DBB7F69 + 5DA0DC4BC3B02CE9EAB4C2837249A9844878F8ECF2F5F10BAAB8BB5C10101010 + 3C0D9E482004201066D5F9638396DC885A1C2857D03A027129A095153CBCFAF3 + CDFBC76E4DFFBD01C6DBF0222020202070F038020164411038CE2CFE737B8355 + AFEF1D09F2F661688671E9B90AE9854312982A2EF1EDE5A1D30B302A559ABBCB + 06010101C193E07104C2C33F28902C34BAF74345AEEC056995DA1D8785B22C4D + D3221F6FEAFEF2CDDDDE1E3FBF01799547404040F8028F241030F227599AA173 + 7E5FBD6B89FE9DD7AB13B8F3784857730867F505F4215A99167779D8F4029AC4 + E47877970D02020282A7C02309449732026331A6DCF80147FDCB14AFAF494975 + F8A16EE6C099F16A2DB1C8B8BB8FCEDE98BCB836B80D370B224B2C0404846F1E + 9E4B203A500A992274E1F897944CEACFD0B4CBA7B27812117929C8F75157B6DF + 5DB4BE7DB9F2E5889B376E2212414040F8A6E1D90402C90274E0F2DC390A579A + 33FA11A356636E584BE70077A38B7DBDA9C7874E6C7BB166670774441C0202C2 + B70ECF26102E855A12F1295AA06285A943A369659A5B48042A22E0ADB486C0C9 + 20257DF840AF513FECDEBD1B6FD3A60D32ED454040F826E1F904C2A5524B22DE + 450A540C993A249A4E53B14EF0B46B1EAC16A4444CA83EC63EBC306872317717 + 0D02020282BB903508E44B5A5959708E4295E78C7ACCD20CEFAB0A73837F2CEE + 9D3849625746CC2C90FAE6FD73CE853CCBA275110F00EF3CD9DDE9F004A0B2F0 + 4C7C2DF5929508241DA44C2AABB278C22B4A2E0D603434ECB45DBAD150E0DE9D + 16FB7993F7976FE9F6E668D4068CC0498C61D1BA881BC1AF4D155A367E77804C + DE9A61ED96D136577B8CD95371CD0CE80D8101DF59F0BD24F87ED7DD79358260 + 90C637F00B482705BE6BC0671FF073852D91A9680DB6BB75AFDC258272BE7644 + E2D4344D88489239F5FC4168F7035B2EF94A64F088365BA2FA19E4ED10C81BB4 + 8A6475F552097CBFE2A472B52BDBE0CA01D2180B7FC0B604BED3E07338F839D7 + 01F1CF03F18DE0EBDB9519CB9204C22364DAD0F3DE450A54A353959C9B7777A4 + 8177F5FEE1E2F5FD77E6AD6E812197276E4381A563C96703A7D395D6CC182513 + 89670132D10032A16C8C0E0E04609B6A71B6CBF0FDB536CEE308047C67C1F7E2 + E0FB7D77E75700FEA0B364701501697C0B6FC23483EF34F80C073FD7820B762E + 5695072010E596E6DD0A150BCCF1C61109E509E4EC8B4795FAFFBBFD8A8F440A + 29DE9A7E88CFEB0F206F8741DE3802D1D54B05F0FD9AD34BDB7A7C06576190C6 + 38F803A6197C67C0E720F07331F6A5ADD902FED95F409C3B43D7CD222F8747B8 + 6C109B55082473A78C83D13ECBD285BBB69E97B7698361EAF844CEE5BBAB1396 + 3EA54510F0DC90B42BC3A6E74BFB14F71E4344E2529C7CF680A857A0185367D3 + FC9640EBD88BD927941886088403221087C0990422442888F7CAEDF7317899EC + B95DD2F7783481F00BE5FEFEFED9A64C9E7C63E9B265AD1E3C787081BF8F1138 + 81312C1358B9EC8F6523FA1E522726319CCB75379C1B02DFC7D0B45AECE7237A + BAE9CFC1CFF71D5EBCF98F2D54E78E9D90EB1327839F512C1F39AD88AF5476DF + 41CE3711816088401C046712084F14B04C3EA7D19A224003897555C63C824000 + 41286263639333240CC7211130A54B97AE3B2622E224B8819D3E7D7AE3AAC8C8 + AEFCDF84E149B94C16BA60EC339197223BA3D1B87C5D8407F4E22BF65290CFAE + DEB8FD746664593717ED3703D02191FDFEDDFEC44F2ACBC7B0AC50A86C052210 + 4C4B20DB5B762F54C83F1B2210DBE16C0D84D55D449A4673E172F788EAAECA98 + 3B09843BD9AF55CB968BBA77EFFEDBBA75EB26EDD9BB77325020480674C23000 + 4551E4AC99331F070505E557ABD58C582C26264D9E1CF2F4E9D3EBE95A487A4E + B4535AC5FB755A9BAB7E8D70557CA29A204991AB33C59F620893A72670FCEAD4 + 258DD50F9EFF0F4327193A0515D7CCC0E1026AE8DA59FF4A28EA0750FC341C60 + 60F6B7ED6F9E40B8BD4F38AE4CD5A80B45771FED1002E14F1B4504E294292C2E + 1EA546BDE54AF7D19DA18101900DA75A86BA5503F1F2F2F29D3973E613A94412 + 00BE63478F1D5BB976EDDABE24E8F8699A56E7C993A7CCD429536E81EF5CC72C + 1289F08F1F3F3E1D15115118DCCB3CC7A7B382F22F5BBC4EB971034E695295FC + 16127778F3C5589007CA4B21FA147DFBC0EDD92B9B62685DC4A11074908BC0CF + DF306D07E9A8C3C7BE7902D14109AE42201E4420B6C3550402C1D7F110F08E45 + 7C1B7056C65CD2A9BE7AF50A2F56AC18919292C2F2FD389C82F2F1F109983963 + C663994CE607088191000DE3EDBB770F468E1A050514CB91234781E9D3A63D84 + 96347034043513A9544A3E7DF6ECCAC4891343CDBDB7D2EC51D714F973577097 + 959670CF08211661D111734A263F8FB9CFAFDDB83A3D5F13044268B389AA8568 + 0DDEB3578F404A80EFF7AC8C87EFF89CF90C6C53B9BF6102A908BE473B229D0E + 462AA6AD176E6D42502F43C1CFF916E619C32C2F27D80E60B9D403EF39C5CB8A + 3332E63002397AF4289C7A621A356A9461841D1D1D1DA056ABF30C1E3C382F20 + 889C0A2F2F7F058088A2C48989899F434343C3F2E7CF5F4EA552C153A3084812 + 8058C8AD5BB78EF8EBEFBFE70D1B36EC50C590901F939393F9A90956AC259AFF + 468D1A55C268C608828226B6C18D6A752FDEB7D31A556C02CDB98977D3023B3C + 4744E4E743C51C3CB1ECE1DA9D03F9293757A503C17D00027C1A7C404FCED68C + 34F9CE7E3710FEB636BEF79B201067758E9E0090BF83E0E3274CDB762C999A15 + 920D24AE7CA07C3E3A2B7D3675A404414063275203007FFBF9F90554A952A54D + 95D0D00E050B16AC0EF8410CEFC33F03F2809A033C9B89D18DC885A32A16C6A3 + 5B144FEFD8A17602EF8944222C2D2D4D434032E03B62DDA81EA601BE62ECB871 + 45DEBE7DFB3CD39A88367738DCA544CA2492CAF3C63C16FBF9E466546A776923 + F083212892D0A4283F5F1931B3B03A3E318E9F6373757A105C07D00944818F1A + 986D04B21F74002D6CE9281181647D80FCC1FAFA0F5C8530CB3591F44575703D + 025709674D63595C71C20EDAD7D7D7BF4D9B36336BD7AAD55B2A916029A9A990 + 2834DC540DE1FC513E1F3F20258DBF9F1FB561D3A6C1870E1D5A2C5C80CF00DD + DA48BE168D86170E6B355715E77E6D44ECEF4B3DDEB22FE2C59E7F670336A400 + CB2273DFAF148840BE001188F5007984E4F100B36E9D049613A37B661F28A396 + CE282BB315C777CA3E3E3E7EBD7BF7DE56B962C5C649C9C950BB50932449615F + 1686DDB220CFAF8BBC7EFDFA5EC4E8D1A54CE494D34644DE0AEF4A73473F14F9 + 78E560D2A03682BB67073BD0B2088A02DA48EAA72BC36714562724C5F3697447 + 7A109C0744205F8008C43A08D6FA9A819FFBB12FEB1B9682AFF309209EA98E5E + 54375A7170DA0874CE9AD0D0D09F070E1870007CE7A6932069B8CBAAC910D237 + F1E9D64E162E5AD4E2E2C58BFB8D6B23DAD17EDEE60D8716E9D26A7E5A5C0267 + EEEB3E6D84E1B49107ABB70F883974E2770C4EAF194A3742960522902F400462 + 3DE03416C8A3067CF2BEB3ACAD47BEDD3505F11CA8B3693E713A6C9843CA2C53 + C5F11D6FB972E5BE1B3962C471401A7094CFE8AF537822E094162011EADCF9F3 + 3B962E5DFA2B66CC6C5637D2274422A2F282B14FA541FEF968659A3BFD69D194 + 424EC6DEFAEFD8CDA94B1BB8B918111C0C44205F8008C43608EA723BF8F90B66 + 9DC9BA7086A83888E741995553F1DBBDC7DB3DDB61F0E5D3A74DBB912F5FBE72 + A9A9A91916B0DD5D88664B49B7482F954A89A7CF9E5D9B30614245930FE846FB + B9EAD7E852BC5FE70DEA84448E44DCA18DC00FA00911EAE4948F5747CC2CA04A + 4C4EB63BE2AF04E5574FC36FF41CE7B6A93D20B4383413B5E3F9AF8240EC2D07 + 08DE5BF2B74E20F6942578F632F8A88C593E9D255C548F010C5E186820698EC8 + 0757711F3F7EC4838282D8BC79F39683E401B50E7ECDDC138943306DC540B2A0 + 280A4B4E4E66057F67140A0579F9CA95FD8B162D6A61C8F58921844C1F7EC9A7 + 48FE504D4AAA069A01632E5CDBD1E5097EC549B1183BD57364412C49F9EC6B39 + 37C05ED4DD34FF11CDB285DDF0EA7640D077D93377FCB510882ECEDBE0A3B435 + 11C0569DA44AC32AE7CAFFEFEA269D7E84F79CB40F0476AA97ADCC9FAB106060 + 1FC828F073968DF159BB1692BEA80E08E4282090860B2F1E238654AD6F17F9E2 + BC4A59B952A55A03070E3C03C88326DC3495637149C0610C49E24AA5326EE4A8 + 51F99392921206FFF6DB9E2A55AAB402DFD3B526B1588C4F9932A5E2E3274FAE + 1934F31516846EDF4860A5323F941DDDF75F756232C379D8752D89B2DAA41058 + 7C521296FDF4AD3247B6EDBAA3D168704092DF1C89A43B495C3D6DB79F44D69A + D6EE9B71849B124B40EB46CBDC4EF4DA40E8CFD8412020AE1A70E48D594120E0 + 190A3CC31108783F71C64A02E1D30C0904C4B516C4E50802E1C9D0E20E0C1E05 + 0D08840404B20B10483B780FED4477DA4E7473D0800E9FFA9C9AB2F276EFF17D + F9FEDFD6C8B88AFBE9A79F72FFFACB2FCF01799076F6957CE5B2701D0576BEA0 + E3A340478E810E5F7B9639DC51AEEBC709F85BB70D42A552415360F81C4700A6 + 8EAC8571CBE572F2C68D1B87E7CE9BF703885B42D3745AF7EEDD231BD4AFDF33 + 2121019A141332998C983173E677F7EEDD3B69A916C2A3D29C889B8ABCB9CAD2 + 4A95AB2DB5B832846504CA4DE37DE84291BFB76C7BEEC2F77B04861DD94DCE6F + D8866EB2E3F7691F5392C65204694BE7673340DBA413D394E42FA52AB588A8D9 + 787FD4CB4764CDBC456C2290A63B9647BD4F4EAC2122498B3B0AD0E8354A8D86 + 2AE817B87F67EB9E2DCEBD7C4CD4C85BD82A41E7D33CF6C4FEF0438F6EAFF596 + 4835A05D2102713D3C89402068354D93797CFC7BEE69D36BCDD023BB89050DDB + D844225CC5818EF750C3060D7E041D2FD43EAC1AE109ADA0A0E6027D5A252626 + AA6FDEBCF9E7858B17B7DCBF7FFF0CF81D67495C050A14285BAB66CDAED5AB57 + 0F0F0C08F04B4E49810BE3B4FEDE124838D0691E2008F2D9B36757C74F985009 + 1E300BEF8577EBB6BC61C3867D535353E1D4DC23A0A114B5BA5474FB460A87B5 + 9C9DAFC50F23557109AE3E6B44EBAD5E44E1744272CCE561D30BAA5352D52E7C + BF5B5167D37C12A8D834F86C0E3ABC7D3A07892ED58AC1488AFE949A428EAEF1 + 438B8E65ABEC4FD3A8490925B28940DAEC8E8C7A9EF0B98684A4AC229064B58A + 2A973DF7FE0DCDBAB4E0BDD85AF35E3ECDCB2E9F085F79F5ECDA40995C432302 + 71073C8D4078479970A05405C8DA65206B38F8B47A96035FBF6E5DF94F9F3E5D + 0F080880237B6B13C1BDD0DBDB1BBF7BF76ED4DA75EBBAC5C4C43C84F7F86930 + C60A93545C0B6805C66DAACB952B570140081BCA952B5717901BF74A1D89A4CF + 46C169AA0F1F3E3C1D3E6244213E9E7EFDFA6D019A48C7BEFDFAE57FF7EEDD0B + CC1627863A12C951A7CAAFA50677DBA68A4F74A995169741F07ECA4B4E7DBC78 + 7DEF9DF96B5A7BFBF810890909596EC1D01AF08B8BBACD53B02D5933CFEB30F0 + 0432A6E60F2D3A94A9B21F8ED8741A84D5B08740CA67CFB37F7DB3B0164026E0 + D8CEAABAE7D3FCFBE593E12BAE9E4104E23E781A810877B443372705417A926C + 89083F7FFEFC6FD157AE2C02A3796ECED5A2B7EBB401A9548A6DD8B0A1C7D163 + C7D6729159394D64367182758BBA75EA74ECD1A3C71638D525342B86C9914824 + 04D444264C9C5809CB4816F679BFD559690555ADF05399113D0FAA1392802642 + BAF4D443B84F44E4E3455D9BF17BCBF8AB77F67DF8F489CC1618F855EF130182 + A5C0B43B6F8331376D524504920E4420F6C3D3080442B853FD26484F795B22C1 + AF5CB932F9C2F9F3130081708B8646DF26701FE2E7E747EDDDBB77EA8E9D3B27 + 18DDB097E94DDC0208DC7F6113C1F0EFF9E9A79F0675E9DC7971BC76BA8D9BDA + 821A8BAF8F8F68FB8E1DA3F7EDDF3F8BDF04E99062D69148CEEFAA879518D079 + A3F6E85CD79108CC1E291611F1CF63EEDF183DB7A4ABDEEB4E00C13A093EEA62 + 963B9073381081A4031188FDF04402816075EF866DE20F90A64ED69EA98E9F3B + 776ED0D5E8E8C5A63410A103434020CA88D1A3F37DFEFCF98339CB267E1A087E + F52D59A47A9E26DF8FF22B5DF44791975CCC322C26F256600F566D1BF562DFE1 + 39C2B04613AB7B1F74AB3267F6EC9762B1D84B772E083C2B8478FDE6CDBD3163 + C694C21C0DE8051874E4C57A775813DCB066777562328D5BB956642B58ED820F + 8349C464CC9A5D4D9F1D8F3AC0DBD23BFBDDAE8440A896839F7DDD9D1E50C018 + 20100C10484B4020FB1081A413C845F051C59A080466BC7B0181B486F79C4420 + 21E0FB552BF3E70AC0F9F70206CC7807839F0B9DF03E6BB576BE5D0E06E95A7C + EB7D0C55367B6E8B06E0F8B66DDB6ABD7DF3E68CAFAF2FF4989BC964959F2682 + 2ED4DFBD7B67D9A2B48E0C14F97397283BAAF77169CE6CB9C0C81D367E96DBA8 + 07775ECB6564EC9D07A76E4E595A0FB361AA29C0DF3FC7AC59B39E03A192C051 + 3A2490F7EFDF3F193D664C1183874D390094B7C23774DE98A720EDFEAC95EB45 + F6009A17B31231A5BEFD68DBE519CB3A7C8D04F235E36B22107B8136123A17A0 + 3C26838F0998F57B7EB8724DA335F5800672CAD2FD67709F04919494F4A05CD9 + B285535353594304024F02041AC70BA0791456A954C69949375297E7C959B8E2 + F4E177708A94302A35B7292F831515201091AF37F930727BFF987F4F2DB7D6FF + 136F71151616B6F4C7C68D07C4C6C6A6040404C8B7FCF1C7B003070E2C70E814 + 965EDE4AFED675478E5AA1EDD449C9FC6643A7839BA5C33142AAD43C38D17B74 + 7157BC13C1714004F205C89589F320304039007EFE8C593705CC952BCD30690D + 0B952C31A56ED3674B2E9DC00755F9CE248970118756AE3C68E4C8918B41470C + F74F90FA2402F7704C9830A1E4CB57AF8C1FE3A9EB608B766FB724F7CFDF0D54 + C526A8088A141BDACBC113C87FCBB7F47C73346A8DAD04D2A17DFB794D9B361D + 06ADC7962D5BD6FAFC850B7B1DBD90AF9FBFE2FD3B6FCEF55DB54EEA44971208 + 46832CF94864B13B5AF528E42F955B64168DE0194004F20588409C0F5026224C + 7B864841CCCA334460FD9004F100042E79CA02878BE9912E983FFF3118C51752 + ABD58CEEE43FCE39A1AFAF2FB567EFDEA9BB76ED9A607464AFF3705BAC77FB55 + C18D6AF752C727AA719214194D299CC2F252901F2E5CFBF3EEFC35ADF8CED9DA + 826ADEBCF9C857AF5EDD8E8E8E3E84B9E0BC71A05191F0602A69B6C0FC8C5AED + 327F59B0560181E08040E277B4040422937F76C57B111C0344205F8008C4B910 + 682105C04F38E09760D69108BFA8CE794028BF7A1A71A3E738A3E58B4F9A3489 + 001753AA64C96A63C68C399F9292C2E83613728653A0E1AA464544E4FFFCF9F3 + 5B8331E8C82357C35ADD8BF7E9B8466BA5647E640E4DA7008910B7662E6FFCF9 + EA9DFFD94222BACD65AC53348E8C79E434A482BF369D9ABFED8FE3A0392F6640 + 537316380201D995D3ECF39DAD7A160EF2F747EB1F59088840BE001188F32130 + 48A90F7E1EC5ACB7F2829B9645A0A2669D0E1B367AC8E15DD4C2466D0D2E09F0 + 150723A77FFEF9E7A19D3B769C1F9F90A0865A08741772E7CE9D533367CDAA87 + 69E7D20C5694C8D73B3074FED8678444EC053A5A8B2D0060C748C9A4F88D294B + 6AC5DD791865AB26E24C003214B134A3CED7B2D188429D5ACC31A75D3903DC22 + BA5844318F5F1DB830617E537BFDD720B8168840BE0011886B20B0F41A097ECE + C66C3843045414199F96DA0E6820BB8C19EE082B8E2391D6AD5AAD6CDBB66DEF + D8D858A59F9F9FF4F0E1C391EB376CE86D70FA4A676D95B759836185BBB49EA7 + 4E48D4E8766B5BEE0A85A6D5808044AF0E9E58FC68DDAEC11E432282D3010D78 + E97529E066425C21A35EEDFE67DCB35D87A6EB9CECA123705D047B3D22675502 + D1B9BB5026AA948540278208248BA1CCAAA9C4EDDEE399CA6B67EE9051A2768C + D62590C58BEAB0A2E294A9D80F854A969CDBA0F57D4372A06F71C5556E78B76E + 9BBFFFFEFB4E7086E6F091232B366EDCD8CFC8FA07B7EE507674DFFF0584946E + A4494EB1DADD876E1B09D72828B90C7BB876679FD7FF3BBD4A1BBBEBC9843733 + 86DF8BF7EBB43657839AE1EA38EDB49CBBCE4581460CEF3F7FC2E656FDB15C93 + AA356FA9D46A5C2C126559EFBCE5574FCB25A7C4AF498248F7C9E36910EC0369 + D7A14C955DDFEA3E1015AD51FED9A64FA1DC3E7E0E211035AD214424E55002C1 + BEEC03819E28AE38229D8E02748A0A9DC6EE6FDB272050EE15EBAE74945935E5 + 72804C5199D1F6A73866C17A08EF895CC3D031A02D16B9D56BBC523F50A6482E + 5EBC4854AD5A95E9D1BDFBAAA64D9AF43A75FAF481050B17363565DD5469D6A8 + 6845FEE08A749A2A7D01DE166837CD6198D8D70BFF7CFDEEF1FF566E0D53BEFF + 14C3FDD15947BD424D03A659B789D1AF6CF15AC57B77D826CD1198479398E256 + E2E0CA0490B6C4DB8BFAEFF899E331CBB7D5CFEAD3577051CE472C7D00AA199E + ED6169637639D04E742D20816C69DEAD50B1C01C0E2210AD53C86F6527BA8E40 + 3E6F6DD1AD703EDF40B7594F968D9C1AE42F953F06E9F1C1ACB4CCC2B4CB1767 + 4119D7D60F602C02D8C8346DDBB69DD4A675EB89DD7BF4F04F4A4A329AF9B263 + FA1D0EA850AAA12D1A48A614F37A12200B1C1EC0EE25C7946F3FBC8D397C66C1 + BB539736A862E33F64CC41BA97566D66F577C66B3B7EFE62F5351A799E5C4573 + FF507B608E3A557A530A99589D94C2C5E32947F84263034020C4F13EA3AB611F + E32F665502E1D35D3E72DA01D069FCCC5A7724A7CB8108440B4420F6C1130864 + FDF57344B70A35983A9BE65703E9398F59B7535DE8336B3928E7FEC233D5ED13 + 5EDD1453A1CE2DE7E66BD170B83A21C9A11E6BD3C904BC03120A4151225226E1 + 3841159F989C12F3EE76F2CBD7D7525EBEBDADFCF0E92978FF074DAA12BA0D50 + 6350FB2209092997FA8A7D7D72CA72041551E40B2E0BAE1059CE6CA5005910AC + 86C64078E832588D993983C4D5D07AE3E51C298ADE1D3BBFEADE8A2D7DD66F58 + 4F76EBDA2DCB596055583D9DBADE73ACA6E686B95340D18E075983FB8D5CBE96 + 640D1081688108C43E78028140000D84BCD56B3C5C54EF0D7EAEC4AC5F54E7C3 + F70065BDB65CE454E266AFF18C4308C4BF7CC906E5C6F63F02341086F7C9EECC + C210120BF6654E8F4B8F41572CDA30AC208C476817A6F2073F48B1984889797B + EFCA88998EF7EFE522F4FB671BB1FCC7F64CED8DF39A834CEDC3AC3F8AD32D40 + 04A2052210FBE0290402C16B0EA09C16819FBF615A735DD81EACD14660075A19 + C4133DE9F401C2611D68A5B9117714797295B2771D04219DE84017C624DD9DB0 + A8C0A797319FDC9D289B32A2E3F990D5D3CB7B8925D7B3D2AA3F22102D1081D8 + 074F22102140599D021F7530CBD721D3D74D407E52E29429F98106F2D17E02D1 + 2D6E07562EFB73D9883E07749E6A3DFA4C754F05EFD998A4283C3636569DEDD8 + B582C7F7FD1DE3EE74D983FEFF6C539C8F79FA0010483023D4163D1C244ED09F + 95C9D4E81A8D018184DA45206DF7449E7D1EFFB92620100D6B21810021D524AB + 54A2723972EF5BDF34ACA55D0472E564F84A40200152859A66198B09041E38AD + A269E5E6E65D9D412015FBFF6F7BB4AF44C68076612D8140D2680448E3881102 + F198B18A6E10E5890422071F8FC0950BFB422266B3032F30B822E394A9D76FF4 + 1A17E21861D6ED462FDEB7E39A5CF56B76572724A6AF29B8BBA0B20AD25DE693 + 24CE6A348967BB8DCC0D7E26BA3B5DB6029EF9053A3C76C2A9BF375E7BFBB2B1 + 5C248E870BE9EE4E97A520098206A32CBFBE95EA766C56ACDC510DE88C291B09 + A4FF3FDB77BE4E8AAB2D26A9045367EE0801F5CF548DDABF44608EBD73EAB7EA + 630B81F069DE7CF362DBAD772EADF093CA3FD28C150482E304E8F095F31BB4AE + 57D03FE8BD23CA15A489006962AEBC7E5E66E2E903FF8081459AA913210C0006 + 86078EB5DBD9BAE7D9767B56730402BEB3E03B9CEA856E8D3C668F148BB1221C + C33F2E6AD8F6BB601FBF0477A707029413AE2BAFD2E0E75F9895840B06377482 + 4A19F843A152AB1DD9C173564EE527FD76DAB744E1DA74AA9236B426816018D0 + 5C979449A9C447CF2F5D1B37BFAABBD383808080600E4EE9DCCB4F1C74D2AF54 + D1BA9A9454349D6502E9C60034A311FBF9508FB7FC39EAC5DEFFCDE1866860A8 + E6EEF4212020209882E30904EECB6059BA4878BB25799B7C37501597C01F01EB + 96B3AD3D145C5940D364522226550949EFA347CC2CAA4E4C4E10BA5041404040 + F06438A543A7C42252A352D301A58B550E9932E4B22A3905CE897BACD9ACAB01 + CD8FE184B6C4C70BBBB3606DCB37A72FED1389C594DAD4615D080808081E06A7 + 76E83366CCC0C78C19C3B65F3977D9136FB2BF584DC34334449EBC07C349D06A + 1C5AE2C0D38096512E9119B6A6DF8805A08C085046596E673902020282D33B71 + A107C71243BBEFC955A74A2BD5E7380D34FFFDDA4944E096454388441421A2B0 + 4791DB3BC61C8BDA3A75EA5462FCF8F18838101010B22C5CD681CBE4723C3585 + F33385156CDF7472FE363F4ED024A74277EE99CE4CCFCAF8421AD039238B8B7C + BC8984874FAFDE5DB0B619740C4989C594064D552120207C05704F87AD738122 + CD1194BBC480B09DFEA58BD550272563AC8676BBF75B5BC0BB24879A06244391 + B717961CF3F6C5A3B53BBB7EBE7EF78430CFEE4E2B02020282A3E0DE4E5AD0A9 + 4AB307E62ED4A1F9FC6CD5437EC1081C83DA09069DEE7D39C0C923ACB8047EB8 + 58E8021E121EA590638C5A8D7DB8787DFBB39D07C7A6BE7EFF840BEC2C17F408 + 0808081E00B777C87A69811747283EC50A56CADDB8CED0808A65DA8011BD9851 + A9303A4DC572A37CB841111EFCA41DF93B855832386CE44800BC534492A454C2 + 691C092F5FBFFE70F1C61F6F8E45AD603EC53FD53DC6ED8AC53CC89502020202 + 82B3E0490462286DE9840221CD93B35460C5D24DFDCB96F849912FB8A2C8C7CB + 0B680070EA0863D534F8A4310AEE5BFCE27DD714B97CF91B8E93301E8224319C + A2E039E8300EA8056952DF7EB81FFFDF93539FAFDF3B90F8E0C959657C62527A + 045AB7148C3DC79D22202020645578328164C2B3E7CFA152C01D395BA040814C + 9DF6DD674FB26DDEBB2B17E5E31D2CF6F3CE013497205226F125251239C67B21 + C57135D06452E95465BC2629F9932A3EE9BD2A2EFEB52A36FE0D3C4F64E9E225 + 99D629060C1CC86D845CB674299A8E42404040D0214B11882580EBF0902530FE + 0442F3F967A12E419114D22210101010ACC05747200808080808AEC1FF01BF25 + 389AF886CB400000000049454E44AE426082} Proportional = True Stretch = True end diff --git a/Demo/Source/LauncherForm.pas b/Demo/Source/LauncherForm.pas index 76cef96..9a0f082 100644 --- a/Demo/Source/LauncherForm.pas +++ b/Demo/Source/LauncherForm.pas @@ -48,7 +48,7 @@ TLauncher = class(TForm) ExcludeWindowsCkeckBox: TCheckBox; MaxRowsEdit: TLabeledEdit; MaxColsEdit: TLabeledEdit; - Image1: TImage; + EtheaImage: TImage; Label1: TLabel; Label2: TLabel; procedure ChangeThemeButtonClick(Sender: TObject); diff --git a/Demo/Source/uSplitView.dfm b/Demo/Source/uSplitView.dfm index dbc6364..90557c7 100644 --- a/Demo/Source/uSplitView.dfm +++ b/Demo/Source/uSplitView.dfm @@ -11,7 +11,6 @@ object FormMain: TFormMain Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] - OldCreateOrder = True Position = poScreenCenter ScreenSnap = True ShowHint = True @@ -19,7 +18,6 @@ object FormMain: TFormMain OnBeforeMonitorDpiChanged = FormBeforeMonitorDpiChanged OnCreate = FormCreate OnShow = FormShow - PixelsPerInch = 96 TextHeight = 13 object splSettings: TSplitter Left = 1031 @@ -29,9 +27,6 @@ object FormMain: TFormMain AutoSnap = False Beveled = True MinSize = 45 - ExplicitLeft = 208 - ExplicitTop = 57 - ExplicitHeight = 682 end object splSplit: TSplitter Left = 200 @@ -40,9 +35,6 @@ object FormMain: TFormMain AutoSnap = False Beveled = True MinSize = 45 - ExplicitLeft = 344 - ExplicitTop = 296 - ExplicitHeight = 100 end object PageControl: TPageControl Left = 203 @@ -125,7 +117,7 @@ object FormMain: TFormMain Top = 59 Width = 223 Height = 100 - ItemHeight = 13 + ItemHeight = 17 Items.Strings = ( 'First' 'Second' @@ -144,7 +136,6 @@ object FormMain: TFormMain Font.Style = [] ParentFont = False TabOrder = 4 - Zoom = 100 end object SpinEdit: TSpinEdit Left = 8 @@ -238,7 +229,6 @@ object FormMain: TFormMain Font.Name = 'Tahoma' Font.Style = [] TabOrder = 11 - Zoom = 100 end object DateTimePicker: TDateTimePicker Left = 343 @@ -562,29 +552,24 @@ object FormMain: TFormMain TabOrder = 0 object lblTitle: TLabel AlignWithMargins = True - Left = 40 + Left = 47 Top = 3 Width = 121 Height = 36 Align = alLeft Caption = 'TSplitView Demonstration' Layout = tlCenter - ExplicitHeight = 13 end object MenuButtonToolbar: TToolBar AlignWithMargins = True Left = 3 Top = 3 - Width = 31 + Width = 38 Height = 36 Align = alLeft - AutoSize = True ButtonHeight = 36 ButtonWidth = 36 Color = clYellow - DrawingStyle = dsGradient - GradientEndColor = clHighlight - GradientStartColor = clHighlight Images = SVGIconImageList ParentColor = False TabOrder = 0 @@ -599,18 +584,14 @@ object FormMain: TFormMain end object ToolBar: TToolBar AlignWithMargins = True - Left = 923 + Left = 916 Top = 3 - Width = 108 + Width = 115 Height = 36 Align = alRight - AutoSize = True ButtonHeight = 36 ButtonWidth = 36 Color = clYellow - DrawingStyle = dsGradient - GradientEndColor = clHighlight - GradientStartColor = clHighlight Images = SVGIconImageList ParentColor = False TabOrder = 1 @@ -638,7 +619,7 @@ object FormMain: TFormMain Width = 200 Height = 627 CloseStyle = svcCompact - CompactWidth = 48 + CompactWidth = 44 OpenedWidth = 200 ParentBackground = True ParentColor = True @@ -836,7 +817,7 @@ object FormMain: TFormMain Width = 300 Height = 311 Margins.Top = 60 - ActivePage = tsIconFonts + ActivePage = tsFont Align = alClient TabOrder = 0 object tsFont: TTabSheet @@ -1297,8 +1278,116 @@ object FormMain: TFormMain Top = 424 end object SVGIconImageList: TSVGIconVirtualImageList - Size = 24 + Images = < + item + CollectionIndex = 0 + CollectionName = 'menu' + Name = 'menu' + end + item + CollectionIndex = 1 + CollectionName = 'settings' + Name = 'settings' + end + item + CollectionIndex = 2 + CollectionName = 'calculator' + Name = 'calculator' + end + item + CollectionIndex = 3 + CollectionName = 'layers' + Name = 'layers' + end + item + CollectionIndex = 4 + CollectionName = 'checkbox' + Name = 'checkbox' + end + item + CollectionIndex = 5 + CollectionName = 'home' + Name = 'home' + end + item + CollectionIndex = 6 + CollectionName = 'battery-40' + Name = 'battery-40' + end + item + CollectionIndex = 7 + CollectionName = 'palette' + Name = 'palette' + end + item + CollectionIndex = 8 + CollectionName = 'arrow-left' + Name = 'arrow-left' + end + item + CollectionIndex = 9 + CollectionName = 'play' + Name = 'play' + end + item + CollectionIndex = 10 + CollectionName = 'find' + Name = 'find' + end + item + CollectionIndex = 11 + CollectionName = 'font' + Name = 'font' + end + item + CollectionIndex = 12 + CollectionName = 'dashboard' + Name = 'dashboard' + end + item + CollectionIndex = 13 + CollectionName = 'check' + Name = 'check' + end + item + CollectionIndex = 14 + CollectionName = 'picture' + Name = 'picture' + end + item + CollectionIndex = 15 + CollectionName = 'alert' + Name = 'alert' + end + item + CollectionIndex = 16 + CollectionName = 'error' + Name = 'error' + end + item + CollectionIndex = 17 + CollectionName = 'information' + Name = 'information' + end + item + CollectionIndex = 18 + CollectionName = 'warning' + Name = 'warning' + end + item + CollectionIndex = 19 + CollectionName = 'help' + Name = 'help' + end + item + CollectionIndex = 20 + CollectionName = 'exit' + Name = 'exit' + end> ImageCollection = ImageCollectionDataModule.SVGIconImageCollection + Width = 24 + Height = 24 + Size = 24 Left = 624 Top = 576 end diff --git a/Demo/Source/uSplitView.pas b/Demo/Source/uSplitView.pas index 19169ec..6677cf7 100644 --- a/Demo/Source/uSplitView.pas +++ b/Demo/Source/uSplitView.pas @@ -119,6 +119,11 @@ interface {$IFDEF D10_4+} , Vcl.NumberBox {$ENDIF} + {$IFDEF STYLEDCOMPONENTS} + , Vcl.StyledComponentsHooks + , Vcl.StyledCategoryButtons + , Vcl.ButtonStylesAttributes + {$ENDIF} ; const @@ -346,7 +351,9 @@ implementation uses Vcl.Themes - , System.UITypes; + , System.UITypes + , DemoAbout + ; {$R *.dfm} @@ -576,7 +583,12 @@ procedure TFormMain.FormCreate(Sender: TObject); var I: Integer; begin - Caption := Application.Title; + Caption := Application.Title + ' - Copyright (c) Ethea S.r.l.'; + + {$IFDEF STYLEDCOMPONENTS} + (catMenuItems as TStyledCategoryButtons).StyleRoundedCorners := + [rcTopRight, rcBottomRight]; + {$ENDIF} //Hide Tabs for I := 0 to pcSettings.PageCount-1 do @@ -889,8 +901,7 @@ procedure TFormMain.tswAnimationClick(Sender: TObject); procedure TFormMain.acAboutExecute(Sender: TObject); begin - TaskMessageDlg('About this Application', - Application.Title, mtInformation, [mbOK], 2000); + ShowAboutForm(Application.Title); end; procedure TFormMain.acApplyFontExecute(Sender: TObject); diff --git a/Ext/VCLStyleUtils/Common/VCL.Styles.Utils.inc b/Ext/VCLStyleUtils/Common/VCL.Styles.Utils.inc index 087efdf..ea4b8ad 100644 --- a/Ext/VCLStyleUtils/Common/VCL.Styles.Utils.inc +++ b/Ext/VCLStyleUtils/Common/VCL.Styles.Utils.inc @@ -1,34 +1,32 @@ -//************************************************************************************************** -// -// Vcl.Styles.Utils.inc -// file 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. -// -// -// Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. -// All Rights Reserved. -// -//************************************************************************************************ - -{$DEFINE USE_Vcl.Styles.Hooks} -{$DEFINE HOOK_UXTHEME} -{$DEFINE HOOK_TDateTimePicker} -{$DEFINE HOOK_TProgressBar} -{.$DEFINE LimitStylesToMainApplicationThread} -{.$DEFINE HOOK_VirtualShell} - -{ Feature toggles for supported UxThemes - see Vcl.Styles.UxTheme } - -{$DEFINE HOOK_Button} +//************************************************************************************************** +// +// Vcl.Styles.Utils.inc +// file 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. +// +// +// Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. +// All Rights Reserved. +// +//************************************************************************************************ +{$DEFINE USE_Vcl.Styles.Hooks} +{$DEFINE HOOK_UXTHEME} +{$DEFINE HOOK_TDateTimePicker} +{$DEFINE HOOK_TProgressBar} +{.$DEFINE LimitStylesToMainApplicationThread} +{.$DEFINE HOOK_VirtualShell} +{.$DEFINE HOOK_ExplorerStatusBar} +{ Feature toggles for supported UxThemes - see Vcl.Styles.UxTheme } +{$DEFINE HOOK_Button} {$DEFINE HOOK_AllButtons} {$DEFINE HOOK_Scrollbar} {$DEFINE HOOK_TaskDialog} @@ -56,4 +54,4 @@ {$DEFINE HOOK_BREADCRUMBAR} {$DEFINE HOOK_InfoBar} // Introduced in Windows 8 -{$DEFINE HOOK_Navigation} +{$DEFINE HOOK_Navigation} diff --git a/Ext/VCLStyleUtils/Common/Vcl.PlatformVclStylesActnCtrls.pas b/Ext/VCLStyleUtils/Common/Vcl.PlatformVclStylesActnCtrls.pas index 670c0e4..ea76e5a 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.PlatformVclStylesActnCtrls.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.PlatformVclStylesActnCtrls.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.PlatformVclStylesActnCtrls // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.ColorTabs.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.ColorTabs.pas index 8137fbc..46a405b 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.ColorTabs.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.ColorTabs.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.ColorTabs // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.ControlColor.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.ControlColor.pas index 73a46cf..6aa1d4f 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.ControlColor.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.ControlColor.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.ControlColor // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.DateTimePickers.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.DateTimePickers.pas index df4f7dd..08914a8 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.DateTimePickers.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.DateTimePickers.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.DateTimePickers // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.DbGrid.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.DbGrid.pas index 1dde326..6f68c3b 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.DbGrid.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.DbGrid.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.DbGrid.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Ext.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Ext.pas index 9fe3752..21c8236 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Ext.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Ext.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.Ext.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** @@ -27,6 +27,7 @@ interface {$LEGACYIFEND ON} {$IFEND} {$DEFINE USE_VCL_STYLESAPI} +{$WARN SYMBOL_DEPRECATED OFF} uses System.Classes, @@ -93,6 +94,7 @@ TVclStylesPreview = class(TCustomControl) TSourceInfo = record Data: TStyleServicesHandle; StyleClass: TCustomStyleServicesClass; + {$IF CompilerVersion >= 35}DesigningState: Boolean;{$IFEND} end; {$REGION 'Documentation'} @@ -259,11 +261,22 @@ implementation {$IFEND} Winapi.Messages, {$ENDIF} - Vcl.Dialogs, Vcl.Styles.Utils.Misc, Vcl.Styles.Utils.Graphics; + Vcl.Dialogs, +{$IF (CompilerVersion > 35)} + Vcl.StyleAPI, + Vcl.StyleBitmap, +{$IFEND} + Vcl.Styles.Utils.Misc, + Vcl.Styles.Utils.Graphics; {$IF (DEFINED (USE_VCL_STYLESAPI) AND (CompilerVersion >= 23))} -{$I '..\source\vcl\StyleUtils.inc'} -{$I '..\source\vcl\StyleAPI.inc'} + {$IF (CompilerVersion <= 35)} + {$I '..\source\vcl\StyleUtils.inc'} + {$I '..\source\vcl\StyleAPI.inc'} + {$ELSE} +// {$I 'StyleAPI.inc'} +// {$I 'StyleUtils.inc'} + {$IFEND} {$IFEND} type @@ -597,12 +610,14 @@ constructor TCustomStyleExt.Create(const FileName: string); end; procedure TCustomStyleExt.CopyToStream(Stream: TStream); +{$IF CompilerVersion < 36} var I: Integer; +{$IFEND} begin Stream.Size := 0; Stream.Position := 0; - + {$IF CompilerVersion < 36} TseStyle(Source).FCleanCopy.Name := TseStyle(Source).StyleSource.Name; TseStyle(Source).FCleanCopy.Author := TseStyle(Source).StyleSource.Author; TseStyle(Source).FCleanCopy.AuthorEMail := TseStyle(Source).StyleSource.AuthorEMail; @@ -628,6 +643,7 @@ procedure TCustomStyleExt.CopyToStream(Stream: TStream); TseStyle(Source).StyleSource.SysColors.Assign(TseStyle(Source).SysColors); TseStyle(Source).StyleSource.SaveToStream(Stream); } + {$IFEND} end; constructor TCustomStyleExt.Create(const Style: TCustomStyle); @@ -1859,14 +1875,14 @@ procedure TVclStylesPreview.Paint; initialization -{$IFDEF USE_VCL_STYLESAPI} +{$IF DEFINED (USE_VCL_STYLESAPI) AND (CompilerVersion < 36)} InitStyleAPI; -{$ENDIF} +{$IFEND} finalization -{$IFDEF USE_VCL_STYLESAPI} +{$IF DEFINED (USE_VCL_STYLESAPI) AND (CompilerVersion < 36)} FinalizeStyleAPI; -{$ENDIF} +{$IFEND} end. diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Fixes.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Fixes.pas index 00561ce..f4c870e 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Fixes.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Fixes.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.Fixes // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // Contributors diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.FontAwesome.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.FontAwesome.pas index d183c3b..8de0a19 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.FontAwesome.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.FontAwesome.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.FontAwesome.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.FormStyleHooks.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.FormStyleHooks.pas index 13edcaf..355baf6 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.FormStyleHooks.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.FormStyleHooks.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.FormStyleHooks.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** @@ -1441,7 +1441,11 @@ function TFormStyleHookHelper._GetBorderSize: TRect; function TFormStyleHookHelper._GetBorderSizeAddr: Pointer; var + {$if compilerversion >35} + MethodAddr: function(UseActiveStyle: Boolean): TRect of object; + {$else} MethodAddr: function: TRect of object; + {$ifend} begin with Self do MethodAddr := GetBorderSize; diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Hooks.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Hooks.pas index 23743a2..12cdc2a 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Hooks.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Hooks.pas @@ -16,7 +16,7 @@ // // The Initial Developer of the Original Code is Rodrigo Ruz V. // -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // // Contributor(s): Mahdi Safsafi. // @@ -832,46 +832,46 @@ procedure TListStyleBrush.ValueNotify(const Value: HBRUSH; Action: TCollectionNo initialization - VCLStylesLock := TCriticalSection.Create; - VCLStylesBrush := TObjectDictionary.Create([doOwnsValues]); + VCLStylesLock := TCriticalSection.Create; + VCLStylesBrush := TObjectDictionary.Create([doOwnsValues]); -if StyleServices.Available then -begin + if StyleServices.Available then + begin -{$IFDEF HOOK_TDateTimePicker} - TCustomStyleEngine.RegisterStyleHook(TDateTimePicker, TStyleHook); -{$ENDIF HOOK_TDateTimePicker} + {$IFDEF HOOK_TDateTimePicker} + TCustomStyleEngine.RegisterStyleHook(TDateTimePicker, TStyleHook); + {$ENDIF HOOK_TDateTimePicker} -{$IFDEF HOOK_TProgressBar} - TCustomStyleEngine.RegisterStyleHook(TProgressBar, TStyleHook); -{$ENDIF HOOK_TProgressBar} - LSetStylePtr := TStyleManager.SetStyle; + {$IFDEF HOOK_TProgressBar} + TCustomStyleEngine.RegisterStyleHook(TProgressBar, TStyleHook); + {$ENDIF HOOK_TProgressBar} + LSetStylePtr := TStyleManager.SetStyle; - hnd := BeginTransaction(); - @Trampoline_user32_GetSysColor := InterceptCreate(user32, 'GetSysColor', @Detour_GetSysColor); - @Trampoline_user32_GetSysColorBrush := InterceptCreate(user32, 'GetSysColorBrush', @Detour_GetSysColorBrush); - @Trampoline_user32_FillRect := InterceptCreate(user32, 'FillRect', @Detour_FillRect); - @Trampoline_user32_DrawEdge := InterceptCreate(user32, 'DrawEdge', @Detour_DrawEdge); - @Trampoline_user32_DrawFrameControl := InterceptCreate(user32, 'DrawFrameControl', @Detour_WinApi_DrawFrameControl); - @Trampoline_user32_LoadIconW := InterceptCreate(user32, 'LoadIconW', @Detour_LoadIconW); -{$IFDEF HOOK_UXTHEME} - if TOSVersion.Check(6) then - @Trampoline_user32_LoadImageW := InterceptCreate(user32, 'LoadImageW', @Detour_LoadImageW); + hnd := BeginTransaction(); + @Trampoline_user32_GetSysColor := InterceptCreate(user32, 'GetSysColor', @Detour_GetSysColor); + @Trampoline_user32_GetSysColorBrush := InterceptCreate(user32, 'GetSysColorBrush', @Detour_GetSysColorBrush); + @Trampoline_user32_FillRect := InterceptCreate(user32, 'FillRect', @Detour_FillRect); + @Trampoline_user32_DrawEdge := InterceptCreate(user32, 'DrawEdge', @Detour_DrawEdge); + @Trampoline_user32_DrawFrameControl := InterceptCreate(user32, 'DrawFrameControl', @Detour_WinApi_DrawFrameControl); + @Trampoline_user32_LoadIconW := InterceptCreate(user32, 'LoadIconW', @Detour_LoadIconW); + {$IFDEF HOOK_UXTHEME} + if TOSVersion.Check(6) then + @Trampoline_user32_LoadImageW := InterceptCreate(user32, 'LoadImageW', @Detour_LoadImageW); -{$ENDIF HOOK_UXTHEME} + {$ENDIF HOOK_UXTHEME} - @Trampoline_SetStyle := InterceptCreate(@LSetStylePtr, @Detour_SetStyle); + @Trampoline_SetStyle := InterceptCreate(@LSetStylePtr, @Detour_SetStyle); -{$IFDEF HOOK_TDateTimePicker} - {$IF CompilerVersion>=29} - //@Trampoline_TMonthCalendar_CreateWnd := InterceptCreate(@TMonthCalendarClass.CreateWnd, @Detour_TMonthCalendar_CreateWnd); - @Trampoline_SetWindowTheme := InterceptCreate(themelib, 'SetWindowTheme', @Detour_SetWindowTheme); - {$IFEND CompilerVersion} -{$ENDIF HOOK_TDateTimePicker} + {$IFDEF HOOK_TDateTimePicker} + {$IF CompilerVersion>=29} + //@Trampoline_TMonthCalendar_CreateWnd := InterceptCreate(@TMonthCalendarClass.CreateWnd, @Detour_TMonthCalendar_CreateWnd); + @Trampoline_SetWindowTheme := InterceptCreate(themelib, 'SetWindowTheme', @Detour_SetWindowTheme); + {$IFEND CompilerVersion} + {$ENDIF HOOK_TDateTimePicker} - EndTransaction(hnd); -end; + EndTransaction(hnd); + end; finalization diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.NC.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.NC.pas index ea25369..931bf17 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.NC.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.NC.pas @@ -56,7 +56,6 @@ TListNCControls = class(TCollection) FOwner: TNCControls; function GetItem(Index: Integer): TNCControl; procedure SetItem(Index: Integer; Value: TNCControl); - //function Add: TNCControl; protected function GetOwner: TPersistent; override; public @@ -2108,12 +2107,6 @@ function Detour_TFormStyleHook_GetRegion(Self: TFormStyleHook): HRgn; end; { TListNCButtons } -(* -function TListNCControls.Add: TNCControl; -begin - Result := TNCControl(inherited Add); -end; -*) function RttiMethodInvokeEx(const MethodName: string; RttiType: TRttiType; Instance: TValue; const Args: array of TValue): TValue; var diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.OwnerDrawFix.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.OwnerDrawFix.pas index fc0576a..207d627 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.OwnerDrawFix.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.OwnerDrawFix.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.OwnerDrawFix.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ComCtrls.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ComCtrls.pas index edbc16e..eb4a973 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ComCtrls.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ComCtrls.pas @@ -14,7 +14,7 @@ // // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************ diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Forms.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Forms.pas index abe4f15..511ebf2 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Forms.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Forms.pas @@ -14,7 +14,7 @@ // // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** @@ -1418,13 +1418,14 @@ procedure TSysDialogStyleHook.WndProc(var Message: TMessage); begin Message.Result := CallDefaultProc(Message); { DFBW =Default Frame Border Width } - DFBW := GetSysMetrics(SM_CXBORDER); - Inc(DFBW); + DFBW := GetSysMetrics(SM_CXSIZEFRAME) * 2; + //Inc(DFBW); LBorderSize := GetBorderSize; DX := LBorderSize.Left + LBorderSize.Right - 2*DFBW; // Adjust the window size if the vcl style border is smaller or larger // than the default frame border is. + if (DFBW <> LBorderSize.Left) then SetWindowPos(Handle, 0, 0, 0, SysControl.Width + DX, SysControl.Height + DX + 1, SWP_NOMOVE or SWP_NOZORDER or SWP_FRAMECHANGED); @@ -1486,9 +1487,8 @@ procedure TSysScrollingStyleHook.CMSCROLLTRACKING(var Message: TMessage); Handled := False; Exit; end; - P.X := Longint(Word(Message.WParam)); - P.Y := Longint(HiWord(Message.WParam)); - GetCursorPos(P); + P.X := Int16(Message.LParam and $0000FFFF); + P.Y := Int16(Message.LParam shr 16); if FScrollKind = sbVertical then begin if (P.Y >= 0) then @@ -1570,7 +1570,7 @@ procedure TSysScrollingStyleHook.DoSliderTrackTimer(Sender: TObject); GetCursorPos(P); if (FPrevPoint <> P) and (FDownPoint <> P) then begin - SendMessage(Handle, CM_SCROLLTRACKING, MakeWParam(P.X, P.Y), 0); + SendMessage(Handle, CM_SCROLLTRACKING, 0, PointToLParam(P)); FPrevPoint := P; FDownPoint := Point(-1, -1); end; diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Graphics.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Graphics.pas index 2086466..3b9fce6 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Graphics.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Graphics.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.Utils.Graphics.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Menus.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Menus.pas index 28d88d5..a92c2fa 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Menus.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Menus.pas @@ -14,7 +14,7 @@ // // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Misc.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Misc.pas index 4e3fd0d..697ef2a 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Misc.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.Misc.pas @@ -14,7 +14,7 @@ // // The Original Code is Vcl.Styles.Utils.Misc.pas. // -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ScreenTips.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ScreenTips.pas index ac85d93..32f99c5 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ScreenTips.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.ScreenTips.pas @@ -14,7 +14,7 @@ // // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.StdCtrls.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.StdCtrls.pas index 20781d4..c5c0d39 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.StdCtrls.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.StdCtrls.pas @@ -14,7 +14,7 @@ // // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysControls.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysControls.pas index 8999f0b..072033e 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysControls.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysControls.pas @@ -14,7 +14,7 @@ // // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysStyleHook.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysStyleHook.pas index ac535ba..e07a6b2 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysStyleHook.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.SysStyleHook.pas @@ -15,7 +15,7 @@ // The Original Code is uSysStyleHook.pas. // // Portions created by Mahdi Safsafi [SMP3] e-mail SMP@LIVE.FR -// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.pas index 38efbe0..5c81983 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.Utils.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.Utils.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // //************************************************************************************************** diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.UxTheme.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.UxTheme.pas index 074306c..8a158e8 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.UxTheme.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.UxTheme.pas @@ -15,7 +15,7 @@ // 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-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2013-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** @@ -152,6 +152,10 @@ implementation MARLETT_MAXIMIZE_CHAR = Char(49); {$ENDIF} +{$IFDEF HOOK_ExplorerStatusBar} + VSCLASS_EXPLORERSTATUSBAR = 'ExplorerStatusBar'; +{$IFEND} + type TDrawThemeBackground = function(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer): HRESULT; stdcall; TFuncDrawThemeBackground = function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; Foo: Pointer; Trampoline: TDrawThemeBackground; LThemeClass: string; hwnd: HWND): HRESULT; stdcall; @@ -598,17 +602,13 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId begin pColor := clNone; case iPartId of - 0: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); end; - 1: case iStateId of - 1: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 1: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); end; end; @@ -628,8 +628,7 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId case iPartId of 1: case iStateId of - 2: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 2: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); end; end; @@ -650,13 +649,11 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId case iPartId of TTP_STANDARD: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText)); end; 4: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlight)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlight)); end; end; @@ -677,8 +674,8 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId case iPartId of 9: case iStateId of - 1: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); - 2: pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlight)); + 1: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); + 2: pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlight)); end; end; @@ -742,8 +739,7 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId TEXT_MAININSTRUCTION: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlightText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlightText)); end; end; @@ -764,8 +760,7 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId HP_HEADERITEM: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText)); end; end; @@ -788,14 +783,12 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId 1: // preview background case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); end; 2: // preview text case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); end; end; @@ -811,39 +804,27 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId begin pColor := clNone; case iPartId of - 5: case iStateId of - 0: - ColorToRGB(StyleServices.GetSystemColor(clHighlight)); + 0: ColorToRGB(StyleServices.GetSystemColor(clHighlight)); end; - 6: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clBtnText)); end; - 7: case iStateId of - 1: - pColor := GetStyleHighLightColor(); - 2: - pColor := ColorToRGB(clGreen); + 1: pColor := GetStyleHighLightColor(); + 2: pColor := ColorToRGB(clGreen); end; - 8: case iStateId of - 0: - pColor := ColorToRGB(clRed); + 0: pColor := ColorToRGB(clRed); end; - 9: case iStateId of - 1: - pColor := ColorToRGB(clBlue); - 2: - pColor := ColorToRGB(clYellow); + 1: pColor := ColorToRGB(clBlue); + 2: pColor := ColorToRGB(clYellow); end; end; @@ -905,8 +886,7 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId case iPartId of 0, 2: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); // OK + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); // OK end; end; @@ -930,51 +910,38 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId case iPartId of 0: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); end; LVP_LISTITEM: case iStateId of - 0: - pColor := ColorToRGB(clRed); + 0: pColor := ColorToRGB(clRed); end; LVP_LISTSORTEDDETAIL: case iStateId of - 1: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 1: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); // normal main column (name) - 2: - pColor := ColorToRGB(clWindowText); - + 2: pColor := ColorToRGB(clWindowText); // SELECTED - 3: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 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); + 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)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clHighlight)); end; LVP_GROUPHEADER: case iStateId of - 0: - pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); + 0: pColor := ColorToRGB(StyleServices.GetSystemColor(clWindowText)); end; end; @@ -998,39 +965,30 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId // button with dropdown 3: case iStateId of - 1: - pColor := ColorToRGB(GetStyleBtnTextColor); // GetStyleHighLightColor; - 6: - pColor := ColorToRGB(clYellow); // StyleServices.GetSystemColor(clBtnShadow); + 1: pColor := ColorToRGB(GetStyleBtnTextColor); // GetStyleHighLightColor; + 6: pColor := ColorToRGB(clYellow); // StyleServices.GetSystemColor(clBtnShadow); end; - 4: case iStateId of - 1: - pColor := ColorToRGB(GetStyleBtnTextColor); + 1: pColor := ColorToRGB(GetStyleBtnTextColor); end; 9: case iStateId of - 1: - pColor := ColorToRGB(GetStyleBtnTextColor); + 1: pColor := ColorToRGB(GetStyleBtnTextColor); // ColorToRGB(StyleServices.GetSystemColor(clBtnText)); // Highlight - 2: - pColor := ColorToRGB(GetStyleBtnTextColor); + 2: pColor := ColorToRGB(GetStyleBtnTextColor); // ColorToRGB(StyleServices.GetSystemColor(clBtnText)); //OK - 3: - pColor := ColorToRGB(GetStyleBtnTextColor); + 3: pColor := ColorToRGB(GetStyleBtnTextColor); // ColorToRGB(StyleServices.GetSystemColor(clBtnText)); //OK - 6: - pColor := ColorToRGB(clLime); // StyleServices.GetSystemColor(clBtnShadow); + 6: pColor := ColorToRGB(clLime); // StyleServices.GetSystemColor(clBtnShadow); end; // header text 10: case iStateId of - 1: - pColor := ColorToRGB(GetStyleHighLightColor); + 1: pColor := ColorToRGB(GetStyleHighLightColor); end; end; @@ -1040,6 +998,24 @@ function Detour_UxTheme_GetThemeColor(hTheme: hTheme; iPartId, iStateId, iPropId end else {$ENDIF} + {$IFDEF HOOK_EXPLORERSTATUSBAR} + if SameText(LThemeClass, VSCLASS_EXPLORERSTATUSBAR) then + begin + pColor := clNone; + if (iPartId = 0) and (iStateId = 0) then + begin + pColor := ColorToRGB(StyleServices.GetSystemColor(clWindow)); + 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} begin Result := Trampoline_UxTheme_GetThemeColor(hTheme, iPartId, iStateId, iPropId, pColor); // pColor:=ColorToRGB(clRed); @@ -1177,15 +1153,11 @@ function Detour_UxTheme_DrawThemeText(hTheme: hTheme; hdc: hdc; iPartId, iStateI SaveIndex := SaveDC(hdc); try case iStateId of - MPI_NORMAL: - LDetails := StyleServices.GetElementDetails(tmPopupItemNormal); - MPI_HOT: - LDetails := StyleServices.GetElementDetails(tmPopupItemHot); + 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_DISABLED: LDetails := StyleServices.GetElementDetails(tmPopupItemDisabled); + MPI_DISABLEDHOT: LDetails := StyleServices.GetElementDetails(tmPopupItemDisabledHot); // MPI_DISABLEDPUSHED: LDetails := StyleServices.GetElementDetails(tmMenuBarItemDisabledPushed); else LDetails := StyleServices.GetElementDetails(tmPopupItemNormal); @@ -1207,18 +1179,12 @@ function Detour_UxTheme_DrawThemeText(hTheme: hTheme; hdc: hdc; iPartId, iStateI 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); + 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; @@ -1326,14 +1292,10 @@ function Detour_UxTheme_DrawThemeText(hTheme: hTheme; hdc: hdc; iPartId, iStateI 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); + 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; @@ -1384,18 +1346,12 @@ function Detour_UxTheme_DrawThemeText(hTheme: hTheme; hdc: hdc; iPartId, iStateI 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); + 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); @@ -1411,22 +1367,14 @@ function Detour_UxTheme_DrawThemeText(hTheme: hTheme; hdc: hdc; iPartId, iStateI 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); + 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 @@ -1441,18 +1389,12 @@ function Detour_UxTheme_DrawThemeText(hTheme: hTheme; hdc: hdc; iPartId, iStateI 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); + 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; @@ -1635,18 +1577,12 @@ function Detour_UxTheme_DrawThemeTextEx(hTheme: hTheme; hdc: hdc; iPartId: Integ 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); + 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 @@ -1967,12 +1903,9 @@ function UxTheme_ListView(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; LVP_EXPANDBUTTON: begin case iStateId of - LVEB_NORMAL: - LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedNormal); - LVEB_HOVER: - LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedHot); - LVEB_PUSHED: - LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedPressed); + LVEB_NORMAL: LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedNormal); + LVEB_HOVER: LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedHot); + LVEB_PUSHED: LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedPressed); else LDetails := StyleServices.GetElementDetails(tcpThemedChevronOpenedNormal); end; @@ -1991,12 +1924,9 @@ function UxTheme_ListView(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; LVP_COLLAPSEBUTTON: begin case iStateId of - LVCB_NORMAL: - LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedNormal); - LVCB_HOVER: - LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedHot); - LVCB_PUSHED: - LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedPressed); + LVCB_NORMAL: LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedNormal); + LVCB_HOVER: LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedHot); + LVCB_PUSHED: LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedPressed); else LDetails := StyleServices.GetElementDetails(tcpThemedChevronClosedNormal); end; @@ -2123,33 +2053,18 @@ function UxTheme_Header(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; co 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); + 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; @@ -2187,14 +2102,11 @@ function UxTheme_Header(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; co HP_HEADERDROPDOWN: begin case iStateId of - HDDS_NORMAL: - LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal); + HDDS_NORMAL: LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal); // tcDropDownButtonNormal, thHeaderDropDownNormal - HDDS_SOFTHOT: - LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); + HDDS_SOFTHOT: LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); // tcDropDownButtonHot, thHeaderDropDownSoftHot - HDDS_HOT: - LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); + HDDS_HOT: LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); // tcDropDownButtonHot, thHeaderDropDownHot end; @@ -2205,14 +2117,11 @@ function UxTheme_Header(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; co HP_HEADERDROPDOWNFILTER: begin case iStateId of - HDDFS_NORMAL: - LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal); + HDDFS_NORMAL: LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownNormal); // tcDropDownButtonNormal, thHeaderDropDownNormal - HDDFS_SOFTHOT: - LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); + HDDFS_SOFTHOT: LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); // tcDropDownButtonHot, thHeaderDropDownSoftHot - HDDFS_HOT: - LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); + HDDFS_HOT: LDetails := StyleServices.GetElementDetails(ttbSplitButtonDropDownHot); // tcDropDownButtonHot, thHeaderDropDownHot end; @@ -2395,12 +2304,10 @@ function UxTheme_ToolBar(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; c 0: begin case iStateId of - 0: begin if (hwnd <> 0) then DrawStyleParentBackground(hwnd, hdc, pRect); - LDetails.Element := teToolBar; LDetails.Part := 0; LDetails.State := 0; @@ -2409,7 +2316,6 @@ function UxTheme_ToolBar(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; c DrawStyleElement(hdc, StyleServices.GetElementDetails(tmPopupBackground), pRect); exit(S_OK); end; - end; end; @@ -2737,16 +2643,11 @@ function UxTheme_MonthCal(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; 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); + 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; @@ -2754,14 +2655,10 @@ function UxTheme_MonthCal(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; 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); + 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); @@ -2784,14 +2681,10 @@ function UxTheme_DatePicker(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer 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); + 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); @@ -2802,14 +2695,10 @@ function UxTheme_DatePicker(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer 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); + 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); @@ -2936,26 +2825,18 @@ function UxTheme_Spin(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; cons 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); + 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); + 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); @@ -2963,35 +2844,25 @@ function UxTheme_Spin(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; cons 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); + 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); + 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; @@ -3016,16 +2887,11 @@ function UxTheme_ListBox(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; c 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); + 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; @@ -3072,7 +2938,6 @@ function UxTheme_Navigation(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer DrawStyleFillRect(LBitmap.Canvas.Handle, pRect, LColor); case iStateId of - 1: begin DrawStyleElement(LBitmap.Canvas.Handle, StyleServices.GetElementDetails(ttbButtonNormal), pRect); @@ -3127,11 +2992,9 @@ function UxTheme_Navigation(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer LCanvas.Handle := 0; LCanvas.Free; end; - finally LBitmap.Free; end; - exit(S_OK); end; end; @@ -3248,7 +3111,6 @@ function UxTheme_TreeView(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; 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; @@ -3271,18 +3133,12 @@ function UxTheme_Button(hTheme: hTheme; hndc: hdc; iPartId, iStateId: Integer; 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); + 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(hndc); @@ -3318,18 +3174,12 @@ function UxTheme_Button(hTheme: hTheme; hndc: hdc; iPartId, iStateId: Integer; 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); + 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(hndc); @@ -3364,16 +3214,11 @@ function UxTheme_Button(hTheme: hTheme; hndc: hdc; iPartId, iStateId: Integer; 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); + 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(hndc); @@ -3391,22 +3236,14 @@ function UxTheme_Button(hTheme: hTheme; hndc: hdc; iPartId, iStateId: Integer; 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); + 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(hndc, LDetails, pRect); @@ -3416,47 +3253,27 @@ function UxTheme_Button(hTheme: hTheme; hndc: hdc; iPartId, iStateId: Integer; 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); + 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); + 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(hndc, LDetails, pRect); @@ -3483,7 +3300,6 @@ function UxTheme_TaskDialog(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer 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); @@ -3502,18 +3318,12 @@ function UxTheme_TaskDialog(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer 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); + 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); @@ -3553,7 +3363,7 @@ function UxTheme_TaskDialog(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer end end; - OutputDebugString(PChar(Format('UxTheme_TaskDialog class %s hTheme %d iPartId %d iStateId %d', [THThemesClasses.Items[hTheme],hTheme, iPartId, iStateId]))); + // 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; {$ENDIF} @@ -3566,14 +3376,10 @@ function UxTheme_ProgressBar(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Intege 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_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 @@ -3640,196 +3446,128 @@ function UxTheme_ScrollBar(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; 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; + 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; + 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; + 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 + 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 + 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 + 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 + 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; + 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 + 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 + 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; @@ -3860,12 +3598,9 @@ function UxTheme_Edit(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; cons 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_NORMAL: LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollNormal); + EPSN_HOT: LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollHot); + EPSN_FOCUSED: LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollFocused); EPSN_DISABLED: begin // LDetails := StyleServices.GetElementDetails(teEditBorderNoScrollDisabled); @@ -3881,14 +3616,10 @@ function UxTheme_Edit(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; cons 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); + 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); @@ -3898,14 +3629,10 @@ function UxTheme_Edit(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; cons 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); + 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); @@ -3915,14 +3642,10 @@ function UxTheme_Edit(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Integer; cons 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); + 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); @@ -4632,156 +4355,156 @@ function UxTheme_CommandModule(hTheme: hTheme; hdc: hdc; iPartId, iStateId: Inte initialization -VCLStylesLock := TCriticalSection.Create; -THThemesClasses := TDictionary.Create; -THThemesHWND := TDictionary.Create; -FuncsDrawThemeBackground := TDictionary.Create(TIStringComparer.Ordinal); + VCLStylesLock := TCriticalSection.Create; + THThemesClasses := TDictionary.Create; + THThemesHWND := TDictionary.Create; + FuncsDrawThemeBackground := TDictionary.Create(TIStringComparer.Ordinal); -if StyleServices.Available then -begin -// Element specific handlers + if StyleServices.Available then + begin + // Element specific handlers -{$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_SearchBoxComposited, @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); + {$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_SearchBoxComposited, @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_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); -{$ENDIF} -{$IFDEF HOOK_AllButtons} - 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, 10... - begin - FuncsDrawThemeBackground.Add(VSCLASS_NAVIGATION, @UxTheme_Navigation); - FuncsDrawThemeBackground.Add(VSCLASS_COMMONITEMSDIALOG, @UxTheme_CommonItemsDialog); - end; -{$ENDIF} + 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); + {$ENDIF} + {$IFDEF HOOK_AllButtons} + 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, 10... + begin + FuncsDrawThemeBackground.Add(VSCLASS_NAVIGATION, @UxTheme_Navigation); + FuncsDrawThemeBackground.Add(VSCLASS_COMMONITEMSDIALOG, @UxTheme_CommonItemsDialog); + end; + {$ENDIF} - // General hooks - @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); + // General hooks + @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; - {$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; + 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. diff --git a/Ext/VCLStyleUtils/Common/Vcl.Styles.WebBrowser.pas b/Ext/VCLStyleUtils/Common/Vcl.Styles.WebBrowser.pas index f9df32e..882269e 100644 --- a/Ext/VCLStyleUtils/Common/Vcl.Styles.WebBrowser.pas +++ b/Ext/VCLStyleUtils/Common/Vcl.Styles.WebBrowser.pas @@ -15,7 +15,7 @@ // The Original Code is Vcl.Styles.WebBrowser.pas. // // The Initial Developer of the Original Code is Rodrigo Ruz V. -// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2021 Rodrigo Ruz V. +// Portions created by Rodrigo Ruz V. are Copyright (C) 2012-2023 Rodrigo Ruz V. // All Rights Reserved. // // ************************************************************************************************** diff --git a/Ext/VCLStyleUtils/DDetours/Source/DDetours.pas b/Ext/VCLStyleUtils/DDetours/Source/DDetours.pas index 6682b64..79135fd 100644 --- a/Ext/VCLStyleUtils/DDetours/Source/DDetours.pas +++ b/Ext/VCLStyleUtils/DDetours/Source/DDetours.pas @@ -17,6 +17,7 @@ {define FIX_MADEXCEPT if you are using crash on buffer overrun/underrun feature from MadExcept } {.$DEFINE FIX_MADEXCEPT} +{.$define DEVMODE} {$IFDEF FPC} {$MODE DELPHI} @@ -591,7 +592,7 @@ function fDecodeInst(PInst: PInstruction): Integer; {$IFDEF CPUX64} IsNxtInstData := ((PInst^.Disp.Flags and (dfUsed or dfRip) = (dfUsed or dfRip)) and (PInst^.Disp.Value = 0)); {$ELSE !CPUX64} - IsNxtInstData := (PInst^.Disp.Value = UInt64(PInst^.NextInst)); + IsNxtInstData := (PInst^.Disp.Value = Int64(PInst^.NextInst)); {$ENDIF CPUX64} if IsNxtInstData then begin @@ -1037,7 +1038,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; GetMem(POpc, MAX_INST_LENGTH_N + 1); try // Opcsz := GetInstOpCodes(PInst, POpc); - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); Relsz := GetInt64Size(Offset); {$IFDEF CPUX64} if Relsz = ops16bits then @@ -1110,7 +1111,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; case Relsz of ops16bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 5); PQ^ := opPrfOpSize; Inc(PQ); PWord(PQ)^ := LOOP_To_JccZ[PInst^.OpCode and 3]; @@ -1120,7 +1121,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; end; ops32bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); PWord(PQ)^ := LOOP_To_JccZ[PInst^.OpCode and 3]; Inc(PQ, 2); PInt32(PQ)^ := Int32(Offset); @@ -1204,7 +1205,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; TEST CX,CX JZ @Dst } - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 5); PQ^ := opPrfOpSize; Inc(PQ); PQ^ := $0F; @@ -1220,7 +1221,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; TEST ECX,ECX JZ @Dst } - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); PQ^ := $0F; Inc(PQ); PQ^ := $84; // JZ ! @@ -1261,7 +1262,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; case Relsz of ops8bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 2); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 2); PInt8(PQ)^ := UInt8(NOpc); Inc(PQ); PInt8(PQ)^ := Int8(Offset); @@ -1269,7 +1270,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; end; ops16bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 5); PUInt32(PQ)^ := UInt32(NOpc); Inc(PQ, 3); PInt16(PQ)^ := Int16(Offset); @@ -1277,7 +1278,7 @@ function CorrectJ(PInst: PInstruction; NewAddr: PByte): Integer; end; ops32bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(PQ) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(PQ) - 6); PUInt16(PQ)^ := UInt16(NOpc); Inc(PQ, 2); PInt32(PQ)^ := Int32(Offset); @@ -1435,7 +1436,7 @@ function CorrectCallRel(PInst: PInstruction; NewAddr: PByte): Integer; P: PByte; begin P := NewAddr; - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(P) - 6); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(P) - 6); Relsz := GetInt64Size(Offset); {$IFDEF CPUX64} { Only 32-bits relative offset is supported on x64! } @@ -1449,7 +1450,7 @@ function CorrectCallRel(PInst: PInstruction; NewAddr: PByte): Integer; case Relsz of ops16bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(P) - 4); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(P) - 4); P^ := opPrfOpSize; Inc(P); P^ := $E8; @@ -1459,7 +1460,7 @@ function CorrectCallRel(PInst: PInstruction; NewAddr: PByte): Integer; end; ops32bits: begin - Offset := Int64(UInt64(PInst^.Branch.Target) - UInt64(P) - 5); + Offset := Int64(Int64(PInst^.Branch.Target) - Int64(P) - 5); P^ := $E8; Inc(P); PInt32(P)^ := Int32(Offset); diff --git a/README.htm b/README.htm new file mode 100644 index 0000000..5d81a4e --- /dev/null +++ b/README.htm @@ -0,0 +1,166 @@ + +

VCLThemeSelector License

+

Easy and elegant preview/selection of Theme (Light or Dark) for VCL apps plus HighDPI demo

+

Related links: https://www.embarcadero.com/ - https://learndelphi.org/

+

With VCLThemeSelector you can easily add a modern and elegant Theme selector for your Delphi VCL app. The Form shows all the VCL Styles included in your application, then arrange them in defined Rows and Columns. You can specify to include or not 'Windows' not-styled option.

+

Preview (from Delphi 10.4 to Delphi 12 - using PerControlStyles)

+

/Demo/Images/PreviewD10_4.jpg

+

Preview (before Delphi 10.3 - Without PerControlStyle)

+

/Demo/Images/PreviewD10_3.jpg

+

Use the VCLThemeSelectorLauncher demo present in Demo Folder to test it, and see how it's easy to use it, like in this example:

+
var
+  LStyleName: string;
+  LExcludeWindows: boolean;
+  LMaxRows, LMaxCols: Integer;
+begin  
+  LStyleName := TStyleManager.ActiveStyle.Name;
+  LExcludeWindows := False;
+  LMaxRows := 3;
+  LMaxCols := 4;
+  if ShowVCLThemeSelector(LStyleName, LExcludeWindows, LMaxRows, LMaxCols) then
+    TStyleManager.SetStyle(LStyleName);
+end;    
+
+

License: the CBVCLStylePreview is based on VCLStylePreview (Vcl.Styles.Ext) from: +github.com/RRUZ/vcl-styles-utils with full High-DPI support, and released under Apache 2.0 license.

+

High-DPI Delphi App full example

+

Also included in this repository you can find a full example of an HighDPI - VCL Themed enabled application that uses the VCLThemeSelector to change the Theme. You can run the demo from: Demo\Bin\ModernAppDemo.exe.

+

Preview ( Delphi 12 and Windows 11 Modern Dark Style)

+

/Demo/Images/DemoPreviewD11_Dark.jpg

+

Preview ( Delphi 12 and Windows 11 Modern Light Style)

+

/Demo/Images/DemoPreview_D11_Light.jpg

+

Demo from 10.1 to 10.3 (with SVGIconsImageList)

+

/Demo/Images/DemoPreview.jpg

+

Demo with Delphi 12 (with PerControlStyle and IconFontsImageList)

+

/Demo/Images/DemoPreviewD10_4.jpg

+

WARNING: to edit and compile the demo you must first download: +IconFontsImageList free components here… and SVGIconImageList free components here…

+

You can also use StyledComponents, enabling STYLEDCOMPONENTS Compiler directive in the Demo. You must first download StyledComponents here…

+

Preview using StyledComponents with Rounded Buttons

+

/Demo/Images/DemoPreviewStyledComponents.jpg

+

License

+

this Demo is inspired by TSplitView demo (original software is Copyright (c) 2015 Embarcadero Technologies, Inc.) and is released under Apache 2.0 license.

+

Delphi Support

+

Compatibility

+

VCLThemeSelector and VCLThemeSelectorLauncher are compatible from Delphi XE5 to 12, with some differences to High-DPI support.

+

ModernAppDemo is compatible with Delphi Delphi 12, 11, 10.4, 10.3, 10.2 and 10.1 (notice: 10.1 png stream format of pictures inside biolife.xml are incompatible: use an old biolife.xml file).

+

Release Notes

+

26 Apr 2024

+
    +
  • Added support for Delphi 12.1
  • +
  • Added StyledComponents integration
  • +
  • Added StyledComponents interposer in demo
  • +
+

20 Oct 2023

+
    +
  • Added support for Delphi 12
  • +
  • Examples Built with Delphi 12 (beta)
  • +
+

04 Mar 2023

+
    +
  • Built with Delphi 11.3
  • +
  • More VCL Styles supported
  • +
+

15 Sep 2022

+
    +
  • Built with Delphi 11.2
  • +
+

10 Apr 2022

+
    +
  • Built with Delphi 11.1
  • +
  • Fixed Size of menu when resize icons
  • +
+

16 Feb 2022

+
    +
  • Added italian translation
  • +
  • SetEditorStyleAttributes to assign required/readonly attributes to edit controls
  • +
  • Added pixelsperinch when storing font
  • +
  • Added RegisterThemeAttributes to interface to add personal Styles
  • +
+

19 Oct 2021

+
    +
  • Replaced “Windows11 Light” and “Windows11 Dark” Styles with “Windows11 Modern Light” and “Windows11 Modern Dark”
  • +
  • Updated demos to use new Windows 11 Styles available from Get-It
  • +
+

16 Oct 2021

+
    +
  • Added New Windows11 Light and Dark Themes to Modern Demo (Delphi 11)
  • +
  • Added New Windows11 Light and Dark Themes to Launcher (Delphi 11)
  • +
+

23 Aug 2021

+
    +
  • Added support for Delphi 11
  • +
+

24 Jan 2021

+
    +
  • Changed preview to separate Light and Dark Themes
  • +
  • Added support for info about Themes: +TThemeAttribute = class +StyleName: String; +ThemeType: TThemeType; +EditRequiredColor: TColor; +EditReadonlyColor: TColor; +end;
  • +
+

30 Aug 2020

+
    +
  • Changed demo to use new IconsFontsVirtualImageList and SVGIconVirtualImageList components
  • +
  • Updated external project VCLStyleUtils
  • +
+

19 Jun 2020

+
    +
  • Fixed VCLThemeSelector for app in “Windows” Style for D10.4
  • +
  • Recompiled Demo with IconFontsImageList 2.0 (with GDI+ support)
  • +
+

11 Jun 2020

+
    +
  • Added SVGIconImageList
  • +
  • Demo: swith icons from Fonts to SVG
  • +
+

09 Jun 2020

+
    +
  • Updated Demo for Delphi 10.4
  • +
  • Added custom form “per-control styled” for D10.4
  • +
+

17 May 2020

+
    +
  • Changed “Material Design Desktop” Font used in Demo
  • +
+

27 Apr 2020

+
    +
  • Added VCLThemeSelectorLauncher
  • +
+

25 Apr 2020

+
    +
  • First release of Selector and Demo App
  • +
diff --git a/README.md b/README.md index 925207c..9465e66 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,11 @@ **Easy and elegant preview/selection of Theme (Light or Dark) for VCL apps plus HighDPI demo** -![Delphi 11 Alexandria Support](./Demo/Images/SupportingDelphi.jpg) - Related links: https://www.embarcadero.com/ - https://learndelphi.org/ With **VCLThemeSelector** you can easily add a modern and elegant Theme selector for your Delphi VCL app. The Form shows all the VCL Styles included in your application, then arrange them in defined Rows and Columns. You can specify to include or not 'Windows' not-styled option. -### Preview (with Delphi 10.4/11 - PerControlStyles) +### Preview (from Delphi 10.4 to Delphi 12 - using PerControlStyles) ![/Demo/Images/PreviewD10_4.jpg](./Demo/Images/PreviewD10_4.jpg) ### Preview (before Delphi 10.3 - Without PerControlStyle) @@ -38,31 +36,49 @@ License: the CBVCLStylePreview is based on VCLStylePreview (Vcl.Styles.Ext) from Also included in this repository you can find a full example of an HighDPI - VCL Themed enabled application that uses the VCLThemeSelector to change the Theme. You can run the demo from: Demo\Bin\ModernAppDemo.exe. -### Preview ( Delphi 11.3 and Windows 11 Modern Dark Style) +### Preview ( Delphi 12 and Windows 11 Modern Dark Style) ![/Demo/Images/DemoPreviewD11_Dark.jpg](./Demo/Images/DemoPreviewD11_Dark.jpg) -### Preview ( Delphi 11.0 and Windows 11 Modern Light Style) +### Preview ( Delphi 12 and Windows 11 Modern Light Style) ![/Demo/Images/DemoPreview_D11_Light.jpg](/Demo/Images/DemoPreview_D11_Light.jpg) ### Demo from 10.1 to 10.3 (with SVGIconsImageList) ![/Demo/Images/DemoPreview.jpg](./Demo/Images/DemoPreview.jpg) -### Demo with 10.4 (with PerControlStyle and IconFontsImageList) +### Demo with Delphi 12 (with PerControlStyle and IconFontsImageList) ![/Demo/Images/DemoPreviewD10_4.jpg](./Demo/Images/DemoPreviewD10_4.jpg) WARNING: to edit and compile the demo you must first download: -[IconFontsImageList free components here...](https://github.com/EtheaDev/IconFontsImageList/) and [SVGIconImageList free components here...](https://github.com/EtheaDev/SVGIconImageList/) +IconFontsImageList free components [here...](https://github.com/EtheaDev/IconFontsImageList/) and SVGIconImageList free components [here...](https://github.com/EtheaDev/SVGIconImageList/) + +You can also use StyledComponents, enabling STYLEDCOMPONENTS Compiler directive in the Demo. You must first download StyledComponents [here...](https://github.com/EtheaDev/StyledComponents/) + +### Preview using StyledComponents with Rounded Buttons +![/Demo/Images/DemoPreviewStyledComponents.jpg](./Demo/Images/DemoPreviewStyledComponents.jpg) + +### License -License: this Demo is inspired by TSplitView demo (original software is Copyright (c) 2015 Embarcadero Technologies, Inc.) and is released under Apache 2.0 license. +this Demo is inspired by TSplitView demo (original software is Copyright (c) 2015 Embarcadero Technologies, Inc.) and is released under Apache 2.0 license. + +![Delphi Support](./Demo/Images/SupportingDelphi.jpg) ## Compatibility ## -**VCLThemeSelector** and **VCLThemeSelectorLauncher** are compatible from Delphi XE5 to 11, with some differences to High-DPI support. +**VCLThemeSelector** and **VCLThemeSelectorLauncher** are compatible from Delphi XE5 to 12, with some differences to High-DPI support. -**ModernAppDemo** is compatible with Delphi Delphi 11, 10.4, 10.3, 10.2 and 10.1 (notice: 10.1 png stream format of pictures inside biolife.xml are incompatible: use an old biolife.xml file). +**ModernAppDemo** is compatible with Delphi Delphi 12, 11, 10.4, 10.3, 10.2 and 10.1 (notice: 10.1 png stream format of pictures inside biolife.xml are incompatible: use an old biolife.xml file). ## Release Notes ## +26 Apr 2024 +- Added support for Delphi 12.1 +- Added StyledComponents integration +- Added StyledComponents interposer in demo + +20 Oct 2023 +- Added support for Delphi 12 +- Examples Built with Delphi 12 (beta) + 04 Mar 2023 - Built with Delphi 11.3 - More VCL Styles supported diff --git a/Source/CBVCLStylePreview.pas b/Source/CBVCLStylePreview.pas index 7b52250..dc413c6 100644 --- a/Source/CBVCLStylePreview.pas +++ b/Source/CBVCLStylePreview.pas @@ -4,7 +4,7 @@ { based on: VCLStylePreview Vcl.Styles.Ext } { https://github.com/RRUZ/vcl-styles-utils/ } { } -{ Copyright (c) 2020-2023 (Ethea S.r.l.) } +{ Copyright (c) 2020-2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { } { https://github.com/EtheaDev/VCLThemeSelector } diff --git a/Source/CBVCLStylePreviewForm.pas b/Source/CBVCLStylePreviewForm.pas index 413bd08..1dea7e2 100644 --- a/Source/CBVCLStylePreviewForm.pas +++ b/Source/CBVCLStylePreviewForm.pas @@ -4,7 +4,7 @@ { based on: VCLStylePreview Vcl.Styles.Ext } { https://github.com/RRUZ/vcl-styles-utils/ } { } -{ Copyright (c) 2020-2023 (Ethea S.r.l.) } +{ Copyright (c) 2020-2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { } { https://github.com/EtheaDev/VCLThemeSelector } diff --git a/Source/FVCLThemeSelector.dfm b/Source/FVCLThemeSelector.dfm index 539a73e..1eef085 100644 --- a/Source/FVCLThemeSelector.dfm +++ b/Source/FVCLThemeSelector.dfm @@ -21,13 +21,11 @@ object VCLThemeSelectorForm: TVCLThemeSelectorForm Align = alBottom BevelOuter = bvNone TabOrder = 0 - ExplicitTop = 464 - ExplicitWidth = 1065 object StyleLabel: TPanel AlignWithMargins = True Left = 3 Top = 3 - Width = 863 + Width = 859 Height = 32 Align = alClient Alignment = taRightJustify @@ -36,7 +34,7 @@ object VCLThemeSelectorForm: TVCLThemeSelectorForm TabOrder = 1 end object paRight: TPanel - Left = 869 + Left = 865 Top = 0 Width = 196 Height = 38 @@ -71,7 +69,6 @@ object VCLThemeSelectorForm: TVCLThemeSelectorForm Align = alLeft TabOrder = 1 OnMouseWheel = ScrollBoxMouseWheel - ExplicitHeight = 439 object LeftFlowPanel: TFlowPanel Left = 0 Top = 0 @@ -93,12 +90,10 @@ object VCLThemeSelectorForm: TVCLThemeSelectorForm Align = alClient TabOrder = 2 OnMouseWheel = ScrollBoxMouseWheel - ExplicitWidth = 528 - ExplicitHeight = 439 object RightFlowPanel: TFlowPanel Left = 0 Top = 0 - Width = 524 + Width = 520 Height = 400 Align = alTop AutoSize = True @@ -115,7 +110,6 @@ object VCLThemeSelectorForm: TVCLThemeSelectorForm Height = 25 Align = alTop TabOrder = 3 - ExplicitWidth = 1065 object LightPanel: TPanel Left = 1 Top = 1 @@ -129,7 +123,7 @@ object VCLThemeSelectorForm: TVCLThemeSelectorForm object DarkPanel: TPanel Left = 537 Top = 1 - Width = 527 + Width = 523 Height = 23 Align = alClient BevelOuter = bvLowered diff --git a/Source/FVCLThemeSelector.pas b/Source/FVCLThemeSelector.pas index 7ff228e..188a1e2 100644 --- a/Source/FVCLThemeSelector.pas +++ b/Source/FVCLThemeSelector.pas @@ -2,7 +2,7 @@ { } { VCLThemeSelector: Form for Preview and Selection of VCL Style } { } -{ Copyright (c) 2020-2023 (Ethea S.r.l.) } +{ Copyright (c) 2020-2024 (Ethea S.r.l.) } { Author: Carlo Barazzetta } { Contributor: Nicola Tambascia } { } diff --git a/Source/VCLThemeSelector.inc b/Source/VCLThemeSelector.inc index 51fd592..2803380 100644 --- a/Source/VCLThemeSelector.inc +++ b/Source/VCLThemeSelector.inc @@ -33,3 +33,13 @@ {$DEFINE D11_0+} {$ENDIF} +// Delphi 12.0 +{$IFDEF VER360} + {$DEFINE D10_1+} + {$DEFINE D10_2+} + {$DEFINE D10_3+} + {$DEFINE D10_4+} + {$DEFINE D11_0+} + {$DEFINE D12_0+} +{$ENDIF} +