diff --git a/BD/BASEDATOS.FDB b/BD/BASEDATOS.FDB new file mode 100644 index 0000000..9ec1cb5 Binary files /dev/null and b/BD/BASEDATOS.FDB differ diff --git a/BD/BASEDATOS.FDB_ b/BD/BASEDATOS.FDB_ new file mode 100644 index 0000000..7e79825 Binary files /dev/null and b/BD/BASEDATOS.FDB_ differ diff --git a/BD/Script.sql b/BD/Script.sql new file mode 100644 index 0000000..611dddd --- /dev/null +++ b/BD/Script.sql @@ -0,0 +1,133 @@ +CREATE DOMAIN CLASEFACTURA AS +VARCHAR(1) CHARACTER SET ISO8859_1 +COLLATE ISO8859_1; + +CREATE DOMAIN REFERENCIAS AS +VARCHAR(8) CHARACTER SET ISO8859_1 +COLLATE ISO8859_1; + +CREATE TABLE FACTURASCLIENTE ( + CODIGO CODIGOS NOT NULL, + FECHAALTA FECHAS NOT NULL, + USUARIO NOMBRES NOT NULL, + CLASEFACTURA CLASEFACTURA NOT NULL, + REFERENCIA REFERENCIAS, + FECHAFACTURA FECHAS NOT NULL, + FECHAVENCIMIENTO FECHAS, + PAGADA VARCHAR(1) NOT NULL, + BASEIMPONIBLE IMPORTES2, + IVA PORCENTAJES, + IMPORTEIVA IMPORTES2, + IMPORTETOTAL IMPORTES2, + OBSERVACIONES OBSERVACIONES, + FORMAPAGO OBSERVACIONES, + CODIGOCONTACTO CODIGOS, + NIFCIF NIFCIFS, + NOMBRE NOMBRES, + CALLE CALLES, + PROVINCIA PROVINCIAS, + CODIGOPOSTAL CODIGOSPOSTALES, + POBLACION POBLACIONES, + CODIGOOBRA CODIGOS, + DESCUENTO PORCENTAJES, + IMPORTEDESCUENTO IMPORTES2 +); + +ALTER TABLE FACTURASCLIENTE ADD CONSTRAINT PK_FACTURASCLIENTE PRIMARY KEY (CODIGO); +ALTER TABLE FACTURASCLIENTE ADD CONSTRAINT FK_FACTURASCLIENTE FOREIGN KEY (CODIGOCONTACTO) REFERENCES CONTACTOS (CODIGO); +ALTER TABLE FACTURASCLIENTE ADD CONSTRAINT FK_FACTURASCLIENTE2 FOREIGN KEY (CODIGOOBRA) REFERENCES OBRAS (CODIGO); + + + +CREATE TABLE DETALLESFACTURASCLIENTE ( + CODIGOFACTURA CODIGOS NOT NULL, + NUMCONCEPTO NUMCONCEPTOS NOT NULL, + DESCRIPCION DESCRIPCIONES, + CANTIDAD CANTIDADES, + IMPORTEUNIDAD IMPORTES2, + IMPORTETOTAL IMPORTES2, + POSICION SMALLINT NOT NULL, + TIPO CHAR(1) +); + +ALTER TABLE DETALLESFACTURASCLIENTE ADD CONSTRAINT PK_DETALLESFACTURASCLIENTE PRIMARY KEY (CODIGOFACTURA, NUMCONCEPTO); +ALTER TABLE DETALLESFACTURASCLIENTE ADD CONSTRAINT FK_DETALLESFACTURASCLIENTE FOREIGN KEY (CODIGOFACTURA) REFERENCES FACTURASCLIENTE (CODIGO); + + + +CREATE TABLE RECIBOSCLIENTE ( + CODIGO CODIGOS NOT NULL, + FECHAALTA FECHAS NOT NULL, + USUARIO NOMBRES NOT NULL, + FECHARECIBO FECHAS NOT NULL, + IMPORTE IMPORTES2, + TEXTO OBSERVACIONES, + CODIGOCONTACTO CODIGOS, + NIFCIF NIFCIFS, + NOMBRE NOMBRES, + CALLE CALLES, + PROVINCIA PROVINCIAS, + CODIGOPOSTAL CODIGOSPOSTALES, + POBLACION POBLACIONES, + CODIGOOBRA CODIGOS +); +ALTER TABLE RECIBOSCLIENTE ADD CONSTRAINT PK_RECIBOSCLIENTE PRIMARY KEY (CODIGO); +ALTER TABLE RECIBOSCLIENTE ADD CONSTRAINT FK_RECIBOSCLIENTE FOREIGN KEY (CODIGOCONTACTO) REFERENCES CONTACTOS (CODIGO); +ALTER TABLE RECIBOSCLIENTE ADD CONSTRAINT FK_RECIBOSCLIENTE2 FOREIGN KEY (CODIGOOBRA) REFERENCES OBRAS (CODIGO); + +CREATE GENERATOR GEN_FACTURASCLIENTE; +SET GENERATOR GEN_FACTURASCLIENTE TO 1; + +CREATE GENERATOR GEN_RECIBOSCLIENTE; +SET GENERATOR GEN_RECIBOSCLIENTE TO 1; + + + + +/**PROCEDURES**/ + +DECLARE EXTERNAL FUNCTION LPAD + CSTRING(255), + INTEGER, + CSTRING(1) +RETURNS CSTRING(255) FREE_IT +ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf' + + +DAR_REFERENCIA_FACTURACLIENTE + +OUTPUT REFERENCIA VARCAHR 8 +VARIABLES AUX INTEGER + +BEGIN + AUX = 0; + SELECT COALESCE(MAX(CAST(SUBSTRING(REFERENCIA from 1 for 2) AS INTEGER)), 0) + FROM FACTURASCLIENTE + where (SUBSTRING(REFERENCIA from 4 for 4) = SUBSTRING(CURRENT_DATE FROM 1 FOR 4)) + and (CLASEFACTURA <> 'P') + INTO AUX; + AUX = AUX + 1; + REFERENCIA = LPAD(CAST(AUX AS VARCHAR(2)), 2, '0') || '/' || SUBSTRING(CURRENT_DATE FROM 1 FOR 4); + SUSPEND; +END + + +DAR_REFERENCIA_FACTURAPROFORMA + +IDEM + +BEGIN + AUX = 0; + SELECT COALESCE(MAX(CAST(SUBSTRING(REFERENCIA from 1 for 2) AS INTEGER)), 0) + FROM FACTURASCLIENTE + where (SUBSTRING(REFERENCIA from 4 for 4) = SUBSTRING(CURRENT_DATE FROM 1 FOR 4)) + and (CLASEFACTURA = 'P') + INTO AUX; + AUX = AUX + 1; + REFERENCIA = LPAD(CAST(AUX AS VARCHAR(2)), 2, '0') || '/' || SUBSTRING(CURRENT_DATE FROM 1 FOR 4); + SUSPEND; +END + + + + diff --git a/BD/UDPS.sql b/BD/UDPS.sql new file mode 100644 index 0000000..b0f1489 --- /dev/null +++ b/BD/UDPS.sql @@ -0,0 +1,257 @@ +DROP EXTERNAL FUNCTION ABS; +DROP EXTERNAL FUNCTION ACOS; +DROP EXTERNAL FUNCTION ASCII_CHAR; +DROP EXTERNAL FUNCTION ASCII_VAL; +DROP EXTERNAL FUNCTION ASIN; +DROP EXTERNAL FUNCTION ATAN; +DROP EXTERNAL FUNCTION ATAN2; +DROP EXTERNAL FUNCTION BIN_AND; +DROP EXTERNAL FUNCTION BIN_OR; +DROP EXTERNAL FUNCTION BIN_XOR; +DROP EXTERNAL FUNCTION CEILING; +DROP EXTERNAL FUNCTION COS; +DROP EXTERNAL FUNCTION COSH; +DROP EXTERNAL FUNCTION COT; +DROP EXTERNAL FUNCTION DIV; +DROP EXTERNAL FUNCTION FLOOR; +DROP EXTERNAL FUNCTION LN; +DROP EXTERNAL FUNCTION LOG; +DROP EXTERNAL FUNCTION LOG10; +DROP EXTERNAL FUNCTION LOWER; +DROP EXTERNAL FUNCTION LPAD; +DROP EXTERNAL FUNCTION LTRIM; +DROP EXTERNAL FUNCTION MOD; +DROP EXTERNAL FUNCTION PI; +DROP EXTERNAL FUNCTION RAND; +DROP EXTERNAL FUNCTION RPAD; +DROP EXTERNAL FUNCTION RTRIM; +DROP EXTERNAL FUNCTION SIGN; +DROP EXTERNAL FUNCTION SIN; +DROP EXTERNAL FUNCTION SQRT; +DROP EXTERNAL FUNCTION STRLEN; +DROP EXTERNAL FUNCTION SUBSTR; +DROP EXTERNAL FUNCTION TAN; +DROP EXTERNAL FUNCTION TANH; + + +/******************************************************************************/ +/**** User Defined Functions ****/ +/******************************************************************************/ + +DECLARE EXTERNAL FUNCTION ABS + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_abs' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION ACOS + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_acos' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION ASCII_CHAR + INTEGER + RETURNS CHAR(1) FREE_IT + ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION ASCII_VAL + CHAR(1) + RETURNS INTEGER BY VALUE + ENTRY_POINT 'IB_UDF_ascii_val' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION ASIN + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_asin' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION ATAN + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_atan' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION ATAN2 + DOUBLE PRECISION, + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_atan2' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION BIN_AND + INTEGER, + INTEGER + RETURNS INTEGER BY VALUE + ENTRY_POINT 'IB_UDF_bin_and' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION BIN_OR + INTEGER, + INTEGER + RETURNS INTEGER BY VALUE + ENTRY_POINT 'IB_UDF_bin_or' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION BIN_XOR + INTEGER, + INTEGER + RETURNS INTEGER BY VALUE + ENTRY_POINT 'IB_UDF_bin_xor' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION CEILING + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_ceiling' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION COS + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_cos' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION COSH + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_cosh' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION COT + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_cot' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION DIV + INTEGER, + INTEGER + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_div' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION FLOOR + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_floor' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION LN + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_ln' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION LOG + DOUBLE PRECISION, + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_log' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION LOG10 + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_log10' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION LOWER + CSTRING(80) + RETURNS CSTRING(80) FREE_IT + ENTRY_POINT 'IB_UDF_lower' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION LPAD + CSTRING(255), + INTEGER, + CSTRING(1) + RETURNS CSTRING(255) FREE_IT + ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION LTRIM + CSTRING(80) + RETURNS CSTRING(80) FREE_IT + ENTRY_POINT 'IB_UDF_ltrim' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION MOD + INTEGER, + INTEGER + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_mod' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION PI + + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_pi' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION RAND + + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_rand' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION RPAD + CSTRING(255), + INTEGER, + CSTRING(1) + RETURNS CSTRING(255) FREE_IT + ENTRY_POINT 'IB_UDF_rpad' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION RTRIM + CSTRING(80) + RETURNS CSTRING(80) FREE_IT + ENTRY_POINT 'IB_UDF_rtrim' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION SIGN + DOUBLE PRECISION + RETURNS INTEGER BY VALUE + ENTRY_POINT 'IB_UDF_sign' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION SIN + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_sin' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION SQRT + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_sqrt' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION STRLEN + CSTRING(32767) + RETURNS INTEGER BY VALUE + ENTRY_POINT 'IB_UDF_strlen' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION SUBSTR + CSTRING(80), + SMALLINT, + SMALLINT + RETURNS CSTRING(80) FREE_IT + ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION TAN + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_tan' MODULE_NAME 'ib_udf'; + + +DECLARE EXTERNAL FUNCTION TANH + DOUBLE PRECISION + RETURNS DOUBLE PRECISION BY VALUE + ENTRY_POINT 'IB_UDF_tanh' MODULE_NAME 'ib_udf'; + + diff --git a/Base/BaseD7.cfg b/Base/BaseD7.cfg new file mode 100644 index 0000000..7fd17cc --- /dev/null +++ b/Base/BaseD7.cfg @@ -0,0 +1,45 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O- +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W+ +-$X+ +-$YD +-$Z1 +-GD +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-N".\" +-LE"..\Output\Cliente" +-LN".\" +-U"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\Rodax Software\Proyectos\Componentes\GUISDK\Lib\D7;..\Servidor" +-O"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\Rodax Software\Proyectos\Componentes\GUISDK\Lib\D7;..\Servidor" +-I"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\Rodax Software\Proyectos\Componentes\GUISDK\Lib\D7;..\Servidor" +-R"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\Rodax Software\Proyectos\Componentes\GUISDK\Lib\D7;..\Servidor" +-Z +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/Base/BaseD7.dcp b/Base/BaseD7.dcp new file mode 100644 index 0000000..7e6b99e Binary files /dev/null and b/Base/BaseD7.dcp differ diff --git a/Base/BaseD7.dof b/Base/BaseD7.dof new file mode 100644 index 0000000..f9b8536 --- /dev/null +++ b/Base/BaseD7.dof @@ -0,0 +1,479 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=0 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=1 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=3 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir=.\ +PackageDLLOutputDir=..\Output\Cliente +PackageDCPOutputDir=.\ +SearchPath=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\Rodax Software\Proyectos\Componentes\GUISDK\Lib\D7;..\Servidor +Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;CEToolsPkgd7;FR7;FRIBX7;Hydra_Core_D7;Hydra_RO_D7;fqb70;frx7;frxADO7;frxBDE7;frxDB7;frxDBX7;frxe7;frxIBX7;fs7;fsADO7;fsBDE7;fsDB7;fsIBX7;DataAbstract_Core_D7;DataAbstract_IDE_D7 +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=C:\Archivos de programa\Borland\Delphi7\Bin\ +[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=3082 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[HistoryLists\hlDebugSourcePath] +Count=2 +Item0=D:\Proyectos\Componentes\GUISDK\Sources\;D:\Proyectos\Componentes\PluginSDK\Source\;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Cliente;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Reglas +Item1=.\ +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=4 +Item0=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas +Item1=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\..\Obras\Cliente;..\..\Facturas de cliente\Cliente;..\..\Contactos\Cliente;..\..\Documentos asociados;..\..\Recibos\Cliente +Item2=$(DELPHI)\Lib\Debug;E:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\..\..\GUISDK\lib\d7;..\..\Contactos\Cliente;..\..\Documentos asociados;..\Reglas +Item3=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=.\ +[HistoryLists\hlOutputDirectorry] +Count=2 +Item0=..\Output\Servidor +Item1=..\Output\Cliente +[HistoryLists\hlBPLOutput] +Count=1 +Item0=..\..\..\Output\Cliente +[HistoryLists\hlDCPOutput] +Count=1 +Item0=.\ +[Exception Log] +EurekaLog Version=501 +Activate=0 +Activate Handle=1 +Save Log File=1 +Foreground Tab=0 +Freeze Activate=0 +Freeze Timeout=60 +Freeze Message=The application seems to be frozen. +SMTP From=eurekalog@email.com +SMTP Host= +SMTP Port=25 +SMTP UserID= +SMTP Password= +Append to Log=0 +Show TerminateBtn=1 +TerminateBtn Operation=1 +Errors Number=32 +Errors Terminate=3 +Email Address= +Email Object= +Email Send Options=0 +Output Path= +Encrypt Password= +AutoCloseDialogSecs=0 +WebSendMode=0 +SupportULR= +HTMLLayout Count=15 +HTMLLine0="%3Chtml%3E" +HTMLLine1=" %3Chead%3E" +HTMLLine2=" %3C/head%3E" +HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E" +HTMLLine4=" %3Ctable width="100%%" border="0"%3E" +HTMLLine5=" %3Ctr%3E" +HTMLLine6=" %3Ctd nowrap%3E" +HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E" +HTMLLine8=" %3C%%HTML_TAG%%%3E" +HTMLLine9=" %3C/font%3E" +HTMLLine10=" %3C/td%3E" +HTMLLine11=" %3C/tr%3E" +HTMLLine12=" %3C/table%3E" +HTMLLine13=" %3C/body%3E" +HTMLLine14="%3C/html%3E" +AutoCrashOperation=1 +AutoCrashNumber=10 +AutoCrashMinutes=1 +WebURL= +WebUserID= +WebPassword= +WebPort=0 +AttachedFiles= +Count=0 +EMail Message Line Count=0 +loNoDuplicateErrors=0 +loAppendReproduceText=0 +loDeleteLogAtVersionChange=0 +loAddComputerNameInLogFileName=0 +loSaveModulesSection=1 +loSaveCPUSection=1 +soAppStartDate=1 +soAppName=1 +soAppVersionNumber=1 +soAppParameters=1 +soAppCompilationDate=1 +soExcDate=1 +soExcAddress=1 +soExcModule=1 +soExcType=1 +soExcMessage=1 +soActCtlsFormClass=1 +soActCtlsFormText=1 +soActCtlsControlClass=1 +soActCtlsControlText=1 +soCmpName=1 +soCmpUser=1 +soCmpTotalMemory=1 +soCmpFreeMemory=1 +soCmpTotalDisk=1 +soCmpFreeDisk=1 +soCmpSysUpTime=1 +soCmpProcessor=1 +soCmpDisplayMode=1 +soOSType=1 +soOSBuildN=1 +soOSUpdate=1 +soOSLanguage=1 +soNetIP=1 +soNetSubmask=1 +soNetGateway=1 +soNetDNS1=1 +soNetDNS2=1 +soNetDHCP=1 +sndShowSendDialog=1 +sndShowSuccessFailureMsg=0 +sndSendEntireLog=0 +sndSendXMLLogCopy=0 +sndSendScreenshot=1 +sndUseOnlyActiveWindow=0 +sndSendLastHTMLPage=1 +sndSendInSeparatedThread=0 +sndAddDateInFileName=0 +sndCompressAllFiles=0 +edoShowExceptionDialog=1 +edoSendEmailChecked=1 +edoAttachScreenshotChecked=1 +edoShowCopyToClipOption=1 +edoShowDetailsButton=1 +edoShowInDetailedMode=0 +edoShowInTopMostMode=0 +edoUseEurekaLogLookAndFeel=0 +csoShowDLLs=1 +csoShowBPLs=1 +csoShowBorlandThreads=1 +csoShowWindowsThreads=1 +csoShowProcedureOffset=0 +boActivateCrashDetection=0 +boPauseBorlandThreads=0 +boDoNotPauseMainThread=0 +boPauseWindowsThreads=0 +boUseMainModuleOptions=1 +boCopyLogInCaseOfError=1 +boSaveCompressedCopyInCaseOfError=0 +Count mtInformationMsgCaption=1 +mtInformationMsgCaption0="Information." +Count mtQuestionMsgCaption=1 +mtQuestionMsgCaption0="Question." +Count mtDialog_Caption=1 +mtDialog_Caption0="Error." +Count mtDialog_ErrorMsgCaption=2 +mtDialog_ErrorMsgCaption0="An error has occurred during program execution." +mtDialog_ErrorMsgCaption1="Please read the following information for further details." +Count mtDialog_GeneralCaption=1 +mtDialog_GeneralCaption0="General" +Count mtDialog_GeneralHeader=1 +mtDialog_GeneralHeader0="General Information" +Count mtDialog_CallStackCaption=1 +mtDialog_CallStackCaption0="Call Stack" +Count mtDialog_CallStackHeader=1 +mtDialog_CallStackHeader0="Call Stack Information" +Count mtDialog_ModulesCaption=1 +mtDialog_ModulesCaption0="Modules" +Count mtDialog_ModulesHeader=1 +mtDialog_ModulesHeader0="Modules Information" +Count mtDialog_CPUCaption=1 +mtDialog_CPUCaption0="CPU" +Count mtDialog_CPUHeader=1 +mtDialog_CPUHeader0="CPU Information" +Count mtDialog_CustomDataCaption=1 +mtDialog_CustomDataCaption0="Other" +Count mtDialog_CustomDataHeader=1 +mtDialog_CustomDataHeader0="Other Information" +Count mtDialog_OKButtonCaption=1 +mtDialog_OKButtonCaption0="&OK" +Count mtDialog_TerminateButtonCaption=1 +mtDialog_TerminateButtonCaption0="&Terminate" +Count mtDialog_RestartButtonCaption=1 +mtDialog_RestartButtonCaption0="&Restart" +Count mtDialog_DetailsButtonCaption=1 +mtDialog_DetailsButtonCaption0="&Details" +Count mtDialog_SendMessage=1 +mtDialog_SendMessage0="&Send this error via Internet" +Count mtDialog_ScreenshotMessage=1 +mtDialog_ScreenshotMessage0="&Attach a Screenshot image" +Count mtDialog_CopyMessage=1 +mtDialog_CopyMessage0="&Copy to Clipboard" +Count mtDialog_SupportMessage=1 +mtDialog_SupportMessage0="Go to the Support Page" +Count mtLog_AppHeader=1 +mtLog_AppHeader0="Application" +Count mtLog_AppStartDate=1 +mtLog_AppStartDate0="Start Date" +Count mtLog_AppName=1 +mtLog_AppName0="Name/Description" +Count mtLog_AppVersionNumber=1 +mtLog_AppVersionNumber0="Version Number" +Count mtLog_AppParameters=1 +mtLog_AppParameters0="Parameters" +Count mtLog_AppCompilationDate=1 +mtLog_AppCompilationDate0="Compilation Date" +Count mtLog_ExcHeader=1 +mtLog_ExcHeader0="Exception" +Count mtLog_ExcDate=1 +mtLog_ExcDate0="Date" +Count mtLog_ExcAddress=1 +mtLog_ExcAddress0="Address" +Count mtLog_ExcModule=1 +mtLog_ExcModule0="Module" +Count mtLog_ExcType=1 +mtLog_ExcType0="Type" +Count mtLog_ExcMessage=1 +mtLog_ExcMessage0="Message" +Count mtLog_ActCtrlsHeader=1 +mtLog_ActCtrlsHeader0="Active Controls" +Count mtLog_ActCtrlsFormClass=1 +mtLog_ActCtrlsFormClass0="Form Class" +Count mtLog_ActCtrlsFormText=1 +mtLog_ActCtrlsFormText0="Form Text" +Count mtLog_ActCtrlsControlClass=1 +mtLog_ActCtrlsControlClass0="Control Class" +Count mtLog_ActCtrlsControlText=1 +mtLog_ActCtrlsControlText0="Control Text" +Count mtLog_CmpHeader=1 +mtLog_CmpHeader0="Computer" +Count mtLog_CmpName=1 +mtLog_CmpName0="Name" +Count mtLog_CmpUser=1 +mtLog_CmpUser0="User" +Count mtLog_CmpTotalMemory=1 +mtLog_CmpTotalMemory0="Total Memory" +Count mtLog_CmpFreeMemory=1 +mtLog_CmpFreeMemory0="Free Memory" +Count mtLog_CmpTotalDisk=1 +mtLog_CmpTotalDisk0="Total Disk" +Count mtLog_CmpFreeDisk=1 +mtLog_CmpFreeDisk0="Free Disk" +Count mtLog_CmpSystemUpTime=1 +mtLog_CmpSystemUpTime0="System Up Time" +Count mtLog_CmpProcessor=1 +mtLog_CmpProcessor0="Processor" +Count mtLog_CmpDisplayMode=1 +mtLog_CmpDisplayMode0="Display Mode" +Count mtLog_OSHeader=1 +mtLog_OSHeader0="Operating System" +Count mtLog_OSType=1 +mtLog_OSType0="Type" +Count mtLog_OSBuildN=1 +mtLog_OSBuildN0="Build #" +Count mtLog_OSUpdate=1 +mtLog_OSUpdate0="Update" +Count mtLog_OSLanguage=1 +mtLog_OSLanguage0="Language" +Count mtLog_NetHeader=1 +mtLog_NetHeader0="Network" +Count mtLog_NetIP=1 +mtLog_NetIP0="IP Address" +Count mtLog_NetSubmask=1 +mtLog_NetSubmask0="Submask" +Count mtLog_NetGateway=1 +mtLog_NetGateway0="Gateway" +Count mtLog_NetDNS1=1 +mtLog_NetDNS10="DNS 1" +Count mtLog_NetDNS2=1 +mtLog_NetDNS20="DNS 2" +Count mtLog_NetDHCP=1 +mtLog_NetDHCP0="DHCP" +Count mtLog_CustInfoHeader=1 +mtLog_CustInfoHeader0="Custom Information" +Count mtCallStack_Address=1 +mtCallStack_Address0="Address" +Count mtCallStack_Name=1 +mtCallStack_Name0="Module" +Count mtCallStack_Unit=1 +mtCallStack_Unit0="Unit" +Count mtCallStack_Class=1 +mtCallStack_Class0="Class" +Count mtCallStack_Procedure=1 +mtCallStack_Procedure0="Procedure/Method" +Count mtCallStack_Line=1 +mtCallStack_Line0="Line" +Count mtCallStack_MainThread=1 +mtCallStack_MainThread0="Main" +Count mtCallStack_ExceptionThread=1 +mtCallStack_ExceptionThread0="Exception Thread" +Count mtCallStack_RunningThread=1 +mtCallStack_RunningThread0="Running Thread" +Count mtCallStack_CallingThread=1 +mtCallStack_CallingThread0="Calling Thread" +Count mtCallStack_ThreadID=1 +mtCallStack_ThreadID0="ID" +Count mtCallStack_ThreadPriority=1 +mtCallStack_ThreadPriority0="Priority" +Count mtCallStack_ThreadClass=1 +mtCallStack_ThreadClass0="Class" +Count mtSendDialog_Caption=1 +mtSendDialog_Caption0="Send." +Count mtSendDialog_Message=1 +mtSendDialog_Message0="Message" +Count mtSendDialog_Resolving=1 +mtSendDialog_Resolving0="Resolving DNS..." +Count mtSendDialog_Connecting=1 +mtSendDialog_Connecting0="Connecting with server..." +Count mtSendDialog_Connected=1 +mtSendDialog_Connected0="Connected with server." +Count mtSendDialog_Sending=1 +mtSendDialog_Sending0="Sending message..." +Count mtReproduceDialog_Caption=1 +mtReproduceDialog_Caption0="Request" +Count mtReproduceDialog_Request=1 +mtReproduceDialog_Request0="Please describe the steps to reproduce the error:" +Count mtReproduceDialog_OKButtonCaption=1 +mtReproduceDialog_OKButtonCaption0="&OK" +Count mtModules_Handle=1 +mtModules_Handle0="Handle" +Count mtModules_Name=1 +mtModules_Name0="Name" +Count mtModules_Description=1 +mtModules_Description0="Description" +Count mtModules_Version=1 +mtModules_Version0="Version" +Count mtModules_Size=1 +mtModules_Size0="Size" +Count mtModules_LastModified=1 +mtModules_LastModified0="Modified" +Count mtModules_Path=1 +mtModules_Path0="Path" +Count mtCPU_Registers=1 +mtCPU_Registers0="Registers" +Count mtCPU_Stack=1 +mtCPU_Stack0="Stack" +Count mtCPU_MemoryDump=1 +mtCPU_MemoryDump0="Memory Dump" +Count mtSend_SuccessMsg=1 +mtSend_SuccessMsg0="The message was sent successfully." +Count mtSend_FailureMsg=1 +mtSend_FailureMsg0="Sorry, sending the message didn't work." + + diff --git a/Base/BaseD7.dpk b/Base/BaseD7.dpk new file mode 100644 index 0000000..49e7557 --- /dev/null +++ b/Base/BaseD7.dpk @@ -0,0 +1,123 @@ +package BaseD7; + +{$R *.res} +{$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 OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + vcldb, + GUISDK_D7, + vcljpg, + dbrtl, + dsnap, + vcldb, + PNG_D7, + PngComponentsD7, + JvCoreD7R, + JvStdCtrlsD7R, + JvPageCompsD7R, + cxLibraryVCLD7, + dxThemeD7, + cxEditorsVCLD7, + cxDataD7, + cxExtEditorsVCLD7, + cxGridVCLD7, + cxPageControlVCLD7, + tb2k_d7, + tbx_d7, + vclx, + vclactnband, + designide, + cxExportVCLD7, + adortl, + JvSystemD7R, + dxPSCoreD7, + dxPScxCommonD7, + dxPScxGridLnkD7, + cxIntlPrintSys3D7, + dxBarD7, + dxBarExtItemsD7, + cxIntl5D7, + DataAbstract_D7, + dxPsPrVwAdvD7, + ccpack70, + JvMMD7R, + JvCtrlsD7R, + tee, + frx7, + fs7, + frxe7, + dxLayoutControlD7, + JvAppFrmD7R, + dxComnD7, + cfpack, + dxPSLnksD7, + vclshlctrls, + dclcxLibraryVCLD7, + visualclx, + fqb70, + bdertl, + Jcl, + JclVcl, + teeui, + fsTee7, + frxTee7; + +contains + uDataModuleBase in 'uDataModuleBase.pas' {dmBase: TDAClientDataModule}, + uEditorBase in 'uEditorBase.pas' {fEditorBase}, + uEditorGrid in 'uEditorGrid.pas' {fEditorGrid}, + uEditorItem in 'uEditorItem.pas' {fEditorItem}, + uDataTableUtils in 'uDataTableUtils.pas', + uEditorUtils in 'uEditorUtils.pas', + uEditorPreview in 'uEditorPreview.pas' {fEditorPreview}, + uViewPreview in 'uViewPreview.pas' {frViewPreview: TFrame}, + uViewBase in 'uViewBase.pas' {frViewBase: TCustomView}, + uViewDireccion in 'uViewDireccion.pas' {frViewDireccion: TCustomView}, + uViewGrid in 'uViewGrid.pas' {frViewGrid: TCustomView}, + uViewInternet in 'uViewInternet.pas' {frViewInternet: TCustomView}, + uViewTelefonos in 'uViewTelefonos.pas' {frViewTelefonos: TCustomView}, + uEditorDBBase in 'uEditorDBBase.pas' {fEditorDBBase: TCustomEditor}, + uEditorDBItem in 'uEditorDBItem.pas' {fEditorDBItem: TCustomEditor}, + uExceptions in 'uExceptions.pas', + uViewBarraSeleccion in 'uViewBarraSeleccion.pas' {frViewBarraSeleccion: TFrame}, + uBizImportesDetalleBase in 'uBizImportesDetalleBase.pas', + uBizImportesCabeceraBase in 'uBizImportesCabeceraBase.pas', + uViewObservaciones in 'uViewObservaciones.pas' {frViewObservaciones: TFrame}, + uDBSelectionList in 'uDBSelectionList.pas', + uConfigurarConexion in 'uConfigurarConexion.pas' {fConfigurarConexion}, + uBizInformesBase in 'uBizInformesBase.pas', + uSysFunc in 'uSysFunc.pas', + uEditorPSPreview in 'uEditorPSPreview.pas' {Form1}, + uUtils in 'uUtils.pas', + InfoProject in 'InfoProject.pas', + uViewContenido in 'uViewContenido.pas' {frViewContenido: TCustomView}, + uViewDetallesFamilias in 'uViewDetallesFamilias.pas' {frViewDetallesFamilias: TCustomView}, + uViewTotales in 'uViewTotales.pas' {frViewTotales: TCustomView}, + uViewFormaPago in 'uViewFormaPago.pas' {frViewFormaPago: TCustomView}, + uViewDetallesNormales in 'uViewDetallesNormales.pas' {frViewDetallesNormales: TCustomView}; + +end. diff --git a/Base/BaseD7.drc b/Base/BaseD7.drc new file mode 100644 index 0000000..82e626f --- /dev/null +++ b/Base/BaseD7.drc @@ -0,0 +1,16 @@ +/* VER150 + Generated by the Borland Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +#define uROWinInetHttpChannel_sxInvalidURLformat 65520 +STRINGTABLE +BEGIN + uROWinInetHttpChannel_sxInvalidURLformat, "Invalid URL format" +END + diff --git a/Base/BaseD7.drc2 b/Base/BaseD7.drc2 new file mode 100644 index 0000000..82e626f --- /dev/null +++ b/Base/BaseD7.drc2 @@ -0,0 +1,16 @@ +/* VER150 + Generated by the Borland Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +#define uROWinInetHttpChannel_sxInvalidURLformat 65520 +STRINGTABLE +BEGIN + uROWinInetHttpChannel_sxInvalidURLformat, "Invalid URL format" +END + diff --git a/Base/BaseD7.res b/Base/BaseD7.res new file mode 100644 index 0000000..ec5f233 Binary files /dev/null and b/Base/BaseD7.res differ diff --git a/Base/InfoProject.pas b/Base/InfoProject.pas new file mode 100644 index 0000000..f9d8ced --- /dev/null +++ b/Base/InfoProject.pas @@ -0,0 +1,187 @@ +{ +=============================================================================== + Copyright (©) 2005. Rodax Software. +=============================================================================== + Los contenidos de este fichero son propiedad de Rodax Software titular del + copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, + en su totalidad o en parte, con el permiso escrito de Rodax Software, o de + acuerdo con los términos y condiciones establecidas en el acuerdo/contrato + bajo el que se suministra. + ----------------------------------------------------------------------------- + Web: www.rodax-software.com +=============================================================================== + Fecha primera versión: 17-05-2005 + Versión actual: 1.0.0 + Fecha versión actual: 17-05-2005 +=============================================================================== + Modificaciones: + + Fecha Comentarios + --------------------------------------------------------------------------- +=============================================================================== +} +unit InfoProject; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; + +type + TInfoProject = class(TComponent) + private + { Private declarations } + FFVIBuff: Pointer; + FFVISize: DWord; + FHandle: DWord; + FFileName: String; + FLanguage: Word; + FCodePage: Word; + FLanguageCodePage: String; + FCompanyName: String; + FFileDescription: String; + FFileVersion: String; + FInternalName: String; + FLegalCopyright: String; + FLegalTradeMarks: String; + FOriginalFileName: String; + FProductName: String; + FProductVersion: String; + FComments: String; + procedure ReadFixedFileInfo; + function GetLangCPage: String; + function GetStringFileInfo(S: String): String; + procedure SetFileName(const Value: String); + protected + { Protected declarations } + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + function LanguageStr(Language: Word): String; + property FileName: String read FFileName write SetFileName; + property Language: Word read FLanguage; + property CodePage: Word read FCodePage; + property LanguageCodePage: String read FLanguageCodePage; + property CompanyName: String read FCompanyName; + property FileDescription: String read FFileDescription; + property FileVersion: String read FFileVersion; + property InternalName: String read FInternalName; + property LegalCopyright: String read FLegalCopyright; + property LegalTradeMarks: String read FLegalTradeMarks; + property OriginalFileName: String read FOriginalFileName; + property ProductName: String read FProductName; + property ProductVersion: String read FProductVersion; + property Comments: String read FComments; + published + { Published declarations } + end; + +implementation + +{ TInfoProject } + +constructor TInfoProject.Create(AOwner: TComponent); +begin { of TInfoProject.Create } + inherited Create(AOwner); + + { build current EXE filename } + FileName := ParamStr(0); +end; { of TInfoProject.Create } + +procedure TInfoProject.ReadFixedFileInfo; +begin { of TInfoProject.ReadFixedFileInfo } + { determine size of buffer required } + FFVISize := GetFileVersionInfoSize(PChar(FileName), FHandle); + + { create buffer } + GetMem(FFVIBuff, FFVISize); + try + + { load buffer } + GetFileVersionInfo(PChar(FileName), FHandle, FFVISize, FFVIBuff); + + { extract the language/codepage info } + FLanguageCodePage := GetLangCPage; + + { extract the other info } + FCompanyName := GetStringFileInfo('CompanyName'); + FFileDescription := GetStringFileInfo('FileDescription'); + FFileVersion := GetStringFileInfo('FileVersion'); + FInternalName := GetStringFileInfo('InternalName'); + FLegalCopyright := GetStringFileInfo('LegalCopyright'); + FLegalTradeMarks := GetStringFileInfo('LegalTradeMarks'); + FOriginalFileName := GetStringFileInfo('OriginalFileName'); + FProductName := GetStringFileInfo('ProductName'); + FProductVersion := GetStringFileInfo('ProductVersion'); + FComments := GetStringFileInfo('Comments'); + + finally + { dispose buffer } + FreeMem(FFVIBuff, FFVISize); + end; +end; { of TInfoProject.ReadFixedFileInfo } + +function TInfoProject.LanguageStr(Language: Word): String; +var + P: array[0..255] of Char; + Len: Word; +begin { of TInfoProject.LanguageStr } + Len := VerLanguageName(Language, P, SizeOf(P)); + if (Len > SizeOf(P)) then + begin + { if this occurs then the P buffer is too small } + { so we will truncate the returned string } + Len := SizeOf(P); + end; + SetString(Result, P, Len); +end; { of TInfoProject.LanguageStr } + +function TInfoProject.GetLangCPage: String; +var + SearchString: String; + FVILang: array of Byte; + Len: DWORD; +begin { of TInfoProject.GetLangCPage } + Result := '00000000'; + if (FFVIBuff <> NIL) then + begin + SearchString := '\VarFileInfo\Translation'; + if VerQueryValue(FFVIBuff, PChar(SearchString), + Pointer(FVILang), Len) then + begin + FLanguage := FVILang[0] + FVILang[1]*$100; + FCodePage := FVILang[2] + FVILang[3]*$100; + Result := IntToHex(FLanguage, 4) + IntToHex(FCodePage, 4); + end; + end; +end; { of TInfoProject.GetLangCPage } + +function TInfoProject.GetStringFileInfo(S: String): String; +var + SearchString: String; + P: PChar; + Len: DWORD; +begin { of TInfoProject.GetStringFileInfo } + Result := ''; + if (FFVIBuff <> NIL) then + begin + SearchString := '\StringFileInfo\'+FLanguageCodePage+'\'+S; + if VerQueryValue(FFVIBuff, PChar(SearchString), Pointer(P), Len) then + begin + { coded with StrLen to ditch the trailing #0 character } + SetString(Result, P, StrLen(P)); + end; + end; +end; { of TInfoProject.GetStringFileInfo } + +procedure TInfoProject.SetFileName(const Value: String); +begin { of TInfoProject.SetFileName } + FFileName := ExpandUNCFileName(Value); + + { read fileinfo from this new file } + ReadFixedFileInfo; + +end; { of TInfoProject.SetFileName } + +end. + diff --git a/Base/uBizImportesCabeceraBase.pas b/Base/uBizImportesCabeceraBase.pas new file mode 100644 index 0000000..8122119 --- /dev/null +++ b/Base/uBizImportesCabeceraBase.pas @@ -0,0 +1,166 @@ +unit uBizImportesCabeceraBase; + +interface + +uses + uDAInterfaces, uDADataTable; + +type + IBizImportesCabecera = interface(IDAStronglyTypedDataTable) + ['{566EE7D3-EE6D-4B01-B327-92E288A0C5A0}'] + procedure RecalcularImporte; + end; + + TBizIVAFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizDescuentoFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizBaseImponibleFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + +procedure RecalcularImportesCabecera(aDataTable : TDADataTable); overload; +procedure RecalcularImportesCabecera(aMasterTable, aDetailTable : TDADataTable); overload; + +implementation + +uses + SysUtils, DB, uBizImportesDetalleBase; + +const + fld_BASEIMPONIBLE = 'BASEIMPONIBLE'; + fld_IVA = 'IVA'; + fld_IMPORTEIVA = 'IMPORTEIVA'; + fld_DESCUENTO = 'DESCUENTO'; + fld_IMPORTEDESCUENTO = 'IMPORTEDESCUENTO'; + fld_IMPORTETOTAL = 'IMPORTETOTAL'; + +procedure RecalcularImportesCabecera(aDataTable : TDADataTable); +{ Recalcula todos los importes de la cabecera a partir de la base imponible } +var + BIField : TDAField; + IDField : TDAField; + DTOField : TDAField; + IVAField : TDAField; + IIField : TDAField; + ITField : TDAField; + EnEdicion : Boolean; +begin + BIField := aDataTable.FindField(fld_BASEIMPONIBLE); + if not Assigned(BIField) then + raise Exception.Create('Campo BASEIMPONIBLE no encontrado (CalcularImportes)'); + + IDField := aDataTable.FindField(fld_IMPORTEDESCUENTO); + if not Assigned(IDField) then + raise Exception.Create('Campo IMPORTEDESCUENTO no encontrado (CalcularImportes)'); + + DTOField := aDataTable.FindField(fld_DESCUENTO); + if not Assigned(DTOField) then + raise Exception.Create('Campo DESCUENTO no encontrado (CalcularImportes)'); + + IVAField := aDataTable.FindField(fld_IVA); + if not Assigned(IVAField) then + raise Exception.Create('Campo IVA no encontrado (CalcularImportes)'); + + IIField := aDataTable.FindField(fld_IMPORTEIVA); + if not Assigned(IIField) then + raise Exception.Create('Campo IMPORTEIVA no encontrado (CalcularImportes)'); + + ITField := aDataTable.FindField(fld_IMPORTETOTAL); + if not Assigned(ITField) then + raise Exception.Create('Campo IMPORTETOTAL no encontrado (CalcularImportes)'); + + // ¿Viene en modo edición? + EnEdicion := (aDataTable.State in dsEditModes); + + if not EnEdicion then + aDataTable.Edit; + + IDField.Value := BIField.AsCurrency * (DTOField.AsInteger/100); + ITField.Value := BIField.AsCurrency - IDField.AsCurrency; + IIField.Value := ITField.AsCurrency * (IVAField.AsInteger/100); + ITField.Value := ITField.AsCurrency + IIField.AsCurrency; + + if EnEdicion then + aDataTable.Edit; // Para dejar la tabla como estaba otra vez +end; + +procedure RecalcularImportesCabecera(aMasterTable, aDetailTable : TDADataTable); +{ Recalcula todos los importes de la cabecera a partir de los detalles } +var + aDetalle : IBizImportesDetalle; + BIField : TDAField; + EnEdicion : Boolean; +begin + BIField := aMasterTable.FindField(fld_BASEIMPONIBLE); + if not Assigned(BIField) then + raise Exception.Create('Campo BASEIMPONIBLE no encontrado (CalcularImportes)'); + + // ¿Viene en modo edición? + EnEdicion := (aMasterTable.State in dsEditModes); + + if not EnEdicion then + aMasterTable.Edit; + + BIField.Value := 0; + if aDetailTable.RecordCount > 0 then + if Supports(aDetailTable, IBizImportesDetalle, aDetalle) then + BIField.Value := aDetalle.DarSumaTotalImportes; + + RecalcularImportesCabecera(aMasterTable); + + if EnEdicion then + aMasterTable.Edit; // Para dejar la tabla como estaba otra vez +end; + + + +{ TBizIVAFieldRules } + +procedure TBizIVAFieldRules.OnChange(Sender: TDACustomField); +var + aCabecera : IBizImportesCabecera; +begin + inherited; + if Supports(DataTable, IBizImportesCabecera, aCabecera) then + aCabecera.RecalcularImporte; +end; + +{ TBizDescuentoFieldRules } + +procedure TBizDescuentoFieldRules.OnChange(Sender: TDACustomField); +var + aCabecera : IBizImportesCabecera; +begin + inherited; + if Supports(DataTable, IBizImportesCabecera, aCabecera) then + aCabecera.RecalcularImporte; +end; + +{ TBizBaseImponibleFieldRules } + +procedure TBizBaseImponibleFieldRules.OnChange(Sender: TDACustomField); +var + aCabecera : IBizImportesCabecera; +begin + inherited; + if Supports(DataTable, IBizImportesCabecera, aCabecera) then + aCabecera.RecalcularImporte; +end; + +initialization + RegisterFieldRules('Client.Field.Descuento', TBizDescuentoFieldRules); + RegisterFieldRules('Client.Field.IVA', TBizIVAFieldRules); + RegisterFieldRules('Client.Field.BaseImponible', TBizBaseImponibleFieldRules); + +finalization + +end. diff --git a/Base/uBizImportesDetalleBase.pas b/Base/uBizImportesDetalleBase.pas new file mode 100644 index 0000000..deb3509 --- /dev/null +++ b/Base/uBizImportesDetalleBase.pas @@ -0,0 +1,1003 @@ +unit uBizImportesDetalleBase; + +interface + +uses + uDAInterfaces, uDADataTable; + +const + TIPODETALLE_CONCEPTO = 'C'; + TIPODETALLE_TITULO = 'T'; + TIPODETALLE_SUBTOTAL = 'S'; + + VISIBLE_TRUE = 'S'; + VISIBLE_FALSE = 'N'; + + fld_NUMCONCEPTO = 'NUMCONCEPTO'; + fld_POSICION = 'POSICION'; + fld_TIPODETALLE = 'TIPO'; + fld_IMPORTETOTAL = 'IMPORTETOTAL'; + fld_CANTIDAD = 'CANTIDAD'; + fld_IMPORTEUNIDAD = 'IMPORTEUNIDAD'; + fld_VISIBLE = 'VISIBLE'; + fld_DESCRIPCION = 'DESCRIPCION'; + fld_PUNTOS = 'PUNTOS'; + fld_IMPORTEPUNTOS = 'IMPORTEPUNTOS'; + +type + { IMPORTANTE ********************************************************** + PARCHE TEMPORAL -> Para evitar que se disparen los eventos de la clase + de negocio cuando se hace el CancelUpdates de los detalles (se restaura + la tabla a partir de los deltas y esto provoca que se disparen los eventos y + se producen muchos fallos } + IParche = interface + ['{275F080F-054E-4E5A-BDF2-FE3494790388}'] + procedure ActivarEventos; + procedure DesactivarEventos; + procedure Refrescar; + function PuedoLanzarEvento : Boolean; + end; + + + IBizImportesDetalle = interface(IDAStronglyTypedDataTable) + ['{16A36AC3-FABD-4809-A238-A806F1D02B95}'] + procedure RecalcularImporte; + function DarSumaTotalImportes : Currency; + end; + + IBizPuntosDetalle = interface(IBizImportesDetalle) + ['{72002878-BD11-4BB8-AB85-73E321A6D595}'] + end; + + IBizVisibleDetalle = interface(IDAStronglyTypedDataTable) + ['{6BA5B3BF-2E92-4465-A328-60F90F7EA3D2}'] + end; + + TBizCantidadFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizImporteUnidadFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizTipoDetalleFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizPuntosFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizImportePuntosFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + + TBizVisibleFieldRules = class(TDAFieldRules) + protected + procedure OnChange(Sender: TDACustomField); override; + end; + +function DarMaximoNumConcepto(aDataTable : TDADataTable): integer; +function DarMaximaPosicion(aDataTable : TDADataTable): integer; +procedure IntercambiarPosiciones(aDataTable : TDADataTable; Pos1, Pos2 : Integer); +procedure ReasignarPosiciones(aDataTable : TDADataTable); +procedure AsignarPosicion(aDataTable : TDADataTable; IsAppend : Boolean); + +procedure AsignarNumConcepto(aDataTable : TDADataTable); + +procedure RecalcularImporteDetalle(aDataTable : TDADataTable; TieneSubtotales : Boolean; TienePuntos : Boolean); +procedure RecalcularSubtotales(aDataTable : TDADataTable); +function DarTotalDetalles(aDataTable : TDADataTable; TieneSubtotales : Boolean; TienePuntos : Boolean) : Currency; + +procedure RellenarImportePuntosEnCapitulo(aDataTable : TDADataTable); + +procedure RellenarVisibleEnCapitulo(aDataTable : TDADataTable); + + +implementation + +uses + SysUtils, DB, uBizImportesCabeceraBase, Controls, Forms, Dialogs, variants; + +procedure IntercambiarPosiciones(aDataTable : TDADataTable; Pos1, Pos2 : Integer); +{ Intercambia los valores del campo 'POSICION' de dos filas } +var + ABookmark : Pointer; + AField : TDAField; + AFieldTipo : TDAField; + ACursor: TCursor; + bRecalcularSubtotales : Boolean; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (IntercambiarPosicion)'); + + AField := aDataTable.FindField(fld_POSICION); + if not Assigned(AField) then + raise Exception.Create('Campo POSICION no encontrado (IntercambiarPosicion)'); + + // No importa si el TIPO no está en la lista de columnas + AFieldTipo := aDataTable.FindField(fld_TIPODETALLE); + + if (aDataTable.State in dsEditModes) then + aDataTable.Post; + + bRecalcularSubtotales := False; + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + //aDataTable.DisableEventHandlers; <- No descomentar + aDataTable.DisableControls; + ABookmark := aDataTable.GetBookMark; + try + aDataTable.First; + if aDataTable.Locate(fld_POSICION, Pos1, []) then + begin + // Si alguna de las dos filas es un subtotal, hay que recalcular todo + if Assigned(AFieldTipo) and ((AFieldTipo.AsString = TIPODETALLE_SUBTOTAL) or + (AFieldTipo.AsString = TIPODETALLE_TITULO)) then + bRecalcularSubtotales := True; + + aDataTable.Edit; + AField.AsInteger := 0; // Ponemos el 0 temporalmente + aDataTable.Post; + + aDataTable.First; + if aDataTable.Locate(fld_POSICION, Pos2, []) then + begin + // Si alguna de las dos filas es un subtotal, hay que recalcular todo + if Assigned(AFieldTipo) and ((AFieldTipo.AsString = TIPODETALLE_SUBTOTAL) or + (AFieldTipo.AsString = TIPODETALLE_TITULO)) then + bRecalcularSubtotales := True; + + aDataTable.Edit; + AField.AsInteger := Pos1; + aDataTable.Post; + + aDataTable.First; + aDataTable.Locate(fld_POSICION, 0, []); + aDataTable.Edit; + AField.AsInteger := Pos2; + aDataTable.Post; + end + else + raise Exception.Create('No se ha encontrado posición 2 (IntercambiarPosicion)'); + end + else + raise Exception.Create('No se ha encontrado posición 1 (IntercambiarPosicion)'); + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; + //aDataTable.EnableEventHandlers; <- No descomentar + if bRecalcularSubtotales then + RecalcularSubtotales(aDataTable); + Screen.Cursor := ACursor; + end; +end; + + +function DarMaximoNumConcepto(aDataTable : TDADataTable): integer; +{ Devuelve el valor máximo del campo 'NUMCONCEPTO' } +var + ABookmark : Pointer; + AField : TDAField; + ACursor: TCursor; +begin + Result := 0; + + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (DarMaximoNumConcepto)'); + + if aDataTable.RecordCount < 1 then + Exit; + + AField := aDataTable.FindField(fld_NUMCONCEPTO); + if not Assigned(AField) then + raise Exception.Create('Campo NUMCONCEPTO no encontrado (DarMaximoNumConcepto)'); + + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + ABookmark := aDataTable.GetBookMark; + try + aDataTable.DisableControls; + aDataTable.DisableEventHandlers; + aDataTable.First; + while not aDataTable.Eof do + begin + if AField.AsInteger > Result then + Result := AField.AsInteger; + aDataTable.Next; + end; + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; + aDataTable.EnableEventHandlers; + Screen.Cursor := ACursor; + end; +end; + +function DarMaximaPosicion(aDataTable : TDADataTable): integer; +{ Devuelve el valor máximo del campo 'POSICION' } +var + ABookmark : Pointer; + AField : TDAField; + ACursor: TCursor; +begin + //Sort(['ForeignKeyFieldofMasterDetailRelation','YourSortField'],[sdAscending, NeededOrder ]); + Result := 0; + + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (DarMaximaPosicion)'); + + if aDataTable.RecordCount < 1 then + Exit; + + AField := aDataTable.FindField(fld_POSICION); + if not Assigned(AField) then + raise Exception.Create('Campo POSICION no encontrado (DarMaximaPosicion)'); + + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + ABookmark := aDataTable.GetBookMark; + try + aDataTable.DisableControls; + aDataTable.DisableEventHandlers; + aDataTable.First; + while not aDataTable.Eof do + begin + if AField.AsInteger > Result then + Result := AField.AsInteger; + aDataTable.Next; + end; + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; + aDataTable.EnableEventHandlers; + Screen.Cursor := ACursor; + end; +end; + +procedure ReasignarPosiciones(aDataTable : TDADataTable); +{ Recalcula el valor del campo 'POSICION' de todas las filas + para eliminar huecos } +var + AField : TDAField; + ABookmark : Pointer; + Contador : Integer; + NumCon : Integer; + TotalConceptos : Integer; + DetallesEditados : Integer; + ACursor: TCursor; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (ReasignarNumConceptos)'); + + if aDataTable.RecordCount < 1 then + Exit; + + AField := aDataTable.FindField(fld_POSICION); + if not Assigned(AField) then + raise Exception.Create('Campo POSICION no encontrado (ReasignarNumConceptos)'); + + Contador := 1; + NumCon := 1; + TotalConceptos := aDataTable.RecordCount; + DetallesEditados := 0; + + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + ABookmark := aDataTable.GetBookMark; + aDataTable.DisableControls; + //aDataTable.DisableEventHandlers; <-- No descomentar + try + aDataTable.First; + while DetallesEditados < TotalConceptos do + begin + if aDataTable.Locate(fld_POSICION, Contador, []) then + begin + aDataTable.Edit; + AField.Value := NumCon; + Inc(NumCon); + aDataTable.Post; + Inc(DetallesEditados); + aDataTable.First; + end; + Inc(Contador); + end; + finally + aDataTable.GotoBookmark(ABookmark); + //aDataTable.EnableEventHandlers; <-- No descomentar + aDataTable.EnableControls; + Screen.Cursor := ACursor; + end; +end; + +procedure AsignarPosicion(aDataTable : TDADataTable; IsAppend : Boolean); +{ Calcula el valor del campo 'POSICION' para una fila nueva. Incrementa en 1 + a las filas que estén por debajo de esa fila nueva } +var + AField : TDAField; + ABookmark : Pointer; + NumPosicion : Integer; + MaxPosicion : Integer; + ACursor: TCursor; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (AsignarPosicion)'); + + if aDataTable.RecordCount < 1 then + Exit; + + AField := aDataTable.FindField(fld_POSICION); + if not Assigned(AField) then + raise Exception.Create('Campo POSICION no encontrado (AsignarPosicion)'); + + if not IsAppend then + begin + if not aDataTable.IsEmpty then + begin + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + aDataTable.DisableControls; + // Mover las filas que están por debajo de la actual + MaxPosicion := DarMaximaPosicion(aDataTable); + NumPosicion := (AField.AsInteger * (-1)); + ABookmark := aDataTable.GetBookMark; + try + aDataTable.First; + while aDataTable.Locate(fld_POSICION, MaxPosicion, []) do + begin + aDataTable.Edit; + AField.Value := MaxPosicion + 1; + aDataTable.Post; + aDataTable.First; + if MaxPosicion = NumPosicion then + Break + else + Dec(MaxPosicion); + end + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; + Screen.Cursor := ACursor; + end; + end; + NumPosicion := (AField.AsInteger * (-1)); + end + else begin + if aDataTable.RecordCount > 1 then + NumPosicion := DarMaximaPosicion(aDataTable) + 1 + else + // Sólo hay una fila en toda la tabla + NumPosicion := (AField.AsInteger * (-1)); + end; + + // Asignar posición a la nueva fila + aDataTable.Edit; + AField.Value := NumPosicion; + aDataTable.Post; +end; + +procedure AsignarNumConcepto(aDataTable : TDADataTable); +{ Asigna el valor del campo 'NUMCONCEPTO' para una fila nueva } +var + AField : TDAField; + MaxConcepto : Integer; + ACursor: TCursor; + EnEdicion : Boolean; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (AsignarNumConcepto)'); + + if aDataTable.RecordCount < 1 then + Exit; + + AField := aDataTable.FindField(fld_NUMCONCEPTO); + if not Assigned(AField) then + raise Exception.Create('Campo NUMCONCEPTO no encontrado (AsignarNumConcepto)'); + + // ¿Viene en modo edición? + EnEdicion := (aDataTable.State in dsEditModes); + + MaxConcepto := DarMaximoNumConcepto(aDataTable); + + if not aDataTable.IsEmpty then + begin + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + aDataTable.DisableControls; + try + if not EnEdicion then + aDataTable.Edit; + AField.AsInteger := MaxConcepto + 1; + aDataTable.Post; + + if EnEdicion then + aDataTable.Edit; + finally + Screen.Cursor := ACursor; + aDataTable.EnableControls; + end; + end; +end; + + +procedure RecalcularImporteDetalle(aDataTable : TDADataTable; TieneSubtotales : Boolean; TienePuntos : Boolean); +var + TipoField : TDAField; + TotalField : TDAField; + CantidadField : TDAField; + ImporteUnidadField : TDAField; + PuntosField : TDAField; + ImportePuntosField : TDAField; + EnEdicion : Boolean; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (RecalcularImporteDetalle)'); + + if aDataTable.RecordCount < 1 then + Exit; + + // ¿Viene en modo edición? + EnEdicion := (aDataTable.State in dsEditModes); + + TotalField := aDataTable.FindField(fld_IMPORTETOTAL); + if not Assigned(TotalField) then + raise Exception.Create('Campo IMPORTETOTAL no encontrado (RecalcularImporteDetalle)'); + + CantidadField := aDataTable.FindField(fld_CANTIDAD); + if not Assigned(CantidadField) then + raise Exception.Create('Campo CANTIDAD no encontrado (RecalcularImporteDetalle)'); + + ImporteUnidadField := aDataTable.FindField(fld_IMPORTEUNIDAD); + if not Assigned(ImporteUnidadField) then + raise Exception.Create('Campo IMPORTEUNIDAD no encontrado (RecalcularImporteDetalle)'); + + if TienePuntos then + begin + PuntosField := aDataTable.FindField(fld_PUNTOS); + if not Assigned(PuntosField) then + raise Exception.Create('Campo PUNTOS no encontrado (RecalcularImporteDetalle)'); + + ImportePuntosField := aDataTable.FindField(fld_IMPORTEPUNTOS); + if not Assigned(ImportePuntosField) then + raise Exception.Create('Campo IMPORTEPUNTOS no encontrado (RecalcularImporteDetalle)'); + end; + + if TieneSubtotales then + begin + TipoField := aDataTable.FindField(fld_TIPODETALLE); + if not Assigned(TipoField) then + raise Exception.Create('Campo TIPO no encontrado (RecalcularImporteDetalle)'); + end; + + // + if not EnEdicion then + aDataTable.Edit; + + aDataTable.DisableEventHandlers; + // Calcular el importe de la línea + try + if (TieneSubtotales) and ((TipoField.AsString = TIPODETALLE_SUBTOTAL) or + (TipoField.AsString = TIPODETALLE_TITULO)) then + begin + CantidadField.Value := NULL; + ImporteUnidadField.Value := NULL; + TotalField.Value := NULL; + + if (TienePuntos) then + begin + PuntosField.Value := NULL; + if (TipoField.AsString = TIPODETALLE_SUBTOTAL) then + ImportePuntosField.Value := NULL; + end; + end + else begin + if TienePuntos and + ((PuntosField.Value <> NULL) and (ImportePuntosField.Value <> NULL)) then + ImporteUnidadField.Value := PuntosField.AsInteger * ImportePuntosField.AsCurrency; + + TotalField.Value := CantidadField.AsCurrency * ImporteUnidadField.AsCurrency; + end; + finally + aDataTable.EnableEventHandlers; + if not EnEdicion then + aDataTable.Post; + end; +end; + +procedure RecalcularSubtotales(aDataTable : TDADataTable); +{ Recalcula el valor de todos los subtotales de la tabla } +var + ABookmark : Pointer; + APosicion : Integer; + MaxPos : Integer; + Total : Currency; + Subtotal : Currency; + TipoField : TDAField; + TotalField : TDAField; + ACursor: TCursor; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (RecalcularTodosSubtotales)'); + + if aDataTable.RecordCount < 1 then + Exit; + + TipoField := aDataTable.FindField(fld_TIPODETALLE); + if not Assigned(TipoField) then + raise Exception.Create('Campo TIPO no encontrado (RecalcularTodosSubtotales)'); + + TotalField := aDataTable.FindField(fld_IMPORTETOTAL); + if not Assigned(TotalField) then + raise Exception.Create('Campo IMPORTETOTAL no encontrado (RecalcularTodosSubtotales)'); + + ABookmark := aDataTable.GetBookMark; + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + aDataTable.DisableControls; +// aDataTable.DisableEventHandlers; <- No descomentar + + if (aDataTable.State in dsEditModes) then + aDataTable.Post; + + APosicion := 1; + Total := 0; + Subtotal := 0; + try + MaxPos := DarMaximaPosicion(aDataTable); + while (APosicion <= MaxPos) do + begin + aDataTable.First; + if aDataTable.Locate(fld_POSICION, APosicion, []) then + begin + if (TipoField.AsString = TIPODETALLE_TITULO) then + Subtotal := 0 + else if (TipoField.AsString = TIPODETALLE_SUBTOTAL) then + begin + try + aDataTable.Edit; + TotalField.Value := SubTotal; + aDataTable.Post; + Total := Total + SubTotal; + Subtotal := 0; + except + on E : Exception do + ShowMessage(E.Message); + end; + end + else begin + Subtotal := Subtotal + TotalField.AsCurrency; + if (APosicion = MaxPos) then + Total := Total + SubTotal; + end; + Inc(APosicion); + end + else + Break; + end; + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; +// aDataTable.EnableEventHandlers; <- No descomentar + Screen.Cursor := ACursor; + end; +end; + +function DarTotalDetalles(aDataTable : TDADataTable; TieneSubtotales : Boolean; TienePuntos : Boolean) : Currency; +{ Calcula el total de todos los detalles a partir del importe total de cada uno } +var + EnEdicion : Boolean; + ABookmark : Pointer; + APosicion : Integer; + MaxPos : Integer; + Total : Currency; + Subtotal : Currency; + TipoField : TDAField; + TotalField : TDAField; + ACursor: TCursor; +begin + Result := 0; + + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (DarTotalDetalles)'); + + if aDataTable.RecordCount < 1 then + Exit; + + if TieneSubtotales then + begin + TipoField := aDataTable.FindField(fld_TIPODETALLE); + if not Assigned(TipoField) then + raise Exception.Create('Campo TIPO no encontrado (DarTotalDetalles)'); + end; + + TotalField := aDataTable.FindField(fld_IMPORTETOTAL); + if not Assigned(TotalField) then + raise Exception.Create('Campo IMPORTETOTAL no encontrado (DarTotalDetalles)'); + + ABookmark := aDataTable.GetBookMark; + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + aDataTable.DisableControls; +// aDataTable.DisableEventHandlers; <- No descomentar + + // ¿Viene en modo edición? + EnEdicion := (aDataTable.State in dsEditModes); + + if EnEdicion then + aDataTable.Post; + + APosicion := 1; + Total := 0; + Subtotal := 0; + try + MaxPos := DarMaximaPosicion(aDataTable); + while (APosicion <= MaxPos) do + begin + aDataTable.First; + if aDataTable.Locate(fld_POSICION, APosicion, []) then + begin + if TieneSubtotales and (TipoField.AsString = TIPODETALLE_SUBTOTAL) then + begin + Total := Total + SubTotal; + Subtotal := 0; + end + else begin + Subtotal := Subtotal + TotalField.AsCurrency; + if (APosicion = MaxPos) then + Total := Total + SubTotal; + end; + Inc(APosicion); + end + else + Break; + end; + finally + Result := Total; + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; +// aDataTable.EnableEventHandlers; <- No descomentar + if EnEdicion then + aDataTable.Edit; + Screen.Cursor := ACursor; + end; +end; + + +procedure RellenarImportePuntosEnCapitulo(aDataTable : TDADataTable); +{ Rellena el importe de puntos a todos los conceptos de un capítulo. El cursor + está puesto en la fila que es el título. } +var + ABookmark : Pointer; + APosicion : Integer; + MaxPos : Integer; + ImportePuntos : Currency; + TipoField : TDAField; + PosicionField : TDAField; + ImportePuntosField : TDAField; + ACursor: TCursor; + EnEdicion : Boolean; + ADetalle : IBizImportesDetalle; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (RellenarImportePuntosEnCapitulo)'); + + if aDataTable.RecordCount < 1 then + Exit; + + if not Supports(aDataTable, IBizImportesDetalle, ADetalle) then + raise Exception.Create('La tabla no soporta la interfaz requerida (RellenarImportePuntosEnCapitulo)'); + + PosicionField := aDataTable.FindField(fld_POSICION); + if not Assigned(PosicionField) then + raise Exception.Create('Campo POSICION no encontrado (RellenarImportePuntosEnCapitulo)'); + + TipoField := aDataTable.FindField(fld_TIPODETALLE); + if not Assigned(TipoField) then + raise Exception.Create('Campo TIPO no encontrado (RellenarImportePuntosEnCapitulo)'); + + ImportePuntosField := aDataTable.FindField(fld_IMPORTEPUNTOS); + if not Assigned(ImportePuntosField) then + raise Exception.Create('Campo IMPORTEPUNTOS no encontrado (RellenarImportePuntosEnCapitulo)'); + + ABookmark := aDataTable.GetBookMark; + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + aDataTable.DisableControls; + + EnEdicion := (aDataTable.State in dsEditModes); + + if EnEdicion then + aDataTable.Post; + + APosicion := PosicionField.Value + 1; // La posición siguiente a la fila de TITULO + ImportePuntos := aDataTable.FindField(fld_IMPORTEPUNTOS).AsCurrency; // Importe de puntos de la fila de TITULO + + try + MaxPos := DarMaximaPosicion(aDataTable); + while (APosicion <= MaxPos) do + begin + if aDataTable.Locate(fld_POSICION, APosicion, []) then + begin + if (TipoField.AsString = TIPODETALLE_CONCEPTO) then + begin + aDataTable.Edit; + aDataTable.DisableEventHandlers; // Para que no salten otros eventos + try + ImportePuntosField.AsCurrency := ImportePuntos; + ADetalle.RecalcularImporte; + finally + aDataTable.EnableEventHandlers; + end; + aDataTable.Post; + Inc(APosicion); + end + else + break; // Es una fila de SUBTOTAL o de TITULO + end + else + raise Exception.Create('Hay un hueco en la numeración de posiciones'); + end; + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; + Screen.Cursor := ACursor; + if EnEdicion then + aDataTable.Edit; + end; +end; + + +procedure RellenarVisibleEnCapitulo(aDataTable : TDADataTable); +{ Rellena VISIBLE de todos los conceptos de un capítulo. El cursor + está puesto en la fila que es el título. } +var + ABookmark : Pointer; + APosicion : Integer; + MaxPos : Integer; + TipoField : TDAField; + PosicionField : TDAField; + VisibleField : TDAField; + ACursor: TCursor; + EnEdicion : Boolean; + EsVisible : String; +begin + if not Assigned(aDataTable) then + raise Exception.Create('Tabla no asignada (RellenarVisibleEnCapitulo)'); + + if aDataTable.RecordCount < 1 then + Exit; + + PosicionField := aDataTable.FindField(fld_POSICION); + if not Assigned(PosicionField) then + raise Exception.Create('Campo POSICION no encontrado (RellenarVisibleEnCapitulo)'); + + TipoField := aDataTable.FindField(fld_TIPODETALLE); + if not Assigned(TipoField) then + raise Exception.Create('Campo TIPO no encontrado (RellenarVisibleEnCapitulo)'); + + VisibleField := aDataTable.FindField(fld_VISIBLE); + if not Assigned(VisibleField) then + raise Exception.Create('Campo VISIBLE no encontrado (RellenarVisibleEnCapitulo)'); + + ABookmark := aDataTable.GetBookMark; + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + aDataTable.DisableControls; + + EnEdicion := (aDataTable.State in dsEditModes); + + if EnEdicion then + aDataTable.Post; + + APosicion := PosicionField.Value + 1; // La posición siguiente a la fila de TITULO + EsVisible := VisibleField.AsString; // Valor de VISIBLE de la fila de TITULO + + try + MaxPos := DarMaximaPosicion(aDataTable); + while (APosicion <= MaxPos) do + begin + if aDataTable.Locate(fld_POSICION, APosicion, []) then + begin + if (TipoField.AsString = TIPODETALLE_CONCEPTO) then + begin + aDataTable.Edit; + aDataTable.DisableEventHandlers; // Para que no salten otros eventos + try + VisibleField.AsString := EsVisible; + finally + aDataTable.EnableEventHandlers; + end; + aDataTable.Post; + Inc(APosicion); + end + else + break; // Es una fila de SUBTOTAL o de TITULO + end + else + raise Exception.Create('Hay un hueco en la numeración de posiciones'); + end; + finally + aDataTable.GotoBookmark(ABookmark); + aDataTable.EnableControls; + Screen.Cursor := ACursor; + if EnEdicion then + aDataTable.Edit; + end; +end; + +{ TBizCantidadFieldRules } + +procedure TBizCantidadFieldRules.OnChange(Sender: TDACustomField); +var + aDetalle : IBizImportesDetalle; + aCabecera : IBizImportesCabecera; + aParche : IParche; +begin + inherited; + + { PARCHE ********************************** } + if Supports(DataTable, IParche, aParche) and + not (aParche.PuedoLanzarEvento) then + Exit; + + if Supports(DataTable, IBizImportesDetalle, aDetalle) then + begin + if Sender.Value = 0 then + Sender.Value := Null; + + aDetalle.RecalcularImporte; + RecalcularSubtotales(aDetalle.DataTable); + if Assigned(aDetalle.DataTable.MasterSource) and + Supports(aDetalle.DataTable.MasterSource.DataTable, IBizImportesCabecera, ACabecera) then + ACabecera.RecalcularImporte; + end; +end; + +procedure TBizImporteUnidadFieldRules.OnChange(Sender: TDACustomField); +var + aDetalle : IBizImportesDetalle; + aCabecera : IBizImportesCabecera; + aParche : IParche; +begin + inherited; + + { PARCHE ********************************** } + if Supports(DataTable, IParche, aParche) and + not (aParche.PuedoLanzarEvento) then + Exit; + + if Supports(DataTable, IBizImportesDetalle, aDetalle) then + begin + if Sender.Value = 0 then + Sender.Value := Null; + + aDetalle.RecalcularImporte; + RecalcularSubtotales(aDetalle.DataTable); + if Assigned(aDetalle.DataTable.MasterSource) and + Supports(aDetalle.DataTable.MasterSource.DataTable, IBizImportesCabecera, ACabecera) then + ACabecera.RecalcularImporte; + end; +end; + +procedure TBizTipoDetalleFieldRules.OnChange(Sender: TDACustomField); +var + aDetalle : IBizImportesDetalle; + aCabecera : IBizImportesCabecera; + aParche : IParche; +begin + inherited; + + { PARCHE ********************************** } + if Supports(DataTable, IParche, aParche) and + not (aParche.PuedoLanzarEvento) then + Exit; + + if (Sender.AsString = TIPODETALLE_SUBTOTAL) or + (Sender.AsString = TIPODETALLE_TITULO) then + if Supports(DataTable, IBizImportesDetalle, aDetalle) then + begin + aDetalle.RecalcularImporte; + RecalcularSubtotales(aDetalle.DataTable); + if Assigned(aDetalle.DataTable.MasterSource) and + Supports(aDetalle.DataTable.MasterSource.DataTable, IBizImportesCabecera, ACabecera) then + ACabecera.RecalcularImporte; + end; +end; + +procedure TBizPuntosFieldRules.OnChange(Sender: TDACustomField); +var + aDetalle : IBizPuntosDetalle; + aCabecera : IBizImportesCabecera; + aParche : IParche; +begin + inherited; + + { PARCHE ********************************** } + if Supports(DataTable, IParche, aParche) and + not (aParche.PuedoLanzarEvento) then + Exit; + + if Supports(DataTable, IBizPuntosDetalle, aDetalle) then + begin + if Sender.Value = 0 then + Sender.Value := Null; + + aDetalle.RecalcularImporte; + RecalcularSubtotales(aDetalle.DataTable); + if Assigned(aDetalle.DataTable.MasterSource) and + Supports(aDetalle.DataTable.MasterSource.DataTable, IBizImportesCabecera, ACabecera) then + ACabecera.RecalcularImporte; + end; +end; + +procedure TBizImportePuntosFieldRules.OnChange( + Sender: TDACustomField); +var + aDetalle : IBizPuntosDetalle; + aCabecera : IBizImportesCabecera; + aParche : IParche; +begin + inherited; + + { PARCHE ********************************** } + if Supports(DataTable, IParche, aParche) and + not (aParche.PuedoLanzarEvento) then + Exit; + + if Supports(DataTable, IBizPuntosDetalle, aDetalle) then + begin + if Sender.Value = 0 then + Sender.Value := Null; + + aDetalle.RecalcularImporte; + if Assigned(aDetalle.DataTable.FindField(fld_TIPODETALLE)) then + if (aDetalle.DataTable.FindField(fld_TIPODETALLE).AsString = TIPODETALLE_TITULO) then + RellenarImportePuntosEnCapitulo(aDetalle.DataTable); + RecalcularSubtotales(aDetalle.DataTable); + if Assigned(aDetalle.DataTable.MasterSource) and + Supports(aDetalle.DataTable.MasterSource.DataTable, IBizImportesCabecera, ACabecera) then + ACabecera.RecalcularImporte; + end; +end; + +{ TBizVisibleFieldRules } + +procedure TBizVisibleFieldRules.OnChange(Sender: TDACustomField); +var + aDetalle : IBizVisibleDetalle; + aParche : IParche; +begin + inherited; + + { PARCHE ********************************** } + if Supports(DataTable, IParche, aParche) and + not (aParche.PuedoLanzarEvento) then + Exit; + + if Supports(DataTable, IBizVisibleDetalle, aDetalle) then + begin + if Assigned(aDetalle.DataTable.FindField(fld_TIPODETALLE)) then + if (aDetalle.DataTable.FindField(fld_TIPODETALLE).AsString = TIPODETALLE_TITULO) then + RellenarVisibleEnCapitulo(aDetalle.DataTable); + end; +end; + +initialization + RegisterFieldRules('Client.Field.Cantidad', TBizCantidadFieldRules); + RegisterFieldRules('Client.Field.ImporteUnidad', TBizImporteUnidadFieldRules); + RegisterFieldRules('Client.Field.TipoDetalle', TBizTipoDetalleFieldRules); + + RegisterFieldRules('Client.Field.ImportePuntos', TBizImportePuntosFieldRules); + RegisterFieldRules('Client.Field.Puntos', TBizPuntosFieldRules); + + RegisterFieldRules('Client.Field.Visible', TBizVisibleFieldRules); + +finalization + +end. diff --git a/Base/uBizInformesBase.pas b/Base/uBizInformesBase.pas new file mode 100644 index 0000000..3a96c41 --- /dev/null +++ b/Base/uBizInformesBase.pas @@ -0,0 +1,14 @@ +unit uBizInformesBase; + +interface + +type + IBizInformesAware = interface + ['{98AD6541-199F-4155-B394-ED0316298759}'] + procedure Preview; + procedure Print; + end; + +implementation + +end. diff --git a/Base/uConfigurarConexion.dfm b/Base/uConfigurarConexion.dfm new file mode 100644 index 0000000..9ccb99c --- /dev/null +++ b/Base/uConfigurarConexion.dfm @@ -0,0 +1,111 @@ +object fConfigurarConexion: TfConfigurarConexion + Left = 425 + Top = 509 + Width = 399 + Height = 179 + ActiveControl = edtServer + Caption = 'Configuraci'#243'n de la conexi'#243'n' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object bProbar: TButton + Left = 8 + Top = 113 + Width = 105 + Height = 25 + Caption = '&Probar la conexi'#243'n' + TabOrder = 1 + OnClick = bProbarClick + end + object GroupBox1: TGroupBox + Left = 8 + Top = 8 + Width = 375 + Height = 97 + Caption = 'Servidor de FactuGES' + TabOrder = 0 + DesignSize = ( + 375 + 97) + object Label1: TLabel + Left = 18 + Top = 30 + Width = 97 + Height = 13 + Caption = 'Nombre del servidor:' + end + object Label2: TLabel + Left = 18 + Top = 60 + Width = 93 + Height = 13 + Caption = 'Puerto de escucha:' + end + object edtServer: TEdit + Left = 128 + Top = 24 + Width = 231 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 0 + end + object edtPort: TEdit + Left = 128 + Top = 56 + Width = 116 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 1 + Text = '8099' + end + end + object bAceptar: TButton + Left = 219 + Top = 113 + Width = 75 + Height = 25 + Caption = '&Aceptar' + Default = True + ModalResult = 1 + TabOrder = 2 + end + object bCancelar: TButton + Left = 307 + Top = 113 + Width = 75 + Height = 25 + Cancel = True + Caption = '&Cancelar' + ModalResult = 2 + TabOrder = 3 + end + object HTTPChannel: TROWinInetHTTPChannel + ServerLocators = <> + DispatchOptions = [] + ProbeServers = False + ProbeFrequency = 60000 + UserAgent = 'FactuGES' + TargetURL = 'http://localhost:8099/BIN' + Left = 120 + Top = 112 + end + object ROBinMessage: TROBinMessage + Left = 152 + Top = 112 + end + object CoService: TRORemoteService + ServiceName = 'srvLogin' + Message = ROBinMessage + Channel = HTTPChannel + Left = 184 + Top = 112 + end +end diff --git a/Base/uConfigurarConexion.pas b/Base/uConfigurarConexion.pas new file mode 100644 index 0000000..d23547a --- /dev/null +++ b/Base/uConfigurarConexion.pas @@ -0,0 +1,78 @@ +unit uConfigurarConexion; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, uROClient, uROWinInetHttpChannel, uRODynamicRequest, + uROServiceComponent, uRORemoteService, uROBinMessage; + +type + TfConfigurarConexion = class(TForm) + bProbar: TButton; + GroupBox1: TGroupBox; + Label1: TLabel; + Label2: TLabel; + edtServer: TEdit; + edtPort: TEdit; + bAceptar: TButton; + bCancelar: TButton; + HTTPChannel: TROWinInetHTTPChannel; + ROBinMessage: TROBinMessage; + CoService: TRORemoteService; + procedure bProbarClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + function GetTargetURL: String; + procedure SetTargetURL(const Value: String); + { Private declarations } + public + property TargetURL : String read GetTargetURL write SetTargetURL; + end; + +var + fConfigurarConexion: TfConfigurarConexion; + +implementation + +uses + StrUtils, JclStrings, FactuGES_Intf, uDataModuleBase; + +{$R *.dfm} + +{ TfConfigurarConexion } + +function TfConfigurarConexion.GetTargetURL: String; +begin + Result := 'http://' + edtServer.Text + ':' + edtPort.Text + '/bin'; +end; + +procedure TfConfigurarConexion.SetTargetURL(const Value: String); +var + s : String; +begin + s := StrAfter('http://', Value); + s := StrBefore(':', s); + edtServer.Text := s; + + s := StrAfter(edtServer.Text + ':', Value); + s := StrBefore('/bin', s); + edtPort.Text := s; +end; + +procedure TfConfigurarConexion.bProbarClick(Sender: TObject); +begin + try + HTTPChannel.TargetURL := TargetURL; + (CoService as IsrvLogin).Ping; + Application.MessageBox('Conexión válida con el servidor.', 'FactuGES', MB_OK); + finally + end; +end; + +procedure TfConfigurarConexion.FormCreate(Sender: TObject); +begin + HTTPChannel.OnFailure := dmBase.ROChannelFailure; +end; + +end. diff --git a/Base/uDBSelectionList.pas b/Base/uDBSelectionList.pas new file mode 100644 index 0000000..6bb38db --- /dev/null +++ b/Base/uDBSelectionList.pas @@ -0,0 +1,125 @@ +unit uDBSelectionList; + +interface + +uses + uDADataTable, Classes, DB; + +type + TSelectedRowList = class; + + ISelectedRowList = interface + ['{1886B04A-DB0D-40AE-BCAE-DA57CD4CD582}'] + function GetSelectedRows : TSelectedRowList; + property SelectedRows : TSelectedRowList read GetSelectedRows; + end; + + TSelectedRowList = class + private + FDataTable: TDADataTable; + FList: TList; + function GetCount: Integer; + function GetCurrentRowSelected: Boolean; + function GetItem(Index: Integer): TBookmark; + procedure SetCurrentRowSelected(Value: Boolean); + protected + function CurrentRow: TBookmark; + function Compare(const Item1, Item2: TBookmark): Boolean; + public + constructor Create(ADataTable : TDADataTable); + destructor Destroy; override; + procedure Clear; // free all bookmarks + function Find(const Item: TBookmark; var Index: Integer): Boolean; + function IndexOf(const Item: TBookmark): Integer; + property Count: Integer read GetCount; + property CurrentRowSelected: Boolean read GetCurrentRowSelected + write SetCurrentRowSelected; + property Items[Index: Integer]: TBookmark read GetItem; default; + end; + + +implementation + +uses + DBConsts; + +{ TSelectedRowList } + +constructor TSelectedRowList.Create(ADataTable : TDADataTable); +begin + inherited Create; + FList := TList.Create; + FDataTable := ADataTable; +end; + +destructor TSelectedRowList.Destroy; +begin + Clear; + FList.Free; + FDataTable := NIL; + inherited Destroy; +end; + +procedure TSelectedRowList.Clear; +begin + if FList.Count = 0 then + Exit; + FList.Clear; +end; + +function TSelectedRowList.Compare(const Item1, Item2: TBookmark): Boolean; +begin + Result := (Item1 = Item2); +end; + +function TSelectedRowList.CurrentRow: TBookmark; +begin + if not FDataTable.Active then + raise EDatabaseError.Create(sDataSetClosed); + Result := FDataTable.GetBookMark +end; + +function TSelectedRowList.GetCurrentRowSelected: Boolean; +var + Index: Integer; +begin + Result := Find(CurrentRow, Index); +end; + +function TSelectedRowList.Find(const Item: TBookmark; var Index: Integer): Boolean; +begin + Index := FList.IndexOf(Item); + Result := (Index > -1) +end; + +function TSelectedRowList.GetCount: Integer; +begin + Result := FList.Count; +end; + +function TSelectedRowList.GetItem(Index: Integer): TBookmark; +begin + Result := FList[Index]; +end; + +function TSelectedRowList.IndexOf(const Item: TBookmark): Integer; +begin + Result := FList.IndexOf(Item); +end; + +procedure TSelectedRowList.SetCurrentRowSelected(Value: Boolean); +var + Index: Integer; + Current: TBookmark; +begin + Current := CurrentRow; + if (Find(Current, Index) = Value) then + Exit; + if Value then + FList.Add(Current) + else + FList.Delete(Index); +end; + + +end. diff --git a/Base/uDataModuleBase.ddp b/Base/uDataModuleBase.ddp new file mode 100644 index 0000000..44d54ac Binary files /dev/null and b/Base/uDataModuleBase.ddp differ diff --git a/Base/uDataModuleBase.dfm b/Base/uDataModuleBase.dfm new file mode 100644 index 0000000..3515b6c --- /dev/null +++ b/Base/uDataModuleBase.dfm @@ -0,0 +1,1660 @@ +object dmBase: TdmBase + OldCreateOrder = True + OnCreate = DAClientDataModuleCreate + Left = 239 + Top = 433 + Height = 376 + Width = 502 + object SmallImages: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000002224944415478DA + 95935D48936114C77FCB36584A6064161515DEA441108B240293E8A682246805 + DEA45020F40196505D081242DE94512B8C20169937056914D52E726B6083B114 + D44CD3D51A216BB6656B5FEF677B5FF31D23033DF070CE03CFFFF73F1CCE6362 + 29D1806AD44E4C5A32F5F58FAA8BD5D73DD8465757034D4D4EFA4E8C62000ED7 + 56E997647490DFE131BD2ED9584971D98EB9478D2603D279B39EE6733DC6DD00 + 68E2EF7E07E95F2291688C48629ABDC71DACABD8AD0334E7B420104D24F4A3D5 + DDD707E60087F66C2234D0CECF2F41643987556566676799C9C4387AD18FF964 + 91E178EA522DF73ADC851D1CA85ECD27D77948995861B552844C2A9962303441 + DD051FA22473E5095C735B3972DAC6D3DB016EED7BC9FD47CFE601E57CF3B661 + C966D1E62C880299549A696915B6639D4892A243D6B6AC349C0B00DA0C22EF7B + 484EBDCA015424512491125036D751B1CBAE8BB5330F12459937EF860A01DEA0 + 8BA0FB0E5B154BAE832C810CACDF594F4DD5C17FC45AF6FA87F3800D95022DFD + ADC47E84682CDF8F222A3C9CF1303915E6C3E5495DDC7AE379C14E546F5F9307 + F8E4C7BC187F4BA6344E49D24C6E8A24AD12E65809A1895102CD6386B3F8B793 + C0F0C73CC0196927188E2297651096A7D096D4922D6659DCC2E7AF43F8CE8C70 + F5AEEBFF1D9CF5D889C7230BAE6F696939BDF6D7BAABACA87A567279647C320F + A8B16DA1BBD7B3A47FA5850168EB702C596C6CA2AA2EFA332E187F0080F1503E + 182A98A90000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20 + E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9 + 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1 + CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098 + D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4 + AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609 + 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3 + D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD + 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8 + C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D + E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770 + 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F + 16FA1194E3DBC30000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000016A4944415478DA + 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA + 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA + 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30 + F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911 + FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD + D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5 + 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C + E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3 + FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B + CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907 + BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4 + 0090010087546EF0ACB0C7920000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA + A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304 + 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994 + 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F + 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546 + 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8 + 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA + 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E + 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8 + E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0 + 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8 + 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37 + 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB + 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932 + 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04 + E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148 + D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2 + 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56 + A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E + AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13 + 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058 + 5538F0EAB25B380000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000011F4944415478DA + 63FCFFFF3F03258091620390394975ABC1A6BD79FB8561D3D4444642E220CB31 + 0C985113C8A0E6D6C4F0E040132321711403408A40367CFCF28DE1E1C3970C7A + DA8A60DB708963350064CBF6938F18966C3EC770FAD425B06DB8C409BA000440 + B68908F330A08B631800D23CB73184E1D9CB4F0C775EFD6598B2641FD8A68208 + 2F864BCF1E33A0CB71BF7AC2B0604101380619571EBDFB7FE7CE730CD9518E60 + D3F79CB8C770E6DA23B0013017609373501062983F3F9F111E4820F0F8C52730 + FDFEED5B30CDC2FC91C1CEDA860197FCFDFD8D8CF040DA77EE39C395DBAF182E + DF7DC370F0C051ACD188AE66901A70F2F27D94B8C666004C0DDC801F3F7F323C + 7DF191E1D78F9F0CCF5F7E40896B9801D8D4800DA0343702001BEF6EF0E3CC7C + BD0000000049454E44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000002234944415478DA + A5934F4814511CC7BF6BBAB0AD97225B2A2B4B88ECB014861241ED2190FE9017 + 2D15843A74E8E0A14D3282608935920E092D7A10A44C25A843497FEDA0EB422D + 2DE6A2F647ADA5C542A6DD76DB6CC79979F3DE34F3CA99C4BAB40F1EEF0DEF7D + 3FDFEFFC783F9BA669C865D8EE0FBDCE89C001473D3BF8473631861FB36FF9BE + 7063199C45BBCC8B4C4FAAAA0C44A5E6ACAA3F67010CF19748000BDF0984440A + C2FC1CF61F0F605DE91EA894E17CAFB2C4B9246F18DD7D03BF0087F76E46FCB9 + 1FDF3EC640A97EAA5164321924A5146A5A22A6A391C0E971724097F7B1053858 + B90633835E40B461A5C38115A010B322C6E2D3A83E1BE6E24B7781D676070A1A + 9A40FAAFA3270A74569D5E04B8F039E4835D96757740210A24710173EA6A941F + BBC69D676E3BF169EB3892E37DC86B6EE3294C805103E1553FB21F9EE800BD58 + 84605E54C04AAA515A51CBC5EE230108D38F7073A402EB7D3EC83D7FFC820108 + C506111BEEC07666D713C81895800DBB1BB0E94D9D2936668DBF180F9E85118A + 4C5880E23205CD431791FA1AC749D70130C2702B1944A73DBA4CECA96BE5F12B + DD6B2D4098DEC1C3A91148ABD228CC1640AF223A94977F7526BFDFC2E8C43B0B + 7043F023369B002D92A0E48BF0CA67B09334C2B5EDD032E7C5B1244153B016E9 + B4601E5E75B7E344633DA2DDF95C3CF0F40577A54CE32BD3D7C9A9F716605FF9 + 16F4DE0B9A80B60BA7CC7DCBE5AE7FF68109F05D09FC7F33E5DACE3F0109DB53 + BED36F80890000000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 24 + Top = 16 + Bitmap = {} + end + object TBXSwitcher: TTBXSwitcher + Theme = 'Default' + Left = 24 + Top = 80 + end + object StyleManager: TJvNavPaneStyleManager + Colors.ButtonColorFrom = clWhite + Colors.ButtonColorTo = 12435133 + Colors.ButtonHotColorFrom = 13009540 + Colors.ButtonHotColorTo = 13009540 + Colors.ButtonSelectedColorFrom = 14602190 + Colors.ButtonSelectedColorTo = 14602190 + Colors.SplitterColorFrom = 13026246 + Colors.SplitterColorTo = 9211532 + Colors.DividerColorFrom = 15725551 + Colors.DividerColorTo = 13026246 + Colors.HeaderColorFrom = 8684164 + Colors.HeaderColorTo = 8684164 + Colors.FrameColor = 8684676 + Colors.ToolPanelHeaderColorFrom = clWhite + Colors.ToolPanelHeaderColorTo = 12435133 + Fonts.NavPanelFont.Charset = DEFAULT_CHARSET + Fonts.NavPanelFont.Color = clWindowText + Fonts.NavPanelFont.Height = -13 + Fonts.NavPanelFont.Name = 'Tahoma' + Fonts.NavPanelFont.Style = [] + Fonts.NavPanelHotTrackFont.Charset = DEFAULT_CHARSET + Fonts.NavPanelHotTrackFont.Color = clWindow + Fonts.NavPanelHotTrackFont.Height = -13 + Fonts.NavPanelHotTrackFont.Name = 'Tahoma' + Fonts.NavPanelHotTrackFont.Style = [] + Fonts.DividerFont.Charset = DEFAULT_CHARSET + Fonts.DividerFont.Color = clWindowText + Fonts.DividerFont.Height = -11 + Fonts.DividerFont.Name = 'Tahoma' + Fonts.DividerFont.Style = [] + Fonts.HeaderFont.Charset = DEFAULT_CHARSET + Fonts.HeaderFont.Color = clWindow + Fonts.HeaderFont.Height = -16 + Fonts.HeaderFont.Name = 'Arial' + Fonts.HeaderFont.Style = [fsBold] + Theme = nptCustom + Left = 104 + Top = 80 + end + object ROChannel: TROWinInetHTTPChannel + OnFailure = ROChannelFailure + ServerLocators = <> + DispatchOptions = [] + ProbeServers = False + ProbeFrequency = 60000 + UserAgent = 'RemObjects SDK' + TargetURL = 'http://localhost:8099/bin' + KeepConnection = True + OnProgress = ROChannelProgress + Left = 330 + Top = 24 + end + object cxIntl: TcxIntl + Connected = True + cxLibrary.CantCreateRegistryKey = 'No se puede crear la llave de registro : \%s' + PageControl2.ImageListIndexError = 'El '#237'ndice (%d) deber'#225' estar entre 0 y %d' + PageControl2.NoBaseImages = 'BaseImages no est'#225' asignado' + PageControl2.NoRegisteredStyles = 'No hay estilos registrados' + PageControl2.PageIndexError = '%d es un valor inv'#225'lido para PageIndex, debe estar entre 0 y %d' + PageControl2.PainterClassError = 'La clase PCPainter es nula' + PageControl2.StandardStyleError = '%s es un estilo est'#225'ndar no soportado' + PageControl2.StyleNameError = '%s es un nombre de estilo no registrado' + PageControl2.TabCountEqualsZero = 'Tabs.Count = 0' + PageControl2.TabIndexError = 'El '#237'ndice de la pesta'#241'a (%d) est'#225' fuera de l'#237'mites' + PageControl2.TabVisibleIndexOutsOfBounds = 'Propiedad TabVisibleIndex (%d) deber'#225' estar entre 0 y %d' + PageControl2.VisibleTabListEmpty = 'No hay pesta'#241'as visibles' + QuantumGrid5.GridRecursiveLevels = 'No se pueden crear niveles recursivos' + QuantumGrid5.GridDeletingConfirmationCaption = 'Confirmar' + QuantumGrid5.GridDeletingFocusedConfirmationText = #191'Borrar registro?' + QuantumGrid5.GridDeletingSelectedConfirmationText = #191'Borrar todos los registros seleccionados?' + QuantumGrid5.GridNoDataInfoText = '' + QuantumGrid5.GridNewItemRowInfoText = 'Haga click aqu'#237' para agregar una nueva l'#237'nea' + QuantumGrid5.GridFilterIsEmpty = '' + QuantumGrid5.GridCustomizationFormCaption = 'Personalizaci'#243'n' + QuantumGrid5.GridCustomizationFormColumnsPageCaption = 'Columnas' + QuantumGrid5.GridGroupByBoxCaption = 'Arrastre una columna aqu'#237' para agrupar por dicha columna' + QuantumGrid5.GridFilterCustomizeButtonCaption = 'Personalizar...' + QuantumGrid5.GridColumnsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las columas visibles' + QuantumGrid5.GridCustomizationFormBandsPageCaption = 'Bandas' + QuantumGrid5.GridBandsQuickCustomizationHint = 'Haga click aqu'#237' para seleccionar las bandas visibles' + QuantumGrid5.GridCustomizationFormRowsPageCaption = 'Rows' + QuantumGrid5.GridConverterIntermediaryMissing = 'Omiti'#243' un componente intermediario!' + QuantumGrid5.GridConverterNotExistGrid = 'cxGrid no existe' + QuantumGrid5.GridConverterNotExistComponent = 'El componente no existe' + QuantumGrid5.ImportErrorCaption = 'Error al importar' + QuantumGrid5.NotExistGridView = 'No existe la vista del grid' + QuantumGrid5.NotExistGridLevel = 'No existe un nivel de grid activo' + QuantumGrid5.CantCreateExportOutputFile = 'No se puede crear el archivo de exportaci'#243'n' + QuantumGrid5.EditRepositoryExtLookupComboBoxItem = + 'ExtLookupComboBox|Representa un ultra avanzado control de busque' + + 'da (lookup) usando el QuantumGrid como su control de despliegue' + Navigator.NavigatorHint_First = 'Primer registro' + Navigator.NavigatorHint_Prior = 'Registro anterior' + Navigator.NavigatorHint_PriorPage = 'P'#225'gina anterior' + Navigator.NavigatorHint_Next = 'Siguiente registro' + Navigator.NavigatorHint_NextPage = 'Siguiente p'#225'gina' + Navigator.NavigatorHint_Last = #218'ltimo registro' + Navigator.NavigatorHint_Insert = 'Insertar registro' + Navigator.NavigatorHint_Delete = 'Borrar registro' + Navigator.NavigatorHint_Edit = 'Editar registro' + Navigator.NavigatorHint_Post = 'Grabar edici'#243'n' + Navigator.NavigatorHint_Cancel = 'Cancelar edici'#243'n' + Navigator.NavigatorHint_Refresh = 'Actualizar datos' + Navigator.NavigatorHint_SaveBookmark = 'Guardar Marca' + Navigator.NavigatorHint_GotoBookmark = 'Volver a Marca' + Navigator.NavigatorHint_Filter = 'Filtrar datos' + Navigator.Navigator_DeleteRecordQuestion = #191'Desea borrar este el registro?' + Editors5.EditDateConvertError = 'El valor no se puede convertir a fecha' + Editors5.EditInvalidRepositoryItem = 'Elemento de repositorio no v'#225'lido' + Editors5.EditNumericValueConvertError = 'No se puede convertir a valor num'#233'rico' + Editors5.EditPopupCircularReferencingError = 'Referencia circular no permitida' + Editors5.EditPostError = 'Ocurri'#243' un error durante el grabado del valor de edici'#243'n' + Editors5.EditTimeConvertError = 'No se puede convertir a valor de tiempo' + Editors5.EditValidateErrorText = 'Valor inv'#225'lido. Use la tecla de escape para cancelar cambios' + Editors5.EditValueOutOfBounds = 'Valor fuera de l'#237'mites' + Editors5.EditCheckBoxChecked = 'True' + Editors5.EditCheckBoxUnchecked = 'False' + Editors5.TextTrue = 'True' + Editors5.TextFalse = 'False' + Editors5.BlobButtonOK = '&Aceptar' + Editors5.BlobButtonCancel = '&Cancelar' + Editors5.BlobButtonClose = '&Cerrar' + Editors5.BlobMemo = '(MEMO)' + Editors5.BlobMemoEmpty = '(memo)' + Editors5.BlobPicture = '(IM'#193'GEN)' + Editors5.BlobPictureEmpty = '(im'#225'gen)' + Editors5.MenuItemCaptionCut = 'Cor&tar' + Editors5.MenuItemCaptionCopy = '&Copiar' + Editors5.MenuItemCaptionPaste = '&Pegar' + Editors5.MenuItemCaptionDelete = '&Borrar' + Editors5.MenuItemCaptionLoad = '&Leer...' + Editors5.MenuItemCaptionSave = 'Guardar &Como...' + Editors5.DatePopupClear = 'Limpiar' + Editors5.DatePopupNow = 'Ahora' + Editors5.DatePopupOK = 'Aceptar' + Editors5.DatePopupToday = 'Hoy' + Editors5.DateError = 'Fecha inv'#225'lida' + Editors5.DateToday = 'hoy' + Editors5.DateYesterday = 'ayer' + Editors5.DateTomorrow = 'ma'#241'ana' + Editors5.DateSunday = 'Domingo' + Editors5.DateMonday = 'Lunes' + Editors5.DateTuesday = 'Martes' + Editors5.DateWednesday = 'Mi'#233'rcoles' + Editors5.DateThursday = 'Jueves' + Editors5.DateFriday = 'Viernes' + Editors5.DateSaturday = 'S'#225'bado' + Editors5.DateFirst = 'Primero' + Editors5.DateSecond = 'segundo' + Editors5.DateThird = 'tercero' + Editors5.DateFourth = 'Cuarto' + Editors5.DateFifth = 'Quinto' + Editors5.DateSixth = 'sexto' + Editors5.DateSeventh = 's'#233'ptimo' + Editors5.DateBOM = 'bom' + Editors5.DateEOM = 'eom' + Editors5.DateNow = 'ahora' + Editors5.CalcError = 'Error' + Editors5.HyperLinkPrefix = 'http://' + Editors5.HyperLinkDoubleSlash = '//' + Editors5.EditRepositoryBlobItem = 'BlobEdit|Representa el editor de BLOB' + Editors5.EditRepositoryButtonItem = + 'ButtonEdit|Representa un control de edici'#243'n con controles incrus' + + 'tados' + Editors5.EditRepositoryCalcItem = + 'CalcEdit|Representa un control de edici'#243'n con una ventana de cal' + + 'culadora desplegable' + Editors5.EditRepositoryCheckBoxItem = + 'CheckBox|Representa un control de caja de marca que permite sele' + + 'ccionar una opci'#243'n' + Editors5.EditRepositoryComboBoxItem = 'ComboBox|Representa el editor de la caja combo' + Editors5.EditRepositoryCurrencyItem = + 'CurrencyEdit|Representa un editor que habilita la edici'#243'n de val' + + 'ores monetarios' + Editors5.EditRepositoryDateItem = + 'DateEdit|Representa un control de edici'#243'n con un calendario desp' + + 'legable' + Editors5.EditRepositoryHyperLinkItem = 'HyperLink|Representa un editor de texto de hiperv'#237'nculos' + Editors5.EditRepositoryImageComboBoxItem = + 'ImageComboBox|Representa un editor que muestra una lista de im'#225'g' + + 'enes y texto en la ventana desplegable' + Editors5.EditRepositoryImageItem = 'Image|Representa un editor de im'#225'genes' + Editors5.EditRepositoryLookupComboBoxItem = 'LookupComboBox|Representa una caja de b'#250'squeda' + Editors5.EditRepositoryMaskItem = 'MaskEdit|Representa un control de edici'#243'n gen'#233'rico con m'#225'scara' + Editors5.EditRepositoryMemoItem = + 'Memo|Representa un control de edici'#243'n que permite editar datos m' + + 'emo' + Editors5.EditRepositoryMRUItem = + 'MRUEdit|Representa un editor de texto mostrando la lista de los ' + + 'elementos m'#225's recientemente usados (MRU) en una ventana desplega' + + 'ble' + Editors5.EditRepositoryPopupItem = + 'PopupEdit|Representa un control de edici'#243'n con una lista despleg' + + 'able' + Editors5.EditRepositorySpinItem = 'SpinEdit|Representa un editor de incrementos/decrementos (spin)' + Editors5.EditRepositoryRadioGroupItem = 'RadioGroup|Represents a group of radio buttons' + Editors5.EditRepositoryTextItem = 'TextEdit|Representa un editor de texto de l'#237'nea sencilla' + Editors5.EditRepositoryTimeItem = 'TimeEdit|Representa un editor mostrando valores de tiempo' + Editors5.RegExprLine = 'L'#237'nea' + Editors5.RegExprChar = 'Char' + Editors5.RegExprNotAssignedSourceStream = 'No se ha asignado el stream fuente' + Editors5.RegExprEmptySourceStream = 'El stream or'#237'gen est'#225' vac'#237'o' + Editors5.RegExprCantUsePlusQuantifier = 'El cuantificador '#39'+'#39' no puede aplicarse aqu'#237 + Editors5.RegExprCantUseStarQuantifier = 'El cuantificador '#39'*'#39' no puede aplicarse aqu'#237 + Editors5.RegExprCantCreateEmptyAlt = 'La alternativa no debe estar vac'#237'a' + Editors5.RegExprCantCreateEmptyBlock = 'El bloque no debe estar vac'#237'o' + Editors5.RegExprIllegalSymbol = 'S'#237'mbolo no permitido '#39'%s'#39 + Editors5.RegExprIllegalQuantifier = 'Cuantificador no permitido '#39'%s'#39 + Editors5.RegExprNotSupportQuantifier = 'El par'#225'metro cuantificador no es soportado' + Editors5.RegExprIllegalIntegerValue = 'Valor entero no permitido' + Editors5.RegExprTooBigReferenceNumber = 'N'#250'mero de referencia demasiado grande' + Editors5.RegExprCantCreateEmptyEnum = 'No puedo crear enumeraci'#243'n vac'#237'a' + Editors5.RegExprSubrangeOrder = 'El caracter de inicio del subrango debe ser menor al de fin' + Editors5.RegExprHexNumberExpected0 = 'Se esperaba n'#250'mero Hexadecimal' + Editors5.RegExprHexNumberExpected = 'N'#250'mero Hexadecimal esperado pero encontr'#243' '#39'%s'#39 + Editors5.RegExprMissing = 'Falta '#39'%s'#39 + Editors5.RegExprUnnecessary = 'Innecesario '#39'%s'#39 + Editors5.RegExprIncorrectSpace = 'Espacio incorrecto despu'#233's de '#39'\'#39 + Editors5.RegExprNotCompiled = 'Expresi'#243'n regular no compila' + Editors5.RegExprIncorrectParameterQuantifier = 'Cuantificador de par'#225'metros incorrecto' + Editors5.RegExprCantUseParameterQuantifier = 'The parameter quantifier cannot be applied here' + Editors5.MaskEditRegExprError = 'Errores en expresiones regulares:' + Editors5.MaskEditInvalidEditValue = 'El valor de edici'#243'n es inv'#225'lido' + Editors5.MaskEditNoMask = 'Ninguno' + Editors5.MaskEditIllegalFileFormat = 'Formato de archivo ilegal' + Editors5.MaskEditEmptyMaskCollectionFile = 'El archivo de colecci'#243'n de m'#225'scaras est'#225' vac'#237'o' + Editors5.MaskEditMaskCollectionFiles = 'Archivos de colecci'#243'n de m'#225'scaras' + Editors5.SpinEditInvalidNumericValue = 'Valor num'#233'rico no v'#225'lido' + Datacontroller.DataReadError = 'Error de lectura en or'#237'gen de datos' + Datacontroller.DataWriteError = 'Error de escritura en or'#237'gen de datos (stream)' + Datacontroller.DataItemExistError = 'El elemento ya existe' + Datacontroller.DataRecordIndexError = #205'ndice de registro fuera de rango' + Datacontroller.DataItemIndexError = #205'ndice de elemento fuera de rango' + Datacontroller.DataProviderModeError = 'La operaci'#243'n no es soportada en modo de proveedor (provider)' + Datacontroller.DataInvalidStreamFormat = 'Origen de datos (Stream) inv'#225'lido' + Datacontroller.DataRowIndexError = #205'ndice del elemento de fila fuera de rango' + Datacontroller.DataCustomDataSourceInvalidCompare = 'Instrucci'#243'n GetInfoForCompare no implementada' + Datacontroller.DBDetailFilterControllerNotFound = 'DetailFilterController no encontrado' + Datacontroller.DBNotInGridMode = 'La controladora de datos no est'#225' en modo de Grid' + Datacontroller.DBKeyFieldNotFound = 'Campo llave no encontrado' + Filter.FilterOperatorEqual = 'igual' + Filter.FilterOperatorNotEqual = 'no es igual' + Filter.FilterOperatorLess = 'es menor que' + Filter.FilterOperatorLessEqual = 'es menor o igual que' + Filter.FilterOperatorGreater = 'es mayor que' + Filter.FilterOperatorGreaterEqual = 'es mayor o igual que' + Filter.FilterOperatorLike = 'como' + Filter.FilterOperatorNotLike = 'no es como' + Filter.FilterOperatorBetween = 'entre' + Filter.FilterOperatorNotBetween = 'no entre' + Filter.FilterOperatorInList = 'en' + Filter.FilterOperatorNotInList = 'no en' + Filter.FilterOperatorYesterday = 'es ayer' + Filter.FilterOperatorToday = 'es hoy' + Filter.FilterOperatorTomorrow = 'es ma'#241'ana' + Filter.FilterOperatorLastWeek = 'es '#250'ltima semana' + Filter.FilterOperatorLastMonth = 'es '#250'ltimo mes' + Filter.FilterOperatorLastYear = 'es a'#241'o pasado' + Filter.FilterOperatorThisWeek = 'es esta semana' + Filter.FilterOperatorThisMonth = 'es este mes' + Filter.FilterOperatorThisYear = 'es este a'#241'o' + Filter.FilterOperatorNextWeek = 'es semana siguiente' + Filter.FilterOperatorNextMonth = 'es mes siguiente' + Filter.FilterOperatorNextYear = 'es a'#241'o pr'#243'ximo' + Filter.FilterAndCaption = 'y' + Filter.FilterOrCaption = 'o' + Filter.FilterNotCaption = 'no' + Filter.FilterBlankCaption = 'vac'#237'o' + Filter.FilterOperatorIsNull = 'es vac'#237'o' + Filter.FilterOperatorIsNotNull = 'no es vac'#237'o' + Filter.FilterOperatorBeginsWith = 'comienza con' + Filter.FilterOperatorDoesNotBeginWith = 'no comienza con' + Filter.FilterOperatorEndsWith = 'termina con' + Filter.FilterOperatorDoesNotEndWith = 'no termina con' + Filter.FilterOperatorContains = 'contiene' + Filter.FilterOperatorDoesNotContain = 'no contiene' + Filter.FilterBoxAllCaption = '(Todos)' + Filter.FilterBoxCustomCaption = '(Personalizado...)' + Filter.FilterBoxBlanksCaption = '(Vac'#237'os)' + Filter.FilterBoxNonBlanksCaption = '(NoVac'#237'os)' + Filter.FilterBoolOperatorAnd = 'AND' + Filter.FilterBoolOperatorOr = 'OR' + Filter.FilterBoolOperatorNotAnd = 'NOT AND' + Filter.FilterBoolOperatorNotOr = 'NOT OR' + Filter.FilterRootButtonCaption = 'Filtro' + Filter.FilterAddCondition = 'Agregar &Condici'#243'n' + Filter.FilterAddGroup = 'Agregar &Grupo' + Filter.FilterRemoveRow = '&Remover Fila' + Filter.FilterClearAll = 'Limpiar &Todo' + Filter.FilterFooterAddCondition = 'presione el bot'#243'n para agregar una nueva condici'#243'n' + Filter.FilterGroupCaption = 'aplica a las siguientes condiciones' + Filter.FilterRootGroupCaption = '' + Filter.FilterControlNullString = '' + Filter.FilterErrorBuilding = 'No se puede construir filtro desde el or'#237'gen' + Filter.FilterDialogCaption = 'Filtro Personalizado' + Filter.FilterDialogInvalidValue = 'Valor inv'#225'lido' + Filter.FilterDialogUse = 'Usar' + Filter.FilterDialogSingleCharacter = 'para representar un caracter sencillo' + Filter.FilterDialogCharactersSeries = 'para representar cualquier serie de caracteres' + Filter.FilterDialogOperationAnd = 'Y' + Filter.FilterDialogOperationOr = 'O' + Filter.FilterDialogRows = 'Mostrar filas donde:' + Filter.FilterControlDialogCaption = 'Constructor de Filtro' + Filter.FilterControlDialogNewFile = 'sinnombre.flt' + Filter.FilterControlDialogOpenDialogCaption = 'Abrir un filtro existente' + Filter.FilterControlDialogSaveDialogCaption = 'Grabar el filtro activo a archivo' + Filter.FilterControlDialogActionSaveCaption = '&Guardar...' + Filter.FilterControlDialogActionOpenCaption = '&Abrir...' + Filter.FilterControlDialogActionApplyCaption = '&Aplicar' + Filter.FilterControlDialogActionOkCaption = 'Aceptar' + Filter.FilterControlDialogActionCancelCaption = 'Cancelar' + Filter.FilterControlDialogFileExt = 'flt' + Filter.FilterControlDialogFileFilter = 'Filtros (*.flt)|*.flt' + GridPopupMenu.GridNone = 'Ninguno' + GridPopupMenu.GridSortColumnAsc = 'Ordenar Ascendente' + GridPopupMenu.GridSortColumnDesc = 'Ordenar Descendente' + GridPopupMenu.GridClearSorting = 'Clear Sorting' + GridPopupMenu.GridGroupByThisField = 'Agrupar por este campo' + GridPopupMenu.GridRemoveThisGroupItem = 'Remover del grupo' + GridPopupMenu.GridGroupByBox = 'Panel "Agrupar por"' + GridPopupMenu.GridAlignmentSubMenu = 'Alineaci'#243'n' + GridPopupMenu.GridAlignLeft = 'Alineaci'#243'n Izquierda' + GridPopupMenu.GridAlignRight = 'Alineaci'#243'n Derecha' + GridPopupMenu.GridAlignCenter = 'Alineaci'#243'n Centrada' + GridPopupMenu.GridRemoveColumn = 'Remover esta columna' + GridPopupMenu.GridFieldChooser = 'Selector de campos' + GridPopupMenu.GridBestFit = 'Mejor distribuci'#243'n' + GridPopupMenu.GridBestFitAllColumns = 'Mejor distribuci'#243'n (Todas las columnas)' + GridPopupMenu.GridShowFooter = 'Pie' + GridPopupMenu.GridShowGroupFooter = 'Pies de grupo' + GridPopupMenu.GridSumMenuItem = 'Sumar' + GridPopupMenu.GridMinMenuItem = 'M'#237'nimo' + GridPopupMenu.GridMaxMenuItem = 'M'#225'ximo' + GridPopupMenu.GridCountMenuItem = 'Contar' + GridPopupMenu.GridAvgMenuItem = 'Promedio' + GridPopupMenu.GridNoneMenuItem = 'Ninguno' + GridExport.UnsupportedExport = 'Tipo de exportaci'#243'n no soportado: %1' + GridExport.StyleManagerKill = + 'El administrador de estilo esta siendo utilizado y no puede ser ' + + 'liberado en este momento' + GridExport.StyleManagerCreate = 'No se puede crear administrador de estilo' + GridExport.ExportToHtml = 'Exportar a p'#225'gina Web (*.html)' + GridExport.ExportToXml = 'Exportar a documento XML (*.xml)' + GridExport.ExportToText = 'Exportar a formato de texto (*.txt)' + GridExport.EmptyExportCache = 'Cache de exportaci'#243'n vac'#237'o' + GridExport.IncorrectUnion = 'Uni'#243'n de celdas incorrecta' + GridExport.IllegalWidth = 'Ancho de columna ilegal' + GridExport.InvalidColumnRowCount = 'Conteo de columna o fila inv'#225'lido' + GridExport.IllegalHeight = 'Alto de fila ilegal' + GridExport.InvalidColumnIndex = 'El '#237'ndice de columna %d fuera de l'#237'mites' + GridExport.InvalidRowIndex = 'El '#237'ndice de fila %d est'#225' fuera de l'#237'mites' + GridExport.InvalidStyleIndex = #205'ndice de estilo %d inv'#225'lido' + GridExport.ExportToExcel = 'Exportar a MS Excel (*.xls)' + GridExport.WorkbookWrite = 'Error al escribir el archivo XLS' + GridExport.InvalidCellDimension = 'Dimensi'#243'n de celda inv'#225'lida' + GridExport.BoolTrue = 'True' + GridExport.BoolFalse = 'False' + Translate.cxLibrary = True + Translate.PageControl2 = False + Translate.QuantumGrid5 = True + Translate.Editors5 = True + Translate.Datacontroller = True + Translate.Filter = True + Translate.GridPopupMenu = True + Translate.GridExport = True + Translate.Navigator = True + Version = '5.0' + Left = 104 + Top = 16 + end + object cxIntlPrintSys3: TcxIntlPrintSys3 + Connected = True + Version = '3.0' + BtnOK = 'Aceptar' + BtnOKAccelerated = '&Aceptar' + BtnCancel = 'Cancelar' + BtnClose = 'Cerrar' + BtnApply = '&Aplicar' + BtnHelp = 'A&yuda' + BtnFix = '&Arreglar' + BtnNew = '&Nuevo...' + BtnIgnore = '&Ignorar' + BtnYes = '&S'#237 + BtnNo = '&No' + BtnEdit = '&Editar...' + BtnReset = '&Restaurar' + BtnAdd = '&A'#241'adir' + BtnAddComposition = 'A'#241'adir &Comparativa' + BtnDefault = '&Defecto...' + BtnDelete = '&Borrar...' + BtnDescription = '&Descripci'#243'n...' + BtnCopy = '&Copiar...' + BtnYesToAll = 'S'#237' a &Todos' + BtnRestoreDefaults = '&Rest.Defecto' + BtnRestoreOriginal = 'Restaurar &Original' + BtnTitleProperties = 'Prop. del T'#237'tulo...' + BtnProperties = 'P&ropiedades...' + BtnNetwork = 'R&ed...' + BtnBrowse = '&Hojear...' + BtnPageSetup = 'Config. P'#225'&gina...' + BtnPrintPreview = 'Vista Pre&via...' + BtnPreview = '&Ver...' + BtnPrint = 'Imprimir...' + BtnOptions = '&Opciones...' + BtnStyleOptions = 'Opciones de estilo...' + BtnDefinePrintStyles = '&Definir Estilos...' + BtnPrintStyles = 'Estilos de Imp.' + BtnBackground = 'Fondo' + BtnShowToolBar = 'Mostrar &Herramientas' + BtnDesign = 'D&ise'#241'o...' + BtnMoveUp = 'Mover &Arriba' + BtnMoveDown = 'Mover Aba&jo' + BtnMoreColors = '&M'#225's Colores...' + BtnFillEffects = 'Efectos de &Relleno...' + BtnNoFill = '&Sin Relleno' + BtnAutomatic = '&Autom'#225'tico' + BtnNone = '&Ninguno' + BtnOtherTexture = 'Otras Te&xturas...' + BtnInvertColors = 'I&nvertir Colores' + BtnSelectPicture = 'Se&leccionar Imagen...' + EditReports = 'Editar Informes' + Composition = 'Composici'#243'n' + ReportTitleDlgCaption = 'T'#237'tulo del Informe' + Mode = '&Modo:' + Text = '&Texto' + Properties = '&Propiedades' + AdjustOnScale = '&Ajustar Escala' + TitleModeNone = 'Ninguno' + TitleModeOnEveryTopPage = 'En Cada P'#225'gina' + TitleModeOnFirstPage = 'En Primera P'#225'gina' + EditDescription = 'Editar Descripci'#243'n' + Rename = 'Reno&mbrar' + SelectAll = 'Seleccionar Todo' + AddReport = 'A'#241'adir Informe' + AddAndDesignReport = 'A'#241'adir y D&ise'#241'ar Informe...' + NewCompositionCaption = 'Nueva Composici'#243'n' + Name0 = '&Nombre:' + Caption = '&T'#237'tulo:' + AvailableSources = '&Fuente(s) Disponible(s)' + OnlyComponentsInActiveForm = 'S'#243'lamente Componentes en Formulario &Activo' + OnlyComponentsWithoutLinks = 'S'#243'lamente Componentes &sin Enlaces Existentes' + ItemName = 'Nombre' + ItemDescription = 'Descripci'#243'n' + ConfirmDeleteItem = 'Quiere borrar los siguientes elementos: %s ?' + AddItemsToComposition = 'A'#241'adir Elementos a la Composici'#243'n' + HideAlreadyIncludedItems = 'Ocultar Elementos Ya &Incluidas' + AvailableItems = 'Elementos D&isponibles' + Items = '&Elementos' + Enable = '&Habilitar' + Options = 'Opciones' + Show = 'Mostrar' + PaintItemsGraphics = '&Pintar Elementos Gr'#225'ficos' + Description = 'Descripci'#243'n:' + NewReport = 'Nuevo Informe' + OnlySelected = 'S'#243'lo &Seleccionados' + ExtendedSelect = 'Selecci'#243'n &Extendida' + IncludeFixed = '&Incluir Fijos' + Fonts = 'Fuentes' + BtnFont = 'Fue&nte...' + BtnEvenFont = 'Fuente &Par...' + BtnOddFont = 'Fuente &Impar...' + BtnFixedFont = 'Fuente F&ijo...' + BtnGroupFont = 'Fuente de Gru&po...' + BtnChangeFont = 'Cambiar Fue&nte...' + Font = 'Fuente' + OddFont = 'Fuente Impar' + EvenFont = 'Fuente Par' + PreviewFont = 'Fuente Vista Prev.' + CaptionNodeFont = 'Fuente T'#237'tulo del Nivel' + GroupNodeFont = 'Fuente T'#237'tulos de Grupo' + GroupFooterFont = 'Fuente Pies de Grupo' + HeaderFont = 'Fuente Cabecera' + FooterFont = 'Fuente Pie' + BandFont = 'Fuente Groups' + Transparent = '&Transparente' + FixedTransparent = 'Transparente Fijo' + CaptionTransparent = 'T'#237'tulo Transparente' + GroupTransparent = 'Grupo Transparente' + GraphicAsTextValue = '(GRAPHIC)' + Colors = 'Colores' + Color = 'Co&lor:' + OddColor = 'Co&lor Impar:' + EvenColor = 'Color Par:' + PreviewColor = 'Color V.&Previa:' + BandColor = 'Color &Grupos:' + LevelCaptionColor = 'Color T'#237'tulo Ni&vel:' + HeaderColor = 'Color Cab&ecera:' + GroupNodeColor = 'Color &Nodo Grupo:' + GroupFooterColor = 'Color Pie &Grupo:' + FooterColor = 'Color P&ie:' + FixedColor = 'Color F&ijo:' + GroupColor = 'Color Gru&po:' + CaptionColor = 'Color T'#237'tulo:' + GridLinesColor = 'Color L'#237'nea &Rejilla:' + Bands = '&Grupos' + LevelCaptions = 'T'#237'tulo Niveles' + Headers = 'Cab&eceras' + Footers = 'P&ies&' + GroupFooters = 'Pies de &Grupos' + Preview = 'Vista Pre&via' + PreviewLineCount = 'N'#250'm.L'#237'neas V.Previa:' + AutoCalcPreviewLineCount = 'A&uto-Calcular L'#237'neas V.Previa' + Grid = 'Re&jilla&' + NodesGrid = '&Nodos de Rejilla' + GroupFooterGrid = 'Rejilla de Gru&pos Pie' + StateImages = 'Imagenes de E&stado' + Images = '&Imagenes' + TextAlign = '&Alineaci'#243'n Texto' + TextAlignHorz = 'Hori&zontal' + TextAlignVert = '&Vertical' + TextAlignLeft = 'Izquierda' + TextAlignCenter = 'Centrado' + TextAlignRight = 'Derecha' + TextAlignTop = 'Superior' + TextAlignVCenter = 'Centrado' + TextAlignBottom = 'Inferior' + BorderLines = 'L'#237'neas de &Borde' + HorzLines = 'L'#237'neas Hori&zontales' + VertLines = 'L'#237'neas &Verticales' + FixedHorzLines = 'L'#237'neas Horizontales Fi&jas' + FixedVertLines = 'L'#237'neas Verticales Fij&as' + FlatCheckMarks = 'Cajas de Verificaci'#243'n P&lanas' + CheckMarksAsText = '&Mostrar Cajas Verificaci'#243'n como Text' + RowAutoHeight = 'Altura &Fila Auto.' + EndEllipsis = '&Puntos Suspens.' + DrawBorder = '&Dibujar Borde' + FullExpand = '&Expandir Todo' + BorderColor = 'Color &Borde:' + AutoNodesExpand = 'Expandir N&odos' + ExpandLevel = 'Expandir &Niveles:' + FixedRowOnEveryPage = 'Filas Fijas en &Cada P'#225'gina' + DrawMode = '&Modo Dibujo:' + DrawModeStrict = 'Estricto' + DrawModeOddEven = 'Modo Filas Par/Impar' + DrawModeChess = 'Modo '#39'Ajedrez'#39 + DrawModeBorrow = 'Prestar de Fuente' + ThreeDEffects = 'Efectos 3D' + Use3DEffects = 'Usar Efectos &3D' + Soft3D = '3D "Suave"' + Behaviors = 'Comportamiento' + Miscellaneous = 'Miscelaneo' + OnEveryPage = 'En Cada P'#225'gina' + NodeExpanding = 'Expansi'#243'n de Nodos' + Selection = 'Selecci'#243'n' + NodeAutoHeight = 'Altura &Nodo Auto.' + TransparentGraphics = 'Gr'#225'ficos &Transparentes' + AutoWidth = 'An&chura Auto.' + DisplayGraphicsAsText = 'Mostrar Gr'#225'fico Como &Texto' + TransparentColumnGraphics = '&Gr'#225'ficos Transparentes' + BandsOnEveryPage = 'Grupos En C&ada P'#225'gina' + HeadersOnEveryPage = 'Cabeceras en Cada &P'#225'gina' + FootersOnEveryPage = 'Pies en Ca&da P'#225'gina' + Graphics = 'Gr'#225'ficos' + OutOfResources = 'Out of Resources' + FileAlreadyExists = 'Fichero "%s" Ya Existe.' + ConfirmOverWrite = 'Fichero "%s" ya existe. '#191'Sobreescribir?' + InvalidFileName = 'Nombre No V'#225'lido "%s"' + RequiredFileName = 'Entrar nombre de fichero.' + OutsideMarginsMessage = + 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' + + 'a.' + OutsideMarginsMessage2 = + 'Uno o m'#225's margenes est'#225'n fuera del area de impresi'#243'n de la p'#225'gin' + + 'a.' + InvalidMarginsMessage = 'Uno o m'#225's margenes tiene valores no v'#225'lidos.' + InvalidMargins = 'Uno o m'#225's valores de los margenes no es v'#225'lido' + OutsideMargins = + 'Uno o m'#225's margenes se ha establecido fuera del area de impresi'#243'n' + + ' de la p'#225'gina' + ThereAreNowItemsForShow = 'No existen elementos en '#233'sta vista' + PageBackground = 'Fondo de P'#225'gina' + PenColor = 'Color del L'#225'piz' + FontColor = 'Color del Fuente' + BrushColor = 'Color de la Brocha' + HighLight = 'HighLight' + ColorBlack = 'Negro' + ColorDarkRed = 'Rojo Oscuro' + ColorRed = 'Rojo' + ColorPink = 'Rosa' + ColorRose = 'Rosado' + ColorBrown = 'Marr'#243'n' + ColorOrange = 'Naranja' + ColorLightOrange = 'Naranja Claro' + ColorGold = 'Oro' + ColorTan = 'Dorado' + ColorOliveGreen = 'Verde Oliva' + ColorDrakYellow = 'Amarillo Oscuro' + ColorLime = 'Lima' + ColorYellow = 'Amarillo' + ColorLightYellow = 'Amarillo Claro' + ColorDarkGreen = 'Verde Oscuro' + ColorGreen = 'Verde' + ColorSeaGreen = 'Verde Mar' + ColorBrighthGreen = 'Verde Florecente' + ColorLightGreen = 'Verde Claro' + ColorDarkTeal = 'VerdeAzul Oscuro' + ColorTeal = 'VerdeAzul' + ColorAqua = 'Aqua' + ColorTurquoise = 'Turquesa' + ColorLightTurquoise = 'Turquesa Claro' + ColorDarkBlue = 'Azul Oscuro' + ColorBlue = 'Azul' + ColorLightBlue = 'Azul Claro' + ColorSkyBlue = 'Azul Cielo' + ColorPaleBlue = 'Azul P'#225'lido' + ColorIndigo = 'Indigo' + ColorBlueGray = 'Azul Gris' + ColorViolet = 'Violeta' + ColorPlum = 'Granate' + ColorLavender = 'Lav'#225'nder' + ColorGray80 = 'Gris-80%' + ColorGray50 = 'Gris-50%' + ColorGray40 = 'Gris-40%' + ColorGray25 = 'Gris-25%' + ColorWhite = 'Blanco' + Texture = '&Textura' + Pattern = '&Dibujo' + Picture = '&Im'#225'gen' + Foreground = '&Primer Plano' + Background = '&Fondo' + Sample = 'Ejemplo:' + FEFCaption = 'Efectos de Relleno' + PaintMode = '&Modo Pintar' + PaintModeCenter = 'Centrar' + PaintModeStretch = 'Estirar' + PaintModeTile = 'Mosaico' + PaintModeProportional = 'Proporcional' + PatternGray5 = '5%' + PatternGray10 = '10%' + PatternGray20 = '20%' + PatternGray25 = '25%' + PatternGray30 = '30%' + PatternGray40 = '40%' + PatternGray50 = '50%' + PatternGray60 = '60%' + PatternGray70 = '70%' + PatternGray75 = '75%' + PatternGray80 = '80%' + PatternGray90 = '90%' + PatternLightDownwardDiagonal = 'Light downward diagonal' + PatternLightUpwardDiagonal = 'Light upward diagonal' + PatternDarkDownwardDiagonal = 'Dark downward diagonal' + PatternDarkUpwardDiagonal = 'Dark upward diagonal' + PatternWideDownwardDiagonal = 'Wide downward diagonal' + PatternWideUpwardDiagonal = 'Wide upward diagonal' + PatternLightVertical = 'Light vertical' + PatternLightHorizontal = 'Light horizontal' + PatternNarrowVertical = 'Narrow vertical' + PatternNarrowHorizontal = 'Narrow horizontal' + PatternDarkVertical = 'Dark vertical' + PatternDarkHorizontal = 'Dark horizontal' + PatternDashedDownward = 'Dashed downward' + PatternDashedUpward = 'Dashed upward' + PatternDashedVertical = 'Dashed vertical' + PatternDashedHorizontal = 'Dashed horizontal' + PatternSmallConfetti = 'Small confetti' + PatternLargeConfetti = 'Large confetti' + PatternZigZag = 'Zig zag' + PatternWave = 'Wave' + PatternDiagonalBrick = 'Diagonal brick' + PatternHorizantalBrick = 'Horizontal brick' + PatternWeave = 'Weave' + PatternPlaid = 'Plaid' + PatternDivot = 'Divot' + PatternDottedGrid = 'Dottedgrid' + PatternDottedDiamond = 'Dotted diamond' + PatternShingle = 'Shingle' + PatternTrellis = 'Trellis' + PatternSphere = 'Sphere' + PatternSmallGrid = 'Small grid' + PatternLargeGrid = 'Large grid' + PatternSmallCheckedBoard = 'Small checked board' + PatternLargeCheckedBoard = 'Large checked board' + PatternOutlinedDiamond = 'Outlined diamond' + PatternSolidDiamond = 'Solid diamond' + TextureNewSprint = 'Newsprint' + TextureGreenMarble = 'Green marble' + TextureBlueTissuePaper = 'Blue tissue paper' + TexturePapyrus = 'Papyrus' + TextureWaterDroplets = 'Water droplets' + TextureCork = 'Cork' + TextureRecycledPaper = 'Recycled paper' + TextureWhiteMarble = 'White marble' + TexturePinkMarble = 'Pink marble' + TextureCanvas = 'Canvas' + TexturePaperBag = 'Paper bag' + TextureWalnut = 'Walnut' + TextureParchment = 'Parchment' + TextureBrownMarble = 'Brown marble' + TexturePurpleMesh = 'Purple mesh' + TextureDenim = 'Denim' + TextureFishFossil = 'Fish fossil' + TextureOak = 'Oak' + TextureStationary = 'Stationary' + TextureGranite = 'Granite' + TextureBouquet = 'Bouquet' + TextureWonenMat = 'Woven mat' + TextureSand = 'Sand' + TextureMediumWood = 'Medium wood' + FSPCaption = 'Vista de Im'#225'gen' + Width = 'Altura' + Height = 'Altura' + BrushDlgCaption = 'Propiedades de la Brocha' + Style = 'E&stilo:' + ENFNCaption = 'Escoge Nombre de Fichero' + EnterNewFileName = 'Introduzca Nuevo Nombre de Fichero' + DefinePrintStylesCaption = 'Definir Estilos de Impresi'#243'n' + DefinePrintStylesTitle = 'E&stilos de Impresi'#243'n' + DefinePrintStylesWarningDelete = #191' Desea borrar "%s" ?' + DefinePrintStylesWarningClear = #191'Desea borrar todos los estilos existentes?' + Clear = 'E&liminar...' + CustomSize = 'Tama'#241'o Personalizado' + DefaultTray = 'Bandeja de Entrada' + InvalidPrintDevice = 'La impresora seleccionada no es v'#225'lida' + NotPrinting = 'La impresora no est'#225' imprimiendo' + Printing = 'Imprimiendo' + DeviceOnPort = '%s en %s' + PrinterIndexError = #205'ndice de Impresora fueera de rango' + NoDefaultPrintDevice = 'No hay ninguna impresora seleccionada' + AutoTextDialogCaption = 'Editar Entidades AutoTexto' + EnterAutoTextEntriesHere = 'Entrar Entidades A&utoTexto Aqu'#237':' + PrintDialogCaption = 'Imprimir' + PrintDialogPrinter = 'Impresora' + PrintDialogName = '&Nombre:' + PrintDialogStatus = 'Estado:' + PrintDialogType = 'Tipo:' + PrintDialogWhere = 'D'#243'nde:' + PrintDialogComment = 'Comentario:' + PrintDialogPrintToFile = 'A &Fichero' + PrintDialogPageRange = 'Rango de P'#225'g.' + PrintDialogAll = '&Todas' + PrintDialogCurrentPage = 'P'#225'g. A&ctual' + PrintDialogSelection = '&Selecci'#243'n' + PrintDialogPages = '&P'#225'ginas:' + PrintDialogRangeLegend = 'Entre el n'#250'mero de p'#225'gina o un rango de p'#225'ginas' + PrintDialogCopies = 'Copias' + PrintDialogNumberOfPages = 'N&'#250'mero de P'#225'g.:' + PrintDialogNumberOfCopies = 'N'#250'mero de &Copias:' + PrintDialogCollateCopies = 'In&tercalar Copias' + PrintDialogAllPages = 'Todas' + PrintDialogEvenPages = 'Pares' + PrintDialogOddPages = 'Impares' + PrintDialogPrintStyles = 'Est&ilos Impresi'#243'n' + PrintDialogOpenDlgTitle = 'Elije un Fichero' + PrintDialogOpenDlgAllFiles = 'Todos los Ficheros' + PrintDialogOpenDlgPrinterFiles = 'Ficheros de Impresora' + PrintDialogPageNumbersOutOfRange = 'N'#250'mero de p'#225'gina fuera de rango (%d - %d)' + PrintDialogInvalidPageRanges = 'Rango de p'#225'ginas no v'#225'lido' + PrintDialogRequiredPageNumbers = 'Introduzca n'#250'meros de p'#225'ginas' + PrintDialogNoPrinters = 'No printers are installed.' + PrintDialogInPrintingState = 'La impresora est'#225' ocupado.' + PrintDialogPSPaused = 'Pausado' + PrintDialogPSPendingDeletion = 'Pendiente Borrar' + PrintDialogPSBusy = 'Ocupado' + PrintDialogPSDoorOpen = 'Puerta Abierta' + PrintDialogPSError = 'Error' + PrintDialogPSInitializing = 'Inicializando' + PrintDialogPSIOActive = 'E/S Activo' + PrintDialogPSManualFeed = 'Alimentaci'#243'n Manual' + PrintDialogPSNoToner = 'Toner Terminado' + PrintDialogPSNotAvailable = 'No Disponible' + PrintDialogPSOFFLine = 'Fuera de L'#237'nea' + PrintDialogPSOutOfMemory = 'Memoria Agotada' + PrintDialogPSOutBinFull = 'Bandeja de Salida Llena' + PrintDialogPSPagePunt = 'Page Punt' + PrintDialogPSPaperJam = 'Papel Enganchado' + PrintDialogPSPaperOut = 'Sin Papel' + PrintDialogPSPaperProblem = 'Problema de Papel' + PrintDialogPSPrinting = 'Imprimiendo' + PrintDialogPSProcessing = 'Procesando' + PrintDialogPSTonerLow = 'Toner Bajo' + PrintDialogPSUserIntervention = 'Intervenci'#243'n del Usuario' + PrintDialogPSWaiting = 'Esperando' + PrintDialogPSWarningUp = 'Precalientamiento' + PrintDialogPSReady = 'Lista' + PrintDialogPSPrintingAndWaiting = 'Imprimiendo: %d documento(s) esperando' + LeftMargin = 'Margen Izquierdo' + TopMargin = 'Margin Superior' + RightMargin = 'Margin Derecho' + BottomMargin = 'Margin Inferior' + GutterMargin = 'Gutter' + HeaderMargin = 'Cabecera' + FooterMargin = 'Pie' + UnitsInches = '"' + UnitsCentimeters = 'cm' + UnitsMillimeters = 'mm' + UnitsPoints = 'pt' + UnitsPicas = 'pi' + UnitsDefaultName = 'Predeterminada' + UnitsInchesName = 'Pulgadas' + UnitsCentimetersName = 'Centimetros' + UnitsMillimetersName = 'Milimetros' + UnitsPointsName = 'Puntos' + UnitsPicasName = 'Picas' + PrintPreview = 'Vista Previa' + ReportDesignerCaption = 'Dise'#241'ador de Informes' + CompositionDesignerCaption = 'Dise'#241'ador de Composici'#243'n' + ComponentNotSupportedByLink = 'Component "%s" not supported by TdxComponentPrinter' + ComponentNotSupported = 'Component "%s" not supported by TdxComponentPrinter' + PrintDeviceNotReady = 'La impresora no est'#225' instalada o no est'#225' preparada' + UnableToGenerateReport = 'No se ha podido generar el informe' + PreviewNotRegistered = 'There is no registered preview form' + ComponentNotAssigned = '%s' + PrintDeviceIsBusy = 'Impresora ocupada' + PrintDeviceError = #161'La impresora ha encontrado un error!' + MissingComponent = 'Missing "Component" property' + DataProviderDontPresent = 'There are no Links with Assigned Component in Composition' + BuildingReport = 'Generando informe: Completado %d%%' + PrintingReport = + 'Imprimiendo Informe: Completado %d p'#225'gina(s). Pulse ESC to abort' + + 'ar...' + DefinePrintStylesMenuItem = 'Definir E&stilos de Impresi'#243'n...' + AbortPrinting = #191'Abortar impresi'#243'n?' + StandardStyle = 'Estilo Estandar' + FontStyleBold = 'Negrita' + FontStyleItalic = 'It'#225'lica' + FontStyleUnderline = 'Subrayado' + FontStyleStrikeOut = 'Tachado' + Pt = 'pt.' + NoPages = '[No p'#225'ginas]' + PageWidth = 'Anchura P'#225'g' + WholePage = 'Pag. Completa' + TwoPages = 'Dos P'#225'ginas' + FourPages = 'Cuatro P'#225'ginas' + WidenToSourceWidth = 'Ajustar a Anchura' + MenuBar = 'MenuBar' + StandardBar = 'Standard' + HeaderFooterBar = 'Header and Footer' + ShortcutMenusBar = 'Shortcut Menus' + AutoTextBar = 'AutoTexto' + MenuFile = '&Ficheros' + MenuFileDesign = '&Dise'#241'o...' + MenuFilePrint = '&Imprimir...' + MenuFilePageSetup = 'Con&fig. P'#225'gina...' + MenuPrintStyles = 'Estilos Impresi'#243'n' + MenuFileExit = '&Cerrar' + MenuEdit = '&Editar' + MenuEditCut = 'Cor&tar' + MenuEditCopy = '&Copiar' + MenuEditPaste = '&Pegar' + MenuEditDelete = '&Borrar' + MenuEditFind = '&Buscar...' + MenuEditFindNext = 'Buscar Si&guiente' + MenuEditReplace = '&Reemplazar...' + MenuLoad = '&Cargar...' + MenuPreview = 'V. Pre&via...' + MenuInsert = '&Insertar' + MenuInsertAutoText = '&AutoTexto' + MenuInsertEditAutoTextEntries = 'AutoTe&xto...' + MenuInsertAutoTextEntries = '&(Lista de Entradas AutoTexto)' + MenuInsertAutoTextEntriesSubItem = 'In&sertar AutoTexto' + MenuInsertPageNumber = 'N'#250'm &P'#225'g.' + MenuInsertTotalPages = '&N'#250'm. de P'#225'g.' + MenuInsertPageOfPages = 'N'#250'm de P'#225'&g. de P'#225'ginas' + MenuInsertDateTime = 'Fechay Hora' + MenuInsertDate = '&Fecha' + MenuInsertTime = '&Hora' + MenuInsertUserName = 'Nombre &Usuario' + MenuInsertMachineName = 'Nombre &Maquina' + MenuView = '&Vista' + MenuViewMargins = '&Margenes' + MenuViewFlatToolBarButtons = 'Botones &Planos' + MenuViewLargeToolBarButtons = 'Botones &Grandes' + MenuViewMarginsStatusBar = 'Barra de M&argenes' + MenuViewPagesStatusBar = 'Barra de E&stado' + MenuViewToolBars = '&Herramientas' + MenuViewPagesHeaders = '&Cabeceras de P'#225'gina' + MenuViewPagesFooters = '&Pies de P'#225'ginas' + MenuViewSwitchToLeftPart = 'Switch to Left Part' + MenuViewSwitchToRightPart = 'Switch to Right Part' + MenuViewSwitchToCenterPart = 'Switch to Center Part' + MenuViewHFSwitchHeaderFooter = 'Mo&strar Cabecera/Pie' + MenuViewHFClose = '&Cerrar' + MenuZoom = '&Aumentar' + MenuZoomPercent100 = 'Porcien &100' + MenuZoomPageWidth = '&Anchura P'#225'gina' + MenuZoomWholePage = 'P'#225'gina C&ompleta' + MenuZoomTwoPages = '&Dos P'#225'ginas' + MenuZoomFourPages = '&Cuatro P'#225'ginas' + MenuZoomMultiplyPages = 'P'#225'ginas &M'#250'ltiples' + MenuZoomWidenToSourceWidth = 'Aju&star a Anchura' + MenuZoomSetup = '&Config...' + MenuPages = '&P'#225'ginas' + MenuGotoPage = '&Saltar' + MenuGotoPageFirst = '&Primera P'#225'g.' + MenuGotoPagePrev = 'P'#225'g. &Anteror' + MenuGotoPageNext = 'Pr'#243'&xima P'#225'g.' + MenuGotoPageLast = #218'l&tima P'#225'g.' + MenuActivePage = 'P'#225'g. Acti&va:' + MenuFormat = 'F&ormato' + MenuFormatHeaderAndFooter = '&Cabeceras y Pies' + MenuFormatAutoTextEntries = 'Entradas &AutoTexto...' + MenuFormatDateTime = 'Fecha y &Hora...' + MenuFormatPageNumbering = '&Numeraci'#243'n P'#225'ginas...' + MenuFormatPageBackground = 'Fon&do...' + MenuFormatShrinkToPage = '&Reducir a P'#225'g.' + MenuShowEmptyPages = 'Mostrar P'#225'g. &Vacias' + MenuFormatHFBackground = 'Fondo de Cabecera/Pie...' + MenuFormatHFClear = 'Vaciar Texto' + MenuTools = '&Herramientas' + MenuToolsCustomize = '&Personalizar...' + MenuToolsOptions = '&Opciones...' + MenuHelp = 'A&yuda' + MenuHelpTopics = '&Temas de Ayuda...' + MenuHelpAbout = '&Acerca de...' + MenuShortcutPreview = 'V.Previa' + MenuShortcutAutoText = 'AutoTexto' + MenuBuiltInMenus = 'Men'#250's Incorporados' + MenuShortCutMenus = 'Men'#250's de Atajos' + MenuNewMenu = 'Men'#250' Nuevo' + HintFileDesign = 'Dise'#241'ar Informe' + HintFilePrint = 'Imprimir' + HintFilePrintDialog = 'Configuarar la Impresora' + HintFilePageSetup = 'Configurar la P'#225'gina' + HintFileExit = 'Cerrar Vista Previa' + HintEditFind = 'Buscar' + HintEditFindNext = 'Buscar Siguiente' + HintEditReplace = 'Reemplazar' + HintInsertEditAutoTextEntries = 'Editar Entradas AutoTexto' + HintInsertPageNumber = 'Insertar N'#250'mero P'#225'gina' + HintInsertTotalPages = 'Insertar N'#250'mero de P'#225'ginas' + HintInsertPageOfPages = 'Insertar P'#225'gina N'#250'mero de P'#225'ginas' + HintInsertDateTime = 'Insertar Fecha y Hora' + HintInsertDate = 'Insertar Fecha' + HintInsertTime = 'Insert Hora' + HintInsertUserName = 'Insertar Nombre Usuario' + HintInsertMachineName = 'Insertar Nombre Maquina' + HintViewMargins = 'Ver Margenes' + HintViewLargeButtons = 'Ver Botones Grandes' + HintViewMarginsStatusBar = 'Ver Barra de Esatdo de Margenes' + HintViewPagesStatusBar = 'Ver Barra de Estado de P'#225'gina' + HintViewPagesHeaders = 'Vee Cabecera de P'#225'gina' + HintViewPagesFooters = 'Ver Pie de P'#225'gina' + HintViewSwitchToLeftPart = 'Cambiar a Cabecera/Pie Izquierda' + HintViewSwitchToRightPart = 'Cambiar a Cabecera/Pie Derecha' + HintViewSwitchToCenterPart = 'Cambiar a Cabecera/Pie Centrada' + HintViewHFSwitchHeaderFooter = 'Cambiar a Cabecera y Pie' + HintViewHFClose = 'Cerrar' + HintViewZoom = 'Aumentar' + HintZoomPercent100 = 'Aumentar al 100%' + HintZoomPageWidth = 'Aumentar a Anchura de P'#225'gina' + HintZoomWholePage = 'P'#225'gina Completa' + HintZoomTwoPages = 'Dos P'#225'ginas' + HintZoomFourPages = 'Cuatro P'#225'ginas' + HintZoomMultiplyPages = 'P'#225'ginas M'#250'ltiples' + HintZoomWidenToSourceWidth = 'Ajustar a la Anchura' + HintZoomSetup = 'Introducir Factor de Aumento' + HintFormatDateTime = 'Formato de Fecha y Hora' + HintFormatPageNumbering = 'Formato de N'#250'mero de P'#225'gina' + HintFormatPageBackground = 'Fondo' + HintFormatShrinkToPage = 'Reducir a P'#225'gina' + HintFormatHFBackground = 'Fondo de Cabecera/Pie' + HintFormatHFClear = 'Vaciar Texto Cabecera/Pie' + HintGotoPageFirst = 'Primera P'#225'gina' + HintGotoPagePrev = 'P'#225'gina Anterior' + HintGotoPageNext = 'Pr'#243'xima P'#225'gina' + HintGotoPageLast = #218'ltima P'#225'gina' + HintActivePage = 'P'#225'gina Activa' + HintToolsCustomize = 'Personalizar Herramientas' + HintToolsOptions = 'Opciones' + HintHelpTopics = 'Temas de Ayuda' + HintHelpAbout = 'Acerca de' + PopupMenuLargeButtons = 'Botones &Grandes' + PopupMenuFlatButtons = 'Botones &Planos' + PaperSize = 'Tama'#241'o Papel' + Status = 'Estado' + StatusReady = 'Lista' + StatusPrinting = 'Imprimiendo. %d p'#225'gina(s) terminada(s)' + StatusGenerateReport = 'Generando Informe. %d%% completado.' + HintDoubleClickForChangePaperSize = 'Doble Clic para Cambiar el Tama'#241'o de P'#225'gina' + HintDoubleClickForChangeMargins = 'Doble Clic para Cambiar Margenes' + DTFormatsCaption = 'Fecha y Hora' + DTFormatsAvailableDateFormats = 'Formatos de &Fecha Disponibes:' + DTFormatsAvailableTimeFormats = 'Formatos de &Hora Disponibles:' + DTFormatsAutoUpdate = 'Act. &Autom'#225'tica' + DTFormatsChangeDefaultFormat = + 'Confirme que desea cambiar el formato de fecha y hora al "%s" -' + + ' "%s" ?' + PNFormatsCaption = 'Formato de N'#250'mero de P'#225'gina' + PageNumbering = 'Numeraci'#243'n de P'#225'ginas' + PNFormatsNumberFormat = '&Format N'#250'mero:' + PNFormatsContinueFromPrevious = '&Continuar desde '#218'ltima Secci'#243'n' + PNFormatsStartAt = 'Empezar &En:' + PNFormatsChangeDefaultFormat = + 'Confirme que desea cambiar el formato de numeraci'#243'n de p'#225'ginas a' + + 'l "%s" ?' + ZoomDlgCaption = 'Aumentar' + ZoomDlgZoomTo = 'Aumentar a' + ZoomDlgPageWidth = '&Ancho P'#225'g.' + ZoomDlgWholePage = 'P'#225'g.C&ompleta' + ZoomDlgTwoPages = '&Dos P'#225'ginas' + ZoomDlgFourPages = '&Cuatro P'#225'g.' + ZoomDlgManyPages = '&Varias P'#225'g.:' + ZoomDlgPercent = 'P&orcien:' + ZoomDlgPreview = 'Vista' + ZoomDlgFontPreview = '10pt Times New Romam' + ZoomDlgFontPreviewString = 'AaBbCcDdEeXxYyZz' + Pages = 'P'#225'ginas' + Cancel = 'Cancelar' + PreferenceDlgCaption = 'Opciones' + PreferenceDlgTab1 = '&General' + PreferenceDlgShow = '&Mostrar' + PreferenceDlgMargins = '&Margenes' + PreferenceDlgMarginsHints = 'A&yudas Margenes' + PreferenceDlgMargingWhileDragging = 'Ayudas Margins con A&rrastre' + PreferenceDlgLargeBtns = 'Botones &Grandes para Barras' + PreferenceDlgFlatBtns = 'Botones &Planos para Barras' + PreferenceDlgMarginsColor = '&Color Margenes:' + PreferenceDlgMeasurementUnits = '&Unidades de Medida:' + PreferenceDlgSaveForRunTimeToo = 'Gua&rdar en Ejecucci'#243'n tambien' + PreferenceDlgZoomScroll = 'Despla&zamiento con IntelliMouse' + PreferenceDlgZoomStep = 'Au&mento:' + CloneStyleCaptionPrefix = 'Copia (%d) de' + InvalideStyleCaption = 'Nombre de estilo "%s" existente. Por favor, introduzca otro.' + PageSetupCaption = 'Configuraci'#243'n de la P'#225'gina' + StyleName = '&Nombre Estilo:' + Page = '&P'#225'gina' + Margins = '&Margenes' + HeaderFooter = '&Cabecera\Pie' + Scaling = '&Escala' + Paper = 'Papel' + PaperType = 'T&ipo' + PaperDimension = 'Dimensi'#243'nes' + PaperWidth = '&Anchura:' + PaperHeight = 'A<ura:' + PaperSource = 'Bande&ja' + Orientation = 'Orientaci'#243'n' + Portrait = 'N&ormal' + Landscape = '&Apaisado' + PrintOrder = 'Orden de Impresi'#243'n' + DownThenOver = '&Abajo, derecha' + OverThenDown = '&Derecha, abajo' + Shading = 'Sombreado' + PrintUsingGrayShading = 'Imprimir usando sombreado &gris' + CenterOnPage = 'Centrar' + Horizontally = 'Hori&zontal' + Vertically = '&Vertical' + Header = 'Cabecera' + BtnHeaderFont = '&Fuente...' + BtnHeaderBackground = '&Fondo' + Footer = 'Pie' + BtnFooterFont = 'Fue&nte...' + BtnFooterBackground = 'F&ondo' + CaptionTop = '&Sup.:' + CaptionLeft = '&Izqu.:' + CaptionRight = '&Derecha:' + CaptionBottom = '&Inferior:' + Header2 = '&Cabec.:' + Footer2 = '&Pie:' + Alignment = 'Alineamiento' + VertAlignment = 'Alineamiento Vertical' + ReverseOnEvenPages = 'Al &rev'#233's en p'#225'ginas pares' + AdjustTo = '&Ajustar a:' + FitTo = 'P'#225'&ginas:' + PercentOfNormalSize = '% tama'#241'o normal' + PagesWideBy = 'p'#225'g(s) de &ancho' + Tall = 'de a<o' + XOfY = 'De' + LastPrinted = #218'ltima Impresi'#243'n' + FileName = 'Fichero' + FileNameAndPath = 'Fichero y camino' + PrintedBy = 'Impreso por' + PrintedOn = 'Impreso el' + CreatedBy = 'Creado por' + CreatedOn = 'Creado el' + Confidential = 'Confidencial' + HFFunctionNameUnknown = 'Desconocido' + HFFunctionNamePageNumber = 'N'#250'm. P'#225'gina' + HFFunctionNameTotalPages = 'P'#225'g. Totales' + HFFunctionNamePageOfPages = 'P'#225'g. # de P'#225'gs. #' + HFFunctionNameDateTime = 'Fecha y Hora' + HFFunctionNameDate = 'Fecha' + HFFunctionNameTime = 'Hora' + HFFunctionNameUserName = 'Nombre Usuario' + HFFunctionNameMachineName = 'Nombre Maquina' + HFFunctionHintPageNumber = 'Page Number' + HFFunctionHintTotalPages = 'Total Pages' + HFFunctionHintPageOfPages = 'Page # of Pages #' + HFFunctionHintDateTime = 'Date and Time Printed' + HFFunctionHintDate = 'Date Printed' + HFFunctionHintTime = 'Time Printed' + HFFunctionHintUserName = 'User Name' + HFFunctionHintMachineName = 'Machine Name' + HFFunctionTemplatePageNumber = 'Page #' + HFFunctionTemplateTotalPages = 'Total Pages' + HFFunctionTemplatePageOfPages = 'Page # of Pages #' + HFFunctionTemplateDateTime = 'Date & Time Printed' + HFFunctionTemplateDate = 'Date Printed' + HFFunctionTemplateTime = 'Time Printed' + HFFunctionTemplateUserName = 'User Name' + HFFunctionTemplateMachineName = 'Machine Name' + January = 'Enero' + February = 'Febrero' + March = 'Marzo' + April = 'Abril' + May = 'Mayo' + June = 'Junio' + July = 'Julio' + August = 'Agosto' + September = 'Septiembre' + October = 'Octubre' + November = 'Noviembre' + December = 'Diciembre' + East = 'Este' + West = 'Oeste' + South = 'Sur' + North = 'Norte' + Total = 'Total' + Plan = 'Plan' + SwimmingPool = 'Swimming-pool' + Administration = 'Administration' + Park = 'Park' + CarParking = 'Car-Parking' + CorporateHeadquarters = 'Corporate' + SalesAndMarketing = 'Sales and' + Engineering = 'Engineering' + FieldOfficeCanada = 'Field Office:' + OrderNoCaption = 'OrderNo' + NameCaption = 'Name' + CountCaption = 'Count' + CompanyCaption = 'Company' + AddressCaption = 'Address' + PriceCaption = 'Price' + CashCaption = 'Cash' + Name1 = 'Jennie Valentine' + Name2 = 'Sam Hill' + Company1 = 'Jennie Inc.' + Company2 = 'Daimler-Chrysler AG' + Address1 = '123 Home Lane' + Address2 = '9333 Holmes Dr.' + CountIs = 'Count is: %d' + Regular = 'Regular' + Irregular = 'Irregular' + TLBand = 'Item Data' + TLColumnName = 'Name' + TLColumnAxisymmetric = 'Axisymmetric' + TLColumnItemShape = 'Shape' + ItemShapeAsText = '(Graphic)' + Item1Name = 'Cone' + Item2Name = 'Cylinder' + Item3Name = 'Pyramid' + Item4Name = 'Box' + Item5Name = 'Free Surface' + Item2Description = 'Axisymmetric geometry figure' + Item3Description = 'Axisymmetric geometry figure' + Item4Description = 'Acute-angled geometry figure' + Item7Description = 'Simple extrusion surface' + PatternIsNotRegistered = 'Pattern "%s" is not registered' + SolidEdgePattern = 'Solid' + ThinSolidEdgePattern = 'Medium Solid' + MediumSolidEdgePattern = 'Medium Solid' + ThickSolidEdgePattern = 'Thick Solid' + DottedEdgePattern = 'Dotted' + DashedEdgePattern = 'Dashed' + DashDotDotEdgePattern = 'Dash Dot Dot' + DashDotEdgePattern = 'Dash Dot' + SlantedDashDotEdgePattern = 'Slanted Dash Dot' + MediumDashDotDotEdgePattern = 'Medium Dash Dot Dot' + HairEdgePattern = 'Hair' + MediumDashDotEdgePattern = 'Medium Dash Dot' + MediumDashedEdgePattern = 'Medium Dashed' + DoubleLineEdgePattern = 'Double Line' + SolidFillPattern = 'Solid' + Gray75FillPattern = '75% Gray' + Gray50FillPattern = '50% Gray' + Gray25FillPattern = '25% Gray' + Gray125FillPattern = '12.5% Gray' + Gray625FillPattern = '6.25% Gray' + HorizontalStripeFillPattern = 'Horizontal Stripe' + VerticalStripeFillPattern = 'Vertical Stripe' + ReverseDiagonalStripeFillPattern = 'Reverse Diagonal Stripe' + DiagonalStripeFillPattern = 'Diagonal Stripe' + DiagonalCrossHatchFillPattern = 'Diagonal Cross Hatch' + ThickCrossHatchFillPattern = 'Thick Cross Hatch' + ThinHorizontalStripeFillPattern = 'Thin Horizontal Stripe' + ThinVerticalStripeFillPattern = 'Thin Vertical Stripe' + ThinReverseDiagonalStripeFillPattern = 'Thin Reverse Diagonal Stripe' + ThinDiagonalStripeFillPattern = 'Thin Diagonal Stripe' + ThinHorizontalCrossHatchFillPattern = 'Thin Horizontal Cross Hatch' + ThinDiagonalCrossHatchFillPattern = 'Thin Diagonal Cross Hatch' + ShowRowAndColumnHeadings = '&Row and column headings' + ShowGridLines = 'GridLines' + SuppressSourceFormats = '&Suppress Source Formats' + RepeatHeaderRowAtTop = 'Repeat header row at top' + DataToPrintDoesnotExist = + 'Can not activate ReportLink because PrintingSystem did not find ' + + 'anything to print.' + JanuaryShort = 'Ene' + FebruaryShort = 'Feb' + MarchShort = 'Mar' + AprilShort = 'Abril' + MayShort = 'Mayo' + JuneShort = 'Jun' + JulyShort = 'Jul' + AugustShort = 'Ago' + SeptemberShort = 'Sept' + OctoberShort = 'Oct' + NovemberShort = 'Nov' + DecemberShort = 'Dic' + TechnicalDepartment = 'Technical Department' + SoftwareDepartment = 'Software Department' + SystemProgrammers = 'System Programmers' + EndUserProgrammers = 'EndUser Programmers' + BetaTesters = 'Beta Testers' + HumanResourceDepartment = 'Human Resource Department' + TreeLines = '&L'#237'neas'#193'rbol' + TreeLinesColor = 'Colore L'#237'neas '#193'rbol:' + ExpandButtons = 'Botones E&xpansi'#243'n' + CheckMarks = 'Cajas Verificaci'#243'n' + TreeEffects = 'Efectos '#193'rbol' + Appearance = 'Apariencia' + CarLevelCaption = 'Coches' + ManufacturerBandCaption = 'Manufacturer Data' + ModelBandCaption = 'Car Data' + ManufacturerNameColumnCaption = 'Name' + ManufacturerLogoColumnCaption = 'Logo' + ManufacturerCountryColumnCaption = 'Country' + CarModelColumnCaption = 'Model' + CarIsSUVColumnCaption = 'SUV' + CarPhotoColumnCaption = 'Photo' + CarManufacturerName1 = 'BMW' + CarManufacturerName2 = 'Ford' + CarManufacturerName3 = 'Audi' + CarManufacturerName4 = 'Land Rover' + CarManufacturerCountry1 = 'Germany' + CarManufacturerCountry2 = 'United States' + CarManufacturerCountry3 = 'Germany' + CarManufacturerCountry4 = 'United Kingdom' + CarModel1 = 'X5 4WD' + CarModel2 = 'Excursion' + CarModel3 = 'S8 Quattro' + CarModel4 = 'G4 Challenge' + True = 'True' + False = 'False' + Auto = 'Auto' + Custom = 'Personal.' + Env = 'Env' + LookAndFeelFlat = 'Plano' + LookAndFeelStandard = 'Estandar' + LookAndFeelUltraFlat = 'UltraPlano' + ViewTab = 'Vista' + BehaviorsTab = 'Comportamiento' + PreviewTab = 'Vista Previa' + CardsTab = 'Fichas' + Formatting = 'Formato' + LookAndFeel = 'Aspecto' + LevelCaption = '&T'#237'tulo' + FilterBar = 'Barra de &Filtro' + Refinements = 'Perfeccionamiento' + ProcessSelection = 'Procesar &Selecci'#243'n' + ProcessExactSelection = 'Procesar Selecci'#243'n E&xacta' + Expanding = 'Despliege' + Groups = '&Grupos' + Details = '&Detalles' + StartFromActiveDetails = 'Empieza desde Detalles Activas' + OnlyActiveDetails = 'S'#243'lo Detalles Activos' + Visible = '&Visible' + PreviewAutoHeight = 'Altura A&utom'#225'tica' + PreviewMaxLineCount = 'L'#237'neas &M'#225'ximas:' + Sizes = 'Tama'#241'os' + KeepSameWidth = 'Manten.Misma Anchura' + KeepSameHeight = 'Manten.Misma Altura' + Framing = 'Marco' + Spacing = 'Espacios' + Shadow = 'Sombra' + Depth = '&Profundidad:' + Position = '&Posici'#243'n' + Positioning = 'Posicionando' + Horizontal = 'H&orizontal:' + Vertical = 'V&ertical:' + SummaryFormat = 'Recuento = 0' + CannotUseOnEveryPageMode = 'Cannot Use OnEveryPage Mode' + IncorrectBandHeadersState = 'Cannot Use BandHeaders OnEveryPage Mode' + IncorrectHeadersState = 'Cannot Use Headers OnEveryPage Mode' + IncorrectFootersState = 'Cannot Use Footers OnEveryPage Mode' + TPicture = 'TPicture' + Copy = '&Copiar' + Save = '&Salvar...' + BaseStyle = 'Estilo Base' + Rectangle = 'Rectangle' + Square = 'Square' + Ellipse = 'Ellipse' + Circle = 'Circle' + RoundRect = 'RoundRect' + RoundSquare = 'RoundSquare' + HorizontalFillPattern = 'Horizontal' + VerticalFillPattern = 'Vertical' + FDiagonalFillPattern = 'FDiagonal' + BDiagonalFillPattern = 'BDiagonal' + CrossFillPattern = 'Cross' + DiagCrossFillPattern = 'DiagCros' + CyclicIDReferences = 'Cyclic ID references %s and %s' + LoadReportDataToFileTitle = 'Cargar Informe' + SaveReportDataToFileTitle = 'Salvar Informe Como' + InvalidExternalStorage = 'Almacenamiento Externo No V'#225'lido' + LinkIsNotIncludedInUsesClause = 'ReportFile contains ReportLink "%0:s"' + InvalidStorageVersion = 'Versi'#243'n de Almacenamiento no V'#225'lido: %d' + PSReportFiles = 'Ficheros de Informes' + ReportFileLoadError = 'No se pudo cargar el informe "%s".' + None = '(Ninguno)' + ReportDocumentIsCorrupted = '(El fichero no es un informe o esta corrupto)' + CloseExplorerHint = 'Cerrar Explorador' + ExplorerCaption = 'Explorador' + ExplorerRootFolderCaption = 'Ra'#237'z' + NewExplorerFolderItem = 'Nueva Carpeta' + CopyOfItem = 'Copia de' + ReportExplorer = 'Explorer de Informes' + DataLoadErrorText = 'No se pudo cargar los datos del informe' + DBBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.' + FileBasedExplorerItemDataLoadError = 'No se pudo cargar los datos.' + DeleteNonEmptyFolderMessageText = 'La carpeta "%s" no est'#225' vacia. A'#250'n as'#237' '#191'desea eliminarlo?' + DeleteFolderMessageText = 'Borrar Carpeta "%s" ?' + DeleteItemMessageText = 'Borrar elemento "%s" ?' + CannotRenameFolderText = + 'Cannot rename folder "%s". A folder with name "%s" already exist' + + 's. Specify a different name.' + CannotRenameItemText = + 'Cannot rename item "%s". An item with name "%s" already exists. ' + + 'Specify a different name.' + OverwriteFolderMessageText = 'This folder "%s" already contains folder named "%s".' + OverwriteItemMessageText = 'This Folder "%s" already contains item named "%s".' + SelectNewRoot = 'Select new Root Directory where the Reports will be stored' + InvalidFolderName = 'Nombre de Carpeta no V'#225'lida "%s"' + InvalidReportName = 'Nombre de Informe no V'#225'lido "%s"' + ExplorerBar = 'Explorador' + MenuFileSave = '&Salvar' + MenuFileSaveAs = 'S&alvar Como...' + MenuFileLoad = '&Cargar' + MenuFileClose = '&Descargar' + HintFileSave = 'Salvar Informe' + HintFileSaveAs = 'Salvar Informe Como' + HintFileLoad = 'Cargar Informe' + HintFileClose = 'Descargar Informe' + MenuExplorer = 'E&xplorador' + MenuExplorerCreateFolder = 'Crear &Carpeta' + MenuExplorerDelete = '&Borrar...' + MenuExplorerRename = 'Reno&mbrar' + MenuExplorerProperties = '&Propiedades...' + MenuExplorerRefresh = 'Refrescar' + MenuExplorerChangeRootPath = 'Cambiar Ra'#237'z...' + MenuExplorerSetAsRoot = 'Establecer Como Ra'#237'z' + MenuExplorerGoToUpOneLevel = 'Subir Un Nivel' + HintExplorerCreateFolder = 'Crear Nueva Carpeta' + HintExplorerDelete = 'Borrar' + HintExplorerRename = 'Renombrar' + HintExplorerProperties = 'Propiedades' + HintExplorerRefresh = 'Refrescar' + HintExplorerChangeRootPath = 'Cambiar Ra'#237'z' + HintExplorerSetAsRoot = 'Establecder Carpeta Actual Como Ra'#237'z' + HintExplorerGoToUpOneLevel = 'Subir Un Nivel' + MenuViewExplorer = 'E&xplorador' + HintViewExplorer = 'Mostar Explorador' + Summary = 'Resumen' + Creator = 'Creado&r:' + CreationDate = 'Crea&do:' + MenuViewThumbnails = 'Miniat&uras' + HintViewThumbnails = 'Mostar Miniaturas' + MenuFormatTitle = 'T&'#237'tulo...' + HintFormatTitle = 'Formatear T'#237'tulo del Informe' + Half = 'Medio' + PredefinedFunctions = 'Funciones Predefinidos' + ZoomParameters = '&Par'#225'metros de Aumento' + WrapData = 'Doblar Datos' + MenuShortcutExplorer = 'Explorador' + ExplorerToolBar = 'Explorador' + MenuThumbnailsSmall = 'Miniaturas &Peque'#241'as' + MenuThumbnailsLarge = 'Miniaturas &Grandes' + MenuShortcutThumbnails = 'Miniaturas' + Buttons = 'Botones' + BtnHeadersFont = 'Fuente &Cabeceras...' + HeadersTransparent = 'Cabeceras Transparentes' + HintListViewDesignerMessage = 'Most Options Are Being Taken Into Account Only In Detailed View' + ColumnHeaders = 'Cabeceras de &Columnas' + ReportGroupNullLookAndFeel = 'Null' + ReportGroupStandardLookAndFeel = 'Standard' + ReportGroupOfficeLookAndFeel = 'Office' + ReportGroupWebLookAndFeel = 'Web' + LayoutGroupDefaultCaption = 'Layout Group' + LayoutItemDefaultCaption = 'Layout Item' + CarManufacturerName5 = 'Volkswagen' + CarManufacturerCountry5 = 'Germany' + CarModel5 = 'Golf GTI' + LuxurySedans = 'Luxury Sedans' + CarManufacturer = 'Manufacturer' + CarModel = 'Model' + CarEngine = 'Engine' + CarTransmission = 'Transmission' + CarTires = 'Tires' + Volvo760V12Manufacturer = 'BMW' + Volvo760V12Model = '760Li V12' + Volvo760V12Engine = + '6.0L DOHC V12 438 HP 48V DI Valvetronic 12-cylinder engine with ' + + '6.0-liter displacement, dual overhead cam valvetrain' + Volvo760V12Transmission = 'Elec 6-Speed Automatic w/Steptronic' + Volvo760V12Tires = + 'P245/45R19 Fr - P275/40R19 Rr Performance. Low Profile tires wit' + + 'h 245mm width, 19.0" rim' + BandHeaderStyle = 'CabeceraGrupo' + CaptionStyle = 'T'#237'tulo' + CardCaptionRowStyle = 'T'#237'tulo Fila Fichas' + CardRowCaptionStyle = 'T'#237'tulo Fila Fichas' + CategoryStyle = 'Categor'#237'a' + ContentStyle = 'Contenido' + ContentEvenStyle = 'Contenido Filas Pares' + ContentOddStyle = 'Contenido Filas Impares' + FilterBarStyle = 'Barra de Filto' + FooterStyle = 'Pie' + FooterRowStyle = 'Pie de Fila' + GroupStyle = 'Grupo' + HeaderStyle = 'Cabecera' + IndentStyle = 'Indentaci'#243'n' + PreviewStyle = 'Vista Previa' + SelectionStyle = 'Selecci'#243'n' + Styles = 'Estilos' + StyleSheets = 'Hojas de Estilos' + BtnTexture = '&Textura...' + BtnTextureClear = 'Elimin&ar' + BtnColor = 'Co&lor...' + BtnSaveAs = 'Salvar &Como...' + BtnRename = '&Renombrar...' + LoadBitmapDlgTitle = 'Cargar Imagen' + DeleteStyleSheet = 'Borrar Hoja de Estilos con Nombre "%s"?' + UnnamedStyleSheet = 'SinNombre' + CreateNewStyleQueryNamePrompt = 'Entre un Nombre de Hoja de Estilo:' + StyleSheetNameAlreadyExists = 'Hoja de Estilo "%s" Ya Existe' + CannotLoadImage = 'No se pudo cargar el imagen "%s"' + UseNativeStyles = '&Usar Estilo Nativo' + SuppressBackgroundBitmaps = '&Suprimir Texturas de Fondo' + ConsumeSelectionStyle = 'Consumir Estilos de Selecci'#243'n' + Size = 'Tama'#241'o' + Levels = 'Niveles' + Unwrap = '&Desdoblar' + UnwrapTopLevel = 'Desdoblar Nivel Superior' + RiseActiveToTop = 'Subir Nivel Activo al Princ'#237'pio' + CannotUseOnEveryPageModeInAggregatedState = 'No se puede usar modo "EnCadaP'#225'gina"' + Pagination = 'Paginaci'#243'n' + ByBands = 'Por Grupos' + ByColumns = 'Por Columnas' + ByRows = 'Por Filas' + ByTopLevelGroups = 'Por Grupos de Primer Nivel' + OneGroupPerPage = 'Un Grupo por P'#225'gina' + Borders = 'Margenes' + ExplicitlyExpandNodes = 'Expandir Expl'#237'citamente los Nodos' + Nodes = '&Nodos' + Separators = 'Separadores' + Thickness = 'Grueso' + TLIncorrectHeadersState = 'No se puede usar el modo EnCadaP'#225'gina' + Rows = '&Filas' + BestFit = 'Ajuste &'#211'ptimo' + KeepSameRecordWidths = '&Mantaner Anchuras Iguales' + WrapRecords = '&Doblar Registros' + ByWrapping = 'Doblando' + OneWrappingPerPage = 'Doblando Uno por P'#225'gina' + PaginateByControlDetails = 'Detalles de Controles' + PaginateByControls = 'Controles' + PaginateByGroups = 'Grupos' + PaginateByItems = 'Elementos' + ControlsPlace = 'Enplazamiento de Controles' + ExpandHeight = 'Expandir Altura' + ExpandWidth = 'Expandir Anchura' + ShrinkHeight = 'Contraer Altura' + ShrinkWidth = 'Contraer Anchura' + CheckAll = 'Check &All' + CheckAllChildren = 'Check All &Children' + ControlsTab = 'Controls' + ExpandAll = 'E&xpand All' + HiddenControlsTab = 'Hidden Controls' + ReportLinksTab = 'Aggregated Designers' + Transparents = 'Transparents' + UncheckAllChildren = 'Uncheck &All Children' + Root = '&Ra'#237'z' + RootBorders = 'Root &Borders' + Controls = '&Controls' + Containers = 'C&ontainers' + HideCustomContainers = '&Hide Custom Containers' + Bytes = 'Bytes' + KiloBytes = 'KB' + MegaBytes = 'MB' + GigaBytes = 'GB' + Left = 184 + Top = 16 + end + object ROMessage: TROBinMessage + Left = 329 + Top = 88 + end + object DABINAdapter: TDABINAdapter + Left = 424 + Top = 24 + end + object JvAppRegistryStorage: TJvAppRegistryStorage + StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y' + StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N' + Root = 'Software\%APPL_NAME%' + SubStorages = <> + Left = 184 + Top = 80 + end + object RORemoteService: TRORemoteService + ServiceName = 'srvConfiguracion' + Message = ROMessage + Channel = ROChannel + Left = 424 + Top = 92 + end +end diff --git a/Base/uDataModuleBase.pas b/Base/uDataModuleBase.pas new file mode 100644 index 0000000..7c7c3fd --- /dev/null +++ b/Base/uDataModuleBase.pas @@ -0,0 +1,243 @@ +unit uDataModuleBase; + +interface + +uses + Controls, PngImageList, JvComponent, JvNavigationPane, TBXSwitcher, + TBXOffice2003Theme, Classes, ImgList, uROClient, uROBinMessage, + uROServiceComponent, uRORemoteService, uROWinInetHttpChannel, + DataAbstract_Intf, uDADataTable, uDABINAdapter, cxintl, cxIntlPrintSys3, + FactuGES_Intf, JvAppStorage, JvAppRegistryStorage, SysUtils, + JvComponentBase; + +type + TdmBase = class(TDataModule) + ROChannel: TROWinInetHTTPChannel; + SmallImages: TPngImageList; + StyleManager: TJvNavPaneStyleManager; + TBXSwitcher: TTBXSwitcher; + cxIntl: TcxIntl; + cxIntlPrintSys3: TcxIntlPrintSys3; + ROMessage: TROBinMessage; + DABINAdapter: TDABINAdapter; + JvAppRegistryStorage: TJvAppRegistryStorage; + RORemoteService: TRORemoteService; + procedure DAClientDataModuleCreate(Sender: TObject); + procedure ROChannelFailure(Sender: TROTransportChannel; + anException: Exception; var Retry: Boolean); + procedure ROChannelProgress(iSender: TObject; iType: TProgressType; + iDirection: TProgressDirection; iTransferred, iTotal: Integer); + private + FOnThemeChange: TNotifyEvent; + function GetAdapter: TDABINAdapter; + function GetChannel: TROWinInetHTTPChannel; + function GetCodigoEmpresa: Integer; + function GetUsuario: String; + function GetFecha: TDate; + function GetMessage: TROBinMessage; + procedure InitStyleManager; + procedure OnTBXThemeChange(Sender: TObject); + procedure LeerConfiguracion; + procedure SalvarConfiguracion; + public + procedure ConfigurarConexion; + property Adapter: TDABINAdapter read GetAdapter; + property Channel: TROWinInetHTTPChannel read GetChannel; + property CodigoEmpresa: Integer read GetCodigoEmpresa; + property Usuario: String read GetUsuario; + property Fecha: TDate read GetFecha; + property Message: TROBinMessage read GetMessage; + property OnThemeChange: TNotifyEvent read FOnThemeChange write + FOnThemeChange; + + function darRutaDocumentosProyectos: String; + function darEstructuraDirProyectos: TDAStringArray; + function darRutaDocumentosNormativas: String; + function darEstructuraDirNormativas: TDAStringArray; + function darVersion: String; + end; + +var + dmBase: TdmBase; + +implementation + +{$R *.DFM} + +uses + Dialogs, InfoProject, TBX, TBXThemes, uConfigurarConexion, WinInet, Forms, Windows; + +const + SERVER_URL = 'http://localhost:8099/bin'; + IE_OFFLINE_ERROR = 'Unexpected error in WinInet HTTP Channel (2)'; + +{ +*********************************** TdmBase ************************************ +} +procedure TdmBase.ConfigurarConexion; +begin + with TfConfigurarConexion.Create(NIL) do + try + TargetURL := ROChannel.TargetURL; + if ShowModal = mrOk then + begin + ROChannel.TargetURL := TargetURL; + ROChannel.Connected := False; + ROChannel.Connected := True; + SalvarConfiguracion; + end; + finally + Free; + end; +end; + +procedure TdmBase.DAClientDataModuleCreate(Sender: TObject); +begin + TBXSwitcher.OnThemeChange := OnTBXThemeChange; + TBXSetTheme('Office2003'); + + LeerConfiguracion; +end; + +function TdmBase.GetAdapter: TDABINAdapter; +begin + Result := DABinAdapter; +end; + +function TdmBase.GetChannel: TROWinInetHTTPChannel; +begin + Result := ROChannel; +end; + +function TdmBase.GetCodigoEmpresa: Integer; +begin + Result := 1; +end; + +function TdmBase.GetMessage: TROBinMessage; +begin + Result := ROMessage; +end; + +procedure TdmBase.InitStyleManager; +begin + if not USE_THEMES then + begin + TBXSwitcher.EnableXPStyles := False; + StyleManager.Theme := nptStandard; + end + else begin + TBXSwitcher.EnableXPStyles := True; + with StyleManager do + begin + if CurrentTheme is TTBXOffice2003Theme then + begin + case GetOffice2003Scheme of + osBlue : Theme := nptXPBlue; + osMetallic : Theme := nptXPSilver; + osGreen : Theme := nptXPOlive; + else + Theme := nptStandard; + end; + end; + end; + end; +end; + + +procedure TdmBase.LeerConfiguracion; +begin + ROChannel.TargetURL := JvAppRegistryStorage.ReadString('ServerURL', SERVER_URL); +end; + +procedure TdmBase.OnTBXThemeChange(Sender: TObject); +begin + InitStyleManager; + + if Assigned(FOnThemeChange) then + FOnThemeChange(Sender); +end; + +procedure TdmBase.SalvarConfiguracion; +begin + JvAppRegistryStorage.BeginUpdate; + try + JvAppRegistryStorage.WriteString('ServerURL', ROChannel.TargetURL); + finally + JvAppRegistryStorage.EndUpdate; + end; +end; + +procedure TdmBase.ROChannelFailure(Sender: TROTransportChannel; + anException: Exception; var Retry: Boolean); +begin + if (Pos(anException.Message, IE_OFFLINE_ERROR) > 0) then + begin + // Preguntar al usuario si se quiere conectar + if InternetGoOnline(PAnsiChar(ROChannel.TargetURL), GetDesktopWindow(), 0) then + Retry := True // Si el usuario pulsa en 'Conectar' reintentar la operación + else + Abort; // Si el usuario pulsa en 'Seguir desconectado' parar todo + end + else + raise Exception.Create(anException.Message); +end; + +procedure TdmBase.ROChannelProgress(iSender: TObject; iType: TProgressType; + iDirection: TProgressDirection; iTransferred, iTotal: Integer); +begin +{ if iType = ptInProgress then + begin + if not Form1.Visible then + Form1.Show; + end + else + Form1.Hide;} +end; + +function TdmBase.GetUsuario: String; +begin + Result := 'USUARIO'; +end; + +function TdmBase.GetFecha: TDate; +begin + Result := Date; +end; + +function TdmBase.darRutaDocumentosProyectos: String; +begin + Result := (RORemoteService as IsrvConfiguracion).darRutaProyectos; +end; + +function TdmBase.darRutaDocumentosNormativas: String; +begin + Result := (RORemoteService as IsrvConfiguracion).darRutaNormativas; +end; + +function TdmBase.darEstructuraDirProyectos: TDAStringArray; +begin + Result := (RORemoteService as IsrvConfiguracion).darEstructuraDirProyectos; +end; + +function TdmBase.darEstructuraDirNormativas: TDAStringArray; +begin + Result := (RORemoteService as IsrvConfiguracion).darEstructuraDirNormativas; +end; + +function TdmBase.darVersion: String; +var + InfoProject : TInfoProject; +begin + InfoProject := TInfoProject.Create(Self); + Result := 'v' + InfoProject.FileVersion; + FreeAndNil(InfoProject); +end; + +initialization + dmBase := TdmBase.Create(NIL); + +finalization + dmBase.Free; + +end. diff --git a/Base/uDataTableUtils.pas b/Base/uDataTableUtils.pas new file mode 100644 index 0000000..eb7064c --- /dev/null +++ b/Base/uDataTableUtils.pas @@ -0,0 +1,191 @@ +unit uDataTableUtils; + +interface + +uses + uDACDSDataTable, uDADataTable, Classes; + + +procedure CloneDataTable(const ASource : TDACDSDataTable; + var ATarget : TDACDSDataTable); + +procedure GetKeyListAndValueList (const ASource : TDADataTable; + var KeysList: TStringList; var ValuesList: TStringList); + +procedure DeleteAllTable(const ADataTable : TDADataTable); + +function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean; + + +implementation + +uses + uDAClasses, uDAInterfaces, SysUtils, Variants; + + +procedure DeleteAllTable(const ADataTable : TDADataTable); +begin + ADataTable.ClearRows; + { if ADataTable.RecordCount > 0 then + begin + ADataTable.DisableControls; + //ADataTable.DisableEventHandlers; <- No descomentar + try + repeat begin + ADataTable.Last; + ADataTable.Delete; + end + until ADataTable.BOF; + finally + ADataTable.EnableControls; + //ADataTable.EnableEventHandlers; <- No descomentar + end; + end;} +end; + + +procedure CloneDataTable(const ASource : TDACDSDataTable; + var ATarget : TDACDSDataTable); +var + i : Integer; +begin + with ATarget do + begin + RemoteService := ASource.GetRemoteService; + Adapter := ASource.GetAdapter; + + BusinessRulesID := ASource.BusinessRulesID; + Randomize; + Name := ASource.Name + '_' + IntToStr(Random(MAXINT)); + LogicalName := ASource.LogicalName; + + Params.AssignParamCollection(ASource.Params); + + with SchemaCall do + begin + MethodName := ASource.SchemaCall.MethodName; + for i := 0 to ASource.SchemaCall.Params.Count - 1 do + begin + with Params.Add do begin + Name := ASource.SchemaCall.Params[i].Name; + ParamType := ASource.SchemaCall.Params[i].ParamType; + DataType := ASource.SchemaCall.Params[i].DataType; + Value := ASource.SchemaCall.Params[i].Value; + UserClassName := ASource.SchemaCall.Params[i].UserClassName; + end; + end; + end; + ATarget.LoadSchema; // o también ATarget.Fields.AssignFieldCollection(ASource.Fields); + + with DataUpdateCall do + begin + MethodName := ASource.DataUpdateCall.MethodName; + for i := 0 to ASource.DataUpdateCall.Params.Count - 1 do + begin + with Params.Add do begin + Name := ASource.DataUpdateCall.Params[i].Name; + ParamType := ASource.DataUpdateCall.Params[i].ParamType; + DataType := ASource.DataUpdateCall.Params[i].DataType; + Value := ASource.DataUpdateCall.Params[i].Value; + UserClassName := ASource.DataUpdateCall.Params[i].UserClassName; + end; + end; + end; + + with ScriptCall do + begin + MethodName := ASource.ScriptCall.MethodName; + for i := 0 to ASource.ScriptCall.Params.Count - 1 do + begin + with Params.Add do begin + Name := ASource.ScriptCall.Params[i].Name; + ParamType := ASource.ScriptCall.Params[i].ParamType; + DataType := ASource.ScriptCall.Params[i].DataType; + Value := ASource.ScriptCall.Params[i].Value; + UserClassName := ASource.ScriptCall.Params[i].UserClassName; + end; + end; + end; + + with DataRequestCall do + begin + MethodName := ASource.DataRequestCall.MethodName; + for i := 0 to ASource.DataRequestCall.Params.Count - 1 do + begin + with Params.Add do begin + begin + Name := ASource.DataRequestCall.Params[i].Name; + ParamType := ASource.DataRequestCall.Params[i].ParamType; + DataType := ASource.DataRequestCall.Params[i].DataType; + Value := ASource.DataRequestCall.Params[i].Value; + UserClassName := ASource.DataRequestCall.Params[i].UserClassName; + end; + end; + end; + end; + + with MasterParamsMappings do + for i := 0 to ASource.MasterParamsMappings.Count - 1 do + Add(ASource.MasterParamsMappings.Strings[i]); + + with MasterRequestMappings do + for i := 0 to ASource.MasterRequestMappings.Count - 1 do + Add(ASource.MasterRequestMappings.Strings[i]); + + MasterMappingMode := ASource.MasterMappingMode; + + MasterFields := ASource.MasterFields; + MasterOptions := ASource.MasterOptions; + + DetailFields := ASource.DetailFields; + DetailOptions := ASource.DetailOptions; + + RemoteUpdatesOptions := ASource.RemoteUpdatesOptions; + StreamingOptions := ASource.StreamingOptions; + RemoteFetchEnabled := ASource.RemoteFetchEnabled; + end; +end; + +procedure getKeyListAndValueList (const ASource : TDADataTable; + var KeysList: TStringList; var ValuesList: TStringList); +var + i: Integer; +begin + if not Assigned(KeysList) or not Assigned(ValuesList) then + raise Exception.Create('Las listas están vacias'); + + KeysList.Clear; + ValuesList.Clear; + + for i:=0 to (ASource.Fields.Count-1) do + if ASource.Fields.Fields[i].InPrimaryKey then + begin + KeysList.Add(Copy(ASource.Fields.Fields[i].Name, 0, Length(ASource.Fields.Fields[i].Name))); + ValuesList.Add(Copy(VarToStr(ASource.Fields.Fields[i].Value), 0, Length(VarToStr(ASource.Fields.Fields[i].Value)))); + end; +end; + +function DeltaValuesAreDifferent(const aDelta : IDADelta): boolean; +var + i, x : integer; + OldNewAreDifferent: boolean; +begin + OldNewAreDifferent := FALSE; + for i := 0 to (aDelta.Count-1) do + begin + for x := 0 to (aDelta.LoggedFieldCount-1) do + begin + OldNewAreDifferent := (aDelta.Changes[i].OldValues[x] <> aDelta.Changes[i].NewValues[x]); + + if OldNewAreDifferent then + Break; // Abandon iteration at the first difference between old and new. + end; + + if OldNewAreDifferent then + Break; // Abandon iteration at the first difference between old and new. + end; + result := OldNewAreDifferent; +end; + + +end. diff --git a/Base/uEditorBase.ddp b/Base/uEditorBase.ddp new file mode 100644 index 0000000..44d54ac Binary files /dev/null and b/Base/uEditorBase.ddp differ diff --git a/Base/uEditorBase.dfm b/Base/uEditorBase.dfm new file mode 100644 index 0000000..5a80a5a --- /dev/null +++ b/Base/uEditorBase.dfm @@ -0,0 +1,1625 @@ +object fEditorBase: TfEditorBase + Left = 509 + Top = 367 + Width = 674 + Height = 516 + Caption = 'EditorBase' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + KeyPreview = True + OldCreateOrder = False + Position = poDefault + OnCloseQuery = FormCloseQuery + OnShow = FormShow + InstanceID = 0 + ReadOnly = False + PixelsPerInch = 96 + TextHeight = 13 + object JvNavPanelHeader: TJvNavPanelHeader + Left = 0 + Top = 0 + Width = 666 + Align = alTop + Caption = 'Editor' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindow + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + ColorFrom = 8684164 + ColorTo = 8684164 + ImageIndex = 0 + StyleManager = dmBase.StyleManager + ParentStyleManager = False + object Image1: TImage + Left = 639 + Top = 0 + Width = 27 + Height = 27 + Align = alRight + Center = True + Picture.Data = { + 0A54504E474F626A65637489504E470D0A1A0A0000000D494844520000001800 + 0000180806000000E0773DF80000000970485973000017120000171201679FD2 + 520000000467414D410000AA11B57D14DC000001CC4944415478DA63FCFFFF3F + 032D0123B2058B361EA79A6D71FE968C582D004A906CD8DFBFFF80F83F980601 + 0BDF6C868B7B66E1B6C0752FAA25BB9D8FE3341C59ED5A8B030CF356EF6198BF + 64237E0B4871B9C7016B0659651686F9DB8E30BC8BFEC6B070FD3EC21660F301 + BA18086CB53DC2E07DD88661CFCD1360FEEB882F0C4B361DA0CC07FFFF01C31A + 88FF005D0F62FFFE070CFF3FFFC0BEF9F3EF2FC38A2D8749F7013100E48B4741 + EF18D6EE38469C05306F9302EEFBBF61D8B0FB047116E04B39D80048CF4CD5CD + 0C9BF69D24DE025C4105B31C260F533B4D7913C3D603A768E783890A1B18761D + 3E433B1FF4C9AC63D87BFC1CED7CD02DB986E1C0A90BF82D88F63107E74E727C + D02EBE8AE1C8994BF82D88F03403E74E727CD024BC9CE1E485ABF82D08753361 + F03B66479605F5024B19CE5CBE8EDF8200172386E0130E780D0359BEE4CF5C38 + 3F8625196C410DEF6286F3D76EE2B7C0D7C1005EAE40CAF97FE0B2072C062CF3 + 73EFFB63C40F8C5FC9BD88E1D28D5BF82DF0B2D5C36938882E78148835F888B6 + C0CD5A1BA7E1A012B4E46930CEA023CA0247730DB061FFFE428AE5DF7F11C5F1 + BFFF508BFEFD437104322068819D891AB844A404E0B5A077F27C8A0C87019805 + 00F0E629EF34B079A30000000049454E44AE426082} + Transparent = True + end + end + object TBXDock: TTBXDock + Left = 0 + Top = 27 + Width = 666 + Height = 49 + AllowDrag = False + object tbxMain: TTBXToolbar + Left = 0 + Top = 23 + Caption = 'tbxMain' + ChevronHint = 'M'#225's botones|' + DockMode = dmCannotFloatOrChangeDocks + DockPos = -23 + DockRow = 1 + DragHandleStyle = dhNone + Images = SmallImages + ParentShowHint = False + ShowHint = True + TabOrder = 0 + object TBXItem2: TTBXItem + Action = actNuevo + DisplayMode = nbdmImageAndText + end + object TBXSeparatorItem1: TTBXSeparatorItem + end + object TBXItem29: TTBXItem + Action = actGuardarCerrar + DisplayMode = nbdmImageAndText + end + object TBXItem27: TTBXItem + Action = actGuardar + end + object TBXItem5: TTBXItem + Action = actModificar + DisplayMode = nbdmImageAndText + end + object TBXItem4: TTBXItem + Action = actEliminar + DisplayMode = nbdmImageAndText + end + object TBXSeparatorItem3: TTBXSeparatorItem + end + object TBXItem23: TTBXItem + Action = actPrevisualizar + DisplayMode = nbdmImageAndText + end + object TBXSeparatorItem2: TTBXSeparatorItem + Visible = False + end + object TBXItem24: TTBXItem + Action = actConfPagina + Visible = False + end + object TBXItem3: TTBXItem + Action = actImprimir + DisplayMode = nbdmImageAndText + end + object TBXSeparatorItem10: TTBXSeparatorItem + end + object TBXItem26: TTBXItem + Action = actAnterior + end + object TBXItem25: TTBXItem + Action = actSiguiente + end + object TBXItem6: TTBXItem + Action = actRefrescar + end + object TBXSeparatorItem11: TTBXSeparatorItem + end + object TBXItem28: TTBXItem + Action = actCerrar + end + end + object tbxMenu: TTBXToolbar + Left = 0 + Top = 0 + Caption = 'Menu' + CloseButton = False + DragHandleStyle = dhNone + FullSize = True + Images = SmallImages + MenuBar = True + ProcessShortCuts = True + ShrinkMode = tbsmWrap + TabOrder = 1 + object TBXSubmenuItem4: TTBXSubmenuItem + Caption = '&Archivo' + object TBXItem8: TTBXItem + Action = actNuevo + end + object TBXSeparatorItem5: TTBXSeparatorItem + end + object TBXItem30: TTBXItem + Action = actGuardar + end + object TBXItem10: TTBXItem + Action = actModificar + end + object TBXSeparatorItem12: TTBXSeparatorItem + end + object TBXItem11: TTBXItem + Action = actEliminar + end + object TBXSeparatorItem6: TTBXSeparatorItem + end + object TBXItem21: TTBXItem + Action = actConfPagina + end + object TBXItem22: TTBXItem + Action = actPrevisualizar + end + object TBXItem9: TTBXItem + Action = actImprimir + end + object TBXSeparatorItem4: TTBXSeparatorItem + end + object TBXItem1: TTBXItem + Action = actCerrar + end + end + object TBXSubmenuItem5: TTBXSubmenuItem + Caption = '&Edici'#243'n' + object TBXItem16: TTBXItem + Action = actDeshacer + end + object TBXSeparatorItem8: TTBXSeparatorItem + end + object TBXItem15: TTBXItem + Action = actCortar + end + object TBXItem14: TTBXItem + Action = actCopiar + end + object TBXItem13: TTBXItem + Action = actPegar + end + object TBXSeparatorItem7: TTBXSeparatorItem + end + object TBXItem12: TTBXItem + Action = actLimpiar + end + object TBXSeparatorItem9: TTBXSeparatorItem + end + object TBXItem17: TTBXItem + Action = actSeleccionarTodo + end + end + object TBXSubmenuItem1: TTBXSubmenuItem + Caption = '&Buscar' + object TBXItem32: TTBXItem + Action = actAnterior + end + object TBXItem31: TTBXItem + Action = actSiguiente + end + object TBXSeparatorItem13: TTBXSeparatorItem + end + object TBXItem20: TTBXItem + Action = actBuscar + end + end + object TBXSubmenuItem6: TTBXSubmenuItem + Caption = '&Ver' + object TBXItem18: TTBXItem + Action = actRefrescar + end + end + object TBXSubmenuItem7: TTBXSubmenuItem + Caption = '&Ayuda' + object TBXItem19: TTBXItem + Action = actAcercaDe + end + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 463 + Width = 666 + Height = 19 + Panels = < + item + Width = 50 + end> + end + object EditorActionList: TActionList + Images = SmallImages + Left = 16 + Top = 144 + object actNuevo: TAction + Category = 'Archivo' + Caption = 'Nuevo' + ShortCut = 45 + end + object actModificar: TAction + Category = 'Archivo' + Caption = 'Modificar' + ImageIndex = 18 + end + object actGuardarCerrar: TAction + Category = 'Archivo' + Caption = 'G&uardar y cerrar' + ImageIndex = 17 + OnExecute = actGuardarCerrarExecute + end + object actGuardar: TAction + Category = 'Archivo' + Caption = '&Guardar' + ImageIndex = 17 + end + object actEliminar: TAction + Category = 'Archivo' + Caption = 'Eliminar' + ImageIndex = 4 + ShortCut = 16430 + end + object actConfPagina: TAction + Category = 'Archivo' + Caption = '&Configurar p'#225'gina' + ImageIndex = 8 + end + object actPrevisualizar: TAction + Category = 'Archivo' + Caption = '&Previsualizar' + ImageIndex = 6 + end + object actImprimir: TAction + Category = 'Archivo' + Caption = 'Imprimir' + ImageIndex = 7 + ShortCut = 16464 + end + object actDeshacer: TEditUndo + Category = 'Edici'#243'n' + Caption = 'Deshacer' + Hint = 'Undo|Reverts the last action' + ImageIndex = 12 + ShortCut = 16474 + end + object actCortar: TEditCut + Category = 'Edici'#243'n' + Caption = 'Cortar' + Hint = 'Cortar|Corta la selecci'#243'n y la coloca en el portapapeles' + ImageIndex = 3 + ShortCut = 16472 + end + object actCerrar: TAction + Category = 'Archivo' + Caption = 'Cerrar' + OnExecute = actCerrarExecute + end + object actCopiar: TEditCopy + Category = 'Edici'#243'n' + Caption = 'Copiar' + Hint = 'Copiar|Copia la selecci'#243'n y la coloca en el portapapeles' + ImageIndex = 2 + ShortCut = 16451 + end + object actPegar: TEditPaste + Category = 'Edici'#243'n' + Caption = 'Pegar' + Hint = 'Pegar|Inserta el contenido del portapapeles' + ImageIndex = 5 + ShortCut = 16470 + end + object actSeleccionarTodo: TEditSelectAll + Category = 'Edici'#243'n' + Caption = 'Seleccionar todo' + Hint = 'Seleccionar todo' + ImageIndex = 11 + ShortCut = 16449 + end + object actLimpiar: TEditDelete + Category = 'Edici'#243'n' + Caption = '&Limpiar' + Hint = 'Limpiar|Borra el texto seleccionado' + ImageIndex = 1 + ShortCut = 46 + end + object actRefrescar: TAction + Category = 'Ver' + Caption = 'Refrescar' + ImageIndex = 9 + ShortCut = 116 + end + object actAcercaDe: TAction + Category = 'Ayuda' + Caption = 'Acerca de...' + ImageIndex = 0 + end + object actBuscar: TAction + Category = 'Buscar' + Caption = 'Buscar' + ImageIndex = 10 + ShortCut = 114 + end + object actAnterior: TAction + Category = 'Ver' + Caption = 'Anterior' + ImageIndex = 15 + end + object actSiguiente: TAction + Category = 'Ver' + Caption = 'Siguiente' + ImageIndex = 16 + end + object actCancelarCambios: TAction + Category = 'Archivo' + Caption = 'Cancelar cambios' + end + end + object SmallImages: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000001754944415478DA6364C001D6ECBE900CA4E640B9 + 2921AE0673B1A963C4A739C8598FE1DB8FDF0C33966C67505054C06A08232ECD + 3EF6BA0C250B7F315C7FF88F6179E15F86456BF76135841197CD79737F324C4E + E1008BF345BC63B833959561F13A4C4318D13507BBE833E4CEF9C160ACC1C290 + 60C30296734D5FCD70F2A333564318B1D90CD20C02D72E9C04D33C92A60CAFDF + FF6358B8E71B86218CE87E866986D90E738186A92FC397EF0C0C6B8FA21A0232 + E03FBACD5FBEFF07E30A3F36B801323ABE0C3F7FFF67F8FE938161EFC5EF7043 + C00678586B32F8B7FD61887167836BFEF59B81A12E186180A8BA0F58F3E76FFF + 194EDDFE0136A07DDA1AB001C90FEE3F98131BE4C4A092FD9BA12A8A07AC19E4 + 67582C800CE051F0C1D06C636994020F44902171214E0CCA99BF19E25DB8E09A + 91C301161330CDE040448E46649764D85C473160C6114D0CCD581312B221CEFA + 9C589D8D3521E13204047069C69B99608680002ECD380D4036E4C98B77383583 + 000005100EB8572466A60000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001074944415478DA + 63FCFFFF3F032580912A06303232E2543079D1766F201505C520B02C37CE331A + C400EBC5670054F3960057330631617E0690B2F357EF336CDA7786A1B5289211 + AF01C89A254505183E7FFDC1F0F5DB0F06311101A021F7184E5DBA733927D643 + 0FAB01E89ADF7EF802D6FCF5FB4F866F406CA6AFC21095DBC6B06C7215238601 + C4689EB27807C3B153E7300D2056F38B371F18B62EDA79EDFCF9F9DA700348D4 + CC70E1C2024420022548D68C128D40C906A0E67A5234631860A6A752AF202346 + B466740396C2521AD020B0A49EA622C39C95BB716AC64889C0405C0A541C2501 + 4C2830804F33D6A40C8A09A0A62DF7EEDD03F3AF1FB98D372301A39191E2DC08 + 0029AC32F01825AACD0000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001514944415478DA + 635CB5E3DC7F062C20CCC388918108C0083220D4DD104570F5CEF30CEDFDB319 + CEEF9C4ED0109C06D818AB3278C7941134046E40CBAA0760819A3005B80B6000 + 9F21182EF8F1F30F10FF86E05F7F1882926B883300E60264C0C1805D5F69B802 + 238601E836FF04E2CDA7BF339484C9A368EE59F59261D9C1BB0CE7A75933C20D + F0B4D56698B0E5195617601AF09021DA4998C1297307C38D35A18C60031CCDD4 + C036FF84DAFCE7EF3F307DF0FA7FB001112D57C09A57D4E8800D98BBFA346A18 + 58EA2BC235C39C0FC2671EB0A2B8E0DBCF7F0C5F7FFE05E27F60B65DE26C8801 + 7316ADC11A58AEFE69282E4009C8284506F7F4B90C781349F7CA07FF4106A0DB + FCFD171003E980BCF9840D48F5916148EFBB8E2197EC2BCB1059B290B001512E + 92609BC1B602F1EF3FFFC1F437204EAE5A4CD8007F5B71B8E66F480681407AED + 12C20674CCDE884F0903000B1A00979E81F9710000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000E9C00000E9C01079453DD000002574944415478DA + 63FCFFFF3F03258011D9004646468696696B17FFFECAD0DE581A7C0D596155CF + 0AF77F7FFFD975944755A3E8413760EA929DAF393938D62785D8A7C1C48BBB17 + 711BABAB5C7AF9F6FDDFC2446F354206BC75B6D4E35ABCFE90536B49F87190F8 + E4853B2779DA1BE46EDE7FE62ED00015BC06F4CFDBBA24CACF26FAD0A99B5B42 + BDCC7C6BFA563B057B986FFDFDE72FC7D20D072B26D62574E235A0A26DA999B0 + 98E0F2607713F9251B8E85692A4B5698E9AB9AAEDA7EE2DEBB571F3DDAAB226F + E33500044A3B979507B898B6BF78F3FEA3B1B612FF992BF7FF1F3975336E425D + CC52903C4103EAEBEB5998450D8FAA2A889BC94888306CD977664D675964284C + 1D0103EA99F8DDF50C8CD439E3FFFE67CB7DFFE9DB1F7E3E9EC637DF5977DC98 + B3E73C0343E33F9C0670B8AC555292175BC8F6FF9BEEDF6FEF995E7DF8F95941 + 55EDE5AB17AFBEFCFAC7C2F1ECC5FBEF0C4C4C89FF0F47DDC36A8056F2A103FF + DEDEE465FBFFB5F1D577EECB8C8CFFF72AAA6A7CFFF4F842CED54D7907184CE7 + 4631B0B227FC3F1AE38AD5008D981DDFD9BEDE48BABCA1703983DE226E09891F + D754B4756F7DBC7FBAEFF286BCED0C32BD9C0CB222B7FF1F8B93C16A805ED2EE + D74CEFAF445FDC50B48BC172858E34DFFB6582B2DAFB38BEDCFC7166456A0583 + CE0471063EA103FF8FC66A623540C063F55669B6E747AE3DE3E861E5E158A9C8 + FBF1D1FD6F628BF4147977FC7A79D3E3F2736E39060E9E84FF47A202B0C782ED + 627356C6FF935998FEB349737FB9FE95E975F2F32D8DDF98EC9647B1FCFF55F0 + EB1FD31FA08EC2FF87634F6235801C0000382740F0DFD997BD0000000049454E + 44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA + A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304 + 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994 + 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F + 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546 + 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8 + 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA + 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E + 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8 + E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0 + 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8 + 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37 + 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB + 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932 + 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04 + E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148 + D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2 + 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56 + A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E + AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13 + 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058 + 5538F0EAB25B380000000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001934944415478DA + 6364C002662430FC47E6672C606064C001C0122726A06AB870818121A1632A98 + 5D169DCD10E58B90B32840358C11A4D920622A5C604145365833482308D4F5E6 + 3134154F62A8EE4805F35B2B66334CDA8B3004C50098E62F2F6E823581347F7F + FB80E1E58DBD0C8BD67D6588F6656258BAF91F7E03AE3D66C009081A800CD61F + B161C0072243F419711AF0F7F777864D275D192282F5B06A5EB1F23C43D7FCD9 + 0CE7774E67C43000A41984B79EF3C36AC08F9F7F18366CB8CC10116EC860E491 + 85EA0298E6BFBFBE33ECB8120E36C071E64DB8E6ED09CA40037E33ECD87E03EC + 02142F206BFEF7FB07C3AE9BF1282E00D90CD20CC6BFFE30EC3B719561CAECE5 + 100374837B503483E8BDF733305C000333DC04198E9EBB893040CBAF1945F3DF + 3FDF190E3C2E041B806EF34F283E73E52EC200758F2A865B3B3A506CB927739E + C1C75383C177F17D0C17745971325CBEF51062004820CF19352F808065E64506 + 172748A0C16CFDF3F71F9806B9E4F683A70803B081E56B2EFEB7B19663D875F4 + 32CEC444D080AED9331808010085EE16005695A1DA0000000049454E44AE4260 + 82} + Name = 'PngImage6' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000002164944415478DA95D35F4853511CC0F1EFD491DD + D9587F2C83AC8C328DFE4949908BC0AC142A147BC8077B88A01EECA5E718F958 + 410486C384B50A1F7A991023CBEC0F594F81E5D4C211E130D7D4DDCDA15B5EEF + DD5DD74B1B8EA9D90FCEC3EFC0EFC3EF9CF33B06FE46CBE3AE042B886B176B0C + 0B73C342A0A9B17AD9E2FB4F5EE0E878C6E79776C37F03AAAAD2DAD1CDDEDD3B + B96EBB9B425604CC17CB8A4AFBD31EEA6BAC0CFF08A4907F02C962598EE374BD + D58F908C2581442241603C8CCBFD89D86C9C9C9C1C0A365A282DDE446FDF37E6 + AB9277B128F02B10C6DDF385CD074B10D6593019211E9CC2EF1DA5A0C0821895 + 68BE6D5F1A6873BEA6D07A0879951945CD626B1E6C372978BD7EBC5F4710D608 + DC6A712C0EC84A9C7B6DDDECAF3B459E315B3B3B685B9835448DCD30F4BE0FC1 + 94CB9D56672670A5E1A47E590F1EBDE374C3091D88CD4120063359902B4719F9 + D88F201835E0612670E97CA5DE41578F870A6B296BD79B096BC0B8B6C4DF3252 + 4024E81960832071B3FD7926D0587B5C7F32DFE8243FC74214EDD906AB4D4C29 + 1011230487BC1419BFB32BE8E06CE7BE4CE0C299637A07B3928CCF37816F4CD4 + F2040943365234823134C8E1FC094A8A8D4C0DF6B2E5EA8774A0BEFAA80E283A + A21012A791E6E6B4618249FF08AFEC97292B2CA7B64221BFAC9C90E74DFA289F + AB3A42FFB07FD90FE5B255A510B754379D062C1CD3E5E240AC931D9537B03537 + 19FE00839434866373C4BA0000000049454E44AE426082} + Name = 'PngImage7' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20 + E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9 + 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1 + CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098 + D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4 + AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609 + 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3 + D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD + 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8 + C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D + E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770 + 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F + 16FA1194E3DBC30000000049454E44AE426082} + Name = 'PngImage8' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD2520000015F4944415478DA6364A000FC3060F8CF884D62C5 + 8A0BBB81940BB258E7FC99286A8EBF9CCEC06EE4C5C088457334905AE2E6A9CA + 20C8C70516FBF3F71F8399770E44D3F9FF0C3F0D19219AE76D6364C4A2B902A8 + 5967EF89BB2806B7F54D6738E7C4C1F073793F58B3D1537986F33BA76318B01B + A8D905D9E6DF7FFE82B1437011C3B91DD31818BA8AC07246FB7EA01A00737A78 + B83EC39A5D9731C205E40274003700A8F93F90BA02723AC876649BFF02D920FE + 9F3FFF18D22BA63298E82B3148AB1A316C5CB38661F5B92A064690CD579F5C58 + 4228CAB6EC3E893D166A7B16FC6F2A8EC7A9F1CB8FBF0C9FBFFF65F08E2CC01E + 0B20038849342017608D055C2E80D9FC19487FF9F18F2125B3147B2C6033005D + 73ED791F86E7B334B1C702BA01E89ABF02F1AC743D8680EEB30CAFEE9E61D8BE + F72C4CA9CCE679554FE1064C5FB68B98A0801900D60C6230FA26B54903E92744 + E946B219C661244123560000C9AFE6B31530CB2E0000000049454E44AE426082} + Name = 'PngImage9' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000016A4944415478DA + 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA + 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA + 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30 + F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911 + FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD + D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5 + 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C + E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3 + FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B + CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907 + BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4 + 0090010087546EF0ACB0C7920000000049454E44AE426082} + Name = 'PngImage10' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001024944415478DA + 63FCFFFF3F03258071D400064674018780D0A7823C7C09EB97CCDD8D4B535EC3 + C493AF1EDC305B3E7F1A2323BA66090111A9272F9F301CD9BE99119701110999 + FF416A0E6FDB843000A4F9CFCF1F52F834C2808DA72FD8DF700348D18C6C08D8 + 004B77AF69F292F299308987CF1F4E979256DEB076DEE45D207E7052AEDBB3A7 + 770390D58000DC0B20FFCC98D0CE70E1053FC3DBBF3F191E7F66603831A310C5 + B6E533A6311C7CC080228F624046C534B82408AC690C856B9611976140970719 + 20ACA0CB30A53E13624068693F5CF2F2E3F70C37E7A5C163019BFCD7AD4D0C2B + 164C07A72146981F999998C17EFCFBEF2FD630C0260F3660C0933200BCB3BCE1 + CDA578040000000049454E44AE426082} + Name = 'PngImage11' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001C04944415478DA + 63FCFFFF3F0325801164C0C20D47A381F41292353332C6800D58B0FEC8FF8440 + 1BA234FDF9FB8FE1F79FBF60EC105CC4806200A3E14C86FFE7D3C13408E0627F + 3C12CF70ECEC0D86AAB659D80D4007FF806AFEFC41D80CC2672FDFC1340019C8 + 7A2C6178F2F22B98ADAE20C0D09869CCE06E29CD2068B788E1D9AE48868BD7EF + 117601C8E673D7DF309846AF6310E66767B8BE3E8441CC6929C3C36D610CD76E + 3FC46DC0CBB7DF19EA679C613870E619C3C3679F197EFCFA0B36106433C8F97F + 80F8D6FD27B8BD1053BD8F61E9B6DB0C0B9B1C181C4C2518E43D5780C54136CB + 7BAD62B8B12E90E1FEE367D85DF0F75C1A836FDE0E866D471E315C5A15CCF0F1 + CB4F06DBA42D6003EE6E0A6650F65BCB7061B90FC3F357AFB11BF0F3540AC3B1 + 8B2F18A2ABF6313C7BFD8DC1C14412E895E76003AEAEF6077B4123528661FFC4 + F3A806C4F859C1A30839CAE0ECDF10BE41E416860F7F32188E4F453320DCCB9C + 81CB621ED8A6177BA218245C9681D9B7360431A805AC03B37F306430FCF8C3C0 + F0E61B0483D8700382DC4CF0DAFC1B498EDD5785E1FD4A3417F83919319CBA78 + 8BA8FCF0DFCF908171139201A0DC3871C6529273637E46740C00F128724C706C + 80060000000049454E44AE426082} + Name = 'PngImage12' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000E9C00000E9C01079453DD000002324944415478DA + 63FCFFFF3F03258011640023232386C4922BFF0D9818FFC57EFFFE57FDEFBFFF + CC8CFF19BEF0F1B36D5C73E9EAAAD5613ABF60166318505FFF9F4939F077F98B + 97BF6BEFDCFEC6F9EDDB3F86BF7F810A9918192424D9FEF3F1B32FBFFA93236E + 5528C35FB8018D9B7E2C6DF0E38859759581F5E7BF3FD36EDEF89AF4E51B03E3 + B72F7FC0867EF8F897E1EF3F06867F40ACA1C9F96FE392D5BA5737265D831BE0 + 58F9F0BF83A5F83245796696CB973E87FEF9C70CD6FCE2D92B86E78F6EFCFCF7 + EFEF17360E5E4151590326666626067D7DDE65F57E1CD12806288BB3FF676567 + 66E0E062036B7EFEF425C39307576E8A2A19B9EE6A557DA217B2A88E9B5FBA41 + 405C87C1DC9CEF01D0004514031444391804843918409ADFBFFFCE70E7EA91FB + 9F3FF06BDED9E1F513A450357481341FBBD03D611973362B4B2C067CF8C1C060 + A020C0F0E3FB4F86CF1FDEBCBE7FFD84C3B54DC9D760812B13DACB29CAAAF84A + 58C69AC7C61A8B01CF9FFF61E014646190E365627870FD40C3A535718DC8D1AA + E2B1988F5788E7B998823597A5392FA6010C1F1EC0157FF8F081E1DF9F4F0D1C + EC6AFDA7965A7C02899924ED550746C555793523665D1D2ED440C49690D08149 + D2A9764E3ED90A037DEEFF3696BC7161EA0C4B8836402FF6A41A37AFF0690E2E + 7E3E7B5B9E65C08494084C48BF8832402BF40A0F8F30DB3E0E2E4153277B9E65 + 0DFE9C60A7E34CCA280098ACCDDF3C5A2925C913ACAFCBB51CA6997803ECF7B3 + 301C74FC834D0AC5004A000026261CF09ABF155A0000000049454E44AE426082} + Name = 'PngImage13' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002E64944415478DA + 8D936B4893511CC6FF67DA74BAC9BC9478C9357338CC4B0EBC1709F929A25414 + A13E48082D8CFC20267E1B925DD004B3120C75919AA99B5DADD485E56DA2791D + 739ABA2D9DB7A953379D6EEF5EDFDE14859C810F3C5F0ECFF33BFFF38783E0FF + 425902A13B668448DCB4C5B658709C40D8F0A4563120A97FB1B61F3AAC291008 + EDB1630ED7ECECA97C6F7F6FAEABB72BCDB46902B54CAD5BD4CCF7AAC68772C5 + 6F8A06C8286E05484EAEB3F10BB6A49FE2B2F2C2628318E0C440063300410050 + 910596D4B344F7BBB63169FBA7B4D6E65AA915205320E47A9EF4ECB89A7CCE85 + CDA021950141E2BD2E9049645029E683BB3301EB2AE5F657E15B4955457EAA15 + 205B5095CD8BE33D0C8BE0523C1002B50120E5C12EE03509D8A60078386EC1B7 + F2066DA3A89C8FFE1DBF9076CADFADFA4A467C829E70829C82AE43B79B97150D + B3522956F3F4C9B3030001DD87C3AE49C84CBCBC646640FCA5D29DF3A0B8A09D + 09F62469E1C3A4B4D7F2EAF1A3DA834FA064DC2D2D8E4DB9984E63F922ED2A02 + 161DE04EE1EE13D4ED7CB090CB5CD9C6E1439978A3FE655189D50E52D37263CE + 4486374725C5D2168DF6C88E2CE414ED02942400030246C6A7087149C5688DF0 + 7EC63EE0F38DB3C79974A8ECB70B7459649E0F64F17854767800C588D390830D + 02172A19226F5E58D211DFEB9AF40DD5CFCB46E5DD0568AFECC6C43FFA470747 + 2CEBF420D2048072C57ED3CB2F846005F9D19CBD4E80C96882B9F16942D1DBA7 + FBD15C2B960F77159355056AB919E0E3E24C17F9C58487E1737218966D429386 + 01F235CB8589854D87D3DCD0448613938D61669B89B1C1099552DEB9AA9B9790 + E559D204FA99C5EBF78D0A0FB5D5ABA0BF6F0D7AA66CA1757CC4B862D808E9D6 + 9826C990236927D236A4B748AF92C6F6FF82243F890861AE817CC8001D6A0A74 + 2A478D1AFD7A926CC6FC058E20743BEDFA2F1ECC70B45A0CDA2614CB5AFDFAAD + BE19B3E828E51D009FCFE710C6F546ED680F473DFF3B7E70DAFCFEA8E5BFFA03 + 503A4EA60D6AAC070000000049454E44AE426082} + Name = 'PngImage14' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002E44944415478DA + 8D936B48D35118C6DFB379D9D4C9BC94A8CB399B38CC4B0E9C9A45427D8C5251 + 82FA2021B430F08398F4258650145A615642A12E4A31AF6565795958A69B685E + C7BCB4B92D9D3AA74E7771BAFD37FFFDA728E40A7CE0FDF6FC9E73DE877310FC + 5FA850200CC22C90ECB06EB1EC76870347D8F88C6E7244D4F8D2B06FFA172910 + 082998BBD7154F8A079F11C5E0043002A8D64D2BA8A56AFDB2463BA8928F1537 + BF2D1B21AC0E9780ECEC06323BCE9E17CE61DE4D4C8BA5812F0D996C00380EE0 + 81ECB0A25EC0FBDFF74C4B7E7CCAEDEEAC97B8041408849C906321BD97B24FFB + B36854A43221106B01ECCE007780203F1CCC2AE576BBF09DA8A6BA24C725A048 + 5053C43DCFBD9F98C4210523046A13C0D0320099BCBBF0360920D87B0BBE56B5 + E8DA9AAAF8E8EFEB3FA2864705D65ECC4FCF30E2BE70BB54ECD28F542485D676 + 3E2C482458DDD327CF0E04087CC222597519059917566C34B8F358BC031C94A8 + 8B0F339241FBEB870FEA0FAE40CABFF5A23CEDF2B93C2A3302E9D611307D0002 + 29006EC4D529A4DD2ED6B61DF0A1B279A3F15559854B0739B9C5A92792799D29 + 5969D4650B05791200C31B804A74E046B831C061423E8B3757544FD509EFE5EF + 077CBE76F208DD07DE0C7BC6F82FD3CFC430B95C0F162F9A64715091171981BF + 0761224E5E5AD1E3DF1A3A8C2DB5CF2BA764FDA5680F0EA43B3E469D8A4B5AD5 + 1BA149130DCA35CA66283B1E67C6B2A97EA147C16AB1C2A27C0E9F1C1CD27FEF + AC6F968D8BCB097412755D8F0EF3F7F36962A7F2121D8B3218976E4287860632 + 83FDAC6269D3EB38272193E64B6761988DAC981E55A894B2BE75BD5644C00BC4 + E0E867217738228597E06654C1F090010666DDA05B3E6159336DC4F76BAC3384 + 8968007C8971BE842D62D6C159C5DE5F109564E1F17403C8C64CD0AB26419F72 + CAA2319AB3A4F3B62F7008A19BB9577F71613E52A7C3A04731B9AA339A6F0CCD + DB9A0E03EF04F0F9FC48DC626ED34D0D44AAB5BFD347E76CAD87859DFA0386D8 + 3FA68502A9830000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A0000032A4944415478DA + 6D937B4814411CC77FB3B7777A5E7276969AA4648A20A5592A4585FE654122BD + 0CAA3FE2841EA45946697591BD8DB27748A2BDA0A43FA2420C893252D2A244B4 + 7C24495986AFBC3BDDDBDB9DDDBDDDDB663714B366F9B2BB33DFCF777E3BB383 + E0DF66235A19342370912538D0CAB2825BF00A6DA4EF2D1133D5A8AA2AA029EF + 4126B3292B2E21BA70697A5262626A9C393422040D0FBAFCAD6F3BF187C68ED6 + 9F5F472E2992524FBCE2F400735884ED40E6BAE58539F6CCD0B9F323009111C5 + EF075191600C7BA0ABEBAB5AF7A071A4ADBEE71CE7C615849126032823B52D77 + EFBAEBF6BDEBAD164B20E941A092EBF89ED75050960C6ECC805B6060D8E984E7 + 379B9C2D8F3AB71353CD4440CC8ACCE49725D7F2626DB3AC60A028C2535092FF + 4A2FCD5E1A0F2E3C062E9E8171D1034303A3F0E24CF3A7910EF72A1230826813 + BDAFF87CEE85ACCD19269AA2C16030C0093273EDC372C8DE92FFD7EACEDDE902 + 06B3D0F1A41777DEED2D5015F5369A1335BBB6ACFA4056745C24A22903941636 + EBF044C38204BCE003FBEE62B0DAFBC1237A61B8C7A9B69DE979ECF3F836A1A4 + 65F15F4EDD2A880BB606A12B45AD93B02C2BE023D2604D79FB8F02B5F533B022 + 078C9B55BBCF7EEBC43F8424B4243DE19BA37C678CC962844A47B71E204F8212 + 09F1EBF783474E02BBB105BC1207DE711EFACA06BE8B7D520C8A8A0D6F70DCD9 + 951E343B1061598067A54EA8AEBAA4435A0826D22A3976B21406B31B80F76160 + FB3975E8E2E84785F12F460166E3E91D17361D8E5D1E45F332062C8BD07EC300 + D7CA4EC1BEA292BF16B177751D6893304D5E9979E0AD5265354FDBC694B4EC05 + 7599FB57844906093862D04CCEBB913AE4D9F01EBC3E1EBC22AF87635680F1FB + EC4FB95DC922DBD8A105A0008BF1444641DAA1A88C8800CE8F8123656AA59A1F + A740FF9A7AF22CE8B0208AC035F258A8911C20C3D5A9BF72D8CC79C197E3D7CE + CBB12D0D09106862D4A13F9F343133F70E63F18D740F7E818330E3D30FD31CA3 + D5986F5B68B55B532DE128923248269F0EF2DF05856FC58372AF52013C5412AF + EB7FA7516B34512232C2063A944E44C1C82C7B14CEEFF2B793929F92B16E2265 + EA71FE0D330BBCF031BDB9A60000000049454E44AE426082} + Name = 'PngImage15' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A0000031C4944415478DA + 6D536B481451143E779D5D5D37D95AD354523445905AB32C0A0DFD653F92252B + 8BFA130A3D40F385D1C3B09766A5652548D23B34FA1115624894A0F6502845CB + 079298A5F8CA75737677E6CECCCEA3BB532DAB75868F3B73EFF77DE7CCBDF720 + F8374C045BFC97F8AD3504F8191D0ECEC639B91E32D741407B13154501E4F5ED + AFD3EBD263E2220A37A5C49BCD1B62F481214BD1F4E49CDCDDD18F3FB4F7758F + 8FCC5C9504A98570F9C506FAE01053715A46526166565AE0CA552180C88A24CB + C04B02FCC476181818519A1BDA677A5A862E32365C473482C740A3D5ECCFCECF + A8C9CADF613418FCC80C02853C678EB4425E5502D8300D368E8669AB155EDE7C + 67FDF8A4FF002135FE35884A4E4B787DFA464EB469B9117C341AA2D78008329C + CF6D55CBB39406C11C4BC33C6F87A989597855FEFEF34C9F6D2B319841948E2A + 387639BB327D6FAA8ED2505056F066C18E363DAE05CBBE5C30E7BBE02767071A + 3BA0EFD930EEBF3F9CA748CA5D141A1ED454F5A8383D22260C511A1FA8287CAF + 8ABC037302ECC92E0263D618D879274C0F59959EF2A1A72EBB6B378ADF1CFBE5 + FC9DBC9800A33F2201D547BB3C06A228818B80E55C2A728A4E01B3AB0B689B43 + 19BCF0B51F7FE7E2D1FA94B8AF25B587A274062DD971173C2C1D560D448F5020 + 26B23A1E3D790EA62C6DE09C6761B46AE21B3F2A44A1F0E8156D25F70EA7F807 + F9212C72F0A2C20ACFEB6B3C62F788094E9496C12411B32E0C8E314699BA32FB + 49A2E575C857AF2D3B58B9FB44745238C58A183AAF890BFEFF5259A947CC082C + B893D0EF9C22DDE0BCAD884A8EFB1813375A5637A71525070B3E023084E02631 + 24136E88564D262DADE0E4DD621EB08383F97AC7B8D82BA59363EC731B205F83 + F66C6ADEC6E3E1A921BE8C8C55B1BB54FDD34418DBD642DE3955CCF13C30ED2C + E61A85127251AE7B5FE5E0659101D5B1DB23334D9B96FA721421AA22FC3BEB9F + CC4C27C6FC5BE101FC8012A2995FDC4CA15AA336D7B4C69865DC605881C2343E + 82CEA50AD96F9CC476E3497158AA03166E11EEDCFFBAD11D1481196961271548 + 995100D28B768991E7E45E52F273B236482079B7F32FB7E1BAF0E8F71C040000 + 000049454E44AE426082} + Name = 'PngImage16' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000019E4944415478DA + 63FCFFFF3F4341F1F9FF0C6402469801BEFE4A0C0B16DD60583CC71CABC21F3F + FF327CFFF90748FF6128ABBCC2A0A5CEC0B072C752E20C40D6FCE3D71F86BAFA + 1B0CEB963B31A85A241336005DF38FDF7F18DA5AEE3098997032CC5D3D07BF01 + D834FFFCF597A1B7EB3E612FE0D20CC253263C625092FFC5B0F1C06AEC06E0D3 + 0CE2CF99F68C4152EC0BC3AE931B310D983EC908A119AA11A409660008CC9FF9 + 9C4180F72DC3E14B3B500D00019021840048F3F7EF3F19CEDCDE8F6AC09F3F40 + DB7EFC024B82E81FDF816C280D11FFC5F0F9D337B03C08DF7C79126180A7B73C + 86E6CF9FBF43C460867DFB09D70C32ECD1A7F308036CEC44C18A976E9A82D7F9 + 7CFF8DC19A4186BCFE7D0D618089193FD896B5BB67311CDA309341504A87E1C9 + ED930CEF3FFD60F8F0F927C3FD671F1956AD59CDF0EC96105833C8BBEFFFDF44 + 18A0A3CB0976EAB6C30B182E1CDDCBA06768C8B073FD02B8CDF79F7E64E89C34 + 87E1EE456EB06610403140599519EC827D6796312447F833F072B130B0B0B2A1 + 387FF5D6430C37CF72C0F9700318191919F49D72C9CAD200FAC9B5C145016BDA + 0000000049454E44AE426082} + Name = 'PngImage17' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000015D4944415478DA + 63FCFFFF3F03082CDD7212C22000627C2D1891F98CC80644FB98E3D50C54C3D0 + 3B6521C3F99DD3194936E0DFBF7F0CCBB79D6690161366B04C57058B715C6060 + 24CA0090E6DF7FFE31ACD9759621A4D68281352A97E1F7B2C90C8B2E10E10298 + E6DFBFFF325C5DC2C1F044E912C39B4B4B19984A3AB17BC171E64DACAEE860D0 + 60D0F399C2F0F2D636868587CC18A41A1A18D218F07801DD669866100E699161 + 10D5F6050726411720DB0CD35CDE369B61DED24DD80DF8FDE72FD856107D6319 + 1786E6ED7B4F311C387911BB01611E260C6E73EF80F9110C1F180C182C18C4D5 + BC5034830C3E7AF60A7603029D0D212E00FA7DEDAA2B0C2D2D210C6B6A9EA068 + 06E15317AF6337C0C75E8F2160D92330FF4E8B0B838B4B0D985D5CE907D70CC2 + E7AFDEC26E80BBB50E5CD11FA84B60E181C0FF18AEDCBC83DD0027734D829A41 + 00A701B6C66A0C9BF69C24265362370094D348012003002CB76B52FA97B19500 + 00000049454E44AE426082} + Name = 'PngImage18' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001B04944415478DA + 63FCFFFF3F03258071D400064674018780D0A7823C7C09EB97CCDD8D4B535EC3 + C493AF1EDC305BB1603A2323BA66090111A9272F9F301CD9BE99119701110999 + FF616A189135FFF9F9430A9F4618B0F1F405FB1B6E0021CDD70CF8FF0B09B0D7 + 481C78D50AE2FF7295B1FBC82F7AF0C585F30C8C96EE5ED3E425E533618A1F3E + 7F385D4A5A79C3DA79937781F8C149B96E6627F7F4F8B23ED3DD226BC2F04840 + 96A19CE72DC3E7E387182EDEF8389911E49F1913DA192EBCE06778FBF727C3E3 + CF0C0C276614A2B860F98C690C9BAA5A1854F7F530282A4830DC7FF08261E657 + 318689B76F33820DC8A89806D70C026B1A43E19A65C46518C0F25F3F3048CE28 + 6050BFBC9A61DB7F198693AE390C535AF220068496F6C3355F7EFC9EE1E6BC34 + 782CC0E47F5EBFC060D7E5C170E8BD208301F73B06BE7F1FFD642E316C6604F9 + F1D9D3BB01CC4CCCE070F8FBEF2F4618FC7D723D22F3EF93C4FB37DE301C1296 + D9E8FBE68198BED87F4BFEBF1FED084619087CB4178BB974FFD3D42B8F7E7801 + 6D390A12DB28C4BA51558ECB8F2803D6F1B2C67CFEF5C728EEE7FF62A006701A + 98C0C0202ECBCDB00A00547CD715F016991D0000000049454E44AE426082} + Name = 'PngImage19' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 395 + Top = 80 + Bitmap = {} + end + object LargeImages: TPngImageList + Height = 24 + Width = 24 + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000003CD4944415478DA8D96ED4F53571CC7BF17EC9315 + 11864234C607C6D4E9408621F88CBA88D0C64D48EA906C3E3459F40FD077666F + 7CEB62A2912C43F0A950A12A3001AD2613810908B46869E69E8B2FBA3087F499 + B6F7B63BF7E0BDB6D2A79BDCDE73EEBDE7F339E7777EE7DC3248E1303C346BC9 + A5812FDBED767AAF51D7B9C9F4A07E22595B2655F8DED202642D5E089F3F88B6 + EE415CF8BE857F9C54C2A402DFBD651D7296C8C5FBD3336EE87F7C8206DDBDA4 + 1226197C57493E96662D9A7BF9F810BD861A4BF1EFB4136D5DFDB8D2DC9550C2 + 2482EF2161C9266111E00D470B611C015A75D7E11FD6E2F51B176EF7FC8CA696 + F812261EFCC0F60D502AA451706DB902A7EB5F60D2F32195B8068EC1E5F1C1D0 + CD4B62878B4904F7F8392C3A3922C2C361D280B438736900B6D94FA9E4D5FD5A + C8A46968E9E8C555FDFC9130EFC3856C8984A72F90E0E31C274AD767A3EBF138 + 7A2D6E64AF2D82C99A4E257FDED320C4B1E87C34881BAD3D511226D1840A70E1 + B09AE7269987FB021CBCE49C9C545089AD5B0387CB03E39351E80C0F44892008 + 278207D830BE297F27FAB6DD41E182A4A9CF0698CDF8BDA31A334E2F7E7A6A42 + F36D2395303C3C56B644F69C09BA3139C5E2ECE11C5AE727DA9791274AF8B3C3 + 64A712ABE17338C9C4F70D3D4757DF2FA0829ACF8AE2C2BD410E013F0397C329 + 0A4E9CEB059B5B4005B38110825C083EF25EDFAFFF518959AF86E5E55F387FB9 + 19CCC5EB3D61AD661F14320915683616A2B24C22C2F9DE05FD0B10F4450B9C59 + 6B299C070B23197FE5A082519D0AD6DFFEC677F56F0599194AA8CA8BB1848429 + BDE40768EABEC6EE923431C6E1800C0C1B2D9852AE8E091FB959058F771643A6 + 0974F7BF04535C716A236963D1D6A95173601B9128A1286BA4924DEB58DA98F5 + C891217347096CD29531E16E12FFC1B109DC6A7F3837C9FCAF20397144854315 + 5B91A15C88CC9DD7A864F90A2F8A729538B6F7DD662748C602B9F37AFE74D422 + C2C5348D941CAF55A19A8C840B315855758B4A64996F909FEE84C7350D960D61 + C6C7D1364D7FC829BCFF4A05A97118187901FD1DE3FC85365FA28646BD132E6F + 0005070DC0E6CD5015E6C58C390F9748D2D03F3C8E9B6DD1AB38E66627488E7E + A942D59E2D9090945DA36EA392B2FCEC28F8B31B9598251FA061B335263CEE76 + 2D48BED25462DFF66228E4527CF4C55D2AA1C75B38CD16027F3F2C49059192BA + 9A0AEC2A2B2212193ED174D2673CDCED9DCB96D6F64771E109059192DAEAFDD8 + 515A08B94C0A8EAC5A9A2D6396A4F0A48248C9113292BC651F807C1260FFE735 + F4778D49E129090449E6B25516C7948DD64919A49CD2DF96FF0126B669571175 + 682F0000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000032A4944415478DA + BD95CD4F134118877F5B0A22D84205341E30087E24021A45893131F1E2C178F1 + 2A26FE07C6C478319E8D9E8C8926EA49E217D1B328F142A24123070B2E6DB76C + 0B5DB6A585B614CA47BB1F6D7D772CDAD22DA0094C32997476F67966DE79F72D + 97CBE5B0958DDB1601C7719B7EE1D18B8F9768E8A17EB660FA2BF537D7AF5DEC + 2F5CCBD8FF22C8C3DF5FBED04D2F73882FAC40CF64114BA6E1F3F9797AC693E4 + EA7F090AE1FB9AEAD9DCD24A1ABA9E81AA6510239920C530CABB71F7E615EE9F + 0425705A6E80753D4B27C8A0AAD24A630EFE5002E25494242E26D994A01C5C55 + 7528AC6BC866B3A8B7D782B35830198A63C829E2D9BDDEFB4EE7F3DBEB0ACCE0 + AAA617C155EA29458546D2867A1B72D90CDEF67F41DFD37E3709DACB0ACCE00C + AA680CAC685A5EA4B13B38D97E00B14412BC57C2C0E0777C7A37545E50166E80 + F302E324EC37CD7775B4223EBF0861621AA35E19636322BE7D18361798C2159D + ED785550024F2C821F9F82673202419882382A221C0897DEC146F0D59014C213 + 0B4BF0D0CE9D8244F020FC3CC127C31819E92DCE2233785AF90B53F360632E43 + 1FD7098A79742E899F047691C0352621264F63C22D3178D177F0F8E540093C95 + 568BE29EA64C512834468A9EEA6CC34C7C1E6E5F082EA3BBA71097C310F9893F + F0B582D7C78EECEFE9EA6883B5C2C2629C5EB373259F9EDDC70F6226364FE020 + C6082E8E87200B0148A25C045F2B983C77FA684BE7E16696D3A9945A10EBBC48 + FB0D8FC617081CA44B0D421483181F19C7AC3C5B023715B43637D109AC58585C + C64A4A29806B043F84394AC561DE4FE560165E418668C083E6F01281A3CED6D2 + E4D8853D0D75D8595DC52ED2C89E2C8D5D14F34834C1B2E5873B00C123232147 + E017A4B2F0B582C14C8E3B5FBDA30A95560BF6EEB6A3916486A4C16187DD5603 + A77B025E2902371FC072740E9E51DFBAF0926A7AE7415FCE6677C052C1C1565D + 81C6FA5AAA2B39D45111CBD2627F7086761E424494E0F30436849B966B4362AD + AC84BDA69A5295C3F2D21295619D95E5C5E40ABC4E3F8B79FB99F68DD8ACBD7A + 728B332B153722B1F987E170181ADD81F1DCE8AECFDE4D410B1B950A6E7BFEF4 + B7B2FD02BC08E5EFAAF547E00000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000022C4944415478DA + 63FCFFFF3F032D0123CC82D53BCF13655398871123B18683CC46B120D4DD10AF + 06A01A86F6FED90CE7774E27CA12922CF80754B776D7050651415E86A2BA3EA2 + 2C21DA0290E17FFFFE63D8B0F712838DB12AC3CD7B2F88B284280BFEFDFBCFF0 + 0768F89FBF7F19B61EBC0A0E2218A08A0520D0B3EA2131410E06A5E10A704BB1 + 5AD0B2EA0186260E0646869230798286831CD2317B23C3DB3DF98C382D00F141 + 610E0E963FFF18FEFEFBC7306BEB4BA22D3051F8CD1052BD0D6C098605216E06 + D008FDCFF0FBCF5FB0E1A0C89DBBE335410B7EFDF9CF3069DD23866827617022 + 0059F266771E238A0541AEFA0CED6B1E91144440FBC186FF02FA76F69627E020 + 82010C0BFC1C7519DE7EF88661C8B203EFB15A806C388CDEB9FF2458AE6CC679 + 4C0B3C6DB5C061FF179A2C81084CAF3AFC096E4144CB159CC1D49EA60AB6E4E8 + F133D82D70B5D26098B2FD25C120C2E67264FAF4E9B3D82D70325763F8F8F907 + 8605EB8E7F815B40C87010BE78FE1C760BEC4C5418FEFD852451502A82E4E07F + 0CDBCEFE005B00323CBA0D7710954629327CFBF997E1F6B58BD82DB0355261B8 + FFF41D86C6A3B718180A43E419BEFFFA87D5C520F6CFDF08B187B72E61B760DE + 92B5E0B2071DB8FAA73164F8C912653888FDE2FE654C0B181971975BDD2B1FFC + 4FF292061B5030E5264E75715E32608BDE3DBE4ABA05316E52045DFE0B5CB430 + 307C7C4A8605614E1244190E026459106027CE70E8E869066201C916209731C4 + 02140B6805009C1383EFACA508270000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000E9C00000E9C01079453DD000004BF4944415478DA + B5D37B4C53571800F0737A5B6ECB4B2F2D2D2D2053408286870CD4C9C0B89989 + 8ACEB041F035064CEB365800D93235C0EA40FD836D380C085B44C7C30993111E + 93199411DE844029B80908586094577B81963EE8E3EE82D311662A35DB97DCE4 + 3CBE737EB9E77C07120401FECF802B010821A8ACACC7BAC453B54A95E6405AE2 + E111631B7C9E7E331102E87431313C76B1FFAFFD9E071492C0A3A109218D8AD4 + 68C68527040281E1799B9FCF2A738306439314971765244598060C3C9E1406FA + BA73EE36F6045E381DD6B672F39339393457C4BE748BFBFAE08AFBED572E9B04 + 94D7B20647645D7111FB7805E58D359DF2817DB97CBE76795E7246717450E096 + 5C7239E5C7AAA62B99C9260039F977B893B3AA9E84A8FD3603C313BA9FAA5B8F + 9C8F0B2D799A73F6AB627B77676E4750A0375BD43B0ACA6ADA7ECE4C8A085935 + 9097574B1F56C89A2342767A6356E6A0AAB6E3E1AF1DFD5B6E0822D5A1A1C588 + D71B66D7DF7B3BE0E862767BCF20A8691265647D1115BF6A6031522E9784B130 + EB9BEF066DA72C68B5C4F5D2BACF5262DF493F935E78684F804FE9C6F53CF8E7 + 040E6E57B7E04A9572DBB7C951FD26018BCDF8B4FCAC5DDB37F377F86C84AD5D + 0353F79A1FECD9ECC22B3EF8E6AB2EB25925B85327D4F70E8DC5640B22AF3E5D + 640A004EA7FCC046D7A06D216F6D73E230AD417E59BD243CF8353B081128FC43 + 0C6A9BBBEF4BF48CBD2582B085970296904B45611C1BEB225F4F67848A40E0FA + 0A178C4864A0F46EEB2C3E33BF332735BA6B79BEC9C062BD5B482D8A5998D5A1 + 0D8E6C60678B01D14331E81D94246509DE4F052BC26400B8FC821E0E5178D9D9 + 326A5BC516E6737225F0B09BEB1892500FB688E7A5A02E52FD72C08E026F3B1E + 2B92CBC676D3E9664E23A313A85EA7910368A6B1E3602C3A1D5DA0D210B14422 + BBFF6860FC3BD018DEB53AC03797C659E79062CF65C6418346AF981AD3E85438 + 9C56D3692C864A6EE1E0A3D62AA6AD0787261A210D250044BCD45A832DB93413 + A8E70544FB49AD5100DB5FF1D14667CE3732F103056A98EBA322C42D8D9ED239 + 348725AEB39CF56438FA2E5066FAB893B8C27D4C4A1D279770C9DF3E09CCE831 + 8002CF12F5C7B28C022E11BF89508DD489AA1ABE26421D12414998FEEF23BBEA + 6683EF46ED7D09BDACD756A61AE2492A05CAA539A73C3A60EB6F03338623D170 + C4D328E01E5DAF21A47D5A864EE92FACFAE49F12F42F28DA84C93CA9F67E2832 + 3FECA4C30739DD5567F067F3BEB9A90035FF9468388A1A053CF8CD7238FDFB3C + 55A7F2E92C8F1D7B329A42A1BCEE52ED8EC9AC11DE56E61A44EE3833DA13DC5D + 9E50B30CB848023124606514F03AD5D24F99E9B5D42B64FEDD5509834B837E37 + 98660CD8E7B616BF2745DD985C267D977E52745D88D49F0025254F8ED0EFFB22 + F21EFC48C0D52860B9B7347B2D9C896252E70E8B2AE24BC1CE142AD0B97ECD36 + 577DCC3197F3BB71762B8FC3CAD8C0D46D958FF59DEA2A4F2804DED99B009D71 + 0B204803D170EC43E3651A50E88F52F4D55C0B45E563B9F597900031185DF381 + BD85A262DA801F5FBAD8C0020F1EDBA61ACE8D40E50225145722C1804AE39355 + 7480A83FDAF8E287E69FCF275BE7C82EC7D152A1C650F5B529037EEE59D52C5D + 7AD166000C17C85610F94D904F2C0D341ECF79E143FBAFE32F16D672EF3D728C + 4A0000000049454E44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A0000043D4944415478DA + B5956D6C535518C7FFB7B7ED36B66E5D47D67663731BECD5B18605D8504C084B + 74982DC16468D4F881AD0305E3870550D100EABE482246712A8AA00182BA9828 + 84252006D7264AA2631B461325DD5C9ABDC0686B6F5FB7DEDEE373EF6869C736 + B6189FE4A4A7E79EFBFFF5799EFFE9E11863F83F834BFCF211506AD6A7585DFE + A99E3611BD4B1553DE7FC0DC797B64FC9C13387B883149017C0064549A528F56 + 5A2A9E31AE2CD00EDF700AB62B034DAD22EC8B117E07482B3019F61516E7ED15 + 6F8DA6BB6F79D84D1F0E5A197B8BDB06F06D7A743F5C8827B4997A684A6A804C + 031C7F8D78ED97FA9B5BB130E4531E9B2A2D655D191AA9CAE570201C61CC15C0 + D94911D60EC642DC4915DA9BCA714C97024E6E87C46BA029AE86DA5C08C79F4E + A1F7CAB566AB08DB3DC280C19CA77FBBA42877BB776C940F08018444B0DB3E1C + EE6178AD1B88CAFDE58E02797526D8561BB1324A00519A191A532174E535181A + 1A176C3FF42595EB6360836595E1AB1C9DB660CC39A1EC0F46204E06B0AF4DC2 + BBB17D0A409E1C032AD6E7E3C7223D8C31803C54E999C8B1AC85F3A6CF6BBFFC + 4BB30C3995A2B2D696E6BC2F8602691E6F50D9E79F4298CAD2DE069C4ECC320E + 90E32450BF6605BE37A623231122A9782CAF5A0DF7B44618F869F0FC9A55D94F + BB275DAA6058549EFB66C45BACC085D9654C02C8F1058F268B09DF64A5429B08 + 11A97419463304B707E1E014A669215696093F9EDB097C399701EE01C8714A83 + D60773F1499A1A7C1264D6A0864A54F397A8E65DF3396C4E801C67B4D85F9683 + 4EB50ADC5CE25351B04972CB76865716B2F0BC8083D4DFAA545C2DCEC6BA9868 + 34011096ED18C4E1768657659D2501C8519A2C9DB6AB7A6DB955F8E3376EBE12 + C959F8C238B003E85C3480C497E5E51BCE6C78AA79EBDF17CE21484D5DA80FD3 + 049916B1872047EE0B20F1ACE212F3B71B5B1EDD343E781DA3D7FA93C4C88E1E + 8941CDABA04B5C8F48F289C58BCF2BE76F1E00D55C5DBF42FF5D43D3238F07C3 + 115CEFB90831CAE222816984DD213446818954158E136463ECD413546E428446 + FB2E72FA9C80AF759A37B734D4BC9E663070FDBD5721787C890D955C41B45119 + 3E57F6D29FA31BE8500187E8F1B2B8D80CE459827427014EF0D8FC585DD1C53C + 935E3DEC9CC4B06334A9C6247EC4CAB06776FA1F02D5F4EB8ED3743D77F75EA1 + DE63DB6EE07C1CD05791FB7B6D85B1CAE70FE1D7010722E2DDD2FC13823D1C45 + 039DD4C83C76D61A8197497D3F8DD43B990428BBADF4CE6505602FCAEE7EA826 + BFA56FD0018F371417F747E017A650FB027003F70932482D099FA0A9E5CE9240 + A37127633F739FF16859579ADD3D36E1492A0DB176B72BB7E0E2E23D20450B1C + A0E95ECA86A7526DDEC5582F27A759A6852D330575316708615C1A91B0E50D32 + C9620109BDA9A78F27A9D91D7117D19D6A58AEC6E9340D1AC9350295A796360C + 2D557C76241D34D97E5E4A8F9270ED506EC4FF1E32E05FC9675CEF0AFC725300 + 00000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000027F4944415478DA + 63FCFFFF3F032D0123CC02464646AC0A66243060B820630103230391006EC1C9 + 898CEE406A07B2E4890B40C33AA6A268B8B8229761E9E67F0CD1BE4C1886FD67 + F8E76151C0B0139705FF154C1A18045444212EAFC8061BFEE5C54D86A6E24970 + 0D75BD790C770F4C015BD2B16802C3FFBFBF19FE01F1D7A7BF1836CC69C0F01D + 8A05061153510C7F7D7527032EF0ECF216B025AD73DAC016DCD8D2C870FEC23F + E22C787C6C21C3D64DA70886AFB79F1983988E07D8825B3B3B89B70066092100 + 331C84EFECE923CD027430F9A037410B61A0345C016E095116FCFFFF8F61CA21 + 5F869230798286F7AC7AC8D0317B23C3DB3DF98C445900321C9452A61E0D22DA + 021385DF0C21D5DBC096E0B50066F8BF3FBF18A69F8C2068C1AF3FFF1926AD7B + C410ED24CC70F3DE0BB025382D00451C03D00290E120F6CC33B1382DF8FB0F62 + F8AF3FFF18666F79020E22BC71003210968160ECD91752B05A806C388CDEB9FF + 2458AE6CC6794C0BB0190EF2C5DC2B59700B225AAEE00CA6F63455B025478F9F + C1B4402F740256C341F4BCEBF9283EC0E67264FAF4E9B39816E8067563351CC4 + 5F70AB046E0121C341F8E2F973981668FBB761351C8417DDAD045B00323CBA0D + 7710954629327CFBF997E1F6B58B981668FA346235FCFFBF3F0C8BEFD7321486 + C8337CFFF50FAB8B41EC9FBF11620F6F5DC2B440C3B306ABE120FE92474D0C19 + 7EB244190E62BFB87F19D302559712B8E1E8F4F2E75D0C495ED260030AA6DCC4 + 1944715E32608BDE3DBE8A6981B45E00C3B34B9BB06A3C24798F21C64D8AA0CB + 416C503C7D7C8A6901B8CABC7001BBCB3E7B3E6008739220CA7010C0B00057A5 + 0F03DD2B1FFC0FB013673874F43403B180640B90CB18620100261ED9D6E5FCF2 + FA0000000049454E44AE426082} + Name = 'PngImage6' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000037C4944415478DA + B595DF4F5B6518C73F2DFD4191B66C6C4E8512618376DD28B485B1C126D90F36 + 8D1B1726264B76B53BAF3431DE99F80F18BDD1449399254B644E1747743ADD94 + 48169C428131268366832D631BC838FC687B0A057AEA7B0EB692B562417D9393 + 9C93F33EDFCFFB7D9EE73C47974824F83F976E25A0E59BCE75D1DEFBF00CD72F + 7FA4CB0A70E268DD9AC4450C454F17F2E63BEF6784FC2780EAEDCFF3580A6784 + FC2B403CAE70EEBB007BFD4E22D15846C8BA01AA783C9EE0FC956E0EECDEC1C2 + E2524648D680E1FB9374760E119A95B1D99FA2AECEC5739BED5C68EBD58AFCE4 + CA1A1096635CBC14D084B7941761CECB25321D66EAFE440A343032811C959124 + 498B39DDF275760055BCE5B3761C9E321CDB1D42DC844EA7435114E6E57946FB + 4778187C44D3613F66B3414BDBC5B6AEEC0167CF77905FBC096F4D3936430EF7 + C2301E5D7E67B5409E3EC648D720F353111A1ADC28A226DFB607B203A839FFE1 + 4A0FF5C71B291169B1EBE14E086E882C0813E488E70D3630CA53F48B4EF2EE72 + 512852F6FDD5EEEC00EAE973375AA93C50C55C04CC0A8C89D3CB4B5060165D24 + C242E2DE4A98B1BE2114D1413E7F053FFEDC9B1DE0E34F2E535A5341597529C3 + 63301703530E3C9B07361308034C2E08A09009DD1A606CE801FB1AABF8E9D7BE + 7F06A8C5FAFCC235AC22FFAE3D2E46C661711136E5C266711905A8C0080BC255 + 707A9E4737832CCE84D95959C6D540FFEA80E32FD56A1FD0E8F8B45683FD279B + 90643D2191A62DA2B076215C201C6C109738070392CC2F5F75E0F26CC5969FCB + B59EDF5607BC7AB84673B0245A51EDFF925D4E0A859389591D46B1F519E1C022 + F2633588B489E79B771E70B73B48B5AF428B09DC185C1DF0CA419FB651854833 + B2E6C2DFBC1BEB461BB373A20E8A0EBB69B9931E4F4DD37BA90B5FA59D2F4F9F + E575DF755AF3DE5E1DD0BCBFFACF39B3EC22223EB6E488F01CF163C9B7109989 + 30D0D6A7C544676EE1609CA6E2DB58BC47986CFF9463AD957F0F78F9054F4A3C + 098A2B097E17436C38389A9A455B9D0E0C7A3D5F7CF02E45917BD497C6707B8C + E4541DD320C5AF756406BCD8B0334D3C39399F0427EF4FBD518FD751AB419C6E + 03267F730A920638B4C7BD26F1E4BE336FED4B41563A490334D63AB52075AEA8 + 814BF1BF84944422A37872AD846C739B18948CE980BDBE726D22AE77F59C3A99 + 829C934AD201997E1E6B5D55D1560A771C659BC7CB1F1C73BA92B5793DE80000 + 000049454E44AE426082} + Name = 'PngImage7' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B3A00000B3A01647F570D000002724944415478DA + 63FCFFFF3F032D01235D2C606464C42AB978D3F10C0E76EEE9E4181CEAAE0731 + 1B9F05AB775E3A1DE2A66B822E0EF2F3BF7FFF19FEFEFB8742FF03D217AE3F67 + E89DB19261F3BC2AFC16C05C0FB480E1E0E97B0CAFDF7FC5E95A51416E067D0D + 49B02513E6AC66D0D3353A03F481295E0B40AEB73751341115E2818BFDFB0F72 + 2DC4A5A82E87E0CBB75E3014D6F6309CDF391D6C204E0B905D4FACE120B9C9F3 + D6C05D8FD70264D713133C5A2AE20CD7EEBC44713D4E0BD05D4F8CCB4172A965 + 5318FC3C6C18EEDDBDCEC0C6C6CEA0A363C400348311C30264D7136BF88D7BAF + C129C7232C99C152959B61FDFA350C17AE3D63D834B712AB05FF41AE07197EF8 + CC7D82C1A3A620C2905E3115C570297975866DDBF7A35A50DBB3E03F30821880 + AE671012E0C69AC681086BFACFAE9ECED0589D07371C04502C689EB8E4FFEF3F + 7FC9C9B070C0CCCCC2202EA30C371C04E016D4F52EFCDF541C4FD0901FBFFE31 + 7CFFFD1F4CFFF8FD8FE1CF5F18FB3FC3E68D88A0F1F27444F5013116A01B0EA6 + A18683F0FE9DEBC0110B321C2388401650143EB060E2E063E0E6E165E0E1E621 + DE07845CFE1D2A7EE1C82686EF7F9818787878C0961C3A749AB005840C5FF4D5 + 8E61C1850B0C4BB5DE30DC38B585E10D304973F3F2822D397BEE067E0B8871B9 + F76901B0DAB9AAAF181E9CDFC670FFD173065E5E3EB025376F3DC16D01B1C1E2 + 9D21C43083D59481B5790BC38B2BDB192E5EB9C1C0C7C7CFF0F1CB7FD4FA0066 + 0138D9C10C40321C268E6C3848FC75B127D841300B4E9FBBC8C0CA210A361C24 + 8E62415D411CC3EC95BBC94E41CF9F3F07275398E12816C08A0A4A92A8B28621 + 43828F3E4AB90FB7809600004F6ECDEFF6DCFB3B0000000049454E44AE426082} + Name = 'PngImage8' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B3A00000B3A01647F570D000002954944415478DA + B5955F6852511CC7BF3E9882694B723D6450D4A21ED61FB3879EEA295CABA058 + D1CB6A23A315C2A441AC4123368A82FE5011066D63D1ECAF6058291643AC8D60 + 966EB5FE3E64D4966B7B1841B1997A4FF75CF14E773DFE1978E070EE3D1E3F9F + EF399C9FCA082190C964284523F73A88AC54020A8F9E3323A7E0B6EB558352A1 + B2150BAF991C00852B0779742EC143EFDB40CDB64AA3241DDF398EC066F74ABE + 6399372AC2E93B53904ACF0BE00F7CC5C4E45FC99AB15FA3B054AD07ECE781C6 + CB4084876FD743D1DC01D97E736E014DBFC5B8DCA8D3CE17E7387E6D824FCE71 + 9CB083CE07BD387CA94AF84CE1FC88E8EE3550D45961F04411F2DAD882F4F42C + 78821FBB1D3E58E2EF10BD7A425CA7708FC0507F26B7203D3DEB78C423DABA12 + 38DD8868D02D1C0DF6D4C2B0D3CA16CC4E9F2D3927BC13F43CF2C3526B02EE5E + 037E8401F34940AB83C1740C2DC78F0AB74922484F9F0B4EFB1DD70B74D95D59 + 7717ACDF88AC75C00B084D4FE12F5F8799C7439B6EA10AAB962DC291E6EB30ED + 3B84CD152A389D0EB4E9E3D23A3875A19BACAD34804F0F6D994A4C3B939A8EC8 + 987378FA9975B0D770168FBB5A9282F62B3D24164FA0D8565EBE985907BB9E8D + CF085A2FDE226D4D07F302A7FF71988A11619C8E7178EAF531EB40BF64697182 + D9703AF6FAFCCC3A90088A3E9FD41131EAA0E01D644B9E7C267833D0C7AC8382 + 04B9E0B4BF0FF533EB20AF201F7C8A7FAE0E94096B3B2BC6F12DE446F87B046A + B5062AB51A9FBF8CB00585C0E97C75831637E49B206F7F82B1610F86863F41A3 + 5980DF7F8800A7AC0C413C91064883A7E6D3E1747EA2297945538240700872A5 + 4E8467085AAD0770F3FEF3B95C26A14522110C7EF899011705A99F8A39D3F9B6 + 62F506D4ED5827F9E71204A56CFF01E5E2820611E3A8010000000049454E44AE + 426082} + Name = 'PngImage9' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000029E4944415478DA + 63FCFFFF3F032D0123B2054BB79C24CBB6DE290B19CEEF9CCE882C063317C382 + 681F73920C07EA619016136628AAEB43B184AA1618682A30BC7EFB19C512AA58 + F0F7EF3F8615DB4F33D818AB337CF9F613C5128A2D0019FEF7EF7F86D5BBCE30 + 38596833FCFAFD07C592733BA6319265C1FF7FFF19FE02F11FA00520F6BABDE7 + C0918C0E48B2E0D687070C53AF4E62B8F0F6020348B59BB41F43A1661603EF12 + 0E8637E15F188E9C7FC0F0F5DB5786B76FDF82D5CF5BBA89780BE6DC58C0B0FD + D9620C4B4F3FBFCFF0E4EB038697219FC0C1F5E7DF3F30BD79EF29E22D38FDEA + 0283F906230CC303551CC1F4FA3BFB199E057E801BFE0F18275B0F9C26DE0287 + CD4E0C879E1F6028D56B606834AC021B62BEC582415D44106EC123FF7770C341 + 71B3E3D019E22C38F5F20283FB7627860D6EFB18CC8575A0A9E61F83D5762B14 + 0BEEFBBC811B0E8AF83D47CF116741FED12206676064BA49DAC00D1758CE8511 + 5C773D5FC30D07A9D97FE202610B400A6BCEB430D4E95532FC03CA234722321B + E6F2B92FA631C408A581C50E9DBE84DF82084F5370068219C4BF9413C3D5F7BC + DFC033DAD467ED60B164E112B0FA6367AFE0B720D4CD04C595422BB8E1A9E6E6 + 9BF70C5BACF7C00D7FCEFE942160971343B16E1D83277B3058CFE98BD7F15B10 + E46C84121CA2AB79512CD868B10B6CF8DC97D319BA2F3530D8493A30F42A2E84 + EB3977E5267E0BFC1C0D50C25A722D3FDC0274004A454DC67D0CAEAC81703D17 + AFDFC66F81B79D1E4A10C96C106490E15600E75A74806E3828C2AFDCBC83DF02 + 0F6B1D942092DF2CCC70DBE315C3F2D74B18763DDDC400D265206CC020CA2187 + 61380810B4C0C5520B45132C4271255564C389B2C0DE541D258DC33210580C4B + 9E40369C280B6C8C54C125222500AF05D82A0F7200CC0200F191E9EFB5062090 + 0000000049454E44AE426082} + Name = 'PngImage10' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300004E2000004E2001167D99DE0000035A4944415478DA + ED954D4C134114C7DFEC6E0B420B085A6A040DD88A45C0C4602D4A2D281F5589 + F1AB6AA2094A4C5502DC34F160EAD11BF1E4498D462F1A43FC408BA052C11435 + F8890AA222A2601B6B2D94B26DB73BEEB4168B16E1E2C1C4974C7627F37BFFFF + CB9B995D843186BF19E8BFC1940653012693897AF9CEAEA5696825732FE72B6B + 3877F2B6F01A982A77435595F48F0646A351E4E3E3342CE7BDFBD1F6F1E7024D + 957CE6BCED6FCC66EF6485D71D3DDE617FDFAD9ECC00E96B6BC5727FAC9A65DD + 41718EF795A6CBE6F9699A6925738F67ACE091A5A5235AB2C1502DA1E3F108E1 + A219A0CA4A530C15CFE68F7986DB0814F0072AAC2DD71BC9A276FDA69D98E7CE + 7198DFDC616E6C8866A0D6EB13C448E48AB6078278A5209E22888F05C531E075 + F76E5CBB11660B4AD716D30C732BC0F37A6B5363535403B56090F2BB01D209E2 + 4AA96C99DB1D6A0BE251455BD395C6C8E4253A5D929491248F70CCD7A796CBDF + A219E495EE8A4F605CEE09060683412C92CED6F03CB64C26FE830F9F6B4A187C + D41D144EDECAFBF7D50889AC41039D4EC7C83354050850B0721FEB392441D892 + 1827C62C93E892393F7F3863B1F822049142A110CB6473553C254AA431041806 + 80E3001266A7D8ED036FFA3A3333F94237CB1103B4AD72DF0A0A51EDD18AE91F + EA3F2191CCBADA7CE9ECCD88EA614B556DC9E0A7B71BE7CF997FE0579E773B2E + 386C0EAB5CA962D1DE9A835AD273B25873B41E66C602385900DB28C0C008C0F3 + 0127F49C3282D3ED2F7FD16626170C6FDB53534CE140F39FF8A10FB6D573E6A5 + DE463B761FC061F17C39C0A03B34C209244892F9702924C5607DD6E2A501719C + A4793A7C863203D05C450ED6166AE1C8B17A9821F4718C9B5811097A580CC7AA + F38070E1980E1FDC2C7966567ED1AAD50F4945E1707943C3EE9998402A229196 + 9A06D3E159AF6719D2EB6B63B20A942D19E5C6C2746908F0064209E449E0272E + 1BBC3D5F37D865BD6BCCC9CDE5E4694AB3667F3D4CC5B73E7EB020784CD76EDC + BE70C4EBE9D96ABA0831B470DC9CE2F1EA084CFAF9CDE95C33EAF8D49E9D9D0D + 0AC5224D5C72AA85984CC6B37E9FCAD1FFBA7BFCA269CACA14CB57569CEEEC68 + 2EECEBED1B4F50E6A8067BBA7B770F753F89FC4453E5DB77AE1A1D1EBE13C986 + F9AE675D455FDEBDEA0DEEC1BFFF47FBE70DBE03EC16D6DE8FAAF1BC00000000 + 49454E44AE426082} + Name = 'PngImage11' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000003784944415478DA + B5566B48544114FE362D31A3C78F104C7B50145A902FECE15299D12668ADBA61 + AE925AA405811585F4A31745FD308A0A42DB5EBBE96E56AE9AAF30CD2CC5C79A + BB998FCCEDA5640F15823233DC7B9BB9EBBDEEB65BAD5207863967E6CCF7CD39 + 6766EE15B12C8BFF29224AA0CCAF89237DD63F051689E21323C5D91CC1F5BC6A + 96186302A0EB68EC0CC3C2C430309918B34E7A2AF2DD2751A23A21B22210F965 + 9A17EB5304DD9ECD34256382FF25C11EA84D82DB8A6B9CDEFF301E771FE8A0D4 + 94E0E1ED745B020A36F69DD39EC5F4552A7CAA88437155A37D02478421FE96E0 + E6366293C610FD5E75D3F822A0E096B9363116E0C4765FA74677690CCA6B0D63 + 23287EDC850B375BF0A4AD177D9FBF63DA94499086CCC1B15D0198E2EA2C44E1 + 21D1E04DF16654D6373B4E702CF3098E663422FFAC049215B35050F5165BD22A + B8B9D0200FA84FAE11A2F00ACBC1CB42191EE99E395E03D76597F1FD8709BB36 + FB207DEF320E689A58C9CD393B89D0551243C6F81A985357D3D4EA5804F47424 + 1DA982BAD488C329FE48952FC6FDDA77901D28177C68CE79F0F91177D09E2B45 + DDD3F6BF13F005A5EDC730C3919C57B7C063E6645434F40804AF8B64233B67B1 + 28528B67B736A2B1A5E3F704F412D1313EDCEE8F0388492B87FE793FC2C45E50 + 1C0A86A7E4A64060BC1B2D6CC447560083261CFAF64E5B82046930B7800233FC + 1927FADAE462E85A7BB9B9B6DC284C759B08CF0D390241475EA4E0CBF7CD1D46 + FB04F4FA0F356CB75AE0BE2E1B43A4C854CA2E4AA02A3222ABE4A54060D044C0 + 89149BFAFAC616A1E146185A3B5FD912C46F5C8989810A7C23EF8AC9E22229B4 + 1D38AED07360625F77246E5A0065A111F7EB7AE03C4184D80DF3B047EE8D3A6F + 4F81D4455B694B200F5F0E97A02BF85293387A4B99D14233BF1C45ABB490A65B + 321B29CA73C84C48B54F10131664B573BB4056F3E6776778C447BF74EE9F09A2 + D707622AB9407D95F1E6428F000D5B00FFFA06D5FB8CA685CA8E3307A1D877CA + 6A4C2090860660C66A1537D853160B8FF51AC1E9457E14164AB582AD5787C34F + 5E840CC34E6ED7ECE057B0FD1FC0F4BD0778BDD380EB060B8288103F3B69F8F3 + EB49D36229DBB78A7145556D3F024A5058A973E89B604F86A242B02D7C01AE92 + 636C5303FAD1CFD196667D1B1C1A3741EC9DD348F40597168D6C3F92E2A4A31F + 7DF207306E605E3200E1FF6727C90CAFFF0482645308AD8246DC000000004945 + 4E44AE426082} + Name = 'PngImage12' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000E9C00000E9C01079453DD000003DC4944415478DA + BD947F4C1B6518C79F7BEF8EFBD56BAFC7951F33BA75E9822B88520C88D92C93 + 05C410CA70986D3261B1DB3F261B24D3F92331F2A799C6B0F96B666668165D88 + 12E7FE598CC14C639C43D0988D41B69974DD5A680B584A5B68EFFA7AAD81306C + 8D0BE2935CEE9E7B9FE7FB79DEF779DF97C018C35A1AF1BF020882C81978E004 + A6EB6BA106236D0B42E4BD080045E3AA8A35ECA3587A607709717531F60ECD7F + 0378FFDBF806A9807E2734956898F027A94844054D03C86310701C02AB950B47 + E3DA075D4EEEA5BB069CB898DCC671D03F3E1655BCDE0548A520F3A4D332DFFA + 9BA208D8B2D5047351B5EB48BDD09B13F0E27B41E7A580E5870B3D849AF64F5F + 49BA522AEE1B198E48B11806DE40416C4EBDA380A9192D03E278048D0DE61BDE + 49B2FAE5ED309515B0AFD7838D14FFEE3C6DE9AEAD559B6211AD7F642842A91A + B1243E3D1D85D999202416E2C08B0A30BC5907109999382A045C5E2674B6DAE0 + 93AC8096377EC7452C8F79237DB6AC5CAC1BBA14165329B4243EE10B82DF3B06 + 34237E93C2DA607C36F4B849595F67B26C22B03E0B399F82E626F9B3A76CB027 + 27A0D0600235F9D7325034B5241E0C84E1E6F591A02E7870F058D599F4F87AE7 + 295654882F8B37D434D08CA4C7226869967F7CA6143D9A1320911C305C5EC65F + 140F8713E0B9368C3535F5E4D069D7F9E53DB0EF38D526291BFB8DCAFD603090 + B0C3257DB7A79474660534BF12C0884A81C9844056988C7824A24168D283FDDE + AB472F7FD17164E52EB3B77D7C1FCF291EB9F8613D8F84D656F3B95D25A83927 + E076488375051498440C825E5178568399D0ED9F3DD7475CE35FB97D2B01B627 + 3EB218154B405E570D160B05AD2D52DF4E1BDA97133039A3427AD714EA0D33EA + 907455A169350E40BA075EB37CBA12B0A9ADEF1E91C9BF251557C1462B03CEAD + E25BED65E8705640E5013F9E5767F553A4014AA9A07700B4E43CA49271482EC4 + E7584172FD76A66E7039A0F2D9F35588CCFB49904BC1F1100F763B77F0390779 + 3C2BA0F11830E274805EF4037F3BD731F5428F757EF91FC7DEAFBB04B3ED6D82 + 12A0A9D1A4996554ED76D0C35901FF74D965B347BA6F725AD8F73D27592BD3B9 + 9DED66DF956B0B9547DB8489FF0450D171712F6750FA106D440F3EC0E9CBC39C + 7CBE266FFF5DDFA6D9CCDE71B98867F02F2C5F50C43024EC6C312646C763F6E3 + 9DD28D5503CADB7F1568160D7086C27A8AD42FB97A51CDB75087DD0EAA373DBE + 6A40C5FEB10F395674CB324B6C731A4010D09B7E0FF56ACFD34462D580C70E85 + 369BCC7874730987CB4AD9D1C980FAFA0BDBD9CF97C7AC0AE03C3423EDDA2D9C + 5414FADCAD089CEDAE20FE58199313B016B6E6803F0192C0D6E065D4DD9D0000 + 000049454E44AE426082} + Name = 'PngImage13' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A0000053A4944415478DA + AD956B50546518C79F73CE2ECB5ED9B3ECB22C48800A02CA45101BBCA005D9D4 + 4C17758C6FD57899FAE0D4871AB3CC6B5FD2748CA91877600AB3A949CA4427E3 + A65C1409729565B92CEEB2807B935DD80BECB2B773F6F4420A5841493D33E7D3 + 7BDEDFEF39FFF799F760F058C5601F2BAB443E079B0C077DF250304086432117 + CDC6AD3EA77FACAC6CAF77EAA5B93BB07F8B3EFD55A37872CC95C7E5725E6671 + 584F4570D871188E7182815068D2E3354E38DC17273C8E2B9DC33A4D735599E7 + B10495E76FC63B6CCED7F8A4708F58267A429620C5C4B1628C601310F006C06E + 1A656CF7ECA151B3ADDB366256EA07BB2EFEF4CD19FBF427FF13FCA4F29214A3 + 88BD9218F2CDB4DCA531B1F1122C40B0C11B02A0C37F74C822502A011F63EA37 + 33BACEBB8377BBD5A75B9B7EF956A3B9E15C50B063C77922AF20622B29979CC8 + 29484D4C7F428647E038DCF703BC70E826681A34F0F9B15720398F0452C0000F + 0FC1B0C640AB9A3ABA55ED8DEFFD5C5D797541C1A7E5D5F2E024766C59CEB29D + F96B5388380E0BC351CFEE2040E187B3024516096C1680044958FE71467D4D1D + AAABAE52B65D6F38BAA0E0E8890B05B21871E5AAC28C94D8043926A601F80480 + 651260DB47B382F47C12BC14008ED6A2793458D4FDE196CBB53D576BBE7B635E + C1543C2B32A8ED4B33932A5617670929161F761EB9396F330F6519EB49A06C56 + 4655D3EA3A5B7162DF0282C3112969A9AFA7E7A794E61467478E072360FD66E5 + CC7A6671E634746E4D0956AD2301BC4EE8ACFDD5AF2C3DF2C9BC824D9B0EB30A + 3624EF589EBDBC3CB7389B1F2004A06A76CEAC2B5BFA66BA9E5B1B3693601DB6 + 30B7EB5B3D155F1C2B5DF00C0E1CAE2C8C8E8B399BFB744EA2302E16333B3020 + D08E680EC09EE3B367B0BD98041A4D2A9A5AF08469E8EAE8635A2E5D19BCF07D + D9A90505EF1CA84814F1F92757ADCFDC96929F8A8F4DA2F9F7014421C1C62DCA + 9958B622C154518866754E80A6454D55559EA96F69AA3E3EAF40B57FCB726D50 + C0D2466DD9268D4F7C376B6396589A28C7EC1E0218344D7DEDB371BD84040CC6 + 80C31F64746A1DEABECE5873F9EBB33A9DFAB3BF15B41F78A690C7659A3D9152 + D044AE8500AE08B1F83266C593692C91428A071836BA0470E0A2B1E4A10747E1 + 38C6BD8C65C014EEBCFE9BA3B1EEC7DAB6EB57CA298A6AFB8BA0637FF18B3C11 + 5D91B03A534684ECA0712583C61D0316271EE408E4DEA495295162B904E39242 + 60B1D998DFE367D04507F6210BD577476DBD73BBF9467B5BED799FC7D38470EE + 47041D1F146D1788C22715B9EB92843C0A5CDA4EE8B708A163221E8C7E4269F3 + B0FB2339FC2269AC224D1EAF904444B2591E97276C1A1A720E1B740383035DB7 + 7A7B54F5341DB88D702E987BD94D752E10D3A58ABC8D4922AE7F1A6E30B2C130 + 26048DD50A23E38EE7CBEB354D19196B93A3158A748C2696D1B43F0AC5002EF7 + 98C334ACEFF47ADD030835821EDF432EF630733E9FFA217ECD3A998817828981 + 2ED0E93130B824A0350D41B7590F6E7FF0B9BA2E67CD833DE8E6017410403CE0 + 4C4D68706A90E0CF3F1CD5C1E2A24801D1B0243707F85C149AF60E188609E877 + 4483D6A8875E8BDEE5F4516F35F6B8CEC1220AEB39FE2CB3247B25F0055C14CB + 2D1834B2C0E010836678007AAD7ABBCB1B3C78AD775CB918F8B4A0FE5409B366 + 752A50860E1832A1CC4705A0351B416DEC7721F8FBD7FAC6CF2C163E2D38B4EF + 6D2647781F12682F82F3A0CF6C821EF3008C7A03AF2E36964704BB77EF629688 + F9407A6CE01CB987E006704FFA76D575BBBFFCAFF06941494949915020688811 + F1E15E4F2BD82CFA5D63DDEE732A80D0FF21F81D69327688E78891A000000000 + 49454E44AE426082} + Name = 'PngImage14' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005234944415478DA + AD956B4C53671880DF7329BD9CB6B4A5174A454005112F205E16DCD46C3097ED + C7B2690CFFB665BAE80FB3FDD8E2DC8C739AFD984EE3C8326203D9702E5B069B + 139D8E9B82283299454AB9147B81DA9BB4D00BB4F476DAB3AF80896E02D3ED24 + 5F4E4ECEF99EE7FDDEEF7DBF83C1135D0CF6B9BA4E18F2B0C4896848118B46C4 + 8958CC1767E1CE90373C5E59B92F98FCE8E119D8BF459FFAB6553435EE5BC7E5 + B25F23D9E4F3296C56068663EC6824169B0A04AD931EFFF9C980E7728FC5A0BB + 5657197822414DED4D95C7E57D93120BDE11C9848B6599524C942EC208160191 + 6004DCB631C675CF1D1BB3BBFA5CA376B571B8F7FCAFDF9F764F2F7921F809F5 + 05294613FB2472F1DEFCE225F27495048B102C08C600E2899908490265251262 + 6C4376C6D07377F86E9FF65447DBEF3FE87437BCF30A76EEAC25D695A4BC2E56 + 488E1795E465AD582CC353701CEE870106BD00D1F84C0E481C40CC678087C7C0 + A233C7356D5D7D9A5BAD1F5EAAAFB932AFE0CBAA7A45740A3BBAB468E9DB1B36 + E612196C12C311D11F05E81E07F044101F9B192C12408224647882D15ED5C69A + EAEBD49DD75B8ECC2B3872FC5C894C2EAA59B5A520373D53818950C41401E098 + 0218F2CD940B8F35B38A200D80A37769BC3838B44389F68B8DFD571A7EDC33A7 + 20999EE505F48E25ABB3ABD796AD11D024056EEFC2BBC6E502D02E27A369E8F0 + 9DA93EBE7F1EC1E194DCFCBCB7566CC8AD282A2BE44C445360EF6737E704EB5A + 7470E9B73D4071D043D00B3D8D7F84D5159F7E31A760EBD6C364C973393B9715 + 2EAB2A2E2BA422041F4AB6AAE78D3E295009019C1607D3DDDC11A8FEFA68C5BC + 0B3E78B8664B5A86FC4CF10B4559828C74ECBE77E1B6C9498D436FD720D37EE1 + F2F0B99F2A4FCE3BE3FD83D559428A3AB1EAD9D5DB7337E4E1E353A8FE4300A9 + 6C00394A059B98ED83590A8DEE4EEF24E8DAB5745DCDE9E6F6B6FA63730A3407 + B62DD347F9A43E75DB76A92AEB83359BD788A4590ACC1D208041D5244896650A + 2A4FD4033896DC7C063CE12863D01A50F44DD6868BDF9D3118B45F3D5670EBE0 + 8B5B785CE65A8023051D67234470658CA464CCF267F249A1528A4718549B0C0E + 5CB4021E1A3824C03311641C265BA2E7FA9F9ED6A65F1A3BAF5FAEA269BAF31F + 82AE0365AFF284F1EACCB5AB6544CC0D3A5F0EE8FC727078F1289BAF0866AFCC + 4D15292418572C0092C5C2C28130830E3A708F38E8C13B5AE79DEE6B376E7536 + D68602813684F33F22E8FAB874075F9838A12CDE942DE0D1E0D3F7C09043005D + 932AB08609B52BC01AE2B0A95269BA325FA1524A52382C32E00B246C23235E8B + D9601A36F5DE1EE8D734C7E3916E8443ADF850DB2423E78BE215CA759BB385DC + F034DC6C6581795C003AA71346273CAF5435EBDA0A0A36E6A429952BB038B134 + 1E0FA7A23480CF3FEEB1598C3DC1A0DF8450A368841E70B10739A728FA67D5FA + 4D32212F0693A65E30183130FB24A0B78D409FDD08FE70F4E5A65E6FC3EC1CB4 + C5903C2488590E3A57219A2C24F8FB0F4773A8AC94C3275A1615170185DADCAF + BF03660B01439E34D05B8D30E030FABC21FADDD67EDFD9059BE03117D67FEC25 + 6651E14AA0F85C9496DB306C25C1EC1181CE628201A7D1ED0B460F5D1D98503F + 0D7C5AD07CB29C59BF360F6873178CD850CEC7F8A0B75B416B1DF221F8475707 + 274E3F2D7C5AF0C9FEF79822C17DC88C07119C0783761BF4DB4D30168CBCF1B4 + 697944B07BF72E6691880271C005DED17B086E06FF546857539FFF9BFF0A9F16 + 949797970AF8FC16B990827BFD1DE07218778DF7F9CF6A0062FF87E02F9F6855 + 88E7298D620000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005A34944415478DA + 8D960B50546514C7CFBDFB625958DC455049C8074A3C44B490C67C8C5A098A8E + 8E61A0E68C363A4C884C5A3E7240D1F1C13496A58E634FCD0AABC9416DB29C18 + D9626C542052234904158170A10576F7DEBBDF7D75BEBB0B3E82F49BF9CF7767 + F7DCFFEF7CCF731918B8E950C1283B6AB8D96C8C62F5AC4994149EF0A4197F6B + 4575A13894D29F81AAAAC00C601EA6D3416A5090F9F9509B65AA2D3C74C490E8 + C121C19620D6E316E4F616678FCBD973C3E5723B445E2CC7F81A94F7710034EB + B17ABD7E516C42744E424AECA8F8F1234D23C63CC10C8D8900539001BC5E1E5A + 6EFD0DF57537D53F6A1BF9FADAC66B6D8D1DC7144529C3776F51DF8100D43CCD + 1E11B626754A52C69CACA9831252464358B815581DA305CB8A028AAA804F26E0 + 1638686DBBAB5EB9F417549EAA71D6573595096E72103DAEF442EE07B0A8F1B6 + 48EB96CC97A6A72F58362B3866F43046A763FBD2A1C6C5F90ED8F8EEB3C0893C + 78509C28809BF74243FD6DF5E7D2AA9ECB3F5DFF9678C91E0C6FF0FBDF034418 + 0CBA4DF397CE5CBD7CCD7C4B544C24A36391C930BDB940D19A735AE0EB7B9F06 + 0FE1347935103EFB38B8D3D0AE3A3EAD72D59737BD8361FB513DBD0093C1C02E + 9B38257157DE9625914F258F445F06588645E1D46048515E399C2E3D08F372F2 + 20B7244933778B5EF05210422888230234D5DC81F3876B9B3AEA5DEBD1F73402 + 240A181E3ED476287BD5EC3959AFA6B366B34903E8581DF66C9F396D14B0724F + 3CB87D1E70138F96B936020471124E57B7176A8F5F93AE7F7FFB33C9236D4440 + 07CE33A4C7A5C41ECDDF9A13999C1AA7654DB3A7806DF9157DE6BD80FE5AD4AA + 0EE071148244A0F9421B5C3DD2D0E469E65620C0C1982C86E21973D336BF5698 + 6D1844774C20FB9D05950F98D31D24490A88921C90FF39B7E02DB0AF6C418080 + 001F74B5F640DD478DA2EBF79E4259944B98109BE5544E6E46E6E2D5E98CDEA0 + 031617F7ED75171ECB9C2A7F7D21985FB901BCE407705E011A4BEFA8CE739D47 + 245E59C9D822C2AAF28AB3274E9FFB0C43E77EDF869AC736F71109DED85C0CCC + 92BAC0088876465ACF38D5B613CE5F658FFC1C631F32A8A660D7D209A93393B4 + 1D7968F3953E407FA6D243CF9B0A77009F558D009F66EE9345E83CD705EDDF74 + D6CA6E790263B5592A96AD9B37EDC5ECC98C04321045842FB7DE8413C7DE7FA4 + 39ED0B8B77C13F0BCE6BD3A3017C22749C76A9DD673DD58AA0A432C1A1410766 + 2C9A949BB576B60E8218201844213FEC76C1E71FEEFD5F73AAED3B4BA0655E05 + F81040307BA18B40676997CAFF269C54457521C31AD8E58993461F78796346A8 + 2DC61A18A61F72699F0A1FECDFDD6758F06651BFDBB431E34704F8DFE11A04E8 + FECACD49B7E5125556B7D383161F1963FB62F6EA2929492FC4323E55BC079125 + 683C6C85F7DEDEAE01E8822AD957B5E9E051DAB468BDDF5CC445F73838953B2B + FCA276AB5BF01C545240A8C1ACDB903C2B6EFDF455A966A3DD0082ECD3168B42 + 44EC5D47A361CF8E426D41DD8B2EF6ED169A756FE634195F1B016F19D72DD5C9 + 5B41828F11E0E9BDECE22DB6A092B4A5E3D3C7A63FA9978D0AC35388F6B27F67 + E8BF4ED602DB321D81D1899A4445F2F76E51E52A0442CAC5E340A010439BEFBF + 4D8DA8CCC1636D45E316C4260E993458279914C6171809096CBFF09393E166C6 + 59CDD01730A72324682E54119138C845F52E6C432F074A7AB8E0846255586C1F + 655D1B3D6D5842449A5DCFD870573DB026FE7511E994507311FF6B2720541322 + 568BD56A3BD0ABFA3B943050C9B4A266996C8615F6C4B099D6849060D3082303 + 363CD1264583116AEA45E05DEC9B7C2AA9177BA4EBF2192CFD9FE0BB9528FE51 + 45DF801AC31AD9857AAB3ED318AE8F3344E843749178EF5A8021DDA24ADA4549 + 724A3DB24BF95375AB65B8A02703F5587A54D1EF6DF477FAC91285953A99D1C3 + 38303276BC074D8A0CBC4A54271EFACBA8AB18D30EFE4F97FF340AF8172272E4 + FE66E507F40000000049454E44AE426082} + Name = 'PngImage16' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005A14944415478DA + 8D960B50546514C7CFBD771FC0C2E22E026A8A2F140145B490C65047AC0445D3 + F111A463A38DE608CA949A1A83864C2AD5E8543A4D33659AD360E3E8A036D958 + 069B943D80C8576E12A8BCC28559D8C7DDBBDF7D75BECB2EBE60F49BF9CFBD77 + F7DCFFEF7CE77B5D06066E1C2A0C65450D0F0D350C6375AC5194141FF19166FC + AD0DD58DE2514A7F06AAAA0233807924C7415A4848E8F31116D30C4B54C4A8D8 + 1183C3C34C21ACC72DC81DAD0E97D3E1FAD7E974DB449F7801E3EB50DE2701D0 + ACC7EB74BA25F14923F29252E3C7244E1E6D1C35EE2966485C341843F4E0F5FA + A0F5F67F60BF7E4BBD56DFE8B3D737DE686FEC3CA6284A05BE7B9BFA0E04A0E6 + E9D6E8C882B48C89D9F396CD1894943A1622A3CCC0728C162C2B0A28AA027E99 + 805BE0A1ADFDAE7AE58F7FA0FA4C9DC35ED35421B8C921F4B81284DC0F605193 + 2D31E6A29CA5B3B216AD9C1316377628C3716C5F3AD4B864A30DB61D781678D1 + 071E142F0AE0F679A1C17E47FDA9BCC675F9879B278997ECC3F0865EFF7B8068 + BD9EDBBE7045E6BA55050B4DC3E262188E4526C30473D12EBB0A2AB5E0B57B13 + C14378F06A201E3C7E1E5A1A3A54DB17354EFB85A6FD18F231CA150418F57A76 + E5D48CE43DF945AFC44C48198DBE0CB00C8BC2D260888A5192224169810DCE96 + 1F820579F9F0D2CE58F02284F68482782240535D0BFCF2697D53A7DDB9197DCF + 2240A280E151432C9FE4AE9D3B6FD96B596C68A85103702C87572C11CB8084CF + 7E4584F736546900DA2824638BB1B70708E2252C578F17EA8FDF906E7E7BE74B + C9236D434027D619B21252E38F6EDC9517939296A0654DB32F2DBCD8EFFCA500 + 3AD892A4C0D2570B21219F0737027CD80B4122D0FC5B3B5C3DD2D0E469E65723 + C0C6184DFA92D9F3D3776C28CED50FA2332690FDBB85D57DD9DEDF82E6A2246B + 5AF5FA56B0AE69458080003F74B7B9E0FA678DA2F32F57B12CCA654CB8C57426 + 6F7D76CEF275598C4ECF01CBB25A0FCADEB8F408E061733170BFBEF06D80BC6B + 1A80F70AD058DEA23A2ABB8E483E650D63898EACC92FC99D3A6BFE338C36B808 + A0A37F606BED038081CCA9FC44822D3B4AA07BF1AFDA1A693BE750DB4F392EC9 + 1EF939C61A3BA8AE70CF8A29699913B5A9884B09449C31878BEC7D80FE4CA587 + EEB7179742FB822A0488D055D90D1D27BAEA65B73C85315B4C552BDF5C30F3C5 + DCE98C0432109C2DA22CC189DD2D1AE049CDDB722AB5ECFD7E113ACF3AD59EF3 + 9E5A4550D298B0889083B3974C5BBF6CD35C0E421820184421DFED75C2A9631F + 3D91792BCD1CEB4F307BA19B405779B7EAFB5338AD8AEA6286D5B3AB92A78D3D + F8F2B6EC084B9CB9370BD4CFFB49BFD3F4C3F7773F98399AD3C1F54BBD89F10D + 02F47CEDE6A53B72992AABBBE9424B8C89B37C35775D46EAC417E219BF2AF641 + 08968ABE4402CF3D4747C2077B77DDCB9C9605CD8580B98883EDB1F12A7F5EB8 + A8F6A8453859AA2920421FCABD95322761F3ACB569A106AB1E04D9AF0D163515 + E5205004B97C02EC2B2DD6CC5B727ED4B20E664E93F1B713F056F03DD27519B3 + 80CF11E0096E7689264B4859FA8AC959E3B346EA6483C2F8E460B77BCD697DC3 + 4E3EAD05DFCAFE5E7BA6A2334EBBBA4595AF1208B9201E0702C518D67CFF6E6A + 40E50C1E6FD93969517C72ECB4C19C6454187FA02724D083A8D3D3D1FCBC66E8 + 0F98D31E1234176A88486CE477F52EBC835E3694F4F0811381A7C272EB18F3A6 + 1133872645A75B758C0567D50363D23B2E222D093517F1BF0E02422D2162AD58 + AB7600DDAABF4109031D9966D41CA345BFDA9A1C99694E0A0F338E323060C195 + 6C543418A1A65E04DEC56B935F2576D125DD94CFE1D17F18DFAD46F91E77E8EB + 51E35803BB5867D6E518A27409FA685D381783FBAE0918D223AAA443942487E4 + 929DCADFAA5BADC0013D1D388FA5C71DFAC1467FA79F2CC3F0A44E617430090C + 8C15B729A322834F25AA0317FD65D4558CE980DE4F97471A05FC0F622CD6FE88 + 2F15D20000000049454E44AE426082} + Name = 'PngImage15' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000002814944415478DA + 63FCFFFF3F032D0123C8822F5C7FFED767DC625876E301458645692830B0B2FF + 67E8ECD06184391CCC282EBAF6DFC7478B21AA671BC3F36D5E040DFAF3E71FC3 + EFBF7F19FEFDFB0F66FF01B275A20E32AC28E766F0F2F26250538B63387F7E3A + 235E0B3AD73F25CAD571D6BC60DA28E108C3A783A160365116E07339C4D540FC + 07C1364B3EC6D0E0AFCDF0EBD72F8679F3FA48B7009FE1206C957682A1CA5395 + E1E7AFDF0C4B974CA65E10051AB28169FBACD30CC5CE0A401FFC6658BD6A06F1 + 3E20E4F2DF50BE73DE59862C2B09A0057F18B66C9E4F9C05C41A0E4A45EE8517 + 18524C44C03ED8B573097E0B40C9AF7BE333A282C8550D92DEBD4B2F31C4E9F1 + 03E3E017C3C1FDAB705BF0748B2786EB103EC04CFF3039FF8A2B0CE11A9C601F + 1C3FBA1EB7050F37BAE3351C3DB8FE41732CC882402516B005674F6FC16E0138 + BB032D2107C00C07E583CB1777E1B6E02FD07520853F7FFE82D0504DE86C506A + 8188C1F81039909A5BD7F763B7006678754D0159BE5056B303EB7FFCE038A605 + 6E6EC05CF813E292D6B60A9002AC86FCFEF593E1F7CF9F0CBF8018C4CE2E3A0A + 16BF7DF30083AC822558FFCB6767302DB0B757807BB3BBA70E6C0137373758B3 + 868605C3D9B37B310CFFF3FB17437EF969B805E252266033DEBFB9886981A5A5 + 343C0C274D6A065B2025A5C42029A9C8A0AB6BCD307B563586E1BF81EA4B6A2F + C22D1014D107B3B15A606C2C0A8DC4DF0C336674802D303676061BAEA666C450 + 90EB8461F81F20AE68BE4E9C053ABA02F0208216B70C09097560C385852519C2 + 8395300C07D1B59D77095BC0C8C8C8505478F5BF82222B72718B35CC910DFF07 + CC78F53D0F88B300040C0C32A8D202B87061066A9D4C4B40730B0038C31BFE85 + 5838D40000000049454E44AE426082} + Name = 'PngImage17' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000026D4944415478DA + B5966D48535118C7FF138A455F84588C0A7A27AA1163CDB69168929851CB5806 + 81D5878A7C29412428484264A85006814342E805112DE8436F94F43E74393775 + ABC1552C87B5EA6286B7B01AB4BBD3CE8D0DC57976B7D9038773B8F79CDFEF9C + F33C17AE821082FF198AE982F607CE946C4DCD3731D8D5A2A063FFDA73E4C9FB + 469C8CB0E30A4AF61A928247D660F9D225A8BE7019366F0B0CD595C8186B43AB + 4D9024F322D06E5C8521F75D2CAB2A85E94026E010C00533D1CD09E99D4014C3 + E87CE482F2A717D93B8A305AA381A97F4282D3484B40E1A248F0BAE33486825A + 188D464C0A5FF1A3AA002A9EC0C7837D457957C7124A6A958DD896AF4146C08D + 1B1E23D46A35789E87D56A452010483EC9244C20465A28B27B6767650CFEE5D7 + 38BE8F7F46AF5026C1559BCDB1AA922D48040F0A1E145B57E06C7D2BAEB5DF4B + 4E20176E7778F0F0A54B9E205E0EA6DF793C38DDC463BB5BFE0992D97974DED3 + 9E01798254E0B4745FF47A120BA2354EFB70E47D435D09FE902294177630E1B4 + D95D6FD88243BBB324F8AEEB01E95959A8166F3F4E4137F509CEC515B0AC3922 + C1D7D574CFC8CF95DC050885C370F4FBD88283057A69277432ED2FD51FC5999C + 85F03FE7E00F2A71E7C322D435DF8A9D303A2F3A767939B6C0B253175BD4D556 + 0197E3154EE95663D0FF1B8E491EE50D7D73C2693FE01B660BF6E569638B8E9F + 3886D1110E2B5504872D7AE8CD179970DABCDC085BB027678B34B1F8F604BED9 + CC385FBA1586FD4D33123F179C26DC37FC8E2D28DCAE99B5482E9C464241BE69 + 53CA705982DCAC0DFFEA5F24B36A9C7E132CB82C41B66E3DEE3FEB433AC114D0 + 3F84F988A8E02F75743575B8E251160000000049454E44AE426082} + Name = 'PngImage18' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300004E2000004E2001167D99DE000004124944415478DA + ED955F4C5B551CC77FF7DEFE61D0C204D7758139C15684752C1A565A47D7A983 + 1664449D75337301A7D68D8CBD69F4C11463627858427C30DD8B3A0C8B0FBA10 + 71B8F247470706A6996E93617173C060A56D645DD7526EDBDB7BBCE75E6F2D5A + 46E2E29BBFE4E49ED3F33DDFCFEFFCEE39B7044208FECB20FE07AC0A584DE070 + 38C889EB011345C1101EC798786D77D747DF72DDE46A6B1B0F1E54DE1560B7DB + A57136DB4033B17373FEB9BF262872978F898D5C73B9622B257EB4ED83B1C0B4 + 47BF1280B0B6B6CAD4892C3D4D477873868DD76C543D90A028C9101E47A34BC6 + 1FDD83639916DB6C2D0A2A0785B12E1380686A72C8C91CBA72297A67188B9289 + 64C3E8E0D7BD78D2F4F4B3FB11CB7431887D6ECCD5DB9D09A0B75A7365843494 + E91D70E64D9C790167BEC49B2340F5DF9D397D46D41A6BEA9EA024926F922C6B + 1DEDEBEDCB08D07380827F02083367AE55AAB64522425908966818EEEBE94D5F + BCD56C5EAB9428F2C38CE4D625F797B733012A6A5ECAC9958422CB00369B4D26 + 55AE33B02C72AF64FEA75E3CD724D7D88C6F903B79DBCF9FD7138474940798CD + 6689BAB8CC4800C1671EA7A36F2A08E4CECB96215A921752057D373ADDEE789A + 21A1D168642A5561194B4AF3280449890480610072D7150402B3D7A62E9494B0 + D5119AC100E285A6D71F27097224533233F3334E85E2FEAF064E7DDA2F663F57 + 21DC01DB867AE7A60D9B0EA7EBF3E6273EFB708DFF45DF758F90C9AB47DE30E1 + 9AE3C191B60EB82F0B204803F8170166C3003FCF0661F2633B042309CB956117 + BE60E83897EC6B4E07CC3BDF85503F9DD2FB16A2606F7F14C8DDCDFCDCE9CB1C + 605FF361249A57AA01BC11A189001C18E27ABB06D6CA91B574F3634959B66260 + E709278890E91E9AD737BE550E64FD81947957DD6E200A353A64AA36C13BED1D + B086ABE312B37C0738A83B32686FA900AC1303EB87D5592988BAA41408CBBE94 + F97B1A9D50226EA272E78E277FC03B102314135A20BA1C50AC2DE6C745EB8B40 + D48F3F9805AF580BF9BEDF7B93374FF4B3BC9E8E45B711566BABBCD4A81D2CB6 + D8AB372A05C3585200E02736BF18F2C36F278F7AC747CFD9755BB630EA22ADCB + 70A803B05E1EFE1D2C6D55BC398EEE636C4A3FF4D3F70FF1C7B4EE99BD0F8763 + D1C9E71D9F839CE2DE605096DA0D16E3FADF0E069F5A5CB839525E5E0E1ACD23 + 86ECFCF56EA3FD18B4BCBF19FC37A6F9CCF14E30A82AAA033A112F5B98F9D593 + BA6886DA5A4DD5F6864F2E8C0D544F5D9D4A01B4BA32EFA4E76AF3BCE762FA27 + 9AB4ECDDBFE340E897B37B923EE81CF0420F57B646EE0E8990A2CBC2255EF5FF + 60A548580BF7708F2FB0399344CD87003AF1EFDC1146E9907B01A0D1F1004CCC + 254E70E62FA7CFA543FE3560726B3E3A7BE916EE2A38C0E2DFE731A4A1E21E4A + 745CF86CE838F32B77D3FC01CF05F8A9B438C37F0000000049454E44AE426082} + Name = 'PngImage19' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 427 + Top = 80 + Bitmap = {} + end + object JvFormStorage: TJvFormStorage + AppStorage = JvAppRegistryStorage + AppStoragePath = 'fEditorBase\' + VersionCheck = fpvcNocheck + StoredValues = <> + Left = 392 + Top = 120 + end + object JvAppRegistryStorage: TJvAppRegistryStorage + StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y' + StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N' + Root = 'Software\%APPL_NAME%' + SubStorages = <> + Left = 424 + Top = 120 + end + object dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList + Left = 344 + Top = 80 + end +end diff --git a/Base/uEditorBase.pas b/Base/uEditorBase.pas new file mode 100644 index 0000000..2fd9b79 --- /dev/null +++ b/Base/uEditorBase.pas @@ -0,0 +1,199 @@ +unit uEditorBase; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uGUIBase, uCustomEditor, ToolWin, ComCtrls, JvExControls, + JvComponent, JvNavigationPane, ActnList, TB2Dock, TB2Toolbar, TBX, + TB2Item, ImgList, PngImageList, StdActns, JvFormAutoSize, AppEvnts, + uCustomView, uViewBase, JvAppStorage, JvAppRegistryStorage, + JvFormPlacement, pngimage, ExtCtrls, dxLayoutLookAndFeels, + JvComponentBase; + +type + IEditorBase = interface(ICustomEditor) + ['{CB8CDE00-B225-4A1D-9A5C-EC6FBE2C854B}'] + end; + + TfEditorBase = class(TCustomEditor, IEditorBase) + actAcercaDe: TAction; + actAnterior: TAction; + actBuscar: TAction; + actCancelarCambios: TAction; + actCerrar: TAction; + actConfPagina: TAction; + actCopiar: TEditCopy; + actCortar: TEditCut; + actDeshacer: TEditUndo; + actEliminar: TAction; + actGuardar: TAction; + actGuardarCerrar: TAction; + actImprimir: TAction; + actLimpiar: TEditDelete; + actModificar: TAction; + actNuevo: TAction; + actPegar: TEditPaste; + actPrevisualizar: TAction; + actRefrescar: TAction; + actSeleccionarTodo: TEditSelectAll; + actSiguiente: TAction; + EditorActionList: TActionList; + JvNavPanelHeader: TJvNavPanelHeader; + LargeImages: TPngImageList; + SmallImages: TPngImageList; + TBXDock: TTBXDock; + TBXItem1: TTBXItem; + TBXItem10: TTBXItem; + TBXItem11: TTBXItem; + TBXItem12: TTBXItem; + TBXItem13: TTBXItem; + TBXItem14: TTBXItem; + TBXItem15: TTBXItem; + TBXItem16: TTBXItem; + TBXItem17: TTBXItem; + TBXItem18: TTBXItem; + TBXItem19: TTBXItem; + TBXItem2: TTBXItem; + TBXItem20: TTBXItem; + TBXItem21: TTBXItem; + TBXItem22: TTBXItem; + TBXItem23: TTBXItem; + TBXItem24: TTBXItem; + TBXItem25: TTBXItem; + TBXItem26: TTBXItem; + TBXItem27: TTBXItem; + TBXItem28: TTBXItem; + TBXItem29: TTBXItem; + TBXItem3: TTBXItem; + TBXItem30: TTBXItem; + TBXItem31: TTBXItem; + TBXItem32: TTBXItem; + TBXItem4: TTBXItem; + TBXItem5: TTBXItem; + TBXItem6: TTBXItem; + TBXItem8: TTBXItem; + TBXItem9: TTBXItem; + tbxMain: TTBXToolbar; + tbxMenu: TTBXToolbar; + TBXSeparatorItem1: TTBXSeparatorItem; + TBXSeparatorItem10: TTBXSeparatorItem; + TBXSeparatorItem11: TTBXSeparatorItem; + TBXSeparatorItem12: TTBXSeparatorItem; + TBXSeparatorItem13: TTBXSeparatorItem; + TBXSeparatorItem2: TTBXSeparatorItem; + TBXSeparatorItem3: TTBXSeparatorItem; + TBXSeparatorItem4: TTBXSeparatorItem; + TBXSeparatorItem5: TTBXSeparatorItem; + TBXSeparatorItem6: TTBXSeparatorItem; + TBXSeparatorItem7: TTBXSeparatorItem; + TBXSeparatorItem8: TTBXSeparatorItem; + TBXSeparatorItem9: TTBXSeparatorItem; + TBXSubmenuItem1: TTBXSubmenuItem; + TBXSubmenuItem4: TTBXSubmenuItem; + TBXSubmenuItem5: TTBXSubmenuItem; + TBXSubmenuItem6: TTBXSubmenuItem; + TBXSubmenuItem7: TTBXSubmenuItem; + StatusBar: TStatusBar; + JvFormStorage: TJvFormStorage; + JvAppRegistryStorage: TJvAppRegistryStorage; + Image1: TImage; + dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList; + procedure actCerrarExecute(Sender: TObject); + procedure actGuardarCerrarExecute(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + protected + function ModifiedQuery : Boolean; + public + constructor Create(AOwner: TComponent); override; + published + procedure FormShow(Sender: TObject); virtual; + end; + + TfEditorBaseClass = class of TfEditorBase; + +implementation + +{$R *.dfm} + +uses + Menus, uDataModuleBase; + +{ +********************************* TfEditorBase ********************************* +} +procedure TfEditorBase.actCerrarExecute(Sender: TObject); +begin + Close; +end; + +procedure TfEditorBase.actGuardarCerrarExecute(Sender: TObject); +var + ACursor: TCursor; +begin + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + Application.ProcessMessages; + try + if actGuardar.Execute then + actCerrar.Execute; + finally + Screen.Cursor := ACursor; + end; +end; + +constructor TfEditorBase.Create(AOwner: TComponent); +begin + inherited; + JvFormStorage.AppStoragePath := Name; + JvNavPanelHeader.StyleManager := dmBase.StyleManager; +end; + +procedure TfEditorBase.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if Valid then + CanClose := ModifiedQuery + else + CanClose := False; +end; + +procedure TfEditorBase.FormShow(Sender: TObject); +begin + if Assigned(Parent) then + begin + StatusBar.Visible := False; + actCerrar.ShortCut := 0 + end + else begin + StatusBar.Visible := True; + actCerrar.ShortCut := ShortCut(VK_ESCAPE, []); + end; +end; + +function TfEditorBase.ModifiedQuery: Boolean; +var + Respuesta: Integer; +begin + Result := True; + if Modified then + begin + Respuesta := Application.MessageBox('Se han producido cambios.' + #10#13 + + '¿Desea guardarlos antes de salir?', 'Atención', MB_YESNOCANCEL); + case Respuesta of + IDYES : actGuardar.Execute; + IDNO : actCancelarCambios.Execute; + else + Result := False; + end; + end +{ else + actCancelarCambios.Execute;} +end; + +initialization + RegisterClass(TfEditorBase); + +finalization + UnRegisterClass(TfEditorBase); + +end. diff --git a/Base/uEditorDBBase.ddp b/Base/uEditorDBBase.ddp new file mode 100644 index 0000000..44d54ac Binary files /dev/null and b/Base/uEditorDBBase.ddp differ diff --git a/Base/uEditorDBBase.dfm b/Base/uEditorDBBase.dfm new file mode 100644 index 0000000..01c4371 --- /dev/null +++ b/Base/uEditorDBBase.dfm @@ -0,0 +1,49 @@ +inherited fEditorDBBase: TfEditorDBBase + Left = 482 + Top = 361 + Caption = 'fEditorDBBase' + PixelsPerInch = 96 + TextHeight = 13 + inherited JvNavPanelHeader: TJvNavPanelHeader + inherited Image1: TImage + Picture.Data = {00} + end + end + inherited EditorActionList: TActionList + inherited actModificar: TAction + OnUpdate = actModificarUpdate + end + inherited actGuardar: TAction + OnExecute = actGuardarExecute + end + inherited actEliminar: TAction + OnExecute = actEliminarExecute + OnUpdate = actEliminarUpdate + end + inherited actPrevisualizar: TAction + OnUpdate = actPrevisualizarUpdate + end + inherited actImprimir: TAction + OnUpdate = actImprimirUpdate + end + inherited actRefrescar: TAction + OnExecute = actRefrescarExecute + OnUpdate = actRefrescarUpdate + end + inherited actAnterior: TAction + OnExecute = actAnteriorExecute + OnUpdate = actAnteriorUpdate + end + inherited actSiguiente: TAction + OnExecute = actSiguienteExecute + OnUpdate = actSiguienteUpdate + end + inherited actCancelarCambios: TAction + OnExecute = actCancelarCambiosExecute + end + end + object dsDataTable: TDADataSource [8] + Left = 40 + Top = 88 + end +end diff --git a/Base/uEditorDBBase.pas b/Base/uEditorDBBase.pas new file mode 100644 index 0000000..71c3154 --- /dev/null +++ b/Base/uEditorDBBase.pas @@ -0,0 +1,370 @@ +unit uEditorDBBase; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorItem, ImgList, PngImageList, StdActns, ActnList, TBX, + TB2Item, TB2Dock, TB2Toolbar, ComCtrls, JvExControls, JvComponent, + JvNavigationPane, DB, uDADataTable, uEditorBase, JvFormAutoSize, + uDAScriptingProvider, uDACDSDataTable, AppEvnts, uCustomView, uViewBase, + JvAppStorage, JvAppRegistryStorage, JvFormPlacement, + pngimage, ExtCtrls, dxLayoutLookAndFeels, JvComponentBase; + +type + IEditorDBBase = interface(IEditorBase) + ['{497AE4CE-D061-4F75-A29A-320F8565FF54}'] + end; + + TfEditorDBBase = class(TfEditorBase, IEditorDBBase) + dsDataTable: TDADataSource; + procedure actRefrescarExecute(Sender: TObject); + procedure actAnteriorExecute(Sender: TObject); + procedure actSiguienteExecute(Sender: TObject); + procedure actAnteriorUpdate(Sender: TObject); + procedure actSiguienteUpdate(Sender: TObject); + procedure actRefrescarUpdate(Sender: TObject); + procedure actCancelarCambiosExecute(Sender: TObject); + procedure actGuardarExecute(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); virtual; + procedure actEliminarExecute(Sender: TObject); + procedure actEliminarUpdate(Sender: TObject); + procedure actModificarUpdate(Sender: TObject); + procedure actPrevisualizarUpdate(Sender: TObject); + procedure actImprimirUpdate(Sender: TObject); + protected + FApplyUpdates: Boolean; + function GetModified: Boolean; override; + published + constructor Create(AOwner: TComponent); override; + end; + +var + fEditorDBBase: TfEditorDBBase; + +implementation + +uses uExceptions, uDataTableUtils, uBizInformesBase, + uDAInterfaces, uBizImportesDetalleBase; + +{$R *.dfm} + +procedure TfEditorDBBase.actRefrescarExecute(Sender: TObject); +var + ACursor: TCursor; + ABookmark : TBookmark; +begin + inherited; + if Assigned(dsDataTable.DataTable) then + begin + if (dsDataTable.DataTable.IsEmpty) or (not ModifiedQuery) then + Exit; // No continuar con el refresco + + ABookmark := dsDataTable.DataTable.GetBookMark; +// dsDataTable.DataTable.DisableControls; <- No descomentar + + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + try + dsDataTable.DataTable.Refresh; + + if dsDataTable.DataTable.Dataset.BookmarkValid(ABookmark) then + dsDataTable.DataTable.GotoBookmark(ABookmark); + finally + dsDataTable.DataTable.FreeBookmark(ABookmark); +// dsDataTable.DataTable.EnableControls; <- No descomentar + Screen.Cursor := ACursor; + end; + end; +end; + +procedure TfEditorDBBase.actAnteriorExecute(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + begin + if (not ModifiedQuery) then + Exit; + + dsDataTable.DataTable.Prior; + end; +end; + +procedure TfEditorDBBase.actSiguienteExecute(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + begin + if (not ModifiedQuery) then + Exit; + + dsDataTable.DataTable.Next; + end; +end; + +procedure TfEditorDBBase.actAnteriorUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := not dsDataTable.DataTable.BOF + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorDBBase.actSiguienteUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := not dsDataTable.DataTable.EOF + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorDBBase.actRefrescarUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) and + (not (dsDataTable.DataTable.State = dsInsert)) then + (Sender as TAction).Enabled := not (dsDataTable.DataTable.Fetching or + dsDataTable.DataTable.Opening or + dsDataTable.DataTable.Closing) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorDBBase.actCancelarCambiosExecute(Sender: TObject); +var + dtDetails : TList; + i : integer; + ABookmark : TBookmark; + ACursor : TCursor; + AParche : IParche; +begin + inherited; + + AParche := NIL; + + if Assigned(dsDataTable.DataTable) then + begin + ABookmark := dsDataTable.DataTable.GetBookMark; + dsDataTable.DataTable.DisableControls; +// dsDataTable.DataTable.DisableEventHandlers; <- No descomentar + + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + + { No lo pongo en try..finally para ver posibles errores } + //try + dsDataTable.DataTable.Cancel; + + dtDetails := dsDataTable.DataTable.GetDetailDataTables; + for i := 0 to dtDetails.Count - 1 do + begin + (TDADataTable(dtDetails.Items[i])).Cancel; + + { PARCHE ********************************** + OJO: Está pensado para que sólo una de las tablas detalle + soporte el interfaz de IParche } + if not Assigned(AParche) and + Supports((TDADataTable(dtDetails.Items[i])), IParche, AParche) then + AParche.DesactivarEventos; + end; + + dsDataTable.DataTable.CancelUpdates; + + { Comprobar si el bookmark no es válido cuando estamos cancelando la + inserción de una fila nueva. + CUIDADO!! Si no es válido salta una excepción. NO devuelve false!!!} + try + if (Assigned(ABookmark)) and + (dsDataTable.DataTable.Dataset.BookmarkValid(ABookmark)) then + dsDataTable.DataTable.GotoBookmark(ABookmark); + except + end; + + { PARCHE ********************************** } + if Assigned(AParche) then + begin + AParche.ActivarEventos; + AParche.Refrescar; + AParche := NIL; + end; + + //finally + dsDataTable.DataTable.EnableControls; + dsDataTable.DataTable.FreeBookmark(ABookmark); +// dsDataTable.DataTable.EnableEventHandlers; <- No descomentar + Screen.Cursor := ACursor; + //end; + end; +end; + +procedure TfEditorDBBase.actGuardarExecute(Sender: TObject); +var + dtDetails : TList; + i : integer; + + ABookmark : TBookmark; + +begin + inherited; + if Assigned(dsDataTable.DataTable) then + begin + if dsDataTable.DataTable.Editing then + dsDataTable.DataTable.Post; + + dtDetails := dsDataTable.DataTable.GetDetailDataTables; + for i := 0 to dtDetails.Count - 1 do + if (TDADataTable(dtDetails.Items[i])).Editing then + (TDADataTable(dtDetails.Items[i])).Post; + +//Esta parte se quitará cuando cambien los detalles de facturas, se tiene que +//volver a hacer el post de la tabla maestro porque los eventos de calculo de +//importe total de los detalles cambian el campo base imponible entre otros de +//la cabecera y luego no se hace post esto provoca que se queden deltas perdidos +//y un pete que te cagas al dar a guardar sin salir del campo importe. + if dsDataTable.DataTable.Editing then + dsDataTable.DataTable.Post; + + if FApplyUpdates then + begin +// ABookmark := dsDataTable.DataTable.GetBookMark; + try + dsDataTable.DataTable.ApplyUpdates; +// if dsDataTable.DataTable.Dataset.BookmarkValid(ABookmark) then +// dsDataTable.DataTable.GotoBookmark(ABookmark); + finally +// dsDataTable.DataTable.FreeBookmark(ABookmark); + end; + end; + + Modified := False; + end; +end; + +function TfEditorDBBase.GetModified: Boolean; +var + dtDetails : TList; + i : integer; + bCambiado : Boolean; +begin + bCambiado := False; + if Assigned(dsDataTable.DataTable) then + begin + bCambiado := (dsDataTable.DataTable.State = dsEdit); + + if FApplyUpdates then + if (not bCambiado) then + bCambiado := DeltaValuesAreDifferent(dsDataTable.DataTable.Delta); + + if (not bCambiado) then + begin + dtDetails := dsDataTable.DataTable.GetDetailDataTables; + for i := 0 to dtDetails.Count - 1 do + begin + bCambiado := bCambiado or ((TDADataTable(dtDetails.Items[i])).State = dsEdit); + + if FApplyUpdates then + if (not bCambiado) then + bCambiado := bCambiado or (DeltaValuesAreDifferent((TDADataTable(dtDetails.Items[i])).Delta)); + + if bCambiado then + Break; + end; + end; + end; + + if (not bCambiado) then + bCambiado := inherited GetModified; + + Result := bCambiado; +end; + +procedure TfEditorDBBase.FormCloseQuery(Sender: TObject; + var CanClose: Boolean); +begin + { Para resetear el estado de la tabla en el caso de hacer un insert + sin meter ningún dato. } + if Assigned(dsDataTable.DataTable) and (not Modified) then + dsDataTable.DataTable.Cancel; + inherited; +end; + +procedure TfEditorDBBase.actEliminarExecute(Sender: TObject); +var + aObj : IApplyUpdateFailedException; + ACursor: TCursor; +begin + inherited; + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + try + if dsDataTable.DataTable.State in dsEditModes then + dsDataTable.DataTable.Cancel; + dsDataTable.DataTable.Delete; + try + + if FApplyUpdates then + dsDataTable.DataTable.ApplyUpdates; + + Modified := False; + except + on E: EDAApplyUpdateFailed do + begin + dsDataTable.DataTable.CancelUpdates; + actRefrescar.Execute; + if Supports(dsDataTable.DataTable, IApplyUpdateFailedException, aObj) then + aObj.ShowApplyUpdateFailed(E); + end + else + raise; // Generic exception + end; + finally + Screen.Cursor := ACursor; + end; +end; + +procedure TfEditorDBBase.actEliminarUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := (not dsDataTable.DataTable.IsEmpty) + and not (dsDataTable.DataTable.State = dsInsert) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorDBBase.actModificarUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := (not dsDataTable.DataTable.IsEmpty) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorDBBase.actPrevisualizarUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := (not dsDataTable.DataTable.IsEmpty) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorDBBase.actImprimirUpdate(Sender: TObject); +begin + inherited; + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := (not dsDataTable.DataTable.IsEmpty) + else + (Sender as TAction).Enabled := False; +end; + +constructor TfEditorDBBase.Create(AOwner: TComponent); +begin + inherited; + FApplyUpdates := True; +end; + +end. diff --git a/Base/uEditorDBItem.ddp b/Base/uEditorDBItem.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uEditorDBItem.ddp differ diff --git a/Base/uEditorDBItem.dfm b/Base/uEditorDBItem.dfm new file mode 100644 index 0000000..2f43118 --- /dev/null +++ b/Base/uEditorDBItem.dfm @@ -0,0 +1,51 @@ +inherited fEditorDBItem: TfEditorDBItem + Left = 557 + Top = 313 + BorderIcons = [biSystemMenu, biMaximize] + Caption = 'fEditorDBItem' + PixelsPerInch = 96 + TextHeight = 13 + inherited TBXDock: TTBXDock + inherited tbxMain: TTBXToolbar + inherited TBXItem26: TTBXItem + Visible = False + end + inherited TBXItem25: TTBXItem + Visible = False + end + end + inherited tbxMenu: TTBXToolbar + inherited TBXSubmenuItem1: TTBXSubmenuItem + Visible = False + end + end + end + object pgPaginas: TPageControl [2] + Left = 0 + Top = 76 + Width = 666 + Height = 387 + ActivePage = pagGeneral + Align = alClient + TabOrder = 2 + object pagGeneral: TTabSheet + Caption = 'General' + end + end + inherited EditorActionList: TActionList + Top = 112 + inherited actEliminar: TAction + ShortCut = 0 + end + inherited actPrevisualizar: TAction + OnExecute = actPrevisualizarExecute + end + inherited actImprimir: TAction + OnExecute = actImprimirExecute + end + end + inherited dsDataTable: TDADataSource + Left = 48 + Top = 112 + end +end diff --git a/Base/uEditorDBItem.pas b/Base/uEditorDBItem.pas new file mode 100644 index 0000000..5ea6b1c --- /dev/null +++ b/Base/uEditorDBItem.pas @@ -0,0 +1,91 @@ +unit uEditorDBItem; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorItem, ImgList, PngImageList, StdActns, ActnList, TBX, + TB2Item, TB2Dock, TB2Toolbar, ComCtrls, JvExControls, JvComponent, + JvNavigationPane, DB, uDADataTable, uEditorDBBase, JvFormAutoSize, + StdCtrls, uDAScriptingProvider, uDACDSDataTable, AppEvnts, uCustomView, + uViewBase, JvAppStorage, JvAppRegistryStorage, + JvFormPlacement, pngimage, ExtCtrls, dxLayoutLookAndFeels, + JvComponentBase; + +type + IEditorDBItem = interface(IEditorDBBase) + ['{497AE4CE-D061-4F75-A29A-320F8565FF54}'] + end; + + TfEditorDBItem = class(TfEditorDBBase, IEditorDBItem) + pgPaginas: TPageControl; + pagGeneral: TTabSheet; + procedure actEliminarExecute(Sender: TObject); + procedure actPrevisualizarExecute(Sender: TObject); + procedure actImprimirExecute(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + fEditorDBItem: TfEditorDBItem; + +implementation + +uses uBizInformesBase; + +{$R *.dfm} + +procedure TfEditorDBItem.actEliminarExecute(Sender: TObject); +begin + inherited; + actCerrar.Execute; +end; + +procedure TfEditorDBItem.actPrevisualizarExecute(Sender: TObject); +var + Respuesta: Integer; + aInf : IBizInformesAware; +begin + inherited; + if Modified then + begin + if (Application.MessageBox('Se han producido cambios y no se puede previsualizar hasta que no se guarden.' + #10#13 + + '¿Desea guardarlos ahora?', 'Atención', MB_YESNO) = IDYES) then + actGuardar.Execute + else begin + Application.MessageBox('Recuerde guardar los cambios si quiere previsualizar o imprimir.', 'FactuGES', MB_OK); + Exit; + end; + end; + + if Assigned(dsDataTable.DataTable) and + Supports(dsDataTable.DataTable, IBizInformesAware, aInf) then + aInf.Preview; +end; + +procedure TfEditorDBItem.actImprimirExecute(Sender: TObject); +var + Respuesta: Integer; + aInf : IBizInformesAware; +begin + inherited; + if Modified then + begin + if (Application.MessageBox('Se han producido cambios y no se puede imprimir hasta que no se guarden.' + #10#13 + + '¿Desea guardarlos ahora?', 'Atención', MB_YESNO) = IDYES) then + actGuardar.Execute + else begin + Application.MessageBox('Recuerde guardar los cambios si quiere previsualizar o imprimir.', 'FactuGES', MB_OK); + Exit; + end; + end; + + if Assigned(dsDataTable.DataTable) and + Supports(dsDataTable.DataTable, IBizInformesAware, aInf) then + aInf.Print; +end; + +end. diff --git a/Base/uEditorGrid.ddp b/Base/uEditorGrid.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uEditorGrid.ddp differ diff --git a/Base/uEditorGrid.dfm b/Base/uEditorGrid.dfm new file mode 100644 index 0000000..6ba1027 --- /dev/null +++ b/Base/uEditorGrid.dfm @@ -0,0 +1,1454 @@ +inherited fEditorGrid: TfEditorGrid + Left = 468 + Top = 365 + Width = 719 + Height = 489 + Caption = 'fEditorGrid' + PixelsPerInch = 96 + TextHeight = 13 + inherited JvNavPanelHeader: TJvNavPanelHeader + Width = 711 + inherited Image1: TImage + Left = 684 + end + end + inherited TBXDock: TTBXDock + Width = 711 + inherited tbxMain: TTBXToolbar + DefaultDock = TBXDock + inherited TBXItem29: TTBXItem + Visible = False + end + inherited TBXItem27: TTBXItem + Visible = False + end + object TBXSeparatorItem14: TTBXSeparatorItem [6] + end + object TBXItem33: TTBXItem [7] + Action = actDuplicar + DisplayMode = nbdmImageAndText + end + inherited TBXItem26: TTBXItem + Visible = False + end + inherited TBXItem25: TTBXItem + Visible = False + end + inherited TBXItem28: TTBXItem + Visible = False + end + end + inherited tbxMenu: TTBXToolbar + Visible = False + inherited TBXSubmenuItem4: TTBXSubmenuItem + object TBXItem34: TTBXItem [7] + Action = actDuplicar + end + object TBXSeparatorItem15: TTBXSeparatorItem [8] + end + end + end + object tbxFiltro: TTBXToolbar + Left = 442 + Top = 23 + Align = alRight + CloseButton = False + DefaultDock = TBXDock + DockMode = dmCannotFloatOrChangeDocks + DockPos = 392 + DockRow = 1 + DragHandleStyle = dhNone + Images = SmallImages + ParentShowHint = False + Resizable = False + ShowHint = True + ShrinkMode = tbsmNone + TabOrder = 2 + object TBXLabelItem1: TTBXLabelItem + Caption = 'Filtrar:' + end + object tbxEditFiltro: TTBXEditItem + EditWidth = 150 + ImageIndex = 10 + EditorFontSettings.Italic = tsTrue + ExtendedAccept = True + Images = SmallImages + ShowImage = True + OnChange = tbxEditFiltroChange + end + object TBXItem7: TTBXItem + Action = actQuitarFiltro + Images = SmallImages + end + end + end + inherited StatusBar: TStatusBar + Top = 436 + Width = 711 + end + inline frViewBarraSeleccion: TfrViewBarraSeleccion [3] + Left = 0 + Top = 398 + Width = 711 + Height = 38 + Align = alBottom + AutoScroll = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + TabOrder = 3 + Visible = False + ReadOnly = False + inherited pnlSeleccion: TPanel + Width = 711 + inherited bSeleccionar: TButton + Left = 536 + end + inherited bCancelar: TButton + Left = 615 + end + end + end + inherited EditorActionList: TActionList [4] + Left = 72 + Top = 120 + inherited actModificar: TAction + OnExecute = actModificarExecute + end + inherited actGuardarCerrar: TAction + Enabled = False + end + inherited actGuardar: TAction + Enabled = False + end + inherited actConfPagina: TAction + OnExecute = actConfPaginaExecute + end + inherited actPrevisualizar: TAction + OnExecute = actPrevisualizarExecute + end + inherited actImprimir: TAction + OnExecute = actImprimirExecute + end + inherited actCerrar: TAction + Enabled = False + end + inherited actAnterior: TAction + Enabled = False + end + inherited actSiguiente: TAction + Enabled = False + end + inherited actCancelarCambios: TAction + Enabled = False + end + object actQuitarFiltro: TAction + Category = 'Buscar' + Caption = 'Quitar filtro y ver todo' + ImageIndex = 19 + OnExecute = actQuitarFiltroExecute + end + object actDuplicar: TAction + Category = 'Archivo' + Caption = 'Duplicar' + ImageIndex = 20 + OnExecute = actDuplicarExecute + OnUpdate = actDuplicarUpdate + end + end + inherited SmallImages: TPngImageList [5] + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000001754944415478DA6364C001D6ECBE900CA4E640B9 + 2921AE0673B1A963C4A739C8598FE1DB8FDF0C33966C67505054C06A08232ECD + 3EF6BA0C250B7F315C7FF88F6179E15F86456BF76135841197CD79737F324C4E + E1008BF345BC63B833959561F13A4C4318D13507BBE833E4CEF9C160ACC1C290 + 60C30296734D5FCD70F2A333564318B1D90CD20C02D72E9C04D33C92A60CAFDF + FF6358B8E71B86218CE87E866986D90E738186A92FC397EF0C0C6B8FA21A0232 + E03FBACD5FBEFF07E30A3F36B801323ABE0C3F7FFF67F8FE938161EFC5EF7043 + C00678586B32F8B7FD61887167836BFEF59B81A12E186180A8BA0F58F3E76FFF + 194EDDFE0136A07DDA1AB001C90FEE3F98131BE4C4A092FD9BA12A8A07AC19E4 + 67582C800CE051F0C1D06C636994020F44902171214E0CCA99BF19E25DB8E09A + 91C301161330CDE040448E46649764D85C473160C6114D0CCD581312B221CEFA + 9C589D8D3521E13204047069C69B99608680002ECD380D4036E4C98B77383583 + 000005100EB8572466A60000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001074944415478DA + 63FCFFFF3F032580912A06303232E2543079D1766F201505C520B02C37CE331A + C400EBC5670054F3960057330631617E0690B2F357EF336CDA7786A1B5289211 + AF01C89A254505183E7FFDC1F0F5DB0F06311101A021F7184E5DBA733927D643 + 0FAB01E89ADF7EF802D6FCF5FB4F866F406CA6AFC21095DBC6B06C7215238601 + C4689EB27807C3B153E7300D2056F38B371F18B62EDA79EDFCF9F9DA700348D4 + CC70E1C2024420022548D68C128D40C906A0E67A5234631860A6A752AF202346 + B466740396C2521AD020B0A49EA622C39C95BB716AC64889C0405C0A541C2501 + 4C2830804F33D6A40C8A09A0A62DF7EEDD03F3AF1FB98D372301A39191E2DC08 + 0029AC32F01825AACD0000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001514944415478DA + 635CB5E3DC7F062C20CCC388918108C0083220D4DD104570F5CEF30CEDFDB319 + CEEF9C4ED0109C06D818AB3278C7941134046E40CBAA0760819A3005B80B6000 + 9F21182EF8F1F30F10FF86E05F7F1882926B883300E60264C0C1805D5F69B802 + 238601E836FF04E2CDA7BF339484C9A368EE59F59261D9C1BB0CE7A75933C20D + F0B4D56698B0E5195617601AF09021DA4998C1297307C38D35A18C60031CCDD4 + C036FF84DAFCE7EF3F307DF0FA7FB001112D57C09A57D4E8800D98BBFA346A18 + 58EA2BC235C39C0FC2671EB0A2B8E0DBCF7F0C5F7FFE05E27F60B65DE26C8801 + 7316ADC11A58AEFE69282E4009C8284506F7F4B90C781349F7CA07FF4106A0DB + FCFD171003E980BCF9840D48F5916148EFBB8E2197EC2BCB1059B290B001512E + 92609BC1B602F1EF3FFFC1F437204EAE5A4CD8007F5B71B8E66F480681407AED + 12C20674CCDE884F0903000B1A00979E81F9710000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000E9C00000E9C01079453DD000002574944415478DA + 63FCFFFF3F03258011D9004646468696696B17FFFECAD0DE581A7C0D596155CF + 0AF77F7FFFD975944755A3E8413760EA929DAF393938D62785D8A7C1C48BBB17 + 711BABAB5C7AF9F6FDDFC2446F354206BC75B6D4E35ABCFE90536B49F87190F8 + E4853B2779DA1BE46EDE7FE62ED00015BC06F4CFDBBA24CACF26FAD0A99B5B42 + BDCC7C6BFA563B057B986FFDFDE72FC7D20D072B26D62574E235A0A26DA999B0 + 98E0F2607713F9251B8E85692A4B5698E9AB9AAEDA7EE2DEBB571F3DDAAB226F + E33500044A3B979507B898B6BF78F3FEA3B1B612FF992BF7FF1F3975336E425D + CC52903C4103EAEBEB5998450D8FAA2A889BC94888306CD977664D675964284C + 1D0103EA99F8DDF50C8CD439E3FFFE67CB7DFFE9DB1F7E3E9EC637DF5977DC98 + B3E73C0343E33F9C0670B8AC555292175BC8F6FF9BEEDF6FEF995E7DF8F95941 + 55EDE5AB17AFBEFCFAC7C2F1ECC5FBEF0C4C4C89FF0F47DDC36A8056F2A103FF + DEDEE465FBFFB5F1D577EECB8C8CFFF72AAA6A7CFFF4F842CED54D7907184CE7 + 4631B0B227FC3F1AE38AD5008D981DDFD9BEDE48BABCA1703983DE226E09891F + D754B4756F7DBC7FBAEFF286BCED0C32BD9C0CB222B7FF1F8B93C16A805ED2EE + D74CEFAF445FDC50B48BC172858E34DFFB6582B2DAFB38BEDCFC7166456A0583 + CE0471063EA103FF8FC66A623540C063F55669B6E747AE3DE3E861E5E158A9C8 + FBF1D1FD6F628BF4147977FC7A79D3E3F2736E39060E9E84FF47A202B0C782ED + 627356C6FF935998FEB349737FB9FE95E975F2F32D8DDF98EC9647B1FCFF55F0 + EB1FD31FA08EC2FF87634F6235801C0000382740F0DFD997BD0000000049454E + 44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002854944415478DA + A5935D48536118C7FFAFDB8CCD557E7F34B33167F9119617A91596495D781304 + 451021A651362821B1ABA49B6EA4460961D88542055D84DD6545415992174994 + 9625CC8F9C329D9B5F3BE9CED9D9797BCEA1C932A3A0079EC3CBE13CBFE7FF7F + 9FF330CE39FE2798FAB80BA4E61559EB2551E67B07279AE8D51FA98F2CC99546 + 031A3D6E5FF329993F631D80B52227A6D7929F9BAEA459D1D73BE8DC3330D6B8 + 1AD206641414DA5A6224E1E8ECA47779660955D532EF642F1371BD74331A14FA + 9C27A4439F5D88777DAE1B65FD230D11485786B9363D65FD35C1EB4B9817427E + 9F80C335C05BD53E23B2A934132FB23662B71406C2B14698F38AF0E9EB9473E8 + E3C8655BD686D6F858A5DA3F27B04511E37E0195B5C0A00AD6003FE5259758F0 + 3AD1843C15125218CCB6AD707FF34EAC93973217041154ECF608D8770E188BD8 + 5A01A8A1DEC5F60CF4980CB0A890E8A47AFFF477EC3F037C8EBE975F006ADC37 + 60A7351E3D061DE222C522A5270047AD82DBAB27B21AC09EDA373525E9A52BCB + 7E5F4CB4822509BE80848AB3C0C09A806380EE7CA1BDC55EB4CDE17AF2984932 + 75A60CCA088739742A84CE1E49C1010730F41BA03B27CD595C517CB1FFF92B04 + E6035AF142101DCB12DA743AB413243FA468331D0F01E51780D1154057AAF148 + D92E7BE794778E8DB92634C901116FA6451CAA27214EC06802AE5227AA839ED2 + 45A0729AC6A406182DD9329C10A7B7F57D18D63A93DF99D92076905F4FB4DF56 + A08C20ED9476027CD1209C7BD9FBDC947BC1C0E2C9596A4B003E27E2F8E9301E + AEB507B700334968A6631D019C759C5F627780822413BA194312CDFB41958C13 + 7FDB4052739000430ECEDD913F313B568F9B8B326AC8F7CCBFAEB27A073F0058 + 5538F0EAB25B380000000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001934944415478DA + 6364C002662430FC47E6672C606064C001C0122726A06AB870818121A1632A98 + 5D169DCD10E58B90B32840358C11A4D920622A5C604145365833482308D4F5E6 + 3134154F62A8EE4805F35B2B66334CDA8B3004C50098E62F2F6E823581347F7F + FB80E1E58DBD0C8BD67D6588F6656258BAF91F7E03AE3D66C009081A800CD61F + B161C0072243F419711AF0F7F777864D275D192282F5B06A5EB1F23C43D7FCD9 + 0CE7774E67C43000A41984B79EF3C36AC08F9F7F18366CB8CC10116EC860E491 + 85EA0298E6BFBFBE33ECB8120E36C071E64DB8E6ED09CA40037E33ECD87E03EC + 02142F206BFEF7FB07C3AE9BF1282E00D90CD20CC6BFFE30EC3B719561CAECE5 + 100374837B503483E8BDF733305C000333DC04198E9EBB893040CBAF1945F3DF + 3FDF190E3C2E041B806EF34F283E73E52EC200758F2A865B3B3A506CB927739E + C1C75383C177F17D0C17745971325CBEF51062004820CF19352F808065E64506 + 172748A0C16CFDF3F71F9806B9E4F683A70803B081E56B2EFEB7B19663D875F4 + 32CEC444D080AED9331808010085EE16005695A1DA0000000049454E44AE4260 + 82} + Name = 'PngImage6' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000002164944415478DA95D35F4853511CC0F1EFD491DD + D9587F2C83AC8C328DFE4949908BC0AC142A147BC8077B88A01EECA5E718F958 + 410486C384B50A1F7A991023CBEC0F594F81E5D4C211E130D7D4DDCDA15B5EEF + DD5DD74B1B8EA9D90FCEC3EFC0EFC3EF9CF33B06FE46CBE3AE042B886B176B0C + 0B73C342A0A9B17AD9E2FB4F5EE0E878C6E79776C37F03AAAAD2DAD1CDDEDD3B + B96EBB9B425604CC17CB8A4AFBD31EEA6BAC0CFF08A4907F02C962598EE374BD + D58F908C2581442241603C8CCBFD89D86C9C9C9C1C0A365A282DDE446FDF37E6 + AB9277B128F02B10C6DDF385CD074B10D6593019211E9CC2EF1DA5A0C0821895 + 68BE6D5F1A6873BEA6D07A0879951945CD626B1E6C372978BD7EBC5F4710D608 + DC6A712C0EC84A9C7B6DDDECAF3B459E315B3B3B685B9835448DCD30F4BE0FC1 + 94CB9D56672670A5E1A47E590F1EBDE374C3091D88CD4120063359902B4719F9 + D88F201835E0612670E97CA5DE41578F870A6B296BD79B096BC0B8B6C4DF3252 + 4024E81960832071B3FD7926D0587B5C7F32DFE8243FC74214EDD906AB4D4C29 + 1011230487BC1419BFB32BE8E06CE7BE4CE0C299637A07B3928CCF37816F4CD4 + F2040943365234823134C8E1FC094A8A8D4C0DF6B2E5EA8774A0BEFAA80E283A + A21012A791E6E6B4618249FF08AFEC97292B2CA7B64221BFAC9C90E74DFA289F + AB3A42FFB07FD90FE5B255A510B754379D062C1CD3E5E240AC931D9537B03537 + 19FE00839434866373C4BA0000000049454E44AE426082} + Name = 'PngImage7' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000001724944415478DA6364A0103062135CB1E2C26E20 + E5824F63448401235603809AA381D412374F5506413E2EB0D89FBFFF187EFFF9 + 0BC62F3EFD6728A999C0B0795E15A60150CD1540CD3A7B4FDCC5B0D5D94299E1 + CAD3BF0CDD3D53F280064CC666C06EA066176C36FF05B25F7F6544B11DC50098 + D3C3C3F519D6ECBA8C61BBBDA922C38D17FF41B6C384B6020DF261846AFE0FA4 + AE809C0EB21DDD6610FFCF9F7F0CE91553194CF49518A4558D1836AE59037609 + 23C8E6AB4F2E2C2136DAE4B5AC186E9CD9C570F3C1278801B53D0BFE3715C7E3 + D4F0E5C75F86CFDF8118487FF9F18F61C3BA350C12CA260C3B366F4218408CCD + 17AE3D03D3065A520CEC42AA0C278F1CC4EF02749BBF82F0CFBF0CC7F66E64F8 + C92AC970FDE259DC06A06BAE3DEFC390ABB49EE1FEB5530CCF9F3F6778FA919D + E1F5D3FBD80DC066F3AC743D8680EEB30CAFEE9E61D8BEF72C4CA90CD080A770 + 03A62FDB45542C400D006B062724DFA4366920FD84D86844D68C9212C905001F + 16FA1194E3DBC30000000049454E44AE426082} + Name = 'PngImage8' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD2520000015F4944415478DA6364A000FC3060F8CF884D62C5 + 8A0BBB81940BB258E7FC99286A8EBF9CCEC06EE4C5C088457334905AE2E6A9CA + 20C8C70516FBF3F71F8399770E44D3F9FF0C3F0D19219AE76D6364C4A2B902A8 + 5967EF89BB2806B7F54D6738E7C4C1F073793F58B3D1537986F33BA76318B01B + A8D905D9E6DF7FFE82B1437011C3B91DD31818BA8AC07246FB7EA01A00737A78 + B83EC39A5D9731C205E40274003700A8F93F90BA02723AC876649BFF02D920FE + 9F3FFF18D22BA63298E82B3148AB1A316C5CB38661F5B92A064690CD579F5C58 + 4228CAB6EC3E893D166A7B16FC6F2A8EC7A9F1CB8FBF0C9FBFFF65F08E2CC01E + 0B20038849342017608D055C2E80D9FC19487FF9F18F2125B3147B2C6033005D + 73ED791F86E7B334B1C702BA01E89ABF02F1AC743D8680EEB30CAFEE9E61D8BE + F72C4CA9CCE679554FE1064C5FB68B98A0801900D60C6230FA26B54903E92744 + E946B219C661244123560000C9AFE6B31530CB2E0000000049454E44AE426082} + Name = 'PngImage9' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000016A4944415478DA + 63FCFFFF3F03082CDD7212C22000627C2D18616C905E466403A27DCCF16A06AA + 61E89DB290E1FCCEE98C241BF0EFDF3F86E5DB4E33488B093314D5F5810D21DA + 0090E6DF7FFE31ACD97596C1C9429BE1E6BD176043CEED98C688D3804D0F0E30 + F45E6A02B37779EC62E05CC0C6B058EA38D80B3080D30090E6805D4E182E7911 + FC91E1C4E5C70C8F1E3F6298B774137603609AFFA4FC013B1B64738BB13743CD + D9AD0C8FFDDF81C5B6EC3B85DB00A6594C289A91C13DEF3740F1BF0C3B0F9DC5 + 6D0048C1EFDF7F21F49F7F50FA2FC31F181F2877E0E445EC068479988015F02C + E640B1F98EE72BB066CDDD120C676D1E311C3D7B05BB0181CE8660DB049773C3 + FD8DAC3957BB80219A379FE1D4C5EBD80DF0B1D7032B165BCD8B110330CD200B + CE5FBD85DD00776B1DB002E9F502609B13CF8781E50C840DE09A41165CB97907 + BB014EE69A1801060B44986610C06980ADB11AC3A63D2789C994D80D404EA6C4 + 0090010087546EF0ACB0C7920000000049454E44AE426082} + Name = 'PngImage10' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001024944415478DA + 63FCFFFF3F03258071D400064674018780D0A7823C7C09EB97CCDD8D4B535EC3 + C493AF1EDC305B3E7F1A2323BA66090111A9272F9F301CD9BE99119701110999 + FF416A0E6FDB843000A4F9CFCF1F52F834C2808DA72FD8DF700348D18C6C08D8 + 004B77AF69F292F299308987CF1F4E979256DEB076DEE45D207E7052AEDBB3A7 + 770390D58000DC0B20FFCC98D0CE70E1053FC3DBBF3F191E7F66603831A310C5 + B6E533A6311C7CC080228F624046C534B82408AC690C856B9611976140970719 + 20ACA0CB30A53E13624068693F5CF2F2E3F70C37E7A5C163019BFCD7AD4D0C2B + 164C07A72146981F999998C17EFCFBEF2FD630C0260F3660C0933200BCB3BCE1 + CDA578040000000049454E44AE426082} + Name = 'PngImage11' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001C04944415478DA + 63FCFFFF3F0325801164C0C20D47A381F41292353332C6800D58B0FEC8FF8440 + 1BA234FDF9FB8FE1F79FBF60EC105CC4806200A3E14C86FFE7D3C13408E0627F + 3C12CF70ECEC0D86AAB659D80D4007FF806AFEFC41D80CC2672FDFC1340019C8 + 7A2C6178F2F22B98ADAE20C0D09869CCE06E29CD2068B788E1D9AE48868BD7EF + 117601C8E673D7DF309846AF6310E66767B8BE3E8441CC6929C3C36D610CD76E + 3FC46DC0CBB7DF19EA679C613870E619C3C3679F197EFCFA0B36106433C8F97F + 80F8D6FD27B8BD1053BD8F61E9B6DB0C0B9B1C181C4C2518E43D5780C54136CB + 7BAD62B8B12E90E1FEE367D85DF0F75C1A836FDE0E866D471E315C5A15CCF0F1 + CB4F06DBA42D6003EE6E0A6650F65BCB7061B90FC3F357AFB11BF0F3540AC3B1 + 8B2F18A2ABF6313C7BFD8DC1C14412E895E76003AEAEF6077B4123528661FFC4 + F3A806C4F859C1A30839CAE0ECDF10BE41E416860F7F32188E4F453320DCCB9C + 81CB621ED8A6177BA218245C9681D9B7360431A805AC03B37F306430FCF8C3C0 + F0E61B0483D8700382DC4CF0DAFC1B498EDD5785E1FD4A3417F83919319CBA78 + 8BA8FCF0DFCF908171139201A0DC3871C6529273637E46740C00F128724C706C + 80060000000049454E44AE426082} + Name = 'PngImage12' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000E9C00000E9C01079453DD000002324944415478DA + 63FCFFFF3F03258011640023232386C4922BFF0D9818FFC57EFFFE57FDEFBFFF + CC8CFF19BEF0F1B36D5C73E9EAAAD5613ABF60166318505FFF9F4939F077F98B + 97BF6BEFDCFEC6F9EDDB3F86BF7F810A9918192424D9FEF3F1B32FBFFA93236E + 5528C35FB8018D9B7E2C6DF0E38859759581F5E7BF3FD36EDEF89AF4E51B03E3 + B72F7FC0867EF8F897E1EF3F06867F40ACA1C9F96FE392D5BA5737265D831BE0 + 58F9F0BF83A5F83245796696CB973E87FEF9C70CD6FCE2D92B86E78F6EFCFCF7 + EFEF17360E5E4151590326666626067D7DDE65F57E1CD12806288BB3FF676567 + 66E0E062036B7EFEF425C39307576E8A2A19B9EE6A557DA217B2A88E9B5FBA41 + 405C87C1DC9CEF01D0004514031444391804843918409ADFBFFFCE70E7EA91FB + 9F3FF06BDED9E1F513A450357481341FBBD03D611973362B4B2C067CF8C1C060 + A020C0F0E3FB4F86CF1FDEBCBE7FFD84C3B54DC9D760812B13DACB29CAAAF84A + 58C69AC7C61A8B01CF9FFF61E014646190E365627870FD40C3A535718DC8D1AA + E2B1988F5788E7B998823597A5392FA6010C1F1EC0157FF8F081E1DF9F4F0D1C + EC6AFDA7965A7C02899924ED550746C555793523665D1D2ED440C49690D08149 + D2A9764E3ED90A037DEEFF3696BC7161EA0C4B8836402FF6A41A37AFF0690E2E + 7E3E7B5B9E65C08494084C48BF8832402BF40A0F8F30DB3E0E2E4153277B9E65 + 0DFE9C60A7E34CCA280098ACCDDF3C5A2925C913ACAFCBB51CA6997803ECF7B3 + 301C74FC834D0AC5004A000026261CF09ABF155A0000000049454E44AE426082} + Name = 'PngImage13' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002E64944415478DA + 8D936B4893511CC6FF67DA74BAC9BC9478C9357338CC4B0EBC1709F929A25414 + A13E48082D8CFC20267E1B925DD004B3120C75919AA99B5DADD485E56DA2791D + 739ABA2D9DB7A953379D6EEF5EDFDE14859C810F3C5F0ECFF33BFFF38783E0FF + 425902A13B668448DCB4C5B658709C40D8F0A4563120A97FB1B61F3AAC291008 + EDB1630ED7ECECA97C6F7F6FAEABB72BCDB46902B54CAD5BD4CCF7AAC68772C5 + 6F8A06C8286E05484EAEB3F10BB6A49FE2B2F2C2628318E0C440063300410050 + 910596D4B344F7BBB63169FBA7B4D6E65AA915205320E47A9EF4ECB89A7CCE85 + CDA021950141E2BD2E9049645029E683BB3301EB2AE5F657E15B4955457EAA15 + 205B5095CD8BE33D0C8BE0523C1002B50120E5C12EE03509D8A60078386EC1B7 + F2066DA3A89C8FFE1DBF9076CADFADFA4A467C829E70829C82AE43B79B97150D + B3522956F3F4C9B3030001DD87C3AE49C84CBCBC646640FCA5D29DF3A0B8A09D + 09F62469E1C3A4B4D7F2EAF1A3DA834FA064DC2D2D8E4DB9984E63F922ED2A02 + 161DE04EE1EE13D4ED7CB090CB5CD9C6E1439978A3FE655189D50E52D37263CE + 4486374725C5D2168DF6C88E2CE414ED02942400030246C6A7087149C5688DF0 + 7EC63EE0F38DB3C79974A8ECB70B7459649E0F64F17854767800C588D390830D + 02172A19226F5E58D211DFEB9AF40DD5CFCB46E5DD0568AFECC6C43FFA470747 + 2CEBF420D2048072C57ED3CB2F846005F9D19CBD4E80C96882B9F16942D1DBA7 + FBD15C2B960F77159355056AB919E0E3E24C17F9C58487E1737218966D429386 + 01F235CB8589854D87D3DCD0448613938D61669B89B1C1099552DEB9AA9B9790 + E559D204FA99C5EBF78D0A0FB5D5ABA0BF6F0D7AA66CA1757CC4B862D808E9D6 + 9826C990236927D236A4B748AF92C6F6FF82243F890861AE817CC8001D6A0A74 + 2A478D1AFD7A926CC6FC058E20743BEDFA2F1ECC70B45A0CDA2614CB5AFDFAAD + BE19B3E828E51D009FCFE710C6F546ED680F473DFF3B7E70DAFCFEA8E5BFFA03 + 503A4EA60D6AAC070000000049454E44AE426082} + Name = 'PngImage14' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002E44944415478DA + 8D936B48D35118C6DFB379D9D4C9BC94A8CB399B38CC4B0E9C9A45427D8C5251 + 82FA2021B430F08398F4258650145A615642A12E4A31AF6565795958A69B685E + C7BCB4B92D9D3AA74E7771BAFD37FFFDA728E40A7CE0FDF6FC9E73DE877310FC + 5FA850200CC22C90ECB06EB1EC76870347D8F88C6E7244D4F8D2B06FFA172910 + 082998BBD7154F8A079F11C5E0043002A8D64D2BA8A56AFDB2463BA8928F1537 + BF2D1B21AC0E9780ECEC06323BCE9E17CE61DE4D4C8BA5812F0D996C00380EE0 + 81ECB0A25EC0FBDFF74C4B7E7CCAEDEEAC97B8041408849C906321BD97B24FFB + B36854A43221106B01ECCE007780203F1CCC2AE576BBF09DA8A6BA24C725A048 + 5053C43DCFBD9F98C4210523046A13C0D0320099BCBBF0360920D87B0BBE56B5 + E8DA9AAAF8E8EFEB3FA2864705D65ECC4FCF30E2BE70BB54ECD28F542485D676 + 3E2C482458DDD327CF0E04087CC222597519059917566C34B8F358BC031C94A8 + 8B0F339241FBEB870FEA0FAE40CABFF5A23CEDF2B93C2A3302E9D611307D0002 + 29006EC4D529A4DD2ED6B61DF0A1B279A3F15559854B0739B9C5A92792799D29 + 5969D4650B05791200C31B804A74E046B831C061423E8B3757544FD509EFE5EF + 077CBE76F208DD07DE0C7BC6F82FD3CFC430B95C0F162F9A64715091171981BF + 0761224E5E5AD1E3DF1A3A8C2DB5CF2BA764FDA5680F0EA43B3E469D8A4B5AD5 + 1BA149130DCA35CA66283B1E67C6B2A97EA147C16AB1C2A27C0E9F1C1CD27FEF + AC6F968D8BCB097412755D8F0EF3F7F36962A7F2121D8B3218976E4287860632 + 83FDAC6269D3EB38272193E64B6761988DAC981E55A894B2BE75BD5644C00BC4 + E0E867217738228597E06654C1F090010666DDA05B3E6159336DC4F76BAC3384 + 8968007C8971BE842D62D6C159C5DE5F109564E1F17403C8C64CD0AB26419F72 + CAA2319AB3A4F3B62F7008A19BB9577F71613E52A7C3A04731B9AA339A6F0CCD + DB9A0E03EF04F0F9FC48DC626ED34D0D44AAB5BFD347E76CAD87859DFA0386D8 + 3FA68502A9830000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A0000032A4944415478DA + 6D937B4814411CC77FB3B7777A5E7276969AA4648A20A5592A4585FE654122BD + 0CAA3FE2841EA45946697591BD8DB27748A2BDA0A43FA2420C893252D2A244B4 + 7C24495986AFBC3BDDDBDB9DDDBDDDDB663714B366F9B2BB33DFCF777E3BB383 + E0DF66235A19342370912538D0CAB2825BF00A6DA4EF2D1133D5A8AA2AA029EF + 4126B3292B2E21BA70697A5262626A9C393422040D0FBAFCAD6F3BF187C68ED6 + 9F5F472E2992524FBCE2F400735884ED40E6BAE58539F6CCD0B9F323009111C5 + EF075191600C7BA0ABEBAB5AF7A071A4ADBEE71CE7C615849126032823B52D77 + EFBAEBF6BDEBAD164B20E941A092EBF89ED75050960C6ECC805B6060D8E984E7 + 379B9C2D8F3AB71353CD4440CC8ACCE49725D7F2626DB3AC60A028C2535092FF + 4A2FCD5E1A0F2E3C062E9E8171D1034303A3F0E24CF3A7910EF72A1230826813 + BDAFF87CEE85ACCD19269AA2C16030C0093273EDC372C8DE92FFD7EACEDDE902 + 06B3D0F1A41777DEED2D5015F5369A1335BBB6ACFA4056745C24A22903941636 + EBF044C38204BCE003FBEE62B0DAFBC1237A61B8C7A9B69DE979ECF3F836A1A4 + 65F15F4EDD2A880BB606A12B45AD93B02C2BE023D2604D79FB8F02B5F533B022 + 078C9B55BBCF7EEBC43F8424B4243DE19BA37C678CC962844A47B71E204F8212 + 09F1EBF783474E02BBB105BC1207DE711EFACA06BE8B7D520C8A8A0D6F70DCD9 + 951E343B1061598067A54EA8AEBAA4435A0826D22A3976B21406B31B80F76160 + FB3975E8E2E84785F12F460166E3E91D17361D8E5D1E45F332062C8BD07EC300 + D7CA4EC1BEA292BF16B177751D6893304D5E9979E0AD5265354FDBC694B4EC05 + 7599FB57844906093862D04CCEBB913AE4D9F01EBC3E1EBC22AF87635680F1FB + EC4FB95DC922DBD8A105A0008BF1444641DAA1A88C8800CE8F8123656AA59A1F + A740FF9A7AF22CE8B0208AC035F258A8911C20C3D5A9BF72D8CC79C197E3D7CE + CBB12D0D09106862D4A13F9F343133F70E63F18D740F7E818330E3D30FD31CA3 + D5986F5B68B55B532DE128923248269F0EF2DF05856FC58372AF52013C5412AF + EB7FA7516B34512232C2063A944E44C1C82C7B14CEEFF2B793929F92B16E2265 + EA71FE0D330BBCF031BDB9A60000000049454E44AE426082} + Name = 'PngImage15' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A0000031C4944415478DA + 6D536B481451143E779D5D5D37D95AD354523445905AB32C0A0DFD653F92252B + 8BFA130A3D40F385D1C3B09766A5652548D23B34FA1115624894A0F6502845CB + 079298A5F8CA75737677E6CECCCEA3BB532DAB75868F3B73EFF77DE7CCBDF720 + F8374C045BFC97F8AD3504F8191D0ECEC639B91E32D741407B13154501E4F5ED + AFD3EBD263E2220A37A5C49BCD1B62F481214BD1F4E49CDCDDD18F3FB4F7758F + 8FCC5C9504A98570F9C506FAE01053715A46526166565AE0CA552180C88A24CB + C04B02FCC476181818519A1BDA677A5A862E32365C473482C740A3D5ECCFCECF + A8C9CADF613418FCC80C02853C678EB4425E5502D8300D368E8669AB155EDE7C + 67FDF8A4FF002135FE35884A4E4B787DFA464EB469B9117C341AA2D78008329C + CF6D55CBB39406C11C4BC33C6F87A989597855FEFEF34C9F6D2B319841948E2A + 387639BB327D6FAA8ED2505056F066C18E363DAE05CBBE5C30E7BBE02767071A + 3BA0EFD930EEBF3F9CA748CA5D141A1ED454F5A8383D22260C511A1FA8287CAF + 8ABC037302ECC92E0263D618D879274C0F59959EF2A1A72EBB6B378ADF1CFBE5 + FC9DBC9800A33F2201D547BB3C06A228818B80E55C2A728A4E01B3AB0B689B43 + 19BCF0B51F7FE7E2D1FA94B8AF25B587A274062DD971173C2C1D560D448F5020 + 26B23A1E3D790EA62C6DE09C6761B46AE21B3F2A44A1F0E8156D25F70EA7F807 + F9212C72F0A2C20ACFEB6B3C62F788094E9496C12411B32E0C8E314699BA32FB + 49A2E575C857AF2D3B58B9FB44745238C58A183AAF890BFEFF5259A947CC082C + B893D0EF9C22DDE0BCAD884A8EFB1813375A5637A71525070B3E023084E02631 + 24136E88564D262DADE0E4DD621EB08383F97AC7B8D82BA59363EC731B205F83 + F66C6ADEC6E3E1A921BE8C8C55B1BB54FDD34418DBD642DE3955CCF13C30ED2C + E61A85127251AE7B5FE5E0659101D5B1DB23334D9B96FA721421AA22FC3BEB9F + CC4C27C6FC5BE101FC8012A2995FDC4CA15AA336D7B4C69865DC605881C2343E + 82CEA50AD96F9CC476E3497158AA03166E11EEDCFFBAD11D1481196961271548 + 995100D28B768991E7E45E52F273B236482079B7F32FB7E1BAF0E8F71C040000 + 000049454E44AE426082} + Name = 'PngImage16' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000019E4944415478DA + 63FCFFFF3F4341F1F9FF0C6402469801BEFE4A0C0B16DD60583CC71CABC21F3F + FF327CFFF90748FF6128ABBCC2A0A5CEC0B072C752E20C40D6FCE3D71F86BAFA + 1B0CEB963B31A85A241336005DF38FDF7F18DA5AEE3098997032CC5D3D07BF01 + D834FFFCF597A1B7EB3E612FE0D20CC253263C625092FFC5B0F1C06AEC06E0D3 + 0CE2CF99F68C4152EC0BC3AE931B310D983EC908A119AA11A409660008CC9FF9 + 9C4180F72DC3E14B3B500D00019021840048F3F7EF3F19CEDCDE8F6AC09F3F40 + DB7EFC024B82E81FDF816C280D11FFC5F0F9D337B03C08DF7C79126180A7B73C + 86E6CF9FBF43C460867DFB09D70C32ECD1A7F308036CEC44C18A976E9A82D7F9 + 7CFF8DC19A4186BCFE7D0D618089193FD896B5BB67311CDA309341504A87E1C9 + ED930CEF3FFD60F8F0F927C3FD671F1956AD59CDF0EC96105833C8BBEFFFDF44 + 18A0A3CB0976EAB6C30B182E1CDDCBA06768C8B073FD02B8CDF79F7E64E89C34 + 87E1EE456EB06610403140599519EC827D6796312447F833F072B130B0B0B2A1 + 387FF5D6430C37CF72C0F9700318191919F49D72C9CAD200FAC9B5C145016BDA + 0000000049454E44AE426082} + Name = 'PngImage17' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000015D4944415478DA + 63FCFFFF3F03082CDD7212C22000627C2D1891F98CC80644FB98E3D50C54C3D0 + 3B6521C3F99DD3194936E0DFBF7F0CCBB79D6690161366B04C57058B715C6060 + 24CA0090E6DF7FFE31ACD9759621A4D68281352A97E1F7B2C90C8B2E10E10298 + E6DFBFFF325C5DC2C1F044E912C39B4B4B19984A3AB17BC171E64DACAEE860D0 + 60D0F399C2F0F2D636868587CC18A41A1A18D218F07801DD669866100E699161 + 10D5F6050726411720DB0CD35CDE369B61DED24DD80DF8FDE72FD856107D6319 + 1786E6ED7B4F311C387911BB01611E260C6E73EF80F9110C1F180C182C18C4D5 + BC5034830C3E7AF60A7603029D0D212E00FA7DEDAA2B0C2D2D210C6B6A9EA068 + 06E15317AF6337C0C75E8F2160D92330FF4E8B0B838B4B0D985D5CE907D70CC2 + E7AFDEC26E80BBB50E5CD11FA84B60E181C0FF18AEDCBC83DD0027734D829A41 + 00A701B6C66A0C9BF69C24265362370094D348012003002CB76B52FA97B19500 + 00000049454E44AE426082} + Name = 'PngImage18' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001B04944415478DA + 63FCFFFF3F03258071D400064674018780D0A7823C7C09EB97CCDD8D4B535EC3 + C493AF1EDC305BB1603A2323BA66090111A9272F9F301CD9BE99119701110999 + FF616A189135FFF9F9430A9F4618B0F1F405FB1B6E0021CDD70CF8FF0B09B0D7 + 481C78D50AE2FF7295B1FBC82F7AF0C585F30C8C96EE5ED3E425E533618A1F3E + 7F385D4A5A79C3DA79937781F8C149B96E6627F7F4F8B23ED3DD226BC2F04840 + 96A19CE72DC3E7E387182EDEF8389911E49F1913DA192EBCE06778FBF727C3E3 + CF0C0C276614A2B860F98C690C9BAA5A1854F7F530282A4830DC7FF08261E657 + 318689B76F33820DC8A89806D70C026B1A43E19A65C46518C0F25F3F3048CE28 + 6050BFBC9A61DB7F198693AE390C535AF220068496F6C3355F7EFC9EE1E6BC34 + 782CC0E47F5EBFC060D7E5C170E8BD208301F73B06BE7F1FFD642E316C6604F9 + F1D9D3BB01CC4CCCE070F8FBEF2F4618FC7D723D22F3EF93C4FB37DE301C1296 + D9E8FBE68198BED87F4BFEBF1FED084619087CB4178BB974FFD3D42B8F7E7801 + 6D390A12DB28C4BA51558ECB8F2803D6F1B2C67CFEF5C728EEE7FF62A006701A + 98C0C0202ECBCDB00A00547CD715F016991D0000000049454E44AE426082} + Name = 'PngImage19' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001034944415478DA + 636498F123988181610D032A0861C8E058CB400460041AF07F8201AA60C10520 + 91C1C1489201604DC40114D7313234DCF84FB4561868D080BB8E71F3BEBBFF7D + 1C9550E4FFFCFDC7F0E7CF5F86DF60FC0F4C83F8DF7EFC66084FAF6738BF733A + 7603D6DEFBC710B2FB378A61732CFF307888FF061B7AEDEE4B86EAD6C9B80D60 + 9CF993015B803EF0FDCAF0EBF75F863B8FDEE036006403EB9CDF0CA40628D800 + 0F3B05B01F393BEE911C9E6003ECCDA4188E9CBBCFF0F70F3B03A9010A36A0AE + B307ACB8A9BC04C5005C9A91031425B52107283ECDC8018AD500429A41F8D1F3 + F7D80D8005283ECDBF81F8F99B4FD80D8005283100AB01B0002516000097A51A + 7A68BA98860000000049454E44AE426082} + Name = 'PngImage20' + Background = clWindow + end> + Bitmap = {} + end + inherited LargeImages: TPngImageList [6] + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000774494D45000000000000000973942E000000097048597300001712 + 0000171201679FD252000003CD4944415478DA8D96ED4F53571CC7BF17EC9315 + 11864234C607C6D4E9408621F88CBA88D0C64D48EA906C3E3459F40FD077666F + 7CEB62A2912C43F0A950A12A3001AD2613810908B46869E69E8B2FBA3087F499 + B6F7B63BF7E0BDB6D2A79BDCDE73EEBDE7F339E7777EE7DC3248E1303C346BC9 + A5812FDBED767AAF51D7B9C9F4A07E22595B2655F8DED202642D5E089F3F88B6 + EE415CF8BE857F9C54C2A402DFBD651D7296C8C5FBD3336EE87F7C8206DDBDA4 + 1226197C57493E96662D9A7BF9F810BD861A4BF1EFB4136D5DFDB8D2DC9550C2 + 2482EF2161C9266111E00D470B611C015A75D7E11FD6E2F51B176EF7FC8CA696 + F812261EFCC0F60D502AA451706DB902A7EB5F60D2F32195B8068EC1E5F1C1D0 + CD4B62878B4904F7F8392C3A3922C2C361D280B438736900B6D94FA9E4D5FD5A + C8A46968E9E8C555FDFC9130EFC3856C8984A72F90E0E31C274AD767A3EBF138 + 7A2D6E64AF2D82C99A4E257FDED320C4B1E87C34881BAD3D511226D1840A70E1 + B09AE7269987FB021CBCE49C9C545089AD5B0387CB03E39351E80C0F44892008 + 278207D830BE297F27FAB6DD41E182A4A9CF0698CDF8BDA31A334E2F7E7A6A42 + F36D2395303C3C56B644F69C09BA3139C5E2ECE11C5AE727DA9791274AF8B3C3 + 64A712ABE17338C9C4F70D3D4757DF2FA0829ACF8AE2C2BD410E013F0397C329 + 0A4E9CEB059B5B4005B38110825C083EF25EDFAFFF518959AF86E5E55F387FB9 + 19CCC5EB3D61AD661F14320915683616A2B24C22C2F9DE05FD0B10F4450B9C59 + 6B299C070B23197FE5A082519D0AD6DFFEC677F56F0599194AA8CA8BB1848429 + BDE40768EABEC6EE923431C6E1800C0C1B2D9852AE8E091FB959058F771643A6 + 0974F7BF04535C716A236963D1D6A95173601B9128A1286BA4924DEB58DA98F5 + C891217347096CD29531E16E12FFC1B109DC6A7F3837C9FCAF20397144854315 + 5B91A15C88CC9DD7A864F90A2F8A729538B6F7DD662748C602B9F37AFE74D422 + C2C5348D941CAF55A19A8C840B315855758B4A64996F909FEE84C7350D960D61 + C6C7D1364D7FC829BCFF4A05A97118187901FD1DE3FC85365FA28646BD132E6F + 0005070DC0E6CD5015E6C58C390F9748D2D03F3C8E9B6DD1AB38E66627488E7E + A942D59E2D9090945DA36EA392B2FCEC28F8B31B9598251FA061B335263CEE76 + 2D48BED25462DFF66228E4527CF4C55D2AA1C75B38CD16027F3F2C49059192BA + 9A0AEC2A2B2212193ED174D2673CDCED9DCB96D6F64771E109059192DAEAFDD8 + 515A08B94C0A8EAC5A9A2D6396A4F0A48248C9113292BC651F807C1260FFE735 + F4778D49E129090449E6B25516C7948DD64919A49CD2DF96FF0126B669571175 + 682F0000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000032A4944415478DA + BD95CD4F134118877F5B0A22D84205341E30087E24021A45893131F1E2C178F1 + 2A26FE07C6C478319E8D9E8C8926EA49E217D1B328F142A24123070B2E6DB76C + 0B5DB6A585B614CA47BB1F6D7D772CDAD22DA0094C32997476F67966DE79F72D + 97CBE5B0958DDB1601C7719B7EE1D18B8F9768E8A17EB660FA2BF537D7AF5DEC + 2F5CCBD8FF22C8C3DF5FBED04D2F73882FAC40CF64114BA6E1F3F9797AC693E4 + EA7F090AE1FB9AEAD9DCD24A1ABA9E81AA6510239920C530CABB71F7E615EE9F + 0425705A6E80753D4B27C8A0AAD24A630EFE5002E25494242E26D994A01C5C55 + 7528AC6BC866B3A8B7D782B35830198A63C829E2D9BDDEFB4EE7F3DBEB0ACCE0 + AAA617C155EA29458546D2867A1B72D90CDEF67F41DFD37E3709DACB0ACCE00C + AA680CAC685A5EA4B13B38D97E00B14412BC57C2C0E0777C7A37545E50166E80 + F302E324EC37CD7775B4223EBF0861621AA35E19636322BE7D18361798C2159D + ED785550024F2C821F9F82673202419882382A221C0897DEC146F0D59014C213 + 0B4BF0D0CE9D8244F020FC3CC127C31819E92DCE2233785AF90B53F360632E43 + 1FD7098A79742E899F047691C0352621264F63C22D3178D177F0F8E540093C95 + 568BE29EA64C512834468A9EEA6CC34C7C1E6E5F082EA3BBA71097C310F9893F + F0B582D7C78EECEFE9EA6883B5C2C2629C5EB373259F9EDDC70F6226364FE020 + C6082E8E87200B0148A25C045F2B983C77FA684BE7E16696D3A9945A10EBBC48 + FB0D8FC617081CA44B0D421483181F19C7AC3C5B023715B43637D109AC58585C + C64A4A29806B043F84394AC561DE4FE560165E418668C083E6F01281A3CED6D2 + E4D8853D0D75D8595DC52ED2C89E2C8D5D14F34834C1B2E5873B00C123232147 + E017A4B2F0B582C14C8E3B5FBDA30A95560BF6EEB6A3916486A4C16187DD5603 + A77B025E2902371FC072740E9E51DFBAF0926A7AE7415FCE6677C052C1C1565D + 81C6FA5AAA2B39D45111CBD2627F7086761E424494E0F30436849B966B4362AD + AC84BDA69A5295C3F2D21295619D95E5C5E40ABC4E3F8B79FB99F68DD8ACBD7A + 728B332B153722B1F987E170181ADD81F1DCE8AECFDE4D410B1B950A6E7BFEF4 + B7B2FD02BC08E5EFAAF547E00000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000022C4944415478DA + 63FCFFFF3F032D0123CC82D53BCF13655398871123B18683CC46B120D4DD10AF + 06A01A86F6FED90CE7774E27CA12922CF80754B776D7050651415E86A2BA3EA2 + 2C21DA0290E17FFFFE63D8B0F712838DB12AC3CD7B2F88B284280BFEFDFBCFF0 + 0768F89FBF7F19B61EBC0A0E2218A08A0520D0B3EA2131410E06A5E10A704BB1 + 5AD0B2EA0186260E0646869230798286831CD2317B23C3DB3DF98C382D00F141 + 610E0E963FFF18FEFEFBC7306BEB4BA22D3051F8CD1052BD0D6C098605216E06 + D008FDCFF0FBCF5FB0E1A0C89DBBE335410B7EFDF9CF3069DD23866827617022 + 0059F266771E238A0541AEFA0CED6B1E91144440FBC186FF02FA76F69627E020 + 82010C0BFC1C7519DE7EF88661C8B203EFB15A806C388CDEB9FF2458AE6CC679 + 4C0B3C6DB5C061FF179A2C81084CAF3AFC096E4144CB159CC1D49EA60AB6E4E8 + F133D82D70B5D26098B2FD25C120C2E67264FAF4E9B3D82D70325763F8F8F907 + 8605EB8E7F815B40C87010BE78FE1C760BEC4C5418FEFD852451502A82E4E07F + 0CDBCEFE005B00323CBA0D7710954629327CFBF997E1F6B58BD82DB0355261B8 + FFF41D86C6A3B718180A43E419BEFFFA87D5C520F6CFDF08B187B72E61B760DE + 92B5E0B2071DB8FAA73164F8C912653888FDE2FE654C0B181971975BDD2B1FFC + 4FF292061B5030E5264E75715E32608BDE3DBE4ABA05316E52045DFE0B5CB430 + 307C7C4A8605614E1244190E026459106027CE70E8E869066201C916209731C4 + 02140B6805009C1383EFACA508270000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000E9C00000E9C01079453DD000004BF4944415478DA + B5D37B4C53571800F0737A5B6ECB4B2F2D2D2D2053408286870CD4C9C0B89989 + 8ACEB041F035064CEB365800D93235C0EA40FD836D380C085B44C7C30993111E + 93199411DE844029B80908586094577B81963EE8E3EE82D311662A35DB97DCE4 + 3CBE737EB9E77C07120401FECF802B010821A8ACACC7BAC453B54A95E6405AE2 + E111631B7C9E7E331102E87431313C76B1FFAFFD9E071492C0A3A109218D8AD4 + 68C68527040281E1799B9FCF2A738306439314971765244598060C3C9E1406FA + BA73EE36F6045E381DD6B672F39339393457C4BE748BFBFAE08AFBED572E9B04 + 94D7B20647645D7111FB7805E58D359DF2817DB97CBE76795E7246717450E096 + 5C7239E5C7AAA62B99C9260039F977B893B3AA9E84A8FD3603C313BA9FAA5B8F + 9C8F0B2D799A73F6AB627B77676E4750A0375BD43B0ACA6ADA7ECE4C8A085935 + 9097574B1F56C89A2342767A6356E6A0AAB6E3E1AF1DFD5B6E0822D5A1A1C588 + D71B66D7DF7B3BE0E862767BCF20A8691265647D1115BF6A6031522E9784B130 + EB9BEF066DA72C68B5C4F5D2BACF5262DF493F935E78684F804FE9C6F53CF8E7 + 040E6E57B7E04A9572DBB7C951FD26018BCDF8B4FCAC5DDB37F377F86C84AD5D + 0353F79A1FECD9ECC22B3EF8E6AB2EB25925B85327D4F70E8DC5640B22AF3E5D + 640A004EA7FCC046D7A06D216F6D73E230AD417E59BD243CF8353B081128FC43 + 0C6A9BBBEF4BF48CBD2582B085970296904B45611C1BEB225F4F67848A40E0FA + 0A178C4864A0F46EEB2C3E33BF332735BA6B79BEC9C062BD5B482D8A5998D5A1 + 0D8E6C60678B01D14331E81D94246509DE4F052BC26400B8FC821E0E5178D9D9 + 326A5BC516E6737225F0B09BEB1892500FB688E7A5A02E52FD72C08E026F3B1E + 2B92CBC676D3E9664E23A313A85EA7910368A6B1E3602C3A1D5DA0D210B14422 + BBFF6860FC3BD018DEB53AC03797C659E79062CF65C6418346AF981AD3E85438 + 9C56D3692C864A6EE1E0A3D62AA6AD0787261A210D250044BCD45A832DB93413 + A8E70544FB49AD5100DB5FF1D14667CE3732F103056A98EBA322C42D8D9ED239 + 348725AEB39CF56438FA2E5066FAB893B8C27D4C4A1D279770C9DF3E09CCE831 + 8002CF12F5C7B28C022E11BF89508DD489AA1ABE26421D12414998FEEF23BBEA + 6683EF46ED7D09BDACD756A61AE2492A05CAA539A73C3A60EB6F03338623D170 + C4D328E01E5DAF21A47D5A864EE92FACFAE49F12F42F28DA84C93CA9F67E2832 + 3FECA4C30739DD5567F067F3BEB9A90035FF9468388A1A053CF8CD7238FDFB3C + 55A7F2E92C8F1D7B329A42A1BCEE52ED8EC9AC11DE56E61A44EE3833DA13DC5D + 9E50B30CB848023124606514F03AD5D24F99E9B5D42B64FEDD5509834B837E37 + 98660CD8E7B616BF2745DD985C267D977E52745D88D49F0025254F8ED0EFFB22 + F21EFC48C0D52860B9B7347B2D9C896252E70E8B2AE24BC1CE142AD0B97ECD36 + 577DCC3197F3BB71762B8FC3CAD8C0D46D958FF59DEA2A4F2804DED99B009D71 + 0B204803D170EC43E3651A50E88F52F4D55C0B45E563B9F597900031185DF381 + BD85A262DA801F5FBAD8C0020F1EDBA61ACE8D40E50225145722C1804AE39355 + 7480A83FDAF8E287E69FCF275BE7C82EC7D152A1C650F5B529037EEE59D52C5D + 7AD166000C17C85610F94D904F2C0D341ECF79E143FBAFE32F16D672EF3D728C + 4A0000000049454E44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A0000043D4944415478DA + B5956D6C535518C7FFB7B7ED36B66E5D47D67663731BECD5B18605D8504C084B + 74982DC16468D4F881AD0305E3870550D100EABE482246712A8AA00182BA9828 + 84252006D7264AA2631B461325DD5C9ABDC0686B6F5FB7DEDEE373EF6869C736 + B6189FE4A4A7E79EFBFFF5799EFFE9E11863F83F834BFCF211506AD6A7585DFE + A99E3611BD4B1553DE7FC0DC797B64FC9C13387B883149017C0064549A528F56 + 5A2A9E31AE2CD00EDF700AB62B034DAD22EC8B117E07482B3019F61516E7ED15 + 6F8DA6BB6F79D84D1F0E5A197B8BDB06F06D7A743F5C8827B4997A684A6A804C + 031C7F8D78ED97FA9B5BB130E4531E9B2A2D655D191AA9CAE570201C61CC15C0 + D94911D60EC642DC4915DA9BCA714C97024E6E87C46BA029AE86DA5C08C79F4E + A1F7CAB566AB08DB3DC280C19CA77FBBA42877BB776C940F08018444B0DB3E1C + EE6178AD1B88CAFDE58E02797526D8561BB1324A00519A191A532174E535181A + 1A176C3FF42595EB6360836595E1AB1C9DB660CC39A1EC0F46204E06B0AF4DC2 + BBB17D0A409E1C032AD6E7E3C7223D8C31803C54E999C8B1AC85F3A6CF6BBFFC + 4BB30C3995A2B2D696E6BC2F8602691E6F50D9E79F4298CAD2DE069C4ECC320E + 90E32450BF6605BE37A623231122A9782CAF5A0DF7B44618F869F0FC9A55D94F + BB275DAA6058549EFB66C45BACC085D9654C02C8F1058F268B09DF64A5429B08 + 11A97419463304B707E1E014A669215696093F9EDB097C399701EE01C8714A83 + D60773F1499A1A7C1264D6A0864A54F397A8E65DF3396C4E801C67B4D85F9683 + 4EB50ADC5CE25351B04972CB76865716B2F0BC8083D4DFAA545C2DCEC6BA9868 + 34011096ED18C4E1768657659D2501C8519A2C9DB6AB7A6DB955F8E3376EBE12 + C959F8C238B003E85C3480C497E5E51BCE6C78AA79EBDF17CE21484D5DA80FD3 + 049916B1872047EE0B20F1ACE212F3B71B5B1EDD343E781DA3D7FA93C4C88E1E + 8941CDABA04B5C8F48F289C58BCF2BE76F1E00D55C5DBF42FF5D43D3238F07C3 + 115CEFB90831CAE222816984DD213446818954158E136463ECD413546E428446 + FB2E72FA9C80AF759A37B734D4BC9E663070FDBD5721787C890D955C41B45119 + 3E57F6D29FA31BE8500187E8F1B2B8D80CE459827427014EF0D8FC585DD1C53C + 935E3DEC9CC4B06334A9C6247EC4CAB06776FA1F02D5F4EB8ED3743D77F75EA1 + DE63DB6EE07C1CD05791FB7B6D85B1CAE70FE1D7010722E2DDD2FC13823D1C45 + 039DD4C83C76D61A8197497D3F8DD43B990428BBADF4CE6505602FCAEE7EA826 + BFA56FD0018F371417F747E017A650FB027003F70932482D099FA0A9E5CE9240 + A37127633F739FF16859579ADD3D36E1492A0DB176B72BB7E0E2E23D20450B1C + A0E95ECA86A7526DDEC5582F27A759A6852D330575316708615C1A91B0E50D32 + C9620109BDA9A78F27A9D91D7117D19D6A58AEC6E9340D1AC9350295A796360C + 2D557C76241D34D97E5E4A8F9270ED506EC4FF1E32E05FC9675CEF0AFC725300 + 00000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000027F4944415478DA + 63FCFFFF3F032D0123CC02464646AC0A66243060B820630103230391006EC1C9 + 898CEE406A07B2E4890B40C33AA6A268B8B8229761E9E67F0CD1BE4C1886FD67 + F8E76151C0B0139705FF154C1A18045444212EAFC8061BFEE5C54D86A6E24970 + 0D75BD790C770F4C015BD2B16802C3FFBFBF19FE01F1D7A7BF1836CC69C0F01D + 8A05061153510C7F7D7527032EF0ECF216B025AD73DAC016DCD8D2C870FEC23F + E22C787C6C21C3D64DA70886AFB79F1983988E07D8825B3B3B89B70066092100 + 331C84EFECE923CD027430F9A037410B61A0345C016E095116FCFFFF8F61CA21 + 5F869230798286F7AC7AC8D0317B23C3DB3DF98C445900321C9452A61E0D22DA + 021385DF0C21D5DBC096E0B50066F8BF3FBF18A69F8C2068C1AF3FFF1926AD7B + C410ED24CC70F3DE0BB025382D00451C03D00290E120F6CC33B1382DF8FB0F62 + F8AF3FFF18666F79020E22BC71003210968160ECD91752B05A806C388CDEB9FF + 2458AE6CC6794C0BB0190EF2C5DC2B59700B225AAEE00CA6F63455B025478F9F + C1B4402F740256C341F4BCEBF9283EC0E67264FAF4E9B39816E8067563351CC4 + 5F70AB046E0121C341F8E2F973981668FBB761351C8417DDAD045B00323CBA0D + 7710954629327CFBF997E1F6B58B981668FA346235FCFFBF3F0C8BEFD7321486 + C8337CFFF50FAB8B41EC9FBF11620F6F5DC2B440C3B306ABE120FE92474D0C19 + 7EB244190E62BFB87F19D302559712B8E1E8F4F2E75D0C495ED260030AA6DCC4 + 1944715E32608BDE3DBE8A6981B45E00C3B34B9BB06A3C24798F21C64D8AA0CB + 416C503C7D7C8A6901B8CABC7001BBCB3E7B3E6008739220CA7010C0B00057A5 + 0F03DD2B1FFC0FB013673874F43403B180640B90CB18620100261ED9D6E5FCF2 + FA0000000049454E44AE426082} + Name = 'PngImage6' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000037C4944415478DA + B595DF4F5B6518C73F2DFD4191B66C6C4E8512618376DD28B485B1C126D90F36 + 8D1B1726264B76B53BAF3431DE99F80F18BDD1449399254B644E1747743ADD94 + 48169C428131268366832D631BC838FC687B0A057AEA7B0EB692B562417D9393 + 9C93F33EDFCFFB7D9EE73C47974824F83F976E25A0E59BCE75D1DEFBF00CD72F + 7FA4CB0A70E268DD9AC4450C454F17F2E63BEF6784FC2780EAEDCFF3580A6784 + FC2B403CAE70EEBB007BFD4E22D15846C8BA01AA783C9EE0FC956E0EECDEC1C2 + E2524648D680E1FB9374760E119A95B1D99FA2AECEC5739BED5C68EBD58AFCE4 + CA1A1096635CBC14D084B7941761CECB25321D66EAFE440A343032811C959124 + 498B39DDF275760055BCE5B3761C9E321CDB1D42DC844EA7435114E6E57946FB + 4778187C44D3613F66B3414BDBC5B6AEEC0167CF77905FBC096F4D3936430EF7 + C2301E5D7E67B5409E3EC648D720F353111A1ADC28A226DFB607B203A839FFE1 + 4A0FF5C71B291169B1EBE14E086E882C0813E488E70D3630CA53F48B4EF2EE72 + 512852F6FDD5EEEC00EAE973375AA93C50C55C04CC0A8C89D3CB4B5060165D24 + C242E2DE4A98B1BE2114D1413E7F053FFEDC9B1DE0E34F2E535A5341597529C3 + 63301703530E3C9B07361308034C2E08A09009DD1A606CE801FB1AABF8E9D7BE + 7F06A8C5FAFCC235AC22FFAE3D2E46C661711136E5C266711905A8C0080BC255 + 707A9E4737832CCE84D95959C6D540FFEA80E32FD56A1FD0E8F8B45683FD279B + 90643D2191A62DA2B076215C201C6C109738070392CC2F5F75E0F26CC5969FCB + B59EDF5607BC7AB84673B0245A51EDFF925D4E0A859389591D46B1F519E1C022 + F2633588B489E79B771E70B73B48B5AF428B09DC185C1DF0CA419FB651854833 + B2E6C2DFBC1BEB461BB373A20E8A0EBB69B9931E4F4DD37BA90B5FA59D2F4F9F + E575DF755AF3DE5E1DD0BCBFFACF39B3EC22223EB6E488F01CF163C9B7109989 + 30D0D6A7C544676EE1609CA6E2DB58BC47986CFF9463AD957F0F78F9054F4A3C + 098A2B097E17436C38389A9A455B9D0E0C7A3D5F7CF02E45917BD497C6707B8C + E4541DD320C5AF756406BCD8B0334D3C39399F0427EF4FBD518FD751AB419C6E + 03267F730A920638B4C7BD26F1E4BE336FED4B41563A490334D63AB52075AEA8 + 814BF1BF84944422A37872AD846C739B18948CE980BDBE726D22AE77F59C3A99 + 829C934AD201997E1E6B5D55D1560A771C659BC7CB1F1C73BA92B5793DE80000 + 000049454E44AE426082} + Name = 'PngImage7' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B3A00000B3A01647F570D000002724944415478DA + 63FCFFFF3F032D01235D2C606464C42AB978D3F10C0E76EEE9E4181CEAAE0731 + 1B9F05AB775E3A1DE2A66B822E0EF2F3BF7FFF19FEFEFB8742FF03D217AE3F67 + E89DB19261F3BC2AFC16C05C0FB480E1E0E97B0CAFDF7FC5E95A51416E067D0D + 49B02513E6AC66D0D3353A03F481295E0B40AEB73751341115E2818BFDFB0F72 + 2DC4A5A82E87E0CBB75E3014D6F6309CDF391D6C204E0B905D4FACE120B9C9F3 + D6C05D8FD70264D713133C5A2AE20CD7EEBC44713D4E0BD05D4F8CCB4172A965 + 5318FC3C6C18EEDDBDCEC0C6C6CEA0A363C400348311C30264D7136BF88D7BAF + C129C7232C99C152959B61FDFA350C17AE3D63D834B712AB05FF41AE07197EF8 + CC7D82C1A3A620C2905E3115C570297975866DDBF7A35A50DBB3E03F30821880 + AE671012E0C69AC681086BFACFAE9ECED0589D07371C04502C689EB8E4FFEF3F + 7FC9C9B070C0CCCCC2202EA30C371C04E016D4F52EFCDF541C4FD0901FBFFE31 + 7CFFFD1F4CFFF8FD8FE1CF5F18FB3FC3E68D88A0F1F27444F5013116A01B0EA6 + A18683F0FE9DEBC0110B321C2388401650143EB060E2E063E0E6E165E0E1E621 + DE07845CFE1D2A7EE1C82686EF7F9818787878C0961C3A749AB005840C5FF4D5 + 8E61C1850B0C4BB5DE30DC38B585E10D304973F3F2822D397BEE067E0B8871B9 + F76901B0DAB9AAAF181E9CDFC670FFD173065E5E3EB025376F3DC16D01B1C1E2 + 9D21C43083D59481B5790BC38B2BDB192E5EB9C1C0C7C7CFF0F1CB7FD4FA0066 + 0138D9C10C40321C268E6C3848FC75B127D841300B4E9FBBC8C0CA210A361C24 + 8E62415D411CC3EC95BBC94E41CF9F3F07275398E12816C08A0A4A92A8B28621 + 43828F3E4AB90FB7809600004F6ECDEFF6DCFB3B0000000049454E44AE426082} + Name = 'PngImage8' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000B3A00000B3A01647F570D000002954944415478DA + B5955F6852511CC7BF3E9882694B723D6450D4A21ED61FB3879EEA295CABA058 + D1CB6A23A315C2A441AC4123368A82FE5011066D63D1ECAF6058291643AC8D60 + 966EB5FE3E64D4966B7B1841B1997A4FF75CF14E773DFE1978E070EE3D1E3F9F + EF399C9FCA082190C964284523F73A88AC54020A8F9E3323A7E0B6EB558352A1 + B2150BAF991C00852B0779742EC143EFDB40CDB64AA3241DDF398EC066F74ABE + 6399372AC2E93B53904ACF0BE00F7CC5C4E45FC99AB15FA3B054AD07ECE781C6 + CB4084876FD743D1DC01D97E736E014DBFC5B8DCA8D3CE17E7387E6D824FCE71 + 9CB083CE07BD387CA94AF84CE1FC88E8EE3550D45961F04411F2DAD882F4F42C + 78821FBB1D3E58E2EF10BD7A425CA7708FC0507F26B7203D3DEB78C423DABA12 + 38DD8868D02D1C0DF6D4C2B0D3CA16CC4E9F2D3927BC13F43CF2C3526B02EE5E + 037E8401F34940AB83C1740C2DC78F0AB74922484F9F0B4EFB1DD70B74D95D59 + 7717ACDF88AC75C00B084D4FE12F5F8799C7439B6EA10AAB962DC291E6EB30ED + 3B84CD152A389D0EB4E9E3D23A3875A19BACAD34804F0F6D994A4C3B939A8EC8 + 987378FA9975B0D770168FBB5A9282F62B3D24164FA0D8565EBE985907BB9E8D + CF085A2FDE226D4D07F302A7FF71988A11619C8E7178EAF531EB40BF64697182 + D9703AF6FAFCCC3A90088A3E9FD41131EAA0E01D644B9E7C267833D0C7AC8382 + 04B9E0B4BF0FF533EB20AF201F7C8A7FAE0E94096B3B2BC6F12DE446F87B046A + B5062AB51A9FBF8CB00585C0E97C75831637E49B206F7F82B1610F86863F41A3 + 5980DF7F8800A7AC0C413C91064883A7E6D3E1747EA2297945538240700872A5 + 4E8467085AAD0770F3FEF3B95C26A14522110C7EF899011705A99F8A39D3F9B6 + 62F506D4ED5827F9E71204A56CFF01E5E2820611E3A8010000000049454E44AE + 426082} + Name = 'PngImage9' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000029E4944415478DA + 63FCFFFF3F032D0123B2054BB79C24CBB6DE290B19CEEF9CCE882C063317C382 + 681F73920C07EA619016136628AAEB43B184AA1618682A30BC7EFB19C512AA58 + F0F7EF3F8615DB4F33D818AB337CF9F613C5128A2D0019FEF7EF7F86D5BBCE30 + 38596833FCFAFD07C592733BA6319265C1FF7FFF19FE02F11FA00520F6BABDE7 + C0918C0E48B2E0D687070C53AF4E62B8F0F6020348B59BB41F43A1661603EF12 + 0E8637E15F188E9C7FC0F0F5DB5786B76FDF82D5CF5BBA89780BE6DC58C0B0FD + D9620C4B4F3FBFCFF0E4EB038697219FC0C1F5E7DF3F30BD79EF29E22D38FDEA + 0283F906230CC303551CC1F4FA3BFB199E057E801BFE0F18275B0F9C26DE0287 + CD4E0C879E1F6028D56B606834AC021B62BEC582415D44106EC123FF7770C341 + 71B3E3D019E22C38F5F20283FB7627860D6EFB18CC8575A0A9E61F83D5762B14 + 0BEEFBBC811B0E8AF83D47CF116741FED12206676064BA49DAC00D1758CE8511 + 5C773D5FC30D07A9D97FE202610B400A6BCEB430D4E95532FC03CA234722321B + E6F2B92FA631C408A581C50E9DBE84DF82084F5370068219C4BF9413C3D5F7BC + DFC033DAD467ED60B164E112B0FA6367AFE0B720D4CD04C595422BB8E1A9E6E6 + 9BF70C5BACF7C00D7FCEFE942160971343B16E1D83277B3058CFE98BD7F15B10 + E46C84121CA2AB79512CD868B10B6CF8DC97D319BA2F3530D8493A30F42A2E84 + EB3977E5267E0BFC1C0D50C25A722D3FDC0274004A454DC67D0CAEAC81703D17 + AFDFC66F81B79D1E4A10C96C106490E15600E75A74806E3828C2AFDCBC83DF02 + 0F6B1D942092DF2CCC70DBE315C3F2D74B18763DDDC400D265206CC020CA2187 + 61380810B4C0C5520B45132C4271255564C389B2C0DE541D258DC33210580C4B + 9E40369C280B6C8C54C125222500AF05D82A0F7200CC0200F191E9EFB5062090 + 0000000049454E44AE426082} + Name = 'PngImage10' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300004E2000004E2001167D99DE0000035A4944415478DA + ED954D4C134114C7DFEC6E0B420B085A6A040DD88A45C0C4602D4A2D281F5589 + F1AB6AA2094A4C5502DC34F160EAD11BF1E4498D462F1A43FC408BA052C11435 + F8890AA222A2601B6B2D94B26DB73BEEB4168B16E1E2C1C4974C7627F37BFFFF + CB9B995D843186BF19E8BFC1940653012693897AF9CEAEA5696825732FE72B6B + 3877F2B6F01A982A77435595F48F0646A351E4E3E3342CE7BDFBD1F6F1E7024D + 957CE6BCED6FCC66EF6485D71D3DDE617FDFAD9ECC00E96B6BC5727FAC9A65DD + 41718EF795A6CBE6F9699A6925738F67ACE091A5A5235AB2C1502DA1E3F108E1 + A219A0CA4A530C15CFE68F7986DB0814F0072AAC2DD71BC9A276FDA69D98E7CE + 7198DFDC616E6C8866A0D6EB13C448E48AB6078278A5209E22888F05C531E075 + F76E5CBB11660B4AD716D30C732BC0F37A6B5363535403B56090F2BB01D209E2 + 4AA96C99DB1D6A0BE251455BD395C6C8E4253A5D929491248F70CCD7A796CBDF + A219E495EE8A4F605CEE09060683412C92CED6F03CB64C26FE830F9F6B4A187C + D41D144EDECAFBF7D50889AC41039D4EC7C83354050850B0721FEB392441D892 + 1827C62C93E892393F7F3863B1F822049142A110CB6473553C254AA431041806 + 80E3001266A7D8ED036FFA3A3333F94237CB1103B4AD72DF0A0A51EDD18AE91F + EA3F2191CCBADA7CE9ECCD88EA614B556DC9E0A7B71BE7CF997FE0579E773B2E + 386C0EAB5CA962D1DE9A835AD273B25873B41E66C602385900DB28C0C008C0F3 + 0127F49C3282D3ED2F7FD16626170C6FDB53534CE140F39FF8A10FB6D573E6A5 + DE463B761FC061F17C39C0A03B34C209244892F9702924C5607DD6E2A501719C + A4793A7C863203D05C450ED6166AE1C8B17A9821F4718C9B5811097A580CC7AA + F38070E1980E1FDC2C7966567ED1AAD50F4945E1707943C3EE9998402A229196 + 9A06D3E159AF6719D2EB6B63B20A942D19E5C6C2746908F0064209E449E0272E + 1BBC3D5F37D865BD6BCCC9CDE5E4694AB3667F3D4CC5B73E7EB020784CD76EDC + BE70C4EBE9D96ABA0831B470DC9CE2F1EA084CFAF9CDE95C33EAF8D49E9D9D0D + 0AC5224D5C72AA85984CC6B37E9FCAD1FFBA7BFCA269CACA14CB57569CEEEC68 + 2EECEBED1B4F50E6A8067BBA7B770F753F89FC4453E5DB77AE1A1D1EBE13C986 + F9AE675D455FDEBDEA0DEEC1BFFF47FBE70DBE03EC16D6DE8FAAF1BC00000000 + 49454E44AE426082} + Name = 'PngImage11' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000003784944415478DA + B5566B48544114FE362D31A3C78F104C7B50145A902FECE15299D12668ADBA61 + AE925AA405811585F4A31745FD308A0A42DB5EBBE96E56AE9AAF30CD2CC5C79A + BB998FCCEDA5640F15823233DC7B9BB9EBBDEEB65BAD5207863967E6CCF7CD39 + 6766EE15B12C8BFF29224AA0CCAF89237DD63F051689E21323C5D91CC1F5BC6A + 96186302A0EB68EC0CC3C2C430309918B34E7A2AF2DD2751A23A21B22210F965 + 9A17EB5304DD9ECD34256382FF25C11EA84D82DB8A6B9CDEFF301E771FE8A0D4 + 94E0E1ED745B020A36F69DD39EC5F4552A7CAA88437155A37D02478421FE96E0 + E6366293C610FD5E75D3F822A0E096B9363116E0C4765FA74677690CCA6B0D63 + 23287EDC850B375BF0A4AD177D9FBF63DA94499086CCC1B15D0198E2EA2C44E1 + 21D1E04DF16654D6373B4E702CF3098E663422FFAC049215B35050F5165BD22A + B8B9D0200FA84FAE11A2F00ACBC1CB42191EE99E395E03D76597F1FD8709BB36 + FB207DEF320E689A58C9CD393B89D0551243C6F81A985357D3D4EA5804F47424 + 1DA982BAD488C329FE48952FC6FDDA77901D28177C68CE79F0F91177D09E2B45 + DDD3F6BF13F005A5EDC730C3919C57B7C063E6645434F40804AF8B64233B67B1 + 28528B67B736A2B1A5E3F704F412D1313EDCEE8F0388492B87FE793FC2C45E50 + 1C0A86A7E4A64060BC1B2D6CC447560083261CFAF64E5B82046930B7800233FC + 1927FADAE462E85A7BB9B9B6DC284C759B08CF0D390241475EA4E0CBF7CD1D46 + FB04F4FA0F356CB75AE0BE2E1B43A4C854CA2E4AA02A3222ABE4A54060D044C0 + 89149BFAFAC616A1E146185A3B5FD912C46F5C8989810A7C23EF8AC9E22229B4 + 1D38AED07360625F77246E5A0065A111F7EB7AE03C4184D80DF3B047EE8D3A6F + 4F81D4455B694B200F5F0E97A02BF85293387A4B99D14233BF1C45ABB490A65B + 321B29CA73C84C48B54F10131664B573BB4056F3E6776778C447BF74EE9F09A2 + D707622AB9407D95F1E6428F000D5B00FFFA06D5FB8CA685CA8E3307A1D877CA + 6A4C2090860660C66A1537D853160B8FF51AC1E9457E14164AB582AD5787C34F + 5E840CC34E6ED7ECE057B0FD1FC0F4BD0778BDD380EB060B8288103F3B69F8F3 + EB49D36229DBB78A7145556D3F024A5058A973E89B604F86A242B02D7C01AE92 + 636C5303FAD1CFD196667D1B1C1A3741EC9DD348F40597168D6C3F92E2A4A31F + 7DF207306E605E3200E1FF6727C90CAFFF0482645308AD8246DC000000004945 + 4E44AE426082} + Name = 'PngImage12' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000E9C00000E9C01079453DD000003DC4944415478DA + BD947F4C1B6518C79F7BEF8EFBD56BAFC7951F33BA75E9822B88520C88D92C93 + 05C410CA70986D3261B1DB3F261B24D3F92331F2A799C6B0F96B666668165D88 + 12E7FE598CC14C639C43D0988D41B69974DD5A680B584A5B68EFFA7AAD81306C + 8D0BE2935CEE9E7B9FE7FB79DEF779DF97C018C35A1AF1BF020882C81978E004 + A6EB6BA106236D0B42E4BD080045E3AA8A35ECA3587A607709717531F60ECD7F + 0378FFDBF806A9807E2734956898F027A94844054D03C86310701C02AB950B47 + E3DA075D4EEEA5BB069CB898DCC671D03F3E1655BCDE0548A520F3A4D332DFFA + 9BA208D8B2D5047351B5EB48BDD09B13F0E27B41E7A580E5870B3D849AF64F5F + 49BA522AEE1B198E48B11806DE40416C4EBDA380A9192D03E278048D0DE61BDE + 49B2FAE5ED309515B0AFD7838D14FFEE3C6DE9AEAD559B6211AD7F642842A91A + B1243E3D1D85D999202416E2C08B0A30BC5907109999382A045C5E2674B6DAE0 + 93AC8096377EC7452C8F79237DB6AC5CAC1BBA14165329B4243EE10B82DF3B06 + 34237E93C2DA607C36F4B849595F67B26C22B03E0B399F82E626F9B3A76CB027 + 27A0D0600235F9D7325034B5241E0C84E1E6F591A02E7870F058D599F4F87AE7 + 295654882F8B37D434D08CA4C7226869967F7CA6143D9A1320911C305C5EC65F + 140F8713E0B9368C3535F5E4D069D7F9E53DB0EF38D526291BFB8DCAFD603090 + B0C3257DB7A79474660534BF12C0884A81C9844056988C7824A24168D283FDDE + AB472F7FD17164E52EB3B77D7C1FCF291EB9F8613D8F84D656F3B95D25A83927 + E076488375051498440C825E5178568399D0ED9F3DD7475CE35FB97D2B01B627 + 3EB218154B405E570D160B05AD2D52DF4E1BDA97133039A3427AD714EA0D33EA + 907455A169350E40BA075EB37CBA12B0A9ADEF1E91C9BF251557C1462B03CEAD + E25BED65E8705640E5013F9E5767F553A4014AA9A07700B4E43CA49271482EC4 + E7584172FD76A66E7039A0F2D9F35588CCFB49904BC1F1100F763B77F0390779 + 3C2BA0F11830E274805EF4037F3BD731F5428F757EF91FC7DEAFBB04B3ED6D82 + 12A0A9D1A4996554ED76D0C35901FF74D965B347BA6F725AD8F73D27592BD3B9 + 9DED66DF956B0B9547DB8489FF0450D171712F6750FA106D440F3EC0E9CBC39C + 7CBE266FFF5DDFA6D9CCDE71B98867F02F2C5F50C43024EC6C312646C763F6E3 + 9DD28D5503CADB7F1568160D7086C27A8AD42FB97A51CDB75087DD0EAA373DBE + 6A40C5FEB10F395674CB324B6C731A4010D09B7E0FF56ACFD34462D580C70E85 + 369BCC7874730987CB4AD9D1C980FAFA0BDBD9CF97C7AC0AE03C3423EDDA2D9C + 5414FADCAD089CEDAE20FE58199313B016B6E6803F0192C0D6E065D4DD9D0000 + 000049454E44AE426082} + Name = 'PngImage13' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A0000053A4944415478DA + AD956B50546518C79F73CE2ECB5ED9B3ECB22C48800A02CA45101BBCA005D9D4 + 4C17758C6FD57899FAE0D4871AB3CC6B5FD2748CA91877600AB3A949CA4427E3 + A65C1409729565B92CEEB2807B935DD80BECB2B773F6F4420A5841493D33E7D3 + 7BDEDFEF39FFF799F760F058C5601F2BAB443E079B0C077DF250304086432117 + CDC6AD3EA77FACAC6CAF77EAA5B93BB07F8B3EFD55A37872CC95C7E5725E6671 + 584F4570D871188E7182815068D2E3354E38DC17273C8E2B9DC33A4D735599E7 + B10495E76FC63B6CCED7F8A4708F58267A429620C5C4B1628C601310F006C06E + 1A656CF7ECA151B3ADDB366256EA07BB2EFEF4CD19FBF427FF13FCA4F29214A3 + 88BD9218F2CDB4DCA531B1F1122C40B0C11B02A0C37F74C822502A011F63EA37 + 33BACEBB8377BBD5A75B9B7EF956A3B9E15C50B063C77922AF20622B29979CC8 + 29484D4C7F428647E038DCF703BC70E826681A34F0F9B15720398F0452C0000F + 0FC1B0C640AB9A3ABA55ED8DEFFD5C5D797541C1A7E5D5F2E024766C59CEB29D + F96B5388380E0BC351CFEE2040E187B3024516096C1680044958FE71467D4D1D + AAABAE52B65D6F38BAA0E0E8890B05B21871E5AAC28C94D8043926A601F80480 + 651260DB47B382F47C12BC14008ED6A2793458D4FDE196CBB53D576BBE7B635E + C1543C2B32A8ED4B33932A5617670929161F761EB9396F330F6519EB49A06C56 + 4655D3EA3A5B7162DF0282C3112969A9AFA7E7A794E61467478E072360FD66E5 + CC7A6671E634746E4D0956AD2301BC4EE8ACFDD5AF2C3DF2C9BC824D9B0EB30A + 3624EF589EBDBC3CB7389B1F2004A06A76CEAC2B5BFA66BA9E5B1B3693601DB6 + 30B7EB5B3D155F1C2B5DF00C0E1CAE2C8C8E8B399BFB744EA2302E16333B3020 + D08E680EC09EE3B367B0BD98041A4D2A9A5AF08469E8EAE8635A2E5D19BCF07D + D9A90505EF1CA84814F1F92757ADCFDC96929F8A8F4DA2F9F7014421C1C62DCA + 9958B622C154518866754E80A6454D55559EA96F69AA3E3EAF40B57FCB726D50 + C0D2466DD9268D4F7C376B6396589A28C7EC1E0218344D7DEDB371BD84040CC6 + 80C31F64746A1DEABECE5873F9EBB33A9DFAB3BF15B41F78A690C7659A3D9152 + D044AE8500AE08B1F83266C593692C91428A071836BA0470E0A2B1E4A10747E1 + 38C6BD8C65C014EEBCFE9BA3B1EEC7DAB6EB57CA298A6AFB8BA0637FF18B3C11 + 5D91B03A534684ECA0712583C61D0316271EE408E4DEA495295162B904E39242 + 60B1D998DFE367D04507F6210BD577476DBD73BBF9467B5BED799FC7D38470EE + 47041D1F146D1788C22715B9EB92843C0A5CDA4EE8B708A163221E8C7E4269F3 + B0FB2339FC2269AC224D1EAF904444B2591E97276C1A1A720E1B740383035DB7 + 7A7B54F5341DB88D702E987BD94D752E10D3A58ABC8D4922AE7F1A6E30B2C130 + 26048DD50A23E38EE7CBEB354D19196B93A3158A748C2696D1B43F0AC5002EF7 + 98C334ACEFF47ADD030835821EDF432EF630733E9FFA217ECD3A998817828981 + 2ED0E93130B824A0350D41B7590F6E7FF0B9BA2E67CD833DE8E6017410403CE0 + 4C4D68706A90E0CF3F1CD5C1E2A24801D1B0243707F85C149AF60E188609E877 + 4483D6A8875E8BDEE5F4516F35F6B8CEC1220AEB39FE2CB3247B25F0055C14CB + 2D1834B2C0E010836678007AAD7ABBCB1B3C78AD775CB918F8B4A0FE5409B366 + 752A50860E1832A1CC4705A0351B416DEC7721F8FBD7FAC6CF2C163E2D38B4EF + 6D2647781F12682F82F3A0CF6C821EF3008C7A03AF2E36964704BB77EF629688 + F9407A6CE01CB987E006704FFA76D575BBBFFCAFF06941494949915020688811 + F1E15E4F2BD82CFA5D63DDEE732A80D0FF21F81D69327688E78891A000000000 + 49454E44AE426082} + Name = 'PngImage14' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005234944415478DA + AD956B4C53671880DF7329BD9CB6B4A5174A454005112F205E16DCD46C3097ED + C7B2690CFFB665BAE80FB3FDD8E2DC8C739AFD984EE3C8326203D9702E5B069B + 139D8E9B82283299454AB9147B81DA9BB4D00BB4F476DAB3AF80896E02D3ED24 + 5F4E4ECEF99EE7FDDEEF7DBF83C1135D0CF6B9BA4E18F2B0C4896848118B46C4 + 8958CC1767E1CE90373C5E59B92F98FCE8E119D8BF459FFAB6553435EE5BC7E5 + B25F23D9E4F3296C56068663EC6824169B0A04AD931EFFF9C980E7728FC5A0BB + 5657197822414DED4D95C7E57D93120BDE11C9848B6599524C942EC208160191 + 6004DCB631C675CF1D1BB3BBFA5CA376B571B8F7FCAFDF9F764F2F7921F809F5 + 05294613FB2472F1DEFCE225F27495048B102C08C600E2899908490265251262 + 6C4376C6D07377F86E9FF65447DBEF3FE87437BCF30A76EEAC25D695A4BC2E56 + 488E1795E465AD582CC353701CEE870106BD00D1F84C0E481C40CC678087C7C0 + A233C7356D5D7D9A5BAD1F5EAAAFB932AFE0CBAA7A45740A3BBAB468E9DB1B36 + E612196C12C311D11F05E81E07F044101F9B192C12408224647882D15ED5C69A + EAEBD49DD75B8ECC2B3872FC5C894C2EAA59B5A520373D53818950C41401E098 + 0218F2CD940B8F35B38A200D80A37769BC3838B44389F68B8DFD571A7EDC33A7 + 20999EE505F48E25ABB3ABD796AD11D024056EEFC2BBC6E502D02E27A369E8F0 + 9DA93EBE7F1EC1E194DCFCBCB7566CC8AD282A2BE44C445360EF6737E704EB5A + 7470E9B73D4071D043D00B3D8D7F84D5159F7E31A760EBD6C364C973393B9715 + 2EAB2A2E2BA422041F4AB6AAE78D3E295009019C1607D3DDDC11A8FEFA68C5BC + 0B3E78B8664B5A86FC4CF10B4559828C74ECBE77E1B6C9498D436FD720D37EE1 + F2F0B99F2A4FCE3BE3FD83D559428A3AB1EAD9D5DB7337E4E1E353A8FE4300A9 + 6C00394A059B98ED83590A8DEE4EEF24E8DAB5745DCDE9E6F6B6FA63730A3407 + B62DD347F9A43E75DB76A92AEB83359BD788A4590ACC1D208041D5244896650A + 2A4FD4033896DC7C063CE12863D01A50F44DD6868BDF9D3118B45F3D5670EBE0 + 8B5B785CE65A8023051D67234470658CA464CCF267F249A1528A4718549B0C0E + 5CB4021E1A3824C03311641C265BA2E7FA9F9ED6A65F1A3BAF5FAEA269BAF31F + 82AE0365AFF284F1EACCB5AB6544CC0D3A5F0EE8FC727078F1289BAF0866AFCC + 4D15292418572C0092C5C2C28130830E3A708F38E8C13B5AE79DEE6B376E7536 + D68602813684F33F22E8FAB874075F9838A12CDE942DE0D1E0D3F7C09043005D + 932AB08609B52BC01AE2B0A95269BA325FA1524A52382C32E00B246C23235E8B + D9601A36F5DE1EE8D734C7E3916E8443ADF850DB2423E78BE215CA759BB385DC + F034DC6C6581795C003AA71346273CAF5435EBDA0A0A36E6A429952BB038B134 + 1E0FA7A23480CF3FEEB1598C3DC1A0DF8450A368841E70B10739A728FA67D5FA + 4D32212F0693A65E30183130FB24A0B78D409FDD08FE70F4E5A65E6FC3EC1CB4 + C5903C2488590E3A57219A2C24F8FB0F4773A8AC94C3275A1615170185DADCAF + BF03660B01439E34D05B8D30E030FABC21FADDD67EDFD9059BE03117D67FEC25 + 6651E14AA0F85C9496DB306C25C1EC1181CE628201A7D1ED0B460F5D1D98503F + 0D7C5AD07CB29C59BF360F6873178CD850CEC7F8A0B75B416B1DF221F8475707 + 274E3F2D7C5AF0C9FEF79822C17DC88C07119C0783761BF4DB4D30168CBCF1B4 + 697944B07BF72E6691880271C005DED17B086E06FF546857539FFF9BFF0A9F16 + 949797970AF8FC16B990827BFD1DE07218778DF7F9CF6A0062FF87E02F9F6855 + 88E7298D620000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005A34944415478DA + 8D960B50546514C7CFBDFB625958DC455049C8074A3C44B490C67C8C5A098A8E + 8E61A0E68C363A4C884C5A3E7240D1F1C13496A58E634FCD0AABC9416DB29C18 + D9626C542052234904158170A10576F7DEBBDF7D75BEBB0B3E82F49BF9CF7767 + F7DCFFEF7CCF731918B8E950C1283B6AB8D96C8C62F5AC4994149EF0A4197F6B + 4575A13894D29F81AAAAC00C601EA6D3416A5090F9F9509B65AA2D3C74C490E8 + C121C19620D6E316E4F616678FCBD973C3E5723B445E2CC7F81A94F7710034EB + B17ABD7E516C42744E424AECA8F8F1234D23C63CC10C8D8900539001BC5E1E5A + 6EFD0DF57537D53F6A1BF9FADAC66B6D8D1DC7144529C3776F51DF8100D43CCD + 1E11B626754A52C69CACA9831252464358B815581DA305CB8A028AAA804F26E0 + 1638686DBBAB5EB9F417549EAA71D6573595096E72103DAEF442EE07B0A8F1B6 + 48EB96CC97A6A72F58362B3866F43046A763FBD2A1C6C5F90ED8F8EEB3C0893C + 78509C28809BF74243FD6DF5E7D2AA9ECB3F5DFF9678C91E0C6FF0FBDF034418 + 0CBA4DF397CE5CBD7CCD7C4B544C24A36391C930BDB940D19A735AE0EB7B9F06 + 0FE1347935103EFB38B8D3D0AE3A3EAD72D59737BD8361FB513DBD0093C1C02E + 9B38257157DE9625914F258F445F06588645E1D46048515E399C2E3D08F372F2 + 20B7244933778B5EF05210422888230234D5DC81F3876B9B3AEA5DEBD1F73402 + 240A181E3ED476287BD5EC3959AFA6B366B34903E8581DF66C9F396D14B0724F + 3CB87D1E70138F96B936020471124E57B7176A8F5F93AE7F7FFB33C9236D4440 + 07CE33A4C7A5C41ECDDF9A13999C1AA7654DB3A7806DF9157DE6BD80FE5AD4AA + 0EE071148244A0F9421B5C3DD2D0E469E65620C0C1982C86E21973D336BF5698 + 6D1844774C20FB9D05950F98D31D24490A88921C90FF39B7E02DB0AF6C418080 + 001F74B5F640DD478DA2EBF79E4259944B98109BE5544E6E46E6E2D5E98CDEA0 + 031617F7ED75171ECB9C2A7F7D21985FB901BCE407705E011A4BEFA8CE739D47 + 245E59C9D822C2AAF28AB3274E9FFB0C43E77EDF869AC736F71109DED85C0CCC + 92BAC0088876465ACF38D5B613CE5F658FFC1C631F32A8A660D7D209A93393B4 + 1D7968F3953E407FA6D243CF9B0A77009F558D009F66EE9345E83CD705EDDF74 + D6CA6E790263B5592A96AD9B37EDC5ECC98C04321045842FB7DE8413C7DE7FA4 + 39ED0B8B77C13F0BCE6BD3A3017C22749C76A9DD673DD58AA0A432C1A1410766 + 2C9A949BB576B60E8218201844213FEC76C1E71FEEFD5F73AAED3B4BA0655E05 + F81040307BA18B40676997CAFF269C54457521C31AD8E58993461F78796346A8 + 2DC61A18A61F72699F0A1FECDFDD6758F06651BFDBB431E34704F8DFE11A04E8 + FECACD49B7E5125556B7D383161F1963FB62F6EA2929492FC4323E55BC079125 + 683C6C85F7DEDEAE01E8822AD957B5E9E051DAB468BDDF5CC445F73838953B2B + FCA276AB5BF01C545240A8C1ACDB903C2B6EFDF455A966A3DD0082ECD3168B42 + 44EC5D47A361CF8E426D41DD8B2EF6ED169A756FE634195F1B016F19D72DD5C9 + 5B41828F11E0E9BDECE22DB6A092B4A5E3D3C7A63FA9978D0AC35388F6B27F67 + E8BF4ED602DB321D81D1899A4445F2F76E51E52A0442CAC5E340A010439BEFBF + 4D8DA8CCC1636D45E316C4260E993458279914C6171809096CBFF09393E166C6 + 59CDD01730A72324682E54119138C845F52E6C432F074A7AB8E0846255586C1F + 655D1B3D6D5842449A5DCFD870573DB026FE7511E994507311FF6B2720541322 + 568BD56A3BD0ABFA3B943050C9B4A266996C8615F6C4B099D6849060D3082303 + 363CD1264583116AEA45E05DEC9B7C2AA9177BA4EBF2192CFD9FE0BB9528FE51 + 45DF801AC31AD9857AAB3ED318AE8F3344E843749178EF5A8021DDA24ADA4549 + 724A3DB24BF95375AB65B8A02703F5587A54D1EF6DF477FAC91285953A99D1C3 + 38303276BC074D8A0CBC4A54271EFACBA8AB18D30EFE4F97FF340AF8172272E4 + FE66E507F40000000049454E44AE426082} + Name = 'PngImage16' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005A14944415478DA + 8D960B50546514C7CFBD771FC0C2E22E026A8A2F140145B490C65047AC0445D3 + F111A463A38DE608CA949A1A83864C2AD5E8543A4D33659AD360E3E8A036D958 + 069B943D80C8576E12A8BCC28559D8C7DDBBDF7D75BECB2EBE60F49BF9CFBD77 + F7DCFFEF7CE77B5D06066E1C2A0C65450D0F0D350C6375AC5194141FF19166FC + AD0DD58DE2514A7F06AAAA0233807924C7415A4848E8F31116D30C4B54C4A8D8 + 1183C3C34C21ACC72DC81DAD0E97D3E1FAD7E974DB449F7801E3EB50DE2701D0 + ACC7EB74BA25F14923F29252E3C7244E1E6D1C35EE2966485C341843F4E0F5FA + A0F5F67F60BF7E4BBD56DFE8B3D737DE686FEC3CA6284A05BE7B9BFA0E04A0E6 + E9D6E8C882B48C89D9F396CD1894943A1622A3CCC0728C162C2B0A28AA027E99 + 805BE0A1ADFDAE7AE58F7FA0FA4C9DC35ED35421B8C921F4B81284DC0F605193 + 2D31E6A29CA5B3B216AD9C1316377628C3716C5F3AD4B864A30DB61D781678D1 + 071E142F0AE0F679A1C17E47FDA9BCC675F9879B278997ECC3F0865EFF7B8068 + BD9EDBBE7045E6BA55050B4DC3E262188E4526C30473D12EBB0A2AB5E0B57B13 + C14378F06A201E3C7E1E5A1A3A54DB17354EFB85A6FD18F231CA150418F57A76 + E5D48CE43DF945AFC44C48198DBE0CB00C8BC2D260888A5192224169810DCE96 + 1F820579F9F0D2CE58F02284F68482782240535D0BFCF2697D53A7DDB9197DCF + 2240A280E151432C9FE4AE9D3B6FD96B596C68A85103702C87572C11CB8084CF + 7E4584F736546900DA2824638BB1B70708E2252C578F17EA8FDF906E7E7BE74B + C9236D434027D619B21252E38F6EDC9517939296A0654DB32F2DBCD8EFFCA500 + 3AD892A4C0D2570B21219F0737027CD80B4122D0FC5B3B5C3DD2D0E469E65723 + C0C6184DFA92D9F3D3776C28CED50FA2332690FDBB85D57DD9DEDF82E6A2246B + 5AF5FA56B0AE69458080003F74B7B9E0FA678DA2F32F57B12CCA654CB8C57426 + 6F7D76CEF275598C4ECF01CBB25A0FCADEB8F408E061733170BFBEF06D80BC6B + 1A80F70AD058DEA23A2ABB8E483E650D63898EACC92FC99D3A6BFE338C36B808 + A0A37F606BED038081CCA9FC44822D3B4AA07BF1AFDA1A693BE750DB4F392EC9 + 1EF939C61A3BA8AE70CF8A29699913B5A9884B09449C31878BEC7D80FE4CA587 + EEB7179742FB822A0488D055D90D1D27BAEA65B73C85315B4C552BDF5C30F3C5 + DCE98C0432109C2DA22CC189DD2D1AE049CDDB722AB5ECFD7E113ACF3AD59EF3 + 9E5A4550D298B0889083B3974C5BBF6CD35C0E421820184421DFED75C2A9631F + 3D91792BCD1CEB4F307BA19B405779B7EAFB5338AD8AEA6286D5B3AB92A78D3D + F8F2B6EC084B9CB9370BD4CFFB49BFD3F4C3F7773F98399AD3C1F54BBD89F10D + 02F47CEDE6A53B72992AABBBE9424B8C89B37C35775D46EAC417E219BF2AF641 + 08968ABE4402CF3D4747C2077B77DDCB9C9605CD8580B98883EDB1F12A7F5EB8 + A8F6A8453859AA2920421FCABD95322761F3ACB569A106AB1E04D9AF0D163515 + E5205004B97C02EC2B2DD6CC5B727ED4B20E664E93F1B713F056F03DD27519B3 + 80CF11E0096E7689264B4859FA8AC959E3B346EA6483C2F8E460B77BCD697DC3 + 4E3EAD05DFCAFE5E7BA6A2334EBBBA4595AF1208B9201E0702C518D67CFF6E6A + 40E50C1E6FD93969517C72ECB4C19C6454187FA02724D083A8D3D3D1FCBC66E8 + 0F98D31E1234176A88486CE477F52EBC835E3694F4F0811381A7C272EB18F3A6 + 1133872645A75B758C0567D50363D23B2E222D093517F1BF0E02422D2162AD58 + AB7600DDAABF4109031D9966D41CA345BFDA9A1C99694E0A0F338E323060C195 + 6C543418A1A65E04DEC56B935F2576D125DD94CFE1D17F18DFAD46F91E77E8EB + 51E35803BB5867D6E518A27409FA685D381783FBAE0918D223AAA443942487E4 + 929DCADFAA5BADC0013D1D388FA5C71DFAC1467FA79F2CC3F0A44E617430090C + 8C15B729A322834F25AA0317FD65D4558CE980DE4F97471A05FC0F622CD6FE88 + 2F15D20000000049454E44AE426082} + Name = 'PngImage15' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000002814944415478DA + 63FCFFFF3F032D0123C8822F5C7FFED767DC625876E301458645692830B0B2FF + 67E8ECD06184391CCC282EBAF6DFC7478B21AA671BC3F36D5E040DFAF3E71FC3 + EFBF7F19FEFDFB0F66FF01B275A20E32AC28E766F0F2F26250538B63387F7E3A + 235E0B3AD73F25CAD571D6BC60DA28E108C3A783A160365116E07339C4D540FC + 07C1364B3EC6D0E0AFCDF0EBD72F8679F3FA48B7009FE1206C957682A1CA5395 + E1E7AFDF0C4B974CA65E10051AB28169FBACD30CC5CE0A401FFC6658BD6A06F1 + 3E20E4F2DF50BE73DE59862C2B09A0057F18B66C9E4F9C05C41A0E4A45EE8517 + 18524C44C03ED8B573097E0B40C9AF7BE333A282C8550D92DEBD4B2F31C4E9F1 + 03E3E017C3C1FDAB705BF0748B2786EB103EC04CFF3039FF8A2B0CE11A9C601F + 1C3FBA1EB7050F37BAE3351C3DB8FE41732CC882402516B005674F6FC16E0138 + BB032D2107C00C07E583CB1777E1B6E02FD07520853F7FFE82D0504DE86C506A + 8188C1F81039909A5BD7F763B7006678754D0159BE5056B303EB7FFCE038A605 + 6E6EC05CF813E292D6B60A9002AC86FCFEF593E1F7CF9F0CBF8018C4CE2E3A0A + 16BF7DF30083AC822558FFCB6767302DB0B757807BB3BBA70E6C0137373758B3 + 868605C3D9B37B310CFFF3FB17437EF969B805E252266033DEBFB9886981A5A5 + 343C0C274D6A065B2025A5C42029A9C8A0AB6BCD307B563586E1BF81EA4B6A2F + C22D1014D107B3B15A606C2C0A8DC4DF0C336674802D303676061BAEA666C450 + 90EB8461F81F20AE68BE4E9C053ABA02F0208216B70C09097560C385852519C2 + 8395300C07D1B59D77095BC0C8C8C8505478F5BF82222B72718B35CC910DFF07 + CC78F53D0F88B300040C0C32A8D202B87061066A9D4C4B40730B0038C31BFE85 + 5838D40000000049454E44AE426082} + Name = 'PngImage17' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000026D4944415478DA + B5966D48535118C7FF138A455F84588C0A7A27AA1163CDB69168929851CB5806 + 81D5878A7C29412428484264A85006814342E805112DE8436F94F43E74393775 + ABC1552C87B5EA6286B7B01AB4BBD3CE8D0DC57976B7D9038773B8F79CDFEF9C + F33C17AE821082FF198AE982F607CE946C4DCD3731D8D5A2A063FFDA73E4C9FB + 469C8CB0E30A4AF61A928247D660F9D225A8BE7019366F0B0CD595C8186B43AB + 4D9024F322D06E5C8521F75D2CAB2A85E94026E010C00533D1CD09E99D4014C3 + E87CE482F2A717D93B8A305AA381A97F4282D3484B40E1A248F0BAE33486825A + 188D464C0A5FF1A3AA002A9EC0C7837D457957C7124A6A958DD896AF4146C08D + 1B1E23D46A35789E87D56A452010483EC9244C20465A28B27B6767650CFEE5D7 + 38BE8F7F46AF5026C1559BCDB1AA922D48040F0A1E145B57E06C7D2BAEB5DF4B + 4E20176E7778F0F0A54B9E205E0EA6DF793C38DDC463BB5BFE0992D97974DED3 + 9E01798254E0B4745FF47A120BA2354EFB70E47D435D09FE902294177630E1B4 + D95D6FD88243BBB324F8AEEB01E95959A8166F3F4E4137F509CEC515B0AC3922 + C1D7D574CFC8CF95DC050885C370F4FBD88283057A69277432ED2FD51FC5999C + 85F03FE7E00F2A71E7C322D435DF8A9D303A2F3A767939B6C0B253175BD4D556 + 0197E3154EE95663D0FF1B8E491EE50D7D73C2693FE01B660BF6E569638B8E9F + 3886D1110E2B5504872D7AE8CD179970DABCDC085BB027678B34B1F8F604BED9 + CC385FBA1586FD4D33123F179C26DC37FC8E2D28DCAE99B5482E9C464241BE69 + 53CA705982DCAC0DFFEA5F24B36A9C7E132CB82C41B66E3DEE3FEB433AC114D0 + 3F84F988A8E02F75743575B8E251160000000049454E44AE426082} + Name = 'PngImage18' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300004E2000004E2001167D99DE000004124944415478DA + ED955F4C5B551CC77FF7DEFE61D0C204D7758139C15684752C1A565A47D7A983 + 1664449D75337301A7D68D8CBD69F4C11463627858427C30DD8B3A0C8B0FBA10 + 71B8F247470706A6996E93617173C060A56D645DD7526EDBDB7BBCE75E6F2D5A + 46E2E29BBFE4E49ED3F33DDFCFEFFCEE39B7044208FECB20FE07AC0A584DE070 + 38C889EB011345C1101EC798786D77D747DF72DDE46A6B1B0F1E54DE1560B7DB + A57136DB4033B17373FEB9BF262872978F898D5C73B9622B257EB4ED83B1C0B4 + 47BF1280B0B6B6CAD4892C3D4D477873868DD76C543D90A028C9101E47A34BC6 + 1FDD83639916DB6C2D0A2A0785B12E1380686A72C8C91CBA72297A67188B9289 + 64C3E8E0D7BD78D2F4F4B3FB11CB7431887D6ECCD5DB9D09A0B75A7365843494 + E91D70E64D9C790167BEC49B2340F5DF9D397D46D41A6BEA9EA024926F922C6B + 1DEDEBEDCB08D07380827F02083367AE55AAB64522425908966818EEEBE94D5F + BCD56C5EAB9428F2C38CE4D625F797B733012A6A5ECAC9958422CB00369B4D26 + 55AE33B02C72AF64FEA75E3CD724D7D88C6F903B79DBCF9FD7138474940798CD + 6689BAB8CC4800C1671EA7A36F2A08E4CECB96215A921752057D373ADDEE789A + 21A1D168642A5561194B4AF3280449890480610072D7150402B3D7A62E9494B0 + D5119AC100E285A6D71F27097224533233F3334E85E2FEAF064E7DDA2F663F57 + 21DC01DB867AE7A60D9B0EA7EBF3E6273EFB708DFF45DF758F90C9AB47DE30E1 + 9AE3C191B60EB82F0B204803F8170166C3003FCF0661F2633B042309CB956117 + BE60E83897EC6B4E07CC3BDF85503F9DD2FB16A2606F7F14C8DDCDFCDCE9CB1C + 605FF361249A57AA01BC11A189001C18E27ABB06D6CA91B574F3634959B66260 + E709278890E91E9AD737BE550E64FD81947957DD6E200A353A64AA36C13BED1D + B086ABE312B37C0738A83B32686FA900AC1303EB87D5592988BAA41408CBBE94 + F97B1A9D50226EA272E78E277FC03B102314135A20BA1C50AC2DE6C745EB8B40 + D48F3F9805AF580BF9BEDF7B93374FF4B3BC9E8E45B711566BABBCD4A81D2CB6 + D8AB372A05C3585200E02736BF18F2C36F278F7AC747CFD9755BB630EA22ADCB + 70A803B05E1EFE1D2C6D55BC398EEE636C4A3FF4D3F70FF1C7B4EE99BD0F8763 + D1C9E71D9F839CE2DE605096DA0D16E3FADF0E069F5A5CB839525E5E0E1ACD23 + 86ECFCF56EA3FD18B4BCBF19FC37A6F9CCF14E30A82AAA033A112F5B98F9D593 + BA6886DA5A4DD5F6864F2E8C0D544F5D9D4A01B4BA32EFA4E76AF3BCE762FA27 + 9AB4ECDDBFE340E897B37B923EE81CF0420F57B646EE0E8990A2CBC2255EF5FF + 60A548580BF7708F2FB0399344CD87003AF1EFDC1146E9907B01A0D1F1004CCC + 254E70E62FA7CFA543FE3560726B3E3A7BE916EE2A38C0E2DFE731A4A1E21E4A + 745CF86CE838F32B77D3FC01CF05F8A9B438C37F0000000049454E44AE426082} + Name = 'PngImage19' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000001B74944415478DA + B5943D2C044114C7DF6A5CA150894204052AD14B7C14D7701D9D44EB4A854434 + BE3A89E28A0BD128080DA7388ABB444E88904B705710111FA5467D91DB9D9D31 + 6F6677CFB9B998DD75AFD8F9DCFF6FDEBCFDAFC118834686810063BB3CC9FB47 + 8AF52988475241C585B6036089C1DA0D7345FE88478C7F030841FF5137CB0A60 + F5395C2156FA95597A80D3F377161BEBF953C7223694BE4C20361563D324109B + 598442762B3800D75110C54DCB167D14C638CEDEC0CE7E3A3800D76C14E4E284 + C81641160761A4CFF2C100388745213617B628942DC2019801952D9180ECE55D + 30804D2950CAE0F0D586E98BDAFA27064A106D3321775DD4074C8C763B93F2E4 + 16BF92965D06F5FC5118FE84ABDB077DC0F88804C8821271E7AD074D10C61F6C + B639E501A2439D62567E2D4464D09EFC08A4EC65B0DC6754D520B997A9DAD0D5 + D10B61FC719FD9AC0096D6376A5E5C5B988730FEF00086A1FE9F9DE4DE42F9C3 + 37C0AF3F7C035C7FE049F1C41240C518A1652703D71F5A00953F4C47D86BC555 + 71805303D71F5A00953F4C2703B7B5BCB104E48B4FFA00953F7E9E5C05283EBE + F8ABC16F7FE8843640E50FDDF0008D8C6F397A5EEFE9EAF0950000000049454E + 44AE426082} + Name = 'PngImage20' + Background = clWindow + end> + Bitmap = {} + end + inherited JvFormStorage: TJvFormStorage [7] + OnSavePlacement = JvFormStorageSavePlacement + OnRestorePlacement = JvFormStorageRestorePlacement + end + inherited JvAppRegistryStorage: TJvAppRegistryStorage [8] + end + inherited dsDataTable: TDADataSource [9] + end + object GridPopupMenu: TPopupMenu + Images = SmallImages + Left = 72 + Top = 88 + object Modificar1: TMenuItem + Action = actModificar + end + object Duplicar1: TMenuItem + Action = actDuplicar + end + object Eliminar1: TMenuItem + Action = actEliminar + end + object N1: TMenuItem + Caption = '-' + end + object Nuevo1: TMenuItem + Action = actNuevo + end + object N2: TMenuItem + Caption = '-' + end + object Previsualizar1: TMenuItem + Action = actPrevisualizar + end + object Imprimir1: TMenuItem + Action = actImprimir + end + end +end diff --git a/Base/uEditorGrid.pas b/Base/uEditorGrid.pas new file mode 100644 index 0000000..3048c0c --- /dev/null +++ b/Base/uEditorGrid.pas @@ -0,0 +1,234 @@ +unit uEditorGrid; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent, + JvNavigationPane, ActnList, TB2Dock, TB2Toolbar, TBX, TB2Item, + ImgList, PngImageList, StdActns, TB2ExtItems, TBXExtItems, uViewGrid, + uEditorDBBase, DB, uDADataTable, Menus, JvFormAutoSize, + uDAScriptingProvider, uDACDSDataTable, AppEvnts, JvAppStorage, + JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, uCustomView, + uViewBase, uViewBarraSeleccion, dxLayoutLookAndFeels, JvComponentBase; + +type + IEditorGrid = interface(IEditorDBBase) + ['{CB8CDE00-B225-4A1D-9A5C-EC6FBE2C854B}'] + end; + + TfEditorGrid = class(TfEditorDBBase, IEditorGrid) + tbxEditFiltro: TTBXEditItem; + tbxFiltro: TTBXToolbar; + TBXItem7: TTBXItem; + GridPopupMenu: TPopupMenu; + Modificar1: TMenuItem; + Eliminar1: TMenuItem; + N1: TMenuItem; + Nuevo1: TMenuItem; + TBXLabelItem1: TTBXLabelItem; + actQuitarFiltro: TAction; + N2: TMenuItem; + Previsualizar1: TMenuItem; + Imprimir1: TMenuItem; + TBXSeparatorItem14: TTBXSeparatorItem; + TBXItem33: TTBXItem; + actDuplicar: TAction; + TBXSeparatorItem15: TTBXSeparatorItem; + TBXItem34: TTBXItem; + Duplicar1: TMenuItem; + frViewBarraSeleccion: TfrViewBarraSeleccion; + procedure tbxEditFiltroChange(Sender: TObject; const Text: String); + procedure FormShow(Sender: TObject); + procedure actPrevisualizarExecute(Sender: TObject); + procedure actConfPaginaExecute(Sender: TObject); + procedure actImprimirExecute(Sender: TObject); + procedure actQuitarFiltroExecute(Sender: TObject); + procedure actModificarExecute(Sender: TObject); + procedure actEliminarExecute(Sender: TObject); + procedure actDuplicarUpdate(Sender: TObject); + procedure actDuplicarExecute(Sender: TObject); + procedure JvFormStorageSavePlacement(Sender: TObject); + procedure JvFormStorageRestorePlacement(Sender: TObject); + procedure actRefrescarExecute(Sender: TObject); + private + FViewGrid : IViewGrid; + protected + procedure SetViewGrid(const Value : IViewGrid); virtual; + function GetViewGrid: IViewGrid; + function GetSelectionBarVisible: Boolean; + procedure SetSelectionBarVisible(const Value: Boolean); Virtual; + function GetMultiSelection: Boolean; + procedure SetMultiSelection(const Value: Boolean); + public + property ViewGrid: IViewGrid read GetViewGrid write SetViewGrid; + constructor Create(AOwner : TComponent); override; + destructor Destroy; override; + property MultiSelection : Boolean read GetMultiSelection write SetMultiSelection; + property SelectionBarVisible : Boolean read GetSelectionBarVisible write SetSelectionBarVisible; + end; + +implementation + +uses + uDataModuleBase, uCustomEditor, cxGridTableView; + +{$R *.dfm} + +{ +********************************* TfEditorGrid ********************************* +} +destructor TfEditorGrid.Destroy; +begin + FViewGrid := NIL; + inherited; +end; + +function TfEditorGrid.GetViewGrid: IViewGrid; +begin + Result := FViewGrid; +end; + +procedure TfEditorGrid.SetViewGrid(const Value: IViewGrid); +begin + FViewGrid := Value; + if Assigned(FViewGrid) then + begin + FViewGrid.PopupMenu := GridPopupMenu; + FViewGrid.OnDblClick := actModificar.OnExecute; + end; +end; + +procedure TfEditorGrid.tbxEditFiltroChange(Sender: TObject; const Text: String); +begin + if Assigned(ViewGrid) then + ViewGrid.Filter := Text; +end; + +procedure TfEditorGrid.FormShow(Sender: TObject); +begin + inherited; + if Assigned(ViewGrid) then + ViewGrid.ShowEmbedded(Self); +end; + +procedure TfEditorGrid.actPrevisualizarExecute(Sender: TObject); +begin + inherited; + ViewGrid.Preview; +end; + +procedure TfEditorGrid.actConfPaginaExecute(Sender: TObject); +begin + inherited; + ViewGrid.PrintSetup; +end; + +procedure TfEditorGrid.actImprimirExecute(Sender: TObject); +begin + inherited; + ViewGrid.Print; +end; + +procedure TfEditorGrid.actQuitarFiltroExecute(Sender: TObject); +begin + if Assigned(ViewGrid) then + begin + tbxEditFiltro.Text := ''; + ViewGrid.Filter := ''; + end; +end; + +procedure TfEditorGrid.actModificarExecute(Sender: TObject); +begin + inherited; + ViewGrid.SyncFocusedRecordsFromGrid; +end; + +procedure TfEditorGrid.actEliminarExecute(Sender: TObject); +begin + ViewGrid.SyncFocusedRecordsFromGrid; // Esto va ANTES del inherited. No cambiar. + inherited; +end; + +constructor TfEditorGrid.Create(AOwner: TComponent); +begin + inherited; + actModificar.ShortCut := ShortCut(VK_RETURN, []); +end; + +procedure TfEditorGrid.actDuplicarUpdate(Sender: TObject); +begin + if Assigned(dsDataTable.DataTable) then + (Sender as TAction).Enabled := (not dsDataTable.DataTable.IsEmpty) + and not (dsDataTable.DataTable.State = dsInsert) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfEditorGrid.actDuplicarExecute(Sender: TObject); +begin + ViewGrid.SyncFocusedRecordsFromGrid; // Esto va ANTES del inherited. No cambiar. + inherited; +end; + +procedure TfEditorGrid.JvFormStorageSavePlacement(Sender: TObject); +begin + inherited; + if Assigned(ViewGrid) then + ViewGrid.StoreToRegistry; +end; + +procedure TfEditorGrid.JvFormStorageRestorePlacement(Sender: TObject); +begin + inherited; + if Assigned(ViewGrid) then + ViewGrid.RestoreFromRegistry; +end; + +procedure TfEditorGrid.actRefrescarExecute(Sender: TObject); +var + FocusedRow, TopRow : Integer; +begin + ViewGrid.SyncFocusedRecordsFromGrid; + + TopRow := (ViewGrid.Grid.ActiveView.Controller as TcxGridTableController).TopRowIndex; + FocusedRow := ViewGrid.Grid.ActiveView.DataController.FocusedRowIndex; + + inherited; + + ViewGrid.Grid.ActiveView.DataController.FocusedRowIndex := FocusedRow; + (ViewGrid.Grid.ActiveView.Controller as TcxGridTableController).TopRowIndex := TopRow; + // ViewGrid.Grid.ActiveView.Controller.TopRowIndex := TopRow; + +// ViewGrid.SyncFocusedRecordsFromDataSet; +end; + +function TfEditorGrid.GetMultiSelection: Boolean; +begin + Result := ViewGrid.MultiSelection; +end; + +function TfEditorGrid.GetSelectionBarVisible: Boolean; +begin + Result := frViewBarraSeleccion.Visible; +end; + +procedure TfEditorGrid.SetMultiSelection(const Value: Boolean); +begin + ViewGrid.MultiSelection := Value; +end; + +procedure TfEditorGrid.SetSelectionBarVisible(const Value: Boolean); +begin + frViewBarraSeleccion.Visible := Value; +end; + +initialization + RegisterClass(TfEditorGrid); + +finalization + UnRegisterClass(TfEditorGrid); + +end. + diff --git a/Base/uEditorItem.ddp b/Base/uEditorItem.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uEditorItem.ddp differ diff --git a/Base/uEditorItem.dfm b/Base/uEditorItem.dfm new file mode 100644 index 0000000..8e40506 --- /dev/null +++ b/Base/uEditorItem.dfm @@ -0,0 +1,54 @@ +inherited fEditorItem: TfEditorItem + Left = 457 + Top = 278 + Width = 686 + Height = 535 + BorderIcons = [biSystemMenu, biMaximize] + Caption = 'fEditorItem' + PixelsPerInch = 96 + TextHeight = 13 + inherited JvNavPanelHeader: TJvNavPanelHeader + Width = 678 + Visible = False + inherited Image1: TImage + Left = 651 + end + end + object pgPaginas: TPageControl [1] + Left = 0 + Top = 76 + Width = 678 + Height = 406 + ActivePage = pagGeneral + Align = alClient + TabOrder = 1 + object pagGeneral: TTabSheet + Caption = 'General' + end + end + inherited TBXDock: TTBXDock + Width = 678 + inherited tbxMain: TTBXToolbar + inherited TBXItem5: TTBXItem + Visible = False + end + end + inherited tbxMenu: TTBXToolbar + inherited TBXSubmenuItem4: TTBXSubmenuItem + inherited TBXItem10: TTBXItem + Visible = False + end + end + end + end + inherited StatusBar: TStatusBar + Top = 482 + Width = 678 + end + inherited EditorActionList: TActionList + Top = 104 + inherited actEliminar: TAction + ShortCut = 0 + end + end +end diff --git a/Base/uEditorItem.pas b/Base/uEditorItem.pas new file mode 100644 index 0000000..e8ab46b --- /dev/null +++ b/Base/uEditorItem.pas @@ -0,0 +1,41 @@ + +unit uEditorItem; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorBase, ActnList, JvExControls, JvComponent, + JvNavigationPane, ComCtrls, StdActns, TB2Dock, TB2Toolbar, TBX, TB2Item, + ImgList, PngImageList, JvFormAutoSize, JvAppStorage, + JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, + dxLayoutLookAndFeels, JvComponentBase; + +type + IEditorItem = interface(IEditorBase) + ['{F6A412D1-59AA-41D2-ADD5-C92687CD5387}'] + end; + + TfEditorItem = class(TfEditorBase, IEditorItem) + pagGeneral: TTabSheet; + pgPaginas: TPageControl; + end; + +var + fEditorItem: TfEditorItem; + +implementation + +uses uDataModuleBase; + +{$R *.dfm} + +initialization + RegisterClass(TfEditorItem); + +finalization + + UnRegisterClass(TfEditorItem); + + +end. diff --git a/Base/uEditorPSPreview.dfm b/Base/uEditorPSPreview.dfm new file mode 100644 index 0000000..a3f98e6 --- /dev/null +++ b/Base/uEditorPSPreview.dfm @@ -0,0 +1,15 @@ +object Form1: TForm1 + Left = 580 + Top = 506 + Width = 320 + Height = 240 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + PixelsPerInch = 96 + TextHeight = 13 +end diff --git a/Base/uEditorPSPreview.pas b/Base/uEditorPSPreview.pas new file mode 100644 index 0000000..683b402 --- /dev/null +++ b/Base/uEditorPSPreview.pas @@ -0,0 +1,24 @@ +unit uEditorPSPreview; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, dxPSPrVw; + +type + TForm1 = class(TCustomdxPSPreviewWindow) + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +end. diff --git a/Base/uEditorPreview.ddp b/Base/uEditorPreview.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uEditorPreview.ddp differ diff --git a/Base/uEditorPreview.dfm b/Base/uEditorPreview.dfm new file mode 100644 index 0000000..4d2ed1e --- /dev/null +++ b/Base/uEditorPreview.dfm @@ -0,0 +1,800 @@ +inherited fEditorPreview: TfEditorPreview + Left = 484 + Top = 297 + Caption = 'Previsualizar' + WindowState = wsMaximized + OnDestroy = FormDestroy + OnResize = FormResize + PixelsPerInch = 96 + TextHeight = 13 + inherited JvNavPanelHeader: TJvNavPanelHeader + Visible = False + end + inherited TBXDock: TTBXDock + Height = 75 + inherited tbxMain: TTBXToolbar + Top = 49 + DefaultDock = TBXDock + Visible = False + end + inherited tbxMenu: TTBXToolbar + Visible = False + end + object TBXToolbar1: TTBXToolbar + Left = 0 + Top = 23 + Caption = 'TBXToolbar1' + DefaultDock = TBXDock + DragHandleStyle = dhNone + ParentShowHint = False + ShowHint = True + TabOrder = 2 + object TBXItem39: TTBXItem + Action = actImprimir + DisplayMode = nbdmImageAndText + Images = SmallImages + end + object TBXSeparatorItem18: TTBXSeparatorItem + end + object tbxMano: TTBXItem + Action = actToolHand + AutoCheck = True + Checked = True + DisplayMode = nbdmImageAndText + GroupIndex = 1 + Images = PreviewSmallImageList + end + object TBXSeparatorItem14: TTBXSeparatorItem + end + object tbxZoom: TTBXItem + Action = actToolZoom + AutoCheck = True + DisplayMode = nbdmImageAndText + GroupIndex = 1 + Images = PreviewSmallImageList + end + object TBXItem42: TTBXItem + Action = actTodaPagina + Images = PreviewSmallImageList + end + object TBXItem41: TTBXItem + Action = actAnchoPagina + Images = PreviewSmallImageList + end + object TBXItem40: TTBXItem + Action = actZoomOut + Images = PreviewSmallImageList + end + object cbZoom: TTBXComboBoxItem + Caption = 'Zoom' + ReadOnly = True + OnItemClick = cbZoomItemClick + end + object TBXItem37: TTBXItem + Action = actZoomIn + Images = PreviewSmallImageList + end + object TBXSeparatorItem17: TTBXSeparatorItem + end + object TBXSeparatorItem16: TTBXSeparatorItem + end + object TBXItem35: TTBXItem + Action = actPrimeraPagina + Images = PreviewSmallImageList + end + object TBXItem34: TTBXItem + Action = actPaginaAnterior + Images = PreviewSmallImageList + end + object TBXItem33: TTBXItem + Action = actPaginaSiguiente + Images = PreviewSmallImageList + end + object TBXItem36: TTBXItem + Action = actUltimaPagina + Images = PreviewSmallImageList + end + object TBXSeparatorItem15: TTBXSeparatorItem + end + object TBXItem7: TTBXItem + Action = actCerrar + Images = SmallImages + end + end + end + inherited EditorActionList: TActionList + Top = 104 + inherited actImprimir: TAction + OnExecute = actImprimirExecute + end + end + inherited SmallImages: TPngImageList + Left = 43 + Top = 104 + end + inherited LargeImages: TPngImageList + Left = 75 + Top = 104 + end + inherited JvFormStorage: TJvFormStorage + Left = 376 + Top = 136 + end + inherited JvAppRegistryStorage: TJvAppRegistryStorage + Left = 408 + Top = 136 + end + object PreviewActionList: TActionList + Images = PreviewSmallImageList + Left = 344 + Top = 104 + object actPrimeraPagina: TAction + Category = 'Preview' + Caption = 'Primera p'#225'gina' + ImageIndex = 0 + OnExecute = actPrimeraPaginaExecute + end + object actUltimaPagina: TAction + Category = 'Preview' + Caption = #218'ltima p'#225'gina' + ImageIndex = 3 + OnExecute = actUltimaPaginaExecute + end + object actPaginaAnterior: TAction + Category = 'Preview' + Caption = 'P'#225'gina anterior' + ImageIndex = 1 + OnExecute = actPaginaAnteriorExecute + end + object actPaginaSiguiente: TAction + Category = 'Preview' + Caption = 'P'#225'gina siguiente' + ImageIndex = 2 + OnExecute = actPaginaSiguienteExecute + end + object actZoomIn: TAction + Category = 'Zoom' + Caption = 'M'#225's zoom' + ImageIndex = 8 + OnExecute = actZoomInExecute + end + object actZoomOut: TAction + Category = 'Zoom' + Caption = 'Menos zoom' + ImageIndex = 9 + OnExecute = actZoomOutExecute + end + object actTodaPagina: TAction + Category = 'Zoom' + Caption = 'Toda la p'#225'gina' + ImageIndex = 4 + OnExecute = actTodaPaginaExecute + end + object actAnchoPagina: TAction + Category = 'Zoom' + Caption = 'Ancho de p'#225'gina' + ImageIndex = 5 + OnExecute = actAnchoPaginaExecute + end + object actToolHand: TAction + Category = 'Tools' + Caption = 'Mano' + ImageIndex = 10 + OnExecute = actToolHandExecute + end + object actToolZoom: TAction + Category = 'Tools' + Caption = 'Zoom' + ImageIndex = 6 + OnExecute = actToolZoomExecute + end + end + object PreviewSmallImageList: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000F14944415478DA + C5D2A10EC2301006E01B4F30893C39C59619EC70937B843D014C829B0339DEA0 + 1289638EC9C9E1160C9553A43882A0B45DC80223A30112CE346DFA7F697A6770 + CEE19B327E0A8C663BB5A14506348D8CE7CBDEB4E0DBB96D7402518010C5A405 + C8B0840F9B493710FA08F1E21190E1D0B7C5F9F23D10780849D200F7705102AC + D73A8023005203F73065A08022D3003C0B81AC08A0E3810C33115600156BAE01 + 3888E2A9F50BDC71CE07EE105875025A01B09268007D01A4CD1F48E4DAB3809D + 657F35001440963E764122C78BA50798268ACF6ACF8142F6F97B400E8B9AC617 + 93887EC23B814FEAFFC00D0E3CD3E1153EE1F30000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000A34944415478DA + 63FCFFFF3F032580912606303232628839545CF8BFBF5D9F912C03409A1F5C38 + C0707F7B3EE90680342778E83334744C24DD0098E60B371818366C20D10098E6 + 071F18C0065C384082018E9517C19A3F0035830D7800A44F90E802A3BC13FFF5 + 8CCC193EBCF8C8F0E00503C3871B0B480F039021FF9834183EFC00721E906100 + CC9077BF34C837006EC8AD13E41B00020A1E13FE136D002960E00D000045F48A + E13771044B0000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000A44944415478DA + 63FCFFFF3F03258091260638565EFC7FA0C380115D1C9B5A9C067CFAF683E1DC + 240B46B20D48F0D06798B4EE248A21241BF0E10703C3A26D0843483220C0419F + E1C10706860F407CE91AC410920C70B0506078F0829FE1C2838F0C1F1E3C009A + 7480E1FEF67C46A20D30D0506038708301AEF9C18E02D25C202020C070E1C207 + B86692C3800118800F6E2034936CC0830BA89A493680A294480A18780300CF22 + A8E18A4EF6A30000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000EC4944415478DA + C5D2A10EC2301405D0DB2FA012F9246E95C8E290FB04FE8049703890842F5850 + 2882021CB5185210044725B220086E74908D40C252020937A97BF7A479792C49 + 127C13F673A0D65E27AA27D8EBA06CE97C70D10D5821703A5FB01A54D92B1085 + 84A813633F6B16038D7A80C178F984A440A34EE8F43C017B0186D3079202A124 + F4FB1E402803180B58F736DB3B72038403620F405609E65082364758639CA440 + 42425608F1C803106E50ED9097CD3CBAFD40106132F10038E7D0DAE6E56C07A2 + EC80B90700B740B37B9433801CA07C00A39FCB19C039412B0FE0DD25A6709A42 + E0D3FC1FB8020318D0E1923D9C4B0000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000017E4944415478DA + 630C9B1C9ACFC0C03081813C50C00834E07F7E400E51AAFFFEFBC3F0EBDF7786 + 9F7F2138C9268F01C58073FBBF113444C9EA0B58F38469B3192E2DBB8C69404E + AC07568DBFFE303058F86431D44EB264F8053460DACC25B80DA89FBC1FC38092 + 144706FBC02C86F27E03B00BE6CE594B9C0B4036FFFC0DA15D43B31872BB95C0 + 062C5FB09B341764C4383278476631A4754882BDB076F111FC2E40B619860363 + B318125A05187E026362CBD2B3A4B92036D491212C218B21B2999DE1C7DF6F0C + 7B565CC76E4072B807D8E6BFFF1036FFFE0BA16352B218021BFE82C3E0F0EA07 + 080372FC3218FEFEFFCD70E5D07F8698200F86FE79982E08F4756448CAC862F0 + AA05A5836F0CA7D6BD421890E6130F36F5DE311E86303F0F145B616C1048C9CC + 6270AE7A05567B71E3678401F19E6160C1A7274519E62DDD843725DA943F04BB + E0C696BF080322DC7CC151034BE390F4FE0DCA47D07FFEFF01D37F81F4EDAD8C + 0803829C5DC04993540033207F57D36EB2B2B35B9D6B0100103839527F8C36D7 + 0000000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001714944415478DA + 630C9B1C9ACFC0C03081813C50C00834E07F7E400E51AAFFFEFBC3F0EBDF7786 + 9F7F2138C9268F016EC099973B18F253E4198E6ED6C4A9D9CEFF36C3C4390F19 + 64793519264C9BCD7069D9658801D6962A60CDC40290216B171F411880CF05BF + A0CE05D17E619FC09A05D8C519E6CE598B6AC0B9FDDF8876018BEE6986E50B76 + 631A9013EB8153D3AF3F0C0C3F7F3330D807663124B40A607A016640FDE4FD58 + 0D2849716458B86607C3BCA59B18229BD919B62C3D4B9C0B603683E8E51B2006 + 0436FC65D8B3E23A692EC888716458BB05628057ED1786C3AB1F200CC8F1CB60 + B878F0178A0B906D86E1CD3B20063857BD6238B5EE15C280349F7886EB8799F1 + BA2036D49161C76E880136E50F192E6EFC8C3020DE338CE1DE311EB001D86CFE + FD1742EFDB0F31C0B4E43AC38D2D7F110644B8F9323C3D29CA901CEE81A219A6 + 11C63E7604628051F16586DB5B1911060439BB304C9BB984E88404033003F277 + 35ED262B3BBBD5B9160000C8E01B524AB937870000000049454E44AE426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002E64944415478DA + 8D936B4893511CC6FF67DA74BAC9BC9478C9357338CC4B0EBC1709F929A25414 + A13E48082D8CFC20267E1B925DD004B3120C75919AA99B5DADD485E56DA2791D + 739ABA2D9DB7A953379D6EEF5EDFDE14859C810F3C5F0ECFF33BFFF38783E0FF + 425902A13B668448DCB4C5B658709C40D8F0A4563120A97FB1B61F3AAC291008 + EDB1630ED7ECECA97C6F7F6FAEABB72BCDB46902B54CAD5BD4CCF7AAC68772C5 + 6F8A06C8286E05484EAEB3F10BB6A49FE2B2F2C2628318E0C440063300410050 + 910596D4B344F7BBB63169FBA7B4D6E65AA915205320E47A9EF4ECB89A7CCE85 + CDA021950141E2BD2E9049645029E683BB3301EB2AE5F657E15B4955457EAA15 + 205B5095CD8BE33D0C8BE0523C1002B50120E5C12EE03509D8A60078386EC1B7 + F2066DA3A89C8FFE1DBF9076CADFADFA4A467C829E70829C82AE43B79B97150D + B3522956F3F4C9B3030001DD87C3AE49C84CBCBC646640FCA5D29DF3A0B8A09D + 09F62469E1C3A4B4D7F2EAF1A3DA834FA064DC2D2D8E4DB9984E63F922ED2A02 + 161DE04EE1EE13D4ED7CB090CB5CD9C6E1439978A3FE655189D50E52D37263CE + 4486374725C5D2168DF6C88E2CE414ED02942400030246C6A7087149C5688DF0 + 7EC63EE0F38DB3C79974A8ECB70B7459649E0F64F17854767800C588D390830D + 02172A19226F5E58D211DFEB9AF40DD5CFCB46E5DD0568AFECC6C43FFA470747 + 2CEBF420D2048072C57ED3CB2F846005F9D19CBD4E80C96882B9F16942D1DBA7 + FBD15C2B960F77159355056AB919E0E3E24C17F9C58487E1737218966D429386 + 01F235CB8589854D87D3DCD0448613938D61669B89B1C1099552DEB9AA9B9790 + E559D204FA99C5EBF78D0A0FB5D5ABA0BF6F0D7AA66CA1757CC4B862D808E9D6 + 9826C990236927D236A4B748AF92C6F6FF82243F890861AE817CC8001D6A0A74 + 2A478D1AFD7A926CC6FC058E20743BEDFA2F1ECC70B45A0CDA2614CB5AFDFAAD + BE19B3E828E51D009FCFE710C6F546ED680F473DFF3B7E70DAFCFEA8E5BFFA03 + 503A4EA60D6AAC070000000049454E44AE426082} + Name = 'PngImage6' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000AEB00000AEB01828B0D5A000002E44944415478DA + 8D936B48D35118C6DFB379D9D4C9BC94A8CB399B38CC4B0E9C9A45427D8C5251 + 82FA2021B430F08398F4258650145A615642A12E4A31AF6565795958A69B685E + C7BCB4B92D9D3AA74E7771BAFD37FFFDA728E40A7CE0FDF6FC9E73DE877310FC + 5FA850200CC22C90ECB06EB1EC76870347D8F88C6E7244D4F8D2B06FFA172910 + 082998BBD7154F8A079F11C5E0043002A8D64D2BA8A56AFDB2463BA8928F1537 + BF2D1B21AC0E9780ECEC06323BCE9E17CE61DE4D4C8BA5812F0D996C00380EE0 + 81ECB0A25EC0FBDFF74C4B7E7CCAEDEEAC97B8041408849C906321BD97B24FFB + B36854A43221106B01ECCE007780203F1CCC2AE576BBF09DA8A6BA24C725A048 + 5053C43DCFBD9F98C4210523046A13C0D0320099BCBBF0360920D87B0BBE56B5 + E8DA9AAAF8E8EFEB3FA2864705D65ECC4FCF30E2BE70BB54ECD28F542485D676 + 3E2C482458DDD327CF0E04087CC222597519059917566C34B8F358BC031C94A8 + 8B0F339241FBEB870FEA0FAE40CABFF5A23CEDF2B93C2A3302E9D611307D0002 + 29006EC4D529A4DD2ED6B61DF0A1B279A3F15559854B0739B9C5A92792799D29 + 5969D4650B05791200C31B804A74E046B831C061423E8B3757544FD509EFE5EF + 077CBE76F208DD07DE0C7BC6F82FD3CFC430B95C0F162F9A64715091171981BF + 0761224E5E5AD1E3DF1A3A8C2DB5CF2BA764FDA5680F0EA43B3E469D8A4B5AD5 + 1BA149130DCA35CA66283B1E67C6B2A97EA147C16AB1C2A27C0E9F1C1CD27FEF + AC6F968D8BCB097412755D8F0EF3F7F36962A7F2121D8B3218976E4287860632 + 83FDAC6269D3EB38272193E64B6761988DAC981E55A894B2BE75BD5644C00BC4 + E0E867217738228597E06654C1F090010666DDA05B3E6159336DC4F76BAC3384 + 8968007C8971BE842D62D6C159C5DE5F109564E1F17403C8C64CD0AB26419F72 + CAA2319AB3A4F3B62F7008A19BB9577F71613E52A7C3A04731B9AA339A6F0CCD + DB9A0E03EF04F0F9FC48DC626ED34D0D44AAB5BFD347E76CAD87859DFA0386D8 + 3FA68502A9830000000049454E44AE426082} + Name = 'PngImage7' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C8086787B4DDF8FFEBD76F869F3F7F33EC6C37 + 824BA05B88D300BF86CBFFA3A35419A6CFB8C870A0CF9C7403DC2BCFFD8F88D4 + 66983DEB34C3B12936C41910DA7E13EE6C100E0D37609837E7180358EC0708FF + 6278B0218011A701FE8D57C0CEFEF68391E1DB770630FD1D88BF7C07E26F8C0C + 6B17AE6178B1230CB7011E55E7FF836C86B9C23FC48661C9BC5D609B7F40F187 + 0331B80D400E03DDF85DFF3D039D1856CEDFCCF0706320E981A816BEF5BF8BBF + 07D8D92F7786936E80BCFFFAFF30677F3C184B9C01E480616000007F3BB6E1E0 + 0AF3B40000000049454E44AE426082} + Name = 'PngImage8' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000714944415478DA + 63FCFFFF3F03258071D4002A1B10DA7E13CC01897DFDFA83E1DBB71F60FAFBB7 + 9F0C9F3F7F03E3F7FBA219F11A1013A500E77FFCCCC8F0EA1D23C38BB74C0CCF + 5E3131AC9E3397E1F7E914DC0684B4DDF88FCBE62F9FBF33FCF9F397E1FFF974 + DC060C7C208E1A401E0000EFE473E127272ED00000000049454E44AE426082} + Name = 'PngImage9' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001C74944415478DA + A5934D4B5B411885CF5D9982288874EB0F306E5CBA9A646514E33536264AE456 + 5184528AE0424A043751FCC08228E24788894631D5D6D12C5C08EA2A74512AD8 + E4070822EE44A3E255CC386F24264AAE5978609881B9E739EFCCBC571142E03D + 5208A0284ADECDA08FB9E4342087EFF3C04124772F139C1790319614C3DCE456 + B116E2D0EF11CF051502FCD7BA54F37A98C3E951110E70783A5584FC3C2E0155 + 0501DB534C34389F92DD9A342E7068DD2A96FC1CD296AE44F3EE470C019B934C + A8AE6CF2E29C9C3B6C5809EEC0EEA84194C7E212506508D8F8C144735B36D93F + 232B69B72212DE43BDBD1A5BBFFFA1C7B7AF3C03424396C6B252F08714709184 + F94311E22DEDD9E4C0FC0E9CEE1AFC8AC4505B5789E876025F867300D1694BFA + CCA49FCB1C046AD5B2C94B813D383E3D25334B0576778FF17524074047C8944D + A2B3BB3C36E8BA8E3BFD363DEEEF74DC5C5F2179718ED89F4B7C1B7B0520AD8E + 3241C9F4B191F93A798943F90EBDE37900A4908F0987CB6A6826FD3D02FA260C + 0024FF201374DBF9CCA767B7F28E4CF07C7F03409AF532411796319391747266 + C2C77298651F240AFE4C53FD4CA4E48BA464FBD1CBD09ACCB29D132F5AF93D7A + 04D7A238F0C903C3480000000049454E44AE426082} + Name = 'PngImage10' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 371 + Top = 104 + Bitmap = {} + end + object PreviewLargeImageList: TPngImageList + Height = 24 + Width = 24 + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000001894944415478DA + 63FCFFFF3F032D01E3F0B4C0B1F2228AE0810E03467C8638545CF8BFBF5D1FAB + 1A9C1604D9E980D97D93A6303CD851C088CFF007170E30DCDF9E4F7D0B408683 + D481D450DD0298E1DF7EFE679831732A752D4036FCDBAF7F0C8BE64F27CF82AF + 3FFE33CC9C3515C50274C3BF03E9D5CB66906E81BB9936C3E7EFFF18962D9E0E + B7009BE1DF7FFD67D8B26626E91658E96A022DF8CFB079CD0CB005B80CFFF693 + 8161DF66322CD055D160F80C0CA2035B663228183830E032FC0B50CDA9DDB348 + B74041469DE1D3B77F0CE7F6CD06FBC028EFC47F1F6B430CC3BFFEF8C770F5F0 + 1CD22D10125265F8F0F53FC3BD9373E07100B2C44A4F1FC5F0AF400B1F9C9A4B + BA054CEC2A0C1F813E787B791E4A2A0259A222AF07371C64D19B4BF348B7E0F3 + 5F25A00FFE31FCBDB700231F802CE113D0061B0EC23F6ECD27DD82C79F1418FE + FE03721E2CC09A9341967C63D064F8018C0F901A922D78F04101C2C16101CC92 + 77BF34686701DC925B27C8B0005804C3003E0B4040C163C27F922CA02618B580 + 200000A0D9B0E00198A13A0000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000000FA4944415478DA + 63FCFFFF3F032D01E3F0B680919111AF66878A0BFFF7B7EBE35544B60520C31F + 5C38C0707F7B3EF52D00191E64A7C3D037690AF52D8019FEEDE77F861933A752 + D70264C3BFFDFAC7B068FE74EA59806EF87720BD7AD90CEA5880CDF0EFBFFE33 + 6C593393720B7019FEED2703C3BECD145AE0587911A7E15F7EFC6738B57B16E5 + 3E30CA3BF1DFC7DA10C3F0AF3FFE315C3D3C873A7100B2C44A4F1FC5F0AF400B + 1F9C9A4BBD5404B244455E0F6E38C8A23797E651371F802CE113D0061B0EC23F + 6ECDA77E4E0659F28D4193E107303E181E2CA04D5904B2E4DD2F0DDA5900B7E4 + D609DA5900020A1E13FE53640135C0A805040100D3AF21E00AC8E9BE00000000 + 49454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000012E4944415478DA + 63FCFFFF3F032D01E3F0B6C0B1F2E2FF031D068CF80C20E440BC16D8955FF9FF + F5C7578673932C705A429105B6400BF2037518DA979FC469094516D8945DFD5F + 10A40D66E3B284220BACCBAEFD2F0CD202B37FFDF9CFD0BBFA148625145A701D + 688126D8F0EFBFFE337CFBF99F61C18E33289650648155E98DFF39FEEA70C3C1 + F8D73F862D47CFC32DA1C802CBD29BFF533C55510CFFFE13E29B63972E822DA1 + C8028B929BFFA39D55300CFFF69381E1CB8FFF0CA776CF62B8BF3D9F916C0BCC + 4B6EFD0FB251C269F8831D0594F9C0ACF8F67F4F73799C86531C07A6C577FE3B + 1AC8E2349C620B4C8AEEFEB7D496C66938152CB8F75F5F450AA7E1145B605C74 + FFBF8A8C044EC329B6C0A8F0C1FFF73736E2349C620B0C0B1FFEBF30418176F5 + 0135C0A80504010058FB49E08BBA20470000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000001C24944415478DA + 63FCFFFF3F032D01E3F0B4C0B1F2E2FF031D068CF834DA965D46D178A85307AB + 7AAC16D8955FF9FFF5C7578673932C705A02B220D44113CCEE9B3485E1FEF67C + E22DB0055A901FA8C3D0BEFC244E4B28B2C0A6ECEAFF82206D301B9725145960 + 5D76ED7F61901698FDEBCF7F86DED5A7302CA1D082EB400B34C1867FFFF59FE1 + DBCFFF0C0B769C41B10466C1D71FFF1966CE9A4A9A0556A537FEE7F8ABC30D07 + E35FFF18B61C3D0FB7046481978506C3E7EFFF18962D9E4E9A0596A537FFA778 + AAA218FEFD27C437C72E5D045B02B2C0565F0D68C17F86CD6B6690668145C9CD + FFD1CE2A18867FFBC9C0F0051824A776CF6290D5736630505365F80CE41FD832 + 93340BCC4B6EFD0FB251C269F8831D05601F28CBA9307CFAF68FE1DCBED9A459 + 60567CFBBFA7B93C4EC36171202AA2C4F0E1EB7F867B27E790668169F19DFF8E + 06B2380D8759C0CAA9C8F011E883B797E791668149D1DDFF96DAD2380D8759F0 + EDBF3CD007FF18FEDE5B40AA05F7FEEBAB48E1341C66C1B32FB20C7FFF01390F + 48B4C0B8E8FE7F1519099C86C32C78FC4916C221D502A3C207FFDFDFD888D370 + 8A2D302C7CF8FFC2040582F5C1E34B7BE17C922CA02618B5802000000BFCA8E0 + E6ADB53E0000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000002344944415478DA + 63FCFFFF3F032D0123C882F02961F940F6042A9B5DB03267D5449805FFF30372 + C832E51FC35F863FFF7E31FCFEF713887F41D9BF18526C0A19DEBF7ACF489105 + 7FFE430C86190AA3A74C5FC87069D965FC169CDBFF8D24CB642C5EC32D993173 + 397116E4C47AE035F4EFBFFF0CBFFFFC65B0F2CB63A89C680CF7C1DCD96B29B7 + 0066F89C957B18E62DDDC450DAAF0BF7C1C2B99B89B7A07EF27E9C9614275932 + 2C5A77006C4141AF3ADC07CBE6EF24DF073097FFFAFD87E1F7EFBF0CCB371F06 + 5B90D3AD08F7C1AA85FBA9E383CC48638635DB8F812D48ED9060F8FD1F62C1C6 + C52748F701BACB21ECBF0C9BF69C045B90D02E04CF0FDB969EA78E0FA2FD7418 + 761D3A0BB620A695079ED9762FBF8ADF0250EEBCB0FF27D8825F409722BB18CE + 868AEF3F7E016C4178332B3C0EF6AFBC8DDB0258D6BF72F03F435AA42B43EBF4 + 43387D10E8AAC670E4F465B005418DFFE1417464F523EC1620972B370FB33124 + 8638E174394CFCD4856B600BFCEA7FC283E8E4DA179816E40664A2145AF78EF2 + 30C404D8E3351CC43E7FF526D802F79AF7607D20FD17367CC2B420D32F19A544 + 7C745C8821CCDB06AFE120F6959B77C0163855BD84177C5736FDC0B420C93B12 + A5447C794A9A21D0CD9261FDAEE30C8400C802DB8A4770BD37B7FCC3B420D633 + 18A5D87D7B4611AC915860597607ACF7DFFFBF0CB7B732625A10E9EE8BE20314 + 1AADDCC7C506190E02582D087175A78AE1382D087076045714D402E816E4EF6A + DA4DD54ADFADCE1551E9D31200008EE53CFED5D704CB0000000049454E44AE42 + 6082} + Name = 'PngImage5' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000003154944415478DA + B5956D48536114C7CFC89022883E288415547E48F243651451425A6A929361A2 + 0E13D14553985AA411944A5A4804622AE9AC25CBDCD0125F4B526CD87C2F75E8 + 544C83B23EE45829E6667AEFEEEDDE3377756D6B1BD98167CFB37BEEF9FFCE39 + CF81CBA3691A783C1ED8B300F1043D28F5B3EF64ED50390D9A14877ED4667F62 + 4B633298FF45EB9D1FB579B8EFF7CF71A8CFBE33D8DF0931A20E7BEE2B3592DA + 0716009D2190709EF43BDE902EF48562E5B45544F12D1DFAD65B5CC401C8CA96 + 425BFD4E20A8152099C5EE974E5D8539DD1CCF066011D7FDF400EF1D24279428 + 914177B39FD99FE08BCFBECC52603018F15C505803F5B55B51BCB44C0E238A51 + 5BC049FE04C88B4428CE9A716909F4FA1F60342E81EC5987154037E7012B0401 + 8B8B065CEC595AF91A140A0ACAA54AFB00D658C8FD7C3127AEFF6E0634B60E73 + 80E4A85D306FF0E4C4170D06A8AC56A1385B81EC519D7DC090CA5C6E5AE16748 + BB1C0125152D56FD7E98B91764EA3D78B1164B8A0F42F1A7B907711A57F6F580 + 5CD6EC182049388781BCC352F3A80D8BED4E1045D1B029A002CFF36F13813499 + 20242E0BC4F77C40C1B4CA29C002B10760C54913059EC71E73E2CA66353CA96E + 02518117D4CA55AE011C65CE8A13A4094892427182D95FB47623E0E2DD6DD058 + D5E71C905BA202572C5578940199A0A1BD0F01B1F99BE155F5B0FB15B0D912A6 + D5AC194182A902AB612B61CE2D6F061010759B8676E5987B007BE224D722F36A + 530F22203277195435531BD7A278BE3FDE87AA578380F0EC05E87A3EE35A05AE + 646EB96CF5BB11049CBDA987FEBA6FB68034412A6854CB1CC01D7176927A87C6 + 1010786306340D0BB680D44811683B6904B041F9659D2EB52832D817C7F4FDC8 + 04024E5C9F066DD32F5B40F279214C756D811461A85B9913ABEF69C63F20E068 + E6384CB650B68084F00BF0A9673B2445075B055314E5549C7DAE9D9C46C0916B + A330F592670B1086F1E16B9F1724084E637071D5804B2D0A3ABE1B77A780E890 + 30981DF001213FD02AB3BF5D36C5C45ACC29407026083F141B657F0232DAF2DA + 8BFE5D76CD427342D63EFAFFD37E031AD161FE86E3B8C60000000049454E44AE + 426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A0000053A4944415478DA + AD956B50546518C79F73CE2ECB5ED9B3ECB22C48800A02CA45101BBCA005D9D4 + 4C17758C6FD57899FAE0D4871AB3CC6B5FD2748CA91877600AB3A949CA4427E3 + A65C1409729565B92CEEB2807B935DD80BECB2B773F6F4420A5841493D33E7D3 + 7BDEDFEF39FFF799F760F058C5601F2BAB443E079B0C077DF250304086432117 + CDC6AD3EA77FACAC6CAF77EAA5B93BB07F8B3EFD55A37872CC95C7E5725E6671 + 584F4570D871188E7182815068D2E3354E38DC17273C8E2B9DC33A4D735599E7 + B10495E76FC63B6CCED7F8A4708F58267A429620C5C4B1628C601310F006C06E + 1A656CF7ECA151B3ADDB366256EA07BB2EFEF4CD19FBF427FF13FCA4F29214A3 + 88BD9218F2CDB4DCA531B1F1122C40B0C11B02A0C37F74C822502A011F63EA37 + 33BACEBB8377BBD5A75B9B7EF956A3B9E15C50B063C77922AF20622B29979CC8 + 29484D4C7F428647E038DCF703BC70E826681A34F0F9B15720398F0452C0000F + 0FC1B0C640AB9A3ABA55ED8DEFFD5C5D797541C1A7E5D5F2E024766C59CEB29D + F96B5388380E0BC351CFEE2040E187B3024516096C1680044958FE71467D4D1D + AAABAE52B65D6F38BAA0E0E8890B05B21871E5AAC28C94D8043926A601F80480 + 651260DB47B382F47C12BC14008ED6A2793458D4FDE196CBB53D576BBE7B635E + C1543C2B32A8ED4B33932A5617670929161F761EB9396F330F6519EB49A06C56 + 4655D3EA3A5B7162DF0282C3112969A9AFA7E7A794E61467478E072360FD66E5 + CC7A6671E634746E4D0956AD2301BC4EE8ACFDD5AF2C3DF2C9BC824D9B0EB30A + 3624EF589EBDBC3CB7389B1F2004A06A76CEAC2B5BFA66BA9E5B1B3693601DB6 + 30B7EB5B3D155F1C2B5DF00C0E1CAE2C8C8E8B399BFB744EA2302E16333B3020 + D08E680EC09EE3B367B0BD98041A4D2A9A5AF08469E8EAE8635A2E5D19BCF07D + D9A90505EF1CA84814F1F92757ADCFDC96929F8A8F4DA2F9F7014421C1C62DCA + 9958B622C154518866754E80A6454D55559EA96F69AA3E3EAF40B57FCB726D50 + C0D2466DD9268D4F7C376B6396589A28C7EC1E0218344D7DEDB371BD84040CC6 + 80C31F64746A1DEABECE5873F9EBB33A9DFAB3BF15B41F78A690C7659A3D9152 + D044AE8500AE08B1F83266C593692C91428A071836BA0470E0A2B1E4A10747E1 + 38C6BD8C65C014EEBCFE9BA3B1EEC7DAB6EB57CA298A6AFB8BA0637FF18B3C11 + 5D91B03A534684ECA0712583C61D0316271EE408E4DEA495295162B904E39242 + 60B1D998DFE367D04507F6210BD577476DBD73BBF9467B5BED799FC7D38470EE + 47041D1F146D1788C22715B9EB92843C0A5CDA4EE8B708A163221E8C7E4269F3 + B0FB2339FC2269AC224D1EAF904444B2591E97276C1A1A720E1B740383035DB7 + 7A7B54F5341DB88D702E987BD94D752E10D3A58ABC8D4922AE7F1A6E30B2C130 + 26048DD50A23E38EE7CBEB354D19196B93A3158A748C2696D1B43F0AC5002EF7 + 98C334ACEFF47ADD030835821EDF432EF630733E9FFA217ECD3A998817828981 + 2ED0E93130B824A0350D41B7590F6E7FF0B9BA2E67CD833DE8E6017410403CE0 + 4C4D68706A90E0CF3F1CD5C1E2A24801D1B0243707F85C149AF60E188609E877 + 4483D6A8875E8BDEE5F4516F35F6B8CEC1220AEB39FE2CB3247B25F0055C14CB + 2D1834B2C0E010836678007AAD7ABBCB1B3C78AD775CB918F8B4A0FE5409B366 + 752A50860E1832A1CC4705A0351B416DEC7721F8FBD7FAC6CF2C163E2D38B4EF + 6D2647781F12682F82F3A0CF6C821EF3008C7A03AF2E36964704BB77EF629688 + F9407A6CE01CB987E006704FFA76D575BBBFFCAFF06941494949915020688811 + F1E15E4F2BD82CFA5D63DDEE732A80D0FF21F81D69327688E78891A000000000 + 49454E44AE426082} + Name = 'PngImage7' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300000AEB00000AEB01828B0D5A000005234944415478DA + AD956B4C53671880DF7329BD9CB6B4A5174A454005112F205E16DCD46C3097ED + C7B2690CFFB665BAE80FB3FDD8E2DC8C739AFD984EE3C8326203D9702E5B069B + 139D8E9B82283299454AB9147B81DA9BB4D00BB4F476DAB3AF80896E02D3ED24 + 5F4E4ECEF99EE7FDDEEF7DBF83C1135D0CF6B9BA4E18F2B0C4896848118B46C4 + 8958CC1767E1CE90373C5E59B92F98FCE8E119D8BF459FFAB6553435EE5BC7E5 + B25F23D9E4F3296C56068663EC6824169B0A04AD931EFFF9C980E7728FC5A0BB + 5657197822414DED4D95C7E57D93120BDE11C9848B6599524C942EC208160191 + 6004DCB631C675CF1D1BB3BBFA5CA376B571B8F7FCAFDF9F764F2F7921F809F5 + 05294613FB2472F1DEFCE225F27495048B102C08C600E2899908490265251262 + 6C4376C6D07377F86E9FF65447DBEF3FE87437BCF30A76EEAC25D695A4BC2E56 + 488E1795E465AD582CC353701CEE870106BD00D1F84C0E481C40CC678087C7C0 + A233C7356D5D7D9A5BAD1F5EAAAFB932AFE0CBAA7A45740A3BBAB468E9DB1B36 + E612196C12C311D11F05E81E07F044101F9B192C12408224647882D15ED5C69A + EAEBD49DD75B8ECC2B3872FC5C894C2EAA59B5A520373D53818950C41401E098 + 0218F2CD940B8F35B38A200D80A37769BC3838B44389F68B8DFD571A7EDC33A7 + 20999EE505F48E25ABB3ABD796AD11D024056EEFC2BBC6E502D02E27A369E8F0 + 9DA93EBE7F1EC1E194DCFCBCB7566CC8AD282A2BE44C445360EF6737E704EB5A + 7470E9B73D4071D043D00B3D8D7F84D5159F7E31A760EBD6C364C973393B9715 + 2EAB2A2E2BA422041F4AB6AAE78D3E295009019C1607D3DDDC11A8FEFA68C5BC + 0B3E78B8664B5A86FC4CF10B4559828C74ECBE77E1B6C9498D436FD720D37EE1 + F2F0B99F2A4FCE3BE3FD83D559428A3AB1EAD9D5DB7337E4E1E353A8FE4300A9 + 6C00394A059B98ED83590A8DEE4EEF24E8DAB5745DCDE9E6F6B6FA63730A3407 + B62DD347F9A43E75DB76A92AEB83359BD788A4590ACC1D208041D5244896650A + 2A4FD4033896DC7C063CE12863D01A50F44DD6868BDF9D3118B45F3D5670EBE0 + 8B5B785CE65A8023051D67234470658CA464CCF267F249A1528A4718549B0C0E + 5CB4021E1A3824C03311641C265BA2E7FA9F9ED6A65F1A3BAF5FAEA269BAF31F + 82AE0365AFF284F1EACCB5AB6544CC0D3A5F0EE8FC727078F1289BAF0866AFCC + 4D15292418572C0092C5C2C28130830E3A708F38E8C13B5AE79DEE6B376E7536 + D68602813684F33F22E8FAB874075F9838A12CDE942DE0D1E0D3F7C09043005D + 932AB08609B52BC01AE2B0A95269BA325FA1524A52382C32E00B246C23235E8B + D9601A36F5DE1EE8D734C7E3916E8443ADF850DB2423E78BE215CA759BB385DC + F034DC6C6581795C003AA71346273CAF5435EBDA0A0A36E6A429952BB038B134 + 1E0FA7A23480CF3FEEB1598C3DC1A0DF8450A368841E70B10739A728FA67D5FA + 4D32212F0693A65E30183130FB24A0B78D409FDD08FE70F4E5A65E6FC3EC1CB4 + C5903C2488590E3A57219A2C24F8FB0F4773A8AC94C3275A1615170185DADCAF + BF03660B01439E34D05B8D30E030FABC21FADDD67EDFD9059BE03117D67FEC25 + 6651E14AA0F85C9496DB306C25C1EC1181CE628201A7D1ED0B460F5D1D98503F + 0D7C5AD07CB29C59BF360F6873178CD850CEC7F8A0B75B416B1DF221F8475707 + 274E3F2D7C5AF0C9FEF79822C17DC88C07119C0783761BF4DB4D30168CBCF1B4 + 697944B07BF72E6691880271C005DED17B086E06FF546857539FFF9BFF0A9F16 + 949797970AF8FC16B990827BFD1DE07218778DF7F9CF6A0062FF87E02F9F6855 + 88E7298D620000000049454E44AE426082} + Name = 'PngImage6' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000001324944415478DA + 63FCFFFF3F032D0123DD2C606464C4A9C8A5EF22862BF614E9E3D480EC68A22D + C8F05765F8FDE72F10FF63888B5ECEC0702183BA16247B2B810DFF03B424297E + 15F52D887357001B0EB2243D790DF52D887296051B0E0AA69CF4F5D4B720D45E + 1A6CF89FBF7F190AB23651DF82006B09B0E1205F94E66D21DD02D7FE4B783384 + 8F85283C88AA8AB633B8C459E254BBBB508F11AB05C8491116A1B06081B1C172 + 28FCBF0CBF7E0331880DA4174F3ECBF0FF7C3A760B909322398683D82B675CC0 + 6D01725224C770107BFD9CCBB82DD8B3E838F6480686B7A52637DCF0DEC683F8 + A20BBB05845291892A27DCE5935A8F503F99EA2BB2C1836546D771EA5BA025CB + 0C0FE7797DA7A86F818A04034A52A4BA057222A84991EA1648F2FF42498A54B7 + 002309936A01ADC0D0B700000ADFCFE01EDA3C000000000049454E44AE426082} + Name = 'PngImage8' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD2520000007C4944415478DA + 63FCFFFF3F032D01E3A805A3168C5A80B0C0B5FF12D56CDA5DA8C788D5829C20 + 751485BFFFFC65F8F1F30FC38F5FBF19BE83E89F501ACAFFF6E317C3B7EFBF21 + F40F087D68CD3D86FFE7D3095B408EE13F7EFD6138B5E911610BC8351C04F05A + B067D171AAC401560B6805462D18B560D4023A5800007B57E2D1072B1BE80000 + 000049454E44AE426082} + Name = 'PngImage9' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000002E84944415478DA + A5957D48144118C69F2B29B3FA23222C02598AA48F3B4A304A839C120C925022 + 4AA2F2B3B313FB80A0C20E333F52FC2348C24AC49490D4C414394D4D4F33112B + C1F0233090C9D0142BA920AFDA73DAD975E5923BDDB5178679776EEFF9CD3CF3 + CEAC8131061E0683010B457126392175D699C7CC186B6BB9BBF7544D595727A0 + 373A21D238D8DF83CE4EDA27014CFF0D5067BD7C198CD3D3C0C9984870404707 + 057FF6F242DFDCD5E805CCCEFA5517C5A93805D0DE4E117F4EC9E7AE4617E071 + 2E615167668520C1E4BCAD8DE26C929237355124E7B41A160528CD21CCD59658 + B392DBED1489C94ADED048B1CA0758B254B12BFABABD5C33E0D12DC2DCD9D2DC + 4C61B9A0E4F5CF284E4707E3F3F8A86C9704306906487BC03CD992743102EF07 + DEC2564761B61CC4C8872154D7505CB96337680614A513E6C9164B72388606FB + 516B93C0E6FD181B19465535C5B53C1D80C234C23CD992981486E1A141D4D44A + D6252816555651A4DCD5012848254C8B2DB171BB31F96502159514D67C378092 + AC03EA356094DA6C5DDFB712A6DAF2E923C5BED07088E21F74B5352260AF620B + 1FF73706E0C7B749943DA148BDE71E201F289EAB1B6A4E6F35E4A710C66DE1EF + BD68A8C19E9030389D22DEBC6C812930184E0936D0F31A9BB79AE4F1E29277B8 + F1C03D40AE163554CFF975C06D718AA23C732EA2E4A22CAEF4A23CFECB3185D2 + 328A9B051E5610142418FD77ECFA07A2568B1671DE2AAAC69151E86193F98686 + 84085021FC37AD3397DBD4149EDABE23AB689E2AE29E87860AD8B27DA76E7187 + E3276CCF45643F5CA04CF3AE1276284C80DF267F5DE27CBCBE05C829D1700E6E + 5F262CFCB080F51BFD348B8F8E39F05BF4764877D10A4D072DF71261114704AC + 59BB6E41711E9DDDC0065F44E9BA4DB3CF1376345280CFCAD5F38AABB397D240 + 09D0AF19C023C342D8F163829C7B12EFEEF586691BA2F8A773511FFD34B3B492 + 085F7C9D1897055DC3555C2D6FDD001ED678C2F8C99E96FEC2783F93BB8ACF05 + FC0592430CFE3F77C7A70000000049454E44AE426082} + Name = 'PngImage10' + Background = clWindow + end> + PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled] + Left = 403 + Top = 104 + Bitmap = {} + end + object frxReport1: TfrxReport + Version = '3.23.7' + DotMatrixReport = False + EngineOptions.DoublePass = True + IniFile = '\Software\Fast Reports' + PreviewOptions.Buttons = [pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind, pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator] + PreviewOptions.Zoom = 1.000000000000000000 + PrintOptions.Printer = 'Default' + ReportOptions.CreateDate = 38658.858023541660000000 + ReportOptions.LastChange = 38658.858023541660000000 + ScriptLanguage = 'PascalScript' + ScriptText.Strings = ( + 'begin' + '' + 'end.') + StoreInDFM = False + Left = 16 + Top = 200 + Datasets = <> + Variables = <> + Style = <> + end + object frxBarCodeObject1: TfrxBarCodeObject + Left = 16 + Top = 240 + end + object frxOLEObject1: TfrxOLEObject + Left = 48 + Top = 240 + end + object frxChartObject1: TfrxChartObject + Left = 16 + Top = 272 + end + object frxRichObject1: TfrxRichObject + Left = 48 + Top = 272 + end + object frxCrossObject1: TfrxCrossObject + Left = 80 + Top = 240 + end + object frxCheckBoxObject1: TfrxCheckBoxObject + Left = 80 + Top = 272 + end + object frxGradientObject1: TfrxGradientObject + Left = 16 + Top = 304 + end + object frxDotMatrixExport1: TfrxDotMatrixExport + UseFileCache = True + ShowProgress = True + EscModel = 0 + GraphicFrames = False + SaveToFile = False + UseIniSettings = True + Left = 48 + Top = 304 + end + object frxDialogControls1: TfrxDialogControls + Left = 80 + Top = 304 + end + object frxTIFFExport1: TfrxTIFFExport + ShowDialog = False + UseFileCache = True + ShowProgress = True + Monochrome = True + Left = 144 + Top = 240 + end + object frxPDFExport1: TfrxPDFExport + ShowDialog = False + UseFileCache = True + ShowProgress = True + PrintOptimized = False + Outline = False + Author = 'FastReport'#174 + Subject = 'FastReport'#174' PDF export' + Background = False + Creator = 'FastReport'#174' (http://www.fast-report.com)' + HTMLTags = False + Left = 144 + Top = 280 + end + object frxBMPExport1: TfrxBMPExport + ShowDialog = False + UseFileCache = True + ShowProgress = True + Monochrome = True + Left = 144 + Top = 320 + end +end diff --git a/Base/uEditorPreview.pas b/Base/uEditorPreview.pas new file mode 100644 index 0000000..169d2d9 --- /dev/null +++ b/Base/uEditorPreview.pas @@ -0,0 +1,308 @@ +unit uEditorPreview; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uEditorBase, ImgList, PngImageList, StdActns, ActnList, TBX, + TB2Item, TB2Dock, TB2Toolbar, JvExControls, JvComponent, JvNavigationPane, + TB2ExtItems, TBXExtItems, uViewPreview, frxClass, ComCtrls, frxPreview, + JvFormAutoSize, JvAppStorage, JvAppRegistryStorage, JvFormPlacement, + pngimage, frxExportImage, frxExportPDF, frxDCtrl, frxDMPExport, + frxGradient, frxChBox, frxCross, frxRich, frxChart, frxOLE, frxBarcode, + ExtCtrls, dxLayoutLookAndFeels, JvComponentBase; + +type + IEditorPreview = interface(IEditorBase) + ['{7E79BEFC-C817-43D9-A60F-9573D1777068}'] + function GetReport: TfrxReport; + property Report: TfrxReport read GetReport; + procedure LoadFromStream(AStream : TStream); + function ExportToFile : String; + end; + + TfEditorPreview = class(TfEditorBase, IEditorPreview) + TBXToolbar1: TTBXToolbar; + TBXItem7: TTBXItem; + TBXItem33: TTBXItem; + TBXItem34: TTBXItem; + TBXItem39: TTBXItem; + TBXSeparatorItem14: TTBXSeparatorItem; + TBXSeparatorItem15: TTBXSeparatorItem; + TBXSeparatorItem16: TTBXSeparatorItem; + cbZoom: TTBXComboBoxItem; + PreviewActionList: TActionList; + PreviewSmallImageList: TPngImageList; + PreviewLargeImageList: TPngImageList; + actPrimeraPagina: TAction; + actUltimaPagina: TAction; + actPaginaAnterior: TAction; + actPaginaSiguiente: TAction; + TBXItem35: TTBXItem; + TBXItem36: TTBXItem; + actZoomIn: TAction; + actZoomOut: TAction; + actTodaPagina: TAction; + actAnchoPagina: TAction; + TBXSeparatorItem17: TTBXSeparatorItem; + TBXItem37: TTBXItem; + TBXItem40: TTBXItem; + TBXItem41: TTBXItem; + TBXItem42: TTBXItem; + frxReport1: TfrxReport; + actToolHand: TAction; + actToolZoom: TAction; + tbxZoom: TTBXItem; + tbxMano: TTBXItem; + TBXSeparatorItem18: TTBXSeparatorItem; + frxBarCodeObject1: TfrxBarCodeObject; + frxOLEObject1: TfrxOLEObject; + frxChartObject1: TfrxChartObject; + frxRichObject1: TfrxRichObject; + frxCrossObject1: TfrxCrossObject; + frxCheckBoxObject1: TfrxCheckBoxObject; + frxGradientObject1: TfrxGradientObject; + frxDotMatrixExport1: TfrxDotMatrixExport; + frxDialogControls1: TfrxDialogControls; + frxTIFFExport1: TfrxTIFFExport; + frxPDFExport1: TfrxPDFExport; + frxBMPExport1: TfrxBMPExport; + procedure FormShow(Sender: TObject); + procedure actPrimeraPaginaExecute(Sender: TObject); + procedure actUltimaPaginaExecute(Sender: TObject); + procedure actPaginaAnteriorExecute(Sender: TObject); + procedure actPaginaSiguienteExecute(Sender: TObject); + procedure actZoomInExecute(Sender: TObject); + procedure actTodaPaginaExecute(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure actImprimirExecute(Sender: TObject); + procedure actAnchoPaginaExecute(Sender: TObject); + procedure actZoomOutExecute(Sender: TObject); + procedure cbZoomItemClick(Sender: TObject); + procedure actToolHandExecute(Sender: TObject); + procedure actToolZoomExecute(Sender: TObject); + private + FPreview : TfrViewPreview; + function GetReport: TfrxReport; + procedure OnPageChanged(Sender: TfrxPreview; PageNo: Integer); + procedure UpdateZoom; + public + constructor Create(AOwner: TComponent); override; + property Report: TfrxReport read GetReport; + procedure Print; + procedure LoadFromStream(AStream : TStream); + function ExportToFile : String; + end; + +var + fEditorPreview: TfEditorPreview; + +implementation + +uses + frxRes, frxUtils, frxPrinter, uCustomEditor, uSysFunc, + frxFormUtils; + +{$R *.dfm} + +{ TfEditorBase1 } + +function TfEditorPreview.GetReport: TfrxReport; +begin + Result := frxReport1; +end; + + +procedure TfEditorPreview.FormShow(Sender: TObject); +begin + inherited; + UpdateZoom; + actPrimeraPagina.Execute; + FPreview.ShowEmbedded(Self); + Report.ShowPreparedReport; +end; + +procedure TfEditorPreview.actPrimeraPaginaExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.First; +end; + +procedure TfEditorPreview.actUltimaPaginaExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.Last; +end; + +procedure TfEditorPreview.actPaginaAnteriorExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.Prior; +end; + +procedure TfEditorPreview.actPaginaSiguienteExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.Next; +end; + +procedure TfEditorPreview.actZoomInExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.Zoom := FPreview.Preview.Zoom + 0.25; +end; + +procedure TfEditorPreview.UpdateZoom; +begin + cbZoom.Text := IntToStr(Round(FPreview.Preview.Zoom * 100)) + '%'; +end; + +procedure TfEditorPreview.actTodaPaginaExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.ZoomMode := zmWholePage; + UpdateZoom; +end; + +procedure TfEditorPreview.FormDestroy(Sender: TObject); +begin + inherited; + FPreview.Free; +end; + +procedure TfEditorPreview.FormResize(Sender: TObject); +begin + inherited; + UpdateZoom; +end; + +procedure TfEditorPreview.actImprimirExecute(Sender: TObject); +begin + inherited; + if not frxPrinters.HasPhysicalPrinters then + frxErrorMsg(frxResources.Get('clNoPrinters')) + else + FPreview.Preview.Print; + Enabled := True; +end; + +procedure TfEditorPreview.actAnchoPaginaExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.ZoomMode := zmPageWidth; + UpdateZoom; +end; + +procedure TfEditorPreview.actZoomOutExecute(Sender: TObject); +begin + inherited; + FPreview.Preview.Zoom := FPreview.Preview.Zoom - 0.25; +end; + +procedure TfEditorPreview.cbZoomItemClick(Sender: TObject); +var + s: String; +begin + FPreview.Preview.SetFocus; + + if cbZoom.ItemIndex = 6 then + actAnchoPagina.Execute + else if cbZoom.ItemIndex = 7 then + actTodaPagina.Execute + else + begin + s := cbZoom.Text; + + if Pos('%', s) <> 0 then + s[Pos('%', s)] := ' '; + while Pos(' ', s) <> 0 do + Delete(s, Pos(' ', s), 1); + + if s <> '' then + FPreview.Preview.Zoom := frxStrToFloat(s) / 100; + end; + + UpdateZoom; +end; + +procedure TfEditorPreview.actToolHandExecute(Sender: TObject); +begin + if tbxMano.Checked then + FPreview.Preview.Tool := ptHand +end; + +procedure TfEditorPreview.actToolZoomExecute(Sender: TObject); +begin + if tbxZoom.Checked then + FPreview.Preview.Tool := ptZoom; +end; + +procedure TfEditorPreview.OnPageChanged(Sender: TfrxPreview; + PageNo: Integer); +var + FirstPass: Boolean; +begin + FirstPass := False; + if Sender.PreviewPages <> nil then + FirstPass := not Sender.PreviewPages.Engine.FinalPass; + + if FirstPass then + StatusBar.Panels[0].Text := frxResources.Get('clFirstPass') + + IntToStr(Sender.PageCount) + else + StatusBar.Panels[0].Text := Format(frxResources.Get('clPageOf'), + [PageNo, Sender.PageCount]); +end; + +constructor TfEditorPreview.Create(AOwner: TComponent); +begin + inherited; + + with cbZoom.Strings do + begin + Clear; + Add('25%'); + Add('50%'); + Add('75%'); + Add('100%'); + Add('150%'); + Add('200%'); + Add(frxResources.Get('zmPageWidth')); + Add(frxResources.Get('zmWholePage')); + end; + + FPreview := TfrViewPreview.Create(Self); + Report.Preview := FPreview.Preview; + FPreview.Preview.OnPageChanged := OnPageChanged; +end; + +procedure TfEditorPreview.Print; +begin + actImprimir.Execute; +end; + +function TfEditorPreview.ExportToFile: String; +var + AFile : String; +begin + Result := ''; + AFile := DarFicheroTIFFTemporal; + frxTIFFExport1.SeparateFiles := False; + frxTIFFExport1.DefaultPath := ExtractFilePath(AFile); + frxTIFFExport1.FileName := ExtractFileName(AFile); + try + if Report.Export(frxTIFFExport1) then + Result := AFile; + finally + frxTIFFExport1.DefaultPath := ''; + frxTIFFExport1.FileName := ''; + end; +end; + +procedure TfEditorPreview.LoadFromStream(AStream: TStream); +begin + Report.PreviewPages.LoadFromStream(AStream); +end; + +end. diff --git a/Base/uEditorUtils.pas b/Base/uEditorUtils.pas new file mode 100644 index 0000000..a067ae9 --- /dev/null +++ b/Base/uEditorUtils.pas @@ -0,0 +1,116 @@ +unit uEditorUtils; + +interface + +uses + uEditorItem, uDADataTable, Controls, Menus; + +type + IEditorMenu = interface + ['{29E76095-8F08-48E0-9F97-50ACFF63BEA5}'] + function GetEditorMenu: TMainMenu; + end; + + TFuncItemEditor = function(ABizObject : TDADataTableRules) : TModalResult; + TProcItemEditor = procedure(ABizObject : TDADataTableRules); + TFuncGetEditor = function : IEditorItem; + + TEditorType = (etItem, etItems, etSelectItem, etSelectItems); + +procedure RegisterEditor(const IID : TGUID; const AFuncItemEditor : TFuncItemEditor; + const AType : TEditorType); + +function ShowEditor(const IID : TGUID; ABizObject : TDADataTableRules; + const AType : TEditorType) : TModalResult; + + +implementation + +uses + Dialogs, Classes, ComObj, SysUtils; + +var + FBizEditorsList : TList; + +type + PBizEditorsRec = ^TBizEditorsRec; + TBizEditorsRec = record + IID : String; + ItemEditor : TFuncItemEditor; + ItemsEditor : TFuncItemEditor; + SelectItemEditor : TFuncItemEditor; + SelectItemsEditor : TFuncItemEditor; + end; + + +function FindBizEditors(const IID : TGUID) : PBizEditorsRec; +var + P: PBizEditorsRec; + I: Integer; + AIID : String; +begin + Result := NIL; + AIID := GUIDToString(IID); + if FBizEditorsList <> nil then + for I := 0 to FBizEditorsList.Count-1 do + begin + P := FBizEditorsList[I]; + if (AIID = P^.IID) then + begin + Result := P; + Break; + end; + end; +end; + +procedure RegisterEditor(const IID : TGUID; const AFuncItemEditor : TFuncItemEditor; + const AType : TEditorType); +var + P: PBizEditorsRec; +begin + P := NIL; + if FBizEditorsList = nil then + FBizEditorsList := TList.Create; + + P := FindBizEditors(IID); + if not Assigned(P) then + New(P); + try + P^.IID := GUIDToString(IID); + case AType of + etItem : P^.ItemEditor := AFuncItemEditor; + etItems : P^.ItemsEditor := AFuncItemEditor; + etSelectItem : P^.SelectItemEditor := AFuncItemEditor; + etSelectItems : P^.SelectItemsEditor := AFuncItemEditor; + end; + FBizEditorsList.Insert(0, P); + except + on E: EConvertError do + ShowMessage(E.Message); + end; +end; + +function ShowEditor(const IID : TGUID; ABizObject : TDADataTableRules; + const AType : TEditorType) : TModalResult; +var + P: PBizEditorsRec; +begin + P := FindBizEditors(IID); + + if Assigned(P) then + case AType of + etItem : Result := P.ItemEditor(ABizObject); + etItems : Result := P.ItemsEditor(ABizObject); + etSelectItem : Result := P.SelectItemEditor(ABizObject); + etSelectItems : Result := P.SelectItemsEditor(ABizObject); + end; +end; + + +initialization + FBizEditorsList := TList.Create; + +finalization + FBizEditorsList.Free; + +end. diff --git a/Base/uExceptions.pas b/Base/uExceptions.pas new file mode 100644 index 0000000..51749c2 --- /dev/null +++ b/Base/uExceptions.pas @@ -0,0 +1,21 @@ +unit uExceptions; + +interface + +uses + uDADataTable; + +const + AUF_FKVIOLATION = 'violation of FOREIGN KEY'; + AUF_HAVEVALUE = 'must have a value'; + AUF_HAVEVALUE2 = 'value required'; + +type + IApplyUpdateFailedException = interface + ['{B090A762-3D65-405E-A810-14DB4F6E8F82}'] + procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); + end; + +implementation + +end. diff --git a/Base/uSysFunc.pas b/Base/uSysFunc.pas new file mode 100644 index 0000000..f4c26f4 --- /dev/null +++ b/Base/uSysFunc.pas @@ -0,0 +1,249 @@ +{ +=============================================================================== + Copyright (©) 2002. Rodax Software. +=============================================================================== + Los contenidos de este fichero son propiedad de Rodax Software titular del + copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, + en su totalidad o en parte, con el permiso escrito de Rodax Software, o de + acuerdo con los términos y condiciones establecidas en el acuerdo/contrato + bajo el que se suministra. + ----------------------------------------------------------------------------- + Web: www.rodax-software.com +=============================================================================== + Fecha primera versión: 01-11-2002 + Versión actual: 1.0.0 + Fecha versión actual: 01-11-2002 +=============================================================================== + Modificaciones: + + Fecha Comentarios + --------------------------------------------------------------------------- +=============================================================================== +} + +unit uSysFunc; + +interface + +{ Funciones del sistema } +function Ejecutar (const LineaComando: String; Oculto, Esperar: Boolean) : Boolean; +function DarRutaTemporal : String; +function DarFicheroTemporal : String; +function DarFicheroBMPTemporal : String; +function DarFicheroTIFFTemporal : String; +function DarFicheroExportar (var Fichero : String) : Boolean; +function DarVersionFichero (Executable : String) : String; +function DarFechaFichero (Executable : String) : String; +procedure CopiarFichero(const Origen, Destino: string); +procedure DoDelTree( TheDir : String); +procedure Deltree(DirToKill : String; KillChoosenDir : Boolean); + + +implementation + +uses + SysUtils, Windows, Dialogs, + + Messages, Classes, Graphics, Controls, Forms, + StdCtrls; + +function Ejecutar (const LineaComando: String; Oculto, Esperar: Boolean): Boolean; +var + StartupInfo : TStartupInfo; + ProcessInfo : TProcessInformation; +begin + {setup the startup information for the application } + FillChar(StartupInfo, SizeOf(TStartupInfo), 0); + with StartupInfo do + begin + cb := SizeOf(TStartupInfo); + dwFlags:= STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; + if Oculto then + wShowWindow:= SW_HIDE + else + wShowWindow:= SW_SHOWNORMAL; + end; + + Result := CreateProcess(nil,PChar(LineaComando), nil, nil, False, + NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo); + if Esperar then + if Result then + begin + WaitForInputIdle(ProcessInfo.hProcess, INFINITE); + WaitForSingleObject(ProcessInfo.hProcess, INFINITE); + end; +end; + +function DarRutaTemporal: String; +var + nBufferLength : DWORD; // size, in characters, of the buffer + lpBuffer : PChar; // address of buffer for temp. path +begin + nBufferLength := MAX_PATH + 1; // initialize + GetMem( lpBuffer, nBufferLength ); + try + if GetTempPath( nBufferLength, lpBuffer ) <> 0 then + Result := StrPas( lpBuffer ) + else + Result := ''; + finally + FreeMem( lpBuffer ); + end; +end; + +function DarFicheroTemporal : String; +var + Buf: array [0..MAX_PATH] of Char; + RutaTmp : string; +begin + RutaTmp := DarRutaTemporal; + if GetTempFileName(PChar(RutaTmp), 'tmp', 0, Buf) <> 0 then + SetString(Result, Buf, StrLen(Buf)) + else + Result := ''; +end; + +function DarFicheroTIFFTemporal : String; +var + Cadena : String; +begin + Cadena := DarFicheroTemporal; + Result := Copy(Cadena, 0, (Length(Cadena)-3)) + 'tif'; +end; + +function DarFicheroBMPTemporal : String; +var + Cadena : String; +begin + Cadena := DarFicheroTemporal; + Result := Copy(Cadena, 0, (Length(Cadena)-3)) + 'bmp'; +end; + +function DarFicheroExportar (var Fichero : String) : Boolean; +var + DialogoSalvar : TSaveDialog; +begin + Result := False; + DialogoSalvar := TSaveDialog.Create(NIL); + try + with DialogoSalvar do + begin + DefaultExt := 'doc'; + Filter := 'Documento de Word (*.doc)|*.doc'; + FilterIndex := 0; + Options := [ofOverwritePrompt, ofHideReadOnly, ofPathMustExist, ofEnableSizing]; + end; + Result := DialogoSalvar.Execute; + if Result then + Fichero := DialogoSalvar.FileName; + finally + DialogoSalvar.Free; + end; +end; + +function DarVersionFichero (Executable : String) : String; +var + Size, Size2: DWord; + Pt, Pt2: Pointer; +begin + Size := GetFileVersionInfoSize(PChar (Executable), Size2); + if Size > 0 then + begin + GetMem (Pt, Size); + try + GetFileVersionInfo (PChar (Executable), 0, Size, Pt); + VerQueryValue (Pt, '\', Pt2, Size2); + with TVSFixedFileInfo (Pt2^) do + begin + Result:= IntToStr (HiWord (dwFileVersionMS)) + '.' + + IntToStr (LoWord (dwFileVersionMS)) + '.' + + IntToStr (HiWord (dwFileVersionLS)) + '.' + + IntToStr (LoWord (dwFileVersionLS)); + end; + finally + FreeMem (Pt); + end; + end; +end; + +function DarFechaFichero (Executable : String) : String; +var + FileTime, LocalFileTime : TFileTime; + SystemTime : TSystemTime; + hFile : Integer; +begin + hFile := FileOpen(Executable, fmShareDenyNone); + try + if hFile <> -1 then + begin + Windows.GetFileTime( hFile, nil, nil, @FileTime ); // ftLasWriteTime + // Change the file time to local time + FileTimeToLocalFileTime( FileTime, LocalFileTime ); + if FileTimeToSystemTime(LocalFileTime, SystemTime) then + Result := DateTimeToStr(SystemTimeToDateTime(SystemTime)); + end; // if hFile <> 0 + finally + FileClose( hFile ); + end; // try +end; + + +procedure CopiarFichero(const Origen, Destino: string); +var + lpMsgBuf : pchar; +begin + CopyFile(PChar(Origen), PChar(Destino), FALSE); +end; + +procedure DoDelTree(TheDir : String); + Var + Search : TSearchRec; + rec : word; +Begin + If TheDir[Length(TheDir)] <> '\' Then TheDir := TheDir + '\'; + rec := SysUtils.FindFirst(TheDir + '*.*', faAnyFile, Search); + While rec = 0 Do + Begin + If Search.Name[1] <> '.' Then + Begin +// Is this a directory? + If (Search.Attr And faDirectory) = faDirectory Then + Begin +// If so, lets call DelTree again using this new +// directory as the TheDir parameter. + DoDelTree(TheDir + Search.Name); +// Not that all of the files are gone from this directoy, +// we can remove the directory. + RmDir(TheDir + Search.Name); + End + Else + Begin +// We found a file. +// Now lets reset its attributes so we don't have any problems +// deleting them. + SysUtils.FileSetAttr(TheDir + Search.Name, 0); + SysUtils.DeleteFile(TheDir + Search.Name); + Application.ProcessMessages; + End; + End; + rec := SysUtils.FindNext(Search); + End; + SysUtils.FindClose(Search); +End; + +procedure Deltree(DirToKill : String; KillChoosenDir : Boolean); +begin +{$I-} + DoDelTree(DirToKill); +// If we want to delete the choosen directory. + If KillChoosenDir Then + RmDir(DirToKill); + //modified + if IOResult <> 0 then + ShowMessage('Could not delete ' + DirToKill); +//{$I} +end; + + +end. + \ No newline at end of file diff --git a/Base/uUtils.pas b/Base/uUtils.pas new file mode 100644 index 0000000..9c1cbdd --- /dev/null +++ b/Base/uUtils.pas @@ -0,0 +1,80 @@ +unit uUtils; + +interface + +uses + uDACDSDataTable, Classes; + + +function getStrList(const ASource : TStringList; const pSep: String): String; +function getArrList(const ASource : TStringList): Variant; +function CompFec(FecIni : TDateTime; FecFin : TDateTime): Integer; + +implementation + +uses + SysUtils, Variants, dialogs; + +function getStrList(const ASource : TStringList; const pSep: String): String; +var + Cadena : String; + i: Integer; +begin + Cadena := ''; + for i:=0 to (ASource.Count-1) do + begin + if i > 0 then + Cadena := Cadena + pSep; + Cadena := Cadena + ASource.Strings[i]; + end; + +// showmessage(Cadena); + + Result := Cadena; +end; + +function getArrList(const ASource : TStringList): Variant; +var + i, j: Integer; + A: array of Variant; + +begin + if (ASource.Count = 0) or (length(ASource.Strings[0]) = 0) then + begin + Result := Null; + exit; + end; + + j:= ASource.Count-1; + if j > 0 then + begin + for i:=0 to j do + begin + SetLength(A, i+1); + if (Length(ASource.Strings[i]) = 0) + then A[i] := '' + else A[i] := Copy(ASource.Strings[i], 0, Length(ASource.Strings[i])); + end; + Result := VarArrayOf(A); + end + else + Result := Copy(ASource.Strings[j], 0, Length(ASource.Strings[j])); +{ + if j > 0 then + for i:=0 to j do + showmessage(VarToStr(A[i])) + else + showmessage(VarToStr(Result)); +} +end; + +function CompFec(FecIni : TDateTime; FecFin : TDateTime): Integer; +begin + if FecIni = FecFin + then Result := 0 + else if FecIni > FecFin + then Result := 1 + else Result := 2; +end; + +end. diff --git a/Base/uViewBarraSeleccion.ddp b/Base/uViewBarraSeleccion.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uViewBarraSeleccion.ddp differ diff --git a/Base/uViewBarraSeleccion.dfm b/Base/uViewBarraSeleccion.dfm new file mode 100644 index 0000000..b08f2d8 --- /dev/null +++ b/Base/uViewBarraSeleccion.dfm @@ -0,0 +1,53 @@ +inherited frViewBarraSeleccion: TfrViewBarraSeleccion + Width = 443 + Height = 38 + Align = alBottom + AutoScroll = False + Visible = False + object pnlSeleccion: TPanel + Left = 0 + Top = 1 + Width = 443 + Height = 37 + Align = alBottom + BevelOuter = bvNone + ParentBackground = True + TabOrder = 0 + DesignSize = ( + 443 + 37) + object bSeleccionar: TButton + Left = 268 + Top = 7 + Width = 74 + Height = 23 + Action = actSeleccionar + Anchors = [akRight] + Default = True + ModalResult = 1 + TabOrder = 0 + end + object bCancelar: TButton + Left = 347 + Top = 7 + Width = 74 + Height = 23 + Action = actCancelar + Anchors = [akRight] + Cancel = True + ModalResult = 2 + TabOrder = 1 + end + end + object ActionListSeleccion: TActionList + Left = 8 + Top = 5 + object actSeleccionar: TAction + Caption = '&Seleccionar' + end + object actCancelar: TAction + Caption = '&Cancelar' + OnExecute = actCancelarExecute + end + end +end diff --git a/Base/uViewBarraSeleccion.pas b/Base/uViewBarraSeleccion.pas new file mode 100644 index 0000000..b09d87f --- /dev/null +++ b/Base/uViewBarraSeleccion.pas @@ -0,0 +1,37 @@ +unit uViewBarraSeleccion; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, StdCtrls, ActnList, ExtCtrls; + +type + TfrViewBarraSeleccion = class(TfrViewBase) + pnlSeleccion: TPanel; + bSeleccionar: TButton; + bCancelar: TButton; + ActionListSeleccion: TActionList; + actSeleccionar: TAction; + actCancelar: TAction; + procedure actCancelarExecute(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frViewBarraSeleccion: TfrViewBarraSeleccion; + +implementation + +{$R *.dfm} + +procedure TfrViewBarraSeleccion.actCancelarExecute(Sender: TObject); +begin + inherited; + // +end; + +end. diff --git a/Base/uViewBase.ddp b/Base/uViewBase.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uViewBase.ddp differ diff --git a/Base/uViewBase.dfm b/Base/uViewBase.dfm new file mode 100644 index 0000000..c27f6c9 --- /dev/null +++ b/Base/uViewBase.dfm @@ -0,0 +1,14 @@ +object frViewBase: TfrViewBase + Left = 0 + Top = 0 + Width = 528 + Height = 325 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + TabOrder = 0 + ReadOnly = False +end diff --git a/Base/uViewBase.pas b/Base/uViewBase.pas new file mode 100644 index 0000000..f553ac3 --- /dev/null +++ b/Base/uViewBase.pas @@ -0,0 +1,33 @@ +unit uViewBase; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uGUIBase, uCustomView, JvComponent, JvFormAutoSize; + +type + IViewInicio = interface(ICustomView) + ['{B567620D-8FE7-4ADC-B9BD-AFC639ED1923}'] + function Control : TControl; + end; + + IViewBase = interface(ICustomView) + ['{E1E559AC-31E8-4E5F-8655-428D12467518}'] + end; + + TfrViewBase = class(TCustomView, IViewBase) + published + property Modified; + property OnGetModified; + property ReadOnly; + property Valid; + end; + +implementation + +{$R *.dfm} + +{ TfrViewBase } + +end. diff --git a/Base/uViewContenido.dfm b/Base/uViewContenido.dfm new file mode 100644 index 0000000..b691846 --- /dev/null +++ b/Base/uViewContenido.dfm @@ -0,0 +1,181 @@ +inherited frViewContenido: TfrViewContenido + Width = 443 + Height = 270 + Align = alClient + object cxGrid: TcxGrid + Left = 0 + Top = 25 + Width = 443 + Height = 245 + Align = alClient + TabOrder = 0 + LookAndFeel.Kind = lfOffice11 + LookAndFeel.NativeStyle = True + object cxGridView: TcxGridDBTableView + NavigatorButtons.ConfirmDelete = False + DataController.DataSource = DADataSource + DataController.Filter.Options = [fcoCaseInsensitive] + DataController.Options = [dcoAnsiSort, dcoAssignGroupingValues, dcoAssignMasterDetailKeys, dcoSaveExpanding, dcoSortByDisplayText, dcoFocusTopRowAfterSorting] + DataController.Summary.DefaultGroupSummaryItems = <> + DataController.Summary.FooterSummaryItems = < + item + Format = ',0.00 '#8364';-,0.00 '#8364 + Kind = skSum + end> + DataController.Summary.SummaryGroups = <> + Filtering.Visible = fvNever + OptionsBehavior.AlwaysShowEditor = True + OptionsBehavior.CellHints = True + OptionsBehavior.FocusCellOnTab = True + OptionsBehavior.GoToNextCellOnEnter = True + OptionsBehavior.BestFitMaxRecordCount = 20 + OptionsBehavior.FocusCellOnCycle = True + OptionsCustomize.ColumnFiltering = False + OptionsCustomize.ColumnGrouping = False + OptionsCustomize.ColumnMoving = False + OptionsCustomize.ColumnSorting = False + OptionsCustomize.DataRowSizing = True + OptionsData.Appending = True + OptionsSelection.MultiSelect = True + OptionsSelection.UnselectFocusedRecordOnExit = False + OptionsView.CellEndEllipsis = True + OptionsView.CellAutoHeight = True + OptionsView.ColumnAutoWidth = True + OptionsView.Footer = True + OptionsView.GridLineColor = cl3DLight + OptionsView.GroupByBox = False + OptionsView.HeaderEndEllipsis = True + OptionsView.Indicator = True + OptionsView.NewItemRowInfoText = 'Click here to add a new row' + Styles.ContentEven = cxStyleEven + Styles.ContentOdd = cxStyleOdd + Styles.Inactive = cxStyleSelection + Styles.Selection = cxStyleSelection + end + object cxGridLevel: TcxGridLevel + GridView = cxGridView + end + end + object ToolBar1: TToolBar + Left = 0 + Top = 0 + Width = 443 + Height = 25 + Caption = 'ToolBar1' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Flat = True + Images = ContenidoImageList + List = True + ShowCaptions = True + TabOrder = 1 + end + object ActionListContenido: TActionList + Left = 8 + Top = 104 + object actAnadir: TAction + Caption = 'A'#241'adir' + ImageIndex = 0 + OnExecute = actAnadirExecute + end + object actEliminar: TAction + Caption = 'Eliminar' + ImageIndex = 1 + OnExecute = actEliminarExecute + OnUpdate = actEliminarUpdate + end + object actSubir: TAction + Caption = 'Subir' + ImageIndex = 2 + OnExecute = actSubirExecute + OnUpdate = actSubirUpdate + end + object actBajar: TAction + Caption = 'Bajar' + ImageIndex = 3 + OnExecute = actBajarExecute + OnUpdate = actBajarUpdate + end + end + object DADataSource: TDADataSource + Left = 8 + Top = 136 + end + object ContenidoImageList: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000D04944415478DA + 6364C0062630FCC72A5EC0C0882EC488CB80191909706EDDBA750CAF767D6260 + 5830240DF8F9FB3743EBE6CD780CC011602003409A7F0071EF8E1D10030C30D5 + 31A23B1706609AB1E23F7FC0F4FA2967B01B408CE6A3B76E815D856100319ABF + FFFAC570EEC103540340218D0C92EDECE01AD79E398335ACE106305CC0942CAC + 77871BB0F5E2454820620138A331D3CB09EEECBD57AF929E0E629DADC106FCF9 + F70F1E602419106A67C6F01DE40260805D7AFC9874037C2C0D194EDDBD8B1260 + 241900A6D103178B01000648ED7B1FCA93F30000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000006E4944415478DA + 63FCFFFF3F03258071D40006C6397A1214990036203925952CCD73E7CCC66100 + C85BBF7F32307CFDC4C0F0FD2B03C33710FD05487F46E0374F19E6FE964032E0 + CF6F840120CD200D5F3F43357E42F0416C90013FBFA119B0B099742FC00CA028 + 10073E1D0C7D030077CE5E397DD56C480000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C88822E9D770F9FFA6065D1441740B711A00D2 + 1C1DA5CA307DC64586037DE68C241900D3FCF10B23C39123CF19AE5EBECF7076 + B623235106206BFEF899114C3FBAFB94E1C4D1AB0CB7567A33E235C0BFF1CAFF + 9F3F7F3380B0B7BF2158F3BB8F4C0C7B36EE60F8F9E317C30F207EB1238C91A0 + 17AC728EFC77F234076BFEF2E631C3C1BDE7191E6E0C24CE0B20609CBAFFBFB9 + A31DD0004606B6DF8F18766E3DC9F0726738F106E8C6EFFA6F68AC0617DFB8F6 + 30C3C783B1C41BA016BEF53FCCCF30FCF364326103C801C3C00000BEA5B3E15D + 7F64240000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000DF4944415478DA + 63FCFFFF3F032580717019C0C8C808A643DA6E80057FFDFACDF0F327041FE833 + 074BA25B88D380982805869FBF18183E7E61645830EF34C3B12936C41BE0D770 + F97F74942A58F39123CF19AE5EBECF7076B623F106B8579EFB1F1CAACDF0F133 + 23C3E58BCF18CE9FBDC57079A11B6103FC1BAFFC87F9D9DBDF10EC8247779F32 + 9C387A95E1E78F5F0C3F80F8C58E3046BC2E70283AF91FA6F9DD472620666460 + FBFD8861E7D6930C2F77863312E505E3D4FDFFCD1DED3034131D0620A016BEF5 + BF85B5368A66920C000171F795FF91351334801C300C0C00007FBCB4E1E577C7 + 9A0000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end> + Left = 8 + Top = 64 + Bitmap = {} + end + object cxStyleRepository: TcxStyleRepository + Left = 8 + Top = 168 + object cxStyleEven: TcxStyle + end + object cxStyleOdd: TcxStyle + AssignedValues = [svColor] + Color = 16119285 + end + object cxStyleSelection: TcxStyle + AssignedValues = [svColor, svTextColor] + Color = clHighlight + TextColor = clHighlightText + end + end +end diff --git a/Base/uViewContenido.dfm.bak b/Base/uViewContenido.dfm.bak new file mode 100644 index 0000000..9ec4a0d --- /dev/null +++ b/Base/uViewContenido.dfm.bak @@ -0,0 +1,182 @@ +inherited frViewContenido: TfrViewContenido + Width = 443 + Height = 270 + Align = alClient + object cxGrid: TcxGrid + Left = 0 + Top = 25 + Width = 443 + Height = 245 + Align = alClient + TabOrder = 0 + LookAndFeel.Kind = lfOffice11 + LookAndFeel.NativeStyle = True + object cxGridView: TcxGridDBTableView + NavigatorButtons.ConfirmDelete = False + DataController.DataSource = DADataSource + DataController.Filter.Options = [fcoCaseInsensitive] + DataController.Options = [dcoAnsiSort, dcoAssignGroupingValues, dcoAssignMasterDetailKeys, dcoSaveExpanding, dcoSortByDisplayText, dcoFocusTopRowAfterSorting] + DataController.Summary.DefaultGroupSummaryItems = <> + DataController.Summary.FooterSummaryItems = < + item + Format = ',0.00 '#8364';-,0.00 '#8364 + Kind = skSum + end> + DataController.Summary.SummaryGroups = <> + Filtering.Visible = fvNever + OptionsBehavior.AlwaysShowEditor = True + OptionsBehavior.CellHints = True + OptionsBehavior.FocusCellOnTab = True + OptionsBehavior.GoToNextCellOnEnter = True + OptionsBehavior.BestFitMaxRecordCount = 20 + OptionsBehavior.FocusCellOnCycle = True + OptionsCustomize.ColumnFiltering = False + OptionsCustomize.ColumnGrouping = False + OptionsCustomize.ColumnMoving = False + OptionsCustomize.ColumnSorting = False + OptionsCustomize.DataRowSizing = True + OptionsData.Appending = True + OptionsSelection.MultiSelect = True + OptionsSelection.UnselectFocusedRecordOnExit = False + OptionsView.CellEndEllipsis = True + OptionsView.CellAutoHeight = True + OptionsView.ColumnAutoWidth = True + OptionsView.Footer = True + OptionsView.GridLineColor = cl3DLight + OptionsView.GroupByBox = False + OptionsView.HeaderEndEllipsis = True + OptionsView.Indicator = True + OptionsView.NewItemRowInfoText = 'Click here to add a new row' + Styles.ContentEven = cxStyleEven + Styles.ContentOdd = cxStyleOdd + Styles.Inactive = cxStyleSelection + Styles.Selection = cxStyleSelection + end + object cxGridLevel: TcxGridLevel + GridView = cxGridView + end + end + object ToolBar1: TToolBar + Left = 0 + Top = 0 + Width = 443 + Height = 25 + Caption = 'ToolBar1' + EdgeBorders = [] + EdgeInner = esNone + EdgeOuter = esNone + Flat = True + Images = ContenidoImageList + List = True + ShowCaptions = True + TabOrder = 1 + end + object ActionListContenido: TActionList + Left = 8 + Top = 104 + object actAnadir: TAction + Caption = 'A'#241'adir' + ImageIndex = 0 + OnExecute = actAnadirExecute + end + object actEliminar: TAction + Caption = 'Eliminar' + ImageIndex = 1 + OnExecute = actEliminarExecute + OnUpdate = actEliminarUpdate + end + object actSubir: TAction + Caption = 'Subir' + ImageIndex = 2 + OnExecute = actSubirExecute + OnUpdate = actSubirUpdate + end + object actBajar: TAction + Caption = 'Bajar' + ImageIndex = 3 + OnExecute = actBajarExecute + OnUpdate = actBajarUpdate + end + end + object DADataSource: TDADataSource + DataTable = dmPresupuestos.tbl_DetallesPresupuestos + Left = 8 + Top = 136 + end + object ContenidoImageList: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000D04944415478DA + 6364C0062630FCC72A5EC0C0882EC488CB80191909706EDDBA750CAF767D6260 + 5830240DF8F9FB3743EBE6CD780CC011602003409A7F0071EF8E1D10030C30D5 + 31A23B1706609AB1E23F7FC0F4FA2967B01B408CE6A3B76E815D856100319ABF + FFFAC570EEC103540340218D0C92EDECE01AD79E398335ACE106305CC0942CAC + 77871BB0F5E2454820620138A331D3CB09EEECBD57AF929E0E629DADC106FCF9 + F70F1E602419106A67C6F01DE40260805D7AFC9874037C2C0D194EDDBD8B1260 + 241900A6D103178B01000648ED7B1FCA93F30000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD2520000006E4944415478DA + 63FCFFFF3F03258071D40006C6397A1214990036203925952CCD73E7CCC66100 + C85BBF7F32307CFDC4C0F0FD2B03C33710FD05487F46E0374F19E6FE964032E0 + CF6F840120CD200D5F3F43357E42F0416C90013FBFA119B0B099742FC00CA028 + 10073E1D0C7D030077CE5E397DD56C480000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C88822E9D770F9FFA6065D1441740B711A00D2 + 1C1DA5CA307DC64586037DE68C241900D3FCF10B23C39123CF19AE5EBECF7076 + B623235106206BFEF899114C3FBAFB94E1C4D1AB0CB7567A33E235C0BFF1CAFF + 9F3F7F3380B0B7BF2158F3BB8F4C0C7B36EE60F8F9E317C30F207EB1238C91A0 + 17AC728EFC77F234076BFEF2E631C3C1BDE7191E6E0C24CE0B20609CBAFFBFB9 + A31DD0004606B6DF8F18766E3DC9F0726738F106E8C6EFFA6F68AC0617DFB8F6 + 30C3C783B1C41BA016BEF53FCCCF30FCF364326103C801C3C00000BEA5B3E15D + 7F64240000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000DF4944415478DA + 63FCFFFF3F032580717019C0C8C808A643DA6E80057FFDFACDF0F327041FE833 + 074BA25B88D380982805869FBF18183E7E61645830EF34C3B12936C41BE0D770 + F97F74942A58F39123CF19AE5EBECF7076B623F106B8579EFB1F1CAACDF0F133 + 23C3E58BCF18CE9FBDC57079A11B6103FC1BAFFC87F9D9DBDF10EC8247779F32 + 9C387A95E1E78F5F0C3F80F8C58E3046BC2E70283AF91FA6F9DD472620666460 + FBFD8861E7D6930C2F77863312E505E3D4FDFFCD1DED3034131D0620A016BEF5 + BF85B5368A66920C000171F795FF91351334801C300C0C00007FBCB4E1E577C7 + 9A0000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end> + Left = 8 + Top = 64 + Bitmap = {} + end + object cxStyleRepository: TcxStyleRepository + Left = 8 + Top = 168 + object cxStyleEven: TcxStyle + end + object cxStyleOdd: TcxStyle + AssignedValues = [svColor] + Color = 16119285 + end + object cxStyleSelection: TcxStyle + AssignedValues = [svColor, svTextColor] + Color = clHighlight + TextColor = clHighlightText + end + end +end diff --git a/Base/uViewContenido.pas b/Base/uViewContenido.pas new file mode 100644 index 0000000..642e186 --- /dev/null +++ b/Base/uViewContenido.pas @@ -0,0 +1,126 @@ +unit uViewContenido; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, cxStyles, ComCtrls, ToolWin, ActnList, cxCustomData, + cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, + uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView, + cxGridCustomTableView, cxGridTableView, cxGridDBTableView, ImgList, + PngImageList, cxGrid; + +type + IViewContenido = interface(IViewBase) + ['{AF7F3CD1-3CD1-4F87-A4B4-FCB1320104F7}'] + end; + + TfrViewContenido = class(TfrViewBase, IViewContenido) + ActionListContenido: TActionList; + cxGrid: TcxGrid; + cxGridView: TcxGridDBTableView; + cxGridLevel: TcxGridLevel; + DADataSource: TDADataSource; + actAnadir: TAction; + actEliminar: TAction; + actSubir: TAction; + actBajar: TAction; + ContenidoImageList: TPngImageList; + ToolBar1: TToolBar; + cxStyleRepository: TcxStyleRepository; + cxStyleEven: TcxStyle; + cxStyleOdd: TcxStyle; + cxStyleSelection: TcxStyle; + procedure actAnadirExecute(Sender: TObject); + procedure actEliminarExecute(Sender: TObject); + procedure actEliminarUpdate(Sender: TObject); + procedure actSubirUpdate(Sender: TObject); + procedure actBajarExecute(Sender: TObject); + procedure actBajarUpdate(Sender: TObject); + procedure actSubirExecute(Sender: TObject); + private + protected + public + end; + +implementation + +uses uBizImportesDetalleBase, uDAInterfaces; + +{$R *.dfm} + +procedure TfrViewContenido.actAnadirExecute(Sender: TObject); +begin + inherited; + if Assigned(DADataSource.DataTable) then + DADataSource.DataTable.Insert +end; + +procedure TfrViewContenido.actEliminarExecute(Sender: TObject); +begin + inherited; + if Assigned(DADataSource.DataTable) then + DADataSource.DataTable.Delete; +end; + +procedure TfrViewContenido.actEliminarUpdate(Sender: TObject); +begin + if Assigned(DADataSource.DataTable) then + (Sender as TAction).Enabled := (not DADataSource.DataTable.IsEmpty) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfrViewContenido.actSubirUpdate(Sender: TObject); +begin + inherited; + if Assigned(cxGridView.Controller.FocusedRow) then + (Sender as TAction).Enabled := not (cxGridView.Controller.FocusedRow.IsFirst) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfrViewContenido.actBajarExecute(Sender: TObject); +var + AField : TDAField; +begin + inherited; + if Assigned(DADataSource.DataTable) then + begin + AField := DADataSource.DataTable.FindField(fld_POSICION); + // Por si el registro está recién insertado y la posición todavía + // no ha sido asignada. + if (AField.AsInteger < 0) then + DADataSource.DataTable.Post; + + IntercambiarPosiciones(DADataSource.DataTable, AField.AsInteger, AField.AsInteger + 1); + end; +end; + +procedure TfrViewContenido.actBajarUpdate(Sender: TObject); +begin + inherited; + if Assigned(cxGridView.Controller.FocusedRow) then + (Sender as TAction).Enabled := not (cxGridView.Controller.FocusedRow.IsLast) + else + (Sender as TAction).Enabled := False; +end; + +procedure TfrViewContenido.actSubirExecute(Sender: TObject); +var + AField : TDAField; +begin + inherited; + if Assigned(DADataSource.DataTable) then + begin + AField := DADataSource.DataTable.FindField(fld_POSICION); + // Por si el registro está recién insertado y la posición todavía + // no ha sido asignada. + if (AField.AsInteger < 0) then + DADataSource.DataTable.Post; + + IntercambiarPosiciones(DADataSource.DataTable, AField.AsInteger, AField.AsInteger - 1); + end; +end; + +end. diff --git a/Base/uViewDetallesFamilias.dfm b/Base/uViewDetallesFamilias.dfm new file mode 100644 index 0000000..78a5f5f --- /dev/null +++ b/Base/uViewDetallesFamilias.dfm @@ -0,0 +1,382 @@ +inherited frViewDetallesFamilias: TfrViewDetallesFamilias + inherited cxGrid: TcxGrid + inherited cxGridView: TcxGridDBTableView + OnEditing = cxGridViewEditing + OptionsView.Footer = False + object cxGridViewPOSICION: TcxGridDBColumn + DataBinding.FieldName = 'POSICION' + Visible = False + SortIndex = 0 + SortOrder = soAscending + end + object cxGridViewTIPO: TcxGridDBColumn + DataBinding.FieldName = 'TIPO' + PropertiesClassName = 'TcxImageComboBoxProperties' + Properties.Images = TipoPngImageList + Properties.Items = < + item + Description = 'Concepto' + ImageIndex = 0 + Value = 'C' + end + item + Description = 'T'#237'tulo de cap'#237'tulo' + ImageIndex = 1 + Tag = 1 + Value = 'T' + end + item + Description = 'Total de cap'#237'tulo' + ImageIndex = 2 + Tag = 2 + Value = 'S' + end> + Properties.LargeImages = TipoPngImageList + BestFitMaxWidth = 64 + Styles.OnGetContentStyle = cxGridViewTIPOStylesGetContentStyle + Width = 56 + end + object cxGridViewDESCRIPCION: TcxGridDBColumn + DataBinding.FieldName = 'DESCRIPCION' + PropertiesClassName = 'TcxTextEditProperties' + Styles.OnGetContentStyle = cxGridViewTIPOStylesGetContentStyle + Width = 224 + end + object cxGridViewCANTIDAD: TcxGridDBColumn + DataBinding.FieldName = 'CANTIDAD' + PropertiesClassName = 'TcxMaskEditProperties' + BestFitMaxWidth = 64 + HeaderAlignmentHorz = taRightJustify + Styles.OnGetContentStyle = cxGridViewTIPOStylesGetContentStyle + Width = 130 + end + object cxGridViewIMPORTEUNIDAD: TcxGridDBColumn + DataBinding.FieldName = 'IMPORTEUNIDAD' + PropertiesClassName = 'TcxTextEditProperties' + Properties.Alignment.Horz = taRightJustify + BestFitMaxWidth = 120 + HeaderAlignmentHorz = taRightJustify + Styles.OnGetContentStyle = cxGridViewTIPOStylesGetContentStyle + Width = 130 + end + object cxGridViewIMPORTETOTAL: TcxGridDBColumn + DataBinding.FieldName = 'IMPORTETOTAL' + PropertiesClassName = 'TcxTextEditProperties' + Properties.Alignment.Horz = taRightJustify + Properties.ReadOnly = True + BestFitMaxWidth = 120 + HeaderAlignmentHorz = taRightJustify + Options.Editing = False + Styles.Content = cxStyle_IMPORTETOTAL + Styles.OnGetContentStyle = cxGridViewTIPOStylesGetContentStyle + Width = 130 + end + object cxGridViewVISIBLE: TcxGridDBColumn + Caption = 'Visible' + DataBinding.FieldName = 'VISIBLE' + PropertiesClassName = 'TcxCheckBoxProperties' + Properties.DisplayChecked = 'S' + Properties.DisplayUnchecked = 'N' + Properties.Glyph.Data = { + 92030000424D9203000000000000920100002800000020000000100000000100 + 08000000000000020000120B0000120B0000570000005700000000000000FFFF + FF0040384000703840008048500090586000C0606000A0505000804040006030 + 30009050500070404000A060600090606000A0707000B0808000C09090004030 + 3000E0B0B000B0909000FFF0F000FF787000E0787000C0686000FF9890009048 + 4000A0585000D0888000E0989000E0706000FF80700080484000A0686000FFA0 + 9000FF887000B060500070484000FFB0A000C0989000D0A8A000E0B8B000FF98 + 8000A0605000FFC0B000F0C0B00080686000F0D8D000B0908000E0C8B000E0D8 + D000FFE0C000FFF8F000F0E0C000FFF0D000FFF8E00020283000FEFEFE00FAFA + FA00F7F7F700F3F3F300F1F1F100F0F0F000EDEDED00EAEAEA00E7E7E700E6E6 + E600E3E3E300E0E0E000DADADA00D7D7D700D3D3D300D0D0D000CDCDCD00C9C9 + C900C6C6C600C4C4C400C3C3C300C0C0C000BEBEBE00BCBCBC00B9B9B900B7B7 + B700B3B3B300AEAEAE00ACACAC00A6A6A600FFFFFF0056565656565656565656 + 5656565656565656565656565656565656565656565656565656565656565656 + 5656565656565656565656565656565656565656565656565656565656565656 + 5656565656565656565656565656565656565656565656565656565656565656 + 5656565656565656565656565656565656565656565656565656404040444C4C + 463D5656565656565656122830262D2D2F325656565644444444433E4145474A + 50463B404456101010102734181D061A242F35122656564646443A3F434A544C + 49493A3C4646560F0F10362C1507110A2320362E0F0F56564845394341535554 + 44473944484856560E13331C21023711161714260E0E5656564A3E403E38544A + 4344464B4B565656560D31122B01111A1E1B0F050556565656564E49423F4343 + 434A4E4E565656565656040C2925221E1E2A04045656565656565650504F4D4F + 50505056565656565656560B0B1F19080B0B0B56565656565656565652505151 + 505656565656565656565656090B03030B565656565656565656565656565656 + 5656565656565656565656565656565656565656565656565656565656565656 + 5656565656565656565656565656565656565656565656565656565656565656 + 5656565656565656565656565656565656565656565656565656565656565656 + 56565656565656565656565656565656565656565656} + Properties.GlyphCount = 2 + Properties.ImmediatePost = True + Properties.NullStyle = nssUnchecked + Properties.ValueChecked = 'S' + Properties.ValueUnchecked = 'N' + end + end + end + inherited ToolBar1: TToolBar + ButtonWidth = 105 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = actAnadirCap + end + object ToolButton2: TToolButton + Left = 105 + Top = 0 + Action = actAnadir + end + object ToolButton7: TToolButton + Left = 210 + Top = 0 + Width = 8 + Caption = 'ToolButton7' + ImageIndex = 5 + Style = tbsSeparator + end + object ToolButton3: TToolButton + Left = 218 + Top = 0 + Action = actEliminar + end + object ToolButton4: TToolButton + Left = 0 + Top = 0 + Width = 8 + Caption = 'ToolButton4' + ImageIndex = 3 + Wrap = True + Style = tbsSeparator + end + object ToolButton5: TToolButton + Left = 0 + Top = 30 + Action = actSubir + end + object ToolButton6: TToolButton + Left = 105 + Top = 30 + Action = actBajar + end + end + inherited ActionListContenido: TActionList + object actAnadirCap: TAction [0] + Caption = 'A'#241'adir cap'#237'tulo' + ImageIndex = 5 + OnExecute = actAnadirCapExecute + end + inherited actAnadir: TAction + Caption = 'A'#241'adir concepto' + ImageIndex = 4 + end + end + inherited DADataSource: TDADataSource + DataTable = nil + end + inherited ContenidoImageList: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C8086787B4DDF8FFEBD76F869F3F7F33EC6C37 + 824BA05B88D300BF86CBFFA3A35419A6CFB8C870A0CF9C7403DC2BCFFD8F88D4 + 66983DEB34C3B12936C41910DA7E13EE6C100E0D37609837E7180358EC0708FF + 6278B0218011A701FE8D57C0CEFEF68391E1DB770630FD1D88BF7C07E26F8C0C + 6B17AE6178B1230CB7011E55E7FF836C86B9C23FC48661C9BC5D609B7F40F187 + 0331B80D400E03DDF85DFF3D039D1856CEDFCCF0706320E981A816BEF5BF8BBF + 07D8D92F7786936E80BCFFFAFF30677F3C184B9C01E480616000007F3BB6E1E0 + 0AF3B40000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000714944415478DA + 63FCFFFF3F03258071D4002A1B10DA7E13CC01897DFDFA83E1DBB71F60FAFBB7 + 9F0C9F3F7F03E3F7FBA219F11A1013A500E77FFCCCC8F0EA1D23C38BB74C0CCF + 5E3131AC9E3397E1F7E914DC0684B4DDF88FCBE62F9FBF33FCF9F397E1FFF974 + DC060C7C208E1A401E0000EFE473E127272ED00000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C88822E9D770F9FFA6065D1441740B711A00D2 + 1C1DA5CA307DC64586037DE68C241900D3FCF10B23C39123CF19AE5EBECF7076 + B623235106206BFEF899114C3FBAFB94E1C4D1AB0CB7567A33E235C0BFF1CAFF + 9F3F7F3380B0B7BF2158F3BB8F4C0C7B36EE60F8F9E317C30F207EB1238C91A0 + 17AC728EFC77F234076BFEF2E631C3C1BDE7191E6E0C24CE0B20609CBAFFBFB9 + A31DD0004606B6DF8F18766E3DC9F0726738F106E8C6EFFA6F68AC0617DFB8F6 + 30C3C783B1C41BA016BEF53FCCCF30FCF364326103C801C3C00000BEA5B3E15D + 7F64240000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000DF4944415478DA + 63FCFFFF3F032580717019C0C8C808A643DA6E80057FFDFACDF0F327041FE833 + 074BA25B88D380982805869FBF18183E7E61645830EF34C3B12936C41BE0D770 + F97F74942A58F39123CF19AE5EBECF7076B623F106B8579EFB1F1CAACDF0F133 + 23C3E58BCF18CE9FBDC57079A11B6103FC1BAFFC87F9D9DBDF10EC8247779F32 + 9C387A95E1E78F5F0C3F80F8C58E3046BC2E70283AF91FA6F9DD472620666460 + FBFD8861E7D6930C2F77863312E505E3D4FDFFCD1DED3034131D0620A016BEF5 + BF85B5368A66920C000171F795FF91351334801C300C0C00007FBCB4E1E577C7 + 9A0000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000002354944415478DA + 9D93DF4B936114C73FEF9CDB9C947A23A546E185062E4308122AB5488942A18B + A2A228229088EEBA0B83EECCCBCAEA1FA8ABD29B0CACB0FC1176538ACA963FA6 + A2AEF9966E6E367CF7EEDDF3F4CEB5B4B640FAC281E7E19CF339E73987479152 + 92D2A34BCAC6650B9A8FD4A0A40089E42BCDE941D128E85AD212E7A896B48F83 + 9B00FF939CB703C6BC26A0FD22D25AB0F5B68DE0467242EB804CD535B352DF32 + DC5C75B2737B1E617D8D79DF0ACD53605FAEA1B6AA8FDEA15F1D24DE9249B3B9 + 2B6837B2B853DD4457749496960ECE8D5772F9C0C8BAFF3720530709B97F404B + EE3E6E1D69E04DC0C3BDD6573CC986DD0EFE0DE80F43DC489E8716E175693977 + 8F37D1A90E71FFF65BAE9AF32ACB379D0246A7F7A7034A3C4E6A5DE568868112 + 55282B2DA4B278179EC0570606A6D0A5412CC7C062B130F9594D071CF617F2F0 + CC35A2C4889B65E644800955C52A159CDBEC84D734739506934195DEC75FD201 + F5C162AE379EE4933A8B61221CD2865D5AF9160AE38F8430AC122104B3A12526 + 9E2F86FE00E83AB8A60BC8D31CB8BD7E8840757D298D27AA189CF4F2B27B98AC + A0056C906DCB425F886F74D0FEC0BE0E99710884397DCC389F90F8CE17D15053 + C188DF47F7B331EADC7BE8B14DD791F80139C495B6B3F68E40ECE0E94C6B5C72 + 4418BCB0485D4539E30195F79D1E0C8FA8902FA43B15A36CFE8D7F4B69558EBA + F616F714951430B3FA9D85FE006BC3B163B243BEDB1AA04D39E4CCB775E95E03 + 2324B0080B22224EC9A7F2432AE627BA3D288D657888700000000049454E44AE + 426082} + Name = 'PngImage4' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000B3A00000B3A01647F570D000002604944415478DA + 8DD25B48D35100C7F1EF7FEA9C96A60F4A362DF141C399E59BD05D4ABA5A60D9 + 5BF8522F4119F4926610425A4F121145CFF5605E085C299A5D347AE8E2D0E5C8 + B55AA5CD69CD369DEEF2DFFFF4DFC4E122B3DFDBE19CF3F9712E5273C3C54AA0 + 95D81CABA96F6C638508219054409C3AAE8D99B8FB20F05FC8B2C012E4AF5161 + 694560B984E16501CFAC60D01262D4AE44C69FA46FB46418C94A4DC3139C637C + 7C9AD3C12AF2A49CC8FCB94B57A518E0F96B1969D645D906071AB5A3F797933B + B93E2E975660F40F535FDFCEC3555964DA1DF45931D70E884D5120DC6EECD772 + 247788345D00110A31ECF9495DF60C17B697D3E3B270ADE9112F9232E97F3269 + 56FB8EAA802D0A2CB627660C1394154420C0E0948BC7C5095CD953418773901B + 75BD9C55774ECCD2D5524813A98422C089FD09D1F6FCA94E761615E09355D02F + 919F9749B13E078BEB3B03031F09089960928C46A3C1FACEB97089F9B99A85B3 + 677FA174CEC4CDAA6AFC0409A1F0557131EA74122F24925312F1CCFBF0FB64AC + D34E7A6E9BDD1160F35A1729B66E821376CE1FD273A6F2006F9D766495D0092D + 89229E49B70787D78D1C2F501405BBFB07A3AD130B80B7AB31FACEB7AAD359E3 + D331627380174AF7E671785F09AFAC363ABB4DC44D6B407DB4046D1C81B11052 + F8332C8D542B6DE30D71E822C32D2527D73797EF3030E418A7FBBE19C5A4D4B0 + 1A13E16D49EA25FE09C4600D52A1A144FF7E97A1800F2E27CF3A2CC816C520DA + C44874CD3F81266977D1467DDFBAEC743ECF4C31D6EF62DE142C13EDE2E9FF01 + D7A5ADC9695A63C02623BB15348A06C5AB1C14F7C4CBC535BF015419481881D7 + D75A0000000049454E44AE426082} + Name = 'PngImage5' + Background = clWindow + end> + Bitmap = {} + end + object cxStyleRepository1: TcxStyleRepository [5] + Left = 264 + Top = 80 + object cxStyle_IMPORTETOTAL: TcxStyle + AssignedValues = [svColor, svTextColor] + Color = clInactiveCaptionText + TextColor = clHotLight + end + object cxStyle_SUBTOTAL: TcxStyle + AssignedValues = [svColor, svFont, svTextColor] + Color = clInactiveCaptionText + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + TextColor = clHotLight + end + object cxStyle_TITULO: TcxStyle + AssignedValues = [svColor, svFont, svTextColor] + Color = clInactiveCaption + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + TextColor = clHighlightText + end + end + object TipoPngImageList: TPngImageList [6] + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001094944415478DA + 63FCFFFF3F03258011993323818124D39E7C75421800D21C9B8AA9E8D74F28FE + C1C0F0134603F1C913480690A3995F8281E1EA5DA00120CD2C82C43BFBCF7B84 + 667018E0B21D64D3CFEF501A8A412E387306E2743BC37D0C87CE435D00122005 + 80348300DC006C2E8081BF7F81CEFECDC0F0FB17C445376E20E4081A00D2F41B + A8F9CF2F087BCD1A0E06358D1F0C6C2C441880AE19E48A0D1B391814948106B0 + 32800DC1690036CD20BC651B0783943CC40520434E5CC662002ECD20F6CE3D1C + 0C22D21003AEDC71626859BD8F11C5007C9A41E2FB0E7230F089FF6078F004A2 + 19251DCC9CCA415414BEFB6D05D70C36A02F8A631D503090D83480AC196C00A5 + D919005F65CFBFE56F19230000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000B3A00000B3A01647F570D000001A24944415478DA + 9D923B2C43511CC6BFEB158B129341A283342241448C44D46222418C2261A0F1 + 58BD26A193C482A18B8DC463D284A5212D121D3CDB26A452214A5295287A1FBD + F738E75EBDE90DD5C6B7DC9C73CFF7FBFEFFFF39DCE2EC4417804D18D53D3E63 + DF42061142C0510019EC2930FC706C885941D2025220BF8A82B98C807462E0B4 + 80B77782D3808CEB9092156C6C7A9E33000EBC0970EF51B4568491C3B104058A + 2000220F598883C822129F3104BC41B86E7035E921353A80A53BDD05E8305FA0 + A450A4876528A20042CD8A48CD920459E221BCBEC1B1F37845F33A2920A80392 + E96DE6B096CCF3DF66FA9544D55CBC3482E3061B4B5F9D3A44BF3E83DEF67C3D + DD94F70992A01508C664066B3977E2EC641F73265B2505047580C59CA3F55E7E + A7F54C01321F87427B6E3E5A330CCE6A2DC5827D1BB8B4713AA0AE2C8AA2E01E + A4A7D08F490FE5FA30DA6731ECADAC7BE075FB412E86B55BF8D8B5A7BDAA8D2A + 0DE07B88E039164724A63DB097DBB00A51CBF84BF5037EC200AEC0FD0FB35A41 + 360036B8A41A9BAA75335B6704A48AAB5D560F27CDFF02A49A99BE008A302DB4 + AC93694C0000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300000B3A00000B3A01647F570D000001784944415478DA + 8DD1BF4BC3401407F0EFF9B38BC5D141B10E1637FF02A988205550C15FB3829B + A06EFE9C0A767170712A82B33FA0A08576A92D220EA2C5522D562B75B175A918 + AA4DDA26E725DAC38049F38684E4EE7DDEBD7764C7B33A01E008FA985CDAF41E + A346504A411840E7A79A740BBEC39225C410F883FC1B0C263501A35061434028 + 50C492325219C512B6B8B1457440F4AA0252C863A0338BE661BF2584036AF5C0 + 7913C61C71B4DA4A08C7DE30B476A96D0AACF4C0D56D835C1621BD0BF09DBE26 + D8EFF1F50B3C71A05A7DD09165BD29504411670C717B6E35E464B9037D5DF548 + DE64107EC43E4B9EE533987137F2EAF6862FD04A095412A1948A88C4F318D94E + 6B887FCE8EBB07A15A3DCD01A7A3EEA7F7F6172892043040168B506406B19344 + EF058CEEE63464DA89E0410A6EDD2DF4B6E5D1920EA19CCB180EEB3A0B2C84F8 + 67BF3A730E7C06BDA6937EFE00F612FA647E02F5617A4D84B8D82B524D66FBA3 + BA7533A056B229602999106A0698F7F61BDF228CEAE9FA9FA3C1000000004945 + 4E44AE426082} + Name = 'PngImage2' + Background = clWindow + end> + Left = 72 + Top = 64 + Bitmap = {} + end +end diff --git a/Base/uViewDetallesFamilias.pas b/Base/uViewDetallesFamilias.pas new file mode 100644 index 0000000..77c5f8d --- /dev/null +++ b/Base/uViewDetallesFamilias.pas @@ -0,0 +1,134 @@ +unit uViewDetallesFamilias; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewContenido, cxStyles, cxCustomData, cxGraphics, cxFilter, + cxData, cxDataStorage, cxEdit, DB, cxDBData, cxDropDownEdit, cxTextEdit, + cxSpinEdit, cxCurrencyEdit, ImgList, PngImageList, uDADataTable, + ExtActns, StdActns, ActnList, ComCtrls, ToolWin, cxGridLevel, + cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, + cxControls, cxGridCustomView, cxGrid, cxImageComboBox, + uBizImportesCabeceraBase, cxCheckBox, TB2Item, TBX, TB2Dock, TB2Toolbar, + JvExComCtrls, JvToolBar, cxMaskEdit; + +type + IViewDetallesFamilias = interface(IViewContenido) + ['{FFE0D3C1-F05C-4F28-9393-03F344CA6EBA}'] + end; + + TfrViewDetallesFamilias = class(TfrViewContenido, IViewDetallesFamilias) + cxStyleRepository1: TcxStyleRepository; + cxStyle_IMPORTETOTAL: TcxStyle; + cxStyle_SUBTOTAL: TcxStyle; + TipoPngImageList: TPngImageList; + cxGridViewDESCRIPCION: TcxGridDBColumn; + cxGridViewCANTIDAD: TcxGridDBColumn; + cxGridViewIMPORTEUNIDAD: TcxGridDBColumn; + cxGridViewIMPORTETOTAL: TcxGridDBColumn; + cxGridViewTIPO: TcxGridDBColumn; + cxGridViewPOSICION: TcxGridDBColumn; + cxGridViewVISIBLE: TcxGridDBColumn; + actAnadirCap: TAction; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + ToolButton6: TToolButton; + ToolButton7: TToolButton; + cxStyle_TITULO: TcxStyle; + procedure cxGridViewEditing(Sender: TcxCustomGridTableView; + AItem: TcxCustomGridTableItem; var AAllow: Boolean); + procedure cxGridViewTIPOStylesGetContentStyle( + Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; + AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); + procedure actAnadirCapExecute(Sender: TObject); + private + protected + public + end; + +implementation + +uses uBizImportesDetalleBase, uDAInterfaces; + +{$R *.dfm} + +procedure TfrViewDetallesFamilias.cxGridViewEditing( + Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem; + var AAllow: Boolean); +var + IndiceCol : Integer; +begin + IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_DESCRIPCION).Index; + if AItem.Index <= IndiceCol then + AAllow := True + else begin + IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_TIPODETALLE).Index; + if (UpperCase(AItem.GridView.Items[IndiceCol].EditValue) = TIPODETALLE_SUBTOTAL) then + AAllow := False + else begin + if (UpperCase(AItem.GridView.Items[IndiceCol].EditValue) = TIPODETALLE_TITULO) then + begin + IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_VISIBLE).Index; + if AItem.Index = IndiceCol then + AAllow := True + else + AAllow := False + end; + end; + end; +end; + +procedure TfrViewDetallesFamilias.cxGridViewTIPOStylesGetContentStyle( + Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; + AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); +var + IndiceCol : Integer; + ATipo : String; +begin + if Assigned(ARecord) then + begin + IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_TIPODETALLE).Index; + ATipo := VarToStr(ARecord.Values[IndiceCol]); + if ATipo = TIPODETALLE_SUBTOTAL then + AStyle := cxStyle_SUBTOTAL; + if ATipo = TIPODETALLE_TITULO then + AStyle := cxStyle_TITULO; + end; +end; + +procedure TfrViewDetallesFamilias.actAnadirCapExecute(Sender: TObject); +var + AFieldTIPO : TDAField; + AFieldDES : TDAField; +begin + if Assigned(DADataSource.DataTable) then + begin + AFieldTIPO := DADataSource.DataTable.FindField(fld_TIPODETALLE); + AFieldDES := DADataSource.DataTable.FindField(fld_DESCRIPCION); + + DADataSource.DataTable.Append; + AFieldDES.AsString := 'Capítulo de...'; + AFieldTIPO.Value := TIPODETALLE_TITULO; + if DADataSource.DataTable.State in dsEditModes then + DADataSource.DataTable.Post; + DADataSource.DataTable.Next; + + DADataSource.DataTable.Insert; + AFieldTIPO.Value := TIPODETALLE_CONCEPTO; + if DADataSource.DataTable.State in dsEditModes then + DADataSource.DataTable.Post; + DADataSource.DataTable.Next; + + DADataSource.DataTable.Insert; + AFieldDES.AsString := 'Total del capítulo'; + AFieldTIPO.Value := TIPODETALLE_SUBTOTAL; + if DADataSource.DataTable.State in dsEditModes then + DADataSource.DataTable.Post; + end; +end; + +end. diff --git a/Base/uViewDetallesNormales.dfm b/Base/uViewDetallesNormales.dfm new file mode 100644 index 0000000..45a5412 --- /dev/null +++ b/Base/uViewDetallesNormales.dfm @@ -0,0 +1,92 @@ +inherited frViewDetallesNormales: TfrViewDetallesNormales + inherited ToolBar1: TToolBar + ButtonWidth = 63 + object ToolButton1: TToolButton + Left = 0 + Top = 0 + Action = actAnadir + end + object ToolButton2: TToolButton + Left = 63 + Top = 0 + Action = actEliminar + end + object ToolButton3: TToolButton + Left = 126 + Top = 0 + Width = 8 + Caption = 'ToolButton3' + ImageIndex = 2 + Style = tbsSeparator + end + object ToolButton4: TToolButton + Left = 134 + Top = 0 + Action = actSubir + end + object ToolButton5: TToolButton + Left = 197 + Top = 0 + Action = actBajar + end + end + inherited ContenidoImageList: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C8086787B4DDF8FFEBD76F869F3F7F33EC6C37 + 824BA05B88D300BF86CBFFA3A35419A6CFB8C870A0CF9C7403DC2BCFFD8F88D4 + 66983DEB34C3B12936C41910DA7E13EE6C100E0D37609837E7180358EC0708FF + 6278B0218011A701FE8D57C0CEFEF68391E1DB770630FD1D88BF7C07E26F8C0C + 6B17AE6178B1230CB7011E55E7FF836C86B9C23FC48661C9BC5D609B7F40F187 + 0331B80D400E03DDF85DFF3D039D1856CEDFCCF0706320E981A816BEF5BF8BBF + 07D8D92F7786936E80BCFFFAFF30677F3C184B9C01E480616000007F3BB6E1E0 + 0AF3B40000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000714944415478DA + 63FCFFFF3F03258071D4002A1B10DA7E13CC01897DFDFA83E1DBB71F60FAFBB7 + 9F0C9F3F7F03E3F7FBA219F11A1013A500E77FFCCCC8F0EA1D23C38BB74C0CCF + 5E3131AC9E3397E1F7E914DC0684B4DDF88FCBE62F9FBF33FCF9F397E1FFF974 + DC060C7C208E1A401E0000EFE473E127272ED00000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000E14944415478DA + 63FCFFFF3F032580717019C0C8C88822E9D770F9FFA6065D1441740B711A00D2 + 1C1DA5CA307DC64586037DE68C241900D3FCF10B23C39123CF19AE5EBECF7076 + B623235106206BFEF899114C3FBAFB94E1C4D1AB0CB7567A33E235C0BFF1CAFF + 9F3F7F3380B0B7BF2158F3BB8F4C0C7B36EE60F8F9E317C30F207EB1238C91A0 + 17AC728EFC77F234076BFEF2E631C3C1BDE7191E6E0C24CE0B20609CBAFFBFB9 + A31DD0004606B6DF8F18766E3DC9F0726738F106E8C6EFFA6F68AC0617DFB8F6 + 30C3C783B1C41BA016BEF53FCCCF30FCF364326103C801C3C00000BEA5B3E15D + 7F64240000000049454E44AE426082} + Name = 'PngImage2' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000000DF4944415478DA + 63FCFFFF3F032580717019C0C8C808A643DA6E80057FFDFACDF0F327041FE833 + 074BA25B88D380982805869FBF18183E7E61645830EF34C3B12936C41BE0D770 + F97F74942A58F39123CF19AE5EBECF7076B623F106B8579EFB1F1CAACDF0F133 + 23C3E58BCF18CE9FBDC57079A11B6103FC1BAFFC87F9D9DBDF10EC8247779F32 + 9C387A95E1E78F5F0C3F80F8C58E3046BC2E70283AF91FA6F9DD472620666460 + FBFD8861E7D6930C2F77863312E505E3D4FDFFCD1DED3034131D0620A016BEF5 + BF85B5368A66920C000171F795FF91351334801C300C0C00007FBCB4E1E577C7 + 9A0000000049454E44AE426082} + Name = 'PngImage3' + Background = clWindow + end> + end +end diff --git a/Base/uViewDetallesNormales.pas b/Base/uViewDetallesNormales.pas new file mode 100644 index 0000000..8ba0f06 --- /dev/null +++ b/Base/uViewDetallesNormales.pas @@ -0,0 +1,34 @@ +unit uViewDetallesNormales; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewContenido, cxStyles, cxCustomData, cxGraphics, cxFilter, + cxData, cxDataStorage, cxEdit, DB, cxDBData, ImgList, PngImageList, + uDADataTable, ActnList, ToolWin, ComCtrls, cxGridLevel, cxClasses, + cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, + cxGridDBTableView, cxGrid; + +type + IViewDetallesNormales = interface(IViewContenido) + ['{7E9FEF3B-2A2E-404C-BF1E-7C103E671AFE}'] + end; + + TfrViewDetallesNormales = class(TfrViewContenido, IViewDetallesNormales) + ToolButton1: TToolButton; + ToolButton2: TToolButton; + ToolButton3: TToolButton; + ToolButton4: TToolButton; + ToolButton5: TToolButton; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/Base/uViewDireccion.dfm b/Base/uViewDireccion.dfm new file mode 100644 index 0000000..a4af3d5 --- /dev/null +++ b/Base/uViewDireccion.dfm @@ -0,0 +1,118 @@ +inherited frViewDireccion: TfrViewDireccion + Width = 442 + Height = 130 + object dxLayoutControl1: TdxLayoutControl + Left = 0 + Top = 0 + Width = 442 + Height = 130 + Align = alClient + ParentBackground = True + TabOrder = 0 + AutoContentSizes = [acsWidth] + object eProvincia: TcxDBTextEdit + Left = 272 + Top = 82 + DataBinding.DataField = 'PROVINCIA' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 3 + Width = 70 + end + object eCalle: TcxDBTextEdit + Left = 94 + Top = 28 + DataBinding.DataField = 'CALLE' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Width = 272 + end + object ePoblacion: TcxDBTextEdit + Left = 94 + Top = 55 + DataBinding.DataField = 'POBLACION' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 1 + Width = 272 + end + object eCodigoPostal: TcxDBTextEdit + Left = 94 + Top = 82 + DataBinding.DataField = 'CODIGOPOSTAL' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 2 + Width = 120 + end + object dxLayoutControl1Group_Root: TdxLayoutGroup + ShowCaption = False + Hidden = True + ShowBorder = False + object dxLayoutControl1Group1: TdxLayoutGroup + AutoAligns = [aaHorizontal] + Caption = 'Direcci'#243'n' + object dxLayoutControl1Item4: TdxLayoutItem + Caption = 'Calle:' + Control = eCalle + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item6: TdxLayoutItem + Caption = 'Poblaci'#243'n:' + Control = ePoblacion + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Group2: TdxLayoutGroup + ShowCaption = False + Hidden = True + LayoutDirection = ldHorizontal + ShowBorder = False + object dxLayoutControl1Item1: TdxLayoutItem + Caption = 'C'#243'digo postal:' + Control = eCodigoPostal + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item5: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'Provincia:' + Control = eProvincia + ControlOptions.ShowBorder = False + end + end + end + end + end + object DADataSource: TDADataSource + Left = 80 + end +end diff --git a/Base/uViewDireccion.pas b/Base/uViewDireccion.pas new file mode 100644 index 0000000..d2b8385 --- /dev/null +++ b/Base/uViewDireccion.pas @@ -0,0 +1,42 @@ +unit uViewDireccion; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, StdCtrls, Mask, DBCtrls, DB, uDADataTable, ExtCtrls, + JvComponent, JvFormAutoSize, dxLayoutControl, cxControls, cxContainer, + cxEdit, cxTextEdit, cxDBEdit; + +type + TfrViewDireccion = class(TfrViewBase) + DADataSource: TDADataSource; + dxLayoutControl1Group_Root: TdxLayoutGroup; + dxLayoutControl1: TdxLayoutControl; + dxLayoutControl1Group1: TdxLayoutGroup; + dxLayoutControl1Group2: TdxLayoutGroup; + eProvincia: TcxDBTextEdit; + dxLayoutControl1Item5: TdxLayoutItem; + eCalle: TcxDBTextEdit; + dxLayoutControl1Item4: TdxLayoutItem; + ePoblacion: TcxDBTextEdit; + dxLayoutControl1Item6: TdxLayoutItem; + eCodigoPostal: TcxDBTextEdit; + dxLayoutControl1Item1: TdxLayoutItem; + protected + end; + +var + frViewDireccion: TfrViewDireccion; + +implementation + +{$R *.dfm} + +initialization + RegisterClass(TfrViewDireccion); + +finalization + UnRegisterClass(TfrViewDireccion); + +end. diff --git a/Base/uViewFormaPago.dfm b/Base/uViewFormaPago.dfm new file mode 100644 index 0000000..253f8e4 --- /dev/null +++ b/Base/uViewFormaPago.dfm @@ -0,0 +1,47 @@ +inherited frViewFormaPago: TfrViewFormaPago + Width = 300 + Constraints.MinWidth = 300 + DesignSize = ( + 300 + 222) + object Label5: TLabel + Left = 8 + Top = 8 + Width = 85 + Height = 13 + Caption = 'Forma de pago' + Font.Charset = DEFAULT_CHARSET + Font.Color = clActiveCaption + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 96 + Top = 8 + Width = 192 + Height = 9 + Anchors = [akLeft, akTop, akRight] + Shape = bsBottomLine + end + object memFormaPago: TcxDBMemo + Left = 16 + Top = 32 + Anchors = [akLeft, akTop, akRight, akBottom] + DataBinding.DataField = 'FORMAPAGO' + DataBinding.DataSource = DADataSource + Properties.ScrollBars = ssVertical + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Height = 175 + Width = 269 + end + object DADataSource: TDADataSource + Left = 16 + Top = 48 + end +end diff --git a/Base/uViewFormaPago.pas b/Base/uViewFormaPago.pas new file mode 100644 index 0000000..30fdb30 --- /dev/null +++ b/Base/uViewFormaPago.pas @@ -0,0 +1,26 @@ +unit uViewFormaPago; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, DB, uDADataTable, cxMemo, cxDBEdit, cxControls, + cxContainer, cxEdit, cxTextEdit, ExtCtrls, StdCtrls; + +type + TfrViewFormaPago = class(TfrViewBase) + Label5: TLabel; + Bevel1: TBevel; + memFormaPago: TcxDBMemo; + DADataSource: TDADataSource; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/Base/uViewGrid.ddp b/Base/uViewGrid.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uViewGrid.ddp differ diff --git a/Base/uViewGrid.dfm b/Base/uViewGrid.dfm new file mode 100644 index 0000000..d7fe434 --- /dev/null +++ b/Base/uViewGrid.dfm @@ -0,0 +1,118 @@ +inherited frViewGrid: TfrViewGrid + Width = 443 + Height = 270 + Align = alClient + object cxGrid: TcxGrid + Left = 0 + Top = 0 + Width = 443 + Height = 270 + Align = alClient + TabOrder = 0 + LookAndFeel.Kind = lfOffice11 + LookAndFeel.NativeStyle = True + object cxGridView: TcxGridDBTableView + OnDblClick = cxGridViewDblClick + NavigatorButtons.ConfirmDelete = False + FilterBox.Visible = fvNever + DataController.DataModeController.SmartRefresh = True + DataController.DataModeController.SyncMode = False + DataController.DataSource = DADataSource + DataController.Filter.Options = [fcoCaseInsensitive] + DataController.Options = [dcoAnsiSort, dcoAssignGroupingValues, dcoAssignMasterDetailKeys, dcoSaveExpanding, dcoSortByDisplayText, dcoFocusTopRowAfterSorting] + DataController.Summary.DefaultGroupSummaryItems = <> + DataController.Summary.FooterSummaryItems = <> + DataController.Summary.SummaryGroups = <> + OptionsBehavior.CellHints = True + OptionsBehavior.BestFitMaxRecordCount = 20 + OptionsCustomize.ColumnFiltering = False + OptionsCustomize.ColumnGrouping = False + OptionsData.Deleting = False + OptionsData.DeletingConfirmation = False + OptionsData.Editing = False + OptionsData.Inserting = False + OptionsSelection.CellSelect = False + OptionsSelection.UnselectFocusedRecordOnExit = False + OptionsView.CellEndEllipsis = True + OptionsView.CellAutoHeight = True + OptionsView.ColumnAutoWidth = True + OptionsView.Footer = True + OptionsView.FooterAutoHeight = True + OptionsView.GridLineColor = cl3DLight + OptionsView.GroupByBox = False + OptionsView.HeaderEndEllipsis = True + OptionsView.NewItemRowInfoText = 'Click here to add a new row' + Styles.ContentEven = cxStyleEven + Styles.ContentOdd = cxStyleOdd + Styles.Inactive = cxStyleSelection + Styles.Selection = cxStyleSelection + end + object cxGridLevel: TcxGridLevel + GridView = cxGridView + end + end + object DADataSource: TDADataSource + Left = 368 + Top = 96 + end + object ActionList1: TActionList + Left = 336 + Top = 96 + end + object dxComponentPrinter: TdxComponentPrinter + CurrentLink = dxComponentPrinterLink + PreviewOptions.EnableOptions = [peoCanChangeMargins, peoPageBackground, peoPageSetup, peoPreferences, peoPrint] + PreviewOptions.VisibleOptions = [pvoPageBackground, pvoPageSetup, pvoPreferences, pvoPrint, pvoPrintStyles, pvoReportFileOperations, pvoPageMargins] + PreviewOptions.WindowState = wsMaximized + Version = 0 + Left = 368 + Top = 128 + object dxComponentPrinterLink: TdxGridReportLink + Active = True + Component = cxGrid + PrinterPage.DMPaper = 9 + PrinterPage.Footer = 6350 + PrinterPage.Header = 6350 + PrinterPage.Margins.Bottom = 12700 + PrinterPage.Margins.Left = 12700 + PrinterPage.Margins.Right = 12700 + PrinterPage.Margins.Top = 12700 + PrinterPage.PageSize.X = 210000 + PrinterPage.PageSize.Y = 297000 + PrinterPage._dxMeasurementUnits_ = 0 + PrinterPage._dxLastMU_ = 2 + ReportDocument.CreationDate = 39000.667590601850000000 + OptionsCharts.Transparent = True + OptionsFormatting.SuppressBackgroundBitmaps = True + OptionsOnEveryPage.Caption = False + OptionsOnEveryPage.FilterBar = False + OptionsSize.AutoWidth = True + OptionsView.Caption = False + OptionsView.ExpandButtons = False + OptionsView.FilterBar = False + OptionsView.GroupFooters = False + BuiltInReportLink = True + end + end + object dxPSEngineController1: TdxPSEngineController + LookAndFeel = pslfOffice11 + UseNativeLookAndFeel = False + Left = 336 + Top = 128 + end + object cxStyleRepository1: TcxStyleRepository + Left = 296 + Top = 128 + object cxStyleEven: TcxStyle + end + object cxStyleOdd: TcxStyle + AssignedValues = [svColor] + Color = clInactiveCaptionText + end + object cxStyleSelection: TcxStyle + AssignedValues = [svColor, svTextColor] + Color = clHighlight + TextColor = clHighlightText + end + end +end diff --git a/Base/uViewGrid.pas b/Base/uViewGrid.pas new file mode 100644 index 0000000..b9c9330 --- /dev/null +++ b/Base/uViewGrid.pas @@ -0,0 +1,395 @@ +unit uViewGrid; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, + cxDataStorage, cxEdit, DB, cxDBData, uDADataTable, cxGridLevel, + cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, + cxGridTableView, cxGridDBTableView, cxGrid, Menus, ActnList, Grids, + DBGrids, JvComponent, JvFormAutoSize, dxPSGlbl, dxPSUtl, dxPSEngn, + dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, + dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGridLnk, dxPrnDlg, + cxIntlPrintSys3, dxPSPrvwAdv; + +type + IViewGrid = interface(IViewBase) + ['{07468FAD-4891-42E6-B646-51F17F0033F5}'] + function GetDblClick: TNotifyEvent; + function GetFilter: string; + function GetPopupMenu: TPopupMenu; + function GetGrid : TcxGrid; + procedure Preview; + procedure Print; + procedure PrintSetup; + procedure GotoFirst; + procedure GotoLast; + procedure SetDblClick(const Value: TNotifyEvent); + procedure SetFilter(const Value: string); + procedure SetPopupMenu(const Value: TPopupMenu); + procedure RefreshGrid; + function GetMultiSelection: Boolean; + procedure SetMultiSelection(const Value: Boolean); + property Filter: string read GetFilter write SetFilter; + property OnDblClick: TNotifyEvent read GetDblClick write SetDblClick; + property PopupMenu: TPopupMenu read GetPopupMenu write SetPopupMenu; + property MultiSelection : Boolean read GetMultiSelection write SetMultiSelection; + property Grid : TcxGrid read GetGrid; + procedure SyncFocusedRecordsFromGrid; + procedure SyncFocusedRecordsFromDataSet; + procedure StoreToRegistry; + procedure RestoreFromRegistry; + end; + + TfrViewGrid = class(TfrViewBase, IViewGrid) + ActionList1: TActionList; + cxGrid: TcxGrid; + cxGridLevel: TcxGridLevel; + cxGridView: TcxGridDBTableView; + DADataSource: TDADataSource; + dxComponentPrinter: TdxComponentPrinter; + dxComponentPrinterLink: TdxGridReportLink; + dxPSEngineController1: TdxPSEngineController; + cxStyleRepository1: TcxStyleRepository; + cxStyleEven: TcxStyle; + cxStyleOdd: TcxStyle; + cxStyleSelection: TcxStyle; + procedure cxGridViewDblClick(Sender: TObject); + procedure cxGridViewDataControllerSortingChanged(Sender: TObject); +// procedure SelectionChanged(Sender: TcxCustomGridTableView); virtual; abstract; + private + FFilter: string; + FOnFilterChanged : TNotifyEvent; + FOnDblClick: TNotifyEvent; + FPopupMenu: TPopupMenu; + procedure FiltrarGrid(TextoFiltro : String); + protected + function GetGrid : TcxGrid; + function GetDblClick: TNotifyEvent; virtual; + function GetFilter: string; virtual; + function GetPopupMenu: TPopupMenu; virtual; + function GetMultiSelection: Boolean; virtual; + procedure SetDblClick(const Value: TNotifyEvent); virtual; + procedure SetFilter(const Value: string); virtual; + procedure SetPopupMenu(const Value: TPopupMenu); virtual; + procedure SetMultiSelection(const Value: Boolean); virtual; + procedure FilterChanged(Sender : TObject); virtual; + + public + procedure ShowEmbedded(const AParent : TWinControl); override; + constructor Create(AOwner: TComponent); override; + procedure Preview; virtual; + procedure Print; virtual; + procedure PrintSetup; + procedure GotoFirst; + procedure GotoLast; + procedure StoreToRegistry; virtual; + procedure RestoreFromRegistry; virtual; + property Filter: string read GetFilter write SetFilter; + property OnDblClick: TNotifyEvent read GetDblClick write SetDblClick; + property PopupMenu: TPopupMenu read GetPopupMenu write SetPopupMenu; + property Grid : TcxGrid read GetGrid; + procedure SyncFocusedRecordsFromGrid; virtual; + procedure SyncFocusedRecordsFromDataSet; virtual; + property MultiSelection : Boolean read GetMultiSelection write SetMultiSelection; + procedure RefreshGrid; virtual; + end; + +procedure Register; + +var + frViewGrid: TfrViewGrid; + +implementation + +uses + CCReg, uDataModuleBase, uDBSelectionList; + +{$R *.dfm} + +{ TfrViewGrid } + +procedure Register; +begin + RegisterCustomContainer(TfrViewGrid); +end; + + +{ +********************************* TfrViewGrid ********************************** +} +constructor TfrViewGrid.Create(AOwner: TComponent); +begin + inherited; + FFilter := ''; + FOnFilterChanged := FilterChanged; + GotoFirst; +end; + +procedure TfrViewGrid.cxGridViewDblClick(Sender: TObject); +begin + if Assigned(FOnDblClick) then + FOnDblClick(Sender); +end; + +procedure TfrViewGrid.FiltrarGrid(TextoFiltro : String); +var + Columna: TcxGridDBColumn; + i: Integer; + AItemList: TcxFilterCriteriaItemList; +begin + with cxGrid.ActiveView.DataController.Filter do + begin + BeginUpdate; + try + Options := [fcoCaseInsensitive, fcoSoftCompare]; + Root.Clear; + if Length(TextoFiltro) > 0 then + begin + AItemList := Root.AddItemList(fboAnd); + AItemList.BoolOperatorKind := fboOr; + for i:=0 to (cxGrid.ActiveView as TcxGridDBTableView).ColumnCount - 1 do + begin + Columna := (cxGrid.ActiveView as TcxGridDBTableView).Columns[i]; + if (Length(Columna.Caption) > 0) and (Columna.Caption <> 'RecID') then + AItemList.AddItem(Columna, foLike, '%'+TextoFiltro+'%', IntToStr(i)); + end; + Active := True; + end + else + Active := False; + finally + EndUpdate; + end; + end; +end; + +function TfrViewGrid.GetDblClick: TNotifyEvent; +begin + Result := FOnDblClick; +end; + +function TfrViewGrid.GetFilter: string; +begin + Result := FFilter; +end; + +function TfrViewGrid.GetPopupMenu: TPopupMenu; +begin + Result := FPopupMenu; +end; + +procedure TfrViewGrid.GotoFirst; +begin + cxGridView.DataController.GotoFirst; +end; + +procedure TfrViewGrid.GotoLast; +begin + cxGridView.DataController.GotoLast; +end; + +procedure TfrViewGrid.SetDblClick(const Value: TNotifyEvent); +begin + FOnDblClick := Value; +end; + +procedure TfrViewGrid.SetFilter(const Value: string); +begin + if FFilter <> Value then + begin + FFilter := Value; + FiltrarGrid(FFilter); + if Assigned(FOnFilterChanged) then + FOnFilterChanged(Self); + end; +end; + +procedure TfrViewGrid.SetPopupMenu(const Value: TPopupMenu); +begin + FPopupMenu := Value; + cxGridView.PopupMenu := FPopupMenu; +end; + +procedure TfrViewGrid.cxGridViewDataControllerSortingChanged( + Sender: TObject); +var + i: Integer; + AFields: array of String; + ADirections: array of TDASortDirection; + ABookmark : Pointer; +begin + inherited; + + with cxGridView do + begin + for i := 0 to SortedItemCount - 1 do + begin + SetLength(AFields, i+1); + AFields[i] := (SortedItems[i] as TcxGridDBColumn).DataBinding.FieldName; + SetLength(ADirections, i+1); + case (SortedItems[i] as TcxGridDBColumn).SortOrder of + soAscending : ADirections[i] := sdAscending; + soDescending : ADirections[i] := sdDescending; + end; + end; + end; + + if Assigned(DADataSource.DataTable) then + with DADataSource.DataTable do + begin + DisableControls; + ABookmark := GetBookMark; + try + Sort(AFields, ADirections); + GotoBookmark(ABookmark); + finally + FreeBookmark(ABookmark); + EnableControls; + end; + end; +end; + +function TfrViewGrid.GetGrid: TcxGrid; +begin + Result := cxGrid; +end; + +procedure TfrViewGrid.ShowEmbedded(const AParent : TWinControl); +begin + inherited; + + if not DADataSource.DataTable.Active then + DADataSource.DataTable.Active := True; + + with Grid do + begin + ActiveView.DataController.GotoFirst; + ActiveView.Focused := True; + if (ActiveView.ViewData as TcxCustomGridTableViewData).RecordCount > 0 then + begin + (ActiveView.ViewData as TcxCustomGridTableViewData).Records[0].Selected := True; + (ActiveView.ViewData as TcxCustomGridTableViewData).Records[0].Focused := True; + end; +{ if (ActiveView is TcxCustomGridTableView) then + (ActiveView as TcxCustomGridTableView).ApplyBestFit;} + end; +end; + +procedure TfrViewGrid.Preview; +begin + dxComponentPrinter.Preview; +end; + +procedure TfrViewGrid.Print; +begin + dxComponentPrinter.Print(True, nil, nil); +end; + +procedure TfrViewGrid.PrintSetup; +begin + dxComponentPrinter.PageSetup(nil); +end; + +procedure TfrViewGrid.RefreshGrid; +var + FocusedRow, TopRow, TopRecord : Integer; + ARecordID : Variant; +begin + { Refrescar las filas del grid a partir del dataset y colocar la fila + seleccionada donde estaba } + + if DADataSource.DataTable.State = dsBrowse then + begin + TopRow := cxGridView.Controller.TopRowIndex; + TopRecord := cxGridView.Controller.TopRecordIndex; + + FocusedRow := cxGridView.DataController.FocusedRowIndex; + ARecordID := cxGridView.DataController.GetRecordId(cxGridView.DataController.FocusedRecordIndex); + try + cxGridView.DataController.UpdateItems(False); // <- Refresco + finally + cxGridView.Controller.TopRowIndex := TopRow; + cxGridView.Controller.TopRecordIndex := TopRecord; + cxGridView.DataController.FocusedRowIndex := FocusedRow; + end; + end; +end; + +procedure TfrViewGrid.SyncFocusedRecordsFromDataSet; +//var +// AIndex : Integer; +begin +{ for AIndex := 0 to cxGridView.DataController.RecordCount - 1 do + begin + if (MessageBox(0, PChar(cxGridView.DataController.GetDisplayText(AIndex, 1)), '', + MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = idYes) then + begin + cxGridView.DataController.SelectAll; + + + cxGridView.DataController.SelectRows(AIndex, AIndex); + cxGridView.DataController.FocusSelectedRow(0); + Break; + end; + end;} +end; + +procedure TfrViewGrid.SyncFocusedRecordsFromGrid; +var + AValue : Variant; + i: Integer; + aObj : ISelectedRowList; + Clave : String; +begin + if not Supports(DADataSource.DataTable, ISelectedRowList, aObj) then + raise Exception.Create('La tabla no soporta el interfaz ISelectedRowList (SyncFocusedRecords)'); + + Clave := cxGridView.DataController.KeyFieldNames; + if Length(Clave) = 0 then + raise Exception.Create('Falta indicar los campos clave de la tabla en la vista del grid (SyncFocusedRecords)'); + + DADataSource.DataTable.DisableControls; +// DADataSource.DataTable.DisableEventHandlers; <- No descomentar + try + for i := 0 to cxGridView.Controller.SelectedRecordCount - 1 do + begin + AValue := cxGridView.Controller.SelectedRows[i].Values[cxGridView.GetColumnByFieldName(Clave).Index]; + DADataSource.DataTable.First; + if DADataSource.DataTable.Locate(Clave, AValue, []) then + aObj.SelectedRows.CurrentRowSelected := True; + end; + finally +// DADataSource.DataTable.EnableEventHandlers; <- No descomentar + DADataSource.DataTable.EnableControls; + end; +end; + +function TfrViewGrid.GetMultiSelection: Boolean; +begin + Result := (cxGrid.ActiveView as TcxGridDBTableView).OptionsSelection.MultiSelect; +end; + +procedure TfrViewGrid.SetMultiSelection(const Value: Boolean); +begin + (cxGrid.ActiveView as TcxGridDBTableView).OptionsSelection.MultiSelect := True; +// (cxGrid.ActiveView as TcxGridDBTableView).OnSelectionChanged := SelectionChanged; +end; + +procedure TfrViewGrid.RestoreFromRegistry; +begin + cxGridView.RestoreFromRegistry('Software\\FactuGES\\GridSettings\\' + Self.Name, False, False, []); +end; + +procedure TfrViewGrid.StoreToRegistry; +begin + cxGridView.StoreToRegistry('Software\\FactuGES\\GridSettings\\' + Self.Name, True, []); +end; + +procedure TfrViewGrid.FilterChanged(Sender: TObject); +begin +// +end; + +end. diff --git a/Base/uViewInternet.ddp b/Base/uViewInternet.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uViewInternet.ddp differ diff --git a/Base/uViewInternet.dfm b/Base/uViewInternet.dfm new file mode 100644 index 0000000..8d6a87a --- /dev/null +++ b/Base/uViewInternet.dfm @@ -0,0 +1,412 @@ +inherited frViewInternet: TfrViewInternet + Width = 464 + Height = 135 + object dxLayoutControl1: TdxLayoutControl + Left = 0 + Top = 0 + Width = 464 + Height = 135 + Align = alClient + ParentBackground = True + TabOrder = 0 + AutoContentSizes = [acsWidth, acsHeight] + object SpeedButton1: TSpeedButton + Left = 419 + Top = 28 + Width = 23 + Height = 22 + Action = actMandarCorreoParticular + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 1800000000000003000000000000000000000000000000000000FFFFFFB7A293 + 694731694731694731694731694731694731694731694731694731FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFB7A293EDE4DFB7A293B7A293B7A293B7A293B7 + A293B7A293B7A293694731FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293 + F1EAE6EDE4DFE9DED8E5D8D1E3D5CDDFCFC6DBC9BFB7A293694731FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFB7A293F5F0EDF1EAE6EFE7E2EBE1DCE7DBD5E3 + D5CDDFCFC6B7A293694731FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293 + FBF9F8F7F3F1F3EDEAEFE7E2EBE1DCE7DBD5E3D5CDB7A293694731FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFB7A293FFFFFFFBF9F8F7F3F1F3EDEAEFE7E2EB + E1DCE7DBD5B7A293694731FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293 + FFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E2EBE1DCB7A2936947316947316947 + 31694731694731694731FFFFFFB7A293FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3 + EDEAEFE7E2B7A293694731B7A293B7A293B7A293B7A293694731FFFFFFB7A293 + FFFFFFFFFFFFFFFFFFFFFFFFFBF9F8B7A293694731694731694731E4D6CFE0D1 + C8DCCBC2B7A293694731FFFFFFB7A293FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 + A293F3EBE6694731D89840D89840E4D6CFE0D1C8B7A293694731FFFFFFB7A293 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293694731F2EBE8EEE6E2EBE1DCE8DC + D6E4D6CFB7A293694731FFFFFFB7A293B7A293B7A293B7A293B7A293B7A293B7 + A293D89840D89840D89840D89840EBE1DCE8DCD6B7A293694731FFFFFFFFFFFF + FFFFFFCFB9ABFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F5F0EEF2EBE860A2 + FA314A80B7A293694731FFFFFFFFFFFFFFFFFFCFB9ABFFFFFF4878F84878F8FF + FFFFFFFFFFFEFDFDFBF8F7F7F3F14878F860A2FAB7A293694731FFFFFFFFFFFF + FFFFFFCFB9ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3 + F1F4EEEBF0E9E5694731FFFFFFFFFFFFFFFFFFCFB9ABCFB9ABCFB9ABCFB9ABCF + B9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9AB} + end + object SpeedButton2: TSpeedButton + Left = 419 + Top = 56 + Width = 23 + Height = 22 + Action = actMandarCorreoTrabajo + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 1800000000000003000000000000000000000000000000000000FFFFFFB7A293 + 694731694731694731694731694731694731694731694731694731FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFB7A293EDE4DFB7A293B7A293B7A293B7A293B7 + A293B7A293B7A293694731FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293 + F1EAE6EDE4DFE9DED8E5D8D1E3D5CDDFCFC6DBC9BFB7A293694731FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFB7A293F5F0EDF1EAE6EFE7E2EBE1DCE7DBD5E3 + D5CDDFCFC6B7A293694731FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293 + FBF9F8F7F3F1F3EDEAEFE7E2EBE1DCE7DBD5E3D5CDB7A293694731FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFB7A293FFFFFFFBF9F8F7F3F1F3EDEAEFE7E2EB + E1DCE7DBD5B7A293694731FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293 + FFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E2EBE1DCB7A2936947316947316947 + 31694731694731694731FFFFFFB7A293FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3 + EDEAEFE7E2B7A293694731B7A293B7A293B7A293B7A293694731FFFFFFB7A293 + FFFFFFFFFFFFFFFFFFFFFFFFFBF9F8B7A293694731694731694731E4D6CFE0D1 + C8DCCBC2B7A293694731FFFFFFB7A293FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7 + A293F3EBE6694731D89840D89840E4D6CFE0D1C8B7A293694731FFFFFFB7A293 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A293694731F2EBE8EEE6E2EBE1DCE8DC + D6E4D6CFB7A293694731FFFFFFB7A293B7A293B7A293B7A293B7A293B7A293B7 + A293D89840D89840D89840D89840EBE1DCE8DCD6B7A293694731FFFFFFFFFFFF + FFFFFFCFB9ABFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F5F0EEF2EBE860A2 + FA314A80B7A293694731FFFFFFFFFFFFFFFFFFCFB9ABFFFFFF4878F84878F8FF + FFFFFFFFFFFEFDFDFBF8F7F7F3F14878F860A2FAB7A293694731FFFFFFFFFFFF + FFFFFFCFB9ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3 + F1F4EEEBF0E9E5694731FFFFFFFFFFFFFFFFFFCFB9ABCFB9ABCFB9ABCFB9ABCF + B9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9ABCFB9AB} + end + object SpeedButton3: TSpeedButton + Left = 419 + Top = 84 + Width = 23 + Height = 22 + Action = actVerPaginaWeb + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 1800000000000003000000000000000000000000000000000000FFFFFFFFFFFF + FFFFFFFFFFFFF4D6C7DD9479C5663BC25635C75D3AD67B4EE5A891F9ECE3FFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EEE7DB916FBB5128A9491C8A5726AA + 431BAF4922B6512EC15B3ED06B4DEAAE92FEF8F6FFFFFFFFFFFFFFFFFFF8E8DD + C26438A13C0CA03A04A03D025857128440059D37039F3808A33D0FB14B25BE57 + 36DF927BFEFAF8FFFFFFFEFBF9C66840A23B01A94300AE4800B34D004161013F + 5C01AA4200A53E009F38009C3502A23E11B65F43EAA683FFFFFFEDC3B0A73E09 + AF4800B85100BE5800B65D002F70000B7000595E00B54F00AE4800A33C00973A + 06875E38B66A44FDEAD9D08156B34D00C05A00CA6400D26C00917B0007840001 + 8100177700B96300C35D00B64F009B4C03566426786338DEA783C85B1BBF5800 + CD6600D77000CC7900918500328B01778400A67500CF6B00BC67006D6300535F + 022C641356652BB57338C85E1ACD6800CD75006F8E076D9305839408A39609EE + 8E00ED8500DD7B008C76000377000070000866032C64138D5620D36E07D66F00 + 8C89070EA71E46A7215BA924E0A71EFCA113F99707EB8800BF7E001E7F002375 + 003D660131620B8E5C21EC9027DC780041A4211CB73D24BD492AC25280C55AF8 + C55BFCB53AFB9C0CEC8C004C8400167F00077100106702AB7C39F3B67ACE7E05 + 35B13529C2533ACC674DD1724FD172DBDB87FBCA65FCAA23EB94024B8B012C82 + 000675001A6801D9B27DE9EBD954A93225BF4D3FCF6E86DB86C4EAA396E7A4E8 + F0B8D8D983F0B438D89A0BC687006383001E7800757F1AFCE9D8FFFFFF9AD9A0 + 30C55953D6798CE498C5F2B5C5F3BECFF0B559D2748FB63D5EA31AD58401B377 + 004B7D07EBC089FFFFFFFFFFFFF9FBF8ACD09472CE6DA5DB86D6E69DC8ECAAA9 + E19245D1702FB941A99A10E88100DC7C08E2B370FDFAF8FFFFFFFFFFFFFFFFFF + FCFCFBC2DBADA1D179A3DC8A9FDD8A62D77C36CC6620B73D8E9915F19321FBC8 + 94FFFBF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F5ECCFDDB095D37A95 + C2677ABB4F67C158D8C994FEF2E8FFFFFFFFFFFFFFFFFFFFFFFF} + end + object eMailTrabajo: TcxDBHyperLinkEdit + Left = 107 + Top = 56 + DataBinding.DataField = 'CORREO2' + DataBinding.DataSource = DADataSource + Properties.ValidateOnEnter = True + Properties.OnEditValueChanged = eMailPropertiesEditValueChanged + Properties.Prefix = 'mailto:' + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 1 + Width = 250 + end + object ePaginaWeb: TcxDBHyperLinkEdit + Left = 107 + Top = 84 + DataBinding.DataField = 'PAGINAWEB' + DataBinding.DataSource = DADataSource + Properties.ValidateOnEnter = True + Properties.OnEditValueChanged = eMailPropertiesEditValueChanged + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 2 + Width = 121 + end + object eMailParticular: TcxDBHyperLinkEdit + Left = 107 + Top = 28 + DataBinding.DataField = 'CORREO1' + DataBinding.DataSource = DADataSource + Properties.StartKey = 16496 + Properties.OnEditValueChanged = eMailPropertiesEditValueChanged + Properties.Prefix = 'mailto:' + Style.BorderColor = clWindowFrame + Style.BorderStyle = ebs3D + Style.HotTrack = False + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Width = 250 + end + object dxLayoutGroup1: TdxLayoutGroup + ShowCaption = False + Hidden = True + ShowBorder = False + object dxLayoutGroup2: TdxLayoutGroup + Caption = 'Correo electr'#243'nico e Internet' + object dxLayoutControl1Group1: TdxLayoutGroup + ShowCaption = False + Hidden = True + LayoutDirection = ldHorizontal + ShowBorder = False + object dxLayoutControl1Item3: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'E-mail particular:' + Control = eMailParticular + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item1: TdxLayoutItem + ShowCaption = False + Control = SpeedButton1 + ControlOptions.ShowBorder = False + end + end + object dxLayoutControl1Group2: TdxLayoutGroup + ShowCaption = False + Hidden = True + LayoutDirection = ldHorizontal + ShowBorder = False + object dxLayoutControl1Item5: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'E-mail trabajo:' + Control = eMailTrabajo + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item4: TdxLayoutItem + ShowCaption = False + Control = SpeedButton2 + ControlOptions.ShowBorder = False + end + end + object dxLayoutControl1Group3: TdxLayoutGroup + ShowCaption = False + Hidden = True + LayoutDirection = ldHorizontal + ShowBorder = False + object dxLayoutControl1Item2: TdxLayoutItem + AutoAligns = [aaVertical] + AlignHorz = ahClient + Caption = 'P'#225'gina web:' + Control = ePaginaWeb + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item6: TdxLayoutItem + ShowCaption = False + Control = SpeedButton3 + ControlOptions.ShowBorder = False + end + end + end + end + end + object DADataSource: TDADataSource + Left = 16 + Top = 104 + end + object ActionList1: TActionList + Images = ImageList1 + Left = 400 + Top = 8 + object actMandarCorreoParticular: TAction + ImageIndex = 0 + OnExecute = actMandarCorreoParticularExecute + OnUpdate = actMandarCorreoParticularUpdate + end + object actMandarCorreoTrabajo: TAction + ImageIndex = 0 + OnExecute = actMandarCorreoTrabajoExecute + OnUpdate = actMandarCorreoTrabajoUpdate + end + object actVerPaginaWeb: TAction + ImageIndex = 1 + OnExecute = actVerPaginaWebExecute + OnUpdate = actVerPaginaWebUpdate + end + end + object ImageList1: TImageList + Left = 432 + Top = 8 + Bitmap = { + 494C010102000400040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000001000000001002000000000000010 + 00000000000000000000000000000000000000000000B7A29300694731006947 + 3100694731006947310069473100694731006947310069473100694731000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000F4D6C700DD947900C5663B00C2563500C75D3A00D67B4E00E5A89100F9EC + E300000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300EDE4DF00B7A2 + 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300694731000000 + 0000000000000000000000000000000000000000000000000000F9EEE700DB91 + 6F00BB512800A9491C008A572600AA431B00AF492200B6512E00C15B3E00D06B + 4D00EAAE9200FEF8F60000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300F1EAE600EDE4 + DF00E9DED800E5D8D100E3D5CD00DFCFC600DBC9BF00B7A29300694731000000 + 00000000000000000000000000000000000000000000F8E8DD00C2643800A13C + 0C00A03A0400A03D020058571200844005009D3703009F380800A33D0F00B14B + 2500BE573600DF927B00FEFAF800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300F5F0ED00F1EA + E600EFE7E200EBE1DC00E7DBD500E3D5CD00DFCFC600B7A29300694731000000 + 000000000000000000000000000000000000FEFBF900C6684000A23B0100A943 + 0000AE480000B34D0000416101003F5C0100AA420000A53E00009F3800009C35 + 0200A23E1100B65F4300EAA68300000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300FBF9F800F7F3 + F100F3EDEA00EFE7E200EBE1DC00E7DBD500E3D5CD00B7A29300694731000000 + 000000000000000000000000000000000000EDC3B000A73E0900AF480000B851 + 0000BE580000B65D00002F7000000B700000595E0000B54F0000AE480000A33C + 0000973A0600875E3800B66A4400FDEAD9000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A2930000000000FBF9 + F800F7F3F100F3EDEA00EFE7E200EBE1DC00E7DBD500B7A29300694731000000 + 000000000000000000000000000000000000D0815600B34D0000C05A0000CA64 + 0000D26C0000917B0000078400000181000017770000B9630000C35D0000B64F + 00009B4C03005664260078633800DEA783000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300000000000000 + 0000FBF9F800F7F3F100F3EDEA00EFE7E200EBE1DC00B7A29300694731006947 + 310069473100694731006947310069473100C85B1B00BF580000CD660000D770 + 0000CC79000091850000328B010077840000A6750000CF6B0000BC6700006D63 + 0000535F02002C64130056652B00B57338000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300000000000000 + 000000000000FBF9F800F7F3F100F3EDEA00EFE7E200B7A2930069473100B7A2 + 9300B7A29300B7A29300B7A2930069473100C85E1A00CD680000CD7500006F8E + 07006D93050083940800A3960900EE8E0000ED850000DD7B00008C7600000377 + 000000700000086603002C6413008D5620000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300000000000000 + 00000000000000000000FBF9F800B7A29300694731006947310069473100E4D6 + CF00E0D1C800DCCBC200B7A2930069473100D36E0700D66F00008C8907000EA7 + 1E0046A721005BA92400E0A71E00FCA11300F9970700EB880000BF7E00001E7F + 0000237500003D66010031620B008E5C21000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300000000000000 + 0000000000000000000000000000B7A29300F3EBE60069473100D8984000D898 + 4000E4D6CF00E0D1C800B7A2930069473100EC902700DC78000041A421001CB7 + 3D0024BD49002AC2520080C55A00F8C55B00FCB53A00FB9C0C00EC8C00004C84 + 0000167F00000771000010670200AB7C39000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300000000000000 + 0000000000000000000000000000B7A2930069473100F2EBE800EEE6E200EBE1 + DC00E8DCD600E4D6CF00B7A2930069473100F3B67A00CE7E050035B1350029C2 + 53003ACC67004DD172004FD17200DBDB8700FBCA6500FCAA2300EB9402004B8B + 01002C820000067500001A680100D9B27D000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300D8984000D8984000D8984000D898 + 4000EBE1DC00E8DCD600B7A2930069473100E9EBD90054A9320025BF4D003FCF + 6E0086DB8600C4EAA30096E7A400E8F0B800D8D98300F0B43800D89A0B00C687 + 0000638300001E780000757F1A00FCE9D8000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFB9 + AB0000000000000000000000000000000000FEFDFD00FBF8F700F5F0EE00F2EB + E80060A2FA00314A8000B7A2930069473100000000009AD9A00030C5590053D6 + 79008CE49800C5F2B500C5F3BE00CFF0B50059D274008FB63D005EA31A00D584 + 0100B37700004B7D0700EBC08900000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFB9 + AB00000000004878F8004878F8000000000000000000FEFDFD00FBF8F700F7F3 + F1004878F80060A2FA00B7A293006947310000000000F9FBF800ACD0940072CE + 6D00A5DB8600D6E69D00C8ECAA00A9E1920045D170002FB94100A99A1000E881 + 0000DC7C0800E2B37000FDFAF800000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFB9 + AB00000000000000000000000000000000000000000000000000FEFDFD00FBF8 + F700F7F3F100F4EEEB00F0E9E500694731000000000000000000FCFCFB00C2DB + AD00A1D17900A3DC8A009FDD8A0062D77C0036CC660020B73D008E991500F193 + 2100FBC89400FFFBF90000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000CFB9 + AB00CFB9AB00CFB9AB00CFB9AB00CFB9AB00CFB9AB00CFB9AB00CFB9AB00CFB9 + AB00CFB9AB00CFB9AB00CFB9AB00CFB9AB000000000000000000000000000000 + 0000F1F5EC00CFDDB00095D37A0095C267007ABB4F0067C15800D8C99400FEF2 + E800000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000100000000100010000000000800000000000000000000000 + 000000000000000000000000FFFFFF00801FF00F00000000801FC00300000000 + 801F800100000000801F000100000000801F000000000000A01F000000000000 + B000000000000000B800000000000000BC00000000000000BE00000000000000 + BE000000000000008000000000000000EF00800100000000E980800100000000 + EFC0C00300000000E000F00F00000000} + end +end diff --git a/Base/uViewInternet.pas b/Base/uViewInternet.pas new file mode 100644 index 0000000..e298e4d --- /dev/null +++ b/Base/uViewInternet.pas @@ -0,0 +1,115 @@ +unit uViewInternet; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, DB, uDADataTable, StdCtrls, Mask, DBCtrls, ExtCtrls, + JvComponent, JvFormAutoSize, dxLayoutControl, cxControls, cxContainer, + cxEdit, cxTextEdit, cxDBEdit, cxHyperLinkEdit, Buttons, ActnList, ImgList; + +type + TfrViewInternet = class(TfrViewBase) + DADataSource: TDADataSource; + dxLayoutControl1: TdxLayoutControl; + dxLayoutGroup1: TdxLayoutGroup; + dxLayoutGroup2: TdxLayoutGroup; + eMailTrabajo: TcxDBHyperLinkEdit; + dxLayoutControl1Item5: TdxLayoutItem; + ePaginaWeb: TcxDBHyperLinkEdit; + dxLayoutControl1Item2: TdxLayoutItem; + dxLayoutControl1Item3: TdxLayoutItem; + eMailParticular: TcxDBHyperLinkEdit; + dxLayoutControl1Item1: TdxLayoutItem; + SpeedButton1: TSpeedButton; + dxLayoutControl1Group1: TdxLayoutGroup; + ActionList1: TActionList; + actMandarCorreoParticular: TAction; + actMandarCorreoTrabajo: TAction; + ImageList1: TImageList; + dxLayoutControl1Item4: TdxLayoutItem; + SpeedButton2: TSpeedButton; + dxLayoutControl1Group2: TdxLayoutGroup; + dxLayoutControl1Item6: TdxLayoutItem; + SpeedButton3: TSpeedButton; + dxLayoutControl1Group3: TdxLayoutGroup; + actVerPaginaWeb: TAction; + procedure eMailPropertiesEditValueChanged(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure actMandarCorreoParticularUpdate(Sender: TObject); + procedure actMandarCorreoTrabajoUpdate(Sender: TObject); + procedure actMandarCorreoParticularExecute(Sender: TObject); + procedure actMandarCorreoTrabajoExecute(Sender: TObject); + procedure actVerPaginaWebExecute(Sender: TObject); + procedure actVerPaginaWebUpdate(Sender: TObject); + end; + + +implementation + +uses StrUtils; + +{$R *.dfm} + +type + THackcxDBHyperLinkEdit = class(TcxDBHyperLinkEdit); + +procedure TfrViewInternet.eMailPropertiesEditValueChanged(Sender: TObject); +begin + inherited; + if not varisnull((Sender as TcxDBHyperLinkEdit).EditValue) then + (Sender as TcxDBHyperLinkEdit).EditValue := StringReplace((Sender as TcxDBHyperLinkEdit).EditValue, (Sender as TcxDBHyperLinkEdit).Properties.Prefix, '', []); +end; + +procedure TfrViewInternet.SpeedButton1Click(Sender: TObject); +begin + inherited; + THackcxDBHyperLinkEdit(eMailParticular).DoStart; +end; + +procedure TfrViewInternet.actMandarCorreoParticularUpdate(Sender: TObject); +begin + inherited; + (Sender as TAction).Enabled := (Length(eMailParticular.Text) > 0) +end; + +procedure TfrViewInternet.actMandarCorreoTrabajoUpdate(Sender: TObject); +begin + inherited; + (Sender as TAction).Enabled := (Length(eMailTrabajo.Text) > 0) +end; + +procedure TfrViewInternet.actMandarCorreoParticularExecute( + Sender: TObject); +begin + inherited; + THackcxDBHyperLinkEdit(eMailParticular).DoStart; +end; + +procedure TfrViewInternet.actMandarCorreoTrabajoExecute(Sender: TObject); +begin + inherited; + THackcxDBHyperLinkEdit(eMailTrabajo).DoStart; +end; + +procedure TfrViewInternet.actVerPaginaWebExecute(Sender: TObject); +begin + inherited; + THackcxDBHyperLinkEdit(ePaginaWeb).DoStart; +end; + +procedure TfrViewInternet.actVerPaginaWebUpdate(Sender: TObject); +begin + inherited; + (Sender as TAction).Enabled := (Length(ePaginaWeb.Text) > 0) +end; + +initialization + RegisterClass(TfrViewInternet); + +finalization + + UnRegisterClass(TfrViewInternet); + +end. + diff --git a/Base/uViewObservaciones.dfm b/Base/uViewObservaciones.dfm new file mode 100644 index 0000000..bf4edd3 --- /dev/null +++ b/Base/uViewObservaciones.dfm @@ -0,0 +1,54 @@ +inherited frViewObservaciones: TfrViewObservaciones + Width = 322 + Height = 195 + object dxLayoutControl1: TdxLayoutControl + Left = 0 + Top = 0 + Width = 322 + Height = 195 + Align = alClient + ParentBackground = True + TabOrder = 0 + AutoContentSizes = [acsWidth, acsHeight] + object memObservaciones: TcxDBMemo + Left = 22 + Top = 28 + DataBinding.DataField = 'OBSERVACIONES' + DataBinding.DataSource = DADataSource + Properties.ScrollBars = ssVertical + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Height = 107 + Width = 197 + end + object dxLayoutControl1Group_Root: TdxLayoutGroup + ShowCaption = False + Hidden = True + ShowBorder = False + object dxLayoutControl1Group1: TdxLayoutGroup + AutoAligns = [aaHorizontal] + AlignVert = avClient + Caption = 'Observaciones' + object dxLayoutControl1Item1: TdxLayoutItem + AutoAligns = [aaHorizontal] + AlignVert = avClient + Caption = 'Observaciones' + ShowCaption = False + Control = memObservaciones + ControlOptions.ShowBorder = False + end + end + end + end + object DADataSource: TDADataSource + Left = 8 + Top = 360 + end +end diff --git a/Base/uViewObservaciones.pas b/Base/uViewObservaciones.pas new file mode 100644 index 0000000..61601fa --- /dev/null +++ b/Base/uViewObservaciones.pas @@ -0,0 +1,28 @@ +unit uViewObservaciones; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, DB, uDADataTable, cxMemo, cxDBEdit, cxControls, + cxContainer, cxEdit, cxTextEdit, ExtCtrls, StdCtrls, dxLayoutControl; + +type + TfrViewObservaciones = class(TfrViewBase) + memObservaciones: TcxDBMemo; + DADataSource: TDADataSource; + dxLayoutControl1Group_Root: TdxLayoutGroup; + dxLayoutControl1: TdxLayoutControl; + dxLayoutControl1Group1: TdxLayoutGroup; + dxLayoutControl1Item1: TdxLayoutItem; + private + { Private declarations } + public + { Public declarations } + end; + +implementation + +{$R *.dfm} + +end. diff --git a/Base/uViewPreview.dfm b/Base/uViewPreview.dfm new file mode 100644 index 0000000..54a0015 --- /dev/null +++ b/Base/uViewPreview.dfm @@ -0,0 +1,10 @@ +inherited frViewPreview: TfrViewPreview + object frxPreview: TfrxPreview + Left = 0 + Top = 0 + Width = 320 + Height = 240 + Align = alClient + OutlineVisible = False + end +end diff --git a/Base/uViewPreview.pas b/Base/uViewPreview.pas new file mode 100644 index 0000000..c076735 --- /dev/null +++ b/Base/uViewPreview.pas @@ -0,0 +1,43 @@ +unit uViewPreview; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, frxClass, frxPreview, JvComponent, JvFormAutoSize; + +type + IViewPreview = interface(IViewBase) + ['{F9A96948-4005-4E9B-8045-7B4874A05D19}'] + function GetPreview: TfrxPreview; + property Preview : TfrxPreview read GetPreview; + end; + + TfrViewPreview = class(TfrViewBase, IViewPreview) + frxPreview: TfrxPreview; + private + function GetPreview: TfrxPreview; + public + property Preview : TfrxPreview read GetPreview; + end; + +implementation + +{$R *.dfm} + +{ TfrViewPreview } + +function TfrViewPreview.GetPreview: TfrxPreview; +begin + Result := frxPreview; +end; + +initialization + RegisterClass(TfrViewPreview); + +finalization + UnRegisterClass(TfrViewPreview); + +end. + +end. diff --git a/Base/uViewTelefonos.dfm b/Base/uViewTelefonos.dfm new file mode 100644 index 0000000..1747c2c --- /dev/null +++ b/Base/uViewTelefonos.dfm @@ -0,0 +1,111 @@ +inherited frViewTelefonos: TfrViewTelefonos + Width = 451 + Height = 154 + object dxLayoutControl1: TdxLayoutControl + Left = 0 + Top = 0 + Width = 451 + Height = 154 + Align = alClient + ParentBackground = True + TabOrder = 0 + AutoContentSizes = [acsWidth] + object eTlfParticular: TcxDBTextEdit + Left = 87 + Top = 28 + DataBinding.DataField = 'TELEFONO2' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Width = 326 + end + object eTlfTrabajo: TcxDBTextEdit + Left = 87 + Top = 55 + DataBinding.DataField = 'TELEFONO1' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 1 + Width = 326 + end + object eTlfMovil: TcxDBTextEdit + Left = 87 + Top = 82 + DataBinding.DataField = 'MOVIL' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 2 + Width = 326 + end + object eFax: TcxDBTextEdit + Left = 87 + Top = 109 + DataBinding.DataField = 'FAX' + DataBinding.DataSource = DADataSource + Style.LookAndFeel.Kind = lfStandard + Style.LookAndFeel.NativeStyle = True + StyleDisabled.LookAndFeel.Kind = lfStandard + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.Kind = lfStandard + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.Kind = lfStandard + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 3 + Width = 326 + end + object dxLayoutGroup1: TdxLayoutGroup + ShowCaption = False + Hidden = True + ShowBorder = False + object dxLayoutGroup2: TdxLayoutGroup + AutoAligns = [aaHorizontal] + Caption = 'Tel'#233'fonos y faxes' + object dxLayoutControl1Item4: TdxLayoutItem + Caption = 'Particular:' + Control = eTlfParticular + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item5: TdxLayoutItem + Caption = 'Trabajo:' + Control = eTlfTrabajo + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item6: TdxLayoutItem + Caption = 'M'#243'vil:' + Control = eTlfMovil + ControlOptions.ShowBorder = False + end + object dxLayoutControl1Item7: TdxLayoutItem + Caption = 'Num. de fax:' + Control = eFax + ControlOptions.ShowBorder = False + end + end + end + end + object DADataSource: TDADataSource + Left = 8 + Top = 8 + end +end diff --git a/Base/uViewTelefonos.pas b/Base/uViewTelefonos.pas new file mode 100644 index 0000000..22bc8ed --- /dev/null +++ b/Base/uViewTelefonos.pas @@ -0,0 +1,42 @@ +unit uViewTelefonos; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, DB, uDADataTable, StdCtrls, Mask, DBCtrls, ExtCtrls, + JvComponent, JvFormAutoSize, dxLayoutControl, cxControls, cxContainer, + cxEdit, cxTextEdit, cxDBEdit; + +type + TfrViewTelefonos = class(TfrViewBase) + DADataSource: TDADataSource; + dxLayoutControl1: TdxLayoutControl; + dxLayoutGroup1: TdxLayoutGroup; + dxLayoutGroup2: TdxLayoutGroup; + eTlfParticular: TcxDBTextEdit; + dxLayoutControl1Item4: TdxLayoutItem; + eTlfTrabajo: TcxDBTextEdit; + dxLayoutControl1Item5: TdxLayoutItem; + eTlfMovil: TcxDBTextEdit; + dxLayoutControl1Item6: TdxLayoutItem; + eFax: TcxDBTextEdit; + dxLayoutControl1Item7: TdxLayoutItem; + end; + +var + frViewTelefonos: TfrViewTelefonos; + +implementation + +{$R *.dfm} + +initialization + RegisterClass(TfrViewTelefonos); + +finalization + + UnRegisterClass(TfrViewTelefonos); + +end. + diff --git a/Base/uViewTotales.ddp b/Base/uViewTotales.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Base/uViewTotales.ddp differ diff --git a/Base/uViewTotales.dfm b/Base/uViewTotales.dfm new file mode 100644 index 0000000..58fc1ea --- /dev/null +++ b/Base/uViewTotales.dfm @@ -0,0 +1,197 @@ +inherited frViewTotales: TfrViewTotales + Width = 730 + Height = 100 + Align = alBottom + Constraints.MaxHeight = 100 + Constraints.MinHeight = 100 + Constraints.MinWidth = 730 + object TabControl1: TTabControl + Left = 0 + Top = 0 + Width = 730 + Height = 100 + Align = alClient + TabOrder = 0 + object GroupBox1: TGroupBox + Left = 8 + Top = 8 + Width = 713 + Height = 81 + Caption = 'Importes totales' + Font.Charset = DEFAULT_CHARSET + Font.Color = clActiveCaption + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + object Label1: TLabel + Left = 16 + Top = 25 + Width = 74 + Height = 13 + Caption = 'Base imponible:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 282 + Top = 26 + Width = 43 + Height = 13 + Caption = 'IVA (%):' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label5: TLabel + Left = 482 + Top = 26 + Width = 77 + Height = 13 + Caption = 'Importe de IVA:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label7: TLabel + Left = 479 + Top = 50 + Width = 80 + Height = 13 + Caption = 'Importe total:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clActiveCaption + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object lblBase: TcxDBCurrencyEdit + Left = 96 + Top = 21 + AutoSize = False + DataBinding.DataField = 'BASEIMPONIBLE' + DataBinding.DataSource = DADataSource + Enabled = False + ParentFont = False + Properties.Alignment.Horz = taRightJustify + Properties.ReadOnly = True + Properties.UseLeftAlignmentOnEditing = False + Properties.UseThousandSeparator = True + Style.Font.Charset = DEFAULT_CHARSET + Style.Font.Color = clWindowText + Style.Font.Height = -11 + Style.Font.Name = 'Tahoma' + Style.Font.Style = [] + Style.LookAndFeel.NativeStyle = True + Style.TextColor = clWindowText + Style.IsFontAssigned = True + StyleDisabled.LookAndFeel.NativeStyle = True + StyleDisabled.TextColor = clWindowText + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 0 + Height = 21 + Width = 137 + end + object cxCurrencyEdit4: TcxDBCurrencyEdit + Left = 562 + Top = 22 + AutoSize = False + DataBinding.DataField = 'IMPORTEIVA' + DataBinding.DataSource = DADataSource + Enabled = False + ParentFont = False + Properties.Alignment.Horz = taRightJustify + Properties.ReadOnly = True + Properties.UseLeftAlignmentOnEditing = False + Properties.UseThousandSeparator = True + Style.Font.Charset = DEFAULT_CHARSET + Style.Font.Color = clWindowText + Style.Font.Height = -11 + Style.Font.Name = 'Tahoma' + Style.Font.Style = [] + Style.LookAndFeel.NativeStyle = True + Style.TextColor = clWindowText + Style.IsFontAssigned = True + StyleDisabled.LookAndFeel.NativeStyle = True + StyleDisabled.TextColor = clWindowText + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 2 + Height = 21 + Width = 137 + end + object cxCurrencyEdit5: TcxDBCurrencyEdit + Left = 562 + Top = 46 + AutoSize = False + DataBinding.DataField = 'IMPORTETOTAL' + DataBinding.DataSource = DADataSource + Enabled = False + ParentFont = False + Properties.Alignment.Horz = taRightJustify + Properties.ReadOnly = True + Properties.UseLeftAlignmentOnEditing = False + Properties.UseThousandSeparator = True + Style.Font.Charset = DEFAULT_CHARSET + Style.Font.Color = clWindowText + Style.Font.Height = -11 + Style.Font.Name = 'Tahoma' + Style.Font.Style = [] + Style.LookAndFeel.NativeStyle = True + Style.TextColor = clActiveCaption + Style.TextStyle = [fsBold] + Style.IsFontAssigned = True + StyleDisabled.LookAndFeel.NativeStyle = True + StyleDisabled.TextColor = clWindowText + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 3 + Height = 21 + Width = 137 + end + object cxCurrencyEdit2: TcxDBSpinEdit + Left = 328 + Top = 22 + AutoSize = False + DataBinding.DataField = 'IVA' + DataBinding.DataSource = DADataSource + ParentFont = False + Properties.Alignment.Horz = taRightJustify + Properties.AssignedValues.MinValue = True + Properties.DisplayFormat = ',0.00 %;-,0.00 %' + Properties.ImmediatePost = True + Properties.MaxValue = 100.000000000000000000 + Style.Font.Charset = DEFAULT_CHARSET + Style.Font.Color = clWindowText + Style.Font.Height = -11 + Style.Font.Name = 'Tahoma' + Style.Font.Style = [] + Style.LookAndFeel.NativeStyle = True + Style.TextColor = clWindowText + Style.IsFontAssigned = True + StyleDisabled.LookAndFeel.NativeStyle = True + StyleFocused.LookAndFeel.NativeStyle = True + StyleHot.LookAndFeel.NativeStyle = True + TabOrder = 1 + Height = 21 + Width = 137 + end + end + end + object DADataSource: TDADataSource + Left = 80 + end +end diff --git a/Base/uViewTotales.pas b/Base/uViewTotales.pas new file mode 100644 index 0000000..18cfc84 --- /dev/null +++ b/Base/uViewTotales.pas @@ -0,0 +1,36 @@ +unit uViewTotales; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, uViewBase, ExtCtrls, StdCtrls, DB, uDADataTable, cxGraphics, + cxTextEdit, cxMaskEdit, cxDropDownEdit, cxDBEdit, cxControls, + cxContainer, cxEdit, cxLabel, cxDBLabel, cxCurrencyEdit, cxSpinEdit, + ComCtrls; + +type + TfrViewTotales = class(TfrViewBase) + DADataSource: TDADataSource; + GroupBox1: TGroupBox; + Label1: TLabel; + Label3: TLabel; + Label5: TLabel; + Label7: TLabel; + lblBase: TcxDBCurrencyEdit; + cxCurrencyEdit4: TcxDBCurrencyEdit; + cxCurrencyEdit5: TcxDBCurrencyEdit; + cxCurrencyEdit2: TcxDBSpinEdit; + TabControl1: TTabControl; + private + { Private declarations } + public + { Public declarations } + end; + + +implementation + +{$R *.dfm} + +end. diff --git a/Cliente/ProGestion.cfg b/Cliente/ProGestion.cfg new file mode 100644 index 0000000..e0985e5 --- /dev/null +++ b/Cliente/ProGestion.cfg @@ -0,0 +1,46 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-GD +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-E"..\Output\Cliente" +-N".\" +-LE"c:\archivos de programa\borland\delphi7\Projects\Bpl" +-LN"c:\archivos de programa\borland\delphi7\Projects\Bpl" +-U"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas" +-O"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas" +-I"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas" +-R"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas" +-LUPluginSDK_D7R;GUISDK_D7;BaseD7;vcl;rtl;dbrtl;vclactnband;vclx;visualclx;vcldb;dxThemeD7;cxLibraryVCLD7;cxExportVCLD7;cxEditorsVCLD7;cxDataD7;cxExtEditorsVCLD7;cxGridVCLD7;cxPageControlVCLD7;cxIntl5D7 +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/Cliente/ProGestion.dof b/Cliente/ProGestion.dof new file mode 100644 index 0000000..e620ca4 --- /dev/null +++ b/Cliente/ProGestion.dof @@ -0,0 +1,505 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=3 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=..\Output\Cliente +UnitOutputDir=.\ +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas +Packages=PluginSDK_D7R;GUISDK_D7;BaseD7;vcl;rtl;dbrtl;vclactnband;vclx;visualclx;vcldb;dxThemeD7;cxLibraryVCLD7;cxExportVCLD7;cxEditorsVCLD7;cxDataD7;cxExtEditorsVCLD7;cxGridVCLD7;cxPageControlVCLD7;cxIntl5D7 +Conditionals= +DebugSourceDirs=D:\Proyectos\Componentes\GUISDK\Sources\;D:\Proyectos\Componentes\PluginSDK\Source\;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Cliente;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Reglas +UsePackages=1 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=C:\Archivos de programa\Borland\Delphi7\Bin\ +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=2 +MinorVer=0 +Release=1 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 +[Version Info Keys] +CompanyName=Rodax Software S.L. +FileDescription= +FileVersion=2.0.1.0 +InternalName=ProGestion +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName=ProGestion +ProductVersion=1.2.0.0 +Comments= +[Excluded Packages] +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxTreeListVCLD7.bpl=ExpressQuantumTreeList 4 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxThemeD7.bpl=Express XP Theme Manager by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxLibraryVCLD7.bpl=Express Cross Platform Library (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxExportVCLD7.bpl=Express Cross Platform Export Library (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxDataD7.bpl=ExpressDataController by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxGridVCLD7.bpl=ExpressQuantumGrid 5 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxPageControlVCLD7.bpl=Express Cross Platform PageControl (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxSchedulerVCLD7.bpl=ExpressScheduler 2 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxsbD7.bpl=ExpressSideBar by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxComnD7.bpl=ExpressCommonLibrary by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarD7.bpl=ExpressBars by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarDBNavD7.bpl=ExpressBars DBNavigator by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarExtDBItemsD7.bpl=ExpressBars extended DB items by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarExtItemsD7.bpl=ExpressBars extended items by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxDockingD7.bpl=ExpressDocking Library by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxLayoutControlD7.bpl=ExpressLayout Control by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxNavBarD7.bpl=ExpressNavBar by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxGDIPlusD7.bpl=ExpressGDI+ Library by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxPSCoreD7.bpl=ExpressPrinting System by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxVerticalGridVCLD7.bpl=ExpressVerticalGrid (VCL Edition) by Developer Express Inc. +c:\archivos de programa\borland\delphi7\Projects\Bpl\RodaxFrameD7.bpl=Frames Acana (D7) +C:\WINDOWS\system32\dclShX_Namespace_V3D7.bpl=(untitled) +C:\WINDOWS\system32\vclShX_Namespace_v3D7.bpl=(untitled) +[HistoryLists\hlDebugSourcePath] +Count=2 +Item0=D:\Proyectos\Componentes\GUISDK\Sources\;D:\Proyectos\Componentes\PluginSDK\Source\;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Cliente;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Reglas +Item1=.\ +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=4 +Item0=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas +Item1=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\..\Obras\Cliente;..\..\Facturas de cliente\Cliente;..\..\Contactos\Cliente;..\..\Documentos asociados;..\..\Recibos\Cliente +Item2=$(DELPHI)\Lib\Debug;E:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\..\..\GUISDK\lib\d7;..\..\Contactos\Cliente;..\..\Documentos asociados;..\Reglas +Item3=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=.\ +[HistoryLists\hlOutputDirectorry] +Count=2 +Item0=..\Output\Cliente +Item1=..\Output\Servidor +[HistoryLists\hlBPLOutput] +Count=1 +Item0=..\..\..\Output\Cliente +[HistoryLists\hlDCPOutput] +Count=1 +Item0=.\ +[Exception Log] +EurekaLog Version=519 +Activate=0 +Activate Handle=1 +Save Log File=1 +Foreground Tab=0 +Freeze Activate=0 +Freeze Timeout=60 +Freeze Message=The application seems to be frozen. +SMTP From=eurekalog@email.com +SMTP Host= +SMTP Port=25 +SMTP UserID= +SMTP Password= +Append to Log=0 +Show TerminateBtn=1 +TerminateBtn Operation=1 +Errors Number=32 +Errors Terminate=3 +Email Address= +Email Object= +Email Send Options=0 +Output Path= +Encrypt Password= +AutoCloseDialogSecs=0 +WebSendMode=0 +SupportULR= +HTMLLayout Count=15 +HTMLLine0="%3Chtml%3E" +HTMLLine1=" %3Chead%3E" +HTMLLine2=" %3C/head%3E" +HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E" +HTMLLine4=" %3Ctable width="100%%" border="0"%3E" +HTMLLine5=" %3Ctr%3E" +HTMLLine6=" %3Ctd nowrap%3E" +HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E" +HTMLLine8=" %3C%%HTML_TAG%%%3E" +HTMLLine9=" %3C/font%3E" +HTMLLine10=" %3C/td%3E" +HTMLLine11=" %3C/tr%3E" +HTMLLine12=" %3C/table%3E" +HTMLLine13=" %3C/body%3E" +HTMLLine14="%3C/html%3E" +AutoCrashOperation=1 +AutoCrashNumber=10 +AutoCrashMinutes=1 +WebURL= +WebUserID= +WebPassword= +WebPort=0 +AttachedFiles= +Count=0 +EMail Message Line Count=0 +loNoDuplicateErrors=0 +loAppendReproduceText=0 +loDeleteLogAtVersionChange=0 +loAddComputerNameInLogFileName=0 +loSaveModulesSection=1 +loSaveCPUSection=1 +soAppStartDate=1 +soAppName=1 +soAppVersionNumber=1 +soAppParameters=1 +soAppCompilationDate=1 +soExcDate=1 +soExcAddress=1 +soExcModule=1 +soExcType=1 +soExcMessage=1 +soActCtlsFormClass=1 +soActCtlsFormText=1 +soActCtlsControlClass=1 +soActCtlsControlText=1 +soCmpName=1 +soCmpUser=1 +soCmpTotalMemory=1 +soCmpFreeMemory=1 +soCmpTotalDisk=1 +soCmpFreeDisk=1 +soCmpSysUpTime=1 +soCmpProcessor=1 +soCmpDisplayMode=1 +soOSType=1 +soOSBuildN=1 +soOSUpdate=1 +soOSLanguage=1 +soNetIP=1 +soNetSubmask=1 +soNetGateway=1 +soNetDNS1=1 +soNetDNS2=1 +soNetDHCP=1 +sndShowSendDialog=1 +sndShowSuccessFailureMsg=0 +sndSendEntireLog=0 +sndSendXMLLogCopy=0 +sndSendScreenshot=1 +sndUseOnlyActiveWindow=0 +sndSendLastHTMLPage=1 +sndSendInSeparatedThread=0 +sndAddDateInFileName=0 +sndCompressAllFiles=0 +edoShowExceptionDialog=1 +edoSendEmailChecked=1 +edoAttachScreenshotChecked=1 +edoShowCopyToClipOption=1 +edoShowDetailsButton=1 +edoShowInDetailedMode=0 +edoShowInTopMostMode=0 +edoUseEurekaLogLookAndFeel=0 +csoShowDLLs=1 +csoShowBPLs=1 +csoShowBorlandThreads=1 +csoShowWindowsThreads=1 +csoShowProcedureOffset=0 +boActivateCrashDetection=0 +boPauseBorlandThreads=0 +boDoNotPauseMainThread=0 +boPauseWindowsThreads=0 +boUseMainModuleOptions=1 +boCopyLogInCaseOfError=1 +boSaveCompressedCopyInCaseOfError=0 +Count mtInformationMsgCaption=1 +mtInformationMsgCaption0="Information." +Count mtQuestionMsgCaption=1 +mtQuestionMsgCaption0="Question." +Count mtDialog_Caption=1 +mtDialog_Caption0="Error." +Count mtDialog_ErrorMsgCaption=2 +mtDialog_ErrorMsgCaption0="An error has occurred during program execution." +mtDialog_ErrorMsgCaption1="Please read the following information for further details." +Count mtDialog_GeneralCaption=1 +mtDialog_GeneralCaption0="General" +Count mtDialog_GeneralHeader=1 +mtDialog_GeneralHeader0="General Information" +Count mtDialog_CallStackCaption=1 +mtDialog_CallStackCaption0="Call Stack" +Count mtDialog_CallStackHeader=1 +mtDialog_CallStackHeader0="Call Stack Information" +Count mtDialog_ModulesCaption=1 +mtDialog_ModulesCaption0="Modules" +Count mtDialog_ModulesHeader=1 +mtDialog_ModulesHeader0="Modules Information" +Count mtDialog_CPUCaption=1 +mtDialog_CPUCaption0="CPU" +Count mtDialog_CPUHeader=1 +mtDialog_CPUHeader0="CPU Information" +Count mtDialog_CustomDataCaption=1 +mtDialog_CustomDataCaption0="Other" +Count mtDialog_CustomDataHeader=1 +mtDialog_CustomDataHeader0="Other Information" +Count mtDialog_OKButtonCaption=1 +mtDialog_OKButtonCaption0="%26OK" +Count mtDialog_TerminateButtonCaption=1 +mtDialog_TerminateButtonCaption0="%26Terminate" +Count mtDialog_RestartButtonCaption=1 +mtDialog_RestartButtonCaption0="%26Restart" +Count mtDialog_DetailsButtonCaption=1 +mtDialog_DetailsButtonCaption0="%26Details" +Count mtDialog_SendMessage=1 +mtDialog_SendMessage0="%26Send this error via Internet" +Count mtDialog_ScreenshotMessage=1 +mtDialog_ScreenshotMessage0="%26Attach a Screenshot image" +Count mtDialog_CopyMessage=1 +mtDialog_CopyMessage0="%26Copy to Clipboard" +Count mtDialog_SupportMessage=1 +mtDialog_SupportMessage0="Go to the Support Page" +Count mtLog_AppHeader=1 +mtLog_AppHeader0="Application" +Count mtLog_AppStartDate=1 +mtLog_AppStartDate0="Start Date" +Count mtLog_AppName=1 +mtLog_AppName0="Name/Description" +Count mtLog_AppVersionNumber=1 +mtLog_AppVersionNumber0="Version Number" +Count mtLog_AppParameters=1 +mtLog_AppParameters0="Parameters" +Count mtLog_AppCompilationDate=1 +mtLog_AppCompilationDate0="Compilation Date" +Count mtLog_ExcHeader=1 +mtLog_ExcHeader0="Exception" +Count mtLog_ExcDate=1 +mtLog_ExcDate0="Date" +Count mtLog_ExcAddress=1 +mtLog_ExcAddress0="Address" +Count mtLog_ExcModule=1 +mtLog_ExcModule0="Module" +Count mtLog_ExcType=1 +mtLog_ExcType0="Type" +Count mtLog_ExcMessage=1 +mtLog_ExcMessage0="Message" +Count mtLog_ActCtrlsHeader=1 +mtLog_ActCtrlsHeader0="Active Controls" +Count mtLog_ActCtrlsFormClass=1 +mtLog_ActCtrlsFormClass0="Form Class" +Count mtLog_ActCtrlsFormText=1 +mtLog_ActCtrlsFormText0="Form Text" +Count mtLog_ActCtrlsControlClass=1 +mtLog_ActCtrlsControlClass0="Control Class" +Count mtLog_ActCtrlsControlText=1 +mtLog_ActCtrlsControlText0="Control Text" +Count mtLog_CmpHeader=1 +mtLog_CmpHeader0="Computer" +Count mtLog_CmpName=1 +mtLog_CmpName0="Name" +Count mtLog_CmpUser=1 +mtLog_CmpUser0="User" +Count mtLog_CmpTotalMemory=1 +mtLog_CmpTotalMemory0="Total Memory" +Count mtLog_CmpFreeMemory=1 +mtLog_CmpFreeMemory0="Free Memory" +Count mtLog_CmpTotalDisk=1 +mtLog_CmpTotalDisk0="Total Disk" +Count mtLog_CmpFreeDisk=1 +mtLog_CmpFreeDisk0="Free Disk" +Count mtLog_CmpSystemUpTime=1 +mtLog_CmpSystemUpTime0="System Up Time" +Count mtLog_CmpProcessor=1 +mtLog_CmpProcessor0="Processor" +Count mtLog_CmpDisplayMode=1 +mtLog_CmpDisplayMode0="Display Mode" +Count mtLog_OSHeader=1 +mtLog_OSHeader0="Operating System" +Count mtLog_OSType=1 +mtLog_OSType0="Type" +Count mtLog_OSBuildN=1 +mtLog_OSBuildN0="Build #" +Count mtLog_OSUpdate=1 +mtLog_OSUpdate0="Update" +Count mtLog_OSLanguage=1 +mtLog_OSLanguage0="Language" +Count mtLog_NetHeader=1 +mtLog_NetHeader0="Network" +Count mtLog_NetIP=1 +mtLog_NetIP0="IP Address" +Count mtLog_NetSubmask=1 +mtLog_NetSubmask0="Submask" +Count mtLog_NetGateway=1 +mtLog_NetGateway0="Gateway" +Count mtLog_NetDNS1=1 +mtLog_NetDNS10="DNS 1" +Count mtLog_NetDNS2=1 +mtLog_NetDNS20="DNS 2" +Count mtLog_NetDHCP=1 +mtLog_NetDHCP0="DHCP" +Count mtLog_CustInfoHeader=1 +mtLog_CustInfoHeader0="Custom Information" +Count mtCallStack_Address=1 +mtCallStack_Address0="Address" +Count mtCallStack_Name=1 +mtCallStack_Name0="Module" +Count mtCallStack_Unit=1 +mtCallStack_Unit0="Unit" +Count mtCallStack_Class=1 +mtCallStack_Class0="Class" +Count mtCallStack_Procedure=1 +mtCallStack_Procedure0="Procedure/Method" +Count mtCallStack_Line=1 +mtCallStack_Line0="Line" +Count mtCallStack_MainThread=1 +mtCallStack_MainThread0="Main" +Count mtCallStack_ExceptionThread=1 +mtCallStack_ExceptionThread0="Exception Thread" +Count mtCallStack_RunningThread=1 +mtCallStack_RunningThread0="Running Thread" +Count mtCallStack_CallingThread=1 +mtCallStack_CallingThread0="Calling Thread" +Count mtCallStack_ThreadID=1 +mtCallStack_ThreadID0="ID" +Count mtCallStack_ThreadPriority=1 +mtCallStack_ThreadPriority0="Priority" +Count mtCallStack_ThreadClass=1 +mtCallStack_ThreadClass0="Class" +Count mtSendDialog_Caption=1 +mtSendDialog_Caption0="Send." +Count mtSendDialog_Message=1 +mtSendDialog_Message0="Message" +Count mtSendDialog_Resolving=1 +mtSendDialog_Resolving0="Resolving DNS..." +Count mtSendDialog_Connecting=1 +mtSendDialog_Connecting0="Connecting with server..." +Count mtSendDialog_Connected=1 +mtSendDialog_Connected0="Connected with server." +Count mtSendDialog_Sending=1 +mtSendDialog_Sending0="Sending message..." +Count mtReproduceDialog_Caption=1 +mtReproduceDialog_Caption0="Request" +Count mtReproduceDialog_Request=1 +mtReproduceDialog_Request0="Please describe the steps to reproduce the error:" +Count mtReproduceDialog_OKButtonCaption=1 +mtReproduceDialog_OKButtonCaption0="%26OK" +Count mtModules_Handle=1 +mtModules_Handle0="Handle" +Count mtModules_Name=1 +mtModules_Name0="Name" +Count mtModules_Description=1 +mtModules_Description0="Description" +Count mtModules_Version=1 +mtModules_Version0="Version" +Count mtModules_Size=1 +mtModules_Size0="Size" +Count mtModules_LastModified=1 +mtModules_LastModified0="Modified" +Count mtModules_Path=1 +mtModules_Path0="Path" +Count mtCPU_Registers=1 +mtCPU_Registers0="Registers" +Count mtCPU_Stack=1 +mtCPU_Stack0="Stack" +Count mtCPU_MemoryDump=1 +mtCPU_MemoryDump0="Memory Dump" +Count mtSend_SuccessMsg=1 +mtSend_SuccessMsg0="The message was sent successfully." +Count mtSend_FailureMsg=1 +mtSend_FailureMsg0="Sorry, sending the message didn't work." + + diff --git a/Cliente/ProGestion.dpr b/Cliente/ProGestion.dpr new file mode 100644 index 0000000..0450844 --- /dev/null +++ b/Cliente/ProGestion.dpr @@ -0,0 +1,20 @@ +program ProGestion; + +uses + Forms, + uPantallaPrincipal in 'uPantallaPrincipal.pas' {fPantallaPrincipal}, + uMenuUtils in 'uMenuUtils.pas', + uSplash in 'uSplash.pas' {SplashScreen}, + uAcercaDe in 'uAcercaDe.pas' {fAcercaDe}; + +{$R *.res} + +begin + Application.Initialize; + + Application.Title := 'ProGestion'; + Application.CreateForm(TfPantallaPrincipal, fPantallaPrincipal); + Application.CreateForm(TfAcercaDe, fAcercaDe); + Application.Run; + Application.Terminate; +end. diff --git a/Cliente/ProGestion.drc b/Cliente/ProGestion.drc new file mode 100644 index 0000000..a5d5271 --- /dev/null +++ b/Cliente/ProGestion.drc @@ -0,0 +1,14 @@ +/* VER150 + Generated by the Borland Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +STRINGTABLE +BEGIN +END + diff --git a/Cliente/ProGestion.drc2 b/Cliente/ProGestion.drc2 new file mode 100644 index 0000000..a5d5271 --- /dev/null +++ b/Cliente/ProGestion.drc2 @@ -0,0 +1,14 @@ +/* VER150 + Generated by the Borland Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +STRINGTABLE +BEGIN +END + diff --git a/Cliente/ProGestion.res b/Cliente/ProGestion.res new file mode 100644 index 0000000..334fba1 Binary files /dev/null and b/Cliente/ProGestion.res differ diff --git a/Cliente/uAcercaDe.ddp b/Cliente/uAcercaDe.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Cliente/uAcercaDe.ddp differ diff --git a/Cliente/uAcercaDe.dfm b/Cliente/uAcercaDe.dfm new file mode 100644 index 0000000..7b7f570 --- /dev/null +++ b/Cliente/uAcercaDe.dfm @@ -0,0 +1,1139 @@ +object fAcercaDe: TfAcercaDe + Left = 531 + Top = 365 + Width = 435 + Height = 435 + ActiveControl = bAceptar + Caption = 'Acerca de...' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object JvGradient1: TJvGradient + Left = 0 + Top = 97 + Width = 427 + Height = 4 + Align = alTop + StartColor = 2971346 + EndColor = 4828405 + end + object Bevel1: TBevel + Left = 128 + Top = 359 + Width = 290 + Height = 9 + Shape = bsTopLine + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 427 + Height = 97 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object Image1: TImage + Left = -19 + Top = 0 + Width = 450 + Height = 97 + Picture.Data = { + 0B544A76474946496D6167654D850000474946383961C201FA00E60000FFFFFF + F78947E46637DB5933FEA85ADFAC9DFDB565B4B3B3000000F2F2F2544E4DC63A + 2AFBCA9BEDEDEDB52724FC944CEA713CC6C5C5E3E3E3969595D4D4D4FAFAFAAA + 2824F28042CB412CB26862DBDBDBFEFEFEFCFCFCFE9E52FDC375CF472EF6D0BA + FDE1C5282828F3A57DCE67589F2925C5564DD88F80D8BFB6FDEADAC47871D34D + 2FCB9B93FEF2E6E05F35D8D4D2FFF7F0C3453CF9F1EFB24E47B48580BF2F27D7 + CCC7B73A34F4905AA73C36EB8E68F3DCD6FEF9F6FFFCF9DA7D69E6D6D0AA312B + FFFDFC878686C0C0C0FFFEFCFFFEFEFFFFFEEE783FD7D7D7AAAAAAD6D6D6A2A1 + A1CCD0D1F5E8E6D9D9D9E7E7E7D86347CBCBCBE67750CF5440E1E1E1E5E5E5DE + DEDE999A9AF7F7F7E9E9E9D0D0D0D75331BBBABAFBFBFBE76C3A6C6A6A000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000002C0000 + 0000C201FA000007FF80008283848586850D58001B8B1B2D211E212944873D29 + 0C06999A9B9C9D9E9C1E3B09A30958A4A7A8A9AAABACADAEAFB0B1B2B3B4B5B6 + B7B8B9BABBB6580D89A5C1A6A6BF1BC412A51509BFC0AB58A6C9BE87D3D4820D + 158B00448F9121444687DC1E9AE3E399E506E6E9EBEAEDE721A4D0C1A9F2A7F5 + F1AAF7A3FAF3A8FCFFF9F0D10B38B0A03F82070DDA43B850A1C084101B467C28 + B122C58BFB183E94C71161475FCDF655C0A26188060024B924A902200195081A + 122853D860542245D572124A948D1B03062D06311A642485BA4F48936EF29042 + A7D3A750A34A9D4AB5AAD5AB58B36ADDCA751AA3678624446109A0C190245A12 + 6C7882E4A4D0A185FF36C80550418293525BAF2DF2C914E7060E707B405A778E + 9DE1C288092BF6E02168D7C790234B9E4CB9B265AC7305CD658477A8132D5904 + 6539C0E549852C4AC6FA95CBBAD1A22E1500D375A2C409CEAC898A888B14D418 + 96CC002E291D3E9CE9E5E3C8932B5FCEFC32A3E70938A094102181E80307AC03 + 109BA5CB21D6CF4776E1207D7C822CD8F25680018941371874B36807602408A4 + A3C4F3936B0ABCB9FFFF0006282064990D554A1651482088044364B7A0164F0C + F59784706DD0056CE409F2DB061558D800573018E51E6F589CC6932044C08089 + 7E2C2EE54D54700D28E38C34D6F8588C9B7521171651582108155C704116154A + F8280860486ED608FF6C3A32225D23093CA181135B59F29307EE850003164F48 + 709B36C2B52866243CD868E69968A679A3848B54A04559072CF126004A502001 + 36496A36E1915D94F8DC5F19B6640512545099150F2D8CC858243048A04115DE + 0DC2C3609910A094A5956A82A9019B768A257C6A862AEAA8A4C6A5194A5D2471 + C59C4F44F0E1918D3C471E6B1792F7646B82D849051212BC7AD5362128CA4008 + 2134E08415D111C2837B62362B49A9D0462B6D7331C24A97065C4461CD151320 + A11907B1C92A21B8E1BE35C8104364011A29593DA228632158316816D586D929 + A7F866AA2FBE96DEDB2F39211401D573A72A998DC16CB27930C10B67D370C20C + FFE970C2A73E5C70FFC4AE413C71C615636CF1C7126B2C72C71B83CCB1C9089F + 4CF1C629B78CB1CB257B1CF250B2C115C5017352B1C4045A7010C58705EEF957 + 051DE20A5716494C908404F255D14068561121587B5862F9C30E4A54F1250096 + E0D76C7E917C33EDD864978D9920B1390CC0CD142C82C412574431945847162D + 148642EB284802074C70859D5D6451937C5709F62E6328BC306803910EA222BF + 90FF2B79E4944F8E29083C8063F6E69C774E08877A3EB9F612866A10E7108638 + 088074CF5D381E787A4B2701B70764C1C132593C6185E0564DBDA8B0515041C5 + 6F85D8ABE9F1FBDE9B3CF2F832000325016AEEF9F4D44BE5E4EA1A6A9144DB00 + 5031C1041110F264FF035C40CDC8781C3489BD6C286541411514687B5EEE0938 + 410115BE4E15ECA2FC3360C30BF84BCF208810821154EE80964360E480128400 + 112108D2AB9E0427F8165CA1A44173D202B794B037D165610851301F925E3708 + 126E6757853AD0D312E0A5F765616B4F0156D5DC434306FCC04EC41B600F3091 + 40E5512E53FF0222E418082018C0800702A3A01225C89A5B71E1006EA180DFB8 + 97002E68876F5198CF84FC44A141708002EAD200FE46818C98B84426EC8B8A0C + F9D7BF1F2001528508C2257AA8403A4A8E00921B560FFC1384478400894B0CE4 + F4D867969508220A7E730B16828484100E2102B7F10ED1C2B519B87061090DF8 + 594D98B1C22CD04BFF4F53D98DB0B084022B38A101A213040F8C52C756DA1172 + 8CF20F370226C85A96AA5AD81B8A590E40054168F06F1A7AA2133880052D1C20 + 3D484A5FDA1CC63E2A706B0955380F1686E7B42C54013D47B2A0538CC01E367A + D306F29A8FA42071C77EE19153E7C4A339D7894ECBA5D3004049A272D833022C + D9F29EA4BA503645D320232172091C6C490470A6962A6800416DB210FAE40218 + B9E88D0A49039F2904F78B283DA1261DB215C39E6225C68C125E28A002360BD1 + 4D579AF49504D0E372B8918910E0F3A568020F5CC8579A5C2DE10064C1020522 + A0856B48800356D0800628E0AD1D35341BE03A9215FA9645C17989191278825A + 145AA286E2B21A89FF3A9C3751800C5C268A5FEA0CAB58D3495676AAB39D6135 + C00840E018E4D093002318164CE76AA3BF0CA28A497895F6ACA8A12C58011933 + 69C045ADF00B2784E63634D38C069090055799E2095A8866039C16A11D15AD4F + EA7B0A7B68F8BBCE322002C333841C1980D2769AF6ACA82DEB69E1D9D6CB4C6A + 1C96922B5D672B20BD01200B4FD44E14AEA0BA2EC8042574F1ED0B9191880668 + 41418B904D8716A401532AE119C8D22905E6F7A48666D4A1CB758AE1BCC9C69F + 4456808E1BCC58C74BDEF29A579DB2BD4C37CF1A821D48E60B0888AF7CE74BDF + F90A410863BB821014505FF9DEF70AB43DC4139EF82A2E28ED55F0EDAF1088A1 + 357529E155B34ADFFFDEC4581BF9FCE20982439015D2D69A0AA00F00AF4B2535 + 2C41358F76165E3169DC2012E581D4BAD3ACAA7571E4CE19B6CBC811B6788C44 + FEBA92E0FEFA98BEF82595167AFC63FA7EC17342408002A651642EB4E40043D0 + CE100EAC210AF85804C7B430157EE624EF5868107D4382294F731E66E40E9515 + 04714663F594DD70F7773688A68883C380119CF7CE78262F3C9F6719E1847504 + 2168C27B8B4CE8F88AC02D6A4A72A17DECE4B27141BE4B3E4491711A81A11878 + 09DA69C086893CDF4A8F820A5AD0C050F4965D29FA8D0A36115C02B416CDF450 + E87C8D535835BAF9E6FED9E0078C9B332BC58AD63CFB7AAC2A9D4C8A7818561B + CA60D08B2EB20876FF5CA306F037D93E46DDB43440E4481B62D2E5997212B453 + 05D000C00AFD1541149ED100243C972EE7CB4C15B8B5AAB22C63939A1E8517D5 + D6A64855B21A462082516ADDDD1744079721E8F5AF074EDEB5824A323000418B + D35A005C231BDA3E0EB2991A200288FFD848D0E2B49299FC632E6C200257C0B4 + 2034E06D41685CDC2D51021220BC3AD0B5A40A8884E4282E1AA50620A31480D9 + 108E2C848DCDA4F110C3D62A77FDA704711222E00227B8D2CFE9BCC9186EBC36 + 343A57346E71F962BC46CFAE7A7D4500AD2BF8D8DA8598B4062029082BFC8C10 + 8FA62FCAA58366D089AE0BC71AEA33B0E0C928B1B026D2C18232ADFA16D808C5 + 35D3E0E6FEF8DDBFFFE94E030468ED803A158F47C613C0F1905FBCE41B3FF9C7 + E738050D844C11E6387903349CD95BA1BAD6254E23456BBDBF132095E9EB0B76 + 4214390943313BD45A0E80ACCB575B1D5A8D5D05518537FE0C199E7C1A16A2AA + 97D5FDDB18D7758D3E09B6FB4A0C9EF01EB50112602888102CFDFAE335809634 + CF9EA4A7F407D4D78AE8ABDEFA0169E1F43F2E3F9A564FDF25E3B2C8A893C01B + C5978D8ACB77ED95944E7AAAE0A8E6CA07C3E711254E934372715D05382B83E0 + 61DFC221E0553CF7017D8B62031A306782406C91477994A7781A68791BD8811C + F8811E681C8F610976968196570056107E59317EA41705EC575F36627FE8D75F + DA222A2F0869A034FF1793D62BF3560D32756FAB636021840C74B70CEF261FAC + 0317B1D33A1E462BC8341E58A06244416B10187DC87508D6877D5A785620F018 + 46F055E5C50056502691C1828630014576750212058BF605D2B65F85467A6972 + 83F1656D06B30889F024BE204DB0722B71D11FD53204DCC20554404C733712C1 + 001E85702BB8022E80A2231ED6210A6808AB5485DD7585855004A4E5819C0882 + 9ED889A008820C90395CC1030A078A9E27015238753F2687822083F5D5683AC1 + 05CF2602AE480849F0820A200435580DE3275FB23808BF880047460D0D200454 + 678BA9F7141A808C57765F3941871B476FC6E72B7B981E73D27C82705FFDB58B + BDD8007073053EF2FF0CAE131BB051212E088B08200427113439A777AFC32114 + A82296B828216003A06704826182A1D88F9FF881FC68798DB1475BC1799D9852 + 3B003D90618686607BF4D568E0D65F00F68222900486208DF70760D450681679 + 08EA5887F785688560050ED98A39A105256992859092457664CA007F65612499 + 819190C605A7912D1B300A5D80868C567B4526717F021BBF712BFA44520F588F + 1E0002A04704CBF28FFEF8944E0982ACA515FA080201B98128900211C4632AB9 + 921D37723E16373ED69187F491E9077A6CD892D4C093BB788B86E075102702C1 + 480870199785609645A600A3B0014D764899110578F97523A10CBF50013CD95F + 491098FE152B7F41FF42343389472774D0676C875004A678955109959AF9780C + D01459D1032DD062A1B856A0177A5D490881598311595F5790925C3708691797 + 6A080087E96373A215B5097173090049707A60C7923FF60543D16415A001C8B5 + 01B109710A702135512275B975C95683E4625549089982408548298652471F3B + F4781DA081DFE99DDF399EE2299EE3099EE8699EE4B99E1D00681428158FC39E + E8690028509AE2779ADB5864AFA2013E267A12979655B76C85F08BAFA915CF59 + 7522D9003348968AD98D2D91009396008D03A0E49793FB909B5AE77E35935007 + 934AD88994F1127E4650409959A2FD189EFE08145961141D88A29667004A3919 + 0C290849009C0850FFA0AB996C464271E8578C8360A3EA4715399AA184409384 + 666D36DA5F5F90877D39083C8A7E42703B127AA0A7874A7071541CB042E0B56F + FC930EDEE4A5DD1513D4B089E759A6667AA6689AA66ADA01910041BD53406BDA + 01F4796C0F3783D30800FC096DD666A484168C8A2987C3485F8896A48B268BC0 + 09605CA0988DD6A0ACF7244DF6277CAA6C2345A55A077BE99324393754A8165E + 9209810C0002DB2908206067EBF9892EBA9927BA8104C0569947158962AAE049 + 9A326AA7C03808434A681D09A1C15976C009768AA991C208714672AB44FA8A3E + B68C2D11981A49A84606620AFA957FF1AC761A641B40A95527040548497F317C + 38C49DCF570E8C01FFA6E2BA285E0A0FD46003EA19A7EABAAE680A68642815F5 + 8109EA4A9FA17A9FB45AA0784A68C5C80512278D6469723FD68B7D3AA010E716 + 040A60C74868AF8297029A9FF1755FF775758CDA7ECBC0018F2A1734F9058BD4 + A0D980A15A7764D8459D87C83529709448E9517F440D56C9AE2CDBB2E7995207 + 17157DC400EA0A57315AA7E8178CC42A5F3EEA954AEA911137088A4AB0D06624 + 8189AFBCF97AC61A9CD0480DD5228D914698DA017F4FF28B130018A7A1983568 + AD9046728A09B2C9E53A44C908D839AEEC10AEE4BA282890B2D38002E9EAB270 + ABA664321524B8AE733AABD35A0879EA63A027ADF5D58B45FA7542ABB48410A8 + F375127E1B8B8610FF984136B1862604C0DA832D01B5CF70510CC5975F2908CA + 660CA5B0933F29085C7BA3B69A971DE31B3A022E1CD05127DB5D2140908780AE + 6F1BB7B2FBB29D3915096700EBBA56745A86793B92BB7A08144A5FD3D09BE136 + B83F16B90060B8560700E747ABF1558CCC5A5F5FE02370412415208D22E01DE7 + 312116DB718CB0B712D92722A1960010BA1A2917C0598C48B224E7381E2C6618 + E810BFF07BB6DBD7B6B83B9E0FD001F9BBBFFADBBFFC9BBFDF09C0FEDBBF018C + BF03FCBFFD0B68537109E789C0FCAB7828B0BB0B897E0A00B88300BE4036BC57 + 360DC13B5FC61BB4855BB049EBBCA25BBEE867915D400550E4B00E7A48B10118 + 4D9A9CF5651B4F93FF081B90BE8CE0B1F2D50080E293FDD908EB1BB67D8205DF + 3AAE687BC4DE342CEF6A083F300223D0C0B34BC0EA2AC0650AB3ADAA1382F1C4 + 50DCAE0C20C18FA1BCF3F50542309BA33B96D360AD41BAB308F0A3A41BC2456B + C2246C6D8E8B989AB6370900B5D9900048D0508F3AC23E8688D6A416E3270272 + C1B5849C3E8C307EC2D9446F012E258209F21BC9F31BBFB1340D565067079CC9 + 0E9CC905DCC952BCC90F0CA34B9C13893202A07CC029D55A5F8C9F5081C1F365 + C18360AD485BC6FD15AC3F86B4608C002711BA1657A01D2CAC6511055984C7D8 + 03498CD0A43A1C5FC454982CCC7A8290CC08D09880317E0AF083DF121B44D3A5 + 698BC4DADC5D20E0FFBA8650052870BF025CCE06ACA6547CCE9FACCE54ACA24F + C1C0EABCC5EDC95678AB6055A1C664ECC76AC7C13F3608D08C00B7390D81E923 + BC6C97B0D9A309A0054682C7B602006D8305C48905D03C496EDCC2869C5C89BC + ABF9672B2FBC0192FCD1935CAEAA4C085930AA9A7CD2A79CD228CDC9F5AB1370 + AAD2FB4B000530D2AC08C253E1CA3BCCCF3EA6C13B7D48479A13457612C44BC2 + 7A9BCBF78713CF80C7BBC77FDDEB630750220750645472B93EFCB3B479CBABF3 + 24BD9A31E481214B12D2E00AD2F11B4FD39000A7C8CE68EDC9E6ACD603CCD608 + 3C029E590D45B0436DBDCE9DDC995B59D3F62CA4FD3C0D89FBCA87207A60C791 + D46005030D00324CFF5FF61915FA657189200177A2D41C92194DF60CBF2C5F16 + 091CE47BD181A2C8D984377F92CD603DDAF2DB990A590809F00205400030BDD2 + ADFDDAFD3B8AF254099700DBF90BD757CC95362D15381D5FD580973DFBC1193C + 0846BA9B00409388FBB95DA15F849A16DAA1D4C42421D8062E9B8B8B45A691A1 + 0B624341CD9A31C4A2E3241C60C4616DB61FDD99314B0858F0029B68DBAEDDDE + 301D09E04C892FEDDEDF196C13BCDB51A1C6D5208DD246DC17470897DD7E1D89 + 488B66B44516D080F9B8423001426074B908B1F285ACC79D86B082BD41A3B91D + 37121C60A357A04B5A0BBA58AD3E8AEC50E0823E8C8805623DDA898125348D12 + AACDDA0F10E3321EFFE3FA4BE3325EE3FB6BE333BEE339CEE337FEE3F9CB004D + 30DB245500A6ECE3487EDB2070DE7A5D5F6EA913BDBDC6D410E5EB38725B7D97 + 242CA800FBB909DB978AA936D2D88E20FE634B6005F7558398EBD4B071BDFA8A + 9C8AC9757291CC5CC73EBD2ACD2176218012DE29BEE7E51AD78590DE36F0C430 + 6DE3F4CDDE08DC012D6D08B57DC084EEC0308BB3F675CF7D4D0D46ADB8853004 + 593E5FFE44C23EC2E1689300E3973105FDB0C3D971BEE50BCE8B5F7FC1D9DBFD + BB05D844836921E8B0E2E450EBB4CE187E8EDE5660031E800349FEEBC01EECC2 + 7EDBB93E08F671E4C37EE3B5CBBBF8DDCA93EED7732CBDD350E9858668D10EC2 + 34B9604FC0DDAE91FFD8200CD13FF6D47817A9B7CCC38091DDECC3DDAC512EB4 + 6221A4FDEEE8905E85701A3B30CE3D8EE38C7EEFFFDBE828ADE3FAAEBF309BD7 + 2AC2DAFEEBEFF82EE3A90CE98BC9D73D5D0DCD1BA0C678EDFA4A080F7F7A0DAB + C6D0764CC9F56DC9F6057D5201C4393E123F5FB037219C5DB51A9D738C9051A8 + 6B05EED0092F8F14E3E05287703B1210E8389EEC3ABFF33B8E036B35CA74E6EB + 3C8F03CB7EDF7B7DD3CF4E0DDE4E680D3B0D541E97FFDACC55D78B1B40EEE176 + 1A20567F8B260225A2AB4E0D78015E68203B2172AEDD8290BEDF3294CAD40066 + 04EF6E8F253D70DA9A112536C00042CFF3783FF4453F082FCDF3ED59ECA6D9EC + 4FA1DF4EA10573ACFF008B5D9676BAA4D310BDACF977CE66F14517290DC5A70A + F00C69DE5FD246304BCFF4A772EE589DEEBF3B420E556E5382056063EB8BA109 + 9D19DF7DF5022880EC793FFBC34EF47E5E04A39AF7386000EEC5EC47CFDB491F + 8D8556915011F95A279739E1F8984D0891A201122F0248606F2AFFA484461E20 + DF71B3C2F9D1EEA30E55AD45D67219FD75DC8B13A42025A5F0F6F05EC9F3EE57 + B94FFBEE3FEC20A03996090201ECF70A7C4FFAA58E621CD0500108430A088485 + 8687085F49008C8D8E8E4922889389568E5D8D5809429494428D1C1B1515581B + 1B0051929D845D1C1CAB5CA15DA700B49CAB840A5C8CA7A6AD579D2200ADA65F + 9D5FA2B3B54B561CFFAD5D561406D3D4D5D6D7D8D31E0C308F8C155954360538 + 0F01E6E8E7EAE9ECEBEEEDF0EFF2E823213C001C2D05F1FCEB3823208C781B48 + B0A0C18308132A5CC890911021AA107D1132A121232E42064D7AD8C0112D2C12 + 9474C4B7242325115F2AD6C2B781039650A61A99944891D428971C3CF6727593 + 96C35B87265AAA658A9632831BB0BCF4D98869D30813263C61D4404B1600063C + 64DDAA551B576A5AC382A5C6A0C5400E0DA8BCB031E2815B746ECFC57D2B972E + DCBB75F3DA7DBB976F8711667B846030B730DEBE3840F02862B1B1E3C790234B + 7E1C9356052B51A60248A04443824C0D12E45C89855751972B7BD112A594D4B0 + 2E5D9426985D8AE8FFCEA2A65C29EBA5335453D58D2A8C1EE88B542B5EBC86D3 + 5272658216AA1A2830E290ADBA756B29043EE2904002851FFBE689EF477EBC79 + 80457880686BBE5F87022D864F9E4FBFBE7DFAC07B21A130B2CA90034301F084 + 135694D612310950810F07C6E1635B230D649145030D60418A260984F64402A5 + 11B5520547ED340A6EA71D981B53AAC1D69423AEE8261C8830C9C25B17595CB1 + 08231428F1D94A5B79E5638F4076156456F678C360164EFCC04007E51D66D878 + 73B537CF031EA4C0C3927A49890E0E0CA4D0C37D608629E698D339C508663B36 + C04512557C43811656B574A070392191401715E4B6D27015282181151A6812DA + A00964214187B58CFF760A883199D6529E2DCA694A050BB6A2684CC215D5946E + B9E5290A9D4985225C86495115C58EB25077DDAAD93010027109008A0239E604 + A08EADB5DEAA6BAEBCDABAABAFBDE20AECB0B632B0C308BAFAFAABB0C2FE0342 + 3764462BEDB40AEDD448AC118C24C1010748C048164A50B0C110898A92D4B902 + 46500B262D3978D1041A584561031B3ED1800459ECD8A8A600306A5BBB27E236 + 9D70C9C1C69485AB6D009B2BB43058599E09B48461C45469A14126EEB2AA7135 + 1E7810420FDA399240154EBC8002015AA6DCA4CAE700C424CBED8CC00DB534D7 + 4CF329BE0180458E23697000176D02A041671D5AD1004E1666DA00054E2C5A4B + 05058C9082D013D8FF580587F4664821154A498AE2A2473D521446135DFCB487 + 071A3CE96E78CE52193EA5E58C49BF09B8D6AF164EE4746228A16CECF7340C2C + E60D384E3861830EB92AABF8E28C37EEF8E38CFFD501E494DB3A820C3667AE39 + 988D62A1859D8C50B144B68C541141BE8F44D10AA81538A144877A6F36C30028 + 2071C0121254C0A104096C486F1679BEE8364B72CFAD9329147CA180F25CBC30 + BADE8A8ACAF06E0CBE0453BB0C3EA8731211608F848EA0CC1223167FFBDDE597 + DB35E044BC1EBCBC723BCCC23C6C3AC2BEEF4EFCE87460D6E6FCF71F599F5AA0 + 1400ACF0B30E65210A013ACD66A8A0B0962408512C390516A0B005105021502E + 914DDD9EA089DB30FF2853BF19866F1206938C1CE0325498C00C686026DCE4C9 + 6D7C9353CE5A02934650200251305016B4D00012C5A85F597802AB08400D225A + C78806A8C7FE3C122B2498AC00958BA214A74845CA8D6007FECBA21657E491D1 + 244003A76284EDB810B72744C10907015EBF34E1A8D83168062B4081A5B02083 + 266021364AD1C9A64C511B9C7DE4368C509E821831812F208338C9A921001A70 + B505254C8059A0C0844A53812A0C328623D4C48654553E566D230541185C16A2 + 039EC955F194A84C25E37050A42DBAB27F39634402F036120A1C20021DDA4F02 + 1B51001DCC0A0A05888D154E600228F800041E02C00F54E003127C20062060D0 + 0148B082154C4107FF3DE4C20958B09913F8A0099A52424652A2B70D70C19033 + 908A29969001E50921035128E4F22622818758A20114C104460E0080732AE09F + 34C8424B0E20840824E10B07D84016AC204F21886B3A39C9544B28A481AB55A0 + 931BDB06B458142B0A58010523C001E52EE02B92AAF2A49533E9E2705080A9BD + F2A5356B5770BED7A12824210A0284D3554CE3081A7C200337C0001400108119 + 60C0072AC000064E400446D000033F9DC2023020C72ED0600A27A0C10C6EE083 + 0D5421071FB0C10196EAB60D5841791310C21776344E1A8CB387F29C2754FE39 + CF067C2107FCE4C23F9B96915D4C40011328890284100A21CC407983E50012FE + 49917F6A017B20AAFF0516AED6002B20015F18DD5897BC218A2AE0CD060CD001 + 4A474BDAC7E1C0005884A96A6F361A7501400B4B50820D71DAC5153D75010590 + 4001389081A332A20018584013008082A9A240144605C12C7E60210E44010326 + 600C0A304082194C01733111C41742578A282C8F8141C808375BA2BC005D4101 + 2C64040B14B00400FC55018B50DE553C638A27FCB334EF4D4216F8D9CE4F00E0 + BC9F90A92822F4121A69800A0D30001117ACE00633F8C10E8E30843D26381665 + E17B4E00A94849CAE10074F8C31E0E3188472CE21293F8C4264E318A4D8ACCD5 + BA984C325D2417B8100559C66B47EE2A532368B00012508A0332C8016E19D185 + 19E0360B42A06E52FF122064398EA20A28C8C0564D30371E2FE00431C9C913DC + F9025E64C4BF00108402D8F5CF008D93162F581E07063BD82A2C8F160D188221 + 153083CF9CF93358F8671296B004E56D77341588D0D142818508DD29B31AFB24 + FA40D11D2468C064C84A694919A75265A9F4D227ADF4A46D85695B1520942F0E + 757D70D6080920E1398BA4821346C292950C84C727684415625083D40220030B + 60013E71DB8A04CCA006CAADC06D7DC0820598406F365800B02B738A04BCB7BD + 1BC8884A00A084E57DA60BE58DC95F85B01A437A570B6A3D007C4DD1507F162A + 238BD05D03FEB904BA2A2003D3191987A633AF5E48F8DE10CE37BE15BC8D7B6C + 2701AED3025B44AAFFE282AFD8E0083FB8C20DCE0019805AD410478AAB6BEB08 + 0944210B39E982C5C0781562884D351BA0410DB8598B06E4E00628809B9159C0 + 812FE41A365868B2396F10831F6C400340A032233250831A98A0613E11F322BE + DC8808FC93525DF8A706E474665ED080CD0D48C2F274B1010AFCD306A2283392 + E11B680A292F024D6842BEDAD48508798A3BF642D40610BDB1102CD1115888C6 + 0B9CC080907698D325C6FBC217AEF78487B8EF0B979ABF234EF847180F6DB1DC + 800422A099D752800A5A984A0E27BE2F678402D644E16D0D7CA01414DCA0D61C + 10B90FBA2003147C01D80060C1E60758801AC42094AA67018F0B609A2A247480 + EF46C5F286226D22FF97B7117F3D641536607435BBF99F0AD2EB27A820E68EFC + 950594DA4002DCB99221BC804377E263DA7392B37DEBFBFBDE4F620836DA0803 + 33CD0628B880FA3DBC7EF573B8FDF07FBFFCD93F7FF7D3FFFEF6CF7FFCDD2F7F + FEE39FA56F577885476ABFF11156C078D031045480048D9700D2E10C09F32879 + 0200425003B1460B43D07324900139E0002A60214B50031E98035A550305B001 + 07D0732A805716B00015A0011670033220014050033FB0123FC058CA73050EF1 + 4F73A6003B95740AB074A760742831113AC358B5F00528610A69C66652A7004F + C00119D15EB2246E3AA800D0E71B15F0041BC22E0F320D48046162187E635844 + 0D5625460212FBA1FF012880037BE77771388772D87E26865A21238003D83021 + A2057E523A07A8058D94283862208F0442FF350527583A585000404573272003 + A320035276032420012C6002B4C70395780209900126D0002C30053EE0542670 + 028C217D6AB53C42D0215DD0678C150559A656DEC20B57E0673CE85E5F402E1B + 705024B7010DE56C5FF00258D067B1E0200910017336114F901B8C241AA0F036 + 66388DE0C7600CB068C9D10043E3045A50001DC07FE0188EE2388EE4588EE678 + 8EE7A8038AA187EC381D99002745A305511046E5276BF49828CEE071A7C1185D + 900437F512856613B2410A8317048A220305697932E530102831A5C02F49117D + BCA12934C41A9032FF91DCC70BA5904774137D30D46C11331B13287D4FA04632 + A427A7007E65588D68B8920D6600E7E30DDDA10434091E70887FF1877F229693 + FA577F3CF9933E1994FF5716ED28803EB13314004943002769E22E5870405490 + 9169E31372D20851B0045730041CA20917323257534ECCD640C8419545213EAE + 80780AA328E52730B9A1365EB3304F83331542303A5305AC0643A3C10108B61B + 5DA72FFFB21A58410082A9608329980B569885498D2FB9598FF094D1A10419A6 + 033A808E945999967999E35800B656942FE51439D300A7D621FE31041AB0530D + 60506D921608040AFD62293E213758703B4940055D301BA1A135B35180FCE230 + C8F1200A131B8A64FF2ED381270C537EB1B33759162226720A599004B75797B4 + D99BFB4221D9A7304F8930E5A21CBCC192DCA99855828D7023014E400148005A + 938999E8999EEA697F8901038CC199FC63267B72145581044513014350208CF0 + 0443309B2868054AD07865E9290EA248D4A90196A03B4A8121A101238DC24562 + 0998AB713D2C123B9947A123444333448820F70D5A40630A9A161D721B314123 + 75D30BB4119654E90D8AF97D89996F89D92579880F1DE5516CE16147700139BA + A33ADAA33CFAA33E1AA4403AA4425AA4447AA4461A0082079F59849C8E900511 + 80468CE0045C70004103005430634B9713AEF31B1F743DDC470B00D73B115037 + 77C40439C4215930FF7C2D519254204058403A006097DF10054C400B24933B67 + 42013B420577DA9B09620A4B939B1C20014C008DC968368A77A8DF70A8A4591A + FDD80094724096B001A1511414C004C7F10487F2121A70A7E57410DD39AA66E8 + 018AD1544D81054FF03D4E342BEA97A3AFEA7E401AABB4DAA3B1CAA3B50AABB6 + 5AA4B92AABBEDAABAF0A1083C7A4369330BD4923AB7937073004236156386405 + 6BD30AD2319C3D51308D30346B9A0457F00C07E08F09C5014CC04FA190044370 + 053D048C8C0A00E4CA084BD09FAE4550E64A484B602042402EBDC904D0A68C56 + 5A0B57B0041473055170054A600A492004FCA4785FA08C35C6014AF0059A814F + D00A0037D412E52AFF01BD70055720415FC004DAF335B440988769988819B220 + 5BB28609B222AB605DF270F1460514F0B24A1035AF7A04434AB33A6AB348BAA3 + 386BA43BABB335FBB3467AB3392A050D47ACB0D4285D30344311A7B7D4214FA0 + 01F1A20147434377C4015570311F4491FD62435C40055570280900B07802B0E5 + 9A1311B00BA6C02DE62A0A428063EDEA10553063697B8B2361B073530513D043 + 8EC004B918010FA11918BB235F800500BB0C4200AAF5740505C521056B8554D8 + 214C804BAF78B0AA2A0457D0214E106025A2478C40AA9EBB6F06E076EF597EEA + E38756F002E470AB419BB3ABDBBAACFBBAABABA4AD64B431154BD1518B09F01F + 5AD0212E4B05E120FF50AE60211B390B143015C1791C8B940481250155A01412 + C00511300A48E08F52EA33CDB8014AE09CEC320443B05311C0B10010AE40E30A + 4C300413D02107307937C705CD681A56B00B128BAF23C105B51866557AAEDC3B + 0479B25F14C0054C9027DC9B047C9304A5D0054EF0A7559004F65901B6740002 + D53A68DB9BC9E408225BC1167CC1189CC127AB4432191D39B2162CA003343BC2 + 245CC2232CB4269CC22ABCC22C4CC228DCC22CE552B44B2DAF89193B9500558A + 048D8019554029B3840FA410917CB34306F22F44760051C105F9321B1C543775 + 93A1CC261FB81129655522D7B3A27A72299BEB28655526A2F0048888213CE543 + 14E2291273A294F7FF36BA29C19FDBC6F7A6868F500132102FE787029379C2B0 + EBB342BBBA38DBB37B8CC77E8CC73EDAC7B00A10331C2DA2920954707154B126 + B5787351C06A8CA02369D95CD28737DFA03D6881B107205B931544A490163D3C + 7115EA28CC06236A830F1F8949992740604A0ACAC10B558CA7CE3912ADB34B99 + 2731F9223E5DD747F2C9101A1CCCC22CCCDFE9115DF004394293A82B052DDCCC + CEFCCCD01CCD445B61876C1FA1BA19F1B2533EC30566D3004A6015C9F18E0EE4 + 404E800498304239736121218B68322F41346FAA7C16EC4295E5A4145D6C2E65 + 19292B111BFF0290B14197451131BC91004B3001F0CB01DC08967CC3122333B5 + 0A236F6A2919273BFFD1168CB2176CD1236BB230497EB59020FB717E05C0CCD1 + 3CD2245DD22C2C358757CDF371969B414B8C1005CBDAA71633A231D22E4E8071 + 2D3134CD1ACEA9469E4E5005C75C01CC3A1BBC039C2EC11BC9E40C68F31B6D43 + 910C22C5F9E81B0EF32810480C0A59144B710A56D0AFF1D8AC0BDD291BF212B2 + 642F0204919031CC689DD622EB31E059761EDC192025D2470001735DD7344BD7 + 783DC2747DD775BDD77DFDD779EDD7810DD8765DD8837DD83A001F2A6D1F1214 + 0548301A5A900401C4088B67AF21B4B5BD208B0774A538331C4AE05954702886 + 5615826805A291966D2336447691AE3627FB521423E9A5040381D553A213583D + 0C0329183248C9C8FFD9D6D22FF422D63A9376AF3D1F6A7DDC68CD988E5049E3 + 49014303522F6CD2D23DDDCD7C458B6D1F56806A0C7C00A826348C6C2F1E3196 + 2BF10411904098603C57E91D0846211262768C0C136737D54C3DCF323422F991 + 28C781D4B2FCA52A4214F64D1473341B75C30858309EACE90BBD2068C45076BB + 1C41C6F3A08E81DC121ECC8A31BAE1192E2FAB01BDC4CC874DD81DFEE11E1EE2 + 203EE2212E05CF72DDF3B10168E4390730ADA5BB539BA1C33A463CA7D00A86C8 + 2EA3F104CDB10401E4CE85F63B9F712286282A744964141A91667C22A991E49C + 151B77729CC3209147592114F3829294482234D65930A2BD23A91C3A3C131CE1 + 133EE616EC311CCDFF1D009A238FD64B7C4DE26E2EE270FEE6727E04F580E208 + 8122AC0921B724A55521B5122C121F4768204480FB89C4004B0ABD733563B7E5 + A77D1A00DD29476130403C0A2F1481C919432862E3551B4B4AED2E2898051E57 + 153B45435E5C681C941B4F79EA0FFACB678DD61D40E6C15C0FC33A0CDA08B36B + AE031090EBB93ED7BADEEBBEDEEBBCAEEBC1FEEBC45EECC67EECBB8ED7175000 + B36EE767E113458E055130D9581A0557FA08A78963A6E1121368E48A2201E62B + C018C23BF9C23B929A412402412067DFBC2C2ACF8027C4B11B0568790BEE4355 + 29ED51D1118BE25A1917A6B5602847235941541B33041CF401EB083F98CAAD91 + ABFA024C4301EB11FF00789DEC7D9DEC167FD8143FE2191FEC1C2FEC1E7FF11D + 7F45E0E9EC9BB22E1347DA040EEE2321C915B0C866D345FF0D43D3F10456912D + 775205F9E23BBC6320DC61C6401C81C9113CA380BC91F53412E5E8476E796779 + 960A33E871136657E05AC2999415C9302E61977A539B1B72F4050FE112FDEA60 + 4F00613FF6625FF6647FF6669FF6685F16168EE65A00B3267302C38EEC745FF7 + 767FF7C64EB4C345F2C4F1A006CC34DF92DD3B052808384A91279D2ED2C5401C + 3A1A40207C2AA9A63D2176191AA8E1400FD90B864891B0AD1452FD1AB631F414 + 39921AAA4891C537FFDC6B1DE1045638813F5663275928608CEA2589CE48CD2F + F591F0B80F932D80FFAAD3812414E0F08F66C7738FF7C4FFEB5EA0EBC75FFC79 + AF8ECDCEF7C38105E1B25350594B1430CA70E2E7DF2029C469A14749050BD8F8 + 7D39218C141AE71C3711B9ED650DE16949A14476CEB98C4956ADA12562DF0C73 + C67724B1D096C5033415BE00084F0D091B0000580D0D5885008C1B8F8C869293 + 9495969404991D99049B9E9C9B9A9DA39FA2A5A3A6A49D1E2030945859485A14 + 144E36283A105EBABCBBBEBDC0BFC2C1BC10C4C3C8C4C6BBCBBD47232997D2D3 + D4D5D6D7D69187B35886591112921A510D935514868F09001C1B1C5DED8F8D1B + 5D924313B5128A59FC0D59FE84D275A9C72E4137481B16CD43B8A14285760B1F + 61A920491B4288F2FF2C659CE42E9293258DD241E4108562030909DA7541F484 + 5021791DB56193498D13AA9B366D86CAA99367CE9D3B0930084129A104255A5E + 2051F2A2808E23C9A21E9B2AB52A55635321E00011049BD7AF60AB39AAD88843 + BA0414A214AAF0240A15435864AD33641640052DE90ABDE3F09021410055264C + B8A2044B022A58AC244820E8094576EEBA547899A02F8777582E6B6E5821F3E5 + 2EF434F39DDC308B150D565253B1F2E449160D4E24AC562DC18A6C2A4F565359 + 1DBB0AEA045C92949D1752429544F0DC25A89200F4CB8D61C3AAFA447DBAF5EA + D8AF4F6790A2C7240E8795D0A260C546011FBABCF852CF7E7DFBF7F0E3CB9F4F + BF3EB3113BBC47DFFFCFDF6BDD97E948400B5C1A68F1160056C8220968923C41 + 0115F144E6D02366B95357164B08A60516B0F893C83F4F7453963C1C88981021 + 0E7556D9440349B6528A294E54818B0F61714012437091E30143688144143AE2 + A8E310491C104512110CC1E3104344B1639239EA48173B7415A2582315342048 + 840CF5075676606A17E698D609150D25092448C10BE445318214EAA5F79E9CF6 + D569E79DF349C1800C5EF6E9A53604FD6508055A546148025168500E00B3180A + 40021A4C82146255BAA8D75A8C3046C10443649605165428729C205542429742 + 1B54B6503B0F71191A462A5D06095F073C512515733D96401692348097158650 + 41913C1548F01800FFBE865414781C56F0CF22118644939FD388D949079E606B + 2D99DC123002032D50D245035620558B1228B0B00C7B02D4D7AE7AEFBE17EFBC + ECD60BAFBD5ED04B5FBC3A80C003B5007F35AD2458A4256216894AF2E35CC031 + C9AB0611A434C943C9A543A55DA78DD3C00659248052220D1CF758851BAD44D9 + 418CB4F34E5F8FCC08A085924558C101E83812CB3A75916A571471A57325230D + BC554815111CDAF13F832C26013F01451BF057DD46BDEDD49B1810420B464CDC + 8006E32921010A6FD619AF7D63E369F67CCF10F5F4DAD74C2649155668611607 + 5544110E00AFF1EC8D928612ADC5A2F39448CF5897B1D300121238810487FF74 + 3C48A873B99397C5FF8237A26A2516BEF30883CAE6E5503C5C50508ECAEC58C1 + AB3C56947358B2857441451691B4162C3A54B8A5C1ED5C1F2781B11612C73636 + D7662B7CF0C4633BBCF1C817AF2DF2C6133F0208E14A02DE134BCD520BD870B6 + AB7DBEDC6FEF7DF7E07F2F7EF8F90A30BEF6E693EF3D040574F5FBFB95D4C581 + 801A7493A6120726AEC13A5D64C10517916AC806A23037BBB8833479A9CBA324 + A0812C2461311E0359165C13107A54892CEC3091417C672A2C5DE62190C9C84B + 64D5052E7C2C246EAB0D237A96002700800B16DB40151C65962784E31B007002 + E01AA18854D98A20145220FCA421B52252CD5A2308812BF2E2B1F1D4E2052828 + 40F6D447C5F355F1FF8A56CC62F8F0A39F21AE4D26B208D1361A6888B8494044 + E2E182135835210EE0A5652CBBD424B830019A2906098300882036369C7AC443 + 59ADD3E0B0FEF3C7D695C8397AE95C59383084709C24848508DA63B0D0121792 + 034B87825048FE51A01C96C38F1C5B076302372B400EEC77CC4BA52A5719BC55 + BA5295AD4CE212CF4205272AE107D82B1FFA76A94BF3A5CF97BD04A6307F49CC + 5DFA9297C344A600A4809F2278B14FA4814E0590B2284429411C1158D45D9430 + 0ED27C6E221B309D5D1048218F0866099F320C38FE719C2C1C2B12D3D2CB6352 + 25228EC0F3212EE32044E8C2017078C3511D3944A4BCF120003C487E91A49459 + E28217454564108FFF3A1D4C9E490D235AF488D991E524C6554B3689C709B9D4 + A248B188C55F92747C5200019F28BA1F4728306F22AADB40D314316F44011D1A + 780B5FF8028FBE60610811418837AE30812500CB632DA9C0105AF2A9A29C3224 + 7CA1CCB022414897E5B354239C5105B8002CB3906B4414498C246A0780C200EB + 6287C01500EA51370038742455B09FA184AA48964AE29578CDAB5EF7EA2D257E + E7354E74C20B227002F3B9E098884DAC620570D8C51AD6978D456C6423EB58C8 + 2236A5FFB2ABC02C66080D20617176A1404E0D710E24AC63035CB30223F47140 + AD128203053A6D3925619A4D71C1301E4A84C708F81C473C952E6EA367441238 + 909631E839812B2EFF074CC844D53682208F7C5414BA8004002C8D1D2A398415 + 628A8E2B4D02A2FE2895662FB1D7F22ECFBCAF1C4512336B882C59A16B88C385 + 142A4BDFFA2E96B2F64DEC6411AB831DB077BCD96044DCDCB90D2504A476675C + AB7878C5D90874040BC941D813D642B946C046098AC06D226001B7C8057421D5 + 908C5431D85A99A54C243C8D10170E54172C34B01B0C7A6405A200A9328ECE54 + 2E0ED61010A6852C50413612589C0F6308E04AA0F7C848762534FECB1627D062 + 162FB00261F375D82A33F6CA56CE3296B7ACE52E73F9CB5E0E3363A550803315 + 991A2FA142046C255D177A63CD70D1C2DF3842908209B0445140C258E0510F8E + 4541CE82385A02FCFF81ABA6227772D688AAE5EA49A1383282652271195599AB + 977AC0C20A070A16871A58B4B5A22424044913826E5B852C54C13533ACDF06C2 + FB5BCD26F9D5B0F6560A8830B127888716DC44D7082070E5C77AF9B1C0EEB5B0 + C5EC6BCBEEF7D75B16000E5010BD334F63800CF65575D31A0536678116C79A87 + 1F07B53150E96D7314F2869C9140010A76481F1C12518530F215BECCE37214AA + 1867F3B9B9AB3E6708E850D6B1AA70A042EC0F2545AB47053430C8843C8A6851 + B8440F77E5BBBA8E97790F80B52B239E4A8AA377BD93C002036DA96616CCD705 + 20676CC841DEE5919B3CCB24AF72CA4F2E729263F9E4236FB900A0A0031474D1 + D9800C09C113E4E6FF2C38A1C765CCF37F9405C48592C76B0BD20616E8780080 + 0CFA3083F6B1AD282C3999B49A1DF3DC60BC85E80896B98864C36124D0B90411 + D7506969C2026A4558D35E2A91A4D304A950539753149C0340E27847F292A547 + C902B1894D207DD3CB4B2E6697175EE6282F7CCC559E65FCFCD7AEAE2A9C3D68 + 6C080944C10A8FF9B363A644160B39C2860401A1022340D424986E31FE608E96 + 1A30B2434747C4969B8C43384709567DC66D7901102311233476B34393ED2814 + 00D41E8FFEDDED8F48E8F470DC11D788DADDC8D8B2B8F48D6771E44D3FEF1DB8 + 7EF2307EAA2738793C824D9717564EFEF29BFFFCE84FBFFA574EF3268C578187 + 06CF9F1B04E74719FF0C83757F0987243F514334E09CF5835BA5B6189F3216AE + F77A236310B24213CFD119B2D27089C4488612341794295D5556451305BC3274 + 1E63080CA204CAA77B8AE07CCF3709D877827CE50129C05E09F1045C836B4A60 + 05D8D372EB5783367883EAA7529AB539428405E7E06690A2057793055A6060D2 + 133897704023C8839491200710010ED121B8E2313A544857770DEEB66888A448 + 8ED02C0C31517A3104679505C78749D6351755801714701C23E20DDE6550CA17 + 4362040B256882117787D9978778B8877AD8877CF8877E18888088879BC07D70 + 51053FE74452760250E00203E08890F8889218899438899658899878899A9889 + 9CA827B446519233FF09E1715687836165245AEA5621C3614F97016187003B7F + 842C54A0059A570187F10F04D812F0938525022DD011439CD12A16118143A053 + C85286FBE404DD80056AE142FA907B76F11B08A27C0AC4013DC46A7578777918 + 7DD4D78DDCF88DDB188EDAA77DAB348EDA020D5D542247B126B4E004E8C202E3 + 778920B789F20889F3C88993788FF7488F98B88F2E700229E03E4344221E480B + 8ED2006E311708364F42054F09941919B1180D61084EE0644EC01C831657BB72 + 121EA6321DD42759982A93612975677B2B23427BB662C361766EF71291326309 + 704D398433A4F328AE1101072065B3603DB42857D96808821894832894443994 + 46998786780889E3FF4488435824E08803C08F51298951898F915895F4889557 + 49955C9989CCD404CEF43E32C18C5AF018DF305065A5056C061975358C312342 + CE52794BA58194E4743EF61A2833169CD7279241171BF45C0E411C5D775C10E6 + 3466A1549D5638FC402500E20F1AD700456316A6B52A15410145A30173353773 + 773AD9688EE0E899E2E88D81C88D80F8997D882DD0B04485A071E4C626B4A001 + 36F026562995B3599B9688955A299535D76CFD415775458478416D77831611C0 + 681681395827692372984F700057B0045A10754F87341C521157B81F7D197B09 + 145543171391E62A6B856FB6F2475A621793933AC0024385C3866E1712C98720 + 0C960E4D45493F79FF7747799F45999FF8098886D88289D88E20E8715339A004 + 5AA0067AA0089AA00A7AA02E50739FF8271F36091410830485040C7614FC1640 + 238956D2821085499011520F11300134E6311D939112D01224138BBFE36EEE50 + 9DB9070F92E7416ED91774B154E1B54FDB3525ED902691924DC3716A14112D4A + 00544E2051ECD03136599FFB999FA4A99F507A9449C49B7D674BE5214550B9A0 + 5ABAA55CBAA50DEA2F7D7262E9603091642022021BEEB408A00520F654113BB5 + 4FAD1344F3A3046A914E41D34E0518432CBA36217939A6B4192D533828391A2F + C15C1AF01F0D012CFD372056E0047DE60D59002B18089F802446A3F4930F7087 + 992A949B9AA946D9FFA9A0FA87A1EA879DAA87A51A71CF334B2D58204EA40151 + 240503B005B13AABB22AAB5159ABB37AAB5389ABBC4AABBE8AABBADAABB6FAAB + BE3A00FDE227FB94003F22220839501B503B0A386809917017947B972262FD37 + 2B0DA03812B063BB821288A07581F98B2D3A487FC9852BD35370DAA184AA5491 + 721817546AECF01752C62806D50D75012904660845EA569C99A4A2149F75D8A4 + 041BA5063B94CFD36C25E27D81A504E6E1030230AC07DAAB053AAC16BBAB185B + B1180BACC4AAAB340702FDA14055201E145101B378561A4701B0681835F2ACB2 + 054F9040920D170F414301024286343608B52131FBB48A4384AD22699D80C42A + 6F694F30F1418D64FF08BAB842E150385E8517D7D4054B7B218AD10D3FE2AF95 + BA8C6B39B09EDAB55EFBB55E9B7DA30AB662ABA9603BB6A1DAB5658B2DE02290 + 158088D633A1577A0252B005761BAB776BB7B59AB77CBBB77AFBB77D8BB7802B + B882FBB7840BB876DB5F370716CFAA050477083F77905AD02996A308B3671230 + 644145011A2B6A9D25925348C035CE5230A6953A1B855C1F899C7CE936CC325C + C3784887D6112B6A3754122AD2B2A3A68228F6AA9460D708FCF60D40454629A3 + 8B97DA99A77AB04589B6058B9F099B7188C88E80A70528C0887E7BB881ABB7D6 + 5BBDD8BBBDD7DBBDDA7BB7503002EE270D42540969C16033561895170154B001 + 1B32BAF8D4111130FF0EE1004FA3213F49472123FB0DB29125203399220160AD + 937553F58B810A91112A399AB155775346070100667798D2354D2814297BCA28 + 45234E3061A95B5B825F5BB667ABB664EBA9204CC2231CC2284CB6DF626645E0 + 83E4361E48F073D35BB7885BC3367CC3389CC33A8CB8505000E35B7B30AB2C96 + 699637D55E085611B7D51082035B6BA62926F275C8951C90703854105B9FD212 + 6784054A505DE4FA4C91007BC2E59B30F341ECF6613BD5102AA92BC608189F04 + 17A28317343B9E13C908FD2ABC7AA1A40C87A9C8BBBC7BDCC7DF1202ECF5B62F + 38A1B5F00336C0023E50B83BBCC88CDCC835AC27321096F1E3A6C367165D9020 + 03651A7346259361FF1B3B8520DCD0123E3AAF335217C981A83EE6041A1083FB + E00F8E4105E2A18A3807B4AAF291F4301015E21C9DD3680CB25C77F3186AB550 + 9F5608509770A138CC1D649994BAC1F6D3C1CF97C2D01CCDD23CCDD48C031EE0 + 5F04E37D713BA15A600307E00353A0B72BB005E35CCEE47CCEE36CB7E69CCEE8 + DCCEECBCCEEE1CCFF00CCF29F5C394DC8608B23588E37F5AC07655E29134962A + 7F76A2E6268406244722410F1AC04015A908ABE738E3C060D7B98BF3549D70DA + 2AF017479E0369CBD56F66616AC461B20CE342943B916EE547FB4401C18BA41C + 40BCCE6C77D47CC2D15CC2311DD362DB01AC90592DEC824E440148F002E67102 + B13ACFE2DCCEEA1CFFCF7FCBCE886BCE474DD44CEDCE2EE00320504F9CA70D33 + B6214ADBCF7331AF90110F90523B71D5218C810809D32531C101D7468417F998 + 4E2701117056D9E8A222E95257252D203442400B133D92484A79411580798F52 + 5DA2354F18B3288CA0CC1AFC121CCCA435DDD88EFDD85E6B2699E52C2F683D31 + DC14428DCE2B30CF9B4DCE9DBDD9E5FCD9F2ACD99C5DDAEE2CDA524DD51EE897 + 11906F80C1BE9DE7A61DE13FB8C116CCD1120D30C41D3AC0F4D042F8B3869434 + 68A28C3014007F134DD127930EA56C2A5567A3F4606F30C1057F83111B906012 + 9C632DC428A855B23066055510092A8DB52482C702EBC1907DDEE83DCD662209 + CE02CB1E35A1B774FF1E5030DA4E4DDFF42DDAF59DDF9EBD020370023BA09AC4 + 524BC189053FD7C06B0548A7FC0D1BB22BA8474956506D484867CB2184B5E0BF + 003108B4B8D52379DCEF1355EA30192709625382CBF7CBA6D272007165286EA3 + 5616E455AC1729D565B207F118E422225A90C148BA018B8DA901E0A93D9EA93F + FE00413EE43E5EE4406EE4428EE4447EE44C9EE44D4EE43D1EE438D00149A41F + 594205E4663D4A20580570022E00DA601EE6623EE6645EE6667EE6610E05FEFD + 1DB0913F3EB2438424BBA912013D16751AB718522601EB26115D8D5A1260201B + B247BA8505B4D8C01DC4E14FD31140CB210264E2D6894FC785BA73A392AAB542 + 420362FC062CC1F9FFD78304176CD7AF47AA2C2D2D4A2F8D73E97DEAA81EC254 + EE570040042133C86BD2A8D30B05685EEBB67EEBB60E052CB0037E54019DD616 + CD679D0072CA159016C2E2384F879014B042CF71CA0899868AE2D09FE24E4E10 + 018EC2412518B35907612899D08D3011D42D42270E2CCCC1964EF03213E9D3BB + DB10C20255FE0799389EB54BCAE3491EE54A5EEFF86EEFF67EE4FA9EEFF7FEE4 + F8CEEF4EEEEFF62E4BCE343DD51358E932052BF0010DFFF00EBFD911FFF0120F + F1A0EDF0186FF1159FF11B6FF119FFF114AFE64DF02F1BA0B29747D5BD25E726 + 3BBF868118B8089C8053C68FB0AD485037BAE50F279A205A207021E470CE264F + 14B2180F4862FA07FFEEE83E51CB052C21331C2CDE8609503432799894322C92 + 90240060A1A24EDEF519E4D4BCE403DFB55ECFF5D31CF6FF3EF00140E5D07316 + 80A5E54E804B054002171FF71C4FF11EAFF175DFF1203FF1795FF71F40664D50 + 0FD92D3DBDE591ED202014807A21835B0FBE962DB39C1E831A689A251DA39184 + C266715E9FC0252B951119B128EE208EAD1C71E26FF1D78F3A707AFA28D1794D + 38D6EEA5840440A5C1E9B0E39DD9EFB44FF0B65FFBB87FFBF51E00B9DFFBFEDE + 01DCF189B0B0CA711BC3E64102B4EEF11FB0F718BFFC7CDFF0CEFFF1D10FF1D3 + DFFCD6EFF16ABE03F00755F6EB0E0D40A79F92087BB41C51E06607B42A89DAA8 + 8E1B22CBA15B3E06FFDB8CF9A8C3857391B07F1281AF80EA962321A3BE05081B + 001C5C560000540987821A1C8B1C82091A0943001B97821556158397005A954E + 5996871C4F8A094F87ABACADAEAFB0B1B200010FB5B7B6B9B8BBBABDBCBFBEC1 + C0C3C2C5B70C293D965809544A5A2F14D24E362827501F2BD91FDCDADDDCDBDF + E2E1DBDADEE5E4E7E6E8EAE050234D3C838BA598905D4E5112CC095509590D2A + 44A080E51027411B20416A40218B160D54B034385545629608861E21E4D085D4 + AC8F20436AE450010BC204072D55E8A210E1324896125680C96AC3012A872424 + 1094B320802E0901480250691ECC0A5438C1D412018086513C373C29984AA4D5 + ABAF8C190B40ACABFFD65F5CBF8AE58583010879002A3470A6459A12244AAA9D + 20710E9CDDBB78F3EAB55B77AF5F6E504E3459E5F212CB0A4F865849D020C1E2 + 2C09125018E2B313A64B1C122071F2448BCE06A0416371A88527D6D3A84979C2 + 5461E6C10D094C165EC9D165EB980A4B420A4A08E72127821C391EA45428854F + 863600E5E00869C18E519A3EF5C801B2D051A9B3CFF2CA7DACF7EEE0BF1A0001 + 23C8A00412945088464189136A2C7C4CF94BBFBEFDFB1FDE0DF6688924162D5A + 3420D144FF54D0960606C1D4114BB0494005154E0C115B44A7441685168AF497 + 5050DA75380B49156016A225282DC2D33D3399661A619EB0C24503AB24E0488C + AE5407800442C1D2FF004F4E346505548B4C050016AA7868E42AB670A5E4924C + 36E9E493504629E594542A89C3080CB4B048334E48E32505F049C10D061F9069 + 6699689EA9669A6CAEB9E6986CC2E92638314C71820C1D995852149360B14F44 + 8EF1591073CCA9A69C15566870E1134850115A6C124490852398D47464760865 + 8A596DC18DC80133CA75D1DA4AA262519204A86A2041A28942444516125451C5 + 135470C10505514C96AB344844006014B94637841203F98A841617020BEC1060 + 0E51C974279E225491977AD8C177D886A76DB65A5D894C295854E10434EB8189 + 840D059C00A79C68B24BE6BA6DC6FB6EBBF4CE6B2F38F69250C07EFD95A4C529 + 9065E1A77A950165FF9972096851857B5554801E17CC345045144A70324FB557 + AD68A9A11C7561306E236E800516CC95DA1A4B1E2770C0124B1C104104CE4600 + 6C1257B0CCF2105C1C9084CE3ADB6C33CF3B1FB0F21235B3BCF3D13A7361B38F + 405A2264551877584095522649F5D55867AD640723849021911AB4E5A5121A68 + 50000DF3CDA9B6BC6CAFED76DBFA11814917584421D1544FE4835D6D1A7214AE + 165944D198C402AB2A1986B8E51975481ABB620FA7AB11175C6CF66C689ACA42 + 73115D1443C01CC5015C2491B3CB30CB2CF3E7A1E7AC3953C2BE2C3AE8490C01 + ECE99C1F3044EC4E355D1D2AD82D9E5A011D2869F5F0C2171F96F160DD72FCF2 + CA374F3CF3CF3B8FFF7C305DA3554116E3AAC71E122FA05000142BBC2D7EDBE4 + 8F7FE607FAC6634F808C5111856FBB254ED213EDE1AA56030133237391F16356 + 53E3BEB394C630C3A0CBAC82245B0A914C769310E170816E557005916A541157 + 08C8823F42C42A26E20AC600C00A4CF388540A32C100A2C60623C081D656C8C2 + 1652ED0158928141B26085B688ED2D3D2A800AA6B0000CF8F087400CA2108748 + C4221AB1882480C76A2415380A580C3395E380042850858634C6518D614CD832 + 22C2A898D02A99528902BD481804268472CCF1A22754E68F121EA20B01EBC88C + 2073C17940465AABB8E371A2700880E08F15F88BCD6400200AEA480B6A5FBC0A + 35466035173AF291FF2EC401084200834334C00A4E7801B970580D1F60E388A0 + 0CA5284599C41D146110D12148291CD11248240C514898486346833F095CC862 + 07A14922C1D81FE6ACA445ADB8CC6B50C237111E020B3739442A1CD1052A08E7 + 094A89C84F8484880C5501461B0088509C0000250000347DC4CE1F7F02B30F36 + 6D84D3DAE55534500D1542F29DF0CCDA0840D08333E6ED4B5EEADE5C62F0C31E + FAD09F1800A840FB49D07F1E71A0064DA810EDA43E2444302D1BEA0FC91C4301 + 2AB407328C69C03E2E49810CCD28A2EA042301414A187A74AA3FB1A109873C81 + 4C18094740110CCA3F4653199A36C6285984915090F0897FB0A2425988282872 + 471DEBF834A42181FF8B0D3CE0CE783AF5A94EC2810740908263664103DA6B8F + 7BBAC702128CF2AB60056B60765022A0F04628237B8206ACA0D62CDCEF1F0262 + 4A91560A40A43A2E2A20D265A55E6146D8902C8D5D1CD28BFAF34D2DB092A51D + A5C74F00370F392AC137DB04C0FBDE58A8B7A8060083CC605484E446BBCA421A + 1A40C108B872810094F6B44A2A2D69536BDAD6A2F6B5AD5D2D6C55EBDADAC256 + B6B6CD2D6D77CB5AD5622905F2E0C0259FF1250DBCC0065D35680F971BD0E632 + F7B9CE8D2E74A72BDDEA4ED74E3FC882C13AD29A067441AD560093159841479D + 24064186DA6B5D3D5B468F996A80AFE8D4E44CD2B1C2442209D81C526354A19C + 9F5C7352ABF1E3A0FF04813F704616433AED63683AF18967E9EE90D4622F2CD6 + C33DD14215AABC5DAD86B146DB0074A00094FC8963B21A8D17BCE00705200175 + 576CDD16B3F8C52DC6809D402083DA9404250AA3400474A2962A4840401CA080 + 162C66898EAC66BD12EE8FA838F251FE384E722452209383C21364E268480D1B + 9233D3C2D92DEFCE1212B0581646610A5470D39B4FD0290701A0CD41BCCC9C22 + 7C5A8493DC8A2EBD055D2398AD6EF7ACE73EF3F9CF7E0E34A06D7B251A2B738A + 6273CBB8D26582802EE0D1CB7DB4A3233D5D49437AD2938634A5317D694D777A + 0A3EF8810C46161987744660FF90C029BA60CB03E4F76017A373491741B731B6 + A6522AE2ABA762F3FF088F995510C8AC88145939ADEFD6B401C2D529739E0047 + 975A22290CF9441F6303154100C461432DE4898CDA3B59B3223D1440021250FC + 800CC7F6DCE6E6AD9E9B74DB73E3D6DC1BC6ED86D3CDDA79EE401E1590005CDC + D29E46A1A0AB3C74B1C0614C70175BFAD1A00641401EF40CF6810620CC1817FF + 62E26D1399F4321E9BD11B530212519DC427AB2189C190C91824504A54C6B158 + A112E0046CAE4609AA386C379D80136E3A22518D3D04150C31486805892ADDAE + F837D9A384EEA5F002481F34D205CD74D3267DE94E9FEDD35D3BF5D3569DCF4F + 9F7A5976D09CABE2D32DDE23C1073C4DF6B29BFDEC684F7BD931E00314D84002 + 0F4135AC6669512BFF9C28D642AF5C4C3CD6224FA01CC9AC40F92046A658C3A4 + 28015C48333883E2308008224F63467644D32CB0885EF1385AB0A41F093B9AA9 + F4FCC1A89873C58994C970BF80013A50BAEA9BCEFAD5BB5ED038200079FAA86F + 6944E32DE7E2020DA0A0F6DE1FDCF7C09FF40AF4A585880124366BF1954E4724 + 74593490C996FA7B483C1EE5602264265848424640E3089A7E53BB5C2E085266 + F4E3B4E8A48FAA900C66BFF904419C7F4812007674E0BC59AA88DEDBB0A90212 + A4610574A910EA00987556378051578001488007688057F75A02A88008D8800C + 78011D800C9C407AEA3136C6F56F2A067C1CD881C0A72F9CC10CFE9005541020 + 6F646484D57CFFD3FF1A0CA4583FA140214112F355525074090DE06A8BD0185F + E608DCA74D1D112E5DE053C1C16C47351C48D00FA50000A7102E2EC13984A43B + DCA682ABD00597A4054A50744BF56EAFB785ADD7855CA85B5C5355224343EA91 + 55DC6303273005FCE4816CD8869EA62F3BF0639AE019ABA4111CD27CAC31461B + B371C0F421215322223423CC41723FE10859607269310F9251102E116464E63F + 15450A0DC04D9305138E0021BBC1094A50099A85107226858B102E1708260590 + 674B778AA8988AAAB88AACD88AAEF88AB0188B4877253B20431BD0001A206463 + 73862CA00231B00035008CC2F868C1588CC2688CC8788CCA488CCBA88CC9F88C + 1800874F702B1EA5FF2180976486A74BB3661430081232387820972920021B38 + D81C12A36C3F214BC14160694629D60671CAC44DECC3609DA75382D073093608 + 46757F4287056CB15528400051278B037980AB5890A98890B2B8900B1900F3D4 + 04676405CF5062EB81498C1603C1A869C6C88C1AE9691999761BE99190F69124 + 190326C0021150192E9177C124460CE28DDDF811DF081BAF918723824CD88118 + 9CC018ACB40FE97409D794165BA6842E754143711CFE704CBEF14790504E4E80 + 2384620A3BD93452285CB9380D5A205A0CB9955CD9955ED98A01A0030CB00330 + 001BE195686313012C6002CED896CFE89670F99672099726B02F66E582DBF845 + 00B45784B2573219FF937E385F1B212A2F291437413202B30800B183D3728BD8 + B10188215C416555C2751CC7C166A612730A96195A9004C40220C8822C472814 + 0F058AC72403B9A8054E306E0540005FF99AB0F9950AA98A52751669212EE4E2 + 169BE13D3B449223F99B1CD996C1E99BC3F99B6F498C310005FB320B7D88549A + 42122D8897AFE071D7580A7FE81379153F43E26A2C2788C2A10403D67D2D370F + C0A601F6382355C44DC721085640053C61316AD54D4DF10A023286A64918DF75 + 815B55003A807447B074FFE99F003AA0025AA01710A0074AA0096AA008DAA00A + EAA00CFAA0121AA1FEF95B9CB016D290689BD13D34C0963530971F5A8C1F0A8C + 231AA2CE58A27149FFA222FA9675C97552B88E97706B7BE8874E260BDF9819CF + F14B64A43200514146F104A7F078D6567E17833F4F700F91002B3C9579FA252D + 2631245930159B7859C10119B01174A0D820FBD71ED4500038109B601AA6080A + 9B47702529C011E8C13DE5727B5C45023790A2200AA7721AA7C1680223B0032A + B81AEE3513A8217D30F971D07971C7740056E008493908D2F4478210947E8210 + DAE47DECB753DD84658280473A3924B2C32243B893FCA882C2155ED3705CA3F5 + 9FA49AA0A57AAAA69AAAA8BAAAAADAAAACFAAAAE1AABB03AAB3AF090835005A9 + F925C71205BD88912B1AA2C01AAC2A0AAC2A5AACC15AA2C87AAC265A03371003 + 2700022C827FB401FF397959A353C8717F891991D13F3568982E35425F664930 + 92666F142E92B90A121184E284204E5405FD551DA6D23006E3841AD21F567A54 + F7B90AD77395E1C64E47B7A0000BA1012BA1A52AA0053BB0148AB00A2BB00C3B + A1092A49F7E630A0CA1EE2F5028C36A7184BA7193B8C27F0038A934803141519 + A7108549713069ADB0309394633911056C07902196840483A28893508806114B + 26DB05561041DD679990E509E2C2131D3154B17609898948F9BA0C0BE3256778 + 020170AA4710B5526BAA517BA0553BB558ABAA523BABB2AAB5AB7AB55B4BB5A4 + 0AB663BBB5A55AABE42111ABF975EAF16F1EAAAC701BB7723BB7743BA23E00AD + 7675641D13322AD1FF9C1FF178D81A9824F21C1B0213328583557A7E90D947E3 + 452996F4040F0513E82179DF640811C06B9E222BF6D84D45114C89B966CCB94B + 7E4B18CD702CEBC14E28D09F5CBBBA5D9BB5ACFBBAB27AB5AD2BB6A97A01F3A4 + 25A22836B7B79B3AE4ABBF5AB7C90ABCC20BACCE8AB72614152A9257252583D5 + 197D816BA37F984B1DD3642DA598267153953AAE24731EA3C084CAD4BD930200 + B212205650479AE07E301B052F4205903B2B4FB02A5389B2EC856499C116E156 + 74A96BB5664BB6FBCBBFFDFBBF001CC0023CC0044CC023D03525E175BAA85556 + D03D2A6002C31BC1121CB70BF0AC95B1382AC21A7749A5800912802BBF35729D + B8318E3142A8866AFF8F425205A3D0118B8984DF4B9A31E28F6C850514F063F5 + E9AE3C71489F8305BE92055540053E96A89BDBBCBE33BAAC90190DEC25D4807A + FADBC4584BB65E1BC5AF0AC54F5CB64E4CC5B45BC5521CAB5D23033CC0514236 + 8A26865C103CC1666CC6C5FBB1C7BB64C0D4881DFCB72F08C2ADA0B2D89A10D4 + D75224A8081A47437A8C098E011579820519445824284D826C055DE0630B9227 + 9784597C44A41B64122E4CC4B226116779855DAA0305BCC99CDCC99EFCC9021C + 005B87655D8296F8DBAB35E00021AACA1FCACAA9BCCAB0DCCACAEACAC0EACAB6 + 1CCBAF1C036D1740C8EB314446837D4BC9A4E0A7D93AB878471C40817890C153 + 3277884A01130D30FF9A11E518D8342388B29E37F21454106626A5561BE0045C + 40482E77ABA1279D49AB16C6350D99C49FFA3BC0ED0CCA02FCCEF03CCF017C01 + 63292092607B4ABCCE27F0B667FCCFC0DB763284C11CF14BC74C0FCC9B3171DC + BC744C71B87646845A103E7908E48A47E23B0A88C441A9C013A8127F597623C5 + 27BE8C28D222F36683DC09473B57728C87A3C1AF60822E3E20B51020D3F43CD3 + FB6BD34780D3FF8BD33ABDC93D7DD3341DB53CDDBF52501632F00F12F925BAAB + 96FEFCCAB2FCD44E1DD5B43CCBB85CCB545D03268002688115B9A671D90878D7 + 67C4B1F0C10C2DC2B9A6213CFA46D6D166D90423E3748B3082AF7FD4005A50A8 + B709093B3B645209FF4795E1843EA78F8AF0D60C26CC22D1C6FFE33F1F110444 + A2A66FA1285E4ACF901DD9924DC0B68B0264E5275D42916FD13D29B600530DD0 + A07DAC75B9D55C6D401BA2A364F464D029CC641D83D17BD8769C1983151C1AD5 + C7E7E12806B10CAF62B2FF002183222AB2F24D329B16B072C199C55F8B50411E + 4458848D1A957319DA380BFD50CA6092C9397DDD339DDDD8BDDDDADDDDDCFDDD + DE1DDEE03DDEE25DDEE47DDED94D8B0103AA1ADA7FBDABCAF0FDCAF13DDFF25D + DFF47DDFF69DDFF75D974D704A22A546A3E297CE17CC0A4DCC82EB5731B11184 + 2214833547482047A470558A30CD35CB211CF01461B4015670651F852A3E5110 + 5A10CE857440FB38FF995486C1876DB2581104FDA0A6EBD1A5FA3BD4E22DD4E8 + 4DD3E6EDDD34AEDD39FEDD3B7EE3D7DDE3E86DBB20D004965C746BBA1E5A6003 + 3410ACB72CB79FCDE4551DE5501DA2FA32D0856D1A90C082C86B71F12539ACBD + D0AE7D123519A32F59BD0A26D2113E0A6DF67DB09160155005990124F92632ED + 97DC251110ABF0667FBD0115C4C34B50095084C1C97B180A012256118416A59B + 48E03D071ADE1070E38FCEDD91DEDD930EDE950EE9989ED3937EE935FEE8E22D + 963F5012F48396E1B6E827A002A98CDFAAAEDFACBEEAAECEAC55CE38C9EB1F1A + E7647515D65C0DE67F6ACCD6291B31C205DC7423306212D2A2A86CE6D6A53966 + 4352E7A4393F1683FF1E90301599C0594EA859A5605414D00049A0AF7A794683 + 13198C111957215CCEB0CFE8D2E89D9EEE3EBEEEEADEEEEC6EDE42DE026AFB25 + D180041A806234F08BAF0ED5AFDEE4AD0ECBF15D03E9631E032EB22962D04DA6 + E22D99D0BC64E0CEF7DAB1ED9758907804C21BC245AE1FD50F9BFB4DD7E4B8D7 + E15669D17D63266569B1161B30547B4EED0D504EE66C2461E430856B39A781CE + F8742E0520059E9EF33ABFF33CDFF33EFFF3401FF4423FF4418F0305802793C8 + B6EBC1D4F2ED00F7EDF4F60DF5AA2EF5FA4DF5F02DF54E6F028271EB09BE40AC + D13F8C43E00DFFBCB18040830B997CAA1AC2F1B2594001CC24895A60643EA119 + 138E4B23CE78DBCCFF4C3C5105761D3F3FCC0148E06014F7650920330D700585 + 20A83257298562712C6B28E4794647664019A31635B4BBD64DF49ABFF99CDFF9 + 9ECFF3655A3D8BADBB5AD52B9DDDEFFF8EFAAAEFD45ACF2F7B48401F03996A5C + AD96C2F085ADEBC5EC5769B4924131F18BC1E728A84D3ECA66417553CAE4AECB + 0DA510F451ABC66CAB3015A6524E1964B89C450149609E9F3301955028993246 + 34710F0E7D599D50EB0EC309B9A4F087AEC0BC92F99FDFFEEEFFFE40EF053F7F + 04F6C618A0FA25AB69035CE08B4E0F080E8235820E848385878689858D8D8A8F + 8C8E0E312A203200001B9B991B1C5D151C9C9A1B155D9A99A9AAAB9D9A15A3AC + B1ADA0A8B2AB1CAFFF001C58095DA21BB5BA00090755BA151258005959C255CA + 0912991C590D001554C0000DD61555159A58C6004F0999094F1C0055E6995143 + 001ACD9C1C0DE609151A07E656515CA9DA54051466ABA02E73C0062A3368AB42 + 030D149450A0F0C2890D143A8E40D8C8B1A3C78F20438A1C49B2A4C993218FE8 + 60B0A34B032A48244A7C11D1090A15266A10DAB90811CF9F8B78FA0CDA932850 + 9E3754FC58B5E993AF5BA54E0D64080C172C86B3C04DB5655553022C9F448922 + 95090B176BD31A54B1A62E540366BA38BD6D3676183370EA366069F044993A00 + 7BFB8EA21001809579D3FA0E333684C29003490E609D6CB0DD56CAACF4668148 + 410B05244822A038FF71C40B04D3A84FAB4ECD7AB5EA8DA93BB69ECD91B66DD7 + B05DC7D65DBB776BD847A48CF821435CE789139568D0826209094893A24B9F4E + BD3A25153BFE6EE8C21D56C0A8C1B0267C75B920305AE55975E5F0D593A94DF0 + CF9D8DBB4C4BA650C0126809254C2F05840B71E084315269A28134BF64428506 + 0902A0043CF2D4528F39DC0070C004185E7145124B2CC121874B4096C4881F7A + 98C4862292F8E18A1C1EB0C4101D7AB8048A4B60168B4356BC40D3674EBC309A + 0EB905C99B90A611D99B9148BEA6E46F4B1ED96492453EE99A70203491C0669D + D1441312391EA0420CD02902DD24633A22A624454117830F3F80054A83DFB952 + 2065559167E3795AFF4DD6D506F890E2945865ED834A351B5891D036C648004E + 59125013601759549040379A348A4533CE60214E4084C543576258E8F5040013 + 6C130515CB5480CC304E2CD140054834808534083E110512FA7133A93DB24670 + 80355A7CF5CD13E064D1580514D818CBA556203711123E9E20C56D5E547B9AB5 + D5CE86EDB6A871AB9BB7B661BB1AB8E46ADBADB91BE950400A933AEBEE0B119C + 00A675F4D66B2F2527FCE04B7C57C1674A7854B972957800A0A7672EEC2DE409 + 070C77A14D025C5891C913986E4005387C3963CEAC095553F03799C0B5C133EA + A093093BE1A4734D04F05881565AF758F36212090C11C506B24A700A053356F1 + 440492DA634C035CFF0C91C47E0D2493053AF640568D164FC8B32A164918AD84 + B299F1B099163B2AF7820D23E0402D6F63974DF6D966A78DF6DAB1E1301C165D + 3CA104D7C82981841311B040C20D454542DD9988049E269A93C470C20E41C8F2 + DDBFE9C552E7C0011B8C152E9DF4D98A27A00083C5014B57388D43DCC4E71237 + 0E9F3769A4AAD893855FE7E85ACB5E9176AA84340EE34245A85702D061124F54 + 1101129726606803574C1041039D25703A634B7081C561BD2750851502721845 + 035A6841C59519C3E83CD63766E184BB77DBC00290D9A6AFFEFAECB7EFFEFBF0 + C72FFFFCF2EB00C20E936A209167CF5A5440063100C2BD0648C04254E2078BB2 + 05781A97198131B0FF819263C87A3405104F34E51544BBD2CD7431962C44412A + 8B4AC07F34F1970A68A11B9CD8C081B493092B688014DB21871300109A6B50C0 + 097683081570E804654C60034F7882ACB2900C7B6081025CB098F29EE0B24941 + 6A085670C8132810299729430B118846E7AAB1175E70C10915C014F856114627 + D08D264AF85A017440BF36BAF18D708C23FC2030821DF0E02569A4881EED7693 + 9C14F08FF632DC0E0CB240CC3CEE814C29589E26970B3E25103E4D11C5E6A8D0 + 800D4883135702E2A27011A9A54D83037DB14727361029E5A1C2515850D92996 + A6292D70E12B58A880A662890F49C572022912D1869A7785E6ED8E4590B90264 + 447400C88448465CFF20918B46A4CB6226618C996116F928B2C66A09205BD7B4 + 2636BD70CD6E72739BDA0CE737C5E9CD6C8EF39CE62C2738D1F9CD74AED39DE4 + DCA6705020AB06EC0F3977638EDECA04C87E36A212D95120E30CE9C03B291260 + 5C214FC22A38CA4D404C1A80A9023032B61D8902261B9A504CA11685B2918165 + 1B985A4B2632B68C9745A17813E84C04A810852868E01DFD88C013702801090C + 210BCDAA820422E0B328D4146A1ED4C0CF2490052D20618A4E9040147CA6050D + 54E18655408216B220D5A829210B5458A9C4A0C90A9758015A7A4482065EB0C6 + 69C9F1AC684D6B5A0530020648207F13D9110534B09C03D06006FCF4673F0579 + 0AC70D944EC7801CFF210F8AC8C03AF491DAB0209F5E898ABD784E14DED88B36 + C0D117D4092394A14285EACCC1B061D823014D018013A8C0810340B40BED400B + 5A16D28E762C64B5E0E85302DAA20C0A764119B20C876E01738EDE0E83AB377A + 0912DC65C66AB6F3B8EA4C2E7297ABDCE63217B90270AE749F3B5D757A410775 + 941E0EDDF5AC219C806F82B04021C41BDEE890D711E7B54E7A273183C339AE90 + 802D8560CD43D8839190820DBDE062D9020CAA9E0715FA014781908590B16CE0 + A824D486154E9B0A0930888386A15E1224F69682A10A1BD7B89D4701A0A80D47 + 1188CA9080355056611237230BA3CADD9544A1014AAE6E56A6B81D703323292A + E491264E906A0146FFA0CDEA52F7C73E0E3290872C64E57AE102C369422AE716 + D79AC08B0519D0AB941B0104139CA0097E9DD3640E69D0081A644F961348E600 + 339F897E45659AEBCB1312C2C9302AA3637B41C8263E3B5B614C2A77DAB85B17 + 86800F63CC2AC3A5A882282EC601416F3819EB3087C73C99318F99ECD1CD10C7 + 2E14C5A5B750F209947CD98C55C11E098CAF6E1A700217A4C5CDE896BA9BA68E + 2EAA577DEA56ABFAD5AE4EB5AC59ADEA58D37AD6A78675AD77FD6A5CD77A253F + B852B38E931C0DD8E00026884179978DDEF13ABB9FE725AF95032A90BF6EB9A0 + 04F57241D6F395B834655F9AE302AA86312AC0106B31A7C00269AF013250BEF9 + 62133307A4DA2144FF7554086768E1C0A92AB0842CFC0521AE0DD94807FEDB82 + FF2B96D780865694715BDD96C22BBE5D086B371D8B20480FAC3B8216D88A4CE4 + 8EF39AE3C94DB5C7992BF2E6D651060DB0824422821C33A280062610E094A56C + 021660B9DA5A2698550A0B90FA32B2728FC44523C9FC5693712295976A859B51 + 9797BE80AC13A144C848EB590B6EC8320A5AC0C215B8A081D04CA4A566BC5504 + 3CD35225603D7BBFA340143A3304334660391170421422F019BA3BA13148688C + DAC59EBDB5E3CDA5606F29C563C19EA811DB6E771FC1B47ACDF8C63BFEF1908F + BCE4274FF9CA331E02EA6A4218A5CABFE43087067B738078472FFAD29797F4A8 + 2F7DEA57AFFAD693FF77062CE001CE114A5FF9F23C2BB48FC59817AA09EED425 + 3FAF2CEA7FF3B3C182E587026FEEEB06A2C0D9C4523113DC39D90B81B1A8A202 + C03115B8C2EA18A41F3E6980171AF84AF8F3810F27E023FC1C9087C546658535 + 4B60544FD0D966A841E1ABA5DC21DBC3C2F713F07D588579F0ABC02C5A121162 + 65036565790898800AB8800CC8783850003B40315DA74713313E28C002347003 + 793573F662020580099D606D3A6727D9B6480C31668EE40A4377745C507459F0 + 5FA9E40D64E16612951023E310EDA00EABE3490FF35924E4595F81455D7005B2 + 720D08320F59700A16853A4F700A4DB80CCA5084A63485DD302A920218552870 + 1C965113A38500C8FF147BC11975F335A321052E200067988668A86A6AD8866B + E88670F8866C2887D1758675388771188777988772C8877C0805527002558253 + 73130507C0058888884B705740C07A8EE87A90F8889268022850042198730163 + 7B5D66825F8630ED811FF480495C770E2FB818F9A132C8F06686B209CF50308A + 91689BE03125355298F216E0500111003413F042ABB22A377883EBA00C328668 + 42B40C147262D6903B15F66797A2177E660CC8600A10256332F6853496723311 + 11767311D2227976B88694F78DAFF68DE2388777788EE0F878E5888EDE688EE9 + 488E52603F36002F07300411C005C5848879C30233D06C93106DCF667A02D908 + EBF58F0E00042480FF0297987B8A63588684270C790B8BC22760D120AD406652 + 7767A5A839ABF32AA8E00D6E860A1E252B7F0185CA539246D4006D717D407305 + A1C21698726E0DE084E0A033A90285EB105BE6706E7BE15958A80BD25001A342 + 0D13C330A30244AC5892D6D8550960639DE73517E8037ED88754399556599558 + 79955A99955C7986C23104F498045C10017317054E504C7715039218896CB996 + 92A8140E23829948825B069185B573BB005A90C442C3C00543A9834E9017D730 + 0C148017318405B8320DDAA004E5964056B0559F000C1260050E230C73D70513 + B03A18730A36F9849EF456E4708CC66817DB305B1CD39411A50BD9C001A8D205 + 1DA6010E23681C66FF0E2823464BD973EC61637A844648003666D89578089C7C + 888E5BE9867B4895C7498EEE789577785D28B003D37346147100BEE2256AD996 + D8E996D9597A377038F0756D3BF7903E2741E44191BFF01D7FB13952073AD670 + 74AB635152B134E7A60D4BB33AA9C30DA1D283F796098EC101C5A32127D2212E + A221BD340104EA2222724C27920413B0A0C7B44C1EB221BD1419C26422233223 + 50E42B43300488B8A192719B84170DC4E6640628952E70A2289AA26FA8A2298A + A27D78A26808A32E9A862CDAA2347AA3318AA36D28A332BAA270C8A33FEAA2D7 + 5500CF50549D978F5C708124707ADBA99D4E5A7A3100817239589A4827767930 + 4DF189FF02436521FF6E655105A7903465A118C8700A1C8068162315C56849AF + D59EE5700E12550F2F938B0D300442440514538C6A5105CC40547C4A4ABBC01E + 7C520F842A68E9001688EA12907229816A9A4E514F7D214BBDF0157D05A2CBA2 + 9BC9C1233F70006C94A39EAAA33E0AA49F2AAA79D8A37E48AAA4EAA3A37AAAA0 + 9A86D8F50341A47213F118D4D9235EA281A4C76CA9C7A4DAC9ABADE7814D8089 + 83159E563A9E843491F8F06DEF712866917FA8931F916293EA200E5D0032D4F7 + 0D9ED45717C30D63814A88618CECD15235530D3B283DD5F01649C3342FE158E5 + 209F771675A7C33DF5A43C61C43DF5B92B46D43957B22B962A0BBB50052BE72C + D0321A5060A3067BFFB0089BB00ABBB00CDBB00EDBB0520002D5303E9EF1188D + F102AE440301347A16C0B11E2B7A1D0BB21FDBB1231BB2242BB2200BAC11D940 + 550A58DA9650D3D06D24A42A9D057CE8A005E7114309B041F1A11F6FD659C862 + 0DA5930947F5177DE542931532F6A10543C0014BC0322CB3A18DA10507F00E51 + 6B3374A53FA0E1043936577435579D91B59F71379FA104540013A3E5192E6446 + 56B0207365059E4157E3D6AFD1C444EEA2043D82028A97A30F7BB07C3BA37DAB + A336FAB7831BB886EB053E50006D42554C5B352CF70243C08F4D3AB94F3A7A35 + 909032707BFA757B0051990D091060F648AEC030E1C62BF9760DF57939DC300E + A970AE6F961F7CF1FFBA9EB53A01E10D5F8104111301B7A529B6C40BBDFB155F + 6144CA034BC35BBCBC00BCC37BBCC5AB3C5DC4BCC263BCC44BB70D4188875780 + 05E0035E70A20380A2DBABBDDCFBBDDEBBBDDDEB02E24BBEDF5BBEDE9BBEE6AB + BEE35BBEED6BBEEFCBBEE0BBBEF4EBBEF3CB563FE033FD1019F8A40179835725 + 1BC0243BC0018CB2277BC037400220501754C1665B014991D4300C234B34CB1D + AA620ADC61C1AAB2BBBE27B3F4E11EA200315B2552811685E5B66157527D55F8 + 5A47F9A676A10E2E2C3D92A4A191514C369C4CF978C33A9C4CF8988F6259353B + 2C963D8C8F444CC4395C4C8668C487584CD2AB382E2101C3C572156803A36686 + F04BBFEA7BB0E31BFFBE06BBC52DEAC5F17BBE5D3CBF0D6BBFE84BC62E0005EA + 8202EFC0A177CB054B3003D759B9948B9D0ED09D4AC630A43BC1A0B0C14247C1 + AA124B827CC1844CC819BCC1A0E07BBE90C18A8C0B60F10A7D7228DA10161023 + 6F8926942B890EA4F466E4464AEBA928E2D01FC4B217DAD117A9A40EF6C60E6F + C50BB0D394C0AB29DBF37EB6C43441C4CAD2B3BA9AB2446B6105CD4B44D180BC + 2F810DC7BB17EC208B4DAC7B49335C9D071ADC280003F0CC576CC6D14CBED02C + CDD63CCDEE5BCDD8ACCDD79CCDDD1CCDDCCCCD691C886CCC056BE7199E313707 + 0065734CC0EEFCCEF01CCFF1DC5E9A174B1B1C0A7A4CBA8A8CCF7BBCC716749E + F975283D37D00E49FF41E7390A73C605F3D05F1AA01598847C09560A23B40966 + EA545C6A188A1217A2E060D35A30C3F042ABC07F4AA90B56D00EAA4049ACF07E + ACA016AC809A01187E0AC1CBC75C103D702563453711610536212DDFDCD3D8FC + D33EDDD3E21CD4D44CD466FCCC8108024FD004CABC234D25773490010244C754 + 1D8994C8037142A58404C18AD550079D589B204BF0114B2974287A5CC9C2E010 + 22F509D7C00D1513327C21D057F28290E40DF6991071432CD4D7D6B2F81728D6 + 9E63A1162AF9CF73E117D05A849579292813164259611F299FEEA1097351A933 + 1D4DE2C35D69F4022CE0CCCF5CCD9E2DBE9FDDD9A20DDAA42DDA457DDA9D5DD4 + A69DDAACFDD9A8EDFFDAA31DDBAB1DDAAC2D0082D80433751C9DA705E623D522 + 2BCFC01DDCF00C042A60030291581524C917C92F08DDD530C4D599B11D60E150 + F9491FC700C92DF8A561CA1685060DE5168CE6460A15860D0F23019ED08A1996 + 51ED1059E0AA0B2436939A205257F2662CCDDE85A72000B266B3186818936F8A + C1A79D80322653D98A037ED92357D6AB03055BDAAD4DDAF03BDBDE0CDB0FCEE0 + 430DDB127ED40EDEE0A83DE1458DB80C10AC00CB35FC83B7E6A3B1D969B2755C + C01D7B032C90B903E31DC8FDDC8E9348F3E5382549D602ED149B6016254D4A09 + E4314F07529B9C0AE8202988E10DECA19250A72A10955160A151A3F9A6B04B0D + 2F934ADB20B41FB3FF0BA32215CF800C01B1169694406F31E479B9669ED4D104 + AE400F11C575F35505700205BB05B23DE7745EE70320E7769EE77ABEE77CCEE7 + 50A0B86AB11CD9D319CA6C571B2BDC889EE816300328D0049E10D0354E71DA91 + 177A610A925A3B98134B62A11743F016C9C2A5E2831763910089694180E10480 + 9D10ED3716DABA55A3500517031FA2F010F2F6E822C41613F97C104643711A10 + 30E16D9900C5E7D141142015A8B50DA5CEC069EEAFB3325C03281136310224D0 + E7D45EEDD67EEDD84EE73AB0032807110388B1A1710233D0888A1EDCBF1DCF49 + A12F172910811A0A81FCBBDCC0173E2301B07EB6F5EE5488B7726B978B63678F + B928B586D828B234FF4B83CC1E11B03ADB731FA80B9A75B1A77E222ACF7A0AC8 + D084A1250E4F57154464D8BA90F1A1D569754639829D17A7D0941ED9599772E6 + F79105E87D1F827D1E2FE9398FBEECDB964AC35637D032048A070572BEF377DE + F33CFFF33E1FF4403FF4425FF4447FF4469FF448BFF449AFC6443A537437119E + D123916B023750EE580FCF49810283DE527307B5F618F6504B9663CFA1FECEA1 + 2C3396B9E80F9E41775FA55456500574C517D150D22216018612168A65413CAE + 0E006E8418B3916F3AE0B3984ADAA06E4668EBE9E051D36A9F9E84BAC7D8148C + B6F8CBE0677A0D52EC96599B329AB8706E22159B8AC616B6580F4779EC325F10 + F81713A06611A3E6FF05A28DE73D9FEDAFDFD9B0DFE7B52FDBB75FEDB09FFB76 + EE023EC00228A0A1517B8845E322193003599FFC030C7B34210F14E032428404 + D500EB93220E8A120D62AD3CDB5167D7D05A8B925BC380ACE996835800450B63 + 83F1B139580EE6EBD65F95E439DB302AF05F0112B32A6D61DE487E1FE65DAD0A + 0308551500590D00001C0D868A1B870955000D901C008F954F8888541B154F83 + 8859581B59151B8D8500129F8409A9120D0992AF591287B6B7B8B9BABBBCBDB7 + 150D122F145A14C6144A2F283E5053035BCFD15BD3D2D5D3D0D8D6DAD9D7DBCF + D4DDDCDED8E0E0E3D6E5E2D82434050707494B5749F449072C4B193916FC1625 + FDFFF805EC47B060FFC18108F9A940212341022CB81A6069752B568246B6B028 + EA52B141168A8D12640945A911872C550C01F83444C3060E186D614CC04525A5 + 2C4E4A02088904A2A941099CD83C544103A49D26A94880097327152B10571E7A + A2A124A54A1A287EEA4241E54E0058AC603279C80A95415D066DA862851287A6 + 599094FCD40049A90AA52A39C172D597DFBF80736DE892E0091263C394207162 + 03050B29EAD29D5337D91C657297BF65DEAC79B2B701524EFC98A8854B31638B + A31CA09101880383B063CB9E7DE34493BA6A9B2650E2D31400AEAD4C99D450AB + 11470056AAB8F54D7539A5041A7A538AE2B24297462FB3833DE07367022B869A + 6E484025FCD7EF86FF4A51AA2016AD712A55AE63E450E52CD29DF57BBFFC1EFC + 2BCA0457854445021C5D854515A420625C16544024DE132965025303E07DD588 + 2459C414D8861CF232DE134E1C738C1354D8C0820F2E5CA3E28A2CB6E8E28B30 + C628E38C34D6B8850B2780F0C213564411C5311144E004172C90B0CF6C040D84 + 249231B0F0C328DDC5C2C113AD708445861FD952012952DAD2A048168672E57D + 8A0050452B9460C1851588E085DD218D6031C4516B41F44478A3B432922D655A + E20824583C715C175670B2D4215D2C95A729F441848A297B7AC427261EC19505 + 584F448505158848D09B048D50B95327765EB493A87B527267254775E8EAAB70 + 268284121424562BFF12CA9CA0998DBCF6EAEBAFC0AE0805084D60A1818F2F04 + 898C1628AC06C492D0466B011033A0B052151061518B53D92AB7132A5D64EAC8 + A51B885B49166F9509D651B134422A27090CC1E94B6E6AA8A6151C35F8D599AC + 7C2569991762A2ED57577250C1A12B49D0C549D7E1270ABF8764097024AD4872 + DE131B30D2EDB52F21E20907AA60C72FB6B66429EA298BF44711AC2C77A81115 + 4A9C86DA0B2F1450E4002B6C91F33439F77CCDCE3AFF2C34CF4307ED33D1481B + 1D74D240375DB4D34C2B4DB4CF472FBD051423FC204316510C1141315AC41C01 + 0BFA00E4CFD9FFA48DF6DA6AB7CDB63F40D0204311E18AF4662A220D4257DEBE + 652C9228332962C8FF6095085E2028ED5287144C5D2C3C534D09D8652121D1C1 + 79A1065E01450526995CBB09591B2805D229568C6EE62B328DE78443A4A4A941 + 8695226205A83B5D2581156A210A22478413021559BE07E75BCBC473C8410212 + 848818321AFC604301CC04FB2BD036522FBD8CD6C3E842012034A0C11060BFA0 + 85F8EFD070C3B3D2A60F9B0905C85009056865528116C135550112834B050012 + E86A978A0687E0CB2040A4B74C248002108900A752679DA6A8491103AA1D4CF8 + 33AA9094EE100E040F764C021EB59844029B40C471BCA7169F78CF276EF90E16 + 2A3011D74DC421EEDA1C4C84532EFB30A55CB813E185A0F21B0541074D1D2B9E + 1001C38140694044FFC6484663984135A535F1894E8C2214A728C52A52F18A56 + CC6213A1A0830298250A60A3401422E0232ED0601F6E4BE3DBD4C8467F64E007 + 85E944FC1E3125FD08224BBEF11423E0F4918249A510B158C5DF1AC001C5CD70 + 718D1B0F175C920AF388EA4C182993A40ED1004C3C022307C2D4713840059828 + C72D126885A73098A52C51A2928480C50AC13412535DF2404DE98220EAF49BD0 + 0D02758718D9A56022313CAD6C88C0DC4511197498B0214331B9920216A13835 + 2D3A7399CF8C2634B138001DA0E0365A28460486800C0A44C06633309B40C479 + B6719AB39CE81CC80D50B02D4271441125196505BC050051A5222A7B84459A04 + 55896DD1112C975AFF49BCE6D5145BCC9026F943557F421989FC490A4C40A945 + 053A19C08F8DD2609C92E5CACE9208CEDD33957CEAA32012000C481C0C93CA99 + E72A78384A533C1222838045BF42B5088F06F3A6B928693145640524A0E00452 + 98C20A86DA33A21AF5A8484D6A51957A549D31F5A94475EA52A50AD5A51A95AA + 513DAA0F0AB003EF31E16BC4A00012B649831900A18D685DE31A81A0821F1494 + 4A84BCC5471A709C0BC5222A8EB0089C0A178BDA8105165E4184BC907237EC20 + 54AE397C53304C479EC1F9465BAD4254150E8591B590EC2B91405D4183913F4A + A6A4020F91C8C1022A9C7A5661831752C57DEA59B9B74C25827EA5D02F714A5B + 993CC209B41A4662FF90A005E86575A8520DEE6FA73A5C2702B7B8C83DAE7289 + BB5CE13637B9CC5D2A146C4305B0FAE84751E0C2105810CEB47AF76DE6BC010B + 9AE09022D26F0313E10B16BA72BC166241094BC1827CF9A281B38056BE89B2CB + 7D45F1040A00E8210974027AE50BE0F902E30004C26F5C1A309E898CC7BF2C94 + 2F5EB4802E0263812BAA78C8438A823B166E5802F0EB427A138540D03E24125A + B8B043088CBFC248E4785DF1B0848913E1891C0C2A6E8A180FAF73CACA75CE58 + B3AD6D6D8779449989953107380114AA8AD5AA22B5C94E8EB294A74C6528F8C0 + 06D041C218C7C885AF722109FAF8AE98D7B810874862A21A7648A652F2C247B8 + 19C08F5044A6568CFF20F2BC5023D87AC58AEF753C87F8D9CF077EC2F1D8C3E0 + 2A9CB601F3540E82EE4BA1444045C355512149A153C40101B841849E4817CAC3 + 1E0D6F0A12AF982F4ABA2089229EA450144A6FAABB90158D146585E521503D4B + D5435444682792428590774D140AC54CB7147082133480821148016758853293 + AD1ADDAB4235D9CC5676B4932AEDA76E4134C1308C16B8898C08D8800B2A302B + DBCE3A6E81903B216A9C41019A308AECC4879215A0842022260A0050B4121471 + 485E073111A2648123C05050032220D18571A0712CD4DB9A54C5977419424A8D + E057C1F6139E4F16D1105D08C54B347213000DF39417E1255026512EA0606C42 + AD80E573D024E883FF931ADE8C83A43D1BD5505B88AA4C37E1B5CE8F07332422 + 0605285001513FB002A21B95E8462FFAD0998AF4A426FDE94A87FA50937E74A7 + 5B1DA9548FFAD2ABDE74A2FB000456382217C838C66D0E2109654D5B09D4CE76 + 7FACDDED6D5F7BDC7390011B64452212291D7824E2900189652212D9DC2B002B + 922A3C21941AF934673522122A308803115002A92D62E6BB66810B4F308C4514 + 5118FE51DE88A1BC6B61880378339B05EF9CBF9D2A61813C2B84E2CF129000B6 + 58AF2D0D648AF671F99222AEA48147733E0B56100AE7D57C59B730E8228C8A44 + 0487A7F39D07CA0AC3A8D53195F06D266E5DE94FCD3AD6AF7E54A9779FFB558F + B2F6B1EFE40F0C20FF470D88421562B6BC03440005AC79D698E73F031A34C1AF + 3BA11F0631A2FFD53A21A005F514FB771372A1207142011CA140B5231C87B41D + 13915833E16398941519B113F8231387107B18980A6CD2438D703BBC134948B0 + 418EC0430AB212ABB37F65115819B840C3C316EBD143B2E508038205F8D360A6 + D27CBC865E0D400587212248A001C934755AD77545788446988448B8844AD884 + 4CF8844E188545B705528002934515A731043EA20551107F70F7857207866F17 + 867257866E8402BCF32D7913267FC38659E22F7A6540ACC7115632570010016C + B24205353C34813B6BD11F92B22A13043BF9333060E2169D744994907124A55A + A740200A53329722FF2E17020978740919933FF3441874A5201FE32D90C217A1 + C047ADC02F59505F188320E915503AB86B07873CB8227DB41233264202422585 + B80885BA988BBCB88BBE988453F0758626011A501AE3B36D5A602219307F6A95 + 46D4C20521442AD7821659228D20554FC1511853A112DAF21C9C234B7AD30043 + 50281D5312DAA12647013210814AA0F070E89281AD703057810A8D121290F087 + 01B440BA36518390059C733023670B24A32D1D5326E0382E1EA329EF664F9B58 + 73F0E890FDD209ADD87CC70322619544B862223E30051FD0911EF99120199222 + 399224099245579228999226A99229390524C05599374661A50564C405F9C076 + 6598933AB9933A99FF03F6D720A348149B800AFCE6091A57321A3114F0B42DCF + F16F2183112DA11D7DE31B097000F973126FE82E8AF08E57F10423C114949479 + C151871FF126E1C22F9C801F084214BF410B2A711C8590216C19677A13125E89 + 4285C32F4D312527E31BFEC817C3E311AC38913AA71156C07EB2087D5CA06427 + 89741D59848FE9918D399992599991197591999949A89994C99996E99851E899 + 9AF9012FB9035AC01632A3050710052F7000AD813663A8936C3386B099361950 + 000DA0059F701515E05F5A72084A209798353BC6511259A005B5B33095A0053A + 7108512060D661397BA526F1E808BCF11B577140D2810814162B87400163116F + 871084B1F28114B0FF5717829C26C111070413F1F61C29B613F556148E259EB3 + B3801C0142D8D13075B11C8EE09B60B95E41469842466A1A402B3EF702CF6302 + 2CD9A00EFAA0101AA1100A05DCD304C0771A41424636E09A3CD9A11E9A9339A0 + 022FE01177F311E632211E510ABE213800821D57A22E6E9112717515D0F81BEF + 7948CFC105A4F51127B132F0644AEB426ABBD429C01058FF768811C360147513 + 97F239A774292413908F82299998091BB014227170F2B642E8F20985502E78D5 + 2EA6F41282364904AA73A05505479444C88004CE5300CA24A1725A928D39A776 + DAA02B80353F50085580045E233EC892042A8046621877B1C946D4F203604159 + 2D0531272308EF44FF48791240DE024F2B11425D9208E3F81506F316A5752F94 + 4411B20411DAF812FC221205227197A56BB06531F5B44B81C211B7C61EEF4427 + A23230115325F3065207792E3B314A547A8DF344AA98106F0CB52926C18267BA + 6B576205C4203348B018E006051D89011F60ADD87AADDA9AADD65AADDBFAADDC + 0AAE1E19AEDD2AAEE1EAADE7AAADE86AAEEC4AAEDFBA0227600303C27EC53046 + 63C50283FAA1FABA933980023C702E57C21788120AB08011F394082A01290FA1 + 1C05B9B0EFD9505352486CB29E9DDA3134B166009209B2A42E18E41188760BE5 + 21532B5A4968322E38372E5E2942DF22885A29293AB195C741491EA11F81420A + C6815E5E191C0EE2FFB1AB5549841482CBAA8306431EA7016CC9F053241092E5 + 5AAE1FB9B428E9B4DE1AB5EA0A92503BB555DBB42259B55A9BB51F30053A6003 + 36702742287DEED75B677456FB9AB639C0023B9026FD673F5A6013D8E1049C73 + 48C98341AE95054AF00916AB9B7738B19EFA129D0A165C100B3CA4A2EF031169 + 18142A91171B109C608159C4212187400500A44384308293A3B7F31112088428 + 018439786B8198D0804F7143F8E1121A724288E05A41213C413B912F110C2162 + 644EA0A045C291EEBABBEDDABBBCFBBBBE1BBCC03BBCDF3A05278002AF77A062 + 4476ADA90269FBBC396002D6321E966A0BB1F0B1867557B7909478B512AAD417 + 99D80A51D081D981FF1D07875ED0285F9E20831271897FF386BFE109828808D8 + 62097021119C7321E8C24FA6A04FFF66BD8424B27F755F57416A84011284208A + B64018F2155701E4698F4548F0DB17B1AB733C38B6B9156C5660224A26BC1E4C + BC20FCC1221CC2EB6AAD2BD045A5432141C2855FD39A67F4BCFBBAB65772118F + 601D4959449E8217293AC36951185CFA1084F111A4265ADA7211B0B0A9379A1D + 6F713C5C701457627218242E9B12A36842326B5171146131A3A012249A59E3B2 + 4AD85244D842189922C62A46254574272246253AFC62777271A255082B2409A2 + 5049F1261293C6C69BB24A8359C13B080C1AF08340F802437002BA8B01889CC8 + D79AC88CDCC88EFCFFC8901CC98B1CC9945CC9967CC988BCC831C00EEF900457 + F0C94B300113F0C942F00530BCAF19600F5C7000AB9C045FC6CAABFC65ABFC0E + B3CCCAEF70CBB18CCBBAFC0E67D7CAA7B542361C6F8D733C43601E78FCB1EB71 + 26338A382453122C7A821E3B1422E1B28DA005F6600FB88CCDB7BCCDB6CCCDDE + ACCDDBACCDD70C0FE42CCEE51CCE9DECC713095A12C05BC0E604B8E218D4DAC8 + 935CCF8A7CCF998CCFD89ACFFCBCCFFE6CCFFD0CD0FFACCF025DD004CDC82BE0 + 03685844D0771AB955003470CA1FAA023280BAFE333C4BEC9D9E4A58B85050F6 + B3322B24B8E5CB09778C607B959B6E910958109F295D488DCB7F247715C3B613 + 69E8AC48C11114C0FF056061602BD4D3118617C0FCD309F7D33E3D5F12C6D347 + 9D7046DDD33FB1129EBA0AEA4C918FB0A6C7A0182592BB989CD55ABDD55CDDD5 + 5AADD0EEB32988A904C3E69A3920D13C49023FF0AF82B12131EB17AEE52E0EB2 + 386F116FE86BCC0F813104430A023CAC1C5B27325512540226FE91D71B3D46BA + A021B0A2D898850B8C1D40E061612B36A0512D6406E33DC6147DC9A00C1BE9D5 + 9EFDD9A01DDA8CFC010ACD0395167DB7521A118DD63A592D0CE61B2A4A43A865 + BE4A7C825369211F6D58B9211C7861200770B9859126EFD68D2B614FCD2C5366 + 4211F6A42E93C48EEC580141721FCC5759A9B3807B75DD1851202468DD3A515A + 83C1B869165ADD5BFFD916FC32C660BBAA4D0288BC0018C0DEEEDDDEF0FDDEEB + FDC8EFCDDEF37DDFF03DDFF29DDFF1CDDFF6EDDFFD8DDFFF3DE0895CDFFDFDDE + 098D0241001630E3D04AA0046473D6AC2D773370023BD08A2C241CF2B538F542 + 959807788B085081D2D273D51D8930CD9D33D8E482329640957C470143002717 + E6722ED738367EE36981173A8EE308A7E378D1E3D6611D3D3ECC69711D3C9ED1 + E4DD8AA6803CB77B0CC310C81A390595FCDF964CE0946CE5914CE505BEE58EAC + E5024EDF97FC013A0002D9923CB22884AB21E1135E0224600345A08319EE1D2A + 9A163AE1DB1A719E0AF21CF0A32056A2048EC5284850AC820B002492E78330D3 + 83603066729EDE84FF141BB6D4901EE9923EE9945E63495DD40997E484391EA7 + E87362B5A1276002073EEA065EEAA47EEAA69EEAA8BEEAAADEEAAB6EBC209026 + ED2C224EA09ACBB8E625D0AF6FBD6B713E68E8B597D2491367E24771120AFC94 + 2604FB4BA134A514334937010BF91B09AFE7A77092B134249DC523DB8FED17A5 + A5E9B2AB111AA03C23A2A03F25E5A6FEE5AEEEEAFA0DE0FB9DEEA7BEEEAA0EEF + 010EDF5E0B0287C0037D3A3E621533828AEBEAC6D6685A6F0D3643BE91D284BB + 2DAE1A28FCE62D81A2B8940831B7162199183049EA08DFA885326E8E7D1318DB + CE21DA4E58B7EDED845952C52822646D056393B40BB0F22BDFDE2DCFF230EFF2 + EEFDF2343FF3362FFFF3321FF32C8FF33BDFF335CFF33FEFF3372FF42E1F0316 + 2EDC637DBB2C60CA139E03EBA6832266122D44F0B75D95C63C5774780907D31D + 939795A9A42E8F0826515108383708DB56ED773339892DDB6BAFED6E7FEDDCDE + F1226FD946940CD2370C8C5100EA9DEE2FCFEA7E5FEA7DEFEE82FFF7A41EF818 + C03E178E5E5460B4D447364D3F5E702EF02465300D53F526DD3159B0E7219E00 + 2C0DDB1400806E4101133B1894A00400C43B83107C824B09638541191B206FFF + F620CF7CB710FB70EF0B0535F7134964D944EB48F03C2AF001303FFCC44FFC39 + 5FFCC89FFCCABFFCCCDFFC368FFCF4FEF48B7A91B4F8C268BDB656F0E61B22F7 + BD10F58870626F31FFCC1868F572A82EFCF6115C893840FAF518F788CC0E582B + 0E008DBEE4CD89538555FB80C1FDBA5F5B3F0108595448145A2F14881A4E2834 + 24310B0B189091939290969492989B959D979E949FA2A1A49C93A098A7A6A595 + 2405321B1B58544A88144A8B343325BCBD250ABEBDC0BC39343F58B1C9CAB11C + 00CECE1C1BCFD3D4D50015C8001B0915CECC5DD1CF580754CE5855CE09E800E7 + DD584FDD005509005D4FF400540DCE55FB000DFEFA396BF0245D166715A244F1 + 86A599B469C9AC419448B1A2C58B18336ADCC891A3340E1C1248A8A5A5102225 + 5A50B05091EA94CB973063CA9C49B3E6821A3471DA844902850C001C66D9BA45 + 0145861CC1922A2DB2A1C267B88750A1816BD6F119B68F58B03C6356A1421769 + 09B854C9FAA459B3040DB048E87636CB397A6CB3A0DD47F55E8282F5FE354870 + 905996B409B40CF196E0613569CB126B445CB5B1E3C79023F7B8AB01E550242F + 6C1C383165A7E7CFA0438BA619C307889FDBA838B1E5C44681A34B63E7C880A2 + EC62C31CAF6AE3B63559D00AB20EA055D2EC2B582DCDBAB953422F5A71250781 + C60280A49C73691A34D4632C0109002B11183A3C1CB9FC56008100003B} + end + end + object bAceptar: TButton + Left = 344 + Top = 367 + Width = 75 + Height = 25 + Cancel = True + Caption = '&Aceptar' + Default = True + ModalResult = 1 + TabOrder = 1 + end + object memModulos: TMemo + Left = 128 + Top = 112 + Width = 289 + Height = 233 + BevelInner = bvNone + BevelOuter = bvNone + BorderStyle = bsNone + ParentColor = True + TabOrder = 2 + end +end diff --git a/Cliente/uAcercaDe.pas b/Cliente/uAcercaDe.pas new file mode 100644 index 0000000..720ee32 --- /dev/null +++ b/Cliente/uAcercaDe.pas @@ -0,0 +1,60 @@ +unit uAcercaDe; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, JvGIF, ExtCtrls, JvExControls, JvComponent, JvGradient, StdCtrls, + uHostManager; + +type + TfAcercaDe = class(TForm) + JvGradient1: TJvGradient; + Panel1: TPanel; + Image1: TImage; + Bevel1: TBevel; + bAceptar: TButton; + memModulos: TMemo; + procedure FormShow(Sender: TObject); + private + FHostManager: THostManager; + public + property HostManager : THostManager read FHostManager write FHostManager; + end; + +var + fAcercaDe: TfAcercaDe; + +implementation + +{$R *.dfm} + +uses JclFileUtils; + +procedure TfAcercaDe.FormShow(Sender: TObject); +var + i : integer; +begin + memModulos.Lines.Clear; + + with TJclFileVersionInfo.Create(Application.ExeName) do + begin + memModulos.Lines.Add(ProductName + ' - Versión ' + ProductVersion); + memModulos.Lines.Add(CompanyName); + memModulos.Lines.Add(''); + memModulos.Lines.Add('Se autoriza el uso de este programa a:'); + memModulos.Lines.Add(''); + end; + + if Assigned(FHostManager) then + begin + memModulos.Lines.Add(''); + memModulos.Lines.Add(''); + memModulos.Lines.Add('Módulos disponibles:'); + for i := 0 to (HostManager.ModulesCount - 1) do + memModulos.Lines.Add(' - ' + FHostManager.Modules[i].Module.ModuleName + + ' - v. ' + FHostManager.Modules[i].Module.Version); + end; +end; + +end. diff --git a/Cliente/uMenuUtils.pas b/Cliente/uMenuUtils.pas new file mode 100644 index 0000000..f42d5c5 --- /dev/null +++ b/Cliente/uMenuUtils.pas @@ -0,0 +1,249 @@ +unit uMenuUtils; + +interface + +uses + Controls, Forms, ImgList, ActnList, JvPageList, JvNavigationPane, Menus; + + +procedure MergeMenus(Source, Dest: TMainMenu; ImageIndex : Integer = -1); +procedure SortMenuByTag(Menu : TMainMenu); + +function CreatePageNavPane(const APageList : TJvCustomPageList; + ACaption : String; AAction : TAction; AImageIndex : Integer): Integer; + +procedure PopulateNavPagePane(APanePage : TJvNavPanelPage; + AMenuItem: TMenuItem; AImageList : TCustomImageList; + AStyleManager : TJvNavPaneStyleManager); overload; + +procedure PopulateNavPagePane(AParentControl : TWinControl; + AMenuItem: TMenuItem; AImageList : TCustomImageList; + AStyleManager : TJvNavPaneStyleManager); overload; + + +function getSubMenu(Const pMenu: TMainMenu; Const pCaption: String): TMenuItem; +procedure copiarItemsMenu(MenuDestino: TMenuItem; pMenu: TMenuItem); + + +implementation + +uses + ComCtrls, Classes, Math, TBXDkPanels, StrUtils, SysUtils, + ExtCtrls; + +type + TAssignCallback = procedure(Source, Dest: TMenuItem); + + +procedure AssignMenus(Source, Dest: TMenuItem; AImageIndex : Integer; + AssignProc: TAssignCallback); +var + I: Integer; + Item: TMenuItem; +begin + for I := 0 to Source.Count - 1 do + begin + Item := Dest.Find(Source.Items[I].Caption); + if Item = NIL then + begin + Item := TMenuItem.Create(Dest); + Dest.Add(Item); + if Assigned(AssignProc) then + begin + AssignProc(Source.Items[I], Item); + if (Source.Items[I].ImageIndex >= 0) then + Item.ImageIndex := Source.Items[I].ImageIndex + AImageIndex; + end; + end; + AssignMenus(Source.Items[I], Item, AImageIndex, AssignProc); + end; +end; + +procedure AssignMenuItem(Source, Dest: TMenuItem); +begin + Dest.Caption := Source.Caption; + Dest.Hint := Source.Hint; + Dest.Checked := Source.Checked; + Dest.GroupIndex := Source.GroupIndex; + Dest.Tag := Source.Tag; + Dest.Action := Source.Action; + Dest.ImageIndex := Source.ImageIndex; + Dest.ShortCut := Source.ShortCut; + Dest.RadioItem := Source.RadioItem; + Dest.AutoCheck := Source.AutoCheck; + Dest.AutoHotkeys := Source.AutoHotkeys; + Dest.AutoLineReduction := Source.AutoLineReduction; + Dest.Break := Source.Break; + Dest.Default := Source.Default; + Dest.Enabled := Source.Enabled; + Dest.HelpContext := Source.HelpContext; + Dest.Visible := Source.Visible; +end; + +procedure SortMenuItems(MenuItems : TMenuItem); + + function CompareTags(Item1, Item2: Pointer): Integer; + begin + Result := CompareValue(TMenuItem(Item1).Tag, TMenuItem(Item2).Tag); + end; + +var + I: Integer; + AList : TList; +begin + AList := TList.Create; + + try + for I := 0 to MenuItems.Count - 1 do + begin + SortMenuItems(MenuItems.Items[i]); + AList.Add(Pointer(MenuItems.Items[i])); + end; + + AList.Sort(@CompareTags); + + for i := 0 to AList.Count - 1 do + TMenuItem(AList.Items[i]).MenuIndex := i; + + finally + AList.Free; + end; +end; + +procedure MergeMenus(Source, Dest: TMainMenu; ImageIndex : Integer = -1); +begin + AssignMenus(Source.Items, Dest.Items, ImageIndex, AssignMenuItem); +end; + +procedure SortMenuByTag(Menu : TMainMenu); +begin + SortMenuItems(Menu.Items); +end; + +function CreatePageNavPane(const APageList : TJvCustomPageList; + ACaption : String; AAction : TAction; AImageIndex : Integer): Integer; +var + APanePage: TJvNavPanelPage; +begin + Result := 0; + APanePage := TJvNavPanelPage.Create(Application); + with APanePage do + begin + Caption := StringReplace(ACaption, '&', '', []); + Action := AAction; + PageList := APageList; + Iconic := False; + ImageIndex := AImageIndex; + Result := PageIndex; + end; +end; + +procedure PopulateNavPagePane(APanePage : TJvNavPanelPage; + AMenuItem: TMenuItem; AImageList : TCustomImageList; + AStyleManager : TJvNavPaneStyleManager); +var + APanel : TScrollBox; + ItemIndex : Integer; +begin + with TJvNavPanelDivider.Create(Application) do + begin + Parent := APanePage; + Caption := 'Accesos directos'; + ParentStyleManager := True; + Align := alTop; + end; + + APanel := TScrollBox.Create(Application); + with APanel do + begin + BevelEdges := []; + BorderStyle := bsNone; + Parent := APanePage; + ParentColor := True; + ParentFont := True; + Align := alClient; + end; + + for ItemIndex := 0 to (AMenuItem.Count - 1) do + begin + if AMenuItem[ItemIndex].Caption <> '-' then + with TJvNavPanelButton.Create(Application) do + begin + Parent := APanel; + Align := alTop; + Tag := AMenuItem[ItemIndex].Tag; + Caption := AMenuItem[ItemIndex].Caption; + Action := AMenuItem[ItemIndex].Action; + Images := AImageList; + ImageIndex := AMenuItem[ItemIndex].ImageIndex; + Height := 32; + StyleManager := AStyleManager; + Invalidate; + end; + end; +end; + +function getSubMenu(const pMenu: TMainMenu; const pCaption: String): TMenuItem; +var + i: Integer; +begin + i:=0; + while ((i < pMenu.Items.Count) and (StringReplace(pMenu.Items[i].Caption,'&','',[]) <> pCaption)) do + inc(i); + Result := pMenu.Items[i]; +end; + +procedure CopiarItemsMenu(MenuDestino, pMenu: TMenuItem); +var + i: Integer; + Item: TMenuItem; +begin + for i := 0 to (pMenu.Count - 1) do + begin + Item := TMenuItem.Create(MenuDestino); + Item.Caption := pMenu.Items[i].Caption; + Item.Action := pMenu.Items[i].Action; + MenuDestino.Add(Item); + end; +end; + +procedure PopulateNavPagePane(AParentControl : TWinControl; + AMenuItem: TMenuItem; AImageList : TCustomImageList; + AStyleManager : TJvNavPaneStyleManager); +var + ItemIndex : Integer; + AHeight : Integer; +begin + AHeight := 0; + for ItemIndex := 0 to (AMenuItem.Count - 1) do + begin + if AMenuItem[ItemIndex].Caption <> '-' then + with TTBXLink.Create(Application) do + begin + Parent := AParentControl;//APanel; + Align := alTop; + ParentFont := True; + Tag := AMenuItem[ItemIndex].Tag; + Caption := AMenuItem[ItemIndex].Caption; + Action := AMenuItem[ItemIndex].Action; + Images := AImageList; + ImageIndex := AMenuItem[ItemIndex].ImageIndex; + if ItemIndex = 0 then + Margins.Top := 15 + else + Margins.Top := 8; + Margins.Bottom := 8; + Margins.Left := 10; + Margins.Right := 10; + Height := 18; + Invalidate; + AHeight := AHeight + Margins.Top + Margins.Bottom + Height; + end; + end; + AParentControl.Height := AHeight; + AParentControl.Invalidate; +end; + + +end. + diff --git a/Cliente/uPantallaPrincipal.ddp b/Cliente/uPantallaPrincipal.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Cliente/uPantallaPrincipal.ddp differ diff --git a/Cliente/uPantallaPrincipal.dfm b/Cliente/uPantallaPrincipal.dfm new file mode 100644 index 0000000..e76e0a4 --- /dev/null +++ b/Cliente/uPantallaPrincipal.dfm @@ -0,0 +1,405 @@ +object fPantallaPrincipal: TfPantallaPrincipal + Left = 411 + Top = 210 + Width = 793 + Height = 560 + Caption = 'Pantalla principal' + Color = clWindow + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + Menu = HostMenu + OldCreateOrder = False + Position = poScreenCenter + WindowState = wsMaximized + OnCreate = FormCreate + OnDestroy = FormDestroy + PixelsPerInch = 96 + TextHeight = 13 + object pnlContenido: TTBXAlignmentPanel + Left = 0 + Top = 0 + Width = 785 + Height = 487 + ParentColor = True + Align = alClient + Margins.Left = 5 + Margins.Top = 5 + Margins.Right = 5 + Margins.Bottom = 5 + TabOrder = 0 + object JvSyncSplitter1: TJvSyncSplitter + Left = 210 + Top = 5 + Width = 5 + Height = 477 + ResizeStyle = rsPattern + end + object JvNavigationPane: TJvNavigationPane + Left = 5 + Top = 5 + Width = 205 + Height = 477 + ActivePage = pagInicio + Align = alLeft + AutoHeaders = True + Background.Stretch = False + Background.Proportional = False + Background.Center = False + Background.Tile = False + Background.Transparent = False + ButtonHeight = 32 + Colors.ButtonColorFrom = clWhite + Colors.ButtonColorTo = 12435133 + Colors.ButtonHotColorFrom = 13009540 + Colors.ButtonHotColorTo = 13009540 + Colors.ButtonSelectedColorFrom = 14602190 + Colors.ButtonSelectedColorTo = 14602190 + Colors.SplitterColorFrom = 13026246 + Colors.SplitterColorTo = 9211532 + Colors.DividerColorFrom = 15725551 + Colors.DividerColorTo = 13026246 + Colors.HeaderColorFrom = 8684164 + Colors.HeaderColorTo = 8684164 + Colors.FrameColor = 8684676 + Colors.ToolPanelHeaderColorFrom = clWhite + Colors.ToolPanelHeaderColorTo = 12435133 + StyleManager = dmBase.StyleManager + ParentStyleManager = False + LargeImages = ModulesLargeImageList + MaximizedCount = 0 + NavPanelFont.Charset = DEFAULT_CHARSET + NavPanelFont.Color = clWindowText + NavPanelFont.Height = -13 + NavPanelFont.Name = 'Tahoma' + NavPanelFont.Style = [] + NavPanelHotTrackFont.Charset = DEFAULT_CHARSET + NavPanelHotTrackFont.Color = clWindow + NavPanelHotTrackFont.Height = -13 + NavPanelHotTrackFont.Name = 'Tahoma' + NavPanelHotTrackFont.Style = [] + SmallImages = ModulesSmallImageList + object pagInicio: TJvNavPanelPage + Left = 0 + Top = 0 + Width = 203 + Height = 404 + Background.Stretch = False + Background.Proportional = False + Background.Center = False + Background.Tile = False + Background.Transparent = False + Caption = 'Inicio' + Iconic = True + ImageIndex = 0 + end + end + object pnlBorde: TJvXPContainer + Left = 215 + Top = 5 + Width = 565 + Height = 477 + BoundColor = clActiveCaption + BoundLines = [blLeft, blTop, blRight, blBottom] + Caption = 'pnlBorde' + Align = alClient + object pnlMain: TTBXAlignmentPanel + Left = 1 + Top = 1 + Width = 563 + Height = 475 + Align = alClient + Color = clWindow + TabOrder = 0 + object lblBienvenido: TLabel + Left = 8 + Top = 8 + Width = 210 + Height = 54 + Caption = 'Bienvenido' + Font.Charset = DEFAULT_CHARSET + Font.Color = clHighlight + Font.Height = -43 + Font.Name = 'Trebuchet MS' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Label22: TLabel + Left = 116 + Top = 52 + Width = 208 + Height = 22 + Caption = 'Gesti'#243'n de obras y proyectos' + Font.Charset = DEFAULT_CHARSET + Font.Color = clGray + Font.Height = -16 + Font.Name = 'Trebuchet MS' + Font.Style = [] + ParentFont = False + Transparent = True + end + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 487 + Width = 785 + Height = 19 + Panels = <> + end + object XPManifest1: TXPManifest + Left = 240 + Top = 32 + end + object GeneralActionList: TActionList + Left = 248 + Top = 149 + object actSalir: TAction + Category = 'Archivo' + Caption = '&Salir' + OnExecute = actSalirExecute + end + object actConexion: TAction + Category = 'Archivo' + Caption = 'Configurar conexi'#243'n' + OnExecute = actConexionExecute + end + object actAcerca: TAction + Caption = 'Acerca de...' + OnExecute = actAcercaExecute + end + end + object ModulesSmallImageList: TPngImageList + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000097048597300004E2000004E2001167D99DE000001504944415478DA + 63FCFFFF3F0325801197C4840C067D207501CA352898C17071060303D8B60C24 + 7D8CF8343B381880F9070E80CD31E098C170E11990D184CF0064CD0776401CE0 + E0610036E42AD009CF81FC2DB80C40D7AC9F70082C7E71851D03580C6808D02B + 28FA18F16976B0B78578E1E061144360610237009F6610F8F9EB0FC3F1E3C7B1 + 1AC2488C6618BE7AF93C862120032009E107035ECD3F80F817106F3F7886E1EF + 314FCC74E01391F57FF3F2A970898999A811E453F91A6CD0BEE31718A6F75533 + 5CBB708E11A701208533F25919321212C0FC190B1630B8163F07BBE2D8D92BF8 + 0D8039797E2927D880EFDF3F322C5CB99EC136F73158FCECE51BB80D58B37022 + DC8065D5BC0C617ECE0C2B0FBC6660FC7489C12CFD3E58FCCACD3BB80D5838A3 + 9B61D92648E20105949F9B29C3B3E7D718CE5CFECAC06CB51D1E1E380DB877E3 + 0403B1006E00A5D919001742F4296979DC590000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000970485973000017120000171201679FD252000001DD4944415478DA + 63FCFFFF3F032580916203C064C305B24CF95FAFCF0837A0C35205220834EAD7 + EFFF0C9FBEFD67F8FAFD3FC3C7AF0C0C9F81ECF79F80625FFF33FCFC0DD17C4B + F811AA01E8A63771DC6278F9EC21982D2E25CF50F7430DB70B262FDAFE3F27D6 + 032E9193DFC3905C94C0F0879F9FE1E73F26863F9F3F33ACE99BC3505797CEF0 + E7EF3F300E48AC6638B7631AAA018585850C4212560C5C867A0CF9AE6A0C1377 + DF821B6A66A4C87060EE4686772F8E3138F9A730D4774CC53400667B5C431EC3 + CF1F6C0C1F7F32300873323030333130BCFCC5C0B0B3AB87A100E8B2EBF75F62 + 3700E482DFFFA41914BD7D19A494D4199EDDBB097781B7853AC394DA1E0656A6 + A7D85D901EE90AF65B69D94486D0A21486F78C020CB2DC0C0C826C0C0C124057 + FC03C2FEDEB50CBE7E560C8F5F7EC0342029D489E1FD4267864B12C50C5BF7DD + 6188ACCE663871E111D8F6201B1586DECA7EB0ED2080D50581DF5A19441C6218 + 2EED39CD7081C182E1E2AD0F70E783A2D1DBD792E1F79FBF0CBF7FFF6578FFF9 + 3BAA014F66D8FC07697EBA6D1DC39633EC0CE71F9F66086ADA833715C20D8069 + 7EB97723C386A32C60CD17B902894ACA60038A3352FEAB72BE65F8F9F20F58F3 + 82C32F1889CE0BC0740F560C32E4EDD52D2469861900008660FEE14240093000 + 00000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end> + Left = 259 + Top = 373 + Bitmap = {} + end + object ModulesActionList: TActionList + Left = 291 + Top = 372 + end + object ModulesLargeImageList: TPngImageList + Height = 24 + Width = 24 + PngImages = < + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000097048597300004E2000004E2001167D99DE000002D14944415478DA + B5965F4853511CC7BF238A120DD9437F1E621B0D7D547AE8C18712F1DF42D1C0 + 87081F7C08121FFA4744B190A0B70211A2B208315965A0CDE58386A5CBD61FC5 + 6C2B373633B76BC66C19AD6DEA74BBF776EECDDDEEDDBDFBF390077E9CB373EF + F97CCEF9FDCE85A95896C56636D5A60BB279A9BD1945A4B3274D179FE980831B + 3C849E0D61969FFC49C228E2661424E0A5A5C59279ABD52E481202864C2C9168 + CD5620867BBD7E84C32BFC7C5E5E0E74BABD82645787DE1E248265F2E307896B + D908C4709F6F910F71D36AF7F0C1497698B6221C896171E3045D990462F89CEF + 17E67D140AEA86A056ABF9E7C160086E7339343A2D749A7C5EE2370154040890 + E723E90492B4CC8741CD7DE1E186EA2AC97BC3CF47E1EA2B8376BF1EDA7DB9BC + C4DA0738498E3EA71248764E919D7B2914127875129C21579BA619BC181985C7 + 5C213949A705F8E8571028E5BCB0EE1981572AC2E3711A71D2DB6C36CCF45748 + 6A02D1155629DD168AFAAE989664381F710693136F3163A98446B35B72BB3889 + 4A69E79AAA27A8AF3F9A153C31FE303106EF609DEC249C8015E7BC80A4C59021 + 2DC9707AA3F738A730FBB44A52135E9000A52B6826384DFF7DEE763AB0306410 + D60B45AE39D6C20E3CBA29812716769CDEA6F831D61A9764F2D793D3B8DD6684 + CB3EA54A2B10EFEADEB9ED686E6AFA772A86C1DDEE6E1CB918909D6CDCEECA2C + 10C3B9455D17720401CB32585B5B46574F1F2ACFFB65697BFFC99D5E900CE77A + D3A55C41108D86B1BA1AC263CB30CACE7E93D5C4E19A492D309B6EC8E05CF45C + DE89138DC7118B45115909612918C5CB57361C3AF55556F069CF6C6A41EFFD76 + 199C1BF75EC94763432DD97D0881DF71B40E14A13CFF164A5A28099C6B69053D + 9D6D3238D7F75F55A3A1E6309F1E2ED663AB181B5FC0C1935E093CA3A0FBCE75 + 3CB08CC9AE23FDC6809AF203041EE14FB11E5BC18423842D25838AD737A560CE + FD0EFFAB0982CDFE57F107B61AA443A57B28CB0000000049454E44AE426082} + Name = 'PngImage1' + Background = clWindow + end + item + PngImage.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000970485973000017120000171201679FD252000003E74944415478DA + D59559685C5518C77FB364EECCDCE9EC596996491BC618432A28246E041B4DEB + 065553445AA122218D55093E0982425F7C9354903EA9141F24421FB4D4D6B6D4 + A549C198496C163B314D4D3219C634D3244C3B6B26D773679AB4433241213E78 + E0DCE570EEFFF76DE7BB1A4551F82F87E6FF0F587BFA70684B49CA070D9A7580 + 8F9A76AEDBB89C8678522196C8DEA37145DC212ADEA3B1EC7B340EB7E377ED1B + 774DFF33407A458826EE8AC7EE80D4793B96155601AAF8BDEE8F3BF300D699BF + 220869616E4A282D8BFB4A5A751EB47A2890C43482AE202BA3D1E47CBA0EF0C9 + 89EF942307F7AC6D48A552CC06E7189F986572FA16716539B39E5C4AD3505726 + F422B88BEC58AD0E24A3118D56875A2F2BC2A87DAFBF8FEFCCA7F901AAF8E464 + 80A1DF4348F6424AAADD388A2C1408CB171723F80726882F452971E8902D5A01 + 2AC66CB608A886ABD76FF0DED1EEFC80AEAE2EE2F138EED28778F2B956763D50 + CA673F4CE4B8BFFB112F17FAFC38E7FE62D8779648640E93C9844EA763CFCB1D + 9B0392C924BF0E8C31BD20B3BBC543A141CF9248EA4F419813A9D06A411261AF + 7289244F0519EBBD4C5585134FF50E0C46137F06173607747676A22DA8C6F3EC + F399F5B6262F5F5FF6E778B0C3EBE59A3FBBA64C8ED27FF1240E8705A3C8C5DE + B6C39B0382C1203D674678F1600B7F2C6A9909835EEC728AA2A9B18BA2128914 + 91E05A040CB2C29593E7D0256E50DF5087C3E922148EE607BC79A095F6F676EA + 9ADA486FAFCCACBB2ABC84A7733DD8FFA8979EDEEC9A2E30C5A5D327B0DB8DC8 + B2CC33FB3BF3033A5E7D9A5028C4573DBD3CDCFA047265315745EC4B65281753 + 2D5497887F914978229E87C31166468204FCFD548BB0399D6E1622C9FC80432F + 35F3CEDB47588A2478EA85B78814DAA8ABF7323A9CEB41578B978FCFFBA991D2 + 4C8D8E3034F03D7ABD2E53497973D0FDF92965EFE3F7633EFF1AC77C0F5254DF + 4C794D35B58DB5CCA7A54CDB2832804358AF881CCC4ECED17BFA9238E0612A3C + 15949555A03748A26DA436061CEDFE5239241DC7DD7C80D8E059CE056AF02D96 + 73DFAE46E6ADDB723CF0C806C67FF1914ECD3332F823369B15499244096BF39F + 83C0F1C714553CFDDBB78C5D49D1775D62D65285697B1546931BC9EC125563E0 + 6620245AC22D2C36232565A5B80B4B44AB9045ABD08A36A19048A5D70356C593 + 03DFE01F5BCE880FCEF4636D3C4CA567A70098C5E98E914A264489EA31CB16AC + 363B168B95021116F50467C4EE34BC1CC04696ABE2176E7A916DC5184CDB328D + 0C6585B59E2C84548B351B74D1D5B106E83BB64FA975A598184BAE897FF17368 + E3AFFEC558FD156BDEED78437945FC81B6523C07A05E544878F4D49689DF0BF8 + 1B2694FBE012B66F2C0000000049454E44AE426082} + Name = 'PngImage0' + Background = clWindow + end> + Left = 227 + Top = 373 + Bitmap = {} + end + object HostMenu: TMainMenu + Images = ModulesSmallImageList + Left = 243 + Top = 76 + object Archivo1: TMenuItem + Tag = -9000 + Caption = 'Archivo' + object Configurarconexin1: TMenuItem + Tag = 3 + Action = actConexion + end + object N1: TMenuItem + Tag = 5 + Caption = '-' + end + object Salir1: TMenuItem + Tag = 6 + Action = actSalir + end + end + object Ver1: TMenuItem + Tag = 9001 + Caption = 'Ver' + Enabled = False + end + object Ayuda1: TMenuItem + Tag = 9002 + Caption = 'Ayuda' + object Acercade1: TMenuItem + Action = actAcerca + end + end + end + object HostManager: THostManager + MainMenu = HostMenu + OnAfterLoad = HostManagerAfterLoad + Left = 276 + Top = 47 + end + object StyleManagerButtons: TJvNavPaneStyleManager + Colors.ButtonColorFrom = clWindow + Colors.ButtonColorTo = clWindow + Colors.ButtonHotColorFrom = 13009540 + Colors.ButtonHotColorTo = 13009540 + Colors.ButtonSelectedColorFrom = 14602190 + Colors.ButtonSelectedColorTo = 14602190 + Colors.ButtonSeparatorColor = clWindow + Colors.SplitterColorFrom = clWindow + Colors.SplitterColorTo = clWindow + Colors.DividerColorFrom = clWindow + Colors.DividerColorTo = clWindow + Colors.HeaderColorFrom = clWindow + Colors.HeaderColorTo = clWindow + Colors.FrameColor = clWindow + Colors.ToolPanelHeaderColorFrom = clWindow + Colors.ToolPanelHeaderColorTo = clWindow + Fonts.NavPanelFont.Charset = DEFAULT_CHARSET + Fonts.NavPanelFont.Color = clWindowText + Fonts.NavPanelFont.Height = -11 + Fonts.NavPanelFont.Name = 'Tahoma' + Fonts.NavPanelFont.Style = [] + Fonts.NavPanelHotTrackFont.Charset = DEFAULT_CHARSET + Fonts.NavPanelHotTrackFont.Color = clWindow + Fonts.NavPanelHotTrackFont.Height = -11 + Fonts.NavPanelHotTrackFont.Name = 'Tahoma' + Fonts.NavPanelHotTrackFont.Style = [] + Fonts.DividerFont.Charset = DEFAULT_CHARSET + Fonts.DividerFont.Color = clWindowText + Fonts.DividerFont.Height = -11 + Fonts.DividerFont.Name = 'Tahoma' + Fonts.DividerFont.Style = [] + Fonts.HeaderFont.Charset = DEFAULT_CHARSET + Fonts.HeaderFont.Color = clWindow + Fonts.HeaderFont.Height = -16 + Fonts.HeaderFont.Name = 'Arial' + Fonts.HeaderFont.Style = [] + Theme = nptCustom + Left = 176 + Top = 504 + end + object JvFormStorage: TJvFormStorage + AppStorage = JvAppRegistryStorage + AppStoragePath = 'fPantallaPrincipal\' + VersionCheck = fpvcNocheck + StoredValues = <> + Left = 472 + Top = 80 + end + object JvAppRegistryStorage: TJvAppRegistryStorage + StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y' + StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N' + Root = 'Software\%APPL_NAME%' + SubStorages = <> + Left = 504 + Top = 80 + end + object ApplicationEvents: TApplicationEvents + OnActionExecute = ApplicationEventsActionExecute + Left = 248 + Top = 190 + end +end diff --git a/Cliente/uPantallaPrincipal.pas b/Cliente/uPantallaPrincipal.pas new file mode 100644 index 0000000..50b6d44 --- /dev/null +++ b/Cliente/uPantallaPrincipal.pas @@ -0,0 +1,587 @@ + +unit uPantallaPrincipal; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, XPMan, uGUIBase, uCustomEditor, + JvNavigationPane, JvExExtCtrls, JvComponent, Menus, ImgList, + PngImageList, ActnList, uHostManager, JvExControls, JvPageList, JvPanel, + TBX, TB2Item, TB2Dock, TB2Toolbar, ComCtrls, TBXToolPals, TBXLists, + TBXExtItems, TB2ExtItems, TBXMDI, TBXDkPanels, JvSplitter, JvSyncSplitter, + JvXPBar, JvXPCore, JvXPContainer, JvLookOut, JvOutlookBar, Buttons, + JvExButtons, JvBitBtn, JvSpeedButton, JvExStdCtrls, JvButton, JvCtrls, + JvStartMenuButton, JvTransparentButton, JvExComCtrls, JvListView, + JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvBaseDlg, + JvJVCLAboutForm, AppEvnts, JvWaitingGradient, JvGradient, + cxControls, JvComponentBase; + +type + TfPantallaPrincipal = class(TForm, IHostForm) + GeneralActionList: TActionList; + ModulesSmallImageList: TPngImageList; + XPManifest1: TXPManifest; + actSalir: TAction; + ModulesActionList: TActionList; + ModulesLargeImageList: TPngImageList; + HostMenu: TMainMenu; + Archivo1: TMenuItem; + Ayuda1: TMenuItem; + pnlContenido: TTBXAlignmentPanel; + JvNavigationPane: TJvNavigationPane; + JvSyncSplitter1: TJvSyncSplitter; + StatusBar: TStatusBar; + HostManager: THostManager; + Salir1: TMenuItem; + pagInicio: TJvNavPanelPage; + StyleManagerButtons: TJvNavPaneStyleManager; + JvFormStorage: TJvFormStorage; + JvAppRegistryStorage: TJvAppRegistryStorage; + ApplicationEvents: TApplicationEvents; + N1: TMenuItem; + actConexion: TAction; + Configurarconexin1: TMenuItem; + actAcerca: TAction; + Acercade1: TMenuItem; + Ver1: TMenuItem; + pnlBorde: TJvXPContainer; + pnlMain: TTBXAlignmentPanel; + lblBienvenido: TLabel; + Label22: TLabel; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure HostManagerAfterLoad(Sender: TObject; AModuleInfo: TModuleInfo); + procedure Salir1Click(Sender: TObject); + procedure actSalirExecute(Sender: TObject); + procedure ApplicationEventsActionExecute(Action: TBasicAction; + var Handled: Boolean); + procedure actAcercaExecute(Sender: TObject); + procedure actAdministracionExecute(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure actConexionExecute(Sender: TObject); + private + FContenido : TCustomEditor; +// FStartDefaultAction : TBasicAction; + FActivePanelSubMenuEditor : TPanel; + + procedure ShowEmbedded(AEditor : ICustomEditor); + function FindNavPanePage(ACaption : String) : Integer; + procedure InitializeUI; + procedure OnThemeChange(Sender: TObject); + procedure CopyImages(const SrcList: TPngImageList; var DstList: TPngImageList; + out Index, Count: Integer); + procedure RegisterModule(AModuleInfo : TModuleInfo); + procedure ExecuteActionMenu(Sender : TObject); + protected + function GetWorkPanel : TWinControl; + public + function IsShortcut(var Message: TWMKey): Boolean; override; + procedure OnWorkPanelChanged(AEditor : ICustomEditor); + property WorkPanel : TWinControl read GetWorkPanel; + constructor Create(AOwner: TComponent); override; + end; + +var + fPantallaPrincipal: TfPantallaPrincipal; + +implementation + +uses + PNGImage, uModuleController, uDataModuleBase, Math, uMenuUtils, + uSplash, uAcercaDe, uViewBase, uEditorUtils; + +{$R *.dfm} + +{ +***************************** TfPantallaPrincipal ****************************** +} + +procedure TfPantallaPrincipal.CopyImages(const SrcList: TPngImageList; var DstList: + TPngImageList; out Index, Count: Integer); +begin + Index := -1; + Count := 0; + + if not Assigned(SrcList) or not Assigned(DstList) then + Exit; + + DstList.BeginUpdate; + try + Index := DstList.Count; + DstList.AddImages(SrcList); + Count := SrcList.Count; + finally + DstList.EndUpdate; + end; +end; + +procedure TfPantallaPrincipal.FormCreate(Sender: TObject); +var + ACursor : TCursor; +begin + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + try + Caption := Application.Title + ' ' + dmBase.darVersion; + SplashScreen := TSplashScreen.Create(Application) ; + SplashScreen.Show; + SplashScreen.Update; + Application.ProcessMessages; + + JvNavigationPane.StyleManager := dmBase.StyleManager; + dmBase.OnThemeChange := Self.OnThemeChange; + Self.OnThemeChange(Self); // Forzar el refresco de los colores del tema activo + SplashScreen.Update; + + with HostManager do + begin + BPLPath := ExtractFilePath(Application.ExeName) + '\'; + MainForm := Self; + + Application.ProcessMessages; + HostManager.LoadModule('Contactos.bpl'); + HostManager.LoadModule('Obras.bpl'); + HostManager.LoadModule('FacturasCliente.bpl'); + HostManager.LoadModule('Recibos.bpl'); + HostManager.LoadModule('ObrasFinal.bpl'); + end; + + InitializeUI; + Application.ProcessMessages; + Visible := True; + finally + SplashScreen.Update; + SplashScreen.Hide; + SplashScreen.Free; + Screen.Cursor := ACursor; + end; +end; + +procedure TfPantallaPrincipal.FormDestroy(Sender: TObject); +begin + HostManager.UnloadModules; +end; + +procedure TfPantallaPrincipal.HostManagerAfterLoad(Sender: TObject; + AModuleInfo: TModuleInfo); +begin + RegisterModule(AModuleInfo); +end; + +procedure TfPantallaPrincipal.RegisterModule(AModuleInfo : TModuleInfo); +var + AModule: TModuleController; + AModuleMenu : TMainMenu; + AIndex: Integer; + ACount: Integer; +begin + AModule := AModuleInfo.Module; + SplashScreen.Texto := 'Cargando ''' + AModule.ModuleName + '''...'; + + CopyImages(TPngImageList(AModule.SmallImages), TPngImageList(ModulesSmallImageList), AIndex, ACount); + CopyImages(TPngImageList(AModule.LargeImages), TPngImageList(ModulesLargeImageList), AIndex, ACount); + + if Assigned(AModule.ModuleMenu) then + begin + AModuleMenu := AModule.ModuleMenu; + MergeMenus(AModuleMenu, Self.Menu, AIndex); + end; +end; + +procedure TfPantallaPrincipal.Salir1Click(Sender: TObject); +begin + Close; +end; + +procedure TfPantallaPrincipal.actSalirExecute(Sender: TObject); +begin + Close; +end; + +procedure TfPantallaPrincipal.OnThemeChange(Sender: TObject); +begin + LockWindowUpdate(Handle); + try + Color := dmBase.StyleManager.Colors.DividerColorTo; + pnlBorde.Color := dmBase.StyleManager.Colors.FrameColor; + with StyleManagerButtons do + begin + Colors.ButtonColorFrom := clWindow; + Colors.ButtonColorTo := clWindow; + Colors.ButtonSeparatorColor := clWindow; + Colors.SplitterColorFrom := clWindow; + Colors.SplitterColorTo := clWindow; + Colors.DividerColorFrom := clWindow; + Colors.DividerColorTo := clWindow; + Colors.HeaderColorFrom := clWindow; + Colors.HeaderColorTo := clWindow; + Colors.FrameColor := clWindow; + Colors.ToolPanelHeaderColorFrom := clWindow; + Colors.ToolPanelHeaderColorTo := clWindow; + + Colors.ButtonHotColorFrom := dmBase.StyleManager.Colors.ButtonHotColorFrom; + Colors.ButtonHotColorTo := dmBase.StyleManager.Colors.ButtonHotColorTo; + + Colors.ButtonSelectedColorFrom := dmBase.StyleManager.Colors.ButtonSelectedColorFrom; + Colors.ButtonSelectedColorTo := dmBase.StyleManager.Colors.ButtonSelectedColorTo; + end; + finally + LockWindowUpdate(0); + Refresh; + end; +end; + +function TfPantallaPrincipal.GetWorkPanel: TWinControl; +begin + Result := pnlMain; +end; + +procedure TfPantallaPrincipal.InitializeUI; + + function EsUnModulo(AMenuItem : TMenuItem) : Boolean; + begin + Result := (AMenuItem.Tag >= 0) and (AMenuItem.Tag < 9000) + end; + +{var + i : Integer; + AMenuItem : TMenuItem; + APageIndex : Integer; +begin + SortMenuByTag(Menu); + + for i := 0 to Menu.Items.Count - 1 do + begin + AMenuItem := Menu.Items[i]; + if not EsUnModulo(AMenuItem) then + Continue; + + APageIndex := 0; + PopulateNavPagePane(JvNavigationPane.NavPages[APageIndex], AMenuItem, + ModulesSmallImageList, StyleManagerButtons); + + // Elimino la imagen que tiene el menú porque queda feo. + AMenuItem.ImageIndex := -1; + end; + JvNavigationPane.ActivePage := pagInicio; + ApplicationEvents.OnActionExecute := ApplicationEventsActionExecute;} + + +var + i : Integer; + AMenuItem : TMenuItem; + APageIndex : Integer; + AStringList : TStringList; + APanel : TScrollBox; +begin + SortMenuByTag(Menu); + + AStringList := TStringList.Create; + AStringList.Duplicates := dupIgnore; + try + for i := 0 to Menu.Items.Count - 1 do + begin + AMenuItem := Menu.Items[i]; + if not EsUnModulo(AMenuItem) then + Continue; + + AStringList.Add(StringReplace(AMenuItem.Caption, '&', '', [])) + end; + + for i := 0 to AStringList.Count - 1 do + begin + with TJvNavPanelDivider.Create(Self) do + begin + Parent := pagInicio; + Top := 100 * i; + Align := alTop; + Caption := AStringList[i]; + ParentFont := True; + if i = 0 then + begin + Enabled := false; + Cursor := crDefault; + end + else + Cursor := crSizeNS; + end; + + APanel := TScrollBox.Create(Self); + with APanel do + begin + Parent := pagInicio; + Top := 101 * i; + if i = AStringList.Count - 1 then + Align := alClient + else + Align := alTop; + BorderStyle := bsNone; + end; + AStringList.Objects[i] := APanel; + end; + + for i := 0 to Menu.Items.Count - 1 do + begin + AMenuItem := Menu.Items[i]; + if not EsUnModulo(AMenuItem) then + Continue; + + {if not Assigned(FStartDefaultAction) then + FStartDefaultAction := AMenuItem[0].Action;} + + APageIndex := AStringList.IndexOf(StringReplace(AMenuItem.Caption, '&', '', [])); + PopulateNavPagePane(TScrollBox(AStringList.Objects[APageIndex]), AMenuItem, ModulesLargeImageList, StyleManagerButtons); + + // Elimino la imagen que tiene el menú porque queda feo. + AMenuItem.ImageIndex := -1; + end; + finally + AStringList.Free; + end; + + ApplicationEvents.OnActionExecute := ApplicationEventsActionExecute; +end; + + +function TfPantallaPrincipal.FindNavPanePage(ACaption: String): Integer; +var + i : integer; +begin + Result := -1; + for i := 0 to JvNavigationPane.PageCount - 1 do + if JvNavigationPane.NavPages[i].Caption = ACaption then + begin + Result := i; + break; + end; +end; + +procedure TfPantallaPrincipal.ExecuteActionMenu(Sender: TObject); +var + i : integer; +begin + for i := 0 to JvNavigationPane.PageCount - 1 do + begin + if JvNavigationPane.NavPages[i].Caption = (Sender as TAction).Caption then + begin + JvNavigationPane.ActivePageIndex := i; + Break; + end; + end; +end; + +procedure TfPantallaPrincipal.ApplicationEventsActionExecute( + Action: TBasicAction; var Handled: Boolean); +var + APageIndex : Integer; +begin + if (Action is TAction) then + begin + APageIndex := FindNavPanePage((Action as TAction).Category); + if APageIndex > 0 then + JvNavigationPane.ActivePageIndex := APageIndex; + end; +end; + +procedure TfPantallaPrincipal.OnWorkPanelChanged(AEditor: ICustomEditor); +var + AEditorMenu : IEditorMenu; + MenuEditor : TMainMenu; + NombrePanel : String; +// APageNew : TJvNavPanelPage; + APanelAux: TPanel; + APanelAux2: TPanel; + i: Integer; +begin + //Liberamos el panel del submenu actual si existiese + if Assigned(FActivePanelSubMenuEditor) then + begin + FActivePanelSubMenuEditor.Free; + FActivePanelSubMenuEditor := Nil; + getSubMenu(Menu, 'Ver').Clear; + getSubMenu(Menu, 'Ver').Enabled := False; + end; + + AEditor.QueryInterface(IEditorMenu, AEditorMenu); + if Assigned(AEditorMenu) then + begin + MenuEditor := AEditorMenu.getEditorMenu; + SortMenuByTag(MenuEditor); + NombrePanel := 'pnl' + StringReplace(MenuEditor.Items[0].Caption,'&','',[]); + + //Creamos el panel para el submenu + APanelAux := TPanel.Create(Self); + with APanelAux do + begin + Parent := JvNavigationPane.NavPages[0];//APageNew; + ParentColor := True; + ParentFont := True; + BevelOuter := bvNone; + BevelInner := bvNone; + Height := 200; + AutoScroll := True; + Align := alBottom; + Name := NombrePanel; + Caption := ''; + end; + + with TJvNavPanelDivider.Create(Self) do + begin + Parent := APanelAux; + Caption := 'Vistas disponibles'; + StyleManager := JvNavigationPane.StyleManager; + Align := alTop; + end; + + APanelAux2 := TPanel.Create(Self); + with APanelAux2 do + begin + Parent := APanelAux; + Caption := ''; + ParentColor := True; + ParentFont := True; + BevelOuter := bvNone; + BevelInner := bvNone; + AutoScroll := True; + Align := alClient; + BorderWidth := 10; + end; + + //Cada uno de los items del submenu se corresponderá con un radiobutton + with MenuEditor.Items[0] do + begin + for i := (Count - 1) downto 0 do + begin + with TRadioButton.Create(Self) do + begin + Parent := APanelAux2; + Action := Items[i].Action; + Align := alTop; + Tag := Items[i].Tag; + Caption := Items[i].Caption; + end; + end; + end; + + //Rellenamos el menu Ver con todos y cada uno de los items posibles + copiarItemsMenu(getSubMenu(Menu, 'Ver'), MenuEditor.Items[0]); + getSubMenu(Menu, 'Ver').Enabled := True; + FActivePanelSubMenuEditor := APanelAux; + end; + +end; + +procedure TfPantallaPrincipal.ShowEmbedded(AEditor: ICustomEditor); +var + ACursor : TCursor; +begin + ACursor := Screen.Cursor; + Screen.Cursor := crHourGlass; + LockWindowUpdate(Handle); + try + if Assigned(FContenido) then + FContenido.Release; + + FContenido := AEditor.GetInstance as TCustomEditor; + with (FContenido) do + begin + Visible := False; + BorderIcons := []; + BorderStyle := bsNone; + Parent := WorkPanel; + FContenido.Show; + Align := alClient; + FContenido.SetFocus; + end; + finally + Application.ProcessMessages; + LockWindowUpdate(0); + Screen.Cursor := ACursor; + end; + OnWorkPanelChanged(FContenido); +end; + +constructor TfPantallaPrincipal.Create(AOwner: TComponent); +begin + inherited; + FContenido := NIL; +end; + +procedure TfPantallaPrincipal.actAcercaExecute(Sender: TObject); +begin + with TfAcercaDe.Create(NIL) do + try + HostManager := Self.HostManager; + ShowModal; + finally + Free; + end; +end; + +function TfPantallaPrincipal.IsShortcut(var Message: TWMKey): Boolean; +Var + ctrl: TWinControl; + comp: TComponent; + i: Integer; + Begin + ctrl := ActiveControl; + If ctrl <> Nil Then Begin + Repeat + ctrl := ctrl.Parent + Until (ctrl = nil) or (ctrl Is TCustomForm); + // Note: replace TCustomFrame with TForm, check if the found form is + // self, if not, execute the following block of code. + If ctrl <> nil Then Begin + For i:= 0 To ctrl.componentcount-1 Do Begin + comp:= ctrl.Components[i]; + If comp Is TCustomActionList Then Begin + result := TCustomActionList(comp).IsShortcut( message ); + If result Then + Exit; + End; + End; + End; + End; + //Result := inherited IsShortCut(Message); +end; + + +procedure TfPantallaPrincipal.actAdministracionExecute(Sender: TObject); +begin + // +end; + +procedure TfPantallaPrincipal.Button1Click(Sender: TObject); +//var +// i : integer; +// AModule : TModuleInfo; +// AVista : IViewInicio; +{ lCLG: TdxLayoutGroup; + lLI: TdxLayoutItem;} +begin + { + for i := 0 to HostManager.ModulesCount -1 do + begin + AModule := HostManager.Modules[i]; + if Supports(AModule.Module, IViewInicio, AVista) then + begin + Exit; + lLI := dxLayoutControl1.CreateItemForControl(Button2); + lLI.Caption := 'Hello World'; + lCLG := dxLayoutControl1.CreateGroup; + lCLG.Caption := 'Test this'; + lCLG.Parent := dxLayoutControl1.Items; + lLI.Parent := lCLG; + dxLayoutControl1.Customization := True; + end; + end; + } +end; + +procedure TfPantallaPrincipal.actConexionExecute(Sender: TObject); +begin + dmBase.ConfigurarConexion; +end; + +end. diff --git a/Cliente/uSplash.ddp b/Cliente/uSplash.ddp new file mode 100644 index 0000000..4370276 Binary files /dev/null and b/Cliente/uSplash.ddp differ diff --git a/Cliente/uSplash.dfm b/Cliente/uSplash.dfm new file mode 100644 index 0000000..3f2e8c3 --- /dev/null +++ b/Cliente/uSplash.dfm @@ -0,0 +1,1116 @@ +object SplashScreen: TSplashScreen + Left = 760 + Top = 322 + BorderStyle = bsNone + Caption = 'SplashScreen' + ClientHeight = 275 + ClientWidth = 452 + Color = clBlack + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object lblTexto: TLabel + Left = 11 + Top = 256 + Width = 3 + Height = 13 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWhite + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 452 + Height = 252 + AutoSize = True + BevelOuter = bvNone + BorderWidth = 1 + Color = clBlack + TabOrder = 0 + object Image1: TImage + Left = 1 + Top = 1 + Width = 450 + Height = 250 + AutoSize = True + Picture.Data = { + 0B544A76474946496D6167654D850000474946383961C201FA00E60000FFFFFF + F78947E46637DB5933FEA85ADFAC9DFDB565B4B3B3000000F2F2F2544E4DC63A + 2AFBCA9BEDEDEDB52724FC944CEA713CC6C5C5E3E3E3969595D4D4D4FAFAFAAA + 2824F28042CB412CB26862DBDBDBFEFEFEFCFCFCFE9E52FDC375CF472EF6D0BA + FDE1C5282828F3A57DCE67589F2925C5564DD88F80D8BFB6FDEADAC47871D34D + 2FCB9B93FEF2E6E05F35D8D4D2FFF7F0C3453CF9F1EFB24E47B48580BF2F27D7 + CCC7B73A34F4905AA73C36EB8E68F3DCD6FEF9F6FFFCF9DA7D69E6D6D0AA312B + FFFDFC878686C0C0C0FFFEFCFFFEFEFFFFFEEE783FD7D7D7AAAAAAD6D6D6A2A1 + A1CCD0D1F5E8E6D9D9D9E7E7E7D86347CBCBCBE67750CF5440E1E1E1E5E5E5DE + DEDE999A9AF7F7F7E9E9E9D0D0D0D75331BBBABAFBFBFBE76C3A6C6A6A000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000002C0000 + 0000C201FA000007FF80008283848586850D58001B8B1B2D211E212944873D29 + 0C06999A9B9C9D9E9C1E3B09A30958A4A7A8A9AAABACADAEAFB0B1B2B3B4B5B6 + B7B8B9BABBB6580D89A5C1A6A6BF1BC412A51509BFC0AB58A6C9BE87D3D4820D + 158B00448F9121444687DC1E9AE3E399E506E6E9EBEAEDE721A4D0C1A9F2A7F5 + F1AAF7A3FAF3A8FCFFF9F0D10B38B0A03F82070DDA43B850A1C084101B467C28 + B122C58BFB183E94C71161475FCDF655C0A26188060024B924A902200195081A + 122853D860542245D572124A948D1B03062D06311A642485BA4F48936EF29042 + A7D3A750A34A9D4AB5AAD5AB58B36ADDCA751AA3678624446109A0C190245A12 + 6C7882E4A4D0A185FF36C80550418293525BAF2DF2C914E7060E707B405A778E + 9DE1C288092BF6E02168D7C790234B9E4CB9B265AC7305CD658477A8132D5904 + 6539C0E549852C4AC6FA95CBBAD1A22E1500D375A2C409CEAC898A888B14D418 + 96CC002E291D3E9CE9E5E3C8932B5FCEFC32A3E70938A094102181E80307AC03 + 109BA5CB21D6CF4776E1207D7C822CD8F25680018941371874B36807602408A4 + A3C4F3936B0ABCB9FFFF0006282064990D554A1651482088044364B7A0164F0C + F59784706DD0056CE409F2DB061558D800573018E51E6F589CC6932044C08089 + 7E2C2EE54D54700D28E38C34D6F8588C9B7521171651582108155C704116154A + F8280860486ED608FF6C3A32225D23093CA181135B59F29307EE850003164F48 + 709B36C2B52866243CD868E69968A679A3848B54A04559072CF126004A502001 + 36496A36E1915D94F8DC5F19B6640512545099150F2D8CC858243048A04115DE + 0DC2C3609910A094A5956A82A9019B768A257C6A862AEAA8A4C6A5194A5D2471 + C59C4F44F0E1918D3C471E6B1792F7646B82D849051212BC7AD5362128CA4008 + 2134E08415D111C2837B62362B49A9D0462B6D7331C24A97065C4461CD151320 + A11907B1C92A21B8E1BE35C8104364011A29593DA228632158316816D586D929 + A7F866AA2FBE96DEDB2F39211401D573A72A998DC16CB27930C10B67D370C20C + FFE970C2A73E5C70FFC4AE413C71C615636CF1C7126B2C72C71B83CCB1C9089F + 4CF1C629B78CB1CB257B1CF250B2C115C5017352B1C4045A7010C58705EEF957 + 051DE20A5716494C908404F255D14068561121587B5862F9C30E4A54F1250096 + E0D76C7E917C33EDD864978D9920B1390CC0CD142C82C412574431945847162D + 148642EB284802074C70859D5D6451937C5709F62E6328BC306803910EA222BF + 90FF2B79E4944F8E29083C8063F6E69C774E08877A3EB9F612866A10E7108638 + 088074CF5D381E787A4B2701B70764C1C132593C6185E0564DBDA8B0515041C5 + 6F85D8ABE9F1FBDE9B3CF2F832000325016AEEF9F4D44BE5E4EA1A6A9144DB00 + 5031C1041110F264FF035C40CDC8781C3489BD6C286541411514687B5EEE0938 + 410115BE4E15ECA2FC3360C30BF84BCF208810821154EE80964360E480128400 + 112108D2AB9E0427F8165CA1A44173D202B794B037D165610851301F925E3708 + 126E6757853AD0D312E0A5F765616B4F0156D5DC434306FCC04EC41B600F3091 + 40E5512E53FF0222E418082018C0800702A3A01225C89A5B71E1006EA180DFB8 + 97002E68876F5198CF84FC44A141708002EAD200FE46818C98B84426EC8B8A0C + F9D7BF1F2001528508C2257AA8403A4A8E00921B560FFC1384478400894B0CE4 + F4D867969508220A7E730B16828484100E2102B7F10ED1C2B519B87061090DF8 + 594D98B1C22CD04BFF4F53D98DB0B084022B38A101A213040F8C52C756DA1172 + 8CF20F370226C85A96AA5AD81B8A590E40054168F06F1A7AA2133880052D1C20 + 3D484A5FDA1CC63E2A706B0955380F1686E7B42C54013D47B2A0538CC01E367A + D306F29A8FA42071C77EE19153E7C4A339D7894ECBA5D3004049A272D833022C + D9F29EA4BA503645D320232172091C6C490470A6962A6800416DB210FAE40218 + B9E88D0A49039F2904F78B283DA1261DB215C39E6225C68C125E28A002360BD1 + 4D579AF49504D0E372B8918910E0F3A568020F5CC8579A5C2DE10064C1020522 + A0856B48800356D0800628E0AD1D35341BE03A9215FA9645C17989191278825A + 145AA286E2B21A89FF3A9C3751800C5C268A5FEA0CAB58D3495676AAB39D6135 + C00840E018E4D093002318164CE76AA3BF0CA28A497895F6ACA8A12C58011933 + 69C045ADF00B2784E63634D38C069090055799E2095A8866039C16A11D15AD4F + EA7B0A7B68F8BBCE322002C333841C1980D2769AF6ACA82DEB69E1D9D6CB4C6A + 1C96922B5D672B20BD01200B4FD44E14AEA0BA2EC8042574F1ED0B9191880668 + 41418B904D8716A401532AE119C8D22905E6F7A48666D4A1CB758AE1BCC9C69F + 4456808E1BCC58C74BDEF29A579DB2BD4C37CF1A821D48E60B0888AF7CE74BDF + F90A410863BB821014505FF9DEF70AB43DC4139EF82A2E28ED55F0EDAF1088A1 + 357529E155B34ADFFFDEC4581BF9FCE20982439015D2D69A0AA00F00AF4B2535 + 2C41358F76165E3169DC2012E581D4BAD3ACAA7571E4CE19B6CBC811B6788C44 + FEBA92E0FEFA98BEF82595167AFC63FA7EC17342408002A651642EB4E40043D0 + CE100EAC210AF85804C7B430157EE624EF5868107D4382294F731E66E40E9515 + 04714663F594DD70F7773688A68883C380119CF7CE78262F3C9F6719E1847504 + 2168C27B8B4CE8F88AC02D6A4A72A17DECE4B27141BE4B3E4491711A81A11878 + 09DA69C086893CDF4A8F820A5AD0C050F4965D29FA8D0A36115C02B416CDF450 + E87C8D535835BAF9E6FED9E0078C9B332BC58AD63CFB7AAC2A9D4C8A7818561B + CA60D08B2EB20876FF5CA306F037D93E46DDB43440E4481B62D2E5997212B453 + 05D000C00AFD1541149ED100243C972EE7CB4C15B8B5AAB22C63939A1E8517D5 + D6A64855B21A462082516ADDDD1744079721E8F5AF074EDEB5824A323000418B + D35A005C231BDA3E0EB2991A200288FFD848D0E2B49299FC632E6C200257C0B4 + 2034E06D41685CDC2D51021220BC3AD0B5A40A8884E4282E1AA50620A31480D9 + 108E2C848DCDA4F110C3D62A77FDA704711222E00227B8D2CFE9BCC9186EBC36 + 343A57346E71F962BC46CFAE7A7D4500AD2BF8D8DA8598B4062029082BFC8C10 + 8FA62FCAA58366D089AE0BC71AEA33B0E0C928B1B026D2C18232ADFA16D808C5 + 35D3E0E6FEF8DDBFFFE94E030468ED803A158F47C613C0F1905FBCE41B3FF9C7 + E738050D844C11E6387903349CD95BA1BAD6254E23456BBDBF132095E9EB0B76 + 4214390943313BD45A0E80ACCB575B1D5A8D5D05518537FE0C199E7C1A16A2AA + 97D5FDDB18D7758D3E09B6FB4A0C9EF01EB50112602888102CFDFAE335809634 + CF9EA4A7F407D4D78AE8ABDEFA0169E1F43F2E3F9A564FDF25E3B2C8A893C01B + C5978D8ACB77ED95944E7AAAE0A8E6CA07C3E711254E934372715D05382B83E0 + 61DFC221E0553CF7017D8B62031A306782406C91477994A7781A68791BD8811C + F8811E681C8F610976968196570056107E59317EA41705EC575F36627FE8D75F + DA222A2F0869A034FF1793D62BF3560D32756FAB636021840C74B70CEF261FAC + 0317B1D33A1E462BC8341E58A06244416B10187DC87508D6877D5A785620F018 + 46F055E5C50056502691C1828630014576750212058BF605D2B65F85467A6972 + 83F1656D06B30889F024BE204DB0722B71D11FD53204DCC20554404C733712C1 + 001E85702BB8022E80A2231ED6210A6808AB5485DD7585855004A4E5819C0882 + 9ED889A008820C90395CC1030A078A9E27015238753F2687822083F5D5683AC1 + 05CF2602AE480849F0820A200435580DE3275FB23808BF880047460D0D200454 + 678BA9F7141A808C57765F3941871B476FC6E72B7B981E73D27C82705FFDB58B + BDD8007073053EF2FF0CAE131BB051212E088B08200427113439A777AFC32114 + A82296B828216003A06704826182A1D88F9FF881FC68798DB1475BC1799D9852 + 3B003D90618686607BF4D568E0D65F00F68222900486208DF70760D450681679 + 08EA5887F785688560050ED98A39A105256992859092457664CA007F65612499 + 819190C605A7912D1B300A5D80868C567B4526717F021BBF712BFA44520F588F + 1E0002A04704CBF28FFEF8944E0982ACA515FA080201B98128900211C4632AB9 + 921D37723E16373ED69187F491E9077A6CD892D4C093BB788B86E075102702C1 + 480870199785609645A600A3B0014D764899110578F97523A10CBF50013CD95F + 491098FE152B7F41FF42343389472774D0676C875004A678955109959AF9780C + D01459D1032DD062A1B856A0177A5D490881598311595F5790925C3708691797 + 6A080087E96373A215B5097173090049707A60C7923FF60543D16415A001C8B5 + 01B109710A702135512275B975C95683E4625549089982408548298652471F3B + F4781DA081DFE99DDF399EE2299EE3099EE8699EE4B99E1D00681428158FC39E + E8690028509AE2779ADB5864AFA2013E267A12979655B76C85F08BAFA915CF59 + 7522D9003348968AD98D2D91009396008D03A0E49793FB909B5AE77E35935007 + 934AD88994F1127E4650409959A2FD189EFE08145961141D88A29667004A3919 + 0C290849009C0850FFA0AB996C464271E8578C8360A3EA4715399AA184409384 + 666D36DA5F5F90877D39083C8A7E42703B127AA0A7874A7071541CB042E0B56F + FC930EDEE4A5DD1513D4B089E759A6667AA6689AA66ADA01910041BD53406BDA + 01F4796C0F3783D30800FC096DD666A484168C8A2987C3485F8896A48B268BC0 + 09605CA0988DD6A0ACF7244DF6277CAA6C2345A55A077BE99324393754A8165E + 9209810C0002DB2908206067EBF9892EBA9927BA8104C0569947158962AAE049 + 9A326AA7C03808434A681D09A1C15976C009768AA991C208714672AB44FA8A3E + B68C2D11981A49A84606620AFA957FF1AC761A641B40A95527040548497F317C + 38C49DCF570E8C01FFA6E2BA285E0A0FD46003EA19A7EABAAE680A68642815F5 + 8109EA4A9FA17A9FB45AA0784A68C5C80512278D6469723FD68B7D3AA010E716 + 040A60C74868AF8297029A9FF1755FF775758CDA7ECBC0018F2A1734F9058BD4 + A0D980A15A7764D8459D87C83529709448E9517F440D56C9AE2CDBB2E7995207 + 17157DC400EA0A57315AA7E8178CC42A5F3EEA954AEA911137088A4AB0D06624 + 8189AFBCF97AC61A9CD0480DD5228D914698DA017F4FF28B130018A7A1983568 + AD9046728A09B2C9E53A44C908D839AEEC10AEE4BA282890B2D38002E9EAB270 + ABA664321524B8AE733AABD35A0879EA63A027ADF5D58B45FA7542ABB48410A8 + F375127E1B8B8610FF984136B1862604C0DA832D01B5CF70510CC5975F2908CA + 660CA5B0933F29085C7BA3B69A971DE31B3A022E1CD05127DB5D2140908780AE + 6F1BB7B2FBB29D3915096700EBBA56745A86793B92BB7A08144A5FD3D09BE136 + B83F16B90060B8560700E747ABF1558CCC5A5F5FE02370412415208D22E01DE7 + 312116DB718CB0B712D92722A1960010BA1A2917C0598C48B224E7381E2C6618 + E810BFF07BB6DBD7B6B83B9E0FD001F9BBBFFADBBFFC9BBFDF09C0FEDBBF018C + BF03FCBFFD0B68537109E789C0FCAB7828B0BB0B897E0A00B88300BE4036BC57 + 360DC13B5FC61BB4855BB049EBBCA25BBEE867915D400550E4B00E7A48B10118 + 4D9A9CF5651B4F93FF081B90BE8CE0B1F2D50080E293FDD908EB1BB67D8205DF + 3AAE687BC4DE342CEF6A083F300223D0C0B34BC0EA2AC0650AB3ADAA1382F1C4 + 50DCAE0C20C18FA1BCF3F50542309BA33B96D360AD41BAB308F0A3A41BC2456B + C2246C6D8E8B989AB6370900B5D9900048D0508F3AC23E8688D6A416E3270272 + C1B5849C3E8C307EC2D9446F012E258209F21BC9F31BBFB1340D565067079CC9 + 0E9CC905DCC952BCC90F0CA34B9C13893202A07CC029D55A5F8C9F5081C1F365 + C18360AD485BC6FD15AC3F86B4608C002711BA1657A01D2CAC6511055984C7D8 + 03498CD0A43A1C5FC454982CCC7A8290CC08D09880317E0AF083DF121B44D3A5 + 698BC4DADC5D20E0FFBA8650052870BF025CCE06ACA6547CCE9FACCE54ACA24F + C1C0EABCC5EDC95678AB6055A1C664ECC76AC7C13F3608D08C00B7390D81E923 + BC6C97B0D9A309A0054682C7B602006D8305C48905D03C496EDCC2869C5C89BC + ABF9672B2FBC0192FCD1935CAEAA4C085930AA9A7CD2A79CD228CDC9F5AB1370 + AAD2FB4B000530D2AC08C253E1CA3BCCCF3EA6C13B7D48479A13457612C44BC2 + 7A9BCBF78713CF80C7BBC77FDDEB630750220750645472B93EFCB3B479CBABF3 + 24BD9A31E481214B12D2E00AD2F11B4FD39000A7C8CE68EDC9E6ACD603CCD608 + 3C029E590D45B0436DBDCE9DDC995B59D3F62CA4FD3C0D89FBCA87207A60C791 + D46005030D00324CFF5FF61915FA657189200177A2D41C92194DF60CBF2C5F16 + 091CE47BD181A2C8D984377F92CD603DDAF2DB990A590809F00205400030BDD2 + ADFDDAFD3B8AF254099700DBF90BD757CC95362D15381D5FD580973DFBC1193C + 0846BA9B00409388FBB95DA15F849A16DAA1D4C42421D8062E9B8B8B45A691A1 + 0B624341CD9A31C4A2E3241C60C4616DB61FDD99314B0858F0029B68DBAEDDDE + 301D09E04C892FEDDEDF196C13BCDB51A1C6D5208DD246DC17470897DD7E1D89 + 488B66B44516D080F9B8423001426074B908B1F285ACC79D86B082BD41A3B91D + 37121C60A357A04B5A0BBA58AD3E8AEC50E0823E8C8805623DDA898125348D12 + AACDDA0F10E3321EFFE3FA4BE3325EE3FB6BE333BEE339CEE337FEE3F9CB004D + 30DB245500A6ECE3487EDB2070DE7A5D5F6EA913BDBDC6D410E5EB38725B7D97 + 242CA800FBB909DB978AA936D2D88E20FE634B6005F7558398EBD4B071BDFA8A + 9C8AC9757291CC5CC73EBD2ACD2176218012DE29BEE7E51AD78590DE36F0C430 + 6DE3F4CDDE08DC012D6D08B57DC084EEC0308BB3F675CF7D4D0D46ADB8853004 + 593E5FFE44C23EC2E1689300E3973105FDB0C3D971BEE50BCE8B5F7FC1D9DBFD + BB05D844836921E8B0E2E450EBB4CE187E8EDE5660031E800349FEEBC01EECC2 + 7EDBB93E08F671E4C37EE3B5CBBBF8DDCA93EED7732CBDD350E9858668D10EC2 + 34B9604FC0DDAE91FFD8200CD13FF6D47817A9B7CCC38091DDECC3DDAC512EB4 + 6221A4FDEEE8905E85701A3B30CE3D8EE38C7EEFFFDBE828ADE3FAAEBF309BD7 + 2AC2DAFEEBEFF82EE3A90CE98BC9D73D5D0DCD1BA0C678EDFA4A080F7F7A0DAB + C6D0764CC9F56DC9F6057D5201C4393E123F5FB037219C5DB51A9D738C9051A8 + 6B05EED0092F8F14E3E05287703B1210E8389EEC3ABFF33B8E036B35CA74E6EB + 3C8F03CB7EDF7B7DD3CF4E0DDE4E680D3B0D541E97FFDACC55D78B1B40EEE176 + 1A20567F8B260225A2AB4E0D78015E68203B2172AEDD8290BEDF3294CAD40066 + 04EF6E8F253D70DA9A112536C00042CFF3783FF4453F082FCDF3ED59ECA6D9EC + 4FA1DF4EA10573ACFF008B5D9676BAA4D310BDACF977CE66F14517290DC5A70A + F00C69DE5FD246304BCFF4A772EE589DEEBF3B420E556E5382056063EB8BA109 + 9D19DF7DF5022880EC793FFBC34EF47E5E04A39AF7386000EEC5EC47CFDB491F + 8D8556915011F95A279739E1F8984D0891A201122F0248606F2AFFA484461E20 + DF71B3C2F9D1EEA30E55AD45D67219FD75DC8B13A42025A5F0F6F05EC9F3EE57 + B94FFBEE3FEC20A03996090201ECF70A7C4FFAA58E621CD0500108430A088485 + 8687085F49008C8D8E8E4922889389568E5D8D5809429494428D1C1B1515581B + 1B0051929D845D1C1CAB5CA15DA700B49CAB840A5C8CA7A6AD579D2200ADA65F + 9D5FA2B3B54B561CFFAD5D561406D3D4D5D6D7D8D31E0C308F8C155954360538 + 0F01E6E8E7EAE9ECEBEEEDF0EFF2E823213C001C2D05F1FCEB3823208C781B48 + B0A0C18308132A5CC890911021AA107D1132A121232E42064D7AD8C0112D2C12 + 9474C4B7242325115F2AD6C2B781039650A61A99944891D428971C3CF6727593 + 96C35B87265AAA658A9632831BB0BCF4D98869D30813263C61D4404B1600063C + 64DDAA551B576A5AC382A5C6A0C5400E0DA8BCB031E2815B746ECFC57D2B972E + DCBB75F3DA7DBB976F8711667B846030B730DEBE3840F02862B1B1E3C790234B + 7E1C9356052B51A60248A04443824C0D12E45C89855751972B7BD112A594D4B0 + 2E5D9426985D8AE8FFCEA2A65C29EBA5335453D58D2A8C1EE88B542B5EBC86D3 + 5272658216AA1A2830E290ADBA756B29043EE2904002851FFBE689EF477EBC79 + 80457880686BBE5F87022D864F9E4FBFBE7DFAC07B21A130B2CA90034301F084 + 135694D612310950810F07C6E1635B230D649145030D60418A260984F64402A5 + 11B5520547ED340A6EA71D981B53AAC1D69423AEE8261C8830C9C25B17595CB1 + 08231428F1D94A5B79E5638F4076156456F678C360164EFCC04007E51D66D878 + 73B537CF031EA4C0C3927A49890E0E0CA4D0C37D608629E698D339C508663B36 + C04512557C43811656B574A070392191401715E4B6D27015282181151A6812DA + A00964214187B58CFF760A883199D6529E2DCA694A050BB6A2684CC215D5946E + B9E5290A9D4985225C86495115C58EB25077DDAAD93010027109008A0239E604 + A08EADB5DEAA6BAEBCDABAABAFBDE20AECB0B632B0C308BAFAFAABB0C2FE0342 + 3764462BEDB40AEDD448AC118C24C1010748C048164A50B0C110898A92D4B902 + 46500B262D3978D1041A584561031B3ED1800459ECD8A8A600306A5BBB27E236 + 9D70C9C1C69485AB6D009B2BB43058599E09B48461C45469A14126EEB2AA7135 + 1E7810420FDA399240154EBC8002015AA6DCA4CAE700C424CBED8CC00DB534D7 + 4CF329BE0180458E23697000176D02A041671D5AD1004E1666DA00054E2C5A4B + 05058C9082D013D8FF580587F4664821154A498AE2A2473D521446135DFCB487 + 071A3CE96E78CE52193EA5E58C49BF09B8D6AF164EE4746228A16CECF7340C2C + E60D384E3861830EB92AABF8E28C37EEF8E38CFFD501E494DB3A820C3667AE39 + 988D62A1859D8C50B144B68C541141BE8F44D10AA81538A144877A6F36C30028 + 2071C0121254C0A104096C486F1679BEE8364B72CFAD9329147CA180F25CBC30 + BADE8A8ACAF06E0CBE0453BB0C3EA8731211608F848EA0CC1223167FFBDDE597 + DB35E044BC1EBCBC723BCCC23C6C3AC2BEEF4EFCE87460D6E6FCF71F599F5AA0 + 1400ACF0B30E65210A013ACD66A8A0B0962408512C390516A0B005105021502E + 914DDD9EA089DB30FF2853BF19866F1206938C1CE0325498C00C686026DCE4C9 + 6D7C9353CE5A02934650200251305016B4D00012C5A85F597802AB08400D225A + C78806A8C7FE3C122B2498AC00958BA214A74845CA8D6007FECBA21657E491D1 + 244003A76284EDB810B72744C10907015EBF34E1A8D83168062B4081A5B02083 + 266021364AD1C9A64C511B9C7DE4368C509E821831812F208338C9A921001A70 + B505254C8059A0C0844A53812A0C328623D4C48654553E566D230541185C16A2 + 039EC955F194A84C25E37050A42DBAB27F39634402F036120A1C20021DDA4F02 + 1B51001DCC0A0A05888D154E600228F800041E02C00F54E003127C20062060D0 + 0148B082154C4107FF3DE4C20958B09913F8A0099A52424652A2B70D70C19033 + 908A29969001E50921035128E4F22622818758A20114C104460E0080732AE09F + 34C8424B0E20840824E10B07D84016AC204F21886B3A39C9544B28A481AB55A0 + 931BDB06B458142B0A58010523C001E52EE02B92AAF2A49533E9E2705080A9BD + F2A5356B5770BED7A12824210A0284D3554CE3081A7C200337C0001400108119 + 60C0072AC000064E400446D000033F9DC2023020C72ED0600A27A0C10C6EE083 + 0D5421071FB0C10196EAB60D5841791310C21776344E1A8CB387F29C2754FE39 + CF067C2107FCE4C23F9B96915D4C40011328890284100A21CC407983E50012FE + 49917F6A017B20AAFF0516AED6002B20015F18DD5897BC218A2AE0CD060CD001 + 4A474BDAC7E1C0005884A96A6F361A7501400B4B50820D71DAC5153D75010590 + 4001389081A332A20018584013008082A9A240144605C12C7E60210E44010326 + 600C0A304082194C01733111C41742578A282C8F8141C808375BA2BC005D4101 + 2C64040B14B00400FC55018B50DE553C638A27FCB334EF4D4216F8D9CE4F00E0 + BC9F90A92822F4121A69800A0D30001117ACE00633F8C10E8E30843D26381665 + E17B4E00A94849CAE10074F8C31E0E3188472CE21293F8C4264E318A4D8ACCD5 + BA984C325D2417B8100559C66B47EE2A532368B00012508A0332C8016E19D185 + 19E0360B42A06E52FF122064398EA20A28C8C0564D30371E2FE00431C9C913DC + F9025E64C4BF00108402D8F5CF008D93162F581E07063BD82A2C8F160D188221 + 153083CF9CF93358F8671296B004E56D77341588D0D142818508DD29B31AFB24 + FA40D11D2468C064C84A694919A75265A9F4D227ADF4A46D85695B1520942F0E + 757D70D6080920E1398BA4821346C292950C84C727684415625083D40220030B + 60013E71DB8A04CCA006CAADC06D7DC0820598406F365800B02B738A04BCB7BD + 1BC8884A00A084E57DA60BE58DC95F85B01A437A570B6A3D007C4DD1507F162A + 238BD05D03FEB904BA2A2003D3191987A633AF5E48F8DE10CE37BE15BC8D7B6C + 2701AED3025B44AAFFE282AFD8E0083FB8C20DCE0019805AD410478AAB6BEB08 + 0944210B39E982C5C0781562884D351BA0410DB8598B06E4E00628809B9159C0 + 812FE41A365868B2396F10831F6C400340A032233250831A98A0613E11F322BE + DC8808FC93525DF8A706E474665ED080CD0D48C2F274B1010AFCD306A2283392 + E11B680A292F024D6842BEDAD48508798A3BF642D40610BDB1102CD1115888C6 + 0B9CC080907698D325C6FBC217AEF78487B8EF0B979ABF234EF847180F6DB1DC + 800422A099D752800A5A984A0E27BE2F678402D644E16D0D7CA01414DCA0D61C + 10B90FBA2003147C01D80060C1E60758801AC42094AA67018F0B609A2A247480 + EF46C5F286226D22FF97B7117F3D641536607435BBF99F0AD2EB27A820E68EFC + 950594DA4002DCB99221BC804377E263DA7392B37DEBFBFBDE4F620836DA0803 + 33CD0628B880FA3DBC7EF573B8FDF07FBFFCD93F7FF7D3FFFEF6CF7FFCDD2F7F + FEE39FA56F577885476ABFF11156C078D031045480048D9700D2E10C09F32879 + 0200425003B1460B43D07324900139E0002A60214B50031E98035A550305B001 + 07D0732A805716B00015A0011670033220014050033FB0123FC058CA73050EF1 + 4F73A6003B95740AB074A760742831113AC358B5F00528610A69C66652A7004F + C00119D15EB2246E3AA800D0E71B15F0041BC22E0F320D48046162187E635844 + 0D5625460212FBA1FF012880037BE77771388772D87E26865A21238003D83021 + A2057E523A07A8058D94283862208F0442FF350527583A585000404573272003 + A320035276032420012C6002B4C70395780209900126D0002C30053EE0542670 + 028C217D6AB53C42D0215DD0678C150559A656DEC20B57E0673CE85E5F402E1B + 705024B7010DE56C5FF00258D067B1E0200910017336114F901B8C241AA0F036 + 66388DE0C7600CB068C9D10043E3045A50001DC07FE0188EE2388EE4588EE678 + 8EE7A8038AA187EC381D99002745A305511046E5276BF49828CEE071A7C1185D + 900437F512856613B2410A8317048A220305697932E530102831A5C02F49117D + BCA12934C41A9032FF91DCC70BA5904774137D30D46C11331B13287D4FA04632 + A427A7007E65588D68B8920D6600E7E30DDDA10434091E70887FF1877F229693 + FA577F3CF9933E1994FF5716ED28803EB13314004943002769E22E5870405490 + 9169E31372D20851B0045730041CA20917323257534ECCD640C8419545213EAE + 80780AA328E52730B9A1365EB3304F83331542303A5305AC0643A3C10108B61B + 5DA72FFFB21A58410082A9608329980B569885498D2FB9598FF094D1A10419A6 + 033A808E945999967999E35800B656942FE51439D300A7D621FE31041AB0530D + 60506D921608040AFD62293E213758703B4940055D301BA1A135B35180FCE230 + C8F1200A131B8A64FF2ED381270C537EB1B33759162226720A599004B75797B4 + D99BFB4221D9A7304F8930E5A21CBCC192DCA99855828D7023014E400148005A + 938999E8999EEA697F8901038CC199FC63267B72145581044513014350208CF0 + 0443309B2868054AD07865E9290EA248D4A90196A03B4A8121A101238DC24562 + 0998AB713D2C123B9947A123444333448820F70D5A40630A9A161D721B314123 + 75D30BB4119654E90D8AF97D89996F89D92579880F1DE5516CE16147700139BA + A33ADAA33CFAA33E1AA4403AA4425AA4447AA4461A0082079F59849C8E900511 + 80468CE0045C70004103005430634B9713AEF31B1F743DDC470B00D73B115037 + 77C40439C4215930FF7C2D519254204058403A006097DF10054C400B24933B67 + 42013B420577DA9B09620A4B939B1C20014C008DC968368A77A8DF70A8A4591A + FDD80094724096B001A1511414C004C7F10487F2121A70A7E57410DD39AA66E8 + 018AD1544D81054FF03D4E342BEA97A3AFEA7E401AABB4DAA3B1CAA3B50AABB6 + 5AA4B92AABBEDAABAF0A1083C7A4369330BD4923AB7937073004236156386405 + 6BD30AD2319C3D51308D30346B9A0457F00C07E08F09C5014CC04FA190044370 + 053D048C8C0A00E4CA084BD09FAE4550E64A484B602042402EBDC904D0A68C56 + 5A0B57B0041473055170054A600A492004FCA4785FA08C35C6014AF0059A814F + D00A0037D412E52AFF01BD70055720415FC004DAF335B440988769988819B220 + 5BB28609B222AB605DF270F1460514F0B24A1035AF7A04434AB33A6AB348BAA3 + 386BA43BABB335FBB3467AB3392A050D47ACB0D4285D30344311A7B7D4214FA0 + 01F1A20147434377C4015570311F4491FD62435C40055570280900B07802B0E5 + 9A1311B00BA6C02DE62A0A428063EDEA10553063697B8B2361B073530513D043 + 8EC004B918010FA11918BB235F800500BB0C4200AAF5740505C521056B8554D8 + 214C804BAF78B0AA2A0457D0214E106025A2478C40AA9EBB6F06E076EF597EEA + E38756F002E470AB419BB3ABDBBAACFBBAABABA4AD64B431154BD1518B09F01F + 5AD0212E4B05E120FF50AE60211B390B143015C1791C8B940481250155A01412 + C00511300A48E08F52EA33CDB8014AE09CEC320443B05311C0B10010AE40E30A + 4C300413D02107307937C705CD681A56B00B128BAF23C105B51866557AAEDC3B + 0479B25F14C0054C9027DC9B047C9304A5D0054EF0A7559004F65901B6740002 + D53A68DB9BC9E408225BC1167CC1189CC127AB4432191D39B2162CA003343BC2 + 245CC2232CB4269CC22ABCC22C4CC228DCC22CE552B44B2DAF89193B9500558A + 048D8019554029B3840FA410917CB34306F22F44760051C105F9321B1C543775 + 93A1CC261FB81129655522D7B3A27A72299BEB28655526A2F0048888213CE543 + 14E2291273A294F7FF36BA29C19FDBC6F7A6868F500132102FE787029379C2B0 + EBB342BBBA38DBB37B8CC77E8CC73EDAC7B00A10331C2DA2920954707154B126 + B5787351C06A8CA02369D95CD28737DFA03D6881B107205B931544A490163D3C + 7115EA28CC06236A830F1F8949992740604A0ACAC10B558CA7CE3912ADB34B99 + 2731F9223E5DD747F2C9101A1CCCC22CCCDFE9115DF004394293A82B052DDCCC + CEFCCCD01CCD445B61876C1FA1BA19F1B2533EC30566D3004A6015C9F18E0EE4 + 404E800498304239736121218B68322F41346FAA7C16EC4295E5A4145D6C2E65 + 19292B111BFF0290B14197451131BC91004B3001F0CB01DC08967CC3122333B5 + 0A236F6A2919273BFFD1168CB2176CD1236BB230497EB59020FB717E05C0CCD1 + 3CD2245DD22C2C358757CDF371969B414B8C1005CBDAA71633A231D22E4E8071 + 2D3134CD1ACEA9469E4E5005C75C01CC3A1BBC039C2EC11BC9E40C68F31B6D43 + 910C22C5F9E81B0EF32810480C0A59144B710A56D0AFF1D8AC0BDD291BF212B2 + 642F0204919031CC689DD622EB31E059761EDC192025D2470001735DD7344BD7 + 783DC2747DD775BDD77DFDD779EDD7810DD8765DD8837DD83A001F2A6D1F1214 + 0548301A5A900401C4088B67AF21B4B5BD208B0774A538331C4AE05954702886 + 5615826805A291966D2336447691AE3627FB521423E9A5040381D553A213583D + 0C0329183248C9C8FFD9D6D22FF422D63A9376AF3D1F6A7DDC68CD988E5049E3 + 49014303522F6CD2D23DDDCD7C458B6D1F56806A0C7C00A826348C6C2F1E3196 + 2BF10411904098603C57E91D0846211262768C0C136737D54C3DCF323422F991 + 28C781D4B2FCA52A4214F64D1473341B75C30858309EACE90BBD2068C45076BB + 1C41C6F3A08E81DC121ECC8A31BAE1192E2FAB01BDC4CC874DD81DFEE11E1EE2 + 203EE2212E05CF72DDF3B10168E4390730ADA5BB539BA1C33A463CA7D00A86C8 + 2EA3F104CDB10401E4CE85F63B9F712286282A744964141A91667C22A991E49C + 151B77729CC3209147592114F3829294482234D65930A2BD23A91C3A3C131CE1 + 133EE616EC311CCDFF1D009A238FD64B7C4DE26E2EE270FEE6727E04F580E208 + 8122AC0921B724A55521B5122C121F4768204480FB89C4004B0ABD733563B7E5 + A77D1A00DD29476130403C0A2F1481C919432862E3551B4B4AED2E2898051E57 + 153B45435E5C681C941B4F79EA0FFACB678DD61D40E6C15C0FC33A0CDA08B36B + AE031090EBB93ED7BADEEBBEDEEBBCAEEBC1FEEBC45EECC67EECBB8ED7175000 + B36EE767E113458E055130D9581A0557FA08A78963A6E1121368E48A2201E62B + C018C23BF9C23B929A412402412067DFBC2C2ACF8027C4B11B0568790BEE4355 + 29ED51D1118BE25A1917A6B5602847235941541B33041CF401EB083F98CAAD91 + ABFA024C4301EB11FF00789DEC7D9DEC167FD8143FE2191FEC1C2FEC1E7FF11D + 7F45E0E9EC9BB22E1347DA040EEE2321C915B0C866D345FF0D43D3F10456912D + 775205F9E23BBC6320DC61C6401C81C9113CA380BC91F53412E5E8476E796779 + 960A33E871136657E05AC2999415C9302E61977A539B1B72F4050FE112FDEA60 + 4F00613FF6625FF6647FF6669FF6685F16168EE65A00B3267302C38EEC745FF7 + 767FF7C64EB4C345F2C4F1A006CC34DF92DD3B052808384A91279D2ED2C5401C + 3A1A40207C2AA9A63D2176191AA8E1400FD90B864891B0AD1452FD1AB631F414 + 39921AAA4891C537FFDC6B1DE1045638813F5663275928608CEA2589CE48CD2F + F591F0B80F932D80FFAAD3812414E0F08F66C7738FF7C4FFEB5EA0EBC75FFC79 + AF8ECDCEF7C38105E1B25350594B1430CA70E2E7DF2029C469A14749050BD8F8 + 7D39218C141AE71C3711B9ED650DE16949A14476CEB98C4956ADA12562DF0C73 + C67724B1D096C5033415BE00084F0D091B0000580D0D5885008C1B8F8C869293 + 9495969404991D99049B9E9C9B9A9DA39FA2A5A3A6A49D1E2030945859485A14 + 144E36283A105EBABCBBBEBDC0BFC2C1BC10C4C3C8C4C6BBCBBD47232997D2D3 + D4D5D6D7D69187B35886591112921A510D935514868F09001C1B1C5DED8F8D1B + 5D924313B5128A59FC0D59FE84D275A9C72E4137481B16CD43B8A14285760B1F + 61A920491B4288F2FF2C659CE42E9293258DD241E4108562030909DA7541F484 + 5021791DB56193498D13AA9B366D86CAA99367CE9D3B0930084129A104255A5E + 2051F2A2808E23C9A21E9B2AB52A55635321E00011049BD7AF60AB39AAD88843 + BA0414A214AAF0240A15435864AD33641640052DE90ABDE3F09021410055264C + B8A2044B022A58AC244820E8094576EEBA547899A02F8777582E6B6E5821F3E5 + 2EF434F39DDC308B150D565253B1F2E449160D4E24AC562DC18A6C2A4F565359 + 1DBB0AEA045C92949D1752429544F0DC25A89200F4CB8D61C3AAFA447DBAF5EA + D8AF4F6790A2C7240E8795D0A260C546011FBABCF852CF7E7DFBF7F0E3CB9F4F + BF3EB3113BBC47DFFFCFDF6BDD97E948400B5C1A68F1160056C8220968923C41 + 0115F144E6D02366B95357164B08A60516B0F893C83F4F7453963C1C88981021 + 0E7556D9440349B6528A294E54818B0F61714012437091E30143688144143AE2 + A8E310491C104512110CC1E3104344B1639239EA48173B7415A2582315342048 + 840CF5075676606A17E698D609150D25092448C10BE445318214EAA5F79E9CF6 + D569E79DF349C1800C5EF6E9A53604FD6508055A546148025168500E00B3180A + 40021A4C82146255BAA8D75A8C3046C10443649605165428729C205542429742 + 1B54B6503B0F71191A462A5D06095F073C512515733D96401692348097158650 + 41913C1548F01800FFBE865414781C56F0CF22118644939FD388D949079E606B + 2D99DC123002032D50D245035620558B1228B0B00C7B02D4D7AE7AEFBE17EFBC + ECD60BAFBD5ED04B5FBC3A80C003B5007F35AD2458A4256216894AF2E35CC031 + C9AB0611A434C943C9A543A55DA78DD3C00659248052220D1CF758851BAD44D9 + 418CB4F34E5F8FCC08A085924558C101E83812CB3A75916A571471A57325230D + BC554815111CDAF13F832C26013F01451BF057DD46BDEDD49B1810420B464CDC + 8006E32921010A6FD619AF7D63E369F67CCF10F5F4DAD74C2649155668611607 + 5544110E00AFF1EC8D928612ADC5A2F39448CF5897B1D300121238810487FF74 + 3C48A873B99397C5FF8237A26A2516BEF30883CAE6E5503C5C50508ECAEC58C1 + AB3C56947358B2857441451691B4162C3A54B8A5C1ED5C1F2781B11612C73636 + D7662B7CF0C4633BBCF1C817AF2DF2C6133F0208E14A02DE134BCD520BD870B6 + AB7DBEDC6FEF7DF7E07F2F7EF8F90A30BEF6E693EF3D040574F5FBFB95D4C581 + 801A7493A6120726AEC13A5D64C10517916AC806A23037BBB8833479A9CBA324 + A0812C2461311E0359165C13107A54892CEC3091417C672A2C5DE62190C9C84B + 64D5052E7C2C246EAB0D237A96002700800B16DB40151C65962784E31B007002 + E01AA18854D98A20145220FCA421B52252CD5A2308812BF2E2B1F1D4E2052828 + 40F6D447C5F355F1FF8A56CC62F8F0A39F21AE4D26B208D1361A6888B8494044 + E2E182135835210EE0A5652CBBD424B830019A2906098300882036369C7AC443 + 59ADD3E0B0FEF3C7D695C8397AE95C59383084709C24848508DA63B0D0121792 + 034B87825048FE51A01C96C38F1C5B076302372B400EEC77CC4BA52A5719BC55 + BA5295AD4CE212CF4205272AE107D82B1FFA76A94BF3A5CF97BD04A6307F49CC + 5DFA9297C344A600A4809F2278B14FA4814E0590B2284429411C1158D45D9430 + 0ED27C6E221B309D5D1048218F0866099F320C38FE719C2C1C2B12D3D2CB6352 + 25228EC0F3212EE32044E8C2017078C3511D3944A4BCF120003C487E91A49459 + E28217454564108FFF3A1D4C9E490D235AF488D991E524C6554B3689C709B9D4 + A248B188C55F92747C5200019F28BA1F4728306F22AADB40D314316F44011D1A + 780B5FF8028FBE60610811418837AE30812500CB632DA9C0105AF2A9A29C3224 + 7CA1CCB022414897E5B354239C5105B8002CB3906B4414498C246A0780C200EB + 6287C01500EA51370038742455B09FA184AA48964AE29578CDAB5EF7EA2D257E + E7354E74C20B227002F3B9E098884DAC620570D8C51AD6978D456C6423EB58C8 + 2236A5FFB2ABC02C66080D20617176A1404E0D710E24AC63035CB30223F47140 + AD128203053A6D3925619A4D71C1301E4A84C708F81C473C952E6EA367441238 + 909631E839812B2EFF074CC844D53682208F7C5414BA8004002C8D1D2A398415 + 628A8E2B4D02A2FE2895662FB1D7F22ECFBCAF1C4512336B882C59A16B88C385 + 142A4BDFFA2E96B2F64DEC6411AB831DB077BCD96044DCDCB90D2504A476675C + AB7878C5D90874040BC941D813D642B946C046098AC06D226001B7C8057421D5 + 908C5431D85A99A54C243C8D10170E54172C34B01B0C7A6405A200A9328ECE54 + 2E0ED61010A6852C50413612589C0F6308E04AA0F7C848762534FECB1627D062 + 162FB00261F375D82A33F6CA56CE3296B7ACE52E73F9CB5E0E3363A550803315 + 991A2FA142046C255D177A63CD70D1C2DF3842908209B0445140C258E0510F8E + 4541CE82385A02FCFF81ABA6227772D688AAE5EA49A1383282652271195599AB + 977AC0C20A070A16871A58B4B5A22424044913826E5B852C54C13533ACDF06C2 + FB5BCD26F9D5B0F6560A8830B127888716DC44D7082070E5C77AF9B1C0EEB5B0 + C5EC6BCBEEF7D75B16000E5010BD334F63800CF65575D31A0536678116C79A87 + 1F07B53150E96D7314F2869C9140010A76481F1C12518530F215BECCE37214AA + 1867F3B9B9AB3E6708E850D6B1AA70A042EC0F2545AB47053430C8843C8A6851 + B8440F77E5BBBA8E97790F80B52B239E4A8AA377BD93C002036DA96616CCD705 + 20676CC841DEE5919B3CCB24AF72CA4F2E729263F9E4236FB900A0A0031474D1 + D9800C09C113E4E6FF2C38A1C765CCF37F9405C48592C76B0BD20616E8780080 + 0CFA3083F6B1AD282C3999B49A1DF3DC60BC85E80896B98864C36124D0B90411 + D7506969C2026A4558D35E2A91A4D304A950539753149C0340E27847F292A547 + C902B1894D207DD3CB4B2E6697175EE6282F7CCC559E65FCFCD7AEAE2A9C3D68 + 6C080944C10A8FF9B363A644160B39C2860401A1022340D424986E31FE608E96 + 1A30B2434747C4969B8C43384709567DC66D7901102311233476B34393ED2814 + 00D41E8FFEDDED8F48E8F470DC11D788DADDC8D8B2B8F48D6771E44D3FEF1DB8 + 7EF2307EAA2738793C824D9717564EFEF29BFFFCE84FBFFA574EF3268C578187 + 06CF9F1B04E74719FF0C83757F0987243F514334E09CF5835BA5B6189F3216AE + F77A236310B24213CFD119B2D27089C4488612341794295D5556451305BC3274 + 1E63080CA204CAA77B8AE07CCF3709D877827CE50129C05E09F1045C836B4A60 + 05D8D372EB5783367883EAA7529AB539428405E7E06690A2057793055A6060D2 + 133897704023C8839491200710010ED121B8E2313A544857770DEEB66888A448 + 8ED02C0C31517A3104679505C78749D6351755801714701C23E20DDE6550CA17 + 4362040B256882117787D9978778B8877AD8877CF8877E18888088879BC07D70 + 51053FE74452760250E00203E08890F8889218899438899658899878899A9889 + 9CA827B446519233FF09E1715687836165245AEA5621C3614F97016187003B7F + 842C54A0059A570187F10F04D812F0938525022DD011439CD12A16118143A053 + C85286FBE404DD80056AE142FA907B76F11B08A27C0AC4013DC46A7578777918 + 7DD4D78DDCF88DDB188EDAA77DAB348EDA020D5D542247B126B4E004E8C202E3 + 778920B789F20889F3C88993788FF7488F98B88F2E700229E03E4344221E480B + 8ED2006E311708364F42054F09941919B1180D61084EE0644EC01C831657BB72 + 121EA6321DD42759982A93612975677B2B23427BB662C361766EF71291326309 + 704D398433A4F328AE1101072065B3603DB42857D96808821894832894443994 + 46998786780889E3FF4488435824E08803C08F51298951898F915895F4889557 + 49955C9989CCD404CEF43E32C18C5AF018DF305065A5056C061975358C312342 + CE52794BA58194E4743EF61A2833169CD7279241171BF45C0E411C5D775C10E6 + 3466A1549D5638FC402500E20F1AD700456316A6B52A15410145A30173353773 + 773AD9688EE0E899E2E88D81C88D80F8997D882DD0B04485A071E4C626B4A001 + 36F026562995B3599B9688955A299535D76CFD415775458478416D77831611C0 + 681681395827692372984F700057B0045A10754F87341C521157B81F7D197B09 + 145543171391E62A6B856FB6F2475A621793933AC0024385C3866E1712C98720 + 0C960E4D45493F79FF7747799F45999FF8098886D88289D88E20E8715339A004 + 5AA0067AA0089AA00A7AA02E50739FF8271F36091410830485040C7614FC1640 + 238956D2821085499011520F11300134E6311D939112D01224138BBFE36EEE50 + 9DB9070F92E7416ED91774B154E1B54FDB3525ED902691924DC3716A14112D4A + 00544E2051ECD03136599FFB999FA4A99F507A9449C49B7D674BE5214550B9A0 + 5ABAA55CBAA50DEA2F7D7262E9603091642022021BEEB408A00520F654113BB5 + 4FAD1344F3A3046A914E41D34E0518432CBA36217939A6B4192D533828391A2F + C15C1AF01F0D012CFD372056E0047DE60D59002B18089F802446A3F4930F7087 + 992A949B9AA946D9FFA9A0FA87A1EA879DAA87A51A71CF334B2D58204EA40151 + 240503B005B13AABB22AAB5159ABB37AAB5389ABBC4AABBE8AABBADAABB6FAAB + BE3A00FDE227FB94003F22220839501B503B0A386809917017947B972262FD37 + 2B0DA03812B063BB821288A07581F98B2D3A487FC9852BD35370DAA184AA5491 + 721817546AECF01752C62806D50D75012904660845EA569C99A4A2149F75D8A4 + 041BA5063B94CFD36C25E27D81A504E6E1030230AC07DAAB053AAC16BBAB185B + B1180BACC4AAAB340702FDA14055201E145101B378561A4701B0681835F2ACB2 + 054F9040920D170F414301024286343608B52131FBB48A4384AD22699D80C42A + 6F694F30F1418D64FF08BAB842E150385E8517D7D4054B7B218AD10D3FE2AF95 + BA8C6B39B09EDAB55EFBB55E9B7DA30AB662ABA9603BB6A1DAB5658B2DE02290 + 158088D633A1577A0252B005761BAB776BB7B59AB77CBBB77AFBB77D8BB7802B + B882FBB7840BB876DB5F370716CFAA050477083F77905AD02996A308B3671230 + 644145011A2B6A9D25925348C035CE5230A6953A1B855C1F899C7CE936CC325C + C3784887D6112B6A3754122AD2B2A3A68228F6AA9460D708FCF60D40454629A3 + 8B97DA99A77AB04589B6058B9F099B7188C88E80A70528C0887E7BB881ABB7D6 + 5BBDD8BBBDD7DBBDDA7BB7503002EE270D42540969C16033561895170154B001 + 1B32BAF8D4111130FF0EE1004FA3213F49472123FB0DB29125203399220160AD + 937553F58B810A91112A399AB155775346070100667798D2354D2814297BCA28 + 45234E3061A95B5B825F5BB667ABB664EBA9204CC2231CC2284CB6DF626645E0 + 83E4361E48F073D35BB7885BC3367CC3389CC33A8CB8505000E35B7B30AB2C96 + 699637D55E085611B7D51082035B6BA62926F275C8951C90703854105B9FD212 + 6784054A505DE4FA4C91007BC2E59B30F341ECF6613BD5102AA92BC608189F04 + 17A28317343B9E13C908FD2ABC7AA1A40C87A9C8BBBC7BDCC7DF1202ECF5B62F + 38A1B5F00336C0023E50B83BBCC88CDCC835AC27321096F1E3A6C367165D9020 + 03651A7346259361FF1B3B8520DCD0123E3AAF335217C981A83EE6041A1083FB + E00F8E4105E2A18A3807B4AAF291F4301015E21C9DD3680CB25C77F3186AB550 + 9F5608509770A138CC1D649994BAC1F6D3C1CF97C2D01CCDD23CCDD48C031EE0 + 5F04E37D713BA15A600307E00353A0B72BB005E35CCEE47CCEE36CB7E69CCEE8 + DCCEECBCCEEE1CCFF00CCF29F5C394DC8608B23588E37F5AC07655E29134962A + 7F76A2E6268406244722410F1AC04015A908ABE738E3C060D7B98BF3549D70DA + 2AF017479E0369CBD56F66616AC461B20CE342943B916EE547FB4401C18BA41C + 40BCCE6C77D47CC2D15CC2311DD362DB01AC90592DEC824E440148F002E67102 + B13ACFE2DCCEEA1CFFCF7FCBCE886BCE474DD44CEDCE2EE00320504F9CA70D33 + B6214ADBCF7331AF90110F90523B71D5218C810809D32531C101D7468417F998 + 4E2701117056D9E8A222E95257252D203442400B133D92484A79411580798F52 + 5DA2354F18B3288CA0CC1AFC121CCCA435DDD88EFDD85E6B2699E52C2F683D31 + DC14428DCE2B30CF9B4DCE9DBDD9E5FCD9F2ACD99C5DDAEE2CDA524DD51EE897 + 11906F80C1BE9DE7A61DE13FB8C116CCD1120D30C41D3AC0F4D042F8B3869434 + 68A28C3014007F134DD127930EA56C2A5567A3F4606F30C1057F83111B906012 + 9C632DC428A855B23066055510092A8DB52482C702EBC1907DDEE83DCD662209 + CE02CB1E35A1B774FF1E5030DA4E4DDFF42DDAF59DDF9EBD020370023BA09AC4 + 524BC189053FD7C06B0548A7FC0D1BB22BA8474956506D484867CB2184B5E0BF + 003108B4B8D52379DCEF1355EA30192709625382CBF7CBA6D272007165286EA3 + 5616E455AC1729D565B207F118E422225A90C148BA018B8DA901E0A93D9EA93F + FE00413EE43E5EE4406EE4428EE4447EE44C9EE44D4EE43D1EE438D00149A41F + 594205E4663D4A20580570022E00DA601EE6623EE6645EE6667EE6610E05FEFD + 1DB0913F3EB2438424BBA912013D16751AB718522601EB26115D8D5A1260201B + B247BA8505B4D8C01DC4E14FD31140CB210264E2D6894FC785BA73A392AAB542 + 420362FC062CC1F9FFD78304176CD7AF47AA2C2D2D4A2F8D73E97DEAA81EC254 + EE570040042133C86BD2A8D30B05685EEBB67EEBB60E052CB0037E54019DD616 + CD679D0072CA159016C2E2384F879014B042CF71CA0899868AE2D09FE24E4E10 + 018EC2412518B35907612899D08D3011D42D42270E2CCCC1964EF03213E9D3BB + DB10C20255FE0799389EB54BCAE3491EE54A5EEFF86EEFF67EE4FA9EEFF7FEE4 + F8CEEF4EEEEFF62E4BCE343DD51358E932052BF0010DFFF00EBFD911FFF0120F + F1A0EDF0186FF1159FF11B6FF119FFF114AFE64DF02F1BA0B29747D5BD25E726 + 3BBF868118B8089C8053C68FB0AD485037BAE50F279A205A207021E470CE264F + 14B2180F4862FA07FFEEE83E51CB052C21331C2CDE8609503432799894322C92 + 90240060A1A24EDEF519E4D4BCE403DFB55ECFF5D31CF6FF3EF00140E5D07316 + 80A5E54E804B054002171FF71C4FF11EAFF175DFF1203FF1795FF71F40664D50 + 0FD92D3DBDE591ED202014807A21835B0FBE962DB39C1E831A689A251DA39184 + C266715E9FC0252B951119B128EE208EAD1C71E26FF1D78F3A707AFA28D1794D + 38D6EEA5840440A5C1E9B0E39DD9EFB44FF0B65FFBB87FFBF51E00B9DFFBFEDE + 01DCF189B0B0CA711BC3E64102B4EEF11FB0F718BFFC7CDFF0CEFFF1D10FF1D3 + DFFCD6EFF16ABE03F00755F6EB0E0D40A79F92087BB41C51E06607B42A89DAA8 + 8E1B22CBA15B3E06FFDB8CF9A8C3857391B07F1281AF80EA962321A3BE05081B + 001C5C560000540987821A1C8B1C82091A0943001B97821556158397005A954E + 5996871C4F8A094F87ABACADAEAFB0B1B200010FB5B7B6B9B8BBBABDBCBFBEC1 + C0C3C2C5B70C293D965809544A5A2F14D24E362827501F2BD91FDCDADDDCDBDF + E2E1DBDADEE5E4E7E6E8EAE050234D3C838BA598905D4E5112CC095509590D2A + 44A080E51027411B20416A40218B160D54B034385545629608861E21E4D085D4 + AC8F20436AE450010BC204072D55E8A210E1324896125680C96AC3012A872424 + 1094B320802E0901480250691ECC0A5438C1D412018086513C373C29984AA4D5 + ABAF8C190B40ACABFFD65F5CBF8AE58583010879002A3470A6459A12244AAA9D + 20710E9CDDBB78F3EAB55B77AF5F6E504E3459E5F212CB0A4F865849D020C1E2 + 2C09125018E2B313A64B1C122071F2448BCE06A0416371A88527D6D3A84979C2 + 5461E6C10D094C165EC9D165EB980A4B420A4A08E72127821C391EA45428854F + 863600E5E00869C18E519A3EF5C801B2D051A9B3CFF2CA7DACF7EEE0BF1A0001 + 23C8A00412945088464189136A2C7C4CF94BBFBEFDFB1FDE0DF6688924162D5A + 3420D144FF54D0960606C1D4114BB0494005154E0C115B44A7441685168AF497 + 5050DA75380B49156016A225282DC2D33D3399661A619EB0C24503AB24E0488C + AE5407800442C1D2FF004F4E346505548B4C050016AA7868E42AB670A5E4924C + 36E9E493504629E594542A89C3080CB4B048334E48E32505F049C10D061F9069 + 6699689EA9669A6CAEB9E6986CC2E92638314C71820C1D995852149360B14F44 + 8EF1591073CCA9A69C15566870E1134850115A6C124490852398D47464760865 + 8A596DC18DC80133CA75D1DA4AA262519204A86A2041A28942444516125451C5 + 135470C10505514C96AB344844006014B94637841203F98A841617020BEC1060 + 0E51C974279E225491977AD8C177D886A76DB65A5D894C295854E10434EB8189 + 840D059C00A79C68B24BE6BA6DC6FB6EBBF4CE6B2F38F69250C07EFD95A4C529 + 9065E1A77A950165FF9972096851857B5554801E17CC345045144A70324FB557 + AD68A9A11C7561306E236E800516CC95DA1A4B1E2770C0124B1C104104CE4600 + 6C1257B0CCF2105C1C9084CE3ADB6C33CF3B1FB0F21235B3BCF3D13A7361B38F + 405A2264551877584095522649F5D55867AD640723849021911AB4E5A5121A68 + 50000DF3CDA9B6BC6CAFED76DBFA11814917584421D1544FE4835D6D1A7214AE + 165944D198C402AB2A1986B8E51975481ABB620FA7AB11175C6CF66C689ACA42 + 73115D1443C01CC5015C2491B3CB30CB2CF3E7A1E7AC3953C2BE2C3AE8490C01 + ECE99C1F3044EC4E355D1D2AD82D9E5A011D2869F5F0C2171F96F160DD72FCF2 + CA374F3CF3CF3B8FFF7C305DA3554116E3AAC71E122FA05000142BBC2D7EDBE4 + 8F7FE607FAC6634F808C5111856FBB254ED213EDE1AA56030133237391F16356 + 53E3BEB394C630C3A0CBAC82245B0A914C769310E170816E557005916A541157 + 08C8823F42C42A26E20AC600C00A4CF388540A32C100A2C60623C081D656C8C2 + 1652ED0158928141B26085B688ED2D3D2A800AA6B0000CF8F087400CA2108748 + C4221AB1882480C76A2415380A580C3395E380042850858634C6518D614CD832 + 22C2A898D02A99528902BD481804268472CCF1A22754E68F121EA20B01EBC88C + 2073C17940465AABB8E371A2700880E08F15F88BCD6400200AEA480B6A5FBC0A + 35466035173AF291FF2EC401084200834334C00A4E7801B970580D1F60E388A0 + 0CA5284599C41D146110D12148291CD11248240C514898486346833F095CC862 + 07A14922C1D81FE6ACA445ADB8CC6B50C237111E020B3739442A1CD1052A08E7 + 094A89C84F8484880C5501461B0088509C0000250000347DC4CE1F7F02B30F36 + 6D84D3DAE55534500D1542F29DF0CCDA0840D08333E6ED4B5EEADE5C62F0C31E + FAD09F1800A840FB49D07F1E71A0064DA810EDA43E2444302D1BEA0FC91C4301 + 2AB407328C69C03E2E49810CCD28A2EA042301414A187A74AA3FB1A109873C81 + 4C18094740110CCA3F4653199A36C6285984915090F0897FB0A2425988282872 + 471DEBF834A42181FF8B0D3CE0CE783AF5A94EC2810740908263664103DA6B8F + 7BBAC702128CF2AB60056B60765022A0F04628237B8206ACA0D62CDCEF1F0262 + 4A91560A40A43A2E2A20D265A55E6146D8902C8D5D1CD28BFAF34D2DB092A51D + A5C74F00370F392AC137DB04C0FBDE58A8B7A8060083CC605484E446BBCA421A + 1A40C108B872810094F6B44A2A2D69536BDAD6A2F6B5AD5D2D6C55EBDADAC256 + B6B6CD2D6D77CB5AD5622905F2E0C0259FF1250DBCC0065D35680F971BD0E632 + F7B9CE8D2E74A72BDDEA4ED74E3FC882C13AD29A067441AD560093159841479D + 24064186DA6B5D3D5B468F996A80AFE8D4E44CD2B1C2442209D81C526354A19C + 9F5C7352ABF1E3A0FF04813F704616433AED63683AF18967E9EE90D4622F2CD6 + C33DD14215AABC5DAD86B146DB0074A00094FC8963B21A8D17BCE00705200175 + 576CDD16B3F8C52DC6809D402083DA9404250AA3400474A2962A4840401CA080 + 162C66898EAC66BD12EE8FA838F251FE384E722452209383C21364E268480D1B + 9233D3C2D92DEFCE1212B0581646610A5470D39B4FD0290701A0CD41BCCC9C22 + 7C5A8493DC8A2EBD055D2398AD6EF7ACE73EF3F9CF7E0E34A06D7B251A2B738A + 6273CBB8D26582802EE0D1CB7DB4A3233D5D49437AD2938634A5317D694D777A + 0A3EF8810C46161987744660FF90C029BA60CB03E4F76017A373491741B731B6 + A6522AE2ABA762F3FF088F995510C8AC88145939ADEFD6B401C2D529739E0047 + 975A22290CF9441F6303154100C461432DE4898CDA3B59B3223D1440021250FC + 800CC7F6DCE6E6AD9E9B74DB73E3D6DC1BC6ED86D3CDDA79EE401E1590005CDC + D29E46A1A0AB3C74B1C0614C70175BFAD1A00641401EF40CF6810620CC1817FF + 62E26D1399F4321E9BD11B530212519DC427AB2189C190C91824504A54C6B158 + A112E0046CAE4609AA386C379D80136E3A22518D3D04150C31486805892ADDAE + F837D9A384EEA5F002481F34D205CD74D3267DE94E9FEDD35D3BF5D3569DCF4F + 9F7A5976D09CABE2D32DDE23C1073C4DF6B29BFDEC684F7BD931E00314D84002 + 0F4135AC6669512BFF9C28D642AF5C4C3CD6224FA01CC9AC40F92046A658C3A4 + 28015C48333883E2308008224F63467644D32CB0885EF1385AB0A41F093B9AA9 + F4FCC1A89873C58994C970BF80013A50BAEA9BCEFAD5BB5ED038200079FAA86F + 6944E32DE7E2020DA0A0F6DE1FDCF7C09FF40AF4A585880124366BF1954E4724 + 74593490C996FA7B483C1EE5602264265848424640E3089A7E53BB5C2E085266 + F4E3B4E8A48FAA900C66BFF904419C7F4812007674E0BC59AA88DEDBB0A90212 + A4610574A910EA00987556378051578001488007688057F75A02A88008D8800C + 78011D800C9C407AEA3136C6F56F2A067C1CD881C0A72F9CC10CFE9005541020 + 6F646484D57CFFD3FF1A0CA4583FA140214112F355525074090DE06A8BD0185F + E608DCA74D1D112E5DE053C1C16C47351C48D00FA50000A7102E2EC13984A43B + DCA682ABD00597A4054A50744BF56EAFB785ADD7855CA85B5C5355224343EA91 + 55DC6303273005FCE4816CD8869EA62F3BF0639AE019ABA4111CD27CAC31461B + B371C0F421215322223423CC41723FE10859607269310F9251102E116464E63F + 15450A0DC04D9305138E0021BBC1094A50099A85107226858B102E1708260590 + 674B778AA8988AAAB88AACD88AAEF88AB0188B4877253B20431BD0001A206463 + 73862CA00231B00035008CC2F868C1588CC2688CC8788CCA488CCBA88CC9F88C + 1800874F702B1EA5FF2180976486A74BB3661430081232387820972920021B38 + D81C12A36C3F214BC14160694629D60671CAC44DECC3609DA75382D073093608 + 46757F4287056CB15528400051278B037980AB5890A98890B2B8900B1900F3D4 + 04676405CF5062EB81498C1603C1A869C6C88C1AE9691999761BE99190F69124 + 190326C0021150192E9177C124460CE28DDDF811DF081BAF918723824CD88118 + 9CC018ACB40FE97409D794165BA6842E754143711CFE704CBEF14790504E4E80 + 2384620A3BD93452285CB9380D5A205A0CB9955CD9955ED98A01A0030CB00330 + 001BE195686313012C6002CED896CFE89670F99672099726B02F66E582DBF845 + 00B45784B2573219FF937E385F1B212A2F291437413202B30800B183D3728BD8 + B10188215C416555C2751CC7C166A612730A96195A9004C40220C8822C472814 + 0F058AC72403B9A8054E306E0540005FF99AB0F9950AA98A52751669212EE4E2 + 169BE13D3B449223F99B1CD996C1E99BC3F99B6F498C310005FB320B7D88549A + 42122D8897AFE071D7580A7FE81379153F43E26A2C2788C2A10403D67D2D370F + C0A601F6382355C44DC721085640053C61316AD54D4DF10A023286A64918DF75 + 815B55003A807447B074FFE99F003AA0025AA01710A0074AA0096AA008DAA00A + EAA00CFAA0121AA1FEF95B9CB016D290689BD13D34C0963530971F5A8C1F0A8C + 231AA2CE58A27149FFA222FA9675C97552B88E97706B7BE8874E260BDF9819CF + F14B64A43200514146F104A7F078D6567E17833F4F700F91002B3C9579FA252D + 2631245930159B7859C10119B01174A0D820FBD71ED4500038109B601AA6080A + 9B47702529C011E8C13DE5727B5C45023790A2200AA7721AA7C1680223B0032A + B81AEE3513A8217D30F971D07971C7740056E008493908D2F4478210947E8210 + DAE47DECB753DD84658280473A3924B2C32243B893FCA882C2155ED3705CA3F5 + 9FA49AA0A57AAAA69AAAA8BAAAAADAAAACFAAAAE1AABB03AAB3AF090835005A9 + F925C71205BD88912B1AA2C01AAC2A0AAC2A5AACC15AA2C87AAC265A03371003 + 2700022C827FB401FF397959A353C8717F891991D13F3568982E35425F664930 + 92666F142E92B90A121184E284204E5405FD551DA6D23006E3841AD21F567A54 + F7B90AD77395E1C64E47B7A0000BA1012BA1A52AA0053BB0148AB00A2BB00C3B + A1092A49F7E630A0CA1EE2F5028C36A7184BA7193B8C27F0038A934803141519 + A7108549713069ADB0309394633911056C07902196840483A28893508806114B + 26DB05561041DD679990E509E2C2131D3154B17609898948F9BA0C0BE3256778 + 020170AA4710B5526BAA517BA0553BB558ABAA523BABB2AAB5AB7AB55B4BB5A4 + 0AB663BBB5A55AABE42111ABF975EAF16F1EAAAC701BB7723BB7743BA23E00AD + 7675641D13322AD1FF9C1FF178D81A9824F21C1B0213328583557A7E90D947E3 + 452996F4040F0513E82179DF640811C06B9E222BF6D84D45114C89B966CCB94B + 7E4B18CD702CEBC14E28D09F5CBBBA5D9BB5ACFBBAB27AB5AD2BB6A97A01F3A4 + 25A22836B7B79B3AE4ABBF5AB7C90ABCC20BACCE8AB72614152A9257252583D5 + 197D816BA37F984B1DD3642DA598267153953AAE24731EA3C084CAD4BD930200 + B212205650479AE07E301B052F4205903B2B4FB02A5389B2EC856499C116E156 + 74A96BB5664BB6FBCBBFFDFBBF001CC0023CC0044CC023D03525E175BAA85556 + D03D2A6002C31BC1121CB70BF0AC95B1382AC21A7749A5800912802BBF35729D + B8318E3142A8866AFF8F425205A3D0118B8984DF4B9A31E28F6C850514F063F5 + E9AE3C71489F8305BE92055540053E96A89BDBBCBE33BAAC90190DEC25D4807A + FADBC4584BB65E1BC5AF0AC54F5CB64E4CC5B45BC5521CAB5D23033CC0514236 + 8A26865C103CC1666CC6C5FBB1C7BB64C0D4881DFCB72F08C2ADA0B2D89A10D4 + D75224A8081A47437A8C098E011579820519445824284D826C055DE0630B9227 + 9784597C44A41B64122E4CC4B226116779855DAA0305BCC99CDCC99EFCC9021C + 005B87655D8296F8DBAB35E00021AACA1FCACAA9BCCAB0DCCACAEACAC0EACAB6 + 1CCBAF1C036D1740C8EB314446837D4BC9A4E0A7D93AB878471C40817890C153 + 3277884A01130D30FF9A11E518D8342388B29E37F21454106626A5561BE0045C + 40482E77ABA1279D49AB16C6350D99C49FFA3BC0ED0CCA02FCCEF03CCF017C01 + 63292092607B4ABCCE27F0B667FCCFC0DB763284C11CF14BC74C0FCC9B3171DC + BC744C71B87646845A103E7908E48A47E23B0A88C441A9C013A8127F597623C5 + 27BE8C28D222F36683DC09473B57728C87A3C1AF60822E3E20B51020D3F43CD3 + FB6BD34780D3FF8BD33ABDC93D7DD3341DB53CDDBF52501632F00F12F925BAAB + 96FEFCCAB2FCD44E1DD5B43CCBB85CCB545D03268002688115B9A671D90878D7 + 67C4B1F0C10C2DC2B9A6213CFA46D6D166D90423E3748B3082AF7FD4005A50A8 + B709093B3B645209FF4795E1843EA78F8AF0D60C26CC22D1C6FFE33F1F110444 + A2A66FA1285E4ACF901DD9924DC0B68B0264E5275D42916FD13D29B600530DD0 + A07DAC75B9D55C6D401BA2A364F464D029CC641D83D17BD8769C1983151C1AD5 + C7E7E12806B10CAF62B2FF002183222AB2F24D329B16B072C199C55F8B50411E + 4458848D1A957319DA380BFD50CA6092C9397DDD339DDDD8BDDDDADDDDDCFDDD + DE1DDEE03DDEE25DDEE47DDED94D8B0103AA1ADA7FBDABCAF0FDCAF13DDFF25D + DFF47DDFF69DDFF75D974D704A22A546A3E297CE17CC0A4DCC82EB5731B11184 + 2214833547482047A470558A30CD35CB211CF01461B4015670651F852A3E5110 + 5A10CE857440FB38FF995486C1876DB2581104FDA0A6EBD1A5FA3BD4E22DD4E8 + 4DD3E6EDDD34AEDD39FEDD3B7EE3D7DDE3E86DBB20D004965C746BBA1E5A6003 + 3410ACB72CB79FCDE4551DE5501DA2FA32D0856D1A90C082C86B71F12539ACBD + D0AE7D123519A32F59BD0A26D2113E0A6DF67DB09160155005990124F92632ED + 97DC251110ABF0667FBD0115C4C34B50095084C1C97B180A012256118416A59B + 48E03D071ADE1070E38FCEDD91DEDD930EDE950EE9989ED3937EE935FEE8E22D + 963F5012F48396E1B6E827A002A98CDFAAAEDFACBEEAAECEAC55CE38C9EB1F1A + E7647515D65C0DE67F6ACCD6291B31C205DC7423306212D2A2A86CE6D6A53966 + 4352E7A4393F1683FF1E90301599C0594EA859A5605414D00049A0AF7A794683 + 13198C111957215CCEB0CFE8D2E89D9EEE3EBEEEEADEEEEC6EDE42DE026AFB25 + D180041A806234F08BAF0ED5AFDEE4AD0ECBF15D03E9631E032EB22962D04DA6 + E22D99D0BC64E0CEF7DAB1ED9758907804C21BC245AE1FD50F9BFB4DD7E4B8D7 + E15669D17D63266569B1161B30547B4EED0D504EE66C2461E430856B39A781CE + F8742E0520059E9EF33ABFF33CDFF33EFFF3401FF4423FF4418F0305802793C8 + B6EBC1D4F2ED00F7EDF4F60DF5AA2EF5FA4DF5F02DF54E6F028271EB09BE40AC + D13F8C43E00DFFBCB18040830B997CAA1AC2F1B2594001CC24895A60643EA119 + 138E4B23CE78DBCCFF4C3C5105761D3F3FCC0148E06014F7650920330D700585 + 20A83257298562712C6B28E4794647664019A31635B4BBD64DF49ABFF99CDFF9 + 9ECFF3655A3D8BADBB5AD52B9DDDEFFF8EFAAAEFD45ACF2F7B48401F03996A5C + AD96C2F085ADEBC5EC5769B4924131F18BC1E728A84D3ECA66417553CAE4AECB + 0DA510F451ABC66CAB3015A6524E1964B89C450149609E9F3301955028993246 + 34710F0E7D599D50EB0EC309B9A4F087AEC0BC92F99FDFFEEEFFFE40EF053F7F + 04F6C618A0FA25AB69035CE08B4E0F080E8235820E848385878689858D8D8A8F + 8C8E0E312A203200001B9B991B1C5D151C9C9A1B155D9A99A9AAAB9D9A15A3AC + B1ADA0A8B2AB1CAFFF001C58095DA21BB5BA00090755BA151258005959C255CA + 0912991C590D001554C0000DD61555159A58C6004F0999094F1C0055E6995143 + 001ACD9C1C0DE609151A07E656515CA9DA54051466ABA02E73C0062A3368AB42 + 030D149450A0F0C2890D143A8E40D8C8B1A3C78F20438A1C49B2A4C993218FE8 + 60B0A34B032A48244A7C11D1090A15266A10DAB90811CF9F8B78FA0CDA932850 + 9E3754FC58B5E993AF5BA54E0D64080C172C86B3C04DB5655553022C9F448922 + 95090B176BD31A54B1A62E540366BA38BD6D3676183370EA366069F044993A00 + 7BFB8EA21001809579D3FA0E333684C29003490E609D6CB0DD56CAACF4668148 + 410B05244822A038FF71C40B04D3A84FAB4ECD7AB5EA8DA93BB69ECD91B66DD7 + B05DC7D65DBB776BD847A48CF821435CE789139568D0826209094893A24B9F4E + BD3A25153BFE6EE8C21D56C0A8C1B0267C75B920305AE55975E5F0D593A94DF0 + CF9D8DBB4C4BA650C0126809254C2F05840B71E084315269A28134BF64428506 + 0902A0043CF2D4528F39DC0070C004185E7145124B2CC121874B4096C4881F7A + 98C4862292F8E18A1C1EB0C4101D7AB8048A4B60168B4356BC40D3674EBC309A + 0EB905C99B90A611D99B9148BEA6E46F4B1ED96492453EE99A70203491C0669D + D1441312391EA0420CD02902DD24633A22A624454117830F3F80054A83DFB952 + 2065559167E3795AFF4DD6D506F890E2945865ED834A351B5891D036C648004E + 59125013601759549040379A348A4533CE60214E4084C543576258E8F5040013 + 6C130515CB5480CC304E2CD140054834808534083E110512FA7133A93DB24670 + 80355A7CF5CD13E064D1580514D818CBA556203711123E9E20C56D5E547B9AB5 + D5CE86EDB6A871AB9BB7B661BB1AB8E46ADBADB91BE950400A933AEBEE0B119C + 00A675F4D66B2F2527FCE04B7C57C1674A7854B972957800A0A7672EEC2DE409 + 070C77A14D025C5891C913986E4005387C3963CEAC095553F03799C0B5C133EA + A093093BE1A4734D04F05881565AF758F36212090C11C506B24A700A053356F1 + 440492DA634C035CFF0C91C47E0D2493053AF640568D164FC8B32A164918AD84 + B299F1B099163B2AF7820D23E0402D6F63974DF6D966A78DF6DAB1E1301C165D + 3CA104D7C82981841311B040C20D454542DD9988049E269A93C470C20E41C8F2 + DDBFE9C552E7C0011B8C152E9DF4D98A27A00083C5014B57388D43DCC4E71237 + 0E9F3769A4AAD893855FE7E85ACB5E9176AA84340EE34245A85702D061124F54 + 1101129726606803574C1041039D25703A634B7081C561BD2750851502721845 + 035A6841C59519C3E83CD63766E184BB77DBC00290D9A6AFFEFAECB7EFFEFBF0 + C72FFFFCF2EB00C20E936A209167CF5A5440063100C2BD0648C04254E2078BB2 + 05781A97198131B0FF819263C87A3405104F34E51544BBD2CD7431962C44412A + 8B4AC07F34F1970A68A11B9CD8C081B493092B688014DB21871300109A6B50C0 + 097683081570E804654C60034F7882ACB2900C7B6081025CB098F29EE0B24941 + 6A085670C8132810299729430B118846E7AAB1175E70C10915C014F856114627 + D08D264AF85A017440BF36BAF18D708C23FC2030821DF0E02569A4881EED7693 + 9C14F08FF632DC0E0CB240CC3CEE814C29589E26970B3E25103E4D11C5E6A8D0 + 800D4883135702E2A27011A9A54D83037DB14727361029E5A1C2515850D92996 + A6292D70E12B58A880A662890F49C572022912D1869A7785E6ED8E4590B90264 + 447400C88448465CFF20918B46A4CB6226618C996116F928B2C66A09205BD7B4 + 2636BD70CD6E72739BDA0CE737C5E9CD6C8EF39CE62C2738D1F9CD74AED39DE4 + DCA6705020AB06EC0F3977638EDECA04C87E36A212D95120E30CE9C03B291260 + 5C214FC22A38CA4D404C1A80A9023032B61D8902261B9A504CA11685B2918165 + 1B985A4B2632B68C9745A17813E84C04A810852868E01DFD88C013702801090C + 210BCDAA820422E0B328D4146A1ED4C0CF2490052D20618A4E9040147CA6050D + 54E18655408216B220D5A829210B5458A9C4A0C90A9758015A7A4482065EB0C6 + 69C9F1AC684D6B5A0530020648207F13D9110534B09C03D06006FCF4673F0579 + 0AC70D944EC7801CFF210F8AC8C03AF491DAB0209F5E898ABD784E14DED88B36 + C0D117D4092394A14285EACCC1B061D823014D018013A8C0810340B40BED400B + 5A16D28E762C64B5E0E85302DAA20C0A764119B20C876E01738EDE0E83AB377A + 0912DC65C66AB6F3B8EA4C2E7297ABDCE63217B90270AE749F3B5D757A410775 + 941E0EDDF5AC219C806F82B04021C41BDEE890D711E7B54E7A273183C339AE90 + 802D8560CD43D8839190820DBDE062D9020CAA9E0715FA014781908590B16CE0 + A824D486154E9B0A0930888386A15E1224F69682A10A1BD7B89D4701A0A80D47 + 1188CA9080355056611237230BA3CADD9544A1014AAE6E56A6B81D703323292A + E491264E906A0146FFA0CDEA52F7C73E0E3290872C64E57AE102C369422AE716 + D79AC08B0519D0AB941B0104139CA0097E9DD3640E69D0081A644F961348E600 + 339F897E45659AEBCB1312C2C9302AA3637B41C8263E3B5B614C2A77DAB85B17 + 86800F63CC2AC3A5A882282EC601416F3819EB3087C73C99318F99ECD1CD10C7 + 2E14C5A5B750F209947CD98C55C11E098CAF6E1A700217A4C5CDE896BA9BA68E + 2EAA577DEA56ABFAD5AE4EB5AC59ADEA58D37AD6A78675AD77FD6A5CD77A253F + B852B38E931C0DD8E00026884179978DDEF13ABB9FE725AF95032A90BF6EB9A0 + 04F57241D6F395B834655F9AE302AA86312AC0106B31A7C00269AF013250BEF9 + 62133307A4DA2144FF7554086768E1C0A92AB0842CFC0521AE0DD94807FEDB82 + FF2B96D780865694715BDD96C22BBE5D086B371D8B20480FAC3B8216D88A4CE4 + 8EF39AE3C94DB5C7992BF2E6D651060DB0824422821C33A280062610E094A56C + 021660B9DA5A2698550A0B90FA32B2728FC44523C9FC5693712295976A859B51 + 9797BE80AC13A144C848EB590B6EC8320A5AC0C215B8A081D04CA4A566BC5504 + 3CD35225603D7BBFA340143A3304334660391170421422F019BA3BA13148688C + DAC59EBDB5E3CDA5606F29C563C19EA811DB6E771FC1B47ACDF8C63BFEF1908F + BCE4274FF9CA331E02EA6A4218A5CABFE43087067B738078472FFAD29797F4A8 + 2F7DEA57AFFAD693FF77062CE001CE114A5FF9F23C2BB48FC59817AA09EED425 + 3FAF2CEA7FF3B3C182E587026FEEEB06A2C0D9C4523113DC39D90B81B1A8A202 + C03115B8C2EA18A41F3E6980171AF84AF8F3810F27E023FC1C9087C546658535 + 4B60544FD0D966A841E1ABA5DC21DBC3C2F713F07D588579F0ABC02C5A121162 + 65036565790898800AB8800CC8783850003B40315DA74713313E28C002347003 + 793573F662020580099D606D3A6727D9B6480C31668EE40A4377745C507459F0 + 5FA9E40D64E16612951023E310EDA00EABE3490FF35924E4595F81455D7005B2 + 720D08320F59700A16853A4F700A4DB80CCA5084A63485DD302A920218552870 + 1C965113A38500C8FF147BC11975F335A321052E200067988668A86A6AD8866B + E88670F8866C2887D1758675388771188777988772C8877C0805527002558253 + 73130507C0058888884B705740C07A8EE87A90F8889268022850042198730163 + 7B5D66825F8630ED811FF480495C770E2FB818F9A132C8F06686B209CF50308A + 91689BE03125355298F216E0500111003413F042ABB22A377883EBA00C328668 + 42B40C147262D6903B15F66797A2177E660CC8600A10256332F6853496723311 + 11767311D2227976B88694F78DAFF68DE2388777788EE0F878E5888EDE688EE9 + 488E52603F36002F07300411C005C5848879C30233D06C93106DCF667A02D908 + EBF58F0E00042480FF0297987B8A63588684270C790B8BC22760D120AD406652 + 7767A5A839ABF32AA8E00D6E860A1E252B7F0185CA539246D4006D717D407305 + A1C21698726E0DE084E0A033A90285EB105BE6706E7BE15958A80BD25001A342 + 0D13C330A30244AC5892D6D8550960639DE73517E8037ED88754399556599558 + 79955A99955C7986C23104F498045C10017317054E504C7715039218896CB996 + 92A8140E23829948825B069185B573BB005A90C442C3C00543A9834E9017D730 + 0C148017318405B8320DDAA004E5964056B0559F000C1260050E230C73D70513 + B03A18730A36F9849EF456E4708CC66817DB305B1CD39411A50BD9C001A8D205 + 1DA6010E23681C66FF0E2823464BD973EC61637A844648003666D89578089C7C + 888E5BE9867B4895C7498EEE789577785D28B003D37346147100BEE2256AD996 + D8E996D9597A377038F0756D3BF7903E2741E44191BFF01D7FB13952073AD670 + 74AB635152B134E7A60D4BB33AA9C30DA1D283F796098EC101C5A32127D2212E + A221BD340104EA2222724C27920413B0A0C7B44C1EB221BD1419C26422233223 + 50E42B43300488B8A192719B84170DC4E6640628952E70A2289AA26FA8A2298A + A27D78A26808A32E9A862CDAA2347AA3318AA36D28A332BAA270C8A33FEAA2D7 + 5500CF50549D978F5C708124707ADBA99D4E5A7A3100817239589A4827767930 + 4DF189FF02436521FF6E655105A7903465A118C8700A1C8068162315C56849AF + D59EE5700E12550F2F938B0D300442440514538C6A5105CC40547C4A4ABBC01E + 7C520F842A68E9001688EA12907229816A9A4E514F7D214BBDF0157D05A2CBA2 + 9BC9C1233F70006C94A39EAAA33E0AA49F2AAA79D8A37E48AAA4EAA3A37AAAA0 + 9A86D8F50341A47213F118D4D9235EA281A4C76CA9C7A4DAC9ABADE7814D8089 + 83159E563A9E843491F8F06DEF712866917FA8931F916293EA200E5D0032D4F7 + 0D9ED45717C30D63814A88618CECD15235530D3B283DD5F01649C3342FE158E5 + 209F771675A7C33DF5A43C61C43DF5B92B46D43957B22B962A0BBB50052BE72C + D0321A5060A3067BFFB0089BB00ABBB00CDBB00EDBB0520002D5303E9EF1188D + F102AE440301347A16C0B11E2B7A1D0BB21FDBB1231BB2242BB2200BAC11D940 + 550A58DA9650D3D06D24A42A9D057CE8A005E7114309B041F1A11F6FD659C862 + 0DA5930947F5177DE542931532F6A10543C0014BC0322CB3A18DA10507F00E51 + 6B3374A53FA0E1043936577435579D91B59F71379FA104540013A3E5192E6446 + 56B0207365059E4157E3D6AFD1C444EEA2043D82028A97A30F7BB07C3BA37DAB + A336FAB7831BB886EB053E50006D42554C5B352CF70243C08F4D3AB94F3A7A35 + 909032707BFA757B0051990D091060F648AEC030E1C62BF9760DF57939DC300E + A970AE6F961F7CF1FFBA9EB53A01E10D5F8104111301B7A529B6C40BBDFB155F + 6144CA034BC35BBCBC00BCC37BBCC5AB3C5DC4BCC263BCC44BB70D4188875780 + 05E0035E70A20380A2DBABBDDCFBBDDEBBBDDDEB02E24BBEDF5BBEDE9BBEE6AB + BEE35BBEED6BBEEFCBBEE0BBBEF4EBBEF3CB563FE033FD1019F8A40179835725 + 1BC0243BC0018CB2277BC037400220501754C1665B014991D4300C234B34CB1D + AA620ADC61C1AAB2BBBE27B3F4E11EA200315B2552811685E5B66157527D55F8 + 5A47F9A676A10E2E2C3D92A4A191514C369C4CF978C33A9C4CF8988F6259353B + 2C963D8C8F444CC4395C4C8668C487584CD2AB382E2101C3C572156803A36686 + F04BBFEA7BB0E31BFFBE06BBC52DEAC5F17BBE5D3CBF0D6BBFE84BC62E0005EA + 8202EFC0A177CB054B3003D759B9948B9D0ED09D4AC630A43BC1A0B0C14247C1 + AA124B827CC1844CC819BCC1A0E07BBE90C18A8C0B60F10A7D7228DA10161023 + 6F8926942B890EA4F466E4464AEBA928E2D01FC4B217DAD117A9A40EF6C60E6F + C50BB0D394C0AB29DBF37EB6C43441C4CAD2B3BA9AB2446B6105CD4B44D180BC + 2F810DC7BB17EC208B4DAC7B49335C9D071ADC280003F0CC576CC6D14CBED02C + CDD63CCDEE5BCDD8ACCDD79CCDDD1CCDDCCCCD691C886CCC056BE7199E313707 + 0065734CC0EEFCCEF01CCFF1DC5E9A174B1B1C0A7A4CBA8A8CCF7BBCC716749E + F975283D37D00E49FF41E7390A73C605F3D05F1AA01598847C09560A23B40966 + EA545C6A188A1217A2E060D35A30C3F042ABC07F4AA90B56D00EAA4049ACF07E + ACA016AC809A01187E0AC1CBC75C103D702563453711610536212DDFDCD3D8FC + D33EDDD3E21CD4D44CD466FCCC8108024FD004CABC234D25773490010244C754 + 1D8994C8037142A58404C18AD550079D589B204BF0114B2974287A5CC9C2E010 + 22F509D7C00D1513327C21D057F28290E40DF6991071432CD4D7D6B2F81728D6 + 9E63A1162AF9CF73E117D05A849579292813164259611F299FEEA1097351A933 + 1D4DE2C35D69F4022CE0CCCF5CCD9E2DBE9FDDD9A20DDAA42DDA457DDA9D5DD4 + A69DDAACFDD9A8EDFFDAA31DDBAB1DDAAC2D0082D80433751C9DA705E623D522 + 2BCFC01DDCF00C042A60030291581524C917C92F08DDD530C4D599B11D60E150 + F9491FC700C92DF8A561CA1685060DE5168CE6460A15860D0F23019ED08A1996 + 51ED1059E0AA0B2436939A205257F2662CCDDE85A72000B266B3186818936F8A + C1A79D80322653D98A037ED92357D6AB03055BDAAD4DDAF03BDBDE0CDB0FCEE0 + 430DDB127ED40EDEE0A83DE1458DB80C10AC00CB35FC83B7E6A3B1D969B2755C + C01D7B032C90B903E31DC8FDDC8E9348F3E5382549D602ED149B6016254D4A09 + E4314F07529B9C0AE8202988E10DECA19250A72A10955160A151A3F9A6B04B0D + 2F934ADB20B41FB3FF0BA32215CF800C01B1169694406F31E479B9669ED4D104 + AE400F11C575F35505700205BB05B23DE7745EE70320E7769EE77ABEE77CCEE7 + 50A0B86AB11CD9D319CA6C571B2BDC889EE816300328D0049E10D0354E71DA91 + 177A610A925A3B98134B62A11743F016C9C2A5E2831763910089694180E10480 + 9D10ED3716DABA55A3500517031FA2F010F2F6E822C41613F97C104643711A10 + 30E16D9900C5E7D141142015A8B50DA5CEC069EEAFB3325C03281136310224D0 + E7D45EEDD67EEDD84EE73AB0032807110388B1A1710233D0888A1EDCBF1DCF49 + A12F172910811A0A81FCBBDCC0173E2301B07EB6F5EE5488B7726B978B63678F + B928B586D828B234FF4B83CC1E11B03ADB731FA80B9A75B1A77E222ACF7A0AC8 + D084A1250E4F57154464D8BA90F1A1D569754639829D17A7D0941ED9599772E6 + F79105E87D1F827D1E2FE9398FBEECDB964AC35637D032048A070572BEF377DE + F33CFFF33E1FF4403FF4425FF4447FF4469FF448BFF449AFC6443A537437119E + D123916B023750EE580FCF49810283DE527307B5F618F6504B9663CFA1FECEA1 + 2C3396B9E80F9E41775FA55456500574C517D150D22216018612168A65413CAE + 0E006E8418B3916F3AE0B3984ADAA06E4668EBE9E051D36A9F9E84BAC7D8148C + B6F8CBE0677A0D52EC96599B329AB8706E22159B8AC616B6580F4779EC325F10 + F81713A06611A3E6FF05A28DE73D9FEDAFDFD9B0DFE7B52FDBB75FEDB09FFB76 + EE023EC00228A0A1517B8845E322193003599FFC030C7B34210F14E032428404 + D500EB93220E8A120D62AD3CDB5167D7D05A8B925BC380ACE996835800450B63 + 83F1B139580EE6EBD65F95E439DB302AF05F0112B32A6D61DE487E1FE65DAD0A + 0308551500590D00001C0D868A1B870955000D901C008F954F8888541B154F83 + 8859581B59151B8D8500129F8409A9120D0992AF591287B6B7B8B9BABBBCBDB7 + 150D122F145A14C6144A2F283E5053035BCFD15BD3D2D5D3D0D8D6DAD9D7DBCF + D4DDDCDED8E0E0E3D6E5E2D82434050707494B5749F449072C4B193916FC1625 + FDFFF805EC47B060FFC18108F9A940212341022CB81A6069752B568246B6B028 + EA52B141168A8D12640945A911872C550C01F83444C3060E186D614CC04525A5 + 2C4E4A02088904A2A941099CD83C544103A49D26A94880097327152B10571E7A + A2A124A54A1A287EEA4241E54E0058AC603279C80A95415D066DA862851287A6 + 599094FCD40049A90AA52A39C172D597DFBF80736DE892E0091263C394207162 + 03050B29EAD29D5337D91C657297BF65DEAC79B2B701524EFC98A8854B31638B + A31CA09101880383B063CB9E7DE34493BA6A9B2650E2D31400AEAD4C99D450AB + 11470056AAB8F54D7539A5041A7A538AE2B24297462FB3833DE07367022B869A + 6E484025FCD7EF86FF4A51AA2016AD712A55AE63E450E52CD29DF57BBFFC1EFC + 2BCA0457854445021C5D854515A420625C16544024DE132965025303E07DD588 + 2459C414D8861CF232DE134E1C738C1354D8C0820F2E5CA3E28A2CB6E8E28B30 + C628E38C34D6B8850B2780F0C213564411C5311144E004172C90B0CF6C040D84 + 249231B0F0C328DDC5C2C113AD708445861FD952012952DAD2A048168672E57D + 8A0050452B9460C1851588E085DD218D6031C4516B41F44478A3B432922D655A + E20824583C715C175670B2D4215D2C95A729F441848A297B7AC427261EC19505 + 584F448505158848D09B048D50B95327765EB493A87B527267254775E8EAAB70 + 268284121424562BFF12CA9CA0998DBCF6EAEBAFC0AE0805084D60A1818F2F04 + 898C1628AC06C492D0466B011033A0B052151061518B53D92AB7132A5D64EAC8 + A51B885B49166F9509D651B134422A27090CC1E94B6E6AA8A6151C35F8D599AC + 7C2569991762A2ED57577250C1A12B49D0C549D7E1270ABF8764097024AD4872 + DE131B30D2EDB52F21E20907AA60C72FB6B66429EA298BF44711AC2C77A81115 + 4A9C86DA0B2F1450E4002B6C91F33439F77CCDCE3AFF2C34CF4307ED33D1481B + 1D74D240375DB4D34C2B4DB4CF472FBD051423FC204316510C1141315AC41C01 + 0BFA00E4CFD9FFA48DF6DA6AB7CDB63F40D0204311E18AF4662A220D4257DEBE + 652C9228332962C8FF6095085E2028ED5287144C5D2C3C534D09D8652121D1C1 + 79A1065E01450526995CBB09591B2805D229568C6EE62B328DE78443A4A4A941 + 8695226205A83B5D2581156A210A22478413021559BE07E75BCBC473C8410212 + 848818321AFC604301CC04FB2BD036522FBD8CD6C3E842012034A0C11060BFA0 + 85F8EFD070C3B3D2A60F9B0905C85009056865528116C135550112834B050012 + E86A978A0687E0CB2040A4B74C248002108900A752679DA6A8491103AA1D4CF8 + 33AA9094EE100E040F764C021EB59844029B40C471BCA7169F78CF276EF90E16 + 2A3011D74DC421EEDA1C4C84532EFB30A55CB813E185A0F21B0541074D1D2B9E + 1001C38140694044FFC6484663984135A535F1894E8C2214A728C52A52F18A56 + CC6213A1A0830298250A60A3401422E0232ED0601F6E4BE3DBD4C8467F64E007 + 85E944FC1E3125FD08224BBEF11423E0F4918249A510B158C5DF1AC001C5CD70 + 718D1B0F175C920AF388EA4C182993A40ED1004C3C022307C2D4713840059828 + C72D126885A73098A52C51A2928480C50AC13412535DF2404DE98220EAF49BD0 + 0D02758718D9A56022313CAD6C88C0DC4511197498B0214331B9920216A13835 + 2D3A7399CF8C2634B138001DA0E0365A28460486800C0A44C06633309B40C479 + B6719AB39CE81CC80D50B02D4271441125196505BC050051A5222A7B84459A04 + 55896DD1112C975AFF49BCE6D5145BCC9026F943557F421989FC490A4C40A945 + 053A19C08F8DD2609C92E5CACE9208CEDD33957CEAA32012000C481C0C93CA99 + E72A78384A533C1222838045BF42B5088F06F3A6B928693145640524A0E00452 + 98C20A86DA33A21AF5A8484D6A51957A549D31F5A94475EA52A50AD5A51A95AA + 513DAA0F0AB003EF31E16BC4A00012B649831900A18D685DE31A81A0821F1494 + 4A84BCC5471A709C0BC5222A8EB0089C0A178BDA8105165E4184BC907237EC20 + 54AE397C53304C479EC1F9465BAD4254150E8591B590EC2B91405D4183913F4A + A6A4020F91C8C1022A9C7A5661831752C57DEA59B9B74C25827EA5D02F714A5B + 993CC209B41A4662FF90A005E86575A8520DEE6FA73A5C2702B7B8C83DAE7289 + BB5CE13637B9CC5D2A146C4305B0FAE84751E0C2105810CEB47AF76DE6BC010B + 9AE09022D26F0313E10B16BA72BC166241094BC1827CF9A281B38056BE89B2CB + 7D45F1040A00E8210974027AE50BE0F902E30004C26F5C1A309E898CC7BF2C94 + 2F5EB4802E0263812BAA78C8438A823B166E5802F0EB427A138540D03E24125A + B8B043088CBFC248E4785DF1B0848913E1891C0C2A6E8A180FAF73CACA75CE58 + B3AD6D6D8779449989953107380114AA8AD5AA22B5C94E8EB294A74C6528F8C0 + 06D041C218C7C885AF722109FAF8AE98D7B810874862A21A7648A652F2C247B8 + 19C08F5044A6568CFF20F2BC5023D87AC58AEF753C87F8D9CF077EC2F1D8C3E0 + 2A9CB601F3540E82EE4BA1444045C355512149A153C40101B841849E4817CAC3 + 1E0D6F0A12AF982F4ABA2089229EA450144A6FAABB90158D146585E521503D4B + D5435444682792428590774D140AC54CB7147082133480821148016758853293 + AD1ADDAB4235D9CC5676B4932AEDA76E4134C1308C16B8898C08D8800B2A302B + DBCE3A6E81903B216A9C41019A308AECC4879215A0842022260A0050B4121471 + 485E073111A2648123C05050032220D18571A0712CD4DB9A54C5977419424A8D + E057C1F6139E4F16D1105D08C54B347213000DF39417E1255026512EA0606C42 + AD80E573D024E883FF931ADE8C83A43D1BD5505B88AA4C37E1B5CE8F07332422 + 0605285001513FB002A21B95E8462FFAD0998AF4A426FDE94A87FA50937E74A7 + 5B1DA9548FFAD2ABDE74A2FB000456382217C838C66D0E2109654D5B09D4CE76 + 7FACDDED6D5F7BDC7390011B64452212291D7824E2900189652212D9DC2B002B + 922A3C21941AF934673522122A308803115002A92D62E6BB66810B4F308C4514 + 5118FE51DE88A1BC6B61880378339B05EF9CBF9D2A61813C2B84E2CF129000B6 + 58AF2D0D648AF671F99222AEA48147733E0B56100AE7D57C59B730E8228C8A44 + 0487A7F39D07CA0AC3A8D53195F06D266E5DE94FCD3AD6AF7E54A9779FFB558F + B2F6B1EFE40F0C20FF470D88421562B6BC03440005AC79D698E73F031A34C1AF + 3BA11F0631A2FFD53A21A005F514FB771372A1207142011CA140B5231C87B41D + 13915833E16398941519B113F8231387107B18980A6CD2438D703BBC134948B0 + 418EC0430AB212ABB37F65115819B840C3C316EBD143B2E508038205F8D360A6 + D27CBC865E0D400587212248A001C934755AD77545788446988448B8844AD884 + 4CF8844E188545B705528002934515A731043EA20551107F70F7857207866F17 + 867257866E8402BCF32D7913267FC38659E22F7A6540ACC7115632570010016C + B24205353C34813B6BD11F92B22A13043BF9333060E2169D744994907124A55A + A740200A53329722FF2E17020978740919933FF3441874A5201FE32D90C217A1 + C047ADC02F59505F188320E915503AB86B07873CB8227DB41233264202422585 + B80885BA988BBCB88BBE988453F0758626011A501AE3B36D5A602219307F6A95 + 46D4C20521442AD7821659228D20554FC1511853A112DAF21C9C234B7AD30043 + 50281D5312DAA12647013210814AA0F070E89281AD703057810A8D121290F087 + 01B440BA36518390059C733023670B24A32D1D5326E0382E1EA329EF664F9B58 + 73F0E890FDD209ADD87CC70322619544B862223E30051FD0911EF99120199222 + 399224099245579228999226A99229390524C05599374661A50564C405F9C076 + 6598933AB9933A99FF03F6D720A348149B800AFCE6091A57321A3114F0B42DCF + F16F2183112DA11D7DE31B097000F973126FE82E8AF08E57F10423C114949479 + C151871FF126E1C22F9C801F084214BF410B2A711C8590216C19677A13125E89 + 4285C32F4D312527E31BFEC817C3E311AC38913AA71156C07EB2087D5CA06427 + 89741D59848FE9918D399992599991197591999949A89994C99996E99851E899 + 9AF9012FB9035AC01632A3050710052F7000AD813663A8936C3386B099361950 + 000DA0059F701515E05F5A72084A209798353BC6511259A005B5B33095A0053A + 7108512060D661397BA526F1E808BCF11B577140D2810814162B87400163116F + 871084B1F28114B0FF5717829C26C111070413F1F61C29B613F556148E259EB3 + B3801C0142D8D13075B11C8EE09B60B95E41469842466A1A402B3EF702CF6302 + 2CD9A00EFAA0101AA1100A05DCD304C0771A41424636E09A3CD9A11E9A9339A0 + 022FE01177F311E632211E510ABE213800821D57A22E6E9112717515D0F81BEF + 7948CFC105A4F51127B132F0644AEB426ABBD429C01058FF768811C360147513 + 97F239A774292413908F82299998091BB014227170F2B642E8F20985502E78D5 + 2EA6F41282364904AA73A05505479444C88004CE5300CA24A1725A928D39A776 + DAA02B80353F50085580045E233EC892042A8046621877B1C946D4F203604159 + 2D0531272308EF44FF48791240DE024F2B11425D9208E3F81506F316A5752F94 + 4411B20411DAF812FC221205227197A56BB06531F5B44B81C211B7C61EEF4427 + A23230115325F3065207792E3B314A547A8DF344AA98106F0CB52926C18267BA + 6B576205C4203348B018E006051D89011F60ADD87AADDA9AADD65AADDBFAADDC + 0AAE1E19AEDD2AAEE1EAADE7AAADE86AAEEC4AAEDFBA0227600303C27EC53046 + 63C50283FAA1FABA933980023C702E57C21788120AB08011F394082A01290FA1 + 1C05B9B0EFD9505352486CB29E9DDA3134B166009209B2A42E18E41188760BE5 + 21532B5A4968322E38372E5E2942DF22885A29293AB195C741491EA11F81420A + C6815E5E191C0EE2FFB1AB5549841482CBAA8306431EA7016CC9F053241092E5 + 5AAE1FB9B428E9B4DE1AB5EA0A92503BB555DBB42259B55A9BB51F30053A6003 + 36702742287DEED75B677456FB9AB639C0023B9026FD673F5A6013D8E1049C73 + 48C98341AE95054AF00916AB9B7738B19EFA129D0A165C100B3CA4A2EF031169 + 18142A91171B109C608159C4212187400500A44384308293A3B7F31112088428 + 018439786B8198D0804F7143F8E1121A724288E05A41213C413B912F110C2162 + 644EA0A045C291EEBABBEDDABBBCFBBBBE1BBCC03BBCDF3A05278002AF77A062 + 4476ADA90269FBBC396002D6321E966A0BB1F0B1867557B7909478B512AAD417 + 99D80A51D081D981FF1D07875ED0285F9E20831271897FF386BFE109828808D8 + 62097021119C7321E8C24FA6A04FFF66BD8424B27F755F57416A84011284208A + B64018F2155701E4698F4548F0DB17B1AB733C38B6B9156C5660224A26BC1E4C + BC20FCC1221CC2EB6AAD2BD045A5432141C2855FD39A67F4BCFBBAB65772118F + 601D4959449E8217293AC36951185CFA1084F111A4265ADA7211B0B0A9379A1D + 6F713C5C701457627218242E9B12A36842326B5171146131A3A012249A59E3B2 + 4AD85244D842189922C62A46254574272246253AFC62777271A255082B2409A2 + 5049F1261293C6C69BB24A8359C13B080C1AF08340F802437002BA8B01889CC8 + D79AC88CDCC88EFCFFC8901CC98B1CC9945CC9967CC988BCC831C00EEF900457 + F0C94B300113F0C942F00530BCAF19600F5C7000AB9C045FC6CAABFC65ABFC0E + B3CCCAEF70CBB18CCBBAFC0E67D7CAA7B542361C6F8D733C43601E78FCB1EB71 + 26338A382453122C7A821E3B1422E1B28DA005F6600FB88CCDB7BCCDB6CCCDDE + ACCDDBACCDD70C0FE42CCEE51CCE9DECC713095A12C05BC0E604B8E218D4DAC8 + 935CCF8A7CCF998CCFD89ACFFCBCCFFE6CCFFD0CD0FFACCF025DD004CDC82BE0 + 03685844D0771AB955003470CA1FAA023280BAFE333C4BEC9D9E4A58B85050F6 + B3322B24B8E5CB09778C607B959B6E910958109F295D488DCB7F247715C3B613 + 69E8AC48C11114C0FF056061602BD4D3118617C0FCD309F7D33E3D5F12C6D347 + 9D7046DDD33FB1129EBA0AEA4C918FB0A6C7A0182592BB989CD55ABDD55CDDD5 + 5AADD0EEB32988A904C3E69A3920D13C49023FF0AF82B12131EB17AEE52E0EB2 + 386F116FE86BCC0F813104430A023CAC1C5B27325512540226FE91D71B3D46BA + A021B0A2D898850B8C1D40E061612B36A0512D6406E33DC6147DC9A00C1BE9D5 + 9EFDD9A01DDA8CFC010ACD0395167DB7521A118DD63A592D0CE61B2A4A43A865 + BE4A7C825369211F6D58B9211C7861200770B9859126EFD68D2B614FCD2C5366 + 4211F6A42E93C48EEC580141721FCC5759A9B3807B75DD1851202468DD3A515A + 83C1B869165ADD5BFFD916FC32C660BBAA4D0288BC0018C0DEEEDDDEF0FDDEEB + FDC8EFCDDEF37DDFF03DDFF29DDFF1CDDFF6EDDFFD8DDFFF3DE0895CDFFDFDDE + 098D0241001630E3D04AA0046473D6AC2D773370023BD08A2C241CF2B538F542 + 959807788B085081D2D273D51D8930CD9D33D8E482329640957C470143002717 + E6722ED738367EE36981173A8EE308A7E378D1E3D6611D3D3ECC69711D3C9ED1 + E4DD8AA6803CB77B0CC310C81A390595FCDF964CE0946CE5914CE505BEE58EAC + E5024EDF97FC013A0002D9923CB22884AB21E1135E0224600345A08319EE1D2A + 9A163AE1DB1A719E0AF21CF0A32056A2048EC5284850AC820B002492E78330D3 + 83603066729EDE84FF141BB6D4901EE9923EE9945E63495DD40997E484391EA7 + E87362B5A1276002073EEA065EEAA47EEAA69EEAA8BEEAAADEEAAB6EBC209026 + ED2C224EA09ACBB8E625D0AF6FBD6B713E68E8B597D2491367E24771120AFC94 + 2604FB4BA134A514334937010BF91B09AFE7A77092B134249DC523DB8FED17A5 + A5E9B2AB111AA03C23A2A03F25E5A6FEE5AEEEEAFA0DE0FB9DEEA7BEEEAA0EEF + 010EDF5E0B0287C0037D3A3E621533828AEBEAC6D6685A6F0D3643BE91D284BB + 2DAE1A28FCE62D81A2B8940831B7162199183049EA08DFA885326E8E7D1318DB + CE21DA4E58B7EDED845952C52822646D056393B40BB0F22BDFDE2DCFF230EFF2 + EEFDF2343FF3362FFFF3321FF32C8FF33BDFF335CFF33FEFF3372FF42E1F0316 + 2EDC637DBB2C60CA139E03EBA6832266122D44F0B75D95C63C5774780907D31D + 939795A9A42E8F0826515108383708DB56ED773339892DDB6BAFED6E7FEDDCDE + F1226FD946940CD2370C8C5100EA9DEE2FCFEA7E5FEA7DEFEE82FFF7A41EF818 + C03E178E5E5460B4D447364D3F5E702EF02465300D53F526DD3159B0E7219E00 + 2C0DDB1400806E4101133B1894A00400C43B83107C824B09638541191B206FFF + F620CF7CB710FB70EF0B0535F7134964D944EB48F03C2AF001303FFCC44FFC39 + 5FFCC89FFCCABFFCCCDFFC368FFCF4FEF48B7A91B4F8C268BDB656F0E61B22F7 + BD10F58870626F31FFCC1868F572A82EFCF6115C893840FAF518F788CC0E582B + 0E008DBEE4CD89538555FB80C1FDBA5F5B3F0108595448145A2F14881A4E2834 + 24310B0B189091939290969492989B959D979E949FA2A1A49C93A098A7A6A595 + 2405321B1B58544A88144A8B343325BCBD250ABEBDC0BC39343F58B1C9CAB11C + 00CECE1C1BCFD3D4D50015C8001B0915CECC5DD1CF580754CE5855CE09E800E7 + DD584FDD005509005D4FF400540DCE55FB000DFEFA396BF0245D166715A244F1 + 86A599B469C9AC419448B1A2C58B18336ADCC891A3340E1C1248A8A5A5102225 + 5A50B05091EA94CB973063CA9C49B3E6821A3471DA844902850C001C66D9BA45 + 0145861CC1922A2DB2A1C267B88750A1816BD6F119B68F58B03C6356A1421769 + 09B854C9FAA459B3040DB048E87636CB397A6CB3A0DD47F55E8282F5FE354870 + 905996B409B40CF196E0613569CB126B445CB5B1E3C79023F7B8AB01E550242F + 6C1C383165A7E7CFA0438BA619C307889FDBA838B1E5C44681A34B63E7C880A2 + EC62C31CAF6AE3B63559D00AB20EA055D2EC2B582DCDBAB953422F5A71250781 + C60280A49C73691A34D4632C0109002B11183A3C1CB9FC56008100003B} + end + end +end diff --git a/Cliente/uSplash.pas b/Cliente/uSplash.pas new file mode 100644 index 0000000..d579465 --- /dev/null +++ b/Cliente/uSplash.pas @@ -0,0 +1,56 @@ +unit uSplash; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, ExtCtrls, JvGIF, StdCtrls; + +type + TSplashScreen = class(TForm) + Panel1: TPanel; + lblTexto: TLabel; + Image1: TImage; + procedure Image1Click(Sender: TObject); + private + function GetTexto: String; + procedure SetTexto(const Value: String); + { Private declarations } + public + property Texto : String read GetTexto write SetTexto; + procedure ShowAsAbout; + end; + +var + SplashScreen: TSplashScreen; + +implementation + +{$R *.dfm} + +{ TSplashScreen } + +procedure TSplashScreen.ShowAsAbout; +begin + Image1.OnClick := Image1Click; + ShowModal; +end; + +procedure TSplashScreen.Image1Click(Sender: TObject); +begin + Close; +end; + +function TSplashScreen.GetTexto: String; +begin + Result := lblTexto.Caption; + +end; + +procedure TSplashScreen.SetTexto(const Value: String); +begin + lblTexto.Caption := Value; + Self.Update; +end; + +end. diff --git a/DataAbstract_D7/DataAbstract_D7.cfg b/DataAbstract_D7/DataAbstract_D7.cfg new file mode 100644 index 0000000..4da8cac --- /dev/null +++ b/DataAbstract_D7/DataAbstract_D7.cfg @@ -0,0 +1,44 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-GD +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-LE"c:\archivos de programa\borland\delphi7\Projects\Bpl" +-LN"c:\archivos de programa\borland\delphi7\Projects\Bpl" +-U"C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap" +-O"C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap" +-I"C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap" +-R"C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap" +-Z +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/DataAbstract_D7/DataAbstract_D7.dof b/DataAbstract_D7/DataAbstract_D7.dof new file mode 100644 index 0000000..37baa3c --- /dev/null +++ b/DataAbstract_D7/DataAbstract_D7.dof @@ -0,0 +1,492 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=3 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODEC;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\RODX;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\CodeGen;C:\Archivos de programa\RemObjects Software\RemObjects SDK for Delphi\Source\DataSnap +Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;cxLibraryVCLD7;cxEditorsVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxPageControlVCLD7;cxGridVCLD7;cxTreeListVCLD7;cxSchedulerVCLD7;TMSD7;PNGImageD7;mxProtector_d7;CEToolsPkgd7;FR7;FRIBX7 +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[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=3082 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[Excluded Packages] +c:\archivos de programa\borland\delphi7\Bin\designdgm70.bpl=Borland Module Diagram Editview +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxPSCoreD7.bpl=ExpressPrinting System by Developer Express Inc. +D:\Proyectos\Componentes\cxGridTools\Lib\D7\xcxGridConfigPkg7.bpl=xcxGridTools - Config Dialog +D:\Proyectos\Componentes\cxGridTools\Lib\D7\xcxGridSummaryConfig7.bpl=xcxGridTools - Summary Config +D:\Proyectos\Componentes\cxGridTools\Lib\D7\xcxGridEnhancedPropertiesStorePkg7.bpl=xcxGridTools - Enhanced Grid Properties Store +D:\Proyectos\Componentes\cxGridTools\Lib\D7\xcxGridQuickSearch7.bpl=xcxGridTools - Quick Search +D:\Proyectos\Componentes\cxGridTools\Lib\D7\xcxGridActionsPkg7.bpl=xcxGridTools - Actions +c:\archivos de programa\borland\delphi7\Projects\Bpl\NextBaseD7.bpl=(untitled) +c:\archivos de programa\borland\delphi7\Projects\Bpl\NextCollectionD7.bpl=(untitled) +c:\archivos de programa\borland\delphi7\Projects\Bpl\NextAddOnsD7.bpl=(untitled) +c:\archivos de programa\borland\delphi7\Projects\Bpl\NextTBXD7.bpl=(untitled) +c:\archivos de programa\borland\delphi7\Projects\Bpl\NextGridD7.bpl=(untitled) +c:\archivos de programa\borland\delphi7\Projects\Bpl\RodaxFrameD7.bpl=Frames Acana (D7) +[HistoryLists\hlDebugSourcePath] +Count=2 +Item0=D:\Proyectos\Componentes\GUISDK\Sources\;D:\Proyectos\Componentes\PluginSDK\Source\;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Cliente;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Reglas +Item1=.\ +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=4 +Item0=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas +Item1=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\..\Obras\Cliente;..\..\Facturas de cliente\Cliente;..\..\Contactos\Cliente;..\..\Documentos asociados;..\..\Recibos\Cliente +Item2=$(DELPHI)\Lib\Debug;E:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\..\..\GUISDK\lib\d7;..\..\Contactos\Cliente;..\..\Documentos asociados;..\Reglas +Item3=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=.\ +[HistoryLists\hlOutputDirectorry] +Count=1 +Item0=..\Output\Cliente +[HistoryLists\hlBPLOutput] +Count=1 +Item0=..\..\..\Output\Cliente +[HistoryLists\hlDCPOutput] +Count=1 +Item0=.\ +[Exception Log] +EurekaLog Version=501 +Activate=1 +Activate Handle=1 +Save Log File=1 +Foreground Tab=0 +Freeze Activate=0 +Freeze Timeout=60 +Freeze Message=The application seems to be frozen. +SMTP From=eurekalog@email.com +SMTP Host= +SMTP Port=25 +SMTP UserID= +SMTP Password= +Append to Log=0 +Show TerminateBtn=1 +TerminateBtn Operation=1 +Errors Number=32 +Errors Terminate=3 +Email Address= +Email Object= +Email Send Options=0 +Output Path= +Encrypt Password= +AutoCloseDialogSecs=0 +WebSendMode=0 +SupportULR= +HTMLLayout Count=15 +HTMLLine0="%3Chtml%3E" +HTMLLine1=" %3Chead%3E" +HTMLLine2=" %3C/head%3E" +HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E" +HTMLLine4=" %3Ctable width="100%%" border="0"%3E" +HTMLLine5=" %3Ctr%3E" +HTMLLine6=" %3Ctd nowrap%3E" +HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E" +HTMLLine8=" %3C%%HTML_TAG%%%3E" +HTMLLine9=" %3C/font%3E" +HTMLLine10=" %3C/td%3E" +HTMLLine11=" %3C/tr%3E" +HTMLLine12=" %3C/table%3E" +HTMLLine13=" %3C/body%3E" +HTMLLine14="%3C/html%3E" +AutoCrashOperation=1 +AutoCrashNumber=10 +AutoCrashMinutes=1 +WebURL= +WebUserID= +WebPassword= +WebPort=0 +AttachedFiles= +Count=0 +EMail Message Line Count=0 +loNoDuplicateErrors=0 +loAppendReproduceText=0 +loDeleteLogAtVersionChange=0 +loAddComputerNameInLogFileName=0 +loSaveModulesSection=1 +loSaveCPUSection=1 +soAppStartDate=1 +soAppName=1 +soAppVersionNumber=1 +soAppParameters=1 +soAppCompilationDate=1 +soExcDate=1 +soExcAddress=1 +soExcModule=1 +soExcType=1 +soExcMessage=1 +soActCtlsFormClass=1 +soActCtlsFormText=1 +soActCtlsControlClass=1 +soActCtlsControlText=1 +soCmpName=1 +soCmpUser=1 +soCmpTotalMemory=1 +soCmpFreeMemory=1 +soCmpTotalDisk=1 +soCmpFreeDisk=1 +soCmpSysUpTime=1 +soCmpProcessor=1 +soCmpDisplayMode=1 +soOSType=1 +soOSBuildN=1 +soOSUpdate=1 +soOSLanguage=1 +soNetIP=1 +soNetSubmask=1 +soNetGateway=1 +soNetDNS1=1 +soNetDNS2=1 +soNetDHCP=1 +sndShowSendDialog=1 +sndShowSuccessFailureMsg=0 +sndSendEntireLog=0 +sndSendXMLLogCopy=0 +sndSendScreenshot=1 +sndUseOnlyActiveWindow=0 +sndSendLastHTMLPage=1 +sndSendInSeparatedThread=0 +sndAddDateInFileName=0 +sndCompressAllFiles=0 +edoShowExceptionDialog=1 +edoSendEmailChecked=1 +edoAttachScreenshotChecked=1 +edoShowCopyToClipOption=1 +edoShowDetailsButton=1 +edoShowInDetailedMode=0 +edoShowInTopMostMode=0 +edoUseEurekaLogLookAndFeel=0 +csoShowDLLs=1 +csoShowBPLs=1 +csoShowBorlandThreads=1 +csoShowWindowsThreads=1 +csoShowProcedureOffset=0 +boActivateCrashDetection=0 +boPauseBorlandThreads=0 +boDoNotPauseMainThread=0 +boPauseWindowsThreads=0 +boUseMainModuleOptions=1 +boCopyLogInCaseOfError=1 +boSaveCompressedCopyInCaseOfError=0 +Count mtInformationMsgCaption=1 +mtInformationMsgCaption0="Information." +Count mtQuestionMsgCaption=1 +mtQuestionMsgCaption0="Question." +Count mtDialog_Caption=1 +mtDialog_Caption0="Error." +Count mtDialog_ErrorMsgCaption=2 +mtDialog_ErrorMsgCaption0="An error has occurred during program execution." +mtDialog_ErrorMsgCaption1="Please read the following information for further details." +Count mtDialog_GeneralCaption=1 +mtDialog_GeneralCaption0="General" +Count mtDialog_GeneralHeader=1 +mtDialog_GeneralHeader0="General Information" +Count mtDialog_CallStackCaption=1 +mtDialog_CallStackCaption0="Call Stack" +Count mtDialog_CallStackHeader=1 +mtDialog_CallStackHeader0="Call Stack Information" +Count mtDialog_ModulesCaption=1 +mtDialog_ModulesCaption0="Modules" +Count mtDialog_ModulesHeader=1 +mtDialog_ModulesHeader0="Modules Information" +Count mtDialog_CPUCaption=1 +mtDialog_CPUCaption0="CPU" +Count mtDialog_CPUHeader=1 +mtDialog_CPUHeader0="CPU Information" +Count mtDialog_CustomDataCaption=1 +mtDialog_CustomDataCaption0="Other" +Count mtDialog_CustomDataHeader=1 +mtDialog_CustomDataHeader0="Other Information" +Count mtDialog_OKButtonCaption=1 +mtDialog_OKButtonCaption0="&OK" +Count mtDialog_TerminateButtonCaption=1 +mtDialog_TerminateButtonCaption0="&Terminate" +Count mtDialog_RestartButtonCaption=1 +mtDialog_RestartButtonCaption0="&Restart" +Count mtDialog_DetailsButtonCaption=1 +mtDialog_DetailsButtonCaption0="&Details" +Count mtDialog_SendMessage=1 +mtDialog_SendMessage0="&Send this error via Internet" +Count mtDialog_ScreenshotMessage=1 +mtDialog_ScreenshotMessage0="&Attach a Screenshot image" +Count mtDialog_CopyMessage=1 +mtDialog_CopyMessage0="&Copy to Clipboard" +Count mtDialog_SupportMessage=1 +mtDialog_SupportMessage0="Go to the Support Page" +Count mtLog_AppHeader=1 +mtLog_AppHeader0="Application" +Count mtLog_AppStartDate=1 +mtLog_AppStartDate0="Start Date" +Count mtLog_AppName=1 +mtLog_AppName0="Name/Description" +Count mtLog_AppVersionNumber=1 +mtLog_AppVersionNumber0="Version Number" +Count mtLog_AppParameters=1 +mtLog_AppParameters0="Parameters" +Count mtLog_AppCompilationDate=1 +mtLog_AppCompilationDate0="Compilation Date" +Count mtLog_ExcHeader=1 +mtLog_ExcHeader0="Exception" +Count mtLog_ExcDate=1 +mtLog_ExcDate0="Date" +Count mtLog_ExcAddress=1 +mtLog_ExcAddress0="Address" +Count mtLog_ExcModule=1 +mtLog_ExcModule0="Module" +Count mtLog_ExcType=1 +mtLog_ExcType0="Type" +Count mtLog_ExcMessage=1 +mtLog_ExcMessage0="Message" +Count mtLog_ActCtrlsHeader=1 +mtLog_ActCtrlsHeader0="Active Controls" +Count mtLog_ActCtrlsFormClass=1 +mtLog_ActCtrlsFormClass0="Form Class" +Count mtLog_ActCtrlsFormText=1 +mtLog_ActCtrlsFormText0="Form Text" +Count mtLog_ActCtrlsControlClass=1 +mtLog_ActCtrlsControlClass0="Control Class" +Count mtLog_ActCtrlsControlText=1 +mtLog_ActCtrlsControlText0="Control Text" +Count mtLog_CmpHeader=1 +mtLog_CmpHeader0="Computer" +Count mtLog_CmpName=1 +mtLog_CmpName0="Name" +Count mtLog_CmpUser=1 +mtLog_CmpUser0="User" +Count mtLog_CmpTotalMemory=1 +mtLog_CmpTotalMemory0="Total Memory" +Count mtLog_CmpFreeMemory=1 +mtLog_CmpFreeMemory0="Free Memory" +Count mtLog_CmpTotalDisk=1 +mtLog_CmpTotalDisk0="Total Disk" +Count mtLog_CmpFreeDisk=1 +mtLog_CmpFreeDisk0="Free Disk" +Count mtLog_CmpSystemUpTime=1 +mtLog_CmpSystemUpTime0="System Up Time" +Count mtLog_CmpProcessor=1 +mtLog_CmpProcessor0="Processor" +Count mtLog_CmpDisplayMode=1 +mtLog_CmpDisplayMode0="Display Mode" +Count mtLog_OSHeader=1 +mtLog_OSHeader0="Operating System" +Count mtLog_OSType=1 +mtLog_OSType0="Type" +Count mtLog_OSBuildN=1 +mtLog_OSBuildN0="Build #" +Count mtLog_OSUpdate=1 +mtLog_OSUpdate0="Update" +Count mtLog_OSLanguage=1 +mtLog_OSLanguage0="Language" +Count mtLog_NetHeader=1 +mtLog_NetHeader0="Network" +Count mtLog_NetIP=1 +mtLog_NetIP0="IP Address" +Count mtLog_NetSubmask=1 +mtLog_NetSubmask0="Submask" +Count mtLog_NetGateway=1 +mtLog_NetGateway0="Gateway" +Count mtLog_NetDNS1=1 +mtLog_NetDNS10="DNS 1" +Count mtLog_NetDNS2=1 +mtLog_NetDNS20="DNS 2" +Count mtLog_NetDHCP=1 +mtLog_NetDHCP0="DHCP" +Count mtLog_CustInfoHeader=1 +mtLog_CustInfoHeader0="Custom Information" +Count mtCallStack_Address=1 +mtCallStack_Address0="Address" +Count mtCallStack_Name=1 +mtCallStack_Name0="Module" +Count mtCallStack_Unit=1 +mtCallStack_Unit0="Unit" +Count mtCallStack_Class=1 +mtCallStack_Class0="Class" +Count mtCallStack_Procedure=1 +mtCallStack_Procedure0="Procedure/Method" +Count mtCallStack_Line=1 +mtCallStack_Line0="Line" +Count mtCallStack_MainThread=1 +mtCallStack_MainThread0="Main" +Count mtCallStack_ExceptionThread=1 +mtCallStack_ExceptionThread0="Exception Thread" +Count mtCallStack_RunningThread=1 +mtCallStack_RunningThread0="Running Thread" +Count mtCallStack_CallingThread=1 +mtCallStack_CallingThread0="Calling Thread" +Count mtCallStack_ThreadID=1 +mtCallStack_ThreadID0="ID" +Count mtCallStack_ThreadPriority=1 +mtCallStack_ThreadPriority0="Priority" +Count mtCallStack_ThreadClass=1 +mtCallStack_ThreadClass0="Class" +Count mtSendDialog_Caption=1 +mtSendDialog_Caption0="Send." +Count mtSendDialog_Message=1 +mtSendDialog_Message0="Message" +Count mtSendDialog_Resolving=1 +mtSendDialog_Resolving0="Resolving DNS..." +Count mtSendDialog_Connecting=1 +mtSendDialog_Connecting0="Connecting with server..." +Count mtSendDialog_Connected=1 +mtSendDialog_Connected0="Connected with server." +Count mtSendDialog_Sending=1 +mtSendDialog_Sending0="Sending message..." +Count mtReproduceDialog_Caption=1 +mtReproduceDialog_Caption0="Request" +Count mtReproduceDialog_Request=1 +mtReproduceDialog_Request0="Please describe the steps to reproduce the error:" +Count mtReproduceDialog_OKButtonCaption=1 +mtReproduceDialog_OKButtonCaption0="&OK" +Count mtModules_Handle=1 +mtModules_Handle0="Handle" +Count mtModules_Name=1 +mtModules_Name0="Name" +Count mtModules_Description=1 +mtModules_Description0="Description" +Count mtModules_Version=1 +mtModules_Version0="Version" +Count mtModules_Size=1 +mtModules_Size0="Size" +Count mtModules_LastModified=1 +mtModules_LastModified0="Modified" +Count mtModules_Path=1 +mtModules_Path0="Path" +Count mtCPU_Registers=1 +mtCPU_Registers0="Registers" +Count mtCPU_Stack=1 +mtCPU_Stack0="Stack" +Count mtCPU_MemoryDump=1 +mtCPU_MemoryDump0="Memory Dump" +Count mtSend_SuccessMsg=1 +mtSend_SuccessMsg0="The message was sent successfully." +Count mtSend_FailureMsg=1 +mtSend_FailureMsg0="Sorry, sending the message didn't work." + + diff --git a/DataAbstract_D7/DataAbstract_D7.dpk b/DataAbstract_D7/DataAbstract_D7.dpk new file mode 100644 index 0000000..9937e25 --- /dev/null +++ b/DataAbstract_D7/DataAbstract_D7.dpk @@ -0,0 +1,56 @@ +package DataAbstract_D7; + +{$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 OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + vcl, + rtl, + dbrtl, + dsnap; + +contains + uDADataTable, + uDABINAdapter, + uDAScriptingProvider, + uDACDSDataTable, + uDARegExpr, + uDAInterfaces, + uDARes, + uDAClasses, + uDAEngine, + uDAHelpers, + uDAInterfacesEx, + uDAMacros, + uDAUtils, + uDADriverManager, + uDASupportClasses, + uDAXMLUtils, + DataAbstract_Intf, + uDAClientDataModule, + uDABusinessProcessor, + uDAOracleInterfaces; + +end. diff --git a/DataAbstract_D7/DataAbstract_D7.drc b/DataAbstract_D7/DataAbstract_D7.drc new file mode 100644 index 0000000..04b8dcc --- /dev/null +++ b/DataAbstract_D7/DataAbstract_D7.drc @@ -0,0 +1,400 @@ +/* VER150 + Generated by the Borland Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +#define uDARes_err_ExecuteSQLCommandNotAllowed 65328 +#define uDARes_err_FieldIsNotBound 65344 +#define uDARes_err_CannotFindField 65345 +#define uDARes_err_LoadPackageFailed 65346 +#define uDARes_err_InvalidDriverReference 65347 +#define uDARes_err_CannotFindStatement 65348 +#define uDARes_err_CannotFindDefaultItem 65349 +#define uDARes_err_PoolIsNotEmpty 65350 +#define uDARes_err_MaxPoolSizeReached 65351 +#define uDARes_err_CannotAccessThisProperty 65352 +#define uDARes_err_LAMEDataset 65353 +#define uDARes_err_DARDMInvalidSchema 65354 +#define uDARes_err_DARDMMissingConnectionName 65355 +#define uDARes_err_DARDMUnassignedAdapter 65356 +#define uDARes_err_DARDMConnectionIsNotAssigned 65357 +#define uDARes_err_DARDMCannotFindProxessorForDelta 65358 +#define uDARes_err_NeedShareMem 65359 +#define uDARes_err_DriverManagerNotAssigned 65360 +#define uDARes_err_ConnectionManagerNotAssigned 65361 +#define uDARes_err_FieldTypeNotSupported 65362 +#define uDARes_err_NotSupported 65363 +#define uDARes_err_DataTypeNotSupportedByRemoteRequest 65364 +#define uDARes_err_InvalidDataset 65365 +#define uDARes_err_CannotMakeNILDefault 65366 +#define uDARes_err_DifferentOwnerCollection 65367 +#define uDARes_err_CannotFindItem 65368 +#define uDARes_err_InvalidCollectionType 65369 +#define uDARes_err_InvalidOwner 65370 +#define uDARes_err_DriverAlreadyLoaded 65371 +#define uDARes_err_DriverIsNotLoaded 65372 +#define uDARes_err_InvalidDLL 65373 +#define uDARes_err_UnknownDriver 65374 +#define uDARes_err_UnknownParameter 65375 +#define uRODECConst_sInvalidCalc 65376 +#define uRODECConst_sInvalidDictionary 65377 +#define uRODECConst_sOTPIdent 65378 +#define uRODECConst_sOTPExt 65379 +#define uRODECConst_sOTPWord 65380 +#define uRODECConst_sOTPHex 65381 +#define uRODECConst_sSKeyIdent 65382 +#define uDARes_err_ChangeLogAlreadyStarted 65383 +#define uDARes_err_NotAttachedToDataTable 65384 +#define uDARes_err_DeltaAttachedToDataTable 65385 +#define uDARes_err_DriverProcAlreadyRegistered 65386 +#define uDARes_err_DriverManagerNotCreated 65387 +#define uDARes_err_DriverManagerAlreadyCreated 65388 +#define uDARes_err_DatasetNotAssigned 65389 +#define uDARes_err_VariantNotSupported 65390 +#define uDARes_err_InvalidDestination 65391 +#define uRODECConst_sLoadFail 65392 +#define uRODECConst_sParams 65393 +#define uRODECConst_sJacobi 65394 +#define uRODECConst_sSPPrime 65395 +#define uRODECConst_sSetPrime 65396 +#define uRODECConst_sSetPrimeSize 65397 +#define uRODECConst_sSetPrimeParam 65398 +#define uRODECConst_sSqrt 65399 +#define uRODECConst_sExpMod 65400 +#define uRODECConst_sCalcName 65401 +#define uRODECConst_sInvalidState 65402 +#define uRODECConst_sIDOutOfRange 65403 +#define uRODECConst_sInvalidZIPData 65404 +#define uRODECConst_sInvalidChallenge 65405 +#define uRODECConst_sInvalidPassword 65406 +#define uRODECConst_sInvalidSeed 65407 +#define uRODECConst_sNotInitialized 65408 +#define uRODECConst_sInvalidMACMode 65409 +#define uRODECConst_sCantCalc 65410 +#define uRODECConst_sInvalidRandomStream 65411 +#define uRODECConst_sRandomDataProtected 65412 +#define uRODECConst_sBBSnotSeekable 65413 +#define uRODECConst_sBigNumDestroy 65414 +#define uRODECConst_sIndexOutOfRange 65415 +#define uRODECConst_sBigNumAborted 65416 +#define uRODECConst_sErrGeneric 65417 +#define uRODECConst_sErrAsInteger 65418 +#define uRODECConst_sErrAsComp 65419 +#define uRODECConst_sErrAsFloat 65420 +#define uRODECConst_sNumberFormat 65421 +#define uRODECConst_sDivByZero 65422 +#define uRODECConst_sStackIndex 65423 +#define uRORes_err_UnknownMessageType 65424 +#define uRORes_err_MasterServerNeedsChannel 65425 +#define uRORes_err_StreamIsReadOnly 65426 +#define uRODECConst_sProtectionCircular 65427 +#define uRODECConst_sStringFormatExists 65428 +#define uRODECConst_sInvalidStringFormat 65429 +#define uRODECConst_sInvalidFormatString 65430 +#define uRODECConst_sFMT_COPY 65431 +#define uRODECConst_sFMT_HEX 65432 +#define uRODECConst_sFMT_HEXL 65433 +#define uRODECConst_sFMT_MIME64 65434 +#define uRODECConst_sFMT_UU 65435 +#define uRODECConst_sFMT_XX 65436 +#define uRODECConst_sInvalidKey 65437 +#define uRODECConst_sInvalidCRC 65438 +#define uRODECConst_sInvalidKeySize 65439 +#define uRORes_err_CannotLoadXMLDocument 65440 +#define uRORes_err_ErrorCreatingMsXmlDoc 65441 +#define uRORes_err_NoXMLParsersAvailable 65442 +#define uRORes_err_IDispatchMarshalingNotSupported 65443 +#define uRORes_err_UnsupportedVariantType 65444 +#define uRORes_err_InvalidBinaryFormat 65445 +#define uRORes_err_VariantIsNotArray 65446 +#define uRORes_err_InvalidVarArrayDimCount 65447 +#define uRORes_err_CannotFindParameter 65448 +#define uRORes_err_CannotFindService 65449 +#define uRORes_err_RODLResourceNotLoaded 65450 +#define uRORes_err_MayNotAddResult 65451 +#define uRORes_err_OperationNameNeedsServiceName 65452 +#define uRORes_err_ServiceNameIsNotSet 65453 +#define uRORes_err_EventReceivedNotConnectedToMessage 65454 +#define uRORes_err_MessageNotAssigned 65455 +#define uRORes_err_MessagePropertyMustBeSet 65456 +#define uRORes_err_WinMessageFailed 65457 +#define uRORes_err_UnexpectedWinINetProblem 65458 +#define uRORes_err_CommunicationWithServerTimedOut 65459 +#define uRORes_err_CannotConnectToServer 65460 +#define uRORes_err_ConnectionError 65461 +#define uRORes_err_PoolSizeMustBe1orHigher 65462 +#define uRORes_err_NoFreeObjectsInPool 65463 +#define uRORes_msg_NoMultipleDispatchers 65464 +#define uRORes_err_InvalidStorage 65465 +#define uRORes_err_ErrorConvertingFloat 65466 +#define uRORes_err_SessionNotFound 65467 +#define uRORes_err_ChannelDoesntSupportIROMetadataReader 65468 +#define uRORes_err_TooManySessions 65469 +#define uRORes_err_DOMElementIsNIL 65470 +#define uRORes_err_IndexOutOfBounds 65471 +#define uRORes_err_CannotAssignClass 65472 +#define uRORes_err_ChannelBusy 65473 +#define uRORes_err_DesignTimeProperty 65474 +#define uRORes_err_ExpectedParameterNotFound 65475 +#define uRORes_err_AmbigousResponse 65476 +#define uRORes_err_InvalidEnvelope 65477 +#define uRORes_err_InvalidData 65478 +#define uRORes_inf_InvalidEnvelopeNode 65479 +#define uRORes_inf_AbsentBody 65480 +#define uRORes_inf_AbsentMessage 65481 +#define uRORes_err_ArrayIndexOutOfBounds 65482 +#define uRORes_err_InvalidHeader 65483 +#define uRORes_err_UnknownClassInStream 65484 +#define uRORes_err_UnexpectedClassInStream 65485 +#define uRORes_err_InvalidDateTimeReadFromStream 65486 +#define uRORes_err_CannotFindServer 65487 +#define uRORes_err_ParameterNotFound 65488 +#define uRORes_err_NotImplemented 65489 +#define uRORes_err_TypeNotSupported 65490 +#define uRORes_err_ClassFactoryNotFound 65491 +#define uRORes_err_UnspecifiedTargetURL 65492 +#define uRORes_err_IROMessageNotSupported 65493 +#define uRORes_err_ClassAlreadyRegistered 65494 +#define uRORes_err_UnknownClass 65495 +#define uRORes_err_UnknownProxyInterface 65496 +#define uRORes_err_UnknownTransportChannelClass 65497 +#define uRORes_err_UnknownMessageClass 65498 +#define uRORes_err_DispatcherAlreadyAssigned 65499 +#define uRORes_err_CannotFindMessageDispatcher 65500 +#define uRORes_err_ServerOnlySupportsOneDispatcher 65501 +#define uRORes_err_UnhandledException 65502 +#define uRORes_err_CannotReadRODLWithoutChannel 65503 +#define uRORes_err_RodlNoStructElementsDefined 65504 +#define uRORes_err_RodlNoOperationsDefined 65505 +#define uRORes_err_RodlUsedFileDoesNotExist 65506 +#define uRORes_err_RodlInvalidDataType 65507 +#define uRORes_err_RodlStructCannotBeNested 65508 +#define uRORes_err_RodlInvalidAncestorType 65509 +#define uRORes_err_UnspecifiedRODLLocation 65510 +#define uRORes_str_ExceptionOnServer 65511 +#define uRORes_str_ExceptionReraisedFromServer 65512 +#define uRORes_err_AssignError 65513 +#define uRORes_err_InvalidRequestStream 65514 +#define uRORes_err_NILMessage 65515 +#define uRORes_err_UnspecifiedInterface 65516 +#define uRORes_err_UnspecifiedMessage 65517 +#define uRORes_err_UnknownMethod 65518 +#define uRORes_err_ClassFactoryDidNotReturnInstance 65519 +#define uRORes_err_InvalidIndex 65520 +#define uRORes_err_InvalidType 65521 +#define uRORes_err_InvalidLibrary 65522 +#define uRORes_err_InvalidStream 65523 +#define uRORes_err_InvalidTargetEntity 65524 +#define uRORes_err_InvalidParamFlag 65525 +#define uRORes_err_InvalidStringLength 65526 +#define uRORes_err_InvalidBinaryLength 65527 +#define uRORes_str_InvalidClassTypeInStream 65528 +#define uRORes_err_ObjectExpectedInStream 65529 +#define uRORes_err_UnexpectedEndOfStream 65530 +#define uRORes_err_MessageClassMustImplementAssign 65531 +#define uRORes_err_InvalidInfo 65532 +#define uRORes_err_RodlDuplicateName 65533 +#define uRORes_err_RodlNoDataTypeSpecified 65534 +#define uRORes_err_RodlNoEnumValues 65535 +STRINGTABLE +BEGIN + uDARes_err_ExecuteSQLCommandNotAllowed, "ExecuteSQLCommand is not enabled for this server." + uDARes_err_FieldIsNotBound, "Field is not bound" + uDARes_err_CannotFindField, "Cannot find field %s" + uDARes_err_LoadPackageFailed, "LoadPackage failed for file %s" + uDARes_err_InvalidDriverReference, "The driver in %s could not be loaded" + uDARes_err_CannotFindStatement, "Cannot find statement %s for connection %s" + uDARes_err_CannotFindDefaultItem, "Cannot find default %s" + uDARes_err_PoolIsNotEmpty, "Cannot perform this operation when connections are pooled" + uDARes_err_MaxPoolSizeReached, "Maximum pool size reached. Cannot create a new connection" + uDARes_err_CannotAccessThisProperty, "Cannot access this property with the current DataType value" + uDARes_err_LAMEDataset, "%s does not implement IProviderSupport or implements it incorrectly" + uDARes_err_DARDMInvalidSchema, "Schema must be assigned and must point to a ConnectionManager" + uDARes_err_DARDMMissingConnectionName, "Cannot acquire a connection without a ConnectionName or a OnBeforeAcquireConnection event handler" + uDARes_err_DARDMUnassignedAdapter, "DataAdapter is not assigned" + uDARes_err_DARDMConnectionIsNotAssigned, "Connection is not assigned" + uDARes_err_DARDMCannotFindProxessorForDelta, "Cannot find a business processor for delta \"%s\"" + uDARes_err_NeedShareMem, "To use dynamically loaded drivers, you must build your application with ShareMem." + uDARes_err_DriverManagerNotAssigned, "Driver Manager is not assigned" + uDARes_err_ConnectionManagerNotAssigned, "Connection Manager is not assigned" + uDARes_err_FieldTypeNotSupported, "FieldType %s (%d) is not supported" + uDARes_err_NotSupported, "Not supported" + uDARes_err_DataTypeNotSupportedByRemoteRequest, "DataType is not supported by RemoteRequest" + uDARes_err_InvalidDataset, "Invalid or NIL dataset" + uDARes_err_CannotMakeNILDefault, "Cannot set NIL" + uDARes_err_DifferentOwnerCollection, "The connection definition is not owned by this collection" + uDARes_err_CannotFindItem, "Cannot find %s \"%s\" in collection of type %s" + uDARes_err_InvalidCollectionType, "Invalid collection type" + uDARes_err_InvalidOwner, "Invalid owner" + uDARes_err_DriverAlreadyLoaded, "Driver %s is already loaded" + uDARes_err_DriverIsNotLoaded, "Driver %s was not loaded" + uDARes_err_InvalidDLL, "%s is not a valid Data Abstract driver" + uDARes_err_UnknownDriver, "Unknown driver %s" + uDARes_err_UnknownParameter, "Unknown parameter %s" + uRODECConst_sInvalidCalc, "Invalid Parameters in OTPCalc." + uRODECConst_sInvalidDictionary, "Used Dictionary in %s is invalid." + uRODECConst_sOTPIdent, "otp-" + uRODECConst_sOTPExt, "ext" + uRODECConst_sOTPWord, "word:" + uRODECConst_sOTPHex, "hex:" + uRODECConst_sSKeyIdent, "s/key" + uDARes_err_ChangeLogAlreadyStarted, "StartChange has already been called; cannot log more than one change at a time." + uDARes_err_NotAttachedToDataTable, "Delta is not attached to a DataTable" + uDARes_err_DeltaAttachedToDataTable, "Cannot perform this operation on a delta that is attached to a DataTable" + uDARes_err_DriverProcAlreadyRegistered, "DriverProc 0x%0.8x is already registered" + uDARes_err_DriverManagerNotCreated, "A Data Abstract DriverManager is not currently instantiated" + uDARes_err_DriverManagerAlreadyCreated, "An instance of a TDADriverManager was already initialized. Only one driver manager per module is allowed" + uDARes_err_DatasetNotAssigned, "Dataset is not assigned" + uDARes_err_VariantNotSupported, "Variant type %d is not supported" + uDARes_err_InvalidDestination, "Invalid destination" + uRODECConst_sLoadFail, "BigNum invalid data format." + uRODECConst_sParams, "BigNum parameter error.\r\n%s." + uRODECConst_sJacobi, "BigNum Jacobi(A, B), B must be >= 3, Odd and B < A" + uRODECConst_sSPPrime, "BigNum IsSPPrime(A, Base), |Base| must be > 1, |A| > |Base| and |A| >= 3" + uRODECConst_sSetPrime, "BigNum SetPrime(Base, Residue, Modulus), Invalid Parameter.\r\n%s." + uRODECConst_sSetPrimeSize, "Value must be greater 32767" + uRODECConst_sSetPrimeParam, "GCD(Residue, Modulus) must be 1 and Residue < Modulus" + uRODECConst_sSqrt, "BigNum Sqrt(A) A must be position" + uRODECConst_sExpMod, "BigNum ExpMod(E, M) M must be positive" + uRODECConst_sCalcName, "Calculation No %d" + uRODECConst_sInvalidState, "Invalid Protector State detected." + uRODECConst_sIDOutOfRange, "Protector Error: ID is out of Range." + uRODECConst_sInvalidZIPData, "Invalid compressed Data detected." + uRODECConst_sInvalidChallenge, "Challenge is not an RO_RFC2289 Format." + uRODECConst_sInvalidPassword, "Invalid Passphraselength, must be more than 9 Chars." + uRODECConst_sInvalidSeed, "Invalid Seed Value in OTPCalc." + uRODECConst_sNotInitialized, "%s is not initialized call Init() or InitKey() before." + uRODECConst_sInvalidMACMode, "Invalid Ciphermode selected to produce a MAC.\r\nPlease use Modes cmCBC, cmCTS, cmCFB, cmCBCMAC, cmCFBMAC or cmCTSMAC for CalcMAC." + uRODECConst_sCantCalc, "Invalid Ciphermode selected." + uRODECConst_sInvalidRandomStream, "Invalid Random Data detected." + uRODECConst_sRandomDataProtected, "Random Data are protected." + uRODECConst_sBBSnotSeekable, "BBS Generator is not seekable." + uRODECConst_sBigNumDestroy, "Used Bignums in a BBS Generator can be not destroy." + uRODECConst_sIndexOutOfRange, "BBS Error: Index out of Range." + uRODECConst_sBigNumAborted, "BigNum aborted by User." + uRODECConst_sErrGeneric, "Bignum Generic Error." + uRODECConst_sErrAsInteger, "BigNum overflow in AsInteger." + uRODECConst_sErrAsComp, "BigNum overflow in AsComp." + uRODECConst_sErrAsFloat, "BigNum overflow in AsFloat." + uRODECConst_sNumberFormat, "BigNum invalid Numberformat for Base %d.\r\nValue: %s" + uRODECConst_sDivByZero, "BigNum division by Zero." + uRODECConst_sStackIndex, "BigNum Stackindex out of range." + uRORes_err_UnknownMessageType, "Unknown message type \"%s\"" + uRORes_err_MasterServerNeedsChannel, "No Channel assigned to %s." + uRORes_err_StreamIsReadOnly, "Stream is read-only." + uRODECConst_sProtectionCircular, "Circular Protection detected, Protection Object is invalid." + uRODECConst_sStringFormatExists, "String Format \"%d\" not exists." + uRODECConst_sInvalidStringFormat, "Input is not an valid %s Format." + uRODECConst_sInvalidFormatString, "Input can not be convert to %s Format." + uRODECConst_sFMT_COPY, "copy Input to Output" + uRODECConst_sFMT_HEX, "Hexadecimal" + uRODECConst_sFMT_HEXL, "Hexadecimal lowercase" + uRODECConst_sFMT_MIME64, "MIME Base 64" + uRODECConst_sFMT_UU, "UU Coding" + uRODECConst_sFMT_XX, "XX Coding" + uRODECConst_sInvalidKey, "Encryptionkey is invalid" + uRODECConst_sInvalidCRC, "Encrypted Data is corrupt, invalid Checksum" + uRODECConst_sInvalidKeySize, "Length from Encryptionkey is invalid.\r\nKeysize for %s must be to %d-%d bytes" + uRORes_err_CannotLoadXMLDocument, "Cannot load XML document.\rReason: %s\rLine: %d\rPosition: %d" + uRORes_err_ErrorCreatingMsXmlDoc, "Error creating MSXML Document class\r\r%s: %s" + uRORes_err_NoXMLParsersAvailable, "MSXML is not installed" + uRORes_err_IDispatchMarshalingNotSupported, "Marshaling of IDispatch (%d) type variants is not supported." + uRORes_err_UnsupportedVariantType, "Unsupported variant type \"%d\"" + uRORes_err_InvalidBinaryFormat, "Invalid binary format for a variant" + uRORes_err_VariantIsNotArray, "Variant must be Array, but is %d" + uRORes_err_InvalidVarArrayDimCount, "Variant Array DimCount must be 1 but is %d" + uRORes_err_CannotFindParameter, "Cannot find parameter %s" + uRORes_err_CannotFindService, "Cannot find service %s" + uRORes_err_RODLResourceNotLoaded, "RODL resource has not been loaded" + uRORes_err_MayNotAddResult, "Cannot add Result parameter to collection. Use AddResult instead" + uRORes_err_OperationNameNeedsServiceName, "Cannot set the OperationName without a ServiceName" + uRORes_err_ServiceNameIsNotSet, "ServiceName is not set" + uRORes_err_EventReceivedNotConnectedToMessage, "The event receiver must be connected to a message component first" + uRORes_err_MessageNotAssigned, "Message is NIL" + uRORes_err_MessagePropertyMustBeSet, "Message property must be assigned for the server to be active" + uRORes_err_WinMessageFailed, "Communication with the WinMessage Server failed or timed out (Error Code %d)" + uRORes_err_UnexpectedWinINetProblem, "Unexpected error in WinInet HTTP Channel (%d)" + uRORes_err_CommunicationWithServerTimedOut, "Communication with the server timed out (after %sms)" + uRORes_err_CannotConnectToServer, "Cannot connect to server \"%s\"" + uRORes_err_ConnectionError, "Connection error" + uRORes_err_PoolSizeMustBe1orHigher, "Pool Size must be 1 or higher" + uRORes_err_NoFreeObjectsInPool, "There are no Free Objects in the Pool. Try again later." + uRORes_msg_NoMultipleDispatchers, "Multiple message dispatchers not supported" + uRORes_err_InvalidStorage, "Invalid storage" + uRORes_err_ErrorConvertingFloat, "Error converting float \"%s\" at byte %d" + uRORes_err_SessionNotFound, "Session %s could not be found" + uRORes_err_ChannelDoesntSupportIROMetadataReader, "Channel does not support IROMetadataReader" + uRORes_err_TooManySessions, "Too many sessions. Try again in %d minute(s)" + uRORes_err_DOMElementIsNIL, "DOMElement is NIL" + uRORes_err_IndexOutOfBounds, "Index out of bounds" + uRORes_err_CannotAssignClass, "Cannot Assign a \"%s\" to a \"%s\"." + uRORes_err_ChannelBusy, "Channel is busy. Try again later." + uRORes_err_DesignTimeProperty, "%s is a designtime-only property" + uRORes_err_ExpectedParameterNotFound, "Expected parameter \"%s\" was not found." + uRORes_err_AmbigousResponse, "Ambigous response. Expected one \"%s\" but %d were received" + uRORes_err_InvalidEnvelope, "Invalid SOAP Envelope. %s" + uRORes_err_InvalidData, "Cannot convert data for parameter \"%s\"\rException was \"%s\"\rData was \"%s\"." + uRORes_inf_InvalidEnvelopeNode, "SOAP Envelope node missing or not root." + uRORes_inf_AbsentBody, "SOAP envelope does not contain a Body." + uRORes_inf_AbsentMessage, "SOAP Body does not contain a message nor a fault" + uRORes_err_ArrayIndexOutOfBounds, "Array index out of bounds (%d)." + uRORes_err_InvalidHeader, "Invalid binary header. Either incompatible or not a binary message." + uRORes_err_UnknownClassInStream, "Unknown class \"%s\" found in stream." + uRORes_err_UnexpectedClassInStream, "Unexpected class found in stream; class \"%s\" does not descend from \"%s\"." + uRORes_err_InvalidDateTimeReadFromStream, "Invalid DateTime read from Stream." + uRORes_err_CannotFindServer, "Cannot find server \"%s\"" + uRORes_err_ParameterNotFound, "Parameter \"%s\" was not found" + uRORes_err_NotImplemented, "Not implemented" + uRORes_err_TypeNotSupported, "Type \"%s\" not supported" + uRORes_err_ClassFactoryNotFound, "Class factory for interface %s not found" + uRORes_err_UnspecifiedTargetURL, "Unspecified TargetURL" + uRORes_err_IROMessageNotSupported, "Class \"%s\" does not support IROMessage" + uRORes_err_ClassAlreadyRegistered, "Class \"%s\" is already registered" + uRORes_err_UnknownClass, "Unknown class \"%s\"" + uRORes_err_UnknownProxyInterface, "Unknown proxy interface \"%s\"" + uRORes_err_UnknownTransportChannelClass, "Unknown transport channel class \"%s\"" + uRORes_err_UnknownMessageClass, "Unknown message class \"%s\"" + uRORes_err_DispatcherAlreadyAssigned, "Dispatcher for %s already assigned" + uRORes_err_CannotFindMessageDispatcher, "Cannot find message dispatcher. Maybe there is no message component configured for for the requested path?" + uRORes_err_ServerOnlySupportsOneDispatcher, "%s servers only support one dispatcher" + uRORes_err_UnhandledException, "Unhandled exception" + uRORes_err_CannotReadRODLWithoutChannel, "Cannot read RODL information without a channel" + uRORes_err_RodlNoStructElementsDefined, "Struct does not contain any elements." + uRORes_err_RodlNoOperationsDefined, "Service interface does not contain any elements." + uRORes_err_RodlUsedFileDoesNotExist, "The referenced RODL file \"%s\" could not be found." + uRORes_err_RodlInvalidDataType, "Invalid or undefined data type \"%s\"." + uRORes_err_RodlStructCannotBeNested, "Structs cannot recursively contain themselves." + uRORes_err_RodlInvalidAncestorType, "Invalid or undefined ancestor type \"%s\"." + uRORes_err_UnspecifiedRODLLocation, "Unspecified RODL location" + uRORes_str_ExceptionOnServer, "An exception of type %s was raised on the server: %s" + uRORes_str_ExceptionReraisedFromServer, "An exception was raised on the server: %s" + uRORes_err_AssignError, "Cannot assign a \"%s\" to a \"%s\"." + uRORes_err_InvalidRequestStream, "Invalid request stream (%d bytes)" + uRORes_err_NILMessage, "Message is NIL" + uRORes_err_UnspecifiedInterface, "The message does not have an interface name" + uRORes_err_UnspecifiedMessage, "The message does not have a name" + uRORes_err_UnknownMethod, "Unknown method %s for interface %s" + uRORes_err_ClassFactoryDidNotReturnInstance, "Class factory did not return an instance of \"%s\"" + uRORes_err_InvalidIndex, "Invalid index %d" + uRORes_err_InvalidType, "Invalid type \"%s. Expected \"%s\"\"" + uRORes_err_InvalidLibrary, "Invalid library" + uRORes_err_InvalidStream, "Invalid stream" + uRORes_err_InvalidTargetEntity, "Invalid TargetEntity \"%s\"" + uRORes_err_InvalidParamFlag, "Invalid Parameter Flag \"%s\"" + uRORes_err_InvalidStringLength, "Stream read error: Invalid string length \"%d\"" + uRORes_err_InvalidBinaryLength, "Stream read error: Invalid binary length \"%d\"" + uRORes_str_InvalidClassTypeInStream, "Stream read error: Invalid class type encountered: \"%s\"" + uRORes_err_ObjectExpectedInStream, "Stream read error: Object expected, but nil found." + uRORes_err_UnexpectedEndOfStream, "Unexpected end of stream." + uRORes_err_MessageClassMustImplementAssign, "Please implement Assign() for your custom message class." + uRORes_err_InvalidInfo, "Invalid or incomplete info." + uRORes_err_RodlDuplicateName, "Duplicate name." + uRORes_err_RodlNoDataTypeSpecified, "No data type specified." + uRORes_err_RodlNoEnumValues, "Enum does not contain any values." +END + diff --git a/DataAbstract_D7/DataAbstract_D7.res b/DataAbstract_D7/DataAbstract_D7.res new file mode 100644 index 0000000..ec5f233 Binary files /dev/null and b/DataAbstract_D7/DataAbstract_D7.res differ diff --git a/Iconos/Contactos/16x16/Contact-Add.png b/Iconos/Contactos/16x16/Contact-Add.png new file mode 100644 index 0000000..28bd71c Binary files /dev/null and b/Iconos/Contactos/16x16/Contact-Add.png differ diff --git a/Iconos/Contactos/16x16/Contact-Edit.png b/Iconos/Contactos/16x16/Contact-Edit.png new file mode 100644 index 0000000..c413b8b Binary files /dev/null and b/Iconos/Contactos/16x16/Contact-Edit.png differ diff --git a/Iconos/Contactos/16x16/Contact.png b/Iconos/Contactos/16x16/Contact.png new file mode 100644 index 0000000..00e503f Binary files /dev/null and b/Iconos/Contactos/16x16/Contact.png differ diff --git a/Iconos/Contactos/16x16/Currency.png b/Iconos/Contactos/16x16/Currency.png new file mode 100644 index 0000000..5ecaee8 Binary files /dev/null and b/Iconos/Contactos/16x16/Currency.png differ diff --git a/Iconos/Contactos/16x16/Internet.bmp b/Iconos/Contactos/16x16/Internet.bmp new file mode 100644 index 0000000..2be30f3 Binary files /dev/null and b/Iconos/Contactos/16x16/Internet.bmp differ diff --git a/Iconos/Contactos/16x16/Internet.pcx b/Iconos/Contactos/16x16/Internet.pcx new file mode 100644 index 0000000..fc69db7 Binary files /dev/null and b/Iconos/Contactos/16x16/Internet.pcx differ diff --git a/Iconos/Contactos/16x16/Mail-New.bmp b/Iconos/Contactos/16x16/Mail-New.bmp new file mode 100644 index 0000000..252f2f5 Binary files /dev/null and b/Iconos/Contactos/16x16/Mail-New.bmp differ diff --git a/Iconos/Contactos/16x16/Thumbs.db b/Iconos/Contactos/16x16/Thumbs.db new file mode 100644 index 0000000..759abe4 Binary files /dev/null and b/Iconos/Contactos/16x16/Thumbs.db differ diff --git a/Iconos/Contactos/24x24/Contact-Add.png b/Iconos/Contactos/24x24/Contact-Add.png new file mode 100644 index 0000000..5aefd12 Binary files /dev/null and b/Iconos/Contactos/24x24/Contact-Add.png differ diff --git a/Iconos/Contactos/24x24/Contact-Edit.png b/Iconos/Contactos/24x24/Contact-Edit.png new file mode 100644 index 0000000..4ab8651 Binary files /dev/null and b/Iconos/Contactos/24x24/Contact-Edit.png differ diff --git a/Iconos/Contactos/24x24/Contact.png b/Iconos/Contactos/24x24/Contact.png new file mode 100644 index 0000000..3272bfd Binary files /dev/null and b/Iconos/Contactos/24x24/Contact.png differ diff --git a/Iconos/Contactos/24x24/Currency.png b/Iconos/Contactos/24x24/Currency.png new file mode 100644 index 0000000..af28329 Binary files /dev/null and b/Iconos/Contactos/24x24/Currency.png differ diff --git a/Iconos/Contactos/24x24/Thumbs.db b/Iconos/Contactos/24x24/Thumbs.db new file mode 100644 index 0000000..bfc0388 Binary files /dev/null and b/Iconos/Contactos/24x24/Thumbs.db differ diff --git a/Iconos/Contactos/28x28/Currency.png b/Iconos/Contactos/28x28/Currency.png new file mode 100644 index 0000000..0d7259c Binary files /dev/null and b/Iconos/Contactos/28x28/Currency.png differ diff --git a/Iconos/Contactos/28x28/Thumbs.db b/Iconos/Contactos/28x28/Thumbs.db new file mode 100644 index 0000000..ad15c6d Binary files /dev/null and b/Iconos/Contactos/28x28/Thumbs.db differ diff --git a/Iconos/Facturas/16x16/Delete-Blue.png b/Iconos/Facturas/16x16/Delete-Blue.png new file mode 100644 index 0000000..33a2a14 Binary files /dev/null and b/Iconos/Facturas/16x16/Delete-Blue.png differ diff --git a/Iconos/Facturas/16x16/Invoice.psd b/Iconos/Facturas/16x16/Invoice.psd new file mode 100644 index 0000000..b33963d Binary files /dev/null and b/Iconos/Facturas/16x16/Invoice.psd differ diff --git a/Iconos/Facturas/16x16/Thumbs.db b/Iconos/Facturas/16x16/Thumbs.db new file mode 100644 index 0000000..bb1f117 Binary files /dev/null and b/Iconos/Facturas/16x16/Thumbs.db differ diff --git a/Iconos/Facturas/16x16/Tick.png b/Iconos/Facturas/16x16/Tick.png new file mode 100644 index 0000000..264d020 Binary files /dev/null and b/Iconos/Facturas/16x16/Tick.png differ diff --git a/Iconos/Facturas/16x16/facturaabono.png b/Iconos/Facturas/16x16/facturaabono.png new file mode 100644 index 0000000..bd66056 Binary files /dev/null and b/Iconos/Facturas/16x16/facturaabono.png differ diff --git a/Iconos/Facturas/16x16/facturanormal.png b/Iconos/Facturas/16x16/facturanormal.png new file mode 100644 index 0000000..cf59d6e Binary files /dev/null and b/Iconos/Facturas/16x16/facturanormal.png differ diff --git a/Iconos/Facturas/16x16/facturaproforma.png b/Iconos/Facturas/16x16/facturaproforma.png new file mode 100644 index 0000000..8e48e06 Binary files /dev/null and b/Iconos/Facturas/16x16/facturaproforma.png differ diff --git a/Iconos/Facturas/24x24/Delete-Blue.png b/Iconos/Facturas/24x24/Delete-Blue.png new file mode 100644 index 0000000..6546282 Binary files /dev/null and b/Iconos/Facturas/24x24/Delete-Blue.png differ diff --git a/Iconos/Facturas/24x24/Invoice.png b/Iconos/Facturas/24x24/Invoice.png new file mode 100644 index 0000000..c24cd70 Binary files /dev/null and b/Iconos/Facturas/24x24/Invoice.png differ diff --git a/Iconos/Facturas/24x24/Invoice.psd b/Iconos/Facturas/24x24/Invoice.psd new file mode 100644 index 0000000..d6fc249 Binary files /dev/null and b/Iconos/Facturas/24x24/Invoice.psd differ diff --git a/Iconos/Facturas/24x24/Thumbs.db b/Iconos/Facturas/24x24/Thumbs.db new file mode 100644 index 0000000..4dbdcc2 Binary files /dev/null and b/Iconos/Facturas/24x24/Thumbs.db differ diff --git a/Iconos/Facturas/24x24/Tick.png b/Iconos/Facturas/24x24/Tick.png new file mode 100644 index 0000000..8554e1f Binary files /dev/null and b/Iconos/Facturas/24x24/Tick.png differ diff --git a/Iconos/Facturas/24x24/facturanormal.png b/Iconos/Facturas/24x24/facturanormal.png new file mode 100644 index 0000000..41de5c8 Binary files /dev/null and b/Iconos/Facturas/24x24/facturanormal.png differ diff --git a/Iconos/Facturas/28x28/Invoice.psd b/Iconos/Facturas/28x28/Invoice.psd new file mode 100644 index 0000000..ede750c Binary files /dev/null and b/Iconos/Facturas/28x28/Invoice.psd differ diff --git a/Iconos/Facturas/28x28/Thumbs.db b/Iconos/Facturas/28x28/Thumbs.db new file mode 100644 index 0000000..daa0695 Binary files /dev/null and b/Iconos/Facturas/28x28/Thumbs.db differ diff --git a/Iconos/Facturas/28x28/facturanormal.png b/Iconos/Facturas/28x28/facturanormal.png new file mode 100644 index 0000000..f465cb6 Binary files /dev/null and b/Iconos/Facturas/28x28/facturanormal.png differ diff --git a/Iconos/Generales/16x16/About.png b/Iconos/Generales/16x16/About.png new file mode 100644 index 0000000..32635db Binary files /dev/null and b/Iconos/Generales/16x16/About.png differ diff --git a/Iconos/Generales/16x16/B.bmp b/Iconos/Generales/16x16/B.bmp new file mode 100644 index 0000000..dd9debc Binary files /dev/null and b/Iconos/Generales/16x16/B.bmp differ diff --git a/Iconos/Generales/16x16/Back.png b/Iconos/Generales/16x16/Back.png new file mode 100644 index 0000000..31194b5 Binary files /dev/null and b/Iconos/Generales/16x16/Back.png differ diff --git a/Iconos/Generales/16x16/Clear.png b/Iconos/Generales/16x16/Clear.png new file mode 100644 index 0000000..2062c27 Binary files /dev/null and b/Iconos/Generales/16x16/Clear.png differ diff --git a/Iconos/Generales/16x16/Copy.png b/Iconos/Generales/16x16/Copy.png new file mode 100644 index 0000000..7067e8d Binary files /dev/null and b/Iconos/Generales/16x16/Copy.png differ diff --git a/Iconos/Generales/16x16/Cut.png b/Iconos/Generales/16x16/Cut.png new file mode 100644 index 0000000..3bb4451 Binary files /dev/null and b/Iconos/Generales/16x16/Cut.png differ diff --git a/Iconos/Generales/16x16/Debug-Breakpoint.png b/Iconos/Generales/16x16/Debug-Breakpoint.png new file mode 100644 index 0000000..464fcd7 Binary files /dev/null and b/Iconos/Generales/16x16/Debug-Breakpoint.png differ diff --git a/Iconos/Generales/16x16/Delete.png b/Iconos/Generales/16x16/Delete.png new file mode 100644 index 0000000..cb27f30 Binary files /dev/null and b/Iconos/Generales/16x16/Delete.png differ diff --git a/Iconos/Generales/16x16/Edit.png b/Iconos/Generales/16x16/Edit.png new file mode 100644 index 0000000..a4431dd Binary files /dev/null and b/Iconos/Generales/16x16/Edit.png differ diff --git a/Iconos/Generales/16x16/Exit.png b/Iconos/Generales/16x16/Exit.png new file mode 100644 index 0000000..21613aa Binary files /dev/null and b/Iconos/Generales/16x16/Exit.png differ diff --git a/Iconos/Generales/16x16/Forward.png b/Iconos/Generales/16x16/Forward.png new file mode 100644 index 0000000..2a17743 Binary files /dev/null and b/Iconos/Generales/16x16/Forward.png differ diff --git a/Iconos/Generales/16x16/Home.png b/Iconos/Generales/16x16/Home.png new file mode 100644 index 0000000..199e9cd Binary files /dev/null and b/Iconos/Generales/16x16/Home.png differ diff --git a/Iconos/Generales/16x16/I.bmp b/Iconos/Generales/16x16/I.bmp new file mode 100644 index 0000000..7b12d58 Binary files /dev/null and b/Iconos/Generales/16x16/I.bmp differ diff --git a/Iconos/Generales/16x16/Outline-Collapse.png b/Iconos/Generales/16x16/Outline-Collapse.png new file mode 100644 index 0000000..95ded08 Binary files /dev/null and b/Iconos/Generales/16x16/Outline-Collapse.png differ diff --git a/Iconos/Generales/16x16/Outline-Expand.png b/Iconos/Generales/16x16/Outline-Expand.png new file mode 100644 index 0000000..17cbe65 Binary files /dev/null and b/Iconos/Generales/16x16/Outline-Expand.png differ diff --git a/Iconos/Generales/16x16/Paste.png b/Iconos/Generales/16x16/Paste.png new file mode 100644 index 0000000..f1cbee6 Binary files /dev/null and b/Iconos/Generales/16x16/Paste.png differ diff --git a/Iconos/Generales/16x16/Preview.png b/Iconos/Generales/16x16/Preview.png new file mode 100644 index 0000000..a1ee549 Binary files /dev/null and b/Iconos/Generales/16x16/Preview.png differ diff --git a/Iconos/Generales/16x16/Print-Options.png b/Iconos/Generales/16x16/Print-Options.png new file mode 100644 index 0000000..cd0e509 Binary files /dev/null and b/Iconos/Generales/16x16/Print-Options.png differ diff --git a/Iconos/Generales/16x16/Print.png b/Iconos/Generales/16x16/Print.png new file mode 100644 index 0000000..8f029d7 Binary files /dev/null and b/Iconos/Generales/16x16/Print.png differ diff --git a/Iconos/Generales/16x16/Refresh.png b/Iconos/Generales/16x16/Refresh.png new file mode 100644 index 0000000..9ed4aac Binary files /dev/null and b/Iconos/Generales/16x16/Refresh.png differ diff --git a/Iconos/Generales/16x16/Save.png b/Iconos/Generales/16x16/Save.png new file mode 100644 index 0000000..51eb9de Binary files /dev/null and b/Iconos/Generales/16x16/Save.png differ diff --git a/Iconos/Generales/16x16/Search.png b/Iconos/Generales/16x16/Search.png new file mode 100644 index 0000000..e7a6758 Binary files /dev/null and b/Iconos/Generales/16x16/Search.png differ diff --git a/Iconos/Generales/16x16/Select All.png b/Iconos/Generales/16x16/Select All.png new file mode 100644 index 0000000..b3476eb Binary files /dev/null and b/Iconos/Generales/16x16/Select All.png differ diff --git a/Iconos/Generales/16x16/Table-Search.png b/Iconos/Generales/16x16/Table-Search.png new file mode 100644 index 0000000..be8bf80 Binary files /dev/null and b/Iconos/Generales/16x16/Table-Search.png differ diff --git a/Iconos/Generales/16x16/Thumbs.db b/Iconos/Generales/16x16/Thumbs.db new file mode 100644 index 0000000..f88537f Binary files /dev/null and b/Iconos/Generales/16x16/Thumbs.db differ diff --git a/Iconos/Generales/16x16/U.bmp b/Iconos/Generales/16x16/U.bmp new file mode 100644 index 0000000..38e871b Binary files /dev/null and b/Iconos/Generales/16x16/U.bmp differ diff --git a/Iconos/Generales/16x16/Undo.png b/Iconos/Generales/16x16/Undo.png new file mode 100644 index 0000000..114cf33 Binary files /dev/null and b/Iconos/Generales/16x16/Undo.png differ diff --git a/Iconos/Generales/16x16/View-One Page.png b/Iconos/Generales/16x16/View-One Page.png new file mode 100644 index 0000000..7573d11 Binary files /dev/null and b/Iconos/Generales/16x16/View-One Page.png differ diff --git a/Iconos/Generales/16x16/View-Page Width.png b/Iconos/Generales/16x16/View-Page Width.png new file mode 100644 index 0000000..2ad4e8e Binary files /dev/null and b/Iconos/Generales/16x16/View-Page Width.png differ diff --git a/Iconos/Generales/16x16/Zoom-In.png b/Iconos/Generales/16x16/Zoom-In.png new file mode 100644 index 0000000..812c814 Binary files /dev/null and b/Iconos/Generales/16x16/Zoom-In.png differ diff --git a/Iconos/Generales/16x16/Zoom-Out.png b/Iconos/Generales/16x16/Zoom-Out.png new file mode 100644 index 0000000..e6ccf65 Binary files /dev/null and b/Iconos/Generales/16x16/Zoom-Out.png differ diff --git a/Iconos/Generales/16x16/db-Next-2.png b/Iconos/Generales/16x16/db-Next-2.png new file mode 100644 index 0000000..759e9ee Binary files /dev/null and b/Iconos/Generales/16x16/db-Next-2.png differ diff --git a/Iconos/Generales/16x16/db-Previous-2.png b/Iconos/Generales/16x16/db-Previous-2.png new file mode 100644 index 0000000..f673f28 Binary files /dev/null and b/Iconos/Generales/16x16/db-Previous-2.png differ diff --git a/Iconos/Generales/16x16/db-first-2.png b/Iconos/Generales/16x16/db-first-2.png new file mode 100644 index 0000000..7274025 Binary files /dev/null and b/Iconos/Generales/16x16/db-first-2.png differ diff --git a/Iconos/Generales/16x16/db-last-2.png b/Iconos/Generales/16x16/db-last-2.png new file mode 100644 index 0000000..bfb5d67 Binary files /dev/null and b/Iconos/Generales/16x16/db-last-2.png differ diff --git a/Iconos/Generales/24x24/About.png b/Iconos/Generales/24x24/About.png new file mode 100644 index 0000000..5d0ba3e Binary files /dev/null and b/Iconos/Generales/24x24/About.png differ diff --git a/Iconos/Generales/24x24/Back.png b/Iconos/Generales/24x24/Back.png new file mode 100644 index 0000000..1cd4d31 Binary files /dev/null and b/Iconos/Generales/24x24/Back.png differ diff --git a/Iconos/Generales/24x24/Clear.png b/Iconos/Generales/24x24/Clear.png new file mode 100644 index 0000000..4ce31c8 Binary files /dev/null and b/Iconos/Generales/24x24/Clear.png differ diff --git a/Iconos/Generales/24x24/Copy.png b/Iconos/Generales/24x24/Copy.png new file mode 100644 index 0000000..9bf2618 Binary files /dev/null and b/Iconos/Generales/24x24/Copy.png differ diff --git a/Iconos/Generales/24x24/Cut.png b/Iconos/Generales/24x24/Cut.png new file mode 100644 index 0000000..b6e6529 Binary files /dev/null and b/Iconos/Generales/24x24/Cut.png differ diff --git a/Iconos/Generales/24x24/Debug-Breakpoint.png b/Iconos/Generales/24x24/Debug-Breakpoint.png new file mode 100644 index 0000000..16e4542 Binary files /dev/null and b/Iconos/Generales/24x24/Debug-Breakpoint.png differ diff --git a/Iconos/Generales/24x24/Delete.png b/Iconos/Generales/24x24/Delete.png new file mode 100644 index 0000000..a169184 Binary files /dev/null and b/Iconos/Generales/24x24/Delete.png differ diff --git a/Iconos/Generales/24x24/Edit.png b/Iconos/Generales/24x24/Edit.png new file mode 100644 index 0000000..f39269e Binary files /dev/null and b/Iconos/Generales/24x24/Edit.png differ diff --git a/Iconos/Generales/24x24/Exit.png b/Iconos/Generales/24x24/Exit.png new file mode 100644 index 0000000..70eadf9 Binary files /dev/null and b/Iconos/Generales/24x24/Exit.png differ diff --git a/Iconos/Generales/24x24/Forward.png b/Iconos/Generales/24x24/Forward.png new file mode 100644 index 0000000..2ceec67 Binary files /dev/null and b/Iconos/Generales/24x24/Forward.png differ diff --git a/Iconos/Generales/24x24/Home.png b/Iconos/Generales/24x24/Home.png new file mode 100644 index 0000000..96b8c87 Binary files /dev/null and b/Iconos/Generales/24x24/Home.png differ diff --git a/Iconos/Generales/24x24/Outline-Collapse.png b/Iconos/Generales/24x24/Outline-Collapse.png new file mode 100644 index 0000000..0e7c2cc Binary files /dev/null and b/Iconos/Generales/24x24/Outline-Collapse.png differ diff --git a/Iconos/Generales/24x24/Outline-Expand.png b/Iconos/Generales/24x24/Outline-Expand.png new file mode 100644 index 0000000..c643a7c Binary files /dev/null and b/Iconos/Generales/24x24/Outline-Expand.png differ diff --git a/Iconos/Generales/24x24/Paste.png b/Iconos/Generales/24x24/Paste.png new file mode 100644 index 0000000..9b4c3f0 Binary files /dev/null and b/Iconos/Generales/24x24/Paste.png differ diff --git a/Iconos/Generales/24x24/Preview.png b/Iconos/Generales/24x24/Preview.png new file mode 100644 index 0000000..4d185c1 Binary files /dev/null and b/Iconos/Generales/24x24/Preview.png differ diff --git a/Iconos/Generales/24x24/Print-Options.png b/Iconos/Generales/24x24/Print-Options.png new file mode 100644 index 0000000..b97b98c Binary files /dev/null and b/Iconos/Generales/24x24/Print-Options.png differ diff --git a/Iconos/Generales/24x24/Print.png b/Iconos/Generales/24x24/Print.png new file mode 100644 index 0000000..3f6e390 Binary files /dev/null and b/Iconos/Generales/24x24/Print.png differ diff --git a/Iconos/Generales/24x24/Refresh.png b/Iconos/Generales/24x24/Refresh.png new file mode 100644 index 0000000..03cacdf Binary files /dev/null and b/Iconos/Generales/24x24/Refresh.png differ diff --git a/Iconos/Generales/24x24/Save.png b/Iconos/Generales/24x24/Save.png new file mode 100644 index 0000000..56cc714 Binary files /dev/null and b/Iconos/Generales/24x24/Save.png differ diff --git a/Iconos/Generales/24x24/Search.png b/Iconos/Generales/24x24/Search.png new file mode 100644 index 0000000..3af96da Binary files /dev/null and b/Iconos/Generales/24x24/Search.png differ diff --git a/Iconos/Generales/24x24/Select All.png b/Iconos/Generales/24x24/Select All.png new file mode 100644 index 0000000..5632ed5 Binary files /dev/null and b/Iconos/Generales/24x24/Select All.png differ diff --git a/Iconos/Generales/24x24/Table-Search.png b/Iconos/Generales/24x24/Table-Search.png new file mode 100644 index 0000000..b145e04 Binary files /dev/null and b/Iconos/Generales/24x24/Table-Search.png differ diff --git a/Iconos/Generales/24x24/Thumbs.db b/Iconos/Generales/24x24/Thumbs.db new file mode 100644 index 0000000..d2ddccb Binary files /dev/null and b/Iconos/Generales/24x24/Thumbs.db differ diff --git a/Iconos/Generales/24x24/Undo.png b/Iconos/Generales/24x24/Undo.png new file mode 100644 index 0000000..0fe4cc9 Binary files /dev/null and b/Iconos/Generales/24x24/Undo.png differ diff --git a/Iconos/Generales/24x24/View-One Page.png b/Iconos/Generales/24x24/View-One Page.png new file mode 100644 index 0000000..b66609e Binary files /dev/null and b/Iconos/Generales/24x24/View-One Page.png differ diff --git a/Iconos/Generales/24x24/View-Page Width.png b/Iconos/Generales/24x24/View-Page Width.png new file mode 100644 index 0000000..760a323 Binary files /dev/null and b/Iconos/Generales/24x24/View-Page Width.png differ diff --git a/Iconos/Generales/24x24/Zoom-In.png b/Iconos/Generales/24x24/Zoom-In.png new file mode 100644 index 0000000..131feed Binary files /dev/null and b/Iconos/Generales/24x24/Zoom-In.png differ diff --git a/Iconos/Generales/24x24/Zoom-Out.png b/Iconos/Generales/24x24/Zoom-Out.png new file mode 100644 index 0000000..26cf347 Binary files /dev/null and b/Iconos/Generales/24x24/Zoom-Out.png differ diff --git a/Iconos/Generales/24x24/db-First-2.png b/Iconos/Generales/24x24/db-First-2.png new file mode 100644 index 0000000..c36c2ea Binary files /dev/null and b/Iconos/Generales/24x24/db-First-2.png differ diff --git a/Iconos/Generales/24x24/db-Last-2.png b/Iconos/Generales/24x24/db-Last-2.png new file mode 100644 index 0000000..97292c3 Binary files /dev/null and b/Iconos/Generales/24x24/db-Last-2.png differ diff --git a/Iconos/Generales/24x24/db-Next-2.png b/Iconos/Generales/24x24/db-Next-2.png new file mode 100644 index 0000000..d23efc7 Binary files /dev/null and b/Iconos/Generales/24x24/db-Next-2.png differ diff --git a/Iconos/Generales/24x24/db-Previous-2.png b/Iconos/Generales/24x24/db-Previous-2.png new file mode 100644 index 0000000..7c11e16 Binary files /dev/null and b/Iconos/Generales/24x24/db-Previous-2.png differ diff --git a/Iconos/Generales/28x28/Home.png b/Iconos/Generales/28x28/Home.png new file mode 100644 index 0000000..f89327a Binary files /dev/null and b/Iconos/Generales/28x28/Home.png differ diff --git a/Iconos/Generales/28x28/Table-Search.png b/Iconos/Generales/28x28/Table-Search.png new file mode 100644 index 0000000..bb23481 Binary files /dev/null and b/Iconos/Generales/28x28/Table-Search.png differ diff --git a/Iconos/Generales/28x28/Thumbs.db b/Iconos/Generales/28x28/Thumbs.db new file mode 100644 index 0000000..2ad6c39 Binary files /dev/null and b/Iconos/Generales/28x28/Thumbs.db differ diff --git a/Iconos/Obras/16x16/Delete-Blue.png b/Iconos/Obras/16x16/Delete-Blue.png new file mode 100644 index 0000000..33a2a14 Binary files /dev/null and b/Iconos/Obras/16x16/Delete-Blue.png differ diff --git a/Iconos/Obras/16x16/Organizer.png b/Iconos/Obras/16x16/Organizer.png new file mode 100644 index 0000000..479b07f Binary files /dev/null and b/Iconos/Obras/16x16/Organizer.png differ diff --git a/Iconos/Obras/16x16/Thumbs.db b/Iconos/Obras/16x16/Thumbs.db new file mode 100644 index 0000000..ee407c8 Binary files /dev/null and b/Iconos/Obras/16x16/Thumbs.db differ diff --git a/Iconos/Obras/16x16/Tick.png b/Iconos/Obras/16x16/Tick.png new file mode 100644 index 0000000..264d020 Binary files /dev/null and b/Iconos/Obras/16x16/Tick.png differ diff --git a/Iconos/Obras/24x24/Delete-Blue.png b/Iconos/Obras/24x24/Delete-Blue.png new file mode 100644 index 0000000..6546282 Binary files /dev/null and b/Iconos/Obras/24x24/Delete-Blue.png differ diff --git a/Iconos/Obras/24x24/Organizer.png b/Iconos/Obras/24x24/Organizer.png new file mode 100644 index 0000000..87dcbf4 Binary files /dev/null and b/Iconos/Obras/24x24/Organizer.png differ diff --git a/Iconos/Obras/24x24/Thumbs.db b/Iconos/Obras/24x24/Thumbs.db new file mode 100644 index 0000000..df1596d Binary files /dev/null and b/Iconos/Obras/24x24/Thumbs.db differ diff --git a/Iconos/Obras/24x24/Tick.png b/Iconos/Obras/24x24/Tick.png new file mode 100644 index 0000000..8554e1f Binary files /dev/null and b/Iconos/Obras/24x24/Tick.png differ diff --git a/Iconos/Obras/28x28/Organizer.png b/Iconos/Obras/28x28/Organizer.png new file mode 100644 index 0000000..03be29e Binary files /dev/null and b/Iconos/Obras/28x28/Organizer.png differ diff --git a/Iconos/Obras/28x28/Thumbs.db b/Iconos/Obras/28x28/Thumbs.db new file mode 100644 index 0000000..c234953 Binary files /dev/null and b/Iconos/Obras/28x28/Thumbs.db differ diff --git a/Iconos/ProGestion.ico b/Iconos/ProGestion.ico new file mode 100644 index 0000000..233623b Binary files /dev/null and b/Iconos/ProGestion.ico differ diff --git a/Iconos/Servidor/16x16/Database.png b/Iconos/Servidor/16x16/Database.png new file mode 100644 index 0000000..badb104 Binary files /dev/null and b/Iconos/Servidor/16x16/Database.png differ diff --git a/Iconos/Servidor/16x16/Server.png b/Iconos/Servidor/16x16/Server.png new file mode 100644 index 0000000..b79e9ba Binary files /dev/null and b/Iconos/Servidor/16x16/Server.png differ diff --git a/Iconos/Servidor/16x16/Thumbs.db b/Iconos/Servidor/16x16/Thumbs.db new file mode 100644 index 0000000..fba83be Binary files /dev/null and b/Iconos/Servidor/16x16/Thumbs.db differ diff --git a/Iconos/Servidor/24x24/Database.png b/Iconos/Servidor/24x24/Database.png new file mode 100644 index 0000000..cd859e1 Binary files /dev/null and b/Iconos/Servidor/24x24/Database.png differ diff --git a/Iconos/Servidor/24x24/Server.png b/Iconos/Servidor/24x24/Server.png new file mode 100644 index 0000000..7f1b2d6 Binary files /dev/null and b/Iconos/Servidor/24x24/Server.png differ diff --git a/Iconos/Servidor/24x24/Thumbs.db b/Iconos/Servidor/24x24/Thumbs.db new file mode 100644 index 0000000..2215185 Binary files /dev/null and b/Iconos/Servidor/24x24/Thumbs.db differ diff --git a/Iconos/Servidor/28x28/Database.png b/Iconos/Servidor/28x28/Database.png new file mode 100644 index 0000000..26d3c56 Binary files /dev/null and b/Iconos/Servidor/28x28/Database.png differ diff --git a/Iconos/Servidor/28x28/Server.png b/Iconos/Servidor/28x28/Server.png new file mode 100644 index 0000000..44a164d Binary files /dev/null and b/Iconos/Servidor/28x28/Server.png differ diff --git a/Iconos/Servidor/28x28/Thumbs.db b/Iconos/Servidor/28x28/Thumbs.db new file mode 100644 index 0000000..f7e81f8 Binary files /dev/null and b/Iconos/Servidor/28x28/Thumbs.db differ diff --git a/Modulos/Contactos/Cliente.rar b/Modulos/Contactos/Cliente.rar new file mode 100644 index 0000000..2205d6e Binary files /dev/null and b/Modulos/Contactos/Cliente.rar differ diff --git a/Modulos/Contactos/Cliente/Contactos.cfg b/Modulos/Contactos/Cliente/Contactos.cfg new file mode 100644 index 0000000..a19d36c --- /dev/null +++ b/Modulos/Contactos/Cliente/Contactos.cfg @@ -0,0 +1,45 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O- +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-GD +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-N".\" +-LE"..\..\..\Output\Cliente" +-LN".\" +-U"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\Cliente" +-O"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\Cliente" +-I"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\Cliente" +-R"c:\archivos de programa\borland\delphi7\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\Cliente" +-Z +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/Modulos/Contactos/Cliente/Contactos.dcp b/Modulos/Contactos/Cliente/Contactos.dcp new file mode 100644 index 0000000..e9d9f45 Binary files /dev/null and b/Modulos/Contactos/Cliente/Contactos.dcp differ diff --git a/Modulos/Contactos/Cliente/Contactos.dof b/Modulos/Contactos/Cliente/Contactos.dof new file mode 100644 index 0000000..cd2d504 --- /dev/null +++ b/Modulos/Contactos/Cliente/Contactos.dof @@ -0,0 +1,504 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=0 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=3 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir=.\ +PackageDLLOutputDir=..\..\..\Output\Cliente +PackageDCPOutputDir=.\ +SearchPath=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\Cliente +Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;dclOfficeXP;CEToolsPkgd7;FR7;FRIBX7;Hydra_Core_D7;Hydra_RO_D7;fqb70;frx7;frxADO7;frxBDE7;frxDB7;frxDBX7;frxe7;frxIBX7;fs7;fsADO7;fsBDE7;fsDB7;fsIBX7;DataAbstract_Core_D7;DataAbstract_IDE_D7 +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=C:\Archivos de programa\Borland\Delphi7\Bin\ +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=1 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.1.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[Excluded Packages] +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxTreeListVCLD7.bpl=ExpressQuantumTreeList 4 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxThemeD7.bpl=Express XP Theme Manager by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxLibraryVCLD7.bpl=Express Cross Platform Library (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxExportVCLD7.bpl=Express Cross Platform Export Library (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxEditorsVCLD7.bpl=ExpressEditors Library 5 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxDataD7.bpl=ExpressDataController by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxExtEditorsVCLD7.bpl=ExpressExtendedEditors Library 5 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxGridVCLD7.bpl=ExpressQuantumGrid 5 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxPageControlVCLD7.bpl=Express Cross Platform PageControl (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxSchedulerVCLD7.bpl=ExpressScheduler 2 (VCL Edition) by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxsbD7.bpl=ExpressSideBar by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxComnD7.bpl=ExpressCommonLibrary by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarD7.bpl=ExpressBars by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarDBNavD7.bpl=ExpressBars DBNavigator by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarExtDBItemsD7.bpl=ExpressBars extended DB items by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxBarExtItemsD7.bpl=ExpressBars extended items by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxDockingD7.bpl=ExpressDocking Library by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxLayoutControlD7.bpl=ExpressLayout Control by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxNavBarD7.bpl=ExpressNavBar by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxGDIPlusD7.bpl=ExpressGDI+ Library by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\dxPSCoreD7.bpl=ExpressPrinting System by Developer Express Inc. +C:\Archivos de programa\Borland\Delphi7\Projects\Bpl\cxVerticalGridVCLD7.bpl=ExpressVerticalGrid (VCL Edition) by Developer Express Inc. +C:\WINDOWS\system32\dclShX_Generic_V3D7.bpl=Shell+ Components v3.0 +C:\WINDOWS\system32\dclShX_Namespace_V3D7.bpl=(untitled) +C:\WINDOWS\system32\vclShX_Namespace_v3D7.bpl=(untitled) +[HistoryLists\hlDebugSourcePath] +Count=2 +Item0=D:\Proyectos\Componentes\GUISDK\Sources\;D:\Proyectos\Componentes\PluginSDK\Source\;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Cliente;D:\Proyectos\FactuGES (Estudio)\Codigo\Modulos\Contactos\Reglas +Item1=.\ +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=4 +Item0=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\base;..\Modulos\Contactos\Cliente;..\Modulos\Contactos\Reglas;..\Modulos\Obras\Reglas;..\Modulos\Obras\Cliente;..\Modulos\Documentos asociados;..\Modulos\Facturas de cliente\Cliente;..\Modulos\Facturas de cliente\Reglas;..\Modulos\Recibos\Cliente;..\Modulos\Recibos\Reglas;..\Modulos\Obras Final\Cliente;..\Modulos\Obras Final\Reglas +Item1=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas;..\..\Obras\Cliente;..\..\Facturas de cliente\Cliente;..\..\Contactos\Cliente;..\..\Documentos asociados;..\..\Recibos\Cliente +Item2=$(DELPHI)\Lib\Debug;E:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\..\..\GUISDK\lib\d7;..\..\Contactos\Cliente;..\..\Documentos asociados;..\Reglas +Item3=$(DELPHI)\Lib\Debug;D:\PROYEC~1\COMPON~1\jcl\lib\D7\debug;..\..\..\Base;..\..\..\Servidor;..\Reglas +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=.\ +[HistoryLists\hlOutputDirectorry] +Count=1 +Item0=..\Output\Cliente +[HistoryLists\hlBPLOutput] +Count=1 +Item0=..\..\..\Output\Cliente +[HistoryLists\hlDCPOutput] +Count=1 +Item0=.\ +[Exception Log] +EurekaLog Version=501 +Activate=1 +Activate Handle=1 +Save Log File=1 +Foreground Tab=0 +Freeze Activate=0 +Freeze Timeout=60 +Freeze Message=The application seems to be frozen. +SMTP From=eurekalog@email.com +SMTP Host= +SMTP Port=25 +SMTP UserID= +SMTP Password= +Append to Log=0 +Show TerminateBtn=1 +TerminateBtn Operation=1 +Errors Number=32 +Errors Terminate=3 +Email Address= +Email Object= +Email Send Options=0 +Output Path=contactos +Encrypt Password= +AutoCloseDialogSecs=0 +WebSendMode=0 +SupportULR= +HTMLLayout Count=15 +HTMLLine0="%3Chtml%3E" +HTMLLine1=" %3Chead%3E" +HTMLLine2=" %3C/head%3E" +HTMLLine3=" %3Cbody TopMargin=10 LeftMargin=10%3E" +HTMLLine4=" %3Ctable width="100%%" border="0"%3E" +HTMLLine5=" %3Ctr%3E" +HTMLLine6=" %3Ctd nowrap%3E" +HTMLLine7=" %3Cfont face="Lucida Console, Courier" size="2"%3E" +HTMLLine8=" %3C%%HTML_TAG%%%3E" +HTMLLine9=" %3C/font%3E" +HTMLLine10=" %3C/td%3E" +HTMLLine11=" %3C/tr%3E" +HTMLLine12=" %3C/table%3E" +HTMLLine13=" %3C/body%3E" +HTMLLine14="%3C/html%3E" +AutoCrashOperation=1 +AutoCrashNumber=10 +AutoCrashMinutes=1 +WebURL= +WebUserID= +WebPassword= +WebPort=0 +AttachedFiles= +Count=0 +EMail Message Line Count=0 +loNoDuplicateErrors=0 +loAppendReproduceText=0 +loDeleteLogAtVersionChange=0 +loAddComputerNameInLogFileName=0 +loSaveModulesSection=1 +loSaveCPUSection=1 +soAppStartDate=1 +soAppName=1 +soAppVersionNumber=1 +soAppParameters=1 +soAppCompilationDate=1 +soExcDate=1 +soExcAddress=1 +soExcModule=1 +soExcType=1 +soExcMessage=1 +soActCtlsFormClass=1 +soActCtlsFormText=1 +soActCtlsControlClass=1 +soActCtlsControlText=1 +soCmpName=1 +soCmpUser=1 +soCmpTotalMemory=1 +soCmpFreeMemory=1 +soCmpTotalDisk=1 +soCmpFreeDisk=1 +soCmpSysUpTime=1 +soCmpProcessor=1 +soCmpDisplayMode=1 +soOSType=1 +soOSBuildN=1 +soOSUpdate=1 +soOSLanguage=1 +soNetIP=1 +soNetSubmask=1 +soNetGateway=1 +soNetDNS1=1 +soNetDNS2=1 +soNetDHCP=1 +sndShowSendDialog=1 +sndShowSuccessFailureMsg=0 +sndSendEntireLog=0 +sndSendXMLLogCopy=0 +sndSendScreenshot=1 +sndUseOnlyActiveWindow=0 +sndSendLastHTMLPage=1 +sndSendInSeparatedThread=0 +sndAddDateInFileName=0 +sndCompressAllFiles=0 +edoShowExceptionDialog=1 +edoSendEmailChecked=1 +edoAttachScreenshotChecked=1 +edoShowCopyToClipOption=1 +edoShowDetailsButton=1 +edoShowInDetailedMode=0 +edoShowInTopMostMode=0 +edoUseEurekaLogLookAndFeel=0 +csoShowDLLs=1 +csoShowBPLs=1 +csoShowBorlandThreads=1 +csoShowWindowsThreads=1 +csoShowProcedureOffset=0 +boActivateCrashDetection=0 +boPauseBorlandThreads=0 +boDoNotPauseMainThread=0 +boPauseWindowsThreads=0 +boUseMainModuleOptions=1 +boCopyLogInCaseOfError=1 +boSaveCompressedCopyInCaseOfError=0 +Count mtInformationMsgCaption=1 +mtInformationMsgCaption0="Information." +Count mtQuestionMsgCaption=1 +mtQuestionMsgCaption0="Question." +Count mtDialog_Caption=1 +mtDialog_Caption0="Error." +Count mtDialog_ErrorMsgCaption=2 +mtDialog_ErrorMsgCaption0="An error has occurred during program execution." +mtDialog_ErrorMsgCaption1="Please read the following information for further details." +Count mtDialog_GeneralCaption=1 +mtDialog_GeneralCaption0="General" +Count mtDialog_GeneralHeader=1 +mtDialog_GeneralHeader0="General Information" +Count mtDialog_CallStackCaption=1 +mtDialog_CallStackCaption0="Call Stack" +Count mtDialog_CallStackHeader=1 +mtDialog_CallStackHeader0="Call Stack Information" +Count mtDialog_ModulesCaption=1 +mtDialog_ModulesCaption0="Modules" +Count mtDialog_ModulesHeader=1 +mtDialog_ModulesHeader0="Modules Information" +Count mtDialog_CPUCaption=1 +mtDialog_CPUCaption0="CPU" +Count mtDialog_CPUHeader=1 +mtDialog_CPUHeader0="CPU Information" +Count mtDialog_CustomDataCaption=1 +mtDialog_CustomDataCaption0="Other" +Count mtDialog_CustomDataHeader=1 +mtDialog_CustomDataHeader0="Other Information" +Count mtDialog_OKButtonCaption=1 +mtDialog_OKButtonCaption0="&OK" +Count mtDialog_TerminateButtonCaption=1 +mtDialog_TerminateButtonCaption0="&Terminate" +Count mtDialog_RestartButtonCaption=1 +mtDialog_RestartButtonCaption0="&Restart" +Count mtDialog_DetailsButtonCaption=1 +mtDialog_DetailsButtonCaption0="&Details" +Count mtDialog_SendMessage=1 +mtDialog_SendMessage0="&Send this error via Internet" +Count mtDialog_ScreenshotMessage=1 +mtDialog_ScreenshotMessage0="&Attach a Screenshot image" +Count mtDialog_CopyMessage=1 +mtDialog_CopyMessage0="&Copy to Clipboard" +Count mtDialog_SupportMessage=1 +mtDialog_SupportMessage0="Go to the Support Page" +Count mtLog_AppHeader=1 +mtLog_AppHeader0="Application" +Count mtLog_AppStartDate=1 +mtLog_AppStartDate0="Start Date" +Count mtLog_AppName=1 +mtLog_AppName0="Name/Description" +Count mtLog_AppVersionNumber=1 +mtLog_AppVersionNumber0="Version Number" +Count mtLog_AppParameters=1 +mtLog_AppParameters0="Parameters" +Count mtLog_AppCompilationDate=1 +mtLog_AppCompilationDate0="Compilation Date" +Count mtLog_ExcHeader=1 +mtLog_ExcHeader0="Exception" +Count mtLog_ExcDate=1 +mtLog_ExcDate0="Date" +Count mtLog_ExcAddress=1 +mtLog_ExcAddress0="Address" +Count mtLog_ExcModule=1 +mtLog_ExcModule0="Module" +Count mtLog_ExcType=1 +mtLog_ExcType0="Type" +Count mtLog_ExcMessage=1 +mtLog_ExcMessage0="Message" +Count mtLog_ActCtrlsHeader=1 +mtLog_ActCtrlsHeader0="Active Controls" +Count mtLog_ActCtrlsFormClass=1 +mtLog_ActCtrlsFormClass0="Form Class" +Count mtLog_ActCtrlsFormText=1 +mtLog_ActCtrlsFormText0="Form Text" +Count mtLog_ActCtrlsControlClass=1 +mtLog_ActCtrlsControlClass0="Control Class" +Count mtLog_ActCtrlsControlText=1 +mtLog_ActCtrlsControlText0="Control Text" +Count mtLog_CmpHeader=1 +mtLog_CmpHeader0="Computer" +Count mtLog_CmpName=1 +mtLog_CmpName0="Name" +Count mtLog_CmpUser=1 +mtLog_CmpUser0="User" +Count mtLog_CmpTotalMemory=1 +mtLog_CmpTotalMemory0="Total Memory" +Count mtLog_CmpFreeMemory=1 +mtLog_CmpFreeMemory0="Free Memory" +Count mtLog_CmpTotalDisk=1 +mtLog_CmpTotalDisk0="Total Disk" +Count mtLog_CmpFreeDisk=1 +mtLog_CmpFreeDisk0="Free Disk" +Count mtLog_CmpSystemUpTime=1 +mtLog_CmpSystemUpTime0="System Up Time" +Count mtLog_CmpProcessor=1 +mtLog_CmpProcessor0="Processor" +Count mtLog_CmpDisplayMode=1 +mtLog_CmpDisplayMode0="Display Mode" +Count mtLog_OSHeader=1 +mtLog_OSHeader0="Operating System" +Count mtLog_OSType=1 +mtLog_OSType0="Type" +Count mtLog_OSBuildN=1 +mtLog_OSBuildN0="Build #" +Count mtLog_OSUpdate=1 +mtLog_OSUpdate0="Update" +Count mtLog_OSLanguage=1 +mtLog_OSLanguage0="Language" +Count mtLog_NetHeader=1 +mtLog_NetHeader0="Network" +Count mtLog_NetIP=1 +mtLog_NetIP0="IP Address" +Count mtLog_NetSubmask=1 +mtLog_NetSubmask0="Submask" +Count mtLog_NetGateway=1 +mtLog_NetGateway0="Gateway" +Count mtLog_NetDNS1=1 +mtLog_NetDNS10="DNS 1" +Count mtLog_NetDNS2=1 +mtLog_NetDNS20="DNS 2" +Count mtLog_NetDHCP=1 +mtLog_NetDHCP0="DHCP" +Count mtLog_CustInfoHeader=1 +mtLog_CustInfoHeader0="Custom Information" +Count mtCallStack_Address=1 +mtCallStack_Address0="Address" +Count mtCallStack_Name=1 +mtCallStack_Name0="Module" +Count mtCallStack_Unit=1 +mtCallStack_Unit0="Unit" +Count mtCallStack_Class=1 +mtCallStack_Class0="Class" +Count mtCallStack_Procedure=1 +mtCallStack_Procedure0="Procedure/Method" +Count mtCallStack_Line=1 +mtCallStack_Line0="Line" +Count mtCallStack_MainThread=1 +mtCallStack_MainThread0="Main" +Count mtCallStack_ExceptionThread=1 +mtCallStack_ExceptionThread0="Exception Thread" +Count mtCallStack_RunningThread=1 +mtCallStack_RunningThread0="Running Thread" +Count mtCallStack_CallingThread=1 +mtCallStack_CallingThread0="Calling Thread" +Count mtCallStack_ThreadID=1 +mtCallStack_ThreadID0="ID" +Count mtCallStack_ThreadPriority=1 +mtCallStack_ThreadPriority0="Priority" +Count mtCallStack_ThreadClass=1 +mtCallStack_ThreadClass0="Class" +Count mtSendDialog_Caption=1 +mtSendDialog_Caption0="Send." +Count mtSendDialog_Message=1 +mtSendDialog_Message0="Message" +Count mtSendDialog_Resolving=1 +mtSendDialog_Resolving0="Resolving DNS..." +Count mtSendDialog_Connecting=1 +mtSendDialog_Connecting0="Connecting with server..." +Count mtSendDialog_Connected=1 +mtSendDialog_Connected0="Connected with server." +Count mtSendDialog_Sending=1 +mtSendDialog_Sending0="Sending message..." +Count mtReproduceDialog_Caption=1 +mtReproduceDialog_Caption0="Request" +Count mtReproduceDialog_Request=1 +mtReproduceDialog_Request0="Please describe the steps to reproduce the error:" +Count mtReproduceDialog_OKButtonCaption=1 +mtReproduceDialog_OKButtonCaption0="&OK" +Count mtModules_Handle=1 +mtModules_Handle0="Handle" +Count mtModules_Name=1 +mtModules_Name0="Name" +Count mtModules_Description=1 +mtModules_Description0="Description" +Count mtModules_Version=1 +mtModules_Version0="Version" +Count mtModules_Size=1 +mtModules_Size0="Size" +Count mtModules_LastModified=1 +mtModules_LastModified0="Modified" +Count mtModules_Path=1 +mtModules_Path0="Path" +Count mtCPU_Registers=1 +mtCPU_Registers0="Registers" +Count mtCPU_Stack=1 +mtCPU_Stack0="Stack" +Count mtCPU_MemoryDump=1 +mtCPU_MemoryDump0="Memory Dump" +Count mtSend_SuccessMsg=1 +mtSend_SuccessMsg0="The message was sent successfully." +Count mtSend_FailureMsg=1 +mtSend_FailureMsg0="Sorry, sending the message didn't work." + + diff --git a/Modulos/Contactos/Cliente/Contactos.dpk b/Modulos/Contactos/Cliente/Contactos.dpk new file mode 100644 index 0000000..4439eb9 --- /dev/null +++ b/Modulos/Contactos/Cliente/Contactos.dpk @@ -0,0 +1,85 @@ +package Contactos; + +{$R *.res} +{$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 OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$IMPLICITBUILD OFF} + +requires + BaseD7, + PluginSDK_D7D, + vcl, + rtl, + dbrtl, + vcldb, + cxLibraryVCLD7, + dxThemeD7, + cxEditorsVCLD7, + cxDataD7, + vcljpg, + cxGridVCLD7, + cxPageControlVCLD7, + cxExtEditorsVCLD7, + vclx, + cxExportVCLD7, + dsnap, + adortl, + dxPSCoreD7, + dxComnD7, + dxPScxCommonD7, + dxPSLnksD7, + designide, + vclactnband, + vclshlctrls, + dxPScxGridLnkD7, + dclcxLibraryVCLD7, + dxLayoutControlD7, + PNG_D7, + PngComponentsD7, + JvCoreD7R, + JvStdCtrlsD7R, + JvSystemD7R, + JvCtrlsD7R, + Jcl, + JclVcl; + +contains + uPluginControllerContactos in 'uPluginControllerContactos.pas' {ModuleContactos: TModuleController}, + uDataModuleContactos in 'uDataModuleContactos.pas' {dmContactos: TDAClientDataModule}, + uEditorContacto in 'uEditorContacto.pas' {fEditorContacto}, + uBizContacto in '..\Reglas\uBizContacto.pas', + uEditorContactos in 'uEditorContactos.pas' {fEditorContactos}, + uViewContacto in 'uViewContacto.pas' {frViewContacto: TFrame}, + uEditorCategorias in 'uEditorCategorias.pas' {fEditorCategorias}, + uEditorCategoriasContacto in 'uEditorCategoriasContacto.pas' {fEditorCategoriasContacto}, + LiteralesContactos in 'LiteralesContactos.pas', + uViewContactos in 'uViewContactos.pas' {frViewContactos: TFrame}, + uViewDatosBancarios in 'uViewDatosBancarios.pas' {frViewDatosBancarios: TCustomView}, + uViewDatosFacturacion in 'uViewDatosFacturacion.pas' {frViewDatosFacturacion: TCustomView}, + uViewDatosYSeleccionContacto in 'uViewDatosYSeleccionContacto.pas' {frViewDatosYSeleccionContacto: TCustomView}, + uViewDatosGenerales in 'uViewDatosGenerales.pas' {frViewDatosGenerales: TCustomView}, + uViewCategoriasContacto in 'uViewCategoriasContacto.pas' {frViewCategoriasContacto: TCustomView}, + uViewContactosAsociados in 'uViewContactosAsociados.pas' {frViewContactosAsociados: TCustomView}, + uViewDatosYSeleccionContacto2 in 'uViewDatosYSeleccionContacto2.pas' {frViewDatosYSeleccionContacto2: TCustomView}, + schContactosClient_Intf in '..\Reglas\schContactosClient_Intf.pas'; + +end. diff --git a/Modulos/Contactos/Cliente/Contactos.drc b/Modulos/Contactos/Cliente/Contactos.drc new file mode 100644 index 0000000..cf43ed3 --- /dev/null +++ b/Modulos/Contactos/Cliente/Contactos.drc @@ -0,0 +1,32 @@ +/* VER150 + Generated by the Borland Delphi Pascal Compiler + because -GD or --drc was supplied to the compiler. + + This file contains compiler-generated resources that + were bound to the executable. + If this file is empty, then no compiler-generated + resources were bound to the produced executable. +*/ + +#define LiteralesContactos_msgAtencion 65520 +#define LiteralesContactos_msgNuevoContacto 65521 +#define LiteralesContactos_msgContacto 65522 +#define LiteralesContactos_msgLitNombre 65523 +#define LiteralesContactos_msgLitNombreObligatorio 65524 +#define LiteralesContactos_msgLitBorrar 65525 +#define LiteralesContactos_msgLitBorrarContactoAsociado 65526 +#define LiteralesContactos_msgErrorCategoriaSup 65527 +#define LiteralesContactos_msgErrorContactoAsociado 65528 +STRINGTABLE +BEGIN + LiteralesContactos_msgAtencion, "Atención" + LiteralesContactos_msgNuevoContacto, "Nuevo contacto" + LiteralesContactos_msgContacto, "Contactos - " + LiteralesContactos_msgLitNombre, "Nombre contacto" + LiteralesContactos_msgLitNombreObligatorio, "Debe indicar el nombre" + LiteralesContactos_msgLitBorrar, "¿Desea borrar este contacto?" + LiteralesContactos_msgLitBorrarContactoAsociado, "¿Desea eliminar este contacto asociado?" + LiteralesContactos_msgErrorCategoriaSup, "No se puede eliminar una categoría que esté asignada a algún contacto" + LiteralesContactos_msgErrorContactoAsociado, "No se puede borrar este contacto porque está asociado a alguna obra" +END + diff --git a/Modulos/Contactos/Cliente/Contactos.drc2 b/Modulos/Contactos/Cliente/Contactos.drc2 new file mode 100644 index 0000000..f234a6c --- /dev/null +++ b/Modulos/Contactos/Cliente/Contactos.drc2 @@ -0,0 +1,21 @@ + + +