From d0a88c83b6ce341afebb42f5236ca12310ae8116 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 2 Mar 2009 18:02:25 +0000 Subject: [PATCH] =?UTF-8?q?Importaci=C3=B3n=20inicial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.TMSSoftware@10 ccf39c52-e665-a648-be6a-52d81bcb5567 --- .../1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dpr | 13 + .../1/Demo/AdvInputTaskDialogDemo.dproj | 113 + .../1.5.1.2/1/Demo/AdvInputTaskDialogDemo.res | Bin 0 -> 5280 bytes .../1.5.1.2/1/Demo/AdvMsgBoxExplorer.dpr | 14 + .../1.5.1.2/1/Demo/AdvMsgBoxExplorer.dproj | 41 + .../1.5.1.2/1/Demo/AdvMsgBoxExplorer.res | Bin 0 -> 4396 bytes .../1.5.1.2/1/Demo/TaskDialogExplorer.dpr | 14 + .../1.5.1.2/1/Demo/TaskDialogExplorer.dproj | 41 + .../1.5.1.2/1/Demo/TaskDialogExplorer.res | Bin 0 -> 4396 bytes .../1/Demo/UAdvInputTaskDialogDemo.dfm | 100 + .../1/Demo/UAdvInputTaskDialogDemo.pas | 69 + .../internal/1.5.1.2/1/Demo/Unit1.dfm | 130 + .../internal/1.5.1.2/1/Demo/Unit1.pas | 125 + .../internal/1.5.1.2/1/Demo/fmMain.dfm | 310 + .../internal/1.5.1.2/1/Demo/fmMain.pas | 293 + .../1.5.1.2/1/Lib/D12/AdvGroupBox.dcu | Bin 0 -> 19941 bytes .../1.5.1.2/1/Lib/D12/AdvOfficeButtons.dcu | Bin 0 -> 109503 bytes .../1.5.1.2/1/Lib/D12/PictureContainer.dcu | Bin 0 -> 32143 bytes .../internal/1.5.1.2/1/Lib/D12/TaskDialog.dcu | Bin 0 -> 135496 bytes .../1.5.1.2/1/Lib/D12/TaskDialogDE.dcu | Bin 0 -> 2250 bytes .../1.5.1.2/1/Lib/D12/TaskDialogEx.dcu | Bin 0 -> 8630 bytes .../1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.bpl | Bin 0 -> 389120 bytes .../1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.dcp | Bin 0 -> 396631 bytes .../1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.dcu | Bin 0 -> 4096 bytes .../1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.bpl | Bin 0 -> 384000 bytes .../1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcp | Bin 0 -> 385100 bytes .../1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcu | Bin 0 -> 4176 bytes .../1.5.1.2/1/Lib/D12/TaskDialogRegDE.dcu | Bin 0 -> 715 bytes .../internal/1.5.1.2/1/Lib/D12/advgdip.dcu | Bin 0 -> 68331 bytes .../1.5.1.2/1/Lib/D12/advglowbutton.dcu | Bin 0 -> 124670 bytes .../1.5.1.2/1/Lib/D12/advhintinfo.dcu | Bin 0 -> 2958 bytes .../internal/1.5.1.2/1/Lib/D12/advstyleif.dcu | Bin 0 -> 1436 bytes .../internal/1.5.1.2/1/Lib/D12/gdipicture.dcu | Bin 0 -> 9497 bytes .../internal/1.5.1.2/1/Source/AdvGroupBox.pas | 668 ++ .../1.5.1.2/1/Source/AdvOfficeButtons.pas | 2814 ++++++++ .../1.5.1.2/1/Source/AdvOfficeButtons.res | Bin 0 -> 6784 bytes .../internal/1.5.1.2/1/Source/D2009.groupproj | 48 + .../internal/1.5.1.2/1/Source/TaskDialog.pas | 4798 +++++++++++++ .../internal/1.5.1.2/1/Source/TaskDialog.res | Bin 0 -> 20004 bytes .../1.5.1.2/1/Source/TaskDialogDE.pas | 84 + .../1.5.1.2/1/Source/TaskDialogEx.pas | 300 + .../1.5.1.2/1/Source/TaskDialogPkgD2009D.dpk | 39 + .../1/Source/TaskDialogPkgD2009D.dproj | 91 + .../1.5.1.2/1/Source/TaskDialogPkgD2009D.res | Bin 0 -> 3008 bytes .../1.5.1.2/1/Source/TaskDialogPkgD2009R.dpk | 47 + .../1/Source/TaskDialogPkgD2009R.dproj | 98 + .../1.5.1.2/1/Source/TaskDialogPkgD2009R.res | Bin 0 -> 3008 bytes .../1.5.1.2/1/Source/TaskDialogRegDE.pas | 49 + .../internal/1.5.1.2/1/Source/advgdip.pas | 3335 +++++++++ .../1.5.1.2/1/Source/advglowbutton.pas | 6099 +++++++++++++++++ .../1.5.1.2/1/Source/advglowbuttondb.res | Bin 0 -> 5716 bytes .../internal/1.5.1.2/1/Source/advhintinfo.pas | 91 + .../internal/1.5.1.2/1/Source/advstyleif.pas | 63 + .../internal/1.5.1.2/1/Source/gdipicture.pas | 420 ++ .../internal/1.5.1.2/1/Source/htmlengo.pas | 2353 +++++++ .../1.5.1.2/1/Source/picturecontainer.pas | 241 + .../internal/1.5.1.2/1/Source/tmsdefs.inc | 214 + .../internal/1.5.1.2/1/Source/wiif.pas | 257 + .../internal/1.5.1.2/1/Source/wiimpl.pas | 908 +++ 59 files changed, 24280 insertions(+) create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dpr create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dproj create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dpr create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dproj create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dpr create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dproj create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.dfm create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.dfm create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.dfm create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/AdvGroupBox.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/AdvOfficeButtons.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/PictureContainer.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialog.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogDE.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogEx.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.bpl create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.dcp create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.bpl create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcp create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogRegDE.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advgdip.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advglowbutton.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advhintinfo.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advstyleif.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/gdipicture.dcu create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvGroupBox.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/D2009.groupproj create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogDE.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogEx.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dpk create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dproj create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dpk create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dproj create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogRegDE.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/advgdip.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbutton.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbuttondb.res create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/advhintinfo.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/advstyleif.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/gdipicture.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/htmlengo.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/picturecontainer.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/tmsdefs.inc create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/wiif.pas create mode 100644 TAdvTaskDialog/internal/1.5.1.2/1/Source/wiimpl.pas diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dpr b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dpr new file mode 100644 index 0000000..ea78c08 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dpr @@ -0,0 +1,13 @@ +program AdvInputTaskDialogDemo; + +uses + Forms, + UAdvInputTaskDialogDemo in 'UAdvInputTaskDialogDemo.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dproj b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dproj new file mode 100644 index 0000000..cbce3c2 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.dproj @@ -0,0 +1,113 @@ + + + {40ed30c4-44b3-4d9c-8bf7-596b00214c5a} + Debug + AnyCPU + DCC32 + AdvInputTaskDialogDemo.exe + AdvInputTaskDialogDemo.dpr + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + DEBUG + + + Delphi.Personality + + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1033 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Microsoft Office XP Sample Automation Server Wrapper Components + Microsoft Office 2000 Sample Automation Server Wrapper Components + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + + + AdvInputTaskDialogDemo.dpr + + + + + + + MainSource + + +
Form1
+
+
+
\ No newline at end of file diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.res b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvInputTaskDialogDemo.res new file mode 100644 index 0000000000000000000000000000000000000000..be94ddf25bdb844df2435f4a878210f039e9ba4f GIT binary patch literal 5280 zcmbVQO>Y}j6n#+^AS9p?EZBME6^fLvHZ4#km?(TGf&wZvEJvkw8OSLK0bDNmWgNE?Dyx-UAxtGT%&%e)~=7+ zeC6N7hZu%!o@2%%pXM@OfLETiT@DU)6F##SuFZ8*B$Mq~p?$2q>SGvfAD3~AOCDxU z$2Aw^MQrBb90!aEKC!dhxies&83(ixbKZwIw0v6ST5<~L-UOJmOvaFg}gg%yF4#w2gy!^kp66A&%r<_AviTB@b$pGeQn>tR)BG zadufhbIO>agX{&^CS8Z zPxMa70qq&EY1nVMFV1jYvlq@dkP|T#n{hop*0Ju1$vV(BbL@FG;9J-iDhFyLhMd3Q z&O8UyC+8%mMd8Rn+PEJaXAXq}v1tuGf58NIa$=iYB?rKgS_C)s>|fPJ?y-+Jyu&3n z;^~=s{l=kH>1WOz;!;2J!#k}!D*nbxJoFGlv>`rm^=)B(ao>nvH^kE#_PRsQr2)=} zC1>vS+Zo9@G0#{_9O{y@2S2{Ka!-NFabh!uwCCV+zvR0GelT)TL;Zmp@3X!Es$Xh@ zILt@r&uGdu$bUwyo&(y3uYSIM$vF?d$nqFY#f- zG~+zmynp9%@6SQ&j_(&aYAnX1emQ@%saNt8B0kn}USiG^OXjiH-bT*ZePCPq*?fGh zY3lZ8$N121_!8UWE4I$(nXg~O)%=4S#te&|-x27|81rHdw)cT=5eh1<`mvQv@PL;I@UR*NZmss-NcwDPNV)J8M=HYXUwJ7;+ zRr$8OpYtv1R_%6odC!Pla>%sJT+~0D=e>FzhqC4y#2}ZtKab5ESMMy_6$fHn{BVpm z?=Bc8o)Oo`JJT|}%Ip6S-TDy*6tze=i`Tc=LF7ka?yyk?luk$euud9bkyvVoYaq90R zIou4}_!$R!(RPhI$hw)&1$6UlERMy!ski;~%*SiFoSw=&*V(?C;$5}g;$7EY73bo3 zapGKo!GB@@z+S;#!cM#$!_#j1ImXWpv=iqRX)m373$fn^Mgv$aU>3#6V)3DKZVgrx z@3{wV+wHpVVLR>zc>C0U*Wj-i_&p;C`_b3SpEiSZ+=+XgK@vw>&7&x7wmyINoy|^~M#IO0 zqW}TobgMZT#rMWGCrG-$b2J@NoOf;HUAV*H8R>B?L-VZhy9R zdu4rX;}d}E{)17{jnXt3ZI8N7`s1iOo{SK1sky2=deK1?gG2X7`e0@w<880kPh3fQ zK5>pJ`3IJpm0$XCFL|1->?Ffs5-;y0@pzOBQZI!&N;&tS27k4wgURDTzx!=;^eFi? z!pYsc``O*c_cqoyHoD!t_1<1>>7WzuPdfXeQ`5lMZ%767tGWCg*1 z16$2bx*H!NH=|l6f?(3$?y>^5ntPo=8u@c)J}9`1ehGYY^&HjB)lxIqZLZp7K*zcN E06`ulwEzGB literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dpr b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dpr new file mode 100644 index 0000000..bc37470 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dpr @@ -0,0 +1,14 @@ +program AdvMsgBoxExplorer; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dproj b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dproj new file mode 100644 index 0000000..79dd07c --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.dproj @@ -0,0 +1,41 @@ + + + {3be14241-b500-4048-b206-8a73172c37f9} + AdvMsgBoxExplorer.dpr + Debug + AnyCPU + DCC32 + AdvMsgBoxExplorer.exe + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + DEBUG + + + Delphi.Personality + VCLApplication + +FalseTrueFalseFalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0 + Microsoft Office XP Sample Automation Server Wrapper Components + Microsoft Office 2000 Sample Automation Server Wrapper Components + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + AdvMsgBoxExplorer.dpr + + + + + MainSource + + +
Form1
+
+
+
\ No newline at end of file diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.res b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/AdvMsgBoxExplorer.res new file mode 100644 index 0000000000000000000000000000000000000000..42a5081b0f34660600159e4ef01b88cf6d6e4558 GIT binary patch literal 4396 zcmbW5y^ice5QS^C0YtD8>OhncYij4bkxI`SUKc$3L2~0G z4YcQTpML1=@$u27Qd~1m`TfHO>$~2t3H`7cZ|8G;)&Iu_jKogOT=JO4$=9oRO{KR< z9Jb;r0;xCR}WxtJm8Xnv>Vt-cbiktZ1FiOkc<%53&Y;wHhS>xp3 zTJLU$Kl$`gG1!i*9w@DrX!}{(3e(c#p-ye$v@+KZ`w94sukAENCp7^IS`8)ZxqB>wRfSnxB4fhON9C+7S;u9;r(avLTvEx&7{Sa}x z%^Y)Z;GOzA_9*NFJf#Qe1N$O=E8Ez?m#|i-dHDJC*B`-Q4i0{1i~LAz0AD@!R2NL% z;p+IKY_J`qyAbl@@ynmbJHkQZS=fm7XYT7s^_rh8Ilu|bz{YRGmmPf%CVdcNa@=?x zq&w{!f&(#v;q_14xp7c`vgSFh)!^V`oe$>8p>qHmIYj*(Q{3Ui7_OcJVR| zjg@=t1BWxbV9Q_Bw8ftsx;1`sZt_d~Q-9N#GKq{u4LO zbKC(DzxM_>$Qo&Rv&%UHd*M)GOfI$$>zu3CI4nJX00S;teU43z*L#-n$^op)hdE^LEF>pt zgpJ=bUE-}ee)k%V`XRp~Q)j=sk4pl2XC6tstNIkbCG-X{k~i)|-r?xIr1|Z)oY%kQ zUS^x9iQwvMTuNhj-258El+ZItsh?Sg73oPshvqUybnA1B?q*} z_J%yT-Q04axT#J0Nx$#axgSkFUgh%i+kk&k9y$oJR6I0&l~X06BD`mLFLFRAq_`^A2=pY2!4PxhO1 XKHL8__%}oUXWZZWzZ(1ta%2AiiCQ9h literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dpr b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dpr new file mode 100644 index 0000000..e1ac7bc --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dpr @@ -0,0 +1,14 @@ +program TaskDialogExplorer; + +uses + Forms, + fmMain in 'fmMain.pas' {MainForm}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dproj b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dproj new file mode 100644 index 0000000..9ae7939 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.dproj @@ -0,0 +1,41 @@ + + + {15a8d16e-1063-4b59-8cb3-07496f176779} + TaskDialogExplorer.dpr + Debug + AnyCPU + DCC32 + TaskDialogExplorer.exe + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + DEBUG + + + Delphi.Personality + VCLApplication + +FalseTrueFalseFalseFalse1000FalseFalseFalseFalseFalse103312521.0.0.01.0.0.0 + Microsoft Office XP Sample Automation Server Wrapper Components + Microsoft Office 2000 Sample Automation Server Wrapper Components + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + TaskDialogExplorer.dpr + + + + + MainSource + + +
MainForm
+
+
+
\ No newline at end of file diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.res b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/TaskDialogExplorer.res new file mode 100644 index 0000000000000000000000000000000000000000..42a5081b0f34660600159e4ef01b88cf6d6e4558 GIT binary patch literal 4396 zcmbW5y^ice5QS^C0YtD8>OhncYij4bkxI`SUKc$3L2~0G z4YcQTpML1=@$u27Qd~1m`TfHO>$~2t3H`7cZ|8G;)&Iu_jKogOT=JO4$=9oRO{KR< z9Jb;r0;xCR}WxtJm8Xnv>Vt-cbiktZ1FiOkc<%53&Y;wHhS>xp3 zTJLU$Kl$`gG1!i*9w@DrX!}{(3e(c#p-ye$v@+KZ`w94sukAENCp7^IS`8)ZxqB>wRfSnxB4fhON9C+7S;u9;r(avLTvEx&7{Sa}x z%^Y)Z;GOzA_9*NFJf#Qe1N$O=E8Ez?m#|i-dHDJC*B`-Q4i0{1i~LAz0AD@!R2NL% z;p+IKY_J`qyAbl@@ynmbJHkQZS=fm7XYT7s^_rh8Ilu|bz{YRGmmPf%CVdcNa@=?x zq&w{!f&(#v;q_14xp7c`vgSFh)!^V`oe$>8p>qHmIYj*(Q{3Ui7_OcJVR| zjg@=t1BWxbV9Q_Bw8ftsx;1`sZt_d~Q-9N#GKq{u4LO zbKC(DzxM_>$Qo&Rv&%UHd*M)GOfI$$>zu3CI4nJX00S;teU43z*L#-n$^op)hdE^LEF>pt zgpJ=bUE-}ee)k%V`XRp~Q)j=sk4pl2XC6tstNIkbCG-X{k~i)|-r?xIr1|Z)oY%kQ zUS^x9iQwvMTuNhj-258El+ZItsh?Sg73oPshvqUybnA1B?q*} z_J%yT-Q04axT#J0Nx$#axgSkFUgh%i+kk&k9y$oJR6I0&l~X06BD`mLFLFRAq_`^A2=pY2!4PxhO1 XKHL8__%}oUXWZZWzZ(1ta%2AiiCQ9h literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.dfm b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.dfm new file mode 100644 index 0000000..685effd --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.dfm @@ -0,0 +1,100 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'TAdvInputTaskDialog demo' + ClientHeight = 225 + ClientWidth = 406 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 264 + Top = 22 + Width = 91 + Height = 13 + Caption = 'Preset input value:' + end + object Label2: TLabel + Left = 264 + Top = 103 + Width = 34 + Height = 13 + Caption = 'Result:' + end + object RadioGroup1: TRadioGroup + Left = 16 + Top = 16 + Width = 233 + Height = 161 + Caption = 'Select input control' + ItemIndex = 0 + Items.Strings = ( + 'Edit' + 'Combo editor' + 'Combo list' + 'Memo' + 'Date picker' + 'Custom control (spin editor)') + TabOrder = 0 + end + object Button1: TButton + Left = 264 + Top = 72 + Width = 121 + Height = 25 + Caption = 'Show inputdialog' + TabOrder = 1 + OnClick = Button1Click + end + object Edit1: TEdit + Left = 264 + Top = 45 + Width = 121 + Height = 21 + TabOrder = 2 + Text = 'preset' + end + object Edit2: TEdit + Left = 264 + Top = 122 + Width = 121 + Height = 21 + TabOrder = 3 + end + object SpinEdit1: TSpinEdit + Left = 16 + Top = 195 + Width = 121 + Height = 22 + MaxValue = 0 + MinValue = 0 + TabOrder = 4 + Value = 0 + Visible = False + end + object AdvInputTaskDialog1: TAdvInputTaskDialog + CommonButtons = [] + DefaultButton = 0 + Icon = tiInformation + InputType = itEdit + InputItems.Strings = ( + 'BMW' + 'Audi' + 'Mercedes' + 'Porsche' + 'VW' + 'Ferrari') + Title = 'Windows Vista Input dialog' + Content = 'Enter value here' + OnDialogInputSetText = AdvInputTaskDialog1DialogInputSetText + OnDialogInputGetText = AdvInputTaskDialog1DialogInputGetText + Left = 352 + Top = 152 + end +end diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.pas new file mode 100644 index 0000000..ee4bdd9 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/UAdvInputTaskDialogDemo.pas @@ -0,0 +1,69 @@ +unit UAdvInputTaskDialogDemo; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, TaskDialog, Spin; + +type + TForm1 = class(TForm) + AdvInputTaskDialog1: TAdvInputTaskDialog; + RadioGroup1: TRadioGroup; + Button1: TButton; + Edit1: TEdit; + Label1: TLabel; + Label2: TLabel; + Edit2: TEdit; + SpinEdit1: TSpinEdit; + procedure Button1Click(Sender: TObject); + procedure AdvInputTaskDialog1DialogInputGetText(Sender: TObject; + var Text: string); + procedure AdvInputTaskDialog1DialogInputSetText(Sender: TObject; + Text: string); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.AdvInputTaskDialog1DialogInputGetText(Sender: TObject; + var Text: string); +begin + Text := SpinEdit1.Text; +end; + +procedure TForm1.AdvInputTaskDialog1DialogInputSetText(Sender: TObject; + Text: string); +begin + SpinEdit1.Text := Text; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + case radiogroup1.ItemIndex of + 0: AdvInputTaskDialog1.InputType := itEdit; + 1: AdvInputTaskDialog1.InputType := itComboEdit; + 2: AdvInputTaskDialog1.InputType := itComboList; + 3: AdvInputTaskDialog1.InputType := itMemo; + 4: AdvInputTaskDialog1.InputType := itDate; + 5: + begin + AdvInputTaskDialog1.InputType := itCustom; + AdvInputTaskDialog1.InputControl := SpinEdit1; + + end; + end; + AdvInputTaskDialog1.InputText := Edit1.Text; + AdvInputTaskDialog1.Execute; + Edit2.Text := AdvInputTaskDialog1.InputText; +end; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.dfm b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.dfm new file mode 100644 index 0000000..3f3e4c6 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.dfm @@ -0,0 +1,130 @@ +object Form1: TForm1 + Left = 0 + Top = 0 + Caption = 'AdvMessageBox Test' + ClientHeight = 303 + ClientWidth = 380 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 14 + Top = 16 + Width = 47 + Height = 13 + Caption = 'Caption: ' + end + object Label2: TLabel + Left = 30 + Top = 48 + Width = 25 + Height = 13 + Caption = 'Icon:' + end + object Label3: TLabel + Left = 29 + Top = 76 + Width = 26 + Height = 13 + Caption = 'Text:' + end + object Label4: TLabel + Left = 14 + Top = 184 + Width = 41 + Height = 13 + Caption = 'Buttons:' + end + object Label5: TLabel + Left = 24 + Top = 232 + Width = 34 + Height = 13 + Caption = 'Result:' + end + object lbresults: TLabel + Left = 64 + Top = 232 + Width = 3 + Height = 13 + end + object BtnTMS: TButton + Left = 65 + Top = 264 + Width = 145 + Height = 25 + Caption = 'TMS TAdvMessageBox' + TabOrder = 0 + OnClick = BtnTMSClick + end + object BtnWindows: TButton + Left = 216 + Top = 264 + Width = 145 + Height = 25 + Caption = 'Windows Messagebox' + TabOrder = 1 + OnClick = BtnWindowsClick + end + object edCaption: TEdit + Left = 61 + Top = 13 + Width = 300 + Height = 21 + TabOrder = 2 + Text = 'Test of MessageBox' + end + object cbIcon: TComboBox + Left = 61 + Top = 45 + Width = 300 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 3 + Text = 'Select Icon' + Items.Strings = ( + 'Select Icon' + 'MB_ICONEXCLAMATION' + 'MB_ICONWARNING' + 'MB_ICONASTERISK' + 'MB_ICONINFORMATION' + 'MB_ICONQUESTION' + 'MB_ICONSTOP' + 'MB_ICONERROR' + 'MB_ICONHAND') + end + object MemoInfo: TMemo + Left = 61 + Top = 76 + Width = 300 + Height = 89 + Lines.Strings = ( + 'Sample short message.') + TabOrder = 4 + end + object cbButtons: TComboBox + Left = 64 + Top = 184 + Width = 297 + Height = 21 + ItemHeight = 13 + TabOrder = 5 + Text = 'Pick Buttons' + Items.Strings = ( + 'Pick the buttons to show' + 'ABORT, RETRY, IGNORE' + 'CANCEL, TRY AGAIN, CONTINUE' + 'OK' + 'OK, CANCEL' + 'RETRY, CANCEL' + 'YES, NO' + 'YES, NO, CANCEL') + end +end diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.pas new file mode 100644 index 0000000..9ab33f9 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/Unit1.pas @@ -0,0 +1,125 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls; + +type + TForm1 = class(TForm) + BtnTMS: TButton; + BtnWindows: TButton; + Label1: TLabel; + edCaption: TEdit; + Label2: TLabel; + cbIcon: TComboBox; + Label3: TLabel; + MemoInfo: TMemo; + Label4: TLabel; + cbButtons: TComboBox; + Label5: TLabel; + lbresults: TLabel; + procedure BtnWindowsClick(Sender: TObject); + procedure BtnTMSClick(Sender: TObject); + private + Fmbtitle: string; + FBoxInformation: string; + FBoxflags: integer; + { Private declarations } + procedure MakeDialog(id: string); + procedure Setmbtitle(const Value: string); + procedure SetBoxInformation(const Value: string); + procedure SetBoxflags(const Value: integer); + public + { Public declarations } + + property BoxTitle: string read Fmbtitle write Setmbtitle; + property BoxInformation: string read FBoxInformation write SetBoxInformation; + property Boxflags: integer read FBoxflags write SetBoxflags; + end; + +var + Form1: TForm1; + +implementation + +uses + TaskDialog; + +{$R *.dfm} + +const + MB_CANCELTRYCONTINUE = $00000006; + iconlist: array[1..8] of integer = + (MB_ICONEXCLAMATION, + MB_ICONWARNING, + MB_ICONINFORMATION, + MB_ICONASTERISK, + MB_ICONQUESTION, + MB_ICONSTOP, + MB_ICONERROR, + MB_ICONHAND); + btnlist: array[1..7] of integer = + ( MB_ABORTRETRYIGNORE, + MB_CANCELTRYCONTINUE, + MB_OK, + MB_OKCANCEL, + MB_RETRYCANCEL, + MB_YESNO, + MB_YESNOCANCEL); + + + +// Create dialog fields for the messagebox +procedure TForm1.MakeDialog(id: string); +var + i: Integer; +begin + // make box fields from ui + BoxTitle := edCaption.text + ' ('+id+')'; // title + BoxInformation := memoInfo.Lines[0]; // info + for i := 1 to memoInfo.Lines.count - 1 do + BoxInformation := BoxInformation + #10+MemoInfo.Lines[i]; + BoxFlags := 0; + if cbIcon.ItemIndex > 0 then + BoxFlags := BoxFlags or IconList[cbIcon.ItemIndex]; + if cbButtons.ItemIndex > 0 then + BoxFlags := boxFlags or btnlist[cbButtons.itemindex]; +end; + +procedure TForm1.BtnTMSClick(Sender: TObject); +var + res: integer; +begin + MakeDialog('TMS'); + res := AdvMessagebox(0,pchar(BoxInformation), pchar(BoxTitle), BoxFlags); + lbResults.caption := IntToStr(res); +end; + +procedure TForm1.BtnWindowsClick(Sender: TObject); +var + res: integer; +begin + MakeDialog('WINDOWS'); + res := Messagebox(0,pchar(BoxInformation),pchar(BoxTitle),BoxFlags); + lbResults.caption := InttoStr(res); +end; + + +procedure TForm1.SetBoxflags(const Value: integer); +begin + FBoxflags := Value; +end; + +procedure TForm1.SetBoxInformation(const Value: string); +begin + FBoxInformation := Value; +end; + +procedure TForm1.Setmbtitle(const Value: string); +begin + Fmbtitle := Value; +end; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.dfm b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.dfm new file mode 100644 index 0000000..a1d4604 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.dfm @@ -0,0 +1,310 @@ +object MainForm: TMainForm + Left = 0 + Top = 0 + Hint = 'Thiis the Windows title for the dialog b ox' + Caption = 'TMS TAdvTaskDialog Explorer' + ClientHeight = 426 + ClientWidth = 530 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + ShowHint = True + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 136 + Top = 278 + Width = 321 + Height = 13 + Caption = 'Separate button names with spaces (Use quotes to embed spaces)' + end + object Label3: TLabel + Left = 8 + Top = 4 + Width = 81 + Height = 13 + Caption = 'Include elements' + end + object Label2: TLabel + Left = 36 + Top = 238 + Width = 81 + Height = 13 + Caption = 'Common Buttons' + end + object Label4: TLabel + Left = 58 + Top = 164 + Width = 61 + Height = 13 + Caption = 'Expand label' + end + object Label5: TLabel + Left = 306 + Top = 163 + Width = 72 + Height = 13 + Caption = 'Collapse Label:' + end + object Label6: TLabel + Left = 19 + Top = 367 + Width = 74 + Height = 13 + Caption = 'Default button:' + end + object Button1: TButton + Left = 242 + Top = 393 + Width = 264 + Height = 25 + Caption = 'Test TAdvTaskDialog' + TabOrder = 0 + OnClick = Button1Click + end + object cbFooter: TCheckBox + Left = 18 + Top = 325 + Width = 97 + Height = 17 + Caption = 'Include Footer' + Checked = True + State = cbChecked + TabOrder = 1 + OnClick = cbFooterClick + end + object cbExpanded: TCheckBox + Left = 18 + Top = 126 + Width = 84 + Height = 17 + Caption = 'More Details' + Checked = True + State = cbChecked + TabOrder = 2 + OnClick = cbExpandedClick + end + object cbVerify: TCheckBox + Left = 19 + Top = 303 + Width = 81 + Height = 12 + Caption = 'Verify text' + Checked = True + State = cbChecked + TabOrder = 3 + OnClick = cbVerifyClick + end + object cbRadioButtons: TCheckBox + Left = 19 + Top = 187 + Width = 89 + Height = 17 + Caption = 'Radio buttons' + Checked = True + State = cbChecked + TabOrder = 4 + OnClick = cbRadioButtonsClick + end + object edCustomButtons: TEdit + Left = 128 + Top = 261 + Width = 378 + Height = 21 + TabOrder = 5 + Text = '"Custom 1" "Custom 2"' + end + object memoRadiobuttons: TMemo + Left = 128 + Top = 185 + Width = 377 + Height = 45 + Lines.Strings = ( + 'Radio Button 1' + 'Radio Button 2' + 'Radio Button 3') + TabOrder = 6 + end + object cbCustom: TCheckBox + Left = 19 + Top = 263 + Width = 89 + Height = 17 + Caption = 'Custom Buttons' + Checked = True + State = cbChecked + TabOrder = 7 + OnClick = cbCustomClick + end + object edVerifyText: TEdit + Left = 127 + Top = 299 + Width = 377 + Height = 21 + TabOrder = 8 + Text = 'Check box if you can read :)' + end + object cbCaption: TCheckBox + Left = 19 + Top = 23 + Width = 89 + Height = 17 + Caption = 'Caption' + Checked = True + State = cbChecked + TabOrder = 9 + OnClick = cbCaptionClick + end + object edCaption: TEdit + Left = 129 + Top = 21 + Width = 378 + Height = 21 + Hint = 'Text for the Windows dialog box caption.' + TabOrder = 10 + Text = 'Test of AdvTaskDialog' + end + object MemoFooter: TMemo + Left = 127 + Top = 323 + Width = 378 + Height = 35 + Lines.Strings = ( + 'Sample Footer message' + 'For example: If you do this you will loose all unsaved changes!') + TabOrder = 11 + end + object cbInstruction: TCheckBox + Left = 19 + Top = 46 + Width = 83 + Height = 17 + Caption = 'Instruction' + Checked = True + State = cbChecked + TabOrder = 12 + OnClick = cbInstructionClick + end + object MemoInstruction: TMemo + Left = 128 + Top = 48 + Width = 377 + Height = 33 + Lines.Strings = ( + 'This is the bold blue main instruction and' + 'can be mulitple lines.') + TabOrder = 13 + end + object cbContent: TCheckBox + Left = 19 + Top = 86 + Width = 64 + Height = 17 + Caption = 'Content' + Checked = True + State = cbChecked + TabOrder = 14 + OnClick = cbContentClick + end + object MemoContent: TMemo + Left = 128 + Top = 87 + Width = 377 + Height = 32 + Lines.Strings = ( + 'This is the normal "content" of the dialog.' + ' Notice it'#39's in relatively small print.') + TabOrder = 15 + end + object cbBtnOK: TCheckBox + Left = 129 + Top = 240 + Width = 50 + Height = 10 + Caption = 'cbOK' + Checked = True + State = cbChecked + TabOrder = 16 + end + object cbBtnNo: TCheckBox + Left = 246 + Top = 240 + Width = 50 + Height = 10 + Caption = 'cbNo' + TabOrder = 17 + end + object cbBtnCancel: TCheckBox + Left = 366 + Top = 240 + Width = 66 + Height = 10 + Caption = 'cbCancel' + TabOrder = 18 + end + object cbBtnClose: TCheckBox + Left = 442 + Top = 240 + Width = 62 + Height = 10 + Caption = 'cbClose' + TabOrder = 19 + end + object cbBtnRetry: TCheckBox + Left = 304 + Top = 240 + Width = 60 + Height = 10 + Caption = 'cbRetry' + TabOrder = 20 + end + object cbBtnYes: TCheckBox + Left = 182 + Top = 240 + Width = 55 + Height = 10 + Caption = 'cbYes' + TabOrder = 21 + end + object MemoExpand: TMemo + Left = 128 + Top = 125 + Width = 376 + Height = 33 + Lines.Strings = ( + 'This is for extended details that are initiall hidden' + 'unless user clicks the "view more" button.') + TabOrder = 22 + end + object edExpand: TEdit + Left = 127 + Top = 161 + Width = 121 + Height = 21 + TabOrder = 23 + Text = 'More Detail' + end + object edCollapse: TEdit + Left = 384 + Top = 161 + Width = 121 + Height = 21 + TabOrder = 24 + Text = 'Less Detail' + end + object spnDefButton: TSpinEdit + Left = 127 + Top = 364 + Width = 46 + Height = 22 + MaxValue = 0 + MinValue = 0 + TabOrder = 25 + Value = 0 + end +end diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.pas new file mode 100644 index 0000000..440d6e9 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Demo/fmMain.pas @@ -0,0 +1,293 @@ +unit fmMain; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, TaskDialog, StdCtrls, Spin; + +type + TMainForm = class(TForm) + Button1: TButton; + cbFooter: TCheckBox; + cbExpanded: TCheckBox; + cbVerify: TCheckBox; + cbRadioButtons: TCheckBox; + cbBtnOK: TCheckBox; + cbBtnYes: TCheckBox; + cbBtnNo: TCheckBox; + cbBtnCancel: TCheckBox; + cbBtnRetry: TCheckBox; + cbBtnClose: TCheckBox; + edCustomButtons: TEdit; + Label1: TLabel; + Label3: TLabel; + memoRadiobuttons: TMemo; + cbCustom: TCheckBox; + edVerifyText: TEdit; + cbCaption: TCheckBox; + edCaption: TEdit; + MemoFooter: TMemo; + cbInstruction: TCheckBox; + MemoInstruction: TMemo; + cbContent: TCheckBox; + MemoContent: TMemo; + Label2: TLabel; + MemoExpand: TMemo; + edExpand: TEdit; + edCollapse: TEdit; + Label4: TLabel; + Label5: TLabel; + Label6: TLabel; + spnDefButton: TSpinEdit; + procedure Button1Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure specialButtonClick(sender: tObject; buttonid: integer); + procedure cbCaptionClick(Sender: TObject); + procedure cbRadioButtonsClick(Sender: TObject); + procedure cbCustomClick(Sender: TObject); + procedure cbVerifyClick(Sender: TObject); + procedure cbFooterClick(Sender: TObject); + procedure cbInstructionClick(Sender: TObject); + procedure cbContentClick(Sender: TObject); + procedure cbExpandedClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +procedure tmsShowmessage(const Title,Instruction,content: string; icon: tTaskDialogIcon); +var + td: tAdvTaskDialog; +begin + td := tAdvTaskDialog.Create(application); + td.Title := title; + td.Instruction := Instruction; + td.Content := Content; + td.icon := icon; + td.Execute; + td.Free; +end {ShowmessageEx}; + +procedure TMainForm.Button1Click(Sender: TObject); +var + td : tAdvTaskDialog; + msg: string; + ButtonChecked: integer; // custom button number checked + lab: string; + txt: string; + i: Integer; + inQuote: boolean; + resname: string; +begin + // + td := tAdvTaskDialog.Create(self); + td.Clear; + td.DialogPosition := dpOwnerFormCenter; + + // Dialog box Caption or Title + if cbCaption.checked then + td.Title := edCaption.text; + + // Main Instruction field + if cbInstruction.checked then + begin + // Note this field will not transform \n to #13#10 + td.Instruction := memoInstruction.lines.text; + end; + + // Content -- relatively small black text + if cbContent.checked then + td.Content := MemoContent.lines.text; + + // Radio buttons optional + if cbradioButtons.checked then + begin + td.RadioButtons.Add('Button 1'); + td.RadioButtons.Add('Button 2'); +// for i := 0 to MemoRadioButtons.Lines.count - 1 do +// td.RadioButtons.Add(MemoRadioButtons.Lines[i]); + td.DefaultRadioButton := -1; + end; + // verification checkbox: probably most used for 'Do Not Show again' + if cbVerify.checked then + td.VerificationText := edVerifytext.Text; + + // Expansiion text + if cbExpanded.checked then + td.ExpandedText := memoExpand.lines.text; + // these don't show if expandedtext is blank + td.ExpandControlText := edCollapse.text; + td.CollapsControlText := edExpand.Text; + + // Programmer defined Custom Buttons + if cbCustom.Checked and (length(edCustombuttons.text) > 0) then + begin + td.CommonButtons := []; + txt := edCustomButtons.text; + if length(txt) > 0 then + begin + lab := ''; + inquote := false; + for i := 1 to length(txt) do + begin + if txt[i] = '"' then + inQuote := not Inquote; + if ((txt[i] = ' ') and (not inQuote)) or (i = length(txt)) then + begin // have end of a button + if (i = length(txt)) and (txt[i] <> ' ') then + lab := lab + txt[i]; + if length(lab) > 0 then + td.CustomButtons.add(lab); + lab := ''; + end else if txt[i] <> '"' then + lab := lab + txt[i]; + end; + end; + end; + // Common buttons To be shown + if cbBtnOK.checked then + td.CommonButtons := td.CommonButtons + [cbOK]; + if cbBtnYes.checked then + td.CommonButtons := td.CommonButtons + [cbYes]; + if cbBtnNo.checked then + td.CommonButtons := td.CommonButtons + [cbNo]; + if cbBtnCancel.checked then + td.CommonButtons := td.CommonButtons + [cbCancel]; + if cbBtnRetry.checked then + td.CommonButtons := td.CommonButtons + [cbRetry]; + if cbBtnClose.checked then + td.CommonButtons := td.CommonButtons + [cbClose]; + + if spnDefButton.Value <> 0 then + td.DefaultButton := spnDefButton.Value; + + // Footer message + if cbFooter.checked then + begin + msg := ''; + for i := 0 to MemoFooter.Lines.count - 1 do + msg := msg +memoFooter.lines[i]+ '\n'; + setlength(msg,length(msg)-2); + td.Footer := msg; + end; + + td.Icon := tiWarning; + td.FooterIcon := tfiError; + + ButtonChecked := td.Execute; + + msg := ''; + if cbRadioButtons.checked then + msg := 'Radio Button #'+IntToStr(td.RadioButtonResult-199)+' was selected.'+#13#10; + if buttonChecked < 100 then + begin // it's a standard button + case ButtonChecked of + id_OK: resname := 'cbOK'; + id_YES: resname := 'cbYES'; + id_NO: resname := 'cbNO'; + id_CANCEL: resname := 'cbCANCEL'; + id_RETRY: resname := 'cbRETRY'; + id_ABORT: resname := 'cbCLOSE'; + else + resname := 'UNKNOWN'; + end; + end else begin + resName := td.CustomButtons[ButtonChecked-100]; + end; + msg := msg +'<'+resname+'> Button (#'+IntToStr(ButtonChecked)+') was clicked.'; + if cbVerify.Checked then + begin + msg := msg + #13#10+'Verify box was '; + if not td.VerifyResult then + msg := msg +'NOT '; + msg := msg + 'checked.'; + end; + td.Free; + tmsShowmessage('TaskDialog Espoerer',msg,'',tiInformation); + +end; + +procedure TMainForm.Button3Click(Sender: TObject); +begin + tmsShowmessage('This is the Title','This is the Instruction','This is the content',tiWarning); +end; + +procedure TMainForm.cbCaptionClick(Sender: TObject); +begin + edCaption.Enabled := (sender as tCheckbox).checked; + if edCaption.Enabled and (edCaption.Text = '') then + edCaption.text := 'Test of AdvTaskDialog'; +end; + +procedure TMainForm.cbContentClick(Sender: TObject); +begin + MemoContent.Enabled := (sender as tCheckbox).checked; + if MemoContent.Enabled and (MemoContent.lines.count = 0) then + memoContent.lines.text := 'This is the normal "content" of the dialog.'#13#10+ + 'Notice it''s in relatively small print.'; +end; + +procedure TMainForm.cbCustomClick(Sender: TObject); +begin + edCustomButtons.Enabled := (sender as tCheckbox).checked; + if edCustomButtons.enabled and (edCustomButtons.Text = '') then + edCustomButtons.text := '"Custom 1" "Custom 2"'; +end; + +procedure TMainForm.cbExpandedClick(Sender: TObject); +begin + MemoExpand.enabled := (sender as tCheckbox).checked; +end; + +procedure TMainForm.cbFooterClick(Sender: TObject); +begin + MemoFooter.Enabled := (sender as tcheckbox).checked; + if MemoFooter.Enabled and (MemoFooter.Lines.count = 0) then + memoFooter.Lines.Text := 'Sample footer Message'#13#10+ + 'For Example: If you do this you will loose all unsaved changes.'; +end; + +procedure TMainForm.cbInstructionClick(Sender: TObject); +begin + MemoInstruction.Enabled := (sender as tCheckbox).Checked; + if MemoInstruction.Enabled and (memoInstruction.lines.count = 0) then + MemoInstruction.Lines.text := 'This is the bold blue main instruction and'#1310+ + 'can be mulitple lines.'; +end; + +procedure TMainForm.cbRadioButtonsClick(Sender: TObject); +begin + memoRadioButtons.Enabled := (sender as tCheckbox).checked; + if memoradioButtons.Enabled and (memoRadioButtons.lines.count = 0) then + begin + memoRadioButtons.Lines.Add('Test Radio Button #1'); + memoRadioButtons.Lines.Add('Test Radio button #2'); + MemoRadioButtons.Lines.Add('Test Radio Button #3'); + end; +end; + +procedure TMainForm.cbVerifyClick(Sender: TObject); +begin + edVerifyText.enabled := (sender as tCheckbox).Checked; + if edverifyText.Enabled and (edVerifyText.Text = '') then + edVerifyText.text := 'Check Box if you can read :)'; +end; + +procedure TMainForm.specialButtonClick(sender: tObject; buttonid: integer); +var + td: tAdvTaskDialog; +begin + td := sender as tAdvTaskDialog; + td.tag := buttonid; +end; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/AdvGroupBox.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/AdvGroupBox.dcu new file mode 100644 index 0000000000000000000000000000000000000000..77eaea990c30bfffb0c1e787053f6c56f22039f3 GIT binary patch literal 19941 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 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/AdvOfficeButtons.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/AdvOfficeButtons.dcu new file mode 100644 index 0000000000000000000000000000000000000000..71e9032abc3be4aec2bdc23aac2eb8e4444a17b7 GIT binary patch literal 109503 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 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/PictureContainer.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/PictureContainer.dcu new file mode 100644 index 0000000000000000000000000000000000000000..e5b19895b65fc15a56d3f2f61688d5ec2b0cc26c GIT binary patch literal 32143 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 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogDE.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogDE.dcu new file mode 100644 index 0000000000000000000000000000000000000000..9552f8b96e982ed99f7b43cc309e1f8dcb012e66 GIT binary patch literal 2250 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

50giQ!B z(7(!k5H`hV3*UrTcrKV{XuO9#jnK|r^HH5~#6H?sfvPNxZ2|S3N#8lhuM%b0xDPL+ z##PKz&2Ef8Jp*xp6^PX;(LP6cmeS??kP#J)1AYEkqHeiH&QHo5Ac{MvggOmkiM2yqOIa?(I5bSY4nw93 zh$){Y1~+SnxD>T<0a8&yrL<_6f|wLt;{mR+n&Q^PaOs97;B1q`H@6B~l%q=pgBDEZ zLqZ;`HdGs6rPurLIt`njoLB~xDGUn@3v~<~DuYrbwuOeqPWB9`k|L;*QTymEm#Y$v zGTYKuiKr4YR7o#GeDi6bOl2}bBh{tBGMC911>UCtQ_3Vt^+h#$x;n`+kPP=|ka&i5 zbuviR+^=EM)yaMec}RoA#pnuUm|}W0OvXYvL2-RCT&6-9px*VXxb&4G8bn>2_?{>;qG1JBh${UN`*)Cdck?llWBtU8~x--20nMCFkgAAg-E zg6Q8}+J(9j(fYq%!lnT0PyYYcDesBI=ANhOI~$K=1tJB&b?c>=+=eB|DH z?jA~1Ipka`k1U?-eOLOLJfzdO^N?hcUwNA$T)+gVQ}U<1lYr9OKv27$Jpm}dxaEJX zarU)bl1F66C2H^DL+(yD*d@%|DD;(rj%$*2F<8x!ETl>h4Ldlklz>|pyIv5=HI%zclLIkWhX8r`G7(eF@%^*b&c zgxo16sG766BIYJg&}xn{SF*jA(TpEZ^;ekp$1E9CEE&|B zKNz!TSa1G`7}J=-G^Ut87K2YH=4Tn~kPT{nmLbLbEQ8Mc5Rrd`}oU$mTOcE?GV|Ov5)e zmXJ-Bv6?KijFa%4YwRVPrN#-eEH{pkrOp^7i^G^@fTh_uNOmp8{bX5V943p~2+s-( MT4x*}ONWvB4{|c_00000 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.bpl b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.bpl new file mode 100644 index 0000000000000000000000000000000000000000..c0d26af6275634abd65bc2b35ef6e8cdb70ec792 GIT binary patch literal 389120 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≻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∾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

K|*(ou< zWMbNl;9;0Le$o9?{Btj#j8HKUzf=U#SIG|>jH`>OZ)~VXk$Pj#-JkkSh|^u3E{=GL zh%3mi8d8te)6v_9M_ydwNXxCmhZRR!DkITDDYtrj4m1m51zpV%n7O z-Tr88y6v!7rBz1LpJdQVQ+^~uiZCKHgT9`UW@gEpHi+uD>bkfbnKMI)jhr;8vvm~v zR|4rH`Zofrrlm~4S)1@&9mB;%WmF+#cea8iWriSwkF_|G>c*G%857*ylE2cfcVtP+ zj?=l&lp5pM;B+=?tF0&{?{+BGboJ7iT3>a#jHb_9K~m#O{S9Ylm=U2^^5>oHbZEEh z{cFn;P+Gd`OZvP3ePeCV zc|<$Sm&B#c@JKZk46<5AS-IA_S@@Li&0C>VSrFE=mdT6RM4cB|{c}lBpGz9(44KhF z8K-?vMfou_d9-`aF`a%~291nSXT+@dv`VjS6~F148Bs<&<8F}O#_;|{3)?+2E>;|> zra9LdCR9zUv_5*N$2Bbn{NP%xIlGfK`|tjBzt?AE5#>ucntoBAQT`pDQGb`u=zc?v zv0$`e%!6uJ%+#(4wv-vh5-5jKD1?0I4LkXMkt`U?Im>LSZn z0Yjh{R9#Nk%ZOuWmf^c3%UFC7>BIIxS;kaYFp#+NNoPQo(FgXOpJi-=B{1pSETcz1 z@_bGfWg(8U$@9rs#+>7^Z=+s6rX4;)PCleS+YXo2NW4GaE4yFoGZ zhi!WeWAC4-bC?1{pa<-G2U&ofun6+t;M=4JZF>j<+o2o^Vd|go_dDEoa1H&T7v#T1 zUZ4jUuy#A~yopRfe<+@lW9*+n`(tjwET4`%O`|O<2zL!_JO%#~$Tt`;WISaF(B9BK z4!;nG{?Iy>J^+5$cQtYbrLe7>vcXXBk0BmtrVsXs|hFP{2uZJtLGzE z&==ZnCw*823m^>Tuy-EUPzL>>JFK3IT*GpxhM~|C_TGjYEPyCXfAEQ7DH( z=m`hwsAFh`B~S|epeJ;P)p6Ptro#Rxd2Pxu=0Fs-ao+-d=m)DJ_=SGZ3rcG+p?wx| z0o9NQQy!QK0oZmuX}}QZ3oB<*SI`%F!IBVV2OqRmQy!>>?ziO_?cdEY_CYIbg=Sa@ zOJNZ-Kz@)gm~n_g7^d54u#k=N^JXIOMCb#V>l zgKblgLumaLCUFgg{?Hq`Lp$TfK4^ul&(KzqQV`^g71;ivaQq_d1`*odFC*sZuJ+gJb%5QjqOU!QI4y)oO^2+JW3{b2v> zY~(Q8SPWt49nCg+KwBi+=u?wzG|$R5mcmpBz`k&{5rtA%JTu#0OCu?Mz63#@`=&;)ZJ3R9sR{E!cQpa&SxHl6UW4O(CoEQ2PP15ua?<=}^W=mR~# zfVLpvVH>o-N+_I$AE>{M{7%j`rhp&%LT~Uv^qZ6e+9whBsBB{h^nrb4)ECTyDkz3t z&;xvM@G8=S<}0Z;Xn<<)!Pb$q3lu|tSX)XwS5Q|l1p19256~0ZONa-y!&+DlP0#>S zpdaMH>SEdf8Xyi+pd5xmLlJh+dmwQ_59kid3bKvX0pth57f=pZ(I3C(QV-DFk2GNw z>^p~hXaM63{C%BzgMN?)OZwmj%TCWW7D4{0loj@#Lc72a$cMEjQ3hB73r?gRPT(HG zTNraUBlnvaTVT#~D9i z?PG*rL0|hB&mG8zy^qpIp&0Ui%5!)*eHsd(?GgGH?0lHGpd6Mmj<(R3O7Eep;DbGP zXB#_VV-sx-+rLjaUv8^LNH*?_#C4Qwg$*ItcDd(1;sD~`a>V+ z1wFxled8GSzz6%sG7drmOoBpay&7EyHo_8^1Y1X=bHPej3gu#s!vB@T4gQf_LqF&Z zJ4Egym2TrO*$0z}8EsKUf4qAn#)09YWm?CLV}G0GcnP zKA;rxp?`jkvG)SX3jN^V`J{CoX~A}AKNok{2+Ls}R6!ZE^dlTJK_4(+<2m?)c@Tzv zkOysN;|5XipM`s0(m8`TU>Vdy81{di^kDnfi1$>|g6*de=gHK4FUq(Y`F$Gs`Xw^E zD%&XgIpg}{j0Y0jJ4BM~G zF;>9>=m$P%y@vXP0EDMdkI)m^zJ&}yH55Z{=njh~lTRpw=5JE}uyIn3(HC}-UU?P% zVJJAS`!a{V7{)*l8elQ3gpJS&|A1qD6Br2=0Mr z;XOERIrR!N;BI&p67bcZQdck&egqrgZ*cmfK4TPo8yQg{vi015a9 zoW8JV}ylDxCfqr_uw$}ew=bbIYi)l@Gz`{*WsV=)t^&OFcbn1 zhTGwOSOc%YN07VHXPgE@Apkc(6Fdg%p%p%Xqn@BG;X3#ZJOF=zZcqA*0Wcn_;a+$e zw!x=x&M%O6xCI`EP4FR{vdU)+hAD6xJOgjSnZNWI6QCZRfDP~uIQ1!?aVgZo0VsUh zXM7i)g`-x}hu{@B;#cGa?t!@$YL_3$%z8;*V!d4})8bC7@&p7R-H za2hrV*Tmy^XH}HEnzJ+w45uSmaa2U>h!Dq~ZHP8mft@jxIqm`&*w;1U0Y}UWR|bkeBE;upT~xOJ4RFSHn%P4A#J#upds|ip)SG zya7kQLO+0|@Mk#pRmuTd;JDX(#$;Fy`{2xN^fkBxcEZuG)Au0?%U~Cr_=e9I3oBq3 zobe{|2#a77{0jzcr%%IHI1E$YqR+t5JLr#)fDyk#24OvX2E%sJ$Ke<78BF-S&$tVA z!;oFbFYJYr|G?M+E$}zEpw(yG2_M3leZ##{Iu zbblM!gYUp<$bAPHhDLY``uv&vKojhMllM{wa0l#!um1&EhNs~(xa?iV5?Btez)9~h zcEDoT4&4(xZ{Rj~1m1zKyiXc%7yJg^gWey|&hRQ^eduFdkG6$1@J|@EkMQswobnN4 zB}8EbybY&(j2%Q_4J2UTUy)OI3(joA4OYWpDEphwSOV|DfKTYd@I2)Go$|sXZ~#j8 zBTw)FT=Eb41nht_4lu^SGjPJE#0{I_YX^}z*Z~)PMm<0qoO_5ez)>bbM>y_t{6H-{2%kaU!^k208opxW8pEIwo`?N#Nmi~g z4<3XyZ~#uq&NT+Z)i4`=0z2TioLpl(%!d1*1rl(aFV~m^jj#jG$;~z5@B-|IbC1Y1 zu7$hdAJG5ET%!sefVW_1Uas*Fyaj=ya*bxVxEtxhtI+%CTw?;PghMc}d#>>V*aXH` za*a`NAMAuPj>$Em@B|!!(qp-YrSLBF?vZQEgy-Ox3$MVD$LAWeU#b13UgJn#=F_*$-UE3AdTLH=pv5nADt(`gU58(xRg`_K;XJRE|V zU(Ypu4c*SjHLik3;V*E;nYqS%co9zOOIyHlH~<%)Mf<{U;i$87jVs`8Xo2qM6<_CwDRxyCrS1)hcOSI}4CHh2=wE6p|5!C|;?BytQd zz{ywArtluzauxlhj50(2QREN)0_||h=v<=^#=~NG0d~VFW2h^*2i}0ga6>t1!Vbu} zn)ILon&1y`^w?bEQkV%pf;KpH9I_AZLrH+~5dHy|jL$Xd;g`?`Cr!vTX24=t4{b1T zVy9w_&K!01(Ru0*be{mE#w0J1Q$%nHNFFz;H%fr zPhdHG00r0L5B9=^*AYK#fu2(tTObNQhE_Pef-w+k;eL1tzA=q!=uwGmz%9@WIaRsF z2v`6w!-sHmkamD;;0|bp-S9b_GM%_!A?$?yGmu62JAAVmxq!nkGsJicyWz~4v^zAz zfa|F<*ac^Yse5RJ^Jg)pLjyblTj3wjtA_psQy>W2vNmNc&03z-n)PtjJz1}2y_WTZ ztjDwdl(jYM&a5?ATeAL`^{?!1*+*xu$Xb@QKI<)Gb5={%Z?k@wwJ~c$)+^c1XT6a1 zQr42J`?6lldONEr|oSmE9YHT(h&3ZZOHDibIO4j$YerxP8c4hxA`)cFQ z#=Th^vW=XVjdzT_#vig5#@jp*AIN$mdu{f!+0EH+X1|sF&+G?t zUNQb?d|*76y*~T**{>VVXTOlWGkc=3)A*CIKBpynTlR0WuQ6WCem#4fah360&bsW) z*{@|k{D0Vc8#t?`{eOJzz0(7gkc4EA6k$J|efBMex`dDnLP+9<5O=ug8#mpq+fAtMa6AK~QtIW&Hi_A;R3(PuZEwh?=hFQt{k$IYVmf1%*hA`JN48t;w%zMms z<{f4$^EYN2^FH$r=I_i0%)3l0<_Km!a~*Rnvyi!&xt%#gekA`P|0V~?599!On3={@ zGSit$nF{6+CZFlY^k@1qQRXow!i1R+^Egw$3}6N^1DRWy3CtvBBGZF8ojHRU%bdyd zWJWPAIf&G5|mOmF6F=3J%^a~^XR(~CKWxu2QI z%wlSpYNm>r!PGFnXP#t+F~gam%n)WUa{*JxJjhICrZD$0*D$l0tC=~>Rm@!G3g&Vq z#$3i+$<#6Pm|e^b%mU^n=4;Y{-M~J}KFyY}%h`w7TDFdz!_H=BvCp&5v1`~rvPZKW z*@xI?*wt)3yNZ2^UCi!cC$MAL@$4P!6YS&clkC0h1MD((1^X!b2>T#=A3K9x%HGMA zvwvW(XBV+k*x$3&Y#DnEJBgjhUc#2LH?udfSF^XV73@@YGJ89FD;r~PVHdK~*=yPP z?8WSb>_zN2wvwI3UdLX=Udi6bUcp| zu$Qsx*-h+8?1^kwwhMba+nGIqeUa_Mp2PNH&t`kGXR$rmGua;O8EiMUJ9|2N3VSk} z$DYQX%D&9tOUpC4{*f1MnbvDQbSdCR#KdZ1lR%RtuWCeCK`xbi~dn|hl+lk%GzQDF;8`(qb z5A65sx9o2A0Q(91DZ7XLnEitNoZZiU$9}`^WBapSn@+(q0NZVFe-Rd8duOSq9-5qBv!n48KC=Z0}hxktFWxU0C! zxNErC+$?S(cQbc8x0t(?o5|I1cXBsy*K@VpP22+RM($ef4_u79gS(o$g1d#A%Pr!r z^aQR$+ zF2HG=pBum_+__vIt{>Nz6SzU#KrYJpxCke6VNT+BPUJ$I&YjPl$DP9kIhA9$wro4L z4f_f66Z0eUZ{|PD56nU4duBg#fccKu!+gtp!R%$eVLoH_F`qJDGhZ=ZGM_UaGjC#2 z8cVv7lSvUdi}WOUD>L#`nU$xY;TatFDM+)B2PcgUZ~>*Nixp1ejH$jjs< z@*;VhtR*jySIIiElB^(4k|)UX{42rz?{crf*IHk|KM!V%r{cuo&DT8Hs#6)c~Afh8+u| zODkuUr+#y6Au`I5Ojk@d55U!$ZeO*hqvym-#5pm=^jtxlfMxq;YzM5E94#y!I?~); zl*AeTR-E!ph?mpqIcwvFnb7{x@K?8WmYDnq|Haz;xik9K)RfM(iX%{hD>F_RixwBo zsGe0zj|HR?V4c97mSg`iTK#Y$Py`zp)iM@j1VI;;bo#d-0I++1Qtzx)x+bW*=eGuZB=k1tXFhQ}tr_O8W-bxThl30@w z()K2qCGgpEKmqBiIT6RRut%^L(VBn6#N-DD?DEo@_%@*AG?a`Hr~2f6RVx$4o(W1} zodrb+#Vtm%kcDtnwqh7lr>(EehO|yCGAo-Jg%V7>ym2fR0Re9(bck)X z7yb6a4y&3m3|HCDE_XCqa<&E+vh8WI&re1iTX`vU;nmUqMw|rw^*49i$Ir>LO03$8 zlWZ9$9``uIjk}w&

@diJH+fCfWxmf6h5K4`K;N{)=wNG6(;s?kVQlP6b9!n9Od z3#W99A>%Z892YccTD(l|J?5MUwDd?;2tEEJj>+Ci22;RR1iEq0m=QBZ!XAgLk&=C4 zws(BsXvyr#!7m+yZ$O=yos{6y7(31ZW}_uDmaSi`PQe{)wvI`QmEX^W=F(!J4X|Ty zaz)K_TQj)Dvd+cI8Y@BI*~*2Z>}qiTPA#1*K@s+rNQ?!PJmuIigF=mRrI3tUxspw9 zG`uMRq)dGhZ;zGiMJJKkW0ipkCF7aL^H`-fq!C*W^_`5(jdTM|)eL)srAEu|mz)!l zd`n7;hGT~4rCTXQb4WR6b2+HYDw`o$*ve+!%$Z)e)Oh**`e9FYDXyLafzaJi8Sv4w zl45NJ7lBPx-J_GZbz4?<94UL*Ig&<_O!H3L!dsXq-*_Yl@ ziTXPwG07olB_|1-N@AS6Yj6J?QSDQwl3oBhgeozF24EYubx^uVQ&jrNS}#MmwVF0t zgQs6eaN#&LH+GUk{%t^=A#WZ%NLL22UN3T`ttg?_HG&o93M2oBX77glW>~8hN4HWd=R@`@&jA>aY z`cK6+_KF#lo^XH?Rk7lz;t^=F{PJp?#gYDLdNsC8&omUHlw?C@WyNZoHH*GAEhLl& z_Z`{4urMu)^mzT|)}|LSJ=%~eoaK>PVE1T6I8?+7$|7haRWnM#k5lTJjy4|ED{5oP z^niC1j=`7={Ruogr3~@Ic2dL5lQVG4EVHY-xUp(BzdvxN^BI?z3QY@z#yK^ekL5h~uDwj2hJ7y$FR%LjV$aLwFI z1sgHUJymhxK=*>V5S6VIW9;=DS~?98TMy8&k^+( z!o*fyIvp1lBnp?rn!rGBoXz$fx3Rl?PM)zu>)Gs5U@#eHe^DeA6^`+gEGk53TO|7+ zaKuTTIhER1G+GUgu}Nu4BPh`h)w2adET(GP?5gqAS1VGSIJW@b)fWGxU~yKq*>2uYN%+Gh1OS2|34`Q!?LvVZ#;O8gboOu>=8 zO{~bSwKl#bDox*9>Ku>MgeoV^n(39deM>ZhvoC0dj#wGXZj05lJ~3N4y>M1|qF{;R zjOjrUrZK!)G*lBxfmT-}OW`0!T8&hEIq27sBx9{Dq~2?skklOION1tBi~DG8RA$W7 zxl)+7du58{T7^WuiBl2{qD#*^WzO@Q4mXL}>tU?EOvW!|NL6REbK@eynX`LTqzwP` zBE*@9OVeS_c23%k)YQss);lqwft;`cS}i6km{`zEU1oJ_ zN-BF8Ge~;zvrH_8?HZ@0JC6CJ7@Qm;-h%XsB%FemJpw%~E6KYuBQiOE9Cdb_juQa0 zN2N;*jzb2sM0cE=NaOt)!>A^GcC4G494-(w7^bwW~6tgv3M(GP3g|z zU6Q63I(x3x;gInr&e}S*xGC*x2w_>%(#29wnZzSz=zyG=7$%)2H$G0yjF&D4jaf0> z8X#9n^K9{E5r=gyxtX>}eQYetna6n2)b2C4K}d-?l)f1`WsmG}Vl?Cd=R{@(C1csz@r0O+@6e(deX`^c8b4)VW1SG#=(cyXr@ofl=s$n(j<(x}w<{ z!1>wC-Htqg2O6`%X<81uv)}2&2O-NiH`}EV(my9k=}`qt$3Rsg<7924V=2+3T41xJ zNf^JKLcbC07;D~er1O>BNQ}H}=L*~HwXV53&+j${{HzL`Xq!DD9TU!GO0hww=aop3 zY$d1V$V)T1B586v0gI<@HqT}Pv=XA_&1N#+U0Ny`v1yHk-5XVA%O`u&m|=};RP5t1>CEqJ zVOw~jl~cy0TNGzU+iid;=xrBPB*#HT%BqkfeWDmSM7)$lu07|7(-+C+y}(gKKT-{+A#Hszj8Kpx)$kpnTv&Ve*pX|rO9kC`hC6sa{y?pLvY z$%-Padd(||$D!fqHB`XfT1h$Cj1~W8FFuT0)+QVWDcgeSVsoUib8xDzIgb=OCf?*dCJv9Q&2k7&@&9< zfz>0q@=s0(f|jTDo{IhnjmH&?LqR zc#Yt*-v{2cxe|RHAJ8I8!nkYX9u9l0&Oz!CRSL zX+w$UFdE%JG^E^8j1L15H5#`_YYoG=!|j7sn`?F=u)cU}qtY340nyw=W#bk(#sxe~ zX)>crOp5k4o(u=cCS>FJ=6O$J$G|owelLudB>7cwKYH(l&aX;PoVP|ng1Y$q#-0j= zmLF6(w|c6zH_3a^22uuDG0B_`jk&N8E`xBaru-#Gms9D+*g64T4M$hZ{@(LNT5}4d zzWFp++E$k2XIezd-!gZJhGCaM)5<|_2u@m|1SP)Qf-MQwo?vfnVRS+Kz?(9z3un?>t<6sKUPN#o>dj3Pz$Z&q z;vRMo$$Hc#MGTAYPM9F{sF*dW2XFkVoau>bk%hr_jXWlLO)|>xIrz28MEBY>rEv}B z6K^O{Nb*GEgW2d!ZM?W!OAhiga-g?P(f0c_^DtZdzgsy>9u?TVCB|;xy|mcS9KkJ>s%BlN##03HLNz{CEc1jdg;t+Xea)-MN}Lx52}- zPBA6+Fc}n4CmA+x+bD70?&J~qtlBDLcUqlMPS4e|?Qu5}iXvT>f>2B!wvV1j36(Ub zjQFND6J@Tw!QN_^!p05MEyC+j>V%?cZ1$(94MT&=Ar{`sns45hZIsb-S6F*5&HHc7 zRp>fshG3c4iisXEM2jI%4!!n89HBM#XlbhJ#LP!5c&wYnR=wBD+Af-8;oe7ITtrT6 zH8s0EZRcwGj#Q78N!e&?qR+h@*E{y=^0N3`<+;U-JzIwOY?Q|`ecNUVWS?ec0U5(4 z*0Oz_l;fLL5F=enkg$2&gORytteV&w!KA17fe_w$WN2y4l!_U+zxuMKRme<77touU zuI|^Iw}w_&=Zny(-_UN1;UAP19~#!ua%Vbh+obWn^{f zB%HisB=S75B-mn|n99u2))s}E=j3>6dt)zOb!iRkoJ}i!+-7d1%5G54O`0}EyH4aS z*%_-^^aL%F%Dqx2bv&|nq>F!xXH+-Cpj4AzUB$# z1{UmsHvBo8hr+xD*jVJ8iPLvz<-LjaWNA!Ywv0fVj43PcBuTyDg8k?wCv3`p}~P^%uqvX_C!hvOqRt#@Z0Ox zBs}>OVd|NdRIJ$=CUpf zVb)CMiTYi$ESzZ^Mp0fyji6aEPl|fYNl$gCspXTba=S7k*K#9Wvf#8^ zU0G75q{%Y7CrvpJDZN)yBQ$XpGCg_570A@6{f9PleJc%7Y2_qK5-2J!ory!WXj`Pu zfobXJkz3xP=2w{`!)t8&c|$Z!O*%cKmL|UndM-Vas%bf4(v4qZZDi!m#B1cZfAE>0 zH){ShS16%V51ly$vo`EWHuJ9_oasV_sU@cKJx;GNFFp6xGSoP0EUtKuo@pLPEltbW z8&fe4pJ83zZXAYU>U25njHyWI^kDB_Q@End;8pH&!HDCVj8o*OtFeJ9{TQvZ)3#Ei zQ#Y)RPNn)v{={f;va8cLOezjbl9@rzG%;iMoO-EJ2Ba~Y|9{YXpt>a#JJ?zGUbC!%NX3vFIr3VfPtfB+TM<;xT+=U)gO8Y2lS^1R{EChQq!&;UjcGiwJH<_W*X=1@Z|#Xi*JV!8cenw;%|EMc8Y*NiQar$vvui4dV9n_80Dt- za+sRAc>o8_&akzF=|GU$2pQe|<41C5aQ2UXwz-hgpnkX_#LOZ~goN_u>JH^0xzoIs zB`0&ItZ9~wpTSfk2-H*ns}BvynOpy%{c9_we4Fa$FkD;4^xSBg=4YIxPSn%YxRD}W zA&XSKBuU-Pojr}Ul9jgq+*7J1mCm*T=czVsZmwBMmF5naCGKIG(6V4oom;X*bt?PD z1fN0i^@7BKtjQVD-3?BJL+v(`FKD(N7V9a9lquOCo0#q{xxbEWKQGOSu>Ph=zUtj5kP zSenQ`?3j$z6_?35&OcJ-uXu11*-AXeOiU%=r{T_25}zqkp)MZuN*$A(xPMA85_8hX z6v@FZ+#`9i54tDCz{u?&lQC%%yiXE1GBvOB7;yJCcE+I%ZF%KO=y^kEtkEYn{A83qnt&|#HZxDi zoJ)sZl3;zWIf)XLH^;fRoSZwJJf*>|C+HDa!Z-K}-Ub>knWRdMUeXw2 zHEv;P*}W#7vp>wuG@kSMH8#|E$^7snbT2uiNa|jaKnh44Wnc)#wp~4m51yw9L;icWZR_uV_l`Y?f2gE5vIl zV8t-*@1wPZhDDc{^ec&3ysFNbHzsYONcO!?%H#xo`R?+N5tOVF}1dDg7{3u1Yu{99Bq z&y-1a;XG5SX3OVU5cZ?CXR zQnR&63=6;v1erc+ZA_9*{%XxF{vn#<+zzd3ug_LTI`| zkfn4sR@?-gAQQskswq<{Z5z!zR;sxQfm<<}CdiwyTSh#O<7%paZl>#7gR6L_l$-Vj zV;=M@8kq>plnIlt`=%)m9b#f@(q5V-V5KfAUY7s8qr}~oRb{x0wn>t*RY^J<8;7FN z#E02p&Cw9dVx%4@=DF?zaq~<6sTGxFFtgJdc%Hb;e4RqPxmN5sZzFLs>$x*DBrb#pp!+nkNt^lDC*hoWw{c5|hWdpE=SLVs*^J&FH=slh6~@GcgWthK!y-kzfyX z)>-LIX%QQPI7}hhERVU}vH7B)nLbgaCNixtL*vJO;sy)*`35xD1Isa%cC;fE=LR)@^FA&<0wUj{UMA;01&<#Ng z34~76Sm17oM3B$d6Aao*Y34zWHV-p2B zCkopf-F%tMhO${QnJs-&rK(JR$?@}3-93`yUkhiBh7*4&75PmL760Ihb`TEVt-$?o zHRVwkw6?Fsbcd(qWes2COkWa$9P-W_Cut|m6eqVMd8U-~wgXGwNp&y9fy2%{OWAN3 z1J^{9xF^|mKNNN5%#<8r$$;tAwQ;*-mS~PWL0RG%g`q-t+&r8mu6=V-rf8J^(>udq zGp?RkRa#S)yghT)%vrcQo-Y{DcgTR^;sFyTWUgl%3obe~kBrH*P?oD0*Z^2Ht7cMp zVLol}S=rh)o@YGCu+r&9-m@w)j`du*aNr*6|*TAX4kHBt&Io(hsE!#tNWN@BvR7Pa)q1;s;$ zSfL(p4X7)hG|OBu#PsQo&6o*X3r6!Yzb4CM^PWu{%AFmvU3<<}f_O{eewj(-l_nLZ zoR?1*B|M?Py;POuX1!fjV!WUj5I^=KEq$hO=>;p!;G9x}o1k24M=w3iUO!4mi8HIR z46Hh9)j&+Chp?I(i50`s0L&%gX3wpOg02^2htq;! zoyG(~Yfg7@d%C6=K4*q`3#lvJq$k0(z}7`39`it_B}(PmV^$tClG{X(D1v4D&fa11NQcp1 zNfg;6>9k@sduXI#LO*C}U$jO17rJz=F58Z3TY>uL2uZVNn!Yx`&)3-s1u*%4}rryD6(p$V9c=m2@|R(){4{+ z;2PJ;I74>}TFSxc^gOL5AFlrYG;g=F-!r!bYy?KrNrJ7ltkZ_jVKmTe5o!RoMZq^5 z12@O&0E!|*i#9J+tiSuIphUTNOB@TW%w7oRq(y7#Oq-Np zvgF@y7WOaD?`Fez<4S3*XV2KnKKm>MGB)p+ltBxVy^^L6qit`pZE7Dr@lvR9&2od! zQapO#RMkww&RHX<)}6LSka@#Q)~3m?qTHKS3zB=bOz6&ctk+q0Kjn^$o7PI{ErIb% zta7IqScPloc^VU&eNjQbF~9Ps7N46pz!Wo?wy4g6W!!!{~fdJz0td*HLw z#>nz;HofP<-Qv64vt&5jx?Rx?Nk{pO>r$<6U@4x(lwF&wj+o!YpYu{mXj_K%&4 z&CJ)nK%Aw8pjO+P$S7vrVa!DdeC7&K_BoL1^i?x)TT$}Pv@At6ed?0jH~Z8*W~g!T zl4Z|@zHV_|oWhm-lywF%Oxvd4Oh4-HMBB!FGD<^3YvC$CCAJbYDMohb#+kcY4tCqQ zy@B208a8cO)s*ISkBb}ZY+NjNNz6mxlSwidf^!xUt~Ryh#;`nWTmvf0X9HOhPelsR zy45@vvv*D7aMj6G#e{r-{mP}4SW=u-X=v)zB2SsUc_BSLEZBU>-Sj|cGbeiJ-DHA< zH8fYD3ujc+ruB+o$$s>aq4X8;4Z$hyKs`JZ^Dwp-nL{VVsFL=%DT0SfVt2brTEzb5o!W_`rX6Q8T4Gy{dRQoO z9Nx4N4Rn5at08e>v==hCPKq4nM-q27-bL3dKEpy$6lj!YLMwias2pmbn5{PE~O_g@)`jvNnf6lOxz zVgt}UgXWDrcU;XMcB%Mm^wfeQE=w*=9c($+ZS}M%Wg^dOWzi_eI(6e99U=~$!4}<$ zOE(yJh&F0QW%h_U%2`uBC6_Q{M#(4~n4jIUv3v^32_1>hq3G#8|NH&6TA+C7$h_pJ z_-&Q#f2H{^v_L09mT-iy{E_^z{7L-j{Mo$72l#&cV7`bS$4}%hjC`H%R|`EU6jc~&@5I951GI9)hf5QTuyPZ%r|3FCx`!lgou zaG7w8aFcMmaIf%?@PzQJ@RIPl@Rsn7@V@Yo@VW4<@T0(rM~cUaCyA$vXN#g35c`RP z#UgQ>I8nS*tPw90uMuw&Zx`*DL~>*+hsr})CYfxcnB(Y{N3lYKLMvwc_kuJ_&QyUVxC z_o#1`?|I*=z74+3zHPo;zE6B#`40Gg_O(_zDqWQBN>AlHMNz`aKxLRRTDe4-tjthm zD_1JlE4M0lDa({cl~u~~%B#u-WwWwP*`<7ZNLpdYO8S zdXsv)dawGB`h@zd`jYy(`j+~R`o8*+`nme8`lHHfM{37v1GQn=XzdbhvNl7TtzD^I zuidKMr7hDQ)mCZGYp-e>w9VQ!ZI||m_LX)(`&nxp=osh{s0v&jxHfQeU|C>Q;Q7F- zfenGpfo*|ZflmTo1r7v$4zvz-40Z{25B3b67gU1b;K1Op;OO8b!O6iH!P&tpgVzUd z4c--87JM|gD)@Zx)!>HU=HRyAuHYxZuYw1HKL=au9rZ4HcfF^6p04O&eV{%}AFW@a zPu6GXv-K-AgpyYyxHqxvfSdHq#=gT7hcrti`}(ZA9U=s)YNLmfk1Lfu0>L+6E* zP&hO&G%PeabV+D(Xhvvu=*rObp<6?Dg_eaL4Xp}2A9^*kA+$NPEwn52N$9K4fzZ#P z*5QufF5&Lsp5gPtN;n)I7#1b5qlHU^$-)d_ws56zy>P2=m#|EDR9GcEFT5&j5H<_jgk8cX!dJop;b)<> z*iq~vb{Bh!=ZT6K76*#M#L?m<;$(4#I9t3@yk5Ljyh~grJ}RyfpBG;hH;9|XZQ?HR z6Y(qYfcUf6TIwiuk-AGgrSl|33QGf}VbW;n5^1tDLz*pJDP1q!D%~Y5lOB~;Va&cN zZICug+oWC6C(>8a0qJL{wcJteB6pX2%IC?79F_;l!{pKOCGuo>hCExoQodfk_5WvM zd6<8+{}TUXf2IFs|2}^&wU5fH6Vx*GLG=-JrAo9`T3fBX)<=^yRnxVomai3PL$ncE zu{Ks4ua#(J+Ei_x_6O}wZMC*eYtXi6+qE59qqbYyqwUr9Y5TQ<+98buS_Rq$+6OuX zItRK2x&`tAJp#P~eFA(y4yXY=5Dnx93Iam{BLc;Nv4Qb{l0aEtYM?Su9jFal6SygG zdtgQ2C5-HM10Mwb8TfaA37#128=Mwg68v*;U$B$jRqv+f={@vbdLNzFWnI;EJ*wyH z1^N(ugkG#y>euQw==J()y+PloZ_>BuTlMYw4!u#|t?$wI>ihKl`a%7WPC~6hZA0xt zokE>MT|?bMd7&PmUZFlAJ|u_KkRFPL@Nw*Ltlix3mqRmCF~1_!hOSI!V|(*gzLj^gx?JB3GWZLi5wl_ zBWgsCjEr0qnGl&3xjJ%pq#^Qggz$v)VhA~sKc64T&*ksu|IB~NcMv4uVsNhKgx$hE zVZYEyY%g{aJBwY#ZepI;L+mB?5qVJ-RZ$nCV!l`)4iQI)#o}0uk9imww~J4Te-z&q z_loVMZc;C)k0eW~q)SmLUn-D>NF%_r#!BO*5~)m@Dpg9=Qms@c&68r_Vhf~2(h8|T zS}!$9`y?W_mD|gmd5yeI-YRdGcgSJiaNktl<=|EGmB+w)8kCd$ZMCDdp4z$E0Id{sbrt6S`?Z&~ zZTfR)&5uHD!Y7B-@O7B!wuL_r4~SGnNR*H=Oix|-eEyHZ5ttXw@%8gn`!4g%_bv9# zROTp`D_1GkDmN%ME4L}D)E(;G+K*a6;Lm}bfqj9V!LNhW`sey2%)EaKeH}V7><`}- zzAwBYyf(Z&d?#h9V?pbvCN1J{cS#Vz7i zal3embQ)ULY`x9WJD5FoNZ&{YrDMbe-HjA z*c+p>Ot01F=`nr2zCd57FVYw5OZ24}t;_Wl`bv!1HTqh89Y*f@oMX3J$QRNuJ}(Ph z6M880MCkv}t0#n`;ezm#a8-Cg_^I%w@OR-8BEd-iNJ(TWI3MMC8zcKEk1HXh6-&rz z{1Ei=GW7G0d~ac_Fco`K>V%juUsxb46c(Z1mk3LRdSSV+LRcxR7S;%Bg>^!MuwK|G zY!bEzTZQey4xtfabdRvt7^eq?Ljn<7iETZP*YRSBSSC&tE5&NDR;}2$LcANT4!rdYA=H4 z^$c7OiL+bq^5Ff!kAoGu6zT}c?e_59$o+-zI?Vk$!XH91BQZjjBd=0koGTwynhWO{+l54-wvsNy|0yjp?{D6EA=Mr zJ#DAhb%@ZCF z{)CZnf_Mugv@gUi(s1yY$DtwpN9qh(tpuM~E$@`uqV_j}PX6LwroO4x2Coa=5nK)F z{Da_^!AX#~pN4GR3*2~Cs6O;rsAsqY{ktOkC-m>WaL>r^AlI&q{EPPKYUGJW5&H54 z{v`22@iu5|AB%mYG1A*ocezmhOg;nceKkhHjlNrafAHPuyT`{XW0V@@PUSh}Bc+4C z$bYli7c%>7$my#fo$o}wPL1@41R{~hsK~fTHF)>UkwutIo{YQ(`FTg=!^jVjLlM$I zNGTO%K47-4f0I_-+dJ`{0`+`7>z$FNBWO}mgn~`_iyz7 zwga!bF8px# zqR6$-xloBtj8T^*uq5=Ahsv+XkAoAxro64Zul!SaQN2*B!mM^f;Eq6j;E}-K;Kjj- z!T$On{Q`ZsK2jf}U!?yX8s8V;AHuC7?IKGfPe;~7NS;}j3381*N4{2GB;P5o_kE*q z{^R}E`s@8$An^}StJDS1#*fra(Rye>Z9cT^zi1}}&InwLmU|Mk_d(#zU}ya#=)FVq zI_SGE=&$IX>0j$7hfWLK9sVf%efUS{n4K`vmqng|2Kgi8SB6YQmG0pG#_#4oon;v|svA9`3scQq6a;P#mS4pqvH^#UGU?{m-bMY3BsG22V#%^$lJS z91;96I3Inr9g_Nakg*#etF;Zs&{xPH%8+$<6pD9?_o4S679WF*`?Tnn%Y7BT>Av6l zX8Gp&uJA=5?cC?z?0?t4LfxvK1R3*u?LO@l?KSNU?M>}%?QhyYFn@k%SQWUyQJ5hE zfqsGEfiZzuX!F|wcVjHRhB5dJtO?75D}pOA6RioZ4Xz8Gq-%Oe@2d~c3-zJ;@AOgn zg?g9Jl<>^(yztYI^gjrH6K)^r7CArC4>QHo$mNmSz-_*z{XK#qm5?j*Aa7KHerx$U zejXp==kp6-#cC&X5RMU!7fuvT5l$1%6naBHUIaO!t$2)h8f1f*xD*n=Hq4)#bh0E# z7f6$!!LFA6g>gOz+Gq{*(aWHbUIU%^t>pgSrtkzXk2Q9rAXgx?A0&?p61x`_+T$ zp@c@+N$U))vcEP+dszEG`xJU&Yqa~Rfpee_7C-~64J-^i6f2Kn3Z;*CM)tDXoU~cRL9avR$HLB*T1?muWgj%eQ zRmVfhEmLdNYtU#3FO}sv|iAYomz6GR;|@)b!LE=# z^3Ym?FnY!Z=LP2n7X%lgl@>!^UK*?q#wmDHa1UDTP_SD@&3U{&6}t00NaLAg@!k5r z^`G=k(2z6f$917wLVpM?53LVv3T+8(4Q&U7>2DcSqy(+*Ms*cn~>LT+ZvB><$g2+Pf-Nlh5nDJJE z|NJSk1$^Nk<-OGm>4QEed@H^!-=6QpcjmkD-S|Ad2e0$R(B-CLq%GnX^Go=pd_BJ$ zw6T(3&9C9t^6Mb|@8mz^|6f^;sWg9*bULiaq7;z&NrNHRkCP^XZ`MecN!Lg>NwPm2P2`!VWAilhP@%i5E)I?ogaYl|Czrxq}t8uPvD+Z7r$7WrQM=Eg8A|v+8@I| zg+GdXN9V6ajA5f_!_NVSzX^KLW6*>)Li=fH-DeRbheyR1#nYu}&~9#${wn_U`_n_}jzQM{Lpvyi1ouWN#)$jWc`Y%^EsBf$PRC{R`X>%b}F~MVC0UjBg zf)Vk5!A5Z4GxhQMU-Wk&_wF}rKb>>fd?to24b{NHb1$s5&xYO!y&w8E^dsoEe|RkP zi<@AXcpkRb*5HJ9M;?x>hAn41De(Ik#fH zL51CBuhbs)m*2^?;PE@;?=g>E;ETe_zeITf+WRj`AO9`>Kltwf&;Q8(32gTJ{8J#~ zRbf7xuP#=Xs`ct}bp>d~u|B zk+C}V7-X=&iSLPw)XuOnUM!VM>kRARM%WMc!h(2EIwVmWV&^7U5G$cU)nXQ#2V2H` zSTh!a))!k=wdL{(c_sA5HIUBN$qn*)d852Z-eTDr8|B^d9>eCgUp^=wg5|AMR@>WP zXx~)7z8AK&hp@8t1lHD`#p>EiSYLY`D{OCJjqM$1Q14@%?IWzTeU7!ZZ?W3;Bea3@ z6cP545wN#aD>q_Jx>I=)a_wK0ca?9UXLa>!{*b?~e*kopN&c(-H~Js;Kk0wkSWo*D zdP7^alPbWbb`h-bSHcSahWeTMjoMM`qDhd=$6`(F8dyb_K}LUFdkb>Y*IIkn)Xxhj zfug`TNUIM(Tl^yM9rO#?SmBxv&i`cakHNQt{|J5uds`RC@!eq`k3wIV1dAKBw>_pm z32pi<{T*1ssU5sy=p<0uC|J>!h5i)!5O&vd!z06U!uN+?3;!$J7P9PU@ZLp{`p63K z+||%C)<)K0u3HaF+9vSdt(f(8L>eQzA$jcuH{NgZ;|A~x(3TrN?#1`vd0ysKaONm% zxdo7kM;JVMJYT|>fm5eS$O|)a?goB6zY+X<3p9^|{2~5WtONUnh%jC#6D}8S5bhTq zG1hzkC43=p;!&`etK!9&P3hXvGvG2i#Unto#jt(vl{!E#y$sa$3be6}aywrK*lOp% zW_^|KTG(DGC2aET@a^^OhyCo3k0{iJ)?Vpk*wMN*$&$7RRPr=zuGHR2?PL3zVI3Rm zAMY=L20az_*=ks5>-_WlG5>u30@#Qa`4{___?Ke-U+!PwU+G`%U*livU*~Ut?QEle z6EwlC{_Xx9{zm_9*pv2xKkNqwJp_wdE48iK9#q*`?W%TzM%zQ}Wvmi~4as;asPr1h z!}aQm>TBvQ^%Gb#+GuBL7icrJ%VE)YM0?y=wf$1-5;z^QeQDrE%){>nE(zTOS+Fep zAl51GhOYWtbxb!b%NZq2?#5?X6q<2VV}x^czAzxQ`+Ecr1Wrbq%Df zqp=FO9e5a}wQ>%uq#?*t9buJx!v7|?E0w-`ICK_h#Q3oWj;pXrdOKE0@8uuDI_DEu z>3kL|2`^!_^L61gaO+3>CqffH4Q<#P(wCt5U`szgbQWX`pyi`DRj_(C`qYf3(GIBd}K zp|QURN#iT=Xsn#}l`fQKN`H`^hV|@osTC|ZI%LaQ=uVHxZ_1y_NBBJtEXDR)#4lxJw;j?I~J+MIJ`Gfwk{(q}$wcc0(EDW>@-y7}>z9iG~@GR+t zM^~&f`vh4WFP32q>S<^@KL*+ci?D8gL-66?TR{?K=~5ZF5q6*b;&IXv|1Iz*DAFDb zKLV@RQ{iX8^In9__cde94G~AMBoB|yT0gBqyC-l2EE-c_WqLq=NgqY?En&%8JR(>% zn~r+l2k(wI#YWiIJ4$ClQyd8i{Ay_l>b?Q`;(qBU$k-azxu!tVz7tgT2JDvK%N=}Y zLeCzB7P!v$6nq{2uI^MnRp($lT%}#B-Jsp9-KO24-3<%G1JHgSgKxt+%;nqR)v#Y< zu}0b*E2D1&&W5Zi!e1c(kA;5lSr`njg(CPZi~~*nO+N`deiGLG&&FCt19Tmh#4xvB z%HM!B_qVX>{tnjN-^a@PM_7CR9INl&V*S0f&>q%=GcXqpz^eOrtZH0|adoHg46HI6 zvC{rIRx22>jd+IG8$K^lwE9F??dHO+b|2Opp2b@FR(QDV0atG$9S^I64BeyvE9j3Y ze^FZbNBVE@AHaNZBxZ`f>Ty~GI_}G$#O>M-S}}YysLs09ki9lSZ`~5u8rUA#5om-Y zwg>&XFQXpo97%TVzxlG-cKCLD4!Nw8v2NTe!>Vyo7OT{&u|`$bLaS75GpsO&L;bL( zT#J?Dg|JGl46O;Rg@v~Pn)Akty7QqB3AYNj4Y!B1*E!rZ+%23J?h)=4?i1$2GFD4< ztbOET{cA{gM7S7Q%6Qnx%feH`mEmgGJnLYkiiPLHQnC>C&&A;-;iXugUJkp-%JAy& z8mxn^gHFB`cE!&PKaw7iK9RwZBIw`q47u^8$m`(qu&;pl=(st8Z^w7QtbIN|h#!uX z>k57rtnQ|cy$T*7FB$$I`@xlo&{^mPzC2#I3fkjCm<87xt7rcbK81zQFGdWWe64sh z*1J|4vgG&TPoTW6Sh>!Vf>M8p%9It-RnpDUgV2A!#@c}fPmF6Z3;jj@QtpV=l<`xZfTDp#qKxcSR%J-#(H>5NwcltAI4``GoEKiurEM6-tKFJ zj6x-pla$l3rbk!wN+6@o#~ScskUajTyr+Dp{6{$!YXIZm5psq9I>-tu4Y_o)|3laW zsE5~C>iOzWb(C7C#-KC)2`gV;8tc8H7SO`lD8o`PSGxilUA^`aB-EY8dekr4QCN8z z7?=i2>NA0N;FEQ7Fch2=yfOF`q|%>)Jq*8%0(~sBp8v);Q$2ffEQH;Pj==XqhoDcj zH^x^>kFNFMjaZf5f>E{|D}#;U-5D)lU13MggB`3FMj;PA*$-o}I)g2&KC&Eq;e*IO zA$x<)>shkckiEOY{-t4Ua{zx4KgICaT5edq)gyRIC5Hd8pxx&?0>wd+s z=TJ$xCnT@}!=q#hR-zY+Pl?YNUXKSwBAp?fBMp+KOS7aqr27n;6y=Z~N*^1(BB#S& zDqpUEjPNWpvhU>+vCdfn`Cz57@|>p(!s^Lzr2^|Gv*4Am4J#hIAO-I?)`q>U4F7jz zUtX0h%Ww%sz9ity`H? zpzW{VccDj0BiBV9gPyoILRPb+D`@gqXnh5SuGf4`Z!5o@-+>u?H)wb-sCd7j`4OR& z&=xXJC-9oC;5KZ-_&AAj7z0@X*oQo zOkT1!VGY@2@RaTF68bf{%4+#7colyte=WE19gX$h-dGJ94v&KSAfZ3(d(8KW?+xFZ zzMa00eZTnHU^VVk!{=j)GSjkPtbo3>5#B&w!6Udcd^9vzFsLua^@cCT<5(?v20G+c z|5uOze}qp^H~0Wwgc0(HF*e%6DmYsElP19u_q$*XsBOHy9kU!0IRW!nVPqm!#TG}N z!n*lCBj01q9I`B?tfQd+`T3!cA+CYtbPfMDB-vm1u7Utx?n%Nt$gQh{|HIt$Z)hs# zh<(u`)5UAWdmyKdSKq^Eyb;#w4&XYI1NQ|UhospBzP<;7?e%H;E&4z73qxl>qUjR3 zCUOJvehhYu7h${j8?0bt3v2jg{LXhV{4BbITlQ4WHmo{|5`h17KX_0Nh7WZSyr{>) z!a5P2)R)4Sx(43Vm%*R<8hBK%QTF@iVf|~DcA0JMerMprz{i2l0$*Ys@q2hN{sfEk z5y5uB4zNof50A!Ef~N(~4E7G58x-J;JWjt%e?%8TL*X5~6<)w6K#r?|4Q3Oa&l_1% zfXDfKN8v-Ey;u(4)hFR=)=HLOwVI_A_-Fbzsvn{iG;NCZ0BoI~2RG>7=p$gGelFYt zzP~rpmWE!-8vY4K@ImCALAZa)4q^ffo8`0Zt&In z-i9PGSeXlJ!OQBc@Odf2TyZV@wN}BFzEd9wkLCy9yWADhXE|no_t45C(8Eihdzn^-!CcqRq6wXCRAi!rJtwm@OU?js-_5@oiTJ!lU&~?b*PC!9NAxfF1WE_?8|BcF>R0&xTiN z82+T+P+LGAXSDt6!ZFYX%b*XQEsyn$R22BYbc7~Lt#A(o^07XA3Ov8R4;>di5wf^~ z-W!Y+t|{=>o)2%JC1JvIWIfOo@*UuN@+IsMQFzw3R`axz12v)hLodSzoP*3>W=QH@ z0NM-row^cntQ+7opwKmEB_a_mt_ANu7W(L% z(9Q4$`)la)(6QKiFap$g7slD=@Lui@kE3_6w$715Xrhy$_sJF~rxsi1dTN7Vk&W|d z%A@VPIh8Nlc{1h4>n-2P9hmR;+I%Y8!~eOP<@+qdj++npv>5)*^WYz`SX=@hiF${} zcnH!e)gk*xyy5?x4;x0Y<@a1`^LLJOZpyLa`raW(vsBj$$pf&~hDu{o1RcYy zv0tg%VeN}JUN{-@NgqhxVPOztl5tpLDT9~73}GfLHCHro&ytQkOGB|9a|tZlmx@*J zB6Z)hgu=%-!=^~r#ibG@ zk$B&TXGc6?l8tr3v#lvEka)Ut5!Urc63at4kEe>~U_3|QIT6pPc+SH!hUX$Ym*Dv* zo)AZ4>+sx&=T5qOs1IT_D7JTJp@5uP{U zxdP9J@NB?yEuP!)+<@mkJa^#P_6YnR&pbR^bwK^`?2P9KJbU6f6;Bn<7@h@qF2Qpg zo~!Y!#B(E_^YCoM^Hw|$;#rSpr`CvrXD>Wo$1{p2nmW<$)NhWuTZ~N!$F?D|74fSP zz8B90c(&>YoGI~W+S3ufHYGfccZ*ASyH@bcZ;gcb#rvPer{M=Pgtu+u9=~gb@Ln0h z)ePYU8N$bA2%nlEye>odf(+qHGK8oSBd$Pm6HL--1pa7qtrUBYS0Y|Ie8Jwx~&mvD;z zV21FvU}Ey-BMiCO>z4Lp{_d_Y~yWe+y-}Hg=ea#N%`_i4x_xZb=@0I^_z88ZzO||BC+J@^s zalZHX@(9xFhy! zm0{<5KA62deYbwj_x=4_llVMGvsgN$HOaH`qK|cW*KPS99NL;JuzimWYfU=a-WTJ& z*47?Jk$lpR6q2E25b00)l41CF0CuLd&k&wZ>?!h%xC7u_KfsZ~9-dFy*>DZO{|gcS zNSCmDN9aJrD|LX#rR8p`Gx)ufIl<{|Ln~9LzFEY z5Q}u6fANB?SVkgZywU&@hxH!+9*-YSZ$?V}_qS8eIXid0dj*O&=L-54FLT~S5Poxv zR~lfv#^2-L?S;exwyaz!gS?=2+wOUGvol%lXf5uAW2I!{@6vi+f$l>+Xa~M~%XXt9-(7$Xw!bI7 zoAGyM|NVyQ8Rw5FPy0AU|6+J17^qpbl=$xT{SDPK&L2~r_HlXzDiMEA@Y9s|zxjHa z1x$=j0>Y%@laO1iCt2Wlx4u(4r~RD$_Z#X@v!HZ*(wX$#Ik#BPIk%Ya*7%$gf49C{ z@v~QR=Wni_bfPtWThO8OM?2Jd8vjYYTi>ntM&ykD{PyZeJCy!thni3GKkuSHX$YRi zhs1X)z7aX&Kfi%`b}$PUpEeV-sTlyN$C85*3X4lX#`?uS{08cIg;|#Pv}uVwadiY^ zld?_vi^p&YFe7C7_cu__^wP!5pqMGh#!P`056An?oz{2!Cmls<$ZxWqH<+co!4za~ zm}5NgaJ=u_X?@3kQfrm|{u`)g%$!JKZOzhI)9iNZHLjJ=acaoBZB4m%JGmuh3|w?` zTROzIleRmpp`KpN-vVE;hM(12@xd1#jFflMA04MOCc@t}pI4Y88Qo0Z={&rXKHYz` zKf7AMzeumu?p{EPn@_MwIy4P@V2j}np>1(X2rA+H|L0B8hK z0>}g4KhY9E3{Vef05lSMz8ERV14IFMDTx8<0S$mgE8jdkqks}X3{Vef05lSU|C0JV zKon2{hym&W4S+@zk^u4mQ9ubG2B-%#02&FwU(%QdhyqFgF+e?_0nkXI1jQtI0Q#o{ z5ChZ$8UT%E)$;Q2i~>pkF+e?_0nlhxJDP`Q6i@<)0qOw_fJU=PO7ifG0!jceKs}%V z&}cSSEDz5ppac*D)B_p-jb>BU=iwOzlmKFYdO!o9(QM|1JUpX-5JZC;`L(^?(LIBZ;B@F_H(MH7^0sKlOkHKqDL~2p|s-1(X0{fO($-^@WC;`L(^?(LIquJfaBo>PTN&qoHJ)i;5Xp%yG9-dJ^2_Ocj z2Q&a0O)_c7!!rsf0mK0HfCfOLK|-;{JUpX-55zsN36R;xm7Svl<1$Sg?VR&4PfJeq`|A!DP~;N#r@e zFBGOtBmI7vNfs_#NPYn8GEPufP79{P4pMw5|UK|7(N)(ZK%? zX`n+3{n~S`zxJ)%Cp4~Ar;h2rquaTMcg!B%7MNJp{L30x&G>Bz!s$2T5B*?;8)5W4 z{_}v}$if-lz)z7Ue$Bz($>j$;N3?F^{NcTIYp&IisXwMo8>UUh@b;}-f9+eS+dDY* zQ&XRzyd{m#EQA`k6zk$o;Y{OK2qG|c>O?v%?n-(;*Odqx zx{}kDo<;_5JB<{5dK&4yv^VMfRBs{xinalE^(Ny!?M-l`2buP%Mv9&rOs4HBB9mSj z2be@I-!+NM+yLJ7=}a_J1U zuf0w<;hdgl^q>JWY46ipx9)sS4&tG*3G8k;F@k5d4LbXg=^S{tNxFf&9bQ9ubG2B-%#02*Q2A%HwU6i@<) z0qOw_fJTDs0eOHZpaekw)B_p-jj-(yKpr3pC;`L(^?(LIBWybakOznYN&qoHJ)i;5 z2-^+;095095KiZXh&2v~{} z+N(u~N{dFrAc%|1a;l-!?-QFat-QB|Q80+inK60eH3E|=4>FVn3K7wTc>p|y} z-Xn)o#%K>9$I$ttC&QppJluWgeA0X52zL+P@s|0dr^iT-@g3)rzKC0btoNg_$tCX-YJp1ZZFL}JV&nF?_S zJ87|xR<^PG+4~R2ez%S6zDIO*3{W#Ndh}=xhl3-HU}K_`VU8le8953ZQ>urn+n7-! zz!}YAVJDv$Gjha8nuo&~HPXYeckclnltG1#=8W=m=+)~<&ru^sjUMau%;3S#4eO8R z?k7Dsqc~n2?4r@zGG2<*VBXWobH0>ZWr!ovj$#pB=#HAu8=$IWIwJc3LS^T zPL45wsmk1ePeBWF^}z6=m82$!7^$@$Bwl=ms?bryRr#?2l`#Lx}^zCiahepA3 z?A^-|47Wx1F6mY$N6M>E&c^TKlrI>+9I74|ukYj?C%} z!?&|{uyG=Gy`AkLgYt25=x4xL)bbwQXX-3q(`T|_71kh z#@W%)iD5DckYEEGHfPEN*2xi@E$QjtY-Tzm3zXt+Wo4!!oJwkBsYIHUMr4vSQX)-5JdLR3X+$DUCz7mmq@{xglBa`Dd70p4 z0-s3~GQ4YnH7lt^OiE-~L?O>2T16I-NhL%MlF4uemB=NerbI&23L2II2P%;wE(IP` zBL!auo(w!tjSM^*my;TW9C10~AT^DbU`?z9yb|z0>JnlEso~Gisuc)>ux_Si-v6k< z8d(kEl+>8Fn%@WM_G5J0`@i1a$Iwj>;A%(gTmuA5jL_p)(%W(1pr`uvwH-^N;4R|x zeDc}B%r>YmXA#5W^m=B;+kr!QV|zS30?SI+M$nYLV`GSb3>Z$=Y&<>3jG+m` zZ3QI2ZkYEhK7ST$&-Cc%X=BDX1Q6H$UV(fY8~)1^UZy8+?_vFk-Ox!d#$qDNp9_`^ zf4uh?J7Vh>Hjf{VC_~Y+W=*ptcD^%SjgF-Zu=(My%$jURT-~R<%4eDJ{CT|aSH`)L z0GE(RKA#U{d~Eb<^LVeg1`vVm3o~AgjpfG+mKeS?} zcJ8W;ruJC^TP#TpVeGFoEgUvh1e*%G$xt%vC#6)_&{QI)c9EfU*hfmRd2+1LOR3Eh z!~Ri%-J=BCr=YeDq=voI!rmDv)lmCqZSRb*d1hN@gsoG<&QTj@gpFfto5`*jwXAJZ z!>(D`H~4I|luY)Go$JHKb=$da|3tTc_BY4Cc)IyK(W{3|k6ussFfl@p&bIb$qdZ5s z+1onPD0rUsy}9Ft59~j1xaX+e_MQyS-pSYfNxJp#Kit#Np7Nag_zfC}jbRV;?Cm_B z_}Gran*rjJ6hvUUCDa&KfbDp-Ohp)fC*MtBt@Y`xFRgSs}rHTyao9H^gz zWtx2*4vb@i`aA4@*Vnhr(4&>FgKdj$U&mkJ>rlYg z@mKjfv{)lj4~ep~rFUzK(G;3ZB5q z*CAkdoqQdXH?EVfW86{_4_^meBMVy`X7Y8!lSy{Ne0+U;X2;kp4#Nuw@O4arufsbi zXyTk0xGQ32<6oD27+*)=OOtt&MVS-+;X{2L{x3(xh`?ZI@$A_%;Op?4wTOwb2@$hH zsIOxh<%wb#v?wyd%N2iq7dl_GT$HeQ@!|xLC}BZ_>m(9y8!&58LIU;a#KbJ-FL=>5 zo-7^j92zc2NDvBzNLchw=kc@+IIf}L(Sn!+fagzl;V^9w&v6c(8a{9S{JGQo?Ky0_ zp#9+M@DKKbufyDaXvI$L{AcFTe@9=3QT^Ng4(iA4_H}gIxxb5@`+r#v>d5#lUx&M= zyS1;w!{qC5H$T(E*TLzMuY*fH9UOm-EA@4_n|vMcbBysP{#;kMM$EpBVZ*?pu8l#@ z40LCF9bCNAMp-QLId|&o;Bqa#j?wMD4(jQc;7^?(6F43otgi#S0Q{LFP7_9(eH{}5 z;OFpyXJmrk=#IV)#;x&x+1D`?+EOyV*Fk#X|Jxi`0+aoYbCe6Qi*h4&0yp9!7)IPc zb|S<@!-z}LaN?58C2q+Grwt=drgCvc95jrc({WDpCPUu!Cc_YZHr<=JV2$zFO)nxI zj_;&-6K?86!o~WcH`W~kQ~yc0X(41H)*UCp@9n#J774*Q1lW-DC=!CT#xSfqh9R7Z z^~ucCa3Y3oV(2DDI1Aw{gtMSy7UB||CD2oXbx$cJ5f^c9oI%h_B7&bC`bcp;gEdeY z4MPtJ^2$-J6lK}r#lIng&Z05!MZ2DO`H!fHom~w`O&p(86BoP`=shNfa6?MSD8C0} zqW2jxE8-dnoT?^M!`009!K1J)8isXI5xx%|1z-NcHEC!YISI~?67IVS!V}yl;Q}p* z5~xYkiu*($ssSNyq8e)eBCNfNNMd3l5n=sQ0+ND~lksj~YAQ)i2Vt$0`lC`aS)Wu| zS{8g$lw`;!C!*9El&vNr$P*>2$%>RF%8Gu-wnswZWPuj z1X!aGU>!GAoJK@gzxB>ikho)Vl7{u$caLV1be!pT;?u==zcEWf(z2u^JyQl!ko4~_ zkYu@nxMiuyFi^M*`j#i3`lH5+=zEDjbtLF5+l9~iL(M{P#9=p4Z@%>P&ge0Tm5%{b3N<&X8=JOoFRj(Y{~Ay))Ld6K>RRNdwx6!l z#MO6_ppUP=e*0lV!-G>NPwd)OSieMX4T!I;T#Wz23R0Xno|C;Zv;IcBReE7zU2MR_ ziQ``g&d&Zx@?-iIjj*r-Kp(HY{DQytIB(y;pMH`Y$=WyXie^rS5|&j~Oz`*i_8jLm z_Q;VVKOXpAJg+`?S-SvDycP?f-uSNDIFBC>1CX_!msdNty_qs<@BRaSa!D6e&FSCH ztIN+Y3DC!BW4z7j2M!-OjQnEW#o9QN2DOFt6TJQWm^E4V1BVVDK0wnm>oaOu0r`~` zlf3`o=gH-8x$ZywaNxiX-|rLem{)rvpH0uuTv++?%d=*@_~MLNv)+2^?bOt_o_gxZ zrz>lPY`Rb@i(W8$=9HISnlf#=^Aot)4sh<wFI+JDpEIXT#!Ef}@HR|uTic}_ z(i5W-lUBb5MA&n#0|q$Q^|rOK>6rdT;+pjv)~{K#;N|zo%6d(kMs}?k>B(Pw{9gD_!O!)T`T4o+ z9jvX*Eo`g5P*$*E-KGymj@VpZDa`FOf;AbH`itMJfBn;uf}8aj865@}+ek)zeXh24 zMP$V0x^SH4}WFoa0LSe3HRG3ofvmE1GWTpf3m$&fVyKRT} zKN$`opMLsDS9Xf~#k@fqolf`Y(IW)RJbDJkgu8U{Lg}qrwUxJXGSZ}5H#Ijk*3~_D zaR0ulw$=)FAz$|Jf$Dh1M_(=q`)cv5E609>VEp#X-Me?Ka91uD)K)0|8$EsVq8VTE zXYNW|+@gB~L}g`#6|O?5*q5?A{k3V8MVI%ijR&;&R5s)(%FC>91?Th1FQ3ojLXK98CrUK4w-rsnZD3N5_UP+zxIIPdeQ(85#4prxh#P;SS)@Y4Cyd$#U> zcg>yKWoUB?4#GQas07=D;G1wb{o&61et%cS%STJbbY&+1HQzbQ?%I17TGVAN>QV&S znFs)5!qrNbKD@G7ef#36&B$_+$Ko5SuS&mI^VO>_WJCvF z`AOW`RHb`xO>;Zj3U@Cr_5Q8AFXwrEwP1Y4Ym>w)BU&{Nw5m%@xAs}#)He@(zm~T- z(zB`{`@6&lKueDAg}jEMOe-n(Qe7w|vayF6ZYz8l$KE(O_smpq+^TFeaStYFcZRq`tah z-@ljcUoUFWHXGC>hWaAIgUg+8A2-#hb|)=){rR5Q&usg=t+lC5TccOyTj5$2S@)G? zEC|Q9COxlj(Y0yr=%zg-H6bjsj zGrZcgwZD>Q!W}dy52F&O3ZTU&C9SRZI<%i`9YnV8`ii5uJN~*YSRYaL$nf z(ql)?oIGxYL*#chQ$5%o{QYB>$IBmDDi&aMKe9G~7K;d|38&3Vd{p>h%Z;tA<@;N! za`ZKM`r31Jzk9}FClS(~PS96p>s3Fu)ydl$Z?-il+kUBN`$gGWb<`Rsjnh~BsINXs zq3UaGjknqw%W!N}d~c0A9-~+6XQ6HP&r_(n2*;M2+pTd&`TASC^yPc?%J216NAxwP z^tEU8s=P;qY1X)(7V58mqrb6Tf0IRL=_?N+gZA8-U*U?k>goQC{^kyS*=|OS1KKm9 z-@-9y2xinkJ9Nfre_Cj@XD`&|EYY5bv%(?rJG-ery3)m69xs1rsaSy3{iu@(Y>xtJ zxgWKZ?r5zzsIQjlRp$+LSLw~@G4~_++lKq+4C*Uw4L92~m2J&6ZQ6T}xgY5+Z8Y3F zW4NDBp-ts&nkw8#aO`|P(p}hKxGQC$Z4Zknv`K+u=lhW^KiN=~ZKytOs5xm+{cNZ! zFw_?s)K^tesPV79{$&dtqjc=+&o zF&=bwpE$A?&lOEgO<=Mx$V3)ADDB^wF)wIvn7>5NW$Vx@U%AOr zou~V{eZTWd+=tTBzhE(6eY}3rOt0$VP37|FE8lX?edr3z?#xe-9RO4lwfOnuvFOkd zvO}L?-n=NKOBzWwq8{xtWsg6VOujGsSw=&r9n!7Ua^ z0H6ify4Tm$<(W!&iIV*;d-MYbUax4cXfy0*Hdy-iB-dGSL^%5IX{F z5o{8D?)_8!T5x>lcOURs8?*bpg@|@4Y}}F1w9+)=Q`8R6&-x;@Mq0;&L9Z@@jI_7 z&TTKtUOhi((1P(!Z%5j{9noijpZ)ycA+=ZcA_;&`;=G$GPX6%T)M-8gQ=^~yc*&C= zFY1@d>pR`&sbgD34T|HN62`NbeW{`Ru(7glqxYr0@Nw+ZsSEl|_ZgU-J`dReKs8Z| zl7p{DzclQGc!U1te}DLB+WZOqQFNtrEs_9`OLrg5Sk_Q_@W{tA`BO)%TQVj772gHH zgR?iyYAQR3BmmF?Y~7p6e=0eY_~VCR*l!$O-K5BFuRGgHJ2plj3)&D0U`GH^Fx%UZ z4L~OP0vcjRfGvVe`qTY-{emQCR|;zjj(xix(N2XO-jaC!=x5dCCs>PeS8)*X}(@}>%jTLpIpfPs=n%6%cF8ISr}v@OH1SB^WUwQAN1@@e>d#&g9cy9$!yV< zA_;(_JCbW|pSmwkpC3FpeoFtQZwEAOcZz?>3H_>8oq84?R zK3f?2e8KUpcsQuPn-Vj1Ac|IB%RmwUH!fx8XMft#aQV{CxFyp^{X1sb(s2K%$wSWX zj6+3`1OQsVRQF%5)m{4h+%^IBx`HoSekp3NJKIV}wk9D9+7Jq0M*vYU+uM*0KqmSE z8e&I)ErLz@)BXAv+Tp6I%IZ6qn%Ao9>mO@}FUt!sqi3H58X6kz-@o6<4qv-+`9?`G zo&#W1VfOJ5P!DJLy?Y()@Y$2c%WqxB#GZvg+C#M(4y2BD7*lC@j&7A)!`vGx0a<(R z-qkCG9qsU?{JitICoxgKepQZHx>8Ygz35tTaZx8bEIoSo+*#?>g8Xap^T?8S=Hz4T zaKU-msT>J*`NjOdg&oe%5pRD_@E^Vx_HFMhMzqr)`tr@lLz&BN7VOYAU&emx@=ip- zY=C!`wCXc#-Sw?4Y%67Kn1?KALnwe90Yt%UZ$mZ!ndl2>h#dj8 z2sY_YU$1|m9d5lR)!#cyJFM~gW9_i6_;Y=A4t=`9Y`N*Sq5f(oJFF|+)>^&?^Xj&S z5@!BgZFqR2weCVkJFF{6HB|m&s5yoC4xLj&TEh)Y?K|3G-Gz+?#Q_S#lo}ItRUW`C zH!?cfVcqqwTZ_M8$reYuRpH*^W+j7@}IQZ8nteGvHCP_-mc~-N)Kt-SsWH zi>Y+Kk@>%6hlgVBG#O;W{EI6BcAze7Las}QCeS5>{iKJhI6^LHAamrhM-z|RS)5A< z%}t4wk;D^nje#0&lIf%3sDwhEaD!5)+JLiFewsrCtcpV=B+)Rm5OOu#^l(-JO%w7| zk$jOb1rmfRI($tVEioyG9)-}6$p;BWo-i;yJSE6fKI(u{g~|=kB84xsl+WhYFePdN zsRYy$rE7pO1||ie{DD-4ih~;QG?1X&AQYL)r%05+O9}$g)N;THH9}*GFfhp@g=Z?C zO68&4lqA%^Tt3x1DTvV$N0b>!>nP;05>zPD+}gr{mavlH(#oT3o+b$82c_^(Z|H~I zk;+LFkp%tmj^PG=glegBsWFhx)$mkYp@%9+#Z!4u{ax@{2g>FdQ8q1IC{!h=Cao1f zE1o8Dtssf3T(3$HCMczK8AbGUxwE`phISDDkK=6e8 zrK+X;1Yrbvlc(e|r3VRv5DTQ3pt-<9f+|v(pi1CJDmlR^G^di29xe<-f6?-xza|p( z=P?@aAR~y56zDE83aNx79zPPf6Hq=UMTDLUR8FG(M{9)gBd82IGSH$lFC+*Dx`d$Q zloSzakm3@;N7=$iek33IYcRTmks2X-fgKOOK5~;#V>Y)@2z`-L2nnhPT7G&sALXkO zlAuWvQd3f>EKrIObu%K2Ugu$iB2GUkBD8J<%BE5{Nh!>AhcJ30frJRr6VRN47^DeN zE*&xSiZSP3D?qzJf|7n{{dpJxC?BnX{uBn%_Q8mVOu}`eiDa*pj^(cvs3s{JLBC>TVWU?I9j6`3H>MzOAoQgpZxXFP(34Obs=*{6kqafz{2S=i z$;z$luz>mjr_|qV~w@~+K;w3G>tT(&uQE7Q93k3`+y5eB4q3Yz5eJ3G=I$H)A2yB0XmM+ zOVC6)$($SG26<@$_&~d?!)I?Gn$yzCu$@DcX0+mEtiyug(upeA|w8wP%Z&0MnOOu5$WV3EMch(}NU zW^O8nO0e!tvjlp*gHW5tmu;;D)uZE>Fs1~@uNBa%{c(C*@|r`e9=|@C(>tDxr`f+| z*Ms>8^bn*3oi@=%oGJa;Z6l@~lui@UgOZYvK9JoHWju$nf|qsa`Kxi3Rfw%hUhPlhEUO3-K3-lEL-A{dFUGtvEp)~lLjE&% zUE+-839E_A*A^sk*)=CYusUf~>`N<_uU?$6Ja!c!g_iUwYl(|9M9hwhOAy3{B&}Y( zVtFEQv87U1tw>rKvI2lnG`4KT8aA1@tU!G3>UGOvXG|q72N0Q_uzdB5<#8*Biv!h# zEs&5ZOF7}O@u5?Qi`v3L^szM}1iwDUygh0|j|AUmpeL~ChnW~M^FkN!CKED!Uc&N- zbt_{N0}+T>u_iG9=Q*oZ2rP`yB?&AdBy>suB5bNDGG*1O#6TK$j(BXuBNT$T0 zLtSuoA>UyZYC~4r`hm|w-!H;(3JFJO2ANI%iTDg0ry@)@X-{<<#j`{?Y%PLm5F1{V zHF20IbGXVt=91N96-Lu?jHIbJFC(##yqv^gY!UJUgYhC0h&S;iUc?VNP>r64G#l~~ zF#jSeF%p-PbeTQJ^a zEJ`<%xqPbUY6iQUxf-lB7{!!73+eGpD%Ex+^rRZ#n)uHsQc<)wUHlFZ);5F+IOz|GfchMwx^}h qHZW@#%4o`C^fqf{=}kgLFe8Dj;d10!24u&+7+`mY4we5exBmfryXZ3j literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.dcp b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009D.dcp new file mode 100644 index 0000000000000000000000000000000000000000..2fb026edfdabaeb0338003ac3622dcc77506f778 GIT binary patch literal 396631 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"@lz|^SSLT^K=(*LUHyrd6Dx;<0 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
  • @!pFw%B)FErXg@6B?7|l!YKQXq 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 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.bpl b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.bpl new file mode 100644 index 0000000000000000000000000000000000000000..f2260dc5fc08ca92a77f8fd4940a88a006e69445 GIT binary patch literal 384000 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%0D0#mk?8^y*_iC&ZLGdS^aLM!sXSXx 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%0AGTwTjLxcI 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 G;C}#Y?&wqi literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcp b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcp new file mode 100644 index 0000000000000000000000000000000000000000..167968ff89c99cf5e452ecbe36af8a2bee317017 GIT binary patch literal 385100 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

    JR~7N6RdKzEJ@Y6}wY^CVtKClP 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 k%oZ_#a2m0SRu4i_KfIuXVE_OC literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogPkgD2009R.dcu new file mode 100644 index 0000000000000000000000000000000000000000..9ad6b5f3933922a6fe5b8fbeeea51b4f8165aad3 GIT binary patch literal 4176 zcmeHJYiJx*6rOLI?4E2lb*-Tez9^!yh=fqw(uPv=*le?sZ8zOb8$_hDGk14yGdr`+ zOwvsiDN;m4q&|ouQfw(wL_|cSh=}+?L_|bHrHF_~D0Xc4yA{ z&f}hY?z!JiP3tM9G_Cn`rGNLef1lU%p5C$DQZU+cu|65n5xh(rgg2hNfw?WRAP0!;hLF_uPwzn(tdI zF0^@6IL3?ITHeXb@>6U88J2EsKhMpT)Y?LD3n{Ezyt!2R|cf-6} z^&&w^Aof+O++qu6K_pEGX(^m_SU$J#EyFG(8GX|M)90oe2GA8%JIGzzJEGK+sOm(> z9W_8iXbXs!XPa^r$_$1bGYFVEfY_uQciI50+c64u`&ah4IC{S2>6a2U(}4OrfJ- zwyCc$mRqE>78}rLpWebaR62+cJG@!(ZB_c6InQq>tz#m*Xi$}Lyy$x^u0A3g^VyLC z3j#3_l_9PiHk)#qGCS*8Q)QniyS<}qR+MfMk+oSVF=elBE;8R@VuaS%e}(Fjo6@#- z;}ODCp1kXeqI0XFwpms+#VL)ZrL<|kn_`JFH&wxD$PA+7m4GY@rrP$q1js#Cdl2#4 z0vbW9;n<$iL#(|zK3N!(hhCXL*%Je2u$Wf?y2TQB%^k6M=&6rBmF{)QyiroNLo8P) z4_V5CvGE|cSt%3)Mt!#RtZFpXH~66=u0nYm);G*p%kN!wl)Ui0r0ujTmtZ>u)~+n- zGFPqK@ymoq=yWTyLP|QU%q1Lztjy(vB4uUP;txGmW;KD>A{?3aOwHy^5yP-D-SSHi zhRPCQxX#L~VhlG3i9prG80HI4BRj%k`?Tv{@vYgRhBM64v$T2gI^RI51GWy+I!dQBE7K+%&p zIX@s@I4v?gHlb@gAqktHo%|>p7oTgUSI{-*=G1+{mZXFAXT1XJ75Lv);GA69yV383 z)vp(&pfRr{^Ex4~8|Wa!4BSTOZK02_jc_|*J0VTDm9T@*Z(tW;H(`JM|g(ttbykUCk;GLIBg(B*gT3egcs5{OL&p+ z65(aSD}+}GuMu7+oFlx^!kdJ*2yYYK*@5>69~k(M@Dbr-!Y2kkC46S!bHW#dF9~0# zah~uE;akFYgzpJI5H1jYB>Y79*?>W~rjB0-zY=~U{BGb6!k>h{2=kN4g073|CX(X| e|9T>koLGEKCX%|YZ=!Dfg!Z_uAJU%GH1l63HTmZN literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogRegDE.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/TaskDialogRegDE.dcu new file mode 100644 index 0000000000000000000000000000000000000000..c537d25db14dcb4327bd663ef272925136444bd8 GIT binary patch literal 715 zcmcCyU=TUY#K2HBJ;};W`tKbECjOAb;%t}9#GL%}pwx61*MB$dr!lbE6mW<52D`Yr z1?zeGIdAVuv1BR`MpLO*kXXzd*k;C%!WLXvT#}m0z`&5s=irf;my(m}mYJ8BlT-OJ zq2Oq83Oi8VGcU6Qr~t@u&PgmTPAvv=xDaLn`DuJ1jwxjbp-byCPo(qfp$cwoc9%*{ z;X$Z!aRq4=3_*yvrev1n7X|wt@lF@g!w@%9UNkp3h07(iI5R!ZGp{5Ks6AaA==n^b zCyJc&a|`nGQu9h6hO|67n3SBt3sDRa0=wK4J=_`?7~*&Ioo7lmMT7=RvMG|+IeMtFA)p!*XG$cSVmL)6*_=tw(2aqCjX{G0<_n-}Kta!-B*4Lttic10 zjm)aVlFa-(m{g471fbkJCJih;0fq#KR zi-PEdAmRmxI2_vj#`r*JhANPq^4}n(Q{g`=NZj~9RAgjIr$B}dNYP7>(CZ(uhnsal zEXKpR5)3>BER14Yi~?LtQd~Sne2hjCjCxXxMm$Vx0z6DCjCwr0OcNL;vN7o}FoiNR M=~*yLW?)DJ08}p1Q2+n{ literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advgdip.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advgdip.dcu new file mode 100644 index 0000000000000000000000000000000000000000..779ff6ff452f09987fca16a74c5dd1930b998510 GIT binary patch literal 68331 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

    3K8ElJ!ovs;BRq=m5W*7(4;C&En#4 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 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advhintinfo.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/advhintinfo.dcu new file mode 100644 index 0000000000000000000000000000000000000000..c30f4c245a92f09ddf2ad5c99080988a58965644 GIT binary patch literal 2958 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 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/gdipicture.dcu b/TAdvTaskDialog/internal/1.5.1.2/1/Lib/D12/gdipicture.dcu new file mode 100644 index 0000000000000000000000000000000000000000..e30410ccb889af6a7866afc9ab25fcc61bbd4b0c GIT binary patch literal 9497 zcmd5=eRLbum4EXzlE;c-%f@jXHw4=oOzb*JLTo5G5Nzwi7L60xmJ_}VOr+6RL6%f$ z6fh7-YO{?p1OnyIEo<7cr=?vE*#opd0_|cjn1oY43Z;a?E(seTX$Uo}N$teMd*7RR z(u@=6?jJp8ouj;Y_ulurpYOgma}h#i^Up=-rXOxtx$2u=zK5{A&EpS5LrNwkoqFfe z`;hJ8rYD+Cib|;O1fiBQOpg>1GchnD9*#+=lZ2NuZ;f<=Kb}^^cu1Nij54;! zmy#sL`I2z>U@9YR+IRn?EVQK4Q8_M!Ay!B(Vk_J!NmQf*MApG*1mz&1SbbtFEv4!5 zW`Eip6VvH0p1!_T7MfeM*{j*Xr0i&>91W_e-f>(mZElGuQp%kGD|Mf(9ZC(*Pm4w0 zb;5tjb2S7SqQt<3;uR+%1*;Qr8L~(+DD&PMqY5?L(cC3Q(~=hHBiAKgl&rA zQ%kn*zFID7)?((1#vvsGROT$5))F7c<%lxoG1m zx8C#i4lsx&UZMug4R%QViPQiDNfP__wXf)pID%^uN;ERy-6X}8)q@Qiz*LR>t9c*o zkIV@Mq*OWz8#u1)ZTsh?@}eNwwyB61lEQhGt1}~|26CKJKiKo4eBPNQPpi5aB3x$B zdX!Ly&*B7~dqOFTM1!3!$s(VlLQGaajuA za?AH$g09M_&;p}zDUeDerIZqt(whmpBF|2VHw05+9J*%;D(E)CEzWVh-_1bt+CqqD z<%rPN10rltMH(cGZx|T{s3G$zl1*(@*1QTBhE>}M^E@MDcP5!kq?B|(1pCEUUN$ta zg9y*I_O4laX`V?f+)WtyaDm?L=uOgngj(og8XK1dwnBhgqe{P+9AEm-g|gt%XKz}D zvJoMupRrF3|K=BDoj$!kdHQNaPCq!KYw zR4{|i*rP=0EK->3;gX-VBWb``X* zmhdKWt04V!POvS&YIw_PZUn;B7V!6rvUEq!@irP}ZJMb2!;eU~w3!aSJ2U5iJkJ0@ zy`amVjg?<6J0MFr_)yjRC32~Opo2V2Bnh3aBSH5iQvIUx41h<97+s^?^W5*+WotCj z+7T$Z{^fTeRfc77ZYh1gAtss7+NG%6r~H=CVUy*|$(u?}lo2o@6t=k&{csneaW80r zOUowdauTHizt%{8k3a2`=V_&)QP#%WwR7YW%Zc|wO@=Go7KE=bz9M9>$cWa)qJ-U ziR^Xx19vbGFZ~;QXs+n16T08;mBZ9Vbxy6VkRC6v^@3Fyp zFI!(`vPM5y0N`T+aOHCAR{?Y~fO0bcY&}|h0C9vsd^X#oTrR+rMlk8}2txdLHFrfV zjLs@+KipZPz`MX!#V6BBKd@I$Ru%MVwE?rT!&O2uv|)WJsz@+(8~}HEnKe+whTxJ$ z0EYaT7;;cBg;uC8XwljQVAPM-@T7D%AXIv|3Wr0WzXBO-u~!wy+VKR^jR(HUvi)Yu zUazuj=ug6mhP`0pR%TV;Kp&;)z#hGZeE|fWmV2Uw<2mL#geTfqRv+fE&7eN z7NK${D9kX0H712xwVtl-^E0TcF{!IDsH-_mU6!dM@0emNdXq@rmB0`3R*tT&-r0&m zKgNsAw+KZ3oYey1ooYh@?A;!VZwV(X!3Yg)t3}mZ9sc$tcAZQ!Lbmmfq5k_|y4;0|nAEW$Z zj9jN~oV-Fn$?BF!nzL7B*42DJEAsTh8wxQhqA+C6k)N zq@Y<4c9gO?UOP@)-(c)nyAtd=KSM>WOmyBEw=W1bW~pGIF1WmCRwZMEPZdK|Zh6e| zm<2}qJj~5y^2M_&8#1gdc*638VL=JAWG>WY{+>j<+C__V9z!f(TfvSNXzKP@_85@n z>w+N<+4s%VpyHXCncIHa4ECWGfJ6|?FD(;BEtNX{?4czU=Gb>d0;=>?-$UHK5b16~; z^-a}XHq-5dX)7uoss$WE^2~HMADK@kW9mGzgsvMJQNFFNTg+f!RGl-WgC|hNGB}Bf z?;Y9ZZlJiuLw|%d4ExAFGMNR`{W$kv4p^NuvDLR#VW#uCjc6lMU!t0UqT8+$zy+ka zkYH+#N+u96Hu!ZqnjQZqHMvNsqtv2nueoZpd)?3*iZJ-XxMt&@)bSN>sAF_u)SUG# z9`iMD>e$e`N-^bz@3Io#2VZcgV-zO`p!&2Fsc&xiU|Po-diT}>{SkzF)K5SoWOl{7 z+1}}F$0W({ijkha3P@LYW?48}rH(>gx~hgoif@0Ngg&3ALXxMUXY$0rMoe{Qy%U3* zCs3w*Pb0t>t*2~)e-c({_&dDQl*-1y#u?Q+5zuMl0rlp^>Pw_F0%{u{P`%Ru70m>k zkj;*1Bec3-^$GzMTzFIWPY>>jkt?sbBAj*hVN!w&dh`fbfR6qp$2|wQ%m$q~4tY^O z?0ud`kMbBn+nD(WSmQ1Jf8G zE%^I-`gT+N<>72KbC``Z_@A)g9}cM3ET;K~;JXdMSG|)IOxQ*x|*zSS?;Nk zh<5Q^be#a1SJAijcG8(c?Vb46%bi4Euj(CF-`3pG`-4~8gSpapmPFaBhvl@wc@MZO ze&)g%{rlAo?AaA>WP7Hy-MWw_lEEbrZqod3lb&4DX8}0gT3aq0VZy!w);Hu|#yoLwU!+vr%m; zv))U-2{S)gjx_U0^wz24og3{Bf(&|$`~J&Rm5%B+p^lkR$tU>PsMkP9OfG=}(r7lK zZn|HXJjvDbIq)6Ods!NKCU?IF3~EJtrXEUbj}7KeLz!vB!Ohc1SqtZncAe3qee{wY z&`xq76T2swe0!#bfWS?BHi(@R0S#4<<++bsaCUeno+j5=YJ(oHqvR}tz01xbVpA9L zqHeSjEroyNkMW2qAM(R})tlo&9LQ0YA4mkw1wpM^XXq^=XGH@rbj6dsqk~Iein!7K z%@*XS!wBA(tGFfbtHVz2Nr8J*;G6pl0Bgh2O7h9PmC5HZ2011n!?|xs=DzglqAw5o;Z`6HXRJoN3p*WNT!vkhc%+D~UWAv` zIy$ippI?D%EAT&-NvH6J1uztGf3V{}+VM&!Ocvmao%rGkJiUfHV8K#@KJeE01EKa=L z?l{|m9d+<)vMj>wMR;Qsx6_XADTgn3E8z!*Lrf|heoHyGvlQQ3&iR4v*Xd=BUJWE_ zsl{DR`1ncl3_02 zONJ8OOGM7*JIPQD-z8u;m+vJ*9lwn`G($Z!eoCqoM#C4-mG RkipMq$= 0) then + begin + Images.Draw(Canvas, CapR.Left, CapR.Top, ImageIndex, Enabled); + i := CapR.Left + Images.Width + 3; + end; + + Canvas.Brush.Style := bsClear; + //--- Draw Caption + if (Caption <> '') then + begin + Canvas.Font.Assign(Self.Font); + R := Rect(i, CapR.Top, CapR.Right, CapR.Bottom); + DrawText(Canvas.Handle,PChar(Caption),Length(Caption), R, DT_SINGLELINE or DT_LEFT or DT_VCENTER); + end; + + bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Canvas, Rect(CapR.Left-1, CapR.Top, CapR.Right+1, CapR.Bottom)); + R := GetBorderRect; + //--- Draw Borders + case BorderStyle of + bsSingle: + begin + (* + if Ctl3D then + begin + + Canvas.Brush.Style := bsClear; + Canvas.Pen.Color := clWhite; + R.Left := R.Left + 1; + R.Top := R.Top + 1; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + + Canvas.Pen.Color := clGray; + R.Bottom := R.Bottom -1; + R.Right := R.Right - 1; + R.Left := R.Left - 1; + R.Top := R.Top - 1; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + end + else + *) + begin + Canvas.Brush.Style := bsClear; + Canvas.Pen.Color := BorderColor; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + end; + end; + bsDouble: + begin + if Ctl3D then + begin + Canvas.Brush.Style := bsClear; + Canvas.Pen.Color := clWhite; + R.Left := R.Left + 1; + R.Top := R.Top + 1; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + Canvas.Pen.Color := clGray; + R.Bottom := R.Bottom -1; + R.Right := R.Right - 1; + R.Left := R.Left - 1; + R.Top := R.Top - 1; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + + R.Bottom := R.Bottom +1; + R.Right := R.Right + 1; + + R := Rect(R.Left+2, R.Top+2, R.Right-2, R.Bottom-2); + + Canvas.Pen.Color := clWhite; + R.Left := R.Left + 1; + R.Top := R.Top + 1; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + Canvas.Pen.Color := clGray; + R.Bottom := R.Bottom -1; + R.Right := R.Right - 1; + R.Left := R.Left - 1; + R.Top := R.Top - 1; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + end + else + begin + Canvas.Brush.Style := bsClear; + Canvas.Pen.Color := BorderColor; + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + R := Rect(R.Left+2, R.Top+2, R.Right-2, R.Bottom-2); + if FRoundEdges then + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, rt, rt) + else + Canvas.Rectangle(R); + end; + end; + end; + + if ((Caption <> '') or (Assigned(Images) and (ImageIndex >= 0))) then + begin + Canvas.CopyRect(Rect(CapR.Left-1, CapR.Top, CapR.Right+1, CapR.Bottom), bmp.Canvas, Rect(0, 0, bmp.Width, bmp.Height)); + end; + bmp.Free; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetBorderColor(const Value: TColor); +begin + if (FBorderColor <> Value) then + begin + FBorderColor := Value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetImageIndex(const Value: Integer); +begin + if (FImageIndex <> Value) then + begin + FImageIndex := Value; + Invalidate; + Realign; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetImages(const Value: TCustomImageList); +begin + if (FImages <> Value) then + begin + FImages := Value; + if not Assigned(FImages) then + begin + ImageIndex := -1; + end; + Invalidate; + Realign; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetTransparent(const Value: Boolean); +begin + if (FTransparent <> Value) then + begin + FTransparent := Value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.WMEraseBkGnd(var msg: TWMEraseBkGnd); +begin + inherited; + //SetBkMode( msg.DC, TRANSPARENT ); + //msg.result := 1; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGroupBox.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn)))+'.'+IntToStr(Lo(Hiword(vn)))+'.'+IntToStr(Hi(Loword(vn)))+'.'+IntToStr(Lo(Loword(vn))); +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGroupBox.GetVersionNr: integer; +begin + Result := MakeLong(MakeWord(BLD_VER,REL_VER),MakeWord(MIN_VER,MAJ_VER)); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetVersion(const Value: string); +begin + +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGroupBox.GetCaptionHeight: Integer; +var + R: TRect; +begin + R := GetCaptionRect; + Result := Max(GetBorderWidth, R.Bottom - R.Top); +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGroupBox.GetBorderWidth: Integer; +begin + Result := 0; + case BorderStyle of + bsNone: Result := 1; + bsSingle: + begin + Result := 1; + if Ctl3D then + Result := Result + 1; + end; + bsDouble: + begin + Result := 2; + if Ctl3D then + Result := Result + 2; + end; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGroupBox.GetBorderRect: TRect; +begin + Result := ClientRect; + if CaptionPosition in [cpTopLeft, cpTopCenter, cpTopRight] then + begin + Result.Top := Result.Top + (GetCaptionHeight div 2); + end + else if CaptionPosition in [cpBottomLeft, cpBottomCenter, cpBottomRight] then + begin + if ((Caption <> '') or (Assigned(Images) and (ImageIndex >= 0))) then + begin + Result.Bottom := Result.Bottom - (GetCaptionHeight div 2); + if (BorderStyle = bsDouble) then + Result.Bottom := Result.Bottom + 1; + end; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGroupBox.GetCaptionRect: TRect; +var + ImgH, ImgW, CapH, CapW, sp, st, w, h: Integer; + R: TRect; +begin + Result := Rect(0, 0, 0, 0); + ImgH := 0; + ImgW := 0; + CapH := 0; + CapW := 0; + st := 8; + sp := 0; + if (Caption <> '') then + begin + Canvas.Font.Assign(Self.Font); + R := Rect(0, 0, 1000, 100); + DrawText(Canvas.Handle,PChar(Caption),Length(Caption), R, DT_CALCRECT or DT_LEFT or DT_SINGLELINE); + CapH := R.Bottom - R.Top; + CapW := R.Right - R.Left; + end; + + if Assigned(Images) and (ImageIndex >= 0) then + begin + ImgH := Images.Height; + ImgW := Images.Width; + end; + + if (CapW > 0) and (ImgW > 0) then + begin + sp := 3; + end; + + w := ImgW + sp + CapW; + h := Max(ImgH, CapH) + 2; + case CaptionPosition of + cpTopLeft: + begin + Result.Left := st; + Result.Right := Result.Left + w; + Result.Bottom := Result.Top + h; + end; + cpTopRight: + begin + Result.Right := Width - st; + Result.Left := Result.Right - w; + Result.Bottom := Result.Top + h; + end; + cpTopCenter: + begin + Result.Left := (Width - w) div 2; + Result.Right := Result.Left + w; + Result.Bottom := Result.Top + h; + end; + cpBottomLeft: + begin + Result.Left := st; + Result.Right := Result.Left + w; + Result.Top := Height - h; + Result.Bottom := Result.Top + h; + end; + cpBottomRight: + begin + Result.Right := Width - st; + Result.Left := Result.Right - w; + Result.Top := Height - h; + Result.Bottom := Result.Top + h; + end; + cpBottomCenter: + begin + Result.Left := (Width - w) div 2; + Result.Right := Result.Left + w; + Result.Top := Height - h; + Result.Bottom := Result.Top + h; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.CMCtl3DChanged(var Message: TMessage); +begin + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetBorderStyle(const Value: TBorderStyle); +begin + if (FBorderStyle <> Value) then + begin + FBorderStyle := Value; + Invalidate; + Realign; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetCaptionPosition( + const Value: TCaptionPosition); +begin + if (FCaptionPosition <> Value) then + begin + FCaptionPosition := Value; + Invalidate; + Realign; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGroupBox.SetRoundEdges(const Value: Boolean); +begin + if (FRoundEdges <> Value) then + begin + FRoundEdges := Value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +{$IFDEF FREEWARE} +{$I TRIAL.INC} +{$ENDIF} + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.pas new file mode 100644 index 0000000..f8f0570 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.pas @@ -0,0 +1,2814 @@ +{*************************************************************************} +{ TAdvOfficeButtons components } +{ for Delphi & C++Builder } +{ } +{ written by } +{ TMS Software } +{ copyright © 2007 - 2008 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{*************************************************************************} + +unit AdvOfficeButtons; + +{$I TMSDEFS.INC} +{$R AdvOfficeButtons.res} +{$DEFINE REMOVESTRIP} +{$DEFINE REMOVEDRAW} + +interface + +uses + SysUtils, Windows, Messages, Classes, Graphics, Controls, + Forms, Dialogs, StdCtrls, Menus, Buttons, ComObj, ActiveX, + PictureContainer, AdvGroupBox; + +const + MAJ_VER = 1; // Major version nr. + MIN_VER = 1; // Minor version nr. + REL_VER = 1; // Release nr. + BLD_VER = 4; // Build nr. + + // version history + // 1.0.0.1 : Fixed compatibility issue with TRadioGroup of TAdvOfficeRadioGroup + // 1.0.1.0 : Improved : exposed Visible property in TAdvOfficeRadioButton + // 1.0.2.0 : New : Added OnEnter, OnExit events in TAdvOfficeRadioButton, TAdvOfficeCheckBox + // 1.0.3.0 : Improved : painting hot state of controls + // 1.1.0.0 : New property Value added in AdvOfficeCheckGroup + // : New component TDBAdvOfficeCheckGroup added + // 1.1.0.1 : Improved : painting of focus rectangle + // 1.1.0.2 : Fixed : issue with ImageIndex for caption + // 1.1.0.3 : Fixed : issue with arrow keys & TAdvOfficeRadioGroup + // 1.1.0.4 : Fixed : issue with dbl click & mouseup handling + // 1.1.0.5 : Fixed : small painting issue with ClearType fonts + // 1.1.0.6 : Fixed : issue with runtime creating controls + // 1.1.0.7 : Fixed : issue with setting separate radiobuttons in group as disabled + // 1.1.0.8 : Fixed : issue with OnClick event for TAdvOfficeRadioGroup + // 1.1.0.9 : Fixed : issue with vertical alignment of radiobutton label text + // 1.1.1.0 : Improved : BidiMode RightToLeft support + // 1.1.1.1 : Fixed : painting issue with BiDiMode bdRightToLeft for radiobutton + // 1.1.1.2 : Fixed : issue with transparency on Windows Vista + // 1.1.1.3 : Improved : tab key handling for TAdvOfficeCheckGroup + // 1.1.1.4 : Fixed : background painting issue with Delphi 2009 + +type + TAnchorClick = procedure (Sender:TObject; Anchor:string) of object; + + TCustomAdvOfficeCheckBox = class(TCustomControl) + private + FDown:Boolean; + FState:TCheckBoxState; + FFocused:Boolean; + FReturnIsTab:Boolean; + FImages:TImageList; + FAnchor: string; + FAnchorClick: TAnchorClick; + FAnchorEnter: TAnchorClick; + FAnchorExit: TAnchorClick; + FURLColor: TColor; + FImageCache: THTMLPictureCache; + FBtnVAlign: TTextLayout; + FAlignment: TLeftRight; + FEllipsis: Boolean; + FCaption: string; + FContainer: TPictureContainer; + FShadowOffset: Integer; + FShadowColor: TColor; + FIsWinXP: Boolean; + FHot: Boolean; + FClicksDisabled: Boolean; + FOldCursor: TCursor; + FReadOnly: Boolean; + {$IFNDEF TMSDOTNET} + FBkgBmp: TBitmap; + FBkgCache: boolean; + FTransparentCaching: boolean; + {$ENDIF} + FDrawBkg: boolean; + FGotClick: boolean; + procedure WMEraseBkGnd(var Message:TMessage); message WM_ERASEBKGND; + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; + procedure SetState(Value:TCheckBoxState); + procedure SetCaption(Value: string); + procedure SetImages(const Value: TImageList); + procedure SetURLColor(const Value:TColor); + function IsAnchor(x,y:integer):string; + procedure SetButtonVertAlign(const Value: TTextLayout); + procedure SetAlignment(const Value: TLeftRight); + procedure SetEllipsis(const Value: Boolean); + procedure SetContainer(const Value: TPictureContainer); + procedure SetShadowColor(const Value: TColor); + procedure SetShadowOffset(const Value: Integer); + function GetVersion: string; + procedure SetVersion(const Value: string); + {$IFNDEF TMSDOTNET} + procedure DrawParentImage (Control: TControl; Dest: TCanvas); + {$ENDIF} + protected + function GetVersionNr: Integer; virtual; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + procedure DrawCheck; + procedure Paint; override; + procedure SetChecked(Value:Boolean); virtual; + function GetChecked:Boolean; virtual; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState;X, Y: Integer); override; + procedure KeyDown(var Key:Word;Shift:TShiftSTate); override; + procedure KeyUp(var Key:Word;Shift:TShiftSTate); override; + procedure SetDown(Value:Boolean); + procedure Loaded; override; + procedure DoEnter; override; + procedure DoExit; override; + property Checked: Boolean read GetChecked write SetChecked default False; + property ClicksDisabled: Boolean read FClicksDisabled write FClicksDisabled; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Toggle; virtual; + {$IFNDEF TMSDOTNET} + procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; + property TransparentChaching: boolean read FTransparentCaching write FTransparentCaching; + {$ENDIF} + property DrawBkg: Boolean read FDrawBkg write FDrawBkg; + published + property Action; + property Align; + property Anchors; + property Constraints; + property Color; + property Alignment: TLeftRight read FAlignment write SetAlignment; + property BiDiMode; + property ButtonVertAlign: TTextLayout read FBtnVAlign write setButtonVertAlign default tlTop; + property Caption: string read FCaption write SetCaption; + property Down: Boolean read FDown write SetDown default False; + property DragCursor; + property DragKind; + property DragMode; + property Ellipsis: Boolean read FEllipsis write SetEllipsis default False; + property Enabled; + property Font; + property Images: TImageList read FImages write SetImages; + property ParentFont; + property ParentColor; + property PictureContainer: TPictureContainer read FContainer write SetContainer; + property PopupMenu; + property ReadOnly: Boolean read FReadOnly write FReadOnly default False; + property ReturnIsTab: Boolean read FReturnIsTab write FReturnIsTab; + property ShadowColor: TColor read FShadowColor write SetShadowColor default clGray; + property ShadowOffset: Integer read FShadowOffset write SetShadowOffset default 1; + property ShowHint; + property State: TCheckBoxState read FState write SetState default cbUnchecked; + property TabOrder; + property TabStop; + property URLColor: TColor read FURLColor write SetURLColor default clBlue; + property Visible; + property OnClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnAnchorClick: TAnchorClick read fAnchorClick write fAnchorClick; + property OnAnchorEnter: TAnchorClick read fAnchorEnter write fAnchorEnter; + property OnAnchorExit: TAnchorClick read fAnchorExit write fAnchorExit; + property Version: string read GetVersion write SetVersion; + end; + + TAdvOfficeCheckBox = class(TCustomAdvOfficeCheckBox) + published + property Checked; + end; + + TAdvOfficeRadioButton = class(TCustomControl) + private + FDown: Boolean; + FChecked: Boolean; + FFocused: Boolean; + FGroupIndex: Byte; + FReturnIsTab: Boolean; + FImages: TImageList; + FAnchor: string; + FAnchorClick: TAnchorClick; + FAnchorEnter: TAnchorClick; + FAnchorExit: TAnchorClick; + FURLColor: TColor; + FImageCache: THTMLPictureCache; + FBtnVAlign: TTextLayout; + FAlignment: TLeftRight; + FEllipsis: Boolean; + FCaption: string; + FContainer: TPictureContainer; + FShadowOffset: Integer; + FShadowColor: TColor; + FIsWinXP: Boolean; + FHot: Boolean; + FClicksDisabled: Boolean; + FOldCursor: TCursor; + {$IFNDEF TMSDOTNET} + FBkgBmp: TBitmap; + FBkgCache: boolean; + FTransparentCaching: boolean; + {$ENDIF} + FDrawBkg: Boolean; + FGotClick: boolean; + procedure TurnSiblingsOff; + procedure SetDown(Value:Boolean); + procedure SetChecked(Value:Boolean); + procedure SetImages(const Value: TImageList); + procedure SetURLColor(const Value:TColor); + function IsAnchor(x,y:integer):string; + procedure WMLButtonDown(var Message:TWMLButtonDown); message WM_LBUTTONDOWN; + procedure WMEraseBkGnd(var Message:TMessage); message WM_ERASEBKGND; + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; + procedure SetButtonVertAlign(const Value: TTextLayout); + procedure SetAlignment(const Value: TLeftRight); + procedure SetEllipsis(const Value: Boolean); + procedure SetCaption(const Value: string); + procedure SetContainer(const Value: TPictureContainer); + procedure SetShadowColor(const Value: TColor); + procedure SetShadowOffset(const Value: Integer); + function GetVersion: string; + procedure SetVersion(const Value: string); + function GetVersionNr: Integer; + {$IFNDEF TMSDOTNET} + procedure DrawParentImage (Control: TControl; Dest: TCanvas); + {$ENDIF} + protected + procedure DrawRadio; + procedure Paint; override; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState;X, Y: Integer); override; + procedure KeyDown(var Key:Word;Shift:TShiftSTate); override; + procedure KeyUp(var Key:Word;Shift:TShiftSTate); override; + procedure DoEnter; override; + procedure DoExit; override; + procedure Loaded; override; + procedure Click; override; + procedure DoClick; virtual; + property ClicksDisabled: Boolean read FClicksDisabled write FClicksDisabled; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + {$IFNDEF TMSDOTNET} + procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; + property TransparentChaching: boolean read FTransparentCaching write FTransparentCaching; + {$ENDIF} + property DrawBkg: Boolean read FDrawBkg write FDrawBkg; + published + property Align; + {$IFDEF DELPHI4_LVL} + property Action; + property Anchors; + property BiDiMode; + property Constraints; + {$ENDIF} + property Color; + property Alignment: TLeftRight read fAlignment write SetAlignment; + property URLColor:TColor read FURLColor write SetURLColor default clBlue; + property ButtonVertAlign: TTextLayout read fBtnVAlign write SetButtonVertAlign default tlTop; + property Caption: string read FCaption write SetCaption; + property Checked:Boolean read FChecked write SetChecked default False; + property Down:Boolean read FDown write SetDown default False; + property DragCursor; + {$IFDEF DELPHI4_LVL} + property DragKind; + {$ENDIF} + property DragMode; + property Ellipsis: Boolean read FEllipsis write SetEllipsis default False; + property Enabled; + property Font; + property GroupIndex:Byte read FGroupIndex write FGroupIndex + default 0; + property Images:TImageList read fImages write SetImages; + property ParentFont; + property ParentColor; + property PictureContainer: TPictureContainer read FContainer write SetContainer; + property PopupMenu; + property ReturnIsTab:Boolean read FReturnIsTab write FReturnIsTab; + property ShadowColor: TColor read FShadowColor write SetShadowColor default clGray; + property ShadowOffset: Integer read FShadowOffset write SetShadowOffset default 1; + property ShowHint; + property TabOrder; + property TabStop; + property OnClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnAnchorClick:TAnchorClick read fAnchorClick write fAnchorClick; + property OnAnchorEnter:TAnchorClick read fAnchorEnter write fAnchorEnter; + property OnAnchorExit:TAnchorClick read fAnchorExit write fAnchorExit; + property Version: string read GetVersion write SetVersion; + property Visible; + end; + + TEnabledEvent = procedure (Sender:TObject; ItemIndex: Integer; var Enabled: Boolean) of object; + + + TCustomAdvOfficeRadioGroup = class(TAdvGroupbox) + private + FButtons: TList; + FItems: TStrings; + FItemIndex: Integer; + FColumns: Integer; + FReading: Boolean; + FUpdating: Boolean; + FAlignment: TAlignment; + FBtnVAlign: TTextLayout; + FImages: TImageList; + FContainer: TPictureContainer; + FEllipsis: Boolean; + FShadowOffset: Integer; + FShadowColor: TColor; + FOnIsEnabled: TEnabledEvent; + FIsReadOnly: boolean; + procedure ArrangeButtons; + procedure ButtonClick(Sender: TObject); + procedure ItemsChange(Sender: TObject); + procedure SetButtonCount(Value: Integer); + procedure SetColumns(Value: Integer); + procedure SetItemIndex(Value: Integer); + procedure SetItems(Value: TStrings); + procedure UpdateButtons; + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; + procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; + procedure WMSize(var Message: TWMSize); message WM_SIZE; + procedure SetAlignment(const Value: TAlignment); + procedure SetButtonVertAlign(const Value: TTextLayout); + procedure SetContainer(const Value: TPictureContainer); + procedure SetImages(const Value: TImageList); + procedure SetEllipsis(const Value: Boolean); + procedure SetShadowColor(const Value: TColor); + procedure SetShadowOffset(const Value: Integer); + function GetVersion: string; + procedure SetVersion(const Value: string); + protected + function GetVersionNr: Integer; virtual; + procedure Loaded; override; + procedure ReadState(Reader: TReader); override; + function CanModify: Boolean; virtual; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + property Columns: Integer read FColumns write SetColumns default 1; + property ItemIndex: Integer read FItemIndex write SetItemIndex default -1; + property Items: TStrings read FItems write SetItems; + property IsReadOnly: boolean read FIsReadOnly write FIsReadOnly; + public + procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + {$IFDEF DELPHI4_LVL} + procedure FlipChildren(AllLevels: Boolean); override; + {$ENDIF} + procedure PushKey(var Key: Char); + procedure PushKeyDown(var Key: Word; Shift: TShiftState); + published + property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; + property ButtonVertAlign: TTextLayout read fBtnVAlign write SetButtonVertAlign default tlTop; + property Ellipsis: Boolean read FEllipsis write SetEllipsis; + property Images: TImageList read FImages write SetImages; + property PictureContainer: TPictureContainer read FContainer write SetContainer; + property ShadowColor: TColor read FShadowColor write SetShadowColor default clSilver; + property ShadowOffset: Integer read FShadowOffset write SetShadowOffset default 1; + property OnIsEnabled: TEnabledEvent read FOnIsEnabled write FOnIsEnabled; + property Version: string read GetVersion write SetVersion; + end; + + TAdvOfficeRadioGroup = class(TCustomAdvOfficeRadioGroup) + private + protected + public + published + property Align; + {$IFDEF DELPHI4_LVL} + property Anchors; + property Constraints; + property DragKind; + property ParentBiDiMode; + {$ENDIF} + property Caption; + property Color; + property Columns; + property Ctl3D; + property DragCursor; + property DragMode; + property Enabled; + property Font; + property ItemIndex; + property Items; + property ParentColor; + property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnClick; + {$IFDEF DELPHI5_LVL} + property OnContextPopup; + {$ENDIF} + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + {$IFDEF DELPHI4_LVL} + property OnEndDock; + property OnStartDock; + {$ENDIF} + property OnStartDrag; + end; + + TCustomAdvOfficeCheckGroup = class(TAdvGroupBox) + private + FButtons: TList; + FItems: TStrings; + FColumns: Integer; + FReading: Boolean; + FUpdating: Boolean; + FAlignment: TAlignment; + FBtnVAlign: TTextLayout; + FImages: TImageList; + FContainer: TPictureContainer; + FEllipsis: Boolean; + FShadowOffset: Integer; + FShadowColor: TColor; + FOnIsEnabled: TEnabledEvent; + FValue: DWord; + FFocusButtonIdx: integer; + procedure ArrangeButtons; + procedure ButtonClick(Sender: TObject); + procedure CheckFocus(Sender: TObject); + procedure ItemsChange(Sender: TObject); + procedure SetButtonCount(Value: Integer); + procedure SetColumns(Value: Integer); + procedure SetItems(Value: TStrings); + procedure UpdateButtons; + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; + procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; + procedure WMSize(var Message: TWMSize); message WM_SIZE; + procedure SetAlignment(const Value: TAlignment); + procedure SetButtonVertAlign(const Value: TTextLayout); + procedure SetContainer(const Value: TPictureContainer); + procedure SetImages(const Value: TImageList); + procedure SetEllipsis(const Value: Boolean); + procedure SetShadowColor(const Value: TColor); + procedure SetShadowOffset(const Value: Integer); + function GetReadOnly(Index: Integer): Boolean; + procedure SetReadOnly(Index: Integer; const Value: Boolean); + function GetVersion: string; + procedure SetVersion(const Value: string); + function GetVersionNr: Integer; + procedure SetValue(const Value: DWord); + function GetValue: DWord; + protected + procedure Loaded; override; + procedure DoEnter; override; + procedure DoExit; override; + procedure ReadState(Reader: TReader); override; + function CanModify: Boolean; virtual; + function GetChecked(Index: Integer): Boolean; virtual; + procedure SetChecked(Index: Integer; const Value: Boolean); virtual; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + procedure UpdateValue; + property Columns: Integer read FColumns write SetColumns default 1; + property Items: TStrings read FItems write SetItems; + property Value: DWord read GetValue write SetValue; + public + procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + {$IFDEF DELPHI4_LVL} + procedure FlipChildren(AllLevels: Boolean); override; + {$ENDIF} + procedure PushKey(var Key: Char); + procedure PushKeyDown(var Key: Word; Shift: TShiftState); + property Checked[Index: Integer]: Boolean read GetChecked write SetChecked; + property ReadOnly[Index: Integer]: Boolean read GetReadOnly write SetReadOnly; + published + property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; + property ButtonVertAlign: TTextLayout read fBtnVAlign write SetButtonVertAlign default tlTop; + property Ellipsis: Boolean read FEllipsis write SetEllipsis; + property Images: TImageList read FImages write SetImages; + property PictureContainer: TPictureContainer read FContainer write SetContainer; + property ShadowColor: TColor read FShadowColor write SetShadowColor default clSilver; + property ShadowOffset: Integer read FShadowOffset write SetShadowOffset default 1; + property OnIsEnabled: TEnabledEvent read FOnIsEnabled write FOnIsEnabled; + property Version: string read GetVersion write SetVersion; + end; + + TAdvOfficeCheckGroup = class(TCustomAdvOfficeCheckGroup) + private + protected + public + property Value; + published + property Align; + {$IFDEF DELPHI4_LVL} + property Anchors; + property Constraints; + property DragKind; + property ParentBiDiMode; + {$ENDIF} + property Caption; + property Color; + property Columns; + property Ctl3D; + property DragCursor; + property DragMode; + property Enabled; + property Font; + property Items; + property ParentColor; + property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnClick; + {$IFDEF DELPHI5_LVL} + property OnContextPopup; + {$ENDIF} + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + {$IFDEF DELPHI4_LVL} + property OnEndDock; + property OnStartDock; + {$ENDIF} + property OnStartDrag; + end; + + + + +implementation +uses + ShellApi, CommCtrl, Math +{$IFDEF DELPHI4_LVL} + ,Imglist +{$ENDIF} + ; + +{$I HTMLENGO.PAS} + + +const + BW = 12; + +{$IFNDEF TMSDOTNET} +function IsVista: boolean; +var + hKernel32: HMODULE; +begin + hKernel32 := GetModuleHandle('kernel32'); + if (hKernel32 > 0) then + begin + Result := GetProcAddress(hKernel32, 'GetLocaleInfoEx') <> nil; + end + else + Result := false; +end; +{$ENDIF} + +procedure PaintFocusRect(ACanvas: TCanvas; R: TRect; Clr: TColor); +var + LB: TLogBrush; + HPen, HOldPen: THandle; +begin + ACanvas.Pen.Color := Clr; + + lb.lbColor := ColorToRGB(Clr); + lb.lbStyle := bs_Solid; + + HPen := ExtCreatePen(PS_COSMETIC or PS_ALTERNATE,1, lb, 0, nil); + HOldPen := SelectObject(ACanvas.Handle, HPen); + + MoveToEx(ACanvas.Handle, R.Left, R.Top, nil); + LineTo(ACanvas.Handle, R.Right, R.Top); + + MoveToEx(ACanvas.Handle, R.Right, R.Top, nil); + LineTo(ACanvas.Handle, R.Right, R.Bottom); + + MoveToEx(ACanvas.Handle, R.Right, R.Bottom, nil); + LineTo(ACanvas.Handle, R.Left, R.Bottom); + + MoveToEx(ACanvas.Handle, R.Left, R.Top, nil); + LineTo(ACanvas.Handle, R.Left, R.Bottom); + + DeleteObject(SelectObject(ACanvas.Handle,HOldPen)); +end; + + +{$IFNDEF DELPHI4_LVL} +function Min(a,b: Integer): Integer; +begin + if a < b then + Result := a + else + Result := b; +end; +{$ENDIF} + +{$IFDEF DELPHI4_LVL} +{$IFNDEF TMSDOTNET} +function GetFileVersion(FileName:string): Integer; +var + FileHandle:dword; + l: Integer; + pvs: PVSFixedFileInfo; + lptr: uint; + querybuf: array[0..255] of char; + buf: PChar; +begin + Result := -1; + + StrPCopy(querybuf,FileName); + l := GetFileVersionInfoSize(querybuf,FileHandle); + if (l>0) then + begin + GetMem(buf,l); + GetFileVersionInfo(querybuf,FileHandle,l,buf); + if VerQueryValue(buf,'\',Pointer(pvs),lptr) then + begin + if (pvs^.dwSignature = $FEEF04BD) then + begin + Result := pvs^.dwFileVersionMS; + end; + end; + FreeMem(buf); + end; +end; +{$ENDIF} +{$ENDIF} + + +function DoThemeDrawing: Boolean; +var + VerInfo: TOSVersioninfo; + FIsWinXP,FIsComCtl6: boolean; + i: integer; +begin + {$IFDEF TMSDOTNET} + VerInfo.dwOSVersionInfoSize := Marshal.SizeOf(TypeOf(TOSVersionInfo)); + {$ENDIF} + {$IFNDEF TMSDOTNET} + VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); + {$ENDIF} + + GetVersionEx(verinfo); + + FIsWinXP := (verinfo.dwMajorVersion > 5) OR + ((verinfo.dwMajorVersion = 5) AND (verinfo.dwMinorVersion >= 1)); + + i := GetFileVersion('COMCTL32.DLL'); + i := (i shr 16) and $FF; + + FIsComCtl6 := (i > 5); + + Result := FIsComCtl6 and FIsWinXP; +end; + +{ TCustomHTMLCheckBox } + +constructor TCustomAdvOfficeCheckBox.Create(AOwner: TComponent); +var + VerInfo: TOSVersioninfo; + +begin + inherited Create(AOwner); + Width := 120; + Height := 20; + FUrlColor := clBlue; + FBtnVAlign := tlTop; + FImageCache := THTMLPictureCache.Create; + FCaption := self.ClassName; + FShadowOffset := 1; + FShadowColor := clGray; + + {$IFNDEF TMSDOTNET} + VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); + {$ENDIF} + {$IFDEF TMSDOTNET} + VerInfo.dwOSVersionInfoSize := Marshal.SizeOf(TypeOf(TOSVersionInfo)); + {$ENDIF} + + GetVersionEx(verinfo); + + FIsWinXP := (verinfo.dwMajorVersion > 5) OR + ((verinfo.dwMajorVersion = 5) AND (verinfo.dwMinorVersion >= 1)); + + ControlStyle := ControlStyle - [csClickEvents]; + FReadOnly := False; + + {$IFNDEF TMSDOTNET} + FBkgBmp := TBitmap.Create; + FBkgCache := false; + FTransparentCaching := false; + {$ENDIF} + FDrawBkg := true; +end; + +function TCustomAdvOfficeCheckBox.IsAnchor(x,y:integer):string; +var + r,hr: TRect; + XSize,YSize,HyperLinks,MouseLink: Integer; + s:string; + Anchor, Stripped, FocusAnchor:string; +begin + r := Clientrect; + s := Caption; + Anchor:=''; + + r.left := r.left + BW + 5; + r.top := r.top + 4; + + Result := ''; + + if HTMLDrawEx(Canvas,s,r,FImages,x,y,-1,-1,FShadowOffset,True,False,False,False,False,False,not FEllipsis,1.0,FURLColor, + clNone,clNone,FShadowColor,Anchor,Stripped,FocusAnchor,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0) then + Result := Anchor; +end; + +{$IFNDEF TMSDOTNET} + +procedure TCustomAdvOfficeCheckBox.DrawParentImage(Control: TControl; Dest: TCanvas); +var + SaveIndex: Integer; + DC: HDC; + Position: TPoint; +begin + with Control do + begin + if Parent = nil then + Exit; + + DC := Dest.Handle; + SaveIndex := SaveDC(DC); + GetViewportOrgEx(DC, Position); + SetViewportOrgEx(DC, Position.X - Left, Position.Y - Top, nil); + IntersectClipRect(DC, 0, 0, Parent.ClientWidth, Parent.ClientHeight); + + Parent.Perform(WM_ERASEBKGND, Integer(DC), Integer(0)); + Parent.Perform(WM_PAINT, Integer(DC), Integer(0)); + RestoreDC(DC, SaveIndex); + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); +begin + inherited; + FBkgCache := false; + Repaint; +end; +{$ENDIF} + +procedure TCustomAdvOfficeCheckBox.DrawCheck; +var + bmp: TBitmap; + BL,BT:Integer; +begin + BT := 4; + //ExtraBW := 4; + bmp := TBitmap.Create; + if state = cbChecked then + begin + if Down then + bmp.LoadFromResourceName(hinstance,'TMSOFCCD') + else + if FHot then + bmp.LoadFromResourceName(hinstance,'TMSOFCCH') + else + bmp.LoadFromResourceName(hinstance,'TMSOFCC'); + + end + else + begin + if Down then + bmp.LoadFromResourceName(hinstance,'TMSOFCUD') + else + if FHot then + bmp.LoadFromResourceName(hinstance,'TMSOFCUH') + else + bmp.LoadFromResourceName(hinstance,'TMSOFCU'); + end; + + bmp.Transparent := true; + bmp.TransparentMode := tmAuto; + + case FBtnVAlign of + tlTop: BT := 4; + tlCenter: BT := (ClientRect.Bottom - ClientRect.Top) div 2 - (bmp.Height div 2); + tlBottom: BT := ClientRect.Bottom - bmp.Height; + end; + + if (FAlignment = taRightJustify) or UseRightToLeftAlignment then + BL := ClientRect.Right - bmp.Width - 1 + else + BL := 0; + + Canvas.Draw(BL,BT,bmp); + bmp.free; +end; + +procedure TCustomAdvOfficeCheckBox.Paint; +var + R, hr: TRect; + a,s,fa,text: string; + xsize,ysize: Integer; + ExtraBW,HyperLinks,MouseLink: Integer; + +begin + Canvas.Font := Font; + + if FTransparentCaching then + begin + if FBkgCache then + begin + Canvas.Draw(0,0,FBkgBmp) + end + else + begin + FBkgBmp.Width := self.Width; + FBkgBmp.Height := self.Height; + DrawParentImage(Self, FBkgBmp.Canvas); + Canvas.Draw(0,0,FBkgBmp); + FBkgCache := true; + end; + end + else + begin + {$IFNDEF DELPHI_UNICODE} + if FDrawBkg or IsVista then + {$ENDIF} + DrawParentImage(Self, Canvas); + end; + + with Canvas do + begin + Text := Caption; + + DrawCheck; + + ExtraBW := 4; + + R := GetClientRect; + + if (FAlignment = taRightJustify) or UseRightToLeftAlignment then + begin + r.Left := 0; + r.Right := r.Right - BW - ExtraBW; + end + else + r.Left := r.Left + BW + ExtraBW; + + r.top := r.top + 4; + + + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,True,False,False,False,False,False,not FEllipsis,1.0,FURLColor, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + + if UseRightToLeftAlignment then + r.Left := r.Right - Xsize - 3; + + if not Enabled then + begin + OffsetRect(r,1,1); + Canvas.Font.Color := clWhite; + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,False,False,False,False,False,False,not FEllipsis,1.0,clWhite, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + + Canvas.Font.Color := clGray; + Offsetrect(r,-1,-1); + + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,False,False,False,False,False,False,not FEllipsis,1.0,clGray, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + end + else + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,False,False,False,False,False,False,not FEllipsis,1.0,FURLColor, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + + if FFocused then + begin + r.right := r.left + xsize + 3; + r.bottom := r.top + ysize ; + //WinProcs.DrawFocusRect(Canvas.Handle,R); + PaintFocusRect(Canvas,R,clBlack); + end; + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetDown(Value:Boolean); +begin + if FDown <> Value then + begin + FDown := Value; + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetState(Value:TCheckBoxState); +var + r: TRect; +begin + if FState <> Value then + begin + FState := Value; + + if HandleAllocated and HasParent then + begin + r := GetClientRect; + case Alignment of + taLeftJustify: r.Right := 20; + taRightJustify: r.Left := r.Right - 20; + end; + {$IFNDEF TMSDOTNET} + InvalidateRect(self.Handle,@r,True); + {$ENDIF} + {$IFDEF TMSDOTNET} + InvalidateRect(self.Handle,r,True); + {$ENDIF} + end; + end; +end; + +function TCustomAdvOfficeCheckBox.GetChecked: Boolean; +begin + Result := (State = cbChecked); +end; + +procedure TCustomAdvOfficeCheckBox.SetChecked(Value:Boolean); +begin + if Value then + State := cbChecked + else + State := cbUnchecked; + + Invalidate; +end; + +procedure TCustomAdvOfficeCheckBox.DoEnter; +{$IFNDEF DELPHI9_LVL} +var + R: TRect; +{$ENDIF} +begin + inherited DoEnter; + FFocused := True; + {$IFDEF DELPHI9_LVL} + Repaint; + {$ELSE} + R := ClientRect; + R.Right := 16; + InvalidateRect(self.Handle, @R, true); + {$ENDIF} +end; + + +procedure TCustomAdvOfficeCheckBox.DoExit; +var + db: boolean; +begin + inherited DoExit; + FFocused := False; + db := FDrawBkg; + FDrawBkg := true; + Repaint; + FDrawBkg := db; +end; + +procedure TCustomAdvOfficeCheckBox.MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); +var + Anchor:string; + R: TRect; +begin + Anchor := ''; + FGotClick := true; + + if FFocused then + begin + Anchor := IsAnchor(X,Y); + + if Anchor <> '' then + begin + if (Pos('://',Anchor) > 0) or (Pos('mailto:',anchor) > 0) then + {$IFNDEF TMSDOTNET} + Shellexecute(0,'open',pchar(anchor),nil,nil,SW_NORMAL) + {$ENDIF} + {$IFDEF TMSDOTNET} + Shellexecute(0,'open',anchor,'','',SW_NORMAL) + {$ENDIF} + else + begin + if Assigned(FAnchorClick) then + FAnchorClick(self,anchor); + end; + end; + end + else + begin + if (self.CanFocus and not (csDesigning in ComponentState)) then + begin + SetFocus; + FFocused := True; + end; + end; + + if (Anchor = '') then + begin + inherited MouseDown(Button, Shift, X, Y); + MouseCapture := True; + Down := True; + end; + + R := ClientRect; + R.Right := 16; + InvalidateRect(Self.Handle,@R, true); +end; + +procedure TCustomAdvOfficeCheckBox.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +var + R: TRect; +begin + MouseCapture := False; + + Down := False; + + if (X >= 0) and (X<=Width) and (Y>=0) and (Y<=Height) and FFocused and FGotClick then + begin + ClicksDisabled := True; + Toggle; + ClicksDisabled := False; + Click; + end; + + inherited MouseUp(Button, Shift, X, Y); + + R := ClientRect; + R.Right := 16; + InvalidateRect(Self.Handle,@R, true); + + FGotClick := false; +end; + +procedure TCustomAdvOfficeCheckBox.MouseMove(Shift: TShiftState;X, Y: Integer); +var + Anchor:string; +begin + + if MouseCapture then + Down := (X >= 0) and (X <= Width) and (Y >= 0) and (Y <= Height); + + if fFocused then + Anchor := IsAnchor(x,y) + else + Anchor := ''; + + if Anchor <> '' then + begin + if (self.Cursor = crDefault) or (FAnchor <> Anchor) then + begin + FAnchor := Anchor; + self.Cursor := crHandPoint; + if Assigned(FAnchorEnter) then + FAnchorEnter(self,Anchor); + end; + end + else + begin + if self.Cursor = crHandPoint then + begin + self.Cursor := FOldCursor; + if Assigned(FAnchorExit) then + FAnchorExit(self,Anchor); + end; + end; + + inherited MouseMove(Shift,X,Y); +end; + +procedure TCustomAdvOfficeCheckBox.KeyDown(var Key:Word;Shift:TShiftSTate); +begin + if (Key=vk_return) and (fReturnIsTab) then + begin + Key := vk_tab; + PostMessage(self.Handle,wm_keydown,VK_TAB,0); + end; + + if Key = vk_Space then + Down := True; + + inherited KeyDown(Key,Shift); +end; + +procedure TCustomAdvOfficeCheckBox.KeyUp(var Key:Word;Shift:TShiftSTate); +begin + if Key = vk_Space then + begin + Down := False; + Toggle; + Click; + end; +end; + + +procedure TCustomAdvOfficeCheckBox.SetImages(const Value: TImageList); +begin + FImages := Value; + Invalidate; +end; + +procedure TCustomAdvOfficeCheckBox.SetURLColor(const Value: TColor); +begin + if FURLColor <> Value then + begin + FURLColor := Value; + Invalidate; + end; +end; + +procedure TCustomAdvOfficeCheckBox.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + + if (AOperation = opRemove) and (AComponent = FImages) then + FImages:=nil; + + if (AOperation = opRemove) and (AComponent = FContainer) then + FContainer := nil; +end; + +procedure TCustomAdvOfficeCheckBox.CMEnabledChanged(var Message: TMessage); +begin + inherited; + Invalidate; +end; + +procedure TCustomAdvOfficeCheckBox.SetButtonVertAlign(const Value: TTextLayout); +begin + if Value <> FBtnVAlign then + begin + FBtnVAlign := Value; + Invalidate; + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetAlignment(const Value: TLeftRight); +begin + if FAlignment <> Value then + begin + FAlignment := Value; + Invalidate; + end; +end; + +destructor TCustomAdvOfficeCheckBox.Destroy; +begin + {$IFNDEF TMSDOTNET} + FBkgBmp.Free; + {$ENDIF} + FImageCache.Free; + inherited; +end; + +procedure TCustomAdvOfficeCheckBox.SetEllipsis(const Value: Boolean); +begin + if FEllipsis <> Value then + begin + FEllipsis := Value; + Invalidate + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetCaption(Value: string); +begin + {$IFNDEF TMSDOTNET} + SetWindowText(Handle,pchar(Value)); + {$ENDIF} + {$IFDEF TMSDOTNET} + SetWindowText(Handle,Value); + {$ENDIF} + FCaption := Value; + Invalidate; +end; + + +procedure TCustomAdvOfficeCheckBox.Toggle; +begin + if not FReadOnly then + Checked := not Checked; +end; + +procedure TCustomAdvOfficeCheckBox.WMEraseBkGnd(var Message: TMessage); +begin + {$IFDEF DELPHI_UNICODE} + inherited; + {$ENDIF} + {$IFNDEF DELPHI_UNICODE} + Message.Result := 1 + {$ENDIF} +end; + +procedure TCustomAdvOfficeCheckBox.CMDialogChar(var Message: TCMDialogChar); +begin + with Message do + begin + if IsAccel(CharCode, FCaption) and CanFocus then + begin + Toggle; + if Assigned(OnClick) then + OnClick(Self); + if TabStop then + if (self.CanFocus and not (csDesigning in ComponentState)) then + SetFocus; + Result := 1; + end + else + inherited; + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetContainer(const Value: TPictureContainer); +begin + FContainer := Value; + Invalidate; +end; + +procedure TCustomAdvOfficeCheckBox.SetShadowColor(const Value: TColor); +begin + if FShadowColor <> Value then + begin + FShadowColor := Value; + Invalidate; + end; +end; + +procedure TCustomAdvOfficeCheckBox.SetShadowOffset(const Value: Integer); +begin + if FShadowOffset <> Value then + begin + FShadowOffset := Value; + Invalidate; + end; +end; + +procedure TCustomAdvOfficeCheckBox.CMMouseEnter(var Message: TMessage); +begin + FHot := True; + DrawCheck; + inherited; +end; + +procedure TCustomAdvOfficeCheckBox.CMMouseLeave(var Message: TMessage); +begin + FHot := False; + DrawCheck; + inherited; +end; + +procedure TCustomAdvOfficeCheckBox.Loaded; +begin + inherited; + FOldCursor := Cursor; +end; + +function TCustomAdvOfficeCheckBox.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn)))+'.'+IntToStr(Lo(Hiword(vn)))+'.'+IntToStr(Hi(Loword(vn)))+'.'+IntToStr(Lo(Loword(vn))); +end; + +function TCustomAdvOfficeCheckBox.GetVersionNr: Integer; +begin + Result := MakeLong(MakeWord(BLD_VER,REL_VER),MakeWord(MIN_VER,MAJ_VER)); +end; + +procedure TCustomAdvOfficeCheckBox.SetVersion(const Value: string); +begin + +end; + +{ THTMLRadioButton } + +constructor TAdvOfficeRadioButton.Create(AOwner: TComponent); +var + VerInfo: TOSVersionInfo; + +begin + inherited Create(AOwner); + Width := 135; + Height := 20; + FURLColor := clBlue; + FBtnVAlign := tlTop; + FImageCache := THTMLPictureCache.Create; + FCaption := self.ClassName; + FShadowOffset := 1; + FShadowColor := clGray; + {$IFNDEF TMSDOTNET} + VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); + {$ENDIF} + {$IFDEF TMSDOTNET} + VerInfo.dwOSVersionInfoSize := Marshal.SizeOf(TypeOf(TOSVersionInfo)); + {$ENDIF} + GetVersionEx(verinfo); + + FIsWinXP := (verinfo.dwMajorVersion > 5) OR + ((verinfo.dwMajorVersion = 5) AND (verinfo.dwMinorVersion >= 1)); + + {$IFNDEF TMSDOTNET} + FBkgBmp := TBitmap.Create; + FBkgCache := false; + FTransparentCaching := false; + {$ENDIF} + FDrawBkg := true; +end; + +function TAdvOfficeRadioButton.IsAnchor(x,y:integer):string; +var + r,hr: TRect; + XSize,YSize,HyperLinks,MouseLink: Integer; + s: string; + Anchor,Stripped,FocusAnchor: string; +begin + r := Clientrect; + s := Caption; + Anchor := ''; + + r.left := r.left + BW + 5; + r.top := r.top + 4; + + Result := ''; + + if HTMLDrawEx(Canvas,s,r,FImages,x,y,-1,-1,FShadowOffset,True,False,False,False,False,False,not FEllipsis,1.0,FURLColor, + clNone,clNone,FShadowColor,Anchor,Stripped,FocusAnchor,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0) then + Result := Anchor; +end; + +procedure TAdvOfficeRadioButton.DrawParentImage(Control: TControl; Dest: TCanvas); +var + SaveIndex: Integer; + DC: HDC; + Position: TPoint; +begin + with Control do + begin + if Parent = nil then + Exit; + DC := Dest.Handle; + SaveIndex := SaveDC(DC); + GetViewportOrgEx(DC, Position); + SetViewportOrgEx(DC, Position.X - Left, Position.Y - Top, nil); + IntersectClipRect(DC, 0, 0, Parent.ClientWidth, Parent.ClientHeight); + Parent.Perform(WM_ERASEBKGND, Integer(DC), Integer(0)); + Parent.Perform(WM_PAINT, Integer(DC), Integer(0)); + RestoreDC(DC, SaveIndex); + end; +end; + + +procedure TAdvOfficeRadioButton.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); +begin + inherited; + begin + FBkgCache := false; + Repaint; + end; +end; + +procedure TAdvOfficeRadioButton.DrawRadio; +var + bmp: TBitmap; + BT, BL: integer; +begin + BT := 4; + bmp := TBitmap.Create; + if (Checked) then + begin + if Down then + bmp.LoadFromResourceName(hinstance,'TMSOFRCD') + else + if FHot then + bmp.LoadFromResourceName(hinstance,'TMSOFRCH') + else + bmp.LoadFromResourceName(hinstance,'TMSOFRC'); + + end + else + begin + if Down then + bmp.LoadFromResourceName(hinstance,'TMSOFRUD') + else + if FHot then + bmp.LoadFromResourceName(hinstance,'TMSOFRUH') + else + bmp.LoadFromResourceName(hinstance,'TMSOFRU'); + end; + + bmp.Transparent:=true; + bmp.TransparentMode :=tmAuto; + + case FBtnVAlign of + tlTop: BT := 4; + tlCenter: BT := (ClientRect.Bottom-ClientRect.Top) div 2 - (bmp.Height div 2); + tlBottom: BT := ClientRect.Bottom - bmp.Height - 2; + end; + + if (FAlignment = taRightJustify) or UseRightToLeftAlignment then + BL := ClientRect.Right - bmp.Width - 1 + else + BL := 0; + Canvas.Draw(BL,BT,bmp); + bmp.Free; +end; + +procedure TAdvOfficeRadioButton.Paint; +var + BR:Integer; + R,hr: TRect; + a,s,fa,text: string; + XSize,YSize,HyperLinks,MouseLink: Integer; + +begin + Canvas.Font := Font; + Text := Caption; + + if FTransparentCaching then + begin + if FBkgCache then + begin + Self.Canvas.Draw(0,0,FBkgBmp) + end + else + begin + FBkgBmp.Width := self.Width; + FBkgBmp.Height := self.Height; + //FBkgBmp.PixelFormat := pf32bit; + DrawParentImage(Self, FBkgBmp.Canvas); + Self.Canvas.Draw(0,0,FBkgBmp); + FBkgCache := true; + end; + end + else + begin + {$IFNDEF DELPHI_UNICODE} + if DrawBkg or IsVista then + {$ENDIF} + DrawParentImage(Self, self.Canvas); + end; + + with Canvas do + begin + BR := 13; + DrawRadio; + + r := GetClientRect; + if (FAlignment = taRightJustify) or UseRightToLeftAlignment then + begin + r.Left := 0; + r.Right := r.Right - BR - 5; + end + else + r.Left := r.Left + BR + 5; + + r.Top := r.Top + 4; + + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,True,False,False,False,False,False,not FEllipsis,1.0,clGray, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + + if UseRightToLeftAlignment then + r.Left := r.Right - Xsize - 3; + + if ButtonVertAlign in [tlCenter, tlBottom] then + begin + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,false,true,False,False,False,False,not FEllipsis,1.0,FURLColor, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + case ButtonVertAlign of + tlCenter: r.Top := r.Top - 3 + (r.Bottom - r.Top - YSize) div 2; + tlBottom: r.Top := r.Bottom - YSize - 3; + end; + end; + + if not Enabled then + begin + OffsetRect(R,1,1); + Canvas.Font.Color := clWhite; + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,False,False,False,False,False,False,not FEllipsis,1.0,clGray, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + Canvas.Font.Color := clGray; + Offsetrect(R,-1,-1); + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,False,False,False,False,False,False,not FEllipsis,1.0,clWhite, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + end + else + begin + Canvas.Font.Color := Font.Color; + HTMLDrawEx(Canvas,Text,R,FImages,0,0,-1,-1,FShadowOffset,False,False,False,False,False,False,not FEllipsis,1.0,FURLColor, + clNone,clNone,FShadowColor,a,s,fa,XSize,YSize,HyperLinks,MouseLink,hr,FImageCache,FContainer,0); + end; + + if FFocused then + begin + r.Right := r.Left + xsize + 3; + r.Bottom := r.Top + ysize {+ 1}; + PaintFocusRect(Canvas,R,clBlack); + end; + end; +end; + +procedure TAdvOfficeRadioButton.SetURLColor(const Value: TColor); +begin + FURLColor := Value; + Invalidate; +end; + + +procedure TAdvOfficeRadioButton.SetDown(Value:Boolean); +begin + if FDown<>Value then + begin + FDown := Value; + end; +end; + + +procedure TAdvOfficeRadioButton.TurnSiblingsOff; +var + i:Integer; + Sibling: TAdvOfficeRadioButton; + +begin + if (Parent <> nil) then + for i:=0 to Parent.ControlCount-1 do + if Parent.Controls[i] is TAdvOfficeRadioButton then + begin + Sibling := TAdvOfficeRadioButton(Parent.Controls[i]); + if (Sibling <> Self) and + (Sibling.GroupIndex = GroupIndex) then + Sibling.SetChecked(False); + end; +end; + +procedure TAdvOfficeRadioButton.SetChecked(Value: Boolean); +var + r: TRect; +begin + if FChecked <> Value then + begin + TabStop := Value; + FChecked := Value; + if Value then + begin + TurnSiblingsOff; + + if not FClicksDisabled then + DoClick; + end; + + if HandleAllocated and HasParent then + begin + R := ClientRect; + if BiDiMode = bdLeftToRight then + begin + R.Right := 16; + end + else + begin + R.Left := R.Right - 16; + end; + + InvalidateRect(self.Handle, @r, true); + end; + + // Invalidate; + end; +end; + + +procedure TAdvOfficeRadioButton.DoClick; +begin + if Assigned(OnClick) then + OnClick(Self); +end; + +procedure TAdvOfficeRadioButton.DoEnter; +{$IFNDEF DELPHI9_LVL} +var + R: TRect; +{$ENDIF} +begin + inherited DoEnter; + FFocused := True; + Checked := true; + {$IFDEF DELPHI9_LVL} + Repaint; + {$ELSE} + R := ClientRect; + R.Right := 16; + InvalidateRect(self.Handle, @R, true); + {$ENDIF} +end; + +procedure TAdvOfficeRadioButton.DoExit; +var + db: boolean; +begin + inherited DoExit; + FFocused := False; + db := FDrawBkg; + FDrawBkg := true; + Repaint; + FDrawBkg := db; +end; + +procedure TAdvOfficeRadioButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +var + Anchor:string; + R: TRect; +begin + Anchor := ''; + FGotClick := true; + + if FFocused then + begin + Anchor := IsAnchor(X,Y); + if Anchor <> '' then + begin + if (Pos('://',Anchor)>0) or (Pos('mailto:',Anchor)>0) then + {$IFNDEF TMSDOTNET} + ShellExecute(0,'open',PChar(Anchor),nil,nil,SW_NORMAL) + {$ENDIF} + {$IFDEF TMSDOTNET} + ShellExecute(0,'open',Anchor,'','',SW_NORMAL) + {$ENDIF} + else + begin + if Assigned(FAnchorClick) then + FAnchorClick(self,anchor); + end; + end; + end + else + begin + if (self.CanFocus and not (csDesigning in ComponentState)) then + begin + SetFocus; + FFocused := True; + end; + end; + + if Anchor = '' then + begin + inherited MouseDown(Button, Shift, X, Y); + MouseCapture := True; + Down := True; + end; + + R := ClientRect; + R.Right := 16; + InvalidateRect(self.Handle, @r, true); +end; + +procedure TAdvOfficeRadioButton.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +var + R: TRect; +begin + MouseCapture := False; + Down := False; + + if (X >= 0) and (X <= Width) and (Y >= 0) and (Y <= Height) and not Checked and FGotClick then + begin + Checked := true; + end; + + inherited MouseUp(Button, Shift, X, Y); + + DoClick; + + R := ClientRect; + R.Right := 16; + InvalidateRect(self.Handle, @r, true); + + FGotClick := false; +end; + +procedure TAdvOfficeRadioButton.MouseMove(Shift: TShiftState;X, Y: Integer); +var + Anchor:string; +begin + if MouseCapture then + Down := (X>=0) and (X<=Width) and (Y>=0) and (Y<=Height); + + if FFocused then + Anchor := IsAnchor(x,y) + else + Anchor := ''; + + if Anchor <> '' then + begin + if (self.Cursor = crDefault) or (fAnchor <> Anchor) then + begin + FAnchor := Anchor; + self.Cursor := crHandPoint; + if Assigned(FAnchorEnter) then + FAnchorEnter(self,anchor); + end; + end + else + begin + if self.Cursor = crHandPoint then + begin + self.Cursor := FOldCursor; + if Assigned(FAnchorExit) then + FAnchorExit(self,anchor); + end; + end; + + inherited MouseMove(Shift,X,Y); +end; + +procedure TAdvOfficeRadioButton.KeyDown(var Key:Word;Shift:TShiftSTate); +begin + if (Key = vk_return) and (FReturnIsTab) then + begin + Key := vk_tab; + PostMessage(self.Handle,wm_keydown,VK_TAB,0); + end; + + if Key = VK_SPACE then + Down := True; + + inherited KeyDown(Key,Shift); +end; + +procedure TAdvOfficeRadioButton.KeyUp(var Key:Word;Shift:TShiftSTate); +begin + if Key = VK_SPACE then + begin + Down := False; + if not Checked then Checked := True; + end; +end; + +procedure TAdvOfficeRadioButton.SetImages(const Value: TImageList); +begin + FImages := Value; + Invalidate; +end; + +procedure TAdvOfficeRadioButton.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + if (AOperation = opRemove) and (AComponent = FImages) then + FImages := nil; + + if (AOperation = opRemove) and (AComponent = FContainer) then + FContainer := nil; +end; + +procedure TAdvOfficeRadioButton.CMEnabledChanged(var Message: TMessage); +begin + inherited; + Invalidate; +end; + +procedure TAdvOfficeRadioButton.SetButtonVertAlign(const Value: TTextLayout); +begin + if Value <> FBtnVAlign then + begin + FBtnVAlign := Value; + Invalidate; + end; +end; + +procedure TAdvOfficeRadioButton.SetAlignment(const Value: TLeftRight); +begin + if FAlignment <> Value then + begin + FAlignment := Value; + Invalidate; + end; +end; + +destructor TAdvOfficeRadioButton.Destroy; +begin + {$IFNDEF TMSDOTNET} + FBkgBmp.Free; + {$ENDIF} + FImageCache.Free; + inherited; +end; + +procedure TAdvOfficeRadioButton.SetEllipsis(const Value: Boolean); +begin + if FEllipsis <> Value then + begin + FEllipsis := Value; + Invalidate; + end; +end; + +procedure TAdvOfficeRadioButton.SetCaption(const Value: string); +begin + inherited Caption := Value; + FCaption := Value; + Invalidate; +end; + +procedure TAdvOfficeRadioButton.Click; +begin +// inherited; +end; + +procedure TAdvOfficeRadioButton.CMDialogChar(var Message: TCMDialogChar); +begin + with Message do + if IsAccel(CharCode, FCaption) and CanFocus then + begin + Checked := True; + if TabStop then + if (self.CanFocus and not (csDesigning in ComponentState)) then + SetFocus; + Result := 1; + end else + inherited; + +end; + +procedure TAdvOfficeRadioButton.SetContainer(const Value: TPictureContainer); +begin + FContainer := Value; + Invalidate; +end; + +procedure TAdvOfficeRadioButton.SetShadowColor(const Value: TColor); +begin + if FShadowColor <> Value then + begin + FShadowColor := Value; + Invalidate; + end; +end; + +procedure TAdvOfficeRadioButton.SetShadowOffset(const Value: Integer); +begin + if FShadowOffset <> Value then + begin + FShadowOffset := Value; + Invalidate; + end; +end; + +procedure TAdvOfficeRadioButton.CMMouseEnter(var Message: TMessage); +begin + FHot := True; + DrawRadio; + inherited; +end; + +procedure TAdvOfficeRadioButton.CMMouseLeave(var Message: TMessage); +begin + FHot := False; + DrawRadio; + inherited; +end; + + +procedure TAdvOfficeRadioButton.WMEraseBkGnd(var Message: TMessage); +begin + {$IFDEF DELPHI_UNICODE} + inherited; + {$ENDIF} + {$IFNDEF DELPHI_UNICODE} + Message.Result := 1 + {$ENDIF} +end; + +procedure TAdvOfficeRadioButton.WMLButtonDown(var Message:TWMLButtonDown); +begin + FClicksDisabled := True; + if (self.CanFocus and not (csDesigning in ComponentState)) then + SetFocus; + FClicksDisabled := False; + inherited; +end; + +procedure TAdvOfficeRadioButton.Loaded; +begin + inherited; + FOldCursor := Cursor; +end; + +function TAdvOfficeRadioButton.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn)))+'.'+IntToStr(Lo(Hiword(vn)))+'.'+IntToStr(Hi(Loword(vn)))+'.'+IntToStr(Lo(Loword(vn))); +end; + +function TAdvOfficeRadioButton.GetVersionNr: Integer; +begin + Result := MakeLong(MakeWord(BLD_VER,REL_VER),MakeWord(MIN_VER,MAJ_VER)); +end; + +procedure TAdvOfficeRadioButton.SetVersion(const Value: string); +begin + +end; + + +{ TAdvGroupButton } + +type + TAdvGroupButton = class(TAdvOfficeRadioButton) + private + FInClick: Boolean; + procedure CNCommand(var Message: TWMCommand); message CN_COMMAND; + protected + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + public + constructor InternalCreate(RadioGroup: TCustomAdvOfficeRadioGroup); + destructor Destroy; override; + end; + +constructor TAdvGroupButton.InternalCreate(RadioGroup: TCustomAdvOfficeRadioGroup); +begin + inherited Create(RadioGroup); + RadioGroup.FButtons.Add(Self); + Visible := False; + Enabled := RadioGroup.Enabled; + ParentShowHint := False; + OnClick := RadioGroup.ButtonClick; + Parent := RadioGroup; +end; + +destructor TAdvGroupButton.Destroy; +begin + TCustomAdvOfficeRadioGroup(Owner).FButtons.Remove(Self); + inherited Destroy; +end; + +procedure TAdvGroupButton.CNCommand(var Message: TWMCommand); +begin + if not FInClick then + begin + FInClick := True; + try + if ((Message.NotifyCode = BN_CLICKED) or + (Message.NotifyCode = BN_DOUBLECLICKED)) and + TCustomAdvOfficeRadioGroup(Parent).CanModify then + inherited; + except + Application.HandleException(Self); + end; + + FInClick := False; + end; +end; + +procedure TAdvGroupButton.KeyPress(var Key: Char); +begin + inherited KeyPress(Key); + TCustomAdvOfficeRadioGroup(Parent).PushKey(Key); + if (Key = #8) or (Key = ' ') then + begin + if not TCustomAdvOfficeRadioGroup(Parent).CanModify then Key := #0; + end; +end; + +procedure TAdvGroupButton.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + TCustomAdvOfficeRadioGroup(Parent).PushKeyDown(Key, Shift); +end; + +{ TCustomAdvOfficeRadioGroup } + +constructor TCustomAdvOfficeRadioGroup.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := [csSetCaption, csDoubleClicks]; + FButtons := TList.Create; + FItems := TStringList.Create; + TStringList(FItems).OnChange := ItemsChange; + FItemIndex := -1; + FColumns := 1; + FAlignment := taLeftJustify; + FBtnVAlign := tlTop; + ShadowOffset := 1; + ShadowColor := clSilver; + FIsReadOnly := false; +end; + +destructor TCustomAdvOfficeRadioGroup.Destroy; +begin + SetButtonCount(0); + TStringList(FItems).OnChange := nil; + FItems.Free; + FButtons.Free; + inherited Destroy; +end; + +procedure TCustomAdvOfficeRadioGroup.PushKey(var Key: Char); +begin + KeyPress(Key); +end; + +procedure TCustomAdvOfficeRadioGroup.PushKeyDown(var Key: Word; Shift: TShiftState); +begin + KeyDown(Key,Shift); +end; + +procedure TCustomAdvOfficeRadioGroup.FlipChildren(AllLevels: Boolean); +begin + { The radio buttons are flipped using BiDiMode } +end; + + +procedure TCustomAdvOfficeRadioGroup.ArrangeButtons; +var + ButtonsPerCol, ButtonWidth, ButtonHeight, TopMargin, I: Integer; + DC: HDC; + SaveFont: HFont; + Metrics: TTextMetric; + DeferHandle: THandle; + ALeft: Integer; + RadioEnable: Boolean; + +begin + + if (csLoading in ComponentState) then + Exit; + + if not HandleAllocated then + Exit; + + + if (FButtons.Count <> 0) and not FReading then + begin + DC := GetDC(0); + SaveFont := SelectObject(DC, Font.Handle); + GetTextMetrics(DC, Metrics); + SelectObject(DC, SaveFont); + ReleaseDC(0, DC); + ButtonsPerCol := (FButtons.Count + FColumns - 1) div FColumns; + ButtonWidth := (Width - 10) div FColumns; + I := Height - Metrics.tmHeight - 5; + ButtonHeight := I div ButtonsPerCol; + TopMargin := Metrics.tmHeight + 1 + (I mod ButtonsPerCol) div 2; + + if Length(Caption) <= 0 then + TopMargin := TopMargin - Metrics.tmHeight div 2; + + DeferHandle := BeginDeferWindowPos(FButtons.Count); + try + for I := 0 to FButtons.Count - 1 do + with TAdvGroupButton(FButtons[I]) do + begin + {$IFDEF DELPHI4_LVL} + BiDiMode := Self.BiDiMode; + {$ENDIF} + + DrawBkg := false; + Alignment := Self.Alignment; + ButtonVertAlign := Self.ButtonVertAlign; + Images := Self.Images; + PictureContainer := Self.PictureContainer; + Ellipsis := Self.Ellipsis; + ShadowOffset := Self.ShadowOffset; + ShadowColor := Self.ShadowColor; + + RadioEnable := Self.Enabled and Enabled and not FIsReadOnly; + if Assigned(FOnIsEnabled) then + FOnIsEnabled(Self,I,RadioEnable); + + Enabled := RadioEnable; + + ALeft := (I div ButtonsPerCol) * ButtonWidth + 8; + {$IFDEF DELPHI4_LVL} + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - ButtonWidth; + {$ENDIF} + + DeferHandle := DeferWindowPos(DeferHandle, Handle, 0, + ALeft, + (I mod ButtonsPerCol) * ButtonHeight + TopMargin, + ButtonWidth, ButtonHeight, + SWP_NOZORDER or SWP_NOACTIVATE); + + // Left := ALeft; + // Top := (I mod ButtonsPerCol) * ButtonHeight + TopMargin; + Visible := True; + + end; + finally + EndDeferWindowPos(DeferHandle); + end; + end; +end; + +procedure TCustomAdvOfficeRadioGroup.ButtonClick(Sender: TObject); +begin + if not FUpdating then + begin + FItemIndex := FButtons.IndexOf(Sender); + Changed; + Click; + end; +end; + +procedure TCustomAdvOfficeRadioGroup.ItemsChange(Sender: TObject); +begin + if not FReading then + begin + if FItemIndex >= FItems.Count then + FItemIndex := FItems.Count - 1; + UpdateButtons; + end; +end; + +procedure TCustomAdvOfficeRadioGroup.Loaded; +begin + inherited Loaded; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.ReadState(Reader: TReader); +begin + FReading := True; + inherited ReadState(Reader); + FReading := False; + UpdateButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.SetButtonCount(Value: Integer); +begin + while FButtons.Count < Value do TAdvGroupButton.InternalCreate(Self); + while FButtons.Count > Value do TAdvGroupButton(FButtons.Last).Free; +end; + +procedure TCustomAdvOfficeRadioGroup.SetColumns(Value: Integer); +begin + if Value < 1 then Value := 1; + if Value > 16 then Value := 16; + if FColumns <> Value then + begin + FColumns := Value; + ArrangeButtons; + Invalidate; + end; +end; + +procedure TCustomAdvOfficeRadioGroup.SetItemIndex(Value: Integer); +begin + if FReading then FItemIndex := Value else + begin + if Value < -1 then Value := -1; + if Value >= FButtons.Count then Value := FButtons.Count - 1; + if FItemIndex <> Value then + begin + if FItemIndex >= 0 then + TAdvGroupButton(FButtons[FItemIndex]).Checked := False; + FItemIndex := Value; + if FItemIndex >= 0 then + TAdvGroupButton(FButtons[FItemIndex]).Checked := True; + end; + end; +end; + +procedure TCustomAdvOfficeRadioGroup.SetItems(Value: TStrings); +begin + FItems.Assign(Value); +end; + +procedure TCustomAdvOfficeRadioGroup.UpdateButtons; +var + I: Integer; +begin + SetButtonCount(FItems.Count); + for I := 0 to FButtons.Count - 1 do + TAdvGroupButton(FButtons[I]).Caption := FItems[I]; + if FItemIndex >= 0 then + begin + FUpdating := True; + TAdvGroupButton(FButtons[FItemIndex]).Checked := True; + FUpdating := False; + end; + ArrangeButtons; + Invalidate; +end; + +procedure TCustomAdvOfficeRadioGroup.CMEnabledChanged(var Message: TMessage); +var + I: Integer; +begin + inherited; + for I := 0 to FButtons.Count - 1 do + TAdvGroupButton(FButtons[I]).Enabled := Enabled; +end; + +procedure TCustomAdvOfficeRadioGroup.CMFontChanged(var Message: TMessage); +begin + inherited; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.WMSize(var Message: TWMSize); +begin + inherited; + ArrangeButtons; +end; + +function TCustomAdvOfficeRadioGroup.CanModify: Boolean; +begin + Result := True; +end; + +procedure TCustomAdvOfficeRadioGroup.GetChildren(Proc: TGetChildProc; Root: TComponent); +begin +end; + +procedure TCustomAdvOfficeRadioGroup.SetAlignment(const Value: TAlignment); +begin + FAlignment := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.SetButtonVertAlign( + const Value: TTextLayout); +begin + fBtnVAlign := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.SetContainer( + const Value: TPictureContainer); +begin + FContainer := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.SetImages(const Value: TImageList); +begin + inherited Images := Value; + FImages := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + + if (AOperation = opRemove) and (AComponent = FImages) then + FImages:=nil; + + if (AOperation = opRemove) and (AComponent = FContainer) then + FContainer := nil; +end; + +procedure TCustomAdvOfficeRadioGroup.SetEllipsis(const Value: Boolean); +begin + FEllipsis := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.SetShadowColor(const Value: TColor); +begin + FShadowColor := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeRadioGroup.SetShadowOffset(const Value: Integer); +begin + FShadowOffset := Value; + ArrangeButtons; +end; + +function TCustomAdvOfficeRadioGroup.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn)))+'.'+IntToStr(Lo(Hiword(vn)))+'.'+IntToStr(Hi(Loword(vn)))+'.'+IntToStr(Lo(Loword(vn))); +end; + +function TCustomAdvOfficeRadioGroup.GetVersionNr: Integer; +begin + Result := MakeLong(MakeWord(BLD_VER,REL_VER),MakeWord(MIN_VER,MAJ_VER)); +end; + +procedure TCustomAdvOfficeRadioGroup.SetVersion(const Value: string); +begin + +end; + + +{ TGroupCheck } + +type + TGroupCheck = class(TAdvOfficeCheckBox) + private + FInClick: Boolean; + procedure CNCommand(var Message: TWMCommand); message CN_COMMAND; + protected + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; + public + constructor InternalCreate(CheckGroup: TCustomAdvOfficeCheckGroup); + destructor Destroy; override; + end; + +constructor TGroupCheck.InternalCreate(CheckGroup: TCustomAdvOfficeCheckGroup); +begin + inherited Create(CheckGroup); + CheckGroup.FButtons.Add(Self); + Visible := False; + Enabled := CheckGroup.Enabled; + ParentShowHint := False; + OnClick := CheckGroup.ButtonClick; + OnEnter := CheckGroup.CheckFocus; + Parent := CheckGroup; +end; + +destructor TGroupCheck.Destroy; +begin + TCustomAdvOfficeCheckGroup(Owner).FButtons.Remove(Self); + inherited Destroy; +end; + +procedure TGroupCheck.CNCommand(var Message: TWMCommand); +begin + if not FInClick then + begin + FInClick := True; + try + if ((Message.NotifyCode = BN_CLICKED) or + (Message.NotifyCode = BN_DOUBLECLICKED)) and + TCustomAdvOfficeCheckGroup(Parent).CanModify then + inherited; + except + Application.HandleException(Self); + end; + FInClick := False; + end; +end; + +procedure TGroupCheck.KeyPress(var Key: Char); +begin + inherited KeyPress(Key); + TCustomAdvOfficeCheckGroup(Parent).PushKey(Key); + if (Key = #8) or (Key = ' ') then + begin + if not TCustomAdvOfficeCheckGroup(Parent).CanModify then Key := #0; + end; +end; + +procedure TGroupCheck.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited KeyDown(Key, Shift); + TCustomAdvOfficeCheckGroup(Parent).PushKeyDown(Key, Shift); +end; + + +{ TCustomAdvOfficeCheckGroup } + +constructor TCustomAdvOfficeCheckGroup.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := [csSetCaption, csDoubleClicks]; + FButtons := TList.Create; + FItems := TStringList.Create; + TStringList(FItems).OnChange := ItemsChange; + FColumns := 1; + FAlignment := taLeftJustify; + FBtnVAlign := tlTop; + ShadowOffset := 1; + ShadowColor := clSilver; + FValue := 0; +end; + +destructor TCustomAdvOfficeCheckGroup.Destroy; +begin + SetButtonCount(0); + TStringList(FItems).OnChange := nil; + FItems.Free; + FButtons.Free; + inherited Destroy; +end; + +procedure TCustomAdvOfficeCheckGroup.PushKey(var Key: Char); +begin + KeyPress(Key); +end; + +procedure TCustomAdvOfficeCheckGroup.PushKeyDown(var Key: Word; Shift: TShiftState); +begin + KeyDown(Key,Shift); +end; + +{$IFDEF DELPHI4_LVL} +procedure TCustomAdvOfficeCheckGroup.FlipChildren(AllLevels: Boolean); +begin + { The radio buttons are flipped using BiDiMode } +end; +{$ENDIF} + +procedure TCustomAdvOfficeCheckGroup.ArrangeButtons; +var + ButtonsPerCol, ButtonWidth, ButtonHeight, TopMargin, I: Integer; + DC: HDC; + SaveFont: HFont; + Metrics: TTextMetric; + DeferHandle: THandle; + ALeft: Integer; + RadioEnable: Boolean; + +begin + if (FButtons.Count <> 0) and not FReading then + begin + DC := GetDC(0); + SaveFont := SelectObject(DC, Font.Handle); + GetTextMetrics(DC, Metrics); + SelectObject(DC, SaveFont); + ReleaseDC(0, DC); + ButtonsPerCol := (FButtons.Count + FColumns - 1) div FColumns; + ButtonWidth := (Width - 10) div FColumns; + I := Height - Metrics.tmHeight - 5; + ButtonHeight := I div ButtonsPerCol; + TopMargin := Metrics.tmHeight + 1 + (I mod ButtonsPerCol) div 2; + + if Length(Caption) <= 0 then + TopMargin := TopMargin - Metrics.tmHeight div 2; + + DeferHandle := BeginDeferWindowPos(FButtons.Count); + try + for I := 0 to FButtons.Count - 1 do + with TGroupCheck(FButtons[I]) do + begin + {$IFDEF DELPHI4_LVL} + BiDiMode := Self.BiDiMode; + {$ENDIF} + + DrawBkg := false; + Alignment := Self.Alignment; + ButtonVertAlign := Self.ButtonVertAlign; + Images := Self.Images; + PictureContainer := Self.PictureContainer; + Ellipsis := Self.Ellipsis; + ShadowOffset := Self.ShadowOffset; + ShadowColor := Self.ShadowColor; + + RadioEnable := self.Enabled; + if Assigned(FOnIsEnabled) then + FOnIsEnabled(Self,I,RadioEnable); + + Enabled := RadioEnable; + + ALeft := (I div ButtonsPerCol) * ButtonWidth + 8; + {$IFDEF DELPHI4_LVL} + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - ButtonWidth; + {$ENDIF} + DeferHandle := DeferWindowPos(DeferHandle, Handle, 0, + ALeft, + (I mod ButtonsPerCol) * ButtonHeight + TopMargin, + ButtonWidth, ButtonHeight, + SWP_NOZORDER or SWP_NOACTIVATE); + Visible := True; + + end; + finally + EndDeferWindowPos(DeferHandle); + end; + end; +end; + +procedure TCustomAdvOfficeCheckGroup.CheckFocus(Sender: TObject); +var + i: integer; +begin + for i := 0 to FButtons.Count - 1 do + begin + if TGroupCheck(FButtons[i]).Focused then + FFocusButtonIdx := i; + end; +end; + + +procedure TCustomAdvOfficeCheckGroup.ButtonClick(Sender: TObject); +begin + if not FUpdating then + begin + Changed; + Click; + end; + UpdateValue; +end; + +procedure TCustomAdvOfficeCheckGroup.ItemsChange(Sender: TObject); +begin + if not FReading then + begin + UpdateButtons; + end; +end; + +procedure TCustomAdvOfficeCheckGroup.DoExit; +begin + inherited; +end; + +procedure TCustomAdvOfficeCheckGroup.DoEnter; +begin + inherited; + + if FButtons.Count > FFocusButtonIdx then + begin + if TGroupCheck(FButtons[FFocusButtonIdx]).HandleAllocated then + begin + TGroupCheck(FButtons[FFocusButtonIdx]).SetFocus; + Invalidate; + end; + end; +end; + + +procedure TCustomAdvOfficeCheckGroup.Loaded; +begin + inherited Loaded; + ArrangeButtons; + Value := Value; +end; + +procedure TCustomAdvOfficeCheckGroup.ReadState(Reader: TReader); +begin + FReading := True; + inherited ReadState(Reader); + FReading := False; + UpdateButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.SetButtonCount(Value: Integer); +begin + while FButtons.Count < Value do + TGroupCheck.InternalCreate(Self); + while FButtons.Count > Value do + TGroupCheck(FButtons.Last).Free; +end; + +procedure TCustomAdvOfficeCheckGroup.SetColumns(Value: Integer); +begin + if Value < 1 then Value := 1; + if Value > 16 then Value := 16; + if FColumns <> Value then + begin + FColumns := Value; + ArrangeButtons; + Invalidate; + end; +end; + +procedure TCustomAdvOfficeCheckGroup.SetItems(Value: TStrings); +begin + FItems.Assign(Value); +end; + +procedure TCustomAdvOfficeCheckGroup.UpdateButtons; +var + I: Integer; +begin + SetButtonCount(FItems.Count); + for I := 0 to FButtons.Count - 1 do + TGroupCheck(FButtons[I]).Caption := FItems[I]; + + ArrangeButtons; + Invalidate; +end; + +procedure TCustomAdvOfficeCheckGroup.CMEnabledChanged(var Message: TMessage); +var + I: Integer; +begin + inherited; + for I := 0 to FButtons.Count - 1 do + TGroupCheck(FButtons[I]).Enabled := Enabled; +end; + +procedure TCustomAdvOfficeCheckGroup.CMFontChanged(var Message: TMessage); +begin + inherited; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.WMSize(var Message: TWMSize); +begin + inherited; + ArrangeButtons; +end; + +function TCustomAdvOfficeCheckGroup.CanModify: Boolean; +begin + Result := True; +end; + +procedure TCustomAdvOfficeCheckGroup.GetChildren(Proc: TGetChildProc; Root: TComponent); +begin +end; + +procedure TCustomAdvOfficeCheckGroup.SetAlignment(const Value: TAlignment); +begin + FAlignment := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.SetButtonVertAlign( + const Value: TTextLayout); +begin + fBtnVAlign := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.SetContainer( + const Value: TPictureContainer); +begin + FContainer := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.SetImages(const Value: TImageList); +begin + inherited Images := Value; + FImages := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + + if (AOperation = opRemove) and (AComponent = FImages) then + FImages:=nil; + + if (AOperation = opRemove) and (AComponent = FContainer) then + FContainer := nil; +end; + +procedure TCustomAdvOfficeCheckGroup.SetEllipsis(const Value: Boolean); +begin + FEllipsis := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.SetShadowColor(const Value: TColor); +begin + FShadowColor := Value; + ArrangeButtons; +end; + +procedure TCustomAdvOfficeCheckGroup.SetShadowOffset(const Value: Integer); +begin + FShadowOffset := Value; + ArrangeButtons; +end; + + +function TCustomAdvOfficeCheckGroup.GetChecked(Index: Integer): Boolean; +begin + if (Index < FButtons.Count) and (Index >= 0) then + Result := TGroupCheck(FButtons[Index]).Checked + else + raise Exception.Create('Invalid checkbox index'); +end; + +procedure TCustomAdvOfficeCheckGroup.SetChecked(Index: Integer; + const Value: Boolean); +begin + if (Index < FButtons.Count) and (Index >= 0) then + TGroupCheck(FButtons[Index]).Checked := Value; +end; + +function TCustomAdvOfficeCheckGroup.GetReadOnly(Index: Integer): Boolean; +begin + if (Index < FButtons.Count) and (Index >= 0) then + Result := not TGroupCheck(FButtons[Index]).Enabled + else + raise Exception.Create('Invalid checkbox index'); +end; + +procedure TCustomAdvOfficeCheckGroup.SetReadOnly(Index: Integer; + const Value: Boolean); +begin + if (Index < FButtons.Count) and (Index >= 0) then + TGroupCheck(FButtons[Index]).Enabled := not Value; +end; + +procedure TCustomAdvOfficeCheckGroup.UpdateValue; +var + i, j: Integer; + BitMask: DWord; +begin + FValue := Value; + j := Min(FButtons.Count, sizeof(DWord) * 8); + BitMask := 1; + FValue := 0; + for i := 0 to j - 1 do + begin + if TGroupCheck(FButtons[i]).Checked then + begin + FValue := FValue or BitMask; + end; + BitMask := BitMask * 2; + end; +end; + +function TCustomAdvOfficeCheckGroup.GetValue: DWord; +begin + Result := FValue; +end; + +procedure TCustomAdvOfficeCheckGroup.SetValue(const Value: DWord); +var + i, j: Integer; + BitMask: Integer; +begin + //if (FValue <> Value) then + begin + FValue := Value; + j := Min(FButtons.Count, sizeof(DWord) * 8); + BitMask := 1; + for i := 0 to j - 1 do + begin + TGroupCheck(FButtons[i]).Checked := ((FValue And BitMask) > 0); + BitMask := BitMask * 2; + end; + end; +end; + +function TCustomAdvOfficeCheckGroup.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn)))+'.'+IntToStr(Lo(Hiword(vn)))+'.'+IntToStr(Hi(Loword(vn)))+'.'+IntToStr(Lo(Loword(vn))); +end; + +function TCustomAdvOfficeCheckGroup.GetVersionNr: Integer; +begin + Result := MakeLong(MakeWord(BLD_VER,REL_VER),MakeWord(MIN_VER,MAJ_VER)); +end; + +procedure TCustomAdvOfficeCheckGroup.SetVersion(const Value: string); +begin + +end; + +{$IFDEF FREEWARE} +{$I TRIAL.INC} +{$ENDIF} + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.res b/TAdvTaskDialog/internal/1.5.1.2/1/Source/AdvOfficeButtons.res new file mode 100644 index 0000000000000000000000000000000000000000..8f0cdb99a288f7700046cd885002388a4e1d306a GIT binary patch literal 6784 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 + + {79C894D4-A16D-4924-81DC-BB8F72238C44} + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.pas new file mode 100644 index 0000000..e290e09 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.pas @@ -0,0 +1,4798 @@ +{***************************************************************************} +{ TTaskDialog component } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2008 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit TaskDialog; + +{$R TASKDIALOG.RES} + +{$I TMSDEFS.INC} + +interface + +uses + Classes, Windows, Messages, Forms, Dialogs, SysUtils, StdCtrls, Graphics, Consts, Math, + ExtCtrls, Controls, ComCtrls, PictureContainer, ComObj, ShellAPI, CommCtrl, ClipBrd; + +const +{$IFNDEF DELPHI6_LVL} + sLineBreak = #13#10; +{$ENDIF} + + MAJ_VER = 1; // Major version nr. + MIN_VER = 5; // Minor version nr. + REL_VER = 1; // Release nr. + BLD_VER = 2; // Build nr. + + // version history + // 1.0.0.0 : First release + // 1.0.1.0 : Added support for Information icon + // : Fixed issue with radiobutton initialization + // 1.0.2.0 : Various cosmetic fixes for emulated dialog + // : Design time preview + // 1.0.3.0 : Improved wordwrapped content display + // 1.0.4.0 : Added support to display shield icon on non Vista operating systems + // 1.0.5.0 : Fixed issue with tiError icon for non Vista operating systems + // 1.0.5.1 : Fixed issue with tiBlank icon for non Vista operating systems + // 1.0.5.2 : Removed Close button from dialog caption for non Vista operating systems + // 1.0.5.3 : Fixed issue with blank FooterIcon + // : Fixed issue with content height + // 1.0.5.4 : Improved : content sizing for non Vista operating systems dialogs + // 1.0.5.5 : Fixed issue with progress bar for non Vista operating systems dialogs + // 1.0.5.6 : Fixed issue with Expanded Text size calculation for non Vista operating systems dialogs + // 1.0.5.7 : Fixed issue with default button for non Vista operating systems dialogs + // 1.0.5.8 : Fixed issue with Expanded Text size calculation for non Vista operating systems dialogs + // : Fixed issue with FooterIcon drawing + // 1.0.6.0 : New : property DialogPosition added , only applicable for non Vista OS + // : Fixed : issue with ESC key handling + // 1.1.0.0 : Improved : Reflect properties change at run time + // : Fixed issues with Footer and its FooterIcon size + // : Added ShortCut support in CommandLinks + // 1.2.0.0 : New : support added for Hyperlinks in expanded text + // : New : option to show no default radiobutton added + // : New : capability to update instruction, content, expanded text, footer while dialog is displayed + // : New : option to allow cancelling the dialog with ESC added + // : Improved : text wrapping for verify text + // : New : TAdvTaskDialogEx component created using TAdvGlowButton on non Vista emulation + // : New : property ApplicationIsParent added + // : New : support for custom icons + // 1.2.1.0 : New : support for Information & Shield footer icon + // : Improved : border drawing on Vista in XP compatibility mode + // : New : added support for \n linebreaks in Vista emulation mode + // 1.2.1.1 : Fixed : issue with DefaultRadioButton initialization + // 1.2.1.2 : Fixed : issue with \n linebreaks with doHyperlinks style + // 1.2.2.0 : Improved : keyboard handling for CommandLinks dialog on non Vista emulation + // : Improved : DefaultButton handling for CommandLinks dialog on non Vista emulation + // 1.2.2.1 : Fixed : issue with noCommandLinksIcon on non Vista emulation + // 1.2.2.2 : Fixed : hot painting issue on taskdialog button on non Vista emulation + // 1.2.3.0 : Improved : allow using \n line separators in footer text on non Vista emulation + // : Fixed : issue with doAllowDialogCancel on non Vista emulation + // : Fixed : issue with doAllowMinimize on non Vista emulation + // 1.2.4.0 : Improved : removed limitation on text length of Content, Title, ... in Vista native mode + // : Improved : handling of linefeed character on non Vista emulation + // : Improved : handling of anchors in Vista native mode + // : Improved : handling of ESC with common buttons + // 1.2.4.1 : Improved : prevent that Alt-F4 can close the dialog + // 1.2.5.0 : New : support for hotkeys on expand/contract text on non-Vista emulation + // 1.2.5.1 : Fixed : issue with identical accelerator key for expand/collaps + // 1.2.6.0 : Improved : taskdialog does not size beyond screen width + // : Improved : DefaultButton can be set to -1 to have no default button + // 1.2.7.0 : New: NonNativeDialog property added + // : New: NonNativeMinFormWidth public property added + // 1.2.8.0 : Improved : display of disabled task button + // 1.2.8.1 : Fixed : display of long text in non native taskdialog + // 1.2.8.2 : Fixed : issue with DefaultButton = IdYes, IdNo + // 1.5.0.0 : New : replacement functions for ShowMessage , MessageDlg + // : New : TAdvInputTaskDialog + // : New : ElevateButton method added + // : Improved : message label set transparent + // : Improved : Ctrl-C puts taskdialog text on clipboard + // 1.5.0.1 : Fixed : Delphi 5 issue with TAdvInputTaskDialog + // 1.5.0.2 : Fixed : issue with use of TAdvTaskDialog on topmost forms + // 1.5.0.3 : Improved : automatic height adaption of custom input control + // 1.5.0.4 : Fixed : issue with removing InputControl at designtime + // 1.5.0.5 : Improved : width control of custom editor in TAdvInputTaskDialog + // 1.5.0.6 : Improved : AdvShowMessageBox() handling of ESC key for cancel button + // 1.5.0.7 : Improved : handling of \n linefeed sequence + // 1.5.0.8 : Improved : use of dialog constants in AdvMessageDlg procs + // 1.5.0.9 : Improved : use of question icon in mtConfirmation dialog type + // 1.5.1.0 : Improved : support for F1 help handling + // : Improved : support for HelpContext in message dialog replacements + // : New : various new AdvMessageDlg() function overloads to set Title & Caption separately + // 1.5.1.1 : Fixed : issue with use of dialog on modal StayOnTop forms + // 1.5.1.2 : Improved : handling of button disabling for non native dialog + +type + {$IFNDEF DELPHI6_LVL} + PBoolean = ^Boolean; + {$ENDIF} + + TTaskDialogResult = (trNone, trOk, trCancel); + + TNonNativeDialog = (nndAuto, nndAlways); + + TTaskDialogOption = (doHyperlinks, doCommandLinks, doCommandLinksNoIcon, doExpandedDefault, + doExpandedFooter, doAllowMinimize, doVerifyChecked, doProgressBar, doProgressBarMarquee, + doTimer, doNoDefaultRadioButton, doAllowDialogCancel); + + TTaskDialogOptions = set of TTaskDialogOption; + + TTaskDialogIcon = (tiBlank, tiWarning, tiQuestion, tiError, tiInformation,tiNotUsed,tiShield); + //(mtWarning, mtError, mtInformation, mtConfirmation, mtCustom); + TTaskDialogFooterIcon = (tfiBlank, tfiWarning, tfiQuestion, tfiError, tfiInformation, + tfiShield); + + TTaskDialogProgressState = (psNormal, psError, psPaused); + + TTaskDialogPosition = (dpScreenCenter, dpOwnerFormCenter); + + TCommonButton = (cbOK, cbYes, cbNo, cbCancel, cbRetry, cbClose); + + TTaskDialogButtonClickEvent = procedure(Sender: TObject; ButtonID: integer) of object; + TTaskDialogHyperlinkClickEvent = procedure(Sender: TObject; HRef: string) of object; + TTaskDialogVerifyClickEvent = procedure(Sender: TObject; Checked: boolean) of object; + TTaskDialogCloseEvent = procedure(Sender: TObject; var CanClose: boolean) of object; + + TTaskDialogProgressEvent = procedure(Sender: TObject; var Pos: integer; var State: TTaskDialogProgressState) of object; + + TCommonButtons = set of TCommonButton; + + TAdvMessageForm = class; + + TInputType = (itEdit, itMemo, itComboEdit, itComboList, itDate, itCustom, itNone); + + TInputGetTextEvent = procedure(Sender: TObject; var Text: string) of object; + TInputSetTextEvent = procedure(Sender: TObject; Text: string) of object; + + TCustomAdvTaskDialog = class(TComponent) + private + FTitle: string; + FContent: string; + FFooter: string; + FInstruction: string; + FCommonButtons: TCommonButtons; + FExpandedText: string; + FCollapsControlText: string; + FExpandControlText: string; + FButtonResult: integer; + FVerifyResult: boolean; + FVerifyText: string; + FCustomButtons: TStringList; + FCustomIcon: TIcon; + FOptions: TTaskDialogOptions; + FRadioButtons: TStringList; + FhWnd: THandle; + FOnCreated: TNotifyEvent; + FOnTimer: TNotifyEvent; + FHelpContext: longint; + FProgressBarMin: integer; + FProgressBarMax: integer; + FOnDialogHyperlinkClick: TTaskDialogHyperlinkClickEvent; + FOnDialogClick: TTaskDialogButtonClickEvent; + FOnDialogRadioClick: TTaskDialogButtonClickEvent; + FOnDialogVerifyClick: TTaskDialogVerifyClickEvent; + FOnDialogProgress: TTaskDialogProgressEvent; + FOnDialogClose: TTaskDialogCloseEvent; + FOnDialogInputGetText: TInputGetTextEvent; + FOnDialogInputSetText: TInputSetTextEvent; + FIcon: TTaskDialogIcon; + FFooterIcon: TTaskDialogFooterIcon; + FDefaultButton: integer; + FDefaultRadioButton: integer; + FDialogForm: TAdvMessageForm; + FDlgPosition: TTaskDialogPosition; + FApplicationIsParent: Boolean; + FModalParent: THandle; + FMinFormWidth: Integer; + FNonNativeDialog: TNonNativeDialog; + FInputType: TInputType; + FInputText: string; + FInputItems: TStrings; + FInputControl: TWinControl; + function GetVersion: string; + procedure SetVersion(const Value: string); + function GetVersionNr: Integer; + procedure SetCustomButtons(const Value: TStringList); + procedure SetRadioButtons(const Value: TStringList); + procedure SetContent(const Value: string); + procedure SetInstruction(const Value: string); + procedure SetFooter(const Value: string); + procedure SetExpandedText(const Value: string); + procedure SetCustomIcon(const Value: TIcon); + procedure SetInputItems(const Value: TStrings); + protected + function CreateButton(AOwner: TComponent): TWinControl; virtual; + function CreateRadioButton(AOwner: TComponent): TWinControl; virtual; + procedure InitRadioButton(AOwner: TForm; Btn: TWinControl; btnIndex: Integer; OnClickEvent : TNotifyEvent); virtual; + procedure SetRadioButtonState(Btn: TWinControl; Checked: boolean); virtual; + procedure SetRadioButtonCaption(Btn: TWinControl; Value: string); virtual; + procedure SetButtonCaption(aButton: TWinControl; Value: TCaption); virtual; + procedure SetButtonCancel(aButton: TWinControl; Value: Boolean); virtual; + procedure SetButtonDefault(aButton: TWinControl; Value: Boolean); virtual; + procedure SetButtonModalResult(aButton: TWinControl; Value: Integer); virtual; + function GetButtonModalResult(aButton: TWinControl): Integer; virtual; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + procedure TaskDialogFormCreated(Sender: TObject); + property CustomButtons: TStringList read FCustomButtons write SetCustomButtons; + property CustomIcon: TIcon read FCustomIcon write SetCustomIcon; + property RadioButtons: TStringList read FRadioButtons write SetRadioButtons; + property CommonButtons: TCommonButtons read FCommonButtons write FCommonButtons; + property DefaultButton: integer read FDefaultButton write FDefaultButton; + property DefaultRadioButton: integer read FDefaultRadioButton write FDefaultRadioButton; + property DialogPosition: TTaskDialogPosition read FDlgPosition write FDlgPosition default dpScreenCenter; + property ExpandedText: string read FExpandedText write SetExpandedText; + property Footer: string read FFooter write SetFooter; + property FooterIcon: TTaskDialogFooterIcon read FFooterIcon write FFooterIcon default tfiBlank; + property HelpContext: longint read FHelpContext write FHelpContext default 0; + property Icon: TTaskDialogIcon read FIcon write FIcon default tiBlank; + property InputText: string read FInputText write FInputText; + property InputType: TInputType read FInputType write FInputType; + property InputItems: TStrings read FInputItems write SetInputItems; + property InputControl: TWinControl read FInputControl write FInputControl; + property Title: string read FTitle write FTitle; + property Instruction: string read FInstruction write SetInstruction; + property Content: string read FContent write SetContent; + property ExpandControlText: string read FExpandControlText write FExpandControlText; + property CollapsControlText: string read FCollapsControlText write FCollapsControlText; + property Options: TTaskDialogOptions read FOptions write FOptions; + property ApplicationIsParent: boolean read FApplicationIsParent write FApplicationIsParent default true; + property VerificationText: string read FVerifyText write FVerifyText; + property NonNativeDialog: TNonNativeDialog read FNonNativeDialog write FNonNativeDialog default nndAuto; + property NonNativeMinFormWidth: integer read FMinFormWidth write FMinFormWidth default 350; + + property ProgressBarMin: integer read FProgressBarMin write FProgressBarMin default 0; + property ProgressBarMax: integer read FProgressBarMax write FProgressBarMax default 100; + property Version: string read GetVersion write SetVersion; + + property OnDialogCreated: TNotifyEvent read FOnCreated write FOnCreated; + property OnDialogClose: TTaskDialogCloseEvent read FOnDialogClose write FOnDialogClose; + property OnDialogButtonClick: TTaskDialogButtonClickEvent read FOnDialogClick write FOnDialogClick; + property OnDialogInputSetText: TInputSetTextEvent read FOnDialogInputSetText write FOnDialogInputSetText; + property OnDialogInputGetText: TInputGetTextEvent read FOnDialogInputGetText write FOnDialogInputGetText; + property OnDialogRadioClick: TTaskDialogButtonClickEvent read FOnDialogRadioClick write FOnDialogRadioClick; + property OnDialogHyperlinkClick: TTaskDialogHyperlinkClickEvent read FOnDialogHyperlinkClick write FOnDialogHyperLinkClick; + property OnDialogTimer: TNotifyEvent read FOnTimer write FOnTimer; + property OnDialogVerifyClick: TTaskDialogVerifyClickEvent read FOnDialogVerifyClick write FOnDialogVerifyClick; + property OnDialogProgress: TTaskDialogProgressEvent read FOnDialogProgress write FOnDialogProgress; + public + property hWnd: THandle read FhWnd write FhWnd; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function Execute: integer; virtual; + procedure Clear; + procedure EnableButton(ButtonID: integer; Enabled: boolean); + procedure ElevateButton(ButtonID: integer; Enabled: boolean); + procedure ClickButton(ButtonID: integer); + property RadioButtonResult: integer read FButtonResult write FButtonResult; + property VerifyResult: boolean read FVerifyResult write FVerifyResult; + property ModalParent: THandle read FModalParent write FModalParent; + end; + + TAdvTaskDialog = class(TCustomAdvTaskDialog) + published + property CustomButtons; + property CustomIcon; + property RadioButtons; + property CommonButtons; + property DefaultButton; + property DefaultRadioButton; + property DialogPosition; + property ExpandedText; + property Footer; + property FooterIcon; + property HelpContext; + property Icon; + property Title; + property Instruction; + property Content; + property ExpandControlText; + property CollapsControlText; + property Options; + property ApplicationIsParent; + property VerificationText; + property NonNativeDialog; + property NonNativeMinFormWidth; + + property ProgressBarMin; + property ProgressBarMax; + property Version; + + property OnDialogCreated; + property OnDialogClose; + property OnDialogButtonClick; + property OnDialogRadioClick; + property OnDialogHyperlinkClick; + property OnDialogTimer; + property OnDialogVerifyClick; + property OnDialogProgress; + end; + + TAdvInputTaskDialog = class(TCustomAdvTaskDialog) + public + constructor Create(AOwner: TComponent); override; + function Execute: integer; override; + published + property ApplicationIsParent; + property CustomButtons; + property CustomIcon; + property CommonButtons; + property DefaultButton; + property DialogPosition; + property ExpandedText; + property Footer; + property FooterIcon; + property Icon; + property InputControl; + property InputType; + property InputText; + property InputItems; + property Instruction; + property Title; + property Content; + property ExpandControlText; + property CollapsControlText; + property VerificationText; + property OnDialogCreated; + property OnDialogClose; + property OnDialogButtonClick; + property OnDialogVerifyClick; + property OnDialogInputSetText; + property OnDialogInputGetText; + end; + + TTaskDialogButton = class(TCustomControl) + private + FOnMouseLeave: TNotifyEvent; + FOnMouseEnter: TNotifyEvent; + FGlyph: TBitmap; + FGlyphDisabled: TBitmap; + FGlyphDown: TBitmap; + FGlyphHot: TBitmap; + FMouseInControl: Boolean; + FMouseDown: Boolean; + FBorderColorDown: TColor; + FBorderColorHot: TColor; + FBorderColor: TColor; + FModalResult: TModalResult; + FHeadingFont: TFont; + FAutoFocus: boolean; + procedure OnPictureChanged(Sender: TObject); + procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + procedure SetGlyph(const Value: TBitmap); + procedure SetGlyphDisabled(const Value: TBitmap); + procedure SetGlyphDown(const Value: TBitmap); + procedure SetGlyphHot(const Value: TBitmap); + procedure SetHeadingFont(const Value: TFont); + protected + procedure Paint; override; + procedure KeyPress(var Key: char); override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Click; override; + procedure DoEnter; override; + procedure DoExit; override; + property AutoFocus: boolean read FAutoFocus write FAutoFocus; + published + property Anchors; + property BorderColor: TColor read FBorderColor write FBorderColor; + property BorderColorHot: TColor read FBorderColorHot write FBorderColorHot; + property BorderColorDown: TColor read FBorderColorDown write FBorderColorDown; + property Constraints; + property Enabled; + property HeadingFont: TFont read FHeadingFont write SetHeadingFont; + property ModalResult: TModalResult read FModalResult write FModalResult default 0; + property Picture: TBitmap read FGlyph write SetGlyph; + property PictureHot: TBitmap read FGlyphHot write SetGlyphHot; + property PictureDown: TBitmap read FGlyphDown write SetGlyphDown; + property PictureDisabled: TBitmap read FGlyphDisabled write SetGlyphDisabled; + property Visible; + property OnClick; + property OnDblClick; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; + property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; + end; + + TAdvMessageForm = class(TForm) + private + Message: TLabel; + FHorzMargin: Integer; + FVertMargin: Integer; + FHorzSpacing: Integer; + FVertSpacing: Integer; + FExpandButton: TTaskDialogButton; + FExpanded: Boolean; + //FExpandLabel: TLabel; + FExpandControlText: String; + FCollapsControlText: String; + FcmBtnList: TList; + FcsBtnList: TList; + FTaskDialog: TCustomAdvTaskDialog; + FFooterIcon: TImage; + FFooterIconID: PChar; + FRadioList: TList; + FVerificationCheck: TCheckBox; + FProgressBar: TProgressBar; + FIcon: TImage; + FFooterXSize: Integer; + FFooterYSize: Integer; + FContentXSize: Integer; + FContentYSize: Integer; + FExpTextXSize: Integer; + FExpTextYSize: Integer; + FExpTextTop: Integer; + FAnchor: String; + FTimer: TTimer; + FWhiteWindowHeight: Integer; + FHorzParaMargin: Integer; + FMinFormWidth: Integer; + FInputEdit: TEdit; + FInputCombo: TComboBox; + FInputDate: TDateTimePicker; + FInputMemo: TMemo; + FOldParent: TWinControl; + procedure WMActivate(var M: TWMActivate); message WM_ACTIVATE; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure OnTimer(Sender: TObject); + procedure OnExpandButtonClick(Sender: TObject); + procedure OnVerifyClick(Sender: TObject); + procedure OnRadioClick(Sender: TObject); + procedure OnButtonClick(Sender: TObject); + procedure SetExpandButton(const Value: TTaskDialogButton); + procedure GetTextSize(Canvas: TCanvas; Text: string;var W, H: Integer); + //procedure GetMultiLineTextSize(Canvas: TCanvas; Text: string; HeadingFont, ParaFont: TFont; var W, H: Integer); + //procedure HelpButtonClick(Sender: TObject); + protected + procedure SetExpanded(Value: Boolean); + procedure CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure WriteToClipBoard(Text: String); + function GetFormText: String; + procedure Paint; override; + procedure KeyDown(var Key:Word;Shift:TShiftSTate); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; + procedure DoClose(var Action: TCloseAction); override; + + function GetButton(ButtonID: Integer; var TaskButton: TTaskDialogButton): TButton; + procedure EnableButton(ButtonID: integer; Enabled: boolean); + procedure ClickButton(ButtonID: integer); + function IsAnchor(x, y: integer): string; + function GetFooterRect: TRect; + function GetContentRect: TRect; + function GetExpTextRect: TRect; + procedure DrawExpandedText; + procedure DrawContent; + procedure DrawFooter; + property Expanded: Boolean read FExpanded default true; + property ExpandButton: TTaskDialogButton read FExpandButton write SetExpandButton; + procedure DoShow; override; + public + constructor CreateNew(AOwner: TComponent; Dummy: Integer); {$IFNDEF BCB} reintroduce; {$ENDIF} + destructor Destroy; override; + procedure BuildTaskDialog(TaskDialog: TCustomAdvTaskDialog); + procedure SetPositions; + procedure UpdateDialog; + property MinFormWidth: Integer Read FMinFormWidth Write FMinFormWidth; + end; + + function AdvMessageDlgPos(TaskDialog: TCustomAdvTaskDialog; X, Y: Integer): Integer; + + +function AdvShowMessage(const Instruction: string): boolean; overload; +function AdvShowMessage(const Title, Instruction: string): boolean; overload; +function AdvShowmessage(const Title, Instruction: string; tiIcon: tTaskDialogIcon): boolean; overload; +function AdvShowMessage(const Title, Instruction, content, verify: string; + tiIcon: tTaskDialogIcon): boolean; overload; + +function AdvMessageBox(hWnd: HWND; lpInstruction, lpTitle: PChar; flags: UINT): Integer; + + +function AdvShowMessageFmt(const Instruction: string; Parameters: array of const): boolean; + +function AdvMessageDlg(const Instruction: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer; overload; + +function AdvMessageDlg(const Instruction: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): Integer; overload; + +function AdvTaskMessageDlg(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer; overload; +function AdvTaskMessageDlg(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): Integer; overload; + +function AdvTaskMessageDlgPos(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer; overload; + +function AdvTaskMessageDlgPos(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; + DefaultButton: TMsgDlgBtn): Integer; overload; + +function AdvTaskMessageDlgPosHelp(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; + const HelpFileName: string): Integer; overload; + +function AdvTaskMessageDlgPosHelp(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; + const HelpFileName: string; DefaultButton: TMsgDlgBtn): Integer; overload; + + + +function AdvInputQueryDlg(ACaption, APrompt: string; var Value: string): boolean; + +var + DRAWBORDER: Boolean = True; + ButtonNames: array[TCommonButton] of string = ('OK', 'Yes', 'No', 'Cancel', 'Retry', 'Abort'); + +procedure Register; + +implementation + +{$I HTMLENGO.PAS} + +const + TDE_CONTENT = 0; + TDE_EXPANDED_INFORMATION = 1; + TDE_FOOTER = 2; + TDE_MAIN_INSTRUCTION = 3; + + TDF_ENABLE_HYPERLINKS = $0001; + TDF_USE_HICON_MAIN = $0002; + TDF_USE_HICON_FOOTER = $0004; + TDF_ALLOW_DIALOG_CANCELLATION = $0008; + TDF_USE_COMMAND_LINKS = $0010; + TDF_USE_COMMAND_LINKS_NO_ICON = $0020; + TDF_EXPAND_FOOTER_AREA = $0040; + TDF_EXPANDED_BY_DEFAULT = $0080; + TDF_VERIFICATION_FLAG_CHECKED = $0100; + TDF_SHOW_PROGRESS_BAR = $0200; + TDF_SHOW_MARQUEE_PROGRESS_BAR = $0400; + TDF_CALLBACK_TIMER = $0800; + TDF_POSITION_RELATIVE_TO_WINDOW = $1000; + TDF_RTL_LAYOUT = $2000; + TDF_NO_DEFAULT_RADIO_BUTTON = $4000; + TDF_CAN_BE_MINIMIZED = $8000; + + TDM_NAVIGATE_PAGE = WM_USER+101; + TDM_CLICK_BUTTON = WM_USER+102; // wParam = Button ID + TDM_SET_MARQUEE_PROGRESS_BAR = WM_USER+103; // wParam = 0 (nonMarque) wParam != 0 (Marquee) + TDM_SET_PROGRESS_BAR_STATE = WM_USER+104; // wParam = new progress state + TDM_SET_PROGRESS_BAR_RANGE = WM_USER+105; // lParam = MAKELPARAM(nMinRange, nMaxRange) + TDM_SET_PROGRESS_BAR_POS = WM_USER+106; // wParam = new position + TDM_SET_PROGRESS_BAR_MARQUEE = WM_USER+107; // wParam = 0 (stop marquee), wParam != 0 (start marquee), lparam = speed (milliseconds between repaints) + TDM_SET_ELEMENT_TEXT = WM_USER+108; // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR) + TDM_CLICK_RADIO_BUTTON = WM_USER+110; // wParam = Radio Button ID + TDM_ENABLE_BUTTON = WM_USER+111; // lParam = 0 (disable), lParam != 0 (enable), wParam = Button ID + TDM_ENABLE_RADIO_BUTTON = WM_USER+112; // lParam = 0 (disable), lParam != 0 (enable), wParam = Radio Button ID + TDM_CLICK_VERIFICATION = WM_USER+113; // wParam = 0 (unchecked), 1 (checked), lParam = 1 (set key focus) + TDM_UPDATE_ELEMENT_TEXT = WM_USER+114; // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR) + TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER+115; // wParam = Button ID, lParam = 0 (elevation not required), lParam != 0 (elevation required) + TDM_UPDATE_ICON = WM_USER+116; // wParam = icon element (TASKDIALOG_ICON_ELEMENTS), lParam = new icon (hIcon if TDF_USE_HICON_* was set, PCWSTR otherwise) + + TDN_CREATED = 0; + TDN_NAVIGATED = 1; + TDN_BUTTON_CLICKED = 2; // wParam = Button ID + TDN_HYPERLINK_CLICKED = 3; // lParam = (LPCWSTR)pszHREF + TDN_TIMER = 4; // wParam = Milliseconds since dialog created or timer reset + TDN_DESTROYED = 5; + TDN_RADIO_BUTTON_CLICKED = 6; // wParam = Radio Button ID + TDN_DIALOG_CONSTRUCTED = 7; + TDN_VERIFICATION_CLICKED = 8; // wParam = 1 if checkbox checked, 0 if not, lParam is unused and always 0 + TDN_HELP = 9; + TDN_EXPANDO_BUTTON_CLICKED = 10; // wParam = 0 (dialog is now collapsed), wParam != 0 (dialog is now expanded) + + TDCBF_OK_BUTTON = $0001; // selected control return value IDOK + TDCBF_YES_BUTTON = $0002; // selected control return value IDYES + TDCBF_NO_BUTTON = $0004; // selected control return value IDNO + TDCBF_CANCEL_BUTTON = $0008; // selected control return value IDCANCEL + TDCBF_RETRY_BUTTON = $0010; // selected control return value IDRETRY + TDCBF_CLOSE_BUTTON = $0020; // selected control return value IDCLOSE + + PBST_NORMAL = $0001; + PBST_ERROR = $0002; + PBST_PAUSED = $0003; +{ + TD_ICON_BLANK = 100; + TD_ICON_WARNING = 101; + TD_ICON_QUESTION = 102; + TD_ICON_ERROR = 103; + TD_ICON_INFORMATION = 104; + TD_ICON_BLANK_AGAIN = 105; + TD_ICON_SHIELD = 106; +} + // Well, Microsoft did it again, incorrect TD_ICON_xxx values in the SDK + // and changing values just between last beta2 & RTM... Gotta love them. + // These values were obtained emperically by the lack of proper documentation + + TD_ICON_BLANK = 17; + TD_ICON_WARNING = 84; + TD_ICON_QUESTION = 99; + TD_ICON_ERROR = 98; + TD_ICON_INFORMATION = 81; + TD_ICON_BLANK_AGAIN = 0; + TD_ICON_SHIELD = 78; + + +type + TProControl = class(TControl); + + PTASKDIALOG_BUTTON = ^TTASKDIALOG_BUTTON; + TTASKDIALOG_BUTTON = record + nButtonID: integer; + pszButtonText: pwidechar; + end; + + TTaskDialogWideString = array[0..1023] of widechar; + + TTaskDialogButtonArray = array of TTASKDIALOG_BUTTON; + TTaskDialogWideStringArray = array of TTaskDialogWideString; + + PTASKDIALOGCONFIG = ^TTASKDIALOGCONFIG; + TTASKDIALOGCONFIG = record + cbSize: integer; + hwndParent: THandle; + hInstance: THandle; + dwFlags: integer; // TASKDIALOG_FLAGS dwFlags; + dwCommonButtons: integer; // TASKDIALOG_COMMON_BUTTON_FLAGS + pszWindowTitle: pwidechar; + hMainIcon: integer; + pszMainInstruction: pwidechar; + pszContent: pwidechar; + cButtons: integer; + pbuttons: pinteger; // const TASKDIALOG_BUTTON* pButtons; + nDefaultButton: integer; + cRadioButtons: integer; + pRadioButtons: pinteger; //const TASKDIALOG_BUTTON* pRadioButtons; + nDefaultRadioButton: integer; + pszVerificationText: pwidechar; + pszExpandedInformation: pwidechar; + pszExpandedControlText: pwidechar; + pszCollapsedControlText: pwidechar; + case Integer of + 0: (hFooterIcon: HICON); + 1: (pszFooterIcon: pwidechar; + pszFooter: pwidechar; + pfCallback: pinteger; + pData: pointer; + cxWidth: integer // width of the Task Dialog's client area in DLU's. + // If 0, Task Dialog will calculate the ideal width. + ); +{ + hFooterIcon: integer; + pszFooter: pwidechar; + pfCallBack: pinteger; // PFTASKDIALOGCALLBACK pfCallback; + pData: pointer; + cxWidth: integer; +} + end; + +//------------------------------------------------------------------------------ + +procedure RunElevated(HWND: THandle; pszPath, pszParameters, pszDirectory: string); +var + shex : SHELLEXECUTEINFO; +begin + fillchar(shex, sizeof(shex),0); + shex.cbSize := sizeof( SHELLEXECUTEINFO ); + shex.fMask := 0; + shex.wnd := hwnd; + shex.lpVerb := 'runas'; + shex.lpFile := pchar(pszPath); + shex.lpParameters := pchar(pszParameters); + shex.lpDirectory := nil; + shex.nShow := SW_NORMAL; + ShellExecuteEx(@shex); +end; + +//------------------------------------------------------------------------------ + +function IsVista: boolean; +var + hKernel32: HMODULE; +begin + hKernel32 := GetModuleHandle('kernel32'); + if (hKernel32 > 0) then + begin + Result := GetProcAddress(hKernel32, 'GetLocaleInfoEx') <> nil; + end + else + Result := false; +end; + +//------------------------------------------------------------------------------ + +procedure VistaShellOpen(HWND: THandle; Command, Param: string); +begin + if IsVista then + RunElevated(HWND, Command, Param, '') + else + ShellExecute(HWND, 'open', pchar(Param), nil, nil, SW_NORMAL); +end; + +//------------------------------------------------------------------------------ + +function GetFileVersion(const AFileName: string): Cardinal; +var + FileName: string; + InfoSize, Wnd: DWORD; + VerBuf: Pointer; + FI: PVSFixedFileInfo; + VerSize: DWORD; +begin + Result := Cardinal(-1); + // GetFileVersionInfo modifies the filename parameter data while parsing. + // Copy the string const into a local variable to create a writeable copy. + FileName := AFileName; + UniqueString(FileName); + InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd); + if InfoSize <> 0 then + begin + GetMem(VerBuf, InfoSize); + try + if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then + if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then + Result:= FI.dwFileVersionMS; + finally + FreeMem(VerBuf); + end; + end; +end; + + +function TaskDialogCallbackProc(hWnd: THandle; msg, wParam, lparam: integer; refData: pointer): integer; stdcall; +var + td: TAdvTaskDialog; + SPos: integer; + State: TTaskDialogProgressState; + Res: integer; + CanClose: boolean; + Anchor: string; + + procedure ShowHelpException(E: Exception); + var + Msg: string; + Flags: Integer; + begin + Flags := MB_OK or MB_ICONSTOP; + if Application.UseRightToLeftReading then + Flags := Flags or MB_RTLREADING; + Msg := E.Message; + if (Msg <> '') and (AnsiLastChar(Msg) > '.') then + Msg := Msg + '.'; + MessageBox(0, PChar(Msg), PChar(Application.Title), Flags); + end; + +begin + td := nil; + if Assigned(refdata) then + td := TAdvTaskDialog(refdata); + + Res := 0; + + if Assigned(td) then + td.hWnd := hWnd; + + case msg of + TDN_CREATED: + begin + if Assigned(td) and Assigned(td.OnDialogCreated) then + begin + td.OnDialogCreated(td); + + if (doProgressBar in td.Options) then + begin + SendMessage(hWnd, TDM_SET_PROGRESS_BAR_RANGE, 0, MakeLParam(td.ProgressBarMin,td.ProgressBarMax)); + end; + end; + end; + TDN_BUTTON_CLICKED: + begin + if Assigned(td) and Assigned(td.OnDialogButtonClick) then + begin + td.OnDialogButtonClick(td, wParam); + end; + + if Assigned(td) and Assigned(td.OnDialogClose) then + begin + CanClose := true; + td.OnDialogClose(td, CanClose); + if not CanClose then + Res := 1; + end; + end; + TDN_RADIO_BUTTON_CLICKED: + begin + if Assigned(td) and Assigned(td.OnDialogRadioClick) then + begin + td.OnDialogRadioClick(td, wParam); + end; + end; + TDN_HYPERLINK_CLICKED: + begin + if Assigned(td) then + begin + Anchor := WideCharToString(PWideChar(lparam)); + + if not Assigned(td.OnDialogHyperlinkClick) then + begin + if (Pos('://', Anchor) > 0) then + VistaShellOpen(0, 'iexplore.exe', Anchor); + end; + + if Assigned(td.OnDialogHyperlinkClick) then + begin + td.OnDialogHyperlinkClick(td, Anchor); + end; + end; + end; + TDN_VERIFICATION_CLICKED: + begin + if Assigned(td) and Assigned(td.OnDialogVerifyClick) then + begin + td.OnDialogVerifyClick(td, bool(wparam)); + end; + end; + TDN_HELP: + begin + if Assigned(td) then + if td.HelpContext <> 0 then + try + Application.HelpContext(td.HelpContext); + except + on E: Exception do + ShowHelpException(E); + end; + end; + TDN_TIMER: + begin + if Assigned(td) and Assigned(td.OnDialogTimer) then + begin + td.OnDialogTimer(td); + end; + + if Assigned(td) and Assigned(td.OnDialogProgress) then + begin + td.OnDialogProgress(td, SPos, State); + SendMessage(hWnd,TDM_SET_PROGRESS_BAR_POS,SPos,0); + case State of + psNormal: SendMessage(hWnd,TDM_SET_PROGRESS_BAR_STATE, PBST_NORMAL, 0); + psError: SendMessage(hWnd,TDM_SET_PROGRESS_BAR_STATE, PBST_ERROR, 0); + psPaused: SendMessage(hWnd,TDM_SET_PROGRESS_BAR_STATE, PBST_PAUSED, 0); + end; + end; + end; + end; + + Result := Res; +end; + +//------------------------------------------------------------------------------ + +function RemoveSpaces(S: String): String; +var + i: Integer; +begin + Result := S; + for i := 1 to Length(s) do + begin + if (s[i] = ' ') then + Result := copy(S, 2, Length(S)-1) + else + Break; + end; + + for i := Length(s) downto 1 do + begin + if (s[i] = ' ') then + Result := copy(S, 1, Length(S)-1) + else + Break; + end; +end; + +//------------------------------------------------------------------------------ + +function HasLf(s:string): boolean; +var + i,j: integer; +begin + Result := false; + i := pos('\n', s); + if i > 0 then + begin + j := pos(':\n',s); + + if (j = -1) or (j <> i - 1) then + Result := true; + end; +end; + +//------------------------------------------------------------------------------ + +procedure SplitInToLines(Text: string; sl: TStrings); +var + i, j: Integer; + s, rs: string; +begin + if (Text <> '') and Assigned(sl) then + begin + rs := #13; + if HasLf(Text) or (pos(rs, Text) > 0) then + begin + Text := RemoveSpaces(Text); + + while (Length(Text) > 0) do + begin + i := Pos('\n', Text); + j := 2; + if (i <= 0) then + begin + i := pos(rs, Text); + j := 2; + end; + + if (i <= 0) then + begin + i := Length(Text)+1; + j := 0; + end; + s := copy(Text, 1, i-1); + Delete(Text, 1, i-1+j); + s := RemoveSpaces(s); + sl.Add(s); + Text := RemoveSpaces(Text); + end; + end + else + sl.Add(Text); + end; +end; + +//------------------------------------------------------------------------------ + +procedure GetMultiLineTextSize(Canvas: TCanvas; Text: string; HeadingFont, ParaFont: TFont; DrawTextBiDiModeFlagsReadingOnly: Longint; var W, H: Integer; WithSpace: Boolean = True); +var + R: TRect; + i, tw, th: Integer; + s: string; + OldFont: TFont; + SL: TStringList; +begin + if Assigned(Canvas) then + begin + OldFont := TFont.Create; + OldFont.Assign(Canvas.Font); + if HasLf(Text) or (pos(#13, Text) > 0) then + begin + tw := 0; + th := 0; + + SL := TStringList.Create; + SplitInToLines(Text, SL); + s := RemoveSpaces(SL[0]); + + if (s <> '') then + begin + Canvas.Font.Assign(HeadingFont); + SetRect(R, 0, 0, 0, 0); + Windows.DrawText( Canvas.handle, PChar(s), -1, R, + DT_CALCRECT or DT_LEFT or DT_SINGLELINE or DrawTextBiDiModeFlagsReadingOnly); + tw := R.Right; + th := R.Bottom; + if WithSpace then + begin + tw := tw + 8; + th := th + 10; + end; + end; + + Canvas.Font.Assign(ParaFont); + for i:= 1 to SL.Count-1 do + begin + s := SL[i]; + if (s <> '') then + begin + SetRect(R, 0, 0, 0, 0); + Windows.DrawText( Canvas.handle, PChar(s), -1, R, + DT_CALCRECT or DT_LEFT or DT_SINGLELINE or DrawTextBiDiModeFlagsReadingOnly); + if WithSpace then + begin + tw := Max(tw, R.Right + 8); + th := th + R.Bottom + 2; + end + else + begin + tw := Max(tw, R.Right); + th := th + R.Bottom; + end; + end; + end; + + W := tw; + H := th; + SL.Free; + end + else + begin + Canvas.Font.Assign(HeadingFont); + SetRect(R, 0, 0, 0, 0); + Windows.DrawText( Canvas.handle, PChar(Text), -1, R, + DT_CALCRECT or DT_LEFT or DT_SINGLELINE or DrawTextBiDiModeFlagsReadingOnly); + W := R.Right; + H := R.Bottom; + end; + + Canvas.Font.Assign(OldFont); + OldFont.Free; + end; +end; + +//------------------------------------------------------------------------------ + +{ TAdvTaskDialog } + +procedure TCustomAdvTaskDialog.Clear; +begin + CommonButtons := []; + RadioButtons.Clear; + CustomButtons.Clear; + Icon := tiBlank; + FooterIcon := tfiBlank; + Instruction := ''; + Title := ''; + Content := ''; + Footer := ''; + VerificationText := ''; + ExpandControlText := ''; + CollapsControlText := ''; + ExpandedText := ''; + DefaultRadioButton := 200; + DefaultButton := 0; + Options := []; + VerifyResult := false; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.ClickButton(ButtonID: integer); +begin + SendMessage(hWnd, TDM_CLICK_BUTTON, ButtonID, 0); + if Assigned(FDialogForm) then + FDialogForm.ClickButton(ButtonID); +end; + +//------------------------------------------------------------------------------ + +constructor TCustomAdvTaskDialog.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FCustomButtons := TStringList.Create; + FRadioButtons := TStringList.Create; + FProgressBarMin := 0; + FProgressBarMax := 100; + FDialogForm := nil; + FApplicationIsParent := true; + FModalParent := 0; + FCustomIcon := TIcon.Create; + FDefaultRadioButton := 200; + FMinFormWidth := 350; + FNonNativeDialog := nndAuto; + FInputType := itNone; + FInputItems := TStringList.Create; +end; + +//------------------------------------------------------------------------------ + +destructor TCustomAdvTaskDialog.Destroy; +begin + FRadioButtons.Free; + FCustomButtons.Free; + FCustomIcon.Free; + FInputItems.Free; + inherited; +end; + +//------------------------------------------------------------------------------ + +function TCustomAdvTaskDialog.CreateButton(AOwner: TComponent): TWinControl; +begin + Result := TButton.Create(AOwner); +end; + +//------------------------------------------------------------------------------ + +function TCustomAdvTaskDialog.CreateRadioButton(AOwner: TComponent): TWinControl; +begin + Result := TRadioButton.Create(AOwner); +end; + +procedure TCustomAdvTaskDialog.SetRadioButtonState(Btn: TWinControl; Checked: boolean); +begin + TRadioButton(Btn).Checked := Checked; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.InitRadioButton(AOwner: TForm; Btn: TWinControl; btnIndex: Integer; OnClickEvent : TNotifyEvent); +begin + with TRadioButton(Btn) do + begin + Name := 'Radio' + inttostr(btnIndex); + Parent := AOwner; + Font.Name := AOwner.Canvas.Font.Name; + Font.Size := 8; + BiDiMode := AOwner.BiDiMode; + OnClick := OnClickEvent; + + { + BoundsRect := TextRect; + Left := FHorzParaMargin + FHorzMargin; //ALeft + FHorzMargin; + Top := Y; + Width := Self.Width - Left - 4; + GetTextSize(Canvas, Caption, k, l); + w := Max(w, Left + k + FHorzMargin + 20); + } + end; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.TaskDialogFormCreated(Sender: TObject); +begin + if Assigned(OnDialogCreated) then + OnDialogCreated(Self); +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + if not (csDestroying in ComponentState) then + begin + if (AOperation = opRemove) then + begin + if (AComponent = FInputControl) then + FInputControl := nil; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.ElevateButton(ButtonID: integer; + Enabled: boolean); +begin + SendMessage(hWnd, TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE, ButtonID, integer(Enabled)); +end; + +procedure TCustomAdvTaskDialog.EnableButton(ButtonID: integer; Enabled: boolean); +begin + SendMessage(hWnd, TDM_ENABLE_BUTTON, ButtonID, integer(Enabled)); + if Assigned(FDialogForm) then + FDialogForm.EnableButton(ButtonID, Enabled); +end; + +//------------------------------------------------------------------------------ + +function ConvertNL(s: string): string; +begin + if Pos('\\n', s) > 0 then + Result := StringReplace(s, '\\n', '\n', [rfReplaceAll]) + else + begin + if pos('\n',s) > 0 then + Result := StringReplace(s,'\n',#10,[rfReplaceAll]) + else + Result := s; + end; +end; + +//------------------------------------------------------------------------------ + +function TCustomAdvTaskDialog.Execute: integer; +var + verinfo: TOSVersionInfo; + DLLHandle: THandle; + res,radiores: integer; + verify: boolean; + TaskDialogConfig : TTASKDIALOGCONFIG; + TaskDialogIndirectProc : function(AConfig: PTASKDIALOGCONFIG; Res: pinteger; ResRadio: pinteger; VerifyFLag: pboolean): integer cdecl stdcall; +{ + wTitle: TTaskDialogWideString; + wDesc: TTaskDialogWideString; + wContent: TTaskDialogWideString; + wExpanded: TTaskDialogWideString; + wExpandedControl: TTaskDialogWideString; + wCollapsedControl: TTaskDialogWideString; + wFooter: TTaskDialogWideString; + wVerifyText: TTaskDialogWideString; +} + TBA: TTaskDialogButtonArray; + TBWS: TTaskDialogWideStringArray; + i: integer; + + TRA: TTaskDialogButtonArray; + TRWS: TTaskDialogWideStringArray; + ComCtlVersion: integer; + + +begin + Result := -1; + + VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); + GetVersionEx(verinfo); + + ComCtlVersion := GetFileVersion('COMCTL32.DLL'); + ComCtlVersion := (ComCtlVersion shr 16) and $FF; + + if (verinfo.dwMajorVersion >= 6) and (ComCtlVersion > 5) and (FNonNativeDialog = nndAuto) then + begin + // check COMCTL version ... + + DLLHandle := LoadLibrary('comctl32.dll'); + if DLLHandle >= 32 then + begin + @TaskDialogIndirectProc := GetProcAddress(DLLHandle,'TaskDialogIndirect'); + + if Assigned(TaskDialogIndirectProc) then + begin + FillChar(TaskDialogConfig, sizeof(TTASKDIALOGCONFIG),0); + TaskDialogConfig.cbSize := sizeof(TTASKDIALOGCONFIG); + + if ModalParent <> 0 then + begin + TaskDialogConfig.hwndParent := ModalParent + end + else + begin + if Assigned(Self.Owner) and not ApplicationIsParent then + TaskDialogConfig.hwndParent := (Self.Owner as TWinControl).Handle + else + TaskDialogConfig.hwndParent := Application.Handle; + end; + + if FCustomButtons.Count > 0 then + begin + SetLength(TBA, FCustomButtons.Count); + SetLength(TBWS, FCustomButtons.Count); + + for i := 0 to FCustomButtons.Count - 1 do + begin + StringToWideChar(ConvertNL(FCustomButtons.Strings[i]), TBWS[i], sizeof(TBWS[i])); + TBA[i].pszButtonText := TBWS[i]; + TBA[i].nButtonID := i + 100; + end; + + TaskDialogConfig.cButtons := FCustomButtons.Count; + TaskDialogConfig.pbuttons := @TBA[0]; + end; + + if FRadioButtons.Count > 0 then + begin + SetLength(TRA, FRadioButtons.Count); + SetLength(TRWS, FRadioButtons.Count); + + for i := 0 to FRadioButtons.Count - 1 do + begin + StringToWideChar(ConvertNL(FRadioButtons.Strings[i]), TRWS[i], sizeof(TRWS[i])); + TRA[i].pszButtonText := TRWS[i]; + TRA[i].nButtonID := i + 200; + end; + + TaskDialogConfig.cRadioButtons := FRadioButtons.Count; + TaskDialogConfig.pRadioButtons := @TRA[0]; + end; + + if FTitle <> '' then + begin + TaskDialogConfig.pszWindowTitle := PWideChar(WideString(ConvertNL(FTitle))); + end; + + if FInstruction <> '' then + begin + TaskDialogConfig.pszMainInstruction := PWideChar(WideString(ConvertNL(FInstruction))); + end; + + if FContent <> '' then + begin + TaskDialogConfig.pszContent := PWideChar(WideString(ConvertNL(FContent))); + end; + + if FFooter <> '' then + begin + TaskDialogConfig.pszFooter := PWideChar(WideString(ConvertNL(FFooter))); + end; + + if FExpandControlText <> '' then + begin + TaskDialogConfig.pszExpandedControlText := PWideChar(WideString(FExpandControlText)); + end; + + if FCollapsControlText <> '' then + begin + TaskDialogConfig.pszCollapsedControlText := PWideChar(WideString(FCollapsControlText)); + end; + + if FExpandedText <> '' then + begin + TaskDialogConfig.pszExpandedInformation := PWideChar(WideString(FExpandedText)) + end; + + if FVerifyText <> '' then + begin + TaskDialogConfig.pszVerificationText := PWideChar(WideString(FVerifyText)); + end; + + if cbOk in FCommonButtons then + TaskDialogConfig.dwCommonButtons := TaskDialogConfig.dwCommonButtons or TDCBF_OK_BUTTON; + + if cbYes in FCommonButtons then + TaskDialogConfig.dwCommonButtons := TaskDialogConfig.dwCommonButtons or TDCBF_YES_BUTTON; + + if cbNo in FCommonButtons then + TaskDialogConfig.dwCommonButtons := TaskDialogConfig.dwCommonButtons or TDCBF_NO_BUTTON; + + if cbCancel in FCommonButtons then + TaskDialogConfig.dwCommonButtons := TaskDialogConfig.dwCommonButtons or TDCBF_CANCEL_BUTTON; + + if cbClose in FCommonButtons then + TaskDialogConfig.dwCommonButtons := TaskDialogConfig.dwCommonButtons or TDCBF_CLOSE_BUTTON; + + if cbRetry in FCommonButtons then + TaskDialogConfig.dwCommonButtons := TaskDialogConfig.dwCommonButtons or TDCBF_RETRY_BUTTON; + + if doCommandLinks in FOptions then + TaskDialogConfig.dwFlags := TDF_USE_COMMAND_LINKS; + + if doCommandLinksNoIcon in FOptions then + TaskDialogConfig.dwFlags := TDF_USE_COMMAND_LINKS_NO_ICON; + + if doHyperlinks in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_ENABLE_HYPERLINKS; + + if doExpandedDefault in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_EXPANDED_BY_DEFAULT; + + if doExpandedFooter in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_EXPAND_FOOTER_AREA; + + if doAllowMinimize in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_CAN_BE_MINIMIZED; + + if doVerifyChecked in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_VERIFICATION_FLAG_CHECKED; + + if doProgressBar in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_SHOW_PROGRESS_BAR; + + if doProgressBarMarquee in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_SHOW_MARQUEE_PROGRESS_BAR; + + if (doProgressBarMarquee in FOptions) or + (doProgressBar in FOptions) or + (doTimer in FOptions) then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_CALLBACK_TIMER; + + if (DialogPosition = dpOwnerFormCenter) then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_POSITION_RELATIVE_TO_WINDOW; + + if doNoDefaultRadioButton in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_NO_DEFAULT_RADIO_BUTTON; + + if doAllowDialogCancel in FOptions then + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_ALLOW_DIALOG_CANCELLATION; + + TaskDialogConfig.hInstance := 0; + + if not CustomIcon.Empty then + begin + TaskDialogConfig.hMainIcon := CustomIcon.Handle; + TaskDialogConfig.dwFlags := TaskDialogConfig.dwFlags or TDF_USE_HICON_MAIN; + end + else + begin + case Icon of + tiWarning: TaskDialogConfig.hMainIcon := TD_ICON_WARNING; + tiQuestion: TaskDialogConfig.hMainIcon := TD_ICON_QUESTION; + tiError: TaskDialogConfig.hMainIcon := TD_ICON_ERROR; + tiShield: TaskDialogConfig.hMainIcon := TD_ICON_SHIELD; + tiBlank: TaskDialogConfig.hMainIcon := TD_ICON_BLANK; + tiInformation: TaskDialogConfig.hMainIcon := TD_ICON_INFORMATION; + end; + end; + + case FooterIcon of + tfiWarning: TaskDialogConfig.hFooterIcon := TD_ICON_WARNING; + tfiQuestion: TaskDialogConfig.hFooterIcon := TD_ICON_QUESTION; + tfiError: TaskDialogConfig.hFooterIcon := TD_ICON_ERROR; + tfiInformation: TaskDialogConfig.hFooterIcon := THandle(MAKEINTRESOURCEW(Word(-3))); + tfiShield: TaskDialogConfig.hFooterIcon := THandle(MAKEINTRESOURCEW(Word(-4))); + end; + + TaskDialogConfig.pfCallBack := @TaskDialogCallbackProc; + TaskDialogConfig.pData := Self; + + TaskDialogConfig.nDefaultButton := DefaultButton; + TaskDialogConfig.nDefaultRadioButton := DefaultRadioButton; + + + TaskDialogIndirectProc(@TaskDialogConfig, @res, @radiores, @verify); + + RadioButtonResult := radiores; + VerifyResult := verify; + Result := res; + + end; + end; + end + else + Result := AdvMessageDlgPos(Self, -1, -1); +end; + +//------------------------------------------------------------------------------ + +function TCustomAdvTaskDialog.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn))) + '.' + IntToStr(Lo(Hiword(vn))) + '.' + + IntToStr(Hi(Loword(vn))) + '.' + IntToStr(Lo(Loword(vn))); +end; + +//------------------------------------------------------------------------------ + +function TCustomAdvTaskDialog.GetVersionNr: Integer; +begin + Result := MakeLong(MakeWord(BLD_VER, REL_VER), MakeWord(MIN_VER, MAJ_VER)); +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetContent(const Value: string); +begin + if (FContent <> Value) then + begin + FContent := Value; + SendMessage(hWnd, TDM_UPDATE_ELEMENT_TEXT, TDE_CONTENT, Integer(PWideChar(WideString(FContent)))); + if Assigned(FDialogForm) then + FDialogForm.UpdateDialog; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetCustomButtons(const Value: TStringList); +begin + FCustomButtons.Assign(Value); +end; + +procedure TCustomAdvTaskDialog.SetCustomIcon(const Value: TIcon); +begin + FCustomIcon.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetExpandedText(const Value: string); +begin + if (FExpandedText <> Value) then + begin + FExpandedText := Value; + SendMessage(hWnd, TDM_UPDATE_ELEMENT_TEXT, TDE_EXPANDED_INFORMATION, Integer(PWideChar(WideString(FExpandedText)))); + if Assigned(FDialogForm) then + FDialogForm.UpdateDialog; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetFooter(const Value: string); +begin + if (FFooter <> Value) then + begin + FFooter := Value; + SendMessage(hWnd, TDM_UPDATE_ELEMENT_TEXT, TDE_FOOTER, Integer(PWideChar(WideString(FFooter)))); + if Assigned(FDialogForm) then + FDialogForm.UpdateDialog; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetInputItems(const Value: TStrings); +begin + FInputItems.Assign(Value); +end; + +procedure TCustomAdvTaskDialog.SetInstruction(const Value: string); +begin + if (FInstruction <> Value) then + begin + FInstruction := Value; + SendMessage(hWnd, TDM_UPDATE_ELEMENT_TEXT, TDE_MAIN_INSTRUCTION, Integer(PWideChar(WideString(FInstruction)))); + if Assigned(FDialogForm) then + FDialogForm.UpdateDialog; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetRadioButtonCaption(Btn: TWinControl; + Value: string); +begin + TRadioButton(Btn).Caption := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetRadioButtons(const Value: TStringList); +begin + FRadioButtons.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetVersion(const Value: string); +begin + +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetButtonCancel(aButton: TWinControl; Value: Boolean); +begin + if not Assigned(aButton) or not (aButton is TButton) then + Exit; + + TButton(aButton).Cancel := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetButtonDefault(aButton: TWinControl; Value: Boolean); +begin + if not Assigned(aButton) or not (aButton is TButton) then + Exit; + + TButton(aButton).Default := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetButtonModalResult(aButton: TWinControl; Value: Integer); +begin + if not Assigned(aButton) or not (aButton is TButton) then + Exit; + + TButton(aButton).ModalResult := Value; +end; + +//------------------------------------------------------------------------------ + +function TCustomAdvTaskDialog.GetButtonModalResult( + aButton: TWinControl): Integer; +begin + Result := mrNone; + if not Assigned(aButton) or not (aButton is TButton) then + Exit; + + Result := TButton(aButton).ModalResult; +end; + +//------------------------------------------------------------------------------ + +procedure TCustomAdvTaskDialog.SetButtonCaption(aButton: TWinControl; + Value: TCaption); +begin + if not Assigned(aButton) or not (aButton is TButton) then + Exit; + + TButton(aButton).Caption := Value; +end; + +//------------------------------------------------------------------------------ + +{ TTaskDialogButton } + +constructor TTaskDialogButton.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FGlyph := TBitmap.Create; + FGlyph.OnChange := OnPictureChanged; + + FGlyphHot := TBitmap.Create; + + FGlyphDown := TBitmap.Create; + + FGlyphDisabled := TBitmap.Create; + FGlyphDisabled.OnChange := OnPictureChanged; + + FHeadingFont := TFont.Create; + + SetBounds(0, 0, 23, 22); + ShowHint := False; + FBorderColorDown := clNone; + FBorderColorHot := clNone; + FBorderColor := clNone; +end; + +//------------------------------------------------------------------------------ + +destructor TTaskDialogButton.Destroy; +begin + FGlyph.Free; + FGlyphHot.Free; + FGlyphDown.Free; + FGlyphDisabled.Free; + FHeadingFont.Free; + inherited; +end; + +procedure TTaskDialogButton.DoEnter; +begin + inherited; + Invalidate; +end; + +procedure TTaskDialogButton.DoExit; +begin + inherited; + Invalidate; +end; + +procedure TTaskDialogButton.KeyPress(var Key: char); +begin + inherited; + if (Key = #32) or (Key = #13) then + begin + Click; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.Paint; +var + Pic: TBitmap; + x, y, bw, bh, i: Integer; + R, TR: TRect; + BrClr: TColor; + SL: TStringList; +begin + inherited; + + R := ClientRect; + + BrClr := clNone; + + if FMouseDown then + BrClr := BorderColorDown + else if FMouseInControl then + BrClr := BorderColorHot; + + if not Enabled then + BrClr := clNone; + + if GetFocus = Handle then + BrClr := BorderColorDown; + + Pic := Picture; + if FMouseDown and not FGlyphDown.Empty then + Pic := FGlyphDown + else if FMouseInControl and not FGlyphHot.Empty then + Pic := FGlyphHot; + + if not Enabled and not PictureDisabled.Empty then + Pic := PictureDisabled; + + if Assigned(Pic) and not Pic.Empty then + begin + Pic.Transparent := True; + if (Caption = '') then + begin + x := (Width - Pic.Width) div 2; + y := (Height - Pic.Height) div 2; + end + else + begin + x := 4; + y := (Height - Pic.Height) div 2; + end; + + Canvas.Draw(x, y, Pic); + R.Left := x + Pic.Width + 3; + end + else + R.Left := R.Left + 2; + + if (Caption <> '') then + begin + if HasLf(Caption) or (pos(#13, Caption) > 0) then + begin + TR := R; + SL := TStringList.Create; + SplitInToLines(Caption, SL); + GetMultiLineTextSize(Canvas, Caption, HeadingFont, Self.Font, DrawTextBiDiModeFlagsReadingOnly, bw, bh); + TR.Top := 2 + (Height - bh) div 2; + + Canvas.Brush.Style := bsClear; + if (SL[0] <> '') then + begin + Canvas.Font.Assign(HeadingFont); + + if not Enabled then + Canvas.Font.Color := clSilver; + + DrawText(Canvas.Handle, PChar(SL[0]),Length(SL[0]), TR, DT_LEFT or DT_TOP or DT_SINGLELINE); + TR.Top := TR.Top + Canvas.TextHeight('gh') + 4; + end; + + Canvas.Font.Assign(Self.Font); + + if not Enabled then + Canvas.Font.Color := clSilver; + + for i:= 1 to SL.Count - 1 do + begin + DrawText(Canvas.Handle, PChar(SL[i]),Length(SL[i]), TR, DT_LEFT or DT_TOP or DT_SINGLELINE); + TR.Top := TR.Top + Canvas.TextHeight('gh') + 2; + end; + SL.Free; + end + else + begin + Canvas.Brush.Style := bsClear; + Canvas.Font.Assign(HeadingFont); + if not Enabled then + Canvas.Font.Color := clSilver; + DrawText(Canvas.Handle,PChar(Caption),Length(Caption), R, DT_LEFT or DT_VCENTER or DT_SINGLELINE); + end; + end; + + if (BrClr <> clNone) then + begin + R := ClientRect; + Canvas.Pen.Color := BrClr; + Canvas.Brush.Style := bsClear; + Canvas.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 2, 2); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + inherited; + + if (ssLeft in Shift) then + begin + FMouseDown := True; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.MouseMove(Shift: TShiftState; X, Y: Integer); +begin + inherited; + +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.MouseUp(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + inherited; + + FMouseDown := False; + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.SetGlyph(const Value: TBitmap); +begin + FGlyph.Assign(Value); + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.SetGlyphDown(const Value: TBitmap); +begin + FGlyphDown.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.SetGlyphHot(const Value: TBitmap); +begin + FGlyphHot.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.SetGlyphDisabled(const Value: TBitmap); +begin + FGlyphDisabled.Assign(Value); + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.OnPictureChanged(Sender: TObject); +begin + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.CMMouseEnter(var Message: TMessage); +begin + inherited; + FMouseInControl := True; + + if AutoFocus then + SetFocus; + + Invalidate; + if Assigned(FOnMouseEnter) then + FOnMouseEnter(Self); +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.CMMouseLeave(var Message: TMessage); +begin + inherited; + FMouseInControl := False; + Invalidate; + + if Assigned(FOnMouseLeave) then + FOnMouseLeave(Self); +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.SetHeadingFont(const Value: TFont); +begin + FHeadingFont.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +function GetAveCharSize(Canvas: TCanvas): TPoint; +var + I: Integer; + Buffer: array[0..51] of Char; +begin + for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A')); + for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a')); + GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result)); + Result.X := Result.X div 52; +end; + +//------------------------------------------------------------------------------ + +var + ButtonWidths : array[TCommonButton] of integer; // initialized to zero + ButtonCaptions: array[TCommonButton] of Pointer; // = ( + // @SMsgDlgOK, @SMsgDlgYes, @SMsgDlgNo, @SMsgDlgCancel, @SMsgDlgRetry, @SMsgDlgAbort); + // ButtonNames: array[TCommonButton] of string = ('OK', 'Yes', 'No', 'Cancel', 'Retry', 'Abort'); + //tiBlank, tiWarning, tiQuestion, tiError, tiInformation,tiNotUsed,tiShield + IconIDs: array[TTaskDialogIcon] of PChar = (IDI_ASTERISK, IDI_EXCLAMATION, IDI_QUESTION, IDI_ERROR, IDI_INFORMATION, nil, IDI_HAND); + FooterIconIDs: array[TTaskDialogFooterIcon] of PChar = (nil, IDI_EXCLAMATION, IDI_QUESTION, IDI_HAND, IDI_INFORMATION, IDI_WINLOGO); + Captions: array[TTaskDialogIcon] of Pointer; + // = (nil, @SMsgDlgWarning, @SMsgDlgConfirm, @SMsgDlgError, @SMsgDlgInformation); + ModalResults: array[TCommonButton] of Integer = (mrOk, mrYes, mrNo, mrCancel, mrRetry, mrAbort); + //(tiBlank, tiWarning, tiQuestion, tiError, tiShield); + //(mtWarning, mtError, mtInformation, mtConfirmation, mtCustom); + +function CreateAdvMessageDlg(TaskDialog: TCustomAdvTaskDialog): TForm; +begin + Result := nil; + if not Assigned(TaskDialog) then + Exit; + + if TaskDialog.ApplicationIsParent then + Result := TAdvMessageForm.CreateNew(Application,0) + else + Result := TAdvMessageForm.CreateNew((TaskDialog.Owner) as TCustomForm,0); + + with Result do + begin + BiDiMode := Application.BiDiMode; + + if doAllowMinimize in TaskDialog.Options then + begin + BorderStyle := bsSingle; + BorderIcons := [biSystemMenu,biMinimize] + end + else + begin + BorderStyle := bsDialog; + BorderIcons := []; + end; + + if not TaskDialog.ApplicationIsParent then + begin + if ((TaskDialog.Owner) is TForm) then + if ((TaskDialog.Owner) as TForm).FormStyle = fsStayOnTop then + FormStyle := fsStayOnTop; + end; + + Canvas.Font := Font; + KeyPreview := True; + OnKeyDown := TAdvMessageForm(Result).CustomKeyDown; + end; + TaskDialog.Options := TaskDialog.Options + [doAllowDialogCancel]; + TAdvMessageForm(Result).MinFormWidth := TaskDialog.NonNativeMinFormWidth; + TAdvMessageForm(Result).BuildTaskDialog(TaskDialog); +end; + +//------------------------------------------------------------------------------ + +function AdvMessageDlgPos(TaskDialog: TCustomAdvTaskDialog; X, Y: Integer): Integer; +var + DlgForm: TAdvMessageForm; +begin + Result := -1; + if not Assigned(TaskDialog) then + Exit; + + DlgForm := TAdvMessageForm(CreateAdvMessageDlg(TaskDialog)); + + DlgForm.OnShow := TaskDialog.TaskDialogFormCreated; + + TaskDialog.FDialogForm := DlgForm; + + with DlgForm do + try + Color := clWhite; + //HelpContext := HelpCtx; + //HelpFile := HelpFileName; + if X >= 0 then Left := X; + if Y >= 0 then Top := Y; + {$IFDEF DELPHI5_LVL} + if TaskDialog.DialogPosition = dpOwnerFormCenter then + begin + if (Y < 0) and (X < 0) then + Position := poOwnerFormCenter; + end + else + begin + DefaultMonitor := dmMainForm; + if (Y < 0) and (X < 0) then + Position := poScreenCenter; + end; + {$ELSE} + {$ENDIF} + Result := ShowModal; + {$IFDEF DELPHI5_LVL} + Close; + {$ENDIF} + finally + TaskDialog.FDialogForm := nil; + Free; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.GetTextSize(Canvas: TCanvas; Text: string;var W, H: Integer); +var + R: TRect; +begin + if (Text = '') then + begin + W := 0; + H := 0; + Exit; + end; + + if Assigned(Canvas) then + begin + if W = 0 then + SetRect(R, 0, 0, 1000, 100) + else + SetRect(R, 0, 0, W, 100); + + DrawText(Canvas.Handle, PChar(Text), Length(Text)+1, R, + DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or DT_NOPREFIX or + DrawTextBiDiModeFlagsReadingOnly); + + W := R.Right; + H := R.Bottom; + end; +end; + +//------------------------------------------------------------------------------ + +const + mcHorzMargin = 8; + mcVertMargin = 8; + mcHorzSpacing = 10; + mcVertSpacing = 10; + mcButtonWidth = 50; + mcButtonHeight = 14; + mcButtonSpacing = 4; + +function GetExeName: string; +var + s: string; + fe: string; +begin + s := ExtractFileName(Application.EXEName); + fe := ExtractFileExt(s); + if (Length(fe) > 0) then + delete(s, length(s) - Length(fe) + 1, length(fe)); + Result := s; +end; + +procedure TAdvMessageForm.BuildTaskDialog(TaskDialog: TCustomAdvTaskDialog); +var + DialogUnits: TPoint; + ButtonWidth, ButtonHeight, ButtonSpacing, ButtonCount, ButtonGroupWidth, + IconTextWidth, IconTextHeight, X, Y, ALeft: Integer; + B, DefaultButton, CancelButton: TCommonButton; + IconID: PChar; + TextRect, FR: TRect; + Msg: string; + DlgType: TTaskDialogIcon; + Buttons: TCommonButtons; + i, bw, bh, h, w, j, FooterIconTextWidth, FooterIconTextHeight: Integer; + CmBtnGroupWidth, CsBtnGroupWidth: Integer; + r, re: trect; + anchor, stripped: string; + HyperLinks,MouseLink, k, l, n: Integer; + Focusanchor: string; + OldFont, hf, pf: TFont; + verifTextWidth: Integer; + v: Boolean; + szContent,szExpandedText,szFooterText: string; + defIdx: integer; + +begin + if not Assigned(TaskDialog) then + Exit; + + FTaskDialog := TaskDialog; + Msg := TaskDialog.Instruction; + DlgType := TaskDialog.Icon; + Buttons := TaskDialog.CommonButtons; + + OldFont := TFont.Create; + OldFont.Assign(Canvas.Font); + + DialogUnits := GetAveCharSize(Canvas); + FHorzMargin := MulDiv(mcHorzMargin, DialogUnits.X, 4); + FVertMargin := MulDiv(mcVertMargin, DialogUnits.Y, 8); + FHorzSpacing := MulDiv(mcHorzSpacing, DialogUnits.X, 4); + FVertSpacing := MulDiv(mcVertSpacing, DialogUnits.Y, 8); + + w := 0; + + if TaskDialog.Title <> '' then + Caption := TaskDialog.Title + else + Caption := GetExeName; + + if (Caption <> '') then + begin + w := 1000; + GetTextSize(Canvas, Caption, w, l); + w := w + 50; + end; + + ButtonWidth := MulDiv(mcButtonWidth, DialogUnits.X, 4); + ButtonHeight := MulDiv(mcButtonHeight, DialogUnits.Y, 8); + ButtonSpacing := MulDiv(mcButtonSpacing, DialogUnits.X, 4); + CmBtnGroupWidth := 0; + CsBtnGroupWidth := 0; + ButtonCount := 0; + FHorzParaMargin := FHorzMargin; + Y := FVertMargin; + FcmBtnList.Clear; + + DefaultButton := cbOk; + if TaskDialog.DefaultButton <> -1 then + begin + + if TaskDialog.DefaultButton = 0 then + begin + if (cbOk in Buttons) then DefaultButton := cbOk else + if cbYes in Buttons then DefaultButton := cbYes else + DefaultButton := cbRetry; + if cbCancel in Buttons then CancelButton := cbCancel else + if cbNo in Buttons then CancelButton := cbNo else + CancelButton := cbOk; + end + else + begin + case TaskDialog.DefaultButton of + 1: if (cbOk in Buttons) then DefaultButton := cbOK + else + DefaultButton := cbYes; + 2: if (cbCancel in Buttons) then DefaultButton := cbCancel + else + DefaultButton := cbNo; + 6: if (cbYes in Buttons) then DefaultButton := cbYes; + 7: if (cbNo in Buttons) then DefaultButton := cbNo; + end; + end; + end; + + + for B := Low(TCommonButton) to High(TCommonButton) do + begin + if B in Buttons then + begin + if ButtonWidths[B] = 0 then + begin + TextRect := Rect(0,0,0,0); + Windows.DrawText( Canvas.Handle, + PChar(LoadResString(ButtonCaptions[B])), -1, + TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or + DrawTextBiDiModeFlagsReadingOnly); + with TextRect do + ButtonWidths[B] := Right - Left + 16; + end; + + if ButtonWidths[B] > ButtonWidth then + ButtonWidth := ButtonWidths[B]; + + i := FcmBtnList.Add(TaskDialog.CreateButton(Self)); + + with TWinControl(FcmBtnList.Items[i]) do + begin + Name := ButtonNames[B]; + Parent := Self; + TaskDialog.SetButtonCaption(TWinControl(FcmBtnList.Items[i]), LoadResString(ButtonCaptions[B])); + TaskDialog.SetButtonModalResult(TWinControl(FcmBtnList.Items[i]), ModalResults[B]); + //ModalResult := ModalResults[B]; + + if (TaskDialog.GetButtonModalResult(TWinControl(FcmBtnList.Items[i])) = mrCancel) and + (doAllowDialogCancel in TaskDialog.Options) then + TaskDialog.SetButtonCancel(TWinControl(FcmBtnList.Items[i]), True); + //Cancel := true; + + if (TaskDialog.DefaultButton <> -1) then + begin + if (B = DefaultButton) then + begin + //Default := True; + TaskDialog.SetButtonDefault(TWinControl(FcmBtnList.Items[i]), True); + TabOrder := 0; + end; + end; + + if (B = CancelButton) and (doAllowDialogCancel in TaskDialog.Options) then + TaskDialog.SetButtonCancel(TWinControl(FcmBtnList.Items[i]), True); + + Width := Max(60, ButtonWidths[B]); + Height := ButtonHeight; + cmBtnGroupWidth := cmBtnGroupWidth + Width + ButtonSpacing; + //if B = mbHelp then + //OnClick := TMessageForm(Result).HelpButtonClick; + if TaskDialog.DefaultButton = -1 then + TabStop := false; + end; + //Inc(ButtonCount); + end; + end; + + FcsBtnList.Clear; + if not (docommandLinks in TaskDialog.Options) then + begin + for i := 0 to TaskDialog.CustomButtons.Count - 1 do + begin + TextRect := Rect(0,0,0,0); + Windows.DrawText( Canvas.Handle, + PChar(TaskDialog.CustomButtons[i]), -1, + TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or + DrawTextBiDiModeFlagsReadingOnly); + + with TextRect do + bw := Right - Left + 16; + + if bw > ButtonWidth then + ButtonWidth := bw; + + j := FcsBtnList.Add(TaskDialog.CreateButton(Self)); + with TWinControl(FcsBtnList.Items[j]) do + begin + Name := 'Button'+inttostr(i); + Parent := Self; + TaskDialog.SetButtonCaption(TWinControl(FcsBtnList.Items[j]), TaskDialog.CustomButtons[i]); + //ModalResult := i + 100; //mrAbort; + TaskDialog.SetButtonModalResult(TWinControl(FcsBtnList.Items[j]), i + 100); + v := (TaskDialog.GetButtonModalResult(TWinControl(FcsBtnList.Items[j])) = TaskDialog.DefaultButton); + TaskDialog.SetButtonDefault(TWinControl(FcsBtnList.Items[j]), V); + //Default := (ModalResult = TaskDialog.DefaultButton); + //if V then + // TabOrder := 0; + //if B = DefaultButton then Default := True; + //if B = CancelButton then Cancel := True; + Width := Max(60, bw); + Height := ButtonHeight; + TProControl(FcsBtnList.Items[j]).OnClick := OnButtonClick; + CsBtnGroupWidth := CsBtnGroupWidth + Width + ButtonSpacing; + if TaskDialog.DefaultButton = -1 then + TabStop := false; + end; + end; + end + else + begin + n := 0; + hf := TFont.Create; + pf := TFont.Create; + hf.Assign(Canvas.Font); + hf.Size := 11; + hf.Style := [fsBold]; + pf.Assign(Canvas.Font); + + + for i := 0 to TaskDialog.CustomButtons.Count-1 do + begin + Canvas.Font.Size := 10; + Canvas.Font.Style := []; + bw := 0; + bh := 0; + GetMultiLineTextSize(Canvas, TaskDialog.CustomButtons[i], Hf, Pf, DrawTextBiDiModeFlagsReadingOnly, bw, bh); + + {TextRect := Rect(0,0,0,0); + Windows.DrawText( Canvas.handle, + PChar(TaskDialog.CustomButtons[i]), -1, + TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or + DrawTextBiDiModeFlagsReadingOnly); + with TextRect do bw := (Right - Left) + 8 + 18;} + bw := bw + 26; + if bw > ButtonWidth then + ButtonWidth := bw; + + if bw > n then + n := bw; + + if not (doCommandLinksNoIcon in TaskDialog.Options) then + w := Max(w, n + FHorzMargin*2 + FHorzSpacing + 32) + else + w := Max(w, n + FHorzMargin); + + j := FcsBtnList.Add(TTaskDialogButton.Create(Self)); + with TTaskDialogButton(FcsBtnList.Items[j]) do + begin + Name := 'Button'+inttostr(i); + Parent := Self; + Caption := TaskDialog.CustomButtons[i]; + Font.Assign(pf); + Font.Color := RGB(0, 83, 196); + HeadingFont.Assign(hf); + HeadingFont.Color := RGB(0, 83, 196);//RGB(21, 28, 85); + ModalResult := i + 100; //mrAbort; + //Default := (ModalResult = TaskDialog.DefaultButton); + BorderColorHot := RGB(108, 225, 255); + BorderColorDown := RGB(108, 225, 255); + Width := Max(60, n); + if TaskDialog.DefaultButton <> -1 then + AutoFocus := true; + + Height := Max(bh, Max(ButtonHeight, Canvas.TextHeight('gh') + 20)); + + if not (doCommandLinksNoIcon in TaskDialog.Options) then + begin + Picture.LoadFromResourceName(HInstance, 'TD_ARW'); + Picture.TransparentColor := clFuchsia; + + PictureHot.LoadFromResourceName(HInstance, 'TD_ARWHOT'); + PictureHot.TransparentColor := clFuchsia; + + PictureDown.LoadFromResourceName(HInstance, 'TD_ARWDOWN'); + PictureDown.TransparentColor := clFuchsia; + + PictureDisabled.LoadFromResourceName(HInstance, 'TD_ARWDIS'); + PictureDisabled.TransparentColor := clFuchsia; + end; + + if TaskDialog.DefaultButton = -1 then + TabStop := false + else + TabStop := true; + + OnClick := OnButtonClick; + //CsBtnGroupWidth := CsBtnGroupWidth + Width + ButtonSpacing; + end; + + end; + Canvas.Font.Assign(OldFont); + hf.Free; + pf.Free; + end; + + // if no button then OK button is added + if (FcmBtnList.Count = 0) and (FcsBtnList.Count = 0) then + begin + b := cbOK; + TextRect := Rect(0,0,0,0); + Windows.DrawText( canvas.handle, + PChar(LoadResString(ButtonCaptions[B])), -1, + TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or + DrawTextBiDiModeFlagsReadingOnly); + with TextRect do ButtonWidths[B] := Right - Left + 8; + + //if ButtonWidths[B] > ButtonWidth then + //ButtonWidth := ButtonWidths[B]; + + i := FcmBtnList.Add(TaskDialog.CreateButton(Self)); + with TWinControl(FcmBtnList.Items[i]) do + begin + Name := ButtonNames[B]; + Parent := Self; + TaskDialog.SetButtonCaption(TWinControl(FcmBtnList.Items[i]), LoadResString(ButtonCaptions[B])); + TaskDialog.SetButtonModalResult(TWinControl(FcmBtnList.Items[i]), ModalResults[B]); + //ModalResult := ModalResults[B]; + //Default := True; + TaskDialog.SetButtonDefault(TWinControl(FcmBtnList.Items[i]), True); + //Cancel := True; // handle ESC + + if doAllowDialogCancel in TaskDialog.Options then + TaskDialog.SetButtonCancel(TWinControl(FcmBtnList.Items[i]), True); + + Width := Max(60, ButtonWidths[B]); + Height := ButtonHeight; + cmBtnGroupWidth := cmBtnGroupWidth + Width + ButtonSpacing; + //if B = mbHelp then + //OnClick := TMessageForm(Result).HelpButtonClick; + end; + end; + + // Instruction + Canvas.Font.Size := 11; + Canvas.Font.Style := [fsBold]; + + SetRect(TextRect, 0, 0, Screen.Width div 2, 0); + DrawText(Canvas.Handle, PChar(Msg), Length(Msg) + 1, TextRect, + DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or + DrawTextBiDiModeFlagsReadingOnly); + + Canvas.Font.Assign(OldFont); + + IconID := IconIDs[DlgType]; + + IconTextWidth := TextRect.Right; + IconTextHeight := TextRect.Bottom; + if IconID <> nil then + begin + Inc(IconTextWidth, 32 + FHorzSpacing); + if IconTextHeight < 32 then IconTextHeight := 32; + end; + + {if DlgType <> tiBlank then + Caption := LoadResString(Captions[DlgType]) else + Caption := Application.Title;} + + if ((IconID <> nil) or not (TaskDialog.CustomIcon.Empty)) {and not (doCommandLinksNoIcon in TaskDialog.Options)} then + begin + FIcon := TImage.Create(Self); + with FIcon do + begin + Name := 'Image'; + Parent := Self; + + if not TaskDialog.CustomIcon.Empty then + begin + Picture.Icon.Assign(TaskDialog.CustomIcon); + end + else + begin + + case TaskDialog.Icon of + tiShield: Picture.Bitmap.Handle := LoadBitmap(hInstance, 'TD_SHIELD'); + tiBlank: + begin + Picture.Bitmap.Height := 32; + Picture.Bitmap.Width := 32; + Picture.Bitmap.Canvas.Brush.Color := clWhite; + Picture.Bitmap.Canvas.Pen.Style := psClear; + Picture.Bitmap.Canvas.Rectangle(0,0,31,31); + end; + else + Picture.Icon.Handle := LoadIcon(0, IconID); + end; + end; + + SetBounds(FHorzMargin, Y, 32, 32); + end; + end; + + Message := TLabel.Create(Self); + with Message do + begin + Name := 'Instr'; + Parent := Self; + {$IFDEF DELPHI7_LVL} + WordWrap := True; + {$ENDIF} + Caption := Msg; + Font.Size := 11; + Font.Color := RGB(0, 83, 196); + Font.Style := [fsBold]; + BoundsRect := TextRect; + BiDiMode := Self.BiDiMode; + ShowAccelChar := false; + ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - Width; + SetBounds(ALeft, Y, + TextRect.Right, TextRect.Bottom); + y := Y + Height + FVertSpacing; + FHorzParaMargin := ALeft; + end; + + if (doTimer in TaskDialog.Options) then + begin + FTimer := TTimer.Create(Self); + FTimer.Interval := 100; + FTimer.OnTimer := OnTimer; + FTimer.Enabled := True; + end; + + if (doProgressBar in TaskDialog.Options) then + begin + FProgressBar := TProgressBar.Create(Self); + with FProgressBar do + begin + Name := 'ProgressBar'; + Parent := Self; + BoundsRect := Rect(FHorzMargin, Y, Width - FHorzMargin, Y + 12); + Min := TaskDialog.ProgressBarMin; + Max := TaskDialog.ProgressBarMax; + Position := 0; + end; + + if not Assigned(FTimer) then + begin + FTimer := TTimer.Create(Self); + FTimer.Interval := 100; + FTimer.OnTimer := OnTimer; + FTimer.Enabled := True; + end; + end; + + if (TaskDialog.RadioButtons.Count > 0) then + begin + if (doNodefaultRadioButton in FTaskDialog.Options) then + FTaskDialog.RadioButtonResult := 0 + else + FTaskDialog.RadioButtonResult := FTaskDialog.DefaultRadioButton; + + for i := 0 to TaskDialog.RadioButtons.Count-1 do + begin + j := FRadioList.Add(FTaskDialog.CreateRadioButton(Self)); + + TaskDialog.InitRadioButton(self, TWinControl(FRadioList.Items[j]), i, OnRadioClick); + + with TWinControl(FRadioList.Items[j]) do + begin + (* + Name := 'Radio' + inttostr(i); + Parent := Self; + Font.Name := Canvas.Font.Name; + Font.Size := 8; + {$IFDEF DELPHI7_LVL} + //WordWrap := False; + {$ENDIF} + OnClick := OnRadioClick; + BiDiMode := Self.BiDiMode; + *) + + BoundsRect := TextRect; + Left := FHorzParaMargin + FHorzMargin; //ALeft + FHorzMargin; + Top := Y; + Width := Self.Width - Left - 4; + GetTextSize(Canvas, Caption, k, l); + w := Max(w, Left + k + FHorzMargin + 20); + end; + + TaskDialog.SetRadioButtonCaption(FRadioList.Items[j],TaskDialog.RadioButtons[i]); + + if doNoDefaultRadioButton in TaskDialog.Options then + TaskDialog.SetRadioButtonState(FRadioList.Items[j], False) + else + begin + if (TaskDialog.DefaultRadioButton > 0) then + TaskDialog.SetRadioButtonState(FRadioList.Items[j], (j + 200 = TaskDialog.DefaultRadioButton)) + else + begin + TaskDialog.SetRadioButtonState(FRadioList.Items[j], (i = 0)); + end; + end; + + (* + with TRadioButton(FRadioList.Items[j]) do + begin + if doNoDefaultRadioButton in TaskDialog.Options then + Checked := False + else + begin + if (TaskDialog.DefaultRadioButton > 0) then + Checked := (j + 200 = TaskDialog.DefaultRadioButton) + else + begin + Checked := (i = 0); + end; + end; + end; + *) + end; + end; + + if (TaskDialog.ExpandedText <> '') then + begin + (*FExpandLabel := TLabel.Create(Self); + with FExpandLabel do + begin + Name := 'Expand'; + Parent := Self; + {$IFDEF DELPHI7_LVL} + WordWrap := True; + {$ENDIF} + ShowAccelChar := false; + BiDiMode := Self.BiDiMode; + FExpandLabel.Caption := TaskDialog.ExpandedText; + Left := ALeft; + Top := Y; + end; *) + + FExpTextXSize := 0; + FExpTextYSize := 0; + r := Rect(FHorzMargin, Y, 300, Y + 26); + + + if (doHyperlinks in FTaskDialog.Options) then + begin + szExpandedText := StringReplace(FTaskDialog.ExpandedText,'\n','
    ',[rfReplaceAll]); + szExpandedText := StringReplace(szExpandedText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szExpandedText, r, nil, x, y, -1, -1, 1, true, false, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, FExpTextXSize, FExpTextYSize, hyperlinks, + mouselink, re, nil, nil, 0); + end + else + begin + szExpandedText := StringReplace(FTaskDialog.ExpandedText,'\n',#13,[rfReplaceAll]); + + FExpTextXSize := r.Right - r.Left; + //szContent := StringReplace(FTaskDialog.Content,'\n',#13,[rfReplaceAll]); + //GetTextSize(Canvas, szContent, FExpTextXSize, FExpTextYSize); + + GetTextSize(Canvas, szExpandedText, FExpTextXSize, FExpTextYSize); + end; + + FExpandButton := TTaskDialogButton.Create(Self); + with FExpandButton do + begin + Name := 'ExpandButton'; + Parent := Self; + Caption := ''; + ModalResult := mrNone; + Width := 19; + Height := 19; + OnClick := OnExpandButtonClick; + Picture.LoadFromResourceName(HInstance, 'TD_COLP'); + Picture.TransparentColor := clFuchsia; + + PictureHot.LoadFromResourceName(HInstance, 'TD_COLPHOT'); + PictureHot.TransparentColor := clFuchsia; + + PictureDown.LoadFromResourceName(HInstance, 'TD_COLPDOWN'); + PictureDown.TransparentColor := clFuchsia; + end; + end; + + verifTextWidth := 0; + if (TaskDialog.VerificationText <> '') then + begin + k := 0; + FVerificationCheck := TCheckBox.Create(Self); + with FVerificationCheck do + begin + Name := 'Verification'; + Parent := Self; + {$IFDEF DELPHI7_LVL} + WordWrap := False; + {$ENDIF} + BoundsRect := TextRect; + BiDiMode := Self.BiDiMode; + Caption := TaskDialog.VerificationText; + Left := FHorzMargin; + Top := Y; + Color := RGB(240, 240, 240); + OnClick := OnVerifyClick; + Checked := (doVerifyChecked in TaskDialog.Options); + GetTextSize(Canvas, Caption, k, l); + verifTextWidth := k + FVertSpacing *2; + w := Max(w, Left + k); + end; + end; + + FFooterXSize := 0; + FFooterYSize := 0; + if (TaskDialog.Footer <> '') then + begin + r := Rect(FHorzMargin, Y, 300, Y + 26); + + szFooterText := StringReplace(FTaskDialog.Footer,'\n','
    ',[rfReplaceAll]); + szFooterText := StringReplace(szFooterText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szFooterText, r, nil, x, y, -1, -1, 1, true, false, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, FFooterXSize, FFooterYSize, hyperlinks, + mouselink, re, nil, nil, 0); + + IconID := FooterIconIDs[TaskDialog.FooterIcon]; + FooterIconTextWidth := TextRect.Right; + FooterIconTextHeight := TextRect.Bottom; + if IconID <> nil then + begin + Inc(FooterIconTextWidth, 24 + FHorzSpacing); + if FooterIconTextHeight < 24 then FooterIconTextHeight := 24; + end; + + if IconID <> nil then + begin + FFooterIcon := TImage.Create(Self); + FFooterIconID := IconID; + + with FFooterIcon do + begin + Name := 'FooterImage'; + Parent := Self; + Visible := False; + SetBounds(FHorzMargin, Y, 16, 16); + end; + end; + end; + + ButtonGroupWidth := CmBtnGroupWidth + CsBtnGroupWidth + verifTextWidth; + if (TaskDialog.ExpandedText <> '') and Assigned(FExpandButton) then + begin + k := 0; + l := 0; + GetTextSize(Canvas, FTaskDialog.CollapsControlText, k, l); + GetTextSize(Canvas, FTaskDialog.ExpandControlText, n, l); + k := Max(k, n); + ButtonGroupWidth := ButtonGroupWidth + FExpandButton.Width + FHorzSpacing + k + FHorzSpacing; + end; + + if TaskDialog.Content = '' then + Y := Y - 20; + + case TaskDialog.InputType of + itEdit: + begin + FInputEdit := TEdit.Create(self); + FInputEdit.Parent := Self; + FInputEdit.TabStop := true; + FInputEdit.Text := TaskDialog.InputText; + + ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - Width; + + FInputEdit.SetBounds(ALeft, Y + 20, ClientWidth - ALeft, 20); + end; + itComboEdit, itComboList: + begin + FInputCombo := TComboBox.Create(self); + FInputCombo.Parent := Self; + FInputCombo.TabStop := true; + FInputCombo.Text := TaskDialog.InputText; + FInputCombo.Items.Assign(TaskDialog.InputItems); + + if TaskDialog.InputType = itComboList then + begin + FInputCombo.Style := csDropDownList; + FInputCombo.ItemIndex := FInputCombo.Items.IndexOf(TaskDialog.InputText); + end; + + ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - Width; + + FInputCombo.SetBounds(ALeft, Y + 20, ClientWidth - ALeft, 20); + end; + itDate: + begin + FInputDate := TDateTimePicker.Create(self); + FInputDate.Parent := Self; + FInputDate.TabStop := true; + ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - Width; + + FInputDate.Top := Y + 20; + FInputDate.Left := ALeft; + end; + itMemo: + begin + FInputMemo := TMemo.Create(self); + FInputMemo.Parent := Self; + FInputMemo.TabStop := true; + FInputMemo.WantReturns := false; + FInputMemo.Lines.Text := TaskDialog.InputText; + ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - Width; + FInputMemo.SetBounds(ALeft, Y + 20, ClientWidth - ALeft, 60); + end; + itCustom: + begin + if Assigned(TaskDialog.InputControl) then + begin + FOldParent := TaskDialog.InputControl.Parent; + TaskDialog.InputControl.Parent := self; + TaskDialog.InputControl.Visible := true; + if Assigned(TaskDialog.OnDialogInputSetText) then + TaskDialog.OnDialogInputSetText(TaskDialog, TaskDialog.InputText) + else + SetWindowText(TaskDialog.InputControl.Handle, Pchar(TaskDialog.InputText)); + + ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + if UseRightToLeftAlignment then + ALeft := Self.ClientWidth - ALeft - Width; + + TaskDialog.InputControl.Left := ALeft; + TaskDialog.InputControl.Top := Y + 20; + + + //TaskDialog.InputControl.SetBounds(ALeft, Y + 20, ClientWidth - ALeft, 20); + end; + end; + end; + + //-- setting Form Width + k := Max(FFooterXSize, Max(IconTextWidth, ButtonGroupWidth)) + FHorzMargin * 2; + k := Max(FExpTextXSize + FHorzMargin * 2, k); + w := Max(w, k); + w := Max(w, FMinFormWidth); + + if w > (Screen.Width - 2 * GetSystemMetrics(SM_CYEDGE)) then + w := Screen.Width - 2 * GetSystemMetrics(SM_CYEDGE); +// if w > 800 then +// w := 800; + + ClientWidth := w; + + if (TaskDialog.InputType = itCustom) and Assigned(TaskDialog.InputControl) then + begin + if TaskDialog.InputControl.Width > ClientWidth - ALeft then + TaskDialog.InputControl.Width := ClientWidth - ALeft; + end; + + if (doProgressBar in TaskDialog.Options) then + begin + FProgressBar.Width := ClientWidth - FHorzMargin*2; + end; + + SetPositions; + + if (TaskDialog.ExpandedText <> '') then + begin + SetExpanded((doExpandedDefault in TaskDialog.Options)); + end; + + Left := (Screen.Width div 2) - (Width div 2); + Top := (Screen.Height div 2) - (Height div 2); + OldFont.Free; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.UpdateDialog; +var + DialogUnits: TPoint; + ButtonSpacing, ButtonGroupWidth, IconTextWidth, X, Y: Integer; + IconID: PChar; + TextRect: TRect; + Msg: string; + DlgType: TTaskDialogIcon; + Buttons: TCommonButtons; + i, w: Integer; + CmBtnGroupWidth, CsBtnGroupWidth: Integer; + r, re: trect; + anchor, stripped: string; + HyperLinks,MouseLink, k, l, n: Integer; + Focusanchor,szFooterText: string; + OldFont: TFont; +begin + if not Assigned(FTaskDialog) then + Exit; + + Msg := FTaskDialog.Instruction; + DlgType := FTaskDialog.Icon; + Buttons := FTaskDialog.CommonButtons; + + OldFont := TFont.Create; + OldFont.Assign(Canvas.Font); + + DialogUnits := GetAveCharSize(Canvas); + w := 0; + + if FTaskDialog.Title <> '' then + Caption := FTaskDialog.Title + else + Caption := GetExeName; + + + if (Caption <> '') then + begin + w := 1000; + GetTextSize(Canvas, Caption, w, l); + w := w + 50; + end; + + ButtonSpacing := MulDiv(mcButtonSpacing, DialogUnits.X, 4); + CmBtnGroupWidth := 0; + CsBtnGroupWidth := 0; + Y := FVertMargin; + //ALeft := 0; + + for i := 0 to FcmBtnList.Count-1 do + begin + CmBtnGroupWidth := CmBtnGroupWidth + TButton(FcmBtnList.Items[i]).Width + ButtonSpacing; + end; + + if not (docommandLinks in FTaskDialog.Options) then + begin + for i := 0 to FcsBtnList.Count-1 do + begin + CsBtnGroupWidth := CsBtnGroupWidth + TButton(FcsBtnList.Items[i]).Width + ButtonSpacing; + end; + end + else + begin + + end; + + // Instruction + Canvas.Font.Size := 11; + Canvas.Font.Style := [fsBold]; + + SetRect(TextRect, 0, 0, Screen.Width div 2, 0); + DrawText(Canvas.Handle, PChar(Msg), Length(Msg) + 1, TextRect, + DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or + DrawTextBiDiModeFlagsReadingOnly); + + Canvas.Font.Assign(OldFont); + + + IconID := IconIDs[DlgType]; + IconTextWidth := TextRect.Right; + if (IconId <> nil) then + begin + Inc(IconTextWidth, 32 + FHorzSpacing); + end; + + if Assigned(Message) then + begin + Message.Caption := Msg; + //ALeft := IconTextWidth - TextRect.Right + FHorzMargin; + //if UseRightToLeftAlignment then + //ALeft := Self.ClientWidth - ALeft - Width; + y := Y + Height + FVertSpacing; + end; + + if (FTaskDialog.RadioButtons.Count > 0) then + begin + FTaskDialog.RadioButtonResult := FTaskDialog.DefaultRadioButton; + + for i := 0 to FRadioList.Count - 1 do + begin + with TRadioButton(FRadioList.Items[i]) do + begin + BoundsRect := TextRect; + Left := FHorzParaMargin + FHorzMargin; + Top := Y; + Width := Self.Width - Left - 4; + GetTextSize(Canvas, Caption, k, l); + w := Max(w, Left + k + FHorzMargin + 20); + end; + end; + end; + + {if (FTaskDialog.ExpandedText <> '') and Assigned(FExpandLabel) then + begin + with FExpandLabel do + begin + Left := ALeft; + Top := Y; + FExpandLabel.Caption := FTaskDialog.ExpandedText; + end; + end; } + + if (FTaskDialog.VerificationText <> '') and Assigned(FVerificationCheck) then + begin + k := 0; + with FVerificationCheck do + begin + BoundsRect := TextRect; + Caption := FTaskDialog.VerificationText; + Left := FHorzMargin; + Top := Y; + GetTextSize(Canvas, Caption, k, l); + w := Max(w, Left + k); + end; + end; + + FFooterXSize := 0; + FFooterYSize := 0; + if (FTaskDialog.Footer <> '') then + begin + r := Rect(FHorzMargin, Y, 300, Y + 26); + x := 0; + szFooterText := StringReplace(FTaskDialog.Footer,'\n','
    ',[rfReplaceAll]); + szFooterText := StringReplace(szFooterText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szFooterText, r, nil, x, y, -1, -1, 1, true, false, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, FFooterXSize, FFooterYSize, hyperlinks, + mouselink, re, nil, nil, 0); + + if Assigned(FFooterIcon) then + begin + FFooterIcon.SetBounds(FHorzMargin, Y, 16, 16); + end; + end; + + ButtonGroupWidth := CmBtnGroupWidth + CsBtnGroupWidth; + if (FTaskDialog.ExpandedText <> '') and Assigned(FExpandButton) then + begin + k := 0; + l := 0; + GetTextSize(Canvas, FTaskDialog.CollapsControlText, k, l); + GetTextSize(Canvas, FTaskDialog.ExpandControlText, n, l); + k := Max(k, n); + ButtonGroupWidth := ButtonGroupWidth + FExpandButton.Width + FHorzSpacing + k + FHorzSpacing; + end; + + + //-- setting Form Width + k := Max(FFooterXSize, Max(IconTextWidth, ButtonGroupWidth)) + FHorzMargin * 2; + w := Max(w, k); + w := Max(w, FMinFormWidth); + + + ClientWidth := w; + + if (doProgressBar in FTaskDialog.Options) and Assigned(FProgressBar) then + begin + FProgressBar.Width := ClientWidth - FHorzMargin*2; + end; + + SetPositions; + + OldFont.Free; + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.SetPositions; +var + DialogUnits: TPoint; + HorzMargin, VertMargin, VertSpacing, ButtonSpacing, ButtonGroupWidth, X, Y: Integer; + i, h: Integer; + CmBtnGroupWidth, CsBtnGroupWidth, BtnH: Integer; + X1, y1: Integer; + r, re, rc: trect; + anchor, stripped: string; + HyperLinks,MouseLink: Integer; + Focusanchor: string; + ExpTextTop, verifTextWidth, k, l: Integer; + szContent: string; + szExpandedText,szFooterText: string; + //lbl:TLabel; + //ExH: integer; +begin + if not Assigned(FTaskDialog) then + Exit; + + DialogUnits := GetAveCharSize(Canvas); + HorzMargin := MulDiv(mcHorzMargin, DialogUnits.X, 4); + VertMargin := MulDiv(mcVertMargin, DialogUnits.Y, 8); + VertSpacing := MulDiv(mcVertSpacing, DialogUnits.Y, 8); + ButtonSpacing := MulDiv(mcButtonSpacing, DialogUnits.X, 4); + CmBtnGroupWidth := 0; + CsBtnGroupWidth := 0; + Y := VertMargin; + + {$IFDEF DELPHI7_LVL} + Message.Transparent := true; + {$ENDIF} + + // Instruction Label + if (Message.Caption <> '') then + y := Y + Message.Height + VertSpacing + else + Message.Visible := False; + + if (FTaskDialog.Content <> '') then + begin + //FContent.Width := ClientWidth - FContent.Left - HorzMargin; + //FContent.Top := Y; + //Y := Y + FContent.Height + VertSpacing; + X1 := 0; + Y1 := 0; + r := GetContentRect; + r := Rect(r.Left, Y, R.Right, Y + 26); + + if (doHyperlinks in FTaskDialog.Options) then + begin + szContent := StringReplace(FTaskDialog.Content,'\n','
    ',[rfReplaceAll]); + szContent := StringReplace(szContent,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szContent, r, nil, x1, y1, -1, -1, 1, true, true, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, FContentXSize, FContentYSize, hyperlinks, + mouselink, re, nil, nil, 0); + end + else + begin + if HasLf(FTaskDialog.Content) then + szContent := StringReplace(FTaskDialog.Content,'\n',#13,[rfReplaceAll]) + else + szContent := FTaskDialog.Content; + + { + if (Message.Caption <> '') then + FContentXSize := Message.Width + else + FContentXSize := 360; + + if FContentXSize < 360 then + FContentXSize := 360; + } + FContentXSize := r.Right - r.Left; + GetTextSize(Canvas, szContent, FContentXSize, FContentYSize); + end; + + rc := GetContentRect; + if (fContentXSize > rc.Right - rc.Left) then + ClientWidth := ClientWidth + (fContentXSize - (rc.Right - rc.Left)); + + y1 := FContentYSize; + if (Message.Caption = '') and Assigned(FIcon) then + begin + y1 := Max(FIcon.Height, Y1); + end; + + Y := Y + Y1 + VertSpacing; + + case FTaskDialog.InputType of + itEdit: FInputEdit.Top := Y - 10; + itComboEdit,itComboList: FInputCombo.Top := Y - 10; + itDate: FInputDate.Top := Y - 10; + itMemo: FInputMemo.Top := Y - 10; + itCustom: if Assigned(FTaskDialog.InputControl) then + FTaskDialog.InputControl.Top := Y - 10; + end; + + end + else + begin + if (FTaskDialog.RadioButtons.Count = 0) and not (doCommandLinks in FTaskDialog.Options) then + Y := Y + VertSpacing; + + if (Message.Caption = '') and Assigned(FIcon) then + Y := Y + VertSpacing + VertMargin; + end; + + if (FTaskDialog.InputType in [itEdit, itComboEdit, itComboList, itDate]) then + begin + Y := Y + 30; + end; + + if (FTaskDialog.InputType in [itMemo]) then + begin + Y := Y + 70; + end; + + if (FTaskDialog.InputType in [itCustom]) then + begin + if Assigned(FTaskDialog.InputControl) then + Y := Y + FTaskDialog.InputControl.Height + 10 + else + Y := Y + 30; + end; + + if (doProgressBar in FTaskDialog.Options) then + begin + if Assigned(FIcon) then + begin + Y := Max(Y, FIcon.Top + FIcon.Height+3); + end; + FProgressBar.Top := Y; + Y := Y + FProgressBar.Height + VertSpacing; + end; + + if (FTaskDialog.RadioButtons.Count > 0) then + begin + for i:= 0 to FRadioList.Count-1 do + begin + TRadioButton(FRadioList.Items[i]).Top := Y; + TRadioButton(FRadioList.Items[i]).Width := ClientWidth - TRadioButton(FRadioList.Items[i]).Left - HorzMargin; + Y := Y + TRadioButton(FRadioList.Items[i]).Height + 4; + end; + Y := Y + VertSpacing - 4; + end; + + FExpTextXSize := 0; + FExpTextYSize := 0; + ExpTextTop := 0; + if (FTaskDialog.ExpandedText <> '') then + begin + if FExpanded then + begin + (*lbl := TLabel.Create(self); + {$IFDEF DELPHI7_LVL} + lbl.WordWrap := true; + {$ENDIF} + lbl.Width := ClientWidth - FExpandLabel.Left - HorzMargin; + lbl.Caption := FTaskDialog.FExpandedText; + ExH := lbl.Height; + lbl.Free; + + FExpandLabel.Top := Y; + FExpandLabel.Width := ClientWidth - FExpandLabel.Left - HorzMargin; + FExpandLabel.Height := ExH; + + Y := Y + FExpandLabel.Height + VertSpacing; + FExpandLabel.Visible := True; + *) + + + X1 := 0; + Y1 := 0; + r := GetExpTextRect; + r := Rect(r.Left, Y, R.Right, Y + 26); + + if (doHyperlinks in FTaskDialog.Options) then + begin + szExpandedText := StringReplace(FTaskDialog.ExpandedText,'\n','
    ',[rfReplaceAll]); + szExpandedText := StringReplace(szExpandedText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szExpandedText, r, nil, x1, y1, -1, -1, 1, true, true, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, FExpTextXSize, FExpTextYSize, hyperlinks, + mouselink, re, nil, nil, 0); + end + else + begin + szExpandedText := StringReplace(FTaskDialog.ExpandedText,'\n',#13,[rfReplaceAll]); + + FExpTextXSize := r.Right - r.Left; + GetTextSize(Canvas, szExpandedText, FExpTextXSize, FExpTextYSize); + end; + + ExpTextTop := Y; + FExpTextTop := ExpTextTop; + Y := Y + FExpTextYSize + VertSpacing; + end + else + begin + //FExpandLabel.Visible := False; + end; + end; + + if not (docommandLinks in FTaskDialog.Options) then + begin + for i:= 0 to FcsBtnList.Count-1 do + begin + CsBtnGroupWidth := CsBtnGroupWidth + TButton(FcsBtnList.Items[i]).Width{ + ButtonSpacing}; + end; + + if (FcsBtnList.Count > 0) then + CsBtnGroupWidth := CsBtnGroupWidth + (FcsBtnList.Count-1) * ButtonSpacing; + end + else + begin + for i:= 0 to FcsBtnList.Count-1 do + begin + if Assigned(FIcon) then + TTaskDialogButton(FcsBtnList.Items[i]).Left := FHorzParaMargin; // FIcon.Left + FIcon.Width + FHorzSpacing; + TTaskDialogButton(FcsBtnList.Items[i]).Top := Y; + TTaskDialogButton(FcsBtnList.Items[i]).Width := ClientWidth - TTaskDialogButton(FcsBtnList.Items[i]).Left - HorzMargin; + Y := Y + TTaskDialogButton(FcsBtnList.Items[i]).Height + 2; + end; + FWhiteWindowHeight := Y; + Y := Y + VertSpacing; + end; + + for i := 0 to FcmBtnList.Count-1 do + begin + CmBtnGroupWidth := CmBtnGroupWidth + TButton(FcmBtnList.Items[i]).Width{ + ButtonSpacing}; + end; + CmBtnGroupWidth := CmBtnGroupWidth + (FcmBtnList.Count-1) * ButtonSpacing; + + verifTextWidth := 0; + if (FTaskDialog.VerificationText <> '') then + begin + GetTextSize(Canvas, FTaskDialog.VerificationText, k, l); + verifTextWidth := k + FVertSpacing * 2; + end; + + ButtonGroupWidth := CsBtnGroupWidth + CmBtnGroupWidth; + + X := (ClientWidth - ButtonGroupWidth - FHorzSpacing - 4); //(ClientWidth - ButtonGroupWidth) div 2; + h := Y; + BtnH := 0; + + if (FTaskDialog.ExpandedText <> '') then + begin + X := (ClientWidth - ButtonGroupWidth - FHorzSpacing - 4); + { + k := 0; + l := 0; + GetTextSize(Canvas, FTaskDialog.CollapsControlText, k, l); + GetTextSize(Canvas, FTaskDialog.ExpandControlText, n, l); + k := Max(k, n); + ButtonGroupWidth := ButtonGroupWidth + FExpandButton.Width + ButtonSpacing + k + FHorzSpacing; + } + end; + + if (FTaskDialog.ExpandedText <> '') then + begin + with FExpandButton do + begin + Top := Y; + Left := FVertMargin; //X; + //Inc(X, FExpandButton.Width + ButtonSpacing); + if (FExpandButton.Height > BtnH) then + BtnH := FExpandButton.Height; + end; + end; + + if (FTaskDialog.VerificationText <> '') and Assigned(FVerificationCheck) then + begin + FVerificationCheck.Width := verifTextWidth - FVertSpacing; //ClientWidth - FVerificationCheck.Left - HorzMargin; + FVerificationCheck.Top := Y + BtnH; + FVerificationCheck.Left := FVertMargin + 3; + //X := FVerificationCheck.Left + FVerificationCheck.Width + FVertMargin; + end; + + if not (docommandLinks in FTaskDialog.Options) then + begin + for i:= 0 to FcsBtnList.Count-1 do + begin + with TButton(FcsBtnList.Items[i]) do + begin + Top := Y; + Left := X; + Inc(X, TButton(FcsBtnList.Items[i]).Width + ButtonSpacing); + //if (i = 0) then + //h := h + TButton(FcsBtnList.Items[i]).Height; + if (TButton(FcsBtnList.Items[i]).Height > BtnH) then + BtnH := TButton(FcsBtnList.Items[i]).Height; + end; + end; + if (FcsBtnList.Count > 0) then + FWhiteWindowHeight := TButton(FcsBtnList.items[0]).Top{ - (FVertSpacing div 2)}; + end; + + for i := 0 to FcmBtnList.Count-1 do + begin + with TButton(FcmBtnList.Items[i]) do + begin + Top := Y; + Left := X; + Inc(X, TButton(FcmBtnList.Items[i]).Width + ButtonSpacing); + //if (i = 0) then + //h := h + TButton(FcmBtnList.Items[i]).Height; + if (TButton(FcmBtnList.Items[i]).Height > BtnH) then + BtnH := TButton(FcmBtnList.Items[i]).Height; + end; + + if (FcmBtnList.Count > 0) then + FWhiteWindowHeight := TButton(FcmBtnList.items[0]).Top{ - (FVertSpacing div 2)}; + end; + + if (FTaskDialog.VerificationText <> '') and Assigned(FVerificationCheck) then + begin + h := h + Max(BtnH, FVerificationCheck.Height + VertSpacing); + y := y + Max(BtnH + FVertSpacing, FVerificationCheck.Height + VertSpacing); + end + else + begin + h := h + BtnH; + if (BtnH > 0) then + y := y + BtnH + FVertSpacing; + end; + + if (FTaskDialog.Footer <> '') then + begin + X1 := 0; + Y1 := 0; + if Assigned(FFooterIcon) then + r := Rect(HorzMargin + 20, Y, Width - HorzMargin, Y + 100) + else + r := Rect(HorzMargin, Y, Width - HorzMargin, Y + 100); + + szFooterText := StringReplace(FTaskDialog.Footer,'\n','
    ',[rfReplaceAll]); + szFooterText := StringReplace(szFooterText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szFooterText, r, nil, x1, y1, -1, -1, 1, true, false, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, FFooterXSize, FFooterYSize, hyperlinks, + mouselink, re, nil, nil, 0); + + y1 := FFooterYSize; + if Assigned(FFooterIcon) then + begin + FFooterIcon.Top := Y; + y1 := Max(Y1, 20); + end; + h := h + Y1 + VertSpacing; + end; + + h := h + VertMargin; + ClientHeight := h; + if (FcmBtnList.Count = 0) and ((docommandLinks in FTaskDialog.Options) or (not (docommandLinks in FTaskDialog.Options) and (FcsBtnList.Count = 0))) then + FWhiteWindowHeight := Height; + + if (ExpTextTop > 0) and (doExpandedFooter in FTaskDialog.Options) then + FWhiteWindowHeight := ExpTextTop; +end; + +//------------------------------------------------------------------------------ + +constructor TAdvMessageForm.CreateNew(AOwner: TComponent; Dummy: Integer); +var + NonClientMetrics: TNonClientMetrics; +begin + inherited CreateNew(AOwner); + NonClientMetrics.cbSize := sizeof(NonClientMetrics); + if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then + Font.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont); + + FExpandButton := nil; + FExpanded := true; + //FExpandLabel := nil; + FExpandControlText := ''; + FCollapsControlText := ''; + FcmBtnList := TList.Create; + FcsBtnList := TList.Create; + FRadioList := TList.Create; + FFooterXSize := 0; + FFooterYSize := 0; + FWhiteWindowHeight := Height; + FHorzParaMargin := 0; + FMinFormWidth := 350; +end; + +//------------------------------------------------------------------------------ + +{procedure TAdvMessageForm.HelpButtonClick(Sender: TObject); +begin + Application.HelpContext(HelpContext); +end;} + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.CustomKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); +begin + if ((ssAlt in Shift) and (Key = VK_F4)) then + Key := 0; + + if (Shift = [ssCtrl]) and (Key = Word('C')) then + begin + Beep; + WriteToClipBoard(GetFormText); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.WMActivate(var M: TWMActivate); +begin + // only do this when parent form is topmost + SetWindowPos( Handle, HWND_TOP, 0,0,0,0, SWP_NOMOVE or SWP_NOSIZE ); +end; + +procedure TAdvMessageForm.WriteToClipBoard(Text: String); +var + Data: THandle; + DataPtr: Pointer; +begin + if OpenClipBoard(0) then + begin + try + Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Length(Text) + 1); + try + DataPtr := GlobalLock(Data); + try + Move(PChar(Text)^, DataPtr^, Length(Text) + 1); + EmptyClipBoard; + SetClipboardData(CF_TEXT, Data); + finally + GlobalUnlock(Data); + end; + except + GlobalFree(Data); + raise; + end; + finally + CloseClipBoard; + end; + end + else + raise Exception.CreateRes(@SCannotOpenClipboard); +end; + +//------------------------------------------------------------------------------ + +function TAdvMessageForm.GetFormText: String; +var + DividerLine, ButtonCaptions: string; + I: integer; +begin + DividerLine := StringOfChar('-', 27) + sLineBreak; + for I := 0 to ComponentCount - 1 do + if Components[I] is TButton then + ButtonCaptions := ButtonCaptions + TButton(Components[I]).Caption + + StringOfChar(' ', 3); + ButtonCaptions := StringReplace(ButtonCaptions,'&','', [rfReplaceAll]); + Result := Format('%s%s%s%s%s%s%s%s%s%s', [DividerLine, Caption, sLineBreak, + DividerLine, Message.Caption, sLineBreak, DividerLine, ButtonCaptions, + sLineBreak, DividerLine]); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.SetExpandButton(const Value: TTaskDialogButton); +begin + if Assigned(FExpandButton) then + FExpandButton.OnClick := nil; + + FExpandButton := Value; + + if Assigned(FExpandButton) then + FExpandButton.OnClick := OnExpandButtonClick; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.OnExpandButtonClick(Sender: TObject); +begin + if Assigned(FExpandButton) then + begin + SetExpanded(not Expanded); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.SetExpanded(Value: Boolean); +begin + if FExpanded then + begin + if not Value then + begin + FExpandButton.Picture.LoadFromResourceName(HInstance, 'TD_EXP'); + FExpandButton.Picture.TransparentColor := clFuchsia; + FExpandButton.PictureHot.LoadFromResourceName(HInstance, 'TD_EXPHOT'); + FExpandButton.PictureHot.TransparentColor := clFuchsia; + FExpandButton.PictureDown.LoadFromResourceName(HInstance, 'TD_EXPDOWN'); + FExpandButton.PictureDown.TransparentColor := clFuchsia; + end; + end + else + begin + if Value then + begin + FExpandButton.Picture.LoadFromResourceName(HInstance, 'TD_COLP'); + FExpandButton.Picture.TransparentColor := clFuchsia; + FExpandButton.PictureHot.LoadFromResourceName(HInstance, 'TD_COLPHOT'); + FExpandButton.PictureHot.TransparentColor := clFuchsia; + FExpandButton.PictureDown.LoadFromResourceName(HInstance, 'TD_COLPDOWN'); + FExpandButton.PictureDown.TransparentColor := clFuchsia; + end; + end; + FExpanded := Value; + SetPositions; + Invalidate; +end; + +//------------------------------------------------------------------------------ + +destructor TAdvMessageForm.Destroy; +begin + FcmBtnList.Free; + FcsBtnList.Free; + FRadioList.Free; + if Assigned(FTimer) then + FTimer.Free; + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.DrawExpandedText; +var + r, re: trect; + anchor, stripped: string; + HyperLinks,MouseLink: Integer; + Focusanchor: string; + xsize, ysize: Integer; + szExpandedText: string; +begin + if not Assigned(FTaskDialog) or (not FExpanded) then + Exit; + + R := GetExpTextRect; + if (FTaskDialog.ExpandedText <> '') then + begin + + if (doHyperlinks in FTaskDialog.Options) then + begin + szExpandedText := StringReplace(FTaskDialog.ExpandedText,'\n','
    ',[rfReplaceAll]); + szExpandedText := StringReplace(szExpandedText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szExpandedText, R, nil, 0, 0, -1, -1, 1, false, false, false, false, False, false, + true, 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, xsize, ysize, + hyperlinks, mouselink, re, nil , nil, 0); + end + else + begin + szExpandedText := StringReplace(FTaskDialog.ExpandedText,'\n',#13,[rfReplaceAll]); + + DrawText(Canvas.Handle,PChar(szExpandedText),Length(szExpandedText), R, DT_EXPANDTABS or DT_LEFT or DT_VCENTER or DT_WORDBREAK or DT_NOPREFIX); + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.DrawContent; +var + r, re: trect; + anchor, stripped: string; + HyperLinks,MouseLink: Integer; + Focusanchor: string; + xsize, ysize: Integer; + szContent: string; +begin + if not Assigned(FTaskDialog) then + Exit; + + R := GetContentRect; + if (FTaskDialog.Content <> '') then + begin + + if (doHyperlinks in FTaskDialog.Options) then + begin + szContent := StringReplace(FTaskDialog.Content,'\n','
    ',[rfReplaceAll]); + szContent := StringReplace(szContent,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szContent, R, nil, 0, 0, -1, -1, 1, false, false, false, false, False, false, + true, 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, xsize, ysize, + hyperlinks, mouselink, re, nil , nil, 0); + end + else + begin + if HasLf(FTaskDialog.Content) then + szContent := StringReplace(FTaskDialog.Content,'\n',#13,[rfReplaceAll]) + else + szContent := FTaskDialog.Content; + DrawText(Canvas.Handle,PChar(szContent),Length(szContent), R, DT_EXPANDTABS or DT_LEFT or DT_VCENTER or DT_WORDBREAK or DT_NOPREFIX); + end; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvMessageForm.GetContentRect: TRect; +var + X, Y: Integer; +begin + Result := Rect(-1, -1, -1, -1); + if Assigned(FTaskDialog) and (FTaskDialog.Content <> '') then + begin + X := FHorzMargin; + if Assigned(FIcon) then + X := FIcon.Left + FIcon.Width + FHorzSpacing; + if (Message.Caption <> '') then + Y := Message.Top + Message.Height + FVertSpacing + else + Y := FVertMargin; + Result := Rect(X, Y, ClientWidth - FHorzMargin, Y + FContentYSize); + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvMessageForm.GetExpTextRect: TRect; +var + X, Y: Integer; +begin + Result := Rect(-1, -1, -1, -1); + if Assigned(FTaskDialog) and FExpanded then + begin + X := FHorzMargin; + if Assigned(FIcon) then + X := FIcon.Left + FIcon.Width + FHorzSpacing; + {if (Message.Caption <> '') then + Y := Message.Top + Message.Height + FVertSpacing + else + Y := FVertMargin; + + if (FTaskDialog.Content <> '') then + y := Y + FContentYSize + FVertSpacing; + + if (doProgressBar in FTaskDialog.Options) then + begin + if Assigned(FIcon) then + begin + Y := Max(Y, FIcon.Top + FIcon.Height+3); + end; + + if Assigned(FProgressBar) then + Y := Y + FProgressBar.Height + FVertSpacing; + end; + + if (FTaskDialog.RadioButtons.Count > 0) then + begin + if (FRadioList.Count > 0) then + Y := Y + TRadioButton(FRadioList.Items[FRadioList.Count-1]).Height + FVertSpacing; + end;} + Y := FExpTextTop; + + Result := Rect(X, Y, ClientWidth - FHorzMargin, Y + FExpTextYSize); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.DrawFooter; +var + r, re: trect; + anchor, stripped: string; + HyperLinks,MouseLink: Integer; + Focusanchor: string; + xsize, ysize, i: Integer; + bmp: TBitmap; + shieldbmp: TBitmap; + IconH: THandle; + szFooterText: string; + +begin + if not Assigned(FTaskDialog) then + Exit; + + if (FTaskDialog.Footer <> '') then + begin + R := GetFooterRect; + + i := R.Top - FVertSpacing; + Canvas.Pen.Color := RGB(223, 223, 223); + Canvas.MoveTo(2, i); + Canvas.LineTo(ClientWidth -3, i); + Canvas.Pen.Color := clWhite; + Canvas.MoveTo(2, i+1); + Canvas.LineTo(ClientWidth -3, i+1); + + if Assigned(FFooterIcon) then + begin + + IconH := LoadImage(0,FFooterIconID,IMAGE_ICON,16,16, LR_SHARED); + + bmp := TBitmap.Create; + bmp.Width := 16; + bmp.Height := 16; + bmp.Transparent := True; + bmp.Canvas.Brush.Color := RGB(240, 240, 240); + bmp.Canvas.Rectangle(0,0,16,16); + //DrawIcon(bmp.Canvas.Handle,0, 0, IconH); + //Canvas.StretchDraw(Rect(R.Left, R.Top-2, R.Left+16, R.Top+14), bmp); + + if FTaskDialog.FooterIcon = tfiShield then + begin + shieldbmp := TBitmap.Create; + shieldbmp.Handle := LoadBitmap(hInstance, 'TD_SHIELD'); + bmp.Canvas.StretchDraw(Rect(0,0,16,16),shieldbmp); + shieldbmp.Free; + end + else + begin + DrawIconEx(bmp.Canvas.Handle, 0, 0, IconH, 16, 16, 0, bmp.Canvas.Brush.Handle, DI_NORMAL); //Replaced DrawIcon + end; + Canvas.Draw(R.Left, R.Top, bmp); + bmp.Free; + + R.Left := R.Left + 20; + end; + szFooterText := StringReplace(FTaskDialog.Footer,'\n','
    ',[rfReplaceAll]); + szFooterText := StringReplace(szFooterText,#10,'
    ',[rfReplaceAll]); + + HTMLDrawEx(Canvas, szFooterText, R, nil, 0, 0, -1, -1, 1, false, false, false, false, False, false, + true, 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, xsize, ysize, + hyperlinks, mouselink, re, nil , nil, 0); + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvMessageForm.GetFooterRect: TRect; +begin + Result := Rect(-1, -1, -1, -1); + if Assigned(FTaskDialog) and (FTaskDialog.Footer <> '') then + begin + Result := Rect(FHorzMargin, ClientHeight - FFooterYSize-10, ClientWidth - FHorzMargin, ClientHeight); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.Paint; +var + i: Integer; + R: TRect; + s: string; + VerInfo: TOSVersionInfo; + +begin + inherited; + i := FWhiteWindowHeight; + + {if (FcmBtnList.Count > 0) then + i := TButton(FcmBtnList.Items[0]).Top + else if (FcsBtnList.Count > 0) then + i := TButton(FcsBtnList.Items[0]).Top;} + + VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); + GetVersionEx(verinfo); + + if (i > 0) then + begin + R := ClientRect; + R.Top := i - (FVertSpacing div 2) ; + Canvas.Brush.Color := RGB(240, 240, 240); + Canvas.FillRect(R); + Canvas.Pen.Color := RGB(223, 223, 223); + Canvas.MoveTo(R.Left, R.Top); + Canvas.LineTo(R.Right, R.Top); + R := ClientRect; + Canvas.Brush.Style := bsClear; + + if (verinfo.dwMajorVersion >= 6) then + Canvas.Pen.Style := psClear + else + Canvas.Pen.Style := psSolid; + + if DRAWBORDER and not IsVista then // only draw on non Vista + begin + Canvas.Pen.Color := clGray; + Canvas.Rectangle(R.Left+1, R.Top+1, R.Right-1, R.Bottom-1); + end; + Canvas.Pen.Style := psSolid; + end; + + DrawContent; + DrawExpandedText; + if Assigned(FTaskDialog) and (FTaskDialog.ExpandedText <> '') and Assigned(FExpandButton) then + begin + if not FExpanded then + s := FTaskDialog.CollapsControlText + else + s := FTaskDialog.ExpandControlText; + + Canvas.Brush.Style := bsClear; + R := Rect(FExpandButton.Left + FExpandButton.Width + FHorzSpacing - 5, FExpandButton.Top, ClientRect.Right, FExpandButton.Top + FExpandButton.Height); + DrawText(Canvas.Handle,PChar(s),Length(s), R, DT_SINGLELINE or DT_LEFT or DT_VCENTER); + end; + DrawFooter; +end; + +//------------------------------------------------------------------------------ + +function TAdvMessageForm.IsAnchor(x, y: integer): string; +var + r: trect; + xsize, ysize: integer; + anchor, stripped: string; + + HyperLinks,MouseLink: Integer; + Focusanchor: string; + re: TRect; + AText: String; +begin + Result := ''; + if not Assigned(FTaskDialog) then + Exit; + + AText := ''; + R := GetFooterRect; + if PtInRect(R, Point(X, Y)) then + begin + if Assigned(FFooterIcon) then + begin + R.Left := R.Left + 20; + end; + AText := FTaskDialog.Footer; + end + else + begin + R := GetContentRect; + if PtInRect(R, Point(X, y)) then + AText := FTaskDialog.Content + else + begin + R := GetExpTextRect; + if PtInRect(R, Point(X, y)) then + AText := FTaskDialog.ExpandedText; + end; + end; + + AText := StringReplace(AText,'\n','
    ',[rfReplaceAll,rfIgnoreCase]); + AText := StringReplace(AText,#10,'
    ',[rfReplaceAll,rfIgnoreCase]); + + Anchor := ''; + if (AText <> '') then + begin + if HTMLDrawEx(Canvas, AText, r, nil, x, y, -1, -1, 1, true, false, false, true, true, false, true, + 1.0, clBlue, clNone, clNone, clGray, anchor, stripped, focusanchor, xsize, ysize, hyperlinks, + mouselink, re, nil, nil, 0) then + Result := anchor; + end; +end; + +procedure TAdvMessageForm.KeyDown(var Key: Word; Shift: TShiftSTate); +var + s: string; +begin + inherited; + if (Key = VK_F1) then + begin + if FTaskDialog.HelpContext <> 0 then + Application.HelpContext(FTaskDialog.HelpContext); + end; + if (Key = ord('C')) and (ssCtrl in Shift) then + begin + // got ctrl-c + s := FTaskDialog.FTitle + #13#10; + s := s + FTaskDialog.FInstruction + #13#10; + s := s + FTaskDialog.FContent; + clipboard.Open; + clipboard.AsText := s; + clipboard.Close; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + Anchor: string; +begin + inherited; + Anchor := IsAnchor(X, Y); + if Anchor <> '' then + begin + if not Assigned(FTaskDialog.OnDialogHyperlinkClick) then + begin + if (Pos('://', anchor) > 0) then + VistaShellOpen(0, 'iexplore.exe', Anchor); + end; + + if Assigned(FTaskDialog.OnDialogHyperlinkClick) then + FTaskDialog.OnDialogHyperlinkClick(FTaskDialog, Anchor); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.MouseMove(Shift: TShiftState; X, Y: Integer); +var + anchor: string; +begin + anchor := IsAnchor(x, y); + if (Anchor <> '') then + begin + if (self.Cursor = crDefault) or (fAnchor <> Anchor) then + begin + fAnchor := Anchor; + self.Cursor := crHandPoint; + //if fAnchorHint then + //Application.CancelHint; + //if Assigned(fAnchorEnter) then fAnchorEnter(self, anchor); + end; + end + else + begin + if (self.Cursor = crHandPoint) then + begin + self.Cursor := crDefault; + //if assigned(fAnchorExit) then fAnchorExit(self, anchor); + end; + end; + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +begin + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.OnTimer(Sender: TObject); +var + State: TTaskDialogProgressState; + Pos: Integer; +begin + if Assigned(FTaskDialog) then + begin + if Assigned(FTaskDialog.OnDialogTimer) then + FTaskDialog.OnDialogTimer(FTaskDialog); + + if Assigned(FTaskDialog.OnDialogProgress) then + begin + Pos := FProgressBar.Position; + FTaskDialog.OnDialogProgress(FTaskDialog, Pos, State); + FProgressBar.Position := Pos; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.ClickButton(ButtonID: integer); +var + Btn: TButton; + TaskBtn: TTaskDialogButton; +begin + TaskBtn := nil; + Btn := GetButton(ButtonID, TaskBtn); + if Assigned(Btn) then + Btn.Click + else if Assigned(TaskBtn) then + TaskBtn.Click; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.EnableButton(ButtonID: integer; + Enabled: boolean); +var + Btn: TButton; + TaskBtn: TTaskDialogButton; +begin + TaskBtn := nil; + Btn := GetButton(ButtonID, TaskBtn); + if Assigned(Btn) then + Btn.Enabled := Enabled + else if Assigned(TaskBtn) then + TaskBtn.Enabled := Enabled; +end; + +//------------------------------------------------------------------------------ + +function TAdvMessageForm.GetButton(ButtonID: Integer; var TaskButton: TTaskDialogButton): TButton; +var + i, j: Integer; +begin + j := 0; + Result := nil; + for i := 0 to FcmBtnList.Count-1 do + begin + Inc(j); + if (j >= ButtonID) then + begin + TButton(FcmBtnList.Items[i]).Enabled := Enabled; + Result := TButton(FcmBtnList.Items[i]); + break; + end; + end; + + if not Assigned(Result) then + begin + j := 99; + for i := 0 to FcsBtnList.Count-1 do + begin + Inc(j); + if (j >= ButtonID) then + begin + if (doCommandLinks in FTaskDialog.Options) then + begin + TTaskDialogButton(FcsBtnList.Items[i]).Enabled := Enabled; + TaskButton := TTaskDialogButton(FcsBtnList.Items[i]); + end + else + begin + TButton(FcsBtnList.Items[i]).Enabled := Enabled; + Result := TButton(FcsBtnList.Items[i]); + end; + break; + end; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TTaskDialogButton.Click; +var + Form: TCustomForm; +begin + Form := GetParentForm(Self); + if Form <> nil then + Form.ModalResult := ModalResult; + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.OnVerifyClick(Sender: TObject); +begin + if not Assigned(FTaskDialog) or not Assigned(FVerificationCheck) then + Exit; + + FTaskDialog.VerifyResult := FVerificationCheck.Checked; + + if Assigned(FVerificationCheck) and Assigned(FTaskDialog.OnDialogVerifyClick) then + FTAskDialog.OnDialogVerifyClick(FTaskDialog, FVerificationCheck.Checked); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.OnRadioClick(Sender: TObject); +begin + if not Assigned(FTaskDialog) or not Assigned(FRadioList) then + Exit; + + FTaskDialog.RadioButtonResult := FRadioList.IndexOf(Sender) + 200; + if Assigned(FTaskDialog) and Assigned(FTaskDialog.OnDialogRadioClick) then + FTAskDialog.OnDialogRadioClick(FTaskDialog, FTaskDialog.RadioButtonResult); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.DoClose(var Action: TCloseAction); +var + CanClose: Boolean; + s: string; + a: array[0..255] of char; + +begin + CanClose := True; + + if Assigned(FTaskDialog) and Assigned(FTaskDialog.OnDialogClose) then + begin + FTaskDialog.OnDialogClose(FTaskDialog, CanClose); + end; + + case FTaskDialog.InputType of + itEdit: FTaskDialog.InputText := FInputEdit.Text; + itComboEdit, itComboList: FTaskDialog.InputText := FInputCombo.Text; + itDate: FTaskDialog.InputText := DateToStr(FInputDate.Date); + itMemo: FTaskDialog.InputText := FInputMemo.Lines.Text; + itCustom: + begin + if Assigned(FTaskDialog.InputControl) then + begin + GetWindowText(FTaskDialog.InputControl.Handle, a, sizeof(a)); + s := strpas(a); + if Assigned(FTaskDialog.OnDialogInputGetText) then + begin + s := ''; + FTaskDialog.OnDialogInputGetText(Self, s); + end; + FTaskDialog.InputText := s; + FTaskDialog.InputControl.Visible := false; + FTaskDialog.InputControl.Parent := FOldParent; + end; + end; + end; + + if not CanClose then + Action := caNone; + inherited; +end; + +procedure TAdvMessageForm.DoShow; +var + defBtn: integer; +begin + inherited; + + defBtn := -1; + + if FTaskDialog.DefaultButton <> -1 then + begin + if (FTaskDialog.DefaultButton - 100 >= 0) and (FTaskDialog.DefaultButton - 100 < FTaskDialog.CustomButtons.Count) then + defBtn := FTaskDialog.DefaultButton - 100; + end; + + if defBtn <> -1 then + begin + if (docommandLinks in FTaskDialog.Options) then + TTaskDialogButton(FcsBtnList[defBtn]).SetFocus + else + TCustomControl(FcsBtnList[defBtn]).SetFocus; + end + else + begin + if (FTaskDialog.DefaultButton >= 0) and (FTaskDialog.DefaultButton < FCmBtnList.Count) then + begin + if TCustomControl(FcmBtnList[FTaskDialog.DefaultButton]).Enabled then + TCustomControl(FcmBtnList[FTaskDialog.DefaultButton]).SetFocus; + end; + end; + + + case FTaskDialog.InputType of + itEdit: FInputEdit.SetFocus; + itComboEdit, itComboList: FInputCombo.SetFocus; + itDate: FInputDate.SetFocus; + itMemo: FInputMemo.SetFocus; + itCustom: FTaskDialog.InputControl.SetFocus; + end; + +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.OnButtonClick(Sender: TObject); +begin + if not Assigned(FTaskDialog) or not Assigned(FcsBtnList) then + Exit; + + if Assigned(FTaskDialog) and Assigned(FTaskDialog.onDialogButtonClick) then + FTaskDialog.OnDialogButtonClick(FTaskDialog, FcsBtnList.IndexOf(Sender) + 100); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvMessageForm.CMDialogChar(var Message: TCMDialogChar); +var + I: Integer; +begin + if Assigned(FTaskDialog) and (docommandLinks in FTaskDialog.Options) then + begin + for I := 0 to FcsBtnList.Count-1 do + begin + if (TControl(FcsBtnList[I]) is TTaskDialogButton) and IsAccel(Message.CharCode, TTaskDialogButton(FcsBtnList[I]).Caption) and CanFocus then + begin + TTaskDialogButton(FcsBtnList[I]).Click; + Message.Result := 1; + Exit; + end; + end; + end; + + if (FTaskDialog.ExpandControlText <> '') and Expanded then + begin + if IsAccel(Message.CharCode, FTaskDialog.FExpandControlText) then + begin + OnExpandButtonClick(Self); + end; + end + else + if (FTaskDialog.CollapsControlText <> '') and not Expanded then + if IsAccel(Message.CharCode, FTaskDialog.FCollapsControlText) then + begin + OnExpandButtonClick(Self); + end; + + inherited; + + + if Assigned(FTaskDialog) and (doAllowDialogCancel in FTaskDialog.Options) and (Message.CharCode = VK_ESCAPE) then + begin + Self.Close; + end; +end; + + +function CoreShowmessage( + const Title, // dialog window title + Instruction, // the part of the message shown in blue + content, // additional message if desired + verify: string; // ex Do Not Show this Again + tiIcon: tTaskDialogIcon): boolean; +var + td: TCustomAdvTaskDialog; +begin + td := TCustomAdvTaskDialog.Create(application); + td.Title := Title; + td.Instruction := instruction; + td.Content := Content; + td.VerificationText := verify; + td.icon := tiIcon; + td.Execute; + result := (verify <> '') and td.VerifyResult; + td.free; +end {CoreShowmessage}; + +//===================================================================== +// This returns false unless verify is not blank AND the verify checkbox +// was not checked. +//--------------------------------------------------------------------- +function AdvShowMessage( + const Title, // dialog window title + Instruction, // the part of the message shown in blue + content, // additional message if desired + verify: string; // ex Do Not Show this Again + tiIcon: tTaskDialogIcon): boolean; overload; +begin + result := coreShowmessage(title, instruction,content,verify,tiIcon); +end { tmsShowMessage }; + +function AdvShowmessage(const Instruction: string):boolean; overload; +begin // Only instruction . tiInformation + result := CoreShowMessage('',Instruction,'','',tiInformation); +end; + +function AdvShowmessage(const Title, Instruction: string):boolean; overload; +begin // title, instruction tiInformation + result := CoreShowMessage(Title,Instruction,'','',tiInformation); +end; + +function AdvShowmessage(const Title, Instruction: string;tiIcon: TTaskDialogIcon): boolean; overload; +begin + result := CoreShowMessage(Title,Instruction,'','',tiIcon); +end; + +function AdvShowMessageFmt(const Instruction: string; Parameters: array of const): boolean; +begin + Result := AdvShowmessage(Format(Instruction,Parameters)); +end; + +function AdvMessageBox(hWnd: HWND; lpInstruction, lpTitle: PChar; flags: UINT): Integer; +const + MB_CANCELTRYCONTINUE = $00000006; // missing from windows unit so probably never be used +var + td: TCustomAdvTaskDialog; + res: integer; + def: integer; + num: integer; + task: tCommonButton; + txt: string; +begin + td := TCustomAdvTaskDialog.Create(application); + td.Title := lptitle; + td.instruction := lpInstruction; + + // extract the icon from flags + case MB_ICONMASK and flags of + MB_ICONEXCLAMATION: td.Icon := tiWarning; // Exclamation mark= MB_ICONWARNING + MB_ICONINFORMATION: td.Icon := tiInformation; // Circled I = MB_ICONASTERISK + MB_ICONQUESTION: td.Icon := tiQuestion; // Question (api says don't use any more + MB_ICONSTOP: td.Icon := tiError; //Stop sign = MB_ICONERROR & MB_ICONHAND + end; + + // extract the buttons from flags + // MessageBox() Flags from Windows help file + // MB_ABORTRETRYIGNORE + // The message box contains three push buttons: Abort, Retry, and Ignore. + // MB_CANCELTRYCONTINUE + // Microsoft Windows 2000/XP: The message box contains three push buttons: Cancel, Try Again, Continue. Use this message box type instead of MB_ABORTRETRYIGNORE. + // MB_HELP + // Windows 95/98/Me, Windows NT 4.0 and later: Adds a Help button to the message box. When the user clicks the Help button or presses F1, the system sends a WM_HELP message to the owner. + // MB_OK + // The message box contains one push button: OK. This is the default. + // MB_OKCANCEL + // The message box contains two push buttons: OK and Cancel. + // MB_RETRYCANCEL + // The message box contains two push buttons: Retry and Cancel. + // MB_YESNO + // The message box contains two push buttons: Yes and No. + // MB_YESNOCANCEL + // The message box contains three push buttons: Yes, No, and Cancel. + td.Commonbuttons := []; + txt := ''; + case MB_TYPEMASK and flags of + MB_ABORTRETRYIGNORE: txt := SAbortButton + #10 + SRetryButton + #10 + SIgnoreButton; + MB_CANCELTRYCONTINUE: txt := SCancelButton + #10 + SRetryButton + #10 + SContinue; + MB_OK: td.Commonbuttons := [cbOK]; + MB_RETRYCANCEL: txt := SRetryButton + #10 + SCancelButton; + MB_OKCANCEL: td.CommonButtons := [cbOK,cbCancel]; + MB_YESNOCANCEL: td.Commonbuttons := [cbYes, cbNO, cbCancel]; + MB_YESNO: td.CommonButtons := [cbYes, cbNO]; + end; + + + + if MB_HELP and flags <> 0 then + begin + if length(txt) > 0 then + txt := txt + #10; + txt := txt + SHelpButton; + end; + if txt <> '' then + td.CustomButtons.text := txt; + + // deal with mbDefbutton1, 2, 3 & 4 + def := 0; + if mb_DefButton1 and flags <> 0 then + def := 1; + if mb_DefButton2 and flags <> 0 then + def := 2; + if mb_DefButton3 and flags <> 0 then + def := 3; + if mb_DefButton4 and flags <> 0 then + def := 4; + if def > 0 then + begin // have to set default button + num := td.CustomButtons.count; + if num <= def then + td.DefaultButton := 99 + def + else + begin + // I think this compiles on supported delphi compilers + for task := cbOK to cbClose do + begin + if task in td.CommonButtons then + begin + inc(num); + if num = def then + begin + case task of + cbOK: td.Defaultbutton := idOK; + cbYes: td.Defaultbutton := idYES; + cbNo: td.Defaultbutton := idNO; + cbCancel: td.Defaultbutton := idCANCEL; + cbRetry: td.Defaultbutton := idRETRY; + cbClose: td.Defaultbutton := idCLOSE; + end; + break; + end; + end; + end; + end; + end; + + if (cbCancel in td.CommonButtons) then + td.Options := td.Options + [doAllowDialogCancel]; + + // Deal with mbAppModal, mbSystemModal and mbtaskModal + // not sure what to do with these (I personally haven't used them. + result := 0; + res := td.Execute; + case res of + 1: result := IDOK; + 2: result := IDCANCEL; + 3: result := IDABORT; + 4: result := IDRETRY; + 5: result := IDIGNORE; + 6: result := IDYES; + 7: result := IDNO; + else + begin + case MB_TYPEMASK and flags of + MB_ABORTRETRYIGNORE: + case res of + 100: result := IDABORT; + 101: result := IDRETRY; + 102: result := IDIGNORE; + end; + MB_CANCELTRYCONTINUE: + case res of + 100: result := IDCANCEL; + {$IFDEF DELPHI9_LVL} + 101: result := IDTRYAGAIN; + 102: result := IDCONTINUE; + {$ENDIF} + end; + MB_RETRYCANCEL: + case res of + 100: result := IDRETRY; + 101: result := IDCANCEL; + end; + end; + end; + end; + td.Free; +end; + +//================================================================================================== + +function AdvTaskMessageDlg(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer; +begin + Result := AdvTaskMessageDlgPosHelp(Title, Msg, DlgType, Buttons, HelpCtx, -1, -1, ''); +end; + +//-------------------------------------------------------------------------------------------------- + +function AdvTaskMessageDlg(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): Integer; overload; +begin + Result := AdvTaskMessageDlgPosHelp(Title, Msg, DlgType, Buttons, HelpCtx, + -1, -1, '', DefaultButton); +end; + +//-------------------------------------------------------------------------------------------------- + +function AdvTaskMessageDlgPos(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer; +begin + Result := AdvTaskMessageDlgPosHelp(Title, Msg, DlgType, Buttons, HelpCtx, X, Y, ''); +end; + +//-------------------------------------------------------------------------------------------------- + +function AdvTaskMessageDlgPos(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; + DefaultButton: TMsgDlgBtn): Integer; overload; +begin + Result := AdvTaskMessageDlgPosHelp(Title, Msg, DlgType, Buttons, HelpCtx, + X, Y, '', DefaultButton); +end; + +//-------------------------------------------------------------------------------------------------- + +function AdvTaskMessageDlgPosHelp(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; + const HelpFileName: string): Integer; +begin + Result := AdvTaskMessageDlgPosHelp(Title, Msg, DlgType, Buttons, HelpCtx, X, Y, + HelpFileName, mbYes); +end; + + +function AdvMessageDlg(const Instruction: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer; overload; +begin + // passes mbHelp as the default button since we can't deal with help anyway + Result := AdvMessageDlg(Instruction,Dlgtype,Buttons,HelpCtx,mbHelp); +end; + +function AdvMessageDlg(const Instruction: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn): Integer; overload; +var + td: TCustomAdvTaskDialog; + ray: array[0..3] of integer; + res: integer; +begin + td := TCustomAdvTaskDialog.Create(Application); + td.Instruction := instruction; + + case DlgType of + mtWarning: + begin + td.Icon := tiWarning; + td.Title := SMsgDlgWarning; + end; + mtError: + begin + td.Icon := tiError; + td.Title := SMsgDlgError; + end; + mtInformation: + begin + td.Icon := tiInformation; + td.Title := SMsgDlgInformation; + end; + mtConfirmation: + begin + td.Icon := tiQuestion; + td.Title := SMsgDlgConfirm; + end; + end; + + fillchar(ray,sizeof(ray),0); + td.CommonButtons := []; + +// TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, +// mbAll, mbNoToAll, mbYesToAll, mbHelp); + + if (mbYes in Buttons) then + td.CommonButtons := td.CommonButtons + [cbYes]; + + if (mbNo in Buttons) then + td.CommonButtons := td.CommonButtons + [cbNo]; + + if (mbOK in Buttons) then + td.CommonButtons := td.CommonButtons + [cbOK]; + + if (mbCancel in Buttons) then + td.CommonButtons := td.CommonButtons + [cbCancel]; + + if (mbAbort in Buttons) then + td.CommonButtons := td.CommonButtons + [cbClose]; + + if (mbRetry in Buttons) then + td.CommonButtons := td.CommonButtons + [cbRetry]; + + if (mbIgnore in Buttons) then + begin + td.CustomButtons.Add(SMsgDlgIgnore); + ray[0] := mrIgnore; + end; + + if (mbAll in Buttons) then + begin + ray[td.custombuttons.Count] := mrALL; + td.CustomButtons.Add(SMsgDlgAll); + end; + + if (mbNoToAll in buttons) then + begin + ray[td.custombuttons.Count] := mrNoToAll; + td.CustomButtons.Add(SMsgDlgNoToAll); + end; + + if (mbYesToAll in buttons) then + begin + ray[td.custombuttons.Count] := mrYesToAll; + td.Custombuttons.Add(SMsgDlgYesToAll); + end; + + if (mbHelp in buttons) then + begin + ray[td.Custombuttons.Count] := mrNone; + td.Custombuttons.Add(SMsgDlgHelp); + end; + + case DefaultButton of + mbYes: td.DefaultButton := integer(mrYes); + mbNo: td.DefaultButton := integer(mrNo); + mbCancel: td.DefaultButton := integer(mrCancel); + mbOK: td.DefaultButton := integer(mrOK); + mbAbort: td.DefaultButton := integer(mrAbort); + mbRetry: td.DefaultButton := integer(mrRetry); + mbIgnore: td.DefaultButton := integer(mrIgnore); + end; + + td.HelpContext := HelpCtx; + td.Options := td.Options + [doAllowDialogCancel]; + + + result := 0; + res := td.Execute; + + case res of + 1: Result := mrOk; + 2: Result := mrCancel; + 3: Result := mrAbort; + 4: Result := mrRetry; + 6: Result := mrYes; + 7: Result := mrNo; + else + if (res > 99) and (res < 100 + high(ray)) then + begin + result := ray[res - 100]; + + if (Result = mrNone) and (td.HelpContext > 0) then + begin + Application.HelpContext(td.HelpContext); + end; + end; + end; +end; + + +//-------------------------------------------------------------------------------------------------- + +function AdvTaskMessageDlgPosHelp(const Title, Msg: string; DlgType: TMsgDlgType; + Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; + const HelpFileName: string; DefaultButton: TMsgDlgBtn): Integer; +var + td: TAdvTaskDialog; + ray: array[0..3] of integer; + res: integer; +begin + td := TAdvTaskDialog.Create(Application); + try + td.Instruction := Title; + td.Content := msg; + + case DlgType of + mtWarning: + begin + td.Icon := tiWarning; + td.Title := SMsgDlgWarning; + end; + mtError: + begin + td.Icon := tiError; + td.Title := SMsgDlgError; + end; + mtInformation: + begin + td.Icon := tiInformation; + td.Title := SMsgDlgInformation; + end; + mtConfirmation: + begin + td.Icon := tiShield; + td.Title := SMsgDlgConfirm; + end; + end; + + fillchar(ray,sizeof(ray),0); + td.CommonButtons := []; + + // TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAdvrt, mbRetry, mbIgnore, + // mbAll, mbNoToAll, mbYesToAll, mbHelp); + + if (mbYes in Buttons) then + td.CommonButtons := td.CommonButtons + [cbYes]; + + if (mbNo in Buttons) then + td.CommonButtons := td.CommonButtons + [cbNo]; + + if (mbOK in Buttons) then + td.CommonButtons := td.CommonButtons + [cbOK]; + + if (mbCancel in Buttons) then + td.CommonButtons := td.CommonButtons + [cbCancel]; + + if (mbAbort in Buttons) then + td.CommonButtons := td.CommonButtons + [cbClose]; + + if (mbRetry in Buttons) then + td.CommonButtons := td.CommonButtons + [cbRetry]; + + + if (mbIgnore in Buttons) then + begin + td.CustomButtons.Add(SMsgDlgIgnore); + ray[0] := mrIgnore; + end; + + if (mbAll in Buttons) then + begin + ray[td.custombuttons.Count] := mrALL; + td.CustomButtons.Add(SMsgDlgAll); + end; + + if (mbNoToAll in buttons) then + begin + ray[td.custombuttons.Count] := mrNoToAll; + td.CustomButtons.add(SMsgDlgNoToAll); + end; + + if (mbYesToAll in buttons) then + begin + ray[td.custombuttons.Count] := mrYesToAll; + td.Custombuttons.Add(SMsgDlgYesToAll); + end; + + if (mbHelp in buttons) then + begin + ray[td.Custombuttons.Count] := mrNone; + td.Custombuttons.Add(SMsgDlgHelp); + end; + + case DefaultButton of + mbYes: td.DefaultButton := integer(mrYes); + mbNo: td.DefaultButton := integer(mrNo); + mbCancel: td.DefaultButton := integer(mrCancel); + mbOK: td.DefaultButton := integer(mrOK); + mbAbort: td.DefaultButton := integer(mrAbort); + mbRetry: td.DefaultButton := integer(mrRetry); + mbIgnore: td.DefaultButton := integer(mrIgnore); + end; + + td.HelpContext := HelpCtx; + td.Options := td.Options + [doAllowDialogCancel]; + + Result := 0; + res := td.Execute; + case res of + 1: Result := mrOk; + 2: Result := mrCancel; + 3: Result := mrAbort; + 4: Result := mrRetry; + 6: Result := mrYes; + 7: Result := mrNo; + else + if (res > 99) and (res < 100+high(ray)) then + begin + result := ray[res-100]; + + if (Result = mrNone) and (td.HelpContext > 0) then + begin + Application.HelpContext(td.HelpContext); + end; + end; + end; + finally + td.Free; + end; +end; + + +function AdvInputQueryDlg(ACaption, APrompt: string; var Value: string):boolean; +var + AID: TAdvInputTaskDialog; +begin + AID := TAdvInputTaskDialog.Create(Application); + AID.Instruction := APrompt; + AID.Title := ACaption; + AID.InputText := Value; + AID.InputType := itEdit; + AID.CommonButtons := [cbOK, cbCancel]; + Result := AID.Execute = mrOK; + Value := AID.InputText; +end; + +//------------------------------------------------------------------------------ + +procedure Register; +begin + RegisterComponents('TMS',[TAdvTaskDialog, TAdvInputTaskDialog]); +end; + +//------------------------------------------------------------------------------ + + +{ TAdvInputTaskDialog } + +constructor TAdvInputTaskDialog.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FInputType := itEdit; + Options := Options + [doAllowDialogCancel]; +end; + +function TAdvInputTaskDialog.Execute: integer; +begin + Result := AdvMessageDlgPos(Self, -1, -1); +end; + + +initialization + //cbOK, cbYes, cbNo, cbCancel, cbRetry, cbClose); + ButtonCaptions[cbOK] := @SMsgDlgOK; + ButtonCaptions[cbYes] := @SMsgDlgYes; + ButtonCaptions[cbNo] := @SMsgDlgNo; + ButtonCaptions[cbCancel] := @SMsgDlgCancel; + ButtonCaptions[cbRetry] := @SMsgDlgRetry; + ButtonCaptions[cbClose] := @SMsgDlgAbort; + + Captions[tiBlank] := nil; + Captions[tiWarning] := @SMsgDlgWarning; + Captions[tiQuestion] := @SMsgDlgConfirm; + Captions[tiError] := @SMsgDlgError; + Captions[tiShield] := @SMsgDlgInformation; + + +{$IFDEF FREEWARE} + if (FindWindow('TApplication', nil) = 0) OR + (FindWindow('TAppBuilder', nil) = 0) then + begin + MessageBox(0,'Application uses trial version of TMS components','Info',MB_OK); + end +{$ENDIF} + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.res b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialog.res new file mode 100644 index 0000000000000000000000000000000000000000..5028366a69a8e4676e68cd089bf369f31f1b0824 GIT binary patch literal 20004 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 Sxvo8XVbzem(eHWXasLhF1RGrd literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogDE.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogDE.pas new file mode 100644 index 0000000..0434010 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogDE.pas @@ -0,0 +1,84 @@ +{***************************************************************************} +{ TTaskDialog component } +{ for Delphi & C++Builder } +{ version 1.2 } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2007 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit TaskDialogDE; + +interface + +{$I TMSDEFS.INC} + +uses + Classes, Graphics, Comctrls, Windows, Forms, TypInfo, Dialogs, ExtCtrls, + Controls, ExtDlgs, TaskDialog +{$IFDEF DELPHI6_LVL} + {$IFNDEF TMSDOTNET} + , DesignIntf, DesignEditors, ContNrs + {$ENDIF} + {$IFDEF TMSDOTNET} + , Borland.Vcl.design.DesignIntf, Borland.Vcl.design.DesignEditors, ContNrs + {$ENDIF} +{$ELSE} + , DsgnIntf +{$ENDIF} + ; + +type + + TTaskDialogEditor = class(TDefaultEditor) + public + function GetVerb(Index: Integer):string; override; + function GetVerbCount: Integer; override; + procedure ExecuteVerb(Index: Integer); override; + end; + +implementation + +{ TTaskDialogEditor } + +procedure TTaskDialogEditor.ExecuteVerb(Index: Integer); +var + AppIsParent: boolean; +begin + inherited; + case Index of + 0: + begin + AppIsParent := TAdvTaskDialog(Component).ApplicationIsParent; + TAdvTaskDialog(Component).ApplicationIsParent := true; + TAdvTaskDialog(Component).Execute; + TAdvTaskDialog(Component).ApplicationIsParent := AppIsParent; + end; + end; +end; + +function TTaskDialogEditor.GetVerb(Index: Integer): string; +begin + case Index of + 0: Result := 'Preview'; + end; +end; + +function TTaskDialogEditor.GetVerbCount: Integer; +begin + Result := 1; +end; + + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogEx.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogEx.pas new file mode 100644 index 0000000..c1a40fe --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogEx.pas @@ -0,0 +1,300 @@ +{***************************************************************************} +{ TTaskDialogEx component } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 2007 - 2008 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit TaskDialogEx; + +{$I TMSDEFS.INC} + +interface + +uses + Classes, Windows, Messages, Forms, Dialogs, SysUtils, StdCtrls, Graphics, Consts, Math, + ExtCtrls, Controls, TaskDialog, AdvGlowButton, AdvOfficeButtons; + +type + TButtonCreatedEvent = procedure(Sender: TObject; Button: TAdvGlowButton) of object; + + TAdvTaskDialogEx = class(TAdvTaskDialog) + private + FOnButtonCreated: TButtonCreatedEvent; + FAppearance: TGlowButtonAppearance; + protected + function CreateRadioButton(AOwner: TComponent): TWinControl; override; + procedure SetRadioButtonState(Btn: TWinControl; Checked: boolean); override; + procedure SetRadioButtonCaption(Btn: TWinControl; Value: string); override; + function CreateButton(AOwner: TComponent): TWinControl; override; + procedure InitRadioButton(AOwner: TForm; Btn: TWinControl; btnIndex: Integer; OnClickEvent : TNotifyEvent); override; + procedure SetButtonCaption(aButton: TWinControl; Value: TCaption); override; + procedure SetButtonCancel(aButton: TWinControl; Value: Boolean); override; + procedure SetButtonDefault(aButton: TWinControl; Value: Boolean); override; + procedure SetButtonModalResult(aButton: TWinControl; Value: Integer); override; + function GetButtonModalResult(aButton: TWinControl): Integer; override; + public + property Appearance: TGlowButtonAppearance read FAppearance write FAppearance; + property OnButtonCreated:TButtonCreatedEvent read FOnButtonCreated write FOnButtonCreated; + end; + + TAdvInputTaskDialogEx = class(TAdvInputTaskDialog) + private + FOnButtonCreated: TButtonCreatedEvent; + FAppearance: TGlowButtonAppearance; + protected + function CreateRadioButton(AOwner: TComponent): TWinControl; override; + procedure SetRadioButtonState(Btn: TWinControl; Checked: boolean); override; + procedure SetRadioButtonCaption(Btn: TWinControl; Value: string); override; + function CreateButton(AOwner: TComponent): TWinControl; override; + procedure InitRadioButton(AOwner: TForm; Btn: TWinControl; btnIndex: Integer; OnClickEvent : TNotifyEvent); override; + procedure SetButtonCaption(aButton: TWinControl; Value: TCaption); override; + procedure SetButtonCancel(aButton: TWinControl; Value: Boolean); override; + procedure SetButtonDefault(aButton: TWinControl; Value: Boolean); override; + procedure SetButtonModalResult(aButton: TWinControl; Value: Integer); override; + function GetButtonModalResult(aButton: TWinControl): Integer; override; + public + property Appearance: TGlowButtonAppearance read FAppearance write FAppearance; + property OnButtonCreated:TButtonCreatedEvent read FOnButtonCreated write FOnButtonCreated; + end; + + +procedure Register; + +implementation + +//------------------------------------------------------------------------------ + +procedure Register; +begin + RegisterComponents('TMS',[TAdvTaskDialogEx]); +end; + +//------------------------------------------------------------------------------ + +{ TAdvTaskDialogEx } + +function TAdvTaskDialogEx.CreateButton(AOwner: TComponent): TWinControl; +begin + Result := TAdvGlowButton.Create(AOwner); + if Assigned(FAppearance) then + (Result as TAdvGlowButton).Appearance := FAppearance; + (Result as TAdvGlowButton).TabStop := true; + if Assigned(FOnButtonCreated) then + FOnButtonCreated(Self,(Result as TAdvGlowButton)); +end; + +//------------------------------------------------------------------------------ + +function TAdvTaskDialogEx.CreateRadioButton(AOwner: TComponent): TWinControl; +begin + Result := TAdvOfficeRadioButton.Create(AOwner); +end; + +//------------------------------------------------------------------------------ + +function TAdvTaskDialogEx.GetButtonModalResult( + aButton: TWinControl): Integer; +begin + Result := mrNone; + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + Result := TAdvGlowButton(aButton).ModalResult; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.SetButtonCancel(aButton: TWinControl; + Value: Boolean); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).Cancel := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.SetButtonCaption(aButton: TWinControl; + Value: TCaption); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).Caption := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.SetButtonDefault(aButton: TWinControl; + Value: Boolean); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).Default := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.SetButtonModalResult(aButton: TWinControl; + Value: Integer); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).ModalResult := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.SetRadioButtonCaption(Btn: TWinControl; + Value: string); +begin + TAdvOfficeRadioButton(Btn).Caption := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.SetRadioButtonState(Btn: TWinControl; + Checked: boolean); +begin + TAdvOfficeRadioButton(Btn).Checked := Checked; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvTaskDialogEx.InitRadioButton(AOwner: TForm; Btn: TWinControl; btnIndex: Integer; OnClickEvent : TNotifyEvent); +begin + with TRadioButton(Btn) do + begin + Name := 'Radio' + inttostr(btnIndex); + Parent := AOwner; + Font.Name := AOwner.Canvas.Font.Name; + Font.Size := 8; + BiDiMode := AOwner.BiDiMode; + OnClick := OnClickEvent; + + { + BoundsRect := TextRect; + Left := FHorzParaMargin + FHorzMargin; //ALeft + FHorzMargin; + Top := Y; + Width := Self.Width - Left - 4; + GetTextSize(Canvas, Caption, k, l); + w := Max(w, Left + k + FHorzMargin + 20); + } + end; +end; + +{ TAdvInputTaskDialogEx } + +//------------------------------------------------------------------------------ + +function TAdvInputTaskDialogEx.CreateButton(AOwner: TComponent): TWinControl; +begin + Result := TAdvGlowButton.Create(AOwner); + if Assigned(FAppearance) then + (Result as TAdvGlowButton).Appearance := FAppearance; + (Result as TAdvGlowButton).TabStop := true; + if Assigned(FOnButtonCreated) then + FOnButtonCreated(Self,(Result as TAdvGlowButton)); +end; + +function TAdvInputTaskDialogEx.CreateRadioButton( + AOwner: TComponent): TWinControl; +begin + Result := TAdvOfficeRadioButton.Create(AOwner); +end; + +function TAdvInputTaskDialogEx.GetButtonModalResult( + aButton: TWinControl): Integer; +begin + Result := mrNone; + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + Result := TAdvGlowButton(aButton).ModalResult; +end; + +procedure TAdvInputTaskDialogEx.SetButtonCancel(aButton: TWinControl; + Value: Boolean); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).Cancel := Value; +end; + +procedure TAdvInputTaskDialogEx.SetButtonCaption(aButton: TWinControl; + Value: TCaption); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).Caption := Value; +end; + +procedure TAdvInputTaskDialogEx.SetButtonDefault(aButton: TWinControl; + Value: Boolean); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).Default := Value; +end; + +procedure TAdvInputTaskDialogEx.SetButtonModalResult(aButton: TWinControl; + Value: Integer); +begin + if not Assigned(aButton) or not (aButton is TAdvGlowButton) then + Exit; + + TAdvGlowButton(aButton).ModalResult := Value; +end; + +procedure TAdvInputTaskDialogEx.SetRadioButtonCaption(Btn: TWinControl; + Value: string); +begin + TAdvOfficeRadioButton(Btn).Caption := Value; +end; + +procedure TAdvInputTaskDialogEx.SetRadioButtonState(Btn: TWinControl; + Checked: boolean); +begin + TAdvOfficeRadioButton(Btn).Checked := Checked; +end; + +procedure TAdvInputTaskDialogEx.InitRadioButton(AOwner: TForm; Btn: TWinControl; btnIndex: Integer; OnClickEvent : TNotifyEvent); +begin + with TRadioButton(Btn) do + begin + Name := 'Radio' + inttostr(btnIndex); + Parent := AOwner; + Font.Name := AOwner.Canvas.Font.Name; + Font.Size := 8; + BiDiMode := AOwner.BiDiMode; + OnClick := OnClickEvent; + { + BoundsRect := TextRect; + Left := FHorzParaMargin + FHorzMargin; //ALeft + FHorzMargin; + Top := Y; + Width := Self.Width - Left - 4; + GetTextSize(Canvas, Caption, k, l); + w := Max(w, Left + k + FHorzMargin + 20); + } + end; +end; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dpk b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dpk new file mode 100644 index 0000000..9fd4a70 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dpk @@ -0,0 +1,39 @@ +package TaskDialogPkgD2009D; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TMS TaskDialog'} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + designide, + dbrtl, + vcldb; + +contains + TaskDialogRegDE in 'TaskDialogRegDE.pas', + TaskDialogEx in 'TaskDialogEx.pas'; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dproj b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dproj new file mode 100644 index 0000000..f43e15e --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.dproj @@ -0,0 +1,91 @@ + + + {322e4f51-9fd5-43be-8659-42e8edcc60b1} + TaskDialogPkgD2009D.dpk + Release + AnyCPU + DCC32 + ..\Lib\D11\TaskDialogPkgD2007.bpl + 12.0 + Base + + + true + + + ..\Lib\D12;$(DCC_UnitSearchPath) + ..\Lib\D12\TaskDialogPkgD2009D.bpl + 00400000 + false + ..\Lib\D12 + false + TMS TaskDialog + false + true + ..\Lib\D12 + true + 0 + true + ..\Lib\D12 + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 2067 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TaskDialogPkgD2009D.dpk + + + + 12 + + + + MainSource + + + + + + + + + + Base + + + + diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.res b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009D.res new file mode 100644 index 0000000000000000000000000000000000000000..5fc5c89d548a21d08982c8e99b9cf4cdef8d29e0 GIT binary patch literal 3008 zcmb7`&5qne6oqS&NMr>qh1sxSgb=c4ffA7gi?$~;AyOnDsHa`qIBLR7S0^)37)#B9 zaUP-{f)#IoG|#{jc)`jW*jQqLFyE=N$K8`;L0RSBd(S!dr%E=)m_26OhRN;L_~mB* z{W>-~{@ZADi??A!T=tmvm^)^~nQ{3wJihJh;?bl@Mw4)?r*-6F=B_`-;oQB8uVRcQ z^41I(g>`Y8G;z@#byPcN-FfBebFN$d@~E+`BOw&JM}>=f9}Rep$j{ixkT)bJ)4YwWUjn{nB>)LbdRg1rhZ8(p{upC1*G@#prB6sNw9h?RJOz z%D+|caN8z@KP@eBqYv+_8q1F7`3%A&v zs~7cnHAj_gvemqZtDozITU0`rp=7`FPPuyj(yr#ET~Axsv9#h|&0FeR@Wmy(bNO+7 zoG;vrYT7FH?5Rt6N@SBBVh=){Rf~F&XH|4i%Cm~rQ zp&wp9#|04w@7AFgPX|Ih6aRXe!(T57loWg|OJOm~me^YEsk)^@dDc-b$?gnpp+rUL z*B$p%V__zaN}xRA2{Z?v09YQwAce$y_y)H_wUq8|q4DF|=CLr3LcQcl%0wKL_h(f^ zeUWEPradz3QgyfcY7Gtks)NtGP{QoI*~$D47Z3t_uVAQxkd&=F5lT2%d#aez9;q4j zNco1LjBYB>eF;j#4zivWuA#2lW5O<{-Ev?b5Vke+cv{;BWqOz%HWmc<#nv+qSH0cN z!+_v1j;Q2Yy@ex$?P~T2TJKDvc{BI63hCJFiMBjATFtfE-=ur+?eBt)*U$a;&1-wX z{{=7pVgAkhi&-%*y7`K$=Kme9`0dcVFy^{uWz0KZzX!*Ma2@#Hnv3i0`^K2t%(i{k zd}F>a56!pCFU=#a{n-4k(cjFD+1nfWzZ(4o?U=J`ru$bKz42e@?Al$RtT{A~Ie%rQ z+&%ORk3HW5?lpe9@#nw73sY~xf7O9*88?{Wjeqo~-~Ee2b7o$eg*h=t<^k7d<|)W0 z<_B|%)vw;>w)x!LF`p6bT{KA1N1*Kx>#2EeUYIA?|3uVJczSwCu)#(ab&9 z3pf|}o?P1A<_B-*lHX$c66?X{j`4H*bI`VQMu&3b_}Xa?mTh?}b{gyH_<-)0mHaCxi%3@Op;jW-V^r{Nu)dqL8Y5 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dpk b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dpk new file mode 100644 index 0000000..73cc579 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dpk @@ -0,0 +1,47 @@ +package TaskDialogPkgD2009R; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TMS TaskDialog'} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + designide, + dbrtl, + vcldb; + +contains + TaskDialog in 'TaskDialog.pas', + PictureContainer in 'PictureContainer.pas', + TaskDialogDE in 'TaskDialogDE.pas', + advgdip in 'advgdip.pas', + advglowbutton in 'advglowbutton.pas', + AdvGroupBox in 'AdvGroupBox.pas', + advhintinfo in 'advhintinfo.pas', + AdvOfficeButtons in 'AdvOfficeButtons.pas', + advstyleif in 'advstyleif.pas', + gdipicture in 'gdipicture.pas'; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dproj b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dproj new file mode 100644 index 0000000..063ba03 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.dproj @@ -0,0 +1,98 @@ + + + {322e4f51-9fd5-43be-8659-42e8edcc60b1} + TaskDialogPkgD2009R.dpk + Release + AnyCPU + DCC32 + ..\Lib\D11\TaskDialogPkgD2007.bpl + 12.0 + Base + + + true + + + ..\Lib\D12\TaskDialogPkgD2009R.bpl + 00400000 + false + ..\Lib\D12 + false + TMS TaskDialog + false + true + ..\Lib\D12 + true + 0 + true + ..\Lib\D12 + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 2067 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TaskDialogPkgD2009R.dpk + + + + 12 + + + + MainSource + + + + + + + + + + + + + + + + + + Base + + + + diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.res b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogPkgD2009R.res new file mode 100644 index 0000000000000000000000000000000000000000..5fc5c89d548a21d08982c8e99b9cf4cdef8d29e0 GIT binary patch literal 3008 zcmb7`&5qne6oqS&NMr>qh1sxSgb=c4ffA7gi?$~;AyOnDsHa`qIBLR7S0^)37)#B9 zaUP-{f)#IoG|#{jc)`jW*jQqLFyE=N$K8`;L0RSBd(S!dr%E=)m_26OhRN;L_~mB* z{W>-~{@ZADi??A!T=tmvm^)^~nQ{3wJihJh;?bl@Mw4)?r*-6F=B_`-;oQB8uVRcQ z^41I(g>`Y8G;z@#byPcN-FfBebFN$d@~E+`BOw&JM}>=f9}Rep$j{ixkT)bJ)4YwWUjn{nB>)LbdRg1rhZ8(p{upC1*G@#prB6sNw9h?RJOz z%D+|caN8z@KP@eBqYv+_8q1F7`3%A&v zs~7cnHAj_gvemqZtDozITU0`rp=7`FPPuyj(yr#ET~Axsv9#h|&0FeR@Wmy(bNO+7 zoG;vrYT7FH?5Rt6N@SBBVh=){Rf~F&XH|4i%Cm~rQ zp&wp9#|04w@7AFgPX|Ih6aRXe!(T57loWg|OJOm~me^YEsk)^@dDc-b$?gnpp+rUL z*B$p%V__zaN}xRA2{Z?v09YQwAce$y_y)H_wUq8|q4DF|=CLr3LcQcl%0wKL_h(f^ zeUWEPradz3QgyfcY7Gtks)NtGP{QoI*~$D47Z3t_uVAQxkd&=F5lT2%d#aez9;q4j zNco1LjBYB>eF;j#4zivWuA#2lW5O<{-Ev?b5Vke+cv{;BWqOz%HWmc<#nv+qSH0cN z!+_v1j;Q2Yy@ex$?P~T2TJKDvc{BI63hCJFiMBjATFtfE-=ur+?eBt)*U$a;&1-wX z{{=7pVgAkhi&-%*y7`K$=Kme9`0dcVFy^{uWz0KZzX!*Ma2@#Hnv3i0`^K2t%(i{k zd}F>a56!pCFU=#a{n-4k(cjFD+1nfWzZ(4o?U=J`ru$bKz42e@?Al$RtT{A~Ie%rQ z+&%ORk3HW5?lpe9@#nw73sY~xf7O9*88?{Wjeqo~-~Ee2b7o$eg*h=t<^k7d<|)W0 z<_B|%)vw;>w)x!LF`p6bT{KA1N1*Kx>#2EeUYIA?|3uVJczSwCu)#(ab&9 z3pf|}o?P1A<_B-*lHX$c66?X{j`4H*bI`VQMu&3b_}Xa?mTh?}b{gyH_<-)0mHaCxi%3@Op;jW-V^r{Nu)dqL8Y5 literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogRegDE.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogRegDE.pas new file mode 100644 index 0000000..3a9109f --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/TaskDialogRegDE.pas @@ -0,0 +1,49 @@ +{***************************************************************************} +{ TTaskDialog component } +{ for Delphi & C++Builder } +{ version 1.2 } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2007 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit TaskDialogRegDE; + +interface +{$I TMSDEFS.INC} + +uses + Classes, TaskDialog, TaskDialogDE, + {$IFDEF DELPHI6_LVL} + {$IFDEF TMSDOTNET} + Borland.Vcl.Design.DesignIntf, Borland.Vcl.Design.DesignEditors + {$ENDIF} + {$IFNDEF TMSDOTNET} + DesignIntf, DesignEditors + {$ENDIF} + {$ELSE} + DsgnIntf + {$ENDIF} + ; + +procedure Register; + +implementation + +procedure Register; +begin + RegisterComponentEditor(TAdvTaskDialog,TTaskDialogEditor); +end; + +end. + diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/advgdip.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advgdip.pas new file mode 100644 index 0000000..31872be --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advgdip.pas @@ -0,0 +1,3335 @@ +{***************************************************************************} +{ GDI+ API Imports } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2009 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit AdvGDIP; + +{$HPPEMIT ''} +{$HPPEMIT '#pragma link "gdiplus.lib"'} +{$HPPEMIT ''} + +{$I TMSDEFS.INC} +{$ALIGN ON} +{$MINENUMSIZE 4} + +interface + +uses + Windows, ActiveX, Math, Graphics; + +type + INT16 = type Smallint; + {$EXTERNALSYM INT16} + UINT16 = type Word; + {$EXTERNALSYM UINT16} + PUINT16 = ^UINT16; + {$EXTERNALSYM PUINT16} + UINT32 = type Cardinal; + {$EXTERNALSYM UINT32} + TSingleDynArray = array of Single; + +var + GlowSpeed : integer = 30; + + +const + GDIP_NOWRAP = 4096; + {$EXTERNALSYM GDIP_NOWRAP} + WINGDIPDLL = 'gdiplus.dll'; + +//---------------------------------------------------------------------------- +// Memory Allocation APIs +//---------------------------------------------------------------------------- + +{$EXTERNALSYM GdipAlloc} +function GdipAlloc(size: ULONG): pointer; stdcall; +{$EXTERNALSYM GdipFree} +procedure GdipFree(ptr: pointer); stdcall; + +(**************************************************************************\ +* +* GDI+ base memory allocation class +* +\**************************************************************************) + +type + TAntiAlias = (aaNone, aaClearType, aaAntiAlias); + + TGdiplusBase = class + public + class function NewInstance: TObject; override; + procedure FreeInstance; override; + end; + +//-------------------------------------------------------------------------- +// Fill mode constants +//-------------------------------------------------------------------------- + + FillMode = ( + FillModeAlternate, // 0 + FillModeWinding // 1 + ); + TFillMode = FillMode; + +//-------------------------------------------------------------------------- +// Quality mode constants +//-------------------------------------------------------------------------- + +{$IFDEF DELPHI6_UP} + {$EXTERNALSYM QualityMode} + QualityMode = ( + QualityModeInvalid = -1, + QualityModeDefault = 0, + QualityModeLow = 1, // Best performance + QualityModeHigh = 2 // Best rendering quality + ); + TQualityMode = QualityMode; +{$ELSE} + {$EXTERNALSYM QualityMode} + QualityMode = Integer; + const + QualityModeInvalid = -1; + QualityModeDefault = 0; + QualityModeLow = 1; // Best performance + QualityModeHigh = 2; // Best rendering quality +{$ENDIF} + +type +{$IFDEF DELPHI6_UP} + {$EXTERNALSYM CompositingQuality} + CompositingQuality = ( + CompositingQualityInvalid = ord(QualityModeInvalid), + CompositingQualityDefault = ord(QualityModeDefault), + CompositingQualityHighSpeed = ord(QualityModeLow), + CompositingQualityHighQuality = ord(QualityModeHigh), + CompositingQualityGammaCorrected, + CompositingQualityAssumeLinear + ); + TCompositingQuality = CompositingQuality; +{$ELSE} + {$EXTERNALSYM CompositingQuality} + CompositingQuality = Integer; + const + CompositingQualityInvalid = QualityModeInvalid; + CompositingQualityDefault = QualityModeDefault; + CompositingQualityHighSpeed = QualityModeLow; + CompositingQualityHighQuality = QualityModeHigh; + CompositingQualityGammaCorrected = 3; + CompositingQualityAssumeLinear = 4; + +type + TCompositingQuality = CompositingQuality; +{$ENDIF} + +const + ImageFormatUndefined : TGUID = '{b96b3ca9-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatUndefined} + ImageFormatMemoryBMP : TGUID = '{b96b3caa-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatMemoryBMP} + ImageFormatBMP : TGUID = '{b96b3cab-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatBMP} + ImageFormatEMF : TGUID = '{b96b3cac-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatEMF} + ImageFormatWMF : TGUID = '{b96b3cad-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatWMF} + ImageFormatJPEG : TGUID = '{b96b3cae-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatJPEG} + ImageFormatPNG : TGUID = '{b96b3caf-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatPNG} + ImageFormatGIF : TGUID = '{b96b3cb0-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatGIF} + ImageFormatTIFF : TGUID = '{b96b3cb1-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatTIFF} + ImageFormatEXIF : TGUID = '{b96b3cb2-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatEXIF} + ImageFormatIcon : TGUID = '{b96b3cb5-0728-11d3-9d7b-0000f81ef32e}'; + {$EXTERNALSYM ImageFormatIcon} + + +type +//-------------------------------------------------------------------------- +// Unit constants +//-------------------------------------------------------------------------- + + Unit_ = ( + UnitWorld, // 0 -- World coordinate (non-physical unit) + UnitDisplay, // 1 -- Variable -- for PageTransform only + UnitPixel, // 2 -- Each unit is one device pixel. + UnitPoint, // 3 -- Each unit is a printer's point, or 1/72 inch. + UnitInch, // 4 -- Each unit is 1 inch. + UnitDocument, // 5 -- Each unit is 1/300 inch. + UnitMillimeter // 6 -- Each unit is 1 millimeter. + ); + TUnit = Unit_; + +//-------------------------------------------------------------------------- +// Dash style constants +//-------------------------------------------------------------------------- + + DashStyle = ( + DashStyleSolid, // 0 + DashStyleDash, // 1 + DashStyleDot, // 2 + DashStyleDashDot, // 3 + DashStyleDashDotDot, // 4 + DashStyleCustom // 5 + ); + TDashStyle = DashStyle; + + +//-------------------------------------------------------------------------- +// Various wrap modes for brushes +//-------------------------------------------------------------------------- + + WrapMode = ( + WrapModeTile, // 0 + WrapModeTileFlipX, // 1 + WrapModeTileFlipY, // 2 + WrapModeTileFlipXY, // 3 + WrapModeClamp // 4 + ); + TWrapMode = WrapMode; + +//-------------------------------------------------------------------------- +// LineGradient Mode +//-------------------------------------------------------------------------- + + LinearGradientMode = ( + LinearGradientModeHorizontal, // 0 + LinearGradientModeVertical, // 1 + LinearGradientModeForwardDiagonal, // 2 + LinearGradientModeBackwardDiagonal // 3 + ); + TLinearGradientMode = LinearGradientMode; + +//-------------------------------------------------------------------------- +// Line cap constants (only the lowest 8 bits are used). +//-------------------------------------------------------------------------- +{$IFDEF DELPHI6_UP} + {$EXTERNALSYM LineCap} + LineCap = ( + LineCapFlat = 0, + LineCapSquare = 1, + LineCapRound = 2, + LineCapTriangle = 3, + + LineCapNoAnchor = $10, // corresponds to flat cap + LineCapSquareAnchor = $11, // corresponds to square cap + LineCapRoundAnchor = $12, // corresponds to round cap + LineCapDiamondAnchor = $13, // corresponds to triangle cap + LineCapArrowAnchor = $14, // no correspondence + + LineCapCustom = $ff, // custom cap + + LineCapAnchorMask = $f0 // mask to check for anchor or not. + ); + TLineCap = LineCap; +{$ELSE} + {$EXTERNALSYM LineCap} + LineCap = Integer; + const + LineCapFlat = 0; + LineCapSquare = 1; + LineCapRound = 2; + LineCapTriangle = 3; + + LineCapNoAnchor = $10; // corresponds to flat cap + LineCapSquareAnchor = $11; // corresponds to square cap + LineCapRoundAnchor = $12; // corresponds to round cap + LineCapDiamondAnchor = $13; // corresponds to triangle cap + LineCapArrowAnchor = $14; // no correspondence + + LineCapCustom = $ff; // custom cap + + LineCapAnchorMask = $f0; // mask to check for anchor or not. + +type + TLineCap = LineCap; +{$ENDIF} + +//-------------------------------------------------------------------------- +// Region Comine Modes +//-------------------------------------------------------------------------- + + CombineMode = ( + CombineModeReplace, // 0 + CombineModeIntersect, // 1 + CombineModeUnion, // 2 + CombineModeXor, // 3 + CombineModeExclude, // 4 + CombineModeComplement // 5 (Exclude From) + ); + TCombineMode = CombineMode; + +//-------------------------------------------------------------------------- +// FontStyle: face types and common styles +//-------------------------------------------------------------------------- +type + {$EXTERNALSYM FontStyle} + FontStyle = Integer; + const + FontStyleRegular = Integer(0); + FontStyleBold = Integer(1); + FontStyleItalic = Integer(2); + FontStyleBoldItalic = Integer(3); + FontStyleUnderline = Integer(4); + FontStyleStrikeout = Integer(8); + Type + TFontStyle = FontStyle; + +//--------------------------------------------------------------------------- +// Smoothing Mode +//--------------------------------------------------------------------------- +{$IFDEF DELPHI6_UP} + {$EXTERNALSYM SmoothingMode} + SmoothingMode = ( + SmoothingModeInvalid = ord(QualityModeInvalid), + SmoothingModeDefault = ord(QualityModeDefault), + SmoothingModeHighSpeed = ord(QualityModeLow), + SmoothingModeHighQuality = ord(QualityModeHigh), + SmoothingModeNone, + SmoothingModeAntiAlias + ); + TSmoothingMode = SmoothingMode; +{$ELSE} + SmoothingMode = Integer; + const + SmoothingModeInvalid = QualityModeInvalid; + SmoothingModeDefault = QualityModeDefault; + SmoothingModeHighSpeed = QualityModeLow; + SmoothingModeHighQuality = QualityModeHigh; + SmoothingModeNone = 3; + SmoothingModeAntiAlias = 4; + +type + TSmoothingMode = SmoothingMode; + +{$ENDIF} + +//--------------------------------------------------------------------------- +// Text Rendering Hint +//--------------------------------------------------------------------------- + + TextRenderingHint = ( + TextRenderingHintSystemDefault, // Glyph with system default rendering hint + TextRenderingHintSingleBitPerPixelGridFit, // Glyph bitmap with hinting + TextRenderingHintSingleBitPerPixel, // Glyph bitmap without hinting + TextRenderingHintAntiAliasGridFit, // Glyph anti-alias bitmap with hinting + TextRenderingHintAntiAlias, // Glyph anti-alias bitmap without hinting + TextRenderingHintClearTypeGridFit // Glyph CT bitmap with hinting + ); + TTextRenderingHint = TextRenderingHint; + +//--------------------------------------------------------------------------- +// StringFormatFlags +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +// String format flags +// +// DirectionRightToLeft - For horizontal text, the reading order is +// right to left. This value is called +// the base embedding level by the Unicode +// bidirectional engine. +// For vertical text, columns are read from +// right to left. +// By default, horizontal or vertical text is +// read from left to right. +// +// DirectionVertical - Individual lines of text are vertical. In +// each line, characters progress from top to +// bottom. +// By default, lines of text are horizontal, +// each new line below the previous line. +// +// NoFitBlackBox - Allows parts of glyphs to overhang the +// bounding rectangle. +// By default glyphs are first aligned +// inside the margines, then any glyphs which +// still overhang the bounding box are +// repositioned to avoid any overhang. +// For example when an italic +// lower case letter f in a font such as +// Garamond is aligned at the far left of a +// rectangle, the lower part of the f will +// reach slightly further left than the left +// edge of the rectangle. Setting this flag +// will ensure the character aligns visually +// with the lines above and below, but may +// cause some pixels outside the formatting +// rectangle to be clipped or painted. +// +// DisplayFormatControl - Causes control characters such as the +// left-to-right mark to be shown in the +// output with a representative glyph. +// +// NoFontFallback - Disables fallback to alternate fonts for +// characters not supported in the requested +// font. Any missing characters will be +// be displayed with the fonts missing glyph, +// usually an open square. +// +// NoWrap - Disables wrapping of text between lines +// when formatting within a rectangle. +// NoWrap is implied when a point is passed +// instead of a rectangle, or when the +// specified rectangle has a zero line length. +// +// NoClip - By default text is clipped to the +// formatting rectangle. Setting NoClip +// allows overhanging pixels to affect the +// device outside the formatting rectangle. +// Pixels at the end of the line may be +// affected if the glyphs overhang their +// cells, and either the NoFitBlackBox flag +// has been set, or the glyph extends to far +// to be fitted. +// Pixels above/before the first line or +// below/after the last line may be affected +// if the glyphs extend beyond their cell +// ascent / descent. This can occur rarely +// with unusual diacritic mark combinations. + +//--------------------------------------------------------------------------- + +Type + +//--------------------------------------------------------------------------- +// String alignment flags +//--------------------------------------------------------------------------- + + StringAlignment = ( + // Left edge for left-to-right text, + // right for right-to-left text, + // and top for vertical + StringAlignmentNear, + StringAlignmentCenter, + StringAlignmentFar + ); + TStringAlignment = StringAlignment; + + +//--------------------------------------------------------------------------- +// Trimming flags +//--------------------------------------------------------------------------- + + StringTrimming = ( + { + #define GDIPLUS_STRINGTRIMMING_None 0 && no trimming. + #define GDIPLUS_STRINGTRIMMING_Character 1 && nearest character. + #define GDIPLUS_STRINGTRIMMING_Word 2 && nearest wor + #define GDIPLUS_STRINGTRIMMING_EllipsisCharacter 3 && nearest character, ellipsis at end + #define GDIPLUS_STRINGTRIMMING_EllipsisWord 4 && nearest word, ellipsis at end + #define GDIPLUS_STRINGTRIMMING_EllipsisPath 5 && ellipsis in center, favouring last slash-delimited segment + } + StringTrimmingNone, + StringTrimmingCharacter, + StringTrimmingWord, + StringTrimmingEllipsisCharacter, + StringTrimmingEllipsisWord, + StringTrimmingEllipsisPath + ); + TStringTrimming = StringTrimming; + +//--------------------------------------------------------------------------- +// Hotkey prefix interpretation +//--------------------------------------------------------------------------- + + HotkeyPrefix = ( + HotkeyPrefixNone, + HotkeyPrefixShow, + HotkeyPrefixHide + ); + THotkeyPrefix = HotkeyPrefix; + +//--------------------------------------------------------------------------- +// Flush Intention flags +//--------------------------------------------------------------------------- + + FlushIntention = ( + FlushIntentionFlush, // Flush all batched rendering operations + FlushIntentionSync // Flush all batched rendering operations + // and wait for them to complete + ); + TFlushIntention = FlushIntention; + + + //{$EXTERNALSYM ImageAbort} + ImageAbort = function: BOOL; stdcall; + //{$EXTERNALSYM DrawImageAbort} + DrawImageAbort = ImageAbort; + +//-------------------------------------------------------------------------- +// Status return values from GDI+ methods +//-------------------------------------------------------------------------- +type + Status = ( + Ok, + GenericError, + InvalidParameter, + OutOfMemory, + ObjectBusy, + InsufficientBuffer, + NotImplemented, + Win32Error, + WrongState, + Aborted, + FileNotFound, + ValueOverflow, + AccessDenied, + UnknownImageFormat, + FontFamilyNotFound, + FontStyleNotFound, + NotTrueTypeFont, + UnsupportedGdiplusVersion, + GdiplusNotInitialized, + PropertyNotFound, + PropertyNotSupported + ); + TStatus = Status; + +//-------------------------------------------------------------------------- +// Represents a location in a 2D coordinate system (floating-point coordinates) +//-------------------------------------------------------------------------- + +type + PGPPointF = ^TGPPointF; + TGPPointF = packed record + X : Single; + Y : Single; + end; + TPointFDynArray = array of TGPPointF; + + function MakePoint(X, Y: Single): TGPPointF; overload; + +//-------------------------------------------------------------------------- +// Represents a location in a 2D coordinate system (integer coordinates) +//-------------------------------------------------------------------------- + +type + PGPPoint = ^TGPPoint; + TGPPoint = packed record + X : Integer; + Y : Integer; + end; + TPointDynArray = array of TGPPoint; + + function MakePoint(X, Y: Integer): TGPPoint; overload; + +//-------------------------------------------------------------------------- +// Represents a rectangle in a 2D coordinate system (floating-point coordinates) +//-------------------------------------------------------------------------- + +type + PGPRectF = ^TGPRectF; + TGPRectF = packed record + X : Single; + Y : Single; + Width : Single; + Height: Single; + end; + TRectFDynArray = array of TGPRectF; + + function MakeRect(x, y, width, height: Single): TGPRectF; overload; + +type + PGPRect = ^TGPRect; + TGPRect = packed record + X : Integer; + Y : Integer; + Width : Integer; + Height: Integer; + end; + TRectDynArray = array of TGPRect; + + +(************************************************************************** +* +* GDI+ Startup and Shutdown APIs +* +**************************************************************************) +type + DebugEventLevel = ( + DebugEventLevelFatal, + DebugEventLevelWarning + ); + TDebugEventLevel = DebugEventLevel; + + // Callback function that GDI+ can call, on debug builds, for assertions + // and warnings. + + DebugEventProc = procedure(level: DebugEventLevel; message: PChar); stdcall; + + // Notification functions which the user must call appropriately if + // "SuppressBackgroundThread" (below) is set. + + NotificationHookProc = function(out token: ULONG): Status; stdcall; + + NotificationUnhookProc = procedure(token: ULONG); stdcall; + + // Input structure for GdiplusStartup + + GdiplusStartupInput = packed record + GdiplusVersion : Cardinal; // Must be 1 + DebugEventCallback : DebugEventProc; // Ignored on free builds + SuppressBackgroundThread: BOOL; // FALSE unless you're prepared to call + // the hook/unhook functions properly + SuppressExternalCodecs : BOOL; // FALSE unless you want GDI+ only to use + end; // its internal image codecs. + + TGdiplusStartupInput = GdiplusStartupInput; + PGdiplusStartupInput = ^TGdiplusStartupInput; + + // Output structure for GdiplusStartup() + + GdiplusStartupOutput = packed record + // The following 2 fields are NULL if SuppressBackgroundThread is FALSE. + // Otherwise, they are functions which must be called appropriately to + // replace the background thread. + // + // These should be called on the application's main message loop - i.e. + // a message loop which is active for the lifetime of GDI+. + // "NotificationHook" should be called before starting the loop, + // and "NotificationUnhook" should be called after the loop ends. + + NotificationHook : NotificationHookProc; + NotificationUnhook: NotificationUnhookProc; + end; + TGdiplusStartupOutput = GdiplusStartupOutput; + PGdiplusStartupOutput = ^TGdiplusStartupOutput; + + // GDI+ initialization. Must not be called from DllMain - can cause deadlock. + // + // Must be called before GDI+ API's or constructors are used. + // + // token - may not be NULL - accepts a token to be passed in the corresponding + // GdiplusShutdown call. + // input - may not be NULL + // output - may be NULL only if input->SuppressBackgroundThread is FALSE. + + {$EXTERNALSYM GdiplusStartup} + function GdiplusStartup(out token: ULONG; input: PGdiplusStartupInput; + output: PGdiplusStartupOutput): Status; stdcall; + + // GDI+ termination. Must be called before GDI+ is unloaded. + // Must not be called from DllMain - can cause deadlock. + // + // GDI+ API's may not be called after GdiplusShutdown. Pay careful attention + // to GDI+ object destructors. + + {$EXTERNALSYM GdiplusShutdown} + procedure GdiplusShutdown(token: ULONG); stdcall; + +type + PARGB = ^ARGB; + ARGB = DWORD; + {$EXTERNALSYM ARGB} + +type + + PGPColor = ^TGPColor; + {$EXTERNALSYM TGPCOLOR} + TGPColor = ARGB; + + function MakeColor(r, g, b: Byte): ARGB; overload; + function MakeColor(a, r, g, b: Byte): ARGB; overload; + function GetAlpha(color: ARGB): BYTE; + function GetRed(color: ARGB): BYTE; + function GetGreen(color: ARGB): BYTE; + function GetBlue(color: ARGB): BYTE; + +const + // Shift count and bit mask for A, R, G, B + AlphaShift = 24; + {$EXTERNALSYM AlphaShift} + RedShift = 16; + {$EXTERNALSYM RedShift} + GreenShift = 8; + {$EXTERNALSYM GreenShift} + BlueShift = 0; + {$EXTERNALSYM BlueShift} + + AlphaMask = $ff000000; + {$EXTERNALSYM AlphaMask} + RedMask = $00ff0000; + {$EXTERNALSYM RedMask} + GreenMask = $0000ff00; + {$EXTERNALSYM GreenMask} + BlueMask = $000000ff; + {$EXTERNALSYM BlueMask} + +type + PixelFormat = Integer; + {$EXTERNALSYM PixelFormat} + TPixelFormat = PixelFormat; + +const + PixelFormatIndexed = $00010000; // Indexes into a palette + {$EXTERNALSYM PixelFormatIndexed} + PixelFormatGDI = $00020000; // Is a GDI-supported format + {$EXTERNALSYM PixelFormatGDI} + PixelFormatAlpha = $00040000; // Has an alpha component + {$EXTERNALSYM PixelFormatAlpha} + PixelFormatPAlpha = $00080000; // Pre-multiplied alpha + {$EXTERNALSYM PixelFormatPAlpha} + PixelFormatExtended = $00100000; // Extended color 16 bits/channel + {$EXTERNALSYM PixelFormatExtended} + PixelFormatCanonical = $00200000; + {$EXTERNALSYM PixelFormatCanonical} + + PixelFormatUndefined = 0; + {$EXTERNALSYM PixelFormatUndefined} + PixelFormatDontCare = 0; + {$EXTERNALSYM PixelFormatDontCare} + + PixelFormat1bppIndexed = (1 or ( 1 shl 8) or PixelFormatIndexed or PixelFormatGDI); + {$EXTERNALSYM PixelFormat1bppIndexed} + PixelFormat4bppIndexed = (2 or ( 4 shl 8) or PixelFormatIndexed or PixelFormatGDI); + {$EXTERNALSYM PixelFormat4bppIndexed} + PixelFormat8bppIndexed = (3 or ( 8 shl 8) or PixelFormatIndexed or PixelFormatGDI); + {$EXTERNALSYM PixelFormat8bppIndexed} + PixelFormat16bppGrayScale = (4 or (16 shl 8) or PixelFormatExtended); + {$EXTERNALSYM PixelFormat16bppGrayScale} + PixelFormat16bppRGB555 = (5 or (16 shl 8) or PixelFormatGDI); + {$EXTERNALSYM PixelFormat16bppRGB555} + PixelFormat16bppRGB565 = (6 or (16 shl 8) or PixelFormatGDI); + {$EXTERNALSYM PixelFormat16bppRGB565} + PixelFormat16bppARGB1555 = (7 or (16 shl 8) or PixelFormatAlpha or PixelFormatGDI); + {$EXTERNALSYM PixelFormat16bppARGB1555} + PixelFormat24bppRGB = (8 or (24 shl 8) or PixelFormatGDI); + {$EXTERNALSYM PixelFormat24bppRGB} + PixelFormat32bppRGB = (9 or (32 shl 8) or PixelFormatGDI); + {$EXTERNALSYM PixelFormat32bppRGB} + PixelFormat32bppARGB = (10 or (32 shl 8) or PixelFormatAlpha or PixelFormatGDI or PixelFormatCanonical); + {$EXTERNALSYM PixelFormat32bppARGB} + PixelFormat32bppPARGB = (11 or (32 shl 8) or PixelFormatAlpha or PixelFormatPAlpha or PixelFormatGDI); + {$EXTERNALSYM PixelFormat32bppPARGB} + PixelFormat48bppRGB = (12 or (48 shl 8) or PixelFormatExtended); + {$EXTERNALSYM PixelFormat48bppRGB} + PixelFormat64bppARGB = (13 or (64 shl 8) or PixelFormatAlpha or PixelFormatCanonical or PixelFormatExtended); + {$EXTERNALSYM PixelFormat64bppARGB} + PixelFormat64bppPARGB = (14 or (64 shl 8) or PixelFormatAlpha or PixelFormatPAlpha or PixelFormatExtended); + {$EXTERNALSYM PixelFormat64bppPARGB} + PixelFormatMax = 15; + {$EXTERNALSYM PixelFormatMax} + +type + +{$IFDEF DELPHI6_UP} + RotateFlipType = ( + RotateNoneFlipNone = 0, + Rotate90FlipNone = 1, + Rotate180FlipNone = 2, + Rotate270FlipNone = 3, + + RotateNoneFlipX = 4, + Rotate90FlipX = 5, + Rotate180FlipX = 6, + Rotate270FlipX = 7, + + RotateNoneFlipY = Rotate180FlipX, + Rotate90FlipY = Rotate270FlipX, + Rotate180FlipY = RotateNoneFlipX, + Rotate270FlipY = Rotate90FlipX, + + RotateNoneFlipXY = Rotate180FlipNone, + Rotate90FlipXY = Rotate270FlipNone, + Rotate180FlipXY = RotateNoneFlipNone, + Rotate270FlipXY = Rotate90FlipNone + ); + TRotateFlipType = RotateFlipType; +{$ELSE} + + RotateFlipType = ( + RotateNoneFlipNone, // = 0, + Rotate90FlipNone, // = 1, + Rotate180FlipNone, // = 2, + Rotate270FlipNone, // = 3, + + RotateNoneFlipX, // = 4, + Rotate90FlipX, // = 5, + Rotate180FlipX, // = 6, + Rotate270FlipX // = 7, + ); + const + RotateNoneFlipY = Rotate180FlipX; + Rotate90FlipY = Rotate270FlipX; + Rotate180FlipY = RotateNoneFlipX; + Rotate270FlipY = Rotate90FlipX; + + RotateNoneFlipXY = Rotate180FlipNone; + Rotate90FlipXY = Rotate270FlipNone; + Rotate180FlipXY = RotateNoneFlipNone; + Rotate270FlipXY = Rotate90FlipNone; + +type + TRotateFlipType = RotateFlipType; +{$ENDIF} + +//---------------------------------------------------------------------------- +// Color Adjust Type +//---------------------------------------------------------------------------- + + //{$EXTERNALSYM ColorAdjustType} + ColorAdjustType = ( + ColorAdjustTypeDefault, + ColorAdjustTypeBitmap, + ColorAdjustTypeBrush, + ColorAdjustTypePen, + ColorAdjustTypeText, + ColorAdjustTypeCount, + ColorAdjustTypeAny // Reserved + ); + TColorAdjustType = ColorAdjustType; + +//--------------------------------------------------------------------------- +// Image encoder parameter related types +//--------------------------------------------------------------------------- + + //{$EXTERNALSYM EncoderParameterValueType} + EncoderParameterValueType = Integer; + const + EncoderParameterValueTypeByte : Integer = 1; // 8-bit unsigned int + EncoderParameterValueTypeASCII : Integer = 2; // 8-bit byte containing one 7-bit ASCII + // code. NULL terminated. + EncoderParameterValueTypeShort : Integer = 3; // 16-bit unsigned int + EncoderParameterValueTypeLong : Integer = 4; // 32-bit unsigned int + EncoderParameterValueTypeRational : Integer = 5; // Two Longs. The first Long is the + // numerator, the second Long expresses the + // denomintor. + EncoderParameterValueTypeLongRange : Integer = 6; // Two longs which specify a range of + // integer values. The first Long specifies + // the lower end and the second one + // specifies the higher end. All values + // are inclusive at both ends + EncoderParameterValueTypeUndefined : Integer = 7; // 8-bit byte that can take any value + // depending on field definition + EncoderParameterValueTypeRationalRange : Integer = 8; // Two Rationals. The first Rational + // specifies the lower end and the second + // specifies the higher end. All values + // are inclusive at both ends +type + TEncoderParameterValueType = EncoderParameterValueType; + + //--------------------------------------------------------------------------- +// Image encoder value types +//--------------------------------------------------------------------------- + + //{$EXTERNALSYM EncoderValue} + EncoderValue = ( + EncoderValueColorTypeCMYK, + EncoderValueColorTypeYCCK, + EncoderValueCompressionLZW, + EncoderValueCompressionCCITT3, + EncoderValueCompressionCCITT4, + EncoderValueCompressionRle, + EncoderValueCompressionNone, + EncoderValueScanMethodInterlaced, + EncoderValueScanMethodNonInterlaced, + EncoderValueVersionGif87, + EncoderValueVersionGif89, + EncoderValueRenderProgressive, + EncoderValueRenderNonProgressive, + EncoderValueTransformRotate90, + EncoderValueTransformRotate180, + EncoderValueTransformRotate270, + EncoderValueTransformFlipHorizontal, + EncoderValueTransformFlipVertical, + EncoderValueMultiFrame, + EncoderValueLastFrame, + EncoderValueFlush, + EncoderValueFrameDimensionTime, + EncoderValueFrameDimensionResolution, + EncoderValueFrameDimensionPage + ); + TEncoderValue = EncoderValue; + + +//--------------------------------------------------------------------------- +// Encoder Parameter structure +//--------------------------------------------------------------------------- + + //{$EXTERNALSYM EncoderParameter} + EncoderParameter = packed record + Guid : TGUID; // GUID of the parameter + NumberOfValues : ULONG; // Number of the parameter values + Type_ : ULONG; // Value type, like ValueTypeLONG etc. + Value : Pointer; // A pointer to the parameter values + end; + TEncoderParameter = EncoderParameter; + PEncoderParameter = ^TEncoderParameter; + +//--------------------------------------------------------------------------- +// Encoder Parameters structure +//--------------------------------------------------------------------------- + + //{$EXTERNALSYM EncoderParameters} + EncoderParameters = packed record + Count : UINT; // Number of parameters in this structure + Parameter : array[0..0] of TEncoderParameter; // Parameter values + end; + TEncoderParameters = EncoderParameters; + PEncoderParameters = ^TEncoderParameters; + + +//-------------------------------------------------------------------------- +// ImageCodecInfo structure +//-------------------------------------------------------------------------- + +type + //{$EXTERNALSYM ImageCodecInfo} + ImageCodecInfo = packed record + Clsid : TGUID; + FormatID : TGUID; + CodecName : PWCHAR; + DllName : PWCHAR; + FormatDescription : PWCHAR; + FilenameExtension : PWCHAR; + MimeType : PWCHAR; + Flags : DWORD; + Version : DWORD; + SigCount : DWORD; + SigSize : DWORD; + SigPattern : PBYTE; + SigMask : PBYTE; + end; + TImageCodecInfo = ImageCodecInfo; + PImageCodecInfo = ^TImageCodecInfo; + + +const +//--------------------------------------------------------------------------- +// Encoder parameter sets +//--------------------------------------------------------------------------- + + EncoderCompression : TGUID = '{e09d739d-ccd4-44ee-8eba-3fbf8be4fc58}'; + {$EXTERNALSYM EncoderCompression} + EncoderColorDepth : TGUID = '{66087055-ad66-4c7c-9a18-38a2310b8337}'; + {$EXTERNALSYM EncoderColorDepth} + EncoderScanMethod : TGUID = '{3a4e2661-3109-4e56-8536-42c156e7dcfa}'; + {$EXTERNALSYM EncoderScanMethod} + EncoderVersion : TGUID = '{24d18c76-814a-41a4-bf53-1c219cccf797}'; + {$EXTERNALSYM EncoderVersion} + EncoderRenderMethod : TGUID = '{6d42c53a-229a-4825-8bb7-5c99e2b9a8b8}'; + {$EXTERNALSYM EncoderRenderMethod} + EncoderQuality : TGUID = '{1d5be4b5-fa4a-452d-9cdd-5db35105e7eb}'; + {$EXTERNALSYM EncoderQuality} + EncoderTransformation : TGUID = '{8d0eb2d1-a58e-4ea8-aa14-108074b7b6f9}'; + {$EXTERNALSYM EncoderTransformation} + EncoderLuminanceTable : TGUID = '{edb33bce-0266-4a77-b904-27216099e717}'; + {$EXTERNALSYM EncoderLuminanceTable} + EncoderChrominanceTable : TGUID = '{f2e455dc-09b3-4316-8260-676ada32481c}'; + {$EXTERNALSYM EncoderChrominanceTable} + EncoderSaveFlag : TGUID = '{292266fc-ac40-47bf-8cfc-a85b89a655de}'; + {$EXTERNALSYM EncoderSaveFlag} + + +//--------------------------------------------------------------------------- +// Private GDI+ classes for internal type checking +//--------------------------------------------------------------------------- + +type + GpGraphics = Pointer; + + GpBrush = Pointer; + GpSolidFill = Pointer; + GpLineGradient = Pointer; + GpPathGradient = Pointer; + + GpPen = Pointer; + + GpImage = Pointer; + GpBitmap = Pointer; + GpImageAttributes = Pointer; + + GpPath = Pointer; + GpRegion = Pointer; + + GpFontFamily = Pointer; + GpFont = Pointer; + GpStringFormat = Pointer; + GpFontCollection = Pointer; + + GpStatus = TStatus; + GpFillMode = TFillMode; + GpWrapMode = TWrapMode; + GpUnit = TUnit; + GpPointF = PGPPointF; + GpPoint = PGPPoint; + GpRectF = PGPRectF; + GpRect = PGPRect; + GpDashStyle = TDashStyle; + GpLineCap = TLineCap; + GpFlushIntention = TFlushIntention; + + function GdipCreatePath(brushMode: GPFILLMODE; + out path: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreatePath} + + (* function GdipClonePath(path: GPPATH; + out clonePath: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipClonePath} + *) + function GdipDeletePath(path: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeletePath} + (* + function GdipStartPathFigure(path: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipStartPathFigure} + *) + function GdipClosePathFigure(path: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipClosePathFigure} + + function GdipAddPathLine(path: GPPATH; + x1, y1, x2, y2: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathLine} + + function GdipAddPathArc(path: GPPATH; x, y, width, height, startAngle, + sweepAngle: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathArc} + + function GdipAddPathEllipse(path: GPPATH; x: Single; y: Single; + width: Single; height: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathEllipse} + + function GdipAddPathPie(path: GPPATH; x: Single; y: Single; width: Single; + height: Single; startAngle: Single; sweepAngle: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathPie} + +//---------------------------------------------------------------------------- +// Brush APIs +//---------------------------------------------------------------------------- + + function GdipDeleteBrush(brush: GPBRUSH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeleteBrush} + +//---------------------------------------------------------------------------- +// SolidBrush APIs +//---------------------------------------------------------------------------- + + function GdipCreateSolidFill(color: ARGB; + out brush: GPSOLIDFILL): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateSolidFill} + +//---------------------------------------------------------------------------- +// LineBrush APIs +//---------------------------------------------------------------------------- + + function GdipCreateLineBrushFromRect(rect: GPRECTF; color1: ARGB; + color2: ARGB; mode: LINEARGRADIENTMODE; wrapMode: GPWRAPMODE; + out lineGradient: GPLINEGRADIENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateLineBrushFromRect} + + function GdipCreateLineBrushFromRectI(rect: GPRECT; color1: ARGB; + color2: ARGB; mode: LINEARGRADIENTMODE; wrapMode: GPWRAPMODE; + out lineGradient: GPLINEGRADIENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateLineBrushFromRectI} + + function GdipCreateLineBrushFromRectWithAngle(rect: GPRECTF; color1: ARGB; + color2: ARGB; angle: Single; isAngleScalable: Bool; wrapMode: GPWRAPMODE; + out lineGradient: GPLINEGRADIENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateLineBrushFromRectWithAngle} + +//---------------------------------------------------------------------------- +// PathGradientBrush APIs +//---------------------------------------------------------------------------- + + function GdipCreatePathGradient(points: GPPOINTF; count: Integer; + wrapMode: GPWRAPMODE; out polyGradient: GPPATHGRADIENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreatePathGradient} + + function GdipCreatePathGradientFromPath(path: GPPATH; + out polyGradient: GPPATHGRADIENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreatePathGradientFromPath} + + function GdipGetPathGradientCenterColor(brush: GPPATHGRADIENT; + out colors: ARGB): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPathGradientCenterColor} + + function GdipSetPathGradientCenterColor(brush: GPPATHGRADIENT; + colors: ARGB): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetPathGradientCenterColor} + + function GdipGetPathGradientSurroundColorsWithCount(brush: GPPATHGRADIENT; + color: PARGB; var count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPathGradientSurroundColorsWithCount} + + function GdipSetPathGradientSurroundColorsWithCount(brush: GPPATHGRADIENT; + color: PARGB; var count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetPathGradientSurroundColorsWithCount} + + function GdipGetPathGradientCenterPoint(brush: GPPATHGRADIENT; + points: GPPOINTF): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPathGradientCenterPoint} + + function GdipGetPathGradientCenterPointI(brush: GPPATHGRADIENT; + points: GPPOINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPathGradientCenterPointI} + + function GdipSetPathGradientCenterPoint(brush: GPPATHGRADIENT; + points: GPPOINTF): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetPathGradientCenterPoint} + + function GdipSetPathGradientCenterPointI(brush: GPPATHGRADIENT; + points: GPPOINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetPathGradientCenterPointI} + + function GdipGetPathGradientPointCount(brush: GPPATHGRADIENT; + var count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPathGradientPointCount} + + function GdipGetPathGradientSurroundColorCount(brush: GPPATHGRADIENT; + var count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPathGradientSurroundColorCount} + +//---------------------------------------------------------------------------- +// Pen APIs +//---------------------------------------------------------------------------- + + function GdipCreatePen1(color: ARGB; width: Single; unit_: GPUNIT; + out pen: GPPEN): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreatePen1} + + function GdipDeletePen(pen: GPPEN): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeletePen} + +//---------------------------------------------------------------------------- +// Graphics APIs +//---------------------------------------------------------------------------- + + function GdipFlush(graphics: GPGRAPHICS; + intention: GPFLUSHINTENTION): GPSTATUS; stdcall; + {$EXTERNALSYM GdipFlush} + + function GdipCreateFromHDC(hdc: HDC; + out graphics: GPGRAPHICS): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateFromHDC} + + function GdipGetImageGraphicsContext(image: GPIMAGE; + out graphics: GPGRAPHICS): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageGraphicsContext} + + + function GdipDeleteGraphics(graphics: GPGRAPHICS): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeleteGraphics} + + function GdipGetDC(graphics: GPGRAPHICS; var hdc: HDC): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetDC} + + function GdipReleaseDC(graphics: GPGRAPHICS; hdc: HDC): GPSTATUS; stdcall; + {$EXTERNALSYM GdipReleaseDC} + + function GdipSetSmoothingMode(graphics: GPGRAPHICS; + smoothingMode: SMOOTHINGMODE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetSmoothingMode} + + function GdipGetSmoothingMode(graphics: GPGRAPHICS; + var smoothingMode: SMOOTHINGMODE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetSmoothingMode} + + function GdipSetTextRenderingHint(graphics: GPGRAPHICS; + mode: TEXTRENDERINGHINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetTextRenderingHint} + + function GdipGetTextRenderingHint(graphics: GPGRAPHICS; + var mode: TEXTRENDERINGHINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetTextRenderingHint} + + function GdipDrawRectangle(graphics: GPGRAPHICS; pen: GPPEN; x: Single; + y: Single; width: Single; height: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawRectangle} + + function GdipDrawRectangleI(graphics: GPGRAPHICS; pen: GPPEN; x: Integer; + y: Integer; width: Integer; height: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawRectangleI} + + + function GdipDrawPath(graphics: GPGRAPHICS; pen: GPPEN; + path: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawPath} + + function GdipFillRectangle(graphics: GPGRAPHICS; brush: GPBRUSH; x: Single; + y: Single; width: Single; height: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipFillRectangle} + + function GdipFillPath(graphics: GPGRAPHICS; brush: GPBRUSH; + path: GPPATH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipFillPath} + + function GdipDrawImageI(graphics: GPGRAPHICS; image: GPIMAGE; x: Integer; + y: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawImageI} + + function GdipDrawImage(graphics: GPGRAPHICS; image: GPIMAGE; x: Single; + y: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawImage} + + function GdipDrawImageRect(graphics: GPGRAPHICS; image: GPIMAGE; x: Single; + y: Single; width: Single; height: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawImageRect} + + function GdipDrawImageRectI(graphics: GPGRAPHICS; image: GPIMAGE; x: Integer; + y: Integer; width: Integer; height: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawImageRectI} + + function GdipGetImageRawFormat(image: GPIMAGE; + format: PGUID): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageRawFormat} + + function GdipGetPenDashStyle(pen: GPPEN; + out dashstyle: GPDASHSTYLE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetPenDashStyle} + + function GdipSetPenDashStyle(pen: GPPEN; + dashstyle: GPDASHSTYLE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetPenDashStyle} + + function GdipSetClipRect(graphics: GPGRAPHICS; x: Single; y: Single; + width: Single; height: Single; combineMode: COMBINEMODE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetClipRect} + + function GdipSetClipRegion(graphics: GPGRAPHICS; region: GPREGION; + combineMode: COMBINEMODE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetClipRegion} + + function GdipCreateRegionRect(rect: GPRECTF; + out region: GPREGION): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateRegionRect} + + function GdipCreateRegionPath(path: GPPATH; + out region: GPREGION): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateRegionPath} + + function GdipDeleteRegion(region: GPREGION): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeleteRegion} + + function GdipCombineRegionPath(region: GPREGION; path: GPPATH; + combineMode: COMBINEMODE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCombineRegionPath} + + function GdipCombineRegionRegion(region: GPREGION; region2: GPREGION; + combineMode: COMBINEMODE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCombineRegionRegion} + +//---------------------------------------------------------------------------- +// FontFamily APIs +//---------------------------------------------------------------------------- + + function GdipCreateFontFamilyFromName(name: PWCHAR; + fontCollection: GPFONTCOLLECTION; + out FontFamily: GPFONTFAMILY): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateFontFamilyFromName} + + function GdipDeleteFontFamily(FontFamily: GPFONTFAMILY): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeleteFontFamily} + +//---------------------------------------------------------------------------- +// Font APIs +//---------------------------------------------------------------------------- + + function GdipCreateFont(fontFamily: GPFONTFAMILY; emSize: Single; + style: Integer; unit_: Integer; out font: GPFONT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateFont} + + function GdipDeleteFont(font: GPFONT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeleteFont} + +//---------------------------------------------------------------------------- +// Image APIs +//---------------------------------------------------------------------------- + + function GdipGetImageDecodersSize(out numDecoders: UINT; + out size: UINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageDecodersSize} + + function GdipGetImageDecoders(numDecoders: UINT; size: UINT; + decoders: PIMAGECODECINFO): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageDecoders} + + function GdipGetImageEncoders(numEncoders: UINT; size: UINT; + encoders: PIMAGECODECINFO): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageEncoders} + + function GdipGetImageEncodersSize(out numEncoders: UINT; + out size: UINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageEncodersSize} + + function GdipSaveImageToFile(image: GPIMAGE; + filename: PWCHAR; + clsidEncoder: PGUID; + encoderParams: PENCODERPARAMETERS): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSaveImageToFile} + + function GdipLoadImageFromStream(stream: ISTREAM; + out image: GPIMAGE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipLoadImageFromStream} + + function GdipLoadImageFromFileICM(filename: PWCHAR; + out image: GPIMAGE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipLoadImageFromFileICM} + + function GdipLoadImageFromFile(filename: PWCHAR; + out image: GPIMAGE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipLoadImageFromFile} + + function GdipLoadImageFromStreamICM(stream: ISTREAM; + out image: GPIMAGE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipLoadImageFromStreamICM} + + function GdipDisposeImage(image: GPIMAGE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDisposeImage} + + function GdipGetImageWidth(image: GPIMAGE; var width: UINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageWidth} + + function GdipGetImageHeight(image: GPIMAGE; var height: UINT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageHeight} + + function GdipGetImageHorizontalResolution(image: GPIMAGE; var resolution: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageHorizontalResolution} + + function GdipGetImageVerticalResolution(image: GPIMAGE; var resolution: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetImageVerticalResolution} + + +//---------------------------------------------------------------------------- +// Text APIs +//---------------------------------------------------------------------------- + + function GdipDrawString(graphics: GPGRAPHICS; string_: PWCHAR; + length: Integer; font: GPFONT; layoutRect: PGPRectF; + stringFormat: GPSTRINGFORMAT; brush: GPBRUSH): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawString} + + function GdipMeasureString(graphics: GPGRAPHICS; string_: PWCHAR; + length: Integer; font: GPFONT; layoutRect: PGPRectF; + stringFormat: GPSTRINGFORMAT; boundingBox: PGPRectF; + codepointsFitted: PInteger; linesFilled: PInteger): GPSTATUS; stdcall; + {$EXTERNALSYM GdipMeasureString} + + function GdipSetStringFormatHotkeyPrefix(format: GPSTRINGFORMAT; + hotkeyPrefix: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetStringFormatHotkeyPrefix} + + function GdipGetStringFormatHotkeyPrefix(format: GPSTRINGFORMAT; + out hotkeyPrefix: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetStringFormatHotkeyPrefix} + +//---------------------------------------------------------------------------- +// String format APIs +//---------------------------------------------------------------------------- + + function GdipCreateStringFormat(formatAttributes: Integer; language: LANGID; + out format: GPSTRINGFORMAT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateStringFormat} + + function GdipDeleteStringFormat(format: GPSTRINGFORMAT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDeleteStringFormat} + + function GdipCloneStringFormat(format: GPSTRINGFORMAT; + out newFormat: GPSTRINGFORMAT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCloneStringFormat} + + function GdipSetStringFormatAlign(format: GPSTRINGFORMAT; + align: STRINGALIGNMENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetStringFormatAlign} + + function GdipGetStringFormatAlign(format: GPSTRINGFORMAT; + out align: STRINGALIGNMENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetStringFormatAlign} + + function GdipSetStringFormatLineAlign(format: GPSTRINGFORMAT; + align: STRINGALIGNMENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetStringFormatLineAlign} + + function GdipGetStringFormatLineAlign(format: GPSTRINGFORMAT; + out align: STRINGALIGNMENT): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetStringFormatLineAlign} + + + function GdipSetStringFormatTrimming(format: GPSTRINGFORMAT; + trimming: STRINGTRIMMING): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetStringFormatTrimming} + + function GdipGetStringFormatTrimming(format: GPSTRINGFORMAT; + out trimming: STRINGTRIMMING): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetStringFormatTrimming} + + function GdipSetCompositingQuality(graphics: GPGRAPHICS; + compositingQuality: COMPOSITINGQUALITY): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetCompositingQuality} + + function GdipGetCompositingQuality(graphics: GPGRAPHICS; + var compositingQuality: COMPOSITINGQUALITY): GPSTATUS; stdcall; + {$EXTERNALSYM GdipGetCompositingQuality} + + function GdipImageRotateFlip(image: GPIMAGE; rfType: ROTATEFLIPTYPE): GPSTATUS; stdcall; + {$EXTERNALSYM GdipImageRotateFlip} + + function GdipCreateBitmapFromStreamICM(stream: ISTREAM; + out bitmap: GPBITMAP): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateBitmapFromStreamICM} + + function GdipCreateBitmapFromStream(stream: ISTREAM; + out bitmap: GPBITMAP): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateBitmapFromStream} + + function GdipCreateBitmapFromScan0(width: Integer; height: Integer; + stride: Integer; format: PIXELFORMAT; scan0: PBYTE; + out bitmap: GPBITMAP): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateBitmapFromScan0} + + function GdipBitmapGetPixel(bitmap: GPBITMAP; x: Integer; y: Integer; + var color: ARGB): GPSTATUS; stdcall; + {$EXTERNALSYM GdipBitmapGetPixel} + + function GdipBitmapSetPixel(bitmap: GPBITMAP; x: Integer; y: Integer; + color: ARGB): GPSTATUS; stdcall; + {$EXTERNALSYM GdipBitmapSetPixel} + + function GdipBitmapSetResolution(bitmap: GPBITMAP; xdpi: Single; + ydpi: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipBitmapSetResolution} + + function GdipCreateImageAttributes( + out imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; + {$EXTERNALSYM GdipCreateImageAttributes} + + function GdipDisposeImageAttributes( + imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDisposeImageAttributes} + + function GdipSetImageAttributesColorKeys(imageattr: GPIMAGEATTRIBUTES; + type_: COLORADJUSTTYPE; enableFlag: Bool; colorLow: ARGB; + colorHigh: ARGB): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetImageAttributesColorKeys} + + function GdipSetPenEndCap(pen: GPPEN; endCap: GPLINECAP): GPSTATUS; stdcall; + {$EXTERNALSYM GdipSetPenEndCap} + + function GdipAddPathLine2I(path: GPPATH; points: GPPOINT; + count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathLine2I} + + + function GdipAddPathPolygon(path: GPPATH; points: GPPOINTF; + count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathPolygon} + + function GdipAddPathPolygonI(path: GPPATH; points: GPPOINT; + count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathPolygonI} + + function GdipAddPathCurveI(path: GPPATH; points: GPPOINT; + count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathCurveI} + + function GdipAddPathCurve(path: GPPATH; points: GPPOINTF; + count: Integer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathCurve} + + function GdipAddPathCurve2I(path: GPPATH; points: GPPOINT; count: Integer; + tension: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathCurve2I} + + function GdipResetClip(graphics: GPGRAPHICS): GPSTATUS; stdcall; + {$EXTERNALSYM GdipResetClip} + + function GdipAddPathBezier(path: GPPATH; + x1, y1, x2, y2, x3, y3, x4, y4: Single): GPSTATUS; stdcall; + {$EXTERNALSYM GdipAddPathBezier} + + function GdipDrawImageRectRect(graphics: GPGRAPHICS; image: GPIMAGE; + dstx: Single; dsty: Single; dstwidth: Single; dstheight: Single; + srcx: Single; srcy: Single; srcwidth: Single; srcheight: Single; + srcUnit: GPUNIT; imageAttributes: GPIMAGEATTRIBUTES; + callback: DRAWIMAGEABORT; callbackData: Pointer): GPSTATUS; stdcall; + {$EXTERNALSYM GdipDrawImageRectRect} + +//*************************************************************************** +//--------------------------------------------------------------------------- +// GDI+ classes for forward reference +//--------------------------------------------------------------------------- + +type + TGPGraphics = class; + TGPPen = class; + TGPBrush = class; + TGPFontFamily = class; + TGPGraphicsPath = class; + TGPSolidBrush = class; + TGPLinearGradientBrush = class; + TGPPathGradientBrush = class; + TGPFont = class; + TGPFontCollection = class; + +//------------------------------------------------------------------------------ +// GPRegion +//------------------------------------------------------------------------------ + TGPRegion = class(TGdiplusBase) + protected + nativeRegion: GpRegion; + lastResult: TStatus; + function SetStatus(status: TStatus): TStatus; + procedure SetNativeRegion(nativeRegion: GpRegion); + public + constructor Create(rect: TGPRectF); reintroduce; overload; + constructor Create(path: TGPGraphicsPath); reintroduce; overload; + destructor Destroy; override; + function Exclude(path: TGPGraphicsPath): TStatus; overload; + function Union(region: TGPRegion): TStatus; overload; + end; + +//-------------------------------------------------------------------------- +// FontFamily +//-------------------------------------------------------------------------- + + TGPFontFamily = class(TGdiplusBase) + protected + nativeFamily: GpFontFamily; + lastResult: TStatus; + function SetStatus(status: TStatus): TStatus; + public + constructor Create(nativeOrig: GpFontFamily; status: TStatus); reintroduce; overload; + constructor Create(name: WideString; fontCollection: TGPFontCollection = nil); reintroduce; overload; + destructor Destroy; override; + property Status: TStatus read lastResult; + end; + +//-------------------------------------------------------------------------- +// Font Collection +//-------------------------------------------------------------------------- + + TGPFontCollection = class(TGdiplusBase) + protected + nativeFontCollection: GpFontCollection; + lastResult: TStatus; + function SetStatus(status: TStatus): TStatus; + public + constructor Create; + destructor Destroy; override; + end; + +//-------------------------------------------------------------------------- +// TFont +//-------------------------------------------------------------------------- + + TGPFont = class(TGdiplusBase) + protected + nativeFont: GpFont; + lastResult: TStatus; + procedure SetNativeFont(Font: GpFont); + function SetStatus(status: TStatus): TStatus; + public + constructor Create(font: GpFont; status: TStatus); reintroduce; overload; + constructor Create(family: TGPFontFamily; emSize: Single; + style: TFontStyle = FontStyleRegular; + unit_: TUnit = UnitPoint); reintroduce; overload; + destructor Destroy; override; + property Status: TStatus read lastResult; + end; + +(**************************************************************************\ +* +* GDI+ Brush class +* +\**************************************************************************) + + //-------------------------------------------------------------------------- + // Abstract base class for various brush types + //-------------------------------------------------------------------------- + + TGPBrush = class(TGdiplusBase) + protected + nativeBrush: GpBrush; + lastResult: TStatus; + procedure SetNativeBrush(nativeBrush: GpBrush); + function SetStatus(status: TStatus): TStatus; + public + constructor Create(nativeBrush: GpBrush; status: TStatus); reintroduce; overload; + constructor Create; overload; + destructor Destroy; override; + end; + + //-------------------------------------------------------------------------- + // Solid Fill Brush Object + //-------------------------------------------------------------------------- + + TGPSolidBrush = class(TGPBrush) + public + constructor Create(color: TGPColor); reintroduce; overload; + constructor Create; reintroduce; overload; + end; + + //-------------------------------------------------------------------------- + // Linear Gradient Brush Object + //-------------------------------------------------------------------------- + + TGPLinearGradientBrush = class(TGPBrush) + public + constructor Create; reintroduce; overload; + constructor Create(rect: TGPRectF; color1, color2: TGPColor; + mode: TLinearGradientMode); reintroduce; overload; + constructor Create(rect: TGPRect; color1, color2: TGPColor; + mode: TLinearGradientMode); reintroduce; overload; + end; + +(**************************************************************************\ +* +* GDI+ Pen class +* +\**************************************************************************) + +//-------------------------------------------------------------------------- +// Pen class +//-------------------------------------------------------------------------- + + TGPPen = class(TGdiplusBase) + protected + nativePen: GpPen; + lastResult: TStatus; + procedure SetNativePen(nativePen: GpPen); + function SetStatus(status: TStatus): TStatus; + public + constructor Create(nativePen: GpPen; status: TStatus); reintroduce; overload; + constructor Create(color: TGPColor; width: Single = 1.0); reintroduce; overload; + destructor Destroy; override; + function GetDashStyle: TDashStyle; + function SetDashStyle(dashStyle: TDashStyle): TStatus; + function SetEndCap(endCap: TLineCap): TStatus; + end; + +(**************************************************************************\ +* +* GDI+ StringFormat class +* +\**************************************************************************) + + TGPStringFormat = class(TGdiplusBase) + protected + nativeFormat: GpStringFormat; + lastError: TStatus; + function SetStatus(newStatus: GpStatus): TStatus; + procedure Assign(source: TGPStringFormat); + public + constructor Create(clonedStringFormat: GpStringFormat; status: TStatus); reintroduce; overload; + constructor Create(formatFlags: Integer = 0; language: LANGID = LANG_NEUTRAL); reintroduce; overload; + destructor Destroy; override; + function SetAlignment(align: TStringAlignment): TStatus; + function GetAlignment: TStringAlignment; + function SetLineAlignment(align: TStringAlignment): TStatus; + function GetLineAlignment: TStringAlignment; + function SetTrimming(trimming: TStringTrimming): TStatus; + function GetTrimming: TStringTrimming; + function SetHotkeyPrefix(hotkeyPrefix: THotkeyPrefix): TStatus; + function GetHotkeyPrefix: THotkeyPrefix; + + end; + +(**************************************************************************\ +* +* GDI+ Graphics Path class +* +\**************************************************************************) + + TGPGraphicsPath = class(TGdiplusBase) + protected + nativePath: GpPath; + lastResult: TStatus; + procedure SetNativePath(nativePath: GpPath); + function SetStatus(status: TStatus): TStatus; + public + constructor Create(nativePath: GpPath); reintroduce; overload; + constructor Create(fillMode: TFillMode = FillModeAlternate); reintroduce; overload; + destructor Destroy; override; + + function CloseFigure: TStatus; + + function AddLine(const pt1, pt2: TGPPointF): TStatus; overload; + function AddLine(x1, y1, x2, y2: Single): TStatus; overload; + function AddLines(points: PGPPoint; count: Integer): TStatus; overload; + + function AddArc(rect: TGPRectF; startAngle, sweepAngle: Single): TStatus; overload; + function AddArc(x, y, width, height, startAngle, sweepAngle: Single): TStatus; overload; + + function AddEllipse(rect: TGPRectF): TStatus; overload; + function AddEllipse(x, y, width, height: Single): TStatus; overload; + + function AddPie(rect: TGPRectF; startAngle, sweepAngle: Single): TStatus; overload; + function AddPie(x, y, width, height, startAngle, sweepAngle: Single): TStatus; overload; + + function AddPolygon(points: PGPPointF; count: Integer): TStatus; overload; + function AddPolygon(points: PGPPoint; count: Integer): TStatus; overload; + + + function AddCurve(points: PGPPointF; count: Integer): TStatus; overload; + function AddCurve(points: PGPPoint; count: Integer): TStatus; overload; + function AddCurve(points: PGPPoint; count: Integer; tension: Single): TStatus; overload; + + function AddBezier(pt1, pt2, pt3, pt4: TGPPoint): TStatus; overload; + function AddBezier(pt1, pt2, pt3, pt4: TGPPointF): TStatus; overload; + function AddBezier(x1, y1, x2, y2, x3, y3, x4, y4: Single): TStatus; overload; + end; + +//-------------------------------------------------------------------------- +// Path Gradient Brush +//-------------------------------------------------------------------------- + + TGPPathGradientBrush = class(TGPBrush) + public + {constructor Create(points: PGPPointF; count: Integer; + wrapMode: TWrapMode = WrapModeClamp); reintroduce; overload; } + constructor Create(path: TGPGraphicsPath); reintroduce; //overload; + function GetCenterColor(out Color: TGPColor): TStatus; + function SetCenterColor(color: TGPColor): TStatus; + function GetPointCount: Integer; + function GetSurroundColors(colors: PARGB; var count: Integer): TStatus; + function SetSurroundColors(colors: PARGB; var count: Integer): TStatus; + function GetCenterPoint(out point: TGPPointF): TStatus; overload; + function GetCenterPoint(out point: TGPPoint): TStatus; overload; + function SetCenterPoint(point: TGPPointF): TStatus; overload; + function SetCenterPoint(point: TGPPoint): TStatus; overload; + end; + +(**************************************************************************\ +* TGPImage +***************************************************************************) + TGPImageFormat = (ifUndefined, ifMemoryBMP, ifBMP, ifEMF, ifWMF, ifJPEG, + ifPNG, ifGIF, ifTIFF, ifEXIF, ifIcon); + + TGPImage = class(TGdiplusBase) + protected + nativeImage: GpImage; + lastResult: TStatus; + loadStatus: TStatus; + procedure SetNativeImage(nativeImage: GpImage); + function SetStatus(status: TStatus): TStatus; + public + constructor Create(nativeImage: GpImage; status: TStatus); reintroduce; overload; + constructor Create(filename: WideString; useEmbeddedColorManagement: BOOL = FALSE); reintroduce; overload; + constructor Create(stream: IStream; useEmbeddedColorManagement: BOOL = FALSE); reintroduce; overload; + destructor Destroy; override; + function Save(filename: WideString; const clsidEncoder: TGUID; encoderParams: PEncoderParameters = nil): TStatus; overload; + function GetFormat: TGPImageFormat; + function GetWidth: UINT; + function GetHeight: UINT; + function GetHorizontalResolution: Single; + function GetVerticalResolution: Single; + function RotateFlip(rotateFlipType: TRotateFlipType): TStatus; + end; + + TGPBitmap = class(TGPImage) + public + constructor Create(nativeBitmap: GpBitmap); reintroduce; overload; + constructor Create(stream: IStream; useEmbeddedColorManagement: BOOL = FALSE); reintroduce; overload; + constructor Create(width, height: Integer; format: TPixelFormat = PixelFormat32bppARGB); reintroduce; overload; + function FromStream(stream: IStream; useEmbeddedColorManagement: BOOL = FALSE): TGPBitmap; + function GetPixel(x, y: Integer; out color: TGPColor): TStatus; + function SetPixel(x, y: Integer; color: TGPColor): TStatus; + function SetResolution(xdpi, ydpi: Single): TStatus; + end; + + TGPImageAttributes = class(TGdiplusBase) + protected + nativeImageAttr: GpImageAttributes; + lastResult: TStatus; + function SetStatus(status: TStatus): TStatus; + public + constructor Create; reintroduce; overload; + destructor Destroy; override; + function SetColorKey(colorLow, colorHigh: TGPColor; type_: TColorAdjustType = ColorAdjustTypeDefault): TStatus; + function ClearColorKey(type_: TColorAdjustType = ColorAdjustTypeDefault): TStatus; + end; + +(**************************************************************************\ +* +* GDI+ Graphics Object +* +\**************************************************************************) + + TGPGraphics = class(TGdiplusBase) + protected + nativeGraphics: GpGraphics; + lastResult: TStatus; + procedure SetNativeGraphics(graphics: GpGraphics); + function SetStatus(status: TStatus): TStatus; + function GetNativeGraphics: GpGraphics; + public + //constructor Create(graphics: GpGraphics); reintroduce; overload; + constructor Create(hdc: HDC); reintroduce; overload; + constructor Create(image: TGPImage); reintroduce; overload; + destructor Destroy; override; + function FromImage(image: TGPImage): TGPGraphics; + procedure Flush(intention: TFlushIntention = FlushIntentionFlush); + //------------------------------------------------------------------------ + // GDI Interop methods + //------------------------------------------------------------------------ + // Locks the graphics until ReleaseDC is called + function GetHDC: HDC; + procedure ReleaseHDC(hdc: HDC); + //------------------------------------------------------------------------ + // Rendering modes + //------------------------------------------------------------------------ + function SetCompositingQuality(compositingQuality: TCompositingQuality): TStatus; + function GetCompositingQuality: TCompositingQuality; + + function SetTextRenderingHint(newMode: TTextRenderingHint): TStatus; + function GetTextRenderingHint: TTextRenderingHint; + function GetSmoothingMode: TSmoothingMode; + function SetSmoothingMode(smoothingMode: TSmoothingMode): TStatus; + // DrawPath + function DrawPath(pen: TGPPen; path: TGPGraphicsPath): TStatus; + // FillRectangle(s) + function FillRectangle(brush: TGPBrush; const rect: TGPRectF): TStatus; overload; + function FillRectangle(brush: TGPBrush; x, y, width, height: Single): TStatus; overload; + // DrawString + {$IFNDEF DELPHI_UNICODE} + function DrawString(string_: string; length: Integer; font: TGPFont; + const layoutRect: TGPRectF; stringFormat: TGPStringFormat; brush: TGPBrush): TStatus; overload; + {$ENDIF} + {$IFDEF DELPHI6_LVL} + function DrawString(string_: widestring; length: Integer; font: TGPFont; + const layoutRect: TGPRectF; stringFormat: TGPStringFormat; brush: TGPBrush): TStatus; overload; + {$ENDIF} + // MeasureString + function MeasureString(string_: WideString; length: Integer; font: TGPFont; + const layoutRect: TGPRectF; stringFormat: TGPStringFormat; out boundingBox: TGPRectF; + codepointsFitted: PInteger = nil; linesFilled: PInteger = nil): TStatus; overload; + function GetLastStatus: TStatus; + // DrawRectangle + function DrawRectangle(pen: TGPPen; const rect: TGPRectF): TStatus; overload; + function DrawRectangle(pen: TGPPen; x, y, width, height: Single): TStatus; overload; + // DrawImage + function DrawImage(image: TGPImage; x, y: Integer): TStatus; overload; + function DrawImageRect(image: TGPImage; x, y, w, h: Integer): TStatus; overload; + function DrawImage(image: TGPImage; const destRect: TGPRectF; srcx, srcy, + srcwidth, srcheight: Single; srcUnit: TUnit; + imageAttributes: TGPImageAttributes = nil; callback: DrawImageAbort = nil; + callbackData: Pointer = nil): TStatus; overload; + // FillPath + function FillPath(brush: TGPBrush; path: TGPGraphicsPath): TStatus; + // Clip + function ExcludeClip(const rect: TGPRectF): TStatus; overload; + function ExcludeClip(region: TGPRegion): TStatus; overload; + function SetClip(region: TGPRegion; combineMode: TCombineMode = CombineModeReplace): TStatus; + function ResetClip: TStatus; + end; + + function ColorToARGB(Color: TColor): ARGB; + + function GetEncoderQualityParameters(ImageQualityPercentage: integer): TEncoderParameters; + + +//////////////////////////////////////////////////////////////////////////////// + +var + StartupInput: TGDIPlusStartupInput; + StartupOutput: TGdiplusStartupOutput; + gdiplusToken: ULONG; + + + +implementation + +function ColorToARGB(Color: TColor): ARGB; +var + c: TColor; +begin + c := ColorToRGB(Color); + Result := ARGB( $FF000000 or ((DWORD(c) and $FF) shl 16) or ((DWORD(c) and $FF00) or ((DWORD(c) and $ff0000) shr 16))); +end; + + + function GdipAlloc; external WINGDIPDLL name 'GdipAlloc'; + procedure GdipFree; external WINGDIPDLL name 'GdipFree'; + function GdiplusStartup; external WINGDIPDLL name 'GdiplusStartup'; + procedure GdiplusShutdown; external WINGDIPDLL name 'GdiplusShutdown'; + + function GdipCreatePath; external WINGDIPDLL name 'GdipCreatePath'; + function GdipDeletePath; external WINGDIPDLL name 'GdipDeletePath'; + //function GdipStartPathFigure; external WINGDIPDLL name 'GdipStartPathFigure'; + function GdipClosePathFigure; external WINGDIPDLL name 'GdipClosePathFigure'; + function GdipAddPathLine; external WINGDIPDLL name 'GdipAddPathLine'; + function GdipAddPathArc; external WINGDIPDLL name 'GdipAddPathArc'; + function GdipAddPathEllipse; external WINGDIPDLL name 'GdipAddPathEllipse'; + function GdipAddPathPie; external WINGDIPDLL name 'GdipAddPathPie'; + function GdipDeleteBrush; external WINGDIPDLL name 'GdipDeleteBrush'; + function GdipCreateSolidFill; external WINGDIPDLL name 'GdipCreateSolidFill'; + function GdipCreateLineBrushFromRect; external WINGDIPDLL name 'GdipCreateLineBrushFromRect'; + function GdipCreateLineBrushFromRectI; external WINGDIPDLL name 'GdipCreateLineBrushFromRectI'; + function GdipCreateLineBrushFromRectWithAngle; external WINGDIPDLL name 'GdipCreateLineBrushFromRectWithAngle'; + function GdipCreatePathGradient; external WINGDIPDLL name 'GdipCreatePathGradient'; + function GdipCreatePathGradientFromPath; external WINGDIPDLL name 'GdipCreatePathGradientFromPath'; + function GdipGetPathGradientCenterColor; external WINGDIPDLL name 'GdipGetPathGradientCenterColor'; + function GdipSetPathGradientCenterColor; external WINGDIPDLL name 'GdipSetPathGradientCenterColor'; + function GdipGetPathGradientSurroundColorsWithCount; external WINGDIPDLL name 'GdipGetPathGradientSurroundColorsWithCount'; + function GdipSetPathGradientSurroundColorsWithCount; external WINGDIPDLL name 'GdipSetPathGradientSurroundColorsWithCount'; + function GdipGetPathGradientCenterPoint; external WINGDIPDLL name 'GdipGetPathGradientCenterPoint'; + function GdipGetPathGradientCenterPointI; external WINGDIPDLL name 'GdipGetPathGradientCenterPointI'; + function GdipSetPathGradientCenterPoint; external WINGDIPDLL name 'GdipSetPathGradientCenterPoint'; + function GdipSetPathGradientCenterPointI; external WINGDIPDLL name 'GdipSetPathGradientCenterPointI'; + function GdipGetPathGradientPointCount; external WINGDIPDLL name 'GdipGetPathGradientPointCount'; + function GdipGetPathGradientSurroundColorCount; external WINGDIPDLL name 'GdipGetPathGradientSurroundColorCount'; + function GdipCreatePen1; external WINGDIPDLL name 'GdipCreatePen1'; + function GdipDeletePen; external WINGDIPDLL name 'GdipDeletePen'; + function GdipFlush; external WINGDIPDLL name 'GdipFlush'; + function GdipCreateFromHDC; external WINGDIPDLL name 'GdipCreateFromHDC'; + function GdipGetImageGraphicsContext; external WINGDIPDLL name 'GdipGetImageGraphicsContext'; + function GdipDeleteGraphics; external WINGDIPDLL name 'GdipDeleteGraphics'; + function GdipGetDC; external WINGDIPDLL name 'GdipGetDC'; + function GdipReleaseDC; external WINGDIPDLL name 'GdipReleaseDC'; + function GdipSetSmoothingMode; external WINGDIPDLL name 'GdipSetSmoothingMode'; + function GdipGetSmoothingMode; external WINGDIPDLL name 'GdipGetSmoothingMode'; + function GdipSetTextRenderingHint; external WINGDIPDLL name 'GdipSetTextRenderingHint'; + function GdipGetTextRenderingHint; external WINGDIPDLL name 'GdipGetTextRenderingHint'; + function GdipDrawPath; external WINGDIPDLL name 'GdipDrawPath'; + function GdipFillRectangle; external WINGDIPDLL name 'GdipFillRectangle'; + function GdipCreateFontFamilyFromName; external WINGDIPDLL name 'GdipCreateFontFamilyFromName'; + function GdipDeleteFontFamily; external WINGDIPDLL name 'GdipDeleteFontFamily'; + function GdipCreateFont; external WINGDIPDLL name 'GdipCreateFont'; + function GdipDeleteFont; external WINGDIPDLL name 'GdipDeleteFont'; + function GdipDrawString; external WINGDIPDLL name 'GdipDrawString'; + function GdipMeasureString; external WINGDIPDLL name 'GdipMeasureString'; + function GdipCreateStringFormat; external WINGDIPDLL name 'GdipCreateStringFormat'; + function GdipDeleteStringFormat; external WINGDIPDLL name 'GdipDeleteStringFormat'; + function GdipCloneStringFormat; external WINGDIPDLL name 'GdipCloneStringFormat'; + function GdipSetStringFormatAlign; external WINGDIPDLL name 'GdipSetStringFormatAlign'; + function GdipGetStringFormatAlign; external WINGDIPDLL name 'GdipGetStringFormatAlign'; + function GdipSetStringFormatLineAlign; external WINGDIPDLL name 'GdipSetStringFormatLineAlign'; + function GdipGetStringFormatLineAlign; external WINGDIPDLL name 'GdipGetStringFormatLineAlign'; + function GdipSetStringFormatTrimming; external WINGDIPDLL name 'GdipSetStringFormatTrimming'; + function GdipGetStringFormatTrimming; external WINGDIPDLL name 'GdipGetStringFormatTrimming'; + function GdipGetImageRawFormat; external WINGDIPDLL name 'GdipGetImageRawFormat'; + function GdipDrawImage; external WINGDIPDLL name 'GdipDrawImage'; + function GdipDrawImageI; external WINGDIPDLL name 'GdipDrawImageI'; + function GdipDrawImageRect; external WINGDIPDLL name 'GdipDrawImageRect'; + function GdipDrawImageRectI; external WINGDIPDLL name 'GdipDrawImageRectI'; + function GdipDrawRectangle; external WINGDIPDLL name 'GdipDrawRectangle'; + function GdipDrawRectangleI; external WINGDIPDLL name 'GdipDrawRectangleI'; + function GdipFillPath; external WINGDIPDLL name 'GdipFillPath'; + function GdipGetImageDecodersSize; external WINGDIPDLL name 'GdipGetImageDecodersSize'; + function GdipGetImageDecoders; external WINGDIPDLL name 'GdipGetImageDecoders'; + function GdipGetImageEncodersSize; external WINGDIPDLL name 'GdipGetImageEncodersSize'; + function GdipGetImageEncoders; external WINGDIPDLL name 'GdipGetImageEncoders'; + function GdipSaveImageToFile; external WINGDIPDLL name 'GdipSaveImageToFile'; + function GdipLoadImageFromFileICM; external WINGDIPDLL name 'GdipLoadImageFromFileICM'; + function GdipLoadImageFromFile; external WINGDIPDLL name 'GdipLoadImageFromFile'; + function GdipLoadImageFromStream; external WINGDIPDLL name 'GdipLoadImageFromStream'; + function GdipLoadImageFromStreamICM; external WINGDIPDLL name 'GdipLoadImageFromStreamICM'; + function GdipDisposeImage; external WINGDIPDLL name 'GdipDisposeImage'; + function GdipGetImageWidth; external WINGDIPDLL name 'GdipGetImageWidth'; + function GdipGetImageHeight; external WINGDIPDLL name 'GdipGetImageHeight'; + function GdipGetImageHorizontalResolution; external WINGDIPDLL name 'GdipGetImageHorizontalResolution'; + function GdipGetImageVerticalResolution; external WINGDIPDLL name 'GdipGetImageVerticalResolution'; + function GdipGetPenDashStyle; external WINGDIPDLL name 'GdipGetPenDashStyle'; + function GdipSetPenDashStyle; external WINGDIPDLL name 'GdipSetPenDashStyle'; + function GdipSetStringFormatHotkeyPrefix; external WINGDIPDLL name 'GdipSetStringFormatHotkeyPrefix'; + function GdipGetStringFormatHotkeyPrefix; external WINGDIPDLL name 'GdipGetStringFormatHotkeyPrefix'; + function GdipSetClipRect; external WINGDIPDLL name 'GdipSetClipRect'; + function GdipSetClipRegion; external WINGDIPDLL name 'GdipSetClipRegion'; + function GdipCreateRegionRect; external WINGDIPDLL name 'GdipCreateRegionRect'; + function GdipCreateRegionPath; external WINGDIPDLL name 'GdipCreateRegionPath'; + function GdipDeleteRegion; external WINGDIPDLL name 'GdipDeleteRegion'; + function GdipCombineRegionPath; external WINGDIPDLL name 'GdipCombineRegionPath'; + function GdipCombineRegionRegion; external WINGDIPDLL name 'GdipCombineRegionRegion'; + function GdipSetCompositingQuality; external WINGDIPDLL name 'GdipSetCompositingQuality'; + function GdipGetCompositingQuality; external WINGDIPDLL name 'GdipGetCompositingQuality'; + function GdipImageRotateFlip; external WINGDIPDLL name 'GdipImageRotateFlip'; + function GdipCreateBitmapFromStreamICM; external WINGDIPDLL name 'GdipCreateBitmapFromStreamICM'; + function GdipCreateBitmapFromStream; external WINGDIPDLL name 'GdipCreateBitmapFromStream'; + function GdipCreateBitmapFromScan0; external WINGDIPDLL name 'GdipCreateBitmapFromScan0'; + function GdipBitmapGetPixel; external WINGDIPDLL name 'GdipBitmapGetPixel'; + function GdipBitmapSetPixel; external WINGDIPDLL name 'GdipBitmapSetPixel'; + function GdipBitmapSetResolution; external WINGDIPDLL name 'GdipBitmapSetResolution'; + + function GdipSetPenEndCap; external WINGDIPDLL name 'GdipSetPenEndCap'; + function GdipAddPathLine2I; external WINGDIPDLL name 'GdipAddPathLine2I'; + function GdipCreateImageAttributes; external WINGDIPDLL name 'GdipCreateImageAttributes'; + function GdipDisposeImageAttributes; external WINGDIPDLL name 'GdipDisposeImageAttributes'; + function GdipSetImageAttributesColorKeys; external WINGDIPDLL name 'GdipSetImageAttributesColorKeys'; + function GdipDrawImageRectRect; external WINGDIPDLL name 'GdipDrawImageRectRect'; + + function GdipAddPathPolygon; external WINGDIPDLL name 'GdipAddPathPolygon'; + function GdipAddPathPolygonI; external WINGDIPDLL name 'GdipAddPathPolygonI'; + function GdipAddPathCurveI; external WINGDIPDLL name 'GdipAddPathCurveI'; + function GdipAddPathCurve; external WINGDIPDLL name 'GdipAddPathCurve'; + function GdipAddPathCurve2I; external WINGDIPDLL name 'GdipAddPathCurve2I'; + function GdipResetClip; external WINGDIPDLL name 'GdipResetClip'; + function GdipAddPathBezier; external WINGDIPDLL name 'GdipAddPathBezier'; +// ----------------------------------------------------------------------------- +// TGdiplusBase class +// ----------------------------------------------------------------------------- + + +class function TGdiplusBase.NewInstance: TObject; +var + p : pointer; + sz : ULONG; +begin + { Note: GidpAlloc may fail on Windows XP if application is started from + Delphi 2007 in debug mode. + The reason for this fix is to workaround the following problem: + After an application with a TAdvOfficeToolBar executes a standard TOpenDialog, + an exception is raised while drawing the officetoolbar. } + sz := ULONG(InstanceSize); + p := GdipAlloc(sz); + if not Assigned(p) then + begin + //GdipAlloc failed --> restart GDI+ and try again + GdiplusStartup(gdiplusToken, @StartupInput, @StartupOutput); + p := GdipAlloc(sz); + end; + Result := InitInstance(p); +end; + +procedure TGdiplusBase.FreeInstance; +begin + CleanupInstance; + GdipFree(Self); +end; + + +function GetImageEncoders(numEncoders, size: UINT; + encoders: PImageCodecInfo): TStatus; +begin + result := GdipGetImageEncoders(numEncoders, size, encoders); +end; + +function GetImageEncodersSize(out numEncoders, size: UINT): TStatus; +begin + result := GdipGetImageEncodersSize(numEncoders, size); +end; + +function GetEncoderClsid(format: String; out pClsid: TGUID): integer; +var + num, size, j: UINT; + ImageCodecInfo: PImageCodecInfo; +Type + ArrIMgInf = array of TImageCodecInfo; +begin + num := 0; // number of image encoders + size := 0; // size of the image encoder array in bytes + result := -1; + + GetImageEncodersSize(num, size); + if (size = 0) then exit; + + GetMem(ImageCodecInfo, size); + if(ImageCodecInfo = nil) then exit; + + GetImageEncoders(num, size, ImageCodecInfo); + + for j := 0 to num - 1 do + begin + if( ArrIMgInf(ImageCodecInfo)[j].MimeType = format) then + begin + pClsid := ArrIMgInf(ImageCodecInfo)[j].Clsid; + result := j; // Success + end; + end; + FreeMem(ImageCodecInfo, size); +end; + + + +function GetEncoderQualityParameters(ImageQualityPercentage: integer): TEncoderParameters; +var + encoderParameters: TEncoderParameters; + value: integer; +begin + if ImageQualityPercentage < 0 then + ImageQualityPercentage := 0; + + if ImageQualityPercentage > 100 then + ImageQualityPercentage := 100; + + value := ImageQualityPercentage; + encoderParameters.Count := 1; + encoderParameters.Parameter[0].Guid := EncoderQuality; + encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong; + encoderParameters.Parameter[0].Value := @value; + encoderParameters.Parameter[0].NumberOfValues := 1; + + result := encoderParameters; +end; + + +//-------------------------------------------------------------------------- +// TGPPoint Util +//-------------------------------------------------------------------------- + +function MakePoint(X, Y: Integer): TGPPoint; +begin + result.X := X; + result.Y := Y; +end; + +function MakePoint(X, Y: Single): TGPPointF; +begin + Result.X := X; + result.Y := Y; +end; + +// ----------------------------------------------------------------------------- +// RectF class +// ----------------------------------------------------------------------------- + +function MakeRect(x, y, width, height: Single): TGPRectF; overload; +begin + Result.X := x; + Result.Y := y; + Result.Width := width; + Result.Height := height; +end; + + +//****************************************************************************** +(**************************************************************************\ +* +* GDI+ StringFormat class +* +\**************************************************************************) + +constructor TGPStringFormat.Create(formatFlags: Integer = 0; language: LANGID = LANG_NEUTRAL); +begin + nativeFormat := nil; + lastError := GdipCreateStringFormat(formatFlags, language, nativeFormat); +end; + +destructor TGPStringFormat.Destroy; +begin + GdipDeleteStringFormat(nativeFormat); +end; + +function TGPStringFormat.SetAlignment(align: TStringAlignment): TStatus; +begin + result := SetStatus(GdipSetStringFormatAlign(nativeFormat, align)); +end; + +function TGPStringFormat.GetAlignment: TStringAlignment; +begin + SetStatus(GdipGetStringFormatAlign(nativeFormat, result)); +end; + +function TGPStringFormat.SetLineAlignment(align: TStringAlignment): TStatus; +begin + result := SetStatus(GdipSetStringFormatLineAlign(nativeFormat, align)); +end; + +function TGPStringFormat.GetLineAlignment: TStringAlignment; +begin + SetStatus(GdipGetStringFormatLineAlign(nativeFormat, result)); +end; + + +function TGPStringFormat.SetTrimming(trimming: TStringTrimming): TStatus; +begin + result := SetStatus(GdipSetStringFormatTrimming(nativeFormat, trimming)); +end; + +function TGPStringFormat.GetTrimming: TStringTrimming; +begin + SetStatus(GdipGetStringFormatTrimming(nativeFormat, result)); +end; + +function TGPStringFormat.SetHotkeyPrefix(hotkeyPrefix: THotkeyPrefix): TStatus; +begin + result := SetStatus(GdipSetStringFormatHotkeyPrefix(nativeFormat, Integer(hotkeyPrefix))); +end; + +function TGPStringFormat.GetHotkeyPrefix: THotkeyPrefix; +var HotkeyPrefix: Integer; +begin + SetStatus(GdipGetStringFormatHotkeyPrefix(nativeFormat, HotkeyPrefix)); + result := THotkeyPrefix(HotkeyPrefix); +end; + + +function TGPStringFormat.SetStatus(newStatus: GpStatus): TStatus; +begin + if (newStatus <> Ok) then lastError := newStatus; + result := newStatus; +end; + +// operator = +procedure TGPStringFormat.Assign(source: TGPStringFormat); +begin + assert(assigned(source)); + GdipDeleteStringFormat(nativeFormat); + lastError := GdipCloneStringFormat(source.nativeFormat, nativeFormat); +end; + +constructor TGPStringFormat.Create(clonedStringFormat: GpStringFormat; status: TStatus); +begin + lastError := status; + nativeFormat := clonedStringFormat; +end; + +(**************************************************************************\ +* +* GDI+ Pen class +* +\**************************************************************************) + +//-------------------------------------------------------------------------- +// Pen class +//-------------------------------------------------------------------------- + +constructor TGPPen.Create(color: TGPColor; width: Single = 1.0); +var unit_: TUnit; +begin + unit_ := UnitWorld; + nativePen := nil; + lastResult := GdipCreatePen1(color, width, unit_, nativePen); +end; + +destructor TGPPen.Destroy; +begin + GdipDeletePen(nativePen); +end; + +constructor TGPPen.Create(nativePen: GpPen; status: TStatus); +begin + lastResult := status; + SetNativePen(nativePen); +end; + +procedure TGPPen.SetNativePen(nativePen: GpPen); +begin + self.nativePen := nativePen; +end; + +function TGPPen.SetStatus(status: TStatus): TStatus; +begin + if (status <> Ok) then lastResult := status; + result := status; +end; + +function TGPPen.GetDashStyle: TDashStyle; +begin + SetStatus(GdipGetPenDashStyle(nativePen, result)); +end; + +function TGPPen.SetDashStyle(dashStyle: TDashStyle): TStatus; +begin + result := SetStatus(GdipSetPenDashStyle(nativePen, dashStyle)); +end; + +function TGPPen.SetEndCap(endCap: TLineCap): TStatus; +begin + result := SetStatus(GdipSetPenEndCap(nativePen, endCap)); +end; + + +(**************************************************************************\ +* +* GDI+ Brush class +* +\**************************************************************************) + +//-------------------------------------------------------------------------- +// Abstract base class for various brush types +//-------------------------------------------------------------------------- + +destructor TGPBrush.Destroy; +begin + GdipDeleteBrush(nativeBrush); +end; + +constructor TGPBrush.Create; +begin + SetStatus(NotImplemented); +end; + +constructor TGPBrush.Create(nativeBrush: GpBrush; status: TStatus); +begin + lastResult := status; + SetNativeBrush(nativeBrush); +end; + +procedure TGPBrush.SetNativeBrush(nativeBrush: GpBrush); +begin + self.nativeBrush := nativeBrush; +end; + +function TGPBrush.SetStatus(status: TStatus): TStatus; +begin + if (status <> Ok) then lastResult := status; + result := status; +end; + +//-------------------------------------------------------------------------- +// Solid Fill Brush Object +//-------------------------------------------------------------------------- + +constructor TGPSolidBrush.Create(color: TGPColor); +var + brush: GpSolidFill; +begin + brush := nil; + lastResult := GdipCreateSolidFill(color, brush); + SetNativeBrush(brush); +end; + +constructor TGPSolidBrush.Create; +begin + // hide parent function +end; + +//-------------------------------------------------------------------------- +// Linear Gradient Brush Object +//-------------------------------------------------------------------------- + +constructor TGPLinearGradientBrush.Create(rect: TGPRectF; color1, color2: TGPColor; mode: TLinearGradientMode); +var brush: GpLineGradient; +begin + brush := nil; + lastResult := GdipCreateLineBrushFromRect(@rect, color1, + color2, mode, WrapModeTile, brush); + SetNativeBrush(brush); +end; + +constructor TGPLinearGradientBrush.Create(rect: TGPRect; color1, color2: TGPColor; mode: TLinearGradientMode); +var brush: GpLineGradient; +begin + brush := nil; + lastResult := GdipCreateLineBrushFromRectI(@rect, color1, + color2, mode, WrapModeTile, brush); + SetNativeBrush(brush); +end; + +constructor TGPLinearGradientBrush.Create; +begin + // hide parent function +end; + +(**************************************************************************\ +* +* GDI+ Graphics Object +* +\**************************************************************************) + +constructor TGPGraphics.Create(hdc: HDC); +var + graphics: GpGraphics; +begin + graphics:= nil; + lastResult := GdipCreateFromHDC(hdc, graphics); + SetNativeGraphics(graphics); +end; + +destructor TGPGraphics.Destroy; +begin + GdipDeleteGraphics(nativeGraphics); +end; + +procedure TGPGraphics.Flush(intention: TFlushIntention = FlushIntentionFlush); +begin + GdipFlush(nativeGraphics, intention); +end; + +function TGPGraphics.FromImage(image: TGPImage): TGPGraphics; +begin + Result := TGPGraphics.Create(image); +end; + +constructor TGPGraphics.Create(image: TGPImage); +var + graphics: GpGraphics; +begin + graphics:= nil; + if (image <> nil) then + lastResult := GdipGetImageGraphicsContext(image.nativeImage, graphics); + SetNativeGraphics(graphics); +end; + + +//------------------------------------------------------------------------ +// GDI Interop methods +//------------------------------------------------------------------------ + +// Locks the graphics until ReleaseDC is called + +function TGPGraphics.GetHDC: HDC; +begin + SetStatus(GdipGetDC(nativeGraphics, result)); +end; + +procedure TGPGraphics.ReleaseHDC(hdc: HDC); +begin + SetStatus(GdipReleaseDC(nativeGraphics, hdc)); +end; + +function TGPGraphics.SetTextRenderingHint(newMode: TTextRenderingHint): TStatus; +begin + result := SetStatus(GdipSetTextRenderingHint(nativeGraphics, newMode)); +end; + +function TGPGraphics.GetTextRenderingHint: TTextRenderingHint; +begin + SetStatus(GdipGetTextRenderingHint(nativeGraphics, result)); +end; + +function TGPGraphics.GetSmoothingMode: TSmoothingMode; +var + smoothingMode: TSmoothingMode; +begin + smoothingMode := SmoothingModeInvalid; + SetStatus(GdipGetSmoothingMode(nativeGraphics, smoothingMode)); + result := smoothingMode; +end; + +function TGPGraphics.SetSmoothingMode(smoothingMode: TSmoothingMode): TStatus; +begin + result := SetStatus(GdipSetSmoothingMode(nativeGraphics, smoothingMode)); +end; + +function TGPGraphics.DrawPath(pen: TGPPen; path: TGPGraphicsPath): TStatus; +var + nPen: GpPen; + nPath: GpPath; +begin + if Assigned(pen) then + nPen := pen.nativePen + else + nPen := nil; + if Assigned(path) then + nPath := path.nativePath + else + nPath := nil; + Result := SetStatus(GdipDrawPath(nativeGraphics, nPen, nPath)); +end; + +function TGPGraphics.FillRectangle(brush: TGPBrush; const rect: TGPRectF): TStatus; +begin + Result := FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height); +end; + +function TGPGraphics.FillRectangle(brush: TGPBrush; x, y, width, height: Single): TStatus; +begin + result := SetStatus(GdipFillRectangle(nativeGraphics, brush.nativeBrush, x, y, + width, height)); +end; + +{$IFNDEF DELPHI_UNICODE} +function TGPGraphics.DrawString( string_: string; length: Integer; font: TGPFont; + const layoutRect: TGPRectF; stringFormat: TGPStringFormat; brush: TGPBrush): TStatus; +var + nFont: GpFont; + nStringFormat: GpStringFormat; + nBrush: GpBrush; + wCh: PWidechar; + i: integer; +begin + if Assigned(font) then + nfont := font.nativeFont + else + nfont := nil; + if Assigned(stringFormat) then + nstringFormat := stringFormat.nativeFormat + else + nstringFormat := nil; + + {charset issue} + i := System.Length(string_); + GetMem(wCh, i * 2 + 2); + FillChar(wCh^, i * 2 + 2,0); + StringToWidechar(string_, wCh, i * 2 + 2); + {/charset issue} + + if Assigned(brush) then + nbrush := brush.nativeBrush + else + nbrush := nil; +// Result := SetStatus(GdipDrawString(nativeGraphics, PWideChar(string_), +// length, nfont, @layoutRect, nstringFormat, nbrush)); + + {charset issue} + Result := SetStatus(GdipDrawString(nativeGraphics, wCh, + length, nfont, @layoutRect, nstringFormat, nbrush)); + + FreeMem(wCh); + {/charset issue} +end; +{$ENDIF} + +{$IFDEF DELPHI6_LVL} +function TGPGraphics.DrawString( string_: widestring; length: Integer; font: TGPFont; + const layoutRect: TGPRectF; stringFormat: TGPStringFormat; brush: TGPBrush): TStatus; +var + nFont: GpFont; + nStringFormat: GpStringFormat; + nBrush: GpBrush; +begin + if Assigned(font) then + nfont := font.nativeFont + else + nfont := nil; + if Assigned(stringFormat) then + nstringFormat := stringFormat.nativeFormat + else + nstringFormat := nil; + + if Assigned(brush) then + nbrush := brush.nativeBrush + else + nbrush := nil; + + Result := SetStatus(GdipDrawString(nativeGraphics, PWideChar(string_), + length, nfont, @layoutRect, nstringFormat, nbrush)); +end; +{$ENDIF} + +function TGPGraphics.MeasureString(string_: WideString; length: Integer; font: TGPFont; + const layoutRect: TGPRectF; stringFormat: TGPStringFormat; out boundingBox: TGPRectF; + codepointsFitted: PInteger = nil; linesFilled: PInteger = nil): TStatus; +var + nFont: GpFont; + nStringFormat: GpStringFormat; +begin + if Assigned(font) then + nfont := font.nativeFont + else + nfont := nil; + if Assigned(stringFormat) then + nstringFormat := stringFormat.nativeFormat + else + nstringFormat := nil; + + Result := SetStatus(GdipMeasureString(nativeGraphics, PWideChar(string_), + length, nfont, @layoutRect, nstringFormat, @boundingBox, codepointsFitted, + linesFilled)); +end; + +function TGPGraphics.GetLastStatus: TStatus; +begin + result := lastResult; + lastResult := Ok; +end; + +{ +constructor TGPGraphics.Create(graphics: GpGraphics); +begin + lastResult := Ok; + SetNativeGraphics(graphics); +end; +} + +procedure TGPGraphics.SetNativeGraphics(graphics: GpGraphics); +begin + self.nativeGraphics := graphics; +end; + +function TGPGraphics.SetStatus(status: TStatus): TStatus; +begin + if (status <> Ok) then + lastResult := status; + result := status; +end; + +function TGPGraphics.GetNativeGraphics: GpGraphics; +begin + result := self.nativeGraphics; +end; + +//------------------------------------------------------------------------------ + + constructor TGPRegion.Create(rect: TGPRectF); + var + region: GpRegion; + begin + region := nil; + lastResult := GdipCreateRegionRect(@rect, region); + SetNativeRegion(region); + end; + + constructor TGPRegion.Create(path: TGPGraphicsPath); + var + region: GpRegion; + begin + region := nil; + lastResult := GdipCreateRegionPath(path.nativePath, region); + SetNativeRegion(region); + end; + + destructor TGPRegion.Destroy; + begin + GdipDeleteRegion(nativeRegion); + end; + + function TGPRegion.Exclude(path: TGPGraphicsPath): TStatus; + begin + result := SetStatus(GdipCombineRegionPath(nativeRegion, path.nativePath, CombineModeExclude)); + end; + + function TGPRegion.SetStatus(status: TStatus): TStatus; + begin + if (status <> Ok) then lastResult := status; + result := status; + end; + + procedure TGPRegion.SetNativeRegion(nativeRegion: GpRegion); + begin + self.nativeRegion := nativeRegion; + end; + + function TGPRegion.Union(region: TGPRegion): TStatus; + begin + result := SetStatus(GdipCombineRegionRegion(nativeRegion, region.nativeRegion, + CombineModeUnion)); + end; + +(**************************************************************************\ +* +* GDI+ Font Family class +* +\**************************************************************************) + + constructor TGPFontFamily.Create(name: WideString; fontCollection: TGPFontCollection = nil); + var nfontCollection: GpfontCollection; + begin + nativeFamily := nil; + if assigned(fontCollection) then nfontCollection := fontCollection.nativeFontCollection else nfontCollection := nil; + lastResult := GdipCreateFontFamilyFromName(PWideChar(name), nfontCollection, nativeFamily); + end; + + destructor TGPFontFamily.Destroy; + begin + GdipDeleteFontFamily (nativeFamily); + end; + + function TGPFontFamily.SetStatus(status: TStatus): TStatus; + begin + if (status <> Ok) then lastResult := status; + result := status; + end; + + constructor TGPFontFamily.Create(nativeOrig: GpFontFamily; status: TStatus); + begin + lastResult := status; + nativeFamily := nativeOrig; + end; + +(**************************************************************************\ +* +* GDI+ Font class +* +\**************************************************************************) + + constructor TGPFont.Create(family: TGPFontFamily; emSize: Single; + style: TFontStyle = FontStyleRegular; unit_: TUnit = UnitPoint); + var + font: GpFont; + nFontFamily: GpFontFamily; + begin + font := nil; + if Assigned(Family) then + nFontFamily := Family.nativeFamily + else + nFontFamily := nil; + + lastResult := GdipCreateFont(nFontFamily, emSize, Integer(style), Integer(unit_), font); + + SetNativeFont(font); + end; + + destructor TGPFont.Destroy; + begin + GdipDeleteFont(nativeFont); + end; + + constructor TGPFont.Create(font: GpFont; status: TStatus); + begin + lastResult := status; + SetNativeFont(font); + end; + + procedure TGPFont.SetNativeFont(Font: GpFont); + begin + nativeFont := Font; + end; + + function TGPFont.SetStatus(status: TStatus): TStatus; + begin + if (status <> Ok) then lastResult := status; + result := status; + end; + +(**************************************************************************\ +* +* Font collections (Installed and Private) +* +\**************************************************************************) + + constructor TGPFontCollection.Create; + begin + nativeFontCollection := nil; + end; + + destructor TGPFontCollection.Destroy; + begin + inherited Destroy; + end; + + function TGPFontCollection.SetStatus(status: TStatus): TStatus; + begin + lastResult := status; + result := lastResult; + end; + +(**************************************************************************\ +* +* GDI+ Graphics Path class +* +\**************************************************************************) + + constructor TGPGraphicsPath.Create(fillMode: TFillMode = FillModeAlternate); + begin + nativePath := nil; + lastResult := GdipCreatePath(fillMode, nativePath); + end; + + destructor TGPGraphicsPath.Destroy; + begin + GdipDeletePath(nativePath); + end; + + function TGPGraphicsPath.CloseFigure: TStatus; + begin + result := SetStatus(GdipClosePathFigure(nativePath)); + end; + + function TGPGraphicsPath.AddLine(const pt1, pt2: TGPPointF): TStatus; + begin + result := AddLine(pt1.X, pt1.Y, pt2.X, pt2.Y); + end; + + function TGPGraphicsPath.AddLine(x1, y1, x2, y2: Single): TStatus; + begin + result := SetStatus(GdipAddPathLine(nativePath, x1, y1, + x2, y2)); + end; + + function TGPGraphicsPath.AddArc(rect: TGPRectF; startAngle, sweepAngle: Single): TStatus; + begin + result := AddArc(rect.X, rect.Y, rect.Width, rect.Height, + startAngle, sweepAngle); + end; + + function TGPGraphicsPath.AddArc(x, y, width, height, startAngle, sweepAngle: Single): TStatus; + begin + result := SetStatus(GdipAddPathArc(nativePath, x, y, width, height, startAngle, sweepAngle)); + end; + + function TGPGraphicsPath.AddEllipse(rect: TGPRectF): TStatus; + begin + result := AddEllipse(rect.X, rect.Y, rect.Width, rect.Height); + end; + + function TGPGraphicsPath.AddEllipse(x, y, width, height: Single): TStatus; + begin + result := SetStatus(GdipAddPathEllipse(nativePath, + x, + y, + width, + height)); + end; + + { + constructor TGPGraphicsPath.Create(path: TGPGraphicsPath); + var clonepath: GpPath; + begin + clonepath := nil; + SetStatus(GdipClonePath(path.nativePath, clonepath)); + SetNativePath(clonepath); + end; + } + constructor TGPGraphicsPath.Create(nativePath: GpPath); + begin + lastResult := Ok; + SetNativePath(nativePath); + end; + + procedure TGPGraphicsPath.SetNativePath(nativePath: GpPath); + begin + self.nativePath := nativePath; + end; + + function TGPGraphicsPath.SetStatus(status: TStatus): TStatus; + begin + if (status <> Ok) then LastResult := status; + result := status; + end; + +//-------------------------------------------------------------------------- +// Path Gradient Brush +//-------------------------------------------------------------------------- + { + constructor TGPPathGradientBrush.Create(points: PGPPointF; count: Integer; wrapMode: TWrapMode = WrapModeClamp); + var brush: GpPathGradient; + begin + brush := nil; + lastResult := GdipCreatePathGradient(points, count, wrapMode, brush); + SetNativeBrush(brush); + end; + } + constructor TGPPathGradientBrush.Create(path: TGPGraphicsPath); + var brush: GpPathGradient; + begin + brush := nil; + lastResult := GdipCreatePathGradientFromPath(path.nativePath, brush); + SetNativeBrush(brush); + end; + + function TGPPathGradientBrush.GetCenterColor(out Color: TGPColor): TStatus; + begin + SetStatus(GdipGetPathGradientCenterColor(GpPathGradient(nativeBrush), Color)); + result := lastResult; + end; + + function TGPPathGradientBrush.SetCenterColor(color: TGPColor): TStatus; + begin + SetStatus(GdipSetPathGradientCenterColor(GpPathGradient(nativeBrush),color)); + result := lastResult; + end; + + function TGPPathGradientBrush.GetPointCount: Integer; + begin + SetStatus(GdipGetPathGradientPointCount(GpPathGradient(nativeBrush), result)); + end; + + function TGPPathGradientBrush.GetSurroundColors(colors: PARGB; var count: Integer): TStatus; + var + count1: Integer; + begin + if not assigned(colors) then + begin + result := SetStatus(InvalidParameter); + exit; + end; + + SetStatus(GdipGetPathGradientSurroundColorCount(GpPathGradient(nativeBrush), count1)); + + if(lastResult <> Ok) then + begin + result := lastResult; + exit; + end; + + if((count < count1) or (count1 <= 0)) then + begin + result := SetStatus(InsufficientBuffer); + exit; + end; + + SetStatus(GdipGetPathGradientSurroundColorsWithCount(GpPathGradient(nativeBrush), colors, count1)); + if(lastResult = Ok) then + count := count1; + + result := lastResult; + end; + + function TGPPathGradientBrush.SetSurroundColors(colors: PARGB; var count: Integer): TStatus; + var + count1: Integer; + type + TDynArrDWORD = array of DWORD; + begin + if (colors = nil) then + begin + result := SetStatus(InvalidParameter); + exit; + end; + + count1 := GetPointCount; + + if((count > count1) or (count1 <= 0)) then + begin + result := SetStatus(InvalidParameter); + exit; + end; + + count1 := count; + + SetStatus(GdipSetPathGradientSurroundColorsWithCount( + GpPathGradient(nativeBrush), colors, count1)); + + if(lastResult = Ok) then count := count1; + result := lastResult; + end; + + function TGPPathGradientBrush.GetCenterPoint(out point: TGPPointF): TStatus; + begin + result := SetStatus(GdipGetPathGradientCenterPoint(GpPathGradient(nativeBrush), @point)); + end; + + function TGPPathGradientBrush.GetCenterPoint(out point: TGPPoint): TStatus; + begin + result := SetStatus(GdipGetPathGradientCenterPointI(GpPathGradient(nativeBrush), @point)); + end; + + function TGPPathGradientBrush.SetCenterPoint(point: TGPPointF): TStatus; + begin + result := SetStatus(GdipSetPathGradientCenterPoint(GpPathGradient(nativeBrush), @point)); + end; + + function TGPPathGradientBrush.SetCenterPoint(point: TGPPoint): TStatus; + begin + result := SetStatus(GdipSetPathGradientCenterPointI(GpPathGradient(nativeBrush), @point)); + end; + +function TGPGraphics.DrawRectangle(pen: TGPPen; const rect: TGPRectF): TStatus; +begin + Result := DrawRectangle(pen, rect.X, rect.Y, rect.Width, rect.Height); +end; + +function TGPGraphics.DrawRectangle(pen: TGPPen; x, y, width, height: Single): TStatus; +begin + Result := SetStatus(GdipDrawRectangle(nativeGraphics, pen.nativePen, x, y, width, height)); +end; + +function TGPGraphics.DrawImage(image: TGPImage; x, y: Integer): TStatus; +var + nImage: GpImage; +begin + if Assigned(Image) then + nImage := Image.nativeImage + else + nImage := nil; + + Result := SetStatus(GdipDrawImageI(nativeGraphics, nimage, x, y)); +end; + +function TGPGraphics.DrawImageRect(image: TGPImage; x, y, w, h: Integer): TStatus; +var + nImage: GpImage; +begin + if Assigned(Image) then + nImage := Image.nativeImage + else + nImage := nil; + + Result := SetStatus(GdipDrawImageRect(nativeGraphics, nimage, x, y, w, h)); +end; + + +function TGPGraphics.DrawImage(image: TGPImage; const destRect: TGPRectF; srcx, srcy, srcwidth, srcheight: Single; + srcUnit: TUnit; imageAttributes: TGPImageAttributes = nil; callback: DrawImageAbort = nil; + callbackData: Pointer = nil): TStatus; +var + nImage: GpImage; + nimageAttributes: GpimageAttributes; +begin + if assigned(Image) then nImage := Image.nativeImage else nImage := nil; + if assigned(imageAttributes) then nimageAttributes := imageAttributes.nativeImageAttr else nimageAttributes := nil; + result := SetStatus(GdipDrawImageRectRect(nativeGraphics, + nimage, + destRect.X, + destRect.Y, + destRect.Width, + destRect.Height, + srcx, srcy, + srcwidth, srcheight, + srcUnit, + nimageAttributes, + callback, + callbackData)); +end; + +constructor TGPImage.Create(filename: WideString; + useEmbeddedColorManagement: BOOL = FALSE); +begin + nativeImage := nil; + if(useEmbeddedColorManagement) then + begin + lastResult := GdipLoadImageFromFileICM(PWideChar(filename), nativeImage); + end + else + begin + lastResult := GdipLoadImageFromFile(PWideChar(filename), nativeImage); + end; +end; + +constructor TGPImage.Create(stream: IStream; + useEmbeddedColorManagement: BOOL = FALSE); +begin + nativeImage := nil; + if (useEmbeddedColorManagement) then + lastResult := GdipLoadImageFromStreamICM(stream, nativeImage) + else + lastResult := GdipLoadImageFromStream(stream, nativeImage); +end; + +destructor TGPImage.Destroy; +begin + GdipDisposeImage(nativeImage); +end; + +function TGPImage.Save(filename: WideString; const clsidEncoder: TGUID; + encoderParams: PEncoderParameters = nil): TStatus; +begin + result := SetStatus(GdipSaveImageToFile(nativeImage, + PWideChar(filename), + @clsidEncoder, + encoderParams)); +end; + + +function TGPImage.GetFormat: TGPImageFormat; +var + format: TGUID; +begin + GdipGetImageRawFormat(nativeImage, @format); + + Result := ifUndefined; + + if IsEqualGUID(format, ImageFormatMemoryBMP) then + Result := ifMemoryBMP; + + if IsEqualGUID(format, ImageFormatBMP) then + Result := ifBMP; + + if IsEqualGUID(format, ImageFormatEMF) then + Result := ifEMF; + + if IsEqualGUID(format, ImageFormatWMF) then + Result := ifWMF; + + if IsEqualGUID(format, ImageFormatJPEG) then + Result := ifJPEG; + + if IsEqualGUID(format, ImageFormatGIF) then + Result := ifGIF; + + if IsEqualGUID(format, ImageFormatPNG) then + Result := ifPNG; + + if IsEqualGUID(format, ImageFormatTIFF) then + Result := ifTIFF; + + if IsEqualGUID(format, ImageFormatEXIF) then + Result := ifEXIF; + + if IsEqualGUID(format, ImageFormatIcon) then + Result := ifIcon; +end; + +function TGPImage.GetHeight: UINT; +var + height: UINT; + +begin + height := 0; + SetStatus(GdipGetImageHeight(nativeImage, height)); + result := height; +end; + +function TGPImage.GetHorizontalResolution: Single; +var + resolution: Single; +begin + resolution := 0.0; + SetStatus(GdipGetImageHorizontalResolution(nativeImage, resolution)); + result := resolution; +end; + +function TGPImage.GetVerticalResolution: Single; +var + resolution: Single; +begin + resolution := 0.0; + SetStatus(GdipGetImageVerticalResolution(nativeImage, resolution)); + result := resolution; +end; + +function TGPImage.GetWidth: UINT; +var + width: UINT; +begin + width := 0; + SetStatus(GdipGetImageWidth(nativeImage, width)); + result := width; +end; + +constructor TGPImage.Create(nativeImage: GpImage; status: TStatus); +begin + SetNativeImage(nativeImage); + lastResult := status; +end; + +procedure TGPImage.SetNativeImage(nativeImage: GpImage); +begin + self.nativeImage := nativeImage; +end; + +function TGPImage.SetStatus(status: TStatus): TStatus; +begin + if (status <> Ok) then lastResult := status; + result := status; +end; + + +function TGPGraphicsPath.AddLines(points: PGPPoint; count: Integer): TStatus; +begin + result := SetStatus(GdipAddPathLine2I(nativePath, points, count)); +end; + +function TGPGraphicsPath.AddPie(rect: TGPRectF; startAngle, + sweepAngle: Single): TStatus; +begin + result := AddPie(rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); +end; + +function TGPGraphicsPath.AddPie(x, y, width, height, startAngle, + sweepAngle: Single): TStatus; +begin + result := SetStatus(GdipAddPathPie(nativePath, x, y, width, height, startAngle, sweepAngle)); +end; + +function TGPGraphicsPath.AddPolygon(points: PGPPointF; + count: Integer): TStatus; +begin + result := SetStatus(GdipAddPathPolygon(nativePath, points, count)); +end; + +function TGPGraphicsPath.AddPolygon(points: PGPPoint; + count: Integer): TStatus; +begin + result := SetStatus(GdipAddPathPolygonI(nativePath, points, count)); +end; + +function TGPGraphicsPath.AddCurve(points: PGPPointF; + count: Integer): TStatus; +begin + result := SetStatus(GdipAddPathCurve(nativePath, points, count)); +end; + +function TGPGraphicsPath.AddCurve(points: PGPPoint; + count: Integer): TStatus; +begin + result := SetStatus(GdipAddPathCurveI(nativePath, points, count)); +end; + +function TGPGraphicsPath.AddCurve(points: PGPPoint; count: Integer; tension: Single): TStatus; +begin + result := SetStatus(GdipAddPathCurve2I(nativePath, points, count, tension)); +end; + +function TGPGraphicsPath.AddBezier(pt1, pt2, pt3, pt4: TGPPoint): TStatus; +begin + result := AddBezier(pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y); +end; + +function TGPGraphicsPath.AddBezier(pt1, pt2, pt3, pt4: TGPPointF): TStatus; +begin + result := AddBezier(pt1.X, pt1.Y, pt2.X, pt2.Y, pt3.X, pt3.Y, pt4.X, pt4.Y); +end; + +function TGPGraphicsPath.AddBezier(x1, y1, x2, y2, x3, y3, x4, + y4: Single): TStatus; +begin + result := SetStatus(GdipAddPathBezier(nativePath, x1, y1, x2, y2, x3, y3, x4, y4)); +end; + +//------------------------------------------------------------------------------ + +function TGPGraphics.FillPath(brush: TGPBrush; + path: TGPGraphicsPath): TStatus; +begin + result := SetStatus(GdipFillPath(nativeGraphics, brush.nativeBrush, path.nativePath)); +end; + +function TGPGraphics.ExcludeClip(const rect: TGPRectF): TStatus; +begin + result := SetStatus(GdipSetClipRect(nativeGraphics, rect.X, rect.Y, rect.Width, rect.Height, CombineModeExclude)); +end; + +function TGPGraphics.ExcludeClip(region: TGPRegion): TStatus; +begin + result := SetStatus(GdipSetClipRegion(nativeGraphics, region.nativeRegion, CombineModeExclude)); +end; + +function TGPGraphics.SetClip(region: TGPRegion; + combineMode: TCombineMode): TStatus; +begin + result := SetStatus(GdipSetClipRegion(nativeGraphics, region.nativeRegion, combineMode)); +end; + +function TGPGraphics.ResetClip: TStatus; +begin + result := SetStatus(GdipResetClip(nativeGraphics)); +end; + +function MakeColor(a, r, g, b: Byte): ARGB; overload; +begin + result := ((DWORD(b) shl BlueShift) or + (DWORD(g) shl GreenShift) or + (DWORD(r) shl RedShift) or + (DWORD(a) shl AlphaShift)); +end; + +function MakeColor(r, g, b: Byte): ARGB; overload; +begin + result := MakeColor(255, r, g, b); +end; + +function GetAlpha(color: ARGB): BYTE; +begin + result := BYTE(color shr AlphaShift); +end; + +function GetRed(color: ARGB): BYTE; +begin + result := BYTE(color shr RedShift); +end; + +function GetGreen(color: ARGB): BYTE; +begin + result := BYTE(color shr GreenShift); +end; + +function GetBlue(color: ARGB): BYTE; +begin + result := BYTE(color shr BlueShift); +end; + +function TGPGraphics.GetCompositingQuality: TCompositingQuality; +begin + SetStatus(GdipGetCompositingQuality(nativeGraphics, result)); +end; + +function TGPGraphics.SetCompositingQuality( + compositingQuality: TCompositingQuality): TStatus; +begin + result := SetStatus(GdipSetCompositingQuality( nativeGraphics, compositingQuality)); +end; + +function TGPImage.RotateFlip(rotateFlipType: TRotateFlipType): TStatus; +begin + Result := SetStatus(GdipImageRotateFlip(nativeImage, rotateFlipType)); +end; + + +{ TGPBitmap } + +constructor TGPBitmap.Create(stream: IStream; useEmbeddedColorManagement: BOOL); +var + bitmap: GpBitmap; +begin + bitmap := nil; + if(useEmbeddedColorManagement) then + lastResult := GdipCreateBitmapFromStreamICM(stream, bitmap) + else + lastResult := GdipCreateBitmapFromStream(stream, bitmap); + SetNativeImage(bitmap); +end; + +constructor TGPBitmap.Create(nativeBitmap: GpBitmap); +begin + lastResult := Ok; + SetNativeImage(nativeBitmap); +end; + +constructor TGPBitmap.Create(width, height: Integer; format: TPixelFormat); +var + bitmap: GpBitmap; +begin + bitmap := nil; + lastResult := GdipCreateBitmapFromScan0(width, height, 0, format, nil, bitmap); + SetNativeImage(bitmap); +end; + +function TGPBitmap.FromStream(stream: IStream; + useEmbeddedColorManagement: BOOL): TGPBitmap; +begin + Result := TGPBitmap.Create(stream, useEmbeddedColorManagement); +end; + +function TGPBitmap.GetPixel(x, y: Integer; out color: TGPColor): TStatus; +begin + Result := SetStatus(GdipBitmapGetPixel(GpBitmap(nativeImage), x, y, color)); +end; + +function TGPBitmap.SetPixel(x, y: Integer; color: TGPColor): TStatus; +begin + Result := SetStatus(GdipBitmapSetPixel(GpBitmap(nativeImage), x, y, color)); +end; + + + +function TGPBitmap.SetResolution(xdpi, ydpi: Single): TStatus; +begin + Result := SetStatus(GdipBitmapSetResolution(GpBitmap(nativeImage), xdpi, ydpi)); +end; + +{ TGPImageAttributes } + +constructor TGPImageAttributes.Create; +begin + nativeImageAttr := nil; + lastResult := GdipCreateImageAttributes(nativeImageAttr); +end; + +destructor TGPImageAttributes.Destroy; +begin + GdipDisposeImageAttributes(nativeImageAttr); + inherited Destroy; +end; + +function TGPImageAttributes.SetStatus(status: TStatus): TStatus; +begin + if (status <> Ok) then lastResult := status; + result := status; +end; + +function TGPImageAttributes.SetColorKey(colorLow, colorHigh: TGPColor; + type_: TColorAdjustType = ColorAdjustTypeDefault): TStatus; +begin + result := SetStatus(GdipSetImageAttributesColorKeys(nativeImageAttr, type_, + TRUE, colorLow, colorHigh)); +end; + +function TGPImageAttributes.ClearColorKey(type_: TColorAdjustType = ColorAdjustTypeDefault): TStatus; +begin + result := SetStatus(GdipSetImageAttributesColorKeys(nativeImageAttr, type_, + FALSE, 0, 0)); +end; + +initialization +begin + // Initialize StartupInput structure + StartupInput.DebugEventCallback := nil; + + //StartupInput.SuppressBackgroundThread := False; + StartupInput.SuppressBackgroundThread := True; + StartupInput.SuppressExternalCodecs := False; + StartupInput.GdiplusVersion := 1; + + StartupOutput.NotificationHook := nil; + StartupOutput.NotificationUnhook := nil; + + // Initialize GDI+ + GdiplusStartup(gdiplusToken, @StartupInput, @StartupOutput); +end; + +finalization +begin + // Close GDI + + if not IsLibrary then + GdiplusShutdown(gdiplusToken); +end; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbutton.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbutton.pas new file mode 100644 index 0000000..f34f396 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbutton.pas @@ -0,0 +1,6099 @@ +{***************************************************************************} +{ TAdvGlowButton component } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2009 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit AdvGlowButton; + +{$R ADVGLOWBUTTONDB.RES} + +{$I TMSDEFS.INC} + +{$T-} + +interface + +uses + Classes, Windows, Forms, Dialogs, Controls, Graphics, Messages, ExtCtrls, + SysUtils, Math, Menus, ImgList, AdvGDIP, GDIPicture, ActnList, + AdvHintInfo, AdvStyleIF, ActiveX + {$IFNDEF TMS_STD} + , DB + {$ENDIF} + ; + +const + DropDownSectWidth = 13; + + MAJ_VER = 1; // Major version nr. + MIN_VER = 8; // Minor version nr. + REL_VER = 4; // Release nr. + BLD_VER = 0; // Build nr. + + // version history + // 1.0.5.1 : Fixed issue with width & height initialization + // 1.0.5.2 : Improved fade painting + // 1.1.0.0 : New separate dropdown button hot & down effect + // : Silver, Blue, Black styles added + // 1.2.0.0 : New DropDownSplit property added + // 1.2.0.1 : Fixed issue with ModalResult <> mrNone + // 1.2.0.2 : Fixed issue with Action handling Checked state + // 1.2.0.3 : Fixed issue with disabled painting + // 1.2.0.4 : Fixed issue with key handling + // 1.3.0.0 : Added new property FocusType + // : Added new ShortCutHint, ShortCutHintPos & methods ShowShortCutHint, HideShortCutHint + // 1.3.0.1 : Fixed issue with font and aaNone + // 1.3.0.2 : Fixed issue with hot & down border painting + // 1.3.1.0 : New : exposed OnMouseEnter, OnMouseLeave + // : Fixed issue with Down property for bsCheck style + // 1.3.1.1 : Fixed issue with Down property for buttons with GroupIndex > 0 + // 1.3.1.2 : Improved transitioning from transparent to hot + // 1.3.1.3 : Fixed issue with actionlinks & bsCheck type + // 1.3.2.0 : New styler interface added + // 1.3.3.0 : New public property DroppedDown added + // 1.3.4.0 : New TAdvCustomGlowButton.ParentFont added + // : TButtonLayout blGlyphLeftAdjusted and blGlyphRightAdjusted added + // 1.3.5.0 : New borderless display possible by setting BorderStyle = bsNone + // 1.4.0.0 : Improved : seamlessly works with TrueType & non TrueType fonts + // : New : Spacing property added + // : New : WordWrap property added + // : New : AutoSize property added + // : New : MarginVert property added + // : New : MarginHorz property added + // : New : Rounded property added + // : New : DropDownDirection property added + // : New : HotImages, HotPicture property added + // 1.4.5.0 : New : PopupMenu property added + // : New : OnDrawButton event added + // : New : TButtonLayout blGlyphTopAdjusted and blGlyphBottomAdjusted added + // 1.4.6.0 : New : support for Office 2007 silver style added + // 1.4.6.1 : Fixed : issue with Win98 resource leak + // 1.5.0.0 : New : support for Unicode text via public property WideCaption + // : Improved : text drawing in aaNone AntiAlias mode + // 1.5.0.1 : Fix for use with fonts that are not installed + // 1.6.0.0 : New : support for Trimming added + // 1.6.0.1 : Fixed : issue with Action images + // 1.7.0.0 : New : Repeat functionality added with repeat initial delay & frequency setting + // : Improved wordwrap drawing with no text aliasing + // : New : support for using \n newline specifier in property inspector + // 1.7.0.1 : Fixed : drawing issue with Delphi 2007 + // 1.7.1.0 : New : F4 key to open attached dropdown menu + // 1.7.1.1 : Fixed : issue with DropDownSplit and OnClick event handler + // 1.7.2.0 : New : events OnEnter, OnExit added + // 1.7.2.1 : Improved : painting on MDI child windows + // 1.7.2.2 : Fixed : drawing issue with Delphi 2007 + // 1.8.0.0 : New : Notes & NotesFont + // : New : C++Builder 2007 support + // : Improved : drawing down state for Transparent button + // : Improved : drawing speed + // 1.8.0.1 : Fixed : runtime WideCaption assigning causes repaint + // 1.8.1.0 : Fixed : issue with inherited forms + // 1.8.1.1 : Fixed : issue with dbl click event + // : Fixed : issue with actions & groupindex + // : Fixed : border painting issue on checked buttons in bpMiddle, bpRight position + // 1.8.1.2 : Fixed : issue with ShowCaption & WideCaption + // 1.8.1.3 : Fixed : issue with using font not installed on the system + // 1.8.1.4 : Fixed : issue with WideCaption & aaNone AntiAlias type + // 1.8.1.5 : Fixed : issue with DblClick & OnClick event + // 1.8.1.6 : Fixed : issue with AutoCheck action items for bsCheck button type + // 1.8.1.7 : Fixed : issue with shortcuts on TAdvToolBar + // : Fixed : issue with dbl click + // : Improved : dropdown button position + // 1.8.1.8 : Improved : wordwrapped text drawing for non anti aliased text + // 1.8.1.9 : Improved : spacing for blGlyphTop, blGlyphTopAdjusted setting + // 1.8.1.10: Improved : assigning images via action + // 1.8.2.0 : New : shortcut hint position : shpBelowBottomCenter + // 1.8.2.1 : Fixed : painting issue with default key handling + // 1.8.2.2 : Fixed : issue with focus border drawing + // 1.8.2.3 : Fixed : issue with spacing for glyph right / glyph right adjusted + // 1.8.3.0 : New : exposed DoDropDown method + // 1.8.3.1 : Fixed : issue with static imagelist versus actionlist imagelist use + // 1.8.3.2 : Improved : vertical alignment of Notes text & caption with word wrap + // 1.8.3.3 : Fixed : issue with accelerator key handling and wide captions + // 1.8.4.0 : Improved : adaptions for use on Windows Vista style ribbon + +type + TAdvCustomGlowButton = class; + TAdvGlowButton = class; + + TGlowState = (gsHover, gsPush, gsNone); + TAdvButtonStyle = (bsButton, bsCheck); + TAdvButtonState = (absUp, absDisabled, absDown, absDropDown, absExclusive); + TButtonLayout = (blGlyphLeft, blGlyphTop, blGlyphRight, blGlyphBottom, + blGlyphLeftAdjusted, blGlyphRightAdjusted, + blGlyphTopAdjusted, blGlyphBottomAdjusted); + + TDropDownPosition = (dpRight, dpBottom); + TDropDownDirection = (ddDown, ddRight); + TGDIPGradient = (ggRadial, ggVertical, ggDiagonalForward, ggDiagonalBackward); + + TFocusType = (ftBorder, ftHot, ftHotBorder, ftNone); + + TShortCutHintPos = (shpLeft, shpTop, shpRight, shpBottom, shpCenter, shpAuto, + shpTopLeft, shpTopRight, shpAboveTop, shpAboveTopLeft, + shpAboveTopRight, shpBottomLeft, shpBottomRight, shpBelowBottom, + shpBelowBottomLeft, shpBelowBottomRight, shpBelowBottomCenter); + + TButtonPosition = (bpStandalone, bpLeft, bpMiddle, bpRight); + + TGlowButtonState = (gsNormal, gsHot, gsDown); + + TButtonSizeState = (bsGlyph, bsLabel, bsLarge); + + TGlowButtonDrawEvent = procedure(Sender: TObject; Canvas: TCanvas; Rect: TRect; State: TGlowButtonState) of object; + TSetButtonSizeEvent = procedure(Sender: TObject; var W, H: Integer) of object; + TOnGetShortCutHintPos = procedure(Sender: TObject; ButtonSizeState: TButtonSizeState; var ShortCutHintPosition: TShortCutHintPos) of object; + + TWinCtrl = class(TWinControl) + public + procedure PaintCtrls(DC: HDC; First: TControl); + end; + +{$IFDEF DELPHI6_LVL} + TAdvGlowButtonActionLink = class(TControlActionLink) + protected + FImageIndex: Integer; + FClient: TAdvCustomGlowButton; //TAdvGlowButton; + procedure AssignClient(AClient: TObject); override; + function IsCheckedLinked: Boolean; override; + function IsGroupIndexLinked: Boolean; override; + procedure SetGroupIndex(Value: Integer); override; + procedure SetChecked(Value: Boolean); override; + function IsImageIndexLinked: Boolean; override; + procedure SetImageIndex(Value: Integer); override; + end; +{$ENDIF} + + TShortCutHintWindow = class(THintWindow) + private + FColor: TColor; + FColorTo: TColor; + procedure WMEraseBkGnd(var Message: TWMEraseBkGnd); message WM_ERASEBKGND; + protected + procedure Resize; override; + procedure Paint; override; + procedure CreateParams(var Params:TCreateParams);override; + published + property Color: TColor read FColor write FColor; + property ColorTo: TColor read FColorTo write FColorTo; + end; + + TGlowButtonAppearance = class(TPersistent) + private + FOnChange: TNotifyEvent; + FBorderColor: TColor; + FBorderColorHot: TColor; + FBorderColorDown: TColor; + FColor: TColor; + FColorTo: TColor; + FColorDown: TColor; + FColorDownTo: TColor; + FColorHot: TColor; + FColorHotTo: TColor; + FColorCheckedTo: TColor; + FBorderColorDisabled: TColor; + FBorderColorChecked: TColor; + FColorDisabled: TColor; + FColorDisabledTo: TColor; + FColorChecked: TColor; + FColorMirror: TColor; + FColorMirrorTo: TColor; + FColorMirrorHot: TColor; + FColorMirrorHotTo: TColor; + FColorMirrorDown: TColor; + FColorMirrorDownTo: TColor; + FGradientDown: TGDIPGradient; + FGradientMirror: TGDIPGradient; + FGradientMirrorHot: TGDIPGradient; + FGradient: TGDIPGradient; + FGradientMirrorDown: TGDIPGradient; + FGradientHot: TGDIPGradient; + FColorMirrorDisabledTo: TColor; + FColorMirrorDisabled: TColor; + FColorMirrorCheckedTo: TColor; + FColorMirrorChecked: TColor; + FGradientChecked: TGDIPGradient; + FGradientDisabled: TGDIPGradient; + FGradientMirrorChecked: TGDIPGradient; + FGradientMirrorDisabled: TGDIPGradient; + FSystemFont: boolean; + procedure SetSystemFont(const Value: boolean); + procedure SetBorderColor(const Value: TColor); + procedure SetBorderColorChecked(const Value: TColor); + procedure SetBorderColorDisabled(const Value: TColor); + procedure SetBorderColorDown(const Value: TColor); + procedure SetBorderColorHot(const Value: TColor); + procedure SetColor(const Value: TColor); + procedure SetColorChecked(const Value: TColor); + procedure SetColorCheckedTo(const Value: TColor); + procedure SetColorDisabled(const Value: TColor); + procedure SetColorDisabledTo(const Value: TColor); + procedure SetColorDown(const Value: TColor); + procedure SetColorDownTo(const Value: TColor); + procedure SetColorHot(const Value: TColor); + procedure SetColorHotTo(const Value: TColor); + procedure SetColorMirror(const Value: TColor); + procedure SetColorMirrorChecked(const Value: TColor); + procedure SetColorMirrorCheckedTo(const Value: TColor); + procedure SetColorMirrorDisabled(const Value: TColor); + procedure SetColorMirrorDisabledTo(const Value: TColor); + procedure SetColorMirrorDown(const Value: TColor); + procedure SetColorMirrorDownTo(const Value: TColor); + procedure SetColorMirrorHot(const Value: TColor); + procedure SetColorMirrorHotTo(const Value: TColor); + procedure SetColorMirrorTo(const Value: TColor); + procedure SetColorTo(const Value: TColor); + procedure SetGradient(const Value: TGDIPGradient); + procedure SetGradientChecked(const Value: TGDIPGradient); + procedure SetGradientDisabled(const Value: TGDIPGradient); + procedure SetGradientDown(const Value: TGDIPGradient); + procedure SetGradientHot(const Value: TGDIPGradient); + procedure SetGradientMirror(const Value: TGDIPGradient); + procedure SetGradientMirrorChecked(const Value: TGDIPGradient); + procedure SetGradientMirrorDisabled(const Value: TGDIPGradient); + procedure SetGradientMirrorDown(const Value: TGDIPGradient); + procedure SetGradientMirrorHot(const Value: TGDIPGradient); + protected + procedure Changed; + public + constructor Create; + procedure Assign(Source: TPersistent); override; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + published + property BorderColor: TColor read FBorderColor write SetBorderColor default clSilver; + property BorderColorHot: TColor read FBorderColorHot write SetBorderColorHot default clBlue; + property BorderColorDown: TColor read FBorderColorDown write SetBorderColorDown default clNavy; + property BorderColorChecked: TColor read FBorderColorChecked write SetBorderColorChecked default clBlue; + property BorderColorDisabled: TColor read FBorderColorDisabled write SetBorderColorDisabled default clGray; + property Color: TColor read FColor write SetColor default clWhite; + property ColorTo: TColor read FColorTo write SetColorTo default clWhite; + property ColorChecked: TColor read FColorChecked write SetColorChecked; + property ColorCheckedTo: TColor read FColorCheckedTo write SetColorCheckedTo; + property ColorDisabled: TColor read FColorDisabled write SetColorDisabled; + property ColorDisabledTo: TColor read FColorDisabledTo write SetColorDisabledTo; + property ColorDown: TColor read FColorDown write SetColorDown; + property ColorDownTo: TColor read FColorDownTo write SetColorDownTo; + property ColorHot: TColor read FColorHot write SetColorHot; + property ColorHotTo: TColor read FColorHotTo write SetColorHotTo; + property ColorMirror: TColor read FColorMirror write SetColorMirror default clSilver; + property ColorMirrorTo: TColor read FColorMirrorTo write SetColorMirrorTo default clWhite; + property ColorMirrorHot: TColor read FColorMirrorHot write SetColorMirrorHot; + property ColorMirrorHotTo: TColor read FColorMirrorHotTo write SetColorMirrorHotTo; + property ColorMirrorDown: TColor read FColorMirrorDown write SetColorMirrorDown; + property ColorMirrorDownTo: TColor read FColorMirrorDownTo write SetColorMirrorDownTo; + property ColorMirrorChecked: TColor read FColorMirrorChecked write SetColorMirrorChecked; + property ColorMirrorCheckedTo: TColor read FColorMirrorCheckedTo write SetColorMirrorCheckedTo; + property ColorMirrorDisabled: TColor read FColorMirrorDisabled write SetColorMirrorDisabled; + property ColorMirrorDisabledTo: TColor read FColorMirrorDisabledTo write SetColorMirrorDisabledTo; + property Gradient: TGDIPGradient read FGradient write SetGradient default ggVertical; + property GradientMirror: TGDIPGradient read FGradientMirror write SetGradientMirror default ggVertical; + property GradientHot: TGDIPGradient read FGradientHot write SetGradientHot default ggRadial; + property GradientMirrorHot: TGDIPGradient read FGradientMirrorHot write SetGradientMirrorHot default ggRadial; + property GradientDown: TGDIPGradient read FGradientDown write SetGradientDown default ggRadial; + property GradientMirrorDown: TGDIPGradient read FGradientMirrorDown write SetGradientMirrorDown default ggRadial; + property GradientChecked: TGDIPGradient read FGradientChecked write SetGradientChecked default ggRadial; + property GradientMirrorChecked: TGDIPGradient read FGradientMirrorChecked write SetGradientMirrorChecked default ggVertical; + property GradientDisabled: TGDIPGradient read FGradientDisabled write SetGradientDisabled default ggRadial; + property GradientMirrorDisabled: TGDIPGradient read FGradientMirrorDisabled write SetGradientMirrorDisabled default ggRadial; + property SystemFont: boolean read FSystemFont write SetSystemFont default true; + end; + + ///

    Button with glow hover & down effect + TAdvCustomGlowButton = class(TCustomControl, ITMSStyle) + private + FActive: Boolean; + FDown: Boolean; + FLeftDown: Boolean; + FMouseDown: Boolean; + FTimer: TTimer; + FStepHover: Integer; + FStepPush: Integer; + FTimeInc: Integer; + FGlowState: TGlowState; + FImages: TImageList; + FImageIndex: TImageIndex; + FState: TAdvButtonState; + FMouseInControl: Boolean; + FMouseEnter: Boolean; + FDownChecked: Boolean; + FInitialDown: Boolean; + FDragging: Boolean; + FStyle: TAdvButtonStyle; + FGroupIndex: Integer; + FAllowAllUp: Boolean; + FTransparent: Boolean; + FLayout: TButtonLayout; + FDropDownButton: Boolean; + FDropDownSplit: Boolean; + FDropDownDirection: TDropDownDirection; + FDropDownMenu: TPopupMenu; + FOnDropDown: TNotifyEvent; + FDropDownPosition: TDropDownPosition; + FAppearance: TGlowButtonAppearance; + FDisabledImages: TImageList; + FInternalImages: TImageList; + FHotImages: TImageList; + FIPicture: TGDIPPicture; + FIDisabledPicture: TGDIPPicture; + FIHotPicture: TGDIPPicture; + FShowCaption: Boolean; + FAntiAlias: TAntiAlias; + FModalResult: TModalResult; + FDefault: boolean; + FCancel: Boolean; + FInButton: Boolean; + FBorderStyle: TBorderStyle; + FButtonPosition: TButtonPosition; + FOfficeHint: TAdvHintInfo; + FCheckLinked: Boolean; + FGroupIndexLinked: Boolean; + FFocusType: TFocusType; + FShortCutHint: TShortCutHintWindow; + FShortCutHintPos: TShortCutHintPos; + FShortCutHintText: string; + FShowDisabled: Boolean; + FOnInternalKeyDown: TKeyEvent; + FOnMouseLeave: TNotifyEvent; + FOnMouseEnter: TNotifyEvent; + FDroppedDown: Boolean; + FOverlappedText: Boolean; + FSpacing: Integer; + FAutoSize: Boolean; + FWordWrap: Boolean; + FDoAutoSize: Boolean; + FFirstPaint: Boolean; + FMarginVert: integer; + FMarginHorz: integer; + FRounded: Boolean; + FOnDrawButton: TGlowButtonDrawEvent; + FWideCaption: widestring; + FTrimming: TStringTrimming; + FRepeatTimer: TTimer; + FInitRepeatPause: Integer; + FRepeatPause: Integer; + FRepeatClick: Boolean; + FPainting: Boolean; + FOnInternalClick: TNotifyEvent; + FButtonSizeState: TButtonSizeState; + FMaxButtonSizeState: TButtonSizeState; + FOnSetButtonSize: TSetButtonSizeEvent; + FOldLayout: TButtonLayout; + FOldDropDownPosition: TDropDownPosition; + FMinButtonSizeState: TButtonSizeState; + FParentForm: TCustomForm; + FIsVista: boolean; + FNotes: TStringList; + FNotesFont: TFont; + FGotButtonClick: boolean; + FOnGetShortCutHintPos: TOnGetShortCutHintPos; + FHasFocus: boolean; + {$IFDEF DELPHI2006_LVL} + class var FStaticActionImageIndex: boolean; + {$ENDIF} + procedure SetOfficeHint(const Value: TAdvHintInfo); + procedure SetButtonPosition(const Value: TButtonPosition); + procedure SetBorderStyle(const Value: TBorderStyle); + function GetVersion: string; + procedure SetVersion(const Value: string); + procedure SetDefault(const Value: boolean); + procedure SetAntiAlias(const Value: TAntiAlias); + procedure SetShowCaption(const Value: Boolean); + procedure SetDisabledPicture(const Value: TGDIPPicture); + procedure SetHotPicture(const Value: TGDIPPicture); + procedure SetPicture(const Value: TGDIPPicture); + procedure SetTransparent(const Value: Boolean); + procedure UpdateExclusive; + procedure UpdateTracking; + procedure SetImageIndex(const Value: TImageIndex); + procedure SetImages(const Value: TImageList); + procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED; + procedure WMGetDlgCode(var Message: TMessage); message WM_GETDLGCODE; + procedure CNCommand(var Message: TWMCommand); message CN_COMMAND; + procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; + procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE; + procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER; + procedure WMSetText(var Message: TWMSetText); message WM_SETTEXT; + procedure WMEraseBkGnd(var Message: TWMEraseBkGnd); message WM_ERASEBKGND; + procedure WMPaint(var Msg: TWMPaint); message WM_PAINT; + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; +{$IFNDEF TMSDOTNET} + procedure CMButtonPressed(var Message: TMessage); message CM_BUTTONPRESSED; +{$ENDIF} + procedure WMLButtonDown(var Msg:TWMLButtonDown); message WM_LBUTTONDOWN; + procedure WMLButtonUp(var Msg:TWMLButtonDown); message WM_LBUTTONUP; + procedure WMLDblClk(var Msg: TWMLButtonDblClk); message WM_LBUTTONDBLCLK; + procedure TimerProc(Sender: TObject); + procedure OnAppearanceChanged(Sender: TObject); + procedure SetDown(Value: Boolean); + procedure SetStyle(const Value: TAdvButtonStyle); + procedure SetGroupIndex(const Value: Integer); + procedure SetAllowAllUp(const Value: Boolean); + procedure SetLayout(const Value: TButtonLayout); + procedure SetDropDownButton(const Value: Boolean); + procedure PopupBtnDown; + procedure SetDropDownPosition(const Value: TDropDownPosition); + procedure SetDropDownDirection(const Value: TDropDownDirection); + procedure SetAppearance(const Value: TGlowButtonAppearance); + procedure SetDisabledImages(const Value: TImageList); + procedure PictureChanged(Sender: TObject); + procedure SetSpacing(const Value: integer); + procedure SetAutoSizeEx(const Value: boolean); + procedure SetShowDisabled(const Value: boolean); + procedure SetWordWrap(const Value: boolean); + procedure SetMarginVert(const Value: integer); + procedure SetMarginHorz(const Value: integer); + procedure SetRounded(const Value: boolean); + procedure SetTrimming(const Value: TStringTrimming); + procedure PerformResize; + function IsFontStored: Boolean; + procedure SetButtonSizeState(const Value: TButtonSizeState); + procedure SetMaxButtonSizeState(const Value: TButtonSizeState); + procedure SetMinButtonSizeState(const Value: TButtonSizeState); + procedure SetNotes(const Value: TStrings); + function GetNotes: TStrings; + procedure SetNotesFont(const Value: TFont); + procedure SetWideCaption(const Value: widestring); + {$IFDEF DELPHI6_LVL} + function ActionHasImages: boolean; + {$ENDIF} +// procedure SetCaption(const Value: string); +// function GetCaption: string; + protected + FHot: Boolean; + FDefaultPicDrawing: Boolean; + FDefaultCaptionDrawing: Boolean; + FCustomizerCreated: Boolean; + FCommandID: Integer; + procedure TimerExpired(Sender: TObject); virtual; + procedure DrawGlyphCaption; virtual; + procedure GetToolImage(bmp: TBitmap); virtual; + procedure SetDroppedDown(Value: Boolean); + procedure CreateParams(var Params:TCreateParams); override; + procedure Paint; override; + procedure Loaded; override; + procedure DoEnter; override; + procedure DoExit; override; + procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyUp(var Key: Word; Shift: TShiftState); override; + procedure KeyPress(var Key: Char); override; +{$IFDEF DELPHI6_LVL} + function GetActionLinkClass: TControlActionLinkClass; override; + procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override; +{$ENDIF} + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + property GlowState: TGlowState read FGlowState write FGlowState; +{$IFDEF TMSDOTNET} + procedure ButtonPressed(Group: Integer; Button: TAdvGlowButton); +{$ENDIF} + property Down: Boolean read FDownChecked write SetDown default False; + property Style: TAdvButtonStyle read FStyle write SetStyle default bsButton; + property State: TAdvButtonState read FState write FState; + property GroupIndex: Integer read FGroupIndex write SetGroupIndex default 0; + property AllowAllUp: Boolean read FAllowAllUp write SetAllowAllUp default False; + property Layout: TButtonLayout read FLayout write SetLayout default blGlyphLeft; + property DroppedDown: Boolean read FDroppedDown; + property DropDownButton: Boolean read FDropDownButton write SetDropDownButton default False; + property DropDownDirection: TDropDownDirection read FDropDownDirection write SetDropDownDirection default ddDown; + property DropDownPosition: TDropDownPosition read FDropDownPosition write SetDropDownPosition default dpRight; + property DropDownSplit: Boolean read FDropDownSplit write FDropDownSplit default true; + property DropDownMenu: TPopupMenu read FDropDownMenu write FDropDownMenu; + property OnDropDown: TNotifyEvent read FOnDropDown write FOnDropDown; + function GetVersionNr: Integer; virtual; + function IsMenuButton: Boolean; virtual; + function CanDrawBorder: Boolean; virtual; + function CanDrawFocused: Boolean; virtual; + procedure InternalClick; + property CheckLinked: Boolean read FCheckLinked write FCheckLinked; + property GroupIndexLinked: Boolean read FGroupIndexLinked write FGroupIndexLinked; + property OnInternalKeyDown: TKeyEvent read FOnInternalKeyDown write FOnInternalKeyDown; // Used by AdvToolBar + property OnInternalClick: TNotifyEvent read FOnInternalClick write FOnInternalClick; // Used by AdvToolBar + property OnGetShortCutHintPos: TOnGetShortCutHintPos read FOnGetShortCutHintPos write FOnGetShortCutHintPos; // Used by AdvToolBar + property OverlappedText: boolean read FOverlappedText write FOverlappedText; + property DoAutoSize: boolean read FDoAutoSize write FDoAutoSize; + property ButtonSizeState: TButtonSizeState read FButtonSizeState write SetButtonSizeState; // Used by AdvToolBar + property MaxButtonSizeState: TButtonSizeState read FMaxButtonSizeState write SetMaxButtonSizeState default bsLarge; + property MinButtonSizeState: TButtonSizeState read FMinButtonSizeState write SetMinButtonSizeState default bsGlyph; + property OnSetButtonSize: TSetButtonSizeEvent read FOnSetButtonSize write FOnSetButtonSize; // Used by AdvToolBar + function GetButtonSize(BtnSizeState: TButtonSizeState): TSize; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + procedure CreateWnd; override; + procedure Click; override; + procedure DoDropDown; + property Appearance: TGlowButtonAppearance read FAppearance write SetAppearance; + procedure ShowShortCutHint; + procedure HideShortCutHint; + /// Sets the style of the component, make sure to include AdvStyleIF unit + procedure SetComponentStyle(AStyle: TTMSStyle); + property WideCaption: widestring read FWideCaption write SetWideCaption; + {$IFDEF DELPHI2006_LVL} + class property StaticActionImageIndex: boolean read FStaticActionImageIndex write FStaticActionImageIndex; + {$ENDIF} + published + property Align; + property Action; + property Anchors; + property AntiAlias: TAntiAlias read FAntiAlias write SetAntiAlias default aaClearType; + property AutoSize: boolean read FAutoSize write SetAutoSizeEx default false; + property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle; + property Cancel: Boolean read FCancel write FCancel default False; + //property Caption: string read GetCaption write SetCaption; + property Caption; + property Constraints; + property Default: boolean read FDefault write SetDefault default False; + property Font stored IsFontStored; + property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1; + property Images: TImageList read FImages write SetImages; + property DisabledImages: TImageList read FDisabledImages write SetDisabledImages; + property DisabledPicture: TGDIPPicture read FIDisabledPicture write SetDisabledPicture; + property DragMode; + property DragKind; + property FocusType: TFocusType read FFocusType write FFocusType default ftBorder; + property HotImages: TImageList read FHotImages write FHotImages; + property HotPicture: TGDIPPicture read FIHotPicture write SetHotPicture; + property MarginVert: integer read FMarginVert write SetMarginVert default 1; + property MarginHorz: integer read FMarginHorz write SetMarginHorz default 1; + property ModalResult: TModalResult read FModalResult write FModalResult default 0; + property Notes: TStrings read GetNotes write SetNotes; + property NotesFont: TFont read FNotesFont write SetNotesFont; + property OfficeHint: TAdvHintInfo read FOfficeHint write SetOfficeHint; + property ParentFont default true; + property Picture: TGDIPPicture read FIPicture write SetPicture; + property PopupMenu; + property Position: TButtonPosition read FButtonPosition write SetButtonPosition default bpStandalone; + property InitRepeatPause: Integer read FInitRepeatPause write FInitRepeatPause default 400; + property RepeatPause: Integer read FRepeatPause write FRepeatPause default 100; + property RepeatClick: boolean read FRepeatClick write FRepeatClick default false; + property Rounded: Boolean read FRounded write SetRounded default true; + property ShortCutHint: string read FShortCutHintText write FShortCutHintText; + property ShortCutHintPos: TShortCutHintPos read FShortCutHintPos write FShortCutHintPos default shpTop; + property ShowCaption: Boolean read FShowCaption write SetShowCaption default true; + property ShowDisabled: Boolean read FShowDisabled write SetShowDisabled default true; + property Spacing: Integer read FSpacing write SetSpacing default 2; + property Transparent: Boolean read FTransparent write SetTransparent default false; + property Trimming: TStringTrimming read FTrimming write SetTrimming default StringTrimmingNone; + property Version: string read GetVersion write SetVersion stored False; + property WordWrap: boolean read FWordWrap write SetWordWrap default true; + property ParentShowHint; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnClick; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnExit; + property OnEnter; + + property OnStartDock; + property OnStartDrag; + + property OnMouseDown; + property OnMouseUp; + property OnMouseMove; + property OnKeyDown; + property OnKeyUp; + property OnKeyPress; + property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; + property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; + property OnDrawButton: TGlowButtonDrawEvent read FOnDrawButton write FOnDrawButton; + end; + + TAdvGlowButton = class(TAdvCustomGlowButton) + private + protected + public + property State; + property DroppedDown; + published + property AllowAllUp; + property Appearance; + property Down; + property Enabled; + property GroupIndex; + property Layout; + property Style; + property MaxButtonSizeState; + property MinButtonSizeState; + property DropDownButton; + property DropDownPosition; + property DropDownDirection; + property DropDownSplit; + property DropDownMenu; + property OnDropDown; + end; + + {$IFNDEF TMS_STD} + + //---- DB aware version + TDBGlowButtonType = (dbCustom, dbFirst, dbPrior, dbNext, dbLast, dbInsert, dbAppend, + dbDelete, dbEdit, dbPost, dbCancel, dbRefresh); + + TDBBDisableControl = (drBOF, drEOF, drReadonly, drNotEditing, drEditing, drEmpty, drEvent); + TDBBDisableControls = set of TDBBDisableControl; + + TBeforeActionEvent = procedure (Sender: TObject; var DoAction: Boolean) of object; + TAfterActionEvent = procedure (Sender: TObject; var ShowException: Boolean) of object; + TGetConfirmEvent = procedure (Sender: TObject; var Question: string; var Buttons: TMsgDlgButtons; var HelpCtx: Longint) of object; + TGetEnabledEvent = procedure (Sender: TObject; var Enabled: Boolean) of object; + + TDBGlowButtonDataLink = class(TDataLink) + private + FOnEditingChanged: TNotifyEvent; + FOnDataSetChanged: TNotifyEvent; + FOnActiveChanged: TNotifyEvent; + protected + procedure EditingChanged; override; + procedure DataSetChanged; override; + procedure ActiveChanged; override; + public + constructor Create; + property OnEditingChanged: TNotifyEvent + read FOnEditingChanged write FOnEditingChanged; + property OnDataSetChanged: TNotifyEvent + read FOnDataSetChanged write FOnDataSetChanged; + property OnActiveChanged: TNotifyEvent + read FOnActiveChanged write FOnActiveChanged; + end; + + TDBAdvGlowButton = class(TAdvCustomGlowButton) + private + FDataLink: TDBGlowButtonDataLink; + FAutoDisable: Boolean; + FDisableControls: TDBBDisableControls; + FOnAfterAction: TAfterActionEvent; + FOnBeforeAction: TBeforeActionEvent; + FDBButtonType: TDBGlowButtonType; + FOnGetConfirm: TGetConfirmEvent; + FOnGetEnabled: TGetEnabledEvent; + FOnEnabledChanged: TNotifyEvent; + FConfirmAction: Boolean; + FConfirmActionString: String; + FInProcUpdateEnabled: Boolean; + procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; + procedure OnDataSetEvents(Sender: TObject); + + function GetDataSource: TDataSource; + procedure SetDataSource(const Value: TDataSource); + procedure SetDBButtonType(const Value: TDBGlowButtonType); + procedure SetConfirmActionString(const Value: String); + protected + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + procedure Loaded; override; + procedure CalcDisableReasons; + procedure DoBeforeAction(var DoAction: Boolean); virtual; + procedure DoGetQuestion(var Question: string; var Buttons: TMsgDlgButtons; var HelpCtx: Longint); virtual; + function DoConfirmAction: Boolean; virtual; + procedure DoAction; virtual; + procedure UpdateEnabled; virtual; + procedure LoadGlyph; virtual; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Click; override; + published + property Action; + property Appearance; + property Layout; + property Constraints; + property AutoDisable: Boolean read FAutoDisable write FAutoDisable; + property ConfirmAction: Boolean read FConfirmAction write FConfirmAction; + property ConfirmActionString: String read FConfirmActionString write SetConfirmActionString; + property DataSource: TDataSource read GetDataSource write SetDataSource; + property DBButtonType: TDBGlowButtonType read FDBButtonType write SetDBButtonType; + property DisableControl: TDBBDisableControls read FDisableControls write FDisableControls; + property Enabled; + + property OnBeforeAction: TBeforeActionEvent read FOnBeforeAction write FOnBeforeAction; + property OnAfterAction: TAfterActionEvent read FOnAfterAction write FOnAfterAction; + property OnGetConfirm: TGetConfirmEvent read FOnGetConfirm write FOnGetConfirm; + property OnGetEnabled: TGetEnabledEvent read FOnGetEnabled write FOnGetEnabled; + property OnEnabledChanged: TNotifyEvent read FOnEnabledChanged write FOnEnabledChanged; + end; + + {$ENDIF} + +implementation + +{$IFNDEF TMS_STD} +uses + {$IFDEF DELPHI6_LVL} + VDBConsts + {$ELSE} + DBConsts + {$ENDIF} + ; +{$ENDIF} + +type + TButtonDisplay = (bdNone, bdButton, bdDropDown); + +//------------------------------------------------------------------------------ + +procedure DrawGradient(Canvas: TCanvas; FromColor, ToColor: TColor; Steps: Integer; R: TRect; Direction: Boolean); +var + diffr, startr, endr: Integer; + diffg, startg, endg: Integer; + diffb, startb, endb: Integer; + rstepr, rstepg, rstepb, rstepw: Real; + i, stepw: Word; + +begin + if Steps = 0 then + Steps := 1; + + FromColor := ColorToRGB(FromColor); + ToColor := ColorToRGB(ToColor); + + startr := (FromColor and $0000FF); + startg := (FromColor and $00FF00) shr 8; + startb := (FromColor and $FF0000) shr 16; + endr := (ToColor and $0000FF); + endg := (ToColor and $00FF00) shr 8; + endb := (ToColor and $FF0000) shr 16; + + diffr := endr - startr; + diffg := endg - startg; + diffb := endb - startb; + + rstepr := diffr / steps; + rstepg := diffg / steps; + rstepb := diffb / steps; + + if Direction then + rstepw := (R.Right - R.Left) / Steps + else + rstepw := (R.Bottom - R.Top) / Steps; + + with Canvas do + begin + for i := 0 to steps - 1 do + begin + endr := startr + Round(rstepr * i); + endg := startg + Round(rstepg * i); + endb := startb + Round(rstepb * i); + stepw := Round(i * rstepw); + Pen.Color := endr + (endg shl 8) + (endb shl 16); + Brush.Color := Pen.Color; + if Direction then + Rectangle(R.Left + stepw, R.Top, R.Left + stepw + Round(rstepw) + 1, R.Bottom) + else + Rectangle(R.Left, R.Top + stepw, R.Right, R.Top + stepw + Round(rstepw) + 1); + end; + end; +end; + +//------------------------------------------------------------------------------ + +function BrightnessColor(Col: TColor; Brightness: integer): TColor; overload; +var + r1,g1,b1: Integer; +begin + Col := ColorToRGB(Col); + r1 := GetRValue(Col); + g1 := GetGValue(Col); + b1 := GetBValue(Col); + + if r1 = 0 then + r1 := Max(0,Brightness) + else + r1 := Round( Min(100,(100 + Brightness))/100 * r1 ); + + if g1 = 0 then + g1 := Max(0,Brightness) + else + g1 := Round( Min(100,(100 + Brightness))/100 * g1 ); + + if b1 = 0 then + b1 := Max(0,Brightness) + else + b1 := Round( Min(100,(100 + Brightness))/100 * b1 ); + + Result := RGB(r1,g1,b1); +end; + +//------------------------------------------------------------------------------ + +function BrightnessColor(Col: TColor; BR,BG,BB: integer): TColor; overload; +var + r1,g1,b1: Integer; +begin + Col := Longint(ColorToRGB(Col)); + r1 := GetRValue(Col); + g1 := GetGValue(Col); + b1 := GetBValue(Col); + + if r1 = 0 then + r1 := Max(0,BR) + else + r1 := Round( Min(100,(100 + BR))/100 * r1 ); + + if g1 = 0 then + g1 := Max(0,BG) + else + g1 := Round( Min(100,(100 + BG))/100 * g1 ); + + if b1 = 0 then + b1 := Max(0,BB) + else + b1 := Round( Min(100,(100 + BB))/100 * b1 ); + + Result := RGB(r1,g1,b1); +end; + +//------------------------------------------------------------------------------ + +function BlendColor(Col1,Col2:TColor; BlendFactor:Integer): TColor; +var + r1,g1,b1: Integer; + r2,g2,b2: Integer; + +begin + if BlendFactor >= 100 then + begin + Result := Col1; + Exit; + end; + if BlendFactor <= 0 then + begin + Result := Col2; + Exit; + end; + + Col1 := Longint(ColorToRGB(Col1)); + r1 := GetRValue(Col1); + g1 := GetGValue(Col1); + b1 := GetBValue(Col1); + + Col2 := Longint(ColorToRGB(Col2)); + r2 := GetRValue(Col2); + g2 := GetGValue(Col2); + b2 := GetBValue(Col2); + + r1 := Round( BlendFactor/100 * r1 + (1 - BlendFactor/100) * r2); + g1 := Round( BlendFactor/100 * g1 + (1 - BlendFactor/100) * g2); + b1 := Round( BlendFactor/100 * b1 + (1 - BlendFactor/100) * b2); + + Result := RGB(r1,g1,b1); +end; + + +//------------------------------------------------------------------------------ + +procedure DrawOpenRoundRectMiddle(graphics: TGPGraphics; PC: TColor; X,Y,Width,Height,Radius: integer;Hot:boolean); +var + path:TGPGraphicsPath; + gppen:TGPPen; + +begin + path := TGPGraphicsPath.Create; + + gppen := tgppen.Create(ColorToARGB(PC),1); + path.AddLine(X-1, Y + height, X + width, Y + height); + graphics.DrawPath(gppen, path); + path.Free; + + path := TGPGraphicsPath.Create; + path.AddLine(X-1, Y, X + width, Y); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(BrightnessColor(PC,-5)),1); + path.AddLine(X + Width, Y, X + width, Y + Height); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + + if hot then + begin + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(BrightnessColor(PC,-5)),1); + path.AddLine(X , Y, X , Y + Height); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + end + else + begin + path := TGPGraphicsPath.Create; + // 3D color effect + gppen := tgppen.Create(ColorToARGB(BrightnessColor(clwhite,-10)),1); + path.AddLine(X, Y + 2, X, Y + Height - 2); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + end; +end; + + +//------------------------------------------------------------------------------ + +procedure DrawOpenRoundRectLeft(graphics: TGPGraphics; PC:TColor; X,Y,Width,Height,Radius: integer); +var + path:TGPGraphicsPath; + gppen:TGPPen; +begin + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(PC),1); + path.AddLine(X + width , Y + height, X + radius, Y + height); + path.AddArc(X, Y + height - (radius*2), radius*2, radius*2, 90, 90); + path.AddLine(X, Y + height - (radius*2), X, Y + radius); + path.AddArc(X, Y, radius*2, radius*2, 180, 90); + path.AddLine(X + radius, Y, X + width, Y); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(BrightnessColor(PC,-5)),1); + path.AddLine(X + Width , Y, X + width , Y + Height); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + +end; + +procedure DrawOpenRoundRectRight(graphics: TGPGraphics; PC: TColor; X,Y,Width,Height,Radius: integer;Hot: boolean); +var + path:TGPGraphicsPath; + gppen:TGPPen; +begin + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(PC),1); + path.AddLine(X, Y, X + width - (radius *2), Y); + path.AddArc(X + width - (radius*2), Y, radius*2, radius*2, 270, 90); + path.AddLine(X + width, Y + radius, X + width, Y + height - (radius*2)); + path.AddArc(X + width - (radius*2), Y + height - (radius*2), radius*2, radius*2,0,90); + path.AddLine(X + width , Y + height, X, Y + height); + graphics.DrawPath(gppen, path); + gppen.Free; + + path.Free; + + + if hot then + begin + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(BrightnessColor(PC,-5)),1); + path.AddLine(X , Y, X , Y + Height); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + end + else + begin + path := TGPGraphicsPath.Create; + // 3D color effect + gppen := tgppen.Create(ColorToARGB(BrightnessColor(clwhite,-10)),1); + path.AddLine(X, Y + 2, X, Y + Height - 2); + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; + end; +end; + +//------------------------------------------------------------------------------ + +procedure DrawDottedRoundRect(graphics: TGPGraphics; PC: TColor; X,Y,Width,Height,Radius: integer); +var + path:TGPGraphicsPath; + gppen:TGPPen; +begin + path := TGPGraphicsPath.Create; + gppen := tgppen.Create(ColorToARGB(PC),1); + gppen.SetDashStyle(DashStyleDot); + path.AddLine(X + radius, Y, X + width - (radius*2), Y); + path.AddArc(X + width - (radius*2), Y, radius*2, radius*2, 270, 90); + path.AddLine(X + width, Y + radius, X + width, Y + height - (radius*2)); + path.AddArc(X + width - (radius*2), Y + height - (radius*2), radius*2, radius*2,0,90); + path.AddLine(X + width - (radius*2), Y + height, X + radius, Y + height); + path.AddArc(X, Y + height - (radius*2), radius*2, radius*2, 90, 90); + path.AddLine(X, Y + height - (radius*2), X, Y + radius); + path.AddArc(X, Y, radius*2, radius*2, 180, 90); + path.CloseFigure; + graphics.DrawPath(gppen, path); + gppen.Free; + path.Free; +end; + + +//------------------------------------------------------------------------------ + +procedure DrawRoundRect(graphics: TGPGraphics; PC: TColor; X,Y,Width,Height,Radius: integer); +var + path:TGPGraphicsPath; + gppen:TGPPen; + r: integer; +begin + gppen := tgppen.Create(ColorToARGB(PC),1); + + if radius = 0 then + begin + graphics.DrawRectangle(gppen, X, Y, Width, Height); + end + else + begin + r := radius * 2; + path := TGPGraphicsPath.Create; + //gppen := tgppen.Create(ColorToARGB(PC),1); + path.AddLine(X + radius, Y, X + width - r, Y); + path.AddArc(X + width - r, Y, r, r, 270, 90); + path.AddLine(X + width, Y + radius, X + width, Y + height - r); + path.AddArc(X + width - r, Y + height - r, r, r,0,90); + path.AddLine(X + width - r, Y + height, X + radius, Y + height); + path.AddArc(X, Y + height - r, r, r, 90, 90); + path.AddLine(X, Y + height - r, X, Y + radius); + path.AddArc(X, Y, r, r, 180, 90); + path.CloseFigure; + graphics.DrawPath(gppen, path); + path.Free; + end; + gppen.Free; +end; + +procedure DrawArrow(Canvas: TCanvas; ArP: TPoint; ArClr, ArShad: TColor; Down:boolean); +begin + if Down then + begin + Canvas.Pen.Color := ArClr; + Canvas.MoveTo(ArP.X, ArP.Y); + Canvas.LineTo(ArP.X + 5, ArP.Y); + Canvas.MoveTo(ArP.X + 1, ArP.Y + 1); + Canvas.LineTo(ArP.X + 4, ArP.Y + 1); + Canvas.Pixels[ArP.X + 2, ArP.Y + 2] := ArClr; + Canvas.Pixels[ArP.X, ArP.Y + 1] := ArShad; + Canvas.Pixels[ArP.X + 4, ArP.Y + 1] := ArShad; + Canvas.Pixels[ArP.X + 1, ArP.Y + 2] := ArShad; + Canvas.Pixels[ArP.X + 3, ArP.Y + 2] := ArShad; + Canvas.Pixels[ArP.X + 2, ArP.Y + 3] := ArShad; + end + else + begin + Canvas.Pen.Color := ArClr; + Canvas.MoveTo(ArP.X, ArP.Y); + Canvas.LineTo(ArP.X, ArP.Y + 5); + Canvas.MoveTo(ArP.X + 1, ArP.Y + 1); + Canvas.LineTo(ArP.X + 1, ArP.Y + 4); + Canvas.Pixels[ArP.X + 2, ArP.Y + 2] := ArClr; + Canvas.Pixels[ArP.X + 2, ArP.Y + 1] := ArShad; + Canvas.Pixels[ArP.X + 1, ArP.Y + 4] := ArShad; + Canvas.Pixels[ArP.X + 2, ArP.Y + 1] := ArShad; + Canvas.Pixels[ArP.X + 3, ArP.Y + 2] := ArShad; + Canvas.Pixels[ArP.X + 3, ArP.Y + 2] := ArShad; + end; +end; + +procedure DrawButtonBackground(Canvas: TCanvas; Graphics: TGPGraphics; R: TRect; CF,CT: TColor; Gradient: TGDIPGradient; Upper: boolean); +var + path: TGPGraphicsPath; + pthGrBrush: TGPPathGradientBrush; + linGrBrush: TGPLinearGradientBrush; + solGrBrush: TGPSolidBrush; + + w,h,w2,h2: Integer; + colors : array[0..0] of TGPColor; + count: Integer; + +begin + w := r.Right - r.Left; + h := r.Bottom - r.Top; + + h2 := h div 2; + w2 := w div 2; + + { + // draw background + if Upper then + Canvas.Brush.Color := CF + else + Canvas.Brush.Color := CT; + Canvas.FillRect(rect(r.Left , r.Top, r.Right , r.Bottom)); + } + + if Upper then + solGrBrush := TGPSolidBrush.Create(ColorToARGB(CF)) + else + solGrBrush := TGPSolidBrush.Create(ColorToARGB(CT)); + + Graphics.FillRectangle(solGrBrush, MakeRect(r.Left , r.Top, r.Right , r.Bottom)); + + solGrBrush.Free; + + // Create a path that consists of a single ellipse. + path := TGPGraphicsPath.Create; + + if Upper then // take borders in account + path.AddEllipse(r.Left, r.Top - h2 + 2, r.Right , r.Bottom) + else + path.AddEllipse(r.Left, r.Top, r.Right , r.Bottom); + + pthGrBrush := nil; + linGrBrush := nil; + + case Gradient of + ggRadial: pthGrBrush := TGPPathGradientBrush.Create(path); + ggVertical: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top,w,h),ColorToARGB(CF),ColorToARGB(CT), LinearGradientModeVertical); + ggDiagonalForward: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top,w,h),ColorToARGB(CF),ColorToARGB(CT), LinearGradientModeForwardDiagonal); + ggDiagonalBackward: linGrBrush := TGPLinearGradientBrush.Create(MakeRect(r.Left,r.Top,w,h),ColorToARGB(CF),ColorToARGB(CT), LinearGradientModeBackwardDiagonal); + end; + + if Gradient = ggRadial then + begin + if Upper then + pthGrBrush.SetCenterPoint(MakePoint(r.Left + w2, r.Top)) + else + pthGrBrush.SetCenterPoint(MakePoint(r.Left + w2, r.Bottom)); + + // Set the color at the center point to blue. + if Upper then + begin + pthGrBrush.SetCenterColor(ColorToARGB(CT)); + colors[0] := ColorToARGB(CF); + end + else + begin + pthGrBrush.SetCenterColor(ColorToARGB(CF)); + colors[0] := ColorToARGB(CT); + end; + + count := 1; + pthGrBrush.SetSurroundColors(@colors, count); + graphics.FillRectangle(pthGrBrush, r.Left, r.Top, r.Right, r.Bottom); + pthGrBrush.Free; + end + else + begin + graphics.FillRectangle(linGrBrush, r.Left, r.Top, r.Right, r.Bottom); + linGrBrush.Free; + end; + + path.Free; +end; + +//------------------------------------------------------------------------------ + +procedure DrawStretchPicture(graphics : TGPGraphics; Canvas: TCanvas; R: TRect; Pic: TGDIPPicture); +var + Img: TGPImage; + pstm: IStream; + hGlobal: THandle; + pcbWrite: Longint; + ms: TMemoryStream; + bmp: TBitmap; +begin + ms := TMemoryStream.Create; + Pic.SaveToStream(ms); + hGlobal := GlobalAlloc(GMEM_MOVEABLE, ms.Size); + if (hGlobal = 0) then + begin + ms.Free; + raise Exception.Create('Could not allocate memory for image'); + end; + + try + pstm := nil; + + // Create IStream* from global memory + CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + pstm.Write(ms.Memory, ms.Size,@pcbWrite); + + Img := TGPImage.Create(pstm); + if (Img.GetFormat = ifBMP) then + begin // use this alternative for easy bitmap auto transparent drawing + bmp := TBitmap.Create; + ms.Position := 0; + bmp.LoadFromStream(ms); + bmp.TransparentMode := tmAuto; + bmp.Transparent := true; + Canvas.StretchDraw(R, bmp); + bmp.Free; + end + else + begin + graphics.DrawImageRect(Img, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top); + end; + + Img.Free; + ms.Free; + finally + GlobalFree(hGlobal); + end; +end; + +//------------------------------------------------------------------------------ + +procedure DrawGDIPImageFromImageList(graphics: TGPGraphics; P: TPoint; Images: TImageList; ImageIndex: Integer; Enable: Boolean); +var + Img: TGPImage; + pstm: IStream; + hGlobal: THandle; + pcbWrite: Longint; + ms: TMemoryStream; + ImageAttributes: TGPImageAttributes; + r, g, b: byte; + GPBmp: TGPBitmap; + Aclr: TGPColor; + bmp: TBitmap; +begin + if not Assigned(Images) or (ImageIndex < 0) or not Assigned(graphics) then + Exit; + + bmp := TBitmap.Create; + bmp.Width := Images.Width; + bmp.Height := Images.Height; + bmp.Canvas.Brush.Color := clFuchsia; + bmp.Canvas.FillRect(Rect(0, 0, bmp.Width, bmp.Height)); + Images.Draw(bmp.Canvas, 0, 0, ImageIndex, Enable); + + ms := TMemoryStream.Create; + bmp.SaveToStream(ms); + hGlobal := GlobalAlloc(GMEM_MOVEABLE, ms.Size); + if (hGlobal = 0) then + begin + ms.Free; + raise Exception.Create('Could not allocate memory for image'); + end; + + try + pstm := nil; + + // Create IStream* from global memory + CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + pstm.Write(ms.Memory, ms.Size,@pcbWrite); + + Img := TGPImage.Create(pstm); + + GPBmp := TGPBitmap.Create(pstm); + GPBmp.GetPixel(0, 0, AClr); + GPBmp.Free; + + r := ADVGDIP.GetRed(AClr); + g := ADVGDIP.GetGreen(AClr); + b := ADVGDIP.GetBlue(AClr); + + ImageAttributes := TGPImageAttributes.Create; + ImageAttributes.SetColorKey(MakeColor(r, g, b), MakeColor(r, g, b), ColorAdjustTypeDefault); + graphics.DrawImage(Img, MakeRect(P.X, P.Y, Img.GetWidth, Img.Getheight), // destination rectangle + 0, 0, // upper-left corner of source rectangle + Img.GetWidth, // width of source rectangle + Img.GetHeight, // height of source rectangle + UnitPixel, + ImageAttributes); + + ImageAttributes.Free; + Img.Free; + ms.Free; + finally + GlobalFree(hGlobal); + end; +end; + +//------------------------------------------------------------------------------ + +procedure DrawGDIPImage(graphics: TGPGraphics; P: TPoint; Pic: TGDIPPicture); +var + Img: TGPImage; + pstm: IStream; + hGlobal: THandle; + pcbWrite: Longint; + ms: TMemoryStream; + ImageAttributes: TGPImageAttributes; + r, g, b: byte; + GPBmp: TGPBitmap; + Aclr: TGPColor; +begin + ms := TMemoryStream.Create; + pic.SaveToStream(ms); + hGlobal := GlobalAlloc(GMEM_MOVEABLE, ms.Size); + if (hGlobal = 0) then + begin + ms.Free; + raise Exception.Create('Could not allocate memory for image'); + end; + + try + pstm := nil; + + // Create IStream* from global memory + CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + pstm.Write(ms.Memory, ms.Size,@pcbWrite); + + Img := TGPImage.Create(pstm); + + GPBmp := TGPBitmap.Create(pstm); + GPBmp.GetPixel(0, 0, AClr); + GPBmp.Free; + + r := ADVGDIP.GetRed(AClr); + g := ADVGDIP.GetGreen(AClr); + b := ADVGDIP.GetBlue(AClr); + + ImageAttributes := TGPImageAttributes.Create; + ImageAttributes.SetColorKey(MakeColor(r, g, b), MakeColor(r, g, b), ColorAdjustTypeDefault); + graphics.DrawImage(Img, MakeRect(P.X, P.Y, Img.GetWidth, Img.Getheight), // destination rectangle + 0, 0, // upper-left corner of source rectangle + Img.GetWidth, // width of source rectangle + Img.GetHeight, // height of source rectangle + UnitPixel, + ImageAttributes); + + ImageAttributes.Free; + Img.Free; + ms.Free; + finally + GlobalFree(hGlobal); + end; +end; + +//------------------------------------------------------------------------------ + +function DrawVistaButton(Canvas: TCanvas; r: TRect; CFU, CTU, CFB, CTB, PC: TColor; + GradientU, GradientB: TGDIPGradient; Caption:string; WideCaption: widestring; DrawCaption: Boolean; AFont: TFont; + Images: TImageList; ImageIndex: Integer; EnabledImage: Boolean; Layout: TButtonLayout; + DropDownButton: Boolean; DrawDwLine: Boolean; Enabled: Boolean; Focus: Boolean; DropDownPos: TDropDownPosition; + Picture: TGDIPPicture; ForcePicSize: TSize; AntiAlias: TAntiAlias; DrawPic: Boolean; Glyph: TBitmap; ButtonDisplay: TButtonDisplay; Transparent, Hot: boolean; + ButtonPosition: TButtonPosition; DropDownSplit, DrawBorder, OverlapText, WordWrap, AutoSize, Rounded, DropDir: Boolean; Spacing: integer; + Trimming: TStringTrimming;Notes: TStringList; NotesFont: TFont;Checked: boolean): TSize; +var + graphics : TGPGraphics; + path: TGPGraphicsPath; + pthGrBrush: TGPPathGradientBrush; + linGrBrush: TGPLinearGradientBrush; + count: Integer; + w,h,h2,h2d: Integer; + colors : array[0..0] of TGPColor; + fontFamily,nfontFamily: TGPFontFamily; + font,nfont: TGPFont; + rectf: TGPRectF; + stringFormat: TGPStringFormat; + solidBrush,nsolidBrush: TGPSolidBrush; + x1,y1,x2,y2: single; + fs,nfs: integer; + sizerect: TGPRectF; + noterect: TGPRectF; + ImgX, ImgY, ImgW, ImgH: Integer; + BtnR, DwR: TRect; + BR1,BR2: TRect; + DR1,DR2: TRect; + AP: TPoint; + szRect: TRect; + tm: TTextMetric; + ttf: boolean; + Radius: integer; + uformat,wwformat: Cardinal; + tdrect: TRect; + th, px, py: integer; + notesrect: TRect; + ydropd: integer; + +begin + BtnR := R; + + if Rounded then + Radius := 3 + else + Radius := 0; + + if DropDownPos = dpRight then + begin + DwR := Rect(BtnR.Right - DropDownSectWidth, BtnR.Top, BtnR.Right, BtnR.Bottom); + if DropDownButton then + BtnR.Right := DwR.Left; + end + else // DropDownPos = doBottom + begin + DwR := Rect(BtnR.Left, BtnR.Bottom - DropDownSectWidth, BtnR.Right, BtnR.Bottom); + if DropDownButton then + BtnR.Bottom := DwR.Top; + end; + + if (Notes.Text <> '') then + Layout := blGlyphLeftAdjusted; + + w := r.Right - r.Left; + h := r.Bottom - r.Top; + + h2 := h div 2; + + // Create GDI+ canvas + graphics := TGPGraphics.Create(Canvas.Handle); + + if not Transparent then + begin + + if DropDownButton and (DrawDwLine) and DropDownSplit then + begin + if DropDownPos = dpRight then + begin + DR1 := Rect(r.Right - 12, r.Top + h2 - 1, r.Right, r.Bottom); + DR2 := Rect(r.Right - 12, r.Top, r.Right, r.Bottom - h2); + BR1 := Rect(r.Left, r.Top + h2 - 1, r.Right - 12, r.Bottom); + BR2 := Rect(r.Left, r.Top, r.Right - 12, r.Bottom - h2); + end + else + begin + DR1 := Rect(r.Left, r.Bottom - 6, r.Right, r.Bottom); + DR2 := Rect(r.Left, r.Bottom - 12, r.Right, r.Bottom - 6); + + DR2 := Rect(r.Left, r.Bottom - 12, r.Right, r.Bottom); + + h2d := (r.Bottom - r.Top - 12) div 2; + BR1 := Rect(r.Left, r.Top + h2d - 1, r.Right, r.Bottom - 12); + BR2 := Rect(r.Left, r.Top, r.Right, r.Bottom - 12 - h2d); + end; + + if ButtonDisplay = bdDropDown then + begin + DrawButtonBackground(Canvas, Graphics, BR1, CTB, CFB, GradientB, False); + DrawButtonBackground(Canvas, Graphics, BR2, CFU, CTU, GradientU, True); + + DrawButtonBackground(Canvas, Graphics, DR2, BrightnessColor(CFU,-10), BrightnessColor(CTU,-10), GradientU, True); + if (DropDownPos = dpRight) then + DrawButtonBackground(Canvas, Graphics, DR1, BrightnessColor(CTB,-10), BrightnessColor(CFB,-10), GradientB, False); + end + else + begin + DrawButtonBackground(Canvas, Graphics, BR1, BrightnessColor(CTB,-10), BrightnessColor(CFB,-10), GradientB, False); + DrawButtonBackground(Canvas, Graphics, BR2, BrightnessColor(CFU,-10), BrightnessColor(CTU,-10), GradientU, True); + + DrawButtonBackground(Canvas, Graphics, DR2, CFU, CTU, ggRadial, True); + if DropDownPos = dpRight then + DrawButtonBackground(Canvas, Graphics, DR1, CTB, CFB, GradientB, False); + end; + end + else + begin + DrawButtonBackground(Canvas, Graphics, Rect(r.Left, r.Top + h2 - 1, r.Right, r.Bottom), CTB, CFB, GradientB, False); + DrawButtonBackground(Canvas, Graphics, Rect(r.Left, r.Top, r.Right, r.Bottom - h2), CFU, CTU, GradientU, True); + end; + end; + + graphics.SetSmoothingMode(SmoothingModeAntiAlias); + + if not Transparent and DrawBorder then + begin + case ButtonPosition of + bpStandalone: DrawRoundRect(Graphics, PC, r.Left, r.Top, r.Right - 1, r.Bottom - 1, Radius); + bpLeft: DrawOpenRoundRectLeft(Graphics, PC, r.Left, r.Top, r.Right - 1, r.Bottom - 1, Radius); + bpRight: DrawOpenRoundRectRight(Graphics, PC, r.Left, r.Top, r.Right - 1, r.Bottom - 1, Radius, Hot or Checked); + bpMiddle: DrawOpenRoundRectMiddle(Graphics, PC, r.Left, r.Top, r.Right - 1, r.Bottom - 1, Radius, Hot or Checked); + end; + end; + + if Focus then // Draw focus line + begin + graphics.SetSmoothingMode(SmoothingModeAntiAlias); + DrawRoundRect(graphics, $E4AD89,r.Left + 1,r.Top + 1, r.Right - 3, r.Bottom - 3, Radius); + graphics.SetSmoothingMode(SmoothingModeAntiAlias); + DrawDottedRoundRect(graphics, clGray,r.Left + 2,r.Top + 2, r.Right - 5, r.Bottom - 5, Radius); + end; + + ImgX := 0; + ImgY := 0; + ImgH := 0; + ImgW := 0; + + fontFamily := TGPFontFamily.Create(AFont.Name); + + if (fontFamily.Status in [FontFamilyNotFound, FontStyleNotFound]) then + begin + fontFamily.Free; + fontFamily := TGPFontFamily.Create('Arial'); + end; + + nfontFamily := TGPFontFamily.Create(NotesFont.Name); + + if (nfontFamily.Status in [FontFamilyNotFound, FontStyleNotFound]) then + begin + nfontFamily.Free; + nfontFamily := TGPFontFamily.Create('Arial'); + end; + + + fs := 0; + if (fsBold in AFont.Style) then + fs := fs + 1; + if (fsItalic in AFont.Style) then + fs := fs + 2; + if (fsUnderline in AFont.Style) then + fs := fs + 4; + + nfs := 0; + if (fsBold in NotesFont.Style) then + nfs := nfs + 1; + if (fsItalic in NotesFont.Style) then + nfs := nfs + 2; + if (fsUnderline in NotesFont.Style) then + nfs := nfs + 4; + + if Assigned(Glyph) and not Glyph.Empty and (Glyph.Width > 1) and (Glyph.Height > 1) then + begin + ImgW := Glyph.Width; + ImgH := Glyph.Height; + + if (ForcePicSize.CX > 0) and (ForcePicSize.CY > 0) then + begin + ImgW := ForcePicSize.CX; + ImgH := ForcePicSize.CY; + end; + end + else if Assigned(Picture) and not Picture.Empty then + begin + Picture.GetImageSizes; + ImgW := Picture.Width; + ImgH := Picture.Height; + if (ForcePicSize.CX > 0) and (ForcePicSize.CY > 0) then + begin + ImgW := ForcePicSize.CX; + ImgH := ForcePicSize.CY; + end; + end + else + begin + if (ImageIndex > -1) and Assigned(Images) then + begin + ImgW := Images.Width; + ImgH := Images.Height; + {end + else if Assigned(ToolImage) and not (ToolImage.Empty) and (ToolImage.Width > 1) then + begin + ImgW := ToolImage.Width; + ImgH := ToolImage.Height; } + end; + end; + + if DrawCaption and ((Caption <> '') or (WideCaption <> '')) then + begin + if (ImgW > 0) and (Layout in [blGlyphLeft, blGlyphLeftAdjusted, blGlyphRight, blGlyphRightAdjusted])then + ImgW := ImgW + Spacing; + if (ImgH > 0) and (Layout in [blGlyphTop, blGlyphTopAdjusted])then + ImgH := ImgH + Spacing; + end; + + Result.cx := ImgW; + Result.cy := ImgH; + + if (Caption <> '') or (WideCaption <> '') then + begin + if pos('\n',caption) > 0 then + begin + if (ForcePicSize.cx > 0) and (ForcePicSize.cy > 0) then + Caption := StringReplace(caption, '\n', ' ', [rfReplaceAll, rfIgnoreCase]) + else + Caption := StringReplace(caption, '\n', #10#13, [rfReplaceAll, rfIgnoreCase]); + end; + + Canvas.Font.Name := AFont.Name; + + ttf := false; + + GetTextMetrics(Canvas.Handle, tm); + + if ((tm.tmPitchAndFamily AND TMPF_VECTOR) = TMPF_VECTOR) then + begin + if not ((tm.tmPitchAndFamily AND TMPF_DEVICE) = TMPF_DEVICE) then + begin + ttf := true; + end + end; + + if Screen.Fonts.IndexOf(AFont.Name) = -1 then + ttf := false; + + font := TGPFont.Create(fontFamily, AFont.Size , fs, UnitPoint); + + w := BtnR.Right - BtnR.Left; + h := BtnR.Bottom - BtnR.Top; + + x1 := r.Left; + y1 := r.Top; + x2 := w; + y2 := h; + + if AutoSize then + begin + x2 := 4096; + y2 := 4096; + end; + + rectf := MakeRect(x1,y1,x2,y2); + + if WordWrap then + stringFormat := TGPStringFormat.Create(0) + else + stringFormat := TGPStringFormat.Create(GDIP_NOWRAP); + + if Enabled then + solidBrush := TGPSolidBrush.Create(ColorToARGB(AFont.Color)) + else + solidBrush := TGPSolidBrush.Create(ColorToARGB(clGray)); + + // Center-justify each line of text. + // stringFormat.SetAlignment(StringAlignmentCenter); + case Layout of + blGlyphLeftAdjusted: stringFormat.SetAlignment(StringAlignmentNear); + blGlyphRightAdjusted: stringFormat.SetAlignment(StringAlignmentFar); + else stringFormat.SetAlignment(StringAlignmentCenter); + end; + + // Center the block of text (top to bottom) in the rectangle. + + case Layout of + blGlyphTopAdjusted: stringFormat.SetLineAlignment(StringAlignmentNear); + blGlyphBottomAdjusted: stringFormat.SetLineAlignment(StringAlignmentFar); + else stringFormat.SetLineAlignment(StringAlignmentCenter); + end; + + stringFormat.SetHotkeyPrefix(HotkeyPrefixShow); + stringFormat.SetTrimming(Trimming); + + case AntiAlias of + aaClearType:graphics.SetTextRenderingHint(TextRenderingHintClearTypeGridFit); + aaAntiAlias:graphics.SetTextRenderingHint(TextRenderingHintAntiAlias); + end; + + if (AntiAlias = aaNone) or not ttf then + begin + Canvas.Font.Assign(AFont); + szRect.Left := round(rectf.X); + szRect.Top := round(rectf.Y); + + szRect.Right := szRect.Left + 2; + + uformat := DT_CALCRECT or DT_LEFT; + + if WordWrap then + begin + szRect.Right := szRect.Left + 4096; + uformat := uformat + DT_WORDBREAK + end + else + uformat := uformat + DT_SINGLELINE; + + if Caption <> '' then + szRect.Bottom := DrawText(Canvas.Handle,PChar(Caption),Length(Caption), szrect, uformat) + else + szRect.Bottom := DrawTextW(Canvas.Handle,PWideChar(WideCaption),Length(WideCaption), szrect, uformat); + + ydropd := (round(rectf.Height) + szRect.Bottom) div 2; + + sizeRect.Width := szRect.Right - szRect.Left; + sizeRect.Height := szRect.Bottom - szRect.Top; + + notesRect := Rect(0,0,0,0); + + if Notes.Text <> '' then + begin + Canvas.Font.Assign(NotesFont); + notesRect.Left := round(rectf.X); + notesRect.Top := round(rectf.Y); + notesRect.Right := notesRect.Left + 2; + notesRect.Bottom := DrawText(Canvas.Handle,PChar(Notes.Text),Length(Notes.Text), notesRect, DT_CALCRECT or DT_LEFT or DT_WORDBREAK); + + noteRect.Width := notesRect.Right - notesRect.Left; + noteRect.Height := notesRect.Bottom - notesRect.Top; + end; + + case Layout of + blGlyphLeft: + begin + sizeRect.X := (w - (szRect.Right - szRect.Left) - ImgW) div 2; + sizeRect.Y := szRect.Top; + Result.cx := ImgW + Spacing + round(sizerect.Width); + Result.cy := Max(ImgH + Spacing, Spacing + round(sizerect.Height)); + end; + blGlyphLeftAdjusted: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := szRect.Top; + Result.cx := ImgW + Spacing + Max(round(sizerect.Width),round(noteRect.Width)); + Result.cy := Max(ImgH + Spacing, Spacing + round(sizerect.Height)+round(noteRect.Height)); + end; + blGlyphTop: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := (h - (szRect.Bottom - szRect.Top) - ImgH - 2) div 2; + Result.cx := Max(ImgW + Spacing, Spacing + round(sizerect.Width)); + Result.cy := ImgH + Spacing + round(sizerect.Height); + end; + blGlyphTopAdjusted: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := szRect.Top; + Result.cx := Max(ImgW + Spacing, Spacing + round(sizerect.Width)); + Result.cy := ImgH + Spacing + round(sizerect.Height); + end; + blGlyphRight: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := szRect.Top; + Result.cx := ImgW + Spacing + round(sizerect.Width); + Result.cy := Max(ImgH + Spacing, Spacing + round(sizerect.Height)); + end; + blGlyphRightAdjusted: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := szRect.Top; + Result.cx := ImgW + Spacing + round(sizerect.Width); + Result.cy := Max(ImgH + Spacing, Spacing + round(sizerect.Height)); + end; + blGlyphBottom: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := szRect.Top; + Result.cx := Max(ImgW + Spacing, Spacing + round(sizerect.Width)); + Result.cy := ImgH + Spacing + round(sizerect.Height); + end; + blGlyphBottomAdjusted: + begin + sizeRect.X := szRect.Left; + sizeRect.Y := szRect.Top; + Result.cx := Max(ImgW + Spacing, Spacing + round(sizerect.Width)); + Result.cy := ImgH + Spacing + round(sizerect.Height); + end; + end; + //Result.cx := ImgW + Spacing + round(sizerect.Width); + //Result.cy := Max(ImgH + Spacing, Spacing + round(sizerect.Height)); + end + else + begin + if Caption <> '' then + graphics.MeasureString(Caption, Length(Caption), font, rectf, stringFormat, sizeRect) + else + graphics.MeasureString(WideCaption, Length(WideCaption), font, rectf, stringFormat, sizeRect); + + ydropd := round(sizerect.y + sizerect.height); + + noteRect := MakeRect(0,0,0,0); + + rectf.Width := rectf.Width - ImgW - Spacing; + + if Notes.Text <> '' then + begin + nfont := TGPFont.Create(nfontFamily, NotesFont.Size , nfs, UnitPoint); + graphics.MeasureString(Notes.Text, Length(Notes.Text), nfont, rectf, stringFormat, noteRect); + nfont.Free; + end; + + case Layout of + blGlyphLeft, blGlyphLeftAdjusted, blGlyphRight, blGlyphRightAdjusted: + begin + Result.cx := ImgW + Spacing + Max(round(sizerect.Width), round(noteRect.Width)); + Result.cy := Max(ImgH + Spacing, Spacing + round(sizerect.Height)+round(noteRect.Height)); + end; + blGlyphTop, blGlyphTopAdjusted, blGlyphBottom, blGlyphBottomAdjusted: + begin + Result.cx := Max(ImgW + Spacing, Spacing + round(sizerect.Width)); + Result.cy := ImgH + Spacing + round(sizerect.Height); + end; + end; + end; + + if not AutoSize then + begin + if not WordWrap then + begin + x2 := w; + y2 := h; + rectf := MakeRect(x1,y1,x2,y2); + end; + +// if (ImgW > 0) then + begin + case Layout of + blGlyphLeft: + begin + if (AntiAlias = aaNone) or not ttf then + begin + x1 := sizeRect.X + ImgW; + x2 := w - 2 - ImgW; + ImgX := round(sizeRect.X); + end + else + begin + x1 := r.Left + 2 + ImgW; + x2 := w - 2 - ImgW; + ImgX := round(sizerect.X - ImgW div 2); + end; + if ImgX < 2 then ImgX := 2; + ImgY := r.Top + Max(0, (h - ImgH) div 2); + end; + blGlyphLeftAdjusted: + begin + x1 := r.Left + 2 + ImgW; + x2 := w - 2 - ImgW; + + ImgX := round(sizerect.X - ImgW div 2); + if ImgX < 2 then ImgX := 2; + ImgY := r.Top + Max(0, (h - ImgH) div 2); + end; + blGlyphTop: + begin + if (AntiAlias = aaNone) or not ttf then + begin + y1 := r.Top + ImgH; + // y1 := sizeRect.Y + ImgH; + y2 := h - 2 - ImgH; + + ImgX := r.Left + Max(0, (w - ImgW) div 2); +// ImgY := round(sizeRect.Y); + ImgY := round(y2 - sizerect.Height); + ImgY := Max(0, ImgY div 2); + ImgY := round(y1) - ImgH + ImgY - 4; + end + else + begin + y1 := r.Top + ImgH; + y2 := h - 2 - ImgH; + ImgX := r.Left + Max(0, (w - ImgW) div 2); + ImgY := round(y2 - sizerect.Height); + ImgY := Max(0, ImgY div 2); + ImgY := round(y1) - ImgH + ImgY; + end; + if ImgY < 2 then ImgY := 2; + end; + blGlyphTopAdjusted: + begin + y1 := r.Top{ + 2} + ImgH; + y2 := h - 2 - ImgH; + + ImgX := r.Left + Max(0, (w - ImgW) div 2); + if Layout = blGlyphTopAdjusted then + ImgY := 0 //force to top margin + else + ImgY := round(y2 - sizerect.Height); + ImgY := Max(0, ImgY div 2); + ImgY := round(y1) - ImgH + ImgY; //round(sizerect.Height) - ImgY - 4; + if ImgY < 2 then ImgY := 2; + end; + blGlyphRight, blGlyphRightAdjusted: + begin + x1 := 2; + x2 := w - 4 - ImgW; + if Layout = blGlyphRightAdjusted then + ImgX := w - ImgW - 2 + else + begin + + ImgX := round(X2 - sizerect.width); + ImgX := Max(0, ImgX div 2); + ImgX := ImgX + round(sizerect.width) + 4; + if ImgX > (w - ImgW) then + ImgX := w - ImgW - 2; + end; + ImgY := r.Top + Max(0, (h - ImgH) div 2); + ImgX := ImgX + spacing; + end; + blGlyphBottom: + begin + if (AntiAlias = aaNone) or not ttf then + begin + y1 := 2; + y2 := h - 2 - ImgH; + + ImgX := r.Left + Max(0, (w - ImgW) div 2); + ImgY := round(y2 - sizerect.Height); + ImgY := Max(0, ImgY div 2); + ImgY := round(sizerect.Height + 5) + ImgY; + if ImgY > (h - ImgH) then ImgY := h - ImgH - 2; + end + else + begin + y1 := 2; + y2 := h - 2 - ImgH; + + ImgX := r.Left + Max(0, (w - ImgW) div 2); + ImgY := round(y2 - sizerect.Height); + ImgY := Max(0, ImgY div 2); + ImgY := round(sizerect.Height + 2) + ImgY; + if ImgY > (h - ImgH) then ImgY := h - ImgH - 2; + end; + end; + blGlyphBottomAdjusted: + begin + if (AntiAlias = aaNone) or not ttf then + begin + y1 := 2; + y2 := h - 4 - ImgH; + + ImgX := r.Left + Max(0, (w - ImgW) div 2); + ImgY := (h - ImgH - 2); + end + else + begin + y1 := 2; + y2 := h - 2 - ImgH; + + ImgX := r.Left + Max(0, (w - ImgW) div 2); + if Layout = blGlyphBottomAdjusted then + ImgY := h; //force to bottom margin + + ImgY := Max(0, ImgY div 2); + ImgY := round(sizerect.Height + 2) + ImgY; + if ImgY > (h - ImgH) then ImgY := h - ImgH - 2; + end; + end; + end; + end; + + if OverlapText then + rectf := MakeRect(r.Left, r.Top, r.Right, r.Bottom) + else + rectf := MakeRect(x1, y1, x2, y2); + + if DrawPic and OverlapText then + begin + if Assigned(Glyph) and not Glyph.Empty and (Glyph.Width > 1) and (Glyph.Height > 1) then + Canvas.Draw(ImgX, ImgY, Glyph); + end; + + if DrawCaption then + begin + if (AntiAlias = aaNone) or not ttf then + begin + szRect.Left := round(rectf.X); + szRect.Top := round(rectf.Y); + szRect.Right := szRect.Left + round(rectf.Width); + szRect.Bottom := szRect.Top + round(rectf.Height); + + Canvas.Brush.Style := bsClear; + if WordWrap then + wwformat := DT_WORDBREAK + else + wwformat := DT_SINGLELINE; + + uformat := DT_VCENTER or wwformat; + + case Layout of + blGlyphLeft: + begin + uformat := DT_VCENTER or wwformat or DT_LEFT; + szrect.Left := szrect.Left; + end; + blGlyphLeftAdjusted: + begin + uformat := DT_VCENTER or wwformat or DT_LEFT; + szrect.Left := szrect.Left + 2; + + if Notes.Text <> '' then + begin + uformat := uformat AND NOT DT_VCENTER; + szrect.Top := ((szRect.Bottom - szRect.Top) - round(sizeRect.Height) - round(noteRect.Height)) div 2; + end; + + end; + blGlyphTop: + begin + uformat := DT_TOP or wwformat or DT_CENTER or DT_VCENTER; + end; + blGlyphTopAdjusted: uformat := DT_TOP or wwformat or DT_CENTER; + blGlyphRight: uformat := DT_VCENTER or wwformat or DT_CENTER; + blGlyphRightAdjusted: uformat := DT_VCENTER or wwformat or DT_RIGHT; + blGlyphBottom: uformat := DT_VCENTER or wwformat or DT_CENTER; + blGlyphBottomAdjusted: uformat := DT_BOTTOM or wwformat or DT_CENTER; + end; + + tdrect := szrect; + + Canvas.Font.Assign(AFont); + + if not Enabled then + Canvas.Font.Color := clGray; + + if WordWrap then + begin + if Caption <> '' then + th := DrawText(Canvas.Handle,PChar(Caption),Length(Caption), szrect, uformat or DT_CALCRECT) + else + th := DrawTextW(Canvas.Handle,PWideChar(WideCaption),Length(WideCaption), szrect, uformat or DT_CALCRECT); + + case Layout of + blGlyphTopAdjusted: + begin + // do nothing + end; + blGlyphTop: + begin + tdrect.Top := ImgY + ImgH; + tdrect.Top := tdrect.Top + (tdrect.Bottom - tdrect.Top - th) div 2; + end; + blGlyphBottomAdjusted: + begin + tdrect.Top := tdrect.Bottom - th; + end; + else + begin + tdrect.Top := (tdrect.Bottom - tdrect.Top - th) div 2; + end; + end; + end; + + if Caption <> '' then + DrawText(Canvas.Handle,PChar(Caption),Length(Caption), tdrect, uformat) + else + DrawTextW(Canvas.Handle,PWideChar(WideCaption),Length(WideCaption), tdrect, uformat); + + if (Notes.Text <> '') then + begin + tdRect.Top := tdRect.Top + round(sizeRect.Height); + tdRect.Bottom := tdRect.Top + round(noteRect.Height); + Canvas.Font.Assign(NotesFont); + DrawText(Canvas.Handle,PChar(Notes.Text),Length(Notes.Text), tdrect, uformat); + end; + end + else + begin + if (Notes.Text <> '') then + begin + stringFormat.SetLineAlignment(StringAlignmentNear); + rectf.Y := rectf.Y + ((rectf.Height) - round(sizeRect.Height) - round(noteRect.Height)) / 2; + end; + + if (Caption <> '') then + graphics.DrawString(Caption, Length(Caption), font, rectf, stringFormat, solidBrush) + else + graphics.DrawString(WideCaption, Length(WideCaption), font, rectf, stringFormat, solidBrush); + + if (Notes.Text <> '') then + begin + rectf.Y := rectf.Y + round(sizeRect.Height); + nfont := TGPFont.Create(nfontFamily, NotesFont.Size , nfs, UnitPoint); + nsolidBrush := TGPSolidBrush.Create(ColorToARGB(NotesFont.Color)); + graphics.DrawString(Notes.Text, Length(Notes.Text), nfont, rectf, stringFormat, nsolidBrush); + nsolidBrush.Free; + nfont.Free; + end + end; + end; + end; + + stringformat.Free; + solidBrush.Free; + font.Free; + end; + + + fontFamily.Free; + nfontFamily.Free; + + if not AutoSize then + begin + if DropDownButton then + begin + if DropDownPos = dpRight then + w := w - 8 + else + h := h - 8; + end; + + if DrawPic and not OverlapText then + begin + if Assigned(Glyph) and not Glyph.Empty and (Glyph.Width > 1) and (Glyph.Height > 1) then + begin + if (ForcePicSize.CX > 0) and (ForcePicSize.CY > 0) then + begin + Glyph.Transparent := True; + if (Caption = '') and (WideCaption = '') then + begin + px := r.Left + Max(0, (w - ImgW) div 2); + py := r.Top + Max(0, (h - ImgH) div 2); + Canvas.StretchDraw(Rect(px, py, px + ForcePicSize.CX, py + ForcePicSize.CY), Glyph); + end + else + Canvas.StretchDraw(Rect(ImgX, ImgY, ImgX + ForcePicSize.CX, ImgY + ForcePicSize.CY), Glyph); + end + else + begin + if (Caption = '') and (WideCaption = '') then + Canvas.Draw(r.Left + Max(0, (w - ImgW) div 2), r.Top + Max(0, (h - ImgH) div 2), Glyph) + else + Canvas.Draw(ImgX, ImgY, Glyph); + end; + end + else + if Assigned(Picture) and not Picture.Empty then + begin + if (ForcePicSize.CX > 0) and (ForcePicSize.CY > 0) then + begin + if (Caption = '') and (WideCaption = '') then + begin + px := r.Left + Max(0, (w - ImgW) div 2); + py := r.Top + Max(0, (h - ImgH) div 2); + //Canvas.StretchDraw(Rect(px, py, px + ForcePicSize.CX, py + ForcePicSize.CY), Picture); + DrawStretchPicture(graphics, Canvas, Rect(px, py, px + ForcePicSize.CX, py + ForcePicSize.CY), Picture); + end + else + begin + //Canvas.StretchDraw(Rect(ImgX, ImgY, ImgX + ForcePicSize.CX, ImgY + ForcePicSize.CY), Picture); + DrawStretchPicture(graphics, Canvas, Rect(ImgX, ImgY, ImgX + ForcePicSize.CX, ImgY + ForcePicSize.CY), Picture); + end; + end + else + begin + if (Caption = '') and (WideCaption = '') then + begin + //Canvas.Draw(r.Left + Max(0, (w - ImgW) div 2), r.Top + Max(0, (h - ImgH) div 2), Picture) + DrawGDIPImage(graphics, Point(r.Left + Max(0, (w - ImgW) div 2), r.Top + Max(0, (h - ImgH) div 2)), Picture); + //DrawStretchPicture(graphics, Canvas, Rect(r.Left + Max(0, (w - ImgW) div 2), r.Top + Max(0, (h - ImgH) div 2), Picture.Width, Picture.Height), Picture); + end + else + //Canvas.Draw(ImgX, ImgY, Picture); + DrawGDIPImage(graphics, Point(ImgX, ImgY), Picture); + end; + end + else + if (ImageIndex <> -1) and Assigned(Images) then + begin + if (Caption = '') and (WideCaption = '') then + begin + //Images.Draw(Canvas, r.Left + Max(0, (w - Images.Width) div 2), r.Top + Max(0, (h - Images.Height) div 2), ImageIndex, EnabledImage) + DrawGDIPImageFromImageList(graphics, Point(r.Left + Max(0, (w - Images.Width) div 2), r.Top + Max(0, (h - Images.Height) div 2)), Images, ImageIndex, EnabledImage); + end + else + begin + //Images.Draw(Canvas, ImgX, ImgY, ImageIndex, EnabledImage); + DrawGDIPImageFromImageList(graphics, Point(ImgX, ImgY), Images, ImageIndex, EnabledImage) + end; + {end + else if Assigned(ToolImage) and not (ToolImage.Empty) and (ToolImage.Width > 1) then + begin + if Caption = '' then + Canvas.Draw(r.Left + Max(0, (w - ImgW) div 2), r.Top + Max(0, (h - ImgH) div 2), ToolImage) + else + Canvas.Draw(ImgX, ImgY, ToolImage); } + end; + end; + + Canvas.Brush.Style := bsClear; + + if DropDownButton then + begin + if DrawDwLine and DropDownSplit then + begin + Canvas.Pen.Color := ColorToRGB(PC); + if (DropDownPos = dpRight) then + begin + Canvas.MoveTo(DwR.Left, DwR.Top); + Canvas.LineTo(DwR.Left, DwR.Bottom); + end + else + begin + Canvas.MoveTo(DwR.Left, DwR.Top); + Canvas.LineTo(DwR.Right, DwR.Top); + end; + end; + + AP.X := DwR.Left + ((DwR.Right - DwR.Left - 5) div 2); + + if (DropDownPos = dpBottom) or ((Caption = '') and (WideCaption = '')) then + AP.Y := DwR.Top + ((DwR.Bottom - DwR.Top - 3) div 2) + 1 + else + AP.Y := yDropD - 8; + + if not Enabled then + DrawArrow(Canvas, AP, clGray, clWhite, DropDir) + else + DrawArrow(Canvas, AP, clBlack, clWhite, DropDir); + end; + end; + + graphics.Free; +end; + +//------------------------------------------------------------------------------ + +{TWinCtrl} + +procedure TWinCtrl.PaintCtrls(DC: HDC; First: TControl); +begin + PaintControls(DC, First); +end; + +//------------------------------------------------------------------------------ + +{ TAdvGlowButton } + + +//------------------------------------------------------------------------------ + + +procedure TAdvCustomGlowButton.CMMouseEnter(var Msg: TMessage); +begin + inherited; + + if Assigned(FOnMouseEnter) then + FOnMouseEnter(Self); + + if (csDesigning in ComponentState) then + Exit; + + if FMouseEnter then + Exit; + + FHot := true; + + if FLeftDown then + FDown := true; + + if not Assigned(FTimer) then + begin + FTimer := TTimer.Create(self); + FTimer.OnTimer := TimerProc; + FTimer.Interval := GlowSpeed; + FTimer.Enabled := true; + end; + + if not FDown and (GlowState <> gsPush) then + begin + FTimeInc := 20; + GlowState := gsHover; + end; + Invalidate; + + FMouseInControl := true; + FMouseEnter := true; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.CMMouseLeave(var Msg: TMessage); +begin + inherited; + + if Assigned(FOnMouseLeave) then + FOnMouseLeave(Self); + + if (csDesigning in ComponentState) then + Exit; + + if not FMouseEnter then + Exit; + + FMouseEnter := false; + FMouseInControl := false; + + FHot := false; + FInButton := false; + +// Repaint; + + // down process busy + if FDown and FMouseDown then + begin + FDown := False; + FTimeInc := -20; + GlowState := gsHover; + Invalidate; + FLeftDown := true; + end + else + //if not (Style = bsCheck) then + begin + FDown := false; + FStepHover := 100; + FTimeInc := -20; + GlowState := gsHover; + Invalidate; + end; + + if not Assigned(FTimer) then + begin + FTimer := TTimer.Create(self); + FTimer.OnTimer := TimerProc; + FTimer.Interval := GlowSpeed; + FTimer.Enabled := true; + end; + +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.CMTextChanged(var Message: TMessage); +begin + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.CNCommand(var Message: TWMCommand); +begin + if Message.NotifyCode = BN_CLICKED then + begin + Click; + end; +end; + +//------------------------------------------------------------------------------ + +constructor TAdvCustomGlowButton.Create(AOwner: TComponent); +begin + inherited; + FTimer := nil; + FImageIndex := -1; + DoubleBuffered := true; + FGroupIndex := 0; + FState := absUp; + FStyle := bsButton; + FTransparent := False; + FLayout := blGlyphLeft; + FDropDownButton := False; + FDropDownPosition := dpRight; + FDropDownDirection := ddDown; + FDropDownSplit := true; + FShowCaption := true; + FFocusType := ftBorder; + FShortCutHint := nil; + FShortCutHintPos := shpTop; + FShowDisabled := true; + FOverlappedText := false; + FSpacing := 2; + FWordWrap := true; + FFirstPaint := true; + FMarginVert := 1; + FMarginHorz := 1; + FRounded := true; + FInitRepeatPause := 400; + FRepeatPause := 100; + FRepeatClick := false; + + FIPicture := TGDIPPicture.Create; + FIPicture.OnChange := PictureChanged; + + FIDisabledPicture := TGDIPPicture.Create; + FIDisabledPicture.OnChange := PictureChanged; + FIHotPicture := TGDIPPicture.Create; + + ParentFont := true; + FAppearance := TGlowButtonAppearance.Create; + FAppearance.OnChange := OnAppearanceChanged; + FInternalImages := nil; + FAntiAlias := aaClearType; + FBorderStyle := bsSingle; + + FOfficeHint := TAdvHintInfo.Create; + + Width := 100; + Height := 41; + + FDefaultPicDrawing := True; + FDefaultCaptionDrawing := True; + FTrimming := StringTrimmingNone; + + FCommandID := -1; + + FButtonSizeState := bsLarge; + FMaxButtonSizeState := bsLarge; + FMinButtonSizeState := bsGlyph; + FOldLayout := Layout; + FOldDropDownPosition := DropDownPosition; + + FNotes := TStringList.Create; + FNotesFont := TFont.Create; + FNotesFont.Name := 'Tahoma'; + FNotesFont.Size := 8; +end; + + +procedure TAdvCustomGlowButton.CreateParams(var Params: TCreateParams); +begin + inherited; +// if FTransparent then +// Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT; +end; + +procedure TAdvCustomGlowButton.CreateWnd; +begin + inherited; + FActive := FDefault; + FParentForm := GetParentForm(Self); +end; + +//------------------------------------------------------------------------------ + +destructor TAdvCustomGlowButton.Destroy; +begin + if Assigned(FShortCutHint) then + FShortCutHint.Free; + FOfficeHint.Free; + FAppearance.Free; + FIPicture.Free; + FIDisabledPicture.Free; + FIHotPicture.Free; + FNotes.Free; + FNotesFont.Free; + inherited; +end; + +procedure TAdvCustomGlowButton.DoEnter; +begin + inherited; + Invalidate; + FHasFocus := true; +end; + +procedure TAdvCustomGlowButton.DoExit; +begin + inherited; + FDown := false; + FState := absUp; + FHasFocus := false; + Invalidate; +end; + +procedure TAdvCustomGlowButton.ShowShortCutHint; +var + pt: TPoint; + SCHintPos: TShortCutHintPos; + OffsetX: Integer; +begin + if not Assigned(FShortCutHint) then + begin + FShortCutHint := TShortCutHintWindow.Create(Self); + FShortCutHint.Parent := Self; + FShortCutHint.Visible := False; + FShortCutHint.Color := clWhite; + FShortCutHint.ColorTo := Appearance.Color; + end; + + FShortCutHint.Caption := FShortCutHintText; + + pt := ClientToScreen(Point(0,0)); + + OffsetX := 6; + SCHintPos := ShortCutHintPos; + + if Assigned(FOnGetShortCutHintPos) then + FOnGetShortCutHintPos(Self, ButtonSizeState, SCHintPos); + + if (SCHintPos = shpAuto) then + SCHintPos := shpTop; + + case SCHintPos of + shpLeft: + begin + //FShortCutHint.Left := pt.X - (FShortCutHint.Width div 2); + FShortCutHint.Left := pt.X + OffsetX; + FShortCutHint.Top := pt.Y + (self.Height - FShortCutHint.Height) div 2; + end; + shpTop: + begin + FShortCutHint.Left := pt.X + (self.Width - FShortCutHint.Width) div 2; + FShortCutHint.Top := pt.Y - (FShortCutHint.Height div 2); + end; + shpRight: + begin + FShortCutHint.Left := pt.X + self.Width - (FShortCutHint.Width div 2); + FShortCutHint.Top := pt.Y + (self.Height - FShortCutHint.Height) div 2; + end; + shpBottom: + begin + FShortCutHint.Left := pt.X + (self.Width - FShortCutHint.Width) div 2; + FShortCutHint.Top := pt.Y + self.Height - (FShortCutHint.Height div 2); + end; + shpCenter: + begin + FShortCutHint.Left := pt.X + (self.Width - FShortCutHint.Width) div 2; + FShortCutHint.Top := pt.Y + (self.Height - FShortCutHint.Height) div 2; + end; + shpTopLeft: + begin + FShortCutHint.Left := pt.X + OffsetX; + FShortCutHint.Top := pt.Y - (FShortCutHint.Height div 2); + end; + shpTopRight: + begin + FShortCutHint.Left := pt.X + self.Width - FShortCutHint.Width + 1; + FShortCutHint.Top := pt.Y - (FShortCutHint.Height div 2); + end; + shpAboveTop: + begin + FShortCutHint.Left := pt.X + (self.Width - FShortCutHint.Width) div 2; + FShortCutHint.Top := pt.Y - FShortCutHint.Height; + end; + shpAboveTopLeft: + begin + FShortCutHint.Left := pt.X + OffsetX; + FShortCutHint.Top := pt.Y - FShortCutHint.Height; + end; + shpAboveTopRight: + begin + FShortCutHint.Left := pt.X + self.Width - FShortCutHint.Width + 1; + FShortCutHint.Top := pt.Y - FShortCutHint.Height; + end; + shpBottomLeft: + begin + FShortCutHint.Left := pt.X + OffsetX; + FShortCutHint.Top := pt.Y + self.Height - (FShortCutHint.Height div 2); + end; + shpBottomRight: + begin + FShortCutHint.Left := pt.X + self.Width - FShortCutHint.Width + 1; + FShortCutHint.Top := pt.Y + self.Height - (FShortCutHint.Height div 2); + end; + shpBelowBottom: + begin + FShortCutHint.Left := pt.X + (self.Width - FShortCutHint.Width) div 2; + FShortCutHint.Top := pt.Y + self.Height; + end; + shpBelowBottomLeft: + begin + FShortCutHint.Left := pt.X + OffsetX; + FShortCutHint.Top := pt.Y + self.Height + end; + shpBelowBottomRight: + begin + FShortCutHint.Left := pt.X + self.Width - FShortCutHint.Width + 1; + FShortCutHint.Top := pt.Y + self.Height + end; + shpBelowBottomCenter: + begin + FShortCutHint.Left := pt.X + (self.Width - FShortCutHint.Width) div 2; + FShortCutHint.Top := pt.Y + self.Height + end; + end; + + FShortCutHint.Visible := true; +end; + +procedure TAdvCustomGlowButton.HideShortCutHint; +begin + if Assigned(FShortCutHint) then + begin + FShortCutHint.Visible := false; + //FShortCutHint.Free; + //FShortCutHint := nil; + end; +end; + +function TAdvCustomGlowButton.GetVersion: string; +var + vn: Integer; +begin + vn := GetVersionNr; + Result := IntToStr(Hi(Hiword(vn))) + '.' + IntToStr(Lo(Hiword(vn))) + + '.' + IntToStr(Hi(Loword(vn))) + '.' + IntToStr(Lo(Loword(vn))); +end; + +function TAdvCustomGlowButton.GetVersionNr: Integer; +begin + Result := MakeLong(MakeWord(BLD_VER, REL_VER), MakeWord(MIN_VER, MAJ_VER)); +end; + +procedure TAdvCustomGlowButton.KeyDown(var Key: Word; Shift: TShiftState); +begin + inherited; + if (Key in [VK_SPACE, VK_RETURN]) then + begin + FDown := True; + FState := absDown; + Repaint; + end; + + if (Key = VK_F4) then + DoDropDown; + + if Assigned(FOnInternalKeyDown) then + FOnInternalKeyDown(Self, Key, Shift); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.WMGetDlgCode(var Message: TMessage); +begin + if Assigned(FOnInternalKeyDown) then + Message.Result := DLGC_WANTARROWS + else + inherited; +end; + + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.KeyPress(var Key: Char); +var + Form: TCustomForm; +begin + inherited; + + if (Key = #32) or (Key = #13) then + begin + Form := GetParentForm(Self); + if Form <> nil then + Form.ModalResult := ModalResult; + + if Assigned(OnClick) then + OnClick(Self); + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.KeyUp(var Key: Word; Shift: TShiftState); +begin + inherited; + FDown := False; + FState := absUp; + Repaint; +end; + +//------------------------------------------------------------------------------ + +{$IFDEF DELPHI6_LVL} +function TAdvCustomGlowButton.ActionHasImages: boolean; +begin + Result := false; + + {$IFDEF DELPHI2006_LVL} + if not self.StaticActionImageIndex then + Result := true + else + {$ENDIF} + if Assigned(Action) then + begin + if (Action.Owner is TActionList) then + Result := Assigned((Action.Owner as TActionList).Images); + end; +end; +{$ENDIF} + +procedure TAdvCustomGlowButton.Assign(Source: TPersistent); +begin + if (Source is TAdvCustomGlowButton) then + begin + Align := (Source as TAdvCustomGlowButton).Align; + Action := (Source as TAdvCustomGlowButton).Action; + Anchors := (Source as TAdvCustomGlowButton).Anchors; + AntiAlias := (Source as TAdvCustomGlowButton).AntiAlias; + AutoSize := (Source as TAdvCustomGlowButton).AutoSize; + BorderStyle := (Source as TAdvCustomGlowButton).BorderStyle; + Cancel := (Source as TAdvCustomGlowButton).Cancel; + Caption := (Source as TAdvCustomGlowButton).Caption; + Constraints := (Source as TAdvCustomGlowButton).Constraints; + Default := (Source as TAdvCustomGlowButton).Default; + Font.Assign((Source as TAdvCustomGlowButton).Font); + ImageIndex := (Source as TAdvCustomGlowButton).ImageIndex; + Images.Assign((Source as TAdvCustomGlowButton).Images); + DisabledImages.Assign((Source as TAdvCustomGlowButton).DisabledImages); + DisabledPicture.Assign((Source as TAdvCustomGlowButton).DisabledPicture); + DragMode := (Source as TAdvCustomGlowButton).DragMode; + DragKind := (Source as TAdvCustomGlowButton).DragKind; + FocusType := (Source as TAdvCustomGlowButton).FocusType; + HotImages.Assign((Source as TAdvCustomGlowButton).HotImages); + HotPicture.Assign((Source as TAdvCustomGlowButton).HotPicture); + MarginVert := (Source as TAdvCustomGlowButton).MarginVert; + MarginHorz := (Source as TAdvCustomGlowButton).MarginHorz; + ModalResult := (Source as TAdvCustomGlowButton).ModalResult; + Notes.Assign((Source as TAdvCustomGlowButton).Notes); + NotesFont.Assign((Source as TAdvCustomGlowButton).NotesFont); + OfficeHint.Assign((Source as TAdvCustomGlowButton).OfficeHint); + ParentFont := (Source as TAdvCustomGlowButton).ParentFont;; + Picture.Assign((Source as TAdvCustomGlowButton).Picture); + PopupMenu := (Source as TAdvCustomGlowButton).PopupMenu; + Position := (Source as TAdvCustomGlowButton).Position; + InitRepeatPause := (Source as TAdvCustomGlowButton).InitRepeatPause; + RepeatPause := (Source as TAdvCustomGlowButton).RepeatPause; + RepeatClick := (Source as TAdvCustomGlowButton).RepeatClick; + Rounded := (Source as TAdvCustomGlowButton).Rounded; + ShortCutHint := (Source as TAdvCustomGlowButton).ShortCutHint; + ShortCutHintPos := (Source as TAdvCustomGlowButton).ShortCutHintPos; + ShowCaption := (Source as TAdvCustomGlowButton).ShowCaption; + ShowDisabled := (Source as TAdvCustomGlowButton).ShowDisabled; + Spacing := (Source as TAdvCustomGlowButton).Spacing; + Transparent := (Source as TAdvCustomGlowButton).Transparent; + Trimming := (Source as TAdvCustomGlowButton).Trimming; + Version := (Source as TAdvCustomGlowButton).Version; + WordWrap := (Source as TAdvCustomGlowButton).WordWrap; + ShowHint := (Source as TAdvCustomGlowButton).ShowHint; + ParentShowHint := (Source as TAdvCustomGlowButton).ParentShowHint; + TabOrder := (Source as TAdvCustomGlowButton).TabOrder; + TabStop := (Source as TAdvCustomGlowButton).TabStop; + Visible := (Source as TAdvCustomGlowButton).Visible; + end; + +end; + +procedure TAdvCustomGlowButton.Click; +var + Form: TCustomForm; +begin + Form := GetParentForm(Self); + if Form <> nil then + Form.ModalResult := ModalResult; + + if Assigned(FOnInternalClick) then + FOnInternalClick(Self); + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.Loaded; +begin + inherited; + if (Down <> FInitialDown) then + Down := FInitialDown; + FIsVista := IsVista; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.DoDropDown; +var + pt: TPoint; +begin + if IsMenuButton or Assigned(FDropDownMenu) then + begin + {State := absDropDown; + Invalidate; + CheckMenuDropdown; } + + if Assigned(FDropDownMenu) then + begin + //FDown := false; + //FHot := false; + FState := absDown; + PopupBtnDown; + Invalidate; + + if DropDownDirection = ddDown then + pt := Point(Left, Top + Height) + else + pt := Point(Left + Width, Top); + + pt := Parent.ClientToScreen(pt); + FDropDownMenu.Popup(pt.X,pt.Y); + + FState := absUp; + Repaint; + end; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGlowButton.IsFontStored: Boolean; +begin + Result := not ParentFont; +end; + +function TAdvCustomGlowButton.IsMenuButton: Boolean; +begin + Result := False; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.TimerExpired(Sender: TObject); +begin + FRepeatTimer.Interval := RepeatPause; + if (FDown) and MouseCapture then + begin + try + Click; + except + FRepeatTimer.Enabled := False; + raise; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.MouseUp(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + inherited MouseUp(Button, Shift, X, Y); + if FRepeatTimer <> nil then + FRepeatTimer.Enabled := False; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.MouseDown(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +var + pt:TPoint; + InBottomDrop,InRightDrop: boolean; + InSepBtn: boolean; + +begin + inherited; + + if Button <> mbLeft then + Exit; + + if FRepeatClick then + begin + if FRepeatTimer = nil then + FRepeatTimer := TTimer.Create(Self); + + FRepeatTimer.OnTimer := TimerExpired; + FRepeatTimer.Interval := InitRepeatPause; + FRepeatTimer.Enabled := True; + end; + + + FDown := true; + FMouseDown := true; + + if TabStop then + SetFocus; + + if not Assigned(FTimer) then + begin + FTimer := TTimer.Create(self); + FTimer.OnTimer := TimerProc; + FTimer.Interval := GlowSpeed; + FTimer.Enabled := true; + end; + + //FStepPush := 0; + FTimeInc := +20; + GlowState := gsPush; + + if not DropDownButton and IsMenuButton and false then + begin + Invalidate; + DoDropDown; + end; + + InBottomDrop := (DropDownPosition = dpRight) and (X > (Width - DropDownSectWidth)); + InRightDrop := (DropDownPosition = dpBottom) and (Y > (Height - DropDownSectWidth)); + + InSepBtn := (InBottomDrop or InRightDrop); + + if (not FDropDownButton and IsMenuButton) or + (FDropDownButton and InSepBtn and DropDownSplit) or + (FDropDownButton and not DropDownSplit and (not ((Style = bsCheck) or (GroupIndex > 0)))) + then + begin + // FState := absUp; + FMouseInControl := False; + // FMouseDownInControl := False; + PopupBtnDown; + + if Assigned(FDropDownMenu) then + begin + FDown := false; + FHot := false; + SetDroppedDown(True); + FMouseEnter := true; + //FMenuSel := true; + Repaint; + + if DropDownDirection = ddDown then + pt := Point(Left, Top + Height) + else + pt := Point(Left + Width, Top); + + pt := Parent.ClientToScreen(pt); + //if Assigned(AdvToolBar) then + //FDropDownMenu.MenuStyler := AdvToolBar.FCurrentToolBarStyler.CurrentAdvMenuStyler; + FDropDownMenu.Popup(pt.X,pt.Y); + SetDroppedDown(False); + //FMenuSel := false; + + GetCursorPos(pt); + pt := ScreenToClient(pt); + if not PtInRect(ClientRect, pt) then + begin + FMouseEnter := false; + FMouseInControl := false; + FHot := false; + FInButton := false; + end; + Repaint; + end; + + Invalidate; + end + else + begin + if (Style = bsCheck) then + begin + SetDown(not FDownChecked); + end; + + if not FDownChecked then + begin + FState := absDown; + Invalidate; + end; + + if (Style = bsCheck) then + begin + FState := absDown; + Repaint; + end; + + FDragging := True; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.InternalClick; +begin + if (not FDropDownButton and IsMenuButton) or (FDropDownButton and not ((Style = bsCheck) or (GroupIndex > 0)) and + (not DropDownSplit)) then + begin + if Assigned(FDropDownMenu) then + begin + //PostMessage(Handle, WM_LBUTTONDOWN,0,0); + //PostMessage(Handle, WM_LBUTTONUP,0,0); + DoDropDown; + end + else + Click; + end + else + begin + if Style = bsCheck then + begin + SetDown(not FDownChecked); + end; + + if not FDownChecked then + begin + FState := absDown; + Invalidate; + end; + + if (Style = bsCheck) then + begin + FState := absDown; + Repaint; + end; + + Click; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.WMLDblClk(var Msg: TWMLButtonDblClk); +begin + inherited; +end; + +procedure TAdvCustomGlowButton.WMPaint(var Msg: TWMPaint); +var + DC, MemDC: HDC; + MemBitmap, OldBitmap: HBITMAP; + PS: TPaintStruct; +begin + if not FDoubleBuffered or (Msg.DC <> 0) then + begin + if not (csCustomPaint in ControlState) and (ControlCount = 0) then + inherited + else + PaintHandler(Msg); + end + else + begin + DC := GetDC(0); + MemBitmap := CreateCompatibleBitmap(DC, ClientRect.Right, ClientRect.Bottom); + ReleaseDC(0, DC); + MemDC := CreateCompatibleDC(0); + OldBitmap := SelectObject(MemDC, MemBitmap); + try + DC := BeginPaint(Handle, PS); + Perform(WM_ERASEBKGND, MemDC, MemDC); + Msg.DC := MemDC; + WMPaint(Msg); + Msg.DC := 0; + BitBlt(DC, 0, 0, ClientRect.Right, ClientRect.Bottom, MemDC, 0, 0, SRCCOPY); + EndPaint(Handle, PS); + finally + SelectObject(MemDC, OldBitmap); + DeleteDC(MemDC); + DeleteObject(MemBitmap); + end; + end; +end; + +(* +begin + {$IFDEF VER185} + if TForm(FParentForm).FormStyle = fsMDIChild then + begin + DoubleBuffered := (Application.MainForm.ActiveMDIChild = FParentForm); + end + else + DoubleBuffered := (FParentForm.Handle = GetActiveWindow); + {$ENDIF} + inherited; +*) + +//------------------------------------------------------------------------------ +procedure TAdvCustomGlowButton.WMLButtonDown(var Msg:TWMLButtonDown); +begin + FGotButtonClick := true; + inherited; +end; + +//------------------------------------------------------------------------------ +procedure TAdvCustomGlowButton.WMLButtonUp(var Msg:TWMLButtonDown); +var + DoClick: Boolean; + inht: boolean; + +begin + FTimeInc := -20; + inht := false; + GlowState := gsPush; + + FMouseDown := false; + FLeftDown := false; + + if not Assigned(FTimer) then + begin + FTimer := TTimer.Create(self); + FTimer.OnTimer := TimerProc; + FTimer.Interval := GlowSpeed; + FTimer.Enabled := true; + end; + + if not DropDownButton and IsMenuButton then + begin + // do nothing + end + else + if FDragging then + begin + FDragging := False; + + DoClick := (Msg.XPos >= 0) and (Msg.XPos < ClientWidth) and (Msg.YPos >= 0) and (Msg.YPos <= ClientHeight); + + if (FGroupIndex = 0) then + begin + // Redraw face in-case mouse is captured + FState := absUp; + FMouseInControl := False; + //FHot := false; + + if (Style = bsCheck) then + begin + if Assigned(Action) then + begin + inherited; + inht := true; + if (FCheckLinked or FGroupIndexLinked) then + Exit; + {$IFDEF DELPHI7_LVL} + if (Action is TAction) then + if (Action as TAction).AutoCheck then + Exit; + {$ENDIF} + end; + + // ***** extension for toolbar compactbutton handling + if not DoClick and Self.Down then + begin + Self.Down := not Self.Down; + end; + + if (Style <> bsCheck) then + begin + SetDown(not FDownChecked); + end; + + //FState := absUp; + Repaint; + end; + if DoClick and not (FState in [absExclusive, absDown]) then + Invalidate; + end + else + begin + if Assigned(Action) then + if FCheckLinked or FGroupIndexLinked then + begin + inherited; + Exit; + end; + + if DoClick then + begin + SetDown(not FDownChecked); + if FDownChecked then + Repaint; + end + else + begin + if FDownChecked then + FState := absExclusive; + Repaint; + end; + + end; + + //if DoClick then + // Click; + + UpdateTracking; + end; + + if FGotButtonClick then + ControlState := ControlState + [csClicked] + else + if Assigned(OnClick) then + OnClick(Self); + + FGotButtonClick := false; + + if not inht then + inherited; + + if (Style = bsCheck) or (GroupIndex > 0) then + begin + //FState := absUp; + Repaint; + //FHot := true; + //FMouseInControl := true; + end; + + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + if (AOperation = opRemove) and (AComponent = FImages) then + FImages := nil; + + if (AOperation = opRemove) and (AComponent = FDisabledImages) then + FDisabledImages := nil; + + if (AOperation = opRemove) and (AComponent = FHotImages) then + begin + FHotImages := nil; + end; + + if (AOperation = opRemove) and (AComponent = DropdownMenu) then + DropdownMenu := nil; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.DrawGlyphCaption; +begin + +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.GetToolImage(bmp: TBitmap); +begin + +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDroppedDown(Value: Boolean); +begin + FDroppedDown := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.Paint; +var + GradColor: TColor; + GradColorTo: TColor; + GradColorMirror: TColor; + GradColorMirrorTo: TColor; + PenColor: TColor; + GradB, GradU: TGDIPGradient; + DrawDwLn: Boolean; + ImgList: TImageList; + Pic: TGDIPPicture; + EnabledImg: Boolean; + Rgn1, Rgn2: HRGN; + R: TRect; + i, w, h: Integer; + p: TPoint; + DCaption: string; + DWideCaption: widestring; + BD: TButtonDisplay; + DrawFocused, DrawFocusedHot: boolean; + bmp: TBitmap; + sz: TSize; + gs: TGlowButtonState; + PicSize: TSize; + AFont: TFont; + +begin + if FPainting then + Exit; + + + FPainting := True; + try + + if FTransparent and not FMouseEnter then + begin + // TRANSPARENCY CODE + + R := ClientRect; + rgn1 := CreateRectRgn(R.Left, R.Top, R.Right, R.Bottom); + SelectClipRgn(Canvas.Handle, rgn1); + + i := SaveDC(Canvas.Handle); + p := ClientOrigin; + Windows.ScreenToClient(Parent.Handle, p); + p.x := -p.x; + p.y := -p.y; + MoveWindowOrg(Canvas.Handle, p.x, p.y); + + SendMessage(Parent.Handle, WM_ERASEBKGND, Canvas.Handle, 0); + // transparency ? + SendMessage(Parent.Handle, WM_PAINT, Canvas.Handle, 0); + + if (Parent is TWinCtrl) then + (Parent as TWinCtrl).PaintCtrls(Canvas.Handle, nil); + + RestoreDC(Canvas.Handle, i); + + SelectClipRgn(Canvas.Handle, 0); + DeleteObject(rgn1); + end; + + if not Enabled then + begin + FState := absDisabled; + FDragging := False; + end + else + begin + if (FState = absDisabled) then + if FDownChecked and (GroupIndex <> 0) then + FState := absExclusive + else + FState := absUp; + end; + + + if (Style = bsCheck) and (Down) then + begin + FState := absDown; + end; + + with Appearance do + begin + DrawDwLn := False; + if ((State = absDisabled) or not Enabled) and FShowDisabled then + begin + if (1>0) {Transparent} then + begin + GradColor := FColorDisabled; + GradColorTo := FColorDisabledTo; + GradColorMirror := FColorMirrorDisabled; + GradColorMirrorTo := FColorMirrorDisabledTo; + PenColor := BorderColorDisabled; + GradU := GradientDisabled; + GradB := GradientMirrorDisabled; + end + else + begin + end; + end + else if ((State = absDown) {or (FHot and (State = absExclusive))}{ or FDown}) and not ((Style = bsCheck) and (State = absDown)) then + begin + GradColor := FColorDown; + GradColorTo := FColorDownTo; + GradColorMirror := FColorMirrorDown; + GradColorMirrorTo := FColorMirrorDownTo; + PenColor := BorderColorDown; + GradU := GradientDown; + GradB := GradientMirrorDown; + DrawDwLn := True; + end + else + if (State = absExclusive) or ((Style = bsCheck) and (State = absDown)) then + begin + GradColor := FColorChecked; + GradColorTo := FColorCheckedTo; + GradColorMirror := FColorMirrorChecked; + GradColorMirrorTo := FColorMirrorCheckedTo; + PenColor := BorderColorChecked; + GradU := GradientChecked; + GradB := GradientMirrorChecked; + + if Assigned(FTimer) and not (not FMouseInControl and ((Style = bsCheck) or ((GroupIndex > 0) and (State <> absDown)))) then + begin + GradColor := BlendColor(FColorChecked, FColorDown, FStepPush); + GradColorTo := BlendColor(FColorCheckedTo, FColorDownTo, FStepPush); + GradColorMirror := BlendColor(FColorMirrorChecked, FColorMirrorDown, FStepPush); + GradColorMirrorTo := BlendColor(FColorMirrorCheckedTo, FColorMirrorDownTo, FStepPush); + //PenColor := BlendColor(BorderColorChecked, BorderColorDown, FStepPush); + end; + + end + else //if State = absUp then + begin + if FHot then + begin + GradColor := FColorHot; + GradColorTo := FColorHotTo; + GradColorMirror := FColorMirrorHot; + GradColorMirrorTo := FColorMirrorHotTo; + PenColor := BorderColorHot; + GradU := GradientHot; + GradB := GradientMirrorHot; + DrawDwLn := True; + end + else // Normal draw + begin + if (1>0) {Transparent} then + begin + GradColor := FColor; + GradColorTo := FColorTo; + GradColorMirror := FColorMirror; + GradColorMirrorTo := FColorMirrorTo; + PenColor := BorderColor; + GradU := Gradient; + GradB := GradientMirror; + end + else + begin + end; + end; + end; + + { if FHot then + begin + GradColor := FColorHot; + GradColorTo := FColorHotTo; + GradColorMirror := FColorMirrorHot; + GradColorMirrorTo := FColorMirrorHotTo; + PenColor := BorderColorHot; + GradU := GradientHot; + GradB := GradientMirrorHot; + end + else + begin + GradColor := FColor; + GradColorTo := FColorTo; + GradColorMirror := FColorMirror; + GradColorMirrorTo := FColorMirrorTo; + PenColor := BorderColor; + GradU := Gradient; + GradB := GradientMirror; + end; + + if FDown then + begin + PenColor := BorderColorDown; + GradU := GradientDown; + GradB := GradientMirrorDown; + end; + } + + if Assigned(FTimer) then + begin + if not FDown and not Transparent and not ((State = absExclusive) or ((Style = bsCheck) and (State = absDown))) then + begin + GradColor := BlendColor(FColorHot, FColor, FStepHover); + GradColorTo := BlendColor(FColorHotTo, FColorTo, FStepHover); + GradColorMirror := BlendColor(FColorMirrorHot, FColorMirror, FStepHover); + GradColorMirrorTo := BlendColor(FColorMirrorHotTo, FColorMirrorTo, FStepHover); + PenColor := BlendColor(BorderColorHot, BorderColor, FStepHover); + end + else + begin + if (Style = bsCheck) then + begin + if FDown then + begin + GradColor := BlendColor(FColorDown, FColorChecked, FStepPush); + GradColorTo := BlendColor(FColorDownTo, FColorCheckedTo, FStepPush); + GradColorMirror := BlendColor(FColorMirrorDown, FColorMirrorChecked, FStepPush); + GradColorMirrorTo := BlendColor(FColorMirrorDownTo, FColorMirrorCheckedTo, FStepPush); +// PenColor := BlendColor(BorderColorDown, BorderColorChecked, FStepPush); + end + end + else + if FDown and (State <> absExclusive) then + begin + + GradColor := BlendColor(FColorDown, FColorHot, FStepPush); + GradColorTo := BlendColor(FColorDownTo, FColorHotTo, FStepPush); + GradColorMirror := BlendColor(FColorMirrorDown, FColorMirrorHot, FStepPush); + GradColorMirrorTo := BlendColor(FColorMirrorDownTo, FColorMirrorHotTo, FStepPush); + PenColor := BlendColor(BorderColorDown, BorderColorHot, FStepPush); + end; + + end; + end; + + if Enabled or (DisabledImages = nil) then + begin + if FHot and (HotImages <> nil) then + ImgList := HotImages + else + ImgList := Images; + + EnabledImg := Enabled; + end + else + begin + ImgList := DisabledImages; + EnabledImg := True; + end; + + if Enabled or DisabledPicture.Empty then + begin + if FHot and not HotPicture.Empty then + Pic := HotPicture + else + Pic := Picture; + end + else + Pic := DisabledPicture; + + + if (ImgList = nil) then + begin + ImgList := FInternalImages; + EnabledImg := True; + end; + + if ShowCaption then + begin + DCaption := Caption; + DWideCaption := WideCaption; + end + else + begin + DCaption := ''; + DWideCaption := ''; + end; + + if (FMouseInControl or FMouseDown) and DropDownButton then + begin + if FInButton then + BD := bdDropDown + else + BD := bdButton; + end + else + BD := bdNone; + + // do not use special border color for non standalone buttons in mouse hover/down state or checked buttons + if ((Position <> bpStandalone) and FMouseDown) {or ((Style = bsCheck) and (FState = absDown))} then + begin + PenColor := BorderColor; + end; + + if ((State = absDisabled) or not Enabled) and FShowDisabled then + begin + GradColor := FColorDisabled; + GradColorTo := FColorDisabledTo; + GradColorMirror := FColorMirrorDisabled; + GradColorMirrorTo := FColorMirrorDisabledTo; + PenColor := BorderColorDisabled; + GradU := GradientDisabled; + GradB := GradientMirrorDisabled; + end; + + if (FHasFocus and (FocusType in [ftHot, ftHotBorder])) and not FDown then + begin + GradColor := FColorHot; + GradColorTo := FColorHotTo; + GradColorMirror := FColorMirrorHot; + GradColorMirrorTo := FColorMirrorHotTo; + PenColor := BorderColorHot; + GradU := GradientHot; + GradB := GradientMirrorHot; + DrawDwLn := True; + end; + + DrawFocused := (FHasFocus) and (FocusType in [ftBorder, ftHotBorder]); + DrawFocusedHot := (FHasFocus) and (FocusType in [ftHot, ftHotBorder]); + + AFont := TFont.Create; + AFont.Assign(Font); + + if (not ParentFont) and Appearance.SystemFont then + begin + if IsVista then + AFont.Name := 'Segoe UI' + else + AFont.Name := 'Tahoma'; + end; + + bmp := TBitmap.Create; + bmp.Width := 1; + bmp.Height := 1; + + GetToolImage(bmp); + + if Assigned(Action) then + begin + begin + if ((Action as TCustomAction).ImageIndex >= 0) {and (ImageIndex = (Action as TCustomAction).ImageIndex)} then + if Assigned((Action as TCustomAction).ActionList) then + if Assigned(TImageList((Action as TCustomAction).ActionList.Images)) then + begin + ImgList := TImageList((Action as TCustomAction).ActionList.Images); + EnabledImg := Enabled; + FImageIndex := (Action as TCustomAction).ImageIndex; + end; + end; + end; + + PicSize.cx := 0; // no stretch pic + PicSize.cy := 0; + if AutoSize then + begin + if (ButtonSizeState in [bsLabel, bsGlyph]) then + begin + PicSize.cx := 16; + PicSize.cy := 16; + + {if (bmp.Width = 1) then + begin + bmp.Height := Pic.Height; + bmp.Width := Pic.Width; + bmp.Canvas.Draw(0, 0, Pic); + Pic := nil; + end;} + + if Assigned(ImgList) and (ImageIndex >= 0) then + begin + Pic := nil; + end; + end; + + if (ButtonSizeState = bsGlyph) then + begin + DCaption := ''; + DWideCaption := ''; + end; + end; + + if DoAutoSize or (FFirstPaint and AutoSize) then + begin + + sz := DrawVistaButton(Canvas,ClientRect,GradColor, GradColorTo, GradColorMirror, GradColorMirrorTo, + PenColor, GradU, GradB, DCaption, DWideCaption, FDefaultCaptionDrawing, AFont, ImgList, ImageIndex, EnabledImg, Layout, FDropDownButton {and (Style <> bsCheck)}, + DrawDwLn, Enabled, DrawFocused, DropDownPosition, Pic, PicSize, AntiAlias, FDefaultPicDrawing, bmp, BD, Transparent and not (FMouseEnter or DrawFocusedHot or (State = absDown)), FMouseEnter, Position, DropDownSplit, CanDrawBorder, + FOverlappedText, FWordWrap, True, FRounded, FDropDownDirection = ddDown, FSpacing, FTrimming, FNotes, FNotesFont, FDownChecked); + + if AutoSize then + begin + W := sz.cx + Spacing * 3 + 2 + 2 * MarginHorz; + H := sz.cy + Spacing * 2 + 2 * MarginVert; + + if DropDownButton then + begin + if (DropDownPosition = dpBottom) then + H := H + DropDownSectWidth + else + W := W + DropDownSectWidth; + end; + + if Assigned(FOnSetButtonSize) then + FOnSetButtonSize(Self, w, h); + + if (W <> Width) then + Width := W; + if (H <> Height) then + Height := H; + end; + + FFirstPaint := false; + end; + + // transparent border pixels + + sz := DrawVistaButton(Canvas,ClientRect,GradColor, GradColorTo, GradColorMirror, GradColorMirrorTo, + PenColor, GradU, GradB, DCaption, DWideCaption, FDefaultCaptionDrawing, AFont, ImgList, ImageIndex, EnabledImg, Layout, FDropDownButton {and (Style <> bsCheck)}, + DrawDwLn, Enabled, DrawFocused, DropDownPosition, Pic, PicSize, AntiAlias, FDefaultPicDrawing, bmp, BD, Transparent and not (FMouseEnter or DrawFocusedHot or (State = absDown)), FMouseEnter, Position, DropDownSplit, CanDrawBorder, FOverlappedText, FWordWrap, + False, FRounded, FDropDownDirection = ddDown, FSpacing, FTrimming, FNotes, FNotesFont, FDownChecked); + + DrawGlyphCaption; + + gs := gsNormal; + + if FMouseEnter then + gs := gsHot; + + if State = absDown then + gs := gsDown; + + if Assigned(OnDrawButton) then + OnDrawButton(Self, Canvas, ClientRect, gs); + + AFont.Free; + bmp.Free; + + if not Assigned(Parent) then + Exit; + + if not FTransparent or FMouseEnter or (State = absDown) or (FHot) then + begin + R := ClientRect; + + if Position <> bpMiddle then + begin + if (Position in [bpStandalone, bpLeft]) then + begin + rgn1 := CreateRectRgn(0, 0, 1, 1); + end + else + begin + rgn1 := CreateRectRgn(R.Right - 1, 0, R.Right, 1); + end; + + if (Position in [bpStandalone]) then + begin + rgn2 := CreateRectRgn(R.Right - 1, 0, R.Right, 1); + CombineRgn(rgn1, rgn1, rgn2, RGN_OR); + DeleteObject(rgn2); + end; + + if (Position in [bpStandalone, bpLeft]) then + begin + rgn2 := CreateRectRgn(0, R.Bottom - 1, 1, R.Bottom); + CombineRgn(rgn1, rgn1, rgn2, RGN_OR); + DeleteObject(rgn2); + end; + + if (Position in [bpStandalone, bpRight]) then + begin + rgn2 := CreateRectRgn(R.Right - 1, R.Bottom - 1, R.Right, R.Bottom); + CombineRgn(rgn1, rgn1, rgn2, RGN_OR); + DeleteObject(rgn2); + end; + + SelectClipRgn(Canvas.Handle, rgn1); + + i := SaveDC(Canvas.Handle); + p := ClientOrigin; + Windows.ScreenToClient(Parent.Handle, p); + p.x := -p.x; + p.y := -p.y; + MoveWindowOrg(Canvas.Handle, p.x, p.y); + + SendMessage(Parent.Handle, WM_ERASEBKGND, Canvas.Handle, 0); + + // transparency ? + SendMessage(Parent.Handle, WM_PAINT, Canvas.Handle, 0); + if (Parent is TWinCtrl) then + (Parent as TWinCtrl).PaintCtrls(Canvas.Handle, nil); + RestoreDC(Canvas.Handle, i); + + SelectClipRgn(Canvas.Handle, 0); + DeleteObject(rgn1); + end; + end; + end; + + finally + FPainting := False; + end; +end; + +procedure TAdvCustomGlowButton.PictureChanged(Sender: TObject); +begin + PerformResize; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDown(Value: Boolean); +begin + + if (csLoading in ComponentState) then + FInitialDown := Value; + + if (FGroupIndex = 0) and (Style = bsButton) then + Value := False; + + if (Style = bsCheck) then + begin + FDownChecked := Value; + if FDownChecked then + FState := absDown + else + FState := absUp; + Repaint; + Exit; + end; + + if (Value <> FDownChecked) then + begin + if FDownChecked and (not FAllowAllUp) then + Exit; + + FDownChecked := Value; + if Value then + begin + if FState = absUp then Invalidate; + FState := absExclusive + end + else + begin + FState := absUp; + Repaint; + end; + + if Value and not FCheckLinked then UpdateExclusive; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetGroupIndex(const Value: Integer); +begin + if FGroupIndex <> Value then + begin + FGroupIndex := Value; + UpdateExclusive; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetImageIndex(const Value: TImageIndex); +begin + FImageIndex := Value; + PerformResize; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetImages(const Value: TImageList); +begin + FImages := Value; + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDefault(const Value: boolean); +begin + FDefault := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDisabledImages(const Value: TImageList); +begin + FDisabledImages := Value; + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetSpacing(const Value: Integer); +begin + if FSpacing <> Value then + begin + FSpacing := value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + + +procedure TAdvCustomGlowButton.SetWideCaption(const Value: widestring); +begin + if (FWideCaption <> Value) then + begin + FWideCaption := Value; + + if AutoSize then + begin + DoAutoSize := true; + Repaint; + DoAutoSize := false; + end + else + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetWordWrap(const Value: Boolean); +begin + if FWordWrap <> Value then + begin + FWordWrap := Value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.PerformResize; +begin + if AutoSize then + begin + DoAutoSize := true; + Repaint; + DoAutoSize := false; + end + else + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetRounded(const Value: Boolean); +begin + if (FRounded <> Value) then + begin + FRounded := Value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetMarginVert(const Value: Integer); +begin + if FMarginVert <> Value then + begin + FMarginVert := Value; + PerformResize; + end; +end; + +procedure TAdvCustomGlowButton.SetMarginHorz(const Value: Integer); +begin + if FMarginHorz <> Value then + begin + FMarginHorz := Value; + PerformResize; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetAutoSizeEx(const Value: Boolean); +begin + if FAutoSize <> Value then + begin + FAutoSize := Value; + PerformResize; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDisabledPicture(const Value: TGDIPPicture); +begin + FIDisabledPicture.Assign(Value); + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetHotPicture(const Value: TGDIPPicture); +begin + FIHotPicture.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetShowCaption(const Value: Boolean); +begin + FShowCaption := Value; + PerformResize; + Invalidate; +end; + +procedure TAdvCustomGlowButton.SetShowDisabled(const Value: boolean); +begin + FShowDisabled := Value; + Invalidate; +end; + +procedure TAdvCustomGlowButton.SetStyle(const Value: TAdvButtonStyle); +begin + if FStyle <> Value then + begin + FStyle := Value; + //if (Value = bsCheck) and DropDownButton then + // DropDownButton := false; + end; +end; + +procedure TAdvCustomGlowButton.SetVersion(const Value: string); +begin + +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.TimerProc(Sender: TObject); +begin + case GlowState of + gsHover: + begin + FStepHover := FStepHover + FTimeInc; + if ((FStepHover > 100) and (FTimeInc > 0)) + or ((FStepHover < 0) and (FTimeInc < 0)) then + begin + // outputdebugstring(pchar('hover step:'+inttostr(fstephover)+':'+inttostr(ftimeinc))); + if FStepHover > 100 then + FStepHover := 100; + + if FStepHover < 0then + FStepHover := 0; + + GlowState := gsNone; + + FreeAndNil(FTimer); + end + else + Invalidate; + end; + gsPush: + begin + // outputdebugstring(pchar('push step:'+inttostr(fsteppush)+':'+inttostr(ftimeinc))); + + FStepPush := FStepPush + FTimeInc; + + if ((FStepPush > 100) and (FTimeInc > 0)) + or ((FStepPush < 0) and (FTimeInc < 0)) then + begin + if FStepPush > 100 then + FStepPush := 100; + + if FStepPush < 0 then + FStepPush := 0; + + if FTimeInc < 0 then + begin + FDown := false; + FLeftDown := false; + end; + + GlowState := gsNone; + FreeAndNil(FTimer); + end + else + Invalidate; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.WMSetText(var Message: TWMSetText); +begin + inherited; + + if AutoSize then + begin + PerformResize; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.WMEraseBkGnd(var Message: TWMEraseBkGnd); +const + delta = 3; +{ +var + DC: HDC; + i: THandle; +// rgn1,rgn2: THandle; + p,op: TPoint; + PDC : HDC; +} + +begin + // SetBkMode(Message.DC, Windows.TRANSPARENT ); + Message.Result := 1; + Exit; + + if FTransparent then + begin + if Assigned(Parent) and not (FMouseDown or FMouseInControl) then + begin + { + rgn1 := CreateRectRgn(0, 0, delta, delta); + rgn2 := CreateRectRgn(ClientRect.Right-delta, 0, ClientRect.Right, delta); + CombineRgn(rgn1, rgn1, rgn2, RGN_OR); + rgn2 := CreateRectRgn(0, ClientRect.Bottom - delta, delta, ClientRect.Bottom); + CombineRgn(rgn1, rgn1, rgn2, RGN_OR); + rgn2 := CreateRectRgn(ClientRect.Right - delta, ClientRect.Bottom - delta, ClientRect.Right, ClientRect.Bottom); + CombineRgn(rgn1, rgn1, rgn2, RGN_OR); + SelectClipRgn(Message.DC, rgn1); + } + + (* + DC := Message.DC; + i := SaveDC(DC); + + p := ClientOrigin; + Windows.ScreenToClient(Parent.Handle, p); + p.x := -p.x; + p.y := -p.y; + +// MoveWindowOrg(DC, p.x, p.y); + +// SetMapMode(FBmp.Canvas.Handle,mm_isotropic); + + SetMapMode(FBmp.Canvas.Handle,mm_isotropic); + SetViewPortOrgEx(FBmp.Canvas.Handle,p.x,p.y,@op); + + SendMessage(Parent.Handle, WM_ERASEBKGND, FBmp.Canvas.Handle, 0); + SendMessage(Parent.Handle, WM_PAINT, FBmp.Canvas.Handle, 0); + +// if (Parent is TWinCtrl) then +// (Parent as TWinCtrl).PaintCtrls(FBmp.Canvas.Handle, nil); + + SetViewPortOrgEx(FBmp.Canvas.Handle,op.x,op.y,nil); + RestoreDC(DC, i); + + // SelectClipRgn(Message.DC, 0); + // DeleteObject(rgn1); + *) + end; + end + else + inherited; +end; + + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.CMDialogChar(var Message: TCMDialogChar); +begin + with Message do + begin + if Caption <> '' then + begin + if IsAccel(CharCode, Caption) and CanFocus then + begin + if IsMenuButton or (Assigned(DropDownMenu)) then + DoDropDown + else + Click; + Result := 1; + end + else + inherited; + end + else + begin + if IsAccel(CharCode, WideCaption) and CanFocus then + begin + if IsMenuButton or (Assigned(DropDownMenu)) then + DoDropDown + else + Click; + Result := 1; + end + else + inherited; + end; + end; +end; + +procedure TAdvCustomGlowButton.CMDialogKey(var Message: TCMDialogKey); +begin + with Message do + if + (((CharCode = VK_RETURN) and FActive) or + ((CharCode = VK_ESCAPE) and FCancel)) and + (KeyDataToShiftState(Message.KeyData) = []) and CanFocus then + begin + //Click; + InternalClick; + FState := absUp; + Result := 1; + end + else + inherited; +end; + +procedure TAdvCustomGlowButton.CMEnabledChanged(var Message: TMessage); +begin + inherited; + Invalidate; +end; + +procedure TAdvCustomGlowButton.CMFocusChanged(var Message: TCMFocusChanged); +begin + with Message do + if Sender is TAdvCustomGlowButton then + FActive := Sender = Self + else + FActive := FDefault; + //SetButtonStyle(FActive); + inherited; +end; + +//------------------------------------------------------------------------------ + +{$IFNDEF TMSDOTNET} + +procedure TAdvCustomGlowButton.CMButtonPressed(var Message: TMessage); +var + Sender: TAdvGlowButton; +begin + if Message.WParam = FGroupIndex then + begin + Sender := TAdvGlowButton(Message.LParam); + if Sender <> Self then + begin + if Sender.Down and FDownChecked then + begin + FDownChecked := False; + FState := absUp; + { if (Action is TCustomAction) then + TCustomAction(Action).Checked := False; } + Invalidate; + end; + //FAllowAllUp := Sender.AllowAllUp; + end; + end; +end; +{$ENDIF} + +//------------------------------------------------------------------------------ + +{$IFNDEF TMSDOTNET} + +procedure TAdvCustomGlowButton.UpdateExclusive; +var + Msg: TMessage; +begin + if (FGroupIndex <> 0) and (Parent <> nil) then + begin + Msg.Msg := CM_BUTTONPRESSED; + Msg.WParam := FGroupIndex; + Msg.LParam := Longint(Self); + Msg.Result := 0; + Parent.Broadcast(Msg); + {if Assigned(FAdvToolBar) and not (Parent is TAdvCustomToolBar) then + FAdvToolBar.Broadcast(Msg) + else if Assigned(AdvToolBar) and (Parent is TAdvCustomToolBar) and Assigned(AdvToolBar.FOptionWindowPanel) then + FAdvToolBar.FOptionWindowPanel.Broadcast(Msg); } + end; +end; +{$ENDIF} + +//------------------------------------------------------------------------------ + +{$IFDEF TMSDOTNET} +procedure TAdvCustomGlowButton.ButtonPressed(Group: Integer; Button: TAdvGlowButton); +begin + if (Group = FGroupIndex) and (Button <> Self) then + begin + if Button.Down and FDownChecked then + begin + FDownChecked := False; + FState := absUp; + if (Action is TCustomAction) then + TCustomAction(Action).Checked := False; + Invalidate; + end; + //FAllowAllUp := Button.AllowAllUp; + end; +end; + +procedure TAdvCustomGlowButton.UpdateExclusive; +var + I: Integer; +begin + if (FGroupIndex <> 0) and (Parent <> nil) then + begin + for I := 0 to Parent.ControlCount - 1 do + if Parent.Controls[I] is TSpeedButton then + TAdvToolButton(Parent.Controls[I]).ButtonPressed(FGroupIndex, Self); + end; +end; +{$ENDIF} + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.UpdateTracking; +var + P: TPoint; + FNewMouseInControl: boolean; +begin + //if FFlat then + begin + if Enabled then + begin + GetCursorPos(P); + + FNewMouseInControl := not (FindDragTarget(P, True) = Self); + + if FNewMouseInControl <> FMouseInControl then + begin + FMouseInControl := FNewMouseInControl; + if FMouseInControl then + Perform(CM_MOUSELEAVE, 0, 0) + else + Perform(CM_MOUSEENTER, 0, 0); + end; + end; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetAllowAllUp(const Value: Boolean); +begin + if FAllowAllUp <> Value then + begin + FAllowAllUp := Value; + UpdateExclusive; + end; +end; + +procedure TAdvCustomGlowButton.SetAntiAlias(const Value: TAntiAlias); +begin + if (FAntiAlias <> Value) then + begin + FAntiAlias := Value; + Invalidate; + end; +end; + +procedure TAdvCustomGlowButton.SetTrimming(const Value: TStringTrimming); +begin + if (FTrimming <> Value) then + begin + FTrimming := Value; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.MouseMove(Shift: TShiftState; X, Y: Integer); +var + NewState: TAdvButtonState; + FOldInButton: Boolean; +begin + inherited; + + if (csDesigning in ComponentState) then + Exit; + + {$IFNDEF DELPHI2006_LVL} + UpdateTracking; + {$ENDIF} + + FOldInButton := FInButton; + FInButton := false; + + if DropDownButton then + begin + case DropDownPosition of + dpRight: if X > Width - 12 then FInButton := true; + dpBottom: if Y > Height - 12 then FInButton := true; + end; + end; + + if (FInButton <> FOldInButton) then + begin + Invalidate; + end; + + if FDragging then + begin + if (not FDownChecked) then NewState := absUp + else NewState := absExclusive; + + if (X >= 0) and (X < ClientWidth) and (Y >= 0) and (Y <= ClientHeight) then + if FDownChecked then NewState := absExclusive else NewState := absDown; + + if (Style = bsCheck) and FDownChecked then + begin + NewState := absDown; + end; + + if (NewState <> FState) then + begin + FState := NewState; + Invalidate; + end; + end + else + if not FMouseInControl then + UpdateTracking; + +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetLayout(const Value: TButtonLayout); +begin + FLayout := Value; + Invalidate; +end; + +procedure TAdvCustomGlowButton.SetOfficeHint(const Value: TAdvHintInfo); +begin + FOfficeHint.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetPicture(const Value: TGDIPPicture); +begin + FIPicture.Assign(Value); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetTransparent(const Value: Boolean); +begin + FTransparent := Value; +// ReCreateWnd; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDropDownButton(const Value: Boolean); +begin + if FDropDownButton <> Value then + begin + //if (Value and not (Style = bsCheck)) or not Value then + FDropDownButton := Value; + AdjustSize; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDropDownDirection(const Value: TDropDownDirection); +begin + if FDropDownDirection <> Value then + begin + //if (Value and not (Style = bsCheck)) or not Value then + FDropDownDirection := Value; + Invalidate; + end; +end; + + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.PopupBtnDown; +begin + if Assigned(FOnDropDown) then + FOnDropDown(self); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetDropDownPosition( + const Value: TDropDownPosition); +begin + if FDropDownPosition <> Value then + begin + FDropDownPosition := Value; + if FDropDownButton then + AdjustSize; + Invalidate; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.OnAppearanceChanged(Sender: TObject); +begin + Invalidate; + if Assigned(FShortCutHint) then + begin + FShortCutHint.Color := clWhite; + FShortCutHint.ColorTo := Appearance.Color; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetAppearance( + const Value: TGlowButtonAppearance); +begin + FAppearance.Assign(Value); + if Assigned(FShortCutHint) then + begin + FShortCutHint.Color := clWhite; + FShortCutHint.ColorTo := Appearance.Color; + end; +end; + +procedure TAdvCustomGlowButton.SetBorderStyle(const Value: TBorderStyle); +begin + FBorderStyle := Value; + Invalidate; +end; + +procedure TAdvCustomGlowButton.SetButtonPosition(const Value: TButtonPosition); +begin + FButtonPosition := Value; + Invalidate; +end; + +procedure TAdvCustomGlowButton.SetComponentStyle(AStyle: TTMSStyle); +begin + if (Astyle in [tsOffice2003Blue, tsOffice2003Silver, tsOffice2003Olive, tsWhidbey]) then + begin + Appearance.ColorHot := $EBFDFF; + Appearance.ColorHotTo := $ACECFF; + Appearance.ColorMirrorHot := $59DAFF; + Appearance.ColorMirrorHotTo := $A4E9FF; + Appearance.BorderColorHot := $99CEDB; + Appearance.GradientHot := ggVertical; + Appearance.GradientMirrorHot := ggVertical; + + Appearance.ColorDown := $76AFF1; + Appearance.ColorDownTo := $4190F3; + Appearance.ColorMirrorDown := $0E72F1; + Appearance.ColorMirrorDownTo := $4C9FFD; + Appearance.BorderColorDown := $45667B; + Appearance.GradientDown := ggVertical; + Appearance.GradientMirrorDown := ggVertical; + + Appearance.ColorChecked := $B5DBFB; + Appearance.ColorCheckedTo := $78C7FE; + Appearance.ColorMirrorChecked := $9FEBFD; + Appearance.ColorMirrorCheckedTo := $56B4FE; + Appearance.GradientChecked := ggVertical; + Appearance.GradientMirrorChecked := ggVertical; + + end; + + case AStyle of + tsOffice2003Blue: + begin + Appearance.Color := $EEDBC8; + Appearance.ColorTo := $F6DDC9; + Appearance.ColorMirror := $EDD4C0; + Appearance.ColorMirrorTo := $F7E1D0; + Appearance.BorderColor := $E0B99B; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + end; + tsOffice2003Olive: + begin + Appearance.Color := $CFF0EA; + Appearance.ColorTo := $CFF0EA; + Appearance.ColorMirror := $CFF0EA; + Appearance.ColorMirrorTo := $8CC0B1; + Appearance.BorderColor := $8CC0B1; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + end; + tsOffice2003Silver: + begin + Appearance.Color := $E6E9E2; //$EDD4C0; + Appearance.ColorTo := $00E6D8D8; + Appearance.ColorMirror := $E6E9E2; //$EDD4C0; + Appearance.ColorMirrorTo := $C8B2B3; + Appearance.BorderColor := $927476; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + end; + tsOffice2003Classic: + begin + Appearance.Color := clWhite; + Appearance.ColorTo := $C9D1D5; + Appearance.ColorMirror := clWhite; + Appearance.ColorMirrorTo := $C9D1D5; + Appearance.BorderColor := clBlack; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + + Appearance.ColorHot := $EBFDFF; + Appearance.ColorHotTo := $ACECFF; + Appearance.ColorMirrorHot := $59DAFF; + Appearance.ColorMirrorHotTo := $A4E9FF; + Appearance.BorderColorHot := $99CEDB; + Appearance.GradientHot := ggVertical; + Appearance.GradientMirrorHot := ggVertical; + + Appearance.ColorDown := $76AFF1; + Appearance.ColorDownTo := $4190F3; + Appearance.ColorMirrorDown := $0E72F1; + Appearance.ColorMirrorDownTo := $4C9FFD; + Appearance.BorderColorDown := $45667B; + Appearance.GradientDown := ggVertical; + Appearance.GradientMirrorDown := ggVertical; + + Appearance.ColorChecked := $B5DBFB; + Appearance.ColorCheckedTo := $78C7FE; + Appearance.ColorMirrorChecked := $9FEBFD; + Appearance.ColorMirrorCheckedTo := $56B4FE; + Appearance.GradientChecked := ggVertical; + Appearance.GradientMirrorChecked := ggVertical; + + end; + tsOffice2007Luna: + begin + Appearance.Color := $EEDBC8; + Appearance.ColorTo := $F6DDC9; + Appearance.ColorMirror := $EDD4C0; + Appearance.ColorMirrorTo := $F7E1D0; + Appearance.BorderColor := $E0B99B; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + + Appearance.ColorHot := $EBFDFF; + Appearance.ColorHotTo := $ACECFF; + Appearance.ColorMirrorHot := $59DAFF; + Appearance.ColorMirrorHotTo := $A4E9FF; + Appearance.BorderColorHot := $99CEDB; + Appearance.GradientHot := ggVertical; + Appearance.GradientMirrorHot := ggVertical; + + Appearance.ColorDown := $76AFF1; + Appearance.ColorDownTo := $4190F3; + Appearance.ColorMirrorDown := $0E72F1; + Appearance.ColorMirrorDownTo := $4C9FFD; + Appearance.BorderColorDown := $45667B; + Appearance.GradientDown := ggVertical; + Appearance.GradientMirrorDown := ggVertical; + + Appearance.ColorChecked := $B5DBFB; + Appearance.ColorCheckedTo := $78C7FE; + Appearance.ColorMirrorChecked := $9FEBFD; + Appearance.ColorMirrorCheckedTo := $56B4FE; + Appearance.BorderColorChecked := $45667B; + Appearance.GradientChecked := ggVertical; + Appearance.GradientMirrorChecked := ggVertical; + end; + tsOffice2007Obsidian: + begin + Appearance.Color := $DFDED6; + Appearance.ColorTo := $E4E2DB; + Appearance.ColorMirror := $D7D5CE; + Appearance.ColorMirrorTo := $E7E5E0; + Appearance.BorderColor := $C0BCB2; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + + Appearance.ColorHot := $EBFDFF; + Appearance.ColorHotTo := $ACECFF; + Appearance.ColorMirrorHot := $59DAFF; + Appearance.ColorMirrorHotTo := $A4E9FF; + Appearance.BorderColorHot := $99CEDB; + Appearance.GradientHot := ggVertical; + Appearance.GradientMirrorHot := ggVertical; + + Appearance.ColorDown := $76AFF1; + Appearance.ColorDownTo := $4190F3; + Appearance.ColorMirrorDown := $0E72F1; + Appearance.ColorMirrorDownTo := $4C9FFD; + Appearance.BorderColorDown := $45667B; + Appearance.GradientDown := ggVertical; + Appearance.GradientMirrorDown := ggVertical; + + Appearance.ColorChecked := $B5DBFB; + Appearance.ColorCheckedTo := $78C7FE; + Appearance.ColorMirrorChecked := $9FEBFD; + Appearance.ColorMirrorCheckedTo := $56B4FE; + Appearance.BorderColorChecked := $45667B; + Appearance.GradientChecked := ggVertical; + Appearance.GradientMirrorChecked := ggVertical; + + end; + tsOffice2007Silver: + begin + Appearance.Color := $F3F3F1; + Appearance.ColorTo := $F5F5F3; + Appearance.ColorMirror := $EEEAE7; + Appearance.ColorMirrorTo := $F8F7F6; + Appearance.BorderColor := $CCCAC9; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + + Appearance.ColorHot := $EBFDFF; + Appearance.ColorHotTo := $ACECFF; + Appearance.ColorMirrorHot := $59DAFF; + Appearance.ColorMirrorHotTo := $A4E9FF; + Appearance.BorderColorHot := $99CEDB; + Appearance.GradientHot := ggVertical; + Appearance.GradientMirrorHot := ggVertical; + + Appearance.ColorDown := $76AFF1; + Appearance.ColorDownTo := $4190F3; + Appearance.ColorMirrorDown := $0E72F1; + Appearance.ColorMirrorDownTo := $4C9FFD; + Appearance.BorderColorDown := $45667B; + Appearance.GradientDown := ggVertical; + Appearance.GradientMirrorDown := ggVertical; + + Appearance.ColorChecked := $B5DBFB; + Appearance.ColorCheckedTo := $78C7FE; + Appearance.ColorMirrorChecked := $9FEBFD; + Appearance.ColorMirrorCheckedTo := $56B4FE; + Appearance.BorderColorChecked := $45667B; + Appearance.GradientChecked := ggVertical; + Appearance.GradientMirrorChecked := ggVertical; + end; + tsWindowsXP: + begin + Appearance.Color := clWhite; + Appearance.ColorTo := $B9D8DC; + Appearance.ColorMirror := $B9D8DC; + Appearance.ColorMirrorTo := $B9D8DC; + Appearance.BorderColor := $B9D8DC; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + + Appearance.ColorHot := $EFD3C6; + Appearance.ColorHotTo := $EFD3C6; + Appearance.ColorMirrorHot := $EFD3C6; + Appearance.ColorMirrorHotTo := $EFD3C6; + Appearance.BorderColorHot := clHighlight; + Appearance.GradientHot := ggVertical; + Appearance.GradientMirrorHot := ggVertical; + + Appearance.ColorDown := $B59284; + Appearance.ColorDownTo := $B59284; + Appearance.ColorMirrorDown := $B59284; + Appearance.ColorMirrorDownTo := $B59284; + Appearance.BorderColorDown := clHighlight; + Appearance.GradientDown := ggVertical; + Appearance.GradientMirrorDown := ggVertical; + + + Appearance.ColorChecked := $B9D8DC; + Appearance.ColorCheckedTo := $B9D8DC; + Appearance.ColorMirrorChecked := $B9D8DC; + Appearance.ColorMirrorCheckedTo := $B9D8DC; + Appearance.BorderColorChecked := clBlack; + Appearance.GradientChecked := ggVertical; + Appearance.GradientMirrorChecked := ggVertical; + + end; + tsWhidbey: + begin + Appearance.Color := clWhite; + Appearance.ColorTo := $DFEDF0; + Appearance.ColorMirror := $DFEDF0; + Appearance.ColorMirrorTo := $DFEDF0; + Appearance.BorderColor := $99A8AC; + Appearance.Gradient := ggVertical; + Appearance.GradientMirror := ggVertical; + + end; + tsCustom: + begin + end; + end; + Invalidate; + + if Assigned(FShortCutHint) then + begin + FShortCutHint.Color := clWhite; + FShortCutHint.ColorTo := Appearance.Color; + end; + +end; + + +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ + +{$IFDEF DELPHI6_LVL} +procedure TAdvCustomGlowButton.ActionChange(Sender: TObject; CheckDefaults: Boolean); +begin + inherited ActionChange(Sender, CheckDefaults); + if Sender is TCustomAction then + with TCustomAction(Sender) do + begin + + if CheckDefaults or (Self.GroupIndex = 0) then + Self.GroupIndex := GroupIndex; + if (csDesigning in ComponentState) + {$IFDEF DELPHI2006_LVL} + or not self.StaticActionImageIndex + {$ENDIF} + then + begin + if ActionHasImages then + Self.ImageIndex := ImageIndex; + end; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGlowButton.GetActionLinkClass: TControlActionLinkClass; +begin + Result := TAdvGlowButtonActionLink; +end; +{$ENDIF} + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetButtonSizeState( + const Value: TButtonSizeState); +begin + if (FButtonSizeState <> Value) {and AutoSize} then + begin + if (FButtonSizeState = bsLarge) then + begin + FOldLayout := Layout; + FOldDropDownPosition := DropDownPosition; + end; + + FButtonSizeState := Value; + + if (FButtonSizeState = bsLarge) and AutoSize then + begin + Layout := FOldLayout; + DropDownPosition := FOldDropDownPosition; + end + else if AutoSize then + begin + Layout := blGlyphLeft; + DropDownPosition := dpRight; + end; + FFirstPaint := True; + Paint; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetMaxButtonSizeState( + const Value: TButtonSizeState); +begin + if (FMaxButtonSizeState <> Value) {and AutoSize} then + begin + FMaxButtonSizeState := Value; + ButtonSizeState := FMaxButtonSizeState + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGlowButton.GetNotes: TStrings; +begin + Result := TStrings(FNotes); +end; + + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetNotes(const Value: TStrings); +begin + FNotes.Assign(Value); + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetNotesFont(const Value: TFont); +begin + FNotesFont.Assign(Value); + Invalidate; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvCustomGlowButton.SetMinButtonSizeState( + const Value: TButtonSizeState); +begin + if (FMinButtonSizeState <> Value) then + begin + FMinButtonSizeState := Value; + if (FMinButtonSizeState > ButtonSizeState) then + ButtonSizeState := FMinButtonSizeState; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvCustomGlowButton.GetButtonSize(BtnSizeState: TButtonSizeState): TSize; +var + DCaption: string; + DWideCaption: widestring; + ImgList: TImageList; + Pic: TGDIPPicture; + EnabledImg: Boolean; + BD: TButtonDisplay; + bmp: TBitmap; + DrawFocused, DrawFocusedHot, DrawDwLn: boolean; + PicSize: TSize; + LayOt: TButtonLayout; + DpDwPosition: TDropDownPosition; +begin + if Enabled or (DisabledImages = nil) then + begin + if FHot and (HotImages <> nil) then + ImgList := HotImages + else + ImgList := Images; + + EnabledImg := Enabled; + end + else + begin + ImgList := DisabledImages; + EnabledImg := True; + end; + + if Enabled or DisabledPicture.Empty then + begin + if FHot and not HotPicture.Empty then + Pic := HotPicture + else + Pic := Picture; + end + else + Pic := DisabledPicture; + + + if (ImgList = nil) then + begin + ImgList := FInternalImages; + EnabledImg := True; + end; + + if ShowCaption then + begin + DCaption := Caption; + DWideCaption := WideCaption; + end + else + begin + DCaption := ''; + DWideCaption := ''; + end; + + if (FMouseInControl or FMouseDown) and DropDownButton then + begin + if FInButton then + BD := bdDropDown + else + BD := bdButton; + end + else + BD := bdNone; + + DrawFocused := (FHasFocus) and (FocusType in [ftBorder, ftHotBorder]); + DrawFocusedHot := (FHasFocus) and (FocusType in [ftHot, ftHotBorder]); + + bmp := TBitmap.Create; + bmp.Width := 1; + bmp.Height := 1; + + GetToolImage(bmp); + + if Assigned(Action) then + begin + begin + if ((Action as TCustomAction).ImageIndex >= 0) and (ImageIndex = (Action as TCustomAction).ImageIndex) then + if Assigned((Action as TCustomAction).ActionList) then + if Assigned(TImageList((Action as TCustomAction).ActionList.Images)) then + begin + ImgList := TImageList((Action as TCustomAction).ActionList.Images); + EnabledImg := Enabled; + end; + end; + end; + + LayOt := Layout; + DpDwPosition := DropDownPosition; + + PicSize.cx := 0; // no stretch pic + PicSize.cy := 0; + if AutoSize then + begin + if (BtnSizeState in [bsLabel, bsGlyph]) then + begin + PicSize.cx := 16; + PicSize.cy := 16; + + if (bmp.Width = 1) then + begin + bmp.Height := Pic.Height; + bmp.Width := Pic.Width; + bmp.Canvas.Draw(0, 0, Pic); + Pic := nil; + end; + + if Assigned(ImgList) and (ImageIndex >= 0) then + begin + Pic := nil; + end; + end; + + if (BtnSizeState = bsGlyph) then + begin + DCaption := ''; + DWideCaption := ''; + end; + + if (BtnSizeState = bsLarge) then + begin + LayOt := FOldLayout; + DpDwPosition := FOldDropDownPosition; + end + else + begin + LayOt := blGlyphLeft; + DpDwPosition := dpRight; + end; + end; + + DrawDwLn := False; + + with Appearance do + Result := DrawVistaButton(Canvas,ClientRect,FColor, FColorTo, FColorMirror, FColorMirrorTo, + BorderColor, Gradient, GradientMirror, DCaption, DWideCaption, FDefaultCaptionDrawing, Font, ImgList, ImageIndex, EnabledImg, LayOt, FDropDownButton, + DrawDwLn, Enabled, DrawFocused, DpDwPosition, Pic, PicSize, AntiAlias, FDefaultPicDrawing, bmp, BD, Transparent and not (FMouseEnter or DrawFocusedHot or (State = absDown)), FMouseEnter, Position, DropDownSplit, CanDrawBorder, + FOverlappedText, FWordWrap, True, FRounded, FDropDownDirection = ddDown, FSpacing, FTrimming, FNotes, FNotesFont, FDownChecked); + + Result.cx := Result.cx + Spacing * 3 + 2 + 2 * MarginHorz; + Result.cy := Result.cy + Spacing * 2 + 2 * MarginVert; + if DropDownButton then + begin + if (DpDwPosition = dpBottom) then + Result.cy := Result.cy + DropDownSectWidth + else + Result.cx := Result.cx + DropDownSectWidth; + end; + //if Assigned(FOnSetButtonSize) then + //FOnSetButtonSize(Self, w, h); + + bmp.Free; +end; + +//------------------------------------------------------------------------------ + +{ TGlowButtonAppearance } + +constructor TGlowButtonAppearance.Create; +begin + inherited; + Color := clWhite; + ColorTo := clWhite; + ColorMirror := clSilver; + ColorMirrorTo := clWhite; + + ColorHot := $F5F0E1; + ColorHotTo := $F9D2B2; + ColorMirrorHot := $F5C8AD; + ColorMirrorHotTo := $FFF8F4; + + ColorDown := BrightnessColor($F5F0E1,-10,-10,0); + ColorDownTo := BrightnessColor($F9D2B2, -10,-10,0); + ColorMirrorDown := BrightnessColor($F5C8AD, -10,-10,0); + ColorMirrorDownTo := BrightnessColor($FFF8F4, -10,-10,0); + + ColorChecked := BrightnessColor($F5F0E1,-10,-10,0); + ColorCheckedTo := BrightnessColor($F9D2B2, -10,-10,0); + ColorMirrorChecked := BrightnessColor($F5C8AD, -10,-10,0); + ColorMirrorCheckedTo := BrightnessColor($FFF8F4, -10,-10,0); + + ColorDisabled := BrightnessColor(clWhite,-5,-5,-5); + ColorDisabledTo := BrightnessColor(clWhite, -5,-5,-5); + ColorMirrorDisabled := BrightnessColor(clSilver, -5,-5,-5); + ColorMirrorDisabledTo := BrightnessColor(clWhite, -5,-5,-5); + + BorderColor := clSilver; + BorderColorHot := clBlue; + BorderColorDown := clNavy; + BorderColorChecked := clBlue; + BorderColorDisabled := clGray; + + Gradient := ggVertical; + GradientMirror := ggVertical; + + GradientHot := ggRadial; + GradientMirrorHot := ggRadial; + + GradientDown := ggRadial; + GradientMirrorDown := ggRadial; + + GradientChecked := ggRadial; + GradientMirrorChecked := ggVertical; + + GradientDisabled := ggRadial; + GradientMirrorDisabled := ggRadial; + + FSystemFont := true; +end; + +procedure TGlowButtonAppearance.SetSystemFont(const Value: boolean); +begin + if (FSystemFont <> Value) then + begin + FSystemFont := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.Assign(Source: TPersistent); +begin + if (Source is TGlowButtonAppearance) then + begin + Color := (Source as TGlowButtonAppearance).Color; + ColorTo := (Source as TGlowButtonAppearance).ColorTo; + ColorMirror := (Source as TGlowButtonAppearance).ColorMirror; + ColorMirrorTo := (Source as TGlowButtonAppearance).ColorMirrorTo; + + ColorHot := (Source as TGlowButtonAppearance).ColorHot; + ColorHotTo := (Source as TGlowButtonAppearance).ColorHotTo; + ColorMirrorHot := (Source as TGlowButtonAppearance).ColorMirrorHot; + ColorMirrorHotTo := (Source as TGlowButtonAppearance).ColorMirrorHotTo; + + ColorDown := (Source as TGlowButtonAppearance).ColorDown; + ColorDownTo := (Source as TGlowButtonAppearance).ColorDownTo; + ColorMirrorDown := (Source as TGlowButtonAppearance).ColorMirrorDown; + ColorMirrorDownTo := (Source as TGlowButtonAppearance).ColorMirrorDownTo; + + ColorChecked := (Source as TGlowButtonAppearance).ColorChecked; + ColorCheckedTo := (Source as TGlowButtonAppearance).ColorCheckedTo; + ColorMirrorChecked := (Source as TGlowButtonAppearance).ColorMirrorChecked; + ColorMirrorCheckedTo := (Source as TGlowButtonAppearance).ColorMirrorCheckedTo; + + ColorDisabled := (Source as TGlowButtonAppearance).ColorDisabled; + ColorDisabledTo := (Source as TGlowButtonAppearance).ColorDisabledTo; + ColorMirrorDisabled := (Source as TGlowButtonAppearance).ColorMirrorDisabled; + ColorMirrorDisabledTo := (Source as TGlowButtonAppearance).ColorMirrorDisabledTo; + + BorderColor := (Source as TGlowButtonAppearance).BorderColor; + BorderColorHot := (Source as TGlowButtonAppearance).BorderColorHot; + BorderColorDown := (Source as TGlowButtonAppearance).BorderColorDown; + BorderColorChecked := (Source as TGlowButtonAppearance).BorderColorChecked; + BorderColorDisabled := (Source as TGlowButtonAppearance).BorderColorDisabled; + + Gradient := (Source as TGlowButtonAppearance).Gradient; + GradientMirror := (Source as TGlowButtonAppearance).GradientMirror; + + GradientHot := (Source as TGlowButtonAppearance).GradientHot; + GradientMirrorHot := (Source as TGlowButtonAppearance).GradientMirrorHot; + + GradientDown := (Source as TGlowButtonAppearance).GradientDown; + GradientMirrorDown := (Source as TGlowButtonAppearance).GradientMirrorDown; + + GradientChecked := (Source as TGlowButtonAppearance).GradientChecked; + GradientMirrorChecked := (Source as TGlowButtonAppearance).GradientMirrorChecked; + + GradientDisabled := (Source as TGlowButtonAppearance).GradientDisabled; + GradientMirrorDisabled := (Source as TGlowButtonAppearance).GradientMirrorDisabled; + + SystemFont := (Source as TGlowButtonAppearance).SystemFont; + end + else + inherited Assign(Source); +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.Changed; +begin + if Assigned(FOnChange) then + FOnChange(Self); +end; + +procedure TGlowButtonAppearance.SetBorderColor(const Value: TColor); +begin + if (FBorderColor <> Value) then + begin + FBorderColor := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetBorderColorChecked(const Value: TColor); +begin + if (FBorderColorChecked <> Value) then + begin + FBorderColorChecked := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetBorderColorDisabled( + const Value: TColor); +begin + if (FBorderColorDisabled <> Value) then + begin + FBorderColorDisabled := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetBorderColorDown(const Value: TColor); +begin + if (FBorderColorDown <> Value) then + begin + FBorderColorDown := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetBorderColorHot(const Value: TColor); +begin + if (FBorderColorHot <> Value) then + begin + FBorderColorHot := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColor(const Value: TColor); +begin + if (FColor <> Value) then + begin + FColor := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorChecked(const Value: TColor); +begin + if (FColorChecked <> Value) then + begin + FColorChecked := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorCheckedTo(const Value: TColor); +begin + if (FColorCheckedTo <> Value) then + begin + FColorCheckedTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorDisabled(const Value: TColor); +begin + if (FColorDisabled <> Value) then + begin + FColorDisabled := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorDisabledTo(const Value: TColor); +begin + if (FColorDisabledTo <> Value) then + begin + FColorDisabledTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorDown(const Value: TColor); +begin + if (FColorDown <> Value) then + begin + FColorDown := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorDownTo(const Value: TColor); +begin + if (FColorDownTo <> Value) then + begin + FColorDownTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorHot(const Value: TColor); +begin + if (FColorHot <> Value) then + begin + FColorHot := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorHotTo(const Value: TColor); +begin + if (FColorHotTo <> Value) then + begin + FColorHotTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirror(const Value: TColor); +begin + if (FColorMirror <> Value) then + begin + FColorMirror := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorChecked(const Value: TColor); +begin + if (FColorMirrorChecked <> Value) then + begin + FColorMirrorChecked := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorCheckedTo( + const Value: TColor); +begin + if (FColorMirrorCheckedTo <> Value) then + begin + FColorMirrorCheckedTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorDisabled( + const Value: TColor); +begin + if (FColorMirrorDisabled <> Value) then + begin + FColorMirrorDisabled := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorDisabledTo( + const Value: TColor); +begin + if (FColorMirrorDisabledTo <> Value) then + begin + FColorMirrorDisabledTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorDown(const Value: TColor); +begin + if (FColorMirrorDown <> Value) then + begin + FColorMirrorDown := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorDownTo(const Value: TColor); +begin + if (FColorMirrorDownTo <> Value) then + begin + FColorMirrorDownTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorHot(const Value: TColor); +begin + if (FColorMirrorHot <> Value) then + begin + FColorMirrorHot := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorHotTo(const Value: TColor); +begin + if (FColorMirrorHotTo <> Value) then + begin + FColorMirrorHotTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorMirrorTo(const Value: TColor); +begin + if (FColorMirrorTo <> Value) then + begin + FColorMirrorTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetColorTo(const Value: TColor); +begin + if (FColorTo <> Value) then + begin + FColorTo := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradient(const Value: TGDIPGradient); +begin + if (FGradient <> Value) then + begin + FGradient := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientChecked( + const Value: TGDIPGradient); +begin + if (FGradientChecked <> Value) then + begin + FGradientChecked := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientDisabled( + const Value: TGDIPGradient); +begin + if (FGradientDisabled <> Value) then + begin + FGradientDisabled := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientDown( + const Value: TGDIPGradient); +begin + if (FGradientDown <> Value) then + begin + FGradientDown := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientHot(const Value: TGDIPGradient); +begin + if (FGradientHot <> Value) then + begin + FGradientHot := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientMirror( + const Value: TGDIPGradient); +begin + if (FGradientMirror <> Value) then + begin + FGradientMirror := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientMirrorChecked( + const Value: TGDIPGradient); +begin + if (FGradientMirrorChecked <> Value) then + begin + FGradientMirrorChecked := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientMirrorDisabled( + const Value: TGDIPGradient); +begin + if (FGradientMirrorDisabled <> Value) then + begin + FGradientMirrorDisabled := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientMirrorDown( + const Value: TGDIPGradient); +begin + if (FGradientMirrorDown <> Value) then + begin + FGradientMirrorDown := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TGlowButtonAppearance.SetGradientMirrorHot( + const Value: TGDIPGradient); +begin + if (FGradientMirrorHot <> Value) then + begin + FGradientMirrorHot := Value; + Changed; + end; +end; + +//------------------------------------------------------------------------------ + +{$IFNDEF TMS_STD} + +{ TDBATBButtonDataLink } + +constructor TDBGlowButtonDataLink.Create; +begin + inherited Create; + FOnEditingChanged := nil; + FOnDataSetChanged := nil; + FOnActiveChanged := nil; +end; + +//------------------------------------------------------------------------------ + +procedure TDBGlowButtonDataLink.ActiveChanged; +begin + if Assigned(FOnActiveChanged) then FOnActiveChanged(Self); +end; + +//------------------------------------------------------------------------------ + +procedure TDBGlowButtonDataLink.DataSetChanged; +begin + if Assigned(FOnDataSetChanged) then FOnDataSetChanged(Self); +end; + +//------------------------------------------------------------------------------ + +procedure TDBGlowButtonDataLink.EditingChanged; +begin + if Assigned(FOnEditingChanged) then FOnEditingChanged(Self); +end; + +//------------------------------------------------------------------------------ + +{ TDBAdvToolBarButton } + +constructor TDBAdvGlowButton.Create(AOwner: TComponent); +begin + inherited; + FAutoDisable := True; + FDBButtonType := dbCustom; + FDisableControls := []; + FDataLink := TDBGlowButtonDataLink.Create; + with FDataLink do + begin + OnEditingChanged := OnDataSetEvents; + OnDataSetChanged := OnDataSetEvents; + OnActiveChanged := OnDataSetEvents; + end; + FConfirmActionString := ''; +end; + +//------------------------------------------------------------------------------ + +destructor TDBAdvGlowButton.Destroy; +begin + FDataLink.Free; + FDataLink := nil; + if (FInternalImages <> nil) then + FInternalImages.Free; + inherited; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.CalcDisableReasons; +begin + case FDBButtonType of + dbPrior: FDisableControls := [drBOF, drEditing, drEmpty]; + dbNext: FDisableControls := [drEOF, drEditing, drEmpty]; + dbFirst: FDisableControls := [drBOF, drEditing, drEmpty]; + dbLast: FDisableControls := [drEOF, drEditing, drEmpty]; + dbInsert, + dbAppend: FDisableControls := [drReadonly, drEditing]; + dbEdit: FDisableControls := [drReadonly, drEditing, drEmpty]; + dbCancel: FDisableControls := [drNotEditing]; + dbPost: FDisableControls := [drNotEditing]; + dbRefresh: FDisableControls := [drEditing]; + dbDelete: FDisableControls := [drReadonly, drEditing, drEmpty]; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.Click; +begin + inherited; + DoAction; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.CMEnabledChanged(var Message: TMessage); +begin + inherited; + if (not FInProcUpdateEnabled) and + (not (csLoading in ComponentState)) and + (not (csDestroying in ComponentState)) then + begin + UpdateEnabled; + end; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.DoAction; +var + DoAction: Boolean; + ShowException: Boolean; +begin + if not DoConfirmAction then + Exit; + + DoAction := (FDBButtonType <> dbCustom); + try + DoBeforeAction(DoAction); + if DoAction and (DataSource <> nil) and (DataSource.State <> dsInactive) then + begin + with DataSource.DataSet do + begin + case FDBButtonType of + dbPrior: Prior; + dbNext: Next; + dbFirst: First; + dbLast: Last; + dbInsert: Insert; + dbAppend: Append; + dbEdit: Edit; + dbCancel: Cancel; + dbPost: Post; + dbRefresh:Refresh; + dbDelete: Delete; + end; + end; + end; + ShowException := false; + except + ShowException := true; + if Assigned(FOnAfterAction) then + FOnAfterAction(self, ShowException); + if ShowException then + raise; + ShowException := true; + end; + if not ShowException and DoAction and Assigned(FOnAfterAction) then + FOnAfterAction(self, ShowException); +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.DoBeforeAction(var DoAction: Boolean); +begin + if (not (csDesigning in ComponentState)) and Assigned(FOnBeforeAction) then + FOnBeforeAction(self, DoAction); +end; + +//------------------------------------------------------------------------------ + +function TDBAdvGlowButton.DoConfirmAction: Boolean; +var + Question: string; + QuestionButtons: TMsgDlgButtons; + QuestionHelpCtx: Longint; + QuestionResult: Longint; +begin + DoGetQuestion(Question, QuestionButtons, QuestionHelpCtx); + if (Question <> '') then + begin + QuestionResult := MessageDlg(Question, mtConfirmation, QuestionButtons, QuestionHelpCtx); + Result := (QuestionResult = idOk) or (QuestionResult = idYes); + end + else + Result := true; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.DoGetQuestion(var Question: string; + var Buttons: TMsgDlgButtons; var HelpCtx: Integer); +begin + Question := ''; + if FConfirmAction then + begin + Question := FConfirmActionString; + Buttons := mbOKCancel; + HelpCtx := 0; + if Assigned(FOnGetConfirm) then + FOnGetConfirm(self, Question, Buttons, HelpCtx); + end; +end; + +//------------------------------------------------------------------------------ + +function TDBAdvGlowButton.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + inherited; + if (AOperation = opRemove) and (FDataLink <> nil) and (AComponent = DataSource) then + DataSource := nil; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.SetDataSource(const Value: TDataSource); +begin + FDataLink.DataSource := Value; + if not (csLoading in ComponentState) then + UpdateEnabled; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.SetDBButtonType(const Value: TDBGlowButtonType); +begin + if (Value = FDBButtonType) then + Exit; + + if (Value = dbDelete) and (FConfirmActionString = ''){and ConfirmAction} then + FConfirmActionString := SDeleteRecordQuestion; //'Delete Record?'; + + if (csReading in ComponentState) or (csLoading in ComponentState) then + begin + FDBButtonType := Value; + CalcDisableReasons; + exit; + end; + + FDBButtonType := Value; + LoadGlyph; + CalcDisableReasons; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.UpdateEnabled; +var + PossibleDisableReasons: TDBBDisableControls; + GetEnable: Boolean; + WasEnabled: Boolean; +begin + if (csDesigning in ComponentState) or (csDestroying in ComponentState) or not FAutoDisable then + Exit; + + FInProcUpdateEnabled := true; + try + WasEnabled := Enabled; + if FDataLink.Active then + begin + PossibleDisableReasons := []; + if FDataLink.DataSet.BOF then + Include(PossibleDisableReasons, drBOF); + if FDataLink.DataSet.EOF then + Include(PossibleDisableReasons, drEOF); + if not FDataLink.DataSet.CanModify then + Include(PossibleDisableReasons, drReadonly); + if FDataLink.DataSet.BOF and FDataLink.DataSet.EOF then + Include(PossibleDisableReasons, drEmpty); + if FDataLink.Editing then + Include(PossibleDisableReasons, drEditing) + else + Include(PossibleDisableReasons, drNotEditing); + + GetEnable := ((FDisableControls - [drEvent])* PossibleDisableReasons = []); + if (drEvent in FDisableControls) and (Assigned(FOnGetEnabled)) then + FOnGetEnabled(Self, GetEnable); + Enabled := GetEnable; + end + else + Enabled := false; + + if (WasEnabled <> Enabled) and Assigned(FOnEnabledChanged) then + FOnEnabledChanged(self); + finally + FInProcUpdateEnabled := false; + end; + LoadGlyph; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.Loaded; +begin + inherited; + //if not Assigned(Images) then + LoadGlyph; + + UpdateEnabled; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.OnDataSetEvents(Sender: TObject); +begin + UpdateEnabled; +end; + +//------------------------------------------------------------------------------ + +procedure TDBAdvGlowButton.LoadGlyph; +var + Glyph: TBitMap; +begin + if (csLoading in ComponentState) or Assigned(Images) or (not Enabled and Assigned(DisabledImages)) then + Exit; + + if (FDBButtonType = dbCustom) then + Exit; + + if (FInternalImages = nil) then + FInternalImages := TImageList.Create(self); + + FInternalImages.Clear; + Glyph := TBitMap.Create; + Glyph.Width := 16; + Glyph.Height := 16; + Glyph.Transparent := True; + + case FDBButtonType of + dbPrior: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGPRIOR') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGPRIORD'); + end; + dbNext: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGNEXT') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGNEXTD'); + end; + dbFirst: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGFIRST') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGFIRSTD'); + end; + dbLast: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGLAST') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGLASTD'); + end; + dbInsert: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGINSERT') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGINSERTD'); + end; + dbAppend: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGINSERT') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGINSERTD'); + end; + dbEdit: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGEDIT') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGEDITD'); + end; + dbCancel: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGCANCEL') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGCANCELD'); + end; + dbPost: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGPOST') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGPOSTD'); + end; + dbRefresh: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGREFRESH') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGREFRESHD'); + end; + dbDelete: + begin + if Enabled then + Glyph.LoadFromResourceName(HInstance, 'DBIMGDELETE') + else + Glyph.LoadFromResourceName(HInstance, 'DBIMGDELETED'); + end; + end; + + FInternalImages.DrawingStyle := dsTransparent; + FInternalImages.Masked := true; + FInternalImages.AddMasked(Glyph, clFuchsia); + FImageIndex := 0; + Glyph.Free; + Invalidate; +end; + +//------------------------------------------------------------------------------ + + +procedure TDBAdvGlowButton.SetConfirmActionString(const Value: String); +begin + if FConfirmActionString <> Value then + begin + FConfirmActionString := Value; + end; +end; + +{$ENDIF} + +//------------------------------------------------------------------------------ + +{$IFDEF DELPHI6_LVL} + +{ TAdvGlowButtonActionLink } + +procedure TAdvGlowButtonActionLink.AssignClient(AClient: TObject); + +begin + inherited AssignClient(AClient); + FClient := AClient as TAdvCustomGlowButton; +end; + +//------------------------------------------------------------------------------ + +function TAdvGlowButtonActionLink.IsCheckedLinked: Boolean; +begin + Result := inherited IsCheckedLinked {and (FClient.GroupIndex <> 0) and + FClient.AllowAllUp} and (FClient.Down = (Action as TCustomAction).Checked); + + FClient.CheckLinked := Result; +end; + +//------------------------------------------------------------------------------ + +function TAdvGlowButtonActionLink.IsGroupIndexLinked: Boolean; +begin + Result := (FClient is TAdvCustomGlowButton) and + (TAdvCustomGlowButton(FClient).GroupIndex = (Action as TCustomAction).GroupIndex); + + FClient.GroupIndexLinked := Result; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvGlowButtonActionLink.SetImageIndex(Value: Integer); +begin + if IsGroupIndexLinked then + begin + FImageIndex := Value; + TAdvCustomGlowButton(FClient).Invalidate; + + if (csDesigning in FClient.ComponentState) + {$IFDEF DELPHI2006_LVL} + or not TAdvCustomGlowButton(FClient).StaticActionImageIndex + {$ENDIF} + then + begin + if TAdvCustomGlowButton(FClient).ActionHasImages then + TAdvCustomGlowButton(FClient).ImageIndex := Value; + end; + end; +end; + +//------------------------------------------------------------------------------ + +function TAdvGlowButtonActionLink.IsImageIndexLinked: boolean; +begin + Result := inherited IsImageIndexLinked and + (FImageIndex = (Action as TCustomAction).ImageIndex); +end; + +//------------------------------------------------------------------------------ + +procedure TAdvGlowButtonActionLink.SetChecked(Value: Boolean); +begin + if IsCheckedLinked then + TAdvCustomGlowButton(FClient).Down := Value; +end; + +//------------------------------------------------------------------------------ + +procedure TAdvGlowButtonActionLink.SetGroupIndex(Value: Integer); +begin + if IsGroupIndexLinked then + TAdvCustomGlowButton(FClient).GroupIndex := Value; +end; + +{$ENDIF} + +{ TShortCutHintWindow } + +procedure TShortCutHintWindow.CreateParams(var Params: TCreateParams); +const + CS_DROPSHADOW = $00020000; +begin + inherited; + Params.Style := Params.Style and not WS_BORDER; + if (Win32Platform = VER_PLATFORM_WIN32_NT) and + ((Win32MajorVersion > 5) or + ((Win32MajorVersion = 5) and (Win32MinorVersion >= 1))) then + if Params.WindowClass.Style and CS_DROPSHADOW <> 0 then + Params.WindowClass.Style := Params.WindowClass.Style - CS_DROPSHADOW; +end; + +procedure TShortCutHintWindow.Paint; +var + r: TRect; +begin + r := ClientRect; + DrawGradient(Canvas, Color, ColorTo, 16, r, false); + Canvas.Brush.Style := bsClear; + Canvas.Font.Assign(self.Font); + + DrawText(Canvas.Handle,PChar(Caption),Length(Caption),r, DT_CENTER or DT_SINGLELINE or DT_VCENTER); + + Canvas.Pen.Color := clGray; + RoundRect(Canvas.Handle, R.Left, R.Top, R.Right, R.Bottom, 3,3); +end; + + +procedure TShortCutHintWindow.Resize; +var + ow: integer; +begin + inherited; + ow := Canvas.TextWidth('O') + 8; + if Width < ow then + Width := ow; +end; + +procedure TShortCutHintWindow.WMEraseBkGnd(var Message: TWMEraseBkGnd); +begin + Message.Result := 1; +end; + +function TAdvCustomGlowButton.CanDrawBorder: Boolean; +begin + Result := (BorderStyle = bsSingle); +end; + +function TAdvCustomGlowButton.CanDrawFocused: Boolean; +begin + Result := (FHasFocus) and (FocusType in [ftBorder, ftHotBorder]); +end; + +{$IFDEF FREEWARE} +{$I TRIAL.INC} +{$ENDIF} + + + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbuttondb.res b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advglowbuttondb.res new file mode 100644 index 0000000000000000000000000000000000000000..5a25528296f4590dd8050e55dafba629fb016ba0 GIT binary patch literal 5716 zcmdT|y^_-~5MCIHP-G^LKuJkKK?}qOnK_P|90hOU$}{eg#_yCzaA!B_c?8DVSDv^iNzfK(0WJmJ#E67}kGRmM=ak`+EoUmGv_Oe2PzXU5K~7B! ze8h!5jm_3qngXmT^5o4zM*6b8{>l^j6&!C4Rf7hv;}X zob0hVFuwyg!H3dIh>7l8@MDn1V{A=hbC2_s?uiYV%;%I&DeU*K(QAS%8|uKu+f5Jt z5I+VYF;3TE!{!F&Q(U`Ibp0BR>KmjS*IJ%U4}RdH{wpnwO98g*Ze)E53F>kb_rq#~ zf$4{G!_)c|IHEf}mkgI1nM;-pmZ9@rSdB1L-WkdbPwL+C4_z9Y9lqK;VPCV)oi}y> zpUE+QlsKlxs#bErb{rpF`sEdGD+*@HKCU`_!BeOKUp z%WMs=QBl$A6*J>5*!4m6-vZ&$?>PQ!wc;78m!`J5v{GL6vT`g;e9p8_^Jj{WF(@;9 fW+f%4krfpa?eHx}U9fkQ)wwol3~G~8nQngpYeVT% literal 0 HcmV?d00001 diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/advhintinfo.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advhintinfo.pas new file mode 100644 index 0000000..72d2354 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advhintinfo.pas @@ -0,0 +1,91 @@ +{***************************************************************************} +{ TAdvHintInfo component } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2008 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit AdvHintInfo; + +interface + +uses + Classes, GDIPicture; + +type + TAdvHintInfo = class(TPersistent) + private + FPicture: TGDIPPicture; + FShowHelp: boolean; + FNotes: TStrings; + FTitle: string; + FWideTitle: widestring; + FWideNotes: widestring; + procedure SetNotes(const Value: TStrings); + procedure SetPicture(const Value: TGDIPPicture); + public + constructor Create; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + property WideTitle: widestring read FWideTitle write FWideTitle; + property WideNotes: widestring read FWideNotes write FWideNotes; + published + property Title: string read FTitle write FTitle; + property Notes: TStrings read FNotes write SetNotes; + property Picture: TGDIPPicture read FPicture write SetPicture; + property ShowHelp: boolean read FShowHelp write FShowHelp default false; + end; + +implementation + +{ TAdvHintInfo } + +procedure TAdvHintInfo.Assign(Source: TPersistent); +begin + if (Source is TAdvHintInfo) then + begin + Title := (Source as TAdvHintInfo).Title; + Notes.Assign((Source as TAdvHintInfo).Notes); + ShowHelp := (Source as TAdvHintInfo).ShowHelp; + Picture.Assign((Source as TAdvHintInfo).Picture); + WideTitle := (Source as TAdvHintInfo).WideTitle; + WideNotes := (Source as TAdvHintInfo).WideNotes; + end; +end; + +constructor TAdvHintInfo.Create; +begin + inherited; + FNotes := TStringList.Create; + FPicture := TGDIPPicture.Create; +end; + +destructor TAdvHintInfo.Destroy; +begin + FNotes.Free; + FPicture.Free; + inherited; +end; + +procedure TAdvHintInfo.SetNotes(const Value: TStrings); +begin + FNotes.Assign(Value); +end; + +procedure TAdvHintInfo.SetPicture(const Value: TGDIPPicture); +begin + FPicture.Assign(Value); +end; + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/advstyleif.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advstyleif.pas new file mode 100644 index 0000000..e392d1e --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/advstyleif.pas @@ -0,0 +1,63 @@ +{***************************************************************************} +{ TAdvStyleIF interface } +{ for Delphi & C++Builder } +{ version 1.0 } +{ } +{ written by TMS Software } +{ copyright © 2006 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit AdvStyleIF; + +interface + +uses + Classes; + +type + TTMSStyle = (tsOffice2003Blue, tsOffice2003Silver, tsOffice2003Olive, tsOffice2003Classic, + tsOffice2007Luna, tsOffice2007Obsidian, tsWindowsXP, tsWhidbey, tsCustom, tsOffice2007Silver); + + // + // ['{E1199D64-5AF9-4DB7-B363-FABE5D1EEE0F}'] + // function GetComponentStyle: TTMSStyle; + + ITMSStyle = interface + ['{11AC2DDC-C087-4298-AB6E-EA1B5017511B}'] + procedure SetComponentStyle(AStyle: TTMSStyle); + end; + +function IsVista: boolean; + +implementation + +uses + Windows; + +//------------------------------------------------------------------------------ + +function IsVista: boolean; +var + hKernel32: HMODULE; +begin + hKernel32 := GetModuleHandle('kernel32'); + if (hKernel32 > 0) then + begin + Result := GetProcAddress(hKernel32, 'GetLocaleInfoEx') <> nil; + end + else + Result := false; +end; + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/gdipicture.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/gdipicture.pas new file mode 100644 index 0000000..7cdbee7 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/gdipicture.pas @@ -0,0 +1,420 @@ +{***************************************************************************} +{ TGDIPPicture class } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 2006 - 2008 } +{ Email : info@tmssoftware.com } +{ Web : http://www.tmssoftware.com } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{***************************************************************************} + +unit GDIPicture; + +interface + +uses + Windows, Classes, Graphics, Controls , SysUtils, AdvGDIP, ComObj, ActiveX; + +{$I TMSDEFS.INC} + +type + + TGDIPPicture = class(TGraphic) + private + { Private declarations } + FDatastream: TMemoryStream; + FIsEmpty: Boolean; + FWidth, FHeight: Integer; + FDoubleBuffered: Boolean; + FBackgroundColor: TColor; + FOnClear: TNotifyEvent; + protected + { Protected declarations } + function GetEmpty: Boolean; override; + function GetHeight: Integer; override; + function GetWidth: Integer; override; + procedure SetHeight(Value: Integer); override; + procedure SetWidth(Value: Integer); override; + procedure ReadData(Stream: TStream); override; + procedure WriteData(Stream: TStream); override; + public + { Public declarations } + constructor Create; override; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + procedure DrawImage(Graphics: TGPGraphics; X,Y: integer); + procedure Draw(ACanvas: TCanvas; const Rect: TRect); override; + procedure LoadFromFile(const FileName: string); override; + procedure LoadFromStream(Stream: TStream); override; + procedure SaveToStream(Stream: TStream); override; + procedure LoadFromResourceName(Instance: THandle; const ResName: String); + procedure LoadFromResourceID(Instance: THandle; ResID: Integer); + procedure LoadFromURL(url:string); + procedure LoadFromClipboardFormat(AFormat: Word; AData: THandle; + APalette: HPALETTE); override; + procedure SaveToClipboardFormat(var AFormat: Word; var AData: THandle; + var APalette: HPALETTE); override; + property DoubleBuffered: Boolean read FDoubleBuffered write FDoubleBuffered; + property BackgroundColor: TColor read FBackgroundColor write FBackgroundColor; + function GetImageSizes: boolean; + published + { Published declarations } + property OnClear: TNotifyEvent read FOnClear write FOnClear; + end; + + +implementation + + +{ TGDIPPicture } + +procedure TGDIPPicture.Assign(Source: TPersistent); +var + st: TMemoryStream; +begin + FIsEmpty := True; + if Source = nil then + begin + FDataStream.Clear; + FIsEmpty := true; + if Assigned(OnChange) then + OnChange(Self); + if Assigned(OnClear) then + OnClear(self); + end + else + begin + if Source is TGDIPPicture then + begin + FDataStream.LoadFromStream(TGDIPPicture(Source).FDataStream); + FIsEmpty := fdatastream.Size = 0; + if Assigned(OnChange) then + OnChange(self); + end + else + if Source is TBitmap then + begin + st := TMemoryStream.Create; + (Source as TBitmap).SaveToStream(st); + st.Position := 0; + FDataStream.LoadFromStream(st); + st.Free; + FIsEmpty := false; + if Assigned(OnChange) then + OnChange(self); + end + else + if (Source is TPicture) then + begin + st := TMemoryStream.Create; + (Source as TPicture).Graphic.SaveToStream(st); + st.Position := 0; + FDataStream.LoadFromStream(st); + st.Free; + FIsEmpty := false; + if Assigned(OnChange) then + OnChange(self); + end; + + GetImageSizes; + end; +end; + +constructor TGDIPPicture.Create; +begin + inherited; + FDataStream := TMemoryStream.Create; + FIsEmpty := True; +end; + +destructor TGDIPPicture.Destroy; +begin + FDataStream.Free; + inherited; +end; + +procedure TGDIPPicture.DrawImage(Graphics: TGPGraphics; X,Y: integer); +var + multi: TGPImage; + pstm: IStream; + hGlobal: THandle; + pcbWrite: Longint; + +begin + if Empty then + Exit; + + if FDataStream.Size = 0 then + Exit; + + hGlobal := GlobalAlloc(GMEM_MOVEABLE, FDataStream.Size); + if (hGlobal = 0) then + raise Exception.Create('Could not allocate memory for image'); + + try + pstm := nil; + + // Create IStream* from global memory + CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + pstm.Write(FDataStream.Memory, FDataStream.Size,@pcbWrite); + + multi := TGPImage.Create(pstm); + + graphics.DrawImage(multi, x,y); + + multi.Free; + + finally + GlobalFree(hGlobal); + end; +end; + +procedure TGDIPPicture.Draw(ACanvas: TCanvas; const Rect: TRect); +var + dc: HDC; + multi: TGPImage; + graphic: TGPgraphics; + pstm: IStream; + hGlobal: THandle; + pcbWrite: Longint; + bmp: tbitmap; + +begin + if Empty then + Exit; + + if FDataStream.Size = 0 then + Exit; + + hGlobal := GlobalAlloc(GMEM_MOVEABLE, FDataStream.Size); + if (hGlobal = 0) then + raise Exception.Create('Could not allocate memory for image'); + + try + pstm := nil; + + // Create IStream* from global memory + CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + pstm.Write(FDataStream.Memory, FDataStream.Size,@pcbWrite); + + dc := ACanvas.Handle; + graphic:= TGPgraphics.Create(dc); + multi := TGPImage.Create(pstm); + + if multi.GetFormat = ifBMP then + begin // use this alternative for easy bitmap auto transparent drawing + bmp := TBitmap.Create; + FDataStream.Position := 0; + bmp.LoadFromStream(FDataStream); + bmp.TransparentMode := tmAuto; + bmp.Transparent := true; + ACanvas.Draw(Rect.Left,Rect.Top, bmp); + bmp.Free; + end + else + begin + FWidth := multi.GetWidth; + FHeight := multi.GetHeight; + graphic.DrawImageRect(multi, Rect.Left, Rect.Top, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top); + end; + + multi.Free; + graphic.Free; + finally + GlobalFree(hGlobal); + end; + +end; + +function TGDIPPicture.GetImageSizes: boolean; +var + multi: TGPImage; + pstm: IStream; + hGlobal: THandle; + pcbWrite: Longint; + +begin + Result := false; + + if Empty then + Exit; + + if FDataStream.Size = 0 then + Exit; + + hGlobal := GlobalAlloc(GMEM_MOVEABLE, FDataStream.Size); + if (hGlobal = 0) then + raise Exception.Create('Could not allocate memory for image'); + + try + pstm := nil; + // Create IStream* from global memory + CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + pstm.Write(FDataStream.Memory, FDataStream.Size,@pcbWrite); + multi := TGPImage.Create(pstm); + + FWidth := multi.GetWidth; + FHeight := multi.GetHeight; + + Result := true; + + multi.Free; + finally + GlobalFree(hGlobal); + end; + +end; + +function TGDIPPicture.GetEmpty: Boolean; +begin + Result := FIsEmpty; +end; + +function TGDIPPicture.GetHeight: Integer; +begin + Result := FHeight; +end; + +function TGDIPPicture.GetWidth: Integer; +begin + Result := FWidth; +end; + +procedure TGDIPPicture.LoadFromFile(const FileName: string); +begin + try + FDataStream.LoadFromFile(Filename); + + FIsEmpty := False; + + if Assigned(OnClear) then + OnClear(self); + + GetImageSizes; + + if Assigned(OnChange) then + OnChange(self); + + + except + FIsEmpty:=true; + end; +end; + +procedure TGDIPPicture.LoadFromStream(Stream: TStream); +begin + if Assigned(Stream) then + begin + FDataStream.LoadFromStream(Stream); + FIsEmpty := False; + + GetImageSizes; + + if Assigned(OnChange) then + OnChange(self); + end; +end; + +procedure TGDIPPicture.ReadData(Stream: TStream); +begin + if Assigned(Stream) then + begin + FDataStream.LoadFromStream(stream); + FIsEmpty := False; + end; +end; + +procedure TGDIPPicture.SaveToStream(Stream: TStream); +begin + if Assigned(Stream) then + FDataStream.SaveToStream(Stream); +end; + + +procedure TGDIPPicture.SetHeight(Value: Integer); +begin + {$IFDEF DELPHI6_LVL} + inherited; + {$ENDIF} +end; + +procedure TGDIPPicture.SetWidth(Value: Integer); +begin + {$IFDEF DELPHI6_LVL} + inherited; + {$ENDIF} +end; + +procedure TGDIPPicture.LoadFromResourceName(Instance: THandle; const ResName: string); +var + Stream: TCustomMemoryStream; +begin + if FindResource(Instance,PChar(ResName),RT_RCDATA) <> 0 then + begin + Stream := TResourceStream.Create(Instance, ResName, RT_RCDATA); + try + LoadFromStream(Stream); + finally + Stream.Free; + end; + end; +end; + +procedure TGDIPPicture.LoadFromResourceID(Instance: THandle; ResID: Integer); +var + Stream: TCustomMemoryStream; +begin + Stream := TResourceStream.CreateFromID(Instance, ResID, RT_RCDATA); + try + LoadFromStream(Stream); + finally + Stream.Free; + end; +end; + +procedure TGDIPPicture.WriteData(Stream: TStream); +begin + if Assigned(Stream) then + begin + FDataStream.SaveToStream(stream); + end; +end; + +procedure TGDIPPicture.LoadFromURL(url: string); +begin + if (pos('RES://',UpperCase(url))=1) then + begin + Delete(url,1,6); + if (url<>'') then + LoadFromResourceName(hinstance,url); + Exit; + end; + + if (pos('FILE://',uppercase(url))=1) then + begin + Delete(url,1,7); + if (url<>'') + then LoadFromFile(url); + end; +end; + +procedure TGDIPPicture.LoadFromClipboardFormat(AFormat: Word; + AData: THandle; APalette: HPALETTE); +begin +end; + +procedure TGDIPPicture.SaveToClipboardFormat(var AFormat: Word; + var AData: THandle; var APalette: HPALETTE); +begin +end; + + +end. diff --git a/TAdvTaskDialog/internal/1.5.1.2/1/Source/htmlengo.pas b/TAdvTaskDialog/internal/1.5.1.2/1/Source/htmlengo.pas new file mode 100644 index 0000000..79858c9 --- /dev/null +++ b/TAdvTaskDialog/internal/1.5.1.2/1/Source/htmlengo.pas @@ -0,0 +1,2353 @@ +{**************************************************************************} +{ Mini HTML rendering engine } +{ for Delphi & C++Builder } +{ } +{ written by TMS Software } +{ copyright © 1999-2008 } +{ Email : info@tmssoftware.com } +{ Website : http://www.tmssoftware.com/ } +{ } +{ The source code is given as is. The author is not responsible } +{ for any possible damage done due to the use of this code. } +{ The component can be freely used in any application. The complete } +{ source code remains property of the author and may not be distributed, } +{ published, given or sold in any form as such. No parts of the source } +{ code can be included in any other component or application without } +{ written authorization of the author. } +{**************************************************************************} + +{$I TMSDEFS.INC} + +{$IFNDEF TMSDOTNET} +procedure PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap); +var + BitmapHeader: pBitmapInfo; + BitmapImage : POINTER; + HeaderSize : DWORD; + ImageSize : DWORD; +begin + GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize); + GetMem(BitmapHeader, HeaderSize); + GetMem(BitmapImage, ImageSize); + try + GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^); + StretchDIBits(Canvas.Handle, + DestRect.Left, DestRect.Top, // Destination Origin + DestRect.Right - DestRect.Left, // Destination Width + DestRect.Bottom - DestRect.Top, // Destination Height + 0, 0, // Source Origin + Bitmap.Width, Bitmap.Height, // Source Width & Height + BitmapImage, + TBitmapInfo(BitmapHeader^), + DIB_RGB_COLORS, + SRCCOPY) + finally + FreeMem(BitmapHeader); + FreeMem(BitmapImage) + end; +end; +{$ENDIF} + +{$IFDEF TMSDOTNET} +procedure PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap); +var + BitmapHeader: TBitmapInfo; + HeaderSize : DWORD; + ImageSize : DWORD; + Bits: HBITMAP; + Image: TBytes; + Info: IntPtr; + +begin + Bits := Bitmap.Handle; + + GetDIBSizes(Bits, HeaderSize, ImageSize); + + + Info := System.Runtime.InteropServices.Marshal.AllocHGlobal(HeaderSize); + + try + SetLength(Image, ImageSize); + GetDIB(Bits, 0, Info, Image); + + BitmapHeader := TBitmapInfo(System.Runtime.InteropServices.Marshal.PtrToStructure(Info, TypeOf(TBitmapInfo))); + + StretchDIBits(Canvas.Handle, + DestRect.Left, DestRect.Top, // Destination Origin + DestRect.Right - DestRect.Left, // Destination Width + DestRect.Bottom - DestRect.Top, // Destination Height + 0, 0, // Source Origin + Bitmap.Width, Bitmap.Height, // Source Width & Height + Image, + Info, + DIB_RGB_COLORS, + SRCCOPY) + finally + System.Runtime.InteropServices.Marshal.FreeHGlobal(Info); + end; +end; +{$ENDIF} + +function DirExists(const Name: string): Boolean; +var + Code: Integer; +begin + {$IFNDEF TMSDOTNET} + Code := GetFileAttributes(PChar(Name)); + {$ENDIF} + {$IFDEF TMSDOTNET} + Code := GetFileAttributes(Name); + {$ENDIF} + Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0); +end; + +function SysImage(Canvas: TCanvas;x,y:Integer;APath:string;large,draw,print:boolean;resfactor:double):TPoint; +var + SFI: TSHFileInfo; + i,Err: Integer; + imglsthandle: THandle; + rx,ry: Integer; + bmp: TBitmap; + r: TRect; +begin + Val(APath,i,Err); + + {$IFNDEF TMSDOTNET} + FillChar(SFI,Sizeof(SFI),0); + {$ENDIF} + + {$IFNDEF TMSDOTNET} + if (APath <> '') and (Err <> 0) then + begin + if FileExists(APath) or DirExists(APath) then + // If the file or directory exists, just let Windows figure out it's attrs. + SHGetFileInfo(PChar(APath), 0, SFI, SizeOf(TSHFileInfo), + SHGFI_SYSICONINDEX {or OPEN_FLAG[Open] or SELECTED_FLAG[Selected]}) + else + // File doesn't exist, so Windows doesn't know what to do with it. We have + // to tell it by passing the attributes we want, and specifying the + // SHGFI_USEFILEATTRIBUTES flag so that the function knows to use them. + SHGetFileInfo(PChar(APath), 0, SFI, SizeOf(TSHFileInfo), + SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES {or OPEN_FLAG[Open] or SELECTED_FLAG[Selected]}); + i := SFI.iIcon; + end; + + if Large then + imglsthandle := SHGetFileInfo('', 0, SFI, SizeOf(SFI), + SHGFI_SYSICONINDEX or SHGFI_LARGEICON) + else + imglsthandle := SHGetFileInfo('', 0, SFI, SizeOf(SFI), + SHGFI_SYSICONINDEX or SHGFI_SMALLICON); + {$ENDIF} + {$IFDEF TMSDOTNET} + if (APath <> '') and (Err <> 0) then + begin + if FileExists(APath) or DirExists(APath) then + // If the file or directory exists, just let Windows figure out it's attrs. + SHGetFileInfo(APath, 0, SFI, System.Runtime.interopservices.marshal.SizeOf(TypeOf(TSHFileInfo)), + SHGFI_SYSICONINDEX {or OPEN_FLAG[Open] or SELECTED_FLAG[Selected]}) + else + // File doesn't exist, so Windows doesn't know what to do with it. We have + // to tell it by passing the attributes we want, and specifying the + // SHGFI_USEFILEATTRIBUTES flag so that the function knows to use them. + SHGetFileInfo(APath, 0, SFI, System.Runtime.interopservices.Marshal.SizeOf(TypeOf(TSHFileInfo)), + SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES {or OPEN_FLAG[Open] or SELECTED_FLAG[Selected]}); + i := SFI.iIcon; + end; + + if Large then + imglsthandle := SHGetFileInfo('', 0, SFI, System.Runtime.interopservices.Marshal.SizeOf(TypeOf(SFI)), + SHGFI_SYSICONINDEX or SHGFI_LARGEICON) + else + imglsthandle := SHGetFileInfo('', 0, SFI, System.Runtime.interopservices.Marshal.SizeOf(TypeOf(SFI)), + SHGFI_SYSICONINDEX or SHGFI_SMALLICON); + {$ENDIF} + + + ImageList_GetIconSize(imglsthandle,rx,ry); + + {$IFNDEF TMSDOTNET} + Result := Point(rx,ry); + {$ENDIF} + {$IFDEF TMSDOTNET} + Result := Borland.Vcl.Types.Point(rx,ry); + {$ENDIF} + + if Draw and not Print then + ImageList_Draw(imglsthandle,i,Canvas.Handle,x,y, ILD_TRANSPARENT); + + if Draw and Print then + begin + bmp := TBitmap.Create; + bmp.Width := rx; + bmp.Height := ry; + ImageList_Draw(imglsthandle,i,bmp.Canvas.handle,0,0,ILD_NORMAL); + r.left := x; + r.top := y; + r.right := x + Round(rx * ResFactor); + r.bottom := y + Round(ry * ResFactor); + PrintBitmap(Canvas,r,bmp); + bmp.Free; + end; +end; + +procedure DrawHTMLGradient(Canvas: TCanvas; FromColor,ToColor,BorderColor: TColor; Steps: Integer;R:TRect; Direction: Boolean); +var + diffr,startr,endr: Integer; + diffg,startg,endg: Integer; + diffb,startb,endb: Integer; + iend: Integer; + rstepr,rstepg,rstepb,rstepw: Real; + i,stepw: Word; +begin + if Steps = 0 then + Steps := 1; + + FromColor := ColorToRGB(FromColor); + ToColor := ColorToRGB(ToColor); + + startr := (FromColor and $0000FF); + startg := (FromColor and $00FF00) shr 8; + startb := (FromColor and $FF0000) shr 16; + endr := (ToColor and $0000FF); + endg := (ToColor and $00FF00) shr 8; + endb := (ToColor and $FF0000) shr 16; + + diffr := endr - startr; + diffg := endg - startg; + diffb := endb - startb; + + rstepr := diffr / steps; + rstepg := diffg / steps; + rstepb := diffb / steps; + + if Direction then + rstepw := (R.Right - R.Left) / Steps + else + rstepw := (R.Bottom - R.Top) / Steps; + + with Canvas do + begin + for i := 0 to Steps - 1 do + begin + endr := startr + Round(rstepr*i); + endg := startg + Round(rstepg*i); + endb := startb + Round(rstepb*i); + stepw := Round(i*rstepw); + Pen.Color := endr + (endg shl 8) + (endb shl 16); + Brush.Color := Pen.Color; + if Direction then + begin + iend := R.Left + stepw + Trunc(rstepw) + 1; + if iend > R.Right then + iend := R.Right; + Rectangle(R.Left + stepw,R.Top,iend,R.Bottom) + end + else + begin + iend := R.Top + stepw + Trunc(rstepw)+1; + if iend > r.Bottom then + iend := r.Bottom; + Rectangle(R.Left,R.Top + stepw,R.Right,iend); + end; + end; + + if BorderColor <> clNone then + begin + Brush.Style := bsClear; + Pen.Color := BorderColor; + Rectangle(R.Left,R.Top,R.Right,R.Bottom); + end; + end; +end; + +{ +procedure DrawHTMLGradient(Canvas: TCanvas; FromColor,ToColor: TColor; Steps: Integer;R:TRect; Direction: Boolean); +var + diffr,startr,endr: Integer; + diffg,startg,endg: Integer; + diffb,startb,endb: Integer; + iend: Integer; + rstepr,rstepg,rstepb,rstepw: Real; + i,stepw: Word; + +begin + if Steps = 0 then + Steps := 1; + + FromColor := ColorToRGB(FromColor); + ToColor := ColorToRGB(ToColor); + + startr := (FromColor and $0000FF); + startg := (FromColor and $00FF00) shr 8; + startb := (FromColor and $FF0000) shr 16; + endr := (ToColor and $0000FF); + endg := (ToColor and $00FF00) shr 8; + endb := (ToColor and $FF0000) shr 16; + + diffr := endr - startr; + diffg := endg - startg; + diffb := endb - startb; + + rstepr := diffr / steps; + rstepg := diffg / steps; + rstepb := diffb / steps; + + if Direction then + rstepw := (R.Right - R.Left) / Steps + else + rstepw := (R.Bottom - R.Top) / Steps; + + with Canvas do + begin + for i := 0 to Steps - 1 do + begin + endr := startr + Round(rstepr*i); + endg := startg + Round(rstepg*i); + endb := startb + Round(rstepb*i); + stepw := Round(i*rstepw); + Pen.Color := endr + (endg shl 8) + (endb shl 16); + Brush.Color := Pen.Color; + if Direction then + begin + iend := R.Left + stepw + Trunc(rstepw) + 1; + if iend > R.Right then + iend := R.Right; + Rectangle(R.Left + stepw,R.Top,iend,R.Bottom) + end + else + begin + iend := R.Top + stepw + Trunc(rstepw)+1; + if iend > r.Bottom then + iend := r.Bottom; + Rectangle(R.Left,R.Top + stepw,R.Right,iend); + end; + end; + end; +end; +} + +function Text2Color(s:string):tcolor; +begin + Result := clBlack; + + if (s='clred') then result:=clred else + if (s='clblack') then result:=clblack else + if (s='clblue') then result:=clblue else + if (s='clgreen') then result:=clgreen else + if (s='claqua') then result:=claqua else + if (s='clyellow') then result:=clyellow else + if (s='clfuchsia') then result:=clfuchsia else + if (s='clwhite') then result:=clwhite else + if (s='cllime') then result:=cllime else + if (s='clsilver') then result:=clsilver else + if (s='clgray') then result:=clgray else + if (s='clolive') then result:=clolive else + if (s='clnavy') then result:=clnavy else + if (s='clpurple') then result:=clpurple else + if (s='clteal') then result:=clteal else + if (s='clmaroon') then result:=clmaroon; + + if Result <> clBlack then Exit; + + if (s='clbackground') then result:=clbackground else + if (s='clactivecaption') then result:=clactivecaption else + if (s='clinactivecaption') then result:=clinactivecaption else + if (s='clmenu') then result:=clmenu else + if (s='clwindow') then result:=clwindow else + if (s='clwindowframe') then result:=clwindowframe else + if (s='clmenutext') then result:=clmenutext else + if (s='clwindowtext') then result:=clwindowtext else + if (s='clcaptiontext') then result:=clcaptiontext else + if (s='clactiveborder') then result:=clactiveborder else + if (s='clinactiveborder') then result:=clinactiveborder else + if (s='clappworkspace') then result:=clappworkspace else + if (s='clhighlight') then result:=clhighlight else + if (s='clhighlighttext') then result:=clhighlighttext else + if (s='clbtnface') then result:=clbtnface else + if (s='clbtnshadow') then result:=clbtnshadow else + if (s='clgraytext') then result:=clgraytext else + if (s='clbtntext') then result:=clbtntext else + if (s='clinactivecaptiontext') then result:=clinactivecaptiontext else + if (s='clbtnhighlight') then result:=clbtnhighlight else + if (s='cl3ddkshadow') then result:=clgraytext else + if (s='cl3dlight') then result:=cl3dlight else + if (s='clinfotext') then result:=clinfotext else + if (s='clinfobk') then result:=clinfobk; +end; + +function HexVal(s:string): Integer; +var + i,j: Integer; +begin + if Length(s) < 2 then + begin + Result := 0; + Exit; + end; + + if s[1] >= 'A' then + i := ord(s[1]) - ord('A') + 10 + else + i := ord(s[1]) - ord('0'); + + if s[2] >= 'A' then + j := ord(s[2]) - ord('A') + 10 + else + j := ord(s[2]) - ord('0'); + + Result := i shl 4 + j; +end; + +function Hex2Color(s:string): TColor; +var + r,g,b: Integer; +begin + r := Hexval(Copy(s,2,2)); + g := Hexval(Copy(s,4,2)) shl 8; + b := Hexval(Copy(s,6,2)) shl 16; + Result := TColor(b + g + r); +end; + +function IPos(su,s:string):Integer; +begin + Result := Pos(UpperCase(su),UpperCase(s)); +end; + +function IStrToInt(s:string):Integer; +var + Err,Res: Integer; +begin + Val(s,Res,Err); + Result := Res; +end; + +function DBTagStrip(s:string):string; +var + i,j: Integer; +begin + i := Pos('<#',s); + if i > 0 then + begin + Result := Copy(s,1,i - 1); + Delete(s,1,i); + j := Pos('>',s); + if j > 0 then + Delete(s,j,1); + Result := Result + s; + end + else + Result := s; +end; + +function CRLFStrip(s:string;break:boolean):string; +var + i: Integer; +begin + Result := ''; + for i := 1 to Length(s) do + begin + if not ( (s[i] =#13) or (s[i] =#10)) then + Result := Result + s[i] + else + if (s[i] = #13) and break then + Result := Result + '
    '; + end; +end; + +function VarPos(su,s:string;var Res:Integer):Integer; +begin + Res := Pos(su,s); + Result := Res; +end; + +function TagReplaceString(const Srch,Repl:string;var Dest:string):Boolean; +var + i: Integer; +begin + i := IPos(srch,dest); + if i > 0 then + begin + Result := True; + Delete(Dest,i,Length(Srch)); + Dest := Copy(Dest,1,i-1) + Repl + Copy(Dest,i,Length(Dest)); + end + else + Result := False; +end; + +{$WARNINGS OFF} +function HTMLDrawEx(Canvas:TCanvas; s:string; fr:TRect; + FImages: TImageList; + XPos,YPos,FocusLink,HoverLink,ShadowOffset: Integer; + CheckHotSpot,CheckHeight,Print,Selected,Blink,HoverStyle,WordWrap: Boolean; + ResFactor:Double; + URLColor,HoverColor,HoverFontColor,ShadowColor:TColor; + var AnchorVal,StripVal,FocusAnchor: string; + var XSize,YSize,HyperLinks,MouseLink: Integer; + var HoverRect:TRect;ic: THTMLPictureCache; pc: TPictureContainer;LineSpacing: Integer): Boolean; +var + su: string; + r,dr,hr,rr,er: TRect; + htmlwidth,htmlheight,txtheight: Integer; + Align: TAlignment; + PIndent: Integer; + OldFont: TFont; + CalcFont: TFont; + DrawFont: TFont; + OldCalcFont: TFont; + OldDrawFont: TFont; + Hotspot, ImageHotspot: Boolean; + Anchor,OldAnchor,MouseInAnchor,Error: Boolean; + bgcolor,paracolor,hvrcolor,hvrfntcolor,pencolor,blnkcolor,hifcol,hibcol: TColor; + LastAnchor,OldAnchorVal: string; + IMGSize: TPoint; + isSup,isSub,isPara,isShad: Boolean; + subh,suph,imgali,srchpos,hlcount,licount: Integer; + hrgn,holdfont: THandle; + ListIndex: Integer; + dtp: TDrawTextParams; + Invisible: Boolean; + FoundTag: Boolean; + {new for editing} + nnFit: Integer; + nnSize: TSize; + inspoint: Integer; + {$IFNDEF TMSDOTNET} + nndx: Pointer; + {$ENDIF} + AltImg,ImgIdx,OldImgIdx: Integer; + DrawStyle: DWord; + Col1,Col2: TColor; + ofsx,newofsx: integer; + + procedure StartRotated(Canvas:TCanvas;Angle: Integer); + var + LFont:TLogFont; + begin + {$IFNDEF TMSDOTNET} + GetObject(Canvas.Font.Handle,SizeOf(LFont),Addr(LFont)); + {$ENDIF} + + {$IFDEF TMSDOTNET} + GetObject(Canvas.Font.Handle,System.Runtime.InteropServices.Marshal.SizeOf(TypeOf(LFont)),LFont); + {$ENDIF} + + LFont.lfEscapement := Angle * 10; + LFont.lfOrientation := Angle * 10; + hOldFont:=SelectObject(Canvas.Handle,CreateFontIndirect(LFont)); + end; + + procedure EndRotated(Canvas:TCanvas); + begin + DeleteObject(SelectObject(Canvas.Handle,hOldFont)); + end; + + function HTMLDrawLine(Canvas: TCanvas;var s:string;r: TRect;Calc:Boolean; + var w,h,subh,suph,imgali:Integer;var Align:TAlignment; var PIndent: Integer; + XPos,YPos:Integer;var Hotspot,ImageHotSpot:Boolean;OffsetX: integer; var NewOffsetX: integer):string; + var + su,Res,TagProp,Prop,AltProp,Tagp,LineText:string; + cr: TRect; + linebreak,imgbreak,linkbreak: Boolean; + th,sw,indent,err,bmpx,bmpy,oldh: Integer; + TagPos,SpacePos,o,l: Integer; + bmp: THTMLPicture; + ABitmap: TBitmap; + NewColor,NewColorTo: TColor; + TagWidth,TagHeight,WordLen,WordLenEx,WordWidth: Integer; + TagChar: Char; + LengthFits, SpaceBreak: Boolean; + + begin + Result := ''; + LineText := ''; + r.Bottom := r.Bottom - Subh; + + w := 0; + sw := 0; + + LineBreak := False; + ImgBreak := False; + LinkBreak := False; + HotSpot := False; + ImageHotSpot := False; + +// r.Left := r.Left + offsetX; + + cr := r; + res := ''; + + if not Calc then + cr.Left := cr.Left + OffsetX; + + if isPara and not Calc then + begin + Pencolor := Canvas.Pen.Color; + Canvas.Pen.color := Canvas.Brush.Color; + Canvas.Rectangle(fr.Left,r.Top,fr.Right,r.Top + h); + end; + + while (Length(s) > 0) and not LineBreak and not ImgBreak do + begin + // get next word or till next HTML tag + TagPos := Pos('<',s); + + if WordWrap then + SpacePos := Pos(' ',s) + else + SpacePos := 0; + + if (Tagpos > 0) and ((SpacePos > TagPos) or (SpacePos = 0)) then + begin + su := Copy(s,1,TagPos - 1); + end + else + begin + if SpacePos > 0 then + su := Copy(s,1,SpacePos) + else + su := s; + end; + + {$IFDEF TMSDEBUG} + DbgMsg(su+ '.'); + {$ENDIF} + + WordLen := Length(su); + + while Pos(' ',su) > 0 do + begin + TagReplacestring(' ',' ',su); + end; + + while Pos('<',su) > 0 do + begin + TagReplacestring('<','<',su); + end; + + while Pos('>',su) > 0 do + begin + TagReplacestring('>','>',su); + end; + + WordLenEx := Length(su); + + if WordLen > 0 then + begin + th := Canvas.TextHeight(su); + + if isSub and (subh < (th shr 2)) then subh := th shr 2; + if isSup and (suph < (th shr 2)) then suph := th shr 2; + + if th > h then + h := th; + + StripVal := StripVal + su; + + if Invisible then + Delete(s,1,WordLen); + + if not Invisible then + begin + // draw mode + if not Calc then + begin + if isSup then + cr.Bottom := cr.Bottom - suph; + if isSub then + cr.Bottom := cr.Bottom + subh; + + cr.Bottom := cr.Bottom - imgali; + + if isShad then + begin + OffsetRect(cr,ShadowOffset,ShadowOffset); + NewColor := Canvas.Font.Color; + Canvas.Font.Color := ShadowColor; + {$IFNDEF TMSDOTNET} + DrawTextEx(Canvas.Handle,PChar(su),WordLenEx,cr,DrawStyle and not DT_EXTERNALLEADING,nil); + {$ENDIF} + {$IFDEF TMSDOTNET} + DrawTextEx(Canvas.Handle,su,WordLenEx,cr,DrawStyle and not DT_EXTERNALLEADING,nil); + {$ENDIF} + Offsetrect(cr,-ShadowOffset,-ShadowOffset); + Canvas.Font.Color := NewColor; + end; + + {$IFNDEF TMSDOTNET} + DrawTextEx(Canvas.Handle,PChar(su),WordLenEx,cr,DrawStyle and not DT_EXTERNALLEADING,nil); + DrawTextEx(Canvas.Handle,PChar(su),WordLenEx,cr,DrawStyle or DT_CALCRECT,nil); + {$ENDIF} + + {$IFDEF TMSDOTNET} + DrawTextEx(Canvas.Handle,su,WordLenEx,cr,DrawStyle and not DT_EXTERNALLEADING,nil); + DrawTextEx(Canvas.Handle,su,WordLenEx,cr,DrawStyle or DT_CALCRECT,nil); + {$ENDIF} + + if Anchor and (Hyperlinks - 1 = FocusLink) then + FocusAnchor := LastAnchor; + + {$IFDEF TMSDEBUG} + if Anchor then + OutputDebugString(pchar('drawrect for '+anchorval+' = ['+inttostr(cr.Left)+':'+inttostr(cr.Top)+'] ['+inttostr(cr.right)+':'+inttostr(cr.bottom)+'] @ ['+inttostr(xpos)+':'+inttostr(ypos))); + {$ENDIF} + + if Error then + begin + Canvas.Pen.Color := clRed; + Canvas.Pen.Width := 1; + + l := (cr.Left div 2) * 2; + if (l mod 4)=0 then o := 2 else o := 0; + + Canvas.MoveTo(l,r.Bottom + o - 1); + while l < cr.Right do + begin + if o = 2 then o := 0 else o := 2; + Canvas.LineTo(l + 2,r.bottom + o - 1); + Inc(l,2); + end; + // if o = 2 then o := 0 else o := 2; + // Canvas.LineTo(l + 2,r.Bottom + o - 1); + end; + + cr.Left := cr.Right; + cr.Right := r.Right; + cr.Bottom := r.Bottom; + cr.Top := r.Top; + end + else + begin + cr := r; //reinitialized each time ! + {$IFNDEF TMSDOTNET} + DrawTextEx(Canvas.Handle,PChar(su),WordLenEx,cr,DrawStyle or DT_CALCRECT,nil); + {$ENDIF} + + {$IFDEF TMSDOTNET} + DrawTextEx(Canvas.Handle,su,WordLenEx,cr,DrawStyle or DT_CALCRECT,nil); + {$ENDIF} + + // preparations for editing purposes + if (ypos > cr.Top) and (ypos < cr.bottom) and (xpos > w) then {scan charpos here} + begin + {$IFNDEF TMSDOTNET} + er := rect(w,cr.top,xpos,cr.bottom); + Fillchar(dtp,sizeof(dtp),0); + {$ENDIF} + + {$IFDEF TMSDOTNET} + er := Borland.Vcl.Types.rect(w,cr.top,xpos,cr.bottom); + {$ENDIF} + dtp.cbSize:=sizeof(dtp); + + {$IFDEF DELPHI4_LVL} + {$IFNDEF TMSDOTNET} + GetTextExtentExPoint(Canvas.Handle,pChar(su),WordLenEx,xpos-w,@nnfit,nil,nnSize); + {$ENDIF} + {$IFDEF TMSDOTNET} + GetTextExtentExPoint(Canvas.Handle,su,WordLenEx,xpos-w,nnfit,nil,nnSize); + {$ENDIF} + {$ELSE} + {$IFNDEF TMSDOTNET} + nndx := nil; {fix for declaration error in Delphi 3 WINDOWS.PAS} + GetTextExtentExPoint(Canvas.Handle,pChar(su),WordLenEx,xpos - w,nnfit,integer(nndx^),nnSize); + {$ENDIF} + {$IFDEF TMSDOTNET} + GetTextExtentExPoint(Canvas.Handle,su,WordLenEx,xpos - w,nnfit,nil,nnSize); + {$ENDIF} + {$ENDIF} + + {this will get the character pos of the insertion point} + if nnfit = WordLen then + InsPoint := InsPoint + WordLen + else + InsPoint := InsPoint + nnfit; + end; + {end of preparations for editing purposes} + + { Calculated text width } + WordWidth := cr.Right - cr.Left; + w := w + WordWidth; + + if (XPos - cr.Left >= w - WordWidth) and (XPos - cr.Left <= w) and Anchor then + begin + HotSpot := True; + if (YPos > cr.Top){ and (YPos < cr.Bottom)} then + begin + Anchorval := LastAnchor; + MouseInAnchor := True; + end; + end; + end; + + LengthFits := (w < r.Right - r.Left - OfsX) or (r.Right - r.Left - OfsX <= WordWidth); + + if not LengthFits and + ((Length(LineText) > 0) and (LineText[Length(LineText)] <> ' ')) then + LengthFits := True; + + LineText := LineText + su; + + if LengthFits or not WordWrap then + begin + Res := Res + Copy(s,1,WordLen); + + //if not LengthFits and Calc and (LineText <> su) then + // s := ''; + + Delete(s,1,WordLen); + + if Length(su) >= WordLen then + begin + {$IFNDEF TMSDOTNET} + if System.Copy(su, WordLen, 1) = ' ' then + {$ENDIF} + {$IFDEF TMSDOTNET} + if Copy(su, WordLen, 1) = ' ' then + {$ENDIF} + sw := Canvas.TextWidth(' ') + else + sw := 0; + end + else + sw := 0; + end + else + begin + LineBreak := True; + w := w - WordWidth; + end; + end; + end; + + TagPos := Pos('<',s); + + if (TagPos = 1) and (Length(s) <= 2) then + s := ''; + + if not LineBreak and (TagPos = 1) and (Length(s) > 2) then + begin + if (s[2] = '/') and (Length(s) > 3) then + begin + case UpCase(s[3]) of + 'A':begin + if (not HoverStyle or (Hoverlink = Hyperlinks)) and not Calc then + begin + Canvas.Font.Style := Canvas.Font.Style - [fsUnderline]; + if Hovercolor <> clNone then + begin + Canvas.Brush.Color := HvrColor; + if HvrColor = clNone then + Canvas.Brush.Style := bsClear; + end; + if HoverFontColor <> clNone then + Canvas.Font.Color := HoverFontColor; + end; + + if not Selected then + Canvas.Font.Color := Oldfont.Color; + + Anchor := False; + + if MouseInAnchor then + begin + hr.Bottom := r.Bottom; + hr.Right := r.Left + w; + if r.Top <> hr.Top then + begin + hr.Left := r.Left; + hr.Top := r.Top; + end; + + HoverRect := hr; + MouseLink := HyperLinks; + {$IFDEF TMSDEBUG} + DbgRect('hotspot anchor '+lastanchor,hr); + {$ENDIF} + MouseInAnchor := False; + end; + + if Focuslink = Hyperlinks - 1 then + begin + rr.Right := cr.Left; + rr.Bottom := cr.Bottom - ImgAli; + rr.Top := rr.Bottom - Canvas.TextHeight('gh'); + InflateRect(rr,1,0); + if not Calc then Canvas.DrawFocusRect(rr); + end; + end; + 'E':begin + if not Calc then + Error := False; + end; + 'B':begin + if s[4] <> '>' then + Canvas.Font.Color := OldFont.Color + else + Canvas.Font.Style := Canvas.Font.Style - [fsBold]; + end; + 'S':begin + TagChar := UpCase(s[4]); + + if (TagChar = 'U') then + begin + isSup := False; + isSub := False; + end + else + if (TagChar = 'H') then + isShad := False + else + Canvas.Font.Style := Canvas.Font.Style - [fsStrikeOut]; + end; + 'F':begin + Canvas.Font.Name := OldFont.Name; + Canvas.Font.Size := OldFont.Size; + if not Calc and not Selected then + begin + Canvas.Font.Color := OldFont.Color; + Canvas.Brush.Color := BGColor; + if BGColor = clNone then + begin + Canvas.Brush.Style := bsClear; + end; + end; + end; + 'H':begin + if not Calc then + begin + Canvas.Font.Color := hifCol; + Canvas.Brush.Color := hibCol; + if hibCol = clNone then + Canvas.Brush.Style := bsClear; + end; + end; + 'I':begin + Canvas.Font.Style := Canvas.Font.Style - [fsItalic]; + end; + 'L':begin + LineBreak := True; + end; + 'O':begin + NewOffsetX := 0; + end; + 'P':begin + LineBreak := True; + if not Calc then + begin + Canvas.Brush.Color := ParaColor; + if ParaColor = clNone then Canvas.Brush.Style := bsClear; + isPara := false; + end; + end; + 'U':begin + if (s[4] <> '>') and (ListIndex > 0) then + Dec(Listindex) + else + Canvas.Font.Style := Canvas.Font.Style - [fsUnderline]; + end; + 'R':begin + EndRotated(Canvas); + end; + 'Z':Invisible := False; + end; + end + else + begin + case Upcase(s[2]) of + 'A':begin + { only do this when at hover position in xpos,ypos } + if (FocusLink = HyperLinks) and not Calc then + begin + rr.Left := cr.Left; + rr.Top := cr.Top; + end; + + Inc(HyperLinks); + if (not HoverStyle or (Hoverlink = HyperLinks)) and not Calc then + begin + Canvas.Font.Style := Canvas.Font.Style + [fsUnderline]; + if (Hovercolor <> clNone) and not Calc then + begin + HvrColor := Canvas.Brush.Color; + + if Canvas.Brush.Style = bsClear then + HvrColor := clNone; + Canvas.Brush.Color := HoverColor; + end; + + if HoverFontColor <> clNone then + begin + hvrfntcolor := Canvas.Font.Color; + Canvas.Font.Color := HoverFontColor; + end; + end; + + if not Selected and ((HoverFontColor = clNone) or (HoverLink <> HyperLinks) or not HoverStyle) then + Canvas.Font.Color := URLColor; + + TagProp := Copy(s,3,Pos('>',s) - 1); //
    + Prop := Copy(TagProp,Pos('"',TagProp) + 1,Length(TagProp)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + LastAnchor := Prop; + Anchor := True; + + hr.Left := w; + hr.Top := r.Top; + end; + 'B':begin + TagChar := Upcase(s[3]); + case TagChar of + '>': Canvas.Font.Style := Canvas.Font.Style + [fsBold]; // tag + 'R': //
    tag + begin + LineBreak := true; + StripVal := StripVal + #13; + end; + 'L': if not Blink then + Canvas.Font.Color := BlnkColor; // tag + 'O': + begin + Res := Res + Copy(s,1,pos('>',s)); + if not Calc and not Selected then + begin + TagProp := Uppercase(Copy(s,6,pos('>',s)-1)); + + if (Pos('BACKGROUND',TagProp) > 0) then + begin + Prop := Copy(TagProp,Pos('BACKGROUND',TagProp)+10,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop)+1,Length(prop)); + Prop := Copy(Prop,1,Pos('"',Prop)-1); + + if Pos('IDX:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 4); + if Assigned(FImages) and (IStrToInt(Prop) < FImages.Count) then + begin + IMGSize.X := MulDiv(FImages.Width, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(FImages.Height, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + + if not Calc and not Print then +{$IFDEF DELPHI4_LVL} + FImages.Draw(Canvas, CR.Left, CR.Top, IStrToInt(Prop), True); +{$ELSE} + FImages.Draw(Canvas, CR.Left, CR.Top, IStrToInt(Prop)); +{$ENDIF} + + if not Calc and Print then + begin + CR.Right := CR.Left + Round(resfactor * FImages.Width); + CR.Bottom := CR.Top + Round(resfactor * FImages.Height); + + ABitmap := TBitmap.Create; + FImages.GetBitmap(IStrToInt(Prop), ABitmap); + PrintBitmap(Canvas, CR, ABitmap); + ABitmap.Free; + CR := r; + end; + end; + end; + + if Pos('SSYS:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 5); + IMGSize := SysImage(Canvas, CR.Left, CR.Top, Prop, False, not Calc, Print, resfactor); + + IMGSize.X := MulDiv(IMGSize.X, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(IMGSize.Y, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + end; + + if Pos('LSYS:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 5); + IMGSize := SysImage(Canvas, CR.Left, CR.Top, Prop, True, not Calc, Print, resfactor); + + IMGSize.X := MulDiv(IMGSize.X, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(IMGSize.Y, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + end; + + bmp := nil; + + if (Pos(':',Prop) = 0) and Assigned(pc) then + begin + bmp := pc.FindPicture(Prop); + end; + + if (Pos('://',Prop) > 0) and Assigned(ic) then + begin + if ic.FindPicture(Prop) = nil then + with ic.AddPicture do + begin + Asynch := False; + LoadFromURL(Prop); + end; + bmp := ic.FindPicture(Prop); + end; + + if bmp <> nil then + begin + if not bmp.Empty and (bmp.Width > 0) and (bmp.Height > 0) then + begin + // do the tiling here + bmpy := 0; + hrgn := CreateRectRgn(fr.left, fr.top, fr.right,fr.bottom); + SelectClipRgn(Canvas.Handle, hrgn); + while (bmpy < fr.bottom-fr.top) do + begin + bmpx := 0; + while (bmpx < fr.right - fr.left) do + begin + Canvas.Draw(fr.left+bmpx,fr.top+bmpy,bmp); + bmpx := bmpx + bmp.width; + end; + bmpy := bmpy + bmp.height; + end; + SelectClipRgn(Canvas.handle, 0); + DeleteObject(hrgn); + end; + end; //end of bmp <> nil + end; //end of background + + if (Pos('BGTOPLEFT', TagProp) > 0) then + begin + Prop := Copy(TagProp, Pos('BGTOPLEFT', TagProp) + 10, Length(TagProp)); + Prop := Copy(Prop, Pos('"', Prop) + 1, Length(Prop)); + Prop := Copy(Prop, 1, Pos('"', Prop) - 1); + + if Pos('IDX:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 4); + if Assigned(FImages) and (IStrToInt(Prop) < FImages.Count) then + begin + IMGSize.X := MulDiv(FImages.Width, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(FImages.Height, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + + if not Calc and not Print then +{$IFDEF DELPHI4_LVL} + FImages.Draw(Canvas, CR.Left, CR.Top, IStrToInt(Prop), True); +{$ELSE} + FImages.Draw(Canvas, CR.Left, CR.Top, IStrToInt(Prop)); +{$ENDIF} + + if not Calc and Print then + begin + CR.Right := CR.Left + Round(resfactor * FImages.Width); + CR.Bottom := CR.Top + Round(resfactor * FImages.Height); + + ABitmap := TBitmap.Create; + FImages.GetBitmap(IStrToInt(Prop), ABitmap); + PrintBitmap(Canvas, CR, ABitmap); + ABitmap.Free; + CR := r; + end; + end; + end; + + if Pos('SSYS:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 5); + IMGSize := SysImage(Canvas, CR.Left, CR.Top, Prop, False, not Calc, Print, resfactor); + + IMGSize.X := MulDiv(IMGSize.X, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(IMGSize.Y, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + end; + + if Pos('LSYS:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 5); + IMGSize := SysImage(Canvas, CR.Left, CR.Top, Prop, True, not Calc, Print, resfactor); + + IMGSize.X := MulDiv(IMGSize.X, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(IMGSize.Y, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + end; + + bmp := nil; + + if (Pos(':', Prop) = 0) and Assigned(pc) then + begin + bmp := pc.FindPicture(Prop); + end; + + if (Pos('://', Prop) > 0) and Assigned(iC) then + begin + if iC.FindPicture(Prop) = nil then + with iC.AddPicture do + begin + ASYNCH := False; + LoadFromURL(Prop); + end; + bmp := iC.FindPicture(Prop); + end; + + if bmp <> nil then + begin + if not bmp.Empty and (bmp.Width > 0) and (bmp.Height > 0) then + begin + // do the tiling here + bmpy := 0; + HRgn := CreateRectRgn(fr.Left, fr.Top, fr.Right, fr.Bottom); + SelectClipRgn(Canvas.Handle, HRgn); + if (bmpy < fr.Bottom - fr.Top) then + begin + bmpx := 0; + if (bmpx < fr.Right - fr.Left) then + begin + Canvas.Draw(fr.Left + bmpx, fr.Top + bmpy, bmp); + bmpx := bmpx + bmp.Width; + end; + bmpy := bmpy + bmp.Height; + end; + SelectClipRgn(Canvas.Handle, 0); + DeleteObject(HRgn); + end; + end; //end of bmp <> nil + end; //end of bgtopleft + + if (Pos('BGTOPRIGHT', TagProp) > 0) then + begin + Prop := Copy(TagProp, Pos('BGTOPRIGHT', TagProp) + 10, Length(TagProp)); + Prop := Copy(Prop, Pos('"', Prop) + 1, Length(Prop)); + Prop := Copy(Prop, 1, Pos('"', Prop) - 1); + + if Pos('IDX:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 4); + if Assigned(FImages) and (IStrToInt(Prop) < FImages.Count) then + begin + IMGSize.X := MulDiv(FImages.Width, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(FImages.Height, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + + if not Calc and not Print then +{$IFDEF DELPHI4_LVL} + FImages.Draw(Canvas, CR.Right - FImages.Width, CR.Top, IStrToInt(Prop), True); +{$ELSE} + FImages.Draw(Canvas, CR.Right - FImages.Width, CR.Top, IStrToInt(Prop)); +{$ENDIF} + + if not Calc and Print then + begin + CR.Right := CR.Left + Round(resfactor * FImages.Width); + CR.Bottom := CR.Top + Round(resfactor * FImages.Height); + + ABitmap := TBitmap.Create; + FImages.GetBitmap(IStrToInt(Prop), ABitmap); + PrintBitmap(Canvas, CR, ABitmap); + ABitmap.Free; + CR := r; + end; + end; + end; + + if Pos('SSYS:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 5); + IMGSize := SysImage(Canvas, CR.Right - FImages.Width, CR.Top, Prop, False, not Calc, Print, resfactor); + + IMGSize.X := MulDiv(IMGSize.X, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(IMGSize.Y, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + end; + + if Pos('LSYS:', UpperCase(Prop)) > 0 then + begin + Delete(Prop, 1, 5); + IMGSize := SysImage(Canvas, CR.Right - FImages.Width, CR.Top, Prop, True, not Calc, Print, resfactor); + + IMGSize.X := MulDiv(IMGSize.X, GetDeviceCaps(Canvas.Handle, LOGPIXELSX), 96); + IMGSize.Y := MulDiv(IMGSize.Y, GetDeviceCaps(Canvas.Handle, LOGPIXELSY), 96); + end; + + bmp := nil; + + if (Pos(':', Prop) = 0) and Assigned(pc) then + begin + bmp := pc.FindPicture(Prop); + end; + + if (Pos('://', Prop) > 0) and Assigned(iC) then + begin + if iC.FindPicture(Prop) = nil then + with iC.AddPicture do + begin + ASYNCH := False; + LoadFromURL(Prop); + end; + bmp := iC.FindPicture(Prop); + end; + + if bmp <> nil then + begin + if not bmp.Empty and (bmp.Width > 0) and (bmp.Height > 0) then + begin + // do the printing here + bmpy := 0; + HRgn := CreateRectRgn(fr.Left, fr.Top, fr.Right, fr.Bottom); + SelectClipRgn(Canvas.Handle, HRgn); + if (bmpy < fr.Bottom - fr.Top) then + begin + bmpx := 0; + if (bmpx < fr.Right - fr.Left) then + begin + Canvas.Draw(fr.Right - bmp.Width, fr.Top + bmpy, bmp); + bmpx := bmpx + bmp.Width; + end; + bmpy := bmpy + bmp.Height; + end; + SelectClipRgn(Canvas.Handle, 0); + DeleteObject(HRgn); + end; + end; //end of bmp <> nil + end; //end of bgtopright + + if VarPos('BGCOLOR',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos + 5,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + + NewColor := clNone; + + if Length(Prop) > 0 then + begin + if Prop[1] = '#' then + NewColor := Hex2Color(Prop) + else + NewColor := Text2Color(AnsiLowerCase(prop)); + end; + + if VarPos('BGCOLORTO',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos + 5,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + NewColorTo := clNone; + + if Length(Prop) > 0 then + begin + if Prop[1] = '#' then + NewColorTo := Hex2Color(Prop) + else + NewColorTo := Text2Color(AnsiLowerCase(prop)); + end; + + Prop := 'H'; + if VarPos('DIR',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos + 3,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + end; + + Canvas.Pen.Color := Newcolor; + {$IFNDEF TMSDOTNET} + DrawHTMLGradient(Canvas,NewColor,NewColorTo,clNone,64,Rect(fr.left,fr.top,fr.right,fr.bottom),Prop = 'H'); + {$ENDIF} + {$IFDEF TMSDOTNET} + DrawHTMLGradient(Canvas,NewColor,NewColorTo,clNone,64,Borland.Vcl.Types.Rect(fr.left,fr.top,fr.right,fr.bottom),Prop = 'H'); + {$ENDIF} + Canvas.Brush.Style := bsClear + end + else + begin + BGColor := Canvas.Brush.Color; + Canvas.Brush.color := NewColor; + PenColor:=Canvas.Pen.Color; + Canvas.Pen.Color := Newcolor; + Canvas.Rectangle(fr.left - 2,fr.top,fr.right,fr.bottom); + Canvas.Pen.Color := PenColor; + end; + end; + end; + end; + end; + end; + 'E':begin + if not Calc then + Error := True; + end; + 'H':begin + case Upcase(s[3]) of + 'R': + begin + LineBreak := True; + if not Calc then + begin + Pencolor := Canvas.Pen.color; + Canvas.Pen.color:=clblack; + Canvas.MoveTo(r.left,cr.bottom+1); + Canvas.Lineto(r.right,cr.bottom+1); + Canvas.pen.color:=pencolor; + end; + end; + 'I': + begin + if not Calc then + begin + hifCol := Canvas.Font.Color; + hibCol := Canvas.Brush.Color; + if Canvas.Brush.Style = bsClear then + hibCol := clNone; + + Canvas.Brush.Color := clHighLight; + Canvas.Font.Color := clHighLightText; + end; + end; + end; + end; + 'I':begin + TagChar := Upcase(s[3]); + + if TagChar = '>' then // tag + Canvas.Font.Style := Canvas.Font.Style + [fsItalic] + else + if TagChar = 'N' then // tag + begin + TagProp := Copy(s,3,pos('>',s) - 1); + + Prop := Copy(TagProp,ipos('x',TagProp) + 2,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + + val(Prop,indent,err); + if err = 0 then + begin + if indent > w then + begin + w := Indent; + cr.left := fr.left + Indent; + end; + end; + end + else + if TagChar = 'M' then + begin + inc(ImgIdx); + + TagProp := Copy(s,3,Pos('>',s) - 1); + Prop := Copy(TagProp,Pos('SRC',Uppercase(TagProp)) + 4,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + + TagProp := Uppercase(TagProp); + + if (Pos('ALT',TagProp) > 0) and (AltImg = ImgIdx) then + begin + Prop := Copy(TagProp,Pos('ALT',TagProp) + 4,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + end; + + TagWidth := 0; + TagHeight := 0; + + if Pos('WIDTH',TagProp) > 0 then + begin + Tagp := Copy(TagProp,Pos('WIDTH',TagProp) + 6,Length(TagProp)); + Tagp := Copy(Tagp,Pos('"',tagp) + 1,Length(Tagp)); + Tagp := Copy(Tagp,1,Pos('"',tagp) - 1); + Val(Tagp,TagWidth,Err); + end; + + if Pos('HEIGHT',TagProp) > 0 then + begin + Tagp := Copy(TagProp,ipos('HEIGHT',TagProp) + 7,Length(TagProp)); + Tagp := Copy(Tagp,pos('"',Tagp) + 1,Length(Tagp)); + Tagp := Copy(Tagp,1,pos('"',Tagp) - 1); + Val(Tagp,TagHeight,Err); + end; + + IMGSize.x := 0; + IMGSize.y := 0; + + if Pos('IDX:',Uppercase(Prop)) > 0 then + begin + Delete(Prop,1,4); + if Assigned(FImages) and (IStrToInt(Prop) < FImages.Count) then + begin + IMGSize.x := MulDiv(FImages.Width,GetDeviceCaps(Canvas.Handle,LOGPIXELSX),96); + IMGSize.y := MulDiv(FImages.Height,GetDeviceCaps(Canvas.Handle,LOGPIXELSY),96); + + if not Calc and not Print then + {$IFDEF DELPHI4_LVL} + FImages.Draw(Canvas,cr.Left,cr.Top,IStrToInt(Prop),True); + {$ELSE} + FImages.Draw(Canvas,cr.Left,cr.Top,IStrToInt(Prop)); + {$ENDIF} + + if not Calc and Print then + begin + cr.Right := cr.Left + Round(ResFactor * FImages.Width); + cr.Bottom := cr.Top + Round(ResFactor * FImages.Height); + + ABitmap := TBitmap.Create; + FImages.GetBitmap(IStrToInt(Prop),ABitmap); + PrintBitmap(Canvas,cr,ABitmap); + ABitmap.Free; + cr := r; + end; + end; + end; + + if Pos('SSYS:',Uppercase(Prop)) > 0 then + begin + Delete(Prop,1,5); + IMGSize := SysImage(Canvas,cr.Left,cr.Top,Prop,False,not Calc,Print,ResFactor); + + IMGSize.x := MulDiv(IMGSize.X,GetDeviceCaps(Canvas.Handle,LOGPIXELSX),96); + IMGSize.y := MulDiv(IMGSize.Y,GetDeviceCaps(Canvas.Handle,LOGPIXELSY),96); + end; + + if Pos('LSYS:',Uppercase(Prop)) > 0 then + begin + Delete(Prop,1,5); + IMGsize := SysImage(Canvas,cr.Left,cr.Top,Prop,True,not Calc,Print,ResFactor); + + IMGSize.x := MulDiv(IMGSize.X,GetDeviceCaps(Canvas.Handle,LOGPIXELSX),96); + IMGSize.y := MulDiv(IMGSize.Y,GetDeviceCaps(Canvas.Handle,LOGPIXELSY),96); + end; + + bmp := nil; + + if (Pos(':',Prop) = 0) and Assigned(pc) then + begin + bmp := pc.FindPicture(Prop); + end; + + if (Pos('://',Prop) > 0) and Assigned(ic) then + begin + if ic.FindPicture(Prop) = nil then + with ic.AddPicture do + begin + Asynch := False; + LoadFromURL(Prop); + end; + + bmp := ic.FindPicture(Prop); + end; + + if bmp <> nil then + begin + if not bmp.Empty then + begin + if not Calc {and not Print} then + begin + if (TagWidth > 0) and (TagHeight > 0) then + begin + bmp.Stretch := True; + {$IFNDEF TMSDOTNET} + Canvas.StretchDraw(Rect(cr.Left,cr.Top,cr.Left + TagWidth,cr.Top + TagHeight),bmp) + {$ENDIF} + {$IFDEF TMSDOTNET} + Canvas.StretchDraw(Borland.Vcl.Types.Rect(cr.Left,cr.Top,cr.Left + TagWidth,cr.Top + TagHeight),bmp) + {$ENDIF} + end + else + begin + + // need for animation - redraw background + if bmp.FrameCount > 1 then + begin + //Canvas.Pen.Color := BlnkColor; + //Canvas.Brush.Color := BlnkColor; + //Canvas.Rectangle(cr.Left,cr.Top,cr.Left + bmp.MaxWidth,cr.Top+bmp.MaxHeight); + end; + + Canvas.Draw(cr.Left + bmp.FrameXPos,cr.Top + bmp.FrameYPos,bmp); + end; + end; + + if (TagWidth > 0) and (TagHeight > 0) then + begin + IMGSize.x := MulDiv(TagWidth,GetDeviceCaps(Canvas.Handle,LOGPIXELSX),96); + IMGSize.y := MulDiv(TagHeight,GetDeviceCaps(Canvas.Handle,LOGPIXELSY),96); + end + else + begin + IMGSize.x := MulDiv(bmp.MaxWidth,GetDeviceCaps(Canvas.Handle,LOGPIXELSX),96); + IMGSize.y := MulDiv(bmp.MaxHeight,GetDeviceCaps(Canvas.Handle,LOGPIXELSY),96); + end; + end; + end; + + if (XPos - r.Left > w) and (XPos - r.Left < w + IMGSize.x) and + (YPos > cr.Top) and (YPos < cr.Top + IMGSize.Y) and Anchor then + begin + ImageHotSpot := True; + AnchorVal := LastAnchor; + AltImg := ImgIdx; + end; + + if Print then + begin + //IMGSize.x := Round(IMGSize.x * ResFactor); + //IMGSize.y := Round(IMGSize.y * ResFactor); + {$IFDEF TMSDEBUG} + DbgPoint('bmp : ',point(IMGSize.x,IMGSize.y)); + {$ENDIF} + end; + + oldh := h; + + if (w + IMGSize.x > r.Right-r.Left) and + (IMGSize.x < r.Right - r.Left) then + begin + ImgBreak := True; + end + else + begin + w := w + IMGSize.x; + cr.left := cr.left + IMGSize.x; + if IMGSize.y > h then + h := IMGSize.y; + end; + + if Pos('ALIGN',TagProp) > 0 then + begin + if Pos('"TOP',TagProp) > 0 then + begin + ImgAli := h - Canvas.TextHeight('gh'); + end + else + begin + if Pos('"MIDDLE',TagProp) > 0 then + ImgAli := (h - Canvas.TextHeight('gh')) shr 1; + end; + end; + + if (Pos('WRAP',TagProp) > 0) then + begin + h := Canvas.TextHeight('gh'); + ImgAli := 0; + end; + end; + end; + 'L':begin + w := w + 12 * ListIndex; + if Linkbreak then + Imgbreak := True else Linkbreak := True; + + cr.left := cr.left + 12 * (ListIndex - 1); + if not calc and not Invisible then + begin + Prop := Canvas.Font.Name; + Canvas.Font.Name := 'Symbol'; + + if Odd(ListIndex) then + DrawText(Canvas.Handle,'·',1,cr,0) + else + DrawText(Canvas.Handle,'o',1,cr,0); + + Canvas.Font.Name := prop; + end; + cr.Left := cr.Left + 12; + end; + 'U':begin + if s[3] <> '>' then + begin + Inc(ListIndex); + LineBreak := true; + end + else + Canvas.Font.Style := Canvas.Font.Style + [fsUnderline]; + end; + 'O':begin + TagChar := Upcase(s[3]); + if TagChar = 'F' then // tag + begin + TagProp := Copy(s,3,pos('>',s) - 1); + Prop := Copy(TagProp,ipos('x',TagProp) + 2,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + val(Prop,NewOffsetX,err); + cr.Left := NewOffsetX; + w := NewOffsetX; + end + end; + 'P':begin + if (VarPos('>',s,TagPos)>0) then + begin + TagProp := Uppercase(Copy(s,3,TagPos-1)); + + if VarPos('ALIGN',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos+5,Length(TagProp)); + Prop := Copy(Prop,Pos('"',prop)+1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',prop)-1); + + if Pos('RIGHT',Prop) > 0 then Align := taRightJustify; + if Pos('LEFT',Prop) > 0 then Align := taLeftJustify; + if Pos('CENTER',Prop) > 0 then Align := taCenter; + end; + + if VarPos('INDENT',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos+6,Length(TagProp)); + Prop := Copy(Prop,Pos('"',prop)+1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',prop)-1); + PIndent := IStrToInt(Prop); + end; + + if VarPos('BGCOLOR',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos + 5,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + + NewColor := clNone; + + if Length(Prop) > 0 then + begin + if Prop[1] = '#' then + NewColor := Hex2Color(Prop) + else + NewColor := Text2Color(AnsiLowerCase(prop)); + end; + + if VarPos('BGCOLORTO',TagProp,TagPos) > 0 then + begin + Prop := Copy(TagProp,TagPos + 5,Length(TagProp)); + Prop := Copy(Prop,Pos('"',Prop) + 1,Length(Prop)); + Prop := Copy(Prop,1,Pos('"',Prop) - 1); + NewColorTo := clNone; + + if Length(Prop) > 0 then + begin + if Prop[1] = '#' then + NewColorTo := Hex2Color(Prop) + else + NewColorTo := Text2Color(AnsiLowerCase(prop)); + end; + if not Calc then + begin + isPara := True; + Canvas.Pen.Color := Newcolor; + {$IFNDEF TMSDOTNET} + DrawHTMLGradient(Canvas,NewColor,NewColorTo,clNone,64,Rect(fr.left,r.top,fr.right,r.bottom+2),true); + {$ENDIF} + {$IFDEF TMSDOTNET} + DrawHTMLGradient(Canvas,NewColor,NewColorTo,clNone,64,Borland.Vcl.Types.Rect(fr.left,r.top,fr.right,r.bottom+2),true); + {$ENDIF} + Canvas.Brush.Style := bsClear + end; + end + else + begin + if not Calc then + begin + isPara := True; + paracolor := Canvas.Brush.Color; + if Canvas.Brush.Style = bsClear then ParaColor := clNone; + Canvas.Brush.color := NewColor; + PenColor := Canvas.Pen.Color; + Canvas.Pen.Color := Newcolor; + Canvas.Rectangle(fr.left,r.top,fr.right,r.bottom); + end; + end; + end; + end; + end; + 'F':begin + if (VarPos('>',s,TagPos)>0) then + begin + TagProp := UpperCase(Copy(s,6,TagPos-6)); + + if (VarPos('FACE',TagProp,TagPos) > 0) then + begin + Prop := Copy(TagProp,TagPos+4,Length(TagProp)); + Prop := Copy(prop,pos('"',prop)+1,Length(prop)); + Prop := Copy(prop,1,pos('"',prop)-1); + Canvas.Font.Name := Prop; + end; + + if (VarPos(' COLOR',TagProp,TagPos) > 0) and not Selected then + begin + Prop := Copy(TagProp,TagPos+6,Length(TagProp)); + Prop := Copy(Prop,Pos('"',prop)+1,Length(prop)); + Prop := Copy(Prop,1,Pos('"',prop)-1); + //oldfont.color:=Canvas.font.color; + + if Length(Prop) > 0 then + begin + if Prop[1] = '#' then + Canvas.font.color := Hex2Color(Prop) + else + Canvas.Font.Color := Text2Color(AnsiLowerCase(prop)); + end; + + end; + + if (VarPos('BGCOLOR',TagProp,TagPos)>0) and not Calc and not Selected then + begin + Prop := Copy(TagProp,TagPos+7,Length(TagProp)); + Prop := Copy(prop,pos('"',prop)+1,Length(prop)); + Prop := Copy(prop,1,pos('"',prop)-1); + BGColor := Canvas.Brush.Color; + + if Canvas.Brush.Style = bsClear then + bgcolor := clNone; + + if Length(Prop) > 0 then + begin + if Prop[1] = '#' then + Canvas.Brush.Color := Hex2Color(Prop) + else + Canvas.Brush.Color := Text2Color(AnsiLowerCase(prop)); + end; + + end; + + if (VarPos('SIZE',TagProp,TagPos)>0) then + begin + Prop := Copy(TagProp,TagPos+4,Length(TagProp)); + Prop := Copy(Prop,Pos('=',Prop)+1,Length(Prop)); + Prop := Copy(Prop,Pos('"',Prop)+1,Length(Prop)); + + case IStrToInt(Prop) of + 1:Canvas.Font.Size := 8; + 2:Canvas.Font.Size := 10; + 3:Canvas.Font.Size := 12; + 4:Canvas.Font.Size := 14; + 5:Canvas.Font.Size := 16; + else + Canvas.Font.Size := IStrToInt(Prop); + end; + + end; + end; + end; + 'S':begin + TagChar := Upcase(s[3]); + + if TagChar = '>' then + Canvas.Font.Style := Canvas.font.Style + [fsStrikeOut] + else + begin + if TagChar = 'H' then + isShad := True + else + begin + if ipos('',s)=1 then + isSub := True + else + if ipos('',s)=1 then + isSup := True; + end; + end; + end; + 'R':begin + TagProp := Copy(s,3,pos('>',s)-1); + prop := Copy(TagProp,ipos('a',TagProp)+2,Length(TagProp)); + prop := Copy(prop,pos('"',prop)+1,Length(prop)); + prop := Copy(prop,1,pos('"',prop)-1); + Val(prop,Indent,err); + StartRotated(Canvas,indent); + end; + 'Z':Invisible := True; + end; + end; + + if (VarPos('>',s,TagPos)>0) and not ImgBreak then + begin + Res := Res + Copy(s,1,TagPos); + Delete(s,1,TagPos); + end + else + if not Imgbreak then + Delete(s,1,Length(s)); + end; + end; + + w := w - sw; + + if w > xsize then + xsize := w + 2; + + if (FocusLink = Hyperlinks - 1) and Anchor and not Calc then + begin + rr.Right := cr.Left; + rr.Bottom := cr.Bottom; + InflateRect(rr,1,0); + if not Calc then + Canvas.DrawFocusRect(rr); + rr.Left := r.Left + 1; + rr.Top := rr.Bottom; + end; + + Result := Res; + end; + + +begin + Anchor := False; + Error := False; + OldFont := TFont.Create; + OldFont.Assign(Canvas.Font); + DrawFont := TFont.Create; + DrawFont.Assign(Canvas.Font); + CalcFont := TFont.Create; + CalcFont.Assign(Canvas.Font); + OldDrawfont := TFont.Create; + OldDrawFont.Assign(Canvas.Font); + OldCalcFont := TFont.Create; + OldCalcFont.Assign(Canvas.Font); + BlnkColor := Canvas.Brush.color; + Canvas.Brush.Color := clNone; + BGColor := clNone; + ParaColor := clNone; + isPara := False; + isShad := False; + Invisible := False; + + OfsX := 0; + NewOfsX := 0; + + Result := False; + + r := fr; + r.Left := r.Left + 1; {required to add offset for DrawText problem with first capital W letter} + + Align := taLeftJustify; + PIndent := 0; + + XSize := 0; + YSize := 0; + HyperLinks := 0; + HlCount := 0; + ListIndex := 0; + LiCount := 0; + StripVal := ''; + FocusAnchor := ''; + MouseLink := -1; + MouseInAnchor := False; + + ImgIdx := 0; + AltImg := -1; + + SetBKMode(Canvas.Handle,TRANSPARENT); + + DrawStyle := DT_LEFT or DT_SINGLELINE or DT_EXTERNALLEADING or DT_BOTTOM or DT_EXPANDTABS; // or DT_NOPREFIX; + + if Pos(' & ',s) > 0 then + DrawStyle := DrawStyle or DT_NOPREFIX; + + + if not WordWrap then + DrawStyle := DrawStyle or DT_END_ELLIPSIS; + + if Pos('&',s) > 0 then + begin + repeat + Foundtag := False; + //if TagReplacestring('<','<',s) then Foundtag := True; + //if TagReplacestring('>','>',s) then Foundtag := True; + + if TagReplacestring('&','&&',s) then Foundtag := True; + if TagReplacestring('"','"',s) then Foundtag := True; + + if TagReplacestring('§','§',s) then Foundtag := True; + if TagReplacestring('‰','®‰',s) then Foundtag := True; + if TagReplacestring('®','®',s) then Foundtag := True; + + if TagReplacestring('©','©',s) then Foundtag := True; + if TagReplacestring('¶','¶',s) then Foundtag := True; + + if TagReplacestring('™','™',s) then Foundtag := True; + if TagReplacestring('€','€',s) then Foundtag := True; + + until not Foundtag; + end; + + s := DBTagStrip(s); + s := CRLFStrip(s,True); + + InsPoint := 0; + + while Length(s) > 0 do + begin + {calculate part of the HTML text fitting on the next line} + Oldfont.Assign(OldCalcFont); + Canvas.Font.Assign(CalcFont); + Oldanchor := Anchor; + OldAnchorVal := LastAnchor; + suph := 0; + subh := 0; + imgali := 0; + isSup := False; + isSub := False; + + HtmlHeight := Canvas.TextHeight('gh'); + txtHeight := HtmlHeight; + + OldImgIdx := ImgIdx; + + su := HTMLDrawLine(Canvas,s,r,True,HtmlWidth,HtmlHeight,subh,suph,imgali,Align,PIndent,XPos,YPos,HotSpot,ImageHotSpot,ofsx,newofsx); + + Anchor := OldAnchor; + LastAnchor := OldAnchorVal; + + CalcFont.Assign(Canvas.Font); + OldCalcFont.Assign(OldFont); + + HTMLHeight := HTMLHeight + LineSpacing; + + dr := r; + + case Align of + taCenter:if (r.right - r.left - htmlwidth > 0) then + dr.left := r.left+((r.right - r.left - htmlwidth) shr 1); + taRightJustify:if r.right - htmlwidth > r.left then + dr.left := r.right - htmlwidth; + end; + + dr.Left := dr.Left + PIndent; + + dr.Bottom := dr.Top + HtmlHeight + Subh + Suph; + + if not CheckHeight then + begin + OldFont.Assign(OldDrawFont); + Canvas.Font.Assign(DrawFont); + + HyperLinks := HlCount; + ListIndex := LiCount; + ImgIdx := OldImgIdx; + + HTMLDrawLine(Canvas,su,dr,CheckHotSpot,HtmlWidth,HtmlHeight,subh,suph,ImgAli,Align,PIndent,XPos,YPos,HotSpot,ImageHotspot,ofsx,newofsx); + + HlCount := HyperLinks; + LiCount := ListIndex; + + if (HotSpot and + (YPos > dr.Bottom - ImgAli - Canvas.TextHeight('gh')) and + (YPos < dr.Bottom - ImgAli)) or ImageHotSpot then + begin + Result := True; + end; + + ofsx := newofsx; + + DrawFont.Assign(Canvas.Font); + OldDrawFont.Assign(OldFont); + end; + + r.top := r.top + HtmlHeight + subh + suph; + ysize := ysize + HtmlHeight + subh + suph; + + {do not draw below bottom} + if (r.top + TxtHeight > r.bottom) and not CheckHeight then + s := ''; + end; + + if (ysize = 0) then + ysize := Canvas.TextHeight('gh'); + + //ysize := ysize + 2; + + InsPoint := InsPoint shr 1; + + Canvas.Brush.Color := BlnkColor; + Canvas.Font.Assign(OldFont); + OldFont.Free; + DrawFont.Free; + CalcFont.Free; + OldDrawfont.Free; + OldCalcfont.Free; +end; +{$WARNINGS ON} + +{$IFNDEF REMOVEDRAW} +function HTMLDraw(Canvas:TCanvas;s:string;fr:trect; + FImages:TImageList; + xpos,ypos:integer; + checkhotspot,checkheight,print,selected,blink:boolean; + resfactor:double; + URLColor:tcolor; + var Anchorval,StripVal:string; + var XSize,YSize:integer):boolean; +var + HyperLinks,MouseLink: Integer; + Focusanchor: string; + r: TRect; +begin + Result := HTMLDrawEx(Canvas,s,fr,FImages,xpos,ypos,-1,-1,1,checkhotspot,checkheight,print,selected,blink,false, + False,resfactor,URLColor,clNone,clNone,clGray,anchorval,stripval,focusanchor,xsize,ysize,HyperLinks,MouseLink,r,nil,nil,0); +end; + +{$IFNDEF REMOVEIPOSFROM} +function IPosFrom(su,s:string;frm:integer):Integer; +var + i:Integer; +begin + i := Pos(UpperCase(su),UpperCase(s)); + if i > frm then + Result := i + else + Result := 0; +end; +{$ENDIF} + +{$ENDIF} + + +{$IFNDEF DELPHI4_LVL} +function StringReplace(const S, OldPattern, NewPattern: string): string; +var + SearchStr, Patt, NewStr: string; + Offset: Integer; +begin + SearchStr := S; + Patt := OldPattern; + + NewStr := S; + Result := ''; + while SearchStr <> '' do + begin + {$IFDEF DELPHI3_LVL} + Offset := AnsiPos(Patt, SearchStr); + {$ELSE} + Offset := Pos(Patt, SearchStr); + {$ENDIF} + + if Offset = 0 then + begin + Result := Result + NewStr; + Break; + end; + Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern; + NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt); + Result := Result + NewStr; + Break; + end; +end; +{$ENDIF} + +{$IFNDEF REMOVESTRIP} + +function HTMLStrip(s:string):string; +var + TagPos: integer; +begin + Result := ''; + // replace line breaks by linefeeds + {$IFNDEF DELPHI4_LVL} + while (pos('
    ',uppercase(s))>0) do s := StringReplace(s,'
    ',chr(13)+chr(10)); + while (pos('
    ',uppercase(s))>0) do s := StringReplace(s,'
    ',chr(13)+chr(10)); + while (pos('
    ',uppercase(s))>0) do s := StringReplace(s,'
    ',chr(13)+chr(10)); + while (pos('
    ',uppercase(s))>0) do s := StringReplace(s,'
    ',chr(13)+chr(10)); + {$ELSE} + while (pos('
    ',uppercase(s))>0) do s := StringReplace(s,'
    ',chr(13)+chr(10),[rfIgnoreCase]); + while (pos('
    ',uppercase(s))>0) do s := StringReplace(s,'
    ',chr(13)+chr(10),[rfIgnoreCase]); + {$ENDIF} + + while (VarPos('',s,TagPos) > 0) do + begin + Result := Result + Copy(s,1,TagPos - 1); // copy till Z tag + if (VarPos('',s,TagPos) > 0) then + Delete(s,1,TagPos + 3) + else + Break; + end; + + while (VarPos('',s,TagPos) > 0) do + begin + Result := Result + Copy(s,1,TagPos - 1); // copy till Z tag + if (VarPos('',s,TagPos) > 0) then + Delete(s,1,TagPos + 3) + else + Break; + end; + + + // remove all other tags + while (VarPos('<',s,TagPos) > 0) do + begin + Result := Result + Copy(s,1,TagPos - 1); + if (VarPos('>',s,TagPos)>0) then + Delete(s,1,TagPos) + else + Break; + end; + Result := Result + s; +end; +{$ENDIF} + +{$IFDEF HILIGHT} + +function HTMLStripAll(s:string):string; +var + TagPos: integer; +begin + Result := ''; + + // remove all tags + while (VarPos('<',s,TagPos)>0) do + begin + Result := Result + Copy(s,1,TagPos-1); + if (VarPos('>',s,TagPos)>0) then + Delete(s,1,TagPos); + end; + Result := Result + s; +end; + +function StripPos2HTMLPos(s:string; i: Integer): Integer; +var + j,k: Integer; + Skip: Boolean; +begin + Result := 0; + k := 1; + Skip := False; + + for j := 1 to Length(s) do + begin + if s[j] = '<' then + Skip := True; + + if k = i then + begin + Result := j; + Exit; + end; + + if not Skip then + Inc(k); + + if s[j] = '>' then + Skip := False; + + end; + + if k = i then + begin + Result := Length(s) + 1; + end; +end; + + +function PosFrom(su,s:string; h: Integer;DoCase: boolean; var Res: Integer): Integer; +var + r: Integer; +begin + Result := 0; + Res := 0; + + if h > 0 then + Delete(s,1,h); + + if DoCase then + r := Pos(su,s) + else + r := Pos(UpperCase(su),UpperCase(s)); + + if r > 0 then + begin + Res := h + r; + Result := Res; + end; +end; + +function HiLight(s,h,tag:string;DoCase:boolean):string; +var + hs: string; + l,k: Integer; +begin + hs := HTMLStripAll(s); + + l := 0; + + while PosFrom(h,hs,l,DoCase,k) > 0 do + begin + l := k + Length(h); + Insert('<'+tag+'>',s,StripPos2HTMLPos(s,k)); + Insert('',s,StripPos2HTMLPos(s,l)); + end; + + Result := s; +end; + +function UnHiLight(s,tag:string):string; +begin + Result := ''; + // replace line breaks by linefeeds + {$IFNDEF DELPHI4_LVL} + while Pos('<'+tag+'>',s) > 0 do s := StringReplace(s,'<'+tag+'>',''); + while Pos('',s) > 0 do s := StringReplace(s,'',''); + tag := Uppercase(tag); + while Pos('<'+tag+'>',s) > 0 do s := StringReplace(s,'<'+tag+'>',''); + while Pos('',s) > 0 do s := StringReplace(s,'',''); + {$ELSE} + tag := Uppercase(tag); + while Pos('<'+tag+'>',Uppercase(s)) > 0 do s := StringReplace(s,'<'+tag+'>','',[rfIgnoreCase]); + while Pos('',Uppercase(s)) > 0 do s := StringReplace(s,'','',[rfIgnoreCase]); + {$ENDIF} + Result := s; +end; + +{$ENDIF} + +{$IFDEF PARAMS} + +function IPosv(su,s:string;var vp:integer):integer; +begin + vp := pos(UpperCase(su),UpperCase(s)); + Result := vp; +end; + + +function GetHREFValue(html,href:string;var value:string):boolean; +var + lp: Integer; +begin + Result := False; + while IPosv('href="',html,lp) > 0 do + begin + Delete(html,1,lp+5); {delete all before} + if IPosv('"',html,lp) > 0 then + begin + if CompareText(href,copy(html,1,lp-1))=0 then + begin + {href match - get the value now} + Delete(html,1,lp); + if (iposv('>',html,lp)>0) then + begin + Delete(html,1,lp); + if (iposv('<',html,lp)>0) then + begin + Value := Copy(html,1,lp-1); + Result := True; + Break; + end; + end; + end; + end; + end; +end; + + +function SetHREFValue(var html:string;href,value:string):boolean; +var + h:string; + p:string; +begin + {get current value and do a stringreplace} + + Result := False; + if GetHREFValue(html,href,h) then + begin + p := Copy(html,pos('href="' + href,html),Length(html)); + + {$IFNDEF DELPHI4_LVL} + p := StringReplace(p,'>' + h + '' + value + '' + h + '' + value + ' 0) then + begin + //manipulate the stream here for animated GIF ? + Gifstream := TMemoryStream.Create; + + ImgIdx := 1; + SkipImg := False; + + FDataStream.Position := 6; + FDataStream.Read(FAnimMaxX,2); + FDataStream.Read(FAnimMaxY,2); + + for i := 1 to FDataStream.Size do + begin + FDataStream.Position := i - 1; + FDataStream.Read(b,1); + + if (b = $21) and (i + 8 < FDataStream.Size) then + begin + FDataStream.Read(c,1); + FDataStream.Read(d,1); + FDataStream.Position := FDataStream.Position + 5; + + FDataStream.Read(e,1); + if (c = $F9) and (d = $4) and (e = $2C) then + begin + if imgidx = FFrame then + begin + FDataStream.Read(FFrameXPos,2); + FDataStream.Read(FFrameYPos,2); + FDataStream.Read(FFrameXSize,2); + FDataStream.Read(FFrameYSize,2); + end; + + Inc(ImgIdx); + if ImgIdx <= FFrame then + SkipImg := True + else + SkipImg := False; + end; + end; + if not SkipImg then GifStream.Write(b,1); + end; + GifStream.Position := 0; + GifStream.ReadBuffer(pvData^,GifStream.Size); + GifStream.Free; + end + else + begin + FDataStream.ReadBuffer(pvData^,fDataStream.Size); + end; + + GlobalUnlock(hGlobal); + + pstm := nil; + + // Create IStream* from global memory + hr := CreateStreamOnHGlobal(hGlobal, TRUE, pstm); + + if (not hr=S_OK) then + raise Exception.Create('Could not create image stream') + else + if (pstm = nil) then + raise Exception.Create('Empty image stream created'); + + // Create IPicture from image file + hr := OleLoadPicture(pstm, FDataStream.Size,FALSE,IID_IPicture,gpPicture); + + if not (hr = S_OK) then + raise Exception.Create('Could not load image. Invalid format') + else + if gpPicture = nil then + raise Exception.Create('Could not load image'); + + finally + GlobalFree(hGlobal); + end; + {$ENDIF} +end; + +procedure THTMLPicture.Draw(ACanvas: TCanvas; const Rect: TRect); +var + hmWidth:integer; + hmHeight:integer; + nPixX,nPixY:integer; + pnWidth,pnHeight:integer; + +begin + if Empty then Exit; + + if gpPicture = nil then Exit; + + hmWidth := 0; + hmHeight := 0; + gpPicture.get_Width(hmWidth); + gpPicture.get_Height(hmHeight); + + if Stretch then + begin + gpPicture.Render(ACanvas.Handle,Rect.Left,Rect.Bottom,Rect.Right - Rect.Left,-(Rect.Bottom - Rect.Top),0,0, + hmWidth,hmHeight, Rect); + end + else + begin + nPixX := GetDeviceCaps(ACanvas.Handle,LOGPIXELSX); + nPixY := GetDeviceCaps(ACanvas.Handle,LOGPIXELSY); + //Convert to device units + pnWidth := MulDiv(hmWidth, nPixX, HIMETRIC_INCH); + pnHeight := MulDiv(hmHeight, nPixY, HIMETRIC_INCH); + + //gpPicture.Render(ACanvas.Handle,Rect.Left,Rect.Top + pnHeight,pnWidth,-pnHeight,0,0, + // hmWidth,hmHeight, Rect); + gpPicture.Render(ACanvas.Handle,Rect.Left,Rect.Top, + pnWidth,pnHeight,0,hmHeight, hmWidth,-hmHeight, Rect); + end; + +end; + +function THTMLPicture.GetEmpty: Boolean; +begin + Result := FIsEmpty; +end; + +function THTMLPicture.GetHeight: integer; +var + hmHeight:integer; +begin + if gpPicture = nil then + Result := 0 + else + begin + gpPicture.get_Height(hmHeight); + Result := MulDiv(hmHeight, FLogPixY, HIMETRIC_INCH); + end; +end; + +function THTMLPicture.GetWidth: Integer; +var + hmWidth: Integer; +begin + if gpPicture = nil then + Result := 0 + else + begin + gpPicture.get_Width(hmWidth); + Result := MulDiv(hmWidth, FLogPixX, HIMETRIC_INCH); + end; +end; + +procedure THTMLPicture.LoadFromFile(const FileName: string); +begin + try + FDataStream.LoadFromFile(Filename); + FIsEmpty:=false; + LoadPicture; + if Assigned(OnChange) then + OnChange(self); + except + FIsEmpty:=true; + end; +end; + +procedure THTMLPicture.LoadFromStream(Stream: TStream); +begin + if Assigned(Stream) then + begin + FDataStream.LoadFromStream(Stream); + FIsEmpty := False; + LoadPicture; + if Assigned(OnChange) then + OnChange(self); + end; +end; + +procedure THTMLPicture.ReadData(Stream: TStream); +begin + + if assigned(Stream) then + begin + fDataStream.LoadFromStream(stream); + fIsEmpty:=false; + LoadPicture; + end; +end; + +procedure THTMLPicture.SaveToStream(Stream: TStream); +begin + if Assigned(Stream) then fDataStream.SaveToStream(Stream); +end; + +procedure THTMLPicture.LoadFromResourceName(Instance: THandle; const ResName: string); +var + Stream: TCustomMemoryStream; +begin + {$IFNDEF TMSDOTNET} + if FindResource(Instance,pchar(ResName),RT_RCDATA)<>0 then + {$ENDIF} + {$IFDEF TMSDOTNET} + if FindResource(Instance,ResName,RT_RCDATA)<>0 then + {$ENDIF} + begin + Stream := TResourceStream.Create(Instance, ResName, RT_RCDATA); + try + LoadFromStream(Stream); + finally + Stream.Free; + end; + end; +end; + +procedure THTMLPicture.LoadFromResourceID(Instance: THandle; ResID: Integer); +var + Stream: TCustomMemoryStream; +begin + Stream := TResourceStream.CreateFromID(Instance, ResID, RT_RCDATA); + try + LoadFromStream(Stream); + finally + Stream.Free; + end; +end; + + +procedure THTMLPicture.SetHeight(Value: integer); +begin + +end; + +procedure THTMLPicture.SetWidth(Value: integer); +begin + +end; + +procedure THTMLPicture.WriteData(Stream: TStream); +begin + if Assigned(Stream) then + begin + FDataStream.savetostream(stream); + end; +end; + +procedure THTMLPicture.LoadFromURL(url: string); +var + UUrl: string; +begin + UUrl := UpperCase(url); + + if Pos('RES://',UUrl) = 1 then + begin + ID := url; + Delete(url,1,6); + if url <> '' then + LoadFromResourceName(hinstance,url); + Exit; + end; + + if Pos('FILE://',Uurl) = 1 then + begin + ID := url; + Delete(url,1,7); + if url <> '' then + LoadFromFile(url); + Exit; + end; + + if FAsynch then + begin + if FThreadBusy then + Exit; + FURL := url; + FThreadBusy := True; + TDownLoadThread.Create(self); + end + else + begin + FURL := url; + ID := url; + {$IFDEF USEWININET} + DownLoad; + {$ENDIF} + end; +end; + +{$IFDEF USEWININET} +procedure THTMLPicture.DownLoad; +var + RBSIZE:dword; + httpstatus,httpsize,err:integer; + dwIdx:dword; + dwBufSize:dword; + ms:TMemoryStream; + len:dword; + cbuf:array[0..255] of char; + rb:array[0..4095] of byte; + + FISession:hinternet; + FIHttp:hinternet; + Cancel:boolean; + +begin + fISession:=InternetOpen('HTMLImage',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0); + if (fISession=nil) then + begin + DownLoadError('Cannot open internet session'); + fThreadBusy:=false; + Exit; + end; + + fIHttp:=InternetOpenURL(fISession,pchar(furl),nil,0, + INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_RELOAD,0); + + if (fIHttp=nil) then + begin + InternetCloseHandle(fISession); + DownLoadError('Cannot open http connection'); + fThreadBusy:=false; + Exit; + end; + + dwBufSize := SizeOf(cbuf); + dwidx := 0; + HttpQueryInfo(fIHttp,HTTP_QUERY_STATUS_CODE,@cbuf,dwBufSize,dwIdx); + + val(cbuf,httpstatus,err); + if (httpstatus <> 200) or (err <> 0) then + begin + InternetCloseHandle(fISession); + InternetCloseHandle(fIHttp); + DownLoadError('Cannot open URL '+furl); + FThreadBusy:=false; + Exit; + end; + + dwBufSize := SizeOf(cbuf); + dwidx := 0; + HttpQueryInfo(fIHttp,HTTP_QUERY_CONTENT_TYPE,@cbuf,dwBufSize,dwIdx); + + if Pos('IMAGE',UpperCase(StrPas(cbuf))) = 0 then + begin + InternetCloseHandle(fISession); + InternetCloseHandle(fIHttp); + DownLoadError('Resource is not of image type : ' + FUrl); + fThreadBusy := false; + Exit; + end; + + dwBufSize := SizeOf(cbuf); + dwidx := 0; + HttpQueryInfo(fIHttp,HTTP_QUERY_CONTENT_LENGTH,@cbuf,dwBufSize,dwIdx); + + val(cbuf,httpsize,err); + if (httpsize = 0) or (err <> 0) then + begin + InternetCloseHandle(fISession); + InternetCloseHandle(fIHttp); + DownLoadError('Image size is 0'); + fThreadBusy:=false; + Exit; + end; + + DownLoadProgress(0,httpsize); + + len := 4096; + RBSIZE := 4096; + + ms := TMemoryStream.Create; + + cancel:=false; + + while (len=RBSIZE) and not Cancel do + begin + InternetReadFile(fIHttp,@rb,RBSIZE,len); + if len>0 then ms.WriteBuffer(rb,len); + DownLoadProgress(ms.Size,httpsize); + DownLoadCancel(cancel); + end; + + if not cancel then + begin + ms.Position := 0; + LoadFromStream(ms); + end; + + ms.Free; + + InternetCloseHandle(fIHttp); + InternetCloseHandle(fISession); + FThreadBusy:=false; +end; +{$ENDIF} + +procedure THTMLPicture.DownLoadCancel(var cancel: boolean); +begin + if assigned(FOnDownLoadCancel) then + FOnDownLoadCancel(self,cancel); +end; + +procedure THTMLPicture.DownLoadComplete; +begin + if Assigned(FOnDownLoadComplete) then + FOnDownLoadComplete(self); +end; + +procedure THTMLPicture.DownLoadError(err: string); +begin + if Assigned(fOnDownloadError) then + FOnDownLoadError(self,err); +end; + +procedure THTMLPicture.DownLoadProgress(dwSize, dwTotSize: dword); +begin + if Assigned(FOnDownLoadProgress) then + FOnDownLoadProgress(self,dwSize,dwTotSize); +end; + + +procedure THTMLPicture.LoadFromClipboardFormat(AFormat: Word; + AData: THandle; APalette: HPALETTE); +begin +end; + +procedure THTMLPicture.SaveToClipboardFormat(var AFormat: Word; + var AData: THandle; var APalette: HPALETTE); +begin +end; + +function THTMLPicture.GetFrameCount: Integer; +var + i: Integer; + b,c,d,e: Byte; + Res: Integer; +begin + Result := -1; + + if FFrameCount <> -1 then + Result := FFrameCount + else + if IsGIFFile then + begin + Res := 0; + for i := 1 to FDataStream.Size do + begin + FDataStream.Position := i - 1; + FDataStream.Read(b,1); + if (b = $21) and (i + 8 < FDataStream.Size) then + begin + FDataStream.Read(c,1); + FDataStream.Read(d,1); + FDataStream.Position := FDataStream.Position+5; + FDataStream.Read(e,1); + if (c = $F9) and (d = $4) and (e = $2C) then Inc(res); + end; + end; + FFrameCount := Res; + Result := Res; + FDataStream.Position := 0; + end; +end; + +function THTMLPicture.IsGIFFile: Boolean; +var + buf: array[0..4] of char; +begin + Result := False; + if FDataStream.Size>4 then + begin + FDataStream.Position := 0; + {$IFNDEF TMSDOTNET} + FDataStream.Read(buf,4); + buf[4] := #0; + Result := Strpas(buf) = 'GIF8'; + {$ENDIF} + FDataStream.Position := 0; + + end; +end; + +function THTMLPicture.GetFrameTime(i: Integer): Integer; +var + j: Integer; + b,c,d,e: Byte; + res: Integer; + ft: Word; + +begin + Result := -1; + + if IsGIFFile then + begin + Res := 0; + for j := 1 to FDataStream.Size do + begin + FDataStream.Position := j-1; + FDataStream.Read(b,1); + if (b = $21) and (i + 8 < FDataStream.Size) then + begin + FDataStream.Read(c,1); + FDataStream.Read(d,1); + FDataStream.Read(b,1); + {transp. flag here} + + FDataStream.Read(ft,2); + FDataStream.Position := FDataStream.Position + 2; + + FDataStream.Read(e,1); + if (c = $F9) and (d = $4) and (e = $2C) then + begin + Inc(res); + if res = i then + begin + Result := ft; + FFrameTransp := b and $01=$01; + FFrameDisposal := (b shr 3) and $7; + end; + end; + end; + end; + end; + FDataStream.Position := 0; +end; + +function THTMLPicture.GetMaxHeight: Integer; +var + hmHeight: Integer; +begin + {$IFNDEF TMSDOTNET} + if gpPicture = nil then + Result := 0 + else + begin + if FAnimMaxY>0 then Result:=FAnimMaxY + else + begin + gpPicture.get_Height(hmHeight); + Result := MulDiv(hmHeight, fLogPixY, HIMETRIC_INCH); + end; + end; + {$ENDIF} +end; + +function THTMLPicture.GetMaxWidth: Integer; +var + hmWidth: Integer; +begin + if gpPicture = nil then + Result := 0 + else + begin + if FAnimMaxX > 0 then + Result := FAnimMaxX + else + begin + gpPicture.get_Width(hmWidth); + Result := MulDiv(hmWidth, fLogPixX, HIMETRIC_INCH); + end; + end; +end; + + +procedure THTMLPicture.SetFrame(const Value: Integer); +begin + FFrame := Value; + if FDataStream.Size > 0 then + begin + LoadPicture; + if Assigned(OnFrameChange) then + OnFrameChange(self); + end; +end; + +procedure THTMLPicture.FrameNext; +begin + if FFrame < FFrameCount then + Inc(FFrame) + else + FFrame := 1; +end; + +function THTMLPicture.Step: Boolean; +begin + Result := False; + if (FFrameCount <= 1) or FIsEmpty then + Exit; + + if FNextCount = -1 then + FrameTime[FFrame]; + + if FTimerCount*10 >= FNextCount then + begin + FrameNext; + LoadPicture; + FNextCount := FNextCount + FrameTime[FFrame]; + Result := True; + end; + + Inc(FTimerCount); +end; + +procedure THTMLPicture.FramePrev; +begin + if FFrame > 1 then + Dec(FFrame) + else + FFrame := FFrameCount; +end; + +function THTMLPicture.GetStretched: boolean; +begin + Result := FStretched; +end; + +procedure THTMLPicture.SetStretched(const Value: boolean); +begin + FStretched := Value; +end; + +{ THTMLImage } + +constructor THTMLImage.Create(aOwner: TComponent); +begin + inherited; + fHTMLPicture:=THTMLPicture.Create; + fHTMLPicture.OnChange:=PictureChanged; + Width:=100; + Height:=100; + fHTMLPicture.OnDownLoadError:=DownLoadError; + fHTMLPicture.OnDownLoadCancel:=DownLoadCancel; + fHTMLPicture.OnDownLoadProgress:=DownLoadProgress; + fHTMLPicture.OnDownLoadComplete:=DownLoadComplete; +end; + +destructor THTMLImage.Destroy; +begin + fHTMLPicture.Free; + inherited; +end; + +procedure THTMLImage.Loaded; +begin + inherited; + fHTMLPicture.fLogPixX := GetDeviceCaps(canvas.handle,LOGPIXELSX); + fHTMLPicture.fLogPixY := GetDeviceCaps(canvas.handle,LOGPIXELSY); +end; + +procedure THTMLImage.Paint; +var + xo,yo:integer; + + function Max(a,b:integer):integer; + begin + if (a>b) then result:=a else result:=b; + end; + +begin + inherited; + if assigned(fHTMLPicture) then + begin + if not fHTMLPicture.Empty then + case fPicturePosition of + bpTopLeft:Canvas.Draw(0,0,fHTMLPicture); + bpTopRight:Canvas.Draw(Max(0,width-fHTMLPicture.Width),0,fHTMLPicture); + bpBottomLeft:Canvas.Draw(0,Max(0,height-fHTMLPicture.Height),fHTMLPicture); + bpBottomRight:Canvas.Draw(Max(0,width-fHTMLPicture.Width),Max(0,height-fHTMLPicture.Height),fHTMLPicture); + bpCenter:Canvas.Draw(Max(0,width-fHTMLPicture.Width) shr 1,Max(0,height-fHTMLPicture.Height) shr 1,fHTMLPicture); + bpTiled:begin + yo:=0; + while (yo Value) then + begin + fPicturePosition := Value; + Invalidate; + end; +end; + +procedure THTMLImage.DownLoadCancel(Sender: TObject; var cancel: boolean); +begin + if assigned(fOnDownLoadCancel) then fOnDownLoadCancel(self,cancel); +end; + +procedure THTMLImage.DownLoadComplete(Sender: TObject); +begin + if assigned(fOnDownLoadComplete) then fOnDownLoadComplete(self); +end; + +procedure THTMLImage.DownLoadError(Sender: TObject; err: string); +begin + if Assigned(FOnDownloadError) then + FOnDownLoadError(self,err); +end; + +procedure THTMLImage.DownLoadProgress(Sender: TObject; dwSize, + dwTotSize: dword); +begin + if Assigned(FOnDownLoadProgress) then + FOnDownLoadProgress(self,dwSize,dwTotSize); +end; + +{ TDownLoadThread } + +constructor TDownLoadThread.Create(aHTMLPicture: THTMLPicture); +begin + inherited Create(false); + HTMLPicture := aHTMLPicture; + FreeOnTerminate := True; +end; + +procedure TDownLoadThread.Execute; +begin + {$IFDEF USEWININET} + HTMLPicture.DownLoad; + {$ENDIF} +end; + +{ THTMLPictureCache } + +destructor THTMLPictureCache.Destroy; +begin + ClearPictures; + inherited; +end; + +function THTMLPictureCache.AddPicture: THTMLPicture; +begin + Result := THTMLPicture.Create; + {$IFNDEF TMSDOTNET} + Add(pointer(result)); + {$ENDIF} + {$IFDEF TMSDOTNET} + Add(TObject(Result)); + {$ENDIF} +end; + +procedure THTMLPictureCache.ClearPictures; +var + i: Integer; +begin + for i := 1 to Count do + Items[i - 1].Free; + + Clear; + //inherited; +end; + +function THTMLPictureCache.FindPicture(ID: string): THTMLPicture; +var + i: Integer; +begin + Result := nil; + for i := 1 to Count do + begin + if (Items[i - 1].ID = ID) then + begin + Result := Items[i - 1]; + Break; + end; + end; +end; + +function THTMLPictureCache.GetPicture(Index: Integer): THTMLPicture; +begin + Result := THTMLPicture(inherited Items[Index]); +end; + +procedure THTMLPictureCache.SetPicture(Index: Integer; Value: THTMLPicture); +begin + {$IFNDEF TMSDOTNET} + inherited Items[index] := Pointer(Value); + {$ENDIF} + {$IFDEF TMSDOTNET} + inherited Items[index] := Value; + {$ENDIF} +end; + +function THTMLPictureCache.Animate: Boolean; +var + i: Integer; +begin + Result := False; + for i := 1 to Count do + begin + if Items[i - 1].Step then + Result := True; + end; +end;