From f4b3d937f8e725fe5e4baa5264474566c9b28005 Mon Sep 17 00:00:00 2001 From: Daso Date: Wed, 10 Jan 2024 21:50:38 +0100 Subject: [PATCH] Init --- Demos/Main/1.fr3 | 28 + Demos/Main/10.FR3 | 57 + Demos/Main/100.fr3 | 19 + Demos/Main/101.fr3 | 51 + Demos/Main/102.fr3 | 13 + Demos/Main/103.fr3 | 8 + Demos/Main/104.fr3 | 19 + Demos/Main/105.fr3 | 35 + Demos/Main/11.FR3 | 20 + Demos/Main/12.FR3 | 28 + Demos/Main/13.fr3 | 8 + Demos/Main/2.fr3 | 32 + Demos/Main/21.FR3 | 11 + Demos/Main/22.FR3 | 51 + Demos/Main/23.FR3 | 6 + Demos/Main/24.FR3 | 54 + Demos/Main/25.fr3 | 40 + Demos/Main/3.fr3 | 55 + Demos/Main/31.fr3 | 24 + Demos/Main/32.fr3 | 13 + Demos/Main/33.FR3 | 55 + Demos/Main/34.FR3 | 55 + Demos/Main/35.fr3 | 65 + Demos/Main/36.fr3 | 19 + Demos/Main/4.FR3 | 54 + Demos/Main/41.FR3 | 11 + Demos/Main/42.FR3 | 13 + Demos/Main/43.FR3 | 15 + Demos/Main/5.FR3 | 14 + Demos/Main/6.FR3 | 26 + Demos/Main/60.fr3 | 10 + Demos/Main/61.FR3 | 10 + Demos/Main/62.FR3 | 10 + Demos/Main/63.FR3 | 10 + Demos/Main/64.FR3 | 32 + Demos/Main/65.FR3 | 10 + Demos/Main/66.FR3 | 10 + Demos/Main/67.FR3 | 18 + Demos/Main/68.FR3 | 10 + Demos/Main/69.FR3 | 7 + Demos/Main/7.FR3 | 12 + Demos/Main/70.fr3 | 21 + Demos/Main/71.fr3 | 44 + Demos/Main/72.fr3 | 57 + Demos/Main/73.fr3 | 10 + Demos/Main/8.FR3 | 17 + Demos/Main/80.fr3 | 24 + Demos/Main/81.fr3 | 26 + Demos/Main/82.fr3 | 10 + Demos/Main/9.FR3 | 17 + Demos/Main/93.fr3 | 19 + Demos/Main/94.fr3 | 18 + Demos/Main/95.fr3 | 19 + Demos/Main/96.fr3 | 19 + Demos/Main/97.fr3 | 34 + Demos/Main/98.fr3 | 55 + Demos/Main/99.fr3 | 52 + Demos/Main/Data/biolife.xml | 1 + Demos/Main/Data/country.xml | 1 + Demos/Main/Data/crosstest.xml | 1 + Demos/Main/Data/currency_quoting.xml | 1 + Demos/Main/Data/customer.xml | 1 + Demos/Main/Data/customer_query.xml | 1 + Demos/Main/Data/employee.xml | 1 + Demos/Main/Data/items.xml | 1 + Demos/Main/Data/nextcust.xml | 1 + Demos/Main/Data/nextitem.xml | 1 + Demos/Main/Data/nextord.xml | 1 + Demos/Main/Data/orders.xml | 1 + Demos/Main/Data/parts.xml | 1 + Demos/Main/Data/unicode.xml | 1 + Demos/Main/Data/vendors.xml | 1 + Demos/Main/Project1.deployproj | 1449 +++ Demos/Main/Project1.dpr | 17 + Demos/Main/Project1.dproj | 1536 +++ Demos/Main/Project1.res | Bin 0 -> 32 bytes Demos/Main/Unit2.fmx | 735 ++ Demos/Main/Unit2.pas | 217 + Demos/Main/Unit2.vlb | 1 + Demos/Main/Unit3.dfm | 128 + Demos/Main/Unit3.pas | 147 + Demos/Main/awards.png | Bin 0 -> 13488 bytes FastReports.url | 2 + FastReportsT.url | 6 + FastScript/FMX.BaseTypeAliases.pas | 283 + FastScript/FMX.FormTypeAliases.pas | 70 + FastScript/FMX.fs_iadortti.pas | 129 + FastScript/FMX.fs_ibasic.pas | 14 + FastScript/FMX.fs_ichartrtti.pas | 181 + FastScript/FMX.fs_iclassesrtti.pas | 14 + FastScript/FMX.fs_iconst.pas | 14 + FastScript/FMX.fs_icpp.pas | 14 + FastScript/FMX.fs_idbrtti.pas | 570 + FastScript/FMX.fs_idialogsrtti.pas | 133 + FastScript/FMX.fs_idisp.pas | 14 + FastScript/FMX.fs_ievents.pas | 379 + FastScript/FMX.fs_iexpression.pas | 14 + FastScript/FMX.fs_iextctrlsrtti.pas | 268 + FastScript/FMX.fs_iformsrtti.pas | 864 ++ FastScript/FMX.fs_igraphicsrtti.pas | 522 + FastScript/FMX.fs_iibxrtti.pas | 125 + FastScript/FMX.fs_iilparser.pas | 14 + FastScript/FMX.fs_iinirtti.pas | 372 + FastScript/FMX.fs_iinterpreter.pas | 14 + FastScript/FMX.fs_ijs.pas | 14 + FastScript/FMX.fs_imenusrtti.pas | 104 + FastScript/FMX.fs_iparser.pas | 14 + FastScript/FMX.fs_ipascal.pas | 14 + FastScript/FMX.fs_isysrtti.pas | 14 + FastScript/FMX.fs_itools.pas | 14 + FastScript/FMX.fs_lazarus.pas | 25 + FastScript/FMX.fs_synmemo.fmx | 50 + FastScript/FMX.fs_synmemo.pas | 2397 ++++ FastScript/FMX.fs_tree.pas | 659 + FastScript/FMX.fs_xml.pas | 15 + FastScript/FMX/FMX.BaseTypeAliases.pas | 283 + FastScript/FMX/FMX.FormTypeAliases.pas | 70 + FastScript/FMX/FMX.fs_iadortti.pas | 129 + FastScript/FMX/FMX.fs_ibasic.pas | 14 + FastScript/FMX/FMX.fs_ichartrtti.pas | 181 + FastScript/FMX/FMX.fs_iclassesrtti.pas | 14 + FastScript/FMX/FMX.fs_iconst.pas | 14 + FastScript/FMX/FMX.fs_icpp.pas | 14 + FastScript/FMX/FMX.fs_idbrtti.pas | 570 + FastScript/FMX/FMX.fs_idialogsrtti.pas | 133 + FastScript/FMX/FMX.fs_idisp.pas | 14 + FastScript/FMX/FMX.fs_ievents.pas | 379 + FastScript/FMX/FMX.fs_iexpression.pas | 14 + FastScript/FMX/FMX.fs_iextctrlsrtti.pas | 268 + FastScript/FMX/FMX.fs_iformsrtti.pas | 864 ++ FastScript/FMX/FMX.fs_igraphicsrtti.pas | 522 + FastScript/FMX/FMX.fs_iibxrtti.pas | 125 + FastScript/FMX/FMX.fs_iilparser.pas | 14 + FastScript/FMX/FMX.fs_iinirtti.pas | 372 + FastScript/FMX/FMX.fs_iinterpreter.pas | 14 + FastScript/FMX/FMX.fs_ijs.pas | 14 + FastScript/FMX/FMX.fs_imenusrtti.pas | 104 + FastScript/FMX/FMX.fs_iparser.pas | 14 + FastScript/FMX/FMX.fs_ipascal.pas | 14 + FastScript/FMX/FMX.fs_isysrtti.pas | 14 + FastScript/FMX/FMX.fs_itools.pas | 14 + FastScript/FMX/FMX.fs_lazarus.pas | 25 + FastScript/FMX/FMX.fs_synmemo.fmx | 50 + FastScript/FMX/FMX.fs_synmemo.pas | 2397 ++++ FastScript/FMX/FMX.fs_tree.pas | 659 + FastScript/FMX/FMX.fs_xml.pas | 15 + FastScript/FMX/FMXfs16.dpk | 60 + FastScript/FMX/FMXfs16.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs17.dpk | 60 + FastScript/FMX/FMXfs17.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs18.dpk | 60 + FastScript/FMX/FMXfs18.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs18.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs19.dpk | 60 + FastScript/FMX/FMXfs19.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs19.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs20.dpk | 60 + FastScript/FMX/FMXfs20.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs20.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs21.dpk | 60 + FastScript/FMX/FMXfs21.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs21.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs22.dpk | 60 + FastScript/FMX/FMXfs22.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs22.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs23.dpk | 59 + FastScript/FMX/FMXfs23.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs23.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs24.dpk | 59 + FastScript/FMX/FMXfs24.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs24.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs25.dpk | 59 + FastScript/FMX/FMXfs25.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfs25.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfs26.dpk | 59 + FastScript/FMX/FMXfs27.dpk | 59 + FastScript/FMX/FMXfs28.dpk | 61 + FastScript/FMX/FMXfs29.dpk | 61 + FastScript/FMX/FMXfsADO16.dpk | 40 + FastScript/FMX/FMXfsADO16.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO17.dpk | 40 + FastScript/FMX/FMXfsADO17.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO18.dpk | 40 + FastScript/FMX/FMXfsADO18.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO19.dpk | 40 + FastScript/FMX/FMXfsADO19.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO20.dpk | 40 + FastScript/FMX/FMXfsADO20.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO21.dpk | 40 + FastScript/FMX/FMXfsADO21.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO22.dpk | 40 + FastScript/FMX/FMXfsADO22.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO23.dpk | 40 + FastScript/FMX/FMXfsADO23.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO24.dpk | 40 + FastScript/FMX/FMXfsADO24.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO25.dpk | 40 + FastScript/FMX/FMXfsADO25.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsADO26.dpk | 40 + FastScript/FMX/FMXfsADO27.dpk | 40 + FastScript/FMX/FMXfsADO28.dpk | 40 + FastScript/FMX/FMXfsADO29.dpk | 40 + FastScript/FMX/FMXfsDB16.dpk | 41 + FastScript/FMX/FMXfsDB16.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB17.dpk | 41 + FastScript/FMX/FMXfsDB17.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB18.dpk | 42 + FastScript/FMX/FMXfsDB18.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB18.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB19.dpk | 42 + FastScript/FMX/FMXfsDB19.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB19.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB20.dpk | 42 + FastScript/FMX/FMXfsDB20.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB20.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB21.dpk | 42 + FastScript/FMX/FMXfsDB21.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB21.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB22.dpk | 42 + FastScript/FMX/FMXfsDB22.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB22.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB23.dpk | 42 + FastScript/FMX/FMXfsDB23.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB23.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB24.dpk | 42 + FastScript/FMX/FMXfsDB24.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB24.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB25.dpk | 42 + FastScript/FMX/FMXfsDB25.otares | Bin 0 -> 96 bytes FastScript/FMX/FMXfsDB25.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsDB26.dpk | 40 + FastScript/FMX/FMXfsDB27.dpk | 40 + FastScript/FMX/FMXfsDB28.dpk | 40 + FastScript/FMX/FMXfsDB29.dpk | 40 + FastScript/FMX/FMXfsIBX16.dpk | 41 + FastScript/FMX/FMXfsIBX16.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX17.dpk | 41 + FastScript/FMX/FMXfsIBX17.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX18.dpk | 41 + FastScript/FMX/FMXfsIBX18.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX19.dpk | 41 + FastScript/FMX/FMXfsIBX19.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX20.dpk | 41 + FastScript/FMX/FMXfsIBX20.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX21.dpk | 41 + FastScript/FMX/FMXfsIBX21.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX22.dpk | 41 + FastScript/FMX/FMXfsIBX22.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX23.dpk | 41 + FastScript/FMX/FMXfsIBX23.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX24.dpk | 41 + FastScript/FMX/FMXfsIBX24.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX25.dpk | 41 + FastScript/FMX/FMXfsIBX25.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsIBX26.dpk | 41 + FastScript/FMX/FMXfsIBX27.dpk | 41 + FastScript/FMX/FMXfsIBX28.dpk | 41 + FastScript/FMX/FMXfsIBX29.dpk | 41 + FastScript/FMX/FMXfsTee16.dpk | 42 + FastScript/FMX/FMXfsTee16.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee17.dpk | 43 + FastScript/FMX/FMXfsTee17.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee18.dpk | 43 + FastScript/FMX/FMXfsTee18.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee19.dpk | 43 + FastScript/FMX/FMXfsTee19.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee20.dpk | 43 + FastScript/FMX/FMXfsTee20.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee21.dpk | 43 + FastScript/FMX/FMXfsTee21.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee22.dpk | 43 + FastScript/FMX/FMXfsTee22.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee23.dpk | 45 + FastScript/FMX/FMXfsTee23.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee24.dpk | 45 + FastScript/FMX/FMXfsTee24.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee25.dpk | 45 + FastScript/FMX/FMXfsTee25.res | Bin 0 -> 448 bytes FastScript/FMX/FMXfsTee26.dpk | 45 + FastScript/FMX/FMXfsTee27.dpk | 45 + FastScript/FMX/FMXfsTee28.dpk | 45 + FastScript/FMX/FMXfsTee29.dpk | 45 + FastScript/FMX/FMXfs_iadoreg.pas | 37 + FastScript/FMX/FMXfs_idbreg.pas | 37 + FastScript/FMX/FMXfs_iibxreg.pas | 37 + FastScript/FMX/FMXfs_ireg.pas | 85 + FastScript/FMX/FMXfs_iteereg.pas | 38 + FastScript/FMX/dclFMXfs16.dpk | 39 + FastScript/FMX/dclFMXfs16.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs17.dpk | 39 + FastScript/FMX/dclFMXfs17.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs18.dpk | 44 + FastScript/FMX/dclFMXfs18.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs18.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs19.dpk | 44 + FastScript/FMX/dclFMXfs19.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs19.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs20.dpk | 44 + FastScript/FMX/dclFMXfs20.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs20.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs21.dpk | 44 + FastScript/FMX/dclFMXfs21.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs21.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs22.dpk | 44 + FastScript/FMX/dclFMXfs22.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs22.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs23.dpk | 39 + FastScript/FMX/dclFMXfs23.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs23.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs24.dpk | 39 + FastScript/FMX/dclFMXfs24.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs24.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs25.dpk | 39 + FastScript/FMX/dclFMXfs25.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfs25.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfs26.dpk | 39 + FastScript/FMX/dclFMXfs27.dpk | 39 + FastScript/FMX/dclFMXfs28.dpk | 39 + FastScript/FMX/dclFMXfsADO16.dpk | 40 + FastScript/FMX/dclFMXfsADO16.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO17.dpk | 40 + FastScript/FMX/dclFMXfsADO17.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO18.dpk | 40 + FastScript/FMX/dclFMXfsADO18.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO19.dpk | 40 + FastScript/FMX/dclFMXfsADO19.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO20.dpk | 40 + FastScript/FMX/dclFMXfsADO20.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO21.dpk | 40 + FastScript/FMX/dclFMXfsADO21.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO22.dpk | 40 + FastScript/FMX/dclFMXfsADO22.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO23.dpk | 40 + FastScript/FMX/dclFMXfsADO23.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO24.dpk | 40 + FastScript/FMX/dclFMXfsADO24.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO25.dpk | 40 + FastScript/FMX/dclFMXfsADO25.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsADO26.dpk | 40 + FastScript/FMX/dclFMXfsADO27.dpk | 40 + FastScript/FMX/dclFMXfsADO28.dpk | 40 + FastScript/FMX/dclFMXfsADO29.dpk | 40 + FastScript/FMX/dclFMXfsDB16.dpk | 40 + FastScript/FMX/dclFMXfsDB16.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB17.dpk | 40 + FastScript/FMX/dclFMXfsDB17.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB18.dpk | 45 + FastScript/FMX/dclFMXfsDB18.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB18.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB19.dpk | 45 + FastScript/FMX/dclFMXfsDB19.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB19.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB20.dpk | 45 + FastScript/FMX/dclFMXfsDB20.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB20.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB21.dpk | 45 + FastScript/FMX/dclFMXfsDB21.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB21.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB22.dpk | 45 + FastScript/FMX/dclFMXfsDB22.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB22.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB23.dpk | 43 + FastScript/FMX/dclFMXfsDB23.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB23.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB24.dpk | 43 + FastScript/FMX/dclFMXfsDB24.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB24.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB25.dpk | 43 + FastScript/FMX/dclFMXfsDB25.otares | Bin 0 -> 96 bytes FastScript/FMX/dclFMXfsDB25.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsDB26.dpk | 43 + FastScript/FMX/dclFMXfsDB27.dpk | 43 + FastScript/FMX/dclFMXfsDB28.dpk | 43 + FastScript/FMX/dclFMXfsDB29.dpk | 43 + FastScript/FMX/dclFMXfsIBX16.dpk | 40 + FastScript/FMX/dclFMXfsIBX16.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX17.dpk | 40 + FastScript/FMX/dclFMXfsIBX17.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX18.dpk | 40 + FastScript/FMX/dclFMXfsIBX18.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX19.dpk | 40 + FastScript/FMX/dclFMXfsIBX19.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX20.dpk | 40 + FastScript/FMX/dclFMXfsIBX20.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX21.dpk | 40 + FastScript/FMX/dclFMXfsIBX21.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX22.dpk | 40 + FastScript/FMX/dclFMXfsIBX22.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX23.dpk | 40 + FastScript/FMX/dclFMXfsIBX23.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX24.dpk | 40 + FastScript/FMX/dclFMXfsIBX24.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX25.dpk | 40 + FastScript/FMX/dclFMXfsIBX25.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsIBX26.dpk | 40 + FastScript/FMX/dclFMXfsIBX27.dpk | 40 + FastScript/FMX/dclFMXfsIBX28.dpk | 40 + FastScript/FMX/dclFMXfsIBX29.dpk | 40 + FastScript/FMX/dclFMXfsTee16.dpk | 40 + FastScript/FMX/dclFMXfsTee16.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee17.dpk | 40 + FastScript/FMX/dclFMXfsTee17.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee18.dpk | 40 + FastScript/FMX/dclFMXfsTee18.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee19.dpk | 40 + FastScript/FMX/dclFMXfsTee19.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee20.dpk | 40 + FastScript/FMX/dclFMXfsTee20.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee21.dpk | 40 + FastScript/FMX/dclFMXfsTee21.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee22.dpk | 40 + FastScript/FMX/dclFMXfsTee22.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee23.dpk | 40 + FastScript/FMX/dclFMXfsTee23.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee24.dpk | 40 + FastScript/FMX/dclFMXfsTee24.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee25.dpk | 40 + FastScript/FMX/dclFMXfsTee25.res | Bin 0 -> 448 bytes FastScript/FMX/dclFMXfsTee26.dpk | 40 + FastScript/FMX/dclFMXfsTee27.dpk | 40 + FastScript/FMX/dclFMXfsTee28.dpk | 40 + FastScript/FMX/dclFMXfsTee29.dpk | 40 + FastScript/FMX/fmx.inc | 12 + FastScript/FMXfs16.dpk | 60 + FastScript/FMXfs16.res | Bin 0 -> 448 bytes FastScript/FMXfs17.dpk | 60 + FastScript/FMXfs17.res | Bin 0 -> 448 bytes FastScript/FMXfs18.dpk | 60 + FastScript/FMXfs18.otares | Bin 0 -> 96 bytes FastScript/FMXfs18.res | Bin 0 -> 448 bytes FastScript/FMXfs19.dpk | 60 + FastScript/FMXfs19.otares | Bin 0 -> 96 bytes FastScript/FMXfs19.res | Bin 0 -> 448 bytes FastScript/FMXfs20.dpk | 60 + FastScript/FMXfs20.otares | Bin 0 -> 96 bytes FastScript/FMXfs20.res | Bin 0 -> 448 bytes FastScript/FMXfs21.dpk | 60 + FastScript/FMXfs21.otares | Bin 0 -> 96 bytes FastScript/FMXfs21.res | Bin 0 -> 448 bytes FastScript/FMXfs22.dpk | 60 + FastScript/FMXfs22.otares | Bin 0 -> 96 bytes FastScript/FMXfs22.res | Bin 0 -> 448 bytes FastScript/FMXfs23.dpk | 59 + FastScript/FMXfs23.otares | Bin 0 -> 96 bytes FastScript/FMXfs23.res | Bin 0 -> 448 bytes FastScript/FMXfs24.dpk | 59 + FastScript/FMXfs24.otares | Bin 0 -> 96 bytes FastScript/FMXfs24.res | Bin 0 -> 448 bytes FastScript/FMXfs25.dpk | 59 + FastScript/FMXfs25.otares | Bin 0 -> 96 bytes FastScript/FMXfs25.res | Bin 0 -> 448 bytes FastScript/FMXfs26.dpk | 59 + FastScript/FMXfs27.dpk | 59 + FastScript/FMXfs28.dpk | 61 + FastScript/FMXfs29.dpk | 61 + FastScript/FMXfsADO16.dpk | 40 + FastScript/FMXfsADO16.res | Bin 0 -> 448 bytes FastScript/FMXfsADO17.dpk | 40 + FastScript/FMXfsADO17.res | Bin 0 -> 448 bytes FastScript/FMXfsADO18.dpk | 40 + FastScript/FMXfsADO18.res | Bin 0 -> 448 bytes FastScript/FMXfsADO19.dpk | 40 + FastScript/FMXfsADO19.res | Bin 0 -> 448 bytes FastScript/FMXfsADO20.dpk | 40 + FastScript/FMXfsADO20.res | Bin 0 -> 448 bytes FastScript/FMXfsADO21.dpk | 40 + FastScript/FMXfsADO21.res | Bin 0 -> 448 bytes FastScript/FMXfsADO22.dpk | 40 + FastScript/FMXfsADO22.res | Bin 0 -> 448 bytes FastScript/FMXfsADO23.dpk | 40 + FastScript/FMXfsADO23.res | Bin 0 -> 448 bytes FastScript/FMXfsADO24.dpk | 40 + FastScript/FMXfsADO24.res | Bin 0 -> 448 bytes FastScript/FMXfsADO25.dpk | 40 + FastScript/FMXfsADO25.res | Bin 0 -> 448 bytes FastScript/FMXfsADO26.dpk | 40 + FastScript/FMXfsADO27.dpk | 40 + FastScript/FMXfsADO28.dpk | 40 + FastScript/FMXfsADO29.dpk | 40 + FastScript/FMXfsDB16.dpk | 41 + FastScript/FMXfsDB16.res | Bin 0 -> 448 bytes FastScript/FMXfsDB17.dpk | 41 + FastScript/FMXfsDB17.res | Bin 0 -> 448 bytes FastScript/FMXfsDB18.dpk | 42 + FastScript/FMXfsDB18.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB18.res | Bin 0 -> 448 bytes FastScript/FMXfsDB19.dpk | 42 + FastScript/FMXfsDB19.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB19.res | Bin 0 -> 448 bytes FastScript/FMXfsDB20.dpk | 42 + FastScript/FMXfsDB20.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB20.res | Bin 0 -> 448 bytes FastScript/FMXfsDB21.dpk | 42 + FastScript/FMXfsDB21.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB21.res | Bin 0 -> 448 bytes FastScript/FMXfsDB22.dpk | 42 + FastScript/FMXfsDB22.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB22.res | Bin 0 -> 448 bytes FastScript/FMXfsDB23.dpk | 42 + FastScript/FMXfsDB23.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB23.res | Bin 0 -> 448 bytes FastScript/FMXfsDB24.dpk | 42 + FastScript/FMXfsDB24.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB24.res | Bin 0 -> 448 bytes FastScript/FMXfsDB25.dpk | 42 + FastScript/FMXfsDB25.otares | Bin 0 -> 96 bytes FastScript/FMXfsDB25.res | Bin 0 -> 448 bytes FastScript/FMXfsDB26.dpk | 40 + FastScript/FMXfsDB27.dpk | 40 + FastScript/FMXfsDB28.dpk | 40 + FastScript/FMXfsDB29.dpk | 40 + FastScript/FMXfsIBX16.dpk | 41 + FastScript/FMXfsIBX16.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX17.dpk | 41 + FastScript/FMXfsIBX17.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX18.dpk | 41 + FastScript/FMXfsIBX18.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX19.dpk | 41 + FastScript/FMXfsIBX19.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX20.dpk | 41 + FastScript/FMXfsIBX20.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX21.dpk | 41 + FastScript/FMXfsIBX21.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX22.dpk | 41 + FastScript/FMXfsIBX22.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX23.dpk | 41 + FastScript/FMXfsIBX23.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX24.dpk | 41 + FastScript/FMXfsIBX24.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX25.dpk | 41 + FastScript/FMXfsIBX25.res | Bin 0 -> 448 bytes FastScript/FMXfsIBX26.dpk | 41 + FastScript/FMXfsIBX27.dpk | 41 + FastScript/FMXfsIBX28.dpk | 41 + FastScript/FMXfsIBX29.dpk | 41 + FastScript/FMXfsTee16.dpk | 42 + FastScript/FMXfsTee16.res | Bin 0 -> 448 bytes FastScript/FMXfsTee17.dpk | 43 + FastScript/FMXfsTee17.res | Bin 0 -> 448 bytes FastScript/FMXfsTee18.dpk | 43 + FastScript/FMXfsTee18.res | Bin 0 -> 448 bytes FastScript/FMXfsTee19.dpk | 43 + FastScript/FMXfsTee19.res | Bin 0 -> 448 bytes FastScript/FMXfsTee20.dpk | 43 + FastScript/FMXfsTee20.res | Bin 0 -> 448 bytes FastScript/FMXfsTee21.dpk | 43 + FastScript/FMXfsTee21.res | Bin 0 -> 448 bytes FastScript/FMXfsTee22.dpk | 43 + FastScript/FMXfsTee22.res | Bin 0 -> 448 bytes FastScript/FMXfsTee23.dpk | 45 + FastScript/FMXfsTee23.res | Bin 0 -> 448 bytes FastScript/FMXfsTee24.dpk | 45 + FastScript/FMXfsTee24.res | Bin 0 -> 448 bytes FastScript/FMXfsTee25.dpk | 45 + FastScript/FMXfsTee25.res | Bin 0 -> 448 bytes FastScript/FMXfsTee26.dpk | 45 + FastScript/FMXfsTee27.dpk | 45 + FastScript/FMXfsTee28.dpk | 45 + FastScript/FMXfsTee29.dpk | 45 + FastScript/FMXfs_iadoreg.pas | 37 + FastScript/FMXfs_idbreg.pas | 37 + FastScript/FMXfs_iibxreg.pas | 37 + FastScript/FMXfs_ireg.pas | 85 + FastScript/FMXfs_iteereg.pas | 38 + FastScript/bitmaps/TFSADORTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSBASIC.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSBDERTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSCHARTRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSCLASSESRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSCPP.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSDBCTRLSRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSDBRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSDIALOGSRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSEXTCTRLSRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSFDRTTI.bat | 1 + FastScript/bitmaps/TFSFDRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSFDRTTI.rc | 1 + FastScript/bitmaps/TFSFORMSRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSGRAPHICSRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSIBXRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSINIRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSJSCRIPT.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSMENUSRTTI.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSPASCAL.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSSCRIPT.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSSYNTAXMEMO.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/TFSTREE.bmp | Bin 0 -> 1782 bytes FastScript/bitmaps/build_fstree.bat | 1 + FastScript/bitmaps/build_lrs.bat | 1 + FastScript/bitmaps/fstree.bmp | Bin 0 -> 2358 bytes FastScript/dclFMXfs16.dpk | 39 + FastScript/dclFMXfs16.res | Bin 0 -> 448 bytes FastScript/dclFMXfs17.dpk | 39 + FastScript/dclFMXfs17.res | Bin 0 -> 448 bytes FastScript/dclFMXfs18.dpk | 44 + FastScript/dclFMXfs18.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs18.res | Bin 0 -> 448 bytes FastScript/dclFMXfs19.dpk | 44 + FastScript/dclFMXfs19.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs19.res | Bin 0 -> 448 bytes FastScript/dclFMXfs20.dpk | 44 + FastScript/dclFMXfs20.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs20.res | Bin 0 -> 448 bytes FastScript/dclFMXfs21.dpk | 44 + FastScript/dclFMXfs21.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs21.res | Bin 0 -> 448 bytes FastScript/dclFMXfs22.dpk | 44 + FastScript/dclFMXfs22.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs22.res | Bin 0 -> 448 bytes FastScript/dclFMXfs23.dpk | 39 + FastScript/dclFMXfs23.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs23.res | Bin 0 -> 448 bytes FastScript/dclFMXfs24.dpk | 39 + FastScript/dclFMXfs24.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs24.res | Bin 0 -> 448 bytes FastScript/dclFMXfs25.dpk | 39 + FastScript/dclFMXfs25.otares | Bin 0 -> 96 bytes FastScript/dclFMXfs25.res | Bin 0 -> 448 bytes FastScript/dclFMXfs26.dpk | 39 + FastScript/dclFMXfs27.dpk | 39 + FastScript/dclFMXfs28.dpk | 39 + FastScript/dclFMXfs29.dpk | 39 + FastScript/dclFMXfsADO16.dpk | 40 + FastScript/dclFMXfsADO16.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO17.dpk | 40 + FastScript/dclFMXfsADO17.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO18.dpk | 40 + FastScript/dclFMXfsADO18.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO19.dpk | 40 + FastScript/dclFMXfsADO19.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO20.dpk | 40 + FastScript/dclFMXfsADO20.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO21.dpk | 40 + FastScript/dclFMXfsADO21.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO22.dpk | 40 + FastScript/dclFMXfsADO22.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO23.dpk | 40 + FastScript/dclFMXfsADO23.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO24.dpk | 40 + FastScript/dclFMXfsADO24.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO25.dpk | 40 + FastScript/dclFMXfsADO25.res | Bin 0 -> 448 bytes FastScript/dclFMXfsADO26.dpk | 40 + FastScript/dclFMXfsADO27.dpk | 40 + FastScript/dclFMXfsADO28.dpk | 40 + FastScript/dclFMXfsADO29.dpk | 40 + FastScript/dclFMXfsDB16.dpk | 40 + FastScript/dclFMXfsDB16.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB17.dpk | 40 + FastScript/dclFMXfsDB17.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB18.dpk | 45 + FastScript/dclFMXfsDB18.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB18.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB19.dpk | 45 + FastScript/dclFMXfsDB19.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB19.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB20.dpk | 45 + FastScript/dclFMXfsDB20.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB20.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB21.dpk | 45 + FastScript/dclFMXfsDB21.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB21.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB22.dpk | 45 + FastScript/dclFMXfsDB22.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB22.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB23.dpk | 43 + FastScript/dclFMXfsDB23.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB23.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB24.dpk | 43 + FastScript/dclFMXfsDB24.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB24.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB25.dpk | 43 + FastScript/dclFMXfsDB25.otares | Bin 0 -> 96 bytes FastScript/dclFMXfsDB25.res | Bin 0 -> 448 bytes FastScript/dclFMXfsDB26.dpk | 43 + FastScript/dclFMXfsDB27.dpk | 43 + FastScript/dclFMXfsDB28.dpk | 43 + FastScript/dclFMXfsDB29.dpk | 43 + FastScript/dclFMXfsIBX16.dpk | 40 + FastScript/dclFMXfsIBX16.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX17.dpk | 40 + FastScript/dclFMXfsIBX17.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX18.dpk | 40 + FastScript/dclFMXfsIBX18.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX19.dpk | 40 + FastScript/dclFMXfsIBX19.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX20.dpk | 40 + FastScript/dclFMXfsIBX20.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX21.dpk | 40 + FastScript/dclFMXfsIBX21.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX22.dpk | 40 + FastScript/dclFMXfsIBX22.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX23.dpk | 40 + FastScript/dclFMXfsIBX23.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX24.dpk | 40 + FastScript/dclFMXfsIBX24.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX25.dpk | 40 + FastScript/dclFMXfsIBX25.res | Bin 0 -> 448 bytes FastScript/dclFMXfsIBX26.dpk | 40 + FastScript/dclFMXfsIBX27.dpk | 40 + FastScript/dclFMXfsIBX28.dpk | 40 + FastScript/dclFMXfsIBX29.dpk | 40 + FastScript/dclFMXfsTee16.dpk | 40 + FastScript/dclFMXfsTee16.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee17.dpk | 40 + FastScript/dclFMXfsTee17.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee18.dpk | 40 + FastScript/dclFMXfsTee18.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee19.dpk | 40 + FastScript/dclFMXfsTee19.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee20.dpk | 40 + FastScript/dclFMXfsTee20.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee21.dpk | 40 + FastScript/dclFMXfsTee21.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee22.dpk | 40 + FastScript/dclFMXfsTee22.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee23.dpk | 40 + FastScript/dclFMXfsTee23.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee24.dpk | 40 + FastScript/dclFMXfsTee24.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee25.dpk | 40 + FastScript/dclFMXfsTee25.res | Bin 0 -> 448 bytes FastScript/dclFMXfsTee26.dpk | 40 + FastScript/dclFMXfsTee27.dpk | 40 + FastScript/dclFMXfsTee28.dpk | 40 + FastScript/dclFMXfsTee29.dpk | 40 + FastScript/dclfs10.dpk | 40 + FastScript/dclfs11.dpk | 40 + FastScript/dclfs12.dpk | 40 + FastScript/dclfs14.dpk | 39 + FastScript/dclfs15.dpk | 39 + FastScript/dclfs16.dpk | 39 + FastScript/dclfs17.dpk | 39 + FastScript/dclfs18.dpk | 39 + FastScript/dclfs19.dpk | 39 + FastScript/dclfs20.dpk | 39 + FastScript/dclfs21.dpk | 39 + FastScript/dclfs22.dpk | 39 + FastScript/dclfs23.dpk | 39 + FastScript/dclfs24.dpk | 39 + FastScript/dclfs25.dpk | 39 + FastScript/dclfs26.dpk | 39 + FastScript/dclfs27.dpk | 39 + FastScript/dclfs28.dpk | 39 + FastScript/dclfs29.dpk | 39 + FastScript/dclfs4.dpk | 39 + FastScript/dclfs5.dpk | 39 + FastScript/dclfs6.dpk | 40 + FastScript/dclfs7.dpk | 40 + FastScript/dclfs9.dpk | 40 + FastScript/dclfsADO10.dpk | 41 + FastScript/dclfsADO11.dpk | 41 + FastScript/dclfsADO12.dpk | 41 + FastScript/dclfsADO14.dpk | 40 + FastScript/dclfsADO15.dpk | 40 + FastScript/dclfsADO16.dpk | 40 + FastScript/dclfsADO17.dpk | 40 + FastScript/dclfsADO18.dpk | 40 + FastScript/dclfsADO19.dpk | 40 + FastScript/dclfsADO20.dpk | 40 + FastScript/dclfsADO21.dpk | 40 + FastScript/dclfsADO22.dpk | 40 + FastScript/dclfsADO23.dpk | 40 + FastScript/dclfsADO24.dpk | 40 + FastScript/dclfsADO25.dpk | 40 + FastScript/dclfsADO26.dpk | 40 + FastScript/dclfsADO27.dpk | 40 + FastScript/dclfsADO28.dpk | 40 + FastScript/dclfsADO29.dpk | 40 + FastScript/dclfsADO5.dpk | 40 + FastScript/dclfsADO6.dpk | 41 + FastScript/dclfsADO7.dpk | 41 + FastScript/dclfsADO9.dpk | 41 + FastScript/dclfsBDE10.dpk | 41 + FastScript/dclfsBDE11.dpk | 41 + FastScript/dclfsBDE12.dpk | 41 + FastScript/dclfsBDE14.dpk | 40 + FastScript/dclfsBDE15.dpk | 40 + FastScript/dclfsBDE16.dpk | 40 + FastScript/dclfsBDE17.dpk | 40 + FastScript/dclfsBDE18.dpk | 40 + FastScript/dclfsBDE19.dpk | 40 + FastScript/dclfsBDE20.dpk | 40 + FastScript/dclfsBDE21.dpk | 40 + FastScript/dclfsBDE22.dpk | 40 + FastScript/dclfsBDE23.dpk | 40 + FastScript/dclfsBDE24.dpk | 40 + FastScript/dclfsBDE25.dpk | 40 + FastScript/dclfsBDE26.dpk | 40 + FastScript/dclfsBDE27.dpk | 40 + FastScript/dclfsBDE28.dpk | 40 + FastScript/dclfsBDE29.dpk | 40 + FastScript/dclfsBDE4.dpk | 40 + FastScript/dclfsBDE5.dpk | 40 + FastScript/dclfsBDE6.dpk | 41 + FastScript/dclfsBDE7.dpk | 41 + FastScript/dclfsBDE9.dpk | 41 + FastScript/dclfsDB10.dpk | 41 + FastScript/dclfsDB11.dpk | 41 + FastScript/dclfsDB12.dpk | 41 + FastScript/dclfsDB14.dpk | 40 + FastScript/dclfsDB15.dpk | 40 + FastScript/dclfsDB16.dpk | 40 + FastScript/dclfsDB17.dpk | 40 + FastScript/dclfsDB18.dpk | 40 + FastScript/dclfsDB19.dpk | 40 + FastScript/dclfsDB20.dpk | 40 + FastScript/dclfsDB21.dpk | 40 + FastScript/dclfsDB22.dpk | 40 + FastScript/dclfsDB23.dpk | 40 + FastScript/dclfsDB24.dpk | 40 + FastScript/dclfsDB25.dpk | 40 + FastScript/dclfsDB26.dpk | 40 + FastScript/dclfsDB27.dpk | 40 + FastScript/dclfsDB28.dpk | 40 + FastScript/dclfsDB29.dpk | 40 + FastScript/dclfsDB4.dpk | 40 + FastScript/dclfsDB5.dpk | 40 + FastScript/dclfsDB6.dpk | 41 + FastScript/dclfsDB7.dpk | 41 + FastScript/dclfsDB9.dpk | 41 + FastScript/dclfsFD15.dpk | 40 + FastScript/dclfsFD16.dpk | 40 + FastScript/dclfsFD17.dpk | 40 + FastScript/dclfsFD18.dpk | 40 + FastScript/dclfsFD19.dpk | 40 + FastScript/dclfsFD20.dpk | 40 + FastScript/dclfsFD21.dpk | 40 + FastScript/dclfsFD22.dpk | 40 + FastScript/dclfsFD23.dpk | 40 + FastScript/dclfsFD24.dpk | 40 + FastScript/dclfsFD25.dpk | 40 + FastScript/dclfsFD26.dpk | 40 + FastScript/dclfsFD27.dpk | 40 + FastScript/dclfsFD28.dpk | 40 + FastScript/dclfsFD29.dpk | 40 + FastScript/dclfsIBX10.dpk | 41 + FastScript/dclfsIBX11.dpk | 41 + FastScript/dclfsIBX12.dpk | 41 + FastScript/dclfsIBX14.dpk | 40 + FastScript/dclfsIBX15.dpk | 40 + FastScript/dclfsIBX16.dpk | 40 + FastScript/dclfsIBX17.dpk | 40 + FastScript/dclfsIBX18.dpk | 40 + FastScript/dclfsIBX19.dpk | 40 + FastScript/dclfsIBX20.dpk | 40 + FastScript/dclfsIBX21.dpk | 40 + FastScript/dclfsIBX22.dpk | 40 + FastScript/dclfsIBX23.dpk | 40 + FastScript/dclfsIBX24.dpk | 40 + FastScript/dclfsIBX25.dpk | 40 + FastScript/dclfsIBX26.dpk | 40 + FastScript/dclfsIBX27.dpk | 40 + FastScript/dclfsIBX28.dpk | 40 + FastScript/dclfsIBX29.dpk | 40 + FastScript/dclfsIBX5.dpk | 40 + FastScript/dclfsIBX6.dpk | 41 + FastScript/dclfsIBX7.dpk | 41 + FastScript/dclfsIBX9.dpk | 41 + FastScript/dclfsTee10.dpk | 41 + FastScript/dclfsTee11.dpk | 41 + FastScript/dclfsTee12.dpk | 41 + FastScript/dclfsTee14.dpk | 40 + FastScript/dclfsTee15.dpk | 40 + FastScript/dclfsTee16.dpk | 40 + FastScript/dclfsTee17.dpk | 40 + FastScript/dclfsTee18.dpk | 40 + FastScript/dclfsTee19.dpk | 40 + FastScript/dclfsTee20.dpk | 40 + FastScript/dclfsTee21.dpk | 40 + FastScript/dclfsTee22.dpk | 40 + FastScript/dclfsTee23.dpk | 40 + FastScript/dclfsTee24.dpk | 40 + FastScript/dclfsTee25.dpk | 40 + FastScript/dclfsTee26.dpk | 40 + FastScript/dclfsTee27.dpk | 40 + FastScript/dclfsTee28.dpk | 40 + FastScript/dclfsTee29.dpk | 40 + FastScript/dclfsTee4.dpk | 40 + FastScript/dclfsTee5.dpk | 40 + FastScript/dclfsTee6.dpk | 41 + FastScript/dclfsTee7.dpk | 41 + FastScript/dclfsTee9.dpk | 41 + FastScript/dclfsx.dpk | 46 + FastScript/dclfsx.res | Bin 0 -> 1536 bytes FastScript/fmx.inc | 12 + FastScript/frxPlatformsAttribute.inc | 12 + FastScript/fs.inc | 612 + FastScript/fs10.dpk | 66 + FastScript/fs11.dpk | 66 + FastScript/fs12.dpk | 61 + FastScript/fs14.dpk | 61 + FastScript/fs15.dpk | 61 + FastScript/fs16.dpk | 61 + FastScript/fs17.dpk | 61 + FastScript/fs18.dpk | 61 + FastScript/fs19.dpk | 61 + FastScript/fs20.dpk | 61 + FastScript/fs21.dpk | 61 + FastScript/fs22.dpk | 61 + FastScript/fs23.dpk | 61 + FastScript/fs24.dpk | 61 + FastScript/fs25.dpk | 61 + FastScript/fs26.dpk | 61 + FastScript/fs27.dpk | 61 + FastScript/fs28.dpk | 61 + FastScript/fs29.dpk | 61 + FastScript/fs4.bpk | 187 + FastScript/fs4.cpp | 19 + FastScript/fs4.dpk | 65 + FastScript/fs4.res | Bin 0 -> 1536 bytes FastScript/fs5.bpk | 108 + FastScript/fs5.cpp | 23 + FastScript/fs5.dpk | 66 + FastScript/fs5.res | Bin 0 -> 1536 bytes FastScript/fs6.bpk | 122 + FastScript/fs6.cpp | 17 + FastScript/fs6.dpk | 66 + FastScript/fs6.res | Bin 0 -> 1536 bytes FastScript/fs7.dpk | 66 + FastScript/fs9.dpk | 66 + FastScript/fsADO10.dpk | 42 + FastScript/fsADO11.dpk | 42 + FastScript/fsADO12.dpk | 42 + FastScript/fsADO14.dpk | 40 + FastScript/fsADO15.dpk | 40 + FastScript/fsADO16.dpk | 40 + FastScript/fsADO17.dpk | 40 + FastScript/fsADO18.dpk | 40 + FastScript/fsADO19.dpk | 40 + FastScript/fsADO20.dpk | 40 + FastScript/fsADO21.dpk | 40 + FastScript/fsADO22.dpk | 40 + FastScript/fsADO23.dpk | 40 + FastScript/fsADO24.dpk | 40 + FastScript/fsADO25.dpk | 40 + FastScript/fsADO26.dpk | 40 + FastScript/fsADO27.dpk | 40 + FastScript/fsADO28.dpk | 40 + FastScript/fsADO29.dpk | 40 + FastScript/fsADO5.bpk | 108 + FastScript/fsADO5.cpp | 25 + FastScript/fsADO5.dpk | 42 + FastScript/fsADO6.bpk | 124 + FastScript/fsADO6.cpp | 17 + FastScript/fsADO6.dpk | 42 + FastScript/fsADO7.dpk | 42 + FastScript/fsADO9.dpk | 42 + FastScript/fsBDE10.dpk | 42 + FastScript/fsBDE11.dpk | 42 + FastScript/fsBDE12.dpk | 42 + FastScript/fsBDE14.dpk | 42 + FastScript/fsBDE15.dpk | 42 + FastScript/fsBDE16.dpk | 42 + FastScript/fsBDE17.dpk | 42 + FastScript/fsBDE18.dpk | 42 + FastScript/fsBDE19.dpk | 42 + FastScript/fsBDE20.dpk | 42 + FastScript/fsBDE21.dpk | 42 + FastScript/fsBDE22.dpk | 42 + FastScript/fsBDE23.dpk | 42 + FastScript/fsBDE24.dpk | 42 + FastScript/fsBDE25.dpk | 42 + FastScript/fsBDE26.dpk | 42 + FastScript/fsBDE27.dpk | 42 + FastScript/fsBDE28.dpk | 42 + FastScript/fsBDE29.dpk | 42 + FastScript/fsBDE4.bpk | 187 + FastScript/fsBDE4.cpp | 20 + FastScript/fsBDE4.dpk | 41 + FastScript/fsBDE5.bpk | 108 + FastScript/fsBDE5.cpp | 25 + FastScript/fsBDE5.dpk | 42 + FastScript/fsBDE6.bpk | 125 + FastScript/fsBDE6.cpp | 17 + FastScript/fsBDE6.dpk | 42 + FastScript/fsBDE7.dpk | 42 + FastScript/fsBDE9.dpk | 42 + FastScript/fsDB10.dpk | 41 + FastScript/fsDB11.dpk | 41 + FastScript/fsDB12.dpk | 41 + FastScript/fsDB14.dpk | 39 + FastScript/fsDB15.dpk | 39 + FastScript/fsDB16.dpk | 39 + FastScript/fsDB17.dpk | 39 + FastScript/fsDB18.dpk | 39 + FastScript/fsDB19.dpk | 39 + FastScript/fsDB20.dpk | 39 + FastScript/fsDB21.dpk | 39 + FastScript/fsDB22.dpk | 39 + FastScript/fsDB23.dpk | 39 + FastScript/fsDB24.dpk | 39 + FastScript/fsDB25.dpk | 39 + FastScript/fsDB26.dpk | 39 + FastScript/fsDB27.dpk | 39 + FastScript/fsDB28.dpk | 39 + FastScript/fsDB4.bpk | 187 + FastScript/fsDB4.cpp | 19 + FastScript/fsDB4.dpk | 41 + FastScript/fsDB5.bpk | 108 + FastScript/fsDB5.cpp | 23 + FastScript/fsDB5.dpk | 41 + FastScript/fsDB6.bpk | 123 + FastScript/fsDB6.cpp | 17 + FastScript/fsDB6.dpk | 41 + FastScript/fsDB7.dpk | 41 + FastScript/fsDB9.dpk | 41 + FastScript/fsFD15.dpk | 44 + FastScript/fsFD16.dpk | 44 + FastScript/fsFD17.dpk | 44 + FastScript/fsFD18.dpk | 43 + FastScript/fsFD19.dpk | 43 + FastScript/fsFD20.dpk | 43 + FastScript/fsFD21.dpk | 43 + FastScript/fsFD22.dpk | 43 + FastScript/fsFD23.dpk | 43 + FastScript/fsFD24.dpk | 43 + FastScript/fsFD25.dpk | 43 + FastScript/fsFD26.dpk | 43 + FastScript/fsFD27.dpk | 43 + FastScript/fsFD28.dpk | 43 + FastScript/fsFD29.dpk | 43 + FastScript/fsIBX10.dpk | 42 + FastScript/fsIBX11.dpk | 42 + FastScript/fsIBX12.dpk | 42 + FastScript/fsIBX14.dpk | 40 + FastScript/fsIBX15.dpk | 40 + FastScript/fsIBX16.dpk | 40 + FastScript/fsIBX17.dpk | 40 + FastScript/fsIBX18.dpk | 40 + FastScript/fsIBX19.dpk | 40 + FastScript/fsIBX20.dpk | 40 + FastScript/fsIBX21.dpk | 40 + FastScript/fsIBX22.dpk | 40 + FastScript/fsIBX23.dpk | 40 + FastScript/fsIBX24.dpk | 40 + FastScript/fsIBX25.dpk | 40 + FastScript/fsIBX26.dpk | 40 + FastScript/fsIBX27.dpk | 40 + FastScript/fsIBX28.dpk | 40 + FastScript/fsIBX29.dpk | 40 + FastScript/fsIBX5.bpk | 108 + FastScript/fsIBX5.cpp | 26 + FastScript/fsIBX5.dpk | 42 + FastScript/fsIBX6.bpk | 125 + FastScript/fsIBX6.cpp | 17 + FastScript/fsIBX6.dpk | 42 + FastScript/fsIBX7.dpk | 42 + FastScript/fsIBX9.dpk | 42 + FastScript/fsTee10.dpk | 52 + FastScript/fsTee11.dpk | 52 + FastScript/fsTee12.dpk | 52 + FastScript/fsTee14.dpk | 49 + FastScript/fsTee15.dpk | 49 + FastScript/fsTee16.dpk | 49 + FastScript/fsTee17.dpk | 49 + FastScript/fsTee18.dpk | 49 + FastScript/fsTee19.dpk | 49 + FastScript/fsTee20.dpk | 49 + FastScript/fsTee21.dpk | 49 + FastScript/fsTee22.dpk | 49 + FastScript/fsTee23.dpk | 49 + FastScript/fsTee24.dpk | 49 + FastScript/fsTee25.dpk | 49 + FastScript/fsTee26.dpk | 49 + FastScript/fsTee27.dpk | 49 + FastScript/fsTee28.dpk | 49 + FastScript/fsTee29.dpk | 49 + FastScript/fsTee4.bpk | 187 + FastScript/fsTee4.cpp | 21 + FastScript/fsTee4.dpk | 48 + FastScript/fsTee5.bpk | 108 + FastScript/fsTee5.cpp | 25 + FastScript/fsTee5.dpk | 48 + FastScript/fsTee6.bpk | 124 + FastScript/fsTee6.cpp | 17 + FastScript/fsTee6.dpk | 48 + FastScript/fsTee7.dpk | 52 + FastScript/fsTee9.dpk | 52 + FastScript/fs_iadoreg.pas | 45 + FastScript/fs_iadortti.pas | 135 + FastScript/fs_ibasic.pas | 193 + FastScript/fs_ibdereg.pas | 45 + FastScript/fs_ibdertti.pas | 171 + FastScript/fs_ibx.lpk | 49 + FastScript/fs_ichartrtti.pas | 195 + FastScript/fs_iclassesrtti.pas | 1052 ++ FastScript/fs_iconst.pas | 66 + FastScript/fs_icpp.pas | 183 + FastScript/fs_idbctrlsrtti.pas | 189 + FastScript/fs_idbreg.pas | 46 + FastScript/fs_idbrtti.pas | 583 + FastScript/fs_idialogsrtti.pas | 167 + FastScript/fs_idisp.pas | 136 + FastScript/fs_ievents.pas | 201 + FastScript/fs_iexpression.pas | 957 ++ FastScript/fs_iextctrlsrtti.pas | 434 + FastScript/fs_ifdreg.dcr | Bin 0 -> 1848 bytes FastScript/fs_ifdreg.pas | 33 + FastScript/fs_ifdrtti.pas | 391 + FastScript/fs_iformsrtti.pas | 439 + FastScript/fs_igraphicsrtti.pas | 262 + FastScript/fs_iibxreg.pas | 58 + FastScript/fs_iibxrtti.pas | 127 + FastScript/fs_iilparser.pas | 2059 ++++ FastScript/fs_iinirtti.pas | 377 + FastScript/fs_iinterpreter.pas | 3547 ++++++ FastScript/fs_ijs.pas | 168 + FastScript/fs_imenusrtti.pas | 183 + FastScript/fs_iparser.pas | 762 ++ FastScript/fs_ipascal.pas | 201 + FastScript/fs_ireg.dcr | Bin 0 -> 36456 bytes FastScript/fs_ireg.lrs | 1741 +++ FastScript/fs_ireg.pas | 90 + FastScript/fs_isysrtti.pas | 623 + FastScript/fs_iteereg.pas | 46 + FastScript/fs_itools.pas | 712 ++ FastScript/fs_lazarus.lpk | 159 + FastScript/fs_lazarus.pas | 25 + FastScript/fs_synmemo.dfm | Bin 0 -> 717 bytes FastScript/fs_synmemo.lfm | 56 + FastScript/fs_synmemo.pas | 2113 ++++ FastScript/fs_tree.pas | 426 + FastScript/fs_tree.res | Bin 0 -> 3172 bytes FastScript/fs_xml.pas | 756 ++ FastScript/fsx.dpk | 76 + FastScript/fsx.res | Bin 0 -> 876 bytes FastScript/readme_lazarus.txt | 6 + FastScript/tee.inc | 85 + LibD28/FMX.BaseTypeAliases.pas | 283 + LibD28/FMX.ConverterFR3toFRFMX.pas | 174 + LibD28/FMX.DelphiZXIngQRCode.pas | 3795 ++++++ LibD28/FMX.ExportTTFFont.pas | 803 ++ LibD28/FMX.FormTypeAliases.pas | 70 + LibD28/FMX.Linux.Old.frxPrinter.pas | 591 + LibD28/FMX.Linux.frxPrinter.pas | 1324 ++ LibD28/FMX.Mac.frxPrinter.pas | 529 + LibD28/FMX.TTFHelpers.pas | 68 + LibD28/FMX.Win.frxPrinter.pas | 901 ++ LibD28/FMX.frxADOComponents.pas | 1051 ++ LibD28/FMX.frxADOEditor.pas | 157 + LibD28/FMX.frxADORTTI.pas | 102 + LibD28/FMX.frxAbout.fmx | 274 + LibD28/FMX.frxAbout.pas | 98 + LibD28/FMX.frxAggregate.pas | 698 ++ LibD28/FMX.frxBarcod.pas | 2044 ++++ LibD28/FMX.frxBarcode.pas | 302 + LibD28/FMX.frxBarcode2DBase.pas | 468 + LibD28/FMX.frxBarcode2DRTTI.pas | 68 + LibD28/FMX.frxBarcode2DView.pas | 360 + LibD28/FMX.frxBarcodeDataMatrix.pas | 1308 ++ LibD28/FMX.frxBarcodeEditor.fmx | 151 + LibD28/FMX.frxBarcodeEditor.pas | 307 + LibD28/FMX.frxBarcodePDF417.pas | 1745 +++ LibD28/FMX.frxBarcodeProperties.pas | 325 + LibD28/FMX.frxBarcodeQR.pas | 171 + LibD28/FMX.frxBarcodeRTTI.pas | 57 + LibD28/FMX.frxBaseModalForm.pas | 219 + LibD28/FMX.frxCanvas.Linux.pas | 76 + LibD28/FMX.frxCanvas.Mac.pas | 166 + LibD28/FMX.frxChBox.pas | 249 + LibD28/FMX.frxChBoxRTTI.pas | 53 + LibD28/FMX.frxChart.pas | 786 ++ LibD28/FMX.frxChartEditor.fmx | 365 + LibD28/FMX.frxChartEditor.pas | 828 ++ LibD28/FMX.frxChartGallery.fmx | 35 + LibD28/FMX.frxChartGallery.pas | 85 + LibD28/FMX.frxChartHelpers.pas | 573 + LibD28/FMX.frxChartRTTI.pas | 116 + LibD28/FMX.frxClass.pas | 10116 ++++++++++++++++ LibD28/FMX.frxClass.res | Bin 0 -> 1248 bytes LibD28/FMX.frxClassRTTI.pas | 611 + LibD28/FMX.frxCmapTableClass.pas | 275 + LibD28/FMX.frxCodeUtils.pas | 271 + LibD28/FMX.frxConnWizard.fmx | 249 + LibD28/FMX.frxConnWizard.pas | 551 + LibD28/FMX.frxConnWizard.res | Bin 0 -> 1312 bytes LibD28/FMX.frxCross.pas | 4377 +++++++ LibD28/FMX.frxCrossEditor.fmx | 342 + LibD28/FMX.frxCrossEditor.pas | 1029 ++ LibD28/FMX.frxCrossRTTI.pas | 140 + LibD28/FMX.frxCrypto.pas | 1456 +++ LibD28/FMX.frxCtrls.pas | 435 + LibD28/FMX.frxCustomDB.pas | 833 ++ LibD28/FMX.frxCustomDBEditor.pas | 355 + LibD28/FMX.frxCustomDBRTTI.pas | 182 + LibD28/FMX.frxCustomEditors.pas | 174 + LibD28/FMX.frxDBSet.pas | 473 + LibD28/FMX.frxDBXComponents.pas | 654 + LibD28/FMX.frxDBXEditor.pas | 167 + LibD28/FMX.frxDBXRTTI.pas | 68 + LibD28/FMX.frxDCtrl.pas | 1635 +++ LibD28/FMX.frxDCtrlRTTI.pas | 130 + LibD28/FMX.frxDMPClass.pas | 491 + LibD28/FMX.frxDataTree.fmx | 131 + LibD28/FMX.frxDataTree.pas | 765 ++ LibD28/FMX.frxDesgn.fmx | 1811 +++ LibD28/FMX.frxDesgn.pas | 5696 +++++++++ LibD28/FMX.frxDesgn.res | Bin 0 -> 53948 bytes LibD28/FMX.frxDesgnCtrls.pas | 1298 ++ LibD28/FMX.frxDesgnEditors.pas | 1557 +++ LibD28/FMX.frxDesgnWorkspace.pas | 3102 +++++ LibD28/FMX.frxDesgnWorkspace.res | Bin 0 -> 676 bytes LibD28/FMX.frxDesgnWorkspace1.pas | 939 ++ LibD28/FMX.frxDesgn_D23.fmx | 1800 +++ LibD28/FMX.frxDialogForm.fmx | 10 + LibD28/FMX.frxDialogForm.pas | 98 + LibD28/FMX.frxDsgnIntf.pas | 1789 +++ LibD28/FMX.frxEditAliases.fmx | 69 + LibD28/FMX.frxEditAliases.pas | 404 + LibD28/FMX.frxEditDataBand.fmx | 65 + LibD28/FMX.frxEditDataBand.pas | 171 + LibD28/FMX.frxEditExpr.fmx | 75 + LibD28/FMX.frxEditExpr.pas | 147 + LibD28/FMX.frxEditFormat.fmx | 93 + LibD28/FMX.frxEditFormat.pas | 223 + LibD28/FMX.frxEditFrame.fmx | 232 + LibD28/FMX.frxEditFrame.pas | 224 + LibD28/FMX.frxEditGroup.fmx | 113 + LibD28/FMX.frxEditGroup.pas | 199 + LibD28/FMX.frxEditHighlight.fmx | 98 + LibD28/FMX.frxEditHighlight.pas | 174 + LibD28/FMX.frxEditMD.fmx | 94 + LibD28/FMX.frxEditMD.pas | 165 + LibD28/FMX.frxEditMemo.fmx | 98 + LibD28/FMX.frxEditMemo.pas | 313 + LibD28/FMX.frxEditOptions.fmx | 274 + LibD28/FMX.frxEditOptions.pas | 266 + LibD28/FMX.frxEditPage.fmx | 367 + LibD28/FMX.frxEditPage.pas | 375 + LibD28/FMX.frxEditPicture.fmx | 78 + LibD28/FMX.frxEditPicture.pas | 194 + LibD28/FMX.frxEditQueryParams.fmx | 65 + LibD28/FMX.frxEditQueryParams.pas | 265 + LibD28/FMX.frxEditReport.fmx | 350 + LibD28/FMX.frxEditReport.pas | 348 + LibD28/FMX.frxEditReportData.fmx | 38 + LibD28/FMX.frxEditReportData.pas | 216 + LibD28/FMX.frxEditSQL.fmx | 49 + LibD28/FMX.frxEditSQL.pas | 220 + LibD28/FMX.frxEditStrings.fmx | 41 + LibD28/FMX.frxEditStrings.pas | 93 + LibD28/FMX.frxEditStyle.fmx | 138 + LibD28/FMX.frxEditStyle.pas | 326 + LibD28/FMX.frxEditSysMemo.fmx | 178 + LibD28/FMX.frxEditSysMemo.pas | 319 + LibD28/FMX.frxEditTabOrder.fmx | 58 + LibD28/FMX.frxEditTabOrder.pas | 166 + LibD28/FMX.frxEditVar.fmx | 189 + LibD28/FMX.frxEditVar.pas | 554 + LibD28/FMX.frxEngine.pas | 2810 +++++ LibD28/FMX.frxEvaluateForm.fmx | 57 + LibD28/FMX.frxEvaluateForm.pas | 109 + LibD28/FMX.frxExportCSV.fmx | 110 + LibD28/FMX.frxExportCSV.pas | 593 + LibD28/FMX.frxExportHTML.fmx | 171 + LibD28/FMX.frxExportHTML.pas | 1244 ++ LibD28/FMX.frxExportImage.fmx | 141 + LibD28/FMX.frxExportImage.pas | 1125 ++ LibD28/FMX.frxExportMatrix.pas | 1755 +++ LibD28/FMX.frxExportODF.fmx | 113 + LibD28/FMX.frxExportODF.pas | 1884 +++ LibD28/FMX.frxExportPDF.fmx | 351 + LibD28/FMX.frxExportPDF.pas | 3967 ++++++ LibD28/FMX.frxExportRTF.fmx | 189 + LibD28/FMX.frxExportRTF.pas | 991 ++ LibD28/FMX.frxExportTXT.fmx | 400 + LibD28/FMX.frxExportTXT.pas | 1541 +++ LibD28/FMX.frxExportText.fmx | 115 + LibD28/FMX.frxExportText.pas | 594 + LibD28/FMX.frxExportXML.fmx | 210 + LibD28/FMX.frxExportXML.pas | 849 ++ LibD28/FMX.frxFDComponents.pas | 1325 ++ LibD28/FMX.frxFDComponents.res | Bin 0 -> 440 bytes LibD28/FMX.frxFDEditor.pas | 375 + LibD28/FMX.frxFDRTTI.pas | 161 + LibD28/FMX.frxFDReg.pas | 34 + LibD28/FMX.frxFMX.pas | 2970 +++++ LibD28/FMX.frxFontForm.fmx | 160 + LibD28/FMX.frxFontForm.pas | 233 + LibD28/FMX.frxFontHeaderClass.pas | 139 + LibD28/FMX.frxGZip.pas | 257 + LibD28/FMX.frxGlyphSubstitutionClass.pas | 164 + LibD28/FMX.frxGlyphTableClass.pas | 334 + LibD28/FMX.frxGradient.pas | 333 + LibD28/FMX.frxGradientRTTI.pas | 53 + LibD28/FMX.frxGraphicUtils.pas | 1704 +++ LibD28/FMX.frxHorizontalHeaderClass.pas | 133 + LibD28/FMX.frxHorizontalMetrixClass.pas | 69 + LibD28/FMX.frxIBXComponents.pas | 538 + LibD28/FMX.frxIBXEditor.pas | 167 + LibD28/FMX.frxIBXRTTI.pas | 98 + LibD28/FMX.frxIndexToLocationClass.pas | 107 + LibD28/FMX.frxInheritError.fmx | 50 + LibD28/FMX.frxInheritError.pas | 60 + LibD28/FMX.frxInsp.fmx | 485 + LibD28/FMX.frxInsp.pas | 1151 ++ LibD28/FMX.frxInsp_D23.fmx | 365 + LibD28/FMX.frxKerningTableClass.pas | 176 + LibD28/FMX.frxLinuxFonts.pas | 376 + LibD28/FMX.frxMD5.pas | 550 + LibD28/FMX.frxMaximumProfileClass.pas | 117 + LibD28/FMX.frxNameTableClass.pas | 147 + LibD28/FMX.frxNewItem.pas | 170 + LibD28/FMX.frxOS2WindowsMetricsClass.pas | 214 + LibD28/FMX.frxPassw.pas | 59 + LibD28/FMX.frxPictureCache.pas | 357 + LibD28/FMX.frxPopupForm.fmx | 15 + LibD28/FMX.frxPopupForm.pas | 49 + LibD28/FMX.frxPostScriptClass.pas | 102 + LibD28/FMX.frxPreProgramClass.pas | 61 + LibD28/FMX.frxPreview.fmx | 352 + LibD28/FMX.frxPreview.pas | 2791 +++++ LibD28/FMX.frxPreview.res | Bin 0 -> 63296 bytes LibD28/FMX.frxPreviewPageSettings.fmx | 235 + LibD28/FMX.frxPreviewPageSettings.pas | 275 + LibD28/FMX.frxPreviewPages.pas | 2742 +++++ LibD28/FMX.frxPrintDialog.fmx | 257 + LibD28/FMX.frxPrintDialog.pas | 365 + LibD28/FMX.frxPrinter.pas | 569 + LibD28/FMX.frxProgress.fmx | 43 + LibD28/FMX.frxProgress.pas | 134 + LibD28/FMX.frxRC4.pas | 78 + LibD28/FMX.frxReportTree.fmx | 33 + LibD28/FMX.frxReportTree.pas | 251 + LibD28/FMX.frxRes.pas | 375 + LibD28/FMX.frxSearchDialog.fmx | 104 + LibD28/FMX.frxSearchDialog.pas | 103 + LibD28/FMX.frxStdWizard.pas | 1095 ++ LibD28/FMX.frxSynMemo.pas | 2143 ++++ LibD28/FMX.frxTrueTypeCollection.pas | 305 + LibD28/FMX.frxTrueTypeFont.pas | 1114 ++ LibD28/FMX.frxTrueTypeTable.pas | 191 + LibD28/FMX.frxUnicodeUtils.pas | 431 + LibD28/FMX.frxUtils.pas | 937 ++ LibD28/FMX.frxVariables.pas | 407 + LibD28/FMX.frxWatchForm.fmx | 52 + LibD28/FMX.frxWatchForm.pas | 196 + LibD28/FMX.frxXML.pas | 983 ++ LibD28/FMX.frxXMLSerializer.pas | 881 ++ LibD28/FMX.frxZip.pas | 561 + LibD28/FMX.frxrcClass.pas | 100 + LibD28/FMX.frxrcDesgn.pas | 281 + LibD28/FMX.frxrcExports.pas | 99 + LibD28/FMX.frxrcInsp.pas | 860 ++ LibD28/FMX.fs_iadortti.pas | 129 + LibD28/FMX.fs_ibasic.pas | 14 + LibD28/FMX.fs_ichartrtti.pas | 181 + LibD28/FMX.fs_iclassesrtti.pas | 14 + LibD28/FMX.fs_iconst.pas | 14 + LibD28/FMX.fs_icpp.pas | 14 + LibD28/FMX.fs_idbrtti.pas | 570 + LibD28/FMX.fs_idialogsrtti.pas | 133 + LibD28/FMX.fs_idisp.pas | 14 + LibD28/FMX.fs_ievents.pas | 379 + LibD28/FMX.fs_iexpression.pas | 14 + LibD28/FMX.fs_iextctrlsrtti.pas | 268 + LibD28/FMX.fs_iformsrtti.pas | 864 ++ LibD28/FMX.fs_igraphicsrtti.pas | 522 + LibD28/FMX.fs_iibxrtti.pas | 125 + LibD28/FMX.fs_iilparser.pas | 14 + LibD28/FMX.fs_iinirtti.pas | 372 + LibD28/FMX.fs_iinterpreter.pas | 14 + LibD28/FMX.fs_ijs.pas | 14 + LibD28/FMX.fs_imenusrtti.pas | 104 + LibD28/FMX.fs_iparser.pas | 14 + LibD28/FMX.fs_ipascal.pas | 14 + LibD28/FMX.fs_isysrtti.pas | 14 + LibD28/FMX.fs_itools.pas | 14 + LibD28/FMX.fs_lazarus.pas | 25 + LibD28/FMX.fs_synmemo.fmx | 50 + LibD28/FMX.fs_synmemo.pas | 2397 ++++ LibD28/FMX.fs_tree.pas | 659 + LibD28/FMX.fs_xml.pas | 15 + LibD28/FMXfrx16.dpk | 127 + LibD28/FMXfrx16.otares | Bin 0 -> 96 bytes LibD28/FMXfrx16.res | Bin 0 -> 448 bytes LibD28/FMXfrx17.dpk | 130 + LibD28/FMXfrx17.otares | Bin 0 -> 96 bytes LibD28/FMXfrx17.res | Bin 0 -> 448 bytes LibD28/FMXfrx18.dpk | 130 + LibD28/FMXfrx18.otares | Bin 0 -> 96 bytes LibD28/FMXfrx18.res | Bin 0 -> 448 bytes LibD28/FMXfrx19.dpk | 129 + LibD28/FMXfrx19.otares | Bin 0 -> 96 bytes LibD28/FMXfrx19.res | Bin 0 -> 448 bytes LibD28/FMXfrx20.dpk | 129 + LibD28/FMXfrx20.otares | Bin 0 -> 96 bytes LibD28/FMXfrx20.res | Bin 0 -> 448 bytes LibD28/FMXfrx21.dpk | 129 + LibD28/FMXfrx21.otares | Bin 0 -> 96 bytes LibD28/FMXfrx21.res | Bin 0 -> 448 bytes LibD28/FMXfrx22.dpk | 129 + LibD28/FMXfrx22.otares | Bin 0 -> 96 bytes LibD28/FMXfrx22.res | Bin 0 -> 448 bytes LibD28/FMXfrx23.dpk | 129 + LibD28/FMXfrx23.otares | Bin 0 -> 96 bytes LibD28/FMXfrx23.res | Bin 0 -> 448 bytes LibD28/FMXfrx24.dpk | 129 + LibD28/FMXfrx24.dproj | 199 + LibD28/FMXfrx24.otares | Bin 0 -> 96 bytes LibD28/FMXfrx24.res | Bin 0 -> 448 bytes LibD28/FMXfrx25.dpk | 129 + LibD28/FMXfrx25.otares | Bin 0 -> 96 bytes LibD28/FMXfrx25.res | Bin 0 -> 448 bytes LibD28/FMXfrx26.dpk | 127 + LibD28/FMXfrx27.dpk | 134 + LibD28/FMXfrx29.dpk | 134 + LibD28/FMXfrx29.dproj | 221 + LibD28/FMXfrx29.res | Bin 0 -> 640 bytes LibD28/FMXfrxADO16.dpk | 46 + LibD28/FMXfrxADO16.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO17.dpk | 46 + LibD28/FMXfrxADO17.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO18.dpk | 46 + LibD28/FMXfrxADO18.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO19.dpk | 46 + LibD28/FMXfrxADO19.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO20.dpk | 46 + LibD28/FMXfrxADO20.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO21.dpk | 46 + LibD28/FMXfrxADO21.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO22.dpk | 46 + LibD28/FMXfrxADO22.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO23.dpk | 46 + LibD28/FMXfrxADO23.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO24.dpk | 46 + LibD28/FMXfrxADO24.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO25.dpk | 46 + LibD28/FMXfrxADO25.res | Bin 0 -> 448 bytes LibD28/FMXfrxADO26.dpk | 46 + LibD28/FMXfrxADO27.dpk | 46 + LibD28/FMXfrxADO28.dpk | 46 + LibD28/FMXfrxADO29.dpk | 46 + LibD28/FMXfrxADOReg.dcr | Bin 0 -> 1864 bytes LibD28/FMXfrxADOReg.pas | 33 + LibD28/FMXfrxDB16.dpk | 51 + LibD28/FMXfrxDB16.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB16.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB17.dpk | 50 + LibD28/FMXfrxDB17.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB17.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB18.dpk | 51 + LibD28/FMXfrxDB18.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB18.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB19.dpk | 51 + LibD28/FMXfrxDB19.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB19.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB20.dpk | 51 + LibD28/FMXfrxDB20.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB20.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB21.dpk | 51 + LibD28/FMXfrxDB21.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB21.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB22.dpk | 51 + LibD28/FMXfrxDB22.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB22.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB23.dpk | 51 + LibD28/FMXfrxDB23.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB23.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB24.dpk | 51 + LibD28/FMXfrxDB24.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB24.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB25.dpk | 51 + LibD28/FMXfrxDB25.otares | Bin 0 -> 96 bytes LibD28/FMXfrxDB25.res | Bin 0 -> 448 bytes LibD28/FMXfrxDB26.dpk | 49 + LibD28/FMXfrxDB27.dpk | 49 + LibD28/FMXfrxDB29.dpk | 49 + LibD28/FMXfrxDB29.dproj | 134 + LibD28/FMXfrxDB29.res | Bin 0 -> 652 bytes LibD28/FMXfrxDBX16.dpk | 47 + LibD28/FMXfrxDBX16.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX17.dpk | 47 + LibD28/FMXfrxDBX17.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX18.dpk | 47 + LibD28/FMXfrxDBX18.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX19.dpk | 47 + LibD28/FMXfrxDBX19.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX20.dpk | 47 + LibD28/FMXfrxDBX20.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX21.dpk | 47 + LibD28/FMXfrxDBX21.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX22.dpk | 47 + LibD28/FMXfrxDBX22.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX23.dpk | 47 + LibD28/FMXfrxDBX23.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX24.dpk | 47 + LibD28/FMXfrxDBX24.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX25.dpk | 47 + LibD28/FMXfrxDBX25.res | Bin 0 -> 448 bytes LibD28/FMXfrxDBX26.dpk | 47 + LibD28/FMXfrxDBX27.dpk | 47 + LibD28/FMXfrxDBX29.dpk | 47 + LibD28/FMXfrxDBX29.dproj | 145 + LibD28/FMXfrxDBX29.res | Bin 0 -> 652 bytes LibD28/FMXfrxDBXReg.dcr | Bin 0 -> 1864 bytes LibD28/FMXfrxDBXReg.pas | 33 + LibD28/FMXfrxFD18.dpk | 52 + LibD28/FMXfrxFD18.otares | Bin 0 -> 96 bytes LibD28/FMXfrxFD18.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD19.dpk | 50 + LibD28/FMXfrxFD19.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD20.dpk | 50 + LibD28/FMXfrxFD20.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD21.dpk | 50 + LibD28/FMXfrxFD21.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD22.dpk | 50 + LibD28/FMXfrxFD22.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD23.dpk | 50 + LibD28/FMXfrxFD23.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD24.dpk | 50 + LibD28/FMXfrxFD24.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD25.dpk | 50 + LibD28/FMXfrxFD25.res | Bin 0 -> 448 bytes LibD28/FMXfrxFD26.dpk | 49 + LibD28/FMXfrxFD27.dpk | 49 + LibD28/FMXfrxFD29.dpk | 49 + LibD28/FMXfrxFD29.dproj | 135 + LibD28/FMXfrxFD29.res | Bin 0 -> 652 bytes LibD28/FMXfrxFDReg.dcr | Bin 0 -> 1736 bytes LibD28/FMXfrxIBX16.dpk | 47 + LibD28/FMXfrxIBX16.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX17.dpk | 47 + LibD28/FMXfrxIBX17.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX18.dpk | 47 + LibD28/FMXfrxIBX18.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX19.dpk | 47 + LibD28/FMXfrxIBX19.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX20.dpk | 47 + LibD28/FMXfrxIBX20.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX21.dpk | 47 + LibD28/FMXfrxIBX21.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX22.dpk | 47 + LibD28/FMXfrxIBX22.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX23.dpk | 47 + LibD28/FMXfrxIBX23.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX24.dpk | 47 + LibD28/FMXfrxIBX24.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX25.dpk | 47 + LibD28/FMXfrxIBX25.res | Bin 0 -> 448 bytes LibD28/FMXfrxIBX26.dpk | 47 + LibD28/FMXfrxIBX27.dpk | 47 + LibD28/FMXfrxIBX28.dpk | 47 + LibD28/FMXfrxIBXReg.dcr | Bin 0 -> 1864 bytes LibD28/FMXfrxIBXReg.pas | 34 + LibD28/FMXfrxReg.pas | 148 + LibD28/FMXfrxRegCtrls.pas | 37 + LibD28/FMXfrxRegDB.pas | 38 + LibD28/FMXfrxRegTee.pas | 37 + LibD28/FMXfrxTee16.dpk | 50 + LibD28/FMXfrxTee16.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee16.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee17.dpk | 49 + LibD28/FMXfrxTee17.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee17.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee18.dpk | 49 + LibD28/FMXfrxTee18.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee18.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee19.dpk | 50 + LibD28/FMXfrxTee19.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee19.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee20.dpk | 49 + LibD28/FMXfrxTee20.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee20.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee21.dpk | 49 + LibD28/FMXfrxTee21.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee21.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee22.dpk | 49 + LibD28/FMXfrxTee22.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee22.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee23.dpk | 49 + LibD28/FMXfrxTee23.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee23.res | Bin 0 -> 448 bytes LibD28/FMXfrxTee24.dpk | 49 + LibD28/FMXfrxTee24.dproj | 126 + LibD28/FMXfrxTee24.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee24.res | Bin 0 -> 384 bytes LibD28/FMXfrxTee25.dpk | 49 + LibD28/FMXfrxTee25.otares | Bin 0 -> 96 bytes LibD28/FMXfrxTee25.res | Bin 0 -> 384 bytes LibD28/FMXfrxTee26.dpk | 49 + LibD28/FMXfrxTee27.dpk | 49 + LibD28/FMXfrxTee28.dproj | 120 + LibD28/FMXfrxTee29.dpk | 49 + LibD28/FMXfrxTee29.dproj | 148 + LibD28/FMXfrxTee29.res | Bin 0 -> 652 bytes LibD28/FMXfrxe16.dpk | 71 + LibD28/FMXfrxe16.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe16.res | Bin 0 -> 448 bytes LibD28/FMXfrxe17.dpk | 72 + LibD28/FMXfrxe17.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe17.res | Bin 0 -> 448 bytes LibD28/FMXfrxe18.dpk | 71 + LibD28/FMXfrxe18.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe18.res | Bin 0 -> 448 bytes LibD28/FMXfrxe19.dpk | 72 + LibD28/FMXfrxe19.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe19.res | Bin 0 -> 448 bytes LibD28/FMXfrxe20.dpk | 72 + LibD28/FMXfrxe20.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe20.res | Bin 0 -> 448 bytes LibD28/FMXfrxe21.dpk | 72 + LibD28/FMXfrxe21.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe21.res | Bin 0 -> 448 bytes LibD28/FMXfrxe22.dpk | 72 + LibD28/FMXfrxe22.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe22.res | Bin 0 -> 448 bytes LibD28/FMXfrxe23.dpk | 72 + LibD28/FMXfrxe23.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe23.res | Bin 0 -> 448 bytes LibD28/FMXfrxe24.dpk | 72 + LibD28/FMXfrxe24.dproj | 144 + LibD28/FMXfrxe24.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe24.res | Bin 0 -> 448 bytes LibD28/FMXfrxe25.dpk | 72 + LibD28/FMXfrxe25.otares | Bin 0 -> 96 bytes LibD28/FMXfrxe25.res | Bin 0 -> 448 bytes LibD28/FMXfrxe26.dpk | 69 + LibD28/FMXfrxe27.dpk | 70 + LibD28/FMXfrxe29.dpk | 70 + LibD28/FMXfrxeReg.pas | 51 + LibD28/FMXfs16.dpk | 60 + LibD28/FMXfs16.res | Bin 0 -> 448 bytes LibD28/FMXfs17.dpk | 60 + LibD28/FMXfs17.res | Bin 0 -> 448 bytes LibD28/FMXfs18.dpk | 60 + LibD28/FMXfs18.otares | Bin 0 -> 96 bytes LibD28/FMXfs18.res | Bin 0 -> 448 bytes LibD28/FMXfs19.dpk | 60 + LibD28/FMXfs19.otares | Bin 0 -> 96 bytes LibD28/FMXfs19.res | Bin 0 -> 448 bytes LibD28/FMXfs20.dpk | 60 + LibD28/FMXfs20.otares | Bin 0 -> 96 bytes LibD28/FMXfs20.res | Bin 0 -> 448 bytes LibD28/FMXfs21.dpk | 60 + LibD28/FMXfs21.otares | Bin 0 -> 96 bytes LibD28/FMXfs21.res | Bin 0 -> 448 bytes LibD28/FMXfs22.dpk | 60 + LibD28/FMXfs22.otares | Bin 0 -> 96 bytes LibD28/FMXfs22.res | Bin 0 -> 448 bytes LibD28/FMXfs23.dpk | 59 + LibD28/FMXfs23.otares | Bin 0 -> 96 bytes LibD28/FMXfs23.res | Bin 0 -> 448 bytes LibD28/FMXfs24.dpk | 59 + LibD28/FMXfs24.otares | Bin 0 -> 96 bytes LibD28/FMXfs24.res | Bin 0 -> 448 bytes LibD28/FMXfs25.dpk | 59 + LibD28/FMXfs25.otares | Bin 0 -> 96 bytes LibD28/FMXfs25.res | Bin 0 -> 448 bytes LibD28/FMXfs26.dpk | 59 + LibD28/FMXfs27.dpk | 59 + LibD28/FMXfs28.dpk | 61 + LibD28/FMXfs29.dpk | 61 + LibD28/FMXfs29.dproj | 168 + LibD28/FMXfs29.res | Bin 0 -> 628 bytes LibD28/FMXfsADO16.dpk | 40 + LibD28/FMXfsADO16.res | Bin 0 -> 448 bytes LibD28/FMXfsADO17.dpk | 40 + LibD28/FMXfsADO17.res | Bin 0 -> 448 bytes LibD28/FMXfsADO18.dpk | 40 + LibD28/FMXfsADO18.res | Bin 0 -> 448 bytes LibD28/FMXfsADO19.dpk | 40 + LibD28/FMXfsADO19.res | Bin 0 -> 448 bytes LibD28/FMXfsADO20.dpk | 40 + LibD28/FMXfsADO20.res | Bin 0 -> 448 bytes LibD28/FMXfsADO21.dpk | 40 + LibD28/FMXfsADO21.res | Bin 0 -> 448 bytes LibD28/FMXfsADO22.dpk | 40 + LibD28/FMXfsADO22.res | Bin 0 -> 448 bytes LibD28/FMXfsADO23.dpk | 40 + LibD28/FMXfsADO23.res | Bin 0 -> 448 bytes LibD28/FMXfsADO24.dpk | 40 + LibD28/FMXfsADO24.res | Bin 0 -> 448 bytes LibD28/FMXfsADO25.dpk | 40 + LibD28/FMXfsADO25.res | Bin 0 -> 448 bytes LibD28/FMXfsADO26.dpk | 40 + LibD28/FMXfsADO27.dpk | 40 + LibD28/FMXfsADO28.dpk | 40 + LibD28/FMXfsADO29.dpk | 40 + LibD28/FMXfsDB16.dpk | 41 + LibD28/FMXfsDB16.res | Bin 0 -> 448 bytes LibD28/FMXfsDB17.dpk | 41 + LibD28/FMXfsDB17.res | Bin 0 -> 448 bytes LibD28/FMXfsDB18.dpk | 42 + LibD28/FMXfsDB18.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB18.res | Bin 0 -> 448 bytes LibD28/FMXfsDB19.dpk | 42 + LibD28/FMXfsDB19.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB19.res | Bin 0 -> 448 bytes LibD28/FMXfsDB20.dpk | 42 + LibD28/FMXfsDB20.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB20.res | Bin 0 -> 448 bytes LibD28/FMXfsDB21.dpk | 42 + LibD28/FMXfsDB21.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB21.res | Bin 0 -> 448 bytes LibD28/FMXfsDB22.dpk | 42 + LibD28/FMXfsDB22.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB22.res | Bin 0 -> 448 bytes LibD28/FMXfsDB23.dpk | 42 + LibD28/FMXfsDB23.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB23.res | Bin 0 -> 448 bytes LibD28/FMXfsDB24.dpk | 42 + LibD28/FMXfsDB24.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB24.res | Bin 0 -> 448 bytes LibD28/FMXfsDB25.dpk | 42 + LibD28/FMXfsDB25.otares | Bin 0 -> 96 bytes LibD28/FMXfsDB25.res | Bin 0 -> 448 bytes LibD28/FMXfsDB26.dpk | 40 + LibD28/FMXfsDB27.dpk | 40 + LibD28/FMXfsDB28.dpk | 40 + LibD28/FMXfsDB29.dpk | 40 + LibD28/FMXfsDB29.dproj | 134 + LibD28/FMXfsDB29.res | Bin 0 -> 640 bytes LibD28/FMXfsIBX16.dpk | 41 + LibD28/FMXfsIBX16.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX17.dpk | 41 + LibD28/FMXfsIBX17.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX18.dpk | 41 + LibD28/FMXfsIBX18.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX19.dpk | 41 + LibD28/FMXfsIBX19.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX20.dpk | 41 + LibD28/FMXfsIBX20.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX21.dpk | 41 + LibD28/FMXfsIBX21.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX22.dpk | 41 + LibD28/FMXfsIBX22.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX23.dpk | 41 + LibD28/FMXfsIBX23.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX24.dpk | 41 + LibD28/FMXfsIBX24.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX25.dpk | 41 + LibD28/FMXfsIBX25.res | Bin 0 -> 448 bytes LibD28/FMXfsIBX26.dpk | 41 + LibD28/FMXfsIBX27.dpk | 41 + LibD28/FMXfsIBX28.dpk | 41 + LibD28/FMXfsIBX29.dpk | 41 + LibD28/FMXfsTee16.dpk | 42 + LibD28/FMXfsTee16.res | Bin 0 -> 448 bytes LibD28/FMXfsTee17.dpk | 43 + LibD28/FMXfsTee17.res | Bin 0 -> 448 bytes LibD28/FMXfsTee18.dpk | 43 + LibD28/FMXfsTee18.res | Bin 0 -> 448 bytes LibD28/FMXfsTee19.dpk | 43 + LibD28/FMXfsTee19.res | Bin 0 -> 448 bytes LibD28/FMXfsTee20.dpk | 43 + LibD28/FMXfsTee20.res | Bin 0 -> 448 bytes LibD28/FMXfsTee21.dpk | 43 + LibD28/FMXfsTee21.res | Bin 0 -> 448 bytes LibD28/FMXfsTee22.dpk | 43 + LibD28/FMXfsTee22.res | Bin 0 -> 448 bytes LibD28/FMXfsTee23.dpk | 45 + LibD28/FMXfsTee23.res | Bin 0 -> 448 bytes LibD28/FMXfsTee24.dpk | 45 + LibD28/FMXfsTee24.res | Bin 0 -> 448 bytes LibD28/FMXfsTee25.dpk | 45 + LibD28/FMXfsTee25.res | Bin 0 -> 448 bytes LibD28/FMXfsTee26.dpk | 45 + LibD28/FMXfsTee27.dpk | 45 + LibD28/FMXfsTee28.dpk | 45 + LibD28/FMXfsTee29.dpk | 45 + LibD28/FMXfsTee29.dproj | 137 + LibD28/FMXfsTee29.res | Bin 0 -> 652 bytes LibD28/FMXfs_iadoreg.pas | 37 + LibD28/FMXfs_idbreg.pas | 37 + LibD28/FMXfs_iibxreg.pas | 37 + LibD28/FMXfs_ireg.pas | 85 + LibD28/FMXfs_iteereg.pas | 38 + LibD28/FmxLinuxFrxDBX.dpr | 19 + LibD28/FmxLinuxFrxExp.dpr | 47 + LibD28/FmxLinuxFrxFD.dpr | 19 + LibD28/FmxLinuxFrxIBX.dpr | 20 + LibD28/FmxLinuxFrxLang.dpr | 20 + LibD28/FmxLinuxFrxMain.dpr | 131 + LibD28/FmxLinuxFrxTee.dpr | 21 + LibD28/ProjectGroup1.groupproj | 300 + LibD28/dclFMXfrx16.dpk | 39 + LibD28/dclFMXfrx16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx17.dpk | 39 + LibD28/dclFMXfrx17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx18.dpk | 39 + LibD28/dclFMXfrx18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx19.dpk | 39 + LibD28/dclFMXfrx19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx20.dpk | 39 + LibD28/dclFMXfrx20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx21.dpk | 39 + LibD28/dclFMXfrx21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx22.dpk | 39 + LibD28/dclFMXfrx22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx23.dpk | 39 + LibD28/dclFMXfrx23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx24.dpk | 39 + LibD28/dclFMXfrx24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx25.dpk | 39 + LibD28/dclFMXfrx25.otares | Bin 0 -> 96 bytes LibD28/dclFMXfrx25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrx26.dpk | 39 + LibD28/dclFMXfrx27.dpk | 39 + LibD28/dclFMXfrx29.dpk | 39 + LibD28/dclFMXfrx29.dproj | 118 + LibD28/dclFMXfrx29.res | Bin 0 -> 652 bytes LibD28/dclFMXfrxADO16.dpk | 39 + LibD28/dclFMXfrxADO16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO17.dpk | 39 + LibD28/dclFMXfrxADO17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO18.dpk | 39 + LibD28/dclFMXfrxADO18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO19.dpk | 39 + LibD28/dclFMXfrxADO19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO20.dpk | 39 + LibD28/dclFMXfrxADO20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO21.dpk | 39 + LibD28/dclFMXfrxADO21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO22.dpk | 39 + LibD28/dclFMXfrxADO22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO23.dpk | 39 + LibD28/dclFMXfrxADO23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO24.dpk | 39 + LibD28/dclFMXfrxADO24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO25.dpk | 39 + LibD28/dclFMXfrxADO25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxADO26.dpk | 39 + LibD28/dclFMXfrxADO27.dpk | 39 + LibD28/dclFMXfrxADO28.dpk | 39 + LibD28/dclFMXfrxADO29.dpk | 39 + LibD28/dclFMXfrxDB16.dpk | 40 + LibD28/dclFMXfrxDB16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB17.dpk | 40 + LibD28/dclFMXfrxDB17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB18.dpk | 40 + LibD28/dclFMXfrxDB18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB19.dpk | 40 + LibD28/dclFMXfrxDB19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB20.dpk | 40 + LibD28/dclFMXfrxDB20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB21.dpk | 40 + LibD28/dclFMXfrxDB21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB22.dpk | 40 + LibD28/dclFMXfrxDB22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB23.dpk | 40 + LibD28/dclFMXfrxDB23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB24.dpk | 40 + LibD28/dclFMXfrxDB24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB25.dpk | 40 + LibD28/dclFMXfrxDB25.otares | Bin 0 -> 96 bytes LibD28/dclFMXfrxDB25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDB26.dpk | 40 + LibD28/dclFMXfrxDB27.dpk | 40 + LibD28/dclFMXfrxDB29.dpk | 40 + LibD28/dclFMXfrxDB29.dproj | 119 + LibD28/dclFMXfrxDB29.res | Bin 0 -> 664 bytes LibD28/dclFMXfrxDBX16.dpk | 39 + LibD28/dclFMXfrxDBX16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX17.dpk | 39 + LibD28/dclFMXfrxDBX17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX18.dpk | 39 + LibD28/dclFMXfrxDBX18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX19.dpk | 39 + LibD28/dclFMXfrxDBX19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX20.dpk | 39 + LibD28/dclFMXfrxDBX20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX21.dpk | 39 + LibD28/dclFMXfrxDBX21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX22.dpk | 39 + LibD28/dclFMXfrxDBX22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX23.dpk | 39 + LibD28/dclFMXfrxDBX23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX24.dpk | 39 + LibD28/dclFMXfrxDBX24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX25.dpk | 39 + LibD28/dclFMXfrxDBX25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxDBX26.dpk | 39 + LibD28/dclFMXfrxDBX27.dpk | 39 + LibD28/dclFMXfrxDBX28.dproj | 114 + LibD28/dclFMXfrxDBX29.dpk | 39 + LibD28/dclFMXfrxDBX29.dproj | 109 + LibD28/dclFMXfrxDBX29.res | Bin 0 -> 676 bytes LibD28/dclFMXfrxFD18.dpk | 43 + LibD28/dclFMXfrxFD18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD19.dpk | 43 + LibD28/dclFMXfrxFD19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD20.dpk | 43 + LibD28/dclFMXfrxFD20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD21.dpk | 43 + LibD28/dclFMXfrxFD21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD22.dpk | 43 + LibD28/dclFMXfrxFD22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD23.dpk | 43 + LibD28/dclFMXfrxFD23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD24.dpk | 43 + LibD28/dclFMXfrxFD24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD25.dpk | 43 + LibD28/dclFMXfrxFD25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxFD26.dpk | 42 + LibD28/dclFMXfrxFD27.dpk | 42 + LibD28/dclFMXfrxFD29.dpk | 42 + LibD28/dclFMXfrxFD29.dproj | 116 + LibD28/dclFMXfrxFD29.res | Bin 0 -> 664 bytes LibD28/dclFMXfrxIBX16.dpk | 40 + LibD28/dclFMXfrxIBX16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX17.dpk | 40 + LibD28/dclFMXfrxIBX17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX18.dpk | 40 + LibD28/dclFMXfrxIBX18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX19.dpk | 40 + LibD28/dclFMXfrxIBX19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX20.dpk | 40 + LibD28/dclFMXfrxIBX20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX21.dpk | 40 + LibD28/dclFMXfrxIBX21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX22.dpk | 40 + LibD28/dclFMXfrxIBX22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX23.dpk | 40 + LibD28/dclFMXfrxIBX23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX24.dpk | 40 + LibD28/dclFMXfrxIBX24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX25.dpk | 40 + LibD28/dclFMXfrxIBX25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxIBX26.dpk | 40 + LibD28/dclFMXfrxIBX27.dpk | 40 + LibD28/dclFMXfrxIBX28.dpk | 40 + LibD28/dclFMXfrxTee16.dpk | 39 + LibD28/dclFMXfrxTee16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee17.dpk | 39 + LibD28/dclFMXfrxTee17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee18.dpk | 39 + LibD28/dclFMXfrxTee18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee19.dpk | 39 + LibD28/dclFMXfrxTee19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee20.dpk | 39 + LibD28/dclFMXfrxTee20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee21.dpk | 39 + LibD28/dclFMXfrxTee21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee22.dpk | 39 + LibD28/dclFMXfrxTee22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee23.dpk | 39 + LibD28/dclFMXfrxTee23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee24.dpk | 39 + LibD28/dclFMXfrxTee24.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee25.dpk | 39 + LibD28/dclFMXfrxTee25.otares | Bin 0 -> 96 bytes LibD28/dclFMXfrxTee25.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxTee26.dpk | 39 + LibD28/dclFMXfrxTee27.dpk | 39 + LibD28/dclFMXfrxTee29.dpk | 39 + LibD28/dclFMXfrxTee29.dproj | 119 + LibD28/dclFMXfrxTee29.res | Bin 0 -> 676 bytes LibD28/dclFMXfrxe16.dpk | 39 + LibD28/dclFMXfrxe16.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe17.dpk | 39 + LibD28/dclFMXfrxe17.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe18.dpk | 39 + LibD28/dclFMXfrxe18.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe19.dpk | 39 + LibD28/dclFMXfrxe19.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe20.dpk | 39 + LibD28/dclFMXfrxe20.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe21.dpk | 39 + LibD28/dclFMXfrxe21.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe22.dpk | 39 + LibD28/dclFMXfrxe22.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe23.dpk | 39 + LibD28/dclFMXfrxe23.res | Bin 0 -> 448 bytes LibD28/dclFMXfrxe24.dpk | 39 + LibD28/dclFMXfrxe24.dproj | 120 + LibD28/dclFMXfrxe24.otares | Bin 0 -> 96 bytes LibD28/dclFMXfrxe24.res | Bin 0 -> 384 bytes LibD28/dclFMXfrxe25.dpk | 39 + LibD28/dclFMXfrxe25.otares | Bin 0 -> 96 bytes LibD28/dclFMXfrxe25.res | Bin 0 -> 384 bytes LibD28/dclFMXfrxe26.dpk | 39 + LibD28/dclFMXfrxe27.dpk | 39 + LibD28/dclFMXfrxe29.dpk | 39 + LibD28/dclFMXfrxe29.dproj | 114 + LibD28/dclFMXfs16.dpk | 39 + LibD28/dclFMXfs16.res | Bin 0 -> 448 bytes LibD28/dclFMXfs17.dpk | 39 + LibD28/dclFMXfs17.res | Bin 0 -> 448 bytes LibD28/dclFMXfs18.dpk | 44 + LibD28/dclFMXfs18.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs18.res | Bin 0 -> 448 bytes LibD28/dclFMXfs19.dpk | 44 + LibD28/dclFMXfs19.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs19.res | Bin 0 -> 448 bytes LibD28/dclFMXfs20.dpk | 44 + LibD28/dclFMXfs20.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs20.res | Bin 0 -> 448 bytes LibD28/dclFMXfs21.dpk | 44 + LibD28/dclFMXfs21.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs21.res | Bin 0 -> 448 bytes LibD28/dclFMXfs22.dpk | 44 + LibD28/dclFMXfs22.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs22.res | Bin 0 -> 448 bytes LibD28/dclFMXfs23.dpk | 39 + LibD28/dclFMXfs23.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs23.res | Bin 0 -> 448 bytes LibD28/dclFMXfs24.dpk | 39 + LibD28/dclFMXfs24.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs24.res | Bin 0 -> 448 bytes LibD28/dclFMXfs25.dpk | 39 + LibD28/dclFMXfs25.otares | Bin 0 -> 96 bytes LibD28/dclFMXfs25.res | Bin 0 -> 448 bytes LibD28/dclFMXfs26.dpk | 39 + LibD28/dclFMXfs27.dpk | 39 + LibD28/dclFMXfs28.dpk | 39 + LibD28/dclFMXfs29.dpk | 39 + LibD28/dclFMXfs29.dproj | 119 + LibD28/dclFMXfs29.res | Bin 0 -> 652 bytes LibD28/dclFMXfsADO16.dpk | 40 + LibD28/dclFMXfsADO16.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO17.dpk | 40 + LibD28/dclFMXfsADO17.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO18.dpk | 40 + LibD28/dclFMXfsADO18.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO19.dpk | 40 + LibD28/dclFMXfsADO19.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO20.dpk | 40 + LibD28/dclFMXfsADO20.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO21.dpk | 40 + LibD28/dclFMXfsADO21.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO22.dpk | 40 + LibD28/dclFMXfsADO22.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO23.dpk | 40 + LibD28/dclFMXfsADO23.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO24.dpk | 40 + LibD28/dclFMXfsADO24.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO25.dpk | 40 + LibD28/dclFMXfsADO25.res | Bin 0 -> 448 bytes LibD28/dclFMXfsADO26.dpk | 40 + LibD28/dclFMXfsADO27.dpk | 40 + LibD28/dclFMXfsADO28.dpk | 40 + LibD28/dclFMXfsADO29.dpk | 40 + LibD28/dclFMXfsDB16.dpk | 40 + LibD28/dclFMXfsDB16.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB17.dpk | 40 + LibD28/dclFMXfsDB17.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB18.dpk | 45 + LibD28/dclFMXfsDB18.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB18.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB19.dpk | 45 + LibD28/dclFMXfsDB19.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB19.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB20.dpk | 45 + LibD28/dclFMXfsDB20.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB20.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB21.dpk | 45 + LibD28/dclFMXfsDB21.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB21.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB22.dpk | 45 + LibD28/dclFMXfsDB22.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB22.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB23.dpk | 43 + LibD28/dclFMXfsDB23.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB23.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB24.dpk | 43 + LibD28/dclFMXfsDB24.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB24.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB25.dpk | 43 + LibD28/dclFMXfsDB25.otares | Bin 0 -> 96 bytes LibD28/dclFMXfsDB25.res | Bin 0 -> 448 bytes LibD28/dclFMXfsDB26.dpk | 43 + LibD28/dclFMXfsDB27.dpk | 43 + LibD28/dclFMXfsDB28.dpk | 43 + LibD28/dclFMXfsDB29.dpk | 43 + LibD28/dclFMXfsDB29.dproj | 117 + LibD28/dclFMXfsDB29.res | Bin 0 -> 664 bytes LibD28/dclFMXfsIBX16.dpk | 40 + LibD28/dclFMXfsIBX16.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX17.dpk | 40 + LibD28/dclFMXfsIBX17.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX18.dpk | 40 + LibD28/dclFMXfsIBX18.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX19.dpk | 40 + LibD28/dclFMXfsIBX19.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX20.dpk | 40 + LibD28/dclFMXfsIBX20.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX21.dpk | 40 + LibD28/dclFMXfsIBX21.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX22.dpk | 40 + LibD28/dclFMXfsIBX22.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX23.dpk | 40 + LibD28/dclFMXfsIBX23.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX24.dpk | 40 + LibD28/dclFMXfsIBX24.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX25.dpk | 40 + LibD28/dclFMXfsIBX25.res | Bin 0 -> 448 bytes LibD28/dclFMXfsIBX26.dpk | 40 + LibD28/dclFMXfsIBX27.dpk | 40 + LibD28/dclFMXfsIBX28.dpk | 40 + LibD28/dclFMXfsIBX29.dpk | 40 + LibD28/dclFMXfsTee16.dpk | 40 + LibD28/dclFMXfsTee16.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee17.dpk | 40 + LibD28/dclFMXfsTee17.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee18.dpk | 40 + LibD28/dclFMXfsTee18.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee19.dpk | 40 + LibD28/dclFMXfsTee19.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee20.dpk | 40 + LibD28/dclFMXfsTee20.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee21.dpk | 40 + LibD28/dclFMXfsTee21.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee22.dpk | 40 + LibD28/dclFMXfsTee22.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee23.dpk | 40 + LibD28/dclFMXfsTee23.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee24.dpk | 40 + LibD28/dclFMXfsTee24.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee25.dpk | 40 + LibD28/dclFMXfsTee25.res | Bin 0 -> 448 bytes LibD28/dclFMXfsTee26.dpk | 40 + LibD28/dclFMXfsTee27.dpk | 40 + LibD28/dclFMXfsTee28.dpk | 40 + LibD28/dclFMXfsTee29.dpk | 40 + LibD28/dclFMXfsTee29.dproj | 119 + LibD28/dclFMXfsTee29.res | Bin 0 -> 664 bytes LibD28/dclfs10.dpk | 40 + LibD28/dclfs11.dpk | 40 + LibD28/dclfs12.dpk | 40 + LibD28/dclfs14.dpk | 39 + LibD28/dclfs15.dpk | 39 + LibD28/dclfs16.dpk | 39 + LibD28/dclfs17.dpk | 39 + LibD28/dclfs18.dpk | 39 + LibD28/dclfs19.dpk | 39 + LibD28/dclfs20.dpk | 39 + LibD28/dclfs21.dpk | 39 + LibD28/dclfs22.dpk | 39 + LibD28/dclfs23.dpk | 39 + LibD28/dclfs24.dpk | 39 + LibD28/dclfs25.dpk | 39 + LibD28/dclfs26.dpk | 39 + LibD28/dclfs27.dpk | 39 + LibD28/dclfs28.dpk | 39 + LibD28/dclfs29.dpk | 39 + LibD28/dclfs29.dproj | 118 + LibD28/dclfs29.res | Bin 0 -> 628 bytes LibD28/dclfs4.dpk | 39 + LibD28/dclfs5.dpk | 39 + LibD28/dclfs6.dpk | 40 + LibD28/dclfs7.dpk | 40 + LibD28/dclfs9.dpk | 40 + LibD28/dclfsADO10.dpk | 41 + LibD28/dclfsADO11.dpk | 41 + LibD28/dclfsADO12.dpk | 41 + LibD28/dclfsADO14.dpk | 40 + LibD28/dclfsADO15.dpk | 40 + LibD28/dclfsADO16.dpk | 40 + LibD28/dclfsADO17.dpk | 40 + LibD28/dclfsADO18.dpk | 40 + LibD28/dclfsADO19.dpk | 40 + LibD28/dclfsADO20.dpk | 40 + LibD28/dclfsADO21.dpk | 40 + LibD28/dclfsADO22.dpk | 40 + LibD28/dclfsADO23.dpk | 40 + LibD28/dclfsADO24.dpk | 40 + LibD28/dclfsADO25.dpk | 40 + LibD28/dclfsADO26.dpk | 40 + LibD28/dclfsADO27.dpk | 40 + LibD28/dclfsADO28.dpk | 40 + LibD28/dclfsADO29.dpk | 40 + LibD28/dclfsADO5.dpk | 40 + LibD28/dclfsADO6.dpk | 41 + LibD28/dclfsADO7.dpk | 41 + LibD28/dclfsADO9.dpk | 41 + LibD28/dclfsBDE10.dpk | 41 + LibD28/dclfsBDE11.dpk | 41 + LibD28/dclfsBDE12.dpk | 41 + LibD28/dclfsBDE14.dpk | 40 + LibD28/dclfsBDE15.dpk | 40 + LibD28/dclfsBDE16.dpk | 40 + LibD28/dclfsBDE17.dpk | 40 + LibD28/dclfsBDE18.dpk | 40 + LibD28/dclfsBDE19.dpk | 40 + LibD28/dclfsBDE20.dpk | 40 + LibD28/dclfsBDE21.dpk | 40 + LibD28/dclfsBDE22.dpk | 40 + LibD28/dclfsBDE23.dpk | 40 + LibD28/dclfsBDE24.dpk | 40 + LibD28/dclfsBDE25.dpk | 40 + LibD28/dclfsBDE26.dpk | 40 + LibD28/dclfsBDE27.dpk | 40 + LibD28/dclfsBDE28.dpk | 40 + LibD28/dclfsBDE29.dpk | 40 + LibD28/dclfsBDE4.dpk | 40 + LibD28/dclfsBDE5.dpk | 40 + LibD28/dclfsBDE6.dpk | 41 + LibD28/dclfsBDE7.dpk | 41 + LibD28/dclfsBDE9.dpk | 41 + LibD28/dclfsDB10.dpk | 41 + LibD28/dclfsDB11.dpk | 41 + LibD28/dclfsDB12.dpk | 41 + LibD28/dclfsDB14.dpk | 40 + LibD28/dclfsDB15.dpk | 40 + LibD28/dclfsDB16.dpk | 40 + LibD28/dclfsDB17.dpk | 40 + LibD28/dclfsDB18.dpk | 40 + LibD28/dclfsDB19.dpk | 40 + LibD28/dclfsDB20.dpk | 40 + LibD28/dclfsDB21.dpk | 40 + LibD28/dclfsDB22.dpk | 40 + LibD28/dclfsDB23.dpk | 40 + LibD28/dclfsDB24.dpk | 40 + LibD28/dclfsDB25.dpk | 40 + LibD28/dclfsDB26.dpk | 40 + LibD28/dclfsDB27.dpk | 40 + LibD28/dclfsDB28.dpk | 40 + LibD28/dclfsDB29.dpk | 40 + LibD28/dclfsDB29.dproj | 119 + LibD28/dclfsDB29.res | Bin 0 -> 640 bytes LibD28/dclfsDB4.dpk | 40 + LibD28/dclfsDB5.dpk | 40 + LibD28/dclfsDB6.dpk | 41 + LibD28/dclfsDB7.dpk | 41 + LibD28/dclfsDB9.dpk | 41 + LibD28/dclfsFD15.dpk | 40 + LibD28/dclfsFD16.dpk | 40 + LibD28/dclfsFD17.dpk | 40 + LibD28/dclfsFD18.dpk | 40 + LibD28/dclfsFD19.dpk | 40 + LibD28/dclfsFD20.dpk | 40 + LibD28/dclfsFD21.dpk | 40 + LibD28/dclfsFD22.dpk | 40 + LibD28/dclfsFD23.dpk | 40 + LibD28/dclfsFD24.dpk | 40 + LibD28/dclfsFD25.dpk | 40 + LibD28/dclfsFD26.dpk | 40 + LibD28/dclfsFD27.dpk | 40 + LibD28/dclfsFD28.dpk | 40 + LibD28/dclfsFD29.dpk | 40 + LibD28/dclfsFD29.dproj | 119 + LibD28/dclfsFD29.res | Bin 0 -> 640 bytes LibD28/dclfsIBX10.dpk | 41 + LibD28/dclfsIBX11.dpk | 41 + LibD28/dclfsIBX12.dpk | 41 + LibD28/dclfsIBX14.dpk | 40 + LibD28/dclfsIBX15.dpk | 40 + LibD28/dclfsIBX16.dpk | 40 + LibD28/dclfsIBX17.dpk | 40 + LibD28/dclfsIBX18.dpk | 40 + LibD28/dclfsIBX19.dpk | 40 + LibD28/dclfsIBX20.dpk | 40 + LibD28/dclfsIBX21.dpk | 40 + LibD28/dclfsIBX22.dpk | 40 + LibD28/dclfsIBX23.dpk | 40 + LibD28/dclfsIBX24.dpk | 40 + LibD28/dclfsIBX25.dpk | 40 + LibD28/dclfsIBX26.dpk | 40 + LibD28/dclfsIBX27.dpk | 40 + LibD28/dclfsIBX28.dpk | 40 + LibD28/dclfsIBX29.dpk | 40 + LibD28/dclfsIBX5.dpk | 40 + LibD28/dclfsIBX6.dpk | 41 + LibD28/dclfsIBX7.dpk | 41 + LibD28/dclfsIBX9.dpk | 41 + LibD28/dclfsTee10.dpk | 41 + LibD28/dclfsTee11.dpk | 41 + LibD28/dclfsTee12.dpk | 41 + LibD28/dclfsTee14.dpk | 40 + LibD28/dclfsTee15.dpk | 40 + LibD28/dclfsTee16.dpk | 40 + LibD28/dclfsTee17.dpk | 40 + LibD28/dclfsTee18.dpk | 40 + LibD28/dclfsTee19.dpk | 40 + LibD28/dclfsTee20.dpk | 40 + LibD28/dclfsTee21.dpk | 40 + LibD28/dclfsTee22.dpk | 40 + LibD28/dclfsTee23.dpk | 40 + LibD28/dclfsTee24.dpk | 40 + LibD28/dclfsTee25.dpk | 40 + LibD28/dclfsTee26.dpk | 40 + LibD28/dclfsTee27.dpk | 40 + LibD28/dclfsTee28.dpk | 40 + LibD28/dclfsTee29.dpk | 40 + LibD28/dclfsTee29.dproj | 119 + LibD28/dclfsTee29.res | Bin 0 -> 652 bytes LibD28/dclfsTee4.dpk | 40 + LibD28/dclfsTee5.dpk | 40 + LibD28/dclfsTee6.dpk | 41 + LibD28/dclfsTee7.dpk | 41 + LibD28/dclfsTee9.dpk | 41 + LibD28/dclfsx.dpk | 46 + LibD28/dclfsx.dproj | 126 + LibD28/dclfsx.res | Bin 0 -> 1536 bytes LibD28/dclfsx_Icon.ico | Bin 0 -> 766 bytes LibD28/fmx.frxImageConverter.pas | 124 + LibD28/fmx.inc | 12 + LibD28/frx.inc | 704 ++ LibD28/frxBarcodeEditor.fmx | 183 + LibD28/frxEditSQL.inc | 18 + LibD28/frxFMX_PlatformsAttribute.inc | 12 + LibD28/frxIBXReg.res | Bin 0 -> 1864 bytes LibD28/frxPlatformsAttribute.inc | 12 + LibD28/frxReg.dcr | Bin 0 -> 54516 bytes LibD28/frxVersion.inc | 1 + LibD28/frxe16.otares | Bin 0 -> 96 bytes LibD28/frxeReg.dcr | Bin 0 -> 31076 bytes LibD28/frxrcClass.xml | 247 + LibD28/frxrcDesgn.xml | 851 ++ LibD28/frxrcExports.xml | 278 + LibD28/frxrcInsp.xml | 274 + LibD28/fs.inc | 612 + LibD28/fs10.dpk | 66 + LibD28/fs11.dpk | 66 + LibD28/fs12.dpk | 61 + LibD28/fs14.dpk | 61 + LibD28/fs15.dpk | 61 + LibD28/fs16.dpk | 61 + LibD28/fs17.dpk | 61 + LibD28/fs18.dpk | 61 + LibD28/fs19.dpk | 61 + LibD28/fs20.dpk | 61 + LibD28/fs21.dpk | 61 + LibD28/fs22.dpk | 61 + LibD28/fs23.dpk | 61 + LibD28/fs24.dpk | 61 + LibD28/fs25.dpk | 61 + LibD28/fs26.dpk | 61 + LibD28/fs27.dpk | 61 + LibD28/fs28.dpk | 61 + LibD28/fs29.dpk | 61 + LibD28/fs29.dproj | 158 + LibD28/fs29.res | Bin 0 -> 616 bytes LibD28/fs4.bpk | 187 + LibD28/fs4.cpp | 19 + LibD28/fs4.dpk | 65 + LibD28/fs4.res | Bin 0 -> 1536 bytes LibD28/fs5.bpk | 108 + LibD28/fs5.cpp | 23 + LibD28/fs5.dpk | 66 + LibD28/fs5.res | Bin 0 -> 1536 bytes LibD28/fs6.bpk | 122 + LibD28/fs6.cpp | 17 + LibD28/fs6.dpk | 66 + LibD28/fs6.res | Bin 0 -> 1536 bytes LibD28/fs7.dpk | 66 + LibD28/fs9.dpk | 66 + LibD28/fsADO10.dpk | 42 + LibD28/fsADO11.dpk | 42 + LibD28/fsADO12.dpk | 42 + LibD28/fsADO14.dpk | 40 + LibD28/fsADO15.dpk | 40 + LibD28/fsADO16.dpk | 40 + LibD28/fsADO17.dpk | 40 + LibD28/fsADO18.dpk | 40 + LibD28/fsADO19.dpk | 40 + LibD28/fsADO20.dpk | 40 + LibD28/fsADO21.dpk | 40 + LibD28/fsADO22.dpk | 40 + LibD28/fsADO23.dpk | 40 + LibD28/fsADO24.dpk | 40 + LibD28/fsADO25.dpk | 40 + LibD28/fsADO26.dpk | 40 + LibD28/fsADO27.dpk | 40 + LibD28/fsADO28.dpk | 40 + LibD28/fsADO29.dpk | 40 + LibD28/fsADO5.bpk | 108 + LibD28/fsADO5.cpp | 25 + LibD28/fsADO5.dpk | 42 + LibD28/fsADO6.bpk | 124 + LibD28/fsADO6.cpp | 17 + LibD28/fsADO6.dpk | 42 + LibD28/fsADO7.dpk | 42 + LibD28/fsADO9.dpk | 42 + LibD28/fsBDE10.dpk | 42 + LibD28/fsBDE11.dpk | 42 + LibD28/fsBDE12.dpk | 42 + LibD28/fsBDE14.dpk | 42 + LibD28/fsBDE15.dpk | 42 + LibD28/fsBDE16.dpk | 42 + LibD28/fsBDE17.dpk | 42 + LibD28/fsBDE18.dpk | 42 + LibD28/fsBDE19.dpk | 42 + LibD28/fsBDE20.dpk | 42 + LibD28/fsBDE21.dpk | 42 + LibD28/fsBDE22.dpk | 42 + LibD28/fsBDE23.dpk | 42 + LibD28/fsBDE24.dpk | 42 + LibD28/fsBDE25.dpk | 42 + LibD28/fsBDE26.dpk | 42 + LibD28/fsBDE27.dpk | 42 + LibD28/fsBDE28.dpk | 42 + LibD28/fsBDE29.dpk | 42 + LibD28/fsBDE4.bpk | 187 + LibD28/fsBDE4.cpp | 20 + LibD28/fsBDE4.dpk | 41 + LibD28/fsBDE5.bpk | 108 + LibD28/fsBDE5.cpp | 25 + LibD28/fsBDE5.dpk | 42 + LibD28/fsBDE6.bpk | 125 + LibD28/fsBDE6.cpp | 17 + LibD28/fsBDE6.dpk | 42 + LibD28/fsBDE7.dpk | 42 + LibD28/fsBDE9.dpk | 42 + LibD28/fsDB10.dpk | 41 + LibD28/fsDB11.dpk | 41 + LibD28/fsDB12.dpk | 41 + LibD28/fsDB14.dpk | 39 + LibD28/fsDB15.dpk | 39 + LibD28/fsDB16.dpk | 39 + LibD28/fsDB17.dpk | 39 + LibD28/fsDB18.dpk | 39 + LibD28/fsDB19.dpk | 39 + LibD28/fsDB20.dpk | 39 + LibD28/fsDB21.dpk | 39 + LibD28/fsDB22.dpk | 39 + LibD28/fsDB23.dpk | 39 + LibD28/fsDB24.dpk | 39 + LibD28/fsDB25.dpk | 39 + LibD28/fsDB26.dpk | 39 + LibD28/fsDB27.dpk | 39 + LibD28/fsDB28.dpk | 39 + LibD28/fsDB4.bpk | 187 + LibD28/fsDB4.cpp | 19 + LibD28/fsDB4.dpk | 41 + LibD28/fsDB5.bpk | 108 + LibD28/fsDB5.cpp | 23 + LibD28/fsDB5.dpk | 41 + LibD28/fsDB6.bpk | 123 + LibD28/fsDB6.cpp | 17 + LibD28/fsDB6.dpk | 41 + LibD28/fsDB7.dpk | 41 + LibD28/fsDB9.dpk | 41 + LibD28/fsFD15.dpk | 44 + LibD28/fsFD16.dpk | 44 + LibD28/fsFD17.dpk | 44 + LibD28/fsFD18.dpk | 43 + LibD28/fsFD19.dpk | 43 + LibD28/fsFD20.dpk | 43 + LibD28/fsFD21.dpk | 43 + LibD28/fsFD22.dpk | 43 + LibD28/fsFD23.dpk | 43 + LibD28/fsFD24.dpk | 43 + LibD28/fsFD25.dpk | 43 + LibD28/fsFD26.dpk | 43 + LibD28/fsFD27.dpk | 43 + LibD28/fsFD28.dpk | 43 + LibD28/fsFD29.dpk | 43 + LibD28/fsFD29.dproj | 143 + LibD28/fsFD29.res | Bin 0 -> 628 bytes LibD28/fsIBX10.dpk | 42 + LibD28/fsIBX11.dpk | 42 + LibD28/fsIBX12.dpk | 42 + LibD28/fsIBX14.dpk | 40 + LibD28/fsIBX15.dpk | 40 + LibD28/fsIBX16.dpk | 40 + LibD28/fsIBX17.dpk | 40 + LibD28/fsIBX18.dpk | 40 + LibD28/fsIBX19.dpk | 40 + LibD28/fsIBX20.dpk | 40 + LibD28/fsIBX21.dpk | 40 + LibD28/fsIBX22.dpk | 40 + LibD28/fsIBX23.dpk | 40 + LibD28/fsIBX24.dpk | 40 + LibD28/fsIBX25.dpk | 40 + LibD28/fsIBX26.dpk | 40 + LibD28/fsIBX27.dpk | 40 + LibD28/fsIBX28.dpk | 40 + LibD28/fsIBX29.dpk | 40 + LibD28/fsIBX5.bpk | 108 + LibD28/fsIBX5.cpp | 26 + LibD28/fsIBX5.dpk | 42 + LibD28/fsIBX6.bpk | 125 + LibD28/fsIBX6.cpp | 17 + LibD28/fsIBX6.dpk | 42 + LibD28/fsIBX7.dpk | 42 + LibD28/fsIBX9.dpk | 42 + LibD28/fsTee10.dpk | 52 + LibD28/fsTee11.dpk | 52 + LibD28/fsTee12.dpk | 52 + LibD28/fsTee14.dpk | 49 + LibD28/fsTee15.dpk | 49 + LibD28/fsTee16.dpk | 49 + LibD28/fsTee17.dpk | 49 + LibD28/fsTee18.dpk | 49 + LibD28/fsTee19.dpk | 49 + LibD28/fsTee20.dpk | 49 + LibD28/fsTee21.dpk | 49 + LibD28/fsTee22.dpk | 49 + LibD28/fsTee23.dpk | 49 + LibD28/fsTee24.dpk | 49 + LibD28/fsTee25.dpk | 49 + LibD28/fsTee26.dpk | 49 + LibD28/fsTee27.dpk | 49 + LibD28/fsTee28.dpk | 49 + LibD28/fsTee29.dpk | 49 + LibD28/fsTee29.dproj | 138 + LibD28/fsTee29.res | Bin 0 -> 628 bytes LibD28/fsTee4.bpk | 187 + LibD28/fsTee4.cpp | 21 + LibD28/fsTee4.dpk | 48 + LibD28/fsTee5.bpk | 108 + LibD28/fsTee5.cpp | 25 + LibD28/fsTee5.dpk | 48 + LibD28/fsTee6.bpk | 124 + LibD28/fsTee6.cpp | 17 + LibD28/fsTee6.dpk | 48 + LibD28/fsTee7.dpk | 52 + LibD28/fsTee9.dpk | 52 + LibD28/fs_iadoreg.pas | 45 + LibD28/fs_iadortti.pas | 135 + LibD28/fs_ibasic.pas | 193 + LibD28/fs_ibdereg.pas | 45 + LibD28/fs_ibdertti.pas | 171 + LibD28/fs_ibx.lpk | 49 + LibD28/fs_ichartrtti.pas | 195 + LibD28/fs_iclassesrtti.pas | 1052 ++ LibD28/fs_iconst.pas | 66 + LibD28/fs_icpp.pas | 183 + LibD28/fs_idbctrlsrtti.pas | 189 + LibD28/fs_idbreg.pas | 46 + LibD28/fs_idbrtti.pas | 583 + LibD28/fs_idialogsrtti.pas | 167 + LibD28/fs_idisp.pas | 136 + LibD28/fs_ievents.pas | 201 + LibD28/fs_iexpression.pas | 957 ++ LibD28/fs_iextctrlsrtti.pas | 434 + LibD28/fs_ifdreg.dcr | Bin 0 -> 1848 bytes LibD28/fs_ifdreg.pas | 33 + LibD28/fs_ifdrtti.pas | 391 + LibD28/fs_iformsrtti.pas | 439 + LibD28/fs_igraphicsrtti.pas | 262 + LibD28/fs_iibxreg.pas | 58 + LibD28/fs_iibxrtti.pas | 127 + LibD28/fs_iilparser.pas | 2059 ++++ LibD28/fs_iinirtti.pas | 377 + LibD28/fs_iinterpreter.pas | 3547 ++++++ LibD28/fs_ijs.pas | 168 + LibD28/fs_imenusrtti.pas | 183 + LibD28/fs_iparser.pas | 762 ++ LibD28/fs_ipascal.pas | 201 + LibD28/fs_ireg.dcr | Bin 0 -> 36456 bytes LibD28/fs_ireg.lrs | 1741 +++ LibD28/fs_ireg.pas | 90 + LibD28/fs_isysrtti.pas | 623 + LibD28/fs_iteereg.pas | 46 + LibD28/fs_itools.pas | 712 ++ LibD28/fs_lazarus.lpk | 159 + LibD28/fs_lazarus.pas | 25 + LibD28/fs_synmemo.dfm | Bin 0 -> 717 bytes LibD28/fs_synmemo.lfm | 56 + LibD28/fs_synmemo.pas | 2113 ++++ LibD28/fs_tree.pas | 426 + LibD28/fs_tree.res | Bin 0 -> 3172 bytes LibD28/fs_xml.pas | 756 ++ LibD28/fsx.dpk | 76 + LibD28/fsx.res | Bin 0 -> 876 bytes LibD28/mk.bat | 21 + LibD28/mkall.bat | 5 + LibD28/readme.txt | 56 + LibD28/readme_lazarus.txt | 6 + LibD28/tee.inc | 85 + LibD28x64/FMX.BaseTypeAliases.pas | 283 + LibD28x64/FMX.ConverterFR3toFRFMX.pas | 174 + LibD28x64/FMX.DelphiZXIngQRCode.pas | 3795 ++++++ LibD28x64/FMX.ExportTTFFont.pas | 803 ++ LibD28x64/FMX.FormTypeAliases.pas | 70 + LibD28x64/FMX.Linux.Old.frxPrinter.pas | 591 + LibD28x64/FMX.Linux.frxPrinter.pas | 1324 ++ LibD28x64/FMX.Mac.frxPrinter.pas | 529 + LibD28x64/FMX.TTFHelpers.pas | 68 + LibD28x64/FMX.Win.frxPrinter.pas | 901 ++ LibD28x64/FMX.frxADOComponents.pas | 1051 ++ LibD28x64/FMX.frxADOEditor.pas | 157 + LibD28x64/FMX.frxADORTTI.pas | 102 + LibD28x64/FMX.frxAbout.fmx | 274 + LibD28x64/FMX.frxAbout.pas | 98 + LibD28x64/FMX.frxAggregate.pas | 698 ++ LibD28x64/FMX.frxBarcod.pas | 2044 ++++ LibD28x64/FMX.frxBarcode.pas | 302 + LibD28x64/FMX.frxBarcode2DBase.pas | 468 + LibD28x64/FMX.frxBarcode2DRTTI.pas | 68 + LibD28x64/FMX.frxBarcode2DView.pas | 360 + LibD28x64/FMX.frxBarcodeDataMatrix.pas | 1308 ++ LibD28x64/FMX.frxBarcodeEditor.fmx | 151 + LibD28x64/FMX.frxBarcodeEditor.pas | 307 + LibD28x64/FMX.frxBarcodePDF417.pas | 1745 +++ LibD28x64/FMX.frxBarcodeProperties.pas | 325 + LibD28x64/FMX.frxBarcodeQR.pas | 171 + LibD28x64/FMX.frxBarcodeRTTI.pas | 57 + LibD28x64/FMX.frxBaseModalForm.pas | 219 + LibD28x64/FMX.frxCanvas.Linux.pas | 76 + LibD28x64/FMX.frxCanvas.Mac.pas | 166 + LibD28x64/FMX.frxChBox.pas | 249 + LibD28x64/FMX.frxChBoxRTTI.pas | 53 + LibD28x64/FMX.frxChart.pas | 786 ++ LibD28x64/FMX.frxChartEditor.fmx | 365 + LibD28x64/FMX.frxChartEditor.pas | 828 ++ LibD28x64/FMX.frxChartGallery.fmx | 35 + LibD28x64/FMX.frxChartGallery.pas | 85 + LibD28x64/FMX.frxChartHelpers.pas | 573 + LibD28x64/FMX.frxChartRTTI.pas | 116 + LibD28x64/FMX.frxClass.pas | 10116 ++++++++++++++++ LibD28x64/FMX.frxClass.res | Bin 0 -> 1248 bytes LibD28x64/FMX.frxClassRTTI.pas | 611 + LibD28x64/FMX.frxCmapTableClass.pas | 275 + LibD28x64/FMX.frxCodeUtils.pas | 271 + LibD28x64/FMX.frxConnWizard.fmx | 249 + LibD28x64/FMX.frxConnWizard.pas | 551 + LibD28x64/FMX.frxConnWizard.res | Bin 0 -> 1312 bytes LibD28x64/FMX.frxCross.pas | 4377 +++++++ LibD28x64/FMX.frxCrossEditor.fmx | 342 + LibD28x64/FMX.frxCrossEditor.pas | 1029 ++ LibD28x64/FMX.frxCrossRTTI.pas | 140 + LibD28x64/FMX.frxCrypto.pas | 1456 +++ LibD28x64/FMX.frxCtrls.pas | 435 + LibD28x64/FMX.frxCustomDB.pas | 833 ++ LibD28x64/FMX.frxCustomDBEditor.pas | 355 + LibD28x64/FMX.frxCustomDBRTTI.pas | 182 + LibD28x64/FMX.frxCustomEditors.pas | 174 + LibD28x64/FMX.frxDBSet.pas | 473 + LibD28x64/FMX.frxDBXComponents.pas | 654 + LibD28x64/FMX.frxDBXEditor.pas | 167 + LibD28x64/FMX.frxDBXRTTI.pas | 68 + LibD28x64/FMX.frxDCtrl.pas | 1635 +++ LibD28x64/FMX.frxDCtrlRTTI.pas | 130 + LibD28x64/FMX.frxDMPClass.pas | 491 + LibD28x64/FMX.frxDataTree.fmx | 131 + LibD28x64/FMX.frxDataTree.pas | 765 ++ LibD28x64/FMX.frxDesgn.fmx | 1811 +++ LibD28x64/FMX.frxDesgn.pas | 5696 +++++++++ LibD28x64/FMX.frxDesgn.res | Bin 0 -> 53948 bytes LibD28x64/FMX.frxDesgnCtrls.pas | 1298 ++ LibD28x64/FMX.frxDesgnEditors.pas | 1557 +++ LibD28x64/FMX.frxDesgnWorkspace.pas | 3102 +++++ LibD28x64/FMX.frxDesgnWorkspace.res | Bin 0 -> 676 bytes LibD28x64/FMX.frxDesgnWorkspace1.pas | 939 ++ LibD28x64/FMX.frxDesgn_D23.fmx | 1800 +++ LibD28x64/FMX.frxDialogForm.fmx | 10 + LibD28x64/FMX.frxDialogForm.pas | 98 + LibD28x64/FMX.frxDsgnIntf.pas | 1789 +++ LibD28x64/FMX.frxEditAliases.fmx | 69 + LibD28x64/FMX.frxEditAliases.pas | 404 + LibD28x64/FMX.frxEditDataBand.fmx | 65 + LibD28x64/FMX.frxEditDataBand.pas | 171 + LibD28x64/FMX.frxEditExpr.fmx | 75 + LibD28x64/FMX.frxEditExpr.pas | 147 + LibD28x64/FMX.frxEditFormat.fmx | 93 + LibD28x64/FMX.frxEditFormat.pas | 223 + LibD28x64/FMX.frxEditFrame.fmx | 232 + LibD28x64/FMX.frxEditFrame.pas | 224 + LibD28x64/FMX.frxEditGroup.fmx | 113 + LibD28x64/FMX.frxEditGroup.pas | 199 + LibD28x64/FMX.frxEditHighlight.fmx | 98 + LibD28x64/FMX.frxEditHighlight.pas | 174 + LibD28x64/FMX.frxEditMD.fmx | 94 + LibD28x64/FMX.frxEditMD.pas | 165 + LibD28x64/FMX.frxEditMemo.fmx | 98 + LibD28x64/FMX.frxEditMemo.pas | 313 + LibD28x64/FMX.frxEditOptions.fmx | 274 + LibD28x64/FMX.frxEditOptions.pas | 266 + LibD28x64/FMX.frxEditPage.fmx | 367 + LibD28x64/FMX.frxEditPage.pas | 375 + LibD28x64/FMX.frxEditPicture.fmx | 78 + LibD28x64/FMX.frxEditPicture.pas | 194 + LibD28x64/FMX.frxEditQueryParams.fmx | 65 + LibD28x64/FMX.frxEditQueryParams.pas | 265 + LibD28x64/FMX.frxEditReport.fmx | 350 + LibD28x64/FMX.frxEditReport.pas | 348 + LibD28x64/FMX.frxEditReportData.fmx | 38 + LibD28x64/FMX.frxEditReportData.pas | 216 + LibD28x64/FMX.frxEditSQL.fmx | 49 + LibD28x64/FMX.frxEditSQL.pas | 220 + LibD28x64/FMX.frxEditStrings.fmx | 41 + LibD28x64/FMX.frxEditStrings.pas | 93 + LibD28x64/FMX.frxEditStyle.fmx | 138 + LibD28x64/FMX.frxEditStyle.pas | 326 + LibD28x64/FMX.frxEditSysMemo.fmx | 178 + LibD28x64/FMX.frxEditSysMemo.pas | 319 + LibD28x64/FMX.frxEditTabOrder.fmx | 58 + LibD28x64/FMX.frxEditTabOrder.pas | 166 + LibD28x64/FMX.frxEditVar.fmx | 189 + LibD28x64/FMX.frxEditVar.pas | 554 + LibD28x64/FMX.frxEngine.pas | 2810 +++++ LibD28x64/FMX.frxEvaluateForm.fmx | 57 + LibD28x64/FMX.frxEvaluateForm.pas | 109 + LibD28x64/FMX.frxExportCSV.fmx | 110 + LibD28x64/FMX.frxExportCSV.pas | 593 + LibD28x64/FMX.frxExportHTML.fmx | 171 + LibD28x64/FMX.frxExportHTML.pas | 1244 ++ LibD28x64/FMX.frxExportImage.fmx | 141 + LibD28x64/FMX.frxExportImage.pas | 1125 ++ LibD28x64/FMX.frxExportMatrix.pas | 1755 +++ LibD28x64/FMX.frxExportODF.fmx | 113 + LibD28x64/FMX.frxExportODF.pas | 1884 +++ LibD28x64/FMX.frxExportPDF.fmx | 351 + LibD28x64/FMX.frxExportPDF.pas | 3967 ++++++ LibD28x64/FMX.frxExportRTF.fmx | 189 + LibD28x64/FMX.frxExportRTF.pas | 991 ++ LibD28x64/FMX.frxExportTXT.fmx | 400 + LibD28x64/FMX.frxExportTXT.pas | 1541 +++ LibD28x64/FMX.frxExportText.fmx | 115 + LibD28x64/FMX.frxExportText.pas | 594 + LibD28x64/FMX.frxExportXML.fmx | 210 + LibD28x64/FMX.frxExportXML.pas | 849 ++ LibD28x64/FMX.frxFDComponents.pas | 1325 ++ LibD28x64/FMX.frxFDComponents.res | Bin 0 -> 440 bytes LibD28x64/FMX.frxFDEditor.pas | 375 + LibD28x64/FMX.frxFDRTTI.pas | 161 + LibD28x64/FMX.frxFDReg.pas | 34 + LibD28x64/FMX.frxFMX.pas | 2970 +++++ LibD28x64/FMX.frxFontForm.fmx | 160 + LibD28x64/FMX.frxFontForm.pas | 233 + LibD28x64/FMX.frxFontHeaderClass.pas | 139 + LibD28x64/FMX.frxGZip.pas | 257 + LibD28x64/FMX.frxGlyphSubstitutionClass.pas | 164 + LibD28x64/FMX.frxGlyphTableClass.pas | 334 + LibD28x64/FMX.frxGradient.pas | 333 + LibD28x64/FMX.frxGradientRTTI.pas | 53 + LibD28x64/FMX.frxGraphicUtils.pas | 1704 +++ LibD28x64/FMX.frxHorizontalHeaderClass.pas | 133 + LibD28x64/FMX.frxHorizontalMetrixClass.pas | 69 + LibD28x64/FMX.frxIBXComponents.pas | 538 + LibD28x64/FMX.frxIBXEditor.pas | 167 + LibD28x64/FMX.frxIBXRTTI.pas | 98 + LibD28x64/FMX.frxIndexToLocationClass.pas | 107 + LibD28x64/FMX.frxInheritError.fmx | 50 + LibD28x64/FMX.frxInheritError.pas | 60 + LibD28x64/FMX.frxInsp.fmx | 485 + LibD28x64/FMX.frxInsp.pas | 1151 ++ LibD28x64/FMX.frxInsp_D23.fmx | 365 + LibD28x64/FMX.frxKerningTableClass.pas | 176 + LibD28x64/FMX.frxLinuxFonts.pas | 376 + LibD28x64/FMX.frxMD5.pas | 550 + LibD28x64/FMX.frxMaximumProfileClass.pas | 117 + LibD28x64/FMX.frxNameTableClass.pas | 147 + LibD28x64/FMX.frxNewItem.pas | 170 + LibD28x64/FMX.frxOS2WindowsMetricsClass.pas | 214 + LibD28x64/FMX.frxPassw.pas | 59 + LibD28x64/FMX.frxPictureCache.pas | 357 + LibD28x64/FMX.frxPopupForm.fmx | 15 + LibD28x64/FMX.frxPopupForm.pas | 49 + LibD28x64/FMX.frxPostScriptClass.pas | 102 + LibD28x64/FMX.frxPreProgramClass.pas | 61 + LibD28x64/FMX.frxPreview.fmx | 352 + LibD28x64/FMX.frxPreview.pas | 2791 +++++ LibD28x64/FMX.frxPreview.res | Bin 0 -> 63296 bytes LibD28x64/FMX.frxPreviewPageSettings.fmx | 235 + LibD28x64/FMX.frxPreviewPageSettings.pas | 275 + LibD28x64/FMX.frxPreviewPages.pas | 2742 +++++ LibD28x64/FMX.frxPrintDialog.fmx | 257 + LibD28x64/FMX.frxPrintDialog.pas | 365 + LibD28x64/FMX.frxPrinter.pas | 569 + LibD28x64/FMX.frxProgress.fmx | 43 + LibD28x64/FMX.frxProgress.pas | 134 + LibD28x64/FMX.frxRC4.pas | 78 + LibD28x64/FMX.frxReportTree.fmx | 33 + LibD28x64/FMX.frxReportTree.pas | 251 + LibD28x64/FMX.frxRes.pas | 375 + LibD28x64/FMX.frxSearchDialog.fmx | 104 + LibD28x64/FMX.frxSearchDialog.pas | 103 + LibD28x64/FMX.frxStdWizard.pas | 1095 ++ LibD28x64/FMX.frxSynMemo.pas | 2143 ++++ LibD28x64/FMX.frxTrueTypeCollection.pas | 305 + LibD28x64/FMX.frxTrueTypeFont.pas | 1114 ++ LibD28x64/FMX.frxTrueTypeTable.pas | 191 + LibD28x64/FMX.frxUnicodeUtils.pas | 431 + LibD28x64/FMX.frxUtils.pas | 937 ++ LibD28x64/FMX.frxVariables.pas | 407 + LibD28x64/FMX.frxWatchForm.fmx | 52 + LibD28x64/FMX.frxWatchForm.pas | 196 + LibD28x64/FMX.frxXML.pas | 983 ++ LibD28x64/FMX.frxXMLSerializer.pas | 881 ++ LibD28x64/FMX.frxZip.pas | 561 + LibD28x64/FMX.frxrcClass.pas | 100 + LibD28x64/FMX.frxrcDesgn.pas | 281 + LibD28x64/FMX.frxrcExports.pas | 99 + LibD28x64/FMX.frxrcInsp.pas | 860 ++ LibD28x64/FMX.fs_iadortti.pas | 129 + LibD28x64/FMX.fs_ibasic.pas | 14 + LibD28x64/FMX.fs_ichartrtti.pas | 181 + LibD28x64/FMX.fs_iclassesrtti.pas | 14 + LibD28x64/FMX.fs_iconst.pas | 14 + LibD28x64/FMX.fs_icpp.pas | 14 + LibD28x64/FMX.fs_idbrtti.pas | 570 + LibD28x64/FMX.fs_idialogsrtti.pas | 133 + LibD28x64/FMX.fs_idisp.pas | 14 + LibD28x64/FMX.fs_ievents.pas | 379 + LibD28x64/FMX.fs_iexpression.pas | 14 + LibD28x64/FMX.fs_iextctrlsrtti.pas | 268 + LibD28x64/FMX.fs_iformsrtti.pas | 864 ++ LibD28x64/FMX.fs_igraphicsrtti.pas | 522 + LibD28x64/FMX.fs_iibxrtti.pas | 125 + LibD28x64/FMX.fs_iilparser.pas | 14 + LibD28x64/FMX.fs_iinirtti.pas | 372 + LibD28x64/FMX.fs_iinterpreter.pas | 14 + LibD28x64/FMX.fs_ijs.pas | 14 + LibD28x64/FMX.fs_imenusrtti.pas | 104 + LibD28x64/FMX.fs_iparser.pas | 14 + LibD28x64/FMX.fs_ipascal.pas | 14 + LibD28x64/FMX.fs_isysrtti.pas | 14 + LibD28x64/FMX.fs_itools.pas | 14 + LibD28x64/FMX.fs_lazarus.pas | 25 + LibD28x64/FMX.fs_synmemo.fmx | 50 + LibD28x64/FMX.fs_synmemo.pas | 2397 ++++ LibD28x64/FMX.fs_tree.pas | 659 + LibD28x64/FMX.fs_xml.pas | 15 + LibD28x64/FMXfrx16.dpk | 127 + LibD28x64/FMXfrx16.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx17.dpk | 130 + LibD28x64/FMXfrx17.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx18.dpk | 130 + LibD28x64/FMXfrx18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx19.dpk | 129 + LibD28x64/FMXfrx19.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx20.dpk | 129 + LibD28x64/FMXfrx20.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx21.dpk | 129 + LibD28x64/FMXfrx21.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx22.dpk | 129 + LibD28x64/FMXfrx22.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx23.dpk | 129 + LibD28x64/FMXfrx23.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx24.dpk | 129 + LibD28x64/FMXfrx24.dproj | 199 + LibD28x64/FMXfrx24.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx25.dpk | 129 + LibD28x64/FMXfrx25.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrx25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrx26.dpk | 127 + LibD28x64/FMXfrx27.dpk | 134 + LibD28x64/FMXfrx29.dpk | 134 + LibD28x64/FMXfrx29.dproj | 210 + LibD28x64/FMXfrx29.res | Bin 0 -> 640 bytes LibD28x64/FMXfrxADO16.dpk | 46 + LibD28x64/FMXfrxADO16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO17.dpk | 46 + LibD28x64/FMXfrxADO17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO18.dpk | 46 + LibD28x64/FMXfrxADO18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO19.dpk | 46 + LibD28x64/FMXfrxADO19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO20.dpk | 46 + LibD28x64/FMXfrxADO20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO21.dpk | 46 + LibD28x64/FMXfrxADO21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO22.dpk | 46 + LibD28x64/FMXfrxADO22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO23.dpk | 46 + LibD28x64/FMXfrxADO23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO24.dpk | 46 + LibD28x64/FMXfrxADO24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO25.dpk | 46 + LibD28x64/FMXfrxADO25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxADO26.dpk | 46 + LibD28x64/FMXfrxADO27.dpk | 46 + LibD28x64/FMXfrxADO28.dpk | 46 + LibD28x64/FMXfrxADO29.dpk | 46 + LibD28x64/FMXfrxADOReg.dcr | Bin 0 -> 1864 bytes LibD28x64/FMXfrxADOReg.pas | 33 + LibD28x64/FMXfrxDB16.dpk | 51 + LibD28x64/FMXfrxDB16.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB17.dpk | 50 + LibD28x64/FMXfrxDB17.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB18.dpk | 51 + LibD28x64/FMXfrxDB18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB19.dpk | 51 + LibD28x64/FMXfrxDB19.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB20.dpk | 51 + LibD28x64/FMXfrxDB20.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB21.dpk | 51 + LibD28x64/FMXfrxDB21.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB22.dpk | 51 + LibD28x64/FMXfrxDB22.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB23.dpk | 51 + LibD28x64/FMXfrxDB23.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB24.dpk | 51 + LibD28x64/FMXfrxDB24.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB25.dpk | 51 + LibD28x64/FMXfrxDB25.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxDB25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDB26.dpk | 49 + LibD28x64/FMXfrxDB27.dpk | 49 + LibD28x64/FMXfrxDB29.dpk | 49 + LibD28x64/FMXfrxDBX16.dpk | 47 + LibD28x64/FMXfrxDBX16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX17.dpk | 47 + LibD28x64/FMXfrxDBX17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX18.dpk | 47 + LibD28x64/FMXfrxDBX18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX19.dpk | 47 + LibD28x64/FMXfrxDBX19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX20.dpk | 47 + LibD28x64/FMXfrxDBX20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX21.dpk | 47 + LibD28x64/FMXfrxDBX21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX22.dpk | 47 + LibD28x64/FMXfrxDBX22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX23.dpk | 47 + LibD28x64/FMXfrxDBX23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX24.dpk | 47 + LibD28x64/FMXfrxDBX24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX25.dpk | 47 + LibD28x64/FMXfrxDBX25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxDBX26.dpk | 47 + LibD28x64/FMXfrxDBX27.dpk | 47 + LibD28x64/FMXfrxDBX29.dpk | 47 + LibD28x64/FMXfrxDBX29.dproj | 129 + LibD28x64/FMXfrxDBX29.res | Bin 0 -> 652 bytes LibD28x64/FMXfrxDBXReg.dcr | Bin 0 -> 1864 bytes LibD28x64/FMXfrxDBXReg.pas | 33 + LibD28x64/FMXfrxFD18.dpk | 52 + LibD28x64/FMXfrxFD18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxFD18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD19.dpk | 50 + LibD28x64/FMXfrxFD19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD20.dpk | 50 + LibD28x64/FMXfrxFD20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD21.dpk | 50 + LibD28x64/FMXfrxFD21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD22.dpk | 50 + LibD28x64/FMXfrxFD22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD23.dpk | 50 + LibD28x64/FMXfrxFD23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD24.dpk | 50 + LibD28x64/FMXfrxFD24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD25.dpk | 50 + LibD28x64/FMXfrxFD25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxFD26.dpk | 49 + LibD28x64/FMXfrxFD27.dpk | 49 + LibD28x64/FMXfrxFD29.dpk | 49 + LibD28x64/FMXfrxFD29.dproj | 131 + LibD28x64/FMXfrxFD29.res | Bin 0 -> 652 bytes LibD28x64/FMXfrxFDReg.dcr | Bin 0 -> 1736 bytes LibD28x64/FMXfrxIBX16.dpk | 47 + LibD28x64/FMXfrxIBX16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX17.dpk | 47 + LibD28x64/FMXfrxIBX17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX18.dpk | 47 + LibD28x64/FMXfrxIBX18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX19.dpk | 47 + LibD28x64/FMXfrxIBX19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX20.dpk | 47 + LibD28x64/FMXfrxIBX20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX21.dpk | 47 + LibD28x64/FMXfrxIBX21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX22.dpk | 47 + LibD28x64/FMXfrxIBX22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX23.dpk | 47 + LibD28x64/FMXfrxIBX23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX24.dpk | 47 + LibD28x64/FMXfrxIBX24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX25.dpk | 47 + LibD28x64/FMXfrxIBX25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxIBX26.dpk | 47 + LibD28x64/FMXfrxIBX27.dpk | 47 + LibD28x64/FMXfrxIBX28.dpk | 47 + LibD28x64/FMXfrxIBXReg.dcr | Bin 0 -> 1864 bytes LibD28x64/FMXfrxIBXReg.pas | 34 + LibD28x64/FMXfrxReg.pas | 148 + LibD28x64/FMXfrxRegCtrls.pas | 37 + LibD28x64/FMXfrxRegDB.pas | 38 + LibD28x64/FMXfrxRegTee.pas | 37 + LibD28x64/FMXfrxTee16.dpk | 50 + LibD28x64/FMXfrxTee16.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee17.dpk | 49 + LibD28x64/FMXfrxTee17.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee18.dpk | 49 + LibD28x64/FMXfrxTee18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee19.dpk | 50 + LibD28x64/FMXfrxTee19.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee20.dpk | 49 + LibD28x64/FMXfrxTee20.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee21.dpk | 49 + LibD28x64/FMXfrxTee21.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee22.dpk | 49 + LibD28x64/FMXfrxTee22.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee23.dpk | 49 + LibD28x64/FMXfrxTee23.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxTee24.dpk | 49 + LibD28x64/FMXfrxTee24.dproj | 126 + LibD28x64/FMXfrxTee24.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee24.res | Bin 0 -> 384 bytes LibD28x64/FMXfrxTee25.dpk | 49 + LibD28x64/FMXfrxTee25.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxTee25.res | Bin 0 -> 384 bytes LibD28x64/FMXfrxTee26.dpk | 49 + LibD28x64/FMXfrxTee27.dpk | 49 + LibD28x64/FMXfrxTee28.dproj | 120 + LibD28x64/FMXfrxTee29.dpk | 49 + LibD28x64/FMXfrxTee29.dproj | 132 + LibD28x64/FMXfrxTee29.res | Bin 0 -> 652 bytes LibD28x64/FMXfrxe16.dpk | 71 + LibD28x64/FMXfrxe16.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe16.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe17.dpk | 72 + LibD28x64/FMXfrxe17.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe17.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe18.dpk | 71 + LibD28x64/FMXfrxe18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe18.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe19.dpk | 72 + LibD28x64/FMXfrxe19.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe19.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe20.dpk | 72 + LibD28x64/FMXfrxe20.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe20.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe21.dpk | 72 + LibD28x64/FMXfrxe21.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe21.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe22.dpk | 72 + LibD28x64/FMXfrxe22.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe22.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe23.dpk | 72 + LibD28x64/FMXfrxe23.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe23.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe24.dpk | 72 + LibD28x64/FMXfrxe24.dproj | 144 + LibD28x64/FMXfrxe24.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe24.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe25.dpk | 72 + LibD28x64/FMXfrxe25.otares | Bin 0 -> 96 bytes LibD28x64/FMXfrxe25.res | Bin 0 -> 448 bytes LibD28x64/FMXfrxe26.dpk | 69 + LibD28x64/FMXfrxe27.dpk | 70 + LibD28x64/FMXfrxe29.dpk | 70 + LibD28x64/FMXfrxeReg.pas | 51 + LibD28x64/FMXfs16.dpk | 60 + LibD28x64/FMXfs16.res | Bin 0 -> 448 bytes LibD28x64/FMXfs17.dpk | 60 + LibD28x64/FMXfs17.res | Bin 0 -> 448 bytes LibD28x64/FMXfs18.dpk | 60 + LibD28x64/FMXfs18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs18.res | Bin 0 -> 448 bytes LibD28x64/FMXfs19.dpk | 60 + LibD28x64/FMXfs19.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs19.res | Bin 0 -> 448 bytes LibD28x64/FMXfs20.dpk | 60 + LibD28x64/FMXfs20.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs20.res | Bin 0 -> 448 bytes LibD28x64/FMXfs21.dpk | 60 + LibD28x64/FMXfs21.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs21.res | Bin 0 -> 448 bytes LibD28x64/FMXfs22.dpk | 60 + LibD28x64/FMXfs22.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs22.res | Bin 0 -> 448 bytes LibD28x64/FMXfs23.dpk | 59 + LibD28x64/FMXfs23.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs23.res | Bin 0 -> 448 bytes LibD28x64/FMXfs24.dpk | 59 + LibD28x64/FMXfs24.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs24.res | Bin 0 -> 448 bytes LibD28x64/FMXfs25.dpk | 59 + LibD28x64/FMXfs25.otares | Bin 0 -> 96 bytes LibD28x64/FMXfs25.res | Bin 0 -> 448 bytes LibD28x64/FMXfs26.dpk | 59 + LibD28x64/FMXfs27.dpk | 59 + LibD28x64/FMXfs28.dpk | 61 + LibD28x64/FMXfs29.dpk | 61 + LibD28x64/FMXfs29.dproj | 147 + LibD28x64/FMXfs29.res | Bin 0 -> 628 bytes LibD28x64/FMXfsADO16.dpk | 40 + LibD28x64/FMXfsADO16.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO17.dpk | 40 + LibD28x64/FMXfsADO17.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO18.dpk | 40 + LibD28x64/FMXfsADO18.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO19.dpk | 40 + LibD28x64/FMXfsADO19.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO20.dpk | 40 + LibD28x64/FMXfsADO20.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO21.dpk | 40 + LibD28x64/FMXfsADO21.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO22.dpk | 40 + LibD28x64/FMXfsADO22.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO23.dpk | 40 + LibD28x64/FMXfsADO23.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO24.dpk | 40 + LibD28x64/FMXfsADO24.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO25.dpk | 40 + LibD28x64/FMXfsADO25.res | Bin 0 -> 448 bytes LibD28x64/FMXfsADO26.dpk | 40 + LibD28x64/FMXfsADO27.dpk | 40 + LibD28x64/FMXfsADO28.dpk | 40 + LibD28x64/FMXfsADO29.dpk | 40 + LibD28x64/FMXfsDB16.dpk | 41 + LibD28x64/FMXfsDB16.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB17.dpk | 41 + LibD28x64/FMXfsDB17.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB18.dpk | 42 + LibD28x64/FMXfsDB18.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB18.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB19.dpk | 42 + LibD28x64/FMXfsDB19.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB19.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB20.dpk | 42 + LibD28x64/FMXfsDB20.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB20.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB21.dpk | 42 + LibD28x64/FMXfsDB21.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB21.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB22.dpk | 42 + LibD28x64/FMXfsDB22.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB22.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB23.dpk | 42 + LibD28x64/FMXfsDB23.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB23.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB24.dpk | 42 + LibD28x64/FMXfsDB24.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB24.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB25.dpk | 42 + LibD28x64/FMXfsDB25.otares | Bin 0 -> 96 bytes LibD28x64/FMXfsDB25.res | Bin 0 -> 448 bytes LibD28x64/FMXfsDB26.dpk | 40 + LibD28x64/FMXfsDB27.dpk | 40 + LibD28x64/FMXfsDB28.dpk | 40 + LibD28x64/FMXfsDB29.dpk | 40 + LibD28x64/FMXfsDB29.dproj | 122 + LibD28x64/FMXfsDB29.res | Bin 0 -> 640 bytes LibD28x64/FMXfsIBX16.dpk | 41 + LibD28x64/FMXfsIBX16.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX17.dpk | 41 + LibD28x64/FMXfsIBX17.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX18.dpk | 41 + LibD28x64/FMXfsIBX18.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX19.dpk | 41 + LibD28x64/FMXfsIBX19.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX20.dpk | 41 + LibD28x64/FMXfsIBX20.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX21.dpk | 41 + LibD28x64/FMXfsIBX21.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX22.dpk | 41 + LibD28x64/FMXfsIBX22.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX23.dpk | 41 + LibD28x64/FMXfsIBX23.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX24.dpk | 41 + LibD28x64/FMXfsIBX24.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX25.dpk | 41 + LibD28x64/FMXfsIBX25.res | Bin 0 -> 448 bytes LibD28x64/FMXfsIBX26.dpk | 41 + LibD28x64/FMXfsIBX27.dpk | 41 + LibD28x64/FMXfsIBX28.dpk | 41 + LibD28x64/FMXfsIBX29.dpk | 41 + LibD28x64/FMXfsTee16.dpk | 42 + LibD28x64/FMXfsTee16.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee17.dpk | 43 + LibD28x64/FMXfsTee17.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee18.dpk | 43 + LibD28x64/FMXfsTee18.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee19.dpk | 43 + LibD28x64/FMXfsTee19.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee20.dpk | 43 + LibD28x64/FMXfsTee20.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee21.dpk | 43 + LibD28x64/FMXfsTee21.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee22.dpk | 43 + LibD28x64/FMXfsTee22.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee23.dpk | 45 + LibD28x64/FMXfsTee23.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee24.dpk | 45 + LibD28x64/FMXfsTee24.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee25.dpk | 45 + LibD28x64/FMXfsTee25.res | Bin 0 -> 448 bytes LibD28x64/FMXfsTee26.dpk | 45 + LibD28x64/FMXfsTee27.dpk | 45 + LibD28x64/FMXfsTee28.dpk | 45 + LibD28x64/FMXfsTee29.dpk | 45 + LibD28x64/FMXfsTee29.dproj | 109 + LibD28x64/FMXfs_iadoreg.pas | 37 + LibD28x64/FMXfs_idbreg.pas | 37 + LibD28x64/FMXfs_iibxreg.pas | 37 + LibD28x64/FMXfs_ireg.pas | 85 + LibD28x64/FMXfs_iteereg.pas | 38 + LibD28x64/FmxLinuxFrxDBX.dpr | 19 + LibD28x64/FmxLinuxFrxExp.dpr | 47 + LibD28x64/FmxLinuxFrxFD.dpr | 19 + LibD28x64/FmxLinuxFrxIBX.dpr | 20 + LibD28x64/FmxLinuxFrxLang.dpr | 20 + LibD28x64/FmxLinuxFrxMain.dpr | 131 + LibD28x64/FmxLinuxFrxTee.dpr | 21 + LibD28x64/ProjectGroup1.groupproj | 300 + LibD28x64/dclFMXfrx16.dpk | 39 + LibD28x64/dclFMXfrx16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx17.dpk | 39 + LibD28x64/dclFMXfrx17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx18.dpk | 39 + LibD28x64/dclFMXfrx18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx19.dpk | 39 + LibD28x64/dclFMXfrx19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx20.dpk | 39 + LibD28x64/dclFMXfrx20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx21.dpk | 39 + LibD28x64/dclFMXfrx21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx22.dpk | 39 + LibD28x64/dclFMXfrx22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx23.dpk | 39 + LibD28x64/dclFMXfrx23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx24.dpk | 39 + LibD28x64/dclFMXfrx24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx25.dpk | 39 + LibD28x64/dclFMXfrx25.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfrx25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrx26.dpk | 39 + LibD28x64/dclFMXfrx27.dpk | 39 + LibD28x64/dclFMXfrx29.dpk | 39 + LibD28x64/dclFMXfrx29.dproj | 109 + LibD28x64/dclFMXfrxADO16.dpk | 39 + LibD28x64/dclFMXfrxADO16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO17.dpk | 39 + LibD28x64/dclFMXfrxADO17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO18.dpk | 39 + LibD28x64/dclFMXfrxADO18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO19.dpk | 39 + LibD28x64/dclFMXfrxADO19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO20.dpk | 39 + LibD28x64/dclFMXfrxADO20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO21.dpk | 39 + LibD28x64/dclFMXfrxADO21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO22.dpk | 39 + LibD28x64/dclFMXfrxADO22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO23.dpk | 39 + LibD28x64/dclFMXfrxADO23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO24.dpk | 39 + LibD28x64/dclFMXfrxADO24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO25.dpk | 39 + LibD28x64/dclFMXfrxADO25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxADO26.dpk | 39 + LibD28x64/dclFMXfrxADO27.dpk | 39 + LibD28x64/dclFMXfrxADO28.dpk | 39 + LibD28x64/dclFMXfrxADO29.dpk | 39 + LibD28x64/dclFMXfrxDB16.dpk | 40 + LibD28x64/dclFMXfrxDB16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB17.dpk | 40 + LibD28x64/dclFMXfrxDB17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB18.dpk | 40 + LibD28x64/dclFMXfrxDB18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB19.dpk | 40 + LibD28x64/dclFMXfrxDB19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB20.dpk | 40 + LibD28x64/dclFMXfrxDB20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB21.dpk | 40 + LibD28x64/dclFMXfrxDB21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB22.dpk | 40 + LibD28x64/dclFMXfrxDB22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB23.dpk | 40 + LibD28x64/dclFMXfrxDB23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB24.dpk | 40 + LibD28x64/dclFMXfrxDB24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB25.dpk | 40 + LibD28x64/dclFMXfrxDB25.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfrxDB25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDB26.dpk | 40 + LibD28x64/dclFMXfrxDB27.dpk | 40 + LibD28x64/dclFMXfrxDB29.dpk | 40 + LibD28x64/dclFMXfrxDB29.dproj | 124 + LibD28x64/dclFMXfrxDB29.res | Bin 0 -> 664 bytes LibD28x64/dclFMXfrxDBX16.dpk | 39 + LibD28x64/dclFMXfrxDBX16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX17.dpk | 39 + LibD28x64/dclFMXfrxDBX17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX18.dpk | 39 + LibD28x64/dclFMXfrxDBX18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX19.dpk | 39 + LibD28x64/dclFMXfrxDBX19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX20.dpk | 39 + LibD28x64/dclFMXfrxDBX20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX21.dpk | 39 + LibD28x64/dclFMXfrxDBX21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX22.dpk | 39 + LibD28x64/dclFMXfrxDBX22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX23.dpk | 39 + LibD28x64/dclFMXfrxDBX23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX24.dpk | 39 + LibD28x64/dclFMXfrxDBX24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX25.dpk | 39 + LibD28x64/dclFMXfrxDBX25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxDBX26.dpk | 39 + LibD28x64/dclFMXfrxDBX27.dpk | 39 + LibD28x64/dclFMXfrxDBX28.dproj | 114 + LibD28x64/dclFMXfrxDBX29.dpk | 39 + LibD28x64/dclFMXfrxDBX29.dproj | 126 + LibD28x64/dclFMXfrxDBX29.res | Bin 0 -> 676 bytes LibD28x64/dclFMXfrxFD18.dpk | 43 + LibD28x64/dclFMXfrxFD18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD19.dpk | 43 + LibD28x64/dclFMXfrxFD19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD20.dpk | 43 + LibD28x64/dclFMXfrxFD20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD21.dpk | 43 + LibD28x64/dclFMXfrxFD21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD22.dpk | 43 + LibD28x64/dclFMXfrxFD22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD23.dpk | 43 + LibD28x64/dclFMXfrxFD23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD24.dpk | 43 + LibD28x64/dclFMXfrxFD24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD25.dpk | 43 + LibD28x64/dclFMXfrxFD25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxFD26.dpk | 42 + LibD28x64/dclFMXfrxFD27.dpk | 42 + LibD28x64/dclFMXfrxFD29.dpk | 42 + LibD28x64/dclFMXfrxFD29.dproj | 112 + LibD28x64/dclFMXfrxIBX16.dpk | 40 + LibD28x64/dclFMXfrxIBX16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX17.dpk | 40 + LibD28x64/dclFMXfrxIBX17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX18.dpk | 40 + LibD28x64/dclFMXfrxIBX18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX19.dpk | 40 + LibD28x64/dclFMXfrxIBX19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX20.dpk | 40 + LibD28x64/dclFMXfrxIBX20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX21.dpk | 40 + LibD28x64/dclFMXfrxIBX21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX22.dpk | 40 + LibD28x64/dclFMXfrxIBX22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX23.dpk | 40 + LibD28x64/dclFMXfrxIBX23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX24.dpk | 40 + LibD28x64/dclFMXfrxIBX24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX25.dpk | 40 + LibD28x64/dclFMXfrxIBX25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxIBX26.dpk | 40 + LibD28x64/dclFMXfrxIBX27.dpk | 40 + LibD28x64/dclFMXfrxIBX28.dpk | 40 + LibD28x64/dclFMXfrxTee16.dpk | 39 + LibD28x64/dclFMXfrxTee16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee17.dpk | 39 + LibD28x64/dclFMXfrxTee17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee18.dpk | 39 + LibD28x64/dclFMXfrxTee18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee19.dpk | 39 + LibD28x64/dclFMXfrxTee19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee20.dpk | 39 + LibD28x64/dclFMXfrxTee20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee21.dpk | 39 + LibD28x64/dclFMXfrxTee21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee22.dpk | 39 + LibD28x64/dclFMXfrxTee22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee23.dpk | 39 + LibD28x64/dclFMXfrxTee23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee24.dpk | 39 + LibD28x64/dclFMXfrxTee24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee25.dpk | 39 + LibD28x64/dclFMXfrxTee25.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfrxTee25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxTee26.dpk | 39 + LibD28x64/dclFMXfrxTee27.dpk | 39 + LibD28x64/dclFMXfrxTee29.dpk | 39 + LibD28x64/dclFMXfrxTee29.dproj | 115 + LibD28x64/dclFMXfrxe16.dpk | 39 + LibD28x64/dclFMXfrxe16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe17.dpk | 39 + LibD28x64/dclFMXfrxe17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe18.dpk | 39 + LibD28x64/dclFMXfrxe18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe19.dpk | 39 + LibD28x64/dclFMXfrxe19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe20.dpk | 39 + LibD28x64/dclFMXfrxe20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe21.dpk | 39 + LibD28x64/dclFMXfrxe21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe22.dpk | 39 + LibD28x64/dclFMXfrxe22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe23.dpk | 39 + LibD28x64/dclFMXfrxe23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfrxe24.dpk | 39 + LibD28x64/dclFMXfrxe24.dproj | 120 + LibD28x64/dclFMXfrxe24.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfrxe24.res | Bin 0 -> 384 bytes LibD28x64/dclFMXfrxe25.dpk | 39 + LibD28x64/dclFMXfrxe25.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfrxe25.res | Bin 0 -> 384 bytes LibD28x64/dclFMXfrxe26.dpk | 39 + LibD28x64/dclFMXfrxe27.dpk | 39 + LibD28x64/dclFMXfrxe29.dpk | 39 + LibD28x64/dclFMXfrxe29.dproj | 114 + LibD28x64/dclFMXfrxe29.res | Bin 0 -> 664 bytes LibD28x64/dclFMXfs16.dpk | 39 + LibD28x64/dclFMXfs16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs17.dpk | 39 + LibD28x64/dclFMXfs17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs18.dpk | 44 + LibD28x64/dclFMXfs18.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs19.dpk | 44 + LibD28x64/dclFMXfs19.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs20.dpk | 44 + LibD28x64/dclFMXfs20.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs21.dpk | 44 + LibD28x64/dclFMXfs21.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs22.dpk | 44 + LibD28x64/dclFMXfs22.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs23.dpk | 39 + LibD28x64/dclFMXfs23.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs24.dpk | 39 + LibD28x64/dclFMXfs24.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs25.dpk | 39 + LibD28x64/dclFMXfs25.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfs25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfs26.dpk | 39 + LibD28x64/dclFMXfs27.dpk | 39 + LibD28x64/dclFMXfs28.dpk | 39 + LibD28x64/dclFMXfs29.dpk | 39 + LibD28x64/dclFMXfs29.dproj | 116 + LibD28x64/dclFMXfsADO16.dpk | 40 + LibD28x64/dclFMXfsADO16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO17.dpk | 40 + LibD28x64/dclFMXfsADO17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO18.dpk | 40 + LibD28x64/dclFMXfsADO18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO19.dpk | 40 + LibD28x64/dclFMXfsADO19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO20.dpk | 40 + LibD28x64/dclFMXfsADO20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO21.dpk | 40 + LibD28x64/dclFMXfsADO21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO22.dpk | 40 + LibD28x64/dclFMXfsADO22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO23.dpk | 40 + LibD28x64/dclFMXfsADO23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO24.dpk | 40 + LibD28x64/dclFMXfsADO24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO25.dpk | 40 + LibD28x64/dclFMXfsADO25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsADO26.dpk | 40 + LibD28x64/dclFMXfsADO27.dpk | 40 + LibD28x64/dclFMXfsADO28.dpk | 40 + LibD28x64/dclFMXfsADO29.dpk | 40 + LibD28x64/dclFMXfsDB16.dpk | 40 + LibD28x64/dclFMXfsDB16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB17.dpk | 40 + LibD28x64/dclFMXfsDB17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB18.dpk | 45 + LibD28x64/dclFMXfsDB18.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB19.dpk | 45 + LibD28x64/dclFMXfsDB19.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB20.dpk | 45 + LibD28x64/dclFMXfsDB20.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB21.dpk | 45 + LibD28x64/dclFMXfsDB21.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB22.dpk | 45 + LibD28x64/dclFMXfsDB22.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB23.dpk | 43 + LibD28x64/dclFMXfsDB23.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB24.dpk | 43 + LibD28x64/dclFMXfsDB24.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB25.dpk | 43 + LibD28x64/dclFMXfsDB25.otares | Bin 0 -> 96 bytes LibD28x64/dclFMXfsDB25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsDB26.dpk | 43 + LibD28x64/dclFMXfsDB27.dpk | 43 + LibD28x64/dclFMXfsDB28.dpk | 43 + LibD28x64/dclFMXfsDB29.dpk | 43 + LibD28x64/dclFMXfsDB29.dproj | 113 + LibD28x64/dclFMXfsIBX16.dpk | 40 + LibD28x64/dclFMXfsIBX16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX17.dpk | 40 + LibD28x64/dclFMXfsIBX17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX18.dpk | 40 + LibD28x64/dclFMXfsIBX18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX19.dpk | 40 + LibD28x64/dclFMXfsIBX19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX20.dpk | 40 + LibD28x64/dclFMXfsIBX20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX21.dpk | 40 + LibD28x64/dclFMXfsIBX21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX22.dpk | 40 + LibD28x64/dclFMXfsIBX22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX23.dpk | 40 + LibD28x64/dclFMXfsIBX23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX24.dpk | 40 + LibD28x64/dclFMXfsIBX24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX25.dpk | 40 + LibD28x64/dclFMXfsIBX25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsIBX26.dpk | 40 + LibD28x64/dclFMXfsIBX27.dpk | 40 + LibD28x64/dclFMXfsIBX28.dpk | 40 + LibD28x64/dclFMXfsIBX29.dpk | 40 + LibD28x64/dclFMXfsTee16.dpk | 40 + LibD28x64/dclFMXfsTee16.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee17.dpk | 40 + LibD28x64/dclFMXfsTee17.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee18.dpk | 40 + LibD28x64/dclFMXfsTee18.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee19.dpk | 40 + LibD28x64/dclFMXfsTee19.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee20.dpk | 40 + LibD28x64/dclFMXfsTee20.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee21.dpk | 40 + LibD28x64/dclFMXfsTee21.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee22.dpk | 40 + LibD28x64/dclFMXfsTee22.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee23.dpk | 40 + LibD28x64/dclFMXfsTee23.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee24.dpk | 40 + LibD28x64/dclFMXfsTee24.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee25.dpk | 40 + LibD28x64/dclFMXfsTee25.res | Bin 0 -> 448 bytes LibD28x64/dclFMXfsTee26.dpk | 40 + LibD28x64/dclFMXfsTee27.dpk | 40 + LibD28x64/dclFMXfsTee28.dpk | 40 + LibD28x64/dclFMXfsTee29.dpk | 40 + LibD28x64/dclFMXfsTee29.dproj | 115 + LibD28x64/dclfs10.dpk | 40 + LibD28x64/dclfs11.dpk | 40 + LibD28x64/dclfs12.dpk | 40 + LibD28x64/dclfs14.dpk | 39 + LibD28x64/dclfs15.dpk | 39 + LibD28x64/dclfs16.dpk | 39 + LibD28x64/dclfs17.dpk | 39 + LibD28x64/dclfs18.dpk | 39 + LibD28x64/dclfs19.dpk | 39 + LibD28x64/dclfs20.dpk | 39 + LibD28x64/dclfs21.dpk | 39 + LibD28x64/dclfs22.dpk | 39 + LibD28x64/dclfs23.dpk | 39 + LibD28x64/dclfs24.dpk | 39 + LibD28x64/dclfs25.dpk | 39 + LibD28x64/dclfs26.dpk | 39 + LibD28x64/dclfs27.dpk | 39 + LibD28x64/dclfs28.dpk | 39 + LibD28x64/dclfs29.dpk | 39 + LibD28x64/dclfs29.dproj | 121 + LibD28x64/dclfs29.res | Bin 0 -> 628 bytes LibD28x64/dclfs4.dpk | 39 + LibD28x64/dclfs5.dpk | 39 + LibD28x64/dclfs6.dpk | 40 + LibD28x64/dclfs7.dpk | 40 + LibD28x64/dclfs9.dpk | 40 + LibD28x64/dclfsADO10.dpk | 41 + LibD28x64/dclfsADO11.dpk | 41 + LibD28x64/dclfsADO12.dpk | 41 + LibD28x64/dclfsADO14.dpk | 40 + LibD28x64/dclfsADO15.dpk | 40 + LibD28x64/dclfsADO16.dpk | 40 + LibD28x64/dclfsADO17.dpk | 40 + LibD28x64/dclfsADO18.dpk | 40 + LibD28x64/dclfsADO19.dpk | 40 + LibD28x64/dclfsADO20.dpk | 40 + LibD28x64/dclfsADO21.dpk | 40 + LibD28x64/dclfsADO22.dpk | 40 + LibD28x64/dclfsADO23.dpk | 40 + LibD28x64/dclfsADO24.dpk | 40 + LibD28x64/dclfsADO25.dpk | 40 + LibD28x64/dclfsADO26.dpk | 40 + LibD28x64/dclfsADO27.dpk | 40 + LibD28x64/dclfsADO28.dpk | 40 + LibD28x64/dclfsADO29.dpk | 40 + LibD28x64/dclfsADO5.dpk | 40 + LibD28x64/dclfsADO6.dpk | 41 + LibD28x64/dclfsADO7.dpk | 41 + LibD28x64/dclfsADO9.dpk | 41 + LibD28x64/dclfsBDE10.dpk | 41 + LibD28x64/dclfsBDE11.dpk | 41 + LibD28x64/dclfsBDE12.dpk | 41 + LibD28x64/dclfsBDE14.dpk | 40 + LibD28x64/dclfsBDE15.dpk | 40 + LibD28x64/dclfsBDE16.dpk | 40 + LibD28x64/dclfsBDE17.dpk | 40 + LibD28x64/dclfsBDE18.dpk | 40 + LibD28x64/dclfsBDE19.dpk | 40 + LibD28x64/dclfsBDE20.dpk | 40 + LibD28x64/dclfsBDE21.dpk | 40 + LibD28x64/dclfsBDE22.dpk | 40 + LibD28x64/dclfsBDE23.dpk | 40 + LibD28x64/dclfsBDE24.dpk | 40 + LibD28x64/dclfsBDE25.dpk | 40 + LibD28x64/dclfsBDE26.dpk | 40 + LibD28x64/dclfsBDE27.dpk | 40 + LibD28x64/dclfsBDE28.dpk | 40 + LibD28x64/dclfsBDE29.dpk | 40 + LibD28x64/dclfsBDE4.dpk | 40 + LibD28x64/dclfsBDE5.dpk | 40 + LibD28x64/dclfsBDE6.dpk | 41 + LibD28x64/dclfsBDE7.dpk | 41 + LibD28x64/dclfsBDE9.dpk | 41 + LibD28x64/dclfsDB10.dpk | 41 + LibD28x64/dclfsDB11.dpk | 41 + LibD28x64/dclfsDB12.dpk | 41 + LibD28x64/dclfsDB14.dpk | 40 + LibD28x64/dclfsDB15.dpk | 40 + LibD28x64/dclfsDB16.dpk | 40 + LibD28x64/dclfsDB17.dpk | 40 + LibD28x64/dclfsDB18.dpk | 40 + LibD28x64/dclfsDB19.dpk | 40 + LibD28x64/dclfsDB20.dpk | 40 + LibD28x64/dclfsDB21.dpk | 40 + LibD28x64/dclfsDB22.dpk | 40 + LibD28x64/dclfsDB23.dpk | 40 + LibD28x64/dclfsDB24.dpk | 40 + LibD28x64/dclfsDB25.dpk | 40 + LibD28x64/dclfsDB26.dpk | 40 + LibD28x64/dclfsDB27.dpk | 40 + LibD28x64/dclfsDB28.dpk | 40 + LibD28x64/dclfsDB29.dpk | 40 + LibD28x64/dclfsDB29.dproj | 122 + LibD28x64/dclfsDB29.res | Bin 0 -> 640 bytes LibD28x64/dclfsDB4.dpk | 40 + LibD28x64/dclfsDB5.dpk | 40 + LibD28x64/dclfsDB6.dpk | 41 + LibD28x64/dclfsDB7.dpk | 41 + LibD28x64/dclfsDB9.dpk | 41 + LibD28x64/dclfsFD15.dpk | 40 + LibD28x64/dclfsFD16.dpk | 40 + LibD28x64/dclfsFD17.dpk | 40 + LibD28x64/dclfsFD18.dpk | 40 + LibD28x64/dclfsFD19.dpk | 40 + LibD28x64/dclfsFD20.dpk | 40 + LibD28x64/dclfsFD21.dpk | 40 + LibD28x64/dclfsFD22.dpk | 40 + LibD28x64/dclfsFD23.dpk | 40 + LibD28x64/dclfsFD24.dpk | 40 + LibD28x64/dclfsFD25.dpk | 40 + LibD28x64/dclfsFD26.dpk | 40 + LibD28x64/dclfsFD27.dpk | 40 + LibD28x64/dclfsFD28.dpk | 40 + LibD28x64/dclfsFD29.dpk | 40 + LibD28x64/dclfsFD29.dproj | 122 + LibD28x64/dclfsFD29.res | Bin 0 -> 640 bytes LibD28x64/dclfsIBX10.dpk | 41 + LibD28x64/dclfsIBX11.dpk | 41 + LibD28x64/dclfsIBX12.dpk | 41 + LibD28x64/dclfsIBX14.dpk | 40 + LibD28x64/dclfsIBX15.dpk | 40 + LibD28x64/dclfsIBX16.dpk | 40 + LibD28x64/dclfsIBX17.dpk | 40 + LibD28x64/dclfsIBX18.dpk | 40 + LibD28x64/dclfsIBX19.dpk | 40 + LibD28x64/dclfsIBX20.dpk | 40 + LibD28x64/dclfsIBX21.dpk | 40 + LibD28x64/dclfsIBX22.dpk | 40 + LibD28x64/dclfsIBX23.dpk | 40 + LibD28x64/dclfsIBX24.dpk | 40 + LibD28x64/dclfsIBX25.dpk | 40 + LibD28x64/dclfsIBX26.dpk | 40 + LibD28x64/dclfsIBX27.dpk | 40 + LibD28x64/dclfsIBX28.dpk | 40 + LibD28x64/dclfsIBX29.dpk | 40 + LibD28x64/dclfsIBX5.dpk | 40 + LibD28x64/dclfsIBX6.dpk | 41 + LibD28x64/dclfsIBX7.dpk | 41 + LibD28x64/dclfsIBX9.dpk | 41 + LibD28x64/dclfsTee10.dpk | 41 + LibD28x64/dclfsTee11.dpk | 41 + LibD28x64/dclfsTee12.dpk | 41 + LibD28x64/dclfsTee14.dpk | 40 + LibD28x64/dclfsTee15.dpk | 40 + LibD28x64/dclfsTee16.dpk | 40 + LibD28x64/dclfsTee17.dpk | 40 + LibD28x64/dclfsTee18.dpk | 40 + LibD28x64/dclfsTee19.dpk | 40 + LibD28x64/dclfsTee20.dpk | 40 + LibD28x64/dclfsTee21.dpk | 40 + LibD28x64/dclfsTee22.dpk | 40 + LibD28x64/dclfsTee23.dpk | 40 + LibD28x64/dclfsTee24.dpk | 40 + LibD28x64/dclfsTee25.dpk | 40 + LibD28x64/dclfsTee26.dpk | 40 + LibD28x64/dclfsTee27.dpk | 40 + LibD28x64/dclfsTee28.dpk | 40 + LibD28x64/dclfsTee29.dpk | 40 + LibD28x64/dclfsTee29.dproj | 122 + LibD28x64/dclfsTee29.res | Bin 0 -> 652 bytes LibD28x64/dclfsTee4.dpk | 40 + LibD28x64/dclfsTee5.dpk | 40 + LibD28x64/dclfsTee6.dpk | 41 + LibD28x64/dclfsTee7.dpk | 41 + LibD28x64/dclfsTee9.dpk | 41 + LibD28x64/dclfsx.dpk | 47 + LibD28x64/dclfsx.dproj | 126 + LibD28x64/dclfsx.res | Bin 0 -> 1472 bytes LibD28x64/dclfsx_Icon.ico | Bin 0 -> 766 bytes LibD28x64/fmx.frxImageConverter.pas | 124 + LibD28x64/fmx.inc | 12 + LibD28x64/frx.inc | 704 ++ LibD28x64/frxBarcodeEditor.fmx | 183 + LibD28x64/frxEditSQL.inc | 18 + LibD28x64/frxFMX_PlatformsAttribute.inc | 12 + LibD28x64/frxIBXReg.res | Bin 0 -> 1864 bytes LibD28x64/frxPlatformsAttribute.inc | 12 + LibD28x64/frxReg.dcr | Bin 0 -> 54516 bytes LibD28x64/frxVersion.inc | 1 + LibD28x64/frxe16.otares | Bin 0 -> 96 bytes LibD28x64/frxeReg.dcr | Bin 0 -> 31076 bytes LibD28x64/frxrcClass.xml | 247 + LibD28x64/frxrcDesgn.xml | 851 ++ LibD28x64/frxrcExports.xml | 278 + LibD28x64/frxrcInsp.xml | 274 + LibD28x64/fs.inc | 612 + LibD28x64/fs10.dpk | 66 + LibD28x64/fs11.dpk | 66 + LibD28x64/fs12.dpk | 61 + LibD28x64/fs14.dpk | 61 + LibD28x64/fs15.dpk | 61 + LibD28x64/fs16.dpk | 61 + LibD28x64/fs17.dpk | 61 + LibD28x64/fs18.dpk | 61 + LibD28x64/fs19.dpk | 61 + LibD28x64/fs20.dpk | 61 + LibD28x64/fs21.dpk | 61 + LibD28x64/fs22.dpk | 61 + LibD28x64/fs23.dpk | 61 + LibD28x64/fs24.dpk | 61 + LibD28x64/fs25.dpk | 61 + LibD28x64/fs26.dpk | 61 + LibD28x64/fs27.dpk | 61 + LibD28x64/fs28.dpk | 61 + LibD28x64/fs29.dpk | 61 + LibD28x64/fs29.dproj | 142 + LibD28x64/fs29.res | Bin 0 -> 616 bytes LibD28x64/fs4.bpk | 187 + LibD28x64/fs4.cpp | 19 + LibD28x64/fs4.dpk | 65 + LibD28x64/fs4.res | Bin 0 -> 1536 bytes LibD28x64/fs5.bpk | 108 + LibD28x64/fs5.cpp | 23 + LibD28x64/fs5.dpk | 66 + LibD28x64/fs5.res | Bin 0 -> 1536 bytes LibD28x64/fs6.bpk | 122 + LibD28x64/fs6.cpp | 17 + LibD28x64/fs6.dpk | 66 + LibD28x64/fs6.res | Bin 0 -> 1536 bytes LibD28x64/fs7.dpk | 66 + LibD28x64/fs9.dpk | 66 + LibD28x64/fsADO10.dpk | 42 + LibD28x64/fsADO11.dpk | 42 + LibD28x64/fsADO12.dpk | 42 + LibD28x64/fsADO14.dpk | 40 + LibD28x64/fsADO15.dpk | 40 + LibD28x64/fsADO16.dpk | 40 + LibD28x64/fsADO17.dpk | 40 + LibD28x64/fsADO18.dpk | 40 + LibD28x64/fsADO19.dpk | 40 + LibD28x64/fsADO20.dpk | 40 + LibD28x64/fsADO21.dpk | 40 + LibD28x64/fsADO22.dpk | 40 + LibD28x64/fsADO23.dpk | 40 + LibD28x64/fsADO24.dpk | 40 + LibD28x64/fsADO25.dpk | 40 + LibD28x64/fsADO26.dpk | 40 + LibD28x64/fsADO27.dpk | 40 + LibD28x64/fsADO28.dpk | 40 + LibD28x64/fsADO29.dpk | 40 + LibD28x64/fsADO5.bpk | 108 + LibD28x64/fsADO5.cpp | 25 + LibD28x64/fsADO5.dpk | 42 + LibD28x64/fsADO6.bpk | 124 + LibD28x64/fsADO6.cpp | 17 + LibD28x64/fsADO6.dpk | 42 + LibD28x64/fsADO7.dpk | 42 + LibD28x64/fsADO9.dpk | 42 + LibD28x64/fsBDE10.dpk | 42 + LibD28x64/fsBDE11.dpk | 42 + LibD28x64/fsBDE12.dpk | 42 + LibD28x64/fsBDE14.dpk | 42 + LibD28x64/fsBDE15.dpk | 42 + LibD28x64/fsBDE16.dpk | 42 + LibD28x64/fsBDE17.dpk | 42 + LibD28x64/fsBDE18.dpk | 42 + LibD28x64/fsBDE19.dpk | 42 + LibD28x64/fsBDE20.dpk | 42 + LibD28x64/fsBDE21.dpk | 42 + LibD28x64/fsBDE22.dpk | 42 + LibD28x64/fsBDE23.dpk | 42 + LibD28x64/fsBDE24.dpk | 42 + LibD28x64/fsBDE25.dpk | 42 + LibD28x64/fsBDE26.dpk | 42 + LibD28x64/fsBDE27.dpk | 42 + LibD28x64/fsBDE28.dpk | 42 + LibD28x64/fsBDE29.dpk | 42 + LibD28x64/fsBDE4.bpk | 187 + LibD28x64/fsBDE4.cpp | 20 + LibD28x64/fsBDE4.dpk | 41 + LibD28x64/fsBDE5.bpk | 108 + LibD28x64/fsBDE5.cpp | 25 + LibD28x64/fsBDE5.dpk | 42 + LibD28x64/fsBDE6.bpk | 125 + LibD28x64/fsBDE6.cpp | 17 + LibD28x64/fsBDE6.dpk | 42 + LibD28x64/fsBDE7.dpk | 42 + LibD28x64/fsBDE9.dpk | 42 + LibD28x64/fsDB10.dpk | 41 + LibD28x64/fsDB11.dpk | 41 + LibD28x64/fsDB12.dpk | 41 + LibD28x64/fsDB14.dpk | 39 + LibD28x64/fsDB15.dpk | 39 + LibD28x64/fsDB16.dpk | 39 + LibD28x64/fsDB17.dpk | 39 + LibD28x64/fsDB18.dpk | 39 + LibD28x64/fsDB19.dpk | 39 + LibD28x64/fsDB20.dpk | 39 + LibD28x64/fsDB21.dpk | 39 + LibD28x64/fsDB22.dpk | 39 + LibD28x64/fsDB23.dpk | 39 + LibD28x64/fsDB24.dpk | 39 + LibD28x64/fsDB25.dpk | 39 + LibD28x64/fsDB26.dpk | 39 + LibD28x64/fsDB27.dpk | 39 + LibD28x64/fsDB28.dpk | 39 + LibD28x64/fsDB4.bpk | 187 + LibD28x64/fsDB4.cpp | 19 + LibD28x64/fsDB4.dpk | 41 + LibD28x64/fsDB5.bpk | 108 + LibD28x64/fsDB5.cpp | 23 + LibD28x64/fsDB5.dpk | 41 + LibD28x64/fsDB6.bpk | 123 + LibD28x64/fsDB6.cpp | 17 + LibD28x64/fsDB6.dpk | 41 + LibD28x64/fsDB7.dpk | 41 + LibD28x64/fsDB9.dpk | 41 + LibD28x64/fsFD15.dpk | 44 + LibD28x64/fsFD16.dpk | 44 + LibD28x64/fsFD17.dpk | 44 + LibD28x64/fsFD18.dpk | 43 + LibD28x64/fsFD19.dpk | 43 + LibD28x64/fsFD20.dpk | 43 + LibD28x64/fsFD21.dpk | 43 + LibD28x64/fsFD22.dpk | 43 + LibD28x64/fsFD23.dpk | 43 + LibD28x64/fsFD24.dpk | 43 + LibD28x64/fsFD25.dpk | 43 + LibD28x64/fsFD26.dpk | 43 + LibD28x64/fsFD27.dpk | 43 + LibD28x64/fsFD28.dpk | 43 + LibD28x64/fsFD29.dpk | 43 + LibD28x64/fsFD29.dproj | 127 + LibD28x64/fsFD29.res | Bin 0 -> 628 bytes LibD28x64/fsIBX10.dpk | 42 + LibD28x64/fsIBX11.dpk | 42 + LibD28x64/fsIBX12.dpk | 42 + LibD28x64/fsIBX14.dpk | 40 + LibD28x64/fsIBX15.dpk | 40 + LibD28x64/fsIBX16.dpk | 40 + LibD28x64/fsIBX17.dpk | 40 + LibD28x64/fsIBX18.dpk | 40 + LibD28x64/fsIBX19.dpk | 40 + LibD28x64/fsIBX20.dpk | 40 + LibD28x64/fsIBX21.dpk | 40 + LibD28x64/fsIBX22.dpk | 40 + LibD28x64/fsIBX23.dpk | 40 + LibD28x64/fsIBX24.dpk | 40 + LibD28x64/fsIBX25.dpk | 40 + LibD28x64/fsIBX26.dpk | 40 + LibD28x64/fsIBX27.dpk | 40 + LibD28x64/fsIBX28.dpk | 40 + LibD28x64/fsIBX29.dpk | 40 + LibD28x64/fsIBX5.bpk | 108 + LibD28x64/fsIBX5.cpp | 26 + LibD28x64/fsIBX5.dpk | 42 + LibD28x64/fsIBX6.bpk | 125 + LibD28x64/fsIBX6.cpp | 17 + LibD28x64/fsIBX6.dpk | 42 + LibD28x64/fsIBX7.dpk | 42 + LibD28x64/fsIBX9.dpk | 42 + LibD28x64/fsTee10.dpk | 52 + LibD28x64/fsTee11.dpk | 52 + LibD28x64/fsTee12.dpk | 52 + LibD28x64/fsTee14.dpk | 49 + LibD28x64/fsTee15.dpk | 49 + LibD28x64/fsTee16.dpk | 49 + LibD28x64/fsTee17.dpk | 49 + LibD28x64/fsTee18.dpk | 49 + LibD28x64/fsTee19.dpk | 49 + LibD28x64/fsTee20.dpk | 49 + LibD28x64/fsTee21.dpk | 49 + LibD28x64/fsTee22.dpk | 49 + LibD28x64/fsTee23.dpk | 49 + LibD28x64/fsTee24.dpk | 49 + LibD28x64/fsTee25.dpk | 49 + LibD28x64/fsTee26.dpk | 49 + LibD28x64/fsTee27.dpk | 49 + LibD28x64/fsTee28.dpk | 49 + LibD28x64/fsTee29.dpk | 49 + LibD28x64/fsTee29.dproj | 122 + LibD28x64/fsTee29.res | Bin 0 -> 628 bytes LibD28x64/fsTee4.bpk | 187 + LibD28x64/fsTee4.cpp | 21 + LibD28x64/fsTee4.dpk | 48 + LibD28x64/fsTee5.bpk | 108 + LibD28x64/fsTee5.cpp | 25 + LibD28x64/fsTee5.dpk | 48 + LibD28x64/fsTee6.bpk | 124 + LibD28x64/fsTee6.cpp | 17 + LibD28x64/fsTee6.dpk | 48 + LibD28x64/fsTee7.dpk | 52 + LibD28x64/fsTee9.dpk | 52 + LibD28x64/fs_iadoreg.pas | 45 + LibD28x64/fs_iadortti.pas | 135 + LibD28x64/fs_ibasic.pas | 193 + LibD28x64/fs_ibdereg.pas | 45 + LibD28x64/fs_ibdertti.pas | 171 + LibD28x64/fs_ibx.lpk | 49 + LibD28x64/fs_ichartrtti.pas | 195 + LibD28x64/fs_iclassesrtti.pas | 1052 ++ LibD28x64/fs_iconst.pas | 66 + LibD28x64/fs_icpp.pas | 183 + LibD28x64/fs_idbctrlsrtti.pas | 189 + LibD28x64/fs_idbreg.pas | 46 + LibD28x64/fs_idbrtti.pas | 583 + LibD28x64/fs_idialogsrtti.pas | 167 + LibD28x64/fs_idisp.pas | 136 + LibD28x64/fs_ievents.pas | 201 + LibD28x64/fs_iexpression.pas | 957 ++ LibD28x64/fs_iextctrlsrtti.pas | 434 + LibD28x64/fs_ifdreg.dcr | Bin 0 -> 1848 bytes LibD28x64/fs_ifdreg.pas | 33 + LibD28x64/fs_ifdrtti.pas | 391 + LibD28x64/fs_iformsrtti.pas | 439 + LibD28x64/fs_igraphicsrtti.pas | 262 + LibD28x64/fs_iibxreg.pas | 58 + LibD28x64/fs_iibxrtti.pas | 127 + LibD28x64/fs_iilparser.pas | 2059 ++++ LibD28x64/fs_iinirtti.pas | 377 + LibD28x64/fs_iinterpreter.pas | 3547 ++++++ LibD28x64/fs_ijs.pas | 168 + LibD28x64/fs_imenusrtti.pas | 183 + LibD28x64/fs_iparser.pas | 762 ++ LibD28x64/fs_ipascal.pas | 201 + LibD28x64/fs_ireg.dcr | Bin 0 -> 36456 bytes LibD28x64/fs_ireg.lrs | 1741 +++ LibD28x64/fs_ireg.pas | 90 + LibD28x64/fs_isysrtti.pas | 623 + LibD28x64/fs_iteereg.pas | 46 + LibD28x64/fs_itools.pas | 712 ++ LibD28x64/fs_lazarus.lpk | 159 + LibD28x64/fs_lazarus.pas | 25 + LibD28x64/fs_synmemo.dfm | Bin 0 -> 717 bytes LibD28x64/fs_synmemo.lfm | 56 + LibD28x64/fs_synmemo.pas | 2113 ++++ LibD28x64/fs_tree.pas | 426 + LibD28x64/fs_tree.res | Bin 0 -> 3172 bytes LibD28x64/fs_xml.pas | 756 ++ LibD28x64/fsx.dpk | 67 + LibD28x64/fsx.dproj | 143 + LibD28x64/fsx.res | Bin 0 -> 876 bytes LibD28x64/fsx_Icon.ico | Bin 0 -> 766 bytes LibD28x64/mk.bat | 21 + LibD28x64/mkall.bat | 5 + LibD28x64/readme.txt | 56 + LibD28x64/readme_lazarus.txt | 6 + LibD28x64/tee.inc | 85 + Res/Arabic/frxrcClass.xml | 230 + Res/Arabic/frxrcDesgn.xml | 844 ++ Res/Arabic/frxrcExports.xml | 269 + Res/Arabic/frxrcInsp.xml | 274 + Res/Arabic/mk.bat | 21 + Res/Arabic/mkall.bat | 5 + Res/Brazil/frxrcClass.xml | 230 + Res/Brazil/frxrcDesgn.xml | 844 ++ Res/Brazil/frxrcExports.xml | 269 + Res/Brazil/frxrcInsp.xml | 274 + Res/Brazil/mk.bat | 21 + Res/Brazil/mkall.bat | 5 + Res/Bulgarian/frxrcClass.xml | 230 + Res/Bulgarian/frxrcDesgn.xml | 851 ++ Res/Bulgarian/frxrcExports.xml | 269 + Res/Bulgarian/frxrcInsp.xml | 274 + Res/Bulgarian/mk.bat | 21 + Res/Bulgarian/mkall.bat | 5 + Res/Catalon/frxrcClass.xml | 230 + Res/Catalon/frxrcDesgn.xml | 846 ++ Res/Catalon/frxrcExports.xml | 269 + Res/Catalon/frxrcInsp.xml | 274 + Res/Catalon/mk.bat | 21 + Res/Catalon/mkall.bat | 5 + Res/Chinese/frxrcClass.xml | 230 + Res/Chinese/frxrcDesgn.xml | 846 ++ Res/Chinese/frxrcExports.xml | 269 + Res/Chinese/frxrcInsp.xml | 274 + Res/Chinese/mk.bat | 21 + Res/Chinese/mkall.bat | 5 + Res/Croatian/frxrcClass.xml | 230 + Res/Croatian/frxrcDesgn.xml | 845 ++ Res/Croatian/frxrcExports.xml | 269 + Res/Croatian/frxrcInsp.xml | 275 + Res/Croatian/mk.bat | 21 + Res/Croatian/mkall.bat | 5 + Res/Czech/Info.txt | 4 + Res/Czech/frxrcClass.xml | 230 + Res/Czech/frxrcDesgn.xml | 847 ++ Res/Czech/frxrcExports.xml | 269 + Res/Czech/frxrcInsp.xml | 274 + Res/Czech/mk.bat | 21 + Res/Czech/mkall.bat | 5 + Res/Danish/frxrcClass.xml | 230 + Res/Danish/frxrcDesgn.xml | 844 ++ Res/Danish/frxrcExports.xml | 269 + Res/Danish/frxrcInsp.xml | 274 + Res/Danish/mk.bat | 21 + Res/Danish/mkall.bat | 5 + Res/Dutch/frxrcClass.xml | 230 + Res/Dutch/frxrcDesgn.xml | 844 ++ Res/Dutch/frxrcExports.xml | 269 + Res/Dutch/frxrcInsp.xml | 274 + Res/Dutch/mk.bat | 21 + Res/Dutch/mkall.bat | 5 + Res/English/frxrcClass.xml | 247 + Res/English/frxrcDesgn.xml | 851 ++ Res/English/frxrcExports.xml | 278 + Res/English/frxrcInsp.xml | 274 + Res/English/mk.bat | 21 + Res/English/mkall.bat | 5 + Res/Farsi/frxrcClass.xml | 230 + Res/Farsi/frxrcDesgn.xml | 853 ++ Res/Farsi/frxrcExports.xml | 269 + Res/Farsi/frxrcInsp.xml | 275 + Res/Farsi/mk.bat | 21 + Res/Farsi/mkall.bat | 5 + Res/Farsi/readme.txt | 39 + Res/French/Info.txt | 4 + Res/French/frxrcClass.xml | 236 + Res/French/frxrcDesgn.xml | 851 ++ Res/French/frxrcExports.xml | 278 + Res/French/frxrcInsp.xml | 274 + Res/French/mk.bat | 21 + Res/French/mkall.bat | 5 + Res/German/frxrcClass.xml | 230 + Res/German/frxrcDesgn.xml | 848 ++ Res/German/frxrcExports.xml | 269 + Res/German/frxrcInsp.xml | 274 + Res/German/mk.bat | 21 + Res/German/mkall.bat | 5 + Res/Greek/frxrcClass.xml | 230 + Res/Greek/frxrcDesgn.xml | 844 ++ Res/Greek/frxrcExports.xml | 269 + Res/Greek/frxrcInsp.xml | 275 + Res/Greek/mk.bat | 21 + Res/Greek/mkall.bat | 5 + Res/Hungarian/frxrcClass.xml | 230 + Res/Hungarian/frxrcDesgn.xml | 844 ++ Res/Hungarian/frxrcExports.xml | 270 + Res/Hungarian/frxrcInsp.xml | 275 + Res/Hungarian/mk.bat | 21 + Res/Hungarian/mkall.bat | 5 + Res/Indonesian/frxrcClass.xml | 230 + Res/Indonesian/frxrcDesgn.xml | 844 ++ Res/Indonesian/frxrcExports.xml | 269 + Res/Indonesian/frxrcInsp.xml | 274 + Res/Indonesian/mk.bat | 21 + Res/Indonesian/mkall.bat | 5 + Res/Italian/frxrcClass.xml | 230 + Res/Italian/frxrcDesgn.xml | 852 ++ Res/Italian/frxrcExports.xml | 346 + Res/Italian/frxrcExports.xml.mine | 273 + Res/Italian/frxrcExports.xml.r1733 | 213 + Res/Italian/frxrcExports.xml.r1741 | 274 + Res/Italian/frxrcInsp.xml | 274 + Res/Italian/mk.bat | 21 + Res/Italian/mkall.bat | 5 + Res/Japanese/frxrcClass.xml | 230 + Res/Japanese/frxrcDesgn.xml | 844 ++ Res/Japanese/frxrcExports.xml | 269 + Res/Japanese/frxrcInsp.xml | 274 + Res/Japanese/mk.bat | 21 + Res/Japanese/mk_D2009-XE2.bat | 20 + Res/Japanese/mkall.bat | 5 + Res/Latvian/frxrcClass.xml | 230 + Res/Latvian/frxrcDesgn.xml | 844 ++ Res/Latvian/frxrcExports.xml | 269 + Res/Latvian/frxrcInsp.xml | 274 + Res/Latvian/mk.bat | 21 + Res/Latvian/mkall.bat | 5 + Res/Polish/Info.txt | 8 + Res/Polish/frxrcClass.xml | 230 + Res/Polish/frxrcDesgn.xml | 846 ++ Res/Polish/frxrcExports.xml | 269 + Res/Polish/frxrcInsp.xml | 274 + Res/Polish/mk.bat | 21 + Res/Polish/mkall.bat | 5 + Res/Portuguese/frxrcClass.xml | 230 + Res/Portuguese/frxrcDesgn.xml | 848 ++ Res/Portuguese/frxrcExports.xml | 269 + Res/Portuguese/frxrcInsp.xml | 274 + Res/Portuguese/mk.bat | 21 + Res/Portuguese/mkall.bat | 5 + Res/Romanian/frxrcClass.xml | 230 + Res/Romanian/frxrcDesgn.xml | 844 ++ Res/Romanian/frxrcExports.xml | 269 + Res/Romanian/frxrcInsp.xml | 274 + Res/Romanian/mk.bat | 21 + Res/Romanian/mkall.bat | 5 + Res/Russian/frxrcClass.xml | 230 + Res/Russian/frxrcDesgn.xml | 845 ++ Res/Russian/frxrcExports.xml | 313 + Res/Russian/frxrcInsp.xml | 274 + Res/Russian/mk.bat | 21 + Res/Russian/mkall.bat | 5 + Res/Serbian/frxrcClass.xml | 230 + Res/Serbian/frxrcDesgn.xml | 846 ++ Res/Serbian/frxrcExports.xml | 269 + Res/Serbian/frxrcInsp.xml | 274 + Res/Serbian/mk.bat | 21 + Res/Serbian/mkall.bat | 5 + Res/Slovak/Info.txt | 4 + Res/Slovak/frxrcClass.xml | 230 + Res/Slovak/frxrcDesgn.xml | 849 ++ Res/Slovak/frxrcExports.xml | 269 + Res/Slovak/frxrcInsp.xml | 274 + Res/Slovak/mk.bat | 21 + Res/Slovak/mkall.bat | 5 + Res/Slovene/frxrcClass.xml | 230 + Res/Slovene/frxrcDesgn.xml | 844 ++ Res/Slovene/frxrcExports.xml | 269 + Res/Slovene/frxrcInsp.xml | 274 + Res/Slovene/mk.bat | 21 + Res/Slovene/mkall.bat | 5 + Res/Spanish/frxrcClass.xml | 230 + Res/Spanish/frxrcDesgn.xml | 852 ++ Res/Spanish/frxrcExports.xml | 326 + Res/Spanish/frxrcInsp.xml | 274 + Res/Spanish/mk.bat | 21 + Res/Spanish/mkall.bat | 5 + Res/Swedish/frxrcClass.xml | 230 + Res/Swedish/frxrcDesgn.xml | 845 ++ Res/Swedish/frxrcExports.xml | 269 + Res/Swedish/frxrcInsp.xml | 274 + Res/Swedish/mk.bat | 21 + Res/Swedish/mkall.bat | 5 + Res/Swiss/frxrcClass.xml | 230 + Res/Swiss/frxrcDesgn.xml | 844 ++ Res/Swiss/frxrcExports.xml | 269 + Res/Swiss/frxrcInsp.xml | 274 + Res/Swiss/mk.bat | 21 + Res/Swiss/mkall.bat | 5 + Res/Taiwan/frxrcClass.xml | 230 + Res/Taiwan/frxrcDesgn.xml | 844 ++ Res/Taiwan/frxrcExports.xml | 269 + Res/Taiwan/frxrcInsp.xml | 274 + Res/Taiwan/mk.bat | 21 + Res/Taiwan/mkall.bat | 5 + Res/Turkish/frxrcClass.xml | 230 + Res/Turkish/frxrcDesgn.xml | 846 ++ Res/Turkish/frxrcExports.xml | 269 + Res/Turkish/frxrcInsp.xml | 274 + Res/Turkish/mk.bat | 21 + Res/Turkish/mkall.bat | 5 + Res/Ukrainian/frxrcClass.xml | 230 + Res/Ukrainian/frxrcDesgn.xml | 844 ++ Res/Ukrainian/frxrcExports.xml | 269 + Res/Ukrainian/frxrcInsp.xml | 275 + Res/Ukrainian/mk.bat | 21 + Res/Ukrainian/mkall.bat | 5 + Res/install_res.txt | 16 + Source/ADO/FMX.frxADOComponents.pas | 1051 ++ Source/ADO/FMX.frxADOEditor.pas | 157 + Source/ADO/FMX.frxADORTTI.pas | 102 + Source/ADO/FMXfrxADO16.dpk | 46 + Source/ADO/FMXfrxADO16.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO17.dpk | 46 + Source/ADO/FMXfrxADO17.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO18.dpk | 46 + Source/ADO/FMXfrxADO18.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO19.dpk | 46 + Source/ADO/FMXfrxADO19.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO20.dpk | 46 + Source/ADO/FMXfrxADO20.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO21.dpk | 46 + Source/ADO/FMXfrxADO21.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO22.dpk | 46 + Source/ADO/FMXfrxADO22.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO23.dpk | 46 + Source/ADO/FMXfrxADO23.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO24.dpk | 46 + Source/ADO/FMXfrxADO24.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO25.dpk | 46 + Source/ADO/FMXfrxADO25.res | Bin 0 -> 448 bytes Source/ADO/FMXfrxADO26.dpk | 46 + Source/ADO/FMXfrxADO27.dpk | 46 + Source/ADO/FMXfrxADO28.dpk | 46 + Source/ADO/FMXfrxADO29.dpk | 46 + Source/ADO/FMXfrxADOReg.dcr | Bin 0 -> 1864 bytes Source/ADO/FMXfrxADOReg.pas | 33 + Source/ADO/dclFMXfrxADO16.dpk | 39 + Source/ADO/dclFMXfrxADO16.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO17.dpk | 39 + Source/ADO/dclFMXfrxADO17.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO18.dpk | 39 + Source/ADO/dclFMXfrxADO18.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO19.dpk | 39 + Source/ADO/dclFMXfrxADO19.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO20.dpk | 39 + Source/ADO/dclFMXfrxADO20.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO21.dpk | 39 + Source/ADO/dclFMXfrxADO21.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO22.dpk | 39 + Source/ADO/dclFMXfrxADO22.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO23.dpk | 39 + Source/ADO/dclFMXfrxADO23.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO24.dpk | 39 + Source/ADO/dclFMXfrxADO24.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO25.dpk | 39 + Source/ADO/dclFMXfrxADO25.res | Bin 0 -> 448 bytes Source/ADO/dclFMXfrxADO26.dpk | 39 + Source/ADO/dclFMXfrxADO27.dpk | 39 + Source/ADO/dclFMXfrxADO28.dpk | 39 + Source/ADO/dclFMXfrxADO29.dpk | 39 + Source/CDS/FMX.frxCDSComponents.pas | 214 + Source/CDS/FMX.frxCDSEditor.pas | 104 + Source/CDS/FMX.frxCDSRTTI.pas | 78 + Source/CDS/FMXfrxCDS16.dpk | 45 + Source/CDS/FMXfrxCDS16.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS17.dpk | 45 + Source/CDS/FMXfrxCDS17.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS18.dpk | 45 + Source/CDS/FMXfrxCDS18.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS19.dpk | 45 + Source/CDS/FMXfrxCDS19.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS20.dpk | 45 + Source/CDS/FMXfrxCDS20.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS21.dpk | 45 + Source/CDS/FMXfrxCDS21.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS22.dpk | 45 + Source/CDS/FMXfrxCDS22.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS23.dpk | 45 + Source/CDS/FMXfrxCDS23.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS24.dpk | 45 + Source/CDS/FMXfrxCDS24.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS25.dpk | 45 + Source/CDS/FMXfrxCDS25.res | Bin 0 -> 448 bytes Source/CDS/FMXfrxCDS26.dpk | 44 + Source/CDS/FMXfrxCDS27.dpk | 44 + Source/CDS/FMXfrxCDS28.dpk | 44 + Source/CDS/FMXfrxCDS29.dpk | 44 + Source/CDS/FMXfrxCDSReg.dcr | Bin 0 -> 1864 bytes Source/CDS/FMXfrxCDSReg.pas | 34 + Source/CDS/FmxLinuxFrxCDS.dpr | 19 + Source/CDS/dclFMXfrxCDS16.dpk | 39 + Source/CDS/dclFMXfrxCDS16.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS17.dpk | 39 + Source/CDS/dclFMXfrxCDS17.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS18.dpk | 39 + Source/CDS/dclFMXfrxCDS18.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS19.dpk | 39 + Source/CDS/dclFMXfrxCDS19.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS20.dpk | 39 + Source/CDS/dclFMXfrxCDS20.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS21.dpk | 39 + Source/CDS/dclFMXfrxCDS21.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS22.dpk | 39 + Source/CDS/dclFMXfrxCDS22.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS23.dpk | 39 + Source/CDS/dclFMXfrxCDS23.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS24.dpk | 39 + Source/CDS/dclFMXfrxCDS24.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS25.dpk | 39 + Source/CDS/dclFMXfrxCDS25.res | Bin 0 -> 448 bytes Source/CDS/dclFMXfrxCDS26.dpk | 39 + Source/CDS/dclFMXfrxCDS27.dpk | 39 + Source/CDS/dclFMXfrxCDS28.dpk | 39 + Source/CDS/dclFMXfrxCDS29.dpk | 39 + Source/DBX/FMX.frxDBXComponents.pas | 654 + Source/DBX/FMX.frxDBXEditor.pas | 167 + Source/DBX/FMX.frxDBXRTTI.pas | 68 + Source/DBX/FMXfrxDBX16.dpk | 47 + Source/DBX/FMXfrxDBX16.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX17.dpk | 47 + Source/DBX/FMXfrxDBX17.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX18.dpk | 47 + Source/DBX/FMXfrxDBX18.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX19.dpk | 47 + Source/DBX/FMXfrxDBX19.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX20.dpk | 47 + Source/DBX/FMXfrxDBX20.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX21.dpk | 47 + Source/DBX/FMXfrxDBX21.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX22.dpk | 47 + Source/DBX/FMXfrxDBX22.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX23.dpk | 47 + Source/DBX/FMXfrxDBX23.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX24.dpk | 47 + Source/DBX/FMXfrxDBX24.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX25.dpk | 47 + Source/DBX/FMXfrxDBX25.res | Bin 0 -> 448 bytes Source/DBX/FMXfrxDBX26.dpk | 47 + Source/DBX/FMXfrxDBX27.dpk | 47 + Source/DBX/FMXfrxDBX29.dpk | 47 + Source/DBX/FMXfrxDBXReg.dcr | Bin 0 -> 1864 bytes Source/DBX/FMXfrxDBXReg.pas | 33 + Source/DBX/FmxLinuxFrxDBX.dpr | 19 + Source/DBX/dclFMXfrxDBX16.dpk | 39 + Source/DBX/dclFMXfrxDBX16.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX17.dpk | 39 + Source/DBX/dclFMXfrxDBX17.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX18.dpk | 39 + Source/DBX/dclFMXfrxDBX18.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX19.dpk | 39 + Source/DBX/dclFMXfrxDBX19.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX20.dpk | 39 + Source/DBX/dclFMXfrxDBX20.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX21.dpk | 39 + Source/DBX/dclFMXfrxDBX21.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX22.dpk | 39 + Source/DBX/dclFMXfrxDBX22.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX23.dpk | 39 + Source/DBX/dclFMXfrxDBX23.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX24.dpk | 39 + Source/DBX/dclFMXfrxDBX24.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX25.dpk | 39 + Source/DBX/dclFMXfrxDBX25.res | Bin 0 -> 448 bytes Source/DBX/dclFMXfrxDBX26.dpk | 39 + Source/DBX/dclFMXfrxDBX27.dpk | 39 + Source/DBX/dclFMXfrxDBX28.dproj | 114 + Source/DBX/dclFMXfrxDBX29.dpk | 39 + Source/ExportPack/FMX.ExportTTFFont.pas | 803 ++ Source/ExportPack/FMX.TTFHelpers.pas | 68 + Source/ExportPack/FMX.frxCmapTableClass.pas | 275 + Source/ExportPack/FMX.frxCrypto.pas | 1456 +++ Source/ExportPack/FMX.frxExportCSV.fmx | 110 + Source/ExportPack/FMX.frxExportCSV.pas | 593 + Source/ExportPack/FMX.frxExportHTML.fmx | 171 + Source/ExportPack/FMX.frxExportHTML.pas | 1244 ++ Source/ExportPack/FMX.frxExportImage.fmx | 141 + Source/ExportPack/FMX.frxExportImage.pas | 1125 ++ Source/ExportPack/FMX.frxExportMatrix.pas | 1755 +++ Source/ExportPack/FMX.frxExportODF.fmx | 113 + Source/ExportPack/FMX.frxExportODF.pas | 1884 +++ Source/ExportPack/FMX.frxExportPDF.fmx | 351 + Source/ExportPack/FMX.frxExportPDF.pas | 3967 ++++++ Source/ExportPack/FMX.frxExportRTF.fmx | 189 + Source/ExportPack/FMX.frxExportRTF.pas | 991 ++ Source/ExportPack/FMX.frxExportTXT.fmx | 400 + Source/ExportPack/FMX.frxExportTXT.pas | 1541 +++ Source/ExportPack/FMX.frxExportText.fmx | 115 + Source/ExportPack/FMX.frxExportText.pas | 594 + Source/ExportPack/FMX.frxExportXML.fmx | 210 + Source/ExportPack/FMX.frxExportXML.pas | 849 ++ Source/ExportPack/FMX.frxFontHeaderClass.pas | 139 + .../FMX.frxGlyphSubstitutionClass.pas | 164 + Source/ExportPack/FMX.frxGlyphTableClass.pas | 334 + .../FMX.frxHorizontalHeaderClass.pas | 133 + .../FMX.frxHorizontalMetrixClass.pas | 69 + .../FMX.frxIndexToLocationClass.pas | 107 + .../ExportPack/FMX.frxKerningTableClass.pas | 176 + Source/ExportPack/FMX.frxLinuxFonts.pas | 376 + Source/ExportPack/FMX.frxMD5.pas | 550 + .../ExportPack/FMX.frxMaximumProfileClass.pas | 117 + Source/ExportPack/FMX.frxNameTableClass.pas | 147 + .../FMX.frxOS2WindowsMetricsClass.pas | 214 + Source/ExportPack/FMX.frxPostScriptClass.pas | 102 + Source/ExportPack/FMX.frxPreProgramClass.pas | 61 + Source/ExportPack/FMX.frxRC4.pas | 78 + .../ExportPack/FMX.frxTrueTypeCollection.pas | 305 + Source/ExportPack/FMX.frxTrueTypeFont.pas | 1114 ++ Source/ExportPack/FMX.frxTrueTypeTable.pas | 191 + Source/ExportPack/FMX.frxZip.pas | 561 + Source/ExportPack/FMX.frxrcExports.pas | 99 + Source/ExportPack/FMXfrxe16.dpk | 71 + Source/ExportPack/FMXfrxe16.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe16.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe17.dpk | 72 + Source/ExportPack/FMXfrxe17.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe17.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe18.dpk | 71 + Source/ExportPack/FMXfrxe18.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe18.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe19.dpk | 72 + Source/ExportPack/FMXfrxe19.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe20.dpk | 72 + Source/ExportPack/FMXfrxe20.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe20.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe21.dpk | 72 + Source/ExportPack/FMXfrxe21.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe21.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe22.dpk | 72 + Source/ExportPack/FMXfrxe22.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe22.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe23.dpk | 72 + Source/ExportPack/FMXfrxe23.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe23.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe24.dpk | 72 + Source/ExportPack/FMXfrxe24.dproj | 144 + Source/ExportPack/FMXfrxe24.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe24.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe25.dpk | 72 + Source/ExportPack/FMXfrxe25.otares | Bin 0 -> 96 bytes Source/ExportPack/FMXfrxe25.res | Bin 0 -> 448 bytes Source/ExportPack/FMXfrxe26.dpk | 69 + Source/ExportPack/FMXfrxe27.dpk | 70 + Source/ExportPack/FMXfrxe29.dpk | 70 + Source/ExportPack/FMXfrxeReg.pas | 51 + Source/ExportPack/FmxLinuxFrxExp.dpr | 47 + Source/ExportPack/dclFMXfrxe16.dpk | 39 + Source/ExportPack/dclFMXfrxe16.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe17.dpk | 39 + Source/ExportPack/dclFMXfrxe17.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe18.dpk | 39 + Source/ExportPack/dclFMXfrxe18.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe19.dpk | 39 + Source/ExportPack/dclFMXfrxe19.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe20.dpk | 39 + Source/ExportPack/dclFMXfrxe20.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe21.dpk | 39 + Source/ExportPack/dclFMXfrxe21.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe22.dpk | 39 + Source/ExportPack/dclFMXfrxe22.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe23.dpk | 39 + Source/ExportPack/dclFMXfrxe23.res | Bin 0 -> 448 bytes Source/ExportPack/dclFMXfrxe24.dpk | 39 + Source/ExportPack/dclFMXfrxe24.dproj | 120 + Source/ExportPack/dclFMXfrxe24.otares | Bin 0 -> 96 bytes Source/ExportPack/dclFMXfrxe24.res | Bin 0 -> 384 bytes Source/ExportPack/dclFMXfrxe25.dpk | 39 + Source/ExportPack/dclFMXfrxe25.otares | Bin 0 -> 96 bytes Source/ExportPack/dclFMXfrxe25.res | Bin 0 -> 384 bytes Source/ExportPack/dclFMXfrxe26.dpk | 39 + Source/ExportPack/dclFMXfrxe27.dpk | 39 + Source/ExportPack/dclFMXfrxe29.dpk | 39 + Source/ExportPack/fmx.frxImageConverter.pas | 124 + Source/ExportPack/frxe16.otares | Bin 0 -> 96 bytes Source/ExportPack/frxeReg.dcr | Bin 0 -> 31076 bytes Source/FMX.ConverterFR3toFRFMX.pas | 174 + Source/FMX.DelphiZXIngQRCode.pas | 3795 ++++++ Source/FMX.Linux.Old.frxPrinter.pas | 591 + Source/FMX.Linux.frxPrinter.pas | 1324 ++ Source/FMX.Mac.frxPrinter.pas | 529 + Source/FMX.Win.frxPrinter.pas | 901 ++ Source/FMX.frxAbout.fmx | 274 + Source/FMX.frxAbout.pas | 98 + Source/FMX.frxAggregate.pas | 698 ++ Source/FMX.frxBarcod.pas | 2044 ++++ Source/FMX.frxBarcode.pas | 302 + Source/FMX.frxBarcode2DBase.pas | 468 + Source/FMX.frxBarcode2DRTTI.pas | 68 + Source/FMX.frxBarcode2DView.pas | 360 + Source/FMX.frxBarcodeDataMatrix.pas | 1308 ++ Source/FMX.frxBarcodeEditor.fmx | 151 + Source/FMX.frxBarcodeEditor.pas | 307 + Source/FMX.frxBarcodePDF417.pas | 1745 +++ Source/FMX.frxBarcodeProperties.pas | 325 + Source/FMX.frxBarcodeQR.pas | 171 + Source/FMX.frxBarcodeRTTI.pas | 57 + Source/FMX.frxBaseModalForm.pas | 219 + Source/FMX.frxCanvas.Linux.pas | 76 + Source/FMX.frxCanvas.Mac.pas | 166 + Source/FMX.frxChBox.pas | 249 + Source/FMX.frxChBoxRTTI.pas | 53 + Source/FMX.frxChart.pas | 786 ++ Source/FMX.frxChartEditor.fmx | 365 + Source/FMX.frxChartEditor.pas | 828 ++ Source/FMX.frxChartGallery.fmx | 35 + Source/FMX.frxChartGallery.pas | 85 + Source/FMX.frxChartHelpers.pas | 573 + Source/FMX.frxChartRTTI.pas | 116 + Source/FMX.frxClass.pas | 10116 ++++++++++++++++ Source/FMX.frxClass.res | Bin 0 -> 1248 bytes Source/FMX.frxClassRTTI.pas | 611 + Source/FMX.frxCodeUtils.pas | 271 + Source/FMX.frxConnWizard.fmx | 249 + Source/FMX.frxConnWizard.pas | 551 + Source/FMX.frxConnWizard.res | Bin 0 -> 1312 bytes Source/FMX.frxCross.pas | 4377 +++++++ Source/FMX.frxCrossEditor.fmx | 342 + Source/FMX.frxCrossEditor.pas | 1029 ++ Source/FMX.frxCrossRTTI.pas | 140 + Source/FMX.frxCtrls.pas | 435 + Source/FMX.frxCustomDB.pas | 833 ++ Source/FMX.frxCustomDBEditor.pas | 355 + Source/FMX.frxCustomDBRTTI.pas | 182 + Source/FMX.frxCustomEditors.pas | 174 + Source/FMX.frxDBSet.pas | 473 + Source/FMX.frxDCtrl.pas | 1635 +++ Source/FMX.frxDCtrlRTTI.pas | 130 + Source/FMX.frxDMPClass.pas | 491 + Source/FMX.frxDataTree.fmx | 131 + Source/FMX.frxDataTree.pas | 765 ++ Source/FMX.frxDesgn.fmx | 1811 +++ Source/FMX.frxDesgn.pas | 5696 +++++++++ Source/FMX.frxDesgn.res | Bin 0 -> 53948 bytes Source/FMX.frxDesgnCtrls.pas | 1298 ++ Source/FMX.frxDesgnEditors.pas | 1557 +++ Source/FMX.frxDesgnWorkspace.pas | 3102 +++++ Source/FMX.frxDesgnWorkspace.res | Bin 0 -> 676 bytes Source/FMX.frxDesgnWorkspace1.pas | 939 ++ Source/FMX.frxDesgn_D23.fmx | 1800 +++ Source/FMX.frxDialogForm.fmx | 10 + Source/FMX.frxDialogForm.pas | 98 + Source/FMX.frxDsgnIntf.pas | 1789 +++ Source/FMX.frxEditAliases.fmx | 69 + Source/FMX.frxEditAliases.pas | 404 + Source/FMX.frxEditDataBand.fmx | 65 + Source/FMX.frxEditDataBand.pas | 171 + Source/FMX.frxEditExpr.fmx | 75 + Source/FMX.frxEditExpr.pas | 147 + Source/FMX.frxEditFormat.fmx | 93 + Source/FMX.frxEditFormat.pas | 223 + Source/FMX.frxEditFrame.fmx | 232 + Source/FMX.frxEditFrame.pas | 224 + Source/FMX.frxEditGroup.fmx | 113 + Source/FMX.frxEditGroup.pas | 199 + Source/FMX.frxEditHighlight.fmx | 98 + Source/FMX.frxEditHighlight.pas | 174 + Source/FMX.frxEditMD.fmx | 94 + Source/FMX.frxEditMD.pas | 165 + Source/FMX.frxEditMemo.fmx | 98 + Source/FMX.frxEditMemo.pas | 313 + Source/FMX.frxEditOptions.fmx | 274 + Source/FMX.frxEditOptions.pas | 266 + Source/FMX.frxEditPage.fmx | 367 + Source/FMX.frxEditPage.pas | 375 + Source/FMX.frxEditPicture.fmx | 78 + Source/FMX.frxEditPicture.pas | 194 + Source/FMX.frxEditQueryParams.fmx | 65 + Source/FMX.frxEditQueryParams.pas | 265 + Source/FMX.frxEditReport.fmx | 350 + Source/FMX.frxEditReport.pas | 348 + Source/FMX.frxEditReportData.fmx | 38 + Source/FMX.frxEditReportData.pas | 216 + Source/FMX.frxEditSQL.fmx | 49 + Source/FMX.frxEditSQL.pas | 220 + Source/FMX.frxEditStrings.fmx | 41 + Source/FMX.frxEditStrings.pas | 93 + Source/FMX.frxEditStyle.fmx | 138 + Source/FMX.frxEditStyle.pas | 326 + Source/FMX.frxEditSysMemo.fmx | 178 + Source/FMX.frxEditSysMemo.pas | 319 + Source/FMX.frxEditTabOrder.fmx | 58 + Source/FMX.frxEditTabOrder.pas | 166 + Source/FMX.frxEditVar.fmx | 189 + Source/FMX.frxEditVar.pas | 554 + Source/FMX.frxEngine.pas | 2810 +++++ Source/FMX.frxEvaluateForm.fmx | 57 + Source/FMX.frxEvaluateForm.pas | 109 + Source/FMX.frxFMX.pas | 2970 +++++ Source/FMX.frxFontForm.fmx | 160 + Source/FMX.frxFontForm.pas | 233 + Source/FMX.frxGZip.pas | 257 + Source/FMX.frxGradient.pas | 333 + Source/FMX.frxGradientRTTI.pas | 53 + Source/FMX.frxGraphicUtils.pas | 1704 +++ Source/FMX.frxInheritError.fmx | 50 + Source/FMX.frxInheritError.pas | 60 + Source/FMX.frxInsp.fmx | 485 + Source/FMX.frxInsp.pas | 1151 ++ Source/FMX.frxInsp_D23.fmx | 365 + Source/FMX.frxMD5.pas | 550 + Source/FMX.frxNewItem.pas | 170 + Source/FMX.frxPassw.pas | 59 + Source/FMX.frxPictureCache.pas | 357 + Source/FMX.frxPopupForm.fmx | 15 + Source/FMX.frxPopupForm.pas | 49 + Source/FMX.frxPreview.fmx | 352 + Source/FMX.frxPreview.pas | 2791 +++++ Source/FMX.frxPreview.res | Bin 0 -> 63296 bytes Source/FMX.frxPreviewPageSettings.fmx | 235 + Source/FMX.frxPreviewPageSettings.pas | 275 + Source/FMX.frxPreviewPages.pas | 2742 +++++ Source/FMX.frxPrintDialog.fmx | 257 + Source/FMX.frxPrintDialog.pas | 365 + Source/FMX.frxPrinter.pas | 569 + Source/FMX.frxProgress.fmx | 43 + Source/FMX.frxProgress.pas | 134 + Source/FMX.frxReportTree.fmx | 33 + Source/FMX.frxReportTree.pas | 251 + Source/FMX.frxRes.pas | 375 + Source/FMX.frxSearchDialog.fmx | 104 + Source/FMX.frxSearchDialog.pas | 103 + Source/FMX.frxStdWizard.pas | 1095 ++ Source/FMX.frxSynMemo.pas | 2143 ++++ Source/FMX.frxUnicodeUtils.pas | 431 + Source/FMX.frxUtils.pas | 937 ++ Source/FMX.frxVariables.pas | 407 + Source/FMX.frxWatchForm.fmx | 52 + Source/FMX.frxWatchForm.pas | 196 + Source/FMX.frxXML.pas | 983 ++ Source/FMX.frxXMLSerializer.pas | 881 ++ Source/FMX.frxrcClass.pas | 100 + Source/FMX.frxrcDesgn.pas | 281 + Source/FMX.frxrcInsp.pas | 860 ++ Source/FMXfrx16.dpk | 127 + Source/FMXfrx16.otares | Bin 0 -> 96 bytes Source/FMXfrx16.res | Bin 0 -> 448 bytes Source/FMXfrx17.dpk | 130 + Source/FMXfrx17.otares | Bin 0 -> 96 bytes Source/FMXfrx17.res | Bin 0 -> 448 bytes Source/FMXfrx18.dpk | 130 + Source/FMXfrx18.otares | Bin 0 -> 96 bytes Source/FMXfrx18.res | Bin 0 -> 448 bytes Source/FMXfrx19.dpk | 129 + Source/FMXfrx19.otares | Bin 0 -> 96 bytes Source/FMXfrx19.res | Bin 0 -> 448 bytes Source/FMXfrx20.dpk | 129 + Source/FMXfrx20.otares | Bin 0 -> 96 bytes Source/FMXfrx20.res | Bin 0 -> 448 bytes Source/FMXfrx21.dpk | 129 + Source/FMXfrx21.otares | Bin 0 -> 96 bytes Source/FMXfrx21.res | Bin 0 -> 448 bytes Source/FMXfrx22.dpk | 129 + Source/FMXfrx22.otares | Bin 0 -> 96 bytes Source/FMXfrx22.res | Bin 0 -> 448 bytes Source/FMXfrx23.dpk | 129 + Source/FMXfrx23.otares | Bin 0 -> 96 bytes Source/FMXfrx23.res | Bin 0 -> 448 bytes Source/FMXfrx24.dpk | 129 + Source/FMXfrx24.dproj | 199 + Source/FMXfrx24.otares | Bin 0 -> 96 bytes Source/FMXfrx24.res | Bin 0 -> 448 bytes Source/FMXfrx25.dpk | 129 + Source/FMXfrx25.otares | Bin 0 -> 96 bytes Source/FMXfrx25.res | Bin 0 -> 448 bytes Source/FMXfrx26.dpk | 127 + Source/FMXfrx27.dpk | 134 + Source/FMXfrx29.dpk | 134 + Source/FMXfrxDB16.dpk | 51 + Source/FMXfrxDB16.otares | Bin 0 -> 96 bytes Source/FMXfrxDB16.res | Bin 0 -> 448 bytes Source/FMXfrxDB17.dpk | 50 + Source/FMXfrxDB17.otares | Bin 0 -> 96 bytes Source/FMXfrxDB17.res | Bin 0 -> 448 bytes Source/FMXfrxDB18.dpk | 51 + Source/FMXfrxDB18.otares | Bin 0 -> 96 bytes Source/FMXfrxDB18.res | Bin 0 -> 448 bytes Source/FMXfrxDB19.dpk | 51 + Source/FMXfrxDB19.otares | Bin 0 -> 96 bytes Source/FMXfrxDB19.res | Bin 0 -> 448 bytes Source/FMXfrxDB20.dpk | 51 + Source/FMXfrxDB20.otares | Bin 0 -> 96 bytes Source/FMXfrxDB20.res | Bin 0 -> 448 bytes Source/FMXfrxDB21.dpk | 51 + Source/FMXfrxDB21.otares | Bin 0 -> 96 bytes Source/FMXfrxDB21.res | Bin 0 -> 448 bytes Source/FMXfrxDB22.dpk | 51 + Source/FMXfrxDB22.otares | Bin 0 -> 96 bytes Source/FMXfrxDB22.res | Bin 0 -> 448 bytes Source/FMXfrxDB23.dpk | 51 + Source/FMXfrxDB23.otares | Bin 0 -> 96 bytes Source/FMXfrxDB23.res | Bin 0 -> 448 bytes Source/FMXfrxDB24.dpk | 51 + Source/FMXfrxDB24.otares | Bin 0 -> 96 bytes Source/FMXfrxDB24.res | Bin 0 -> 448 bytes Source/FMXfrxDB25.dpk | 51 + Source/FMXfrxDB25.otares | Bin 0 -> 96 bytes Source/FMXfrxDB25.res | Bin 0 -> 448 bytes Source/FMXfrxDB26.dpk | 49 + Source/FMXfrxDB27.dpk | 49 + Source/FMXfrxDB29.dpk | 49 + Source/FMXfrxReg.pas | 148 + Source/FMXfrxRegCtrls.pas | 37 + Source/FMXfrxRegDB.pas | 38 + Source/FMXfrxRegTee.pas | 37 + Source/FMXfrxTee16.dpk | 50 + Source/FMXfrxTee16.otares | Bin 0 -> 96 bytes Source/FMXfrxTee16.res | Bin 0 -> 448 bytes Source/FMXfrxTee17.dpk | 49 + Source/FMXfrxTee17.otares | Bin 0 -> 96 bytes Source/FMXfrxTee17.res | Bin 0 -> 448 bytes Source/FMXfrxTee18.dpk | 49 + Source/FMXfrxTee18.otares | Bin 0 -> 96 bytes Source/FMXfrxTee18.res | Bin 0 -> 448 bytes Source/FMXfrxTee19.dpk | 50 + Source/FMXfrxTee19.otares | Bin 0 -> 96 bytes Source/FMXfrxTee19.res | Bin 0 -> 448 bytes Source/FMXfrxTee20.dpk | 49 + Source/FMXfrxTee20.otares | Bin 0 -> 96 bytes Source/FMXfrxTee20.res | Bin 0 -> 448 bytes Source/FMXfrxTee21.dpk | 49 + Source/FMXfrxTee21.otares | Bin 0 -> 96 bytes Source/FMXfrxTee21.res | Bin 0 -> 448 bytes Source/FMXfrxTee22.dpk | 49 + Source/FMXfrxTee22.otares | Bin 0 -> 96 bytes Source/FMXfrxTee22.res | Bin 0 -> 448 bytes Source/FMXfrxTee23.dpk | 49 + Source/FMXfrxTee23.otares | Bin 0 -> 96 bytes Source/FMXfrxTee23.res | Bin 0 -> 448 bytes Source/FMXfrxTee24.dpk | 49 + Source/FMXfrxTee24.dproj | 126 + Source/FMXfrxTee24.otares | Bin 0 -> 96 bytes Source/FMXfrxTee24.res | Bin 0 -> 384 bytes Source/FMXfrxTee25.dpk | 49 + Source/FMXfrxTee25.otares | Bin 0 -> 96 bytes Source/FMXfrxTee25.res | Bin 0 -> 384 bytes Source/FMXfrxTee26.dpk | 49 + Source/FMXfrxTee27.dpk | 49 + Source/FMXfrxTee28.dproj | 120 + Source/FMXfrxTee29.dpk | 49 + Source/FMXfrxe19.otares | Bin 0 -> 96 bytes Source/FireDAC/Example/ADQuery.fr3 | 14 + Source/FireDAC/Example/ADTable.fr3 | 14 + Source/FireDAC/Example/Readme.txt | 5 + Source/FireDAC/FMX.frxFDComponents.pas | 1325 ++ Source/FireDAC/FMX.frxFDComponents.res | Bin 0 -> 440 bytes Source/FireDAC/FMX.frxFDEditor.pas | 375 + Source/FireDAC/FMX.frxFDRTTI.pas | 161 + Source/FireDAC/FMX.frxFDReg.pas | 34 + Source/FireDAC/FMXfrxFD18.dpk | 52 + Source/FireDAC/FMXfrxFD18.otares | Bin 0 -> 96 bytes Source/FireDAC/FMXfrxFD18.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD19.dpk | 50 + Source/FireDAC/FMXfrxFD19.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD20.dpk | 50 + Source/FireDAC/FMXfrxFD20.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD21.dpk | 50 + Source/FireDAC/FMXfrxFD21.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD22.dpk | 50 + Source/FireDAC/FMXfrxFD22.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD23.dpk | 50 + Source/FireDAC/FMXfrxFD23.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD24.dpk | 50 + Source/FireDAC/FMXfrxFD24.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD25.dpk | 50 + Source/FireDAC/FMXfrxFD25.res | Bin 0 -> 448 bytes Source/FireDAC/FMXfrxFD26.dpk | 49 + Source/FireDAC/FMXfrxFD27.dpk | 49 + Source/FireDAC/FMXfrxFD29.dpk | 49 + Source/FireDAC/FMXfrxFDReg.dcr | Bin 0 -> 1736 bytes Source/FireDAC/FmxLinuxFrxFD.dpr | 19 + Source/FireDAC/dclFMXfrxFD18.dpk | 43 + Source/FireDAC/dclFMXfrxFD18.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD19.dpk | 43 + Source/FireDAC/dclFMXfrxFD19.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD20.dpk | 43 + Source/FireDAC/dclFMXfrxFD20.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD21.dpk | 43 + Source/FireDAC/dclFMXfrxFD21.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD22.dpk | 43 + Source/FireDAC/dclFMXfrxFD22.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD23.dpk | 43 + Source/FireDAC/dclFMXfrxFD23.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD24.dpk | 43 + Source/FireDAC/dclFMXfrxFD24.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD25.dpk | 43 + Source/FireDAC/dclFMXfrxFD25.res | Bin 0 -> 448 bytes Source/FireDAC/dclFMXfrxFD26.dpk | 42 + Source/FireDAC/dclFMXfrxFD27.dpk | 42 + Source/FireDAC/dclFMXfrxFD29.dpk | 42 + Source/FireDAC/readme.txt | 56 + Source/FmxLinuxFrxLang.dpr | 20 + Source/FmxLinuxFrxMain.dpr | 131 + Source/FmxLinuxFrxTee.dpr | 21 + Source/IBX/FMX.frxIBXComponents.pas | 538 + Source/IBX/FMX.frxIBXEditor.pas | 167 + Source/IBX/FMX.frxIBXRTTI.pas | 98 + Source/IBX/FMXfrxIBX16.dpk | 47 + Source/IBX/FMXfrxIBX16.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX17.dpk | 47 + Source/IBX/FMXfrxIBX17.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX18.dpk | 47 + Source/IBX/FMXfrxIBX18.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX19.dpk | 47 + Source/IBX/FMXfrxIBX19.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX20.dpk | 47 + Source/IBX/FMXfrxIBX20.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX21.dpk | 47 + Source/IBX/FMXfrxIBX21.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX22.dpk | 47 + Source/IBX/FMXfrxIBX22.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX23.dpk | 47 + Source/IBX/FMXfrxIBX23.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX24.dpk | 47 + Source/IBX/FMXfrxIBX24.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX25.dpk | 47 + Source/IBX/FMXfrxIBX25.res | Bin 0 -> 448 bytes Source/IBX/FMXfrxIBX26.dpk | 47 + Source/IBX/FMXfrxIBX27.dpk | 47 + Source/IBX/FMXfrxIBX28.dpk | 47 + Source/IBX/FMXfrxIBXReg.dcr | Bin 0 -> 1864 bytes Source/IBX/FMXfrxIBXReg.pas | 34 + Source/IBX/FmxLinuxFrxIBX.dpr | 20 + Source/IBX/dclFMXfrxIBX16.dpk | 40 + Source/IBX/dclFMXfrxIBX16.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX17.dpk | 40 + Source/IBX/dclFMXfrxIBX17.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX18.dpk | 40 + Source/IBX/dclFMXfrxIBX18.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX19.dpk | 40 + Source/IBX/dclFMXfrxIBX19.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX20.dpk | 40 + Source/IBX/dclFMXfrxIBX20.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX21.dpk | 40 + Source/IBX/dclFMXfrxIBX21.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX22.dpk | 40 + Source/IBX/dclFMXfrxIBX22.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX23.dpk | 40 + Source/IBX/dclFMXfrxIBX23.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX24.dpk | 40 + Source/IBX/dclFMXfrxIBX24.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX25.dpk | 40 + Source/IBX/dclFMXfrxIBX25.res | Bin 0 -> 448 bytes Source/IBX/dclFMXfrxIBX26.dpk | 40 + Source/IBX/dclFMXfrxIBX27.dpk | 40 + Source/IBX/dclFMXfrxIBX28.dpk | 40 + Source/IBX/frxIBXReg.res | Bin 0 -> 1864 bytes Source/dclFMXfrx16.dpk | 39 + Source/dclFMXfrx16.res | Bin 0 -> 448 bytes Source/dclFMXfrx17.dpk | 39 + Source/dclFMXfrx17.res | Bin 0 -> 448 bytes Source/dclFMXfrx18.dpk | 39 + Source/dclFMXfrx18.res | Bin 0 -> 448 bytes Source/dclFMXfrx19.dpk | 39 + Source/dclFMXfrx19.res | Bin 0 -> 448 bytes Source/dclFMXfrx20.dpk | 39 + Source/dclFMXfrx20.res | Bin 0 -> 448 bytes Source/dclFMXfrx21.dpk | 39 + Source/dclFMXfrx21.res | Bin 0 -> 448 bytes Source/dclFMXfrx22.dpk | 39 + Source/dclFMXfrx22.res | Bin 0 -> 448 bytes Source/dclFMXfrx23.dpk | 39 + Source/dclFMXfrx23.res | Bin 0 -> 448 bytes Source/dclFMXfrx24.dpk | 39 + Source/dclFMXfrx24.res | Bin 0 -> 448 bytes Source/dclFMXfrx25.dpk | 39 + Source/dclFMXfrx25.otares | Bin 0 -> 96 bytes Source/dclFMXfrx25.res | Bin 0 -> 448 bytes Source/dclFMXfrx26.dpk | 39 + Source/dclFMXfrx27.dpk | 39 + Source/dclFMXfrx29.dpk | 39 + Source/dclFMXfrxDB16.dpk | 40 + Source/dclFMXfrxDB16.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB17.dpk | 40 + Source/dclFMXfrxDB17.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB18.dpk | 40 + Source/dclFMXfrxDB18.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB19.dpk | 40 + Source/dclFMXfrxDB19.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB20.dpk | 40 + Source/dclFMXfrxDB20.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB21.dpk | 40 + Source/dclFMXfrxDB21.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB22.dpk | 40 + Source/dclFMXfrxDB22.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB23.dpk | 40 + Source/dclFMXfrxDB23.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB24.dpk | 40 + Source/dclFMXfrxDB24.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB25.dpk | 40 + Source/dclFMXfrxDB25.otares | Bin 0 -> 96 bytes Source/dclFMXfrxDB25.res | Bin 0 -> 448 bytes Source/dclFMXfrxDB26.dpk | 40 + Source/dclFMXfrxDB27.dpk | 40 + Source/dclFMXfrxDB29.dpk | 40 + Source/dclFMXfrxTee16.dpk | 39 + Source/dclFMXfrxTee16.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee17.dpk | 39 + Source/dclFMXfrxTee17.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee18.dpk | 39 + Source/dclFMXfrxTee18.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee19.dpk | 39 + Source/dclFMXfrxTee19.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee20.dpk | 39 + Source/dclFMXfrxTee20.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee21.dpk | 39 + Source/dclFMXfrxTee21.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee22.dpk | 39 + Source/dclFMXfrxTee22.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee23.dpk | 39 + Source/dclFMXfrxTee23.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee24.dpk | 39 + Source/dclFMXfrxTee24.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee25.dpk | 39 + Source/dclFMXfrxTee25.otares | Bin 0 -> 96 bytes Source/dclFMXfrxTee25.res | Bin 0 -> 448 bytes Source/dclFMXfrxTee26.dpk | 39 + Source/dclFMXfrxTee27.dpk | 39 + Source/dclFMXfrxTee29.dpk | 39 + Source/fmx.inc | 12 + Source/frx.inc | 704 ++ Source/frxBarcodeEditor.fmx | 183 + Source/frxEditSQL.inc | 18 + Source/frxFMX_PlatformsAttribute.inc | 12 + Source/frxReg.dcr | Bin 0 -> 54516 bytes Source/frxVersion.inc | 1 + changes.txt | 204 + changes_rus.txt | 202 + comp_developers.txt | 18 + comp_developers_rus.txt | 16 + compatibility.txt | 4 + compatibility_rus.txt | 1 + file_id.diz | 10 + frx_icon.ico | Bin 0 -> 12862 bytes license.rtf | 117 + license_rus.rtf | 78 + readme.md | 141 + readme.rtf | Bin 0 -> 6611 bytes readme_rus.rtf | 156 + teechart.txt | 13 + teechart_rus.txt | 10 + 4907 files changed, 655452 insertions(+) create mode 100644 Demos/Main/1.fr3 create mode 100644 Demos/Main/10.FR3 create mode 100644 Demos/Main/100.fr3 create mode 100644 Demos/Main/101.fr3 create mode 100644 Demos/Main/102.fr3 create mode 100644 Demos/Main/103.fr3 create mode 100644 Demos/Main/104.fr3 create mode 100644 Demos/Main/105.fr3 create mode 100644 Demos/Main/11.FR3 create mode 100644 Demos/Main/12.FR3 create mode 100644 Demos/Main/13.fr3 create mode 100644 Demos/Main/2.fr3 create mode 100644 Demos/Main/21.FR3 create mode 100644 Demos/Main/22.FR3 create mode 100644 Demos/Main/23.FR3 create mode 100644 Demos/Main/24.FR3 create mode 100644 Demos/Main/25.fr3 create mode 100644 Demos/Main/3.fr3 create mode 100644 Demos/Main/31.fr3 create mode 100644 Demos/Main/32.fr3 create mode 100644 Demos/Main/33.FR3 create mode 100644 Demos/Main/34.FR3 create mode 100644 Demos/Main/35.fr3 create mode 100644 Demos/Main/36.fr3 create mode 100644 Demos/Main/4.FR3 create mode 100644 Demos/Main/41.FR3 create mode 100644 Demos/Main/42.FR3 create mode 100644 Demos/Main/43.FR3 create mode 100644 Demos/Main/5.FR3 create mode 100644 Demos/Main/6.FR3 create mode 100644 Demos/Main/60.fr3 create mode 100644 Demos/Main/61.FR3 create mode 100644 Demos/Main/62.FR3 create mode 100644 Demos/Main/63.FR3 create mode 100644 Demos/Main/64.FR3 create mode 100644 Demos/Main/65.FR3 create mode 100644 Demos/Main/66.FR3 create mode 100644 Demos/Main/67.FR3 create mode 100644 Demos/Main/68.FR3 create mode 100644 Demos/Main/69.FR3 create mode 100644 Demos/Main/7.FR3 create mode 100644 Demos/Main/70.fr3 create mode 100644 Demos/Main/71.fr3 create mode 100644 Demos/Main/72.fr3 create mode 100644 Demos/Main/73.fr3 create mode 100644 Demos/Main/8.FR3 create mode 100644 Demos/Main/80.fr3 create mode 100644 Demos/Main/81.fr3 create mode 100644 Demos/Main/82.fr3 create mode 100644 Demos/Main/9.FR3 create mode 100644 Demos/Main/93.fr3 create mode 100644 Demos/Main/94.fr3 create mode 100644 Demos/Main/95.fr3 create mode 100644 Demos/Main/96.fr3 create mode 100644 Demos/Main/97.fr3 create mode 100644 Demos/Main/98.fr3 create mode 100644 Demos/Main/99.fr3 create mode 100644 Demos/Main/Data/biolife.xml create mode 100644 Demos/Main/Data/country.xml create mode 100644 Demos/Main/Data/crosstest.xml create mode 100644 Demos/Main/Data/currency_quoting.xml create mode 100644 Demos/Main/Data/customer.xml create mode 100644 Demos/Main/Data/customer_query.xml create mode 100644 Demos/Main/Data/employee.xml create mode 100644 Demos/Main/Data/items.xml create mode 100644 Demos/Main/Data/nextcust.xml create mode 100644 Demos/Main/Data/nextitem.xml create mode 100644 Demos/Main/Data/nextord.xml create mode 100644 Demos/Main/Data/orders.xml create mode 100644 Demos/Main/Data/parts.xml create mode 100644 Demos/Main/Data/unicode.xml create mode 100644 Demos/Main/Data/vendors.xml create mode 100644 Demos/Main/Project1.deployproj create mode 100644 Demos/Main/Project1.dpr create mode 100644 Demos/Main/Project1.dproj create mode 100644 Demos/Main/Project1.res create mode 100644 Demos/Main/Unit2.fmx create mode 100644 Demos/Main/Unit2.pas create mode 100644 Demos/Main/Unit2.vlb create mode 100644 Demos/Main/Unit3.dfm create mode 100644 Demos/Main/Unit3.pas create mode 100644 Demos/Main/awards.png create mode 100644 FastReports.url create mode 100644 FastReportsT.url create mode 100644 FastScript/FMX.BaseTypeAliases.pas create mode 100644 FastScript/FMX.FormTypeAliases.pas create mode 100644 FastScript/FMX.fs_iadortti.pas create mode 100644 FastScript/FMX.fs_ibasic.pas create mode 100644 FastScript/FMX.fs_ichartrtti.pas create mode 100644 FastScript/FMX.fs_iclassesrtti.pas create mode 100644 FastScript/FMX.fs_iconst.pas create mode 100644 FastScript/FMX.fs_icpp.pas create mode 100644 FastScript/FMX.fs_idbrtti.pas create mode 100644 FastScript/FMX.fs_idialogsrtti.pas create mode 100644 FastScript/FMX.fs_idisp.pas create mode 100644 FastScript/FMX.fs_ievents.pas create mode 100644 FastScript/FMX.fs_iexpression.pas create mode 100644 FastScript/FMX.fs_iextctrlsrtti.pas create mode 100644 FastScript/FMX.fs_iformsrtti.pas create mode 100644 FastScript/FMX.fs_igraphicsrtti.pas create mode 100644 FastScript/FMX.fs_iibxrtti.pas create mode 100644 FastScript/FMX.fs_iilparser.pas create mode 100644 FastScript/FMX.fs_iinirtti.pas create mode 100644 FastScript/FMX.fs_iinterpreter.pas create mode 100644 FastScript/FMX.fs_ijs.pas create mode 100644 FastScript/FMX.fs_imenusrtti.pas create mode 100644 FastScript/FMX.fs_iparser.pas create mode 100644 FastScript/FMX.fs_ipascal.pas create mode 100644 FastScript/FMX.fs_isysrtti.pas create mode 100644 FastScript/FMX.fs_itools.pas create mode 100644 FastScript/FMX.fs_lazarus.pas create mode 100644 FastScript/FMX.fs_synmemo.fmx create mode 100644 FastScript/FMX.fs_synmemo.pas create mode 100644 FastScript/FMX.fs_tree.pas create mode 100644 FastScript/FMX.fs_xml.pas create mode 100644 FastScript/FMX/FMX.BaseTypeAliases.pas create mode 100644 FastScript/FMX/FMX.FormTypeAliases.pas create mode 100644 FastScript/FMX/FMX.fs_iadortti.pas create mode 100644 FastScript/FMX/FMX.fs_ibasic.pas create mode 100644 FastScript/FMX/FMX.fs_ichartrtti.pas create mode 100644 FastScript/FMX/FMX.fs_iclassesrtti.pas create mode 100644 FastScript/FMX/FMX.fs_iconst.pas create mode 100644 FastScript/FMX/FMX.fs_icpp.pas create mode 100644 FastScript/FMX/FMX.fs_idbrtti.pas create mode 100644 FastScript/FMX/FMX.fs_idialogsrtti.pas create mode 100644 FastScript/FMX/FMX.fs_idisp.pas create mode 100644 FastScript/FMX/FMX.fs_ievents.pas create mode 100644 FastScript/FMX/FMX.fs_iexpression.pas create mode 100644 FastScript/FMX/FMX.fs_iextctrlsrtti.pas create mode 100644 FastScript/FMX/FMX.fs_iformsrtti.pas create mode 100644 FastScript/FMX/FMX.fs_igraphicsrtti.pas create mode 100644 FastScript/FMX/FMX.fs_iibxrtti.pas create mode 100644 FastScript/FMX/FMX.fs_iilparser.pas create mode 100644 FastScript/FMX/FMX.fs_iinirtti.pas create mode 100644 FastScript/FMX/FMX.fs_iinterpreter.pas create mode 100644 FastScript/FMX/FMX.fs_ijs.pas create mode 100644 FastScript/FMX/FMX.fs_imenusrtti.pas create mode 100644 FastScript/FMX/FMX.fs_iparser.pas create mode 100644 FastScript/FMX/FMX.fs_ipascal.pas create mode 100644 FastScript/FMX/FMX.fs_isysrtti.pas create mode 100644 FastScript/FMX/FMX.fs_itools.pas create mode 100644 FastScript/FMX/FMX.fs_lazarus.pas create mode 100644 FastScript/FMX/FMX.fs_synmemo.fmx create mode 100644 FastScript/FMX/FMX.fs_synmemo.pas create mode 100644 FastScript/FMX/FMX.fs_tree.pas create mode 100644 FastScript/FMX/FMX.fs_xml.pas create mode 100644 FastScript/FMX/FMXfs16.dpk create mode 100644 FastScript/FMX/FMXfs16.res create mode 100644 FastScript/FMX/FMXfs17.dpk create mode 100644 FastScript/FMX/FMXfs17.res create mode 100644 FastScript/FMX/FMXfs18.dpk create mode 100644 FastScript/FMX/FMXfs18.otares create mode 100644 FastScript/FMX/FMXfs18.res create mode 100644 FastScript/FMX/FMXfs19.dpk create mode 100644 FastScript/FMX/FMXfs19.otares create mode 100644 FastScript/FMX/FMXfs19.res create mode 100644 FastScript/FMX/FMXfs20.dpk create mode 100644 FastScript/FMX/FMXfs20.otares create mode 100644 FastScript/FMX/FMXfs20.res create mode 100644 FastScript/FMX/FMXfs21.dpk create mode 100644 FastScript/FMX/FMXfs21.otares create mode 100644 FastScript/FMX/FMXfs21.res create mode 100644 FastScript/FMX/FMXfs22.dpk create mode 100644 FastScript/FMX/FMXfs22.otares create mode 100644 FastScript/FMX/FMXfs22.res create mode 100644 FastScript/FMX/FMXfs23.dpk create mode 100644 FastScript/FMX/FMXfs23.otares create mode 100644 FastScript/FMX/FMXfs23.res create mode 100644 FastScript/FMX/FMXfs24.dpk create mode 100644 FastScript/FMX/FMXfs24.otares create mode 100644 FastScript/FMX/FMXfs24.res create mode 100644 FastScript/FMX/FMXfs25.dpk create mode 100644 FastScript/FMX/FMXfs25.otares create mode 100644 FastScript/FMX/FMXfs25.res create mode 100644 FastScript/FMX/FMXfs26.dpk create mode 100644 FastScript/FMX/FMXfs27.dpk create mode 100644 FastScript/FMX/FMXfs28.dpk create mode 100644 FastScript/FMX/FMXfs29.dpk create mode 100644 FastScript/FMX/FMXfsADO16.dpk create mode 100644 FastScript/FMX/FMXfsADO16.res create mode 100644 FastScript/FMX/FMXfsADO17.dpk create mode 100644 FastScript/FMX/FMXfsADO17.res create mode 100644 FastScript/FMX/FMXfsADO18.dpk create mode 100644 FastScript/FMX/FMXfsADO18.res create mode 100644 FastScript/FMX/FMXfsADO19.dpk create mode 100644 FastScript/FMX/FMXfsADO19.res create mode 100644 FastScript/FMX/FMXfsADO20.dpk create mode 100644 FastScript/FMX/FMXfsADO20.res create mode 100644 FastScript/FMX/FMXfsADO21.dpk create mode 100644 FastScript/FMX/FMXfsADO21.res create mode 100644 FastScript/FMX/FMXfsADO22.dpk create mode 100644 FastScript/FMX/FMXfsADO22.res create mode 100644 FastScript/FMX/FMXfsADO23.dpk create mode 100644 FastScript/FMX/FMXfsADO23.res create mode 100644 FastScript/FMX/FMXfsADO24.dpk create mode 100644 FastScript/FMX/FMXfsADO24.res create mode 100644 FastScript/FMX/FMXfsADO25.dpk create mode 100644 FastScript/FMX/FMXfsADO25.res create mode 100644 FastScript/FMX/FMXfsADO26.dpk create mode 100644 FastScript/FMX/FMXfsADO27.dpk create mode 100644 FastScript/FMX/FMXfsADO28.dpk create mode 100644 FastScript/FMX/FMXfsADO29.dpk create mode 100644 FastScript/FMX/FMXfsDB16.dpk create mode 100644 FastScript/FMX/FMXfsDB16.res create mode 100644 FastScript/FMX/FMXfsDB17.dpk create mode 100644 FastScript/FMX/FMXfsDB17.res create mode 100644 FastScript/FMX/FMXfsDB18.dpk create mode 100644 FastScript/FMX/FMXfsDB18.otares create mode 100644 FastScript/FMX/FMXfsDB18.res create mode 100644 FastScript/FMX/FMXfsDB19.dpk create mode 100644 FastScript/FMX/FMXfsDB19.otares create mode 100644 FastScript/FMX/FMXfsDB19.res create mode 100644 FastScript/FMX/FMXfsDB20.dpk create mode 100644 FastScript/FMX/FMXfsDB20.otares create mode 100644 FastScript/FMX/FMXfsDB20.res create mode 100644 FastScript/FMX/FMXfsDB21.dpk create mode 100644 FastScript/FMX/FMXfsDB21.otares create mode 100644 FastScript/FMX/FMXfsDB21.res create mode 100644 FastScript/FMX/FMXfsDB22.dpk create mode 100644 FastScript/FMX/FMXfsDB22.otares create mode 100644 FastScript/FMX/FMXfsDB22.res create mode 100644 FastScript/FMX/FMXfsDB23.dpk create mode 100644 FastScript/FMX/FMXfsDB23.otares create mode 100644 FastScript/FMX/FMXfsDB23.res create mode 100644 FastScript/FMX/FMXfsDB24.dpk create mode 100644 FastScript/FMX/FMXfsDB24.otares create mode 100644 FastScript/FMX/FMXfsDB24.res create mode 100644 FastScript/FMX/FMXfsDB25.dpk create mode 100644 FastScript/FMX/FMXfsDB25.otares create mode 100644 FastScript/FMX/FMXfsDB25.res create mode 100644 FastScript/FMX/FMXfsDB26.dpk create mode 100644 FastScript/FMX/FMXfsDB27.dpk create mode 100644 FastScript/FMX/FMXfsDB28.dpk create mode 100644 FastScript/FMX/FMXfsDB29.dpk create mode 100644 FastScript/FMX/FMXfsIBX16.dpk create mode 100644 FastScript/FMX/FMXfsIBX16.res create mode 100644 FastScript/FMX/FMXfsIBX17.dpk create mode 100644 FastScript/FMX/FMXfsIBX17.res create mode 100644 FastScript/FMX/FMXfsIBX18.dpk create mode 100644 FastScript/FMX/FMXfsIBX18.res create mode 100644 FastScript/FMX/FMXfsIBX19.dpk create mode 100644 FastScript/FMX/FMXfsIBX19.res create mode 100644 FastScript/FMX/FMXfsIBX20.dpk create mode 100644 FastScript/FMX/FMXfsIBX20.res create mode 100644 FastScript/FMX/FMXfsIBX21.dpk create mode 100644 FastScript/FMX/FMXfsIBX21.res create mode 100644 FastScript/FMX/FMXfsIBX22.dpk create mode 100644 FastScript/FMX/FMXfsIBX22.res create mode 100644 FastScript/FMX/FMXfsIBX23.dpk create mode 100644 FastScript/FMX/FMXfsIBX23.res create mode 100644 FastScript/FMX/FMXfsIBX24.dpk create mode 100644 FastScript/FMX/FMXfsIBX24.res create mode 100644 FastScript/FMX/FMXfsIBX25.dpk create mode 100644 FastScript/FMX/FMXfsIBX25.res create mode 100644 FastScript/FMX/FMXfsIBX26.dpk create mode 100644 FastScript/FMX/FMXfsIBX27.dpk create mode 100644 FastScript/FMX/FMXfsIBX28.dpk create mode 100644 FastScript/FMX/FMXfsIBX29.dpk create mode 100644 FastScript/FMX/FMXfsTee16.dpk create mode 100644 FastScript/FMX/FMXfsTee16.res create mode 100644 FastScript/FMX/FMXfsTee17.dpk create mode 100644 FastScript/FMX/FMXfsTee17.res create mode 100644 FastScript/FMX/FMXfsTee18.dpk create mode 100644 FastScript/FMX/FMXfsTee18.res create mode 100644 FastScript/FMX/FMXfsTee19.dpk create mode 100644 FastScript/FMX/FMXfsTee19.res create mode 100644 FastScript/FMX/FMXfsTee20.dpk create mode 100644 FastScript/FMX/FMXfsTee20.res create mode 100644 FastScript/FMX/FMXfsTee21.dpk create mode 100644 FastScript/FMX/FMXfsTee21.res create mode 100644 FastScript/FMX/FMXfsTee22.dpk create mode 100644 FastScript/FMX/FMXfsTee22.res create mode 100644 FastScript/FMX/FMXfsTee23.dpk create mode 100644 FastScript/FMX/FMXfsTee23.res create mode 100644 FastScript/FMX/FMXfsTee24.dpk create mode 100644 FastScript/FMX/FMXfsTee24.res create mode 100644 FastScript/FMX/FMXfsTee25.dpk create mode 100644 FastScript/FMX/FMXfsTee25.res create mode 100644 FastScript/FMX/FMXfsTee26.dpk create mode 100644 FastScript/FMX/FMXfsTee27.dpk create mode 100644 FastScript/FMX/FMXfsTee28.dpk create mode 100644 FastScript/FMX/FMXfsTee29.dpk create mode 100644 FastScript/FMX/FMXfs_iadoreg.pas create mode 100644 FastScript/FMX/FMXfs_idbreg.pas create mode 100644 FastScript/FMX/FMXfs_iibxreg.pas create mode 100644 FastScript/FMX/FMXfs_ireg.pas create mode 100644 FastScript/FMX/FMXfs_iteereg.pas create mode 100644 FastScript/FMX/dclFMXfs16.dpk create mode 100644 FastScript/FMX/dclFMXfs16.res create mode 100644 FastScript/FMX/dclFMXfs17.dpk create mode 100644 FastScript/FMX/dclFMXfs17.res create mode 100644 FastScript/FMX/dclFMXfs18.dpk create mode 100644 FastScript/FMX/dclFMXfs18.otares create mode 100644 FastScript/FMX/dclFMXfs18.res create mode 100644 FastScript/FMX/dclFMXfs19.dpk create mode 100644 FastScript/FMX/dclFMXfs19.otares create mode 100644 FastScript/FMX/dclFMXfs19.res create mode 100644 FastScript/FMX/dclFMXfs20.dpk create mode 100644 FastScript/FMX/dclFMXfs20.otares create mode 100644 FastScript/FMX/dclFMXfs20.res create mode 100644 FastScript/FMX/dclFMXfs21.dpk create mode 100644 FastScript/FMX/dclFMXfs21.otares create mode 100644 FastScript/FMX/dclFMXfs21.res create mode 100644 FastScript/FMX/dclFMXfs22.dpk create mode 100644 FastScript/FMX/dclFMXfs22.otares create mode 100644 FastScript/FMX/dclFMXfs22.res create mode 100644 FastScript/FMX/dclFMXfs23.dpk create mode 100644 FastScript/FMX/dclFMXfs23.otares create mode 100644 FastScript/FMX/dclFMXfs23.res create mode 100644 FastScript/FMX/dclFMXfs24.dpk create mode 100644 FastScript/FMX/dclFMXfs24.otares create mode 100644 FastScript/FMX/dclFMXfs24.res create mode 100644 FastScript/FMX/dclFMXfs25.dpk create mode 100644 FastScript/FMX/dclFMXfs25.otares create mode 100644 FastScript/FMX/dclFMXfs25.res create mode 100644 FastScript/FMX/dclFMXfs26.dpk create mode 100644 FastScript/FMX/dclFMXfs27.dpk create mode 100644 FastScript/FMX/dclFMXfs28.dpk create mode 100644 FastScript/FMX/dclFMXfsADO16.dpk create mode 100644 FastScript/FMX/dclFMXfsADO16.res create mode 100644 FastScript/FMX/dclFMXfsADO17.dpk create mode 100644 FastScript/FMX/dclFMXfsADO17.res create mode 100644 FastScript/FMX/dclFMXfsADO18.dpk create mode 100644 FastScript/FMX/dclFMXfsADO18.res create mode 100644 FastScript/FMX/dclFMXfsADO19.dpk create mode 100644 FastScript/FMX/dclFMXfsADO19.res create mode 100644 FastScript/FMX/dclFMXfsADO20.dpk create mode 100644 FastScript/FMX/dclFMXfsADO20.res create mode 100644 FastScript/FMX/dclFMXfsADO21.dpk create mode 100644 FastScript/FMX/dclFMXfsADO21.res create mode 100644 FastScript/FMX/dclFMXfsADO22.dpk create mode 100644 FastScript/FMX/dclFMXfsADO22.res create mode 100644 FastScript/FMX/dclFMXfsADO23.dpk create mode 100644 FastScript/FMX/dclFMXfsADO23.res create mode 100644 FastScript/FMX/dclFMXfsADO24.dpk create mode 100644 FastScript/FMX/dclFMXfsADO24.res create mode 100644 FastScript/FMX/dclFMXfsADO25.dpk create mode 100644 FastScript/FMX/dclFMXfsADO25.res create mode 100644 FastScript/FMX/dclFMXfsADO26.dpk create mode 100644 FastScript/FMX/dclFMXfsADO27.dpk create mode 100644 FastScript/FMX/dclFMXfsADO28.dpk create mode 100644 FastScript/FMX/dclFMXfsADO29.dpk create mode 100644 FastScript/FMX/dclFMXfsDB16.dpk create mode 100644 FastScript/FMX/dclFMXfsDB16.res create mode 100644 FastScript/FMX/dclFMXfsDB17.dpk create mode 100644 FastScript/FMX/dclFMXfsDB17.res create mode 100644 FastScript/FMX/dclFMXfsDB18.dpk create mode 100644 FastScript/FMX/dclFMXfsDB18.otares create mode 100644 FastScript/FMX/dclFMXfsDB18.res create mode 100644 FastScript/FMX/dclFMXfsDB19.dpk create mode 100644 FastScript/FMX/dclFMXfsDB19.otares create mode 100644 FastScript/FMX/dclFMXfsDB19.res create mode 100644 FastScript/FMX/dclFMXfsDB20.dpk create mode 100644 FastScript/FMX/dclFMXfsDB20.otares create mode 100644 FastScript/FMX/dclFMXfsDB20.res create mode 100644 FastScript/FMX/dclFMXfsDB21.dpk create mode 100644 FastScript/FMX/dclFMXfsDB21.otares create mode 100644 FastScript/FMX/dclFMXfsDB21.res create mode 100644 FastScript/FMX/dclFMXfsDB22.dpk create mode 100644 FastScript/FMX/dclFMXfsDB22.otares create mode 100644 FastScript/FMX/dclFMXfsDB22.res create mode 100644 FastScript/FMX/dclFMXfsDB23.dpk create mode 100644 FastScript/FMX/dclFMXfsDB23.otares create mode 100644 FastScript/FMX/dclFMXfsDB23.res create mode 100644 FastScript/FMX/dclFMXfsDB24.dpk create mode 100644 FastScript/FMX/dclFMXfsDB24.otares create mode 100644 FastScript/FMX/dclFMXfsDB24.res create mode 100644 FastScript/FMX/dclFMXfsDB25.dpk create mode 100644 FastScript/FMX/dclFMXfsDB25.otares create mode 100644 FastScript/FMX/dclFMXfsDB25.res create mode 100644 FastScript/FMX/dclFMXfsDB26.dpk create mode 100644 FastScript/FMX/dclFMXfsDB27.dpk create mode 100644 FastScript/FMX/dclFMXfsDB28.dpk create mode 100644 FastScript/FMX/dclFMXfsDB29.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX16.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX16.res create mode 100644 FastScript/FMX/dclFMXfsIBX17.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX17.res create mode 100644 FastScript/FMX/dclFMXfsIBX18.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX18.res create mode 100644 FastScript/FMX/dclFMXfsIBX19.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX19.res create mode 100644 FastScript/FMX/dclFMXfsIBX20.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX20.res create mode 100644 FastScript/FMX/dclFMXfsIBX21.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX21.res create mode 100644 FastScript/FMX/dclFMXfsIBX22.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX22.res create mode 100644 FastScript/FMX/dclFMXfsIBX23.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX23.res create mode 100644 FastScript/FMX/dclFMXfsIBX24.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX24.res create mode 100644 FastScript/FMX/dclFMXfsIBX25.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX25.res create mode 100644 FastScript/FMX/dclFMXfsIBX26.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX27.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX28.dpk create mode 100644 FastScript/FMX/dclFMXfsIBX29.dpk create mode 100644 FastScript/FMX/dclFMXfsTee16.dpk create mode 100644 FastScript/FMX/dclFMXfsTee16.res create mode 100644 FastScript/FMX/dclFMXfsTee17.dpk create mode 100644 FastScript/FMX/dclFMXfsTee17.res create mode 100644 FastScript/FMX/dclFMXfsTee18.dpk create mode 100644 FastScript/FMX/dclFMXfsTee18.res create mode 100644 FastScript/FMX/dclFMXfsTee19.dpk create mode 100644 FastScript/FMX/dclFMXfsTee19.res create mode 100644 FastScript/FMX/dclFMXfsTee20.dpk create mode 100644 FastScript/FMX/dclFMXfsTee20.res create mode 100644 FastScript/FMX/dclFMXfsTee21.dpk create mode 100644 FastScript/FMX/dclFMXfsTee21.res create mode 100644 FastScript/FMX/dclFMXfsTee22.dpk create mode 100644 FastScript/FMX/dclFMXfsTee22.res create mode 100644 FastScript/FMX/dclFMXfsTee23.dpk create mode 100644 FastScript/FMX/dclFMXfsTee23.res create mode 100644 FastScript/FMX/dclFMXfsTee24.dpk create mode 100644 FastScript/FMX/dclFMXfsTee24.res create mode 100644 FastScript/FMX/dclFMXfsTee25.dpk create mode 100644 FastScript/FMX/dclFMXfsTee25.res create mode 100644 FastScript/FMX/dclFMXfsTee26.dpk create mode 100644 FastScript/FMX/dclFMXfsTee27.dpk create mode 100644 FastScript/FMX/dclFMXfsTee28.dpk create mode 100644 FastScript/FMX/dclFMXfsTee29.dpk create mode 100644 FastScript/FMX/fmx.inc create mode 100644 FastScript/FMXfs16.dpk create mode 100644 FastScript/FMXfs16.res create mode 100644 FastScript/FMXfs17.dpk create mode 100644 FastScript/FMXfs17.res create mode 100644 FastScript/FMXfs18.dpk create mode 100644 FastScript/FMXfs18.otares create mode 100644 FastScript/FMXfs18.res create mode 100644 FastScript/FMXfs19.dpk create mode 100644 FastScript/FMXfs19.otares create mode 100644 FastScript/FMXfs19.res create mode 100644 FastScript/FMXfs20.dpk create mode 100644 FastScript/FMXfs20.otares create mode 100644 FastScript/FMXfs20.res create mode 100644 FastScript/FMXfs21.dpk create mode 100644 FastScript/FMXfs21.otares create mode 100644 FastScript/FMXfs21.res create mode 100644 FastScript/FMXfs22.dpk create mode 100644 FastScript/FMXfs22.otares create mode 100644 FastScript/FMXfs22.res create mode 100644 FastScript/FMXfs23.dpk create mode 100644 FastScript/FMXfs23.otares create mode 100644 FastScript/FMXfs23.res create mode 100644 FastScript/FMXfs24.dpk create mode 100644 FastScript/FMXfs24.otares create mode 100644 FastScript/FMXfs24.res create mode 100644 FastScript/FMXfs25.dpk create mode 100644 FastScript/FMXfs25.otares create mode 100644 FastScript/FMXfs25.res create mode 100644 FastScript/FMXfs26.dpk create mode 100644 FastScript/FMXfs27.dpk create mode 100644 FastScript/FMXfs28.dpk create mode 100644 FastScript/FMXfs29.dpk create mode 100644 FastScript/FMXfsADO16.dpk create mode 100644 FastScript/FMXfsADO16.res create mode 100644 FastScript/FMXfsADO17.dpk create mode 100644 FastScript/FMXfsADO17.res create mode 100644 FastScript/FMXfsADO18.dpk create mode 100644 FastScript/FMXfsADO18.res create mode 100644 FastScript/FMXfsADO19.dpk create mode 100644 FastScript/FMXfsADO19.res create mode 100644 FastScript/FMXfsADO20.dpk create mode 100644 FastScript/FMXfsADO20.res create mode 100644 FastScript/FMXfsADO21.dpk create mode 100644 FastScript/FMXfsADO21.res create mode 100644 FastScript/FMXfsADO22.dpk create mode 100644 FastScript/FMXfsADO22.res create mode 100644 FastScript/FMXfsADO23.dpk create mode 100644 FastScript/FMXfsADO23.res create mode 100644 FastScript/FMXfsADO24.dpk create mode 100644 FastScript/FMXfsADO24.res create mode 100644 FastScript/FMXfsADO25.dpk create mode 100644 FastScript/FMXfsADO25.res create mode 100644 FastScript/FMXfsADO26.dpk create mode 100644 FastScript/FMXfsADO27.dpk create mode 100644 FastScript/FMXfsADO28.dpk create mode 100644 FastScript/FMXfsADO29.dpk create mode 100644 FastScript/FMXfsDB16.dpk create mode 100644 FastScript/FMXfsDB16.res create mode 100644 FastScript/FMXfsDB17.dpk create mode 100644 FastScript/FMXfsDB17.res create mode 100644 FastScript/FMXfsDB18.dpk create mode 100644 FastScript/FMXfsDB18.otares create mode 100644 FastScript/FMXfsDB18.res create mode 100644 FastScript/FMXfsDB19.dpk create mode 100644 FastScript/FMXfsDB19.otares create mode 100644 FastScript/FMXfsDB19.res create mode 100644 FastScript/FMXfsDB20.dpk create mode 100644 FastScript/FMXfsDB20.otares create mode 100644 FastScript/FMXfsDB20.res create mode 100644 FastScript/FMXfsDB21.dpk create mode 100644 FastScript/FMXfsDB21.otares create mode 100644 FastScript/FMXfsDB21.res create mode 100644 FastScript/FMXfsDB22.dpk create mode 100644 FastScript/FMXfsDB22.otares create mode 100644 FastScript/FMXfsDB22.res create mode 100644 FastScript/FMXfsDB23.dpk create mode 100644 FastScript/FMXfsDB23.otares create mode 100644 FastScript/FMXfsDB23.res create mode 100644 FastScript/FMXfsDB24.dpk create mode 100644 FastScript/FMXfsDB24.otares create mode 100644 FastScript/FMXfsDB24.res create mode 100644 FastScript/FMXfsDB25.dpk create mode 100644 FastScript/FMXfsDB25.otares create mode 100644 FastScript/FMXfsDB25.res create mode 100644 FastScript/FMXfsDB26.dpk create mode 100644 FastScript/FMXfsDB27.dpk create mode 100644 FastScript/FMXfsDB28.dpk create mode 100644 FastScript/FMXfsDB29.dpk create mode 100644 FastScript/FMXfsIBX16.dpk create mode 100644 FastScript/FMXfsIBX16.res create mode 100644 FastScript/FMXfsIBX17.dpk create mode 100644 FastScript/FMXfsIBX17.res create mode 100644 FastScript/FMXfsIBX18.dpk create mode 100644 FastScript/FMXfsIBX18.res create mode 100644 FastScript/FMXfsIBX19.dpk create mode 100644 FastScript/FMXfsIBX19.res create mode 100644 FastScript/FMXfsIBX20.dpk create mode 100644 FastScript/FMXfsIBX20.res create mode 100644 FastScript/FMXfsIBX21.dpk create mode 100644 FastScript/FMXfsIBX21.res create mode 100644 FastScript/FMXfsIBX22.dpk create mode 100644 FastScript/FMXfsIBX22.res create mode 100644 FastScript/FMXfsIBX23.dpk create mode 100644 FastScript/FMXfsIBX23.res create mode 100644 FastScript/FMXfsIBX24.dpk create mode 100644 FastScript/FMXfsIBX24.res create mode 100644 FastScript/FMXfsIBX25.dpk create mode 100644 FastScript/FMXfsIBX25.res create mode 100644 FastScript/FMXfsIBX26.dpk create mode 100644 FastScript/FMXfsIBX27.dpk create mode 100644 FastScript/FMXfsIBX28.dpk create mode 100644 FastScript/FMXfsIBX29.dpk create mode 100644 FastScript/FMXfsTee16.dpk create mode 100644 FastScript/FMXfsTee16.res create mode 100644 FastScript/FMXfsTee17.dpk create mode 100644 FastScript/FMXfsTee17.res create mode 100644 FastScript/FMXfsTee18.dpk create mode 100644 FastScript/FMXfsTee18.res create mode 100644 FastScript/FMXfsTee19.dpk create mode 100644 FastScript/FMXfsTee19.res create mode 100644 FastScript/FMXfsTee20.dpk create mode 100644 FastScript/FMXfsTee20.res create mode 100644 FastScript/FMXfsTee21.dpk create mode 100644 FastScript/FMXfsTee21.res create mode 100644 FastScript/FMXfsTee22.dpk create mode 100644 FastScript/FMXfsTee22.res create mode 100644 FastScript/FMXfsTee23.dpk create mode 100644 FastScript/FMXfsTee23.res create mode 100644 FastScript/FMXfsTee24.dpk create mode 100644 FastScript/FMXfsTee24.res create mode 100644 FastScript/FMXfsTee25.dpk create mode 100644 FastScript/FMXfsTee25.res create mode 100644 FastScript/FMXfsTee26.dpk create mode 100644 FastScript/FMXfsTee27.dpk create mode 100644 FastScript/FMXfsTee28.dpk create mode 100644 FastScript/FMXfsTee29.dpk create mode 100644 FastScript/FMXfs_iadoreg.pas create mode 100644 FastScript/FMXfs_idbreg.pas create mode 100644 FastScript/FMXfs_iibxreg.pas create mode 100644 FastScript/FMXfs_ireg.pas create mode 100644 FastScript/FMXfs_iteereg.pas create mode 100644 FastScript/bitmaps/TFSADORTTI.bmp create mode 100644 FastScript/bitmaps/TFSBASIC.bmp create mode 100644 FastScript/bitmaps/TFSBDERTTI.bmp create mode 100644 FastScript/bitmaps/TFSCHARTRTTI.bmp create mode 100644 FastScript/bitmaps/TFSCLASSESRTTI.bmp create mode 100644 FastScript/bitmaps/TFSCPP.bmp create mode 100644 FastScript/bitmaps/TFSDBCTRLSRTTI.bmp create mode 100644 FastScript/bitmaps/TFSDBRTTI.bmp create mode 100644 FastScript/bitmaps/TFSDIALOGSRTTI.bmp create mode 100644 FastScript/bitmaps/TFSEXTCTRLSRTTI.bmp create mode 100644 FastScript/bitmaps/TFSFDRTTI.bat create mode 100644 FastScript/bitmaps/TFSFDRTTI.bmp create mode 100644 FastScript/bitmaps/TFSFDRTTI.rc create mode 100644 FastScript/bitmaps/TFSFORMSRTTI.bmp create mode 100644 FastScript/bitmaps/TFSGRAPHICSRTTI.bmp create mode 100644 FastScript/bitmaps/TFSIBXRTTI.bmp create mode 100644 FastScript/bitmaps/TFSINIRTTI.bmp create mode 100644 FastScript/bitmaps/TFSJSCRIPT.bmp create mode 100644 FastScript/bitmaps/TFSMENUSRTTI.bmp create mode 100644 FastScript/bitmaps/TFSPASCAL.bmp create mode 100644 FastScript/bitmaps/TFSSCRIPT.bmp create mode 100644 FastScript/bitmaps/TFSSYNTAXMEMO.bmp create mode 100644 FastScript/bitmaps/TFSTREE.bmp create mode 100644 FastScript/bitmaps/build_fstree.bat create mode 100644 FastScript/bitmaps/build_lrs.bat create mode 100644 FastScript/bitmaps/fstree.bmp create mode 100644 FastScript/dclFMXfs16.dpk create mode 100644 FastScript/dclFMXfs16.res create mode 100644 FastScript/dclFMXfs17.dpk create mode 100644 FastScript/dclFMXfs17.res create mode 100644 FastScript/dclFMXfs18.dpk create mode 100644 FastScript/dclFMXfs18.otares create mode 100644 FastScript/dclFMXfs18.res create mode 100644 FastScript/dclFMXfs19.dpk create mode 100644 FastScript/dclFMXfs19.otares create mode 100644 FastScript/dclFMXfs19.res create mode 100644 FastScript/dclFMXfs20.dpk create mode 100644 FastScript/dclFMXfs20.otares create mode 100644 FastScript/dclFMXfs20.res create mode 100644 FastScript/dclFMXfs21.dpk create mode 100644 FastScript/dclFMXfs21.otares create mode 100644 FastScript/dclFMXfs21.res create mode 100644 FastScript/dclFMXfs22.dpk create mode 100644 FastScript/dclFMXfs22.otares create mode 100644 FastScript/dclFMXfs22.res create mode 100644 FastScript/dclFMXfs23.dpk create mode 100644 FastScript/dclFMXfs23.otares create mode 100644 FastScript/dclFMXfs23.res create mode 100644 FastScript/dclFMXfs24.dpk create mode 100644 FastScript/dclFMXfs24.otares create mode 100644 FastScript/dclFMXfs24.res create mode 100644 FastScript/dclFMXfs25.dpk create mode 100644 FastScript/dclFMXfs25.otares create mode 100644 FastScript/dclFMXfs25.res create mode 100644 FastScript/dclFMXfs26.dpk create mode 100644 FastScript/dclFMXfs27.dpk create mode 100644 FastScript/dclFMXfs28.dpk create mode 100644 FastScript/dclFMXfs29.dpk create mode 100644 FastScript/dclFMXfsADO16.dpk create mode 100644 FastScript/dclFMXfsADO16.res create mode 100644 FastScript/dclFMXfsADO17.dpk create mode 100644 FastScript/dclFMXfsADO17.res create mode 100644 FastScript/dclFMXfsADO18.dpk create mode 100644 FastScript/dclFMXfsADO18.res create mode 100644 FastScript/dclFMXfsADO19.dpk create mode 100644 FastScript/dclFMXfsADO19.res create mode 100644 FastScript/dclFMXfsADO20.dpk create mode 100644 FastScript/dclFMXfsADO20.res create mode 100644 FastScript/dclFMXfsADO21.dpk create mode 100644 FastScript/dclFMXfsADO21.res create mode 100644 FastScript/dclFMXfsADO22.dpk create mode 100644 FastScript/dclFMXfsADO22.res create mode 100644 FastScript/dclFMXfsADO23.dpk create mode 100644 FastScript/dclFMXfsADO23.res create mode 100644 FastScript/dclFMXfsADO24.dpk create mode 100644 FastScript/dclFMXfsADO24.res create mode 100644 FastScript/dclFMXfsADO25.dpk create mode 100644 FastScript/dclFMXfsADO25.res create mode 100644 FastScript/dclFMXfsADO26.dpk create mode 100644 FastScript/dclFMXfsADO27.dpk create mode 100644 FastScript/dclFMXfsADO28.dpk create mode 100644 FastScript/dclFMXfsADO29.dpk create mode 100644 FastScript/dclFMXfsDB16.dpk create mode 100644 FastScript/dclFMXfsDB16.res create mode 100644 FastScript/dclFMXfsDB17.dpk create mode 100644 FastScript/dclFMXfsDB17.res create mode 100644 FastScript/dclFMXfsDB18.dpk create mode 100644 FastScript/dclFMXfsDB18.otares create mode 100644 FastScript/dclFMXfsDB18.res create mode 100644 FastScript/dclFMXfsDB19.dpk create mode 100644 FastScript/dclFMXfsDB19.otares create mode 100644 FastScript/dclFMXfsDB19.res create mode 100644 FastScript/dclFMXfsDB20.dpk create mode 100644 FastScript/dclFMXfsDB20.otares create mode 100644 FastScript/dclFMXfsDB20.res create mode 100644 FastScript/dclFMXfsDB21.dpk create mode 100644 FastScript/dclFMXfsDB21.otares create mode 100644 FastScript/dclFMXfsDB21.res create mode 100644 FastScript/dclFMXfsDB22.dpk create mode 100644 FastScript/dclFMXfsDB22.otares create mode 100644 FastScript/dclFMXfsDB22.res create mode 100644 FastScript/dclFMXfsDB23.dpk create mode 100644 FastScript/dclFMXfsDB23.otares create mode 100644 FastScript/dclFMXfsDB23.res create mode 100644 FastScript/dclFMXfsDB24.dpk create mode 100644 FastScript/dclFMXfsDB24.otares create mode 100644 FastScript/dclFMXfsDB24.res create mode 100644 FastScript/dclFMXfsDB25.dpk create mode 100644 FastScript/dclFMXfsDB25.otares create mode 100644 FastScript/dclFMXfsDB25.res create mode 100644 FastScript/dclFMXfsDB26.dpk create mode 100644 FastScript/dclFMXfsDB27.dpk create mode 100644 FastScript/dclFMXfsDB28.dpk create mode 100644 FastScript/dclFMXfsDB29.dpk create mode 100644 FastScript/dclFMXfsIBX16.dpk create mode 100644 FastScript/dclFMXfsIBX16.res create mode 100644 FastScript/dclFMXfsIBX17.dpk create mode 100644 FastScript/dclFMXfsIBX17.res create mode 100644 FastScript/dclFMXfsIBX18.dpk create mode 100644 FastScript/dclFMXfsIBX18.res create mode 100644 FastScript/dclFMXfsIBX19.dpk create mode 100644 FastScript/dclFMXfsIBX19.res create mode 100644 FastScript/dclFMXfsIBX20.dpk create mode 100644 FastScript/dclFMXfsIBX20.res create mode 100644 FastScript/dclFMXfsIBX21.dpk create mode 100644 FastScript/dclFMXfsIBX21.res create mode 100644 FastScript/dclFMXfsIBX22.dpk create mode 100644 FastScript/dclFMXfsIBX22.res create mode 100644 FastScript/dclFMXfsIBX23.dpk create mode 100644 FastScript/dclFMXfsIBX23.res create mode 100644 FastScript/dclFMXfsIBX24.dpk create mode 100644 FastScript/dclFMXfsIBX24.res create mode 100644 FastScript/dclFMXfsIBX25.dpk create mode 100644 FastScript/dclFMXfsIBX25.res create mode 100644 FastScript/dclFMXfsIBX26.dpk create mode 100644 FastScript/dclFMXfsIBX27.dpk create mode 100644 FastScript/dclFMXfsIBX28.dpk create mode 100644 FastScript/dclFMXfsIBX29.dpk create mode 100644 FastScript/dclFMXfsTee16.dpk create mode 100644 FastScript/dclFMXfsTee16.res create mode 100644 FastScript/dclFMXfsTee17.dpk create mode 100644 FastScript/dclFMXfsTee17.res create mode 100644 FastScript/dclFMXfsTee18.dpk create mode 100644 FastScript/dclFMXfsTee18.res create mode 100644 FastScript/dclFMXfsTee19.dpk create mode 100644 FastScript/dclFMXfsTee19.res create mode 100644 FastScript/dclFMXfsTee20.dpk create mode 100644 FastScript/dclFMXfsTee20.res create mode 100644 FastScript/dclFMXfsTee21.dpk create mode 100644 FastScript/dclFMXfsTee21.res create mode 100644 FastScript/dclFMXfsTee22.dpk create mode 100644 FastScript/dclFMXfsTee22.res create mode 100644 FastScript/dclFMXfsTee23.dpk create mode 100644 FastScript/dclFMXfsTee23.res create mode 100644 FastScript/dclFMXfsTee24.dpk create mode 100644 FastScript/dclFMXfsTee24.res create mode 100644 FastScript/dclFMXfsTee25.dpk create mode 100644 FastScript/dclFMXfsTee25.res create mode 100644 FastScript/dclFMXfsTee26.dpk create mode 100644 FastScript/dclFMXfsTee27.dpk create mode 100644 FastScript/dclFMXfsTee28.dpk create mode 100644 FastScript/dclFMXfsTee29.dpk create mode 100644 FastScript/dclfs10.dpk create mode 100644 FastScript/dclfs11.dpk create mode 100644 FastScript/dclfs12.dpk create mode 100644 FastScript/dclfs14.dpk create mode 100644 FastScript/dclfs15.dpk create mode 100644 FastScript/dclfs16.dpk create mode 100644 FastScript/dclfs17.dpk create mode 100644 FastScript/dclfs18.dpk create mode 100644 FastScript/dclfs19.dpk create mode 100644 FastScript/dclfs20.dpk create mode 100644 FastScript/dclfs21.dpk create mode 100644 FastScript/dclfs22.dpk create mode 100644 FastScript/dclfs23.dpk create mode 100644 FastScript/dclfs24.dpk create mode 100644 FastScript/dclfs25.dpk create mode 100644 FastScript/dclfs26.dpk create mode 100644 FastScript/dclfs27.dpk create mode 100644 FastScript/dclfs28.dpk create mode 100644 FastScript/dclfs29.dpk create mode 100644 FastScript/dclfs4.dpk create mode 100644 FastScript/dclfs5.dpk create mode 100644 FastScript/dclfs6.dpk create mode 100644 FastScript/dclfs7.dpk create mode 100644 FastScript/dclfs9.dpk create mode 100644 FastScript/dclfsADO10.dpk create mode 100644 FastScript/dclfsADO11.dpk create mode 100644 FastScript/dclfsADO12.dpk create mode 100644 FastScript/dclfsADO14.dpk create mode 100644 FastScript/dclfsADO15.dpk create mode 100644 FastScript/dclfsADO16.dpk create mode 100644 FastScript/dclfsADO17.dpk create mode 100644 FastScript/dclfsADO18.dpk create mode 100644 FastScript/dclfsADO19.dpk create mode 100644 FastScript/dclfsADO20.dpk create mode 100644 FastScript/dclfsADO21.dpk create mode 100644 FastScript/dclfsADO22.dpk create mode 100644 FastScript/dclfsADO23.dpk create mode 100644 FastScript/dclfsADO24.dpk create mode 100644 FastScript/dclfsADO25.dpk create mode 100644 FastScript/dclfsADO26.dpk create mode 100644 FastScript/dclfsADO27.dpk create mode 100644 FastScript/dclfsADO28.dpk create mode 100644 FastScript/dclfsADO29.dpk create mode 100644 FastScript/dclfsADO5.dpk create mode 100644 FastScript/dclfsADO6.dpk create mode 100644 FastScript/dclfsADO7.dpk create mode 100644 FastScript/dclfsADO9.dpk create mode 100644 FastScript/dclfsBDE10.dpk create mode 100644 FastScript/dclfsBDE11.dpk create mode 100644 FastScript/dclfsBDE12.dpk create mode 100644 FastScript/dclfsBDE14.dpk create mode 100644 FastScript/dclfsBDE15.dpk create mode 100644 FastScript/dclfsBDE16.dpk create mode 100644 FastScript/dclfsBDE17.dpk create mode 100644 FastScript/dclfsBDE18.dpk create mode 100644 FastScript/dclfsBDE19.dpk create mode 100644 FastScript/dclfsBDE20.dpk create mode 100644 FastScript/dclfsBDE21.dpk create mode 100644 FastScript/dclfsBDE22.dpk create mode 100644 FastScript/dclfsBDE23.dpk create mode 100644 FastScript/dclfsBDE24.dpk create mode 100644 FastScript/dclfsBDE25.dpk create mode 100644 FastScript/dclfsBDE26.dpk create mode 100644 FastScript/dclfsBDE27.dpk create mode 100644 FastScript/dclfsBDE28.dpk create mode 100644 FastScript/dclfsBDE29.dpk create mode 100644 FastScript/dclfsBDE4.dpk create mode 100644 FastScript/dclfsBDE5.dpk create mode 100644 FastScript/dclfsBDE6.dpk create mode 100644 FastScript/dclfsBDE7.dpk create mode 100644 FastScript/dclfsBDE9.dpk create mode 100644 FastScript/dclfsDB10.dpk create mode 100644 FastScript/dclfsDB11.dpk create mode 100644 FastScript/dclfsDB12.dpk create mode 100644 FastScript/dclfsDB14.dpk create mode 100644 FastScript/dclfsDB15.dpk create mode 100644 FastScript/dclfsDB16.dpk create mode 100644 FastScript/dclfsDB17.dpk create mode 100644 FastScript/dclfsDB18.dpk create mode 100644 FastScript/dclfsDB19.dpk create mode 100644 FastScript/dclfsDB20.dpk create mode 100644 FastScript/dclfsDB21.dpk create mode 100644 FastScript/dclfsDB22.dpk create mode 100644 FastScript/dclfsDB23.dpk create mode 100644 FastScript/dclfsDB24.dpk create mode 100644 FastScript/dclfsDB25.dpk create mode 100644 FastScript/dclfsDB26.dpk create mode 100644 FastScript/dclfsDB27.dpk create mode 100644 FastScript/dclfsDB28.dpk create mode 100644 FastScript/dclfsDB29.dpk create mode 100644 FastScript/dclfsDB4.dpk create mode 100644 FastScript/dclfsDB5.dpk create mode 100644 FastScript/dclfsDB6.dpk create mode 100644 FastScript/dclfsDB7.dpk create mode 100644 FastScript/dclfsDB9.dpk create mode 100644 FastScript/dclfsFD15.dpk create mode 100644 FastScript/dclfsFD16.dpk create mode 100644 FastScript/dclfsFD17.dpk create mode 100644 FastScript/dclfsFD18.dpk create mode 100644 FastScript/dclfsFD19.dpk create mode 100644 FastScript/dclfsFD20.dpk create mode 100644 FastScript/dclfsFD21.dpk create mode 100644 FastScript/dclfsFD22.dpk create mode 100644 FastScript/dclfsFD23.dpk create mode 100644 FastScript/dclfsFD24.dpk create mode 100644 FastScript/dclfsFD25.dpk create mode 100644 FastScript/dclfsFD26.dpk create mode 100644 FastScript/dclfsFD27.dpk create mode 100644 FastScript/dclfsFD28.dpk create mode 100644 FastScript/dclfsFD29.dpk create mode 100644 FastScript/dclfsIBX10.dpk create mode 100644 FastScript/dclfsIBX11.dpk create mode 100644 FastScript/dclfsIBX12.dpk create mode 100644 FastScript/dclfsIBX14.dpk create mode 100644 FastScript/dclfsIBX15.dpk create mode 100644 FastScript/dclfsIBX16.dpk create mode 100644 FastScript/dclfsIBX17.dpk create mode 100644 FastScript/dclfsIBX18.dpk create mode 100644 FastScript/dclfsIBX19.dpk create mode 100644 FastScript/dclfsIBX20.dpk create mode 100644 FastScript/dclfsIBX21.dpk create mode 100644 FastScript/dclfsIBX22.dpk create mode 100644 FastScript/dclfsIBX23.dpk create mode 100644 FastScript/dclfsIBX24.dpk create mode 100644 FastScript/dclfsIBX25.dpk create mode 100644 FastScript/dclfsIBX26.dpk create mode 100644 FastScript/dclfsIBX27.dpk create mode 100644 FastScript/dclfsIBX28.dpk create mode 100644 FastScript/dclfsIBX29.dpk create mode 100644 FastScript/dclfsIBX5.dpk create mode 100644 FastScript/dclfsIBX6.dpk create mode 100644 FastScript/dclfsIBX7.dpk create mode 100644 FastScript/dclfsIBX9.dpk create mode 100644 FastScript/dclfsTee10.dpk create mode 100644 FastScript/dclfsTee11.dpk create mode 100644 FastScript/dclfsTee12.dpk create mode 100644 FastScript/dclfsTee14.dpk create mode 100644 FastScript/dclfsTee15.dpk create mode 100644 FastScript/dclfsTee16.dpk create mode 100644 FastScript/dclfsTee17.dpk create mode 100644 FastScript/dclfsTee18.dpk create mode 100644 FastScript/dclfsTee19.dpk create mode 100644 FastScript/dclfsTee20.dpk create mode 100644 FastScript/dclfsTee21.dpk create mode 100644 FastScript/dclfsTee22.dpk create mode 100644 FastScript/dclfsTee23.dpk create mode 100644 FastScript/dclfsTee24.dpk create mode 100644 FastScript/dclfsTee25.dpk create mode 100644 FastScript/dclfsTee26.dpk create mode 100644 FastScript/dclfsTee27.dpk create mode 100644 FastScript/dclfsTee28.dpk create mode 100644 FastScript/dclfsTee29.dpk create mode 100644 FastScript/dclfsTee4.dpk create mode 100644 FastScript/dclfsTee5.dpk create mode 100644 FastScript/dclfsTee6.dpk create mode 100644 FastScript/dclfsTee7.dpk create mode 100644 FastScript/dclfsTee9.dpk create mode 100644 FastScript/dclfsx.dpk create mode 100644 FastScript/dclfsx.res create mode 100644 FastScript/fmx.inc create mode 100644 FastScript/frxPlatformsAttribute.inc create mode 100644 FastScript/fs.inc create mode 100644 FastScript/fs10.dpk create mode 100644 FastScript/fs11.dpk create mode 100644 FastScript/fs12.dpk create mode 100644 FastScript/fs14.dpk create mode 100644 FastScript/fs15.dpk create mode 100644 FastScript/fs16.dpk create mode 100644 FastScript/fs17.dpk create mode 100644 FastScript/fs18.dpk create mode 100644 FastScript/fs19.dpk create mode 100644 FastScript/fs20.dpk create mode 100644 FastScript/fs21.dpk create mode 100644 FastScript/fs22.dpk create mode 100644 FastScript/fs23.dpk create mode 100644 FastScript/fs24.dpk create mode 100644 FastScript/fs25.dpk create mode 100644 FastScript/fs26.dpk create mode 100644 FastScript/fs27.dpk create mode 100644 FastScript/fs28.dpk create mode 100644 FastScript/fs29.dpk create mode 100644 FastScript/fs4.bpk create mode 100644 FastScript/fs4.cpp create mode 100644 FastScript/fs4.dpk create mode 100644 FastScript/fs4.res create mode 100644 FastScript/fs5.bpk create mode 100644 FastScript/fs5.cpp create mode 100644 FastScript/fs5.dpk create mode 100644 FastScript/fs5.res create mode 100644 FastScript/fs6.bpk create mode 100644 FastScript/fs6.cpp create mode 100644 FastScript/fs6.dpk create mode 100644 FastScript/fs6.res create mode 100644 FastScript/fs7.dpk create mode 100644 FastScript/fs9.dpk create mode 100644 FastScript/fsADO10.dpk create mode 100644 FastScript/fsADO11.dpk create mode 100644 FastScript/fsADO12.dpk create mode 100644 FastScript/fsADO14.dpk create mode 100644 FastScript/fsADO15.dpk create mode 100644 FastScript/fsADO16.dpk create mode 100644 FastScript/fsADO17.dpk create mode 100644 FastScript/fsADO18.dpk create mode 100644 FastScript/fsADO19.dpk create mode 100644 FastScript/fsADO20.dpk create mode 100644 FastScript/fsADO21.dpk create mode 100644 FastScript/fsADO22.dpk create mode 100644 FastScript/fsADO23.dpk create mode 100644 FastScript/fsADO24.dpk create mode 100644 FastScript/fsADO25.dpk create mode 100644 FastScript/fsADO26.dpk create mode 100644 FastScript/fsADO27.dpk create mode 100644 FastScript/fsADO28.dpk create mode 100644 FastScript/fsADO29.dpk create mode 100644 FastScript/fsADO5.bpk create mode 100644 FastScript/fsADO5.cpp create mode 100644 FastScript/fsADO5.dpk create mode 100644 FastScript/fsADO6.bpk create mode 100644 FastScript/fsADO6.cpp create mode 100644 FastScript/fsADO6.dpk create mode 100644 FastScript/fsADO7.dpk create mode 100644 FastScript/fsADO9.dpk create mode 100644 FastScript/fsBDE10.dpk create mode 100644 FastScript/fsBDE11.dpk create mode 100644 FastScript/fsBDE12.dpk create mode 100644 FastScript/fsBDE14.dpk create mode 100644 FastScript/fsBDE15.dpk create mode 100644 FastScript/fsBDE16.dpk create mode 100644 FastScript/fsBDE17.dpk create mode 100644 FastScript/fsBDE18.dpk create mode 100644 FastScript/fsBDE19.dpk create mode 100644 FastScript/fsBDE20.dpk create mode 100644 FastScript/fsBDE21.dpk create mode 100644 FastScript/fsBDE22.dpk create mode 100644 FastScript/fsBDE23.dpk create mode 100644 FastScript/fsBDE24.dpk create mode 100644 FastScript/fsBDE25.dpk create mode 100644 FastScript/fsBDE26.dpk create mode 100644 FastScript/fsBDE27.dpk create mode 100644 FastScript/fsBDE28.dpk create mode 100644 FastScript/fsBDE29.dpk create mode 100644 FastScript/fsBDE4.bpk create mode 100644 FastScript/fsBDE4.cpp create mode 100644 FastScript/fsBDE4.dpk create mode 100644 FastScript/fsBDE5.bpk create mode 100644 FastScript/fsBDE5.cpp create mode 100644 FastScript/fsBDE5.dpk create mode 100644 FastScript/fsBDE6.bpk create mode 100644 FastScript/fsBDE6.cpp create mode 100644 FastScript/fsBDE6.dpk create mode 100644 FastScript/fsBDE7.dpk create mode 100644 FastScript/fsBDE9.dpk create mode 100644 FastScript/fsDB10.dpk create mode 100644 FastScript/fsDB11.dpk create mode 100644 FastScript/fsDB12.dpk create mode 100644 FastScript/fsDB14.dpk create mode 100644 FastScript/fsDB15.dpk create mode 100644 FastScript/fsDB16.dpk create mode 100644 FastScript/fsDB17.dpk create mode 100644 FastScript/fsDB18.dpk create mode 100644 FastScript/fsDB19.dpk create mode 100644 FastScript/fsDB20.dpk create mode 100644 FastScript/fsDB21.dpk create mode 100644 FastScript/fsDB22.dpk create mode 100644 FastScript/fsDB23.dpk create mode 100644 FastScript/fsDB24.dpk create mode 100644 FastScript/fsDB25.dpk create mode 100644 FastScript/fsDB26.dpk create mode 100644 FastScript/fsDB27.dpk create mode 100644 FastScript/fsDB28.dpk create mode 100644 FastScript/fsDB4.bpk create mode 100644 FastScript/fsDB4.cpp create mode 100644 FastScript/fsDB4.dpk create mode 100644 FastScript/fsDB5.bpk create mode 100644 FastScript/fsDB5.cpp create mode 100644 FastScript/fsDB5.dpk create mode 100644 FastScript/fsDB6.bpk create mode 100644 FastScript/fsDB6.cpp create mode 100644 FastScript/fsDB6.dpk create mode 100644 FastScript/fsDB7.dpk create mode 100644 FastScript/fsDB9.dpk create mode 100644 FastScript/fsFD15.dpk create mode 100644 FastScript/fsFD16.dpk create mode 100644 FastScript/fsFD17.dpk create mode 100644 FastScript/fsFD18.dpk create mode 100644 FastScript/fsFD19.dpk create mode 100644 FastScript/fsFD20.dpk create mode 100644 FastScript/fsFD21.dpk create mode 100644 FastScript/fsFD22.dpk create mode 100644 FastScript/fsFD23.dpk create mode 100644 FastScript/fsFD24.dpk create mode 100644 FastScript/fsFD25.dpk create mode 100644 FastScript/fsFD26.dpk create mode 100644 FastScript/fsFD27.dpk create mode 100644 FastScript/fsFD28.dpk create mode 100644 FastScript/fsFD29.dpk create mode 100644 FastScript/fsIBX10.dpk create mode 100644 FastScript/fsIBX11.dpk create mode 100644 FastScript/fsIBX12.dpk create mode 100644 FastScript/fsIBX14.dpk create mode 100644 FastScript/fsIBX15.dpk create mode 100644 FastScript/fsIBX16.dpk create mode 100644 FastScript/fsIBX17.dpk create mode 100644 FastScript/fsIBX18.dpk create mode 100644 FastScript/fsIBX19.dpk create mode 100644 FastScript/fsIBX20.dpk create mode 100644 FastScript/fsIBX21.dpk create mode 100644 FastScript/fsIBX22.dpk create mode 100644 FastScript/fsIBX23.dpk create mode 100644 FastScript/fsIBX24.dpk create mode 100644 FastScript/fsIBX25.dpk create mode 100644 FastScript/fsIBX26.dpk create mode 100644 FastScript/fsIBX27.dpk create mode 100644 FastScript/fsIBX28.dpk create mode 100644 FastScript/fsIBX29.dpk create mode 100644 FastScript/fsIBX5.bpk create mode 100644 FastScript/fsIBX5.cpp create mode 100644 FastScript/fsIBX5.dpk create mode 100644 FastScript/fsIBX6.bpk create mode 100644 FastScript/fsIBX6.cpp create mode 100644 FastScript/fsIBX6.dpk create mode 100644 FastScript/fsIBX7.dpk create mode 100644 FastScript/fsIBX9.dpk create mode 100644 FastScript/fsTee10.dpk create mode 100644 FastScript/fsTee11.dpk create mode 100644 FastScript/fsTee12.dpk create mode 100644 FastScript/fsTee14.dpk create mode 100644 FastScript/fsTee15.dpk create mode 100644 FastScript/fsTee16.dpk create mode 100644 FastScript/fsTee17.dpk create mode 100644 FastScript/fsTee18.dpk create mode 100644 FastScript/fsTee19.dpk create mode 100644 FastScript/fsTee20.dpk create mode 100644 FastScript/fsTee21.dpk create mode 100644 FastScript/fsTee22.dpk create mode 100644 FastScript/fsTee23.dpk create mode 100644 FastScript/fsTee24.dpk create mode 100644 FastScript/fsTee25.dpk create mode 100644 FastScript/fsTee26.dpk create mode 100644 FastScript/fsTee27.dpk create mode 100644 FastScript/fsTee28.dpk create mode 100644 FastScript/fsTee29.dpk create mode 100644 FastScript/fsTee4.bpk create mode 100644 FastScript/fsTee4.cpp create mode 100644 FastScript/fsTee4.dpk create mode 100644 FastScript/fsTee5.bpk create mode 100644 FastScript/fsTee5.cpp create mode 100644 FastScript/fsTee5.dpk create mode 100644 FastScript/fsTee6.bpk create mode 100644 FastScript/fsTee6.cpp create mode 100644 FastScript/fsTee6.dpk create mode 100644 FastScript/fsTee7.dpk create mode 100644 FastScript/fsTee9.dpk create mode 100644 FastScript/fs_iadoreg.pas create mode 100644 FastScript/fs_iadortti.pas create mode 100644 FastScript/fs_ibasic.pas create mode 100644 FastScript/fs_ibdereg.pas create mode 100644 FastScript/fs_ibdertti.pas create mode 100644 FastScript/fs_ibx.lpk create mode 100644 FastScript/fs_ichartrtti.pas create mode 100644 FastScript/fs_iclassesrtti.pas create mode 100644 FastScript/fs_iconst.pas create mode 100644 FastScript/fs_icpp.pas create mode 100644 FastScript/fs_idbctrlsrtti.pas create mode 100644 FastScript/fs_idbreg.pas create mode 100644 FastScript/fs_idbrtti.pas create mode 100644 FastScript/fs_idialogsrtti.pas create mode 100644 FastScript/fs_idisp.pas create mode 100644 FastScript/fs_ievents.pas create mode 100644 FastScript/fs_iexpression.pas create mode 100644 FastScript/fs_iextctrlsrtti.pas create mode 100644 FastScript/fs_ifdreg.dcr create mode 100644 FastScript/fs_ifdreg.pas create mode 100644 FastScript/fs_ifdrtti.pas create mode 100644 FastScript/fs_iformsrtti.pas create mode 100644 FastScript/fs_igraphicsrtti.pas create mode 100644 FastScript/fs_iibxreg.pas create mode 100644 FastScript/fs_iibxrtti.pas create mode 100644 FastScript/fs_iilparser.pas create mode 100644 FastScript/fs_iinirtti.pas create mode 100644 FastScript/fs_iinterpreter.pas create mode 100644 FastScript/fs_ijs.pas create mode 100644 FastScript/fs_imenusrtti.pas create mode 100644 FastScript/fs_iparser.pas create mode 100644 FastScript/fs_ipascal.pas create mode 100644 FastScript/fs_ireg.dcr create mode 100644 FastScript/fs_ireg.lrs create mode 100644 FastScript/fs_ireg.pas create mode 100644 FastScript/fs_isysrtti.pas create mode 100644 FastScript/fs_iteereg.pas create mode 100644 FastScript/fs_itools.pas create mode 100644 FastScript/fs_lazarus.lpk create mode 100644 FastScript/fs_lazarus.pas create mode 100644 FastScript/fs_synmemo.dfm create mode 100644 FastScript/fs_synmemo.lfm create mode 100644 FastScript/fs_synmemo.pas create mode 100644 FastScript/fs_tree.pas create mode 100644 FastScript/fs_tree.res create mode 100644 FastScript/fs_xml.pas create mode 100644 FastScript/fsx.dpk create mode 100644 FastScript/fsx.res create mode 100644 FastScript/readme_lazarus.txt create mode 100644 FastScript/tee.inc create mode 100644 LibD28/FMX.BaseTypeAliases.pas create mode 100644 LibD28/FMX.ConverterFR3toFRFMX.pas create mode 100644 LibD28/FMX.DelphiZXIngQRCode.pas create mode 100644 LibD28/FMX.ExportTTFFont.pas create mode 100644 LibD28/FMX.FormTypeAliases.pas create mode 100644 LibD28/FMX.Linux.Old.frxPrinter.pas create mode 100644 LibD28/FMX.Linux.frxPrinter.pas create mode 100644 LibD28/FMX.Mac.frxPrinter.pas create mode 100644 LibD28/FMX.TTFHelpers.pas create mode 100644 LibD28/FMX.Win.frxPrinter.pas create mode 100644 LibD28/FMX.frxADOComponents.pas create mode 100644 LibD28/FMX.frxADOEditor.pas create mode 100644 LibD28/FMX.frxADORTTI.pas create mode 100644 LibD28/FMX.frxAbout.fmx create mode 100644 LibD28/FMX.frxAbout.pas create mode 100644 LibD28/FMX.frxAggregate.pas create mode 100644 LibD28/FMX.frxBarcod.pas create mode 100644 LibD28/FMX.frxBarcode.pas create mode 100644 LibD28/FMX.frxBarcode2DBase.pas create mode 100644 LibD28/FMX.frxBarcode2DRTTI.pas create mode 100644 LibD28/FMX.frxBarcode2DView.pas create mode 100644 LibD28/FMX.frxBarcodeDataMatrix.pas create mode 100644 LibD28/FMX.frxBarcodeEditor.fmx create mode 100644 LibD28/FMX.frxBarcodeEditor.pas create mode 100644 LibD28/FMX.frxBarcodePDF417.pas create mode 100644 LibD28/FMX.frxBarcodeProperties.pas create mode 100644 LibD28/FMX.frxBarcodeQR.pas create mode 100644 LibD28/FMX.frxBarcodeRTTI.pas create mode 100644 LibD28/FMX.frxBaseModalForm.pas create mode 100644 LibD28/FMX.frxCanvas.Linux.pas create mode 100644 LibD28/FMX.frxCanvas.Mac.pas create mode 100644 LibD28/FMX.frxChBox.pas create mode 100644 LibD28/FMX.frxChBoxRTTI.pas create mode 100644 LibD28/FMX.frxChart.pas create mode 100644 LibD28/FMX.frxChartEditor.fmx create mode 100644 LibD28/FMX.frxChartEditor.pas create mode 100644 LibD28/FMX.frxChartGallery.fmx create mode 100644 LibD28/FMX.frxChartGallery.pas create mode 100644 LibD28/FMX.frxChartHelpers.pas create mode 100644 LibD28/FMX.frxChartRTTI.pas create mode 100644 LibD28/FMX.frxClass.pas create mode 100644 LibD28/FMX.frxClass.res create mode 100644 LibD28/FMX.frxClassRTTI.pas create mode 100644 LibD28/FMX.frxCmapTableClass.pas create mode 100644 LibD28/FMX.frxCodeUtils.pas create mode 100644 LibD28/FMX.frxConnWizard.fmx create mode 100644 LibD28/FMX.frxConnWizard.pas create mode 100644 LibD28/FMX.frxConnWizard.res create mode 100644 LibD28/FMX.frxCross.pas create mode 100644 LibD28/FMX.frxCrossEditor.fmx create mode 100644 LibD28/FMX.frxCrossEditor.pas create mode 100644 LibD28/FMX.frxCrossRTTI.pas create mode 100644 LibD28/FMX.frxCrypto.pas create mode 100644 LibD28/FMX.frxCtrls.pas create mode 100644 LibD28/FMX.frxCustomDB.pas create mode 100644 LibD28/FMX.frxCustomDBEditor.pas create mode 100644 LibD28/FMX.frxCustomDBRTTI.pas create mode 100644 LibD28/FMX.frxCustomEditors.pas create mode 100644 LibD28/FMX.frxDBSet.pas create mode 100644 LibD28/FMX.frxDBXComponents.pas create mode 100644 LibD28/FMX.frxDBXEditor.pas create mode 100644 LibD28/FMX.frxDBXRTTI.pas create mode 100644 LibD28/FMX.frxDCtrl.pas create mode 100644 LibD28/FMX.frxDCtrlRTTI.pas create mode 100644 LibD28/FMX.frxDMPClass.pas create mode 100644 LibD28/FMX.frxDataTree.fmx create mode 100644 LibD28/FMX.frxDataTree.pas create mode 100644 LibD28/FMX.frxDesgn.fmx create mode 100644 LibD28/FMX.frxDesgn.pas create mode 100644 LibD28/FMX.frxDesgn.res create mode 100644 LibD28/FMX.frxDesgnCtrls.pas create mode 100644 LibD28/FMX.frxDesgnEditors.pas create mode 100644 LibD28/FMX.frxDesgnWorkspace.pas create mode 100644 LibD28/FMX.frxDesgnWorkspace.res create mode 100644 LibD28/FMX.frxDesgnWorkspace1.pas create mode 100644 LibD28/FMX.frxDesgn_D23.fmx create mode 100644 LibD28/FMX.frxDialogForm.fmx create mode 100644 LibD28/FMX.frxDialogForm.pas create mode 100644 LibD28/FMX.frxDsgnIntf.pas create mode 100644 LibD28/FMX.frxEditAliases.fmx create mode 100644 LibD28/FMX.frxEditAliases.pas create mode 100644 LibD28/FMX.frxEditDataBand.fmx create mode 100644 LibD28/FMX.frxEditDataBand.pas create mode 100644 LibD28/FMX.frxEditExpr.fmx create mode 100644 LibD28/FMX.frxEditExpr.pas create mode 100644 LibD28/FMX.frxEditFormat.fmx create mode 100644 LibD28/FMX.frxEditFormat.pas create mode 100644 LibD28/FMX.frxEditFrame.fmx create mode 100644 LibD28/FMX.frxEditFrame.pas create mode 100644 LibD28/FMX.frxEditGroup.fmx create mode 100644 LibD28/FMX.frxEditGroup.pas create mode 100644 LibD28/FMX.frxEditHighlight.fmx create mode 100644 LibD28/FMX.frxEditHighlight.pas create mode 100644 LibD28/FMX.frxEditMD.fmx create mode 100644 LibD28/FMX.frxEditMD.pas create mode 100644 LibD28/FMX.frxEditMemo.fmx create mode 100644 LibD28/FMX.frxEditMemo.pas create mode 100644 LibD28/FMX.frxEditOptions.fmx create mode 100644 LibD28/FMX.frxEditOptions.pas create mode 100644 LibD28/FMX.frxEditPage.fmx create mode 100644 LibD28/FMX.frxEditPage.pas create mode 100644 LibD28/FMX.frxEditPicture.fmx create mode 100644 LibD28/FMX.frxEditPicture.pas create mode 100644 LibD28/FMX.frxEditQueryParams.fmx create mode 100644 LibD28/FMX.frxEditQueryParams.pas create mode 100644 LibD28/FMX.frxEditReport.fmx create mode 100644 LibD28/FMX.frxEditReport.pas create mode 100644 LibD28/FMX.frxEditReportData.fmx create mode 100644 LibD28/FMX.frxEditReportData.pas create mode 100644 LibD28/FMX.frxEditSQL.fmx create mode 100644 LibD28/FMX.frxEditSQL.pas create mode 100644 LibD28/FMX.frxEditStrings.fmx create mode 100644 LibD28/FMX.frxEditStrings.pas create mode 100644 LibD28/FMX.frxEditStyle.fmx create mode 100644 LibD28/FMX.frxEditStyle.pas create mode 100644 LibD28/FMX.frxEditSysMemo.fmx create mode 100644 LibD28/FMX.frxEditSysMemo.pas create mode 100644 LibD28/FMX.frxEditTabOrder.fmx create mode 100644 LibD28/FMX.frxEditTabOrder.pas create mode 100644 LibD28/FMX.frxEditVar.fmx create mode 100644 LibD28/FMX.frxEditVar.pas create mode 100644 LibD28/FMX.frxEngine.pas create mode 100644 LibD28/FMX.frxEvaluateForm.fmx create mode 100644 LibD28/FMX.frxEvaluateForm.pas create mode 100644 LibD28/FMX.frxExportCSV.fmx create mode 100644 LibD28/FMX.frxExportCSV.pas create mode 100644 LibD28/FMX.frxExportHTML.fmx create mode 100644 LibD28/FMX.frxExportHTML.pas create mode 100644 LibD28/FMX.frxExportImage.fmx create mode 100644 LibD28/FMX.frxExportImage.pas create mode 100644 LibD28/FMX.frxExportMatrix.pas create mode 100644 LibD28/FMX.frxExportODF.fmx create mode 100644 LibD28/FMX.frxExportODF.pas create mode 100644 LibD28/FMX.frxExportPDF.fmx create mode 100644 LibD28/FMX.frxExportPDF.pas create mode 100644 LibD28/FMX.frxExportRTF.fmx create mode 100644 LibD28/FMX.frxExportRTF.pas create mode 100644 LibD28/FMX.frxExportTXT.fmx create mode 100644 LibD28/FMX.frxExportTXT.pas create mode 100644 LibD28/FMX.frxExportText.fmx create mode 100644 LibD28/FMX.frxExportText.pas create mode 100644 LibD28/FMX.frxExportXML.fmx create mode 100644 LibD28/FMX.frxExportXML.pas create mode 100644 LibD28/FMX.frxFDComponents.pas create mode 100644 LibD28/FMX.frxFDComponents.res create mode 100644 LibD28/FMX.frxFDEditor.pas create mode 100644 LibD28/FMX.frxFDRTTI.pas create mode 100644 LibD28/FMX.frxFDReg.pas create mode 100644 LibD28/FMX.frxFMX.pas create mode 100644 LibD28/FMX.frxFontForm.fmx create mode 100644 LibD28/FMX.frxFontForm.pas create mode 100644 LibD28/FMX.frxFontHeaderClass.pas create mode 100644 LibD28/FMX.frxGZip.pas create mode 100644 LibD28/FMX.frxGlyphSubstitutionClass.pas create mode 100644 LibD28/FMX.frxGlyphTableClass.pas create mode 100644 LibD28/FMX.frxGradient.pas create mode 100644 LibD28/FMX.frxGradientRTTI.pas create mode 100644 LibD28/FMX.frxGraphicUtils.pas create mode 100644 LibD28/FMX.frxHorizontalHeaderClass.pas create mode 100644 LibD28/FMX.frxHorizontalMetrixClass.pas create mode 100644 LibD28/FMX.frxIBXComponents.pas create mode 100644 LibD28/FMX.frxIBXEditor.pas create mode 100644 LibD28/FMX.frxIBXRTTI.pas create mode 100644 LibD28/FMX.frxIndexToLocationClass.pas create mode 100644 LibD28/FMX.frxInheritError.fmx create mode 100644 LibD28/FMX.frxInheritError.pas create mode 100644 LibD28/FMX.frxInsp.fmx create mode 100644 LibD28/FMX.frxInsp.pas create mode 100644 LibD28/FMX.frxInsp_D23.fmx create mode 100644 LibD28/FMX.frxKerningTableClass.pas create mode 100644 LibD28/FMX.frxLinuxFonts.pas create mode 100644 LibD28/FMX.frxMD5.pas create mode 100644 LibD28/FMX.frxMaximumProfileClass.pas create mode 100644 LibD28/FMX.frxNameTableClass.pas create mode 100644 LibD28/FMX.frxNewItem.pas create mode 100644 LibD28/FMX.frxOS2WindowsMetricsClass.pas create mode 100644 LibD28/FMX.frxPassw.pas create mode 100644 LibD28/FMX.frxPictureCache.pas create mode 100644 LibD28/FMX.frxPopupForm.fmx create mode 100644 LibD28/FMX.frxPopupForm.pas create mode 100644 LibD28/FMX.frxPostScriptClass.pas create mode 100644 LibD28/FMX.frxPreProgramClass.pas create mode 100644 LibD28/FMX.frxPreview.fmx create mode 100644 LibD28/FMX.frxPreview.pas create mode 100644 LibD28/FMX.frxPreview.res create mode 100644 LibD28/FMX.frxPreviewPageSettings.fmx create mode 100644 LibD28/FMX.frxPreviewPageSettings.pas create mode 100644 LibD28/FMX.frxPreviewPages.pas create mode 100644 LibD28/FMX.frxPrintDialog.fmx create mode 100644 LibD28/FMX.frxPrintDialog.pas create mode 100644 LibD28/FMX.frxPrinter.pas create mode 100644 LibD28/FMX.frxProgress.fmx create mode 100644 LibD28/FMX.frxProgress.pas create mode 100644 LibD28/FMX.frxRC4.pas create mode 100644 LibD28/FMX.frxReportTree.fmx create mode 100644 LibD28/FMX.frxReportTree.pas create mode 100644 LibD28/FMX.frxRes.pas create mode 100644 LibD28/FMX.frxSearchDialog.fmx create mode 100644 LibD28/FMX.frxSearchDialog.pas create mode 100644 LibD28/FMX.frxStdWizard.pas create mode 100644 LibD28/FMX.frxSynMemo.pas create mode 100644 LibD28/FMX.frxTrueTypeCollection.pas create mode 100644 LibD28/FMX.frxTrueTypeFont.pas create mode 100644 LibD28/FMX.frxTrueTypeTable.pas create mode 100644 LibD28/FMX.frxUnicodeUtils.pas create mode 100644 LibD28/FMX.frxUtils.pas create mode 100644 LibD28/FMX.frxVariables.pas create mode 100644 LibD28/FMX.frxWatchForm.fmx create mode 100644 LibD28/FMX.frxWatchForm.pas create mode 100644 LibD28/FMX.frxXML.pas create mode 100644 LibD28/FMX.frxXMLSerializer.pas create mode 100644 LibD28/FMX.frxZip.pas create mode 100644 LibD28/FMX.frxrcClass.pas create mode 100644 LibD28/FMX.frxrcDesgn.pas create mode 100644 LibD28/FMX.frxrcExports.pas create mode 100644 LibD28/FMX.frxrcInsp.pas create mode 100644 LibD28/FMX.fs_iadortti.pas create mode 100644 LibD28/FMX.fs_ibasic.pas create mode 100644 LibD28/FMX.fs_ichartrtti.pas create mode 100644 LibD28/FMX.fs_iclassesrtti.pas create mode 100644 LibD28/FMX.fs_iconst.pas create mode 100644 LibD28/FMX.fs_icpp.pas create mode 100644 LibD28/FMX.fs_idbrtti.pas create mode 100644 LibD28/FMX.fs_idialogsrtti.pas create mode 100644 LibD28/FMX.fs_idisp.pas create mode 100644 LibD28/FMX.fs_ievents.pas create mode 100644 LibD28/FMX.fs_iexpression.pas create mode 100644 LibD28/FMX.fs_iextctrlsrtti.pas create mode 100644 LibD28/FMX.fs_iformsrtti.pas create mode 100644 LibD28/FMX.fs_igraphicsrtti.pas create mode 100644 LibD28/FMX.fs_iibxrtti.pas create mode 100644 LibD28/FMX.fs_iilparser.pas create mode 100644 LibD28/FMX.fs_iinirtti.pas create mode 100644 LibD28/FMX.fs_iinterpreter.pas create mode 100644 LibD28/FMX.fs_ijs.pas create mode 100644 LibD28/FMX.fs_imenusrtti.pas create mode 100644 LibD28/FMX.fs_iparser.pas create mode 100644 LibD28/FMX.fs_ipascal.pas create mode 100644 LibD28/FMX.fs_isysrtti.pas create mode 100644 LibD28/FMX.fs_itools.pas create mode 100644 LibD28/FMX.fs_lazarus.pas create mode 100644 LibD28/FMX.fs_synmemo.fmx create mode 100644 LibD28/FMX.fs_synmemo.pas create mode 100644 LibD28/FMX.fs_tree.pas create mode 100644 LibD28/FMX.fs_xml.pas create mode 100644 LibD28/FMXfrx16.dpk create mode 100644 LibD28/FMXfrx16.otares create mode 100644 LibD28/FMXfrx16.res create mode 100644 LibD28/FMXfrx17.dpk create mode 100644 LibD28/FMXfrx17.otares create mode 100644 LibD28/FMXfrx17.res create mode 100644 LibD28/FMXfrx18.dpk create mode 100644 LibD28/FMXfrx18.otares create mode 100644 LibD28/FMXfrx18.res create mode 100644 LibD28/FMXfrx19.dpk create mode 100644 LibD28/FMXfrx19.otares create mode 100644 LibD28/FMXfrx19.res create mode 100644 LibD28/FMXfrx20.dpk create mode 100644 LibD28/FMXfrx20.otares create mode 100644 LibD28/FMXfrx20.res create mode 100644 LibD28/FMXfrx21.dpk create mode 100644 LibD28/FMXfrx21.otares create mode 100644 LibD28/FMXfrx21.res create mode 100644 LibD28/FMXfrx22.dpk create mode 100644 LibD28/FMXfrx22.otares create mode 100644 LibD28/FMXfrx22.res create mode 100644 LibD28/FMXfrx23.dpk create mode 100644 LibD28/FMXfrx23.otares create mode 100644 LibD28/FMXfrx23.res create mode 100644 LibD28/FMXfrx24.dpk create mode 100644 LibD28/FMXfrx24.dproj create mode 100644 LibD28/FMXfrx24.otares create mode 100644 LibD28/FMXfrx24.res create mode 100644 LibD28/FMXfrx25.dpk create mode 100644 LibD28/FMXfrx25.otares create mode 100644 LibD28/FMXfrx25.res create mode 100644 LibD28/FMXfrx26.dpk create mode 100644 LibD28/FMXfrx27.dpk create mode 100644 LibD28/FMXfrx29.dpk create mode 100644 LibD28/FMXfrx29.dproj create mode 100644 LibD28/FMXfrx29.res create mode 100644 LibD28/FMXfrxADO16.dpk create mode 100644 LibD28/FMXfrxADO16.res create mode 100644 LibD28/FMXfrxADO17.dpk create mode 100644 LibD28/FMXfrxADO17.res create mode 100644 LibD28/FMXfrxADO18.dpk create mode 100644 LibD28/FMXfrxADO18.res create mode 100644 LibD28/FMXfrxADO19.dpk create mode 100644 LibD28/FMXfrxADO19.res create mode 100644 LibD28/FMXfrxADO20.dpk create mode 100644 LibD28/FMXfrxADO20.res create mode 100644 LibD28/FMXfrxADO21.dpk create mode 100644 LibD28/FMXfrxADO21.res create mode 100644 LibD28/FMXfrxADO22.dpk create mode 100644 LibD28/FMXfrxADO22.res create mode 100644 LibD28/FMXfrxADO23.dpk create mode 100644 LibD28/FMXfrxADO23.res create mode 100644 LibD28/FMXfrxADO24.dpk create mode 100644 LibD28/FMXfrxADO24.res create mode 100644 LibD28/FMXfrxADO25.dpk create mode 100644 LibD28/FMXfrxADO25.res create mode 100644 LibD28/FMXfrxADO26.dpk create mode 100644 LibD28/FMXfrxADO27.dpk create mode 100644 LibD28/FMXfrxADO28.dpk create mode 100644 LibD28/FMXfrxADO29.dpk create mode 100644 LibD28/FMXfrxADOReg.dcr create mode 100644 LibD28/FMXfrxADOReg.pas create mode 100644 LibD28/FMXfrxDB16.dpk create mode 100644 LibD28/FMXfrxDB16.otares create mode 100644 LibD28/FMXfrxDB16.res create mode 100644 LibD28/FMXfrxDB17.dpk create mode 100644 LibD28/FMXfrxDB17.otares create mode 100644 LibD28/FMXfrxDB17.res create mode 100644 LibD28/FMXfrxDB18.dpk create mode 100644 LibD28/FMXfrxDB18.otares create mode 100644 LibD28/FMXfrxDB18.res create mode 100644 LibD28/FMXfrxDB19.dpk create mode 100644 LibD28/FMXfrxDB19.otares create mode 100644 LibD28/FMXfrxDB19.res create mode 100644 LibD28/FMXfrxDB20.dpk create mode 100644 LibD28/FMXfrxDB20.otares create mode 100644 LibD28/FMXfrxDB20.res create mode 100644 LibD28/FMXfrxDB21.dpk create mode 100644 LibD28/FMXfrxDB21.otares create mode 100644 LibD28/FMXfrxDB21.res create mode 100644 LibD28/FMXfrxDB22.dpk create mode 100644 LibD28/FMXfrxDB22.otares create mode 100644 LibD28/FMXfrxDB22.res create mode 100644 LibD28/FMXfrxDB23.dpk create mode 100644 LibD28/FMXfrxDB23.otares create mode 100644 LibD28/FMXfrxDB23.res create mode 100644 LibD28/FMXfrxDB24.dpk create mode 100644 LibD28/FMXfrxDB24.otares create mode 100644 LibD28/FMXfrxDB24.res create mode 100644 LibD28/FMXfrxDB25.dpk create mode 100644 LibD28/FMXfrxDB25.otares create mode 100644 LibD28/FMXfrxDB25.res create mode 100644 LibD28/FMXfrxDB26.dpk create mode 100644 LibD28/FMXfrxDB27.dpk create mode 100644 LibD28/FMXfrxDB29.dpk create mode 100644 LibD28/FMXfrxDB29.dproj create mode 100644 LibD28/FMXfrxDB29.res create mode 100644 LibD28/FMXfrxDBX16.dpk create mode 100644 LibD28/FMXfrxDBX16.res create mode 100644 LibD28/FMXfrxDBX17.dpk create mode 100644 LibD28/FMXfrxDBX17.res create mode 100644 LibD28/FMXfrxDBX18.dpk create mode 100644 LibD28/FMXfrxDBX18.res create mode 100644 LibD28/FMXfrxDBX19.dpk create mode 100644 LibD28/FMXfrxDBX19.res create mode 100644 LibD28/FMXfrxDBX20.dpk create mode 100644 LibD28/FMXfrxDBX20.res create mode 100644 LibD28/FMXfrxDBX21.dpk create mode 100644 LibD28/FMXfrxDBX21.res create mode 100644 LibD28/FMXfrxDBX22.dpk create mode 100644 LibD28/FMXfrxDBX22.res create mode 100644 LibD28/FMXfrxDBX23.dpk create mode 100644 LibD28/FMXfrxDBX23.res create mode 100644 LibD28/FMXfrxDBX24.dpk create mode 100644 LibD28/FMXfrxDBX24.res create mode 100644 LibD28/FMXfrxDBX25.dpk create mode 100644 LibD28/FMXfrxDBX25.res create mode 100644 LibD28/FMXfrxDBX26.dpk create mode 100644 LibD28/FMXfrxDBX27.dpk create mode 100644 LibD28/FMXfrxDBX29.dpk create mode 100644 LibD28/FMXfrxDBX29.dproj create mode 100644 LibD28/FMXfrxDBX29.res create mode 100644 LibD28/FMXfrxDBXReg.dcr create mode 100644 LibD28/FMXfrxDBXReg.pas create mode 100644 LibD28/FMXfrxFD18.dpk create mode 100644 LibD28/FMXfrxFD18.otares create mode 100644 LibD28/FMXfrxFD18.res create mode 100644 LibD28/FMXfrxFD19.dpk create mode 100644 LibD28/FMXfrxFD19.res create mode 100644 LibD28/FMXfrxFD20.dpk create mode 100644 LibD28/FMXfrxFD20.res create mode 100644 LibD28/FMXfrxFD21.dpk create mode 100644 LibD28/FMXfrxFD21.res create mode 100644 LibD28/FMXfrxFD22.dpk create mode 100644 LibD28/FMXfrxFD22.res create mode 100644 LibD28/FMXfrxFD23.dpk create mode 100644 LibD28/FMXfrxFD23.res create mode 100644 LibD28/FMXfrxFD24.dpk create mode 100644 LibD28/FMXfrxFD24.res create mode 100644 LibD28/FMXfrxFD25.dpk create mode 100644 LibD28/FMXfrxFD25.res create mode 100644 LibD28/FMXfrxFD26.dpk create mode 100644 LibD28/FMXfrxFD27.dpk create mode 100644 LibD28/FMXfrxFD29.dpk create mode 100644 LibD28/FMXfrxFD29.dproj create mode 100644 LibD28/FMXfrxFD29.res create mode 100644 LibD28/FMXfrxFDReg.dcr create mode 100644 LibD28/FMXfrxIBX16.dpk create mode 100644 LibD28/FMXfrxIBX16.res create mode 100644 LibD28/FMXfrxIBX17.dpk create mode 100644 LibD28/FMXfrxIBX17.res create mode 100644 LibD28/FMXfrxIBX18.dpk create mode 100644 LibD28/FMXfrxIBX18.res create mode 100644 LibD28/FMXfrxIBX19.dpk create mode 100644 LibD28/FMXfrxIBX19.res create mode 100644 LibD28/FMXfrxIBX20.dpk create mode 100644 LibD28/FMXfrxIBX20.res create mode 100644 LibD28/FMXfrxIBX21.dpk create mode 100644 LibD28/FMXfrxIBX21.res create mode 100644 LibD28/FMXfrxIBX22.dpk create mode 100644 LibD28/FMXfrxIBX22.res create mode 100644 LibD28/FMXfrxIBX23.dpk create mode 100644 LibD28/FMXfrxIBX23.res create mode 100644 LibD28/FMXfrxIBX24.dpk create mode 100644 LibD28/FMXfrxIBX24.res create mode 100644 LibD28/FMXfrxIBX25.dpk create mode 100644 LibD28/FMXfrxIBX25.res create mode 100644 LibD28/FMXfrxIBX26.dpk create mode 100644 LibD28/FMXfrxIBX27.dpk create mode 100644 LibD28/FMXfrxIBX28.dpk create mode 100644 LibD28/FMXfrxIBXReg.dcr create mode 100644 LibD28/FMXfrxIBXReg.pas create mode 100644 LibD28/FMXfrxReg.pas create mode 100644 LibD28/FMXfrxRegCtrls.pas create mode 100644 LibD28/FMXfrxRegDB.pas create mode 100644 LibD28/FMXfrxRegTee.pas create mode 100644 LibD28/FMXfrxTee16.dpk create mode 100644 LibD28/FMXfrxTee16.otares create mode 100644 LibD28/FMXfrxTee16.res create mode 100644 LibD28/FMXfrxTee17.dpk create mode 100644 LibD28/FMXfrxTee17.otares create mode 100644 LibD28/FMXfrxTee17.res create mode 100644 LibD28/FMXfrxTee18.dpk create mode 100644 LibD28/FMXfrxTee18.otares create mode 100644 LibD28/FMXfrxTee18.res create mode 100644 LibD28/FMXfrxTee19.dpk create mode 100644 LibD28/FMXfrxTee19.otares create mode 100644 LibD28/FMXfrxTee19.res create mode 100644 LibD28/FMXfrxTee20.dpk create mode 100644 LibD28/FMXfrxTee20.otares create mode 100644 LibD28/FMXfrxTee20.res create mode 100644 LibD28/FMXfrxTee21.dpk create mode 100644 LibD28/FMXfrxTee21.otares create mode 100644 LibD28/FMXfrxTee21.res create mode 100644 LibD28/FMXfrxTee22.dpk create mode 100644 LibD28/FMXfrxTee22.otares create mode 100644 LibD28/FMXfrxTee22.res create mode 100644 LibD28/FMXfrxTee23.dpk create mode 100644 LibD28/FMXfrxTee23.otares create mode 100644 LibD28/FMXfrxTee23.res create mode 100644 LibD28/FMXfrxTee24.dpk create mode 100644 LibD28/FMXfrxTee24.dproj create mode 100644 LibD28/FMXfrxTee24.otares create mode 100644 LibD28/FMXfrxTee24.res create mode 100644 LibD28/FMXfrxTee25.dpk create mode 100644 LibD28/FMXfrxTee25.otares create mode 100644 LibD28/FMXfrxTee25.res create mode 100644 LibD28/FMXfrxTee26.dpk create mode 100644 LibD28/FMXfrxTee27.dpk create mode 100644 LibD28/FMXfrxTee28.dproj create mode 100644 LibD28/FMXfrxTee29.dpk create mode 100644 LibD28/FMXfrxTee29.dproj create mode 100644 LibD28/FMXfrxTee29.res create mode 100644 LibD28/FMXfrxe16.dpk create mode 100644 LibD28/FMXfrxe16.otares create mode 100644 LibD28/FMXfrxe16.res create mode 100644 LibD28/FMXfrxe17.dpk create mode 100644 LibD28/FMXfrxe17.otares create mode 100644 LibD28/FMXfrxe17.res create mode 100644 LibD28/FMXfrxe18.dpk create mode 100644 LibD28/FMXfrxe18.otares create mode 100644 LibD28/FMXfrxe18.res create mode 100644 LibD28/FMXfrxe19.dpk create mode 100644 LibD28/FMXfrxe19.otares create mode 100644 LibD28/FMXfrxe19.res create mode 100644 LibD28/FMXfrxe20.dpk create mode 100644 LibD28/FMXfrxe20.otares create mode 100644 LibD28/FMXfrxe20.res create mode 100644 LibD28/FMXfrxe21.dpk create mode 100644 LibD28/FMXfrxe21.otares create mode 100644 LibD28/FMXfrxe21.res create mode 100644 LibD28/FMXfrxe22.dpk create mode 100644 LibD28/FMXfrxe22.otares create mode 100644 LibD28/FMXfrxe22.res create mode 100644 LibD28/FMXfrxe23.dpk create mode 100644 LibD28/FMXfrxe23.otares create mode 100644 LibD28/FMXfrxe23.res create mode 100644 LibD28/FMXfrxe24.dpk create mode 100644 LibD28/FMXfrxe24.dproj create mode 100644 LibD28/FMXfrxe24.otares create mode 100644 LibD28/FMXfrxe24.res create mode 100644 LibD28/FMXfrxe25.dpk create mode 100644 LibD28/FMXfrxe25.otares create mode 100644 LibD28/FMXfrxe25.res create mode 100644 LibD28/FMXfrxe26.dpk create mode 100644 LibD28/FMXfrxe27.dpk create mode 100644 LibD28/FMXfrxe29.dpk create mode 100644 LibD28/FMXfrxeReg.pas create mode 100644 LibD28/FMXfs16.dpk create mode 100644 LibD28/FMXfs16.res create mode 100644 LibD28/FMXfs17.dpk create mode 100644 LibD28/FMXfs17.res create mode 100644 LibD28/FMXfs18.dpk create mode 100644 LibD28/FMXfs18.otares create mode 100644 LibD28/FMXfs18.res create mode 100644 LibD28/FMXfs19.dpk create mode 100644 LibD28/FMXfs19.otares create mode 100644 LibD28/FMXfs19.res create mode 100644 LibD28/FMXfs20.dpk create mode 100644 LibD28/FMXfs20.otares create mode 100644 LibD28/FMXfs20.res create mode 100644 LibD28/FMXfs21.dpk create mode 100644 LibD28/FMXfs21.otares create mode 100644 LibD28/FMXfs21.res create mode 100644 LibD28/FMXfs22.dpk create mode 100644 LibD28/FMXfs22.otares create mode 100644 LibD28/FMXfs22.res create mode 100644 LibD28/FMXfs23.dpk create mode 100644 LibD28/FMXfs23.otares create mode 100644 LibD28/FMXfs23.res create mode 100644 LibD28/FMXfs24.dpk create mode 100644 LibD28/FMXfs24.otares create mode 100644 LibD28/FMXfs24.res create mode 100644 LibD28/FMXfs25.dpk create mode 100644 LibD28/FMXfs25.otares create mode 100644 LibD28/FMXfs25.res create mode 100644 LibD28/FMXfs26.dpk create mode 100644 LibD28/FMXfs27.dpk create mode 100644 LibD28/FMXfs28.dpk create mode 100644 LibD28/FMXfs29.dpk create mode 100644 LibD28/FMXfs29.dproj create mode 100644 LibD28/FMXfs29.res create mode 100644 LibD28/FMXfsADO16.dpk create mode 100644 LibD28/FMXfsADO16.res create mode 100644 LibD28/FMXfsADO17.dpk create mode 100644 LibD28/FMXfsADO17.res create mode 100644 LibD28/FMXfsADO18.dpk create mode 100644 LibD28/FMXfsADO18.res create mode 100644 LibD28/FMXfsADO19.dpk create mode 100644 LibD28/FMXfsADO19.res create mode 100644 LibD28/FMXfsADO20.dpk create mode 100644 LibD28/FMXfsADO20.res create mode 100644 LibD28/FMXfsADO21.dpk create mode 100644 LibD28/FMXfsADO21.res create mode 100644 LibD28/FMXfsADO22.dpk create mode 100644 LibD28/FMXfsADO22.res create mode 100644 LibD28/FMXfsADO23.dpk create mode 100644 LibD28/FMXfsADO23.res create mode 100644 LibD28/FMXfsADO24.dpk create mode 100644 LibD28/FMXfsADO24.res create mode 100644 LibD28/FMXfsADO25.dpk create mode 100644 LibD28/FMXfsADO25.res create mode 100644 LibD28/FMXfsADO26.dpk create mode 100644 LibD28/FMXfsADO27.dpk create mode 100644 LibD28/FMXfsADO28.dpk create mode 100644 LibD28/FMXfsADO29.dpk create mode 100644 LibD28/FMXfsDB16.dpk create mode 100644 LibD28/FMXfsDB16.res create mode 100644 LibD28/FMXfsDB17.dpk create mode 100644 LibD28/FMXfsDB17.res create mode 100644 LibD28/FMXfsDB18.dpk create mode 100644 LibD28/FMXfsDB18.otares create mode 100644 LibD28/FMXfsDB18.res create mode 100644 LibD28/FMXfsDB19.dpk create mode 100644 LibD28/FMXfsDB19.otares create mode 100644 LibD28/FMXfsDB19.res create mode 100644 LibD28/FMXfsDB20.dpk create mode 100644 LibD28/FMXfsDB20.otares create mode 100644 LibD28/FMXfsDB20.res create mode 100644 LibD28/FMXfsDB21.dpk create mode 100644 LibD28/FMXfsDB21.otares create mode 100644 LibD28/FMXfsDB21.res create mode 100644 LibD28/FMXfsDB22.dpk create mode 100644 LibD28/FMXfsDB22.otares create mode 100644 LibD28/FMXfsDB22.res create mode 100644 LibD28/FMXfsDB23.dpk create mode 100644 LibD28/FMXfsDB23.otares create mode 100644 LibD28/FMXfsDB23.res create mode 100644 LibD28/FMXfsDB24.dpk create mode 100644 LibD28/FMXfsDB24.otares create mode 100644 LibD28/FMXfsDB24.res create mode 100644 LibD28/FMXfsDB25.dpk create mode 100644 LibD28/FMXfsDB25.otares create mode 100644 LibD28/FMXfsDB25.res create mode 100644 LibD28/FMXfsDB26.dpk create mode 100644 LibD28/FMXfsDB27.dpk create mode 100644 LibD28/FMXfsDB28.dpk create mode 100644 LibD28/FMXfsDB29.dpk create mode 100644 LibD28/FMXfsDB29.dproj create mode 100644 LibD28/FMXfsDB29.res create mode 100644 LibD28/FMXfsIBX16.dpk create mode 100644 LibD28/FMXfsIBX16.res create mode 100644 LibD28/FMXfsIBX17.dpk create mode 100644 LibD28/FMXfsIBX17.res create mode 100644 LibD28/FMXfsIBX18.dpk create mode 100644 LibD28/FMXfsIBX18.res create mode 100644 LibD28/FMXfsIBX19.dpk create mode 100644 LibD28/FMXfsIBX19.res create mode 100644 LibD28/FMXfsIBX20.dpk create mode 100644 LibD28/FMXfsIBX20.res create mode 100644 LibD28/FMXfsIBX21.dpk create mode 100644 LibD28/FMXfsIBX21.res create mode 100644 LibD28/FMXfsIBX22.dpk create mode 100644 LibD28/FMXfsIBX22.res create mode 100644 LibD28/FMXfsIBX23.dpk create mode 100644 LibD28/FMXfsIBX23.res create mode 100644 LibD28/FMXfsIBX24.dpk create mode 100644 LibD28/FMXfsIBX24.res create mode 100644 LibD28/FMXfsIBX25.dpk create mode 100644 LibD28/FMXfsIBX25.res create mode 100644 LibD28/FMXfsIBX26.dpk create mode 100644 LibD28/FMXfsIBX27.dpk create mode 100644 LibD28/FMXfsIBX28.dpk create mode 100644 LibD28/FMXfsIBX29.dpk create mode 100644 LibD28/FMXfsTee16.dpk create mode 100644 LibD28/FMXfsTee16.res create mode 100644 LibD28/FMXfsTee17.dpk create mode 100644 LibD28/FMXfsTee17.res create mode 100644 LibD28/FMXfsTee18.dpk create mode 100644 LibD28/FMXfsTee18.res create mode 100644 LibD28/FMXfsTee19.dpk create mode 100644 LibD28/FMXfsTee19.res create mode 100644 LibD28/FMXfsTee20.dpk create mode 100644 LibD28/FMXfsTee20.res create mode 100644 LibD28/FMXfsTee21.dpk create mode 100644 LibD28/FMXfsTee21.res create mode 100644 LibD28/FMXfsTee22.dpk create mode 100644 LibD28/FMXfsTee22.res create mode 100644 LibD28/FMXfsTee23.dpk create mode 100644 LibD28/FMXfsTee23.res create mode 100644 LibD28/FMXfsTee24.dpk create mode 100644 LibD28/FMXfsTee24.res create mode 100644 LibD28/FMXfsTee25.dpk create mode 100644 LibD28/FMXfsTee25.res create mode 100644 LibD28/FMXfsTee26.dpk create mode 100644 LibD28/FMXfsTee27.dpk create mode 100644 LibD28/FMXfsTee28.dpk create mode 100644 LibD28/FMXfsTee29.dpk create mode 100644 LibD28/FMXfsTee29.dproj create mode 100644 LibD28/FMXfsTee29.res create mode 100644 LibD28/FMXfs_iadoreg.pas create mode 100644 LibD28/FMXfs_idbreg.pas create mode 100644 LibD28/FMXfs_iibxreg.pas create mode 100644 LibD28/FMXfs_ireg.pas create mode 100644 LibD28/FMXfs_iteereg.pas create mode 100644 LibD28/FmxLinuxFrxDBX.dpr create mode 100644 LibD28/FmxLinuxFrxExp.dpr create mode 100644 LibD28/FmxLinuxFrxFD.dpr create mode 100644 LibD28/FmxLinuxFrxIBX.dpr create mode 100644 LibD28/FmxLinuxFrxLang.dpr create mode 100644 LibD28/FmxLinuxFrxMain.dpr create mode 100644 LibD28/FmxLinuxFrxTee.dpr create mode 100644 LibD28/ProjectGroup1.groupproj create mode 100644 LibD28/dclFMXfrx16.dpk create mode 100644 LibD28/dclFMXfrx16.res create mode 100644 LibD28/dclFMXfrx17.dpk create mode 100644 LibD28/dclFMXfrx17.res create mode 100644 LibD28/dclFMXfrx18.dpk create mode 100644 LibD28/dclFMXfrx18.res create mode 100644 LibD28/dclFMXfrx19.dpk create mode 100644 LibD28/dclFMXfrx19.res create mode 100644 LibD28/dclFMXfrx20.dpk create mode 100644 LibD28/dclFMXfrx20.res create mode 100644 LibD28/dclFMXfrx21.dpk create mode 100644 LibD28/dclFMXfrx21.res create mode 100644 LibD28/dclFMXfrx22.dpk create mode 100644 LibD28/dclFMXfrx22.res create mode 100644 LibD28/dclFMXfrx23.dpk create mode 100644 LibD28/dclFMXfrx23.res create mode 100644 LibD28/dclFMXfrx24.dpk create mode 100644 LibD28/dclFMXfrx24.res create mode 100644 LibD28/dclFMXfrx25.dpk create mode 100644 LibD28/dclFMXfrx25.otares create mode 100644 LibD28/dclFMXfrx25.res create mode 100644 LibD28/dclFMXfrx26.dpk create mode 100644 LibD28/dclFMXfrx27.dpk create mode 100644 LibD28/dclFMXfrx29.dpk create mode 100644 LibD28/dclFMXfrx29.dproj create mode 100644 LibD28/dclFMXfrx29.res create mode 100644 LibD28/dclFMXfrxADO16.dpk create mode 100644 LibD28/dclFMXfrxADO16.res create mode 100644 LibD28/dclFMXfrxADO17.dpk create mode 100644 LibD28/dclFMXfrxADO17.res create mode 100644 LibD28/dclFMXfrxADO18.dpk create mode 100644 LibD28/dclFMXfrxADO18.res create mode 100644 LibD28/dclFMXfrxADO19.dpk create mode 100644 LibD28/dclFMXfrxADO19.res create mode 100644 LibD28/dclFMXfrxADO20.dpk create mode 100644 LibD28/dclFMXfrxADO20.res create mode 100644 LibD28/dclFMXfrxADO21.dpk create mode 100644 LibD28/dclFMXfrxADO21.res create mode 100644 LibD28/dclFMXfrxADO22.dpk create mode 100644 LibD28/dclFMXfrxADO22.res create mode 100644 LibD28/dclFMXfrxADO23.dpk create mode 100644 LibD28/dclFMXfrxADO23.res create mode 100644 LibD28/dclFMXfrxADO24.dpk create mode 100644 LibD28/dclFMXfrxADO24.res create mode 100644 LibD28/dclFMXfrxADO25.dpk create mode 100644 LibD28/dclFMXfrxADO25.res create mode 100644 LibD28/dclFMXfrxADO26.dpk create mode 100644 LibD28/dclFMXfrxADO27.dpk create mode 100644 LibD28/dclFMXfrxADO28.dpk create mode 100644 LibD28/dclFMXfrxADO29.dpk create mode 100644 LibD28/dclFMXfrxDB16.dpk create mode 100644 LibD28/dclFMXfrxDB16.res create mode 100644 LibD28/dclFMXfrxDB17.dpk create mode 100644 LibD28/dclFMXfrxDB17.res create mode 100644 LibD28/dclFMXfrxDB18.dpk create mode 100644 LibD28/dclFMXfrxDB18.res create mode 100644 LibD28/dclFMXfrxDB19.dpk create mode 100644 LibD28/dclFMXfrxDB19.res create mode 100644 LibD28/dclFMXfrxDB20.dpk create mode 100644 LibD28/dclFMXfrxDB20.res create mode 100644 LibD28/dclFMXfrxDB21.dpk create mode 100644 LibD28/dclFMXfrxDB21.res create mode 100644 LibD28/dclFMXfrxDB22.dpk create mode 100644 LibD28/dclFMXfrxDB22.res create mode 100644 LibD28/dclFMXfrxDB23.dpk create mode 100644 LibD28/dclFMXfrxDB23.res create mode 100644 LibD28/dclFMXfrxDB24.dpk create mode 100644 LibD28/dclFMXfrxDB24.res create mode 100644 LibD28/dclFMXfrxDB25.dpk create mode 100644 LibD28/dclFMXfrxDB25.otares create mode 100644 LibD28/dclFMXfrxDB25.res create mode 100644 LibD28/dclFMXfrxDB26.dpk create mode 100644 LibD28/dclFMXfrxDB27.dpk create mode 100644 LibD28/dclFMXfrxDB29.dpk create mode 100644 LibD28/dclFMXfrxDB29.dproj create mode 100644 LibD28/dclFMXfrxDB29.res create mode 100644 LibD28/dclFMXfrxDBX16.dpk create mode 100644 LibD28/dclFMXfrxDBX16.res create mode 100644 LibD28/dclFMXfrxDBX17.dpk create mode 100644 LibD28/dclFMXfrxDBX17.res create mode 100644 LibD28/dclFMXfrxDBX18.dpk create mode 100644 LibD28/dclFMXfrxDBX18.res create mode 100644 LibD28/dclFMXfrxDBX19.dpk create mode 100644 LibD28/dclFMXfrxDBX19.res create mode 100644 LibD28/dclFMXfrxDBX20.dpk create mode 100644 LibD28/dclFMXfrxDBX20.res create mode 100644 LibD28/dclFMXfrxDBX21.dpk create mode 100644 LibD28/dclFMXfrxDBX21.res create mode 100644 LibD28/dclFMXfrxDBX22.dpk create mode 100644 LibD28/dclFMXfrxDBX22.res create mode 100644 LibD28/dclFMXfrxDBX23.dpk create mode 100644 LibD28/dclFMXfrxDBX23.res create mode 100644 LibD28/dclFMXfrxDBX24.dpk create mode 100644 LibD28/dclFMXfrxDBX24.res create mode 100644 LibD28/dclFMXfrxDBX25.dpk create mode 100644 LibD28/dclFMXfrxDBX25.res create mode 100644 LibD28/dclFMXfrxDBX26.dpk create mode 100644 LibD28/dclFMXfrxDBX27.dpk create mode 100644 LibD28/dclFMXfrxDBX28.dproj create mode 100644 LibD28/dclFMXfrxDBX29.dpk create mode 100644 LibD28/dclFMXfrxDBX29.dproj create mode 100644 LibD28/dclFMXfrxDBX29.res create mode 100644 LibD28/dclFMXfrxFD18.dpk create mode 100644 LibD28/dclFMXfrxFD18.res create mode 100644 LibD28/dclFMXfrxFD19.dpk create mode 100644 LibD28/dclFMXfrxFD19.res create mode 100644 LibD28/dclFMXfrxFD20.dpk create mode 100644 LibD28/dclFMXfrxFD20.res create mode 100644 LibD28/dclFMXfrxFD21.dpk create mode 100644 LibD28/dclFMXfrxFD21.res create mode 100644 LibD28/dclFMXfrxFD22.dpk create mode 100644 LibD28/dclFMXfrxFD22.res create mode 100644 LibD28/dclFMXfrxFD23.dpk create mode 100644 LibD28/dclFMXfrxFD23.res create mode 100644 LibD28/dclFMXfrxFD24.dpk create mode 100644 LibD28/dclFMXfrxFD24.res create mode 100644 LibD28/dclFMXfrxFD25.dpk create mode 100644 LibD28/dclFMXfrxFD25.res create mode 100644 LibD28/dclFMXfrxFD26.dpk create mode 100644 LibD28/dclFMXfrxFD27.dpk create mode 100644 LibD28/dclFMXfrxFD29.dpk create mode 100644 LibD28/dclFMXfrxFD29.dproj create mode 100644 LibD28/dclFMXfrxFD29.res create mode 100644 LibD28/dclFMXfrxIBX16.dpk create mode 100644 LibD28/dclFMXfrxIBX16.res create mode 100644 LibD28/dclFMXfrxIBX17.dpk create mode 100644 LibD28/dclFMXfrxIBX17.res create mode 100644 LibD28/dclFMXfrxIBX18.dpk create mode 100644 LibD28/dclFMXfrxIBX18.res create mode 100644 LibD28/dclFMXfrxIBX19.dpk create mode 100644 LibD28/dclFMXfrxIBX19.res create mode 100644 LibD28/dclFMXfrxIBX20.dpk create mode 100644 LibD28/dclFMXfrxIBX20.res create mode 100644 LibD28/dclFMXfrxIBX21.dpk create mode 100644 LibD28/dclFMXfrxIBX21.res create mode 100644 LibD28/dclFMXfrxIBX22.dpk create mode 100644 LibD28/dclFMXfrxIBX22.res create mode 100644 LibD28/dclFMXfrxIBX23.dpk create mode 100644 LibD28/dclFMXfrxIBX23.res create mode 100644 LibD28/dclFMXfrxIBX24.dpk create mode 100644 LibD28/dclFMXfrxIBX24.res create mode 100644 LibD28/dclFMXfrxIBX25.dpk create mode 100644 LibD28/dclFMXfrxIBX25.res create mode 100644 LibD28/dclFMXfrxIBX26.dpk create mode 100644 LibD28/dclFMXfrxIBX27.dpk create mode 100644 LibD28/dclFMXfrxIBX28.dpk create mode 100644 LibD28/dclFMXfrxTee16.dpk create mode 100644 LibD28/dclFMXfrxTee16.res create mode 100644 LibD28/dclFMXfrxTee17.dpk create mode 100644 LibD28/dclFMXfrxTee17.res create mode 100644 LibD28/dclFMXfrxTee18.dpk create mode 100644 LibD28/dclFMXfrxTee18.res create mode 100644 LibD28/dclFMXfrxTee19.dpk create mode 100644 LibD28/dclFMXfrxTee19.res create mode 100644 LibD28/dclFMXfrxTee20.dpk create mode 100644 LibD28/dclFMXfrxTee20.res create mode 100644 LibD28/dclFMXfrxTee21.dpk create mode 100644 LibD28/dclFMXfrxTee21.res create mode 100644 LibD28/dclFMXfrxTee22.dpk create mode 100644 LibD28/dclFMXfrxTee22.res create mode 100644 LibD28/dclFMXfrxTee23.dpk create mode 100644 LibD28/dclFMXfrxTee23.res create mode 100644 LibD28/dclFMXfrxTee24.dpk create mode 100644 LibD28/dclFMXfrxTee24.res create mode 100644 LibD28/dclFMXfrxTee25.dpk create mode 100644 LibD28/dclFMXfrxTee25.otares create mode 100644 LibD28/dclFMXfrxTee25.res create mode 100644 LibD28/dclFMXfrxTee26.dpk create mode 100644 LibD28/dclFMXfrxTee27.dpk create mode 100644 LibD28/dclFMXfrxTee29.dpk create mode 100644 LibD28/dclFMXfrxTee29.dproj create mode 100644 LibD28/dclFMXfrxTee29.res create mode 100644 LibD28/dclFMXfrxe16.dpk create mode 100644 LibD28/dclFMXfrxe16.res create mode 100644 LibD28/dclFMXfrxe17.dpk create mode 100644 LibD28/dclFMXfrxe17.res create mode 100644 LibD28/dclFMXfrxe18.dpk create mode 100644 LibD28/dclFMXfrxe18.res create mode 100644 LibD28/dclFMXfrxe19.dpk create mode 100644 LibD28/dclFMXfrxe19.res create mode 100644 LibD28/dclFMXfrxe20.dpk create mode 100644 LibD28/dclFMXfrxe20.res create mode 100644 LibD28/dclFMXfrxe21.dpk create mode 100644 LibD28/dclFMXfrxe21.res create mode 100644 LibD28/dclFMXfrxe22.dpk create mode 100644 LibD28/dclFMXfrxe22.res create mode 100644 LibD28/dclFMXfrxe23.dpk create mode 100644 LibD28/dclFMXfrxe23.res create mode 100644 LibD28/dclFMXfrxe24.dpk create mode 100644 LibD28/dclFMXfrxe24.dproj create mode 100644 LibD28/dclFMXfrxe24.otares create mode 100644 LibD28/dclFMXfrxe24.res create mode 100644 LibD28/dclFMXfrxe25.dpk create mode 100644 LibD28/dclFMXfrxe25.otares create mode 100644 LibD28/dclFMXfrxe25.res create mode 100644 LibD28/dclFMXfrxe26.dpk create mode 100644 LibD28/dclFMXfrxe27.dpk create mode 100644 LibD28/dclFMXfrxe29.dpk create mode 100644 LibD28/dclFMXfrxe29.dproj create mode 100644 LibD28/dclFMXfs16.dpk create mode 100644 LibD28/dclFMXfs16.res create mode 100644 LibD28/dclFMXfs17.dpk create mode 100644 LibD28/dclFMXfs17.res create mode 100644 LibD28/dclFMXfs18.dpk create mode 100644 LibD28/dclFMXfs18.otares create mode 100644 LibD28/dclFMXfs18.res create mode 100644 LibD28/dclFMXfs19.dpk create mode 100644 LibD28/dclFMXfs19.otares create mode 100644 LibD28/dclFMXfs19.res create mode 100644 LibD28/dclFMXfs20.dpk create mode 100644 LibD28/dclFMXfs20.otares create mode 100644 LibD28/dclFMXfs20.res create mode 100644 LibD28/dclFMXfs21.dpk create mode 100644 LibD28/dclFMXfs21.otares create mode 100644 LibD28/dclFMXfs21.res create mode 100644 LibD28/dclFMXfs22.dpk create mode 100644 LibD28/dclFMXfs22.otares create mode 100644 LibD28/dclFMXfs22.res create mode 100644 LibD28/dclFMXfs23.dpk create mode 100644 LibD28/dclFMXfs23.otares create mode 100644 LibD28/dclFMXfs23.res create mode 100644 LibD28/dclFMXfs24.dpk create mode 100644 LibD28/dclFMXfs24.otares create mode 100644 LibD28/dclFMXfs24.res create mode 100644 LibD28/dclFMXfs25.dpk create mode 100644 LibD28/dclFMXfs25.otares create mode 100644 LibD28/dclFMXfs25.res create mode 100644 LibD28/dclFMXfs26.dpk create mode 100644 LibD28/dclFMXfs27.dpk create mode 100644 LibD28/dclFMXfs28.dpk create mode 100644 LibD28/dclFMXfs29.dpk create mode 100644 LibD28/dclFMXfs29.dproj create mode 100644 LibD28/dclFMXfs29.res create mode 100644 LibD28/dclFMXfsADO16.dpk create mode 100644 LibD28/dclFMXfsADO16.res create mode 100644 LibD28/dclFMXfsADO17.dpk create mode 100644 LibD28/dclFMXfsADO17.res create mode 100644 LibD28/dclFMXfsADO18.dpk create mode 100644 LibD28/dclFMXfsADO18.res create mode 100644 LibD28/dclFMXfsADO19.dpk create mode 100644 LibD28/dclFMXfsADO19.res create mode 100644 LibD28/dclFMXfsADO20.dpk create mode 100644 LibD28/dclFMXfsADO20.res create mode 100644 LibD28/dclFMXfsADO21.dpk create mode 100644 LibD28/dclFMXfsADO21.res create mode 100644 LibD28/dclFMXfsADO22.dpk create mode 100644 LibD28/dclFMXfsADO22.res create mode 100644 LibD28/dclFMXfsADO23.dpk create mode 100644 LibD28/dclFMXfsADO23.res create mode 100644 LibD28/dclFMXfsADO24.dpk create mode 100644 LibD28/dclFMXfsADO24.res create mode 100644 LibD28/dclFMXfsADO25.dpk create mode 100644 LibD28/dclFMXfsADO25.res create mode 100644 LibD28/dclFMXfsADO26.dpk create mode 100644 LibD28/dclFMXfsADO27.dpk create mode 100644 LibD28/dclFMXfsADO28.dpk create mode 100644 LibD28/dclFMXfsADO29.dpk create mode 100644 LibD28/dclFMXfsDB16.dpk create mode 100644 LibD28/dclFMXfsDB16.res create mode 100644 LibD28/dclFMXfsDB17.dpk create mode 100644 LibD28/dclFMXfsDB17.res create mode 100644 LibD28/dclFMXfsDB18.dpk create mode 100644 LibD28/dclFMXfsDB18.otares create mode 100644 LibD28/dclFMXfsDB18.res create mode 100644 LibD28/dclFMXfsDB19.dpk create mode 100644 LibD28/dclFMXfsDB19.otares create mode 100644 LibD28/dclFMXfsDB19.res create mode 100644 LibD28/dclFMXfsDB20.dpk create mode 100644 LibD28/dclFMXfsDB20.otares create mode 100644 LibD28/dclFMXfsDB20.res create mode 100644 LibD28/dclFMXfsDB21.dpk create mode 100644 LibD28/dclFMXfsDB21.otares create mode 100644 LibD28/dclFMXfsDB21.res create mode 100644 LibD28/dclFMXfsDB22.dpk create mode 100644 LibD28/dclFMXfsDB22.otares create mode 100644 LibD28/dclFMXfsDB22.res create mode 100644 LibD28/dclFMXfsDB23.dpk create mode 100644 LibD28/dclFMXfsDB23.otares create mode 100644 LibD28/dclFMXfsDB23.res create mode 100644 LibD28/dclFMXfsDB24.dpk create mode 100644 LibD28/dclFMXfsDB24.otares create mode 100644 LibD28/dclFMXfsDB24.res create mode 100644 LibD28/dclFMXfsDB25.dpk create mode 100644 LibD28/dclFMXfsDB25.otares create mode 100644 LibD28/dclFMXfsDB25.res create mode 100644 LibD28/dclFMXfsDB26.dpk create mode 100644 LibD28/dclFMXfsDB27.dpk create mode 100644 LibD28/dclFMXfsDB28.dpk create mode 100644 LibD28/dclFMXfsDB29.dpk create mode 100644 LibD28/dclFMXfsDB29.dproj create mode 100644 LibD28/dclFMXfsDB29.res create mode 100644 LibD28/dclFMXfsIBX16.dpk create mode 100644 LibD28/dclFMXfsIBX16.res create mode 100644 LibD28/dclFMXfsIBX17.dpk create mode 100644 LibD28/dclFMXfsIBX17.res create mode 100644 LibD28/dclFMXfsIBX18.dpk create mode 100644 LibD28/dclFMXfsIBX18.res create mode 100644 LibD28/dclFMXfsIBX19.dpk create mode 100644 LibD28/dclFMXfsIBX19.res create mode 100644 LibD28/dclFMXfsIBX20.dpk create mode 100644 LibD28/dclFMXfsIBX20.res create mode 100644 LibD28/dclFMXfsIBX21.dpk create mode 100644 LibD28/dclFMXfsIBX21.res create mode 100644 LibD28/dclFMXfsIBX22.dpk create mode 100644 LibD28/dclFMXfsIBX22.res create mode 100644 LibD28/dclFMXfsIBX23.dpk create mode 100644 LibD28/dclFMXfsIBX23.res create mode 100644 LibD28/dclFMXfsIBX24.dpk create mode 100644 LibD28/dclFMXfsIBX24.res create mode 100644 LibD28/dclFMXfsIBX25.dpk create mode 100644 LibD28/dclFMXfsIBX25.res create mode 100644 LibD28/dclFMXfsIBX26.dpk create mode 100644 LibD28/dclFMXfsIBX27.dpk create mode 100644 LibD28/dclFMXfsIBX28.dpk create mode 100644 LibD28/dclFMXfsIBX29.dpk create mode 100644 LibD28/dclFMXfsTee16.dpk create mode 100644 LibD28/dclFMXfsTee16.res create mode 100644 LibD28/dclFMXfsTee17.dpk create mode 100644 LibD28/dclFMXfsTee17.res create mode 100644 LibD28/dclFMXfsTee18.dpk create mode 100644 LibD28/dclFMXfsTee18.res create mode 100644 LibD28/dclFMXfsTee19.dpk create mode 100644 LibD28/dclFMXfsTee19.res create mode 100644 LibD28/dclFMXfsTee20.dpk create mode 100644 LibD28/dclFMXfsTee20.res create mode 100644 LibD28/dclFMXfsTee21.dpk create mode 100644 LibD28/dclFMXfsTee21.res create mode 100644 LibD28/dclFMXfsTee22.dpk create mode 100644 LibD28/dclFMXfsTee22.res create mode 100644 LibD28/dclFMXfsTee23.dpk create mode 100644 LibD28/dclFMXfsTee23.res create mode 100644 LibD28/dclFMXfsTee24.dpk create mode 100644 LibD28/dclFMXfsTee24.res create mode 100644 LibD28/dclFMXfsTee25.dpk create mode 100644 LibD28/dclFMXfsTee25.res create mode 100644 LibD28/dclFMXfsTee26.dpk create mode 100644 LibD28/dclFMXfsTee27.dpk create mode 100644 LibD28/dclFMXfsTee28.dpk create mode 100644 LibD28/dclFMXfsTee29.dpk create mode 100644 LibD28/dclFMXfsTee29.dproj create mode 100644 LibD28/dclFMXfsTee29.res create mode 100644 LibD28/dclfs10.dpk create mode 100644 LibD28/dclfs11.dpk create mode 100644 LibD28/dclfs12.dpk create mode 100644 LibD28/dclfs14.dpk create mode 100644 LibD28/dclfs15.dpk create mode 100644 LibD28/dclfs16.dpk create mode 100644 LibD28/dclfs17.dpk create mode 100644 LibD28/dclfs18.dpk create mode 100644 LibD28/dclfs19.dpk create mode 100644 LibD28/dclfs20.dpk create mode 100644 LibD28/dclfs21.dpk create mode 100644 LibD28/dclfs22.dpk create mode 100644 LibD28/dclfs23.dpk create mode 100644 LibD28/dclfs24.dpk create mode 100644 LibD28/dclfs25.dpk create mode 100644 LibD28/dclfs26.dpk create mode 100644 LibD28/dclfs27.dpk create mode 100644 LibD28/dclfs28.dpk create mode 100644 LibD28/dclfs29.dpk create mode 100644 LibD28/dclfs29.dproj create mode 100644 LibD28/dclfs29.res create mode 100644 LibD28/dclfs4.dpk create mode 100644 LibD28/dclfs5.dpk create mode 100644 LibD28/dclfs6.dpk create mode 100644 LibD28/dclfs7.dpk create mode 100644 LibD28/dclfs9.dpk create mode 100644 LibD28/dclfsADO10.dpk create mode 100644 LibD28/dclfsADO11.dpk create mode 100644 LibD28/dclfsADO12.dpk create mode 100644 LibD28/dclfsADO14.dpk create mode 100644 LibD28/dclfsADO15.dpk create mode 100644 LibD28/dclfsADO16.dpk create mode 100644 LibD28/dclfsADO17.dpk create mode 100644 LibD28/dclfsADO18.dpk create mode 100644 LibD28/dclfsADO19.dpk create mode 100644 LibD28/dclfsADO20.dpk create mode 100644 LibD28/dclfsADO21.dpk create mode 100644 LibD28/dclfsADO22.dpk create mode 100644 LibD28/dclfsADO23.dpk create mode 100644 LibD28/dclfsADO24.dpk create mode 100644 LibD28/dclfsADO25.dpk create mode 100644 LibD28/dclfsADO26.dpk create mode 100644 LibD28/dclfsADO27.dpk create mode 100644 LibD28/dclfsADO28.dpk create mode 100644 LibD28/dclfsADO29.dpk create mode 100644 LibD28/dclfsADO5.dpk create mode 100644 LibD28/dclfsADO6.dpk create mode 100644 LibD28/dclfsADO7.dpk create mode 100644 LibD28/dclfsADO9.dpk create mode 100644 LibD28/dclfsBDE10.dpk create mode 100644 LibD28/dclfsBDE11.dpk create mode 100644 LibD28/dclfsBDE12.dpk create mode 100644 LibD28/dclfsBDE14.dpk create mode 100644 LibD28/dclfsBDE15.dpk create mode 100644 LibD28/dclfsBDE16.dpk create mode 100644 LibD28/dclfsBDE17.dpk create mode 100644 LibD28/dclfsBDE18.dpk create mode 100644 LibD28/dclfsBDE19.dpk create mode 100644 LibD28/dclfsBDE20.dpk create mode 100644 LibD28/dclfsBDE21.dpk create mode 100644 LibD28/dclfsBDE22.dpk create mode 100644 LibD28/dclfsBDE23.dpk create mode 100644 LibD28/dclfsBDE24.dpk create mode 100644 LibD28/dclfsBDE25.dpk create mode 100644 LibD28/dclfsBDE26.dpk create mode 100644 LibD28/dclfsBDE27.dpk create mode 100644 LibD28/dclfsBDE28.dpk create mode 100644 LibD28/dclfsBDE29.dpk create mode 100644 LibD28/dclfsBDE4.dpk create mode 100644 LibD28/dclfsBDE5.dpk create mode 100644 LibD28/dclfsBDE6.dpk create mode 100644 LibD28/dclfsBDE7.dpk create mode 100644 LibD28/dclfsBDE9.dpk create mode 100644 LibD28/dclfsDB10.dpk create mode 100644 LibD28/dclfsDB11.dpk create mode 100644 LibD28/dclfsDB12.dpk create mode 100644 LibD28/dclfsDB14.dpk create mode 100644 LibD28/dclfsDB15.dpk create mode 100644 LibD28/dclfsDB16.dpk create mode 100644 LibD28/dclfsDB17.dpk create mode 100644 LibD28/dclfsDB18.dpk create mode 100644 LibD28/dclfsDB19.dpk create mode 100644 LibD28/dclfsDB20.dpk create mode 100644 LibD28/dclfsDB21.dpk create mode 100644 LibD28/dclfsDB22.dpk create mode 100644 LibD28/dclfsDB23.dpk create mode 100644 LibD28/dclfsDB24.dpk create mode 100644 LibD28/dclfsDB25.dpk create mode 100644 LibD28/dclfsDB26.dpk create mode 100644 LibD28/dclfsDB27.dpk create mode 100644 LibD28/dclfsDB28.dpk create mode 100644 LibD28/dclfsDB29.dpk create mode 100644 LibD28/dclfsDB29.dproj create mode 100644 LibD28/dclfsDB29.res create mode 100644 LibD28/dclfsDB4.dpk create mode 100644 LibD28/dclfsDB5.dpk create mode 100644 LibD28/dclfsDB6.dpk create mode 100644 LibD28/dclfsDB7.dpk create mode 100644 LibD28/dclfsDB9.dpk create mode 100644 LibD28/dclfsFD15.dpk create mode 100644 LibD28/dclfsFD16.dpk create mode 100644 LibD28/dclfsFD17.dpk create mode 100644 LibD28/dclfsFD18.dpk create mode 100644 LibD28/dclfsFD19.dpk create mode 100644 LibD28/dclfsFD20.dpk create mode 100644 LibD28/dclfsFD21.dpk create mode 100644 LibD28/dclfsFD22.dpk create mode 100644 LibD28/dclfsFD23.dpk create mode 100644 LibD28/dclfsFD24.dpk create mode 100644 LibD28/dclfsFD25.dpk create mode 100644 LibD28/dclfsFD26.dpk create mode 100644 LibD28/dclfsFD27.dpk create mode 100644 LibD28/dclfsFD28.dpk create mode 100644 LibD28/dclfsFD29.dpk create mode 100644 LibD28/dclfsFD29.dproj create mode 100644 LibD28/dclfsFD29.res create mode 100644 LibD28/dclfsIBX10.dpk create mode 100644 LibD28/dclfsIBX11.dpk create mode 100644 LibD28/dclfsIBX12.dpk create mode 100644 LibD28/dclfsIBX14.dpk create mode 100644 LibD28/dclfsIBX15.dpk create mode 100644 LibD28/dclfsIBX16.dpk create mode 100644 LibD28/dclfsIBX17.dpk create mode 100644 LibD28/dclfsIBX18.dpk create mode 100644 LibD28/dclfsIBX19.dpk create mode 100644 LibD28/dclfsIBX20.dpk create mode 100644 LibD28/dclfsIBX21.dpk create mode 100644 LibD28/dclfsIBX22.dpk create mode 100644 LibD28/dclfsIBX23.dpk create mode 100644 LibD28/dclfsIBX24.dpk create mode 100644 LibD28/dclfsIBX25.dpk create mode 100644 LibD28/dclfsIBX26.dpk create mode 100644 LibD28/dclfsIBX27.dpk create mode 100644 LibD28/dclfsIBX28.dpk create mode 100644 LibD28/dclfsIBX29.dpk create mode 100644 LibD28/dclfsIBX5.dpk create mode 100644 LibD28/dclfsIBX6.dpk create mode 100644 LibD28/dclfsIBX7.dpk create mode 100644 LibD28/dclfsIBX9.dpk create mode 100644 LibD28/dclfsTee10.dpk create mode 100644 LibD28/dclfsTee11.dpk create mode 100644 LibD28/dclfsTee12.dpk create mode 100644 LibD28/dclfsTee14.dpk create mode 100644 LibD28/dclfsTee15.dpk create mode 100644 LibD28/dclfsTee16.dpk create mode 100644 LibD28/dclfsTee17.dpk create mode 100644 LibD28/dclfsTee18.dpk create mode 100644 LibD28/dclfsTee19.dpk create mode 100644 LibD28/dclfsTee20.dpk create mode 100644 LibD28/dclfsTee21.dpk create mode 100644 LibD28/dclfsTee22.dpk create mode 100644 LibD28/dclfsTee23.dpk create mode 100644 LibD28/dclfsTee24.dpk create mode 100644 LibD28/dclfsTee25.dpk create mode 100644 LibD28/dclfsTee26.dpk create mode 100644 LibD28/dclfsTee27.dpk create mode 100644 LibD28/dclfsTee28.dpk create mode 100644 LibD28/dclfsTee29.dpk create mode 100644 LibD28/dclfsTee29.dproj create mode 100644 LibD28/dclfsTee29.res create mode 100644 LibD28/dclfsTee4.dpk create mode 100644 LibD28/dclfsTee5.dpk create mode 100644 LibD28/dclfsTee6.dpk create mode 100644 LibD28/dclfsTee7.dpk create mode 100644 LibD28/dclfsTee9.dpk create mode 100644 LibD28/dclfsx.dpk create mode 100644 LibD28/dclfsx.dproj create mode 100644 LibD28/dclfsx.res create mode 100644 LibD28/dclfsx_Icon.ico create mode 100644 LibD28/fmx.frxImageConverter.pas create mode 100644 LibD28/fmx.inc create mode 100644 LibD28/frx.inc create mode 100644 LibD28/frxBarcodeEditor.fmx create mode 100644 LibD28/frxEditSQL.inc create mode 100644 LibD28/frxFMX_PlatformsAttribute.inc create mode 100644 LibD28/frxIBXReg.res create mode 100644 LibD28/frxPlatformsAttribute.inc create mode 100644 LibD28/frxReg.dcr create mode 100644 LibD28/frxVersion.inc create mode 100644 LibD28/frxe16.otares create mode 100644 LibD28/frxeReg.dcr create mode 100644 LibD28/frxrcClass.xml create mode 100644 LibD28/frxrcDesgn.xml create mode 100644 LibD28/frxrcExports.xml create mode 100644 LibD28/frxrcInsp.xml create mode 100644 LibD28/fs.inc create mode 100644 LibD28/fs10.dpk create mode 100644 LibD28/fs11.dpk create mode 100644 LibD28/fs12.dpk create mode 100644 LibD28/fs14.dpk create mode 100644 LibD28/fs15.dpk create mode 100644 LibD28/fs16.dpk create mode 100644 LibD28/fs17.dpk create mode 100644 LibD28/fs18.dpk create mode 100644 LibD28/fs19.dpk create mode 100644 LibD28/fs20.dpk create mode 100644 LibD28/fs21.dpk create mode 100644 LibD28/fs22.dpk create mode 100644 LibD28/fs23.dpk create mode 100644 LibD28/fs24.dpk create mode 100644 LibD28/fs25.dpk create mode 100644 LibD28/fs26.dpk create mode 100644 LibD28/fs27.dpk create mode 100644 LibD28/fs28.dpk create mode 100644 LibD28/fs29.dpk create mode 100644 LibD28/fs29.dproj create mode 100644 LibD28/fs29.res create mode 100644 LibD28/fs4.bpk create mode 100644 LibD28/fs4.cpp create mode 100644 LibD28/fs4.dpk create mode 100644 LibD28/fs4.res create mode 100644 LibD28/fs5.bpk create mode 100644 LibD28/fs5.cpp create mode 100644 LibD28/fs5.dpk create mode 100644 LibD28/fs5.res create mode 100644 LibD28/fs6.bpk create mode 100644 LibD28/fs6.cpp create mode 100644 LibD28/fs6.dpk create mode 100644 LibD28/fs6.res create mode 100644 LibD28/fs7.dpk create mode 100644 LibD28/fs9.dpk create mode 100644 LibD28/fsADO10.dpk create mode 100644 LibD28/fsADO11.dpk create mode 100644 LibD28/fsADO12.dpk create mode 100644 LibD28/fsADO14.dpk create mode 100644 LibD28/fsADO15.dpk create mode 100644 LibD28/fsADO16.dpk create mode 100644 LibD28/fsADO17.dpk create mode 100644 LibD28/fsADO18.dpk create mode 100644 LibD28/fsADO19.dpk create mode 100644 LibD28/fsADO20.dpk create mode 100644 LibD28/fsADO21.dpk create mode 100644 LibD28/fsADO22.dpk create mode 100644 LibD28/fsADO23.dpk create mode 100644 LibD28/fsADO24.dpk create mode 100644 LibD28/fsADO25.dpk create mode 100644 LibD28/fsADO26.dpk create mode 100644 LibD28/fsADO27.dpk create mode 100644 LibD28/fsADO28.dpk create mode 100644 LibD28/fsADO29.dpk create mode 100644 LibD28/fsADO5.bpk create mode 100644 LibD28/fsADO5.cpp create mode 100644 LibD28/fsADO5.dpk create mode 100644 LibD28/fsADO6.bpk create mode 100644 LibD28/fsADO6.cpp create mode 100644 LibD28/fsADO6.dpk create mode 100644 LibD28/fsADO7.dpk create mode 100644 LibD28/fsADO9.dpk create mode 100644 LibD28/fsBDE10.dpk create mode 100644 LibD28/fsBDE11.dpk create mode 100644 LibD28/fsBDE12.dpk create mode 100644 LibD28/fsBDE14.dpk create mode 100644 LibD28/fsBDE15.dpk create mode 100644 LibD28/fsBDE16.dpk create mode 100644 LibD28/fsBDE17.dpk create mode 100644 LibD28/fsBDE18.dpk create mode 100644 LibD28/fsBDE19.dpk create mode 100644 LibD28/fsBDE20.dpk create mode 100644 LibD28/fsBDE21.dpk create mode 100644 LibD28/fsBDE22.dpk create mode 100644 LibD28/fsBDE23.dpk create mode 100644 LibD28/fsBDE24.dpk create mode 100644 LibD28/fsBDE25.dpk create mode 100644 LibD28/fsBDE26.dpk create mode 100644 LibD28/fsBDE27.dpk create mode 100644 LibD28/fsBDE28.dpk create mode 100644 LibD28/fsBDE29.dpk create mode 100644 LibD28/fsBDE4.bpk create mode 100644 LibD28/fsBDE4.cpp create mode 100644 LibD28/fsBDE4.dpk create mode 100644 LibD28/fsBDE5.bpk create mode 100644 LibD28/fsBDE5.cpp create mode 100644 LibD28/fsBDE5.dpk create mode 100644 LibD28/fsBDE6.bpk create mode 100644 LibD28/fsBDE6.cpp create mode 100644 LibD28/fsBDE6.dpk create mode 100644 LibD28/fsBDE7.dpk create mode 100644 LibD28/fsBDE9.dpk create mode 100644 LibD28/fsDB10.dpk create mode 100644 LibD28/fsDB11.dpk create mode 100644 LibD28/fsDB12.dpk create mode 100644 LibD28/fsDB14.dpk create mode 100644 LibD28/fsDB15.dpk create mode 100644 LibD28/fsDB16.dpk create mode 100644 LibD28/fsDB17.dpk create mode 100644 LibD28/fsDB18.dpk create mode 100644 LibD28/fsDB19.dpk create mode 100644 LibD28/fsDB20.dpk create mode 100644 LibD28/fsDB21.dpk create mode 100644 LibD28/fsDB22.dpk create mode 100644 LibD28/fsDB23.dpk create mode 100644 LibD28/fsDB24.dpk create mode 100644 LibD28/fsDB25.dpk create mode 100644 LibD28/fsDB26.dpk create mode 100644 LibD28/fsDB27.dpk create mode 100644 LibD28/fsDB28.dpk create mode 100644 LibD28/fsDB4.bpk create mode 100644 LibD28/fsDB4.cpp create mode 100644 LibD28/fsDB4.dpk create mode 100644 LibD28/fsDB5.bpk create mode 100644 LibD28/fsDB5.cpp create mode 100644 LibD28/fsDB5.dpk create mode 100644 LibD28/fsDB6.bpk create mode 100644 LibD28/fsDB6.cpp create mode 100644 LibD28/fsDB6.dpk create mode 100644 LibD28/fsDB7.dpk create mode 100644 LibD28/fsDB9.dpk create mode 100644 LibD28/fsFD15.dpk create mode 100644 LibD28/fsFD16.dpk create mode 100644 LibD28/fsFD17.dpk create mode 100644 LibD28/fsFD18.dpk create mode 100644 LibD28/fsFD19.dpk create mode 100644 LibD28/fsFD20.dpk create mode 100644 LibD28/fsFD21.dpk create mode 100644 LibD28/fsFD22.dpk create mode 100644 LibD28/fsFD23.dpk create mode 100644 LibD28/fsFD24.dpk create mode 100644 LibD28/fsFD25.dpk create mode 100644 LibD28/fsFD26.dpk create mode 100644 LibD28/fsFD27.dpk create mode 100644 LibD28/fsFD28.dpk create mode 100644 LibD28/fsFD29.dpk create mode 100644 LibD28/fsFD29.dproj create mode 100644 LibD28/fsFD29.res create mode 100644 LibD28/fsIBX10.dpk create mode 100644 LibD28/fsIBX11.dpk create mode 100644 LibD28/fsIBX12.dpk create mode 100644 LibD28/fsIBX14.dpk create mode 100644 LibD28/fsIBX15.dpk create mode 100644 LibD28/fsIBX16.dpk create mode 100644 LibD28/fsIBX17.dpk create mode 100644 LibD28/fsIBX18.dpk create mode 100644 LibD28/fsIBX19.dpk create mode 100644 LibD28/fsIBX20.dpk create mode 100644 LibD28/fsIBX21.dpk create mode 100644 LibD28/fsIBX22.dpk create mode 100644 LibD28/fsIBX23.dpk create mode 100644 LibD28/fsIBX24.dpk create mode 100644 LibD28/fsIBX25.dpk create mode 100644 LibD28/fsIBX26.dpk create mode 100644 LibD28/fsIBX27.dpk create mode 100644 LibD28/fsIBX28.dpk create mode 100644 LibD28/fsIBX29.dpk create mode 100644 LibD28/fsIBX5.bpk create mode 100644 LibD28/fsIBX5.cpp create mode 100644 LibD28/fsIBX5.dpk create mode 100644 LibD28/fsIBX6.bpk create mode 100644 LibD28/fsIBX6.cpp create mode 100644 LibD28/fsIBX6.dpk create mode 100644 LibD28/fsIBX7.dpk create mode 100644 LibD28/fsIBX9.dpk create mode 100644 LibD28/fsTee10.dpk create mode 100644 LibD28/fsTee11.dpk create mode 100644 LibD28/fsTee12.dpk create mode 100644 LibD28/fsTee14.dpk create mode 100644 LibD28/fsTee15.dpk create mode 100644 LibD28/fsTee16.dpk create mode 100644 LibD28/fsTee17.dpk create mode 100644 LibD28/fsTee18.dpk create mode 100644 LibD28/fsTee19.dpk create mode 100644 LibD28/fsTee20.dpk create mode 100644 LibD28/fsTee21.dpk create mode 100644 LibD28/fsTee22.dpk create mode 100644 LibD28/fsTee23.dpk create mode 100644 LibD28/fsTee24.dpk create mode 100644 LibD28/fsTee25.dpk create mode 100644 LibD28/fsTee26.dpk create mode 100644 LibD28/fsTee27.dpk create mode 100644 LibD28/fsTee28.dpk create mode 100644 LibD28/fsTee29.dpk create mode 100644 LibD28/fsTee29.dproj create mode 100644 LibD28/fsTee29.res create mode 100644 LibD28/fsTee4.bpk create mode 100644 LibD28/fsTee4.cpp create mode 100644 LibD28/fsTee4.dpk create mode 100644 LibD28/fsTee5.bpk create mode 100644 LibD28/fsTee5.cpp create mode 100644 LibD28/fsTee5.dpk create mode 100644 LibD28/fsTee6.bpk create mode 100644 LibD28/fsTee6.cpp create mode 100644 LibD28/fsTee6.dpk create mode 100644 LibD28/fsTee7.dpk create mode 100644 LibD28/fsTee9.dpk create mode 100644 LibD28/fs_iadoreg.pas create mode 100644 LibD28/fs_iadortti.pas create mode 100644 LibD28/fs_ibasic.pas create mode 100644 LibD28/fs_ibdereg.pas create mode 100644 LibD28/fs_ibdertti.pas create mode 100644 LibD28/fs_ibx.lpk create mode 100644 LibD28/fs_ichartrtti.pas create mode 100644 LibD28/fs_iclassesrtti.pas create mode 100644 LibD28/fs_iconst.pas create mode 100644 LibD28/fs_icpp.pas create mode 100644 LibD28/fs_idbctrlsrtti.pas create mode 100644 LibD28/fs_idbreg.pas create mode 100644 LibD28/fs_idbrtti.pas create mode 100644 LibD28/fs_idialogsrtti.pas create mode 100644 LibD28/fs_idisp.pas create mode 100644 LibD28/fs_ievents.pas create mode 100644 LibD28/fs_iexpression.pas create mode 100644 LibD28/fs_iextctrlsrtti.pas create mode 100644 LibD28/fs_ifdreg.dcr create mode 100644 LibD28/fs_ifdreg.pas create mode 100644 LibD28/fs_ifdrtti.pas create mode 100644 LibD28/fs_iformsrtti.pas create mode 100644 LibD28/fs_igraphicsrtti.pas create mode 100644 LibD28/fs_iibxreg.pas create mode 100644 LibD28/fs_iibxrtti.pas create mode 100644 LibD28/fs_iilparser.pas create mode 100644 LibD28/fs_iinirtti.pas create mode 100644 LibD28/fs_iinterpreter.pas create mode 100644 LibD28/fs_ijs.pas create mode 100644 LibD28/fs_imenusrtti.pas create mode 100644 LibD28/fs_iparser.pas create mode 100644 LibD28/fs_ipascal.pas create mode 100644 LibD28/fs_ireg.dcr create mode 100644 LibD28/fs_ireg.lrs create mode 100644 LibD28/fs_ireg.pas create mode 100644 LibD28/fs_isysrtti.pas create mode 100644 LibD28/fs_iteereg.pas create mode 100644 LibD28/fs_itools.pas create mode 100644 LibD28/fs_lazarus.lpk create mode 100644 LibD28/fs_lazarus.pas create mode 100644 LibD28/fs_synmemo.dfm create mode 100644 LibD28/fs_synmemo.lfm create mode 100644 LibD28/fs_synmemo.pas create mode 100644 LibD28/fs_tree.pas create mode 100644 LibD28/fs_tree.res create mode 100644 LibD28/fs_xml.pas create mode 100644 LibD28/fsx.dpk create mode 100644 LibD28/fsx.res create mode 100644 LibD28/mk.bat create mode 100644 LibD28/mkall.bat create mode 100644 LibD28/readme.txt create mode 100644 LibD28/readme_lazarus.txt create mode 100644 LibD28/tee.inc create mode 100644 LibD28x64/FMX.BaseTypeAliases.pas create mode 100644 LibD28x64/FMX.ConverterFR3toFRFMX.pas create mode 100644 LibD28x64/FMX.DelphiZXIngQRCode.pas create mode 100644 LibD28x64/FMX.ExportTTFFont.pas create mode 100644 LibD28x64/FMX.FormTypeAliases.pas create mode 100644 LibD28x64/FMX.Linux.Old.frxPrinter.pas create mode 100644 LibD28x64/FMX.Linux.frxPrinter.pas create mode 100644 LibD28x64/FMX.Mac.frxPrinter.pas create mode 100644 LibD28x64/FMX.TTFHelpers.pas create mode 100644 LibD28x64/FMX.Win.frxPrinter.pas create mode 100644 LibD28x64/FMX.frxADOComponents.pas create mode 100644 LibD28x64/FMX.frxADOEditor.pas create mode 100644 LibD28x64/FMX.frxADORTTI.pas create mode 100644 LibD28x64/FMX.frxAbout.fmx create mode 100644 LibD28x64/FMX.frxAbout.pas create mode 100644 LibD28x64/FMX.frxAggregate.pas create mode 100644 LibD28x64/FMX.frxBarcod.pas create mode 100644 LibD28x64/FMX.frxBarcode.pas create mode 100644 LibD28x64/FMX.frxBarcode2DBase.pas create mode 100644 LibD28x64/FMX.frxBarcode2DRTTI.pas create mode 100644 LibD28x64/FMX.frxBarcode2DView.pas create mode 100644 LibD28x64/FMX.frxBarcodeDataMatrix.pas create mode 100644 LibD28x64/FMX.frxBarcodeEditor.fmx create mode 100644 LibD28x64/FMX.frxBarcodeEditor.pas create mode 100644 LibD28x64/FMX.frxBarcodePDF417.pas create mode 100644 LibD28x64/FMX.frxBarcodeProperties.pas create mode 100644 LibD28x64/FMX.frxBarcodeQR.pas create mode 100644 LibD28x64/FMX.frxBarcodeRTTI.pas create mode 100644 LibD28x64/FMX.frxBaseModalForm.pas create mode 100644 LibD28x64/FMX.frxCanvas.Linux.pas create mode 100644 LibD28x64/FMX.frxCanvas.Mac.pas create mode 100644 LibD28x64/FMX.frxChBox.pas create mode 100644 LibD28x64/FMX.frxChBoxRTTI.pas create mode 100644 LibD28x64/FMX.frxChart.pas create mode 100644 LibD28x64/FMX.frxChartEditor.fmx create mode 100644 LibD28x64/FMX.frxChartEditor.pas create mode 100644 LibD28x64/FMX.frxChartGallery.fmx create mode 100644 LibD28x64/FMX.frxChartGallery.pas create mode 100644 LibD28x64/FMX.frxChartHelpers.pas create mode 100644 LibD28x64/FMX.frxChartRTTI.pas create mode 100644 LibD28x64/FMX.frxClass.pas create mode 100644 LibD28x64/FMX.frxClass.res create mode 100644 LibD28x64/FMX.frxClassRTTI.pas create mode 100644 LibD28x64/FMX.frxCmapTableClass.pas create mode 100644 LibD28x64/FMX.frxCodeUtils.pas create mode 100644 LibD28x64/FMX.frxConnWizard.fmx create mode 100644 LibD28x64/FMX.frxConnWizard.pas create mode 100644 LibD28x64/FMX.frxConnWizard.res create mode 100644 LibD28x64/FMX.frxCross.pas create mode 100644 LibD28x64/FMX.frxCrossEditor.fmx create mode 100644 LibD28x64/FMX.frxCrossEditor.pas create mode 100644 LibD28x64/FMX.frxCrossRTTI.pas create mode 100644 LibD28x64/FMX.frxCrypto.pas create mode 100644 LibD28x64/FMX.frxCtrls.pas create mode 100644 LibD28x64/FMX.frxCustomDB.pas create mode 100644 LibD28x64/FMX.frxCustomDBEditor.pas create mode 100644 LibD28x64/FMX.frxCustomDBRTTI.pas create mode 100644 LibD28x64/FMX.frxCustomEditors.pas create mode 100644 LibD28x64/FMX.frxDBSet.pas create mode 100644 LibD28x64/FMX.frxDBXComponents.pas create mode 100644 LibD28x64/FMX.frxDBXEditor.pas create mode 100644 LibD28x64/FMX.frxDBXRTTI.pas create mode 100644 LibD28x64/FMX.frxDCtrl.pas create mode 100644 LibD28x64/FMX.frxDCtrlRTTI.pas create mode 100644 LibD28x64/FMX.frxDMPClass.pas create mode 100644 LibD28x64/FMX.frxDataTree.fmx create mode 100644 LibD28x64/FMX.frxDataTree.pas create mode 100644 LibD28x64/FMX.frxDesgn.fmx create mode 100644 LibD28x64/FMX.frxDesgn.pas create mode 100644 LibD28x64/FMX.frxDesgn.res create mode 100644 LibD28x64/FMX.frxDesgnCtrls.pas create mode 100644 LibD28x64/FMX.frxDesgnEditors.pas create mode 100644 LibD28x64/FMX.frxDesgnWorkspace.pas create mode 100644 LibD28x64/FMX.frxDesgnWorkspace.res create mode 100644 LibD28x64/FMX.frxDesgnWorkspace1.pas create mode 100644 LibD28x64/FMX.frxDesgn_D23.fmx create mode 100644 LibD28x64/FMX.frxDialogForm.fmx create mode 100644 LibD28x64/FMX.frxDialogForm.pas create mode 100644 LibD28x64/FMX.frxDsgnIntf.pas create mode 100644 LibD28x64/FMX.frxEditAliases.fmx create mode 100644 LibD28x64/FMX.frxEditAliases.pas create mode 100644 LibD28x64/FMX.frxEditDataBand.fmx create mode 100644 LibD28x64/FMX.frxEditDataBand.pas create mode 100644 LibD28x64/FMX.frxEditExpr.fmx create mode 100644 LibD28x64/FMX.frxEditExpr.pas create mode 100644 LibD28x64/FMX.frxEditFormat.fmx create mode 100644 LibD28x64/FMX.frxEditFormat.pas create mode 100644 LibD28x64/FMX.frxEditFrame.fmx create mode 100644 LibD28x64/FMX.frxEditFrame.pas create mode 100644 LibD28x64/FMX.frxEditGroup.fmx create mode 100644 LibD28x64/FMX.frxEditGroup.pas create mode 100644 LibD28x64/FMX.frxEditHighlight.fmx create mode 100644 LibD28x64/FMX.frxEditHighlight.pas create mode 100644 LibD28x64/FMX.frxEditMD.fmx create mode 100644 LibD28x64/FMX.frxEditMD.pas create mode 100644 LibD28x64/FMX.frxEditMemo.fmx create mode 100644 LibD28x64/FMX.frxEditMemo.pas create mode 100644 LibD28x64/FMX.frxEditOptions.fmx create mode 100644 LibD28x64/FMX.frxEditOptions.pas create mode 100644 LibD28x64/FMX.frxEditPage.fmx create mode 100644 LibD28x64/FMX.frxEditPage.pas create mode 100644 LibD28x64/FMX.frxEditPicture.fmx create mode 100644 LibD28x64/FMX.frxEditPicture.pas create mode 100644 LibD28x64/FMX.frxEditQueryParams.fmx create mode 100644 LibD28x64/FMX.frxEditQueryParams.pas create mode 100644 LibD28x64/FMX.frxEditReport.fmx create mode 100644 LibD28x64/FMX.frxEditReport.pas create mode 100644 LibD28x64/FMX.frxEditReportData.fmx create mode 100644 LibD28x64/FMX.frxEditReportData.pas create mode 100644 LibD28x64/FMX.frxEditSQL.fmx create mode 100644 LibD28x64/FMX.frxEditSQL.pas create mode 100644 LibD28x64/FMX.frxEditStrings.fmx create mode 100644 LibD28x64/FMX.frxEditStrings.pas create mode 100644 LibD28x64/FMX.frxEditStyle.fmx create mode 100644 LibD28x64/FMX.frxEditStyle.pas create mode 100644 LibD28x64/FMX.frxEditSysMemo.fmx create mode 100644 LibD28x64/FMX.frxEditSysMemo.pas create mode 100644 LibD28x64/FMX.frxEditTabOrder.fmx create mode 100644 LibD28x64/FMX.frxEditTabOrder.pas create mode 100644 LibD28x64/FMX.frxEditVar.fmx create mode 100644 LibD28x64/FMX.frxEditVar.pas create mode 100644 LibD28x64/FMX.frxEngine.pas create mode 100644 LibD28x64/FMX.frxEvaluateForm.fmx create mode 100644 LibD28x64/FMX.frxEvaluateForm.pas create mode 100644 LibD28x64/FMX.frxExportCSV.fmx create mode 100644 LibD28x64/FMX.frxExportCSV.pas create mode 100644 LibD28x64/FMX.frxExportHTML.fmx create mode 100644 LibD28x64/FMX.frxExportHTML.pas create mode 100644 LibD28x64/FMX.frxExportImage.fmx create mode 100644 LibD28x64/FMX.frxExportImage.pas create mode 100644 LibD28x64/FMX.frxExportMatrix.pas create mode 100644 LibD28x64/FMX.frxExportODF.fmx create mode 100644 LibD28x64/FMX.frxExportODF.pas create mode 100644 LibD28x64/FMX.frxExportPDF.fmx create mode 100644 LibD28x64/FMX.frxExportPDF.pas create mode 100644 LibD28x64/FMX.frxExportRTF.fmx create mode 100644 LibD28x64/FMX.frxExportRTF.pas create mode 100644 LibD28x64/FMX.frxExportTXT.fmx create mode 100644 LibD28x64/FMX.frxExportTXT.pas create mode 100644 LibD28x64/FMX.frxExportText.fmx create mode 100644 LibD28x64/FMX.frxExportText.pas create mode 100644 LibD28x64/FMX.frxExportXML.fmx create mode 100644 LibD28x64/FMX.frxExportXML.pas create mode 100644 LibD28x64/FMX.frxFDComponents.pas create mode 100644 LibD28x64/FMX.frxFDComponents.res create mode 100644 LibD28x64/FMX.frxFDEditor.pas create mode 100644 LibD28x64/FMX.frxFDRTTI.pas create mode 100644 LibD28x64/FMX.frxFDReg.pas create mode 100644 LibD28x64/FMX.frxFMX.pas create mode 100644 LibD28x64/FMX.frxFontForm.fmx create mode 100644 LibD28x64/FMX.frxFontForm.pas create mode 100644 LibD28x64/FMX.frxFontHeaderClass.pas create mode 100644 LibD28x64/FMX.frxGZip.pas create mode 100644 LibD28x64/FMX.frxGlyphSubstitutionClass.pas create mode 100644 LibD28x64/FMX.frxGlyphTableClass.pas create mode 100644 LibD28x64/FMX.frxGradient.pas create mode 100644 LibD28x64/FMX.frxGradientRTTI.pas create mode 100644 LibD28x64/FMX.frxGraphicUtils.pas create mode 100644 LibD28x64/FMX.frxHorizontalHeaderClass.pas create mode 100644 LibD28x64/FMX.frxHorizontalMetrixClass.pas create mode 100644 LibD28x64/FMX.frxIBXComponents.pas create mode 100644 LibD28x64/FMX.frxIBXEditor.pas create mode 100644 LibD28x64/FMX.frxIBXRTTI.pas create mode 100644 LibD28x64/FMX.frxIndexToLocationClass.pas create mode 100644 LibD28x64/FMX.frxInheritError.fmx create mode 100644 LibD28x64/FMX.frxInheritError.pas create mode 100644 LibD28x64/FMX.frxInsp.fmx create mode 100644 LibD28x64/FMX.frxInsp.pas create mode 100644 LibD28x64/FMX.frxInsp_D23.fmx create mode 100644 LibD28x64/FMX.frxKerningTableClass.pas create mode 100644 LibD28x64/FMX.frxLinuxFonts.pas create mode 100644 LibD28x64/FMX.frxMD5.pas create mode 100644 LibD28x64/FMX.frxMaximumProfileClass.pas create mode 100644 LibD28x64/FMX.frxNameTableClass.pas create mode 100644 LibD28x64/FMX.frxNewItem.pas create mode 100644 LibD28x64/FMX.frxOS2WindowsMetricsClass.pas create mode 100644 LibD28x64/FMX.frxPassw.pas create mode 100644 LibD28x64/FMX.frxPictureCache.pas create mode 100644 LibD28x64/FMX.frxPopupForm.fmx create mode 100644 LibD28x64/FMX.frxPopupForm.pas create mode 100644 LibD28x64/FMX.frxPostScriptClass.pas create mode 100644 LibD28x64/FMX.frxPreProgramClass.pas create mode 100644 LibD28x64/FMX.frxPreview.fmx create mode 100644 LibD28x64/FMX.frxPreview.pas create mode 100644 LibD28x64/FMX.frxPreview.res create mode 100644 LibD28x64/FMX.frxPreviewPageSettings.fmx create mode 100644 LibD28x64/FMX.frxPreviewPageSettings.pas create mode 100644 LibD28x64/FMX.frxPreviewPages.pas create mode 100644 LibD28x64/FMX.frxPrintDialog.fmx create mode 100644 LibD28x64/FMX.frxPrintDialog.pas create mode 100644 LibD28x64/FMX.frxPrinter.pas create mode 100644 LibD28x64/FMX.frxProgress.fmx create mode 100644 LibD28x64/FMX.frxProgress.pas create mode 100644 LibD28x64/FMX.frxRC4.pas create mode 100644 LibD28x64/FMX.frxReportTree.fmx create mode 100644 LibD28x64/FMX.frxReportTree.pas create mode 100644 LibD28x64/FMX.frxRes.pas create mode 100644 LibD28x64/FMX.frxSearchDialog.fmx create mode 100644 LibD28x64/FMX.frxSearchDialog.pas create mode 100644 LibD28x64/FMX.frxStdWizard.pas create mode 100644 LibD28x64/FMX.frxSynMemo.pas create mode 100644 LibD28x64/FMX.frxTrueTypeCollection.pas create mode 100644 LibD28x64/FMX.frxTrueTypeFont.pas create mode 100644 LibD28x64/FMX.frxTrueTypeTable.pas create mode 100644 LibD28x64/FMX.frxUnicodeUtils.pas create mode 100644 LibD28x64/FMX.frxUtils.pas create mode 100644 LibD28x64/FMX.frxVariables.pas create mode 100644 LibD28x64/FMX.frxWatchForm.fmx create mode 100644 LibD28x64/FMX.frxWatchForm.pas create mode 100644 LibD28x64/FMX.frxXML.pas create mode 100644 LibD28x64/FMX.frxXMLSerializer.pas create mode 100644 LibD28x64/FMX.frxZip.pas create mode 100644 LibD28x64/FMX.frxrcClass.pas create mode 100644 LibD28x64/FMX.frxrcDesgn.pas create mode 100644 LibD28x64/FMX.frxrcExports.pas create mode 100644 LibD28x64/FMX.frxrcInsp.pas create mode 100644 LibD28x64/FMX.fs_iadortti.pas create mode 100644 LibD28x64/FMX.fs_ibasic.pas create mode 100644 LibD28x64/FMX.fs_ichartrtti.pas create mode 100644 LibD28x64/FMX.fs_iclassesrtti.pas create mode 100644 LibD28x64/FMX.fs_iconst.pas create mode 100644 LibD28x64/FMX.fs_icpp.pas create mode 100644 LibD28x64/FMX.fs_idbrtti.pas create mode 100644 LibD28x64/FMX.fs_idialogsrtti.pas create mode 100644 LibD28x64/FMX.fs_idisp.pas create mode 100644 LibD28x64/FMX.fs_ievents.pas create mode 100644 LibD28x64/FMX.fs_iexpression.pas create mode 100644 LibD28x64/FMX.fs_iextctrlsrtti.pas create mode 100644 LibD28x64/FMX.fs_iformsrtti.pas create mode 100644 LibD28x64/FMX.fs_igraphicsrtti.pas create mode 100644 LibD28x64/FMX.fs_iibxrtti.pas create mode 100644 LibD28x64/FMX.fs_iilparser.pas create mode 100644 LibD28x64/FMX.fs_iinirtti.pas create mode 100644 LibD28x64/FMX.fs_iinterpreter.pas create mode 100644 LibD28x64/FMX.fs_ijs.pas create mode 100644 LibD28x64/FMX.fs_imenusrtti.pas create mode 100644 LibD28x64/FMX.fs_iparser.pas create mode 100644 LibD28x64/FMX.fs_ipascal.pas create mode 100644 LibD28x64/FMX.fs_isysrtti.pas create mode 100644 LibD28x64/FMX.fs_itools.pas create mode 100644 LibD28x64/FMX.fs_lazarus.pas create mode 100644 LibD28x64/FMX.fs_synmemo.fmx create mode 100644 LibD28x64/FMX.fs_synmemo.pas create mode 100644 LibD28x64/FMX.fs_tree.pas create mode 100644 LibD28x64/FMX.fs_xml.pas create mode 100644 LibD28x64/FMXfrx16.dpk create mode 100644 LibD28x64/FMXfrx16.otares create mode 100644 LibD28x64/FMXfrx16.res create mode 100644 LibD28x64/FMXfrx17.dpk create mode 100644 LibD28x64/FMXfrx17.otares create mode 100644 LibD28x64/FMXfrx17.res create mode 100644 LibD28x64/FMXfrx18.dpk create mode 100644 LibD28x64/FMXfrx18.otares create mode 100644 LibD28x64/FMXfrx18.res create mode 100644 LibD28x64/FMXfrx19.dpk create mode 100644 LibD28x64/FMXfrx19.otares create mode 100644 LibD28x64/FMXfrx19.res create mode 100644 LibD28x64/FMXfrx20.dpk create mode 100644 LibD28x64/FMXfrx20.otares create mode 100644 LibD28x64/FMXfrx20.res create mode 100644 LibD28x64/FMXfrx21.dpk create mode 100644 LibD28x64/FMXfrx21.otares create mode 100644 LibD28x64/FMXfrx21.res create mode 100644 LibD28x64/FMXfrx22.dpk create mode 100644 LibD28x64/FMXfrx22.otares create mode 100644 LibD28x64/FMXfrx22.res create mode 100644 LibD28x64/FMXfrx23.dpk create mode 100644 LibD28x64/FMXfrx23.otares create mode 100644 LibD28x64/FMXfrx23.res create mode 100644 LibD28x64/FMXfrx24.dpk create mode 100644 LibD28x64/FMXfrx24.dproj create mode 100644 LibD28x64/FMXfrx24.otares create mode 100644 LibD28x64/FMXfrx24.res create mode 100644 LibD28x64/FMXfrx25.dpk create mode 100644 LibD28x64/FMXfrx25.otares create mode 100644 LibD28x64/FMXfrx25.res create mode 100644 LibD28x64/FMXfrx26.dpk create mode 100644 LibD28x64/FMXfrx27.dpk create mode 100644 LibD28x64/FMXfrx29.dpk create mode 100644 LibD28x64/FMXfrx29.dproj create mode 100644 LibD28x64/FMXfrx29.res create mode 100644 LibD28x64/FMXfrxADO16.dpk create mode 100644 LibD28x64/FMXfrxADO16.res create mode 100644 LibD28x64/FMXfrxADO17.dpk create mode 100644 LibD28x64/FMXfrxADO17.res create mode 100644 LibD28x64/FMXfrxADO18.dpk create mode 100644 LibD28x64/FMXfrxADO18.res create mode 100644 LibD28x64/FMXfrxADO19.dpk create mode 100644 LibD28x64/FMXfrxADO19.res create mode 100644 LibD28x64/FMXfrxADO20.dpk create mode 100644 LibD28x64/FMXfrxADO20.res create mode 100644 LibD28x64/FMXfrxADO21.dpk create mode 100644 LibD28x64/FMXfrxADO21.res create mode 100644 LibD28x64/FMXfrxADO22.dpk create mode 100644 LibD28x64/FMXfrxADO22.res create mode 100644 LibD28x64/FMXfrxADO23.dpk create mode 100644 LibD28x64/FMXfrxADO23.res create mode 100644 LibD28x64/FMXfrxADO24.dpk create mode 100644 LibD28x64/FMXfrxADO24.res create mode 100644 LibD28x64/FMXfrxADO25.dpk create mode 100644 LibD28x64/FMXfrxADO25.res create mode 100644 LibD28x64/FMXfrxADO26.dpk create mode 100644 LibD28x64/FMXfrxADO27.dpk create mode 100644 LibD28x64/FMXfrxADO28.dpk create mode 100644 LibD28x64/FMXfrxADO29.dpk create mode 100644 LibD28x64/FMXfrxADOReg.dcr create mode 100644 LibD28x64/FMXfrxADOReg.pas create mode 100644 LibD28x64/FMXfrxDB16.dpk create mode 100644 LibD28x64/FMXfrxDB16.otares create mode 100644 LibD28x64/FMXfrxDB16.res create mode 100644 LibD28x64/FMXfrxDB17.dpk create mode 100644 LibD28x64/FMXfrxDB17.otares create mode 100644 LibD28x64/FMXfrxDB17.res create mode 100644 LibD28x64/FMXfrxDB18.dpk create mode 100644 LibD28x64/FMXfrxDB18.otares create mode 100644 LibD28x64/FMXfrxDB18.res create mode 100644 LibD28x64/FMXfrxDB19.dpk create mode 100644 LibD28x64/FMXfrxDB19.otares create mode 100644 LibD28x64/FMXfrxDB19.res create mode 100644 LibD28x64/FMXfrxDB20.dpk create mode 100644 LibD28x64/FMXfrxDB20.otares create mode 100644 LibD28x64/FMXfrxDB20.res create mode 100644 LibD28x64/FMXfrxDB21.dpk create mode 100644 LibD28x64/FMXfrxDB21.otares create mode 100644 LibD28x64/FMXfrxDB21.res create mode 100644 LibD28x64/FMXfrxDB22.dpk create mode 100644 LibD28x64/FMXfrxDB22.otares create mode 100644 LibD28x64/FMXfrxDB22.res create mode 100644 LibD28x64/FMXfrxDB23.dpk create mode 100644 LibD28x64/FMXfrxDB23.otares create mode 100644 LibD28x64/FMXfrxDB23.res create mode 100644 LibD28x64/FMXfrxDB24.dpk create mode 100644 LibD28x64/FMXfrxDB24.otares create mode 100644 LibD28x64/FMXfrxDB24.res create mode 100644 LibD28x64/FMXfrxDB25.dpk create mode 100644 LibD28x64/FMXfrxDB25.otares create mode 100644 LibD28x64/FMXfrxDB25.res create mode 100644 LibD28x64/FMXfrxDB26.dpk create mode 100644 LibD28x64/FMXfrxDB27.dpk create mode 100644 LibD28x64/FMXfrxDB29.dpk create mode 100644 LibD28x64/FMXfrxDBX16.dpk create mode 100644 LibD28x64/FMXfrxDBX16.res create mode 100644 LibD28x64/FMXfrxDBX17.dpk create mode 100644 LibD28x64/FMXfrxDBX17.res create mode 100644 LibD28x64/FMXfrxDBX18.dpk create mode 100644 LibD28x64/FMXfrxDBX18.res create mode 100644 LibD28x64/FMXfrxDBX19.dpk create mode 100644 LibD28x64/FMXfrxDBX19.res create mode 100644 LibD28x64/FMXfrxDBX20.dpk create mode 100644 LibD28x64/FMXfrxDBX20.res create mode 100644 LibD28x64/FMXfrxDBX21.dpk create mode 100644 LibD28x64/FMXfrxDBX21.res create mode 100644 LibD28x64/FMXfrxDBX22.dpk create mode 100644 LibD28x64/FMXfrxDBX22.res create mode 100644 LibD28x64/FMXfrxDBX23.dpk create mode 100644 LibD28x64/FMXfrxDBX23.res create mode 100644 LibD28x64/FMXfrxDBX24.dpk create mode 100644 LibD28x64/FMXfrxDBX24.res create mode 100644 LibD28x64/FMXfrxDBX25.dpk create mode 100644 LibD28x64/FMXfrxDBX25.res create mode 100644 LibD28x64/FMXfrxDBX26.dpk create mode 100644 LibD28x64/FMXfrxDBX27.dpk create mode 100644 LibD28x64/FMXfrxDBX29.dpk create mode 100644 LibD28x64/FMXfrxDBX29.dproj create mode 100644 LibD28x64/FMXfrxDBX29.res create mode 100644 LibD28x64/FMXfrxDBXReg.dcr create mode 100644 LibD28x64/FMXfrxDBXReg.pas create mode 100644 LibD28x64/FMXfrxFD18.dpk create mode 100644 LibD28x64/FMXfrxFD18.otares create mode 100644 LibD28x64/FMXfrxFD18.res create mode 100644 LibD28x64/FMXfrxFD19.dpk create mode 100644 LibD28x64/FMXfrxFD19.res create mode 100644 LibD28x64/FMXfrxFD20.dpk create mode 100644 LibD28x64/FMXfrxFD20.res create mode 100644 LibD28x64/FMXfrxFD21.dpk create mode 100644 LibD28x64/FMXfrxFD21.res create mode 100644 LibD28x64/FMXfrxFD22.dpk create mode 100644 LibD28x64/FMXfrxFD22.res create mode 100644 LibD28x64/FMXfrxFD23.dpk create mode 100644 LibD28x64/FMXfrxFD23.res create mode 100644 LibD28x64/FMXfrxFD24.dpk create mode 100644 LibD28x64/FMXfrxFD24.res create mode 100644 LibD28x64/FMXfrxFD25.dpk create mode 100644 LibD28x64/FMXfrxFD25.res create mode 100644 LibD28x64/FMXfrxFD26.dpk create mode 100644 LibD28x64/FMXfrxFD27.dpk create mode 100644 LibD28x64/FMXfrxFD29.dpk create mode 100644 LibD28x64/FMXfrxFD29.dproj create mode 100644 LibD28x64/FMXfrxFD29.res create mode 100644 LibD28x64/FMXfrxFDReg.dcr create mode 100644 LibD28x64/FMXfrxIBX16.dpk create mode 100644 LibD28x64/FMXfrxIBX16.res create mode 100644 LibD28x64/FMXfrxIBX17.dpk create mode 100644 LibD28x64/FMXfrxIBX17.res create mode 100644 LibD28x64/FMXfrxIBX18.dpk create mode 100644 LibD28x64/FMXfrxIBX18.res create mode 100644 LibD28x64/FMXfrxIBX19.dpk create mode 100644 LibD28x64/FMXfrxIBX19.res create mode 100644 LibD28x64/FMXfrxIBX20.dpk create mode 100644 LibD28x64/FMXfrxIBX20.res create mode 100644 LibD28x64/FMXfrxIBX21.dpk create mode 100644 LibD28x64/FMXfrxIBX21.res create mode 100644 LibD28x64/FMXfrxIBX22.dpk create mode 100644 LibD28x64/FMXfrxIBX22.res create mode 100644 LibD28x64/FMXfrxIBX23.dpk create mode 100644 LibD28x64/FMXfrxIBX23.res create mode 100644 LibD28x64/FMXfrxIBX24.dpk create mode 100644 LibD28x64/FMXfrxIBX24.res create mode 100644 LibD28x64/FMXfrxIBX25.dpk create mode 100644 LibD28x64/FMXfrxIBX25.res create mode 100644 LibD28x64/FMXfrxIBX26.dpk create mode 100644 LibD28x64/FMXfrxIBX27.dpk create mode 100644 LibD28x64/FMXfrxIBX28.dpk create mode 100644 LibD28x64/FMXfrxIBXReg.dcr create mode 100644 LibD28x64/FMXfrxIBXReg.pas create mode 100644 LibD28x64/FMXfrxReg.pas create mode 100644 LibD28x64/FMXfrxRegCtrls.pas create mode 100644 LibD28x64/FMXfrxRegDB.pas create mode 100644 LibD28x64/FMXfrxRegTee.pas create mode 100644 LibD28x64/FMXfrxTee16.dpk create mode 100644 LibD28x64/FMXfrxTee16.otares create mode 100644 LibD28x64/FMXfrxTee16.res create mode 100644 LibD28x64/FMXfrxTee17.dpk create mode 100644 LibD28x64/FMXfrxTee17.otares create mode 100644 LibD28x64/FMXfrxTee17.res create mode 100644 LibD28x64/FMXfrxTee18.dpk create mode 100644 LibD28x64/FMXfrxTee18.otares create mode 100644 LibD28x64/FMXfrxTee18.res create mode 100644 LibD28x64/FMXfrxTee19.dpk create mode 100644 LibD28x64/FMXfrxTee19.otares create mode 100644 LibD28x64/FMXfrxTee19.res create mode 100644 LibD28x64/FMXfrxTee20.dpk create mode 100644 LibD28x64/FMXfrxTee20.otares create mode 100644 LibD28x64/FMXfrxTee20.res create mode 100644 LibD28x64/FMXfrxTee21.dpk create mode 100644 LibD28x64/FMXfrxTee21.otares create mode 100644 LibD28x64/FMXfrxTee21.res create mode 100644 LibD28x64/FMXfrxTee22.dpk create mode 100644 LibD28x64/FMXfrxTee22.otares create mode 100644 LibD28x64/FMXfrxTee22.res create mode 100644 LibD28x64/FMXfrxTee23.dpk create mode 100644 LibD28x64/FMXfrxTee23.otares create mode 100644 LibD28x64/FMXfrxTee23.res create mode 100644 LibD28x64/FMXfrxTee24.dpk create mode 100644 LibD28x64/FMXfrxTee24.dproj create mode 100644 LibD28x64/FMXfrxTee24.otares create mode 100644 LibD28x64/FMXfrxTee24.res create mode 100644 LibD28x64/FMXfrxTee25.dpk create mode 100644 LibD28x64/FMXfrxTee25.otares create mode 100644 LibD28x64/FMXfrxTee25.res create mode 100644 LibD28x64/FMXfrxTee26.dpk create mode 100644 LibD28x64/FMXfrxTee27.dpk create mode 100644 LibD28x64/FMXfrxTee28.dproj create mode 100644 LibD28x64/FMXfrxTee29.dpk create mode 100644 LibD28x64/FMXfrxTee29.dproj create mode 100644 LibD28x64/FMXfrxTee29.res create mode 100644 LibD28x64/FMXfrxe16.dpk create mode 100644 LibD28x64/FMXfrxe16.otares create mode 100644 LibD28x64/FMXfrxe16.res create mode 100644 LibD28x64/FMXfrxe17.dpk create mode 100644 LibD28x64/FMXfrxe17.otares create mode 100644 LibD28x64/FMXfrxe17.res create mode 100644 LibD28x64/FMXfrxe18.dpk create mode 100644 LibD28x64/FMXfrxe18.otares create mode 100644 LibD28x64/FMXfrxe18.res create mode 100644 LibD28x64/FMXfrxe19.dpk create mode 100644 LibD28x64/FMXfrxe19.otares create mode 100644 LibD28x64/FMXfrxe19.res create mode 100644 LibD28x64/FMXfrxe20.dpk create mode 100644 LibD28x64/FMXfrxe20.otares create mode 100644 LibD28x64/FMXfrxe20.res create mode 100644 LibD28x64/FMXfrxe21.dpk create mode 100644 LibD28x64/FMXfrxe21.otares create mode 100644 LibD28x64/FMXfrxe21.res create mode 100644 LibD28x64/FMXfrxe22.dpk create mode 100644 LibD28x64/FMXfrxe22.otares create mode 100644 LibD28x64/FMXfrxe22.res create mode 100644 LibD28x64/FMXfrxe23.dpk create mode 100644 LibD28x64/FMXfrxe23.otares create mode 100644 LibD28x64/FMXfrxe23.res create mode 100644 LibD28x64/FMXfrxe24.dpk create mode 100644 LibD28x64/FMXfrxe24.dproj create mode 100644 LibD28x64/FMXfrxe24.otares create mode 100644 LibD28x64/FMXfrxe24.res create mode 100644 LibD28x64/FMXfrxe25.dpk create mode 100644 LibD28x64/FMXfrxe25.otares create mode 100644 LibD28x64/FMXfrxe25.res create mode 100644 LibD28x64/FMXfrxe26.dpk create mode 100644 LibD28x64/FMXfrxe27.dpk create mode 100644 LibD28x64/FMXfrxe29.dpk create mode 100644 LibD28x64/FMXfrxeReg.pas create mode 100644 LibD28x64/FMXfs16.dpk create mode 100644 LibD28x64/FMXfs16.res create mode 100644 LibD28x64/FMXfs17.dpk create mode 100644 LibD28x64/FMXfs17.res create mode 100644 LibD28x64/FMXfs18.dpk create mode 100644 LibD28x64/FMXfs18.otares create mode 100644 LibD28x64/FMXfs18.res create mode 100644 LibD28x64/FMXfs19.dpk create mode 100644 LibD28x64/FMXfs19.otares create mode 100644 LibD28x64/FMXfs19.res create mode 100644 LibD28x64/FMXfs20.dpk create mode 100644 LibD28x64/FMXfs20.otares create mode 100644 LibD28x64/FMXfs20.res create mode 100644 LibD28x64/FMXfs21.dpk create mode 100644 LibD28x64/FMXfs21.otares create mode 100644 LibD28x64/FMXfs21.res create mode 100644 LibD28x64/FMXfs22.dpk create mode 100644 LibD28x64/FMXfs22.otares create mode 100644 LibD28x64/FMXfs22.res create mode 100644 LibD28x64/FMXfs23.dpk create mode 100644 LibD28x64/FMXfs23.otares create mode 100644 LibD28x64/FMXfs23.res create mode 100644 LibD28x64/FMXfs24.dpk create mode 100644 LibD28x64/FMXfs24.otares create mode 100644 LibD28x64/FMXfs24.res create mode 100644 LibD28x64/FMXfs25.dpk create mode 100644 LibD28x64/FMXfs25.otares create mode 100644 LibD28x64/FMXfs25.res create mode 100644 LibD28x64/FMXfs26.dpk create mode 100644 LibD28x64/FMXfs27.dpk create mode 100644 LibD28x64/FMXfs28.dpk create mode 100644 LibD28x64/FMXfs29.dpk create mode 100644 LibD28x64/FMXfs29.dproj create mode 100644 LibD28x64/FMXfs29.res create mode 100644 LibD28x64/FMXfsADO16.dpk create mode 100644 LibD28x64/FMXfsADO16.res create mode 100644 LibD28x64/FMXfsADO17.dpk create mode 100644 LibD28x64/FMXfsADO17.res create mode 100644 LibD28x64/FMXfsADO18.dpk create mode 100644 LibD28x64/FMXfsADO18.res create mode 100644 LibD28x64/FMXfsADO19.dpk create mode 100644 LibD28x64/FMXfsADO19.res create mode 100644 LibD28x64/FMXfsADO20.dpk create mode 100644 LibD28x64/FMXfsADO20.res create mode 100644 LibD28x64/FMXfsADO21.dpk create mode 100644 LibD28x64/FMXfsADO21.res create mode 100644 LibD28x64/FMXfsADO22.dpk create mode 100644 LibD28x64/FMXfsADO22.res create mode 100644 LibD28x64/FMXfsADO23.dpk create mode 100644 LibD28x64/FMXfsADO23.res create mode 100644 LibD28x64/FMXfsADO24.dpk create mode 100644 LibD28x64/FMXfsADO24.res create mode 100644 LibD28x64/FMXfsADO25.dpk create mode 100644 LibD28x64/FMXfsADO25.res create mode 100644 LibD28x64/FMXfsADO26.dpk create mode 100644 LibD28x64/FMXfsADO27.dpk create mode 100644 LibD28x64/FMXfsADO28.dpk create mode 100644 LibD28x64/FMXfsADO29.dpk create mode 100644 LibD28x64/FMXfsDB16.dpk create mode 100644 LibD28x64/FMXfsDB16.res create mode 100644 LibD28x64/FMXfsDB17.dpk create mode 100644 LibD28x64/FMXfsDB17.res create mode 100644 LibD28x64/FMXfsDB18.dpk create mode 100644 LibD28x64/FMXfsDB18.otares create mode 100644 LibD28x64/FMXfsDB18.res create mode 100644 LibD28x64/FMXfsDB19.dpk create mode 100644 LibD28x64/FMXfsDB19.otares create mode 100644 LibD28x64/FMXfsDB19.res create mode 100644 LibD28x64/FMXfsDB20.dpk create mode 100644 LibD28x64/FMXfsDB20.otares create mode 100644 LibD28x64/FMXfsDB20.res create mode 100644 LibD28x64/FMXfsDB21.dpk create mode 100644 LibD28x64/FMXfsDB21.otares create mode 100644 LibD28x64/FMXfsDB21.res create mode 100644 LibD28x64/FMXfsDB22.dpk create mode 100644 LibD28x64/FMXfsDB22.otares create mode 100644 LibD28x64/FMXfsDB22.res create mode 100644 LibD28x64/FMXfsDB23.dpk create mode 100644 LibD28x64/FMXfsDB23.otares create mode 100644 LibD28x64/FMXfsDB23.res create mode 100644 LibD28x64/FMXfsDB24.dpk create mode 100644 LibD28x64/FMXfsDB24.otares create mode 100644 LibD28x64/FMXfsDB24.res create mode 100644 LibD28x64/FMXfsDB25.dpk create mode 100644 LibD28x64/FMXfsDB25.otares create mode 100644 LibD28x64/FMXfsDB25.res create mode 100644 LibD28x64/FMXfsDB26.dpk create mode 100644 LibD28x64/FMXfsDB27.dpk create mode 100644 LibD28x64/FMXfsDB28.dpk create mode 100644 LibD28x64/FMXfsDB29.dpk create mode 100644 LibD28x64/FMXfsDB29.dproj create mode 100644 LibD28x64/FMXfsDB29.res create mode 100644 LibD28x64/FMXfsIBX16.dpk create mode 100644 LibD28x64/FMXfsIBX16.res create mode 100644 LibD28x64/FMXfsIBX17.dpk create mode 100644 LibD28x64/FMXfsIBX17.res create mode 100644 LibD28x64/FMXfsIBX18.dpk create mode 100644 LibD28x64/FMXfsIBX18.res create mode 100644 LibD28x64/FMXfsIBX19.dpk create mode 100644 LibD28x64/FMXfsIBX19.res create mode 100644 LibD28x64/FMXfsIBX20.dpk create mode 100644 LibD28x64/FMXfsIBX20.res create mode 100644 LibD28x64/FMXfsIBX21.dpk create mode 100644 LibD28x64/FMXfsIBX21.res create mode 100644 LibD28x64/FMXfsIBX22.dpk create mode 100644 LibD28x64/FMXfsIBX22.res create mode 100644 LibD28x64/FMXfsIBX23.dpk create mode 100644 LibD28x64/FMXfsIBX23.res create mode 100644 LibD28x64/FMXfsIBX24.dpk create mode 100644 LibD28x64/FMXfsIBX24.res create mode 100644 LibD28x64/FMXfsIBX25.dpk create mode 100644 LibD28x64/FMXfsIBX25.res create mode 100644 LibD28x64/FMXfsIBX26.dpk create mode 100644 LibD28x64/FMXfsIBX27.dpk create mode 100644 LibD28x64/FMXfsIBX28.dpk create mode 100644 LibD28x64/FMXfsIBX29.dpk create mode 100644 LibD28x64/FMXfsTee16.dpk create mode 100644 LibD28x64/FMXfsTee16.res create mode 100644 LibD28x64/FMXfsTee17.dpk create mode 100644 LibD28x64/FMXfsTee17.res create mode 100644 LibD28x64/FMXfsTee18.dpk create mode 100644 LibD28x64/FMXfsTee18.res create mode 100644 LibD28x64/FMXfsTee19.dpk create mode 100644 LibD28x64/FMXfsTee19.res create mode 100644 LibD28x64/FMXfsTee20.dpk create mode 100644 LibD28x64/FMXfsTee20.res create mode 100644 LibD28x64/FMXfsTee21.dpk create mode 100644 LibD28x64/FMXfsTee21.res create mode 100644 LibD28x64/FMXfsTee22.dpk create mode 100644 LibD28x64/FMXfsTee22.res create mode 100644 LibD28x64/FMXfsTee23.dpk create mode 100644 LibD28x64/FMXfsTee23.res create mode 100644 LibD28x64/FMXfsTee24.dpk create mode 100644 LibD28x64/FMXfsTee24.res create mode 100644 LibD28x64/FMXfsTee25.dpk create mode 100644 LibD28x64/FMXfsTee25.res create mode 100644 LibD28x64/FMXfsTee26.dpk create mode 100644 LibD28x64/FMXfsTee27.dpk create mode 100644 LibD28x64/FMXfsTee28.dpk create mode 100644 LibD28x64/FMXfsTee29.dpk create mode 100644 LibD28x64/FMXfsTee29.dproj create mode 100644 LibD28x64/FMXfs_iadoreg.pas create mode 100644 LibD28x64/FMXfs_idbreg.pas create mode 100644 LibD28x64/FMXfs_iibxreg.pas create mode 100644 LibD28x64/FMXfs_ireg.pas create mode 100644 LibD28x64/FMXfs_iteereg.pas create mode 100644 LibD28x64/FmxLinuxFrxDBX.dpr create mode 100644 LibD28x64/FmxLinuxFrxExp.dpr create mode 100644 LibD28x64/FmxLinuxFrxFD.dpr create mode 100644 LibD28x64/FmxLinuxFrxIBX.dpr create mode 100644 LibD28x64/FmxLinuxFrxLang.dpr create mode 100644 LibD28x64/FmxLinuxFrxMain.dpr create mode 100644 LibD28x64/FmxLinuxFrxTee.dpr create mode 100644 LibD28x64/ProjectGroup1.groupproj create mode 100644 LibD28x64/dclFMXfrx16.dpk create mode 100644 LibD28x64/dclFMXfrx16.res create mode 100644 LibD28x64/dclFMXfrx17.dpk create mode 100644 LibD28x64/dclFMXfrx17.res create mode 100644 LibD28x64/dclFMXfrx18.dpk create mode 100644 LibD28x64/dclFMXfrx18.res create mode 100644 LibD28x64/dclFMXfrx19.dpk create mode 100644 LibD28x64/dclFMXfrx19.res create mode 100644 LibD28x64/dclFMXfrx20.dpk create mode 100644 LibD28x64/dclFMXfrx20.res create mode 100644 LibD28x64/dclFMXfrx21.dpk create mode 100644 LibD28x64/dclFMXfrx21.res create mode 100644 LibD28x64/dclFMXfrx22.dpk create mode 100644 LibD28x64/dclFMXfrx22.res create mode 100644 LibD28x64/dclFMXfrx23.dpk create mode 100644 LibD28x64/dclFMXfrx23.res create mode 100644 LibD28x64/dclFMXfrx24.dpk create mode 100644 LibD28x64/dclFMXfrx24.res create mode 100644 LibD28x64/dclFMXfrx25.dpk create mode 100644 LibD28x64/dclFMXfrx25.otares create mode 100644 LibD28x64/dclFMXfrx25.res create mode 100644 LibD28x64/dclFMXfrx26.dpk create mode 100644 LibD28x64/dclFMXfrx27.dpk create mode 100644 LibD28x64/dclFMXfrx29.dpk create mode 100644 LibD28x64/dclFMXfrx29.dproj create mode 100644 LibD28x64/dclFMXfrxADO16.dpk create mode 100644 LibD28x64/dclFMXfrxADO16.res create mode 100644 LibD28x64/dclFMXfrxADO17.dpk create mode 100644 LibD28x64/dclFMXfrxADO17.res create mode 100644 LibD28x64/dclFMXfrxADO18.dpk create mode 100644 LibD28x64/dclFMXfrxADO18.res create mode 100644 LibD28x64/dclFMXfrxADO19.dpk create mode 100644 LibD28x64/dclFMXfrxADO19.res create mode 100644 LibD28x64/dclFMXfrxADO20.dpk create mode 100644 LibD28x64/dclFMXfrxADO20.res create mode 100644 LibD28x64/dclFMXfrxADO21.dpk create mode 100644 LibD28x64/dclFMXfrxADO21.res create mode 100644 LibD28x64/dclFMXfrxADO22.dpk create mode 100644 LibD28x64/dclFMXfrxADO22.res create mode 100644 LibD28x64/dclFMXfrxADO23.dpk create mode 100644 LibD28x64/dclFMXfrxADO23.res create mode 100644 LibD28x64/dclFMXfrxADO24.dpk create mode 100644 LibD28x64/dclFMXfrxADO24.res create mode 100644 LibD28x64/dclFMXfrxADO25.dpk create mode 100644 LibD28x64/dclFMXfrxADO25.res create mode 100644 LibD28x64/dclFMXfrxADO26.dpk create mode 100644 LibD28x64/dclFMXfrxADO27.dpk create mode 100644 LibD28x64/dclFMXfrxADO28.dpk create mode 100644 LibD28x64/dclFMXfrxADO29.dpk create mode 100644 LibD28x64/dclFMXfrxDB16.dpk create mode 100644 LibD28x64/dclFMXfrxDB16.res create mode 100644 LibD28x64/dclFMXfrxDB17.dpk create mode 100644 LibD28x64/dclFMXfrxDB17.res create mode 100644 LibD28x64/dclFMXfrxDB18.dpk create mode 100644 LibD28x64/dclFMXfrxDB18.res create mode 100644 LibD28x64/dclFMXfrxDB19.dpk create mode 100644 LibD28x64/dclFMXfrxDB19.res create mode 100644 LibD28x64/dclFMXfrxDB20.dpk create mode 100644 LibD28x64/dclFMXfrxDB20.res create mode 100644 LibD28x64/dclFMXfrxDB21.dpk create mode 100644 LibD28x64/dclFMXfrxDB21.res create mode 100644 LibD28x64/dclFMXfrxDB22.dpk create mode 100644 LibD28x64/dclFMXfrxDB22.res create mode 100644 LibD28x64/dclFMXfrxDB23.dpk create mode 100644 LibD28x64/dclFMXfrxDB23.res create mode 100644 LibD28x64/dclFMXfrxDB24.dpk create mode 100644 LibD28x64/dclFMXfrxDB24.res create mode 100644 LibD28x64/dclFMXfrxDB25.dpk create mode 100644 LibD28x64/dclFMXfrxDB25.otares create mode 100644 LibD28x64/dclFMXfrxDB25.res create mode 100644 LibD28x64/dclFMXfrxDB26.dpk create mode 100644 LibD28x64/dclFMXfrxDB27.dpk create mode 100644 LibD28x64/dclFMXfrxDB29.dpk create mode 100644 LibD28x64/dclFMXfrxDB29.dproj create mode 100644 LibD28x64/dclFMXfrxDB29.res create mode 100644 LibD28x64/dclFMXfrxDBX16.dpk create mode 100644 LibD28x64/dclFMXfrxDBX16.res create mode 100644 LibD28x64/dclFMXfrxDBX17.dpk create mode 100644 LibD28x64/dclFMXfrxDBX17.res create mode 100644 LibD28x64/dclFMXfrxDBX18.dpk create mode 100644 LibD28x64/dclFMXfrxDBX18.res create mode 100644 LibD28x64/dclFMXfrxDBX19.dpk create mode 100644 LibD28x64/dclFMXfrxDBX19.res create mode 100644 LibD28x64/dclFMXfrxDBX20.dpk create mode 100644 LibD28x64/dclFMXfrxDBX20.res create mode 100644 LibD28x64/dclFMXfrxDBX21.dpk create mode 100644 LibD28x64/dclFMXfrxDBX21.res create mode 100644 LibD28x64/dclFMXfrxDBX22.dpk create mode 100644 LibD28x64/dclFMXfrxDBX22.res create mode 100644 LibD28x64/dclFMXfrxDBX23.dpk create mode 100644 LibD28x64/dclFMXfrxDBX23.res create mode 100644 LibD28x64/dclFMXfrxDBX24.dpk create mode 100644 LibD28x64/dclFMXfrxDBX24.res create mode 100644 LibD28x64/dclFMXfrxDBX25.dpk create mode 100644 LibD28x64/dclFMXfrxDBX25.res create mode 100644 LibD28x64/dclFMXfrxDBX26.dpk create mode 100644 LibD28x64/dclFMXfrxDBX27.dpk create mode 100644 LibD28x64/dclFMXfrxDBX28.dproj create mode 100644 LibD28x64/dclFMXfrxDBX29.dpk create mode 100644 LibD28x64/dclFMXfrxDBX29.dproj create mode 100644 LibD28x64/dclFMXfrxDBX29.res create mode 100644 LibD28x64/dclFMXfrxFD18.dpk create mode 100644 LibD28x64/dclFMXfrxFD18.res create mode 100644 LibD28x64/dclFMXfrxFD19.dpk create mode 100644 LibD28x64/dclFMXfrxFD19.res create mode 100644 LibD28x64/dclFMXfrxFD20.dpk create mode 100644 LibD28x64/dclFMXfrxFD20.res create mode 100644 LibD28x64/dclFMXfrxFD21.dpk create mode 100644 LibD28x64/dclFMXfrxFD21.res create mode 100644 LibD28x64/dclFMXfrxFD22.dpk create mode 100644 LibD28x64/dclFMXfrxFD22.res create mode 100644 LibD28x64/dclFMXfrxFD23.dpk create mode 100644 LibD28x64/dclFMXfrxFD23.res create mode 100644 LibD28x64/dclFMXfrxFD24.dpk create mode 100644 LibD28x64/dclFMXfrxFD24.res create mode 100644 LibD28x64/dclFMXfrxFD25.dpk create mode 100644 LibD28x64/dclFMXfrxFD25.res create mode 100644 LibD28x64/dclFMXfrxFD26.dpk create mode 100644 LibD28x64/dclFMXfrxFD27.dpk create mode 100644 LibD28x64/dclFMXfrxFD29.dpk create mode 100644 LibD28x64/dclFMXfrxFD29.dproj create mode 100644 LibD28x64/dclFMXfrxIBX16.dpk create mode 100644 LibD28x64/dclFMXfrxIBX16.res create mode 100644 LibD28x64/dclFMXfrxIBX17.dpk create mode 100644 LibD28x64/dclFMXfrxIBX17.res create mode 100644 LibD28x64/dclFMXfrxIBX18.dpk create mode 100644 LibD28x64/dclFMXfrxIBX18.res create mode 100644 LibD28x64/dclFMXfrxIBX19.dpk create mode 100644 LibD28x64/dclFMXfrxIBX19.res create mode 100644 LibD28x64/dclFMXfrxIBX20.dpk create mode 100644 LibD28x64/dclFMXfrxIBX20.res create mode 100644 LibD28x64/dclFMXfrxIBX21.dpk create mode 100644 LibD28x64/dclFMXfrxIBX21.res create mode 100644 LibD28x64/dclFMXfrxIBX22.dpk create mode 100644 LibD28x64/dclFMXfrxIBX22.res create mode 100644 LibD28x64/dclFMXfrxIBX23.dpk create mode 100644 LibD28x64/dclFMXfrxIBX23.res create mode 100644 LibD28x64/dclFMXfrxIBX24.dpk create mode 100644 LibD28x64/dclFMXfrxIBX24.res create mode 100644 LibD28x64/dclFMXfrxIBX25.dpk create mode 100644 LibD28x64/dclFMXfrxIBX25.res create mode 100644 LibD28x64/dclFMXfrxIBX26.dpk create mode 100644 LibD28x64/dclFMXfrxIBX27.dpk create mode 100644 LibD28x64/dclFMXfrxIBX28.dpk create mode 100644 LibD28x64/dclFMXfrxTee16.dpk create mode 100644 LibD28x64/dclFMXfrxTee16.res create mode 100644 LibD28x64/dclFMXfrxTee17.dpk create mode 100644 LibD28x64/dclFMXfrxTee17.res create mode 100644 LibD28x64/dclFMXfrxTee18.dpk create mode 100644 LibD28x64/dclFMXfrxTee18.res create mode 100644 LibD28x64/dclFMXfrxTee19.dpk create mode 100644 LibD28x64/dclFMXfrxTee19.res create mode 100644 LibD28x64/dclFMXfrxTee20.dpk create mode 100644 LibD28x64/dclFMXfrxTee20.res create mode 100644 LibD28x64/dclFMXfrxTee21.dpk create mode 100644 LibD28x64/dclFMXfrxTee21.res create mode 100644 LibD28x64/dclFMXfrxTee22.dpk create mode 100644 LibD28x64/dclFMXfrxTee22.res create mode 100644 LibD28x64/dclFMXfrxTee23.dpk create mode 100644 LibD28x64/dclFMXfrxTee23.res create mode 100644 LibD28x64/dclFMXfrxTee24.dpk create mode 100644 LibD28x64/dclFMXfrxTee24.res create mode 100644 LibD28x64/dclFMXfrxTee25.dpk create mode 100644 LibD28x64/dclFMXfrxTee25.otares create mode 100644 LibD28x64/dclFMXfrxTee25.res create mode 100644 LibD28x64/dclFMXfrxTee26.dpk create mode 100644 LibD28x64/dclFMXfrxTee27.dpk create mode 100644 LibD28x64/dclFMXfrxTee29.dpk create mode 100644 LibD28x64/dclFMXfrxTee29.dproj create mode 100644 LibD28x64/dclFMXfrxe16.dpk create mode 100644 LibD28x64/dclFMXfrxe16.res create mode 100644 LibD28x64/dclFMXfrxe17.dpk create mode 100644 LibD28x64/dclFMXfrxe17.res create mode 100644 LibD28x64/dclFMXfrxe18.dpk create mode 100644 LibD28x64/dclFMXfrxe18.res create mode 100644 LibD28x64/dclFMXfrxe19.dpk create mode 100644 LibD28x64/dclFMXfrxe19.res create mode 100644 LibD28x64/dclFMXfrxe20.dpk create mode 100644 LibD28x64/dclFMXfrxe20.res create mode 100644 LibD28x64/dclFMXfrxe21.dpk create mode 100644 LibD28x64/dclFMXfrxe21.res create mode 100644 LibD28x64/dclFMXfrxe22.dpk create mode 100644 LibD28x64/dclFMXfrxe22.res create mode 100644 LibD28x64/dclFMXfrxe23.dpk create mode 100644 LibD28x64/dclFMXfrxe23.res create mode 100644 LibD28x64/dclFMXfrxe24.dpk create mode 100644 LibD28x64/dclFMXfrxe24.dproj create mode 100644 LibD28x64/dclFMXfrxe24.otares create mode 100644 LibD28x64/dclFMXfrxe24.res create mode 100644 LibD28x64/dclFMXfrxe25.dpk create mode 100644 LibD28x64/dclFMXfrxe25.otares create mode 100644 LibD28x64/dclFMXfrxe25.res create mode 100644 LibD28x64/dclFMXfrxe26.dpk create mode 100644 LibD28x64/dclFMXfrxe27.dpk create mode 100644 LibD28x64/dclFMXfrxe29.dpk create mode 100644 LibD28x64/dclFMXfrxe29.dproj create mode 100644 LibD28x64/dclFMXfrxe29.res create mode 100644 LibD28x64/dclFMXfs16.dpk create mode 100644 LibD28x64/dclFMXfs16.res create mode 100644 LibD28x64/dclFMXfs17.dpk create mode 100644 LibD28x64/dclFMXfs17.res create mode 100644 LibD28x64/dclFMXfs18.dpk create mode 100644 LibD28x64/dclFMXfs18.otares create mode 100644 LibD28x64/dclFMXfs18.res create mode 100644 LibD28x64/dclFMXfs19.dpk create mode 100644 LibD28x64/dclFMXfs19.otares create mode 100644 LibD28x64/dclFMXfs19.res create mode 100644 LibD28x64/dclFMXfs20.dpk create mode 100644 LibD28x64/dclFMXfs20.otares create mode 100644 LibD28x64/dclFMXfs20.res create mode 100644 LibD28x64/dclFMXfs21.dpk create mode 100644 LibD28x64/dclFMXfs21.otares create mode 100644 LibD28x64/dclFMXfs21.res create mode 100644 LibD28x64/dclFMXfs22.dpk create mode 100644 LibD28x64/dclFMXfs22.otares create mode 100644 LibD28x64/dclFMXfs22.res create mode 100644 LibD28x64/dclFMXfs23.dpk create mode 100644 LibD28x64/dclFMXfs23.otares create mode 100644 LibD28x64/dclFMXfs23.res create mode 100644 LibD28x64/dclFMXfs24.dpk create mode 100644 LibD28x64/dclFMXfs24.otares create mode 100644 LibD28x64/dclFMXfs24.res create mode 100644 LibD28x64/dclFMXfs25.dpk create mode 100644 LibD28x64/dclFMXfs25.otares create mode 100644 LibD28x64/dclFMXfs25.res create mode 100644 LibD28x64/dclFMXfs26.dpk create mode 100644 LibD28x64/dclFMXfs27.dpk create mode 100644 LibD28x64/dclFMXfs28.dpk create mode 100644 LibD28x64/dclFMXfs29.dpk create mode 100644 LibD28x64/dclFMXfs29.dproj create mode 100644 LibD28x64/dclFMXfsADO16.dpk create mode 100644 LibD28x64/dclFMXfsADO16.res create mode 100644 LibD28x64/dclFMXfsADO17.dpk create mode 100644 LibD28x64/dclFMXfsADO17.res create mode 100644 LibD28x64/dclFMXfsADO18.dpk create mode 100644 LibD28x64/dclFMXfsADO18.res create mode 100644 LibD28x64/dclFMXfsADO19.dpk create mode 100644 LibD28x64/dclFMXfsADO19.res create mode 100644 LibD28x64/dclFMXfsADO20.dpk create mode 100644 LibD28x64/dclFMXfsADO20.res create mode 100644 LibD28x64/dclFMXfsADO21.dpk create mode 100644 LibD28x64/dclFMXfsADO21.res create mode 100644 LibD28x64/dclFMXfsADO22.dpk create mode 100644 LibD28x64/dclFMXfsADO22.res create mode 100644 LibD28x64/dclFMXfsADO23.dpk create mode 100644 LibD28x64/dclFMXfsADO23.res create mode 100644 LibD28x64/dclFMXfsADO24.dpk create mode 100644 LibD28x64/dclFMXfsADO24.res create mode 100644 LibD28x64/dclFMXfsADO25.dpk create mode 100644 LibD28x64/dclFMXfsADO25.res create mode 100644 LibD28x64/dclFMXfsADO26.dpk create mode 100644 LibD28x64/dclFMXfsADO27.dpk create mode 100644 LibD28x64/dclFMXfsADO28.dpk create mode 100644 LibD28x64/dclFMXfsADO29.dpk create mode 100644 LibD28x64/dclFMXfsDB16.dpk create mode 100644 LibD28x64/dclFMXfsDB16.res create mode 100644 LibD28x64/dclFMXfsDB17.dpk create mode 100644 LibD28x64/dclFMXfsDB17.res create mode 100644 LibD28x64/dclFMXfsDB18.dpk create mode 100644 LibD28x64/dclFMXfsDB18.otares create mode 100644 LibD28x64/dclFMXfsDB18.res create mode 100644 LibD28x64/dclFMXfsDB19.dpk create mode 100644 LibD28x64/dclFMXfsDB19.otares create mode 100644 LibD28x64/dclFMXfsDB19.res create mode 100644 LibD28x64/dclFMXfsDB20.dpk create mode 100644 LibD28x64/dclFMXfsDB20.otares create mode 100644 LibD28x64/dclFMXfsDB20.res create mode 100644 LibD28x64/dclFMXfsDB21.dpk create mode 100644 LibD28x64/dclFMXfsDB21.otares create mode 100644 LibD28x64/dclFMXfsDB21.res create mode 100644 LibD28x64/dclFMXfsDB22.dpk create mode 100644 LibD28x64/dclFMXfsDB22.otares create mode 100644 LibD28x64/dclFMXfsDB22.res create mode 100644 LibD28x64/dclFMXfsDB23.dpk create mode 100644 LibD28x64/dclFMXfsDB23.otares create mode 100644 LibD28x64/dclFMXfsDB23.res create mode 100644 LibD28x64/dclFMXfsDB24.dpk create mode 100644 LibD28x64/dclFMXfsDB24.otares create mode 100644 LibD28x64/dclFMXfsDB24.res create mode 100644 LibD28x64/dclFMXfsDB25.dpk create mode 100644 LibD28x64/dclFMXfsDB25.otares create mode 100644 LibD28x64/dclFMXfsDB25.res create mode 100644 LibD28x64/dclFMXfsDB26.dpk create mode 100644 LibD28x64/dclFMXfsDB27.dpk create mode 100644 LibD28x64/dclFMXfsDB28.dpk create mode 100644 LibD28x64/dclFMXfsDB29.dpk create mode 100644 LibD28x64/dclFMXfsDB29.dproj create mode 100644 LibD28x64/dclFMXfsIBX16.dpk create mode 100644 LibD28x64/dclFMXfsIBX16.res create mode 100644 LibD28x64/dclFMXfsIBX17.dpk create mode 100644 LibD28x64/dclFMXfsIBX17.res create mode 100644 LibD28x64/dclFMXfsIBX18.dpk create mode 100644 LibD28x64/dclFMXfsIBX18.res create mode 100644 LibD28x64/dclFMXfsIBX19.dpk create mode 100644 LibD28x64/dclFMXfsIBX19.res create mode 100644 LibD28x64/dclFMXfsIBX20.dpk create mode 100644 LibD28x64/dclFMXfsIBX20.res create mode 100644 LibD28x64/dclFMXfsIBX21.dpk create mode 100644 LibD28x64/dclFMXfsIBX21.res create mode 100644 LibD28x64/dclFMXfsIBX22.dpk create mode 100644 LibD28x64/dclFMXfsIBX22.res create mode 100644 LibD28x64/dclFMXfsIBX23.dpk create mode 100644 LibD28x64/dclFMXfsIBX23.res create mode 100644 LibD28x64/dclFMXfsIBX24.dpk create mode 100644 LibD28x64/dclFMXfsIBX24.res create mode 100644 LibD28x64/dclFMXfsIBX25.dpk create mode 100644 LibD28x64/dclFMXfsIBX25.res create mode 100644 LibD28x64/dclFMXfsIBX26.dpk create mode 100644 LibD28x64/dclFMXfsIBX27.dpk create mode 100644 LibD28x64/dclFMXfsIBX28.dpk create mode 100644 LibD28x64/dclFMXfsIBX29.dpk create mode 100644 LibD28x64/dclFMXfsTee16.dpk create mode 100644 LibD28x64/dclFMXfsTee16.res create mode 100644 LibD28x64/dclFMXfsTee17.dpk create mode 100644 LibD28x64/dclFMXfsTee17.res create mode 100644 LibD28x64/dclFMXfsTee18.dpk create mode 100644 LibD28x64/dclFMXfsTee18.res create mode 100644 LibD28x64/dclFMXfsTee19.dpk create mode 100644 LibD28x64/dclFMXfsTee19.res create mode 100644 LibD28x64/dclFMXfsTee20.dpk create mode 100644 LibD28x64/dclFMXfsTee20.res create mode 100644 LibD28x64/dclFMXfsTee21.dpk create mode 100644 LibD28x64/dclFMXfsTee21.res create mode 100644 LibD28x64/dclFMXfsTee22.dpk create mode 100644 LibD28x64/dclFMXfsTee22.res create mode 100644 LibD28x64/dclFMXfsTee23.dpk create mode 100644 LibD28x64/dclFMXfsTee23.res create mode 100644 LibD28x64/dclFMXfsTee24.dpk create mode 100644 LibD28x64/dclFMXfsTee24.res create mode 100644 LibD28x64/dclFMXfsTee25.dpk create mode 100644 LibD28x64/dclFMXfsTee25.res create mode 100644 LibD28x64/dclFMXfsTee26.dpk create mode 100644 LibD28x64/dclFMXfsTee27.dpk create mode 100644 LibD28x64/dclFMXfsTee28.dpk create mode 100644 LibD28x64/dclFMXfsTee29.dpk create mode 100644 LibD28x64/dclFMXfsTee29.dproj create mode 100644 LibD28x64/dclfs10.dpk create mode 100644 LibD28x64/dclfs11.dpk create mode 100644 LibD28x64/dclfs12.dpk create mode 100644 LibD28x64/dclfs14.dpk create mode 100644 LibD28x64/dclfs15.dpk create mode 100644 LibD28x64/dclfs16.dpk create mode 100644 LibD28x64/dclfs17.dpk create mode 100644 LibD28x64/dclfs18.dpk create mode 100644 LibD28x64/dclfs19.dpk create mode 100644 LibD28x64/dclfs20.dpk create mode 100644 LibD28x64/dclfs21.dpk create mode 100644 LibD28x64/dclfs22.dpk create mode 100644 LibD28x64/dclfs23.dpk create mode 100644 LibD28x64/dclfs24.dpk create mode 100644 LibD28x64/dclfs25.dpk create mode 100644 LibD28x64/dclfs26.dpk create mode 100644 LibD28x64/dclfs27.dpk create mode 100644 LibD28x64/dclfs28.dpk create mode 100644 LibD28x64/dclfs29.dpk create mode 100644 LibD28x64/dclfs29.dproj create mode 100644 LibD28x64/dclfs29.res create mode 100644 LibD28x64/dclfs4.dpk create mode 100644 LibD28x64/dclfs5.dpk create mode 100644 LibD28x64/dclfs6.dpk create mode 100644 LibD28x64/dclfs7.dpk create mode 100644 LibD28x64/dclfs9.dpk create mode 100644 LibD28x64/dclfsADO10.dpk create mode 100644 LibD28x64/dclfsADO11.dpk create mode 100644 LibD28x64/dclfsADO12.dpk create mode 100644 LibD28x64/dclfsADO14.dpk create mode 100644 LibD28x64/dclfsADO15.dpk create mode 100644 LibD28x64/dclfsADO16.dpk create mode 100644 LibD28x64/dclfsADO17.dpk create mode 100644 LibD28x64/dclfsADO18.dpk create mode 100644 LibD28x64/dclfsADO19.dpk create mode 100644 LibD28x64/dclfsADO20.dpk create mode 100644 LibD28x64/dclfsADO21.dpk create mode 100644 LibD28x64/dclfsADO22.dpk create mode 100644 LibD28x64/dclfsADO23.dpk create mode 100644 LibD28x64/dclfsADO24.dpk create mode 100644 LibD28x64/dclfsADO25.dpk create mode 100644 LibD28x64/dclfsADO26.dpk create mode 100644 LibD28x64/dclfsADO27.dpk create mode 100644 LibD28x64/dclfsADO28.dpk create mode 100644 LibD28x64/dclfsADO29.dpk create mode 100644 LibD28x64/dclfsADO5.dpk create mode 100644 LibD28x64/dclfsADO6.dpk create mode 100644 LibD28x64/dclfsADO7.dpk create mode 100644 LibD28x64/dclfsADO9.dpk create mode 100644 LibD28x64/dclfsBDE10.dpk create mode 100644 LibD28x64/dclfsBDE11.dpk create mode 100644 LibD28x64/dclfsBDE12.dpk create mode 100644 LibD28x64/dclfsBDE14.dpk create mode 100644 LibD28x64/dclfsBDE15.dpk create mode 100644 LibD28x64/dclfsBDE16.dpk create mode 100644 LibD28x64/dclfsBDE17.dpk create mode 100644 LibD28x64/dclfsBDE18.dpk create mode 100644 LibD28x64/dclfsBDE19.dpk create mode 100644 LibD28x64/dclfsBDE20.dpk create mode 100644 LibD28x64/dclfsBDE21.dpk create mode 100644 LibD28x64/dclfsBDE22.dpk create mode 100644 LibD28x64/dclfsBDE23.dpk create mode 100644 LibD28x64/dclfsBDE24.dpk create mode 100644 LibD28x64/dclfsBDE25.dpk create mode 100644 LibD28x64/dclfsBDE26.dpk create mode 100644 LibD28x64/dclfsBDE27.dpk create mode 100644 LibD28x64/dclfsBDE28.dpk create mode 100644 LibD28x64/dclfsBDE29.dpk create mode 100644 LibD28x64/dclfsBDE4.dpk create mode 100644 LibD28x64/dclfsBDE5.dpk create mode 100644 LibD28x64/dclfsBDE6.dpk create mode 100644 LibD28x64/dclfsBDE7.dpk create mode 100644 LibD28x64/dclfsBDE9.dpk create mode 100644 LibD28x64/dclfsDB10.dpk create mode 100644 LibD28x64/dclfsDB11.dpk create mode 100644 LibD28x64/dclfsDB12.dpk create mode 100644 LibD28x64/dclfsDB14.dpk create mode 100644 LibD28x64/dclfsDB15.dpk create mode 100644 LibD28x64/dclfsDB16.dpk create mode 100644 LibD28x64/dclfsDB17.dpk create mode 100644 LibD28x64/dclfsDB18.dpk create mode 100644 LibD28x64/dclfsDB19.dpk create mode 100644 LibD28x64/dclfsDB20.dpk create mode 100644 LibD28x64/dclfsDB21.dpk create mode 100644 LibD28x64/dclfsDB22.dpk create mode 100644 LibD28x64/dclfsDB23.dpk create mode 100644 LibD28x64/dclfsDB24.dpk create mode 100644 LibD28x64/dclfsDB25.dpk create mode 100644 LibD28x64/dclfsDB26.dpk create mode 100644 LibD28x64/dclfsDB27.dpk create mode 100644 LibD28x64/dclfsDB28.dpk create mode 100644 LibD28x64/dclfsDB29.dpk create mode 100644 LibD28x64/dclfsDB29.dproj create mode 100644 LibD28x64/dclfsDB29.res create mode 100644 LibD28x64/dclfsDB4.dpk create mode 100644 LibD28x64/dclfsDB5.dpk create mode 100644 LibD28x64/dclfsDB6.dpk create mode 100644 LibD28x64/dclfsDB7.dpk create mode 100644 LibD28x64/dclfsDB9.dpk create mode 100644 LibD28x64/dclfsFD15.dpk create mode 100644 LibD28x64/dclfsFD16.dpk create mode 100644 LibD28x64/dclfsFD17.dpk create mode 100644 LibD28x64/dclfsFD18.dpk create mode 100644 LibD28x64/dclfsFD19.dpk create mode 100644 LibD28x64/dclfsFD20.dpk create mode 100644 LibD28x64/dclfsFD21.dpk create mode 100644 LibD28x64/dclfsFD22.dpk create mode 100644 LibD28x64/dclfsFD23.dpk create mode 100644 LibD28x64/dclfsFD24.dpk create mode 100644 LibD28x64/dclfsFD25.dpk create mode 100644 LibD28x64/dclfsFD26.dpk create mode 100644 LibD28x64/dclfsFD27.dpk create mode 100644 LibD28x64/dclfsFD28.dpk create mode 100644 LibD28x64/dclfsFD29.dpk create mode 100644 LibD28x64/dclfsFD29.dproj create mode 100644 LibD28x64/dclfsFD29.res create mode 100644 LibD28x64/dclfsIBX10.dpk create mode 100644 LibD28x64/dclfsIBX11.dpk create mode 100644 LibD28x64/dclfsIBX12.dpk create mode 100644 LibD28x64/dclfsIBX14.dpk create mode 100644 LibD28x64/dclfsIBX15.dpk create mode 100644 LibD28x64/dclfsIBX16.dpk create mode 100644 LibD28x64/dclfsIBX17.dpk create mode 100644 LibD28x64/dclfsIBX18.dpk create mode 100644 LibD28x64/dclfsIBX19.dpk create mode 100644 LibD28x64/dclfsIBX20.dpk create mode 100644 LibD28x64/dclfsIBX21.dpk create mode 100644 LibD28x64/dclfsIBX22.dpk create mode 100644 LibD28x64/dclfsIBX23.dpk create mode 100644 LibD28x64/dclfsIBX24.dpk create mode 100644 LibD28x64/dclfsIBX25.dpk create mode 100644 LibD28x64/dclfsIBX26.dpk create mode 100644 LibD28x64/dclfsIBX27.dpk create mode 100644 LibD28x64/dclfsIBX28.dpk create mode 100644 LibD28x64/dclfsIBX29.dpk create mode 100644 LibD28x64/dclfsIBX5.dpk create mode 100644 LibD28x64/dclfsIBX6.dpk create mode 100644 LibD28x64/dclfsIBX7.dpk create mode 100644 LibD28x64/dclfsIBX9.dpk create mode 100644 LibD28x64/dclfsTee10.dpk create mode 100644 LibD28x64/dclfsTee11.dpk create mode 100644 LibD28x64/dclfsTee12.dpk create mode 100644 LibD28x64/dclfsTee14.dpk create mode 100644 LibD28x64/dclfsTee15.dpk create mode 100644 LibD28x64/dclfsTee16.dpk create mode 100644 LibD28x64/dclfsTee17.dpk create mode 100644 LibD28x64/dclfsTee18.dpk create mode 100644 LibD28x64/dclfsTee19.dpk create mode 100644 LibD28x64/dclfsTee20.dpk create mode 100644 LibD28x64/dclfsTee21.dpk create mode 100644 LibD28x64/dclfsTee22.dpk create mode 100644 LibD28x64/dclfsTee23.dpk create mode 100644 LibD28x64/dclfsTee24.dpk create mode 100644 LibD28x64/dclfsTee25.dpk create mode 100644 LibD28x64/dclfsTee26.dpk create mode 100644 LibD28x64/dclfsTee27.dpk create mode 100644 LibD28x64/dclfsTee28.dpk create mode 100644 LibD28x64/dclfsTee29.dpk create mode 100644 LibD28x64/dclfsTee29.dproj create mode 100644 LibD28x64/dclfsTee29.res create mode 100644 LibD28x64/dclfsTee4.dpk create mode 100644 LibD28x64/dclfsTee5.dpk create mode 100644 LibD28x64/dclfsTee6.dpk create mode 100644 LibD28x64/dclfsTee7.dpk create mode 100644 LibD28x64/dclfsTee9.dpk create mode 100644 LibD28x64/dclfsx.dpk create mode 100644 LibD28x64/dclfsx.dproj create mode 100644 LibD28x64/dclfsx.res create mode 100644 LibD28x64/dclfsx_Icon.ico create mode 100644 LibD28x64/fmx.frxImageConverter.pas create mode 100644 LibD28x64/fmx.inc create mode 100644 LibD28x64/frx.inc create mode 100644 LibD28x64/frxBarcodeEditor.fmx create mode 100644 LibD28x64/frxEditSQL.inc create mode 100644 LibD28x64/frxFMX_PlatformsAttribute.inc create mode 100644 LibD28x64/frxIBXReg.res create mode 100644 LibD28x64/frxPlatformsAttribute.inc create mode 100644 LibD28x64/frxReg.dcr create mode 100644 LibD28x64/frxVersion.inc create mode 100644 LibD28x64/frxe16.otares create mode 100644 LibD28x64/frxeReg.dcr create mode 100644 LibD28x64/frxrcClass.xml create mode 100644 LibD28x64/frxrcDesgn.xml create mode 100644 LibD28x64/frxrcExports.xml create mode 100644 LibD28x64/frxrcInsp.xml create mode 100644 LibD28x64/fs.inc create mode 100644 LibD28x64/fs10.dpk create mode 100644 LibD28x64/fs11.dpk create mode 100644 LibD28x64/fs12.dpk create mode 100644 LibD28x64/fs14.dpk create mode 100644 LibD28x64/fs15.dpk create mode 100644 LibD28x64/fs16.dpk create mode 100644 LibD28x64/fs17.dpk create mode 100644 LibD28x64/fs18.dpk create mode 100644 LibD28x64/fs19.dpk create mode 100644 LibD28x64/fs20.dpk create mode 100644 LibD28x64/fs21.dpk create mode 100644 LibD28x64/fs22.dpk create mode 100644 LibD28x64/fs23.dpk create mode 100644 LibD28x64/fs24.dpk create mode 100644 LibD28x64/fs25.dpk create mode 100644 LibD28x64/fs26.dpk create mode 100644 LibD28x64/fs27.dpk create mode 100644 LibD28x64/fs28.dpk create mode 100644 LibD28x64/fs29.dpk create mode 100644 LibD28x64/fs29.dproj create mode 100644 LibD28x64/fs29.res create mode 100644 LibD28x64/fs4.bpk create mode 100644 LibD28x64/fs4.cpp create mode 100644 LibD28x64/fs4.dpk create mode 100644 LibD28x64/fs4.res create mode 100644 LibD28x64/fs5.bpk create mode 100644 LibD28x64/fs5.cpp create mode 100644 LibD28x64/fs5.dpk create mode 100644 LibD28x64/fs5.res create mode 100644 LibD28x64/fs6.bpk create mode 100644 LibD28x64/fs6.cpp create mode 100644 LibD28x64/fs6.dpk create mode 100644 LibD28x64/fs6.res create mode 100644 LibD28x64/fs7.dpk create mode 100644 LibD28x64/fs9.dpk create mode 100644 LibD28x64/fsADO10.dpk create mode 100644 LibD28x64/fsADO11.dpk create mode 100644 LibD28x64/fsADO12.dpk create mode 100644 LibD28x64/fsADO14.dpk create mode 100644 LibD28x64/fsADO15.dpk create mode 100644 LibD28x64/fsADO16.dpk create mode 100644 LibD28x64/fsADO17.dpk create mode 100644 LibD28x64/fsADO18.dpk create mode 100644 LibD28x64/fsADO19.dpk create mode 100644 LibD28x64/fsADO20.dpk create mode 100644 LibD28x64/fsADO21.dpk create mode 100644 LibD28x64/fsADO22.dpk create mode 100644 LibD28x64/fsADO23.dpk create mode 100644 LibD28x64/fsADO24.dpk create mode 100644 LibD28x64/fsADO25.dpk create mode 100644 LibD28x64/fsADO26.dpk create mode 100644 LibD28x64/fsADO27.dpk create mode 100644 LibD28x64/fsADO28.dpk create mode 100644 LibD28x64/fsADO29.dpk create mode 100644 LibD28x64/fsADO5.bpk create mode 100644 LibD28x64/fsADO5.cpp create mode 100644 LibD28x64/fsADO5.dpk create mode 100644 LibD28x64/fsADO6.bpk create mode 100644 LibD28x64/fsADO6.cpp create mode 100644 LibD28x64/fsADO6.dpk create mode 100644 LibD28x64/fsADO7.dpk create mode 100644 LibD28x64/fsADO9.dpk create mode 100644 LibD28x64/fsBDE10.dpk create mode 100644 LibD28x64/fsBDE11.dpk create mode 100644 LibD28x64/fsBDE12.dpk create mode 100644 LibD28x64/fsBDE14.dpk create mode 100644 LibD28x64/fsBDE15.dpk create mode 100644 LibD28x64/fsBDE16.dpk create mode 100644 LibD28x64/fsBDE17.dpk create mode 100644 LibD28x64/fsBDE18.dpk create mode 100644 LibD28x64/fsBDE19.dpk create mode 100644 LibD28x64/fsBDE20.dpk create mode 100644 LibD28x64/fsBDE21.dpk create mode 100644 LibD28x64/fsBDE22.dpk create mode 100644 LibD28x64/fsBDE23.dpk create mode 100644 LibD28x64/fsBDE24.dpk create mode 100644 LibD28x64/fsBDE25.dpk create mode 100644 LibD28x64/fsBDE26.dpk create mode 100644 LibD28x64/fsBDE27.dpk create mode 100644 LibD28x64/fsBDE28.dpk create mode 100644 LibD28x64/fsBDE29.dpk create mode 100644 LibD28x64/fsBDE4.bpk create mode 100644 LibD28x64/fsBDE4.cpp create mode 100644 LibD28x64/fsBDE4.dpk create mode 100644 LibD28x64/fsBDE5.bpk create mode 100644 LibD28x64/fsBDE5.cpp create mode 100644 LibD28x64/fsBDE5.dpk create mode 100644 LibD28x64/fsBDE6.bpk create mode 100644 LibD28x64/fsBDE6.cpp create mode 100644 LibD28x64/fsBDE6.dpk create mode 100644 LibD28x64/fsBDE7.dpk create mode 100644 LibD28x64/fsBDE9.dpk create mode 100644 LibD28x64/fsDB10.dpk create mode 100644 LibD28x64/fsDB11.dpk create mode 100644 LibD28x64/fsDB12.dpk create mode 100644 LibD28x64/fsDB14.dpk create mode 100644 LibD28x64/fsDB15.dpk create mode 100644 LibD28x64/fsDB16.dpk create mode 100644 LibD28x64/fsDB17.dpk create mode 100644 LibD28x64/fsDB18.dpk create mode 100644 LibD28x64/fsDB19.dpk create mode 100644 LibD28x64/fsDB20.dpk create mode 100644 LibD28x64/fsDB21.dpk create mode 100644 LibD28x64/fsDB22.dpk create mode 100644 LibD28x64/fsDB23.dpk create mode 100644 LibD28x64/fsDB24.dpk create mode 100644 LibD28x64/fsDB25.dpk create mode 100644 LibD28x64/fsDB26.dpk create mode 100644 LibD28x64/fsDB27.dpk create mode 100644 LibD28x64/fsDB28.dpk create mode 100644 LibD28x64/fsDB4.bpk create mode 100644 LibD28x64/fsDB4.cpp create mode 100644 LibD28x64/fsDB4.dpk create mode 100644 LibD28x64/fsDB5.bpk create mode 100644 LibD28x64/fsDB5.cpp create mode 100644 LibD28x64/fsDB5.dpk create mode 100644 LibD28x64/fsDB6.bpk create mode 100644 LibD28x64/fsDB6.cpp create mode 100644 LibD28x64/fsDB6.dpk create mode 100644 LibD28x64/fsDB7.dpk create mode 100644 LibD28x64/fsDB9.dpk create mode 100644 LibD28x64/fsFD15.dpk create mode 100644 LibD28x64/fsFD16.dpk create mode 100644 LibD28x64/fsFD17.dpk create mode 100644 LibD28x64/fsFD18.dpk create mode 100644 LibD28x64/fsFD19.dpk create mode 100644 LibD28x64/fsFD20.dpk create mode 100644 LibD28x64/fsFD21.dpk create mode 100644 LibD28x64/fsFD22.dpk create mode 100644 LibD28x64/fsFD23.dpk create mode 100644 LibD28x64/fsFD24.dpk create mode 100644 LibD28x64/fsFD25.dpk create mode 100644 LibD28x64/fsFD26.dpk create mode 100644 LibD28x64/fsFD27.dpk create mode 100644 LibD28x64/fsFD28.dpk create mode 100644 LibD28x64/fsFD29.dpk create mode 100644 LibD28x64/fsFD29.dproj create mode 100644 LibD28x64/fsFD29.res create mode 100644 LibD28x64/fsIBX10.dpk create mode 100644 LibD28x64/fsIBX11.dpk create mode 100644 LibD28x64/fsIBX12.dpk create mode 100644 LibD28x64/fsIBX14.dpk create mode 100644 LibD28x64/fsIBX15.dpk create mode 100644 LibD28x64/fsIBX16.dpk create mode 100644 LibD28x64/fsIBX17.dpk create mode 100644 LibD28x64/fsIBX18.dpk create mode 100644 LibD28x64/fsIBX19.dpk create mode 100644 LibD28x64/fsIBX20.dpk create mode 100644 LibD28x64/fsIBX21.dpk create mode 100644 LibD28x64/fsIBX22.dpk create mode 100644 LibD28x64/fsIBX23.dpk create mode 100644 LibD28x64/fsIBX24.dpk create mode 100644 LibD28x64/fsIBX25.dpk create mode 100644 LibD28x64/fsIBX26.dpk create mode 100644 LibD28x64/fsIBX27.dpk create mode 100644 LibD28x64/fsIBX28.dpk create mode 100644 LibD28x64/fsIBX29.dpk create mode 100644 LibD28x64/fsIBX5.bpk create mode 100644 LibD28x64/fsIBX5.cpp create mode 100644 LibD28x64/fsIBX5.dpk create mode 100644 LibD28x64/fsIBX6.bpk create mode 100644 LibD28x64/fsIBX6.cpp create mode 100644 LibD28x64/fsIBX6.dpk create mode 100644 LibD28x64/fsIBX7.dpk create mode 100644 LibD28x64/fsIBX9.dpk create mode 100644 LibD28x64/fsTee10.dpk create mode 100644 LibD28x64/fsTee11.dpk create mode 100644 LibD28x64/fsTee12.dpk create mode 100644 LibD28x64/fsTee14.dpk create mode 100644 LibD28x64/fsTee15.dpk create mode 100644 LibD28x64/fsTee16.dpk create mode 100644 LibD28x64/fsTee17.dpk create mode 100644 LibD28x64/fsTee18.dpk create mode 100644 LibD28x64/fsTee19.dpk create mode 100644 LibD28x64/fsTee20.dpk create mode 100644 LibD28x64/fsTee21.dpk create mode 100644 LibD28x64/fsTee22.dpk create mode 100644 LibD28x64/fsTee23.dpk create mode 100644 LibD28x64/fsTee24.dpk create mode 100644 LibD28x64/fsTee25.dpk create mode 100644 LibD28x64/fsTee26.dpk create mode 100644 LibD28x64/fsTee27.dpk create mode 100644 LibD28x64/fsTee28.dpk create mode 100644 LibD28x64/fsTee29.dpk create mode 100644 LibD28x64/fsTee29.dproj create mode 100644 LibD28x64/fsTee29.res create mode 100644 LibD28x64/fsTee4.bpk create mode 100644 LibD28x64/fsTee4.cpp create mode 100644 LibD28x64/fsTee4.dpk create mode 100644 LibD28x64/fsTee5.bpk create mode 100644 LibD28x64/fsTee5.cpp create mode 100644 LibD28x64/fsTee5.dpk create mode 100644 LibD28x64/fsTee6.bpk create mode 100644 LibD28x64/fsTee6.cpp create mode 100644 LibD28x64/fsTee6.dpk create mode 100644 LibD28x64/fsTee7.dpk create mode 100644 LibD28x64/fsTee9.dpk create mode 100644 LibD28x64/fs_iadoreg.pas create mode 100644 LibD28x64/fs_iadortti.pas create mode 100644 LibD28x64/fs_ibasic.pas create mode 100644 LibD28x64/fs_ibdereg.pas create mode 100644 LibD28x64/fs_ibdertti.pas create mode 100644 LibD28x64/fs_ibx.lpk create mode 100644 LibD28x64/fs_ichartrtti.pas create mode 100644 LibD28x64/fs_iclassesrtti.pas create mode 100644 LibD28x64/fs_iconst.pas create mode 100644 LibD28x64/fs_icpp.pas create mode 100644 LibD28x64/fs_idbctrlsrtti.pas create mode 100644 LibD28x64/fs_idbreg.pas create mode 100644 LibD28x64/fs_idbrtti.pas create mode 100644 LibD28x64/fs_idialogsrtti.pas create mode 100644 LibD28x64/fs_idisp.pas create mode 100644 LibD28x64/fs_ievents.pas create mode 100644 LibD28x64/fs_iexpression.pas create mode 100644 LibD28x64/fs_iextctrlsrtti.pas create mode 100644 LibD28x64/fs_ifdreg.dcr create mode 100644 LibD28x64/fs_ifdreg.pas create mode 100644 LibD28x64/fs_ifdrtti.pas create mode 100644 LibD28x64/fs_iformsrtti.pas create mode 100644 LibD28x64/fs_igraphicsrtti.pas create mode 100644 LibD28x64/fs_iibxreg.pas create mode 100644 LibD28x64/fs_iibxrtti.pas create mode 100644 LibD28x64/fs_iilparser.pas create mode 100644 LibD28x64/fs_iinirtti.pas create mode 100644 LibD28x64/fs_iinterpreter.pas create mode 100644 LibD28x64/fs_ijs.pas create mode 100644 LibD28x64/fs_imenusrtti.pas create mode 100644 LibD28x64/fs_iparser.pas create mode 100644 LibD28x64/fs_ipascal.pas create mode 100644 LibD28x64/fs_ireg.dcr create mode 100644 LibD28x64/fs_ireg.lrs create mode 100644 LibD28x64/fs_ireg.pas create mode 100644 LibD28x64/fs_isysrtti.pas create mode 100644 LibD28x64/fs_iteereg.pas create mode 100644 LibD28x64/fs_itools.pas create mode 100644 LibD28x64/fs_lazarus.lpk create mode 100644 LibD28x64/fs_lazarus.pas create mode 100644 LibD28x64/fs_synmemo.dfm create mode 100644 LibD28x64/fs_synmemo.lfm create mode 100644 LibD28x64/fs_synmemo.pas create mode 100644 LibD28x64/fs_tree.pas create mode 100644 LibD28x64/fs_tree.res create mode 100644 LibD28x64/fs_xml.pas create mode 100644 LibD28x64/fsx.dpk create mode 100644 LibD28x64/fsx.dproj create mode 100644 LibD28x64/fsx.res create mode 100644 LibD28x64/fsx_Icon.ico create mode 100644 LibD28x64/mk.bat create mode 100644 LibD28x64/mkall.bat create mode 100644 LibD28x64/readme.txt create mode 100644 LibD28x64/readme_lazarus.txt create mode 100644 LibD28x64/tee.inc create mode 100644 Res/Arabic/frxrcClass.xml create mode 100644 Res/Arabic/frxrcDesgn.xml create mode 100644 Res/Arabic/frxrcExports.xml create mode 100644 Res/Arabic/frxrcInsp.xml create mode 100644 Res/Arabic/mk.bat create mode 100644 Res/Arabic/mkall.bat create mode 100644 Res/Brazil/frxrcClass.xml create mode 100644 Res/Brazil/frxrcDesgn.xml create mode 100644 Res/Brazil/frxrcExports.xml create mode 100644 Res/Brazil/frxrcInsp.xml create mode 100644 Res/Brazil/mk.bat create mode 100644 Res/Brazil/mkall.bat create mode 100644 Res/Bulgarian/frxrcClass.xml create mode 100644 Res/Bulgarian/frxrcDesgn.xml create mode 100644 Res/Bulgarian/frxrcExports.xml create mode 100644 Res/Bulgarian/frxrcInsp.xml create mode 100644 Res/Bulgarian/mk.bat create mode 100644 Res/Bulgarian/mkall.bat create mode 100644 Res/Catalon/frxrcClass.xml create mode 100644 Res/Catalon/frxrcDesgn.xml create mode 100644 Res/Catalon/frxrcExports.xml create mode 100644 Res/Catalon/frxrcInsp.xml create mode 100644 Res/Catalon/mk.bat create mode 100644 Res/Catalon/mkall.bat create mode 100644 Res/Chinese/frxrcClass.xml create mode 100644 Res/Chinese/frxrcDesgn.xml create mode 100644 Res/Chinese/frxrcExports.xml create mode 100644 Res/Chinese/frxrcInsp.xml create mode 100644 Res/Chinese/mk.bat create mode 100644 Res/Chinese/mkall.bat create mode 100644 Res/Croatian/frxrcClass.xml create mode 100644 Res/Croatian/frxrcDesgn.xml create mode 100644 Res/Croatian/frxrcExports.xml create mode 100644 Res/Croatian/frxrcInsp.xml create mode 100644 Res/Croatian/mk.bat create mode 100644 Res/Croatian/mkall.bat create mode 100644 Res/Czech/Info.txt create mode 100644 Res/Czech/frxrcClass.xml create mode 100644 Res/Czech/frxrcDesgn.xml create mode 100644 Res/Czech/frxrcExports.xml create mode 100644 Res/Czech/frxrcInsp.xml create mode 100644 Res/Czech/mk.bat create mode 100644 Res/Czech/mkall.bat create mode 100644 Res/Danish/frxrcClass.xml create mode 100644 Res/Danish/frxrcDesgn.xml create mode 100644 Res/Danish/frxrcExports.xml create mode 100644 Res/Danish/frxrcInsp.xml create mode 100644 Res/Danish/mk.bat create mode 100644 Res/Danish/mkall.bat create mode 100644 Res/Dutch/frxrcClass.xml create mode 100644 Res/Dutch/frxrcDesgn.xml create mode 100644 Res/Dutch/frxrcExports.xml create mode 100644 Res/Dutch/frxrcInsp.xml create mode 100644 Res/Dutch/mk.bat create mode 100644 Res/Dutch/mkall.bat create mode 100644 Res/English/frxrcClass.xml create mode 100644 Res/English/frxrcDesgn.xml create mode 100644 Res/English/frxrcExports.xml create mode 100644 Res/English/frxrcInsp.xml create mode 100644 Res/English/mk.bat create mode 100644 Res/English/mkall.bat create mode 100644 Res/Farsi/frxrcClass.xml create mode 100644 Res/Farsi/frxrcDesgn.xml create mode 100644 Res/Farsi/frxrcExports.xml create mode 100644 Res/Farsi/frxrcInsp.xml create mode 100644 Res/Farsi/mk.bat create mode 100644 Res/Farsi/mkall.bat create mode 100644 Res/Farsi/readme.txt create mode 100644 Res/French/Info.txt create mode 100644 Res/French/frxrcClass.xml create mode 100644 Res/French/frxrcDesgn.xml create mode 100644 Res/French/frxrcExports.xml create mode 100644 Res/French/frxrcInsp.xml create mode 100644 Res/French/mk.bat create mode 100644 Res/French/mkall.bat create mode 100644 Res/German/frxrcClass.xml create mode 100644 Res/German/frxrcDesgn.xml create mode 100644 Res/German/frxrcExports.xml create mode 100644 Res/German/frxrcInsp.xml create mode 100644 Res/German/mk.bat create mode 100644 Res/German/mkall.bat create mode 100644 Res/Greek/frxrcClass.xml create mode 100644 Res/Greek/frxrcDesgn.xml create mode 100644 Res/Greek/frxrcExports.xml create mode 100644 Res/Greek/frxrcInsp.xml create mode 100644 Res/Greek/mk.bat create mode 100644 Res/Greek/mkall.bat create mode 100644 Res/Hungarian/frxrcClass.xml create mode 100644 Res/Hungarian/frxrcDesgn.xml create mode 100644 Res/Hungarian/frxrcExports.xml create mode 100644 Res/Hungarian/frxrcInsp.xml create mode 100644 Res/Hungarian/mk.bat create mode 100644 Res/Hungarian/mkall.bat create mode 100644 Res/Indonesian/frxrcClass.xml create mode 100644 Res/Indonesian/frxrcDesgn.xml create mode 100644 Res/Indonesian/frxrcExports.xml create mode 100644 Res/Indonesian/frxrcInsp.xml create mode 100644 Res/Indonesian/mk.bat create mode 100644 Res/Indonesian/mkall.bat create mode 100644 Res/Italian/frxrcClass.xml create mode 100644 Res/Italian/frxrcDesgn.xml create mode 100644 Res/Italian/frxrcExports.xml create mode 100644 Res/Italian/frxrcExports.xml.mine create mode 100644 Res/Italian/frxrcExports.xml.r1733 create mode 100644 Res/Italian/frxrcExports.xml.r1741 create mode 100644 Res/Italian/frxrcInsp.xml create mode 100644 Res/Italian/mk.bat create mode 100644 Res/Italian/mkall.bat create mode 100644 Res/Japanese/frxrcClass.xml create mode 100644 Res/Japanese/frxrcDesgn.xml create mode 100644 Res/Japanese/frxrcExports.xml create mode 100644 Res/Japanese/frxrcInsp.xml create mode 100644 Res/Japanese/mk.bat create mode 100644 Res/Japanese/mk_D2009-XE2.bat create mode 100644 Res/Japanese/mkall.bat create mode 100644 Res/Latvian/frxrcClass.xml create mode 100644 Res/Latvian/frxrcDesgn.xml create mode 100644 Res/Latvian/frxrcExports.xml create mode 100644 Res/Latvian/frxrcInsp.xml create mode 100644 Res/Latvian/mk.bat create mode 100644 Res/Latvian/mkall.bat create mode 100644 Res/Polish/Info.txt create mode 100644 Res/Polish/frxrcClass.xml create mode 100644 Res/Polish/frxrcDesgn.xml create mode 100644 Res/Polish/frxrcExports.xml create mode 100644 Res/Polish/frxrcInsp.xml create mode 100644 Res/Polish/mk.bat create mode 100644 Res/Polish/mkall.bat create mode 100644 Res/Portuguese/frxrcClass.xml create mode 100644 Res/Portuguese/frxrcDesgn.xml create mode 100644 Res/Portuguese/frxrcExports.xml create mode 100644 Res/Portuguese/frxrcInsp.xml create mode 100644 Res/Portuguese/mk.bat create mode 100644 Res/Portuguese/mkall.bat create mode 100644 Res/Romanian/frxrcClass.xml create mode 100644 Res/Romanian/frxrcDesgn.xml create mode 100644 Res/Romanian/frxrcExports.xml create mode 100644 Res/Romanian/frxrcInsp.xml create mode 100644 Res/Romanian/mk.bat create mode 100644 Res/Romanian/mkall.bat create mode 100644 Res/Russian/frxrcClass.xml create mode 100644 Res/Russian/frxrcDesgn.xml create mode 100644 Res/Russian/frxrcExports.xml create mode 100644 Res/Russian/frxrcInsp.xml create mode 100644 Res/Russian/mk.bat create mode 100644 Res/Russian/mkall.bat create mode 100644 Res/Serbian/frxrcClass.xml create mode 100644 Res/Serbian/frxrcDesgn.xml create mode 100644 Res/Serbian/frxrcExports.xml create mode 100644 Res/Serbian/frxrcInsp.xml create mode 100644 Res/Serbian/mk.bat create mode 100644 Res/Serbian/mkall.bat create mode 100644 Res/Slovak/Info.txt create mode 100644 Res/Slovak/frxrcClass.xml create mode 100644 Res/Slovak/frxrcDesgn.xml create mode 100644 Res/Slovak/frxrcExports.xml create mode 100644 Res/Slovak/frxrcInsp.xml create mode 100644 Res/Slovak/mk.bat create mode 100644 Res/Slovak/mkall.bat create mode 100644 Res/Slovene/frxrcClass.xml create mode 100644 Res/Slovene/frxrcDesgn.xml create mode 100644 Res/Slovene/frxrcExports.xml create mode 100644 Res/Slovene/frxrcInsp.xml create mode 100644 Res/Slovene/mk.bat create mode 100644 Res/Slovene/mkall.bat create mode 100644 Res/Spanish/frxrcClass.xml create mode 100644 Res/Spanish/frxrcDesgn.xml create mode 100644 Res/Spanish/frxrcExports.xml create mode 100644 Res/Spanish/frxrcInsp.xml create mode 100644 Res/Spanish/mk.bat create mode 100644 Res/Spanish/mkall.bat create mode 100644 Res/Swedish/frxrcClass.xml create mode 100644 Res/Swedish/frxrcDesgn.xml create mode 100644 Res/Swedish/frxrcExports.xml create mode 100644 Res/Swedish/frxrcInsp.xml create mode 100644 Res/Swedish/mk.bat create mode 100644 Res/Swedish/mkall.bat create mode 100644 Res/Swiss/frxrcClass.xml create mode 100644 Res/Swiss/frxrcDesgn.xml create mode 100644 Res/Swiss/frxrcExports.xml create mode 100644 Res/Swiss/frxrcInsp.xml create mode 100644 Res/Swiss/mk.bat create mode 100644 Res/Swiss/mkall.bat create mode 100644 Res/Taiwan/frxrcClass.xml create mode 100644 Res/Taiwan/frxrcDesgn.xml create mode 100644 Res/Taiwan/frxrcExports.xml create mode 100644 Res/Taiwan/frxrcInsp.xml create mode 100644 Res/Taiwan/mk.bat create mode 100644 Res/Taiwan/mkall.bat create mode 100644 Res/Turkish/frxrcClass.xml create mode 100644 Res/Turkish/frxrcDesgn.xml create mode 100644 Res/Turkish/frxrcExports.xml create mode 100644 Res/Turkish/frxrcInsp.xml create mode 100644 Res/Turkish/mk.bat create mode 100644 Res/Turkish/mkall.bat create mode 100644 Res/Ukrainian/frxrcClass.xml create mode 100644 Res/Ukrainian/frxrcDesgn.xml create mode 100644 Res/Ukrainian/frxrcExports.xml create mode 100644 Res/Ukrainian/frxrcInsp.xml create mode 100644 Res/Ukrainian/mk.bat create mode 100644 Res/Ukrainian/mkall.bat create mode 100644 Res/install_res.txt create mode 100644 Source/ADO/FMX.frxADOComponents.pas create mode 100644 Source/ADO/FMX.frxADOEditor.pas create mode 100644 Source/ADO/FMX.frxADORTTI.pas create mode 100644 Source/ADO/FMXfrxADO16.dpk create mode 100644 Source/ADO/FMXfrxADO16.res create mode 100644 Source/ADO/FMXfrxADO17.dpk create mode 100644 Source/ADO/FMXfrxADO17.res create mode 100644 Source/ADO/FMXfrxADO18.dpk create mode 100644 Source/ADO/FMXfrxADO18.res create mode 100644 Source/ADO/FMXfrxADO19.dpk create mode 100644 Source/ADO/FMXfrxADO19.res create mode 100644 Source/ADO/FMXfrxADO20.dpk create mode 100644 Source/ADO/FMXfrxADO20.res create mode 100644 Source/ADO/FMXfrxADO21.dpk create mode 100644 Source/ADO/FMXfrxADO21.res create mode 100644 Source/ADO/FMXfrxADO22.dpk create mode 100644 Source/ADO/FMXfrxADO22.res create mode 100644 Source/ADO/FMXfrxADO23.dpk create mode 100644 Source/ADO/FMXfrxADO23.res create mode 100644 Source/ADO/FMXfrxADO24.dpk create mode 100644 Source/ADO/FMXfrxADO24.res create mode 100644 Source/ADO/FMXfrxADO25.dpk create mode 100644 Source/ADO/FMXfrxADO25.res create mode 100644 Source/ADO/FMXfrxADO26.dpk create mode 100644 Source/ADO/FMXfrxADO27.dpk create mode 100644 Source/ADO/FMXfrxADO28.dpk create mode 100644 Source/ADO/FMXfrxADO29.dpk create mode 100644 Source/ADO/FMXfrxADOReg.dcr create mode 100644 Source/ADO/FMXfrxADOReg.pas create mode 100644 Source/ADO/dclFMXfrxADO16.dpk create mode 100644 Source/ADO/dclFMXfrxADO16.res create mode 100644 Source/ADO/dclFMXfrxADO17.dpk create mode 100644 Source/ADO/dclFMXfrxADO17.res create mode 100644 Source/ADO/dclFMXfrxADO18.dpk create mode 100644 Source/ADO/dclFMXfrxADO18.res create mode 100644 Source/ADO/dclFMXfrxADO19.dpk create mode 100644 Source/ADO/dclFMXfrxADO19.res create mode 100644 Source/ADO/dclFMXfrxADO20.dpk create mode 100644 Source/ADO/dclFMXfrxADO20.res create mode 100644 Source/ADO/dclFMXfrxADO21.dpk create mode 100644 Source/ADO/dclFMXfrxADO21.res create mode 100644 Source/ADO/dclFMXfrxADO22.dpk create mode 100644 Source/ADO/dclFMXfrxADO22.res create mode 100644 Source/ADO/dclFMXfrxADO23.dpk create mode 100644 Source/ADO/dclFMXfrxADO23.res create mode 100644 Source/ADO/dclFMXfrxADO24.dpk create mode 100644 Source/ADO/dclFMXfrxADO24.res create mode 100644 Source/ADO/dclFMXfrxADO25.dpk create mode 100644 Source/ADO/dclFMXfrxADO25.res create mode 100644 Source/ADO/dclFMXfrxADO26.dpk create mode 100644 Source/ADO/dclFMXfrxADO27.dpk create mode 100644 Source/ADO/dclFMXfrxADO28.dpk create mode 100644 Source/ADO/dclFMXfrxADO29.dpk create mode 100644 Source/CDS/FMX.frxCDSComponents.pas create mode 100644 Source/CDS/FMX.frxCDSEditor.pas create mode 100644 Source/CDS/FMX.frxCDSRTTI.pas create mode 100644 Source/CDS/FMXfrxCDS16.dpk create mode 100644 Source/CDS/FMXfrxCDS16.res create mode 100644 Source/CDS/FMXfrxCDS17.dpk create mode 100644 Source/CDS/FMXfrxCDS17.res create mode 100644 Source/CDS/FMXfrxCDS18.dpk create mode 100644 Source/CDS/FMXfrxCDS18.res create mode 100644 Source/CDS/FMXfrxCDS19.dpk create mode 100644 Source/CDS/FMXfrxCDS19.res create mode 100644 Source/CDS/FMXfrxCDS20.dpk create mode 100644 Source/CDS/FMXfrxCDS20.res create mode 100644 Source/CDS/FMXfrxCDS21.dpk create mode 100644 Source/CDS/FMXfrxCDS21.res create mode 100644 Source/CDS/FMXfrxCDS22.dpk create mode 100644 Source/CDS/FMXfrxCDS22.res create mode 100644 Source/CDS/FMXfrxCDS23.dpk create mode 100644 Source/CDS/FMXfrxCDS23.res create mode 100644 Source/CDS/FMXfrxCDS24.dpk create mode 100644 Source/CDS/FMXfrxCDS24.res create mode 100644 Source/CDS/FMXfrxCDS25.dpk create mode 100644 Source/CDS/FMXfrxCDS25.res create mode 100644 Source/CDS/FMXfrxCDS26.dpk create mode 100644 Source/CDS/FMXfrxCDS27.dpk create mode 100644 Source/CDS/FMXfrxCDS28.dpk create mode 100644 Source/CDS/FMXfrxCDS29.dpk create mode 100644 Source/CDS/FMXfrxCDSReg.dcr create mode 100644 Source/CDS/FMXfrxCDSReg.pas create mode 100644 Source/CDS/FmxLinuxFrxCDS.dpr create mode 100644 Source/CDS/dclFMXfrxCDS16.dpk create mode 100644 Source/CDS/dclFMXfrxCDS16.res create mode 100644 Source/CDS/dclFMXfrxCDS17.dpk create mode 100644 Source/CDS/dclFMXfrxCDS17.res create mode 100644 Source/CDS/dclFMXfrxCDS18.dpk create mode 100644 Source/CDS/dclFMXfrxCDS18.res create mode 100644 Source/CDS/dclFMXfrxCDS19.dpk create mode 100644 Source/CDS/dclFMXfrxCDS19.res create mode 100644 Source/CDS/dclFMXfrxCDS20.dpk create mode 100644 Source/CDS/dclFMXfrxCDS20.res create mode 100644 Source/CDS/dclFMXfrxCDS21.dpk create mode 100644 Source/CDS/dclFMXfrxCDS21.res create mode 100644 Source/CDS/dclFMXfrxCDS22.dpk create mode 100644 Source/CDS/dclFMXfrxCDS22.res create mode 100644 Source/CDS/dclFMXfrxCDS23.dpk create mode 100644 Source/CDS/dclFMXfrxCDS23.res create mode 100644 Source/CDS/dclFMXfrxCDS24.dpk create mode 100644 Source/CDS/dclFMXfrxCDS24.res create mode 100644 Source/CDS/dclFMXfrxCDS25.dpk create mode 100644 Source/CDS/dclFMXfrxCDS25.res create mode 100644 Source/CDS/dclFMXfrxCDS26.dpk create mode 100644 Source/CDS/dclFMXfrxCDS27.dpk create mode 100644 Source/CDS/dclFMXfrxCDS28.dpk create mode 100644 Source/CDS/dclFMXfrxCDS29.dpk create mode 100644 Source/DBX/FMX.frxDBXComponents.pas create mode 100644 Source/DBX/FMX.frxDBXEditor.pas create mode 100644 Source/DBX/FMX.frxDBXRTTI.pas create mode 100644 Source/DBX/FMXfrxDBX16.dpk create mode 100644 Source/DBX/FMXfrxDBX16.res create mode 100644 Source/DBX/FMXfrxDBX17.dpk create mode 100644 Source/DBX/FMXfrxDBX17.res create mode 100644 Source/DBX/FMXfrxDBX18.dpk create mode 100644 Source/DBX/FMXfrxDBX18.res create mode 100644 Source/DBX/FMXfrxDBX19.dpk create mode 100644 Source/DBX/FMXfrxDBX19.res create mode 100644 Source/DBX/FMXfrxDBX20.dpk create mode 100644 Source/DBX/FMXfrxDBX20.res create mode 100644 Source/DBX/FMXfrxDBX21.dpk create mode 100644 Source/DBX/FMXfrxDBX21.res create mode 100644 Source/DBX/FMXfrxDBX22.dpk create mode 100644 Source/DBX/FMXfrxDBX22.res create mode 100644 Source/DBX/FMXfrxDBX23.dpk create mode 100644 Source/DBX/FMXfrxDBX23.res create mode 100644 Source/DBX/FMXfrxDBX24.dpk create mode 100644 Source/DBX/FMXfrxDBX24.res create mode 100644 Source/DBX/FMXfrxDBX25.dpk create mode 100644 Source/DBX/FMXfrxDBX25.res create mode 100644 Source/DBX/FMXfrxDBX26.dpk create mode 100644 Source/DBX/FMXfrxDBX27.dpk create mode 100644 Source/DBX/FMXfrxDBX29.dpk create mode 100644 Source/DBX/FMXfrxDBXReg.dcr create mode 100644 Source/DBX/FMXfrxDBXReg.pas create mode 100644 Source/DBX/FmxLinuxFrxDBX.dpr create mode 100644 Source/DBX/dclFMXfrxDBX16.dpk create mode 100644 Source/DBX/dclFMXfrxDBX16.res create mode 100644 Source/DBX/dclFMXfrxDBX17.dpk create mode 100644 Source/DBX/dclFMXfrxDBX17.res create mode 100644 Source/DBX/dclFMXfrxDBX18.dpk create mode 100644 Source/DBX/dclFMXfrxDBX18.res create mode 100644 Source/DBX/dclFMXfrxDBX19.dpk create mode 100644 Source/DBX/dclFMXfrxDBX19.res create mode 100644 Source/DBX/dclFMXfrxDBX20.dpk create mode 100644 Source/DBX/dclFMXfrxDBX20.res create mode 100644 Source/DBX/dclFMXfrxDBX21.dpk create mode 100644 Source/DBX/dclFMXfrxDBX21.res create mode 100644 Source/DBX/dclFMXfrxDBX22.dpk create mode 100644 Source/DBX/dclFMXfrxDBX22.res create mode 100644 Source/DBX/dclFMXfrxDBX23.dpk create mode 100644 Source/DBX/dclFMXfrxDBX23.res create mode 100644 Source/DBX/dclFMXfrxDBX24.dpk create mode 100644 Source/DBX/dclFMXfrxDBX24.res create mode 100644 Source/DBX/dclFMXfrxDBX25.dpk create mode 100644 Source/DBX/dclFMXfrxDBX25.res create mode 100644 Source/DBX/dclFMXfrxDBX26.dpk create mode 100644 Source/DBX/dclFMXfrxDBX27.dpk create mode 100644 Source/DBX/dclFMXfrxDBX28.dproj create mode 100644 Source/DBX/dclFMXfrxDBX29.dpk create mode 100644 Source/ExportPack/FMX.ExportTTFFont.pas create mode 100644 Source/ExportPack/FMX.TTFHelpers.pas create mode 100644 Source/ExportPack/FMX.frxCmapTableClass.pas create mode 100644 Source/ExportPack/FMX.frxCrypto.pas create mode 100644 Source/ExportPack/FMX.frxExportCSV.fmx create mode 100644 Source/ExportPack/FMX.frxExportCSV.pas create mode 100644 Source/ExportPack/FMX.frxExportHTML.fmx create mode 100644 Source/ExportPack/FMX.frxExportHTML.pas create mode 100644 Source/ExportPack/FMX.frxExportImage.fmx create mode 100644 Source/ExportPack/FMX.frxExportImage.pas create mode 100644 Source/ExportPack/FMX.frxExportMatrix.pas create mode 100644 Source/ExportPack/FMX.frxExportODF.fmx create mode 100644 Source/ExportPack/FMX.frxExportODF.pas create mode 100644 Source/ExportPack/FMX.frxExportPDF.fmx create mode 100644 Source/ExportPack/FMX.frxExportPDF.pas create mode 100644 Source/ExportPack/FMX.frxExportRTF.fmx create mode 100644 Source/ExportPack/FMX.frxExportRTF.pas create mode 100644 Source/ExportPack/FMX.frxExportTXT.fmx create mode 100644 Source/ExportPack/FMX.frxExportTXT.pas create mode 100644 Source/ExportPack/FMX.frxExportText.fmx create mode 100644 Source/ExportPack/FMX.frxExportText.pas create mode 100644 Source/ExportPack/FMX.frxExportXML.fmx create mode 100644 Source/ExportPack/FMX.frxExportXML.pas create mode 100644 Source/ExportPack/FMX.frxFontHeaderClass.pas create mode 100644 Source/ExportPack/FMX.frxGlyphSubstitutionClass.pas create mode 100644 Source/ExportPack/FMX.frxGlyphTableClass.pas create mode 100644 Source/ExportPack/FMX.frxHorizontalHeaderClass.pas create mode 100644 Source/ExportPack/FMX.frxHorizontalMetrixClass.pas create mode 100644 Source/ExportPack/FMX.frxIndexToLocationClass.pas create mode 100644 Source/ExportPack/FMX.frxKerningTableClass.pas create mode 100644 Source/ExportPack/FMX.frxLinuxFonts.pas create mode 100644 Source/ExportPack/FMX.frxMD5.pas create mode 100644 Source/ExportPack/FMX.frxMaximumProfileClass.pas create mode 100644 Source/ExportPack/FMX.frxNameTableClass.pas create mode 100644 Source/ExportPack/FMX.frxOS2WindowsMetricsClass.pas create mode 100644 Source/ExportPack/FMX.frxPostScriptClass.pas create mode 100644 Source/ExportPack/FMX.frxPreProgramClass.pas create mode 100644 Source/ExportPack/FMX.frxRC4.pas create mode 100644 Source/ExportPack/FMX.frxTrueTypeCollection.pas create mode 100644 Source/ExportPack/FMX.frxTrueTypeFont.pas create mode 100644 Source/ExportPack/FMX.frxTrueTypeTable.pas create mode 100644 Source/ExportPack/FMX.frxZip.pas create mode 100644 Source/ExportPack/FMX.frxrcExports.pas create mode 100644 Source/ExportPack/FMXfrxe16.dpk create mode 100644 Source/ExportPack/FMXfrxe16.otares create mode 100644 Source/ExportPack/FMXfrxe16.res create mode 100644 Source/ExportPack/FMXfrxe17.dpk create mode 100644 Source/ExportPack/FMXfrxe17.otares create mode 100644 Source/ExportPack/FMXfrxe17.res create mode 100644 Source/ExportPack/FMXfrxe18.dpk create mode 100644 Source/ExportPack/FMXfrxe18.otares create mode 100644 Source/ExportPack/FMXfrxe18.res create mode 100644 Source/ExportPack/FMXfrxe19.dpk create mode 100644 Source/ExportPack/FMXfrxe19.res create mode 100644 Source/ExportPack/FMXfrxe20.dpk create mode 100644 Source/ExportPack/FMXfrxe20.otares create mode 100644 Source/ExportPack/FMXfrxe20.res create mode 100644 Source/ExportPack/FMXfrxe21.dpk create mode 100644 Source/ExportPack/FMXfrxe21.otares create mode 100644 Source/ExportPack/FMXfrxe21.res create mode 100644 Source/ExportPack/FMXfrxe22.dpk create mode 100644 Source/ExportPack/FMXfrxe22.otares create mode 100644 Source/ExportPack/FMXfrxe22.res create mode 100644 Source/ExportPack/FMXfrxe23.dpk create mode 100644 Source/ExportPack/FMXfrxe23.otares create mode 100644 Source/ExportPack/FMXfrxe23.res create mode 100644 Source/ExportPack/FMXfrxe24.dpk create mode 100644 Source/ExportPack/FMXfrxe24.dproj create mode 100644 Source/ExportPack/FMXfrxe24.otares create mode 100644 Source/ExportPack/FMXfrxe24.res create mode 100644 Source/ExportPack/FMXfrxe25.dpk create mode 100644 Source/ExportPack/FMXfrxe25.otares create mode 100644 Source/ExportPack/FMXfrxe25.res create mode 100644 Source/ExportPack/FMXfrxe26.dpk create mode 100644 Source/ExportPack/FMXfrxe27.dpk create mode 100644 Source/ExportPack/FMXfrxe29.dpk create mode 100644 Source/ExportPack/FMXfrxeReg.pas create mode 100644 Source/ExportPack/FmxLinuxFrxExp.dpr create mode 100644 Source/ExportPack/dclFMXfrxe16.dpk create mode 100644 Source/ExportPack/dclFMXfrxe16.res create mode 100644 Source/ExportPack/dclFMXfrxe17.dpk create mode 100644 Source/ExportPack/dclFMXfrxe17.res create mode 100644 Source/ExportPack/dclFMXfrxe18.dpk create mode 100644 Source/ExportPack/dclFMXfrxe18.res create mode 100644 Source/ExportPack/dclFMXfrxe19.dpk create mode 100644 Source/ExportPack/dclFMXfrxe19.res create mode 100644 Source/ExportPack/dclFMXfrxe20.dpk create mode 100644 Source/ExportPack/dclFMXfrxe20.res create mode 100644 Source/ExportPack/dclFMXfrxe21.dpk create mode 100644 Source/ExportPack/dclFMXfrxe21.res create mode 100644 Source/ExportPack/dclFMXfrxe22.dpk create mode 100644 Source/ExportPack/dclFMXfrxe22.res create mode 100644 Source/ExportPack/dclFMXfrxe23.dpk create mode 100644 Source/ExportPack/dclFMXfrxe23.res create mode 100644 Source/ExportPack/dclFMXfrxe24.dpk create mode 100644 Source/ExportPack/dclFMXfrxe24.dproj create mode 100644 Source/ExportPack/dclFMXfrxe24.otares create mode 100644 Source/ExportPack/dclFMXfrxe24.res create mode 100644 Source/ExportPack/dclFMXfrxe25.dpk create mode 100644 Source/ExportPack/dclFMXfrxe25.otares create mode 100644 Source/ExportPack/dclFMXfrxe25.res create mode 100644 Source/ExportPack/dclFMXfrxe26.dpk create mode 100644 Source/ExportPack/dclFMXfrxe27.dpk create mode 100644 Source/ExportPack/dclFMXfrxe29.dpk create mode 100644 Source/ExportPack/fmx.frxImageConverter.pas create mode 100644 Source/ExportPack/frxe16.otares create mode 100644 Source/ExportPack/frxeReg.dcr create mode 100644 Source/FMX.ConverterFR3toFRFMX.pas create mode 100644 Source/FMX.DelphiZXIngQRCode.pas create mode 100644 Source/FMX.Linux.Old.frxPrinter.pas create mode 100644 Source/FMX.Linux.frxPrinter.pas create mode 100644 Source/FMX.Mac.frxPrinter.pas create mode 100644 Source/FMX.Win.frxPrinter.pas create mode 100644 Source/FMX.frxAbout.fmx create mode 100644 Source/FMX.frxAbout.pas create mode 100644 Source/FMX.frxAggregate.pas create mode 100644 Source/FMX.frxBarcod.pas create mode 100644 Source/FMX.frxBarcode.pas create mode 100644 Source/FMX.frxBarcode2DBase.pas create mode 100644 Source/FMX.frxBarcode2DRTTI.pas create mode 100644 Source/FMX.frxBarcode2DView.pas create mode 100644 Source/FMX.frxBarcodeDataMatrix.pas create mode 100644 Source/FMX.frxBarcodeEditor.fmx create mode 100644 Source/FMX.frxBarcodeEditor.pas create mode 100644 Source/FMX.frxBarcodePDF417.pas create mode 100644 Source/FMX.frxBarcodeProperties.pas create mode 100644 Source/FMX.frxBarcodeQR.pas create mode 100644 Source/FMX.frxBarcodeRTTI.pas create mode 100644 Source/FMX.frxBaseModalForm.pas create mode 100644 Source/FMX.frxCanvas.Linux.pas create mode 100644 Source/FMX.frxCanvas.Mac.pas create mode 100644 Source/FMX.frxChBox.pas create mode 100644 Source/FMX.frxChBoxRTTI.pas create mode 100644 Source/FMX.frxChart.pas create mode 100644 Source/FMX.frxChartEditor.fmx create mode 100644 Source/FMX.frxChartEditor.pas create mode 100644 Source/FMX.frxChartGallery.fmx create mode 100644 Source/FMX.frxChartGallery.pas create mode 100644 Source/FMX.frxChartHelpers.pas create mode 100644 Source/FMX.frxChartRTTI.pas create mode 100644 Source/FMX.frxClass.pas create mode 100644 Source/FMX.frxClass.res create mode 100644 Source/FMX.frxClassRTTI.pas create mode 100644 Source/FMX.frxCodeUtils.pas create mode 100644 Source/FMX.frxConnWizard.fmx create mode 100644 Source/FMX.frxConnWizard.pas create mode 100644 Source/FMX.frxConnWizard.res create mode 100644 Source/FMX.frxCross.pas create mode 100644 Source/FMX.frxCrossEditor.fmx create mode 100644 Source/FMX.frxCrossEditor.pas create mode 100644 Source/FMX.frxCrossRTTI.pas create mode 100644 Source/FMX.frxCtrls.pas create mode 100644 Source/FMX.frxCustomDB.pas create mode 100644 Source/FMX.frxCustomDBEditor.pas create mode 100644 Source/FMX.frxCustomDBRTTI.pas create mode 100644 Source/FMX.frxCustomEditors.pas create mode 100644 Source/FMX.frxDBSet.pas create mode 100644 Source/FMX.frxDCtrl.pas create mode 100644 Source/FMX.frxDCtrlRTTI.pas create mode 100644 Source/FMX.frxDMPClass.pas create mode 100644 Source/FMX.frxDataTree.fmx create mode 100644 Source/FMX.frxDataTree.pas create mode 100644 Source/FMX.frxDesgn.fmx create mode 100644 Source/FMX.frxDesgn.pas create mode 100644 Source/FMX.frxDesgn.res create mode 100644 Source/FMX.frxDesgnCtrls.pas create mode 100644 Source/FMX.frxDesgnEditors.pas create mode 100644 Source/FMX.frxDesgnWorkspace.pas create mode 100644 Source/FMX.frxDesgnWorkspace.res create mode 100644 Source/FMX.frxDesgnWorkspace1.pas create mode 100644 Source/FMX.frxDesgn_D23.fmx create mode 100644 Source/FMX.frxDialogForm.fmx create mode 100644 Source/FMX.frxDialogForm.pas create mode 100644 Source/FMX.frxDsgnIntf.pas create mode 100644 Source/FMX.frxEditAliases.fmx create mode 100644 Source/FMX.frxEditAliases.pas create mode 100644 Source/FMX.frxEditDataBand.fmx create mode 100644 Source/FMX.frxEditDataBand.pas create mode 100644 Source/FMX.frxEditExpr.fmx create mode 100644 Source/FMX.frxEditExpr.pas create mode 100644 Source/FMX.frxEditFormat.fmx create mode 100644 Source/FMX.frxEditFormat.pas create mode 100644 Source/FMX.frxEditFrame.fmx create mode 100644 Source/FMX.frxEditFrame.pas create mode 100644 Source/FMX.frxEditGroup.fmx create mode 100644 Source/FMX.frxEditGroup.pas create mode 100644 Source/FMX.frxEditHighlight.fmx create mode 100644 Source/FMX.frxEditHighlight.pas create mode 100644 Source/FMX.frxEditMD.fmx create mode 100644 Source/FMX.frxEditMD.pas create mode 100644 Source/FMX.frxEditMemo.fmx create mode 100644 Source/FMX.frxEditMemo.pas create mode 100644 Source/FMX.frxEditOptions.fmx create mode 100644 Source/FMX.frxEditOptions.pas create mode 100644 Source/FMX.frxEditPage.fmx create mode 100644 Source/FMX.frxEditPage.pas create mode 100644 Source/FMX.frxEditPicture.fmx create mode 100644 Source/FMX.frxEditPicture.pas create mode 100644 Source/FMX.frxEditQueryParams.fmx create mode 100644 Source/FMX.frxEditQueryParams.pas create mode 100644 Source/FMX.frxEditReport.fmx create mode 100644 Source/FMX.frxEditReport.pas create mode 100644 Source/FMX.frxEditReportData.fmx create mode 100644 Source/FMX.frxEditReportData.pas create mode 100644 Source/FMX.frxEditSQL.fmx create mode 100644 Source/FMX.frxEditSQL.pas create mode 100644 Source/FMX.frxEditStrings.fmx create mode 100644 Source/FMX.frxEditStrings.pas create mode 100644 Source/FMX.frxEditStyle.fmx create mode 100644 Source/FMX.frxEditStyle.pas create mode 100644 Source/FMX.frxEditSysMemo.fmx create mode 100644 Source/FMX.frxEditSysMemo.pas create mode 100644 Source/FMX.frxEditTabOrder.fmx create mode 100644 Source/FMX.frxEditTabOrder.pas create mode 100644 Source/FMX.frxEditVar.fmx create mode 100644 Source/FMX.frxEditVar.pas create mode 100644 Source/FMX.frxEngine.pas create mode 100644 Source/FMX.frxEvaluateForm.fmx create mode 100644 Source/FMX.frxEvaluateForm.pas create mode 100644 Source/FMX.frxFMX.pas create mode 100644 Source/FMX.frxFontForm.fmx create mode 100644 Source/FMX.frxFontForm.pas create mode 100644 Source/FMX.frxGZip.pas create mode 100644 Source/FMX.frxGradient.pas create mode 100644 Source/FMX.frxGradientRTTI.pas create mode 100644 Source/FMX.frxGraphicUtils.pas create mode 100644 Source/FMX.frxInheritError.fmx create mode 100644 Source/FMX.frxInheritError.pas create mode 100644 Source/FMX.frxInsp.fmx create mode 100644 Source/FMX.frxInsp.pas create mode 100644 Source/FMX.frxInsp_D23.fmx create mode 100644 Source/FMX.frxMD5.pas create mode 100644 Source/FMX.frxNewItem.pas create mode 100644 Source/FMX.frxPassw.pas create mode 100644 Source/FMX.frxPictureCache.pas create mode 100644 Source/FMX.frxPopupForm.fmx create mode 100644 Source/FMX.frxPopupForm.pas create mode 100644 Source/FMX.frxPreview.fmx create mode 100644 Source/FMX.frxPreview.pas create mode 100644 Source/FMX.frxPreview.res create mode 100644 Source/FMX.frxPreviewPageSettings.fmx create mode 100644 Source/FMX.frxPreviewPageSettings.pas create mode 100644 Source/FMX.frxPreviewPages.pas create mode 100644 Source/FMX.frxPrintDialog.fmx create mode 100644 Source/FMX.frxPrintDialog.pas create mode 100644 Source/FMX.frxPrinter.pas create mode 100644 Source/FMX.frxProgress.fmx create mode 100644 Source/FMX.frxProgress.pas create mode 100644 Source/FMX.frxReportTree.fmx create mode 100644 Source/FMX.frxReportTree.pas create mode 100644 Source/FMX.frxRes.pas create mode 100644 Source/FMX.frxSearchDialog.fmx create mode 100644 Source/FMX.frxSearchDialog.pas create mode 100644 Source/FMX.frxStdWizard.pas create mode 100644 Source/FMX.frxSynMemo.pas create mode 100644 Source/FMX.frxUnicodeUtils.pas create mode 100644 Source/FMX.frxUtils.pas create mode 100644 Source/FMX.frxVariables.pas create mode 100644 Source/FMX.frxWatchForm.fmx create mode 100644 Source/FMX.frxWatchForm.pas create mode 100644 Source/FMX.frxXML.pas create mode 100644 Source/FMX.frxXMLSerializer.pas create mode 100644 Source/FMX.frxrcClass.pas create mode 100644 Source/FMX.frxrcDesgn.pas create mode 100644 Source/FMX.frxrcInsp.pas create mode 100644 Source/FMXfrx16.dpk create mode 100644 Source/FMXfrx16.otares create mode 100644 Source/FMXfrx16.res create mode 100644 Source/FMXfrx17.dpk create mode 100644 Source/FMXfrx17.otares create mode 100644 Source/FMXfrx17.res create mode 100644 Source/FMXfrx18.dpk create mode 100644 Source/FMXfrx18.otares create mode 100644 Source/FMXfrx18.res create mode 100644 Source/FMXfrx19.dpk create mode 100644 Source/FMXfrx19.otares create mode 100644 Source/FMXfrx19.res create mode 100644 Source/FMXfrx20.dpk create mode 100644 Source/FMXfrx20.otares create mode 100644 Source/FMXfrx20.res create mode 100644 Source/FMXfrx21.dpk create mode 100644 Source/FMXfrx21.otares create mode 100644 Source/FMXfrx21.res create mode 100644 Source/FMXfrx22.dpk create mode 100644 Source/FMXfrx22.otares create mode 100644 Source/FMXfrx22.res create mode 100644 Source/FMXfrx23.dpk create mode 100644 Source/FMXfrx23.otares create mode 100644 Source/FMXfrx23.res create mode 100644 Source/FMXfrx24.dpk create mode 100644 Source/FMXfrx24.dproj create mode 100644 Source/FMXfrx24.otares create mode 100644 Source/FMXfrx24.res create mode 100644 Source/FMXfrx25.dpk create mode 100644 Source/FMXfrx25.otares create mode 100644 Source/FMXfrx25.res create mode 100644 Source/FMXfrx26.dpk create mode 100644 Source/FMXfrx27.dpk create mode 100644 Source/FMXfrx29.dpk create mode 100644 Source/FMXfrxDB16.dpk create mode 100644 Source/FMXfrxDB16.otares create mode 100644 Source/FMXfrxDB16.res create mode 100644 Source/FMXfrxDB17.dpk create mode 100644 Source/FMXfrxDB17.otares create mode 100644 Source/FMXfrxDB17.res create mode 100644 Source/FMXfrxDB18.dpk create mode 100644 Source/FMXfrxDB18.otares create mode 100644 Source/FMXfrxDB18.res create mode 100644 Source/FMXfrxDB19.dpk create mode 100644 Source/FMXfrxDB19.otares create mode 100644 Source/FMXfrxDB19.res create mode 100644 Source/FMXfrxDB20.dpk create mode 100644 Source/FMXfrxDB20.otares create mode 100644 Source/FMXfrxDB20.res create mode 100644 Source/FMXfrxDB21.dpk create mode 100644 Source/FMXfrxDB21.otares create mode 100644 Source/FMXfrxDB21.res create mode 100644 Source/FMXfrxDB22.dpk create mode 100644 Source/FMXfrxDB22.otares create mode 100644 Source/FMXfrxDB22.res create mode 100644 Source/FMXfrxDB23.dpk create mode 100644 Source/FMXfrxDB23.otares create mode 100644 Source/FMXfrxDB23.res create mode 100644 Source/FMXfrxDB24.dpk create mode 100644 Source/FMXfrxDB24.otares create mode 100644 Source/FMXfrxDB24.res create mode 100644 Source/FMXfrxDB25.dpk create mode 100644 Source/FMXfrxDB25.otares create mode 100644 Source/FMXfrxDB25.res create mode 100644 Source/FMXfrxDB26.dpk create mode 100644 Source/FMXfrxDB27.dpk create mode 100644 Source/FMXfrxDB29.dpk create mode 100644 Source/FMXfrxReg.pas create mode 100644 Source/FMXfrxRegCtrls.pas create mode 100644 Source/FMXfrxRegDB.pas create mode 100644 Source/FMXfrxRegTee.pas create mode 100644 Source/FMXfrxTee16.dpk create mode 100644 Source/FMXfrxTee16.otares create mode 100644 Source/FMXfrxTee16.res create mode 100644 Source/FMXfrxTee17.dpk create mode 100644 Source/FMXfrxTee17.otares create mode 100644 Source/FMXfrxTee17.res create mode 100644 Source/FMXfrxTee18.dpk create mode 100644 Source/FMXfrxTee18.otares create mode 100644 Source/FMXfrxTee18.res create mode 100644 Source/FMXfrxTee19.dpk create mode 100644 Source/FMXfrxTee19.otares create mode 100644 Source/FMXfrxTee19.res create mode 100644 Source/FMXfrxTee20.dpk create mode 100644 Source/FMXfrxTee20.otares create mode 100644 Source/FMXfrxTee20.res create mode 100644 Source/FMXfrxTee21.dpk create mode 100644 Source/FMXfrxTee21.otares create mode 100644 Source/FMXfrxTee21.res create mode 100644 Source/FMXfrxTee22.dpk create mode 100644 Source/FMXfrxTee22.otares create mode 100644 Source/FMXfrxTee22.res create mode 100644 Source/FMXfrxTee23.dpk create mode 100644 Source/FMXfrxTee23.otares create mode 100644 Source/FMXfrxTee23.res create mode 100644 Source/FMXfrxTee24.dpk create mode 100644 Source/FMXfrxTee24.dproj create mode 100644 Source/FMXfrxTee24.otares create mode 100644 Source/FMXfrxTee24.res create mode 100644 Source/FMXfrxTee25.dpk create mode 100644 Source/FMXfrxTee25.otares create mode 100644 Source/FMXfrxTee25.res create mode 100644 Source/FMXfrxTee26.dpk create mode 100644 Source/FMXfrxTee27.dpk create mode 100644 Source/FMXfrxTee28.dproj create mode 100644 Source/FMXfrxTee29.dpk create mode 100644 Source/FMXfrxe19.otares create mode 100644 Source/FireDAC/Example/ADQuery.fr3 create mode 100644 Source/FireDAC/Example/ADTable.fr3 create mode 100644 Source/FireDAC/Example/Readme.txt create mode 100644 Source/FireDAC/FMX.frxFDComponents.pas create mode 100644 Source/FireDAC/FMX.frxFDComponents.res create mode 100644 Source/FireDAC/FMX.frxFDEditor.pas create mode 100644 Source/FireDAC/FMX.frxFDRTTI.pas create mode 100644 Source/FireDAC/FMX.frxFDReg.pas create mode 100644 Source/FireDAC/FMXfrxFD18.dpk create mode 100644 Source/FireDAC/FMXfrxFD18.otares create mode 100644 Source/FireDAC/FMXfrxFD18.res create mode 100644 Source/FireDAC/FMXfrxFD19.dpk create mode 100644 Source/FireDAC/FMXfrxFD19.res create mode 100644 Source/FireDAC/FMXfrxFD20.dpk create mode 100644 Source/FireDAC/FMXfrxFD20.res create mode 100644 Source/FireDAC/FMXfrxFD21.dpk create mode 100644 Source/FireDAC/FMXfrxFD21.res create mode 100644 Source/FireDAC/FMXfrxFD22.dpk create mode 100644 Source/FireDAC/FMXfrxFD22.res create mode 100644 Source/FireDAC/FMXfrxFD23.dpk create mode 100644 Source/FireDAC/FMXfrxFD23.res create mode 100644 Source/FireDAC/FMXfrxFD24.dpk create mode 100644 Source/FireDAC/FMXfrxFD24.res create mode 100644 Source/FireDAC/FMXfrxFD25.dpk create mode 100644 Source/FireDAC/FMXfrxFD25.res create mode 100644 Source/FireDAC/FMXfrxFD26.dpk create mode 100644 Source/FireDAC/FMXfrxFD27.dpk create mode 100644 Source/FireDAC/FMXfrxFD29.dpk create mode 100644 Source/FireDAC/FMXfrxFDReg.dcr create mode 100644 Source/FireDAC/FmxLinuxFrxFD.dpr create mode 100644 Source/FireDAC/dclFMXfrxFD18.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD18.res create mode 100644 Source/FireDAC/dclFMXfrxFD19.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD19.res create mode 100644 Source/FireDAC/dclFMXfrxFD20.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD20.res create mode 100644 Source/FireDAC/dclFMXfrxFD21.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD21.res create mode 100644 Source/FireDAC/dclFMXfrxFD22.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD22.res create mode 100644 Source/FireDAC/dclFMXfrxFD23.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD23.res create mode 100644 Source/FireDAC/dclFMXfrxFD24.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD24.res create mode 100644 Source/FireDAC/dclFMXfrxFD25.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD25.res create mode 100644 Source/FireDAC/dclFMXfrxFD26.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD27.dpk create mode 100644 Source/FireDAC/dclFMXfrxFD29.dpk create mode 100644 Source/FireDAC/readme.txt create mode 100644 Source/FmxLinuxFrxLang.dpr create mode 100644 Source/FmxLinuxFrxMain.dpr create mode 100644 Source/FmxLinuxFrxTee.dpr create mode 100644 Source/IBX/FMX.frxIBXComponents.pas create mode 100644 Source/IBX/FMX.frxIBXEditor.pas create mode 100644 Source/IBX/FMX.frxIBXRTTI.pas create mode 100644 Source/IBX/FMXfrxIBX16.dpk create mode 100644 Source/IBX/FMXfrxIBX16.res create mode 100644 Source/IBX/FMXfrxIBX17.dpk create mode 100644 Source/IBX/FMXfrxIBX17.res create mode 100644 Source/IBX/FMXfrxIBX18.dpk create mode 100644 Source/IBX/FMXfrxIBX18.res create mode 100644 Source/IBX/FMXfrxIBX19.dpk create mode 100644 Source/IBX/FMXfrxIBX19.res create mode 100644 Source/IBX/FMXfrxIBX20.dpk create mode 100644 Source/IBX/FMXfrxIBX20.res create mode 100644 Source/IBX/FMXfrxIBX21.dpk create mode 100644 Source/IBX/FMXfrxIBX21.res create mode 100644 Source/IBX/FMXfrxIBX22.dpk create mode 100644 Source/IBX/FMXfrxIBX22.res create mode 100644 Source/IBX/FMXfrxIBX23.dpk create mode 100644 Source/IBX/FMXfrxIBX23.res create mode 100644 Source/IBX/FMXfrxIBX24.dpk create mode 100644 Source/IBX/FMXfrxIBX24.res create mode 100644 Source/IBX/FMXfrxIBX25.dpk create mode 100644 Source/IBX/FMXfrxIBX25.res create mode 100644 Source/IBX/FMXfrxIBX26.dpk create mode 100644 Source/IBX/FMXfrxIBX27.dpk create mode 100644 Source/IBX/FMXfrxIBX28.dpk create mode 100644 Source/IBX/FMXfrxIBXReg.dcr create mode 100644 Source/IBX/FMXfrxIBXReg.pas create mode 100644 Source/IBX/FmxLinuxFrxIBX.dpr create mode 100644 Source/IBX/dclFMXfrxIBX16.dpk create mode 100644 Source/IBX/dclFMXfrxIBX16.res create mode 100644 Source/IBX/dclFMXfrxIBX17.dpk create mode 100644 Source/IBX/dclFMXfrxIBX17.res create mode 100644 Source/IBX/dclFMXfrxIBX18.dpk create mode 100644 Source/IBX/dclFMXfrxIBX18.res create mode 100644 Source/IBX/dclFMXfrxIBX19.dpk create mode 100644 Source/IBX/dclFMXfrxIBX19.res create mode 100644 Source/IBX/dclFMXfrxIBX20.dpk create mode 100644 Source/IBX/dclFMXfrxIBX20.res create mode 100644 Source/IBX/dclFMXfrxIBX21.dpk create mode 100644 Source/IBX/dclFMXfrxIBX21.res create mode 100644 Source/IBX/dclFMXfrxIBX22.dpk create mode 100644 Source/IBX/dclFMXfrxIBX22.res create mode 100644 Source/IBX/dclFMXfrxIBX23.dpk create mode 100644 Source/IBX/dclFMXfrxIBX23.res create mode 100644 Source/IBX/dclFMXfrxIBX24.dpk create mode 100644 Source/IBX/dclFMXfrxIBX24.res create mode 100644 Source/IBX/dclFMXfrxIBX25.dpk create mode 100644 Source/IBX/dclFMXfrxIBX25.res create mode 100644 Source/IBX/dclFMXfrxIBX26.dpk create mode 100644 Source/IBX/dclFMXfrxIBX27.dpk create mode 100644 Source/IBX/dclFMXfrxIBX28.dpk create mode 100644 Source/IBX/frxIBXReg.res create mode 100644 Source/dclFMXfrx16.dpk create mode 100644 Source/dclFMXfrx16.res create mode 100644 Source/dclFMXfrx17.dpk create mode 100644 Source/dclFMXfrx17.res create mode 100644 Source/dclFMXfrx18.dpk create mode 100644 Source/dclFMXfrx18.res create mode 100644 Source/dclFMXfrx19.dpk create mode 100644 Source/dclFMXfrx19.res create mode 100644 Source/dclFMXfrx20.dpk create mode 100644 Source/dclFMXfrx20.res create mode 100644 Source/dclFMXfrx21.dpk create mode 100644 Source/dclFMXfrx21.res create mode 100644 Source/dclFMXfrx22.dpk create mode 100644 Source/dclFMXfrx22.res create mode 100644 Source/dclFMXfrx23.dpk create mode 100644 Source/dclFMXfrx23.res create mode 100644 Source/dclFMXfrx24.dpk create mode 100644 Source/dclFMXfrx24.res create mode 100644 Source/dclFMXfrx25.dpk create mode 100644 Source/dclFMXfrx25.otares create mode 100644 Source/dclFMXfrx25.res create mode 100644 Source/dclFMXfrx26.dpk create mode 100644 Source/dclFMXfrx27.dpk create mode 100644 Source/dclFMXfrx29.dpk create mode 100644 Source/dclFMXfrxDB16.dpk create mode 100644 Source/dclFMXfrxDB16.res create mode 100644 Source/dclFMXfrxDB17.dpk create mode 100644 Source/dclFMXfrxDB17.res create mode 100644 Source/dclFMXfrxDB18.dpk create mode 100644 Source/dclFMXfrxDB18.res create mode 100644 Source/dclFMXfrxDB19.dpk create mode 100644 Source/dclFMXfrxDB19.res create mode 100644 Source/dclFMXfrxDB20.dpk create mode 100644 Source/dclFMXfrxDB20.res create mode 100644 Source/dclFMXfrxDB21.dpk create mode 100644 Source/dclFMXfrxDB21.res create mode 100644 Source/dclFMXfrxDB22.dpk create mode 100644 Source/dclFMXfrxDB22.res create mode 100644 Source/dclFMXfrxDB23.dpk create mode 100644 Source/dclFMXfrxDB23.res create mode 100644 Source/dclFMXfrxDB24.dpk create mode 100644 Source/dclFMXfrxDB24.res create mode 100644 Source/dclFMXfrxDB25.dpk create mode 100644 Source/dclFMXfrxDB25.otares create mode 100644 Source/dclFMXfrxDB25.res create mode 100644 Source/dclFMXfrxDB26.dpk create mode 100644 Source/dclFMXfrxDB27.dpk create mode 100644 Source/dclFMXfrxDB29.dpk create mode 100644 Source/dclFMXfrxTee16.dpk create mode 100644 Source/dclFMXfrxTee16.res create mode 100644 Source/dclFMXfrxTee17.dpk create mode 100644 Source/dclFMXfrxTee17.res create mode 100644 Source/dclFMXfrxTee18.dpk create mode 100644 Source/dclFMXfrxTee18.res create mode 100644 Source/dclFMXfrxTee19.dpk create mode 100644 Source/dclFMXfrxTee19.res create mode 100644 Source/dclFMXfrxTee20.dpk create mode 100644 Source/dclFMXfrxTee20.res create mode 100644 Source/dclFMXfrxTee21.dpk create mode 100644 Source/dclFMXfrxTee21.res create mode 100644 Source/dclFMXfrxTee22.dpk create mode 100644 Source/dclFMXfrxTee22.res create mode 100644 Source/dclFMXfrxTee23.dpk create mode 100644 Source/dclFMXfrxTee23.res create mode 100644 Source/dclFMXfrxTee24.dpk create mode 100644 Source/dclFMXfrxTee24.res create mode 100644 Source/dclFMXfrxTee25.dpk create mode 100644 Source/dclFMXfrxTee25.otares create mode 100644 Source/dclFMXfrxTee25.res create mode 100644 Source/dclFMXfrxTee26.dpk create mode 100644 Source/dclFMXfrxTee27.dpk create mode 100644 Source/dclFMXfrxTee29.dpk create mode 100644 Source/fmx.inc create mode 100644 Source/frx.inc create mode 100644 Source/frxBarcodeEditor.fmx create mode 100644 Source/frxEditSQL.inc create mode 100644 Source/frxFMX_PlatformsAttribute.inc create mode 100644 Source/frxReg.dcr create mode 100644 Source/frxVersion.inc create mode 100644 changes.txt create mode 100644 changes_rus.txt create mode 100644 comp_developers.txt create mode 100644 comp_developers_rus.txt create mode 100644 compatibility.txt create mode 100644 compatibility_rus.txt create mode 100644 file_id.diz create mode 100644 frx_icon.ico create mode 100644 license.rtf create mode 100644 license_rus.rtf create mode 100644 readme.md create mode 100644 readme.rtf create mode 100644 readme_rus.rtf create mode 100644 teechart.txt create mode 100644 teechart_rus.txt diff --git a/Demos/Main/1.fr3 b/Demos/Main/1.fr3 new file mode 100644 index 0000000..e47ae09 --- /dev/null +++ b/Demos/Main/1.fr3 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/10.FR3 b/Demos/Main/10.FR3 new file mode 100644 index 0000000..d5daf62 --- /dev/null +++ b/Demos/Main/10.FR3 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/100.fr3 b/Demos/Main/100.fr3 new file mode 100644 index 0000000..e3975c1 --- /dev/null +++ b/Demos/Main/100.fr3 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/101.fr3 b/Demos/Main/101.fr3 new file mode 100644 index 0000000..8970f93 --- /dev/null +++ b/Demos/Main/101.fr3 @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/102.fr3 b/Demos/Main/102.fr3 new file mode 100644 index 0000000..63404ce --- /dev/null +++ b/Demos/Main/102.fr3 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Demos/Main/103.fr3 b/Demos/Main/103.fr3 new file mode 100644 index 0000000..7aba74f --- /dev/null +++ b/Demos/Main/103.fr3 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Demos/Main/104.fr3 b/Demos/Main/104.fr3 new file mode 100644 index 0000000..2cfd896 --- /dev/null +++ b/Demos/Main/104.fr3 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/105.fr3 b/Demos/Main/105.fr3 new file mode 100644 index 0000000..f7ce1c2 --- /dev/null +++ b/Demos/Main/105.fr3 @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/11.FR3 b/Demos/Main/11.FR3 new file mode 100644 index 0000000..99cfe40 --- /dev/null +++ b/Demos/Main/11.FR3 @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/12.FR3 b/Demos/Main/12.FR3 new file mode 100644 index 0000000..1c3c784 --- /dev/null +++ b/Demos/Main/12.FR3 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/13.fr3 b/Demos/Main/13.fr3 new file mode 100644 index 0000000..406ca2d --- /dev/null +++ b/Demos/Main/13.fr3 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Demos/Main/2.fr3 b/Demos/Main/2.fr3 new file mode 100644 index 0000000..13fec8d --- /dev/null +++ b/Demos/Main/2.fr3 @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/21.FR3 b/Demos/Main/21.FR3 new file mode 100644 index 0000000..b4f242c --- /dev/null +++ b/Demos/Main/21.FR3 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Demos/Main/22.FR3 b/Demos/Main/22.FR3 new file mode 100644 index 0000000..2c02662 --- /dev/null +++ b/Demos/Main/22.FR3 @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/23.FR3 b/Demos/Main/23.FR3 new file mode 100644 index 0000000..6db8851 --- /dev/null +++ b/Demos/Main/23.FR3 @@ -0,0 +1,6 @@ + + + + + + diff --git a/Demos/Main/24.FR3 b/Demos/Main/24.FR3 new file mode 100644 index 0000000..497997a --- /dev/null +++ b/Demos/Main/24.FR3 @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/25.fr3 b/Demos/Main/25.fr3 new file mode 100644 index 0000000..860bcff --- /dev/null +++ b/Demos/Main/25.fr3 @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/3.fr3 b/Demos/Main/3.fr3 new file mode 100644 index 0000000..200445e --- /dev/null +++ b/Demos/Main/3.fr3 @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/31.fr3 b/Demos/Main/31.fr3 new file mode 100644 index 0000000..43e20bd --- /dev/null +++ b/Demos/Main/31.fr3 @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/32.fr3 b/Demos/Main/32.fr3 new file mode 100644 index 0000000..9aded9c --- /dev/null +++ b/Demos/Main/32.fr3 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Demos/Main/33.FR3 b/Demos/Main/33.FR3 new file mode 100644 index 0000000..151d745 --- /dev/null +++ b/Demos/Main/33.FR3 @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/34.FR3 b/Demos/Main/34.FR3 new file mode 100644 index 0000000..2cf389e --- /dev/null +++ b/Demos/Main/34.FR3 @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/35.fr3 b/Demos/Main/35.fr3 new file mode 100644 index 0000000..fa1fe47 --- /dev/null +++ b/Demos/Main/35.fr3 @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/36.fr3 b/Demos/Main/36.fr3 new file mode 100644 index 0000000..73137f5 --- /dev/null +++ b/Demos/Main/36.fr3 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/4.FR3 b/Demos/Main/4.FR3 new file mode 100644 index 0000000..ed9c679 --- /dev/null +++ b/Demos/Main/4.FR3 @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/41.FR3 b/Demos/Main/41.FR3 new file mode 100644 index 0000000..341d8fe --- /dev/null +++ b/Demos/Main/41.FR3 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Demos/Main/42.FR3 b/Demos/Main/42.FR3 new file mode 100644 index 0000000..fcc981a --- /dev/null +++ b/Demos/Main/42.FR3 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Demos/Main/43.FR3 b/Demos/Main/43.FR3 new file mode 100644 index 0000000..e600a0c --- /dev/null +++ b/Demos/Main/43.FR3 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Demos/Main/5.FR3 b/Demos/Main/5.FR3 new file mode 100644 index 0000000..07c29bb --- /dev/null +++ b/Demos/Main/5.FR3 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/Demos/Main/6.FR3 b/Demos/Main/6.FR3 new file mode 100644 index 0000000..8b049bf --- /dev/null +++ b/Demos/Main/6.FR3 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/60.fr3 b/Demos/Main/60.fr3 new file mode 100644 index 0000000..1b25a7c --- /dev/null +++ b/Demos/Main/60.fr3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/61.FR3 b/Demos/Main/61.FR3 new file mode 100644 index 0000000..770db68 --- /dev/null +++ b/Demos/Main/61.FR3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/62.FR3 b/Demos/Main/62.FR3 new file mode 100644 index 0000000..7fb6cb7 --- /dev/null +++ b/Demos/Main/62.FR3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/63.FR3 b/Demos/Main/63.FR3 new file mode 100644 index 0000000..062df9c --- /dev/null +++ b/Demos/Main/63.FR3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/64.FR3 b/Demos/Main/64.FR3 new file mode 100644 index 0000000..bb5dff2 --- /dev/null +++ b/Demos/Main/64.FR3 @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/65.FR3 b/Demos/Main/65.FR3 new file mode 100644 index 0000000..43e5746 --- /dev/null +++ b/Demos/Main/65.FR3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/66.FR3 b/Demos/Main/66.FR3 new file mode 100644 index 0000000..ef4d006 --- /dev/null +++ b/Demos/Main/66.FR3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/67.FR3 b/Demos/Main/67.FR3 new file mode 100644 index 0000000..28ee795 --- /dev/null +++ b/Demos/Main/67.FR3 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/68.FR3 b/Demos/Main/68.FR3 new file mode 100644 index 0000000..40b99f0 --- /dev/null +++ b/Demos/Main/68.FR3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/69.FR3 b/Demos/Main/69.FR3 new file mode 100644 index 0000000..fdd8e27 --- /dev/null +++ b/Demos/Main/69.FR3 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Demos/Main/7.FR3 b/Demos/Main/7.FR3 new file mode 100644 index 0000000..717f0bc --- /dev/null +++ b/Demos/Main/7.FR3 @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Demos/Main/70.fr3 b/Demos/Main/70.fr3 new file mode 100644 index 0000000..f665600 --- /dev/null +++ b/Demos/Main/70.fr3 @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/71.fr3 b/Demos/Main/71.fr3 new file mode 100644 index 0000000..9dcec19 --- /dev/null +++ b/Demos/Main/71.fr3 @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/72.fr3 b/Demos/Main/72.fr3 new file mode 100644 index 0000000..8bca00f --- /dev/null +++ b/Demos/Main/72.fr3 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/73.fr3 b/Demos/Main/73.fr3 new file mode 100644 index 0000000..ae9209e --- /dev/null +++ b/Demos/Main/73.fr3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/8.FR3 b/Demos/Main/8.FR3 new file mode 100644 index 0000000..a033d7a --- /dev/null +++ b/Demos/Main/8.FR3 @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/80.fr3 b/Demos/Main/80.fr3 new file mode 100644 index 0000000..1e8f33a --- /dev/null +++ b/Demos/Main/80.fr3 @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/81.fr3 b/Demos/Main/81.fr3 new file mode 100644 index 0000000..751707a --- /dev/null +++ b/Demos/Main/81.fr3 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/82.fr3 b/Demos/Main/82.fr3 new file mode 100644 index 0000000..71b2341 --- /dev/null +++ b/Demos/Main/82.fr3 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Demos/Main/9.FR3 b/Demos/Main/9.FR3 new file mode 100644 index 0000000..ba748c3 --- /dev/null +++ b/Demos/Main/9.FR3 @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/93.fr3 b/Demos/Main/93.fr3 new file mode 100644 index 0000000..b6d090b --- /dev/null +++ b/Demos/Main/93.fr3 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/94.fr3 b/Demos/Main/94.fr3 new file mode 100644 index 0000000..cbb99ac --- /dev/null +++ b/Demos/Main/94.fr3 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/95.fr3 b/Demos/Main/95.fr3 new file mode 100644 index 0000000..0c091f4 --- /dev/null +++ b/Demos/Main/95.fr3 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/96.fr3 b/Demos/Main/96.fr3 new file mode 100644 index 0000000..dcdafec --- /dev/null +++ b/Demos/Main/96.fr3 @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/97.fr3 b/Demos/Main/97.fr3 new file mode 100644 index 0000000..2119aab --- /dev/null +++ b/Demos/Main/97.fr3 @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/98.fr3 b/Demos/Main/98.fr3 new file mode 100644 index 0000000..5617873 --- /dev/null +++ b/Demos/Main/98.fr3 @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/99.fr3 b/Demos/Main/99.fr3 new file mode 100644 index 0000000..458f26b --- /dev/null +++ b/Demos/Main/99.fr3 @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demos/Main/Data/biolife.xml b/Demos/Main/Data/biolife.xml new file mode 100644 index 0000000..ba0304a --- /dev/null +++ b/Demos/Main/Data/biolife.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/country.xml b/Demos/Main/Data/country.xml new file mode 100644 index 0000000..86224ec --- /dev/null +++ b/Demos/Main/Data/country.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/crosstest.xml b/Demos/Main/Data/crosstest.xml new file mode 100644 index 0000000..aa54760 --- /dev/null +++ b/Demos/Main/Data/crosstest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/currency_quoting.xml b/Demos/Main/Data/currency_quoting.xml new file mode 100644 index 0000000..b04c275 --- /dev/null +++ b/Demos/Main/Data/currency_quoting.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/customer.xml b/Demos/Main/Data/customer.xml new file mode 100644 index 0000000..eacfb9f --- /dev/null +++ b/Demos/Main/Data/customer.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/customer_query.xml b/Demos/Main/Data/customer_query.xml new file mode 100644 index 0000000..c03c78b --- /dev/null +++ b/Demos/Main/Data/customer_query.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/employee.xml b/Demos/Main/Data/employee.xml new file mode 100644 index 0000000..233020a --- /dev/null +++ b/Demos/Main/Data/employee.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/items.xml b/Demos/Main/Data/items.xml new file mode 100644 index 0000000..e764f8b --- /dev/null +++ b/Demos/Main/Data/items.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/nextcust.xml b/Demos/Main/Data/nextcust.xml new file mode 100644 index 0000000..08fdbe4 --- /dev/null +++ b/Demos/Main/Data/nextcust.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/nextitem.xml b/Demos/Main/Data/nextitem.xml new file mode 100644 index 0000000..b809135 --- /dev/null +++ b/Demos/Main/Data/nextitem.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/nextord.xml b/Demos/Main/Data/nextord.xml new file mode 100644 index 0000000..ec8aae1 --- /dev/null +++ b/Demos/Main/Data/nextord.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/orders.xml b/Demos/Main/Data/orders.xml new file mode 100644 index 0000000..1ef206e --- /dev/null +++ b/Demos/Main/Data/orders.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/parts.xml b/Demos/Main/Data/parts.xml new file mode 100644 index 0000000..cebe67d --- /dev/null +++ b/Demos/Main/Data/parts.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/unicode.xml b/Demos/Main/Data/unicode.xml new file mode 100644 index 0000000..615b696 --- /dev/null +++ b/Demos/Main/Data/unicode.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Data/vendors.xml b/Demos/Main/Data/vendors.xml new file mode 100644 index 0000000..9d89de5 --- /dev/null +++ b/Demos/Main/Data/vendors.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Project1.deployproj b/Demos/Main/Project1.deployproj new file mode 100644 index 0000000..e124f86 --- /dev/null +++ b/Demos/Main/Project1.deployproj @@ -0,0 +1,1449 @@ + + + + 12 + + + + + + + + + + + + Project1\ + Project1.exe + ProjectOutput + 0 + + + True + True + + + + + Project1\ + 7.FR3 + File + 0 + + + True + + + Project1\ + 35.fr3 + File + 0 + + + True + + + Project1\ + 61.FR3 + File + 0 + + + True + + + Project1\ + 21.FR3 + File + 0 + + + True + + + Project1\ + 65.FR3 + File + 0 + + + True + + + Project1\ + 96.fr3 + File + 0 + + + True + + + Project1\ + awards.png + File + 0 + + + True + + + Project1\ + 3.fr3 + File + 0 + + + True + + + Project1\ + 12.FR3 + File + 0 + + + True + + + Project1\ + 66.FR3 + File + 0 + + + True + + + Project1\ + 67.FR3 + File + 0 + + + True + + + Project1\ + 102.fr3 + File + 0 + + + True + + + Project1\ + 99.fr3 + File + 0 + + + True + + + Project1\Data\ + nextitem.xml + File + 0 + + + True + + + Project1\ + 69.FR3 + File + 0 + + + True + + + Project1\ + 68.FR3 + File + 0 + + + True + + + Project1\ + 94.fr3 + File + 0 + + + True + + + Project1\Data\ + nextcust.xml + File + 0 + + + True + + + Project1\Data\ + items.xml + File + 0 + + + True + + + Project1\Data\ + orders.xml + File + 0 + + + True + + + Project1\Data\ + vendors.xml + File + 0 + + + True + + + Project1\ + 36.fr3 + File + 0 + + + True + + + Project1\ + 41.FR3 + File + 0 + + + True + + + Project1\ + 33.FR3 + File + 0 + + + True + + + Project1\ + 104.fr3 + File + 0 + + + True + + + Project1\Data\ + customer_query.xml + File + 0 + + + True + + + Project1\ + 80.fr3 + File + 0 + + + True + + + Project1\ + 34.FR3 + File + 0 + + + True + + + Project1\Data\ + currency_quoting.xml + File + 0 + + + True + + + Project1\ + Project1 + ProjectOutput + 1 + + + True + True + + + Project1\ + 9.FR3 + File + 0 + + + True + + + Project1\ + 93.fr3 + File + 0 + + + True + + + Project1\ + 98.fr3 + File + 0 + + + True + + + Project1\ + 2.fr3 + File + 0 + + + True + + + Project1\ + 24.FR3 + File + 0 + + + True + + + Project1\ + 43.FR3 + File + 0 + + + True + + + Project1\Data\ + biolife.xml + File + 0 + + + True + + + Project1\Data\ + unicode.xml + File + 0 + + + True + + + Project1\ + 81.fr3 + File + 0 + + + True + + + Project1\ + 97.fr3 + File + 0 + + + True + + + Project1\ + 73.fr3 + File + 0 + + + True + + + Project1\ + 101.fr3 + File + 0 + + + True + + + Project1\ + 95.fr3 + File + 0 + + + True + + + Project1\ + 100.fr3 + File + 0 + + + True + + + Project1\ + 22.FR3 + File + 0 + + + True + + + Project1\ + 23.FR3 + File + 0 + + + True + + + Project1\ + 31.fr3 + File + 0 + + + True + + + Project1\ + 64.FR3 + File + 0 + + + True + + + Project1\ + 71.fr3 + File + 0 + + + True + + + Project1\Data\ + crosstest.xml + File + 0 + + + True + + + Project1\ + 5.FR3 + File + 0 + + + True + + + Project1\ + 63.FR3 + File + 0 + + + True + + + Project1\ + 70.fr3 + File + 0 + + + True + + + Project1\Data\ + customer.xml + File + 0 + + + True + + + Project1\ + 82.fr3 + File + 0 + + + True + + + Project1\ + 1.fr3 + File + 0 + + + True + + + Project1\ + 25.fr3 + File + 0 + + + True + + + Project1\ + 72.fr3 + File + 0 + + + True + + + Project1\ + 10.FR3 + File + 0 + + + True + + + Project1\ + 11.FR3 + File + 0 + + + True + + + Project1\ + libmidas.so.2 + File + 0 + + + True + + + Project1\ + 13.fr3 + File + 0 + + + True + + + Project1\ + 60.fr3 + File + 0 + + + True + + + Project1\Data\ + parts.xml + File + 0 + + + True + + + Project1\ + 32.fr3 + File + 0 + + + True + + + Project1\ + 62.FR3 + File + 0 + + + True + + + Project1\Data\ + employee.xml + File + 0 + + + True + + + Project1\Data\ + country.xml + File + 0 + + + True + + + Project1\ + 42.FR3 + File + 0 + + + True + + + Project1\ + 105.fr3 + File + 0 + + + True + + + Project1\ + 103.fr3 + File + 0 + + + True + + + Project1\ + 4.FR3 + File + 0 + + + True + + + Project1\ + 6.FR3 + File + 0 + + + True + + + Project1\ + 8.FR3 + File + 0 + + + True + + + Project1\Data\ + nextord.xml + File + 0 + + + True + + + + + Project1.app\Contents\MacOS\ + 94.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 100.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 25.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 70.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 32.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 82.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 41.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 96.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 73.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 34.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + unicode.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + parts.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 23.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 35.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 80.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 65.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 2.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 98.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 36.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + vendors.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + nextitem.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + libmidas.dylib + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + nextord.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 64.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 21.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + orders.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + items.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + crosstest.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + customer_query.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 72.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 66.FR3 + File + 0 + + + True + + + Project1.app\Contents\ + Info.plist + ProjectOSXInfoPList + 1 + + + True + + + Project1.app\..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF\ + Project1 + ProjectOSXDebug + 1 + + + True + + + Project1.app\Contents\MacOS\ + 3.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 11.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 13.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 61.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 5.FR3 + File + 0 + + + True + + + Project1.app\..\ + Project1.entitlements + ProjectOSXEntitlements + 1 + + + True + + + Project1.app\Contents\MacOS\ + 67.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 97.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + currency_quoting.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 63.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 71.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + Project1 + ProjectOutput + 1 + + + True + True + + + Project1.app\Contents\MacOS\ + 101.fr3 + File + 0 + + + True + + + Project1.app\Contents\Resources\ + Project1.icns + ProjectOSXResource + 1 + + + True + + + Project1.app\Contents\MacOS\ + 60.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 99.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 12.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 33.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 62.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 95.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 8.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 105.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + awards.png + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 10.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 104.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 24.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 103.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 43.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 7.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + libmidas.dylib + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + biolife.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 22.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 69.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 81.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 42.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 31.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 9.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 93.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + country.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 1.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + employee.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 68.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 4.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 102.fr3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + customer.xml + File + 0 + + + True + + + Project1.app\Contents\MacOS\ + 6.FR3 + File + 0 + + + True + + + Project1.app\Contents\MacOS\Data\ + nextcust.xml + File + 0 + + + True + + + + + + Project1.app\ + libcgunwind.1.0.dylib + DependencyModule + 1 + + + True + + + Project1.app\ + libpcre.dylib + DependencyModule + 1 + + + True + + + + diff --git a/Demos/Main/Project1.dpr b/Demos/Main/Project1.dpr new file mode 100644 index 0000000..b7540a2 --- /dev/null +++ b/Demos/Main/Project1.dpr @@ -0,0 +1,17 @@ +program Project1; +uses + FMX.Forms, + FMX.Types, + Unit2 in 'Unit2.pas' {Form2}, + Unit3 in 'Unit3.pas' {DataModule3: TDataModule}; + +{$R *.res} + +begin + + GlobalUseDirect2D := False; + Application.Initialize; + Application.CreateForm(TDataModule3, DataModule3); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/Demos/Main/Project1.dproj b/Demos/Main/Project1.dproj new file mode 100644 index 0000000..5da5c1b --- /dev/null +++ b/Demos/Main/Project1.dproj @@ -0,0 +1,1536 @@ + + + {C4BF2255-45AC-4C6F-8A35-10B1653A42E5} + Project1.dpr + True + Debug + 4225 + Application + FMX + 18.7 + Linux64 + Ubuntu 18.04 LTS + ubuntu18.04.sdk + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + false + false + false + false + false + 00400000 + Project1 + 1049 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\delphi_PROJECTICNS.icns + + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + true + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png + $(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png + $(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png + true + true + true + true + true + true + true + true + true + true + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png + $(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png + android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false + iPhoneAndiPad + true + Debug + $(MSBuildProjectName) + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png + + + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png + + + CFBundleName=$(MSBuildProjectName);CFBundleDevelopmentRegion=en;CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleInfoDictionaryVersion=7.1;CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;LSRequiresIPhoneOS=true;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);UIDeviceFamily=iPhone & iPad;CFBundleResourceSpecification=ResourceRules.plist;NSLocationAlwaysUsageDescription=The reason for accessing the location information of the user;NSLocationWhenInUseUsageDescription=The reason for accessing the location information of the user;NSLocationAlwaysAndWhenInUseUsageDescription=The reason for accessing the location information of the user;FMLocalNotificationPermission=false;UIBackgroundModes=;NSContactsUsageDescription=The reason for accessing the contacts;NSPhotoLibraryUsageDescription=The reason for accessing the photo library;NSPhotoLibraryAddUsageDescription=The reason for adding to the photo library;NSCameraUsageDescription=The reason for accessing the camera;NSFaceIDUsageDescription=The reason for accessing the face id;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSSiriUsageDescription=The reason for accessing Siri;ITSAppUsesNonExemptEncryption=false + iPhoneAndiPad + true + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_60x60.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_40x40.png + $(BDS)\bin\Artwork\iOS\iPad\FM_SpotlightSearchIcon_80x80.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_76x76.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_152x152.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_768x1024.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_1024x768.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1536x2048.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2048x1536.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_87x87.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_ApplicationIcon_180x180.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_750x1334.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2208.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2208x1242.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1125x2436.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2436x1125.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_SpotlightSearchIcon_120x120.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_828x1792.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1136x640.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1242x2688.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1334x750.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_1792x828.png + $(BDS)\bin\Artwork\iOS\iPhone\FM_LaunchImage_2688x1242.png + $(BDS)\bin\Artwork\iOS\iPad\FM_ApplicationIcon_167x167.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2224.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_1668x2388.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImagePortrait_2048x2732.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2224x1668.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2388x1668.png + $(BDS)\bin\Artwork\iOS\iPad\FM_LaunchImageLandscape_2732x2048.png + + + $(BDS)\bin\delphi_PROJECTICNS.icns + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + $(BDS)\bin\default_app.manifest + true + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + + + RELEASE;$(DCC_Define) + 0 + false + 0 + + + true + PerMonitorV2 + + + DEBUG;$(DCC_Define) + false + true + + + true + + + Debug + + + true + + + $(BDS)\bin\delphi_PROJECTICNS.icns + + + Debug + + + true + PerMonitorV2 + + + + MainSource + + +
Form2
+
+ +
DataModule3
+ TDataModule +
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + + + + + Project1.dpr + + + + False + False + False + False + True + False + True + True + False + + + + + 73.fr3 + true + + + + + 101.fr3 + true + + + + + 7.FR3 + true + + + + + 95.fr3 + true + + + + + 100.fr3 + true + + + + + 35.fr3 + true + + + + + 22.FR3 + true + + + + + 31.fr3 + true + + + + + 61.FR3 + true + + + + + 64.FR3 + true + + + + + 71.fr3 + true + + + + + 23.FR3 + true + + + + + .\Data\ + crosstest.xml + true + + + + + 21.FR3 + true + + + + + 65.FR3 + true + + + + + 5.FR3 + true + + + + + 96.fr3 + true + + + + + awards.png + true + + + + + 3.fr3 + true + + + + + 63.FR3 + true + + + + + 12.FR3 + true + + + + + 66.FR3 + true + + + + + 67.FR3 + true + + + + + 102.fr3 + true + + + + + 99.fr3 + true + + + + + .\Data\ + nextitem.xml + true + + + + + 69.FR3 + true + + + + + 70.fr3 + true + + + + + 68.FR3 + true + + + + + true + + + + + .\Data\ + customer.xml + true + + + + + 94.fr3 + true + + + + + .\Data\ + nextcust.xml + true + + + + + 82.fr3 + true + + + + + true + + + + + 1.fr3 + true + + + + + .\Data\ + items.xml + true + + + + + 25.fr3 + true + + + + + 72.fr3 + true + + + + + .\Data\ + orders.xml + true + + + + + 36.fr3 + true + + + + + .\Data\ + vendors.xml + true + + + + + 41.FR3 + true + + + + + 11.FR3 + true + + + + + 10.FR3 + true + + + + + libmidas.so.2 + true + + + + + 13.fr3 + true + + + + + 60.fr3 + true + + + + + 33.FR3 + true + + + + + .\Data\ + parts.xml + true + + + + + 32.fr3 + true + + + + + 104.fr3 + true + + + + + 62.FR3 + true + + + + + .\Data\ + employee.xml + true + + + + + .\Data\ + country.xml + true + + + + + 42.FR3 + true + + + + + .\Data\ + customer_query.xml + true + + + + + 80.fr3 + true + + + + + 105.fr3 + true + + + + + 34.FR3 + true + + + + + 103.fr3 + true + + + + + 4.FR3 + true + + + + + .\Data\ + currency_quoting.xml + true + + + + + true + + + + + Project1 + true + + + + + 6.FR3 + true + + + + + 9.FR3 + true + + + + + 2.fr3 + true + + + + + 93.fr3 + true + + + + + 98.fr3 + true + + + + + 24.FR3 + true + + + + + Project1.exe + true + + + + + 8.FR3 + true + + + + + 43.FR3 + true + + + + + .\Data\ + nextord.xml + true + + + + + .\Data\ + biolife.xml + true + + + + + .\Data\ + unicode.xml + true + + + + + 81.fr3 + true + + + + + 97.fr3 + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + classes + 1 + + + + + res\xml + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\armeabi + 1 + + + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + + + res\values + 1 + + + + + res\values-v21 + 1 + + + + + res\values + 1 + + + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + 1 + + + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + + + + + + + + + + 12 + + + + +
diff --git a/Demos/Main/Project1.res b/Demos/Main/Project1.res new file mode 100644 index 0000000000000000000000000000000000000000..36f26e234a8ac66a47e95cec6d496cf2f1442471 GIT binary patch literal 32 UcmZQzU|>)H;{X347|28c09i@|9RL6T literal 0 HcmV?d00001 diff --git a/Demos/Main/Unit2.fmx b/Demos/Main/Unit2.fmx new file mode 100644 index 0000000..d731256 --- /dev/null +++ b/Demos/Main/Unit2.fmx @@ -0,0 +1,735 @@ +object Form2: TForm2 + Tag = 42 + Left = 0 + Top = 0 + BorderStyle = bsSingle + Caption = 'FastReport for Firemonkey' + ClientHeight = 561 + ClientWidth = 567 + OnCreate = FormCreate + object ToolBar1: TToolBar + Align = alMostTop + Height = 67.000000000000000000 + Width = 567.000000000000000000 + object Image1: TImage + Bitmap.PNG = { + 89504E470D0A1A0A0000000D4948445200000040000000400806000000AA6971 + DE000013E249444154785EE55B7950D675B767154410455C90555476D9641511 + 01C17D4DC50541710BCD5D7349DC454184877D5F15DCC8356DBDDD32D3D79A6E + B7A96E534DDDA6E9BE4DF76D6A6A7AFFFEDCF3F9C2030F28CFEFC19CE91D6F33 + 6734447CCEE77BBEE77CCEE79CAFB9999919C4FE5FFF4700909090A06CCA9429 + 5D161F1F0FBD4D9E3C197A8B8B8B83B2499330A9D3626363418B898951161D1D + DD65515151A04546462A8B8888503671E2444C0C0F47B858585898B2D0D05065 + 212121CA828383954D983001414141CA0203039505040420C0DF1FFE627E7E7E + CA7C7D7DE1EBE3031FB1F1E3C72B1B376E1CC68D1D8BB162DEDEDECA3A0F5E1D + 7E97F3393939A01D3C78102FBDF492B203070E60FFFEFDCAF6EDDB87BD7BF7E2 + C5175FC49E3D7B94EDDEBD1BBB76EDC2CE9D3BB163C70E6CDFBE1DDBB66DC3D6 + AD5B956DD9B2052FBCF002366FDE8C4D9B36213B3B1BCF3FFF3C366EDC880DEB + D763DDBA7558BB762DB2B2B2B066CD1AAC5EBD1A999999C8C8C8C0AA55AB909E + 9E8E952B5660F9F2E558B66C19D2D2D2B074E9522C59B2048B9F7B0E8B162DC2 + C2850BB160C102CC9F3F1FF3E6CEC59C3973307BF66CCC9A350B3367CEC48CE9 + D3919A9A8A9494144C9B360D63C68C819797971E840E00F4CEBFF1C61BA0BDFE + FAEB78EDB5D770E7CE1DDCBE7D1BAFBCF20A6EDDBA859B376FE2FAF5EBB876ED + 1AAE5EBD8A975F7E1957AE5CC1E5CB9771E9D2255CB870016D6D6D683DDF8A73 + E7CEA1A5A5054D4D4D686C6C447D7D3DEAEAEA50535383EAAA2A545656A2BCBC + 1C656565282929814EA743515111CE9E3D8B3367CE203F3F1FA74F9F466E6E2E + 4E9E3881E3C78FE3E8D1A3387CF8300E751E140F8807A30EA5F33078103C0405 + 3E81CFDEA440DFB06103929392919898D81300863D0178F3CD3795F3FFFCE73F + F1C71F7FE0F7DF7FC76FBFFD865F7FFD15BFFCF20B7EFEF967FCE37FFF819F7E + FA093FFEF823FEFE3F7FC70F3FFC80EFBFFF1EDF7DF71DBEFDF65B7CF3CD37F8 + FAEBAFF1E5975FE28B2FBEC0E79F7F8E4F3FFD149F7CF2093EFEF8637CF4D147 + F8F0C30FF1F0E1433CB87F1FF7EEDDC3DDBB77F1CE3BEFE0EDB7DFC65BF21908 + FEABAFBEAA80BFD50938C16E17A0F520B79E3FDF052E81ADADAD55A056545428 + 408B8B8B3BC02C28E800F2D429156D8CB4A953A7C2D3D3B33B020800C3FE5976 + FEE4C993387EEC38D6C81563C4F709C0B378F27AE78F1C3982CC8C4C95E43D3C + 3C7A4600131E43EF590B7B43E70F1D3AA4126BBC54347777F76E0058EA080093 + DEB374E77B3B7F507C5CB972A52AE18F00C06CFA9A249E6725E13DCE79967296 + 5372173737B79E11400098799F856CDF97F37BA554924790B0B9B91A00408647 + 7458F3B54ADD7F4BA9FBFAABAF5579FBECB3CFE4D7FF7ABAA5AEBDBD83535CBC + A8F804B9047984A9A5CE98F3246D4B8540C544C7C0D5D5B53B020800C904EBAE + 569DFFEACBAF70FFFD0758B16C0D621366C03F3C0EE38327C12B301A1EFE9170 + F7FB73E6217F7FB8BB1F46B98D836E6636DA845091449952E7B59CDFB9632716 + 2F5EAC68F9E8D1A30D0090A4B04F282ED99E16C9F9F83FFE13AB3336C2D36B3C + 06DA39C0CA7A002C2C2C61666E6EC8AFFFDCEFE567595BDB2036663A6ED5B6A3 + B9A959484EB55192638AF36487A4CEEC477A00C0AC488E4FD6A5C5F01EFCED21 + 52662E8483A313CC2D2CFE9CA31D9DE863CDDCDC022EC35D51B3E3145A1A9A50 + 6984E199EA3CA9F142E919D888B9B8B8744700012097BE71E38626BDBDFFE06F + 989A3A1776F68E4FF7D47B01C1A87273F144F5CEE368AA6B40791FF4B63FCE6F + 96668C0D13BB5097510600B02CB0B36393A3C5EDDFBFFF000929730480C182A0 + 76D89BCBF7585A5829A353E6468C7F6E25DF676B650BA7C1CE488E9F89D6AA66 + D4D7D6A966A937B7EFAFF36C88E64AB7C8F67BD4A851DD1140009821D9E16935 + 36EFDD7B5F0130709036007428306C0A0A8266A33166291AA297A0294A2C2015 + CDBDAC31603E1AC46A03E7A12C2805C5D1F3D05ED18CA6DA0609FF4A144BA758 + D8D925B2437C12E7D97EB355A6EE3072E4C86E005817D9D3B3B5D5EAEAEEBD7F + 1F714933616B67AF71FFCDE1347C344E6D9726EBCA75BC7EE755DC91247BE3FA + 0DF5EFB0D4B17536ECEA1A1B1AD020C65F5BEA1B70BEA21A0D053A541514A1EA + AC98AE0465BA629CC9CBC709698DC9ED496FC9F058C659E77990CCF6FA769861 + AF5A61719EBAC36CD10828B83C0A80081AED5283B55ADA079203A2E25330C0D6 + CE2800169696080B8FC7AD76713EAF022D113351EB14885AC700D43AF8A17690 + EFE3CD5EFE6CB03F6A9C8250352C001523C351E51E83E6E839B8BE250737734B + 509E9B8793478FF5DB790A2E1448A8348D1831A2670450D1A1B0A1D5CF3FFCE0 + 0384444F85D5001BA300585A5921227C325EB92AE249C64E543887A0D8CC456C + 1474261ABF57FD1D0B7794D878A3D22918B5DE71684C5D86B3874418399863F2 + C9D3F94C519966CC98A124B61E0050C3A38A42B1414BCC78F8F00304454C81A5 + D5000D00AC112500DCBCFC32AEA56D4599FD78931DEF1B2001C3D20D2583C6A3 + C2230A270F1FC17E21705A61AF779EF2DA7491C6A82F0E1F3EBC3B020800B5BC + 8B423FB5941C5E814093001880293129B871E52A6E67E7A07A7838CAAC3D512A + 0E949A8F96937515F356562ABFE7D7D4D7CD5D34812A327343E18031A81F1329 + 5170504961DB3B25B0DE77DED0F915A22D52179C20C26A0F00A8E03269907B6B + C958F7A40A04456A47007340F084685CBFF232DEAE388F8BD3B3702176312EC5 + A5E1F2A434B44F598BEBD33729BB363D1BD76667E36A4A16CE0724A1C4DACD24 + 107403C7A12D6B17725EDC8BAD4272B49C5F268D1045512ACBC39D9DBB238000 + 50C16D6D6DD56C6CEEDE7DCFA42B408E3074C8701C9BBF168DA5D5385FD380CB + 6D2298B6B6A1B9596ABBE8781DE268B5B21AB15AB186CA6A5C885F009D95A736 + 08969EA81A3F19B92F1EC00E89E06C836CDFFBE4E93C95E4E4A42425A93B1B02 + C0E68034919D979680F9EEBB77112077DBD2CA5A93065B0A557612104242E210 + 169988E08909080A9F82A0D029F00D884660A8FC3F2D2C01C1C217326665E246 + 590BEAA5DCE90679A3D0CCDD2808459220CB24B9D6AFDF8D97B6EF52523B4B5D + 5FCE3F27323A15E14099273C0200B57B4AD8DAEAEDBBF00D8D8385A59526008A + E74B63C3EFA599CBB550FD031BA72EB3505FB792E6C7CDC9050533D6A23AEF2C + 748E3E028076C528B597723A63050E6EDE86F552EB8D39CF3E808A30072ACEC3 + 86755F0176471C5CB0EFD696AEFF1D3EA1934C07C048C3D3BB11721EE880DCE4 + 7454E6E64337C4CF24004AACBD501D94883DD99BB156246F963A667B263C7DD8 + F3E4E9FCFC79F3902082282749C37A03C0A90DFB6E4DDDFEADB7E017D68F08E8 + 0700C30580D3720DCA4F9C469163A000E0AA99074AACDC503936063B3766ABA9 + 9231E74983A97F7284D60300B6871C593131690D2D289C064E8C372907F4D5EA + F6F57502909B9486D263B9D00D66046897C412298735C1D3B063C3F3C810C5B7 + AF93A7F31C954D96CED74FE687C39C9CBAAF0001205FE6D84A6B6273FBF69D4E + 008C1321E3CEEBBBC88E5CC0BCC0A4EA32C419A79357A2F8B80060CF1CE0A111 + 0192041DFCD1342753226013D245F17D5CD8EB9DE78C908D9FAF8F2F9C0C0160 + 7FCC0CCAB2A435AEA26A646A152008E6E2A0BD5402A751EE70161BE1EA85116E + 6331D27D1C467AF8C0C5D317AE5EBEF0F0F693FB390BAD27CA512C5C5F673706 + 455A57C0DC0DE5238351BF4188D0FAE795E2CB526778E70D9D4F1512142BA48F + 93E34700E0E0B0BABA5A7B562703525F1393204FF6A4DF1CD40AB035D56252E7 + ABA4B5AD2CAF1081A31CA525A528299692572843D18242E8C4CACE14E25AD63E + E86C4C0040FA83DA094938B86133D665AE51536363CE272727AB913D47E63D00 + A040C012C269ADD6A0F2C68D9BF00931AD0A04452429C7EBAB6AF07A411DDEC8 + 975FF3ABF196AE11EF56B5E1BDFA76BC5B7309FF567E1E6F9634E2D59365B830 + 7D85F40D3E4289471BE700961E281936010D593BB0356B3DD24C709E1C204A2A + DE78D917183A7468770E20009C9C72B2AA39A515D1C4A40890D0CF4AC91000AA + D19E9E8DDAA024D40BCD6D084C46BD7F126AC7C6A3DA33163563E250EB93803A + DF4454BB47A3549C2FB230E6BC2446AB315226035197BC1C7BD66EC49AF4559A + 274FE7391465BEE3C20401E0F5540B125448C8A0A8BB698DA82F5FBE027F5506 + 8D33418A9ACBA6A52B7A7B69C13A548E0C418970F7629BB1D0597B4367E9258E + D23CBB7F3567D23392F9E5CEF36794B946A1227129B6676DC0CAE52BD4A284BE + CEF7BEF30C7BBDF3F193E3951EC84D914700E0DCBCB4B454633EDF8EB60B1725 + 09C6699641DEFF9504A0A20A171767CB69C7A0DCD10F65D2CAB2B72FB624CDE5 + 49D361BDF5CDFC4AACDD51EE1C880AB9F395CBB3B13B6B235629E7179BEC3C57 + 7AC2E5B0C77AF70280121129248547ADE58456696618015ABD00C5CF15492B51 + 595A8EF65D47D13C75319A2267A1313445C27F12CA1C7D250A3CB4333D4511C9 + 074D63E2D1BC6A0B8E6465E385D56B91B1321D4B64C8B170C142C5F0B44E9ECE + B302D057EE08F588000580B0286E55686D669C97498D7FD8241300B04072CC4C + E88A74A83CABC3A5C3F9B8BCE7182E6DCF41DBBA9DA88B988162213B45D2D1B1 + BF37AA1259B8A16DD212E46DD886ED72E75748B9E38487BB41FD713E5A9ABE10 + 5183BC654788005874CC35CC9446461A49D9D9E85A8AB4CB2D2DE74C03407200 + 01E0AE4FDEA9D3D0E517A02CFF2C4A4FE5A3E8C8099CDD7710755173D0129882 + 420B6DC253623B1E8D89CBB14D32FE8AB4654FE47CA42440AA415C927A04006E + 661516161ADDC93927DD62434363670E30CE049904D384D5E59DCE538B4D4744 + BE3A7CE8307244C139B05F36CF44C43820D3A87DA2E4B6FA4FD56E7C2401164B + 026C929FB93E63359E5BB8C8E4B0E7C9D379AEE4050506A905A94700E05A1AB7 + B3381C31B6905423438AA0899355FB6A8CEE1280D52999C83D99DB4BBDDDDBA1 + E189084B196BEB96AD6A8DAED92D422241E32A502E1BE08D7309CBB17C699A02 + 40ADC009C3EB9DEDF577DED0F930B9EA6C85B91FD40300AAA404A04036AA8C39 + 4FCDBE4A884D70643C06D80C340E80DCAF8589696AB5CD24DD5E9868B35BBCCA + 07C67282D203256FB4C5CA7EA0B4B804605AAF52D797F3BCFFFED209723F68C8 + 9021DD398000707786EB64C656D1EA6415AD4A24ABC9712918EC4022D1F77094 + 53A1900971387AE468BFA46B150966A4C17D478302C9C205CDC189583C7F0152 + A7A560AA901CB6BAC69CA718CA4D52AEC7F4008089817D745E5E9EF13D3C6175 + D552D70FA66F41A0A70F1CEC87C0DAC60E96D6B6A2EA50F1B1EE9CFD59C16680 + 1DB6FA24E358CE61932636864A4EBD73B8666560A758288CB0D83302CBE7CC43 + 4A62926A7559EA7A873D4F9ECE530AF3913E80EB318E8E8EDD114000B83C744A + 96097B8FAB7A6F66A84646C655BBE66722363A117EA1B1181B140D4F598EE072 + 031724B828E1273AE0C99D393822D9BE3FBABDBE9F6F76099353264F3096175C + 5038D01385A1D3903E67011213A6AA66479FF078E70D9DF7F7F3979DE171701D + ED0AC7C183BB01A04CCC7F980347AD0D4C92A512A9ED4567649D358FEBAC6232 + ABE33AEBB163C73AD658655E7728E710720EE4E0A57DFB8DCEEA8C69780DCEB1 + DAD5411865A94B280A1665615EEA0CD5EC30DB3FCE79863F49D068D90D18DC1B + 002E223361E9777B8DEFE488F3FA3D5E6E603EE1A0524BC024C969183AC13808 + 2C8F3273CC9FB90CB3935314D7EFCB79B6C12C811C8D3B383874470075726E4F + B15E3FCD852463535A539CD7D3DB16B738B90A231E658B52160BA54738EB1A8C + B929A9B2FC146DD479AECC7B4A05E05CD07ED0A0EE6E90B5914A0A43F7696D63 + 3D2DE7F5ABEEF58C04039E502C2D7391AD278AA59DE6C9C708D96157DBFBCE33 + ECD59B01BE151006E82E099053213B3BBB6E0028135349E1C2F4D3DAC6EA6B3E + DF9F93D7931CD6798EB46A46468816E08512DBB1281BE68FD2D8F95890324392 + B19CBC09CE7B797A49021CAD04D18103BB788C999289D95870C9406BE5FC4937 + 33B426365AFDFC54C9F0D385F1D544CE4739FB87059958953A1B936362558BAB + 75F2749E04C845EEFF502141B6B6B6DD8A1001E0F21017A58CEDDBFF55CE53C9 + A1984163BD9F9B321D739353911037599C0F37D97986FF48B9FF2C813603BA7A + 1933C58EF8D464B7ACC9F4F5D8E0AF76BE8BE149B8B3D4454C8C3039EC79F274 + 9EF59FF79F156080210094899971B924F1B89716FF32CE1B7475C64A9D3EE1E9 + C35EEF3CEB3FEFFF20A900D6D65D929E99CA929C9A6C9311F9D35845D32F243D + 49C233B5AB33F5CE1B3A3F4A36C3D805B20258CB0A8FFEC9A00280CB436C4B0D + DFD83C4B274FE759FF87480F602715C0CA1000CAC42C391C90EA1F183D8BCEF3 + FE33010EB4ED0D809004BEABE37C90AFAB9E55E7391166026409B4949D84AE2B + 409D9CCB431C8F7140C2D7554FB284F8AF78E719F63C79BDF3F6F6F6B0B1B1E9 + 09003B24322D3E2A542F3857CB4E1D5F6FEA5F6E4AABAC7FB9A97FB549E6B8A8 + F3C5E63C695AE676BED6347CA9D9F1339390285B19AA9653B0909E7D52E7135B + AEE6A827B49DDD1B851976A6A4E6E426EAF9AB5C4FF5E4B5F3B527B93C050DF6 + F46475DCFA6673C3FA3E4256DFB8FA42679D863A29C2C33BCFB0E7C9EB9DB791 + 1DC71E114000A8947282C21512FD1B627E603EA6501F9ABA7AE7078F8EEAA8C5 + ECBB23A4FBD2BFFDD5BFF9357CEBAB7FE34B298A7C43FFA6977987038A2EC744 + A7F3789C639DC98B6B6D7AE758CA9C249B2B07C5286EB0BDA5930E72C2F683EC + 55A963B667C2E39D67D8F3E4F5CE737FA9EB0AF0376C1369140C698A3CC807D2 + A3AD10976726343E36604DD5A3AF4E403E288D21A7C24E3EB0FE43731F479D0A + 3FB8184B118D1F5E9D50A7037A277852343AD1E5883843FEAE4C9CA1435D4E89 + 632436CAE401076BBC32C9F4CCF6349E789719BE73E81C109AB6F0D48F7597FE + 6E87FC55DFFF7F099F2797677AC83B0000000049454E44AE426082} + Height = 50.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 8.000000000000000000 + Width = 50.000000000000000000 + end + object Lb1: TLabel + Font.Family = 'Tahoma' + Font.Size = 14.000000000000000000 + Font.Style = [fsBold] + Height = 25.000000000000000000 + Position.X = 64.000000000000000000 + Position.Y = 13.000000000000000000 + Text = 'FastReport for FireMonkey' + Width = 209.000000000000000000 + end + object Label6: TLabel + Cursor = crHandPoint + Font.Family = 'Arial' + Font.Style = [fsItalic] + Height = 15.000000000000000000 + HitTest = True + Position.X = 64.000000000000000000 + Position.Y = 37.000000000000000000 + StyleLookup = 'Label6Style1' + Text = 'www.fast-report.com' + Width = 129.000000000000000000 + OnClick = Label6Click + end + end + object TreeView1: TTreeView + Align = alLeft + Height = 494.000000000000000000 + Position.Y = 67.000000000000000000 + UseSmallScrollBars = True + Width = 217.000000000000000000 + OnChange = TreeView1Change + object TreeViewItem1: TTreeViewItem + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Text = 'Basic reports' + Width = 213.000000000000000000 + object TreeViewItem6: TTreeViewItem + Tag = 1 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 95.000000000000000000 + Text = 'Simple list' + Width = 175.000000000000000000 + end + object TreeViewItem5: TTreeViewItem + Tag = 2 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 76.000000000000000000 + Text = 'Simple group' + Width = 175.000000000000000000 + end + object TreeViewItem3: TTreeViewItem + Tag = 3 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 38.000000000000000000 + Text = 'Nested group' + Width = 175.000000000000000000 + end + object TreeViewItem4: TTreeViewItem + Tag = 4 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 57.000000000000000000 + Text = 'Master-Detail-SubDetail' + Width = 175.000000000000000000 + end + object TreeViewItem2: TTreeViewItem + Tag = 5 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 19.000000000000000000 + Text = 'Master-Detail-Detail' + Width = 175.000000000000000000 + end + object UnicodeI: TTreeViewItem + Tag = 6 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 56.000000000000000000 + Position.Y = 56.000000000000000000 + Text = 'Multi-column list' + Width = 175.000000000000000000 + end + object TreeViewItem7: TTreeViewItem + Tag = 7 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Multi-column band' + Width = 50.000000000000000000 + end + object TreeViewItem8: TTreeViewItem + Tag = 8 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Memos and pictures' + Width = 50.000000000000000000 + end + object TreeViewItem9: TTreeViewItem + Tag = 9 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Split bands' + Width = 50.000000000000000000 + end + object TreeViewItem10: TTreeViewItem + Tag = 10 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Subreports' + Width = 50.000000000000000000 + end + object TreeViewItem11: TTreeViewItem + Tag = 11 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Side-by-side subreports' + Width = 50.000000000000000000 + end + object TreeViewItem12: TTreeViewItem + Tag = 12 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Report with title page' + Width = 50.000000000000000000 + end + object TreeViewItem13: TTreeViewItem + Tag = 13 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Interactive report' + Width = 50.000000000000000000 + end + object Charts: TTreeViewItem + Tag = 24 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Charts' + Width = 50.000000000000000000 + end + end + object TreeViewItem14: TTreeViewItem + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.Y = 19.000000000000000000 + StyleLookup = 'UnicodeIStyle1' + Text = 'Cross Tabs' + Width = 213.000000000000000000 + object TreeViewItem15: TTreeViewItem + Tag = 61 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'No Rows' + Width = 50.000000000000000000 + end + object TreeViewItem16: TTreeViewItem + Tag = 62 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'No columns' + Width = 50.000000000000000000 + end + object TreeViewItem17: TTreeViewItem + Tag = 63 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'One row, one column' + Width = 50.000000000000000000 + end + object TreeViewItem18: TTreeViewItem + Tag = 65 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Two rows, one column' + Width = 50.000000000000000000 + end + object TreeViewItem19: TTreeViewItem + Tag = 66 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Two columns, one row' + Width = 50.000000000000000000 + end + object TreeViewItem20: TTreeViewItem + Tag = 67 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Two cell values' + Width = 50.000000000000000000 + end + object TreeViewItem21: TTreeViewItem + Tag = 68 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Highlight' + Width = 50.000000000000000000 + end + object TreeViewItem22: TTreeViewItem + Tag = 69 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Alternate column each row' + Width = 50.000000000000000000 + end + object TreeViewItem24: TTreeViewItem + Tag = 60 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Cross from non-DB data' + Width = 50.000000000000000000 + end + object TreeViewItem25: TTreeViewItem + Tag = 70 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Old-style cross tab' + Width = 50.000000000000000000 + end + object TreeViewItem26: TTreeViewItem + Tag = 71 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Calendar' + Width = 50.000000000000000000 + end + object TreeViewItem27: TTreeViewItem + Tag = 73 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Expressions in the cross' + Width = 50.000000000000000000 + end + object TreeViewItem28: TTreeViewItem + Tag = 64 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Objects inside the cross' + Width = 50.000000000000000000 + end + object TreeViewItem51: TTreeViewItem + Tag = 101 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Crosstab features' + Width = 50.000000000000000000 + end + end + object TreeViewItem31: TTreeViewItem + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.Y = 38.000000000000000000 + StyleLookup = 'UnicodeIStyle1' + Text = 'Dialogs and script' + Width = 213.000000000000000000 + object TreeViewItem32: TTreeViewItem + Tag = 41 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Hello Fast Report' + Width = 50.000000000000000000 + end + object TreeViewItem33: TTreeViewItem + Tag = 42 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Ask for parameters' + Width = 50.000000000000000000 + end + object TreeViewItem34: TTreeViewItem + Tag = 43 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Controls and events' + Width = 50.000000000000000000 + end + end + object TreeViewItem23: TTreeViewItem + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.Y = 57.000000000000000000 + StyleLookup = 'UnicodeIStyle1' + Text = 'Other features' + Width = 213.000000000000000000 + object TreeViewItem30: TTreeViewItem + Tag = 31 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Rotation, fills and shapes' + Width = 50.000000000000000000 + end + object TreeViewItem39: TTreeViewItem + Tag = 32 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'HTML tags' + Width = 50.000000000000000000 + end + object TreeViewItem40: TTreeViewItem + Tag = 33 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Keep group together' + Width = 50.000000000000000000 + end + object TreeViewItem41: TTreeViewItem + Tag = 34 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Preview outline' + Width = 50.000000000000000000 + end + object TreeViewItem42: TTreeViewItem + Tag = 35 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'URLs, Anchors' + Width = 50.000000000000000000 + end + object TreeViewItem43: TTreeViewItem + Tag = 36 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Unicode' + Width = 50.000000000000000000 + end + object TreeViewItem47: TTreeViewItem + Tag = 93 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Endlesspage height' + Width = 50.000000000000000000 + end + object TreeViewItem48: TTreeViewItem + Tag = 94 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Endlesspage width and height' + Width = 50.000000000000000000 + end + object TreeViewItem49: TTreeViewItem + Tag = 97 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Drill-down groups' + Width = 50.000000000000000000 + end + object TreeViewItem50: TTreeViewItem + Tag = 98 + Height = 19.000000000000000000 + IsChecked = False + IsExpanded = False + IsSelected = False + Position.X = 5000.000000000000000000 + Position.Y = 5000.000000000000000000 + Text = 'Drill-down nested groups' + Width = 50.000000000000000000 + end + end + end + object Panel3: TPanel + Align = alClient + Height = 494.000000000000000000 + Position.X = 217.000000000000000000 + Position.Y = 67.000000000000000000 + Width = 350.000000000000000000 + object btnPreview: TButton + DisableFocusEffect = False + Height = 22.000000000000000000 + Position.X = 256.000000000000000000 + Position.Y = 456.000000000000000000 + Text = 'Preview' + Width = 80.000000000000000000 + OnClick = btnPreviewClick + end + object btnDesign: TButton + DisableFocusEffect = False + Height = 22.000000000000000000 + Position.X = 169.000000000000000000 + Position.Y = 456.000000000000000000 + Text = 'Design' + Width = 80.000000000000000000 + OnClick = btnDesignClick + end + object Label2: TLabel + Height = 425.000000000000000000 + Position.X = 16.000000000000000000 + Position.Y = 16.000000000000000000 + VertTextAlign = taLeading + Width = 321.000000000000000000 + end + end +end diff --git a/Demos/Main/Unit2.pas b/Demos/Main/Unit2.pas new file mode 100644 index 0000000..2df5402 --- /dev/null +++ b/Demos/Main/Unit2.pas @@ -0,0 +1,217 @@ +unit Unit2; + +interface + +uses + System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, + FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, + FMX.Layouts, FMX.ExtCtrls, FMX.TreeView, FMX.Edit, + FMX.frxClass, FMX.frxDesgn, FMX.frxCross, + {$IFDEF LINUX} + {$I tee.inc} + {$IFDEF TeeChartPro} + FMX.frxChart, + {$ENDIF} + {$ELSE} + FMX.frxChart, + {$ENDIF} + FMX.frxGradient, + FMX.frxExportText, FMX.frxExportHTML, FMX.frxExportImage, FMX.frxExportXML, FMX.frxExportCSV, FMX.frxExportPDF, + FMX.frxExportRTF, FMX.frxExportODF, + FMX.ConverterFR3toFRFMX, FMX.frxChBox +{$IFDEF VER250} + ,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER260} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER270} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER280} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER290} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER300} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER310} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER320} +, FMX.Graphics +,FMX.StdCtrls +{$ENDIF} +{$IFDEF VER330} +, FMX.Graphics +,FMX.StdCtrls, FMX.Controls.Presentation +{$ENDIF} +{$IFDEF VER340} +, FMX.Graphics +,FMX.StdCtrls, FMX.Controls.Presentation +{$ENDIF} +{$IFDEF VER350} +, FMX.Graphics +,FMX.StdCtrls, FMX.Controls.Presentation +{$ENDIF} + {$IFDEF MSWINDOWS} + , Winapi.ShellAPI, Winapi.Windows + {$ENDIF} + {$IFDEF MACOS} + , Posix.Stdlib +{$ENDIF} +{$IFDEF LINUX} + , FMUX.Api +{$ENDIF}, FMX.frxBarcode, FMX.frxBarcode2DView; + +type + + TForm2 = class(TForm) + ToolBar1: TToolBar; + TreeView1: TTreeView; + UnicodeI: TTreeViewItem; + TreeViewItem2: TTreeViewItem; + TreeViewItem3: TTreeViewItem; + TreeViewItem4: TTreeViewItem; + TreeViewItem5: TTreeViewItem; + TreeViewItem6: TTreeViewItem; + Image1: TImage; + Lb1: TLabel; + TreeViewItem1: TTreeViewItem; + Label2: TLabel; + btnPreview: TButton; + TreeViewItem7: TTreeViewItem; + TreeViewItem8: TTreeViewItem; + TreeViewItem9: TTreeViewItem; + TreeViewItem10: TTreeViewItem; + TreeViewItem11: TTreeViewItem; + TreeViewItem12: TTreeViewItem; + TreeViewItem13: TTreeViewItem; + TreeViewItem14: TTreeViewItem; + TreeViewItem15: TTreeViewItem; + TreeViewItem16: TTreeViewItem; + TreeViewItem17: TTreeViewItem; + TreeViewItem18: TTreeViewItem; + TreeViewItem19: TTreeViewItem; + TreeViewItem20: TTreeViewItem; + TreeViewItem21: TTreeViewItem; + TreeViewItem22: TTreeViewItem; + TreeViewItem24: TTreeViewItem; + TreeViewItem25: TTreeViewItem; + TreeViewItem26: TTreeViewItem; + TreeViewItem27: TTreeViewItem; + TreeViewItem28: TTreeViewItem; + Charts: TTreeViewItem; + TreeViewItem31: TTreeViewItem; + TreeViewItem32: TTreeViewItem; + TreeViewItem33: TTreeViewItem; + TreeViewItem34: TTreeViewItem; + TreeViewItem47: TTreeViewItem; + TreeViewItem48: TTreeViewItem; + TreeViewItem49: TTreeViewItem; + TreeViewItem50: TTreeViewItem; + TreeViewItem51: TTreeViewItem; + Panel3: TPanel; + TreeViewItem23: TTreeViewItem; + TreeViewItem30: TTreeViewItem; + TreeViewItem39: TTreeViewItem; + TreeViewItem40: TTreeViewItem; + TreeViewItem41: TTreeViewItem; + TreeViewItem42: TTreeViewItem; + TreeViewItem43: TTreeViewItem; + Label6: TLabel; + btnDesign: TButton; + procedure FormCreate(Sender: TObject); + procedure TreeView1Change(Sender: TObject); + procedure Label6Click(Sender: TObject); + procedure btnDesignClick(Sender: TObject); + procedure btnPreviewClick(Sender: TObject); + private + FReport: TfrxReport; + FTXTExport: TfrxSimpleTextExport; + FHTMLExport: TfrxHTMLExport; + FJPEGExport: TfrxJPEGExport; + FTfrxGIFExport: TfrxGIFExport; + FPNGExport: TfrxPNGExport; + FTIFFExport: TfrxTIFFExport; + FBMPExport: TfrxBMPExport; + FXMLExport: TfrxXMLExport; + FRTFExport: TfrxRTFExport; + FPDFExport: TfrxPDFExport; + FCSVExport: TfrxCSVExport; + FAppDir: String; + { Private declarations } + public + { Public declarations } + end; + +var + Form2: TForm2; + +implementation + +{$R *.fmx} + +procedure TForm2.FormCreate(Sender: TObject); +begin + FAppDir := ExtractFilePath(ParamStr(0)); + FReport := TfrxReport.Create(Self); + + FTXTExport := TfrxSimpleTextExport.Create(Self); + FHTMLExport := TfrxHTMLExport.Create(Self); + FJPEGExport := TfrxJPEGExport.Create(Self); + FTfrxGIFExport := TfrxGIFExport.Create(Self); + FPNGExport := TfrxPNGExport.Create(Self); + FTIFFExport := TfrxTIFFExport.Create(Self); + FBMPExport := TfrxBMPExport.Create(Self); + FXMLExport := TfrxXMLExport.Create(Self); + FRTFExport := TfrxRTFExport.Create(Self); + FPDFExport := TfrxPDFExport.Create(Self); + FCSVExport := TfrxCSVExport.Create(Self); + TfrxODTExport.Create(Self); + TfrxODSExport.Create(Self); + TreeView1.ExpandAll; + TreeView1.Selected := TreeView1.Items[0].Items[0]; +end; + +procedure TForm2.btnDesignClick(Sender: TObject); +begin + FReport.DesignReport; +end; + +procedure TForm2.btnPreviewClick(Sender: TObject); +begin + FReport.ShowReport; +end; + +procedure TForm2.TreeView1Change(Sender: TObject); +begin + if not FReport.LoadFromFile(FAppDir + PathDelim + IntToStr(TreeView1.Selected.Tag) + '.fr3') then + FReport.LoadFromFile(FAppDir + PathDelim + IntToStr(TreeView1.Selected.Tag) + '.FR3'); + Label2.Text := FReport.ReportOptions.Description.Text; + FReport.Script.AddVariable('wPath', 'String', FAppDir{ + PathDelim}); +end; + +procedure TForm2.Label6Click(Sender: TObject); +begin +{$IFDEF MSWINDOWS} + ShellExecute(0, 'open', PChar('http://www.fast-report.com'), '', '', SW_SHOWNORMAL); +{$ENDIF} +{$IFDEF LINUX} + FmuxOpenUrl(PChar('http://www.fast-report.com')); +{$ENDIF} +{$IFDEF MACOS} + _system(PAnsiChar('open ' + AnsiString('http://www.fast-report.com'))); +{$ENDIF} + +end; + +end. \ No newline at end of file diff --git a/Demos/Main/Unit2.vlb b/Demos/Main/Unit2.vlb new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Demos/Main/Unit2.vlb @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Demos/Main/Unit3.dfm b/Demos/Main/Unit3.dfm new file mode 100644 index 0000000..34feacd --- /dev/null +++ b/Demos/Main/Unit3.dfm @@ -0,0 +1,128 @@ +object DataModule3: TDataModule3 + OldCreateOrder = False + OnCreate = DataModuleCreate + Height = 407 + Width = 580 + object CDBio: TClientDataSet + Aggregates = <> + Params = <> + Left = 24 + Top = 16 + end + object CDCust: TClientDataSet + Aggregates = <> + FieldDefs = <> + IndexDefs = <> + IndexFieldNames = 'Company' + Params = <> + StoreDefs = True + Left = 504 + Top = 16 + end + object CDCross: TClientDataSet + Aggregates = <> + Params = <> + Left = 120 + Top = 16 + end + object CDUnicode: TClientDataSet + Aggregates = <> + Params = <> + Left = 168 + Top = 16 + end + object CDCountry: TClientDataSet + Aggregates = <> + IndexFieldNames = 'Continent' + Params = <> + Left = 312 + Top = 208 + end + object CDCurQuote: TClientDataSet + Aggregates = <> + Params = <> + Left = 72 + Top = 88 + end + object CDCustQuery: TClientDataSet + Aggregates = <> + Params = <> + Left = 400 + Top = 16 + end + object CDEmpl: TClientDataSet + Aggregates = <> + Params = <> + Left = 144 + Top = 112 + end + object CDItems: TClientDataSet + Aggregates = <> + IndexFieldNames = 'OrderNo' + MasterFields = 'OrderNo' + MasterSource = OrdersDS + PacketRecords = 0 + Params = <> + Left = 504 + Top = 232 + end + object CDnextcust: TClientDataSet + Aggregates = <> + Params = <> + Left = 24 + Top = 168 + end + object CDnextitem: TClientDataSet + Aggregates = <> + Params = <> + Left = 80 + Top = 232 + end + object CDnextord: TClientDataSet + Aggregates = <> + Params = <> + Left = 136 + Top = 168 + end + object CDorders: TClientDataSet + Aggregates = <> + IndexFieldNames = 'CustNo' + MasterFields = 'CustNo' + MasterSource = CustDS + PacketRecords = 0 + Params = <> + Left = 504 + Top = 120 + end + object CDparts: TClientDataSet + Aggregates = <> + IndexFieldNames = 'PartNo' + MasterFields = 'PartNo' + MasterSource = ItemsDS + PacketRecords = 0 + Params = <> + Left = 504 + Top = 344 + end + object CDVendors: TClientDataSet + Aggregates = <> + Params = <> + Left = 16 + Top = 224 + end + object CustDS: TDataSource + DataSet = CDCust + Left = 504 + Top = 65 + end + object OrdersDS: TDataSource + DataSet = CDorders + Left = 504 + Top = 176 + end + object ItemsDS: TDataSource + DataSet = CDItems + Left = 504 + Top = 288 + end +end diff --git a/Demos/Main/Unit3.pas b/Demos/Main/Unit3.pas new file mode 100644 index 0000000..e415864 --- /dev/null +++ b/Demos/Main/Unit3.pas @@ -0,0 +1,147 @@ +unit Unit3; + +interface + +uses + System.SysUtils, System.Classes, Data.DB, Datasnap.DBClient, FMX.frxClass, FMX.frxDBSet; + +type + TDataModule3 = class(TDataModule) + CDBio: TClientDataSet; + CDCust: TClientDataSet; + CDCross: TClientDataSet; + CDUnicode: TClientDataSet; + CDCountry: TClientDataSet; + CDCurQuote: TClientDataSet; + CDCustQuery: TClientDataSet; + CDEmpl: TClientDataSet; + CDItems: TClientDataSet; + CDnextcust: TClientDataSet; + CDnextitem: TClientDataSet; + CDnextord: TClientDataSet; + CDorders: TClientDataSet; + CDparts: TClientDataSet; + CDVendors: TClientDataSet; + CustDS: TDataSource; + OrdersDS: TDataSource; + ItemsDS: TDataSource; + procedure DataModuleCreate(Sender: TObject); + private + FBiolife: TfrxDBDataSet; + FCustomers: TfrxDBDataSet; + FCrossTest: TfrxDBDataSet; + FUnicode: TfrxDBDataSet; + FOrders: TfrxDBDataset; + FItems: TfrxDBDataset; + FPart: TfrxDBDataset; + FSales: TfrxDBDataset; + FCountry: TfrxDBDataset; + { Private declarations } + public + { Public declarations } + end; + +var + DataModule3: TDataModule3; + +implementation + +{%CLASSGROUP 'System.Classes.TPersistent'} + +{$R *.dfm} + +procedure TDataModule3.DataModuleCreate(Sender: TObject); +var + DataPath: String; +begin + DataPath := ExtractFilePath(ParamStr(0)) + PathDelim + 'Data' + PathDelim; + FBiolife := TfrxDBDataSet.Create(Self); + FBiolife.Name := 'Biolife'; + FBiolife.UserName := 'Bio'; + CDBio.LoadFromFile(DataPath + 'biolife.xml'); + FBiolife.DataSet := CDBio; + FBiolife.FieldAliases.Delimiter := ';'; + FBiolife.FieldAliases.StrictDelimiter := True; + FBiolife.FieldAliases.DelimitedText := 'Species No=Species No;Category=Category;Common_Name=Common Name;Species Name=Species Name;Length (cm)=Length (cm);Length_In=Length In;Notes=Notes;Graphic=Graphic'; + + FCustomers := TfrxDBDataSet.Create(Self); + FCustomers.Name := 'Customers'; + FCustomers.UserName := 'Customers'; + FCustomers.FieldAliases.Delimiter := ';'; + FCustomers.FieldAliases.StrictDelimiter := True; + FCustomers.FieldAliases.DelimitedText := 'CustNo=Cust No;Company=Company;Addr1=Addr1;Addr2=Addr2;City=City;State=State;Zip=Zip;Country=Country;Phone=Phone;FAX=FAX;TaxRate=Tax Rate;Contact=Contact;LastInvoiceDate=Last Invoice Date'; + + + CDCust.LoadFromFile(DataPath + 'customer.xml'); + FCustomers.DataSet := CDCust; + + FCrossTest := TfrxDBDataSet.Create(Self); + FCrossTest.Name := 'Cross'; + FCrossTest.UserName := 'Cross'; + CDCross.LoadFromFile(DataPath + 'crosstest.xml'); + FCrossTest.DataSet := CDCross; + + FUnicode := TfrxDBDataSet.Create(Self); + + FUnicode.Name := 'Unicode'; + FUnicode.UserName := 'Unicode'; + CDUnicode.LoadFromFile(DataPath + 'unicode.xml'); + FUnicode.DataSet := CDUnicode; + + FOrders := TfrxDBDataset.Create(Self); + FOrders.Name := 'Orders'; + FOrders.UserName := 'Orders'; + CDorders.LoadFromFile(DataPath + 'orders.xml'); + FOrders.DataSet := CDorders; + FOrders.FieldAliases.Delimiter := ';'; + FOrders.FieldAliases.StrictDelimiter := True; + FOrders.FieldAliases.DelimitedText := 'OrderNo=Order No;CustNo=Cust No;CustCompany=Cust Company;SaleDate=Sale Date;ShipDate=Ship Date;EmpNo=Emp No;' + + 'ShipToContact=Ship To Contact;ShipToAddr1=Ship To Addr1;ShipToAddr2=Ship To Addr2;ShipToCity=Ship To City;ShipToState=Ship To State;ShipToZip=Ship To Zip;ShipToCountry=Ship To Country;ShipToPhone=Ship To Phone;ShipVIA=Ship VIA;'+ + 'PO=PO;Terms=Terms;PaymentMethod=Payment Method;ItemsTotal=Items Total;TaxRate=Tax Rate;Freight=Freight;AmountPaid=Amount Paid'; + + FItems := TfrxDBDataset.Create(Self); + FItems.Name := 'Items'; + FItems.UserName := 'Items'; + CDItems.LoadFromFile(DataPath + 'items.xml'); + FItems.DataSet := CDItems; + FItems.FieldAliases.Delimiter := ';'; + FItems.FieldAliases.StrictDelimiter := True; + //FItems.FieldAliases.DelimitedText := 'OrderNo=Order No;ItemNo=Item No;PartNo=Part No;PartName=Part Name;Qty=Qty;Price=Price;Discount=Discount;Total=Total;ExtendedPrice=Extended Price'; + + FPart := TfrxDBDataset.Create(Self); + FPart.Name := 'Parts'; + FPart.UserName := 'Parts'; + CDParts.LoadFromFile(DataPath + 'parts.xml'); + FPart.DataSet := CDParts; + FPart.FieldAliases.Delimiter := ';'; + FPart.FieldAliases.StrictDelimiter := True; + FPart.FieldAliases.DelimitedText := 'PartNo=Part No;VendorNo=Vendor No;Description=Description;OnHand=On Hand;OnOrder=On Order;Cost=Cost;ListPrice=List Price'; + + FSales := TfrxDBDataset.Create(Self); + FSales.Name := 'Sales'; + FSales.UserName := 'Sales'; + CDCustQuery.LoadFromFile(DataPath + 'customer_query.xml'); + FSales.DataSet := CDCustQuery; + FSales.FieldAliases.Delimiter := ';'; + FSales.FieldAliases.StrictDelimiter := True; +// FSales.FieldAliases.DelimitedText := 'CustNo=Cust No;Company=Company;Addr1=Addr1;Addr2=Addr2;City=City;State=State' + +// 'Zip=Zip;Country=Country;Phone=Phone;FAX=FAX;TaxRate=a.TaxRate;Contact=Contact' + +// 'LastInvoiceDate=LastInvoiceDate;OrderNo=Order No;CustNo=b.CustNo;SaleDate=Sale Date' + +// 'ShipDate=ShipDate;EmpNo=EmpNo;ShipToContact=ShipToContact;ShipToAddr1=ShipToAddr1' + +// 'ShipToAddr2=ShipToAddr2;ShipToCity=ShipToCity;ShipToState=ShipToState;ShipToZip=ShipToZip' + +// 'ShipToCountry=ShipToCountry;ShipToPhone=ShipToPhone;ShipVIA=ShipVIA;PO=PO;Terms=Terms' + +// 'PaymentMethod=PaymentMethod;ItemsTotal=ItemsTotal;TaxRate=b.TaxRate;Freight=Freight;AmountPaid=AmountPaid;OrderNo=c.OrderNo' + +// 'ItemNo=ItemNo;PartNo=Part No;Qty=Qty;Discount=Discount;PartNo=d.PartNo;VendorNo=VendorNo' + +// 'Description=Description;OnHand=OnHand;OnOrder=OnOrder;Cost=Cost;ListPrice=List Price'; + + + FCountry := TfrxDBDataset.Create(Self); + FCountry.Name := 'Country'; + FCountry.UserName := 'Country'; + CDCountry.LoadFromFile(DataPath + 'country.xml'); + FCountry.DataSet := CDCountry; + //FCountry.FieldAliases.Delimiter := ';'; + //FCountry.FieldAliases.DelimitedText := +end; + +end. diff --git a/Demos/Main/awards.png b/Demos/Main/awards.png new file mode 100644 index 0000000000000000000000000000000000000000..0277dd95691926a6d734fb054e0d5c6efec50d2e GIT binary patch literal 13488 zcmZv@1yoeg_clyP34(NrN=ix&F))N6k^<5oC?hR{4`UJ;9MpXs_<9Foa+fR?s=LGhO`i>YFPul+dFuNf6U2Xfm1Z~aF{qnN$-zqZo$J#fVZowa=)*#)=mHA0P(E8QP1fR(6 zF&<7pCN?4eo2SIMfhudi_*N9pwUzO~VSa{*8qY`M)qk-N6&}g*lBJkkg4+)R^33?a>Zzpk$9xNOl&l|g#2{!ADi>4XhteaF zAL-K%VKQYer@6Ln@lGP2fcUMfASQt&^0f7 zldxHM4CdcAWMWJ|gxud7ll~ahc>jqtd{q0!;lBT0^$!*9C&nI6FV(#B3-97s>o>c( z+8vEx-a4MwuqU6WN7rF9(ga3mdo*WHX$w?%VS(f~sEXWd+p~>7X@<7VQg?m8(nyZ- zB^1$$svMeKzp@;Msy6_q{`woI74^ne@kPA)`CN%y;C+iZp~LyirM|QMTMHM;f66B_ zc+^saDg1JvfVr-F;z6ZRQd{&5IQ4uw0HQt$x}wf*r5=v|9>eB^)CC69kAcKYCOL_{ z#iin3Eib0SWCuT#V}wHNF~W5iTVC-ug!I+{kQl9knLVa*R9(`30b~q>KowtAY%%ee zfyO7lt)+G8=sK#kG=J4KI-#NS{=ClHH7%XCaSqR9Tg6twZY zUYk#;i(Pcm+um)75M2aSRhUYvovImuSHCNd0;fN87qnn45gt6f*BT?7S0H!(dJw0D z=74KnpQEJLm&Si=yJXhKyMHk&6I3$7bsLyT5GSN&!aw0MH^ckbd5MhY!U zWk;@{6VWeBh`AqiMBe8VgPr4fmdyR$24GF>6t4AD?Q~&*lldS+#)#b_HHNKuR6kY9 z;4ps_E+UEGqntZ#(w78{RLCL8&VstjgInaH z#%YGH+7woJhr(aZ1~faDSPxi;Jmj_FRa+g2L2=WUKPN-Sic{(cT}9HH>(qMd$dDNl zO`f|8127+pARJNFz)O5$pq2ZU;v?fhOV$##7T%!}qS5~gxFo^U6#xGcHD}#7P&+?6 zQebLj75G`XBau=hDs&RtV!B1>5bP_jtY)gZKIVvC;Ei>ny+b z0%VxFGn2MSO2haeS&TMz7S%B>cWgI>Q2)BF%9eJfmdvDdD%|qluR|6E!x;6Xa(ELe z`W%g~T-{1J)%zvWh}rJ(pA2|*5u2Ln5;R%RNR;nnkaX_3b8P;E`d^9oKz2l{B;6MC z3-O+iipH%vNX)O-9o(XCubq|%$xhFU(3*?Aa2|JG!tj+7yJ)BtM`L*DATHeGa) z>`dW#U+$Q3EMESVAYON6LfUYwi~VAW%@W^AntXAOdhimjFLxnA%*crS4o|QFHeFiI z_kXVE&wSXFO=NB$o1-5hK)kpOb7c>VZXY-?yZhL@U^uk+FglMSfgp&*6kXEDbo|JV z1l0+uiOHR#HMID_10M(TyKiGoLmq5~*JsvgiGh-LEdL7;4%2F)K1y9goLz(5tTrwu z7ivII?AQHTtxEP--W#ucxpMG-eYN$Xa8N*X^1UlNZ^E?z%wWcc=Xy{$R0Gn+cCEab zF=i&pvL>2n@=Z^uBLSz=C~1Z3E&zahx1nFTMe{Z>8DmG|J|1nDm<4eA`s9chlAS>Z zZlZ3VdjW*jOl}d!O|8d>pV!*}ER3|Bgz86O&E<<+tXO@aC}-h;x64xj<5o)iZ#I6V(3g#TSs~V;lBrY zbA?T0i=cu=;(gFPC*EkrBWdHvodIcmw-wa)uvo%weQj)CeV3w&BHk$v=>o-)72?&7 z>PeJH)j0zA2e|E-U@rJlgjom&OVAHloBuAl=4X4ht{*p= zWnHi83*Qgl%!T>_4^PI2>Y#$Rdu)<7(-Lzc+Lu1;RQ80B9hze8S4GcFHOXbIpjZx1 ziREP~qWEBO;kBABl z3b3+Nmcx&T80jv|FVB4TRv3p|Ux&euilNv^-YQ3(|ImaNk{#iD6HZfA zFI6u%kb9qifaP#9Fvvg8+mkWucpQ+{f^oEJ#`oUBnlJE`l66KF^4BZG?-dHxeVrQI zeAk;m1HtpBSe;nSF#~T|| zm8S(AlkNbQzth& z)>74W>a^Za2q-c)6!g5-!_17r$C>XDM6aQZfZpXqSDGQ z2=rUn0TtxaDt7Cj*}L!hD9uXGiGlIfm~;*kvN1Kb)CBGey@xCB92;Gzq30T$L!CJo z9!^d{W-duZyg~au0K<~JiS?@bG!dglLv7q$eu+O0txdV+f>~CKaL5qM>>K(Gwql zU@301^la@hE}o2Y@Kh_KEZF|pGs>SFsW8wfM(aZA`cbBtxkgo=V|GRZ5D;QX@Am^W zY;YUS1;HTW!1}-)?0{=pZS9rv$(U?Ehij8e@aFeik>aMn5$+fW)QX_3M|lnH5rh+F zBfGVKISa8F7MLb%cHWHs>xDT|+b^ghCczL6H$kV>n>47Ri(`+3WLt*+*8u37**@*T zA0_EjNE&!G%G8$4h!{@N`5I`dd6ApJ;N2f!02bl9CKCR2z7up^DXV3i#)bd8eCyv> zHSqIYR%}YFp65LEWP5-~;|uo1wBP>kpMcC)2j6>*bgkEF1b{~;XMBjwq#7MQgUo=` z)s3So!%Fu9g|qWX&IC^XDMpe6h-UiM*BLlMQ&)taVCAz zYH#!0dGa59`+9)$U2oDI(Kp_}heQ29wmbWW1mk3-h&9=lQdYXZKNk;6YUOXFr9zT48PxR9o>pS>a1lQ zDy^)l%Js?`o)!Z5@UB94Tly$hqcjtym1H~K?nb$H?Bva>jvn`SHi5_w7JlY@NK3b_ zUYn{P-}USp*oHK8*%Wn9x%IEA*d7tJK?_qX z4%Lco=4)5E0>nj>=8e3p615%4sq7p!9O2t-4lGOmdI~vK7qM~;0@z_aQereagD5tz%1 zfhY$@AHXzfA!Wf_I6B^R_3l1k6RydyIEdgK;#IHO5;_%Z3|a_&%9MpgvlK$k?u`06 z9y#(qSeq+<2dU?HrcX0dWG!}pm5_nxkj%K}H{x>F8D=6`oT_&z>1%wc2VNC`NoSXe zrbO&%FX}UukDrTW9?P)e&Ao!%4a8~d_d$^f?;YFXAlKcLu7elwURRtPvUbw_A^qS`PCVxMlFkq^7&Yx& z{YmO}pr6UI7Zz806|36ZBehmOx4h)k|36q9%ODmSb0q{v>KWKIb1SHKX0b{C*N4>n z{|yb8suLJ34OChTJsZl+Q%^sb=~p>pS5FHQQ7dz?bFzM;jEgmpcDH?83@Gh$%PBzJqFvtA2Fi`hVc)KcN*WFsZ?dW`)>C-x2t z^16(VM-5;%U+Z;q{@3H8IXLw!Tj%?nv)8!P z`}0TG3Omet88rqvX(aJJl56sMAYW?ltgHNvVVA8sR>V5-)+$%w^tg{iIGr8>|c8w1xWsS8~LmyeX&0M57-OnoF`s=@+EDJRe_tzo-{?4X%eVf{)ZF zWZs)$nje|}QG~YHlNi>yov<~_Z3B@&&r8zY+`ySo@vVE81dH}Y;4`qflB?Un^C4P9 z!7&^Q_a(k8Zjs5&+2V5xLO6$CMkiMP(tu_35pE}u;nhsK2k1XIh~r+1Ok4NFzxiz) zkDb;TI5(-Ff?t9@6@m#23@d)|61PvzQbCUXn8SHQca_7>zrXNt(MtVZqUch4`KQp& zIPGyd2lYR%N!E?GJ>`{L*mCs?zey_GIvL#GRn;Bzz!F-E$Aj0J*^-~|GZsFuf8vT^ zUi3*0E!SR+ zo`Lb2 z|9=^D%WQJs7Quid;M|JpZOJRVE%$$qx_(HGop(!M~P`e+Vl~P#ScD+{BaTqS!7;}wQnyIx~M49J1NZ{o4tTDt_ zt`2xmEVWOKmF9WPgQWHiRJV6d!qZ$41iWd-?z8dmJw}K)5^<$5KPiXCvMRcM3$QYe%{^QsqAcw@k-h;;DS=2f7r_sm#_(nS%6DTI5W0oN znAkhC^yXrcMQP(=x#zo@e^0G0?HI^_Y)?;2I+SRaGZ}*VauvYewx*B=10*lb(odWE zw3cQBrS{!>Pw=6Y2WV&pNa-l}5bCIgJ|2^L#`|%}y%*gG{r1O3@79e%0G?a6m&7nt z;VVIW&!EG{YfRLGuCRta$At%Uh|!35h!xrvI2f>aG^G*?Tf2}v0g2Bw9=g3mVHt~M z!|9I#1}H}MI>vf!C&a?+vm zM_%NAUQ@yc_L7?4D6I!ML?+>TA%DQhgQMX3eDgUNWo{P6jANWOV0SWTVxm23oE8pr zy|2$9&H8`IyR1HVeC)k=bPYD4g_Q4!a#)|lg$gn|?G7#t#L$cULOsa6-Tml}Xub`q z2fkfRcIiYD_v_*X{6QMyCnKJGnilUM5#B%P&LQ$Jvdf3eZ25%UMYKU@LzchUsQDS& z9Qos;nlO&U5_+f$ZcW;pacoCJ6g;0@I6~83DXrlOz#V;6vd(g3mYJaCYmJ9Ux?u*oEl$orf2Q5x^>ikEo>mT;G9DxAb)~@HBN+Z&PvCizW1L(m zdib~!r^`--XtH_ILry87_YTgX%2UNh=GOMfro2S+Hz>ohpZ-XfBr(}LEXi27|IQ|FjMm*2JKv~|S-=_3y&jnw6l~Gc2I^7Y$h%-`B zY4D{DWR_E!U=dIHQOkOr(CF;u;+B@{ZGC4}TW3qeE1&4lbG$h`{lzgL*W|=l71r!; zpwIP~xSz`~ImJZ%@#hwiZW(jgS-&`Vt&$GFIb%)p^DJ?{C9+$Y>G4M`iBNWn(=x9u{qnvM!F!gnLu87 zuV#{GOYQj21{x)CMlDVh+ENp2*OsW%&Wy|V=5>r23g3{M-_kd5!cra^3d&btuqSQY zD3iN%!ftJsL|!NPa(AVa!VO<-{#c*5-W0@ap;W0Rxujda#4{fa!+)9$KjR`W%^x9= zD^Z_jW19Da1tlznw_|-2Pf8;~<@%Ni5s&wFa4@8zJHDU=Z39Z z2Y>4LRe#VPtZc~p@{{MTbqx*CPuxq~)X zed4IBKP7CE85{5p{rG$cHpVi>V(0aJjA#+RO>J^5V>%&|R(gE+<$pys)9Wv8k^A1Z zQO%o7yyHWM_bq=dnmiiNVwd;S2|blun=y4)5e_a0eZoI|`(|A!@hIFM_j~@E>d!9B zG_leVH@C}&-0k#xd+1cqQlN>)eB>(v#MKQtTFdkw_0C}ZxRdA56JOZ%tH`E@<;Ag6 zmcZDi8xpB!9^+Ae51G7P#>EHR9`%Uzvpy4v?q>~vycpnwwoPyT7*p);fsfUBd+T7Z7;il0v4wlz5 z!%zu2G1w*GVLytpwaj?nrwRw?{us70@2Pfw1bT4$>x!8f0q82<<60hAY&_$Ryal=M z2TN|UY{uPRp5?^|C#@MOQ4(AV3%*?kg}4z1{$a&SV%OfNS`eB7yT7YR;U$K=?@AGl zKgWk=6OWc!fjfvCUu$E8$%EY^d@IMb+;>F1= z5$j|;7K7bh@-6p>iEW?vEDxASdU^9>eq`X~I@x9BYy!tz-i>D0IC50=PNgH1xxXZi zEBC}?WV#y^#BG$t=(N%kp>~Y%8PR&!LA`1(}ZHri6_R4=;-3NGLP8YkNawP zPv5GBy1yA44$sW}p(pH^@N73-nc}eK03pGkJx(F1t4yz?v`uma$LERZVM>cj?olI} zwcF$|j*0LA(1@x~1|o6)wgxXVNOXv?qafurX(#ik?7P>Od`>bO{$hi^_u=Zpyf;v9 zUZ~u|b|F&X%-qNv{KlO~oN%~*H9U>9@ljks%mB>~5+(>9PAlkrCZFbAO0V@Z2%?hH zaCLEdQ>%-910(kBd)f|qbLx}cEoM}}yTN(-mGJU61x@2C{9~%)of$a!9DdsUEivyT z)GIlWYbcXdsULvkD+Cay zgYb%+d)Tw1WvbGJoeq7X_!dS=yv*CK=5|2$|T`yRHCWW zmRL*1_+df0%+tuM7J7>cElHB{az6z*EynC0k%7u==V(H}GQ9G>sqJv;Pu6BU)h&cE z|4j;qWzVsg+Ygorby|et)W3=v!5jRh^qn+_&og33GK1ro6ylVI!7@|?^H;_(q^&QX zO8ZTH5AKG?aMy3)tgt-@@%+CZc)dmdokGa$ZZR7+@$QXpH3SP%H zdEQxcjvr8^o0pM26XBa4x%{&{YvxX7mwlo50>Eg=k#Z?yoIe&$-EI5rnE+4Hk(&AM zHwfQ;T6)9_lRx;jdh$NsIK_Ev$Rdc zPoV)$tl)Bu31Ot$vlNCG{TgDgT1cq33JuA915%n}^H?QJNsQ&Pb$@BKr7#v>ZR_ek zf~dg~-|j9uxHW!7Q5zt`!3ROfqTfO%D9deYuEB4yUWf*0SA5=>eUu>eI(d;LK@=>i zRQ`L2ooX`|eRjll zlAqqdjtRia%2+waJ~!#$RvHFSHt(JpDgF+y032XDU%rPrW*nr6&QYQQzR*$~5Nocq zR~4^~*Xq?&I7+W}*5XDhU)*wqA1>OLCrCH)c^>T^TttnQ*X(HvElfM6ey#HYvLT6b zc5*{oKRtkU4chv&O5I2#I@;-0!cK% zPR?V*a>~Y^Ho;poJT=UWke_|lnCqA*bA?aueLi(pBvYMrvx?=bhO6m-&Xlui#0b7< zSLW6$rM-JvRVL=Z-Q8O#JQhRXI(=Y2%(gNElZpr$wk?qjNF{yf;LD4Fpek)~gQQDp>_3Zz^GJ z9RFc|sy@a#O?S<(!aYMQ_(CmiHV#1&1kj*q3$6Pmd?{*p{ptrYUs28aC{e~HSWS)l ziwJd(2IvQqTA14^3#VkUT~x~K?$4puUF;?6Ry+v)ib-|st!(>ka@WRa21K;^Wk9%& zx;v^fL0&Xj4)Di}q;$XBJ>=@}{bb5W4we9pxtezh7D#Irx|1E8CP9H-NB z-^r|f9Eg?r6nRN!b%Yzd&YF_!wtv*=TmpS9oF8{}xTZe5>44z>`G+4*T#_JjvV#E0 zLP7ucw8v@42?Oy|>{v4t(!3SHLOQd>rwZa9d(ztPLz?sQ?Z?!2wtD^m`wYt9Wx3r( zb?c))s=8v2lDdC|w6mBMe39x0QX+!ojQk^47xRHz!4YLG<^gQ%S+kp&gfuPmGC$b- z0BbaHO!yjl#K_A|OM$ae>p|9)aFNtOA0fZ+M1HgG0BH6X70Sf+CM#gfwY%!-VtK(T zGw}Ar8Gh8?@M`W_DE{8)i0!bQXljf`b^!iO?&9fqYkl8(-K=}^*bp9ono8h>v&`)y zkYYA8meX0X#60(>3#KBuIs6v4jxG!gP?S(vvUZX*p@+Qg#TCEdRYUr;w0C{uSEP%w zcSf(~;N+5!_yG_Ba|?r8QlKCLgV-SoB+e5qB+JP$O2MLalZdiMZoS}R71!UNS&9b_ z??{Q^t@M_j#lFo6J=Ss>nFfCwX-v7=;41LW8>Stw!{jlfoV)n*7v|*H_Qxt-QbnEk z+>zA7-|IBMf&IWuiHSb4O<{6x?O*pb$%AH?6Vd_f2` z!^wL~EL$R$#xDLmvnWYKm7!3F*_K?_7(1K1i1Q0^n3`d{x%ucIbxAmYl4ga&vY?Vp z$0JU=g4^QJPr9(AmK144WAzj5VZ^YY?Kr&tl8sR9OY1N-sM1V`VjuGYQi$umTSQ1~ zmYiLGUJ;z%NVDc4S48Y>C7UnD_Hdn4Wng^IX{{L>t6%Q<2r7@5X&HuF#jg*ob}crE zy^ZEg*d&BjRx*MTLUxx`7fM|Z!JHp6qE)l7D{4UCFYz?jY#*C7>Cg$`&!k2bHt1*v zj58qd$=X8lC-ZRq#A~f8bhNk5ay;a24_fK(`_Ya`0?GaK(80|GF$27qYD*dTYK$Ec z0kA=?;X)?C3vSK?#k`n0A>j=BU2!u&h( z-Y$wJO;IUnucDJI8E_rAuEtiKO`Bbtwfch8caHP5s}>UPEq3qYJm5#~s}>*tzY!G< zk&Wd9-8de?*5ii`#_*utSADQ*lEATohD~sj^X_CCq09SKHx9(7X%!waJ=xDhw79X8 zeHKG$GR@=YY)dKhWU0j;op0dJNiEWhAz)2NJ5iQO0J|6bUP@3VTM3xhvIQ}g%oehT zp`%V*!8|W?7RNQ62s(;-1E{`jk5Ax8yKD|J#*M|&1MKp@b5;(i==?6Fvy3nxBu;YB z8*OvU#DsV+Q^N>ChcJKIV_>xS=$hOmC!iBWY&gyRWp~$*AOJc&V^wRIS61YnfM|fL*%2MH0Vz7&|jRYU4apjXsL_6pHwWS=i{dqh ziXeLll=)fIA;sA@^`+>3yrE=fOhKJ7Q!7!+P=Eec;*TE9Hj&U(p(F0B`eOOUij)*B zCr3sDG6NqpV!R^@i=gFzI?OM8oBnbACXHj%NE zHS+YFq@py@6MqiUO^uO9HA}?uNhi*1CX(otXGT(H)S3#YjJIVgu-fw<^@M^_z4=8_ z9$60J(o)wM-?zXYJ}{O-v3=uYb^pdcZg5`#zf=`381n6FB{&#_EI!}_dcX4rV3Ejw zAjy(ucU{3Nen!SqUeee+U@#-C$3+QK;>tB?F);V zAcyqUlXmu<)`RVt@3no7ne!Vxoap+St;}>=(2;LuDc`1Pu)3 zeB)7_y2L8_p?WW6s2GYL1=b%||2l}zE6^CvEl~ z|HJv0kHaq*nq5IdfR1@ua{=r27!ce);P61qGpT%P_(*21s4l;^36`zpl^aj1RVjd6 zs=9hIpn%}V;z@O>Su~OLcWJ~VM#rn+ALMID<9C2aA)IJyr270Yp51+7XNVA@PHn6QIrHT1iVZvheN=#K3X3@^qQzJ z>iakUv0A5ZaLsj&x!FnIc6XI(&Tj@E1VXS(-WSwM^|?)yD^BEpb5`Tmsnb~dqV#o8 z(dl<#h2+Nc)YqaUB4dy)MVTVA9D*u)Tsi?xPf6U2At)TDPZ~qB_abVxM#@br?k?r1 zKpsq2ic8D?h%4f=p^h4tRxUjo*Kn&_6b6>bhpCDVBJrlMR_B*mae%)>Ef;fC;Lea- zM!x>Su_bFE$|~1k zGl(MTzkFtSOTS2RR`uTgQJ8O2l_}OAX%gbAwf8u`<*&pe8YxUGH*2OuB5cy0laKX~ zF>e6sRs1mDk?*O1TLoZMy0;ruvcwtlinHRD@WQpW7TRQ=cZ>9>uPZ`3Q-+rO)yOPs zXjQuRdF%EeGu!65uQK)SUS#p}C$#KqW8$eJIG`cj%MUYtlE%3?^?Zm*>xfnrb#0 z;N!>S)(k#@kh!Q+=saOe-N)!n3=+#XT#dz!`UNOR;nOjW8*%CdaxsAf;m@4Enx5m3 z>zfUDo@&IrM0FDMK{gsAl)3Ywav5Gf!fXW_#J!SsHhdAwwv?SYIX<0bT#^2p=i@AZ ztXlpB_zlH2$p??)AAFve$=EBz17o@{WBya~wHL zzcp4n>(|%nG$8lv$-ikoVoLa+>doA#Q26vIxV|%bE))WndjIO`?D3P23c@K*iiJy8 zPkMsj&(K^(JVJ-Ey7UQlFo>FQr+p%^;27xnYPj+dF4kXKlZNH*Dv9>Bi?Id*t}VnB zeRrA`{s8_-eb{8NU>;m2ncIm3J3f_ueAFtR96QNI_SS&wWAu$=Ql`ORv7_aB&$!$1 zModA$>F6trB=aOkYGuo0oj*j$)Eqs(N=dgIn;1k%k``QKgQay`fBj}J`+Gk7gVI1_ z*;L-O(jq4|vmnbY;i{Hme;Y5yDwS89hG|r6L?W9IAnnmxm!Mi8n-FiCQa#DIimH2| z{ln~YIVVSxb~o~PD=DEskp~=lT1cZoaTu*xC3L~zTKUPtlc0Fw^VCoki`bf$$@i6#kR�mLO z6|T)PbEO{?&puzn4-ej0)*1)-PYhRdUZusAIJ^q$T7n#AG!63B$n&ugg`3DW;5&HSvxsEx$YgRlRyz|Y8p;1;GmGGQx9 U^a+ao$_V3~yxN;mSyR9N0}o;7DF6Tf literal 0 HcmV?d00001 diff --git a/FastReports.url b/FastReports.url new file mode 100644 index 0000000..d3c5305 --- /dev/null +++ b/FastReports.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=http://www.fast-report.com diff --git a/FastReportsT.url b/FastReportsT.url new file mode 100644 index 0000000..d606b9c --- /dev/null +++ b/FastReportsT.url @@ -0,0 +1,6 @@ +[InternetShortcut] +URL=http://www.fast-report.com/en/products/report-for-delphi-fastreport-4-feature-matrix.html +IDList= +HotKey=0 +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 diff --git a/FastScript/FMX.BaseTypeAliases.pas b/FastScript/FMX.BaseTypeAliases.pas new file mode 100644 index 0000000..2d807b0 --- /dev/null +++ b/FastScript/FMX.BaseTypeAliases.pas @@ -0,0 +1,283 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.BaseTypeAliases; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Types, FMX.Objects, System.UITypes, System.UIConsts, FMX.Graphics, FMX.Controls, System.Types, System.TypInfo; + +type + + TCalloutPositionHelper = record helper for TCalloutPosition + const + cpTop = TCalloutPosition.Top deprecated 'Use TCalloutPosition.Top'; + cpLeft = TCalloutPosition.Left deprecated 'Use TCalloutPosition.Left'; + cpBottom = TCalloutPosition.Bottom deprecated 'Use TCalloutPosition.Bottom'; + cpRight = TCalloutPosition.Right deprecated 'Use TCalloutPosition.Right'; + end; + + TCornerHelper = record helper for TCorner + const + crTopLeft = TCorner.TopLeft deprecated 'Use TCorner.TopLeft'; + crTopRight = TCorner.TopRight deprecated 'Use TCorner.TopRight'; + crBottomLeft = TCorner.BottomLeft deprecated 'Use TCorner.BottomLeft'; + crBottomRight = TCorner.BottomRight deprecated 'Use TCorner.BottomRight'; + end; + + TCornerTypeHelper = record helper for TCornerType + const + ctRound = TCornerType.Round deprecated 'Use TCornerType.Round'; + ctBevel = TCornerType.Bevel deprecated 'Use TCornerType.Bevel'; + ctInnerRound = TCornerType.InnerRound deprecated 'Use TCornerType.InnerRound'; + ctInnerLine = TCornerType.InnerLine deprecated 'Use TCornerType.InnerLine'; + end; + + TSideHelper = record helper for TSide + const + sdTop = TSide.Top deprecated 'Use TSide.Top'; + sdLeft = TSide.Left deprecated 'Use TSide.Left'; + sdBottom = TSide.Bottom deprecated 'Use TSide.Bottom'; + sdRight = TSide.Right deprecated 'Use TSide.Right'; + end; + + TTextAlignHelper = record helper for TTextAlign + const + taCenter = TTextAlign.Center deprecated 'Use TTextAlign.Center'; + taLeading = TTextAlign.Leading deprecated 'Use TTextAlign.Leading'; + taTrailing = TTextAlign.Trailing deprecated 'Use TTextAlign.Trailing'; + end; + + TTextTrimmingHelper = record helper for TTextTrimming + const + ttNone = TTextTrimming.None deprecated 'Use TTextTrimming.None'; + ttCharacter = TTextTrimming.Character deprecated 'Use TTextTrimming.Character'; + ttWord = TTextTrimming.Word deprecated 'Use TTextTrimming.Word'; + end; + + TStyledSettingHelper = record helper for TStyledSetting + const + ssFamily = TStyledSetting.Family deprecated 'Use TStyledSetting.Family'; + ssSize = TStyledSetting.Size deprecated 'Use TStyledSetting.Size'; + ssStyle = TStyledSetting.Style deprecated 'Use TStyledSetting.Style'; + ssFontColor = TStyledSetting.FontColor deprecated 'Use TStyledSetting.FontColor'; + ssOther = TStyledSetting.Other deprecated 'Use TStyledSetting.Other'; + end; + + TMenuItemChangeHelper = record helper for TMenuItemChange + const + mcEnabled = TMenuItemChange.Enabled deprecated 'Use TMenuItemChange.Enabled'; + mcVisible = TMenuItemChange.Visible deprecated 'Use TMenuItemChange.Visible'; + mcText = TMenuItemChange.Text deprecated 'Use TMenuItemChange.Text'; + mcShortcut = TMenuItemChange.Shortcut deprecated 'Use TMenuItemChange.Shortcut'; + mcChecked = TMenuItemChange.Checked deprecated 'Use TMenuItemChange.Checked'; + mcBitmap = TMenuItemChange.Bitmap deprecated 'Use TMenuItemChange.Bitmap'; + end; + + TScreenOrientationHelper = record helper for TScreenOrientation + const + soPortrait = TScreenOrientation.Portrait deprecated 'Use TScreenOrientation.Portrait'; + soLandscape = TScreenOrientation.Landscape deprecated 'Use TScreenOrientation.Landscape'; + soInvertedPortrait = TScreenOrientation.InvertedPortrait deprecated 'Use TScreenOrientation.InvertedPortrait'; + soInvertedLandscape = TScreenOrientation.InvertedLandscape deprecated 'Use TScreenOrientation.InvertedLandscape'; + end; + + TFormStyleHelper = record helper for TFormStyle + const + fsNormal = TFormStyle.Normal deprecated 'Use TFormStyle.Normal'; + fsPopup = TFormStyle.Popup deprecated 'Use TFormStyle.Popup'; + fsStayOnTop = TFormStyle.StayOnTop deprecated 'Use TFormStyle.StayOnTop'; + end; + + TAlignLayoutHelper = record helper for TAlignLayout + const + alNone = TAlignLayout.None deprecated 'Use TAlignLayout.None'; + alTop = TAlignLayout.Top deprecated 'Use TAlignLayout.Top'; + alLeft = TAlignLayout.Left deprecated 'Use TAlignLayout.Left'; + alRight = TAlignLayout.Right deprecated 'Use TAlignLayout.Right'; + alBottom = TAlignLayout.Bottom deprecated 'Use TAlignLayout.Bottom'; + alMostTop = TAlignLayout.MostTop deprecated 'Use TAlignLayout.MostTop'; + alMostBottom = TAlignLayout.MostBottom deprecated 'Use TAlignLayout.MostBottom'; + alMostLeft = TAlignLayout.MostLeft deprecated 'Use TAlignLayout.MostLeft'; + alMostRight = TAlignLayout.MostRight deprecated 'Use TAlignLayout.MostRight'; + alClient = TAlignLayout.Client deprecated 'Use TAlignLayout.Client'; + alContents = TAlignLayout.Contents deprecated 'Use TAlignLayout.Contents'; + alCenter = TAlignLayout.Center deprecated 'Use TAlignLayout.Center'; + alVertCenter = TAlignLayout.VertCenter deprecated 'Use TAlignLayout.VertCenter'; + alHorzCenter = TAlignLayout.HorzCenter deprecated 'Use TAlignLayout.HorzCenter'; + alHorizontal = TAlignLayout.Horizontal deprecated 'Use TAlignLayout.Horizontal'; + alVertical = TAlignLayout.Vertical deprecated 'Use TAlignLayout.Vertical'; + alScale = TAlignLayout.Scale deprecated 'Use TAlignLayout.Scale'; + alFit = TAlignLayout.Fit deprecated 'Use TAlignLayout.Fit'; + alFitLeft = TAlignLayout.FitLeft deprecated 'Use TAlignLayout.FitLeft'; + alFitRight = TAlignLayout.FitRight deprecated 'Use TAlignLayout.FitRight'; + end; + + TGradientStyleHelper = record helper for TGradientStyle + const + gsLinear = TGradientStyle.Linear deprecated 'Use TGradientStyle.Linear'; + gsRadial = TGradientStyle.Radial deprecated 'Use TGradientStyle.Radial'; + end; + + TBrushKindHelper = record helper for TBrushKind + const + bkNone = TBrushKind.None deprecated 'Use TBrushKind.None'; + bkSolid = TBrushKind.Solid deprecated 'Use TBrushKind.Solid'; + bkGradient = TBrushKind.Gradient deprecated 'Use TBrushKind.Gradient'; + bkBitmap = TBrushKind.Bitmap deprecated 'Use TBrushKind.Bitmap'; + bkResource = TBrushKind.Resource deprecated 'Use TBrushKind.Resource'; + end; + + TStrokeCapHelper = record helper for TStrokeCap + const + scFlat = TStrokeCap.Flat deprecated 'Use TStrokeCap.Flat'; + scRound = TStrokeCap.Round deprecated 'Use TStrokeCap.Round'; + end; + + TStrokeJoinHelper = record helper for TStrokeJoin + const + sjMiter = TStrokeJoin.Miter deprecated 'Use TStrokeJoin.Miter'; + sjRound = TStrokeJoin.Round deprecated 'Use TStrokeJoin.Round'; + sjBevel = TStrokeJoin.Bevel deprecated 'Use TStrokeJoin.Bevel'; + end; + + TStrokeDashHelper = record helper for TStrokeDash + const + sdSolid = TStrokeDash.Solid deprecated 'Use TStrokeDash.Solid'; + sdDash = TStrokeDash.Dash deprecated 'Use TStrokeDash.Dash'; + sdDot = TStrokeDash.Dot deprecated 'Use TStrokeDash.Dot'; + sdDashDot = TStrokeDash.DashDot deprecated 'Use TStrokeDash.DashDot'; + sdDashDotDot = TStrokeDash.DashDotDot deprecated 'Use TStrokeDash.DashDotDot'; + sdCustom = TStrokeDash.Custom deprecated 'Use TStrokeDash.Custom'; + end; + + TFillTextFlagHelper = record helper for TFillTextFlag + const + ftRightToLeft = TFillTextFlag.RightToLeft deprecated 'Use TFillTextFlag.RightToLeft'; + end; + + TMapAccessHelper = record helper for TMapAccess + const + maRead = TMapAccess.Read deprecated 'Use TMapAccess.Read'; + maWrite = TMapAccess.Write deprecated 'Use TMapAccess.Write'; + maReadWrite = TMapAccess.ReadWrite deprecated 'Use TMapAccess.ReadWrite'; + end; + + TOrientationHelper = record helper for TOrientation + const + orHorizontal = TOrientation.Horizontal deprecated 'Use TOrientation.Horizontal'; + orVertical = TOrientation.Vertical deprecated 'Use TOrientation.Vertical'; + end; + + TPlacementHelper = record helper for TPlacement + const + plBottom = TPlacement.Bottom deprecated 'Use TPlacement.Bottom'; + plTop = TPlacement.Top deprecated 'Use TPlacement.Top'; + plLeft = TPlacement.Left deprecated 'Use TPlacement.Left'; + plRight = TPlacement.Right deprecated 'Use TPlacement.Right'; + plCenter = TPlacement.Center deprecated 'Use TPlacement.Center'; + plBottomCenter = TPlacement.BottomCenter deprecated 'Use TPlacement.BottomCenter'; + plTopCenter = TPlacement.TopCenter deprecated 'Use TPlacement.TopCenter'; + plLeftCenter = TPlacement.LeftCenter deprecated 'Use TPlacement.LeftCenter'; + plRightCenter = TPlacement.RightCenter deprecated 'Use TPlacement.RightCenter'; + plAbsolute = TPlacement.Absolute deprecated 'Use TPlacement.Absolute'; + plMouse = TPlacement.Mouse deprecated 'Use TPlacement.Mouse'; + plMouseCenter = TPlacement.MouseCenter deprecated 'Use TPlacement.MouseCenter'; + end; + + TVirtualKeyboardTypeHelper = record helper for TVirtualKeyboardType + const + vktDefault = TVirtualKeyboardType.Default deprecated 'Use TVirtualKeyboardType.Default'; + vktNumbersAndPunctuation = TVirtualKeyboardType.NumbersAndPunctuation deprecated 'Use TVirtualKeyboardType.NumbersAndPunctuation'; + vktNumberPad = TVirtualKeyboardType.NumberPad deprecated 'Use TVirtualKeyboardType.NumberPad'; + vktPhonePad = TVirtualKeyboardType.PhonePad deprecated 'Use TVirtualKeyboardType.PhonePad'; + vktAlphabet = TVirtualKeyboardType.Alphabet deprecated 'Use TVirtualKeyboardType.Alphabet'; + vktURL = TVirtualKeyboardType.URL deprecated 'Use TVirtualKeyboardType.URL'; + vktNamePhonePad = TVirtualKeyboardType.NamePhonePad deprecated 'Use TVirtualKeyboardType.NamePhonePad'; + vktEmailAddress = TVirtualKeyboardType.EmailAddress deprecated 'Use TVirtualKeyboardType.EmailAddress'; + end; + + TVirtualKeyboardStateHelper = record helper for TVirtualKeyboardState + const + vksAutoShow = TVirtualKeyboardState.AutoShow deprecated 'Use TVirtualKeyboardState.AutoShow'; + vksVisible = TVirtualKeyboardState.Visible deprecated 'Use TVirtualKeyboardState.Visible'; + vksError = TVirtualKeyboardState.Error deprecated 'Use TVirtualKeyboardState.Error'; + vksTransient = TVirtualKeyboardState.Transient deprecated 'Use TVirtualKeyboardState.Transient'; + end; + + TReturnKeyTypeHelper = record helper for TReturnKeyType + const + rktDefault = TReturnKeyType.Default deprecated 'Use TReturnKeyType.Default'; + rktDone = TReturnKeyType.Done deprecated 'Use TReturnKeyType.Done'; + rktGo = TReturnKeyType.Go deprecated 'Use TReturnKeyType.Go'; + rktNext = TReturnKeyType.Next deprecated 'Use TReturnKeyType.Next'; + rktSearch = TReturnKeyType.Search deprecated 'Use TReturnKeyType.Search'; + rktSend = TReturnKeyType.Send deprecated 'Use TReturnKeyType.Send'; + end; + +implementation + +initialization + AddEnumElementAliases(TypeInfo(TCalloutPosition), ['cpTop', 'cpLeft', 'cpBottom', 'cpRight']); + AddEnumElementAliases(TypeInfo(TCorner), ['crTopLeft', 'crTopRight', 'crBottomLeft', 'crBottomRight']); + AddEnumElementAliases(TypeInfo(TCornerType), ['ctRound', 'ctBevel', 'ctInnerRound', 'ctInnerLine']); + AddEnumElementAliases(TypeInfo(TSide), ['sdTop', 'sdLeft', 'sdBottom', 'sdRight']); + AddEnumElementAliases(TypeInfo(TTextAlign), ['taCenter', 'taLeading', 'taTrailing']); + AddEnumElementAliases(TypeInfo(TTextTrimming), ['ttNone', 'ttCharacter', 'ttWord']); + AddEnumElementAliases(TypeInfo(TStyledSetting), ['ssFamily', 'ssSize', 'ssStyle', 'ssFontColor', 'ssOther']); + AddEnumElementAliases(TypeInfo(TMenuItemChange), ['mcEnabled', 'mcVisible', 'mcText', 'mcShortcut', 'mcChecked', 'mcBitmap']); + AddEnumElementAliases(TypeInfo(TScreenOrientation), ['soPortrait', 'soLandscape', 'soInvertedPortrait', 'soInvertedLandscape']); + AddEnumElementAliases(TypeInfo(TFormStyle), ['fsNormal', 'fsPopup', 'fsStayOnTop']); + AddEnumElementAliases(TypeInfo(TAlignLayout), ['alNone', 'alTop', 'alLeft', 'alRight', 'alBottom', 'alMostTop', 'alMostBottom', 'alMostLeft', 'alMostRight', 'alClient', 'alContents', 'alCenter', 'alVertCenter', 'alHorzCenter', 'alHorizontal', 'alVertical', 'alScale', 'alFit', 'alFitLeft', 'alFitRight']); + AddEnumElementAliases(TypeInfo(TGradientStyle), ['gsLinear', 'gsRadial']); + AddEnumElementAliases(TypeInfo(TBrushKind), ['bkNone', 'bkSolid', 'bkGradient', 'bkBitmap', 'bkResource']); + AddEnumElementAliases(TypeInfo(TStrokeCap), ['scFlat', 'scRound']); + AddEnumElementAliases(TypeInfo(TStrokeJoin), ['sjMiter', 'sjRound', 'sjBevel']); + AddEnumElementAliases(TypeInfo(TStrokeDash), ['sdSolid', 'sdDash', 'sdDot', 'sdDashDot', 'sdDashDotDot', 'sdCustom']); + AddEnumElementAliases(TypeInfo(TMapAccess), ['maRead', 'maWrite', 'maReadWrite']); + AddEnumElementAliases(TypeInfo(TFillTextFlag), ['ftRightToLeft']); + AddEnumElementAliases(TypeInfo(TOrientation), ['orHorizontal', 'orVertical']); + AddEnumElementAliases(TypeInfo(TPlacement), ['plBottom', 'plTop', 'plLeft', 'plRight', 'plCenter', 'plBottomCenter', 'plTopCenter', 'plLeftCenter', 'plRightCenter', 'plAbsolute', 'plMouse', 'plMouseCenter']); + AddEnumElementAliases(TypeInfo(TVirtualKeyboardType), ['vktDefault', 'vktNumbersAndPunctuation', 'vktNumberPad', 'vktPhonePad', 'vktAlphabet', 'vktURL', 'vktNamePhonePad', 'vktEmailAddress']); + AddEnumElementAliases(TypeInfo(TReturnKeyType), ['rktDefault', 'rktDone', 'rktGo', 'rktNext', 'rktSearch']); + AddEnumElementAliases(TypeInfo(TVirtualKeyboardState), ['vksAutoShow', 'vksVisible', 'vksError', 'vksTransient']); + + +finalization + RemoveEnumElementAliases(TypeInfo(TCalloutPosition)); + RemoveEnumElementAliases(TypeInfo(TCorner)); + RemoveEnumElementAliases(TypeInfo(TCornerType)); + RemoveEnumElementAliases(TypeInfo(TSide)); + RemoveEnumElementAliases(TypeInfo(TTextAlign)); + RemoveEnumElementAliases(TypeInfo(TTextTrimming)); + RemoveEnumElementAliases(TypeInfo(TStyledSetting)); + RemoveEnumElementAliases(TypeInfo(TMenuItemChange)); + RemoveEnumElementAliases(TypeInfo(TScreenOrientation)); + RemoveEnumElementAliases(TypeInfo(TFormStyle)); + RemoveEnumElementAliases(TypeInfo(TAlignLayout)); + RemoveEnumElementAliases(TypeInfo(TGradientStyle)); + RemoveEnumElementAliases(TypeInfo(TBrushKind)); + RemoveEnumElementAliases(TypeInfo(TStrokeCap)); + RemoveEnumElementAliases(TypeInfo(TStrokeJoin)); + RemoveEnumElementAliases(TypeInfo(TStrokeDash)); + RemoveEnumElementAliases(TypeInfo(TMapAccess)); + RemoveEnumElementAliases(TypeInfo(TFillTextFlag)); + RemoveEnumElementAliases(TypeInfo(TOrientation)); + RemoveEnumElementAliases(TypeInfo(TPlacement)); + RemoveEnumElementAliases(TypeInfo(TVirtualKeyboardType)); + RemoveEnumElementAliases(TypeInfo(TReturnKeyType)); + RemoveEnumElementAliases(TypeInfo(TVirtualKeyboardState)); + + +end. diff --git a/FastScript/FMX.FormTypeAliases.pas b/FastScript/FMX.FormTypeAliases.pas new file mode 100644 index 0000000..99d3df6 --- /dev/null +++ b/FastScript/FMX.FormTypeAliases.pas @@ -0,0 +1,70 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.FormTypeAliases; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Types, FMX.Objects, System.UITypes, System.UIConsts, FMX.Graphics, System.Types, System.TypInfo, FMX.Forms; + +type + TFmxFormBorderStyleHelper = record helper for TFmxFormBorderStyle + const + bsNone = TFmxFormBorderStyle.None deprecated 'Use TFmxFormBorderStyle.None'; + bsSingle = TFmxFormBorderStyle.Single deprecated 'Use TFmxFormBorderStyle.Single'; + bsSizeable = TFmxFormBorderStyle.Sizeable deprecated 'Use TFmxFormBorderStyle.Sizeable'; + bsToolWindow = TFmxFormBorderStyle.ToolWindow deprecated 'Use TFmxFormBorderStyle.ToolWindow'; + bsSizeToolWin = TFmxFormBorderStyle.SizeToolWin deprecated 'Use TFmxFormBorderStyle.SizeToolWin'; + end; + + TFormPositionHelper = record helper for TFormPosition + const + poDesigned = TFormPosition.Designed deprecated 'Use TFormPosition.Designed'; + poDefault = TFormPosition.Default deprecated 'Use TFormPosition.Default'; + poDefaultPosOnly = TFormPosition.DefaultPosOnly deprecated 'Use TFormPosition.DefaultPosOnly'; + poDefaultSizeOnly = TFormPosition.DefaultSizeOnly deprecated 'Use TFormPosition.DefaultSizeOnly'; + poScreenCenter = TFormPosition.ScreenCenter deprecated 'Use TFormPosition.ScreenCenter'; + poDesktopCenter = TFormPosition.DesktopCenter deprecated 'Use TFormPosition.DesktopCenter'; + poMainFormCenter = TFormPosition.MainFormCenter deprecated 'Use TFormPosition.MainFormCenter'; + poOwnerFormCenter = TFormPosition.OwnerFormCenter deprecated 'Use TFormPosition.OwnerFormCenter'; + end; + + TFmxFormStateHelper = record helper for TFmxFormState + const + fsRecreating = TFmxFormState.Recreating deprecated 'Use TFmxFormState.Recreating'; + fsModal = TFmxFormState.Modal deprecated 'Use TFmxFormState.Modal'; + fsReleased = TFmxFormState.Released deprecated 'Use TFmxFormState.Released'; + fsInDesigner = TFmxFormState.InDesigner deprecated 'Use TFmxFormState.InDesigner'; + fsWasNotShown = TFmxFormState.WasNotShown deprecated 'Use TFmxFormState.WasNotShown'; + fsShowing = TFmxFormState.Showing deprecated 'Use TFmxFormState.Showing'; + fsUpdateBorder = TFmxFormState.UpdateBorder deprecated 'Use TFmxFormState.UpdateBorder'; + fsActivation = TFmxFormState.Activation deprecated 'Use TFmxFormState.Activation'; + end; + + +implementation + +initialization + AddEnumElementAliases(TypeInfo(TFmxFormBorderStyle), ['bsNone', 'bsSingle', 'bsSizeable', 'bsToolWindow', 'bsSizeToolWin']); + AddEnumElementAliases(TypeInfo(TFormPosition), ['poDesigned', 'poDefault', 'poDefaultPosOnly', 'poDefaultSizeOnly', 'poScreenCenter', 'poDesktopCenter', + 'poMainFormCenter', 'poOwnerFormCenter']); + AddEnumElementAliases(TypeInfo(TFmxFormState), ['fsRecreating', 'fsModal', 'fsReleased', 'fsInDesigner', 'fsWasNotShown', 'fsShowing', 'fsUpdateBorder', + 'fsActivation']); + +finalization + RemoveEnumElementAliases(TypeInfo(TFmxFormBorderStyle)); + RemoveEnumElementAliases(TypeInfo(TFormPosition)); + RemoveEnumElementAliases(TypeInfo(TFmxFormState)); + +end. diff --git a/FastScript/FMX.fs_iadortti.pas b/FastScript/FMX.fs_iadortti.pas new file mode 100644 index 0000000..f858548 --- /dev/null +++ b/FastScript/FMX.fs_iadortti.pas @@ -0,0 +1,129 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ ADO classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iadortti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_idbrtti, + Data.DB, Data.Win.ADODB, Winapi.ADOInt, FMX.Types; + +type +{$i frxPlatformsAttribute.inc} + TfsADORTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddType('TDataType', fvtInt); + AddClass(TADOConnection, 'TComponent'); + AddClass(TParameter, 'TCollectionItem'); + with AddClass(TParameters, 'TCollection') do + begin + AddMethod('function AddParameter: TParameter', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TParameter', CallMethod, True); + end; + with AddClass(TCustomADODataSet, 'TDataSet') do + begin + AddProperty('Sort', 'WideString', GetProp, SetProp); + end; + AddClass(TADOTable, 'TCustomADODataSet'); + with AddClass(TADOQuery, 'TCustomADODataSet') do + AddMethod('procedure ExecSQL', CallMethod); + with AddClass(TADOStoredProc, 'TCustomADODataSet') do + AddMethod('procedure ExecProc', CallMethod); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TParameters then + begin + if MethodName = 'ADDPARAMETER' then + Result := frxInteger(TParameters(Instance).AddParameter) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TParameters(Instance).Items[Caller.Params[0]]) + end + else if ClassType = TADOQuery then + begin + if MethodName = 'EXECSQL' then + TADOQuery(Instance).ExecSQL + end + else if ClassType = TADOStoredProc then + begin + if MethodName = 'EXECPROC' then + TADOStoredProc(Instance).ExecProc + end +end; + + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCustomADODataSet then + begin + if PropName = 'SORT' then + Result := TCustomADODataSet(Instance).Sort; + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + + if ClassType = TCustomADODataSet then + begin + if PropName = 'SORT' then + TCustomADODataSet(Instance).Sort := Value; + end + +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsADORTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. + diff --git a/FastScript/FMX.fs_ibasic.pas b/FastScript/FMX.fs_ibasic.pas new file mode 100644 index 0000000..8a0c8e7 --- /dev/null +++ b/FastScript/FMX.fs_ibasic.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Basic grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ibasic; +{$i FMX.inc} +{$i fs_ibasic.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_ichartrtti.pas b/FastScript/FMX.fs_ichartrtti.pas new file mode 100644 index 0000000..4fdff87 --- /dev/null +++ b/FastScript/FMX.fs_ichartrtti.pas @@ -0,0 +1,181 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Chart } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ichartrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_iformsrtti, FMX.Objects, + FMXTee.Chart, FMXTee.Series, FMXTee.Engine, FMXTee.Procs, FMXTee.Canvas, FMX.Types, System.Types; + + +type +{$i frxPlatformsAttribute.inc} + TfsChartRTTI = class(TFmxObject); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddType('TChartValue', fvtFloat); + AddEnum('TLegendStyle', 'lsAuto, lsSeries, lsValues, lsLastValues'); + AddEnum('TLegendAlignment', 'laLeft, laRight, laTop, laBottom'); + AddEnum('TLegendTextStyle', 'ltsPlain, ltsLeftValue, ltsRightValue, ltsLeftPercent,' + + 'ltsRightPercent, ltsXValue'); + AddEnum('TChartListOrder', 'loNone, loAscending, loDescending'); + AddEnum('TGradientDirection', 'gdTopBottom, gdBottomTop, gdLeftRight, gdRightLeft'); + AddEnum('TSeriesMarksStyle', 'smsValue, smsPercent, smsLabel, smsLabelPercent, ' + + 'smsLabelValue, smsLegend, smsPercentTotal, smsLabelPercentTotal, smsXValue'); + AddEnum('TAxisLabelStyle', 'talAuto, talNone, talValue, talMark, talText'); + AddEnum('THorizAxis', 'aTopAxis, aBottomAxis'); + AddEnum('TVertAxis', 'aLeftAxis, aRightAxis'); + AddEnum('TTeeBackImageMode', 'pbmStretch, pbmTile, pbmCenter'); + AddEnum('TPanningMode', 'pmNone, pmHorizontal, pmVertical, pmBoth'); + AddEnum('TSeriesPointerStyle', 'psRectangle, psCircle, psTriangle, ' + + 'psDownTriangle, psCross, psDiagCross, psStar, psDiamond, psSmallDot'); + AddEnum('TMultiArea', 'maNone, maStacked, maStacked100'); + AddEnum('TMultiBar', 'mbNone, mbSide, mbStacked, mbStacked100'); + AddEnum('TBarStyle', 'bsRectangle, bsPyramid, bsInvPyramid, bsCilinder, ' + + 'bsEllipse, bsArrow, bsRectGradient'); + + AddEnum('TPenEndStyle', 'esRound, esSquare, esFlat'); + AddEnum('TPenMode', 'pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, ' + + 'pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, ' + + 'pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor'); + AddEnum('TPenStyle', 'psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame'); + AddClass(TChartValueList, 'TPersistent'); + AddClass(TChartAxisTitle, 'TPersistent'); + AddClass(TChartAxis, 'TPersistent'); + AddClass(TCustomChartLegend, 'TPersistent'); + AddClass(TChartLegend, 'TCustomChartLegend'); + AddClass(TSeriesMarks, 'TPersistent'); + AddClass(TChartGradient, 'TPersistent'); + AddClass(TChartWall, 'TPersistent'); + AddClass(TChartBrush, 'TBrush'); + AddClass(TChartTitle, 'TPersistent'); + AddClass(TView3DOptions, 'TPersistent'); + AddClass(TChartPen, 'TComponent'); + with AddClass(TChartSeries, 'TComponent') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('function Count: Integer', CallMethod); + AddMethod('procedure Add(const AValue: Double; const ALabel: String; AColor: TColor)', CallMethod); + AddProperty('Active','Boolean', GetProp, SetProp); + AddProperty('ColorEachPoint','Boolean', GetProp, SetProp); + + end; + AddClass(TSeriesPointer, 'TPersistent'); + AddClass(TCustomSeries, 'TChartSeries'); + AddClass(TLineSeries, 'TCustomSeries'); + AddClass(TPointSeries, 'TCustomSeries'); + AddClass(TAreaSeries, 'TCustomSeries'); + with AddClass(TCustomBarSeries, 'TChartSeries') do + begin + AddProperty('Title','String', GetProp, SetProp); + end; + AddClass(TBarSeries, 'TCustomBarSeries'); + AddClass(THorizBarSeries, 'TCustomBarSeries'); + AddClass(TCircledSeries, 'TChartSeries'); + AddClass(TPieSeries, 'TCircledSeries'); + AddClass(TFastLineSeries, 'TChartSeries'); + AddClass(TCustomChart, 'TWinControl'); + AddClass(TChart, 'TCustomChart'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TChartSeries then + begin + if MethodName = 'CLEAR' then + TChartSeries(Instance).Clear + else if MethodName = 'ADD' then + TChartSeries(Instance).Add(Caller.Params[0], String(Caller.Params[1]), Caller.Params[2]) + else if MethodName = 'DELETE' then + TChartSeries(Instance).Delete(Caller.Params[0]) + else if MethodName = 'COUNT' then + Result := TChartSeries(Instance).Count + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TChartSeries then + begin + if PropName = 'ACTIVE' then + Result := TChartSeries(Instance).Active + else if PropName = 'COLOREACHPOINT' then + Result := TChartSeries(Instance).ColorEachPoint + end else + if ClassType = TCustomBarSeries then + begin + if PropName = 'Title' then + Result := TCustomBarSeries(Instance).Title + end; +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TChartSeries then + begin + if PropName = 'ACTIVE' then + TChartSeries(Instance).Active := Value + else if PropName = 'COLOREACHPOINT' then + TChartSeries(Instance).ColorEachPoint := Value + end else + if ClassType = TCustomBarSeries then + begin + if PropName = 'Title' then + TCustomBarSeries(Instance).Title := Value + end +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsChartRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_iclassesrtti.pas b/FastScript/FMX.fs_iclassesrtti.pas new file mode 100644 index 0000000..97fd2ec --- /dev/null +++ b/FastScript/FMX.fs_iclassesrtti.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Classes.pas classes and functions } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iclassesrtti; +{$i FMX.inc} +{$i fs_iclassesrtti.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_iconst.pas b/FastScript/FMX.fs_iconst.pas new file mode 100644 index 0000000..c23d7cf --- /dev/null +++ b/FastScript/FMX.fs_iconst.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Resources } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iconst; +{$i FMX.inc} +{$i fs_iconst.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_icpp.pas b/FastScript/FMX.fs_icpp.pas new file mode 100644 index 0000000..64a3c70 --- /dev/null +++ b/FastScript/FMX.fs_icpp.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ C++ grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_icpp; +{$i FMX.inc} +{$i fs_icpp.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_idbrtti.pas b/FastScript/FMX.fs_idbrtti.pas new file mode 100644 index 0000000..dbb1620 --- /dev/null +++ b/FastScript/FMX.fs_idbrtti.pas @@ -0,0 +1,570 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ DB.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_idbrtti; + +interface + +{$i fs.inc} + +uses + System.Types, System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_iclassesrtti, FMX.fs_ievents, + Data.DB, FMX.Types; + +type +{$i frxPlatformsAttribute.inc} + TfsDBRTTI = class(TComponent); // fake component + + TfsDatasetNotifyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Dataset: TDataset); + function GetMethod: Pointer; override; + end; + + TfsFilterRecordEvent = class(TfsCustomEvent) + public + procedure DoEvent(DataSet: TDataSet; var Accept: Boolean); + function GetMethod: Pointer; override; + end; + + TfsFieldGetTextEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TField; var Text: String; DisplayText: Boolean); + function GetMethod: Pointer; override; + end; + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TfsDatasetNotifyEvent } + +procedure TfsDatasetNotifyEvent.DoEvent(Dataset: TDataset); +begin + CallHandler([Dataset]); +end; + +function TfsDatasetNotifyEvent.GetMethod: Pointer; +begin + Result := @TfsDatasetNotifyEvent.DoEvent; +end; + + +{ TfsFilterRecordEvent } + +procedure TfsFilterRecordEvent.DoEvent(DataSet: TDataSet; var Accept: Boolean); +begin + CallHandler([DataSet, Accept]); + Accept := Handler.Params[1].Value; +end; + +function TfsFilterRecordEvent.GetMethod: Pointer; +begin + Result := @TfsFilterRecordEvent.DoEvent; +end; + + +{ TfsFieldGetTextEvent } + +procedure TfsFieldGetTextEvent.DoEvent(Sender: TField; var Text: String; DisplayText: Boolean); +begin + CallHandler([Sender, Text, DisplayText]); + Text := Handler.Params[1].Value; +end; + +function TfsFieldGetTextEvent.GetMethod: Pointer; +begin + Result := @TfsFieldGetTextEvent.DoEvent; +end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TFieldType', 'ftUnknown, ftString, ftSmallint, ftInteger, ftWord,' + + 'ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,' + + 'ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,' + + 'ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString,' + + 'ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob,' + + 'ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd'); + AddEnum('TBlobStreamMode', 'bmRead, bmWrite, bmReadWrite'); + AddEnumSet('TLocateOptions', 'loCaseInsensitive, loPartialKey'); + AddEnumSet('TFilterOptions', 'foCaseInsensitive, foNoPartialCompare'); + AddEnum('TParamType', 'ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult'); + + with AddClass(TField, 'TComponent') do + begin + AddProperty('AsBoolean', 'Boolean', GetProp, SetProp); + AddProperty('AsCurrency', 'Currency', GetProp, SetProp); + AddProperty('AsDateTime', 'TDateTime', GetProp, SetProp); + AddProperty('AsFloat', 'Double', GetProp, SetProp); + AddProperty('AsInteger', 'Integer', GetProp, SetProp); + AddProperty('AsString', 'String', GetProp, SetProp); + AddProperty('AsVariant', 'Variant', GetProp, SetProp); + AddProperty('DataType', 'TFieldType', GetProp, nil); + AddProperty('DisplayName', 'String', GetProp, nil); + AddProperty('DisplayText', 'String', GetProp, nil); + AddProperty('IsNull', 'Boolean', GetProp, nil); + AddProperty('Size', 'Integer', GetProp, SetProp); + AddProperty('Value', 'Variant', GetProp, SetProp); + AddProperty('OldValue', 'Variant', GetProp, nil); + AddEvent('OnGetText', TfsFieldGetTextEvent); + end; + with AddClass(TFields, 'TObject') do + AddDefaultProperty('Fields', 'Integer', 'TField', CallMethod, True); + AddClass(TStringField, 'TField'); + AddClass(TNumericField, 'TField'); + AddClass(TIntegerField, 'TNumericField'); + AddClass(TSmallIntField, 'TIntegerField'); + AddClass(TWordField, 'TIntegerField'); + AddClass(TAutoIncField, 'TIntegerField'); + AddClass(TFloatField, 'TNumericField'); + AddClass(TCurrencyField, 'TFloatField'); + AddClass(TBooleanField, 'TField'); + AddClass(TDateTimeField, 'TField'); + AddClass(TDateField, 'TDateTimeField'); + AddClass(TTimeField, 'TDateTimeField'); + AddClass(TBinaryField, 'TField'); + AddClass(TBytesField, 'TBinaryField'); + AddClass(TVarBytesField, 'TBinaryField'); + AddClass(TBCDField, 'TNumericField'); + with AddClass(TBlobField, 'TField') do + begin + AddMethod('procedure LoadFromFile(const FileName: String)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToFile(const FileName: String)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + end; + AddClass(TMemoField, 'TBlobField'); + AddClass(TGraphicField, 'TBlobField'); + AddClass(TFieldDef, 'TPersistent'); + with AddClass(TFieldDefs, 'TObject') do + begin + AddMethod('function AddFieldDef: TFieldDef', CallMethod); + AddMethod('function Find(const Name: string): TFieldDef', CallMethod); + AddMethod('procedure Add(const Name: string; DataType: TFieldType; Size: Word; Required: Boolean)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Update', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TFieldDef', CallMethod, True); + end; + AddClass(TDataSource, 'TComponent'); + AddType('TBookmark', fvtVariant); + with AddClass(TDataSet, 'TComponent') do + begin + AddMethod('procedure Open', CallMethod); + AddMethod('procedure Close', CallMethod); + AddMethod('procedure First', CallMethod); + AddMethod('procedure Last', CallMethod); + AddMethod('procedure Next', CallMethod); + AddMethod('procedure Prior', CallMethod); + AddMethod('procedure Cancel', CallMethod); + AddMethod('procedure Delete', CallMethod); + AddMethod('procedure Post', CallMethod); + AddMethod('procedure Append', CallMethod); + AddMethod('procedure Insert', CallMethod); + AddMethod('procedure Edit', CallMethod); + + AddMethod('function FieldByName(const FieldName: string): TField', CallMethod); + AddMethod('procedure GetFieldNames(List: TStrings)', CallMethod); + AddMethod('function FindFirst: Boolean', CallMethod); + AddMethod('function FindLast: Boolean', CallMethod); + AddMethod('function FindNext: Boolean', CallMethod); + AddMethod('function FindPrior: Boolean', CallMethod); + AddMethod('procedure FreeBookmark(Bookmark: TBookmark)', CallMethod); + AddMethod('function GetBookmark: TBookmark', CallMethod); + AddMethod('procedure GotoBookmark(Bookmark: TBookmark)', CallMethod); + AddMethod('function Locate(const KeyFields: string; const KeyValues: Variant;' + + 'Options: TLocateOptions): Boolean', CallMethod); + AddMethod('function IsEmpty: Boolean', CallMethod); + AddMethod('procedure EnableControls', CallMethod); + AddMethod('procedure DisableControls', CallMethod); + + AddProperty('Bof', 'Boolean', GetProp, nil); + AddProperty('Eof', 'Boolean', GetProp, nil); + AddProperty('FieldCount', 'Integer', GetProp, nil); + AddProperty('FieldDefs', 'TFieldDefs', GetProp, nil); + AddProperty('Fields', 'TFields', GetProp, nil); + AddProperty('Filter', 'string', GetProp, SetProp); + AddProperty('Filtered', 'Boolean', GetProp, SetProp); + AddProperty('FilterOptions', 'TFilterOptions', GetProp, SetProp); + AddProperty('Active', 'Boolean', GetProp, SetProp); + + AddEvent('BeforeOpen', TfsDatasetNotifyEvent); + AddEvent('AfterOpen', TfsDatasetNotifyEvent); + AddEvent('BeforeClose', TfsDatasetNotifyEvent); + AddEvent('AfterClose', TfsDatasetNotifyEvent); + AddEvent('BeforeInsert', TfsDatasetNotifyEvent); + AddEvent('AfterInsert', TfsDatasetNotifyEvent); + AddEvent('BeforeEdit', TfsDatasetNotifyEvent); + AddEvent('AfterEdit', TfsDatasetNotifyEvent); + AddEvent('BeforePost', TfsDatasetNotifyEvent); + AddEvent('AfterPost', TfsDatasetNotifyEvent); + AddEvent('BeforeCancel', TfsDatasetNotifyEvent); + AddEvent('AfterCancel', TfsDatasetNotifyEvent); + AddEvent('BeforeDelete', TfsDatasetNotifyEvent); + AddEvent('AfterDelete', TfsDatasetNotifyEvent); + AddEvent('BeforeScroll', TfsDatasetNotifyEvent); + AddEvent('AfterScroll', TfsDatasetNotifyEvent); + AddEvent('OnCalcFields', TfsDatasetNotifyEvent); + AddEvent('OnFilterRecord', TfsFilterRecordEvent); + AddEvent('OnNewRecord', TfsDatasetNotifyEvent); + end; + + with AddClass(TParam, 'TPersistent') do + begin + AddMethod('procedure Clear', CallMethod); + AddProperty('AsBoolean', 'Boolean', GetProp, SetProp); + AddProperty('AsCurrency', 'Currency', GetProp, SetProp); + AddProperty('AsDateTime', 'TDateTime', GetProp, SetProp); + AddProperty('AsFloat', 'Double', GetProp, SetProp); + AddProperty('AsInteger', 'Integer', GetProp, SetProp); + AddProperty('AsDate', 'TDate', GetProp, SetProp); + AddProperty('AsTime', 'TTime', GetProp, SetProp); + AddProperty('AsString', 'String', GetProp, SetProp); + AddProperty('Bound', 'Boolean', GetProp, SetProp); + AddProperty('IsNull', 'Boolean', GetProp, nil); + AddProperty('Text', 'String', GetProp, SetProp); + end; + with AddClass(TParams, 'TPersistent') do + begin + AddMethod('function ParamByName(const Value: string): TParam', CallMethod); + AddMethod('function FindParam(const Value: string): TParam', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TParam', CallMethod, True); + end; + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + _TDataSet: TDataSet; + + function IntToLocateOptions(i: Integer): TLocateOptions; + begin + Result := []; + if (i and 1) <> 0 then + Result := Result + [loCaseInsensitive]; + if (i and 2) <> 0 then + Result := Result + [loPartialKey]; + end; + +begin + Result := 0; + + if ClassType = TFields then + begin + if MethodName = 'FIELDS.GET' then + Result := frxInteger(TFields(Instance)[Caller.Params[0]]) + end + else if ClassType = TFieldDefs then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TFieldDefs(Instance)[Caller.Params[0]]) + else if MethodName = 'ADD' then + TFieldDefs(Instance).Add(Caller.Params[0], TFieldType(Caller.Params[1]), Caller.Params[2], Caller.Params[3]) + else if MethodName = 'ADDFIELDDEF' then + Result := frxInteger(TFieldDefs(Instance).AddFieldDef) + else if MethodName = 'CLEAR' then + TFieldDefs(Instance).Clear + else if MethodName = 'FIND' then + Result := frxInteger(TFieldDefs(Instance).Find(Caller.Params[0])) + else if MethodName = 'UPDATE' then + TFieldDefs(Instance).Update + end + else if ClassType = TBlobField then + begin + if MethodName = 'LOADFROMFILE' then + TBlobField(Instance).LoadFromFile(Caller.Params[0]) + else if MethodName = 'LOADFROMSTREAM' then + TBlobField(Instance).LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOFILE' then + TBlobField(Instance).SaveToFile(Caller.Params[0]) + else if MethodName = 'SAVETOSTREAM' then + TBlobField(Instance).SaveToStream(TStream(frxInteger(Caller.Params[0]))) + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if MethodName = 'OPEN' then + _TDataSet.Open + else if MethodName = 'CLOSE' then + _TDataSet.Close + else if MethodName = 'FIRST' then + _TDataSet.First + else if MethodName = 'LAST' then + _TDataSet.Last + else if MethodName = 'NEXT' then + _TDataSet.Next + else if MethodName = 'PRIOR' then + _TDataSet.Prior + else if MethodName = 'CANCEL' then + _TDataSet.Cancel + else if MethodName = 'DELETE' then + _TDataSet.Delete + else if MethodName = 'POST' then + _TDataSet.Post + else if MethodName = 'APPEND' then + _TDataSet.Append + else if MethodName = 'INSERT' then + _TDataSet.Insert + else if MethodName = 'EDIT' then + _TDataSet.Edit + else if MethodName = 'FIELDBYNAME' then + Result := frxInteger(_TDataSet.FieldByName(Caller.Params[0])) + else if MethodName = 'GETFIELDNAMES' then + _TDataSet.GetFieldNames(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'FINDFIRST' then + Result := _TDataSet.FindFirst + else if MethodName = 'FINDLAST' then + Result := _TDataSet.FindLast + else if MethodName = 'FINDNEXT' then + Result := _TDataSet.FindNext + else if MethodName = 'FINDPRIOR' then + Result := _TDataSet.FindPrior + else if MethodName = 'FREEBOOKMARK' then + _TDataSet.FreeBookmark(TBookMark(frxInteger(Caller.Params[0]))) +{$IFNDEF CPUX64} + else if MethodName = 'GETBOOKMARK' then + Result := frxInteger(_TDataSet.GetBookmark) +{$ENDIF} + else if MethodName = 'GOTOBOOKMARK' then + _TDataSet.GotoBookmark(TBookMark(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOCATE' then + Result := _TDataSet.Locate(Caller.Params[0], Caller.Params[1], IntToLocateOptions(Caller.Params[2])) + else if MethodName = 'ISEMPTY' then + Result := _TDataSet.IsEmpty + else if MethodName = 'ENABLECONTROLS' then + _TDataSet.EnableControls + else if MethodName = 'DISABLECONTROLS' then + _TDataSet.DisableControls + end + else if ClassType = TParam then + begin + if MethodName = 'CLEAR' then + TParam(Instance).Clear + end + else if ClassType = TParams then + begin + if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TParams(Instance).ParamByName(Caller.Params[0])) + else if MethodName = 'FINDPARAM' then + Result := frxInteger(TParams(Instance).FindParam(Caller.Params[0])) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TParams(Instance)[Caller.Params[0]]) + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +var + _TField: TField; + _TParam: TParam; + _TDataSet: TDataSet; + + function FilterOptionsToInt(f: TFilterOptions): Integer; + begin + Result := 0; + if foCaseInsensitive in f then + Result := Result or 1; + if foNoPartialCompare in f then + Result := Result or 2; + end; + +begin + Result := 0; + + if ClassType = TField then + begin + _TField := TField(Instance); + if PropName = 'ASBOOLEAN' then + Result := _TField.AsBoolean + else if PropName = 'ASCURRENCY' then + Result := _TField.AsCurrency + else if PropName = 'ASDATETIME' then + Result := _TField.AsDateTime + else if PropName = 'ASFLOAT' then + Result := _TField.AsFloat + else if PropName = 'ASINTEGER' then + Result := _TField.AsInteger + else if PropName = 'ASSTRING' then + Result := _TField.AsString + else if PropName = 'ASVARIANT' then + Result := _TField.AsVariant + else if PropName = 'DATATYPE' then + Result := _TField.DataType + else if PropName = 'DISPLAYNAME' then + Result := _TField.DisplayName + else if PropName = 'DISPLAYTEXT' then + Result := _TField.DisplayText + else if PropName = 'ISNULL' then + Result := _TField.IsNull + else if PropName = 'SIZE' then + Result := _TField.Size + else if PropName = 'VALUE' then + Result := _TField.Value + else if PropName = 'OLDVALUE' then + Result := _TField.OldValue + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if PropName = 'BOF' then + Result := _TDataSet.Bof + else if PropName = 'EOF' then + Result := _TDataSet.Eof + else if PropName = 'FIELDCOUNT' then + Result := _TDataSet.FieldCount + else if PropName = 'FIELDDEFS' then + Result := frxInteger(_TDataSet.FieldDefs) + else if PropName = 'FIELDS' then + Result := frxInteger(_TDataSet.Fields) + else if PropName = 'FILTER' then + Result := _TDataSet.Filter + else if PropName = 'FILTERED' then + Result := _TDataSet.Filtered + else if PropName = 'FILTEROPTIONS' then + Result := FilterOptionsToInt(_TDataSet.FilterOptions) + else if PropName = 'ACTIVE' then + Result := _TDataSet.Active + end + else if ClassType = TParam then + begin + _TParam := TParam(Instance); + if PropName = 'BOUND' then + Result := _TParam.Bound + else if PropName = 'ISNULL' then + Result := _TParam.IsNull + else if PropName = 'TEXT' then + Result := _TParam.Text + else if PropName = 'ASBOOLEAN' then + Result := _TParam.AsBoolean + else if PropName = 'ASCURRENCY' then + Result := _TParam.AsCurrency + else if PropName = 'ASDATETIME' then + Result := _TParam.AsDateTime + else if PropName = 'ASFLOAT' then + Result := _TParam.AsFloat + else if PropName = 'ASINTEGER' then + Result := _TParam.AsInteger + else if PropName = 'ASDATE' then + Result := _TParam.AsDate + else if PropName = 'ASTIME' then + Result := _TParam.AsTime + else if PropName = 'ASSTRING' then + Result := _TParam.AsString + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +var + _TField: TField; + _TParam: TParam; + _TDataSet: TDataSet; + + function IntToFilterOptions(i: Integer): TFilterOptions; + begin + Result := []; + if (i and 1) <> 0 then + Result := Result + [foCaseInsensitive]; + if (i and 2) <> 0 then + Result := Result + [foNoPartialCompare]; + end; + +begin + if ClassType = TField then + begin + _TField := TField(Instance); + if PropName = 'ASBOOLEAN' then + _TField.AsBoolean := Value + else if PropName = 'ASCURRENCY' then + _TField.AsCurrency := Value + else if PropName = 'ASDATETIME' then + _TField.AsDateTime := Value + else if PropName = 'ASFLOAT' then + _TField.AsFloat := Value + else if PropName = 'ASINTEGER' then + _TField.AsInteger := Value + else if PropName = 'ASSTRING' then + _TField.AsString := Value + else if PropName = 'ASVARIANT' then + _TField.AsVariant := Value + else if PropName = 'VALUE' then + _TField.Value := Value + else if PropName = 'SIZE' then + _TField.Size := Value + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if PropName = 'FILTER' then + _TDataSet.Filter := Value + else if PropName = 'FILTERED' then + _TDataSet.Filtered := Value + else if PropName = 'FILTEROPTIONS' then + _TDataSet.FilterOptions := IntToFilterOptions(Value) + else if PropName = 'ACTIVE' then + _TDataSet.Active := Value + end + else if ClassType = TParam then + begin + _TParam := TParam(Instance); + if PropName = 'ASBOOLEAN' then + _TParam.AsBoolean := Value + else if PropName = 'ASCURRENCY' then + _TParam.AsCurrency := Value + else if PropName = 'ASDATETIME' then + _TParam.AsDateTime := Value + else if PropName = 'ASFLOAT' then + _TParam.AsFloat := Value + else if PropName = 'ASINTEGER' then + _TParam.AsInteger := Value + else if PropName = 'ASDATE' then + _TParam.AsDate := Value + else if PropName = 'ASTIME' then + _TParam.AsTime := Value + else if PropName = 'ASSTRING' then + _TParam.AsString := Value + else if PropName = 'BOUND' then + _TParam.Bound := Value + else if PropName = 'TEXT' then + _TParam.Text := Value + end +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsDBRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_idialogsrtti.pas b/FastScript/FMX.fs_idialogsrtti.pas new file mode 100644 index 0000000..0d12fba --- /dev/null +++ b/FastScript/FMX.fs_idialogsrtti.pas @@ -0,0 +1,133 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Dialogs.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_idialogsrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_iclassesrtti, FMX.Types +, FMX.Dialogs, System.UITypes, System.Types +{$IFDEF DELPHI19} +, FMX.Printer +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsDialogsRTTI = class(TComponent); // fake component + + +implementation + +type + THackDialog = class(TCommonDialog); + + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + +type + TWordSet = set of 0..15; + PWordSet = ^TWordSet; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +var + dlg: String; +begin + inherited Create(AScript); + with AScript do + begin + AddEnumSet('TOpenOptions', 'ofReadOnly, ofOverwritePrompt, ofHideReadOnly,' + + 'ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect,' + + 'ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt,' + + 'ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton,' + + 'ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, ofEnableIncludeNotify,' + + 'ofEnableSizing'); + AddEnum('TFileEditStyle', 'fsEdit, fsComboBox'); + AddEnumSet('TColorDialogOptions', 'cdFullOpen, cdPreventFullOpen, cdShowHelp,' + + 'cdSolidColor, cdAnyColor'); + AddEnumSet('TFontDialogOptions', 'fdAnsiOnly, fdTrueTypeOnly, fdEffects,' + + 'fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts,' + + 'fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts,' + + 'fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton'); + AddEnum('TFontDialogDevice', 'fdScreen, fdPrinter, fdBoth'); + AddEnum('TPrintRange', 'prAllPages, prSelection, prPageNums'); + AddEnumSet('TPrintDialogOptions', 'poPrintToFile, poPageNums, poSelection,' + + 'poWarning, poHelp, poDisablePrintToFile'); + AddEnum('TMsgDlgType', 'mtCustom, mtInformation, mtWarning, mtError, mtConfirmation'); + AddEnumSet('TMsgDlgButtons', 'mbNone, mbOk, mbCancel, mbYes, mbNo, mbAbort, ' + + 'mbRetry, mbIgnore'); + + + with AddClass(TCommonDialog, 'TComponent') do + AddMethod('function Execute: Boolean', CallMethod); + AddClass(TOpenDialog, 'TCommonDialog'); + AddClass(TSaveDialog, 'TCommonDialog'); + AddClass(TPrintDialog, dlg); + AddClass(TPrinterSetupDialog, dlg); + + AddMethod('function MessageDlg(Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer', CallMethod, 'ctOther'); + AddMethod('function InputBox(ACaption, APrompt, ADefault: string): string', CallMethod, 'ctOther'); + AddMethod('function InputQuery(ACaption, APrompt: string; var Value: string): Boolean', CallMethod, 'ctOther'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + s: String; + b: TMsgDlgButtons; +begin + Result := 0; + + if ClassType = TCommonDialog then + begin + if MethodName = 'EXECUTE' then + Result := THackDialog(Instance).Execute + end + else if MethodName = 'INPUTBOX' then + Result := InputBox(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'INPUTQUERY' then + begin + s := Caller.Params[2]; + Result := InputQuery(Caller.Params[0], Caller.Params[1], s); + Caller.Params[2] := s; + end + else if MethodName = 'MESSAGEDLG' then + begin + Word(PWordSet(@b)^) := Caller.Params[2]; + Result := MessageDlg(Caller.Params[0], Caller.Params[1], b, Caller.Params[3]); + end +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsDialogsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. \ No newline at end of file diff --git a/FastScript/FMX.fs_idisp.pas b/FastScript/FMX.fs_idisp.pas new file mode 100644 index 0000000..3ce8fda --- /dev/null +++ b/FastScript/FMX.fs_idisp.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ OLE dispatch module } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_idisp; +{$i FMX.inc} +{$i fs_idisp.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_ievents.pas b/FastScript/FMX.fs_ievents.pas new file mode 100644 index 0000000..2d6981e --- /dev/null +++ b/FastScript/FMX.fs_ievents.pas @@ -0,0 +1,379 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Standard events } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ievents; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Controls, FMX.Forms, System.UITypes, FMX.Types, + System.Types, System.Rtti, FMX.fs_iinterpreter, FMX.fs_iclassesrtti +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF}; + +type + + PDragObject = ^TDragObject; + TfsDragObject = class(TPersistent) + private + FDragObject: TDragObject; + FFiles: TStringList; + function GetStringList: TStringList; + public + function GetRect: TDragObject; + function GetRectP: PDragObject; + constructor Create(aDragObj: TDragObject); + destructor Destroy; override; + published + property Source: TObject read FDragObject.Source write FDragObject.Source; + property Data: {$IFDEF Delphi17}TValue{$ELSE}Variant{$ENDIF} read FDragObject.Data write FDragObject.Data; + property Files: TStringList read GetStringList; + end; + + TfsNotifyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject); + function GetMethod: Pointer; override; + end; + + TfsMouseEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Single); + function GetMethod: Pointer; override; + end; + + TfsMouseMoveEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Shift: TShiftState; X, Y: Single); + function GetMethod: Pointer; override; + end; + + TfsMouseWheelEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); + function GetMethod: Pointer; override; + end; + + TfsOnPaintEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); + function GetMethod: Pointer; override; + end; + + TfsCanFocusEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var ACanFocus: Boolean); + function GetMethod: Pointer; override; + end; + + TfsDragOverEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Accept: Boolean); + function GetMethod: Pointer; override; + end; + + TfsDragDropEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; const Data: TDragObject; const Point: TPointF); + function GetMethod: Pointer; override; + end; + + TfsKeyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState); + function GetMethod: Pointer; override; + end; + + TfsKeyPressEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Key: Char); + function GetMethod: Pointer; override; + end; + + TfsCloseEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Action: TCloseAction); + function GetMethod: Pointer; override; + end; + + TfsCloseQueryEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var CanClose: Boolean); + function GetMethod: Pointer; override; + end; + + TfsCanResizeEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var NewWidth, NewHeight: Integer; + var Resize: Boolean); + function GetMethod: Pointer; override; + end; + + +implementation + + +type + TByteSet = set of 0..7; + PByteSet = ^TByteSet; + + +{ TfsNotifyEvent } + +procedure TfsNotifyEvent.DoEvent(Sender: TObject); +begin + CallHandler([Sender]); +end; + +function TfsNotifyEvent.GetMethod: Pointer; +begin + Result := @TfsNotifyEvent.DoEvent; +end; + +{ TfsMouseEvent } + +procedure TfsMouseEvent.DoEvent(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Single); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, Integer(Button), b, X, Y]); +end; + +function TfsMouseEvent.GetMethod: Pointer; +begin + Result := @TfsMouseEvent.DoEvent; +end; + +{ TfsMouseMoveEvent } + +procedure TfsMouseMoveEvent.DoEvent(Sender: TObject; Shift: TShiftState; X, + Y: Single); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, b, X, Y]); +end; + +function TfsMouseMoveEvent.GetMethod: Pointer; +begin + Result := @TfsMouseMoveEvent.DoEvent; +end; + +{ TfsKeyEvent } + +procedure TfsKeyEvent.DoEvent(Sender: TObject; var Key: Word; + var KeyChar: WideChar; Shift: TShiftState); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, Key, KeyChar, b]); + Key := Handler.Params[1].Value; + KeyChar := WideChar(Cardinal(Handler.Params[2].Value)); +end; + +function TfsKeyEvent.GetMethod: Pointer; +begin + Result := @TfsKeyEvent.DoEvent; +end; + +{ TfsKeyPressEvent } + +procedure TfsKeyPressEvent.DoEvent(Sender: TObject; var Key: Char); +begin + CallHandler([Sender, Key]); + Key := String(Handler.Params[1].Value)[1]; +end; + +function TfsKeyPressEvent.GetMethod: Pointer; +begin + Result := @TfsKeyPressEvent.DoEvent; +end; + +{ TfsCloseEvent } + +procedure TfsCloseEvent.DoEvent(Sender: TObject; var Action: TCloseAction); +begin + CallHandler([Sender, Integer(Action)]); + Action := Handler.Params[1].Value; +end; + +function TfsCloseEvent.GetMethod: Pointer; +begin + Result := @TfsCloseEvent.DoEvent; +end; + +{ TfsCloseQueryEvent } + +procedure TfsCloseQueryEvent.DoEvent(Sender: TObject; var CanClose: Boolean); +begin + CallHandler([Sender, CanClose]); + CanClose := Handler.Params[1].Value; +end; + +function TfsCloseQueryEvent.GetMethod: Pointer; +begin + Result := @TfsCloseQueryEvent.DoEvent; +end; + +{ TfsCanResizeEvent } + +procedure TfsCanResizeEvent.DoEvent(Sender: TObject; var NewWidth, + NewHeight: Integer; var Resize: Boolean); +begin + CallHandler([Sender, NewWidth, NewHeight, Resize]); + NewWidth := Handler.Params[1].Value; + NewHeight := Handler.Params[2].Value; + Resize := Handler.Params[3].Value; +end; + +function TfsCanResizeEvent.GetMethod: Pointer; +begin + Result := @TfsCanResizeEvent.DoEvent; +end; + +{ TfsMouseWheelEvent } + +procedure TfsMouseWheelEvent.DoEvent(Sender: TObject; + Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, b, WheelDelta, Boolean(Handled)]); + Handled := Handler.Params[3].Value; +end; + +function TfsMouseWheelEvent.GetMethod: Pointer; +begin + Result := @TfsMouseWheelEvent.DoEvent; +end; + +{ TfsOnPaintEvent } + +procedure TfsOnPaintEvent.DoEvent(Sender: TObject; Canvas: TCanvas; + const ARect: TRectF); +var + r: TfsRectF; +begin + r := TfsRectF.Create(ARect); + CallHandler([Sender, Canvas, r]); + r.Free; +end; + +function TfsOnPaintEvent.GetMethod: Pointer; +begin + Result := @TfsOnPaintEvent.DoEvent; +end; + +{ TfsCanFocusEvent } + +procedure TfsCanFocusEvent.DoEvent(Sender: TObject; var ACanFocus: Boolean); +begin + CallHandler([Sender, ACanFocus]); + ACanFocus := Handler.Params[1].Value; +end; + +function TfsCanFocusEvent.GetMethod: Pointer; +begin + Result := @TfsCanFocusEvent.DoEvent; +end; + +{ TfsDragOverEvent } + +procedure TfsDragOverEvent.DoEvent(Sender: TObject; const Data: TDragObject; + const Point: TPointF; var Accept: Boolean); +var + dObj: TfsDragObject; +begin + dObj := TfsDragObject.Create(Data); + CallHandler([Sender, dObj, Accept]); + dObj.Free; + Accept := Handler.Params[3].Value; +end; + +function TfsDragOverEvent.GetMethod: Pointer; +begin + Result := @TfsDragOverEvent.DoEvent; +end; + +{ TfsDragObject } + +constructor TfsDragObject.Create(aDragObj: TDragObject); +var + idx: Integer; +begin + FFiles := TStringList.Create; + FDragObject.Source := aDragObj.Source; + FDragObject.Data := aDragObj.Data; + for idx := Low(FDragObject.Files) to High(FDragObject.Files) do + FFiles.Add(FDragObject.Files[idx]); +end; + +destructor TfsDragObject.Destroy; +begin + FFiles.Free; + inherited; +end; + +function TfsDragObject.GetRect: TDragObject; +var + idx: Integer; +begin + SetLength(FDragObject.Files, FFiles.Count); + for idx := 0 to FFiles.Count - 1 do + FDragObject.Files[idx] := FFiles.Strings[idx]; + Result := FDragObject; +end; + +function TfsDragObject.GetRectP: PDragObject; +var + idx: Integer; +begin + SetLength(FDragObject.Files, FFiles.Count); + for idx := 0 to FFiles.Count - 1 do + FDragObject.Files[idx] := FFiles.Strings[idx]; + Result := @FDragObject; +end; + +function TfsDragObject.GetStringList: TStringList; +begin + Result := FFiles; +end; + +{ TfsDragDropEvent } + +procedure TfsDragDropEvent.DoEvent(Sender: TObject; const Data: TDragObject; + const Point: TPointF); +var + dObj: TfsDragObject; + aPoint: TfsPointF; +begin + dObj := TfsDragObject.Create(Data); + aPoint := TfsPointF.Create(Point); + CallHandler([Sender, dObj, aPoint]); + dObj.Free; + aPoint.Free; +end; + +function TfsDragDropEvent.GetMethod: Pointer; +begin + Result := @TfsDragDropEvent.DoEvent; +end; + +end. \ No newline at end of file diff --git a/FastScript/FMX.fs_iexpression.pas b/FastScript/FMX.fs_iexpression.pas new file mode 100644 index 0000000..f429d38 --- /dev/null +++ b/FastScript/FMX.fs_iexpression.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Expression parser } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iexpression; +{$i FMX.inc} +{$i fs_iexpression.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_iextctrlsrtti.pas b/FastScript/FMX.fs_iextctrlsrtti.pas new file mode 100644 index 0000000..5bd17eb --- /dev/null +++ b/FastScript/FMX.fs_iextctrlsrtti.pas @@ -0,0 +1,268 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ ExtCtrls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iextctrlsrtti; + +interface + +{$i fs.inc} + +uses System.Types, System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_ievents, FMX.fs_iformsrtti +, FMX.ExtCtrls, FMX.ListBox, FMX.Objects, System.UITypes, FMX.Types, FMX.Controls, FMX.Layouts, + FMX.TabControl, FMX.TreeView +{$IFDEF DELPHI18} + , FMX.StdCtrls +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsExtCtrlsRTTI = class(TComponent); // fake component + + +implementation + +type + TfsTreeViewDragChange = class(TfsCustomEvent) + public + procedure DoEvent(SourceItem, DestItem: TTreeViewItem; var Allow: Boolean); + function GetMethod: Pointer; override; + end; + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TShapeType', 'stRectangle, stSquare, stRoundRect, stRoundSquare,' + + 'stEllipse, stCircle'); + AddEnum('TBevelStyle', 'bsLowered, bsRaised'); + AddEnum('TBevelShape', 'bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine,' + + 'bsRightLine, bsSpacer'); + AddEnum('TResizeStyle', 'rsNone, rsLine, rsUpdate, rsPattern'); + AddEnum('TButtonLayout', 'blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom'); + AddEnum('TButtonState', 'bsUp, bsDisabled, bsDown, bsExclusive'); + AddEnum('TButtonStyle', 'bsAutoDetect, bsWin31, bsNew'); + AddEnum('TBitBtnKind', 'bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo,' + + 'bkClose, bkAbort, bkRetry, bkIgnore, bkAll'); + AddType('TNumGlyphs', fvtInt); + AddEnum('TTabPosition', 'tpTop, tpBottom, tpLeft, tpRight'); + AddEnum('TTabStyle', 'tsTabs, tsButtons, tsFlatButtons'); + AddEnum('TStatusPanelStyle', 'psText, psOwnerDraw'); + AddEnum('TStatusPanelBevel', 'pbNone, pbLowered, pbRaised'); + AddEnum('TSortType', 'stNone, stData, stText, stBoth'); + AddEnum('TTrackBarOrientation', 'trHorizontal, trVertical'); + AddEnum('TTickMark', 'tmBottomRight, tmTopLeft, tmBoth'); + AddEnum('TTickStyle', 'tsNone, tsAuto, tsManual'); + AddEnum('TProgressBarOrientation', 'pbHorizontal, pbVertical'); + AddEnum('TIconArrangement', 'iaTop, iaLeft'); + AddEnum('TListArrangement', 'arAlignBottom, arAlignLeft, arAlignRight,' + + 'arAlignTop, arDefault, arSnapToGrid'); + AddEnum('TViewStyle', 'vsIcon, vsSmallIcon, vsList, vsReport'); + AddEnum('TToolButtonStyle', 'tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider'); + AddEnum('TDateTimeKind', 'dtkDate, dtkTime'); + AddEnum('TDTDateMode', 'dmComboBox, dmUpDown'); + AddEnum('TDTDateFormat', 'dfShort, dfLong'); + AddEnum('TDTCalAlignment', 'dtaLeft, dtaRight'); + AddEnum('TCalDayOfWeek', 'dowMonday, dowTuesday, dowWednesday, dowThursday,' + + 'dowFriday, dowSaturday, dowSunday, dowLocaleDefault'); + + + with AddClass(TPaintBox, 'TControl') do + AddEvent('OnPaint', TfsNotifyEvent); + AddClass(TImage, 'TControl'); + with AddClass(TTimer, 'TComponent') do + AddEvent('OnTimer', TfsNotifyEvent); + + AddClass(TTabItem, 'TTextControl'); + with AddClass(TTabControl, 'TStyledControl') do + begin + AddIndexProperty( 'Tabs', 'Integer', 'TTabItem', CallMethod); + AddEvent('OnChange', TfsNotifyEvent); + AddProperty('TabCount', 'Integer', GetProp, nil); + AddProperty('ActiveTab', 'TTabItem', GetProp, SetProp); + end; + + with AddClass(TTreeViewItem, 'TTextControl') do + begin + AddMethod('function ItemByPoint(const X, Y: Single): TTreeViewItem', CallMethod); + AddMethod('function ItemByIndex(const Idx: Integer): TTreeViewItem', CallMethod); + AddMethod('function TreeView: TCustomTreeView', CallMethod); + AddMethod('function Level: Integer', CallMethod); + AddMethod('function ParentItem: TTreeViewItem', CallMethod); + AddIndexProperty( 'Items', 'Integer', 'TTreeViewItem', CallMethod); + AddProperty('GlobalIndex', 'Integer', GetProp, SetProp); + AddProperty('Count', 'Integer', GetProp, nil); + end; + with AddClass(TTreeView, 'TScrollBox') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure CollapseAll', CallMethod); + AddMethod('procedure ExpandAll', CallMethod); + AddMethod('function ItemByText(const AText: string): TTreeViewItem', CallMethod); + AddMethod('function ItemByPoint(const X, Y: Single): TTreeViewItem', CallMethod); + AddMethod('function ItemByIndex(const Idx: Integer): TTreeViewItem', CallMethod); + AddMethod('function ItemByGlobalIndex(const Idx: Integer): TTreeViewItem', CallMethod); + AddIndexProperty('Items', 'Integer', 'TTreeViewItem', CallMethod); + AddProperty('Selected', 'TTreeViewItem', GetProp, SetProp); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('GlobalCount', 'Integer', GetProp, nil); + AddProperty('CountExpanded', 'Integer', GetProp, nil); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnChangeCheck', TfsNotifyEvent); + AddEvent('OnDragChange', TfsTreeViewDragChange); + end; + + { TODO ADD necessary methods for these calasses } + //AddClass(TCalendar, 'TStyledControl'); + //AddClass(TCalendarBox, 'TTextControl'); + // AddClass(TCalendarEdit, 'TCustomEdit'); + AddClass(TImageViewer, 'TScrollBox'); + AddClass(TPlotGrid, 'TControl'); + AddClass(TDropTarget, 'TTextControl'); + AddClass(TCornerButton, 'TCustomButton'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + if ClassType = TTabControl then + begin + if MethodName = 'TABS.GET' then + Result := frxInteger(TTabControl(Instance).Tabs[Caller.Params[0]]) + end + else if ClassType = TTreeViewItem then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TTreeViewItem(Instance).Items[Caller.Params[0]]) + else if MethodName = 'ITEMBYPOINT' then + Result := frxInteger(TTreeViewItem(Instance).ItemByPoint(Single(Caller.Params[0]), Single(Caller.Params[1]))) + else if MethodName = 'ITEMBYINDEX' then + Result := frxInteger(TTreeViewItem(Instance).ItemByIndex(Caller.Params[0])) + else if MethodName = 'TREEVIEW' then + Result := frxInteger(TTreeViewItem(Instance).TreeView) + else if MethodName = 'LEVEL' then + Result := Integer(TTreeViewItem(Instance).Level) + else if MethodName = 'PARENTITEM' then + Result := frxInteger(TTreeViewItem(Instance).ParentItem) + end + else if ClassType = TTreeView then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TTreeView(Instance).Items[Caller.Params[0]]) + else if MethodName = 'ITEMBYPOINT' then + Result := frxInteger(TTreeView(Instance).ItemByPoint(Single(Caller.Params[0]), Single(Caller.Params[1]))) + else if MethodName = 'ITEMBYINDEX' then + Result := frxInteger(TTreeView(Instance).ItemByIndex(Caller.Params[0])) + else if MethodName = 'ITEMBYTEXT' then + Result := frxInteger(TTreeView(Instance).ItemByText(String(Caller.Params[0]))) + else if MethodName = 'ITEMBYGLOBALINDEX' then + Result := frxInteger(TTreeView(Instance).ItemByGlobalIndex(Caller.Params[0])) + else if MethodName = 'CLEAR' then + TTreeView(Instance).Clear + else if MethodName = 'COLLAPSEALL' then + TTreeView(Instance).CollapseAll + else if MethodName = 'EXPANDALL' then + TTreeView(Instance).ExpandAll + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + if ClassType = TTabControl then + begin + if PropName = 'TABCOUNT' then + Result := TTabControl(Instance).TabCount + else if PropName = 'ACTIVETAB' then + Result := frxInteger(TTabControl(Instance).ActiveTab) + end + else if ClassType = TTreeViewItem then + begin + if PropName = 'GLOBALINDEX' then + Result := TTreeViewItem(Instance).GlobalIndex + else if PropName = 'COUNT' then + Result := TTreeViewItem(Instance).Count + end + else if ClassType = TTreeView then + begin + if PropName = 'SELECTED' then + Result := frxInteger(TTreeView(Instance).Selected) + else if PropName = 'COUNT' then + Result := TTreeView(Instance).Count + else if PropName = 'GLOBALCOUNT' then + Result := TTreeView(Instance).GlobalCount + else if PropName = 'COUNTEXPANDED' then + Result := TTreeView(Instance).CountExpanded + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TTabControl then + begin + if PropName = 'ACTIVETAB' then + TTabControl(Instance).ActiveTab := TTabItem(frxInteger(Value)) + end + else if ClassType = TTreeViewItem then + begin +// if PropName = 'GLOBALINDEX' then +// TTreeViewItem(Instance).GlobalIndex := Value + end + else if ClassType = TTreeView then + begin + if PropName = 'SELECTED' then + TTreeView(Instance).Selected := TTreeViewItem(frxInteger(Value)) + end +end; + +{ TfsTreeViewDragChange } + +procedure TfsTreeViewDragChange.DoEvent(SourceItem, DestItem: TTreeViewItem; + var Allow: Boolean); +begin + CallHandler([SourceItem, DestItem, Allow]); + Allow := Handler.Params[2].Value; +end; + +function TfsTreeViewDragChange.GetMethod: Pointer; +begin + Result := @TfsTreeViewDragChange.DoEvent; +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsExtCtrlsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_iformsrtti.pas b/FastScript/FMX.fs_iformsrtti.pas new file mode 100644 index 0000000..6edb4c0 --- /dev/null +++ b/FastScript/FMX.fs_iformsrtti.pas @@ -0,0 +1,864 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Forms and StdCtrls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iformsrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_ievents, FMX.fs_iclassesrtti, + FMX.fs_igraphicsrtti, FMX.Types, FMX.Controls, FMX.Forms, System.UITypes, System.Types, + FMX.Edit, FMX.Memo, FMX.ListBox, FMX.Layouts +{$IFDEF DELPHI18} + , FMX.StdCtrls +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI28} + , FMX.BaseTypeAliases, FMX.FormTypeAliases +{$ENDIF} + ; + +type +{$i frxPlatformsAttribute.inc} + TfsFormsRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddConst('mrNone', 'Integer', mrNone); + AddConst('mrOk', 'Integer', mrOk); + AddConst('mrCancel', 'Integer', mrCancel); + AddConst('mrAbort', 'Integer', mrAbort); + AddConst('mrRetry', 'Integer', mrRetry); + AddConst('mrIgnore', 'Integer', mrIgnore); + AddConst('mrYes', 'Integer', mrYes); + AddConst('mrNo', 'Integer', mrNo); + AddConst('mrAll', 'Integer', mrAll); + AddConst('mrNoToAll', 'Integer', mrNoToAll); + AddConst('mrYesToAll', 'Integer', mrYesToAll); + + AddConst('crDefault', 'Integer', crDefault); + AddConst('crNone', 'Integer', crNone); + AddConst('crArrow', 'Integer', crArrow); + AddConst('crCross', 'Integer', crCross); + AddConst('crIBeam', 'Integer', crIBeam); + AddConst('crSize', 'Integer', crSize); + AddConst('crSizeNESW', 'Integer', crSizeNESW); + AddConst('crSizeNS', 'Integer', crSizeNS); + AddConst('crSizeNWSE', 'Integer', crSizeNWSE); + AddConst('crSizeWE', 'Integer', crSizeWE); + AddConst('crUpArrow', 'Integer', crUpArrow); + AddConst('crHourGlass', 'Integer', crHourGlass); + AddConst('crDrag', 'Integer', crDrag); + AddConst('crNoDrop', 'Integer', crNoDrop); + AddConst('crHSplit', 'Integer', crHSplit); + AddConst('crVSplit', 'Integer', crVSplit); + AddConst('crMultiDrag', 'Integer', crMultiDrag); + AddConst('crSQLWait', 'Integer', crSQLWait); + AddConst('crNo', 'Integer', crNo); + AddConst('crAppStart', 'Integer', crAppStart); + AddConst('crHelp', 'Integer', crHelp); + AddConst('crHandPoint', 'Integer', crHandPoint); + AddConst('crSizeAll', 'Integer', crSizeAll); + +{$IFDEF CLX} + AddConst('bsNone', 'Integer', fbsNone); + AddConst('bsSingle', 'Integer', fbsSingle); + AddConst('bsSizeable', 'Integer', fbsSizeable); + AddConst('bsDialog', 'Integer', fbsDialog); + AddConst('bsToolWindow', 'Integer', fbsToolWindow); + AddConst('bsSizeToolWin', 'Integer', fbsSizeToolWin); +{$ELSE} + AddConst('bsNone', 'Integer', TFmxFormBorderStyle.bsNone); + AddConst('bsSingle', 'Integer', TFmxFormBorderStyle.bsSingle); + AddConst('bsSizeable', 'Integer', TFmxFormBorderStyle.bsSizeable); + AddConst('bsToolWindow', 'Integer', TFmxFormBorderStyle.bsToolWindow); + AddConst('bsSizeToolWin', 'Integer', TFmxFormBorderStyle.bsSizeToolWin); +{$ENDIF} + + AddConst('VK_RBUTTON', 'Integer', VKRBUTTON); + AddConst('VKCANCEL', 'Integer', VKCANCEL); + AddConst('VKMBUTTON', 'Integer', VKMBUTTON); + AddConst('VKBACK', 'Integer', VKBACK);//Backspace key + AddConst('VKTAB', 'Integer', VKTAB);//Tab key + AddConst('VKRETURN', 'Integer', VKRETURN);//Enter key + AddConst('VKSHIFT', 'Integer', VKSHIFT);//Shift key + AddConst('VKCONTROL', 'Integer', VKCONTROL);//Ctrl key + AddConst('VKMENU', 'Integer', VKMENU);//Alt key + AddConst('VKPAUSE', 'Integer', VKPAUSE);//Pause key + AddConst('VKCAPITAL', 'Integer', VKCAPITAL);//Caps Lock key + AddConst('VKESCAPE', 'Integer', VKESCAPE);//Esc key + AddConst('VKSPACE', 'Integer', VKSPACE);//Space bar + AddConst('VKPRIOR', 'Integer', VKPRIOR);//Page Up key + AddConst('VKNEXT', 'Integer', VKNEXT);// Page Down key + AddConst('VKEND', 'Integer', VKEND);// End key + AddConst('VKHOME', 'Integer', VKHOME);// Home key + AddConst('VKLEFT', 'Integer', VKLEFT);// Left Arrow key + AddConst('VKUP', 'Integer', VKUP);// Up Arrow key + AddConst('VKRIGHT', 'Integer', VKRIGHT);// Right Arrow key + AddConst('VKDOWN', 'Integer', VKDOWN);// Down Arrow key + AddConst('VKINSERT', 'Integer', VKINSERT);// Insert key + AddConst('VKDELETE', 'Integer', VKDELETE);// Delete key + AddConst('VKHELP', 'Integer', VKHELP);// Help key + AddConst('VKLWIN', 'Integer', VKLWIN);// Left Windows key (Microsoft keyboard) + AddConst('VKRWIN', 'Integer', VKRWIN);// Right Windows key (Microsoft keyboard) + AddConst('VKAPPS', 'Integer', VKAPPS);// Applications key (Microsoft keyboard) + AddConst('VKNUMPAD0', 'Integer', VKNUMPAD0);// 0 key (numeric keypad) + AddConst('VKNUMPAD1', 'Integer', VKNUMPAD1);// 1 key (numeric keypad) + AddConst('VKNUMPAD2', 'Integer', VKNUMPAD2);// 2 key (numeric keypad) + AddConst('VKNUMPAD3', 'Integer', VKNUMPAD3);// 3 key (numeric keypad) + AddConst('VKNUMPAD4', 'Integer', VKNUMPAD4);// 4 key (numeric keypad) + AddConst('VKNUMPAD5', 'Integer', VKNUMPAD5);// 5 key (numeric keypad) + AddConst('VKNUMPAD6', 'Integer', VKNUMPAD6);// 6 key (numeric keypad) + AddConst('VKNUMPAD7', 'Integer', VKNUMPAD7);// 7 key (numeric keypad) + AddConst('VKNUMPAD8', 'Integer', VKNUMPAD8);// 8 key (numeric keypad) + AddConst('VKNUMPAD9', 'Integer', VKNUMPAD9);// 9 key (numeric keypad) + AddConst('VKMULTIPLY', 'Integer', VKMULTIPLY);// Multiply key (numeric keypad) + AddConst('VKADD', 'Integer', VKADD);// Add key (numeric keypad) + AddConst('VKSEPARATOR', 'Integer', VKSEPARATOR);// Separator key (numeric keypad) + AddConst('VKSUBTRACT', 'Integer', VKSUBTRACT);// Subtract key (numeric keypad) + AddConst('VKDECIMAL', 'Integer', VKDECIMAL);// Decimal key (numeric keypad) + AddConst('VKDIVIDE', 'Integer', VKDIVIDE);// Divide key (numeric keypad) + AddConst('VKF1', 'Integer', VKF1);// F1 key + AddConst('VKF2', 'Integer', VKF2);// F2 key + AddConst('VKF3', 'Integer', VKF3);// F3 key + AddConst('VKF4', 'Integer', VKF4);// F4 key + AddConst('VKF5', 'Integer', VKF5);// F5 key + AddConst('VKF6', 'Integer', VKF6);// F6 key + AddConst('VKF7', 'Integer', VKF7);// F7 key + AddConst('VKF8', 'Integer', VKF8);// F8 key + AddConst('VKF9', 'Integer', VKF9);// F9 key + AddConst('VKF10', 'Integer', VKF10);// F10 key + AddConst('VKF11', 'Integer', VKF11);// F11 key + AddConst('VKF12', 'Integer', VKF12);// F12 key + AddConst('VKNUMLOCK', 'Integer', VKNUMLOCK);// Num Lock key + AddConst('VKSCROLL', 'Integer', VKSCROLL);// Scroll Lock key + + AddConst('crDefault', 'Integer', crDefault); + AddConst('crNone', 'Integer', crNone); + AddConst('crArrow', 'Integer', crArrow); + AddConst('crCross', 'Integer', crCross); + AddConst('crIBeam', 'Integer', crIBeam); + AddConst('crSize', 'Integer', crSize); + AddConst('crSizeNESW', 'Integer', crSizeNESW); + AddConst('crSizeNS', 'Integer', crSizeNS); + AddConst('crSizeNWSE', 'Integer', crSizeNWSE); + AddConst('crSizeWE', 'Integer', crSizeWE); + AddConst('crUpArrow', 'Integer', crUpArrow); + AddConst('crHourGlass', 'Integer', crHourGlass); + AddConst('crDrag', 'Integer', crDrag); + AddConst('crNoDrop', 'Integer', crNoDrop); + AddConst('crHSplit', 'Integer', crHSplit); + AddConst('crVSplit', 'Integer', crVSplit); + AddConst('crMultiDrag', 'Integer', crMultiDrag); + AddConst('crSQLWait', 'Integer', crSQLWait); + AddConst('crNo', 'Integer', crNo); + AddConst('crAppStart', 'Integer', crAppStart); + AddConst('crHelp', 'Integer', crHelp); + AddConst('crHandPoint', 'Integer', crHandPoint); + AddConst('crSizeAll', 'Integer', crSizeAll); + + AddType('TFormBorderStyle', fvtInt); + AddType('TBorderStyle', fvtInt); + + AddEnumSet('TShiftState', 'ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand'); + AddEnum('TAniIndicatorStyle', 'aiLinear, aiCircular'); + AddEnum('TAlign', 'alNone, alTop, alBottom, alLeft, alRight, alClient'); + AddEnum('TMouseButton', 'mbLeft, mbRight, mbMiddle'); + AddEnumSet('TAnchors', 'akLeft, akTop, akRight, akBottom'); + AddEnum('TBevelCut', 'bvNone, bvLowered, bvRaised, bvSpace'); + AddEnum('TTextLayout', 'tlTop, tlCenter, tlBottom'); + AddEnum('TEditCharCase', 'ecNormal, ecUpperCase, ecLowerCase'); + AddEnum('TScrollStyle', 'ssNone, ssHorizontal, ssVertical, ssBoth'); + AddEnum('TComboBoxStyle', 'csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable'); + AddEnum('TCheckBoxState', 'cbUnchecked, cbChecked, cbGrayed'); + AddEnum('TListBoxStyle', 'lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable'); + AddEnum('TWindowState', 'wsNormal, wsMinimized, wsMaximized'); + AddEnum('TFormStyle', 'fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop'); + AddEnumSet('TBorderIcons', 'biSystemMenu, biMinimize, biMaximize, biHelp'); + AddEnum('TFormPosition', 'poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter'); + AddEnum('TCloseAction', 'caNone, caHide, caFree, caMinimize'); + + with AddClass(TControl, 'TFmxObject') do + begin + AddMethod('procedure AddObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure RemoveObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure SetBounds(X: Single; Y: Single; AWidth: Single; AHeight: Single)', CallMethod); + AddMethod('function AbsoluteToLocal(P: TfsPointF): TfsPointF', CallMethod); + AddMethod('function LocalToAbsolute(P: TfsPointF): TfsPointF', CallMethod); + AddMethod('function AbsoluteToLocalVector(P: TfsVector): TfsVector', CallMethod); + AddMethod('function LocalToAbsoluteVector(P: TfsVector): TfsVector', CallMethod); + AddMethod('function PointInObject(X: Single; Y: Single): Boolean', CallMethod); + AddMethod('procedure BeginUpdate()', CallMethod); + AddMethod('procedure EndUpdate()', CallMethod); +{$IFNDEF DELPHI18} + AddMethod('procedure ApplyEffect()', CallMethod); +{$ENDIF} + AddMethod('procedure UpdateEffects()', CallMethod); + AddMethod('procedure SetFocus()', CallMethod); + AddMethod('procedure PaintTo(ACanvas: TCanvas; ARect: TFsRectF; AParent: TFmxObject)', CallMethod); + AddMethod('procedure Repaint()', CallMethod); + AddMethod('procedure InvalidateRect(ARect: TfsRectF)', CallMethod); + AddMethod('procedure Lock()', CallMethod); + AddProperty('AbsoluteMatrix', 'TfsMatrix', GetProp, nil); + AddProperty('AbsoluteOpacity', 'Single', GetProp, nil); + AddProperty('AbsoluteWidth', 'Single', GetProp, nil); + AddProperty('AbsoluteHeight', 'Single', GetProp, nil); + AddProperty('AbsoluteScale', 'TfsPointF', GetProp, nil); + AddProperty('AbsoluteEnabled', 'Boolean', GetProp, nil); + AddProperty('HasEffect', 'Boolean', GetProp, nil); + AddProperty('HasDisablePaintEffect', 'Boolean', GetProp, nil); + AddProperty('HasAfterPaintEffect', 'Boolean', GetProp, nil); + AddProperty('ChildrenRect', 'TfsRectF', GetProp, nil); + AddProperty('InvertAbsoluteMatrix', 'TfsMatrix', GetProp, nil); + AddProperty('InPaintTo', 'Boolean', GetProp, nil); + AddProperty('LocalRect', 'TfsRectF', GetProp, nil); + AddProperty('AbsoluteRect', 'TfsRectF', GetProp, nil); + AddProperty('UpdateRect', 'TfsRectF', GetProp, nil); + AddProperty('ParentedRect', 'TfsRectF', GetProp, nil); + AddProperty('ParentedVisible', 'Boolean', GetProp, nil); + AddProperty('ClipRect', 'TfsRectF', GetProp, nil); + AddProperty('Canvas', 'TCanvas', GetProp, nil); + AddProperty('AutoCapture', 'Boolean', GetProp, SetProp); + AddProperty('CanFocus', 'Boolean', GetProp, SetProp); + AddProperty('DisableFocusEffect', 'Boolean', GetProp, SetProp); + AddProperty('TabOrder', 'Integer', GetProp, SetProp); + AddProperty('BoundsRect', 'TfsRectF', GetProp, SetProp); + AddEvent('OnDragEnter', TfsDragDropEvent); + AddEvent('OnDragLeave', TfsNotifyEvent); + AddEvent('OnDragOver', TfsDragOverEvent); + AddEvent('OnDragDrop', TfsDragDropEvent); + AddEvent('OnDragEnd', TfsNotifyEvent); + AddEvent('OnKeyDown', TfsKeyEvent); + AddEvent('OnKeyUp', TfsKeyEvent); + AddEvent('OnClick', TfsNotifyEvent); + AddEvent('OnDblClick', TfsNotifyEvent); + AddEvent('OnCanFocus', TfsCanFocusEvent); + AddEvent('OnEnter', TfsNotifyEvent); + AddEvent('OnExit', TfsNotifyEvent); + AddEvent('OnMouseDown', TfsMouseEvent); + AddEvent('OnMouseMove', TfsMouseMoveEvent); + AddEvent('OnMouseUp', TfsMouseEvent); + AddEvent('OnMouseWheel', TfsMouseWheelEvent); + AddEvent('OnMouseEnter', TfsNotifyEvent); + AddEvent('OnMouseLeave', TfsNotifyEvent); + AddEvent('OnPainting', TfsOnPaintEvent); + AddEvent('OnPaint', TfsOnPaintEvent); + AddEvent('OnResize', TfsNotifyEvent); + AddEvent('OnApplyStyleLookup', TfsNotifyEvent); + end; + + { standard controls } + with AddClass(TStyledControl, 'TControl') do + begin + AddMethod('function FindStyleResource(AStyleLookup: string): TFmxObject', CallMethod); + AddMethod('procedure ApplyStyleLookup()', CallMethod); +{$IFNDEF DELPHI20} + AddMethod('procedure UpdateStyle()', CallMethod); +{$ENDIF} + AddProperty('StyleLookup', 'String', GetProp, SetProp); + end; + + AddClass(TStyledControl, 'TControl'); + AddClass(TTextControl, 'TStyledControl'); + AddClass(TPanel, 'TStyledControl'); + AddClass(TCalloutPanel, 'TPanel'); + AddClass(TLabel, 'TTextControl'); + AddClass(TCustomButton, 'TTextControl'); + AddClass(TButton, 'TCustomButton'); + AddClass(TSpeedButton, 'TCustomButton'); + with AddClass(TCheckBox, 'TTextControl') do + AddEvent('OnChange', TfsNotifyEvent); + + with AddClass(TRadioButton, 'TTextControl') do + AddEvent('OnChange', TfsNotifyEvent); + AddClass(TGroupBox, 'TTextControl'); + AddClass(TStatusBar, 'TStyledControl'); + AddClass(TToolBar, 'TStyledControl'); + AddClass(TSizeGrip, 'TStyledControl'); + AddClass(TSplitter, 'TStyledControl'); + AddClass(TProgressBar, 'TStyledControl'); + AddClass(TThumb, 'TStyledControl'); + with AddClass(TCustomTrack, 'TStyledControl') do + begin + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnTracking', TfsNotifyEvent); + end; + AddClass(TTrack, 'TCustomTrack'); + AddClass(TTrackBar, 'TCustomTrack'); + AddClass(TBitmapTrackBar, 'TTrackBar'); + with AddClass(TSwitch, 'TCustomTrack') do + AddEvent('OnSwitch', TfsNotifyEvent); + with AddClass(TScrollBar, 'TStyledControl') do + AddEvent('OnChange', TfsNotifyEvent); + + AddClass(TSmallScrollBar, 'TScrollBar'); + AddClass(TAniIndicator, 'TStyledControl'); + with AddClass(TArcDial, 'TStyledControl') do + AddEvent('OnChange', TfsNotifyEvent); + AddClass(TExpanderButton, 'TCustomButton'); + with AddClass(TExpander, 'TTextControl') do + AddEvent('OnCheckChange', TfsNotifyEvent); + with AddClass(TImageControl, 'TStyledControl') do + AddEvent('OnChange', TfsNotifyEvent); + AddClass(TPathLabel, 'TStyledControl'); + + + with AddClass(TCustomEdit, 'TStyledControl') do + begin +{$IFNDEF Delphi21} + AddMethod('procedure ClearSelection()', CallMethod); +{$ENDIF} + AddMethod('procedure CopyToClipboard()', CallMethod); + AddMethod('procedure CutToClipboard()', CallMethod); + AddMethod('procedure PasteFromClipboard()', CallMethod); + AddMethod('procedure SelectAll()', CallMethod); +{$IFNDEF Delphi21} + AddMethod('function GetCharX(a: Integer): Single', CallMethod); + AddMethod('function ContentRect(): TfsRectF', CallMethod); +{$ENDIF} + AddProperty('CaretPosition', 'Integer', GetProp, SetProp); + AddProperty('SelStart', 'Integer', GetProp, SetProp); + AddProperty('SelLength', 'Integer', GetProp, SetProp); + AddProperty('SelText', 'string', GetProp, nil); + AddProperty('MaxLength', 'Integer', GetProp, SetProp); + AddProperty('SelectionFill', 'TBrush', GetProp, nil); + AddProperty('FilterChar', 'string', GetProp, SetProp); + AddProperty('Typing', 'Boolean', GetProp, SetProp); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnChangeTracking', TfsNotifyEvent); + AddEvent('OnTyping', TfsNotifyEvent); + end; + AddClass(TEdit, 'TCustomEdit'); + with AddClass(TMemo, 'TScrollBox') do + begin + AddMethod('procedure CopyToClipboard()', CallMethod); + AddMethod('procedure PasteFromClipboard()', CallMethod); + AddMethod('procedure CutToClipboard()', CallMethod); + AddMethod('procedure ClearSelection()', CallMethod); + AddMethod('procedure SelectAll()', CallMethod); + AddMethod('procedure GoToTextEnd()', CallMethod); + AddMethod('procedure GoToTextBegin()', CallMethod); + AddMethod('procedure GotoLineEnd()', CallMethod); + AddMethod('procedure GoToLineBegin()', CallMethod); + AddMethod('procedure UnDo()', CallMethod); + AddProperty('SelStart', 'Integer', GetProp, SetProp); + AddProperty('SelLength', 'Integer', GetProp, SetProp); + AddProperty('SelText', 'string', GetProp, nil); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnChangeTracking', TfsNotifyEvent); + end; + + AddClass(TRadioButton, 'TTextControl'); + with AddClass(TListBoxItem, 'TTextControl') do + begin + AddProperty('Data', 'TObject', GetProp, SetProp); + AddProperty('Index', 'Integer', GetProp, SetProp); + end; + + with AddClass(TCustomListBox, 'TScrollBox') do + begin + AddMethod('procedure Clear()', CallMethod); + AddMethod('function DragChange(SourceItem: TListBoxItem; DestItem: TListBoxItem): Boolean', CallMethod); + AddMethod('procedure SelectAll()', CallMethod); + AddMethod('procedure ClearSelection()', CallMethod); + AddMethod('procedure SelectRange(Item1: TListBoxItem; Item2: TListBoxItem)', CallMethod); + AddMethod('function ItemByPoint(X: Single; Y: Single): TListBoxItem', CallMethod); + AddMethod('function ItemByIndex(Idx: Integer): TListBoxItem', CallMethod); + AddMethod('procedure Exchange(Item1: TListBoxItem; Item2: TListBoxItem)', CallMethod); + AddMethod('procedure AddObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure InsertObject(Index: Integer; AObject: TFmxObject)', CallMethod); + AddMethod('procedure RemoveObject(AObject: TFmxObject)', CallMethod); + AddIndexProperty( 'ListItems', 'Integer', 'TListBoxItem', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('Selected', 'TListBoxItem', GetProp, nil); + AddProperty('Items', 'TStrings', GetProp, SetProp); + AddProperty('ItemIndex', 'Integer', GetProp, SetProp); + end; + + AddClass(TListBox, 'TCustomListBox'); + with AddClass(TCustomComboBox, 'TStyledControl') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure DropDown', CallMethod); + AddIndexProperty( 'ListItems', 'Integer', 'TListBoxItem', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('Selected', 'TListBoxItem', GetProp, nil); + AddProperty('Items', 'TStrings', GetProp, SetProp); + AddProperty('ItemIndex', 'Integer', GetProp, SetProp); + AddEvent('OnDropDown', TfsNotifyEvent); + AddEvent('OnCloseUp', TfsNotifyEvent); + end; + + with AddClass(TComboBox, 'TCustomComboBox') do + AddEvent('OnChange', TfsNotifyEvent); + + with AddClass(TCommonCustomForm, 'TFmxObject') do + begin + AddConstructor('constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0)', CallMethod); + AddMethod('procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer)', CallMethod); + AddMethod('function ClientToScreen(Point: TfsPointF): TfsPointF', CallMethod); + AddMethod('function ScreenToClient(Point: TfsPointF): TfsPointF', CallMethod); + AddMethod('function CloseQuery(): Boolean', CallMethod); + AddMethod('function ClientRect(): TfsRectF', CallMethod); + AddMethod('procedure Release()', CallMethod); + AddMethod('procedure Close()', CallMethod); + AddMethod('procedure Show()', CallMethod); + AddMethod('procedure Hide()', CallMethod); + AddMethod('function ShowModal(): Integer', CallMethod); + AddMethod('procedure CloseModal()', CallMethod); + AddMethod('procedure Invalidate()', CallMethod); + AddMethod('procedure BeginUpdate()', CallMethod); + AddMethod('procedure EndUpdate()', CallMethod); + end; + + with AddClass(TCustomForm, 'TCommonCustomForm') do + begin + AddEvent('OnActivate', TfsNotifyEvent); + AddEvent('OnClose', TfsCloseEvent); + AddEvent('OnCloseQuery', TfsCloseQueryEvent); + AddEvent('OnCreate', TfsNotifyEvent); + AddEvent('OnDestroy', TfsNotifyEvent); + AddEvent('OnDeactivate', TfsNotifyEvent); + AddEvent('OnHide', TfsNotifyEvent); + AddEvent('OnPaint', TfsNotifyEvent); + AddEvent('OnShow', TfsNotifyEvent); + AddEvent('OnResize', TfsNotifyEvent); + AddProperty('Canvas', 'TCanvas', GetProp, nil); + AddProperty('ModalResult', 'Integer', GetProp, SetProp); + end; + AddClass(TForm, 'TCustomForm'); + + AddClass(TDataModule, 'TComponent'); + with AddClass(TApplication, 'TComponent') do + begin + AddMethod('procedure ProcessMessages', CallMethod); + end; + AddObject('Application', Application); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + Form: TCommonCustomForm; +begin + Result := 0; + + if ClassType = TControl then + begin + if MethodName = 'ADDOBJECT' then + TControl(Instance).AddObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'REMOVEOBJECT' then + TControl(Instance).RemoveObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'SETBOUNDS' then + TControl(Instance).SetBounds(Single(Caller.Params[0]), Single(Caller.Params[1]), Single(Caller.Params[2]), Single(Caller.Params[3])) + else if MethodName = 'ABSOLUTETOLOCAL' then + Result := frxInteger(TfsPointF.Create(TControl(Instance).AbsoluteToLocal(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'LOCALTOABSOLUTE' then + Result := frxInteger(TfsPointF.Create(TControl(Instance).LocalToAbsolute(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'ABSOLUTETOLOCALVECTOR' then + Result := frxInteger(TfsVector.Create(TControl(Instance).AbsoluteToLocalVector(TfsVector(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'LOCALTOABSOLUTEVECTOR' then + Result := frxInteger(TfsVector.Create(TControl(Instance).LocalToAbsoluteVector(TfsVector(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'POINTINOBJECT' then + Result := Boolean(TControl(Instance).PointInObject(Single(Caller.Params[0]), Single(Caller.Params[1]))) + else if MethodName = 'BEGINUPDATE' then + TControl(Instance).BeginUpdate() + else if MethodName = 'ENDUPDATE' then + TControl(Instance).EndUpdate() +{$IFNDEF DELPHI18} + else if MethodName = 'APPLYEFFECT' then + TControl(Instance).ApplyEffect() +{$ENDIF} + else if MethodName = 'UPDATEEFFECTS' then + TControl(Instance).UpdateEffects() + else if MethodName = 'SETFOCUS' then + TControl(Instance).SetFocus() + else if MethodName = 'PAINTTO' then + TControl(Instance).PaintTo(TCanvas(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, TFmxObject(frxInteger(Caller.Params[2]))) + else if MethodName = 'REPAINT' then + TControl(Instance).Repaint() + else if MethodName = 'INVALIDATERECT' then + TControl(Instance).InvalidateRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect) + else if MethodName = 'LOCK' then + TControl(Instance).Lock() + end + else if ClassType = TStyledControl then + begin + if MethodName = 'FINDSTYLERESOURCE' then + Result := frxInteger(TStyledControl(Instance).FindStyleResource(String(Caller.Params[0]))) + else if MethodName = 'APPLYSTYLELOOKUP' then + TStyledControl(Instance).ApplyStyleLookup() +{$IFNDEF DELPHI20} + else if MethodName = 'UPDATESTYLE' then + TStyledControl(Instance).UpdateStyle() +{$ENDIF} + end + else if ClassType = TCustomEdit then + begin + {$IFNDEF Delphi21} + if MethodName = 'CLEARSELECTION' then + TCustomEdit(Instance).ClearSelection() + else +{$ENDIF} + if MethodName = 'COPYTOCLIPBOARD' then + TCustomEdit(Instance).CopyToClipboard() + else if MethodName = 'CUTTOCLIPBOARD' then + TCustomEdit(Instance).CutToClipboard() + else if MethodName = 'PASTEFROMCLIPBOARD' then + TCustomEdit(Instance).PasteFromClipboard() + else if MethodName = 'SELECTALL' then + TCustomEdit(Instance).SelectAll() +{$IFNDEF Delphi21} + else if MethodName = 'GETCHARX' then + Result := Single(TCustomEdit(Instance).GetCharX(Integer(Caller.Params[0]))) + else if MethodName = 'CONTENTRECT' then + Result := frxInteger(TfsRectF.Create(TCustomEdit(Instance).ContentRect())) +{$ENDIF} + end + else if ClassType = TMemo then + begin + if MethodName = 'COPYTOCLIPBOARD' then + TMemo(Instance).CopyToClipboard() + else if MethodName = 'PASTEFROMCLIPBOARD' then + TMemo(Instance).PasteFromClipboard() + else if MethodName = 'CUTTOCLIPBOARD' then + TMemo(Instance).CutToClipboard() + else if MethodName = 'CLEARSELECTION' then + TMemo(Instance).ClearSelection() + else if MethodName = 'SELECTALL' then + TMemo(Instance).SelectAll() + else if MethodName = 'GOTOTEXTEND' then + TMemo(Instance).GoToTextEnd() + else if MethodName = 'GOTOTEXTBEGIN' then + TMemo(Instance).GoToTextBegin() + else if MethodName = 'GOTOLINEEND' then + TMemo(Instance).GotoLineEnd() + else if MethodName = 'GOTOLINEBEGIN' then + TMemo(Instance).GoToLineBegin() + else if MethodName = 'UNDO' then + TMemo(Instance).UnDo() + end + else if ClassType = TCustomListBox then + begin + if MethodName = 'ASSIGN' then + TCustomListBox(Instance).Assign(TPersistent(frxInteger(Caller.Params[0]))) + else if MethodName = 'CLEAR' then + TCustomListBox(Instance).Clear() + else if MethodName = 'DRAGCHANGE' then + Result := TCustomListBox(Instance).DragChange(TListBoxItem(frxInteger(Caller.Params[0])), TListBoxItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'SELECTALL' then + TCustomListBox(Instance).SelectAll() + else if MethodName = 'CLEARSELECTION' then + TCustomListBox(Instance).ClearSelection() + else if MethodName = 'SELECTRANGE' then + TCustomListBox(Instance).SelectRange(TListBoxItem(frxInteger(Caller.Params[0])), TListBoxItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'ITEMBYPOINT' then + Result := frxInteger(TListBoxItem(TCustomListBox(Instance).ItemByPoint(Single(Caller.Params[0]), Single(Caller.Params[1])))) + else if MethodName = 'ITEMBYINDEX' then + Result := frxInteger(TListBoxItem(TCustomListBox(Instance).ItemByIndex(Integer(Caller.Params[0])))) + else if MethodName = 'EXCHANGE' then + TCustomListBox(Instance).Exchange(TListBoxItem(frxInteger(Caller.Params[0])), TListBoxItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'ADDOBJECT' then + TCustomListBox(Instance).AddObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'INSERTOBJECT' then + TCustomListBox(Instance).InsertObject(Integer(Caller.Params[0]), TFmxObject(frxInteger(Caller.Params[1]))) + else if MethodName = 'REMOVEOBJECT' then + TCustomListBox(Instance).RemoveObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'LISTITEMS.GET' then + Result := frxInteger(TCustomListBox(Instance).ListItems[Caller.Params[0]]) + end + else if ClassType = TCustomComboBox then + begin + if MethodName = 'CLEAR' then + TCustomComboBox(Instance).Clear() + else if MethodName = 'DROPDOWN' then + TCustomComboBox(Instance).DropDown() + else if MethodName = 'LISTITEMS.GET' then + Result := frxInteger(TCustomComboBox(Instance).ListItems[Caller.Params[0]]) + end + else if ClassType = TCommonCustomForm then + begin + Form := TCommonCustomForm(Instance); + if MethodName = 'CREATENEW' then + Result := frxInteger(Form.CreateNew(TComponent(frxInteger(Caller.Params[0])), Integer(Caller.Params[1]))) + else if MethodName = 'SETBOUNDS' then + Form.SetBounds(Integer(Caller.Params[0]), Integer(Caller.Params[1]), Integer(Caller.Params[2]), Integer(Caller.Params[3])) + else if MethodName = 'CLIENTTOSCREEN' then + Result := frxInteger(TfsPointF.Create(Form.ClientToScreen(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'SCREENTOCLIENT' then + Result := frxInteger(TfsPointF.Create(Form.ScreenToClient(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'CLOSEQUERY' then + Result := Form.CloseQuery + else if MethodName = 'CLIENTRECT' then + Result := frxInteger(TfsRectF.Create(Form.ClientRect)) + else if MethodName = 'RELEASE' then + Form.Release() + else if MethodName = 'CLOSE' then + Form.Close() + else if MethodName = 'SHOW' then + Form.Show() + else if MethodName = 'HIDE' then + Form.Hide() + else if MethodName = 'SHOWMODAL' then + Result := Integer(Form.ShowModal) + else if MethodName = 'CLOSEMODAL' then + Form.CloseModal() + else if MethodName = 'INVALIDATE' then + Form.Invalidate() + else if MethodName = 'BEGINUPDATE' then + Form.BeginUpdate() + else if MethodName = 'ENDUPDATE' then + Form.EndUpdate() + end + else if ClassType = TApplication then + begin + if MethodName = 'PROCESSMESSAGES' then + TApplication(Instance).ProcessMessages + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TControl then + begin + if PropName = 'ABSOLUTEMATRIX' then + Result := frxInteger(TfsMatrix.Create(TControl(Instance).AbsoluteMatrix)) + else if PropName = 'ABSOLUTEOPACITY' then + Result := TControl(Instance).AbsoluteOpacity + else if PropName = 'ABSOLUTEWIDTH' then + Result := TControl(Instance).AbsoluteWidth + else if PropName = 'ABSOLUTEHEIGHT' then + Result := TControl(Instance).AbsoluteHeight + else if PropName = 'ABSOLUTESCALE' then + Result := frxInteger(TfsPointF.Create(TControl(Instance).AbsoluteScale)) + else if PropName = 'ABSOLUTEENABLED' then + Result := TControl(Instance).AbsoluteEnabled + else if PropName = 'HASEFFECT' then + Result := TControl(Instance).HasEffect + else if PropName = 'HASDISABLEPAINTEFFECT' then + Result := TControl(Instance).HasDisablePaintEffect + else if PropName = 'HASAFTERPAINTEFFECT' then + Result := TControl(Instance).HasAfterPaintEffect + else if PropName = 'CHILDRENRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).ChildrenRect)) + else if PropName = 'INVERTABSOLUTEMATRIX' then + Result := frxInteger(TfsMatrix.Create(TControl(Instance).InvertAbsoluteMatrix)) + else if PropName = 'INPAINTTO' then + Result := TControl(Instance).InPaintTo + else if PropName = 'LOCALRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).LocalRect)) + else if PropName = 'ABSOLUTERECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).AbsoluteRect)) + else if PropName = 'UPDATERECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).UpdateRect)) + else if PropName = 'PARENTEDRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).ParentedRect)) + else if PropName = 'PARENTEDVISIBLE' then + Result := TControl(Instance).ParentedVisible + else if PropName = 'CLIPRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).ClipRect)) + else if PropName = 'CANVAS' then + Result := frxInteger(TControl(Instance).Canvas) + else if PropName = 'AUTOCAPTURE' then + Result := TControl(Instance).AutoCapture + else if PropName = 'CANFOCUS' then + Result := TControl(Instance).CanFocus + else if PropName = 'DISABLEFOCUSEFFECT' then + Result := TControl(Instance).DisableFocusEffect + else if PropName = 'TABORDER' then + Result := Integer(TControl(Instance).TabOrder) + else if PropName = 'BOUNDSRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).BoundsRect)) + end + else if ClassType = TStyledControl then + begin + if PropName = 'STYLELOOKUP' then + Result := TStyledControl(Instance).StyleLookup + end + else if ClassType = TCustomEdit then + begin + if PropName = 'CARETPOSITION' then + Result := TCustomEdit(Instance).CaretPosition + else if PropName = 'SELSTART' then + Result := TCustomEdit(Instance).SelStart + else if PropName = 'SELLENGTH' then + Result := TCustomEdit(Instance).SelLength + else if PropName = 'SELTEXT' then + Result := String(TCustomEdit(Instance).SelText) + else if PropName = 'MAXLENGTH' then + Result := TCustomEdit(Instance).MaxLength + else if PropName = 'SELECTIONFILL' then + Result := frxInteger(TCustomEdit(Instance).SelectionFill) + else if PropName = 'FILTERCHAR' then + Result := TCustomEdit(Instance).FilterChar + else if PropName = 'TYPING' then + Result := TCustomEdit(Instance).Typing + end + else if ClassType = TMemo then + begin + if PropName = 'SELSTART' then + Result := TMemo(Instance).SelStart + else if PropName = 'SELLENGTH' then + Result := TMemo(Instance).SelLength + else if PropName = 'SELTEXT' then + Result := String(TMemo(Instance).SelText) + end + else if ClassType = TListBoxItem then + begin + if PropName = 'DATA' then + Result := frxInteger(TListBoxItem(Instance).Data) + else if PropName = 'INDEX' then + Result := TListBoxItem(Instance).Index + end + else if ClassType = TCustomListBox then + begin + if PropName = 'COUNT' then + Result := TCustomListBox(Instance).Count + else if PropName = 'SELECTED' then + Result := frxInteger(TCustomListBox(Instance).Selected) + else if PropName = 'ITEMS' then + Result := frxInteger(TCustomListBox(Instance).Items) + else if PropName = 'ITEMINDEX' then + Result := TCustomListBox(Instance).ItemIndex + end + else if ClassType = TCustomComboBox then + begin + if PropName = 'COUNT' then + Result := TCustomComboBox(Instance).Count + else if PropName = 'SELECTED' then + Result := frxInteger(TCustomComboBox(Instance).Selected) + else if PropName = 'ITEMS' then + Result := frxInteger(TCustomComboBox(Instance).Items) + else if PropName = 'ITEMINDEX' then + Result := TCustomComboBox(Instance).ItemIndex + end + else if ClassType = TCustomForm then + begin + if PropName = 'MODALRESULT' then + Result := TCustomForm(Instance).ModalResult + else if PropName = 'CANVAS' then + Result := frxInteger(TCustomForm(Instance).Canvas) + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TControl then + begin + if PropName = 'AUTOCAPTURE' then + TControl(Instance).AutoCapture := Boolean(Value) + else if PropName = 'CANFOCUS' then + TControl(Instance).CanFocus := Boolean(Value) + else if PropName = 'DISABLEFOCUSEFFECT' then + TControl(Instance).DisableFocusEffect := Boolean(Value) + else if PropName = 'TABORDER' then + TControl(Instance).TabOrder := TTabOrder(Integer(Value)) + else if PropName = 'BOUNDSRECT' then + TControl(Instance).BoundsRect := TfsRectF(frxInteger(Value)).GetRect + end + else if ClassType = TStyledControl then + begin + if PropName = 'STYLELOOKUP' then + TStyledControl(Instance).StyleLookup := Value; + end + else if ClassType = TCustomEdit then + begin + if PropName = 'CARETPOSITION' then + TCustomEdit(Instance).CaretPosition := Integer(Value) + else if PropName = 'SELSTART' then + TCustomEdit(Instance).SelStart := Integer(Value) + else if PropName = 'SELLENGTH' then + TCustomEdit(Instance).SelLength := Integer(Value) + else if PropName = 'MAXLENGTH' then + TCustomEdit(Instance).MaxLength := Integer(Value) + else if PropName = 'FILTERCHAR' then + TCustomEdit(Instance).FilterChar := String(Value) + else if PropName = 'TYPING' then + TCustomEdit(Instance).Typing := Boolean(Value) + end + else if ClassType = TMemo then + begin + if PropName = 'SELSTART' then + TMemo(Instance).SelStart := Integer(Value) + else if PropName = 'SELLENGTH' then + TMemo(Instance).SelLength := Integer(Value) + end + else if ClassType = TListBoxItem then + begin + if PropName = 'DATA' then + TListBoxItem(Instance).Data := TObject(frxInteger(Value)) + else if PropName = 'INDEX' then + TListBoxItem(Instance).Index := Value + end + else if ClassType = TCustomListBox then + begin + if PropName = 'ITEMS' then + TCustomListBox(Instance).Items := TStrings(frxInteger(Value)) + else if PropName = 'ITEMINDEX' then + TCustomListBox(Instance).ItemIndex := Value + end + else if ClassType = TCustomComboBox then + begin + if PropName = 'ITEMS' then + TCustomComboBox(Instance).Items := TStrings(frxInteger(Value)) + else if PropName = 'ITEMINDEX' then + TCustomComboBox(Instance).ItemIndex := Value + end + else if ClassType = TCustomForm then + begin + if PropName = 'MODALRESULT' then + TCustomForm(Instance).ModalResult := Value + end +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsFormsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_igraphicsrtti.pas b/FastScript/FMX.fs_igraphicsrtti.pas new file mode 100644 index 0000000..58a4818 --- /dev/null +++ b/FastScript/FMX.fs_igraphicsrtti.pas @@ -0,0 +1,522 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_igraphicsrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_iclassesrtti +, FMX.Types, FMX.Objects, System.UITypes, System.UIConsts, System.Types, System.Variants +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI20} + , System.Math.Vectors +{$ENDIF} +{$IFDEF DELPHI28} + , FMX.BaseTypeAliases +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsGraphicsRTTI = class(TComponent); // fake component + + +implementation + +type + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + procedure GetColorProc(const Name: String); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + GetAlphaColorValues(GetColorProc); + AddType('TAlignment', fvtInt); + AddType('TLeftRight', fvtInt); + AddConst('taLeftJustify', 'Integer', taLeftJustify); + AddConst('taRightJustify', 'Integer', taRightJustify); + AddConst('taCenter', 'Integer', taCenter); + AddType('TVerticalAlignment', fvtInt); + AddConst('taAlignTop', 'Integer', taAlignTop); + AddConst('taAlignBottom', 'Integer', taAlignBottom); + AddConst('taVerticalCenter', 'Integer', taVerticalCenter); + //AddEnum('TAlignment', 'taLeftJustify, taRightJustify, taCenter'); + AddType('TCorners ', fvtInt); + AddConst('crTopLeft', 'Integer', TCorner.crTopLeft); + AddConst('crTopRight', 'Integer', TCorner.crTopRight); + AddConst('crBottomLeft', 'Integer', TCorner.crBottomLeft); + AddConst('crBottomRight', 'Integer', TCorner.crBottomRight); + AddType('TSides ', fvtInt); + AddConst('sdTop', 'Integer', TSide.sdTop); + AddConst('sdLeft', 'Integer', TSide.sdLeft); + AddConst('sdBottom', 'Integer', TSide.sdBottom); + AddConst('sdRight', 'Integer', TSide.sdRight); + AddConst('ftRightToLeft', 'Integer', TFillTextFlag.ftRightToLeft); + AddType('TFillTextFlags ', fvtInt); + AddEnumSet('TFontStyles', 'fsBold, fsItalic, fsUnderline, fsStrikeout'); + AddEnum('TFontPitch', 'fpDefault, fpVariable, fpFixed'); + AddEnum('TFontQuality', 'fqDefault, fqDraft, fqProof, fqNonAntialiased, fqAntialiased, fqClearType, fqClearTypeNatural'); + AddEnum('TGradientStyle', 'gsLinear, gsRadial'); + AddEnum('TWrapMode', 'wmTile, wmTileOriginal, wmTileStretch'); + AddEnum('TCornerType', 'ctRound, ctBevel, ctInnerRound, ctInnerLine'); + AddEnum('TAlignLayout', 'alNone, alTop, alLeft, alRight, alBottom, alMostTop, alMostBottom, alMostLeft, alMostRight, alClient, alContents, alCenter, alVertCenter, alHorzCenter, alHorizontal, alVertical, alScale, alFit, alFitLeft, alFitRight'); + AddEnum('TPathPointKind', 'ppMoveTo, ppLineTo, ppCurveTo, ppClose'); + AddEnum('TStrokeCap', 'scFlat, scRound'); + AddEnum('TStrokeJoin', 'sjMiter, sjRound, sjBevel'); + AddEnum('TStrokeDash', 'sdSolid, sdDash, sdDot, sdDashDot, sdDashDotDot, sdCustom'); + + AddEnum('TBrushKind', 'bkNone, bkSolid, bkGradient, bkBitmap, bkResource, bkGrab'); + + AddClass(TfsMatrix, 'TPersistent'); + with AddClass(TFont, 'TPersistent') do + AddConstructor('constructor Create', CallMethod); + AddClass(TGradientPoint, 'TCollectionItem'); + AddClass(TGradientPoints, 'TCollection'); + AddClass(TGradient, 'TPersistent'); + AddClass(TBrushBitmap, 'TPersistent'); + AddClass(TBrushResource, 'TPersistent'); +{$IFNDEF Delphi18} + AddClass(TBrushGrab, 'TPersistent'); +{$ENDIF} + AddClass(TLineMetricInfo, 'TObject'); + + with AddClass(TBrush, 'TPersistent') do + begin + AddConstructor('Create(ADefaultKind: TBrushKind; ADefaultColor: TAlphaColor)', CallMethod); + AddProperty('DefaultColor', 'TAlphaColor', GetProp); + AddProperty('DefaultKind', 'TBrushKind', GetProp); + end; +{$IFDEF Delphi17} + AddClass(TStrokeBrush, 'TBrush'); +{$ENDIF} + + AddClass(TCanvasSaveState, 'TPersistent'); + with AddClass(TCanvas, 'TPersistent') do + begin + AddMethod('function BeginScene: Boolean', CallMethod); + AddMethod('procedure EndScene', CallMethod); + AddMethod('procedure Clear(Color: TAlphaColor)', CallMethod); + AddMethod('procedure ClearRect(ARect: TfsRectF; AColor: TAlphaColor = 0)', CallMethod); + AddMethod('procedure SetMatrix(const M: TfsMatrix)', CallMethod); +{$IFDEF Delphi17} + AddMethod('procedure MultiplyMatrix(const M: TfsMatrix)', CallMethod); +{$ELSE} + AddMethod('procedure MultyMatrix(const M: TfsMatrix)', CallMethod); +{$ENDIF} + AddMethod('function SaveState: TCanvasSaveState', CallMethod); + AddMethod('procedure RestoreState(State: TCanvasSaveState)', CallMethod); + AddMethod('procedure SetClipRects(ARects: array of TfsRectF)', CallMethod); + AddMethod('procedure IntersectClipRect(ARect: TfsRectF)', CallMethod); + AddMethod('procedure ExcludeClipRect(ARect: TfsRectF)', CallMethod); + AddMethod('procedure ResetClipRect', CallMethod); + AddMethod('procedure DrawLine(APt1: TfsPointF; APt2: TfsPointF; AOpacity: Single)', CallMethod); + AddMethod('procedure FillRect(ARect: TfsRectF; XRadius: Single; YRadius: Single; ACorners: TCorners; AOpacity: Single; ACornerType: TCornerType)', CallMethod); + AddMethod('procedure DrawRect(ARect: TfsRectF; XRadius: Single; YRadius: Single; ACorners: TCorners; AOpacity: Single; ACornerType: TCornerType)', CallMethod); + AddMethod('procedure FillEllipse(ARect: TfsRectF; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawEllipse(ARect: TfsRectF; AOpacity: Single)', CallMethod); + AddMethod('procedure FillArc(Center: TfsPointF; Radius: TfsPointF; StartAngle: Single; SweepAngle: Single; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawArc(Center: TfsPointF; Radius: TfsPointF; StartAngle: Single; SweepAngle: Single; AOpacity: Single)', CallMethod); + AddMethod('function PtInPath(APoint: TfsPointF; APath: TPathData): Boolean', CallMethod); + AddMethod('procedure FillPath(APath: TPathData; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawPath(APath: TPathData; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawBitmap(ABitmap: TBitmap; SrcRect: TfsRectF; DstRect: TfsRectF; AOpacity: Single; HighSpeed: Boolean)', CallMethod); + AddMethod('procedure DrawRectSides(ARect: TfsRectF; XRadius: Single; YRadius: Single; ACorners: TCorners; AOpacity: Single; ASides: TSides; ACornerType: TCornerType)', CallMethod); + AddMethod('procedure FillPolygon(Points: TPolygon; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawPolygon(Points: TPolygon; AOpacity: Single)', CallMethod); + AddMethod('function LoadFontFromStream(AStream: TStream): Boolean', CallMethod); + AddMethod('procedure FillText(ARect: TfsRectF; AText: string; WordWrap: Boolean; AOpacity: Single; Flags: TFillTextFlags; ATextAlign: TTextAlign; AVTextAlign: TTextAlign)', CallMethod); + AddMethod('procedure MeasureText(var ARect: TfsRectF; AText: string; WordWrap: Boolean; Flags: TFillTextFlags; ATextAlign: TTextAlign; AVTextAlign: TTextAlign)', CallMethod); + AddMethod('procedure MeasureLines(ALines: TLineMetricInfo; ARect: TfsRectF; AText: string; WordWrap: Boolean; Flags: TFillTextFlags; ATextAlign: TTextAlign; AVTextAlign: TTextAlign)', CallMethod); + AddMethod('function TextToPath(Path: TPathData; ARect: TfsRectF; AText: string; WordWrap: Boolean; ATextAlign: TTextAlign; AVTextAlign: TTextAlign): Boolean', CallMethod); + AddMethod('function TextWidth(AText: string): Single', CallMethod); + AddMethod('function TextHeight(AText: string): Single', CallMethod); + AddMethod('procedure SetCustomDash(Dash: array; Offset: Single)', CallMethod); +{$IFDEF Delphi17} + AddProperty('Stroke', 'TStrokeBrush', GetProp); + AddProperty('StrokeCap', 'TStrokeCap', nil, SetProp); + AddProperty('StrokeDash', 'TStrokeDash', nil, SetProp); + AddProperty('StrokeJoin', 'TStrokeJoin', nil, SetProp); +{$ELSE} + AddProperty('Stroke', 'TBrush', GetProp); + AddProperty('StrokeCap', 'TStrokeCap', GetProp, SetProp); + AddProperty('StrokeDash', 'TStrokeDash', GetProp, SetProp); + AddProperty('StrokeJoin', 'TStrokeJoin', GetProp, SetProp); +{$ENDIF} + AddProperty('StrokeThickness', 'Single', GetProp, SetProp); + AddProperty('Fill', 'TBrush', GetProp, SetProp); + AddProperty('Font', 'TFont', GetProp); + AddProperty('Matrix', 'TfsMatrix', GetProp); + AddProperty('Width', 'Integer', GetProp); + AddProperty('Height', 'Integer', GetProp); + end; + with AddClass(TBitmap, 'TPersistent') do + begin + AddConstructor('constructor Create(AWidth, AHeight: Integer)', CallMethod); + AddConstructor('constructor CreateFromStream(AStream: TStream)', CallMethod); + AddConstructor('constructor CreateFromFile(AFileName: string)', CallMethod); + AddMethod('procedure SetSize(AWidth, AHeight: Integer)', CallMethod); + AddMethod('procedure Clear(AColor: TAlphaColor)', CallMethod); + AddMethod('procedure ClearRect(ARect: TfsRectF; AColor: TAlphaColor = 0)', CallMethod); + AddMethod('function IsEmpty: Boolean', CallMethod); + AddMethod('procedure Rotate(Angle: Single)', CallMethod); + AddMethod('procedure FlipHorizontal', CallMethod); + AddMethod('procedure FlipVertical', CallMethod); + AddMethod('procedure InvertAlpha', CallMethod); +{$IFNDEF DELPHI20} + AddMethod('procedure LoadFromFile(AFileName: string; Rotate: Single = 0)', CallMethod); +{$ELSE} + AddMethod('procedure LoadFromFile(AFileName: string)', CallMethod); +{$ENDIF} + AddMethod('procedure SaveToFile(AFileName: string)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); +{$IFNDEF Delphi17} + AddMethod('procedure BitmapChanged', CallMethod); + AddIndexProperty( 'Pixels', 'Integer, Integer', 'TAlphaColor', CallMethod); +{$ENDIF} + AddProperty('Canvas', 'TCanvas', GetProp); +{$IFNDEF Delphi21} + AddProperty('ResourceBitmap', 'TBitmap', GetProp); +{$ENDIF} + AddProperty('Width', 'Integer', GetProp, SetProp); + AddProperty('Height', 'Integer', GetProp, SetProp); + end; + AddClass(TSpline, 'TObject'); + AddClass(TBounds, 'TPersistent'); + AddClass(TTransform, 'TPersistent'); + + + +{$IFNDEF Delphi17} + AddClass(TBitmapCodec, 'TPersistent'); +{$ENDIF} + AddClass(TPathData, 'TPersistent'); + AddClass(TCanvasSaveState, 'TPersistent'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + _Canvas: TCanvas; + _Bitmap: TBitmap; +// mRects: array of TRectF; + mDashs: array of Single; + mPoly: TPolygon; + Idx, Cnt, nLo: Integer; +begin + Result := 0; + + if ClassType = TFont then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TFont(Instance).Create); + end + else if ClassType = TBitmap then + begin + _Bitmap := TBitmap(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(TBitmap(Instance).Create(Caller.Params[0], Caller.Params[1])) + else if MethodName = 'CREATEFROMSTREAM' then + Result := frxInteger(_Bitmap.CreateFromStream(TStream(frxInteger(Caller.Params[0])))) + else if MethodName = 'CREATEFROMFILE' then + Result := frxInteger(_Bitmap.CreateFromFile(String(Caller.Params[0]))) + else if MethodName = 'SETSIZE' then + _Bitmap.SetSize(Integer(Caller.Params[0]), Integer(Caller.Params[1])) + else if MethodName = 'CLEAR' then + _Bitmap.Clear(TAlphaColor(Caller.Params[0])) + else if MethodName = 'CLEARRECT' then + begin + _Bitmap.ClearRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, TAlphaColor(Caller.Params[1])); + end + else if MethodName = 'ISEMPTY' then + Result := _Bitmap.IsEmpty + else if MethodName = 'ROTATE' then + _Bitmap.Rotate(Single(Caller.Params[1])) + else if MethodName = 'FLIPHORIZONTAL' then + _Bitmap.FlipHorizontal + else if MethodName = 'FLIPVERTICAL' then + _Bitmap.FlipVertical + else if MethodName = 'INVERTALPHA' then + _Bitmap.InvertAlpha + else if MethodName = 'LOADFROMFILE' then +{$IFNDEF DELPHI20} + _Bitmap.LoadFromFile(String(Caller.Params[0]), Single(Caller.Params[1])) +{$ELSE} + _Bitmap.LoadFromFile(String(Caller.Params[0])) +{$ENDIF} + else if MethodName = 'SAVETOFILE' then + _Bitmap.SaveToFile(String(Caller.Params[0])) + else if MethodName = 'LOADFROMSTREAM' then + _Bitmap.LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOSTREAM' then + _Bitmap.SaveToStream(TStream(frxInteger(Caller.Params[0]))) +{$IFNDEF Delphi17} + else if MethodName = 'BITMAPCHANGED' then + _Bitmap.BitmapChanged + else if MethodName = 'PIXELS.GET' then + Result := _Bitmap.Pixels[Caller.Params[0], Caller.Params[1]] + else if MethodName = 'PIXELS.SET' then + _Bitmap.Pixels[Caller.Params[0], Caller.Params[1]] := Caller.Params[2] +{$ENDIF} + end + else if ClassType = TBrush then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TBrush(Instance).Create(TBrushKind(frxInteger(Caller.Params[0])), + TAlphaColor(frxInteger(Caller.Params[0])))) + end + else if ClassType = TCanvas then + begin + _Canvas := TCanvas(Instance); + + if MethodName = 'BEGINSCENE' then + Result := _Canvas.BeginScene + else if MethodName = 'ENDSCENE' then + _Canvas.EndScene + else if MethodName = 'CLEAR' then + _Canvas.Clear(TAlphaColor(Caller.Params[0])) + else if MethodName = 'CLEARRECT' then + _Canvas.ClearRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, TAlphaColor(Caller.Params[1])) + else if MethodName = 'SETMATRIX' then + _Canvas.SetMatrix(TfsMatrix(frxInteger(Caller.Params[0])).GetRect) +{$IFDEF Delphi17} + else if MethodName = 'MULTIPLYMATRIX' then + _Canvas.MultiplyMatrix(TfsMatrix(frxInteger(Caller.Params[0])).GetRect) +{$ELSE} + else if MethodName = 'MULTYMATRIX' then + _Canvas.MultyMatrix(TfsMatrix(frxInteger(Caller.Params[0])).GetRect) +{$ENDIF} + else if MethodName = 'SAVESTATE' then + Result := frxInteger(_Canvas.SaveState) + else if MethodName = 'RESTORESTATE' then + _Canvas.RestoreState(TCanvasSaveState(frxInteger(Caller.Params[0]))) + { else if MethodName = 'SETCLIPRECTS' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mRects, Cnt); + for Idx := 0 to Cnt - 1 do + mRects[Idx] := TfsRectF(frxInteger(Caller.Params[0][Idx + nLo])).GetRectP^; + _Canvas.SetClipRects(mRects); + SetLength(mRects, 0); + end } + else if MethodName = 'EXCLUDECLIPRECT' then + _Canvas.ExcludeClipRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect) + else if MethodName = 'INTERSECTCLIPTRECT' then + _Canvas.IntersectClipRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect) + {else if MethodName = 'RESETCLIPRECT' then + _Canvas.ResetClipRect } + else if MethodName = 'DRAWLINE' then + _Canvas.DrawLine(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TfsPointF(frxInteger(Caller.Params[1])).GetRect, Single(Caller.Params[2])) + else if MethodName = 'FILLRECT' then + _Canvas.FillRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1]), Single(Caller.Params[2]), TCorners(Byte(Caller.Params[3])), Single(Caller.Params[4]), TCornerType(Caller.Params[5])) + else if MethodName = 'DRAWRECT' then + _Canvas.DrawRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1]), Single(Caller.Params[2]), TCorners(Byte(Caller.Params[3])), Single(Caller.Params[4]), TCornerType(Caller.Params[5])) + else if MethodName = 'FILLELLIPSE' then + _Canvas.FillEllipse(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1])) + else if MethodName = 'DRAWELLIPSE' then + _Canvas.DrawEllipse(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1])) + else if MethodName = 'FILLARC' then + _Canvas.FillArc(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TfsPointF(frxInteger(Caller.Params[1])).GetRect, Single(Caller.Params[2]), Single(Caller.Params[3]), Single(Caller.Params[4])) + else if MethodName = 'DRAWARC' then + _Canvas.DrawArc(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TfsPointF(frxInteger(Caller.Params[1])).GetRect, Single(Caller.Params[2]), Single(Caller.Params[3]), Single(Caller.Params[4])) + else if MethodName = 'PTINPATH' then + Result := Boolean(_Canvas.PtInPath(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TPathData(frxInteger(Caller.Params[1])))) + else if MethodName = 'FILLPATH' then + _Canvas.FillPath(TPathData(frxInteger(Caller.Params[0])), Single(Caller.Params[1])) + else if MethodName = 'DRAWPATH' then + _Canvas.DrawPath(TPathData(frxInteger(Caller.Params[0])), Single(Caller.Params[1])) + else if MethodName = 'DRAWBITMAP' then + _Canvas.DrawBitmap(TBitmap(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, TfsRectF(frxInteger(Caller.Params[2])).GetRect, Single(Caller.Params[3]), Boolean(Caller.Params[4])) + else if MethodName = 'DRAWRECTSIDES' then + _Canvas.DrawRectSides(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1]), Single(Caller.Params[2]), TCorners(Byte(Caller.Params[3])), Single(Caller.Params[4]), TSides(Byte(Caller.Params[5])), TCornerType(Caller.Params[6])) + else if MethodName = 'FILLPOLYGON' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mPoly, Cnt); + for Idx := 0 to Cnt - 1 do + mPoly[Idx] := TfsPointF(frxInteger(Caller.Params[0][Idx + nLo])).GetRectP^; + _Canvas.FillPolygon(TPolygon(Caller.Params[0]), Single(Caller.Params[1])); + SetLength(mPoly, 0); + end + else if MethodName = 'DRAWPOLYGON' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mPoly, Cnt); + for Idx := 0 to Cnt - 1 do + mPoly[Idx] := TfsPointF(frxInteger(Caller.Params[0][Idx + nLo])).GetRectP^; + _Canvas.DrawPolygon(TPolygon(Caller.Params[0]), Single(Caller.Params[1])); + SetLength(mPoly, 0); + end + else if MethodName = 'LOADFONTFROMSTREAM' then + Result := Boolean(_Canvas.LoadFontFromStream(TStream(frxInteger(Caller.Params[0])))) + else if MethodName = 'FILLTEXT' then + _Canvas.FillText(TfsRectF(frxInteger(Caller.Params[0])).GetRect, String(Caller.Params[1]), Boolean(Caller.Params[2]), Single(Caller.Params[3]), TFillTextFlags(Byte(Caller.Params[4])), TTextAlign(Caller.Params[5]), TTextAlign(Caller.Params[6])) + else if MethodName = 'MEASURETEXT' then + _Canvas.MeasureText(TfsRectF(frxInteger(Caller.Params[0])).GetRectP^, String(Caller.Params[1]), Boolean(Caller.Params[2]), TFillTextFlags(Byte(Caller.Params[3])), TTextAlign(Caller.Params[4]), TTextAlign(Caller.Params[5])) + else if MethodName = 'MEASURELINES' then + _Canvas.MeasureLines(TLineMetricInfo(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, String(Caller.Params[2]), Boolean(Caller.Params[3]), TFillTextFlags(Byte(Caller.Params[4])), TTextAlign(Caller.Params[5]), TTextAlign(Caller.Params[6])) + else if MethodName = 'TEXTTOPATH' then + Result := Boolean(_Canvas.TextToPath(TPathData(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, String(Caller.Params[2]), Boolean(Caller.Params[3]), TTextAlign(Caller.Params[4]), TTextAlign(Caller.Params[5]))) + else if MethodName = 'TEXTWIDTH' then + Result := Single(_Canvas.TextWidth(String(Caller.Params[0]))) + else if MethodName = 'TEXTHEIGHT' then + Result := Single(_Canvas.TextHeight(String(Caller.Params[0]))) + else if MethodName = 'SETCUSTOMDASH' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mDashs, Cnt); + for Idx := 0 to Cnt - 1 do + mDashs[Idx] := Single(Caller.Params[0][Idx + nLo]); +{$IFDEF DELPHI25} + _Canvas.Stroke.SetCustomDash(mDashs, Single(Caller.Params[1])); +{$ELSE} + _Canvas.SetCustomDash(mDashs, Single(Caller.Params[1])); +{$ENDIF} + SetLength(mDashs, 0); + end +{$IFNDEF CLX} + { else if MethodName = 'PIXELS.GET' then + Result := _Canvas.Pixels[Caller.Params[0], Caller.Params[1]] + else if MethodName = 'PIXELS.SET' then + _Canvas.Pixels[Caller.Params[0], Caller.Params[1]] := Caller.Params[2] } +{$ENDIF} + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + if ClassType = TBitmap then + begin + if PropName = 'CANVAS' then + Result := frxInteger(TBitmap(Instance).Canvas) +{$IFNDEF Delphi21} + else if PropName = 'RESOURCEBITMAP' then + Result := frxInteger(TBitmap(Instance).ResourceBitmap) +{$ENDIF} + else if PropName = 'WIDTH' then + Result := Integer(TBitmap(Instance).Width) + else if PropName = 'HEIGHT' then + Result := Integer(TBitmap(Instance).Height) + end + else if ClassType = TCanvas then + begin + if PropName = 'STROKE' then + Result := frxInteger(TCanvas(Instance).Stroke) + else if PropName = 'WIDTH' then + Result := Integer(TCanvas(Instance).Width) + else if PropName = 'HEIGHT' then + Result := Integer(TCanvas(Instance).Height) + else if PropName = 'FONT' then + Result := frxInteger(TCanvas(Instance).Font) + else if PropName = 'FILL' then + Result := frxInteger(TCanvas(Instance).Fill) + else if PropName = 'STROKETHICKNESS' then +{$IFDEF DELPHI25} + Result := Single(TCanvas(Instance).Stroke.Thickness) +{$ELSE} + Result := Single(TCanvas(Instance).StrokeThickness) +{$ENDIF} +{$IFNDEF Delphi17} + else if PropName = 'STROKECAP' then + Result := Integer(TCanvas(Instance).StrokeCap) + else if PropName = 'STROKEDASH' then + Result := Integer(TCanvas(Instance).StrokeDash) + else if PropName = 'STROKEJOIN' then + Result := Integer(TCanvas(Instance).StrokeJoin) +{$ENDIF} + end; +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TBitmap then + begin + if PropName = 'WIDTH' then + TBitmap(Instance).Width := Integer(Value) + else if PropName = 'HEIGHT' then + TBitmap(Instance).Height:= Integer(Value) + end + else if ClassType = TCanvas then + begin + if PropName = 'STROKETHICKNESS' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Thickness := Single(Value) +{$ELSE} + TCanvas(Instance).StrokeThickness := Single(Value) +{$ENDIF} + else if PropName = 'STROKECAP' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Cap := TStrokeCap(Value) +{$ELSE} + TCanvas(Instance).StrokeCap := TStrokeCap(Value) +{$ENDIF} + else if PropName = 'STROKEDASH' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Dash := TStrokeDash(Value) +{$ELSE} + TCanvas(Instance).StrokeDash := TStrokeDash(Value) +{$ENDIF} + else if PropName = 'STROKEJOIN' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Join := TStrokeJoin(Value) +{$ELSE} + TCanvas(Instance).StrokeJoin := TStrokeJoin(Value) +{$ENDIF} + end; +end; + +procedure TFunctions.GetColorProc(const Name: String); +var + c: Integer; +begin + IdentToAlphaColor('cla' + Name, c); + Script.AddConst('cla' + Name, 'Integer', c); +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsGraphicsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_iibxrtti.pas b/FastScript/FMX.fs_iibxrtti.pas new file mode 100644 index 0000000..dd92476 --- /dev/null +++ b/FastScript/FMX.fs_iibxrtti.pas @@ -0,0 +1,125 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ IBX classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iibxrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_idbrtti, Data.db, FMX.Types +{$IFDEF DELPHI20} + , IBX.ibdatabase, IBX.IBCustomDataSet, IBX.IBQuery, IBX.IBTable, IBX.IBStoredProc +{$ELSE} + , ibdatabase, IBCustomDataSet, IBQuery, IBTable, IBStoredProc +{$ENDIF} + ; + +type +{$i frxPlatformsAttribute.inc} + TfsIBXRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class (TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: + String; Caller: TfsMethodHelper): Variant; + function RecordCount(Instance: TObject; ClassType: TClass; const PropName: + String): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddClass(TIBDataBase, 'TComponent'); + + with AddClass(TIBTransaction, 'TComponent') do + begin + AddMethod('procedure Commit', CallMethod); + AddMethod('procedure RollBack', CallMethod); + AddMethod('procedure StartTransaction', CallMethod); + end; + + AddClass(TIBCustomDataSet, 'TDataSet'); + AddClass(TIBTable, 'TIBCustomDataSet'); + with AddClass(TIBQuery, 'TIBCustomDataSet') do + begin + AddMethod('procedure ExecSQL', CallMethod); + AddMethod('procedure FetchAll', CallMethod); + AddProperty('RecordCount', 'Integer',RecordCount, nil); + end; + with AddClass(TIBStoredProc, 'TIBCustomDataSet') do + AddMethod('procedure ExecProc', CallMethod); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const + MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TIBQuery then + begin + if MethodName = 'EXECSQL' then + TIBQuery(Instance).ExecSQL + else + if MethodName = 'FETCHALL' then + TIBQuery(Instance).FETCHALL; + end + else + if ClassType = TIBStoredProc then + begin + if MethodName = 'EXECPROC' then + TIBStoredProc(Instance).ExecProc + end + else + if(ClassType = TIBTransaction) AND (MethodName = 'COMMIT') then + TIBTransaction(Instance).Commit + else + if (ClassType = TIBTransaction) AND (MethodName = 'ROLLBACK') then + TIBTransaction(Instance).RollBack + else + if(ClassType = TIBTransaction) AND (MethodName = 'STARTTRANSACTION') then + TIBTransaction(Instance).StartTransaction; + +end; + +function TFunctions.RecordCount(Instance: TObject; ClassType: TClass; const + PropName: String): Variant; +begin + Result:=0; + if (ClassType = TIBQuery) AND (PropName = 'RECORDCOUNT') then + Result:=TIBQuery(Instance).RecordCount; + +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsIBXRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_iilparser.pas b/FastScript/FMX.fs_iilparser.pas new file mode 100644 index 0000000..b8d0425 --- /dev/null +++ b/FastScript/FMX.fs_iilparser.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Intermediate Language parser } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iilparser; +{$i FMX.inc} +{$i fs_iilparser.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_iinirtti.pas b/FastScript/FMX.fs_iinirtti.pas new file mode 100644 index 0000000..42561a5 --- /dev/null +++ b/FastScript/FMX.fs_iinirtti.pas @@ -0,0 +1,372 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ IniFiles.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{ Copyright (c) 2004-2007 } +{ by Stalker SoftWare } +{ } +{******************************************} + +unit FMX.fs_iinirtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, System.IniFiles, FMX.Types, System.Types; + +type +{$i frxPlatformsAttribute.inc} + TfsIniRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; + procedure SaveIniFileToStream(oIniFile: TCustomIniFile; oStream: TStream); + procedure LoadIniFileFromStream(oIniFile :TCustomIniFile; oStream :TStream); + procedure WriteTStrings(oIniFile: TCustomIniFile; const Section: String; Values: TStrings; IsClear :Boolean = True); + procedure ReadTStrings(oIniFile: TCustomIniFile; const Section: String; Values: TStrings; IsClear :Boolean = True); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + + with AScript do + begin + with AddClass(TCustomIniFile, 'TObject') do + begin + AddConstructor('constructor Create(const FileName: String)', CallMethod); + AddMethod('function ReadInteger(const Section, Ident: String; Default: LongInt): LongInt', CallMethod); + AddMethod('procedure WriteInteger(const Section, Ident: String; Value: LongInt)', CallMethod); + AddMethod('function ReadBool(const Section, Ident: String; Default: Boolean): Boolean', CallMethod); + AddMethod('procedure WriteBool(const Section, Ident: String; Value: Boolean)', CallMethod); + AddMethod('function ReadDate(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteDate(const Section, Name: String; Value: TDateTime)', CallMethod); + AddMethod('function ReadDateTime(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteDateTime(const Section, Name: String; Value: TDateTime)', CallMethod); + AddMethod('function ReadFloat(const Section, Name: String; Default: Double): Double', CallMethod); + AddMethod('procedure WriteFloat(const Section, Name: String; Value: Double)', CallMethod); + AddMethod('function ReadTime(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteTime(const Section, Name: String; Value: TDateTime);', CallMethod); +{$IFDEF DELPHI6} + AddMethod('function ReadBinaryStream(const Section, Name: String; Value: TStream): Integer', CallMethod); + AddMethod('procedure WriteBinaryStream(const Section, Name: String; Value: TStream)', CallMethod); +{$ENDIF} + AddMethod('function SectionExists(const Section: String): Boolean', CallMethod); + AddMethod('function ValueExists(const Section, Ident: String): Boolean', CallMethod); + + AddMethod('procedure WriteTStrings(const Section :String; Value :TStrings; IsClear :Boolean = True)', CallMethod); + AddMethod('function ReadTStrings(const Section :String; Value :TStrings; IsClear :Boolean = True): String;', CallMethod); + + AddProperty('FileName', 'String', GetProp); + end; + + with AddClass(TMemIniFile, 'TCustomIniFile') do + begin + AddConstructor('constructor Create(const FileName: String)', CallMethod); + AddMethod('procedure WriteString(const Section, Ident, Value: String)', CallMethod); + AddMethod('function ReadString(const Section, Ident, Default: String): String;', CallMethod); +{$IFDEF DELPHI6} + AddMethod('procedure ReadSectionValuesEx(const Section: String; Strings: TStrings)', CallMethod); +{$ENDIF} + AddMethod('procedure DeleteKey(const Section, Ident: String)', CallMethod); + AddMethod('procedure ReadSection(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSections(Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSectionValues(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure EraseSection(const Section: String)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure GetStrings(List: TStrings)', CallMethod); + AddMethod('procedure SetStrings(List: TStrings)', CallMethod); + AddMethod('procedure SaveIniFileToStream(oStream: TStream)', CallMethod); + AddMethod('procedure LoadIniFileFromStream(oStream: TStream)', CallMethod); + end; + + with AddClass(TIniFile, 'TCustomIniFile') do + begin + AddMethod('procedure WriteString(const Section, Ident, Value: String)', CallMethod); + AddMethod('function ReadString(const Section, Ident, Default: String): String;', CallMethod); +{$IFDEF DELPHI6} + AddMethod('procedure ReadSectionValuesEx(const Section: String; Strings: TStrings)', CallMethod); +{$ENDIF} + AddMethod('procedure DeleteKey(const Section, Ident: String)', CallMethod); + AddMethod('procedure ReadSection(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSections(Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSectionValues(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure EraseSection(const Section: String)', CallMethod); + AddMethod('procedure SaveIniFileToStream(oStream: TStream)', CallMethod); + AddMethod('procedure LoadIniFileFromStream(oStream: TStream)', CallMethod); + end; + + end; + +end; + +{$HINTS OFF} +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; +var + oCustomIniFile: TCustomIniFile; + oMemIniFile: TMemIniFile; + oIniFile: TIniFile; + oList: TStrings; + nCou: Integer; + +begin + + Result := 0; + + if ClassType = TCustomIniFile then + begin + oCustomIniFile := TCustomIniFile(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(oCustomIniFile.Create(Caller.Params[0])) + else if MethodName = 'WRITEINTEGER' then + oCustomIniFile.WriteInteger(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READINTEGER' then + Result := oCustomIniFile.ReadInteger(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEBOOL' then + oCustomIniFile.WriteBool(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READBOOL' then + Result := oCustomIniFile.ReadBool(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEDATE' then + oCustomIniFile.WriteDate(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READDATE' then + Result := oCustomIniFile.ReadDate(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEDATETIME' then + oCustomIniFile.WriteDateTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READDATETIME' then + Result := oCustomIniFile.ReadDateTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEFLOAT' then + oCustomIniFile.WriteFloat(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READFLOAT' then + Result := oCustomIniFile.ReadFloat(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITETIME' then + oCustomIniFile.WriteTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READTIME' then + Result := oCustomIniFile.ReadTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) +{$IFDEF DELPHI6} + else if MethodName = 'WRITEBINARYSTREAM' then + oCustomIniFile.WriteBinaryStream(Caller.Params[0], Caller.Params[1], TStream(frxInteger(Caller.Params[2]))) + else if MethodName = 'READBINARYSTREAM' then + Result := oCustomIniFile.ReadBinaryStream(Caller.Params[0], Caller.Params[1], TStream(frxInteger(Caller.Params[2]))) +{$ENDIF} + else if MethodName = 'SECTIONEXISTS' then + Result := oCustomIniFile.SectionExists(Caller.Params[0]) + else if MethodName = 'VALUEEXISTS' then + Result := oCustomIniFile.ValueExists(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'WRITETSTRINGS' then + WriteTStrings(oCustomIniFile, Caller.Params[0], TStrings(frxInteger(Caller.Params[1])), Caller.Params[2]) + else if MethodName = 'READTSTRINGS' then + ReadTStrings(oCustomIniFile, Caller.Params[0], TStrings(frxInteger(Caller.Params[1])), Caller.Params[2]) + + end; + + if ClassType = TMemIniFile then + begin + oMemIniFile := TMemIniFile(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(oMemIniFile.Create(Caller.Params[0])) + else if MethodName = 'WRITESTRING' then + oMemIniFile.WriteString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READSTRING' then + Result := oMemIniFile.ReadString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'DELETEKEY' then + oMemIniFile.DeleteKey(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'READSECTION' then + oMemIniFile.ReadSection(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'READSECTIONS' then + oMemIniFile.ReadSections(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'READSECTIONVALUES' then + oMemIniFile.ReadSectionValues(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'ERASESECTION' then + oMemIniFile.EraseSection(Caller.Params[0]) +{$IFDEF DELPHI6} + else if MethodName = 'READSECTIONVALUESEX' then + begin + oList := TStringList.Create; + try + oMemIniFile.ReadSectionValues(Caller.Params[0], oList); + TStrings(frxInteger(Caller.Params[1])).Clear; + for nCou := 0 to oList.Count-1 do +// TStrings(frxInteger(Caller.Params[1])).Add(oList.ValueFromIndex[nCou]); + TStrings(frxInteger(Caller.Params[1])).Add(oList.Values[oList.Names[nCou]]); + finally + oList.Free; + end; + end +{$ENDIF} + else if MethodName = 'CLEAR' then + oMemIniFile.Clear + else if MethodName = 'GETSTRINGS' then + oMemIniFile.GetStrings(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'SETSTRINGS' then + oMemIniFile.SetStrings(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVEINIFILETOSTREAM' then + SaveIniFileToStream(oMemIniFile, TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADINIFILEFROMSTREAM' then + LoadIniFileFromStream(oMemIniFile, TStream(frxInteger(Caller.Params[0]))) + end; + + if ClassType = TIniFile then + begin + oIniFile := TIniFile(Instance); + if MethodName = 'WRITESTRING' then + oIniFile.WriteString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READSTRING' then + Result := oIniFile.ReadString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'DELETEKEY' then + oIniFile.DeleteKey(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'READSECTION' then + oIniFile.ReadSection(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'READSECTIONS' then + oIniFile.ReadSections(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'READSECTIONVALUES' then + oIniFile.ReadSectionValues(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'ERASESECTION' then + oIniFile.EraseSection(Caller.Params[0]) +{$IFDEF DELPHI6} + else if MethodName = 'READSECTIONVALUESEX' then + begin + oList := TStringList.Create; + try + oIniFile.ReadSectionValues(Caller.Params[0], oList); + TStrings(frxInteger(Caller.Params[1])).Clear; + for nCou := 0 to oList.Count-1 do +// TStrings(frxInteger(Caller.Params[1])).Add(oList.ValueFromIndex[nCou]); + TStrings(frxInteger(Caller.Params[1])).Add(oList.Values[oList.Names[nCou]]); + finally + oList.Free; + end; + end +{$ENDIF} + else if MethodName = 'SAVEINIFILETOSTREAM' then + SaveIniFileToStream(oIniFile, TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADINIFILEFROMSTREAM' then + LoadIniFileFromStream(oIniFile, TStream(frxInteger(Caller.Params[0]))) + end; + +end; +{$HINTS ON} + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCustomIniFile then + begin + if PropName = 'FILENAME' then + Result := TIniFile(Instance).FileName + end; +end; + +procedure TFunctions.SaveIniFileToStream(oIniFile :TCustomIniFile; oStream :TStream); +var + oStrings :TStrings; + +begin + + if (not Assigned(oIniFile)) or (not Assigned(oStream)) then Exit; + + if not ((oIniFile is TIniFile) or (oIniFile is TMemIniFile)) then Exit; + + oStrings:= TStringList.Create; + try + + if oIniFile is TIniFile then + oStrings.LoadFromFile(oIniFile.FileName) + else + if oIniFile is TMemIniFile then + TMemIniFile(oIniFile).GetStrings(oStrings); + + oStrings.SaveToStream(oStream); + + finally + oStrings.Free; + end; + +end; + +procedure TFunctions.LoadIniFileFromStream(oIniFile :TCustomIniFile; oStream :TStream); +var + oStrings :TStrings; + +begin + + if (not Assigned(oIniFile)) or (not Assigned(oStream)) then Exit; + + if not ((oIniFile is TIniFile) or (oIniFile is TMemIniFile)) then Exit; + + oStrings:= TStringList.Create; + try + + oStrings.LoadFromStream(oStream); + + if oIniFile is TIniFile then + oStrings.SaveToFile(oIniFile.FileName) + else + if oIniFile is TMemIniFile then + TMemIniFile(oIniFile).SetStrings(oStrings); + + finally + oStrings.Free; + end; + +end; + +procedure TFunctions.WriteTStrings(oIniFile :TCustomIniFile; const Section :String; Values :TStrings; IsClear :Boolean = True); +var + nCou :Integer; + +begin + + if IsClear then oIniFile.EraseSection(Section); + + for nCou := 0 to Values.Count-1 do + oIniFile.WriteString(Section, 'Items'+IntToStr(nCou), Values[nCou]); + + oIniFile.WriteInteger(Section, 'Count', Values.Count); + +end; + +procedure TFunctions.ReadTStrings(oIniFile :TCustomIniFile; const Section :String; Values :TStrings; IsClear :Boolean = True); +var + nCou, nCount :Integer; + +begin + + nCount := oIniFile.ReadInteger(Section, 'Count', 0); + + if IsClear then Values.Clear; + + for nCou := 0 to nCount-1 do + Values.Add(oIniFile.ReadString(Section, 'Items'+IntToStr(nCou), '')); + +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsIniRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX.fs_iinterpreter.pas b/FastScript/FMX.fs_iinterpreter.pas new file mode 100644 index 0000000..0953f64 --- /dev/null +++ b/FastScript/FMX.fs_iinterpreter.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Main module } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iinterpreter; +{$i FMX.inc} +{$i fs_iinterpreter.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_ijs.pas b/FastScript/FMX.fs_ijs.pas new file mode 100644 index 0000000..4b321a6 --- /dev/null +++ b/FastScript/FMX.fs_ijs.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ JScript grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ijs; +{$i FMX.inc} +{$i fs_ijs.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_imenusrtti.pas b/FastScript/FMX.fs_imenusrtti.pas new file mode 100644 index 0000000..fe9b172 --- /dev/null +++ b/FastScript/FMX.fs_imenusrtti.pas @@ -0,0 +1,104 @@ +{**********************************************} +{ } +{ FastScript v1.9 } +{ Menus } +{ } +{ Copyright (c) 1998-2011 } +{ by Fast Reports Inc. } +{ } +{**********************************************} + +unit FMX.fs_imenusrtti; + +interface + +{$I fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Menus, FMX.fs_iinterpreter, FMX.fs_ievents, System.Types, System.Variants, FMX.Types; + +type +{$i frxPlatformsAttribute.inc} + + TfsMenusRTTI = class(TComponent); // fake component + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: + string; Caller: TfsMethodHelper): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + + with AScript do + begin + + AddType('TPopupAlignment', fvtInt); + + + with AddClass(TMenuItem, 'TTextControl') do + begin + AddMethod('procedure Popup', CallMethod); + AddMethod('procedure NeedPopup', CallMethod); + AddMethod('function HavePopup: Boolean', CallMethod); + end; { with } + + with AddClass(TMainMenu, 'TFmxObject') do + with AddClass(TMenuBar, 'TStyledControl') do + AddMethod('procedure StartMenuLoop', CallMethod); + + with AddClass(TPopupMenu, 'TFmxObject') do + AddMethod('procedure Popup(X, Y: Single)', CallMethod); + + end; { with } + +end; { Create } + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const + MethodName: string; Caller: TfsMethodHelper): Variant; +var + oMenuItem: TMenuItem; +begin + Result := 0; + + if ClassType = TMenuItem then + begin + + oMenuItem := TMenuItem(Instance); + + if MethodName = 'POPUP' then + oMenuItem.Popup + else if MethodName = 'NEEDPOPUP' then + oMenuItem.NeedPopup + else if MethodName = 'HAVEPOPUP' then + Result := oMenuItem.HavePopup; + + end + else if ClassType = TPopupMenu then + begin + + if MethodName = 'POPUP' then + TPopupMenu(Instance).Popup(Caller.Params[0], Caller.Params[1]); + + end; +end; { CallMethod } + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsMenusRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. + diff --git a/FastScript/FMX.fs_iparser.pas b/FastScript/FMX.fs_iparser.pas new file mode 100644 index 0000000..b922d9e --- /dev/null +++ b/FastScript/FMX.fs_iparser.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Parser } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iparser; +{$i FMX.inc} +{$i fs_iparser.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_ipascal.pas b/FastScript/FMX.fs_ipascal.pas new file mode 100644 index 0000000..33f4f12 --- /dev/null +++ b/FastScript/FMX.fs_ipascal.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Pascal grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ipascal; +{$i FMX.inc} +{$i fs_ipascal.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_isysrtti.pas b/FastScript/FMX.fs_isysrtti.pas new file mode 100644 index 0000000..b1405ee --- /dev/null +++ b/FastScript/FMX.fs_isysrtti.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Standard functions } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_isysrtti; +{$i FMX.inc} +{$i fs_isysrtti.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_itools.pas b/FastScript/FMX.fs_itools.pas new file mode 100644 index 0000000..871b7c6 --- /dev/null +++ b/FastScript/FMX.fs_itools.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Common functions } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_itools; +{$i FMX.inc} +{$i fs_itools.pas} \ No newline at end of file diff --git a/FastScript/FMX.fs_lazarus.pas b/FastScript/FMX.fs_lazarus.pas new file mode 100644 index 0000000..7c4d3a2 --- /dev/null +++ b/FastScript/FMX.fs_lazarus.pas @@ -0,0 +1,25 @@ +{ This file was automatically created by Lazarus. do not edit! + This source is only used to compile and install the package. + } + +unit fs_lazarus; + +interface + +uses + fs_ipascal, fs_icpp, fs_ijs, fs_ibasic, fs_iclassesrtti, fs_iconst, + fs_idialogsrtti, fs_ievents, fs_iexpression, fs_iextctrlsrtti, + fs_iformsrtti, fs_igraphicsrtti, fs_iilparser, fs_iinirtti, fs_iinterpreter, + fs_iparser, fs_isysrtti, fs_itools, fs_xml, fs_ireg, fs_synmemo, fs_tree, + LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('fs_ireg', @fs_ireg.Register); +end; + +initialization + RegisterPackage('fs_lazarus', @Register); +end. diff --git a/FastScript/FMX.fs_synmemo.fmx b/FastScript/FMX.fs_synmemo.fmx new file mode 100644 index 0000000..da0b5ed --- /dev/null +++ b/FastScript/FMX.fs_synmemo.fmx @@ -0,0 +1,50 @@ +object fsSynMemoSearch: TfsSynMemoSearch + Left = 0 + Top = 0 + BorderStyle = bsToolWindow + Caption = 'Search for text' + ClientHeight = 129 + ClientWidth = 249 + Position = poScreenCenter + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [dkDesktop, dkiPhone, dkiPad] + DesignerMobile = False + DesignerWidth = 0 + DesignerHeight = 0 + DesignerDeviceName = '' + DesignerOrientation = 0 + object Edit1: TEdit + TabOrder = 0 + Position.X = 48.000000000000000000 + Position.Y = 13.000000000000000000 + Width = 193.000000000000000000 + Height = 22.000000000000000000 + KillFocusByReturn = False + end + object Label1: TLabel + Height = 15.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 16.000000000000000000 + Text = 'Search :' + Width = 49.000000000000000000 + end + object Search: TButton + Height = 17.000000000000000000 + ModalResult = 1 + Position.X = 88.000000000000000000 + Position.Y = 48.000000000000000000 + TabOrder = 2 + Text = 'Search' + Width = 73.000000000000000000 + end + object Button1: TButton + Height = 17.000000000000000000 + ModalResult = 2 + Position.X = 168.000000000000000000 + Position.Y = 48.000000000000000000 + TabOrder = 3 + Text = 'Cancel' + Width = 73.000000000000000000 + end +end diff --git a/FastScript/FMX.fs_synmemo.pas b/FastScript/FMX.fs_synmemo.pas new file mode 100644 index 0000000..01b86ad --- /dev/null +++ b/FastScript/FMX.fs_synmemo.pas @@ -0,0 +1,2397 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Syntax memo FMX control } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +{ Simple syntax highlighter. Supports Pascal, C++, JS, VB and SQL syntax. + + Assign text to Text property. + Assign desired value to SyntaxType property. + Call SetPos to move caret. + Call ShowMessage to display an error message at the bottom. +} + +unit FMX.fs_synmemo; + +interface + +{$I fs.inc} +{$I fmx.inc} + +uses + System.Classes, System.Variants, System.UIConsts, System.SysUtils, System.UITypes, System.Types, + FMX.Controls, FMX.Forms, FMX.Menus, FMX.Types, FMX.Edit, FMX.Platform, FMX.TreeView +{$IFDEF DELPHI18} + ,FMX.StdCtrls +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Text +{$ENDIF} +{$IFDEF DELPHI28} + , FMX.BaseTypeAliases, FMX.FormTypeAliases +{$ENDIF}; + +type + TSyntaxType = (stPascal, stCpp, stJs, stVB, stSQL, stText); + TCharAttr = (caNo, caText, caBlock, caComment, caKeyword, caString); + TCharAttributes = set of TCharAttr; + +type + TfsBorderSettings = class(TPersistent) + private + FFill: TBrush; + FWidth: Integer; + private + procedure SetFill(const Value: TBrush); + procedure SetWidth(const Value: Integer); + public + constructor Create; + destructor Destroy; override; + published + property Fill: TBrush read FFill write SetFill; + property Width: Integer read FWidth write SetWidth; + end; + + TfsFontSettings = class(TPersistent) + private + FFill: TBrush; + FFont: TFont; + procedure SetFill(const Value: TBrush); + procedure SetFont(const Value: TFont); + public + constructor Create; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Fill: TBrush read FFill write SetFill; + property Font: TFont read FFont write SetFont; + end; + +{$i frxPlatformsAttribute.inc} + TfsSyntaxMemo = class(TStyledControl{$IFDEF DELPHI18}, ICaret{$ENDIF}) + private +{$IFDEF DELPHI18} + FCaret: TCaret; +{$ENDIF} + FBorder: TfsBorderSettings; + FFill: TBrush; + FFontSettings: TfsFontSettings; + FGutterFill: TBrush; + FAllowLinesChange: Boolean; + FCharHeight: Single; + FCharWidth: Single; + FDoubleClicked: Boolean; + FDown: Boolean; + FGutterWidth: Integer; + FFooterHeight: Integer; + FIsMonoType: Boolean; + FKeywords: String; + FMaxLength: Integer; + FMessage: String; + FModified: Boolean; + FMoved: Boolean; + FOffset: TPoint; + FPos: TPoint; + FReadOnly: Boolean; + FSelEnd: TPoint; + FSelStart: TPoint; + FSynStrings: TStrings; + FSyntaxType: TSyntaxType; + FTempPos: TPoint; + FText: TStringList; + FKeywordAttr: TfsFontSettings; + FStringAttr: TfsFontSettings; + FTextAttr: TfsFontSettings; + FCommentAttr: TfsFontSettings; + FBlockColor: TAlphaColor; + FBlockFontColor: TAlphaColor; + FUndo: TStringList; + FUpdating: Boolean; + FUpdatingSyntax: Boolean; + FVScroll: TScrollBar; + FWindowSize: TPoint; + FPopupMenu: TPopupMenu; + KWheel: Integer; + LastSearch: String; + FShowGutter: boolean; + FShowFooter: boolean; + Bookmarks: array of Integer; + FActiveLine: Integer; + FOnChange: TNotifyEvent; + FTmpCanvas: TBitmap; + procedure CalcCharSize; + function GetCharWidth(Str: String): Single; + function GetText: TStrings; + procedure SetText(Value: TStrings); + procedure SetSyntaxType(Value: TSyntaxType); + procedure SetShowGutter(Value: boolean); + procedure SetShowFooter(Value: boolean); + function FMemoFind(Text: String; var Position : TPoint): boolean; + function GetCharAttr(Pos: TPoint): TCharAttributes; + function GetLineBegin(Index: Integer): Integer; + function GetPlainTextPos(Pos: TPoint): Integer; + function GetPosPlainText(Pos: Integer): TPoint; + function GetSelText: String; + function LineAt(Index: Integer): String; + function LineLength(Index: Integer): Integer; + function Pad(n: Integer): String; + procedure AddSel; + procedure AddUndo; + procedure ClearSel; + procedure CreateSynArray; + procedure DoChange; + procedure EnterIndent; + procedure SetSelText(Value: String); + procedure ShiftSelected(ShiftRight: Boolean); + procedure ShowCaretPos; + procedure TabIndent; + procedure UnIndent; + procedure UpdateScrollBar; + procedure UpdateSyntax; + procedure DoLeft; + procedure DoRight; + procedure DoUp; + procedure DoDown; + procedure DoHome(Ctrl: Boolean); + procedure DoEnd(Ctrl: Boolean); + procedure DoPgUp; + procedure DoPgDn; + procedure DoChar(Ch: Char); + procedure DoReturn; + procedure DoDel; + procedure DoBackspace; + procedure DoCtrlI; + procedure DoCtrlU; + procedure DoCtrlR; + procedure DoCtrlL; + procedure ScrollClick(Sender: TObject); + procedure ScrollEnter(Sender: TObject); + procedure LinesChange(Sender: TObject); + procedure ShowPos; + procedure BookmarkDraw(Y :Single; ALine : integer); + procedure ActiveLineDraw(Y :Single; ALine : integer); + procedure CorrectBookmark(Line : integer; delta : integer); + procedure SetKeywordAttr(Value: TfsFontSettings); + procedure SetStringAttr(Value: TfsFontSettings); + procedure SetTextAttr(Value: TfsFontSettings); + procedure SetCommentAttr(Value: TfsFontSettings); + procedure SetBorder(const Value: TfsBorderSettings); + procedure SetFill(const Value: TBrush); + procedure SetFontSettings(const Value: TfsFontSettings); + procedure SetGutterFill(const Value: TBrush); + protected + procedure SetParent(const Value: TFmxObject); override; + function GetClientRect: TRectF; + procedure DblClick; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure MouseMove(Shift: TShiftState; X, Y: Single); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); override; + procedure CopyPopup(Sender: TObject); + procedure PastePopup(Sender: TObject); + procedure CutPopup(Sender: TObject); + procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); override; + procedure DOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); + procedure DDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); + procedure DoExit; override; + procedure Resize; override; + procedure UpdateWindowSize; + procedure FontChanged(Sender: TObject); + procedure DialogKey(var Key: Word; Shift: TShiftState); override; +{$IFDEF Delphi18} + function ICaret.GetObject = GetCaret; + function GetCaret: TCustomCaret; + procedure SetCaret(const Value: TCaret); + procedure ShowCaret; + procedure HideCaret; +{$ENDIF} +{$IFDEF Delphi17} + function CreateCaret: TCaret; {$IFNDEF Delphi18} override; {$ENDIF} +{$ENDIF} + procedure SetAttr(aCanvas: TCanvas; a: TCharAttributes); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Paint; override; + procedure CopyToClipboard; + procedure CutToClipboard; + procedure PasteFromClipboard; + procedure SetPos(x, y: Integer); + procedure ShowMessage(s: String); + procedure Undo; + procedure UpdateView; + function GetPos: TPoint; + function Find(Text: String): boolean; + property Modified: Boolean read FModified write FModified; + property SelText: String read GetSelText write SetSelText; + function IsBookmark(Line : integer): integer; + procedure AddBookmark(Line, Number : integer); + procedure DeleteBookmark(Number : integer); + procedure GotoBookmark(Number : integer); + procedure SetActiveLine(Line : Integer); + function GetActiveLine: Integer; +{$IFDEF Delphi18} + property Caret: TCaret read FCaret write SetCaret; +{$ENDIF} + published + property Align; + property Anchors; + property DragMode; + property Enabled; + property PopupMenu; + property ShowHint; + property TabOrder; + property Width; + property Height; + property Visible; +{$IFDEF Delphi18} + property Cursor; +{$ENDIF} + property BlockColor: TAlphaColor read FBlockColor write FBlockColor; + property BlockFontColor: TAlphaColor read FBlockFontColor write FBlockFontColor; + property CommentAttr: TfsFontSettings read FCommentAttr write SetCommentAttr; + property KeywordAttr: TfsFontSettings read FKeywordAttr write SetKeywordAttr; + property StringAttr: TfsFontSettings read FStringAttr write SetStringAttr; + property TextAttr: TfsFontSettings read FTextAttr write SetTextAttr; + property Border: TfsBorderSettings read FBorder write SetBorder; + property Fill: TBrush read FFill write SetFill; + property FontSettings: TfsFontSettings read FFontSettings write SetFontSettings; + property GutterFill: TBrush read FGutterFill write SetGutterFill; + property Lines: TStrings read GetText write SetText; + property ReadOnly: Boolean read FReadOnly write FReadOnly; + property SyntaxType: TSyntaxType read FSyntaxType write SetSyntaxType; + property ShowFooter: boolean read FShowFooter write SetShowFooter; + property ShowGutter: boolean read FShowGutter write SetShowGutter; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + end; + + TfsSynMemoSearch = class(TForm) + Search: TButton; + Button1: TButton; + Label1: TLabel; + Edit1: TEdit; + procedure FormKeyPress(Sender: TObject; var Key: Char); + private + { Private declarations } + public + { Public declarations } + end; + +var + SynMemoSearch: TfsSynMemoSearch; + +implementation + +{$R *.FMX} +{$IFDEF DELPHI18} +type THachCaret = class(TCaret); +{$ENDIF} + +const + PasKeywords = + 'and,array,begin,case,const,div,do,downto,else,end,except,finally,'+ + 'for,function,if,in,is,mod,nil,not,of,or,procedure,program,repeat,shl,'+ + 'shr,string,then,to,try,until,uses,var,while,with,xor'; + + CppKeywords = + 'bool,break,case,char,continue,define,default,delete,do,double,else,'+ + 'except,finally,float,for,if,include,int,is,new,return,string,switch,try,'+ + 'variant,void,while'; + + SQLKeywords = + 'active,after,all,alter,and,any,as,asc,ascending,at,auto,' + + 'base_name,before,begin,between,by,cache,cast,check,column,commit,' + + 'committed,computed,conditional,constraint,containing,count,create,' + + 'current,cursor,database,debug,declare,default,delete,desc,descending,' + + 'distinct,do,domain,drop,else,end,entry_point,escape,exception,execute,' + + 'exists,exit,external,extract,filter,for,foreign,from,full,function,' + + 'generator,grant,group,having,if,in,inactive,index,inner,insert,into,is,' + + 'isolation,join,key,left,level,like,merge,names,no,not,null,of,on,only,' + + 'or,order,outer,parameter,password,plan,position,primary,privileges,' + + 'procedure,protected,read,retain,returns,revoke,right,rollback,schema,' + + 'select,set,shadow,shared,snapshot,some,suspend,table,then,to,' + + 'transaction,trigger,uncommitted,union,unique,update,user,using,values,' + + 'view,wait,when,where,while,with,work'; + + JSKeywords = + 'break,case,continue,default,delete,do,else,except,finally,for,function,' + + 'import,in,is,if,new,return,switch,try,var,while,with'; + + VBKeywords = + 'addressof,and,as,byref,byval,case,catch,delete,dim,do,else,elseif,' + + 'end,endif,exit,finally,for,function,if,imports,is,loop,mod,new,next,' + + 'not,or,rem,return,select,set,step,sub,then,to,try,wend,while,with,xor'; + + + WordChars = ['a'..'z', 'A'..'Z', '0'..'9', '_']; + LineBreak: AnsiString = sLineBreak; + +function IsUnicodeChar(Chr: Char): Boolean; +begin + Result := ((Chr >= Char($007F)) and (Chr <= Char($FFFF))); +end; + + +{ TfsSyntaxMemo } + +constructor TfsSyntaxMemo.Create(AOwner: TComponent); +var + m: TMenuItem; + i: integer; +begin + inherited Create(AOwner); + FTmpCanvas := TBitmap.Create(1, 1); +{$IFDEF DELPHI18} + FCaret := CreateCaret; +{$ENDIF} + FVScroll := TScrollBar.Create(Self); + FVScroll.Stored := False; + FVScroll.Orientation := TOrientation.orVertical; + + FFontSettings := TfsFontSettings.Create; + FFontSettings.Font.OnChanged := FontChanged; + FFontSettings.Fill.Color := TAlphaColorRec.Black; + + FCommentAttr := TfsFontSettings.Create; + FCommentAttr.Fill.Color := TAlphaColorRec.Green; + FCommentAttr.Font.Style := [TFontStyle.fsItalic]; + + FKeywordAttr := TfsFontSettings.Create; + FKeywordAttr.FFill.Color := TAlphaColorRec.Navy; + FKeywordAttr.Font.Style := [TFontStyle.fsBold]; + + FStringAttr := TfsFontSettings.Create; + FStringAttr.Fill.Color := TAlphaColorRec.Navy; + FStringAttr.Font.Style := []; + + FTextAttr := TfsFontSettings.Create; + FTextAttr.Fill.Color := TAlphaColorRec.Black; + FTextAttr.Font.Style := []; + + FBorder := TfsBorderSettings.Create; + FFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.White); + FGutterFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.Whitesmoke); + + if AOwner is TFmxObject then + Parent := AOwner as TFmxObject; + + OnDragOver := DOver; + OnDragDrop := DDrop; + KWheel := -1; + + + FText := TStringList.Create; + FUndo := TStringList.Create; + FSynStrings := TStringList.Create; + FText.Add(''); + FText.OnChange := LinesChange; + FMaxLength := 1024; + SyntaxType := stPascal; + FMoved := True; + SetPos(1, 1); + FOffset := Point(0, 0); + CanFocus := True; + Cursor := crIBeam; + + FBlockColor := TAlphaColorRec.Blue; + FBlockFontColor := TAlphaColorRec.White; + + FPopupMenu := TPopupMenu.Create(Self); + m := TMenuItem.Create(FPopupMenu); + m.Text := 'Cut'; + m.OnClick := CutPopup; + FPopupMenu.AddObject(m); + m := TMenuItem.Create(FPopupMenu); + m.Text := 'Copy'; + m.OnClick := CopyPopup; + FPopupMenu.AddObject(m); + m := TMenuItem.Create(FPopupMenu); + m.Text := 'Paste'; + m.OnClick := PastePopup; + FPopupMenu.AddObject(m); + + LastSearch := ''; + Setlength(Bookmarks, 10); + for i := 0 to Length(Bookmarks)-1 do + Bookmarks[i] := -1; + + FActiveLine := -1; + + Height := 200; + Width := 200; + CalcCharSize; +end; + +destructor TfsSyntaxMemo.Destroy; +begin + FPopupMenu.Free; + FCommentAttr.Free; + FKeywordAttr.Free; + FStringAttr.Free; + FFontSettings.Free; + FTextAttr.Free; + FText.Free; + FUndo.Free; + FSynStrings.Free; + //FVScroll.Free; + FFill.Free; + FBorder.Free; + FGutterFill.Free; +{$IFDEF DELPHI18} + FCaret.Free; +{$ENDIF} + FreeAndNil(FTmpCanvas); + inherited; +end; + +procedure TfsSyntaxMemo.CalcCharSize; +var + tmpBmp: TBitmap; + r: TRectF; +begin + tmpBmp := TBitmap.Create(1, 1); + with tmpBmp.Canvas do + begin + Font.Assign(FFontSettings.Font); + Font.Style := []; + r := RectF(0, 0, 1000, 1000); + MeasureText(r, 'WWWWWW', True, [], TTextAlign.taLeading); // taLeading returns incorrect results in xe2 + FCharHeight := r.Height + 2; + FCharWidth := r.Width / 6; + FIsMonoType := Pos('COURIER NEW', AnsiUppercase(FFontSettings.Font.Family)) <> 0; + end; + tmpBmp.Free; +end; + +{$IFDEF Delphi17} +function TfsSyntaxMemo.CreateCaret: TCaret; +begin + Result := TCaret.Create(Self); + Result.Visible := True; +{$IFDEF DELPHI20} + Result.ReadOnly := False; + Result.Color := claBlack; +{$ENDIF} + Result.Pos := TPointF.Create(1, 1); +end; +{$ENDIF} + +{$IFDEF DELPHI18} +function TfsSyntaxMemo.GetCaret: TCustomCaret; +begin + Result := FCaret; +end; + +procedure TfsSyntaxMemo.SetCaret(const Value: TCaret); +begin + if Assigned(FCaret) then + FCaret.Assign(Value); +end; + +procedure TfsSyntaxMemo.ShowCaret; +begin + THachCaret(FCaret).Show; +end; + +procedure TfsSyntaxMemo.HideCaret; +begin + THachCaret(FCaret).Hide; +end; +{$ENDIF} + +procedure TfsSyntaxMemo.ShowCaretPos; +var + cWidth: Single; + LineLen: Integer; +begin + cWidth := GetCharWidth(Copy(LineAt(FPos.Y - 1), FOffset.X, FPos.X - 1 - FOffset.X)); + LineLen := LineLength(FPos.Y - 1); + if LineLen < FPos.X then + cWidth := Round(cWidth + FCharWidth * (FPos.X - 1 - LineLen)); +{$IFNDEF Delphi18} +{$IFDEF Delphi17} + if IsFocused then + begin + CaretVisible := False; + SetCaretParams(PointF( + FCharWidth * (FPos.X - 1 - FOffset.X) + FGutterWidth + FBorder.Width + 1, + FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1), + PointF(2, FCharHeight), claBlack); + CaretVisible := True; + end + else + CaretVisible := False; +{$ELSE} + if IsFocused then + begin + SetCaretSize(PointF(2, FCharHeight)); + SetCaretPos(PointF( + FCharWidth * (FPos.X - 1 - FOffset.X) + FGutterWidth + FBorder.Width + 1, + FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1)); + ShowCaretProc; + end + else + HideCaret; +{$ENDIF} +{$ELSE} + if IsFocused then + begin + //SetCaretSize(PointF(2, FCharHeight)); + FCaret.Size := PointF(2, FCharHeight); + FCaret.Pos := PointF( + cWidth + FGutterWidth + FBorder.Width + 1, + FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1); + ShowCaret; +// SetCaretPos(PointF( +// FCharWidth * (FPos.X - 1 - FOffset.X) + FGutterWidth + FBorder.Width + 1, +// FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1)); +// ShowCaretProc; + end + else + HideCaret; +{$ENDIF} +end; + +procedure TfsSyntaxMemo.ShowPos; +var + cRect: TRectF; +begin + if FFooterHeight > 0 then + with Canvas do + begin + Font.Family := 'Tahoma'; + Font.Style := []; + Font.Size := 11; + Fill.Color := TAlphaColorRec.Black; + cRect := GetClientRect; + FillText(RectF(cRect.Left + FGutterWidth + 2, cRect.Bottom - TextHeight('|') - 8, + FGutterWidth + 4 + FCharWidth * 10 , + (Self.Height - TextHeight('|') - 4) + FCharHeight), IntToStr(FPos.y) + + ' : ' + IntToStr(FPos.x) + ' ', FALSE, 1, [], TTextAlign.taLeading); + end; +end; + +procedure TfsSyntaxMemo.SetParent(const Value: TFmxObject); +begin + inherited SetParent(Value); + if (Parent = nil) or (csDestroying in ComponentState) then Exit; + ShowGutter := True; + ShowFooter := True; + FVScroll.Parent := Self; + FVScroll.OnChange := ScrollClick; + FVScroll.OnEnter := ScrollEnter; +end; + +function TfsSyntaxMemo.GetClientRect: TRectF; +begin + if FVScroll.Visible then + Result := RectF(FBorder.Width, FBorder.Width, + Width - FVScroll.Width - FBorder.Width, + Height - FBorder.Width) + else + Result := RectF(FBorder.Width, FBorder.Width, + Width - FBorder.Width, Height - FBorder.Width); +end; + +procedure TfsSyntaxMemo.UpdateSyntax; +begin + CreateSynArray; + Repaint; +end; + +procedure TfsSyntaxMemo.UpdateScrollBar; +begin + with FVScroll do + begin +// prevent OnScroll event + FUpdating := True; + + Value := 0; + ViewportSize := 0; + + Max := FText.Count; + SmallChange := 1; + if FWindowSize.Y < Max then + begin + Visible := True; + ViewportSize := FWindowSize.Y; + end + else + Visible := False; + ViewportSize := FWindowSize.Y; + Value := FOffset.Y; + + FUpdating := False; + end; +end; + +function TfsSyntaxMemo.GetText: TStrings; +var + i: Integer; +begin + for i := 0 to FText.Count - 1 do + FText[i] := LineAt(i); + Result := FText; + FAllowLinesChange := True; +end; + +procedure TfsSyntaxMemo.SetText(Value: TStrings); +begin + FAllowLinesChange := True; + FText.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetSyntaxType(Value: TSyntaxType); +begin + FSyntaxType := Value; + if Value = stPascal then + FKeywords := PasKeywords + else if Value = stCpp then + FKeywords := CppKeywords + else if Value = stSQL then + FKeywords := SQLKeywords + else if Value = stVB then + FKeywords := VBKeywords + else if Value = stJS then + FKeywords := JSKeywords + else + FKeywords := ''; + UpdateSyntax; +end; + +function TfsSyntaxMemo.GetPos: TPoint; +begin + Result := FPos; +end; + +procedure TfsSyntaxMemo.DoChange; +begin + FModified := True; + if Assigned(FOnChange) then + FOnChange(Self); +end; + +procedure TfsSyntaxMemo.LinesChange(Sender: TObject); +begin + if FAllowLinesChange then + begin + UpdateSyntax; + FAllowLinesChange := False; + if FText.Count = 0 then + FText.Add(''); + FMoved := True; + FUndo.Clear; + FPos := Point(1, 1); + FOffset := Point(0, 0); + SetPos(FPos.X, FPos.Y); + ClearSel; + ShowCaretPos; + UpdateScrollBar; + end; +end; + +procedure TfsSyntaxMemo.ShowMessage(s: String); +begin + FMessage := s; + Repaint; +end; + +procedure SetClipboard(const Value: String); +{$IFDEF Delphi17} +var + ClipService: IFMXClipboardService; +begin + if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(ClipService)) then + ClipService.SetClipboard(Value); +end; +{$ELSE} +begin + Platform.SetClipboard(Value); +end; +{$ENDIF} + +function GetClipboard: String; +{$IFDEF Delphi17} +var + ClipService: IFMXClipboardService; +begin + if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(ClipService)) then + Result := ClipService.GetClipboard.ToString + else + Result := ''; +end; +{$ELSE} +begin + Result := VarToStr(Platform.GetClipboard); +end; +{$ENDIF} + +procedure TfsSyntaxMemo.CopyToClipboard; +begin + if FSelStart.X <> 0 then + SetClipboard(SelText); +end; + +procedure TfsSyntaxMemo.CutToClipboard; +begin + if not FReadOnly then + begin + if FSelStart.X <> 0 then + begin + SetClipboard(SelText); + SelText := ''; + end; + CorrectBookmark(FSelStart.Y, FSelStart.Y - FSelEnd.Y); + Repaint; + end; +end; + +procedure TfsSyntaxMemo.PasteFromClipboard; +begin + if (not FReadOnly) then + SelText := GetClipboard; +end; + +function TfsSyntaxMemo.LineAt(Index: Integer): String; +begin + if Index < FText.Count then + Result := TrimRight(FText[Index]) + else + Result := ''; +end; + +function TfsSyntaxMemo.LineLength(Index: Integer): Integer; +begin + if Index < 0 then + Result := 0 else + Result := Length(LineAt(Index)); +end; + +function TfsSyntaxMemo.Pad(n: Integer): String; +begin + result := ''; + SetLength(result, n); + Result := StringOfChar(Char(' '), n) +end; + +procedure TfsSyntaxMemo.AddUndo; +begin + if not FMoved then exit; + FUndo.Add(Format('%5d%5d', [FPos.X, FPos.Y]) + FText.Text); + if FUndo.Count > 32 then + FUndo.Delete(0); +end; + +procedure TfsSyntaxMemo.Undo; +var + s: String; +begin + FMoved := True; + if FUndo.Count = 0 then exit; + s := FUndo[FUndo.Count - 1]; + FPos.X := StrToInt(Copy(s, 1, 5)); + FPos.Y := StrToInt(Copy(s, 6, 5)); + FText.Text := Copy(s, 11, Length(s) - 10); + FUndo.Delete(FUndo.Count - 1); + SetPos(FPos.X, FPos.Y); + UpdateSyntax; + DoChange; +end; + +function TfsSyntaxMemo.GetPlainTextPos(Pos: TPoint): Integer; +var + i: Integer; +begin + Result := 0; + for i := 0 to Pos.Y - 2 do + Result := Result + Length(FText[i]) + Length(LineBreak); + Result := Result + Pos.X; +end; + +function TfsSyntaxMemo.GetPosPlainText(Pos: Integer): TPoint; +var + i: Integer; + s: String; +begin + Result := Point(0, 1); + s := FText.Text; + i := 1; + while i <= Pos do + if s[i] = Char(LineBreak[1]) then + begin + Inc(i, Length(LineBreak)); + if i <= Pos then + begin + Inc(Result.Y); + Result.X := 0; + end + else + Inc(Result.X); + end + else + begin + Inc(i); + Inc(Result.X); + end; +end; + +function TfsSyntaxMemo.GetLineBegin(Index: Integer): Integer; +var + s: String; +begin + s := FText[Index]; + Result := 1; + if Trim(s) <> '' then + for Result := 1 to Length(s) do + if s[Result] <> ' ' then + break; +end; + +procedure TfsSyntaxMemo.TabIndent; +begin + SelText := Pad(2); +end; + +procedure TfsSyntaxMemo.EnterIndent; +var + res: Integer; +begin + if Trim(FText[FPos.Y - 1]) = '' then + res := FPos.X else + res := GetLineBegin(FPos.Y - 1); + + CorrectBookmark(FPos.Y, 1); + + FPos := Point(1, FPos.Y + 1); + SelText := Pad(res - 1); +end; + +procedure TfsSyntaxMemo.UnIndent; +var + i, res: Integer; +begin + i := FPos.Y - 2; + res := FPos.X - 1; + CorrectBookmark(FPos.Y, -1); + while i >= 0 do + begin + res := GetLineBegin(i); + if (res < FPos.X) and (Trim(FText[i]) <> '') then + break else + Dec(i); + end; + FSelStart := FPos; + FSelEnd := FPos; + Dec(FSelEnd.X, FPos.X - res); + SelText := ''; +end; + +procedure TfsSyntaxMemo.ShiftSelected(ShiftRight: Boolean); +var + i, ib, ie: Integer; + s: String; + Shift: Integer; +begin + if FReadOnly then exit; + AddUndo; + if FSelStart.X + FSelStart.Y * FMaxLength < FSelEnd.X + FSelEnd.Y * FMaxLength then + begin + ib := FSelStart.Y - 1; + ie := FSelEnd.Y - 1; + end + else + begin + ib := FSelEnd.Y - 1; + ie := FSelStart.Y - 1; + end; + if FSelEnd.X = 1 then + Dec(ie); + + Shift := 2; + if not ShiftRight then + for i := ib to ie do + begin + s := FText[i]; + if (Trim(s) <> '') and (GetLineBegin(i) - 1 < Shift) then + Shift := GetLineBegin(i) - 1; + end; + + for i := ib to ie do + begin + s := FText[i]; + if ShiftRight then + s := Pad(Shift) + s + else if Trim(s) <> '' then + Delete(s, 1, Shift); + FText[i] := s; + end; + UpdateSyntax; + DoChange; +end; + +function TfsSyntaxMemo.GetSelText: String; +var + p1, p2: TPoint; + i: Integer; +begin + if FSelStart.X + FSelStart.Y * FMaxLength < FSelEnd.X + FSelEnd.Y * FMaxLength then + begin + p1 := FSelStart; + p2 := FSelEnd; + Dec(p2.X); + end + else + begin + p1 := FSelEnd; + p2 := FSelStart; + Dec(p2.X); + end; + + if LineLength(p1.Y - 1) < p1.X then + begin + Inc(p1.Y); + p1.X := 1; + end; + if LineLength(p2.Y - 1) < p2.X then + p2.X := LineLength(p2.Y - 1); + + i := GetPlainTextPos(p1); + Result := Copy(FText.Text, i, GetPlainTextPos(p2) - i + 1); +end; + +procedure TfsSyntaxMemo.SetSelText(Value: String); +var + p1, p2, p3: TPoint; + i: Integer; + s: String; +begin + if FReadOnly then exit; + AddUndo; + if FSelStart.X = 0 then + begin + p1 := FPos; + p2 := p1; + Dec(p2.X); + end + else if FSelStart.X + FSelStart.Y * FMaxLength < FSelEnd.X + FSelEnd.Y * FMaxLength then + begin + p1 := FSelStart; + p2 := FSelEnd; + Dec(p2.X); + end + else + begin + p1 := FSelEnd; + p2 := FSelStart; + Dec(p2.X); + end; + + if LineLength(p1.Y - 1) < p1.X then + FText[p1.Y - 1] := FText[p1.Y - 1] + Pad(p1.X - LineLength(p1.Y - 1) + 1); + if LineLength(p2.Y - 1) < p2.X then + p2.X := LineLength(p2.Y - 1); + + i := GetPlainTextPos(p1); + s := FText.Text; + Delete(s, i, GetPlainTextPos(p2) - i + 1); + Insert(Value, s, i); + FText.Text := s; + p3 := GetPosPlainText(i + Length(Value)); + + CorrectBookmark(FPos.Y, p3.y-FPos.Y); + + SetPos(p3.X, p3.Y); + FSelStart.X := 0; + DoChange; + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.ClearSel; +begin + if FSelStart.X <> 0 then + begin + FSelStart := Point(0, 0); + Repaint; + end; +end; + +procedure TfsSyntaxMemo.AddSel; +begin + if FSelStart.X = 0 then + FSelStart := FTempPos; + FSelEnd := FPos; + Repaint; +end; + +procedure TfsSyntaxMemo.SetPos(x, y: Integer); +begin + if FMessage <> '' then + begin + FMessage := ''; + Repaint; + end; + + if x > FMaxLength then x := FMaxLength; + if x < 1 then x := 1; + if y > FText.Count then y := FText.Count; + if y < 1 then y := 1; + + FPos := Point(x, y); + if (FWindowSize.X = 0) or (FWindowSize.Y = 0) then exit; + + if FOffset.Y >= FText.Count then + FOffset.Y := FText.Count - 1; + + if FPos.X > FOffset.X + FWindowSize.X then + begin + FOffset.X := FOffset.X + FPos.X - (FOffset.X + FWindowSize.X); + Repaint; + end + else if FPos.X <= FOffset.X then + begin + FOffset.X := FOffset.X - (FOffset.X - FPos.X + 1); + Repaint; + end + else if FPos.Y > FOffset.Y + FWindowSize.Y then + begin + FOffset.Y := FOffset.Y + FPos.Y - (FOffset.Y + FWindowSize.Y); + Repaint; + end + else if FPos.Y <= FOffset.Y then + begin + FOffset.Y := FOffset.Y - (FOffset.Y - FPos.Y + 1); + Repaint; + end; + + ShowCaretPos; + UpdateScrollBar; + +end; + +procedure TfsSyntaxMemo.ScrollClick(Sender: TObject); +begin + if FUpdating then exit; + FOffset.Y := Round(FVScroll.Value); + if FOffset.Y > FText.Count then + FOffset.Y := FText.Count; + ShowCaretPos; + Repaint; +end; + +procedure TfsSyntaxMemo.ScrollEnter(Sender: TObject); +begin + SetFocus; +end; + +procedure TfsSyntaxMemo.DblClick; +var + s: String; +begin + FDoubleClicked := True; + DoCtrlL; + FSelStart := FPos; + s := LineAt(FPos.Y - 1); + if s <> '' then + while CharInSet(s[FPos.X],WordChars) + or IsUnicodeChar(s[FPos.X]) do + Inc(FPos.X); + FSelEnd := FPos; + Repaint; +end; + +function GetComponentForm(Comp: TFmxObject): TCommonCustomForm; +begin + Result := nil; + while (Comp.Parent <> nil) do + begin + if (Comp.Parent is TCommonCustomForm) then + begin + Result := Comp.Parent as TCommonCustomForm; + Exit; + end; + Comp := Comp.Parent; + end; +end; + +procedure TfsSyntaxMemo.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); +var + pt: TPointF; + f: TCommonCustomForm; + r: TRectF; + LStr, s: String; + i, cIndex: Integer; + +begin + if FDoubleClicked then + begin + FDoubleClicked := False; + Exit; + end; + if Button = TMouseButton.mbRight then + begin + if PopupMenu = nil then + begin + f := GetComponentForm(Self); + if f <> nil then + begin + pt := f.ClientToScreen(PointF(AbsoluteRect.Left + X, AbsoluteRect.Top + Y)); + FPopUpMenu.Popup(pt.X, pt.Y); + end; + end; + end + else + begin + FMoved := True; + if not IsFocused then + SetFocus; + FDown := True; + if FIsMonoType then + SetPos(Round((X - FGutterWidth) / FCharWidth) + 1 + FOffset.X, + Trunc(Y / FCharHeight) + 1 + FOffset.Y) + else + begin + cIndex := 0; + LStr := LineAt(FPos.Y - 1); + LStr := Copy(LineAt(FPos.Y - 1), FOffset.X + 1, Length(LStr) - (FOffset.X + 1)); + for i := 1 to Length(LStr) do + begin + s := Copy(LStr, 1, i); + r := RectF(0, 0, 100000, 100000); + FTmpCanvas.Canvas.MeasureText(r, s, False, [], TTextAlign.taLeading); + if r.Width >= X - FGutterWidth then + begin + cIndex := i; + break; + end; + end; + SetPos(cIndex + 1 + FOffset.X, + Trunc(Y / FCharHeight) + 1 + FOffset.Y) + end; + ClearSel; + end; +end; + +procedure TfsSyntaxMemo.MouseMove(Shift: TShiftState; X, Y: Single); +begin + if FDown then + begin + FTempPos := FPos; + FPos.X := Round((X - FGutterWidth) / FCharWidth) + 1 + FOffset.X; + FPos.Y := Round(Y / FCharHeight) + 1 + FOffset.Y; + if (FPos.X <> FTempPos.X) or (FPos.Y <> FTempPos.Y) then + begin + SetPos(FPos.X, FPos.Y); + AddSel; + end; + end; +end; + +procedure TfsSyntaxMemo.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Single); +begin + FDown := False; +end; + +procedure TfsSyntaxMemo.MouseWheel(Shift: TShiftState; WheelDelta: Integer; + var Handled: Boolean); +begin + inherited; + FVScroll.Value := FVScroll.Value + (WheelDelta div ABS(WheelDelta)) * KWheel; +end; + +procedure TfsSyntaxMemo.DialogKey(var Key: Word; Shift: TShiftState); +begin + inherited; + if Key = 9 then + begin + if Shift = [] then + begin + if FSelStart.X <> 0 then + DoCtrlI + else + TabIndent; + end + else if Shift = [ssShift] then + DoCtrlU; + FMoved := True; + end; +end; + +procedure TfsSyntaxMemo.KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); +var + MyKey: Boolean; +begin + inherited; + FAllowLinesChange := False; + + FTempPos := FPos; + MyKey := True; + case Key of + vkLeft: + if ssCtrl in Shift then + DoCtrlL else + DoLeft; + + vkRight: + if ssCtrl in Shift then + DoCtrlR else + DoRight; + + vkUp: + DoUp; + + vkDown: + DoDown; + + vkHome: + DoHome(ssCtrl in Shift); + + vkEnd: + DoEnd(ssCtrl in Shift); + + vkPrior: + DoPgUp; + + vkNext: + DoPgDn; + + vkReturn: + if Shift = [] then + DoReturn; + + vkDelete: + if ssShift in Shift then + CutToClipboard else + DoDel; + + vkBack: + DoBackspace; + + vkInsert: + if ssCtrl in Shift then + CopyToClipboard + else if ssShift in Shift then + PasteFromClipboard; + + vkF3: + Find(LastSearch); // F3 Repeat search + + else + MyKey := False; + end; + + if (Shift = [ssCtrl]) or (Shift = [ssCommand]) then + begin + MyKey := True; + if (Key = Ord('c')) or (Key = Ord('C')) then // Ctrl+C Copy + CopyToClipboard + else if (Key = Ord('v')) or (Key = Ord('V')) then // Ctrl+V Paste + PasteFromClipboard + else if (Key = Ord('x')) or (Key = Ord('X')) then // Ctrl+X Cut + CutToClipboard + else if (Key = Ord('z')) or (Key = Ord('Z')) then // Ctrl+Z Undo + Undo + else if (Key = Ord('a')) or (Key = Ord('A')) then // Ctrl+A Select all + begin + SetPos(0, 0); + FSelStart := FPos; + SetPos(LineLength(FText.Count - 1) + 1, FText.Count); + FSelEnd := FPos; + Repaint; + end + else if (Key = Ord('f')) or (Key = Ord('F')) then // Ctrl+F Search + begin + SynMemoSearch := TfsSynMemoSearch.Create(nil); + if SynMemoSearch.ShowModal = mrOk then + Find(SynMemoSearch.Edit1.Text); + LastSearch := SynMemoSearch.Edit1.Text; + SynMemoSearch.Free; + end + else if (Key = Ord('y')) or (Key = Ord('Y')) then // Ctrl+Y Delete line + begin + if FText.Count > FPos.Y then + begin + FMoved := True; + AddUndo; + FText.Delete(FPos.Y - 1); + CorrectBookmark(FPos.Y, -1); + UpdateSyntax; + end + else + if FText.Count = FPos.Y then + begin + FMoved := True; + AddUndo; + FText[FPos.Y - 1] := ''; + FPos.X := 1; + SetPos(FPos.X, FPos.Y); + UpdateSyntax; + end + end + else if Key in [48..57] then + GotoBookmark(Key-48) + else + MyKey := False; + end; + + if Shift = [ssCtrl, ssShift] then + if Key in [48..57] then + if IsBookmark(FPos.Y - 1) < 0 then + AddBookmark(FPos.Y - 1, Key-48) + else + if IsBookmark(FPos.Y - 1) = (Key-48) then + DeleteBookmark(Key-48); + + + if Key in [vkLeft, vkRight, vkUp, vkDown, vkHome, vkEnd, vkPrior, vkNext] then + begin + FMoved := True; + if ssShift in Shift then + AddSel else + ClearSel; + end + else if Key in [vkReturn, vkDelete, vkBack, vkInsert] then + FMoved := True; + + case WideChar(KeyChar) of + #0032..#$FFFF: + if (Shift = []) or (Shift = [ssShift]) then + begin + DoChar(WideChar(KeyChar)); + FMoved := True; + end; + else + MyKey := False; + end; + if MyKey then + Key := 0; +end; + +procedure TfsSyntaxMemo.DoLeft; +begin + Dec(FPos.X); + if FPos.X < 1 then + FPos.X := 1; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoRight; +begin + Inc(FPos.X); + if FPos.X > FMaxLength then + FPos.X := FMaxLength; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoUp; +begin + Dec(FPos.Y); + if FPos.Y < 1 then + FPos.Y := 1; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoDown; +begin + Inc(FPos.Y); + if FPos.Y > FText.Count then + FPos.Y := FText.Count; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoHome(Ctrl: Boolean); +begin + if Ctrl then + SetPos(1, 1) else + SetPos(1, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoEnd(Ctrl: Boolean); +begin + if Ctrl then + SetPos(LineLength(FText.Count - 1) + 1, FText.Count) else + SetPos(LineLength(FPos.Y - 1) + 1, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoExit; +begin +{$IFDEF Delphi17} + inherited; +{$IFNDEF DELPHI18} + CaretVisible := False; +{$ELSE} + HideCaret; +{$ENDIF} +{$ELSE} + Platform.HideVirtualKeyboard; + inherited; + HideCaret; +{$ENDIF} +end; + +procedure TfsSyntaxMemo.DoPgUp; +begin + if FOffset.Y > FWindowSize.Y then + begin + FOffset.Y := FOffset.Y - (FWindowSize.Y - 1); + FPos.Y := FPos.Y - (FWindowSize.Y - 1); + end + else + begin + if FOffset.Y > 0 then + begin + FPos.Y := FPos.Y - FOffset.Y; + FOffset.Y := 0; + end + else + FPos.Y := 1; + end; + SetPos(FPos.X, FPos.Y); + Repaint; +end; + +procedure TfsSyntaxMemo.DoPgDn; +begin + if FOffset.Y + FWindowSize.Y < FText.Count then + begin + FOffset.Y := FOffset.Y + (FWindowSize.Y - 1); + FPos.Y := FPos.Y + (FWindowSize.Y - 1); + end + else + begin + FOffset.Y := FText.Count; + FPos.Y := FText.Count; + end; + SetPos(FPos.X, FPos.Y); + Repaint; +end; + +procedure TfsSyntaxMemo.DoReturn; +var + s: String; +begin + if FReadOnly then exit; + s := LineAt(FPos.Y - 1); + FText[FPos.Y - 1] := Copy(s, 1, FPos.X - 1); + FText.Insert(FPos.Y, Copy(s, FPos.X, FMaxLength)); + EnterIndent; +end; + +procedure TfsSyntaxMemo.DoDel; +var + s: String; +begin + if FReadOnly then exit; + FMessage := ''; + if FSelStart.X <> 0 then + SelText := '' + else + begin + s := FText[FPos.Y - 1]; + AddUndo; + if FPos.X <= LineLength(FPos.Y - 1) then + begin + Delete(s, FPos.X, 1); + FText[FPos.Y - 1] := s; + end + else if FPos.Y < FText.Count then + begin + s := s + Pad(FPos.X - Length(s) - 1) + LineAt(FPos.Y); + FText[FPos.Y - 1] := s; + FText.Delete(FPos.Y); + CorrectBookmark(FSelStart.Y, -1); + end; + UpdateScrollBar; + UpdateSyntax; + DoChange; + end; +end; + +procedure TfsSyntaxMemo.DoBackspace; +var + s: String; +begin + if FReadOnly then exit; + FMessage := ''; + if FSelStart.X <> 0 then + SelText := '' + else + begin + s := FText[FPos.Y - 1]; + if FPos.X > 1 then + begin + if (GetLineBegin(FPos.Y - 1) = FPos.X) or (Trim(s) = '') then + UnIndent + else + begin + AddUndo; + if Trim(s) <> '' then + begin + Delete(s, FPos.X - 1, 1); + FText[FPos.Y - 1] := s; + DoLeft; + end + else + DoHome(False); + UpdateSyntax; + DoChange; + end; + end + else if FPos.Y > 1 then + begin + AddUndo; + CorrectBookmark(FPos.Y, -1); + s := LineAt(FPos.Y - 2); + FText[FPos.Y - 2] := s + FText[FPos.Y - 1]; + FText.Delete(FPos.Y - 1); + SetPos(Length(s) + 1, FPos.Y - 1); + UpdateSyntax; + DoChange; + end; + end; +end; + +procedure TfsSyntaxMemo.DoCtrlI; +begin + if FSelStart.X <> 0 then + ShiftSelected(True); +end; + +procedure TfsSyntaxMemo.DoCtrlU; +begin + if FSelStart.X <> 0 then + ShiftSelected(False); +end; + +procedure TfsSyntaxMemo.DoCtrlL; +var + i: Integer; + s: String; +begin + s := FText.Text; + i := Length(LineAt(FPos.Y - 1)); + if FPos.X > i then + FPos.X := i; + + i := GetPlainTextPos(FPos); + + Dec(i); + while (i > 0) and not (CharInSet(s[i], WordChars) or IsUnicodeChar(s[i])) do + if s[i] = Char(LineBreak[1]) then + break else + Dec(i); + while (i > 0) and (CharInSet(s[i], WordChars) or IsUnicodeChar(s[i])) do + Dec(i); + Inc(i); + + FPos := GetPosPlainText(i); + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoCtrlR; +var + i: Integer; + s: String; +begin + s := FText.Text; + i := Length(LineAt(FPos.Y - 1)); + if FPos.X > i then + begin + DoDown; + DoHome(False); + FPos.X := 0; + end; + + i := GetPlainTextPos(FPos); + while (i < Length(s)) and ((CharInSet(s[i], WordChars)) or IsUnicodeChar(s[i])) do + Inc(i); + while (i < Length(s)) and not ((CharInSet(s[i], WordChars)) or IsUnicodeChar(s[i])) do + if s[i] = Char(LineBreak[1]) then + break else + Inc(i); + FPos := GetPosPlainText(i); + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoChar(Ch: Char); +begin + SelText := Ch; +end; + +function TfsSyntaxMemo.GetCharAttr(Pos: TPoint): TCharAttributes; + + function IsBlock: Boolean; + var + p1, p2, p3: Integer; + begin + Result := False; + if FSelStart.X = 0 then exit; + + p1 := FSelStart.X + FSelStart.Y * FMaxLength; + p2 := FSelEnd.X + FSelEnd.Y * FMaxLength; + if p1 > p2 then + begin + p3 := p1; + p1 := p2; + p2 := p3; + end; + p3 := Pos.X + Pos.Y * FMaxLength; + Result := (p3 >= p1) and (p3 < p2); + end; + + function CharAttr: TCharAttr; + var + s: String; + begin + if Pos.Y - 1 < FSynStrings.Count then + begin + s := FSynStrings[Pos.Y - 1]; + if Pos.X <= Length(s) then + Result := TCharAttr(Ord(s[Pos.X])) else + Result := caText; + end + else + Result := caText; + end; + +begin + Result := [CharAttr]; + if IsBlock then + Result := Result + [caBlock]; +end; + +function TfsSyntaxMemo.GetCharWidth(Str: String): Single; +var + r: TRectF; + dx: Single; + j, j1: Integer; + a, a1: TCharAttributes; + + function CalcSize(LStr: String): Single; + begin + if FIsMonoType then + begin + Result := FCharWidth * Length(LStr); + Exit; + end; + if LStr = '' then + begin + Result := 0; + Exit; + end; + + r := RectF(0, 0, 100000, 100000); + { MeasureText trunc all spaces at the end, so we are using this hack to calcl size with spaces } + FTmpCanvas.Canvas.MeasureText(r, LStr + 'W', False, [], TTextAlign.taLeading); + dx := r.Width; + FTmpCanvas.Canvas.MeasureText(r, 'W', False, [], TTextAlign.taLeading); + Result := dx - r.Width; + end; +begin + + j1 := 1; + a := GetCharAttr(Point(1, FPos.Y)); + a1 := a; + Result := 0; + + for j := 1 to Length(Str) do + begin + a1 := GetCharAttr(Point(j, FPos.Y)); + if a1 <> a then + begin + SetAttr(FTmpCanvas.Canvas, a); + Result := Result + CalcSize(Copy(Str, j1, (j - j1))); + a := a1; + j1 := j; + end; + end; + SetAttr(FTmpCanvas.Canvas, a); + Result := Result + CalcSize(Copy(Str, j1, Length(Str) - (j1 - 1))); +end; + +procedure TfsSyntaxMemo.Paint; +var + i, j, j1: Integer; + a, a1: TCharAttributes; + s: String; + x, y: Single; + aClientR: TRectF; + aSelColor, aSelFontColor: TAlphaColor; + + procedure SetAttrL(a: TCharAttributes); + begin + SetAttr(Canvas, a); + aSelColor := FFill.Color; + aSelFontColor := Canvas.Fill.Color; + if caBlock in a then + begin + aSelColor := FBlockColor; + aSelFontColor := FBlockFontColor; + end; + + // make non-selected text looking good + if aSelColor = FFill.Color then + aSelColor := 0; + end; + + function MyTextOut(x, y: Single; const s: String): Single; + var + i: Integer; + dx, dy: Single; + r: TRectF; + begin + with Canvas do + begin + r := RectF(0, 0, 100000, 100000); + { MeasureText trunc all spaces at the end, so we are using this hack to calcl size with spaces } + Canvas.MeasureText(r, s + 'W',False, [], TTextAlign.taLeading); + dx := r.Width + x; + Canvas.MeasureText(r, 'W', False, [], TTextAlign.taLeading); + dx := dx - r.Width; + if dx > (aClientR.Right - aClientR.Left) then + dx := aClientR.Right - aClientR.Left; + dy := y + FCharHeight; + if FIsMonoType then + dx := x + FCharWidth * Length(s); + Fill.Color := aSelColor; + FillRect(RectF(x + 1, y, dx + 1, dy + 1), 0, 0, AllCorners, 1); + Fill.Color := aSelFontColor; + if FIsMonoType then + FillText(RectF(x, y, dx + 1, 10000), + s, False, 1, [], TTextAlign.taLeading, TTextAlign.taLeading) + else + begin + for i := 1 to Length(s) do + FillText(RectF(x + (i - 1) * FCharWidth, y, + (x + (i - 1) * FCharWidth) + FCharWidth, y + FCharHeight), + s[i], False, 1, FillTextFlags, TTextAlign.taLeading, TTextAlign.taLeading); + end; + end; + Result := dx; + end; + +begin + aClientR := GetClientRect; + with Canvas do + begin + Fill.Assign(FBorder.Fill); + FillRect(RectF(0, 0, Self.Width , Self.Height), 0, 0, AllCorners, 1, TCornerType.ctBevel); + Fill.Assign(FFill); + FillRect(aClientR, 0, 0, AllCorners, 1, TCornerType.ctBevel); + Fill.Assign(FGutterFill); + FillRect(RectF(FGutterWidth - aClientR.Left, + Self.Height - FFooterHeight - aClientR.Top, + aClientR.Left, aClientR.Top), 0, 0, AllCorners, 1, TCornerType.ctBevel); + FillRect(RectF(aClientR.Left, Self.Height - FFooterHeight - aClientR.Top, + Self.Width - aClientR.Left, Self.Height - aClientR.Top), 1, 1, + AllCorners, 1, TCornerType.ctBevel); + + Stroke.Assign(FBorder.Fill); +{$IFDEF DELPHI25} + Stroke.Cap := TStrokeCap.scRound; + Stroke.Thickness := FBorder.Width; +{$ELSE} + StrokeCap := TStrokeCap.scRound; + StrokeThickness := FBorder.Width; +{$ENDIF} + x := FGutterWidth - FBorder.Width; + DrawLine(PointF(x, aClientR.Top + 1), PointF(x, aClientR.Bottom - FFooterHeight ), 1); + if FFooterHeight > 0 then + DrawLine(PointF(x, aClientR.Bottom - FFooterHeight), + PointF(aClientR.Right - 1, aClientR.Bottom - FFooterHeight), 1); + if FUpdatingSyntax then Exit; + + for i := FOffset.Y to FOffset.Y + FWindowSize.Y - 1 do + begin + if i >= FText.Count then break; + + s := FText[i]; + j1 := FOffset.X + 1; + a := GetCharAttr(Point(j1, i + 1)); + a1 := a; + x := FGutterWidth + FBorder.Width; + y := aClientR.Top + (i - FOffset.Y) * FCharHeight; + for j := j1 to FOffset.X + FWindowSize.X do + begin + if j > Length(s) then break; + + a1 := GetCharAttr(Point(j, i + 1)); + if a1 <> a then + begin + SetAttrL(a); + x := MyTextOut(x, y, Copy(FText[i], j1, j - j1)); + a := a1; + j1 := j; + end; + end; + + SetAttrL(a); + + MyTextOut(x, y, Copy(s, j1, FMaxLength)); + + BookmarkDraw(y, i); + ActiveLineDraw(y, i); + end; + + if FMessage <> '' then + begin + Font.Family := 'Tahoma'; + Font.Style := [TFontStyle.fsBold]; + Font.Size := 8; + Fill.Color := TAlphaColorRec.Maroon; + FillRect(RectF(aClientR.Left, aClientR.Bottom - TextHeight('|') - 6, aClientR.Right , aClientR.Bottom), 0, 0, + AllCorners, 1, TCornerType.ctBevel); + Fill.Color := TAlphaColorRec.White; + FillText(RectF(aClientR.Left + 6, aClientR.Bottom - TextHeight('|') - 5, + 6 + TextWidth('W') * Length(FMessage), aClientR.Bottom), FMessage, + False, 1, [], TTextAlign.taLeading) + end + else + ShowPos; + end; +end; + +procedure TfsSyntaxMemo.CreateSynArray; +var + i, n, Pos: Integer; + ch: Char; + FSyn: String; + + procedure SkipSpaces; + begin + while (Pos <= Length(FSyn)) and + ((CharInSet(FSyn[Pos], [#1..#32])) or + not (CharInSet(FSyn[Pos],['_', 'A'..'Z', 'a'..'z', '''', '"', '/', '{', '(', '-']))) do + Inc(Pos); + end; + + function IsKeyWord(const s: String): Boolean; + begin + Result := False; + if FKeywords = '' then exit; + + if FKeywords[1] <> ',' then + FKeywords := ',' + FKeywords; + if FKeywords[Length(FKeywords)] <> ',' then + FKeywords := FKeywords + ','; + + Result := System.Pos(',' + AnsiLowerCase(s) + ',', FKeywords) <> 0; + end; + + function GetIdent: TCharAttr; + var + i: Integer; + cm1, cm2, cm3, cm4, st1: Char; + begin + i := Pos; + Result := caText; + + if FSyntaxType = stPascal then + begin + cm1 := '/'; + cm2 := '{'; + cm3 := '('; + cm4 := ')'; + st1 := ''''; + end + else if FSyntaxType in [stCpp,stJs,stVb] then + begin + cm1 := '/'; + cm2 := ' '; + cm3 := '/'; + cm4 := '/'; + st1 := '"'; + end + else if FSyntaxType = stSQL then + begin + cm1 := '-'; + cm2 := ' '; + cm3 := '/'; + cm4 := '/'; + st1 := '"'; + end + else + begin + cm1 := ' '; + cm2 := ' '; + cm3 := ' '; + cm4 := ' '; + st1 := ' '; + end; + + if CharInSet(FSyn[Pos], ['_', 'A'..'Z', 'a'..'z']) then + begin + while CharInSet(FSyn[Pos], ['_', 'A'..'Z', 'a'..'z', '0'..'9']) do + Inc(Pos); + if IsKeyWord(Copy(FSyn, i, Pos - i)) then + Result := caKeyword; + Dec(Pos); + end + else if (FSyn[Pos] = cm1) and (FSyn[Pos + 1] = cm1) then + begin + while (Pos <= Length(FSyn)) and not (CharInSet(FSyn[Pos], [#10, #13])) do + Inc(Pos); + Result := caComment; + end + else if FSyn[Pos] = cm2 then + begin + while (Pos <= Length(FSyn)) and (FSyn[Pos] <> '}') do + Inc(Pos); + Result := caComment; + end + else if (FSyn[Pos] = cm3) and (FSyn[Pos + 1] = '*') then + begin + while (Pos < Length(FSyn)) and not ((FSyn[Pos] = '*') and (FSyn[Pos + 1] = cm4)) do + Inc(Pos); + Inc(Pos, 2); + Result := caComment; + end + else if FSyn[Pos] = st1 then + begin + Inc(Pos); + while (Pos < Length(FSyn)) and (FSyn[Pos] <> st1) and not (CharInSet(FSyn[Pos], [#10, #13])) do + Inc(Pos); + Result := caString; + end; + Inc(Pos); + end; + +begin + FSyn := FText.Text + #0#0#0#0#0#0#0#0#0#0#0; + FAllowLinesChange := False; + Pos := 1; + + while Pos < Length(FSyn) do + begin + n := Pos; + SkipSpaces; + for i := n to Pos - 1 do + if FSyn[i] > #31 then + FSyn[i] := Chr(Ord(caText)); + + n := Pos; + ch := Chr(Ord(GetIdent)); + for i := n to Pos - 1 do + if i <= Length(FSyn) then + if FSyn[i] > #31 then + FSyn[i] := ch; + end; + + FUpdatingSyntax := True; + FSynStrings.Text := FSyn; + FSynStrings.Add(' '); + FUpdatingSyntax := False; +end; + +procedure TfsSyntaxMemo.UpdateView; +begin + UpdateSyntax; + Repaint; +end; + +procedure TfsSyntaxMemo.UpdateWindowSize; +begin + if FCharWidth = 0 then exit; + FWindowSize := Point(Trunc((Width - FGutterWidth - FBorder.Width * 2) / FCharWidth), + Trunc((Height - FFooterHeight - FBorder.Width * 2) / FCharHeight)); +end; + +procedure TfsSyntaxMemo.CopyPopup(Sender: TObject); +begin + CopyToClipboard; +end; + +procedure TfsSyntaxMemo.PastePopup(Sender: TObject); +begin + PasteFromClipboard; +end; + +procedure TfsSyntaxMemo.Resize; +begin + inherited; + UpdateWindowSize; + FVScroll.Position.Y := FBorder.Width; + FVScroll.Height := Height - FFooterHeight - FBorder.Width; + FVScroll.Width := 16; + FVScroll.Position.X := Width - FVScroll.Width - FBorder.Width; + UpdateScrollBar; +end; + +procedure TfsSyntaxMemo.CutPopup(Sender: TObject); +begin + CutToClipboard; +end; + +procedure TfsSyntaxMemo.SetShowGutter(Value: boolean); +begin + FShowGutter := Value; + if Value then + FGutterWidth := 20 + else + FGutterWidth := 0; + Repaint; +end; + +procedure TfsSyntaxMemo.SetShowFooter(Value: boolean); +begin + FShowFooter := Value; + if Value then + FFooterHeight := 20 + else + FFooterHeight := 0; + Repaint; +end; + +function TfsSyntaxMemo.FMemoFind(Text: String; var Position : TPoint): boolean; +var + i, j : integer; +begin + j := 0; + result := False; + if FText.Count > 1 then + begin + Text := UpperCase(Text); + for i := Position.Y to FText.Count - 1 do + begin + j := Pos( Text, UpperCase(FText[i])); + if j > 0 then + begin + Result := True; + break; + end + end; + Position.X := j; + Position.Y := i + 1; + end; +end; + +procedure TfsSyntaxMemo.FontChanged(Sender: TObject); +begin + FCommentAttr.Font.Size := FFontSettings.Font.Size; + FCommentAttr.Font.Family := FFontSettings.Font.Family; + FKeywordAttr.Font.Size := FFontSettings.Font.Size; + FKeywordAttr.Font.Family := FFontSettings.Font.Family; + FStringAttr.Font.Size := FFontSettings.Font.Size; + FStringAttr.Font.Family := FFontSettings.Font.Family; + FTextAttr.Font.Size := FFontSettings.Font.Size; + FTextAttr.Font.Family := FFontSettings.Font.Family; + CalcCharSize; + { need to uptade size, maybe font size was changed } + UpdateWindowSize; +end; + +function TfsSyntaxMemo.Find(Text: String): boolean; +var + Position: TPoint; +begin + Position := FPos; + if FMemoFind(Text, Position) then + begin + SetPos(Position.X, Position.Y); + result := true; + end + else + begin + ShowMessage('Text "'+Text+'" not found.'); + result := false; + end; +end; + +procedure TfsSyntaxMemo.ActiveLineDraw(Y : Single; ALine : integer); +begin + if ShowGutter then + with Canvas do + if ALine = FActiveLine then + begin + Fill.Color := TAlphaColorRec.Red; + //Pen.Color := clBlack; + FillEllipse(RectF(4, Y + 4, 11, Y + 15), 1); + end; +end; + +procedure TfsSyntaxMemo.BookmarkDraw(Y : Single; ALine : integer); +var + bm : integer; +begin + if ShowGutter then + with Canvas do + begin + bm := IsBookmark(ALine); + if bm >= 0 then + begin + Fill.Color := TAlphaColorRec.Black; + FillRect(RectF(3 + Border.Width, Y + 1, 13 + Border.Width, Y + 12), 0, 0, + AllCorners, 1, TCornerType.ctBevel); + Fill.Color := TAlphaColorRec.Green; + FillRect(RectF(2 + Border.Width, Y + 2, 12 + Border.Width, Y + 13), 0, 0, + AllCorners, 1, TCornerType.ctBevel); + Font.Family := 'Tahoma'; + Fill.Color := TAlphaColorRec.White; + Font.Style := [TFontStyle.fsBold]; + Font.Size := 7; + y := y + 2.0; + FillText(RectF(4 + Border.Width, Y, 4 + TextWidth('7') + Border.Width, + Y + TextHeight('7')), IntToStr(bm), False, 1, [], TTextAlign.taLeading) + end; + end; +end; + +function TfsSyntaxMemo.IsBookmark(Line : integer): integer; +var + Pos : integer; +begin + Result := -1; + for Pos := 0 to Length(Bookmarks) - 1 do + if Bookmarks[Pos] = Line then + begin + Result := Pos; + break; + end; +end; + +procedure TfsSyntaxMemo.AddBookmark(Line, Number : integer); +begin + if Number < Length(Bookmarks) then + begin + Bookmarks[Number] := Line; + Repaint; + end; +end; + +procedure TfsSyntaxMemo.DeleteBookmark(Number : integer); +begin + if Number < Length(Bookmarks) then + begin + Bookmarks[Number] := -1; + Repaint; + end; +end; + +procedure TfsSyntaxMemo.CorrectBookmark(Line : integer; delta : integer); +var + i : integer; +begin + for i := 0 to Length(Bookmarks) - 1 do + if Bookmarks[i] >= Line then + Inc(Bookmarks[i], Delta); +end; + +procedure TfsSyntaxMemo.GotoBookmark(Number : integer); +begin + if Number < Length(Bookmarks) then + if Bookmarks[Number] >= 0 then + SetPos(0, Bookmarks[Number] + 1); +end; + +procedure TfsSyntaxMemo.DOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); +begin +{$IFNDEF DELPHI20} + Accept := Data.Source is TTreeView; +{$ELSE} + if Data.Source is TTreeView then + Operation := TDragOperation.Copy; +{$ENDIF} +end; + +procedure TfsSyntaxMemo.DDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); +begin + if Data.Source is TTreeView then + begin + SetPos(Round((Point.X - FGutterWidth) / FCharWidth) + 1 + FOffset.X, + Round(Point.Y / FCharHeight) + 1 + FOffset.Y); + SetSelText(TTreeView(Data.Source).Selected.Text); + end; +end; + +procedure TfsSyntaxMemo.SetKeywordAttr(Value: TfsFontSettings); +begin + FKeywordAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetStringAttr(Value: TfsFontSettings); +begin + FStringAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetTextAttr(Value: TfsFontSettings); +begin + FTextAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetCommentAttr(Value: TfsFontSettings); +begin + FCommentAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetFontSettings(const Value: TfsFontSettings); +begin + FFontSettings.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetGutterFill(const Value: TBrush); +begin + FGutterFill.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetActiveLine(Line : Integer); +begin + FActiveLine := Line; + Repaint; +end; + +procedure TfsSyntaxMemo.SetAttr(aCanvas: TCanvas; a: TCharAttributes); +begin + with aCanvas do + begin + Font.Assign(FFontSettings.Font); + Canvas.Fill.Assign(FFontSettings.Fill); + + if caText in a then + begin + Font.Assign(FTextAttr.Font); + Canvas.Fill.Assign(FTextAttr.Fill); + end; + + if caComment in a then + begin + Font.Assign(FCommentAttr.Font); + Canvas.Fill.Assign(FCommentAttr.Fill); + end; + + if caKeyword in a then + begin + Font.Assign(FKeywordAttr.Font); + Canvas.Fill.Assign(FKeywordAttr.Fill); + end; + + if caString in a then + begin + Font.Assign(FStringAttr.Font); + Canvas.Fill.Assign(FStringAttr.Fill); + end; + end; +end; + + + +procedure TfsSyntaxMemo.SetBorder(const Value: TfsBorderSettings); +begin + FBorder.Fill.Assign(Value.Fill); + FBorder.Width := Value.Width; +end; + +function TfsSyntaxMemo.GetActiveLine: Integer; +begin + Result := FActiveLine; +end; + +procedure TfsSynMemoSearch.FormKeyPress(Sender: TObject; var Key: Char); +begin + if Key = #13 then + ModalResult := mrOk; +end; + +{ TfsBorderSettings } + +constructor TfsBorderSettings.Create; +begin + FFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.Silver); + FWidth := 1; +end; + +destructor TfsBorderSettings.Destroy; +begin + FFill.Free; + inherited; +end; + +procedure TfsBorderSettings.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TfsBorderSettings.SetWidth(const Value: Integer); +begin + if Value > 3 then + FWidth := 3 + else if Value < 0 then + FWidth := 0 + else + FWidth := Value; +end; + +{ TfsFontSettings } + +procedure TfsFontSettings.Assign(Source: TPersistent); +begin + inherited; + if Source is TfsFontSettings then + begin + Fill.Assign(TfsFontSettings(Source).Fill); + Font.Assign(TfsFontSettings(Source).Font); + end; +end; + +constructor TfsFontSettings.Create(); +begin + FFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.Black); + FFont := TFont.Create; + FFont.Family := 'Courier New'; + FFont.Size := 13; +end; + +destructor TfsFontSettings.Destroy; +begin + FFill.Free; + FFont.Free; + inherited; +end; + +procedure TfsFontSettings.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TfsFontSettings.SetFont(const Value: TFont); +begin + FFont.Assign(Value); +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsSyntaxMemo, TFmxObject); + GroupDescendentsWith(TfsBorderSettings, TFmxObject); + GroupDescendentsWith(TfsFontSettings, TFmxObject); + + RegisterFmxClasses([TfsBorderSettings, TfsFontSettings]); + +end. diff --git a/FastScript/FMX.fs_tree.pas b/FastScript/FMX.fs_tree.pas new file mode 100644 index 0000000..0ebbf74 --- /dev/null +++ b/FastScript/FMX.fs_tree.pas @@ -0,0 +1,659 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Function/Classes tree FMX visual control } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_tree; + +interface + +{$I fs.inc} + +uses + FMX.Types, + System.SysUtils, System.Classes, FMX.Controls, FMX.Forms, FMX.Dialogs, + FMX.ExtCtrls, FMX.fs_synmemo, FMX.Objects, + FMX.fs_XML, FMX.fs_iinterpreter, FMX.TreeView, FMX.Memo, System.UITypes, System.Types +{$IFDEF DELPHI18} + ,FMX.StdCtrls +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI28} + , FMX.BaseTypeAliases, FMX.FormTypeAliases +{$ENDIF}; + +type + TfsTreeViewItem = class(TTreeViewItem) + private + FButton: TCustomButton; + FCloseImageIndex: Integer; + FOpenImageIndex: Integer; + FImgPos: Single; + function GetBitmap():TBitmap; + protected + procedure ApplyStyle; override; + public + constructor Create(AOwner: TComponent); override; + procedure Paint; override; + property CloseImageIndex: Integer read FCloseImageIndex write FCloseImageIndex; + property OpenImageIndex: Integer read FOpenImageIndex write FOpenImageIndex; + end; + +{$i frxPlatformsAttribute.inc} + + TfsTreeView = class(TTreeView) + private + FPicBitmap: TBitmap; + FIconWidth: Integer; + FIconHeight: Integer; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure LoadResouces(Stream: TStream; IconWidth, IconHeight: Integer); + property PicPitmap: TBitmap read FPicBitmap write FPicBitmap; + property IconWidth: Integer read FIconWidth write FIconWidth; + property IconHeight: Integer read FIconHeight write FIconHeight; + function GetBitmapRect(Index: Integer): TRectF; + procedure DragOver(const Data: TDragObject; const Point: TPointF; {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); override; + procedure DragDrop(const Data: TDragObject; const Point: TPointF); override; + published + property StyleLookup; + property CanFocus default True; + property DisableFocusEffect; + property TabOrder; + property AllowDrag default False; + property AlternatingRowBackground default False; + property ItemHeight; +// property HideSelectionUnfocused default False; + property MultiSelect default False; + property ShowCheckboxes default False; + property Sorted default False; + property OnChange; + property OnChangeCheck; + property OnCompare; + property OnDragChange; + end; + +{$i frxPlatformsAttribute.inc} + TfsTree = class(TPanel) + private + Tree: TfsTreeView; + FXML: TfsXMLDocument; + FScript: TfsScript; + FImages: TList; + FShowFunctions: boolean; + FShowClasses: boolean; + FShowTypes: Boolean; + FShowVariables: Boolean; + FExpanded: boolean; + FExpandLevel : integer; + FMemo: TfsSyntaxMemo; + FUpdating: Boolean; + procedure FillTree; + + procedure SetMemo(Value: TfsSyntaxMemo); + + procedure SetScript(const Value: TfsScript); + protected + {$IFDEF DELPHI19} + procedure CreateImageFromRes(Image: TImage; Bmp: FMX.Graphics.TBitmap; + Width, Height: Integer; Index: Integer); + {$ELSE} + procedure CreateImageFromRes(Image: TImage; Bmp: FMX.Types.TBitmap; + Width, Height: Integer; Index: Integer); +{$ENDIF} + + procedure TreeChange(Sender: TObject; Node: TTreeViewItem); + procedure TreeDblClick(Sender: TObject); + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + protected + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure SetColor(Color: TAlphaColor); + procedure UpdateItems; + function GetFieldName: String; + published + property Align; + property Anchors; + property DragMode; + property Enabled; + property PopupMenu; + property Script: TfsScript read FScript write SetScript; + property ShowHint; + property TabOrder; + property Visible; + + property SyntaxMemo: TfsSyntaxMemo read FMemo write SetMemo; + property ShowClasses: boolean read FShowClasses write FShowClasses; + property ShowFunctions: boolean read FShowFunctions write FShowFunctions; + property ShowTypes: boolean read FShowTypes write FShowTypes; + property ShowVariables: boolean read FShowVariables write FShowVariables; + property Expanded: boolean read FExpanded write FExpanded; + property ExpandLevel: integer read FExpandLevel write FExpandLevel; + + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property Left; + property Top; + property Width; + property Height; + end; + +implementation + +{$IFNDEF FPC} + {$R fs_tree.res} +{$ENDIF} + +uses FMX.fs_iTools; + +constructor TfsTree.Create(AOwner: TComponent); +var + S: TResourceStream; +begin + inherited; + DragMode := TDragMode.dmManual; + Tree := TfsTreeView.Create(Self); + Tree.Stored := False; + with Tree do + begin + Parent := Self; + DragMode := TDragMode.dmAutomatic; + Align := TAlignLayout.alClient; + TabOrder := 0; + end; + FImages := TList.Create(); + S := TResourceStream.Create(HInstance, 'FSTREEFMX', RT_RCDATA);//RT_RCDATA + S.Position := 0; + Tree.LoadResouces(S, 16, 16); + S.Free; + Tree.OnDblClick := TreeDblClick; + FXML := TfsXMLDocument.Create; + Expanded := True; + ExpandLevel := 0; + ShowClasses := True; + ShowFunctions := True; + ShowTypes := True; + ShowVariables := True; + UpdateItems; + Top := 0; + Left := 0; + Height := 250; + Width := 200; +end; + + + {$IFDEF DELPHI19} +procedure TfsTree.CreateImageFromRes(Image: TImage; Bmp: FMX.Graphics.TBitmap; + Width, Height, Index: Integer); + {$ELSE} +procedure TfsTree.CreateImageFromRes(Image: TImage; Bmp: FMX.Types.TBitmap; + Width, Height, Index: Integer); +{$ENDIF} +begin + Image.Width := Width; + Image.Height := Height; + Image.Bitmap.SetSize(Width, Height); + Image.Bitmap.Canvas.BeginScene; + Image.Bitmap.Canvas.DrawBitmap(Bmp, RectF(Width * Index , 0, Width * Index + Width , Height), RectF(0, 0, Width, Height), 1 ); + Image.Bitmap.Canvas.EndScene; + //Image.Bitmap.BitmapChanged; +end; + +destructor TfsTree.Destroy; +begin + FImages.Free; + Tree.Free; + FUpdating := True; + FXML.Free; + inherited; +end; + +procedure TfsTree.FillTree; + + function GetCategoryByName(s: String): String; + begin + if s = 'ctConv' then result := 'Conversion' + else if s = 'ctFormat' then result := 'Formatting' + else if s = 'ctDate' then result := 'Date/Time' + else if s = 'ctString' then result := 'String routines' + else if s = 'ctMath' then result := 'Mathematical' + else if s = 'ctOther' then result := 'Other' + else result := s; + end; + + procedure AddClasses(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := xi.Prop['text']; + Node := TfsTreeViewItem.Create(Tree); + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 1; + Node.CloseImageIndex := 1; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddClasses(xi[i], Node); + end; + + procedure AddFunctions(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := xi.Prop['text']; + if xi.Count = 0 then + s := Copy(s, Pos(' ', s) + 1, 255) else { function } + s := GetCategoryByName(s); { category } + Node := TfsTreeViewItem.Create(Tree); + Node.DragMode := TDragMode.dmAutomatic; + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 0; + Node.CloseImageIndex := 0; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddFunctions(xi[i], Node); + end; + + procedure AddTypes(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := Copy(xi.Prop['text'], 1, 255); + Node := TfsTreeViewItem.Create(Tree); + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 0; + Node.CloseImageIndex := 0; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddTypes(xi[i], Node); + end; + + procedure AddVariables(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := xi.Prop['text']; + Node := TfsTreeViewItem.Create(Tree); + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 0; + Node.CloseImageIndex := 0; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddVariables(xi[i], Node); + end; + + procedure ExpandNodes(level: integer); + var + j : integer; + + procedure ExpandNode(Node: TTreeViewItem; level: integer); + var + j : integer; + begin + if Node.Level < level then + for j := 0 to Node.Count - 1 do + begin + if Node.Items[j].Level < Level then + Node.Items[j].IsExpanded := True; + ExpandNode(Node.Items[j], Level); + end; + end; + begin + if level > 0 then + for j := 0 to Tree.Count - 1 do + begin + if Tree.Items[j].Level <= Level then + Tree.Items[j].IsExpanded := True; + ExpandNode(Tree.Items[j], Level); + end; + end; + +begin + FUpdating := True; + FXML.Root.Clear; + + GenerateXMLContents(fsGlobalUnit, FXML.Root); + if FScript <> nil then + GenerateXMLContents(FScript, FXML.Root); + + Tree.BeginUpdate; + Tree.Clear; + + if ShowClasses then + AddClasses(FXML.Root.FindItem('Classes'), nil); + + if ShowFunctions then + AddFunctions(FXML.Root.FindItem('Functions'), nil); + + if ShowTypes then + AddTypes(FXML.Root.FindItem('Types'), nil); + + if ShowVariables then + AddVariables(FXML.Root.FindItem('Variables'), nil); + + if Expanded then + ExpandNodes(ExpandLevel); + Tree.EndUpdate; + FUpdating := False; +end; + +procedure TfsTree.UpdateItems; +begin + FillTree; +end; + +procedure TfsTree.TreeChange(Sender: TObject; + Node: TTreeViewItem); +begin + if FUpdating then Exit; +end; + +procedure TfsTree.TreeDblClick(Sender: TObject); +begin + //if Assigned(SyntaxMemo) then + //if Tree.Selected.Count = 0 then + // SyntaxMemo.SelText := Tree.Selected.Text; + if Assigned(OnDblClick) then OnDblClick(Self); +end; + +function TfsTree.GetFieldName: String; +var + i, n: Integer; + s: String; +begin + Result := ''; + if (Tree.Selected <> nil) and (Tree.Selected.Count = 0) then + begin + s := Tree.Selected.Text; + if Pos('(', s) <> 0 then + n := 1 else + n := 0; + for i := 1 to Length(s) do +{$IFDEF Delphi12} + if (s[i] = ',') or (s[i] = ';') then +{$ELSE} + if s[i] in [',', ';'] then +{$ENDIF} + Inc(n); + + if n = 0 then + s := Copy(s, 1, Pos(':', s) - 1) + else + begin + s := Copy(s, 1, Pos('(', s)); + for i := 1 to n - 1 do + s := s + ','; + s := s + ')'; + end; + Result := s; + end; +end; + +procedure TfsTree.Loaded; +begin + Inherited; + +end; + +procedure TfsTree.SetColor(Color: TAlphaColor); +begin + //Tree.Canvas.Stroke.Color := TAlphaColorRec.Azure; + // Tree.Color := Color; +end; + +procedure TfsTree.SetMemo(Value: TfsSyntaxMemo); +begin + FMemo := Value; +end; + +procedure TfsTree.SetScript(const Value: TfsScript); +begin + FScript := Value; + UpdateItems; +end; + +procedure TfsTree.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if Operation = opRemove then + if AComponent = FScript then + FScript := nil + else if AComponent = FMemo then + FMemo := nil +end; + +{ TfsTreeViewItem } + +procedure TfsTreeViewItem.ApplyStyle; +var + B: TFmxObject; + Offset: Single; +begin + inherited; + B := FindStyleResource('button'); + if (B <> nil) and (B is TCustomButton) then + begin + FButton := TCustomButton(B); + B := FindStyleResource('text'); + Offset := 0; + if Self.TreeView is TfsTreeView then + Offset := TfsTreeView(Self.TreeView).IconWidth; + + if (B <> nil) and (B is TText) then + begin +{$IFDEF DELPHI17} + TText(B).Margins.Left := Offset; +{$ELSE} + TText(B).Padding.Left := Offset; +{$ENDIF} + end; + FImgPos := FButton.Position.X + FButton.Width - 2; + end; +end; + + +constructor TfsTreeViewItem.Create(AOwner: TComponent); +begin + inherited; + FImgPos := 0; + FCloseImageIndex := -1; + FOpenImageIndex := -1; +end; + +function TfsTreeViewItem.GetBitmap: TBitmap; +begin + Result := nil; + if TreeView is TfsTreeView then + begin + Result := TfsTreeView(TreeView).FPicBitmap; + end; +end; + +procedure TfsTreeViewItem.Paint; +var + Bmp: TBitmap; + IconRect: TRectF; + Index: Integer; +begin + inherited Paint; + if IsExpanded then + Index := FOpenImageIndex + else + Index := FCloseImageIndex; + + if Index = -1 then Exit; + + Bmp := GetBitmap; + if TreeView is TfsTreeView then + begin + IconRect := TfsTreeView(TreeView).GetBitmapRect(Index); + end; + if (Bmp <> nil) and (FImgPos > 0)then + Canvas.DrawBitmap(Bmp, IconRect, RectF(16, 0, 34, 16), 1 ); +end; + +{ TfsTreeView } + +constructor TfsTreeView.Create(AOwner: TComponent); +begin + inherited; + FPicBitmap := nil; + FIconWidth := 0; + FIconHeight := 0; +end; + +destructor TfsTreeView.Destroy; +begin + if FPicBitmap <> nil then + FPicBitmap.Free; + + inherited; +end; + +procedure TfsTreeView.DragDrop(const Data: TDragObject; const Point: TPointF); +begin + //inherited; + // don't use TTreeView handlers +end; + +procedure TfsTreeView.DragOver(const Data: TDragObject; const Point: TPointF; + {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); +begin + //inherited; + //don't use TTreeView handlers +end; + +function TfsTreeView.GetBitmapRect(Index: Integer): TRectF; +var + maxX, maxY, i: Integer; + PosX, PosY: Integer; +begin + Result := RectF(0, 0, 0, 0); + if FPicBitmap = nil then Exit; + PosX := 0; + PosY := 0; + maxX := FPicBitmap.Width div FIconWidth; + maxY := FPicBitmap.Height div FIconHeight; + + for i := 0 to maxY - 1 do + begin + if Index < maxX then + begin + PosX := FIconWidth * Index; + break; + end; + Index := Index div maxY; + Inc(PosY); + if PosY > maxY then + begin + PosX := 0; + PosY := 0; + break; + end; + end; + Result := RectF(PosX, PosY, PosX + FIconWidth, PosY + FIconHeight); +end; + +procedure TfsTreeView.LoadResouces(Stream: TStream; IconWidth, + IconHeight: Integer); +begin + FIconWidth := IconWidth; + FIconHeight := IconHeight; + if FPicBitmap = nil then + FPicBitmap := TBitmap.CreateFromStream(Stream) + else + FPicBitmap.LoadFromStream(Stream); +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsTreeViewItem, TFmxObject); + GroupDescendentsWith(TfsTreeView, TFmxObject); + GroupDescendentsWith(TfsTree, TFmxObject); + RegisterFmxClasses([TfsTreeViewItem, TfsTreeView]); + +end. diff --git a/FastScript/FMX.fs_xml.pas b/FastScript/FMX.fs_xml.pas new file mode 100644 index 0000000..11723e4 --- /dev/null +++ b/FastScript/FMX.fs_xml.pas @@ -0,0 +1,15 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ XML document } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_xml; + +{$i FMX.inc} +{$i fs_xml.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.BaseTypeAliases.pas b/FastScript/FMX/FMX.BaseTypeAliases.pas new file mode 100644 index 0000000..2d807b0 --- /dev/null +++ b/FastScript/FMX/FMX.BaseTypeAliases.pas @@ -0,0 +1,283 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.BaseTypeAliases; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Types, FMX.Objects, System.UITypes, System.UIConsts, FMX.Graphics, FMX.Controls, System.Types, System.TypInfo; + +type + + TCalloutPositionHelper = record helper for TCalloutPosition + const + cpTop = TCalloutPosition.Top deprecated 'Use TCalloutPosition.Top'; + cpLeft = TCalloutPosition.Left deprecated 'Use TCalloutPosition.Left'; + cpBottom = TCalloutPosition.Bottom deprecated 'Use TCalloutPosition.Bottom'; + cpRight = TCalloutPosition.Right deprecated 'Use TCalloutPosition.Right'; + end; + + TCornerHelper = record helper for TCorner + const + crTopLeft = TCorner.TopLeft deprecated 'Use TCorner.TopLeft'; + crTopRight = TCorner.TopRight deprecated 'Use TCorner.TopRight'; + crBottomLeft = TCorner.BottomLeft deprecated 'Use TCorner.BottomLeft'; + crBottomRight = TCorner.BottomRight deprecated 'Use TCorner.BottomRight'; + end; + + TCornerTypeHelper = record helper for TCornerType + const + ctRound = TCornerType.Round deprecated 'Use TCornerType.Round'; + ctBevel = TCornerType.Bevel deprecated 'Use TCornerType.Bevel'; + ctInnerRound = TCornerType.InnerRound deprecated 'Use TCornerType.InnerRound'; + ctInnerLine = TCornerType.InnerLine deprecated 'Use TCornerType.InnerLine'; + end; + + TSideHelper = record helper for TSide + const + sdTop = TSide.Top deprecated 'Use TSide.Top'; + sdLeft = TSide.Left deprecated 'Use TSide.Left'; + sdBottom = TSide.Bottom deprecated 'Use TSide.Bottom'; + sdRight = TSide.Right deprecated 'Use TSide.Right'; + end; + + TTextAlignHelper = record helper for TTextAlign + const + taCenter = TTextAlign.Center deprecated 'Use TTextAlign.Center'; + taLeading = TTextAlign.Leading deprecated 'Use TTextAlign.Leading'; + taTrailing = TTextAlign.Trailing deprecated 'Use TTextAlign.Trailing'; + end; + + TTextTrimmingHelper = record helper for TTextTrimming + const + ttNone = TTextTrimming.None deprecated 'Use TTextTrimming.None'; + ttCharacter = TTextTrimming.Character deprecated 'Use TTextTrimming.Character'; + ttWord = TTextTrimming.Word deprecated 'Use TTextTrimming.Word'; + end; + + TStyledSettingHelper = record helper for TStyledSetting + const + ssFamily = TStyledSetting.Family deprecated 'Use TStyledSetting.Family'; + ssSize = TStyledSetting.Size deprecated 'Use TStyledSetting.Size'; + ssStyle = TStyledSetting.Style deprecated 'Use TStyledSetting.Style'; + ssFontColor = TStyledSetting.FontColor deprecated 'Use TStyledSetting.FontColor'; + ssOther = TStyledSetting.Other deprecated 'Use TStyledSetting.Other'; + end; + + TMenuItemChangeHelper = record helper for TMenuItemChange + const + mcEnabled = TMenuItemChange.Enabled deprecated 'Use TMenuItemChange.Enabled'; + mcVisible = TMenuItemChange.Visible deprecated 'Use TMenuItemChange.Visible'; + mcText = TMenuItemChange.Text deprecated 'Use TMenuItemChange.Text'; + mcShortcut = TMenuItemChange.Shortcut deprecated 'Use TMenuItemChange.Shortcut'; + mcChecked = TMenuItemChange.Checked deprecated 'Use TMenuItemChange.Checked'; + mcBitmap = TMenuItemChange.Bitmap deprecated 'Use TMenuItemChange.Bitmap'; + end; + + TScreenOrientationHelper = record helper for TScreenOrientation + const + soPortrait = TScreenOrientation.Portrait deprecated 'Use TScreenOrientation.Portrait'; + soLandscape = TScreenOrientation.Landscape deprecated 'Use TScreenOrientation.Landscape'; + soInvertedPortrait = TScreenOrientation.InvertedPortrait deprecated 'Use TScreenOrientation.InvertedPortrait'; + soInvertedLandscape = TScreenOrientation.InvertedLandscape deprecated 'Use TScreenOrientation.InvertedLandscape'; + end; + + TFormStyleHelper = record helper for TFormStyle + const + fsNormal = TFormStyle.Normal deprecated 'Use TFormStyle.Normal'; + fsPopup = TFormStyle.Popup deprecated 'Use TFormStyle.Popup'; + fsStayOnTop = TFormStyle.StayOnTop deprecated 'Use TFormStyle.StayOnTop'; + end; + + TAlignLayoutHelper = record helper for TAlignLayout + const + alNone = TAlignLayout.None deprecated 'Use TAlignLayout.None'; + alTop = TAlignLayout.Top deprecated 'Use TAlignLayout.Top'; + alLeft = TAlignLayout.Left deprecated 'Use TAlignLayout.Left'; + alRight = TAlignLayout.Right deprecated 'Use TAlignLayout.Right'; + alBottom = TAlignLayout.Bottom deprecated 'Use TAlignLayout.Bottom'; + alMostTop = TAlignLayout.MostTop deprecated 'Use TAlignLayout.MostTop'; + alMostBottom = TAlignLayout.MostBottom deprecated 'Use TAlignLayout.MostBottom'; + alMostLeft = TAlignLayout.MostLeft deprecated 'Use TAlignLayout.MostLeft'; + alMostRight = TAlignLayout.MostRight deprecated 'Use TAlignLayout.MostRight'; + alClient = TAlignLayout.Client deprecated 'Use TAlignLayout.Client'; + alContents = TAlignLayout.Contents deprecated 'Use TAlignLayout.Contents'; + alCenter = TAlignLayout.Center deprecated 'Use TAlignLayout.Center'; + alVertCenter = TAlignLayout.VertCenter deprecated 'Use TAlignLayout.VertCenter'; + alHorzCenter = TAlignLayout.HorzCenter deprecated 'Use TAlignLayout.HorzCenter'; + alHorizontal = TAlignLayout.Horizontal deprecated 'Use TAlignLayout.Horizontal'; + alVertical = TAlignLayout.Vertical deprecated 'Use TAlignLayout.Vertical'; + alScale = TAlignLayout.Scale deprecated 'Use TAlignLayout.Scale'; + alFit = TAlignLayout.Fit deprecated 'Use TAlignLayout.Fit'; + alFitLeft = TAlignLayout.FitLeft deprecated 'Use TAlignLayout.FitLeft'; + alFitRight = TAlignLayout.FitRight deprecated 'Use TAlignLayout.FitRight'; + end; + + TGradientStyleHelper = record helper for TGradientStyle + const + gsLinear = TGradientStyle.Linear deprecated 'Use TGradientStyle.Linear'; + gsRadial = TGradientStyle.Radial deprecated 'Use TGradientStyle.Radial'; + end; + + TBrushKindHelper = record helper for TBrushKind + const + bkNone = TBrushKind.None deprecated 'Use TBrushKind.None'; + bkSolid = TBrushKind.Solid deprecated 'Use TBrushKind.Solid'; + bkGradient = TBrushKind.Gradient deprecated 'Use TBrushKind.Gradient'; + bkBitmap = TBrushKind.Bitmap deprecated 'Use TBrushKind.Bitmap'; + bkResource = TBrushKind.Resource deprecated 'Use TBrushKind.Resource'; + end; + + TStrokeCapHelper = record helper for TStrokeCap + const + scFlat = TStrokeCap.Flat deprecated 'Use TStrokeCap.Flat'; + scRound = TStrokeCap.Round deprecated 'Use TStrokeCap.Round'; + end; + + TStrokeJoinHelper = record helper for TStrokeJoin + const + sjMiter = TStrokeJoin.Miter deprecated 'Use TStrokeJoin.Miter'; + sjRound = TStrokeJoin.Round deprecated 'Use TStrokeJoin.Round'; + sjBevel = TStrokeJoin.Bevel deprecated 'Use TStrokeJoin.Bevel'; + end; + + TStrokeDashHelper = record helper for TStrokeDash + const + sdSolid = TStrokeDash.Solid deprecated 'Use TStrokeDash.Solid'; + sdDash = TStrokeDash.Dash deprecated 'Use TStrokeDash.Dash'; + sdDot = TStrokeDash.Dot deprecated 'Use TStrokeDash.Dot'; + sdDashDot = TStrokeDash.DashDot deprecated 'Use TStrokeDash.DashDot'; + sdDashDotDot = TStrokeDash.DashDotDot deprecated 'Use TStrokeDash.DashDotDot'; + sdCustom = TStrokeDash.Custom deprecated 'Use TStrokeDash.Custom'; + end; + + TFillTextFlagHelper = record helper for TFillTextFlag + const + ftRightToLeft = TFillTextFlag.RightToLeft deprecated 'Use TFillTextFlag.RightToLeft'; + end; + + TMapAccessHelper = record helper for TMapAccess + const + maRead = TMapAccess.Read deprecated 'Use TMapAccess.Read'; + maWrite = TMapAccess.Write deprecated 'Use TMapAccess.Write'; + maReadWrite = TMapAccess.ReadWrite deprecated 'Use TMapAccess.ReadWrite'; + end; + + TOrientationHelper = record helper for TOrientation + const + orHorizontal = TOrientation.Horizontal deprecated 'Use TOrientation.Horizontal'; + orVertical = TOrientation.Vertical deprecated 'Use TOrientation.Vertical'; + end; + + TPlacementHelper = record helper for TPlacement + const + plBottom = TPlacement.Bottom deprecated 'Use TPlacement.Bottom'; + plTop = TPlacement.Top deprecated 'Use TPlacement.Top'; + plLeft = TPlacement.Left deprecated 'Use TPlacement.Left'; + plRight = TPlacement.Right deprecated 'Use TPlacement.Right'; + plCenter = TPlacement.Center deprecated 'Use TPlacement.Center'; + plBottomCenter = TPlacement.BottomCenter deprecated 'Use TPlacement.BottomCenter'; + plTopCenter = TPlacement.TopCenter deprecated 'Use TPlacement.TopCenter'; + plLeftCenter = TPlacement.LeftCenter deprecated 'Use TPlacement.LeftCenter'; + plRightCenter = TPlacement.RightCenter deprecated 'Use TPlacement.RightCenter'; + plAbsolute = TPlacement.Absolute deprecated 'Use TPlacement.Absolute'; + plMouse = TPlacement.Mouse deprecated 'Use TPlacement.Mouse'; + plMouseCenter = TPlacement.MouseCenter deprecated 'Use TPlacement.MouseCenter'; + end; + + TVirtualKeyboardTypeHelper = record helper for TVirtualKeyboardType + const + vktDefault = TVirtualKeyboardType.Default deprecated 'Use TVirtualKeyboardType.Default'; + vktNumbersAndPunctuation = TVirtualKeyboardType.NumbersAndPunctuation deprecated 'Use TVirtualKeyboardType.NumbersAndPunctuation'; + vktNumberPad = TVirtualKeyboardType.NumberPad deprecated 'Use TVirtualKeyboardType.NumberPad'; + vktPhonePad = TVirtualKeyboardType.PhonePad deprecated 'Use TVirtualKeyboardType.PhonePad'; + vktAlphabet = TVirtualKeyboardType.Alphabet deprecated 'Use TVirtualKeyboardType.Alphabet'; + vktURL = TVirtualKeyboardType.URL deprecated 'Use TVirtualKeyboardType.URL'; + vktNamePhonePad = TVirtualKeyboardType.NamePhonePad deprecated 'Use TVirtualKeyboardType.NamePhonePad'; + vktEmailAddress = TVirtualKeyboardType.EmailAddress deprecated 'Use TVirtualKeyboardType.EmailAddress'; + end; + + TVirtualKeyboardStateHelper = record helper for TVirtualKeyboardState + const + vksAutoShow = TVirtualKeyboardState.AutoShow deprecated 'Use TVirtualKeyboardState.AutoShow'; + vksVisible = TVirtualKeyboardState.Visible deprecated 'Use TVirtualKeyboardState.Visible'; + vksError = TVirtualKeyboardState.Error deprecated 'Use TVirtualKeyboardState.Error'; + vksTransient = TVirtualKeyboardState.Transient deprecated 'Use TVirtualKeyboardState.Transient'; + end; + + TReturnKeyTypeHelper = record helper for TReturnKeyType + const + rktDefault = TReturnKeyType.Default deprecated 'Use TReturnKeyType.Default'; + rktDone = TReturnKeyType.Done deprecated 'Use TReturnKeyType.Done'; + rktGo = TReturnKeyType.Go deprecated 'Use TReturnKeyType.Go'; + rktNext = TReturnKeyType.Next deprecated 'Use TReturnKeyType.Next'; + rktSearch = TReturnKeyType.Search deprecated 'Use TReturnKeyType.Search'; + rktSend = TReturnKeyType.Send deprecated 'Use TReturnKeyType.Send'; + end; + +implementation + +initialization + AddEnumElementAliases(TypeInfo(TCalloutPosition), ['cpTop', 'cpLeft', 'cpBottom', 'cpRight']); + AddEnumElementAliases(TypeInfo(TCorner), ['crTopLeft', 'crTopRight', 'crBottomLeft', 'crBottomRight']); + AddEnumElementAliases(TypeInfo(TCornerType), ['ctRound', 'ctBevel', 'ctInnerRound', 'ctInnerLine']); + AddEnumElementAliases(TypeInfo(TSide), ['sdTop', 'sdLeft', 'sdBottom', 'sdRight']); + AddEnumElementAliases(TypeInfo(TTextAlign), ['taCenter', 'taLeading', 'taTrailing']); + AddEnumElementAliases(TypeInfo(TTextTrimming), ['ttNone', 'ttCharacter', 'ttWord']); + AddEnumElementAliases(TypeInfo(TStyledSetting), ['ssFamily', 'ssSize', 'ssStyle', 'ssFontColor', 'ssOther']); + AddEnumElementAliases(TypeInfo(TMenuItemChange), ['mcEnabled', 'mcVisible', 'mcText', 'mcShortcut', 'mcChecked', 'mcBitmap']); + AddEnumElementAliases(TypeInfo(TScreenOrientation), ['soPortrait', 'soLandscape', 'soInvertedPortrait', 'soInvertedLandscape']); + AddEnumElementAliases(TypeInfo(TFormStyle), ['fsNormal', 'fsPopup', 'fsStayOnTop']); + AddEnumElementAliases(TypeInfo(TAlignLayout), ['alNone', 'alTop', 'alLeft', 'alRight', 'alBottom', 'alMostTop', 'alMostBottom', 'alMostLeft', 'alMostRight', 'alClient', 'alContents', 'alCenter', 'alVertCenter', 'alHorzCenter', 'alHorizontal', 'alVertical', 'alScale', 'alFit', 'alFitLeft', 'alFitRight']); + AddEnumElementAliases(TypeInfo(TGradientStyle), ['gsLinear', 'gsRadial']); + AddEnumElementAliases(TypeInfo(TBrushKind), ['bkNone', 'bkSolid', 'bkGradient', 'bkBitmap', 'bkResource']); + AddEnumElementAliases(TypeInfo(TStrokeCap), ['scFlat', 'scRound']); + AddEnumElementAliases(TypeInfo(TStrokeJoin), ['sjMiter', 'sjRound', 'sjBevel']); + AddEnumElementAliases(TypeInfo(TStrokeDash), ['sdSolid', 'sdDash', 'sdDot', 'sdDashDot', 'sdDashDotDot', 'sdCustom']); + AddEnumElementAliases(TypeInfo(TMapAccess), ['maRead', 'maWrite', 'maReadWrite']); + AddEnumElementAliases(TypeInfo(TFillTextFlag), ['ftRightToLeft']); + AddEnumElementAliases(TypeInfo(TOrientation), ['orHorizontal', 'orVertical']); + AddEnumElementAliases(TypeInfo(TPlacement), ['plBottom', 'plTop', 'plLeft', 'plRight', 'plCenter', 'plBottomCenter', 'plTopCenter', 'plLeftCenter', 'plRightCenter', 'plAbsolute', 'plMouse', 'plMouseCenter']); + AddEnumElementAliases(TypeInfo(TVirtualKeyboardType), ['vktDefault', 'vktNumbersAndPunctuation', 'vktNumberPad', 'vktPhonePad', 'vktAlphabet', 'vktURL', 'vktNamePhonePad', 'vktEmailAddress']); + AddEnumElementAliases(TypeInfo(TReturnKeyType), ['rktDefault', 'rktDone', 'rktGo', 'rktNext', 'rktSearch']); + AddEnumElementAliases(TypeInfo(TVirtualKeyboardState), ['vksAutoShow', 'vksVisible', 'vksError', 'vksTransient']); + + +finalization + RemoveEnumElementAliases(TypeInfo(TCalloutPosition)); + RemoveEnumElementAliases(TypeInfo(TCorner)); + RemoveEnumElementAliases(TypeInfo(TCornerType)); + RemoveEnumElementAliases(TypeInfo(TSide)); + RemoveEnumElementAliases(TypeInfo(TTextAlign)); + RemoveEnumElementAliases(TypeInfo(TTextTrimming)); + RemoveEnumElementAliases(TypeInfo(TStyledSetting)); + RemoveEnumElementAliases(TypeInfo(TMenuItemChange)); + RemoveEnumElementAliases(TypeInfo(TScreenOrientation)); + RemoveEnumElementAliases(TypeInfo(TFormStyle)); + RemoveEnumElementAliases(TypeInfo(TAlignLayout)); + RemoveEnumElementAliases(TypeInfo(TGradientStyle)); + RemoveEnumElementAliases(TypeInfo(TBrushKind)); + RemoveEnumElementAliases(TypeInfo(TStrokeCap)); + RemoveEnumElementAliases(TypeInfo(TStrokeJoin)); + RemoveEnumElementAliases(TypeInfo(TStrokeDash)); + RemoveEnumElementAliases(TypeInfo(TMapAccess)); + RemoveEnumElementAliases(TypeInfo(TFillTextFlag)); + RemoveEnumElementAliases(TypeInfo(TOrientation)); + RemoveEnumElementAliases(TypeInfo(TPlacement)); + RemoveEnumElementAliases(TypeInfo(TVirtualKeyboardType)); + RemoveEnumElementAliases(TypeInfo(TReturnKeyType)); + RemoveEnumElementAliases(TypeInfo(TVirtualKeyboardState)); + + +end. diff --git a/FastScript/FMX/FMX.FormTypeAliases.pas b/FastScript/FMX/FMX.FormTypeAliases.pas new file mode 100644 index 0000000..99d3df6 --- /dev/null +++ b/FastScript/FMX/FMX.FormTypeAliases.pas @@ -0,0 +1,70 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.FormTypeAliases; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Types, FMX.Objects, System.UITypes, System.UIConsts, FMX.Graphics, System.Types, System.TypInfo, FMX.Forms; + +type + TFmxFormBorderStyleHelper = record helper for TFmxFormBorderStyle + const + bsNone = TFmxFormBorderStyle.None deprecated 'Use TFmxFormBorderStyle.None'; + bsSingle = TFmxFormBorderStyle.Single deprecated 'Use TFmxFormBorderStyle.Single'; + bsSizeable = TFmxFormBorderStyle.Sizeable deprecated 'Use TFmxFormBorderStyle.Sizeable'; + bsToolWindow = TFmxFormBorderStyle.ToolWindow deprecated 'Use TFmxFormBorderStyle.ToolWindow'; + bsSizeToolWin = TFmxFormBorderStyle.SizeToolWin deprecated 'Use TFmxFormBorderStyle.SizeToolWin'; + end; + + TFormPositionHelper = record helper for TFormPosition + const + poDesigned = TFormPosition.Designed deprecated 'Use TFormPosition.Designed'; + poDefault = TFormPosition.Default deprecated 'Use TFormPosition.Default'; + poDefaultPosOnly = TFormPosition.DefaultPosOnly deprecated 'Use TFormPosition.DefaultPosOnly'; + poDefaultSizeOnly = TFormPosition.DefaultSizeOnly deprecated 'Use TFormPosition.DefaultSizeOnly'; + poScreenCenter = TFormPosition.ScreenCenter deprecated 'Use TFormPosition.ScreenCenter'; + poDesktopCenter = TFormPosition.DesktopCenter deprecated 'Use TFormPosition.DesktopCenter'; + poMainFormCenter = TFormPosition.MainFormCenter deprecated 'Use TFormPosition.MainFormCenter'; + poOwnerFormCenter = TFormPosition.OwnerFormCenter deprecated 'Use TFormPosition.OwnerFormCenter'; + end; + + TFmxFormStateHelper = record helper for TFmxFormState + const + fsRecreating = TFmxFormState.Recreating deprecated 'Use TFmxFormState.Recreating'; + fsModal = TFmxFormState.Modal deprecated 'Use TFmxFormState.Modal'; + fsReleased = TFmxFormState.Released deprecated 'Use TFmxFormState.Released'; + fsInDesigner = TFmxFormState.InDesigner deprecated 'Use TFmxFormState.InDesigner'; + fsWasNotShown = TFmxFormState.WasNotShown deprecated 'Use TFmxFormState.WasNotShown'; + fsShowing = TFmxFormState.Showing deprecated 'Use TFmxFormState.Showing'; + fsUpdateBorder = TFmxFormState.UpdateBorder deprecated 'Use TFmxFormState.UpdateBorder'; + fsActivation = TFmxFormState.Activation deprecated 'Use TFmxFormState.Activation'; + end; + + +implementation + +initialization + AddEnumElementAliases(TypeInfo(TFmxFormBorderStyle), ['bsNone', 'bsSingle', 'bsSizeable', 'bsToolWindow', 'bsSizeToolWin']); + AddEnumElementAliases(TypeInfo(TFormPosition), ['poDesigned', 'poDefault', 'poDefaultPosOnly', 'poDefaultSizeOnly', 'poScreenCenter', 'poDesktopCenter', + 'poMainFormCenter', 'poOwnerFormCenter']); + AddEnumElementAliases(TypeInfo(TFmxFormState), ['fsRecreating', 'fsModal', 'fsReleased', 'fsInDesigner', 'fsWasNotShown', 'fsShowing', 'fsUpdateBorder', + 'fsActivation']); + +finalization + RemoveEnumElementAliases(TypeInfo(TFmxFormBorderStyle)); + RemoveEnumElementAliases(TypeInfo(TFormPosition)); + RemoveEnumElementAliases(TypeInfo(TFmxFormState)); + +end. diff --git a/FastScript/FMX/FMX.fs_iadortti.pas b/FastScript/FMX/FMX.fs_iadortti.pas new file mode 100644 index 0000000..f858548 --- /dev/null +++ b/FastScript/FMX/FMX.fs_iadortti.pas @@ -0,0 +1,129 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ ADO classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iadortti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_idbrtti, + Data.DB, Data.Win.ADODB, Winapi.ADOInt, FMX.Types; + +type +{$i frxPlatformsAttribute.inc} + TfsADORTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddType('TDataType', fvtInt); + AddClass(TADOConnection, 'TComponent'); + AddClass(TParameter, 'TCollectionItem'); + with AddClass(TParameters, 'TCollection') do + begin + AddMethod('function AddParameter: TParameter', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TParameter', CallMethod, True); + end; + with AddClass(TCustomADODataSet, 'TDataSet') do + begin + AddProperty('Sort', 'WideString', GetProp, SetProp); + end; + AddClass(TADOTable, 'TCustomADODataSet'); + with AddClass(TADOQuery, 'TCustomADODataSet') do + AddMethod('procedure ExecSQL', CallMethod); + with AddClass(TADOStoredProc, 'TCustomADODataSet') do + AddMethod('procedure ExecProc', CallMethod); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TParameters then + begin + if MethodName = 'ADDPARAMETER' then + Result := frxInteger(TParameters(Instance).AddParameter) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TParameters(Instance).Items[Caller.Params[0]]) + end + else if ClassType = TADOQuery then + begin + if MethodName = 'EXECSQL' then + TADOQuery(Instance).ExecSQL + end + else if ClassType = TADOStoredProc then + begin + if MethodName = 'EXECPROC' then + TADOStoredProc(Instance).ExecProc + end +end; + + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCustomADODataSet then + begin + if PropName = 'SORT' then + Result := TCustomADODataSet(Instance).Sort; + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + + if ClassType = TCustomADODataSet then + begin + if PropName = 'SORT' then + TCustomADODataSet(Instance).Sort := Value; + end + +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsADORTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. + diff --git a/FastScript/FMX/FMX.fs_ibasic.pas b/FastScript/FMX/FMX.fs_ibasic.pas new file mode 100644 index 0000000..8a0c8e7 --- /dev/null +++ b/FastScript/FMX/FMX.fs_ibasic.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Basic grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ibasic; +{$i FMX.inc} +{$i fs_ibasic.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_ichartrtti.pas b/FastScript/FMX/FMX.fs_ichartrtti.pas new file mode 100644 index 0000000..4fdff87 --- /dev/null +++ b/FastScript/FMX/FMX.fs_ichartrtti.pas @@ -0,0 +1,181 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Chart } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ichartrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_iformsrtti, FMX.Objects, + FMXTee.Chart, FMXTee.Series, FMXTee.Engine, FMXTee.Procs, FMXTee.Canvas, FMX.Types, System.Types; + + +type +{$i frxPlatformsAttribute.inc} + TfsChartRTTI = class(TFmxObject); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddType('TChartValue', fvtFloat); + AddEnum('TLegendStyle', 'lsAuto, lsSeries, lsValues, lsLastValues'); + AddEnum('TLegendAlignment', 'laLeft, laRight, laTop, laBottom'); + AddEnum('TLegendTextStyle', 'ltsPlain, ltsLeftValue, ltsRightValue, ltsLeftPercent,' + + 'ltsRightPercent, ltsXValue'); + AddEnum('TChartListOrder', 'loNone, loAscending, loDescending'); + AddEnum('TGradientDirection', 'gdTopBottom, gdBottomTop, gdLeftRight, gdRightLeft'); + AddEnum('TSeriesMarksStyle', 'smsValue, smsPercent, smsLabel, smsLabelPercent, ' + + 'smsLabelValue, smsLegend, smsPercentTotal, smsLabelPercentTotal, smsXValue'); + AddEnum('TAxisLabelStyle', 'talAuto, talNone, talValue, talMark, talText'); + AddEnum('THorizAxis', 'aTopAxis, aBottomAxis'); + AddEnum('TVertAxis', 'aLeftAxis, aRightAxis'); + AddEnum('TTeeBackImageMode', 'pbmStretch, pbmTile, pbmCenter'); + AddEnum('TPanningMode', 'pmNone, pmHorizontal, pmVertical, pmBoth'); + AddEnum('TSeriesPointerStyle', 'psRectangle, psCircle, psTriangle, ' + + 'psDownTriangle, psCross, psDiagCross, psStar, psDiamond, psSmallDot'); + AddEnum('TMultiArea', 'maNone, maStacked, maStacked100'); + AddEnum('TMultiBar', 'mbNone, mbSide, mbStacked, mbStacked100'); + AddEnum('TBarStyle', 'bsRectangle, bsPyramid, bsInvPyramid, bsCilinder, ' + + 'bsEllipse, bsArrow, bsRectGradient'); + + AddEnum('TPenEndStyle', 'esRound, esSquare, esFlat'); + AddEnum('TPenMode', 'pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, ' + + 'pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, ' + + 'pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor'); + AddEnum('TPenStyle', 'psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame'); + AddClass(TChartValueList, 'TPersistent'); + AddClass(TChartAxisTitle, 'TPersistent'); + AddClass(TChartAxis, 'TPersistent'); + AddClass(TCustomChartLegend, 'TPersistent'); + AddClass(TChartLegend, 'TCustomChartLegend'); + AddClass(TSeriesMarks, 'TPersistent'); + AddClass(TChartGradient, 'TPersistent'); + AddClass(TChartWall, 'TPersistent'); + AddClass(TChartBrush, 'TBrush'); + AddClass(TChartTitle, 'TPersistent'); + AddClass(TView3DOptions, 'TPersistent'); + AddClass(TChartPen, 'TComponent'); + with AddClass(TChartSeries, 'TComponent') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('function Count: Integer', CallMethod); + AddMethod('procedure Add(const AValue: Double; const ALabel: String; AColor: TColor)', CallMethod); + AddProperty('Active','Boolean', GetProp, SetProp); + AddProperty('ColorEachPoint','Boolean', GetProp, SetProp); + + end; + AddClass(TSeriesPointer, 'TPersistent'); + AddClass(TCustomSeries, 'TChartSeries'); + AddClass(TLineSeries, 'TCustomSeries'); + AddClass(TPointSeries, 'TCustomSeries'); + AddClass(TAreaSeries, 'TCustomSeries'); + with AddClass(TCustomBarSeries, 'TChartSeries') do + begin + AddProperty('Title','String', GetProp, SetProp); + end; + AddClass(TBarSeries, 'TCustomBarSeries'); + AddClass(THorizBarSeries, 'TCustomBarSeries'); + AddClass(TCircledSeries, 'TChartSeries'); + AddClass(TPieSeries, 'TCircledSeries'); + AddClass(TFastLineSeries, 'TChartSeries'); + AddClass(TCustomChart, 'TWinControl'); + AddClass(TChart, 'TCustomChart'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TChartSeries then + begin + if MethodName = 'CLEAR' then + TChartSeries(Instance).Clear + else if MethodName = 'ADD' then + TChartSeries(Instance).Add(Caller.Params[0], String(Caller.Params[1]), Caller.Params[2]) + else if MethodName = 'DELETE' then + TChartSeries(Instance).Delete(Caller.Params[0]) + else if MethodName = 'COUNT' then + Result := TChartSeries(Instance).Count + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TChartSeries then + begin + if PropName = 'ACTIVE' then + Result := TChartSeries(Instance).Active + else if PropName = 'COLOREACHPOINT' then + Result := TChartSeries(Instance).ColorEachPoint + end else + if ClassType = TCustomBarSeries then + begin + if PropName = 'Title' then + Result := TCustomBarSeries(Instance).Title + end; +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TChartSeries then + begin + if PropName = 'ACTIVE' then + TChartSeries(Instance).Active := Value + else if PropName = 'COLOREACHPOINT' then + TChartSeries(Instance).ColorEachPoint := Value + end else + if ClassType = TCustomBarSeries then + begin + if PropName = 'Title' then + TCustomBarSeries(Instance).Title := Value + end +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsChartRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_iclassesrtti.pas b/FastScript/FMX/FMX.fs_iclassesrtti.pas new file mode 100644 index 0000000..97fd2ec --- /dev/null +++ b/FastScript/FMX/FMX.fs_iclassesrtti.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Classes.pas classes and functions } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iclassesrtti; +{$i FMX.inc} +{$i fs_iclassesrtti.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_iconst.pas b/FastScript/FMX/FMX.fs_iconst.pas new file mode 100644 index 0000000..c23d7cf --- /dev/null +++ b/FastScript/FMX/FMX.fs_iconst.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Resources } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iconst; +{$i FMX.inc} +{$i fs_iconst.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_icpp.pas b/FastScript/FMX/FMX.fs_icpp.pas new file mode 100644 index 0000000..64a3c70 --- /dev/null +++ b/FastScript/FMX/FMX.fs_icpp.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ C++ grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_icpp; +{$i FMX.inc} +{$i fs_icpp.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_idbrtti.pas b/FastScript/FMX/FMX.fs_idbrtti.pas new file mode 100644 index 0000000..dbb1620 --- /dev/null +++ b/FastScript/FMX/FMX.fs_idbrtti.pas @@ -0,0 +1,570 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ DB.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_idbrtti; + +interface + +{$i fs.inc} + +uses + System.Types, System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_iclassesrtti, FMX.fs_ievents, + Data.DB, FMX.Types; + +type +{$i frxPlatformsAttribute.inc} + TfsDBRTTI = class(TComponent); // fake component + + TfsDatasetNotifyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Dataset: TDataset); + function GetMethod: Pointer; override; + end; + + TfsFilterRecordEvent = class(TfsCustomEvent) + public + procedure DoEvent(DataSet: TDataSet; var Accept: Boolean); + function GetMethod: Pointer; override; + end; + + TfsFieldGetTextEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TField; var Text: String; DisplayText: Boolean); + function GetMethod: Pointer; override; + end; + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TfsDatasetNotifyEvent } + +procedure TfsDatasetNotifyEvent.DoEvent(Dataset: TDataset); +begin + CallHandler([Dataset]); +end; + +function TfsDatasetNotifyEvent.GetMethod: Pointer; +begin + Result := @TfsDatasetNotifyEvent.DoEvent; +end; + + +{ TfsFilterRecordEvent } + +procedure TfsFilterRecordEvent.DoEvent(DataSet: TDataSet; var Accept: Boolean); +begin + CallHandler([DataSet, Accept]); + Accept := Handler.Params[1].Value; +end; + +function TfsFilterRecordEvent.GetMethod: Pointer; +begin + Result := @TfsFilterRecordEvent.DoEvent; +end; + + +{ TfsFieldGetTextEvent } + +procedure TfsFieldGetTextEvent.DoEvent(Sender: TField; var Text: String; DisplayText: Boolean); +begin + CallHandler([Sender, Text, DisplayText]); + Text := Handler.Params[1].Value; +end; + +function TfsFieldGetTextEvent.GetMethod: Pointer; +begin + Result := @TfsFieldGetTextEvent.DoEvent; +end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TFieldType', 'ftUnknown, ftString, ftSmallint, ftInteger, ftWord,' + + 'ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,' + + 'ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,' + + 'ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString,' + + 'ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob,' + + 'ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd'); + AddEnum('TBlobStreamMode', 'bmRead, bmWrite, bmReadWrite'); + AddEnumSet('TLocateOptions', 'loCaseInsensitive, loPartialKey'); + AddEnumSet('TFilterOptions', 'foCaseInsensitive, foNoPartialCompare'); + AddEnum('TParamType', 'ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult'); + + with AddClass(TField, 'TComponent') do + begin + AddProperty('AsBoolean', 'Boolean', GetProp, SetProp); + AddProperty('AsCurrency', 'Currency', GetProp, SetProp); + AddProperty('AsDateTime', 'TDateTime', GetProp, SetProp); + AddProperty('AsFloat', 'Double', GetProp, SetProp); + AddProperty('AsInteger', 'Integer', GetProp, SetProp); + AddProperty('AsString', 'String', GetProp, SetProp); + AddProperty('AsVariant', 'Variant', GetProp, SetProp); + AddProperty('DataType', 'TFieldType', GetProp, nil); + AddProperty('DisplayName', 'String', GetProp, nil); + AddProperty('DisplayText', 'String', GetProp, nil); + AddProperty('IsNull', 'Boolean', GetProp, nil); + AddProperty('Size', 'Integer', GetProp, SetProp); + AddProperty('Value', 'Variant', GetProp, SetProp); + AddProperty('OldValue', 'Variant', GetProp, nil); + AddEvent('OnGetText', TfsFieldGetTextEvent); + end; + with AddClass(TFields, 'TObject') do + AddDefaultProperty('Fields', 'Integer', 'TField', CallMethod, True); + AddClass(TStringField, 'TField'); + AddClass(TNumericField, 'TField'); + AddClass(TIntegerField, 'TNumericField'); + AddClass(TSmallIntField, 'TIntegerField'); + AddClass(TWordField, 'TIntegerField'); + AddClass(TAutoIncField, 'TIntegerField'); + AddClass(TFloatField, 'TNumericField'); + AddClass(TCurrencyField, 'TFloatField'); + AddClass(TBooleanField, 'TField'); + AddClass(TDateTimeField, 'TField'); + AddClass(TDateField, 'TDateTimeField'); + AddClass(TTimeField, 'TDateTimeField'); + AddClass(TBinaryField, 'TField'); + AddClass(TBytesField, 'TBinaryField'); + AddClass(TVarBytesField, 'TBinaryField'); + AddClass(TBCDField, 'TNumericField'); + with AddClass(TBlobField, 'TField') do + begin + AddMethod('procedure LoadFromFile(const FileName: String)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToFile(const FileName: String)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + end; + AddClass(TMemoField, 'TBlobField'); + AddClass(TGraphicField, 'TBlobField'); + AddClass(TFieldDef, 'TPersistent'); + with AddClass(TFieldDefs, 'TObject') do + begin + AddMethod('function AddFieldDef: TFieldDef', CallMethod); + AddMethod('function Find(const Name: string): TFieldDef', CallMethod); + AddMethod('procedure Add(const Name: string; DataType: TFieldType; Size: Word; Required: Boolean)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Update', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TFieldDef', CallMethod, True); + end; + AddClass(TDataSource, 'TComponent'); + AddType('TBookmark', fvtVariant); + with AddClass(TDataSet, 'TComponent') do + begin + AddMethod('procedure Open', CallMethod); + AddMethod('procedure Close', CallMethod); + AddMethod('procedure First', CallMethod); + AddMethod('procedure Last', CallMethod); + AddMethod('procedure Next', CallMethod); + AddMethod('procedure Prior', CallMethod); + AddMethod('procedure Cancel', CallMethod); + AddMethod('procedure Delete', CallMethod); + AddMethod('procedure Post', CallMethod); + AddMethod('procedure Append', CallMethod); + AddMethod('procedure Insert', CallMethod); + AddMethod('procedure Edit', CallMethod); + + AddMethod('function FieldByName(const FieldName: string): TField', CallMethod); + AddMethod('procedure GetFieldNames(List: TStrings)', CallMethod); + AddMethod('function FindFirst: Boolean', CallMethod); + AddMethod('function FindLast: Boolean', CallMethod); + AddMethod('function FindNext: Boolean', CallMethod); + AddMethod('function FindPrior: Boolean', CallMethod); + AddMethod('procedure FreeBookmark(Bookmark: TBookmark)', CallMethod); + AddMethod('function GetBookmark: TBookmark', CallMethod); + AddMethod('procedure GotoBookmark(Bookmark: TBookmark)', CallMethod); + AddMethod('function Locate(const KeyFields: string; const KeyValues: Variant;' + + 'Options: TLocateOptions): Boolean', CallMethod); + AddMethod('function IsEmpty: Boolean', CallMethod); + AddMethod('procedure EnableControls', CallMethod); + AddMethod('procedure DisableControls', CallMethod); + + AddProperty('Bof', 'Boolean', GetProp, nil); + AddProperty('Eof', 'Boolean', GetProp, nil); + AddProperty('FieldCount', 'Integer', GetProp, nil); + AddProperty('FieldDefs', 'TFieldDefs', GetProp, nil); + AddProperty('Fields', 'TFields', GetProp, nil); + AddProperty('Filter', 'string', GetProp, SetProp); + AddProperty('Filtered', 'Boolean', GetProp, SetProp); + AddProperty('FilterOptions', 'TFilterOptions', GetProp, SetProp); + AddProperty('Active', 'Boolean', GetProp, SetProp); + + AddEvent('BeforeOpen', TfsDatasetNotifyEvent); + AddEvent('AfterOpen', TfsDatasetNotifyEvent); + AddEvent('BeforeClose', TfsDatasetNotifyEvent); + AddEvent('AfterClose', TfsDatasetNotifyEvent); + AddEvent('BeforeInsert', TfsDatasetNotifyEvent); + AddEvent('AfterInsert', TfsDatasetNotifyEvent); + AddEvent('BeforeEdit', TfsDatasetNotifyEvent); + AddEvent('AfterEdit', TfsDatasetNotifyEvent); + AddEvent('BeforePost', TfsDatasetNotifyEvent); + AddEvent('AfterPost', TfsDatasetNotifyEvent); + AddEvent('BeforeCancel', TfsDatasetNotifyEvent); + AddEvent('AfterCancel', TfsDatasetNotifyEvent); + AddEvent('BeforeDelete', TfsDatasetNotifyEvent); + AddEvent('AfterDelete', TfsDatasetNotifyEvent); + AddEvent('BeforeScroll', TfsDatasetNotifyEvent); + AddEvent('AfterScroll', TfsDatasetNotifyEvent); + AddEvent('OnCalcFields', TfsDatasetNotifyEvent); + AddEvent('OnFilterRecord', TfsFilterRecordEvent); + AddEvent('OnNewRecord', TfsDatasetNotifyEvent); + end; + + with AddClass(TParam, 'TPersistent') do + begin + AddMethod('procedure Clear', CallMethod); + AddProperty('AsBoolean', 'Boolean', GetProp, SetProp); + AddProperty('AsCurrency', 'Currency', GetProp, SetProp); + AddProperty('AsDateTime', 'TDateTime', GetProp, SetProp); + AddProperty('AsFloat', 'Double', GetProp, SetProp); + AddProperty('AsInteger', 'Integer', GetProp, SetProp); + AddProperty('AsDate', 'TDate', GetProp, SetProp); + AddProperty('AsTime', 'TTime', GetProp, SetProp); + AddProperty('AsString', 'String', GetProp, SetProp); + AddProperty('Bound', 'Boolean', GetProp, SetProp); + AddProperty('IsNull', 'Boolean', GetProp, nil); + AddProperty('Text', 'String', GetProp, SetProp); + end; + with AddClass(TParams, 'TPersistent') do + begin + AddMethod('function ParamByName(const Value: string): TParam', CallMethod); + AddMethod('function FindParam(const Value: string): TParam', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TParam', CallMethod, True); + end; + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + _TDataSet: TDataSet; + + function IntToLocateOptions(i: Integer): TLocateOptions; + begin + Result := []; + if (i and 1) <> 0 then + Result := Result + [loCaseInsensitive]; + if (i and 2) <> 0 then + Result := Result + [loPartialKey]; + end; + +begin + Result := 0; + + if ClassType = TFields then + begin + if MethodName = 'FIELDS.GET' then + Result := frxInteger(TFields(Instance)[Caller.Params[0]]) + end + else if ClassType = TFieldDefs then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TFieldDefs(Instance)[Caller.Params[0]]) + else if MethodName = 'ADD' then + TFieldDefs(Instance).Add(Caller.Params[0], TFieldType(Caller.Params[1]), Caller.Params[2], Caller.Params[3]) + else if MethodName = 'ADDFIELDDEF' then + Result := frxInteger(TFieldDefs(Instance).AddFieldDef) + else if MethodName = 'CLEAR' then + TFieldDefs(Instance).Clear + else if MethodName = 'FIND' then + Result := frxInteger(TFieldDefs(Instance).Find(Caller.Params[0])) + else if MethodName = 'UPDATE' then + TFieldDefs(Instance).Update + end + else if ClassType = TBlobField then + begin + if MethodName = 'LOADFROMFILE' then + TBlobField(Instance).LoadFromFile(Caller.Params[0]) + else if MethodName = 'LOADFROMSTREAM' then + TBlobField(Instance).LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOFILE' then + TBlobField(Instance).SaveToFile(Caller.Params[0]) + else if MethodName = 'SAVETOSTREAM' then + TBlobField(Instance).SaveToStream(TStream(frxInteger(Caller.Params[0]))) + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if MethodName = 'OPEN' then + _TDataSet.Open + else if MethodName = 'CLOSE' then + _TDataSet.Close + else if MethodName = 'FIRST' then + _TDataSet.First + else if MethodName = 'LAST' then + _TDataSet.Last + else if MethodName = 'NEXT' then + _TDataSet.Next + else if MethodName = 'PRIOR' then + _TDataSet.Prior + else if MethodName = 'CANCEL' then + _TDataSet.Cancel + else if MethodName = 'DELETE' then + _TDataSet.Delete + else if MethodName = 'POST' then + _TDataSet.Post + else if MethodName = 'APPEND' then + _TDataSet.Append + else if MethodName = 'INSERT' then + _TDataSet.Insert + else if MethodName = 'EDIT' then + _TDataSet.Edit + else if MethodName = 'FIELDBYNAME' then + Result := frxInteger(_TDataSet.FieldByName(Caller.Params[0])) + else if MethodName = 'GETFIELDNAMES' then + _TDataSet.GetFieldNames(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'FINDFIRST' then + Result := _TDataSet.FindFirst + else if MethodName = 'FINDLAST' then + Result := _TDataSet.FindLast + else if MethodName = 'FINDNEXT' then + Result := _TDataSet.FindNext + else if MethodName = 'FINDPRIOR' then + Result := _TDataSet.FindPrior + else if MethodName = 'FREEBOOKMARK' then + _TDataSet.FreeBookmark(TBookMark(frxInteger(Caller.Params[0]))) +{$IFNDEF CPUX64} + else if MethodName = 'GETBOOKMARK' then + Result := frxInteger(_TDataSet.GetBookmark) +{$ENDIF} + else if MethodName = 'GOTOBOOKMARK' then + _TDataSet.GotoBookmark(TBookMark(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOCATE' then + Result := _TDataSet.Locate(Caller.Params[0], Caller.Params[1], IntToLocateOptions(Caller.Params[2])) + else if MethodName = 'ISEMPTY' then + Result := _TDataSet.IsEmpty + else if MethodName = 'ENABLECONTROLS' then + _TDataSet.EnableControls + else if MethodName = 'DISABLECONTROLS' then + _TDataSet.DisableControls + end + else if ClassType = TParam then + begin + if MethodName = 'CLEAR' then + TParam(Instance).Clear + end + else if ClassType = TParams then + begin + if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TParams(Instance).ParamByName(Caller.Params[0])) + else if MethodName = 'FINDPARAM' then + Result := frxInteger(TParams(Instance).FindParam(Caller.Params[0])) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TParams(Instance)[Caller.Params[0]]) + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +var + _TField: TField; + _TParam: TParam; + _TDataSet: TDataSet; + + function FilterOptionsToInt(f: TFilterOptions): Integer; + begin + Result := 0; + if foCaseInsensitive in f then + Result := Result or 1; + if foNoPartialCompare in f then + Result := Result or 2; + end; + +begin + Result := 0; + + if ClassType = TField then + begin + _TField := TField(Instance); + if PropName = 'ASBOOLEAN' then + Result := _TField.AsBoolean + else if PropName = 'ASCURRENCY' then + Result := _TField.AsCurrency + else if PropName = 'ASDATETIME' then + Result := _TField.AsDateTime + else if PropName = 'ASFLOAT' then + Result := _TField.AsFloat + else if PropName = 'ASINTEGER' then + Result := _TField.AsInteger + else if PropName = 'ASSTRING' then + Result := _TField.AsString + else if PropName = 'ASVARIANT' then + Result := _TField.AsVariant + else if PropName = 'DATATYPE' then + Result := _TField.DataType + else if PropName = 'DISPLAYNAME' then + Result := _TField.DisplayName + else if PropName = 'DISPLAYTEXT' then + Result := _TField.DisplayText + else if PropName = 'ISNULL' then + Result := _TField.IsNull + else if PropName = 'SIZE' then + Result := _TField.Size + else if PropName = 'VALUE' then + Result := _TField.Value + else if PropName = 'OLDVALUE' then + Result := _TField.OldValue + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if PropName = 'BOF' then + Result := _TDataSet.Bof + else if PropName = 'EOF' then + Result := _TDataSet.Eof + else if PropName = 'FIELDCOUNT' then + Result := _TDataSet.FieldCount + else if PropName = 'FIELDDEFS' then + Result := frxInteger(_TDataSet.FieldDefs) + else if PropName = 'FIELDS' then + Result := frxInteger(_TDataSet.Fields) + else if PropName = 'FILTER' then + Result := _TDataSet.Filter + else if PropName = 'FILTERED' then + Result := _TDataSet.Filtered + else if PropName = 'FILTEROPTIONS' then + Result := FilterOptionsToInt(_TDataSet.FilterOptions) + else if PropName = 'ACTIVE' then + Result := _TDataSet.Active + end + else if ClassType = TParam then + begin + _TParam := TParam(Instance); + if PropName = 'BOUND' then + Result := _TParam.Bound + else if PropName = 'ISNULL' then + Result := _TParam.IsNull + else if PropName = 'TEXT' then + Result := _TParam.Text + else if PropName = 'ASBOOLEAN' then + Result := _TParam.AsBoolean + else if PropName = 'ASCURRENCY' then + Result := _TParam.AsCurrency + else if PropName = 'ASDATETIME' then + Result := _TParam.AsDateTime + else if PropName = 'ASFLOAT' then + Result := _TParam.AsFloat + else if PropName = 'ASINTEGER' then + Result := _TParam.AsInteger + else if PropName = 'ASDATE' then + Result := _TParam.AsDate + else if PropName = 'ASTIME' then + Result := _TParam.AsTime + else if PropName = 'ASSTRING' then + Result := _TParam.AsString + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +var + _TField: TField; + _TParam: TParam; + _TDataSet: TDataSet; + + function IntToFilterOptions(i: Integer): TFilterOptions; + begin + Result := []; + if (i and 1) <> 0 then + Result := Result + [foCaseInsensitive]; + if (i and 2) <> 0 then + Result := Result + [foNoPartialCompare]; + end; + +begin + if ClassType = TField then + begin + _TField := TField(Instance); + if PropName = 'ASBOOLEAN' then + _TField.AsBoolean := Value + else if PropName = 'ASCURRENCY' then + _TField.AsCurrency := Value + else if PropName = 'ASDATETIME' then + _TField.AsDateTime := Value + else if PropName = 'ASFLOAT' then + _TField.AsFloat := Value + else if PropName = 'ASINTEGER' then + _TField.AsInteger := Value + else if PropName = 'ASSTRING' then + _TField.AsString := Value + else if PropName = 'ASVARIANT' then + _TField.AsVariant := Value + else if PropName = 'VALUE' then + _TField.Value := Value + else if PropName = 'SIZE' then + _TField.Size := Value + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if PropName = 'FILTER' then + _TDataSet.Filter := Value + else if PropName = 'FILTERED' then + _TDataSet.Filtered := Value + else if PropName = 'FILTEROPTIONS' then + _TDataSet.FilterOptions := IntToFilterOptions(Value) + else if PropName = 'ACTIVE' then + _TDataSet.Active := Value + end + else if ClassType = TParam then + begin + _TParam := TParam(Instance); + if PropName = 'ASBOOLEAN' then + _TParam.AsBoolean := Value + else if PropName = 'ASCURRENCY' then + _TParam.AsCurrency := Value + else if PropName = 'ASDATETIME' then + _TParam.AsDateTime := Value + else if PropName = 'ASFLOAT' then + _TParam.AsFloat := Value + else if PropName = 'ASINTEGER' then + _TParam.AsInteger := Value + else if PropName = 'ASDATE' then + _TParam.AsDate := Value + else if PropName = 'ASTIME' then + _TParam.AsTime := Value + else if PropName = 'ASSTRING' then + _TParam.AsString := Value + else if PropName = 'BOUND' then + _TParam.Bound := Value + else if PropName = 'TEXT' then + _TParam.Text := Value + end +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsDBRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_idialogsrtti.pas b/FastScript/FMX/FMX.fs_idialogsrtti.pas new file mode 100644 index 0000000..0d12fba --- /dev/null +++ b/FastScript/FMX/FMX.fs_idialogsrtti.pas @@ -0,0 +1,133 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Dialogs.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_idialogsrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_iclassesrtti, FMX.Types +, FMX.Dialogs, System.UITypes, System.Types +{$IFDEF DELPHI19} +, FMX.Printer +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsDialogsRTTI = class(TComponent); // fake component + + +implementation + +type + THackDialog = class(TCommonDialog); + + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + +type + TWordSet = set of 0..15; + PWordSet = ^TWordSet; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +var + dlg: String; +begin + inherited Create(AScript); + with AScript do + begin + AddEnumSet('TOpenOptions', 'ofReadOnly, ofOverwritePrompt, ofHideReadOnly,' + + 'ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect,' + + 'ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt,' + + 'ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton,' + + 'ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, ofEnableIncludeNotify,' + + 'ofEnableSizing'); + AddEnum('TFileEditStyle', 'fsEdit, fsComboBox'); + AddEnumSet('TColorDialogOptions', 'cdFullOpen, cdPreventFullOpen, cdShowHelp,' + + 'cdSolidColor, cdAnyColor'); + AddEnumSet('TFontDialogOptions', 'fdAnsiOnly, fdTrueTypeOnly, fdEffects,' + + 'fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts,' + + 'fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts,' + + 'fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton'); + AddEnum('TFontDialogDevice', 'fdScreen, fdPrinter, fdBoth'); + AddEnum('TPrintRange', 'prAllPages, prSelection, prPageNums'); + AddEnumSet('TPrintDialogOptions', 'poPrintToFile, poPageNums, poSelection,' + + 'poWarning, poHelp, poDisablePrintToFile'); + AddEnum('TMsgDlgType', 'mtCustom, mtInformation, mtWarning, mtError, mtConfirmation'); + AddEnumSet('TMsgDlgButtons', 'mbNone, mbOk, mbCancel, mbYes, mbNo, mbAbort, ' + + 'mbRetry, mbIgnore'); + + + with AddClass(TCommonDialog, 'TComponent') do + AddMethod('function Execute: Boolean', CallMethod); + AddClass(TOpenDialog, 'TCommonDialog'); + AddClass(TSaveDialog, 'TCommonDialog'); + AddClass(TPrintDialog, dlg); + AddClass(TPrinterSetupDialog, dlg); + + AddMethod('function MessageDlg(Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer', CallMethod, 'ctOther'); + AddMethod('function InputBox(ACaption, APrompt, ADefault: string): string', CallMethod, 'ctOther'); + AddMethod('function InputQuery(ACaption, APrompt: string; var Value: string): Boolean', CallMethod, 'ctOther'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + s: String; + b: TMsgDlgButtons; +begin + Result := 0; + + if ClassType = TCommonDialog then + begin + if MethodName = 'EXECUTE' then + Result := THackDialog(Instance).Execute + end + else if MethodName = 'INPUTBOX' then + Result := InputBox(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'INPUTQUERY' then + begin + s := Caller.Params[2]; + Result := InputQuery(Caller.Params[0], Caller.Params[1], s); + Caller.Params[2] := s; + end + else if MethodName = 'MESSAGEDLG' then + begin + Word(PWordSet(@b)^) := Caller.Params[2]; + Result := MessageDlg(Caller.Params[0], Caller.Params[1], b, Caller.Params[3]); + end +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsDialogsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_idisp.pas b/FastScript/FMX/FMX.fs_idisp.pas new file mode 100644 index 0000000..3ce8fda --- /dev/null +++ b/FastScript/FMX/FMX.fs_idisp.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ OLE dispatch module } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_idisp; +{$i FMX.inc} +{$i fs_idisp.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_ievents.pas b/FastScript/FMX/FMX.fs_ievents.pas new file mode 100644 index 0000000..2d6981e --- /dev/null +++ b/FastScript/FMX/FMX.fs_ievents.pas @@ -0,0 +1,379 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Standard events } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ievents; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Controls, FMX.Forms, System.UITypes, FMX.Types, + System.Types, System.Rtti, FMX.fs_iinterpreter, FMX.fs_iclassesrtti +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF}; + +type + + PDragObject = ^TDragObject; + TfsDragObject = class(TPersistent) + private + FDragObject: TDragObject; + FFiles: TStringList; + function GetStringList: TStringList; + public + function GetRect: TDragObject; + function GetRectP: PDragObject; + constructor Create(aDragObj: TDragObject); + destructor Destroy; override; + published + property Source: TObject read FDragObject.Source write FDragObject.Source; + property Data: {$IFDEF Delphi17}TValue{$ELSE}Variant{$ENDIF} read FDragObject.Data write FDragObject.Data; + property Files: TStringList read GetStringList; + end; + + TfsNotifyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject); + function GetMethod: Pointer; override; + end; + + TfsMouseEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Single); + function GetMethod: Pointer; override; + end; + + TfsMouseMoveEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Shift: TShiftState; X, Y: Single); + function GetMethod: Pointer; override; + end; + + TfsMouseWheelEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); + function GetMethod: Pointer; override; + end; + + TfsOnPaintEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); + function GetMethod: Pointer; override; + end; + + TfsCanFocusEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var ACanFocus: Boolean); + function GetMethod: Pointer; override; + end; + + TfsDragOverEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; const Data: TDragObject; const Point: TPointF; var Accept: Boolean); + function GetMethod: Pointer; override; + end; + + TfsDragDropEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; const Data: TDragObject; const Point: TPointF); + function GetMethod: Pointer; override; + end; + + TfsKeyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Key: Word; var KeyChar: WideChar; Shift: TShiftState); + function GetMethod: Pointer; override; + end; + + TfsKeyPressEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Key: Char); + function GetMethod: Pointer; override; + end; + + TfsCloseEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Action: TCloseAction); + function GetMethod: Pointer; override; + end; + + TfsCloseQueryEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var CanClose: Boolean); + function GetMethod: Pointer; override; + end; + + TfsCanResizeEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var NewWidth, NewHeight: Integer; + var Resize: Boolean); + function GetMethod: Pointer; override; + end; + + +implementation + + +type + TByteSet = set of 0..7; + PByteSet = ^TByteSet; + + +{ TfsNotifyEvent } + +procedure TfsNotifyEvent.DoEvent(Sender: TObject); +begin + CallHandler([Sender]); +end; + +function TfsNotifyEvent.GetMethod: Pointer; +begin + Result := @TfsNotifyEvent.DoEvent; +end; + +{ TfsMouseEvent } + +procedure TfsMouseEvent.DoEvent(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Single); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, Integer(Button), b, X, Y]); +end; + +function TfsMouseEvent.GetMethod: Pointer; +begin + Result := @TfsMouseEvent.DoEvent; +end; + +{ TfsMouseMoveEvent } + +procedure TfsMouseMoveEvent.DoEvent(Sender: TObject; Shift: TShiftState; X, + Y: Single); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, b, X, Y]); +end; + +function TfsMouseMoveEvent.GetMethod: Pointer; +begin + Result := @TfsMouseMoveEvent.DoEvent; +end; + +{ TfsKeyEvent } + +procedure TfsKeyEvent.DoEvent(Sender: TObject; var Key: Word; + var KeyChar: WideChar; Shift: TShiftState); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, Key, KeyChar, b]); + Key := Handler.Params[1].Value; + KeyChar := WideChar(Cardinal(Handler.Params[2].Value)); +end; + +function TfsKeyEvent.GetMethod: Pointer; +begin + Result := @TfsKeyEvent.DoEvent; +end; + +{ TfsKeyPressEvent } + +procedure TfsKeyPressEvent.DoEvent(Sender: TObject; var Key: Char); +begin + CallHandler([Sender, Key]); + Key := String(Handler.Params[1].Value)[1]; +end; + +function TfsKeyPressEvent.GetMethod: Pointer; +begin + Result := @TfsKeyPressEvent.DoEvent; +end; + +{ TfsCloseEvent } + +procedure TfsCloseEvent.DoEvent(Sender: TObject; var Action: TCloseAction); +begin + CallHandler([Sender, Integer(Action)]); + Action := Handler.Params[1].Value; +end; + +function TfsCloseEvent.GetMethod: Pointer; +begin + Result := @TfsCloseEvent.DoEvent; +end; + +{ TfsCloseQueryEvent } + +procedure TfsCloseQueryEvent.DoEvent(Sender: TObject; var CanClose: Boolean); +begin + CallHandler([Sender, CanClose]); + CanClose := Handler.Params[1].Value; +end; + +function TfsCloseQueryEvent.GetMethod: Pointer; +begin + Result := @TfsCloseQueryEvent.DoEvent; +end; + +{ TfsCanResizeEvent } + +procedure TfsCanResizeEvent.DoEvent(Sender: TObject; var NewWidth, + NewHeight: Integer; var Resize: Boolean); +begin + CallHandler([Sender, NewWidth, NewHeight, Resize]); + NewWidth := Handler.Params[1].Value; + NewHeight := Handler.Params[2].Value; + Resize := Handler.Params[3].Value; +end; + +function TfsCanResizeEvent.GetMethod: Pointer; +begin + Result := @TfsCanResizeEvent.DoEvent; +end; + +{ TfsMouseWheelEvent } + +procedure TfsMouseWheelEvent.DoEvent(Sender: TObject; + Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, b, WheelDelta, Boolean(Handled)]); + Handled := Handler.Params[3].Value; +end; + +function TfsMouseWheelEvent.GetMethod: Pointer; +begin + Result := @TfsMouseWheelEvent.DoEvent; +end; + +{ TfsOnPaintEvent } + +procedure TfsOnPaintEvent.DoEvent(Sender: TObject; Canvas: TCanvas; + const ARect: TRectF); +var + r: TfsRectF; +begin + r := TfsRectF.Create(ARect); + CallHandler([Sender, Canvas, r]); + r.Free; +end; + +function TfsOnPaintEvent.GetMethod: Pointer; +begin + Result := @TfsOnPaintEvent.DoEvent; +end; + +{ TfsCanFocusEvent } + +procedure TfsCanFocusEvent.DoEvent(Sender: TObject; var ACanFocus: Boolean); +begin + CallHandler([Sender, ACanFocus]); + ACanFocus := Handler.Params[1].Value; +end; + +function TfsCanFocusEvent.GetMethod: Pointer; +begin + Result := @TfsCanFocusEvent.DoEvent; +end; + +{ TfsDragOverEvent } + +procedure TfsDragOverEvent.DoEvent(Sender: TObject; const Data: TDragObject; + const Point: TPointF; var Accept: Boolean); +var + dObj: TfsDragObject; +begin + dObj := TfsDragObject.Create(Data); + CallHandler([Sender, dObj, Accept]); + dObj.Free; + Accept := Handler.Params[3].Value; +end; + +function TfsDragOverEvent.GetMethod: Pointer; +begin + Result := @TfsDragOverEvent.DoEvent; +end; + +{ TfsDragObject } + +constructor TfsDragObject.Create(aDragObj: TDragObject); +var + idx: Integer; +begin + FFiles := TStringList.Create; + FDragObject.Source := aDragObj.Source; + FDragObject.Data := aDragObj.Data; + for idx := Low(FDragObject.Files) to High(FDragObject.Files) do + FFiles.Add(FDragObject.Files[idx]); +end; + +destructor TfsDragObject.Destroy; +begin + FFiles.Free; + inherited; +end; + +function TfsDragObject.GetRect: TDragObject; +var + idx: Integer; +begin + SetLength(FDragObject.Files, FFiles.Count); + for idx := 0 to FFiles.Count - 1 do + FDragObject.Files[idx] := FFiles.Strings[idx]; + Result := FDragObject; +end; + +function TfsDragObject.GetRectP: PDragObject; +var + idx: Integer; +begin + SetLength(FDragObject.Files, FFiles.Count); + for idx := 0 to FFiles.Count - 1 do + FDragObject.Files[idx] := FFiles.Strings[idx]; + Result := @FDragObject; +end; + +function TfsDragObject.GetStringList: TStringList; +begin + Result := FFiles; +end; + +{ TfsDragDropEvent } + +procedure TfsDragDropEvent.DoEvent(Sender: TObject; const Data: TDragObject; + const Point: TPointF); +var + dObj: TfsDragObject; + aPoint: TfsPointF; +begin + dObj := TfsDragObject.Create(Data); + aPoint := TfsPointF.Create(Point); + CallHandler([Sender, dObj, aPoint]); + dObj.Free; + aPoint.Free; +end; + +function TfsDragDropEvent.GetMethod: Pointer; +begin + Result := @TfsDragDropEvent.DoEvent; +end; + +end. \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_iexpression.pas b/FastScript/FMX/FMX.fs_iexpression.pas new file mode 100644 index 0000000..f429d38 --- /dev/null +++ b/FastScript/FMX/FMX.fs_iexpression.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Expression parser } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iexpression; +{$i FMX.inc} +{$i fs_iexpression.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_iextctrlsrtti.pas b/FastScript/FMX/FMX.fs_iextctrlsrtti.pas new file mode 100644 index 0000000..5bd17eb --- /dev/null +++ b/FastScript/FMX/FMX.fs_iextctrlsrtti.pas @@ -0,0 +1,268 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ ExtCtrls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iextctrlsrtti; + +interface + +{$i fs.inc} + +uses System.Types, System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_ievents, FMX.fs_iformsrtti +, FMX.ExtCtrls, FMX.ListBox, FMX.Objects, System.UITypes, FMX.Types, FMX.Controls, FMX.Layouts, + FMX.TabControl, FMX.TreeView +{$IFDEF DELPHI18} + , FMX.StdCtrls +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsExtCtrlsRTTI = class(TComponent); // fake component + + +implementation + +type + TfsTreeViewDragChange = class(TfsCustomEvent) + public + procedure DoEvent(SourceItem, DestItem: TTreeViewItem; var Allow: Boolean); + function GetMethod: Pointer; override; + end; + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TShapeType', 'stRectangle, stSquare, stRoundRect, stRoundSquare,' + + 'stEllipse, stCircle'); + AddEnum('TBevelStyle', 'bsLowered, bsRaised'); + AddEnum('TBevelShape', 'bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine,' + + 'bsRightLine, bsSpacer'); + AddEnum('TResizeStyle', 'rsNone, rsLine, rsUpdate, rsPattern'); + AddEnum('TButtonLayout', 'blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom'); + AddEnum('TButtonState', 'bsUp, bsDisabled, bsDown, bsExclusive'); + AddEnum('TButtonStyle', 'bsAutoDetect, bsWin31, bsNew'); + AddEnum('TBitBtnKind', 'bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo,' + + 'bkClose, bkAbort, bkRetry, bkIgnore, bkAll'); + AddType('TNumGlyphs', fvtInt); + AddEnum('TTabPosition', 'tpTop, tpBottom, tpLeft, tpRight'); + AddEnum('TTabStyle', 'tsTabs, tsButtons, tsFlatButtons'); + AddEnum('TStatusPanelStyle', 'psText, psOwnerDraw'); + AddEnum('TStatusPanelBevel', 'pbNone, pbLowered, pbRaised'); + AddEnum('TSortType', 'stNone, stData, stText, stBoth'); + AddEnum('TTrackBarOrientation', 'trHorizontal, trVertical'); + AddEnum('TTickMark', 'tmBottomRight, tmTopLeft, tmBoth'); + AddEnum('TTickStyle', 'tsNone, tsAuto, tsManual'); + AddEnum('TProgressBarOrientation', 'pbHorizontal, pbVertical'); + AddEnum('TIconArrangement', 'iaTop, iaLeft'); + AddEnum('TListArrangement', 'arAlignBottom, arAlignLeft, arAlignRight,' + + 'arAlignTop, arDefault, arSnapToGrid'); + AddEnum('TViewStyle', 'vsIcon, vsSmallIcon, vsList, vsReport'); + AddEnum('TToolButtonStyle', 'tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider'); + AddEnum('TDateTimeKind', 'dtkDate, dtkTime'); + AddEnum('TDTDateMode', 'dmComboBox, dmUpDown'); + AddEnum('TDTDateFormat', 'dfShort, dfLong'); + AddEnum('TDTCalAlignment', 'dtaLeft, dtaRight'); + AddEnum('TCalDayOfWeek', 'dowMonday, dowTuesday, dowWednesday, dowThursday,' + + 'dowFriday, dowSaturday, dowSunday, dowLocaleDefault'); + + + with AddClass(TPaintBox, 'TControl') do + AddEvent('OnPaint', TfsNotifyEvent); + AddClass(TImage, 'TControl'); + with AddClass(TTimer, 'TComponent') do + AddEvent('OnTimer', TfsNotifyEvent); + + AddClass(TTabItem, 'TTextControl'); + with AddClass(TTabControl, 'TStyledControl') do + begin + AddIndexProperty( 'Tabs', 'Integer', 'TTabItem', CallMethod); + AddEvent('OnChange', TfsNotifyEvent); + AddProperty('TabCount', 'Integer', GetProp, nil); + AddProperty('ActiveTab', 'TTabItem', GetProp, SetProp); + end; + + with AddClass(TTreeViewItem, 'TTextControl') do + begin + AddMethod('function ItemByPoint(const X, Y: Single): TTreeViewItem', CallMethod); + AddMethod('function ItemByIndex(const Idx: Integer): TTreeViewItem', CallMethod); + AddMethod('function TreeView: TCustomTreeView', CallMethod); + AddMethod('function Level: Integer', CallMethod); + AddMethod('function ParentItem: TTreeViewItem', CallMethod); + AddIndexProperty( 'Items', 'Integer', 'TTreeViewItem', CallMethod); + AddProperty('GlobalIndex', 'Integer', GetProp, SetProp); + AddProperty('Count', 'Integer', GetProp, nil); + end; + with AddClass(TTreeView, 'TScrollBox') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure CollapseAll', CallMethod); + AddMethod('procedure ExpandAll', CallMethod); + AddMethod('function ItemByText(const AText: string): TTreeViewItem', CallMethod); + AddMethod('function ItemByPoint(const X, Y: Single): TTreeViewItem', CallMethod); + AddMethod('function ItemByIndex(const Idx: Integer): TTreeViewItem', CallMethod); + AddMethod('function ItemByGlobalIndex(const Idx: Integer): TTreeViewItem', CallMethod); + AddIndexProperty('Items', 'Integer', 'TTreeViewItem', CallMethod); + AddProperty('Selected', 'TTreeViewItem', GetProp, SetProp); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('GlobalCount', 'Integer', GetProp, nil); + AddProperty('CountExpanded', 'Integer', GetProp, nil); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnChangeCheck', TfsNotifyEvent); + AddEvent('OnDragChange', TfsTreeViewDragChange); + end; + + { TODO ADD necessary methods for these calasses } + //AddClass(TCalendar, 'TStyledControl'); + //AddClass(TCalendarBox, 'TTextControl'); + // AddClass(TCalendarEdit, 'TCustomEdit'); + AddClass(TImageViewer, 'TScrollBox'); + AddClass(TPlotGrid, 'TControl'); + AddClass(TDropTarget, 'TTextControl'); + AddClass(TCornerButton, 'TCustomButton'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + if ClassType = TTabControl then + begin + if MethodName = 'TABS.GET' then + Result := frxInteger(TTabControl(Instance).Tabs[Caller.Params[0]]) + end + else if ClassType = TTreeViewItem then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TTreeViewItem(Instance).Items[Caller.Params[0]]) + else if MethodName = 'ITEMBYPOINT' then + Result := frxInteger(TTreeViewItem(Instance).ItemByPoint(Single(Caller.Params[0]), Single(Caller.Params[1]))) + else if MethodName = 'ITEMBYINDEX' then + Result := frxInteger(TTreeViewItem(Instance).ItemByIndex(Caller.Params[0])) + else if MethodName = 'TREEVIEW' then + Result := frxInteger(TTreeViewItem(Instance).TreeView) + else if MethodName = 'LEVEL' then + Result := Integer(TTreeViewItem(Instance).Level) + else if MethodName = 'PARENTITEM' then + Result := frxInteger(TTreeViewItem(Instance).ParentItem) + end + else if ClassType = TTreeView then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TTreeView(Instance).Items[Caller.Params[0]]) + else if MethodName = 'ITEMBYPOINT' then + Result := frxInteger(TTreeView(Instance).ItemByPoint(Single(Caller.Params[0]), Single(Caller.Params[1]))) + else if MethodName = 'ITEMBYINDEX' then + Result := frxInteger(TTreeView(Instance).ItemByIndex(Caller.Params[0])) + else if MethodName = 'ITEMBYTEXT' then + Result := frxInteger(TTreeView(Instance).ItemByText(String(Caller.Params[0]))) + else if MethodName = 'ITEMBYGLOBALINDEX' then + Result := frxInteger(TTreeView(Instance).ItemByGlobalIndex(Caller.Params[0])) + else if MethodName = 'CLEAR' then + TTreeView(Instance).Clear + else if MethodName = 'COLLAPSEALL' then + TTreeView(Instance).CollapseAll + else if MethodName = 'EXPANDALL' then + TTreeView(Instance).ExpandAll + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + if ClassType = TTabControl then + begin + if PropName = 'TABCOUNT' then + Result := TTabControl(Instance).TabCount + else if PropName = 'ACTIVETAB' then + Result := frxInteger(TTabControl(Instance).ActiveTab) + end + else if ClassType = TTreeViewItem then + begin + if PropName = 'GLOBALINDEX' then + Result := TTreeViewItem(Instance).GlobalIndex + else if PropName = 'COUNT' then + Result := TTreeViewItem(Instance).Count + end + else if ClassType = TTreeView then + begin + if PropName = 'SELECTED' then + Result := frxInteger(TTreeView(Instance).Selected) + else if PropName = 'COUNT' then + Result := TTreeView(Instance).Count + else if PropName = 'GLOBALCOUNT' then + Result := TTreeView(Instance).GlobalCount + else if PropName = 'COUNTEXPANDED' then + Result := TTreeView(Instance).CountExpanded + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TTabControl then + begin + if PropName = 'ACTIVETAB' then + TTabControl(Instance).ActiveTab := TTabItem(frxInteger(Value)) + end + else if ClassType = TTreeViewItem then + begin +// if PropName = 'GLOBALINDEX' then +// TTreeViewItem(Instance).GlobalIndex := Value + end + else if ClassType = TTreeView then + begin + if PropName = 'SELECTED' then + TTreeView(Instance).Selected := TTreeViewItem(frxInteger(Value)) + end +end; + +{ TfsTreeViewDragChange } + +procedure TfsTreeViewDragChange.DoEvent(SourceItem, DestItem: TTreeViewItem; + var Allow: Boolean); +begin + CallHandler([SourceItem, DestItem, Allow]); + Allow := Handler.Params[2].Value; +end; + +function TfsTreeViewDragChange.GetMethod: Pointer; +begin + Result := @TfsTreeViewDragChange.DoEvent; +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsExtCtrlsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_iformsrtti.pas b/FastScript/FMX/FMX.fs_iformsrtti.pas new file mode 100644 index 0000000..28da4fa --- /dev/null +++ b/FastScript/FMX/FMX.fs_iformsrtti.pas @@ -0,0 +1,864 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Forms and StdCtrls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iformsrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_ievents, FMX.fs_iclassesrtti, + FMX.fs_igraphicsrtti, FMX.Types, FMX.Controls, FMX.Forms, System.UITypes, System.Types, + FMX.Edit, FMX.Memo, FMX.ListBox, FMX.Layouts +{$IFDEF DELPHI18} + , FMX.StdCtrls +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI29} + , FMX.BaseTypeAliases, FMX.FormTypeAliases +{$ENDIF} + ; + +type +{$i frxPlatformsAttribute.inc} + TfsFormsRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddConst('mrNone', 'Integer', mrNone); + AddConst('mrOk', 'Integer', mrOk); + AddConst('mrCancel', 'Integer', mrCancel); + AddConst('mrAbort', 'Integer', mrAbort); + AddConst('mrRetry', 'Integer', mrRetry); + AddConst('mrIgnore', 'Integer', mrIgnore); + AddConst('mrYes', 'Integer', mrYes); + AddConst('mrNo', 'Integer', mrNo); + AddConst('mrAll', 'Integer', mrAll); + AddConst('mrNoToAll', 'Integer', mrNoToAll); + AddConst('mrYesToAll', 'Integer', mrYesToAll); + + AddConst('crDefault', 'Integer', crDefault); + AddConst('crNone', 'Integer', crNone); + AddConst('crArrow', 'Integer', crArrow); + AddConst('crCross', 'Integer', crCross); + AddConst('crIBeam', 'Integer', crIBeam); + AddConst('crSize', 'Integer', crSize); + AddConst('crSizeNESW', 'Integer', crSizeNESW); + AddConst('crSizeNS', 'Integer', crSizeNS); + AddConst('crSizeNWSE', 'Integer', crSizeNWSE); + AddConst('crSizeWE', 'Integer', crSizeWE); + AddConst('crUpArrow', 'Integer', crUpArrow); + AddConst('crHourGlass', 'Integer', crHourGlass); + AddConst('crDrag', 'Integer', crDrag); + AddConst('crNoDrop', 'Integer', crNoDrop); + AddConst('crHSplit', 'Integer', crHSplit); + AddConst('crVSplit', 'Integer', crVSplit); + AddConst('crMultiDrag', 'Integer', crMultiDrag); + AddConst('crSQLWait', 'Integer', crSQLWait); + AddConst('crNo', 'Integer', crNo); + AddConst('crAppStart', 'Integer', crAppStart); + AddConst('crHelp', 'Integer', crHelp); + AddConst('crHandPoint', 'Integer', crHandPoint); + AddConst('crSizeAll', 'Integer', crSizeAll); + +{$IFDEF CLX} + AddConst('bsNone', 'Integer', fbsNone); + AddConst('bsSingle', 'Integer', fbsSingle); + AddConst('bsSizeable', 'Integer', fbsSizeable); + AddConst('bsDialog', 'Integer', fbsDialog); + AddConst('bsToolWindow', 'Integer', fbsToolWindow); + AddConst('bsSizeToolWin', 'Integer', fbsSizeToolWin); +{$ELSE} + AddConst('bsNone', 'Integer', TFmxFormBorderStyle.bsNone); + AddConst('bsSingle', 'Integer', TFmxFormBorderStyle.bsSingle); + AddConst('bsSizeable', 'Integer', TFmxFormBorderStyle.bsSizeable); + AddConst('bsToolWindow', 'Integer', TFmxFormBorderStyle.bsToolWindow); + AddConst('bsSizeToolWin', 'Integer', TFmxFormBorderStyle.bsSizeToolWin); +{$ENDIF} + + AddConst('VK_RBUTTON', 'Integer', VKRBUTTON); + AddConst('VKCANCEL', 'Integer', VKCANCEL); + AddConst('VKMBUTTON', 'Integer', VKMBUTTON); + AddConst('VKBACK', 'Integer', VKBACK);//Backspace key + AddConst('VKTAB', 'Integer', VKTAB);//Tab key + AddConst('VKRETURN', 'Integer', VKRETURN);//Enter key + AddConst('VKSHIFT', 'Integer', VKSHIFT);//Shift key + AddConst('VKCONTROL', 'Integer', VKCONTROL);//Ctrl key + AddConst('VKMENU', 'Integer', VKMENU);//Alt key + AddConst('VKPAUSE', 'Integer', VKPAUSE);//Pause key + AddConst('VKCAPITAL', 'Integer', VKCAPITAL);//Caps Lock key + AddConst('VKESCAPE', 'Integer', VKESCAPE);//Esc key + AddConst('VKSPACE', 'Integer', VKSPACE);//Space bar + AddConst('VKPRIOR', 'Integer', VKPRIOR);//Page Up key + AddConst('VKNEXT', 'Integer', VKNEXT);// Page Down key + AddConst('VKEND', 'Integer', VKEND);// End key + AddConst('VKHOME', 'Integer', VKHOME);// Home key + AddConst('VKLEFT', 'Integer', VKLEFT);// Left Arrow key + AddConst('VKUP', 'Integer', VKUP);// Up Arrow key + AddConst('VKRIGHT', 'Integer', VKRIGHT);// Right Arrow key + AddConst('VKDOWN', 'Integer', VKDOWN);// Down Arrow key + AddConst('VKINSERT', 'Integer', VKINSERT);// Insert key + AddConst('VKDELETE', 'Integer', VKDELETE);// Delete key + AddConst('VKHELP', 'Integer', VKHELP);// Help key + AddConst('VKLWIN', 'Integer', VKLWIN);// Left Windows key (Microsoft keyboard) + AddConst('VKRWIN', 'Integer', VKRWIN);// Right Windows key (Microsoft keyboard) + AddConst('VKAPPS', 'Integer', VKAPPS);// Applications key (Microsoft keyboard) + AddConst('VKNUMPAD0', 'Integer', VKNUMPAD0);// 0 key (numeric keypad) + AddConst('VKNUMPAD1', 'Integer', VKNUMPAD1);// 1 key (numeric keypad) + AddConst('VKNUMPAD2', 'Integer', VKNUMPAD2);// 2 key (numeric keypad) + AddConst('VKNUMPAD3', 'Integer', VKNUMPAD3);// 3 key (numeric keypad) + AddConst('VKNUMPAD4', 'Integer', VKNUMPAD4);// 4 key (numeric keypad) + AddConst('VKNUMPAD5', 'Integer', VKNUMPAD5);// 5 key (numeric keypad) + AddConst('VKNUMPAD6', 'Integer', VKNUMPAD6);// 6 key (numeric keypad) + AddConst('VKNUMPAD7', 'Integer', VKNUMPAD7);// 7 key (numeric keypad) + AddConst('VKNUMPAD8', 'Integer', VKNUMPAD8);// 8 key (numeric keypad) + AddConst('VKNUMPAD9', 'Integer', VKNUMPAD9);// 9 key (numeric keypad) + AddConst('VKMULTIPLY', 'Integer', VKMULTIPLY);// Multiply key (numeric keypad) + AddConst('VKADD', 'Integer', VKADD);// Add key (numeric keypad) + AddConst('VKSEPARATOR', 'Integer', VKSEPARATOR);// Separator key (numeric keypad) + AddConst('VKSUBTRACT', 'Integer', VKSUBTRACT);// Subtract key (numeric keypad) + AddConst('VKDECIMAL', 'Integer', VKDECIMAL);// Decimal key (numeric keypad) + AddConst('VKDIVIDE', 'Integer', VKDIVIDE);// Divide key (numeric keypad) + AddConst('VKF1', 'Integer', VKF1);// F1 key + AddConst('VKF2', 'Integer', VKF2);// F2 key + AddConst('VKF3', 'Integer', VKF3);// F3 key + AddConst('VKF4', 'Integer', VKF4);// F4 key + AddConst('VKF5', 'Integer', VKF5);// F5 key + AddConst('VKF6', 'Integer', VKF6);// F6 key + AddConst('VKF7', 'Integer', VKF7);// F7 key + AddConst('VKF8', 'Integer', VKF8);// F8 key + AddConst('VKF9', 'Integer', VKF9);// F9 key + AddConst('VKF10', 'Integer', VKF10);// F10 key + AddConst('VKF11', 'Integer', VKF11);// F11 key + AddConst('VKF12', 'Integer', VKF12);// F12 key + AddConst('VKNUMLOCK', 'Integer', VKNUMLOCK);// Num Lock key + AddConst('VKSCROLL', 'Integer', VKSCROLL);// Scroll Lock key + + AddConst('crDefault', 'Integer', crDefault); + AddConst('crNone', 'Integer', crNone); + AddConst('crArrow', 'Integer', crArrow); + AddConst('crCross', 'Integer', crCross); + AddConst('crIBeam', 'Integer', crIBeam); + AddConst('crSize', 'Integer', crSize); + AddConst('crSizeNESW', 'Integer', crSizeNESW); + AddConst('crSizeNS', 'Integer', crSizeNS); + AddConst('crSizeNWSE', 'Integer', crSizeNWSE); + AddConst('crSizeWE', 'Integer', crSizeWE); + AddConst('crUpArrow', 'Integer', crUpArrow); + AddConst('crHourGlass', 'Integer', crHourGlass); + AddConst('crDrag', 'Integer', crDrag); + AddConst('crNoDrop', 'Integer', crNoDrop); + AddConst('crHSplit', 'Integer', crHSplit); + AddConst('crVSplit', 'Integer', crVSplit); + AddConst('crMultiDrag', 'Integer', crMultiDrag); + AddConst('crSQLWait', 'Integer', crSQLWait); + AddConst('crNo', 'Integer', crNo); + AddConst('crAppStart', 'Integer', crAppStart); + AddConst('crHelp', 'Integer', crHelp); + AddConst('crHandPoint', 'Integer', crHandPoint); + AddConst('crSizeAll', 'Integer', crSizeAll); + + AddType('TFormBorderStyle', fvtInt); + AddType('TBorderStyle', fvtInt); + + AddEnumSet('TShiftState', 'ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand'); + AddEnum('TAniIndicatorStyle', 'aiLinear, aiCircular'); + AddEnum('TAlign', 'alNone, alTop, alBottom, alLeft, alRight, alClient'); + AddEnum('TMouseButton', 'mbLeft, mbRight, mbMiddle'); + AddEnumSet('TAnchors', 'akLeft, akTop, akRight, akBottom'); + AddEnum('TBevelCut', 'bvNone, bvLowered, bvRaised, bvSpace'); + AddEnum('TTextLayout', 'tlTop, tlCenter, tlBottom'); + AddEnum('TEditCharCase', 'ecNormal, ecUpperCase, ecLowerCase'); + AddEnum('TScrollStyle', 'ssNone, ssHorizontal, ssVertical, ssBoth'); + AddEnum('TComboBoxStyle', 'csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable'); + AddEnum('TCheckBoxState', 'cbUnchecked, cbChecked, cbGrayed'); + AddEnum('TListBoxStyle', 'lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable'); + AddEnum('TWindowState', 'wsNormal, wsMinimized, wsMaximized'); + AddEnum('TFormStyle', 'fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop'); + AddEnumSet('TBorderIcons', 'biSystemMenu, biMinimize, biMaximize, biHelp'); + AddEnum('TFormPosition', 'poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter'); + AddEnum('TCloseAction', 'caNone, caHide, caFree, caMinimize'); + + with AddClass(TControl, 'TFmxObject') do + begin + AddMethod('procedure AddObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure RemoveObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure SetBounds(X: Single; Y: Single; AWidth: Single; AHeight: Single)', CallMethod); + AddMethod('function AbsoluteToLocal(P: TfsPointF): TfsPointF', CallMethod); + AddMethod('function LocalToAbsolute(P: TfsPointF): TfsPointF', CallMethod); + AddMethod('function AbsoluteToLocalVector(P: TfsVector): TfsVector', CallMethod); + AddMethod('function LocalToAbsoluteVector(P: TfsVector): TfsVector', CallMethod); + AddMethod('function PointInObject(X: Single; Y: Single): Boolean', CallMethod); + AddMethod('procedure BeginUpdate()', CallMethod); + AddMethod('procedure EndUpdate()', CallMethod); +{$IFNDEF DELPHI18} + AddMethod('procedure ApplyEffect()', CallMethod); +{$ENDIF} + AddMethod('procedure UpdateEffects()', CallMethod); + AddMethod('procedure SetFocus()', CallMethod); + AddMethod('procedure PaintTo(ACanvas: TCanvas; ARect: TFsRectF; AParent: TFmxObject)', CallMethod); + AddMethod('procedure Repaint()', CallMethod); + AddMethod('procedure InvalidateRect(ARect: TfsRectF)', CallMethod); + AddMethod('procedure Lock()', CallMethod); + AddProperty('AbsoluteMatrix', 'TfsMatrix', GetProp, nil); + AddProperty('AbsoluteOpacity', 'Single', GetProp, nil); + AddProperty('AbsoluteWidth', 'Single', GetProp, nil); + AddProperty('AbsoluteHeight', 'Single', GetProp, nil); + AddProperty('AbsoluteScale', 'TfsPointF', GetProp, nil); + AddProperty('AbsoluteEnabled', 'Boolean', GetProp, nil); + AddProperty('HasEffect', 'Boolean', GetProp, nil); + AddProperty('HasDisablePaintEffect', 'Boolean', GetProp, nil); + AddProperty('HasAfterPaintEffect', 'Boolean', GetProp, nil); + AddProperty('ChildrenRect', 'TfsRectF', GetProp, nil); + AddProperty('InvertAbsoluteMatrix', 'TfsMatrix', GetProp, nil); + AddProperty('InPaintTo', 'Boolean', GetProp, nil); + AddProperty('LocalRect', 'TfsRectF', GetProp, nil); + AddProperty('AbsoluteRect', 'TfsRectF', GetProp, nil); + AddProperty('UpdateRect', 'TfsRectF', GetProp, nil); + AddProperty('ParentedRect', 'TfsRectF', GetProp, nil); + AddProperty('ParentedVisible', 'Boolean', GetProp, nil); + AddProperty('ClipRect', 'TfsRectF', GetProp, nil); + AddProperty('Canvas', 'TCanvas', GetProp, nil); + AddProperty('AutoCapture', 'Boolean', GetProp, SetProp); + AddProperty('CanFocus', 'Boolean', GetProp, SetProp); + AddProperty('DisableFocusEffect', 'Boolean', GetProp, SetProp); + AddProperty('TabOrder', 'Integer', GetProp, SetProp); + AddProperty('BoundsRect', 'TfsRectF', GetProp, SetProp); + AddEvent('OnDragEnter', TfsDragDropEvent); + AddEvent('OnDragLeave', TfsNotifyEvent); + AddEvent('OnDragOver', TfsDragOverEvent); + AddEvent('OnDragDrop', TfsDragDropEvent); + AddEvent('OnDragEnd', TfsNotifyEvent); + AddEvent('OnKeyDown', TfsKeyEvent); + AddEvent('OnKeyUp', TfsKeyEvent); + AddEvent('OnClick', TfsNotifyEvent); + AddEvent('OnDblClick', TfsNotifyEvent); + AddEvent('OnCanFocus', TfsCanFocusEvent); + AddEvent('OnEnter', TfsNotifyEvent); + AddEvent('OnExit', TfsNotifyEvent); + AddEvent('OnMouseDown', TfsMouseEvent); + AddEvent('OnMouseMove', TfsMouseMoveEvent); + AddEvent('OnMouseUp', TfsMouseEvent); + AddEvent('OnMouseWheel', TfsMouseWheelEvent); + AddEvent('OnMouseEnter', TfsNotifyEvent); + AddEvent('OnMouseLeave', TfsNotifyEvent); + AddEvent('OnPainting', TfsOnPaintEvent); + AddEvent('OnPaint', TfsOnPaintEvent); + AddEvent('OnResize', TfsNotifyEvent); + AddEvent('OnApplyStyleLookup', TfsNotifyEvent); + end; + + { standard controls } + with AddClass(TStyledControl, 'TControl') do + begin + AddMethod('function FindStyleResource(AStyleLookup: string): TFmxObject', CallMethod); + AddMethod('procedure ApplyStyleLookup()', CallMethod); +{$IFNDEF DELPHI20} + AddMethod('procedure UpdateStyle()', CallMethod); +{$ENDIF} + AddProperty('StyleLookup', 'String', GetProp, SetProp); + end; + + AddClass(TStyledControl, 'TControl'); + AddClass(TTextControl, 'TStyledControl'); + AddClass(TPanel, 'TStyledControl'); + AddClass(TCalloutPanel, 'TPanel'); + AddClass(TLabel, 'TTextControl'); + AddClass(TCustomButton, 'TTextControl'); + AddClass(TButton, 'TCustomButton'); + AddClass(TSpeedButton, 'TCustomButton'); + with AddClass(TCheckBox, 'TTextControl') do + AddEvent('OnChange', TfsNotifyEvent); + + with AddClass(TRadioButton, 'TTextControl') do + AddEvent('OnChange', TfsNotifyEvent); + AddClass(TGroupBox, 'TTextControl'); + AddClass(TStatusBar, 'TStyledControl'); + AddClass(TToolBar, 'TStyledControl'); + AddClass(TSizeGrip, 'TStyledControl'); + AddClass(TSplitter, 'TStyledControl'); + AddClass(TProgressBar, 'TStyledControl'); + AddClass(TThumb, 'TStyledControl'); + with AddClass(TCustomTrack, 'TStyledControl') do + begin + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnTracking', TfsNotifyEvent); + end; + AddClass(TTrack, 'TCustomTrack'); + AddClass(TTrackBar, 'TCustomTrack'); + AddClass(TBitmapTrackBar, 'TTrackBar'); + with AddClass(TSwitch, 'TCustomTrack') do + AddEvent('OnSwitch', TfsNotifyEvent); + with AddClass(TScrollBar, 'TStyledControl') do + AddEvent('OnChange', TfsNotifyEvent); + + AddClass(TSmallScrollBar, 'TScrollBar'); + AddClass(TAniIndicator, 'TStyledControl'); + with AddClass(TArcDial, 'TStyledControl') do + AddEvent('OnChange', TfsNotifyEvent); + AddClass(TExpanderButton, 'TCustomButton'); + with AddClass(TExpander, 'TTextControl') do + AddEvent('OnCheckChange', TfsNotifyEvent); + with AddClass(TImageControl, 'TStyledControl') do + AddEvent('OnChange', TfsNotifyEvent); + AddClass(TPathLabel, 'TStyledControl'); + + + with AddClass(TCustomEdit, 'TStyledControl') do + begin +{$IFNDEF Delphi21} + AddMethod('procedure ClearSelection()', CallMethod); +{$ENDIF} + AddMethod('procedure CopyToClipboard()', CallMethod); + AddMethod('procedure CutToClipboard()', CallMethod); + AddMethod('procedure PasteFromClipboard()', CallMethod); + AddMethod('procedure SelectAll()', CallMethod); +{$IFNDEF Delphi21} + AddMethod('function GetCharX(a: Integer): Single', CallMethod); + AddMethod('function ContentRect(): TfsRectF', CallMethod); +{$ENDIF} + AddProperty('CaretPosition', 'Integer', GetProp, SetProp); + AddProperty('SelStart', 'Integer', GetProp, SetProp); + AddProperty('SelLength', 'Integer', GetProp, SetProp); + AddProperty('SelText', 'string', GetProp, nil); + AddProperty('MaxLength', 'Integer', GetProp, SetProp); + AddProperty('SelectionFill', 'TBrush', GetProp, nil); + AddProperty('FilterChar', 'string', GetProp, SetProp); + AddProperty('Typing', 'Boolean', GetProp, SetProp); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnChangeTracking', TfsNotifyEvent); + AddEvent('OnTyping', TfsNotifyEvent); + end; + AddClass(TEdit, 'TCustomEdit'); + with AddClass(TMemo, 'TScrollBox') do + begin + AddMethod('procedure CopyToClipboard()', CallMethod); + AddMethod('procedure PasteFromClipboard()', CallMethod); + AddMethod('procedure CutToClipboard()', CallMethod); + AddMethod('procedure ClearSelection()', CallMethod); + AddMethod('procedure SelectAll()', CallMethod); + AddMethod('procedure GoToTextEnd()', CallMethod); + AddMethod('procedure GoToTextBegin()', CallMethod); + AddMethod('procedure GotoLineEnd()', CallMethod); + AddMethod('procedure GoToLineBegin()', CallMethod); + AddMethod('procedure UnDo()', CallMethod); + AddProperty('SelStart', 'Integer', GetProp, SetProp); + AddProperty('SelLength', 'Integer', GetProp, SetProp); + AddProperty('SelText', 'string', GetProp, nil); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnChangeTracking', TfsNotifyEvent); + end; + + AddClass(TRadioButton, 'TTextControl'); + with AddClass(TListBoxItem, 'TTextControl') do + begin + AddProperty('Data', 'TObject', GetProp, SetProp); + AddProperty('Index', 'Integer', GetProp, SetProp); + end; + + with AddClass(TCustomListBox, 'TScrollBox') do + begin + AddMethod('procedure Clear()', CallMethod); + AddMethod('function DragChange(SourceItem: TListBoxItem; DestItem: TListBoxItem): Boolean', CallMethod); + AddMethod('procedure SelectAll()', CallMethod); + AddMethod('procedure ClearSelection()', CallMethod); + AddMethod('procedure SelectRange(Item1: TListBoxItem; Item2: TListBoxItem)', CallMethod); + AddMethod('function ItemByPoint(X: Single; Y: Single): TListBoxItem', CallMethod); + AddMethod('function ItemByIndex(Idx: Integer): TListBoxItem', CallMethod); + AddMethod('procedure Exchange(Item1: TListBoxItem; Item2: TListBoxItem)', CallMethod); + AddMethod('procedure AddObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure InsertObject(Index: Integer; AObject: TFmxObject)', CallMethod); + AddMethod('procedure RemoveObject(AObject: TFmxObject)', CallMethod); + AddIndexProperty( 'ListItems', 'Integer', 'TListBoxItem', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('Selected', 'TListBoxItem', GetProp, nil); + AddProperty('Items', 'TStrings', GetProp, SetProp); + AddProperty('ItemIndex', 'Integer', GetProp, SetProp); + end; + + AddClass(TListBox, 'TCustomListBox'); + with AddClass(TCustomComboBox, 'TStyledControl') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure DropDown', CallMethod); + AddIndexProperty( 'ListItems', 'Integer', 'TListBoxItem', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('Selected', 'TListBoxItem', GetProp, nil); + AddProperty('Items', 'TStrings', GetProp, SetProp); + AddProperty('ItemIndex', 'Integer', GetProp, SetProp); + AddEvent('OnDropDown', TfsNotifyEvent); + AddEvent('OnCloseUp', TfsNotifyEvent); + end; + + with AddClass(TComboBox, 'TCustomComboBox') do + AddEvent('OnChange', TfsNotifyEvent); + + with AddClass(TCommonCustomForm, 'TFmxObject') do + begin + AddConstructor('constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0)', CallMethod); + AddMethod('procedure SetBounds(ALeft: Integer; ATop: Integer; AWidth: Integer; AHeight: Integer)', CallMethod); + AddMethod('function ClientToScreen(Point: TfsPointF): TfsPointF', CallMethod); + AddMethod('function ScreenToClient(Point: TfsPointF): TfsPointF', CallMethod); + AddMethod('function CloseQuery(): Boolean', CallMethod); + AddMethod('function ClientRect(): TfsRectF', CallMethod); + AddMethod('procedure Release()', CallMethod); + AddMethod('procedure Close()', CallMethod); + AddMethod('procedure Show()', CallMethod); + AddMethod('procedure Hide()', CallMethod); + AddMethod('function ShowModal(): Integer', CallMethod); + AddMethod('procedure CloseModal()', CallMethod); + AddMethod('procedure Invalidate()', CallMethod); + AddMethod('procedure BeginUpdate()', CallMethod); + AddMethod('procedure EndUpdate()', CallMethod); + end; + + with AddClass(TCustomForm, 'TCommonCustomForm') do + begin + AddEvent('OnActivate', TfsNotifyEvent); + AddEvent('OnClose', TfsCloseEvent); + AddEvent('OnCloseQuery', TfsCloseQueryEvent); + AddEvent('OnCreate', TfsNotifyEvent); + AddEvent('OnDestroy', TfsNotifyEvent); + AddEvent('OnDeactivate', TfsNotifyEvent); + AddEvent('OnHide', TfsNotifyEvent); + AddEvent('OnPaint', TfsNotifyEvent); + AddEvent('OnShow', TfsNotifyEvent); + AddEvent('OnResize', TfsNotifyEvent); + AddProperty('Canvas', 'TCanvas', GetProp, nil); + AddProperty('ModalResult', 'Integer', GetProp, SetProp); + end; + AddClass(TForm, 'TCustomForm'); + + AddClass(TDataModule, 'TComponent'); + with AddClass(TApplication, 'TComponent') do + begin + AddMethod('procedure ProcessMessages', CallMethod); + end; + AddObject('Application', Application); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + Form: TCommonCustomForm; +begin + Result := 0; + + if ClassType = TControl then + begin + if MethodName = 'ADDOBJECT' then + TControl(Instance).AddObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'REMOVEOBJECT' then + TControl(Instance).RemoveObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'SETBOUNDS' then + TControl(Instance).SetBounds(Single(Caller.Params[0]), Single(Caller.Params[1]), Single(Caller.Params[2]), Single(Caller.Params[3])) + else if MethodName = 'ABSOLUTETOLOCAL' then + Result := frxInteger(TfsPointF.Create(TControl(Instance).AbsoluteToLocal(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'LOCALTOABSOLUTE' then + Result := frxInteger(TfsPointF.Create(TControl(Instance).LocalToAbsolute(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'ABSOLUTETOLOCALVECTOR' then + Result := frxInteger(TfsVector.Create(TControl(Instance).AbsoluteToLocalVector(TfsVector(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'LOCALTOABSOLUTEVECTOR' then + Result := frxInteger(TfsVector.Create(TControl(Instance).LocalToAbsoluteVector(TfsVector(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'POINTINOBJECT' then + Result := Boolean(TControl(Instance).PointInObject(Single(Caller.Params[0]), Single(Caller.Params[1]))) + else if MethodName = 'BEGINUPDATE' then + TControl(Instance).BeginUpdate() + else if MethodName = 'ENDUPDATE' then + TControl(Instance).EndUpdate() +{$IFNDEF DELPHI18} + else if MethodName = 'APPLYEFFECT' then + TControl(Instance).ApplyEffect() +{$ENDIF} + else if MethodName = 'UPDATEEFFECTS' then + TControl(Instance).UpdateEffects() + else if MethodName = 'SETFOCUS' then + TControl(Instance).SetFocus() + else if MethodName = 'PAINTTO' then + TControl(Instance).PaintTo(TCanvas(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, TFmxObject(frxInteger(Caller.Params[2]))) + else if MethodName = 'REPAINT' then + TControl(Instance).Repaint() + else if MethodName = 'INVALIDATERECT' then + TControl(Instance).InvalidateRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect) + else if MethodName = 'LOCK' then + TControl(Instance).Lock() + end + else if ClassType = TStyledControl then + begin + if MethodName = 'FINDSTYLERESOURCE' then + Result := frxInteger(TStyledControl(Instance).FindStyleResource(String(Caller.Params[0]))) + else if MethodName = 'APPLYSTYLELOOKUP' then + TStyledControl(Instance).ApplyStyleLookup() +{$IFNDEF DELPHI20} + else if MethodName = 'UPDATESTYLE' then + TStyledControl(Instance).UpdateStyle() +{$ENDIF} + end + else if ClassType = TCustomEdit then + begin + {$IFNDEF Delphi21} + if MethodName = 'CLEARSELECTION' then + TCustomEdit(Instance).ClearSelection() + else +{$ENDIF} + if MethodName = 'COPYTOCLIPBOARD' then + TCustomEdit(Instance).CopyToClipboard() + else if MethodName = 'CUTTOCLIPBOARD' then + TCustomEdit(Instance).CutToClipboard() + else if MethodName = 'PASTEFROMCLIPBOARD' then + TCustomEdit(Instance).PasteFromClipboard() + else if MethodName = 'SELECTALL' then + TCustomEdit(Instance).SelectAll() +{$IFNDEF Delphi21} + else if MethodName = 'GETCHARX' then + Result := Single(TCustomEdit(Instance).GetCharX(Integer(Caller.Params[0]))) + else if MethodName = 'CONTENTRECT' then + Result := frxInteger(TfsRectF.Create(TCustomEdit(Instance).ContentRect())) +{$ENDIF} + end + else if ClassType = TMemo then + begin + if MethodName = 'COPYTOCLIPBOARD' then + TMemo(Instance).CopyToClipboard() + else if MethodName = 'PASTEFROMCLIPBOARD' then + TMemo(Instance).PasteFromClipboard() + else if MethodName = 'CUTTOCLIPBOARD' then + TMemo(Instance).CutToClipboard() + else if MethodName = 'CLEARSELECTION' then + TMemo(Instance).ClearSelection() + else if MethodName = 'SELECTALL' then + TMemo(Instance).SelectAll() + else if MethodName = 'GOTOTEXTEND' then + TMemo(Instance).GoToTextEnd() + else if MethodName = 'GOTOTEXTBEGIN' then + TMemo(Instance).GoToTextBegin() + else if MethodName = 'GOTOLINEEND' then + TMemo(Instance).GotoLineEnd() + else if MethodName = 'GOTOLINEBEGIN' then + TMemo(Instance).GoToLineBegin() + else if MethodName = 'UNDO' then + TMemo(Instance).UnDo() + end + else if ClassType = TCustomListBox then + begin + if MethodName = 'ASSIGN' then + TCustomListBox(Instance).Assign(TPersistent(frxInteger(Caller.Params[0]))) + else if MethodName = 'CLEAR' then + TCustomListBox(Instance).Clear() + else if MethodName = 'DRAGCHANGE' then + Result := TCustomListBox(Instance).DragChange(TListBoxItem(frxInteger(Caller.Params[0])), TListBoxItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'SELECTALL' then + TCustomListBox(Instance).SelectAll() + else if MethodName = 'CLEARSELECTION' then + TCustomListBox(Instance).ClearSelection() + else if MethodName = 'SELECTRANGE' then + TCustomListBox(Instance).SelectRange(TListBoxItem(frxInteger(Caller.Params[0])), TListBoxItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'ITEMBYPOINT' then + Result := frxInteger(TListBoxItem(TCustomListBox(Instance).ItemByPoint(Single(Caller.Params[0]), Single(Caller.Params[1])))) + else if MethodName = 'ITEMBYINDEX' then + Result := frxInteger(TListBoxItem(TCustomListBox(Instance).ItemByIndex(Integer(Caller.Params[0])))) + else if MethodName = 'EXCHANGE' then + TCustomListBox(Instance).Exchange(TListBoxItem(frxInteger(Caller.Params[0])), TListBoxItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'ADDOBJECT' then + TCustomListBox(Instance).AddObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'INSERTOBJECT' then + TCustomListBox(Instance).InsertObject(Integer(Caller.Params[0]), TFmxObject(frxInteger(Caller.Params[1]))) + else if MethodName = 'REMOVEOBJECT' then + TCustomListBox(Instance).RemoveObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'LISTITEMS.GET' then + Result := frxInteger(TCustomListBox(Instance).ListItems[Caller.Params[0]]) + end + else if ClassType = TCustomComboBox then + begin + if MethodName = 'CLEAR' then + TCustomComboBox(Instance).Clear() + else if MethodName = 'DROPDOWN' then + TCustomComboBox(Instance).DropDown() + else if MethodName = 'LISTITEMS.GET' then + Result := frxInteger(TCustomComboBox(Instance).ListItems[Caller.Params[0]]) + end + else if ClassType = TCommonCustomForm then + begin + Form := TCommonCustomForm(Instance); + if MethodName = 'CREATENEW' then + Result := frxInteger(Form.CreateNew(TComponent(frxInteger(Caller.Params[0])), Integer(Caller.Params[1]))) + else if MethodName = 'SETBOUNDS' then + Form.SetBounds(Integer(Caller.Params[0]), Integer(Caller.Params[1]), Integer(Caller.Params[2]), Integer(Caller.Params[3])) + else if MethodName = 'CLIENTTOSCREEN' then + Result := frxInteger(TfsPointF.Create(Form.ClientToScreen(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'SCREENTOCLIENT' then + Result := frxInteger(TfsPointF.Create(Form.ScreenToClient(TfsPointF(frxInteger(Caller.Params[0])).GetRect))) + else if MethodName = 'CLOSEQUERY' then + Result := Form.CloseQuery + else if MethodName = 'CLIENTRECT' then + Result := frxInteger(TfsRectF.Create(Form.ClientRect)) + else if MethodName = 'RELEASE' then + Form.Release() + else if MethodName = 'CLOSE' then + Form.Close() + else if MethodName = 'SHOW' then + Form.Show() + else if MethodName = 'HIDE' then + Form.Hide() + else if MethodName = 'SHOWMODAL' then + Result := Integer(Form.ShowModal) + else if MethodName = 'CLOSEMODAL' then + Form.CloseModal() + else if MethodName = 'INVALIDATE' then + Form.Invalidate() + else if MethodName = 'BEGINUPDATE' then + Form.BeginUpdate() + else if MethodName = 'ENDUPDATE' then + Form.EndUpdate() + end + else if ClassType = TApplication then + begin + if MethodName = 'PROCESSMESSAGES' then + TApplication(Instance).ProcessMessages + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TControl then + begin + if PropName = 'ABSOLUTEMATRIX' then + Result := frxInteger(TfsMatrix.Create(TControl(Instance).AbsoluteMatrix)) + else if PropName = 'ABSOLUTEOPACITY' then + Result := TControl(Instance).AbsoluteOpacity + else if PropName = 'ABSOLUTEWIDTH' then + Result := TControl(Instance).AbsoluteWidth + else if PropName = 'ABSOLUTEHEIGHT' then + Result := TControl(Instance).AbsoluteHeight + else if PropName = 'ABSOLUTESCALE' then + Result := frxInteger(TfsPointF.Create(TControl(Instance).AbsoluteScale)) + else if PropName = 'ABSOLUTEENABLED' then + Result := TControl(Instance).AbsoluteEnabled + else if PropName = 'HASEFFECT' then + Result := TControl(Instance).HasEffect + else if PropName = 'HASDISABLEPAINTEFFECT' then + Result := TControl(Instance).HasDisablePaintEffect + else if PropName = 'HASAFTERPAINTEFFECT' then + Result := TControl(Instance).HasAfterPaintEffect + else if PropName = 'CHILDRENRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).ChildrenRect)) + else if PropName = 'INVERTABSOLUTEMATRIX' then + Result := frxInteger(TfsMatrix.Create(TControl(Instance).InvertAbsoluteMatrix)) + else if PropName = 'INPAINTTO' then + Result := TControl(Instance).InPaintTo + else if PropName = 'LOCALRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).LocalRect)) + else if PropName = 'ABSOLUTERECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).AbsoluteRect)) + else if PropName = 'UPDATERECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).UpdateRect)) + else if PropName = 'PARENTEDRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).ParentedRect)) + else if PropName = 'PARENTEDVISIBLE' then + Result := TControl(Instance).ParentedVisible + else if PropName = 'CLIPRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).ClipRect)) + else if PropName = 'CANVAS' then + Result := frxInteger(TControl(Instance).Canvas) + else if PropName = 'AUTOCAPTURE' then + Result := TControl(Instance).AutoCapture + else if PropName = 'CANFOCUS' then + Result := TControl(Instance).CanFocus + else if PropName = 'DISABLEFOCUSEFFECT' then + Result := TControl(Instance).DisableFocusEffect + else if PropName = 'TABORDER' then + Result := Integer(TControl(Instance).TabOrder) + else if PropName = 'BOUNDSRECT' then + Result := frxInteger(TfsRectF.Create(TControl(Instance).BoundsRect)) + end + else if ClassType = TStyledControl then + begin + if PropName = 'STYLELOOKUP' then + Result := TStyledControl(Instance).StyleLookup + end + else if ClassType = TCustomEdit then + begin + if PropName = 'CARETPOSITION' then + Result := TCustomEdit(Instance).CaretPosition + else if PropName = 'SELSTART' then + Result := TCustomEdit(Instance).SelStart + else if PropName = 'SELLENGTH' then + Result := TCustomEdit(Instance).SelLength + else if PropName = 'SELTEXT' then + Result := String(TCustomEdit(Instance).SelText) + else if PropName = 'MAXLENGTH' then + Result := TCustomEdit(Instance).MaxLength + else if PropName = 'SELECTIONFILL' then + Result := frxInteger(TCustomEdit(Instance).SelectionFill) + else if PropName = 'FILTERCHAR' then + Result := TCustomEdit(Instance).FilterChar + else if PropName = 'TYPING' then + Result := TCustomEdit(Instance).Typing + end + else if ClassType = TMemo then + begin + if PropName = 'SELSTART' then + Result := TMemo(Instance).SelStart + else if PropName = 'SELLENGTH' then + Result := TMemo(Instance).SelLength + else if PropName = 'SELTEXT' then + Result := String(TMemo(Instance).SelText) + end + else if ClassType = TListBoxItem then + begin + if PropName = 'DATA' then + Result := frxInteger(TListBoxItem(Instance).Data) + else if PropName = 'INDEX' then + Result := TListBoxItem(Instance).Index + end + else if ClassType = TCustomListBox then + begin + if PropName = 'COUNT' then + Result := TCustomListBox(Instance).Count + else if PropName = 'SELECTED' then + Result := frxInteger(TCustomListBox(Instance).Selected) + else if PropName = 'ITEMS' then + Result := frxInteger(TCustomListBox(Instance).Items) + else if PropName = 'ITEMINDEX' then + Result := TCustomListBox(Instance).ItemIndex + end + else if ClassType = TCustomComboBox then + begin + if PropName = 'COUNT' then + Result := TCustomComboBox(Instance).Count + else if PropName = 'SELECTED' then + Result := frxInteger(TCustomComboBox(Instance).Selected) + else if PropName = 'ITEMS' then + Result := frxInteger(TCustomComboBox(Instance).Items) + else if PropName = 'ITEMINDEX' then + Result := TCustomComboBox(Instance).ItemIndex + end + else if ClassType = TCustomForm then + begin + if PropName = 'MODALRESULT' then + Result := TCustomForm(Instance).ModalResult + else if PropName = 'CANVAS' then + Result := frxInteger(TCustomForm(Instance).Canvas) + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TControl then + begin + if PropName = 'AUTOCAPTURE' then + TControl(Instance).AutoCapture := Boolean(Value) + else if PropName = 'CANFOCUS' then + TControl(Instance).CanFocus := Boolean(Value) + else if PropName = 'DISABLEFOCUSEFFECT' then + TControl(Instance).DisableFocusEffect := Boolean(Value) + else if PropName = 'TABORDER' then + TControl(Instance).TabOrder := TTabOrder(Integer(Value)) + else if PropName = 'BOUNDSRECT' then + TControl(Instance).BoundsRect := TfsRectF(frxInteger(Value)).GetRect + end + else if ClassType = TStyledControl then + begin + if PropName = 'STYLELOOKUP' then + TStyledControl(Instance).StyleLookup := Value; + end + else if ClassType = TCustomEdit then + begin + if PropName = 'CARETPOSITION' then + TCustomEdit(Instance).CaretPosition := Integer(Value) + else if PropName = 'SELSTART' then + TCustomEdit(Instance).SelStart := Integer(Value) + else if PropName = 'SELLENGTH' then + TCustomEdit(Instance).SelLength := Integer(Value) + else if PropName = 'MAXLENGTH' then + TCustomEdit(Instance).MaxLength := Integer(Value) + else if PropName = 'FILTERCHAR' then + TCustomEdit(Instance).FilterChar := String(Value) + else if PropName = 'TYPING' then + TCustomEdit(Instance).Typing := Boolean(Value) + end + else if ClassType = TMemo then + begin + if PropName = 'SELSTART' then + TMemo(Instance).SelStart := Integer(Value) + else if PropName = 'SELLENGTH' then + TMemo(Instance).SelLength := Integer(Value) + end + else if ClassType = TListBoxItem then + begin + if PropName = 'DATA' then + TListBoxItem(Instance).Data := TObject(frxInteger(Value)) + else if PropName = 'INDEX' then + TListBoxItem(Instance).Index := Value + end + else if ClassType = TCustomListBox then + begin + if PropName = 'ITEMS' then + TCustomListBox(Instance).Items := TStrings(frxInteger(Value)) + else if PropName = 'ITEMINDEX' then + TCustomListBox(Instance).ItemIndex := Value + end + else if ClassType = TCustomComboBox then + begin + if PropName = 'ITEMS' then + TCustomComboBox(Instance).Items := TStrings(frxInteger(Value)) + else if PropName = 'ITEMINDEX' then + TCustomComboBox(Instance).ItemIndex := Value + end + else if ClassType = TCustomForm then + begin + if PropName = 'MODALRESULT' then + TCustomForm(Instance).ModalResult := Value + end +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsFormsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_igraphicsrtti.pas b/FastScript/FMX/FMX.fs_igraphicsrtti.pas new file mode 100644 index 0000000..ec1c1a3 --- /dev/null +++ b/FastScript/FMX/FMX.fs_igraphicsrtti.pas @@ -0,0 +1,522 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_igraphicsrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_iclassesrtti +, FMX.Types, FMX.Objects, System.UITypes, System.UIConsts, System.Types, System.Variants +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI20} + , System.Math.Vectors +{$ENDIF} +{$IFDEF DELPHI29} + , FMX.BaseTypeAliases +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsGraphicsRTTI = class(TComponent); // fake component + + +implementation + +type + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + procedure GetColorProc(const Name: String); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + GetAlphaColorValues(GetColorProc); + AddType('TAlignment', fvtInt); + AddType('TLeftRight', fvtInt); + AddConst('taLeftJustify', 'Integer', taLeftJustify); + AddConst('taRightJustify', 'Integer', taRightJustify); + AddConst('taCenter', 'Integer', taCenter); + AddType('TVerticalAlignment', fvtInt); + AddConst('taAlignTop', 'Integer', taAlignTop); + AddConst('taAlignBottom', 'Integer', taAlignBottom); + AddConst('taVerticalCenter', 'Integer', taVerticalCenter); + //AddEnum('TAlignment', 'taLeftJustify, taRightJustify, taCenter'); + AddType('TCorners ', fvtInt); + AddConst('crTopLeft', 'Integer', TCorner.crTopLeft); + AddConst('crTopRight', 'Integer', TCorner.crTopRight); + AddConst('crBottomLeft', 'Integer', TCorner.crBottomLeft); + AddConst('crBottomRight', 'Integer', TCorner.crBottomRight); + AddType('TSides ', fvtInt); + AddConst('sdTop', 'Integer', TSide.sdTop); + AddConst('sdLeft', 'Integer', TSide.sdLeft); + AddConst('sdBottom', 'Integer', TSide.sdBottom); + AddConst('sdRight', 'Integer', TSide.sdRight); + AddConst('ftRightToLeft', 'Integer', TFillTextFlag.ftRightToLeft); + AddType('TFillTextFlags ', fvtInt); + AddEnumSet('TFontStyles', 'fsBold, fsItalic, fsUnderline, fsStrikeout'); + AddEnum('TFontPitch', 'fpDefault, fpVariable, fpFixed'); + AddEnum('TFontQuality', 'fqDefault, fqDraft, fqProof, fqNonAntialiased, fqAntialiased, fqClearType, fqClearTypeNatural'); + AddEnum('TGradientStyle', 'gsLinear, gsRadial'); + AddEnum('TWrapMode', 'wmTile, wmTileOriginal, wmTileStretch'); + AddEnum('TCornerType', 'ctRound, ctBevel, ctInnerRound, ctInnerLine'); + AddEnum('TAlignLayout', 'alNone, alTop, alLeft, alRight, alBottom, alMostTop, alMostBottom, alMostLeft, alMostRight, alClient, alContents, alCenter, alVertCenter, alHorzCenter, alHorizontal, alVertical, alScale, alFit, alFitLeft, alFitRight'); + AddEnum('TPathPointKind', 'ppMoveTo, ppLineTo, ppCurveTo, ppClose'); + AddEnum('TStrokeCap', 'scFlat, scRound'); + AddEnum('TStrokeJoin', 'sjMiter, sjRound, sjBevel'); + AddEnum('TStrokeDash', 'sdSolid, sdDash, sdDot, sdDashDot, sdDashDotDot, sdCustom'); + + AddEnum('TBrushKind', 'bkNone, bkSolid, bkGradient, bkBitmap, bkResource, bkGrab'); + + AddClass(TfsMatrix, 'TPersistent'); + with AddClass(TFont, 'TPersistent') do + AddConstructor('constructor Create', CallMethod); + AddClass(TGradientPoint, 'TCollectionItem'); + AddClass(TGradientPoints, 'TCollection'); + AddClass(TGradient, 'TPersistent'); + AddClass(TBrushBitmap, 'TPersistent'); + AddClass(TBrushResource, 'TPersistent'); +{$IFNDEF Delphi18} + AddClass(TBrushGrab, 'TPersistent'); +{$ENDIF} + AddClass(TLineMetricInfo, 'TObject'); + + with AddClass(TBrush, 'TPersistent') do + begin + AddConstructor('Create(ADefaultKind: TBrushKind; ADefaultColor: TAlphaColor)', CallMethod); + AddProperty('DefaultColor', 'TAlphaColor', GetProp); + AddProperty('DefaultKind', 'TBrushKind', GetProp); + end; +{$IFDEF Delphi17} + AddClass(TStrokeBrush, 'TBrush'); +{$ENDIF} + + AddClass(TCanvasSaveState, 'TPersistent'); + with AddClass(TCanvas, 'TPersistent') do + begin + AddMethod('function BeginScene: Boolean', CallMethod); + AddMethod('procedure EndScene', CallMethod); + AddMethod('procedure Clear(Color: TAlphaColor)', CallMethod); + AddMethod('procedure ClearRect(ARect: TfsRectF; AColor: TAlphaColor = 0)', CallMethod); + AddMethod('procedure SetMatrix(const M: TfsMatrix)', CallMethod); +{$IFDEF Delphi17} + AddMethod('procedure MultiplyMatrix(const M: TfsMatrix)', CallMethod); +{$ELSE} + AddMethod('procedure MultyMatrix(const M: TfsMatrix)', CallMethod); +{$ENDIF} + AddMethod('function SaveState: TCanvasSaveState', CallMethod); + AddMethod('procedure RestoreState(State: TCanvasSaveState)', CallMethod); + AddMethod('procedure SetClipRects(ARects: array of TfsRectF)', CallMethod); + AddMethod('procedure IntersectClipRect(ARect: TfsRectF)', CallMethod); + AddMethod('procedure ExcludeClipRect(ARect: TfsRectF)', CallMethod); + AddMethod('procedure ResetClipRect', CallMethod); + AddMethod('procedure DrawLine(APt1: TfsPointF; APt2: TfsPointF; AOpacity: Single)', CallMethod); + AddMethod('procedure FillRect(ARect: TfsRectF; XRadius: Single; YRadius: Single; ACorners: TCorners; AOpacity: Single; ACornerType: TCornerType)', CallMethod); + AddMethod('procedure DrawRect(ARect: TfsRectF; XRadius: Single; YRadius: Single; ACorners: TCorners; AOpacity: Single; ACornerType: TCornerType)', CallMethod); + AddMethod('procedure FillEllipse(ARect: TfsRectF; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawEllipse(ARect: TfsRectF; AOpacity: Single)', CallMethod); + AddMethod('procedure FillArc(Center: TfsPointF; Radius: TfsPointF; StartAngle: Single; SweepAngle: Single; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawArc(Center: TfsPointF; Radius: TfsPointF; StartAngle: Single; SweepAngle: Single; AOpacity: Single)', CallMethod); + AddMethod('function PtInPath(APoint: TfsPointF; APath: TPathData): Boolean', CallMethod); + AddMethod('procedure FillPath(APath: TPathData; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawPath(APath: TPathData; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawBitmap(ABitmap: TBitmap; SrcRect: TfsRectF; DstRect: TfsRectF; AOpacity: Single; HighSpeed: Boolean)', CallMethod); + AddMethod('procedure DrawRectSides(ARect: TfsRectF; XRadius: Single; YRadius: Single; ACorners: TCorners; AOpacity: Single; ASides: TSides; ACornerType: TCornerType)', CallMethod); + AddMethod('procedure FillPolygon(Points: TPolygon; AOpacity: Single)', CallMethod); + AddMethod('procedure DrawPolygon(Points: TPolygon; AOpacity: Single)', CallMethod); + AddMethod('function LoadFontFromStream(AStream: TStream): Boolean', CallMethod); + AddMethod('procedure FillText(ARect: TfsRectF; AText: string; WordWrap: Boolean; AOpacity: Single; Flags: TFillTextFlags; ATextAlign: TTextAlign; AVTextAlign: TTextAlign)', CallMethod); + AddMethod('procedure MeasureText(var ARect: TfsRectF; AText: string; WordWrap: Boolean; Flags: TFillTextFlags; ATextAlign: TTextAlign; AVTextAlign: TTextAlign)', CallMethod); + AddMethod('procedure MeasureLines(ALines: TLineMetricInfo; ARect: TfsRectF; AText: string; WordWrap: Boolean; Flags: TFillTextFlags; ATextAlign: TTextAlign; AVTextAlign: TTextAlign)', CallMethod); + AddMethod('function TextToPath(Path: TPathData; ARect: TfsRectF; AText: string; WordWrap: Boolean; ATextAlign: TTextAlign; AVTextAlign: TTextAlign): Boolean', CallMethod); + AddMethod('function TextWidth(AText: string): Single', CallMethod); + AddMethod('function TextHeight(AText: string): Single', CallMethod); + AddMethod('procedure SetCustomDash(Dash: array; Offset: Single)', CallMethod); +{$IFDEF Delphi17} + AddProperty('Stroke', 'TStrokeBrush', GetProp); + AddProperty('StrokeCap', 'TStrokeCap', nil, SetProp); + AddProperty('StrokeDash', 'TStrokeDash', nil, SetProp); + AddProperty('StrokeJoin', 'TStrokeJoin', nil, SetProp); +{$ELSE} + AddProperty('Stroke', 'TBrush', GetProp); + AddProperty('StrokeCap', 'TStrokeCap', GetProp, SetProp); + AddProperty('StrokeDash', 'TStrokeDash', GetProp, SetProp); + AddProperty('StrokeJoin', 'TStrokeJoin', GetProp, SetProp); +{$ENDIF} + AddProperty('StrokeThickness', 'Single', GetProp, SetProp); + AddProperty('Fill', 'TBrush', GetProp, SetProp); + AddProperty('Font', 'TFont', GetProp); + AddProperty('Matrix', 'TfsMatrix', GetProp); + AddProperty('Width', 'Integer', GetProp); + AddProperty('Height', 'Integer', GetProp); + end; + with AddClass(TBitmap, 'TPersistent') do + begin + AddConstructor('constructor Create(AWidth, AHeight: Integer)', CallMethod); + AddConstructor('constructor CreateFromStream(AStream: TStream)', CallMethod); + AddConstructor('constructor CreateFromFile(AFileName: string)', CallMethod); + AddMethod('procedure SetSize(AWidth, AHeight: Integer)', CallMethod); + AddMethod('procedure Clear(AColor: TAlphaColor)', CallMethod); + AddMethod('procedure ClearRect(ARect: TfsRectF; AColor: TAlphaColor = 0)', CallMethod); + AddMethod('function IsEmpty: Boolean', CallMethod); + AddMethod('procedure Rotate(Angle: Single)', CallMethod); + AddMethod('procedure FlipHorizontal', CallMethod); + AddMethod('procedure FlipVertical', CallMethod); + AddMethod('procedure InvertAlpha', CallMethod); +{$IFNDEF DELPHI20} + AddMethod('procedure LoadFromFile(AFileName: string; Rotate: Single = 0)', CallMethod); +{$ELSE} + AddMethod('procedure LoadFromFile(AFileName: string)', CallMethod); +{$ENDIF} + AddMethod('procedure SaveToFile(AFileName: string)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); +{$IFNDEF Delphi17} + AddMethod('procedure BitmapChanged', CallMethod); + AddIndexProperty( 'Pixels', 'Integer, Integer', 'TAlphaColor', CallMethod); +{$ENDIF} + AddProperty('Canvas', 'TCanvas', GetProp); +{$IFNDEF Delphi21} + AddProperty('ResourceBitmap', 'TBitmap', GetProp); +{$ENDIF} + AddProperty('Width', 'Integer', GetProp, SetProp); + AddProperty('Height', 'Integer', GetProp, SetProp); + end; + AddClass(TSpline, 'TObject'); + AddClass(TBounds, 'TPersistent'); + AddClass(TTransform, 'TPersistent'); + + + +{$IFNDEF Delphi17} + AddClass(TBitmapCodec, 'TPersistent'); +{$ENDIF} + AddClass(TPathData, 'TPersistent'); + AddClass(TCanvasSaveState, 'TPersistent'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + _Canvas: TCanvas; + _Bitmap: TBitmap; +// mRects: array of TRectF; + mDashs: array of Single; + mPoly: TPolygon; + Idx, Cnt, nLo: Integer; +begin + Result := 0; + + if ClassType = TFont then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TFont(Instance).Create); + end + else if ClassType = TBitmap then + begin + _Bitmap := TBitmap(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(TBitmap(Instance).Create(Caller.Params[0], Caller.Params[1])) + else if MethodName = 'CREATEFROMSTREAM' then + Result := frxInteger(_Bitmap.CreateFromStream(TStream(frxInteger(Caller.Params[0])))) + else if MethodName = 'CREATEFROMFILE' then + Result := frxInteger(_Bitmap.CreateFromFile(String(Caller.Params[0]))) + else if MethodName = 'SETSIZE' then + _Bitmap.SetSize(Integer(Caller.Params[0]), Integer(Caller.Params[1])) + else if MethodName = 'CLEAR' then + _Bitmap.Clear(TAlphaColor(Caller.Params[0])) + else if MethodName = 'CLEARRECT' then + begin + _Bitmap.ClearRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, TAlphaColor(Caller.Params[1])); + end + else if MethodName = 'ISEMPTY' then + Result := _Bitmap.IsEmpty + else if MethodName = 'ROTATE' then + _Bitmap.Rotate(Single(Caller.Params[1])) + else if MethodName = 'FLIPHORIZONTAL' then + _Bitmap.FlipHorizontal + else if MethodName = 'FLIPVERTICAL' then + _Bitmap.FlipVertical + else if MethodName = 'INVERTALPHA' then + _Bitmap.InvertAlpha + else if MethodName = 'LOADFROMFILE' then +{$IFNDEF DELPHI20} + _Bitmap.LoadFromFile(String(Caller.Params[0]), Single(Caller.Params[1])) +{$ELSE} + _Bitmap.LoadFromFile(String(Caller.Params[0])) +{$ENDIF} + else if MethodName = 'SAVETOFILE' then + _Bitmap.SaveToFile(String(Caller.Params[0])) + else if MethodName = 'LOADFROMSTREAM' then + _Bitmap.LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOSTREAM' then + _Bitmap.SaveToStream(TStream(frxInteger(Caller.Params[0]))) +{$IFNDEF Delphi17} + else if MethodName = 'BITMAPCHANGED' then + _Bitmap.BitmapChanged + else if MethodName = 'PIXELS.GET' then + Result := _Bitmap.Pixels[Caller.Params[0], Caller.Params[1]] + else if MethodName = 'PIXELS.SET' then + _Bitmap.Pixels[Caller.Params[0], Caller.Params[1]] := Caller.Params[2] +{$ENDIF} + end + else if ClassType = TBrush then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TBrush(Instance).Create(TBrushKind(frxInteger(Caller.Params[0])), + TAlphaColor(frxInteger(Caller.Params[0])))) + end + else if ClassType = TCanvas then + begin + _Canvas := TCanvas(Instance); + + if MethodName = 'BEGINSCENE' then + Result := _Canvas.BeginScene + else if MethodName = 'ENDSCENE' then + _Canvas.EndScene + else if MethodName = 'CLEAR' then + _Canvas.Clear(TAlphaColor(Caller.Params[0])) + else if MethodName = 'CLEARRECT' then + _Canvas.ClearRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, TAlphaColor(Caller.Params[1])) + else if MethodName = 'SETMATRIX' then + _Canvas.SetMatrix(TfsMatrix(frxInteger(Caller.Params[0])).GetRect) +{$IFDEF Delphi17} + else if MethodName = 'MULTIPLYMATRIX' then + _Canvas.MultiplyMatrix(TfsMatrix(frxInteger(Caller.Params[0])).GetRect) +{$ELSE} + else if MethodName = 'MULTYMATRIX' then + _Canvas.MultyMatrix(TfsMatrix(frxInteger(Caller.Params[0])).GetRect) +{$ENDIF} + else if MethodName = 'SAVESTATE' then + Result := frxInteger(_Canvas.SaveState) + else if MethodName = 'RESTORESTATE' then + _Canvas.RestoreState(TCanvasSaveState(frxInteger(Caller.Params[0]))) + { else if MethodName = 'SETCLIPRECTS' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mRects, Cnt); + for Idx := 0 to Cnt - 1 do + mRects[Idx] := TfsRectF(frxInteger(Caller.Params[0][Idx + nLo])).GetRectP^; + _Canvas.SetClipRects(mRects); + SetLength(mRects, 0); + end } + else if MethodName = 'EXCLUDECLIPRECT' then + _Canvas.ExcludeClipRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect) + else if MethodName = 'INTERSECTCLIPTRECT' then + _Canvas.IntersectClipRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect) + {else if MethodName = 'RESETCLIPRECT' then + _Canvas.ResetClipRect } + else if MethodName = 'DRAWLINE' then + _Canvas.DrawLine(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TfsPointF(frxInteger(Caller.Params[1])).GetRect, Single(Caller.Params[2])) + else if MethodName = 'FILLRECT' then + _Canvas.FillRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1]), Single(Caller.Params[2]), TCorners(Byte(Caller.Params[3])), Single(Caller.Params[4]), TCornerType(Caller.Params[5])) + else if MethodName = 'DRAWRECT' then + _Canvas.DrawRect(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1]), Single(Caller.Params[2]), TCorners(Byte(Caller.Params[3])), Single(Caller.Params[4]), TCornerType(Caller.Params[5])) + else if MethodName = 'FILLELLIPSE' then + _Canvas.FillEllipse(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1])) + else if MethodName = 'DRAWELLIPSE' then + _Canvas.DrawEllipse(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1])) + else if MethodName = 'FILLARC' then + _Canvas.FillArc(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TfsPointF(frxInteger(Caller.Params[1])).GetRect, Single(Caller.Params[2]), Single(Caller.Params[3]), Single(Caller.Params[4])) + else if MethodName = 'DRAWARC' then + _Canvas.DrawArc(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TfsPointF(frxInteger(Caller.Params[1])).GetRect, Single(Caller.Params[2]), Single(Caller.Params[3]), Single(Caller.Params[4])) + else if MethodName = 'PTINPATH' then + Result := Boolean(_Canvas.PtInPath(TfsPointF(frxInteger(Caller.Params[0])).GetRect, TPathData(frxInteger(Caller.Params[1])))) + else if MethodName = 'FILLPATH' then + _Canvas.FillPath(TPathData(frxInteger(Caller.Params[0])), Single(Caller.Params[1])) + else if MethodName = 'DRAWPATH' then + _Canvas.DrawPath(TPathData(frxInteger(Caller.Params[0])), Single(Caller.Params[1])) + else if MethodName = 'DRAWBITMAP' then + _Canvas.DrawBitmap(TBitmap(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, TfsRectF(frxInteger(Caller.Params[2])).GetRect, Single(Caller.Params[3]), Boolean(Caller.Params[4])) + else if MethodName = 'DRAWRECTSIDES' then + _Canvas.DrawRectSides(TfsRectF(frxInteger(Caller.Params[0])).GetRect, Single(Caller.Params[1]), Single(Caller.Params[2]), TCorners(Byte(Caller.Params[3])), Single(Caller.Params[4]), TSides(Byte(Caller.Params[5])), TCornerType(Caller.Params[6])) + else if MethodName = 'FILLPOLYGON' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mPoly, Cnt); + for Idx := 0 to Cnt - 1 do + mPoly[Idx] := TfsPointF(frxInteger(Caller.Params[0][Idx + nLo])).GetRectP^; + _Canvas.FillPolygon(TPolygon(Caller.Params[0]), Single(Caller.Params[1])); + SetLength(mPoly, 0); + end + else if MethodName = 'DRAWPOLYGON' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mPoly, Cnt); + for Idx := 0 to Cnt - 1 do + mPoly[Idx] := TfsPointF(frxInteger(Caller.Params[0][Idx + nLo])).GetRectP^; + _Canvas.DrawPolygon(TPolygon(Caller.Params[0]), Single(Caller.Params[1])); + SetLength(mPoly, 0); + end + else if MethodName = 'LOADFONTFROMSTREAM' then + Result := Boolean(_Canvas.LoadFontFromStream(TStream(frxInteger(Caller.Params[0])))) + else if MethodName = 'FILLTEXT' then + _Canvas.FillText(TfsRectF(frxInteger(Caller.Params[0])).GetRect, String(Caller.Params[1]), Boolean(Caller.Params[2]), Single(Caller.Params[3]), TFillTextFlags(Byte(Caller.Params[4])), TTextAlign(Caller.Params[5]), TTextAlign(Caller.Params[6])) + else if MethodName = 'MEASURETEXT' then + _Canvas.MeasureText(TfsRectF(frxInteger(Caller.Params[0])).GetRectP^, String(Caller.Params[1]), Boolean(Caller.Params[2]), TFillTextFlags(Byte(Caller.Params[3])), TTextAlign(Caller.Params[4]), TTextAlign(Caller.Params[5])) + else if MethodName = 'MEASURELINES' then + _Canvas.MeasureLines(TLineMetricInfo(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, String(Caller.Params[2]), Boolean(Caller.Params[3]), TFillTextFlags(Byte(Caller.Params[4])), TTextAlign(Caller.Params[5]), TTextAlign(Caller.Params[6])) + else if MethodName = 'TEXTTOPATH' then + Result := Boolean(_Canvas.TextToPath(TPathData(frxInteger(Caller.Params[0])), TfsRectF(frxInteger(Caller.Params[1])).GetRect, String(Caller.Params[2]), Boolean(Caller.Params[3]), TTextAlign(Caller.Params[4]), TTextAlign(Caller.Params[5]))) + else if MethodName = 'TEXTWIDTH' then + Result := Single(_Canvas.TextWidth(String(Caller.Params[0]))) + else if MethodName = 'TEXTHEIGHT' then + Result := Single(_Canvas.TextHeight(String(Caller.Params[0]))) + else if MethodName = 'SETCUSTOMDASH' then + begin + nLo := VarArrayLowBound(Caller.Params[0], 1); + Cnt := VarArrayHighBound(Caller.Params[0], 1) - nLo; + SetLength(mDashs, Cnt); + for Idx := 0 to Cnt - 1 do + mDashs[Idx] := Single(Caller.Params[0][Idx + nLo]); +{$IFDEF DELPHI25} + _Canvas.Stroke.SetCustomDash(mDashs, Single(Caller.Params[1])); +{$ELSE} + _Canvas.SetCustomDash(mDashs, Single(Caller.Params[1])); +{$ENDIF} + SetLength(mDashs, 0); + end +{$IFNDEF CLX} + { else if MethodName = 'PIXELS.GET' then + Result := _Canvas.Pixels[Caller.Params[0], Caller.Params[1]] + else if MethodName = 'PIXELS.SET' then + _Canvas.Pixels[Caller.Params[0], Caller.Params[1]] := Caller.Params[2] } +{$ENDIF} + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + if ClassType = TBitmap then + begin + if PropName = 'CANVAS' then + Result := frxInteger(TBitmap(Instance).Canvas) +{$IFNDEF Delphi21} + else if PropName = 'RESOURCEBITMAP' then + Result := frxInteger(TBitmap(Instance).ResourceBitmap) +{$ENDIF} + else if PropName = 'WIDTH' then + Result := Integer(TBitmap(Instance).Width) + else if PropName = 'HEIGHT' then + Result := Integer(TBitmap(Instance).Height) + end + else if ClassType = TCanvas then + begin + if PropName = 'STROKE' then + Result := frxInteger(TCanvas(Instance).Stroke) + else if PropName = 'WIDTH' then + Result := Integer(TCanvas(Instance).Width) + else if PropName = 'HEIGHT' then + Result := Integer(TCanvas(Instance).Height) + else if PropName = 'FONT' then + Result := frxInteger(TCanvas(Instance).Font) + else if PropName = 'FILL' then + Result := frxInteger(TCanvas(Instance).Fill) + else if PropName = 'STROKETHICKNESS' then +{$IFDEF DELPHI25} + Result := Single(TCanvas(Instance).Stroke.Thickness) +{$ELSE} + Result := Single(TCanvas(Instance).StrokeThickness) +{$ENDIF} +{$IFNDEF Delphi17} + else if PropName = 'STROKECAP' then + Result := Integer(TCanvas(Instance).StrokeCap) + else if PropName = 'STROKEDASH' then + Result := Integer(TCanvas(Instance).StrokeDash) + else if PropName = 'STROKEJOIN' then + Result := Integer(TCanvas(Instance).StrokeJoin) +{$ENDIF} + end; +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TBitmap then + begin + if PropName = 'WIDTH' then + TBitmap(Instance).Width := Integer(Value) + else if PropName = 'HEIGHT' then + TBitmap(Instance).Height:= Integer(Value) + end + else if ClassType = TCanvas then + begin + if PropName = 'STROKETHICKNESS' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Thickness := Single(Value) +{$ELSE} + TCanvas(Instance).StrokeThickness := Single(Value) +{$ENDIF} + else if PropName = 'STROKECAP' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Cap := TStrokeCap(Value) +{$ELSE} + TCanvas(Instance).StrokeCap := TStrokeCap(Value) +{$ENDIF} + else if PropName = 'STROKEDASH' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Dash := TStrokeDash(Value) +{$ELSE} + TCanvas(Instance).StrokeDash := TStrokeDash(Value) +{$ENDIF} + else if PropName = 'STROKEJOIN' then +{$IFDEF DELPHI25} + TCanvas(Instance).Stroke.Join := TStrokeJoin(Value) +{$ELSE} + TCanvas(Instance).StrokeJoin := TStrokeJoin(Value) +{$ENDIF} + end; +end; + +procedure TFunctions.GetColorProc(const Name: String); +var + c: Integer; +begin + IdentToAlphaColor('cla' + Name, c); + Script.AddConst('cla' + Name, 'Integer', c); +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsGraphicsRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_iibxrtti.pas b/FastScript/FMX/FMX.fs_iibxrtti.pas new file mode 100644 index 0000000..dd92476 --- /dev/null +++ b/FastScript/FMX/FMX.fs_iibxrtti.pas @@ -0,0 +1,125 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ IBX classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iibxrtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_itools, FMX.fs_idbrtti, Data.db, FMX.Types +{$IFDEF DELPHI20} + , IBX.ibdatabase, IBX.IBCustomDataSet, IBX.IBQuery, IBX.IBTable, IBX.IBStoredProc +{$ELSE} + , ibdatabase, IBCustomDataSet, IBQuery, IBTable, IBStoredProc +{$ENDIF} + ; + +type +{$i frxPlatformsAttribute.inc} + TfsIBXRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class (TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: + String; Caller: TfsMethodHelper): Variant; + function RecordCount(Instance: TObject; ClassType: TClass; const PropName: + String): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddClass(TIBDataBase, 'TComponent'); + + with AddClass(TIBTransaction, 'TComponent') do + begin + AddMethod('procedure Commit', CallMethod); + AddMethod('procedure RollBack', CallMethod); + AddMethod('procedure StartTransaction', CallMethod); + end; + + AddClass(TIBCustomDataSet, 'TDataSet'); + AddClass(TIBTable, 'TIBCustomDataSet'); + with AddClass(TIBQuery, 'TIBCustomDataSet') do + begin + AddMethod('procedure ExecSQL', CallMethod); + AddMethod('procedure FetchAll', CallMethod); + AddProperty('RecordCount', 'Integer',RecordCount, nil); + end; + with AddClass(TIBStoredProc, 'TIBCustomDataSet') do + AddMethod('procedure ExecProc', CallMethod); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const + MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TIBQuery then + begin + if MethodName = 'EXECSQL' then + TIBQuery(Instance).ExecSQL + else + if MethodName = 'FETCHALL' then + TIBQuery(Instance).FETCHALL; + end + else + if ClassType = TIBStoredProc then + begin + if MethodName = 'EXECPROC' then + TIBStoredProc(Instance).ExecProc + end + else + if(ClassType = TIBTransaction) AND (MethodName = 'COMMIT') then + TIBTransaction(Instance).Commit + else + if (ClassType = TIBTransaction) AND (MethodName = 'ROLLBACK') then + TIBTransaction(Instance).RollBack + else + if(ClassType = TIBTransaction) AND (MethodName = 'STARTTRANSACTION') then + TIBTransaction(Instance).StartTransaction; + +end; + +function TFunctions.RecordCount(Instance: TObject; ClassType: TClass; const + PropName: String): Variant; +begin + Result:=0; + if (ClassType = TIBQuery) AND (PropName = 'RECORDCOUNT') then + Result:=TIBQuery(Instance).RecordCount; + +end; + + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsIBXRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_iilparser.pas b/FastScript/FMX/FMX.fs_iilparser.pas new file mode 100644 index 0000000..b8d0425 --- /dev/null +++ b/FastScript/FMX/FMX.fs_iilparser.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Intermediate Language parser } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iilparser; +{$i FMX.inc} +{$i fs_iilparser.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_iinirtti.pas b/FastScript/FMX/FMX.fs_iinirtti.pas new file mode 100644 index 0000000..42561a5 --- /dev/null +++ b/FastScript/FMX/FMX.fs_iinirtti.pas @@ -0,0 +1,372 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ IniFiles.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{ Copyright (c) 2004-2007 } +{ by Stalker SoftWare } +{ } +{******************************************} + +unit FMX.fs_iinirtti; + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, System.IniFiles, FMX.Types, System.Types; + +type +{$i frxPlatformsAttribute.inc} + TfsIniRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; + procedure SaveIniFileToStream(oIniFile: TCustomIniFile; oStream: TStream); + procedure LoadIniFileFromStream(oIniFile :TCustomIniFile; oStream :TStream); + procedure WriteTStrings(oIniFile: TCustomIniFile; const Section: String; Values: TStrings; IsClear :Boolean = True); + procedure ReadTStrings(oIniFile: TCustomIniFile; const Section: String; Values: TStrings; IsClear :Boolean = True); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + + with AScript do + begin + with AddClass(TCustomIniFile, 'TObject') do + begin + AddConstructor('constructor Create(const FileName: String)', CallMethod); + AddMethod('function ReadInteger(const Section, Ident: String; Default: LongInt): LongInt', CallMethod); + AddMethod('procedure WriteInteger(const Section, Ident: String; Value: LongInt)', CallMethod); + AddMethod('function ReadBool(const Section, Ident: String; Default: Boolean): Boolean', CallMethod); + AddMethod('procedure WriteBool(const Section, Ident: String; Value: Boolean)', CallMethod); + AddMethod('function ReadDate(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteDate(const Section, Name: String; Value: TDateTime)', CallMethod); + AddMethod('function ReadDateTime(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteDateTime(const Section, Name: String; Value: TDateTime)', CallMethod); + AddMethod('function ReadFloat(const Section, Name: String; Default: Double): Double', CallMethod); + AddMethod('procedure WriteFloat(const Section, Name: String; Value: Double)', CallMethod); + AddMethod('function ReadTime(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteTime(const Section, Name: String; Value: TDateTime);', CallMethod); +{$IFDEF DELPHI6} + AddMethod('function ReadBinaryStream(const Section, Name: String; Value: TStream): Integer', CallMethod); + AddMethod('procedure WriteBinaryStream(const Section, Name: String; Value: TStream)', CallMethod); +{$ENDIF} + AddMethod('function SectionExists(const Section: String): Boolean', CallMethod); + AddMethod('function ValueExists(const Section, Ident: String): Boolean', CallMethod); + + AddMethod('procedure WriteTStrings(const Section :String; Value :TStrings; IsClear :Boolean = True)', CallMethod); + AddMethod('function ReadTStrings(const Section :String; Value :TStrings; IsClear :Boolean = True): String;', CallMethod); + + AddProperty('FileName', 'String', GetProp); + end; + + with AddClass(TMemIniFile, 'TCustomIniFile') do + begin + AddConstructor('constructor Create(const FileName: String)', CallMethod); + AddMethod('procedure WriteString(const Section, Ident, Value: String)', CallMethod); + AddMethod('function ReadString(const Section, Ident, Default: String): String;', CallMethod); +{$IFDEF DELPHI6} + AddMethod('procedure ReadSectionValuesEx(const Section: String; Strings: TStrings)', CallMethod); +{$ENDIF} + AddMethod('procedure DeleteKey(const Section, Ident: String)', CallMethod); + AddMethod('procedure ReadSection(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSections(Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSectionValues(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure EraseSection(const Section: String)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure GetStrings(List: TStrings)', CallMethod); + AddMethod('procedure SetStrings(List: TStrings)', CallMethod); + AddMethod('procedure SaveIniFileToStream(oStream: TStream)', CallMethod); + AddMethod('procedure LoadIniFileFromStream(oStream: TStream)', CallMethod); + end; + + with AddClass(TIniFile, 'TCustomIniFile') do + begin + AddMethod('procedure WriteString(const Section, Ident, Value: String)', CallMethod); + AddMethod('function ReadString(const Section, Ident, Default: String): String;', CallMethod); +{$IFDEF DELPHI6} + AddMethod('procedure ReadSectionValuesEx(const Section: String; Strings: TStrings)', CallMethod); +{$ENDIF} + AddMethod('procedure DeleteKey(const Section, Ident: String)', CallMethod); + AddMethod('procedure ReadSection(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSections(Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSectionValues(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure EraseSection(const Section: String)', CallMethod); + AddMethod('procedure SaveIniFileToStream(oStream: TStream)', CallMethod); + AddMethod('procedure LoadIniFileFromStream(oStream: TStream)', CallMethod); + end; + + end; + +end; + +{$HINTS OFF} +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; +var + oCustomIniFile: TCustomIniFile; + oMemIniFile: TMemIniFile; + oIniFile: TIniFile; + oList: TStrings; + nCou: Integer; + +begin + + Result := 0; + + if ClassType = TCustomIniFile then + begin + oCustomIniFile := TCustomIniFile(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(oCustomIniFile.Create(Caller.Params[0])) + else if MethodName = 'WRITEINTEGER' then + oCustomIniFile.WriteInteger(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READINTEGER' then + Result := oCustomIniFile.ReadInteger(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEBOOL' then + oCustomIniFile.WriteBool(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READBOOL' then + Result := oCustomIniFile.ReadBool(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEDATE' then + oCustomIniFile.WriteDate(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READDATE' then + Result := oCustomIniFile.ReadDate(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEDATETIME' then + oCustomIniFile.WriteDateTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READDATETIME' then + Result := oCustomIniFile.ReadDateTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEFLOAT' then + oCustomIniFile.WriteFloat(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READFLOAT' then + Result := oCustomIniFile.ReadFloat(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITETIME' then + oCustomIniFile.WriteTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READTIME' then + Result := oCustomIniFile.ReadTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) +{$IFDEF DELPHI6} + else if MethodName = 'WRITEBINARYSTREAM' then + oCustomIniFile.WriteBinaryStream(Caller.Params[0], Caller.Params[1], TStream(frxInteger(Caller.Params[2]))) + else if MethodName = 'READBINARYSTREAM' then + Result := oCustomIniFile.ReadBinaryStream(Caller.Params[0], Caller.Params[1], TStream(frxInteger(Caller.Params[2]))) +{$ENDIF} + else if MethodName = 'SECTIONEXISTS' then + Result := oCustomIniFile.SectionExists(Caller.Params[0]) + else if MethodName = 'VALUEEXISTS' then + Result := oCustomIniFile.ValueExists(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'WRITETSTRINGS' then + WriteTStrings(oCustomIniFile, Caller.Params[0], TStrings(frxInteger(Caller.Params[1])), Caller.Params[2]) + else if MethodName = 'READTSTRINGS' then + ReadTStrings(oCustomIniFile, Caller.Params[0], TStrings(frxInteger(Caller.Params[1])), Caller.Params[2]) + + end; + + if ClassType = TMemIniFile then + begin + oMemIniFile := TMemIniFile(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(oMemIniFile.Create(Caller.Params[0])) + else if MethodName = 'WRITESTRING' then + oMemIniFile.WriteString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READSTRING' then + Result := oMemIniFile.ReadString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'DELETEKEY' then + oMemIniFile.DeleteKey(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'READSECTION' then + oMemIniFile.ReadSection(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'READSECTIONS' then + oMemIniFile.ReadSections(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'READSECTIONVALUES' then + oMemIniFile.ReadSectionValues(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'ERASESECTION' then + oMemIniFile.EraseSection(Caller.Params[0]) +{$IFDEF DELPHI6} + else if MethodName = 'READSECTIONVALUESEX' then + begin + oList := TStringList.Create; + try + oMemIniFile.ReadSectionValues(Caller.Params[0], oList); + TStrings(frxInteger(Caller.Params[1])).Clear; + for nCou := 0 to oList.Count-1 do +// TStrings(frxInteger(Caller.Params[1])).Add(oList.ValueFromIndex[nCou]); + TStrings(frxInteger(Caller.Params[1])).Add(oList.Values[oList.Names[nCou]]); + finally + oList.Free; + end; + end +{$ENDIF} + else if MethodName = 'CLEAR' then + oMemIniFile.Clear + else if MethodName = 'GETSTRINGS' then + oMemIniFile.GetStrings(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'SETSTRINGS' then + oMemIniFile.SetStrings(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVEINIFILETOSTREAM' then + SaveIniFileToStream(oMemIniFile, TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADINIFILEFROMSTREAM' then + LoadIniFileFromStream(oMemIniFile, TStream(frxInteger(Caller.Params[0]))) + end; + + if ClassType = TIniFile then + begin + oIniFile := TIniFile(Instance); + if MethodName = 'WRITESTRING' then + oIniFile.WriteString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READSTRING' then + Result := oIniFile.ReadString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'DELETEKEY' then + oIniFile.DeleteKey(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'READSECTION' then + oIniFile.ReadSection(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'READSECTIONS' then + oIniFile.ReadSections(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'READSECTIONVALUES' then + oIniFile.ReadSectionValues(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'ERASESECTION' then + oIniFile.EraseSection(Caller.Params[0]) +{$IFDEF DELPHI6} + else if MethodName = 'READSECTIONVALUESEX' then + begin + oList := TStringList.Create; + try + oIniFile.ReadSectionValues(Caller.Params[0], oList); + TStrings(frxInteger(Caller.Params[1])).Clear; + for nCou := 0 to oList.Count-1 do +// TStrings(frxInteger(Caller.Params[1])).Add(oList.ValueFromIndex[nCou]); + TStrings(frxInteger(Caller.Params[1])).Add(oList.Values[oList.Names[nCou]]); + finally + oList.Free; + end; + end +{$ENDIF} + else if MethodName = 'SAVEINIFILETOSTREAM' then + SaveIniFileToStream(oIniFile, TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADINIFILEFROMSTREAM' then + LoadIniFileFromStream(oIniFile, TStream(frxInteger(Caller.Params[0]))) + end; + +end; +{$HINTS ON} + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCustomIniFile then + begin + if PropName = 'FILENAME' then + Result := TIniFile(Instance).FileName + end; +end; + +procedure TFunctions.SaveIniFileToStream(oIniFile :TCustomIniFile; oStream :TStream); +var + oStrings :TStrings; + +begin + + if (not Assigned(oIniFile)) or (not Assigned(oStream)) then Exit; + + if not ((oIniFile is TIniFile) or (oIniFile is TMemIniFile)) then Exit; + + oStrings:= TStringList.Create; + try + + if oIniFile is TIniFile then + oStrings.LoadFromFile(oIniFile.FileName) + else + if oIniFile is TMemIniFile then + TMemIniFile(oIniFile).GetStrings(oStrings); + + oStrings.SaveToStream(oStream); + + finally + oStrings.Free; + end; + +end; + +procedure TFunctions.LoadIniFileFromStream(oIniFile :TCustomIniFile; oStream :TStream); +var + oStrings :TStrings; + +begin + + if (not Assigned(oIniFile)) or (not Assigned(oStream)) then Exit; + + if not ((oIniFile is TIniFile) or (oIniFile is TMemIniFile)) then Exit; + + oStrings:= TStringList.Create; + try + + oStrings.LoadFromStream(oStream); + + if oIniFile is TIniFile then + oStrings.SaveToFile(oIniFile.FileName) + else + if oIniFile is TMemIniFile then + TMemIniFile(oIniFile).SetStrings(oStrings); + + finally + oStrings.Free; + end; + +end; + +procedure TFunctions.WriteTStrings(oIniFile :TCustomIniFile; const Section :String; Values :TStrings; IsClear :Boolean = True); +var + nCou :Integer; + +begin + + if IsClear then oIniFile.EraseSection(Section); + + for nCou := 0 to Values.Count-1 do + oIniFile.WriteString(Section, 'Items'+IntToStr(nCou), Values[nCou]); + + oIniFile.WriteInteger(Section, 'Count', Values.Count); + +end; + +procedure TFunctions.ReadTStrings(oIniFile :TCustomIniFile; const Section :String; Values :TStrings; IsClear :Boolean = True); +var + nCou, nCount :Integer; + +begin + + nCount := oIniFile.ReadInteger(Section, 'Count', 0); + + if IsClear then Values.Clear; + + for nCou := 0 to nCount-1 do + Values.Add(oIniFile.ReadString(Section, 'Items'+IntToStr(nCou), '')); + +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsIniRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/FMX/FMX.fs_iinterpreter.pas b/FastScript/FMX/FMX.fs_iinterpreter.pas new file mode 100644 index 0000000..0953f64 --- /dev/null +++ b/FastScript/FMX/FMX.fs_iinterpreter.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Main module } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iinterpreter; +{$i FMX.inc} +{$i fs_iinterpreter.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_ijs.pas b/FastScript/FMX/FMX.fs_ijs.pas new file mode 100644 index 0000000..4b321a6 --- /dev/null +++ b/FastScript/FMX/FMX.fs_ijs.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ JScript grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ijs; +{$i FMX.inc} +{$i fs_ijs.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_imenusrtti.pas b/FastScript/FMX/FMX.fs_imenusrtti.pas new file mode 100644 index 0000000..fe9b172 --- /dev/null +++ b/FastScript/FMX/FMX.fs_imenusrtti.pas @@ -0,0 +1,104 @@ +{**********************************************} +{ } +{ FastScript v1.9 } +{ Menus } +{ } +{ Copyright (c) 1998-2011 } +{ by Fast Reports Inc. } +{ } +{**********************************************} + +unit FMX.fs_imenusrtti; + +interface + +{$I fs.inc} + +uses + System.SysUtils, System.Classes, FMX.Menus, FMX.fs_iinterpreter, FMX.fs_ievents, System.Types, System.Variants, FMX.Types; + +type +{$i frxPlatformsAttribute.inc} + + TfsMenusRTTI = class(TComponent); // fake component + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: + string; Caller: TfsMethodHelper): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + + with AScript do + begin + + AddType('TPopupAlignment', fvtInt); + + + with AddClass(TMenuItem, 'TTextControl') do + begin + AddMethod('procedure Popup', CallMethod); + AddMethod('procedure NeedPopup', CallMethod); + AddMethod('function HavePopup: Boolean', CallMethod); + end; { with } + + with AddClass(TMainMenu, 'TFmxObject') do + with AddClass(TMenuBar, 'TStyledControl') do + AddMethod('procedure StartMenuLoop', CallMethod); + + with AddClass(TPopupMenu, 'TFmxObject') do + AddMethod('procedure Popup(X, Y: Single)', CallMethod); + + end; { with } + +end; { Create } + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const + MethodName: string; Caller: TfsMethodHelper): Variant; +var + oMenuItem: TMenuItem; +begin + Result := 0; + + if ClassType = TMenuItem then + begin + + oMenuItem := TMenuItem(Instance); + + if MethodName = 'POPUP' then + oMenuItem.Popup + else if MethodName = 'NEEDPOPUP' then + oMenuItem.NeedPopup + else if MethodName = 'HAVEPOPUP' then + Result := oMenuItem.HavePopup; + + end + else if ClassType = TPopupMenu then + begin + + if MethodName = 'POPUP' then + TPopupMenu(Instance).Popup(Caller.Params[0], Caller.Params[1]); + + end; +end; { CallMethod } + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsMenusRTTI, TFmxObject); + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. + diff --git a/FastScript/FMX/FMX.fs_iparser.pas b/FastScript/FMX/FMX.fs_iparser.pas new file mode 100644 index 0000000..b922d9e --- /dev/null +++ b/FastScript/FMX/FMX.fs_iparser.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Parser } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_iparser; +{$i FMX.inc} +{$i fs_iparser.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_ipascal.pas b/FastScript/FMX/FMX.fs_ipascal.pas new file mode 100644 index 0000000..33f4f12 --- /dev/null +++ b/FastScript/FMX/FMX.fs_ipascal.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Pascal grammar } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_ipascal; +{$i FMX.inc} +{$i fs_ipascal.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_isysrtti.pas b/FastScript/FMX/FMX.fs_isysrtti.pas new file mode 100644 index 0000000..b1405ee --- /dev/null +++ b/FastScript/FMX/FMX.fs_isysrtti.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Standard functions } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_isysrtti; +{$i FMX.inc} +{$i fs_isysrtti.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_itools.pas b/FastScript/FMX/FMX.fs_itools.pas new file mode 100644 index 0000000..871b7c6 --- /dev/null +++ b/FastScript/FMX/FMX.fs_itools.pas @@ -0,0 +1,14 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Common functions } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_itools; +{$i FMX.inc} +{$i fs_itools.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMX.fs_lazarus.pas b/FastScript/FMX/FMX.fs_lazarus.pas new file mode 100644 index 0000000..7c4d3a2 --- /dev/null +++ b/FastScript/FMX/FMX.fs_lazarus.pas @@ -0,0 +1,25 @@ +{ This file was automatically created by Lazarus. do not edit! + This source is only used to compile and install the package. + } + +unit fs_lazarus; + +interface + +uses + fs_ipascal, fs_icpp, fs_ijs, fs_ibasic, fs_iclassesrtti, fs_iconst, + fs_idialogsrtti, fs_ievents, fs_iexpression, fs_iextctrlsrtti, + fs_iformsrtti, fs_igraphicsrtti, fs_iilparser, fs_iinirtti, fs_iinterpreter, + fs_iparser, fs_isysrtti, fs_itools, fs_xml, fs_ireg, fs_synmemo, fs_tree, + LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('fs_ireg', @fs_ireg.Register); +end; + +initialization + RegisterPackage('fs_lazarus', @Register); +end. diff --git a/FastScript/FMX/FMX.fs_synmemo.fmx b/FastScript/FMX/FMX.fs_synmemo.fmx new file mode 100644 index 0000000..da0b5ed --- /dev/null +++ b/FastScript/FMX/FMX.fs_synmemo.fmx @@ -0,0 +1,50 @@ +object fsSynMemoSearch: TfsSynMemoSearch + Left = 0 + Top = 0 + BorderStyle = bsToolWindow + Caption = 'Search for text' + ClientHeight = 129 + ClientWidth = 249 + Position = poScreenCenter + FormFactor.Width = 320 + FormFactor.Height = 480 + FormFactor.Devices = [dkDesktop, dkiPhone, dkiPad] + DesignerMobile = False + DesignerWidth = 0 + DesignerHeight = 0 + DesignerDeviceName = '' + DesignerOrientation = 0 + object Edit1: TEdit + TabOrder = 0 + Position.X = 48.000000000000000000 + Position.Y = 13.000000000000000000 + Width = 193.000000000000000000 + Height = 22.000000000000000000 + KillFocusByReturn = False + end + object Label1: TLabel + Height = 15.000000000000000000 + Position.X = 8.000000000000000000 + Position.Y = 16.000000000000000000 + Text = 'Search :' + Width = 49.000000000000000000 + end + object Search: TButton + Height = 17.000000000000000000 + ModalResult = 1 + Position.X = 88.000000000000000000 + Position.Y = 48.000000000000000000 + TabOrder = 2 + Text = 'Search' + Width = 73.000000000000000000 + end + object Button1: TButton + Height = 17.000000000000000000 + ModalResult = 2 + Position.X = 168.000000000000000000 + Position.Y = 48.000000000000000000 + TabOrder = 3 + Text = 'Cancel' + Width = 73.000000000000000000 + end +end diff --git a/FastScript/FMX/FMX.fs_synmemo.pas b/FastScript/FMX/FMX.fs_synmemo.pas new file mode 100644 index 0000000..4b4f2c4 --- /dev/null +++ b/FastScript/FMX/FMX.fs_synmemo.pas @@ -0,0 +1,2397 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Syntax memo FMX control } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +{ Simple syntax highlighter. Supports Pascal, C++, JS, VB and SQL syntax. + + Assign text to Text property. + Assign desired value to SyntaxType property. + Call SetPos to move caret. + Call ShowMessage to display an error message at the bottom. +} + +unit FMX.fs_synmemo; + +interface + +{$I fs.inc} +{$I fmx.inc} + +uses + System.Classes, System.Variants, System.UIConsts, System.SysUtils, System.UITypes, System.Types, + FMX.Controls, FMX.Forms, FMX.Menus, FMX.Types, FMX.Edit, FMX.Platform, FMX.TreeView +{$IFDEF DELPHI18} + ,FMX.StdCtrls +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Text +{$ENDIF} +{$IFDEF DELPHI29} + , FMX.BaseTypeAliases, FMX.FormTypeAliases +{$ENDIF}; + +type + TSyntaxType = (stPascal, stCpp, stJs, stVB, stSQL, stText); + TCharAttr = (caNo, caText, caBlock, caComment, caKeyword, caString); + TCharAttributes = set of TCharAttr; + +type + TfsBorderSettings = class(TPersistent) + private + FFill: TBrush; + FWidth: Integer; + private + procedure SetFill(const Value: TBrush); + procedure SetWidth(const Value: Integer); + public + constructor Create; + destructor Destroy; override; + published + property Fill: TBrush read FFill write SetFill; + property Width: Integer read FWidth write SetWidth; + end; + + TfsFontSettings = class(TPersistent) + private + FFill: TBrush; + FFont: TFont; + procedure SetFill(const Value: TBrush); + procedure SetFont(const Value: TFont); + public + constructor Create; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Fill: TBrush read FFill write SetFill; + property Font: TFont read FFont write SetFont; + end; + +{$i frxPlatformsAttribute.inc} + TfsSyntaxMemo = class(TStyledControl{$IFDEF DELPHI18}, ICaret{$ENDIF}) + private +{$IFDEF DELPHI18} + FCaret: TCaret; +{$ENDIF} + FBorder: TfsBorderSettings; + FFill: TBrush; + FFontSettings: TfsFontSettings; + FGutterFill: TBrush; + FAllowLinesChange: Boolean; + FCharHeight: Single; + FCharWidth: Single; + FDoubleClicked: Boolean; + FDown: Boolean; + FGutterWidth: Integer; + FFooterHeight: Integer; + FIsMonoType: Boolean; + FKeywords: String; + FMaxLength: Integer; + FMessage: String; + FModified: Boolean; + FMoved: Boolean; + FOffset: TPoint; + FPos: TPoint; + FReadOnly: Boolean; + FSelEnd: TPoint; + FSelStart: TPoint; + FSynStrings: TStrings; + FSyntaxType: TSyntaxType; + FTempPos: TPoint; + FText: TStringList; + FKeywordAttr: TfsFontSettings; + FStringAttr: TfsFontSettings; + FTextAttr: TfsFontSettings; + FCommentAttr: TfsFontSettings; + FBlockColor: TAlphaColor; + FBlockFontColor: TAlphaColor; + FUndo: TStringList; + FUpdating: Boolean; + FUpdatingSyntax: Boolean; + FVScroll: TScrollBar; + FWindowSize: TPoint; + FPopupMenu: TPopupMenu; + KWheel: Integer; + LastSearch: String; + FShowGutter: boolean; + FShowFooter: boolean; + Bookmarks: array of Integer; + FActiveLine: Integer; + FOnChange: TNotifyEvent; + FTmpCanvas: TBitmap; + procedure CalcCharSize; + function GetCharWidth(Str: String): Single; + function GetText: TStrings; + procedure SetText(Value: TStrings); + procedure SetSyntaxType(Value: TSyntaxType); + procedure SetShowGutter(Value: boolean); + procedure SetShowFooter(Value: boolean); + function FMemoFind(Text: String; var Position : TPoint): boolean; + function GetCharAttr(Pos: TPoint): TCharAttributes; + function GetLineBegin(Index: Integer): Integer; + function GetPlainTextPos(Pos: TPoint): Integer; + function GetPosPlainText(Pos: Integer): TPoint; + function GetSelText: String; + function LineAt(Index: Integer): String; + function LineLength(Index: Integer): Integer; + function Pad(n: Integer): String; + procedure AddSel; + procedure AddUndo; + procedure ClearSel; + procedure CreateSynArray; + procedure DoChange; + procedure EnterIndent; + procedure SetSelText(Value: String); + procedure ShiftSelected(ShiftRight: Boolean); + procedure ShowCaretPos; + procedure TabIndent; + procedure UnIndent; + procedure UpdateScrollBar; + procedure UpdateSyntax; + procedure DoLeft; + procedure DoRight; + procedure DoUp; + procedure DoDown; + procedure DoHome(Ctrl: Boolean); + procedure DoEnd(Ctrl: Boolean); + procedure DoPgUp; + procedure DoPgDn; + procedure DoChar(Ch: Char); + procedure DoReturn; + procedure DoDel; + procedure DoBackspace; + procedure DoCtrlI; + procedure DoCtrlU; + procedure DoCtrlR; + procedure DoCtrlL; + procedure ScrollClick(Sender: TObject); + procedure ScrollEnter(Sender: TObject); + procedure LinesChange(Sender: TObject); + procedure ShowPos; + procedure BookmarkDraw(Y :Single; ALine : integer); + procedure ActiveLineDraw(Y :Single; ALine : integer); + procedure CorrectBookmark(Line : integer; delta : integer); + procedure SetKeywordAttr(Value: TfsFontSettings); + procedure SetStringAttr(Value: TfsFontSettings); + procedure SetTextAttr(Value: TfsFontSettings); + procedure SetCommentAttr(Value: TfsFontSettings); + procedure SetBorder(const Value: TfsBorderSettings); + procedure SetFill(const Value: TBrush); + procedure SetFontSettings(const Value: TfsFontSettings); + procedure SetGutterFill(const Value: TBrush); + protected + procedure SetParent(const Value: TFmxObject); override; + function GetClientRect: TRectF; + procedure DblClick; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure MouseMove(Shift: TShiftState; X, Y: Single); override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single); override; + procedure KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); override; + procedure CopyPopup(Sender: TObject); + procedure PastePopup(Sender: TObject); + procedure CutPopup(Sender: TObject); + procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean); override; + procedure DOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); + procedure DDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); + procedure DoExit; override; + procedure Resize; override; + procedure UpdateWindowSize; + procedure FontChanged(Sender: TObject); + procedure DialogKey(var Key: Word; Shift: TShiftState); override; +{$IFDEF Delphi18} + function ICaret.GetObject = GetCaret; + function GetCaret: TCustomCaret; + procedure SetCaret(const Value: TCaret); + procedure ShowCaret; + procedure HideCaret; +{$ENDIF} +{$IFDEF Delphi17} + function CreateCaret: TCaret; {$IFNDEF Delphi18} override; {$ENDIF} +{$ENDIF} + procedure SetAttr(aCanvas: TCanvas; a: TCharAttributes); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Paint; override; + procedure CopyToClipboard; + procedure CutToClipboard; + procedure PasteFromClipboard; + procedure SetPos(x, y: Integer); + procedure ShowMessage(s: String); + procedure Undo; + procedure UpdateView; + function GetPos: TPoint; + function Find(Text: String): boolean; + property Modified: Boolean read FModified write FModified; + property SelText: String read GetSelText write SetSelText; + function IsBookmark(Line : integer): integer; + procedure AddBookmark(Line, Number : integer); + procedure DeleteBookmark(Number : integer); + procedure GotoBookmark(Number : integer); + procedure SetActiveLine(Line : Integer); + function GetActiveLine: Integer; +{$IFDEF Delphi18} + property Caret: TCaret read FCaret write SetCaret; +{$ENDIF} + published + property Align; + property Anchors; + property DragMode; + property Enabled; + property PopupMenu; + property ShowHint; + property TabOrder; + property Width; + property Height; + property Visible; +{$IFDEF Delphi18} + property Cursor; +{$ENDIF} + property BlockColor: TAlphaColor read FBlockColor write FBlockColor; + property BlockFontColor: TAlphaColor read FBlockFontColor write FBlockFontColor; + property CommentAttr: TfsFontSettings read FCommentAttr write SetCommentAttr; + property KeywordAttr: TfsFontSettings read FKeywordAttr write SetKeywordAttr; + property StringAttr: TfsFontSettings read FStringAttr write SetStringAttr; + property TextAttr: TfsFontSettings read FTextAttr write SetTextAttr; + property Border: TfsBorderSettings read FBorder write SetBorder; + property Fill: TBrush read FFill write SetFill; + property FontSettings: TfsFontSettings read FFontSettings write SetFontSettings; + property GutterFill: TBrush read FGutterFill write SetGutterFill; + property Lines: TStrings read GetText write SetText; + property ReadOnly: Boolean read FReadOnly write FReadOnly; + property SyntaxType: TSyntaxType read FSyntaxType write SetSyntaxType; + property ShowFooter: boolean read FShowFooter write SetShowFooter; + property ShowGutter: boolean read FShowGutter write SetShowGutter; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + end; + + TfsSynMemoSearch = class(TForm) + Search: TButton; + Button1: TButton; + Label1: TLabel; + Edit1: TEdit; + procedure FormKeyPress(Sender: TObject; var Key: Char); + private + { Private declarations } + public + { Public declarations } + end; + +var + SynMemoSearch: TfsSynMemoSearch; + +implementation + +{$R *.FMX} +{$IFDEF DELPHI18} +type THachCaret = class(TCaret); +{$ENDIF} + +const + PasKeywords = + 'and,array,begin,case,const,div,do,downto,else,end,except,finally,'+ + 'for,function,if,in,is,mod,nil,not,of,or,procedure,program,repeat,shl,'+ + 'shr,string,then,to,try,until,uses,var,while,with,xor'; + + CppKeywords = + 'bool,break,case,char,continue,define,default,delete,do,double,else,'+ + 'except,finally,float,for,if,include,int,is,new,return,string,switch,try,'+ + 'variant,void,while'; + + SQLKeywords = + 'active,after,all,alter,and,any,as,asc,ascending,at,auto,' + + 'base_name,before,begin,between,by,cache,cast,check,column,commit,' + + 'committed,computed,conditional,constraint,containing,count,create,' + + 'current,cursor,database,debug,declare,default,delete,desc,descending,' + + 'distinct,do,domain,drop,else,end,entry_point,escape,exception,execute,' + + 'exists,exit,external,extract,filter,for,foreign,from,full,function,' + + 'generator,grant,group,having,if,in,inactive,index,inner,insert,into,is,' + + 'isolation,join,key,left,level,like,merge,names,no,not,null,of,on,only,' + + 'or,order,outer,parameter,password,plan,position,primary,privileges,' + + 'procedure,protected,read,retain,returns,revoke,right,rollback,schema,' + + 'select,set,shadow,shared,snapshot,some,suspend,table,then,to,' + + 'transaction,trigger,uncommitted,union,unique,update,user,using,values,' + + 'view,wait,when,where,while,with,work'; + + JSKeywords = + 'break,case,continue,default,delete,do,else,except,finally,for,function,' + + 'import,in,is,if,new,return,switch,try,var,while,with'; + + VBKeywords = + 'addressof,and,as,byref,byval,case,catch,delete,dim,do,else,elseif,' + + 'end,endif,exit,finally,for,function,if,imports,is,loop,mod,new,next,' + + 'not,or,rem,return,select,set,step,sub,then,to,try,wend,while,with,xor'; + + + WordChars = ['a'..'z', 'A'..'Z', '0'..'9', '_']; + LineBreak: AnsiString = sLineBreak; + +function IsUnicodeChar(Chr: Char): Boolean; +begin + Result := ((Chr >= Char($007F)) and (Chr <= Char($FFFF))); +end; + + +{ TfsSyntaxMemo } + +constructor TfsSyntaxMemo.Create(AOwner: TComponent); +var + m: TMenuItem; + i: integer; +begin + inherited Create(AOwner); + FTmpCanvas := TBitmap.Create(1, 1); +{$IFDEF DELPHI18} + FCaret := CreateCaret; +{$ENDIF} + FVScroll := TScrollBar.Create(Self); + FVScroll.Stored := False; + FVScroll.Orientation := TOrientation.orVertical; + + FFontSettings := TfsFontSettings.Create; + FFontSettings.Font.OnChanged := FontChanged; + FFontSettings.Fill.Color := TAlphaColorRec.Black; + + FCommentAttr := TfsFontSettings.Create; + FCommentAttr.Fill.Color := TAlphaColorRec.Green; + FCommentAttr.Font.Style := [TFontStyle.fsItalic]; + + FKeywordAttr := TfsFontSettings.Create; + FKeywordAttr.FFill.Color := TAlphaColorRec.Navy; + FKeywordAttr.Font.Style := [TFontStyle.fsBold]; + + FStringAttr := TfsFontSettings.Create; + FStringAttr.Fill.Color := TAlphaColorRec.Navy; + FStringAttr.Font.Style := []; + + FTextAttr := TfsFontSettings.Create; + FTextAttr.Fill.Color := TAlphaColorRec.Black; + FTextAttr.Font.Style := []; + + FBorder := TfsBorderSettings.Create; + FFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.White); + FGutterFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.Whitesmoke); + + if AOwner is TFmxObject then + Parent := AOwner as TFmxObject; + + OnDragOver := DOver; + OnDragDrop := DDrop; + KWheel := -1; + + + FText := TStringList.Create; + FUndo := TStringList.Create; + FSynStrings := TStringList.Create; + FText.Add(''); + FText.OnChange := LinesChange; + FMaxLength := 1024; + SyntaxType := stPascal; + FMoved := True; + SetPos(1, 1); + FOffset := Point(0, 0); + CanFocus := True; + Cursor := crIBeam; + + FBlockColor := TAlphaColorRec.Blue; + FBlockFontColor := TAlphaColorRec.White; + + FPopupMenu := TPopupMenu.Create(Self); + m := TMenuItem.Create(FPopupMenu); + m.Text := 'Cut'; + m.OnClick := CutPopup; + FPopupMenu.AddObject(m); + m := TMenuItem.Create(FPopupMenu); + m.Text := 'Copy'; + m.OnClick := CopyPopup; + FPopupMenu.AddObject(m); + m := TMenuItem.Create(FPopupMenu); + m.Text := 'Paste'; + m.OnClick := PastePopup; + FPopupMenu.AddObject(m); + + LastSearch := ''; + Setlength(Bookmarks, 10); + for i := 0 to Length(Bookmarks)-1 do + Bookmarks[i] := -1; + + FActiveLine := -1; + + Height := 200; + Width := 200; + CalcCharSize; +end; + +destructor TfsSyntaxMemo.Destroy; +begin + FPopupMenu.Free; + FCommentAttr.Free; + FKeywordAttr.Free; + FStringAttr.Free; + FFontSettings.Free; + FTextAttr.Free; + FText.Free; + FUndo.Free; + FSynStrings.Free; + //FVScroll.Free; + FFill.Free; + FBorder.Free; + FGutterFill.Free; +{$IFDEF DELPHI18} + FCaret.Free; +{$ENDIF} + FreeAndNil(FTmpCanvas); + inherited; +end; + +procedure TfsSyntaxMemo.CalcCharSize; +var + tmpBmp: TBitmap; + r: TRectF; +begin + tmpBmp := TBitmap.Create(1, 1); + with tmpBmp.Canvas do + begin + Font.Assign(FFontSettings.Font); + Font.Style := []; + r := RectF(0, 0, 1000, 1000); + MeasureText(r, 'WWWWWW', True, [], TTextAlign.taLeading); // taLeading returns incorrect results in xe2 + FCharHeight := r.Height + 2; + FCharWidth := r.Width / 6; + FIsMonoType := Pos('COURIER NEW', AnsiUppercase(FFontSettings.Font.Family)) <> 0; + end; + tmpBmp.Free; +end; + +{$IFDEF Delphi17} +function TfsSyntaxMemo.CreateCaret: TCaret; +begin + Result := TCaret.Create(Self); + Result.Visible := True; +{$IFDEF DELPHI20} + Result.ReadOnly := False; + Result.Color := claBlack; +{$ENDIF} + Result.Pos := TPointF.Create(1, 1); +end; +{$ENDIF} + +{$IFDEF DELPHI18} +function TfsSyntaxMemo.GetCaret: TCustomCaret; +begin + Result := FCaret; +end; + +procedure TfsSyntaxMemo.SetCaret(const Value: TCaret); +begin + if Assigned(FCaret) then + FCaret.Assign(Value); +end; + +procedure TfsSyntaxMemo.ShowCaret; +begin + THachCaret(FCaret).Show; +end; + +procedure TfsSyntaxMemo.HideCaret; +begin + THachCaret(FCaret).Hide; +end; +{$ENDIF} + +procedure TfsSyntaxMemo.ShowCaretPos; +var + cWidth: Single; + LineLen: Integer; +begin + cWidth := GetCharWidth(Copy(LineAt(FPos.Y - 1), FOffset.X, FPos.X - 1 - FOffset.X)); + LineLen := LineLength(FPos.Y - 1); + if LineLen < FPos.X then + cWidth := Round(cWidth + FCharWidth * (FPos.X - 1 - LineLen)); +{$IFNDEF Delphi18} +{$IFDEF Delphi17} + if IsFocused then + begin + CaretVisible := False; + SetCaretParams(PointF( + FCharWidth * (FPos.X - 1 - FOffset.X) + FGutterWidth + FBorder.Width + 1, + FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1), + PointF(2, FCharHeight), claBlack); + CaretVisible := True; + end + else + CaretVisible := False; +{$ELSE} + if IsFocused then + begin + SetCaretSize(PointF(2, FCharHeight)); + SetCaretPos(PointF( + FCharWidth * (FPos.X - 1 - FOffset.X) + FGutterWidth + FBorder.Width + 1, + FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1)); + ShowCaretProc; + end + else + HideCaret; +{$ENDIF} +{$ELSE} + if IsFocused then + begin + //SetCaretSize(PointF(2, FCharHeight)); + FCaret.Size := PointF(2, FCharHeight); + FCaret.Pos := PointF( + cWidth + FGutterWidth + FBorder.Width + 1, + FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1); + ShowCaret; +// SetCaretPos(PointF( +// FCharWidth * (FPos.X - 1 - FOffset.X) + FGutterWidth + FBorder.Width + 1, +// FCharHeight * (FPos.Y - 1 - FOffset.Y) + 1)); +// ShowCaretProc; + end + else + HideCaret; +{$ENDIF} +end; + +procedure TfsSyntaxMemo.ShowPos; +var + cRect: TRectF; +begin + if FFooterHeight > 0 then + with Canvas do + begin + Font.Family := 'Tahoma'; + Font.Style := []; + Font.Size := 11; + Fill.Color := TAlphaColorRec.Black; + cRect := GetClientRect; + FillText(RectF(cRect.Left + FGutterWidth + 2, cRect.Bottom - TextHeight('|') - 8, + FGutterWidth + 4 + FCharWidth * 10 , + (Self.Height - TextHeight('|') - 4) + FCharHeight), IntToStr(FPos.y) + + ' : ' + IntToStr(FPos.x) + ' ', FALSE, 1, [], TTextAlign.taLeading); + end; +end; + +procedure TfsSyntaxMemo.SetParent(const Value: TFmxObject); +begin + inherited SetParent(Value); + if (Parent = nil) or (csDestroying in ComponentState) then Exit; + ShowGutter := True; + ShowFooter := True; + FVScroll.Parent := Self; + FVScroll.OnChange := ScrollClick; + FVScroll.OnEnter := ScrollEnter; +end; + +function TfsSyntaxMemo.GetClientRect: TRectF; +begin + if FVScroll.Visible then + Result := RectF(FBorder.Width, FBorder.Width, + Width - FVScroll.Width - FBorder.Width, + Height - FBorder.Width) + else + Result := RectF(FBorder.Width, FBorder.Width, + Width - FBorder.Width, Height - FBorder.Width); +end; + +procedure TfsSyntaxMemo.UpdateSyntax; +begin + CreateSynArray; + Repaint; +end; + +procedure TfsSyntaxMemo.UpdateScrollBar; +begin + with FVScroll do + begin +// prevent OnScroll event + FUpdating := True; + + Value := 0; + ViewportSize := 0; + + Max := FText.Count; + SmallChange := 1; + if FWindowSize.Y < Max then + begin + Visible := True; + ViewportSize := FWindowSize.Y; + end + else + Visible := False; + ViewportSize := FWindowSize.Y; + Value := FOffset.Y; + + FUpdating := False; + end; +end; + +function TfsSyntaxMemo.GetText: TStrings; +var + i: Integer; +begin + for i := 0 to FText.Count - 1 do + FText[i] := LineAt(i); + Result := FText; + FAllowLinesChange := True; +end; + +procedure TfsSyntaxMemo.SetText(Value: TStrings); +begin + FAllowLinesChange := True; + FText.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetSyntaxType(Value: TSyntaxType); +begin + FSyntaxType := Value; + if Value = stPascal then + FKeywords := PasKeywords + else if Value = stCpp then + FKeywords := CppKeywords + else if Value = stSQL then + FKeywords := SQLKeywords + else if Value = stVB then + FKeywords := VBKeywords + else if Value = stJS then + FKeywords := JSKeywords + else + FKeywords := ''; + UpdateSyntax; +end; + +function TfsSyntaxMemo.GetPos: TPoint; +begin + Result := FPos; +end; + +procedure TfsSyntaxMemo.DoChange; +begin + FModified := True; + if Assigned(FOnChange) then + FOnChange(Self); +end; + +procedure TfsSyntaxMemo.LinesChange(Sender: TObject); +begin + if FAllowLinesChange then + begin + UpdateSyntax; + FAllowLinesChange := False; + if FText.Count = 0 then + FText.Add(''); + FMoved := True; + FUndo.Clear; + FPos := Point(1, 1); + FOffset := Point(0, 0); + SetPos(FPos.X, FPos.Y); + ClearSel; + ShowCaretPos; + UpdateScrollBar; + end; +end; + +procedure TfsSyntaxMemo.ShowMessage(s: String); +begin + FMessage := s; + Repaint; +end; + +procedure SetClipboard(const Value: String); +{$IFDEF Delphi17} +var + ClipService: IFMXClipboardService; +begin + if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(ClipService)) then + ClipService.SetClipboard(Value); +end; +{$ELSE} +begin + Platform.SetClipboard(Value); +end; +{$ENDIF} + +function GetClipboard: String; +{$IFDEF Delphi17} +var + ClipService: IFMXClipboardService; +begin + if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, IInterface(ClipService)) then + Result := ClipService.GetClipboard.ToString + else + Result := ''; +end; +{$ELSE} +begin + Result := VarToStr(Platform.GetClipboard); +end; +{$ENDIF} + +procedure TfsSyntaxMemo.CopyToClipboard; +begin + if FSelStart.X <> 0 then + SetClipboard(SelText); +end; + +procedure TfsSyntaxMemo.CutToClipboard; +begin + if not FReadOnly then + begin + if FSelStart.X <> 0 then + begin + SetClipboard(SelText); + SelText := ''; + end; + CorrectBookmark(FSelStart.Y, FSelStart.Y - FSelEnd.Y); + Repaint; + end; +end; + +procedure TfsSyntaxMemo.PasteFromClipboard; +begin + if (not FReadOnly) then + SelText := GetClipboard; +end; + +function TfsSyntaxMemo.LineAt(Index: Integer): String; +begin + if Index < FText.Count then + Result := TrimRight(FText[Index]) + else + Result := ''; +end; + +function TfsSyntaxMemo.LineLength(Index: Integer): Integer; +begin + if Index < 0 then + Result := 0 else + Result := Length(LineAt(Index)); +end; + +function TfsSyntaxMemo.Pad(n: Integer): String; +begin + result := ''; + SetLength(result, n); + Result := StringOfChar(Char(' '), n) +end; + +procedure TfsSyntaxMemo.AddUndo; +begin + if not FMoved then exit; + FUndo.Add(Format('%5d%5d', [FPos.X, FPos.Y]) + FText.Text); + if FUndo.Count > 32 then + FUndo.Delete(0); +end; + +procedure TfsSyntaxMemo.Undo; +var + s: String; +begin + FMoved := True; + if FUndo.Count = 0 then exit; + s := FUndo[FUndo.Count - 1]; + FPos.X := StrToInt(Copy(s, 1, 5)); + FPos.Y := StrToInt(Copy(s, 6, 5)); + FText.Text := Copy(s, 11, Length(s) - 10); + FUndo.Delete(FUndo.Count - 1); + SetPos(FPos.X, FPos.Y); + UpdateSyntax; + DoChange; +end; + +function TfsSyntaxMemo.GetPlainTextPos(Pos: TPoint): Integer; +var + i: Integer; +begin + Result := 0; + for i := 0 to Pos.Y - 2 do + Result := Result + Length(FText[i]) + Length(LineBreak); + Result := Result + Pos.X; +end; + +function TfsSyntaxMemo.GetPosPlainText(Pos: Integer): TPoint; +var + i: Integer; + s: String; +begin + Result := Point(0, 1); + s := FText.Text; + i := 1; + while i <= Pos do + if s[i] = Char(LineBreak[1]) then + begin + Inc(i, Length(LineBreak)); + if i <= Pos then + begin + Inc(Result.Y); + Result.X := 0; + end + else + Inc(Result.X); + end + else + begin + Inc(i); + Inc(Result.X); + end; +end; + +function TfsSyntaxMemo.GetLineBegin(Index: Integer): Integer; +var + s: String; +begin + s := FText[Index]; + Result := 1; + if Trim(s) <> '' then + for Result := 1 to Length(s) do + if s[Result] <> ' ' then + break; +end; + +procedure TfsSyntaxMemo.TabIndent; +begin + SelText := Pad(2); +end; + +procedure TfsSyntaxMemo.EnterIndent; +var + res: Integer; +begin + if Trim(FText[FPos.Y - 1]) = '' then + res := FPos.X else + res := GetLineBegin(FPos.Y - 1); + + CorrectBookmark(FPos.Y, 1); + + FPos := Point(1, FPos.Y + 1); + SelText := Pad(res - 1); +end; + +procedure TfsSyntaxMemo.UnIndent; +var + i, res: Integer; +begin + i := FPos.Y - 2; + res := FPos.X - 1; + CorrectBookmark(FPos.Y, -1); + while i >= 0 do + begin + res := GetLineBegin(i); + if (res < FPos.X) and (Trim(FText[i]) <> '') then + break else + Dec(i); + end; + FSelStart := FPos; + FSelEnd := FPos; + Dec(FSelEnd.X, FPos.X - res); + SelText := ''; +end; + +procedure TfsSyntaxMemo.ShiftSelected(ShiftRight: Boolean); +var + i, ib, ie: Integer; + s: String; + Shift: Integer; +begin + if FReadOnly then exit; + AddUndo; + if FSelStart.X + FSelStart.Y * FMaxLength < FSelEnd.X + FSelEnd.Y * FMaxLength then + begin + ib := FSelStart.Y - 1; + ie := FSelEnd.Y - 1; + end + else + begin + ib := FSelEnd.Y - 1; + ie := FSelStart.Y - 1; + end; + if FSelEnd.X = 1 then + Dec(ie); + + Shift := 2; + if not ShiftRight then + for i := ib to ie do + begin + s := FText[i]; + if (Trim(s) <> '') and (GetLineBegin(i) - 1 < Shift) then + Shift := GetLineBegin(i) - 1; + end; + + for i := ib to ie do + begin + s := FText[i]; + if ShiftRight then + s := Pad(Shift) + s + else if Trim(s) <> '' then + Delete(s, 1, Shift); + FText[i] := s; + end; + UpdateSyntax; + DoChange; +end; + +function TfsSyntaxMemo.GetSelText: String; +var + p1, p2: TPoint; + i: Integer; +begin + if FSelStart.X + FSelStart.Y * FMaxLength < FSelEnd.X + FSelEnd.Y * FMaxLength then + begin + p1 := FSelStart; + p2 := FSelEnd; + Dec(p2.X); + end + else + begin + p1 := FSelEnd; + p2 := FSelStart; + Dec(p2.X); + end; + + if LineLength(p1.Y - 1) < p1.X then + begin + Inc(p1.Y); + p1.X := 1; + end; + if LineLength(p2.Y - 1) < p2.X then + p2.X := LineLength(p2.Y - 1); + + i := GetPlainTextPos(p1); + Result := Copy(FText.Text, i, GetPlainTextPos(p2) - i + 1); +end; + +procedure TfsSyntaxMemo.SetSelText(Value: String); +var + p1, p2, p3: TPoint; + i: Integer; + s: String; +begin + if FReadOnly then exit; + AddUndo; + if FSelStart.X = 0 then + begin + p1 := FPos; + p2 := p1; + Dec(p2.X); + end + else if FSelStart.X + FSelStart.Y * FMaxLength < FSelEnd.X + FSelEnd.Y * FMaxLength then + begin + p1 := FSelStart; + p2 := FSelEnd; + Dec(p2.X); + end + else + begin + p1 := FSelEnd; + p2 := FSelStart; + Dec(p2.X); + end; + + if LineLength(p1.Y - 1) < p1.X then + FText[p1.Y - 1] := FText[p1.Y - 1] + Pad(p1.X - LineLength(p1.Y - 1) + 1); + if LineLength(p2.Y - 1) < p2.X then + p2.X := LineLength(p2.Y - 1); + + i := GetPlainTextPos(p1); + s := FText.Text; + Delete(s, i, GetPlainTextPos(p2) - i + 1); + Insert(Value, s, i); + FText.Text := s; + p3 := GetPosPlainText(i + Length(Value)); + + CorrectBookmark(FPos.Y, p3.y-FPos.Y); + + SetPos(p3.X, p3.Y); + FSelStart.X := 0; + DoChange; + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.ClearSel; +begin + if FSelStart.X <> 0 then + begin + FSelStart := Point(0, 0); + Repaint; + end; +end; + +procedure TfsSyntaxMemo.AddSel; +begin + if FSelStart.X = 0 then + FSelStart := FTempPos; + FSelEnd := FPos; + Repaint; +end; + +procedure TfsSyntaxMemo.SetPos(x, y: Integer); +begin + if FMessage <> '' then + begin + FMessage := ''; + Repaint; + end; + + if x > FMaxLength then x := FMaxLength; + if x < 1 then x := 1; + if y > FText.Count then y := FText.Count; + if y < 1 then y := 1; + + FPos := Point(x, y); + if (FWindowSize.X = 0) or (FWindowSize.Y = 0) then exit; + + if FOffset.Y >= FText.Count then + FOffset.Y := FText.Count - 1; + + if FPos.X > FOffset.X + FWindowSize.X then + begin + FOffset.X := FOffset.X + FPos.X - (FOffset.X + FWindowSize.X); + Repaint; + end + else if FPos.X <= FOffset.X then + begin + FOffset.X := FOffset.X - (FOffset.X - FPos.X + 1); + Repaint; + end + else if FPos.Y > FOffset.Y + FWindowSize.Y then + begin + FOffset.Y := FOffset.Y + FPos.Y - (FOffset.Y + FWindowSize.Y); + Repaint; + end + else if FPos.Y <= FOffset.Y then + begin + FOffset.Y := FOffset.Y - (FOffset.Y - FPos.Y + 1); + Repaint; + end; + + ShowCaretPos; + UpdateScrollBar; + +end; + +procedure TfsSyntaxMemo.ScrollClick(Sender: TObject); +begin + if FUpdating then exit; + FOffset.Y := Round(FVScroll.Value); + if FOffset.Y > FText.Count then + FOffset.Y := FText.Count; + ShowCaretPos; + Repaint; +end; + +procedure TfsSyntaxMemo.ScrollEnter(Sender: TObject); +begin + SetFocus; +end; + +procedure TfsSyntaxMemo.DblClick; +var + s: String; +begin + FDoubleClicked := True; + DoCtrlL; + FSelStart := FPos; + s := LineAt(FPos.Y - 1); + if s <> '' then + while CharInSet(s[FPos.X],WordChars) + or IsUnicodeChar(s[FPos.X]) do + Inc(FPos.X); + FSelEnd := FPos; + Repaint; +end; + +function GetComponentForm(Comp: TFmxObject): TCommonCustomForm; +begin + Result := nil; + while (Comp.Parent <> nil) do + begin + if (Comp.Parent is TCommonCustomForm) then + begin + Result := Comp.Parent as TCommonCustomForm; + Exit; + end; + Comp := Comp.Parent; + end; +end; + +procedure TfsSyntaxMemo.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single); +var + pt: TPointF; + f: TCommonCustomForm; + r: TRectF; + LStr, s: String; + i, cIndex: Integer; + +begin + if FDoubleClicked then + begin + FDoubleClicked := False; + Exit; + end; + if Button = TMouseButton.mbRight then + begin + if PopupMenu = nil then + begin + f := GetComponentForm(Self); + if f <> nil then + begin + pt := f.ClientToScreen(PointF(AbsoluteRect.Left + X, AbsoluteRect.Top + Y)); + FPopUpMenu.Popup(pt.X, pt.Y); + end; + end; + end + else + begin + FMoved := True; + if not IsFocused then + SetFocus; + FDown := True; + if FIsMonoType then + SetPos(Round((X - FGutterWidth) / FCharWidth) + 1 + FOffset.X, + Trunc(Y / FCharHeight) + 1 + FOffset.Y) + else + begin + cIndex := 0; + LStr := LineAt(FPos.Y - 1); + LStr := Copy(LineAt(FPos.Y - 1), FOffset.X + 1, Length(LStr) - (FOffset.X + 1)); + for i := 1 to Length(LStr) do + begin + s := Copy(LStr, 1, i); + r := RectF(0, 0, 100000, 100000); + FTmpCanvas.Canvas.MeasureText(r, s, False, [], TTextAlign.taLeading); + if r.Width >= X - FGutterWidth then + begin + cIndex := i; + break; + end; + end; + SetPos(cIndex + 1 + FOffset.X, + Trunc(Y / FCharHeight) + 1 + FOffset.Y) + end; + ClearSel; + end; +end; + +procedure TfsSyntaxMemo.MouseMove(Shift: TShiftState; X, Y: Single); +begin + if FDown then + begin + FTempPos := FPos; + FPos.X := Round((X - FGutterWidth) / FCharWidth) + 1 + FOffset.X; + FPos.Y := Round(Y / FCharHeight) + 1 + FOffset.Y; + if (FPos.X <> FTempPos.X) or (FPos.Y <> FTempPos.Y) then + begin + SetPos(FPos.X, FPos.Y); + AddSel; + end; + end; +end; + +procedure TfsSyntaxMemo.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Single); +begin + FDown := False; +end; + +procedure TfsSyntaxMemo.MouseWheel(Shift: TShiftState; WheelDelta: Integer; + var Handled: Boolean); +begin + inherited; + FVScroll.Value := FVScroll.Value + (WheelDelta div ABS(WheelDelta)) * KWheel; +end; + +procedure TfsSyntaxMemo.DialogKey(var Key: Word; Shift: TShiftState); +begin + inherited; + if Key = 9 then + begin + if Shift = [] then + begin + if FSelStart.X <> 0 then + DoCtrlI + else + TabIndent; + end + else if Shift = [ssShift] then + DoCtrlU; + FMoved := True; + end; +end; + +procedure TfsSyntaxMemo.KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); +var + MyKey: Boolean; +begin + inherited; + FAllowLinesChange := False; + + FTempPos := FPos; + MyKey := True; + case Key of + vkLeft: + if ssCtrl in Shift then + DoCtrlL else + DoLeft; + + vkRight: + if ssCtrl in Shift then + DoCtrlR else + DoRight; + + vkUp: + DoUp; + + vkDown: + DoDown; + + vkHome: + DoHome(ssCtrl in Shift); + + vkEnd: + DoEnd(ssCtrl in Shift); + + vkPrior: + DoPgUp; + + vkNext: + DoPgDn; + + vkReturn: + if Shift = [] then + DoReturn; + + vkDelete: + if ssShift in Shift then + CutToClipboard else + DoDel; + + vkBack: + DoBackspace; + + vkInsert: + if ssCtrl in Shift then + CopyToClipboard + else if ssShift in Shift then + PasteFromClipboard; + + vkF3: + Find(LastSearch); // F3 Repeat search + + else + MyKey := False; + end; + + if (Shift = [ssCtrl]) or (Shift = [ssCommand]) then + begin + MyKey := True; + if (Key = Ord('c')) or (Key = Ord('C')) then // Ctrl+C Copy + CopyToClipboard + else if (Key = Ord('v')) or (Key = Ord('V')) then // Ctrl+V Paste + PasteFromClipboard + else if (Key = Ord('x')) or (Key = Ord('X')) then // Ctrl+X Cut + CutToClipboard + else if (Key = Ord('z')) or (Key = Ord('Z')) then // Ctrl+Z Undo + Undo + else if (Key = Ord('a')) or (Key = Ord('A')) then // Ctrl+A Select all + begin + SetPos(0, 0); + FSelStart := FPos; + SetPos(LineLength(FText.Count - 1) + 1, FText.Count); + FSelEnd := FPos; + Repaint; + end + else if (Key = Ord('f')) or (Key = Ord('F')) then // Ctrl+F Search + begin + SynMemoSearch := TfsSynMemoSearch.Create(nil); + if SynMemoSearch.ShowModal = mrOk then + Find(SynMemoSearch.Edit1.Text); + LastSearch := SynMemoSearch.Edit1.Text; + SynMemoSearch.Free; + end + else if (Key = Ord('y')) or (Key = Ord('Y')) then // Ctrl+Y Delete line + begin + if FText.Count > FPos.Y then + begin + FMoved := True; + AddUndo; + FText.Delete(FPos.Y - 1); + CorrectBookmark(FPos.Y, -1); + UpdateSyntax; + end + else + if FText.Count = FPos.Y then + begin + FMoved := True; + AddUndo; + FText[FPos.Y - 1] := ''; + FPos.X := 1; + SetPos(FPos.X, FPos.Y); + UpdateSyntax; + end + end + else if Key in [48..57] then + GotoBookmark(Key-48) + else + MyKey := False; + end; + + if Shift = [ssCtrl, ssShift] then + if Key in [48..57] then + if IsBookmark(FPos.Y - 1) < 0 then + AddBookmark(FPos.Y - 1, Key-48) + else + if IsBookmark(FPos.Y - 1) = (Key-48) then + DeleteBookmark(Key-48); + + + if Key in [vkLeft, vkRight, vkUp, vkDown, vkHome, vkEnd, vkPrior, vkNext] then + begin + FMoved := True; + if ssShift in Shift then + AddSel else + ClearSel; + end + else if Key in [vkReturn, vkDelete, vkBack, vkInsert] then + FMoved := True; + + case WideChar(KeyChar) of + #0032..#$FFFF: + if (Shift = []) or (Shift = [ssShift]) then + begin + DoChar(WideChar(KeyChar)); + FMoved := True; + end; + else + MyKey := False; + end; + if MyKey then + Key := 0; +end; + +procedure TfsSyntaxMemo.DoLeft; +begin + Dec(FPos.X); + if FPos.X < 1 then + FPos.X := 1; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoRight; +begin + Inc(FPos.X); + if FPos.X > FMaxLength then + FPos.X := FMaxLength; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoUp; +begin + Dec(FPos.Y); + if FPos.Y < 1 then + FPos.Y := 1; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoDown; +begin + Inc(FPos.Y); + if FPos.Y > FText.Count then + FPos.Y := FText.Count; + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoHome(Ctrl: Boolean); +begin + if Ctrl then + SetPos(1, 1) else + SetPos(1, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoEnd(Ctrl: Boolean); +begin + if Ctrl then + SetPos(LineLength(FText.Count - 1) + 1, FText.Count) else + SetPos(LineLength(FPos.Y - 1) + 1, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoExit; +begin +{$IFDEF Delphi17} + inherited; +{$IFNDEF DELPHI18} + CaretVisible := False; +{$ELSE} + HideCaret; +{$ENDIF} +{$ELSE} + Platform.HideVirtualKeyboard; + inherited; + HideCaret; +{$ENDIF} +end; + +procedure TfsSyntaxMemo.DoPgUp; +begin + if FOffset.Y > FWindowSize.Y then + begin + FOffset.Y := FOffset.Y - (FWindowSize.Y - 1); + FPos.Y := FPos.Y - (FWindowSize.Y - 1); + end + else + begin + if FOffset.Y > 0 then + begin + FPos.Y := FPos.Y - FOffset.Y; + FOffset.Y := 0; + end + else + FPos.Y := 1; + end; + SetPos(FPos.X, FPos.Y); + Repaint; +end; + +procedure TfsSyntaxMemo.DoPgDn; +begin + if FOffset.Y + FWindowSize.Y < FText.Count then + begin + FOffset.Y := FOffset.Y + (FWindowSize.Y - 1); + FPos.Y := FPos.Y + (FWindowSize.Y - 1); + end + else + begin + FOffset.Y := FText.Count; + FPos.Y := FText.Count; + end; + SetPos(FPos.X, FPos.Y); + Repaint; +end; + +procedure TfsSyntaxMemo.DoReturn; +var + s: String; +begin + if FReadOnly then exit; + s := LineAt(FPos.Y - 1); + FText[FPos.Y - 1] := Copy(s, 1, FPos.X - 1); + FText.Insert(FPos.Y, Copy(s, FPos.X, FMaxLength)); + EnterIndent; +end; + +procedure TfsSyntaxMemo.DoDel; +var + s: String; +begin + if FReadOnly then exit; + FMessage := ''; + if FSelStart.X <> 0 then + SelText := '' + else + begin + s := FText[FPos.Y - 1]; + AddUndo; + if FPos.X <= LineLength(FPos.Y - 1) then + begin + Delete(s, FPos.X, 1); + FText[FPos.Y - 1] := s; + end + else if FPos.Y < FText.Count then + begin + s := s + Pad(FPos.X - Length(s) - 1) + LineAt(FPos.Y); + FText[FPos.Y - 1] := s; + FText.Delete(FPos.Y); + CorrectBookmark(FSelStart.Y, -1); + end; + UpdateScrollBar; + UpdateSyntax; + DoChange; + end; +end; + +procedure TfsSyntaxMemo.DoBackspace; +var + s: String; +begin + if FReadOnly then exit; + FMessage := ''; + if FSelStart.X <> 0 then + SelText := '' + else + begin + s := FText[FPos.Y - 1]; + if FPos.X > 1 then + begin + if (GetLineBegin(FPos.Y - 1) = FPos.X) or (Trim(s) = '') then + UnIndent + else + begin + AddUndo; + if Trim(s) <> '' then + begin + Delete(s, FPos.X - 1, 1); + FText[FPos.Y - 1] := s; + DoLeft; + end + else + DoHome(False); + UpdateSyntax; + DoChange; + end; + end + else if FPos.Y > 1 then + begin + AddUndo; + CorrectBookmark(FPos.Y, -1); + s := LineAt(FPos.Y - 2); + FText[FPos.Y - 2] := s + FText[FPos.Y - 1]; + FText.Delete(FPos.Y - 1); + SetPos(Length(s) + 1, FPos.Y - 1); + UpdateSyntax; + DoChange; + end; + end; +end; + +procedure TfsSyntaxMemo.DoCtrlI; +begin + if FSelStart.X <> 0 then + ShiftSelected(True); +end; + +procedure TfsSyntaxMemo.DoCtrlU; +begin + if FSelStart.X <> 0 then + ShiftSelected(False); +end; + +procedure TfsSyntaxMemo.DoCtrlL; +var + i: Integer; + s: String; +begin + s := FText.Text; + i := Length(LineAt(FPos.Y - 1)); + if FPos.X > i then + FPos.X := i; + + i := GetPlainTextPos(FPos); + + Dec(i); + while (i > 0) and not (CharInSet(s[i], WordChars) or IsUnicodeChar(s[i])) do + if s[i] = Char(LineBreak[1]) then + break else + Dec(i); + while (i > 0) and (CharInSet(s[i], WordChars) or IsUnicodeChar(s[i])) do + Dec(i); + Inc(i); + + FPos := GetPosPlainText(i); + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoCtrlR; +var + i: Integer; + s: String; +begin + s := FText.Text; + i := Length(LineAt(FPos.Y - 1)); + if FPos.X > i then + begin + DoDown; + DoHome(False); + FPos.X := 0; + end; + + i := GetPlainTextPos(FPos); + while (i < Length(s)) and ((CharInSet(s[i], WordChars)) or IsUnicodeChar(s[i])) do + Inc(i); + while (i < Length(s)) and not ((CharInSet(s[i], WordChars)) or IsUnicodeChar(s[i])) do + if s[i] = Char(LineBreak[1]) then + break else + Inc(i); + FPos := GetPosPlainText(i); + SetPos(FPos.X, FPos.Y); +end; + +procedure TfsSyntaxMemo.DoChar(Ch: Char); +begin + SelText := Ch; +end; + +function TfsSyntaxMemo.GetCharAttr(Pos: TPoint): TCharAttributes; + + function IsBlock: Boolean; + var + p1, p2, p3: Integer; + begin + Result := False; + if FSelStart.X = 0 then exit; + + p1 := FSelStart.X + FSelStart.Y * FMaxLength; + p2 := FSelEnd.X + FSelEnd.Y * FMaxLength; + if p1 > p2 then + begin + p3 := p1; + p1 := p2; + p2 := p3; + end; + p3 := Pos.X + Pos.Y * FMaxLength; + Result := (p3 >= p1) and (p3 < p2); + end; + + function CharAttr: TCharAttr; + var + s: String; + begin + if Pos.Y - 1 < FSynStrings.Count then + begin + s := FSynStrings[Pos.Y - 1]; + if Pos.X <= Length(s) then + Result := TCharAttr(Ord(s[Pos.X])) else + Result := caText; + end + else + Result := caText; + end; + +begin + Result := [CharAttr]; + if IsBlock then + Result := Result + [caBlock]; +end; + +function TfsSyntaxMemo.GetCharWidth(Str: String): Single; +var + r: TRectF; + dx: Single; + j, j1: Integer; + a, a1: TCharAttributes; + + function CalcSize(LStr: String): Single; + begin + if FIsMonoType then + begin + Result := FCharWidth * Length(LStr); + Exit; + end; + if LStr = '' then + begin + Result := 0; + Exit; + end; + + r := RectF(0, 0, 100000, 100000); + { MeasureText trunc all spaces at the end, so we are using this hack to calcl size with spaces } + FTmpCanvas.Canvas.MeasureText(r, LStr + 'W', False, [], TTextAlign.taLeading); + dx := r.Width; + FTmpCanvas.Canvas.MeasureText(r, 'W', False, [], TTextAlign.taLeading); + Result := dx - r.Width; + end; +begin + + j1 := 1; + a := GetCharAttr(Point(1, FPos.Y)); + a1 := a; + Result := 0; + + for j := 1 to Length(Str) do + begin + a1 := GetCharAttr(Point(j, FPos.Y)); + if a1 <> a then + begin + SetAttr(FTmpCanvas.Canvas, a); + Result := Result + CalcSize(Copy(Str, j1, (j - j1))); + a := a1; + j1 := j; + end; + end; + SetAttr(FTmpCanvas.Canvas, a); + Result := Result + CalcSize(Copy(Str, j1, Length(Str) - (j1 - 1))); +end; + +procedure TfsSyntaxMemo.Paint; +var + i, j, j1: Integer; + a, a1: TCharAttributes; + s: String; + x, y: Single; + aClientR: TRectF; + aSelColor, aSelFontColor: TAlphaColor; + + procedure SetAttrL(a: TCharAttributes); + begin + SetAttr(Canvas, a); + aSelColor := FFill.Color; + aSelFontColor := Canvas.Fill.Color; + if caBlock in a then + begin + aSelColor := FBlockColor; + aSelFontColor := FBlockFontColor; + end; + + // make non-selected text looking good + if aSelColor = FFill.Color then + aSelColor := 0; + end; + + function MyTextOut(x, y: Single; const s: String): Single; + var + i: Integer; + dx, dy: Single; + r: TRectF; + begin + with Canvas do + begin + r := RectF(0, 0, 100000, 100000); + { MeasureText trunc all spaces at the end, so we are using this hack to calcl size with spaces } + Canvas.MeasureText(r, s + 'W',False, [], TTextAlign.taLeading); + dx := r.Width + x; + Canvas.MeasureText(r, 'W', False, [], TTextAlign.taLeading); + dx := dx - r.Width; + if dx > (aClientR.Right - aClientR.Left) then + dx := aClientR.Right - aClientR.Left; + dy := y + FCharHeight; + if FIsMonoType then + dx := x + FCharWidth * Length(s); + Fill.Color := aSelColor; + FillRect(RectF(x + 1, y, dx + 1, dy + 1), 0, 0, AllCorners, 1); + Fill.Color := aSelFontColor; + if FIsMonoType then + FillText(RectF(x, y, dx + 1, 10000), + s, False, 1, [], TTextAlign.taLeading, TTextAlign.taLeading) + else + begin + for i := 1 to Length(s) do + FillText(RectF(x + (i - 1) * FCharWidth, y, + (x + (i - 1) * FCharWidth) + FCharWidth, y + FCharHeight), + s[i], False, 1, FillTextFlags, TTextAlign.taLeading, TTextAlign.taLeading); + end; + end; + Result := dx; + end; + +begin + aClientR := GetClientRect; + with Canvas do + begin + Fill.Assign(FBorder.Fill); + FillRect(RectF(0, 0, Self.Width , Self.Height), 0, 0, AllCorners, 1, TCornerType.ctBevel); + Fill.Assign(FFill); + FillRect(aClientR, 0, 0, AllCorners, 1, TCornerType.ctBevel); + Fill.Assign(FGutterFill); + FillRect(RectF(FGutterWidth - aClientR.Left, + Self.Height - FFooterHeight - aClientR.Top, + aClientR.Left, aClientR.Top), 0, 0, AllCorners, 1, TCornerType.ctBevel); + FillRect(RectF(aClientR.Left, Self.Height - FFooterHeight - aClientR.Top, + Self.Width - aClientR.Left, Self.Height - aClientR.Top), 1, 1, + AllCorners, 1, TCornerType.ctBevel); + + Stroke.Assign(FBorder.Fill); +{$IFDEF DELPHI25} + Stroke.Cap := TStrokeCap.scRound; + Stroke.Thickness := FBorder.Width; +{$ELSE} + StrokeCap := TStrokeCap.scRound; + StrokeThickness := FBorder.Width; +{$ENDIF} + x := FGutterWidth - FBorder.Width; + DrawLine(PointF(x, aClientR.Top + 1), PointF(x, aClientR.Bottom - FFooterHeight ), 1); + if FFooterHeight > 0 then + DrawLine(PointF(x, aClientR.Bottom - FFooterHeight), + PointF(aClientR.Right - 1, aClientR.Bottom - FFooterHeight), 1); + if FUpdatingSyntax then Exit; + + for i := FOffset.Y to FOffset.Y + FWindowSize.Y - 1 do + begin + if i >= FText.Count then break; + + s := FText[i]; + j1 := FOffset.X + 1; + a := GetCharAttr(Point(j1, i + 1)); + a1 := a; + x := FGutterWidth + FBorder.Width; + y := aClientR.Top + (i - FOffset.Y) * FCharHeight; + for j := j1 to FOffset.X + FWindowSize.X do + begin + if j > Length(s) then break; + + a1 := GetCharAttr(Point(j, i + 1)); + if a1 <> a then + begin + SetAttrL(a); + x := MyTextOut(x, y, Copy(FText[i], j1, j - j1)); + a := a1; + j1 := j; + end; + end; + + SetAttrL(a); + + MyTextOut(x, y, Copy(s, j1, FMaxLength)); + + BookmarkDraw(y, i); + ActiveLineDraw(y, i); + end; + + if FMessage <> '' then + begin + Font.Family := 'Tahoma'; + Font.Style := [TFontStyle.fsBold]; + Font.Size := 8; + Fill.Color := TAlphaColorRec.Maroon; + FillRect(RectF(aClientR.Left, aClientR.Bottom - TextHeight('|') - 6, aClientR.Right , aClientR.Bottom), 0, 0, + AllCorners, 1, TCornerType.ctBevel); + Fill.Color := TAlphaColorRec.White; + FillText(RectF(aClientR.Left + 6, aClientR.Bottom - TextHeight('|') - 5, + 6 + TextWidth('W') * Length(FMessage), aClientR.Bottom), FMessage, + False, 1, [], TTextAlign.taLeading) + end + else + ShowPos; + end; +end; + +procedure TfsSyntaxMemo.CreateSynArray; +var + i, n, Pos: Integer; + ch: Char; + FSyn: String; + + procedure SkipSpaces; + begin + while (Pos <= Length(FSyn)) and + ((CharInSet(FSyn[Pos], [#1..#32])) or + not (CharInSet(FSyn[Pos],['_', 'A'..'Z', 'a'..'z', '''', '"', '/', '{', '(', '-']))) do + Inc(Pos); + end; + + function IsKeyWord(const s: String): Boolean; + begin + Result := False; + if FKeywords = '' then exit; + + if FKeywords[1] <> ',' then + FKeywords := ',' + FKeywords; + if FKeywords[Length(FKeywords)] <> ',' then + FKeywords := FKeywords + ','; + + Result := System.Pos(',' + AnsiLowerCase(s) + ',', FKeywords) <> 0; + end; + + function GetIdent: TCharAttr; + var + i: Integer; + cm1, cm2, cm3, cm4, st1: Char; + begin + i := Pos; + Result := caText; + + if FSyntaxType = stPascal then + begin + cm1 := '/'; + cm2 := '{'; + cm3 := '('; + cm4 := ')'; + st1 := ''''; + end + else if FSyntaxType in [stCpp,stJs,stVb] then + begin + cm1 := '/'; + cm2 := ' '; + cm3 := '/'; + cm4 := '/'; + st1 := '"'; + end + else if FSyntaxType = stSQL then + begin + cm1 := '-'; + cm2 := ' '; + cm3 := '/'; + cm4 := '/'; + st1 := '"'; + end + else + begin + cm1 := ' '; + cm2 := ' '; + cm3 := ' '; + cm4 := ' '; + st1 := ' '; + end; + + if CharInSet(FSyn[Pos], ['_', 'A'..'Z', 'a'..'z']) then + begin + while CharInSet(FSyn[Pos], ['_', 'A'..'Z', 'a'..'z', '0'..'9']) do + Inc(Pos); + if IsKeyWord(Copy(FSyn, i, Pos - i)) then + Result := caKeyword; + Dec(Pos); + end + else if (FSyn[Pos] = cm1) and (FSyn[Pos + 1] = cm1) then + begin + while (Pos <= Length(FSyn)) and not (CharInSet(FSyn[Pos], [#10, #13])) do + Inc(Pos); + Result := caComment; + end + else if FSyn[Pos] = cm2 then + begin + while (Pos <= Length(FSyn)) and (FSyn[Pos] <> '}') do + Inc(Pos); + Result := caComment; + end + else if (FSyn[Pos] = cm3) and (FSyn[Pos + 1] = '*') then + begin + while (Pos < Length(FSyn)) and not ((FSyn[Pos] = '*') and (FSyn[Pos + 1] = cm4)) do + Inc(Pos); + Inc(Pos, 2); + Result := caComment; + end + else if FSyn[Pos] = st1 then + begin + Inc(Pos); + while (Pos < Length(FSyn)) and (FSyn[Pos] <> st1) and not (CharInSet(FSyn[Pos], [#10, #13])) do + Inc(Pos); + Result := caString; + end; + Inc(Pos); + end; + +begin + FSyn := FText.Text + #0#0#0#0#0#0#0#0#0#0#0; + FAllowLinesChange := False; + Pos := 1; + + while Pos < Length(FSyn) do + begin + n := Pos; + SkipSpaces; + for i := n to Pos - 1 do + if FSyn[i] > #31 then + FSyn[i] := Chr(Ord(caText)); + + n := Pos; + ch := Chr(Ord(GetIdent)); + for i := n to Pos - 1 do + if i <= Length(FSyn) then + if FSyn[i] > #31 then + FSyn[i] := ch; + end; + + FUpdatingSyntax := True; + FSynStrings.Text := FSyn; + FSynStrings.Add(' '); + FUpdatingSyntax := False; +end; + +procedure TfsSyntaxMemo.UpdateView; +begin + UpdateSyntax; + Repaint; +end; + +procedure TfsSyntaxMemo.UpdateWindowSize; +begin + if FCharWidth = 0 then exit; + FWindowSize := Point(Trunc((Width - FGutterWidth - FBorder.Width * 2) / FCharWidth), + Trunc((Height - FFooterHeight - FBorder.Width * 2) / FCharHeight)); +end; + +procedure TfsSyntaxMemo.CopyPopup(Sender: TObject); +begin + CopyToClipboard; +end; + +procedure TfsSyntaxMemo.PastePopup(Sender: TObject); +begin + PasteFromClipboard; +end; + +procedure TfsSyntaxMemo.Resize; +begin + inherited; + UpdateWindowSize; + FVScroll.Position.Y := FBorder.Width; + FVScroll.Height := Height - FFooterHeight - FBorder.Width; + FVScroll.Width := 16; + FVScroll.Position.X := Width - FVScroll.Width - FBorder.Width; + UpdateScrollBar; +end; + +procedure TfsSyntaxMemo.CutPopup(Sender: TObject); +begin + CutToClipboard; +end; + +procedure TfsSyntaxMemo.SetShowGutter(Value: boolean); +begin + FShowGutter := Value; + if Value then + FGutterWidth := 20 + else + FGutterWidth := 0; + Repaint; +end; + +procedure TfsSyntaxMemo.SetShowFooter(Value: boolean); +begin + FShowFooter := Value; + if Value then + FFooterHeight := 20 + else + FFooterHeight := 0; + Repaint; +end; + +function TfsSyntaxMemo.FMemoFind(Text: String; var Position : TPoint): boolean; +var + i, j : integer; +begin + j := 0; + result := False; + if FText.Count > 1 then + begin + Text := UpperCase(Text); + for i := Position.Y to FText.Count - 1 do + begin + j := Pos( Text, UpperCase(FText[i])); + if j > 0 then + begin + Result := True; + break; + end + end; + Position.X := j; + Position.Y := i + 1; + end; +end; + +procedure TfsSyntaxMemo.FontChanged(Sender: TObject); +begin + FCommentAttr.Font.Size := FFontSettings.Font.Size; + FCommentAttr.Font.Family := FFontSettings.Font.Family; + FKeywordAttr.Font.Size := FFontSettings.Font.Size; + FKeywordAttr.Font.Family := FFontSettings.Font.Family; + FStringAttr.Font.Size := FFontSettings.Font.Size; + FStringAttr.Font.Family := FFontSettings.Font.Family; + FTextAttr.Font.Size := FFontSettings.Font.Size; + FTextAttr.Font.Family := FFontSettings.Font.Family; + CalcCharSize; + { need to uptade size, maybe font size was changed } + UpdateWindowSize; +end; + +function TfsSyntaxMemo.Find(Text: String): boolean; +var + Position: TPoint; +begin + Position := FPos; + if FMemoFind(Text, Position) then + begin + SetPos(Position.X, Position.Y); + result := true; + end + else + begin + ShowMessage('Text "'+Text+'" not found.'); + result := false; + end; +end; + +procedure TfsSyntaxMemo.ActiveLineDraw(Y : Single; ALine : integer); +begin + if ShowGutter then + with Canvas do + if ALine = FActiveLine then + begin + Fill.Color := TAlphaColorRec.Red; + //Pen.Color := clBlack; + FillEllipse(RectF(4, Y + 4, 11, Y + 15), 1); + end; +end; + +procedure TfsSyntaxMemo.BookmarkDraw(Y : Single; ALine : integer); +var + bm : integer; +begin + if ShowGutter then + with Canvas do + begin + bm := IsBookmark(ALine); + if bm >= 0 then + begin + Fill.Color := TAlphaColorRec.Black; + FillRect(RectF(3 + Border.Width, Y + 1, 13 + Border.Width, Y + 12), 0, 0, + AllCorners, 1, TCornerType.ctBevel); + Fill.Color := TAlphaColorRec.Green; + FillRect(RectF(2 + Border.Width, Y + 2, 12 + Border.Width, Y + 13), 0, 0, + AllCorners, 1, TCornerType.ctBevel); + Font.Family := 'Tahoma'; + Fill.Color := TAlphaColorRec.White; + Font.Style := [TFontStyle.fsBold]; + Font.Size := 7; + y := y + 2.0; + FillText(RectF(4 + Border.Width, Y, 4 + TextWidth('7') + Border.Width, + Y + TextHeight('7')), IntToStr(bm), False, 1, [], TTextAlign.taLeading) + end; + end; +end; + +function TfsSyntaxMemo.IsBookmark(Line : integer): integer; +var + Pos : integer; +begin + Result := -1; + for Pos := 0 to Length(Bookmarks) - 1 do + if Bookmarks[Pos] = Line then + begin + Result := Pos; + break; + end; +end; + +procedure TfsSyntaxMemo.AddBookmark(Line, Number : integer); +begin + if Number < Length(Bookmarks) then + begin + Bookmarks[Number] := Line; + Repaint; + end; +end; + +procedure TfsSyntaxMemo.DeleteBookmark(Number : integer); +begin + if Number < Length(Bookmarks) then + begin + Bookmarks[Number] := -1; + Repaint; + end; +end; + +procedure TfsSyntaxMemo.CorrectBookmark(Line : integer; delta : integer); +var + i : integer; +begin + for i := 0 to Length(Bookmarks) - 1 do + if Bookmarks[i] >= Line then + Inc(Bookmarks[i], Delta); +end; + +procedure TfsSyntaxMemo.GotoBookmark(Number : integer); +begin + if Number < Length(Bookmarks) then + if Bookmarks[Number] >= 0 then + SetPos(0, Bookmarks[Number] + 1); +end; + +procedure TfsSyntaxMemo.DOver(Sender: TObject; const Data: TDragObject; const Point: TPointF; {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); +begin +{$IFNDEF DELPHI20} + Accept := Data.Source is TTreeView; +{$ELSE} + if Data.Source is TTreeView then + Operation := TDragOperation.Copy; +{$ENDIF} +end; + +procedure TfsSyntaxMemo.DDrop(Sender: TObject; const Data: TDragObject; const Point: TPointF); +begin + if Data.Source is TTreeView then + begin + SetPos(Round((Point.X - FGutterWidth) / FCharWidth) + 1 + FOffset.X, + Round(Point.Y / FCharHeight) + 1 + FOffset.Y); + SetSelText(TTreeView(Data.Source).Selected.Text); + end; +end; + +procedure TfsSyntaxMemo.SetKeywordAttr(Value: TfsFontSettings); +begin + FKeywordAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetStringAttr(Value: TfsFontSettings); +begin + FStringAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetTextAttr(Value: TfsFontSettings); +begin + FTextAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetCommentAttr(Value: TfsFontSettings); +begin + FCommentAttr.Assign(Value); + UpdateSyntax; +end; + +procedure TfsSyntaxMemo.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetFontSettings(const Value: TfsFontSettings); +begin + FFontSettings.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetGutterFill(const Value: TBrush); +begin + FGutterFill.Assign(Value); +end; + +procedure TfsSyntaxMemo.SetActiveLine(Line : Integer); +begin + FActiveLine := Line; + Repaint; +end; + +procedure TfsSyntaxMemo.SetAttr(aCanvas: TCanvas; a: TCharAttributes); +begin + with aCanvas do + begin + Font.Assign(FFontSettings.Font); + Canvas.Fill.Assign(FFontSettings.Fill); + + if caText in a then + begin + Font.Assign(FTextAttr.Font); + Canvas.Fill.Assign(FTextAttr.Fill); + end; + + if caComment in a then + begin + Font.Assign(FCommentAttr.Font); + Canvas.Fill.Assign(FCommentAttr.Fill); + end; + + if caKeyword in a then + begin + Font.Assign(FKeywordAttr.Font); + Canvas.Fill.Assign(FKeywordAttr.Fill); + end; + + if caString in a then + begin + Font.Assign(FStringAttr.Font); + Canvas.Fill.Assign(FStringAttr.Fill); + end; + end; +end; + + + +procedure TfsSyntaxMemo.SetBorder(const Value: TfsBorderSettings); +begin + FBorder.Fill.Assign(Value.Fill); + FBorder.Width := Value.Width; +end; + +function TfsSyntaxMemo.GetActiveLine: Integer; +begin + Result := FActiveLine; +end; + +procedure TfsSynMemoSearch.FormKeyPress(Sender: TObject; var Key: Char); +begin + if Key = #13 then + ModalResult := mrOk; +end; + +{ TfsBorderSettings } + +constructor TfsBorderSettings.Create; +begin + FFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.Silver); + FWidth := 1; +end; + +destructor TfsBorderSettings.Destroy; +begin + FFill.Free; + inherited; +end; + +procedure TfsBorderSettings.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TfsBorderSettings.SetWidth(const Value: Integer); +begin + if Value > 3 then + FWidth := 3 + else if Value < 0 then + FWidth := 0 + else + FWidth := Value; +end; + +{ TfsFontSettings } + +procedure TfsFontSettings.Assign(Source: TPersistent); +begin + inherited; + if Source is TfsFontSettings then + begin + Fill.Assign(TfsFontSettings(Source).Fill); + Font.Assign(TfsFontSettings(Source).Font); + end; +end; + +constructor TfsFontSettings.Create(); +begin + FFill := TBrush.Create(TBrushKind.bkSolid, TAlphaColorRec.Black); + FFont := TFont.Create; + FFont.Family := 'Courier New'; + FFont.Size := 13; +end; + +destructor TfsFontSettings.Destroy; +begin + FFill.Free; + FFont.Free; + inherited; +end; + +procedure TfsFontSettings.SetFill(const Value: TBrush); +begin + FFill.Assign(Value); +end; + +procedure TfsFontSettings.SetFont(const Value: TFont); +begin + FFont.Assign(Value); +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsSyntaxMemo, TFmxObject); + GroupDescendentsWith(TfsBorderSettings, TFmxObject); + GroupDescendentsWith(TfsFontSettings, TFmxObject); + + RegisterFmxClasses([TfsBorderSettings, TfsFontSettings]); + +end. diff --git a/FastScript/FMX/FMX.fs_tree.pas b/FastScript/FMX/FMX.fs_tree.pas new file mode 100644 index 0000000..be82786 --- /dev/null +++ b/FastScript/FMX/FMX.fs_tree.pas @@ -0,0 +1,659 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Function/Classes tree FMX visual control } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_tree; + +interface + +{$I fs.inc} + +uses + FMX.Types, + System.SysUtils, System.Classes, FMX.Controls, FMX.Forms, FMX.Dialogs, + FMX.ExtCtrls, FMX.fs_synmemo, FMX.Objects, + FMX.fs_XML, FMX.fs_iinterpreter, FMX.TreeView, FMX.Memo, System.UITypes, System.Types +{$IFDEF DELPHI18} + ,FMX.StdCtrls +{$ENDIF} +{$IFDEF DELPHI19} + , FMX.Graphics +{$ENDIF} +{$IFDEF DELPHI29} + , FMX.BaseTypeAliases, FMX.FormTypeAliases +{$ENDIF}; + +type + TfsTreeViewItem = class(TTreeViewItem) + private + FButton: TCustomButton; + FCloseImageIndex: Integer; + FOpenImageIndex: Integer; + FImgPos: Single; + function GetBitmap():TBitmap; + protected + procedure ApplyStyle; override; + public + constructor Create(AOwner: TComponent); override; + procedure Paint; override; + property CloseImageIndex: Integer read FCloseImageIndex write FCloseImageIndex; + property OpenImageIndex: Integer read FOpenImageIndex write FOpenImageIndex; + end; + +{$i frxPlatformsAttribute.inc} + + TfsTreeView = class(TTreeView) + private + FPicBitmap: TBitmap; + FIconWidth: Integer; + FIconHeight: Integer; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure LoadResouces(Stream: TStream; IconWidth, IconHeight: Integer); + property PicPitmap: TBitmap read FPicBitmap write FPicBitmap; + property IconWidth: Integer read FIconWidth write FIconWidth; + property IconHeight: Integer read FIconHeight write FIconHeight; + function GetBitmapRect(Index: Integer): TRectF; + procedure DragOver(const Data: TDragObject; const Point: TPointF; {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); override; + procedure DragDrop(const Data: TDragObject; const Point: TPointF); override; + published + property StyleLookup; + property CanFocus default True; + property DisableFocusEffect; + property TabOrder; + property AllowDrag default False; + property AlternatingRowBackground default False; + property ItemHeight; +// property HideSelectionUnfocused default False; + property MultiSelect default False; + property ShowCheckboxes default False; + property Sorted default False; + property OnChange; + property OnChangeCheck; + property OnCompare; + property OnDragChange; + end; + +{$i frxPlatformsAttribute.inc} + TfsTree = class(TPanel) + private + Tree: TfsTreeView; + FXML: TfsXMLDocument; + FScript: TfsScript; + FImages: TList; + FShowFunctions: boolean; + FShowClasses: boolean; + FShowTypes: Boolean; + FShowVariables: Boolean; + FExpanded: boolean; + FExpandLevel : integer; + FMemo: TfsSyntaxMemo; + FUpdating: Boolean; + procedure FillTree; + + procedure SetMemo(Value: TfsSyntaxMemo); + + procedure SetScript(const Value: TfsScript); + protected + {$IFDEF DELPHI19} + procedure CreateImageFromRes(Image: TImage; Bmp: FMX.Graphics.TBitmap; + Width, Height: Integer; Index: Integer); + {$ELSE} + procedure CreateImageFromRes(Image: TImage; Bmp: FMX.Types.TBitmap; + Width, Height: Integer; Index: Integer); +{$ENDIF} + + procedure TreeChange(Sender: TObject; Node: TTreeViewItem); + procedure TreeDblClick(Sender: TObject); + procedure Notification(AComponent: TComponent; + Operation: TOperation); override; + protected + procedure Loaded; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure SetColor(Color: TAlphaColor); + procedure UpdateItems; + function GetFieldName: String; + published + property Align; + property Anchors; + property DragMode; + property Enabled; + property PopupMenu; + property Script: TfsScript read FScript write SetScript; + property ShowHint; + property TabOrder; + property Visible; + + property SyntaxMemo: TfsSyntaxMemo read FMemo write SetMemo; + property ShowClasses: boolean read FShowClasses write FShowClasses; + property ShowFunctions: boolean read FShowFunctions write FShowFunctions; + property ShowTypes: boolean read FShowTypes write FShowTypes; + property ShowVariables: boolean read FShowVariables write FShowVariables; + property Expanded: boolean read FExpanded write FExpanded; + property ExpandLevel: integer read FExpandLevel write FExpandLevel; + + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property Left; + property Top; + property Width; + property Height; + end; + +implementation + +{$IFNDEF FPC} + {$R fs_tree.res} +{$ENDIF} + +uses FMX.fs_iTools; + +constructor TfsTree.Create(AOwner: TComponent); +var + S: TResourceStream; +begin + inherited; + DragMode := TDragMode.dmManual; + Tree := TfsTreeView.Create(Self); + Tree.Stored := False; + with Tree do + begin + Parent := Self; + DragMode := TDragMode.dmAutomatic; + Align := TAlignLayout.alClient; + TabOrder := 0; + end; + FImages := TList.Create(); + S := TResourceStream.Create(HInstance, 'FSTREEFMX', RT_RCDATA);//RT_RCDATA + S.Position := 0; + Tree.LoadResouces(S, 16, 16); + S.Free; + Tree.OnDblClick := TreeDblClick; + FXML := TfsXMLDocument.Create; + Expanded := True; + ExpandLevel := 0; + ShowClasses := True; + ShowFunctions := True; + ShowTypes := True; + ShowVariables := True; + UpdateItems; + Top := 0; + Left := 0; + Height := 250; + Width := 200; +end; + + + {$IFDEF DELPHI19} +procedure TfsTree.CreateImageFromRes(Image: TImage; Bmp: FMX.Graphics.TBitmap; + Width, Height, Index: Integer); + {$ELSE} +procedure TfsTree.CreateImageFromRes(Image: TImage; Bmp: FMX.Types.TBitmap; + Width, Height, Index: Integer); +{$ENDIF} +begin + Image.Width := Width; + Image.Height := Height; + Image.Bitmap.SetSize(Width, Height); + Image.Bitmap.Canvas.BeginScene; + Image.Bitmap.Canvas.DrawBitmap(Bmp, RectF(Width * Index , 0, Width * Index + Width , Height), RectF(0, 0, Width, Height), 1 ); + Image.Bitmap.Canvas.EndScene; + //Image.Bitmap.BitmapChanged; +end; + +destructor TfsTree.Destroy; +begin + FImages.Free; + Tree.Free; + FUpdating := True; + FXML.Free; + inherited; +end; + +procedure TfsTree.FillTree; + + function GetCategoryByName(s: String): String; + begin + if s = 'ctConv' then result := 'Conversion' + else if s = 'ctFormat' then result := 'Formatting' + else if s = 'ctDate' then result := 'Date/Time' + else if s = 'ctString' then result := 'String routines' + else if s = 'ctMath' then result := 'Mathematical' + else if s = 'ctOther' then result := 'Other' + else result := s; + end; + + procedure AddClasses(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := xi.Prop['text']; + Node := TfsTreeViewItem.Create(Tree); + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 1; + Node.CloseImageIndex := 1; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddClasses(xi[i], Node); + end; + + procedure AddFunctions(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := xi.Prop['text']; + if xi.Count = 0 then + s := Copy(s, Pos(' ', s) + 1, 255) else { function } + s := GetCategoryByName(s); { category } + Node := TfsTreeViewItem.Create(Tree); + Node.DragMode := TDragMode.dmAutomatic; + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 0; + Node.CloseImageIndex := 0; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddFunctions(xi[i], Node); + end; + + procedure AddTypes(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := Copy(xi.Prop['text'], 1, 255); + Node := TfsTreeViewItem.Create(Tree); + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 0; + Node.CloseImageIndex := 0; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddTypes(xi[i], Node); + end; + + procedure AddVariables(xi: TfsXMLItem; Root: TfsTreeViewItem); + var + i: Integer; + Node: TfsTreeViewItem; + s: String; + begin + s := xi.Prop['text']; + Node := TfsTreeViewItem.Create(Tree); + Node.Text := s; + if Root <> nil then + Node.Parent := Root + else + Node.Parent := Tree; + Node.Parent.AddObject(Node); + if Root = nil then + Node.Text := xi.Name; + if xi.Count = 0 then + begin + Node.OpenImageIndex := 0; + Node.CloseImageIndex := 0; + end + else + begin + Node.OpenImageIndex := 3; + Node.CloseImageIndex := 2; + end; + for i := 0 to xi.Count - 1 do + AddVariables(xi[i], Node); + end; + + procedure ExpandNodes(level: integer); + var + j : integer; + + procedure ExpandNode(Node: TTreeViewItem; level: integer); + var + j : integer; + begin + if Node.Level < level then + for j := 0 to Node.Count - 1 do + begin + if Node.Items[j].Level < Level then + Node.Items[j].IsExpanded := True; + ExpandNode(Node.Items[j], Level); + end; + end; + begin + if level > 0 then + for j := 0 to Tree.Count - 1 do + begin + if Tree.Items[j].Level <= Level then + Tree.Items[j].IsExpanded := True; + ExpandNode(Tree.Items[j], Level); + end; + end; + +begin + FUpdating := True; + FXML.Root.Clear; + + GenerateXMLContents(fsGlobalUnit, FXML.Root); + if FScript <> nil then + GenerateXMLContents(FScript, FXML.Root); + + Tree.BeginUpdate; + Tree.Clear; + + if ShowClasses then + AddClasses(FXML.Root.FindItem('Classes'), nil); + + if ShowFunctions then + AddFunctions(FXML.Root.FindItem('Functions'), nil); + + if ShowTypes then + AddTypes(FXML.Root.FindItem('Types'), nil); + + if ShowVariables then + AddVariables(FXML.Root.FindItem('Variables'), nil); + + if Expanded then + ExpandNodes(ExpandLevel); + Tree.EndUpdate; + FUpdating := False; +end; + +procedure TfsTree.UpdateItems; +begin + FillTree; +end; + +procedure TfsTree.TreeChange(Sender: TObject; + Node: TTreeViewItem); +begin + if FUpdating then Exit; +end; + +procedure TfsTree.TreeDblClick(Sender: TObject); +begin + //if Assigned(SyntaxMemo) then + //if Tree.Selected.Count = 0 then + // SyntaxMemo.SelText := Tree.Selected.Text; + if Assigned(OnDblClick) then OnDblClick(Self); +end; + +function TfsTree.GetFieldName: String; +var + i, n: Integer; + s: String; +begin + Result := ''; + if (Tree.Selected <> nil) and (Tree.Selected.Count = 0) then + begin + s := Tree.Selected.Text; + if Pos('(', s) <> 0 then + n := 1 else + n := 0; + for i := 1 to Length(s) do +{$IFDEF Delphi12} + if (s[i] = ',') or (s[i] = ';') then +{$ELSE} + if s[i] in [',', ';'] then +{$ENDIF} + Inc(n); + + if n = 0 then + s := Copy(s, 1, Pos(':', s) - 1) + else + begin + s := Copy(s, 1, Pos('(', s)); + for i := 1 to n - 1 do + s := s + ','; + s := s + ')'; + end; + Result := s; + end; +end; + +procedure TfsTree.Loaded; +begin + Inherited; + +end; + +procedure TfsTree.SetColor(Color: TAlphaColor); +begin + //Tree.Canvas.Stroke.Color := TAlphaColorRec.Azure; + // Tree.Color := Color; +end; + +procedure TfsTree.SetMemo(Value: TfsSyntaxMemo); +begin + FMemo := Value; +end; + +procedure TfsTree.SetScript(const Value: TfsScript); +begin + FScript := Value; + UpdateItems; +end; + +procedure TfsTree.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if Operation = opRemove then + if AComponent = FScript then + FScript := nil + else if AComponent = FMemo then + FMemo := nil +end; + +{ TfsTreeViewItem } + +procedure TfsTreeViewItem.ApplyStyle; +var + B: TFmxObject; + Offset: Single; +begin + inherited; + B := FindStyleResource('button'); + if (B <> nil) and (B is TCustomButton) then + begin + FButton := TCustomButton(B); + B := FindStyleResource('text'); + Offset := 0; + if Self.TreeView is TfsTreeView then + Offset := TfsTreeView(Self.TreeView).IconWidth; + + if (B <> nil) and (B is TText) then + begin +{$IFDEF DELPHI17} + TText(B).Margins.Left := Offset; +{$ELSE} + TText(B).Padding.Left := Offset; +{$ENDIF} + end; + FImgPos := FButton.Position.X + FButton.Width - 2; + end; +end; + + +constructor TfsTreeViewItem.Create(AOwner: TComponent); +begin + inherited; + FImgPos := 0; + FCloseImageIndex := -1; + FOpenImageIndex := -1; +end; + +function TfsTreeViewItem.GetBitmap: TBitmap; +begin + Result := nil; + if TreeView is TfsTreeView then + begin + Result := TfsTreeView(TreeView).FPicBitmap; + end; +end; + +procedure TfsTreeViewItem.Paint; +var + Bmp: TBitmap; + IconRect: TRectF; + Index: Integer; +begin + inherited Paint; + if IsExpanded then + Index := FOpenImageIndex + else + Index := FCloseImageIndex; + + if Index = -1 then Exit; + + Bmp := GetBitmap; + if TreeView is TfsTreeView then + begin + IconRect := TfsTreeView(TreeView).GetBitmapRect(Index); + end; + if (Bmp <> nil) and (FImgPos > 0)then + Canvas.DrawBitmap(Bmp, IconRect, RectF(16, 0, 34, 16), 1 ); +end; + +{ TfsTreeView } + +constructor TfsTreeView.Create(AOwner: TComponent); +begin + inherited; + FPicBitmap := nil; + FIconWidth := 0; + FIconHeight := 0; +end; + +destructor TfsTreeView.Destroy; +begin + if FPicBitmap <> nil then + FPicBitmap.Free; + + inherited; +end; + +procedure TfsTreeView.DragDrop(const Data: TDragObject; const Point: TPointF); +begin + //inherited; + // don't use TTreeView handlers +end; + +procedure TfsTreeView.DragOver(const Data: TDragObject; const Point: TPointF; + {$IFNDEF DELPHI20}var Accept: Boolean{$ELSE} var Operation: TDragOperation{$ENDIF}); +begin + //inherited; + //don't use TTreeView handlers +end; + +function TfsTreeView.GetBitmapRect(Index: Integer): TRectF; +var + maxX, maxY, i: Integer; + PosX, PosY: Integer; +begin + Result := RectF(0, 0, 0, 0); + if FPicBitmap = nil then Exit; + PosX := 0; + PosY := 0; + maxX := FPicBitmap.Width div FIconWidth; + maxY := FPicBitmap.Height div FIconHeight; + + for i := 0 to maxY - 1 do + begin + if Index < maxX then + begin + PosX := FIconWidth * Index; + break; + end; + Index := Index div maxY; + Inc(PosY); + if PosY > maxY then + begin + PosX := 0; + PosY := 0; + break; + end; + end; + Result := RectF(PosX, PosY, PosX + FIconWidth, PosY + FIconHeight); +end; + +procedure TfsTreeView.LoadResouces(Stream: TStream; IconWidth, + IconHeight: Integer); +begin + FIconWidth := IconWidth; + FIconHeight := IconHeight; + if FPicBitmap = nil then + FPicBitmap := TBitmap.CreateFromStream(Stream) + else + FPicBitmap.LoadFromStream(Stream); +end; + +initialization + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsTreeViewItem, TFmxObject); + GroupDescendentsWith(TfsTreeView, TFmxObject); + GroupDescendentsWith(TfsTree, TFmxObject); + RegisterFmxClasses([TfsTreeViewItem, TfsTreeView]); + +end. diff --git a/FastScript/FMX/FMX.fs_xml.pas b/FastScript/FMX/FMX.fs_xml.pas new file mode 100644 index 0000000..11723e4 --- /dev/null +++ b/FastScript/FMX/FMX.fs_xml.pas @@ -0,0 +1,15 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ XML document } +{ } +{ (c) 2003-2011 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit FMX.fs_xml; + +{$i FMX.inc} +{$i fs_xml.pas} \ No newline at end of file diff --git a/FastScript/FMX/FMXfs16.dpk b/FastScript/FMX/FMXfs16.dpk new file mode 100644 index 0000000..60d40ad --- /dev/null +++ b/FastScript/FMX/FMXfs16.dpk @@ -0,0 +1,60 @@ +// Package file for Delphi XE2 + +package FMXfs16; + +{$R *.res} +{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DEFINE DEBUG} +{$ENDIF IMPLICITBUILDING} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + fmx; + +contains + FMX.fs_ipascal in 'FMX.fs_ipascal.pas', + FMX.fs_icpp in 'FMX.fs_icpp.pas', + FMX.fs_ijs in 'FMX.fs_ijs.pas', + FMX.fs_ibasic in 'FMX.fs_ibasic.pas', + FMX.fs_iclassesrtti in 'FMX.fs_iclassesrtti.pas', + FMX.fs_iconst in 'FMX.fs_iconst.pas', + FMX.fs_idialogsrtti in 'FMX.fs_idialogsrtti.pas', + FMX.fs_ievents in 'FMX.fs_ievents.pas', + FMX.fs_iexpression in 'FMX.fs_iexpression.pas', + FMX.fs_iextctrlsrtti in 'FMX.fs_iextctrlsrtti.pas', + FMX.fs_iformsrtti in 'FMX.fs_iformsrtti.pas', + FMX.fs_igraphicsrtti in 'FMX.fs_igraphicsrtti.pas', + FMX.fs_iilparser in 'FMX.fs_iilparser.pas', + FMX.fs_iinirtti in 'FMX.fs_iinirtti.pas', + FMX.fs_iinterpreter in 'FMX.fs_iinterpreter.pas', + FMX.fs_iparser in 'FMX.fs_iparser.pas', + FMX.fs_isysrtti in 'FMX.fs_isysrtti.pas', + FMX.fs_imenusrtti in 'FMX.fs_imenusrtti.pas', + FMX.fs_itools in 'FMX.fs_itools.pas', + FMX.fs_xml in 'FMX.fs_xml.pas', + FMX.fs_synmemo in 'FMX.fs_synmemo.pas', + FMX.fs_tree in 'FMX.fs_tree.pas'; + +end. diff --git a/FastScript/FMX/FMXfs16.res b/FastScript/FMX/FMXfs16.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs18.res b/FastScript/FMX/FMXfs18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs19.res b/FastScript/FMX/FMXfs19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs20.res b/FastScript/FMX/FMXfs20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs21.res b/FastScript/FMX/FMXfs21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs22.res b/FastScript/FMX/FMXfs22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs23.res b/FastScript/FMX/FMXfs23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs24.res b/FastScript/FMX/FMXfs24.res new file mode 100644 index 0000000000000000000000000000000000000000..3bb78759d0d01ec14176e4b53dd7e7aa7cd35082 GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfs25.res b/FastScript/FMX/FMXfs25.res new file mode 100644 index 0000000000000000000000000000000000000000..3bb78759d0d01ec14176e4b53dd7e7aa7cd35082 GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#q)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB18.res b/FastScript/FMX/FMXfsDB18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB19.res b/FastScript/FMX/FMXfsDB19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB20.res b/FastScript/FMX/FMXfsDB20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB21.res b/FastScript/FMX/FMXfsDB21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB22.res b/FastScript/FMX/FMXfsDB22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB23.res b/FastScript/FMX/FMXfsDB23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB24.res b/FastScript/FMX/FMXfsDB24.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/FMXfsDB25.res b/FastScript/FMX/FMXfsDB25.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#q)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs18.res b/FastScript/FMX/dclFMXfs18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs19.res b/FastScript/FMX/dclFMXfs19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs20.res b/FastScript/FMX/dclFMXfs20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs21.res b/FastScript/FMX/dclFMXfs21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs22.res b/FastScript/FMX/dclFMXfs22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs23.res b/FastScript/FMX/dclFMXfs23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs24.res b/FastScript/FMX/dclFMXfs24.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfs25.res b/FastScript/FMX/dclFMXfs25.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#q)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB18.res b/FastScript/FMX/dclFMXfsDB18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB19.res b/FastScript/FMX/dclFMXfsDB19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB20.res b/FastScript/FMX/dclFMXfsDB20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB21.res b/FastScript/FMX/dclFMXfsDB21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB22.res b/FastScript/FMX/dclFMXfsDB22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB23.res b/FastScript/FMX/dclFMXfsDB23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB24.res b/FastScript/FMX/dclFMXfsDB24.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMX/dclFMXfsDB25.res b/FastScript/FMX/dclFMXfsDB25.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs18.res b/FastScript/FMXfs18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs19.res b/FastScript/FMXfs19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs20.res b/FastScript/FMXfs20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs21.res b/FastScript/FMXfs21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs22.res b/FastScript/FMXfs22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs23.res b/FastScript/FMXfs23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs24.res b/FastScript/FMXfs24.res new file mode 100644 index 0000000000000000000000000000000000000000..3bb78759d0d01ec14176e4b53dd7e7aa7cd35082 GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfs25.res b/FastScript/FMXfs25.res new file mode 100644 index 0000000000000000000000000000000000000000..3bb78759d0d01ec14176e4b53dd7e7aa7cd35082 GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#q)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB18.res b/FastScript/FMXfsDB18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB19.res b/FastScript/FMXfsDB19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB20.res b/FastScript/FMXfsDB20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB21.res b/FastScript/FMXfsDB21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB22.res b/FastScript/FMXfsDB22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB23.res b/FastScript/FMXfsDB23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB24.res b/FastScript/FMXfsDB24.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/FMXfsDB25.res b/FastScript/FMXfsDB25.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSV6vu1ANW^8^r^PKS+gN6dh5<8xWDLnrkl7KDOg6A#XagaGC<}v;Ak2Xo z6BsHlBJw6Lid71fAs~ge6et$3ErmiUrSy%yLrYuAOUv0)y4+7)7C-FddH(s|bI1JxzD6ik6f2RMm5IC>$l^JY{!#K??&pqLR1HXWMa}2RJOCexTT*%22E#_v5?V; z29YZHok&;MtzuRKG8iX^0%xu}d@kA!g>D@1)8l+q@~$pafQ5B`I&^7RrXf`cdXUOq zwM*E}*Ty)x-4K-zAICeqzTCq3n{j>yZQpZL;4n*ejUr@h+8K*#8kzMKCQ{8pKT>Qu zjC1`jh$)0432-RPfeUb=jMO2pDNr$rZ6lga;POZf66e{e1--5enhxXq)(77f!)HIh zI}w08;Y3;Kbg(J+HsucU%C1T5Iywt5=$W{1>XA_ zJWo1NRt5ucoG7czzCYczVcw?Wqv^}`TG6o%~ z{f?wwdm_b7=(DHLc5_E;Ra}$Xb}T8_*rO~#6%&ejA)5qO+aRq8h;=}?4+%9usDm^T zlurRew}-X3H6z@)u~leh!d(j7Y=?q}klO%R58!Gwq~C+gIwk_ZMS`EJ{>Bx9WQ oQVo4eK;}a$8yd!-mI>8#sH8y!18OFqo&yvK43Dy~mjBQE4NEz5`Tzg` literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSBASIC.bmp b/FastScript/bitmaps/TFSBASIC.bmp new file mode 100644 index 0000000000000000000000000000000000000000..13d4c8d0424c7e00766b2070048408e013ea4592 GIT binary patch literal 1782 zcmdUtT}V@57{?b>7ed`uH(qoVNVi_?#swykV00l!B1IR17kwZUh!9zZ(1mrO3zlgK z)*|pDM+>cmQ^bUH9c`6XF0)lenC`T6XQ!Wg>Sc_x!*<#DpTo2FJn!%QKhOKP%JuDz z)UTNLKAzowpDn4#;Rx_OxKo}~BCqi&%~BWg{8>U?cszNDGqZ8x%QI+oY4XR1Ao}{+ z|K*kMv(_J(>_P9wZ@qcejx_&OPRxZPsO7m~P;eHf9|%XGY&cq1m#Hs`C21ra^slLo zbd(Ke&g+Gf_&EXNFFMY%zM85|0^SzFgqbu4DfjZ}Xdw=ND zp&AeBd!LN2L`f(s+{;GG`DYP`cpy0DGgddu-gN_JQ^IK9ND}OLs#EXbOV6pD92-t) zw+X6t$Oy;Gg8qS)!aZm97oigcTiY(*cE)1Px_UU}k4?D+OB4h=l(@~vug%jRJsBPA zxS@ah$n|l$)CDROTjPDC!et3z@nFXaa$Q^iWhBkcG0k`FI-H)y^H}O_>t_3@kPef- z*&u42Hj*4Pk`E`Q;e=;r@gp1>MT<%+POD^_pxV1M65VWXW#0tzLm%)Xb={r%-LPPs zJlkNiJ^d3C*yIj{Tbm&;A-KXMQ^5?}8}O%R<`_$VummT^E!onTH>%6_^}ksE158oX AXaE2J literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSBDERTTI.bmp b/FastScript/bitmaps/TFSBDERTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..49a8dbc769846283f5081414cbdbcfe183eb17e8 GIT binary patch literal 1782 zcmcJOdrVVz6vyiyBN3Nve=WMO7t4&%Fkl9dj3F5cGCLv~Wdj?AHV`t1vM?A4!W@_} z9zz8bke56ZtF2In2o~B>o(0yHLZOsGpR~{x`lJg!+2&^r;QlgTY* ztzD(clIkSq{t(3$Pa}xKFl$>CSXL%Yijnmtwr=6&>fG}c;Zr5=k$j?UX|z$osS`7+ z=NJ{J8RInlWzC}L&y}eovSmSOl0dRZ(AfBDU2NCQShYN}n!6z%GDw+g;$F?{Gu1Rr zG1aj=-Xa}oSQxxJH&BUlZg4get4(2U8Mc>QG=*j3RX?(2BZ|SMn&x zOWo>faZU~$PF{2QUa;>AGw<=&6Z|yF&Q7OAhB`5`?W!}%hEb{$_aU#Irs7X=PHq=O z=flVGF7GcLga8Y{->}y6++|as&TXT_u|9_at7gii97BPAu^)NO3>|r-ZfU$3=Un>} zVhiD50_+QS5dz&PBcmVeD%6RYLodSAVJX@jrVdMS&aXXiz8F6H9^Q!r!cjNM#$th8 zy|bxwS!CNLDYiSCmTy*Zjq+h^cUt%EsEVnFIOn%MNGyZk6gcoTcpY=2Y-~2-xKTER z)3S`zy)w+%bwZ@hyt_N3Zgsv#BkWS~p5UBP1|;8t@O1EvgSU@^R|p^uZWbof$YAJu zd$rx&YC2s`qe>|h@q_l+mX_(JCImr-{S*}gkWvLFGvRPN?2mGz-UtE0=SZNP5MbIH zs`DYLg3^}GmCt+piSS}21JZ8-F#`fm!$)D@OM>8X@GFKliB7_Yo8AXE-j7@jxvaQQ zCdEfQ2F*Oke+HMEAhrY|u0v!EoMAvr9~>zKpVTeiG;3h4;neRMa;x0qI9`0Jgxma` zT;>*;=J>YF7I)u9Y_guXX9=yc1Xfs&RT-n3^%rSt+5KvK#A85Lx+=$P*&W*CTgzv! zFPzGn|AIVolr$Z1NpP4f@XMHuC=!#}6?trp$8o&)SYR%tX|9$_5_4u^e-K2c@{eEQ zgWl_Wa?L8K&JbU_ai)4bs%$O1 zP#u;pJ5eC{u0)j6A;w?rG3ZxqJrr$K37kb^uAiCCANySyFI}lGTuI%|M7opI<4j?0 z=MLJd`6iF!cu{2Dp)W!;2a38On*vwbA*~t6^+2kHgc=~#LmCAtCV{Qn!ACp>gZ$ay z6=>nWZ93fOfP(vw+Xz|r;L06HzYCf5P(THW1bQcg9>?(_dt`K63q6ZK6G9so8i%2d b19wv&X#T1x6y>nYh2Sh)%V1jyoa13tD0o^ablymD zN30EEY@u7J7>P0%s${auKrL)O!=nk-$HD9Ylgeje*E0M#21+1?iz72}%*T`%l6+;i zDk{u1Pv26$sNKTq6_5o^4&0t%@>96g+PPoS&2z|~hwM2>pNdT!L~^jl8EMn35ay~J$2s64Jyhih`WTw_>+YX31`2*s+815p)3r=A<)Z_AAo`&WO^ZX>@bdSOSj|J9*50j z7frV7NwAuD3bG0yG22|W(dl_KDwVh%juHhf1*0Gk=NICnY#2wJM50|J+DXFgG@z}c zu}ev^pyPqk;Y*~&n@|{+;!z;(`lE6_%4I0`8^&?ckR*j9YU%|OdNunf62^8+KT)~0 zG*exoPSD5i$lJW_R7{+1y=woOP00}(cCRq64||3t9i$2S$VuA^iW6yke3wVgZNHCc z0{X-y8bibop|cAuZFt>i_1Nh7*l6w;s%pXt$t8oN>EyhhoDykfah<$5!@pkVZ`?cK zTYW!eVbZ>LGA(VsO|9n0;EL)Rxn_{d;a_tN_k-T%%bQLFG-NG$nJ#;MRQlza^`ERl zyMGK`8EKGtkB;2!kv9~Dw4V%Y%w7EUw22COkvz8{%k@*8mU^^ABi$XcZhB*M!|mm* iIr4XTfsJPuy~$?lGXspN5g!T-H8n#H|DTSg0>1&29Uia% literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSCLASSESRTTI.bmp b/FastScript/bitmaps/TFSCLASSESRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cf81c5b766e445c002be9cc4557a41ff6e792a1e GIT binary patch literal 1782 zcmZ?r{l>-s24+A~1BfM{m=VlkU^oDjKf(vWV1+>9zz759lBwfmOml!DSP}jJ#?*4H zTJit)_aOBC8VKFn`v2NeOzY5$#Z&+?2M#DR2WS);!nBT{d(adR$;Gq?D1sH?HxN?` z&`18Sr~5pc=yJ8e;y|X(%0T%kR+!eI8H=d^Vh+$KAo94^X?wcVaBD24GGfd@3uGXd z40F&dB9e<~5l{px!fzm^7N9RWcK=VD``@zuzhv5f{x}fAv<}T!Oa(x5W}f_Cy7s?M u-+%Q&ip-&ZIAaD2Lwg><+lcrw) literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSCPP.bmp b/FastScript/bitmaps/TFSCPP.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0ce02dcb63be12fe3a5d46e3d63f94911c5541b8 GIT binary patch literal 1782 zcmdUtO-K}B7{@oL4nke4i-%5uboI0sH!z6=qk|xZ6deQ)eIOKw5Lt%M!8+&$t7Qq+ zM&L&-ZD?({ikOgYqiv;?o9R|YnC>*`&Q3q~sbSb=hxOR-pO8Fr!AMfrz@0N7ra)tOG-YIW-A;ai|Vyg?Ad~6{ve7;SIGqZ8Dr75(sF#i2R7=3vi z{QN4gsPx9hyU@GQn{S@AA|-g06LaARYH4N=6rB0V2f{H?4jiSU!%*kZ-zvJ`i2g-6 zaAy2|fmpMH2}(G`rYi?dyuUw#V;X~F#-xUF;Us^|A}KiArQj5bSPF$J2hM6Jlu;jR zf^v6^D1$>HZPhhR6-Q&?VLHL&n10}hF)U@=oz+kI%e7szQ&sMg3h%eUD~%=xS5_1~ zAZ;L)q~^Aqf;-8=W(`h;Ff8IKMf3&&f=FSg_IQ2K0W#XAX<`Y~Ise=H1D_66`B2aM zl(rmaK}r5zHrn<-lR(4+L1jQ+SvR`ZbeIiEy>&fBu;ZypzK1V8CwJC3aEdz(P}Ku^ zG-2fR_BG}2IkUe2oygnTa{0D9k#N`4!YO@h$Sv5SAmE|MYs7wToc`#^@JRa&_3KBj zkJBYDP?5wc9tEriK~?aRn>aSoK8GH#71fos>{bk(27Qg=%y+fPMQn0#h~nDdm8 z#bG`5aBLDzbb1;;!l6)-#4)~G0?oRxwo6}F8t#jCJ v{Y3{hcq7r~MhJ8Wt}sbg&;$4Sg4UHe#!??F!O3w;wq^7i*=76tU(Ejo{e|B{ literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSDBCTRLSRTTI.bmp b/FastScript/bitmaps/TFSDBCTRLSRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..059d20722bc087f4453442f7490150f739699880 GIT binary patch literal 1782 zcmcJOX;4#F6vyL-I-_>le(Kl`owjtU2m%2L0SU$tMJbV@w9|Ko6pxxd%{-cH}TFrV9m ztu+B&)xMrpULJIh&6S&7Pjn{YJm3g(xYOwjMPjKu_RoRni_-eoz$JaZc}ilMczTEE zGds%Dy=a~qd^FK}UnRPOXrtW~a(=0dQ#9C;j~<MK=wnsmw~RmiYfM0wcifQi ziZRZqMk_hn;+1H4H)3Xeh<06&lJ{d6_j_VnQfTwxkj8jI{g;94F9IG!`Z2;CMGHnn z^RySu)1%T+G-qBX*|7Vx&HbQd1JSs~cLwLJ?aUxqO^Oxc$jjNGR_ZqMq{yfd&MP|g zqa2;=F=~NE%1}P99TQfg>=4b#$zs8tGw^YoZGG4h4sXKw>N`)6Y-Xj+G`2D?=cW=Z z)6xa)GlS|?cC09WZ68}DzK60K?V(rWJ)NA>e?#;B;-O+61?|0tPQrKoE$sKtV9}R z_fkJ-(eQzHWA8kof6g zyc8nmyU^BS+t8oZ5EtaU6!~qCR0z9|gJ&FUjIg8LAOOxEC1}Cn4eLU5Ze(>JZ8SD- z$mJ!%f(0#*av8{};1>lS5y71TL3!YP5#A(QaUU+O-!%6@_!Qxo@?h==W^pO#A~^F9 zj#WbRCD?He!b>2g1tK4VR}Q!(FT2wg{Ic|W|Ikva$6ea7;C&Tb6|ZJ-mZ{98uWy<6 zSDDF`3%hQZLJCcO`3u2?^LywshnUluts2bYQm|FF0)aWRcJj!Tu>(O+h1PSt2q%e6;JrYNQQxa)HLC9q@N}z~#ieK$_jgXfO+H*@!-ZNn zTLoDakZ}XjiXr7194~{j45*Vs)01A8b}Y#2>h76@hGAg#!Yv_GbV4Z~in&n8fdU?s S2%ua9>@jHT=*BGnpZEuPYhp(L literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSDBRTTI.bmp b/FastScript/bitmaps/TFSDBRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bbcbb343ae6b188e1680d67381c4111968e1216f GIT binary patch literal 1782 zcmd7SZ%k8H6aetYhmnHI=BI&fo*}>uE^Tb(ow4n!CJ*K$A7~5JbML~?9=t@ZgOs3a&La` zoO5sP$9q?Nv5gT)%)5vPd=WkyUl^t))`wr)jE#-Nr2c=8A616hzS*PQQ^ICP`UzWV z^;mM{Xwq>5OR8f@hdDA0?}YlWLf>&+g|4GbvsiT1onGgRFP@4JI~XDxEqjbA9Hj^h z6oHPOGrYS{^GTKF>()`UQ#rK4Z<>!Se7Y<1Q4sgRcFw(RiN6Q3ECEboK*Gq56g`=* zB`974no*bbdAPDwig5l7w%b3(KP&}r*aStl_-IA z3=iJFx+QkOhvvqpE-YjkqfBCCyARn*1u*Y~9MrSRwP;6j4HC=X-3;9Sqcx1ah|%US z>SHWqW|Jba3SgQ-4vw(D(V?AV*CDk6c4oqsI2>dAONG9mNFUe(Syt+y--r`LJI8zB z(`pDk1X~jT3;z%0&C1&=qV2>95|;t(RNVxA9Yp5Bwq)>)-k|7f7;UpaZ`-#gc`w7> zDl^)t?T4&W5SI_ZJa~N%_(lOn$FWd?TEIfxe$kKKOr8qQy_;5JMLP|*AXg5oLLg^A zAlpm5LQr8ufvXsO-Y@295cgq(crv|y0_`;RL;gwN762m!-id`^0YugVwHjXKda$=w z{C7TkE8$60&h-Ae`)H@#2xUJ(P8+1wKzunQC?KsLI5&Y(3qg77!Qv%`WG?Ajm+1Qk zXy=C+IBj|^QLT%5);_zm%)7YEZChfVUyPA2G8&em<$oo%yASlt77sYlj&cTX)Grrz zKF&Jz$G-BrNktPMimc&+F?zO{EHYCI#^YsnLC18d#)WpSm=|h$Tu192{1R*GVRK@h zX-~E>>cA*%pW%Iu?!A=T5kdp6!t!PJOZszVWbWiOXK9DCpw*S7cp_+?%Q*Ket?5s8 z-E3TiGq!AsDRq2aV=L*jqw^VWdp3)<1#*8MsOz4xHU0+$SMK?}`8a7GPs Z6*Ou}Vyjr%?7&@R!f{k}ln4J$U9h>(x&4 z$EM8SiF<9mAF}%HOyCS0=nk|Je_$wQ7Q*_meX$vNHwy`m;OrJz))9wol+Y|9xZB>p zy-Lf}P2WVobfcBXTSRmWCAI~~10Am1p03CnkJ zOfHZAvPaT;M>kaoa2*g65CfqqfF>J$W6(^0GD|Z|rw`c^2PQ*Qriku|U+UDSYdbEp z>ZCF`{|xc&|JBo^>`8CYHqAI2orvQ`wE)diIH^p)U^hLG58RaxGG&7~@*!H!XuR4I zSl)b-^GFuIX{pcc*~gy0JAi8uid%b<8a32b?ez}By?#@MNOOn($bx~%0i*L^n1kUt z5Gr~^O0{NYwxcSkGkG)N5k_z6yb*xg$Ctim1mO1IBpyhmu4(HMDZA|eHUKjM(;|#I zVFZUE90uH=S#Wgn(t4;L5FSnL=eqI;*No@CKu+XdaJg`&3&Wj`xrO;@eBO@F+c1X( zbC@t})PX<27IhemI2>m8#Dq&fPHU*0T>U)LJFT18lcu#@l*VdaI{_+hq&^S1iPmzWfgth`^%>=0vB&=c0ry0R16g2S2{heY(y R;_O^{BAG`%uq64v@;`*m>6HKg literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSEXTCTRLSRTTI.bmp b/FastScript/bitmaps/TFSEXTCTRLSRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7e6fe4d88908bd5b0a6a1f5513a87b407bc7d091 GIT binary patch literal 1782 zcmcK23s6*57zgmLnh6uwWtYb;EU&{eWmzRggq<{0DiWJ$0s}&zEJYB)S_|;OD_$i= zN{X5#sfjoQm|BE9H{!K`APXo6C~HJe;S5?D_k7*EG>8s6!;I6Nd(M1w?l-^lKlk3% zFW-3*w3i1vKg|yDf8#N21yI92|A{v}w2kak^S@o9;LE0gEhhd-q2EQL7tit66hE~z zdx2}Zo=dXcqMcx{Wu7~mhxd!#P@Ao9HF>pOxUN#*dx7s$!t*X%Aj{BmNddD0Fo@zM z8XLTCr2j5|VYHzx)+v#a?Nc^!lU7mVl6Qv9!>@{hJ4^$bc&myGSDXOzQy}^p45E4Q zLXL{%>7rz*bkQ!fk4M}0{!(<-W)GZyQ$>_8L$p?%!*qG$)>*f)?g0(GRRSp(qV19-T#!r-R)Hb1h z9Dlaco$B2f1R>5nu1P=NEG*M;wDVjUk5uC*k~!sb0%5#f)p#G zB-0rL>o(Dngmhj(f1Jg9N@HP_o7EO%2LsJ2inE|BMKb{hi)KR%DTcV*V*J_ z8)1g{zSEq5CvEVU01rXz54i3qu04z|9K_Wum4nMNQI>+vJ5dyN2ONjMUP}?BIN!xA z&&njn;=WT6h~If*sT|M9(o`6B7DG#Ea4`)mqW<4dzXIxWgs#k|vZQ;DyN&^2DK$8# zEWVP7zp$M_*aGV|V|6%Ihhb$1mcMdvknSI#3Kg@hnTcs+BI}urwakX9sn;u}R(^ih z@VRlY8UP2i zqF)&$n{GYfa>KgBRZ{5qfHTpDmvd2b5pPzarUKj2St@^sOZ8bl-P=b$xk590m^3xB zyOT+1XB4fBTV|8(1?g;Ly2dNVu~W;Aj)}9LCmEta%elmg7f0 zpXH?1gH+Fvhn4a62o9CuwIb{}!W~T+iRYhZ|A(oXsNV}WOm9s_rKC+x8d+)yshiu; zQomq-A(y8;1M6ehZ-?!f*r1rnPkxh<4o}kTMH<{@7UwK*@&=A5akv}@im~@g?8uqj z#yOqtM75l>=nONvUsp}Wq(r@hv_C^skL0jE>GC3-kBV?k5BrMTbp@XPI_Z@zzVy=k O`*n4)4pBdRu73d@uqY7# literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSFDRTTI.bat b/FastScript/bitmaps/TFSFDRTTI.bat new file mode 100644 index 0000000..4246ccf --- /dev/null +++ b/FastScript/bitmaps/TFSFDRTTI.bat @@ -0,0 +1 @@ +brcc32 -fo"fs_ifdreg.dcr" "TFSFDRTTI.rc" \ No newline at end of file diff --git a/FastScript/bitmaps/TFSFDRTTI.bmp b/FastScript/bitmaps/TFSFDRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..47fabed34f038f21b99f632026573829fb3feb00 GIT binary patch literal 1782 zcmcJOZA?>V6vu1ANW^8^r^PKS+gN6dh5<8xWDLnrkl7K@C>z)?w1JR8l!d`a5az&) z2@I7N5uqS2igm3}hlm#1Qr;}E(v}uVDYT`fr7u9=C_>BGQ|@-dhc1gBcJhC2&OP`3 zfA^gG-225>Yu<$I2tmjFXzl%b?b^-=1U9-p@CLTFZ$t<7zr;_k7#=bF`ubNAdM4s@ zuz00x{Uw?rxlVTaH%VNH5JA>WV*8T7x;SQ54K2@c3^UJ{rk*T{9xd=6C`Vi8hAA>` zos?BQ#jHR#W1Pl6ZP|3==`u}Zjv_c+7DSc^D3q7WQioyErsG>QycOkuNzT$sd$i)m zY9U=U-ah}LSw7S-(|>EKuM+26<*p@Fo5QmV`x6&^iOP3lXC*Byh_h~*UegN^$IHvh ztR6ueB$Q);I8sgx63)qg>LeCB4knx5jyC#)X?KUH~XAx&rIf#T#G0r@%MZs&u`^oEs zm;(4P!R7P$Iw8`R0_ z5iUZI8@0;pMI20s^Ut^DZVB13Pzz~DJ2^jh!p*8E1Q!rn|MGPBs5`oKwn#lp7F{0eX)76}H1wt1(T+b98-9uLiexOc)EU$`N}`yDsI%{HZH5$FrwD zBTpV82?Ngy4v+=@nc~P|DXC4B&(V6cGb-|E$BUey;TJmSo&~xHT6sVjggP$Nu%U_t Vl^m!Yfd)P>=Amz37`Oa?$zSuTnJ@qV literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSFDRTTI.rc b/FastScript/bitmaps/TFSFDRTTI.rc new file mode 100644 index 0000000..b49af30 --- /dev/null +++ b/FastScript/bitmaps/TFSFDRTTI.rc @@ -0,0 +1 @@ +TFSFDRTTI BITMAP "TFSFDRTTI.bmp" \ No newline at end of file diff --git a/FastScript/bitmaps/TFSFORMSRTTI.bmp b/FastScript/bitmaps/TFSFORMSRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1075a16e865aa856686e8a76eb34fdccb033cb0f GIT binary patch literal 1782 zcmchVZA?>V6vxk!xqVr-55{d-bYYWhW-}(>3W-jk$S7mZO`NkETP3Y_WeSDbLff-*@5O@I(tTNWa-NfO zbD!sz|M@>p!n>X)fQuNa>u5c{xE|v=fOh)d`82<{ja1tIuK+j!PyIc?L`=U(!cEsPuyqsH>Xd;d^8@NI=o@~;Oj}ZUlsO7Zocu5mKPqi zy8<_TizymRQq3o1&u*39+az(uh^fhKsN_D-cZ=J9gpeQ_N|2MefB1(?4kX_}tL(4Xa2Om(SF{wtqZ(jfQ z9e|SXob2y$j}hhd>~Yd2KEgKd6tR`!O{pvPV_Wo23qUDxdcNA)sfp|=7IYK|+6x42 zYQeQU!8Ns@RV`3nz`d=gXvEC3i)YimMly{c$$5UNTVzwQX@3Az66b2hs^4owQ++Ly zHyLNI!QNxAnG9BwVa#O6Z$=#kbDJ>dJSrM6<2#hqA_@Djighem?cb)DTJ0)zrMMjWFo!c;5e zG5#RV2hkfq&jQXa;PgCdFJm!-g?c1yswO;e4l~c-zB<q&2e)PhYl`JiyN15lwml$hEOF4>2dx|PrnbZ*DJ4l{)nC) zZm#8e$Y(;4&;QJEW4{+W&*ZczmT{yJAr9Ra9rpzmO%BibwNcrfyTqaQ!~0Bncn;kc zKi6_+_uZ^&U?<|4pd9C7F!&LPeq-a~W+(Gft~0*?C7 z?8QMJ_9ON%6}QUQhA=~QN#puL?~K!X-{$#q%VqRjKczvnx zQfY#|B2ix{GE^nkRcelE59Mr#Q z9jfQr4y-s24+A~1BfM{m=VlkU^oDjKf(vWV1+>90F}Ut75)(Pe3|c)MP85Qx!s%P zbbG4pjR_W4x{WTh>YT1uKT)Z8xJ2eazWAO@p&cna+Y&f8$FOdUV%iYF07nROmis+j z;{9lW`-3^occ$CloMd^m*W_Y{{@EtYlQqgm%j6CgO76`O-j&X`J&9{e9NVU7X1F0h z2HYGV9xrP?UB*(3#O(3qqVKAog@?Biq~%4TV2-)G~w`x(?Al4 zY8sp2vZOK=_P0R{2}|mbQm`(st|Qe1xcU_gO+6=IWOVG|I(4ALzja%T~dqNM!(x@{gZ n#;v5909TJ@6kMDP2C`9PXh+rpHwsyhJT}BA^7NwV0vZJX$en7P literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSIBXRTTI.bmp b/FastScript/bitmaps/TFSIBXRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..240339d9aa17bb5bd88d9b8973a23237373b46a3 GIT binary patch literal 1782 zcmcJOdrZ?;6vu1ANW^8^UyEBG=KCW$}-l+g%zt%dGHoHhox zh^f6sSxTr9$NVXbDx5-)EyIjug>POSH_As=7g@UbzLnYM%Ys$~?}==zX>pV!W><+A z6|?kGlSKykp_xnmDPljOkWV7LS`}G!(;FI|NyS~04H+a1t*A#m)1jQA z$|qW+FB&8xwey4bX9vnK&Q11ae1$PMU3WBY*%L2&KXO6X*tla9yX~7%$=R1~%hT*886_csak6M|=DOYMqV-U)>41+O=dD(>wb{%|J0=NAL)}?4JS3c^6ZNWv9jYmc z^N6~`IN9wGkqaNk+C9G9!ugtUJ_c>qbGt=uH%n3S*6OTPJB5T%!C6~kBe62qjXdg3 zHvR|+jC1`jh{}f}ad0Taj`MS%*6ICVRiYfHZRv&k(#;@s%nltLvwKNK0^|JF1>Y9J zXFtF@VSqc~Kv|efu&Q=96?W8}QR1APMKftqa@S?U&e>@kv!lo-9%G!}dm+9U0+Qgp zufhGK17%^c5XXVC$Zcln&bs)OVb-b>Y^WzpN=JA4h5nVfF14Ut$$N%zis+Dd2SQT8 zD;nND1@3`>IM^~X80&PpzNbgi*{Pz@WK@cTOcp(Ao@r>9s;ff~w49HkbO4gd;Y>Ol zi-p7C4%8cgfcqRZXvO&&4+iNx@k;-c#h8*gmyZYwmeC>gHsI61?;Ly-3|<5XC;{(6 zcoT2KeYojyWbK2nmB1_Vi^USG#HFa`L2d_Jse`Cn5PAc`D&agGB75O@5qKtVd!=mn zWgE`^p(ZxUT$W?ORt4Oh+|6ce6RBI@HCdt`TJUunr>o6D##@rXg=@W!0-^=`CM80?0OlX0K&@9hksa=+1!KZvv z5mkMyL>!+r9rYtWB6;%EWnSQ=37-qxPa{V^IXB{;z>Urq{7m_e|MPUraJyZV)2vFX zRVP-i5ULEZ57y3CtcDkBL-JL@xl5<>#NXc%X0?d0t6hqI<@RIYb~)cxz_I_ru>I6; zPwTTMciR&>ZSgc4q05%U*vTHWR!kaQmSaJoX_vMD6>KQzgiJDAZHAP3Al3lk0mM}T zp$1aOP&y7Q-7Z$*QVdSc3@<|i8}8EJW((v!glrOIRKwMKka{1|YaovTWHI!N30#(A sLDtCV3k`HF0961@Tp$fY6&vm`p_~C_EU4r_Ee~i?7#JGGO8!6bHx|5kjQ{`u literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSINIRTTI.bmp b/FastScript/bitmaps/TFSINIRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3dd1e56b2fa77c3ab3b0b67f4a4188b17e3b2769 GIT binary patch literal 1782 zcmcK4X;2eq7zgn57-u>iI-QOmT4xxi)0SEU1QiGc

HAV7TfOnxb4%Du+ju(4s&J z8VnLHQy?Oz92E!zxl)cmLPD~e>~7LG2~DxVZ|%;r@BC+X-`^hd zyzAzp*oD(=c3|8G_IJ1TS9A%7<7}PRU9>f5aGL+BT63<^U2SO2HrI|=r#l{?Ivhx~ zx4L3$_3a_cBpXYLwdG|i3$lf_E?Qb%vObt(i@$&UhVk9M_d6n8nG!FKh-UhiCps5L zo9Bku&-<&VyUY08;)xFCM8_>{ahQ{xMbo^}nck{z@Shqx#eqlV;sq_W0I0s@3C`kZ z6QE{Zq(+)^dw$C7s=Yb*u#kN4u(5OJq%$lNX{lwtcwty1=vxBRNE4q|-QSScS(U-5 zNNX=mZpb}fNDj@839hD5G6DmQo$_E;1d_tCRr&h7o>~?3E{%5#wUky;zov{QV{gg+K> z*gL#P$tk=Z!-j3+YvavK!|ZLn5-KfjD+9bp2B-QIL9NEnEow!+KF1$u|B>-sR`i#l zQ<%xrSmYt1MKQd;7@`kCW6Ycn3m9fkkx%lK`&p1bkyMkFrKjp52pWy%Z)yXQuKdy6 z#tjQgc5_Q65>3?Vce)3n>;ueyfarDdy2ee%5Qbw&&OITl5lU%3B)`3T!8-!#ev~_K zv=oM+DoCZ+81Lt%5Kh?NM)52p(b+eWhr)=8t%7hWMJgg^BCrXnd}~-mJQ_w!>h>8? zUvP2_ZX&tu>`{Q9`T(Nhcjak~;s0-;XDr~t#>!?606p;l(@`s{3FOiYT4gYD^x zHi^QeN~m4#|BjQ#WPtp$wrnVG7yXRo^8 z+02T4O65fXM0Ry2JK+HWs^y%=_UF-OHHIuqj#GTUp!A{b7}_@Wv@JJ#l|OkmHukEk z1Djb!SHW)!V1JKzJp#to3p+Tvr`iZ_K)QqoPKda+|Js^OUl|@|$Hk=*90(x=4|?Ia zSvdA`g28Dg@9Y3dF5US24w7E-e4IghkbPsMzP>RppL#6lm&9ml%_zI(i2(tjGttxd zy$nY{gMt>7OC^nrnSvv*{LqKDJkN>Q!tSvJW1j*v8 zvBOIyYNxB!FE0$N8(nDws+9MY<`_GDDSm4(hRc<_PN2?<<+udyzrvfBcps7SS7lIW z<@lM@G8H5POVZfsr}`@pEQANYMygnpDfd)w8izMdSN*xEv}ViS_oS#``Q6~Hp4qMm z8uI3cItr(eS1AMYYm(2nFbH!-VOAsw;6S@PXkDy~C#5_5pY>)wU%9(<9ptE9=w%_I N2iko_yOjRF`U^)xt406- literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSJSCRIPT.bmp b/FastScript/bitmaps/TFSJSCRIPT.bmp new file mode 100644 index 0000000000000000000000000000000000000000..24e7cd8316385be439a7025554b78adc97b38ac7 GIT binary patch literal 1782 zcmdUtO-NKx6vrp17D8>Sjf+-+v~@KbCoqWwqlF-a6fFc7eIOKw5Lt%M!dmDAlVu6k zMBqmbO=wLxikOg2Pn$|BC)25nFrC+=^XBz)PF)`H<}tJE@qdr|?mhQ+|L5G}Dc85U zGEXtzJ-j>ryqhv3mn+12c)PrrKt7`rnyt>~`Pf2U_ToPPOeZLg@&iPS(F0@$LEW8|Q~7dj$Lv(KyR6Fl zZSZoF;z*T*Abz9`BsD?Va*FPxid&L!{t<>nT&0NKKtK>F4AmWLDA`9wTarn!1nR8+ z?frpI2daIj=Y2Z494DZxa5o!m`=3c5;(@`DfU&Y}cCQ&Q8&gKxdYZwur#kr_y!f2l ziE-eRcAB7S28?LJEa>fPF5Go`ZxK3Pu(|cpZFeH!uC0Sp{@9dTuth<@Ly6an{oFYH z(Uakk_UroBk6a(8OJ1NNiB-ObDm=CjCik~5BhQ67P)6FkHKGNsUW3!sa1Kk|t(|N? z8PQ?#n+>AoDI>vQBmHn}5>9k_8b89JP?V^&;*<(@7##I448=FfTiG*4|4;|~NM3g* ze$~$zC(hJ6Y_~4afsNisw516G9fB)N(iQZ;y}qC|GRLvh2TO2r+>$Mfej~eVtN+FP EZy15#1poj5 literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSMENUSRTTI.bmp b/FastScript/bitmaps/TFSMENUSRTTI.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ad308c35d0421525d58f686d6f2c74f895da6ae2 GIT binary patch literal 1782 zcmZ?r{l>-s24+A~1BfM{m=VlkU^oDk2P=XS{~7*M3mu+4X@Zwkr@djjtwD>mL6fC^ zgSlRvsa}n-Zk3^Kg@JCFo=%C5PO-Ljp_X=~ndRJ^yayLAVcI@D(EiiQ2j4zE|N8FH z=ht^XzPR!J>6Len&cAtZ>ebz2FK-`uadZFk>wBJE+XX~74y~-Ww?DROHKsYULhQf1 zdHUn?>m5`2i?p@T(5m_pWTS2#TG{Aee;k`R^THjzzI*xW+XtXg1YHF*r^(6T#A+<= zSs3Yf@7Uf$(>jPjM`!o6I6ItJgT|} z@y>nH_z;E@wAjF=s=%E5sb2Q3PG}==`3E z{x0V>VliiPmfNpyAouLW=AMn6t;mVt@x_Bv0$tB+kQMetv!T z{qw6g_b;!=i@UjRJEnW~76Z-s0tuWlL&G0mzQ7Fxdhp-BKY#y#(!-yh-+-oldiCh= z%$}zg&tRH!pv(hk4qPvgad2wKWDnzhSL1Fcqjo#PW-EhwGrejf-Ew`MVjZ0VP3=5& ztz0!IDl<0U)YAtv_E0&<9H4uEYU*rlKfifBKg9h1?hpw2y)Ed=I{&xJyr0bRxHHM+ zYL~;gCfifB)^K#R!U|{<(3~Tcp1;2%-1GD6XNWnoL(MUhC9+7lfez3#xH-qFu$%Mm z<>`Na{@_8szkWnE=Xi}5R`Dw$IpvLi=XA-jKa(1QtzQ3{145GfSG z95^eX5b^Q}4OKEV-|o-;UwM(p&C05V@*}bE5S;+WQ0Fic0tcTF4jQa)XVp{oVs+=t zWQDu9-1}|dO1;V1fFd=?4vw@F+1YaP+mi*28k`M=U@@LjjNZV2V5BfueZ01CKN)S) zG?4`Aod3sLFmlnlN&DdK>a~pV^m>oyghRbh*u)NVu!2;gmcw{bk?3n zQdd(4$4^C6m`pQ4%yr60a9B@07@dFq}o$;SFv--)iH4ewETXbNZHxg~Ehd_s*3XyaLJ#e=-XpPL$m--+HPL@Y9h0$+h KmudIESpNl0M850* literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSSCRIPT.bmp b/FastScript/bitmaps/TFSSCRIPT.bmp new file mode 100644 index 0000000000000000000000000000000000000000..df880d1f89c23772f7ebb933619808e3ea15943d GIT binary patch literal 1782 zcmZ?r{l>-s24+A~1BfM{m=VlkU^oDjKf(vWV1+>9z=#LS8(U}PmjDqNAu(;%thUfl zh{kOt6|QH_^;g$JxLf-tZ=5uh7&DtztdLv1+AS*DsHAvi|D^W1CWht9x@()Z_Drac zin6G#O>b&mJ8=pzM%n%UZ%|k$78Fsx(12#bcUiLmYUi{`NjCn zS-x)V#JmFYYu7nGebNpOXNZVk$jZ8L>=<`WwxyaHLqWlV4;My9^I?u!5V zlYaJI_OD^#BYP~Prmuba|NpBe9igG2^75A# zFaH1I7t8%V_y`0=gb$G4fk zf3p7nFM95OxLu@m+0n?`|BG#0fYCQEKcAtbEa?4LfZC@zPXQ|lh+uSv| z|DOfga`bqqghZLKai*45lBDRg)d-lakt8tV|OY?|ty!@BjbvpWoWN zcpMUfGpYD5{A@q%gHy{@=Y{`)V8M=ydnWdNfAL~dWo3!E>Dp3{mPyR6QAF_IWs=K)XHMhw56TD{tI0G?;ntjOE0o`!p8SU zUj1iy^wV+A&SNbtFHWCcTT)VQZ{Zx(zvaZw!q*?N$_eBnxM>j!UbHN{bz?%?%DTEs z8#e5kG^yU(XIDi=&EcwJakUR$(icY8Zlsi7hW E089OP8~^|S literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSSYNTAXMEMO.bmp b/FastScript/bitmaps/TFSSYNTAXMEMO.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f06f89fcc00023f59dabc670f440ef05b9fb1240 GIT binary patch literal 1782 zcmb`IyH3L}6owNO5CcMj0T>uSEIa`-VrKxcBZR~o@NBF|Adsp8g+ggdZ}dV53zsHN z9LEmFPMd_dxRu)K*g9?MPyf02WM>!6XyUU4`zEZF-qMAqY3K0#az0q%kFcFxrzd6p z;l`L2DB%$QBVo)p7<*^*jnTH}H9Yd_xmAK+T&IXp-a$FX%%W}v{iNY|f^)FH9XFpD zKI=ZD1a?pcq-r3!Z%sD>Ui^ypak zws|Xa;-T@NKnxWG9#oCsG6dz?A}A|sn>VPNw!W{_oOpntKVp93dg1|w{)qXBbNc?c z`2o%pw1e2e;kHInt0=YnsV^A%TtlC&XwyYVwK_jCC$$b7E4B2cFLI71I2h%Ia{8f( z7G*}zle_^)oe=0rUOsH+)tspp7(O^B}jrvKwae(s+Xm==7 literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/TFSTREE.bmp b/FastScript/bitmaps/TFSTREE.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9885c37794c864400d84512a2a1a5a3140bfaf53 GIT binary patch literal 1782 zcmd5+y-LJD5MB!{twn6ikN5z|A{G{wf}P!6e(nXVtmTqB^Z^c^!|QAX1;NVausSTx zLhy4Y-i2YaOD?Ejm|bRe{=eDH@#%a+RiCDPpVro5tyP>-_oRQ^{9ctIZFf)4e?iFn zUkQuU9tV97d4N3RJq=oOAtU1eiNEwB$B@O5-oZq@o~Re?$|Zx7yA*34MZArhb)2jB zvz6*`^>r14sEBZ>F|hYuCnaW;nx(yqZ=Dwzphx5}l9?R@t|t$T6xD!y^a=kxWFATh zc(*t*GKKU_>k35t#z#v3# z*X3e8N5a!&U!o!|r%(q>GQQQ(IF$B;=i~uL7f^>lV)kn|8Y0zGpYTJtrqR$_h?;Y( z&8&>9$7;}exP+y;_F1fm%NL42u;~2mvt=a8Qy2CKy-^)nz%@=5Q JD(3$fe*ros**X9K literal 0 HcmV?d00001 diff --git a/FastScript/bitmaps/build_fstree.bat b/FastScript/bitmaps/build_fstree.bat new file mode 100644 index 0000000..299ce53 --- /dev/null +++ b/FastScript/bitmaps/build_fstree.bat @@ -0,0 +1 @@ +lazres ..\fs_tree.lrs FSTREE.BMP diff --git a/FastScript/bitmaps/build_lrs.bat b/FastScript/bitmaps/build_lrs.bat new file mode 100644 index 0000000..aabec47 --- /dev/null +++ b/FastScript/bitmaps/build_lrs.bat @@ -0,0 +1 @@ +lazres ..\fs_ireg.lrs TFSADORTTI.bmp TFSBASIC.bmp TFSBDERTTI.bmp TFSCHARTRTTI.bmp TFSCLASSESRTTI.bmp TFSINIRTTI.bmp TFSMENUSRTTI.bmp TFSCPP.bmp TFSDBCTRLSRTTI.bmp TFSDBRTTI.bmp TFSDIALOGSRTTI.bmp TFSEXTCTRLSRTTI.bmp TFSFORMSRTTI.bmp TFSGRAPHICSRTTI.bmp TFSIBXRTTI.bmp TFSJSCRIPT.bmp TFSPASCAL.bmp TFSSCRIPT.bmp TFSSYNTAXMEMO.bmp TFSTREE.bmp diff --git a/FastScript/bitmaps/fstree.bmp b/FastScript/bitmaps/fstree.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3e3fcdfdaf3653f25ff48298c905b04e84ede7fc GIT binary patch literal 2358 zcma*nL2lbH5QX8X&_eC5N8qw2$a>IyfgWLwGDn#O(R0kYXXt`Q$l8IS{v>6~iIX6- zKaZqHPeV%W&tDJUWQ>Q;B0t#rjqms*U&nFzGRyt1i|`fqS@>mBGE?$j%H!WZB1K`~ z4<(RjA}T0gLk*5VqKTNGK*5eV0*SWYw@?)ZMBkZ7Vpn^Mp}21g*#=G01|Dh!T5qRnY*p(+fHK%&hhu|icC9Dzie%jJctFgOB< zHkUFARbg-h5^XMX7OKMF2qfBg1lkH!VQ>TzO`Q3=6!e)J`X`WR;zdxPFgOB0w1B-(tWR;UVtBamqGadQ)Qg~1U>wD~GTp(+fHK%&jpBnwqxa0C)1l%rxYj*jzIsk`D&FyRTvzBM4PXj7OKMF2qfBkC9O~u21g*#=IiQ(sxUYLi8f#5 zC{%^P5lFQ8nrERZ433b;r%fv7Ie8-6_{z5RE%51w_&I-U$nA+leC(>X&JwB15h2U6 z5IM(Nm%MYFv~^pLKp~CDF}TYm`N%(ReMzmgUN%SCR@Wm?mcD2l**0#%sW)Rry$tN9 z*Ky{#_qNsAFW)<)w@ucqa?;4#p4RK9?s=82`*#jGoffGlMm;aJr!mD#V2|s0j5_m< zxOLC#g^P~3p116IJ&kb*WVSEzuHCIq*F2Vs{zqVMjK?W-+55Y${T_Iqci$hY)MtB1 zKh;V@#Etom=eT#sN%wj8{aupw3G*mM-1)?TrDx9}{f75>_x&-s>*~!p_wM%e+rU@z zUg@t-_;&O)yzbuy&i>X~$Mfw?jIF-c$G&3yVLYF6J>qVr+^_HR<>ozc^icQd&X@Yy z#ES`EkB^Pn;an2())}<_8=8U7=lA^b`#l0@8h@%Y?l@_5cI-gV*!1u2B4^E)9 AzyJUM literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs16.dpk b/FastScript/dclFMXfs16.dpk new file mode 100644 index 0000000..58b4aa8 --- /dev/null +++ b/FastScript/dclFMXfs16.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE2 + +package dclFMXfs16; + +{$R 'fs_ireg.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'FastScript FMX 1.9 Components'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + FMX, + DESIGNIDE, + FMXfs16; + +contains + FMXfs_ireg in 'FMXfs_ireg.pas'; + +end. diff --git a/FastScript/dclFMXfs16.res b/FastScript/dclFMXfs16.res new file mode 100644 index 0000000000000000000000000000000000000000..42917f53bdeeeef215cb8c0bb92f9caad4a107c2 GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#q)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs18.res b/FastScript/dclFMXfs18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs19.res b/FastScript/dclFMXfs19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs20.res b/FastScript/dclFMXfs20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs21.res b/FastScript/dclFMXfs21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs22.res b/FastScript/dclFMXfs22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs23.res b/FastScript/dclFMXfs23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs24.res b/FastScript/dclFMXfs24.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfs25.res b/FastScript/dclFMXfs25.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#q)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB18.res b/FastScript/dclFMXfsDB18.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB19.res b/FastScript/dclFMXfsDB19.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB20.res b/FastScript/dclFMXfsDB20.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB21.res b/FastScript/dclFMXfsDB21.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB22.res b/FastScript/dclFMXfsDB22.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB23.res b/FastScript/dclFMXfsDB23.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB24.res b/FastScript/dclFMXfsDB24.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RS)H;{X347|28cOhBFu5dZ(r#Sp;Y!{Epe!r;c>&k)4m3uHM0X?F%!AS)QE O%YcEC1!e#vkO2UW7YiT& literal 0 HcmV?d00001 diff --git a/FastScript/dclFMXfsDB25.res b/FastScript/dclFMXfsDB25.res new file mode 100644 index 0000000000000000000000000000000000000000..a64cea33b7bbf9c30d10d7750693ab849f870abc GIT binary patch literal 448 zcmZ9IO-chn5QV>ySr}Iy!G&uXVK#zb0{#&2k7USJhD0SG8Ax>JVZ4a9aqkTrzwWV# zNkPq2cfI%ObpafhZQG^gM)b4P-xuS-DCp%0)Xz%G31c4oUNEv6a>uRbq2EjE5TE(? z4+MUvk^X0~3qde-{;v3lcVk{zGH1cFYI9zARC&P@js5qCDJXSyVwQRcjtX|wOZbVL zB`evD%n-*MiAjl^fWH^jFyoD>Q@2^$oO5+DQMIfzY3&RSySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qySr}J2f(zF&!fXT=3HU?6KawF^88nfAWFXOH;{_+qQGVe>TceeJI968#2ffXq1(Pb7nkvUNAM9aL29r#PiZP*k}Iz z1A*UZ^mi;11XHDZfsgn$(2X?<^Oci%F<;H02KCk>ylbnJH#qnK$oyKPLkKCBhg7ZZFBNvDBU=Cu42J z;)Iuy?s8Ki7KjXzWBObzEr36?T5jQ&TcU+tuSbIvA&YSfzpgHWLNF~-q}576N0gwP z>UkAM(@`|gK_mI88Bj`T-5Kgan2q37D#=-_I~{n7VVE4mx*OoB?^nYG%TRGQ$W_D8 z_cyFwpgq@Y(%wk)P7t-*pQ?VlOn$2cN7pp_-Xil}OsePb_jt?f7Qz}$`!p}3o zv1)HsBj+!=I#XfQ<%c8)8St;m4+%KCrJ}vAt%ohg(QK$xL)YCwKJJ!tQG`N5pdMID zN?<_h(Sc3~O3OeCS|^+ZUPq+65d&!Y>kg++N73m}kGa=cxyV|7 ziFqHC*k;oD#HqX^DX3t-vPu?a-iM6&`S3bTIU-9O5AeK zw%3Fo4Nj5+E~#;jsAHY{_w0I|+U6j^J?zXx zQfI?*Ys|efQo$XY{~7JRwMw;h)+yck*rKNsSLcxTnv8X9&~KOPKHjpDR2+9Xi6K*y zylLH{4JY7c^pe~?MtjHJ8zU8h^OU|Xb4I%#?fs_h%gtW0$qdp8E4I*8TX$O3@HT +#pragma hdrstop +USERES("FS4.res"); +USEPACKAGE("vcl40.bpi"); +USEPACKAGE("vclx40.bpi"); +USEUNIT("fs_iReg.pas"); +USEUNIT("fs_iconst.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// Package source. +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fs4.dpk b/FastScript/fs4.dpk new file mode 100644 index 0000000..2401b04 --- /dev/null +++ b/FastScript/fs4.dpk @@ -0,0 +1,65 @@ +// Package file for Delphi 4 + +package fs4; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL40, + VCLX40; + + +contains + fs_ipascal in 'fs_ipascal.pas', + fs_icpp in 'fs_icpp.pas', + fs_ijs in 'fs_ijs.pas', + fs_ibasic in 'fs_ibasic.pas', + + fs_iclassesrtti in 'fs_iclassesrtti.pas', + fs_iconst in 'fs_iconst.pas', + fs_idialogsrtti in 'fs_idialogsrtti.pas', +{$IFDEF OLE} + fs_idisp in 'fs_idisp.pas', +{$ENDIF} + fs_ievents in 'fs_ievents.pas', + fs_iexpression in 'fs_iexpression.pas', + fs_iextctrlsrtti in 'fs_iextctrlsrtti.pas', + fs_iformsrtti in 'fs_iformsrtti.pas', + fs_igraphicsrtti in 'fs_igraphicsrtti.pas', + fs_iilparser in 'fs_iilparser.pas', + fs_iinirtti in 'fs_iinirtti.pas', + fs_iinterpreter in 'fs_iinterpreter.pas', + fs_iparser in 'fs_iparser.pas', + fs_isysrtti in 'fs_isysrtti.pas', + fs_imenusrtti in 'fs_imenusrtti.pas', + fs_itools in 'fs_itools.pas', + fs_xml in 'fs_xml.pas', + fs_synmemo in 'fs_synmemo.pas', + fs_tree in 'fs_tree.pas'; + + +end. diff --git a/FastScript/fs4.res b/FastScript/fs4.res new file mode 100644 index 0000000000000000000000000000000000000000..eb2597a3bfe9aff1d3772503882116ba96152e60 GIT binary patch literal 1536 zcma)5J#Q015PfH#L@IDW6B;ap5TZbia6=UkOZFl@f(UXOSrANwW1q}M7ZfDBNO4{M z2`z4r{2TZMNHlb$a}#mA*}c8<8A~ws+|KNK^R;&i08MI^Ii*>VpEZxy$q6jhXsm~x zbel$#`hXfB-)78enE?D_GI0x^G%=gaxC$Um$db8*PuEw5vrm+8!F8l6coId&DSvr>tyOd``PMFMeUs$;wYjaYbrfYH z1+F5Ms?)T@l{!8(DDX&d`aYigDz2(H`4wF9M|vS%^2bGfV;HYd;@T(^)6e@iCQ*bJ z@Hiw4d%$Bu@qRv^_P(3{KXA#$d_{cj7xB5D$@|kuVym;El&6>^G#n13Y06K}tMn50uTZa3Hz%l#XMbruo1xV2v@bBut^#OLv+OdS;UTv1ocahmT)iyb3%Lye zn$6JO3b{oAOmUYQEANu2wVA4eUF`As7%ypU+X{QO-WF|xXlFzB^xO=%NCMBf0 z9qZc1H@mS5gAooeKo477``BmZ0p4Or)@RFUp^XjP=d^A1aF6>pm@VL}LmVPTm;8^M zx=U}rC~(Jed`?B=176!&F>4+$c2ICze8)jizeDbb?2@yAyR7cj*OxwxQjq^_S)yz&Ix8NDEP z$ZSWP-7Iwoo~O)R + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/FastScript/fs5.cpp b/FastScript/fs5.cpp new file mode 100644 index 0000000..75223bc --- /dev/null +++ b/FastScript/fs5.cpp @@ -0,0 +1,23 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("FS5.res"); +USEPACKAGE("vcl50.bpi"); +USEPACKAGE("vclx50.bpi"); +USEUNIT("fs_ireg.pas"); +USEUNIT("fs_iconst.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fs5.dpk b/FastScript/fs5.dpk new file mode 100644 index 0000000..1327eb4 --- /dev/null +++ b/FastScript/fs5.dpk @@ -0,0 +1,66 @@ +// Package file for Delphi 5 + +package fs5; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL50, + VCLX50; + + +contains + fs_ipascal in 'fs_ipascal.pas', + fs_icpp in 'fs_icpp.pas', + fs_ijs in 'fs_ijs.pas', + fs_ibasic in 'fs_ibasic.pas', + + fs_iclassesrtti in 'fs_iclassesrtti.pas', + fs_iconst in 'fs_iconst.pas', + fs_idialogsrtti in 'fs_idialogsrtti.pas', +{$IFDEF OLE} + fs_idisp in 'fs_idisp.pas', +{$ENDIF} + fs_ievents in 'fs_ievents.pas', + fs_iexpression in 'fs_iexpression.pas', + fs_iextctrlsrtti in 'fs_iextctrlsrtti.pas', + fs_iformsrtti in 'fs_iformsrtti.pas', + fs_igraphicsrtti in 'fs_igraphicsrtti.pas', + fs_iilparser in 'fs_iilparser.pas', + fs_iinirtti in 'fs_iinirtti.pas', + fs_iinterpreter in 'fs_iinterpreter.pas', + fs_iparser in 'fs_iparser.pas', + fs_isysrtti in 'fs_isysrtti.pas', + fs_imenusrtti in 'fs_imenusrtti.pas', + fs_itools in 'fs_itools.pas', + fs_xml in 'fs_xml.pas', + fs_synmemo in 'fs_synmemo.pas', + fs_tree in 'fs_tree.pas'; + + + +end. diff --git a/FastScript/fs5.res b/FastScript/fs5.res new file mode 100644 index 0000000000000000000000000000000000000000..da3d366cfd88a59fbc2050ce57c1b6f6bcae5c9f GIT binary patch literal 1536 zcma)5yKWOf6g_LNL@IDW6B;ap5TZbia6=UkLuMl$K?J#tEC?pTu~%WD4GNN7q}VQh zLW>(De*<5DL_J{Q=iWKzzGim-piRv(r!;Hwv*Gb3If2Dmt<}(z zZqsN}A5a72+l=wj@`hcf0RNay-NGkL%;$5i0!S0GWNzWp^_AiD6J=tKDQ9V%#-|Bo zqMyuWvm{w0iwaJ(!1b3|M6|%ov59K9j#Ld#qUb2)FVC;Fiq0h8%DJs?lAOP?u=TZ$ zqD-W~RisjNl9sqqM<)ga9tlq0$CF>jRUIe4hD-iPSK=jqT;w-~@fszrjWRL)ynka7 zMYw{;Az|19o*0Vv^ZB&*-TeQ7OE%^!;&Z=<&;3l^pH326oeiZt#U!EOa3D=nek$Jk z$11#vHfdj^m$-k0dY!sHMPoAmOPkporGBS;<#IR4mmZc>t__NJOOt` zFUTD;+aYH+OC5seDRb93%hNB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +d:\delphi\builder6\Projects\Bpl\FR6.bpl=FastReport 2.4 Components + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/FastScript/fs6.cpp b/FastScript/fs6.cpp new file mode 100644 index 0000000..f8b9781 --- /dev/null +++ b/FastScript/fs6.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/FastScript/fs6.dpk b/FastScript/fs6.dpk new file mode 100644 index 0000000..ffff854 --- /dev/null +++ b/FastScript/fs6.dpk @@ -0,0 +1,66 @@ +// Package file for Delphi 6 + +package fs6; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLX; + + +contains + fs_ipascal in 'fs_ipascal.pas', + fs_icpp in 'fs_icpp.pas', + fs_ijs in 'fs_ijs.pas', + fs_ibasic in 'fs_ibasic.pas', + + fs_iclassesrtti in 'fs_iclassesrtti.pas', + fs_iconst in 'fs_iconst.pas', + fs_idialogsrtti in 'fs_idialogsrtti.pas', +{$IFDEF OLE} + fs_idisp in 'fs_idisp.pas', +{$ENDIF} + fs_ievents in 'fs_ievents.pas', + fs_iexpression in 'fs_iexpression.pas', + fs_iextctrlsrtti in 'fs_iextctrlsrtti.pas', + fs_iformsrtti in 'fs_iformsrtti.pas', + fs_igraphicsrtti in 'fs_igraphicsrtti.pas', + fs_iilparser in 'fs_iilparser.pas', + fs_iinirtti in 'fs_iinirtti.pas', + fs_iinterpreter in 'fs_iinterpreter.pas', + fs_iparser in 'fs_iparser.pas', + fs_isysrtti in 'fs_isysrtti.pas', + fs_imenusrtti in 'fs_imenusrtti.pas', + fs_itools in 'fs_itools.pas', + fs_xml in 'fs_xml.pas', + fs_synmemo in 'fs_synmemo.pas', + fs_tree in 'fs_tree.pas'; + + + +end. diff --git a/FastScript/fs6.res b/FastScript/fs6.res new file mode 100644 index 0000000000000000000000000000000000000000..2bbdbc1e14bbba1f8bedfd2eed6040c0942ef0ca GIT binary patch literal 1536 zcmb_bJ&O}j6g{&}VI?VS*2W+rVj)?QMi4f#_ia3OYXb(ym#)`%RB(6Q?tw}-3#)4!<}Cu$J4V~ zZPRz8+jQ#GHq}GE%@`*&=ct_m{9!t^hAUkx77JQAkS4@r)^N3b$>#r&#LN@ZE^-M@ zOZaRJ$1A=uv*gTBa(+Ub=2%R+hT|k{nx^oVa}x_UotwD{f;Lx+V-uU;xNT-RmPCTN zPj0O7f^Dqq&CSla#qW78@tqGgUSfpk;w47vyLiFnc)=4hF`cAR->mBY5cx(dT-N&x z1k293-T?88*u=}&;)$LM)nYnwPFaAGS}d-L=62vOHd_;1=eJQP=u?@-seG*ep!dBD zW!+|aYA#oqtU=APD|n0t*uxX*4)$rCl;4Gv_E4|;`YPlVd5BhTsrJXW6m7Jas*3|0 za(#$r^!BvEq1M}_FY?L%`KuUBcI>;{7MJ2v?T$iSzUamQB8+i@5Pj^@4sgWGA&xO5 z>!WfSXkiQYIBknPG`W9+**wlV#3@GTk^hcU_lS;G1@0)vbkxK6*pk-=qb5FW_!!oqe_S1eahSyIo0W_vtQG>?A=Q> ixdYc>ppAC5Z`W1vZvr> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/FastScript/fsADO5.cpp b/FastScript/fsADO5.cpp new file mode 100644 index 0000000..a145759 --- /dev/null +++ b/FastScript/fsADO5.cpp @@ -0,0 +1,25 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("FS5.res"); +USEPACKAGE("vcl50.bpi"); +USEPACKAGE("vcldb50.bpi"); +USEPACKAGE("vclado50.bpi"); +USEPACKAGE("fs5.bpi"); +USEPACKAGE("fsDB5.bpi"); +USEUNIT("fs_iadoreg.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsADO5.dpk b/FastScript/fsADO5.dpk new file mode 100644 index 0000000..d062b3f --- /dev/null +++ b/FastScript/fsADO5.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 5 + +package fsADO5; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL50, + VCLDB50, + VCLADO50, + fs5, + fsDB5; + +contains + fs_iadortti in 'fs_iadortti.pas'; + + +end. diff --git a/FastScript/fsADO6.bpk b/FastScript/fsADO6.bpk new file mode 100644 index 0000000..a7591da --- /dev/null +++ b/FastScript/fsADO6.bpk @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/FastScript/fsADO6.cpp b/FastScript/fsADO6.cpp new file mode 100644 index 0000000..f8b9781 --- /dev/null +++ b/FastScript/fsADO6.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/FastScript/fsADO6.dpk b/FastScript/fsADO6.dpk new file mode 100644 index 0000000..c2e52fc --- /dev/null +++ b/FastScript/fsADO6.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 6 + +package fsADO6; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + ADORTL, + fs6, + fsDB6; + +contains + fs_iadortti in 'fs_iadortti.pas'; + + +end. diff --git a/FastScript/fsADO7.dpk b/FastScript/fsADO7.dpk new file mode 100644 index 0000000..245f0fd --- /dev/null +++ b/FastScript/fsADO7.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 7 + +package fsADO7; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + ADORTL, + fs7, + fsDB7; + +contains + fs_iadortti in 'fs_iadortti.pas'; + + +end. diff --git a/FastScript/fsADO9.dpk b/FastScript/fsADO9.dpk new file mode 100644 index 0000000..e87df33 --- /dev/null +++ b/FastScript/fsADO9.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2005 + +package fsADO9; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + ADORTL, + fs9, + fsDB9; + +contains + fs_iadortti in 'fs_iadortti.pas'; + + +end. diff --git a/FastScript/fsBDE10.dpk b/FastScript/fsBDE10.dpk new file mode 100644 index 0000000..bfff3e7 --- /dev/null +++ b/FastScript/fsBDE10.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2006 + +package fsBDE10; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs10, + fsDB10; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE11.dpk b/FastScript/fsBDE11.dpk new file mode 100644 index 0000000..cc0072a --- /dev/null +++ b/FastScript/fsBDE11.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2007 + +package fsBDE11; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs11, + fsDB11; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE12.dpk b/FastScript/fsBDE12.dpk new file mode 100644 index 0000000..5442db2 --- /dev/null +++ b/FastScript/fsBDE12.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2009 + +package fsBDE12; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs12, + fsDB12; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE14.dpk b/FastScript/fsBDE14.dpk new file mode 100644 index 0000000..07e09dd --- /dev/null +++ b/FastScript/fsBDE14.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2010 + +package fsBDE14; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs14, + fsDB14; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE15.dpk b/FastScript/fsBDE15.dpk new file mode 100644 index 0000000..87a27ad --- /dev/null +++ b/FastScript/fsBDE15.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE + +package fsBDE15; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs15, + fsDB15; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE16.dpk b/FastScript/fsBDE16.dpk new file mode 100644 index 0000000..374d6ba --- /dev/null +++ b/FastScript/fsBDE16.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE2 + +package fsBDE16; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs16, + fsDB16; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE17.dpk b/FastScript/fsBDE17.dpk new file mode 100644 index 0000000..3432481 --- /dev/null +++ b/FastScript/fsBDE17.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE3 + +package fsBDE17; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs17, + fsDB17; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE18.dpk b/FastScript/fsBDE18.dpk new file mode 100644 index 0000000..52d5497 --- /dev/null +++ b/FastScript/fsBDE18.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE4 + +package fsBDE18; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs18, + fsDB18; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE19.dpk b/FastScript/fsBDE19.dpk new file mode 100644 index 0000000..32f5d27 --- /dev/null +++ b/FastScript/fsBDE19.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE5 + +package fsBDE19; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs19, + fsDB19; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE20.dpk b/FastScript/fsBDE20.dpk new file mode 100644 index 0000000..71bff3b --- /dev/null +++ b/FastScript/fsBDE20.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE6 + +package fsBDE20; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs20, + fsDB20; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE21.dpk b/FastScript/fsBDE21.dpk new file mode 100644 index 0000000..0c9f49d --- /dev/null +++ b/FastScript/fsBDE21.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE7 + +package fsBDE21; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs21, + fsDB21; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE22.dpk b/FastScript/fsBDE22.dpk new file mode 100644 index 0000000..f8b934c --- /dev/null +++ b/FastScript/fsBDE22.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi XE8 + +package fsBDE22; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs22, + fsDB22; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE23.dpk b/FastScript/fsBDE23.dpk new file mode 100644 index 0000000..ff73cf9 --- /dev/null +++ b/FastScript/fsBDE23.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 10 Seattle + +package fsBDE23; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs23, + fsDB23; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE24.dpk b/FastScript/fsBDE24.dpk new file mode 100644 index 0000000..54c218f --- /dev/null +++ b/FastScript/fsBDE24.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 10 Seattle + +package fsBDE24; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs24, + fsDB24; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE25.dpk b/FastScript/fsBDE25.dpk new file mode 100644 index 0000000..de71408 --- /dev/null +++ b/FastScript/fsBDE25.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 10 Seattle + +package fsBDE25; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs25, + fsDB25; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE26.dpk b/FastScript/fsBDE26.dpk new file mode 100644 index 0000000..23acd7f --- /dev/null +++ b/FastScript/fsBDE26.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 10 Seattle + +package fsBDE26; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs26, + fsDB26; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE27.dpk b/FastScript/fsBDE27.dpk new file mode 100644 index 0000000..783046d --- /dev/null +++ b/FastScript/fsBDE27.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 10 Seattle + +package fsBDE27; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs27, + fsDB27; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE28.dpk b/FastScript/fsBDE28.dpk new file mode 100644 index 0000000..1f419d4 --- /dev/null +++ b/FastScript/fsBDE28.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 11 Seattle + +package fsBDE28; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs28, + fsDB28; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE29.dpk b/FastScript/fsBDE29.dpk new file mode 100644 index 0000000..d833080 --- /dev/null +++ b/FastScript/fsBDE29.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 12 + +package fsBDE29; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs29, + fsDB29; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE4.bpk b/FastScript/fsBDE4.bpk new file mode 100644 index 0000000..961c052 --- /dev/null +++ b/FastScript/fsBDE4.bpk @@ -0,0 +1,187 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE SECTION +# --------------------------------------------------------------------------- +# The following section of the project makefile is managed by the BCB IDE. +# It is recommended to use the IDE to change any of the values in this +# section. +# --------------------------------------------------------------------------- + +VERSION = BCB.04.04 +# --------------------------------------------------------------------------- +PROJECT = FSBDE4.bpl +OBJFILES = fs_iReg.obj FSBDE4.obj +RESFILES = FS4.res fs_iReg.dcr +RESDEPEN = $(RESFILES) +LIBFILES = +PACKAGES = vcl40.bpi vcldb40.bpi fs4.bpi fsDB4.bpi +DEFFILE = +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +USERDEFINES = +SYSDEFINES = _RTLDLL;NO_STRICT;USEPACKAGES +# --------------------------------------------------------------------------- +CFLAG1 = -I$(BCB)\include;$(BCB)\include\vcl -O2 -Hc -H=$(BCB)\lib\vcl40.csm -w -Ve -a8 \ + -k- -vi -c -b- -w-par -w-inl -Vx -tWM -D$(SYSDEFINES);$(USERDEFINES) +PFLAGS = -U$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$Y- -$L- -$D- -v -JPHNE -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn +LFLAGS = -L$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -D"FastScript 1.9 BDE Components" -aa -Tpp -x -Gn -Gl -Gi +# --------------------------------------------------------------------------- +ALLOBJ = c0pkg32.obj Memmgr.Lib $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +InMemoryExe=0 +ShowInfoMsgs=0 + +!endif + +# --------------------------------------------------------------------------- +# MAKE SECTION +# --------------------------------------------------------------------------- +# This section of the project file is not used by the BCB IDE. It is for +# the benefit of building from the command-line using the MAKE utility. +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(CPP32) +CPP32 = cpp32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif + +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.cpp.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/FastScript/fsBDE4.cpp b/FastScript/fsBDE4.cpp new file mode 100644 index 0000000..998594d --- /dev/null +++ b/FastScript/fsBDE4.cpp @@ -0,0 +1,20 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("FS4.res"); +USEPACKAGE("vcl40.bpi"); +USEPACKAGE("vcldb40.bpi"); +USEPACKAGE("fs4.bpi"); +USEPACKAGE("fsDB4.bpi"); +USEUNIT("fs_ibdereg.pas"); +USERES("fs_ireg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// Package source. +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsBDE4.dpk b/FastScript/fsBDE4.dpk new file mode 100644 index 0000000..0d99e8f --- /dev/null +++ b/FastScript/fsBDE4.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 4 + +package fsBDE4; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL40, + VCLDB40, + fs4, + fsDB4; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE5.bpk b/FastScript/fsBDE5.bpk new file mode 100644 index 0000000..e982132 --- /dev/null +++ b/FastScript/fsBDE5.bpk @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/FastScript/fsBDE5.cpp b/FastScript/fsBDE5.cpp new file mode 100644 index 0000000..367c0d7 --- /dev/null +++ b/FastScript/fsBDE5.cpp @@ -0,0 +1,25 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("FS5.res"); +USEPACKAGE("vcl50.bpi"); +USEPACKAGE("vcldb50.bpi"); +USEPACKAGE("vclbde50.bpi"); +USEPACKAGE("fs5.bpi"); +USEPACKAGE("fsDB5.bpi"); +USEUNIT("fs_ibdereg.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsBDE5.dpk b/FastScript/fsBDE5.dpk new file mode 100644 index 0000000..5d96d46 --- /dev/null +++ b/FastScript/fsBDE5.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 5 + +package fsBDE5; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL50, + VCLDB50, + VCLBDE50, + fs5, + fsDB5; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE6.bpk b/FastScript/fsBDE6.bpk new file mode 100644 index 0000000..1455767 --- /dev/null +++ b/FastScript/fsBDE6.bpk @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +d:\delphi\builder6\Projects\Bpl\FR6.bpl=FastReport 2.4 Components + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/FastScript/fsBDE6.cpp b/FastScript/fsBDE6.cpp new file mode 100644 index 0000000..f8b9781 --- /dev/null +++ b/FastScript/fsBDE6.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/FastScript/fsBDE6.dpk b/FastScript/fsBDE6.dpk new file mode 100644 index 0000000..fa41b8a --- /dev/null +++ b/FastScript/fsBDE6.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 6 + +package fsBDE6; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs6, + fsDB6; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE7.dpk b/FastScript/fsBDE7.dpk new file mode 100644 index 0000000..8c5a9d6 --- /dev/null +++ b/FastScript/fsBDE7.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 7 + +package fsBDE7; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs7, + fsDB7; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsBDE9.dpk b/FastScript/fsBDE9.dpk new file mode 100644 index 0000000..48a58bc --- /dev/null +++ b/FastScript/fsBDE9.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2005 + +package fsBDE9; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + BDERTL, + fs9, + fsDB9; + +contains + fs_ibdertti in 'fs_ibdertti.pas'; + + +end. diff --git a/FastScript/fsDB10.dpk b/FastScript/fsDB10.dpk new file mode 100644 index 0000000..166eb1e --- /dev/null +++ b/FastScript/fsDB10.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 2006 + +package fsDB10; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs10; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB11.dpk b/FastScript/fsDB11.dpk new file mode 100644 index 0000000..3997457 --- /dev/null +++ b/FastScript/fsDB11.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 2007 + +package fsDB11; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs11; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB12.dpk b/FastScript/fsDB12.dpk new file mode 100644 index 0000000..c6bd2b2 --- /dev/null +++ b/FastScript/fsDB12.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 2009 + +package fsDB12; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs12; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB14.dpk b/FastScript/fsDB14.dpk new file mode 100644 index 0000000..fb31b43 --- /dev/null +++ b/FastScript/fsDB14.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 2010 + +package fsDB14; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs14; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB15.dpk b/FastScript/fsDB15.dpk new file mode 100644 index 0000000..1093567 --- /dev/null +++ b/FastScript/fsDB15.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE + +package fsDB15; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs15; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB16.dpk b/FastScript/fsDB16.dpk new file mode 100644 index 0000000..43eb58b --- /dev/null +++ b/FastScript/fsDB16.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE2 + +package fsDB16; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs16; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB17.dpk b/FastScript/fsDB17.dpk new file mode 100644 index 0000000..3b749a9 --- /dev/null +++ b/FastScript/fsDB17.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE3 + +package fsDB17; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs17; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB18.dpk b/FastScript/fsDB18.dpk new file mode 100644 index 0000000..ef1ea16 --- /dev/null +++ b/FastScript/fsDB18.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE4 + +package fsDB18; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs18; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB19.dpk b/FastScript/fsDB19.dpk new file mode 100644 index 0000000..8b64749 --- /dev/null +++ b/FastScript/fsDB19.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE5 + +package fsDB19; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs19; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB20.dpk b/FastScript/fsDB20.dpk new file mode 100644 index 0000000..6b1ecd6 --- /dev/null +++ b/FastScript/fsDB20.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE6 + +package fsDB20; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs20; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB21.dpk b/FastScript/fsDB21.dpk new file mode 100644 index 0000000..75c41a9 --- /dev/null +++ b/FastScript/fsDB21.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE7 + +package fsDB21; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs21; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB22.dpk b/FastScript/fsDB22.dpk new file mode 100644 index 0000000..a59385b --- /dev/null +++ b/FastScript/fsDB22.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi XE8 + +package fsDB22; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs22; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB23.dpk b/FastScript/fsDB23.dpk new file mode 100644 index 0000000..4c6e4a4 --- /dev/null +++ b/FastScript/fsDB23.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 10 Seattle + +package fsDB23; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs23; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB24.dpk b/FastScript/fsDB24.dpk new file mode 100644 index 0000000..cc8c55f --- /dev/null +++ b/FastScript/fsDB24.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 10 Seattle + +package fsDB24; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs24; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB25.dpk b/FastScript/fsDB25.dpk new file mode 100644 index 0000000..dff4be5 --- /dev/null +++ b/FastScript/fsDB25.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 10 Seattle + +package fsDB25; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs25; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB26.dpk b/FastScript/fsDB26.dpk new file mode 100644 index 0000000..b2c005f --- /dev/null +++ b/FastScript/fsDB26.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 10 Seattle + +package fsDB26; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs26; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB27.dpk b/FastScript/fsDB27.dpk new file mode 100644 index 0000000..0655b35 --- /dev/null +++ b/FastScript/fsDB27.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 10 Seattle + +package fsDB27; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs27; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB28.dpk b/FastScript/fsDB28.dpk new file mode 100644 index 0000000..f3fd31a --- /dev/null +++ b/FastScript/fsDB28.dpk @@ -0,0 +1,39 @@ +// Package file for Delphi 11 Seattle + +package fsDB28; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs28; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + +end. diff --git a/FastScript/fsDB4.bpk b/FastScript/fsDB4.bpk new file mode 100644 index 0000000..9a07332 --- /dev/null +++ b/FastScript/fsDB4.bpk @@ -0,0 +1,187 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE SECTION +# --------------------------------------------------------------------------- +# The following section of the project makefile is managed by the BCB IDE. +# It is recommended to use the IDE to change any of the values in this +# section. +# --------------------------------------------------------------------------- + +VERSION = BCB.04.04 +# --------------------------------------------------------------------------- +PROJECT = FSDB4.bpl +OBJFILES = fs_iReg.obj FSDB4.obj +RESFILES = FS4.res fs_iReg.dcr +RESDEPEN = $(RESFILES) +LIBFILES = +PACKAGES = vcl40.bpi vcldb40.bpi fs4.bpi +DEFFILE = +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +USERDEFINES = +SYSDEFINES = _RTLDLL;NO_STRICT;USEPACKAGES +# --------------------------------------------------------------------------- +CFLAG1 = -I$(BCB)\include;$(BCB)\include\vcl -O2 -Hc -H=$(BCB)\lib\vcl40.csm -w -Ve -a8 \ + -k- -vi -c -b- -w-par -w-inl -Vx -tWM -D$(SYSDEFINES);$(USERDEFINES) +PFLAGS = -U$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$Y- -$L- -$D- -v -JPHNE -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn +LFLAGS = -L$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -D"FastScript 1.9 DB Components" -aa -Tpp -x -Gn -Gl -Gi +# --------------------------------------------------------------------------- +ALLOBJ = c0pkg32.obj Memmgr.Lib $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +InMemoryExe=0 +ShowInfoMsgs=0 + +!endif + +# --------------------------------------------------------------------------- +# MAKE SECTION +# --------------------------------------------------------------------------- +# This section of the project file is not used by the BCB IDE. It is for +# the benefit of building from the command-line using the MAKE utility. +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(CPP32) +CPP32 = cpp32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif + +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.cpp.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/FastScript/fsDB4.cpp b/FastScript/fsDB4.cpp new file mode 100644 index 0000000..e80af50 --- /dev/null +++ b/FastScript/fsDB4.cpp @@ -0,0 +1,19 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("FS4.res"); +USEPACKAGE("vcl40.bpi"); +USEPACKAGE("vcldb40.bpi"); +USEPACKAGE("fs4.bpi"); +USEUNIT("fs_idbreg.pas"); +USERES("fs_ireg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// Package source. +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsDB4.dpk b/FastScript/fsDB4.dpk new file mode 100644 index 0000000..3429456 --- /dev/null +++ b/FastScript/fsDB4.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 4 + +package fsDB4; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL40, + VCLDB40, + fs4; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB5.bpk b/FastScript/fsDB5.bpk new file mode 100644 index 0000000..4b727e2 --- /dev/null +++ b/FastScript/fsDB5.bpk @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/FastScript/fsDB5.cpp b/FastScript/fsDB5.cpp new file mode 100644 index 0000000..a00f350 --- /dev/null +++ b/FastScript/fsDB5.cpp @@ -0,0 +1,23 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("FS5.res"); +USEPACKAGE("vcl50.bpi"); +USEPACKAGE("vcldb50.bpi"); +USEPACKAGE("fs5.bpi"); +USEUNIT("fs_idbreg.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsDB5.dpk b/FastScript/fsDB5.dpk new file mode 100644 index 0000000..670ca1c --- /dev/null +++ b/FastScript/fsDB5.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 5 + +package fsDB5; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL50, + VCLDB50, + fs5; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB6.bpk b/FastScript/fsDB6.bpk new file mode 100644 index 0000000..a57859c --- /dev/null +++ b/FastScript/fsDB6.bpk @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +d:\delphi\builder6\Projects\Bpl\FR6.bpl=FastReport 2.4 Components + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/FastScript/fsDB6.cpp b/FastScript/fsDB6.cpp new file mode 100644 index 0000000..f8b9781 --- /dev/null +++ b/FastScript/fsDB6.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/FastScript/fsDB6.dpk b/FastScript/fsDB6.dpk new file mode 100644 index 0000000..c72c556 --- /dev/null +++ b/FastScript/fsDB6.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 6 + +package fsDB6; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs6; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB7.dpk b/FastScript/fsDB7.dpk new file mode 100644 index 0000000..045479e --- /dev/null +++ b/FastScript/fsDB7.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 7 + +package fsDB7; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs7; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsDB9.dpk b/FastScript/fsDB9.dpk new file mode 100644 index 0000000..456067d --- /dev/null +++ b/FastScript/fsDB9.dpk @@ -0,0 +1,41 @@ +// Package file for Delphi 2005 + +package fsDB9; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + fs9; + +contains + fs_idbctrlsrtti in 'fs_idbctrlsrtti.pas', + fs_idbrtti in 'fs_idbrtti.pas'; + + +end. diff --git a/FastScript/fsFD15.dpk b/FastScript/fsFD15.dpk new file mode 100644 index 0000000..a02903c --- /dev/null +++ b/FastScript/fsFD15.dpk @@ -0,0 +1,44 @@ +// Package file for Delphi XE + +package fsFD15; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} +{$DEFINE BUNDLE} + +requires + VCL, + VCLDB, + xmlrtl, + fs15, + fsDB15, + AnyDAC_Comp_D15, + AnyDAC_Phys_D15, + AnyDAC_ComI_D15; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD16.dpk b/FastScript/fsFD16.dpk new file mode 100644 index 0000000..6486155 --- /dev/null +++ b/FastScript/fsFD16.dpk @@ -0,0 +1,44 @@ +// Package file for Delphi XE2 + +package fsFD16; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} +{$DEFINE BUNDLE} + +requires + VCL, + VCLDB, + xmlrtl, + fs16, + fsDB16, + AnyDAC_Comp_D16, + AnyDAC_Phys_D16, + AnyDAC_ComI_D16; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD17.dpk b/FastScript/fsFD17.dpk new file mode 100644 index 0000000..fe2986f --- /dev/null +++ b/FastScript/fsFD17.dpk @@ -0,0 +1,44 @@ +// Package file for Delphi XE3 + +package fsFD17; + +{$R *.res} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} +{$DEFINE BUNDLE} + +requires + VCL, + VCLDB, + xmlrtl, + fs17, + fsDB17, + AnyDAC_Comp_D17, + AnyDAC_Phys_D17, + AnyDAC_ComI_D17; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD18.dpk b/FastScript/fsFD18.dpk new file mode 100644 index 0000000..00d2d38 --- /dev/null +++ b/FastScript/fsFD18.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi XE4 + +package fsFD18; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs18, + fsDB18, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD19.dpk b/FastScript/fsFD19.dpk new file mode 100644 index 0000000..fe9ec71 --- /dev/null +++ b/FastScript/fsFD19.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi XE5 + +package fsFD19; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs19, + fsDB19, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD20.dpk b/FastScript/fsFD20.dpk new file mode 100644 index 0000000..05ed63c --- /dev/null +++ b/FastScript/fsFD20.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi XE6 + +package fsFD20; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs20, + fsDB20, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD21.dpk b/FastScript/fsFD21.dpk new file mode 100644 index 0000000..141e7bb --- /dev/null +++ b/FastScript/fsFD21.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi XE7 + +package fsFD21; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs21, + fsDB21, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD22.dpk b/FastScript/fsFD22.dpk new file mode 100644 index 0000000..b10712c --- /dev/null +++ b/FastScript/fsFD22.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi XE8 + +package fsFD22; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs22, + fsDB22, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD23.dpk b/FastScript/fsFD23.dpk new file mode 100644 index 0000000..b477cff --- /dev/null +++ b/FastScript/fsFD23.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 10 Seattle + +package fsFD23; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs23, + fsDB23, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD24.dpk b/FastScript/fsFD24.dpk new file mode 100644 index 0000000..a9907c2 --- /dev/null +++ b/FastScript/fsFD24.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 10.1 Berlin + +package fsFD24; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs24, + fsDB24, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD25.dpk b/FastScript/fsFD25.dpk new file mode 100644 index 0000000..fc0c319 --- /dev/null +++ b/FastScript/fsFD25.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 10.2 Tokyo + +package fsFD25; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs25, + fsDB25, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD26.dpk b/FastScript/fsFD26.dpk new file mode 100644 index 0000000..5761aba --- /dev/null +++ b/FastScript/fsFD26.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 10.3 Rio + +package fsFD26; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs26, + fsDB26, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD27.dpk b/FastScript/fsFD27.dpk new file mode 100644 index 0000000..0655a21 --- /dev/null +++ b/FastScript/fsFD27.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 10.3 Rio + +package fsFD27; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs27, + fsDB27, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD28.dpk b/FastScript/fsFD28.dpk new file mode 100644 index 0000000..5eedc20 --- /dev/null +++ b/FastScript/fsFD28.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 11.3 Rio + +package fsFD28; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs28, + fsDB28, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsFD29.dpk b/FastScript/fsFD29.dpk new file mode 100644 index 0000000..e23ae6c --- /dev/null +++ b/FastScript/fsFD29.dpk @@ -0,0 +1,43 @@ +// Package file for Delphi 12 + +package fsFD29; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + xmlrtl, + fs29, + fsDB29, + FireDAC, + FireDACCommon, + vclFireDAC; + +contains + fs_ifdrtti in 'fs_ifdrtti.pas'; + +end. diff --git a/FastScript/fsIBX10.dpk b/FastScript/fsIBX10.dpk new file mode 100644 index 0000000..65e4900 --- /dev/null +++ b/FastScript/fsIBX10.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2006 + +package fsIBX10; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs10, + fsDB10; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsIBX11.dpk b/FastScript/fsIBX11.dpk new file mode 100644 index 0000000..c23cc5c --- /dev/null +++ b/FastScript/fsIBX11.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2007 + +package fsIBX11; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs11, + fsDB11; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsIBX12.dpk b/FastScript/fsIBX12.dpk new file mode 100644 index 0000000..a1d73e4 --- /dev/null +++ b/FastScript/fsIBX12.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2009 + +package fsIBX12; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs12, + fsDB12; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsIBX14.dpk b/FastScript/fsIBX14.dpk new file mode 100644 index 0000000..50c3880 --- /dev/null +++ b/FastScript/fsIBX14.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 2010 + +package fsIBX14; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs14, + fsDB14; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX15.dpk b/FastScript/fsIBX15.dpk new file mode 100644 index 0000000..5466dd8 --- /dev/null +++ b/FastScript/fsIBX15.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE + +package fsIBX15; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs15, + fsDB15; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX16.dpk b/FastScript/fsIBX16.dpk new file mode 100644 index 0000000..03bd29b --- /dev/null +++ b/FastScript/fsIBX16.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE2 + +package fsIBX16; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs16, + fsDB16; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX17.dpk b/FastScript/fsIBX17.dpk new file mode 100644 index 0000000..d65c55e --- /dev/null +++ b/FastScript/fsIBX17.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE3 + +package fsIBX17; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs17, + fsDB17; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX18.dpk b/FastScript/fsIBX18.dpk new file mode 100644 index 0000000..b75af54 --- /dev/null +++ b/FastScript/fsIBX18.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE4 + +package fsIBX18; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs18, + fsDB18; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX19.dpk b/FastScript/fsIBX19.dpk new file mode 100644 index 0000000..053329e --- /dev/null +++ b/FastScript/fsIBX19.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE5 + +package fsIBX19; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs19, + fsDB19; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX20.dpk b/FastScript/fsIBX20.dpk new file mode 100644 index 0000000..8be4ffa --- /dev/null +++ b/FastScript/fsIBX20.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE6 + +package fsIBX20; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs20, + fsDB20; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX21.dpk b/FastScript/fsIBX21.dpk new file mode 100644 index 0000000..dd03f8f --- /dev/null +++ b/FastScript/fsIBX21.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE7 + +package fsIBX21; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs21, + fsDB21; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX22.dpk b/FastScript/fsIBX22.dpk new file mode 100644 index 0000000..3abd997 --- /dev/null +++ b/FastScript/fsIBX22.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi XE8 + +package fsIBX22; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs22, + fsDB22; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX23.dpk b/FastScript/fsIBX23.dpk new file mode 100644 index 0000000..7c867a4 --- /dev/null +++ b/FastScript/fsIBX23.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 10 Seattle + +package fsIBX23; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs23, + fsDB23; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX24.dpk b/FastScript/fsIBX24.dpk new file mode 100644 index 0000000..291f0f4 --- /dev/null +++ b/FastScript/fsIBX24.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 10 Seattle + +package fsIBX24; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs24, + fsDB24; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX25.dpk b/FastScript/fsIBX25.dpk new file mode 100644 index 0000000..a3c63db --- /dev/null +++ b/FastScript/fsIBX25.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 10 Seattle + +package fsIBX25; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs25, + fsDB25; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX26.dpk b/FastScript/fsIBX26.dpk new file mode 100644 index 0000000..cb6b628 --- /dev/null +++ b/FastScript/fsIBX26.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 10 Seattle + +package fsIBX26; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs26, + fsDB26; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX27.dpk b/FastScript/fsIBX27.dpk new file mode 100644 index 0000000..5ddc72a --- /dev/null +++ b/FastScript/fsIBX27.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 10 Seattle + +package fsIBX27; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs27, + fsDB27; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX28.dpk b/FastScript/fsIBX28.dpk new file mode 100644 index 0000000..a058907 --- /dev/null +++ b/FastScript/fsIBX28.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 11 Seattle + +package fsIBX28; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs28, + fsDB28; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX29.dpk b/FastScript/fsIBX29.dpk new file mode 100644 index 0000000..3369dfd --- /dev/null +++ b/FastScript/fsIBX29.dpk @@ -0,0 +1,40 @@ +// Package file for Delphi 12 + +package fsIBX29; + +{$I fs.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs29, + fsDB29; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + +end. diff --git a/FastScript/fsIBX5.bpk b/FastScript/fsIBX5.bpk new file mode 100644 index 0000000..9fada0f --- /dev/null +++ b/FastScript/fsIBX5.bpk @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/FastScript/fsIBX5.cpp b/FastScript/fsIBX5.cpp new file mode 100644 index 0000000..ca708ed --- /dev/null +++ b/FastScript/fsIBX5.cpp @@ -0,0 +1,26 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("FS5.res"); +USEPACKAGE("vcl50.bpi"); +USEPACKAGE("vcldb50.bpi"); +USEPACKAGE("vclib50.bpi"); +USEPACKAGE("fs5.bpi"); +USEPACKAGE("fsDB5.bpi"); +USEUNIT("fs_iibxreg.pas"); +USEUNIT("fs_iibxrtti.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsIBX5.dpk b/FastScript/fsIBX5.dpk new file mode 100644 index 0000000..67c6d1e --- /dev/null +++ b/FastScript/fsIBX5.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 5 + +package fsIBX5; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL50, + VCLDB50, + VCLIB50, + fs5, + fsDB5; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsIBX6.bpk b/FastScript/fsIBX6.bpk new file mode 100644 index 0000000..4795716 --- /dev/null +++ b/FastScript/fsIBX6.bpk @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/FastScript/fsIBX6.cpp b/FastScript/fsIBX6.cpp new file mode 100644 index 0000000..f8b9781 --- /dev/null +++ b/FastScript/fsIBX6.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/FastScript/fsIBX6.dpk b/FastScript/fsIBX6.dpk new file mode 100644 index 0000000..f18d8bb --- /dev/null +++ b/FastScript/fsIBX6.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 6 + +package fsIBX6; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs6, + fsDB6; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsIBX7.dpk b/FastScript/fsIBX7.dpk new file mode 100644 index 0000000..6b5de3f --- /dev/null +++ b/FastScript/fsIBX7.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 7 + +package fsIBX7; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs7, + fsDB7; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsIBX9.dpk b/FastScript/fsIBX9.dpk new file mode 100644 index 0000000..b9bd413 --- /dev/null +++ b/FastScript/fsIBX9.dpk @@ -0,0 +1,42 @@ +// Package file for Delphi 2005 + +package fsIBX9; + +{$I fs.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, + VCLDB, + IBXPRESS, + fs9, + fsDB9; + +contains + fs_iibxrtti in 'fs_iibxrtti.pas'; + + +end. diff --git a/FastScript/fsTee10.dpk b/FastScript/fsTee10.dpk new file mode 100644 index 0000000..7deeae0 --- /dev/null +++ b/FastScript/fsTee10.dpk @@ -0,0 +1,52 @@ +// Package file for Delphi 2006 + +package fsTee10; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE710, {$ENDIF} +{$IFDEF TeeChartStd8}TEE810, {$ENDIF} +{$IFDEF TeeChartStd9}TEE910, {$ENDIF} +{$IFDEF TeeChart4} TEE410, {$ENDIF} +{$IFDEF TeeChart5} TEE510, {$ENDIF} +{$IFDEF TeeChart6} TEE610, {$ENDIF} +{$IFDEF TeeChart7} TEE710, {$ENDIF} +{$IFDEF TeeChart8} TEE810, {$ENDIF} +{$IFDEF TeeChart9} TEE910, {$ENDIF} + VCLX, + fs10; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee11.dpk b/FastScript/fsTee11.dpk new file mode 100644 index 0000000..5267d76 --- /dev/null +++ b/FastScript/fsTee11.dpk @@ -0,0 +1,52 @@ +// Package file for Delphi 2007 + +package fsTee11; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE711, {$ENDIF} +{$IFDEF TeeChartStd8}TEE811, {$ENDIF} +{$IFDEF TeeChartStd9}TEE911, {$ENDIF} +{$IFDEF TeeChart4} TEE411, {$ENDIF} +{$IFDEF TeeChart5} TEE511, {$ENDIF} +{$IFDEF TeeChart6} TEE611, {$ENDIF} +{$IFDEF TeeChart7} TEE711, {$ENDIF} +{$IFDEF TeeChart8} TEE811, {$ENDIF} +{$IFDEF TeeChart9} TEE911, {$ENDIF} + VCLX, + fs11; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee12.dpk b/FastScript/fsTee12.dpk new file mode 100644 index 0000000..c6f15b4 --- /dev/null +++ b/FastScript/fsTee12.dpk @@ -0,0 +1,52 @@ +// Package file for Delphi 2009 + +package fsTee12; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE712, {$ENDIF} +{$IFDEF TeeChartStd8}TEE812, {$ENDIF} +{$IFDEF TeeChartStd9}TEE912, {$ENDIF} +{$IFDEF TeeChart4} TEE412, {$ENDIF} +{$IFDEF TeeChart5} TEE512, {$ENDIF} +{$IFDEF TeeChart6} TEE612, {$ENDIF} +{$IFDEF TeeChart7} TEE712, {$ENDIF} +{$IFDEF TeeChart8} TEE812, {$ENDIF} +{$IFDEF TeeChart9} TEE912, {$ENDIF} + VCLX, + fs12; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee14.dpk b/FastScript/fsTee14.dpk new file mode 100644 index 0000000..f03cdc4 --- /dev/null +++ b/FastScript/fsTee14.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 2010 + +package fsTee14; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE714, {$ENDIF} +{$IFDEF TeeChartStd8}TEE814, {$ENDIF} +{$IFDEF TeeChartStd9}TEE914, {$ENDIF} +{$IFDEF TeeChart4} TEE414, {$ENDIF} +{$IFDEF TeeChart5} TEE514, {$ENDIF} +{$IFDEF TeeChart6} TEE614, {$ENDIF} +{$IFDEF TeeChart7} TEE714, {$ENDIF} +{$IFDEF TeeChart8} TEE814, {$ENDIF} +{$IFDEF TeeChart9} TEE914, {$ENDIF} + VCLX, + fs14; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee15.dpk b/FastScript/fsTee15.dpk new file mode 100644 index 0000000..0936c3f --- /dev/null +++ b/FastScript/fsTee15.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE + +package fsTee15; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE715, {$ENDIF} +{$IFDEF TeeChartStd8}TEE815, {$ENDIF} +{$IFDEF TeeChartStd9}TEE915, {$ENDIF} +{$IFDEF TeeChart4} TEE415, {$ENDIF} +{$IFDEF TeeChart5} TEE515, {$ENDIF} +{$IFDEF TeeChart6} TEE615, {$ENDIF} +{$IFDEF TeeChart7} TEE715, {$ENDIF} +{$IFDEF TeeChart8} TEE815, {$ENDIF} +{$IFDEF TeeChart9} TEE915, {$ENDIF} + VCLX, + fs15; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee16.dpk b/FastScript/fsTee16.dpk new file mode 100644 index 0000000..737d44d --- /dev/null +++ b/FastScript/fsTee16.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE2 + +package fsTee16; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE716, {$ENDIF} +{$IFDEF TeeChartStd8}TEE816, {$ENDIF} +{$IFDEF TeeChartStd9}TEE916, {$ENDIF} +{$IFDEF TeeChart4} TEE416, {$ENDIF} +{$IFDEF TeeChart5} TEE516, {$ENDIF} +{$IFDEF TeeChart6} TEE616, {$ENDIF} +{$IFDEF TeeChart7} TEE716, {$ENDIF} +{$IFDEF TeeChart8} TEE816, {$ENDIF} +{$IFDEF TeeChart9} TEE916, {$ENDIF} + VCLX, + fs16; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee17.dpk b/FastScript/fsTee17.dpk new file mode 100644 index 0000000..ae74ce1 --- /dev/null +++ b/FastScript/fsTee17.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE3 + +package fsTee17; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE717, {$ENDIF} +{$IFDEF TeeChartStd8}TEE817, {$ENDIF} +{$IFDEF TeeChartStd9}TEE917, {$ENDIF} +{$IFDEF TeeChart4} TEE417, {$ENDIF} +{$IFDEF TeeChart5} TEE517, {$ENDIF} +{$IFDEF TeeChart6} TEE617, {$ENDIF} +{$IFDEF TeeChart7} TEE717, {$ENDIF} +{$IFDEF TeeChart8} TEE817, {$ENDIF} +{$IFDEF TeeChart9} TEE917, {$ENDIF} + VCLX, + fs17; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee18.dpk b/FastScript/fsTee18.dpk new file mode 100644 index 0000000..bc86af4 --- /dev/null +++ b/FastScript/fsTee18.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE4 + +package fsTee18; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE718, {$ENDIF} +{$IFDEF TeeChartStd8}TEE818, {$ENDIF} +{$IFDEF TeeChartStd9}TEE918, {$ENDIF} +{$IFDEF TeeChart4} TEE418, {$ENDIF} +{$IFDEF TeeChart5} TEE518, {$ENDIF} +{$IFDEF TeeChart6} TEE618, {$ENDIF} +{$IFDEF TeeChart7} TEE718, {$ENDIF} +{$IFDEF TeeChart8} TEE818, {$ENDIF} +{$IFDEF TeeChart9} TEE918, {$ENDIF} + VCLX, + fs18; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee19.dpk b/FastScript/fsTee19.dpk new file mode 100644 index 0000000..7227c0d --- /dev/null +++ b/FastScript/fsTee19.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE5 + +package fsTee19; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE719, {$ENDIF} +{$IFDEF TeeChartStd8}TEE819, {$ENDIF} +{$IFDEF TeeChartStd9}TEE919, {$ENDIF} +{$IFDEF TeeChart4} TEE419, {$ENDIF} +{$IFDEF TeeChart5} TEE519, {$ENDIF} +{$IFDEF TeeChart6} TEE619, {$ENDIF} +{$IFDEF TeeChart7} TEE719, {$ENDIF} +{$IFDEF TeeChart8} TEE819, {$ENDIF} +{$IFDEF TeeChart9} TEE919, {$ENDIF} + VCLX, + fs19; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee20.dpk b/FastScript/fsTee20.dpk new file mode 100644 index 0000000..bac3ca3 --- /dev/null +++ b/FastScript/fsTee20.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE6 + +package fsTee20; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE720, {$ENDIF} +{$IFDEF TeeChartStd8}TEE820, {$ENDIF} +{$IFDEF TeeChartStd9}TEE920, {$ENDIF} +{$IFDEF TeeChart4} TEE420, {$ENDIF} +{$IFDEF TeeChart5} TEE520, {$ENDIF} +{$IFDEF TeeChart6} TEE620, {$ENDIF} +{$IFDEF TeeChart7} TEE720, {$ENDIF} +{$IFDEF TeeChart8} TEE820, {$ENDIF} +{$IFDEF TeeChart9} TEE920, {$ENDIF} + VCLX, + fs20; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee21.dpk b/FastScript/fsTee21.dpk new file mode 100644 index 0000000..53c1e32 --- /dev/null +++ b/FastScript/fsTee21.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE7 + +package fsTee21; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE721, {$ENDIF} +{$IFDEF TeeChartStd8}TEE821, {$ENDIF} +{$IFDEF TeeChartStd9}TEE921, {$ENDIF} +{$IFDEF TeeChart4} TEE421, {$ENDIF} +{$IFDEF TeeChart5} TEE521, {$ENDIF} +{$IFDEF TeeChart6} TEE621, {$ENDIF} +{$IFDEF TeeChart7} TEE721, {$ENDIF} +{$IFDEF TeeChart8} TEE821, {$ENDIF} +{$IFDEF TeeChart9} TEE921, {$ENDIF} + VCLX, + fs21; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee22.dpk b/FastScript/fsTee22.dpk new file mode 100644 index 0000000..21a7bde --- /dev/null +++ b/FastScript/fsTee22.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi XE8 + +package fsTee22; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE722, {$ENDIF} +{$IFDEF TeeChartStd8}TEE822, {$ENDIF} +{$IFDEF TeeChartStd9}TEE922, {$ENDIF} +{$IFDEF TeeChart4} TEE422, {$ENDIF} +{$IFDEF TeeChart5} TEE522, {$ENDIF} +{$IFDEF TeeChart6} TEE622, {$ENDIF} +{$IFDEF TeeChart7} TEE722, {$ENDIF} +{$IFDEF TeeChart8} TEE822, {$ENDIF} +{$IFDEF TeeChart9} TEE922, {$ENDIF} + VCLX, + fs22; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee23.dpk b/FastScript/fsTee23.dpk new file mode 100644 index 0000000..4be1127 --- /dev/null +++ b/FastScript/fsTee23.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 10 Seattle + +package fsTee23; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE723, {$ENDIF} +{$IFDEF TeeChartStd8}TEE823, {$ENDIF} +{$IFDEF TeeChartStd9}TEE923, {$ENDIF} +{$IFDEF TeeChart4} TEE423, {$ENDIF} +{$IFDEF TeeChart5} TEE523, {$ENDIF} +{$IFDEF TeeChart6} TEE623, {$ENDIF} +{$IFDEF TeeChart7} TEE723, {$ENDIF} +{$IFDEF TeeChart8} TEE823, {$ENDIF} +{$IFDEF TeeChart9} TEE923, {$ENDIF} + VCLX, + fs23; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee24.dpk b/FastScript/fsTee24.dpk new file mode 100644 index 0000000..0cf4a48 --- /dev/null +++ b/FastScript/fsTee24.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 10 Seattle + +package fsTee24; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE724, {$ENDIF} +{$IFDEF TeeChartStd8}TEE824, {$ENDIF} +{$IFDEF TeeChartStd9}TEE924, {$ENDIF} +{$IFDEF TeeChart4} TEE424, {$ENDIF} +{$IFDEF TeeChart5} TEE524, {$ENDIF} +{$IFDEF TeeChart6} TEE624, {$ENDIF} +{$IFDEF TeeChart7} TEE724, {$ENDIF} +{$IFDEF TeeChart8} TEE824, {$ENDIF} +{$IFDEF TeeChart9} TEE924, {$ENDIF} + VCLX, + fs24; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee25.dpk b/FastScript/fsTee25.dpk new file mode 100644 index 0000000..2cd2e78 --- /dev/null +++ b/FastScript/fsTee25.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 10 Seattle + +package fsTee25; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE725, {$ENDIF} +{$IFDEF TeeChartStd8}TEE825, {$ENDIF} +{$IFDEF TeeChartStd9}TEE925, {$ENDIF} +{$IFDEF TeeChart4} TEE425, {$ENDIF} +{$IFDEF TeeChart5} TEE525, {$ENDIF} +{$IFDEF TeeChart6} TEE625, {$ENDIF} +{$IFDEF TeeChart7} TEE725, {$ENDIF} +{$IFDEF TeeChart8} TEE825, {$ENDIF} +{$IFDEF TeeChart9} TEE925, {$ENDIF} + VCLX, + fs25; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee26.dpk b/FastScript/fsTee26.dpk new file mode 100644 index 0000000..5a15b48 --- /dev/null +++ b/FastScript/fsTee26.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 10 Seattle + +package fsTee26; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE726, {$ENDIF} +{$IFDEF TeeChartStd8}TEE826, {$ENDIF} +{$IFDEF TeeChartStd9}TEE926, {$ENDIF} +{$IFDEF TeeChart4} TEE426, {$ENDIF} +{$IFDEF TeeChart5} TEE526, {$ENDIF} +{$IFDEF TeeChart6} TEE626, {$ENDIF} +{$IFDEF TeeChart7} TEE726, {$ENDIF} +{$IFDEF TeeChart8} TEE826, {$ENDIF} +{$IFDEF TeeChart9} TEE926, {$ENDIF} + VCLX, + fs26; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee27.dpk b/FastScript/fsTee27.dpk new file mode 100644 index 0000000..a178105 --- /dev/null +++ b/FastScript/fsTee27.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 10 Seattle + +package fsTee27; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE727, {$ENDIF} +{$IFDEF TeeChartStd8}TEE827, {$ENDIF} +{$IFDEF TeeChartStd9}TEE927, {$ENDIF} +{$IFDEF TeeChart4} TEE427, {$ENDIF} +{$IFDEF TeeChart5} TEE527, {$ENDIF} +{$IFDEF TeeChart6} TEE627, {$ENDIF} +{$IFDEF TeeChart7} TEE727, {$ENDIF} +{$IFDEF TeeChart8} TEE827, {$ENDIF} +{$IFDEF TeeChart9} TEE927, {$ENDIF} + VCLX, + fs27; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee28.dpk b/FastScript/fsTee28.dpk new file mode 100644 index 0000000..38fc436 --- /dev/null +++ b/FastScript/fsTee28.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 11 Seattle + +package fsTee28; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE728, {$ENDIF} +{$IFDEF TeeChartStd8}TEE828, {$ENDIF} +{$IFDEF TeeChartStd9}TEE928, {$ENDIF} +{$IFDEF TeeChart4} TEE428, {$ENDIF} +{$IFDEF TeeChart5} TEE528, {$ENDIF} +{$IFDEF TeeChart6} TEE628, {$ENDIF} +{$IFDEF TeeChart7} TEE728, {$ENDIF} +{$IFDEF TeeChart8} TEE828, {$ENDIF} +{$IFDEF TeeChart9} TEE928, {$ENDIF} + VCLX, + fs28; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee29.dpk b/FastScript/fsTee29.dpk new file mode 100644 index 0000000..e2b4190 --- /dev/null +++ b/FastScript/fsTee29.dpk @@ -0,0 +1,49 @@ +// Package file for Delphi 12 + +package fsTee29; + +{$I fs.inc} +{$I tee.inc} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE729, {$ENDIF} +{$IFDEF TeeChartStd8}TEE829, {$ENDIF} +{$IFDEF TeeChartStd9}TEE929, {$ENDIF} +{$IFDEF TeeChart4} TEE429, {$ENDIF} +{$IFDEF TeeChart5} TEE529, {$ENDIF} +{$IFDEF TeeChart6} TEE629, {$ENDIF} +{$IFDEF TeeChart7} TEE729, {$ENDIF} +{$IFDEF TeeChart8} TEE829, {$ENDIF} +{$IFDEF TeeChart9} TEE929, {$ENDIF} + VCLX, + fs29; + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + +end. diff --git a/FastScript/fsTee4.bpk b/FastScript/fsTee4.bpk new file mode 100644 index 0000000..5b6bc39 --- /dev/null +++ b/FastScript/fsTee4.bpk @@ -0,0 +1,187 @@ +# --------------------------------------------------------------------------- +!if !$d(BCB) +BCB = $(MAKEDIR)\.. +!endif + +# --------------------------------------------------------------------------- +# IDE SECTION +# --------------------------------------------------------------------------- +# The following section of the project makefile is managed by the BCB IDE. +# It is recommended to use the IDE to change any of the values in this +# section. +# --------------------------------------------------------------------------- + +VERSION = BCB.04.04 +# --------------------------------------------------------------------------- +PROJECT = FSTee4.bpl +OBJFILES = fs_iteereg.obj FSTee4.obj fs_ichartrtti.obj +RESFILES = FS4.res fs_iReg.dcr +RESDEPEN = $(RESFILES) +LIBFILES = +PACKAGES = vcl40.bpi vclx40.bpi tee40.bpi fs4.bpi +DEFFILE = +# --------------------------------------------------------------------------- +PATHCPP = .; +PATHASM = .; +PATHPAS = .; +PATHRC = .; +DEBUGLIBPATH = $(BCB)\lib\debug +RELEASELIBPATH = $(BCB)\lib\release +USERDEFINES = +SYSDEFINES = _RTLDLL;NO_STRICT;USEPACKAGES +# --------------------------------------------------------------------------- +CFLAG1 = -I$(BCB)\include;$(BCB)\include\vcl -O2 -Hc -H=$(BCB)\lib\vcl40.csm -w -Ve -a8 \ + -k- -vi -c -b- -w-par -w-inl -Vx -tWM -D$(SYSDEFINES);$(USERDEFINES) +PFLAGS = -U$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -I$(BCB)\include;$(BCB)\include\vcl -$Y- -$L- -$D- -v -JPHNE -M +RFLAGS = -i$(BCB)\include;$(BCB)\include\vcl +AFLAGS = /i$(BCB)\include /i$(BCB)\include\vcl /mx /w2 /zn +LFLAGS = -L$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RELEASELIBPATH) \ + -D"FastScript 1.9 Tee Components" -aa -Tpp -x -Gn -Gl -Gi +# --------------------------------------------------------------------------- +ALLOBJ = c0pkg32.obj Memmgr.Lib $(PACKAGES) sysinit.obj $(OBJFILES) +ALLRES = $(RESFILES) +ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cp32mti.lib +# --------------------------------------------------------------------------- +!ifdef IDEOPTIONS + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +InMemoryExe=0 +ShowInfoMsgs=0 + +!endif + +# --------------------------------------------------------------------------- +# MAKE SECTION +# --------------------------------------------------------------------------- +# This section of the project file is not used by the BCB IDE. It is for +# the benefit of building from the command-line using the MAKE utility. +# --------------------------------------------------------------------------- + +.autodepend +# --------------------------------------------------------------------------- +!if !$d(BCC32) +BCC32 = bcc32 +!endif + +!if !$d(CPP32) +CPP32 = cpp32 +!endif + +!if !$d(DCC32) +DCC32 = dcc32 +!endif + +!if !$d(TASM32) +TASM32 = tasm32 +!endif + +!if !$d(LINKER) +LINKER = ilink32 +!endif + +!if !$d(BRCC32) +BRCC32 = brcc32 +!endif + +# --------------------------------------------------------------------------- +!if $d(PATHCPP) +.PATH.CPP = $(PATHCPP) +.PATH.C = $(PATHCPP) +!endif + +!if $d(PATHPAS) +.PATH.PAS = $(PATHPAS) +!endif + +!if $d(PATHASM) +.PATH.ASM = $(PATHASM) +!endif + +!if $d(PATHRC) +.PATH.RC = $(PATHRC) +!endif +# --------------------------------------------------------------------------- +$(PROJECT): $(OBJFILES) $(RESDEPEN) $(DEFFILE) + $(BCB)\BIN\$(LINKER) @&&! + $(LFLAGS) + + $(ALLOBJ), + + $(PROJECT),, + + $(ALLLIB), + + $(DEFFILE), + + $(ALLRES) +! +# --------------------------------------------------------------------------- +.pas.hpp: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.pas.obj: + $(BCB)\BIN\$(DCC32) $(PFLAGS) {$< } + +.cpp.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.obj: + $(BCB)\BIN\$(BCC32) $(CFLAG1) -n$(@D) {$< } + +.c.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.cpp.i: + $(BCB)\BIN\$(CPP32) $(CFLAG1) -n. {$< } + +.asm.obj: + $(BCB)\BIN\$(TASM32) $(AFLAGS) $<, $@ + +.rc.res: + $(BCB)\BIN\$(BRCC32) $(RFLAGS) -fo$@ $< +# --------------------------------------------------------------------------- diff --git a/FastScript/fsTee4.cpp b/FastScript/fsTee4.cpp new file mode 100644 index 0000000..d5452c2 --- /dev/null +++ b/FastScript/fsTee4.cpp @@ -0,0 +1,21 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop +USERES("FS4.res"); +USEPACKAGE("vcl40.bpi"); +USEPACKAGE("vclx40.bpi"); +USEPACKAGE("tee40.bpi"); +USEPACKAGE("fs4.bpi"); +USEUNIT("fs_iteeReg.pas"); +USEUNIT("fs_ichartrtti.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- +// Package source. +//--------------------------------------------------------------------------- +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsTee4.dpk b/FastScript/fsTee4.dpk new file mode 100644 index 0000000..f8aefa8 --- /dev/null +++ b/FastScript/fsTee4.dpk @@ -0,0 +1,48 @@ +// Package file for Delphi 4 + +package fsTee4; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL40, +{$IFDEF TeeChartStd} TEE40, {$ENDIF} +{$IFDEF TeeChart4} TEE44, {$ENDIF} +{$IFDEF TeeChart5} TEE54, {$ENDIF} +{$IFDEF TeeChart6} TEE64, {$ENDIF} +{$IFDEF TeeChart7} TEE74, {$ENDIF} +{$IFDEF TeeChart8} TEE84, {$ENDIF} + VCLX40, + fs4; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee5.bpk b/FastScript/fsTee5.bpk new file mode 100644 index 0000000..8e87a0e --- /dev/null +++ b/FastScript/fsTee5.bpk @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=9 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/FastScript/fsTee5.cpp b/FastScript/fsTee5.cpp new file mode 100644 index 0000000..f6b90b6 --- /dev/null +++ b/FastScript/fsTee5.cpp @@ -0,0 +1,25 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("FS5.res"); +USEPACKAGE("vcl50.bpi"); +USEPACKAGE("vclx50.bpi"); +USEPACKAGE("tee50.bpi"); +USEPACKAGE("fs5.bpi"); +USEUNIT("fs_iteereg.pas"); +USEUNIT("fs_ichartrtti.pas"); +USERES("fs_iReg.dcr"); +//--------------------------------------------------------------------------- +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- diff --git a/FastScript/fsTee5.dpk b/FastScript/fsTee5.dpk new file mode 100644 index 0000000..f43c9d4 --- /dev/null +++ b/FastScript/fsTee5.dpk @@ -0,0 +1,48 @@ +// Package file for Delphi 5 + +package fsTee5; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL50, +{$IFDEF TeeChartStd} TEE50, {$ENDIF} +{$IFDEF TeeChart4} TEE45, {$ENDIF} +{$IFDEF TeeChart5} TEE55, {$ENDIF} +{$IFDEF TeeChart6} TEE65, {$ENDIF} +{$IFDEF TeeChart7} TEE75, {$ENDIF} +{$IFDEF TeeChart8} TEE85, {$ENDIF} + VCLX50, + fs5; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee6.bpk b/FastScript/fsTee6.bpk new file mode 100644 index 0000000..30ca49c --- /dev/null +++ b/FastScript/fsTee6.bpk @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=9 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +d:\delphi\builder6\Projects\Bpl\FR6.bpl=FastReport 2.4 Components + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Linker] +LibPrefix= +LibSuffix= +LibVersion= + + \ No newline at end of file diff --git a/FastScript/fsTee6.cpp b/FastScript/fsTee6.cpp new file mode 100644 index 0000000..f8b9781 --- /dev/null +++ b/FastScript/fsTee6.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +#pragma package(smart_init) +//--------------------------------------------------------------------------- + +// Package source. +//--------------------------------------------------------------------------- + +#pragma argsused +int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) +{ + return 1; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/FastScript/fsTee6.dpk b/FastScript/fsTee6.dpk new file mode 100644 index 0000000..de14ea5 --- /dev/null +++ b/FastScript/fsTee6.dpk @@ -0,0 +1,48 @@ +// Package file for Delphi 6 + +package fsTee6; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChart4} TEE46, {$ENDIF} +{$IFDEF TeeChart5} TEE56, {$ENDIF} +{$IFDEF TeeChart6} TEE66, {$ENDIF} +{$IFDEF TeeChart7} TEE76, {$ENDIF} +{$IFDEF TeeChart8} TEE86, {$ENDIF} + VCLX, + fs6; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee7.dpk b/FastScript/fsTee7.dpk new file mode 100644 index 0000000..22108f0 --- /dev/null +++ b/FastScript/fsTee7.dpk @@ -0,0 +1,52 @@ +// Package file for Delphi 7 + +package fsTee7; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE77, {$ENDIF} +{$IFDEF TeeChartStd8}TEE87, {$ENDIF} +{$IFDEF TeeChartStd9}TEE97, {$ENDIF} +{$IFDEF TeeChart4} TEE47, {$ENDIF} +{$IFDEF TeeChart5} TEE57, {$ENDIF} +{$IFDEF TeeChart6} TEE67, {$ENDIF} +{$IFDEF TeeChart7} TEE77, {$ENDIF} +{$IFDEF TeeChart8} TEE87, {$ENDIF} +{$IFDEF TeeChart9} TEE97, {$ENDIF} + VCLX, + fs7; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fsTee9.dpk b/FastScript/fsTee9.dpk new file mode 100644 index 0000000..cdd566b --- /dev/null +++ b/FastScript/fsTee9.dpk @@ -0,0 +1,52 @@ +// Package file for Delphi 2005 + +package fsTee9; + +{$I fs.inc} +{$I tee.inc} + +{$ALIGN ON} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} + +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $00400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + VCL, +{$IFDEF TeeChartStd} TEE, {$ENDIF} +{$IFDEF TeeChartStd7}TEE79, {$ENDIF} +{$IFDEF TeeChartStd8}TEE89, {$ENDIF} +{$IFDEF TeeChartStd9}TEE99, {$ENDIF} +{$IFDEF TeeChart4} TEE49, {$ENDIF} +{$IFDEF TeeChart5} TEE59, {$ENDIF} +{$IFDEF TeeChart6} TEE69, {$ENDIF} +{$IFDEF TeeChart7} TEE79, {$ENDIF} +{$IFDEF TeeChart8} TEE89, {$ENDIF} +{$IFDEF TeeChart9} TEE99, {$ENDIF} + VCLX, + fs9; + + +contains + fs_ichartrtti in 'fs_ichartrtti.pas'; + + +end. diff --git a/FastScript/fs_iadoreg.pas b/FastScript/fs_iadoreg.pas new file mode 100644 index 0000000..0c77572 --- /dev/null +++ b/FastScript/fs_iadoreg.pas @@ -0,0 +1,45 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Registration unit } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_iadoreg; + +{$i fs.inc} + +interface + + +procedure Register; + +implementation + +uses + Classes +{$IFNDEF Delphi6} +, DsgnIntf +{$ELSE} +, DesignIntf +{$ENDIF} +{$IFDEF DELPHI16} +, Controls +{$ENDIF} +, fs_iadortti; + +{-----------------------------------------------------------------------} + +procedure Register; +begin +{$IFDEF DELPHI16} + //GroupDescendentsWith(TfsADORTTI, TControl); +{$ENDIF} + RegisterComponents('FastScript', [TfsADORTTI]); +end; + +end. diff --git a/FastScript/fs_iadortti.pas b/FastScript/fs_iadortti.pas new file mode 100644 index 0000000..ac053e4 --- /dev/null +++ b/FastScript/fs_iadortti.pas @@ -0,0 +1,135 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ ADO classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_iadortti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_itools, fs_idbrtti, + {$IFDEF DELPHI16}Controls, System.Types, + Data.DB, Data.Win.ADODB, Winapi.ADOInt; + {$ELSE} + DB, ADODB, ADOInt; + {$ENDIF} + +type +{$i frxPlatformsAttribute.inc} + TfsADORTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddType('TDataType', fvtInt); + AddClass(TADOConnection, 'TComponent'); + AddClass(TParameter, 'TCollectionItem'); + with AddClass(TParameters, 'TCollection') do + begin + AddMethod('function AddParameter: TParameter', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TParameter', CallMethod, True); + end; + with AddClass(TCustomADODataSet, 'TDataSet') do + begin + AddProperty('Sort', 'WideString', GetProp, SetProp); + end; + AddClass(TADOTable, 'TCustomADODataSet'); + with AddClass(TADOQuery, 'TCustomADODataSet') do + AddMethod('procedure ExecSQL', CallMethod); + with AddClass(TADOStoredProc, 'TCustomADODataSet') do + AddMethod('procedure ExecProc', CallMethod); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TParameters then + begin + if MethodName = 'ADDPARAMETER' then + Result := frxInteger(TParameters(Instance).AddParameter) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TParameters(Instance).Items[Caller.Params[0]]) + end + else if ClassType = TADOQuery then + begin + if MethodName = 'EXECSQL' then + TADOQuery(Instance).ExecSQL + end + else if ClassType = TADOStoredProc then + begin + if MethodName = 'EXECPROC' then + TADOStoredProc(Instance).ExecProc + end +end; + + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCustomADODataSet then + begin + if PropName = 'SORT' then + Result := TCustomADODataSet(Instance).Sort; + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + + if ClassType = TCustomADODataSet then + begin + if PropName = 'SORT' then + TCustomADODataSet(Instance).Sort := Value; + end + +end; + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsADORTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. + diff --git a/FastScript/fs_ibasic.pas b/FastScript/fs_ibasic.pas new file mode 100644 index 0000000..9ba0755 --- /dev/null +++ b/FastScript/fs_ibasic.pas @@ -0,0 +1,193 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Basic grammar } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_ibasic; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_itools{$IFDEF DELPHI16}, Controls{$ENDIF}; +{$ELSE} +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_itools, FMX.Types; +{$ENDIF} + +type +{$i frxPlatformsAttribute.inc} + TfsBasic = class(TComponent); + + +implementation + +const + BASIC_GRAMMAR = + '' + + '<' + + '/keywords>' + + '<' + + 'string add="file" err="err1"/><' + + 'char text="(" add="op"/><' + + '/sequence>' + + '' + + '<' + + 'keyword text="OR" add="op" addtext="or"/><' + + 'char text="[" add="node"/>' + + '<' + + 'sequence><' + + '/sequence><' + + 'caseselector/><' + + 'optional>' + + '<' + + 'keyword text="FINALLY"/>'; + + +initialization +{$IFDEF DELPHI16} +{$IFDEF FMX} + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsBasic, TFmxObject); +{$ELSE} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsBasic, TControl); +{$ENDIF} +{$ENDIF} + fsRegisterLanguage('BasicScript', BASIC_GRAMMAR); + +end. diff --git a/FastScript/fs_ibdereg.pas b/FastScript/fs_ibdereg.pas new file mode 100644 index 0000000..fa884ea --- /dev/null +++ b/FastScript/fs_ibdereg.pas @@ -0,0 +1,45 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Registration unit } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_ibdereg; + +{$i fs.inc} + +interface + + +procedure Register; + +implementation + +uses + Classes +{$IFNDEF Delphi6} +, DsgnIntf +{$ELSE} +, DesignIntf +{$ENDIF} +{$IFDEF DELPHI16} +, Controls +{$ENDIF} +, fs_ibdertti; + +{-----------------------------------------------------------------------} + +procedure Register; +begin +{$IFDEF DELPHI16} + //GroupDescendentsWith(TfsBDERTTI, TControl); +{$ENDIF} + RegisterComponents('FastScript', [TfsBDERTTI]); +end; + +end. diff --git a/FastScript/fs_ibdertti.pas b/FastScript/fs_ibdertti.pas new file mode 100644 index 0000000..159e7e9 --- /dev/null +++ b/FastScript/fs_ibdertti.pas @@ -0,0 +1,171 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ BDE classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_ibdertti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_itools, fs_idbrtti, + DB, DBTables + {$IFDEF DELPHI16}, Controls, System.Types{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsBDERTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TTableType', 'ttDefault, ttParadox, ttDBase, ttFoxPro, ttASCII'); + AddEnum('TParamBindMode', 'pbByName, pbByNumber'); + + AddClass(TSession, 'TComponent'); + AddClass(TDatabase, 'TComponent'); + AddClass(TBDEDataSet, 'TDataSet'); + AddClass(TDBDataSet, 'TBDEDataSet'); + with AddClass(TTable, 'TDBDataSet') do + begin + AddMethod('procedure CreateTable', CallMethod); + AddMethod('procedure DeleteTable', CallMethod); + AddMethod('procedure EmptyTable', CallMethod); + AddMethod('function FindKey(const KeyValues: array): Boolean', CallMethod); + AddMethod('procedure FindNearest(const KeyValues: array)', CallMethod); + AddMethod('procedure RenameTable(const NewTableName: string)', CallMethod); + end; + with AddClass(TQuery, 'TDBDataSet') do + begin + AddMethod('procedure ExecSQL', CallMethod); + AddMethod('function ParamByName(const Value: string): TParam', CallMethod); + AddMethod('procedure Prepare', CallMethod); + AddProperty('ParamCount', 'Word', GetProp, nil); + end; + with AddClass(TStoredProc, 'TDBDataSet') do + begin + AddMethod('procedure ExecProc', CallMethod); + AddMethod('function ParamByName(const Value: string): TParam', CallMethod); + AddMethod('procedure Prepare', CallMethod); + AddProperty('ParamCount', 'Word', GetProp, nil); + end; + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function DoFindKey: Boolean; + var + ar: TVarRecArray; + sPtrList: TList; + begin + VariantToVarRec(Caller.Params[0], ar, sPtrList); + Result := TTable(Instance).FindKey(ar); + ClearVarRec(ar, sPtrList); + end; + + procedure DoFindNearest; + var + ar: TVarRecArray; + sPtrList: TList; + begin + VariantToVarRec(Caller.Params[0], ar, sPtrList); + TTable(Instance).FindNearest(ar); + ClearVarRec(ar, sPtrList); + end; + +begin + Result := 0; + + if ClassType = TTable then + begin + if MethodName = 'CREATETABLE' then + TTable(Instance).CreateTable + else if MethodName = 'DELETETABLE' then + TTable(Instance).DeleteTable + else if MethodName = 'EMPTYTABLE' then + TTable(Instance).EmptyTable + else if MethodName = 'FINDKEY' then + Result := DoFindKey + else if MethodName = 'FINDNEAREST' then + DoFindNearest + else if MethodName = 'RENAMETABLE' then + TTable(Instance).RenameTable(Caller.Params[0]) + end + else if ClassType = TQuery then + begin + if MethodName = 'EXECSQL' then + TQuery(Instance).ExecSQL + else if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TQuery(Instance).ParamByName(Caller.Params[0])) + else if MethodName = 'PREPARE' then + TQuery(Instance).Prepare + end + else if ClassType = TStoredProc then + begin + if MethodName = 'EXECPROC' then + TStoredProc(Instance).ExecProc + else if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TStoredProc(Instance).ParamByName(Caller.Params[0])) + else if MethodName = 'PREPARE' then + TStoredProc(Instance).Prepare + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TQuery then + begin + if PropName = 'PARAMCOUNT' then + Result := TQuery(Instance).ParamCount + end + else if ClassType = TStoredProc then + begin + if PropName = 'PARAMCOUNT' then + Result := TStoredProc(Instance).ParamCount + end +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsBDERTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_ibx.lpk b/FastScript/fs_ibx.lpk new file mode 100644 index 0000000..d714535 --- /dev/null +++ b/FastScript/fs_ibx.lpk @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FastScript/fs_ichartrtti.pas b/FastScript/fs_ichartrtti.pas new file mode 100644 index 0000000..c01b22f --- /dev/null +++ b/FastScript/fs_ichartrtti.pas @@ -0,0 +1,195 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Chart } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_ichartrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_itools, fs_iformsrtti +{$IFDEF DELPHI16} + , VCLTee.Chart, VCLTee.Series, VCLTee.TeEngine, VCLTee.TeeProcs, VCLTee.TeCanvas, VCLTee.ArrowCha +{$ELSE} + , Chart, Series, TeEngine, TeeProcs, TeCanvas, ArrowCha +{$ENDIF} +{$IFDEF Delphi16} + , System.Types +{$ENDIF} +{$IFDEF DELPHI16}, Controls{$ENDIF}; + + +type +{$i frxPlatformsAttribute.inc} + TfsChartRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddType('TChartValue', fvtFloat); + AddEnum('TLegendStyle', 'lsAuto, lsSeries, lsValues, lsLastValues'); + AddEnum('TLegendAlignment', 'laLeft, laRight, laTop, laBottom'); + AddEnum('TLegendTextStyle', 'ltsPlain, ltsLeftValue, ltsRightValue, ltsLeftPercent,' + + 'ltsRightPercent, ltsXValue'); + AddEnum('TChartListOrder', 'loNone, loAscending, loDescending'); + AddEnum('TGradientDirection', 'gdTopBottom, gdBottomTop, gdLeftRight, gdRightLeft'); + AddEnum('TSeriesMarksStyle', 'smsValue, smsPercent, smsLabel, smsLabelPercent, ' + + 'smsLabelValue, smsLegend, smsPercentTotal, smsLabelPercentTotal, smsXValue'); + AddEnum('TAxisLabelStyle', 'talAuto, talNone, talValue, talMark, talText'); + AddEnum('THorizAxis', 'aTopAxis, aBottomAxis'); + AddEnum('TVertAxis', 'aLeftAxis, aRightAxis'); + AddEnum('TTeeBackImageMode', 'pbmStretch, pbmTile, pbmCenter'); + AddEnum('TPanningMode', 'pmNone, pmHorizontal, pmVertical, pmBoth'); + AddEnum('TSeriesPointerStyle', 'psRectangle, psCircle, psTriangle, ' + + 'psDownTriangle, psCross, psDiagCross, psStar, psDiamond, psSmallDot'); + AddEnum('TMultiArea', 'maNone, maStacked, maStacked100'); + AddEnum('TMultiBar', 'mbNone, mbSide, mbStacked, mbStacked100'); + AddEnum('TBarStyle', 'bsRectangle, bsPyramid, bsInvPyramid, bsCilinder, ' + + 'bsEllipse, bsArrow, bsRectGradient'); + + AddEnum('TPenEndStyle', 'esRound, esSquare, esFlat'); + AddEnum('TPenMode', 'pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, ' + + 'pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, ' + + 'pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor'); + AddEnum('TPenStyle', 'psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame'); + AddClass(TChartValueList, 'TPersistent'); + AddClass(TChartAxisTitle, 'TPersistent'); + AddClass(TChartAxis, 'TPersistent'); + AddClass(TCustomChartLegend, 'TPersistent'); + AddClass(TChartLegend, 'TCustomChartLegend'); + AddClass(TSeriesMarks, 'TPersistent'); + AddClass(TChartGradient, 'TPersistent'); + AddClass(TChartWall, 'TPersistent'); + AddClass(TChartBrush, 'TBrush'); + AddClass(TChartTitle, 'TPersistent'); + AddClass(TView3DOptions, 'TPersistent'); + AddClass(TChartPen, 'TComponent'); + with AddClass(TChartSeries, 'TComponent') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('function Count: Integer', CallMethod); + AddMethod('procedure Add(const AValue: Double; const ALabel: String; AColor: TColor)', CallMethod); + AddProperty('Active','Boolean', GetProp, SetProp); + end; + AddClass(TSeriesPointer, 'TPersistent'); + AddClass(TCustomSeries, 'TChartSeries'); + AddClass(TLineSeries, 'TCustomSeries'); + AddClass(TPointSeries, 'TCustomSeries'); + AddClass(TAreaSeries, 'TCustomSeries'); + AddClass(TArrowSeries, 'TCustomSeries'); + with AddClass(TCustomBarSeries, 'TChartSeries') do + begin + AddProperty('Title','String', GetProp, SetProp); + end; + AddClass(TBarSeries, 'TCustomBarSeries'); + AddClass(THorizBarSeries, 'TCustomBarSeries'); + AddClass(TCircledSeries, 'TChartSeries'); + AddClass(TPieSeries, 'TCircledSeries'); + AddClass(TFastLineSeries, 'TChartSeries'); + AddClass(TCustomChart, 'TWinControl'); + AddClass(TChart, 'TCustomChart'); +{$IFDEF DELPHI19} + AddClass(TSeriesPointerItems, 'TSeriesPointerItems'); +{$ENDIF} + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TChartSeries then + begin + if MethodName = 'CLEAR' then + TChartSeries(Instance).Clear + else if MethodName = 'ADD' then + TChartSeries(Instance).Add(Caller.Params[0], String(Caller.Params[1]), Caller.Params[2]) + else if MethodName = 'DELETE' then + TChartSeries(Instance).Delete(Caller.Params[0]) + else if MethodName = 'COUNT' then + Result := TChartSeries(Instance).Count + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TChartSeries then + begin + if PropName = 'ACTIVE' then + Result := TChartSeries(Instance).Active + end else + if ClassType = TCustomBarSeries then + begin + if PropName = 'Title' then + Result := TCustomBarSeries(Instance).Title + end; +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TChartSeries then + begin + if PropName = 'ACTIVE' then + TChartSeries(Instance).Active := Value + end else + if ClassType = TCustomBarSeries then + begin + if PropName = 'Title' then + TCustomBarSeries(Instance).Title := Value + end +end; + +initialization +{$IFDEF DELPHI16} +{$IFDEF FMX} + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsChartRTTI, TFmxObject); +{$ELSE} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsChartRTTI, TControl); +{$ENDIF} +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_iclassesrtti.pas b/FastScript/fs_iclassesrtti.pas new file mode 100644 index 0000000..a102022 --- /dev/null +++ b/FastScript/fs_iclassesrtti.pas @@ -0,0 +1,1052 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Classes.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_iclassesrtti; + +interface + +{$i fs.inc} + +uses SysUtils, Classes, fs_iinterpreter, fs_xml{$IFDEF DELPHI16}, Controls{$ENDIF} +{$IFDEF Delphi16} + , System.Types +{$ENDIF}; +//FMX USES +{$ELSE} +interface + +{$i fs.inc} + +uses System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_xml, System.Types, FMX.Types, System.UITypes +{$IFDEF DELPHI20} + ,System.Math.Vectors +{$ENDIF}; +{$ENDIF} + +type +{$i frxPlatformsAttribute.inc} + TfsClassesRTTI = class(TComponent); // fake component +{$IFDEF FMX} +{ wrappers for most using structures } + TfsRectF = class(TPersistent) + private + FRectF: TRectF; + function GetBottom: Single; + function GetLeft: Single; + function GetRight: Single; + function GetTop: Single; + procedure SetBottom(const Value: Single); + procedure SetLeft(const Value: Single); + procedure SetRight(const Value: Single); + procedure SetTop(const Value: Single); + public + function GetRect: TRectF; + function GetRectP: PRectF; + constructor Create(aRectF: TRectF); + published + property Left: Single read GetLeft write SetLeft; + property Top: Single read GetTop write SetTop; + property Right: Single read GetRight write SetRight; + property Bottom: Single read GetBottom write SetBottom; + end; + + TfsMatrix = class(TPersistent) + private + FMatrix: TMatrix; + function Getm11: Single; + function Getm12: Single; + function Getm13: Single; + function Getm21: Single; + function Getm22: Single; + function Getm23: Single; + function Getm31: Single; + function Getm32: Single; + function Getm33: Single; + procedure Setm11(const Value: Single); + procedure Setm12(const Value: Single); + procedure Setm13(const Value: Single); + procedure Setm21(const Value: Single); + procedure Setm22(const Value: Single); + procedure Setm23(const Value: Single); + procedure Setm31(const Value: Single); + procedure Setm32(const Value: Single); + procedure Setm33(const Value: Single); + public + procedure AssignToRect(var Rect: TMatrix); + procedure AssignFromRect(Rect: TMatrix); + function GetRect: TMatrix; + constructor Create(aMatrix: TMatrix); + published + property m11: Single read Getm11 write Setm11; + property m12: Single read Getm12 write Setm12; + property m13: Single read Getm13 write Setm13; + property m21: Single read Getm21 write Setm21; + property m22: Single read Getm22 write Setm22; + property m23: Single read Getm23 write Setm23; + property m31: Single read Getm31 write Setm31; + property m32: Single read Getm32 write Setm32; + property m33: Single read Getm33 write Setm33; + end; + + TfsPointF = class(TPersistent) + private + FPointF: TPointF; + function GetX: Single; + function GetY: Single; + procedure SetX(const Value: Single); + procedure SetY(const Value: Single); + public + function GetRect: TPointF; + function GetRectP: PPointF; + constructor Create(aPointF: TPointF); + published + property pX: Single read GetX write SetX; + property pY: Single read GetY write SetY; + end; + + PVector = ^TVector; + TfsVector = class(TPersistent) + private + FVector: TVector; + function GetW: Single; + function GetX: Single; + function GetY: Single; + procedure SetW(const Value: Single); + procedure SetX(const Value: Single); + procedure SetY(const Value: Single); + public + function GetRect: TVector; + function GetRectP: PVector; + constructor Create(aVector: TVector); + published + property pX: Single read GetX write SetX; + property pY: Single read GetY write SetY; + property pW: Single read GetW write SetW; + end; +{$ENDIF} + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + +{$IFDEF FMX} +{ TFrxRectF } + +constructor TfsRectF.Create(aRectF: TRectF); +begin + FRectF.Left := aRectF.Left; + FRectF.Top := aRectF.Top; + FRectF.Right := aRectF.Right; + FRectF.Bottom := aRectF.Bottom; +end; + +function TfsRectF.GetBottom: Single; +begin + Result := FRectF.Bottom; +end; + +function TfsRectF.GetLeft: Single; +begin + Result := FRectF.Left; +end; + +function TfsRectF.GetRect: TRectF; +begin + Result := FRectF; +end; + +function TfsRectF.GetRectP: PRectF; +begin + Result := @FRectF; +end; + +function TfsRectF.GetRight: Single; +begin + Result := FRectF.Right; +end; + +function TfsRectF.GetTop: Single; +begin + Result := FRectF.Top; +end; + +procedure TfsRectF.SetBottom(const Value: Single); +begin + FRectF.Bottom := Value; +end; + +procedure TfsRectF.SetLeft(const Value: Single); +begin + FRectF.Left := Value; +end; + +procedure TfsRectF.SetRight(const Value: Single); +begin + FRectF.Right := Value; +end; + +procedure TfsRectF.SetTop(const Value: Single); +begin + FRectF.Top := Value; +end; + +{ TfsMatrix } + +procedure TfsMatrix.AssignFromRect(Rect: TMatrix); +begin + +end; + +procedure TfsMatrix.AssignToRect(var Rect: TMatrix); +begin + +end; + +constructor TfsMatrix.Create(aMatrix: TMatrix); +begin + FMatrix.m11 := aMatrix.m11; + FMatrix.m12 := aMatrix.m12; + FMatrix.m13 := aMatrix.m13; + FMatrix.m21 := aMatrix.m21; + FMatrix.m22 := aMatrix.m22; + FMatrix.m23 := aMatrix.m23; + FMatrix.m31 := aMatrix.m31; + FMatrix.m32 := aMatrix.m32; + FMatrix.m33 := aMatrix.m33; +end; + +function TfsMatrix.Getm11: Single; +begin + Result := FMatrix.m11; +end; + +function TfsMatrix.Getm12: Single; +begin + Result := FMatrix.m12; +end; + +function TfsMatrix.Getm13: Single; +begin + Result := FMatrix.m13; +end; + +function TfsMatrix.Getm21: Single; +begin + Result := FMatrix.m21; +end; + +function TfsMatrix.Getm22: Single; +begin + Result := FMatrix.m22; +end; + +function TfsMatrix.Getm23: Single; +begin + Result := FMatrix.m23; +end; + +function TfsMatrix.Getm31: Single; +begin + Result := FMatrix.m31; +end; + +function TfsMatrix.Getm32: Single; +begin + Result := FMatrix.m32; +end; + +function TfsMatrix.Getm33: Single; +begin + Result := FMatrix.m33; +end; + +function TfsMatrix.GetRect: TMatrix; +begin + Result := FMatrix; +end; + +procedure TfsMatrix.Setm11(const Value: Single); +begin + FMatrix.m11 := Value; +end; + +procedure TfsMatrix.Setm12(const Value: Single); +begin + FMatrix.m12 := Value; +end; + +procedure TfsMatrix.Setm13(const Value: Single); +begin + FMatrix.m13 := Value; +end; + +procedure TfsMatrix.Setm21(const Value: Single); +begin + FMatrix.m21 := Value; +end; + +procedure TfsMatrix.Setm22(const Value: Single); +begin + FMatrix.m22 := Value; +end; + +procedure TfsMatrix.Setm23(const Value: Single); +begin + FMatrix.m23 := Value; +end; + +procedure TfsMatrix.Setm31(const Value: Single); +begin + FMatrix.m31 := Value; +end; + +procedure TfsMatrix.Setm32(const Value: Single); +begin + FMatrix.m32 := Value; +end; + +procedure TfsMatrix.Setm33(const Value: Single); +begin + FMatrix.m33 := Value; +end; + +{ TfsPointF } + +constructor TfsPointF.Create(aPointF: TPointF); +begin + FPointF.X := aPointF.X; + FPointF.Y := aPointF.Y; +end; + +function TfsPointF.GetRect: TPointF; +begin + Result := FPointF; +end; + +function TfsPointF.GetRectP: PPointF; +begin + Result := @FPointF; +end; + +function TfsPointF.GetX: Single; +begin + Result := FPointF.X; +end; + +function TfsPointF.GetY: Single; +begin + Result := FPointF.Y; +end; + +procedure TfsPointF.SetX(const Value: Single); +begin + FPointF.X := Value; +end; + +procedure TfsPointF.SetY(const Value: Single); +begin + FPointF.Y := Value; +end; + +{ TfsVector } + +constructor TfsVector.Create(aVector: TVector); +begin + FVector.X := aVector.X; + FVector.Y := aVector.Y; + FVector.W := aVector.W; +end; + +function TfsVector.GetRect: TVector; +begin + Result := FVector; +end; + +function TfsVector.GetRectP: PVector; +begin + Result := @FVector; +end; + +function TfsVector.GetW: Single; +begin + Result := FVector.W; +end; + +function TfsVector.GetX: Single; +begin + Result := FVector.X; +end; + +function TfsVector.GetY: Single; +begin + Result := FVector.Y; +end; + +procedure TfsVector.SetW(const Value: Single); +begin + FVector.W := Value; +end; + +procedure TfsVector.SetX(const Value: Single); +begin + FVector.X := Value; +end; + +procedure TfsVector.SetY(const Value: Single); +begin + FVector.Y := Value; +end; + +{$ENDIF} + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddConst('fmCreate', 'Integer', fmCreate); + AddConst('fmOpenRead', 'Integer', fmOpenRead); + AddConst('fmOpenWrite', 'Integer', fmOpenWrite); + AddConst('fmOpenReadWrite', 'Integer', fmOpenReadWrite); + AddConst('fmShareExclusive', 'Integer', fmShareExclusive); + AddConst('fmShareDenyWrite', 'Integer', fmShareDenyWrite); + AddConst('fmShareDenyNone', 'Integer', fmShareDenyNone); + AddConst('soFromBeginning', 'Integer', soFromBeginning); + AddConst('soFromCurrent', 'Integer', soFromCurrent); + AddConst('soFromEnd', 'Integer', soFromEnd); + AddEnum('TDuplicates', 'dupIgnore, dupAccept, dupError'); + AddEnum('TPrinterOrientation', 'poPortrait, poLandscape'); + + with AddClass(TObject, '') do + begin + AddConstructor('constructor Create', CallMethod); + AddMethod('procedure Free', CallMethod); + AddMethod('function ClassName: String', CallMethod); + end; + with AddClass(TPersistent, 'TObject') do + AddMethod('procedure Assign(Source: TPersistent)', CallMethod); + AddClass(TCollectionItem, 'TPersistent'); + with AddClass(TCollection, 'TPersistent') do + begin + AddMethod('procedure Clear', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddDefaultProperty('Items', 'Integer', 'TCollectionItem', CallMethod, True); + end; + with AddClass(TList, 'TObject') do + begin + AddMethod('function Add(Item: TObject): Integer', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('function IndexOf(Item: TObject): Integer', CallMethod); + AddMethod('procedure Insert(Index: Integer; Item: TObject)', CallMethod); + AddMethod('function Remove(Item: TObject): Integer', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddDefaultProperty('Items', 'Integer', 'TObject', CallMethod); + end; + with AddClass(TStrings, 'TPersistent') do + begin + AddConstructor('constructor Create', CallMethod); + AddMethod('function Add(const S: string): Integer', CallMethod); + AddMethod('function AddObject(const S: string; AObject: TObject): Integer', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('function IndexOf(const S: string): Integer', CallMethod); + AddMethod('function IndexOfName(const Name: string): Integer', CallMethod); + AddMethod('function IndexOfObject(AObject: TObject): Integer', CallMethod); + AddMethod('procedure Insert(Index: Integer; const S: string)', CallMethod); + AddMethod('procedure InsertObject(Index: Integer; const S: string; AObject: TObject)', CallMethod); + AddMethod('procedure LoadFromFile(const FileName: string)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToFile(const FileName: string)', CallMethod); + AddMethod('procedure Move(CurIndex, NewIndex: Integer)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + + AddProperty('CommaText', 'string', GetProp, SetProp); + AddProperty('Count', 'Integer', GetProp, nil); + AddIndexProperty('Names', 'Integer', 'string', CallMethod, True); + AddIndexProperty('Objects', 'Integer', 'TObject', CallMethod); + AddIndexProperty('Values', 'String', 'string', CallMethod); + AddDefaultProperty('Strings', 'Integer', 'string', CallMethod); + AddProperty('Text', 'string', GetProp, SetProp); + end; + with AddClass(TStringList, 'TStrings') do + begin + AddMethod('function Find(s: String; var Index: Integer): Boolean', CallMethod); + AddMethod('procedure Sort', CallMethod); + AddProperty('Duplicates', 'TDuplicates', GetProp, SetProp); + AddProperty('Sorted', 'Boolean', GetProp, SetProp); + end; + with AddClass(TStream, 'TObject') do + begin + AddMethod('function Read(var Buffer: string; Count: Longint): Longint', CallMethod); + AddMethod('function Write(Buffer: string; Count: Longint): Longint', CallMethod); + AddMethod('function Seek(Offset: Longint; Origin: Word): Longint', CallMethod); + AddMethod('function CopyFrom(Source: TStream; Count: Longint): Longint', CallMethod); + AddProperty('Position', 'Longint', GetProp, SetProp); + AddProperty('Size', 'Longint', GetProp, nil); + end; + with AddClass(TFileStream, 'TStream') do + AddConstructor('constructor Create(Filename: String; Mode: Word)', CallMethod); + with AddClass(TMemoryStream, 'TStream') do + begin + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure LoadFromFile(Filename: String)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToFile(Filename: String)', CallMethod); + end; + with AddClass(TComponent, 'TPersistent') do + begin + AddConstructor('constructor Create(AOwner: TComponent)', CallMethod); + AddProperty('Owner', 'TComponent', GetProp, nil); + end; +{$IFDEF FMX} + AddClass(TfsRectF, 'TPersistent'); + AddClass(TfsMatrix, 'TPersistent'); + AddClass(TfsPointF, 'TPersistent'); + AddClass(TfsVector, 'TPersistent'); + with AddClass(TFmxObject, 'TComponent') do + begin + AddMethod('function Clone(AOwner: TComponent): TFmxObject', CallMethod); + AddMethod('procedure CloneChildFromStream(AStream: TStream)', CallMethod); + AddMethod('procedure AddObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure InsertObject(Index: Integer; AObject: TFmxObject)', CallMethod); + AddMethod('procedure RemoveObject(AObject: TFmxObject)', CallMethod); + AddMethod('procedure RemoveObject(Index: Integer)', CallMethod); + AddMethod('procedure Exchange(AObject1: TFmxObject; AObject2: TFmxObject)', CallMethod); + AddMethod('procedure DeleteChildren()', CallMethod); + AddMethod('procedure BringToFront()', CallMethod); + AddMethod('procedure SendToBack()', CallMethod); + AddMethod('procedure AddObjectsToList(AList: TList)', CallMethod); +{$IFNDEF DELPHI18} + AddMethod('procedure AddControlsToList(AList: TList)', CallMethod); +{$ENDIF} +{$IFNDEF DELPHI20} + AddMethod('procedure GetTabOrderList(List: TList; AChildren: Boolean)', CallMethod); +{$ENDIF} + AddMethod('procedure LoadFromStream(AStream: TStream)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + AddMethod('procedure LoadFromBinStream(AStream: TStream)', CallMethod); + AddMethod('procedure SaveToBinStream(AStream: TStream)', CallMethod); + AddMethod('function FindStyleResource(AStyleLookup: string): TFmxObject', CallMethod); +{$IFNDEF DELPHI18} + AddMethod('procedure UpdateStyle()', CallMethod); +{$ENDIF} +{$IFNDEF DELPHI21} + AddMethod('procedure StartAnimation(AName: string)', CallMethod); + AddMethod('procedure StopAnimation(AName: string)', CallMethod); + AddMethod('procedure StartTriggerAnimation(AInstance: TFmxObject; ATrigger: string)', CallMethod); + AddMethod('procedure StartTriggerAnimationWait(AInstance: TFmxObject; ATrigger: string)', CallMethod); +{$IFDEF DELPHI17} + AddMethod('procedure StopTriggerAnimation(AInstance: TFmxObject; ATrigger: string)', CallMethod); +{$ELSE} + AddMethod('procedure StopTriggerAnimation(AInstance: TFmxObject)', CallMethod); +{$ENDIF} + + AddMethod('procedure ApplyTriggerEffect(AInstance: TFmxObject; ATrigger: string)', CallMethod); +{$ENDIF} + AddMethod('procedure AnimateFloat(APropertyName: string; NewValue: Single; Duration: Single; AType: TAnimationType; AInterpolation: TInterpolationType)', CallMethod); + AddMethod('procedure AnimateColor(APropertyName: string; NewValue: TAlphaColor; Duration: Single; AType: TAnimationType; AInterpolation: TInterpolationType)', CallMethod); + AddMethod('procedure AnimateFloatDelay(APropertyName: string; NewValue: Single; Duration: Single; Delay: Single; AType: TAnimationType; AInterpolation: TInterpolationType)', CallMethod); + AddMethod('procedure AnimateFloatWait(APropertyName: string; NewValue: Single; Duration: Single; AType: TAnimationType; AInterpolation: TInterpolationType)', CallMethod); + AddMethod('procedure StopPropertyAnimation(APropertyName: string)', CallMethod); + AddProperty('Parent', 'TFmxObject', GetProp, SetProp); + AddProperty('Index', 'Integer', GetProp, SetProp); + end; +{$ENDIF} + with AddClass(TfsXMLItem, 'TObject') do + begin + AddConstructor('constructor Create', CallMethod); + AddMethod('procedure AddItem(Item: TfsXMLItem)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure InsertItem(Index: Integer; Item: TfsXMLItem)', CallMethod); + AddMethod('function Add: TfsXMLItem', CallMethod); + AddMethod('function Find(const Name: String): Integer', CallMethod); + AddMethod('function FindItem(const Name: String): TfsXMLItem', CallMethod); + AddMethod('function Root: TfsXMLItem', CallMethod); + AddProperty('Data', 'Integer', GetProp, SetProp); + AddProperty('Count', 'Integer', GetProp, nil); + AddDefaultProperty('Items', 'Integer', 'TfsXMLItem', CallMethod, True); + AddIndexProperty('Prop', 'String', 'String', CallMethod); + AddProperty('Name', 'String', GetProp, SetProp); + AddProperty('Parent', 'TfsXMLItem', GetProp, nil); + AddProperty('Text', 'String', GetProp, SetProp); + end; + with AddClass(TfsXMLDocument, 'TObject') do + begin + AddConstructor('constructor Create', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToFile(const FileName: String)', CallMethod); + AddMethod('procedure LoadFromFile(const FileName: String)', CallMethod); + AddProperty('Root', 'TfsXMLItem', GetProp, nil); + end; + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + i: Integer; + s: String; + _TList: TList; + _TStrings: TStrings; + _TStream: TStream; + _TMemoryStream: TMemoryStream; + _TfsXMLItem: TfsXMLItem; + _TfsXMLDocument: TfsXMLDocument; +{$IFDEF FMX} + _fmxObj: TFmxObject; +{$ENDIF} +begin + Result := 0; + + if ClassType = TObject then + begin + if MethodName = 'CREATE' then + {$IFDEF FPC} + begin + if Instance is TList then + Result := frxInteger(TList.Create) + else + Result := frxInteger(Instance.Create); + end + {$ELSE} + Result := frxInteger(Instance.Create) + {$ENDIF} + else if MethodName = 'FREE' then + Instance.Free + else if MethodName = 'CLASSNAME' then + Result := Instance.ClassName + end + else if ClassType = TPersistent then + begin + if MethodName = 'ASSIGN' then + TPersistent(Instance).Assign(TPersistent(frxInteger(Caller.Params[0]))); + end + else if ClassType = TCollection then + begin + if MethodName = 'CLEAR' then + TCollection(Instance).Clear + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TCollection(Instance).Items[Caller.Params[0]]) + end + else if ClassType = TList then + begin + _TList := TList(Instance); + if MethodName = 'ADD' then + _TList.Add(Pointer(frxInteger(Caller.Params[0]))) + else if MethodName = 'CLEAR' then + _TList.Clear + else if MethodName = 'DELETE' then + _TList.Delete(Caller.Params[0]) + else if MethodName = 'INDEXOF' then + Result := _TList.IndexOf(Pointer(frxInteger(Caller.Params[0]))) + else if MethodName = 'INSERT' then + _TList.Insert(Caller.Params[0], Pointer(frxInteger(Caller.Params[1]))) + else if MethodName = 'REMOVE' then + _TList.Remove(Pointer(frxInteger(Caller.Params[0]))) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(_TList.Items[Caller.Params[0]]) + else if MethodName = 'ITEMS.SET' then + _TList.Items[Caller.Params[0]] := Pointer(frxInteger(Caller.Params[1])) + end + else if ClassType = TStrings then + begin + _TStrings := TStrings(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(_TStrings.Create) + else if MethodName = 'ADD' then + Result := _TStrings.Add(Caller.Params[0]) + else if MethodName = 'ADDOBJECT' then + Result := _TStrings.AddObject(Caller.Params[0], TObject(frxInteger(Caller.Params[1]))) + else if MethodName = 'CLEAR' then + _TStrings.Clear + else if MethodName = 'DELETE' then + _TStrings.Delete(Caller.Params[0]) + else if MethodName = 'INDEXOF' then + Result := _TStrings.IndexOf(Caller.Params[0]) + else if MethodName = 'INDEXOFNAME' then + Result := _TStrings.IndexOfName(Caller.Params[0]) + else if MethodName = 'INDEXOFOBJECT' then + Result := _TStrings.IndexOfObject(TObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'INSERT' then + _TStrings.Insert(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'INSERTOBJECT' then + _TStrings.InsertObject(Caller.Params[0], Caller.Params[1], TObject(frxInteger(Caller.Params[2]))) + else if MethodName = 'LOADFROMFILE' then + _TStrings.LoadFromFile(Caller.Params[0]) + else if MethodName = 'LOADFROMSTREAM' then + _TStrings.LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'MOVE' then + _TStrings.Move(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'SAVETOFILE' then + _TStrings.SaveToFile(Caller.Params[0]) + else if MethodName = 'SAVETOSTREAM' then + _TStrings.SaveToStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'NAMES.GET' then + Result := _TStrings.Names[Caller.Params[0]] + else if MethodName = 'OBJECTS.GET' then + Result := frxInteger(_TStrings.Objects[Caller.Params[0]]) + else if MethodName = 'OBJECTS.SET' then + _TStrings.Objects[Caller.Params[0]] := TObject(frxInteger(Caller.Params[1])) + else if MethodName = 'VALUES.GET' then + Result := _TStrings.Values[Caller.Params[0]] + else if MethodName = 'VALUES.SET' then + _TStrings.Values[Caller.Params[0]] := Caller.Params[1] + else if MethodName = 'STRINGS.GET' then + Result := _TStrings.Strings[Caller.Params[0]] + else if MethodName = 'STRINGS.SET' then + _TStrings.Strings[Caller.Params[0]] := Caller.Params[1] + end + else if ClassType = TStringList then + begin + if MethodName = 'FIND' then + begin + Result := TStringList(Instance).Find(Caller.Params[0], i); + Caller.Params[1] := i; + end + else if MethodName = 'SORT' then + TStringList(Instance).Sort + end + else if ClassType = TStream then + begin + _TStream := TStream(Instance); + if MethodName = 'READ' then + begin + SetLength(s, Integer(Caller.Params[1])); + Result := _TStream.Read(s[1], Caller.Params[1]); + SetLength(s, Integer(Result)); + Caller.Params[0] := s; + end + else if MethodName = 'WRITE' then + begin + s := Caller.Params[0]; + Result := _TStream.Write(s[1], Caller.Params[1]); + end + else if MethodName = 'SEEK' then +{$IFDEF DELPHI18} + Result := _TStream.Seek(Int64(Caller.Params[0]), Word(Caller.Params[1])) +{$ELSE} +{$IFDEF FPC} + Result := _TStream.Seek(Int64(Caller.Params[0]), Word(Caller.Params[1])) +{$ELSE} + Result := _TStream.Seek(Caller.Params[0], Caller.Params[1]) +{$ENDIF} +{$ENDIF} + else if MethodName = 'COPYFROM' then + Result := _TStream.CopyFrom(TStream(frxInteger(Caller.Params[0])), Caller.Params[1]) + end + else if ClassType = TFileStream then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TFileStream(Instance).Create(Caller.Params[0], Caller.Params[1])) + end + else if ClassType = TMemoryStream then + begin + _TMemoryStream := TMemoryStream(Instance); + if MethodName = 'CLEAR' then + _TMemoryStream.Clear + else if MethodName = 'LOADFROMSTREAM' then + _TMemoryStream.LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADFROMFILE' then + _TMemoryStream.LoadFromFile(Caller.Params[0]) + else if MethodName = 'SAVETOSTREAM' then + _TMemoryStream.SaveToStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOFILE' then + _TMemoryStream.SaveToFile(Caller.Params[0]) + end + else if ClassType = TComponent then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TComponent(Instance).Create(TComponent(frxInteger(Caller.Params[0])))) + end + else if ClassType = TfsXMLItem then + begin + _TfsXMLItem := TfsXMLItem(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(_TfsXMLItem.Create) + else if MethodName = 'ADDITEM' then + _TfsXMLItem.AddItem(TfsXMLItem(frxInteger(Caller.Params[0]))) + else if MethodName = 'CLEAR' then + _TfsXMLItem.Clear + else if MethodName = 'INSERTITEM' then + _TfsXMLItem.InsertItem(Caller.Params[0], TfsXMLItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'ADD' then + Result := frxInteger(_TfsXMLItem.Add) + else if MethodName = 'FIND' then + Result := _TfsXMLItem.Find(Caller.Params[0]) + else if MethodName = 'FINDITEM' then + Result := frxInteger(_TfsXMLItem.FindItem(Caller.Params[0])) + else if MethodName = 'PROP.GET' then + Result := _TfsXMLItem.Prop[Caller.Params[0]] + else if MethodName = 'PROP.SET' then + _TfsXMLItem.Prop[Caller.Params[0]] := Caller.Params[1] + else if MethodName = 'ROOT' then + Result := frxInteger(_TfsXMLItem.Root) + else if MethodName = 'ROOT' then + Result := frxInteger(_TfsXMLItem.Root) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(_TfsXMLItem[Caller.Params[0]]) + end + else if ClassType = TfsXMLDocument then + begin + _TfsXMLDocument := TfsXMLDocument(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(_TfsXMLDocument.Create) + else if MethodName = 'SAVETOSTREAM' then + _TfsXMLDocument.SaveToStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADFROMSTREAM' then + _TfsXMLDocument.LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOFILE' then + _TfsXMLDocument.SaveToFile(Caller.Params[0]) + else if MethodName = 'LOADFROMFILE' then + _TfsXMLDocument.LoadFromFile(Caller.Params[0]) + end +{$IFDEF FMX} + else if ClassType = TFmxObject then + begin + _fmxObj := TFmxObject(Instance); + if MethodName = 'CLONE' then + Result := frxInteger(_fmxObj.Clone(TComponent(frxInteger(Caller.Params[0])))) +// else if MethodName = 'CLONECHILDFROMSTREAM' then +// _fmxObj.CloneChildFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'ADDOBJECT' then + _fmxObj.AddObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'INSERTOBJECT' then + _fmxObj.InsertObject(Integer(Caller.Params[0]), TFmxObject(frxInteger(Caller.Params[1]))) + else if MethodName = 'REMOVEOBJECT' then + _fmxObj.RemoveObject(TFmxObject(frxInteger(Caller.Params[0]))) + else if MethodName = 'REMOVEOBJECT' then + _fmxObj.RemoveObject(Integer(Caller.Params[0])) + else if MethodName = 'EXCHANGE' then + _fmxObj.Exchange(TFmxObject(frxInteger(Caller.Params[0])), TFmxObject(frxInteger(Caller.Params[1]))) + else if MethodName = 'DELETECHILDREN' then + _fmxObj.DeleteChildren() + else if MethodName = 'BRINGTOFRONT' then + _fmxObj.BringToFront() + else if MethodName = 'SENDTOBACK' then + _fmxObj.SendToBack() +{$IFDEF DELPHI17} + else if MethodName = 'ADDOBJECTSTOLIST' then + _fmxObj.AddObjectsToList(TFmxObjectList(frxInteger(Caller.Params[0]))) +{$IFNDEF DELPHI18} + else if MethodName = 'ADDCONTROLSTOLIST' then + _fmxObj.AddControlsToList(TFmxObjectList(frxInteger(Caller.Params[0]))) +{$ENDIF} +{$IFNDEF DELPHI20} + else if MethodName = 'GETTABORDERLIST' then + _fmxObj.GetTabOrderList(TInterfaceList(frxInteger(Caller.Params[0])), Boolean(Caller.Params[1])) +{$ENDIF} +{$ELSE} + else if MethodName = 'ADDOBJECTSTOLIST' then + _fmxObj.AddObjectsToList(TList(frxInteger(Caller.Params[0]))) + else if MethodName = 'ADDCONTROLSTOLIST' then + _fmxObj.AddControlsToList(TList(frxInteger(Caller.Params[0]))) + else if MethodName = 'GETTABORDERLIST' then + _fmxObj.GetTabOrderList(TList(frxInteger(Caller.Params[0])), Boolean(Caller.Params[1])) + else if MethodName = 'LOADFROMSTREAM' then + _fmxObj.LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOSTREAM' then + _fmxObj.SaveToStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADFROMBINSTREAM' then + _fmxObj.LoadFromBinStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOBINSTREAM' then + _fmxObj.SaveToBinStream(TStream(frxInteger(Caller.Params[0]))) +{$ENDIF} + else if MethodName = 'FINDSTYLERESOURCE' then + Result := frxInteger(_fmxObj.FindStyleResource(string(Caller.Params[0]))) +{$IFNDEF DELPHI18} + else if MethodName = 'UPDATESTYLE' then + _fmxObj.UpdateStyle() +{$ENDIF} +{$IFNDEF DELPHI21} + else if MethodName = 'STARTANIMATION' then + _fmxObj.StartAnimation(string(Caller.Params[0])) + else if MethodName = 'STOPANIMATION' then + _fmxObj.StopAnimation(string(Caller.Params[0])) + else if MethodName = 'STARTTRIGGERANIMATION' then + _fmxObj.StartTriggerAnimation(TFmxObject(frxInteger(Caller.Params[0])), string(Caller.Params[1])) + else if MethodName = 'STARTTRIGGERANIMATIONWAIT' then + _fmxObj.StartTriggerAnimationWait(TFmxObject(frxInteger(Caller.Params[0])), string(Caller.Params[1])) + else if MethodName = 'STOPTRIGGERANIMATION' then +{$IFDEF DELPHI17} + _fmxObj.StopTriggerAnimation(TFmxObject(frxInteger(Caller.Params[0])), string(Caller.Params[1])) +{$ELSE} + _fmxObj.StopTriggerAnimation(TFmxObject(frxInteger(Caller.Params[0]))) +{$ENDIF} + else if MethodName = 'APPLYTRIGGEREFFECT' then + _fmxObj.ApplyTriggerEffect(TFmxObject(frxInteger(Caller.Params[0])), string(Caller.Params[1])) +{$ENDIF} + else if MethodName = 'ANIMATEFLOAT' then + _fmxObj.AnimateFloat(string(Caller.Params[0]), Single(Caller.Params[1]), Single(Caller.Params[2]), TAnimationType(Caller.Params[3]), TInterpolationType(Caller.Params[4])) + else if MethodName = 'ANIMATECOLOR' then + _fmxObj.AnimateColor(string(Caller.Params[0]), TAlphaColor(Caller.Params[1]), Single(Caller.Params[2]), TAnimationType(Caller.Params[3]), TInterpolationType(Caller.Params[4])) + else if MethodName = 'ANIMATEFLOATDELAY' then + _fmxObj.AnimateFloatDelay(string(Caller.Params[0]), Single(Caller.Params[1]), Single(Caller.Params[2]), Single(Caller.Params[3]), TAnimationType(Caller.Params[4]), TInterpolationType(Caller.Params[5])) + else if MethodName = 'ANIMATEFLOATWAIT' then + _fmxObj.AnimateFloatWait(string(Caller.Params[0]), Single(Caller.Params[1]), Single(Caller.Params[2]), TAnimationType(Caller.Params[3]), TInterpolationType(Caller.Params[4])) + else if MethodName = 'STOPPROPERTYANIMATION' then + _fmxObj.StopPropertyAnimation(string(Caller.Params[0])) +end; +{$ENDIF} +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCollection then + begin + if PropName = 'COUNT' then + Result := TCollection(Instance).Count + end + else if ClassType = TList then + begin + if PropName = 'COUNT' then + Result := TList(Instance).Count + end + else if ClassType = TStrings then + begin + if PropName = 'COMMATEXT' then + Result := TStrings(Instance).CommaText + else if PropName = 'COUNT' then + Result := TStrings(Instance).Count + else if PropName = 'TEXT' then + Result := TStrings(Instance).Text + end + else if ClassType = TStringList then + begin + if PropName = 'DUPLICATES' then + Result := TStringList(Instance).Duplicates + else if PropName = 'SORTED' then + Result := TStringList(Instance).Sorted + end + else if ClassType = TStream then + begin + if PropName = 'POSITION' then + Result := TStream(Instance).Position + else if PropName = 'SIZE' then + Result := TStream(Instance).Size + end + else if ClassType = TComponent then + begin + if PropName = 'OWNER' then + Result := frxInteger(TComponent(Instance).Owner) + end + else if ClassType = TfsXMLItem then + begin + if PropName = 'DATA' then + Result := frxInteger(TfsXMLItem(Instance).Data) + else if PropName = 'COUNT' then + Result := TfsXMLItem(Instance).Count + else if PropName = 'NAME' then + Result := TfsXMLItem(Instance).Name + else if PropName = 'PARENT' then + Result := frxInteger(TfsXMLItem(Instance).Parent) + else if PropName = 'TEXT' then + Result := TfsXMLItem(Instance).Text + end + else if ClassType = TfsXMLDocument then + begin + if PropName = 'ROOT' then + Result := frxInteger(TfsXMLDocument(Instance).Root) + end + {$IFDEF FMX} + else if ClassType = TFmxObject then + begin + if PropName = 'PARENT' then + Result := frxInteger(TFmxObject(Instance).Parent) + else if PropName = 'INDEX' then + Result := TFmxObject(Instance).Index + end + {$ENDIF} +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TStrings then + begin + if PropName = 'COMMATEXT' then + TStrings(Instance).CommaText := Value + else if PropName = 'TEXT' then + TStrings(Instance).Text := Value + end + else if ClassType = TStringList then + begin + if PropName = 'DUPLICATES' then + TStringList(Instance).Duplicates := Value + else if PropName = 'SORTED' then + TStringList(Instance).Sorted := Value + end + else if ClassType = TStream then + begin + if PropName = 'POSITION' then + TStream(Instance).Position := Value + end + else if ClassType = TfsXMLItem then + begin + if PropName = 'DATA' then + TfsXMLItem(Instance).Data := Pointer(frxInteger(Value)) + else if PropName = 'NAME' then + TfsXMLItem(Instance).Name := Value + else if PropName = 'TEXT' then + TfsXMLItem(Instance).Text := Value + end + {$IFDEF FMX} + else if ClassType = TFmxObject then + begin + if PropName = 'PARENT' then + TFmxObject(Instance).Parent := TFmxObject(frxInteger(Value)) + else if PropName = 'INDEX' then + TFmxObject(Instance).Index := Value + end + {$ENDIF} +end; + + +initialization +{$IFDEF DELPHI16} +{$IFDEF FMX} + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsClassesRTTI, TFmxObject); +{$ELSE} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsClassesRTTI, TControl); +{$ENDIF} +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_iconst.pas b/FastScript/fs_iconst.pas new file mode 100644 index 0000000..cba1878 --- /dev/null +++ b/FastScript/fs_iconst.pas @@ -0,0 +1,66 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Resources } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_iconst; +{$ENDIF} + +interface + +{$i fs.inc} + +var + SLangNotFound: String; + SInvalidLanguage: String; + SIdRedeclared: String; + SUnknownType: String; + SIncompatibleTypes: String; + SIdUndeclared: String; + SClassRequired: String; + SIndexRequired: String; + SStringError: String; + SClassError: String; + SArrayRequired: String; + SVarRequired: String; + SNotEnoughParams: String; + STooManyParams: String; + SLeftCantAssigned: String; + SForError: String; + SEventError: String; + SComponentError: String; + SComponentAssignError: String; + + +implementation + +initialization + SLangNotFound := 'Language ''%s'' not found'; + SInvalidLanguage := 'Invalid language definition'; + SIdRedeclared := 'Identifier redeclared: '; + SUnknownType := 'Unknown type: '; + SIncompatibleTypes := 'Incompatible types'; + SIdUndeclared := 'Undeclared identifier: '; + SClassRequired := 'Class type required'; + SIndexRequired := 'Index required'; + SStringError := 'Strings doesn''t have properties or methods'; + SClassError := 'Class %s does not have a default property'; + SArrayRequired := 'Array type required'; + SVarRequired := 'Variable required'; + SNotEnoughParams := 'Not enough actual parameters'; + STooManyParams := 'Too many actual parameters'; + SLeftCantAssigned := 'Left side cannot be assigned to'; + SForError := 'For loop variable must be numeric variable'; + SEventError := 'Event handler must be a procedure'; + SComponentError := 'Component with name %s not found'; + SComponentAssignError := 'Can not assign value to component field %s'; + +end. diff --git a/FastScript/fs_icpp.pas b/FastScript/fs_icpp.pas new file mode 100644 index 0000000..dc1f955 --- /dev/null +++ b/FastScript/fs_icpp.pas @@ -0,0 +1,183 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ C++ grammar } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_icpp; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_itools{$IFDEF DELPHI16}, Controls{$ENDIF}; +{$ELSE} + +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_itools, FMX.Types; +{$ENDIF} + +type +{$i frxPlatformsAttribute.inc} + TfsCPP = class(TComponent); + + +implementation + +const + CPP_GRAMMAR = + '' + + '' + + '<' + + 'err20 text="''>'' expected"/>' + + '' + + '' + + '<' + + 'sequence>' + + '<' + + 'sequence>' + + '' + + '' + + '' + + ''; + + +initialization +{$IFDEF DELPHI16} +{$IFDEF FMX} + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsCPP, TFmxObject); +{$ELSE} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsCPP, TControl); +{$ENDIF} +{$ENDIF} + fsRegisterLanguage('C++Script', CPP_GRAMMAR); + +end. diff --git a/FastScript/fs_idbctrlsrtti.pas b/FastScript/fs_idbctrlsrtti.pas new file mode 100644 index 0000000..accf4b5 --- /dev/null +++ b/FastScript/fs_idbctrlsrtti.pas @@ -0,0 +1,189 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ DB controls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_idbctrlsrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_itools, fs_iformsrtti, fs_idbrtti, DB +{$IFDEF CLX} +, QDBCtrls, QDBGrids +{$ELSE} +, DBCtrls, DBGrids +{$ENDIF} +{$IFDEF DELPHI16}, Controls{$ENDIF}; + + +type +{$i frxPlatformsAttribute.inc} + TfsDBCtrlsRTTI = class(TComponent); // fake component + + +implementation + +type +{$IFNDEF FPC} + THackDBLookupControl = class(TDBLookupControl); +{$ENDIF} + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnumSet('TButtonSet', 'nbFirst, nbPrior, nbNext, nbLast,' + + 'nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh'); + AddEnum('TColumnButtonStyle', 'cbsAuto, cbsEllipsis, cbsNone'); + AddEnumSet('TDBGridOptions', 'dgEditing, dgAlwaysShowEditor, dgTitles,' + + 'dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,' + + 'dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect'); + + AddClass(TDBEdit, 'TWinControl'); + AddClass(TDBText, 'TGraphicControl'); + with AddClass(TDBCheckBox, 'TWinControl') do + AddProperty('Checked', 'Boolean', GetProp, nil); + with AddClass(TDBComboBox, 'TCustomComboBox') do + AddProperty('Text', 'String', GetProp, nil); + AddClass(TDBListBox, 'TCustomListBox'); + with AddClass(TDBRadioGroup, 'TWinControl') do + begin + AddProperty('ItemIndex', 'Integer', GetProp, nil); + AddProperty('Value', 'String', GetProp, nil); + end; + AddClass(TDBMemo, 'TWinControl'); + AddClass(TDBImage, 'TCustomControl'); + AddClass(TDBNavigator, 'TWinControl'); +{$IFNDEF FPC} + with AddClass(TDBLookupControl, 'TCustomControl') do + AddProperty('KeyValue', 'Variant', GetProp, SetProp); + with AddClass(TDBLookupListBox, 'TDBLookupControl') do + AddProperty('SelectedItem', 'String', GetProp, nil); + with AddClass(TDBLookupComboBox, 'TDBLookupControl') do + AddProperty('Text', 'String', GetProp, nil); +{$ENDIF} + AddClass(TColumnTitle, 'TPersistent'); + AddClass(TColumn, 'TPersistent'); + with AddClass(TDBGridColumns, 'TCollection') do + begin + AddMethod('function Add: TColumn', CallMethod); + AddMethod('procedure RebuildColumns', CallMethod); + AddMethod('procedure RestoreDefaults', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TColumn', CallMethod, True); + end; + AddClass(TDBGrid, 'TWinControl'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TDBGridColumns then + begin + if MethodName = 'ADD' then + Result := frxInteger(TDBGridColumns(Instance).Add) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TDBGridColumns(Instance).Items[Caller.Params[0]]) +{$IFNDEF FPC} + else if MethodName = 'REBUILDCOLUMNS' then + TDBGridColumns(Instance).RebuildColumns + else if MethodName = 'RESTOREDEFAULTS' then + TDBGridColumns(Instance).RestoreDefaults +{$ENDIF} + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TDBCheckBox then + begin + if PropName = 'CHECKED' then + Result := TDBCheckBox(Instance).Checked + end + else if ClassType = TDBComboBox then + begin + if PropName = 'TEXT' then + Result := TDBComboBox(Instance).Text + end + else if ClassType = TDBRadioGroup then + begin + if PropName = 'ITEMINDEX' then + Result := TDBRadioGroup(Instance).ItemIndex + else if PropName = 'VALUE' then + Result := TDBRadioGroup(Instance).Value + end +{$IFNDEF FPC} + else if ClassType = TDBLookupControl then + begin + if PropName = 'KEYVALUE' then + Result := THackDBLookupControl(Instance).KeyValue + end + else if ClassType = TDBLookupListBox then + begin + if PropName = 'SELECTEDITEM' then + Result := TDBLookupListBox(Instance).SelectedItem + end + else if ClassType = TDBLookupComboBox then + begin + if PropName = 'TEXT' then + Result := TDBLookupComboBox(Instance).Text + end +{$ENDIF} +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin +{$IFNDEF FPC} + if ClassType = TDBLookupControl then + begin + if PropName = 'KEYVALUE' then + THackDBLookupControl(Instance).KeyValue := Value + end +{$ENDIF} +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsDBCtrlsRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_idbreg.pas b/FastScript/fs_idbreg.pas new file mode 100644 index 0000000..3c4dcbf --- /dev/null +++ b/FastScript/fs_idbreg.pas @@ -0,0 +1,46 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Registration unit } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_idbreg; + +{$i fs.inc} + +interface + + +procedure Register; + +implementation + +uses + Classes +{$IFNDEF Delphi6} +, DsgnIntf +{$ELSE} +, DesignIntf +{$ENDIF} +{$IFDEF DELPHI16} +, Controls +{$ENDIF} +, fs_idbrtti, fs_idbctrlsrtti; + +{-----------------------------------------------------------------------} + +procedure Register; +begin +{$IFDEF DELPHI16} + //GroupDescendentsWith(TfsDBRTTI, TControl); + //GroupDescendentsWith(TfsDBCtrlsRTTI, TControl); +{$ENDIF} + RegisterComponents('FastScript', [TfsDBRTTI, TfsDBCtrlsRTTI]); +end; + +end. diff --git a/FastScript/fs_idbrtti.pas b/FastScript/fs_idbrtti.pas new file mode 100644 index 0000000..d389fd4 --- /dev/null +++ b/FastScript/fs_idbrtti.pas @@ -0,0 +1,583 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ DB.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_idbrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_itools, fs_iclassesrtti, fs_ievents, + DB +{$IFDEF Delphi16} + , System.Types +{$ENDIF} +{$IFDEF DELPHI16}, Controls{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsDBRTTI = class(TComponent); // fake component + + TfsDatasetNotifyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Dataset: TDataset); + function GetMethod: Pointer; override; + end; + + TfsFilterRecordEvent = class(TfsCustomEvent) + public + procedure DoEvent(DataSet: TDataSet; var Accept: Boolean); + function GetMethod: Pointer; override; + end; + + TfsFieldGetTextEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TField; var Text: String; DisplayText: Boolean); + function GetMethod: Pointer; override; + end; + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TfsDatasetNotifyEvent } + +procedure TfsDatasetNotifyEvent.DoEvent(Dataset: TDataset); +begin + CallHandler([Dataset]); +end; + +function TfsDatasetNotifyEvent.GetMethod: Pointer; +begin + Result := @TfsDatasetNotifyEvent.DoEvent; +end; + + +{ TfsFilterRecordEvent } + +procedure TfsFilterRecordEvent.DoEvent(DataSet: TDataSet; var Accept: Boolean); +begin + CallHandler([DataSet, Accept]); + Accept := Handler.Params[1].Value; +end; + +function TfsFilterRecordEvent.GetMethod: Pointer; +begin + Result := @TfsFilterRecordEvent.DoEvent; +end; + + +{ TfsFieldGetTextEvent } + +procedure TfsFieldGetTextEvent.DoEvent(Sender: TField; var Text: String; DisplayText: Boolean); +begin + CallHandler([Sender, Text, DisplayText]); + Text := Handler.Params[1].Value; +end; + +function TfsFieldGetTextEvent.GetMethod: Pointer; +begin + Result := @TfsFieldGetTextEvent.DoEvent; +end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TFieldType', 'ftUnknown, ftString, ftSmallint, ftInteger, ftWord,' + + 'ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime,' + + 'ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo,' + + 'ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString,' + + 'ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob,' + + 'ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd'); + AddEnum('TBlobStreamMode', 'bmRead, bmWrite, bmReadWrite'); + AddEnumSet('TLocateOptions', 'loCaseInsensitive, loPartialKey'); + AddEnumSet('TFilterOptions', 'foCaseInsensitive, foNoPartialCompare'); + AddEnum('TParamType', 'ptUnknown, ptInput, ptOutput, ptInputOutput, ptResult'); + + with AddClass(TField, 'TComponent') do + begin + AddProperty('AsBoolean', 'Boolean', GetProp, SetProp); + AddProperty('AsCurrency', 'Currency', GetProp, SetProp); + AddProperty('AsDateTime', 'TDateTime', GetProp, SetProp); + AddProperty('AsFloat', 'Double', GetProp, SetProp); + AddProperty('AsInteger', 'Integer', GetProp, SetProp); + AddProperty('AsString', 'String', GetProp, SetProp); + AddProperty('AsVariant', 'Variant', GetProp, SetProp); + AddProperty('DataType', 'TFieldType', GetProp, nil); + AddProperty('DisplayName', 'String', GetProp, nil); + AddProperty('DisplayText', 'String', GetProp, nil); + AddProperty('IsNull', 'Boolean', GetProp, nil); + AddProperty('Size', 'Integer', GetProp, SetProp); + AddProperty('Value', 'Variant', GetProp, SetProp); + AddProperty('OldValue', 'Variant', GetProp, nil); + AddEvent('OnGetText', TfsFieldGetTextEvent); + end; + with AddClass(TFields, 'TObject') do + AddDefaultProperty('Fields', 'Integer', 'TField', CallMethod, True); + AddClass(TStringField, 'TField'); + AddClass(TNumericField, 'TField'); + AddClass(TIntegerField, 'TNumericField'); + AddClass(TSmallIntField, 'TIntegerField'); + AddClass(TWordField, 'TIntegerField'); + AddClass(TAutoIncField, 'TIntegerField'); + AddClass(TFloatField, 'TNumericField'); + AddClass(TCurrencyField, 'TFloatField'); + AddClass(TBooleanField, 'TField'); + AddClass(TDateTimeField, 'TField'); + AddClass(TDateField, 'TDateTimeField'); + AddClass(TTimeField, 'TDateTimeField'); + AddClass(TBinaryField, 'TField'); + AddClass(TBytesField, 'TBinaryField'); + AddClass(TVarBytesField, 'TBinaryField'); + AddClass(TBCDField, 'TNumericField'); + with AddClass(TBlobField, 'TField') do + begin + AddMethod('procedure LoadFromFile(const FileName: String)', CallMethod); + AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod); + AddMethod('procedure SaveToFile(const FileName: String)', CallMethod); + AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod); + end; + AddClass(TMemoField, 'TBlobField'); + AddClass(TGraphicField, 'TBlobField'); + AddClass(TFieldDef, 'TPersistent'); + with AddClass(TFieldDefs, 'TObject') do + begin + AddMethod('function AddFieldDef: TFieldDef', CallMethod); + AddMethod('function Find(const Name: string): TFieldDef', CallMethod); + AddMethod('procedure Add(const Name: string; DataType: TFieldType; Size: Word; Required: Boolean)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Update', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TFieldDef', CallMethod, True); + end; + AddClass(TDataSource, 'TComponent'); + AddType('TBookmark', fvtVariant); + with AddClass(TDataSet, 'TComponent') do + begin + AddMethod('procedure Open', CallMethod); + AddMethod('procedure Close', CallMethod); + AddMethod('procedure First', CallMethod); + AddMethod('procedure Last', CallMethod); + AddMethod('procedure Next', CallMethod); + AddMethod('procedure Prior', CallMethod); + AddMethod('procedure Cancel', CallMethod); + AddMethod('procedure Delete', CallMethod); + AddMethod('procedure Post', CallMethod); + AddMethod('procedure Append', CallMethod); + AddMethod('procedure Insert', CallMethod); + AddMethod('procedure Edit', CallMethod); + + AddMethod('function FieldByName(const FieldName: string): TField', CallMethod); + AddMethod('procedure GetFieldNames(List: TStrings)', CallMethod); + AddMethod('function FindFirst: Boolean', CallMethod); + AddMethod('function FindLast: Boolean', CallMethod); + AddMethod('function FindNext: Boolean', CallMethod); + AddMethod('function FindPrior: Boolean', CallMethod); + AddMethod('procedure FreeBookmark(Bookmark: TBookmark)', CallMethod); + AddMethod('function GetBookmark: TBookmark', CallMethod); + AddMethod('procedure GotoBookmark(Bookmark: TBookmark)', CallMethod); + AddMethod('function Locate(const KeyFields: string; const KeyValues: Variant;' + + 'Options: TLocateOptions): Boolean', CallMethod); + AddMethod('function IsEmpty: Boolean', CallMethod); + AddMethod('procedure EnableControls', CallMethod); + AddMethod('procedure DisableControls', CallMethod); + + AddProperty('Bof', 'Boolean', GetProp, nil); + AddProperty('Eof', 'Boolean', GetProp, nil); + AddProperty('FieldCount', 'Integer', GetProp, nil); + AddProperty('FieldDefs', 'TFieldDefs', GetProp, nil); + AddProperty('Fields', 'TFields', GetProp, nil); + AddProperty('Filter', 'string', GetProp, SetProp); + AddProperty('Filtered', 'Boolean', GetProp, SetProp); + AddProperty('FilterOptions', 'TFilterOptions', GetProp, SetProp); + AddProperty('Active', 'Boolean', GetProp, SetProp); + + AddEvent('BeforeOpen', TfsDatasetNotifyEvent); + AddEvent('AfterOpen', TfsDatasetNotifyEvent); + AddEvent('BeforeClose', TfsDatasetNotifyEvent); + AddEvent('AfterClose', TfsDatasetNotifyEvent); + AddEvent('BeforeInsert', TfsDatasetNotifyEvent); + AddEvent('AfterInsert', TfsDatasetNotifyEvent); + AddEvent('BeforeEdit', TfsDatasetNotifyEvent); + AddEvent('AfterEdit', TfsDatasetNotifyEvent); + AddEvent('BeforePost', TfsDatasetNotifyEvent); + AddEvent('AfterPost', TfsDatasetNotifyEvent); + AddEvent('BeforeCancel', TfsDatasetNotifyEvent); + AddEvent('AfterCancel', TfsDatasetNotifyEvent); + AddEvent('BeforeDelete', TfsDatasetNotifyEvent); + AddEvent('AfterDelete', TfsDatasetNotifyEvent); + AddEvent('BeforeScroll', TfsDatasetNotifyEvent); + AddEvent('AfterScroll', TfsDatasetNotifyEvent); + AddEvent('OnCalcFields', TfsDatasetNotifyEvent); + AddEvent('OnFilterRecord', TfsFilterRecordEvent); + AddEvent('OnNewRecord', TfsDatasetNotifyEvent); + end; + + with AddClass(TParam, 'TPersistent') do + begin + AddMethod('procedure Clear', CallMethod); + AddProperty('AsBoolean', 'Boolean', GetProp, SetProp); + AddProperty('AsCurrency', 'Currency', GetProp, SetProp); + AddProperty('AsDateTime', 'TDateTime', GetProp, SetProp); + AddProperty('AsFloat', 'Double', GetProp, SetProp); + AddProperty('AsInteger', 'Integer', GetProp, SetProp); + AddProperty('AsDate', 'TDate', GetProp, SetProp); + AddProperty('AsTime', 'TTime', GetProp, SetProp); + AddProperty('AsString', 'String', GetProp, SetProp); + AddProperty('Bound', 'Boolean', GetProp, SetProp); + AddProperty('IsNull', 'Boolean', GetProp, nil); + AddProperty('Text', 'String', GetProp, SetProp); + end; + with AddClass(TParams, 'TPersistent') do + begin + AddMethod('function ParamByName(const Value: string): TParam', CallMethod); + AddMethod('function FindParam(const Value: string): TParam', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TParam', CallMethod, True); + end; + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + _TDataSet: TDataSet; + + function IntToLocateOptions(i: Integer): TLocateOptions; + begin + Result := []; + if (i and 1) <> 0 then + Result := Result + [loCaseInsensitive]; + if (i and 2) <> 0 then + Result := Result + [loPartialKey]; + end; + +begin + Result := 0; + + if ClassType = TFields then + begin + if MethodName = 'FIELDS.GET' then + Result := frxInteger(TFields(Instance)[Caller.Params[0]]) + end + else if ClassType = TFieldDefs then + begin + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TFieldDefs(Instance)[Caller.Params[0]]) + else if MethodName = 'ADD' then + TFieldDefs(Instance).Add(Caller.Params[0], TFieldType(Caller.Params[1]), Caller.Params[2], Caller.Params[3]) + else if MethodName = 'ADDFIELDDEF' then + Result := frxInteger(TFieldDefs(Instance).AddFieldDef) + else if MethodName = 'CLEAR' then + TFieldDefs(Instance).Clear + else if MethodName = 'FIND' then + Result := frxInteger(TFieldDefs(Instance).Find(Caller.Params[0])) + else if MethodName = 'UPDATE' then + TFieldDefs(Instance).Update + end + else if ClassType = TBlobField then + begin + if MethodName = 'LOADFROMFILE' then + TBlobField(Instance).LoadFromFile(Caller.Params[0]) + else if MethodName = 'LOADFROMSTREAM' then + TBlobField(Instance).LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVETOFILE' then + TBlobField(Instance).SaveToFile(Caller.Params[0]) + else if MethodName = 'SAVETOSTREAM' then + TBlobField(Instance).SaveToStream(TStream(frxInteger(Caller.Params[0]))) + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if MethodName = 'OPEN' then + _TDataSet.Open + else if MethodName = 'CLOSE' then + _TDataSet.Close + else if MethodName = 'FIRST' then + _TDataSet.First + else if MethodName = 'LAST' then + _TDataSet.Last + else if MethodName = 'NEXT' then + _TDataSet.Next + else if MethodName = 'PRIOR' then + _TDataSet.Prior + else if MethodName = 'CANCEL' then + _TDataSet.Cancel + else if MethodName = 'DELETE' then + _TDataSet.Delete + else if MethodName = 'POST' then + _TDataSet.Post + else if MethodName = 'APPEND' then + _TDataSet.Append + else if MethodName = 'INSERT' then + _TDataSet.Insert + else if MethodName = 'EDIT' then + _TDataSet.Edit + else if MethodName = 'FIELDBYNAME' then + Result := frxInteger(_TDataSet.FieldByName(Caller.Params[0])) + else if MethodName = 'GETFIELDNAMES' then + _TDataSet.GetFieldNames(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'FINDFIRST' then + Result := _TDataSet.FindFirst + else if MethodName = 'FINDLAST' then + Result := _TDataSet.FindLast + else if MethodName = 'FINDNEXT' then + Result := _TDataSet.FindNext + else if MethodName = 'FINDPRIOR' then + Result := _TDataSet.FindPrior + else if MethodName = 'FREEBOOKMARK' then + _TDataSet.FreeBookmark(TBookMark(frxInteger(Caller.Params[0]))) + + else if MethodName = 'GETBOOKMARK' then +{$IFDEF DELPHI16} + Result := Variant(_TDataSet.GetBookmark) +{$ELSE} + Result := Variant(frxInteger(_TDataSet.GetBookmark)) +{$ENDIF} + else if MethodName = 'GOTOBOOKMARK' then +{$IFDEF DELPHI16} + _TDataSet.GotoBookmark(TBookMark(Variant(Caller.Params[0]))) +{$ELSE} + _TDataSet.GotoBookmark(TBookMark(frxInteger(Caller.Params[0]))) +{$ENDIF} + else if MethodName = 'LOCATE' then + Result := _TDataSet.Locate(Caller.Params[0], Caller.Params[1], IntToLocateOptions(Caller.Params[2])) + else if MethodName = 'ISEMPTY' then + Result := _TDataSet.IsEmpty + else if MethodName = 'ENABLECONTROLS' then + _TDataSet.EnableControls + else if MethodName = 'DISABLECONTROLS' then + _TDataSet.DisableControls + end + else if ClassType = TParam then + begin + if MethodName = 'CLEAR' then + TParam(Instance).Clear + end + else if ClassType = TParams then + begin + if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TParams(Instance).ParamByName(Caller.Params[0])) + else if MethodName = 'FINDPARAM' then + Result := frxInteger(TParams(Instance).FindParam(Caller.Params[0])) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TParams(Instance)[Caller.Params[0]]) + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +var + _TField: TField; + _TParam: TParam; + _TDataSet: TDataSet; + + function FilterOptionsToInt(f: TFilterOptions): Integer; + begin + Result := 0; + if foCaseInsensitive in f then + Result := Result or 1; + if foNoPartialCompare in f then + Result := Result or 2; + end; + +begin + Result := 0; + + if ClassType = TField then + begin + _TField := TField(Instance); + if PropName = 'ASBOOLEAN' then + Result := _TField.AsBoolean + else if PropName = 'ASCURRENCY' then + Result := _TField.AsCurrency + else if PropName = 'ASDATETIME' then + Result := _TField.AsDateTime + else if PropName = 'ASFLOAT' then + Result := _TField.AsFloat + else if PropName = 'ASINTEGER' then + Result := _TField.AsInteger + else if PropName = 'ASSTRING' then + Result := _TField.AsString + else if PropName = 'ASVARIANT' then + Result := _TField.AsVariant + else if PropName = 'DATATYPE' then + Result := _TField.DataType + else if PropName = 'DISPLAYNAME' then + Result := _TField.DisplayName + else if PropName = 'DISPLAYTEXT' then + Result := _TField.DisplayText + else if PropName = 'ISNULL' then + Result := _TField.IsNull + else if PropName = 'SIZE' then + Result := _TField.Size + else if PropName = 'VALUE' then + Result := _TField.Value + else if PropName = 'OLDVALUE' then + Result := _TField.OldValue + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if PropName = 'BOF' then + Result := _TDataSet.Bof + else if PropName = 'EOF' then + Result := _TDataSet.Eof + else if PropName = 'FIELDCOUNT' then + Result := _TDataSet.FieldCount + else if PropName = 'FIELDDEFS' then + Result := frxInteger(_TDataSet.FieldDefs) + else if PropName = 'FIELDS' then + Result := frxInteger(_TDataSet.Fields) + else if PropName = 'FILTER' then + Result := _TDataSet.Filter + else if PropName = 'FILTERED' then + Result := _TDataSet.Filtered + else if PropName = 'FILTEROPTIONS' then + Result := FilterOptionsToInt(_TDataSet.FilterOptions) + else if PropName = 'ACTIVE' then + Result := _TDataSet.Active + end + else if ClassType = TParam then + begin + _TParam := TParam(Instance); + if PropName = 'BOUND' then + Result := _TParam.Bound + else if PropName = 'ISNULL' then + Result := _TParam.IsNull + else if PropName = 'TEXT' then + Result := _TParam.Text + else if PropName = 'ASBOOLEAN' then + Result := _TParam.AsBoolean + else if PropName = 'ASCURRENCY' then + Result := _TParam.AsCurrency + else if PropName = 'ASDATETIME' then + Result := _TParam.AsDateTime + else if PropName = 'ASFLOAT' then + Result := _TParam.AsFloat + else if PropName = 'ASINTEGER' then + Result := _TParam.AsInteger + else if PropName = 'ASDATE' then + Result := _TParam.AsDate + else if PropName = 'ASTIME' then + Result := _TParam.AsTime + else if PropName = 'ASSTRING' then + Result := _TParam.AsString + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +var + _TField: TField; + _TParam: TParam; + _TDataSet: TDataSet; + + function IntToFilterOptions(i: Integer): TFilterOptions; + begin + Result := []; + if (i and 1) <> 0 then + Result := Result + [foCaseInsensitive]; + if (i and 2) <> 0 then + Result := Result + [foNoPartialCompare]; + end; + +begin + if ClassType = TField then + begin + _TField := TField(Instance); + if PropName = 'ASBOOLEAN' then + _TField.AsBoolean := Value + else if PropName = 'ASCURRENCY' then + _TField.AsCurrency := Value + else if PropName = 'ASDATETIME' then + _TField.AsDateTime := Value + else if PropName = 'ASFLOAT' then + _TField.AsFloat := Value + else if PropName = 'ASINTEGER' then + _TField.AsInteger := Value + else if PropName = 'ASSTRING' then + _TField.AsString := Value + else if PropName = 'ASVARIANT' then + _TField.AsVariant := Value + else if PropName = 'VALUE' then + _TField.Value := Value + else if PropName = 'SIZE' then + _TField.Size := Value + end + else if ClassType = TDataSet then + begin + _TDataSet := TDataSet(Instance); + if PropName = 'FILTER' then + _TDataSet.Filter := Value + else if PropName = 'FILTERED' then + _TDataSet.Filtered := Value + else if PropName = 'FILTEROPTIONS' then + _TDataSet.FilterOptions := IntToFilterOptions(Value) + else if PropName = 'ACTIVE' then + _TDataSet.Active := Value + end + else if ClassType = TParam then + begin + _TParam := TParam(Instance); + if PropName = 'ASBOOLEAN' then + _TParam.AsBoolean := Value + else if PropName = 'ASCURRENCY' then + _TParam.AsCurrency := Value + else if PropName = 'ASDATETIME' then + _TParam.AsDateTime := Value + else if PropName = 'ASFLOAT' then + _TParam.AsFloat := Value + else if PropName = 'ASINTEGER' then + _TParam.AsInteger := Value + else if PropName = 'ASDATE' then + _TParam.AsDate := Value + else if PropName = 'ASTIME' then + _TParam.AsTime := Value + else if PropName = 'ASSTRING' then + _TParam.AsString := Value + else if PropName = 'BOUND' then + _TParam.Bound := Value + else if PropName = 'TEXT' then + _TParam.Text := Value + end +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsDBRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_idialogsrtti.pas b/FastScript/fs_idialogsrtti.pas new file mode 100644 index 0000000..6f9a406 --- /dev/null +++ b/FastScript/fs_idialogsrtti.pas @@ -0,0 +1,167 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Dialogs.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_idialogsrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_iclassesrtti +{$IFDEF DELPHI16} +, System.UITypes +{$ENDIF} +{$IFDEF CLX} +, QDialogs +{$ELSE} +, Dialogs +{$ENDIF} +{$IFDEF Delphi16} + , System.Types +{$ENDIF} +{$IFDEF DELPHI16}, Controls{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsDialogsRTTI = class(TComponent); // fake component + + +implementation + +type +{$IFDEF CLX} + THackDialog = class(TDialog); +{$ELSE} + THackDialog = class(TCommonDialog); +{$ENDIF} + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + +type + TWordSet = set of 0..15; + PWordSet = ^TWordSet; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +var + dlg: String; +begin + inherited Create(AScript); + with AScript do + begin + AddEnumSet('TOpenOptions', 'ofReadOnly, ofOverwritePrompt, ofHideReadOnly,' + + 'ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect,' + + 'ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt,' + + 'ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton,' + + 'ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, ofEnableIncludeNotify,' + + 'ofEnableSizing'); + AddEnum('TFileEditStyle', 'fsEdit, fsComboBox'); + AddEnumSet('TColorDialogOptions', 'cdFullOpen, cdPreventFullOpen, cdShowHelp,' + + 'cdSolidColor, cdAnyColor'); + AddEnumSet('TFontDialogOptions', 'fdAnsiOnly, fdTrueTypeOnly, fdEffects,' + + 'fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts,' + + 'fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts,' + + 'fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton'); + AddEnum('TFontDialogDevice', 'fdScreen, fdPrinter, fdBoth'); + AddEnum('TPrintRange', 'prAllPages, prSelection, prPageNums'); + AddEnumSet('TPrintDialogOptions', 'poPrintToFile, poPageNums, poSelection,' + + 'poWarning, poHelp, poDisablePrintToFile'); +{$IFNDEF CLX} + AddEnum('TMsgDlgType', 'mtWarning, mtError, mtInformation, mtConfirmation, mtCustom'); + AddEnumSet('TMsgDlgButtons', 'mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, ' + + 'mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp'); +{$ELSE} + AddEnum('TMsgDlgType', 'mtCustom, mtInformation, mtWarning, mtError, mtConfirmation'); + AddEnumSet('TMsgDlgButtons', 'mbNone, mbOk, mbCancel, mbYes, mbNo, mbAbort, ' + + 'mbRetry, mbIgnore'); +{$ENDIF} + +{$IFDEF CLX} + dlg := 'TDialog'; + with AddClass(TDialog, 'TComponent') do +{$ELSE} + dlg := 'TCommonDialog'; + with AddClass(TCommonDialog, 'TComponent') do +{$ENDIF} + AddMethod('function Execute: Boolean', CallMethod); + AddClass(TOpenDialog, dlg); + AddClass(TSaveDialog, dlg); + AddClass(TColorDialog, dlg); + AddClass(TFontDialog, dlg); +{$IFNDEF CLX} + {$IFNDEF FPC} + // todo: wait lazarus 1.0 TPrintDialog is targeted in Mantis to 1.0 + AddClass(TPrintDialog, dlg); + AddClass(TPrinterSetupDialog, dlg); + {$ENDIF} +{$ENDIF} + AddMethod('function MessageDlg(Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer', CallMethod, 'ctOther'); + AddMethod('function InputBox(ACaption, APrompt, ADefault: string): string', CallMethod, 'ctOther'); + AddMethod('function InputQuery(ACaption, APrompt: string; var Value: string): Boolean', CallMethod, 'ctOther'); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + s: String; + b: TMsgDlgButtons; +begin + Result := 0; + +{$IFDEF CLX} + if ClassType = TDialog then +{$ELSE} + if ClassType = TCommonDialog then +{$ENDIF} + begin + if MethodName = 'EXECUTE' then + Result := THackDialog(Instance).Execute + end + else if MethodName = 'INPUTBOX' then + Result := InputBox(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'INPUTQUERY' then + begin + s := Caller.Params[2]; + Result := InputQuery(Caller.Params[0], Caller.Params[1], s); + Caller.Params[2] := s; + end + else if MethodName = 'MESSAGEDLG' then + begin + Word(PWordSet(@b)^) := Caller.Params[2]; + Result := MessageDlg(Caller.Params[0], Caller.Params[1], b, Caller.Params[3]); + end +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsDialogsRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. \ No newline at end of file diff --git a/FastScript/fs_idisp.pas b/FastScript/fs_idisp.pas new file mode 100644 index 0000000..a361d8a --- /dev/null +++ b/FastScript/fs_idisp.pas @@ -0,0 +1,136 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ OLE dispatch module } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_idisp; + +interface + +{$I fs.inc} + +uses + Windows, Classes, SysUtils, ActiveX, ComObj, fs_iinterpreter +{$IFDEF Delphi6} +, Variants +{$ENDIF}; + + +type + TfsOLEHelper = class(TfsCustomHelper) + private + function DispatchInvoke(const ParamArray: Variant; ParamCount: Integer; + Flags: Word): Variant; + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + public + constructor Create(const AName: String); + end; + + +implementation + + +constructor TfsOLEHelper.Create(const AName: String); +begin + inherited Create(AName, fvtVariant, ''); +end; + +function TfsOLEHelper.DispatchInvoke(const ParamArray: Variant; ParamCount: Integer; + Flags: Word): Variant; +const + DispIDArgs: Longint = DISPID_PROPERTYPUT; +var + DispId: TDispId; + Params: TDISPPARAMS; + pName: WideString; + ExcepMess: WideString; + Args: array[0..63] of Variant; + i: Integer; + PResult: PVariant; + Status: Integer; + ExcepInfo: TExcepInfo; +begin + ExcepMess := ''; + pName := WideString(Name); + IDispatch(ParentValue).GetIDsOfNames(GUID_NULL, @pName, 1, GetThreadLocale, @DispId); + + for i := 0 to ParamCount - 1 do + Args[i] := ParamArray[ParamCount - i - 1]; + + Params.rgvarg := @Args; + Params.rgdispidNamedArgs := nil; + Params.cArgs := ParamCount; + Params.cNamedArgs := 0; + if (Flags = DISPATCH_PROPERTYPUT) or (Flags = DISPATCH_PROPERTYPUTREF) then + begin + Params.rgdispidNamedArgs := @DispIDArgs; + Params.cNamedArgs := 1; + end; + + if NeedResult and (Flags <> DISPATCH_PROPERTYPUT) and (Flags <> DISPATCH_PROPERTYPUTREF) then + PResult := @Result else + PResult := nil; + if PResult <> nil then + VarClear(PResult^); + if (Flags = DISPATCH_METHOD) {and (ParamCount = 0)} and (PResult <> nil) then + Flags := DISPATCH_METHOD or DISPATCH_PROPERTYGET; + + Status := IDispatch(ParentValue).Invoke(DispId, GUID_NULL, 0, + Flags, Params, PResult, @ExcepInfo, nil); + if Status <> 0 then + begin + if ExcepInfo.bstrSource <> '' then + ExcepMess := #13+#10 + 'Source :: '+ ExcepInfo.bstrSource; + if ExcepInfo.bstrDescription <> '' then + ExcepMess := ExcepMess + #13#10 + 'Description :: '+ ExcepInfo.bstrDescription; + if ExcepInfo.bstrHelpFile <> '' then + ExcepMess := ExcepMess + #13#10 + 'Help File :: '+ ExcepInfo.bstrHelpFile; +{$IFDEF Delphi12} + raise Exception.Create('OLE error ' + IntToHex(Status, 8) + ': ' + + String(Name) + ': ' + SysErrorMessage(Status) + ExcepMess); +{$ELSE} + raise Exception.Create('OLE error ' + IntToHex(Status, 8) + ': ' + + Name + ': ' + SysErrorMessage(Status) + ExcepMess); +{$ENDIF} + end; +end; + +procedure TfsOLEHelper.SetValue(const Value: Variant); +var + i: Integer; + v: Variant; + Flag: Word; +begin + v := VarArrayCreate([0, Count], varVariant); + for i := 0 to Count - 1 do + v[i] := Params[i].Value; + v[Count] := Value; + Flag := DISPATCH_PROPERTYPUT; + if VarType(Value) = varDispatch then + Flag := DISPATCH_PROPERTYPUTREF; + DispatchInvoke(v, Count + 1, Flag); + ParentValue := Null; +end; + +function TfsOLEHelper.GetValue: Variant; +var + i: Integer; + v: Variant; +begin + v := VarArrayCreate([0, Count - 1], varVariant); + for i := 0 to Count - 1 do + v[i] := Params[i].Value; + + Result := DispatchInvoke(v, Count, DISPATCH_METHOD); + ParentValue := Null; +end; + +end. diff --git a/FastScript/fs_ievents.pas b/FastScript/fs_ievents.pas new file mode 100644 index 0000000..310d117 --- /dev/null +++ b/FastScript/fs_ievents.pas @@ -0,0 +1,201 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Standard events } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_ievents; + +interface + +{$i fs.inc} + +uses SysUtils, Classes, fs_iinterpreter +{$IFDEF CLX} +, QControls, QForms +{$ELSE} +, Controls, Forms +{$ENDIF}; + +type + TfsNotifyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject); + function GetMethod: Pointer; override; + end; + + TfsMouseEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + function GetMethod: Pointer; override; + end; + + TfsMouseMoveEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; Shift: TShiftState; X, Y: Integer); + function GetMethod: Pointer; override; + end; + + TfsKeyEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Key: Word; Shift: TShiftState); + function GetMethod: Pointer; override; + end; + + TfsKeyPressEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Key: Char); + function GetMethod: Pointer; override; + end; + + TfsCloseEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var Action: TCloseAction); + function GetMethod: Pointer; override; + end; + + TfsCloseQueryEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var CanClose: Boolean); + function GetMethod: Pointer; override; + end; + + TfsCanResizeEvent = class(TfsCustomEvent) + public + procedure DoEvent(Sender: TObject; var NewWidth, NewHeight: Integer; + var Resize: Boolean); + function GetMethod: Pointer; override; + end; + + +implementation + + +type + TByteSet = set of 0..7; + PByteSet = ^TByteSet; + + +{ TfsNotifyEvent } + +procedure TfsNotifyEvent.DoEvent(Sender: TObject); +begin + CallHandler([Sender]); +end; + +function TfsNotifyEvent.GetMethod: Pointer; +begin + Result := @TfsNotifyEvent.DoEvent; +end; + +{ TfsMouseEvent } + +procedure TfsMouseEvent.DoEvent(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, Integer(Button), b, X, Y]); +end; + +function TfsMouseEvent.GetMethod: Pointer; +begin + Result := @TfsMouseEvent.DoEvent; +end; + +{ TfsMouseMoveEvent } + +procedure TfsMouseMoveEvent.DoEvent(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, b, X, Y]); +end; + +function TfsMouseMoveEvent.GetMethod: Pointer; +begin + Result := @TfsMouseMoveEvent.DoEvent; +end; + +{ TfsKeyEvent } + +procedure TfsKeyEvent.DoEvent(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + b: Byte; +begin + b := Byte(PByteSet(@Shift)^); + CallHandler([Sender, Key, b]); + Key := Handler.Params[1].Value; +end; + +function TfsKeyEvent.GetMethod: Pointer; +begin + Result := @TfsKeyEvent.DoEvent; +end; + +{ TfsKeyPressEvent } + +procedure TfsKeyPressEvent.DoEvent(Sender: TObject; var Key: Char); +begin + CallHandler([Sender, Key]); + Key := String(Handler.Params[1].Value)[1]; +end; + +function TfsKeyPressEvent.GetMethod: Pointer; +begin + Result := @TfsKeyPressEvent.DoEvent; +end; + +{ TfsCloseEvent } + +procedure TfsCloseEvent.DoEvent(Sender: TObject; var Action: TCloseAction); +begin + CallHandler([Sender, Integer(Action)]); + Action := Handler.Params[1].Value; +end; + +function TfsCloseEvent.GetMethod: Pointer; +begin + Result := @TfsCloseEvent.DoEvent; +end; + +{ TfsCloseQueryEvent } + +procedure TfsCloseQueryEvent.DoEvent(Sender: TObject; var CanClose: Boolean); +begin + CallHandler([Sender, CanClose]); + CanClose := Handler.Params[1].Value; +end; + +function TfsCloseQueryEvent.GetMethod: Pointer; +begin + Result := @TfsCloseQueryEvent.DoEvent; +end; + +{ TfsCanResizeEvent } + +procedure TfsCanResizeEvent.DoEvent(Sender: TObject; var NewWidth, + NewHeight: Integer; var Resize: Boolean); +begin + CallHandler([Sender, NewWidth, NewHeight, Resize]); + NewWidth := Handler.Params[1].Value; + NewHeight := Handler.Params[2].Value; + Resize := Handler.Params[3].Value; +end; + +function TfsCanResizeEvent.GetMethod: Pointer; +begin + Result := @TfsCanResizeEvent.DoEvent; +end; + +end. \ No newline at end of file diff --git a/FastScript/fs_iexpression.pas b/FastScript/fs_iexpression.pas new file mode 100644 index 0000000..bc7cfdd --- /dev/null +++ b/FastScript/fs_iexpression.pas @@ -0,0 +1,957 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Expression parser } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_iexpression; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter +{$IFDEF Delphi6} +, Variants +{$ENDIF}; +{$ELSE} +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, System.Variants; +{$ENDIF} + + +type + { List of operators } + + TfsOperatorType = (opNone, opGreat, opLess, opLessEq, opGreatEq, opNonEq, opEq, + opPlus, opMinus, opOr, opXor, opMul, opDivFloat, opDivInt, opMod, opAnd, + opShl, opShr, opLeftBracket, opRightBracket, opNot, opUnMinus, opIn, opIs); + +{ TfsExpression class holds a list of operands and operators. + List is represented in the tree form. + Call to methods AddXXX puts an expression element to the list. + Call to function Value calculates and returns the expression value } + + TfsExpressionNode = class(TfsCustomVariable) + private + FLeft, FRight, FParent: TfsExpressionNode; + procedure AddNode(Node: TfsExpressionNode); + procedure RemoveNode(Node: TfsExpressionNode); + public + destructor Destroy; override; + function Priority: Integer; virtual; abstract; + end; + + TfsOperandNode = class(TfsExpressionNode) + public + constructor Create(const AValue: Variant); + function Priority: Integer; override; + end; + + TfsOperatorNode = class(TfsExpressionNode) + private + FOp: TfsOperatorType; + FOptimizeInt: Boolean; + FOptimizeBool: Boolean; + public + constructor Create(Op: TfsOperatorType); + function Priority: Integer; override; + end; + + TfsDesignatorNode = class(TfsOperandNode) + private + FDesignator: TfsDesignator; + FVar: TfsCustomVariable; + protected + function GetValue: Variant; override; + public + constructor Create(ADesignator: TfsDesignator); + destructor Destroy; override; + end; + + TfsSetNode = class(TfsOperandNode) + private + FSetExpression: TfsSetExpression; + protected + function GetValue: Variant; override; + public + constructor Create(ASet: TfsSetExpression); + destructor Destroy; override; + end; + + TfsExpression = class(TfsCustomExpression) + private + FCurNode: TfsExpressionNode; + FNode: TfsExpressionNode; + FScript: TfsScript; + FSource: String; + procedure AddOperand(Node: TfsExpressionNode); + protected + function GetValue: Variant; override; + procedure SetValue(const Value: Variant); override; + public + constructor Create(Script: TfsScript); + destructor Destroy; override; + procedure AddConst(const AValue: Variant); + procedure AddConstWithType(const AValue: Variant; aTyp: TfsVarType); + procedure AddDesignator(ADesignator: TfsDesignator); + procedure AddOperator(const Op: String); + procedure AddSet(ASet: TfsSetExpression); + + function Finalize: String; + function Optimize(Designator: TfsDesignator): String; + function SingleItem: TfsCustomVariable; + + property Source: String read FSource write FSource; + end; + + +implementation + +//VCL uses section +{$IFNDEF FMX} +uses fs_itools; +//FMX uses section +{$ELSE} +uses FMX.fs_itools; +{$ENDIF} + +type + TNoneNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TGreatNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TLessNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TLessEqNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TGreatEqNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TNonEqNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TEqNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TPlusNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TStrCatNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TMinusNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TOrNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TXorNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TMulNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TDivFloatNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TDivIntNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TModNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TAndNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TShlNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TShrNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TLeftBracketNode = class(TfsOperatorNode); + + TRightBracketNode = class(TfsOperatorNode); + + TNotNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TUnMinusNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TInNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + TIsNode = class(TfsOperatorNode) + protected + function GetValue: Variant; override; + end; + + +function TNoneNode.GetValue: Variant; +begin + Result := FLeft.Value; +end; + +function TGreatNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result > FRight.Value; +end; + +function TLessNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result < FRight.Value; +end; + +function TLessEqNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result <= FRight.Value; +end; + +function TGreatEqNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result >= FRight.Value; +end; + +function TNonEqNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result <> FRight.Value; +end; + +function TEqNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result = FRight.Value; +end; + +function TPlusNode.GetValue: Variant; +begin + Result := FLeft.Value; + {$IFDEF FPC} + if TVarData(Result).Vtype = varEmpty then + Result := 0; + {$ENDIF} + Result := Result + FRight.Value; +end; + +function TStrCatNode.GetValue: Variant; +begin + Result := FLeft.Value; + if (TVarData(Result).VType = varString){$IFDEF Delphi12} or (TVarData(Result).VType = varUString){$ENDIF} then + Result := VarToStr(Result) + VarToStr(FRight.Value) else + Result := Result + FRight.Value; +end; + +function TMinusNode.GetValue: Variant; +begin + Result := FLeft.Value; + if FOptimizeInt then + Result := frxInteger(Result) - frxInteger(FRight.Value) + else + begin + {$IFDEF FPC} + if TVarData(Result).Vtype = varEmpty then + Result := 0; + {$ENDIF} + Result := Result - FRight.Value; + end; +end; + +function TOrNode.GetValue: Variant; +begin + Result := FLeft.Value; + + if FOptimizeBool then + begin + if Boolean(Result) = False then + Result := FRight.Value; + end + else + Result := Result or FRight.Value; +end; + +function TXorNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result xor FRight.Value; +end; + +function TMulNode.GetValue: Variant; +begin + Result := FLeft.Value; + if FOptimizeInt then + Result := frxInteger(Result) * frxInteger(FRight.Value) + else + begin + {$IFDEF FPC} + if TVarData(Result).Vtype = varEmpty then + Result := 0; + {$ENDIF} + Result := Result * FRight.Value; + end; +end; + +function TDivFloatNode.GetValue: Variant; +begin + Result := FLeft.Value; + {$IFDEF FPC} + if TVarData(Result).Vtype = varEmpty then + Result := 0; + {$ENDIF} + Result := Result / FRight.Value; +end; + +function TDivIntNode.GetValue: Variant; +begin + Result := FLeft.Value; + if FOptimizeInt then + Result := frxInteger(Result) div frxInteger(FRight.Value) + else + begin + {$IFDEF FPC} + if TVarData(Result).Vtype = varEmpty then + Result := 0; + {$ENDIF} + Result := Result div FRight.Value; + end; +end; + +function TModNode.GetValue: Variant; +begin + Result := FLeft.Value; + if FOptimizeInt then + Result := frxInteger(Result) mod frxInteger(FRight.Value) + else + begin + {$IFDEF FPC} + if TVarData(Result).Vtype = varEmpty then + Result := 0; + {$ENDIF} + Result := Result mod FRight.Value; + end; +end; + +function TAndNode.GetValue: Variant; +begin + Result := FLeft.Value; + if FOptimizeBool then + begin + if Boolean(Result) = True then + Result := FRight.Value; + end + else + Result := Result and FRight.Value; +end; + +function TShlNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result shl FRight.Value; +end; + +function TShrNode.GetValue: Variant; +begin + Result := FLeft.Value; + Result := Result shr FRight.Value; +end; + +function TNotNode.GetValue: Variant; +begin + Result := not FLeft.Value; +end; + +function TUnMinusNode.GetValue: Variant; +begin + Result := -FLeft.Value; +end; + +function TInNode.GetValue: Variant; +var + i: Integer; + ar, val, selfVal: Variant; + Count: Integer; +begin + if FRight is TfsSetNode then + Result := TfsSetNode(FRight).FSetExpression.Check(FLeft.Value) + else + begin + Result := False; + ar := FRight.Value; + Count := VarArrayHighBound(ar, 1); + selfVal := FLeft.Value; + + i := 0; + while i <= Count do + begin + val := ar[i]; + Result := selfVal = val; + if (i < Count - 1) and (ar[i + 1] = Null) and not Result then { subrange } + begin + Result := (selfVal >= val) and (selfVal <= ar[i + 2]); + Inc(i, 2); + end; + + if Result then break; + Inc(i); + end; + end; +end; + +function TIsNode.GetValue: Variant; +begin + Result := TObject(frxInteger(FLeft.Value)) is + TfsClassVariable(TfsDesignatorNode(FRight).FDesignator[0].Ref).ClassRef; +end; + + +{ TfsExpressionNode } + +destructor TfsExpressionNode.Destroy; +begin + FLeft.Free; + FRight.Free; + inherited; +end; + +procedure TfsExpressionNode.AddNode(Node: TfsExpressionNode); +begin + if FLeft = nil then + FLeft := Node + else if FRight = nil then + FRight := Node; + if Node <> nil then + Node.FParent := Self; +end; + +procedure TfsExpressionNode.RemoveNode(Node: TfsExpressionNode); +begin + if FLeft = Node then + FLeft := nil + else if FRight = Node then + FRight := nil; +end; + + +{ TfsOperandNode } + +constructor TfsOperandNode.Create(const AValue: Variant); +var + t: TfsVarType; +begin +{$IFDEF CPUX64} + inherited Create('', fvtInt64, ''); +{$ELSE} + inherited Create('', fvtInt, ''); +{$ENDIF} + Value := AValue; + + t := fvtInt; + if TVarData(AValue).VType = varBoolean then + t := fvtBool + else if TVarData(AValue).VType in [varSingle, varDouble, varCurrency] then + t := fvtFloat +{$IFDEF FS_INT64} + else if (TVarData(AValue).VType = varInt64) then + t := fvtInt64 +{$ENDIF} + else if (TVarData(AValue).VType = varOleStr) or + (TVarData(AValue).VType = varString){$IFDEF Delphi12} or (TVarData(AValue).VType = varUString){$ENDIF} then + t := fvtString; + + Typ := t; +end; + +function TfsOperandNode.Priority: Integer; +begin + Result := 0; +end; + + +{ TfsOperatorNode } + +constructor TfsOperatorNode.Create(Op: TfsOperatorType); +begin +{$IFDEF CPUX64} + inherited Create('', fvtInt64, ''); +{$ELSE} + inherited Create('', fvtInt, ''); +{$ENDIF} + FOp := Op; +end; + +function TfsOperatorNode.Priority: Integer; +begin + case FOp of + opNone: + Result := 7; + opLeftBracket: + Result := 6; + opRightBracket: + Result := 5; + opGreat, opLess, opGreatEq, opLessEq, opNonEq, opEq, opIn, opIs: + Result := 4; + opPlus, opMinus, opOr, opXor: + Result := 3; + opMul, opDivFloat, opDivInt, opMod, opAnd, opShr, opShl: + Result := 2; + opNot, opUnMinus: + Result := 1; + else + Result := 0; + end; +end; + + +{ TfsDesignatorNode } + +constructor TfsDesignatorNode.Create(ADesignator: TfsDesignator); +begin + inherited Create(0); + FDesignator := ADesignator; + Typ := ADesignator.Typ; + TypeName := ADesignator.TypeName; + if FDesignator is TfsVariableDesignator then + FVar := FDesignator.RefItem else + FVar := FDesignator; +end; + +destructor TfsDesignatorNode.Destroy; +begin + FDesignator.Free; + inherited; +end; + +function TfsDesignatorNode.GetValue: Variant; +begin + Result := FVar.Value; +end; + + +{ TfsSetNode } + +constructor TfsSetNode.Create(ASet: TfsSetExpression); +begin + inherited Create(0); + FSetExpression := ASet; + Typ := fvtVariant; +end; + +destructor TfsSetNode.Destroy; +begin + FSetExpression.Free; + inherited; +end; + +function TfsSetNode.GetValue: Variant; +begin + Result := FSetExpression.Value; +end; + + +{ TfsExpression } + +constructor TfsExpression.Create(Script: TfsScript); +begin +{$IFDEF CPUX64} + inherited Create('', fvtInt64, ''); +{$ELSE} + inherited Create('', fvtInt, ''); +{$ENDIF} + FNode := TNoneNode.Create(opNone); + FCurNode := FNode; + FScript := Script; +end; + +destructor TfsExpression.Destroy; +begin + FNode.Free; + inherited; +end; + +function TfsExpression.GetValue: Variant; +begin + Result := FNode.Value; +end; + +procedure TfsExpression.AddOperand(Node: TfsExpressionNode); +begin + FCurNode.AddNode(Node); + FCurNode := Node; +end; + +procedure TfsExpression.AddOperator(const Op: String); +var + Node: TfsExpressionNode; + n, n1: TfsExpressionNode; + + function CreateOperatorNode(s: String): TfsOperatorNode; + begin + s := AnsiUpperCase(s); + if s = ' ' then + Result := TNoneNode.Create(opNone) + else if s = '>' then + Result := TGreatNode.Create(opGreat) + else if s = '<' then + Result := TLessNode.Create(opLess) + else if s = '<=' then + Result := TLessEqNode.Create(opLessEq) + else if s = '>=' then + Result := TGreatEqNode.Create(opGreatEq) + else if s = '<>' then + Result := TNonEqNode.Create(opNonEq) + else if s = '=' then + Result := TEqNode.Create(opEq) + else if s = '+' then + Result := TPlusNode.Create(opPlus) + else if s = 'STRCAT' then + Result := TStrCatNode.Create(opPlus) + else if s = '-' then + Result := TMinusNode.Create(opMinus) + else if s = 'OR' then + Result := TOrNode.Create(opOr) + else if s = 'XOR' then + Result := TXorNode.Create(opXor) + else if s = '*' then + Result := TMulNode.Create(opMul) + else if s = '/' then + Result := TDivFloatNode.Create(opDivFloat) + else if s = 'DIV' then + Result := TDivIntNode.Create(opDivInt) + else if s = 'MOD' then + Result := TModNode.Create(opMod) + else if s = 'AND' then + Result := TAndNode.Create(opAnd) + else if s = 'SHL' then + Result := TShlNode.Create(opShl) + else if s = 'SHR' then + Result := TShrNode.Create(opShr) + else if s = '(' then + Result := TLeftBracketNode.Create(opLeftBracket) + else if s = ')' then + Result := TRightBracketNode.Create(opRightBracket) + else if s = 'NOT' then + Result := TNotNode.Create(opNot) + else if s = 'UNMINUS' then + Result := TUnMinusNode.Create(opUnMinus) + else if s = 'IN' then + Result := TInNode.Create(opIn) + else if s = 'IS' then + Result := TIsNode.Create(opIs) + else + Result := nil; + end; + +begin + Node := CreateOperatorNode(Op); + Node.SourcePos := SourcePos; + + if (Op = '(') or (Op = 'unminus') or (Op = 'not') then + AddOperand(Node) + else if Op = ')' then + begin + n := FCurNode; + while n.Priority <= Node.Priority do + n := n.FParent; + + n.FParent.RemoveNode(n); + n.FParent.AddNode(n.FLeft); + + Node.Free; + Node := n.FLeft; + n.FLeft := nil; + n.Free; + end + else if FCurNode = FNode then + FNode.AddNode(Node) + else + begin + n := FCurNode; + n1 := nil; + if FCurNode.Priority <> 6 then + begin + n := FCurNode.FParent; + n1 := FCurNode; + end; + + while n.Priority <= Node.Priority do + begin + n1 := n; + n := n.FParent; + end; + + n.RemoveNode(n1); + n.AddNode(Node); + Node.AddNode(n1); + end; + + FCurNode := Node; +end; + +procedure TfsExpression.AddConst(const AValue: Variant); +var + Node: TfsOperandNode; +begin + Node := TfsOperandNode.Create(AValue); + Node.SourcePos := SourcePos; + AddOperand(Node); +end; + +procedure TfsExpression.AddConstWithType(const AValue: Variant; + aTyp: TfsVarType); +begin + AddConst(AValue); + if aTyp = fvtClass then + FCurNode.Typ := fvtVariant; +end; + +procedure TfsExpression.AddDesignator(ADesignator: TfsDesignator); +var + Node: TfsDesignatorNode; +begin + Node := TfsDesignatorNode.Create(ADesignator); + Node.SourcePos := SourcePos; + AddOperand(Node); +end; + +procedure TfsExpression.AddSet(ASet: TfsSetExpression); +var + Node: TfsSetNode; +begin + Node := TfsSetNode.Create(ASet); + Node.SourcePos := SourcePos; + AddOperand(Node); +end; + +function TfsExpression.Finalize: String; +var + ErrorPos: String; + TypeRec: TfsTypeRec; + + function GetType(Item: TfsExpressionNode): TfsTypeRec; + var + Typ1, Typ2: TfsTypeRec; + op: TfsOperatorType; + Error: Boolean; + begin + if Item = nil then + Result.Typ := fvtVariant + else if Item is TfsOperandNode then + begin + Result.Typ := Item.Typ; + Result.TypeName := Item.TypeName; + end + else + begin + Typ1 := GetType(Item.FLeft); + Typ2 := GetType(Item.FRight); +// if (Typ1.Typ = fvtInt) and (Typ2.Typ = fvtInt) then +// TfsOperatorNode(Item).FOptimizeInt := True; + if (Typ1.Typ = fvtBool) and (Typ2.Typ = fvtBool) then + TfsOperatorNode(Item).FOptimizeBool := True; + + op := TfsOperatorNode(Item).FOp; + + if (op = opIs) and (Typ1.Typ = fvtClass) and (Typ2.Typ = fvtClass) then + Error := False + else + begin + { check types compatibility } + Error := not TypesCompatible(Typ1, Typ2, FScript); + { check operators applicability } + if not Error then + case Typ1.Typ of + fvtBool: + Error := not (op in [opNonEq, opEq, opOr, opXor, opAnd, opNot]); + fvtChar, fvtString: + Error := not (op in [opGreat, opLess, opLessEq, opGreatEq, opNonEq, opEq, opPlus, opIn]); + fvtClass, fvtArray: + Error := not (op in [opNonEq, opEq]); + end; + end; + + if not Error then + begin + Result := Typ1; + { if one type is Float, resulting type is float too } + if [Typ1.Typ] + [Typ2.Typ] = [fvtInt, fvtFloat] then + Result.Typ := fvtFloat; + { case int / int = float } + if (Typ1.Typ = fvtInt) and (Typ2.Typ = fvtInt) and (op = opDivFloat) then + Result.Typ := fvtFloat; +{$IFDEF FS_INT64} + if [Typ1.Typ] + [Typ2.Typ] = [fvtInt64, fvtFloat] then + Result.Typ := fvtFloat; + { case int / int = float } + if ((Typ1.Typ = fvtInt64) or (Typ1.Typ = fvtInt)) + and ((Typ2.Typ = fvtInt64) or (Typ2.Typ = fvtInt64)) and (op = opDivFloat) then + Result.Typ := fvtFloat; +{$ENDIF} + { result of comparing two types is always boolean } + if op in [opGreat, opLess, opLessEq, opGreatEq, opNonEq, opEq, opIn, opIs] then + Result.Typ := fvtBool; + end + else if ErrorPos = '' then + ErrorPos := Item.SourcePos; + + Item.Typ := Result.Typ; + end; + end; + +begin + { remove the empty root node } + FCurNode := FNode.FLeft; + FNode.RemoveNode(FCurNode); + FNode.Free; + FNode := FCurNode; + + { check and get the expression type } + ErrorPos := ''; + TypeRec := GetType(FNode); + Typ := TypeRec.Typ; + TypeName := TypeRec.TypeName; + Result := ErrorPos; + + { expression is assignable if it has only one node of type "Variable" } + if not ((FNode is TfsDesignatorNode) and not + (TfsDesignatorNode(FNode).FDesignator.IsReadOnly)) then + IsReadOnly := True; +end; + +procedure TfsExpression.SetValue(const Value: Variant); +begin + if not IsReadOnly then + TfsDesignatorNode(FNode).FDesignator.Value := Value; +end; + +function TfsExpression.Optimize(Designator: TfsDesignator): String; +var + Op: TfsOperatorType; +begin + Result := ' '; + + if not (Designator is TfsVariableDesignator) or + not (FNode is TfsOperatorNode) then Exit; + + Op := TfsOperatorNode(FNode).FOp; + if not (Op in [opPlus, opMinus, opDivFloat, opMul]) then Exit; + + { optimize a := a op b statement } + if (FNode.FLeft is TfsDesignatorNode) and + (TfsDesignatorNode(FNode.FLeft).FDesignator is TfsVariableDesignator) and + (TfsDesignatorNode(FNode.FLeft).FDesignator.RefItem = Designator.RefItem) then + begin + FCurNode := FNode.FRight; + FNode.RemoveNode(FCurNode); + FNode.Free; + FNode := FCurNode; + + if Op = opPlus then + Result := '+' + else if Op = opMinus then + Result := '-' + else if Op = opDivFloat then + Result := '/' + else if Op = opMul then + Result := '*'; + end + { optimize a := b op a statement } + else if (FNode.FRight is TfsDesignatorNode) and + (TfsDesignatorNode(FNode.FRight).FDesignator is TfsVariableDesignator) and + (TfsDesignatorNode(FNode.FRight).FDesignator.RefItem = Designator.RefItem) and + (Op in [opPlus, opMul]) and + not (Designator.RefItem.Typ in [fvtString, fvtVariant]) then + begin + FCurNode := FNode.FLeft; + FNode.RemoveNode(FCurNode); + FNode.Free; + FNode := FCurNode; + + if Op = opPlus then + Result := '+' + else if Op = opMul then + Result := '*'; + end; +end; + +function TfsExpression.SingleItem: TfsCustomVariable; +begin + { if expression contains only one item, returns reference to it } + Result := nil; + + if FNode is TfsDesignatorNode then + begin + if TfsDesignatorNode(FNode).FDesignator is TfsVariableDesignator then + Result := TfsDesignatorNode(FNode).FDesignator.RefItem else + Result := TfsDesignatorNode(FNode).FDesignator; + end + else if FNode is TfsOperandNode then + Result := FNode; +end; + +end. diff --git a/FastScript/fs_iextctrlsrtti.pas b/FastScript/fs_iextctrlsrtti.pas new file mode 100644 index 0000000..4de9bc2 --- /dev/null +++ b/FastScript/fs_iextctrlsrtti.pas @@ -0,0 +1,434 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ ExtCtrls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_iextctrlsrtti; + +interface + +{$i fs.inc} + +uses SysUtils, Classes, fs_iinterpreter, fs_ievents, fs_iformsrtti +{$IFDEF DELPHI16} +, System.Types +{$ENDIF} +{$IFDEF CLX} +, QExtCtrls, QButtons, QCheckLst, QComCtrls +{$ELSE} +, ExtCtrls, Buttons, CheckLst, ComCtrls +{$ENDIF} +{$IFDEF DELPHI16}, Controls{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsExtCtrlsRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddEnum('TShapeType', 'stRectangle, stSquare, stRoundRect, stRoundSquare,' + + 'stEllipse, stCircle'); + AddEnum('TBevelStyle', 'bsLowered, bsRaised'); + AddEnum('TBevelShape', 'bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine,' + + 'bsRightLine, bsSpacer'); + AddEnum('TResizeStyle', 'rsNone, rsLine, rsUpdate, rsPattern'); + AddEnum('TButtonLayout', 'blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom'); + AddEnum('TButtonState', 'bsUp, bsDisabled, bsDown, bsExclusive'); + AddEnum('TButtonStyle', 'bsAutoDetect, bsWin31, bsNew'); + AddEnum('TBitBtnKind', 'bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo,' + + 'bkClose, bkAbort, bkRetry, bkIgnore, bkAll'); + AddType('TNumGlyphs', fvtInt); + AddEnum('TTabPosition', 'tpTop, tpBottom, tpLeft, tpRight'); + AddEnum('TTabStyle', 'tsTabs, tsButtons, tsFlatButtons'); + AddEnum('TStatusPanelStyle', 'psText, psOwnerDraw'); + AddEnum('TStatusPanelBevel', 'pbNone, pbLowered, pbRaised'); + AddEnum('TSortType', 'stNone, stData, stText, stBoth'); + AddEnum('TTrackBarOrientation', 'trHorizontal, trVertical'); + AddEnum('TTickMark', 'tmBottomRight, tmTopLeft, tmBoth'); + AddEnum('TTickStyle', 'tsNone, tsAuto, tsManual'); + AddEnum('TProgressBarOrientation', 'pbHorizontal, pbVertical'); + AddEnum('TIconArrangement', 'iaTop, iaLeft'); + AddEnum('TListArrangement', 'arAlignBottom, arAlignLeft, arAlignRight,' + + 'arAlignTop, arDefault, arSnapToGrid'); + AddEnum('TViewStyle', 'vsIcon, vsSmallIcon, vsList, vsReport'); + AddEnum('TToolButtonStyle', 'tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider'); + AddEnum('TDateTimeKind', 'dtkDate, dtkTime'); + AddEnum('TDTDateMode', 'dmComboBox, dmUpDown'); + AddEnum('TDTDateFormat', 'dfShort, dfLong'); + AddEnum('TDTCalAlignment', 'dtaLeft, dtaRight'); + AddEnum('TCalDayOfWeek', 'dowMonday, dowTuesday, dowWednesday, dowThursday,' + + 'dowFriday, dowSaturday, dowSunday, dowLocaleDefault'); + + AddClass(TShape, 'TGraphicControl'); + with AddClass(TPaintBox, 'TGraphicControl') do + AddEvent('OnPaint', TfsNotifyEvent); + AddClass(TImage, 'TGraphicControl'); + AddClass(TBevel, 'TGraphicControl'); + with AddClass(TTimer, 'TComponent') do + AddEvent('OnTimer', TfsNotifyEvent); + AddClass(TPanel, 'TCustomControl'); + AddClass(TSplitter, 'TGraphicControl'); + AddClass(TBitBtn, 'TButton'); + AddClass(TSpeedButton, 'TGraphicControl'); + with AddClass(TCheckListBox, 'TCustomListBox') do + AddIndexProperty('Checked', 'Integer', 'Boolean', CallMethod); + AddClass(TTabControl, 'TWinControl'); + with AddClass(TTabSheet, 'TWinControl') do + AddProperty('PageControl', 'TPageControl', GetProp, SetProp); + with AddClass(TPageControl, 'TWinControl') do + begin + AddMethod('procedure SelectNextPage(GoForward: Boolean)', CallMethod); + AddProperty('PageCount', 'Integer', GetProp, nil); + AddIndexProperty('Pages', 'Integer', 'TTabSheet', CallMethod, True); + end; + AddClass(TStatusPanel, 'TPersistent'); + with AddClass(TStatusPanels, 'TPersistent') do + begin + AddMethod('function Add: TStatusPanel', CallMethod); + AddIndexProperty('Items', 'Integer', 'TStatusPanel', CallMethod, True); + end; + AddClass(TStatusBar, 'TWinControl'); + with AddClass(TTreeNode, 'TPersistent') do + begin + AddMethod('procedure Delete', CallMethod); + AddMethod('function EditText: Boolean', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddProperty('Data', 'Pointer', GetProp, SetProp); + AddProperty('ImageIndex', 'Integer', GetProp, SetProp); + AddProperty('SelectedIndex', 'Integer', GetProp, SetProp); + AddProperty('StateIndex', 'Integer', GetProp, SetProp); + AddProperty('Text', 'String', GetProp, SetProp); + end; + with AddClass(TTreeNodes, 'TPersistent') do + begin + AddMethod('function Add(Node: TTreeNode; const S: string): TTreeNode', CallMethod); + AddMethod('function AddChild(Node: TTreeNode; const S: string): TTreeNode', CallMethod); + AddMethod('procedure BeginUpdate', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Node: TTreeNode)', CallMethod); + AddMethod('procedure EndUpdate', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddDefaultProperty('Item', 'Integer', 'TTreeNode', CallMethod, True); + end; + with AddClass(TTreeView, 'TWinControl') do + begin + AddMethod('procedure FullCollapse', CallMethod); + AddMethod('procedure FullExpand', CallMethod); + AddProperty('Items', 'TTreeNodes', GetProp, nil); + AddProperty('Selected', 'TTreeNode', GetProp, SetProp); + AddProperty('TopItem', 'TTreeNode', GetProp, SetProp); + end; + AddClass(TTrackBar, 'TWinControl'); + AddClass(TProgressBar, 'TWinControl'); + AddClass(TListColumn, 'TPersistent'); + with AddClass(TListColumns, 'TPersistent') do + begin + AddMethod('function Add: TListColumn', CallMethod); + AddDefaultProperty('Items', 'Integer', 'TListColumn', CallMethod, True); + end; + with AddClass(TListItem, 'TPersistent') do + begin + AddMethod('procedure Delete', CallMethod); + AddMethod('function EditCaption: Boolean', CallMethod); + AddProperty('Caption', 'String', GetProp, SetProp); + AddProperty('Checked', 'Boolean', GetProp, SetProp); + AddProperty('Data', 'Pointer', GetProp, SetProp); + AddProperty('ImageIndex', 'Integer', GetProp, SetProp); + AddProperty('Selected', 'Boolean', GetProp, SetProp); + AddProperty('StateIndex', 'Integer', GetProp, SetProp); + AddProperty('SubItems', 'TStrings', GetProp, SetProp); + end; + with AddClass(TListItems, 'TPersistent') do + begin + AddMethod('function Add: TListItem', CallMethod); + AddMethod('procedure BeginUpdate', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('procedure EndUpdate', CallMethod); + AddProperty('Count', 'Integer', GetProp, nil); + AddDefaultProperty('Item', 'Integer', 'TListItem', CallMethod, True); + end; +{$IFNDEF FPC} + AddClass(TIconOptions, 'TPersistent'); +{$ENDIF} + AddClass(TListView, 'TWinControl'); + AddClass(TToolButton, 'TGraphicControl'); + AddClass(TToolBar, 'TWinControl'); +{$IFNDEF CLX} + {$IFNDEF FPC} + AddClass(TMonthCalColors, 'TPersistent'); + AddClass(TDateTimePicker, 'TWinControl'); + AddClass(TMonthCalendar, 'TWinControl'); + AddClass(TCustomRichEdit, 'TWinControl'); + AddClass(TRichEdit, 'TCustomRichEdit'); + {$ENDIF} +{$ENDIF} + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TCheckListBox then + begin + if MethodName = 'CHECKED.GET' then + Result := TCheckListBox(Instance).Checked[Caller.Params[0]] + else if MethodName = 'CHECKED.SET' then + TCheckListBox(Instance).Checked[Caller.Params[0]] := Caller.Params[1] + end + else if ClassType = TPageControl then + begin + if MethodName = 'SELECTNEXTPAGE' then + TPageControl(Instance).SelectNextPage(Caller.Params[0]) + else if MethodName = 'PAGES.GET' then + Result := frxInteger(TPageControl(Instance).Pages[Caller.Params[0]]) + end + else if ClassType = TStatusPanels then + begin + if MethodName = 'ADD' then + Result := frxInteger(TStatusPanels(Instance).Add) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TStatusPanels(Instance).Items[Caller.Params[0]]) + end + else if ClassType = TTreeNode then + begin + if MethodName = 'DELETE' then + TTreeNode(Instance).Delete + else if MethodName = 'EDITTEXT' then + Result := TTreeNode(Instance).EditText + end + else if ClassType = TTreeNodes then + begin + if MethodName = 'ADD' then + Result := frxInteger(TTreeNodes(Instance).Add(TTreeNode(frxInteger(Caller.Params[0])), + Caller.Params[1])) + else if MethodName = 'ADDCHILD' then + Result := frxInteger(TTreeNodes(Instance).AddChild(TTreeNode(frxInteger(Caller.Params[0])), + Caller.Params[1])) + else if MethodName = 'BEGINUPDATE' then + TTreeNodes(Instance).BeginUpdate + else if MethodName = 'CLEAR' then + TTreeNodes(Instance).Clear + else if MethodName = 'DELETE' then + TTreeNodes(Instance).Delete(TTreeNode(frxInteger(Caller.Params[0]))) + else if MethodName = 'ENDUPDATE' then + TTreeNodes(Instance).EndUpdate + else if MethodName = 'ITEM.GET' then + Result := frxInteger(TTreeNodes(Instance).Item[Caller.Params[0]]) + end + else if ClassType = TTreeView then + begin + if MethodName = 'FULLCOLLAPSE' then + TTreeView(Instance).FullCollapse + else if MethodName = 'FULLEXPAND' then + TTreeView(Instance).FullExpand + end + else if ClassType = TListColumns then + begin + if MethodName = 'ADD' then + Result := frxInteger(TListColumns(Instance).Add) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(TListColumns(Instance).Items[Caller.Params[0]]) + end + else if ClassType = TListItem then + begin + if MethodName = 'DELETE' then + TListItem(Instance).Delete +{$IFNDEF CLX} + {$IFNDEF FPC} + else if MethodName = 'EDITCAPTION' then + Result := TListItem(Instance).EditCaption + {$ENDIF} +{$ENDIF} + end + else if ClassType = TListItems then + begin + if MethodName = 'ADD' then + Result := frxInteger(TListItems(Instance).Add) +{$IFNDEF FPC} + else if MethodName = 'BEGINUPDATE' then + TListItems(Instance).BeginUpdate +{$ENDIF} + else if MethodName = 'CLEAR' then + TListItems(Instance).Clear + else if MethodName = 'DELETE' then + TListItems(Instance).Delete(Caller.Params[0]) +{$IFNDEF FPC} + else if MethodName = 'ENDUPDATE' then + TListItems(Instance).EndUpdate +{$ENDIF} + else if MethodName = 'ITEM.GET' then + Result := frxInteger(TListItems(Instance).Item[Caller.Params[0]]) + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TPageControl then + begin + if PropName = 'PAGECOUNT' then + Result := TPageControl(Instance).PageCount + end + else if ClassType = TTabSheet then + begin + if PropName = 'PAGECONTROL' then + Result := frxInteger(TTabSheet(Instance).PageControl) + end + else if ClassType = TTreeNode then + begin + if PropName = 'COUNT' then + Result := TTreeNode(Instance).Count + else if PropName = 'DATA' then + Result := frxInteger(TTreeNode(Instance).Data) + else if PropName = 'IMAGEINDEX' then + Result := TTreeNode(Instance).ImageIndex + else if PropName = 'SELECTEDINDEX' then + Result := TTreeNode(Instance).SelectedIndex +{$IFNDEF CLX} + else if PropName = 'STATEINDEX' then + Result := TTreeNode(Instance).StateIndex +{$ENDIF} + else if PropName = 'TEXT' then + Result := TTreeNode(Instance).Text + end + else if ClassType = TTreeNodes then + begin + if PropName = 'COUNT' then + Result := TTreeNodes(Instance).Count + end + else if ClassType = TTreeView then + begin + if PropName = 'ITEMS' then + Result := frxInteger(TTreeView(Instance).Items) + else if PropName = 'SELECTED' then + Result := frxInteger(TTreeView(Instance).Selected) + else if PropName = 'TOPITEM' then + Result := frxInteger(TTreeView(Instance).TopItem) + end + else if ClassType = TListItem then + begin + if PropName = 'CAPTION' then + Result := TListItem(Instance).Caption + else if PropName = 'CHECKED' then + Result := TListItem(Instance).Checked + else if PropName = 'DATA' then + Result := frxInteger(TListItem(Instance).Data) + else if PropName = 'IMAGEINDEX' then + Result := TListItem(Instance).ImageIndex + else if PropName = 'SELECTED' then + Result := TListItem(Instance).Selected +{$IFNDEF CLX} + {$IFNDEF FPC} + else if PropName = 'STATEINDEX' then + Result := TListItem(Instance).StateIndex + {$ENDIF} +{$ENDIF} + else if PropName = 'SUBITEMS' then + Result := frxInteger(TListItem(Instance).SubItems) + end + else if ClassType = TListItems then + begin + if PropName = 'COUNT' then + Result := TListItems(Instance).Count + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TTabSheet then + begin + if PropName = 'PAGECONTROL' then + TTabSheet(Instance).PageControl := TPageControl(frxInteger(Value)) + end + else if ClassType = TTreeNode then + begin + if PropName = 'DATA' then + TTreeNode(Instance).Data := Pointer(frxInteger(Value)) + else if PropName = 'IMAGEINDEX' then + TTreeNode(Instance).ImageIndex := frxInteger(Value) + else if PropName = 'SELECTEDINDEX' then + TTreeNode(Instance).SelectedIndex := Value +{$IFNDEF CLX} + else if PropName = 'STATEINDEX' then + TTreeNode(Instance).StateIndex := Value +{$ENDIF} + else if PropName = 'TEXT' then + TTreeNode(Instance).Text := Value + end + else if ClassType = TTreeView then + begin + if PropName = 'SELECTED' then + TTreeView(Instance).Selected := TTreeNode(frxInteger(Value)) + else if PropName = 'TOPITEM' then + TTreeView(Instance).TopItem := TTreeNode(frxInteger(Value)) + end + else if ClassType = TListItem then + begin + if PropName = 'CAPTION' then + TListItem(Instance).Caption := Value + else if PropName = 'CHECKED' then + TListItem(Instance).Checked := Value + else if PropName = 'DATA' then + TListItem(Instance).Data := Pointer(frxInteger(Value)) + else if PropName = 'IMAGEINDEX' then + TListItem(Instance).ImageIndex := Integer(Value) + else if PropName = 'SELECTED' then + TListItem(Instance).Selected := Value +{$IFNDEF CLX} + {$IFNDEF FPC} + else if PropName = 'STATEINDEX' then + TListItem(Instance).StateIndex := Value + {$ENDIF} +{$ENDIF} + else if PropName = 'SUBITEMS' then + TListItem(Instance).SubItems := TStrings(frxInteger(Value)) + end +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsExtCtrlsRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_ifdreg.dcr b/FastScript/fs_ifdreg.dcr new file mode 100644 index 0000000000000000000000000000000000000000..2d4326197e112c89f4b113f8f2adf958f7955379 GIT binary patch literal 1848 zcmcJOZA?>V6vwX%BN3NvpB7zM=2&Koh5<8xWDH3_kV%Mu$_6$JB@i-*vM?A4!W@_} zfuZsuA{69Bv91;B5Ya+g%9{mN+ESpD0xc~qr3Ly%5n9fkdgX>CT^2v=C;%)>yw_?KBsNdK_vFRu3fJb zhOrQ%_g%cU&$0d`etyGnh~d@LyiuZeB2FulTg1{_qRz!vOQL@tk0=x%$huBsUgR4W zhV}CPDDW>!ovO3`7QQ}>rCgQkrxRt9Fyd8bIc z636*u^2=qhWogW$<{6aS6b8DizjNn}5ti@I6 z{nM8Y#xA&q%RUU79&cdpo5wj~%5}cf;*6;$$;duQA zAzBwd)ovfTl=1*9ij9@2b*%{JpaoG9C>$sqAn)X4(c$=Io7-8-9)H6w4=v`dns04I zoK3wHPc#6!Uc_0I^`S(MIA@mIILB=w=E-h@&|LT=#^&1h+5WHDM?!Wy6ap&B zot$4f;7lQW{vEs@1lSQf%FJScMY**$Z!^vz4t{rL^{7F?Mf2cyr?%f6RX%c`*z4D4 z5LXO7NwDv0a6W2Bnb~Z_v7^j#>#OZv>Lx5pLX&F5pcq6;X{WmuCp%QaHU;kwf>XqR zgc}f$3T~0`-Z60Y1;ioJ$YicE7~0NGb$h##PM6WBQVKy>%{LtjlW9NCk=SDoDxSxd$e0s9qJDwYvFZ_}EAHUDTA>H*h zWlpm)tyYy#wMeSg#oS&wRk0jWtO>|h`sdCC=SjZ3HlEcYCSL7ObSXCOk8hOotp$U& zpP1Gkx@>9BZOKn<@$J?)x|P&nO=50l_gE@M^$zVsbKI~+pN0w!6tqJo1uiy2NZwRspF7QYcV54D6*X!s1Z$jEedepn(H7>2S3L^6o-588Ys`#Y#xM1?e@AM+J%m yI){V~?L?E^Kkz~g9n(M)LK7FreNfGTN*0tep^ObxgHX!@`Yd$!4iJ|APy7vuH=(cq literal 0 HcmV?d00001 diff --git a/FastScript/fs_ifdreg.pas b/FastScript/fs_ifdreg.pas new file mode 100644 index 0000000..6778e38 --- /dev/null +++ b/FastScript/fs_ifdreg.pas @@ -0,0 +1,33 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Registration unit } +{ } +{ (c) 2003-2019 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_ifdreg; + +{$i fs.inc} + +interface + + +procedure Register; + +implementation + +uses + Classes, DesignIntf, Controls, fs_ifdrtti; + +{-----------------------------------------------------------------------} + +procedure Register; +begin + RegisterComponents('FastScript', [TfsFDRTTI]); +end; + +end. diff --git a/FastScript/fs_ifdrtti.pas b/FastScript/fs_ifdrtti.pas new file mode 100644 index 0000000..0b76bb0 --- /dev/null +++ b/FastScript/fs_ifdrtti.pas @@ -0,0 +1,391 @@ +{**********************************************} +{ } +{ FastScript v1.9 } +{ FireDac classes and functions } +{ } +{ (c) 2003-2014 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{ Copyright (c) 2018 by Stalker SoftWare } +{ } +{ } +{**********************************************} + +unit fs_iFDRTTI; + +interface + +{$i fs.inc} +{$IF CompilerVersion <= 24} //XE3 or older + {$DEFINE ANYDAC} +{$IFEND} +uses + SysUtils, Classes, DB, Types, Controls, fs_iinterpreter, fs_itools, fs_idbrtti, + {$IFDEF ANYDAC} + uADCompClient, uADStanOption, uADCompDataSet, uADStanParam; + {$ELSE} + FireDAC.DatS, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Stan.Param; + {$ENDIF} + + + +type +{$IFDEF ANYDAC} + TFDDataSetLocateOptions = TADDataSetLocateOptions; + TFDCopyDataSetOptions = TADCopyDataSetOptions; +{$ENDIF} + +{$i frxPlatformsAttribute.inc} + TfsFDRTTI = class(TComponent); // fake component + + function IntToFDDataSetLocateOptions(i :Integer) :TFDDataSetLocateOptions; forward; + function IntToFDCopyDataSetOptions(i :Integer) :TFDCopyDataSetOptions; forward; + +implementation + +type +{$IFDEF ANYDAC} + TFDCustomConnection = TADCustomConnection; + TFDConnection = TADConnection; + TFDParam = TADParam; + TFDMacro = TADMacro; + TFDDataset = TADDataset; + TFDTable = TADTable; + TFDQuery = TADQuery; + TFDMemTable = TADMemTable; + TFDStoredProc = TADStoredProc; + TFDAdaptedDataSet = TADAdaptedDataset; + TFDRdbmsDataSet = TADRdbmsDataSet; + TFDManager = TADManager; + TFDBlobStream = TADBlobStream; +{$ENDIF} + TfsFDRTTIFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + +{ TfsFDRTTIFunctions } + +{-------------------------------------------------------------------------------} +constructor TfsFDRTTIFunctions.Create(AScript: TfsScript); +begin + + inherited Create(AScript); + + with AScript do begin + + AddClass(TFDManager, 'TComponent'); + + with AddClass(TFDBlobStream, 'TMemoryStream') do begin + AddConstructor('constructor Create(Field :TBlobField; Mode :TBlobStreamMode)', CallMethod); + AddMethod('procedure LoadFromFile(const FileName :String)', CallMethod); + AddMethod('procedure LoadFromStream(Stream :TStream)', CallMethod); + AddMethod('procedure SaveToStream(Stream :TStream)', CallMethod); + AddMethod('procedure SaveToFile(const FileName :String)', CallMethod); + end; { with } + + with AddClass(TFDConnection, 'TComponent') do begin + AddMethod('procedure StartTransaction', CallMethod); + AddMethod('procedure Commit', CallMethod); + AddMethod('procedure Rollback', CallMethod); + AddProperty('InTransaction', 'Boolean', GetProp, nil); + end; { with } + + AddEnumSet('TFDDataSetLocateOptions' ,'lxoCaseInsensitive, lxoPartialKey, lxoFromCurrent, lxoBackward, lxoCheckOnly, lxoNoFetchAll'); + AddEnumSet('TFDCopyDataSetOptions' ,'coStructure, coCalcFields, coIndexesReset, coIndexesCopy, coConstraintsReset, coConstraintsCopy, ' + + 'coAggregatesReset, coAggregatesCopy, coRestart, coAppend, coEdit, ' + {$IFDEF Delphi22} 'coDelete, ' + {$ENDIF} 'coRefresh'); + + with AddClass(TFDDataSet, 'TDataSet') do begin + AddMethod('function LocateEx(const AKeyFields :String; const AKeyValues :Variant; AOptions :TFDDataSetLocateOptions) :Boolean', CallMethod); + AddMethod('function LocateExpr(const AExpression :String; AOptions :TFDDataSetLocateOptions) :Boolean', CallMethod); + AddMethod('procedure FetchAll', CallMethod); + AddMethod('function CreateBlobStream(Field :TField; Mode :TBlobStreamMode) :TStream', CallMethod); + AddMethod('function FindField(const FieldName :String) :TField', CallMethod); + AddMethod('procedure CopyDataSet(ASource :TDataset; AOptions :TFDCopyDataSetOptions)', CallMethod); + AddMethod('procedure SetFDData(ASource :TFDDataSet)', CallMethod); + AddProperty('RecNo', 'LongInt', GetProp, SetProp); + AddProperty('RecordCount', 'LongInt', GetProp, nil); + AddProperty('FieldDefs', 'TFieldDefs', GetProp, SetProp); + end; { with } + + AddClass(TFDAdaptedDataSet, 'TFDDataSet'); + AddClass(TFDRdbmsDataSet, 'TFDAdaptedDataSet'); + AddClass(TFDParam, 'TCollectionItem'); + AddClass(TFDMacro, 'TCollectionItem'); + + with AddClass(TFDQuery, 'TFDRdbmsDataSet') do begin + AddMethod('procedure ExecSQL', CallMethod); + AddMethod('function ParamByName(const Value :String) :TFDParam', CallMethod); + AddMethod('procedure Prepare', CallMethod); + AddMethod('function MacroByName(const Value :String) :TFDMacro', CallMethod); + AddMethod('function OpenOrExecute: Boolean', CallMethod); {added by fduenas} + AddProperty('ParamCount', 'Word', GetProp, nil); + AddProperty('MacroCount', 'Word', GetProp, nil); + end; { with } + + with AddClass(TFDMemTable, 'TFDAdaptedDataSet') do begin + AddMethod('procedure CreateDataSet', CallMethod); + AddMethod('procedure Refresh', CallMethod); + end; { with } + + with AddClass(TFDStoredProc, 'TFDRdbmsDataSet') do begin + AddMethod('procedure ExecProc', CallMethod); + AddMethod('function ParamByName(const Value :string) :TFDParam', CallMethod); + AddMethod('procedure Prepare', CallMethod); + AddMethod('function OpenOrExecute: Boolean', CallMethod); {added by fduenas} + AddMethod('function ExecFunc: Variant', CallMethod); {added by fduenas} + AddProperty('ParamCount', 'Word', GetProp, nil); + end; + + end; { with } + +end; { Create } + +{-------------------------------------------------------------------------------} +function TfsFDRTTIFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; +begin + + Result := 0; + + if ClassType = TFDBlobStream then begin + + if MethodName = 'CREATE' then + Result := frxInteger(TFDBlobStream.Create(TBlobField(frxInteger(Caller.Params[0])), Caller.Params[1])) + else + if MethodName = 'LOADFROMFILE' then + TFDBlobStream(Instance).LoadFromFile(Caller.Params[0]) + else + if MethodName = 'LOADFROMSTREAM' then + TFDBlobStream(Instance).LoadFromStream(TStream(frxInteger(Caller.Params[0]))) + else + if MethodName = 'SAVETOFILE' then + TFDBlobStream(Instance).SaveToFile(Caller.Params[0]) + else + if MethodName = 'SAVETOSTREAM' then + TFDBlobStream(Instance).SaveToStream(TStream(frxInteger(Caller.Params[0]))) + + end else + if ClassType = TFDConnection then begin + + if MethodName = 'STARTTRANSACTION' then + TFDConnection(Instance).StartTransaction + else + if MethodName = 'COMMIT' then + TFDConnection(Instance).Commit + else + if MethodName = 'ROLLBACK' then + TFDConnection(Instance).Rollback + + end else + if ClassType = TFDDataSet then begin + + if MethodName = 'LOCATEEX' then + Result := TFDDataSet(Instance).LocateEx(Caller.Params[0], Caller.Params[1], IntToFDDataSetLocateOptions(Caller.Params[2])) + else + if MethodName = 'LOCATEEXPR' then + Result := TFDDataSet(Instance).LocateEx(Caller.Params[0], IntToFDDataSetLocateOptions(Caller.Params[1])) + else + if MethodName = 'FETCHALL' then + TFDDataSet(Instance).FetchAll + else + if MethodName = 'CREATEBLOBSTREAM' then + Result := frxInteger(TFDDataSet(Instance).CreateBlobStream(TField(frxInteger(Caller.Params[0])), Caller.Params[1])) + else + if MethodName = 'FINDFIELD' then + Result := frxInteger(TFDDataSet(Instance).FindField(Caller.Params[0])) + else + if MethodName = 'COPYDATASET' then + TFDDataSet(Instance).CopyDataSet(TDataSet(frxInteger(Caller.Params[0])), IntToFDCopyDataSetOptions(Caller.Params[1])) + else + if MethodName = 'SETFDDATA' then + TFDDataSet(Instance).Data := TFDDataSet(frxInteger(Caller.Params[0])).Data; + + end else + if ClassType = TFDQuery then begin + + if MethodName = 'EXECSQL' then + TFDQuery(Instance).ExecSQL + else + if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TFDQuery(Instance).ParamByName(Caller.Params[0])) + else + if MethodName = 'PREPARE' then + TFDQuery(Instance).Prepare + else + if MethodName = 'MACROBYNAME' then + Result := frxInteger(TFDQuery(Instance).MacroByName(Caller.Params[0])) + else + if MethodName = 'OPENOREXECUTE' then + Result := TFDQuery(Instance).OpenOrExecute; {added by fduenas} + + end else + if ClassType = TFDMemTable then begin + + if MethodName = 'CREATEDATASET' then + TFDMemTable(Instance).CreateDataSet() + else + if MethodName = 'REFRESH' then + TFDMemTable(Instance).Refresh() + + end else + if ClassType = TFDStoredProc then begin + + if MethodName = 'EXECPROC' then + TFDStoredProc(Instance).ExecProc + else + if MethodName = 'PARAMBYNAME' then + Result := frxInteger(TFDStoredProc(Instance).ParamByName(Caller.Params[0])) + else + if MethodName = 'PREPARE' then + TFDStoredProc(Instance).Prepare + else + if MethodName = 'OPENOREXECUTE' then + Result := TFDStoredProc(Instance).OpenOrExecute {added by fduenas} + else + if MethodName = 'EXECFUNC' then + Result := TFDStoredProc(Instance).ExecFunc; {added by fduenas} + + end; { if } + +end; { CallMethod } + +{-------------------------------------------------------------------------------} +function TfsFDRTTIFunctions.GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; +begin + + Result := 0; + + if ClassType = TFDConnection then begin + + if PropName = 'INTRANSACTION' then + Result := TFDConnection(Instance).InTransaction + + end else + if ClassType = TFDDataSet then begin + + if PropName = 'RECNO' then + Result := TFDDataSet(Instance).RecNo + else + if PropName = 'RECORDCOUNT' then + Result := TFDDataSet(Instance).RecordCount + + end else + if ClassType = TFDQuery then begin + + if PropName = 'PARAMCOUNT' then + Result := TFDQuery(Instance).ParamCount + else + if PropName = 'MacroCount' then + Result := TFDQuery(Instance).MacroCount + + end; { if } + +end; { GetProp } + +{-------------------------------------------------------------------------------} +procedure TfsFDRTTIFunctions.SetProp(Instance: TObject; ClassType: TClass; const PropName: String; Value: Variant); +begin + + if ClassType = TFDDataSet then begin + + if PropName = 'RECNO' then + TFDDataSet(Instance).RecNo := Value + + end; { if } + +end; { SetProp } + +{-------------------------------------------------------------------------------} +function IntToFDDataSetLocateOptions(i :Integer) :TFDDataSetLocateOptions; +begin + + Result := []; + + if (i and 1) <> 0 then + Result := Result + [lxoCaseInsensitive]; + + if (i and 2) <> 0 then + Result := Result + [lxoPartialKey]; + + if (i and 4) <> 0 then + Result := Result + [lxoFromCurrent]; + + if (i and 8) <> 0 then + Result := Result + [lxoBackward]; + + if (i and 16) <> 0 then + Result := Result + [lxoCheckOnly]; + + if (i and 32) <> 0 then + Result := Result + [lxoNoFetchAll]; + +end; { IntToFDDataSetLocateOptions } + +{-------------------------------------------------------------------------------} +function IntToFDCopyDataSetOptions(i :Integer) :TFDCopyDataSetOptions; +begin + + Result := []; + + if (i and 1) <> 0 then + Result := Result + [coStructure]; + + if (i and 2) <> 0 then + Result := Result + [coCalcFields]; + + if (i and 4) <> 0 then + Result := Result + [coIndexesReset]; + + if (i and 8) <> 0 then + Result := Result + [coIndexesCopy]; + + if (i and 16) <> 0 then + Result := Result + [coConstraintsReset]; + + if (i and 32) <> 0 then + Result := Result + [coConstraintsCopy]; + + if (i and 64) <> 0 then + Result := Result + [coAggregatesReset]; + + if (i and 128) <> 0 then + Result := Result + [coAggregatesCopy]; + + if (i and 256) <> 0 then + Result := Result + [coRestart]; + + if (i and 512) <> 0 then + Result := Result + [coAppend]; + + if (i and 1024) <> 0 then + Result := Result + [coEdit]; +{$IFDEF Delphi22} + if (i and 2048) <> 0 then + Result := Result + [coDelete]; + + if (i and 4096) <> 0 then + Result := Result + [coRefresh]; +{$ELSE} + if (i and 2048) <> 0 then + Result := Result + [coRefresh]; +{$ENDIF} + +end; { IntToFDCopyDataSetOptions } + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsFDRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TfsFDRTTIFunctions); + +finalization + if fsRTTIModules <> nil then + fsRTTIModules.Remove(TfsFDRTTIFunctions); + +end. diff --git a/FastScript/fs_iformsrtti.pas b/FastScript/fs_iformsrtti.pas new file mode 100644 index 0000000..ddfe5da --- /dev/null +++ b/FastScript/fs_iformsrtti.pas @@ -0,0 +1,439 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Forms and StdCtrls } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_iformsrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_ievents, fs_iclassesrtti, + fs_igraphicsrtti +{$IFDEF CLX} + , QControls, QForms, QStdCtrls +{$ELSE} + {$IFNDEF FPC} + , Windows + {$ELSE} + , LCLType, Buttons + {$ENDIF} + , Controls, Forms, StdCtrls +{$ENDIF} +{$IFDEF Delphi16} + , System.Types +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsFormsRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddConst('mrNone', 'Integer', mrNone); + AddConst('mrOk', 'Integer', mrOk); + AddConst('mrCancel', 'Integer', mrCancel); + AddConst('mrAbort', 'Integer', mrAbort); + AddConst('mrRetry', 'Integer', mrRetry); + AddConst('mrIgnore', 'Integer', mrIgnore); + AddConst('mrYes', 'Integer', mrYes); + AddConst('mrNo', 'Integer', mrNo); + AddConst('mrAll', 'Integer', mrAll); + AddConst('mrNoToAll', 'Integer', mrNoToAll); + AddConst('mrYesToAll', 'Integer', mrYesToAll); + + AddConst('crDefault', 'Integer', crDefault); + AddConst('crNone', 'Integer', crNone); + AddConst('crArrow', 'Integer', crArrow); + AddConst('crCross', 'Integer', crCross); + AddConst('crIBeam', 'Integer', crIBeam); + AddConst('crSize', 'Integer', crSize); + AddConst('crSizeNESW', 'Integer', crSizeNESW); + AddConst('crSizeNS', 'Integer', crSizeNS); + AddConst('crSizeNWSE', 'Integer', crSizeNWSE); + AddConst('crSizeWE', 'Integer', crSizeWE); + AddConst('crUpArrow', 'Integer', crUpArrow); + AddConst('crHourGlass', 'Integer', crHourGlass); + AddConst('crDrag', 'Integer', crDrag); + AddConst('crNoDrop', 'Integer', crNoDrop); + AddConst('crHSplit', 'Integer', crHSplit); + AddConst('crVSplit', 'Integer', crVSplit); + AddConst('crMultiDrag', 'Integer', crMultiDrag); + AddConst('crSQLWait', 'Integer', crSQLWait); + AddConst('crNo', 'Integer', crNo); + AddConst('crAppStart', 'Integer', crAppStart); + AddConst('crHelp', 'Integer', crHelp); + AddConst('crHandPoint', 'Integer', crHandPoint); + AddConst('crSizeAll', 'Integer', crSizeAll); + +{$IFDEF CLX} + AddConst('bsNone', 'Integer', fbsNone); + AddConst('bsSingle', 'Integer', fbsSingle); + AddConst('bsSizeable', 'Integer', fbsSizeable); + AddConst('bsDialog', 'Integer', fbsDialog); + AddConst('bsToolWindow', 'Integer', fbsToolWindow); + AddConst('bsSizeToolWin', 'Integer', fbsSizeToolWin); +{$ELSE} + AddConst('bsNone', 'Integer', bsNone); + AddConst('bsSingle', 'Integer', bsSingle); + AddConst('bsSizeable', 'Integer', bsSizeable); + AddConst('bsDialog', 'Integer', bsDialog); + AddConst('bsToolWindow', 'Integer', bsToolWindow); + AddConst('bsSizeToolWin', 'Integer', bsSizeToolWin); +{$ENDIF} + +{$IFNDEF CLX} + AddConst('VK_RBUTTON', 'Integer', VK_RBUTTON); + AddConst('VK_CANCEL', 'Integer', VK_CANCEL); + AddConst('VK_MBUTTON', 'Integer', VK_MBUTTON); + AddConst('VK_BACK', 'Integer', VK_BACK);//Backspace key + AddConst('VK_TAB', 'Integer', VK_TAB);//Tab key + AddConst('VK_RETURN', 'Integer', VK_RETURN);//Enter key + AddConst('VK_SHIFT', 'Integer', VK_SHIFT);//Shift key + AddConst('VK_CONTROL', 'Integer', VK_CONTROL);//Ctrl key + AddConst('VK_MENU', 'Integer', VK_MENU);//Alt key + AddConst('VK_PAUSE', 'Integer', VK_PAUSE);//Pause key + AddConst('VK_CAPITAL', 'Integer', VK_CAPITAL);//Caps Lock key + AddConst('VK_ESCAPE', 'Integer', VK_ESCAPE);//Esc key + AddConst('VK_SPACE', 'Integer', VK_SPACE);//Space bar + AddConst('VK_PRIOR', 'Integer', VK_PRIOR);//Page Up key + AddConst('VK_NEXT', 'Integer', VK_NEXT);// Page Down key + AddConst('VK_END', 'Integer', VK_END);// End key + AddConst('VK_HOME', 'Integer', VK_HOME);// Home key + AddConst('VK_LEFT', 'Integer', VK_LEFT);// Left Arrow key + AddConst('VK_UP', 'Integer', VK_UP);// Up Arrow key + AddConst('VK_RIGHT', 'Integer', VK_RIGHT);// Right Arrow key + AddConst('VK_DOWN', 'Integer', VK_DOWN);// Down Arrow key + AddConst('VK_INSERT', 'Integer', VK_INSERT);// Insert key + AddConst('VK_DELETE', 'Integer', VK_DELETE);// Delete key + AddConst('VK_HELP', 'Integer', VK_HELP);// Help key + AddConst('VK_LWIN', 'Integer', VK_LWIN);// Left Windows key (Microsoft keyboard) + AddConst('VK_RWIN', 'Integer', VK_RWIN);// Right Windows key (Microsoft keyboard) + AddConst('VK_APPS', 'Integer', VK_APPS);// Applications key (Microsoft keyboard) + AddConst('VK_NUMPAD0', 'Integer', VK_NUMPAD0);// 0 key (numeric keypad) + AddConst('VK_NUMPAD1', 'Integer', VK_NUMPAD1);// 1 key (numeric keypad) + AddConst('VK_NUMPAD2', 'Integer', VK_NUMPAD2);// 2 key (numeric keypad) + AddConst('VK_NUMPAD3', 'Integer', VK_NUMPAD3);// 3 key (numeric keypad) + AddConst('VK_NUMPAD4', 'Integer', VK_NUMPAD4);// 4 key (numeric keypad) + AddConst('VK_NUMPAD5', 'Integer', VK_NUMPAD5);// 5 key (numeric keypad) + AddConst('VK_NUMPAD6', 'Integer', VK_NUMPAD6);// 6 key (numeric keypad) + AddConst('VK_NUMPAD7', 'Integer', VK_NUMPAD7);// 7 key (numeric keypad) + AddConst('VK_NUMPAD8', 'Integer', VK_NUMPAD8);// 8 key (numeric keypad) + AddConst('VK_NUMPAD9', 'Integer', VK_NUMPAD9);// 9 key (numeric keypad) + AddConst('VK_MULTIPLY', 'Integer', VK_MULTIPLY);// Multiply key (numeric keypad) + AddConst('VK_ADD', 'Integer', VK_ADD);// Add key (numeric keypad) + AddConst('VK_SEPARATOR', 'Integer', VK_SEPARATOR);// Separator key (numeric keypad) + AddConst('VK_SUBTRACT', 'Integer', VK_SUBTRACT);// Subtract key (numeric keypad) + AddConst('VK_DECIMAL', 'Integer', VK_DECIMAL);// Decimal key (numeric keypad) + AddConst('VK_DIVIDE', 'Integer', VK_DIVIDE);// Divide key (numeric keypad) + AddConst('VK_F1', 'Integer', VK_F1);// F1 key + AddConst('VK_F2', 'Integer', VK_F2);// F2 key + AddConst('VK_F3', 'Integer', VK_F3);// F3 key + AddConst('VK_F4', 'Integer', VK_F4);// F4 key + AddConst('VK_F5', 'Integer', VK_F5);// F5 key + AddConst('VK_F6', 'Integer', VK_F6);// F6 key + AddConst('VK_F7', 'Integer', VK_F7);// F7 key + AddConst('VK_F8', 'Integer', VK_F8);// F8 key + AddConst('VK_F9', 'Integer', VK_F9);// F9 key + AddConst('VK_F10', 'Integer', VK_F10);// F10 key + AddConst('VK_F11', 'Integer', VK_F11);// F11 key + AddConst('VK_F12', 'Integer', VK_F12);// F12 key + AddConst('VK_NUMLOCK', 'Integer', VK_NUMLOCK);// Num Lock key + AddConst('VK_SCROLL', 'Integer', VK_SCROLL);// Scroll Lock key +{$ENDIF} + + AddConst('crDefault', 'Integer', crDefault); + AddConst('crNone', 'Integer', crNone); + AddConst('crArrow', 'Integer', crArrow); + AddConst('crCross', 'Integer', crCross); + AddConst('crIBeam', 'Integer', crIBeam); + AddConst('crSize', 'Integer', crSize); + AddConst('crSizeNESW', 'Integer', crSizeNESW); + AddConst('crSizeNS', 'Integer', crSizeNS); + AddConst('crSizeNWSE', 'Integer', crSizeNWSE); + AddConst('crSizeWE', 'Integer', crSizeWE); + AddConst('crUpArrow', 'Integer', crUpArrow); + AddConst('crHourGlass', 'Integer', crHourGlass); + AddConst('crDrag', 'Integer', crDrag); + AddConst('crNoDrop', 'Integer', crNoDrop); + AddConst('crHSplit', 'Integer', crHSplit); + AddConst('crVSplit', 'Integer', crVSplit); + AddConst('crMultiDrag', 'Integer', crMultiDrag); + AddConst('crSQLWait', 'Integer', crSQLWait); + AddConst('crNo', 'Integer', crNo); + AddConst('crAppStart', 'Integer', crAppStart); + AddConst('crHelp', 'Integer', crHelp); + AddConst('crHandPoint', 'Integer', crHandPoint); + AddConst('crSizeAll', 'Integer', crSizeAll); + + AddType('TFormBorderStyle', fvtInt); + AddType('TBorderStyle', fvtInt); + AddType('TAlignment', fvtInt); + AddType('TLeftRight', fvtInt); + AddConst('taLeftJustify', 'Integer', taLeftJustify); + AddConst('taRightJustify', 'Integer', taRightJustify); + AddConst('taCenter', 'Integer', taCenter); + + AddEnumSet('TShiftState', 'ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble'); +// AddEnum('TAlignment', 'taLeftJustify, taRightJustify, taCenter'); + AddEnum('TAlign', 'alNone, alTop, alBottom, alLeft, alRight, alClient'); + AddEnum('TMouseButton', 'mbLeft, mbRight, mbMiddle'); + AddEnumSet('TAnchors', 'akLeft, akTop, akRight, akBottom'); + AddEnum('TBevelCut', 'bvNone, bvLowered, bvRaised, bvSpace'); + AddEnum('TTextLayout', 'tlTop, tlCenter, tlBottom'); + AddEnum('TEditCharCase', 'ecNormal, ecUpperCase, ecLowerCase'); + AddEnum('TScrollStyle', 'ssNone, ssHorizontal, ssVertical, ssBoth'); + AddEnum('TComboBoxStyle', 'csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable'); + AddEnum('TCheckBoxState', 'cbUnchecked, cbChecked, cbGrayed'); + AddEnum('TListBoxStyle', 'lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable'); + AddEnum('TWindowState', 'wsNormal, wsMinimized, wsMaximized'); + AddEnum('TFormStyle', 'fsNormal, fsMDIChild, fsMDIForm, fsStayOnTop'); + AddEnumSet('TBorderIcons', 'biSystemMenu, biMinimize, biMaximize, biHelp'); + AddEnum('TPosition', 'poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter'); + AddEnum('TCloseAction', 'caNone, caHide, caFree, caMinimize'); + + with AddClass(TControl, 'TComponent') do + begin + AddProperty('Parent', 'TWinControl', GetProp, SetProp); + AddMethod('procedure Hide', CallMethod); + AddMethod('procedure Show', CallMethod); + AddMethod('procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer)', CallMethod); + AddEvent('OnCanResize', TfsCanResizeEvent); + AddEvent('OnClick', TfsNotifyEvent); + AddEvent('OnDblClick', TfsNotifyEvent); + AddEvent('OnMouseDown', TfsMouseEvent); + AddEvent('OnMouseMove', TfsMouseMoveEvent); + AddEvent('OnMouseUp', TfsMouseEvent); + AddEvent('OnResize', TfsNotifyEvent); + end; + with AddClass(TWinControl, 'TControl') do + begin + AddMethod('procedure SetFocus', CallMethod); + AddMethod('procedure Invalidate', CallMethod); + AddEvent('OnEnter', TfsNotifyEvent); + AddEvent('OnExit', TfsNotifyEvent); + AddEvent('OnKeyDown', TfsKeyEvent); + AddEvent('OnKeyPress', TfsKeyPressEvent); + AddEvent('OnKeyUp', TfsKeyEvent); + end; + AddClass(TCustomControl, 'TWinControl'); + AddClass(TGraphicControl, 'TControl'); + AddClass(TGroupBox, 'TWinControl'); + AddClass(TLabel, 'TControl'); + AddClass(TEdit, 'TWinControl'); + AddClass(TMemo, 'TWinControl'); + with AddClass(TCustomComboBox, 'TWinControl') do + begin + AddProperty('DroppedDown', 'Boolean', GetProp, SetProp); + AddProperty('ItemIndex', 'Integer', GetProp, SetProp); + AddEvent('OnChange', TfsNotifyEvent); + AddEvent('OnDropDown', TfsNotifyEvent); + AddEvent('OnCloseUp', TfsNotifyEvent); + end; + AddClass(TComboBox, 'TCustomComboBox'); + AddClass(TButton, 'TWinControl'); + AddClass(TCheckBox, 'TWinControl'); + AddClass(TRadioButton, 'TWinControl'); + with AddClass(TCustomListBox, 'TWinControl') do + begin + AddProperty('ItemIndex', 'Integer', GetProp, SetProp); + AddProperty('SelCount', 'Integer', GetProp, nil); + AddIndexProperty('Selected', 'Integer', 'Boolean', CallMethod); + end; + AddClass(TListBox, 'TCustomListBox'); + AddClass(TControlScrollBar, 'TPersistent'); + AddClass(TScrollingWinControl, 'TWinControl'); + AddClass(TScrollBox, 'TScrollingWinControl'); + with AddClass(TCustomForm, 'TScrollingWinControl') do + begin + AddMethod('procedure Close', CallMethod); + AddMethod('procedure Hide', CallMethod); + AddMethod('procedure Show', CallMethod); + AddMethod('function ShowModal: Integer', CallMethod); + AddEvent('OnActivate', TfsNotifyEvent); + AddEvent('OnClose', TfsCloseEvent); + AddEvent('OnCloseQuery', TfsCloseQueryEvent); + AddEvent('OnCreate', TfsNotifyEvent); + AddEvent('OnDestroy', TfsNotifyEvent); + AddEvent('OnDeactivate', TfsNotifyEvent); + AddEvent('OnHide', TfsNotifyEvent); + AddEvent('OnPaint', TfsNotifyEvent); + AddEvent('OnShow', TfsNotifyEvent); + AddProperty('Canvas', 'TCanvas', GetProp, nil); + AddProperty('ModalResult', 'Integer', GetProp, SetProp); + end; + AddClass(TForm, 'TCustomForm'); + AddClass(TDataModule, 'TComponent'); + with AddClass(TApplication, 'TComponent') do + begin + AddMethod('procedure Minimize', CallMethod); + AddMethod('procedure ProcessMessages', CallMethod); + AddMethod('procedure Restore', CallMethod); + AddProperty('ExeName', 'String', GetProp, nil); + end; + AddObject('Application', Application); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + Form: TCustomForm; +begin + Result := 0; + + if ClassType = TControl then + begin + if MethodName = 'HIDE' then + TControl(Instance).Hide + else if MethodName = 'SHOW' then + TControl(Instance).Show + else if MethodName = 'SETBOUNDS' then + TControl(Instance).SetBounds(Caller.Params[0], Caller.Params[1], Caller.Params[2], Caller.Params[3]) + end + else if ClassType = TWinControl then + begin + if MethodName = 'SETFOCUS' then + TWinControl(Instance).SetFocus + else if MethodName = 'INVALIDATE' then + TWinControl(Instance).Invalidate; + end + else if ClassType = TCustomListBox then + begin + if MethodName = 'SELECTED.GET' then + Result := TCustomListBox(Instance).Selected[Caller.Params[0]] + else if MethodName = 'SELECTED.SET' then + TCustomListBox(Instance).Selected[Caller.Params[0]] := Caller.Params[1] + end + else if ClassType = TCustomForm then + begin + Form := TCustomForm(Instance); + if MethodName = 'CLOSE' then + Form.Close + else if MethodName = 'HIDE' then + Form.Hide + else if MethodName = 'SHOW' then + Form.Show + else if MethodName = 'SHOWMODAL' then + Result := Form.ShowModal; + end + else if ClassType = TApplication then + begin + if MethodName = 'MINIMIZE' then + TApplication(Instance).Minimize + else if MethodName = 'PROCESSMESSAGES' then + TApplication(Instance).ProcessMessages + else if MethodName = 'RESTORE' then + TApplication(Instance).Restore + end +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TControl then + begin + if PropName = 'PARENT' then + Result := frxInteger(TControl(Instance).Parent) + end + else if ClassType = TCustomComboBox then + begin + if PropName = 'DROPPEDDOWN' then + Result := TCustomComboBox(Instance).DroppedDown + else if PropName = 'ITEMINDEX' then + Result := TCustomComboBox(Instance).ItemIndex + end + else if ClassType = TCustomListBox then + begin + if PropName = 'SELCOUNT' then + Result := TCustomListBox(Instance).SelCount + else if PropName = 'ITEMINDEX' then + Result := TCustomListBox(Instance).ItemIndex + end + else if ClassType = TCustomForm then + begin + if PropName = 'MODALRESULT' then + Result := TCustomForm(Instance).ModalResult + else if PropName = 'CANVAS' then + Result := frxInteger(TCustomForm(Instance).Canvas) + end + else if ClassType = TApplication then + begin + if PropName = 'EXENAME' then + Result := TApplication(Instance).ExeName + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TControl then + begin + if PropName = 'PARENT' then + TControl(Instance).Parent := TWinControl(frxInteger(Value)) + end + else if ClassType = TCustomComboBox then + begin + if PropName = 'DROPPEDDOWN' then + TCustomComboBox(Instance).DroppedDown := Value + else if PropName = 'ITEMINDEX' then + TCustomComboBox(Instance).ItemIndex := Value + end + else if ClassType = TCustomListBox then + begin + if PropName = 'ITEMINDEX' then + TCustomListBox(Instance).ItemIndex := Value + end + else if ClassType = TCustomForm then + begin + if PropName = 'MODALRESULT' then + TCustomForm(Instance).ModalResult := Value + end +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsFormsRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_igraphicsrtti.pas b/FastScript/fs_igraphicsrtti.pas new file mode 100644 index 0000000..6e6c627 --- /dev/null +++ b/FastScript/fs_igraphicsrtti.pas @@ -0,0 +1,262 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Graphics.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_igraphicsrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_iclassesrtti{$IFDEF DELPHI16}, Controls{$ENDIF} +{$IFDEF CLX} +, QGraphics +{$ELSE} +, Graphics +{$ENDIF} +{$IFDEF Delphi16} + , System.Types +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsGraphicsRTTI = class(TComponent); // fake component + + +implementation + +type + THackGraphic = class(TGraphic) + end; + + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); + procedure GetColorProc(const Name: String); + public + constructor Create(AScript: TfsScript); override; + end; + + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + GetColorValues(GetColorProc); +{$IFDEF FPC} + AddEnumSet('TFontStyles', 'fsBold, fsItalic, fsStrikeout, fsUnderline'); +{$ELSE} + AddEnumSet('TFontStyles', 'fsBold, fsItalic, fsUnderline, fsStrikeout'); +{$ENDIF} + AddEnum('TFontPitch', 'fpDefault, fpVariable, fpFixed'); + AddEnum('TPenStyle', 'psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame'); + AddEnum('TPenMode', 'pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, ' + + 'pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor'); + AddEnum('TBrushStyle', 'bsSolid, bsClear, bsHorizontal, bsVertical, ' + + 'bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross'); + + with AddClass(TFont, 'TPersistent') do + AddConstructor('constructor Create', CallMethod); + with AddClass(TPen, 'TPersistent') do + AddConstructor('constructor Create', CallMethod); + with AddClass(TBrush, 'TPersistent') do + AddConstructor('constructor Create', CallMethod); + with AddClass(TCanvas, 'TPersistent') do + begin + AddConstructor('constructor Create', CallMethod); + AddMethod('procedure Draw(X, Y: Integer; Graphic: TGraphic)', CallMethod); + AddMethod('procedure Ellipse(X1, Y1, X2, Y2: Integer)', CallMethod); + AddMethod('procedure LineTo(X, Y: Integer)', CallMethod); + AddMethod('procedure MoveTo(X, Y: Integer)', CallMethod); + AddMethod('procedure Rectangle(X1, Y1, X2, Y2: Integer)', CallMethod); + AddMethod('procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer)', CallMethod); + AddMethod('procedure StretchDraw(X1, Y1, X2, Y2: Integer; Graphic: TGraphic)', CallMethod); + AddMethod('function TextHeight(const Text: string): Integer', CallMethod); + AddMethod('procedure TextOut(X, Y: Integer; const Text: string)', CallMethod); + AddMethod('function TextWidth(const Text: string): Integer', CallMethod); +{$IFNDEF CLX} + AddIndexProperty('Pixels', 'Integer, Integer', 'TColor', CallMethod); +{$ENDIF} + end; + with AddClass(TGraphic, 'TPersistent') do + begin + AddConstructor('constructor Create', CallMethod); + AddMethod('procedure LoadFromFile(const Filename: string)', CallMethod); + AddMethod('procedure SaveToFile(const Filename: string)', CallMethod); + AddProperty('Height', 'Integer', GetProp, SetProp); + AddProperty('Width', 'Integer', GetProp, SetProp); + end; + with AddClass(TPicture, 'TPersistent') do + begin + AddMethod('procedure LoadFromFile(const Filename: string)', CallMethod); + AddMethod('procedure SaveToFile(const Filename: string)', CallMethod); + AddProperty('Height', 'Integer', GetProp, nil); + AddProperty('Width', 'Integer', GetProp, nil); + end; +{$IFNDEF CROSS_COMPILE} + AddClass(TMetafile, 'TGraphic'); + with AddClass(TMetafileCanvas, 'TCanvas') do + AddConstructor('constructor Create(AMetafile: TMetafile; ReferenceDevice: Integer)', CallMethod); +{$ENDIF} + with AddClass(TBitmap, 'TGraphic') do + AddProperty('Canvas', 'TCanvas', GetProp); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant; +var + _Canvas: TCanvas; +begin + Result := 0; + + if ClassType = TFont then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TFont(Instance).Create) + end + else if ClassType = TPen then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TPen(Instance).Create) + end + else if ClassType = TBrush then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TBrush(Instance).Create) + end + else if ClassType = TCanvas then + begin + _Canvas := TCanvas(Instance); + + if MethodName = 'CREATE' then + Result := frxInteger(TCanvas(Instance).Create) + else if MethodName = 'DRAW' then + _Canvas.Draw(Caller.Params[0], Caller.Params[1], TGraphic(frxInteger(Caller.Params[2]))) + else if MethodName = 'ELLIPSE' then + _Canvas.Ellipse(Caller.Params[0], Caller.Params[1], Caller.Params[2], Caller.Params[3]) + else if MethodName = 'LINETO' then + _Canvas.LineTo(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'MOVETO' then + _Canvas.MoveTo(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'RECTANGLE' then + _Canvas.Rectangle(Caller.Params[0], Caller.Params[1], Caller.Params[2], Caller.Params[3]) + else if MethodName = 'ROUNDRECT' then + _Canvas.RoundRect(Caller.Params[0], Caller.Params[1], Caller.Params[2], Caller.Params[3], Caller.Params[4], Caller.Params[5]) + else if MethodName = 'STRETCHDRAW' then + _Canvas.StretchDraw(Rect(Caller.Params[0], Caller.Params[1], Caller.Params[2], Caller.Params[3]), TGraphic(frxInteger(Caller.Params[4]))) + else if MethodName = 'TEXTHEIGHT' then + Result := _Canvas.TextHeight(Caller.Params[0]) + else if MethodName = 'TEXTOUT' then + _Canvas.TextOut(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'TEXTWIDTH' then + Result := _Canvas.TextWidth(Caller.Params[0]) +{$IFNDEF CLX} + else if MethodName = 'PIXELS.GET' then + Result := _Canvas.Pixels[Caller.Params[0], Caller.Params[1]] + else if MethodName = 'PIXELS.SET' then + _Canvas.Pixels[Caller.Params[0], Caller.Params[1]] := Caller.Params[2] +{$ENDIF} + end + else if ClassType = TGraphic then + begin + if MethodName = 'CREATE' then + Result := frxInteger(THackGraphic(Instance).Create) + else if MethodName = 'LOADFROMFILE' then + TGraphic(Instance).LoadFromFile(Caller.Params[0]) + else if MethodName = 'SAVETOFILE' then + TGraphic(Instance).SaveToFile(Caller.Params[0]) + end + else if ClassType = TPicture then + begin + if MethodName = 'LOADFROMFILE' then + TPicture(Instance).LoadFromFile(Caller.Params[0]) + else if MethodName = 'SAVETOFILE' then + TPicture(Instance).SaveToFile(Caller.Params[0]) + end +{$IFNDEF CROSS_COMPILE} + else if ClassType = TMetafileCanvas then + begin + if MethodName = 'CREATE' then + Result := frxInteger(TMetafileCanvas(Instance).Create(TMetafile(frxInteger(Caller.Params[0])), Caller.Params[1])) + end +{$ENDIF} +end; + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; + const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TGraphic then + begin + if PropName = 'HEIGHT' then + Result := TGraphic(Instance).Height + else if PropName = 'WIDTH' then + Result := TGraphic(Instance).Width + end + else if ClassType = TPicture then + begin + if PropName = 'HEIGHT' then + Result := TPicture(Instance).Height + else if PropName = 'WIDTH' then + Result := TPicture(Instance).Width + end + else if ClassType = TBitmap then + begin + if PropName = 'CANVAS' then + Result := frxInteger(TBitmap(Instance).Canvas) + end +end; + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant); +begin + if ClassType = TGraphic then + begin + if PropName = 'HEIGHT' then + TGraphic(Instance).Height := Value + else if PropName = 'WIDTH' then + TGraphic(Instance).Width := Value + end +end; + +procedure TFunctions.GetColorProc(const Name: String); +var + c: Integer; +begin + IdentToColor(Name, c); + Script.AddConst(Name, 'Integer', c); +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsGraphicsRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_iibxreg.pas b/FastScript/fs_iibxreg.pas new file mode 100644 index 0000000..69c1428 --- /dev/null +++ b/FastScript/fs_iibxreg.pas @@ -0,0 +1,58 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Registration unit } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_iibxreg; + +{$i fs.inc} + +interface + + +procedure Register; + +implementation + +uses + Classes +{$IFNDEF FPC} + {$IFNDEF Delphi6} +, DsgnIntf +{$ELSE} +{$IFDEF DELPHI16} +, Controls +{$ENDIF} +, DesignIntf +{$ENDIF} +{$ELSE} +,PropEdits, LazarusPackageIntf, LResources +{$ENDIF} +, fs_iibxrtti; + + + + +{-----------------------------------------------------------------------} + +procedure Register; +begin +{$IFDEF DELPHI16} + //GroupDescendentsWith(TfsIBXRTTI, TControl); +{$ENDIF} + RegisterComponents('FastScript', [TfsIBXRTTI]); +end; + +initialization +{$IFDEF FPC} + {$INCLUDE fs_ireg.lrs} +{$ENDIF} + + +end. diff --git a/FastScript/fs_iibxrtti.pas b/FastScript/fs_iibxrtti.pas new file mode 100644 index 0000000..78c7372 --- /dev/null +++ b/FastScript/fs_iibxrtti.pas @@ -0,0 +1,127 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ IBX classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +unit fs_iibxrtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_itools, fs_idbrtti, db +{$IFDEF DELPHI20} + , IBX.ibdatabase, IBX.IBCustomDataSet, IBX.IBQuery, IBX.IBTable, IBX.IBStoredProc +{$ELSE} + , ibdatabase, IBCustomDataSet, IBQuery, IBTable, IBStoredProc +{$ENDIF} +{$IFDEF DELPHI16}, Controls, System.Types{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsIBXRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class (TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: + String; Caller: TfsMethodHelper): Variant; + function RecordCount(Instance: TObject; ClassType: TClass; const PropName: + String): Variant; + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + with AScript do + begin + AddClass(TIBDataBase, 'TComponent'); + + with AddClass(TIBTransaction, 'TComponent') do + begin + AddMethod('procedure Commit', CallMethod); + AddMethod('procedure RollBack', CallMethod); + AddMethod('procedure StartTransaction', CallMethod); + end; + + AddClass(TIBCustomDataSet, 'TDataSet'); + AddClass(TIBTable, 'TIBCustomDataSet'); + with AddClass(TIBQuery, 'TIBCustomDataSet') do + begin + AddMethod('procedure ExecSQL', CallMethod); + AddMethod('procedure FetchAll', CallMethod); + AddProperty('RecordCount', 'Integer',RecordCount, nil); + end; + with AddClass(TIBStoredProc, 'TIBCustomDataSet') do + AddMethod('procedure ExecProc', CallMethod); + end; +end; + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const + MethodName: String; Caller: TfsMethodHelper): Variant; +begin + Result := 0; + + if ClassType = TIBQuery then + begin + if MethodName = 'EXECSQL' then + TIBQuery(Instance).ExecSQL + else + if MethodName = 'FETCHALL' then + TIBQuery(Instance).FETCHALL; + end + else + if ClassType = TIBStoredProc then + begin + if MethodName = 'EXECPROC' then + TIBStoredProc(Instance).ExecProc + end + else + if(ClassType = TIBTransaction) AND (MethodName = 'COMMIT') then + TIBTransaction(Instance).Commit + else + if (ClassType = TIBTransaction) AND (MethodName = 'ROLLBACK') then + TIBTransaction(Instance).RollBack + else + if(ClassType = TIBTransaction) AND (MethodName = 'STARTTRANSACTION') then + TIBTransaction(Instance).StartTransaction; + +end; + +function TFunctions.RecordCount(Instance: TObject; ClassType: TClass; const + PropName: String): Variant; +begin + Result:=0; + if (ClassType = TIBQuery) AND (PropName = 'RECORDCOUNT') then + Result:=TIBQuery(Instance).RecordCount; + +end; + + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsIBXRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_iilparser.pas b/FastScript/fs_iilparser.pas new file mode 100644 index 0000000..16e5bdf --- /dev/null +++ b/FastScript/fs_iilparser.pas @@ -0,0 +1,2059 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Intermediate Language parser } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_iilparser; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, fs_iparser, fs_iexpression, fs_xml +{$IFDEF Delphi6} +, Variants +{$ENDIF}; +{$ELSE} +interface + +{$i fmx.inc} +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_iinterpreter, FMX.fs_iparser, FMX.fs_iexpression, FMX.fs_xml, System.Variants; +{$ENDIF} + + +type + TfsEmitOp = (emNone, emCreate, emFree); + +{ TfsILParser performs the syntax analyze of source code. Source code + can be on ANY language. Grammars are stored in the XML file and + can be easily changed to support any structured language. Currently + supported languages are Pascal, C++, Basic and Java subsets. + + The result of the analyze (function MakeScript) is the output XML script + (called Intermediate Language). This output processed by the ParseILScript + method. This method creates the program structure (defined in the + fs_Interpreter unit) and fills it by the data } + + TfsILParser = class(TObject) + private + FErrorPos: String; + FGrammar: TfsXMLDocument; + FILScript: TfsXMLDocument; + FLangName: String; + FNeedDeclareVars: Boolean; + FParser: TfsParser; + FProgram: TfsScript; + FProgRoot: TfsXMLItem; + FRoot: TfsXMLItem; + FUnitName: String; + FUsesList: TStrings; + FWithList: TStringList; + function PropPos(xi: TfsXMLItem): String; + procedure ErrorPos(xi: TfsXMLItem); + procedure CheckIdent(Prog: TfsScript; const Name: String); + function FindClass(const TypeName: String): TfsClassVariable; + procedure CheckTypeCompatibility(Var1, Var2: TfsCustomVariable); + function FindVar(Prog: TfsScript; const Name: String): TfsCustomVariable; + function FindType(s: String): TfsVarType; + function CreateVar(xi: TfsXMLItem; Prog: TfsScript; const Name: String; + Statement: TfsStatement = nil; CreateParam: Boolean = False; + IsVarParam: Boolean = False): TfsCustomVariable; + function DoSet(xi: TfsXMLItem; Prog: TfsScript): TfsSetExpression; + function DoExpression(xi: TfsXMLItem; Prog: TfsScript): TfsExpression; + procedure DoUses(xi: TfsXMLItem; Prog: TfsScript); + procedure DoVar(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoConst(xi: TfsXMLItem; Prog: TfsScript); + procedure DoParameters(xi: TfsXMLItem; v: TfsProcVariable); + procedure DoProc1(xi: TfsXMLItem; Prog: TfsScript); + procedure DoProc2(xi: TfsXMLItem; Prog: TfsScript); + procedure DoFunc1(xi: TfsXMLItem; Prog: TfsScript); + procedure DoFunc2(xi: TfsXMLItem; Prog: TfsScript); + procedure DoAssign(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoCall(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoIf(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoFor(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoVbFor(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoCppFor(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoWhile(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoRepeat(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoCase(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoTry(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoBreak(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoContinue(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoExit(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoReturn(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoWith(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoDelete(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoCompoundStmt(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoStmt(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); + procedure DoProgram(xi: TfsXMLItem; Prog: TfsScript); + public + constructor Create(AProgram: TfsScript); + destructor Destroy; override; + + procedure SelectLanguage(const LangName: String); + { convert the input script to the Intermediate Language } + function MakeILScript(const Text: String): Boolean; + { parse IL } + procedure ParseILScript; + { this method is needed here to implement late-binding } + function DoDesignator(xi: TfsXMLItem; Prog: TfsScript; + EmitOp: TfsEmitOp = emNone): TfsDesignator; + property ILScript: TfsXMLDocument read FILScript; + end; + + +implementation +//VCL uses section +{$IFNDEF FMX} +uses fs_itools, fs_iconst +{$IFDEF CROSS_COMPILE} +, Types +{$ELSE} +, Windows +{$ENDIF} +{$IFDEF OLE} +, fs_idisp +{$ENDIF}; +//FMX uses section +{$ELSE} +uses FMX.fs_itools, FMX.fs_iconst, System.Types, FMX.Types +{$IFDEF OLE} +, fs_idisp +{$ENDIF}; +{$ENDIF} + + +{ TfsILParser } + +constructor TfsILParser.Create(AProgram: TfsScript); +begin + FNeedDeclareVars := True; + FProgram := AProgram; + FGrammar := TfsXMLDocument.Create; + FILScript := TfsXMLDocument.Create; + FParser := TfsParser.Create; + FUsesList := TStringList.Create; + FWithList := TStringList.Create; +end; + +destructor TfsILParser.Destroy; +begin + FGrammar.Free; + FILScript.Free; + FParser.Free; + FUsesList.Free; + FWithList.Free; + inherited; +end; + +procedure TfsILParser.SelectLanguage(const LangName: String); +var + i: Integer; + Name, PropText: String; + xi: TfsXMLItem; + ParserRoot: TfsXMLItem; + ss: TStringStream; +begin + FParser.Clear; + FLangName := LangName; + ss := TStringStream.Create(fsGetLanguage(LangName)); + try + FGrammar.LoadFromStream(ss); + finally + ss.Free; + end; + + FRoot := FGrammar.Root; + ParserRoot := FRoot.FindItem('parser'); + + xi := ParserRoot.FindItem('keywords'); + for i := 0 to xi.Count - 1 do + FParser.Keywords.Add(xi[i].Name); + for i := 0 to ParserRoot.Count - 1 do + begin + Name := LowerCase(ParserRoot[i].Name); + PropText := ParserRoot[i].Prop['text']; + if Name = 'identchars' then + FParser.ConstructCharset(PropText) + else if Name = 'commentline1' then + FParser.CommentLine1 := PropText + else if Name = 'commentline2' then + FParser.CommentLine2 := PropText + else if Name = 'commentblock1' then + FParser.CommentBlock1 := PropText + else if Name = 'commentblock2' then + FParser.CommentBlock2 := PropText + else if Name = 'stringquotes' then + FParser.StringQuotes := PropText + else if Name = 'hexsequence' then + FParser.HexSequence := PropText + else if Name = 'specstrchar' then + begin + if PropText = '1' then + FParser.SpecStrChar := true; + end + else if Name = 'declarevars' then + begin + if PropText = '0' then + FNeedDeclareVars := False; + end + else if Name = 'skipeol' then + begin + if PropText = '0' then + FParser.SkipEOL := False; + end + else if Name = 'skipchar' then + FParser.SkipChar := PropText + else if Name = 'casesensitive' then + begin + if PropText = '1' then + FParser.CaseSensitive := True; + end + end; + + if FProgram.ExtendedCharset then + for i := 128 to 255 do + FParser.IdentifierCharset := FParser.IdentifierCharset + [Chr(i)]; +end; + +function TfsILParser.MakeILScript(const Text: String): Boolean; +var + FList: TStrings; + FStream: TStream; + FErrorMsg: String; + FErrorPos: String; + FTermError: Boolean; + i: Integer; + + function Run(xi: TfsXMLItem): Boolean; + var + i, j, ParsPos, ParsPos1, LoopPos, ListPos: Integer; + s, NodeName, Token, PropText, PropAdd, PropAddText, PropNode: String; + Completed, TopLevelNode, Flag: Boolean; + const + PathD = {$IFDEF MSWINDOWS} '\'; {$ELSE} '/'; {$ENDIF} + procedure DoInclude(const Name: String); + var + sl: TStringList; + p: TfsILParser; + ss: TStringStream; + s, UnitPath: String; + idx: Integer; + begin + if FUsesList.IndexOf(Name) <> -1 then + Exit; + FUsesList.Add(Name); + sl := TStringList.Create; + try + if Assigned(FProgram.OnGetUnit) then + begin + s := ''; + FProgram.OnGetUnit(FProgram, Name, s); + sl.Text := s; + end + else + begin + UnitPath := ''; + for idx := 0 to FProgram.IncludePath.Count - 1 do + begin + UnitPath := FProgram.IncludePath[idx]; + if (UnitPath <> '') and (PathD <> UnitPath[Length(UnitPath)]) then + UnitPath := UnitPath + PathD; + if FileExists(UnitPath + Name) then + break; + end; + sl.LoadFromFile(UnitPath + Name); + end; + + p := TfsILParser.Create(FProgram); + p.FUnitName := Name; + ss := TStringStream.Create(''{$IFDEF Delphi12},TEncoding.UTF8{$ENDIF}); + try + s := ''; + if sl.Count > 0 then + begin + p.SelectLanguage(FLangName); + p.FUsesList.Assign(FUsesList); + if p.MakeILScript(sl.Text) then + begin + FUsesList.Assign(p.FUsesList); + p.ILScript.SaveToStream(ss); + s := ss.DataString; + Delete(s, 1, Pos('?>', s) + 1); + end + else + begin + FErrorMsg := FProgram.ErrorMsg; + FErrorPos := FProgram.ErrorPos; + if FProgram.ErrorUnit = '' then + FProgram.ErrorUnit := Name; + end; + end; + + FList.Insert(ListPos, ''); + FList.Insert(ListPos, s); + FList.Insert(ListPos, ''); + Inc(ListPos, 3); + finally + p.Free; + ss.Free; + end; + finally + sl.Free; + end; + end; + + procedure CheckPropNode(Flag: Boolean); + var + i, ParsPos1: Integer; + s: String; + begin + if CompareText(PropNode, 'uses') = 0 then + begin + while FList.Count > ListPos do + begin + s := FList[FList.Count - 1]; + i := Pos('text="', s); + Delete(s, 1, i + 5); + i := Pos('" ', s); + Delete(s, i, 255); + DoInclude(Copy(s, 2, Length(s) - 2)); + FList.Delete(FList.Count - 1); + end; + end + else if PropNode <> '' then + if Flag then + begin + ParsPos1 := FParser.Position; + FParser.Position := ParsPos; + FParser.SkipSpaces; + + s := '<' + PropNode + ' pos="' + FParser.GetXYPosition + '"'; + FParser.Position := ParsPos1; + + if PropNode = 'expr' then + s := s + ' pos1="' + FParser.GetXYPosition + '"'; + s := s + '>'; + + FList.Insert(ListPos, s); + FList.Add(''); + end + else + begin + while FList.Count > ListPos do + FList.Delete(FList.Count - 1); + end; + end; + + procedure AddError(xi: TfsXMLItem); + var + PropErr: String; + xi1: TfsXMLItem; + begin + PropErr := xi.Prop['err']; + if (PropErr <> '') and (FErrorMsg = '') then + begin + xi1 := FRoot.FindItem('parser'); + xi1 := xi1.FindItem('errors'); + FErrorMsg := xi1.FindItem(PropErr).Prop['text']; + FParser.Position := ParsPos; + FParser.SkipSpaces; + FErrorPos := FParser.GetXYPosition; + FTermError := xi.Prop['term'] = '1'; + end; + end; + + begin + Result := True; + ParsPos := FParser.Position; + ListPos := FList.Count; + NodeName := AnsiLowerCase(xi.Name); + PropText := AnsiLowerCase(xi.Prop['text']); + PropNode := LowerCase(xi.Prop['node']); + TopLevelNode := xi.Parent = FRoot; + + Completed := False; + Flag := False; + Token := ''; + + if TopLevelNode then + Completed := True + else if NodeName = 'char' then + begin + if xi.Prop['skip'] <> '0' then + FParser.SkipSpaces; + Token := FParser.GetChar; + Flag := True; + end + else if NodeName = 'keyword' then + begin + Token := FParser.GetWord; + Flag := True; + end + else if NodeName = 'ident' then + begin + Token := FParser.GetIdent; + Flag := True; + end + else if NodeName = 'number' then + begin + Token := FParser.GetNumber; + Flag := True; + end + else if NodeName = 'string' then + begin + Token := FParser.GetString; + Flag := True; + end + else if NodeName = 'frstring' then + begin + Token := FParser.GetFRString; + s := FParser.GetXYPosition; + FList.Add(''); + FList.Add(''); + FList.Add(''); + FList.Add(''); + FList.Add(''); + FList.Add(''); + Flag := True; + end + else if NodeName = 'eol' then + Completed := FParser.GetEOL + else if NodeName = 'sequence' then + Completed := True + else if (NodeName = 'switch') or (NodeName = 'optionalswitch') then + begin + Completed := True; + + for i := 0 to xi.Count - 1 do + begin + Completed := Run(xi[i]); + if Completed then + break; + end; + + if not Completed then + if NodeName <> 'optionalswitch' then + begin + Result := False; + AddError(xi); + end; + Exit; + end + else if (NodeName = 'loop') or (NodeName = 'optionalloop') then + begin + j := 0; + repeat + Inc(j); + Flag := False; + LoopPos := FParser.Position; + + for i := 0 to xi.Count - 1 do + begin + Result := Run(xi[i]); + if not Result then + begin + Flag := True; + break; + end; + end; + + { try loop delimiter } + ParsPos1 := FParser.Position; + if Result and (PropText <> '') then + begin + FParser.SkipSpaces; + if FParser.GetChar <> PropText then + begin + FParser.Position := ParsPos1; + Flag := True; + end; + end; + + { avoid infinity loop } + if FParser.Position = LoopPos then + Flag := True; + until Flag; + + { at least one loop was succesful } + if j > 1 then + begin + { special case - now implemented only in "case" statement } + if (xi.Prop['skip'] = '1') or FTermError then + FErrorMsg := ''; + FParser.Position := ParsPos1; + Result := True; + end; + + if NodeName = 'optionalloop' then + begin + if not Result then + FParser.Position := ParsPos; + Result := True; + end; + Exit; + end + else if NodeName = 'optional' then + begin + for i := 0 to xi.Count - 1 do + if not Run(xi[i]) then + begin + FParser.Position := ParsPos; + break; + end; + Exit; + end + else + begin + j := FRoot.Find(NodeName); + if j = -1 then + raise Exception.Create(SInvalidLanguage); + + Completed := Run(FRoot[j]); + end; + + if Flag then + begin + if FParser.CaseSensitive then + Completed := (Token <> '') and + ((PropText = '') or (Token = PropText)) + else + Completed := (Token <> '') and + ((PropText = '') or (AnsiCompareText(Token, PropText) = 0)); + end; + + if not Completed then + begin + Result := False; + AddError(xi); + end + else + begin + if not TopLevelNode then + CheckPropNode(True); + + PropAdd := xi.Prop['add']; + PropAddText := xi.Prop['addtext']; + if PropAdd <> '' then + begin + if PropAddText = '' then + s := Token else + s := PropAddText; + FList.Add('<' + PropAdd + ' text="' + StrToXML(s) + '" pos="' + + FParser.GetXYPosition + '"/>'); + end; + + for i := 0 to xi.Count - 1 do + begin + Result := Run(xi[i]); + if not Result then + break; + end; + end; + + if not Result then + FParser.Position := ParsPos; + if TopLevelNode then + CheckPropNode(Result); + end; + +begin + FList := TStringList.Create; + FErrorMsg := ''; + FErrorPos := ''; + Result := False; + + try + FParser.Text := Text; + + i := 1; + if FParser.GetChar = '#' then + begin + if CompareText(FParser.GetIdent, 'language') = 0 then + begin + i := FParser.Position; +{$IFDEF Windows} + while (i <= Length(Text)) and (Text[i] <> #13) do +{$ELSE} + while (i <= Length(Text)) and (Text[i] <> #10) do +{$ENDIF} + Inc(i); + SelectLanguage(Trim(Copy(Text, FParser.Position, i - FParser.Position))); + Inc(i, 2); + end; + end; + FParser.Position := i; + + if Run(FRoot.FindItem('program')) and (FErrorMsg = '') then + begin + FErrorMsg := ''; + FErrorPos := ''; + FStream := TMemoryStream.Create; + try + FList.Insert(0, ''); + FList.Insert(1, ''); + FList.Add(''); + FList.SaveToStream(FStream{$IFDEF Delphi12}, TEncoding.UTF8{$ENDIF}); +{$IFDEF Delphi12} + FStream.Position := 3; +{$ELSE} + FStream.Position := 0; +{$ENDIF} + FILScript.LoadFromStream(FStream); + FILScript.Root.Add.Assign(FRoot.FindItem('types')); +// uncomment the following lines to see what is IL script +// FILScript.AutoIndent := True; +// FILScript.SaveToFile(ExtractFilePath(ParamStr(0)) + 'out.xml'); + Result := True; + finally + FStream.Free; + end; + end; + + FProgram.ErrorPos := FErrorPos; + FProgram.ErrorMsg := FErrorMsg; + finally + FList.Free; + end; +end; + +procedure TfsILParser.ParseILScript; +begin + FWithList.Clear; + FProgram.ErrorUnit := ''; + FUnitName := ''; + FUsesList.Clear; + try + DoProgram(FILScript.Root, FProgram); + FProgram.ErrorPos := ''; + except + on e: Exception do + begin + FProgram.ErrorMsg := e.Message; + FProgram.ErrorPos := FErrorPos; + FProgram.ErrorUnit := FUnitName; + end; + end; +end; + +function TfsILParser.PropPos(xi: TfsXMLItem): String; +begin + Result := xi.Prop['pos']; +end; + +procedure TfsILParser.ErrorPos(xi: TfsXMLItem); +begin + FErrorPos := PropPos(xi); +end; + +procedure TfsILParser.CheckIdent(Prog: TfsScript; const Name: String); +begin + if Prog.FindLocal(Name) <> nil then + raise Exception.Create(SIdRedeclared + '''' + Name + ''''); +end; + +function TfsILParser.FindClass(const TypeName: String): TfsClassVariable; +begin + Result := FProgram.FindClass(TypeName); + if Result = nil then + raise Exception.Create(SUnknownType + '''' + TypeName + ''''); +end; + +procedure TfsILParser.CheckTypeCompatibility(Var1, Var2: TfsCustomVariable); +begin + if not AssignCompatible(Var1, Var2, FProgram) then + raise Exception.Create(SIncompatibleTypes + ': ''' + Var1.GetFullTypeName + + ''', ''' + Var2.GetFullTypeName + ''''); +end; + +function TfsILParser.FindVar(Prog: TfsScript; const Name: String): TfsCustomVariable; +begin + Result := Prog.Find(Name); + if Result = nil then + if not FNeedDeclareVars then + begin + Result := TfsVariable.Create(Name, fvtVariant, ''); + FProgram.Add(Name, Result); + end + else + raise Exception.Create(SIdUndeclared + '''' + Name + ''''); +end; + +function TfsILParser.FindType(s: String): TfsVarType; +var + xi: TfsXMLItem; +begin + xi := FProgRoot.FindItem('types'); + if xi.Find(s) <> -1 then + s := xi[xi.Find(s)].Prop['type'] + else + begin + xi := FGrammar.Root.FindItem('types'); + if xi.Find(s) <> -1 then + s := xi[xi.Find(s)].Prop['type'] + end; + Result := StrToVarType(s, FProgram); + if Result = fvtClass then + FindClass(s); +end; + +function TfsILParser.CreateVar(xi: TfsXMLItem; Prog: TfsScript; const Name: String; + Statement: TfsStatement = nil; CreateParam: Boolean = False; + IsVarParam: Boolean = False): TfsCustomVariable; +var + i, j: Integer; + Typ: TfsVarType; + TypeName: String; + RefItem: TfsCustomVariable; + InitValue: Variant; + InitItem: TfsXMLItem; + AssignStmt: TfsAssignmentStmt; + IsPascal: Boolean; + SourcePos: String; + + procedure DoArray(xi: TfsXMLItem); + var + i, n: Integer; + v: array of {$IFDEF FPC}SizeInt{$ELSE}Integer{$ENDIF}; + Expr: TfsExpression; + begin + n := xi.Count; + SetLength(v, n * 2); + + for i := 0 to n - 1 do + begin + Expr := DoExpression(xi[i][0], Prog); + v[i * 2] := Expr.Value; + Expr.Free; + + if xi[i].Count = 2 then + begin + Expr := DoExpression(xi[i][1], Prog); + v[i * 2 + 1] := Expr.Value; + Expr.Free; + end + else + begin + v[i * 2 + 1] := v[i * 2] - 1; + v[i * 2] := 0; + end; + end; + + if n = 0 then + begin + SetLength(v, 2); + v[0] := 0; + v[1] := 0; + n := 1; + end; + + InitValue := VarArrayCreate(v, varVariant); + RefItem := TfsArrayHelper.Create('', n, Typ, TypeName); + Prog.Add('', RefItem); + v := nil; + Typ := fvtArray; + end; + + procedure DoInit(xi: TfsXMLItem); + var + Expr: TfsExpression; + Temp: TfsVariable; + begin + Temp := TfsVariable.Create('', Typ, TypeName); + try + Expr := DoExpression(xi[0], Prog); + InitValue := Expr.Value; + try + CheckTypeCompatibility(Temp, Expr); + finally + Expr.Free; + end; + finally + Temp.Free; + end; + end; + +begin + RefItem := nil; + InitItem := nil; + TypeName := 'Variant'; + IsPascal := False; + SourcePos := FErrorPos; + +(* + + + + + + + + ... + + + + + + + + - type may be first (in C-like languages) or last (in Pascal-like ones) + - type may be skipped (treated as variant) + - array and init may be either skipped, or after each + - array and init may be after each + - do not handle tags - they are handled in calling part +*) + + + { find the type } + for i := 0 to xi.Count - 1 do + if CompareText(xi[i].name, 'type') = 0 then + begin + IsPascal := i <> 0; + TypeName := xi[i].Prop['text']; + ErrorPos(xi[i]); + break; + end; + + Typ := FindType(TypeName); + case Typ of + fvtInt, fvtInt64, fvtFloat, fvtClass: + InitValue := 0; + fvtBool: + InitValue := False; + fvtChar, fvtString: + InitValue := ''; + else + InitValue := Null; + end; + + { fing the tag corresponding to our variable } + for i := 0 to xi.Count - 1 do + if CompareText(xi[i].Prop['text'], Name) = 0 then + begin + { process and tags if any } + j := i + 1; + while (j < xi.Count) and (IsPascal or (CompareText(xi[j].Name, 'ident') <> 0)) do + begin + if CompareText(xi[j].Name, 'array') = 0 then + DoArray(xi[j]) + else if CompareText(xi[j].Name, 'init') = 0 then + begin + if Statement = nil then + DoInit(xi[j]); + InitItem := xi[j]; + end; + Inc(j); + end; + break; + end; + + if CreateParam then + Result := TfsParamItem.Create(Name, Typ, TypeName, InitItem <> nil, IsVarParam) + else if Typ in [fvtChar, fvtString] then + Result := TfsStringVariable.Create(Name, Typ, TypeName) else + Result := TfsVariable.Create(Name, Typ, TypeName); + + try + Result.Value := InitValue; + Result.RefItem := RefItem; + Result.SourcePos := SourcePos; + Result.SourceUnit := FUnitName; + Result.OnGetVarValue := FProgram.OnGetVarValue; + + { create init statement } + if (InitItem <> nil) and (Statement <> nil) then + begin + AssignStmt := TfsAssignmentStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(AssignStmt); + AssignStmt.Designator := TfsVariableDesignator.Create(Prog); + AssignStmt.Designator.RefItem := Result; + AssignStmt.Expression := DoExpression(InitItem[0], Prog); + CheckTypeCompatibility(Result, AssignStmt.Expression); + AssignStmt.Optimize; + end; + + except + on e: Exception do + begin + Result.Free; + raise; + end; + end; +end; +{$HINTS OFF} +function TfsILParser.DoDesignator(xi: TfsXMLItem; Prog: TfsScript; + EmitOp: TfsEmitOp = emNone): TfsDesignator; +var + i, j: Integer; + NodeName, NodeText, TypeName: String; + Expr: TfsExpression; + Item, PriorItem: TfsDesignatorItem; + ClassVar: TfsClassVariable; + StringVar: TfsStringVariable; + Typ: TfsVarType; + LateBinding, PriorIsIndex: Boolean; + NewDesignator: TfsDesignator; + PriorValue: Variant; + Component: TComponent; + + function FindInWithList(const Name: String; ResultDS: TfsDesignator; + Item: TfsDesignatorItem): Boolean; + var + i: Integer; + WithStmt: TfsWithStmt; + WithItem: TfsDesignatorItem; + ClassVar: TfsClassVariable; + xi1: TfsXMLItem; + begin + Result := False; + LateBinding := False; + for i := FWithList.Count - 1 downto 0 do + begin + { prevent checking non-local 'with' } + if Prog.FindLocal(FWithList[i]) = nil then + continue; + WithStmt := TfsWithStmt(FWithList.Objects[i]); + + if WithStmt.Variable.Typ = fvtVariant then + begin + { first check all known variables } + if Prog.Find(Name) <> nil then + Exit; + { if nothing found, create late binding information } + Item.Ref := WithStmt.Variable; + ResultDS.Finalize; + ResultDS.LateBindingXMLSource := TfsXMLItem.Create; + ResultDS.LateBindingXMLSource.Assign(xi); + xi1 := TfsXMLItem.Create; + xi1.Name := 'node'; + xi1.Text := 'text="' + FWithList[i] + '"'; + ResultDS.LateBindingXMLSource.InsertItem(0, xi1); + LateBinding := True; + Result := True; + break; + end + else + begin + ClassVar := FindClass(WithStmt.Variable.TypeName); + Item.Ref := ClassVar.Find(NodeText); + end; + + if Item.Ref <> nil then + begin + WithItem := TfsDesignatorItem.Create; + WithItem.Ref := WithStmt.Variable; + WithItem.SourcePos := Item.SourcePos; + + ResultDS.Remove(Item); + ResultDS.Add(WithItem); + ResultDS.Add(Item); + Result := True; + break; + end; + end; + end; + +{$IFDEF OLE} + procedure CreateOLEHelpers(Index: Integer); + var + i: Integer; + OLEHelper: TfsOLEHelper; + begin + for i := Index to xi.Count - 1 do + begin + ErrorPos(xi[i]); + NodeName := LowerCase(xi[i].Name); + NodeText := xi[i].Prop['text']; + + if (NodeName = 'node') and (NodeText <> '[') then + begin + Item := TfsDesignatorItem.Create; + Result.Add(Item); + Item.SourcePos := FErrorPos; + OLEHelper := TfsOLEHelper.Create(NodeText); + Prog.Add('', OLEHelper); + Item.Ref := OLEHelper; + end + else if NodeName = 'expr' then + begin + Expr := DoExpression(xi[i], Prog); + PriorItem := Result.Items[Result.Count - 1]; + PriorItem.Add(Expr); + PriorItem.Ref.Add(TfsParamItem.Create('', fvtVariant, '', False, False)); + end + end; + end; +{$ENDIF} + +begin + Result := TfsDesignator.Create(Prog); + try + + for i := 0 to xi.Count - 1 do + begin + ErrorPos(xi[i]); + NodeName := LowerCase(xi[i].Name); + NodeText := xi[i].Prop['text']; + + if NodeName = 'node' then + begin + Item := TfsDesignatorItem.Create; + Result.Add(Item); + Item.SourcePos := FErrorPos; + + if Result.Count = 1 then + begin + if not FindInWithList(NodeText, Result, Item) then + Item.Ref := FindVar(Prog, NodeText); + + { LateBinding flag turned on in the FindInWithList } + if LateBinding then + Exit; + { add .Create for cpp NEW statement, i.e convert o = new TObject + to o = TObject.Create } + if EmitOp = emCreate then + begin + if not (Item.Ref is TfsClassVariable) then + raise Exception.Create(SClassRequired); + ClassVar := TfsClassVariable(Item.Ref); + Item := TfsDesignatorItem.Create; + Result.Add(Item); + Item.Ref := ClassVar.Find('Create'); + end; + end + else + begin + PriorItem := Result.Items[Result.Count - 2]; + PriorIsIndex := (PriorItem.Ref is TfsMethodHelper) and + TfsMethodHelper(PriorItem.Ref).IndexMethod and not PriorItem.Flag; + Typ := PriorItem.Ref.Typ; + { late binding } + if (Typ = fvtVariant) and not PriorIsIndex then + begin + PriorValue := PriorItem.Ref.Value; + if VarIsNull(PriorValue) then + begin + Result.Remove(Item); + Item.Free; + Result.Finalize; + Result.LateBindingXMLSource := TfsXMLItem.Create; + Result.LateBindingXMLSource.Assign(xi); + Exit; + end + else + begin + if (TVarData(PriorValue).VType = varString) {$IFDEF Delphi12}or (TVarData(PriorValue).VType = varUString){$ENDIF} then + { accessing string elements } + Typ := fvtString + {$IFDEF OLE} + else if TVarData(PriorValue).VType = varDispatch then + begin + { calling ole } + Result.Remove(Item); + Item.Free; + CreateOLEHelpers(i); + Result.Finalize; + Exit; + end + {$ENDIF} + else if (TVarData(PriorValue).VType and varArray) = varArray then + begin + { accessing array elements } + if NodeText = '[' then { set ref to arrayhelper } + Item.Ref := FindVar(Prog, '__ArrayHelper') + else + raise Exception.Create(SIndexRequired); + continue; + end + else + begin + { accessing class items } + Typ := fvtClass; + PriorItem.Ref.TypeName := TObject(frxInteger(PriorItem.Ref.Value)).ClassName; + end; + end; + end; + + if PriorIsIndex then + begin + PriorItem.Flag := True; + Result.Remove(Item); { previous item is set up already } + Item.Free; + FErrorPos := PriorItem.SourcePos; + if NodeText <> '[' then + raise Exception.Create(SIndexRequired); + end + else if Typ = fvtString then + begin + if NodeText = '[' then { set ref to stringhelper } + Item.Ref := FindVar(Prog, '__StringHelper') + else + raise Exception.Create(SStringError); + end + else if Typ = fvtClass then + begin + TypeName := PriorItem.Ref.TypeName; + ClassVar := FindClass(TypeName); + + if NodeText = '[' then { default property } + begin + Item.Flag := True; + Item.Ref := ClassVar.DefProperty; + if Item.Ref = nil then + raise Exception.CreateFmt(SClassError, [TypeName]); + end + else { property or method } + begin + Item.Ref := ClassVar.Find(NodeText, False); + { property not found. Probably it's a form element such as button? } + if Item.Ref = nil then + begin + PriorValue := PriorItem.Ref.Value; + if ((VarIsNull(PriorValue) or (PriorValue = 0)) and not Prog.IsRunning) and Prog.UseClassLateBinding then + begin + { at compile time, we don't know anything about form elements. + So clear the designator items and use the late binding. } + Result.Remove(Item); + Item.Free; + while Result.Count > 1 do + begin + Item := Result.Items[Result.Count - 1]; + Result.Remove(Item); + Item.Free; + end; + Item := Result.Items[0]; + Result.Finalize; + Result.Typ := fvtVariant; + Result.LateBindingXMLSource := TfsXMLItem.Create; + Result.LateBindingXMLSource.Assign(xi); + Exit; + end + else + begin + { we at run time now. Try to search in the form's elements. } + if TObject(frxInteger(PriorValue)) is TComponent then + begin + Component := TComponent(frxInteger(PriorValue)).FindComponent(NodeText); + if Component <> nil then + { creates TfsComponentHelper } + Item.Ref := ClassVar.AddComponent(Component); + end; + if Item.Ref = nil then + raise Exception.Create(SIdUndeclared + '''' + NodeText + ''''); + end + end; + end; + end + else if Typ = fvtArray then { set ref to array helper } + Item.Ref := PriorItem.Ref.RefItem + else + raise Exception.Create(SArrayRequired); + end; + end + else if NodeName = 'expr' then + begin + Expr := DoExpression(xi[i], Prog); + Result.Items[Result.Count - 1].Add(Expr); + end + else if NodeName = 'addr' then { @ operator } + begin + if xi.Count <> 2 then + raise Exception.Create(SVarRequired); + + Item := TfsDesignatorItem.Create; + Result.Add(Item); + ErrorPos(xi[1]); + Item.SourcePos := FErrorPos; + + { we just return the string containing a referenced item name. For + example, var s: String; procedure B1; begin end; s := @B1 + will assign 'B1' to the s } + StringVar := TfsStringVariable.Create('', fvtString, ''); + StringVar.Value := xi[1].Prop['text']; + Prog.Add('', StringVar); + Item.Ref := StringVar; + + break; + end; + end; + + if EmitOp = emFree then + begin + PriorItem := Result.Items[Result.Count - 1]; + if (PriorItem.Ref.Typ <> fvtClass) and (PriorItem.Ref.Typ <> fvtVariant) then + raise Exception.Create(SClassRequired); + Item := TfsDesignatorItem.Create; + Result.Add(Item); + ClassVar := FindClass('TObject'); + Item.Ref := ClassVar.Find('Free'); + end; + + Result.Finalize; + if Result.Kind <> dkOther then + begin + NewDesignator := nil; + if Result.Kind = dkVariable then + NewDesignator := TfsVariableDesignator.Create(Prog) + else if Result.Kind = dkStringArray then + NewDesignator := TfsStringDesignator.Create(Prog) + else if Result.Kind = dkArray then + NewDesignator := TfsArrayDesignator.Create(Prog); + + NewDesignator.Borrow(Result); + Result.Free; + Result := NewDesignator; + end; + + for i := 0 to Result.Count - 1 do + begin + Item := Result[i]; + FErrorPos := Item.SourcePos; + if Item.Ref is TfsDesignator then continue; + + if Item.Count < Item.Ref.GetNumberOfRequiredParams then + raise Exception.Create(SNotEnoughParams) + else if Item.Count > Item.Ref.Count then + raise Exception.Create(STooManyParams) + else if Item.Count <> Item.Ref.Count then { construct the default params } + for j := Item.Count to Item.Ref.Count - 1 do + begin + Expr := TfsExpression.Create(FProgram); + Item.Add(Expr); + Expr.AddConstWithType(Item.Ref[j].DefValue, Item.Ref[j].Typ); + Expr.Finalize; + end; + + for j := 0 to Item.Count - 1 do + begin + FErrorPos := Item[j].SourcePos; + CheckTypeCompatibility(Item.Ref[j], Item[j]); + end; + end; + + except + on e: Exception do + begin + Result.Free; + raise; + end; + end; +end; +{$HINTS ON} +function TfsILParser.DoSet(xi: TfsXMLItem; Prog: TfsScript): TfsSetExpression; +var + i: Integer; + Name: String; +begin + Result := TfsSetExpression.Create('', fvtVariant, ''); + try + for i := 0 to xi.Count - 1 do + begin + Name := LowerCase(xi[i].Name); + if Name = 'expr' then + Result.Add(DoExpression(xi[i], Prog)) + else if Name = 'range' then + Result.Add(nil); + end; + + except + on e: Exception do + begin + Result.Free; + raise; + end; + end; +end; + +function TfsILParser.DoExpression(xi: TfsXMLItem; Prog: TfsScript): TfsExpression; +var + ErPos: String; + SourcePos1, SourcePos2: TPoint; + + procedure DoExpressionItems(xi: TfsXMLItem; Expression: TfsExpression); + var + i: Integer; + NodeName: String; + OpName: String; + begin + i := 0; + while i < xi.Count do + begin + ErrorPos(xi[i]); + Expression.SourcePos := FErrorPos; + NodeName := Lowercase(xi[i].Name); + OpName := xi[i].Prop['text']; + + if (NodeName = 'op') then + begin + OpName := LowerCase(OpName); + if (OpName = ')') or (i < xi.Count - 1) then + Expression.AddOperator(OpName); + end + else if (NodeName = 'number') or (NodeName = 'string') then + Expression.AddConst(ParserStringToVariant(OpName)) + else if NodeName = 'dsgn' then + Expression.AddDesignator(DoDesignator(xi[i], Prog)) + else if NodeName = 'set' then + Expression.AddSet(DoSet(xi[i], Prog)) + else if NodeName = 'new' then + Expression.AddDesignator(DoDesignator(xi[i][0], Prog, emCreate)) + else if NodeName = 'expr' then + DoExpressionItems(xi[i], Expression); + + Inc(i); + end; + end; + + function GetSource(pt1, pt2: TPoint): String; + var + i1, i2: Integer; + begin + i1 := FParser.GetPlainPosition(pt1); + i2 := FParser.GetPlainPosition(pt2); + if (i1 = -1) or (i2 = -1) then + Result := '' + else + Result := Copy(FParser.Text, i1, i2 - i1); + end; + +begin + Result := TfsExpression.Create(FProgram); + try + DoExpressionItems(xi, Result); + SourcePos1 := fsPosToPoint(PropPos(xi)); + SourcePos2 := fsPosToPoint(xi.Prop['pos1']); + Result.Source := GetSource(SourcePos1, SourcePos2); + + ErPos := Result.Finalize; + if ErPos <> '' then + begin + FErrorPos := ErPos; + raise Exception.Create(SIncompatibleTypes); + end; + + except + on e: Exception do + begin + Result.Free; + raise; + end; + end; +end; + +procedure TfsILParser.DoUses(xi: TfsXMLItem; Prog: TfsScript); +var + i: Integer; + SaveUnitName: String; + s: String; + sl: TStringList; + ms: TMemoryStream; + xd: TfsXMLDocument; +begin + SaveUnitName := FUnitName; + FUnitName := xi.Prop['unit']; + xd := nil; + + if FUsesList.IndexOf(FUnitName) <> -1 then + begin + FUnitName := SaveUnitName; + Exit; + end; + FUsesList.Add(FUnitName); + if Assigned(FProgram.OnGetILUnit) then + begin + s := ''; + FProgram.OnGetILUnit(FProgram, FUnitName, s); + if s <> '' then + begin + sl := TStringList.Create; + sl.Text := s; + + ms := TMemoryStream.Create; + sl.SaveToStream(ms); + sl.Free; + ms.Position := 0; + + xd := TfsXMLDocument.Create; + xd.LoadFromStream(ms); + ms.Free; + end; + end; + + if xd <> nil then + begin + try + DoProgram(xd.Root, Prog); + finally + xd.Free; + end; + end + else + begin + for i := 0 to xi.Count - 1 do + DoProgram(xi[i], Prog); + end; + + FUnitName := SaveUnitName; +end; + +procedure TfsILParser.DoVar(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + Name: String; +begin + for i := 0 to xi.Count - 1 do + begin + ErrorPos(xi[i]); + if CompareText(xi[i].Name, 'ident') = 0 then + begin + Name := xi[i].Prop['text']; + CheckIdent(Prog, Name); + Prog.Add(Name, CreateVar(xi, Prog, Name, Statement)); + end; + end; +end; + +procedure TfsILParser.DoConst(xi: TfsXMLItem; Prog: TfsScript); +var + Name: String; + Expr: TfsExpression; + v: TfsVariable; +begin + Name := xi[0].Prop['text']; + ErrorPos(xi[0]); + CheckIdent(Prog, Name); + + Expr := DoExpression(xi[1], Prog); + v := TfsVariable.Create(Name, Expr.Typ, Expr.TypeName); + v.Value := Expr.Value; + v.IsReadOnly := True; + Expr.Free; + + Prog.Add(Name, v); +end; + +procedure TfsILParser.DoParameters(xi: TfsXMLItem; v: TfsProcVariable); +var + i: Integer; + s: String; + varParams: Boolean; + + procedure DoParam(xi: TfsXMLItem); + var + i: Integer; + Name: String; + Param: TfsParamItem; + varParam: Boolean; + begin + varParam := False; + + for i := 0 to xi.Count - 1 do + begin + ErrorPos(xi[i]); + if CompareText(xi[i].Name, 'varparam') = 0 then + varParam := True + else if CompareText(xi[i].Name, 'ident') = 0 then + begin + Name := xi[i].Prop['text']; + CheckIdent(v.Prog, Name); + Param := TfsParamItem(CreateVar(xi, v.Prog, Name, nil, True, + varParams or VarParam)); + Param.DefValue := Param.Value; + v.Add(Param); + v.Prog.Add(Name, Param); + varParam := False; + end; + end; + end; + +begin + if CompareText(xi.Name, 'parameters') <> 0 then Exit; + varParams := False; + for i := 0 to xi.Count - 1 do + begin + s := LowerCase(xi[i].Name); + if s = 'varparams' then + varParams := True + else if s = 'var' then + begin + DoParam(xi[i]); + varParams := False; + end; + end; +end; + +procedure TfsILParser.DoProc1(xi: TfsXMLItem; Prog: TfsScript); +var + i: Integer; + s, Name: String; + Proc: TfsProcVariable; +begin + ErrorPos(xi[0]); + Name := xi[0].Prop['text']; + CheckIdent(Prog, Name); + +{$IFDEF CPUX64} + Proc := TfsProcVariable.Create(Name, fvtInt64, '', Prog, False); +{$ELSE} + Proc := TfsProcVariable.Create(Name, fvtInt, '', Prog, False); +{$ENDIF} + Proc.SourcePos := PropPos(xi); + Proc.SourceUnit := FUnitName; + Prog.Add(Name, Proc); + + for i := 0 to xi.Count - 1 do + begin + s := LowerCase(xi[i].Name); + if s = 'parameters' then + DoParameters(xi[i], Proc); + end; +end; + +procedure TfsILParser.DoProc2(xi: TfsXMLItem; Prog: TfsScript); +var + Name: String; + Proc: TfsProcVariable; +begin + Name := xi[0].Prop['text']; + Proc := TfsProcVariable(FindVar(Prog, Name)); + DoProgram(xi, Proc.Prog); +end; + +procedure TfsILParser.DoFunc1(xi: TfsXMLItem; Prog: TfsScript); +var + i: Integer; + s, Name, TypeName: String; + Typ: TfsVarType; + Func: TfsProcVariable; +begin + Name := ''; + TypeName := ''; + Typ := fvtVariant; + + for i := 0 to xi.Count - 1 do + begin + ErrorPos(xi[i]); + s := LowerCase(xi[i].Name); + if s = 'type' then + begin + TypeName := xi[i].Prop['text']; + Typ := FindType(TypeName); + end + else if s = 'name' then + begin + Name := xi[i].Prop['text']; + CheckIdent(Prog, Name); + end + end; + + + Func := TfsProcVariable.Create(Name, Typ, TypeName, Prog, + CompareText(TypeName, 'void') <> 0); + Func.SourcePos := PropPos(xi); + Func.SourceUnit := FUnitName; + Prog.Add(Name, Func); + + for i := 0 to xi.Count - 1 do + begin + s := LowerCase(xi[i].Name); + if s = 'parameters' then + DoParameters(xi[i], Func); + end; +end; + +procedure TfsILParser.DoFunc2(xi: TfsXMLItem; Prog: TfsScript); +var + i: Integer; + s, Name: String; + Func: TfsProcVariable; +begin + Name := ''; + + for i := 0 to xi.Count - 1 do + begin + s := LowerCase(xi[i].Name); + if s = 'name' then + Name := xi[i].Prop['text']; + end; + + Func := TfsProcVariable(FindVar(Prog, Name)); + DoProgram(xi, Func.Prog); +end; + +procedure TfsILParser.DoAssign(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + Stmt: TfsAssignmentStmt; + Designator: TfsDesignator; + Expression: TfsExpression; + Modificator: String; +begin + Designator := nil; + Expression := nil; + + try + Modificator := ' '; + Designator := DoDesignator(xi[0], Prog); + + i := 1; + if CompareText(xi[1].Name, 'modificator') = 0 then + begin + Modificator := xi[1].Prop['text']; + Inc(i); + end; + Expression := DoExpression(xi[i], Prog); + + if Designator.IsReadOnly then + raise Exception.Create(SLeftCantAssigned); + + CheckTypeCompatibility(Designator, Expression); + if Modificator = ' ' then + Modificator := Expression.Optimize(Designator); + except + on e: Exception do + begin + if Designator <> nil then + Designator.Free; + if Expression <> nil then + Expression.Free; + raise; + end; + end; + + case Modificator[1] of + '+': + Stmt := TfsAssignPlusStmt.Create(Prog, FUnitName, PropPos(xi)); + '-': + Stmt := TfsAssignMinusStmt.Create(Prog, FUnitName, PropPos(xi)); + '*': + Stmt := TfsAssignMulStmt.Create(Prog, FUnitName, PropPos(xi)); + '/': + Stmt := TfsAssignDivStmt.Create(Prog, FUnitName, PropPos(xi)); + else + Stmt := TfsAssignmentStmt.Create(Prog, FUnitName, PropPos(xi)); + end; + + Statement.Add(Stmt); + Stmt.Designator := Designator; + Stmt.Expression := Expression; + Stmt.Optimize; + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoCall(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsCallStmt; +begin + Stmt := TfsCallStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + Stmt.Designator := DoDesignator(xi[0], Prog); + if xi.Count > 1 then + begin + Stmt.Modificator := xi[1].Prop['text']; + if Stmt.Designator.IsReadOnly then + raise Exception.Create(SLeftCantAssigned); + end; + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoIf(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + s: String; + Stmt: TfsIfStmt; +begin + Stmt := TfsIfStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + Stmt.Condition := DoExpression(xi[0], Prog); + + for i := 1 to xi.Count - 1 do + begin + s := Lowercase(xi[i].Name); + if s = 'thenstmt' then + DoCompoundStmt(xi[1], Prog, Stmt) + else if s = 'elsestmt' then + DoCompoundStmt(xi[2], Prog, Stmt.ElseStmt); + end; + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoFor(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + Stmt: TfsForStmt; +begin + Stmt := TfsForStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + ErrorPos(xi[0]); + Stmt.Variable := FindVar(Prog, xi[0].Prop['text']); + if not ((Stmt.Variable is TfsVariable) and + (Stmt.Variable.Typ in [fvtInt, fvtInt64, fvtVariant, fvtFloat])) then + raise Exception.Create(SForError); + + Stmt.BeginValue := DoExpression(xi[1], Prog); + CheckTypeCompatibility(Stmt.Variable, Stmt.BeginValue); + + i := 2; + if CompareText(xi[2].Name, 'downto') = 0 then + begin + Stmt.Down := True; + Inc(i); + end; + + Stmt.EndValue := DoExpression(xi[i], Prog); + CheckTypeCompatibility(Stmt.Variable, Stmt.EndValue); + if i + 1 < xi.Count then + DoStmt(xi[i + 1], Prog, Stmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoVbFor(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + Stmt: TfsVbForStmt; +begin + Stmt := TfsVbForStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + ErrorPos(xi[0]); + Stmt.Variable := FindVar(Prog, xi[0].Prop['text']); + if not ((Stmt.Variable is TfsVariable) and + (Stmt.Variable.Typ in [fvtInt, fvtInt64, fvtVariant, fvtFloat])) then + raise Exception.Create(SForError); + + Stmt.BeginValue := DoExpression(xi[1], Prog); + CheckTypeCompatibility(Stmt.Variable, Stmt.BeginValue); + + Stmt.EndValue := DoExpression(xi[2], Prog); + CheckTypeCompatibility(Stmt.Variable, Stmt.EndValue); + + i := 3; + if i < xi.Count then + if CompareText(xi[i].Name, 'expr') = 0 then + begin + Stmt.Step := DoExpression(xi[i], Prog); + CheckTypeCompatibility(Stmt.Variable, Stmt.Step); + Inc(i); + end; + + if i < xi.Count then + DoStmt(xi[i], Prog, Stmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoCppFor(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsCppForStmt; +begin + Stmt := TfsCppForStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + DoStmt(xi[0], Prog, Stmt.FirstStmt); + Stmt.Expression := DoExpression(xi[1], Prog); + DoStmt(xi[2], Prog, Stmt.SecondStmt); + DoStmt(xi[3], Prog, Stmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoWhile(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsWhileStmt; +begin + Stmt := TfsWhileStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + Stmt.Condition := DoExpression(xi[0], Prog); + if xi.Count > 1 then + DoStmt(xi[1], Prog, Stmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoRepeat(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i, j: Integer; + Stmt: TfsRepeatStmt; +begin + Stmt := TfsRepeatStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + + j := xi.Count - 1; + if CompareText(xi[j].Name, 'inverse') = 0 then + begin + Stmt.InverseCondition := True; + Dec(j); + end; + Stmt.Condition := DoExpression(xi[j], Prog); + Dec(j); + + for i := 0 to j do + DoStmt(xi[i], Prog, Stmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoCase(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + Stmt: TfsCaseStmt; + + procedure DoCaseSelector(xi: TfsXMLItem); + var + Selector: TfsCaseSelector; + begin + if (CompareText(xi.Name, 'caseselector') <> 0) or (xi.Count <> 2) then Exit; + Selector := TfsCaseSelector.Create(Prog, FUnitName, PropPos(xi)); + Stmt.Add(Selector); + + Selector.SetExpression := DoSet(xi[0], Prog); + DoStmt(xi[1], Prog, Selector); + end; + +begin + Stmt := TfsCaseStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + Stmt.Condition := DoExpression(xi[0], Prog); + + for i := 1 to xi.Count - 1 do + DoCaseSelector(xi[i]); + if CompareText(xi[xi.Count - 1].Name, 'caseselector') <> 0 then + DoStmt(xi[xi.Count - 1], Prog, Stmt.ElseStmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoTry(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; + Stmt: TfsTryStmt; +begin + Stmt := TfsTryStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + + for i := 0 to xi.Count - 1 do + if CompareText(xi[i].Name, 'exceptstmt') = 0 then + begin + Stmt.IsExcept := True; + DoCompoundStmt(xi[i], Prog, Stmt.ExceptStmt); + end + else if CompareText(xi[i].Name, 'finallystmt') = 0 then + DoCompoundStmt(xi[i], Prog, Stmt.ExceptStmt) + else + DoStmt(xi[i], Prog, Stmt); + + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoBreak(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsBreakStmt; +begin + Stmt := TfsBreakStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoContinue(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsContinueStmt; +begin + Stmt := TfsContinueStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoExit(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsExitStmt; +begin + Stmt := TfsExitStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoReturn(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + xi1: TfsXMLItem; +begin + if xi.Count = 1 then { "return expr" } + begin + xi1 := TfsXMLItem.Create; + xi1.Name := 'dsgn'; + xi.InsertItem(0, xi1); + with xi1.Add do + begin + Name := 'node'; + Text := 'text="Result" pos="' + xi[1].Prop['pos'] + '"'; + end; + + DoAssign(xi, Prog, Statement); + end; + + DoExit(xi, Prog, Statement); +end; + +procedure TfsILParser.DoWith(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + d: TfsDesignator; + i, n: Integer; + s: String; + v: TfsVariable; + Stmt: TfsWithStmt; + + function CreateUniqueVariable: String; + var + i: Integer; + begin + i := 0; + while (Prog.FindLocal(IntToStr(i)) <> nil) or + (FWithList.IndexOf(IntToStr(i)) <> -1) do + Inc(i); + Result := '_WithList_' + IntToStr(i); + end; + +begin + n := xi.Count - 1; + + for i := 0 to n - 1 do + begin + d := DoDesignator(xi[i], Prog); + if not ((d.Typ = fvtClass) or (d.Typ = fvtVariant)) then + begin + d.Free; + raise Exception.Create(SClassRequired); + end; + + { create local variable with unique name } + s := CreateUniqueVariable; + v := TfsVariable.Create(s, d.Typ, d.TypeName); + Prog.Add(s, v); + + Stmt := TfsWithStmt.Create(Prog, FUnitName, PropPos(xi)); + Stmt.Variable := v; + Stmt.Designator := d; + Statement.Add(Stmt); + FWithList.AddObject(s, Stmt); + end; + + DoStmt(xi[xi.Count - 1], Prog, Statement); + + for i := 0 to n - 1 do + FWithList.Delete(FWithList.Count - 1); + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoDelete(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + Stmt: TfsCallStmt; +begin + Stmt := TfsCallStmt.Create(Prog, FUnitName, PropPos(xi)); + Statement.Add(Stmt); + Stmt.Designator := DoDesignator(xi[0], Prog, emFree); + FProgram.AddCodeLine(FUnitName, PropPos(xi)); +end; + +procedure TfsILParser.DoCompoundStmt(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + i: Integer; +begin + for i := 0 to xi.Count - 1 do + DoStmt(xi[i], Prog, Statement); +end; + +procedure TfsILParser.DoStmt(xi: TfsXMLItem; Prog: TfsScript; Statement: TfsStatement); +var + s: String; +begin + s := LowerCase(xi.Name); + if s = 'assignstmt' then + DoAssign(xi, Prog, Statement) + else if s = 'callstmt' then + DoCall(xi, Prog, Statement) + else if s = 'ifstmt' then + DoIf(xi, Prog, Statement) + else if s = 'casestmt' then + DoCase(xi, Prog, Statement) + else if s = 'forstmt' then + DoFor(xi, Prog, Statement) + else if s = 'vbforstmt' then + DoVbFor(xi, Prog, Statement) + else if s = 'cppforstmt' then + DoCppFor(xi, Prog, Statement) + else if s = 'whilestmt' then + DoWhile(xi, Prog, Statement) + else if s = 'repeatstmt' then + DoRepeat(xi, Prog, Statement) + else if s = 'trystmt' then + DoTry(xi, Prog, Statement) + else if s = 'break' then + DoBreak(xi, Prog, Statement) + else if s = 'continue' then + DoContinue(xi, Prog, Statement) + else if s = 'exit' then + DoExit(xi, Prog, Statement) + else if s = 'return' then + DoReturn(xi, Prog, Statement) + else if s = 'with' then + DoWith(xi, Prog, Statement) + else if s = 'delete' then + DoDelete(xi, Prog, Statement) + else if s = 'compoundstmt' then + DoCompoundStmt(xi, Prog, Statement) + else if s = 'uses' then + DoUses(xi, Prog) + else if s = 'var' then + DoVar(xi, Prog, Statement) + else if s = 'const' then + DoConst(xi, Prog) + else if s = 'procedure' then + DoProc2(xi, Prog) + else if s = 'function' then + DoFunc2(xi, Prog) +end; + +procedure TfsILParser.DoProgram(xi: TfsXMLItem; Prog: TfsScript); +var + TempRoot: TfsXMLItem; + + procedure DoFirstPass(xi: TfsXMLItem); + var + i: Integer; + s: String; + begin + for i := 0 to xi.Count - 1 do + begin + s := LowerCase(xi[i].Name); + if s = 'compoundstmt' then + DoFirstPass(xi[i]) + else if s = 'procedure' then + DoProc1(xi[i], Prog) + else if s = 'function' then + DoFunc1(xi[i], Prog) + end; + end; + +begin + TempRoot := FProgRoot; + FProgRoot := xi; + DoFirstPass(xi); + DoCompoundStmt(xi, Prog, Prog.Statement); + FProgRoot := TempRoot; +end; + + +end. diff --git a/FastScript/fs_iinirtti.pas b/FastScript/fs_iinirtti.pas new file mode 100644 index 0000000..8ef969b --- /dev/null +++ b/FastScript/fs_iinirtti.pas @@ -0,0 +1,377 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ IniFiles.pas classes and functions } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{ Copyright (c) 2004-2007 } +{ by Stalker SoftWare } +{ } +{******************************************} + +unit fs_iinirtti; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_iinterpreter, IniFiles{$IFDEF DELPHI16}, Controls{$ENDIF} +{$IFDEF Delphi16} + , System.Types +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsIniRTTI = class(TComponent); // fake component + + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; + procedure SaveIniFileToStream(oIniFile: TCustomIniFile; oStream: TStream); + procedure LoadIniFileFromStream(oIniFile :TCustomIniFile; oStream :TStream); + procedure WriteTStrings(oIniFile: TCustomIniFile; const Section: String; Values: TStrings; IsClear :Boolean = True); + procedure ReadTStrings(oIniFile: TCustomIniFile; const Section: String; Values: TStrings; IsClear :Boolean = True); + public + constructor Create(AScript: TfsScript); override; + end; + + +{ TFunctions } + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + + with AScript do + begin + with AddClass(TCustomIniFile, 'TObject') do + begin + AddConstructor('constructor Create(const FileName: String)', CallMethod); + AddMethod('function ReadInteger(const Section, Ident: String; Default: LongInt): LongInt', CallMethod); + AddMethod('procedure WriteInteger(const Section, Ident: String; Value: LongInt)', CallMethod); + AddMethod('function ReadBool(const Section, Ident: String; Default: Boolean): Boolean', CallMethod); + AddMethod('procedure WriteBool(const Section, Ident: String; Value: Boolean)', CallMethod); + AddMethod('function ReadDate(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteDate(const Section, Name: String; Value: TDateTime)', CallMethod); + AddMethod('function ReadDateTime(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteDateTime(const Section, Name: String; Value: TDateTime)', CallMethod); + AddMethod('function ReadFloat(const Section, Name: String; Default: Double): Double', CallMethod); + AddMethod('procedure WriteFloat(const Section, Name: String; Value: Double)', CallMethod); + AddMethod('function ReadTime(const Section, Name: String; Default: TDateTime): TDateTime', CallMethod); + AddMethod('procedure WriteTime(const Section, Name: String; Value: TDateTime);', CallMethod); +{$IFDEF DELPHI6} + AddMethod('function ReadBinaryStream(const Section, Name: String; Value: TStream): Integer', CallMethod); + AddMethod('procedure WriteBinaryStream(const Section, Name: String; Value: TStream)', CallMethod); +{$ENDIF} + AddMethod('function SectionExists(const Section: String): Boolean', CallMethod); + AddMethod('function ValueExists(const Section, Ident: String): Boolean', CallMethod); + + AddMethod('procedure WriteTStrings(const Section :String; Value :TStrings; IsClear :Boolean = True)', CallMethod); + AddMethod('function ReadTStrings(const Section :String; Value :TStrings; IsClear :Boolean = True): String;', CallMethod); + + AddProperty('FileName', 'String', GetProp); + end; + + with AddClass(TMemIniFile, 'TCustomIniFile') do + begin + AddConstructor('constructor Create(const FileName: String)', CallMethod); + AddMethod('procedure WriteString(const Section, Ident, Value: String)', CallMethod); + AddMethod('function ReadString(const Section, Ident, Default: String): String;', CallMethod); +{$IFDEF DELPHI6} + AddMethod('procedure ReadSectionValuesEx(const Section: String; Strings: TStrings)', CallMethod); +{$ENDIF} + AddMethod('procedure DeleteKey(const Section, Ident: String)', CallMethod); + AddMethod('procedure ReadSection(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSections(Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSectionValues(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure EraseSection(const Section: String)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure GetStrings(List: TStrings)', CallMethod); + AddMethod('procedure SetStrings(List: TStrings)', CallMethod); + AddMethod('procedure SaveIniFileToStream(oStream: TStream)', CallMethod); + AddMethod('procedure LoadIniFileFromStream(oStream: TStream)', CallMethod); + end; + + with AddClass(TIniFile, 'TCustomIniFile') do + begin + AddMethod('procedure WriteString(const Section, Ident, Value: String)', CallMethod); + AddMethod('function ReadString(const Section, Ident, Default: String): String;', CallMethod); +{$IFDEF DELPHI6} + AddMethod('procedure ReadSectionValuesEx(const Section: String; Strings: TStrings)', CallMethod); +{$ENDIF} + AddMethod('procedure DeleteKey(const Section, Ident: String)', CallMethod); + AddMethod('procedure ReadSection(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSections(Strings: TStrings)', CallMethod); + AddMethod('procedure ReadSectionValues(const Section: String; Strings: TStrings)', CallMethod); + AddMethod('procedure EraseSection(const Section: String)', CallMethod); + AddMethod('procedure SaveIniFileToStream(oStream: TStream)', CallMethod); + AddMethod('procedure LoadIniFileFromStream(oStream: TStream)', CallMethod); + end; + + end; + +end; + +{$HINTS OFF} +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const MethodName: String; Caller: TfsMethodHelper): Variant; +var + oCustomIniFile: TCustomIniFile; + oMemIniFile: TMemIniFile; + oIniFile: TIniFile; + oList: TStrings; + nCou: Integer; + +begin + + Result := 0; + + if ClassType = TCustomIniFile then + begin + oCustomIniFile := TCustomIniFile(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(oCustomIniFile.Create(Caller.Params[0])) + else if MethodName = 'WRITEINTEGER' then + oCustomIniFile.WriteInteger(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READINTEGER' then + Result := oCustomIniFile.ReadInteger(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEBOOL' then + oCustomIniFile.WriteBool(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READBOOL' then + Result := oCustomIniFile.ReadBool(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEDATE' then + oCustomIniFile.WriteDate(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READDATE' then + Result := oCustomIniFile.ReadDate(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEDATETIME' then + oCustomIniFile.WriteDateTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READDATETIME' then + Result := oCustomIniFile.ReadDateTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITEFLOAT' then + oCustomIniFile.WriteFloat(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READFLOAT' then + Result := oCustomIniFile.ReadFloat(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'WRITETIME' then + oCustomIniFile.WriteTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READTIME' then + Result := oCustomIniFile.ReadTime(Caller.Params[0], Caller.Params[1], Caller.Params[2]) +{$IFDEF DELPHI6} + else if MethodName = 'WRITEBINARYSTREAM' then + oCustomIniFile.WriteBinaryStream(Caller.Params[0], Caller.Params[1], TStream(frxInteger(Caller.Params[2]))) + else if MethodName = 'READBINARYSTREAM' then + Result := oCustomIniFile.ReadBinaryStream(Caller.Params[0], Caller.Params[1], TStream(frxInteger(Caller.Params[2]))) +{$ENDIF} + else if MethodName = 'SECTIONEXISTS' then + Result := oCustomIniFile.SectionExists(Caller.Params[0]) + else if MethodName = 'VALUEEXISTS' then + Result := oCustomIniFile.ValueExists(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'WRITETSTRINGS' then + WriteTStrings(oCustomIniFile, Caller.Params[0], TStrings(frxInteger(Caller.Params[1])), Caller.Params[2]) + else if MethodName = 'READTSTRINGS' then + ReadTStrings(oCustomIniFile, Caller.Params[0], TStrings(frxInteger(Caller.Params[1])), Caller.Params[2]) + + end; + + if ClassType = TMemIniFile then + begin + oMemIniFile := TMemIniFile(Instance); + if MethodName = 'CREATE' then + Result := frxInteger(oMemIniFile.Create(Caller.Params[0]{$IFDEF FPC}, False{$ENDIF})) + else if MethodName = 'WRITESTRING' then + oMemIniFile.WriteString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READSTRING' then + Result := oMemIniFile.ReadString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'DELETEKEY' then + oMemIniFile.DeleteKey(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'READSECTION' then + oMemIniFile.ReadSection(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'READSECTIONS' then + oMemIniFile.ReadSections(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'READSECTIONVALUES' then + oMemIniFile.ReadSectionValues(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'ERASESECTION' then + oMemIniFile.EraseSection(Caller.Params[0]) +{$IFDEF DELPHI6} + else if MethodName = 'READSECTIONVALUESEX' then + begin + oList := TStringList.Create; + try + oMemIniFile.ReadSectionValues(Caller.Params[0], oList); + TStrings(frxInteger(Caller.Params[1])).Clear; + for nCou := 0 to oList.Count-1 do +// TStrings(frxInteger(Caller.Params[1])).Add(oList.ValueFromIndex[nCou]); + TStrings(frxInteger(Caller.Params[1])).Add(oList.Values[oList.Names[nCou]]); + finally + oList.Free; + end; + end +{$ENDIF} + else if MethodName = 'CLEAR' then + oMemIniFile.Clear + else if MethodName = 'GETSTRINGS' then + oMemIniFile.GetStrings(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'SETSTRINGS' then + oMemIniFile.SetStrings(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'SAVEINIFILETOSTREAM' then + SaveIniFileToStream(oMemIniFile, TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADINIFILEFROMSTREAM' then + LoadIniFileFromStream(oMemIniFile, TStream(frxInteger(Caller.Params[0]))) + end; + + if ClassType = TIniFile then + begin + oIniFile := TIniFile(Instance); + if MethodName = 'WRITESTRING' then + oIniFile.WriteString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'READSTRING' then + Result := oIniFile.ReadString(Caller.Params[0], Caller.Params[1], Caller.Params[2]) + else if MethodName = 'DELETEKEY' then + oIniFile.DeleteKey(Caller.Params[0], Caller.Params[1]) + else if MethodName = 'READSECTION' then + oIniFile.ReadSection(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'READSECTIONS' then + oIniFile.ReadSections(TStrings(frxInteger(Caller.Params[0]))) + else if MethodName = 'READSECTIONVALUES' then + oIniFile.ReadSectionValues(Caller.Params[0], TStrings(frxInteger(Caller.Params[1]))) + else if MethodName = 'ERASESECTION' then + oIniFile.EraseSection(Caller.Params[0]) +{$IFDEF DELPHI6} + else if MethodName = 'READSECTIONVALUESEX' then + begin + oList := TStringList.Create; + try + oIniFile.ReadSectionValues(Caller.Params[0], oList); + TStrings(frxInteger(Caller.Params[1])).Clear; + for nCou := 0 to oList.Count-1 do +// TStrings(frxInteger(Caller.Params[1])).Add(oList.ValueFromIndex[nCou]); + TStrings(frxInteger(Caller.Params[1])).Add(oList.Values[oList.Names[nCou]]); + finally + oList.Free; + end; + end +{$ENDIF} + else if MethodName = 'SAVEINIFILETOSTREAM' then + SaveIniFileToStream(oIniFile, TStream(frxInteger(Caller.Params[0]))) + else if MethodName = 'LOADINIFILEFROMSTREAM' then + LoadIniFileFromStream(oIniFile, TStream(frxInteger(Caller.Params[0]))) + end; + +end; +{$HINTS ON} + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; const PropName: String): Variant; +begin + Result := 0; + + if ClassType = TCustomIniFile then + begin + if PropName = 'FILENAME' then + Result := TIniFile(Instance).FileName + end; +end; + +procedure TFunctions.SaveIniFileToStream(oIniFile :TCustomIniFile; oStream :TStream); +var + oStrings :TStrings; + +begin + + if (not Assigned(oIniFile)) or (not Assigned(oStream)) then Exit; + + if not ((oIniFile is TIniFile) or (oIniFile is TMemIniFile)) then Exit; + + oStrings:= TStringList.Create; + try + + if oIniFile is TIniFile then + oStrings.LoadFromFile(oIniFile.FileName) + else + if oIniFile is TMemIniFile then + TMemIniFile(oIniFile).GetStrings(oStrings); + + oStrings.SaveToStream(oStream); + + finally + oStrings.Free; + end; + +end; + +procedure TFunctions.LoadIniFileFromStream(oIniFile :TCustomIniFile; oStream :TStream); +var + oStrings :TStrings; + +begin + + if (not Assigned(oIniFile)) or (not Assigned(oStream)) then Exit; + + if not ((oIniFile is TIniFile) or (oIniFile is TMemIniFile)) then Exit; + + oStrings:= TStringList.Create; + try + + oStrings.LoadFromStream(oStream); + + if oIniFile is TIniFile then + oStrings.SaveToFile(oIniFile.FileName) + else + if oIniFile is TMemIniFile then + TMemIniFile(oIniFile).SetStrings(oStrings); + + finally + oStrings.Free; + end; + +end; + +procedure TFunctions.WriteTStrings(oIniFile :TCustomIniFile; const Section :String; Values :TStrings; IsClear :Boolean = True); +var + nCou :Integer; + +begin + + if IsClear then oIniFile.EraseSection(Section); + + for nCou := 0 to Values.Count-1 do + oIniFile.WriteString(Section, 'Items'+IntToStr(nCou), Values[nCou]); + + oIniFile.WriteInteger(Section, 'Count', Values.Count); + +end; + +procedure TFunctions.ReadTStrings(oIniFile :TCustomIniFile; const Section :String; Values :TStrings; IsClear :Boolean = True); +var + nCou, nCount :Integer; + +begin + + nCount := oIniFile.ReadInteger(Section, 'Count', 0); + + if IsClear then Values.Clear; + + for nCou := 0 to nCount-1 do + Values.Add(oIniFile.ReadString(Section, 'Items'+IntToStr(nCou), '')); + +end; + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsIniRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. diff --git a/FastScript/fs_iinterpreter.pas b/FastScript/fs_iinterpreter.pas new file mode 100644 index 0000000..916100e --- /dev/null +++ b/FastScript/fs_iinterpreter.pas @@ -0,0 +1,3547 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Main module } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_iinterpreter; + +interface + +{$I fs.inc} + +uses + SysUtils, Classes, fs_xml +{$IFDEF Delphi6} +, Variants +{$ENDIF} + +, SyncObjs +{$IFDEF Delphi16} + , System.Types +{$ENDIF}; +//FMX uses section +{$ELSE} +interface + +{$I fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_xml +, System.Variants +, System.SyncObjs, System.Types; +{$ENDIF} + + +type + TfsStatement = class; + TfsDesignator = class; + TfsCustomVariable = class; + TfsClassVariable = class; + TfsProcVariable = class; + TfsMethodHelper = class; + TfsPropertyHelper = class; + TfsScript = class; + TfsDesignatorItem = class; + +{ List of supported types. Actually all values are variants; types needed + only to know what kind of operations can be implemented to the variable } + + TfsVarType = (fvtInt, fvtBool, fvtFloat, fvtChar, fvtString, fvtClass, + fvtArray, fvtVariant, fvtEnum, fvtConstructor, fvtInt64); +{$IFDEF DELPHI16} + frxInteger = NativeInt; +{$ELSE} + {$IFDEF FPC} + frxInteger = PtrInt; + {$ELSE} + frxInteger = Integer; + {$ENDIF} +{$ENDIF} + + TfsTypeRec = {$IFDEF Delphi12}{$ELSE}packed{$ENDIF} record + Typ: TfsVarType; +{$IFDEF Delphi12} + TypeName: String; +{$ELSE} + TypeName: String[64]; +{$ENDIF} + end; + +{ Events for get/set non-published property values and call methods } + + TfsGetValueEvent = function(Instance: TObject; ClassType: TClass; + const PropName: String): Variant of object; + TfsSetValueEvent = procedure(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant) of object; + + TfsGetValueNewEvent = function(Instance: TObject; ClassType: TClass; + const PropName: String; Caler: TfsPropertyHelper): Variant of object; + TfsSetValueNewEvent = procedure(Instance: TObject; ClassType: TClass; + const PropName: String; Value: Variant; Caller: TfsPropertyHelper) of object; + + TfsCallMethodNewEvent = function(Instance: TObject; ClassType: TClass; + const MethodName: String; Caller: TfsMethodHelper): Variant of object; + TfsCallMethodEvent = function(Instance: TObject; ClassType: TClass; + const MethodName: String; var Params: Variant): Variant of object; + TfsRunLineEvent = procedure(Sender: TfsScript; + const UnitName, SourcePos: String) of object; + TfsGetUnitEvent = procedure(Sender: TfsScript; + const UnitName: String; var UnitText: String) of object; + TfsGetVariableValueEvent = function(VarName: String; + VarTyp: TfsVarType; OldValue: Variant): Variant of object; + +{ List of objects. Unlike TList, Destructor frees all objects in the list } + + TfsItemList = class(TObject) + protected + FItems: TList; + protected + procedure Clear; virtual; + public + constructor Create; + destructor Destroy; override; + procedure Add(Item: TObject); + function Count: Integer; + procedure Remove(Item: TObject); + end; + + +{ TfsScript represents the main script. It holds the list of local variables, + constants, procedures in the Items. Entry point is the Statement. + + There is one global object fsGlobalUnit: TfsScript that holds all information + about external classes, global variables, methods and constants. To use + such globals, pass fsGlobalUnit to the TfsScript.Create. + If you want, you can add classes/variables/methods to the TfsScript - they + will be local for it and not visible in other programs. + + To execute a program, compile it first by calling Compile method. If error + occurs, the ErrorMsg will contain the error message and ErrorPos will point + to an error position in the source text. For example: + + if not Prg.Compile then + begin + ErrorLabel.Caption := Prg.ErrorMsg; + Memo1.SetFocus; + Memo1.Perform(EM_SETSEL, Prg.ErrorPos - 1, Prg.ErrorPos - 1); + Memo1.Perform(EM_SCROLLCARET, 0, 0); + end; + + If no errors occured, call Execute method to execute the program } + +{$i frxPlatformsAttribute.inc} + + TfsScript = class(TComponent) + + private + FAddedBy: TObject; + FBreakCalled: Boolean; + FContinueCalled: Boolean; + FExitCalled: Boolean; + FErrorMsg: String; + FErrorPos: String; + FErrorUnit: String; + FExtendedCharset: Boolean; + FItems: TStringList; + FIsRunning: Boolean; + FLines: TStrings; + FMacros: TStrings; + FMainProg: Boolean; + FOnGetILUnit: TfsGetUnitEvent; + FOnGetUnit: TfsGetUnitEvent; + FOnRunLine: TfsRunLineEvent; + FOnGetVarValue: TfsGetVariableValueEvent; + FParent: TfsScript; + FProgRunning: TfsScript; + FRTTIAdded: Boolean; + FStatement: TfsStatement; + FSyntaxType: String; + FTerminated: Boolean; + FUnitLines: TStringList; + FIncludePath: TStrings; + FUseClassLateBinding: Boolean; + FEvaluteRiseError: Boolean; + FClearLocalVars: Boolean; + FLastSourcePos : String; + FProgName : String; + function GetItem(Index: Integer): TfsCustomVariable; + procedure RunLine(const UnitName, Index: String); + function GetVariables(Index: String): Variant; + procedure SetVariables(Index: String; const Value: Variant); + procedure SetLines(const Value: TStrings); + function GetProgName: String; + procedure SetProgName(const Value: String); + + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Add(const Name: String; Item: TObject); + procedure AddCodeLine(const UnitName, APos: String); + procedure AddRTTI; + procedure Remove(Item: TObject); + procedure RemoveItems(Owner: TObject); + procedure Clear; + procedure ClearItems(Owner: TObject); + procedure ClearRTTI; + function Count: Integer; + + { Adds a class. Example: + with AddClass(TComponent, 'TPersistent') do + begin + ... add properties and methods ... + end } + function AddClass(AClass: TClass; const Ancestor: String): TfsClassVariable; dynamic; + { Adds a constant. Example: + AddConst('pi', 'Double', 3.14159) } + procedure AddConst(const Name, Typ: String; const Value: Variant); dynamic; + { Adds an enumeration constant. Example: + AddEnum('TFontPitch', 'fpDefault, fpFixed, fpVariable') + all constants gets type fvtEnum and values 0,1,2,3.. } + procedure AddEnum(const Typ, Names: String); dynamic; + { Adds an set constant. Example: + AddEnumSet('TFontStyles', 'fsBold, fsItalic, fsUnderline') + all constants gets type fvtEnum and values 1,2,4,8,.. } + procedure AddEnumSet(const Typ, Names: String); dynamic; + { Adds a form or datamodule with all its child components } + procedure AddComponent(Form: TComponent); dynamic; + procedure AddForm(Form: TComponent); dynamic; + { Adds a method. Syntax is the same as for TfsClassVariable.AddMethod } + procedure AddMethod(const Syntax: String; CallEvent: TfsCallMethodNewEvent; + const Category: String = ''; const Description: String = ''); overload; dynamic; + procedure AddMethod(const Syntax: String; CallEvent: TfsCallMethodEvent; + const Category: String = ''; const Description: String = ''); overload; dynamic; + { Adds an external object. Example: + AddObject('Memo1', Memo1) } + procedure AddObject(const Name: String; Obj: TObject); dynamic; + { Adds a variable. Example: + AddVariable('n', 'Variant', 0) } + procedure AddVariable(const Name, Typ: String; const Value: Variant); dynamic; + { Adds a type. Example: + AddType('TDateTime', fvtFloat) } + procedure AddType(const TypeName: String; ParentType: TfsVarType); dynamic; + { Calls internal procedure or function. Example: + val := CallFunction('ScriptFunc1', VarArrayOf([2003, 3])) } + function CallFunction(const Name: String; const Params: Variant; sGlobal: Boolean = false): Variant; + function CallFunction1(const Name: String; var Params: Variant; sGlobal: Boolean = false): Variant; + function CallFunction2(const Func: TfsProcVariable; const Params: Variant): Variant; + + { Compiles the source code. Example: + Lines.Text := 'begin i := 0 end.'; + SyntaxType := 'PascalScript'; + if Compile then ... } + function Compile: Boolean; + { Executes compiled code } + procedure Execute; + { Same as if Compile then Execute. Returns False if compile failed } + function Run: Boolean; + { terminates the script } + procedure Terminate; + { Evaluates an expression (useful for debugging purposes). Example: + val := Evaluate('i+1'); } + function Evaluate(const Expression: String): Variant; + { checks whether is the line is executable } + function IsExecutableLine(LineN: Integer; const UnitName: String = ''): Boolean; + + { Generates intermediate language. You can save it and compile later + by SetILCode method } + function GetILCode(Stream: TStream): Boolean; + { Compiles intermediate language } + function SetILCode(Stream: TStream): Boolean; + + function Find(const Name: String): TfsCustomVariable; + function FindClass(const Name: String): TfsClassVariable; + function FindLocal(const Name: String): TfsCustomVariable; + + property AddedBy: TObject read FAddedBy write FAddedBy; + property ClearLocalVars: Boolean read FClearLocalVars write FClearLocalVars; + property ErrorMsg: String read FErrorMsg write FErrorMsg; + property ErrorPos: String read FErrorPos write FErrorPos; + property ErrorUnit: String read FErrorUnit write FErrorUnit; + property ExtendedCharset: Boolean read FExtendedCharset write FExtendedCharset; + property Items[Index: Integer]: TfsCustomVariable read GetItem; + property IsRunning: Boolean read FIsRunning; + property Macros: TStrings read FMacros; + property MainProg: Boolean read FMainProg write FMainProg; + property Parent: TfsScript read FParent write FParent; + property ProgRunning: TfsScript read FProgRunning; + property ProgName: String read GetProgName write SetProgName; + property Statement: TfsStatement read FStatement; + property Variables[Index: String]: Variant read GetVariables write SetVariables; + property IncludePath: TStrings read FIncludePath; + property UseClassLateBinding: Boolean read FUseClassLateBinding write FUseClassLateBinding; + property EvaluteRiseError: Boolean read FEvaluteRiseError; + published + { the source code } + property Lines: TStrings read FLines write SetLines; + { the language name } + property SyntaxType: String read FSyntaxType write FSyntaxType; + property OnGetILUnit: TfsGetUnitEvent read FOnGetILUnit write FOnGetILUnit; + property OnGetUnit: TfsGetUnitEvent read FOnGetUnit write FOnGetUnit; + property OnRunLine: TfsRunLineEvent read FOnRunLine write FOnRunLine; + property OnGetVarValue: TfsGetVariableValueEvent read FOnGetVarValue write FOnGetVarValue; + end; + + + TfsCustomExpression = class; + TfsSetExpression = class; + +{ Statements } + + TfsStatement = class(TfsItemList) + private + FProgram: TfsScript; + FSourcePos: String; + FUnitName: String; + function GetItem(Index: Integer): TfsStatement; + procedure RunLine; + public + constructor Create(AProgram: TfsScript; const UnitName, SourcePos: String); virtual; + procedure Execute; virtual; + property Items[Index: Integer]: TfsStatement read GetItem; + end; + + TfsAssignmentStmt = class(TfsStatement) + private + FDesignator: TfsDesignator; + FExpression: TfsCustomExpression; + FVar: TfsCustomVariable; + FExpr: TfsCustomVariable; + public + destructor Destroy; override; + procedure Execute; override; + procedure Optimize; + property Designator: TfsDesignator read FDesignator write FDesignator; + property Expression: TfsCustomExpression read FExpression write FExpression; + end; + + TfsAssignPlusStmt = class(TfsAssignmentStmt) + public + procedure Execute; override; + end; + + TfsAssignMinusStmt = class(TfsAssignmentStmt) + public + procedure Execute; override; + end; + + TfsAssignMulStmt = class(TfsAssignmentStmt) + public + procedure Execute; override; + end; + + TfsAssignDivStmt = class(TfsAssignmentStmt) + public + procedure Execute; override; + end; + + TfsCallStmt = class(TfsStatement) + private + FDesignator: TfsDesignator; + FModificator: String; + public + destructor Destroy; override; + procedure Execute; override; + property Designator: TfsDesignator read FDesignator write FDesignator; + property Modificator: String read FModificator write FModificator; + end; + + TfsIfStmt = class(TfsStatement) + private + FCondition: TfsCustomExpression; + FElseStmt: TfsStatement; + public + constructor Create(AProgram: TfsScript; const UnitName, SourcePos: String); override; + destructor Destroy; override; + procedure Execute; override; + property Condition: TfsCustomExpression read FCondition write FCondition; + property ElseStmt: TfsStatement read FElseStmt write FElseStmt; + end; + + TfsCaseSelector = class(TfsStatement) + private + FSetExpression: TfsSetExpression; + public + destructor Destroy; override; + function Check(const Value: Variant): Boolean; + property SetExpression: TfsSetExpression read FSetExpression write FSetExpression; + end; + + TfsCaseStmt = class(TfsStatement) + private + FCondition: TfsCustomExpression; + FElseStmt: TfsStatement; + public + constructor Create(AProgram: TfsScript; const UnitName, SourcePos: String); override; + destructor Destroy; override; + procedure Execute; override; + property Condition: TfsCustomExpression read FCondition write FCondition; + property ElseStmt: TfsStatement read FElseStmt write FElseStmt; + end; + + TfsRepeatStmt = class(TfsStatement) + private + FCondition: TfsCustomExpression; + FInverseCondition: Boolean; + public + destructor Destroy; override; + procedure Execute; override; + property Condition: TfsCustomExpression read FCondition write FCondition; + property InverseCondition: Boolean read FInverseCondition write FInverseCondition; + end; + + TfsWhileStmt = class(TfsStatement) + private + FCondition: TfsCustomExpression; + public + destructor Destroy; override; + procedure Execute; override; + property Condition: TfsCustomExpression read FCondition write FCondition; + end; + + TfsForStmt = class(TfsStatement) + private + FBeginValue: TfsCustomExpression; + FDown: Boolean; + FEndValue: TfsCustomExpression; + FVariable: TfsCustomVariable; + public + destructor Destroy; override; + procedure Execute; override; + property BeginValue: TfsCustomExpression read FBeginValue write FBeginValue; + property Down: Boolean read FDown write FDown; + property EndValue: TfsCustomExpression read FEndValue write FEndValue; + property Variable: TfsCustomVariable read FVariable write FVariable; + end; + + TfsVbForStmt = class(TfsStatement) + private + FBeginValue: TfsCustomExpression; + FEndValue: TfsCustomExpression; + FStep: TfsCustomExpression; + FVariable: TfsCustomVariable; + public + destructor Destroy; override; + procedure Execute; override; + property BeginValue: TfsCustomExpression read FBeginValue write FBeginValue; + property EndValue: TfsCustomExpression read FEndValue write FEndValue; + property Step: TfsCustomExpression read FStep write FStep; + property Variable: TfsCustomVariable read FVariable write FVariable; + end; + + TfsCppForStmt = class(TfsStatement) + private + FFirstStmt: TfsStatement; + FExpression: TfsCustomExpression; + FSecondStmt: TfsStatement; + public + constructor Create(AProgram: TfsScript; const UnitName, SourcePos: String); override; + destructor Destroy; override; + procedure Execute; override; + property FirstStmt: TfsStatement read FFirstStmt write FFirstStmt; + property Expression: TfsCustomExpression read FExpression write FExpression; + property SecondStmt: TfsStatement read FSecondStmt write FSecondStmt; + end; + + TfsTryStmt = class(TfsStatement) + private + FIsExcept: Boolean; + FExceptStmt: TfsStatement; + public + constructor Create(AProgram: TfsScript; const UnitName, SourcePos: String); override; + destructor Destroy; override; + procedure Execute; override; + property IsExcept: Boolean read FIsExcept write FIsExcept; + property ExceptStmt: TfsStatement read FExceptStmt write FExceptStmt; + end; + + TfsBreakStmt = class(TfsStatement) + public + procedure Execute; override; + end; + + TfsContinueStmt = class(TfsStatement) + public + procedure Execute; override; + end; + + TfsExitStmt = class(TfsStatement) + public + procedure Execute; override; + end; + + TfsWithStmt = class(TfsStatement) + private + FDesignator: TfsDesignator; + FVariable: TfsCustomVariable; + public + destructor Destroy; override; + procedure Execute; override; + property Designator: TfsDesignator read FDesignator write FDesignator; + property Variable: TfsCustomVariable read FVariable write FVariable; + end; + +{ TfsCustomVariable is the generic class for variables, constants, arrays, + properties, methods and procedures/functions } + + TfsParamItem = class; + + TfsCustomVariable = class(TfsItemList) + private + FAddedBy: TObject; + FIsMacro: Boolean; + FIsReadOnly: Boolean; + FName: String; + FNeedResult: Boolean; + FRefItem: TfsCustomVariable; + FSourcePos: String; + FSourceUnit: String; + FTyp: TfsVarType; + FTypeName: String; + FUppercaseName: String; + FValue: Variant; + FOnGetVarValue: TfsGetVariableValueEvent; + function GetParam(Index: Integer): TfsParamItem; + function GetPValue: PVariant; + protected + procedure SetValue(const Value: Variant); virtual; + function GetValue: Variant; virtual; + public + constructor Create(const AName: String; ATyp: TfsVarType; + const ATypeName: String); + function GetFullTypeName: String; + function GetNumberOfRequiredParams: Integer; + + property AddedBy: TObject read FAddedBy write FAddedBy; + property IsMacro: Boolean read FIsMacro write FIsMacro; + property IsReadOnly: Boolean read FIsReadOnly write FIsReadOnly; + property Name: String read FName; + property NeedResult: Boolean read FNeedResult write FNeedResult; + property Params[Index: Integer]: TfsParamItem read GetParam; default; + property PValue: PVariant read GetPValue; + property RefItem: TfsCustomVariable read FRefItem write FRefItem; + property SourcePos: String read FSourcePos write FSourcePos; + property SourceUnit: String read FSourceUnit write FSourceUnit; + property Typ: TfsVarType read FTyp write FTyp; + property TypeName: String read FTypeName write FTypeName; + property Value: Variant read GetValue write SetValue; + property OnGetVarValue: TfsGetVariableValueEvent read FOnGetVarValue write FOnGetVarValue; + end; + +{ TfsVariable represents constant or variable } + + TfsVariable = class(TfsCustomVariable) + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + end; + + TfsTypeVariable = class(TfsCustomVariable) + end; + + TfsStringVariable = class(TfsVariable) + private + FStr: String; + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + end; + +{ TfsParamItem describes one parameter of procedure/function/method call } + + TfsParamItem = class(TfsCustomVariable) + private + FDefValue: Variant; + FIsOptional: Boolean; + FIsVarParam: Boolean; + public + constructor Create(const AName: String; ATyp: TfsVarType; + const ATypeName: String; AIsOptional, AIsVarParam: Boolean); + property DefValue: Variant read FDefValue write FDefValue; + property IsOptional: Boolean read FIsOptional; + property IsVarParam: Boolean read FIsVarParam; + end; + +{ TfsProcVariable is a local internal procedure/function. Formal parameters + are in Params, and statement to execute is in Prog: TfsScript } + + TfsLocalVariablesHelper = class(TObject) + protected + FValue: Variant; + FVariableLink :TfsCustomVariable; + end; + + + TfsProcVariable = class(TfsCustomVariable) + private + FExecuting: Boolean; + FIsFunc: Boolean; + FProgram: TfsScript; + FVarsStack: TList; + protected + function GetValue: Variant; override; + public + constructor Create(const AName: String; ATyp: TfsVarType; + const ATypeName: String; AParent: TfsScript; AIsFunc: Boolean = True); + destructor Destroy; override; + function SaveLocalVariables: Integer; + procedure RestoreLocalVariables(StackIndex: Integer; bSkipVarParams: Boolean = False; dItem: TfsDesignatorItem = nil); + property Executing: Boolean read FExecuting; + property IsFunc: Boolean read FIsFunc; + property Prog: TfsScript read FProgram; + end; + + TfsCustomExpression = class(TfsCustomVariable) + end; + +{ TfsCustomHelper is the generic class for the "helpers". Helper is + a object that takes the data from the parent object and performs some + actions. Helpers needed for properties, methods and arrays } + + TfsCustomHelper = class(TfsCustomVariable) + private + FParentRef: TfsCustomVariable; + FParentValue: Variant; + FProgram: TfsScript; + public + property ParentRef: TfsCustomVariable read FParentRef write FParentRef; + + property ParentValue: Variant read FParentValue write FParentValue; + + property Prog: TfsScript read FProgram write FProgram; + end; + +{ TfsArrayHelper performs access to array elements } + + TfsArrayHelper = class(TfsCustomHelper) + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + public + constructor Create(const AName: String; DimCount: Integer; Typ: TfsVarType; + const TypeName: String); + destructor Destroy; override; + end; + +{ TfsStringHelper performs access to string elements } + + TfsStringHelper = class(TfsCustomHelper) + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + public + constructor Create; + end; + +{ TfsPropertyHelper gets/sets the property value. Object instance is + stored as Integer in the ParentValue property } + + TfsPropertyHelper = class(TfsCustomHelper) + private + FClassRef: TClass; + FIsPublished: Boolean; + FOnGetValue: TfsGetValueEvent; + FOnSetValue: TfsSetValueEvent; + FOnGetValueNew: TfsGetValueNewEvent; + FOnSetValueNew: TfsSetValueNewEvent; + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + public + property IsPublished: Boolean read FIsPublished; + property OnGetValue: TfsGetValueEvent read FOnGetValue write FOnGetValue; + property OnSetValue: TfsSetValueEvent read FOnSetValue write FOnSetValue; + property OnGetValueNew: TfsGetValueNewEvent read FOnGetValueNew write FOnGetValueNew; + property OnSetValueNew: TfsSetValueNewEvent read FOnSetValueNew write FOnSetValueNew; + end; + +{ TfsMethodHelper gets/sets the method value. Object instance is + stored as Integer in the ParentValue property. SetValue is called + if the method represents the indexes property. } + + TfsMethodHelper = class(TfsCustomHelper) + private + FCategory: String; + FClassRef: TClass; + FDescription: String; + FIndexMethod: Boolean; + FOnCall: TfsCallMethodEvent; + FOnCallNew: TfsCallMethodNewEvent; + FSetValue: Variant; + FSyntax: String; + FVarArray: Variant; + function GetVParam(Index: Integer): Variant; + procedure SetVParam(Index: Integer; const Value: Variant); + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + public + constructor Create(const Syntax: String; Script: TfsScript); + destructor Destroy; override; + + property Category: String read FCategory write FCategory; + property Description: String read FDescription write FDescription; + property IndexMethod: Boolean read FIndexMethod; + property Params[Index: Integer]: Variant read GetVParam write SetVParam; default; + property Syntax: String read FSyntax; + property OnCall: TfsCallMethodEvent read FOnCall write FOnCall; + property OnCallNew: TfsCallMethodNewEvent read FOnCallNew write FOnCallNew; + end; + +{ TfsComponentHelper gets the component inside an owner, e.g. Form1.Button1 } + + TfsComponentHelper = class(TfsCustomHelper) + protected + function GetValue: Variant; override; + procedure SetValue(const Value: Variant); override; + public + constructor Create(const Name: String; const ClassName: String); + end; + +{ Event helper maintains VCL events } + + TfsCustomEvent = class(TObject) + private + FHandler: TfsProcVariable; + FInstance: TObject; + protected + procedure CallHandler(Params: array of const); + public + constructor Create(AObject: TObject; AHandler: TfsProcVariable); virtual; + function GetMethod: Pointer; virtual; abstract; + property Handler: TfsProcVariable read FHandler; + property Instance: TObject read FInstance; + end; + + TfsEventClass = class of TfsCustomEvent; + + TfsEventHelper = class(TfsCustomHelper) + private + FClassRef: TClass; + FEvent: TfsEventClass; + protected + procedure SetValue(const Value: Variant); override; + function GetValue: Variant; override; + public + constructor Create(const Name: String; AEvent: TfsEventClass); + end; + +{ TfsClassVariable holds information about external class. Call to + AddXXX methods adds properties and methods items to the items list } + + TfsClassVariable = class(TfsCustomVariable) + private + FAncestor: String; + FClassRef: TClass; + FDefProperty: TfsCustomHelper; + FMembers: TfsItemList; + FProgram: TfsScript; + procedure AddPublishedProperties(AClass: TClass); + function GetMembers(Index: Integer): TfsCustomHelper; + function GetMembersCount: Integer; + protected + function GetValue: Variant; override; + public + constructor Create(AClass: TClass; const Ancestor: String); + destructor Destroy; override; + + { Adds a contructor. Example: + AddConstructor('constructor Create(AOwner: TComponent)', MyCallEvent) } + procedure AddConstructor(Syntax: String; CallEvent: TfsCallMethodNewEvent); overload; + procedure AddConstructor(Syntax: String; CallEvent: TfsCallMethodEvent); overload; + function AddComponent(c: TComponent): TfsComponentHelper ; + { Adds a property. Example: + AddProperty('Font', 'TFont', MyGetEvent, MySetEvent) } + procedure AddProperty(const Name, Typ: String; + GetEvent: TfsGetValueEvent; SetEvent: TfsSetValueEvent = nil); + procedure AddPropertyEx(const Name, Typ: String; + GetEvent: TfsGetValueNewEvent; SetEvent: TfsSetValueNewEvent = nil); + { Adds a default property. Example: + AddDefaultProperty('Cell', 'Integer,Integer', 'String', MyCallEvent) + will describe real property Cell[Index1, Index2: Integer]: String + Note: in the CallEvent you'll get the MethodName parameter + 'CELL.GET' and 'CELL.SET', not 'CELL' } + procedure AddDefaultProperty(const Name, Params, Typ: String; + CallEvent: TfsCallMethodNewEvent; AReadOnly: Boolean = False); overload; + procedure AddDefaultProperty(const Name, Params, Typ: String; + CallEvent: TfsCallMethodEvent; AReadOnly: Boolean = False); overload; + { Adds an indexed property. Example and behavior are the same as + for AddDefaultProperty } + procedure AddIndexProperty(const Name, Params, Typ: String; + CallEvent: TfsCallMethodNewEvent; AReadOnly: Boolean = False); overload; + procedure AddIndexProperty(const Name, Params, Typ: String; + CallEvent: TfsCallMethodEvent; AReadOnly: Boolean = False); overload; + { Adds a method. Example: + AddMethod('function IsVisible: Boolean', MyCallEvent) } + procedure AddMethod(const Syntax: String; CallEvent: TfsCallMethodNewEvent); overload; + procedure AddMethod(const Syntax: String; CallEvent: TfsCallMethodEvent); overload; + { Adds an event. Example: + AddEvent('OnClick', TfsNotifyEvent) } + procedure AddEvent(const Name: String; AEvent: TfsEventClass); + function Find(const Name: String; IncludeComponentHelper: Boolean = True): TfsCustomHelper; + + property Ancestor: String read FAncestor; + property ClassRef: TClass read FClassRef; + property DefProperty: TfsCustomHelper read FDefProperty; + property Members[Index: Integer]: TfsCustomHelper read GetMembers; + property MembersCount: Integer read GetMembersCount; + end; + +{ TfsDesignator holds the parts of function/procedure/variable/method/property + calls. Items are of type TfsDesignatorItem. + For example, Table1.FieldByName('N').AsString[1] will be represented as + items[0]: name 'Table1', no params + items[1]: name 'FieldByName', 1 param: 'N' + items[2]: name 'AsString', no params + items[3]: name '[', 1 param: '1' + Call to Value calculates and returns the designator value } + + TfsDesignatorKind = (dkOther, dkVariable, dkStringArray, dkArray); + + TfsDesignatorItem = class(TfsItemList) + private + FFlag: Boolean; { needed for index methods } + FRef: TfsCustomVariable; + FSourcePos: String; + function GetItem(Index: Integer): TfsCustomExpression; + public + property Items[Index: Integer]: TfsCustomExpression read GetItem; default; + property Flag: Boolean read FFlag write FFlag; + property Ref: TfsCustomVariable read FRef write FRef; + property SourcePos: String read FSourcePos write FSourcePos; + end; + + TfsDesignator = class(TfsCustomVariable) + private + FKind: TfsDesignatorKind; + FMainProg: TfsScript; + FProgram: TfsScript; + FRef1: TfsCustomVariable; + FRef2: TfsDesignatorItem; + FLateBindingXmlSource: TfsXMLItem; + procedure CheckLateBinding; + function DoCalc(const AValue: Variant; Flag: Boolean): Variant; + function GetItem(Index: Integer): TfsDesignatorItem; + protected + function GetValue: Variant; override; + procedure SetValue(const Value: Variant); override; + public + constructor Create(AProgram: TfsScript); + destructor Destroy; override; + procedure Borrow(ADesignator: TfsDesignator); + procedure Finalize; + property Items[Index: Integer]: TfsDesignatorItem read GetItem; default; + property Kind: TfsDesignatorKind read FKind; + property LateBindingXmlSource: TfsXMLItem read FLateBindingXmlSource + write FLateBindingXmlSource; + end; + + TfsVariableDesignator = class(TfsDesignator) + protected + function GetValue: Variant; override; + procedure SetValue(const Value: Variant); override; + end; + + TfsStringDesignator = class(TfsDesignator) + protected + function GetValue: Variant; override; + procedure SetValue(const Value: Variant); override; + end; + + TfsArrayDesignator = class(TfsDesignator) + protected + function GetValue: Variant; override; + procedure SetValue(const Value: Variant); override; + end; + +{ TfsSetExpression represents a set of values like ['_', '0'..'9'] } + + TfsSetExpression = class(TfsCustomVariable) + private + function GetItem(Index: Integer): TfsCustomExpression; + protected + function GetValue: Variant; override; + public + function Check(const Value: Variant): Boolean; + property Items[Index: Integer]: TfsCustomExpression read GetItem; + end; + + TfsRTTIModule = class(TObject) + private + FScript: TfsScript; + public + constructor Create(AScript: TfsScript); virtual; + property Script: TfsScript read FScript; + end; + + +function fsGlobalUnit: TfsScript; +function fsIsGlobalUnitExist: Boolean; +function fsRTTIModules: TList; + + +implementation +//VCL uses section +{$IFNDEF FMX} +uses + TypInfo, fs_isysrtti, fs_iexpression, fs_iparser, fs_iilparser, + fs_itools, fs_iconst +{$IFDEF DELPHI16} + , Vcl.Controls +{$ENDIF} +{$IFDEF CLX} +, QForms, QDialogs, Types +{$ELSE} + {$IFDEF FPC} + {$IFDEF NOFORMS} + // nothing + {$ELSE} + , Forms, Dialogs + {$ENDIF} + {$ELSE} + , Windows + {$IFDEF NOFORMS} + , Messages + {$ELSE} + , Forms, Dialogs + {$ENDIF} + {$ENDIF} +{$ENDIF}; +//FMX uses section +{$ELSE} +uses + System.TypInfo, FMX.fs_isysrtti, FMX.fs_iexpression, FMX.fs_iparser, FMX.fs_iilparser, + FMX.fs_itools, FMX.fs_iconst, FMX.Types + {$IFDEF NOFORMS} + , Windows, Messages + {$ELSE} + , FMX.Forms, FMX.Dialogs + {$ENDIF}; +{$ENDIF} + +var + FGlobalUnit: TfsScript = nil; + FGlobalUnitDestroyed: Boolean = False; + FRTTIModules: TList = nil; + FRTTIModulesDestroyed: Boolean = False; + + +{ TfsItemsList } + +constructor TfsItemList.Create; +begin + FItems := TList.Create; +end; + +destructor TfsItemList.Destroy; +begin + Clear; + FItems.Free; + inherited; +end; + +procedure TfsItemList.Clear; +begin + while FItems.Count > 0 do + begin + TObject(FItems[0]).Free; + FItems.Delete(0); + end; +end; + +function TfsItemList.Count: Integer; +begin + Result := FItems.Count; +end; + +procedure TfsItemList.Add(Item: TObject); +begin + FItems.Add(Item); +end; + +procedure TfsItemList.Remove(Item: TObject); +begin + FItems.Remove(Item); +end; + + +{ TfsCustomVariable } + +constructor TfsCustomVariable.Create(const AName: String; ATyp: TfsVarType; + const ATypeName: String); +begin + inherited Create; + FName := AName; + FTyp := ATyp; + FTypeName := ATypeName; + FValue := Null; + FNeedResult := True; + FUppercaseName := AnsiUppercase(FName); +end; + +function TfsCustomVariable.GetValue: Variant; +begin + Result := FValue; +end; + +procedure TfsCustomVariable.SetValue(const Value: Variant); +begin + if not FIsReadOnly then + FValue := Value; +end; + +function TfsCustomVariable.GetParam(Index: Integer): TfsParamItem; +begin + Result := FItems[Index]; +end; + +function TfsCustomVariable.GetPValue: PVariant; +begin + Result := @FValue; +end; + +function TfsCustomVariable.GetFullTypeName: String; +begin + case FTyp of + fvtInt: Result := 'Integer'; + fvtInt64: Result := 'Int64'; + fvtBool: Result := 'Boolean'; + fvtFloat: Result := 'Extended'; + fvtChar: Result := 'Char'; + fvtString: Result := 'String'; + fvtClass: Result := FTypeName; + fvtArray: Result := 'Array'; + fvtEnum: Result := FTypeName; + else + Result := 'Variant'; + end; +end; + +function TfsCustomVariable.GetNumberOfRequiredParams: Integer; +var + i: Integer; +begin + Result := 0; + for i := 0 to Count - 1 do + if not Params[i].IsOptional then + Inc(Result); +end; + + +{ TfsStringVariable } + +function TfsStringVariable.GetValue: Variant; +begin + Result := FStr; + if Assigned(FOnGetVarValue) then + begin + Result := FOnGetVarValue(FName, FTyp, FStr); + if Result = null then Result := FStr; + end; +end; + +procedure TfsStringVariable.SetValue(const Value: Variant); +begin + FStr := Value; +end; + + +{ TfsParamItem } + +constructor TfsParamItem.Create(const AName: String; ATyp: TfsVarType; + const ATypeName: String; AIsOptional, AIsVarParam: Boolean); +begin + inherited Create(AName, ATyp, ATypeName); + FIsOptional := AIsOptional; + FIsVarParam := AIsVarParam; + FDefValue := Null; +end; + + +{ TfsProcVariable } + +constructor TfsProcVariable.Create(const AName: String; ATyp: TfsVarType; + const ATypeName: String; AParent: TfsScript; AIsFunc: Boolean = True); +begin + inherited Create(AName, ATyp, ATypeName); + FIsReadOnly := True; + FVarsStack := TList.Create; + FIsFunc := AIsFunc; + FProgram := TfsScript.Create(nil); + FProgram.Parent := AParent; + if FProgram.Parent <> nil then + FProgram.UseClassLateBinding := FProgram.Parent.UseClassLateBinding; + if FIsFunc then + begin + FRefItem := TfsVariable.Create('Result', ATyp, ATypeName); + FProgram.Add('Result', FRefItem); + end; +end; + + + +destructor TfsProcVariable.Destroy; +var + i: Integer; +begin + { avoid destroying the param objects twice } + for i := 0 to Count - 1 do + FProgram.FItems.Delete(FProgram.FItems.IndexOfObject(Params[i])); + + FProgram.Free; + FVarsStack.Free; + inherited; +end; + +function TfsProcVariable.GetValue: Variant; +var + Temp: Boolean; + ParentProg, SaveProg: TfsScript; + i: Integer; +begin + Temp := FExecuting; + FExecuting := True; + if FIsFunc then + FRefItem.Value := Unassigned; + + ParentProg := FProgram; + SaveProg := nil; + while ParentProg <> nil do + if ParentProg.FMainProg then + begin + SaveProg := ParentProg.FProgRunning; + ParentProg.FProgRunning := FProgram; + break; + end + else + ParentProg := ParentProg.FParent; + + try +// avoid trial message +// same as FProgram.Execute + with FProgram do + begin + FExitCalled := False; + FTerminated := False; + FIsRunning := True; + FProgName := Self.FName; + try + FStatement.Execute; + finally + FExitCalled := False; + FTerminated := False; + FIsRunning := False; + FProgName := ''; + end; + end; +// + + if FIsFunc then + Result := FRefItem.Value else + Result := Null; + finally + if ParentProg <> nil then + ParentProg.FProgRunning := SaveProg; + FExecuting := Temp; + if (ParentProg <> nil) and ParentProg.FClearLocalVars then + for i := 0 to Prog.Count - 1 do + if (Prog.Items[i] is TfsVariable) and + (CompareText('Result', Prog.Items[i].Name) <> 0) +{$IFDEF DELPHI6} + and not VarIsClear(Prog.Items[i].Value) +{$ENDIF} + then + case TfsVariable(Prog.Items[i]).Typ of + fvtString: + TfsVariable(Prog.Items[i]).Value := ''; + fvtInt, fvtFloat, fvtChar: + TfsVariable(Prog.Items[i]).Value := 0; + fvtVariant: + TfsVariable(Prog.Items[i]).Value := Null; + end; + end; +end; + +function TfsProcVariable.SaveLocalVariables: Integer; +var + i: Integer; + LocalVars: TList; + StackItem: TfsLocalVariablesHelper; +begin + LocalVars := TList.Create; + FVarsStack.Add(LocalVars); + Result := FVarsStack.Count - 1; + for i := 0 to Prog.Count - 1 do + if (Prog.Items[i] is TfsVariable) or (Prog.Items[i] is TfsParamItem) then + begin + StackItem := TfsLocalVariablesHelper.Create; + StackItem.FValue := Prog.Items[i].Value; + StackItem.FVariableLink := Prog.Items[i]; + LocalVars.Add(StackItem); + end; +end; + +procedure TfsProcVariable.RestoreLocalVariables(StackIndex: Integer; bSkipVarParams: Boolean; dItem: TfsDesignatorItem); +var + i: Integer; + LocalVars: TList; + StackItem: TfsLocalVariablesHelper; + bIsVar: Boolean; + Temp1: array of Variant; +begin + if (FVarsStack.Count < StackIndex) or (StackIndex < 0) then Exit; + LocalVars := TList(FVarsStack[StackIndex]); + SetLength(Temp1, Count); + try + { save var parameters value, need when pass same variable as VAR parameter } + if Assigned(dItem) then + for i := 0 to Count - 1 do + if Params[i].IsVarParam then + Temp1[i] := Params[i].Value; + for i := 0 to LocalVars.Count - 1 do + begin + StackItem := TfsLocalVariablesHelper(LocalVars[i]); + bIsVar := TfsParamItem(StackItem.FVariableLink).FIsVarParam; + if not (bSkipVarParams and (StackItem.FVariableLink is TfsParamItem) and bIsVar) then + StackItem.FVariableLink.Value := StackItem.FValue; + StackItem.Free; + end; + if Assigned(dItem) then + for i := 0 to Count - 1 do + if Params[i].IsVarParam then + dItem[i].Value := Temp1[i]; + finally + Temp1 := nil; + LocalVars.Free; + FVarsStack.Delete(StackIndex); + end; +end; + + +{ TfsPropertyHelper } + +function TfsPropertyHelper.GetValue: Variant; +var + p: PPropInfo; + Instance: TObject; +begin + + Result := Null; + Instance := TObject(frxInteger(ParentValue)); + + if FIsPublished and Assigned(Instance) then + begin + p := GetPropInfo(Instance.ClassInfo, Name); + if p <> nil then + case p.PropType^.Kind of + tkInteger, tkSet, tkEnumeration, tkClass + {$IFDEF FPC} ,tkBool {$ENDIF}: + Result := GetOrdProp(Instance, p); +{$IFDEF FS_INT64} + tkInt64: + Result := GetInt64Prop(Instance, p); +{$ENDIF} + tkFloat: + Result := GetFloatProp(Instance, p); + +// tkString, tkLString, tkWString{$IFDEF Delphi12}, tkUString{$ENDIF}: +// Result := GetStrProp(Instance, p); + + tkChar, tkWChar: + Result := Chr(GetOrdProp(Instance, p)); + + tkVariant: + Result := GetVariantProp(Instance, p); +{$IFDEF Delphi12} + tkString, tkLString: + Result := GetAnsiStrProp(Instance, p); + tkWString, tkUString: + Result := GetUnicodeStrProp(Instance, p); +{$ELSE} + tkString, tkLString, tkWString{$ifdef FPC}, tkAString{$endif}: + Result := GetStrProp(Instance, p); +{$ENDIF} + end; + end + else if Assigned(FOnGetValue) then + Result := FOnGetValue(Instance, FClassRef, FUppercaseName) + else if Assigned(FOnGetValueNew) then + Result := FOnGetValueNew(Instance, FClassRef, FUppercaseName, Self); + + if Typ = fvtBool then + if Result = 0 then + Result := False else + Result := True; + +end; + +procedure TfsPropertyHelper.SetValue(const Value: Variant); +var + p: PPropInfo; + Instance: TObject; + IntVal: frxInteger; + Int64Val: Int64; +begin + + if IsReadOnly then Exit; + Instance := TObject(frxInteger(ParentValue)); + + + + if FIsPublished then + begin + p := GetPropInfo(Instance.ClassInfo, Name); + if p <> nil then + case p.PropType^.Kind of + tkInteger, tkSet, tkEnumeration, tkClass + {$IFDEF FPC} ,tkBool {$ENDIF}: +// {$IFDEF Delphi12}, tkInt64{$ENDIF}: + begin +{$IFNDEF Delphi4} + if VarType(Value) <> varInteger then + begin + SetSetProp(Instance, p, fsSetToString(p, Value)); + end + else +{$ENDIF} + begin + if Typ = fvtBool then + if Value = True then + IntVal := 1 else + IntVal := 0 + else +{$IFNDEF CPUX64} +{$IFDEF Delphi12} + if (VarType(Value) = varInt64) + or (VarType(Value) = varUInt64) then + begin + Int64Val := Value; + IntVal := Cardinal(Int64Rec(Int64Val).Lo); + end + else +{$ENDIF} +{$ENDIF} + IntVal := frxInteger(Value); + SetOrdProp(Instance, p, IntVal); + end; + end; +{$IFNDEF DELPHI16} +{$IFDEF FS_INT64} + tkInt64: + SetInt64Prop(Instance, p, Value); +{$ENDIF} +{$ELSE} + tkInt64: + SetInt64Prop(Instance, p, Int64(Value)); +{$ENDIF} + tkFloat: + SetFloatProp(Instance, p, Extended(Value)); + +// tkString, tkLString: +// SetStrProp(Instance, p, String(Value)); + +// tkWString{$IFDEF Delphi12}, tkUString{$ENDIF}: +// SetStrProp(Instance, p, WideString(Value)); + + tkChar, tkWChar: + SetOrdProp(Instance, p, Ord(String(Value)[1])); + + tkVariant: + SetVariantProp(Instance, p, Value); + +{$IFDEF Delphi12} + tkString, tkLString: + SetAnsiStrProp(Instance, p, AnsiString(Value)); + tkWString, tkUString: + SetUnicodeStrProp(Instance, p, WideString(Value)); +{$ELSE} + tkString, tkLString, tkWString{$ifdef FPC}, tkAString{$endif}: + SetStrProp(Instance, p, String(Value)); +{$ENDIF} + end; + end + else if Assigned(FOnSetValue) then + FOnSetValue(Instance, FClassRef, FUppercaseName, Value) + else if Assigned(FOnSetValueNew) then + FOnSetValueNew(Instance, FClassRef, FUppercaseName, Value, Self); + +end; + + +{ TfsMethodHelper } + +constructor TfsMethodHelper.Create(const Syntax: String; Script: TfsScript); +var + i: Integer; + v: TfsCustomVariable; +begin + v := ParseMethodSyntax(Syntax, Script); + inherited Create(v.Name, v.Typ, v.TypeName); + FIsReadOnly := True; + FSyntax := Syntax; + IsMacro := v.IsMacro; + + { copying params } + for i := 0 to v.Count - 1 do + Add(v.Params[i]); + while v.Count > 0 do + v.FItems.Delete(0); + v.Free; + + // FPC and Delphi do this different way. FPC implementation more honest, so + // if Count = 0 then we get exception about bad bounds + if Count > 0 then + FVarArray := VarArrayCreate([0, Count - 1], varVariant); +end; + +destructor TfsMethodHelper.Destroy; +begin + FVarArray := Null; + inherited; +end; + +function TfsMethodHelper.GetVParam(Index: Integer): Variant; +begin + if Index = Count then + Result := FSetValue + else + Result := TfsParamItem(FItems[Index]).Value; +end; + +procedure TfsMethodHelper.SetVParam(Index: Integer; const Value: Variant); +begin + TfsParamItem(FItems[Index]).Value := Value; +end; + +function TfsMethodHelper.GetValue: Variant; +var + i: Integer; + Instance: TObject; +begin + if Assigned(FOnCall) then + begin + for i := 0 to Count - 1 do + FVarArray[i] := inherited Params[i].Value; + + Instance := nil; + if not VarIsNull(ParentValue) then + Instance := TObject(frxInteger(ParentValue)); + + if FIndexMethod then + Result := FOnCall(Instance, FClassRef, FUppercaseName + '.GET', FVarArray) + else + Result := FOnCall(Instance, FClassRef, FUppercaseName, FVarArray); + for i := 0 to Count - 1 do + begin + if inherited Params[i].IsVarParam then + inherited Params[i].Value := FVarArray[i]; + FVarArray[i] := Null; + end; + end + else if Assigned(FOnCallNew) then + begin + Instance := nil; + if not VarIsNull(ParentValue) then + Instance := TObject(frxInteger(ParentValue)); + + if FIndexMethod then + Result := FOnCallNew(Instance, FClassRef, FUppercaseName + '.GET', Self) + else + Result := FOnCallNew(Instance, FClassRef, FUppercaseName, Self); + end + else + Result := 0; +end; + +procedure TfsMethodHelper.SetValue(const Value: Variant); +var + v: Variant; + i: Integer; +begin + if FIndexMethod then + if Assigned(FOnCall) then + begin + v := VarArrayCreate([0, Count], varVariant); + for i := 0 to Count - 1 do + v[i] := inherited Params[i].Value; + v[Count] := Value; + + FOnCall(TObject(frxInteger(ParentValue)), FClassRef, FUppercaseName + '.SET', v); + v := Null; + end + else if Assigned(FOnCallNew) then + begin + FSetValue := Value; + FOnCallNew(TObject(frxInteger(ParentValue)), FClassRef, FUppercaseName + '.SET', Self); + FSetValue := Null; + end; +end; + + +{ TfsComponentHelper } + +constructor TfsComponentHelper.Create(const Name: String; const ClassName: String); +begin + inherited Create(Name, fvtClass, ClassName); +end; + +function TfsComponentHelper.GetValue: Variant; +var + c: TObject; +begin + c := TObject(frxInteger(ParentValue)); + if c is TComponent then + c := TComponent(c).FindComponent(Name) + else + c := nil; + if Assigned(c) then + Result := frxInteger(c) + else + raise Exception.Create(Format(SComponentError, [Name])); +end; + +procedure TfsComponentHelper.SetValue(const Value: Variant); +begin + raise Exception.Create(Format(SComponentAssignError, [Name])); +end; + +{ TfsEventHelper } + +constructor TfsEventHelper.Create(const Name: String; AEvent: TfsEventClass); +begin + inherited Create(Name, fvtString, ''); + FEvent := AEvent; +end; + +function TfsEventHelper.GetValue: Variant; +begin + Result := ''; +end; + +procedure TfsEventHelper.SetValue(const Value: Variant); +var + Instance: TPersistent; + v: TfsCustomVariable; + e: TfsCustomEvent; + p: PPropInfo; + m: TMethod; +begin + + Instance := TPersistent(frxInteger(ParentValue)); + if VarToStr(Value) = '0' then + begin + m.Code := nil; + m.Data := nil; + end + else + begin + v := FProgram.Find(Value); + if (v = nil) or not (v is TfsProcVariable) then + raise Exception.Create(SEventError); + + e := TfsCustomEvent(FEvent.NewInstance); + e.Create(Instance, TfsProcVariable(v)); + FProgram.Add('', e); + m.Code := e.GetMethod; + m.Data := e; + end; + + p := GetPropInfo(Instance.ClassInfo, Name); + SetMethodProp(Instance, p, m); +end; + + +{ TfsClassVariable } + +constructor TfsClassVariable.Create(AClass: TClass; const Ancestor: String); +begin + inherited Create(AClass.ClassName, fvtClass, AClass.ClassName); + FMembers := TfsItemList.Create; + FAncestor := Ancestor; + FClassRef := AClass; + + AddPublishedProperties(AClass); + Add(TfsParamItem.Create('', fvtVariant, '', True, False)); +end; + +destructor TfsClassVariable.Destroy; +begin + FMembers.Free; + inherited; +end; + +function TfsClassVariable.GetMembers(Index: Integer): TfsCustomHelper; +begin + Result := FMembers.FItems[Index]; +end; + +function TfsClassVariable.GetMembersCount: Integer; +begin + Result := FMembers.Count; +end; + +procedure TfsClassVariable.AddConstructor(Syntax: String; CallEvent: TfsCallMethodEvent); +var + i: Integer; +begin + i := Pos(' ', Syntax); + Delete(Syntax, 1, i - 1); + Syntax := 'function' + Syntax + ': ' + 'Constructor'; + AddMethod(Syntax, CallEvent); +end; + +procedure TfsClassVariable.AddConstructor(Syntax: String; + CallEvent: TfsCallMethodNewEvent); +var + i: Integer; +begin + i := Pos(' ', Syntax); + Delete(Syntax, 1, i - 1); + Syntax := 'function' + Syntax + ': ' + 'Constructor'; + AddMethod(Syntax, CallEvent); +end; + +procedure TfsClassVariable.AddMethod(const Syntax: String; CallEvent: TfsCallMethodEvent); +var + m: TfsMethodHelper; +begin + m := TfsMethodHelper.Create(Syntax, FProgram); + m.FOnCall := CallEvent; + m.FClassRef := FClassRef; + FMembers.Add(m); +end; + +procedure TfsClassVariable.AddMethod(const Syntax: String; CallEvent: TfsCallMethodNewEvent); +var + m: TfsMethodHelper; +begin + m := TfsMethodHelper.Create(Syntax, FProgram); + m.FOnCallNew := CallEvent; + m.FClassRef := FClassRef; + FMembers.Add(m); +end; + +procedure TfsClassVariable.AddEvent(const Name: String; AEvent: TfsEventClass); +var + e: TfsEventHelper; +begin + e := TfsEventHelper.Create(Name, AEvent); + e.FClassRef := FClassRef; + FMembers.Add(e); +end; + +procedure TfsClassVariable.AddProperty(const Name, Typ: String; + GetEvent: TfsGetValueEvent; SetEvent: TfsSetValueEvent); +var + p: TfsPropertyHelper; +begin + p := TfsPropertyHelper.Create(Name, StrToVarType(Typ, FProgram), Typ); + p.FClassRef := FClassRef; + p.FOnGetValue := GetEvent; + p.FOnSetValue := SetEvent; + p.IsReadOnly := not Assigned(SetEvent); + FMembers.Add(p); +end; + +procedure TfsClassVariable.AddPropertyEx(const Name, Typ: String; + GetEvent: TfsGetValueNewEvent; SetEvent: TfsSetValueNewEvent); +var + p: TfsPropertyHelper; +begin + p := TfsPropertyHelper.Create(Name, StrToVarType(Typ, FProgram), Typ); + p.FClassRef := FClassRef; + p.FOnGetValueNew := GetEvent; + p.FOnSetValueNew := SetEvent; + p.IsReadOnly := not Assigned(SetEvent); + FMembers.Add(p); +end; + +procedure TfsClassVariable.AddDefaultProperty(const Name, Params, Typ: String; + CallEvent: TfsCallMethodEvent; AReadOnly: Boolean = False); +begin + AddIndexProperty(Name, Params, Typ, CallEvent, AReadOnly); + FDefProperty := Members[FMembers.Count - 1]; +end; + +procedure TfsClassVariable.AddDefaultProperty(const Name, Params, + Typ: String; CallEvent: TfsCallMethodNewEvent; AReadOnly: Boolean); +begin + AddIndexProperty(Name, Params, Typ, CallEvent, AReadOnly); + FDefProperty := Members[FMembers.Count - 1]; +end; + +procedure TfsClassVariable.AddIndexProperty(const Name, Params, + Typ: String; CallEvent: TfsCallMethodEvent; AReadOnly: Boolean = False); +var + i: Integer; + sl: TStringList; + s: String; +begin + sl := TStringList.Create; + sl.CommaText := Params; + + s := ''; + for i := 0 to sl.Count - 1 do + s := s + 'p' + IntToStr(i) + ': ' + sl[i] + '; '; + + SetLength(s, Length(s) - 2); + try + AddMethod('function ' + Name + '(' + s + '): ' + Typ, CallEvent); + with TfsMethodHelper(Members[FMembers.Count - 1]) do + begin + IsReadOnly := AReadOnly; + FIndexMethod := True; + end; + finally + sl.Free; + end; +end; + +procedure TfsClassVariable.AddIndexProperty(const Name, Params, + Typ: String; CallEvent: TfsCallMethodNewEvent; AReadOnly: Boolean); +var + i: Integer; + sl: TStringList; + s: String; +begin + sl := TStringList.Create; + sl.CommaText := Params; + + s := ''; + for i := 0 to sl.Count - 1 do + s := s + 'p' + IntToStr(i) + ': ' + sl[i] + '; '; + + SetLength(s, Length(s) - 2); + try + AddMethod('function ' + Name + '(' + s + '): ' + Typ, CallEvent); + with TfsMethodHelper(Members[FMembers.Count - 1]) do + begin + IsReadOnly := AReadOnly; + FIndexMethod := True; + end; + finally + sl.Free; + end; +end; + +function TfsClassVariable.AddComponent(c: TComponent): TfsComponentHelper; +var + Helper: TfsCustomHelper; +begin + { check if member alreeady exist } + Helper := Find(c.Name); + Result := nil; + { member has different purpose, name conflict } + if Helper is TfsComponentHelper then + Result := TfsComponentHelper(Helper); + if Assigned(Helper) then Exit; + Result := TfsComponentHelper.Create(c.Name, c.ClassName); + FMembers.Add(Result); +end; + +procedure TfsClassVariable.AddPublishedProperties(AClass: TClass); +var + TypeInfo: PTypeInfo; + PropCount: Integer; + PropList: PPropList; + i: Integer; + cl: String; + t: TfsVarType; + FClass: TClass; + p: TfsPropertyHelper; +begin + TypeInfo := AClass.ClassInfo; + if TypeInfo = nil then Exit; + + PropCount := GetPropList(TypeInfo, tkProperties, nil); + GetMem(PropList, PropCount * SizeOf(PPropInfo)); + GetPropList(TypeInfo, tkProperties, PropList); + + try + for i := 0 to PropCount - 1 do + begin + t := fvtInt; + cl := ''; + + case PropList[i].PropType^.Kind of + tkInteger: + t := fvtInt; +{$IFDEF FS_INT64} + tkInt64: + t := fvtInt64; +{$ENDIF} + tkSet: + begin + t := fvtEnum; + cl := String(PropList[i].PropType^.Name); + end; + tkEnumeration: + begin + t := fvtEnum; + cl := String(PropList[i].PropType^.Name); + if (CompareText(cl, 'Boolean') = 0) or (CompareText(cl, 'bool') = 0) then + t := fvtBool; + end; +{$ifdef FPC} + tkBool: + t := fvtBool; +{$ENDIF} + tkFloat: + t := fvtFloat; + tkChar, tkWChar: + t := fvtChar; + tkString, tkLString, tkWString{$IFDEF Delphi12}, tkUString{$ENDIF}{$ifdef FPC},tkAString{$endif}: + t := fvtString; + tkVariant: + t := fvtVariant; + tkClass: + begin + t := fvtClass; + {$IFNDEF FPC} + FClass := GetTypeData(PropList[i].PropType^).ClassType; + {$ELSE} + FClass := GetTypeData(PropList[i].PropType).ClassType; + {$ENDIF} + cl := FClass.ClassName; + end; + end; + + p := TfsPropertyHelper.Create(String(PropList[i].Name), t, cl); + p.FClassRef := FClassRef; + p.FIsPublished := True; + FMembers.Add(p); + end; + + finally + FreeMem(PropList, PropCount * SizeOf(PPropInfo)); + end; +end; + +function TfsClassVariable.Find(const Name: String; IncludeComponentHelper: Boolean = True): TfsCustomHelper; +var + cl: TfsClassVariable; + + function DoFind(const Name: String): TfsCustomHelper; + var + i: Integer; + begin + Result := nil; + for i := 0 to FMembers.Count - 1 do + if CompareText(Name, Members[i].Name) = 0 then + begin + Result := Members[i]; + Exit; + end; + end; + +begin + Result := DoFind(Name); + if Result = nil then + begin + cl := FProgram.FindClass(FAncestor); + if cl <> nil then + Result := cl.Find(Name); + end; + if not IncludeComponentHelper and (Result is TfsComponentHelper) then + Result := nil; +end; + +function TfsClassVariable.GetValue: Variant; +begin + if Params[0].Value = Null then + Result := frxInteger(FClassRef.NewInstance) else { constructor call } + Result := Params[0].Value; { typecast } + Params[0].Value := Null; +end; + + +{ TfsDesignatorItem } + +function TfsDesignatorItem.GetItem(Index: Integer): TfsCustomExpression; +begin + Result := FItems[Index]; +end; + + +{ TfsDesignator } + +constructor TfsDesignator.Create(AProgram: TfsScript); +var + ParentProg: TfsScript; +begin +{$IFDEF CPUX64} + inherited Create('', fvtInt64, ''); +{$ELSE} + inherited Create('', fvtInt, ''); +{$ENDIF} + FProgram := AProgram; + FMainProg := FProgram; + ParentProg := FProgram; + while ParentProg <> nil do + if ParentProg.FMainProg then + begin + FMainProg := ParentProg; + break; + end + else + ParentProg := ParentProg.FParent; + FProgram.UseClassLateBinding := FMainProg.UseClassLateBinding; +end; + +destructor TfsDesignator.Destroy; +begin + if FLateBindingXMLSource <> nil then + FLateBindingXMLSource.Free; + inherited; +end; + +procedure TfsDesignator.Borrow(ADesignator: TfsDesignator); +var + SaveItems: TList; +begin + SaveItems := FItems; + FItems := ADesignator.FItems; + ADesignator.FItems := SaveItems; + FKind := ADesignator.FKind; + FRef1 := ADesignator.FRef1; + FRef2 := ADesignator.FRef2; + FTyp := ADesignator.Typ; + FTypeName := ADesignator.TypeName; + FIsReadOnly := ADesignator.IsReadOnly; + RefItem := ADesignator.RefItem; +end; + +procedure TfsDesignator.Finalize; +var + Item: TfsDesignatorItem; +begin + Item := Items[Count - 1]; + FTyp := Item.Ref.Typ; + FTypeName := Item.Ref.TypeName; + if FTyp = fvtConstructor then + begin + FTyp := fvtClass; + FTypeName := Items[Count - 2].Ref.TypeName; + end; + + FIsReadOnly := Item.Ref.IsReadOnly; + + { speed optimization for access to single variable, string element or array } + if (Count = 1) and (Items[0].Ref is TfsVariable) then + begin + RefItem := Items[0].Ref; + FKind := dkVariable; + end + else if (Count = 2) and (Items[0].Ref is TfsStringVariable) then + begin + RefItem := Items[0].Ref; + FRef1 := Items[1][0]; + FKind := dkStringArray; + end + else if (Count = 2) and (Items[0].Ref is TfsVariable) and (Items[0].Ref.Typ = fvtArray) then + begin + RefItem := Items[0].Ref; + FRef1 := RefItem.RefItem; + FRef2 := Items[1]; + FKind := dkArray; + end + else + FKind := dkOther; +end; + +function TfsDesignator.GetItem(Index: Integer): TfsDesignatorItem; +begin + Result := FItems[Index]; +end; + +function TfsDesignator.DoCalc(const AValue: Variant; Flag: Boolean): Variant; +var + i, j: Integer; + Item: TfsCustomVariable; + Val: Variant; + Ref: TfsCustomVariable; + Temp1: array of Variant; + StackIndex: Integer; +begin + Ref := nil; + Val := Null; + StackIndex := -1; + for i := 0 to Count - 1 do + begin + Item := Items[i].Ref; + + if Item is TfsDesignator then { it is true for "WITH" statements } + begin + Ref := Item; + Val := Item.Value; + continue; + end; + + try + { we're trying to call the local procedure that is already executing - + i.e. we have a recursion } + if (Item is TfsProcVariable) and TfsProcVariable(Item).Executing then + StackIndex := TfsProcVariable(Item).SaveLocalVariables; + + if Item.Count > 0 then + begin + SetLength(Temp1, Item.Count); + try + { calculate params and copy param values to the temp1 array } + for j := 0 to Item.Count - 1 do + if Item.IsMacro then + Temp1[j] := TfsExpression(Items[i][j]).Source + else + Temp1[j] := Items[i][j].Value; + { copy calculated values to the item params } + for j := 0 to Item.Count - 1 do + Item.Params[j].Value := Temp1[j]; + finally + Temp1 := nil; + end; + end; + + { copy value and var reference to the helper object } + if Item is TfsCustomHelper then + begin + TfsCustomHelper(Item).ParentRef := Ref; + TfsCustomHelper(Item).ParentValue := Val; + TfsCustomHelper(Item).Prog := FProgram; + end; + + Ref := Item; + { assign a value to the last designator node if called from SetValue } + if Flag and (i = Count - 1) then + begin + Item.Value := AValue + end + else + begin + Item.NeedResult := (i <> Count - 1) or NeedResult; + Val := Item.Value; + end; + + { copy back var params } + for j := 0 to Item.Count - 1 do + if Item.Params[j].IsVarParam then + Items[i][j].Value := Item.Params[j].Value; + + finally + { restore proc variables if it was called from itself } + if (Item is TfsProcVariable) and TfsProcVariable(Item).Executing then + TfsProcVariable(Item).RestoreLocalVariables(StackIndex, False, Items[i]); + end; + end; + + Result := Val; +end; + +procedure TfsDesignator.CheckLateBinding; +var + NewDesignator: TfsDesignator; + Parser: TfsILParser; +begin + if FLateBindingXMLSource <> nil then + begin + Parser := TfsILParser.Create(FProgram); + try + NewDesignator := Parser.DoDesignator(FLateBindingXMLSource, FProgram); + Borrow(NewDesignator); + NewDesignator.Free; + finally + Parser.Free; + FLateBindingXMLSource.Free; + FLateBindingXMLSource := nil; + end; + end; +end; + +function TfsDesignator.GetValue: Variant; +begin + CheckLateBinding; + Result := DoCalc(Null, False); +end; + +procedure TfsDesignator.SetValue(const Value: Variant); +begin + CheckLateBinding; + DoCalc(Value, True); +end; + + +{ TfsVariableDesignator } + +function TfsVariableDesignator.GetValue: Variant; +begin + Result := RefItem.Value; +end; + +procedure TfsVariableDesignator.SetValue(const Value: Variant); +begin + RefItem.Value := Value; +end; + + +{ TfsStringDesignator } + +function TfsStringDesignator.GetValue: Variant; +begin + Result := TfsStringVariable(RefItem).FStr[Integer(FRef1.Value)]; +end; + +procedure TfsStringDesignator.SetValue(const Value: Variant); +begin + TfsStringVariable(RefItem).FStr[Integer(FRef1.Value)] := VarToStr(Value)[1]; +end; + + +{ TfsArrayDesignator } + +function TfsArrayDesignator.GetValue: Variant; +var + i: Integer; +begin + TfsCustomHelper(FRef1).ParentRef := RefItem; + for i := 0 to FRef2.Count - 1 do + FRef1.Params[i].Value := FRef2[i].Value; + Result := FRef1.Value; +end; + +procedure TfsArrayDesignator.SetValue(const Value: Variant); +var + i: Integer; +begin + TfsCustomHelper(FRef1).ParentRef := RefItem; + for i := 0 to FRef2.Count - 1 do + FRef1.Params[i].Value := FRef2[i].Value; + FRef1.Value := Value; +end; + + +{ TfsSetExpression } + +function TfsSetExpression.Check(const Value: Variant): Boolean; +var + i: Integer; + Expr: TfsCustomExpression; +begin + Result := False; + + (* TfsSetExpression encapsulates the set like [1,2,3..10] + In the example above we'll have the following Items: + TfsExpression {1} + TfsExpression {2} + TfsExpression {3} + nil (indicates the range ) + TfsExpression {10} *) + + i := 0; + while i < Count do + begin + Expr := Items[i]; + + if (i < Count - 1) and (Items[i + 1] = nil) then { subrange } + begin + Result := (Value >= Expr.Value) and (Value <= Items[i + 2].Value); + Inc(i, 2); + end + else + Result := Value = Expr.Value; + + if Result then break; + Inc(i); + end; +end; + +function TfsSetExpression.GetItem(Index: Integer): TfsCustomExpression; +begin + Result := FItems[Index]; +end; + +function TfsSetExpression.GetValue: Variant; +var + i: Integer; +begin + Result := VarArrayCreate([0, Count - 1], varVariant); + + for i := 0 to Count - 1 do + if Items[i] = nil then + Result[i] := Null else + Result[i] := Items[i].Value; +end; + + +{ TfsScript } + +constructor TfsScript.Create(AOwner: TComponent); +begin + inherited; + FEvaluteRiseError := False; + FItems := TStringList.Create; + FItems.Sorted := True; + FItems.Duplicates := dupAccept; + FLines := TStringList.Create; + FMacros := TStringList.Create; + FIncludePath := TStringList.Create; + FIncludePath.Add(''); + FStatement := TfsStatement.Create(Self, '', ''); + FSyntaxType := 'PascalScript'; + FUnitLines := TStringList.Create; + FUseClassLateBinding := False; +end; + +destructor TfsScript.Destroy; +begin + inherited; + Clear; + ClearRTTI; + FItems.Free; + FLines.Free; + FMacros.Free; + FIncludePath.Free; + FStatement.Free; + FUnitLines.Free; +end; + +procedure TfsScript.Add(const Name: String; Item: TObject); +begin + FItems.AddObject(Name, Item); + if Item is TfsCustomVariable then + TfsCustomVariable(Item).AddedBy := FAddedBy; +end; + +function TfsScript.Count: Integer; +begin + Result := FItems.Count; +end; + +procedure TfsScript.Remove(Item: TObject); +begin + FItems.Delete(FItems.IndexOfObject(Item)); +end; + +procedure TfsScript.Clear; +var + i: Integer; + item: TObject; +begin + i := 0; + while i < FItems.Count do + begin + item := FItems.Objects[i]; + if (item is TfsRTTIModule) or + ((item is TfsCustomVariable) and + (TfsCustomVariable(item).AddedBy = TObject(1))) then + Inc(i) + else + begin + item.Free; + FItems.Delete(i); + end; + end; + FStatement.Clear; + + + for i := 0 to FUnitLines.Count - 1 do + FUnitLines.Objects[i].Free; + + FUnitLines.Clear; + + FErrorPos := ''; + FErrorMsg := ''; + FErrorUnit := ''; +end; + +procedure TfsScript.ClearItems(Owner: TObject); +var + i: Integer; +begin + RemoveItems(Owner); + FStatement.Clear; + + for i := 0 to FUnitLines.Count - 1 do + FUnitLines.Objects[i].Free; + + FUnitLines.Clear; +end; + +procedure TfsScript.RemoveItems(Owner: TObject); +var + i: Integer; +begin + for i := Count - 1 downto 0 do + if FItems.Objects[i] is TfsCustomVariable then + if Items[i].AddedBy = Owner then + begin + Items[i].Free; + Remove(Items[i]); + end; +end; + +function TfsScript.GetItem(Index: Integer): TfsCustomVariable; +begin + Result := TfsCustomVariable(FItems.Objects[Index]); +end; + +function TfsScript.GetProgName: String; +begin + if Assigned(ProgRunning) then + Result := ProgRunning.ProgName + else + Result := FProgName; +end; + +function TfsScript.Find(const Name: String): TfsCustomVariable; +begin + Result := FindLocal(Name); + + { trying to find the identifier in all parent programs } + if (Result = nil) and (FParent <> nil) then + Result := FParent.Find(Name); +end; + +function TfsScript.FindLocal(const Name: String): TfsCustomVariable; +var + i: Integer; +begin + Result := nil; + i := FItems.IndexOf(Name); + if (i <> -1) and (FItems.Objects[i] is TfsCustomVariable) then + Result := TfsCustomVariable(FItems.Objects[i]); +end; + +function TfsScript.Compile: Boolean; +var + p: TfsILParser; +begin + Result := False; + FErrorMsg := ''; + + p := TfsILParser.Create(Self); + try + p.SelectLanguage(FSyntaxType); + if p.MakeILScript(FLines.Text) then + p.ParseILScript; + finally + p.Free; + end; + + if FErrorMsg = '' then + begin + Result := True; + FErrorPos := ''; + end +end; + +procedure TfsScript.Execute; +begin + + FExitCalled := False; + FTerminated := False; + FIsRunning := True; + FMainProg := True; + try + FStatement.Execute; + finally + FExitCalled := False; + FTerminated := False; + FIsRunning := False; + end; +end; + +function TfsScript.Run: Boolean; +begin + Result := Compile; + if Result then + Execute; +end; + +function TfsScript.GetILCode(Stream: TStream): Boolean; +var + p: TfsILParser; +begin + Result := False; + FErrorMsg := ''; + + p := TfsILParser.Create(Self); + try + p.SelectLanguage(FSyntaxType); + if p.MakeILScript(FLines.Text) then + p.ILScript.SaveToStream(Stream); + finally + p.Free; + end; + + if FErrorMsg = '' then + begin + Result := True; + FErrorPos := ''; + end; +end; + +function TfsScript.SetILCode(Stream: TStream): Boolean; +var + p: TfsILParser; +begin + Result := False; + FErrorMsg := ''; + + p := TfsILParser.Create(Self); + try + p.SelectLanguage(FSyntaxType); + p.ILScript.LoadFromStream(Stream); + p.ParseILScript; + finally + p.Free; + end; + + if FErrorMsg = '' then + begin + Result := True; + FErrorPos := ''; + end; +end; + +procedure TfsScript.AddType(const TypeName: String; ParentType: TfsVarType); +var + v: TfsTypeVariable; +begin + if Find(TypeName) <> nil then Exit; + v := TfsTypeVariable.Create(TypeName, ParentType, ''); + Add(TypeName, v); +end; + +function TfsScript.AddClass(AClass: TClass; const Ancestor: String): TfsClassVariable; +var + cl: TfsClassVariable; +begin + Result := nil; + if Find(AClass.ClassName) <> nil then Exit; + + Result := TfsClassVariable.Create(AClass, Ancestor); + Result.FProgram := Self; + Add(Result.Name, Result); + + cl := TfsClassVariable(Find(Ancestor)); + if cl <> nil then + Result.FDefProperty := cl.DefProperty; +end; + +procedure TfsScript.AddConst(const Name, Typ: String; const Value: Variant); +var + v: TfsVariable; +begin + if Find(Name) <> nil then Exit; + + v := TfsVariable.Create(Name, StrToVarType(Typ, Self), Typ); + v.Value := Value; + v.IsReadOnly := True; + Add(v.Name, v); +end; + +procedure TfsScript.AddEnum(const Typ, Names: String); +var + i: Integer; + v: TfsVariable; + sl: TStringList; +begin + v := TfsVariable.Create(Typ, fvtEnum, Typ); + Add(v.Name, v); + + sl := TStringList.Create; + sl.CommaText := Names; + + try + for i := 0 to sl.Count - 1 do + begin + v := TfsVariable.Create(Trim(sl[i]), fvtEnum, Typ); + v.Value := i; + v.IsReadOnly := True; + Add(v.Name, v); + end; + finally + sl.Free; + end; +end; + +procedure TfsScript.AddEnumSet(const Typ, Names: String); +var + i, j: Integer; + v: TfsVariable; + sl: TStringList; +begin + v := TfsVariable.Create(Typ, fvtEnum, Typ); + Add(v.Name, v); + + sl := TStringList.Create; + sl.CommaText := Names; + + try + j := 1; + for i := 0 to sl.Count - 1 do + begin + v := TfsVariable.Create(Trim(sl[i]), fvtEnum, Typ); + v.Value := j; + v.IsReadOnly := True; + Add(v.Name, v); + j := j * 2; + end; + finally + sl.Free; + end; +end; + +procedure TfsScript.AddMethod(const Syntax: String; CallEvent: TfsCallMethodEvent; + const Category: String = ''; const Description: String = ''); +var + v: TfsMethodHelper; +begin + v := TfsMethodHelper.Create(Syntax, Self); + v.FOnCall := CallEvent; + if Description = '' then + v.FDescription := v.Name else + v.FDescription := Description; + v.FCategory := Category; + Add(v.Name, v); +end; + +procedure TfsScript.AddMethod(const Syntax: String; CallEvent: TfsCallMethodNewEvent; + const Category: String = ''; const Description: String = ''); +var + v: TfsMethodHelper; +begin + v := TfsMethodHelper.Create(Syntax, Self); + v.FOnCallNew := CallEvent; + if Description = '' then + v.FDescription := v.Name else + v.FDescription := Description; + v.FCategory := Category; + Add(v.Name, v); +end; + +procedure TfsScript.AddObject(const Name: String; Obj: TObject); +begin + AddVariable(Name, Obj.ClassName, frxInteger(Obj)); +end; + +procedure TfsScript.AddVariable(const Name, Typ: String; const Value: Variant); +var + v: TfsVariable; +begin + if Find(Name) <> nil then Exit; + + v := TfsVariable.Create(Name, StrToVarType(Typ, Self), Typ); + v.Value := Value; + v.OnGetVarValue := FOnGetVarValue; + Add(v.Name, v); +end; + +procedure TfsScript.AddForm(Form: TComponent); +begin + AddComponent(Form); +end; + +procedure TfsScript.AddComponent(Form: TComponent); +{$IFNDEF NOFORMS} +var + i: Integer; + v: TfsClassVariable; +{$ENDIF} +begin +{$IFNDEF NOFORMS} + v := FindClass(Form.ClassName); + if v = nil then + begin + if Form.InheritsFrom(TForm) then + AddClass(Form.ClassType, 'TForm') + else if Form.InheritsFrom(TDataModule) then + AddClass(Form.ClassType, 'TDataModule') +{$IFNDEF FMX} +{$IFDEF Delphi5} + else if Form.InheritsFrom(TFrame) then + AddClass(Form.ClassType, 'TFrame') +{$ENDIF} +{$ENDIF} + else + Exit; + v := FindClass(Form.ClassName); + end; + + for i := 0 to Form.ComponentCount - 1 do + v.AddComponent(Form.Components[i]); + AddObject(Form.Name, Form); +{$ENDIF} +end; + +procedure TfsScript.AddRTTI; +var + i: Integer; + rtti: TfsRTTIModule; + obj: TClass; +begin + if FRTTIAdded then Exit; + + AddedBy := TObject(1); // do not clear + for i := 0 to FRTTIModules.Count - 1 do + begin + obj := TClass(FRTTIModules[i]); + rtti := TfsRTTIModule(obj.NewInstance); + rtti.Create(Self); + Add('', rtti); + end; + AddedBy := nil; + + FRTTIAdded := True; +end; + +procedure TfsScript.ClearRTTI; +var + i: Integer; + item: TObject; +begin + if not FRTTIAdded then Exit; + + i := 0; + while i < FItems.Count do + begin + item := FItems.Objects[i]; + if (item is TfsRTTIModule) or + ((item is TfsCustomVariable) and + (TfsCustomVariable(item).AddedBy = TObject(1))) then + begin + item.Free; + FItems.Delete(i); + end + else + Inc(i); + end; + + FRTTIAdded := False; +end; + +function TfsScript.CallFunction(const Name: String; const Params: Variant; sGlobal: Boolean): Variant; +var + i, StackIndex: Integer; + v: TfsCustomVariable; + p: TfsProcVariable; +begin + if sGlobal then + v := Find(Name) + else + v := FindLocal(Name); + if (v <> nil) and (v is TfsProcVariable) then + begin + p := TfsProcVariable(v); + + StackIndex := -1; + if p.Executing then + StackIndex := p.SaveLocalVariables; + try + if VarIsArray(Params) then + for i := 0 to VarArrayHighBound(Params, 1) do + p.Params[i].Value := Params[i]; + Result := p.Value; + finally + p.RestoreLocalVariables(StackIndex, True); + end; + end + else + begin + Result := Null; + end +end; + +function TfsScript.CallFunction1(const Name: String; var Params: Variant; sGlobal: Boolean): Variant; +var + i, StackIndex: Integer; + v: TfsCustomVariable; + p: TfsProcVariable; +begin + if sGlobal then + v := Find(Name) + else + v := FindLocal(Name); + if (v <> nil) and (v is TfsProcVariable) then + begin + p := TfsProcVariable(v); + + StackIndex := -1; + if p.Executing then + StackIndex := p.SaveLocalVariables; + try + if VarIsArray(Params) then + for i := 0 to VarArrayHighBound(Params, 1) do + p.Params[i].Value := Params[i]; + Result := p.Value; + if VarIsArray(Params) then + for i := 0 to VarArrayHighBound(Params, 1) do + Params[i] := p.Params[i].Value; + finally + p.RestoreLocalVariables(StackIndex, True); + end; + end + else + Result := Null; +end; + +function TfsScript.CallFunction2(const Func: TfsProcVariable; const Params: Variant): Variant; +var + i, StackIndex: Integer; +begin + if (Func <> nil) then + begin + StackIndex := -1; + if Func.Executing then + StackIndex := Func.SaveLocalVariables; + try + if VarIsArray(Params) then + for i := 0 to VarArrayHighBound(Params, 1) do + Func.Params[i].Value := Params[i]; + Result := Func.Value; + finally + Func.RestoreLocalVariables(StackIndex, True); + end; + end + else + begin + Result := Null; + end +end; + +function TfsScript.Evaluate(const Expression: String): Variant; +var + p: TfsScript; + Prog: TfsScript; + SaveEvent: TfsRunLineEvent; +begin + FEvaluteRiseError := False; + Result := Null; + if FProgRunning = nil then + p := Self else + p := FProgRunning; + + Prog := TfsScript.Create(nil); + if not p.FRTTIAdded then + Prog.AddRTTI; + Prog.Parent := p; + Prog.OnGetVarValue := p.OnGetVarValue; + SaveEvent := FOnRunLine; + FOnRunLine := nil; + try + prog.SyntaxType := SyntaxType; + if CompareText(SyntaxType, 'PascalScript') = 0 then + Prog.Lines.Text := 'function fsEvaluateFUNC: Variant; begin Result := ' + Expression + ' end; begin end.' + else if CompareText(SyntaxType, 'C++Script') = 0 then + Prog.Lines.Text := 'Variant fsEvaluateFUNC() { return ' + Expression + '; } {}' + else if CompareText(SyntaxType, 'BasicScript') = 0 then + Prog.Lines.Text := 'function fsEvaluateFUNC' + #13#10 + 'return ' + Expression + #13#10 + 'end function' + else if CompareText(SyntaxType, 'JScript') = 0 then + Prog.Lines.Text := 'function fsEvaluateFUNC() { return (' + Expression + '); }'; + if not Prog.Compile then + begin + Result := Prog.ErrorMsg; + FEvaluteRiseError := True; + end + else + Result := Prog.FindLocal('fsEvaluateFUNC').Value; + finally + Prog.Free; + FOnRunLine := SaveEvent; + end; +end; + +function TfsScript.FindClass(const Name: String): TfsClassVariable; +var + Item: TfsCustomVariable; +begin + Item := Find(Name); + if (Item <> nil) and (Item is TfsClassVariable) then + Result := TfsClassVariable(Item) else + Result := nil +end; + +procedure TfsScript.RunLine(const UnitName, Index: String); +var + p: TfsScript; +begin + p := Self; + while p <> nil do + if Assigned(p.FOnRunLine) then + begin + p.FOnRunLine(Self, UnitName, Index); + break; + end + else + p := p.FParent; +end; + +function TfsScript.GetVariables(Index: String): Variant; +var + v: TfsCustomVariable; +begin + v := Find(Index); + if v <> nil then + Result := v.Value else + Result := Null; +end; + +procedure TfsScript.SetVariables(Index: String; const Value: Variant); +var + v: TfsCustomVariable; +begin + v := Find(Index); + if v <> nil then + v.Value := Value else + AddVariable(Index, 'Variant', Value); +end; + +procedure TfsScript.SetLines(const Value: TStrings); +begin + FLines.Assign(Value); +end; + +procedure TfsScript.SetProgName(const Value: String); +begin + if Assigned(FProgRunning) then + FProgRunning.FProgName := Value + else + FProgName := Value; +end; + +procedure TfsScript.Terminate; + + procedure TerminateAll(Script: TfsScript); + var + i: Integer; + begin + Script.FExitCalled := True; + Script.FTerminated := True; + for i := 0 to Script.Count - 1 do + if Script.Items[i] is TfsProcVariable then + TerminateAll(TfsProcVariable(Script.Items[i]).Prog); + end; + +begin + TerminateAll(Self); +end; + +procedure TfsScript.AddCodeLine(const UnitName, APos: String); +var + sl: TStringList; + LineN: String; + i : Integer; +begin + i := FUnitLines.IndexOf(UnitName); + + if (i = -1) then + begin + sl := TStringList.Create; + sl.Sorted := True; + FUnitLines.AddObject(UnitName, sl); + end else + begin + sl := TStringList(FUnitLines.Objects[i]); + end; + + LineN := Copy(APos, 1, Pos(':', APos) - 1); + if sl.IndexOf(LineN) = -1 then + begin + sl.Add(LineN); + end; +end; + +function TfsScript.IsExecutableLine(LineN: Integer; const UnitName: String = ''): Boolean; +var + sl: TStringList; + i: Integer; +begin + Result := False; + + i := FUnitLines.IndexOf(UnitName); + if (i = -1) then Exit; + + sl := TStringList(FUnitLines.Objects[i]); + if sl.IndexOf(IntToStr(LineN)) <> -1 then + Result := True; +end; + + + + +{ TfsStatement } + +constructor TfsStatement.Create(AProgram: TfsScript; const UnitName, + SourcePos: String); +begin + inherited Create; + FProgram := AProgram; + FSourcePos := SourcePos; + FUnitName := UnitName; +end; + +function TfsStatement.GetItem(Index: Integer): TfsStatement; +begin + Result := FItems[Index]; +end; + +procedure TfsStatement.Execute; +var + i: Integer; +begin + FProgram.ErrorPos := ''; + for i := 0 to Count - 1 do + begin + if FProgram.FTerminated then break; + try + FProgram.FLastSourcePos := Items[i].FSourcePos; + Items[i].Execute; + except + on E: Exception do + begin + if FProgram.ErrorPos = '' then + FProgram.ErrorPos := FProgram.FLastSourcePos; + raise; + end; + end; + if FProgram.FBreakCalled or FProgram.FContinueCalled or + FProgram.FExitCalled then break; + end; +end; + +procedure TfsStatement.RunLine; +begin + FProgram.RunLine(FUnitName, FSourcePos); +end; + + +{ TfsAssignmentStmt } + +destructor TfsAssignmentStmt.Destroy; +begin + FDesignator.Free; + FExpression.Free; + inherited; +end; + +procedure TfsAssignmentStmt.Optimize; +begin + FVar := FDesignator; + FExpr := FExpression; + + if FDesignator is TfsVariableDesignator then + FVar := FDesignator.RefItem; + if TfsExpression(FExpression).SingleItem <> nil then + FExpr := TfsExpression(FExpression).SingleItem; +end; + +procedure TfsAssignmentStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + FVar.Value := FExpr.Value; +end; + +procedure TfsAssignPlusStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + FVar.Value := FVar.Value + FExpr.Value; +end; + +procedure TfsAssignMinusStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + FVar.Value := FVar.Value - FExpr.Value; +end; + +procedure TfsAssignMulStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + FVar.Value := FVar.Value * FExpr.Value; +end; + +procedure TfsAssignDivStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + FVar.Value := FVar.Value / FExpr.Value; +end; + + +{ TfsCallStmt } + +destructor TfsCallStmt.Destroy; +begin + FDesignator.Free; + inherited; +end; + +procedure TfsCallStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + if FModificator = '' then + begin + FDesignator.NeedResult := False; + FDesignator.Value; + end + else if FModificator = '+' then + FDesignator.Value := FDesignator.Value + 1 + else if FModificator = '-' then + FDesignator.Value := FDesignator.Value - 1 +end; + + +{ TfsIfStmt } + +constructor TfsIfStmt.Create(AProgram: TfsScript; const UnitName, + SourcePos: String); +begin + inherited; + FElseStmt := TfsStatement.Create(FProgram, UnitName, SourcePos); +end; + +destructor TfsIfStmt.Destroy; +begin + FCondition.Free; + FElseStmt.Free; + inherited; +end; + +procedure TfsIfStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + if Boolean(FCondition.Value) = True then + inherited Execute else + FElseStmt.Execute; +end; + + +{ TfsRepeatStmt } + +destructor TfsRepeatStmt.Destroy; +begin + FCondition.Free; + inherited; +end; + +procedure TfsRepeatStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + + repeat + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + until Boolean(FCondition.Value) = not FInverseCondition; + + FProgram.FBreakCalled := False; +end; + + +{ TfsWhileStmt } + +destructor TfsWhileStmt.Destroy; +begin + FCondition.Free; + inherited; +end; + +procedure TfsWhileStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + + while Boolean(FCondition.Value) = True do + begin + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + end; + + FProgram.FBreakCalled := False; +end; + + +{ TfsForStmt } + +destructor TfsForStmt.Destroy; +begin + FBeginValue.Free; + FEndValue.Free; + inherited; +end; + +procedure TfsForStmt.Execute; +var + i, bValue, eValue: Integer; +begin + try + bValue := FBeginValue.Value; + eValue := FEndValue.Value; + finally + RunLine; + end; + if FProgram.FTerminated then Exit; + + if FDown then + for i := bValue downto eValue do + begin + FVariable.FValue := i; + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + end + else + for i := bValue to eValue do + begin + FVariable.FValue := i; + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + end; + + FProgram.FBreakCalled := False; +end; + + +{ TfsVbForStmt } + +destructor TfsVbForStmt.Destroy; +begin + FBeginValue.Free; + FEndValue.Free; + if FStep <> nil then + FStep.Free; + inherited; +end; + +procedure TfsVbForStmt.Execute; +var + i, bValue, eValue, sValue: Variant; + Down: Boolean; +begin + bValue := FBeginValue.Value; + eValue := FEndValue.Value; + if FStep <> nil then + sValue := FStep.Value else + sValue := 1; + Down := sValue < 0; + + RunLine; + if FProgram.FTerminated then Exit; + i := bValue; + if Down then + while i >= eValue do + begin + FVariable.FValue := i; + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + i := i + sValue; + end + else + while i <= eValue do + begin + FVariable.FValue := i; + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + i := i + sValue; + end; + + FProgram.FBreakCalled := False; +end; + + +{ TfsCppForStmt } + +constructor TfsCppForStmt.Create(AProgram: TfsScript; const UnitName, + SourcePos: String); +begin + inherited; + FFirstStmt := TfsStatement.Create(FProgram, UnitName, SourcePos); + FSecondStmt := TfsStatement.Create(FProgram, UnitName, SourcePos); +end; + +destructor TfsCppForStmt.Destroy; +begin + FFirstStmt.Free; + FExpression.Free; + FSecondStmt.Free; + inherited; +end; + +procedure TfsCppForStmt.Execute; +begin + RunLine; + if FProgram.FTerminated then Exit; + FFirstStmt.Execute; + if FProgram.FTerminated then Exit; + while Boolean(FExpression.Value) = True do + begin + inherited Execute; + if FProgram.FBreakCalled or FProgram.FExitCalled then break; + FProgram.FContinueCalled := False; + FSecondStmt.Execute; + end; + + FProgram.FBreakCalled := False; +end; + + +{ TfsCaseSelector } + +destructor TfsCaseSelector.Destroy; +begin + FSetExpression.Free; + inherited; +end; + +function TfsCaseSelector.Check(const Value: Variant): Boolean; +begin + Result := FSetExpression.Check(Value); +end; + + +{ TfsCaseStmt } + +constructor TfsCaseStmt.Create(AProgram: TfsScript; const UnitName, + SourcePos: String); +begin + inherited; + FElseStmt := TfsStatement.Create(FProgram, UnitName, SourcePos); +end; + +destructor TfsCaseStmt.Destroy; +begin + FCondition.Free; + FElseStmt.Free; + inherited; +end; + +procedure TfsCaseStmt.Execute; +var + i: Integer; + Value: Variant; + Executed: Boolean; +begin + Value := FCondition.Value; + Executed := False; + + RunLine; + if FProgram.FTerminated then Exit; + for i := 0 to Count - 1 do + if TfsCaseSelector(Items[i]).Check(Value) then + begin + Items[i].Execute; + Executed := True; + break; + end; + + if not Executed then + FElseStmt.Execute; +end; + + +{ TfsTryStmt } + +constructor TfsTryStmt.Create(AProgram: TfsScript; const UnitName, + SourcePos: String); +begin + inherited; + FExceptStmt := TfsStatement.Create(AProgram, UnitName, SourcePos); +end; + +destructor TfsTryStmt.Destroy; +begin + FExceptStmt.Free; + inherited; +end; + +procedure TfsTryStmt.Execute; +var + SaveExitCalled: Boolean; +begin + RunLine; + if FProgram.FTerminated then Exit; + if IsExcept then + begin + try + inherited Execute; + except + on E: Exception do + begin + FProgram.SetVariables('ExceptionClassName', E.ClassName); + FProgram.SetVariables('ExceptionMessage', E.Message); + FProgram.ErrorPos := FProgram.FLastSourcePos; + ExceptStmt.Execute; + end; + end; + end + else + begin + try + inherited Execute; + finally + SaveExitCalled := FProgram.FExitCalled; + FProgram.FExitCalled := False; + ExceptStmt.Execute; + FProgram.FExitCalled := SaveExitCalled; + end + end; +end; + +{ TfsBreakStmt } + +procedure TfsBreakStmt.Execute; +begin + FProgram.FBreakCalled := True; +end; + + +{ TfsContinueStmt } + +procedure TfsContinueStmt.Execute; +begin + FProgram.FContinueCalled := True; +end; + + +{ TfsExitStmt } + +procedure TfsExitStmt.Execute; +begin + RunLine; + FProgram.FExitCalled := True; +end; + + +{ TfsWithStmt } + +destructor TfsWithStmt.Destroy; +begin + FDesignator.Free; + inherited; +end; + +procedure TfsWithStmt.Execute; +begin + inherited; + FVariable.Value := FDesignator.Value; +end; + + +{ TfsArrayHelper } + +constructor TfsArrayHelper.Create(const AName: String; DimCount: Integer; + Typ: TfsVarType; const TypeName: String); +var + i: Integer; +begin + inherited Create(AName, Typ, TypeName); + + if DimCount <> -1 then + begin + for i := 0 to DimCount - 1 do +{$IFDEF CPUX64} + Add(TfsParamItem.Create('', fvtInt64, '', False, False)); +{$ELSE} + Add(TfsParamItem.Create('', fvtInt, '', False, False)); +{$ENDIF} + end + else + for i := 0 to 2 do +{$IFDEF CPUX64} + Add(TfsParamItem.Create('', fvtInt64, '', i > 0, False)); +{$ELSE} + Add(TfsParamItem.Create('', fvtInt, '', i > 0, False)); +{$ENDIF} +end; + +destructor TfsArrayHelper.Destroy; +begin + inherited; +end; + +function TfsArrayHelper.GetValue: Variant; +var + DimCount: Integer; +begin + DimCount := VarArrayDimCount(ParentRef.PValue^); + case DimCount of + 1: Result := ParentRef.PValue^[Params[0].Value]; + 2: Result := ParentRef.PValue^[Params[0].Value, Params[1].Value]; + 3: Result := ParentRef.PValue^[Params[0].Value, Params[1].Value, Params[2].Value]; + else + Result := Null; + end; +end; + +procedure TfsArrayHelper.SetValue(const Value: Variant); +var + DimCount: Integer; +begin + DimCount := VarArrayDimCount(ParentRef.PValue^); + case DimCount of + 1: ParentRef.PValue^[Params[0].Value] := Value; + 2: ParentRef.PValue^[Params[0].Value, Params[1].Value] := Value; + 3: ParentRef.PValue^[Params[0].Value, Params[1].Value, Params[2].Value] := Value; + end; +end; + + +{ TfsStringHelper } + +constructor TfsStringHelper.Create; +begin + inherited Create('__StringHelper', fvtChar, ''); + Add(TfsParamItem.Create('', fvtInt, '', False, False)); +end; + +function TfsStringHelper.GetValue: Variant; +begin + Result := String(ParentValue)[Integer(Params[0].Value)]; +end; + +procedure TfsStringHelper.SetValue(const Value: Variant); +var + s: String; +begin + s := ParentValue; + s[Integer(Params[0].Value)] := String(Value)[1]; + TfsCustomVariable(frxInteger(ParentRef)).Value := s; +end; + + +{ TfsCustomEvent } + +constructor TfsCustomEvent.Create(AObject: TObject; AHandler: TfsProcVariable); +begin + FInstance := AObject; + FHandler := AHandler; +end; + +procedure TfsCustomEvent.CallHandler(Params: array of const); +var + i, StackIndex: Integer; +begin + StackIndex := -1; + if FHandler.Executing then + StackIndex := FHandler.SaveLocalVariables; + try + for i := 0 to FHandler.Count - 1 do + FHandler.Params[i].Value := VarRecToVariant(Params[i]); + FHandler.Value; + finally + FHandler.RestoreLocalVariables(StackIndex, True); + end; +end; + + +{ TfsRTTIModule } + +constructor TfsRTTIModule.Create(AScript: TfsScript); +begin + FScript := AScript; +end; + + +function fsGlobalUnit: TfsScript; +begin + if (FGlobalUnit = nil) and not FGlobalUnitDestroyed then + begin + FGlobalUnit := TfsScript.Create(nil); + FGlobalUnit.AddRTTI; + end; + Result := FGlobalUnit; +end; + +function fsIsGlobalUnitExist: Boolean; +begin + Result := Assigned(FGlobalUnit); +end; + +function fsRTTIModules: TList; +begin + if (FRTTIModules = nil) and not FRTTIModulesDestroyed then + begin + FRTTIModules := TList.Create; + FRTTIModules.Add(TfsSysFunctions); + end; + Result := FRTTIModules; +end; + +{ TfsVariable } + +function TfsVariable.GetValue: Variant; +begin + Result := inherited GetValue; + if Assigned(FOnGetVarValue) then + begin + Result := FOnGetVarValue(FName, FTyp, FValue); + if Result = null then Result := FValue; + end; +end; + +procedure TfsVariable.SetValue(const Value: Variant); +begin + if not FIsReadOnly then + case FTyp of + fvtInt: FValue := VarAsType(Value, varInteger); +{$IFDEF FS_INT64} + fvtInt64: FValue := VarAsType(Value, varInt64); +{$ENDIF} + fvtBool: FValue := VarAsType(Value, varBoolean); + fvtFloat: + if (VarType(Value) = varDate) then + FValue := VarAsType(Value, varDate) + else + FValue := VarAsType(Value, varDouble); +{$IFDEF Delphi12} + fvtString: FValue := VarAsType(Value, varUString); +{$ELSE} + fvtString: FValue := VarAsType(Value, varString); +{$ENDIF} + else + FValue := Value; + end; +end; + +initialization +{$IFDEF FMX} + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsScript, TFmxObject); +{$ELSE} +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsScript, TControl); +{$ENDIF} +{$ENDIF} + FGlobalUnitDestroyed := False; + FRTTIModulesDestroyed := False; + fsRTTIModules; + +finalization + if FGlobalUnit <> nil then + FGlobalUnit.Free; + FGlobalUnit := nil; + FGlobalUnitDestroyed := True; + FRTTIModules.Free; + FRTTIModules := nil; + FRTTIModulesDestroyed := True; + +end. \ No newline at end of file diff --git a/FastScript/fs_ijs.pas b/FastScript/fs_ijs.pas new file mode 100644 index 0000000..5c6a50d --- /dev/null +++ b/FastScript/fs_ijs.pas @@ -0,0 +1,168 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ JScript grammar } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +//VCL uses section +{$IFNDEF FMX} +unit fs_ijs; + +interface + +{$i fs.inc} + +uses + SysUtils, Classes, fs_itools{$IFDEF DELPHI16}, Controls{$ENDIF}; +{$ELSE} +interface + +{$i fs.inc} + +uses + System.SysUtils, System.Classes, FMX.fs_itools, FMX.Types; +{$ENDIF} + +type +{$i frxPlatformsAttribute.inc} + TfsJScript = class(TComponent); + + +implementation + +const + JS_GRAMMAR = + '' + + '' + + '<' + + 'loop text=","><' + + 'char text="!" add="op" addtext="not"/>' + + '<' + + 'char text="-" add="op"/><' + + 'expression err="err2"/>' + + '<' + + 'forstmtitem/>'; + + +initialization +{$IFDEF DELPHI16} +{$IFDEF FMX} + StartClassGroup(TFmxObject); + ActivateClassGroup(TFmxObject); + GroupDescendentsWith(TfsJScript, TFmxObject); +{$ELSE} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsJScript, TControl); +{$ENDIF} +{$ENDIF} + fsRegisterLanguage('JScript', JS_GRAMMAR); + +end. diff --git a/FastScript/fs_imenusrtti.pas b/FastScript/fs_imenusrtti.pas new file mode 100644 index 0000000..c82f935 --- /dev/null +++ b/FastScript/fs_imenusrtti.pas @@ -0,0 +1,183 @@ +{**********************************************} +{ } +{ FastScript v1.9 } +{ Menus } +{ } +{ Copyright (c) 1998-2007 } +{ by Fast Reports Inc. } +{ } +{ Copyright (c) 2006 by } +{ Copyright (c) 2006-2007 by Stalker SoftWare } +{ } +{**********************************************} + +unit fs_imenusrtti; + +interface + +{$I fs.inc} + +uses + SysUtils, Classes, Menus, fs_iinterpreter, fs_ievents, ImgList{$IFDEF DELPHI16}, Controls{$ENDIF} +{$IFDEF Delphi6} +, Types , Variants +{$ENDIF}; + +type +{$i frxPlatformsAttribute.inc} + TfsMenusRTTI = class(TComponent); // fake component + +implementation + +type + TFunctions = class(TfsRTTIModule) + private + function CallMethod(Instance: TObject; ClassType: TClass; const MethodName: + string; Caller: TfsMethodHelper): Variant; + function GetProp(Instance: TObject; ClassType: TClass; const PropName: + string): Variant; + procedure SetProp(Instance: TObject; ClassType: TClass; const PropName: + string; Value: Variant); + public + constructor Create(AScript: TfsScript); override; + end; + +constructor TFunctions.Create(AScript: TfsScript); +begin + inherited Create(AScript); + + with AScript do + begin + + AddType('TPopupAlignment', fvtInt); + + AddClass(TCustomImageList, 'TComponent'); + + with AddClass(TMenuItem, 'TComponent') do + begin + AddMethod('procedure Add(Item: TMenuItem)', CallMethod); + AddMethod('procedure Clear', CallMethod); + AddMethod('procedure Delete(Index: Integer)', CallMethod); + AddMethod('procedure Insert(Index: Integer; Item: TMenuItem)', + CallMethod); + AddMethod('procedure Remove(Item: TMenuItem)', CallMethod); + AddMethod('function GetParentMenu: TMenu', CallMethod); + AddEvent('OnClick', TfsNotifyEvent); + AddProperty('Count', 'Integer', GetProp); + AddDefaultProperty('Items', 'Integer', 'TMenuItem', CallMethod, True); + end; { with } + + with AddClass(TMenu, 'TComponent') do + AddIndexProperty('Items', 'Integer', 'TMenuItem', CallMethod, True); + + with AddClass(TPopupMenu, 'TMenu') do + begin + AddEvent('OnPopup', TfsNotifyEvent); + AddMethod('procedure Popup(X, Y: Extended)', CallMethod); + AddProperty('PopupComponent', 'TComponent', GetProp, SetProp); + AddProperty('Images', 'TCustomImageList', GetProp, SetProp); + end; { with } + + end; { with } + +end; { Create } + +function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const + MethodName: string; Caller: TfsMethodHelper): Variant; +var + oMenuItem: TMenuItem; +begin + Result := 0; + + if ClassType = TMenuItem then + begin + + oMenuItem := TMenuItem(Instance); + + if MethodName = 'ADD' then + oMenuItem.Add(TMenuItem(frxInteger(Caller.Params[0]))) +{$IFDEF Delphi5} + else if MethodName = 'CLEAR' then + oMenuItem.Clear +{$ENDIF} + else if MethodName = 'DELETE' then + oMenuItem.Delete(Caller.Params[0]) + else if MethodName = 'INSERT' then + oMenuItem.Insert(Caller.Params[0], TMenuItem(frxInteger(Caller.Params[1]))) + else if MethodName = 'REMOVE' then + oMenuItem.Remove(TMenuItem(frxInteger(Caller.Params[0]))) + else if MethodName = 'ITEMS.GET' then + Result := frxInteger(oMenuItem.Items[Caller.Params[0]]) + else if MethodName = 'GETPARENTMENU' then + Result := frxInteger(oMenuItem.GetParentMenu()); + + end + else if ClassType = TMenu then + begin + + if MethodName = 'ITEMS.GET' then + Result := frxInteger(TMenu(Instance).Items[Caller.Params[0]]) + + end + else if ClassType = TPopupMenu then + begin + + if MethodName = 'POPUP' then + TPopupMenu(Instance).Popup(Caller.Params[0], Caller.Params[1]); + + end; { if } + +end; { CallMethod } + +function TFunctions.GetProp(Instance: TObject; ClassType: TClass; const + PropName: string): Variant; +begin + Result := 0; + + if ClassType = TMenuItem then + begin + + if PropName = 'COUNT' then + Result := TMenuItem(Instance).Count; + + end + else if ClassType = TPopupMenu then + begin + + if PropName = 'POPUPCOMPONENT' then + Result := frxInteger(TPopupMenu(Instance).PopupComponent) + else if PropName = 'IMAGES' then + Result := frxInteger(TPopupMenu(Instance).Images) + + end; { if } + +end; { GetProp } + +procedure TFunctions.SetProp(Instance: TObject; ClassType: TClass; const + PropName: string; Value: Variant); +begin + if ClassType = TPopupMenu then + begin + if PropName = 'IMAGES' then + TPopupMenu(Instance).Images := TCustomImageList(frxInteger(Value)) + else if PropName = 'POPUPCOMPONENT' then + TPopupMenu(Instance).PopupComponent := TComponent(frxInteger(Value)) + + end; { if } + +end; { SetProp } + +initialization +{$IFDEF Delphi16} + StartClassGroup(TControl); + ActivateClassGroup(TControl); + GroupDescendentsWith(TfsMenusRTTI, TControl); +{$ENDIF} + fsRTTIModules.Add(TFunctions); + + +finalization + fsRTTIModules.Remove(TFunctions); + +end. + diff --git a/FastScript/fs_iparser.pas b/FastScript/fs_iparser.pas new file mode 100644 index 0000000..cef63e1 --- /dev/null +++ b/FastScript/fs_iparser.pas @@ -0,0 +1,762 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Parser } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} +//VCL uses section +{$IFNDEF FMX} +unit fs_iparser; + +interface + +{$i fs.inc} + +uses +{$IFNDEF CROSS_COMPILE} + Windows, +{$ENDIF} + SysUtils, Classes; +//FMX uses +{$ELSE} +interface + +{$i fs.inc} + +uses + System.Types, FMX.Types, System.SysUtils, System.Classes; +{$ENDIF} + + + +type + TfsIdentifierCharset = set of AnsiChar; + + { TfsParser parser the source text and return such elements as identifiers, + keywords, punctuation, strings and numbers. } + + TfsParser = class(TObject) + private + FCaseSensitive: Boolean; + FCommentBlock1: String; + FCommentBlock11: String; + FCommentBlock12: String; + FCommentBlock2: String; + FCommentBlock21: String; + FCommentBlock22: String; + FCommentLine1: String; + FCommentLine2: String; + FHexSequence: String; + FIdentifierCharset: TfsIdentifierCharset; + FKeywords: TStrings; + FLastPosition: Integer; + FPosition: Integer; + FSize: Integer; + FSkiPChar: String; + FSkipEOL: Boolean; + FSkipSpace: Boolean; + FStringQuotes: String; + FText: String; + FUseY: Boolean; + FYList: TList; + FSpecStrChar: Boolean; + function DoDigitSequence: Boolean; + function DoHexDigitSequence: Boolean; + function DoScaleFactor: Boolean; + function DoUnsignedInteger: Boolean; + function DoUnsignedReal: Boolean; + procedure SetPosition(const Value: Integer); + procedure SetText(const Value: String); + function Ident: String; + procedure SetCommentBlock1(const Value: String); + procedure SetCommentBlock2(const Value: String); + public + constructor Create; + destructor Destroy; override; + procedure Clear; + procedure ConstructCharset(const s: String); + + { skip all #0..#31 symbols } + procedure SkipSpaces; + { get EOL symbol } + function GetEOL: Boolean; + { get any valid ident except keyword } + function GetIdent: String; + { get any valid punctuation symbol like ,.;: } + function GetChar: String; + { get any valid ident or keyword } + function GetWord: String; + { get valid hex/int/float number } + function GetNumber: String; + { get valid quoted/control string like 'It''s'#13#10'working' } + function GetString: String; + { get FR-specific string - variable or db field like [main data."field 1"] } + function GetFRString: String; + { get Y:X position } + function GetXYPosition: String; + { get plain position from X:Y } + function GetPlainPosition(pt: TPoint): Integer; + { is this keyword? } + function IsKeyWord(const s: String): Boolean; + + // Language-dependent elements + // For Pascal: + // CommentLine1 := '//'; + // CommentBlock1 := '{,}'; + // CommentBlock2 := '(*,*)'; + // HexSequence := '$' + // IdentifierCharset := ['_', '0'..'9', 'a'..'z', 'A'..'Z']; + // Keywords: 'begin','end', ... + // StringQuotes := '''' + property CaseSensitive: Boolean read FCaseSensitive write FCaseSensitive; + property CommentBlock1: String read FCommentBlock1 write SetCommentBlock1; + property CommentBlock2: String read FCommentBlock2 write SetCommentBlock2; + property CommentLine1: String read FCommentLine1 write FCommentLine1; + property CommentLine2: String read FCommentLine2 write FCommentLine2; + property HexSequence: String read FHexSequence write FHexSequence; + property IdentifierCharset: TfsIdentifierCharset read FIdentifierCharset + write FIdentifierCharset; + property Keywords: TStrings read FKeywords; + property SkiPChar: String read FSkiPChar write FSkiPChar; + property SkipEOL: Boolean read FSkipEOL write FSkipEOL; + property SkipSpace: Boolean read FSkipSpace write FSkipSpace; + property StringQuotes: String read FStringQuotes write FStringQuotes; + property SpecStrChar: Boolean read FSpecStrChar write FSpecStrChar; + property UseY: Boolean read FUseY write FUseY; + + { Current position } + property Position: Integer read FPosition write SetPosition; + { Text to parse } + property Text: String read FText write SetText; + end; + + +implementation + + +{ TfsParser } + +constructor TfsParser.Create; +begin + FKeywords := TStringList.Create; + TStringList(FKeywords).Sorted := True; + FYList := TList.Create; + FUseY := True; + Clear; +end; + +destructor TfsParser.Destroy; +begin + FKeywords.Free; + FYList.Free; + inherited; +end; + +procedure TfsParser.Clear; +begin + FKeywords.Clear; + FSpecStrChar := False; + FCommentLine1 := '//'; + CommentBlock1 := '{,}'; + CommentBlock2 := '(*,*)'; + FHexSequence := '$'; + FIdentifierCharset := ['_', '0'..'9', 'a'..'z', 'A'..'Z']; + FSkipChar := ''; + FSkipEOL := True; + FStringQuotes := ''''; + FSkipSpace := True; +end; + +procedure TfsParser.SetCommentBlock1(const Value: String); +var + sl: TStringList; +begin + FCommentBlock1 := Value; + FCommentBlock11 := ''; + FCommentBlock12 := ''; + + sl := TStringList.Create; + sl.CommaText := FCommentBlock1; + if sl.Count > 0 then + FCommentBlock11 := sl[0]; + if sl.Count > 1 then + FCommentBlock12 := sl[1]; + sl.Free; +end; + +procedure TfsParser.SetCommentBlock2(const Value: String); +var + sl: TStringList; +begin + FCommentBlock2 := Value; + FCommentBlock21 := ''; + FCommentBlock22 := ''; + + sl := TStringList.Create; + sl.CommaText := FCommentBlock2; + if sl.Count > 0 then + FCommentBlock21 := sl[0]; + if sl.Count > 1 then + FCommentBlock22 := sl[1]; + sl.Free; +end; + +procedure TfsParser.SetPosition(const Value: Integer); +begin + FPosition := Value; + FLastPosition := Value; +end; + +procedure TfsParser.SetText(const Value: String); +var + i: Integer; +begin + FText := Value + #0; + FLastPosition := 1; + FPosition := 1; + FSize := Length(Value); + + if FUseY then + begin + FYList.Clear; + FYList.Add(TObject(0)); + for i := 1 to FSize do + if FText[i] = #10 then + FYList.Add(TObject(i)); + end; +end; + +procedure TfsParser.ConstructCharset(const s: String); +var + i: Integer; +begin + FIdentifierCharset := []; + for i := 1 to Length(s) do + FIdentifierCharset := FIdentifierCharset + [s[i]]; +end; + +function TfsParser.GetEOL: Boolean; +begin + SkipSpaces; +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], [#10, #13]) then +{$ELSE} + if FText[FPosition] in [#10, #13] then +{$ENDIF} + begin + Result := True; +{$IFDEF Delphi12} + while CharInSet(FText[FPosition], [#10, #13]) do +{$ELSE} + while FText[FPosition] in [#10, #13] do +{$ENDIF} + Inc(FPosition); + end + else + Result := False; +end; + +procedure TfsParser.SkipSpaces; +var + s1, s2: String; + Flag, CLine: Boolean; + Spaces: set of AnsiChar; +begin + Spaces := [#0..#32]; + if not FSkipEOL then +{$IFDEF Windows} + Spaces := Spaces - [#13]; +{$ELSE} + Spaces := Spaces - [#10]; +{$ENDIF} +{$IFDEF Delphi12} + while (FPosition <= FSize) and (CharInSet(FText[FPosition], Spaces)) do +{$ELSE} + while (FPosition <= FSize) and (FText[FPosition] in Spaces) do +{$ENDIF} + Inc(FPosition); + { skip basic '_' } + if (FPosition <= FSize) and (FSkipChar <> '') and (FText[FPosition] = FSkipChar[1]) then + begin + Inc(FPosition); + GetEOL; + SkipSpaces; + end; + + if FPosition < FSize then + begin + if FCommentLine1 <> '' then + s1 := Copy(FText, FPosition, Length(FCommentLine1)) else + s1 := ' '; + if FCommentLine2 <> '' then + s2 := Copy(FText, FPosition, Length(FCommentLine2)) else + s2 := ' '; + + if (s1 = FCommentLine1) or (s2 = FCommentLine2) then + begin + CLine := (FPosition - 1 > 0) and (FText[FPosition - 1] <> #10) and not FSkipEOL; + while (FPosition <= FSize) and (FText[FPosition] <> #10) do + begin + if (FText[FPosition] = {$IFDEF LINUX}#10{$ELSE}#13{$ENDIF}) and CLine then break; + Inc(FPosition); + end; + SkipSpaces; + end + else + begin + Flag := False; + + if FCommentBlock1 <> '' then + begin + s1 := Copy(FText, FPosition, Length(FCommentBlock11)); + if s1 = FCommentBlock11 then + begin + Flag := True; + s2 := FCommentBlock12; + end; + end; + + if not Flag and (FCommentBlock2 <> '') then + begin + s1 := Copy(FText, FPosition, Length(FCommentBlock21)); + if s1 = FCommentBlock21 then + begin + Flag := True; + s2 := FCommentBlock22; + end; + end; + + if Flag then + begin + Inc(FPosition, Length(s2)); + while (FPosition <= FSize) and (Copy(FText, FPosition, Length(s2)) <> s2) do + Inc(FPosition); + Inc(FPosition, Length(s2)); + SkipSpaces; + end; + end; + end; + + FLastPosition := FPosition; +end; + +function TfsParser.Ident: String; +begin + if FSkipSpace then + SkipSpaces; +{$IFDEF Delphi12} + if (CharInSet(FText[FPosition], FIdentifierCharset - ['0'..'9'])) + or ((FText[FPosition] >= Char($007F)) and (FText[FPosition] <= Char($FFFF))) then + begin + while CharInSet(FText[FPosition], FIdentifierCharset) + or ((FText[FPosition] >= Char($007F)) and (FText[FPosition] <= Char($FFFF))) do +{$ELSE} + if (FText[FPosition] in FIdentifierCharset) and not (FText[FPosition] in ['0'..'9']) then + begin + while (FText[FPosition] in FIdentifierCharset) do +{$ENDIF} + Inc(FPosition); + Result := Copy(FText, FLastPosition, FPosition - FLastPosition); + end + else + Result := ''; +end; + +function TfsParser.IsKeyWord(const s: String): Boolean; +var + i: Integer; +begin + if FCaseSensitive then + begin + Result := False; + for i := 0 to FKeywords.Count - 1 do + begin + Result := FKeywords[i] = s; + if Result then break; + end; + end + else + Result := FKeywords.IndexOf(s) <> -1; +end; + +function TfsParser.GetIdent: String; +begin + Result := Ident; + if IsKeyWord(Result) then + Result := ''; +end; + +function TfsParser.GetWord: String; +begin + Result := Ident; +end; + +function TfsParser.GetChar: String; +begin +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], ['!', '@', '#', '$', '%', '^', '&', '|', '\', + '.', ',', ':', ';', '?', '''', '"', '~', '`', '_', '[', ']', '{', '}', + '(', ')', '+', '-', '*', '/', '=', '<', '>']) then +{$ELSE} + if FText[FPosition] in ['!', '@', '#', '$', '%', '^', '&', '|', '\', + '.', ',', ':', ';', '?', '''', '"', '~', '`', '_', '[', ']', '{', '}', + '(', ')', '+', '-', '*', '/', '=', '<', '>'] then +{$ENDIF} + begin + Result := FText[FPosition]; + Inc(FPosition); + end + else + Result := ''; +end; + +function TfsParser.GetString: String; +var + Flag: Boolean; + Str: String; + FError: Boolean; + FCpp: Boolean; + + function DoQuotedString: Boolean; + var + i, j: Integer; + begin + Result := False; + i := FPosition; + + if FText[FPosition] = FStringQuotes[1] then + begin + repeat + Inc(FPosition); + + if FCpp and (FText[FPosition] = '\') then + begin + {$IFNDEF FPC} + {$IFDEF Delphi12} + case Lowercase(Char(FText[FPosition + 1]))[1] of + {$ELSE} + case Lowercase(FText[FPosition + 1])[1] of + {$ENDIF} + {$ELSE} + case Lowercase(FText[FPosition + 1]) of + {$ENDIF} + 'n': + begin + Str := Str + #10; + Inc(FPosition); + end; + 'r': + begin + Str := Str + #13; + Inc(FPosition); + end; + 'x': + begin + Inc(FPosition, 2); + j := FPosition; + Result := DoHexDigitSequence; + if Result then + Str := Str + Chr(StrToInt('$' + Copy(FText, j, FPosition - j))) else + FPosition := j; + Dec(FPosition); + end + else + begin + Str := Str + FText[FPosition + 1]; + Inc(FPosition); + end; + end; + end + else if FText[FPosition] = FStringQuotes[1] then + begin + if not FCpp and (FText[FPosition + 1] = FStringQuotes[1]) then + begin + Str := Str + FStringQuotes[1]; + Inc(FPosition); + end + else + break + end + else + Str := Str + FText[FPosition]; +{$IFDEF Delphi12} + until CharInSet(FText[FPosition], [#0..#31] - [#9]); +{$ELSE} + until FText[FPosition] in [#0..#31] - [#9]; +{$ENDIF} + if FText[FPosition] = FStringQuotes[1] then + begin + Inc(FPosition); + Result := True; + end + else + FPosition := i; + end; + end; + + function DoControlString: Boolean; + var + i: Integer; + begin + Result := False; + i := FPosition; + + if FText[FPosition] = '#' then + begin + Inc(FPosition); + Result := DoUnsignedInteger; + if Result then + Str := Chr(StrToInt(Copy(FText, i + 1, FPosition - i - 1))) else + FPosition := i; + end; + end; +{$HINTS OFF} +begin + Result := ''; + if FSkipSpace then + SkipSpaces; + Flag := True; + FError := False; + FCpp := {FStringQuotes = '"'} FSpecStrChar; + + repeat + Str := ''; + if DoQuotedString or DoControlString then + Result := Result + Str + else + begin + FError := Flag; + break; + end; + + Flag := False; + until False; + + if not FError then + Result := '''' + Result + ''''; +end; +{$HINTS ON} +function TfsParser.DoDigitSequence: Boolean; +begin + Result := False; + +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], ['0'..'9']) then + begin + while CharInSet(FText[FPosition], ['0'..'9']) do +{$ELSE} + if FText[FPosition] in ['0'..'9'] then + begin + while FText[FPosition] in ['0'..'9'] do +{$ENDIF} + Inc(FPosition); + Result := True; + end; +end; + +function TfsParser.DoHexDigitSequence: Boolean; +begin + Result := False; + +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], ['0'..'9', 'a'..'f', 'A'..'F']) then + begin + while CharInSet(FText[FPosition], ['0'..'9', 'a'..'f', 'A'..'F']) do +{$ELSE} + if FText[FPosition] in ['0'..'9', 'a'..'f', 'A'..'F'] then + begin + while FText[FPosition] in ['0'..'9', 'a'..'f', 'A'..'F'] do +{$ENDIF} + Inc(FPosition); + Result := True; + end; +end; + +function TfsParser.DoUnsignedInteger: Boolean; +var + Pos1: Integer; + s: String; +begin + Pos1 := FPosition; + + s := Copy(FText, FPosition, Length(FHexSequence)); + if s = FHexSequence then + begin + Inc(FPosition, Length(s)); + Result := DoHexDigitSequence; + end + else + Result := DoDigitSequence; + + if not Result then + FPosition := Pos1; +end; + +function TfsParser.DoUnsignedReal: Boolean; +var + Pos1, Pos2: Integer; +begin + Pos1 := FPosition; + Result := DoUnsignedInteger; + + if Result then + begin + if FText[FPosition] = '.' then + begin + Inc(FPosition); + Result := DoDigitSequence; + end; + + if Result then + begin + Pos2 := FPosition; + if not DoScaleFactor then + FPosition := Pos2; + end; + end; + + if not Result then + FPosition := Pos1; +end; + +function TfsParser.DoScaleFactor: Boolean; +begin + Result := False; +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], ['e', 'E']) then +{$ELSE} + if FText[FPosition] in ['e', 'E'] then +{$ENDIF} + begin + Inc(FPosition); +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], ['+', '-']) then +{$ELSE} + if FText[FPosition] in ['+', '-'] then +{$ENDIF} + Inc(FPosition); + Result := DoDigitSequence; + end; +end; + +function TfsParser.GetNumber: String; +var + Pos1: Integer; +begin + Result := ''; + if FSkipSpace then + SkipSpaces; + Pos1 := FPosition; + + if DoUnsignedReal or DoUnsignedInteger then + Result := Copy(FText, FLastPosition, FPosition - FLastPosition) else + FPosition := Pos1; + + if FHexSequence <> '$' then + while Pos(FHexSequence, Result) <> 0 do + begin + Pos1 := Pos(FHexSequence, Result); + Delete(Result, Pos1, Length(FHexSequence)); + Insert('$', Result, Pos1); + end; +end; + +function TfsParser.GetFRString: String; +var + i, c: Integer; + fl1, fl2: Boolean; +begin + Result := ''; + i := FPosition; + fl1 := True; + fl2 := True; + c := 1; + + Dec(FPosition); + repeat + Inc(FPosition); +{ if FText[FPosition] in [#10, #13] then + begin + FPosition := i; + break; + end;} + if fl1 and fl2 then +{$IFDEF Delphi12} + if CharInSet(FText[FPosition], ['<', '[']) then +{$ELSE} + if FText[FPosition] in ['<', '['] then +{$ENDIF} + Inc(c) +{$IFDEF Delphi12} + else if CharInSet(FText[FPosition], ['>', ']']) then +{$ELSE} + else if FText[FPosition] in ['>', ']'] then +{$ENDIF} + Dec(c); + if fl1 then + if FText[FPosition] = '"' then + fl2 := not fl2; + if fl2 then + if FText[FPosition] = '''' then + fl1 := not fl1; + until (c = 0) or (FPosition >= Length(FText)); + + Result := Copy(FText, i, FPosition - i); +end; + +function TfsParser.GetXYPosition: String; +var + i, i0, i1, c, pos, X, Y: Integer; +begin + i0 := 0; + i1 := FYList.Count - 1; + + while i0 <= i1 do + begin + i := (i0 + i1) div 2; + pos := Integer(FYList[i]); + + if pos = FPosition then + c := 0 + else if pos > FPosition then + c := 1 + else + c := -1; + + if c < 0 then + i0 := i + 1 + else + begin + i1 := i - 1; + if c = 0 then + i0 := i; + end; + end; + + X := 1; + Y := i0; + i := Integer(FYList[i0 - 1]) + 1; + + while i < FPosition do + begin + Inc(i); + Inc(X); + end; + Result := IntToStr(Y) + ':' + IntToStr(X) +end; + +function TfsParser.GetPlainPosition(pt: TPoint): Integer; +var + i: Integer; +begin + Result := -1; + i := pt.Y - 1; + if (i >= 0) and (i < FYList.Count) then + Result := Integer(FYList[i]) + pt.X; +end; + +end. \ No newline at end of file diff --git a/FastScript/fs_ipascal.pas b/FastScript/fs_ipascal.pas new file mode 100644 index 0000000..0c14a1a --- /dev/null +++ b/FastScript/fs_ipascal.pas @@ -0,0 +1,201 @@ + +{******************************************} +{ } +{ FastScript v1.9 } +{ Pascal grammar } +{ } +{ (c) 2003-2007 by Alexander Tzyganenko, } +{ Fast Reports Inc } +{ } +{******************************************} + +{$IFNDEF FMX} +unit fs_ipascal; +{$ENDIF} + +interface + +{$i fs.inc} + +uses +{$IFNDEF FMX} + SysUtils, Classes, fs_itools{$IFDEF DELPHI16}, Controls{$ENDIF}; +{$ELSE} + System.SysUtils, System.Classes, FMX.fs_itools, FMX.Types; +{$ENDIF} + +type +{$i frxPlatformsAttribute.inc} + TfsPascal = class(TComponent); + +procedure fsModifyPascalForFR2; + +implementation + +const + PASCAL_GRAMMAR = + '

<' + + 'except/>