From 7a9322f9fd8641ac067af636355701984a80e99a Mon Sep 17 00:00:00 2001 From: david Date: Fri, 27 Feb 2009 17:17:29 +0000 Subject: [PATCH] =?UTF-8?q?Importaci=C3=B3n=20inicial?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.UserControl@17 970f2627-a9d2-4748-b3d4-b5283c4fe7db --- internal/2.31RC1/1/Lib/D12/EnvMsgForm_U.dcu | Bin 0 -> 8007 bytes internal/2.31RC1/1/Lib/D12/IncPerfil_U.dcu | Bin 0 -> 7590 bytes internal/2.31RC1/1/Lib/D12/IncUser_U.dcu | Bin 0 -> 13346 bytes internal/2.31RC1/1/Lib/D12/LoginWindow_U.dcu | Bin 0 -> 9014 bytes internal/2.31RC1/1/Lib/D12/MsgRecForm_U.dcu | Bin 0 -> 5698 bytes internal/2.31RC1/1/Lib/D12/MsgsForm_U.dcu | Bin 0 -> 15972 bytes internal/2.31RC1/1/Lib/D12/SenhaForm_U.dcu | Bin 0 -> 7586 bytes internal/2.31RC1/1/Lib/D12/TrocaSenha_U.dcu | Bin 0 -> 6284 bytes internal/2.31RC1/1/Lib/D12/UCALSMTPClient.dcu | Bin 0 -> 63261 bytes internal/2.31RC1/1/Lib/D12/UCAbout.dcu | Bin 0 -> 7030 bytes internal/2.31RC1/1/Lib/D12/UCBase.dcu | Bin 0 -> 146098 bytes .../2.31RC1/1/Lib/D12/UCDataConnector.dcu | Bin 0 -> 2396 bytes internal/2.31RC1/1/Lib/D12/UCDataInfo.dcu | Bin 0 -> 10508 bytes internal/2.31RC1/1/Lib/D12/UCEMailForm_U.dcu | Bin 0 -> 3996 bytes internal/2.31RC1/1/Lib/D12/UCEditorForm_U.dcu | Bin 0 -> 21649 bytes internal/2.31RC1/1/Lib/D12/UCIdle.dcu | Bin 0 -> 5515 bytes internal/2.31RC1/1/Lib/D12/UCMail.dcu | Bin 0 -> 15825 bytes internal/2.31RC1/1/Lib/D12/UCMessages.dcu | Bin 0 -> 48806 bytes internal/2.31RC1/1/Lib/D12/UCObjSel_U.dcu | Bin 0 -> 19817 bytes internal/2.31RC1/1/Lib/D12/UCReg.dcu | Bin 0 -> 15477 bytes internal/2.31RC1/1/Lib/D12/UCSettings.dcu | Bin 0 -> 85406 bytes .../2.31RC1/1/Lib/D12/UcConsts_Language.dcu | Bin 0 -> 112390 bytes internal/2.31RC1/1/Lib/D12/UserPermis_U.dcu | Bin 0 -> 29756 bytes internal/2.31RC1/1/Lib/D12/md5.dcu | Bin 0 -> 9930 bytes internal/2.31RC1/1/Lib/D12/pUCFrame_Log.dcu | Bin 0 -> 18091 bytes .../2.31RC1/1/Lib/D12/pUCFrame_Profile.dcu | Bin 0 -> 13422 bytes internal/2.31RC1/1/Lib/D12/pUCFrame_User.dcu | Bin 0 -> 17483 bytes internal/2.31RC1/1/Lib/D12/pUCGeral.dcu | Bin 0 -> 12404 bytes .../2.31RC1/1/Lib/D12/pUcFrame_UserLogged.dcu | Bin 0 -> 8774 bytes internal/2.31RC1/1/Lib/D12/pckMD5.bpl | Bin 0 -> 16384 bytes internal/2.31RC1/1/Lib/D12/pckMD5.dcp | Bin 0 -> 8117 bytes internal/2.31RC1/1/Lib/D12/pckMD5.dcu | Bin 0 -> 623 bytes .../2.31RC1/1/Lib/D12/pckUCDataConnector.bpl | Bin 0 -> 15360 bytes .../2.31RC1/1/Lib/D12/pckUCDataConnector.dcp | Bin 0 -> 4362 bytes .../2.31RC1/1/Lib/D12/pckUCDataConnector.dcu | Bin 0 -> 1309 bytes .../1/Lib/D12/pckUserControl_DT_D12.bpl | Bin 0 -> 174080 bytes .../1/Lib/D12/pckUserControl_DT_D12.dcp | Bin 0 -> 60278 bytes .../1/Lib/D12/pckUserControl_DT_D12.dcu | Bin 0 -> 4626 bytes .../2.31RC1/1/Lib/D12/pckUserControl_RT.bpl | Bin 0 -> 590336 bytes .../2.31RC1/1/Lib/D12/pckUserControl_RT.dcp | Bin 0 -> 364638 bytes .../2.31RC1/1/Lib/D12/pckUserControl_RT.dcu | Bin 0 -> 4203 bytes .../Connectors/UCADOConn/UCADOConn.pas | 114 + .../Connectors/UCADOConn/UCADOConnReg.pas | 19 + .../Connectors/UCADOConn/pckUCADOConn.bdsproj | 175 + .../Connectors/UCADOConn/pckUCADOConn.dpk | 36 + .../Connectors/UCADOConn/pckUCADOConn.res | Bin 0 -> 1536 bytes .../UCAboluteBase/UCAbsoluteConn.pas | 123 + .../UCAboluteBase/UCAbsoluteConnReg.pas | 17 + .../UCAboluteBase/pckUCAbsoluteConn.dpk | 38 + .../UCAboluteBase/pckUCAbsoluteConn.dproj | 40 + .../UCAboluteBase/pckUCAbsoluteConn.res | Bin 0 -> 5940 bytes .../Connectors/UCAstaConn/UCAstaConn.pas | 113 + .../Connectors/UCAstaConn/UCAstaConnReg.pas | 17 + .../Connectors/UCBDEConn/UCBDEConn.pas | 127 + .../Connectors/UCBDEConn/UCBDEConnReg.pas | 20 + .../Connectors/UCBDEConn/pckUCBDEConn.bdsproj | 175 + .../Connectors/UCBDEConn/pckUCBDEConn.dpk | 36 + .../Connectors/UCBDEConn/pckUCBDEConn.res | Bin 0 -> 1536 bytes .../Connectors/UCDBISAMConn/UCDBISAMConn.pas | 128 + .../UCDBISAMConn/UCDBISAMConnReg.pas | 17 + .../Connectors/UCDBXConn/UCDBXConn.pas | 122 + .../Connectors/UCDBXConn/UCDBXConnReg.pas | 21 + .../Connectors/UCDBXConn/pckUCDBXConn.bdsproj | 175 + .../Connectors/UCDBXConn/pckUCDBXConn.dpk | 38 + .../Connectors/UCDBXConn/pckUCDBXConn.dproj | 98 + .../Connectors/UCDBXConn/pckUCDBXConn.res | Bin 0 -> 1536 bytes .../Connectors/UCFIBConn/UCFIBConn.pas | 120 + .../Connectors/UCFIBConn/UCFIBConnReg.pas | 17 + .../Connectors/UCIBOConn/UCIBOConn.pas | 111 + .../Connectors/UCIBOConn/UCIBOConnReg.pas | 18 + .../Connectors/UCIBOConn/pckIBOConn.dpk | 32 + .../Connectors/UCIBOConn/pckIBOConn.res | Bin 0 -> 1536 bytes .../Connectors/UCIBXConn/UCIBXConn.pas | 152 + .../Connectors/UCIBXConn/UCIBXConnReg.pas | 20 + .../Connectors/UCIBXConn/pckUCIBXConn.bdsproj | 175 + .../Connectors/UCIBXConn/pckUCIBXConn.dpk | 36 + .../Connectors/UCIBXConn/pckUCIBXConn.res | Bin 0 -> 1536 bytes .../Connectors/UCMDOConn/UCMDOConn.pas | 149 + .../Connectors/UCMDOConn/UCMDOConnReg.pas | 17 + .../Connectors/UCMDOConn/pckUCMDOConn.bdsproj | 177 + .../Connectors/UCMDOConn/pckUCMDOConn.dpk | 40 + .../Connectors/UCMDOConn/pckUCMDOConn.res | Bin 0 -> 5056 bytes .../Connectors/UCMidasConn/UCMidasConn.pas | 181 + .../Connectors/UCMidasConn/UCMidasConnReg.pas | 74 + .../UCMidasConn/pckUCMidasConn.bdsproj | 178 + .../Connectors/UCMidasConn/pckUCMidasConn.dpk | 39 + .../UCMidasConn/pckUCMidasConn.dproj | 56 + .../Connectors/UCMidasConn/pckUCMidasConn.res | Bin 0 -> 1536 bytes .../Connectors/UCMyDACConn/UCMyDACConn.pas | 106 + .../Connectors/UCMyDACConn/UCMyDACConnReg.pas | 17 + .../Connectors/UCMyDACConn/pckMyDacConn.dpk | 48 + .../Connectors/UCMyDACConn/pckMyDacConn.dproj | 90 + .../UCMyDACConn/pckMyDacConn.groupproj | 31 + .../Connectors/UCMyDACConn/pckMyDacConn.res | Bin 0 -> 5280 bytes .../Connectors/UCMyDACConn/pckUCMYDac.bdsproj | 175 + .../Connectors/UCMyDACConn/pckUCMYDac.dpk | 47 + .../Connectors/UCMyDACConn/pckUCMYDac.res | Bin 0 -> 5056 bytes .../UCMySQLDACConn/UCMySQLDACConn.pas | 106 + .../UCMySQLDACConn/UCMySQLDACConnReg.pas | 17 + .../UCMySQLDACConn/pckMySQLDACConn.bdsproj | 175 + .../UCMySQLDACConn/pckMySQLDACConn.dpk | 38 + .../UCMySQLDACConn/pckMySQLDACConn.dproj | 98 + .../UCMySQLDACConn/pckMySQLDACConn.res | Bin 0 -> 5056 bytes .../UCNexusDBConn/UCNexusDBConn.pas | 104 + .../UCNexusDBConn/UCNexusDBConnReg.pas | 15 + .../UCNexusDBConn/pckUCNexusDBConn.dpk | 38 + .../UCNexusDBConn/pckUCNexusDBConn.res | Bin 0 -> 5056 bytes .../Connectors/UCODACConn/UCODACConn.pas | 119 + .../Connectors/UCODACConn/UCODACConnReg.pas | 17 + .../Connectors/UCODACConn/pckODACConn.bdsproj | 175 + .../Connectors/UCODACConn/pckODACConn.dpk | 35 + .../Connectors/UCODACConn/pckODACConn.res | Bin 0 -> 4396 bytes .../Connectors/UCUIBConn/UCUIBConn.pas | 146 + .../Connectors/UCUIBConn/UCUIBConnReg.pas | 21 + .../Connectors/UCUIBConn/pckUCUIBConn.bdsproj | 182 + .../Connectors/UCUIBConn/pckUCUIBConn.dpk | 43 + .../Connectors/UCUIBConn/pckUCUIBConn.res | Bin 0 -> 5056 bytes .../Connectors/UCZeosConn/UCZEOSConn.pas | 127 + .../Connectors/UCZeosConn/UCZEOSConnReg.pas | 17 + .../Connectors/UCZeosConn/pckZeosConn.bdsproj | 175 + .../Connectors/UCZeosConn/pckZeosConn.dpk | 36 + .../Connectors/UCZeosConn/pckZeosConn.dproj | 51 + .../Connectors/UCZeosConn/pckZeosConn.res | Bin 0 -> 1536 bytes internal/2.31RC1/1/Packages/D2009.groupproj | 74 + .../ModelSupport_pckMD5/default.txaPackage | 0 .../ModelSupport_pckMD5/pckMD5.prjconfig | 2 + .../default.txaPackage | 0 .../pckUCDataConnector.prjconfig | 2 + .../default.txaPackage | 0 .../pckUserControl_RT.prjconfig | 2 + internal/2.31RC1/1/Packages/pckMD5.bdsproj | 179 + internal/2.31RC1/1/Packages/pckMD5.dpk | 34 + internal/2.31RC1/1/Packages/pckMD5.dproj | 118 + internal/2.31RC1/1/Packages/pckMD5.res | Bin 0 -> 5056 bytes .../1/Packages/pckUCDataConnector.bdsproj | 181 + .../2.31RC1/1/Packages/pckUCDataConnector.dpk | 36 + .../1/Packages/pckUCDataConnector.dproj | 121 + .../2.31RC1/1/Packages/pckUCDataConnector.res | Bin 0 -> 5056 bytes .../2.31RC1/1/Packages/pckUCGlobal.bdsproj | 175 + internal/2.31RC1/1/Packages/pckUCGlobal.dpk | 40 + internal/2.31RC1/1/Packages/pckUCGlobal.res | Bin 0 -> 4396 bytes .../1/Packages/pckUserControl_DT.bdsproj | 178 + .../2.31RC1/1/Packages/pckUserControl_DT.dpk | 48 + .../1/Packages/pckUserControl_DT.dproj | 129 + .../2.31RC1/1/Packages/pckUserControl_DT.res | Bin 0 -> 5184 bytes .../1/Packages/pckUserControl_DT_D12.dpk | 48 + .../1/Packages/pckUserControl_DT_D12.dproj | 129 + .../1/Packages/pckUserControl_DT_D12.res | Bin 0 -> 5184 bytes .../1/Packages/pckUserControl_RT.bdsproj | 180 + .../2.31RC1/1/Packages/pckUserControl_RT.dpk | 65 + .../1/Packages/pckUserControl_RT.dproj | 157 + .../2.31RC1/1/Packages/pckUserControl_RT.res | Bin 0 -> 5056 bytes internal/2.31RC1/1/Source/Dcr/UCADOConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCASTAConn.bmp | Bin 0 -> 1782 bytes .../2.31RC1/1/Source/Dcr/UCAppMessage.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCBDEConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCControls.bmp | Bin 0 -> 1782 bytes .../2.31RC1/1/Source/Dcr/UCDBISAMConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCDBXConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCFIBConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCIBOConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCIBXConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCIdle.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCMDOConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCMail.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCMain.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCMidasConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCMyDACConn.bmp | Bin 0 -> 1782 bytes .../2.31RC1/1/Source/Dcr/UCMySQLDACConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCReg.dcr | Bin 0 -> 38300 bytes internal/2.31RC1/1/Source/Dcr/UCReg.rc | 21 + internal/2.31RC1/1/Source/Dcr/UCSettings.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCXp.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UCZEOSConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/UODACConn.bmp | Bin 0 -> 1782 bytes internal/2.31RC1/1/Source/Dcr/make.bat | 1 + internal/2.31RC1/1/Source/EnvMsgForm_U.dfm | 343 ++ internal/2.31RC1/1/Source/EnvMsgForm_U.pas | 116 + internal/2.31RC1/1/Source/IncPerfil_U.dfm | 307 + internal/2.31RC1/1/Source/IncPerfil_U.pas | 111 + internal/2.31RC1/1/Source/IncUser_U.dfm | 485 ++ internal/2.31RC1/1/Source/IncUser_U.pas | 245 + internal/2.31RC1/1/Source/LoginWindow_U.dfm | 260 + internal/2.31RC1/1/Source/LoginWindow_U.pas | 142 + internal/2.31RC1/1/Source/MsgRecForm_U.dfm | 263 + internal/2.31RC1/1/Source/MsgRecForm_U.pas | 77 + internal/2.31RC1/1/Source/MsgsForm_U.dfm | 1153 ++++ internal/2.31RC1/1/Source/MsgsForm_U.pas | 346 ++ internal/2.31RC1/1/Source/SenhaForm_U.dfm | 73 + internal/2.31RC1/1/Source/SenhaForm_U.pas | 95 + internal/2.31RC1/1/Source/TrocaSenha_U.dfm | 350 ++ internal/2.31RC1/1/Source/TrocaSenha_U.pas | 89 + internal/2.31RC1/1/Source/UCALSMTPClient.pas | 3770 ++++++++++++ internal/2.31RC1/1/Source/UCAbout.dfm | 835 +++ internal/2.31RC1/1/Source/UCAbout.pas | 115 + .../2.31RC1/1/Source/UCAboutXpStyle_U.dfm | 768 +++ .../2.31RC1/1/Source/UCAboutXpStyle_U.pas | 46 + internal/2.31RC1/1/Source/UCBase.pas | 4080 +++++++++++++ internal/2.31RC1/1/Source/UCDataConnector.pas | 25 + internal/2.31RC1/1/Source/UCDataInfo.pas | 247 + internal/2.31RC1/1/Source/UCEMailForm_U.dfm | 151 + internal/2.31RC1/1/Source/UCEMailForm_U.pas | 34 + internal/2.31RC1/1/Source/UCEditorForm_U.dfm | 1585 +++++ internal/2.31RC1/1/Source/UCEditorForm_U.pas | 469 ++ internal/2.31RC1/1/Source/UCIdle.pas | 138 + internal/2.31RC1/1/Source/UCLock.res | Bin 0 -> 3172 bytes internal/2.31RC1/1/Source/UCMail.pas | 317 + internal/2.31RC1/1/Source/UCMessages.pas | 1137 ++++ internal/2.31RC1/1/Source/UCObjSel_U.dfm | Bin 0 -> 17579 bytes internal/2.31RC1/1/Source/UCObjSel_U.pas | 334 ++ internal/2.31RC1/1/Source/UCReg.dcr | Bin 0 -> 38300 bytes internal/2.31RC1/1/Source/UCReg.pas | 348 ++ internal/2.31RC1/1/Source/UCSettings.pas | 1425 +++++ internal/2.31RC1/1/Source/UCXPSettings.pas | 446 ++ internal/2.31RC1/1/Source/UCXPStyle.pas | 5183 +++++++++++++++++ .../2.31RC1/1/Source/UcConsts_Language.pas | 971 +++ internal/2.31RC1/1/Source/UserControl.inc | 192 + internal/2.31RC1/1/Source/UserPermis_U.dfm | 636 ++ internal/2.31RC1/1/Source/UserPermis_U.pas | 750 +++ internal/2.31RC1/1/Source/md5.pas | 401 ++ internal/2.31RC1/1/Source/pUCFrame_Log.dfm | 593 ++ internal/2.31RC1/1/Source/pUCFrame_Log.pas | 305 + .../2.31RC1/1/Source/pUCFrame_Profile.dfm | 360 ++ .../2.31RC1/1/Source/pUCFrame_Profile.pas | 246 + internal/2.31RC1/1/Source/pUCFrame_User.dfm | 440 ++ internal/2.31RC1/1/Source/pUCFrame_User.pas | 326 ++ internal/2.31RC1/1/Source/pUCGeral.dfm | 533 ++ internal/2.31RC1/1/Source/pUCGeral.pas | 217 + .../2.31RC1/1/Source/pUcFrame_UserLogged.dfm | 222 + .../2.31RC1/1/Source/pUcFrame_UserLogged.pas | 130 + .../2.31RC1/1/UCHistorico/GHistorico.bdsgroup | 19 + .../1/UCHistorico/GHistorico.groupproj | 31 + .../2.31RC1/1/UCHistorico/UCHistDataset.pas | 266 + .../2.31RC1/1/UCHistorico/UCHist_Base.pas | 206 + .../2.31RC1/1/UCHistorico/UCHist_Form.dfm | 1311 +++++ .../2.31RC1/1/UCHistorico/UCHist_Form.pas | 318 + .../2.31RC1/1/UCHistorico/UCHist_Type.pas | 278 + internal/2.31RC1/1/UCHistorico/UcHistReg.dcr | Bin 0 -> 4912 bytes .../1/UCHistorico/dcr/UCControlHistorico.bmp | Bin 0 -> 3126 bytes .../1/UCHistorico/dcr/UCHist_DataSet.bmp | Bin 0 -> 1654 bytes .../2.31RC1/1/UCHistorico/dcr/UcHistReg.rc | 2 + internal/2.31RC1/1/UCHistorico/dcr/make.bat | 1 + .../1/UCHistorico/pckHistorico.bdsproj | 175 + .../2.31RC1/1/UCHistorico/pckHistorico.dpk | 52 + .../2.31RC1/1/UCHistorico/pckHistorico.dproj | 124 + .../2.31RC1/1/UCHistorico/pckHistorico.res | Bin 0 -> 5056 bytes internal/2.31RC1/1/clean.bat | 7 + 247 files changed, 42430 insertions(+) create mode 100644 internal/2.31RC1/1/Lib/D12/EnvMsgForm_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/IncPerfil_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/IncUser_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/LoginWindow_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/MsgRecForm_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/MsgsForm_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/SenhaForm_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/TrocaSenha_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCALSMTPClient.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCAbout.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCBase.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCDataConnector.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCDataInfo.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCEMailForm_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCEditorForm_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCIdle.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCMail.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCMessages.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCObjSel_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCReg.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UCSettings.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UcConsts_Language.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/UserPermis_U.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/md5.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pUCFrame_Log.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pUCFrame_Profile.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pUCFrame_User.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pUCGeral.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pUcFrame_UserLogged.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pckMD5.bpl create mode 100644 internal/2.31RC1/1/Lib/D12/pckMD5.dcp create mode 100644 internal/2.31RC1/1/Lib/D12/pckMD5.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pckUCDataConnector.bpl create mode 100644 internal/2.31RC1/1/Lib/D12/pckUCDataConnector.dcp create mode 100644 internal/2.31RC1/1/Lib/D12/pckUCDataConnector.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.bpl create mode 100644 internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.dcp create mode 100644 internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.dcu create mode 100644 internal/2.31RC1/1/Lib/D12/pckUserControl_RT.bpl create mode 100644 internal/2.31RC1/1/Lib/D12/pckUserControl_RT.dcp create mode 100644 internal/2.31RC1/1/Lib/D12/pckUserControl_RT.dcu create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMidasConn/UCMidasConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/UCNexusDBConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCODACConn/UCODACConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCODACConn/UCODACConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCZeosConn/UCZEOSConn.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj create mode 100644 internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.res create mode 100644 internal/2.31RC1/1/Packages/D2009.groupproj create mode 100644 internal/2.31RC1/1/Packages/ModelSupport_pckMD5/default.txaPackage create mode 100644 internal/2.31RC1/1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig create mode 100644 internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage create mode 100644 internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig create mode 100644 internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage create mode 100644 internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig create mode 100644 internal/2.31RC1/1/Packages/pckMD5.bdsproj create mode 100644 internal/2.31RC1/1/Packages/pckMD5.dpk create mode 100644 internal/2.31RC1/1/Packages/pckMD5.dproj create mode 100644 internal/2.31RC1/1/Packages/pckMD5.res create mode 100644 internal/2.31RC1/1/Packages/pckUCDataConnector.bdsproj create mode 100644 internal/2.31RC1/1/Packages/pckUCDataConnector.dpk create mode 100644 internal/2.31RC1/1/Packages/pckUCDataConnector.dproj create mode 100644 internal/2.31RC1/1/Packages/pckUCDataConnector.res create mode 100644 internal/2.31RC1/1/Packages/pckUCGlobal.bdsproj create mode 100644 internal/2.31RC1/1/Packages/pckUCGlobal.dpk create mode 100644 internal/2.31RC1/1/Packages/pckUCGlobal.res create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT.bdsproj create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT.dpk create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT.dproj create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT.res create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dpk create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dproj create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_DT_D12.res create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_RT.bdsproj create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_RT.dpk create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_RT.dproj create mode 100644 internal/2.31RC1/1/Packages/pckUserControl_RT.res create mode 100644 internal/2.31RC1/1/Source/Dcr/UCADOConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCASTAConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCAppMessage.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCBDEConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCControls.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCDBISAMConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCDBXConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCFIBConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCIBOConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCIBXConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCIdle.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCMDOConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCMail.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCMain.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCMidasConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCMyDACConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCMySQLDACConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCReg.dcr create mode 100644 internal/2.31RC1/1/Source/Dcr/UCReg.rc create mode 100644 internal/2.31RC1/1/Source/Dcr/UCSettings.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCXp.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UCZEOSConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/UODACConn.bmp create mode 100644 internal/2.31RC1/1/Source/Dcr/make.bat create mode 100644 internal/2.31RC1/1/Source/EnvMsgForm_U.dfm create mode 100644 internal/2.31RC1/1/Source/EnvMsgForm_U.pas create mode 100644 internal/2.31RC1/1/Source/IncPerfil_U.dfm create mode 100644 internal/2.31RC1/1/Source/IncPerfil_U.pas create mode 100644 internal/2.31RC1/1/Source/IncUser_U.dfm create mode 100644 internal/2.31RC1/1/Source/IncUser_U.pas create mode 100644 internal/2.31RC1/1/Source/LoginWindow_U.dfm create mode 100644 internal/2.31RC1/1/Source/LoginWindow_U.pas create mode 100644 internal/2.31RC1/1/Source/MsgRecForm_U.dfm create mode 100644 internal/2.31RC1/1/Source/MsgRecForm_U.pas create mode 100644 internal/2.31RC1/1/Source/MsgsForm_U.dfm create mode 100644 internal/2.31RC1/1/Source/MsgsForm_U.pas create mode 100644 internal/2.31RC1/1/Source/SenhaForm_U.dfm create mode 100644 internal/2.31RC1/1/Source/SenhaForm_U.pas create mode 100644 internal/2.31RC1/1/Source/TrocaSenha_U.dfm create mode 100644 internal/2.31RC1/1/Source/TrocaSenha_U.pas create mode 100644 internal/2.31RC1/1/Source/UCALSMTPClient.pas create mode 100644 internal/2.31RC1/1/Source/UCAbout.dfm create mode 100644 internal/2.31RC1/1/Source/UCAbout.pas create mode 100644 internal/2.31RC1/1/Source/UCAboutXpStyle_U.dfm create mode 100644 internal/2.31RC1/1/Source/UCAboutXpStyle_U.pas create mode 100644 internal/2.31RC1/1/Source/UCBase.pas create mode 100644 internal/2.31RC1/1/Source/UCDataConnector.pas create mode 100644 internal/2.31RC1/1/Source/UCDataInfo.pas create mode 100644 internal/2.31RC1/1/Source/UCEMailForm_U.dfm create mode 100644 internal/2.31RC1/1/Source/UCEMailForm_U.pas create mode 100644 internal/2.31RC1/1/Source/UCEditorForm_U.dfm create mode 100644 internal/2.31RC1/1/Source/UCEditorForm_U.pas create mode 100644 internal/2.31RC1/1/Source/UCIdle.pas create mode 100644 internal/2.31RC1/1/Source/UCLock.res create mode 100644 internal/2.31RC1/1/Source/UCMail.pas create mode 100644 internal/2.31RC1/1/Source/UCMessages.pas create mode 100644 internal/2.31RC1/1/Source/UCObjSel_U.dfm create mode 100644 internal/2.31RC1/1/Source/UCObjSel_U.pas create mode 100644 internal/2.31RC1/1/Source/UCReg.dcr create mode 100644 internal/2.31RC1/1/Source/UCReg.pas create mode 100644 internal/2.31RC1/1/Source/UCSettings.pas create mode 100644 internal/2.31RC1/1/Source/UCXPSettings.pas create mode 100644 internal/2.31RC1/1/Source/UCXPStyle.pas create mode 100644 internal/2.31RC1/1/Source/UcConsts_Language.pas create mode 100644 internal/2.31RC1/1/Source/UserControl.inc create mode 100644 internal/2.31RC1/1/Source/UserPermis_U.dfm create mode 100644 internal/2.31RC1/1/Source/UserPermis_U.pas create mode 100644 internal/2.31RC1/1/Source/md5.pas create mode 100644 internal/2.31RC1/1/Source/pUCFrame_Log.dfm create mode 100644 internal/2.31RC1/1/Source/pUCFrame_Log.pas create mode 100644 internal/2.31RC1/1/Source/pUCFrame_Profile.dfm create mode 100644 internal/2.31RC1/1/Source/pUCFrame_Profile.pas create mode 100644 internal/2.31RC1/1/Source/pUCFrame_User.dfm create mode 100644 internal/2.31RC1/1/Source/pUCFrame_User.pas create mode 100644 internal/2.31RC1/1/Source/pUCGeral.dfm create mode 100644 internal/2.31RC1/1/Source/pUCGeral.pas create mode 100644 internal/2.31RC1/1/Source/pUcFrame_UserLogged.dfm create mode 100644 internal/2.31RC1/1/Source/pUcFrame_UserLogged.pas create mode 100644 internal/2.31RC1/1/UCHistorico/GHistorico.bdsgroup create mode 100644 internal/2.31RC1/1/UCHistorico/GHistorico.groupproj create mode 100644 internal/2.31RC1/1/UCHistorico/UCHistDataset.pas create mode 100644 internal/2.31RC1/1/UCHistorico/UCHist_Base.pas create mode 100644 internal/2.31RC1/1/UCHistorico/UCHist_Form.dfm create mode 100644 internal/2.31RC1/1/UCHistorico/UCHist_Form.pas create mode 100644 internal/2.31RC1/1/UCHistorico/UCHist_Type.pas create mode 100644 internal/2.31RC1/1/UCHistorico/UcHistReg.dcr create mode 100644 internal/2.31RC1/1/UCHistorico/dcr/UCControlHistorico.bmp create mode 100644 internal/2.31RC1/1/UCHistorico/dcr/UCHist_DataSet.bmp create mode 100644 internal/2.31RC1/1/UCHistorico/dcr/UcHistReg.rc create mode 100644 internal/2.31RC1/1/UCHistorico/dcr/make.bat create mode 100644 internal/2.31RC1/1/UCHistorico/pckHistorico.bdsproj create mode 100644 internal/2.31RC1/1/UCHistorico/pckHistorico.dpk create mode 100644 internal/2.31RC1/1/UCHistorico/pckHistorico.dproj create mode 100644 internal/2.31RC1/1/UCHistorico/pckHistorico.res create mode 100644 internal/2.31RC1/1/clean.bat diff --git a/internal/2.31RC1/1/Lib/D12/EnvMsgForm_U.dcu b/internal/2.31RC1/1/Lib/D12/EnvMsgForm_U.dcu new file mode 100644 index 0000000000000000000000000000000000000000..c39867d5bc1afc530d0deb6a54d463f82e578335 GIT binary patch literal 8007 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 H$+Z6kZ%^re literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/IncUser_U.dcu b/internal/2.31RC1/1/Lib/D12/IncUser_U.dcu new file mode 100644 index 0000000000000000000000000000000000000000..9a9042ceb97279d737eaa1695f1a58a6256fe3eb GIT binary patch literal 13346 zcmeHNeUuc{m4Ef>RZ%nadw?J#_bs zj7Q86#bwgz93Ys03&wGER}#pA5d*GlG>A%8lyM;kc4b#q*)S0dWF<#(_}JflRn^lC zn6sO|cci-N-rs%q-FLs8;*-CkCHA z#?E-cY-Nl!4``ade1+*x{Nv0&zS}&YHj*%dW-MoG^DmnRR7Rs=(--;U9ox-dzAaYf zS=H_f$3I(A5Debt@a{DevwiWFs%XHxL_nbfG({T|u}~!Vhb(S&DBk8v_*?#%rDUG@ zP;Dfh@J0OQ6#@o1N@`-J=^$5uH0OCEAwTA_bkG0s()WT|4U975hoAbqS&z#pC0lq_ zhZ0yN3yP*#yV(IeXjH`Gp?S+I6v*$~VQvMFjuSvm6de_;t=(PF_IdCy-i3=WV(!m*#< zw&5x!sccUqq7hPyRH+OlDie{C&8{=euBOH|(+pVfo(U&3rKgQ0jL)_L;ppK1yY&VU!iLJ0&LBBux{ z$$%Pt%_ey&9hN_kL~&ES8H+<1DYwG?`{3@k;3d0Gqy>YT7KI{C;aE~l(KpuSe=B%< zCQ{{#RJ13ejiHCl!vqe#0cI3WSS-N4v7rS5{a2ul$BcV5&GpU zv^}1PwpN6ZtVjYgmZ&tFqcQVeNbrs?5Uh{JLzJDzNN7l=P_+qbqMeH(ffIy{%EF@l zl?`TF*ylH^@mLiO!EygaVqeM>Lz!F9{8%U$iku~ZtR<6x)rdT+$@lT!l1Rx7I;zc% zkl!Rhb9LeqlE_+3qnW7p#W1?k=U*9&McX5Rf!~HumT%HR)zS9lVY9Nmx!H`F0T&5o zMX#|X`jBl?K7n7&G{(w18@3kZ3tN*@xC?1OmJ@3u9lmgglJ#D~Zp%~#2O`*sIs&qC z1h!VvD&qA76=#mI3~03YwjE{gVuhcA*fFB~GUmwOdm=upHt+}mqcVY-aMYJTqowdQ zqFQ93JxXGO(qgc~N#u<;A=NQouns+SQ}&z~W6$}00tz#g&GWUIn{QH78LAGEq8}16 zBrT6c(G<0 z3i!fMJOpQb86y4wudbvHW;9j%5i>5U0S%r+-;-*W=B)#r@fgxrye1)*!jv-v15nI&`|~%Bn;xEZb&LQ+4IsXmn+J z8#>&;1jK&y$yTBTdGCVD(`R(T40i41@h|6gq1c?}j;$?iuYp}%Nf0)i zeyG}PMoX`cMcdGkLuPyyNn}}PcUnvLJp|v8t-xx;83vS-5DGP8mZ)VyB_Ua+RYz_8 zRX0tHEU@}>1I}}^2}X_e>!kFx+e9sa#hKvTs4rj!>WH7^%X!g6s5#_EbBRXg-K4Uf zI-cdqdIGa7Z7_WSxobDvq_x3Z)sFp0#<7vm5t+6i-|Zd1?j_!vbf-lY5tQYAtEXDI z6u*z);hD-&MzVo7m=W}^`w2&j?e`Lbj^O&25RerTxrw7fmfoatLAx32q%&2l89S(t z@GRe2p?r$?Sq`%JIQRYyL0MMVG2TW1nrOdyvQXrNPZO54G^D1lJ&dC`9aUpLB0Osa za9T~&-yYvZ$c-MCh#9b}>Zc@V>*s(M?g`PEN_HXsQDHz;_;c z(Vg#&`Py1Serm9w?6z-FqOmO$p-nIc2lG(G69^?5&n#OI%%y|6Mc=u9*54v^9g;RY zx$8Wtb@V}9V?~D zaoP&xsAs?jP7@}PlE%IK8{5A*^ln=o4MX9C-D@H5i|+e zgt*ZWHD2}~J6}TySWM(cYcx{Vc<;Ma4{DN&K1=;S9)Ac`_37n%j`&SDyUrI1OKpWs z^ho;bR&{&sZ+;@zO?-ReJpHQ;!O|Ng%RG^ekk8W!xr#u@j~&ftM`d2=m8#(QKP4YV z6LX~JLs~AAj*qpG=BP9*4=ZY-<2l(Dul>ny+OZ9Zl&JK9aUaHHob%rBPfs7)-UXD=WPC6(v(1>GokkNPETd<1O1i&PdqDS>(d(cx z67M|skGrj`sX2!468>;|C}u|rzFGQ}ITz=#(&C%J^^8624gaYAYrJeq4Py;#`VHB8 zk^9G&+&r#~(p&DVQ2%oK+OIKVeN+7?(P)O7hcH&pM(N0Lw0IDlkJhcj1&GnYzfDQ0 z0~j;vua6(`MVjS#6slh()#X{L^(@uUw%yS->K59TC-61GZ-#x?|NJYV@#mz`m8CJ; zSZLhgXmsCFBcj=XZfYysM+#Tnp4Qlm<)6s1(Vg2dFWP~ZD6|Ej#^-Jgj8>DLFSzv% z*+_^u3qlqf5g)o;9aI>e)omfXsKa+6*FB&E-)YdNh%(%H9rdwL2f9`;({;B} zhQZU0x)l%TDa^TJRePOP-EoUmVdJ9DiL$T4OZ#b271}nD8B@28PJ`nTCJ-0g1MF8p zP=#mR0~#0LGhHiTSf5gc$*1X5Jnvc)wUX1<csb=e_@xWL_c(lmPA4`p!3U() zK?a1E%c`Ius{qtFKn@LYpb2XMEpQ-=k;Ow}HUjWEfE?pM6M6tGcA$L!%FGhN(6T+i zmpZr+UTzf}DSaJ?&p`&tb6Of4(hJaZzyWqIMIde8FsY-*mYN{fFB>-M za?Ap_=6MGiP*Wj~HjFdf2VjQ-xN0)aSU{((0=mmVZ?CcYWtA`Bqwg8^_6)(owGiCn z2yN~V}e*(|T6vmF=NJ)P| z^pbP9{{QdK^T6%wVR&z~^q}2?9|57T%*NXV4idxawvT7XPF)W|W$C{9T}k#g(+wH2 zQ#ON8m~OSrEg%F-_sVS&a~k9`6727a&pD{dLt-Ev5})4c>zXPND7 zA2};M8uI z^&bludsE>D87uOEj)vDbI)XDetixggnQ(JtyAud{C6~o{$i!PnJ(hmWyP$d+K3JmFL5P zpXY6WT~ptejJ~PxO0w?Ui%L&=K}j0lz2z8<_nd`_f|u(j*%tI`_MS^VMIzmgQT3!e zM`6=DH`?^h7ui$-vmBeeM>CbnX$!A!LJhLniNR7MdG19;dam!=G@JK|I(Mi z&e;w-*Zu8}rQGLIj;dH9Deq_5CZ@a>B!i08(V>xAOWgCSJ?vE}^%4MW3t}X>?PBU5 zKCukU29lOeD)=N;@&P<6eVXi|`gK^Tx_x#KlAe9m+_3iZ`lRPV{lZ0ZJ}P91)Hf#U zt|ZC$vz8>~lML{dnefxPe=B&r7-l7_W_PU?tl)7C#MJk_ExAw-xIQJ&Jv!ytne<-S z-ydYp&Q#s*r1xyW&l?h!PVerN=OtVHOVW&#_l4w}Hs=L!AY7iPPaaIxeU|ioE`h19 z-M@Hopu4bd6YS_C^|;HwFVR}-5oO0{Dc`pOc*^^Kj!Vk3MUGE-xBMBQ$oBi@wBI*d zi?gh`FP$!TG4#Kg45{?}6MIlPWlU4N;p2P|YO$Q3k3Qfy1s7H!=%DW-$ z?hSw1-Jguh^7UU+71xXX2s_oRT$QynN|X;_*)6Dom$g?hbA8Iwl|(gfq6O@^A_Y@* zU2>T;@|AbUyrI{>znL=3W0jZ__LlVkp}-pD+3*TkU=w!0JTKVv&P?#7Ov0`*&pWo{ zQTu+(zJF-nKeq1|UZGwtiG$J)eVsUsJ@~*klV_G5#D2}#ZowH?*Ijs?$39|F=4KTv z%o5CGG3H|dT+W{(tAh~&;$?9uML2rAKMQXvwZ>zeIa}uzDHx_b@%){p5s$xyd&BnqzW%Ad}YVgr&KC832Zag=zYDhMK zQ^^*m`NV6)c7*8M*TE3aA! zrF~Gcd^L7SSMmvJB9@{&nvoihtwPF|KLW9$j_<_Ys z55l>YK~BR<9_{+QVwo#7JU~Yv@;_yZ70v5t3)q6}&7oxi2wUanOAkIakwE2O>tU6- z)~HNbqq>!~s)0LQh4QN4hT<}md_yTTl!b;e5%gqS#fCBrw?T$7#88Uxw8T*U-B9i` zlyipisiFMdP&OD!gP~k8lqN&bAd!P>nV~#jD9a7yaYKn1%2`8+8Ojre@>@e$Zz!J` z%6AOqyN2>TL;2iL{$MDZ4CR`kY&Mi17|J7t@~EM78OpZ}Wjb{I+E4<9a>7vl)lfb# zlx9O|F_aGt?*H5S)bxC_fapy4~M8{a}p@#SzlKIDy46fq9p%tqpi>u6<|xKH_&p`;-Hj-kvo zl#O_L64#4{GS5&};b|*3T=;+mw@#97JvzpfQVrL3)ddatyp|X9IzGs?L*;xi&vorp zr(mWh_?AKZFu#*;naiK&gTTq>uZ&bK^IV?8@8V1O{Wij%>f&1pd7nCsZy7EB4d**} zA)h&c&zi!^m+?IycJXPvoxAxFejhYV;A6({UOt468^ibVDSVhZhL0~)4#3vE>TrG> zbCgbSw52uOZELz8n(FyUJ{!VAaFs|MBh-=oI^33y68>BX|GRw1jOUf3adTsV!*MU< z)x-G&{1)=E;e1m18D#n&m@Yo$6;~ge+^7B&S1ue;i2Ecy&COpJ&7T_%q7aLP+(`LY zhNojLMYs{75bpUq3exqJt; zkU4yu-i64Qi0>7aLVt;9;f1aqmES2`;u$bX`2Mr$wdPqG25NCi+ z^=%rp1{8GB&ERaUI-7~B>N>R>bgs_UsXgM1SgX1?BThbNq`Hu^jp|x_Pq?Z+scu)F z2dh|TPpX%NsjXE9akdqlA;oOFx>p3j6G>QK&lfDYH$^Qxk?YU?;n zxI^6!W{JUesH3!QZ5;$h3bsr2>buFvJpkRsY>%3!4bxU>YqS~qV!c&grOzRBFVN9~ z?Nygz*qB1LUmdHh(^C3&y+?muKLqAD!49ZBdMiA3Rec@e<8#^T>O?K2ZI^hdV29M_ z^=^qD20lTs!)gkPDdX&jsBYM^Xd#yCrt4^+1?8xr7~R{myc*G zob_Tw;GD!56YiVB*>RW&&MD~V1ZNs&CslljxT>B~i^N9pq&TDXk-%v%&S2s@1v{l) z5{dxt45pooW!%NtX*G{HeK5lV&fT1yK?J}#53}l^cqV6k>M)YI2r~~rW)^4X)nl~s zOITTXA-kj=5xwF#0&_}S6q=SxtI)(&jII<+6T8GA>4+RKst2(gu|rTCX}}DvLffkK zXwTA+JaHa|))*{L9M+C#y&z^AtVmoEDG(beHIWqfogucWID5_z6~ZGmSBM_ij5Ci| zES@KcI&riV271NO3Aim5UMaR%?2=0M(61?uRS3-5Do$!TGmzC{vhL9j=r|@q)n0K# z93Z()@jAX|v9(y*L|A)BW%+EKxGV`15%1AZSNW_PSxIvc#5ouj#SR%EP1}7xa=5=NXHrwhLygYR*YQF?qckeUZtal1M^-vf zyV6gG_^+XDqSnfrp`QwJG)*)ENp^^TjvzY;SA;YsYOq>p<3;K?a4NK3E2AKP1xN*A zvRA67C%pB6SF7#NPE%^sLg-zav7g^%KON$~grbzzjoqE@MQSa6tB82jlEA4VR}(9)BV{Q8tz5h{0rjH-fqjDQ$OGeh%X6u#7V@pU}Cn$zfm6Pjk1txAGR; zw*x2sF5nIFe%hw{aNe@`)B*PBBjj>M(eD9t?Ac%*(#I0nt8ZSGQp@RtO#Ni5s$bhq zWFdAGUGGt+UE5)y=o;8NaQ+PVRVU`;_Nqs6uAQWx<7%r5 zKb`qTubNkods1Co0FlLoK=E^29Z`I(PhEB&o78Y#y^~#4EA{hg<+ZEo0)9;qu-HQ&$$;ZWl1@UR3528rq98oFUw0mMx5+wcBoJM_w0r32 z4G$CNwXsn)sV5NZ?QUN6W8PQT9oJ&sXe1GfhCO=3zwpMs*{tt!k7sdLG#T@2i|yn3 z)HseK0cTf#JfZaxLV`KIdCOO5{=~mu`|YoS+}oqZ^k;9V3KgWqo~D&aH5~uT;=)kq zQd2fZOSGu*9&a?DokhTH0={ThBBn<|-`J#$dc03f_%hX6BE_*o*$wVR=!49~#K~FR!BI6!( zod^j}x_2@3MJ=fChSfM2igS(id8563(TEmFc)I%nYC`MOLOQIo|L8yO@P&#k@WPm$ zfaL<^7((MLP?s9iys(z0HGZuxp+_U%AY-(zLyN^h87i-j$MsO;&!Lyz0khL#BP}TM zLByGHWUzeEx9%+XY3MR5;#DK{$wahEze78OVDT`pQ;P%i9zx@75I7_eQ}u`zFetx7 z$`~6Zrop0&J$WC|D{W{po{09=hrxP?3@w&u(1OvJ_8TN#@jb+jXk14(e2AnHE2&Wf zYoh%NBY}?*E4N`$|LvVxUs&~PjnMRlb#UA#NW0uhgA6dBc`+UG^&}E(OGbi`mrZNX z_wg@~GH#fTMs1bu*N~{KNqmV6+iJSBM28xK(G9Bq_E0REj07&Z3rIHKWJrzC4;V0%{O$Ul(MHOtke#E6UKo4l|IqjX)Y>YN#Em%69vlFeW|c0|>aS%I2!Q+Jhq$ zHRz2xD*8u6N-}&{6i(6FtA@1r6Np`w!LX|6;8SDOzeAAs#^&Aruj~F$6%;0I^@XWw zXq4IWfMpByK%!?7(nnjxEt($cNtB@6MwgkC58|NHC)i|605a z`WNVN9o&5-YO<}|2Z1{e6<$f%(L zQpTHzg=G+1(HmTC#!{&*TbVtzT^M<4Gw7cJU?D-)q#3u7l-99j^D2+ryR z*i6D!1R*4|U|UoTXn}T=+k81Un$Ux~A5u3OnL9#d2i6nAl^qD$EbY|PfIJgBM`-QT zRwkj^%YE!ZbiCCTh>&!BO=oKN2;CXVLWFGYH!7Bqsqvc;F10FOpc>_|Q;R@#xCL=2 zU|C1Nro-m?7b9TX5_v>I0b4Rc<@}@;>&MGbEC}b5inz_U##Zh?xy?a_94=fxL&#=D zdXIM^03|AGp3Dn5;p2$emIk4zCc|(C#2ZxX3B+wH0H-xa{mJ+Xhz$3*M6^IUt6oHk z%~(99plYh&mk_eW$U?Ygd3*G5;3lnq&j{W1L2wMHg{V);L*w5@P>gGXT(d!W1t}H2 zEx}OyN5ek?^@}rNwJq^2Pk$8Ms ztQW4h3GGj33pc^7Z%$0@>(Tv2q2=wWyzYjSc6H7Afg=wCpY5v0YrE{BZ z_BFQ6@%q{(t^Y$65V{fpOL1;fmuumDZ#?-{(BW$e=!qM@da(}6v6Mgg!1@wg8v-HM4FKUq+U2vn=PW(>P7;p7Zm)c| zxgz-ftHDC(LD7){Jc^&5-SKHCFC4*9*q`{{?NNwBixRw9v_<`D*ra?Vj^&5)!;yB? z-vebAM^)gc^6wml_w^)18`4hWNM|@Q7cTHuzz{ghj6!Aj81C7<8Gq&Zuudi84QlM* zV}nA2Pup$TKgFR<^=>+MgQUcnX|gfnt?ATOj8w5_Bh?vb$UMeCF5k zy1nK`QU)GG58+aQgm$kJEud!PAhvhR%C zUt@U#n(D8yz5-1HF#8VVfnN4ary8i{X$t##J%HJB|3LsP2mizVn#_s)PXJj0cgSC3 zMlJ=ztRb6=eM^LnlKpI0O@V$ku&#!lWwYiZ*|J^T%s<)f@dabO(o4p!f$G_RlvS9@T=KUH*jl_I z!C?H&f-Ek-e-`mS&MHTwEx|u`xj=Ym4iOMv<6X_Si2bUUCNHvrW09qfHAYkWLGB((6odj@}ze10|yXsLuc$ z5TNk>jw8weXflCZm>>g{Q~}g#LQYu$t8hp?$lJ4WnTsf&5Ayk@JhyFmIsgDFQvvEW zp`5nmkX1b@0xJPnWCE91!Un*JcLKP?1alEI$4%S@kZMAFd1Bs8Fu=77q?#$sZ7{P1 zp*;ZU87REGDGnD=zm7H>0H`+uWex;@rhWj>$~5H3%~T73P9A1-^G=#H!Gg?eGB=TN zN;3LQhA`6&v9l6eXJVr)D>o7bNx2G6ai>XgS#tpKVu{~l;+K6-*+J?tIo}qODpi?r zk9dVtwKa`Tb2VGeX2Qs%n;>C+UeX09+V|wEi@@f*M$vIZWM#NC16&7%@WB;r~SPW z%jWw15=|%ggXxaU>PMi%NH&#s%D$PuPeM;2)}-AnCD}}U2Kt=H^n6}6vpM+^^g(qd z5nqA6gXCtiFNe6Lf3iteEc?Uq41*93VKcSH$nMB&x>U+-2{b{9zAtAi1I#oTe!Xx? z1>g0BVV^UcZstaq*iQyR-lpu}I~#Vx&O)k?gS${=ik!s9!S2*oE657cwP0cD>zVtz zds4s(T$~=*QkL3;dz|WMNo~SCQ?P;Ikg98uLsK88HsMYq|};!I)(uoUwsC*v+$ue zEp{6QS)q(w#)MWVGjHl~=|At<4Qt#qIc9731#?HCwF%Qu8eyd|q@Byq&RJ>Z=7Bbn zC`fJE4GL23i`zd2b7$_qWznL*7I)8f*psbI=dxRK@D#x0%P*JScI%==ON_u=U<73+ z07g)vX%>T;E=a@f*z5@y7E)EBtxKsMN;n@-6bwsg1ZQIp$Wh6?3N|W9CH%G_z}+2A%Zu=awAY zcr}9bU~fMot^D*#Pjejx(J@xyI>nfBu7F+0bDaf^XIUF_uu1S)0iP1Kp@`izi`_MusjQOeY+CwR z$?mFVcbBp!E7=CKk(Si5zc>D8uzEI*-8+M|;=>23OIewVO)PcgDr3OpN_M}SO}++N zZdM8MB3H38m2J;+RVW@-!KTB<<*HH&Xcf>8u~K*f%k5$udaitSf8dOA)Ww~Gu_E}4 z$z!aVHL^*31slzZ_ym}4uJD1`rL5FhYJc)lR?BL6Et>%I7@u*@PFP->Xy7iE$HzGt za{@M!Be%;_XaWea}|n!-)`CBB7k z<=gl}Qkdr?>y%x5AK)%Gxl_3g#_!@!@n`u9Qdq#qJ)qm|BwOUzVun+0RkkTlfp|0{ zTj5c}$TnpxBYaSKNO=?lC3)l_g0XD`-9#xL=DURt#c}&>_lu||>gU2{V zus4B|rgsa?1iUySzls(E`R_1fGet;k1 zhrtgYfge7=O(h@U_bKHlcncn9l)vDL&nU;SPjdMQgem{#I0tbqUyEoihua_wJ%iuH z{2a>0^KVx&`E(L72+KOb&-3w)^O87--%~hM;Qn64XY=cLD|djw(5dI`yaW|g@%1Mh zu$72z;SN}!(XQv~PoW&cXcymo7f@UI?gikQcD{&LG0I$nu($zO7A|UvqXza6C5zZZ zAmO4lHY?q#VxOj4D_L8*m1Hx3zl0|tu?7{D@2G{@k`R(l@o{K`(cCcun*9)_&+^SE zHJUqSL3161?hAYZN{!|tK4|WRaNfsvv}Bq!Yyz|mJFf$WV0$d<1ep<-RqP1J4)G?5 z9fqZS2>lOuyX=3&?>m88aFpjO==)LleS#N5+zvvZPC|XB`B;gK$M5sJ96fxVQ%A02 zeX#@Zd`G_2mG78>5J7KUjok5$v8)u_VYsghsF)?w;fd~?D4$hGtZ_Wpa+uZOIfVgp zlsSiv8C{4Ma-0`>I z$yK?9p;USx*}C~gmYo#}^~UvlP8Pi$LRK=6KvMqrR>Kqngpl;a#EQNRLNc%=GnvbZvSq?-lZ^hTo)VuRP*nsHdfdz@T4vNEjVVS}GUfhHJxaR7 zmUhiBB~2FpL7=**q%|i*5xIbfuVqj%!9tSu8;WuHgiH z5mC&Dsns41zLVi0XLd1jej)IzB?R&^S0tkPKvvg;W`>g4lw^t?kx{_Pt*`#@Xd*Mi z1+UI2CKwBpHxR0IL2)T9qF`gope(YcqHCkbn4ahsIRliT@@B(OGTKL(?4pcfFj z(gT5m%$%fXB4txvM9NGLB`08$w(rj%daVb|8>T+ctio;}$RcM(L|V^@-y`wr&mnf} zhJtQ+1xYn-QcQp~`qtH2>MUZjJ(w=9X2l0^(2qpAXq{3Fu7;HE(`+t7-fl2NpC zNbqbK3ATe<1~C@Kd8E`{q9Z0YE3!bM7&PBUhG#c%VRlP7csnA=8#6gQucamr0mUOcBKRe@F?Jq0u)QfswHL>5SK$jDC$?*wB~`)X zU540YZe`#=2)5aYfG0=5)(Gyx=tgL|`yJbWxGi_=2!R)yWenoxE1UieYq;bsngqK| zZAW0X8)#K^$%J--;fq7{ScSI(Y1Jhf*ilU6gX54`PRevbk2vIA6W(#wycdBgx3Vs2 zKpY;YD5As^RP=2`YD#?A6fV&|AZ3K{0AiPyFzhl4_|)F@YvUG5K%T4sDKwOrBB^@D z?m`@rENbSgVov)L-I6BMy0MWr;MrQ{t-lT5l$jW^fr^*6eFY~La{4#vf}EOw=YrM4 zCM59jopbakwkfOZP!O_e&vC!8ud-L{mPNHJ%V<8+rOs}b_J->zLd zXN_ABp5<1)%4rlmLW4TF6>%u#vX>y}5L~$z0Z&M*!vacq?KqVy^CGvk9ol9t4V_v- z+~Zq2lt)qSagZ&CTf}z}@>t=-cmx3`*0Om~RX2pS;Qfeswg#ywf-X`iG<*N63>StKk9??N`*)*TvSKj?>+o2FHL} z$ojn1K7TfjVjrN^o^8tGNVzT%m*GyJg3sL-g471^hJD^)o^RhR9mzC&HWjZ2mI|j= z?m+J6s4a2ZwN;APatBiVA*%sBcjC?W)016MP`>#1Cz)w3LC6Zr_rPkn%Ph-D*?vWK znqj9f4D7Ae1&znel&dv%NPR+m>et6kgLbSGMaGu8`K|2R=?RHWF`%Eh_Qu879WCOq zdw0}if*}`k&Ck0QqLD~_?4Q;9U~#w{CQZfay>iN*j7B6w;B|0DA{lMYW>u$@9joe= z&mozb&}U*5R|R^~!9)^nI8IWmJNIlJdc9rm)`mnN8Fg(iJry+J3y^7e>KUOoA32$x zW~(pqI^)Zpt2+L)9QOPQ*h$E`C-$FVa=3h-_sL<`W%nvM?7r>R0a(87UIVl8rM3~M z#p3}szW~7U0c8T{I-xep;nIP#6ChXgUV&-RYEbhBn7ZP37N=!zzYCU^+)9icw6RmlBP4(dbR2;l}#ezPM1+@GGpI%=X8HmJ&IbFeZ=C7B-O( zUVpK%#;pktTDw7kn#rhU67%Tsd-T-N5a_Gppl@YSU(ov9qHMDc572_YUr6ul1C2z! zpEX_@eu95hvpJ$;%LoTkl}W7$9%h8>9ryd~1W53$DI-)k zE6(9+UqUhSst!o?hkz(W#BW_N@Qq4ZIYI}Da-Z54YeDujkZvkT4KpS{S~DA@`J!}^ z+6O;k@|tO>p9j#^5(I}?394xZ=o>{Sp!RhN4ST=UULxS2OW86N>P)Q67br&7Dk6h=(mc5KsnNg zuC&naIH(-MKr~E+(CnOg@#4ihjx}MJ)Jaor!Ee`}51!XkLZ(2t@NWTpKT=^o|9|}7 zJrE>K;K4!5gHF0{hY2O69N!63Mx4anZDCe655r>x@nH(@v!vy`JzznTO38ZI!d)49 z1Oz@(Ov@3NO(3OQJZ7<-1bh%C6$Jiw24)>2)z%KZ$u`ZBx$?{1?);zY63nEDZfY^r zRO0Cwgq%Yir{b#$XA6d}@JwL_&Mo2YlV+ySx~R~!ppczYSk+NDWr+)`<`j0J8=YBG zVHY~infVI4aEs2Yt*{H-=gb-lyUZyx!Q+L;0 zoPd_xaPrnQYf^Vt_0NIHsrOLy{=e3q+Vy38qNfJVli)l?=sZ?O!;Hf>eyXg`OPq2} z1Dpmq4RLy!(`PuX#=W=?K(-BUOak_!i>p6Xx(>a_T=kzg7 z7jwFZ(3U9&aN5V|4>(P6n&z~h(}y^HkW-b@M>y3u&2qYm(_1*b zmD65MpW}2lr%O5A!|5=mdpT|5G{WhAP7iPzDL5*;1ET-Ez{WGUKIQCVUWJvqCIaJMO>Apu{Sv#Aed3v03mPWVKa6=7U*q3Oi7n zn-*XJKl5>4qi;H^X0^qCzFJ@3LB>YNAzwWq^Xu!@GBPy%-o6nAWyZh|ADP=bMA(Ij zxq~>)4}&pe{%a&~p<= zgDp__zK-Qun9X8j`AVF1bqt1KE2QHlw70h%N79L-_Pb^uXv`%UHuD`rd)Ao=wzwoCwn$?)J&iWDae+-*nI|-~;DZ@(h!2wY+vnE3 zRh3}>G3)*L!n$?N*}r}E*?XV8_c^zUd6Jany<3t-Kl8x+o`)`Pm6)R@>J*+LKf@as}6)C?tn+XPC%9^q$;HACUS!iULI`k zfN7F1t;B@|XgIktOY+?!hNWI_o!)%1`p2J`xI41={HpdNzEK7q3b{MVTSM1({BVLV zy=0*~;BD2b`~i1sYlmP{po$RBOVI28?-zdUORLu-i}Zjm(jovgsXw};q9agBG7X{- z!58{{2J0vbCXxU%Es`Zw&^1H7uT9W|m6V3dTixOC zdtDpbeY|p=KSByM+iJ^O+@U|6JNZ@I$cA9;G9n#0c6cb^hMBK^@dP5G(H-);1CeIO z16SbyVY>fsbYVkx&a~HjcG{s}SQoZxCGpX`<&VwxX{F(?-xtumgn7Jn#94JfDB>@zY}Oi#;0(7qcK==TXrQgF$ODL}M(Tv>_f7GQA4V)hq*n*L`nql5ci)1+FrqvX zY9*7J(;60G%|^fey^kJxt6Y zs(p5AT#8{sSa=G`q`lWt>YE^>7>Kp9@Z-Jz@!-#V8HK~d{q3nkIwqyAQCQmA-r}wg zh9Ym>G4NC0?ZaVgO}$PVsC(}qhFdMwg)-&AXdvQF^@63PCzVdhi-^-;tk`BzeZ@9A z8ie1-^6%dJzdB&`GJn7<&qlO01b_K>`eVM^l96(Epfnl@)+5i35;%4kSf_^p{f402 z6ex(A7;^iOaR$q8iDi5WOGrm@7-j5zLcf`Uij695Mbe^(>Y+%P-W&|+zbD3Td<|o5 zFzly1_>h>!B{Nm%&?eZiEZ{vsSV0OF^gL3hx3{`IdIh@Wt$rlnABgStWH$KLfR=>( zK7ZgGF{GGG490O+xsGx;{AXgx878AbU+eei#Hg=}d`=uG)*!xX-66~_b9)}~g|PYF zTfPsb6yI1(6~XB0R=q6R+^mOmuag*4cCWrA_`SGJ=>+~&vNA^fio=Fc?p9-Q+U^XR zkmAJZz*={!pNif+gx#7f3=YI*M`{R2i4o{pMplGt3Cc{KV<=E>(Bpbg2$zatwl=q9 z0Ba=CD+6v=>s?PkK{8O)8gxf+FQDzKN7WSt`%z-cve=-98OS{&kcyDoSA$!?GpTE0 zPJGR03CKtmw%FaKKQ}^9nZLqMg8qS!aTY&}q9sHIhJQ%dZ5BqykRLuZtp1q5TM84& zIx+9izc*(l6^*zw&Fh5CK#9?P<@OuKmEwVxxP{6)WRk0dLVe5uf=A> z849cXdaJjrgM7FYNVD1?C_kUKD3UaBG1Ljr#B^(7c`J_hg`nYBuJF5CgFY&5D0P+V zB1tD&eS51v64678wFl?Ykz|gGPkrYpkJm=GS5Xvg4b(kzPJW@;*&t*ayYP!0FArLU zoLErAQHbKM56@Y6w42UYQKAG~E@~N)$K4j5PiWpq6r17=e$VjzcZdhKh2auVpzb0F zw}k{$p*N$B)`o)ZD1&}Id^d5J$BbA$UfvAZ-zE4PsRE4Zm!v=mF(EsWRtXwLlo67m zT17A}zkI~P2pXd(*5LqKNH79BArr8fo7DuGaV(Tx6m)xaZw=8?e7QIn@i+TD$mn2T z@d%N%RAvlU))JVaX`Sx&iUY82gw#5HO%#WK*vEQ8bCVTC@W#t-Jb_&!WLqrD2ug9k zQOJzY3Exj}cCzrsc-5@a0|@vPgrlw{yo621=6Y5Vkg_G>sA!NA61)_W7S@jCBq$o?L7mBI7buU3FF|rJ=0p%_JR_}d!$G#D=OPk>s zh(**##aZ(65iG`SLfCAuyhbdO8|poHU2TQW6D1Va(1+oTM4YdG!oAfu<>st(R}v!P z2gjqt`!!-M-s%8dMjsNX!;^Nhk+qld$|FUQMdeZ*^(Nn1mW-WGiSo8O*Kt5W~f|IT{aTD8*ak2J6P z?LUG*DdqRj>9F>6`)AFz2Ey*W@Jb1)W}VyX50;7h{FdSm^Pvo0ty~emc)9R7=q0!` z;9cx*UHOxrzT~@wUY~HkAz4E!)mKo)>2(9n7TVg4#3p5Zj=1J!!F3<}BJ2P7GHc2n zsxDu$xO#EblDeAGhUz7YTOa*XvCjtjlKWoX@TX#r?yL-~#n%c{ULJA@Aqm3iO#fln zk|6y4LAEGHoe%9~dv{nVqYuJSUs zcoS_N+u$lMZO4gZl(e{6`S(tj;J&0UNgg`)t0=b$Z#R!IB$|vh_4oWbWA8g2-Cj{9LP5+N(@;^iC>VSs z+Kvrc9fZ$+@mS|^9774R@kI_qBjr%hqI%uSX}|K!PWn2iQ<5HfRp4o}7akyu8 z(z|w@XLj<-b_2k~%k}*LlU__87DMX=W~*nmaVhx>lM+Y&m*7e|`>%OsTc`UVprpju z4ZV_5V-JR!=@f*@J{l*b$9^$Rgz|Bko`}_c8YZIkH1kYLYp4y<6*%mBQj%_aY}`Gy z)6!~_NPoM&?WMYDqvlhrh%e9z=NE(XTg>*OhV62fVwWVXacByzD<%URDs`=&dcOqO zCJi%k_rLg2W4>lm&Pvi>-TuZ$jbr(@S>cQ-Nm?Pz9-au7q3-awmKAK26{cep&(v|& zDut_2?{L*Z(epe4HEQ~P9*~?*u52vecv)>8CrOP`fm*NQJB1JiD)VfYcgHQ5IyPBM zAh_0TN?A-&UPzIm4wtgulwz-Hi&R7whTsEf4d+}cVBScxB=KwCRBq{YUhZB5o$%};C4+uFsZKveCue7O)(ax|!a%v?A(AAjK;qU)^a6PSO&B10HvqKY*_wP1y}3+nor0_@wb#O4z2#CJ!tyWhd>! z>IlLX-yI@lOwle9eaK;{JyJAe)tIu90-X*gk)YVj`$d67*`J!vHR%P7zY8?2PH#}%ngs<}I3lY**%A}LL`ReMn) zC5C?}uVRh5q3Mc2>Rgt{tkmf!P;6NNGgcgZI1L(Qkiu~ku`Jjoz1nV>)c)x%TneeTaD-+e0*!l(A z5tA*;VoNHP#CKWn9X0tflK4d3BOaNPM#oH^F&2+mm58Z8Fda9U(k=Iiv?Y!^1xKIB zF(%pl7SjU3bkbzXNZLS)r$+Gfn>-q&A7u_L(jl<)UN)(ttH>>G>pBC5hJ9eTYAt4+vw+SWQ{=7N zDvDRcoNq;7hFw7IM(j6W1$DlVsw>A3^ktNxfx54eRj+tG2(px@sht=z z$tt8zV5ms(>iOib$upi7XmXw0A}A@v@i{?CRK%?qb1BU#gWCme*1nf8vPt%M!E;Kt z3PV!rT&5r;m$qy{xmh*4T_86tV7CcqM9ms6$Ro?tSV13Fnc~bNicwtl@cKh(hSWDp z&KNOFsxldZkSHvPcMw$|H~XN>u_qYK#A;2>Hk1sSdbmDzB6c5tRo+P>L5c~px|pEE zq*&)(_&@gSYxoqnNzWL1hO#{|@qxpx*oB!#mx{mo*vDO!*JG8}#hjUMyIMZM0^Xq_ zZ&!YI<+a)al-0ecJd(*X6us7R4dd?0D{<78f?kQEmue4?fxTEeY3`*K4TSE>3-P&W zDd>fk@d7;;M{h|%&&3Y+5`SFP70Z`P zL=_`7{u)p6IDgo9KE}zuX^fp9kGzSwhDTx>$;o1s^Npa!Hc}GCI-iD@1T}VPRLNZw6rY4yHe;Iz%hI&3FO@x;_-`I)1 zH2R5u7#tc(=6*ZA@rR)`Z9Ija5N>Y#gT~G$_L}yDNE4(YjLO~<=|AO4uuacrl z2zuy2QGOnV*NuPmja@a@XMW&n`7b!oJ2b=FH8Hk@l-%?|^sde~NJS}fd#o}eR-2DN zik0LW3c0i{cK#`VL?kF91^PS``}jU{`mFAnYl1H5}RXm;T=G91sDO9Xx-%f z*xaFIPRdR2QPka(@0wA{h25xFV6|cigZMEM4;0H4ib&FHq6`YDrYjH#%a=DDHe6t( z$thS`5}omINvxd5O6JB&X2sg4$EwzeskO1HNW62{XvOFGACr455hBx~Q-`@H0|Eti zg7FHbeIAI9lS=rtC7XuUFT7{wm&s7=~+Rv8TMiM1UC#u50G9omSNwz5oTi#bw1}3I*W| zxpYcp#V#%0^yT`cRWtw4U32bcOusj>pyr%NT_|N}Qgh*Jne)pRM_*0VYN$QGC5sFi z>5NYk`7;##w7c@NL@>o_KD)^xhVxc+SDvcvcAYR8wvweWBLQNSClY=X^bvkMWy~}9 zO&RfIwX$?KoFp(|ay&)9u;3GbyDLv5lDNC_Q*kFuX8$8%JLSejF zP#JyvC)t!S;V6m+=;XEXBAym?SpENHTD$=TC@peRxOKy^TP?K7_1;y6Ll(5&8eup?QXeU93%&qiyR-Y3Cmgs8ZL z{SI+r%5}we9g17!+|>Cmr}2pq8Y7K=XQeR~`LOp#*20w^Cc^LLX>5gUB8^Q&h6kaz zT2k6rP86KUG4`nylFOk(cjfOADFo{cUBnwp@}v{ieJ~MoUw4b6TcHa#yO30cCn(W> zt~TSAPV+k42#sjQ?GdN$=@08~FP}MN&|>@zLm{EdJ@-Y=ZG4L?lOnft zZ?;U__!bpiL9^c6=#aqs-ow(@-p(H|(pkL7A(AIUf{`IZWEi45enp;+K|GtUH67k~ zCxP7`awVGIX!370`8`dp!Jrz?2b#Pb&4-%&ktV;X$!}@$ z+nW3iGzK*d&yO^D6q+%3#^U)GP5xI+&PA^P&rdY@Wli3z$qO)eO_N{OF|f?xU>e#o05?^h<_m#SI#L1_+t&MA}& zcoBXunT8)WitvL(A-=QE!&mU6T(o&55tk;qN@*Z<$ST z?p7Gv#T?H4N~U~+Ihf9z%2k$*XA1kX15F+t2kT=_=OJYp%g>MxDRWsKHPgSQ$zv0< z0cW#GPBvwo^B9yqrc7iPrn5(LSZ5yVbYMJ=eKCoBKi(@c2vgW0Wg-G4i%rX6MN?q6 zgU!idvnCpFp3zKabFrfImF&s!?5P>-$qe>X zI%`=dh8gnH4tBSL{e6a0=F{Q526mFo!PAMS1LPYIhygfcvN>_3u3q_a~rv5+RAbujEWo05kiY%6yllBE~FzK^VpU=);JM8QXY2XpzB~?Ok|CQ;dII5+Whc@rNm zZ&R|-Vs3_$ag3a!*p>;bnqN(44wW&L6_S5hmdfG4D0A#(^VNJlg^dTXf>p7VNRdTg zn#C6JEN$G0{GusroZ8J;CPF4#%VXKlaH8tOIFIFN_p-a;fOKBPCOI@#!m~i1qZMJD zOy0u1Y6ECfF!L_#aV>9TSuEXAH_qXh$W~|$K2a-j)zr?T`N|*A2#BV6w$_}Lmi!xAGOq*#n+TCQ*~cq3a2%KREAwm)vhsj(P&uR=fvv}s z<4T`$Qt8KPlFAPPD&;+>Qqlp;0_6}`U7%z$>7Wvlv>TXsR7rz-oRUg|%NX<%=MfCj zpiB;v4k;0G!V#s?cA21~qKnebq$7&VK{*B?@UW84q@zj!QI12Geo!Vd{3L%TQTm|U z1hq%OedxHdfG8)SYab|6nAE4#5TzfwN3jP}nRHU=Aj)aj;=(Vo)0ot+2y0I(XJC|z zr`al@cE4?c+NZV=>lx*=QVQ1TOggRD7^!?lNz;}Sc3yOQltLz*f%l3sq>D<8*ta(9 z+&0@ms5&EEx~#ZBTm#Zh+aZu?Fv$T%P zZJ^A}l4QP(@8J9S0e+Al=c27ib*mKS6YRP6+4kL-lZQEmCg)~Y-JPtPrt3USZL(jq_u=Q38;YNgQg!=) z{gB8g*mK0_Y{33Q#SXrK=MdipUTI%$KW{%S%;{4kr_{p_!DnQDA3uAN!$I5lar@cH zHdwfWw^m@*F1}0M4b9e11Z@`&1<>r_p-wdWcxWZEW@H=UgS&FQT847kBN4XpItz<-QZX4r-kun=rhfBp8S($ zn`gUdj5lv0wlTI2wY?KUCfIV3@x`|JR2yheYCmQ_W50`>N%S?gqxM7WWsIn>Rl~Vg zh4cXuTWQ;1yMZu7r^eQ1YtDmY>a^0v8g(dAW_34{r5kLU(@5V9HXEmiOQX*&+bE7- ziMwp%Wb)gX)ZtizX+kPBm*dCT9%Kv6I4Q!!oIjaU++MWZK@KlLtQHHKXVd2dbsp(o5a&5#BoLBgxBZW4Hpp%g{W1yB z)}*>c*6ghN3^xbMM);KSe(bWR` zKKsR_{#b=}nAY8#OHtIL9#q%Qfn~eY(4%N}tEIy6v+b2+VxL-#awqkxHTI>bqa4m1 zC8~uBQQL>47{F0~Ls@_t(r-VFs4G?;gwzG-7b~05D+O(UjYF>z+(%iR)teRX4Y2W$ zP;I9bTojz5LYbo`yN&{M6cK&Wet;FiJ_GS?hq5(xZzmcTkRr6p?GB2Cs69<9)m++A zVaO4?iwudPh+)A!5H^4-0}|DK43{8k2XI|Px?)UzI0iH4!pX;BUcddSeX@3kcJ?U6 zdmpI=#4z+c3flmTTmhutj_^c#-rgjl!%d%Qnr<|H^57VaO8z2>#9XbGD#c{2SX(35 zqx4y-Z4iUU>C>fcqQH$NovP=lnJM1 zY6D6pwxMY7hO!ktyfk=K>0*Ne%5gR*^UkT`i!yDz1gB2(ppE}l%HvUnLdQE$6FfW)pX4em=wD=c@;s_^X3$&;Yit;i|fZ-!<4lLrH?$@HhrH N@qCOj7=23a{|it9W9X8mVWP5rFjWW(#8ZK3z)dTFb?#F01*^1q?169A8pbN@*|R>ySh_McU4kd z4a8%ROprsiiAPXpTm%Joc4yaB54ggx?l1$3pv)0mW*nC|u*#0if+z>(sDm6x_TH-Q zPE|7V$Nawu=~wT5-@Es|d+)pTnpuPty)u@Nf*mXG-@f|#3xo}Cl+_lgPSfM7gMGaZ z{gAk3>jgHMHynuv>(<>TwiW~vvhLGVL)T(nMGY-m&^n8?j`n(2HEKycB(JisYLybW ziiBN_?FmDU6G9@x0!!Acl|#nA&%Sv&GOSwDVzQ*(ynDACaU~30QKL&(MT2&B@-kFijla2XOqQwVGzDB^40Roz(;v0vwMoF|vMyTbc zL&;)!eZ876BsC=8LZB$4q)wOR400QhoI3D8PMq9%BkEcxt5Kr`wnm~wRkdm&sml)M z>&C~>zRhjsga6n6bu%gk^rXBF^$j#Rr4h^9Fyx5Rf@&h zaZxBd3=&eWDh7BBlj@{lXllYrPqkuH8|s+n+!v$V8?a{m(a$S^=Zi@R*fwr;bik*@ zTQyZy4R5eDEE#fx991BL?Y%$Q8Hg6!;AOgEKq7&19-%Qds8Nc@KJcn`Lr88l6ixjG z8HEAAtS3MjDxaH3C{gtf(S7fR!aQAgrUylVWr~`qM2i*B-s#MLGJ2OC@k#33q@gt` zkIN?!EFJ_l$O(XciO^UF1OYL0Nl|6U1XA8d$|wg#mtj*@bU#4!uN`PIVQBHWG4LL0 zN7jvMIil(EuaS87pCLkBC>Vwhku=gys*%APt$mpqK8skH1Jgp^Z;)GKQb?|WM_){V z!2K3!e`Tk^8L^-xx)N2?OGt2R841?OuHAsKPkfG)F@to}$m^7lj6`{ZaRnKU-89OE zU(#W9wG{e(RM(Pfc=!*1bofTKph*J|8F!jDj)eU0Tnqa{!K z;e{y94Pg@3jjj3?Y}n+rssy_YKY>7*9jJ?Gk^#LB)7J>6#XM*mkyezYfghPd-aZ7W z(WU4jXns4KHepTL=CcTR?8+8ParwC+imH_w1r_}Wk&#(GYzj@($EB#8cp0&~vKaOe z1!8LL`eOunT!(WPl4Ean{O?qoSx^&zs#y%2$Z%UEzi$5a_cj{1jkF~|gRWDfNHHyH zp832*av}jP)Wo8vCzO8#Iu<3OFbTA`%5T1_z8lSr8_OhJg;0L4Ew&<(m&T!?1*M1m zQ8B(|$-^J!)&DLO&cU~x+46D%_;~RW-5GHQd@(JN-pMa^zt)F+&OFCR@tTJ@ozFz& z{F6P<4{Wf{><3VQQao`#qT`05(6hqYdaGwVfE?(Q0|qP&aL8vP1f6mKs*xkmi~PFQ z3avzu6LXN^@GjjVEZq+we7949)j@0yR3Ql}%w|QiT&PCG;aZKB*6$l)82g6Va~j~i zJ|AHyjscwjXX?8i!9qK@P?N%PcoE7Sv0SVfN<<04snFELLsa_ls9K@)Bk1t7L6*Yi z>!x9d)&{vP360duV$tzSai5nC&jJ5lZkkR^xP z&Wi{+yh!JG7Xonl2i!Byg=z35#2j0L(v*@hxPaj`Lw^}@#||K9by_HycpZ_!5jPPz zoIX`=AjRPiNwIwhIcj8?q#C{!B^G{IZr?vd_uL2s2Gl~;C(VBRuR|!-8`<2m zMR^M;69SDPxZTDe=Jp##cr8R@pw6GzEWHq&_@}9O-!N6Ao9{;C{u#AdZoRrxk=H+o zRF~ImN$>salPghINW$yqoO!QqhjurR5#>8?eGNCFdAiivqJ*%K!7SY#)3Zh+>@)OO zy2;gs6=T5{Z&XEGfrZiWX{K|?WZMP1k|C1Y&Yk4{E&7i#Mv4M0qFo>&RQrIM~d-Yge~ zS!dXqxPrcF;NdOQ9k6}PSbgc;WTZF{^r6fTH_-K(9tQJjRQAc&k45qU@+Eb=b0DMY z(DmvF2iZamZaH^HJ~$MT^MbxiXea~y1!--t4}9$=yq~;wB;rX6;bI%t)J2W+PWx8p zL<&*6X$(!*>bj;MaXnpPsxU3!W`X=nnebwy2*?3A#ZvZL5FpaQ|e1q5wiNw z(;u+VjDaskVrYi#Qa&AK1Gn-@m<`;$XNP9kFT!;I4!k0_g=S>mY%c)ORv%Yknu!7g z`5H`Z74iq14kVF+bM{<~fVnMOccAatd=<0M#NpmRcGIxG*ekz#sGQuJHz3?fNcZWS zs}=V#Z$%v;)5)aK1E3ebO~8v&H+3XH!J(@qTgW4Pn^;jMHp;QcNJ1)HWjQ7uA%x#3 z8v%zqqCll(W!Fkw&@G`A0YSW4O1-dXoGY}8cC%ryq@sUPkg+Hn5<%nMj7Iw=vKq}s32NU$wNsfxFL&zYa8WY70L>!$x<8}2 zc(AYL^#ZgWM6J~hr7nk3&~h}R<<3D`u%CjCpQ4VW)3YH;PGyw1%`cD2%h2>VdSha)FlstIFIJOG~B#d_4_&^PQ;${L+3#x9*}}XBfFz27-G{@Y@WSXM$$_5It(5 zw=*b56!U`EDHEfDRj}TC=fQx;Ug~Ca+b)`uW=wWRf&>30Ll_x17aY$`qoEp%|MUV_ zx2d4NzyHZSRq#k+`|o-bN867G&&`yO_u&tJ?u2aZ60GO{|NP4%;3DH7f*Z^TW~=-O zb2_B7H-VTEtDZNT&)Fj03R6aGmAlOpILlQe#ioOUs?=i&2MY5Jb8f3eEDPw1newwW zYcOK_!P*#RLo>A#Ble?DNHFz9*E?q$mrna_chhIxO=r8CKJ9Kg*WGljd(n;V;H}iz zRPC)xs5e!6!yKm_3AXHlf(!SThr3Hp)c%pAUVH{@r@A%+Ytsgi7~kpYxJ8m>Ye~vC zJyj*9s>YJAeolN_4ZIH^{u)gI8*yssfyVOnsmr}neAFYa52Kt0ulx9kEMFe(_O$#xI$3-6ZA_AB z3U-?wZ@dj9XbF#9h9`36qk@CAe|&6Z>SEI|nBtOsA|uck`o9a$5?Mn+Bur#@O28N) zZDc*nbn-aa0LVHrl~j;v@a~>LD#?9hCYeRbVO|09N{~&5`Am=-uqI)C5^{pFV^9}s z$y(C5G}W8BhB~$vBMo=P~~-ahlJmhton%t2zB| zPCw=_9m(k^PXCkB`JDbEr!}0u#pyv#-{$lQPUmp?4yRR|{*u%8IbF!<0!|lm z+REt)PWN&87^ga?Z*ppI`ZG?~ak_!i$2mR1>CZXc$mt1AH*xv{PFpx#%V~^LmDB&> z^d(OHobKWD6;6N5X#=MLPXCG1S27$&k;`9)w&77{`G|Xv)(~mg)jMLw9`W~mR zary?Q|H0{LPJhMeSx!IZ^qd=Zdk$___rl$+6z)g&&{J$Wy}{}IoZjSaxSc>~O3l#h zoaF9i3)mzN{DZrr3V-?R=@K?BkCisF99Cora2UgK**)-A%I+NpLm?Yqkzr5vT2B*U zC}Ca?D~C@vtGMdk%eZ?#IIy4H&$f(bTSl^ORs%B&ALTyEs@ZpPq! z#2{LXEEjeXc3W63d_~0DLX#i~os8uHeS$betQDKYP9}09!L(kK#FXEF5HlK z;u70oS`4f58A%GeP+dE)_af9`K6Ww>BkjUblyri!2Z3D3NQZC=B~O9!AV`WB=@hzA zvfb3)$wrE#2R1Mo_Iq1+9vmFyAsN}dXnq70b=*4@bH&dQ%oPuq;J@K# zv3MBcQ7ldnzbk%mK?HoPxEX0<#jhG*m>_Pwh|($IadXv4{CrTnwHe&5g+e-GN`Hf& zLGdfx45nf?@-)^=yr*AK-!ZwSWex14c_OoUW zDK9+0D*0hn={n3_>pQ^S>pO}p4>=B}@Hm^(cgmWcf$13*XMMe_lmKpi66yZ{;%E>S literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/TrocaSenha_U.dcu b/internal/2.31RC1/1/Lib/D12/TrocaSenha_U.dcu new file mode 100644 index 0000000000000000000000000000000000000000..1c02514d65636930484303e7ed1703550d754802 GIT binary patch literal 6284 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%0D0*PK6VVJlKc}_Ou44$BA&FGT9yKs9( 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UCBase.dcu b/internal/2.31RC1/1/Lib/D12/UCBase.dcu new file mode 100644 index 0000000000000000000000000000000000000000..56ce1b36ce8b07c2095ab0897fc0739b82e0a891 GIT binary patch literal 146098 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UCDataConnector.dcu b/internal/2.31RC1/1/Lib/D12/UCDataConnector.dcu new file mode 100644 index 0000000000000000000000000000000000000000..1509185cf7d4c1958f38d8ac56350a098f0e9643 GIT binary patch literal 2396 zcmcgsU2GIp6h8NMZEu%hy3~TDu60{W(~vr8fQk~LrMq3g5dL;{Em8`@%-!uY+nIG{ zTDQa>;!gyB5YQN7it)k3#3vqo@PVW;@KD2xnqUfVXpBEZqlBPkJ$HZH>9&1!e@@Ol z-?`tp=bU@)696qEjR5lb!`sds{ry9rP046X^R%dKSzPyQ=iaraK7jh|xrY>GBwXeJIgie?!y;& zMjqI49NjhD8*&`m`RQ2htBkDfJ3fvFP==nH)UxiMBTbpi{T16z?(Ndtu_$u>C4f)` zQ0-ET+rqlOV%?GUxPu8{j7i-yZR^gWO)=BWX`ViIS6J6oHpO^ao6KSy%gA!)Z-M<6 ze=mQ2H?nD#&i@fWOJ!5s;k<$@2t*zz5yVYP%VwuVYP!*YW!i0-9@YsL(X8gW+!aL& zs!@9)XItFz-hAWrFEbBT*9xA;wD^9<&T+>xxqJDukJQW>pTizoGq^D)%n$g?du`85 zo4O|Q{#t-7KJXydjD)9o{Hj2jeMo|Pd$kGvjj*rx*^@Z~-4F7NiPfCGRtu-JtXXof zaQF8DUhCWajAMFu4Upk_?al*}+?n2OVW-lX&Tk0VpIy}9xa+1c`;Qspcno{`2VoEU z0uA!C?eHR6YWa_~9tkbYqu7(7yv}o?IJbpIi@KjXF6M?UP#}ap*q~@8Q^g!%9oJsGbzSeTovV`oN5438mFoS~sR`))zPk~@RrPXo z>is3+xZb@+QEO%p*`EGxaH|9xL$%N;fDGj~<({@$L`g=6@?1|G*n`{O?mY1#1h0hT zjzEHE)Ajf!Kt~{sAgTe-XUK2^0Fw(nk!5&rBGFSM>~as;-YK%p1y^PpEwhD}VZ&)L zRPA_{Bh#4@Q~e^Q#v&@N7%d;pDAR3NfleH){H9^Ak@wvq@BAWOOmck1Br(OjmNy>R`g*-cDfH(Qj$oU@3suDF(;X&iQ}>N@MjFP-q<{S7ykGQfviD z7d4hp3O7c{+zff4?6E2ttu~87n<2oL%3w8 QsP(scFJdJvw!kdXNLr#l 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UCMessages.dcu b/internal/2.31RC1/1/Lib/D12/UCMessages.dcu new file mode 100644 index 0000000000000000000000000000000000000000..7cd7a5116aab18efe20393736daf9c02cda53aa9 GIT binary patch literal 48806 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UCObjSel_U.dcu b/internal/2.31RC1/1/Lib/D12/UCObjSel_U.dcu new file mode 100644 index 0000000000000000000000000000000000000000..92361d4cf2a9982711c5c96c4f894950f670b35b GIT binary patch literal 19817 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UCReg.dcu b/internal/2.31RC1/1/Lib/D12/UCReg.dcu new file mode 100644 index 0000000000000000000000000000000000000000..0bea47f7515f4208c56b65efb7309991e5a5059c GIT binary patch literal 15477 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UCSettings.dcu b/internal/2.31RC1/1/Lib/D12/UCSettings.dcu new file mode 100644 index 0000000000000000000000000000000000000000..b0b9355b11c82a84b4323583a247d67ce7867db4 GIT binary patch literal 85406 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 Q_*}GRO3->4|CS>EA6NgUX#fBK literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UcConsts_Language.dcu b/internal/2.31RC1/1/Lib/D12/UcConsts_Language.dcu new file mode 100644 index 0000000000000000000000000000000000000000..5f86b12f67549eb7a9c1c3cde4e7eacf10e5d7a6 GIT binary patch literal 112390 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/UserPermis_U.dcu b/internal/2.31RC1/1/Lib/D12/UserPermis_U.dcu new file mode 100644 index 0000000000000000000000000000000000000000..7e8f4d12ec35b3707b1e9a36d26c859c6c6f7000 GIT binary patch literal 29756 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/md5.dcu b/internal/2.31RC1/1/Lib/D12/md5.dcu new file mode 100644 index 0000000000000000000000000000000000000000..984daedc7400851be8a40ef4e856ac7acdef31ed GIT binary patch literal 9930 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 Dv=ie} literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pUCFrame_Log.dcu b/internal/2.31RC1/1/Lib/D12/pUCFrame_Log.dcu new file mode 100644 index 0000000000000000000000000000000000000000..abbb8321993d9e6e0113b651f30ffe7012c36ed5 GIT binary patch literal 18091 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pUCFrame_Profile.dcu b/internal/2.31RC1/1/Lib/D12/pUCFrame_Profile.dcu new file mode 100644 index 0000000000000000000000000000000000000000..f75eed0e87de5963878b5b02ad5b66d550049c6e GIT binary patch literal 13422 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pUCFrame_User.dcu b/internal/2.31RC1/1/Lib/D12/pUCFrame_User.dcu new file mode 100644 index 0000000000000000000000000000000000000000..2f2dfffdff083a11ed7e91732f16159295abf8ad GIT binary patch literal 17483 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 W4Q2&l8NU{Tte=p4MQ1 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 E185h4Jpcdz literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pckUCDataConnector.dcu b/internal/2.31RC1/1/Lib/D12/pckUCDataConnector.dcu new file mode 100644 index 0000000000000000000000000000000000000000..99b0547ab77904f61b287871ca81700f569571e9 GIT binary patch literal 1309 zcmd^8&1w@-6h7xRO%LN3Lk%H_l_Da8NDwilhJv99)rJ^TlGsHTI=OS3UNf1AlM7l` zE_?t}MO+p9c?kF7LkMo%*`+T~ojWvC(~K|RSzOMX?>j&D+;46IWEN%tQhQs)(Sx6F zft}3{c&}Zq*vc;Zo+r5SgTt@4-Xviq$ex7qPO$wew8T^}5X1MQts)yt%^dVTgdm7y zb9bmj9{{@Mn)GZ}KC_kdy@Q8?FI>!p=(;CW1eY2%@7Y~Z^KIwjxB9zoY8+{M?l?vz z&2RL&FBa7X7iT7J6Bgov?%RR1JvBrY({@vOj{hVUr*N#cl5RX9?C?**Tx)l*?rr(hI27>>nvdO<>^D_hf#llV)+%@6;8UB@5lt0HuN&JVS@!$)I*;N?u*zx-v@;VZ zH{7&d_Rg%+IsPilpHxxEV!Uvyg9I=9@$AG4Q{FJmm!k6DXRJ)=wopgP&>L;p9alUD z&;kN8&463xSSMOJV<;Oz6B7Ch+-KIbA0p&LX6zr9v?J+Ax1s^k(CU*~#i9;!>TES| zMPeaLB%S@A*(ZJ9&(Zl~(ml|Deih6rVKs*d!ekD!gt@19j_^F;1;RzbdBP0gMZ!xt zyi8~<;}ycIgn7bi7G5X3k;5gzWx^uiie=UqRt>YRPi7cqBXUf`WQ?WgG<(VJY$QgE QRbdZaF_s1fmDgbZ2AeWL5C8xG literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.bpl b/internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.bpl new file mode 100644 index 0000000000000000000000000000000000000000..e6ce1ec979d0dd52b7914dd5b7c7039be4bb0b5d GIT binary patch literal 174080 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%0A7h_R+`4(tmEQ83ix$~CfA)<( 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 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.dcp b/internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.dcp new file mode 100644 index 0000000000000000000000000000000000000000..0d34d302ee250bfd69bb9bfdfac0f1f30584af89 GIT binary patch literal 60278 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 K3yLfAO6(t4KS}5S literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.dcu b/internal/2.31RC1/1/Lib/D12/pckUserControl_DT_D12.dcu new file mode 100644 index 0000000000000000000000000000000000000000..43833ea3234a5310b6594d8bf591ac11820e44e7 GIT binary patch literal 4626 zcmeHJe`p(39KX+zCf{b+T)VE^L}iFd5Gih$S;x>exn`|2Gg~fQ*^1re?lrmfa(CWc zw{(aM86qOG%`t|I;be%2h>FM%5q~2hA|j$PL_}m05fu>;nZCOT>(762*U_Z3$zO9t z>VWCb{KcQ7ziMD$s^ZT12AirDwz2wvY53LRp4$^5NuLET9@@E4_C%V!*)Hy!#FCZy zAY@HRlIoeF<>s<(rvJ0wJ>JdEZ(oE7Dh}f zbp4|1Hy4;`Lia7*2?NLiPq$l+>FyQMiQl9eTDF*hTjp0UZ`QSuX_#45c@D}gw8nEA=1!2%4~kia7L&iS+w=A zk{2nUvTr#d^M&#}5stwNLCBD*wzLLoGLeO3OcjbJ)xFJO&k{*@$03RmE#jb&R#*sq zaiyg4b7AN@LJv}0foj)<^h8M)`xjY{k|dO-g4^uuo@(i~D>k1h*p^rGP0{_kqP7#7 z?#p6xLkShCb%MzFPvN3g}#Daj28KI7zg6>5likYfw%xXRpmP$g?YeF^Y zSX!@Dn6Mjq%Z!g)C*W;H9qYDpGLTHX-$)w1oD$tocqkK*2xRpDUm zsT#bwf-smK*PZ$tFGPeiI*#Aw^JHYLdoSk3yvF}M1PaE()CBXr z5rC62D`m;ZX4*I{LT+tRe@waz!d*f1pem{I33;Z?RY(V`Sx7&NApHm%IGpdmlY%k zNd?yt*0yjx;ReD@ge>7|!Zn1O3AZR1Alyn=Pq>Y+fiOteNZ6#{PQuV2@&uJoB#aX7 zCX6fCLMTsS8$lyX5GDyb2vdZ63A-jyBbbC4LPNoBf~~+Icm$si67~>U3ic81SMUH~ zKjA^b0R;~c9#-%O;Zee4goC3vOgNIoQNl686NKZ06ND!TPZ3TLo+dn##j}Lx8hD=Y z0^udX%Y%4@a9Y8ugx3hK6W&np7U3NQ?-AZ7d_edxi;oB&6Fwn)O8AWMIpIsf8NyeD zuLtoB;akFYgtH31C;UM8k?@m(UkJZ8@EhTG!XJb`TR2aEOz7foH-DG&w@2P8V>REb zksBE%%RC3^jCJ8xPNy@?g>5FCk!5)WEte0$ literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pckUserControl_RT.bpl b/internal/2.31RC1/1/Lib/D12/pckUserControl_RT.bpl new file mode 100644 index 0000000000000000000000000000000000000000..aff904df9b97235d8967fb94a3f5156b3e433ece GIT binary patch literal 590336 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

B1M)EW_RGF!FRKxBH;)eG`YQ}yyrRnN*h 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�&@M49)NaKxB<+Me!DUbzY;|C9;=Vy;!;|bi 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%0AMPzu^(0g^^qad#^Tl_X{HB%ZO4beJuoAlQk)i=8 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


Bwd1-B7r(ibwhVLYZU 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 X6px2)#N%OX7_di9;PL2F%=>=Z literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Lib/D12/pckUserControl_RT.dcu b/internal/2.31RC1/1/Lib/D12/pckUserControl_RT.dcu new file mode 100644 index 0000000000000000000000000000000000000000..c1ced531c86db1dd5b02642739161950538ba4fa GIT binary patch literal 4203 zcmeHJ-D?zA6rVFqc2CwZ#x#{dL_|b_gdpNbDq@q}b=8u!Yj!8b&p3PcW_Qf&%yecF z*B~NAN-3qN6_HY;Eh43qQc5XOY$^SsNGYY1(iSOgpXy`(0oyaPn{~6kW+b2nDt{&fgW%{2RlH5P+vRU2dUdpip&#|T_3J-sM=6X!p<2|*^ zGFS*#7mUDk><6dauNjY% z^`LDAk$E&{uvw$b#~q_|>;9p)%Dsyk-L@8WI2!urX3Lj01&0||3ZBD^Jhv;xv`$eN zkLjtT;qz#`Dl%joui7vw`|SCwUvAZqIKf$qCP5m%Rn}8!BQOryGfosVp{KIk_o+}n zl9jNTIqp?WzmbJJ@;nGkyIl8JJ?@lE`-o|moU;v=wK}8z`++|_ZrJ5H3P!OybqHNO zwV!*273Eq@QpPi?d^$`Tsrs6#oafA#R(<74Q%kuczb9RtJ(^0|GA~62YFO4V8}aqj zzEEgcey^Sy8_#D8xs+vcyS`J)H?rrT&BBrz%UeYvwS>xPC~(s7Ov4U*kUOt4UT=@k zj&xG=z_i2;lwn1Oc;TEIZlbV)lx6rn7bnQhS%H~#Y*7HDlbN9n5J#BcWz!G5bHWJw zJ;SY-OdMg11@<__5Jl)Yz%5#3Fe3~R%UDK`Pl^Iy&NJ=+a5ko# z>dNWUreQha^l|#5xkaxeT3>hg=M<*z&T@NBXr^PtFAaT}-0nF(s*QI%8m5Pf} zY?4{|s@oKa&9iB3QS1-NJz_FC12$)Y6Y>XrtnvhfX^vaMcagrIUPr1nf>xQfl%dy?VhKfWh!iaxy^*4{k@Tj> zr-h|AGi@17Z(&+Tp5Dr|R$AUhQ=4?#;N>Bvbt2|rs-)>!XXfop6HxPxs9gcbblaxMLVuQ-! zBP@KDEt=LvrndLl65~yIu)|A}T%s>=^WkVXFtPEJ;D#)jiSTJhm!rABPm&9sgOp<)ZhTZvk2n| zhY&^)k_b732^9(mlL%7?#}G~+oI*H_P*kCWFf#%bgfj>hf{oxJcq#-4^HWemSU@umk?e?cm?6rLAZ=?72z7fb%YxTudDC|!c7(4M0gwF7Q$^6-a&X* zh4&ENNB98YLxhhIK33rl!Y38Di|`r3=Llbnz*h+0Abg8(PlfLgzDM{0;YSs=A`DjG zCxo97Mi6$_;1`775bh)Vj_?P8kYF&`_TwOND-d$pM0?bp*#$f)ncrPHiAKy^)}}iJ-KZU}g(JWh=p%Z3Na3 hfjvy%ZYS_|5Cl63=64a)MhF)65S-sjaN(L{{0B^E++_d& literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConn.pas new file mode 100644 index 0000000..da90afa --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConn.pas @@ -0,0 +1,114 @@ +{----------------------------------------------------------------------------- + Unit Name: UCADOConn + Author: QmD + Date: 08-nov-2004 + Purpose: ADO Support + + registered in UCReg.pas +-----------------------------------------------------------------------------} + +unit UCADOConn; + +interface + +uses + ADODB, + Classes, + DB, + SysUtils, + UCDataConnector; + +type + TUCADOConn = class(TUCDataConnector) + private + FConnection: TADOConnection; + procedure SetADOConnection(Value: TADOConnection); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TADOConnection read FConnection write SetADOConnection; + end; + +implementation + +{ TUCADOConn } + +procedure TUCADOConn.SetADOConnection(Value: TADOConnection); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCADOConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCADOConn.UCFindTable(const TableName: String): Boolean; +var + TempList: TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames(TempList, True); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCADOConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCADOConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCADOConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCADOConn.UCExecSQL(FSQL: String); +begin + FConnection.Execute(FSQL); +end; + +function TUCADOConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TADOQuery.Create(nil); + with Result as TADOQuery do + begin + Connection := FConnection; + SQL.Text := FSQL; + Open; + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConnReg.pas new file mode 100644 index 0000000..32c5c62 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/UCADOConnReg.pas @@ -0,0 +1,19 @@ +unit UCADOConnReg; + +interface + +uses + Classes, + UCADOConn; + +procedure Register; + +implementation + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCADOConn]); +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj new file mode 100644 index 0000000..1b6a6b0 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckUCADOConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control ADO Connectors + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk new file mode 100644 index 0000000..92d149f --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk @@ -0,0 +1,36 @@ +package pckUCADOConn; + +{$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} +{$DESCRIPTION 'User Control ADO Connectors'} +{$IMPLICITBUILD OFF} + +requires + pckUCDataConnector, + adortl; + +contains + UCADOConn in 'UCADOConn.pas', + UCADOConnReg in 'UCADOConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.res b/internal/2.31RC1/1/Packages/Connectors/UCADOConn/pckUCADOConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas new file mode 100644 index 0000000..0febf8e --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas @@ -0,0 +1,123 @@ +{----------------------------------------------------------------------------- + Unit Name: UCZEOSConn + Author: Vicente Barros Leonel + Date: 29-outubro-2007 + Purpose: Absolute Database + + registered in UCAbsoluteConn.pas +-----------------------------------------------------------------------------} + +unit UCAbsoluteConn; + +interface + +{$I 'UserControl.inc'} + +uses + Classes, + DB, + SysUtils, + UCDataConnector, + ABSMain; + +type + TUCAbsoluteConn = class(TUCDataConnector) + private + FConnection: TABSDatabase; + procedure SetFConnection(const Value: TABSDatabase); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TABSDatabase read FConnection write SetFConnection; + end; +implementation + +{ TUCAbsoluteConn } + +function TUCAbsoluteConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCAbsoluteConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCAbsoluteConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + inherited Notification(AComponent, Operation); +end; + +procedure TUCAbsoluteConn.SetFConnection(const Value: TABSDatabase); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCAbsoluteConn.UCExecSQL(FSQL: String); +begin + with TABSQuery.Create(nil) do + begin + DataBaseName := FConnection.Name; + SQL.Clear; + Sql.Add(fSql); + ExecSQL; + Free; + end; +end; + +function TUCAbsoluteConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCAbsoluteConn.UCFindTable(const Tablename: String): Boolean; +var + TempList: TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTablesList(TempList); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCAbsoluteConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TABSQuery.Create(nil); + with Result as TABSQuery do + begin + DataBaseName := FConnection.Name; + SQL.Clear; + Sql.Add(fSql); + Open; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas new file mode 100644 index 0000000..d0a63fd --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas @@ -0,0 +1,17 @@ +unit UCAbsoluteConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCAbsoluteConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCAbsoluteConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk new file mode 100644 index 0000000..e431c67 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk @@ -0,0 +1,38 @@ +package pckUCAbsoluteConn; + +{$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} +{$DESCRIPTION 'User Control Absolute DataBase Connectors'} +{$IMPLICITBUILD ON} + +requires + rtl, + dbrtl, + vclAbsDBd11, + vcl; + +contains + UCAbsoluteConnReg in 'UCAbsoluteConnReg.pas', + UCAbsoluteConn in 'UCAbsoluteConn.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj new file mode 100644 index 0000000..d67206e --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj @@ -0,0 +1,40 @@ + + + + {e9d49972-8f3b-467c-b46e-69225c5b5b37} + pckUCAbsoluteConn.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCAbsoluteConn.bpl + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + + + Delphi.Personality + Package + +FalseTrueFalseTrueFalseFalse User Control Absolute DataBase Connectors + TrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0pckUCAbsoluteConn.dpk + + + + + MainSource + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res b/internal/2.31RC1/1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res new file mode 100644 index 0000000000000000000000000000000000000000..c0980e1c2112f35ece60bde1e6f11a4d860f3774 GIT binary patch literal 5940 zcmbVQ&u<&Y6&}R`S_DYyLlG3ca6tq`Ai(-z%gPT(VFf!bgd|NGo9=NzlPj4BxvT6h zmFTqkPnbhd6g>1lD5!JcQ{ZC&<&b-G?4juP``(+kyP_#a?g~#cJM-p!-}mOtkf3wU z1+cPIL-*42x0^P913oJ{F~KKxF>~$$*cZkDeZ*Y$5QjFK*14A40*B*@ zryR;T^%sI&!oR6~7Osh}YJU#x&`tg1Fhz@aix1<|h|L^Vc}CwjNQ-yzV?4x>{L32V zf34y{jj~6`!3@6SAUrN!)X$tUrs$wQ<4Mdq4}yugF8DKESwd4tKXBk0aA}%wog??~ zr|ubXm+05HipPCa4w_e)D~Jj6t!h#Z-NNrPv0~?pxOwv;3=W=BTK!sfXjb ze;zx8mQDfFxHIYs(PukFZd>r{AkQ%FiNoA%&b9P`A%2(db6rn-VoSwjTEqHaPGdbB0f?jLlYf%)NHT#8@{}-QqLX zF>>HL_g}E5z;2Nz+7NAv>r}rhn%apE<6OZ#*Em1@^RLQbt{mjd7Kj6LA@NaT&&mpu z@8l}@Q~1y~MB7ngendawiQXwWpg#vT4eKrU>Q;_gF_9p5Y1`@pMnUe&f)o^)u%VajBpA;h9z*HGktJE%XpWv>`rm^=@H) zao&jEG{n;y_PRsQr3KE2C427m+aAe2G0*TN4t2@igCFl)Ij6woII$T+`b+S+Uh>@m zKNz{Fq5i;)=UMLn)i1R{9OfhRdo-mF@?TJ^=YYQ9Yr9;(w+{TUR`v(2)MMz+Bskb-JJ&4Y%RBBm`Rp)^ zR(=0T{o$QCp^+c&FUF!SY8P(M&K#OnyBG93RGo*V_^1WF*Qg(QfW!EzQR|2L_#KGn zT*mRvd#b8U@S+d#c?a^dim{9jk|=$yUB=-B{jARm?3e!>VBhW@ZwJ7=S)cLl&Uurwlt=jGE@|+R7;!tRxxoAF|=ec?rhpOgV#2}Yu zdl{QKuJ2j)YYxO(d^kp1b{32i_lQ1n&vXp0ZuN7|%QW zuk#p(m({}yyvVoW@ywq|a(Fdt<7XV$ineRyLHy=E7tqbUu{aj@Ra;xnmic%omuJsp zo_@CORq?L!w|LiWuZpucUYq(f5U!){Qx`nc7~Srs?QmIcA%X*cZ2qWbH70B zUjd^9tPU{C^87~mYvV)!?rnEACG> zoczL3mcK!q6wSz40#e?1` ziKD&tX_U1)AHMPWZZFHC@srVMfB0M^WXWNEtDlTN=w;*e zldX0z?#08yD9ax=(GV&Ks$d6$D9(rZDF=ffKRpKG*TeYE?Y54@y)j1aC4=Y>Q7;X? z*uNh<%qN3k;^%82P_lk|=k~knckgcAX$QLeI8FLdmL=(a+J8FCqkcX~5pS)%p)>~3 zaTJ3>|5V;V%trEkFV|08$$2?%jw<(0Ej8#;@>umjAG9D-Kt$RtFr^zVuO1Pp@ zvjZ{sYfK$ao{Wb5kE7E^$(Io}Zs+d%cc1KRZ*6b)`-fYD!-ngq7avV}N1{{Hz}P>N z3h3KduDu@jS=!ChNtPePhsiZd;ZEDKn??OeitVnGnnqtuP$JRb^K^JJ97RV_R!xFa zHT}^ySem0|KZ#DFQ7tP7MjY5{_p*cd1i48YnFxZ(aKFzA*lQp5Mp@+do%x{PD*6lH zyBn9N?rv0?!ESfM&H`R=!t&Sb%-vji=JMCJ;q}-(bRqtKY`Sf?<#uqx zY=Z+CwGnLv_ekHN~Fo#$hSH7F>m+&^<$M8+z zUHfdgb)cIWK6&Qi8v}c^z~Fa+{|V-gWR`4?!INr_+*7R7M|swMkKoaB1FRdPP2HDZ zVvqWM=3_8x#5LZ0t23ZE`W(IqqD`PZUts8vOX|Mtv#5Si`)@^;=ALNGfib)~)p aV^!~_b8kx}sKOYlM(}Lz#apXCuKo{^XMC>! literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConn.pas new file mode 100644 index 0000000..abf4425 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConn.pas @@ -0,0 +1,113 @@ +{----------------------------------------------------------------------------- + Unit Name: UCAstaConn + Author: QmD + Date: 24-nov-2004 + Purpose: Asta 3 Support + + registered in UCAstaReg.pas +-----------------------------------------------------------------------------} + +unit UCAstaConn; + +interface + +uses + SysUtils, Classes, UCBase, DB, AstaDrv2, AstaClientDataset, ScktComp, + AstaCustomSocket, AstaClientSocket,AstaDBTypes; +type + TUCAstaConn = class(TUCDataConn) + private + FAstaClientSocket: TAstaClientSocket; + procedure SetFAstaClientSocket(const Value: TAstaClientSocket); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation);override; + public + function GetDBObjectName : String; override; + function GetTransObjectName : String; override; + function UCFindDataConnection : Boolean; override; + function UCFindTable(const Tablename : String) : Boolean; override; + function UCGetSQLDataset(FSQL : String) : TDataset;override; + procedure UCExecSQL(FSQL: String);override; + published + property AstaClientSocket : TAstaClientSocket read FAstaClientSocket write SetFAstaClientSocket; + end; + +implementation + +{ TUCAstaConn } + +procedure TUCAstaConn.SetFAstaClientSocket( + const Value: TAstaClientSocket); +begin + FAstaClientSocket := Value; + if Value <> nil then Value.FreeNotification(Self); +end; + +procedure TUCAstaConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FAstaClientSocket) then + begin + FAstaClientSocket := nil; + end; + inherited Notification(AComponent, Operation); +end; + +function TUCAstaConn.UCFindTable(const TableName: String): Boolean; +var + TempQuery : TAstaClientDataSet; +begin + TempQuery := TAstaClientDataset.Create(nil); + TempQuery.AstaClientSocket := FAstaClientSocket; + TempQuery.MetaDataRequest := mdTables; + TempQuery.Open; + Result := TempQuery.Locate('TableName',UpperCase(TableName),[]); + TempQuery.Close; + FreeAndNil(TempQuery); +end; + + +function TUCAstaConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FAstaClientSocket) and (FAstaClientSocket.Active); +end; + +function TUCAstaConn.GetDBObjectName: String; +begin + if Assigned(FAstaClientSocket) then + begin + if Owner = FAstaClientSocket.Owner then Result := FAstaClientSocket.Name + else begin + Result := FAstaClientSocket.Owner.Name+'.'+FAstaClientSocket.Name; + end; + end else Result := ''; +end; + +function TUCAstaConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCAstaConn.UCExecSQL(FSQL: String); +begin + with TAstaClientDataset.Create(nil) do + begin + AstaClientSocket := FAstaClientSocket; + SQL.text := FSQL; + ExecSQL; + Free; + end; +end; + +function TUCAstaConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TAstaClientDataset.Create(nil); + with Result as TAstaClientDataset do + begin + AstaClientSocket := FAstaClientSocket; + SQL.text := FSQL; + Open; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas new file mode 100644 index 0000000..225400c --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas @@ -0,0 +1,17 @@ +unit UCAstaReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCAstaConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCAstaConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConn.pas new file mode 100644 index 0000000..dd1bb92 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConn.pas @@ -0,0 +1,127 @@ +{----------------------------------------------------------------------------- + Unit Name: UCBDEConn + Author: QmD + Date: 10-nov-2004 + Purpose: BDE Support + + registered in UCReg.pas +-----------------------------------------------------------------------------} + +unit UCBDEConn; + +interface + +{$I 'UserControl.inc'} + +uses + Classes, + DB, + DBTables, + SysUtils, + UCDataConnector; + +type + TUCBDEConn = class(TUCDataConnector) + private + FConnection: TDatabase; + procedure SetFDatabase(Value: TDatabase); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TDatabase read FConnection write SetFDatabase; + end; + +implementation + +{ TUCBDEConn } + +procedure TUCBDEConn.SetFDatabase(Value: TDatabase); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCBDEConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCBDEConn.UCFindTable(const TableName: String): Boolean; +var + Lista: TStringList; +begin + Lista := TStringList.Create; +{$IFDEF DELPHI5} + FConnection.Session.GetTableNames(FDatabase.Databasename,'*.db*', False, False, Lista); +{$ELSE} + FConnection.GetTableNames(Lista); +{$ENDIF} + Result := Lista.IndexOf(TableName) > -1; + FreeAndNil(Lista); +end; + +function TUCBDEConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCBDEConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCBDEConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCBDEConn.UCExecSQL(FSQL: String); +begin + with TQuery.Create(nil) do + begin + DatabaseName := FConnection.DatabaseName; + SQL.Text := FSQL; + ExecSQL; + Free; + end; + +end; + +function TUCBDEConn.UCGetSQLDataset(FSQL: String): TDataset; +var + TempQuery: TQuery; +begin + TempQuery := TQuery.Create(nil); + + with TempQuery do + begin + DatabaseName := FConnection.DatabaseName; + SQL.Text := FSQL; + Open; + end; + Result := TempQuery; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas new file mode 100644 index 0000000..943d623 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas @@ -0,0 +1,20 @@ +unit UCBDEConnReg; + +interface + +uses + Classes; + +procedure Register; + +implementation + +uses + UCBDEConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCBDEConn]); +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj new file mode 100644 index 0000000..017237f --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckUCBDEConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control BDE Connector + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk new file mode 100644 index 0000000..4c1dd8d --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk @@ -0,0 +1,36 @@ +package pckUCBDEConn; + +{$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} +{$DESCRIPTION 'User Control BDE Connector'} +{$IMPLICITBUILD ON} + +requires + pckUCDataConnector, + bdertl; + +contains + UCBDEConn in 'UCBDEConn.pas', + UCBDEConnReg in 'UCBDEConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res b/internal/2.31RC1/1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas new file mode 100644 index 0000000..35e4049 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas @@ -0,0 +1,128 @@ +{----------------------------------------------------------------------------- + Unit Name: UCDBISAMConn + Changed: Carlos Guerra + Date: 01-dez-2004 + Author: QmD + Purpose: DBISAM Support + + registered in UCDBISAMReg.pas +-----------------------------------------------------------------------------} + +unit UCDBISAMConn; + +interface + +uses + SysUtils, Classes, UCBase, DB, dbisamtb; + +type + TUCDBISAMConn = class(TUCDataConn) + private + FConnection : TDBISAMDatabase; + FSessionName: TDBISAMSession; //Carlos Guerra 12/01/2004 + procedure SetFDatabase(Value : TDBISAMDatabase); + procedure SetFSessionName(const Value: TDBISAMSession); //Carlos Guerra 12/01/2004 + protected + procedure Notification(AComponent: TComponent; Operation: TOperation);override; + public + function GetDBObjectName : String; override; +// function GetTransObjectName : String; override; + function UCFindDataConnection : Boolean; override; + function UCFindTable(const Tablename : String) : Boolean; override; + function UCGetSQLDataset(FSQL : String) : TDataset;override; + procedure UCExecSQL(FSQL: String);override; + published + property Connection : TDBISAMDatabase read FConnection write SetFDatabase; + property SessionName : TDBISAMSession read FSessionName write SetFSessionName; //Carlos Guerra 12/01/2004 + end; + +implementation + +{ TUCDBISAMConn } + +procedure TUCDBISAMConn.SetFDatabase(Value: TDBISAMDatabase); +begin + if FConnection <> Value then FConnection := Value; + if FConnection <> nil then FConnection.FreeNotification(Self); +end; + +procedure TUCDBISAMConn.SetFSessionName(const Value: TDBISAMSession); +begin + FSessionName := Value; + if Value <> nil then Value.FreeNotification(Self); +end; + + +procedure TUCDBISAMConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + begin + FConnection := nil; + end; + inherited Notification(AComponent, Operation); +end; + +function TUCDBISAMConn.UCFindTable(const TableName: String): Boolean; +var + Lista : TStringList; +begin + Lista := TStringList.Create; + + FConnection.Session.GetTableNames(FConnection.RemoteDatabase,Lista); + Result := Lista.IndexOf(TableName) > -1; + FreeAndNil(Lista); +end; + +function TUCDBISAMConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCDBISAMConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then Result := FConnection.Name + else begin + Result := FConnection.Owner.Name+'.'+FConnection.Name; + end; + end else Result := ''; +end; + +{function TUCDBISAMConn.GetTransObjectName: String; +begin + Result := ''; +end;} + +procedure TUCDBISAMConn.UCExecSQL(FSQL: String); +begin + with TDBISAMQuery.Create(nil) do + begin + //DatabaseName := FConnection.DatabaseName; //Cancel by Carlos Guerra 12/01/2004 + DatabaseName := FConnection.RemoteDatabase; //Carlos Guerra 12/01/2004 + SessionName := FConnection.SessionName; //Carlos Guerra 12/01/2004 + SQL.text := FSQL; + ExecSQL; + Free; + end; + +end; + +function TUCDBISAMConn.UCGetSQLDataset(FSQL: String): TDataset; +var + TempQuery : TDBISAMQuery; +begin + TempQuery := TDBISAMQuery.Create(nil); + TempQuery.SessionName := FConnection.SessionName; //Carlos Guerra 12/01/2004 + TempQuery.DatabaseName := FConnection.RemoteDatabase; //Carlos Guerra 12/01/2004 + with TempQuery do + begin + //DatabaseName := FConnection.DatabaseName; //Cancel by Carlos Guerra 12/01/2004 + SQL.text := FSQL; + Open; + end; + Result := TempQuery; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas new file mode 100644 index 0000000..cd9fe75 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas @@ -0,0 +1,17 @@ +unit UCDBISAMReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCDBISAMConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCDBISAMConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConn.pas new file mode 100644 index 0000000..50e5dc3 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConn.pas @@ -0,0 +1,122 @@ +{----------------------------------------------------------------------------- + Unit Name: UCDBXConn + Author: QmD + Date: 08-nov-2004 + Purpose: ADO Support + + registered in UCDBXReg.pas +-----------------------------------------------------------------------------} + +unit UCDBXConn; + +interface + +uses + Classes, + DB, + SimpleDS, + SqlExpr, + SysUtils, + UCDataConnector; + +type + TUCDBXConn = class(TUCDataConnector) + private + FConnection: TSQLConnection; + FSchema: String; + procedure SetSQLConnection(Value: TSQLConnection); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TSQLConnection read FConnection write SetSQLConnection; + property SchemaName: String read FSchema write FSchema; + end; + +implementation + +{ TUCDBXConn } + +procedure TUCDBXConn.SetSQLConnection(Value: TSQLConnection); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCDBXConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCDBXConn.UCFindTable(const TableName: String): Boolean; +var + TempList: TStringList; +begin + try + TempList := TStringList.Create; + if SchemaName <> '' then + FConnection.GetTableNames(TempList, SchemaName) + else + FConnection.GetTableNames(TempList); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCDBXConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCDBXConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCDBXConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCDBXConn.UCExecSQL(FSQL: String); +begin +// FConnection.Execute(FSQL, nil); // by vicente barros leonel + FConnection.ExecuteDirect(FSQL); +end; + +function TUCDBXConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TSimpleDataSet.Create(nil); + with Result as TSimpleDataSet do + begin + Connection := FConnection; + DataSet.CommandText := FSQL; + SchemaName := FSchema; + Open; + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas new file mode 100644 index 0000000..7aebf23 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas @@ -0,0 +1,21 @@ +unit UCDBXConnReg; + +interface + +uses + Classes; + +procedure Register; + +implementation + +uses + UCDBXConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCDBXConn]); +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj new file mode 100644 index 0000000..2d66f05 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckUCDBXConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control DBX Connectors + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk new file mode 100644 index 0000000..05fa12c --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk @@ -0,0 +1,38 @@ +package pckUCDBXConn; + +{$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} +{$DESCRIPTION 'User Control DBX Connectors'} +{$IMPLICITBUILD OFF} + +requires + pckUCDataConnector, + dsnap, + dbxcds, + dbexpress; + +contains + UCDBXConn in 'UCDBXConn.pas', + UCDBXConnReg in 'UCDBXConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj new file mode 100644 index 0000000..7f4966a --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj @@ -0,0 +1,98 @@ + + + {2e1b5318-7a28-4093-9bbb-c66237b9a704} + pckUCDBXConn.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCDBXConn.bpl + + + 7.0 + False + False + 0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + RELEASE + + + 7.0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + DEBUG + + + Delphi.Personality + Package + + + False + True + False + + + User Control DBX Connectors + False + False + False + + + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + pckUCDBXConn.dpk + + + + + + + MainSource + + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res b/internal/2.31RC1/1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConn.pas new file mode 100644 index 0000000..557326e --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConn.pas @@ -0,0 +1,120 @@ +{----------------------------------------------------------------------------- + Unit Name: UCFIBConn + Author: QmD + Date: 08-nov-2004 + Purpose: FIB Support + + registered in UCReg.pas +-----------------------------------------------------------------------------} + +unit UCFIBConn; + +interface + +uses + SysUtils, Classes, UCBase, DB, pFIBDatabase, pFIBDataset; + +type + TUCFIBConn = class(TUCDataConn) + private + FConnection : TpFIBDatabase; + FTransaction: TpFIBTransaction; + procedure SetFTransaction(const Value: TpFIBTransaction); + procedure SetFConnection(const Value: TpFIBDatabase); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation);override; + public + function GetDBObjectName : String; override; + function GetTransObjectName : String; override; + function UCFindDataConnection : Boolean; override; + function UCFindTable(const Tablename : String) : Boolean; override; + function UCGetSQLDataset(FSQL : String) : TDataset; override; + procedure UCExecSQL(FSQL: String);override; + published + property Connection : TpFIBDatabase read FConnection write SetFConnection; + property Transaction : TpFIBTransaction read FTransaction write SetFTransaction; + end; + +implementation + +{ TUCFIBConn } + +procedure TUCFIBConn.SetFTransaction(const Value: TpFIBTransaction); +begin + FTransaction := Value; + if Value <> nil then Value.FreeNotification(Self); +end; + +procedure TUCFIBConn.SetFConnection(const Value: TpFIBDatabase); +begin + if FConnection <> Value then FConnection := Value; + if FConnection <> nil then FConnection.FreeNotification(Self); +end; + +procedure TUCFIBConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then FConnection := nil; + if (Operation = opRemove) and (AComponent = FTransaction) then FTransaction := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCFIBConn.UCFindTable(const TableName: String): Boolean; +var + TempList : TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames(TempList,False); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCFIBConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCFIBConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then Result := FConnection.Name + else begin + Result := FConnection.Owner.Name+'.'+FConnection.Name; + end; + end else Result := ''; +end; + +function TUCFIBConn.GetTransObjectName: String; +begin + if Assigned(FTransaction) then + begin + if Owner = FTransaction.Owner then Result := FTransaction.Name + else begin + Result := FTransaction.Owner.Name+'.'+FTransaction.Name; + end; + end else Result := ''; +end; + +procedure TUCFIBConn.UCExecSQL(FSQL: String); +begin + FConnection.Execute(FSQL); +end; + +function TUCFIBConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TpFIBDataset.Create(nil); + with Result as TpFIBDataset do + begin + Database := FConnection; + Transaction := FTransaction; + SelectSQL.text := FSQL; + Open; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas new file mode 100644 index 0000000..f7387bb --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas @@ -0,0 +1,17 @@ +unit UCFIBReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCFIBConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCFIBConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConn.pas new file mode 100644 index 0000000..42a11f8 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConn.pas @@ -0,0 +1,111 @@ +{----------------------------------------------------------------------------- + Unit Name: UCIBOConn + Author: QmD + Date: 22-nov-2004 + Purpose: IBO Dataset Support + + registered in UCIBOReg.pas +-----------------------------------------------------------------------------} + +unit UCIBOConn; + +interface + +uses + Classes, + DB, + IB_Components, + IBODataset, + SysUtils, + UCDataConnector; + +type + TUCIBOConn = class(TUCDataConnector) + private + FConnection: TIBODatabase; + procedure SetIBOConnection(const Value: TIBODatabase); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TIBODatabase read FConnection write SetIBOConnection; + end; + +implementation + +{ TUCIBOConn } + + +procedure TUCIBOConn.SetIBOConnection(const Value: TIBODatabase); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCIBOConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCIBOConn.UCFindTable(const TableName: String): Boolean; +begin + with TIBOQuery.Create(nil) do + begin + IB_Connection := FConnection; + SQL.Text := 'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 and RDB$RELATION_NAME = ' + QuotedStr(Uppercase(TableName)); + Open; + Result := FieldByName('RDB$RELATION_NAME').AsString = Uppercase(TableName); + Close; + Free; + end; +end; + +function TUCIBOConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCIBOConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + + +procedure TUCIBOConn.UCExecSQL(FSQL: String); +begin + FConnection.DefaultTransaction.ExecuteImmediate(FSQL); + FConnection.DefaultTransaction.Commit; +end; + +function TUCIBOConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TIBOQuery.Create(nil); + with Result as TIBOQuery do + begin + IB_Connection := FConnection; + SQL.Text := FSQL; + Open; + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas new file mode 100644 index 0000000..f8c4eb9 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas @@ -0,0 +1,18 @@ +unit UCIBOConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCIBOConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCIBOConn]); +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk new file mode 100644 index 0000000..6671069 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk @@ -0,0 +1,32 @@ +package pckIBOConn; + +{$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} +{$DESCRIPTION 'User Control IBO Connector'} +{$IMPLICITBUILD ON} + +contains + UCIBOConn in 'UCIBOConn.pas', + UCIBOConnReg in 'UCIBOConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.res b/internal/2.31RC1/1/Packages/Connectors/UCIBOConn/pckIBOConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConn.pas new file mode 100644 index 0000000..642fa7e --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConn.pas @@ -0,0 +1,152 @@ +{----------------------------------------------------------------------------- + Unit Name: UCIBXConn + Author: QmD + Date: 08-nov-2004 + Purpose: IBX Support + + registered in UCReg.pas +-----------------------------------------------------------------------------} + +unit UCIBXConn; + +interface + +uses + Classes, + DB, + IBDataBase, + IBQuery, + SysUtils, + UCDataConnector; + +type + TUCIBXConn = class(TUCDataConnector) + private + FConnection: TIBDatabase; + FTransaction: TIBTransaction; + procedure SetTransaction(const Value: TIBTransaction); + procedure SetConnection(const Value: TIBDatabase); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TIBDatabase read FConnection write SetConnection; + property Transaction: TIBTransaction read FTransaction write SetTransaction; + end; + +implementation + +{ TUCIBXConn } + +procedure TUCIBXConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + if (Operation = opRemove) and (AComponent = FTransaction) then + FTransaction := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCIBXConn.UCFindTable(const TableName: String): Boolean; +var + TempList: TStringList; +begin + TempList := TStringList.Create; + try + FConnection.GetTableNames(TempList, False); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + SysUtils.FreeAndNil(TempList); + end; +end; + +function TUCIBXConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCIBXConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCIBXConn.GetTransObjectName: String; +begin + if Assigned(FTransaction) then + begin + if Owner = FTransaction.Owner then + Result := FTransaction.Name + else + begin + Result := FTransaction.Owner.Name + '.' + FTransaction.Name; + end; + end + else + Result := ''; +end; + +procedure TUCIBXConn.UCExecSQL(FSQL: String); +var + Qry: TIBQuery; +begin + Qry := TIBQuery.Create(nil); + try + Qry.Database := FConnection; + Qry.Transaction := FTransaction; + if not Qry.Transaction.Active then + Qry.Transaction.Active := True; + Qry.SQL.Text := FSQL; + Qry.ExecSQL; + Qry.Transaction.Commit; + finally + Qry.Free; + end; +end; + +function TUCIBXConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TIBQuery.Create(nil); + with Result as TIBQuery do + begin + Database := FConnection; + Transaction := FTransaction; + SQL.Text := FSQL; + Open; + end; +end; + + +procedure TUCIBXConn.SetTransaction(const Value: TIBTransaction); +begin + FTransaction := Value; + if Value <> nil then + Value.FreeNotification(Self); +end; + +procedure TUCIBXConn.SetConnection(const Value: TIBDatabase); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas new file mode 100644 index 0000000..7eb0997 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas @@ -0,0 +1,20 @@ +unit UCIBXConnReg; + +interface + +uses + Classes; + +procedure Register; + +implementation + +uses + UCIBXConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCIBXConn]); +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj new file mode 100644 index 0000000..c59c976 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckUCIBXConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control IBX Connector + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk new file mode 100644 index 0000000..4511021 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk @@ -0,0 +1,36 @@ +package pckUCIBXConn; + +{$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} +{$DESCRIPTION 'User Control IBX Connector'} +{$IMPLICITBUILD ON} + +requires + pckUCDataConnector, + ibxpress; + +contains + UCIBXConn in 'UCIBXConn.pas', + UCIBXConnReg in 'UCIBXConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res b/internal/2.31RC1/1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConn.pas new file mode 100644 index 0000000..0f07703 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConn.pas @@ -0,0 +1,149 @@ +{----------------------------------------------------------------------------- + Unit Name: UCMDOConn + Author: Alexandre Oliveira - 05/11/2004 + Change: QmD + Date: 10-nov-2004 + Purpose: MDO Support + + registered in UCMDOReg.pas +-----------------------------------------------------------------------------} + +unit UCMDOConn; + +interface + +uses + Classes, + DB, + MDODatabase, + MDOQuery, + SysUtils, + UCDataConnector; + +type + TUCMDOConn = class(TUCDataConnector) + private + FConnection: TMDODatabase; + FTransaction: TMDOTransaction; + procedure SetFTransaction(const Value: TMDOTransaction); + procedure SetMDOConnection(const Value: TMDODatabase); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + function UCFindDataConnection: Boolean; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + procedure UCExecSQL(FSQL: String); override; + published + property Connection: TMDODatabase read FConnection write SetMDOConnection; + property Transaction: TMDOTransaction read FTransaction write SetFTransaction; + end; + +implementation + +{ TUCMDOConn } + +procedure TUCMDOConn.SetFTransaction(const Value: TMDOTransaction); +begin + FTransaction := Value; + if Value <> nil then + Value.FreeNotification(Self); +end; + +procedure TUCMDOConn.SetMDOConnection(const Value: TMDODatabase); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCMDOConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + if (Operation = opRemove) and (AComponent = FTransaction) then + FTransaction := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCMDOConn.UCFindTable(const TableName: String): Boolean; +var + TempList: TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames(TempList, False); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCMDOConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCMDOConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCMDOConn.GetTransObjectName: String; +begin + if Assigned(FTransaction) then + begin + if Owner = FTransaction.Owner then + Result := FTransaction.Name + else + begin + Result := FTransaction.Owner.Name + '.' + FTransaction.Name; + end; + end + else + Result := ''; +end; + +procedure TUCMDOConn.UCExecSQL(FSQL: String); +begin + with TMDOQuery.Create(nil) do + begin + Database := FConnection; + Transaction := FTransaction; + if not Transaction.Active then + Transaction.Active := True; + SQL.Text := FSQL; + ExecSQL; + FTransaction.Commit; + Free; + end; +end; + +function TUCMDOConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TMDOQuery.Create(nil); + with Result as TMDOQuery do + begin + Database := FConnection; + Transaction := FTransaction; + SQL.Text := FSQL; + Open; + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas new file mode 100644 index 0000000..7b41340 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas @@ -0,0 +1,17 @@ +unit UCMDOConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCMDOConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCMDOConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj new file mode 100644 index 0000000..d712089 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj @@ -0,0 +1,177 @@ + + + + + + + + + + + + pckUCMDOConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control MDO Connector + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk new file mode 100644 index 0000000..6e8946f --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk @@ -0,0 +1,40 @@ +package pckUCMDOConn; + +{$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} +{$DESCRIPTION 'User Control MDO Connector'} +{$IMPLICITBUILD OFF} + +requires + rtl, + pckUCDataConnector, + vcl, + vclactnband, + vcldb, + RCLMDO2005; + +contains + UCMDOConnReg in 'UCMDOConnReg.pas', + UCMDOConn in 'UCMDOConn.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res b/internal/2.31RC1/1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCMidasConn.SetProviderName(const Value: String); +begin + FProviderName := Value; +end; + +procedure TUCMidasConn.UCExecSQL(FSQL: String); +begin + IAppServer(FConnection.GetServer).AS_Execute(FProviderName, FSQL, FParams, FOwnerData); +end; + +function TUCMidasConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCMidasConn.UCFindTable(const Tablename: String): Boolean; +begin + case FBancoDados of + bdFirebird: FSQLStmt := SQL_Firebird; + bdMSSQL: FSQLStmt := SQL_MSSQL; + bdOracle: FSQLStmt := SQL_Oracle; + bdPostgreSQL: FSQLStmt := SQL_PostgreSQL; + bdMySQL: FSQLStmt := SQL_MySQL; + bdParadox: FSQLStmt := SQL_Paradox; + end; + + FSQLStmt := Format(FSQLStmt, [Tablename]); + + FResultado := IAppServer(FConnection.GetServer).AS_GetRecords(FProviderName, -1, FRecsOut, 0, FSQLStmt, FParams, FOwnerData); + + Result := FRecsOut > 0; +end; + +function TUCMidasConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TClientDataSet.Create(Self); + + with TClientDataSet(Result) do + begin + if FConnection is TConnectionBroker then + ConnectionBroker := TConnectionBroker(FConnection) + else + RemoteServer := FConnection; + + ProviderName := FProviderName; + CommandText := FSQL; + Open; + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas new file mode 100644 index 0000000..9bbf9b1 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas @@ -0,0 +1,74 @@ +unit UCMidasConnReg; + +interface + +{$I 'UserControl.inc'} + +uses + Classes, + DesignEditors, + DesignIntf, + TypInfo; + +type + TUCProviderNameProperty = class(TStringProperty) + function GetAttributes: TPropertyAttributes; override; + procedure GetValues(Proc: TGetStrProc); override; + end; + +procedure Register; + +implementation + +uses + Midas, + UCMidasConn, + Variants; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCMidasConn]); + RegisterPropertyEditor(TypeInfo(String), TUCMidasConn, 'ProviderName', TUCProviderNameProperty); +end; + +{ TUCProviderNameProperty } + +function TUCProviderNameProperty.GetAttributes: TPropertyAttributes; +begin + Result := [paValueList]; +end; + +procedure TUCProviderNameProperty.GetValues(Proc: TGetStrProc); +var + Componente: TComponent; + Lista: variant; + I: Integer; +begin + Componente := TComponent(GetComponent(0)); + + if not Assigned(Componente) then + Exit; + + if not (Componente is TUCMidasConn) then + Exit; + + if not Assigned(TUCMidasConn(Componente).Connection) then + Exit; + + with TUCMidasConn(Componente) do + begin + + try + Lista := IAppServer(Connection.GetServer).AS_GetProviderNames; + except + end; + + if VarIsArray(Lista) and (VarArrayDimCount(Lista) = 1) then + for I := VarArrayLowBound(Lista, 1) to VarArrayHighBound(Lista, 1) do + Proc(Lista[I]); + + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj new file mode 100644 index 0000000..1b24c02 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj @@ -0,0 +1,178 @@ + + + + + + + + + + + + pckUCMidasConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control Midas Connector + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + TeeChart Components + JVCL BDE Components + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk new file mode 100644 index 0000000..adaef7f --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk @@ -0,0 +1,39 @@ +package pckUCMidasConn; + +{$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} +{$DESCRIPTION 'User Control Midas Connector'} +{$IMPLICITBUILD OFF} + +requires + designide, + dbrtl, + dsnap, + rtl, + pckUCDataConnector; + +contains + UCMidasConn in 'UCMidasConn.pas', + UCMidasConnReg in 'UCMidasConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj new file mode 100644 index 0000000..fac6a75 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj @@ -0,0 +1,56 @@ + + + {8fed7c75-8e0d-4aa3-a33b-65582db4fefb} + pckUCMidasConn.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCMidasConn.bpl + + + 7.0 + False + False + 0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + RELEASE + + + 7.0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + Delphi.Personality + Package + +FalseTrueFalseUser Control Midas ConnectorFalseFalseFalseC:\Arquivos de programas\Borland\Delphi7\Bin\TrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0 + TeeChart Components + JVCL BDE Components + pckUCMidasConn.dpk + + + + + MainSource + + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res b/internal/2.31RC1/1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas new file mode 100644 index 0000000..cd66940 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas @@ -0,0 +1,106 @@ +{----------------------------------------------------------------------------- + Unit Name: UCMyDACConn + Author: QmD + Date: 22-nov-2004 + Purpose: MyDAC Support + + registered in UCMyDACReg.pas +-----------------------------------------------------------------------------} + +unit UCMyDACConn; + +interface + +uses + UCDataConnector,SysUtils, Classes, UCBase, DB, DBAccess, MyAccess, MemDS; + +type + TUCMyDACConn = class(TUCDataConnector) + private + FConnection : TMyConnection; + procedure SetFConnection(Value : TMyConnection); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation);override; + public + function GetDBObjectName : String; override; + function GetTransObjectName : String; override; + function UCFindDataConnection : Boolean; override; + function UCFindTable(const Tablename : String) : Boolean; override; + function UCGetSQLDataset(FSQL : String) : TDataset;override; + procedure UCExecSQL(FSQL: String);override; + published + property Connection : TMyConnection read FConnection write SetFConnection; + end; + +implementation + +{ TUCMyDACConn } + +procedure TUCMyDACConn.SetFConnection(Value: TMyConnection); +begin + if FConnection <> Value then FConnection := Value; + if FConnection <> nil then FConnection.FreeNotification(Self); +end; + +procedure TUCMyDACConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + begin + FConnection := nil; + end; + inherited Notification(AComponent, Operation); +end; + +function TUCMyDACConn.UCFindTable(const TableName: String): Boolean; +var + TempList : TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames(TempList); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCMyDACConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCMyDACConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then Result := FConnection.Name + else begin + Result := FConnection.Owner.Name+'.'+FConnection.Name; + end; + end else Result := ''; +end; + +function TUCMyDACConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCMyDACConn.UCExecSQL(FSQL: String); +begin + FConnection.ExecSQL(FSQL,[]); +end; + +function TUCMyDACConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TMyQuery.Create(nil); + with Result as TMyQuery do + begin + Connection := FConnection; + SQL.Text := FSQL; + Open; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas new file mode 100644 index 0000000..d73c134 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas @@ -0,0 +1,17 @@ +unit UCMyDACConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCMyDACConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCMyDACConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk new file mode 100644 index 0000000..82fd28b --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk @@ -0,0 +1,48 @@ +package pckMyDacConn; + +{$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} +{$IMPLICITBUILD ON} + +requires + rtl, + dbrtl, + dac105, + mydac105, + vcldb, + vcl, + pckUserControl_RT, + pckUCDataConnector, + pckMD5, + VclSmp, + vclx, + inet, + designide, + xmlrtl, + vclactnband; + +contains + UCMyDACConnReg in 'UCMyDACConnReg.pas', + UCMyDACConn in 'UCMyDACConn.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj new file mode 100644 index 0000000..388d778 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj @@ -0,0 +1,90 @@ + + + + {5338e891-3591-4e66-859a-eaa77ade0066} + pckMyDacConn.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMyDacConn.bpl + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + + + Delphi.Personality + Package + + + False + True + False + + + True + False + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + pckMyDacConn.dpk + + + + + + + MainSource + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj new file mode 100644 index 0000000..15dbba3 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj @@ -0,0 +1,31 @@ + + + {9e0c44c1-7f19-426e-959f-54b897d52e85} + + + + + Default.Personality + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res new file mode 100644 index 0000000000000000000000000000000000000000..182668049ccd774791b0453c3e6ee7c19e29dcd8 GIT binary patch literal 5280 zcmbVQO>Y}j6n#;UkdS~b5Mt+%S13}FrfmXL2__03ilBVfupGJeB(<<-g2zsq)#RVJ z3xv@831^M6>=G&c30<;48qT@*-I+<^vRXumx$Mfj$5C(+=D2`1si6Stg!sv)`XRbM02!agF+=TDv}O z^Ob)cA7U7`d5#&6e45LA0bY65b~!lIP58{7yEfNNkxaH{h4!)bs*ho`eO$&dE_s+a z9oJlt7qOX#a~v=x_{7d~=gxqAW*pE)%y}Q;(DG@OYsoEeIIeigp_oyBCfEhm*R|*2 zlB`wj&!HWLy%g$UW9mcTU_n`ZccN@f?+d z=2hl0V#2&vP0FF2`E!O=!86bNvu%CvU2V+ruezC|ti+}sj_dh(>=0U78BF8m)D@yl zKSgdESl2?HVLTIuxqQaGTmwV=Hv2Q(Pkdrfv+B-Wfi>1we8kRRz&-i*lAH>vQMspKgAlZ4dGjA%#Y|t zJkdKP2efCvreVM3zBt2q&7M2sKu*L|Y{vEYSjW02ChI`k%(3U$fNx=6s2r$~7;^rG zJM$b+pPZAN7KI}RY2$uyoH-N@#HKa$`~?%-$%$=pl^g&|Y7yMjvwu|^xyL@@@D7*Q zh^J@j^&5v)rJp%>h)ey<5AU?{sQ4Q%@z6sI(T4cM)whND#eE}w-4IV}*y|2Gmj*Z^ zmYliQZ)YUu#5`jyai~kq9{l*`$~^@x$BE4t(w>9Q{gUq%_`%3U4fO|ZywCausD7yp z;xHefKcgwvApaS)dJbqCzWVw4CI5&em?6(r%|Sos?9GuJVNUBF9@wUzwXf%cy~KwR z(~R?M^ZuR7y*~%7JHB7!sIeH2`sMu5re4WYi1=8?d5JkwESbk%dmA}t_knHcXY=v3 zrm5SX9pgj4;Y)0fuh=@DXTE+BSMv{U7&9z-en+4;W6X;=kTaP2_l+7nzUCi&oUL=b zqm~=JYvuWnTMO&3SI!4s>M`_p5*+M*JNI0~mpNp^+coFUF!S zY8P(M&K#Ondl&RORF#Lh_^1Va*Qg(QfW!EzQR|2L_#KG%T*lGoJ5|;ucySH!`3CZT z6=NA6BvIPjJCDO9{jAS3oR|MUz_z_LQWM}Pbq`#tU1G_5<8iG9iOr93nTO9Y)}rLQ zRps0Ae$Kb3TeaKW}xybin@tPCHzRt%uys929@gm=n$Em-Q zxfLRnLi^Y4+x!bU! zc*i|(+iur=3)^wu!P}?)y9R&F!0#DBAirwxSC9qw!=jU4IEvx}#95GS^*x)dr^7*T z7>&|?5^puvR&FeH;xt>GH7O9VKb9H(u^0!~30dxN^AG42GS!zZa$BpX+D{6$E9l z-Ch)r`{N@H2Eq8~0Ekce@!dO39f>GcyoUkQPdl{*`E zK3Z8{zkRnE==OtA(v8wI8EucckNe}OJD!XXZ>hPeG_giTRP~(`;*ST=+rbY_G?lBeXH}eSK~fQo8!?W9q-0_ z$u&#iZqu@xM%~E>$6Y0L6#X_qiA25cNBzV8Ali@8auS@%=`WsQ>liirO>`IyDp^4= z;J{Y1lkUcc$jzvhi6EHtx4W!>t>#{5kVgL8nGXssqhA8wTs=p1bG6hAcAKkq7tp~C F`wwl~C4~S0 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj new file mode 100644 index 0000000..ed35f99 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckUCMYDac.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + UserControl MyDac Connector + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk new file mode 100644 index 0000000..fec983f --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk @@ -0,0 +1,47 @@ +package pckUCMYDac; + +{$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} +{$DESCRIPTION 'UserControl MyDac Connector'} +{$IMPLICITBUILD OFF} + +requires + rtl, + dbrtl, + pckUserControl_RT, + VclSmp, + vclx, + vcl, + pckUCDataConnector, + pckMD5, + vcldb, + vclactnband, + vcljpg, + dac100, + mydac100; + +contains + UCMyDACConnReg in 'UCMyDACConnReg.pas', + UCMyDACConn in 'UCMyDACConn.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res b/internal/2.31RC1/1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t Value then FConnection := Value; + if FConnection <> nil then FConnection.FreeNotification(Self); +end; + +procedure TUCMySQLDACConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + begin + FConnection := nil; + end; + inherited Notification(AComponent, Operation); +end; + +function TUCMySQLDACConn.UCFindTable(const TableName: String): Boolean; +var + TempList : TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames(TableName, TempList); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCMySQLDACConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCMySQLDACConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then Result := FConnection.Name + else begin + Result := FConnection.Owner.Name+'.'+FConnection.Name; + end; + end else Result := ''; +end; + +function TUCMySQLDACConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCMySQLDACConn.UCExecSQL(FSQL: String); +begin + FConnection.Execute(FSQL); +end; + +function TUCMySQLDACConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TmySQLQuery.Create(nil); + with Result as TmySQLQuery do + begin + Database := FConnection; + SQL.Text := FSQL; + Open; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas new file mode 100644 index 0000000..2e7c007 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas @@ -0,0 +1,17 @@ +unit UCMySQLDACConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCMySQLDACConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCMySQLDACConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj new file mode 100644 index 0000000..afe1c73 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckMySQLDACConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control ADO Connectors + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk new file mode 100644 index 0000000..39fe7be --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk @@ -0,0 +1,38 @@ +package pckMySQLDACConn; + +{$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} +{$DESCRIPTION 'User Control ADO Connectors'} +{$IMPLICITBUILD OFF} + +requires + pckUCDataConnector, + adortl, + rtl, + dbrtl; + +contains + UCMySQLDACConnReg in 'UCMySQLDACConnReg.pas', + UCMySQLDACConn in 'UCMySQLDACConn.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj new file mode 100644 index 0000000..fde8cb2 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj @@ -0,0 +1,98 @@ + + + {480541f5-52fb-4c6b-adf4-7b2eb88c5599} + pckMySQLDACConn.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMySQLDACConn.bpl + + + 7.0 + False + False + 0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + RELEASE + + + 7.0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + DEBUG + + + Delphi.Personality + Package + + + False + True + False + + + User Control ADO Connectors + False + False + False + + + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + pckMySQLDACConn.dpk + + + + + + + MainSource + + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res b/internal/2.31RC1/1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t Value then FConnection := Value; + if FConnection <> nil then FConnection.FreeNotification(Self); +end; + +procedure TUCNexusDBConnector.UCExecSQL(FSQL: String); +var + TempQuery: TnxQuery; +begin + TempQuery:= TnxQuery.Create(nil); + try + TempQuery.Database:= FConnection; + TempQuery.SQL.text := FSQL; + TempQuery.ExecSQL; + finally + FreeAndNil(TempQuery); + end; +end; + +function TUCNexusDBConnector.UCFindDataConnection: Boolean; +begin + Result := (Assigned(FConnection) and (FConnection.Connected)); +end; + +function TUCNexusDBConnector.UCFindTable(const Tablename: String): Boolean; +var + Lista : TStringList; +begin + Lista := TStringList.Create; + try + FConnection.GetTableNames(Lista); + Result := Lista.IndexOf(TableName) > -1; + finally + FreeAndNil(Lista); + end; +end; + +function TUCNexusDBConnector.UCGetSQLDataset(FSQL: String): TDataset; +var + TempQuery : TnxQuery; +begin + TempQuery := TnxQuery.Create(nil); + TempQuery.Database:= FConnection; + with TempQuery do + begin + SQL.text := FSQL; + Open; + end; + Result := TempQuery; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas new file mode 100644 index 0000000..8a71536 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas @@ -0,0 +1,15 @@ +unit UCNexusDBConnReg; + +interface + +uses Classes, UCNexusDBConn; + +procedure Register; + +implementation + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCNexusDBConnector]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk new file mode 100644 index 0000000..f08bd48 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk @@ -0,0 +1,38 @@ +package pckUCNexusDBConn; + +{$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} +{$IMPLICITBUILD OFF} + +requires + rtl, + dbrtl, + pckUCDataConnector, + NexusDB207ll100, + NexusDB207db100, + NexusDB207sd100; + +contains + UCNexusDBConnReg in 'UCNexusDBConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res b/internal/2.31RC1/1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t Value then FConnection := Value; + if FConnection <> nil then FConnection.FreeNotification(Self); +end; + +procedure TUCODACConn.Notification(AComponent: TComponent; + Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + begin + FConnection := nil; + end; + inherited Notification(AComponent, Operation); +end; + +function TUCODACConn.UCFindTable(const TableName: String): Boolean; +var + TempList : TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames(TempList); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCODACConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCODACConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then Result := FConnection.Name + else begin + Result := FConnection.Owner.Name+'.'+FConnection.Name; + end; + end else Result := ''; +end; + +function TUCODACConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCODACConn.UCExecSQL(FSQL: String); +Var Query : TOraSql; +begin + Try + Query := TOraSql.create(self); + With Query as TOraSql do + Begin + Connecton := FConnection; + Sql.Add( fSql ); + Execute; + Connecton.Commit; + End; + Finally + FreeAndNil( Query ); + End; +end; + +function TUCODACConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TOraQuery.Create(nil); + with Result as TOraQuery do + begin + Session := FConnection; + SQL.Clear; + Sql.Add(FSQL); + Open; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCODACConn/UCODACConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/UCODACConnReg.pas new file mode 100644 index 0000000..3ef86c9 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/UCODACConnReg.pas @@ -0,0 +1,17 @@ +unit UCODACConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCODACConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCODACConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj new file mode 100644 index 0000000..652f77c --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckODACConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.dpk new file mode 100644 index 0000000..4ea5346 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.dpk @@ -0,0 +1,35 @@ +package pckODACConn; + +{$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} +{$IMPLICITBUILD OFF} + +requires + rtl, + dbrtl; + +contains + UCODACConnReg in 'UCODACConnReg.pas', + UCODACConn in 'UCODACConn.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.res b/internal/2.31RC1/1/Packages/Connectors/UCODACConn/pckODACConn.res new file mode 100644 index 0000000000000000000000000000000000000000..3424a688a1b762b9952721172bfa1834be798b31 GIT binary patch literal 4396 zcmbW5y^ice5QS^CNMx`9BApGiE(S{o$&3%L$5+F6_ ztLm~nvz}%5S}Ik$ySmP)pYE~7%ek+?BU%R{e_KP(7PJ?^N50V=n zX`nry`}9L^kB^TwmExLl%I_aOSl{)AP3VWscsrl#tNuSeU?g^G=90%WPQG5nYbw1> z;;0z_S%yeee;W-|6Mu2+D*J8h)9~Q75&N@ZSKP!8hf!MoE+70OV3Xq|&l)EO z*Lrt5{K=2!-}jLJhlK|*dX1EWNw#os9;cV_lT&& z}Zn$UI;=sGs5}#P{jdmV$iyfbu>xYQj zZRVJR1Mk$|u}5Ja;3+*wAJ`Z1TiM1AzJ#?x&BM>9zy1ggb8zr8TjWP#1NiE(r@CPB z4p+w?WrOV?-Gz`Jk6->g-VqKO&%#EuKXYGCs@ME%$pKDa1~z^hzU=6GFzJIBljFwo zAl+%-5FCgR46lFU&W(fmlQqw2tp*1l>wGXz4xIzo$RX+(Pqy zZLHjDA2^)h1zY~2rY-*D(5>;4bCX}23R8kd7O%a_-@#h*3uI+17DfZp*=E25?k9Y9d@A>Y;PXd<^^`E$L zp5qRP_`Ns4As<7l(TI)mUx>AF&^Yl!@5k@?moLX0sBMTTe%A8N@f>L_`d(Vt89%)r z_0eANC19qo&Y1IemitzR=sWH&IEF9$5x>`8W8(EZ4e~EL*4^hESiY{kc{j3_=Yg@m zmwo)`Y2t3R!@uHBeD~e(13T8I()w3^Bmd&2xx_;Ajet(U=VcDO24lP5h@s&}{`Icf znsG)mH*waM`oOJ|o%VWtq`e=9b|%Fkf7{t}iSO^a>-@JPF%Ikf=l!R5a)Q8*`wL&h zMeNQ^v6I7$HSdM^hFbHmi?3dYdyV)Nk8toGF-HFoAKyTnbD!5c_tesx;)M+y zXWq|rN8Ay6o?Xrv*b9deV{);5Sm#{5#$oCC0~m1G>T_&zyxy~nR}NrZKFlF|XCXOJ zBW(Ph=@M_%@w?Y>)DQU`nL7L3eOwaIJM&25UDc=fEulAvk-Tvy@(xGuCCzWY<-Gna z2RqQq)WU%tqu1UdvUN=LB;OART>N|3b>sx!Z+Vi#YyI$o7kn2UPwh;?;eFW2FFBw+ zwm0O#?dFyX#Z7I}Px^hY&i!ce@hX?6Ctt@d_q`YIntl3vtG?#va=sqTswV%H{3H1! z`6xLyd6Y)p`#kDz2jpmWi+nWuQog?y#z9z}Fl#;D)^E)0dr7Td*)R5^{cOKVezM=B X^V$Bd!M_>$KjZ%1|JC4MkQ@6CcupdC literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConn.pas b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConn.pas new file mode 100644 index 0000000..240e1ea --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConn.pas @@ -0,0 +1,146 @@ +unit UCUIBConn; + +interface + +uses + Classes, + DB, + jvuib, + jvuibdataset, + jvuibmetadata, + UCDataConnector; + +type + TUCUIBConn = class(TUCDataConnector) + private + FConnection: TJvUIBDataBase; + FTransaction: TJvUIBTransaction; + procedure SetConnection(const Value: TJvUIBDataBase); + procedure SetTransaction(const Value: TJvUIBTransaction); + protected + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + public + procedure UCExecSQL(FSQL: String); override; + function UCGetSQLDataset(FSQL: String): TDataset; override; + function UCFindTable(const Tablename: String): Boolean; override; + function UCFindDataConnection: Boolean; override; + function GetDBObjectName: String; override; + function GetTransObjectName: String; override; + published + property Connection: TJvUIBDataBase read FConnection write SetConnection; + property Transaction: TJvUIBTransaction read FTransaction write SetTransaction; + end; + +implementation + +uses + SysUtils; + +{ TUCUIBConn } + +function TUCUIBConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCUIBConn.GetTransObjectName: String; +begin + if Assigned(FTransaction) then + begin + if Owner = FTransaction.Owner then + Result := FTransaction.Name + else + begin + Result := FTransaction.Owner.Name + '.' + FTransaction.Name; + end; + end + else + Result := ''; +end; + +procedure TUCUIBConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + if (Operation = opRemove) and (AComponent = FTransaction) then + FTransaction := nil; + inherited Notification(AComponent, Operation); +end; + +procedure TUCUIBConn.SetConnection(const Value: TJvUIBDataBase); +begin + if FConnection <> Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCUIBConn.SetTransaction(const Value: TJvUIBTransaction); +begin + FTransaction := Value; + if Value <> nil then + Value.FreeNotification(Self); +end; + +procedure TUCUIBConn.UCExecSQL(FSQL: String); +var + Query: TJvUIBQuery; +begin + try + Query := TJvUIBQuery.Create(nil); + Query.DataBase := FConnection; + Query.Transaction := FTransaction; + Query.SQL.Text := FSQL; + FTransaction.StartTransaction; + Query.ExecSQL; + FTransaction.Commit; + finally + SysUtils.FreeAndNil(Query); + end; +end; + +function TUCUIBConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCUIBConn.UCFindTable(const Tablename: String): Boolean; +var + MetaData: TMetaDataBase; + Table: TMetaTable; +begin + Result := False; + MetaData := TMetaDataBase(FConnection.GetMetadata(True)); + Table := MetaData.FindTableName(Tablename); + if Assigned(Table) then + Result := True; +end; + +function TUCUIBConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + try + Result := TJvUIBDataSet.Create(nil); + with (Result as TJvUIBDataSet) do + begin + DataBase := FConnection; + Transaction := FTransaction; + SQL.Text := FSQL; + Open; + end; + except + SysUtils.FreeAndNil(Result); + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas new file mode 100644 index 0000000..c706578 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas @@ -0,0 +1,21 @@ +unit UCUIBConnReg; + +interface + +uses + Classes; + +procedure Register; + +implementation + +uses + UCUIBConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCUIBConn]); +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj new file mode 100644 index 0000000..47c867d --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj @@ -0,0 +1,182 @@ + + + + + + + + + + + + pckUCUIBConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control UIB Connector + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + TeeChart Components + JVCL BDE Components + + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk new file mode 100644 index 0000000..2d94322 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk @@ -0,0 +1,43 @@ +package pckUCUIBConn; + +{$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} +{$DESCRIPTION 'User Control UIB Connector'} +{$IMPLICITBUILD ON} + +requires + rtl, + vcl, + vclactnband, + dbrtl, + vcldb, + pckUCDataConnector, + JvCoreD10R, + JvUIBD10R; + +contains + UCUIBConn in 'UCUIBConn.pas', + UCUIBConnReg in 'UCUIBConnReg.pas'; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res b/internal/2.31RC1/1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t Value then + FConnection := Value; + if FConnection <> nil then + FConnection.FreeNotification(Self); +end; + +procedure TUCZEOSConn.Notification(AComponent: TComponent; Operation: TOperation); +begin + if (Operation = opRemove) and (AComponent = FConnection) then + FConnection := nil; + inherited Notification(AComponent, Operation); +end; + +function TUCZEOSConn.UCFindTable(const TableName: String): Boolean; +var + TempList: TStringList; +begin + try + TempList := TStringList.Create; + FConnection.GetTableNames('', TempList); + TempList.Text := UpperCase(TempList.Text); + Result := TempList.IndexOf(UpperCase(TableName)) > -1; + finally + FreeAndNil(TempList); + end; +end; + +function TUCZEOSConn.UCFindDataConnection: Boolean; +begin + Result := Assigned(FConnection) and (FConnection.Connected); +end; + +function TUCZEOSConn.GetDBObjectName: String; +begin + if Assigned(FConnection) then + begin + if Owner = FConnection.Owner then + Result := FConnection.Name + else + begin + Result := FConnection.Owner.Name + '.' + FConnection.Name; + end; + end + else + Result := ''; +end; + +function TUCZEOSConn.GetTransObjectName: String; +begin + Result := ''; +end; + +procedure TUCZEOSConn.UCExecSQL(FSQL: String); +begin + with TZQuery.Create(nil) do + begin + Connection := FConnection; + SQL.Text := FSQL; + ExecSQL; + If FConnection.AutoCommit = False then + FConnection.Commit; + Free; + end; +end; + +function TUCZEOSConn.UCGetSQLDataset(FSQL: String): TDataset; +begin + Result := TZQuery.Create(nil); + with Result as TZQuery do + begin + Connection := FConnection; + SQL.Text := FSQL; + Open; + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas new file mode 100644 index 0000000..00a0d31 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas @@ -0,0 +1,17 @@ +unit UCZEOSConnReg; + +interface + +uses Classes; + +procedure Register; + +implementation + +uses UCZEOSConn; + +procedure Register; +begin + RegisterComponents('UC Connectors', [TUCZEOSConn]); +end; +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj new file mode 100644 index 0000000..8dae755 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + pckZeosConn.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control Zeos Connector + + + + C:\WINDOWS\Temp + + + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + + False + + + + + + False + + + True + False + + + + $00000000 + C:\Arquivos de programas\Borland\Delphi7\Bin\ + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk new file mode 100644 index 0000000..0f15e5d --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk @@ -0,0 +1,36 @@ +package pckZeosConn; + +{$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} +{$DESCRIPTION 'User Control Zeos Connector'} +{$IMPLICITBUILD OFF} + +requires + ZComponentDesign, + pckUCDataConnector; + +contains + UCZEOSConn in 'UCZEOSConn.pas', + UCZEOSConnReg in 'UCZEOSConnReg.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj new file mode 100644 index 0000000..e87a3c5 --- /dev/null +++ b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj @@ -0,0 +1,51 @@ + + + + {874a4671-4e5b-4e1c-a73c-fddb167ca5d2} + pckZeosConn.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckZeosConn.bpl + + + 7.0 + False + False + 0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + RELEASE + + + 7.0 + C:\WINDOWS\Temp + C:\WINDOWS\Temp + C:\WINDOWS\Temp + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib + + + Delphi.Personality + Package + +FalseTrueFalseUser Control Zeos ConnectorFalseFalseFalseC:\Arquivos de programas\Borland\Delphi7\Bin\TrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0pckZeosConn.dpk + + + + + MainSource + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.res b/internal/2.31RC1/1/Packages/Connectors/UCZeosConn/pckZeosConn.res new file mode 100644 index 0000000000000000000000000000000000000000..a3a102a89168b3004aebbbd9f82428a38e0a6cf3 GIT binary patch literal 1536 zcmZuw&ubGw7=1|=3`A-Q(iSfbOKHV}c1iIf*ov`IP%Bn?E!DPbX`6-^ck!YrJ-CoV z{}XA+MHqy5^6p*IKH50&g*j(gpGW55sUPS}=;F)ef@LQ51$7 zh8O71#&P%}YV>#<$8|s4G8^)V3Jj0Z07{i7=yrZMK5g}2f{8fxW8XLXk!OOVxIQz; zKb+D%W%5B1)EV%vXSoC%pNaij$0_HLjQepsrBa@6wToHbMha=dp8XI{WuM_IMY6e{lLtX$?s;j*E{xl)O0OCY5_wRj)2R?3ep zy&Ooyy8x4w$8rpITh>J;J!VMb?mSbXI8tM#*kB!ysmCx{S&Zf^px6t zMtj5F8$%U>XDNN3*9><*-1{}tmpyyQCTHL(te8SqP2H}l{%rzN=1Z_0R=I1J%E7xB I^L~2&0c=Ppxc~qF literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/D2009.groupproj b/internal/2.31RC1/1/Packages/D2009.groupproj new file mode 100644 index 0000000..40f326d --- /dev/null +++ b/internal/2.31RC1/1/Packages/D2009.groupproj @@ -0,0 +1,74 @@ + + + {1c592c69-53bd-49f1-a789-a4ac64f25b09} + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/internal/2.31RC1/1/Packages/ModelSupport_pckMD5/default.txaPackage b/internal/2.31RC1/1/Packages/ModelSupport_pckMD5/default.txaPackage new file mode 100644 index 0000000..e69de29 diff --git a/internal/2.31RC1/1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig b/internal/2.31RC1/1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/internal/2.31RC1/1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage b/internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage new file mode 100644 index 0000000..e69de29 diff --git a/internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig b/internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/internal/2.31RC1/1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage b/internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage new file mode 100644 index 0000000..e69de29 diff --git a/internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig b/internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/internal/2.31RC1/1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/internal/2.31RC1/1/Packages/pckMD5.bdsproj b/internal/2.31RC1/1/Packages/pckMD5.bdsproj new file mode 100644 index 0000000..c4ecafc --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckMD5.bdsproj @@ -0,0 +1,179 @@ + + + + + + + + + + + + pckMD5.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + MD5SUM Package + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + TeeChart Components + JVCL BDE Components + + + True + diff --git a/internal/2.31RC1/1/Packages/pckMD5.dpk b/internal/2.31RC1/1/Packages/pckMD5.dpk new file mode 100644 index 0000000..601c633 --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckMD5.dpk @@ -0,0 +1,34 @@ +package pckMD5; + +{$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} +{$DESCRIPTION 'MD5SUM Package'} +{$IMPLICITBUILD OFF} + +requires + rtl; + +contains + md5 in '..\Source\md5.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/pckMD5.dproj b/internal/2.31RC1/1/Packages/pckMD5.dproj new file mode 100644 index 0000000..48c893d --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckMD5.dproj @@ -0,0 +1,118 @@ + + + {d2274d98-f9f6-4f51-9617-6c46e56a95d2} + pckMD5.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMD5.bpl + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + ..\Lib\D12 + ..\Lib\D12 + ..\Lib\D12 + 00400000 + false + MD5SUM Package + ..\Lib\D12\pckMD5.bpl + true + true + 1 + true + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + + + 7.0 + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TeeChart Components + JVCL BDE Components + + + pckMD5.dpk + + + + 12 + + + + MainSource + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + diff --git a/internal/2.31RC1/1/Packages/pckMD5.res b/internal/2.31RC1/1/Packages/pckMD5.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t + + + + + + + + + + + pckUCDataConnector.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control DataConn + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + TeeChart Components + JVCL BDE Components + + + + + True + diff --git a/internal/2.31RC1/1/Packages/pckUCDataConnector.dpk b/internal/2.31RC1/1/Packages/pckUCDataConnector.dpk new file mode 100644 index 0000000..813930d --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUCDataConnector.dpk @@ -0,0 +1,36 @@ +package pckUCDataConnector; + +{$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} +{$DESCRIPTION 'User Control DataConn'} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + dbrtl; + +contains + UCDataConnector in '..\Source\UCDataConnector.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/pckUCDataConnector.dproj b/internal/2.31RC1/1/Packages/pckUCDataConnector.dproj new file mode 100644 index 0000000..d0b56ff --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUCDataConnector.dproj @@ -0,0 +1,121 @@ + + + {32671bc6-e575-4ad0-9f27-6e30a6d8f220} + pckUCDataConnector.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCDataConnector.bpl + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + ..\Lib\D12 + ..\Lib\D12;$(DCC_UnitSearchPath) + ..\Lib\D12 + ..\Lib\D12 + ..\Lib\D12\pckUCDataConnector.bpl + 00400000 + User Control DataConn + true + false + true + true + 1 + true + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + + + 7.0 + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TeeChart Components + JVCL BDE Components + + + pckUCDataConnector.dpk + + + + 12 + + + + MainSource + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + diff --git a/internal/2.31RC1/1/Packages/pckUCDataConnector.res b/internal/2.31RC1/1/Packages/pckUCDataConnector.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t + + + + + + + + + + + pckUCGlobal.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/Packages/pckUCGlobal.dpk b/internal/2.31RC1/1/Packages/pckUCGlobal.dpk new file mode 100644 index 0000000..80bd32b --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUCGlobal.dpk @@ -0,0 +1,40 @@ +package pckUCGlobal; + +{$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} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + dbrtl, + vclactnband, + dclindy, + indy, + vcldb, + pckMD5, + pckUCDataConnector, + VclSmp, + pckUserControl_RT; + +end. diff --git a/internal/2.31RC1/1/Packages/pckUCGlobal.res b/internal/2.31RC1/1/Packages/pckUCGlobal.res new file mode 100644 index 0000000000000000000000000000000000000000..3424a688a1b762b9952721172bfa1834be798b31 GIT binary patch literal 4396 zcmbW5y^ice5QS^CNMx`9BApGiE(S{o$&3%L$5+F6_ ztLm~nvz}%5S}Ik$ySmP)pYE~7%ek+?BU%R{e_KP(7PJ?^N50V=n zX`nry`}9L^kB^TwmExLl%I_aOSl{)AP3VWscsrl#tNuSeU?g^G=90%WPQG5nYbw1> z;;0z_S%yeee;W-|6Mu2+D*J8h)9~Q75&N@ZSKP!8hf!MoE+70OV3Xq|&l)EO z*Lrt5{K=2!-}jLJhlK|*dX1EWNw#os9;cV_lT&& z}Zn$UI;=sGs5}#P{jdmV$iyfbu>xYQj zZRVJR1Mk$|u}5Ja;3+*wAJ`Z1TiM1AzJ#?x&BM>9zy1ggb8zr8TjWP#1NiE(r@CPB z4p+w?WrOV?-Gz`Jk6->g-VqKO&%#EuKXYGCs@ME%$pKDa1~z^hzU=6GFzJIBljFwo zAl+%-5FCgR46lFU&W(fmlQqw2tp*1l>wGXz4xIzo$RX+(Pqy zZLHjDA2^)h1zY~2rY-*D(5>;4bCX}23R8kd7O%a_-@#h*3uI+17DfZp*=E25?k9Y9d@A>Y;PXd<^^`E$L zp5qRP_`Ns4As<7l(TI)mUx>AF&^Yl!@5k@?moLX0sBMTTe%A8N@f>L_`d(Vt89%)r z_0eANC19qo&Y1IemitzR=sWH&IEF9$5x>`8W8(EZ4e~EL*4^hESiY{kc{j3_=Yg@m zmwo)`Y2t3R!@uHBeD~e(13T8I()w3^Bmd&2xx_;Ajet(U=VcDO24lP5h@s&}{`Icf znsG)mH*waM`oOJ|o%VWtq`e=9b|%Fkf7{t}iSO^a>-@JPF%Ikf=l!R5a)Q8*`wL&h zMeNQ^v6I7$HSdM^hFbHmi?3dYdyV)Nk8toGF-HFoAKyTnbD!5c_tesx;)M+y zXWq|rN8Ay6o?Xrv*b9deV{);5Sm#{5#$oCC0~m1G>T_&zyxy~nR}NrZKFlF|XCXOJ zBW(Ph=@M_%@w?Y>)DQU`nL7L3eOwaIJM&25UDc=fEulAvk-Tvy@(xGuCCzWY<-Gna z2RqQq)WU%tqu1UdvUN=LB;OART>N|3b>sx!Z+Vi#YyI$o7kn2UPwh;?;eFW2FFBw+ zwm0O#?dFyX#Z7I}Px^hY&i!ce@hX?6Ctt@d_q`YIntl3vtG?#va=sqTswV%H{3H1! z`6xLyd6Y)p`#kDz2jpmWi+nWuQog?y#z9z}Fl#;D)^E)0dr7Td*)R5^{cOKVezM=B X^V$Bd!M_>$KjZ%1|JC4MkQ@6CcupdC literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT.bdsproj b/internal/2.31RC1/1/Packages/pckUserControl_DT.bdsproj new file mode 100644 index 0000000..b91ca3f --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_DT.bdsproj @@ -0,0 +1,178 @@ + + + + + + + + + + + + pckUserControl_DT.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control Package 2 + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 2 + 3 + 2 + 0 + False + False + False + False + False + 1046 + 1252 + + + UserControl + UserControl 2.30 RC2 + 2.3.2.0 + pkUserControl_DT + + + + + 2.3.2.0 + www.usercontrol.net + + + + + False + diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT.dpk b/internal/2.31RC1/1/Packages/pckUserControl_DT.dpk new file mode 100644 index 0000000..e0597aa --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_DT.dpk @@ -0,0 +1,48 @@ +package pckUserControl_DT; + +{$R *.res} +{$R '..\Source\UCReg.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'User Control Package 2'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + designide, + inet, + dbrtl, + vcldb, + VclSmp, + pckMD5, + pckUCDataConnector, + pckUSerControl_RT, + vcljpg; + +contains + UCReg in '..\Source\UCReg.pas', + UCObjSel_U in '..\Source\UCObjSel_U.pas', + UCAbout in '..\Source\UCAbout.pas', + UCIdle in '..\Source\UCIdle.pas', + UCEditorForm_U in '..\Source\UCEditorForm_U.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT.dproj b/internal/2.31RC1/1/Packages/pckUserControl_DT.dproj new file mode 100644 index 0000000..3c20e32 --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_DT.dproj @@ -0,0 +1,129 @@ + + + {a30f53db-e475-4ad9-a852-f9ebf338bf98} + pckUserControl_DT.dpk + Debug + AnyCPU + DCC32 + C:\Users\Public\Documents\RAD Studio\5.0\Bpl\pckUserControl_DT.bpl + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + ..\Lib\D12 + ..\Lib\D12 + ..\Lib\D12;$(DCC_UnitSearchPath) + ..\Lib\D12 + 00400000 + true + User Control Package 2 + ..\Lib\D12\pckUserControl_DT.bpl + true + true + 1 + true + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + + + 7.0 + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 2 + 3 + 2 + 0 + False + False + False + False + False + 1046 + 1252 + + + UserControl + UserControl 2.30 RC2 + 2.3.2.0 + pkUserControl_DT + + + + + 2.3.2.0 + www.usercontrol.net + + + WL Decision Cube Components + + + pckUserControl_DT.dpk + + + + 12 + + + + MainSource + + + + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT.res b/internal/2.31RC1/1/Packages/pckUserControl_DT.res new file mode 100644 index 0000000000000000000000000000000000000000..502e9bf5b3dc4f51014fbad662da747b4b32d2c7 GIT binary patch literal 5184 zcmbW5&1+m`6vj`QfG$KM)NUt;h-49>25~pl)7B_C;^GynG)RU_Nq-?yf&T{BMk>B$ot4M&De==I*Xzn=S3 z{a<{*NbJeti`Cp&#AV#l|a?r>Y4$kBF#rVl7 zK0OZX@#j9Ld2meajl>^+U8k5T?8JdH;?fuA+A8<5C+-H^1@VX9z@v`AA@b^bHJFm3 zBc|Xms!N>}tK+36|BQ29wDs09{}DGiswddQ!+O-OU{{J|SWCihLtK@{=&^D;klj#u zmQWMZUej_G8;Sgnn745rd@zVP;%=;yP0j;fzH5na4}L#zd*W~E#^>bQYSjUo3hd;7 zF1Rz;;=o*ciBGKfMmvwT#Ews`jjD*-ZQ59a19R%{*kfT2;3-{64>%X`TiuTxdff?BNE%>sd@4=)GVoZ(;&w=z%=c?d9j9_^E6SplK)Sv8mPP@+F;A6cX ztdm3M05&p+`a7n$!-+9mJqN<_UKF>`%ugCC_c{j-@9+d${-UNO{^T&6#!t>oeuH<6MgF3POWalAG7x9^@|u_UvqoMg@+@0$h|6m) ze%!hKo(h+Bu<_yJ1^Arzd=JG>0+$f=pSbZp#~l#ydvAb4KB`iqF*eG7O{|53#)%(# zar~Zt`EtyP+J>0oXD{y@&yn_`@1=#E@zeWJADsnX0%i*PjCucNa$o8YeaHO;$MA(e z;`jP%OuU|_O8#ZXzWZzg%lCCQ??(3WePHbKdNF?VG;x>O;a~A5zWXltfgSrzUHVsk zBmd&2wZua69RZz!&-om94aVhuBZh(>`PW>vHRB!4+{C*!sSn(SveQ|wkF@t=Ro+Q) z$j^4p%;Wo9cb$KBB*tKR|9SsuPEHW`aev{9xQN}kDRy$0vF5!H-=U^?SctD)h4|g3Xg$7U8o-FM7U*(|l*%XY`P`BldiEdC$O}aHwNUF8UAq zyjQ1jnDqPr47l|5EH*iw-m{FS9Kf1?SVI=Q3(1KZVdMAAF!823KKBZa`XRqZrp|tM zAM*q>XB|nr6ZLU?me3o-NZz;;nZwb0N$dUZa$f(Eg9Xr&r3nXmj9xp7$ks8{lYDLVoYoI7@PhAz$6ulcanYjJF7m)&-{9KVAg5zZ^>VhXOgFqgChIV$a$ZA{p^4om@Oku z&0do4*Mu<;)=-#Tcd*=DG_y@f*S%_=*++KWK9^jv8`Amof7jsG4E>(5w&uTT@GHoY zJ-=Z73rE+j%FmJ?>z{dkVM}W_?JKMF{}cOCqw9`PIo>smd465_^B?>zn;c3~4}I5c zMLN8f1*vUJ9~76UvXx`&r+|C?RD7`<72no5%2pw_Ph4o3H&R&YTJ(awmdA^ zr#gSvPm_sV<$z4ywQuD)p7lAqZCTv1uXXN$^dlkd6-%?Qy-|En5qM>;m}Pd&-gLiT z$o8SUeXkro?nMwTw>&SiHuKq;&&_4KD9=$>(8v)CfAGHzAw^wpd!^_c>bfDjJ09~@ fhra2tCG%-FnZ4zm7+Khnulus>*ZtDUA1nU?D1Vb` literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dpk b/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dpk new file mode 100644 index 0000000..a3f5ccf --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dpk @@ -0,0 +1,48 @@ +package pckUserControl_DT_D12; + +{$R *.res} +{$R '..\Source\UCReg.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'User Control Package 2'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + designide, + inet, + dbrtl, + vcldb, + VclSmp, + pckMD5, + pckUCDataConnector, + pckUSerControl_RT, + vclimg; + +contains + UCReg in '..\Source\UCReg.pas', + UCObjSel_U in '..\Source\UCObjSel_U.pas', + UCAbout in '..\Source\UCAbout.pas', + UCIdle in '..\Source\UCIdle.pas', + UCEditorForm_U in '..\Source\UCEditorForm_U.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dproj b/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dproj new file mode 100644 index 0000000..5777f02 --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.dproj @@ -0,0 +1,129 @@ + + + {a30f53db-e475-4ad9-a852-f9ebf338bf98} + pckUserControl_DT_D12.dpk + Debug + AnyCPU + DCC32 + C:\Users\Public\Documents\RAD Studio\5.0\Bpl\pckUserControl_DT.bpl + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + ..\Lib\D12 + ..\Lib\D12 + ..\Lib\D12;$(DCC_UnitSearchPath) + ..\Lib\D12 + 00400000 + true + User Control Package 2 + ..\Lib\D12\pckUserControl_DT_D12.bpl + true + true + 1 + true + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + + + 7.0 + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 2 + 3 + 2 + 0 + False + False + False + False + False + 1046 + 1252 + + + UserControl + UserControl 2.30 RC2 + 2.3.2.0 + pkUserControl_DT + + + + + 2.3.2.0 + www.usercontrol.net + + + WL Decision Cube Components + + + pckUserControl_DT_D12.dpk + + + + 12 + + + + MainSource + + + + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + diff --git a/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.res b/internal/2.31RC1/1/Packages/pckUserControl_DT_D12.res new file mode 100644 index 0000000000000000000000000000000000000000..502e9bf5b3dc4f51014fbad662da747b4b32d2c7 GIT binary patch literal 5184 zcmbW5&1+m`6vj`QfG$KM)NUt;h-49>25~pl)7B_C;^GynG)RU_Nq-?yf&T{BMk>B$ot4M&De==I*Xzn=S3 z{a<{*NbJeti`Cp&#AV#l|a?r>Y4$kBF#rVl7 zK0OZX@#j9Ld2meajl>^+U8k5T?8JdH;?fuA+A8<5C+-H^1@VX9z@v`AA@b^bHJFm3 zBc|Xms!N>}tK+36|BQ29wDs09{}DGiswddQ!+O-OU{{J|SWCihLtK@{=&^D;klj#u zmQWMZUej_G8;Sgnn745rd@zVP;%=;yP0j;fzH5na4}L#zd*W~E#^>bQYSjUo3hd;7 zF1Rz;;=o*ciBGKfMmvwT#Ews`jjD*-ZQ59a19R%{*kfT2;3-{64>%X`TiuTxdff?BNE%>sd@4=)GVoZ(;&w=z%=c?d9j9_^E6SplK)Sv8mPP@+F;A6cX ztdm3M05&p+`a7n$!-+9mJqN<_UKF>`%ugCC_c{j-@9+d${-UNO{^T&6#!t>oeuH<6MgF3POWalAG7x9^@|u_UvqoMg@+@0$h|6m) ze%!hKo(h+Bu<_yJ1^Arzd=JG>0+$f=pSbZp#~l#ydvAb4KB`iqF*eG7O{|53#)%(# zar~Zt`EtyP+J>0oXD{y@&yn_`@1=#E@zeWJADsnX0%i*PjCucNa$o8YeaHO;$MA(e z;`jP%OuU|_O8#ZXzWZzg%lCCQ??(3WePHbKdNF?VG;x>O;a~A5zWXltfgSrzUHVsk zBmd&2wZua69RZz!&-om94aVhuBZh(>`PW>vHRB!4+{C*!sSn(SveQ|wkF@t=Ro+Q) z$j^4p%;Wo9cb$KBB*tKR|9SsuPEHW`aev{9xQN}kDRy$0vF5!H-=U^?SctD)h4|g3Xg$7U8o-FM7U*(|l*%XY`P`BldiEdC$O}aHwNUF8UAq zyjQ1jnDqPr47l|5EH*iw-m{FS9Kf1?SVI=Q3(1KZVdMAAF!823KKBZa`XRqZrp|tM zAM*q>XB|nr6ZLU?me3o-NZz;;nZwb0N$dUZa$f(Eg9Xr&r3nXmj9xp7$ks8{lYDLVoYoI7@PhAz$6ulcanYjJF7m)&-{9KVAg5zZ^>VhXOgFqgChIV$a$ZA{p^4om@Oku z&0do4*Mu<;)=-#Tcd*=DG_y@f*S%_=*++KWK9^jv8`Amof7jsG4E>(5w&uTT@GHoY zJ-=Z73rE+j%FmJ?>z{dkVM}W_?JKMF{}cOCqw9`PIo>smd465_^B?>zn;c3~4}I5c zMLN8f1*vUJ9~76UvXx`&r+|C?RD7`<72no5%2pw_Ph4o3H&R&YTJ(awmdA^ zr#gSvPm_sV<$z4ywQuD)p7lAqZCTv1uXXN$^dlkd6-%?Qy-|En5qM>;m}Pd&-gLiT z$o8SUeXkro?nMwTw>&SiHuKq;&&_4KD9=$>(8v)CfAGHzAw^wpd!^_c>bfDjJ09~@ fhra2tCG%-FnZ4zm7+Khnulus>*ZtDUA1nU?D1Vb` literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Packages/pckUserControl_RT.bdsproj b/internal/2.31RC1/1/Packages/pckUserControl_RT.bdsproj new file mode 100644 index 0000000..84dc8ef --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_RT.bdsproj @@ -0,0 +1,180 @@ + + + + + + + + + + + + pckUserControl_RT.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + User Control Package 2 + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + WL Decision Cube Components + + + + + True + diff --git a/internal/2.31RC1/1/Packages/pckUserControl_RT.dpk b/internal/2.31RC1/1/Packages/pckUserControl_RT.dpk new file mode 100644 index 0000000..9c71e00 --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_RT.dpk @@ -0,0 +1,65 @@ +package pckUserControl_RT; + +{$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} +{$DESCRIPTION 'User Control Package 2'} +{$RUNONLY} +{$IMPLICITBUILD OFF} + +requires + designide, + inet, + dbrtl, + vcldb, + VclSmp, + pckMD5, + pckUCDataConnector, + vcl, + rtl, + vclx; + +contains + TrocaSenha_U in '..\Source\TrocaSenha_U.pas', + UCBase in '..\Source\UCBase.pas', + SenhaForm_U in '..\Source\SenhaForm_U.pas', + EnvMsgForm_U in '..\Source\EnvMsgForm_U.pas', + MsgRecForm_U in '..\Source\MsgRecForm_U.pas', + MsgsForm_U in '..\Source\MsgsForm_U.pas', + UCDataInfo in '..\Source\UCDataInfo.pas', + UCMessages in '..\Source\UCMessages.pas', + UserPermis_U in '..\Source\UserPermis_U.pas', + UCSettings in '..\Source\UCSettings.pas', + LoginWindow_U in '..\Source\LoginWindow_U.pas', + UcConsts_Language in '..\Source\UcConsts_Language.pas', + pUCGeral in '..\Source\pUCGeral.pas', + pUCFrame_User in '..\Source\pUCFrame_User.pas', + pUCFrame_Profile in '..\Source\pUCFrame_Profile.pas', + pUCFrame_Log in '..\Source\pUCFrame_Log.pas' {UCFrame_Log}, + pUcFrame_UserLogged in '..\Source\pUcFrame_UserLogged.pas' {UCFrame_UsersLogged}, + UCMail in '..\Source\UCMail.pas', + UCEMailForm_U in '..\Source\UCEMailForm_U.pas', + UCALSMTPClient in '..\Source\UCALSMTPClient.pas', + IncUser_U in '..\Source\IncUser_U.pas', + IncPerfil_U in '..\Source\IncPerfil_U.pas'; + +end. diff --git a/internal/2.31RC1/1/Packages/pckUserControl_RT.dproj b/internal/2.31RC1/1/Packages/pckUserControl_RT.dproj new file mode 100644 index 0000000..77b2cc9 --- /dev/null +++ b/internal/2.31RC1/1/Packages/pckUserControl_RT.dproj @@ -0,0 +1,157 @@ + + + {0e9c6372-292f-47d7-b235-70ab25776f3b} + pckUserControl_RT.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUserControl_RT.bpl + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + ..\Lib\D12 + ..\Lib\D12;$(DCC_UnitSearchPath) + ..\Lib\D12 + ..\Lib\D12 + ..\Lib\D12\pckUserControl_RT.bpl + 00400000 + User Control Package 2 + true + false + true + true + 1 + true + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + True + True + True + + + 7.0 + True + True + True + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + WL Decision Cube Components + + + pckUserControl_RT.dpk + + + + 12 + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UCFrame_Log
+
+ +
UCFrame_UsersLogged
+
+ + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ +
diff --git a/internal/2.31RC1/1/Packages/pckUserControl_RT.res b/internal/2.31RC1/1/Packages/pckUserControl_RT.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 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 Hof!TLo!+O0 literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCAppMessage.bmp b/internal/2.31RC1/1/Source/Dcr/UCAppMessage.bmp new file mode 100644 index 0000000000000000000000000000000000000000..56dc64e72efc887f38e208e4ad9f90279b276026 GIT binary patch literal 1782 zcmaKsSx}l+6vs)Y?L(*2r#^I=nbg!3Srt$ejf9w}jkq9cbPz$5MKm?3nbCGk7;W8% z4M~VWaRV1X0Z|NY5!}~k+-e%r#@Hs)OlO+uQ(y964}A8EHLZ8fy>ssO-SfNubME~< z7W=RFF`gCzV*vC|_WLo9hrx`)`{|F6?pX-K{OacH%KF&!e6M4;-DK6a8Z=EEU|OA_ zt;^KeV>R0c2VIj>OAle?5q5uasZ89G!%*{yO#)nJ4$ho|w~FuY?2F^U4LdH4YdaYPp6%nu&V51x<(xuoR#V!~i|s9JO(Hc)+X>Za;V>w)m2v3tCV-u zH?`UZoxaOr8+1<0EUy8)Fw!W(_QGNiP(Yi#NMGWK2BiFjqVSc%&;>bVQc4mfgH0Gwv3g zTKY141;~)881E4Ho5C)IN9gg9dO}n)@k~7_wk|lKg32ukjW1xdbQ+xF%Y}?y*i=rP z0x?{6cb4&Swt0syo-1OkLUy1NIOme2RAT_uhNbml=_Xuc8{ten`HNag@>N>mWx7VM zgVY=Yi$$yf&;z?iiW-^MdcumEX}PK_iWSNwA&CLE}W zQ3Zjd_>u_Ay&>QolfL3kkTvOqZbin4H;ce5KHTL z48Vk@4N&z?hzvONE2pa)4VP41#n+poD`Khb0jFAs8Je^{*BAnUF(UWIhf$>*&3v}` zS+?aF-@L;!{d}Qwo2!46(6s((TJ154D5_KgK3lsMr&(cD4G_f9ijK-dA4}3#O`oMy z3oSc&{V&A!7rA}Uh1OkO_ftSYjzPtycSFQ%^>k|ck3izO6%UAgV{G zFyOLpiTj`DJ6_6%ewR630#IPx71@4;51Hv{soEtFnQ8bby>mN72Rb*{S9O*F_c5U+ zt+bp-tP9Mlr-(J|Dx27{Exq>}K(e}@0%LD)4?zj7zd+(h%22)Y>iL@64JZU0rEc^j z*XW&Q0rTQ?_@vx8U8?6B9`TG%5YD(lfS}M34kD>_^Ky0l+`|nNxpFjc$)&u z9s7C@0#QS02nzmzs2*@;S2pBI7b(Zhfe@6iFXkWAL2YQV2RYzFrr))==wj>J5L6P1 zJ*ess2bltGaB}g@dQWlQB!$%KK*b=t|KuPK;jE#dG=#(S@Am9u$R!yNfSi?oSuH-iG`QC8hvH literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCBDEConn.bmp b/internal/2.31RC1/1/Source/Dcr/UCBDEConn.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cf1726610b762b9742226126eac1f6aea3ac13fa GIT binary patch literal 1782 zcmcK4TTmNS7yw{&M&GOtI*v2W_((ezsiaC@v`WhiGhV7~2PzVzgWPKi6etCXMA}qq zO{^h>2!U>5LVyq;n2-w%xe#*MWFcH4Af^j)Tj(Vg(ojOE{&Lz#`@rCXJOA#S|Li&6 z{=0j24}9c*Hf&>yhT|^SUw*hhwb2R-Gr)QC4zzC!gu`F|&t_m8|7mYn?VC>v4!-Da z;o5#Y11ZF{{X1OPw?iTpN?YQ0Z+(5_^j^$@@xNrehaA+|M&FAZZPAelm3TYOXj?5f zitJeA{3_!?+I(~ua)!k0tr0kjE-j3G>Ds%`PxUGubB^o`-Iu;1WorsKy0Xup0GHs> zW6q;`ddia*hHcw%h}y5gv9R)xM@>ATO6@($AMY!f+&|6Igr-vduF7G z6S}XiQ}0(==kEvCLz>MsvN`(9W|L0aYtUN>7xed8ERaH{t$z?wi_N|~M?&-rdrD@P z1 zp2XO27}rYGKrp6KdAhqjYPC`z00&-y#$)=p9*eKD9jZ1RV*k)&YFWBP zA&T;h8>_i?3>#LfNvm}R$7hU2vZG@{EF$IdX|s7yD#dj=xy3_o_8b$9AFg#` zTKwLhw?kCFqH~#|?vmtmR~N*rUQan33oh3@K}=gLcA4y+&j-#ef8a|Encg{@E}uSwJy+ff?%G%q5!Qf^GQSh`Oz(l9u_~5~MFtEDn_rbTb zd}mQu!&YmxTAj|>Kj3f@fkz)HjD+X&pTg#F8ce3Z+FIyZsImE{v7Po4(?jXs|Ix>H literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCControls.bmp b/internal/2.31RC1/1/Source/Dcr/UCControls.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b760f3a96760447069b93877aeadaba6fce2ec0e GIT binary patch literal 1782 zcma)+*;ATl6vpjMFMHLC{sRUV5L^JO0ty;LB8rIC-MB=P4z}95@1j*>)TnjC4Ny^b za6>^<2#QPGVp8jxG^Qp_E;`a$Pw&Ex~)sXUMv4gtWTz5{Z?q7fY)fGe(ngYIaPe9g(TTQUzp*QX|t&sitQq z^+vsE*|ho`I&D)o3+witSfzMam%}NF3N4_~N&lRFQob>v5ZV@q}8V`_=4qTAHgCxZGkD~p?-2Ei({=;bU z5Qf@=r9Ztwu`38M`M!*7@~A>>$BC(;N0k%q)n6$A83AInugo2o0~$ArA}HNR zVl*6$@x&{-o~>Il+d+^=rFoXwMg?;aJ(PaR!s4REVlkV|rJ4%t1d6C|BZ;o`M74yg z=k@;xK{lsX%*jKE0fQL)h#R*oH?Bd(_(4mrma)Ej;_?9N(~Sz~^~@3G8CI$@)yWZCrVG^BuAhPP+{#W1(kKno4cP2J)BaVARGy>qqlCQj2)z@ z&oZ>{GADk8oTh#YG(deNIRaIY1AB>u4U5(d;5ZxoZsQ0In;Dw3tjY67Ganw!Ts)lq z0Cl?NEJg7KjtP!M314waI^h}v$9p64Hcp3bD@}f!EZWSJAMj=`cyk|t_F(e-zUpm~ z>=Yz%MEl$t(Uf5kIR1Odw{f0Mu7%X8f+{6}#r?Fxp6KR@EcI#j)O(NwM%g@pafpx; z9#Yt{&8xmCOL+T2MEA4E9!o@*ncg@-&g)>-N>ikV$+A=6r2f%^MC@;mS?8sI0#$H8 zH!~GzHV*h4BUp|XZzl}z#)-C~``1{VCK_Mv$7`ilNPu%Q0Cn^6CI^6J^0f@*QKtGN zU2&K+y2l+@5ARr_HBOUi6r>s@J->a@umEj{HoIAy9w?@lx4)S@`Bs1N^~^f}CJgVe zdzR_Vb7a1XQZd{vk|F=e|H%QA^4V_D{QKPbk6GH+Ns>K|z{+Sf(D~B#5e?ix{0+nhnLNd6PTJN~u+ literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCDBISAMConn.bmp b/internal/2.31RC1/1/Source/Dcr/UCDBISAMConn.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c0244dab1cab99a9c828f03d549a498a9eb6099e GIT binary patch literal 1782 zcmb7^drVVz6vxqRW^V4G%d%xz{9{?bAc9mZ%EPHc91kJPPzw}gWiU;~kikH3i9kda z2#@hlETxpDrPa2yAg!gPP`X-5>4gGofMF@ft1yKLwUts}2d?WD48+}>`_1>Bd(P+g z``!Dy_v9J#4u|yv3%U=^k6)bI)}4cc4DKu5MbGs@kkywC+oHuXJN;7nl@hWn;_X8Y zBQicxnO*7m26%qVQO)gZVASOq%~x<>e!FoIbg+R^iG97ljs(6fJ9Y!z&Y>QEpMCBC z6hPU7{2xFWL3?R_AA;$tEdo`SUj5!a>D9eGR%92i7%-$mju|LX9Zt%#wM5Rj7%^Xlpf{i{#7k?vJqJEa*BD5uK%Enrf7c5T7Yi&-R(?eK)9S0kZp zVQRGDTVL|gH^C#MER+LYU6u|CvBkQC2?0<*I{X^Ue0616mKlS#zz}xMxJpbuvIFuh zSw#E$QfYsOc%V?orDCO8qw4Buy~lxQN3?5srIHnY3Pq8Ry(cL8S(18oeW2~Pj_;uq z-dMC+QIxK={?cjpEh5)z4>aaPo&f#DYj^9l3t%XTc+m7z7 z>1IJEV4)?ix)`)1(5VK01Wb0AKWK8WcMc)8G(4PKPyig~%)K8ZzOx}9Ii~9x>FKza z5C|=ovaf@d`Z+RAJAom2?kw@$9g>=#cRrpR5s`+&0VjeL=9lm0Lv_K>9We|?Uy93@ z1+IXd8q(FI5LnS(Yn+51K}-CdSpoaN(EUFLO(MopV~8|DROUJ-vpM}_xvP7vBeoKQ zrC=~jr(@+Vz?m8O15kC}d;u+agiz3mKsR=vGZ;>&2WWM`LHc*`?6kDv%a>t3-9{vs zdE!8sTN1lCv9|DFi90~%jAKv64QunkABL8-!0zCm4`l@HM=z_qcOlg`^%99*Bofrr z00&-NlU^QLMGdc1h1`^f6c(}Mcjq4)QPd-?syQ!PSy9$26d2muhg-x$ygP$*>JXh~ zsIMPWD0F_YuAXp5e~vyFM$%Bl>SupFv7@>g8y1Ylrv}5APzW*6+G_0V zoYrcm5M)fL?BH^rnM}ZWY_@*iWQc2+h^wEtz%k%x{TC@M7SmHZ>QDVpZ`1wpzP^RY z$=Shy(S~{hmpdwG>=%i&LZNAX9##aLX|pwouOrmz;&=uk?-8CpfXQK6pPKWrnhnkFXj7DRJTFv3{ z8wCO`k7u*l{>wp8@U$U-iQWQTSy{GO7Z=SY_;wa%XK1$yMPjj7D%Es#cWMypKOZSn e!t?oGq3YDg2URJ zE1ST8m4dgWr9dgAgwhwFw6*KYrG*0P0I|Ep0=+OcHhR}WDbpi&UYC7<`N5n2b8^mk z&hvXtpZnZKAMkArS$`tIz5?Uf`(w+x7ZRd{dBZkxtQUg$^M81>XHqY}5d!*U|28}F z!>H(ID(qz>nl9u+h-oB^vClOfcxi+ENsji+QK*+B(@2h{gbrBF?#Hf4Y9X&@rGtga zO*v!j9H?xL3ne)=4pZ>n3w3*+m>V%d9(ns|u#?@5n{%Xf4|4c1&pgj<`Dh2(kGdePVc(PT>~~kZw*g3Ud<&jUIj}VpOFoStIYxFaFM4}x{7$z? z1$oh-m%+MpvQ0Tq#(i_^)s{+<10iSkmJtCP4hsC?#`9p!Rg5x|XF0e=(aiR%l&%;I z`aU&S^WZQfjb;mkziN6-12zcB+2D%b>v3tWVT>6s&pNdd2#_d8zbq>@Vq;aDWgO#n z)^Z!53|0{YAwZq+X3yTz7EWa?zp4tgSb*bOT2$~WH&CO_R(iwtVTHV`sJOkhR>WeR zOfL*Y96O8KSoF^;4?;^sR=lci7>8^-MZ=1$4cT z+j;UtY_&eTe(2krGToOaG{>_QS()i9ej<~P97*NVlbP!rW-lZ9Qg}pDXk;BNvVleu z?bv@Q3^?ewjHh&ye#sN|ts^n35vMNEa6tUd+vfeui+{ z2coFgs&?gxFXl9rzg`gmkVV{ma~gwwv^C|f(h~dE-&8QpsdDp_1qEHFPRUs;6OT8p zP&j*foJysf#{&+$0+myLs2+*0GaszhA1uGntZ!Xfz)2MDoX}NQSrBAYsl-gCX%wB- z>9CHDNudCf$=n9Ruvm=t^^qK*4L{uKq_;Q|1ru=`E22j4-o8np2D>`FIDQAi+}+)v znf`u!U|`N}_tV|W2M5UM> z9re!6-kKPn>Xcy;$&|cnOsTYYcN0rX@QZ*m=L;lvIOt7|G%1!U{o@nCIE^I=Ec*cE zNAmAWeAX)O5Pi=a*Xbq=hLN6LxJ7J6k>Bs9?lTbxp4K`O5L-e$`Y{)cVfO%MEx1ae zsIK6mlJ^-FqBfgAAj~WHYH@Lq;(#+aPo&DP9~L>@uh0O*`1>p*0rhV`NIuEIaomEU zZPJb|xm+TZ27|!|IV1{B8w5;p3hcdmYr(+EijRPA$9rp@UsJABtJQsd*1@3xt1a-) gM+%j2KL1JP0jpN853H_Idyx+Hr}2o+L(8e~FDPNTEC2ui literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCFIBConn.bmp b/internal/2.31RC1/1/Source/Dcr/UCFIBConn.bmp new file mode 100644 index 0000000000000000000000000000000000000000..dc9869ba89f26c06ab5771f4db18c67074b1c1af GIT binary patch literal 1782 zcmcK4YfM{J8~|`M#!u=OKWMUKAJHf>sfvl2Cd?U3rqjjHiR*@AYk5ot3?>8Is7QT` zfeSD|D9vrxQdlW{Na<^(?OjXh?Spo#0fyZL%j3cx-O61%NrFT?fXk=cd;;HtQ`*k0Kj!aLjchAv& zoON6A@zH**Ia@QkgQfqz=#09!SXo%mS8yV0!1LAx_4y+Vc5ZGJl?qO7-+{f2yLKaK z6n-j2koqns?fs^7V3%e*+)5fMV9QUHWVfT~J>%b%)*DZjjGQP|78NpByn{?0@?}1c zc8D2um{+U!TuRUAP0j44WO67J;Y;sbN&{zQ_9js7LD8+VwKYHWW(`huRMd}^mzzqr zC>i~@ATN(!zz|hcT`Vhu^^6makAzvTwe2bwT`cWwe!V3F5I^C&JCDP93?0q0b!T1Q zoNK9WRF{>jDl3OhpH{F~7A|*6sq|{KUX@D0<$?o0f!d3H(u3r5kL_5GvXCpuq&j(ADB}{IUIbxpuF;HzuzBsAaSmc`HEYIg`Rya zBY=$lwg`aXjW-78lBGW9JkpW;lB{&L2|L`|0X&k|-7nbg2EnMNiH#>eI~u#puZI9|mK7;I1wL8R(L zaPk%kxvedQl}Ae`eV4XgpuMydh7BN;3zpK$W7NT2J4#_5xw9kuG3hVock=x`&gY(c zf9H2ke(ZiKXtzaxe;N9V5Bg)fDkw+`>*zC7-`xoA{(;-}mX}DI{qZ@{liX+-Z88}-hCEkV7N9j{=cYw9P|eU#2S9NCcXRt2xE0Vc=UQk zpqxn&8v?P~0#V{yASSvR!K(}60_AW|z0m&YQP-@sD?Z%MQRc-2%Fz_jn^Ggc zc*Xrmm87(wu&bd#z+zoV$qPoTuNHQ&=wDRF#IP$Wfb&YpOV4E<+Gj9nw~ow>8F9;C zyK*2}F?X2N|6O{%oWYQ$rM9JJM0Qxif0FZO8 z?Us=DDnbG4oVIdu>3Tl9=gOt%I(=xf<=f0s-Q`P~42Cp4ErrEBSHeXSleqK?CA*vw z74u|mXjp4-L=!Edg+>z`eWx}AILmW?0&1*FI9pU$aJ@CMYob1<)R3KxX8wy3Ctu_z zB=AyGgn4;4va%o_3t|395cyiov25Xu%+|`+tHJ={BJ8&paL7knUpZG?H2T%oRm^gE zR<=UHl@-glSw!n;J^{cZTd6KNKBLAbe;Zm<#_|VV-hArrHxJWe3=iy?p9Yx24LQJiuID9h^f73>9x1HlnoozHB3heIR zxBaM*-kuGDxP#;NzCJKVe?KuiyfixMG@I>%gT~IzyCeymRk!y`IiB3(NESO1I`CNT zL|Ti+L*DVDR&3L^k8IWOs*kjX~-`pETlcq8B}xxE)eR(h*7 zxf@UF{_8w%lExBv@3{fxL2@3Lu*@V83BE6x)aj;C^p;WuRaC(&@OV7_dM3TTe61}O zF~>GzpRuv13MFv1eOnaDpA{4;RnHKJnaw;NKRfrD%jNQOK#VMtNs`%kf%U^G4L}BG z7GV-l5A#8CC=NjoMhxrd7WGObo!#9&pKmXRLc!Mt117ZuerIRf=iS_NlW=!7)|R>T ul`@4wp;ntlEW;+V_rFUDJK_5TWQJjrRCKgXn$X{^36uG1I^R literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCIBXConn.bmp b/internal/2.31RC1/1/Source/Dcr/UCIBXConn.bmp new file mode 100644 index 0000000000000000000000000000000000000000..29ab05f4efce7025511e1c5c2564e89529fe6ee5 GIT binary patch literal 1782 zcmcK4drVtZ7yxk8WQj(NiT+_?)MylqB9rQH(P?B`LZSniN;ia!1;=wv=zuZ64MeKZ z32wZ{3c0O)0Hx3(rLUDfEPdSe@)$OhVQE<@T-c+d+_g{&`pKPj;g4zm@a8*TzH{$6 zzk7P`x!s-M+ZM5T#6o@<+LL$MeVbK8gc`2v9wpo6KuCZ5Z-?s4;R|m>xKSl!h_<&M z6r@tDU5!wW^Uil4jOOlp_P^ZxZl@#Z#b2`HK(KZ-Kvq?xx9)fV288PfK8w*-XM!+? zsX;*Ae++7ykP)ua_Rd4?yB?O(64nDN9Z4?$0oa-e`iZ9yJpSF283{{DzJ=A$fSOF;_`DtotNtGGvj(fU=1Zy* zSCy6bw6yT(^b=Vnk%;xx@@{(C=k>|SjG7v7Ua5TM@%%@&1e|nPhn-_4$B4dDF%&O% zK1El3n|n%@mnX@|?#MnC*KOVLqwI&nS&WpF5-Js(l#cy-&u-s^L{Zq06i(#3?NNJb zqJf>CvNDU(v>Zm?iR1B2+UT~CZ}O`&UmhPkmM6*0$)d9kRI-pG8LYI_%1x*8Qt9r- z=ooHf>_tj!JB7k~>Al7%a2B0cfEw%JPoFL?`<@%uGtpdFWu(z``F~NO%%hz2bar+Y zzog_`K>@611jqLA;$CamPUD};=hnVn7Xyd~ciotEz~m*|-09s8Dr+LAeb7%V zg{W)xsmn6S?D+Wd+}zDc+f1LxArQ=n`zNH*(SZTN>xEwg&VnzHDzv6?t(m=!jNYpU z*)|HD7g+HDPDLwcZkz6pBB4LxBtHD) zKsXHHB&41N)r7;KvFVh?2{r@UNa$)2PRfHgh0QtW>gd#lqX2TcJ2Ig^JeCl4Vl?zP zC4@u5&x)8{n`zDZbY%%~oAfS3>ojTvP}gv0a}eiZeNy_psBfD8Rsv+i5JQjALXM6f zlubxf+|d`yw)JKEy36YKIDGa6_cNp0H0Lm==v@sw4l59Kr7a7HIotNtsouyqLfA2C z$YIWb2=RVC6>={cHoP9c*YmU6q2N$#^V(O>J$|>pN+QMkL&XOLWW0aH^~(SJ&C3my5XRNtDo=~UlxEdlP3gIF(>|x@yI&coXHu)p zY(JOO0S*-o#&U#xFiiAC1LMAgHuTH-+UBn>w_pF}UA9-C6M4|X6^qGcoVMxIPJ;^H zQWMAlF;gKr-<1f4v#Tc_A3rIRNm#;8Q*IdsXX3sOD z5bBbM1Rrw1idsM4Ef_r2R+~DYPaArgGKk3du+5;}-h2%>jn~j_v&p~e@;MgO{4to= z|DTZE#a4zAO(_Y zJ7&!tvjLw&v1E;!0ZpY;OmG=ectkWdETEJ2Ana~c(scQB#}%gY3eyEVh%ZrX*<=gQ zc463b4y&%LYf?Qi?#+>CbeAbh1>^1_wx^i00(`;vGN1v}w`2=Yl{Sc6s%nvGX7}b0 zq)&=i?h@|m4T1NDz;~VR1#uzEeVO3|#{?5gCzvv7dOrL;gRtE~T>;&i4?QWSFO`XW zW#V-}yT)C;3NPo;>_Acmw1{qmcv4wVV^G@3ojKhEC)ANo{(whS;WFDfCFAx|-Wreu z29-^*qz@xmb$IcVGN>^q9pEXGv6HC}AE)7zslAG%R!&?+_xbzO%T#kd&3?XJe4=V7 zwX_=CnL&*~DVX!cepL=ppF3jAhIEL8cbz^2jBXbTD=X6DdmcrW7ODMh3(w5T8p`~S53uD~@%cZ~u4oVrNFrRVe87{MNC;#*0|GejUf9E;x zdCxigrDu1*_7Mj0Z8-NlI(KcmfB+R-*S?CK+l3GwJmazD+i=f0A8c*@*F4q5#H$|! z+!WDU_U*EFT?LOSxz~>F0n@VYImYLET~_UkSw;QiH5h?(@z%&wQ5XklD26h_Z|8S% zR2R=cYHGe9$vOtcSXT&9dpW}oM_v#GHM0DZ5b=KOT`iF6YjOpNhrnQ|qA1o6hZ7SF z&&7!e`4@-R`jAtd!%H}TbKs7CIBkbscY&dMWg%!B~GuZR+`L#Is~!GnoQqFw5i(y}lkX8iC_kUJ}#m{OFq6 zT)N=-x>i(PRNU3v%p#F;k_!T=(G(@3>#64 zu2Vh`DVx|!>iapZP@0}DPEF}Z$%x?C_WvsV<(p)3Y-~YvG;m@&P8_KW38w}T7=Z+4 z;7638Ppg6fJ3DTp<;825WMR&^$VN?Yo8_m>a`g}Alo{#bwA5r0{Ztv9`fVaTKCWz= zQ`Sp7+z=ev9vIe22%``PthYXH2m;Rh#7#gAcd>7m6c=4?kLa>D<(3<=v$dHIQG%qi z%!C9+N;12k;7V2&^kZ?EkFg@&s}IR$U&(B*e!n&pAWJUi-6<6MQ8iUhl$Kb3yiiN5 zlxAg1^76X#^F<_*o<(E5BfisdiZOPg#YB}M ztAE|aQA6Fr6_@KCiaL9GK+}DFuED`Mt990FcItFSE_c=K2F@Li_j@UtB%DqXOeb*A zXu3U>qFi&|!%+*4@f%X{)X2!n%*^80=%i49a=DYDZo5Qc?dfqZFT)c7XU^k|K#AjV98&#{vwb~oGa*VjF6_;ywn x=jlz=5}8bPnZ<+nNSfLUk3cf@JRV1HAR2qd= zuQtvZt#<3;BUp(R?qa9M$5+VC^q!-%F0jVK_r5S_L>T z4b;G90i*jvpJHUuW72+&N*To^2*V*sq#-oi@HNjD{kM(UWdNXk%u7po0~w@2*whhd zON{DZg#O1aSSIp>(1cKOPY) zJVd>Av5?ZUmql?pi6OaGXNe=RXX`jqS<*()o*QkQ$dHhuh?->|ovR6_WvklE{R@X9C zf@NfuC7NKBHuZuwwE?wA>@S#H2e(rbPa#-Z(-2oA!K$!K6XGtFzATr&Dwn^83btJ(^|pHE9n=ct8*l@wUqpULl{4lmZf01V z578vh{_v>yRiPH&aTUcok@W4YX?l-9emW-C^UW>~ZC3h9ed z-g32ctwF!tVE6=XHR|`L6>mzAO^8I{tx~&r8j}UB!s6R%S8A^!xkL2x6%Mg^ByV7* zR=HWH`2dliQH5fE?u4(PgJYPtVYO)Hp2n8NG?RxPcBT)SNOTEPIQ_3D dFv!s4S{a=6HcCBJTxT6;jxIFntb4uVp8@aYSReoZ literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCMain.bmp b/internal/2.31RC1/1/Source/Dcr/UCMain.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a9104008dccf973798406694a7ed5812e4dacfed GIT binary patch literal 1782 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 Oe_Z@_8eq9{AK zA-Fz=CBSf>xZblSeqgLFC$X#1Oc&zyUI_k8AizH@&+zu@0Lb+~@;5FKHD z{?Gj6I&*NCgZHM-tn>OHgr$vl*0Hemc5dm1@o9r%bYf7c>6a>n5;;V%LM_#dD#s>9 z^wWC7ykY4Locy=yX0o`xB~;2Ysxn#m;eokS>T{xRu_vXBKq<$QO7Y|(f^UI0HHY*d z%a6ffurs3yD$3Q`NvOIBfxJT_2+JX|3h^OakDwRs51L)6tr*`QBfUi^ zav$2S9YbrfpqM52$Q)04I(a~@vf)IQ(ZY-I534OoKn78W@{}TRDkt}0M~`7gywd55 zAtafPrnX@M8{9%FJy_2PL78Om(1w#(_Xxz$>)iZXv2fl~f&>Cahd@u?Lr>qwY7scK z69}X9xCHR97D>f;W-i0NFYZuHFxMln!4<6V?ni+VtPX+FIWhI&$T=s}>^;{p1VQEu z&4O=1b#5W0xNn;a=ihAD=$TnriKq_(C&3x8#Y5wSp15Bwue`dt((O-SCQ;Z41YY4x z5~83r`b)QnYNmG1Xalh>6~+lhvmcma)kEo~%*@W3OeUkzSg0<+3?m3~XOh68C%hq8 zHKo55V%;2DFvj=A5_{3OerI-3R#c6Y{+)(aE)DtSrQ;KfM;n6J;hM?Mo?KY`4~X^E z!us2m@gD!WlF+X8u-qGERQwDP@>t11lz0!c0V;^MkXu?czq)B(cymX;xRx-ulcYLH(VV6Z z{{k^dbqq8>eJS1pRbf3_T475D&DCbygh0-pTuo7*q>Y?C9sl@r{32uQBjm~IlLYw( zXcHU@=f4Mz*=**C%~`ePUw?zt3``qNi*_wZwjVE8O_l9%CN4O-OQ1a&IeV-;j*}jO zB$i+sID5zDpd_;c_K)r%^Phj+!f6^=4yaQ4mWq7}x~X~X5%t4qs>AfrbC3i^MGfwS z_gVUS(QAQN$LZNEoUTz*FmEQb?R8kYDYVr{s~sk1w=gOt36kA-=^>+D=bhIJ94le_ z$U=M8bPET3j_jO|7OuyLHlqY<5#7rnuMAYK%!||LS0W~s$%rLGz&XD(LpeMk22jwQ zjX$s~k}anw_EJ>`$@1N}fh~5=N^r{@wRVhDAtzNRXgNIK+#CP_ls#u`e*No_gJ=4S zuf|US7$e$Xw$Ib*b!4uRQX=9Br1t;hyHJYPoB31cSyPv3nxi=J7OQiS-Z)9)N_hS1 hyKdlJsLADxM(t*{Y(0g)nBG0j?bnYR{^uJ9)ZfbOFa7`k literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCXp.bmp b/internal/2.31RC1/1/Source/Dcr/UCXp.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a7de19c411139b9c51e4675de36e8963a83bcf0e GIT binary patch literal 1782 zcmai!c}&x17{{$Roy)ShWLx-SZrQR;P!JeU$T&KvS`HBe%6%W>n9S(}D#}@r%TjCu za!POL@oOm*dT^9tX*nhZsxVFwoPxwH#AHmOd-qP4rl~di<@Y}MzR&OZe)7CeetEqE z{@lCk<%5RN3NFk47V4$iwQCT5SHJgay)1-bWb%&jtC^S{92xKFS0NHvn^4T+2^m}g zj2xtcCzc4iWnGGXg=$ze@(ZjqHX5{6r)LNS8Kpml5Q2Sju-H6zuY6Zbkqf36?NNyK zyzJt2(G8pJ@kK-DZtnEKk*6Q%b`B_3q02ycB^t!^pltV$OXyQXC%;O^6W1NEb#{+x zN*}f{pD6n`#mM@ZL@AAF*&x}&7`0Swex?T&(;!DPYr;t`i^3CJ0*jp?M4h{~dttn>XQv72$&O(I?CP?Zm6m z&YfZ7$~)pLvIe!epqmC7Eg+vfwyxYGj-6I^@w+7W`fS?ixDWD>CI~YBqQq_)+`5@$j%976)Zn)~0*ED^` zsDZJuP?8^x3=ehGjcwy3wzidhT`ah=wY4?c-nk}~+!qN{ZOV3u-nZ#0ijr)h%HRK_ zaqmv+$HE+A4%Eny%>TMK9L}qLFwK|&rBba{+Z6wm(XxKJ>hXb?$DiV47exrFECwaM zuy2w4_A>@bQ)I${+iuNJTx*Q`Oxz!t75By=fQN~Oai;(w)Z*@mhgKI zlqaH?S#Rk|-`QbVtke)>?AK8m-88kQFjc#9zZeM~is%;^hJzu8;7dpTRDhMKN(>Poci`i`sZz7I=F9BIe zK<>i`bqseYlCuDNJKcKMkD|#bEFHc*W!7s*Dzp>vZF5PYwG{D#)Xv{vOcJd^8bn2K z7T_6!TJ$lwdT*z6tfh55%(eHLFrm-H$P7PF$JYxH=j z(5sO1-Nj~XZha`JGflLdE_no7f`f`|TL^B|hZi=>2i0cnhGdgO9Y7ffym2e2UL9CB zgsbTEJWut%!j0$7$MKf^NpiQ`n}O*BcxM_cW(AycSmSUMLl@1Qilk43HjkdFRbh$z zZ?nkW1swMxzI#D?UU|)%E>&aZW&UUivXClTN*2t=vi10uu>k5IwxZjkMBq_^;Ib)Q zy#vPeZ_?evy0cwNKPfhT=y?Ev(ag!y^}{%l+> x;(M_ieMqC$m)wgZaw)8i|NR3^n7yNuWa-p-zAlBPO>gcevJ^cktx1jX_8&r)ZHfQ@ literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UCZEOSConn.bmp b/internal/2.31RC1/1/Source/Dcr/UCZEOSConn.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7452700b844e8f866074806fe01829881fb16eed GIT binary patch literal 1782 zcmb7^drVtZ9LL$z#eb%W#;BQD;y-8{GO2@2<1|bbG;`C%(2c+ZaXiQ5IT^5x2G<$H zR#INI6l}XbfKq4~rLVQnuIr1I@@fE~yI^@-7!L=fh0=mQxmXuMmU;6#zkGk^{Lbh8 z&OPVc6Q^DK0=Awo@NYwVZM*H+QUL*-Fs^+8Yg>unHlN~g&76qeD%@1AO;5^{e$O6rQ96^EW{Fwl)P!{J;=Nr z`8rHQR07bQgm_lOE3A{R+7*ou_OeRBi_=c-%CXQ0Fxtl^dDq+^8lw(D+PJ0_w4p4Q zd-_fKv3)arI?!h74d_%|i`kVkH*AGb;kO@R9MH5Qdk|H#pF=yccXPw1Cuc+d@1MLl z*`?Z*v$?s!Idu?{mnQ5mm;L!0c6t4nTIA={9DNSM^6^0nqy4^h&#oM_N86Sf0kitK zW#EB1uDRpTNkD5$(%GLKV1&P9Ypj5;LZ z$)8+in#b2X+pDv6h*Bd%o@|tx`4{P}RC*nxK><#ulWnp`8K#dGHPFhbtcnVg(Fh#Z z(xQY_{sgdeMJ!$7Zf&AsXQVvJ1H-aVLMdVM2!8eJSvJ#A_3*0Oz~gm6pOS(BJ3V4!=EiC`^w#XlkyV=DTI-J)#p>@bt1hKUQd5$MtaAhw zBR+u@8$;OQ5boxms081-di761_5Vw><>WoHuE1`FDxkGhBpsZ=M)>V zva}ihphSrmIdO69TYXYM$tzI;%ILNo9yU7ySiq2dZsNFhfZe{2v(d<;LN!^=`tj- zbuv*j8P|m1S%WEcD!22IAN9~a(kGKl^!G1MO)U%$jkk&rfnZ$RHYk<$w6{B#mS9D| znQ?hygtl0&EwKejX!-Lzdk9D5c~)J3ax-$ajepZD7V>@~45`&4T5X@=E}SA#eu3NV z#;yi%oF4DhPCK4q!PlC;rkf&23gGy>>ln&k6&zITJi|nj#lmKDvT}b|TwL^XKy=SK z6T}ZL@NB0jDuC!lr=Sy1|JB3D!8j<28cn9A7GaxMENE%*dcBWxFcf@kFkoUs;5RmW zUeDT^%L#X9d101SO_s{#a;4JTZS68!JpW!&$b@zMFEezRJ2e{5`nvyJnDGBMo>J_X H?hpS4V$rZN literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/UODACConn.bmp b/internal/2.31RC1/1/Source/Dcr/UODACConn.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4ed6161f20af38c565c714e0fe6c1f40c8ad4ec3 GIT binary patch literal 1782 zcmbW1T}+!*7{}|4cY5QE$r3NoC^Bgx-lz$42^YHQV(296#Nhax6FQg-5NUAL=qxUU z0oe*^YfE8m>BlJjqLkLIv@iW)tO3OC1y}c`Ueqp)a!9GguFF+2PM#F(x z@DcI zffUlv2!RF&2-KCb{^{T>2s}WelY+qUZw`W^EYfK$IQ2h7G#0~MPXC=$_$F*-BZU2T z+m7QMw`gRRn{p7h9HS@&^W%rB8!HP#o;!{HNuhggGag5%fJI%Nmwj;XF4djkYdZPe zPzGI*NJLBo^PNlYH1%C;?G&}O5iS>SqHAHDsP%yO&FX1diGISue*V(VURQW<$fEfySXUAQn&(UYPm1mqi#IgKPe$h}-p(`ux zEj^nn54`=0;pfjw_yq;E3}0X*l{+YP@fk^Bp}4d}R$F_estWewqdXr; zbKh(`%#vNH>}h$6mkp3G6}mr9!hS|NT4tLX{oj7atGjHdV(DvY1}-~d+k+n7WN5Hukjh|8lm_31FC0V5W>of5bogYxPT4(I`+omCSinw+4vE5e#IFWeb;z*Do@G!cFPx-`At_e6#5?cs` zcLfhBdY<9zgvTQmOIS7Egu`K2!a&!@yBsOf-aRc1e8?LHh~v*iNCE2EegxHsLs68A zAmmEbfL5zeDieuB5|iS91{7Rv2oNX*^V6qK67kK=XawG!^#{wMjuySqXf&JMUf-D8 l6W@JFp%V7CNId&);19@wBCQ=S{{}d@Sd9Px literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/Dcr/make.bat b/internal/2.31RC1/1/Source/Dcr/make.bat new file mode 100644 index 0000000..47515b0 --- /dev/null +++ b/internal/2.31RC1/1/Source/Dcr/make.bat @@ -0,0 +1 @@ +brc32 -foUCReg.dcr -r -t UCReg.rc \ No newline at end of file diff --git a/internal/2.31RC1/1/Source/EnvMsgForm_U.dfm b/internal/2.31RC1/1/Source/EnvMsgForm_U.dfm new file mode 100644 index 0000000..3fd2c8f --- /dev/null +++ b/internal/2.31RC1/1/Source/EnvMsgForm_U.dfm @@ -0,0 +1,343 @@ +object EnvMsgForm: TEnvMsgForm + Left = 304 + Top = 204 + BorderStyle = bsDialog + Caption = 'Mensagem' + ClientHeight = 364 + ClientWidth = 377 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 377 + Height = 35 + Align = alTop + BevelOuter = bvLowered + Color = clWhite + TabOrder = 0 + object lbTitulo: TLabel + Left = 48 + Top = 10 + Width = 205 + Height = 18 + Caption = 'Enviar Nova Mensagem' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 8 + Top = 4 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300694731006947 + 3100694731006947310069473100694731006947310069473100694731006947 + 3100694731006947310069473100694731006947310069473100694731006947 + 310069473100694731006947310069473100694731006947310069473100FFFF + FF00FFFFFF00C7B2A300DBC9BF00B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A2930069473100FFFFFF00FFFFFF00C7B2A300B7A29300DFD0 + C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0 + C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0 + C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700CE99970069473100FFFF + FF00FFFFFF00C7B2A300DBC9BF00B7A29300E4D7CF00E4D7CF00E4D7CF00E4D7 + CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7 + CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7 + CF00B7A29300B7A2930069473100FFFFFF00FFFFFF00C7B2A300DECEC500DECE + C500B7A29300E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DE + D700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DE + D700E9DED700E9DED700E9DED700B7A29300DECEC500B7A2930069473100FFFF + FF00FFFFFF00C7B2A300E2D4CC00E2D4CC00E2D4CC00B7A29300EDE4DF00EDE4 + DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4 + DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A29300E2D4 + CC00E2D4CC00B7A2930069473100FFFFFF00FFFFFF00C7B2A300E6D9D200E6D9 + D200E6D9D200E6D9D200B7A29300F0E9E500F0E9E500F0E9E500F0E9E500F0E9 + E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9 + E500F0E9E500B7A29300E6D9D200E6D9D200E6D9D200B7A2930069473100FFFF + FF00FFFFFF00C7B2A300EADFD900EADFD900EADFD900EADFD900EADFD900B7A2 + 9300F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EF + EC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00B7A29300EADFD900EADFD900EADF + D900EADFD900B7A2930069473100FFFFFF00FFFFFF00C7B2A300EDE4DF00EDE4 + DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A29300F8F4F200F8F4F200F8F4 + F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200B7A2 + 9300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A2930069473100FFFF + FF00FFFFFF00C7B2A300F0E8E400F0E8E400F0E8E400F0E8E400F0E8E400F0E8 + E400B7A29300B7A29300FCFAF900FCFAF900FCFAF900FCFAF900FCFAF900FCFA + F900FCFAF900FCFAF900B7A29300B7A29300F0E8E400F0E8E400F0E8E400F0E8 + E400F0E8E400B7A2930069473100FFFFFF00FFFFFF00C7B2A300F3EDE900F3ED + E900F3EDE900F3EDE900F3EDE900B7A29300DDC5C200DDC5C200B7A29300DDC5 + C200FFFFFF00FFFFFF00FFFFFF00FFFFFF00DDC5C200B7A29300DDC5C200DDC5 + C200B7A29300F3EDE900F3EDE900F3EDE900F3EDE900B7A2930069473100FFFF + FF00FFFFFF00C7B2A300F6F1EF00F6F1EF00F6F1EF00F6F1EF00B7A29300DDC5 + C200FBF9F700F7F4F100DDC5C200C7B2A300B7A29300B7A29300B7A29300B7A2 + 9300C7B2A300DDC5C200DCCBC100DBC9BF00DDC5C200B7A29300F6F1EF00F6F1 + EF00F6F1EF00B7A2930069473100FFFFFF00FFFFFF00C7B2A300F9F6F400F9F6 + F400F9F6F400B7A29300DDC5C200FFFFFF00FEFDFC00FBF9F700F7F4F100EEE0 + E000EEE0E000EEE0E000EEE0E000EEE0E000EEE0E000E4D7CF00E1D2C900DECD + C400DBC9BF00DDC5C200B7A29300F9F6F400F9F6F400B7A2930069473100FFFF + FF00FFFFFF00C7B2A300FCFBFA00FCFBFA00B7A29300C8B3A400FFFFFF00FFFF + FF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300DECDC400DBC9BF00D2C0B300B7A2 + 9300FCFBFA00B7A2930069473100FFFFFF00FFFFFF00C7B2A300FFFFFF00B8A3 + 9400DDC5C200C8B3A400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFB + F900F9F6F400F6F2EF00F3EDE900F0E8E400EDE4DF00EAE0D900E7DBD400E4D7 + CF00E1D2C900DECDC400D2BFB200DDC5C200B7A29300FFFFFF0069473100FFFF + FF00FFFFFF00C7B2A300B7A29300DDC5C20027A5E900C8B3A400FFFFFF00FFFF + FF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300E4D7CF00E1D2C900D1BEB10027A5 + E900DDC5C200B7A2930069473100FFFFFF00FFFFFF00C7B2A300DDC5C20027A5 + E90027A5E900C8B3A400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FCFBF900F9F6F400F6F2EF00F3EDE900F0E8E400EDE4DF00EAE0 + D900E7DBD400E4D7CF00D1BEB10027A5E90027A5E900B7A2930069473100FFFF + FF00FFFFFF00FFFFFF00C7B2A300DDC5C20047B6FF00C8B3A400FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFBF900F9F6 + F400F6F2EF00F3EDE900F0E8E400EDE4DF00EAE0D900E7DBD400D0BDB00047B6 + FF00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2 + A300DDC5C200C8B3A400C8B3A400C8B3A400C8B3A400C8B3A400C8B3A400C9B4 + A500C9B5A600CAB6A700CBB6A800CBB7A900CCB8AA00CCB9AB00CDB9AB00CEBA + AC00CEBBAD00CFBBAE00CFBCAF00BCA7980069473100FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DDC5C200DBF3FA00DBF3 + FA00DBF3FA00D4F0FA00C7EBFB00B9E5FB00ACDFFB009ED9FC0091D4FC0082CE + FD0073C8FD0064C2FE0055BCFE0047B6FF0047B6FF0047B6FF00BBA697007353 + 3E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00C7B2A300EEE0E000DBF3FA00DBF3FA00DBF3FA00D4F0FA00C7EB + FB00B9E5FB00B2E2FB00A5DCFC0097D6FC0089D1FC007BCBFD006CC5FD005DBF + FE004EB9FE00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300EEE0 + E000DBF3FA00DBF3FA00DBF3FA00DBF3FA00CDEDFA00C0E8FB00B2E2FB00A5DC + FC0097D6FC0089D1FC007BCBFD006CC5FD00B7A2930069473100FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C7B2A300EEE0E000DBF3FA00DBF3FA00DBF3 + FA00DBF3FA00CDEDFA00C0E8FB00B2E2FB00A5DCFC0097D6FC0089D1FC00B7A2 + 930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00C7B2A300EEE0E000DBF3FA00DBF3FA00DBF3FA00DBF3FA00CDEDFA00C0E8 + FB00B2E2FB00A5DCFC00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300EEE0E000EEE0 + E000EEE0E000EEE0E000EEE0E000EEE0E000DDC5C200B7A2930069473100FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C7B2A300C7B2A300C7B2A300C7B2A300C7B2A300C7B2 + A300C7B2A300C7B2A300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + end + object gbPara: TGroupBox + Left = 8 + Top = 40 + Width = 361 + Height = 81 + Caption = 'Para' + TabOrder = 1 + object rbUsuario: TRadioButton + Left = 40 + Top = 24 + Width = 80 + Height = 17 + Caption = 'Usu'#225'rio :' + Checked = True + TabOrder = 0 + TabStop = True + OnClick = rbUsuarioClick + end + object rbTodos: TRadioButton + Left = 40 + Top = 56 + Width = 113 + Height = 17 + Caption = 'Todos' + TabOrder = 1 + OnClick = rbUsuarioClick + end + object dbUsuario: TDBLookupComboBox + Left = 120 + Top = 18 + Width = 217 + Height = 21 + BevelEdges = [] + BevelInner = bvNone + BevelOuter = bvNone + KeyField = 'IdUser' + ListField = 'Nome' + ListSource = DataSource1 + TabOrder = 2 + OnCloseUp = dbUsuarioCloseUp + end + end + object gbMensagem: TGroupBox + Left = 8 + Top = 128 + Width = 361 + Height = 201 + Caption = 'Mensagem' + TabOrder = 2 + object lbAssunto: TLabel + Left = 24 + Top = 24 + Width = 38 + Height = 13 + Caption = 'Assunto' + end + object lbMensagem: TLabel + Left = 24 + Top = 72 + Width = 52 + Height = 13 + Caption = 'Mensagem' + end + object EditAssunto: TEdit + Left = 24 + Top = 40 + Width = 313 + Height = 21 + MaxLength = 50 + TabOrder = 0 + end + object MemoMsg: TMemo + Left = 24 + Top = 88 + Width = 313 + Height = 97 + MaxLength = 255 + ScrollBars = ssBoth + TabOrder = 1 + end + end + object btEnvia: TBitBtn + Left = 93 + Top = 336 + Width = 79 + Height = 25 + Caption = '&Enviar' + TabOrder = 3 + OnClick = btEnviaClick + Glyph.Data = { + 42040000424D4204000000000000420000002800000020000000100000000100 + 1000030000000004000000000000000000000000000000000000007C0000E003 + 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C45261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C94521F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C4526862645261F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C9452D65A94521F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C673286268626862645261F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7CD65AD65AD65AD65A94521F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C45268626C62A862E862645261F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C9452D65AF75ED65AD65A94521F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C47328626C62A252E252EC62A8822C62A1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7CB556D65AF75EB556B556F75ED65AF75E1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C4526C62A252E1F7C1F7C252EC62A45261F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C9452F75EB5561F7C1F7CB556F75E94521F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C252E1F7C1F7C1F7C1F7C252EC62A45261F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7CB5561F7C1F7C1F7C1F7CB556F75E94521F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252EC62AC62A1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556F75EF75E1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E8626 + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E + 86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556 + D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 252E86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + B556D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C252E1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7CB5561F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C} + NumGlyphs = 2 + end + object btCancela: TBitBtn + Left = 205 + Top = 336 + Width = 79 + Height = 25 + Cancel = True + Caption = 'Cancelar' + TabOrder = 4 + OnClick = btCancelaClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + object DataSource1: TDataSource + Left = 144 + Top = 96 + end +end diff --git a/internal/2.31RC1/1/Source/EnvMsgForm_U.pas b/internal/2.31RC1/1/Source/EnvMsgForm_U.pas new file mode 100644 index 0000000..a915610 --- /dev/null +++ b/internal/2.31RC1/1/Source/EnvMsgForm_U.pas @@ -0,0 +1,116 @@ +unit EnvMsgForm_U; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5_UP} + Variants, +{$ENDIF} + Buttons, + Classes, + Controls, + DB, + DBCtrls, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Messages, + StdCtrls, + SysUtils, + UCBase, + Windows; + +type + TEnvMsgForm = class(TForm) + Panel1: TPanel; + lbTitulo: TLabel; + Image1: TImage; + gbPara: TGroupBox; + rbUsuario: TRadioButton; + rbTodos: TRadioButton; + dbUsuario: TDBLookupComboBox; + gbMensagem: TGroupBox; + lbAssunto: TLabel; + lbMensagem: TLabel; + EditAssunto: TEdit; + MemoMsg: TMemo; + btEnvia: TBitBtn; + btCancela: TBitBtn; + DataSource1: TDataSource; + procedure btCancelaClick(Sender: TObject); + procedure dbUsuarioCloseUp(Sender: TObject); + procedure rbUsuarioClick(Sender: TObject); + procedure btEnviaClick(Sender: TObject); + procedure FormCreate(Sender: TObject); //added by fduenas + private + { Private declarations } + public + { Public declarations } + end; + +var + EnvMsgForm: TEnvMsgForm; + +implementation + +uses + MsgsForm_U, + UCMessages; + +{$R *.dfm} + +procedure TEnvMsgForm.btCancelaClick(Sender: TObject); +begin + Close; +end; + +procedure TEnvMsgForm.dbUsuarioCloseUp(Sender: TObject); +begin + if dbUsuario.KeyValue <> null then + rbUsuario.Checked := True; +end; + +procedure TEnvMsgForm.rbUsuarioClick(Sender: TObject); +begin + if not rbUsuario.Checked then + dbUsuario.KeyValue := null; +end; + +procedure TEnvMsgForm.btEnviaClick(Sender: TObject); +begin + if rbUsuario.Checked then + TUCApplicationMessage(MsgsForm.Owner).SendAppMessage(MsgsForm.DSUsuarios.FieldByName('IdUser').AsInteger, EditAssunto.Text, MemoMsg.Text) + else + with MsgsForm.DSUsuarios do + begin + First; + while not EOF do + begin + TUCApplicationMessage(MsgsForm.Owner).SendAppMessage(FieldByName('IdUser').AsInteger, EditAssunto.Text, MemoMsg.Text); + Next; + end; + end; + Close; +end; + +procedure TEnvMsgForm.FormCreate(Sender: TObject); +begin + with TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages do + begin + Self.Caption := MsgSend_WindowCaption; + lbTitulo.Caption := MsgSend_Title; + gbpara.Caption := MsgSend_GroupTo; + rbUsuario.Caption := MsgSend_RadioUser; + rbTodos.Caption := MsgSend_RadioAll; + gbMensagem.Caption := MsgSend_GroupMessage; + lbAssunto.Caption := MsgSend_LabelSubject; + lbMensagem.Caption := MsgSend_LabelMessageText; + btCancela.Caption := MsgSend_BtCancel; + btEnvia.Caption := MsgSend_BtSend; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Source/IncPerfil_U.dfm b/internal/2.31RC1/1/Source/IncPerfil_U.dfm new file mode 100644 index 0000000..843b1a7 --- /dev/null +++ b/internal/2.31RC1/1/Source/IncPerfil_U.dfm @@ -0,0 +1,307 @@ +object frmIncluirPerfil: TfrmIncluirPerfil + Left = 232 + Top = 319 + BorderStyle = bsDialog + Caption = 'Perfil de Usu'#225'rios' + ClientHeight = 132 + ClientWidth = 434 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 434 + Height = 35 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 1 + object LbDescricao: TLabel + Left = 45 + Top = 10 + Width = 132 + Height = 18 + Caption = 'Adicionar Perfil' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 8 + Top = 4 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00AB937F00755944007559440075594400755A4500755A4500755A4600775B + 4700775C4700785C4700785C4700795D48007A5D49007B5E49007C5F4A007C60 + 4A007D604B007E614C007E614C00795B4500FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00AB937F00755D4C00795E4B007A5F4C007A5F + 4C007C624F007F6351008266530085695500886C59008B705B008B705B008E72 + 5E009176610094786500987C67009B7E6A009D806D009F836E00A0836E009979 + 63005E412D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007259 + 47007F624D0080634F00836652008366520085695500896C58008C6F5A009073 + 5E0093776200977B6600977B66009A7E69009F826D00A2867100A6897400A98C + 7800AC8F7A00B1937F00B7998200997962005D402C00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00A089790097827300826A5800826A5800826A5800826A + 5800826A5800826A5800826A5800826A5800826A5800826A5800826A5800826A + 5800826A5800826A5800826A5800826A5800826A5800826A5800B2947E009979 + 62005E412D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAFA400F7EB + E500FEF7F200FFF7F300FFF3ED00FFF3ED00FFEEE500FFEADE00FEE4D600FDE0 + CF00FEDDCB00FEDCC800FEDCC800FFD9C300FFD6BF00FFD4BB00FFD0B500FFCF + B300FEC7A800DAA88B00B79279009D7C65005F422E00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C4B5AB00E7DBD200FFF5F000FFF5F000FFF5EF00FFF5 + EF00357821000060000000600000006000000060000000600000006000000060 + 00000060000000600000FFD5BC00FFD2B700FECCAF00F6BF9E00C09D8600A07E + 660060432F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F0EE00BFAF + A400FFF6F200FFF6F200FFF5F000357821003A6D23003A6D2300347A20002F85 + 1E002C8C1D002B8E1D002C8A1D0030821F00367721003C69240000600000FFD5 + BC00FFD0B600FDC9AB00C29C880092735E0061453100FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEF9FA00FFFAF800FFF8F5003578 + 21003A6D2300357821002E871E0028941C001A8E130013850E00249919002A90 + 1C0030821F003773220000600000FFD6BF00FFD4BC00FFD1B600C4A089009574 + 5F0063463200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEF9FA00FFFBF900FFF9F6006DAB6D0035782100327F1F002A901C001F99 + 16000A7A080008770700189C1200249C1A002C8B1D00347A200000780000FFDC + C900FFD8C300FFD6BD00C6A08B009C7A640064483300FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEF9FA00FFFCFB00FFFAF800B8D8 + B8003578210030821F0027941A0010850D00218120006DAB6D00138D110022A2 + 19002A8F1C0000600000FFE2D200FFE0CF00FFDDC900FFD9C300C9A38E00A581 + 6A0066493500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEFBFD00FFFDFC00FFFBFA00FFFBFA006DAB6D003578210026911B00157D + 1300BAD7B900C6DEC600327F34002096170000600000FFE9DD00FFE6D800FFE4 + D400FFE0CE00FFDCC900CDA59000AE887200684B3700FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFCFA00FFFC + FA00FFFBFA006DAB6D0035782100006890000068900000689000006890002361 + 4C00FFEDE400FFECE100FFE9DD00FFE6D800FFE3D300FFDFCD00CEA89300B68E + 7700694D3800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEFBFD00FFFDFC00FFFCFB00FFFCFB00FFFCFB00FFFBFA00006890004293 + D1004193D0003F90CE003C8CCA0000689000FFEFE600FFECE300FFEADE00FFE8 + DB00FFE5D700FFE3D200D3AB9600BC927C006B4E3A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD + FC00FFFCFB00007FB4004899D400499BD800499AD7004697D5004293D1003D8E + CB00007FB400FFEDE300FFEBDF00FFEADD00FFE8DB00FFE5D700D6AE9900C197 + 80006D503C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC00006890004EA0DD0051A2 + DF005CA9DD004C9EDB004899D6004192D00000689000FFEFE500FFECE100FFEC + E000FFEBDF00FFE8DA00DBAF9A00C79C85006E513E00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD + FC00FFFDFC000068900055A7E2005CA9DD006DB9EB005CA9DD004B9DDA004596 + D30000689000FFF2EA00FFEFE500FFEDE300FFECE100FFEADE00DCB49D00CCA0 + 8A006F533F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC0000689000427EA400427E + A4005CA9DD0055A7E3004D9FDC004798D50000689000FFF6F000FFF3EC00FFF1 + E900FFEFE600FFEDE200DFB5A000D2A48E0071544000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD + FC00FFFDFC00007FB400427EA400427EA400427EA400427EA4004998D200427E + A400007FB400FFF7F400FFF6F100FFF4EE00FFF1EA00FFEEE500E1B9A200D6A8 + 910072554200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFDFC0000689000427E + A400427EA400427EA400427EA40000689000FFFAF800FFF9F600FFF7F400FFF5 + F000FFF3ED00FFF1E800E5B9A400DAAB940073574300FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD + FC00FFFDFC00FFFDFC00FFFDFC00007FB4000068900000689000007FB400FFFA + F800FFF9F600FFF7F400FFF6F100FFF4EE00FFF1EA00FFEEE500E1B9A200D6A8 + 910072554200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF + A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFD + FC00FFFCFC00FFFCFB00FFFCFB00FFFBFA00FFFAF800FFF9F600FFF7F400FFF5 + F000FFF3ED00FFF1E800E5B9A400DAAB940073574300FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400BFAFA400BFAFA400BFAFA400BFAF + A400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAF + A400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400C19C + 8B005D524D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0041B4 + F30041B4F30041B4F30041B4F30041B4F30041B3F30041B1F30040AEF2003FAB + F1003EA8F0003EA6F0003EA6F0003EA3F0003DA0EF003D9DEE003C9AED003C98 + ED003C98ED003C98ED00227BD2005B6674004F545A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0041B4F300BEE5FB00BEE5FB00BEE5FB00BEE5 + FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5 + FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00227BD2005B66 + 74004F545A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0041B4 + F300BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5 + FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5 + FB00BEE5FB00BEE5FB00227BD2005B6674004F545A00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF0041B4F30041B4F30041B4F30041B4F30041B4 + F30041B4F30041B4F30041B4F30041B4F30041B2F30040AFF20040AFF2003FAC + F1003FAAF1003EA7F0003EA4F0003EA2F0003D9FEF003C9CEE00227BD2005B66 + 74004F545A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + end + object Panel3: TPanel + Left = 337 + Top = 35 + Width = 97 + Height = 97 + Align = alRight + BevelOuter = bvNone + TabOrder = 2 + object btGravar: TBitBtn + Left = 8 + Top = 17 + Width = 81 + Height = 25 + Caption = '&Gravar' + TabOrder = 0 + OnClick = btGravarClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42 + 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969 + 6969696969696969696969696969696969696969696969696969FF00FFCE726F + D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443 + 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2 + D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F + D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747 + 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF + FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F + DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50 + 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF + FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F + E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459 + 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C + 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F + EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62 + 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE + AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F + F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B + 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8 + B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F + F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863 + 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E + 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F + F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA + BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA + EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F + F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD + C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1 + F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3 + C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6 + F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9 + CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB + FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF + D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4 + DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA + E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F + CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72 + 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A + 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A} + NumGlyphs = 2 + end + object btCancela: TBitBtn + Left = 8 + Top = 57 + Width = 81 + Height = 25 + Caption = '&Cancelar' + TabOrder = 1 + OnClick = btCancelaClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + end + object Panel2: TPanel + Left = 0 + Top = 35 + Width = 337 + Height = 97 + Align = alClient + BevelInner = bvRaised + BevelOuter = bvLowered + TabOrder = 0 + object lbNome: TLabel + Left = 15 + Top = 42 + Width = 54 + Height = 13 + Caption = 'Descri'#231#227'o :' + end + object EditDescricao: TEdit + Left = 73 + Top = 39 + Width = 249 + Height = 21 + Ctl3D = True + MaxLength = 30 + ParentCtl3D = False + TabOrder = 0 + end + end +end diff --git a/internal/2.31RC1/1/Source/IncPerfil_U.pas b/internal/2.31RC1/1/Source/IncPerfil_U.pas new file mode 100644 index 0000000..3b1fac8 --- /dev/null +++ b/internal/2.31RC1/1/Source/IncPerfil_U.pas @@ -0,0 +1,111 @@ +unit IncPerfil_U; + +interface + +{$I 'UserControl.inc'} + +uses +{.$IFDEF DELPHI5_UP} + Variants, +{.$ENDIF} + Buttons, + Classes, + Controls, + DB, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Messages, + StdCtrls, + SysUtils, + UCBase, + Windows; + +type + TfrmIncluirPerfil = class(TForm) + Panel1: TPanel; + LbDescricao: TLabel; + Image1: TImage; + Panel3: TPanel; + btGravar: TBitBtn; + btCancela: TBitBtn; + Panel2: TPanel; + lbNome: TLabel; + EditDescricao: TEdit; + procedure btCancelaClick(Sender: TObject); + procedure btGravarClick(Sender: TObject); + private + function GetNewIdUser: Integer; + { Private declarations } + public + FAltera: Boolean; + FUserControl: TUserControl; + FNewIdUser : Integer; + FDataSetPerfilUsuario : TDataSet; + end; + +implementation + +{$R *.dfm} + +procedure TfrmIncluirPerfil.btCancelaClick(Sender: TObject); +begin + Close; +end; + +procedure TfrmIncluirPerfil.btGravarClick(Sender: TObject); +var + FProfile: String; +begin + btGravar.Enabled := False; + with FUserControl do + if not FAltera then + begin // inclui perfil + FNewIdUser := GetNewIdUser; + FProfile := EditDescricao.Text; + if Assigned(onAddProfile) then + onAddProfile(TObject(Self.Owner.Owner), FProfile); + + + DataConnector.UCExecSQL(Format('INSERT INTO %s(%s, %s, %s) Values(%d,%s,%s)', + [TableUsers.TableName, + TableUsers.FieldUserID, + TableUsers.FieldUserName, + TableUsers.FieldTypeRec, + FNewIdUser, + QuotedStr(FProfile), + QuotedStr('P')])); + + end + else + begin // alterar perfil + //FNewIdUser := TfrmCadastrarPerfil(Self.Owner).FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger; + FProfile := EditDescricao.Text; + + DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s WHERE %s = %d', + [TableUsers.TableName, + TableUsers.FieldUserName, + QuotedStr(FProfile), + TableUsers.FieldUserID, + FNewIdUser])); + end; + FDataSetPerfilUsuario.Close; + FDataSetPerfilUsuario.Open; + FDataSetPerfilUsuario.Locate('IDUser', FNewIdUser, []); + Close; +end; + +function TfrmIncluirPerfil.GetNewIdUser: Integer; +var + TempDs: TDataset; +begin + with FUserControl do + TempDS := DataConnector.UCGetSQLDataSet('SELECT ' + TableUsers.FieldUserID + ' as MaxUserID from ' + TableUsers.TableName + + ' ORDER BY ' + TableUsers.FieldUserID + ' DESC'); + Result := TempDs.FieldByName('MaxUserID').AsInteger + 1; + TempDS.Close; + FreeAndNil(TempDS); +end; + +end. diff --git a/internal/2.31RC1/1/Source/IncUser_U.dfm b/internal/2.31RC1/1/Source/IncUser_U.dfm new file mode 100644 index 0000000..d5352a9 --- /dev/null +++ b/internal/2.31RC1/1/Source/IncUser_U.dfm @@ -0,0 +1,485 @@ +object frmIncluirUsuario: TfrmIncluirUsuario + Left = 323 + Top = 236 + BorderStyle = bsDialog + Caption = 'Cadastro de Usu'#225'rios' + ClientHeight = 281 + ClientWidth = 472 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 472 + Height = 35 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 2 + object LbDescricao: TLabel + Left = 46 + Top = 9 + Width = 153 + Height = 18 + Caption = 'Adicionar Usu'#225'rio' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 8 + Top = 4 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00F9F9 + F900F1F1F100EAEAEA00E3E3E300E0E0E000DEDEDE00DFDFDF00E1E1E100E4E4 + E400E8E8E800ECECEC00F0F0F000F5F5F500FAFAFA00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00F6F6F600C5C7C5008E9F91006E8A70005E815C00527B4F004E7C4A004B7C + 48004A7C47004B7B48004C7C4A004E7B4C0050795000557854005B7A5C00677F + 6A007C897E00A2A2A200D4D4D400FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F2F4F30074967100487638004E7C35004E83 + 34004B893300488E31004592300044962F0043972F0043982F0043972F004494 + 300047903100498C32004C863400507F35004E7A360047703900526C5200A9A9 + A900FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0094B3 + 910058743900537B36004E8334004A8A33004690310043962F00409B2E003E9F + 2D003DA12D003DA12D003DA02D003F9D2E0042992F0045933000488D32004C86 + 3400517F350055773700567039005A725A00E6E6E600FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00688D5B0055783700508035004B8833004790 + 310043982F003F9E2D003BA42C0039A82B0037AB2A0037AB2A0038AA2B003AA6 + 2C003DA12D00419B2E0045943000498C32004D843400527C3600577338005472 + 4D00DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E87 + 5100527C36004D843400488D320044962F003F9E2E003BA52C0037AC2A0034B1 + 290032B4280032B5280033B3280035AE290039A82B003DA12D00419A2F004691 + 31004B893300508035005577370056775100E4E4E400FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00729A6800507F35004B88330046913100419A + 2E003CA32C0037AB2A0033B328002FB927002DBE25002CBF25002EBC260031B6 + 270035AF29003AA72B003F9E2D0044953000498C32004E833400537A37006F8C + 6E00F2F2F200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5C6 + A700508136004A8A3300449330003F9D2E003AA62B0035AF290030B827002BBF + 250035B237002BBB2B0029C324002DBC260033B4280037AB2A003DA12D004298 + 2F00478F31004D8534004A7B3600B0BCB200FDFDFD00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F6FAF70058904D00498B3200449530003E9E + 2D0039A82B0034B228002EBB26004BA34E00DEE0DF00DDEADF0044BB47002BC0 + 250031B6270036AD2A003CA32C00419A2F00479031004C86340072997100F1F1 + F100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00D4E4D6004A8E3D00449530003E9E2D0039A82B0034B129002FA92C00A4B0 + A700E5E6E600E8E9E900CFDED20035B3340031B6270036AC2A003CA32C004199 + 2F00468F31005E955B00E5E7E500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D2E4D4004E984500409C + 2E003AA52C0035AE2900518B5400989B9F00798A96006B7F8C00757E85005B7F + 5D002D9E240038A92A003DA12D0040952F0070A46F00E9ECEA00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00EDF4EF007BB57B003A9D2E00319131004F7C93004992 + C5004A98CF004897CE004592C800437DA400235437002C7F22004B9B4500AECA + B000F9F9F900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00BDD3C7004C90AF0052A0D60052A0D500519FD4004F9DD3004C9AD1004997 + CE00438CBF0043636700C1C2C100FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F5F6F70072ABD00056A4D90056A4D90056A4 + D90055A3D80054A2D70052A0D5004F9DD3004B99D000468DC000727D8400E7E7 + E700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2C4 + DC005AA6DB005BA8DC005BA8DC005BA8DC005AA7DB0058A5DA0056A4D90053A1 + D600509ED4004B9AD0004C7FA500ADADAD00FDFDFD00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00E9EEF4005FA7D7005EABDF005FACE0005FACE0005FAC + E0005EABDF005CA9DD005AA7DB0057A4D90054A2D700509ED4004A95CA007682 + 8B00F0F0F000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000C8F80000A6FF0060AC + E00061AEE20063B0E30063B0E30063B0E30061AEE2005FACE0005DAADE005AA7 + DC0056A4D90053A1D6004E9DD3005B7E9600DADADA00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000C8F80000A6FF00FFFF + FF00FFFFFF0000C8F80000A6FF0063B0E30065B2E50000A6FF0000C8F80067B4 + E60065B2E50063B0E30060ADE1005DAADE0059A7DB0055A3D800519FD5004F84 + A800C5C5C500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF0000C8F80000A6FF009AEBF90000C8F80000A6FF009AEB + F90000A6FF0000C8F8006CB8EA006BB7E90069B5E80066B3E60062AFE3005FAC + E0005BA8DC0057A5DA0053A1D6004E8DBB00B8B8B800FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009AEBF90000C8 + F8009AEBF90000A6FF0000A6FF0000A6FF0000C8F8009AEBF9006BB4E3006EBA + EC006CB8EA0069B5E70064B1E40060ADE1005DAADE0059A6DB0054A2D7004E91 + C000B8B8B800FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF009AEBF9009AEBF90000F8F80000F8F8009AEB + F9009AEBF9003F799D003E708F004B7FA00062A5D10069B5E60066B3E60062AF + E2005EABDF0059A7DB0053A0D4004D88B200C4C4C400FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000A6FF0000A6FF0000A6FF0000A6 + FF0000F8F800FFFFFF00FFFFFF0000F8F80000A6FF0000A6FF0000A6FF0000A6 + FF003D719200437595005B9FCD0061AEE1005DAADE004C8FBC003B779D003C62 + 7A00D0D0D000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF0000C8F80000C8F80000C8F80000A6FF0000F8F8009AEBF900FFFFFF0000F8 + F80000C8F80000C8F80000C8F80000C8F8004E95C2004689B300386A8A00447B + 9F004786B0003C7FA9003C81AC005C7A8B00EDEDED00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009AEB + F9009AEBF90000F8F80000F8F8009AEBF9009AEBF90062ABD9005FA8D6005BA3 + D100559DCA004E95C200478DB9003D7DA6003C7FAA003D82AD003C7CA200A3AA + AE00FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF009AEBF90000A6FF0000C8F80000C8F80000A6FF0000C8 + F80000A6FF009AEBF90067B1DF0062ABD9005BA3D000539AC7004B91BE004388 + B4003D82AD003C81AC0062849A00ECECEC00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000A6FF0000C8 + F8009AEBF90000C8F80000A6FF009AEBF90000C8F80000A6FF006EB9E80067B1 + DF005FA7D500569ECB004D94C100458BB7003D82AE005584A200D8DBDD00FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000A6FF0000C8F800FFFFFF00FFFFFF0000C8F80000A6FF00FFFF + FF00D8E7F10000C8F80000A6FF0069B3E20061A9D70058A0CD004F96C2004689 + B5006994B000DCDFE300FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0000C8F80000A6FF00FFFFFF00FFFFFF00F4F7FA00B2D0E30085B8 + D80070A9CE0071A6C70087AFC900C3D1DB00FAFAFA00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + end + object Panel3: TPanel + Left = 375 + Top = 35 + Width = 97 + Height = 246 + Align = alRight + BevelOuter = bvNone + TabOrder = 1 + object btGravar: TBitBtn + Left = 8 + Top = 16 + Width = 81 + Height = 25 + Caption = '&Gravar' + TabOrder = 0 + OnClick = btGravarClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42 + 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969 + 6969696969696969696969696969696969696969696969696969FF00FFCE726F + D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443 + 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2 + D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F + D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747 + 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF + FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F + DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50 + 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF + FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F + E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459 + 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C + 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F + EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62 + 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE + AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F + F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B + 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8 + B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F + F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863 + 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E + 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F + F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA + BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA + EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F + F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD + C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1 + F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3 + C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6 + F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9 + CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB + FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF + D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4 + DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA + E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F + CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72 + 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A + 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A} + NumGlyphs = 2 + end + object btCancela: TBitBtn + Left = 8 + Top = 56 + Width = 81 + Height = 25 + Caption = '&Cancelar' + TabOrder = 1 + OnClick = btCancelaClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + end + object Panel2: TPanel + Left = 0 + Top = 35 + Width = 375 + Height = 246 + Align = alClient + BevelInner = bvRaised + BevelOuter = bvLowered + TabOrder = 0 + object lbNome: TLabel + Left = 48 + Top = 15 + Width = 34 + Height = 13 + Alignment = taRightJustify + Caption = 'Nome :' + Layout = tlCenter + end + object lbLogin: TLabel + Left = 50 + Top = 45 + Width = 32 + Height = 13 + Alignment = taRightJustify + Caption = 'Login :' + Layout = tlCenter + end + object lbEmail: TLabel + Left = 50 + Top = 75 + Width = 32 + Height = 13 + Alignment = taRightJustify + Caption = 'EMail :' + Layout = tlCenter + end + object lbPerfil: TLabel + Left = 53 + Top = 136 + Width = 29 + Height = 13 + Alignment = taRightJustify + Caption = 'Perfil :' + Layout = tlCenter + end + object btlimpa: TSpeedButton + Left = 334 + Top = 136 + Width = 19 + Height = 21 + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 080000000000000100000E0F00000E0F00000001000000010000FF00FF00B584 + 8400B5948C00C6A59C00D6BDB500E7C6B500E7CECE0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000020101010101010200000000000000000106060606 + 0606010100000000000000010606060606060103010000000000000204040404 + 0404010303010000000000000205050505050501030301000000000000020505 + 0505050501030301000000000000020505050505050103030100000000000002 + 0505050505050103010000000000000002050505050505010100000000000000 + 0002050505050505010000000000000000000201010101010200000000000000 + 0000000000000000000000000000000000000000000000000000} + OnClick = btlimpaClick + end + object LabelExpira: TLabel + Left = 30 + Top = 167 + Width = 52 + Height = 13 + Alignment = taRightJustify + Caption = 'Expira em :' + Layout = tlCenter + end + object LabelDias: TLabel + Left = 331 + Top = 167 + Width = 19 + Height = 13 + Caption = 'dias' + Layout = tlCenter + end + object Label1: TLabel + Left = 46 + Top = 106 + Width = 36 + Height = 13 + Alignment = taRightJustify + Caption = 'Status :' + Layout = tlCenter + end + object EditNome: TEdit + Left = 88 + Top = 15 + Width = 265 + Height = 21 + Ctl3D = True + MaxLength = 30 + ParentCtl3D = False + TabOrder = 0 + end + object EditLogin: TEdit + Left = 88 + Top = 45 + Width = 265 + Height = 21 + Ctl3D = True + MaxLength = 30 + ParentCtl3D = False + TabOrder = 1 + end + object EditEmail: TEdit + Left = 88 + Top = 75 + Width = 265 + Height = 21 + Ctl3D = True + MaxLength = 150 + ParentCtl3D = False + TabOrder = 2 + end + object ckPrivilegiado: TCheckBox + Left = 89 + Top = 220 + Width = 120 + Height = 17 + Caption = 'Usu'#225'rio privilegiado' + TabOrder = 7 + end + object ComboPerfil: TDBLookupComboBox + Left = 88 + Top = 136 + Width = 242 + Height = 21 + Ctl3D = True + KeyField = 'IDUser' + ListField = 'Nome' + ParentCtl3D = False + TabOrder = 4 + end + object ckUserExpired: TCheckBox + Left = 89 + Top = 196 + Width = 160 + Height = 17 + Caption = 'Senha do usu'#225'rio n'#227'o expira' + TabOrder = 6 + OnClick = ckUserExpiredClick + end + object SpinExpira: TSpinEdit + Left = 88 + Top = 167 + Width = 241 + Height = 22 + MaxValue = 100 + MinValue = 10 + TabOrder = 5 + Value = 10 + end + object ComboStatus: TComboBox + Left = 88 + Top = 106 + Width = 265 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 3 + Items.Strings = ( + 'Ativo' + 'Inativo') + end + end +end diff --git a/internal/2.31RC1/1/Source/IncUser_U.pas b/internal/2.31RC1/1/Source/IncUser_U.pas new file mode 100644 index 0000000..02f4c70 --- /dev/null +++ b/internal/2.31RC1/1/Source/IncUser_U.pas @@ -0,0 +1,245 @@ +unit IncUser_U; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5_UP} + Variants, +{$ENDIF} + Buttons, + Classes, + Controls, + DB, + DBCtrls, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Messages, + Spin, + StdCtrls, + SysUtils, + UCBase, + Windows; + +type + TfrmIncluirUsuario = class(TForm) + Panel1: TPanel; + LbDescricao: TLabel; + Image1: TImage; + Panel3: TPanel; + btGravar: TBitBtn; + btCancela: TBitBtn; + Panel2: TPanel; + lbNome: TLabel; + EditNome: TEdit; + lbLogin: TLabel; + EditLogin: TEdit; + lbEmail: TLabel; + EditEmail: TEdit; + ckPrivilegiado: TCheckBox; + lbPerfil: TLabel; + ComboPerfil: TDBLookupComboBox; + btlimpa: TSpeedButton; + ckUserExpired: TCheckBox; + LabelExpira: TLabel; + SpinExpira: TSpinEdit; + LabelDias: TLabel; + ComboStatus: TComboBox; + Label1: TLabel; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure btCancelaClick(Sender: TObject); + procedure btGravarClick(Sender: TObject); + function GetNewIdUser: Integer; + procedure btlimpaClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure ckUserExpiredClick(Sender: TObject); + private + FormSenha: TCustomForm; + { Private declarations } + public + { Public declarations } + FAltera: Boolean; + FUserControl: TUserControl; + FDataSetCadastroUsuario: TDataSet; + vNovoIDUsuario: Integer; + end; + +implementation + +uses + SenhaForm_U; + +{$R *.dfm} + +procedure TfrmIncluirUsuario.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TfrmIncluirUsuario.FormCreate(Sender: TObject); +begin + Self.BorderIcons := []; + Self.BorderStyle := bsDialog; +end; + +procedure TfrmIncluirUsuario.btCancelaClick(Sender: TObject); +begin + Close; +end; + +procedure TfrmIncluirUsuario.btGravarClick(Sender: TObject); +var + vNovaSenha: String; + vNome: String; + vLogin: String; + vEmail: String; + vUserExpired: Integer; + vPerfil: Integer; + vPrivilegiado: Boolean; +begin + btGravar.Enabled := False; + + with FUserControl do + if not FAltera then + begin // inclui user + if Self.FUserControl.ExisteUsuario(EditLogin.Text) then + begin + MessageDlg(Format(FUserControl.UserSettings.CommonMessages.UsuarioExiste, [EditLogin.Text]), mtWarning, [mbOK], 0); + Exit; + end; + + FormSenha := TSenhaForm.Create(Self); + TSenhaForm(FormSenha).Position := UserSettings.WindowsPosition; + TSenhaForm(FormSenha).fUserControl := fUserControl; + TSenhaForm(FormSenha).Caption := Format(FUserControl.UserSettings.ResetPassword.WindowCaption, [EditLogin.Text]); + if TSenhaForm(FormSenha).ShowModal <> mrOk then + begin + btGravar.Enabled := True; + Exit; + end; + vNovaSenha := TSenhaForm(FormSenha).edtSenha.Text; + vNovoIDUsuario := GetNewIdUser; + vNome := EditNome.Text; + vLogin := EditLogin.Text; + vEmail := EditEmail.Text; + FreeAndNil(FormSenha); + + if ComboPerfil.KeyValue = null then + vPerfil := 0 + else + vPerfil := ComboPerfil.KeyValue; + + vPrivilegiado := ckPrivilegiado.Checked; + vUserExpired := StrToInt(BoolToStr(ckUserExpired.Checked)); + + AddUser(vLogin, vNovaSenha, vNome, vEmail, vPerfil, vUserExpired, SpinExpira.Value, vPrivilegiado); + + + if (Assigned( fUserControl.MailUserControl)) and (fUserControl.MailUserControl.AdicionaUsuario.Ativo ) then + try + fUserControl.MailUserControl.EnviaEmailAdicionaUsuario(vNome, vLogin, Encrypt(vNovaSenha, EncryptKey) , vEmail, IntToStr(vPerfil), EncryptKey); + except + on E : Exception do Log(e.Message, 0 ); + end; + + end + else + begin // alterar user + // vNovoIDUsuario := TfrmCadastrarUsuario(Self.Owner).FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger; + vNome := EditNome.Text; + vLogin := EditLogin.Text; + vEmail := EditEmail.Text; + if ComboPerfil.KeyValue = null then + vPerfil := 0 + else + vPerfil := ComboPerfil.KeyValue; + + vUserExpired := StrToInt(BoolToStr(ckUserExpired.Checked)); //Added by Petrus van Breda 28/04/2007 + vPrivilegiado := ckPrivilegiado.Checked; + ChangeUser(vNovoIDUsuario, vLogin, vNome, vEmail, vPerfil, vUserExpired, SpinExpira.Value, ComboStatus.ItemIndex, vPrivilegiado); + + + if (Assigned(fUserControl.MailUserControl)) and (fUserControl.MailUserControl.AlteraUsuario.Ativo ) then + try + fUserControl.MailUserControl.EnviaEmailAlteraUsuario(vNome, vLogin, 'Não Alterada', vEmail, IntToStr(vPerfil), EncryptKey); + except + on E : Exception do Log(e.Message, 2); + end; + + + end; + +{ With TfrmCadastrarUsuario(Owner) do + Begin } + FDataSetCadastroUsuario.Close; + FDataSetCadastroUsuario.Open; + FDataSetCadastroUsuario.Locate('idUser', vNovoIDUsuario, []); + // End; + Close; +end; + +function TfrmIncluirUsuario.GetNewIdUser: Integer; +var + DataSet: TDataset; + SQLStmt: String; +begin + with FUserControl do + begin + SQLStmt := Format('SELECT %s.%s FROM %s ORDER BY %s DESC', [TableUsers.TableName, TableUsers.FieldUserID, + TableUsers.TableName, TableUsers.FieldUserID]); + try + DataSet := DataConnector.UCGetSQLDataSet(SQLStmt); + Result := DataSet.Fields[0].AsInteger + 1; + DataSet.Close; + finally + SysUtils.FreeAndNil(DataSet); + end; + end; +end; + +procedure TfrmIncluirUsuario.btLimpaClick(Sender: TObject); +begin + ComboPerfil.KeyValue := NULL; +end; + +procedure TfrmIncluirUsuario.FormShow(Sender: TObject); +begin + if not FUserControl.UserProfile.Active then + begin + lbPerfil.Visible := False; + ComboPerfil.Visible := False; + btLimpa.Visible := False; + end + else + begin + ComboPerfil.ListSource.DataSet.Close; + ComboPerfil.ListSource.DataSet.Open; + end; + + if FUserControl.Login.ActiveDateExpired = True then + //Opção de senha so deve aparecer qdo setada como true no componente By Vicente Barros Leonel + ckPrivilegiado.Visible := FUserControl.User.UsePrivilegedField + else + ckUserExpired.Visible := False; + + EditLogin.CharCase := Self.FUserControl.Login.CharCaseUser; + + SpinExpira.Visible := ckUserExpired.Visible; + LabelExpira.Visible := ckUserExpired.Visible; + LabelDias.Visible := ckUserExpired.Visible; + + if (FUserControl.User.ProtectAdministrator) and (EditLogin.Text = FUserControl.Login.InitialLogin.User) then + EditLogin.Enabled := False; +end; + +procedure TfrmIncluirUsuario.ckUserExpiredClick(Sender: TObject); +begin + SpinExpira.Enabled := not ckUserExpired.Checked; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/LoginWindow_U.dfm b/internal/2.31RC1/1/Source/LoginWindow_U.dfm new file mode 100644 index 0000000..41b0673 --- /dev/null +++ b/internal/2.31RC1/1/Source/LoginWindow_U.dfm @@ -0,0 +1,260 @@ +object frmLoginWindow: TfrmLoginWindow + Left = 343 + Top = 286 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'Login' + ClientHeight = 171 + ClientWidth = 350 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + KeyPreview = True + OldCreateOrder = False + OnActivate = FormActivate + OnClose = FormClose + OnKeyPress = FormKeyPress + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object PTop: TPanel + Left = 0 + Top = 0 + Width = 350 + Height = 17 + Align = alTop + BevelOuter = bvNone + TabOrder = 0 + object ImgTop: TImage + Left = 0 + Top = 0 + Width = 0 + Height = 0 + AutoSize = True + Center = True + end + end + object PLeft: TPanel + Left = 0 + Top = 17 + Width = 10 + Height = 124 + Align = alLeft + BevelOuter = bvNone + TabOrder = 1 + object imgLeft: TImage + Left = 0 + Top = 0 + Width = 0 + Height = 0 + AutoSize = True + Center = True + Transparent = True + end + end + object PBottom: TPanel + Left = 0 + Top = 141 + Width = 350 + Height = 11 + Align = alBottom + BevelOuter = bvNone + TabOrder = 2 + object ImgBottom: TImage + Left = 0 + Top = 0 + Width = 0 + Height = 0 + AutoSize = True + Center = True + end + end + object Panel1: TPanel + Left = 10 + Top = 17 + Width = 340 + Height = 124 + Align = alClient + BevelOuter = bvNone + TabOrder = 3 + object PLogin: TPanel + Left = 1 + Top = 1 + Width = 340 + Height = 132 + BevelOuter = bvNone + TabOrder = 0 + object LbUsuario: TLabel + Left = 33 + Top = 10 + Width = 42 + Height = 13 + Alignment = taRightJustify + Caption = 'Usu'#225'rio :' + end + object LbSenha: TLabel + Left = 38 + Top = 42 + Width = 37 + Height = 13 + Alignment = taRightJustify + Caption = 'Senha :' + end + object lbEsqueci: TLabel + Left = 87 + Top = 70 + Width = 79 + Height = 13 + Cursor = crHandPoint + Caption = 'Esqueci a senha' + Enabled = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlue + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsUnderline] + ParentFont = False + Visible = False + end + object EditUsuario: TEdit + Left = 82 + Top = 7 + Width = 225 + Height = 21 + CharCase = ecUpperCase + Ctl3D = True + MaxLength = 15 + ParentCtl3D = False + TabOrder = 0 + OnChange = EditUsuarioChange + end + object EditSenha: TEdit + Left = 82 + Top = 39 + Width = 225 + Height = 21 + Ctl3D = True + MaxLength = 10 + ParentCtl3D = False + PasswordChar = '*' + TabOrder = 1 + end + object btOK: TBitBtn + Left = 81 + Top = 96 + Width = 75 + Height = 25 + Caption = 'OK' + TabOrder = 2 + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000000000000000000000000000000000000C8D0D400C8D0 + D400C8D0D400B6907D00B57F6800C6C9CC00C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C7CCD000C1806000C6503000B75A4100C3BFBD00C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400BFADA500D1886200C4724700C4502E00BA6F5C00C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C7CE + D200C0866900D1875F00C5724900C5734A00BF432500C1B6B300C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C0AA + 9F00D6916C00CD774F00B94A2E00CC856000C7613C00B85F4700C7CFD300C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BCA19500D08D + 6A00D58D6500C84C2D00BD9E9300BD968200D2896400C5462800BF968C00C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C1B5B100C585 + 6400D37B5900B96B5400C7CCD000C6CBCE00BE836500D2886200C4472D00C6B8 + B800C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C5C7 + C800BFB0AA00C6CBCD00C8D0D400C8D0D400C2BDBB00C8846100D07C5600C158 + 4500C6CBCE00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BEADA500CE876100CD6B + 4900C5776B00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BDA49700D18D + 6800CD684600C6878000C7CFD300C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BEA3 + 9500D6937000CA603E00C7908A00C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C0A79C00CD876100C95D3D00C89B9700C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400BFADA500C6815D00CC5D4100C79F9B00C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C2BCBB00C1876A00CB614400BEA59C00C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C6CACD00BB9A8A00B99A8B00C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400} + end + object BtCancela: TBitBtn + Left = 185 + Top = 96 + Width = 75 + Height = 25 + Cancel = True + Caption = 'Cancelar' + TabOrder = 3 + OnClick = BtCancelaClick + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000000000000000000000000000000000000C8D0D400ACB3 + CC003C41AF00B7BFCE00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400A6ADCA000F19 + B000000BAE00464BB300C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D4009398C300B1B8CD00C8D0D4005665D000071B + C600000EB400010BAD00858CC100C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400BEC6D1005357B100020298005C60B300C8D0D400364CDD002342 + F0000012BC00000EB5001119AE00B4BBCE00C8D0D400C8D0D400C8D0D400C8D0 + D400989EC5001D1E9F00000098002122A100B7BECE00C8D0D4008B95CA002E4C + F2001C35DB000011BB00000EB5003037B200C2CAD200C8D0D400C1C8D1005A5D + B20004049900000098001D1EA000B3BACD00C8D0D400C8D0D400C8D0D4006672 + C9004D67F7000D22C9000012BC00000EB5004C53B7009DA3C8002125A8000002 + 9D000000980018199E00AEB5CB00C8D0D400C8D0D400C8D0D400C8D0D400C5CD + D2006972C9004C60E6000016C2000012BC00000EB500030DAD000009AA000006 + A4001417A100A9B0CA00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C7CFD300727BC600162ACB000015C2000012BC00000FB600000CB0001016 + A900A5ABC900C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400A2AACB00091DC4000018C9000015C3000012BD00000FB600767B + BD00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400AFB6CD00162DCC00001ED500001BCF000018C9000015C3000012BD000F1A + B300A6ADCA00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400B8BF + CF002138D0000025E2000022DC000120D7002742E3002536C700071FCD000013 + BE001723B400AFB6CC00C8D0D400C8D0D400C8D0D400C8D0D400C0C8D1002D44 + D100002BEF000028E900092EE6003A57F2006D78CC00C1C9D2005562C8000D25 + D1000013BE001823B400A7AECB00C8D0D400C8D0D400C8D0D4005A68C800002F + F700002EF500183FF4004662F8006C76CA00C7CFD300C8D0D400C8D0D4007F89 + C8002539CE000518C2000F1BB4009AA1C700C8D0D400C8D0D400AFB6CD001535 + DF002A4FFC004A66FA006C77CC00C7CFD300C8D0D400C8D0D400C8D0D400C8D0 + D400B4BBCE005964C9001729C6000815B500878DC200C8D0D400C8D0D400B7BE + CF00707DCF006F7ACC00C7CFD300C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400949CC900424DBE009097C500C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0 + D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400} + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 152 + Width = 350 + Height = 19 + Panels = < + item + Alignment = taRightJustify + Text = 'Tentativa: ' + Width = 60 + end + item + Alignment = taCenter + Width = 80 + end + item + Alignment = taRightJustify + Text = 'Limite de Tentativas: ' + Width = 130 + end + item + Alignment = taCenter + Width = 50 + end> + end +end diff --git a/internal/2.31RC1/1/Source/LoginWindow_U.pas b/internal/2.31RC1/1/Source/LoginWindow_U.pas new file mode 100644 index 0000000..83b0bf3 --- /dev/null +++ b/internal/2.31RC1/1/Source/LoginWindow_U.pas @@ -0,0 +1,142 @@ +unit LoginWindow_U; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5_UP} + Variants, +{$ENDIF} + Buttons, + Classes, + Controls, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Math, + Messages, + StdCtrls, + SysUtils, + UCBase, + Windows, ComCtrls; + +type + TfrmLoginWindow = class(TForm) + PTop: TPanel; + ImgTop: TImage; + PLeft: TPanel; + imgLeft: TImage; + PBottom: TPanel; + ImgBottom: TImage; + Panel1: TPanel; + PLogin: TPanel; + LbUsuario: TLabel; + LbSenha: TLabel; + EditUsuario: TEdit; + EditSenha: TEdit; + btOK: TBitBtn; + BtCancela: TBitBtn; + lbEsqueci: TLabel; + StatusBar: TStatusBar; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure BtCancelaClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure EditUsuarioChange(Sender: TObject); + procedure FormKeyPress(Sender: TObject; var Key: char); + procedure BotoesClickVisualizacao(Sender: TObject); + procedure FormActivate(Sender: TObject); + public + FUserControl: TUserControl; + end; + +implementation + +{$R *.dfm} + +procedure TfrmLoginWindow.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; + +end; + +procedure TfrmLoginWindow.BotoesClickVisualizacao(Sender: TObject); +begin + Self.ModalResult := mrOk; +end; + +procedure TfrmLoginWindow.BtCancelaClick(Sender: TObject); +begin + Application.Terminate; +end; + +procedure TfrmLoginWindow.FormShow(Sender: TObject); +var + w, h: Integer; +begin + w := Max(ImgTop.Width, ImgLeft.Width + PLogin.Width); + w := Max(w, ImgBottom.Width); + h := Max(ImgLeft.Height + ImgTop.Height + ImgBottom.Height, ImgTop.Height + PLogin.Height + ImgBottom.Height); + + Width := w; + Height := h + 28; + If FUserControl.Login.MaxLoginAttempts > 0 then + Begin + Height := Height + 19; // by vicente barros leonel and Petrus van Breda + StatusBar.Panels[ 0 ].Text := FUserControl.UserSettings.Login.LabelTentativa; + StatusBar.Panels[ 2 ].Text := FUserControl.UserSettings.Login.LabelTentativas; + End; + + // Topo + PTop.Height := ImgTop.Height; + ImgTop.AutoSize := False; + ImgTop.Align := alClient; + ImgTop.Center := True; + + //Centro + PLeft.Width := ImgLeft.Width; + ImgLeft.AutoSize := False; + ImgLeft.Align := alClient; + ImgLeft.Center := True; + + //Bottom + PBottom.Height := ImgBottom.Height; + ImgBottom.AutoSize := False; + ImgBottom.Align := alClient; + ImgBottom.Center := True; + + PTop.Visible := ImgTop.Picture <> nil; + PLeft.Visible := ImgLeft.Picture <> nil; + PBottom.Visible := ImgBottom.Picture <> nil; + + if FUserControl.Login.GetLoginName = lnUserName then + EditUsuario.Text := FUserControl.GetLocalUserName; + if FUserControl.Login.GetLoginName = lnMachineName then + EditUsuario.Text := FUserControl.GetLocalComputerName; + if FUserControl.Login.GetLoginName <> lnNone then + EditSenha.SetFocus; +end; + +procedure TfrmLoginWindow.EditUsuarioChange(Sender: TObject); +begin + lbEsqueci.Enabled := Length(EditUsuario.Text) > 0; +end; + +procedure TfrmLoginWindow.FormKeyPress(Sender: TObject; var Key: char); +begin + if Key = #13 then + Begin + Key := #0; + Perform(WM_NEXTDLGCTL,0,0); + End; +end; + +procedure TfrmLoginWindow.FormActivate(Sender: TObject); +begin + EditUsuario.CharCase := Self.FUserControl.Login.CharCaseUser; + EditSenha.CharCase := Self.FUserControl.Login.CharCasePass; { Por Vicente Barros Leonel } +end; + +end. + diff --git a/internal/2.31RC1/1/Source/MsgRecForm_U.dfm b/internal/2.31RC1/1/Source/MsgRecForm_U.dfm new file mode 100644 index 0000000..ae8dacf --- /dev/null +++ b/internal/2.31RC1/1/Source/MsgRecForm_U.dfm @@ -0,0 +1,263 @@ +object MsgRecForm: TMsgRecForm + Left = 215 + Top = 162 + BorderStyle = bsDialog + Caption = 'Mensagem' + ClientHeight = 336 + ClientWidth = 506 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object lbDE: TLabel + Left = 16 + Top = 57 + Width = 20 + Height = 13 + Caption = 'De :' + end + object lbAssunto: TLabel + Left = 19 + Top = 89 + Width = 38 + Height = 13 + Caption = 'Assunto' + end + object lbMensagem: TLabel + Left = 16 + Top = 120 + Width = 52 + Height = 13 + Caption = 'Mensagem' + end + object lbData: TLabel + Left = 360 + Top = 57 + Width = 23 + Height = 13 + Caption = 'Data' + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 506 + Height = 35 + Align = alTop + BevelOuter = bvLowered + Color = clWhite + TabOrder = 2 + object lbTitulo: TLabel + Left = 48 + Top = 10 + Width = 181 + Height = 18 + Caption = 'Mensagem Recebida' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 8 + Top = 4 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098300000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF009830000098300000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D3BDAF0069473100694731006947310069473100694731006947 + 3100694731006947310069473100694731006947310069473100694731006947 + 3100D76733009830000098300000983000009830000098300000C16E39009830 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00FCF9F800B7A2 + 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300D7673300FBC4A100DD986500D48B + 5800D48B5800CE824E00C7784300C16E390098300000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D3BDAF00FEFCFB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EE + EA00F2EBE700F0E8E400EEE5E000ECE3DD00EAE0DA00E8DCD600E6D9D200E4D6 + CF00D7673300FBC4A100DD986500DD986500D48B5800D78F5C00D1875300CB7D + 4900C16E390098300000FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00FEFC + FB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EBE700F0E8E400EEE5 + E000ECE3DD00EAE0DA00E8DCD600E6D9D200D7673300FBC4A100E3A16E00DD98 + 6500DD986500D48B5800D78F5C00D1875300CB7D4900C16E390098300000FFFF + FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FEFCFB00FCF9F800E7B98600E7B9 + 8600E7B98600E7B98600E7B98600E7B98600E7B98600E7B98600E7B98600E7B9 + 8600D7673300FBC4A100E3A16E00E3A16E00DD986500DD986500D48B5800D78F + 5C00C16E390098300000FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF + FF00FFFFFF00FEFCFB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EB + E700F0E8E400EEE5E000ECE3DD00EAE0DA00D7673300FBC4A100FBC4A100FBC4 + A100FBC4A100FBC4A100FBC4A100C16E390098300000FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFDFD00FDFB + FA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900F0E8E400EEE5E000ECE3 + DD00D7673300D7673300D7673300D7673300D7673300D7673300FBC4A1009830 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00E7B98600E7B98600E7B98600E7B98600E7B98600E7B9 + 8600E7B98600E7B98600E7B98600E7B98600EDE4DF00EBE1DB00E9DED800E7DB + D400E5D8D100D76733009830000069473100694731006947310069473100FFFF + FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900F1E9 + E500EFE6E200EDE4DF00EBE1DB00E9DED800E7DBD40098300000B7A293006947 + 3100B7A29300B7A2930069473100FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFDFD00FDFBFA00FBF8 + F600F9F5F300F7F2EF00F5EFEC00F3ECE900F1E9E500EFE6E200EDE4DF00EBE1 + DB00E9DED800E7DBD400B7A2930069473100DBC9BF00B7A2930069473100FFFF + FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098300000FFFF + FF00FFFFFF00FFFFFF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EF + EC00F3ECE900F1E9E500EFE6E200EDE4DF00EBE1DB00E9DED800B7A293006947 + 3100DBC9BF00B7A2930069473100FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF + FF00FFFFFF009830000098300000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFD + FD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900316ADC00316A + DC00316ADC00EBE1DB00B7A2930069473100DCCAC000B7A2930069473100FFFF + FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF0098300000C16E3900983000009830 + 000098300000983000009830000098300000FFFDFD00FDFBFA00FBF8F600F9F5 + F300F7F2EF00F5EFEC00314A800060A2FA00316ADC00EDE4DF00B7A293006947 + 3100DECDC400B7A2930069473100FFFFFF00FFFFFF00D3BDAF00FFFFFF009830 + 0000CB7D4900D58B5700C16E3900C16E3900C16E3900C16E3900C16E39009830 + 0000FFFFFF00FFFFFF00FEFCFB00FCF9F800FAF6F400F8F3F100396EE30060A2 + FA00316ADC00EFE6E200B7A2930069473100E0D0C800B7A2930069473100FFFF + FF00FFFFFF00D3BDAF0098300000CB7D4900E19C6A00DB946100D58B5700D287 + 5300CD7F4A00C7764100C16E390098300000FFFFFF00FFFFFF00FFFFFF00FEFC + FB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EBE700F0E8E4006947 + 3100E3D5CD00B7A2930069473100FFFFFF00FFFFFF0098300000FBC4A100E3A1 + 6E00E3A16E00E3A16E00DE986500D88F5C00D2875300CD7F4A00C16E39009830 + 0000D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BD + AF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00E5D8D100B7A2930069473100FFFF + FF00FFFFFF00FFFFFF00D7673300FBC4A100E3A16E00E3A16E00E3A16E00DE98 + 6500D88F5C00D2875300C16E390098300000FFFDFD00FDFBFA00FBF8F600F9F5 + F300F7F2EF00F5EFEC00F3ECE900F1E9E500EFE6E200EDE4DF00EBE1DB00E9DE + D800E7DBD400B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00D767 + 3300FBC4A100E3A16E00FBC4A100FBC4A100FBC4A100FBC4A100FBC4A1009830 + 0000FFFFFF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3EC + E900F1E9E500EFE6E200EDE4DF00EBE1DB00E9DED800B7A2930069473100FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7673300FBC4A100D7673300D767 + 3300D7673300D7673300D7673300D7673300FFFFFF00FFFFFF00FFFDFD00FDFB + FA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900316ADC00316ADC00316A + DC00EBE1DB00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00D3BDAF00D7673300D7673300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2 + EF00F5EFEC00314A800060A2FA00316ADC00EDE4DF00B7A2930069473100FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00D7673300FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FEFCFB00FCF9F800FAF6F400F8F3F100396EE30060A2FA00316A + DC00EFE6E200B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFCFB00FCF9 + F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EBE700F0E8E40069473100FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00D3BDAF00D3BDAF00D3BD + AF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BD + AF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BD + AF00D3BDAF00D3BDAF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + end + object stDe: TStaticText + Left = 64 + Top = 56 + Width = 289 + Height = 17 + AutoSize = False + BorderStyle = sbsSunken + TabOrder = 3 + end + object stAssunto: TStaticText + Left = 64 + Top = 88 + Width = 431 + Height = 17 + AutoSize = False + BorderStyle = sbsSunken + TabOrder = 4 + end + object MemoMsg: TMemo + Left = 16 + Top = 144 + Width = 481 + Height = 145 + MaxLength = 255 + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + end + object btFechar: TBitBtn + Left = 199 + Top = 303 + Width = 79 + Height = 25 + Caption = '&Fechar' + TabOrder = 1 + OnClick = btFecharClick + Glyph.Data = { + 42040000424D4204000000000000420000002800000020000000100000000100 + 1000030000000004000000000000000000000000000000000000007C0000E003 + 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C45261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C94521F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C4526862645261F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C9452D65A94521F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C673286268626862645261F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7CD65AD65AD65AD65A94521F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C45268626C62A862E862645261F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C9452D65AF75ED65AD65A94521F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C47328626C62A252E252EC62A8822C62A1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7CB556D65AF75EB556B556F75ED65AF75E1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C4526C62A252E1F7C1F7C252EC62A45261F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C9452F75EB5561F7C1F7CB556F75E94521F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C252E1F7C1F7C1F7C1F7C252EC62A45261F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7CB5561F7C1F7C1F7C1F7CB556F75E94521F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252EC62AC62A1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556F75EF75E1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E8626 + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E + 86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556 + D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 252E86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + B556D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C252E1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7CB5561F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C + 1F7C1F7C1F7C} + NumGlyphs = 2 + end + object stData: TStaticText + Left = 397 + Top = 56 + Width = 97 + Height = 17 + AutoSize = False + BorderStyle = sbsSunken + Caption = '99/99/9999 99:99' + TabOrder = 5 + end +end diff --git a/internal/2.31RC1/1/Source/MsgRecForm_U.pas b/internal/2.31RC1/1/Source/MsgRecForm_U.pas new file mode 100644 index 0000000..a180469 --- /dev/null +++ b/internal/2.31RC1/1/Source/MsgRecForm_U.pas @@ -0,0 +1,77 @@ +unit MsgRecForm_U; + +interface + +uses +{$IFDEF VER130} +{$ELSE} + Variants, +{$ENDIF} + Buttons, + Classes, + Controls, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Messages, + StdCtrls, + SysUtils, + UCBase, + Windows; + +type + TMsgRecForm = class(TForm) + Panel1: TPanel; + lbTitulo: TLabel; + Image1: TImage; + lbDE: TLabel; + stDe: TStaticText; + lbAssunto: TLabel; + stAssunto: TStaticText; + lbMensagem: TLabel; + MemoMsg: TMemo; + btFechar: TBitBtn; + lbData: TLabel; + stData: TStaticText; + procedure btFecharClick(Sender: TObject); + procedure FormCreate(Sender: TObject); //added by fduenas + private + { Private declarations } + public + { Public declarations } + end; + +var + MsgRecForm: TMsgRecForm; + +implementation + +uses + UCMessages; + +{$R *.dfm} + +procedure TMsgRecForm.btFecharClick(Sender: TObject); +begin + Close; +end; + +procedure TMsgRecForm.FormCreate(Sender: TObject); +begin + //added by fduenas + if not (Self.Owner is TUCApplicationMessage) then + Exit; + with TUCApplicationMessage(Self.Owner).UserControl.UserSettings.AppMessages do + begin + Self.Caption := MsgRec_WindowCaption; + lbTitulo.Caption := MsgRec_Title; + lbDE.Caption := MsgRec_LabelFrom; + lbData.Caption := MsgRec_LabelDate; + lbAssunto.Caption := MsgRec_LabelSubject; + lbMensagem.Caption := MsgRec_LabelMessage; + btFechar.Caption := MsgRec_BtClose; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Source/MsgsForm_U.dfm b/internal/2.31RC1/1/Source/MsgsForm_U.dfm new file mode 100644 index 0000000..905767a --- /dev/null +++ b/internal/2.31RC1/1/Source/MsgsForm_U.dfm @@ -0,0 +1,1153 @@ +object MsgsForm: TMsgsForm + Left = 144 + Top = 150 + BorderStyle = bsDialog + Caption = 'Mensagens do Sistema' + ClientHeight = 452 + ClientWidth = 598 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Splitter1: TSplitter + Left = 0 + Top = 237 + Width = 598 + Height = 6 + Cursor = crVSplit + Align = alTop + Beveled = True + end + object ListView1: TListView + Left = 0 + Top = 52 + Width = 598 + Height = 185 + Align = alTop + Columns = < + item + Caption = 'Remetente' + MaxWidth = 300 + MinWidth = 50 + Width = 150 + end + item + Caption = 'Assunto' + MaxWidth = 500 + MinWidth = 50 + Width = 300 + end + item + Caption = 'Data' + MaxWidth = 150 + MinWidth = 50 + Width = 100 + end> + HideSelection = False + MultiSelect = True + ReadOnly = True + RowSelect = True + SmallImages = ImageList1 + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = ListView1ColumnClick + OnCompare = ListView1Compare + OnDblClick = ListView1DblClick + OnSelectItem = ListView1SelectItem + end + object ToolBar1: TToolBar + Left = 0 + Top = 0 + Width = 598 + Height = 52 + ButtonHeight = 44 + ButtonWidth = 94 + Caption = 'Op'#231#245'es' + Images = ImageList2 + ShowCaptions = True + TabOrder = 1 + object btnova: TToolButton + Left = 0 + Top = 2 + Caption = '&Nova Mensagem' + ImageIndex = 0 + OnClick = btnovaClick + end + object btResponder: TToolButton + Left = 94 + Top = 2 + Caption = '&Responder' + ImageIndex = 1 + OnClick = btResponderClick + end + object btEncaminhar: TToolButton + Left = 188 + Top = 2 + Caption = 'E&ncaminhar' + ImageIndex = 2 + OnClick = btEncaminharClick + end + object btExcluir: TToolButton + Left = 282 + Top = 2 + Caption = '&Excluir' + ImageIndex = 3 + OnClick = btExcluirClick + end + object btClose: TToolButton + Left = 376 + Top = 2 + Caption = '&Fechar' + ImageIndex = 4 + OnClick = btCloseClick + end + end + object MemoMsg: TMemo + Left = 0 + Top = 243 + Width = 598 + Height = 209 + Align = alClient + ReadOnly = True + TabOrder = 2 + end + object ImageList1: TImageList + Height = 14 + Left = 48 + Top = 88 + Bitmap = { + 494C010102000400040010000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000000E0000000100200000000000000E + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000007B7B7B00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00000000007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00000000007B7B7B0000000000FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007B7B7B00FFFFFF0000000000000000007B7B7B00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF00FFFFFF007B7B7B00FFFFFF007B7B7B00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007B7B7B000000000000000000000000007B7B7B0000000000FFFF + FF00000000000000000000000000000000000000000000000000000000007B7B + 7B007B7B7B007B7B7B007B7B7B00000000007B7B7B007B7B7B007B7B7B007B7B + 7B00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007B7B7B00FFFFFF00000000000000000000000000000000007B7B7B00FFFF + FF00000000000000000000000000000000000000000000000000000000007B7B + 7B0000000000FFFFFF0000000000000000000000000000000000000000007B7B + 7B00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00007B7B7B0000000000000000000000000000000000000000007B7B7B000000 + 0000FFFFFF000000000000000000000000000000000000000000000000000000 + 00007B7B7B00FFFFFF00000000000000000000000000000000007B7B7B00FFFF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000007B7B + 7B00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF007B7B + 7B00FFFFFF000000000000000000000000000000000000000000000000000000 + 00007B7B7B0000000000FFFFFF000000000000000000000000007B7B7B000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000007B7B + 7B007B7B7B007B7B7B007B7B7B00FFFFFF007B7B7B007B7B7B007B7B7B007B7B + 7B00000000000000000000000000000000000000000000000000000000000000 + 0000000000007B7B7B00FFFFFF0000000000000000007B7B7B00FFFFFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000007B7B7B0000000000FFFFFF00000000007B7B7B00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00000000007B7B7B0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000007B7B7B00FFFFFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000007B7B7B007B7B7B007B7B7B0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000007B7B7B000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 28000000400000000E0000000100010000000000700000000000000000000000 + 000000000000000000000000FFFFFF00FE7FFC3F00000000FD3FFC3F00000000 + FD5FFC3F00000000F99FF00700000000FBAFE10700000000F3CFEBEF00000000 + F7D7F3CF00000000E087F5DF00000000E00FF99F00000000FC3FFABF00000000 + FC3FFC3F00000000FC3FFD7F00000000FC3FFE7F00000000FC7FFEFF00000000 + 00000000000000000000000000000000000000000000} + end + object ImageList2: TImageList + Height = 24 + Width = 24 + Left = 216 + Top = 328 + Bitmap = { + 494C010105000900040018001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 000000000000360000002800000060000000480000000100200000000000006C + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900A54A + 2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A + 2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A + 2100A54A2100A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFF7 + F700DEC6BD00D6C6B500D6BDB500CEBDAD00CEB5AD00C6B5A500C6AD9C00BDAD + 9C00BDA59C00BDA59400B5A59400B59C8C00B59C8C00B59C8C00B59C8C00B59C + 8C00B59C8C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7 + DE00E7DED600E7DED600E7D6CE00E7D6CE00DECEC600DECEC600DECEBD00DECE + BD00B59C8C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EFE700EFE7E700EFE7 + DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6CE00DECEC600DECEC600DECE + BD00B59C8C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EFE700EFE7 + E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6CE00DECEC600DECE + C600B59C8C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EF + E700EFE7E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6CE00DECE + C600B59C8C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EF + EF00F7EFE700EFE7E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6 + CE00B59C8C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EF + EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6 + CE00B5A59400A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7 + F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7DE00EFDEDE00E7DE + D600BDA59400A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7 + F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7DE00EFDE + DE00BDA59C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFF7F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7 + DE00BDAD9C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFF7F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7 + DE00C6AD9C00A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7 + E700C6B5A500A54A210000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00BDCEF70000009C0000009C0000009C000000 + 9C0000009C0000009C0000009C00C608FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF000031FF00294ACE001842CE001039C6000029 + C6000029C6000029C6000029C60000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900A54A + 2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A + 2100A54A2100A54A2100A54A21000031FF003152D600B5C6F7009CADF7001039 + C6009CADF700B5C6F7000029C60000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000CE732900D66B + 0000D66B0000D66B0000D66B0000D66B0000D66B0000D66B0000D66B0000D66B + 0000D66B0000D66B0000D66B00000031FF004263D600CED6F700F7F7FF009CAD + F700F7F7FF009CADF7000029C60000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000E7426300E78C + 2900EF943100EF943100EF943100EF943100EF943100EF943100EF943100EF94 + 3100EF943100EF943100EF9431000031FF004A63D6004A63D600D6DEFF00FFFF + FF009CADF7001839CE000831C60000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FF10DE00E742 + 6300DE7B0800DE7B0800DE7B0800DE7B0800DE7B0800DE7B0800DE7B0800DE7B + 0800DE7B0800DE7B0800DE7B08000031FF004A63DE008CA5EF00F7F7FF00CED6 + FF00F7F7FF009CADF7001839CE0000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000031FF005A73E700B5C6F7008C9CEF004A63 + D6009CADF700B5C6F700214ACE0000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000031FF006B84E7005A73E7004A63DE004A63 + D6004A63D600395AD6003152D60000009C000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C608FF000031FF000031FF000031FF000031 + FF000031FF000031FF000031FF00C608FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000005A185A000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000009C3100000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A5006B4231006B42 + 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42 + 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42 + 31006B4231006B4231006B423100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000005A185A005A185A000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000009C3100009C31 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000018D6000018D6000000000000000000C6B5A500DED6C600B5A5 + 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5 + 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5 + 9400B5A59400B5A594006B423100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000005A185A00B56BAD00B563A5005A18 + 5A005A185A005A185A005A185A005A185A000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000D66331009C3100009C3100009C3100009C3100009C310000DE8C + 63009C3100000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000018D6000018D6000018D6000000000000000000C6B5A500B5A59400DED6 + C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6 + C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6 + C600DED6C600B5A594006B42310000000000C6B5A5006B4231006B4231006B42 + 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42 + 31006B4231006B423100B5A594005A185A00C67BBD00C67BBD00BD6BB500B563 + AD00AD5AA500A5529C009C4A94005A185A00C6B5A5006B4231006B4231006B42 + 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42 + 3100B5A59400D6633100FFC6A500FFB58C00FFAD8C00FFAD8400F7A57B00EF9C + 7300E7946B009C310000000000000000000000000000000000000018D6000018 + D6000018D6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000018 + D6000018D6000018D600000000000000000000000000C6B5A500DED6C600B5A5 + 9400E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE + D600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE + D600B5A59400B5A594006B42310000000000C6B5A500DED6C600B5A59400B5A5 + 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5 + 9400B5A59400DECEBD005A185A00CE84BD00CE84BD00CE84BD00C67BBD00BD6B + B500B563AD00AD5AA500A5529C005A185A00C6B5A500DED6C600B5A59400B5A5 + 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5 + 9400DECEBD00D6633100FFC6A500FFB58C00FFB58C00FFB58C00FFAD8400F7A5 + 7B00EF9C7300E7946B009C3100000000000000000000000000000018D6000018 + D6000018D6000018D60000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000018D6000018D6000018 + D6000018D60000000000000000000000000000000000C6B5A500E7D6CE00E7D6 + CE00B5A59400EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7 + DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00B5A5 + 9400DED6C600B5A594006B42310000000000C6B5A500B5A59400DED6C600DED6 + C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6 + C600DED6C6005A185A00D6A5CE00CE84BD00CE84BD00CE84BD00CE84BD00C67B + BD00BD6BB500B563AD00AD5AA5005A185A00C6B5A500B5A59400DED6C600DED6 + C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6 + C600DED6C600D6633100FFC6A500FFB58C00FFB58C00FFB58C00FFB58C00FFAD + 8400F7A57B00EF9C7300E7946B009C31000000000000000000000018D6000018 + D6000018D6000018D6000018D600000000000000000000000000000000000000 + 0000000000000000000000000000000000000018D6000018D6000018D6000018 + D6000000000000000000000000000000000000000000C6B5A500EFDEDE00EFDE + DE00EFDEDE00B5A59400F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EF + EF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00B5A59400E7DE + D600E7DED600B5A594006B42310000000000C6B5A500DED6C600B5A59400E7DE + D600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE + D600E7DED600E7DED600A5429400D6A5CE00CE84BD00CE84BD00CE84BD00CE84 + BD00C67BBD00BD6BB500B563AD005A185A00C6B5A500DED6C600B5A59400E7DE + D600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE + D600E7DED600D6633100FFC6A500FFB58C00FFB58C00FFB58C00FFB58C00FFB5 + 8C00FFAD8400F7A57B009C310000000000000000000000000000000000000018 + D6000018D6000018D6000018D6000018D6000000000000000000000000000000 + 00000000000000000000000000000018D6000018D6000018D6000018D6000000 + 00000000000000000000000000000000000000000000C6B5A500EFE7E700EFE7 + E700EFE7E700EFE7E700B5A59400F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700B5A59400EFE7DE00EFE7 + DE00EFE7DE00B5A594006B42310000000000C6B5A500E7D6CE00E7D6CE00B5A5 + 9400EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7 + DE00EFE7DE00EFE7DE00EFE7DE00A5429400D6A5CE00CE84BD00CE84BD00CE84 + BD00CE84BD00CE84BD00CE84BD005A185A00C6B5A500E7D6CE00E7D6CE00B5A5 + 9400EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7 + DE00EFE7DE00D6633100FFC6A500FFC6A500FFC6A500FFC6A500FFC6A500FFC6 + A500FFB58C009C31000000000000000000000000000000000000000000000000 + 00000018FF000018D6000018D6000018D6000018D60000000000000000000000 + 000000000000000000000018D6000018D6000018D6000018D600000000000000 + 00000000000000000000000000000000000000000000C6B5A500F7EFE700F7EF + E700F7EFE700F7EFE700F7EFE700B5A59400FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B5A59400F7EFEF00F7EFEF00F7EF + EF00F7EFEF00B5A594006B42310000000000C6B5A500EFDEDE00EFDEDE00EFDE + DE00B5A59400F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EF + EF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00A5429400D6A5CE00A5429400A542 + 9400A5429400A5429400A5429400A5429400C6B5A500EFDEDE00EFDEDE00EFDE + DE00B5A59400F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EF + EF00F7EFEF00D6633100D6633100D6633100D6633100D6633100D6633100FFC6 + A5009C3100000000000000000000000000000000000000000000000000000000 + 000000000000000000000018D6000018D6000018D6000018D600000000000000 + 00000018D6000018D6000018D6000018D6000018D60000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A500F7EFEF00F7EF + EF00F7EFEF00F7EFEF00B5A59400EFE7E700B5A59400FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00B5A59400DEC6C600B5A59400F7F7F700F7F7 + F700F7F7F700B5A594006B42310000000000C6B5A500EFE7E700EFE7E700EFE7 + E700EFE7E700B5A59400F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700B5A59400EFE7DE00A5429400A5429400DECE + BD00B5A59400000000000000000000000000C6B5A500EFE7E700EFE7E700EFE7 + E700EFE7E700B5A59400F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700B5A59400EFE7DE00EFE7DE00D66331009C31 + 0000B5A594000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000018D6000018D6000018D6000018D6000018 + D6000018D6000018D6000018D6000018D6000000000000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A500FFF7F700FFF7 + F700FFF7F700B5A59400EFE7E700FFFFF700EFE7E700B5A59400B5A59400B5A5 + 9400B5A59400B5A59400B5A59400DEC6C600DECEBD00DEC6C600B5A59400FFFF + FF00FFFFFF00B5A594006B42310000000000C6B5A500F7EFE700F7EFE700F7EF + E700F7EFE700F7EFE700B5A59400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00B5A59400F7EFEF00F7EFEF00F7EFEF00A5429400DECE + BD006B423100000000000000000000000000C6B5A500F7EFE700F7EFE700F7EF + E700F7EFE700F7EFE700B5A59400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00B5A59400F7EFEF00F7EFEF00F7EFEF009C310000DECE + BD006B4231000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000018D6000018D6000018FF000018 + D6000018FF000018D6000018D600000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A500FFFFFF00FFFF + FF00B5A59400EFE7E700FFFFFF00FFFFFF00FFFFF700EFE7E700EFE7E700EFE7 + E700EFE7E700EFE7E700EFE7E700E7D6CE00E7D6CE00DECEC600DEC6C600B5A5 + 9400FFFFFF00B5A594006B42310000000000C6B5A500F7EFEF00F7EFEF00F7EF + EF00F7EFEF00B5A59400DEC6C600B5A59400FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00B5A59400DEC6C600B5A59400F7F7F700F7F7F700F7F7F700B5A5 + 94006B423100000000000000000000000000C6B5A500F7EFEF00F7EFEF00F7EF + EF00F7EFEF00B5A59400DEC6C600B5A59400FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00B5A59400DEC6C600B5A59400F7F7F700F7F7F700F7F7F700B5A5 + 94006B4231000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000018D6000018D6000018 + D6000018FF000018D60000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A500FFFFFF00BDA5 + 9400FFFFFF00FFFFFF00B5A59400B5A59400B5A59400B5A59400B5A59400B5A5 + 9400B5A59400B5A59400B5A59400B5A59400B5A59400E7D6CE00DECEC600CEB5 + A500B5A59400F7F7EF006B42310000000000C6B5A500FFF7F700FFF7F700FFF7 + F700B5A59400DEC6C600B5E7FF00ADDEFF00B5A59400B5A59400B5A59400B5A5 + 9400B5A59400DEC6C60073C6FF006BC6FF00B5A59400FFFFFF00FFFFFF00B5A5 + 94006B423100000000000000000000000000C6B5A500FFF7F700FFF7F700FFF7 + F700B5A59400DEC6C600B5E7FF00ADDEFF00B5A59400B5A59400B5A59400B5A5 + 9400B5A59400DEC6C60073C6FF006BC6FF00B5A59400FFFFFF00FFFFFF00B5A5 + 94006B4231000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000018D6000018D6000018FF000018 + D6000018D6000018FF000018FF00000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A500B5A59400CEB5 + A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7 + F700F7F7EF00F7EFEF00EFE7E700EFE7DE00EFDED600E7D6CE00E7D6CE00CEB5 + A500DEC6C600D6A59C006B42310000000000C6B5A500FFFFFF00FFFFFF00B5A5 + 9400DEC6C600C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDEFF0094D6 + FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400FFFFFF00B5A5 + 94006B423100000000000000000000000000C6B5A500FFFFFF00FFFFFF00B5A5 + 9400DEC6C600C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDEFF0094D6 + FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400FFFFFF00B5A5 + 94006B4231000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000018D6000018D6000018FF000018D6000018 + FF000018FF000018FF000018D6000018FF000000000000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A50021A5EF00CEB5 + A500FFFFFF00FFFFFF00B5A59400B5A59400B5A59400B5A59400B5A59400B5A5 + 9400B5A59400B5A59400B5A59400B5A59400B5A59400EFDED600E7D6CE00CEB5 + A50021A5EF00B5A594006B42310000000000C6B5A500FFFFFF00BDA59400DEC6 + C600D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDE + FF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400F7F7 + EF006B423100000000000000000000000000C6B5A500FFFFFF00BDA59400DEC6 + C600D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDE + FF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400F7F7 + EF006B4231000000000000000000000000000000000000000000000000000000 + 000000000000000000000018FF000018FF000018FF000018D6000018FF000000 + 0000000000000018FF000018FF000018FF000018FF0000000000000000000000 + 00000000000000000000000000000000000000000000C6B5A50021A5EF00CEB5 + A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFF7F700F7F7EF00F7EFEF00EFE7E700EFE7DE00EFDED600CEB5 + A50021A5EF00B5A594006B42310000000000C6B5A500B5A59400DEC6C600DEF7 + FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DE + FF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00D6A5 + 9C006B423100000000000000000000000000C6B5A500B5A59400DEC6C600DEF7 + FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DE + FF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00D6A5 + 9C006B4231000000000000000000000000000000000000000000000000000000 + 0000000000000018FF000018FF000018D6000018FF000018FF00000000000000 + 000000000000000000000018FF000018FF000018FF000018FF00000000000000 + 0000000000000000000000000000000000000000000000000000C6B5A500CEB5 + A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5 + A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5 + A500BDA594006B4231000000000000000000C6B5A500DEC6C600DEF7FF00DEF7 + FF00DEF7FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDE + FF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6 + FF006B423100000000000000000000000000C6B5A500DEC6C600DEF7FF00DEF7 + FF00DEF7FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDE + FF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6 + FF006B4231000000000000000000000000000000000000000000000000000000 + 00000018FF000018FF000018FF000018FF000018FF0000000000000000000000 + 0000000000000000000000000000000000000018FF000018FF000018FF000000 + 000000000000000000000000000000000000000000000000000000000000C6B5 + A500DEF7FF00DEF7FF00DEF7FF00D6F7FF00C6EFFF00B5E7FF00A5DEFF009CD6 + FF008CD6FF007BCEFF006BC6FF005ABDFF004ABDFF0042B5FF0042B5FF00B5A5 + 94006B42310000000000000000000000000000000000C6B5A500DEF7FF00DEF7 + FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7FF00B5E7 + FF00ADDEFF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF006B42 + 31000000000000000000000000000000000000000000C6B5A500DEF7FF00DEF7 + FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7FF00B5E7 + FF00ADDEFF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF006B42 + 3100000000000000000000000000000000000000000000000000000000000018 + FF000018FF000018FF000018FF000018FF000000000000000000000000000000 + 000000000000000000000000000000000000000000000018FF000018FF000018 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000C6B5A500DEF7FF00DEF7FF00DEF7FF00D6F7FF00C6EFFF00B5E7FF00A5DE + FF009CD6FF0094D6FF0084CEFF0073CEFF0063C6FF0052BDFF00B5A594006B42 + 3100000000000000000000000000000000000000000000000000C6B5A500DEF7 + FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7 + FF00B5E7FF00ADE7FF00A5DEFF009CDEFF0094D6FF008CD6FF006B4231000000 + 0000000000000000000000000000000000000000000000000000C6B5A500DEF7 + FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7 + FF00B5E7FF00ADE7FF00A5DEFF009CDEFF0094D6FF008CD6FF006B4231000000 + 00000000000000000000000000000000000000000000000000000018FF000018 + FF000018FF000018FF000018FF00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000018 + FF00000000000000000000000000000000000000000000000000000000000000 + 000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00CEEFFF00BDE7 + FF00ADE7FF009CDEFF0094D6FF0084CEFF0073CEFF00B5A594006B4231000000 + 000000000000000000000000000000000000000000000000000000000000C6B5 + A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EF + FF00BDE7FF00B5E7FF00ADE7FF00A5DEFF009CDEFF006B423100000000000000 + 000000000000000000000000000000000000000000000000000000000000C6B5 + A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EF + FF00BDE7FF00B5E7FF00ADE7FF00A5DEFF009CDEFF006B423100000000000000 + 000000000000000000000000000000000000000000000018FF000018FF000018 + FF000018FF000018FF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00CEEF + FF00BDE7FF00ADE7FF009CDEFF0094D6FF00B5A594006B423100000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEF + FF00C6EFFF00BDE7FF00B5E7FF00ADE7FF006B42310000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEF + FF00C6EFFF00BDE7FF00B5E7FF00ADE7FF006B42310000000000000000000000 + 000000000000000000000000000000000000000000000018FF000018FF000018 + FF000018FF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7 + FF00CEEFFF00BDE7FF00ADE7FF009CDEFF006B42310000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7 + FF00CEEFFF00C6EFFF00BDE7FF006B4231000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7 + FF00CEEFFF00C6EFFF00BDE7FF006B4231000000000000000000000000000000 + 000000000000000000000000000000000000000000000018FF000018FF000018 + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C6B5A500C6B5A500C6B5A500C6B5 + A500C6B5A500C6B5A500C6B5A500C6B5A5000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7 + FF00D6F7FF00CEEFFF006B423100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7 + FF00D6F7FF00CEEFFF006B423100000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6B5A500C6B5A500C6B5A500C6B5A500C6B5 + A500C6B5A500C6B5A50000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C6B5A500C6B5A500C6B5A500C6B5A500C6B5 + A500C6B5A500C6B5A50000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000060000000480000000100010000000000600300000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFFFF000000000000000000FFFFFF00 + 0000000000000000C00003000000000000000000C00003000000000000000000 + C00003000000000000000000C00003000000000000000000C000030000000000 + 00000000C00003000000000000000000C00003000000000000000000C0000300 + 0000000000000000C00003000000000000000000C00003000000000000000000 + C00003000000000000000000C00003000000000000000000C000030000000000 + 00000000C00000000000000000000000C00000000000000000000000C0000000 + 0000000000000000C00000000000000000000000C00000000000000000000000 + C00000000000000000000000FFFE00000000000000000000FFFE000000000000 + 00000000FFFE00000000000000000000FFFFFFFFFFDFFFFFDFFFFFFF800001FF + FF9FFFFFCFFFFFF9800001FFFF00FFF807FFFFF1800001000000000003C7FFE3 + 800001000000000001C3FF87800001000000000000C1FF0F8000010000000000 + 01E0FE1F800001000000000003F07C3F800001000000000007FC307F80000100 + 0007000007FE00FF800001000007000007FF01FF800001000007000007FF83FF + 800001000007000007FF01FF800001000007000007FE00FF8000010000070000 + 07FC187F800001000007000007F83C3FC00003000007000007F07F1FE0000780 + 000F80000FE0FF8FF0000FC0001FC0001FC1FFEFF8001FE0003FE0003F83FFFF + FC003FF0007FF0007F87FFFFFE007FF800FFF800FF8FFFFFFF00FFFC01FFFC01 + FFFFFFFFFFFFFFFE03FFFE03FFFFFFFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/internal/2.31RC1/1/Source/MsgsForm_U.pas b/internal/2.31RC1/1/Source/MsgsForm_U.pas new file mode 100644 index 0000000..6913efe --- /dev/null +++ b/internal/2.31RC1/1/Source/MsgsForm_U.pas @@ -0,0 +1,346 @@ +unit MsgsForm_U; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5_UP} + Variants, +{$ENDIF} + Classes, + ComCtrls, + Controls, + DB, + Dialogs, + ExtCtrls, + Forms, + Graphics, + ImgList, + Messages, + StdCtrls, + SysUtils, + ToolWin, + Windows; + +type + TPointMsg = ^PPointMsg; + + PPointMsg = record + IdMsg: Integer; + Msg: String; + end; + + TMsgsForm = class(TForm) + ImageList1: TImageList; + ListView1: TListView; + ToolBar1: TToolBar; + btnova: TToolButton; + ImageList2: TImageList; + btResponder: TToolButton; + btEncaminhar: TToolButton; + btExcluir: TToolButton; + Splitter1: TSplitter; + btClose: TToolButton; + MemoMsg: TMemo; + procedure btCloseClick(Sender: TObject); + procedure btnovaClick(Sender: TObject); + procedure ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); + procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn); + procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); + procedure ListView1DblClick(Sender: TObject); + procedure btExcluirClick(Sender: TObject); + procedure btEncaminharClick(Sender: TObject); + procedure btResponderClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + private + FColuna: Integer; + FAsc: Boolean; + FListaTPointMsg: array of TPointMsg; + procedure MontaTela; + public + DSMsgs: TDataset; + DSUsuarios: TDataset; + end; + +var + MsgsForm: TMsgsForm; + +implementation + +uses + EnvMsgForm_U, + MsgRecForm_U, + UCBase; + +{$R *.dfm} + +procedure TMsgsForm.btCloseClick(Sender: TObject); +begin + Close; +end; + +procedure TMsgsForm.btnovaClick(Sender: TObject); +begin + EnvMsgForm := TEnvMsgForm.Create(Self.Owner); + EnvMsgForm.DataSource1.DataSet := DSUsuarios; + EnvMsgForm.Showmodal; + FreeAndNil(EnvMsgForm); +end; + +function FmtDtHr(dt: String): String; +begin + Result := Copy(dt, 7, 2) + '/' + Copy(dt, 5, 2) + '/' + Copy(dt, 1, 4) + ' ' + Copy(dt, 9, 2) + ':' + Copy(dt, 11, 2); +end; + +procedure TMsgsForm.MontaTela; +var + TempPoint: TPointMsg; +begin + DSMsgs.Open; + while not DSMsgs.EOF do + begin + with ListView1.Items.Add do + begin + ImageIndex := -1; + StateIndex := -1; + Caption := DSMsgs.FieldByName('de').AsString; + SubItems.Add(DSMsgs.FieldByName('Subject').AsString); + SubItems.Add(FmtDtHr(DSMsgs.FieldByName('DtSend').AsString)); + New(TempPoint); + SetLength(FListaTPointMsg, Length(FListaTPointMsg) + 1); + FListaTPointMsg[High(FListaTPointMsg)] := TempPoint; + TempPoint.IdMsg := DSMsgs.FieldByName('idMsg').AsInteger; + TempPoint.Msg := DSMsgs.FieldByName('Msg').AsString; + Data := TempPoint; + end; + DSMsgs.Next; +{$IFDEF DELPHI5} + ListView1.Selected := nil; +{$ELSE} + ListView1.ItemIndex := 0; +{$ENDIF} + + end; + DSMsgs.Close; +end; + +procedure TMsgsForm.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); +begin + if ListView1.SelCount > 1 then + begin + btResponder.Enabled := False; + btEncaminhar.Enabled := False; + end + else + begin + btResponder.Enabled := True; + btEncaminhar.Enabled := True; + end; + MemoMsg.Text := TPointMsg(Item.Data).Msg; +end; + +procedure TMsgsForm.ListView1ColumnClick(Sender: TObject; Column: TListColumn); +begin + if FColuna = Column.Index then + begin + FAsc := not FAsc; + ListView1.Columns[FColuna].ImageIndex := integer(FAsc); + end + else + begin + ListView1.Columns[FColuna].ImageIndex := -1; + FColuna := Column.Index; + FAsc := True; + ListView1.Columns[FColuna].ImageIndex := integer(FAsc); + end; + (Sender as TCustomListView).AlphaSort; +end; + +procedure TMsgsForm.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); +var + ix: Integer; +begin + if FColuna = 0 then + begin + if FAsc then + Compare := CompareText(Item1.Caption, Item2.Caption) + else + Compare := CompareText(Item2.Caption, Item1.Caption); + end + else + begin + ix := FColuna - 1; + if FAsc then + Compare := CompareText(Item1.SubItems[ix], Item2.SubItems[ix]) + else + Compare := CompareText(Item2.SubItems[ix], Item1.SubItems[ix]); + end; +end; + +procedure TMsgsForm.ListView1DblClick(Sender: TObject); +begin + if ListView1.Selected = nil then + exit; //added to prevent AV error {fduenas} + MsgRecForm := TMsgRecForm.Create(Self.Owner); //midifed by fduenas + + MsgRecForm.MemoMsg.Text := TPointMsg(ListView1.Selected.Data).Msg; + MsgRecForm.stDe.Caption := ListView1.Selected.Caption; + MsgRecForm.stAssunto.Caption := ListView1.Selected.SubItems[0]; + MsgRecForm.stData.Caption := ListView1.Selected.SubItems[1]; + + MsgRecForm.ShowModal; + FreeAndNil(MsgRecForm); +end; + +procedure TMsgsForm.btExcluirClick(Sender: TObject); +var + contador: Integer; +begin +{$IFDEF DELPHI5} + if ListView1.Selected = nil then + begin + //Modfied by fduenas + MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected), + PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), + MB_ICONINFORMATION + MB_OK); + Exit; + end; +{$ELSE} + if ListView1.ItemIndex = -1 then + begin + //Modfied by fduenas + MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected), + PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), + MB_ICONINFORMATION or mb_OK); + Exit; + end; +{$ENDIF} + + if ListView1.SelCount = 1 then + begin + TUCApplicationMessage(Owner).DeleteAppMessage(TPointMsg(ListView1.Selected.Data).idMsg); + {$IFDEF DELPHI5} + ListView1.Selected.Delete; + {$ELSE} + ListView1.DeleteSelected; + {$ENDIF} + end + else + begin + for contador := 0 to LIstView1.Items.Count - 1 do + if ListView1.items[contador].selected then + TUCApplicationMessage(Owner).DeleteAppMessage(TPointMsg(ListView1.items[contador].Data).idMsg); + {$IFDEF DELPHI5} + ListView1.Selected.Delete; + {$ELSE} + ListView1.DeleteSelected; + {$ENDIF} + end; + +end; + +procedure TMsgsForm.btEncaminharClick(Sender: TObject); +var + contador: Integer; +begin +{$IFDEF DELPHI5} + if ListView1.Selected = nil then + begin + //Modfied by fduenas + MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected), + PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), + MB_ICONINFORMATION or mb_OK); + Exit; + end; +{$ELSE} + if ListView1.ItemIndex = -1 then + begin + //Modfied by fduenas + MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected), + PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), + MB_ICONINFORMATION or mb_OK); + Exit; + end; +{$ENDIF} + try + EnvMsgForm := TEnvMsgForm.Create(Self.Owner); + EnvMsgForm.DataSource1.DataSet := DSUsuarios; + if EnvMsgForm.dbUsuario.Text <> '' then + EnvMsgForm.dbUsuario.Enabled := False; + EnvMsgForm.EditAssunto.Text := Copy('Enc: ' + ListView1.Selected.SubItems[0], 1, EnvMsgForm.EditAssunto.MaxLength); + EnvMsgForm.MemoMsg.Text := TPointMsg(ListView1.Selected.Data).Msg; + for contador := 0 to EnvMsgForm.MemoMsg.Lines.Count - 1 do + EnvMsgForm.MemoMsg.Lines[contador] := '>' + EnvMsgForm.MemoMsg.Lines[contador]; + EnvMsgForm.MemoMsg.Lines.Insert(0, ListView1.Selected.Caption + ' ' + ListView1.Selected.SubItems[1]); + EnvMsgForm.MemoMsg.Text := Copy(EnvMsgForm.MemoMsg.Text, 1, EnvMsgForm.MemoMsg.MaxLength); + EnvMsgForm.Showmodal; + finally + FreeAndNil(EnvMsgForm); + end; +end; + +procedure TMsgsForm.btResponderClick(Sender: TObject); +begin +{$IFDEF DELPHI5} + if ListView1.Selected = nil then + begin + //Modfied by fduenas + MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected), PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), MB_ICONINFORMATION + MB_OK); + Exit; + end; +{$ELSE} + if ListView1.ItemIndex = -1 then + begin + //Modfied by fduenas + MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected), + PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), + MB_ICONINFORMATION or mb_OK); + Exit; + end; +{$ENDIF} + try + EnvMsgForm := TEnvMsgForm.Create(Self.Owner); + EnvMsgForm.rbUsuario.Checked := True; + EnvMsgForm.rbTodos.Enabled := False; + DSMsgs.Open; + DSMsgs.Locate('idMsg', TPointMsg(ListView1.Selected.Data).idMsg, []); + EnvMsgForm.DataSource1.DataSet := DSUsuarios; + EnvMsgForm.dbUsuario.KeyValue := DSMsgs.FieldByName('UsrFrom').AsInteger; + if EnvMsgForm.dbUsuario.Text <> '' then + EnvMsgForm.dbUsuario.Enabled := False; + EnvMsgForm.EditAssunto.Text := Copy('Re: ' + ListView1.Selected.SubItems[0], 1, EnvMsgForm.EditAssunto.MaxLength); + EnvMsgForm.Showmodal; + finally + DSMsgs.Close; + FreeAndNil(EnvMsgForm); + end; +end; + +procedure TMsgsForm.FormClose(Sender: TObject; var Action: TCloseAction); +var + I: Integer; +begin + for I := 0 to High(FListaTPointMsg) do + Dispose(FListaTPointMsg[I]); + + if Assigned(DSMsgs) then + SysUtils.FreeAndNil(DSMsgs); + + if Assigned(DSUsuarios) then + SysUtils.FreeAndNil(DSUsuarios); +end; + +procedure TMsgsForm.FormCreate(Sender: TObject); +begin + SetLength(FListaTPointMsg, 0); +end; + +procedure TMsgsForm.FormShow(Sender: TObject); +begin + MontaTela; +end; + +end. diff --git a/internal/2.31RC1/1/Source/SenhaForm_U.dfm b/internal/2.31RC1/1/Source/SenhaForm_U.dfm new file mode 100644 index 0000000..3ad53eb --- /dev/null +++ b/internal/2.31RC1/1/Source/SenhaForm_U.dfm @@ -0,0 +1,73 @@ +object SenhaForm: TSenhaForm + Left = 355 + Top = 241 + ActiveControl = edtSenha + BorderStyle = bsDialog + Caption = 'Digitar Senha...' + ClientHeight = 145 + ClientWidth = 244 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object LabelSenha: TLabel + Left = 16 + Top = 7 + Width = 30 + Height = 13 + Caption = 'Senha' + end + object LabelConfirma: TLabel + Left = 16 + Top = 51 + Width = 30 + Height = 13 + Caption = 'Senha' + end + object edtSenha: TEdit + Left = 16 + Top = 23 + Width = 217 + Height = 21 + Ctl3D = True + ParentCtl3D = False + PasswordChar = '*' + TabOrder = 0 + end + object edtConfirmaSenha: TEdit + Left = 16 + Top = 67 + Width = 217 + Height = 21 + Ctl3D = True + ParentCtl3D = False + PasswordChar = '*' + TabOrder = 1 + end + object btnOK: TBitBtn + Left = 44 + Top = 108 + Width = 75 + Height = 25 + TabOrder = 2 + Kind = bkOK + end + object BtCancel: TBitBtn + Left = 124 + Top = 108 + Width = 75 + Height = 25 + TabOrder = 3 + Kind = bkCancel + end +end diff --git a/internal/2.31RC1/1/Source/SenhaForm_U.pas b/internal/2.31RC1/1/Source/SenhaForm_U.pas new file mode 100644 index 0000000..ee9be2c --- /dev/null +++ b/internal/2.31RC1/1/Source/SenhaForm_U.pas @@ -0,0 +1,95 @@ +unit SenhaForm_U; + +interface + +{$I 'UserControl.inc'} + +uses + Buttons, + Classes, + Controls, + Dialogs, + Forms, + Graphics, + Messages, + StdCtrls, + SysUtils, + Variants, + Windows, + UCBase; + +type + TSenhaForm = class(TForm) + edtSenha: TEdit; + edtConfirmaSenha: TEdit; + btnOK: TBitBtn; + BtCancel: TBitBtn; + LabelSenha: TLabel; + LabelConfirma: TLabel; + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { Private declarations } + function CompararSenhas(Senha, ConfirmaSenha: String): Boolean; + public + fUserControl : TUserControl; + { Public declarations } + end; + +implementation + +{$R *.dfm} + +{ TForm1 } + +function TSenhaForm.CompararSenhas(Senha, ConfirmaSenha: String): Boolean; +begin + Result := False; + With fUserControl do + begin + if ( UserPasswordChange.ForcePassword ) and ( senha = '' ) then + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.PasswordRequired, mtWarning, [mbOK], 0) + else if Length( Senha ) < UserPasswordChange.MinPasswordLength then + MessageDlg(Format(UserSettings.CommonMessages.ChangePasswordError.MinPasswordLength, [UserPasswordChange.MinPasswordLength]), mtWarning, [mbOK], 0) + else if Pos(LowerCase(senha), 'abcdeasdfqwerzxcv1234567890321654987teste' + LowerCase(CurrentUser.UserName) + LowerCase(CurrentUser.UserLogin)) > 0 then + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword, mtWarning, [mbOK], 0) + else if ( senha <> confirmasenha ) then + MessageDlg( UserSettings.CommonMessages.ChangePasswordError.NewPasswordError , mtWarning, [mbOK], 0) + else result := true; + End; +end; + +procedure TSenhaForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TSenhaForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if not (ModalResult = mrCancel) then + begin + CanClose := CompararSenhas(edtSenha.Text, edtConfirmaSenha.Text); + if not CanClose then + edtSenha.SetFocus; + end; +end; + +procedure TSenhaForm.FormCreate(Sender: TObject); +begin + edtSenha.Clear; + edtConfirmaSenha.Clear; +end; + +procedure TSenhaForm.FormShow(Sender: TObject); +begin + edtSenha.CharCase := fUserControl.Login.CharCasePass; + edtConfirmaSenha.CharCase := fUserControl.Login.CharCasePass; + LabelSenha.Caption := fUserControl.UserSettings.Login.LabelPassword; + LabelConfirma.Caption := fUserControl.UserSettings.ChangePassword.LabelConfirm; + btnOK.Caption := fUserControl.UserSettings.Login.BtOk; + BtCancel.Caption := fUserControl.UserSettings.Login.BtCancel; +end; + +end. diff --git a/internal/2.31RC1/1/Source/TrocaSenha_U.dfm b/internal/2.31RC1/1/Source/TrocaSenha_U.dfm new file mode 100644 index 0000000..5bdaf68 --- /dev/null +++ b/internal/2.31RC1/1/Source/TrocaSenha_U.dfm @@ -0,0 +1,350 @@ +object TrocaSenha: TTrocaSenha + Left = 398 + Top = 263 + ActiveControl = EditAtu + BorderStyle = bsDialog + Caption = 'Seguran'#231'a' + ClientHeight = 163 + ClientWidth = 353 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnActivate = FormActivate + OnClose = FormClose + OnCloseQuery = FormCloseQuery + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 353 + Height = 35 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 0 + object lbDescricao: TLabel + Left = 47 + Top = 11 + Width = 124 + Height = 18 + Caption = 'Trocar Senha ' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 8 + Top = 4 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00F9F9F900F1F1F100EAEA + EA00E3E3E300E0E0E000DEDEDE00DFDFDF00D3D0CD0077594300694731006947 + 310069473100D8D1CD00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F6F6F600C5C7 + C5008E9F91006E8A70005E815C00527B4F004E7C4A004B7C48004A7C47004B7B + 480074574100EAD3BB00F4CA9F00E8BB8E0069473100626B570078817500A19F + 9F00D4D4D400FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00F2F4F30074967100487638004E7C35004E8334004B893300488E + 31004592300044962F0043972F0043982F00A08C7D00F3EEEB00FEF3E300FEE6 + CA00DFBF9A0069473100694731004C663600526C5200A9A9A900FAFAFA00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0094B3910058743900537B + 36004E8334004A8A33004690310043962F00409B2E003E9F2D003DA12D003DA1 + 2D00519F3E00A08C7D00EEEAE500FEF5EA00FCE6CB00E2B8900069473100545E + 2E00566736005A6F5700E5E5E500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00688D5B0055783700508035004B8833004790310043982F003F9E + 2D003BA42C0039A82B0037AB2A0037AB2A0038A92B004B9E3800A08C7D00EAE7 + E200FEF7EC00FCE8CC00D8B99400694731006947310054664600DEDEDE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E875100527C36004D84 + 3400488D320044962F003F9E2E003BA52C0037AC2A0034B1290032B4280032B5 + 280033B3280035AD2A004B9E3800A08C7D00E7E4DE00FDFAEF00FBE8CD00DEB6 + 8F0069473100535B3C00BEB7B400D4CCC900D3CBC800D9D2D000F9F9F800FFFF + FF00FFFFFF00729A6800507F35004B88330046913100419A2E003CA32C0037AB + 2A0033B328002FB927002DBE25002CBF25002EBC260031B6270036AD29004D9A + 3700A08C7D00E6E3DE00FEF9EF00FBE8CF00D4B6900069473100694731006947 + 31006947310069473100CFC5C000FCFCFC00FFFFFF00A5C6A700508136004A8A + 3300449330003F9D2E003AA62B0035AF290030B827002BBF250035B237002BBB + 2B0029C324002DBC260034B3280038A72A0050943900A08C7D00E4E1DA00FBF4 + EA00F8E3C700E6C39D00DFBB9100E1BD9300E3BE9300DAB2890069473100D8CF + C900FFFFFF00F6FAF70058904D00498B3200449530003E9E2D0039A82B0034B2 + 28002EBB26004BA34E00DEE0DF00DDEADF0044BB47002BC0250031B6270037AD + 2B003D9F2B00588D3F00A08C7D00F4EADE00FEF2E200FDEBD300FCE8CD00FCE5 + C700FCE3C200FFE1BB00DFBB950069473100FFFFFF00FFFFFF00D4E4D6004A8E + 3D00449530003E9E2D0039A82B0034B129002FA92C00A4B0A700E5E6E600E8E9 + E900CFDED20035B3340031B6270036AC2A003CA22C004E8F3800A08C7D00F0E5 + D700FDF1E100FBE7D300FAE4CD00FBE1C600FBDCBE00EED2B300F5D0A9006947 + 3100FFFFFF00FFFFFF00FFFFFF00D2E4D4004E984500409C2E003AA52C0035AE + 2900518B5400989B9F00798A96006B7F8C00757E85005B7F5D002D9E240038A9 + 2A003DA12D00508D3B00A08C7D00F1E6D700FCEDD900FAE1C900FBDFC300FCDD + BD00E0C2A600AA907B00EBC49F0069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00EDF4EF007BB57B003A9D2E00319131004F7C93004992C5004A98CF004897 + CE004592C800437DA400235437002C7F22004B9B4500A6B69E00A08C7D00F3E8 + D800FBEAD300FADDC000FADABA00DFC1A3009A806C008D6A5000EEC69F006947 + 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD3C7004C90 + AF0052A0D60052A0D500519FD4004F9DD3004C9AD1004997CE00438CBF004363 + 6700C1C2C100E6E2DF00A08C7D00E8DBCB00FDE9D100FDE2C300EFD4B800AD96 + 85008E705A00D9C19B00E1BC970069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00F5F6F70072ABD00056A4D90056A4D90056A4D90055A3D80054A2 + D70052A0D5004F9DD3004B99D000468DC000727D8400E5E4E300E2DDD900A08C + 7D00ECDFD100F9EEE000F4E7DA00F0E3D700F0E6D900E6D9CB0069473100E7E3 + DF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2C4DC005AA6DB005BA8 + DC005BA8DC005BA8DC005AA7DB0058A5DA0056A4D90053A1D600509ED4004B9A + D0004C7FA500ADADAD00FCFCFB00E6E1DE00A08C7D00A08C7D00A08C7D00A08C + 7D00A08C7D00A08C7D00EDEAE600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00E9EEF4005FA7D7005EABDF005FACE0005FACE0005FACE0005EABDF005CA9 + DD005AA7DB0057A4D90054A2D700509ED4004A95CA0076828B00F0F0F000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ADCDE20060ACE00061AEE20063B0 + E30063B0E30063B0E30061AEE2005FACE0005DAADE005AA7DC0056A4D90053A1 + D6004E9DD3005B7E9600DADADA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF007EB5DA0063B0E30065B2E50067B4E70068B4E70067B4E60065B2E50063B0 + E30060ADE1005DAADE0059A7DB0055A3D800519FD5004F84A800C5C5C500FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FAFBFC0064AAD80066B3E60069B5E8006BB7 + E9006CB8EA006BB7E90069B5E80066B3E60062AFE3005FACE0005BA8DC0057A5 + DA0053A1D6004E8DBB00B8B8B800FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDF2 + F50062A9D9005696BF00538EB5005E9FC9006BB4E3006EBAEC006CB8EA0069B5 + E70064B1E40060ADE1005DAADE0059A6DB0054A2D7004E91C000B8B8B800FEFE + FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F1F5F9004F8FB9004385AF004485AE003F79 + 9D003E708F004B7FA00062A5D10069B5E60066B3E60062AFE2005EABDF0059A7 + DB0053A0D4004D88B200C4C4C400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005490B8004D94C1004F96C3005097C3004E95C200488BB5003D7192004375 + 95005B9FCD0061AEE1005DAADE004C8FBC003B779D003C627A00D0D0D000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0084B1CD00569ECB0058A0CE0059A1 + CE00579FCC00539BC8004E95C2004689B300386A8A00447B9F004786B0003C7F + A9003C81AC005C7A8B00EDEDED00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00C3D8E5005EA5D30061AAD80062ABD9005FA8D6005BA3D100559DCA004E95 + C200478DB9003D7DA6003C7FAA003D82AD003C7CA200A3AAAE00FDFDFD00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFDFE0079B1D5006AB4E2006AB5 + E30067B1DF0062ABD9005BA3D000539AC7004B91BE004388B4003D82AD003C81 + AC0062849A00ECECEC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00DDE9F00075B9E40073BEED006EB9E80067B1DF005FA7D500569E + CB004D94C100458BB7003D82AE005584A200D8DBDD00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D8E7F1007FBF + E80072BDEC0069B3E20061A9D70058A0CD004F96C2004689B5006994B000DCDF + E300FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F4F7FA00B2D0E30085B8D80070A9CE0071A6 + C70087AFC900C3D1DB00FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + end + object Panel3: TPanel + Left = 256 + Top = 35 + Width = 97 + Height = 128 + Align = alRight + BevelOuter = bvNone + TabOrder = 1 + object btGrava: TBitBtn + Left = 8 + Top = 32 + Width = 81 + Height = 25 + Caption = '&Gravar' + TabOrder = 0 + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42 + 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969 + 6969696969696969696969696969696969696969696969696969FF00FFCE726F + D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443 + 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2 + D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F + D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747 + 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF + FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F + DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50 + 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF + FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F + E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459 + 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C + 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F + EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62 + 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE + AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F + F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B + 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8 + B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F + F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863 + 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E + 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F + F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA + BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA + EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F + F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD + C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1 + F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3 + C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6 + F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9 + CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB + FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF + D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4 + DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA + E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F + CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72 + 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A + 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A} + NumGlyphs = 2 + end + object btCancel: TBitBtn + Left = 8 + Top = 72 + Width = 81 + Height = 25 + Caption = '&Cancelar' + TabOrder = 1 + OnClick = btCancelClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + end + object Panel2: TPanel + Left = 0 + Top = 35 + Width = 256 + Height = 128 + Align = alClient + BevelInner = bvRaised + BevelOuter = bvLowered + TabOrder = 2 + object lbSenhaAtu: TLabel + Left = 34 + Top = 27 + Width = 64 + Height = 13 + Alignment = taRightJustify + Caption = 'Senha Atual :' + end + object lbNovaSenha: TLabel + Left = 32 + Top = 57 + Width = 66 + Height = 13 + Alignment = taRightJustify + Caption = 'Nova Senha :' + end + object lbConfirma: TLabel + Left = 51 + Top = 88 + Width = 47 + Height = 13 + Alignment = taRightJustify + Caption = 'Confirma :' + end + object EditAtu: TEdit + Left = 103 + Top = 24 + Width = 121 + Height = 21 + Ctl3D = True + MaxLength = 10 + ParentCtl3D = False + PasswordChar = '*' + TabOrder = 0 + end + object EditNova: TEdit + Left = 103 + Top = 54 + Width = 121 + Height = 21 + Ctl3D = True + MaxLength = 10 + ParentCtl3D = False + PasswordChar = '*' + TabOrder = 1 + end + object EditConfirma: TEdit + Left = 103 + Top = 85 + Width = 121 + Height = 21 + Ctl3D = True + MaxLength = 10 + ParentCtl3D = False + PasswordChar = '*' + TabOrder = 2 + end + end +end diff --git a/internal/2.31RC1/1/Source/TrocaSenha_U.pas b/internal/2.31RC1/1/Source/TrocaSenha_U.pas new file mode 100644 index 0000000..a034907 --- /dev/null +++ b/internal/2.31RC1/1/Source/TrocaSenha_U.pas @@ -0,0 +1,89 @@ +unit TrocaSenha_U; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5_UP} +{$ELSE} + Variants, +{$ENDIF} + Buttons, + Classes, + Controls, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Messages, + StdCtrls, + SysUtils, + Windows, +// UCConsts, + UCBase; { Por Vicente Barros Leonel } + +type + TTrocaSenha = class(TForm) + Panel1: TPanel; + lbDescricao: TLabel; + Image1: TImage; + Panel3: TPanel; + btGrava: TBitBtn; + btCancel: TBitBtn; + Panel2: TPanel; + lbSenhaAtu: TLabel; + lbNovaSenha: TLabel; + lbConfirma: TLabel; + EditAtu: TEdit; + EditNova: TEdit; + EditConfirma: TEdit; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure btCancelClick(Sender: TObject); + procedure FormActivate(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + private + { Private declarations } + public + fUsercontrol : TUserControl; { Por Vicente Barros Leonel } + ForcarTroca : Boolean; + { Public declarations } + end; + +{ +var + TrocaSenha: TTrocaSenha; +} + +implementation + +{$R *.dfm} + +procedure TTrocaSenha.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TTrocaSenha.btCancelClick(Sender: TObject); +begin + Close; +end; + +procedure TTrocaSenha.FormActivate(Sender: TObject); +begin + EditAtu.CharCase := Self.FUserControl.Login.CharCasePass; + EditNova.CharCase := Self.FUserControl.Login.CharCasePass; + EditConfirma.CharCase := Self.FUserControl.Login.CharCasePass; { Por Vicente Barros Leonel } +end; + +procedure TTrocaSenha.FormCloseQuery(Sender: TObject; + var CanClose: Boolean); +begin + If ForcarTroca = True then + Begin + CanClose := False; + MessageDlg( fUsercontrol.UserSettings.CommonMessages.ForcaTrocaSenha ,mtWarning, [mbOK], 0); + End; +end; + +end. diff --git a/internal/2.31RC1/1/Source/UCALSMTPClient.pas b/internal/2.31RC1/1/Source/UCALSMTPClient.pas new file mode 100644 index 0000000..181ebcd --- /dev/null +++ b/internal/2.31RC1/1/Source/UCALSMTPClient.pas @@ -0,0 +1,3770 @@ +{************************************************************* +Author: Stéphane Vander Clock (SVanderClock@Arkadia.com) + +Contributor François PIETTE (http://www.overbyte.be) + Paul TOTH (tothpaul@free.fr - http://tothpaul.free.fr) + +EMail: http://www.arkadia.com + SVanderClock@Arkadia.com + +product: TALSMTPClient +Version: 3.05 + +Description: TALsmtpClient class implements the SMTP protocol (RFC-821) + Support file attachement using MIME format (RFC-1521, RFC-2045) + Support authentification (RFC-2104) + +Legal issues: Copyright (C) 2005 by Stéphane Vander Clock + + This software is provided 'as-is', without any express + or implied warranty. In no event will the author be + held liable for any damages arising from the use of + this software. + + Permission is granted to anyone to use this software + for any purpose, including commercial applications, + and to alter it and redistribute it freely, subject + to the following restrictions: + + 1. The origin of this software must not be + misrepresented, you must not claim that you wrote + the original software. If you use this software in + a product, an acknowledgment in the product + documentation would be appreciated but is not + required. + + 2. Altered source versions must be plainly marked as + such, and must not be misrepresented as being the + original software. + + 3. This notice may not be removed or altered from any + source distribution. + + 4. You must register this software by sending a picture + postcard to the author. Use a nice stamp and mention + your name, street address, EMail address and any + comment you like to say. + +Know bug : + +History : + +Link : http://linuxgazette.net/issue45/stumpel.html + http://www.overbyte.be + http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/socket_options.asp + http://www.fehcom.de/qmail/smtpauth.html + http://www.freesoft.org/CIE/RFC/821/ + http://www.expita.com/header1.html + http://cr.yp.to/immhf.html + +Please send all your feedback to SVanderClock@Arkadia.com +**************************************************************} + +{$I 'UserControl.inc'} + +unit UCALSMTPClient; + +interface + +uses + Classes, + Dialogs, + sysutils, + windows, + WinSock; + +type + {Note: when changing TVendor, also change VendorStr array below} + TALCPUVendor = ( + cvUnknown, + cvAMD, + cvCentaur, + cvCyrix, + cvIntel, + cvTransmeta, + cvNexGen, + cvRise, + cvUMC, + cvNSC, + cvSiS + ); +{Note: when changing TInstruction, also change InstructionSupportStr below + * - instruction(s) not supported in Delphi 7 assembler} + TALCPUInstructions = ( + isFPU, {80x87} + isTSC, {RDTSC} + isCX8, {CMPXCHG8B} + isSEP, {SYSENTER/SYSEXIT} + isCMOV, {CMOVcc, and if isFPU, FCMOVcc/FCOMI} + isMMX, {MMX} + isFXSR, {FXSAVE/FXRSTOR} + isSSE, {SSE} + isSSE2, {SSE2} + isSSE3, {SSE3*} + isMONITOR, {MONITOR/MWAIT*} + isCX16, {CMPXCHG16B*} + isX64, {AMD AMD64* or Intel EM64T*} + isExMMX, {MMX+ - AMD only} + isEx3DNow, {3DNow!+ - AMD only} + is3DNow {3DNow! - AMD only} + ); + TALCPUInstructionSupport = set of TALCPUInstructions; + + TALCPUInfo = record + Vendor: TALCPUVendor; + Signature: cardinal; + EffFamily: byte; {ExtendedFamily + Family} + EffModel: byte; {(ExtendedModel shl 4) + Model} + CodeL1CacheSize, {KB or micro-ops for Pentium 4} + DataL1CacheSize, {KB} + L2CacheSize, {KB} + L3CacheSize: Word; {KB} + InstructionSupport: TALCPUInstructionSupport; + end; + TALHandleTagfunct = function(const TagString: String; TagParams: TStrings; ExtData: pointer; var Handled: Boolean): String; + TALMoveProc = procedure(const Source; var Dest; Count: Integer); + TALCharPosFunct = function(Ch: char; const Str: ansistring): Integer; + TALPosFunct = function(const SubStr: ansistring; const Str: ansistring): Integer; + + + PALMimeBase64Byte4 = ^TALMimeBase64Byte4; + + TALMimeBase64Byte4 = packed record + b1: byte; + b2: byte; + b3: byte; + b4: byte; + end; + PALMimeBase64Byte3 = ^TALMimeBase64Byte3; + + TALMimeBase64Byte3 = packed record + b1: byte; + b2: byte; + b3: byte; + end; + + {-----------------------} + TAlSmtpClientAuthType = ( + AlsmtpClientAuthNone, + alsmtpClientAuthPlain, + AlsmtpClientAuthLogin, + AlsmtpClientAuthCramMD5, + AlsmtpClientAuthCramSha1, + AlsmtpClientAuthAutoSelect + ); + + {------------------------------------------------------} + TAlSmtpClientAuthTypeSet = set of TAlSmtpClientAuthType; + + {--------------------------------------} + TALSMTPClientHeader = class(TPersistent) + private + fSendTo: String; + fSender: String; + fMessageID: String; + fbcc: String; + fContentTransferEncoding: String; + fComments: String; + fMIMEVersion: String; + fPriority: String; + fReplyTo: String; + fSubject: String; + fFrom: String; + fDate: String; + fDispositionNotificationTo: String; + fReferences: String; + fcc: String; + fContentType: String; + FCustomHeaders: TStrings; + function GetRawHeaderText: String; + procedure SetRawHeaderText(const aRawHeaderText: String); + protected + procedure AssignTo(Dest: TPersistent); override; + public + constructor Create; virtual; + destructor Destroy; override; + procedure Clear; + published + property From: String Read fFrom Write fFrom; {From: John Doe - Author(s) or person(s) taking responsibility for the message 4.4.1; RFC 1123: 5.2.15-16, 5.3.7; RFC 1036: 2.1.1} + property Sender: String Read fSender Write fSender; {Sender: Michael Jones - The person or agent submitting the message to the network, if other than shown by the From header RFC 822: 4.4.2; RFC 1123: 5.2.15-16, 5.3.7; RFC 1036: 2.1.1} + property SendTo: String Read fSendTo Write fSendTo; {To: Mary Smith - Primary recipient(s) RFC 822: 4.5.1; RFC 1123: 5.2.15-16, 5.3.7;} + property cc: String Read fcc Write fcc; {cc: , "Giant; \"Big\" Box" - Secondary, informational recipient(s) RFC 822: 4.5.2; RFC 1123: 5.2.15-16, 5.3.7;} + property bcc: String Read fbcc Write fbcc; {bcc: , "Giant; \"Big\" Box" - Recipient(s) not to be disclosed to other recipients ("blind carbon copy") RFC 822: 4.5.3; RFC 1123: 5.2.15-16, 5.3.7;} + property ReplyTo: String Read fReplyTo Write fReplyTo; {Reply-To: "Mary Smith: Personal Account" - Suggested E-mail address for replies RFC 822: 4.4.3; RFC 1036: 2.2.1} + property Subject: String Read fSubject Write fSubject; {Subject: Saying Hello - Text that provides a summary, or indicates the nature, of the message RFC 822: 4.7.1; RFC 1036: 2.1.4} + property MessageID: String Read fMessageID Write fMessageID; {Message-ID: <1234@local.machine.example> - Unique ID for the message RFC 822: 4.6.1; RFC 1036: 2.1.5} + property References: String Read fReferences Write fReferences; {References: <1234@local.machine.example> <3456@example.net> - In E-mail: reference to other related messages; in Usenet: reference to replied-to-articles RFC 822: 4.6.3; RFC 1036: 2.2.5} + property Comments: String Read fComments Write fComments; {Comments: Authenticated sender is gboyd@netcom.com - Text comments added to the message RFC 822: 4.7.2} + property Date: String Read fDate Write fDate; {Date: Fri, 21 Nov 1997 09:55:06 -0600 - The time when the message was written (or submitted) RFC 822: 5.1; RFC 1123: 5.2.14; RFC 1036: 2.1.2} + property ContentType: String Read fContentType Write fContentType; {Content-Type: text/plain; charset="iso-8859-1" - Data type and format of content RFC 1049 (historic); RFC 1123: 5.2.13; RFC 2045: 5; RFC 1766: 4.1} + property ContentTransferEncoding: String Read fContentTransferEncoding Write fContentTransferEncoding; {Content-Transfer-Encoding: 8bit - Coding method used in a MIME message body RFC 2045: 6;} + property MIMEVersion: String Read fMIMEVersion Write fMIMEVersion; {MIME-Version: 1.0 - specifies the version of MIME that the message format complies with RFC 2045: 4} + property Priority: String Read fPriority Write fPriority; {Priority: normal - Priority for message delivery ("normal" / "non-urgent" / "urgent") RFC 2156} + property DispositionNotificationTo: String Read fDispositionNotificationTo Write fDispositionNotificationTo; {Disposition-Notification-To: boss@nil.test - Requests for notification when the message is received, and specifies the address for them RFC 2298} + property CustomHeaders: TStrings Read FCustomHeaders; + property RawHeaderText: String Read GetRawHeaderText Write SetRawHeaderText; + end; + + TOnStatus = procedure(Status: String) of object; + + {----------------------------} + TAlSmtpClient = class(TObject) + private + FWSAData: TWSAData; + Fconnected: Boolean; + FSocketDescriptor: Integer; + FAuthTypesSupported: TAlSmtpClientAuthTypeSet; + Ftimeout: Integer; + fOnStatus: TOnStatus; + procedure Settimeout(const Value: Integer); + protected + procedure CheckError(Error: Boolean); + function SendCmd(aCmd: String; OkResponses: array of Word): String; virtual; + function GetResponse(OkResponses: array of Word): String; + function SocketWrite(var Buffer; Count: longint): longint; virtual; + function SocketRead(var Buffer; Count: longint): longint; virtual; + public + constructor Create; virtual; + destructor Destroy; override; + function Connect(aHost: String; APort: Integer): String; virtual; + function Helo: String; virtual; + function Ehlo: String; virtual; + function Auth(AUserName, APassword: String; aAuthType: TalSmtpClientAuthType): String; virtual; + function Vrfy(aUserName: String): String; virtual; + function MailFrom(aFromName: String): String; virtual; + function RcptTo(aRcptNameLst: TStrings): String; virtual; + function Data(aMailData: String): String; overload; virtual; + function Data(aHeader, aBody: String): String; overload; virtual; + function Data(aHeader: TALSMTPClientHeader; aBody: String): String; overload; virtual; + function Quit: String; virtual; + function Rset: String; virtual; + procedure SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aMailData: String); overload; virtual; + procedure SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aHeader, aBody: String); overload; virtual; + procedure Disconnect; virtual; + function GetAuthTypeFromEhloResponse(EhloResponse: String): TAlSmtpClientAuthTypeSet; virtual; + property Connected: Boolean Read FConnected; + property Timeout: Integer Read Ftimeout Write Settimeout default 60000; + property OnStatus: TOnStatus Read fOnStatus Write fOnStatus; + end; + +{----------------------------------------------------------------------------------------} +function AlSMTPClientParseEmail(FriendlyEmail: String; var FriendlyName: String): String; +function AlSMTPClientGenerateMessageID: String; + +var + ALMove: TALMoveProc; + ALCharPos: TALCharPosFunct; + ALPos: TALPosFunct; + + +implementation + +uses + HTTPAPP; + + + //*********************************************************************** + //AlFcnWinSock Partial Unit + //*********************************************************************** +function ALgetLocalHostName: String; +var + {$IFDEF DELPHI12} + Buffer : pAnsichar; + {$ELSE} + Buffer : array [0..255] of char; + {$ENDIF} + WSAData : TWSAData; +begin + WSAData.wVersion := 0; + WSAStartup(MAKEWORD(2, 2), WSAData); + try + + if gethostname(Buffer, SizeOf(Buffer)) <> 0 then + raise Exception.Create('Winsock GetHostName failed'); + Result := StrPas(Buffer); + finally + if WSAData.wVersion = 2 then + WSACleanup; + end; +end; + +function ALHostToIP(HostName: String; var Ip: String): Boolean; +var + WSAData: TWSAData; + hostEnt: PHostEnt; + {$IFDEF DELPHI12} addr: PAnsiChar; {$ELSE} addr: PChar; {$ENDIF} +begin + WSAData.wVersion := 0; + WSAStartup(MAKEWORD(2, 2), WSAData); + try + + {$IFDEF DELPHI12} + hostEnt := gethostbyname(PAnsiChar(hostName)); + {$ELSE} + hostEnt := gethostbyname(PChar(hostName)); + {$ENDIF} + if Assigned(hostEnt) then + begin + if Assigned(hostEnt^.h_addr_list) then + begin + {$IFDEF DELPHI12} + addr := hostEnt^.h_addr_list^; + {$ELSE} + addr := hostEnt^.h_addr_list^; + {$ENDIF} + if Assigned(addr) then + begin + IP := Format('%d.%d.%d.%d', [byte(addr[0]), + byte(addr[1]), byte(addr[2]), byte(addr[3])]); + Result := True; + end + else + Result := False; + end + else + Result := False; + end + else + Result := False; + + finally + if WSAData.wVersion = 2 then + WSACleanup; + end; +end; + + //*********************************************************************** + //AlFcnRFC Partial Unit + //*********************************************************************** +const + CAlRfc822DaysOfWeek: array[1..7] of String = ( + 'Sun', + 'Mon', + 'Tue', + 'Wed', + 'Thu', + 'Fri', + 'Sat' + ); + CALRfc822MonthNames: array[1..12] of String = ( + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec' + ); + + +function ALGMTDateTimeToRfc822Str(const aValue: TDateTime): String; +var + aDay, aMonth, aYear: Word; +begin + DecodeDate( + aValue, + aYear, + aMonth, + aDay + ); + + Result := Format( + '%s, %.2d %s %.4d %s %s', + [ + CAlRfc822DaysOfWeek[DayOfWeek(aValue)], + aDay, + CAlRfc822MonthNames[aMonth], + aYear, + FormatDateTime('hh":"nn":"ss', aValue), + 'GMT' + ] + ); +end; + + +function ALDateTimeToRfc822Str(const aValue: TDateTime): String; + + {--------------------------------------------} + function InternalCalcTimeZoneBias: TDateTime; + const + Time_Zone_ID_DayLight = 2; + var + TZI: TTimeZoneInformation; + TZIResult: Integer; + aBias: Integer; + begin + TZIResult := GetTimeZoneInformation(TZI); + if TZIResult = -1 then + Result := 0 + else + begin + if TZIResult = Time_Zone_ID_DayLight then + aBias := TZI.Bias + TZI.DayLightBias + else + aBias := TZI.Bias + TZI.StandardBias; + Result := EncodeTime(Abs(aBias) div 60, Abs(aBias) mod 60, 0, 0); + if aBias < 0 then + Result := -Result; + end; + end; + +begin + Result := ALGMTDateTimeToRfc822Str(aValue + InternalCalcTimeZoneBias); +end; + + + //*********************************************************************** + //AlFcnMime Partial Unit + //*********************************************************************** +const + cALMime_Base64_Encode_Table: array[0..63] of byte = ( + 065, 066, 067, 068, 069, 070, 071, 072, // 00 - 07 + 073, 074, 075, 076, 077, 078, 079, 080, // 08 - 15 + 081, 082, 083, 084, 085, 086, 087, 088, // 16 - 23 + 089, 090, 097, 098, 099, 100, 101, 102, // 24 - 31 + 103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39 + 111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47 + 119, 120, 121, 122, 048, 049, 050, 051, // 48 - 55 + 052, 053, 054, 055, 056, 057, 043, 047 // 56 - 63 + ); + cALMime_Base64_Pad_Char = byte('='); + +function ALMimeBase64EncodedSizeNoCRLF(const InputSize: cardinal): cardinal; +begin + Result := (InputSize + 2) div 3 * 4; +end; + +procedure ALMimeBase64EncodeNoCRLF(const InputBuffer; const InputByteCount: cardinal; out OutputBuffer); +var + B, InnerLimit, OuterLimit: cardinal; + InPtr: PALMimeBase64Byte3; + OutPtr: PALMimeBase64Byte4; +begin + if InputByteCount = 0 then + Exit; + + InPtr := @InputBuffer; + OutPtr := @OutputBuffer; + + OuterLimit := InputByteCount div 3 * 3; + + InnerLimit := cardinal(InPtr); + Inc(InnerLimit, OuterLimit); + + { Last line loop. } + while cardinal(InPtr) < InnerLimit do + begin + { Read 3 bytes from InputBuffer. } + B := InPtr^.b1; + B := B shl 8; + B := B or InPtr^.b2; + B := B shl 8; + B := B or InPtr^.b3; + Inc(InPtr); + { Write 4 bytes to OutputBuffer (in reverse order). } + OutPtr^.b4 := CALMIME_Base64_ENCODE_TABLE[B and $3F]; + B := B shr 6; + OutPtr^.b3 := CALMIME_Base64_ENCODE_TABLE[B and $3F]; + B := B shr 6; + OutPtr^.b2 := CALMIME_Base64_ENCODE_TABLE[B and $3F]; + B := B shr 6; + OutPtr^.b1 := CALMIME_Base64_ENCODE_TABLE[B]; + Inc(OutPtr); + end; + + { End of data & padding. } + case InputByteCount - OuterLimit of + 1: + begin + B := InPtr^.b1; + B := B shl 4; + OutPtr.b2 := CALMIME_Base64_ENCODE_TABLE[B and $3F]; + B := B shr 6; + OutPtr.b1 := CALMIME_Base64_ENCODE_TABLE[B]; + OutPtr.b3 := CALMIME_Base64_PAD_CHAR; { Pad remaining 2 bytes. } + OutPtr.b4 := CALMIME_Base64_PAD_CHAR; + end; + 2: + begin + B := InPtr^.b1; + B := B shl 8; + B := B or InPtr^.b2; + B := B shl 2; + OutPtr.b3 := CALMIME_Base64_ENCODE_TABLE[B and $3F]; + B := B shr 6; + OutPtr.b2 := CALMIME_Base64_ENCODE_TABLE[B and $3F]; + B := B shr 6; + OutPtr.b1 := CALMIME_Base64_ENCODE_TABLE[B]; + OutPtr.b4 := CALMIME_Base64_PAD_CHAR; { Pad remaining byte. } + end; + end; +end; + + +function ALMimeBase64EncodeStringNoCRLF(const S: ansistring): ansistring; +var + L: cardinal; +begin + if Pointer(S) <> nil then + begin + L := PCardinal(cardinal(S) - 4)^; + SetLength(Result, ALMimeBase64EncodedSizeNoCRLF(L)); + ALMimeBase64EncodeNoCRLF(Pointer(S)^, L, Pointer(Result)^); + end + else + Result := ''; +end; + + + //*********************************************************************** + //ALFcnMisc Partial Unit + //*********************************************************************** + +function ALMakeKeyStrByGUID: String; +var + aGUID: TGUID; +begin + CreateGUID(aGUID); + Result := GUIDToString(aGUID); + Delete(Result, 1, 1); + Delete(Result, Length(Result), 1); +end; + + + //*********************************************************************** + //ALFCNString Partial Unit + //*********************************************************************** + + +{-------------------------------} +const + CALMOVE_SMALLMOVESIZE = 36; + +{-------------------------------------------------} +var + VALMove_AnsiUpcase: packed array[char] of char; +// VALMove_PrefetchLimit: Integer; + + ////////////////////////////////////////////////////////////////////////////////////////////////////// + //////////ALPosEx from FastCode AINSIStringReplace John O'Harrow (john@almcrest.demon.co.uk)////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////// + + {*********************************} + {Fast Equivalent of Delphi 7 PosEx} +function ALPosEx(const SubStr, S: String; Offset: cardinal = 1): Integer; +asm + push ebx + push esi + push edx {@Str} + test eax, eax + jz @@NotFound {Exit if SubStr = ''} + test edx, edx + jz @@NotFound {Exit if Str = ''} + mov esi, ecx + mov ecx, [edx-4] {Length(Str)} + mov ebx, [eax-4] {Length(SubStr)} + add ecx, edx + sub ecx, ebx {Max Start Pos for Full Match} + lea edx, [edx+esi-1] {Set Start Position} + cmp edx, ecx + jg @@NotFound {StartPos > Max Start Pos} + cmp ebx, 1 {Length(SubStr)} + jle @@SingleChar {Length(SubStr) <= 1} + push edi + push ebp + lea edi, [ebx-2] {Length(SubStr) - 2} + mov esi, eax + movzx ebx, [eax] {Search Character} + @@Loop: {Compare 2 Characters per Loop} + cmp bl, [edx] + jne @@NotChar1 + mov ebp, edi {Remainder} + @@Char1Loop: + movzx eax, word ptr [esi+ebp] + cmp ax, [edx+ebp] + jne @@NotChar1 + sub ebp, 2 + jnc @@Char1Loop + pop ebp + pop edi + jmp @@SetResult + @@NotChar1: + cmp bl, [edx+1] + jne @@NotChar2 + mov ebp, edi {Remainder} + @@Char2Loop: + movzx eax, word ptr [esi+ebp] + cmp ax, [edx+ebp+1] + jne @@NotChar2 + sub ebp, 2 + jnc @@Char2Loop + pop ebp + pop edi + jmp @@CheckResult + @@NotChar2: + add edx, 2 + cmp edx, ecx {Next Start Position <= Max Start Position} + jle @@Loop + pop ebp + pop edi + jmp @@NotFound + @@SingleChar: + jl @@NotFound {Needed for Zero-Length Non-NIL Strings} + movzx eax, [eax] {Search Character} + @@CharLoop: + cmp al, [edx] + je @@SetResult + cmp al, [edx+1] + je @@CheckResult + add edx, 2 + cmp edx, ecx + jle @@CharLoop + @@NotFound: + xor eax, eax + pop edx + pop esi + pop ebx + ret + @@CheckResult: {Check within String} + cmp edx, ecx + jge @@NotFound + add edx, 1 + @@SetResult: + pop ecx {@Str} + pop esi + pop ebx + neg ecx + lea eax, [edx+ecx+1] +end; + + {***********************************} + {Non Case Sensitive version of PosEx} +function ALPosExIgnoreCase(const SubStr, S: String; Offset: cardinal = 1): Integer; +asm + push ebx + push esi + push edx {@Str} + test eax, eax + jz @@NotFound {Exit if SubStr = ''} + test edx, edx + jz @@NotFound {Exit if Str = ''} + mov esi, ecx + mov ecx, [edx-4] {Length(Str)} + mov ebx, [eax-4] {Length(SubStr)} + add ecx, edx + sub ecx, ebx {Max Start Pos for Full Match} + lea edx, [edx+esi-1] {Set Start Position} + cmp edx, ecx + jg @@NotFound {StartPos > Max Start Pos} + cmp ebx, 1 {Length(SubStr)} + jle @@SingleChar {Length(SubStr) <= 1} + push edi + push ebp + lea edi, [ebx-2] {Length(SubStr) - 2} + mov esi, eax + push edi {Save Remainder to Check = Length(SubStr) - 2} + push ecx {Save Max Start Position} + lea edi, VALMove_AnsiUpcase {Uppercase Lookup Table} + movzx ebx, [eax] {Search Character = 1st Char of SubStr} + movzx ebx, [edi+ebx] {Convert to Uppercase} + @@Loop: {Loop Comparing 2 Characters per Loop} + movzx eax, [edx] {Get Next Character} + movzx eax, [edi+eax] {Convert to Uppercase} + cmp eax, ebx + jne @@NotChar1 + mov ebp, [esp+4] {Remainder to Check} + @@Char1Loop: + movzx eax, [esi+ebp] + movzx ecx, [edx+ebp] + movzx eax, [edi+eax] {Convert to Uppercase} + movzx ecx, [edi+ecx] {Convert to Uppercase} + cmp eax, ecx + jne @@NotChar1 + movzx eax, [esi+ebp+1] + movzx ecx, [edx+ebp+1] + movzx eax, [edi+eax] {Convert to Uppercase} + movzx ecx, [edi+ecx] {Convert to Uppercase} + cmp eax, ecx + jne @@NotChar1 + sub ebp, 2 + jnc @@Char1Loop + pop ecx + pop edi + pop ebp + pop edi + jmp @@SetResult + @@NotChar1: + movzx eax, [edx+1] {Get Next Character} + movzx eax, [edi+eax] {Convert to Uppercase} + cmp bl, al + jne @@NotChar2 + mov ebp, [esp+4] {Remainder to Check} + @@Char2Loop: + movzx eax, [esi+ebp] + movzx ecx, [edx+ebp+1] + movzx eax, [edi+eax] {Convert to Uppercase} + movzx ecx, [edi+ecx] {Convert to Uppercase} + cmp eax, ecx + jne @@NotChar2 + movzx eax, [esi+ebp+1] + movzx ecx, [edx+ebp+2] + movzx eax, [edi+eax] {Convert to Uppercase} + movzx ecx, [edi+ecx] {Convert to Uppercase} + cmp eax, ecx + jne @@NotChar2 + sub ebp, 2 + jnc @@Char2Loop + pop ecx + pop edi + pop ebp + pop edi + jmp @@CheckResult {Check Match is within String Data} + @@NotChar2: + add edx, 2 + cmp edx, [esp] {Compate to Max Start Position} + jle @@Loop {Loop until Start Position > Max Start Position} + pop ecx {Dump Start Position} + pop edi {Dump Remainder to Check} + pop ebp + pop edi + jmp @@NotFound + @@SingleChar: + jl @@NotFound {Needed for Zero-Length Non-NIL Strings} + lea esi, VALMove_AnsiUpcase + movzx ebx, [eax] {Search Character = 1st Char of SubStr} + movzx ebx, [esi+ebx] {Convert to Uppercase} + @@CharLoop: + movzx eax, [edx] + movzx eax, [esi+eax] {Convert to Uppercase} + cmp eax, ebx + je @@SetResult + movzx eax, [edx+1] + movzx eax, [esi+eax] {Convert to Uppercase} + cmp eax, ebx + je @@CheckResult + add edx, 2 + cmp edx, ecx + jle @@CharLoop + @@NotFound: + xor eax, eax + pop edx + pop esi + pop ebx + ret + @@CheckResult: {Check Match is within String Data} + cmp edx, ecx + jge @@NotFound + add edx, 1 {OK - Adjust Result} + @@SetResult: {Set Result Position} + pop ecx {@Str} + pop esi + pop ebx + neg ecx + lea eax, [edx+ecx+1] +end; + + + /////////////////////////////////////////////////////////////////////////////////////////////// + //////////AlFastStringReplace from FastCode John O'Harrow (john@almcrest.demon.co.uk)////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + {****************************************} + {Non-Overlapping Move for Positive Counts} +procedure ALStringReplaceMoveEx(const Source; var Dest; Count: Integer); +const + SMALLMOVESIZE = 16; +asm + cmp ecx, SMALLMOVESIZE + ja @Large + lea eax, [eax+ecx] + lea edx, [edx+ecx] + jmp dword ptr [@@FwdJumpTable+ecx*4] + @Large: + fild qword ptr [eax] + fistp qword ptr [edx] + add eax, ecx + add ecx, edx + add edx, 7+8 + neg ecx + and edx, -8 + add ecx, edx + sub edx, ecx {Writes Now QWORD Aligned} + @FwdLoop: + fild qword ptr [eax+ecx-8] + fistp qword ptr [edx+ecx-8] + add ecx, 8 + jle @FwdLoop + neg ecx + add ecx, 8 + jmp dword ptr [@@FwdJumpTable+ecx*4] + nop {Align Jump Table} + @@FwdJumpTable: + dd @@Done {Removes need to test for zero size Move} + dd @@Fwd01,@@Fwd02,@@Fwd03,@@Fwd04,@@Fwd05,@@Fwd06,@@Fwd07,@@Fwd08 + dd @@Fwd09,@@Fwd10,@@Fwd11,@@Fwd12,@@Fwd13,@@Fwd14,@@Fwd15,@@Fwd16 + @@Fwd16: + mov ecx,[eax-16] + mov[edx-16],ecx + @@Fwd12: + mov ecx,[eax-12] + mov[edx-12],ecx + @@Fwd08: + mov ecx,[eax-8] + mov[edx-8],ecx + @@Fwd04: + mov ecx,[eax-4] + mov[edx-4],ecx + ret + @@Fwd15: + mov ecx,[eax-15] + mov[edx-15],ecx + @@Fwd11: + mov ecx,[eax-11] + mov[edx-11],ecx + @@Fwd07: + mov ecx,[eax-7] + mov[edx-7],ecx + @@Fwd03: + movzx ecx, word ptr [eax-3] + mov[edx-3],cx + movzx ecx, byte ptr [eax-1] + mov[edx-1],cl + ret + @@Fwd14: + mov ecx,[eax-14] + mov[edx-14],ecx + @@Fwd10: + mov ecx,[eax-10] + mov[edx-10],ecx + @@Fwd06: + mov ecx,[eax-6] + mov[edx-6],ecx + @@Fwd02: + movzx ecx, word ptr [eax-2] + mov[edx-2],cx + ret + @@Fwd13: + mov ecx,[eax-13] + mov[edx-13],ecx + @@Fwd09: + mov ecx,[eax-9] + mov[edx-9],ecx + @@Fwd05: + mov ecx,[eax-5] + mov[edx-5],ecx + @@Fwd01: + movzx ecx, byte ptr [eax-1] + mov[edx-1],cl + @@Done: +end; {MoveEx} + + {**************************************************************************} + {Replace all occurance of Old (Ignoring Case) with New in Non-Null String S} +{$IFDEF DELPHI12} +procedure ALCharReplaceIC(var S: ansistring; const Old, New: pAnsichar); +{$ELSE} +procedure ALCharReplaceIC(var S: ansistring; const Old, New: char); +{$ENDIF} +asm + push ebx + push edi + push esi + mov eax, [eax] {@S} + mov ebx, ecx {bl = New} + lea edi, VALMove_AnsiUpcase + and edx, $FF {edx = Old} + mov ecx, [eax-4] {Length(S)} + movzx edx, [edx+edi] {edx = Uppercase(Old)} + lea esi, [eax+ecx] + neg ecx + @@Loop: + movzx eax, [esi+ecx] {Next Char} + movzx eax, [eax+edi] {Convert to Uppercase} + cmp eax, edx {Compare Char} + jne @@Next + mov[esi+ecx], bl {Replace Char} + @@Next: + add ecx, 1 + jnz @@Loop + pop esi + pop edi + pop ebx +end; + + {***************************************************************************} + {Replace all occurance of Old (Case Sensitive) with New in Non-Null String S} +{$IFDEF DELPHI12} +procedure ALCharReplaceCS(var S: ansistring; const Old, New: pAnsichar); +{$ELSE} +procedure ALCharReplaceCS(var S: ansistring; const Old, New: char); +{$ENDIF} +asm + push ebx + mov eax, [eax] {@S} + mov ebx, ecx {bl = New, dl = Old} + mov ecx, [eax-4] {Length(S)} + add eax, ecx + neg ecx + @@Loop: + cmp dl, [eax+ecx] {Compare Next Char} + jne @@Next + mov[eax+ecx], bl {Replace Char} + @@Next: + add ecx, 1 + jnz @@Loop + pop ebx +end; + + {***************************************************************************************} + {from John O'Harrow (john@almcrest.demon.co.uk) - original name: StringReplaceJOH_IA32_4} +function ALStringReplace(const S, OldPattern, NewPattern: ansistring; Flags: TReplaceFlags): ansistring; +type + TPosEx = function(const SubStr, S: String; Offset: cardinal = 1): Integer; + {$IFDEF DELPHI12} + TCharRep = procedure(var S: ansistring; const Old, New: pAnsichar); + {$ELSE} + TCharRep = procedure(var S: ansistring; const Old, New: char); + {$ENDIF} +const + StaticBufferSize = 16; + PosExFunction: array[Boolean] of TPosEx = (ALPosEx, ALPosExIgnoreCase); + CharReplace: array[Boolean] of TCharRep = (ALCharReplaceCS, ALCharReplaceIC); +var + SrcLen, OldLen, NewLen, Found, Count, Start, Match, BufSize, BufMax: Integer; + StaticBuffer: array[0..StaticBufferSize - 1] of Integer; + Buffer: PIntegerArray; + {$IFDEF DELPHI12} PSrc, PRes: PAnsiChar; {$ELSE} PSrc, PRes: PChar; {$ENDIF} + IgnoreCase: Boolean; +begin +{$IFDEF ALStringReplace_AllowLengthShortcut} + SrcLen := 0; + if (S <> '') then + SrcLen := PCardinal(Cardinal(S)-4)^; + OldLen := 0; + if (OldPattern <> '') then + OldLen := PCardinal(Cardinal(OldPattern)-4)^; + NewLen := 0; + if (NewPattern <> '') then + NewLen := PCardinal(Cardinal(NewPattern)-4)^; +{$ELSE} + SrcLen := Length(S); + OldLen := Length(OldPattern); + NewLen := Length(NewPattern); +{$ENDIF} + if (OldLen = 0) or (SrcLen < OldLen) then + begin + if SrcLen = 0 then + Result := '' {Needed for Non-Nil Zero Length Strings} + else + Result := S; + end + else + begin + IgnoreCase := rfIgnoreCase in Flags; + if rfReplaceAll in Flags then + begin + if (OldLen = 1) and (NewLen = 1) then + begin + SetLength(Result, SrcLen); + ALStringReplaceMoveEx(Pointer(S)^, Pointer(Result)^, SrcLen); + {$IFDEF DELPHI12} + + CharReplace[IgnoreCase](Result, pAnsiChar(OldPattern[1]), pAnsiChar(NewPattern[1])); + {$ELSE} + CharReplace[IgnoreCase](Result, OldPattern[1], NewPattern[1]); + {$ENDIF} + Exit; + end; + Found := PosExFunction[IgnoreCase](OldPattern, S, 1); + if Found <> 0 then + begin + Buffer := @StaticBuffer; + BufMax := StaticBufferSize; + BufSize := 1; + Buffer[0] := Found; + repeat + Inc(Found, OldLen); + Found := PosExFunction[IgnoreCase](OldPattern, S, Found); + if Found > 0 then + begin + if BufSize = BufMax then + begin {Create or Expand Dynamic Buffer} + BufMax := BufMax + (BufMax shr 1); {Grow by 50%} + if Buffer = @StaticBuffer then + begin {Create Dynamic Buffer} + GetMem(Buffer, BufMax * SizeOf(integer)); + ALStringReplaceMoveEx(StaticBuffer, Buffer^, SizeOf(StaticBuffer)); + end + else {Expand Dynamic Buffer} + ReallocMem(Buffer, BufMax * SizeOf(integer)); + end; + Buffer[BufSize] := Found; + Inc(BufSize); + end + until Found = 0; + SetLength(Result, SrcLen + (BufSize * (NewLen - OldLen))); + PSrc := Pointer(S); + PRes := Pointer(Result); + Start := 1; + Match := 0; + repeat + Found := Buffer[Match]; + Count := Found - Start; + Start := Found + OldLen; + if Count > 0 then + begin + ALStringReplaceMoveEx(PSrc^, PRes^, Count); + Inc(PRes, Count); + end; + Inc(PSrc, Count + OldLen); + ALStringReplaceMoveEx(Pointer(NewPattern)^, PRes^, NewLen); + Inc(PRes, NewLen); + Inc(Match); + until Match = BufSize; + Dec(SrcLen, Start); + if SrcLen >= 0 then + ALStringReplaceMoveEx(PSrc^, PRes^, SrcLen + 1); + if BufMax <> StaticBufferSize then + FreeMem(Buffer); {Free Dynamic Buffwe if Created} + end + else {No Matches Found} + Result := S; + end + else + begin {Replace First Occurance Only} + Found := PosExFunction[IgnoreCase](OldPattern, S, 1); + if Found <> 0 then + begin {Match Found} + SetLength(Result, SrcLen - OldLen + NewLen); + Dec(Found); + PSrc := Pointer(S); + PRes := Pointer(Result); + if NewLen = OldLen then + begin + ALStringReplaceMoveEx(PSrc^, PRes^, SrcLen); + Inc(PRes, Found); + ALStringReplaceMoveEx(Pointer(NewPattern)^, PRes^, NewLen); + end + else + begin + ALStringReplaceMoveEx(PSrc^, PRes^, Found); + Inc(PRes, Found); + Inc(PSrc, Found + OldLen); + ALStringReplaceMoveEx(Pointer(NewPattern)^, PRes^, NewLen); + Inc(PRes, NewLen); + ALStringReplaceMoveEx(PSrc^, PRes^, SrcLen - Found - OldLen); + end; + end + else {No Matches Found} + Result := S; + end; + end; +end; + + + //////////////////////////////////////////////////////////////// + //////////ALUpperCase from FastCode Aleksandr Sharahov////////// + //////////////////////////////////////////////////////////////// + +{********************************************} +function AlUpperCase(const s: String): String; +asm + push ebx + push esi + push edi + mov esi, eax // s + mov eax, edx + test esi, esi + jz @nil + mov ebx, [esi-4] // Length(s) + mov edx, ebx + mov edi, eax // @Result + add ebx, -1 + jl @nil + and ebx, -4 + call System.@LStrSetLength + mov eax, [ebx+esi] + mov edi, [edi] // Result + + @loop: mov ecx, eax + or eax, $80808080 // $E1..$FA + mov edx, eax + sub eax, $7B7B7B7B // $66..$7F + xor edx, ecx // $80 + or eax, $80808080 // $E6..$FF + sub eax, $66666666 // $80..$99 + and eax, edx // $80 + shr eax, 2 // $20 + xor eax, ecx // Upper + mov[ebx+edi], eax + mov eax, [ebx+esi-4] + sub ebx, 4 + jge @loop + + pop edi + pop esi + pop ebx + ret + + @nil: pop edi + pop esi + pop ebx + jmp System.@LStrClr // Result:='' +end; + +{********************************************} +function ALLowerCase(const s: String): String; +asm + push ebx + push esi + push edi + mov esi, eax // s + mov eax, edx + test esi, esi + jz @nil + mov ebx, [esi-4] // Length(s) + mov edx, ebx + mov edi, eax // @Result + add ebx, -1 + jl @nil + and ebx, -4 + call System.@LStrSetLength + mov eax, [ebx+esi] + mov edi, [edi] // Result + + @loop: mov ecx, eax + or eax, $80808080 // $C1..$DA + mov edx, eax + sub eax, $5B5B5B5B // $66..$7F + xor edx, ecx // $80 + or eax, $80808080 // $E6..$FF + sub eax, $66666666 // $80..$99 + and eax, edx // $80 + shr eax, 2 // $20 + xor eax, ecx // Lower + mov[ebx+edi], eax + mov eax, [ebx+esi-4] + sub ebx, 4 + jge @loop + + pop edi + pop esi + pop ebx + ret + + @nil: pop edi + pop esi + pop ebx + jmp System.@LStrClr // Result:='' +end; + + + /////////////////////////// + //////////Alcinoe////////// + /////////////////////////// + +{********************************************************************************} +function ALCopyStr(const aSourceString: String; aStart, aLength: Integer): String; +var + SourceStringLength: Integer; +begin + SourceStringLength := Length(aSourceString); + if (aStart < 1) then + aStart := 1; + + if (SourceStringLength = 0) or + (aLength < 1) or + (aStart > SourceStringLength) then + begin + Result := ''; + Exit; + end; + + if aLength > SourceStringLength - (aStart - 1) then + aLength := SourceStringLength - (aStart - 1); + + SetLength(Result, aLength); + ALMove(aSourceString[aStart], Result[1], aLength); +end; + +{************} +var + Ch: char; + + +//*********************************************************************** + + +function AlSMTPClientParseEmail(FriendlyEmail: String; var FriendlyName: String): String; +var + I, J: Integer; + Flag: Boolean; + Delim: char; +begin + Result := ''; + FriendlyName := ''; + Flag := (ALCharPos('<', FriendlyEmail) > 0); + { Skip spaces } + I := 1; + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] = ' ') do + Inc(I); + if I > Length(FriendlyEmail) then + Exit; + { Check if quoted string } + if FriendlyEmail[I] in ['"', ''''] then + begin + Delim := FriendlyEmail[I]; + { Skip opening quote } + Inc(I); + { Go to closing quote } + J := I; + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> Delim) do + Inc(I); + FriendlyName := AlCopyStr(FriendlyEmail, J, I - J); + Inc(I); + if Flag then + begin + { Go to less-than sign } + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '<') do + Inc(I); + Inc(I); + J := I; + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '>') do + Inc(I); + Result := AlCopyStr(FriendlyEmail, J, I - J); + end + else + Result := Trim(AlCopyStr(FriendlyEmail, I, Length(FriendlyEmail))); + end + else if Flag then + begin + { Go to less-than sign } + J := I; + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '<') do + Inc(I); + FriendlyName := Trim(AlCopyStr(FriendlyEmail, J, I - J)); + Inc(I); + { Go to greater-than sign } + J := I; + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '>') do + Inc(I); + Result := AlCopyStr(FriendlyEmail, J, I - J); + end + else + begin + { No <..>, goto next space } + J := I; + while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> ' ') do + Inc(I); + FriendlyName := Trim(AlCopyStr(FriendlyEmail, J, I - J)); + Result := Trim(AlCopyStr(FriendlyEmail, I + 1, Length(FriendlyEmail))); + end; + if (Result = '') and (AlCharPos('@', FriendlyName) > 0) then + begin + Result := FriendlyName; + FriendlyName := ''; + end; +end; + +{*********************************************} +function AlSMTPClientGenerateMessageID: String; +begin + Result := AlStringReplace(ALMakeKeyStrByGUID, '-', '', [rfReplaceAll]) + '@' + AlGetLocalHostName; +end; + + + {***********************************} + {Perform Forward Move of 0..36 Bytes} + {On Entry, ECX = Count, EAX = Source+Count, EDX = Dest+Count. Destroys ECX} +procedure ALSmallForwardMove; +asm + jmp dword ptr [@@FwdJumpTable+ecx*4] + nop {Align Jump Table} + @@FwdJumpTable: + dd @@Done {Removes need to test for zero size move} + dd @@Fwd01, @@Fwd02, @@Fwd03, @@Fwd04, @@Fwd05, @@Fwd06, @@Fwd07, @@Fwd08 + dd @@Fwd09, @@Fwd10, @@Fwd11, @@Fwd12, @@Fwd13, @@Fwd14, @@Fwd15, @@Fwd16 + dd @@Fwd17, @@Fwd18, @@Fwd19, @@Fwd20, @@Fwd21, @@Fwd22, @@Fwd23, @@Fwd24 + dd @@Fwd25, @@Fwd26, @@Fwd27, @@Fwd28, @@Fwd29, @@Fwd30, @@Fwd31, @@Fwd32 + dd @@Fwd33, @@Fwd34, @@Fwd35, @@Fwd36 + @@Fwd36: + mov ecx, [eax-36] + mov[edx-36], ecx + @@Fwd32: + mov ecx, [eax-32] + mov[edx-32], ecx + @@Fwd28: + mov ecx, [eax-28] + mov[edx-28], ecx + @@Fwd24: + mov ecx, [eax-24] + mov[edx-24], ecx + @@Fwd20: + mov ecx, [eax-20] + mov[edx-20], ecx + @@Fwd16: + mov ecx, [eax-16] + mov[edx-16], ecx + @@Fwd12: + mov ecx, [eax-12] + mov[edx-12], ecx + @@Fwd08: + mov ecx, [eax-8] + mov[edx-8], ecx + @@Fwd04: + mov ecx, [eax-4] + mov[edx-4], ecx + ret + nop + @@Fwd35: + mov ecx, [eax-35] + mov[edx-35], ecx + @@Fwd31: + mov ecx, [eax-31] + mov[edx-31], ecx + @@Fwd27: + mov ecx, [eax-27] + mov[edx-27], ecx + @@Fwd23: + mov ecx, [eax-23] + mov[edx-23], ecx + @@Fwd19: + mov ecx, [eax-19] + mov[edx-19], ecx + @@Fwd15: + mov ecx, [eax-15] + mov[edx-15], ecx + @@Fwd11: + mov ecx, [eax-11] + mov[edx-11], ecx + @@Fwd07: + mov ecx, [eax-7] + mov[edx-7], ecx + mov ecx, [eax-4] + mov[edx-4], ecx + ret + nop + @@Fwd03: + movzx ecx, word ptr [eax-3] + mov[edx-3], cx + movzx ecx, byte ptr [eax-1] + mov[edx-1], cl + ret + @@Fwd34: + mov ecx, [eax-34] + mov[edx-34], ecx + @@Fwd30: + mov ecx, [eax-30] + mov[edx-30], ecx + @@Fwd26: + mov ecx, [eax-26] + mov[edx-26], ecx + @@Fwd22: + mov ecx, [eax-22] + mov[edx-22], ecx + @@Fwd18: + mov ecx, [eax-18] + mov[edx-18], ecx + @@Fwd14: + mov ecx, [eax-14] + mov[edx-14], ecx + @@Fwd10: + mov ecx, [eax-10] + mov[edx-10], ecx + @@Fwd06: + mov ecx, [eax-6] + mov[edx-6], ecx + @@Fwd02: + movzx ecx, word ptr [eax-2] + mov[edx-2], cx + ret + nop + nop + nop + @@Fwd33: + mov ecx, [eax-33] + mov[edx-33], ecx + @@Fwd29: + mov ecx, [eax-29] + mov[edx-29], ecx + @@Fwd25: + mov ecx, [eax-25] + mov[edx-25], ecx + @@Fwd21: + mov ecx, [eax-21] + mov[edx-21], ecx + @@Fwd17: + mov ecx, [eax-17] + mov[edx-17], ecx + @@Fwd13: + mov ecx, [eax-13] + mov[edx-13], ecx + @@Fwd09: + mov ecx, [eax-9] + mov[edx-9], ecx + @@Fwd05: + mov ecx, [eax-5] + mov[edx-5], ecx + @@Fwd01: + movzx ecx, byte ptr [eax-1] + mov[edx-1], cl + ret + @@Done: +end; + + {************************************} + {Perform Backward Move of 0..36 Bytes} + {On Entry, ECX = Count, EAX = Source, EDX = Dest. Destroys ECX} +procedure ALSmallBackwardMove; +asm + jmp dword ptr [@@BwdJumpTable+ecx*4] + nop {Align Jump Table} + @@BwdJumpTable: + dd @@Done {Removes need to test for zero size move} + dd @@Bwd01, @@Bwd02, @@Bwd03, @@Bwd04, @@Bwd05, @@Bwd06, @@Bwd07, @@Bwd08 + dd @@Bwd09, @@Bwd10, @@Bwd11, @@Bwd12, @@Bwd13, @@Bwd14, @@Bwd15, @@Bwd16 + dd @@Bwd17, @@Bwd18, @@Bwd19, @@Bwd20, @@Bwd21, @@Bwd22, @@Bwd23, @@Bwd24 + dd @@Bwd25, @@Bwd26, @@Bwd27, @@Bwd28, @@Bwd29, @@Bwd30, @@Bwd31, @@Bwd32 + dd @@Bwd33, @@Bwd34, @@Bwd35, @@Bwd36 + @@Bwd36: + mov ecx, [eax+32] + mov[edx+32], ecx + @@Bwd32: + mov ecx, [eax+28] + mov[edx+28], ecx + @@Bwd28: + mov ecx, [eax+24] + mov[edx+24], ecx + @@Bwd24: + mov ecx, [eax+20] + mov[edx+20], ecx + @@Bwd20: + mov ecx, [eax+16] + mov[edx+16], ecx + @@Bwd16: + mov ecx, [eax+12] + mov[edx+12], ecx + @@Bwd12: + mov ecx, [eax+8] + mov[edx+8], ecx + @@Bwd08: + mov ecx, [eax+4] + mov[edx+4], ecx + @@Bwd04: + mov ecx, [eax] + mov[edx], ecx + ret + nop + nop + nop + @@Bwd35: + mov ecx, [eax+31] + mov[edx+31], ecx + @@Bwd31: + mov ecx, [eax+27] + mov[edx+27], ecx + @@Bwd27: + mov ecx, [eax+23] + mov[edx+23], ecx + @@Bwd23: + mov ecx, [eax+19] + mov[edx+19], ecx + @@Bwd19: + mov ecx, [eax+15] + mov[edx+15], ecx + @@Bwd15: + mov ecx, [eax+11] + mov[edx+11], ecx + @@Bwd11: + mov ecx, [eax+7] + mov[edx+7], ecx + @@Bwd07: + mov ecx, [eax+3] + mov[edx+3], ecx + mov ecx, [eax] + mov[edx], ecx + ret + nop + nop + nop + @@Bwd03: + movzx ecx, word ptr [eax+1] + mov[edx+1], cx + movzx ecx, byte ptr [eax] + mov[edx], cl + ret + nop + nop + @@Bwd34: + mov ecx, [eax+30] + mov[edx+30], ecx + @@Bwd30: + mov ecx, [eax+26] + mov[edx+26], ecx + @@Bwd26: + mov ecx, [eax+22] + mov[edx+22], ecx + @@Bwd22: + mov ecx, [eax+18] + mov[edx+18], ecx + @@Bwd18: + mov ecx, [eax+14] + mov[edx+14], ecx + @@Bwd14: + mov ecx, [eax+10] + mov[edx+10], ecx + @@Bwd10: + mov ecx, [eax+6] + mov[edx+6], ecx + @@Bwd06: + mov ecx, [eax+2] + mov[edx+2], ecx + @@Bwd02: + movzx ecx, word ptr [eax] + mov[edx], cx + ret + nop + @@Bwd33: + mov ecx, [eax+29] + mov[edx+29], ecx + @@Bwd29: + mov ecx, [eax+25] + mov[edx+25], ecx + @@Bwd25: + mov ecx, [eax+21] + mov[edx+21], ecx + @@Bwd21: + mov ecx, [eax+17] + mov[edx+17], ecx + @@Bwd17: + mov ecx, [eax+13] + mov[edx+13], ecx + @@Bwd13: + mov ecx, [eax+9] + mov[edx+9], ecx + @@Bwd09: + mov ecx, [eax+5] + mov[edx+5], ecx + @@Bwd05: + mov ecx, [eax+1] + mov[edx+1], ecx + @@Bwd01: + movzx ecx, byte ptr[eax] + mov[edx], cl + ret + nop + nop + @@Done: +end; + +var + VALMove_PrefetchLimit: Integer; + + {***********************************************************} + {Dest MUST be 16-Byes Aligned, Count MUST be multiple of 16 } +procedure ALAlignedFwdMoveSSE(const Source; var Dest; Count: Integer); +const + Prefetch = 512; +asm + push ebx + mov ebx, eax {ebx = Source} + mov eax, ecx {EAX = Count} + and eax, -128 {EAX = No of Bytes to Block Move} + add ebx, eax + add edx, eax + shr eax, 3 {EAX = No of QWORD's to Block Move} + neg eax + cmp eax, VALMove_PrefetchLimit {Count > Limit - Use Prefetch} + jl @Large + @Small: + test ebx, 15 {Check if Both Source/Dest are Aligned} + jnz @SmallUnaligned + @SmallAligned: {Both Source and Dest 16-Byte Aligned} + + nop {Align Loops} + nop + nop + + @SmallAlignedLoop: + movaps xmm0, [ebx+8*eax] + movaps xmm1, [ebx+8*eax+16] + movaps xmm2, [ebx+8*eax+32] + movaps xmm3, [ebx+8*eax+48] + movaps[edx+8*eax], xmm0 + movaps[edx+8*eax+16], xmm1 + movaps[edx+8*eax+32], xmm2 + movaps[edx+8*eax+48], xmm3 + movaps xmm4, [ebx+8*eax+64] + movaps xmm5, [ebx+8*eax+80] + movaps xmm6, [ebx+8*eax+96] + movaps xmm7, [ebx+8*eax+112] + movaps[edx+8*eax+64], xmm4 + movaps[edx+8*eax+80], xmm5 + movaps[edx+8*eax+96], xmm6 + movaps[edx+8*eax+112], xmm7 + add eax, 16 + js @SmallAlignedLoop + jmp @Remainder + + @SmallUnaligned: {Source Not 16-Byte Aligned} + @SmallUnalignedLoop: + movups xmm0, [ebx+8*eax] + movups xmm1, [ebx+8*eax+16] + movups xmm2, [ebx+8*eax+32] + movups xmm3, [ebx+8*eax+48] + movaps[edx+8*eax], xmm0 + movaps[edx+8*eax+16], xmm1 + movaps[edx+8*eax+32], xmm2 + movaps[edx+8*eax+48], xmm3 + movups xmm4, [ebx+8*eax+64] + movups xmm5, [ebx+8*eax+80] + movups xmm6, [ebx+8*eax+96] + movups xmm7, [ebx+8*eax+112] + movaps[edx+8*eax+64], xmm4 + movaps[edx+8*eax+80], xmm5 + movaps[edx+8*eax+96], xmm6 + movaps[edx+8*eax+112], xmm7 + add eax, 16 + js @SmallUnalignedLoop + jmp @Remainder + + @Large: + test ebx, 15 {Check if Both Source/Dest Aligned} + jnz @LargeUnaligned + @LargeAligned: {Both Source and Dest 16-Byte Aligned} + @LargeAlignedLoop: + prefetchnta[ebx+8*eax+Prefetch] + prefetchnta[ebx+8*eax+Prefetch+64] + movaps xmm0, [ebx+8*eax] + movaps xmm1, [ebx+8*eax+16] + movaps xmm2, [ebx+8*eax+32] + movaps xmm3, [ebx+8*eax+48] + movntps[edx+8*eax], xmm0 + movntps[edx+8*eax+16], xmm1 + movntps[edx+8*eax+32], xmm2 + movntps[edx+8*eax+48], xmm3 + movaps xmm4, [ebx+8*eax+64] + movaps xmm5, [ebx+8*eax+80] + movaps xmm6, [ebx+8*eax+96] + movaps xmm7, [ebx+8*eax+112] + movntps[edx+8*eax+64], xmm4 + movntps[edx+8*eax+80], xmm5 + movntps[edx+8*eax+96], xmm6 + movntps[edx+8*eax+112], xmm7 + add eax, 16 + js @LargeAlignedLoop + sfence + jmp @Remainder + + @LargeUnaligned: {Source Not 16-Byte Aligned} + @LargeUnalignedLoop: + prefetchnta[ebx+8*eax+Prefetch] + prefetchnta[ebx+8*eax+Prefetch+64] + movups xmm0, [ebx+8*eax] + movups xmm1, [ebx+8*eax+16] + movups xmm2, [ebx+8*eax+32] + movups xmm3, [ebx+8*eax+48] + movntps[edx+8*eax], xmm0 + movntps[edx+8*eax+16], xmm1 + movntps[edx+8*eax+32], xmm2 + movntps[edx+8*eax+48], xmm3 + movups xmm4, [ebx+8*eax+64] + movups xmm5, [ebx+8*eax+80] + movups xmm6, [ebx+8*eax+96] + movups xmm7, [ebx+8*eax+112] + movntps[edx+8*eax+64], xmm4 + movntps[edx+8*eax+80], xmm5 + movntps[edx+8*eax+96], xmm6 + movntps[edx+8*eax+112], xmm7 + add eax, 16 + js @LargeUnalignedLoop + sfence + + @Remainder: + and ecx, $7F {ECX = Remainder (0..112 - Multiple of 16)} + jz @Done + add ebx, ecx + add edx, ecx + neg ecx + @RemainderLoop: + movups xmm0, [ebx+ecx] + movaps[edx+ecx], xmm0 + add ecx, 16 + jnz @RemainderLoop + @Done: + pop ebx +end; + + {****************************************************************************} + {Move ECX Bytes from EAX to EDX, where EAX > EDX and ECX > 36 (SMALLMOVESIZE)} +procedure ALForwards_SSE; +const + LARGESIZE = 2048; +asm + cmp ecx, LARGESIZE + jge @FwdLargeMove + cmp ecx, CALMOVE_SMALLMOVESIZE+32 + movups xmm0, [eax] + jg @FwdMoveSSE + movups xmm1, [eax+16] + movups[edx], xmm0 + movups[edx+16], xmm1 + add eax, ecx + add edx, ecx + sub ecx, 32 + jmp ALSmallForwardMove + @FwdMoveSSE: + push ebx + mov ebx, edx + {Align Writes} + add eax, ecx + add ecx, edx + add edx, 15 + and edx, -16 + sub ecx, edx + add edx, ecx + {Now Aligned} + sub ecx, 32 + neg ecx + @FwdLoopSSE: + movups xmm1, [eax+ecx-32] + movups xmm2, [eax+ecx-16] + movaps[edx+ecx-32], xmm1 + movaps[edx+ecx-16], xmm2 + add ecx, 32 + jle @FwdLoopSSE + movups[ebx], xmm0 {First 16 Bytes} + neg ecx + add ecx, 32 + pop ebx + jmp ALSmallForwardMove + @FwdLargeMove: + push ebx + mov ebx, ecx + test edx, 15 + jz @FwdLargeAligned + {16 byte Align Destination} + mov ecx, edx + add ecx, 15 + and ecx, -16 + sub ecx, edx + add eax, ecx + add edx, ecx + sub ebx, ecx + {Destination now 16 Byte Aligned} + call ALSmallForwardMove + mov ecx, ebx + @FwdLargeAligned: + and ecx, -16 + sub ebx, ecx {EBX = Remainder} + push edx + push eax + push ecx + call ALAlignedFwdMoveSSE + pop ecx + pop eax + pop edx + add ecx, ebx + add eax, ecx + add edx, ecx + mov ecx, ebx + pop ebx + jmp ALSmallForwardMove +end; + + {****************************************************************************} + {Move ECX Bytes from EAX to EDX, where EAX < EDX and ECX > 36 (SMALLMOVESIZE)} +procedure ALBackwards_SSE; +asm + cmp ecx, CALMOVE_SMALLMOVESIZE+32 + jg @BwdMoveSSE + sub ecx, 32 + movups xmm1, [eax+ecx] + movups xmm2, [eax+ecx+16] + movups[edx+ecx], xmm1 + movups[edx+ecx+16], xmm2 + jmp ALSmallBackwardMove + @BwdMoveSSE: + push ebx + movups xmm0, [eax+ecx-16] {Last 16 Bytes} + {Align Writes} + lea ebx, [edx+ecx] + and ebx, 15 + sub ecx, ebx + add ebx, ecx + {Now Aligned} + sub ecx, 32 + @BwdLoop: + movups xmm1, [eax+ecx] + movups xmm2, [eax+ecx+16] + movaps[edx+ecx], xmm1 + movaps[edx+ecx+16], xmm2 + sub ecx, 32 + jge @BwdLoop + movups[edx+ebx-16], xmm0 {Last 16 Bytes} + add ecx, 32 + pop ebx + jmp ALSmallBackwardMove +end; + + {******************************} + {Move using SSE Instruction Set} +procedure ALMove_SSE(const Source; var Dest; Count: Integer); +asm + cmp ecx, CALMOVE_SMALLMOVESIZE + ja @Large {Count > SMALLMOVESIZE or Count < 0} + cmp eax, edx + jbe @SmallCheck + add eax, ecx + add edx, ecx + jmp ALSmallForwardMove + @SmallCheck: + jne ALSmallBackwardMove + ret {For Compatibility with Delphi's move for Source = Dest} + @Large: + jng @Done {For Compatibility with Delphi's move for Count < 0} + cmp eax, edx + ja ALForwards_SSE + je @Done {For Compatibility with Delphi's move for Source = Dest} + sub edx, ecx + cmp eax, edx + lea edx, [edx+ecx] + jna ALForwards_SSE + jmp ALBackwards_SSE {Source/Dest Overlap} + @Done: +end; + + {****************************************************************************} + {Move ECX Bytes from EAX to EDX, where EAX > EDX and ECX > 36 (SMALLMOVESIZE)} +procedure ALForwards_IA32; +asm + push ebx + mov ebx, edx + fild qword ptr [eax] + add eax, ecx {QWORD Align Writes} + add ecx, edx + add edx, 7 + and edx, -8 + sub ecx, edx + add edx, ecx {Now QWORD Aligned} + sub ecx, 16 + neg ecx + @FwdLoop: + fild qword ptr [eax+ecx-16] + fistp qword ptr [edx+ecx-16] + fild qword ptr [eax+ecx-8] + fistp qword ptr [edx+ecx-8] + add ecx, 16 + jle @FwdLoop + fistp qword ptr [ebx] + neg ecx + add ecx, 16 + pop ebx + jmp ALSmallForwardMove +end; + + {****************************************************************************} + {Move ECX Bytes from EAX to EDX, where EAX > EDX and ECX > 36 (SMALLMOVESIZE)} +procedure ALForwards_MMX; +const + LARGESIZE = 1024; +asm + cmp ecx, LARGESIZE + jge @FwdLargeMove + cmp ecx, 72 {Size at which using MMX becomes worthwhile} + jl ALForwards_IA32 + push ebx + mov ebx, edx + movq mm0, [eax] {First 8 Bytes} + {QWORD Align Writes} + add eax, ecx + add ecx, edx + add edx, 7 + and edx, -8 + sub ecx, edx + add edx, ecx + {Now QWORD Aligned} + sub ecx, 32 + neg ecx + @FwdLoopMMX: + movq mm1, [eax+ecx-32] + movq mm2, [eax+ecx-24] + movq mm3, [eax+ecx-16] + movq mm4, [eax+ecx- 8] + movq[edx+ecx-32], mm1 + movq[edx+ecx-24], mm2 + movq[edx+ecx-16], mm3 + movq[edx+ecx- 8], mm4 + add ecx, 32 + jle @FwdLoopMMX + movq[ebx], mm0 {First 8 Bytes} + emms + pop ebx + neg ecx + add ecx, 32 + jmp ALSmallForwardMove + @FwdLargeMove: + push ebx + mov ebx, ecx + test edx, 15 + jz @FwdAligned + {16 byte Align Destination} + mov ecx, edx + add ecx, 15 + and ecx, -16 + sub ecx, edx + add eax, ecx + add edx, ecx + sub ebx, ecx + {Destination now 16 Byte Aligned} + call ALSmallForwardMove + @FwdAligned: + mov ecx, ebx + and ecx, -16 + sub ebx, ecx {EBX = Remainder} + push esi + push edi + mov esi, eax {ESI = Source} + mov edi, edx {EDI = Dest} + mov eax, ecx {EAX = Count} + and eax, -64 {EAX = No of Bytes to Blocks Moves} + and ecx, $3F {ECX = Remaining Bytes to Move (0..63)} + add esi, eax + add edi, eax + shr eax, 3 {EAX = No of QWORD's to Block Move} + neg eax + @MMXcopyloop: + movq mm0, [esi+eax*8 ] + movq mm1, [esi+eax*8+ 8] + movq mm2, [esi+eax*8+16] + movq mm3, [esi+eax*8+24] + movq mm4, [esi+eax*8+32] + movq mm5, [esi+eax*8+40] + movq mm6, [esi+eax*8+48] + movq mm7, [esi+eax*8+56] + movq[edi+eax*8 ], mm0 + movq[edi+eax*8+ 8], mm1 + movq[edi+eax*8+16], mm2 + movq[edi+eax*8+24], mm3 + movq[edi+eax*8+32], mm4 + movq[edi+eax*8+40], mm5 + movq[edi+eax*8+48], mm6 + movq[edi+eax*8+56], mm7 + add eax, 8 + jnz @MMXcopyloop + emms {Empty MMX State} + add ecx, ebx + shr ecx, 2 + rep movsd + mov ecx, ebx + and ecx, 3 + rep movsb + pop edi + pop esi + pop ebx +end; + + {****************************************************************************} + {Move ECX Bytes from EAX to EDX, where EAX < EDX and ECX > 36 (SMALLMOVESIZE)} +procedure ALBackwards_IA32; +asm + push ebx + fild qword ptr [eax+ecx-8] + lea ebx, [edx+ecx] {QWORD Align Writes} + and ebx, 7 + sub ecx, ebx + add ebx, ecx {Now QWORD Aligned, EBX = Original Length} + sub ecx, 16 + @BwdLoop: + fild qword ptr [eax+ecx] + fild qword ptr [eax+ecx+8] + fistp qword ptr [edx+ecx+8] + fistp qword ptr [edx+ecx] + sub ecx, 16 + jge @BwdLoop + fistp qword ptr [edx+ebx-8] + add ecx, 16 + pop ebx + jmp ALSmallBackwardMove +end; + + {****************************************************************************} + {Move ECX Bytes from EAX to EDX, where EAX < EDX and ECX > 36 (SMALLMOVESIZE)} +procedure ALBackwards_MMX; +asm + cmp ecx, 72 {Size at which using MMX becomes worthwhile} + jl ALBackwards_IA32 + push ebx + movq mm0, [eax+ecx-8] {Get Last QWORD} + {QWORD Align Writes} + lea ebx, [edx+ecx] + and ebx, 7 + sub ecx, ebx + add ebx, ecx + {Now QWORD Aligned} + sub ecx, 32 + @BwdLoopMMX: + movq mm1, [eax+ecx ] + movq mm2, [eax+ecx+ 8] + movq mm3, [eax+ecx+16] + movq mm4, [eax+ecx+24] + movq[edx+ecx+24], mm4 + movq[edx+ecx+16], mm3 + movq[edx+ecx+ 8], mm2 + movq[edx+ecx ], mm1 + sub ecx, 32 + jge @BwdLoopMMX + movq[edx+ebx-8], mm0 {Last QWORD} + emms + add ecx, 32 + pop ebx + jmp ALSmallBackwardMove +end; + + {******************************} + {Move using MMX Instruction Set} +procedure ALMove_MMX(const Source; var Dest; Count: Integer); +asm + cmp ecx, CALMOVE_SMALLMOVESIZE + ja @Large {Count > SMALLMOVESIZE or Count < 0} + cmp eax, edx + jbe @SmallCheck + add eax, ecx + add edx, ecx + jmp ALSmallForwardMove + @SmallCheck: + jne ALSmallBackwardMove + ret {For Compatibility with Delphi's move for Source = Dest} + @Large: + jng @Done {For Compatibility with Delphi's move for Count < 0} + cmp eax, edx + ja ALForwards_MMX + je @Done {For Compatibility with Delphi's move for Source = Dest} + sub edx, ecx + cmp eax, edx + lea edx, [edx+ecx] + jna ALForwards_MMX + jmp ALBackwards_MMX {Source/Dest Overlap} + @Done: +end; + +procedure ALMove_IA32(const Source; var Dest; Count: Integer); +asm + cmp ecx, CALMOVE_SMALLMOVESIZE + ja @Large {Count > SMALLMOVESIZE or Count < 0} + cmp eax, edx + jbe @SmallCheck + add eax, ecx + add edx, ecx + jmp ALSmallForwardMove + @SmallCheck: + jne ALSmallBackwardMove + ret {For Compatibility with Delphi's move for Source = Dest} + @Large: + jng @Done {For Compatibility with Delphi's move for Count < 0} + cmp eax, edx + ja ALForwards_IA32 + je @Done {For Compatibility with Delphi's move for Source = Dest} + sub edx, ecx + cmp eax, edx + lea edx, [edx+ecx] + jna ALForwards_IA32 + jmp ALBackwards_IA32 {Source/Dest Overlap} + @Done: +end; + + //*************************************************************************** + //**** ALCPUID Partial Unit + //*************************************************************************** +var + VALCPUInfo: TALCPUinfo; + +function ALGetCPUInfo: TALCPUinfo; +begin + Result := VALCPUInfo; +end; + +function ALPos_IA32(const SubStr: ansistring; const Str: ansistring): Integer; +asm + test eax, eax + jz @NotFoundExit {Exit if SubStr = ''} + test edx, edx + jz @NotFound {Exit if Str = ''} + mov ecx, [edx-4] {Length(Str)} + cmp[eax-4], 1 {Length SubStr = 1?} + je @SingleChar {Yes - Exit via CharPos} + jl @NotFound {Exit if Length(SubStr) < 1} + sub ecx, [eax-4] {Subtract Length(SubStr), -ve handled by +CharPos} + add ecx, 1 {Number of Chars to Check for 1st Char} + push esi {Save Registers} + push edi + push ebx + push ebp + mov ebx, [eax] {BL = 1st Char of SubStr} + mov esi, eax {Start Address of SubStr} + mov edi, ecx {Initial Remainder Count} + mov ebp, edx {Start Address of Str} + @StrLoop: + mov eax, ebx {AL = 1st char of SubStr for next Search} + mov ecx, edi {Remaining Length} + push edx {Save Start Position} + call @CharPos {Search for 1st Character} + pop edx {Restore Start Position} + jz @StrExit {Exit with Zero Result if 1st Char Not Found} + mov ecx, [esi-4] {Length SubStr} + add edx, eax {Update Start Position for Next Loop} + sub edi, eax {Update Remaining Length for Next Loop} + sub ecx, 1 {Remaining Characters to Compare} + @StrCheck: + mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str} + cmp al, [esi+ecx] + jne @StrLoop {Different - Return to First Character Search} + sub ecx, 1 + jg @StrCheck {Check each Remaining Character} + mov eax, edx {All Characters Matched - Calculate Result} + sub eax, ebp + @StrExit: + pop ebp {Restore Registers} + pop ebx + pop edi + pop esi + ret + @NotFound: + xor eax, eax {Return 0} + @NotFoundExit: + ret + @SingleChar: + mov al, [eax] {Search Character} + {Return Position of Character AL within a String of Length ECX starting} + {at Address EDX. If Found, Return Index in EAX and Clear Zero Flag, } + {otherwise Return 0 in EAX and Set Zero Flag. Changes EAX, ECX and EDX} + @CharPos: + push ecx {Save Length} + neg ecx + cmp ecx, -4 + jle @NotSmall {Length >= 4} + or ecx, ecx + jge @CharNotFound {Exit if Length <= 0} + cmp al, [edx] {Check 1st Char} + je @Found + add ecx, 1 + jz @CharNotFound + cmp al, [edx+1] {Check 2nd Char} + je @Found + add ecx, 1 + jz @CharNotFound + cmp al, [edx+2] {Check 3rd Char} + je @Found + jmp @CharNotFound + @NotSmall: + sub edx, ecx {End of String} + @Loop: + cmp al, [edx+ecx] {Compare Next 4 Characters} + je @Found + cmp al, [edx+ecx+1] + je @Found2 + cmp al, [edx+ecx+2] + je @Found3 + cmp al, [edx+ecx+3] + je @Found4 + add ecx, 4 {Next Character Position} + and ecx, -4 {Prevent Read Past Last Character} + jnz @Loop {Loop until all Characters Compared} + @CharNotFound: + pop ecx {Restore Stack} + xor eax, eax {Set Result to 0 and Set Zero Flag} + ret {Finished} + @Found4: + add ecx, 1 + @Found3: + add ecx, 1 + @Found2: + add ecx, 1 + @Found: + add ecx, 1 + pop eax + add eax, ecx {Set Result and Clear Zero Flag} +end; + +{***************************************************************************} +function ALPos_MMX(const SubStr: ansistring; const Str: ansistring): Integer; +asm + test eax, eax + jz @NotFoundExit {Exit if SurStr = ''} + test edx, edx + jz @NotFound {Exit if Str = ''} + mov ecx, [edx-4] {Length(Str)} + cmp[eax-4], 1 {Length SubStr = 1?} + je @SingleChar {Yes - Exit via CharPos} + jl @NotFound {Exit if Length(SubStr) < 1} + sub ecx, [eax-4] {Subtract Length(SubStr), -ve handled by +CharPos} + add ecx, 1 {Number of Chars to Check for 1st Char} + push esi {Save Registers} + push edi + push ebx + push ebp + mov esi, eax {Start Address of SubStr} + mov edi, ecx {Initial Remainder Count} + mov eax, [eax] {AL = 1st Char of SubStr} + mov ebp, edx {Start Address of Str} + mov ebx, eax {Maintain 1st Search Char in BL} + @StrLoop: + mov eax, ebx {AL = 1st char of SubStr} + mov ecx, edi {Remaining Length} + push edx {Save Start Position} + call @CharPos {Search for 1st Character} + pop edx {Restore Start Position} + test eax, eax {Result = 0?} + jz @StrExit {Exit if 1st Character Not Found} + mov ecx, [esi-4] {Length SubStr} + add edx, eax {Update Start Position for Next Loop} + sub edi, eax {Update Remaining Length for Next Loop} + sub ecx, 1 {Remaining Characters to Compare} + @StrCheck: + mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str} + cmp al, [esi+ecx] + jne @StrLoop {Different - Return to First Character Search} + sub ecx, 1 + jnz @StrCheck {Check each Remaining Character} + mov eax, edx {All Characters Matched - Calculate Result} + sub eax, ebp + @StrExit: + pop ebp {Restore Registers} + pop ebx + pop edi + pop esi + ret + @NotFound: + xor eax, eax {Return 0} + @NotFoundExit: + ret + @SingleChar: + mov al, [eax] {Search Character} + @CharPos: + CMP ECX, 8 + JG @@NotSmall + @@Small: + or ecx, ecx + jle @@NotFound {Exit if Length <= 0} + CMP AL, [EDX] + JZ @Found1 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+1] + JZ @Found2 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+2] + JZ @Found3 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+3] + JZ @Found4 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+4] + JZ @Found5 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+5] + JZ @Found6 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+6] + JZ @Found7 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+7] + JZ @Found8 + @@NotFound: + xor EAX, EAX + RET + @Found1: + MOV EAX, 1 + RET + @Found2: + MOV EAX, 2 + RET + @Found3: + MOV EAX, 3 + RET + @Found4: + MOV EAX, 4 + RET + @Found5: + MOV EAX, 5 + RET + @Found6: + MOV EAX, 6 + RET + @Found7: + MOV EAX, 7 + RET + @Found8: + MOV EAX, 8 + RET + + @@NotSmall: {Length(Str) > 8} + MOV AH, AL + ADD EDX, ECX + MOVD MM0, EAX + PUNPCKLWD MM0, MM0 + PUNPCKLDQ MM0, MM0 + PUSH ECX {Save Length} + NEG ECX + @@First8: + MOVQ MM1, [EDX+ECX] + ADD ECX, 8 + PCMPEQB MM1, MM0 {Compare All 8 Bytes} + PACKSSWB MM1, MM1 {Pack Result into 4 Bytes} + MOVD EAX, MM1 + TEST EAX, EAX + JNZ @@Matched {Exit on Match at any Position} + CMP ECX, -8 {Check if Next Loop would pass String End} + JGE @@Last8 + @@Align: {Align to Previous 8 Byte Boundary} + LEA EAX, [EDX+ECX] + and EAX, 7 {EAX -> 0 or 4} + SUB ECX, EAX + @@Loop: + MOVQ MM1, [EDX+ECX] + ADD ECX, 8 + PCMPEQB MM1, MM0 {Compare All 8 Bytes} + PACKSSWB MM1, MM1 {Pack Result into 4 Bytes} + MOVD EAX, MM1 + TEST EAX, EAX + JNZ @@Matched {Exit on Match at any Position} + CMP ECX, -8 {Check if Next Loop would pass String End} +{$IFNDEF NoUnroll} + JGE @@Last8 + MOVQ MM1, [EDX+ECX] + ADD ECX, 8 + PCMPEQB MM1, MM0 {Compare All 8 Bytes} + PACKSSWB MM1, MM1 {Pack Result into 4 Bytes} + MOVD EAX, MM1 + TEST EAX, EAX + JNZ @@Matched {Exit on Match at any Position} + CMP ECX, -8 {Check if Next Loop would pass String End} +{$ENDIF} + JL @@Loop + @@Last8: + MOVQ MM1, [EDX-8] {Position for Last 8 Used Characters} + POP EDX {Original Length} + PCMPEQB MM1, MM0 {Compare All 8 Bytes} + PACKSSWB MM1, MM1 {Pack Result into 4 Bytes} + MOVD EAX, MM1 + TEST EAX, EAX + JNZ @@Matched2 {Exit on Match at any Position} + EMMS + RET {Finished - Not Found} + @@Matched: {Set Result from 1st Match in EDX} + POP EDX {Original Length} + ADD EDX, ECX + @@Matched2: + EMMS + SUB EDX, 8 {Adjust for Extra ADD ECX,8 in Loop} + TEST AL, AL + JNZ @@MatchDone {Match at Position 1 or 2} + TEST AH, AH + JNZ @@Match1 {Match at Position 3 or 4} + shr EAX, 16 + TEST AL, AL + JNZ @@Match2 {Match at Position 5 or 6} + shr EAX, 8 + ADD EDX, 6 + JMP @@MatchDone + @@Match2: + ADD EDX, 4 + JMP @@MatchDone + @@Match1: + shr EAX, 8 {AL <- AH} + ADD EDX, 2 + @@MatchDone: + xor EAX, 2 + and EAX, 3 {EAX <- 1 or 2} + ADD EAX, EDX + +end; + +{***************************************************************************} +function ALPos_SSE(const SubStr: ansistring; const Str: ansistring): Integer; +asm + test eax, eax + jz @NotFoundExit {Exit if SurStr = ''} + test edx, edx + jz @NotFound {Exit if Str = ''} + mov ecx, [edx-4] {Length(Str)} + cmp[eax-4], 1 {Length SubStr = 1?} + je @SingleChar {Yes - Exit via CharPos} + jl @NotFound {Exit if Length(SubStr) < 1} + sub ecx, [eax-4] {Subtract Length(SubStr), -ve handled by +CharPos} + add ecx, 1 {Number of Chars to Check for 1st Char} + push esi {Save Registers} + push edi + push ebx + push ebp + mov esi, eax {Start Address of SubStr} + mov edi, ecx {Initial Remainder Count} + mov eax, [eax] {AL = 1st Char of SubStr} + mov ebp, edx {Start Address of Str} + mov ebx, eax {Maintain 1st Search Char in BL} + @StrLoop: + mov eax, ebx {AL = 1st char of SubStr} + mov ecx, edi {Remaining Length} + push edx {Save Start Position} + call @CharPos {Search for 1st Character} + pop edx {Restore Start Position} + test eax, eax {Result = 0?} + jz @StrExit {Exit if 1st Character Not Found} + mov ecx, [esi-4] {Length SubStr} + add edx, eax {Update Start Position for Next Loop} + sub edi, eax {Update Remaining Length for Next Loop} + sub ecx, 1 {Remaining Characters to Compare} + @StrCheck: + mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str} + cmp al, [esi+ecx] + jne @StrLoop {Different - Return to First Character Search} + sub ecx, 1 + jnz @StrCheck {Check each Remaining Character} + mov eax, edx {All Characters Matched - Calculate Result} + sub eax, ebp + @StrExit: + pop ebp {Restore Registers} + pop ebx + pop edi + pop esi + ret + @NotFound: + xor eax, eax {Return 0} + @NotFoundExit: + ret + @SingleChar: + mov al, [eax] {Search Character} + @CharPos: + CMP ECX, 8 + JG @@NotSmall + @@Small: + or ecx, ecx + jle @@NotFound {Exit if Length <= 0} + CMP AL, [EDX] + JZ @Found1 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+1] + JZ @Found2 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+2] + JZ @Found3 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+3] + JZ @Found4 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+4] + JZ @Found5 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+5] + JZ @Found6 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+6] + JZ @Found7 + DEC ECX + JZ @@NotFound + CMP AL, [EDX+7] + JZ @Found8 + @@NotFound: + xor EAX, EAX + RET + @Found1: + MOV EAX, 1 + RET + @Found2: + MOV EAX, 2 + RET + @Found3: + MOV EAX, 3 + RET + @Found4: + MOV EAX, 4 + RET + @Found5: + MOV EAX, 5 + RET + @Found6: + MOV EAX, 6 + RET + @Found7: + MOV EAX, 7 + RET + @Found8: + MOV EAX, 8 + RET + @@NotSmall: + MOV AH, AL + ADD EDX, ECX + MOVD MM0, EAX + PSHUFW MM0, MM0, 0 + PUSH ECX + NEG ECX + @@First8: + MOVQ MM1, [EDX+ECX] + ADD ECX, 8 + PCMPEQB MM1, MM0 {Compare Next 8 Bytes} + PMOVMSKB EAX, MM1 + TEST EAX, EAX + JNZ @@Matched {Exit on Match at any Position} + CMP ECX, -8 {Check if Next Loop would pass String End} + JGE @@Last8 + @@Align: + LEA EAX, [EDX+ECX] + and EAX, 7 + SUB ECX, EAX + @@Loop: {Loop Unrolled 2X} + MOVQ MM1, [EDX+ECX] + ADD ECX, 8 + PCMPEQB MM1, MM0 {Compare Next 8 Bytes} + PMOVMSKB EAX, MM1 + TEST EAX, EAX + JNZ @@Matched {Exit on Match at any Position} + CMP ECX, -8 {Check if Next Loop would pass String End} +{$IFNDEF NoUnroll} + JGE @@Last8 + MOVQ MM1, [EDX+ECX] + ADD ECX, 8 + PCMPEQB MM1, MM0 {Compare Next 8 Bytes} + PMOVMSKB EAX, MM1 + TEST EAX, EAX + JNZ @@Matched {Exit on Match at any Position} + CMP ECX, -8 {Check if Next Loop would pass String End} +{$ENDIF} + JL @@loop + @@Last8: + PCMPEQB MM0, [EDX-8] + POP ECX {Original Length} + PMOVMSKB EAX, MM0 + TEST EAX, EAX + JNZ @@Matched2 + EMMS + RET {Finished} + @@Matched: {Set Result from 1st Match in EcX} + POP EDX {Original Length} + ADD ECX, EDX + @@Matched2: + EMMS + BSF EDX, EAX + LEA EAX, [EDX+ECX-7] +end; + +{****************************************************************************} +function ALPos_SSE2(const SubStr: ansistring; const Str: ansistring): Integer; +asm + test eax, eax + jz @NotFoundExit {Exit if SurStr = ''} + test edx, edx + jz @NotFound {Exit if Str = ''} + mov ecx, [edx-4] {Length(Str)} + cmp[eax-4], 1 {Length SubStr = 1?} + je @SingleChar {Yes - Exit via CharPos} + jl @NotFound {Exit if Length(SubStr) < 1} + sub ecx, [eax-4] {Subtract Length(SubStr)} + jl @NotFound {Exit if Length(SubStr) > Length(Str)} + add ecx, 1 {Number of Chars to Check for 1st Char} + push esi {Save Registers} + push edi + push ebx + push ebp + mov esi, eax {Start Address of SubStr} + mov edi, ecx {Initial Remainder Count} + mov eax, [eax] {AL = 1st Char of SubStr} + mov ebp, edx {Start Address of Str} + mov ebx, eax {Maintain 1st Search Char in BL} + @StrLoop: + mov eax, ebx {AL = 1st char of SubStr} + mov ecx, edi {Remaining Length} + push edx {Save Start Position} + call @CharPos {Search for 1st Character} + pop edx {Restore Start Position} + test eax, eax {Result = 0?} + jz @StrExit {Exit if 1st Character Not Found} + mov ecx, [esi-4] {Length SubStr} + add edx, eax {Update Start Position for Next Loop} + sub edi, eax {Update Remaining Length for Next Loop} + sub ecx, 1 {Remaining Characters to Compare} + @StrCheck: + mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str} + cmp al, [esi+ecx] + jne @StrLoop {Different - Return to First Character Search} + sub ecx, 1 + jnz @StrCheck {Check each Remaining Character} + mov eax, edx {All Characters Matched - Calculate Result} + sub eax, ebp + @StrExit: + pop ebp {Restore Registers} + pop ebx + pop edi + pop esi + ret + @NotFound: + xor eax, eax {Return 0} + @NotFoundExit: + ret + @SingleChar: + mov al, [eax] {Search Character} + @CharPos: + PUSH EBX + MOV EBX, EAX + CMP ECX, 16 + JL @@Small + @@NotSmall: + MOV AH, AL {Fill each Byte of XMM1 with AL} + MOVD XMM1, EAX + PSHUFLW XMM1, XMM1, 0 + PSHUFD XMM1, XMM1, 0 + @@First16: + MOVUPS XMM0, [EDX] {Unaligned} + PCMPEQB XMM0, XMM1 {Compare First 16 Characters} + PMOVMSKB EAX, XMM0 + TEST EAX, EAX + JNZ @@FoundStart {Exit on any Match} + CMP ECX, 32 + JL @@Medium {If Length(Str) < 32, Check Remainder} + @@Align: + SUB ECX, 16 {Align Block Reads} + PUSH ECX + MOV EAX, EDX + NEG EAX + and EAX, 15 + ADD EDX, ECX + NEG ECX + ADD ECX, EAX + @@Loop: + MOVAPS XMM0, [EDX+ECX] {Aligned} + PCMPEQB XMM0, XMM1 {Compare Next 16 Characters} + PMOVMSKB EAX, XMM0 + TEST EAX, EAX + JNZ @@Found {Exit on any Match} + ADD ECX, 16 + JLE @@Loop + @Remainder: + POP EAX {Check Remaining Characters} + ADD EDX, 16 + ADD EAX, ECX {Count from Last Loop End Position} + JMP DWORD PTR [@@JumpTable2-ECX*4] + + @@NullString: + xor EAX, EAX {Result = 0} + RET + + @@FoundStart: + BSF EAX, EAX {Get Set Bit} + POP EBX + ADD EAX, 1 {Set Result} + RET + + @@Found: + POP EDX + BSF EAX, EAX {Get Set Bit} + ADD EDX, ECX + POP EBX + LEA EAX, [EAX+EDX+1] {Set Result} + RET + + @@Medium: + ADD EDX, ECX {End of String} + MOV EAX, 16 {Count from 16} + JMP DWORD PTR [@@JumpTable1-64-ECX*4] + + @@Small: + ADD EDX, ECX {End of String} + xor EAX, EAX {Count from 0} + JMP DWORD PTR [@@JumpTable1-ECX*4] + + nop; + nop; + nop {Aligb Jump Tables} + + @@JumpTable1: + DD @@NotFound, @@01, @@02, @@03, @@04, @@05, @@06, @@07 + DD @@08, @@09, @@10, @@11, @@12, @@13, @@14, @@15, @@16 + + @@JumpTable2: + DD @@16, @@15, @@14, @@13, @@12, @@11, @@10, @@09, @@08 + DD @@07, @@06, @@05, @@04, @@03, @@02, @@01, @@NotFound + + @@16: + ADD EAX, 1 + CMP BL, [EDX-16] + JE @@Done + @@15: + ADD EAX, 1 + CMP BL, [EDX-15] + JE @@Done + @@14: + ADD EAX, 1 + CMP BL, [EDX-14] + JE @@Done + @@13: + ADD EAX, 1 + CMP BL, [EDX-13] + JE @@Done + @@12: + ADD EAX, 1 + CMP BL, [EDX-12] + JE @@Done + @@11: + ADD EAX, 1 + CMP BL, [EDX-11] + JE @@Done + @@10: + ADD EAX, 1 + CMP BL, [EDX-10] + JE @@Done + @@09: + ADD EAX, 1 + CMP BL, [EDX-9] + JE @@Done + @@08: + ADD EAX, 1 + CMP BL, [EDX-8] + JE @@Done + @@07: + ADD EAX, 1 + CMP BL, [EDX-7] + JE @@Done + @@06: + ADD EAX, 1 + CMP BL, [EDX-6] + JE @@Done + @@05: + ADD EAX, 1 + CMP BL, [EDX-5] + JE @@Done + @@04: + ADD EAX, 1 + CMP BL, [EDX-4] + JE @@Done + @@03: + ADD EAX, 1 + CMP BL, [EDX-3] + JE @@Done + @@02: + ADD EAX, 1 + CMP BL, [EDX-2] + JE @@Done + @@01: + ADD EAX, 1 + CMP BL, [EDX-1] + JE @@Done + @@NotFound: + xor EAX, EAX + @@Done: + POP EBX +end; + + + {**********************************} + {Called Once by Unit Initialisation} +procedure ALInitFastPosFunct; +var + aCpuInfo: TALCpuinfo; +begin + aCpuInfo := AlGetCpuInfo; + + if (isSSE2 in aCpuInfo.InstructionSupport) then + ALPos := AlPos_SSE2 {Processor Supports SSE} + else if (isSSE in aCpuInfo.InstructionSupport) then + ALPos := AlPos_SSE {Processor Supports SSE} + else if (isMMX in aCpuInfo.InstructionSupport) then + ALPos := AlPos_MMX {Processor Supports MMX} + else + ALPos := ALPos_IA32; {Processor does not Support MMX or SSE} +end; + +//*************************************************************************** +procedure ALInitFastMovProc; +var + aCpuInfo: TALCpuinfo; +begin + aCpuInfo := AlGetCpuInfo; + + if (isSSE in aCpuInfo.InstructionSupport) then + ALMove := AlMove_SSE {Processor Supports SSE} + else if (isMMX in aCpuInfo.InstructionSupport) then + ALMove := AlMove_MMX {Processor Supports MMX} + else + ALMove := ALMove_IA32; {Processor does not Support MMX or SSE} +end; + + + ///////////////////////////////////////// + ////////// TALSMTPClientHeader ////////// + ///////////////////////////////////////// + +{********************************************************} +procedure TALSMTPClientHeader.AssignTo(Dest: TPersistent); +begin + if Dest is TALSMTPClientHeader then + with Dest as TALSMTPClientHeader do + begin + fSendTo := self.fSendTo; + fSender := self.fSender; + fMessageID := self.fMessageID; + fbcc := self.fbcc; + fContentTransferEncoding := self.fContentTransferEncoding; + fComments := self.fComments; + fMIMEVersion := self.fMIMEVersion; + fPriority := self.fPriority; + fReplyTo := self.fReplyTo; + fSubject := self.fSubject; + fFrom := self.fFrom; + fDate := self.fDate; + fDispositionNotificationTo := self.fDispositionNotificationTo; + fReferences := self.fReferences; + fcc := self.fcc; + fContentType := self.fContentType; + FCustomHeaders.Assign(FCustomHeaders); + end + else + inherited AssignTo(Dest); +end; + +{**********************************} +procedure TALSMTPClientHeader.Clear; +begin + fSendTo := ''; + fSender := ''; + fMessageID := ''; + fbcc := ''; + fContentTransferEncoding := ''; + fComments := ''; + fMIMEVersion := ''; + fPriority := ''; + fReplyTo := ''; + fSubject := ''; + fFrom := ''; + fDate := ''; + fDispositionNotificationTo := ''; + fReferences := ''; + fcc := ''; + fContentType := ''; + FCustomHeaders.Clear; +end; + +{*************************************} +constructor TALSMTPClientHeader.Create; +begin + inherited Create; + FCustomHeaders := TStringList.Create; + FCustomHeaders.NameValueSeparator := ':'; + Clear; + fMessageID := 'AUTO'; + fMIMEVersion := '1.0'; + fDate := 'NOW'; + fContentType := 'text/plain'; +end; + +{*************************************} +destructor TALSMTPClientHeader.Destroy; +begin + FCustomHeaders.Free; + inherited; +end; + +{****************************************************} +function TALSMTPClientHeader.GetRawHeaderText: String; +var + i: Integer; + Str: String; +begin + Result := ''; + if Trim(fFrom) <> '' then + Result := Result + 'From: ' + trim(fFrom) + #13#10; + if Trim(fSender) <> '' then + Result := Result + 'Sender: ' + trim(fSender) + #13#10; + if Trim(fSendTo) <> '' then + Result := Result + 'To: ' + trim(fSendTo) + #13#10; + if Trim(fcc) <> '' then + Result := Result + 'cc: ' + trim(fcc) + #13#10; + if Trim(fbcc) <> '' then + Result := Result + 'bcc: ' + trim(fbcc) + #13#10; + if Trim(fReplyTo) <> '' then + Result := Result + 'Reply-To: ' + trim(fReplyTo) + #13#10; + if Trim(fSubject) <> '' then + Result := Result + 'Subject: ' + trim(fSubject) + #13#10; + Str := fMessageID; + if Trim(str) <> '' then + begin + if sametext(Str, 'AUTO') then + Str := '<' + AlSMTPClientGenerateMessageID + '>'; + Result := Result + 'Message-ID: ' + trim(str) + #13#10; + end; + if Trim(fReferences) <> '' then + Result := Result + 'References: ' + trim(fReferences) + #13#10; + if Trim(fComments) <> '' then + Result := Result + 'Comments: ' + trim(fComments) + #13#10; + Str := fDate; + if Trim(str) <> '' then + begin + if sametext(Str, 'NOW') then + Str := ALDateTimeToRfc822Str(Now); + Result := Result + 'Date: ' + trim(str) + #13#10; + end; + if Trim(fContentType) <> '' then + Result := Result + 'Content-Type: ' + trim(fContentType) + #13#10; + if Trim(fContentTransferEncoding) <> '' then + Result := Result + 'Content-Transfer-Encoding: ' + trim(fContentTransferEncoding) + #13#10; + if Trim(fMIMEVersion) <> '' then + Result := Result + 'MIME-Version: ' + trim(fMIMEVersion) + #13#10; + if Trim(fPriority) <> '' then + Result := Result + 'Priority: ' + trim(fPriority) + #13#10; + if Trim(fDispositionNotificationTo) <> '' then + Result := Result + 'Disposition-Notification-To: ' + trim(fDispositionNotificationTo) + #13#10; + for i := 0 to FCustomHeaders.Count - 1 do + if (trim(FCustomHeaders.names[i]) <> '') and (trim(FCustomHeaders.ValueFromIndex[i]) <> '') then + Result := Result + FCustomHeaders.names[i] + ': ' + trim(FCustomHeaders.ValueFromIndex[i]) + #13#10; +end; + +{***************************************************************************} +procedure TALSMTPClientHeader.SetRawHeaderText(const aRawHeaderText: String); +var + aRawHeaderLst: TStringList; + + {-------------------------------------} + function AlG001(aName: String): String; + var + i: Integer; + Str: String; + begin + I := aRawHeaderLst.IndexOfName(aName); + if I >= 0 then + begin + Result := Trim(aRawHeaderLst.ValueFromIndex[i]); + aRawHeaderLst.Delete(i); + while True do + begin + if i >= aRawHeaderLst.Count then + break; + str := aRawHeaderLst[i]; + if (str = '') or + (not (str[1] in [' ', #9])) then + break; //(1) an empty line or (2) a line that does not start with a space, a tab, or a field name followed by a colon + Result := trim(Result + ' ' + trim(str)); + aRawHeaderLst.Delete(i); + end; + end + else + Result := ''; + end; + +var + Str1, Str2: String; + j: Integer; +begin + aRawHeaderLst := TStringList.Create; + try + aRawHeaderLst.NameValueSeparator := ':'; + aRawHeaderLst.Text := aRawHeaderText; + + fFrom := Alg001('From'); + fSender := Alg001('Sender'); + fSendTo := Alg001('To'); + fcc := Alg001('cc'); + fbcc := Alg001('bcc'); + fReplyTo := Alg001('Reply-To'); + fSubject := Alg001('Subject'); + fMessageID := Alg001('Message-ID'); + fReferences := Alg001('References'); + fComments := Alg001('Comments'); + fDate := Alg001('Date'); + fContentType := Alg001('Content-Type'); + fContentTransferEncoding := Alg001('Content-Transfer-Encoding'); + fMIMEVersion := Alg001('MIME-Version'); + fPriority := Alg001('Priority'); + fDispositionNotificationTo := Alg001('Disposition-Notification-To'); + + FCustomHeaders.Clear; + J := 0; + while j <= aRawHeaderLst.Count - 1 do + begin + Str1 := trim(aRawHeaderLst.Names[j]); + if (trim(str1) <> '') and (not (str1[1] in [' ', #9])) then + begin + Str1 := trim(Str1) + ': ' + trim(aRawHeaderLst.ValueFromIndex[j]); + Inc(j); + while True do + begin + if j >= aRawHeaderLst.Count then + break; + str2 := aRawHeaderLst[j]; + if (str2 = '') or + (not (str2[1] in [' ', #9])) then + break; //(1) an empty line or (2) a line that does not start with a space, a tab, or a field name followed by a colon + Str1 := trim(Str1 + ' ' + trim(str2)); + Inc(j); + end; + FCustomHeaders.Add(Str1); + end + else + Inc(j); + end; + + finally + aRawHeaderLst.Free; + end; +end; + + + /////////////////////////////////// + ////////// TAlSmtpClient ////////// + /////////////////////////////////// + +{*******************************} +constructor TAlSmtpClient.Create; +begin + FWSAData.wVersion := 0; + Fconnected := False; + FSocketDescriptor := INVALID_SOCKET; + FAuthTypesSupported := []; + Ftimeout := 60000; + Randomize; +end; + +{*******************************} +destructor TAlSmtpClient.Destroy; +begin + if Fconnected then + Disconnect; + inherited; +end; + +{*************************************************} +procedure TAlSmtpClient.CheckError(Error: Boolean); +var + ErrCode: Integer; + S: String; +begin + ErrCode := WSAGetLastError; + if Error and (ErrCode <> 0) then + begin + case ErrCode of + WSAEINTR: S := 'Interrupted function call'; + WSAEACCES: S := 'Permission denied'; + WSAEFAULT: S := 'Bad address'; + WSAEINVAL: S := 'Invalid argument'; + WSAEMFILE: S := 'Too many open files'; + WSAEWOULDBLOCK: S := 'Resource temporarily unavailable'; + WSAEINPROGRESS: S := 'Operation now in progress'; + WSAEALREADY: S := 'Operation already in progress'; + WSAENOTSOCK: S := 'Socket operation on nonsocket'; + WSAEDESTADDRREQ: S := 'Destination address required'; + WSAEMSGSIZE: S := 'Message too long'; + WSAEPROTOTYPE: S := 'Protocol wrong type for socket'; + WSAENOPROTOOPT: S := 'Bad protocol option'; + WSAEPROTONOSUPPORT: S := 'Protocol not supported'; + WSAESOCKTNOSUPPORT: S := 'Socket type not supported'; + WSAEOPNOTSUPP: S := 'Operation not supported'; + WSAEPFNOSUPPORT: S := 'Protocol family not supported'; + WSAEAFNOSUPPORT: S := 'Address family not supported by protocol family'; + WSAEADDRINUSE: S := 'Address already in use'; + WSAEADDRNOTAVAIL: S := 'Cannot assign requested address'; + WSAENETDOWN: S := 'Network is down'; + WSAENETUNREACH: S := 'Network is unreachable'; + WSAENETRESET: S := 'Network dropped connection on reset'; + WSAECONNABORTED: S := 'Software caused connection abort'; + WSAECONNRESET: S := 'Connection reset by peer'; + WSAENOBUFS: S := 'No buffer space available'; + WSAEISCONN: S := 'Socket is already connected'; + WSAENOTCONN: S := 'Socket is not connected'; + WSAESHUTDOWN: S := 'Cannot send after socket shutdown'; + WSAETIMEDOUT: S := 'Connection timed out'; + WSAECONNREFUSED: S := 'Connection refused'; + WSAEHOSTDOWN: S := 'Host is down'; + WSAEHOSTUNREACH: S := 'No route to host'; + WSAEPROCLIM: S := 'Too many processes'; + WSASYSNOTREADY: S := 'Network subsystem is unavailable'; + WSAVERNOTSUPPORTED: S := 'Winsock.dll version out of range'; + WSANOTINITIALISED: S := 'Successful WSAStartup not yet performed'; + WSAEDISCON: S := 'Graceful shutdown in progress'; + WSAHOST_NOT_FOUND: S := 'Host not found'; + WSATRY_AGAIN: S := 'Nonauthoritative host not found'; + WSANO_RECOVERY: S := 'This is a nonrecoverable error'; + WSANO_DATA: S := 'Valid name, no data record of requested type'; + else + begin + SetLength(S, 256); + FormatMessage( + FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_FROM_HMODULE, + Pointer(GetModuleHandle('wsock32.dll')), + ErrCode, + 0, + PChar(S), + Length(S), + nil + ); + SetLength(S, StrLen(PChar(S))); + while (Length(S) > 0) and (S[Length(S)] in [#10, #13]) do + SetLength(S, Length(S) - 1); + end; + end; + raise Exception.Create(Format('%s (Error code:%s)', [S, IntToStr(ErrCode)])); { Do not localize } + end; +end; + +{********************************************************************} +function TAlSmtpClient.Connect(aHost: String; APort: Integer): String; + + {---------------------------------------------} + procedure CallServer(Server: String; Port: Word); + var + SockAddr: Sockaddr_in; + IP: String; + begin + FSocketDescriptor := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + CheckError(FSocketDescriptor = INVALID_SOCKET); + FillChar(SockAddr, SizeOf(SockAddr), 0); + SockAddr.sin_family := AF_INET; + SockAddr.sin_port := swap(Port); + {$IFDEF DELPHI12} + SockAddr.sin_addr.S_addr := inet_addr( PAnsiChar(Server) ); + {$ELSE} + SockAddr.sin_addr.S_addr := inet_addr(PChar(Server)); + {$ENDIF} + if SockAddr.sin_addr.S_addr = INADDR_NONE then + begin + checkError(ALHostToIP(Server, IP)); + {$IFDEF DELPHI12} + SockAddr.sin_addr.S_addr := inet_addr(pAnsiChar(IP)); + {$ELSE} + SockAddr.sin_addr.S_addr := inet_addr(PChar(IP)); + {$ENDIF} + end; + CheckError(WinSock.Connect(FSocketDescriptor, SockAddr, SizeOf(SockAddr)) = SOCKET_ERROR); + end; + +begin + if FConnected then + raise Exception.Create('SMTP component already connected'); + + try + + WSAStartup(MAKEWORD(2, 2), FWSAData); + CallServer(aHost, aPort); + {$IFDEF DELPHI12} + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + {$ELSE} + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + {$ENDIF} + Result := GetResponse([220]); + FAuthTypesSupported := []; + Fconnected := True; + + except + Disconnect; + raise; + end; + +end; + +{*********************************} +procedure TAlSmtpClient.Disconnect; +begin + if Fconnected then + begin + ShutDown(FSocketDescriptor, SD_BOTH); + CloseSocket(FSocketDescriptor); + FSocketDescriptor := INVALID_SOCKET; + if FWSAData.wVersion = 2 then + WSACleanup; + FWSAData.wVersion := 0; + Fconnected := False; + if Assigned(OnStatus) then + OnStatus('Disconnect'); + end; +end; + +{********************} +{EhloResponse is like: + 250-ec-is.net Hello your_name, ravi de vous rencontrer + 250-VRFY + 250-ETRN + 250-AUTH=LOGIN + 250-AUTH LOGIN CRAM-MD5 + 250-8BITMIME + 250 SIZE 0} +function TAlSmtpClient.GetAuthTypeFromEhloResponse(EhloResponse: String): TAlSmtpClientAuthTypeSet; +var + k, J: Integer; + Str1, Str2: String; + Lst: TStringList; +begin + Result := []; + Lst := TStringList.Create; + try + Lst.Text := AlUpperCase(Trim(EhloResponse)); + for j := 0 to Lst.Count - 1 do + begin + Str1 := trim(Lst[J]); //250-AUTH=LOGIN + Delete(Str1, 1, 4); //AUTH=LOGIN + Str2 := AlCopyStr(Str1, 1, 5); //AUTH= + if (str2 = 'AUTH ') or (Str2 = 'AUTH=') then + begin + Str1 := AlCopyStr(Str1, 6, maxint); //LOGIN + Str1 := AlStringReplace(Str1, '=', ' ', [rfReplaceAll]); //LOGIN + while (str1 <> '') do + begin + K := AlCharPos(' ', Str1); + if K <= 0 then + begin + Str2 := trim(Str1); + Str1 := ''; + end + else + begin + Str2 := Trim(AlCopyStr(Str1, 1, k - 1)); + Delete(Str1, 1, k); + end; + + if Str2 = ('PLAIN') then + Result := Result + [AlsmtpClientAuthPlain] + else if Str2 = ('LOGIN') then + Result := Result + [AlsmtpClientAuthLogin] + else if Str2 = ('CRAM-MD5') then + Result := Result + [AlsmtpClientAuthCramMD5] + else if Str2 = ('CRAM-SHA1') then + Result := Result + [AlsmtpClientAuthCramSHA1]; + + end; + end; + end; + finally + Lst.Free; + end; +end; + +{****************************************************************************************} +{This command is used to identify the sender-SMTP to the receiver-SMTP. The argument field + contains the host name of the sender-SMTP. The receiver-SMTP identifies itself to the + sender-SMTP in the connection greeting reply, and in the response to this command. + This command and an OK reply to it confirm that both the sender-SMTP and the receiver-SMTP + are in the initial state, that is, there is no transaction in progress and all state tables + and buffers are cleared.} +function TAlSmtpClient.Helo: String; +begin + Result := SendCmd('HELO ' + AlGetLocalHostName, [250]); +end; + +{**********************************} +function TAlSmtpClient.Ehlo: String; +begin + Result := SendCmd('EHLO ' + AlGetLocalHostName, [250]); + FAuthTypesSupported := GetAuthTypeFromEhloResponse(Result); +end; + +{****************************************************************************} +{This command is used to initiate a mail transaction in which the mail data is + delivered to one or more mailboxes. The argument field contains a reverse-path. + The reverse-path consists of an optional list of hosts and the sender mailbox. When + the list of hosts is present, it is a "reverse" source route and indicates that the + mail was relayed through each host on the list (the first host in the list was the + most recent relay). This list is used as a source route to return non-delivery notices + to the sender. As each relay host adds itself to the beginning of the list, it must + use its name as known in the IPCE to which it is relaying the mail rather than the IPCE + from which the mail came (if they are different). In some types of error reporting + messages (for example, undeliverable mail notifications) the reverse-path may be null. + This command clears the reverse-path buffer, the forward-path buffer, and the mail data + buffer; and inserts the reverse-path information from this command into the reverse-path buffer.} +function TAlSmtpClient.MailFrom(aFromName: String): String; +begin + aFromName := trim(aFromName); + if aFromName = '' then + raise Exception.Create('From name is empty'); + + if AlPos(#13#10, aFromName) > 0 then + raise Exception.Create('From name is invalid'); + + Result := SendCmd('MAIL From:<' + aFromName + '>', [250]); +end; + +{**************************************************************************************************} +function TAlSmtpClient.Auth(AUserName, APassword: String; aAuthType: TalSmtpClientAuthType): String; + + {-----------------------------------} + function InternalDoAuthPlain: String; + var + aAuthPlain: String; + begin + if aUserName = '' then + raise Exception.Create('UserName is empty'); + + if aPassword = '' then + raise Exception.Create('Password is empty'); + + aAuthPlain := ALMimeBase64EncodeStringNoCRLF(aUserName + #0 + aUserName + #0 + aPassword); + Result := SendCmd('AUTH PLAIN ' + aAuthPlain, [235]); + end; + + {-----------------------------------} + function InternalDoAuthLogin: String; + begin + if aUserName = '' then + raise Exception.Create('UserName is empty'); + + if aPassword = '' then + raise Exception.Create('Password is empty'); + + SendCmd('AUTH LOGIN', [334]); + SendCmd(ALMimeBase64EncodeStringNoCRLF(aUsername), [334]); + Result := SendCmd(ALMimeBase64EncodeStringNoCRLF(aPassword), [235]); + end; + +var + tmpAuthType: TAlSmtpClientAuthType; +begin + + if aAuthType = AlsmtpClientAuthAutoSelect then + begin + if AlsmtpClientAuthPlain in FAuthTypesSupported then + tmpAuthType := AlsmtpClientAuthPlain + else if AlsmtpClientAuthLogin in FAuthTypesSupported then + tmpAuthType := AlsmtpClientAuthLogin + else if AlsmtpClientAuthCramMD5 in FAuthTypesSupported then + tmpAuthType := AlsmtpClientAuthCramMD5 + else if AlsmtpClientAuthCramSHA1 in FAuthTypesSupported then + tmpAuthType := AlsmtpClientAuthCramSHA1 + else + tmpAuthType := AlsmtpClientAuthNone; + end + else + tmpAuthType := aAuthType; + + if Assigned(OnStatus) then + OnStatus('Authentication'); + + case tmpAuthType of + alsmtpClientAuthPlain: Result := InternalDoAuthPlain; + alsmtpClientAuthLogin: Result := InternalDoAuthLogin; + alsmtpClientAuthCramMD5: raise Exception.Create('CRAM-MD5 Authentication is not supported yet!'); + alsmtpClientAuthCramSHA1: raise Exception.Create('CRAM-SHA1 Authentication is not supported yet!'); + else + raise Exception.Create('No Authentication scheme found'); + end; + +end; + +{*************************************************************************} +{This command is used to identify an individual recipient of the mail data; + multiple recipients are specified by multiple use of this command.} +function TAlSmtpClient.RcptTo(aRcptNameLst: TStrings): String; +var + i: Integer; + aRcptNameValue: String; +begin + Result := ''; + if aRcptNameLst.Count <= 0 then + raise Exception.Create('RcptName list is empty'); + + for i := 0 to aRcptNameLst.Count - 1 do + begin + aRcptNameValue := trim(aRcptNameLst[i]); + if (aRcptNameValue = '') or (AlPos(#13#10, aRcptNameValue) > 0) then + raise Exception.Create('Bad entry in RcptName list'); + + Result := Result + SendCmd('RCPT To:<' + aRcptNameValue + '>', [250, 251]) + #13#10; + end; + if Result <> '' then + Delete(Result, Length(Result) - 1, 2); +end; + +{********************************************************************************} +{The receiver treats the lines following the command as mail data from the sender. + This command causes the mail data from this command to be appended to the mail data buffer. + The mail data may contain any of the 128 ASCII character codes. + The mail data is terminated by a line containing only a period, that is the character sequence ".". + This is the end of mail data indication. The end of mail data indication requires that the receiver must now process + the stored mail transaction information. This processing consumes the information in the reverse-path buffer, + the forward-path buffer, and the mail data buffer, and on the completion of this command these buffers are cleared. + If the processing is successful the receiver must send an OK reply. If the processing fails completely + the receiver must send a failure reply. When the receiver-SMTP accepts a message either for relaying or for + final delivery it inserts at the beginning of the mail data a time stamp line. The time stamp line indicates the + identity of the host that sent the message, and the identity of the host that received the message (and is inserting this + time stamp), and the date and time the message was received. Relayed messages will have multiple time stamp lines. + When the receiver-SMTP makes the "final delivery" of a message it inserts at the beginning of the mail data a return path + line. The return path line preserves the information in the from the MAIL command. Here, final delivery + means the message leaves the SMTP world. Normally, this would mean it has been delivered to the destination user, but + in some cases it may be further processed and transmitted by another mail system. + It is possible for the mailbox in the return path be different from the actual sender's mailbox, for example, + if error responses are to be delivered a special error handling mailbox rather than the message senders. + The preceding two paragraphs imply that the final mail data will begin with a return path line, followed + by one or more time stamp lines. These lines will be followed by the mail data header and body [2]. + Special mention is needed of the response and further action required when the processing following the end of mail + data indication is partially successful. This could arise if after accepting several recipients and the mail data, + the receiver-SMTP finds that the mail data can be successfully delivered to some of the recipients, but it cannot + be to others (for example, due to mailbox space allocation problems). In such a situation, the response to the DATA + command must be an OK reply. But, the receiver-SMTP must compose and send an "undeliverable mail" notification + message to the originator of the message. Either a single notification which lists all of the recipients that failed + to get the message, or separate notification messages must be sent for each failed recipient. All undeliverable mail + notification messages are sent using the MAIL command (even if they result from processing a SEND, SOML, or SAML command).} +function TAlSmtpClient.Data(aMailData: String): String; +var + I: Integer; +begin + SendCmd('DATA', [354]); + + i := 2; + while i <= Length(aMailData) do + begin + if (aMailData[i] = '.') and (aMailData[i - 1] = #10) and (aMailData[i - 2] = #13) then + Insert('.', aMailData, i); + Inc(i); + end; + + Result := SendCmd(aMailData + #13#10 + '.', [250]); + +end; + +{**********************************************************} +function TAlSmtpClient.Data(aHeader, aBody: String): String; +begin + Result := Data(Trim(aHeader) + #13#10#13#10 + aBody); +end; + +{******************************************************************************} +function TAlSmtpClient.Data(aHeader: TALSMTPClientHeader; aBody: String): String; +begin + Result := Data(aHeader.GetRawHeaderText, aBody); +end; + +{**************************************************************} +{This command specifies that the receiver must send an OK reply, + and then close the transmission channel. The receiver should not + close the transmission channel until it receives and replies to + a QUIT command (even if there was an error). The sender should not + close the transmission channel until it send a QUIT command and + receives the reply (even if there was an error response to a previous + command). If the connection is closed prematurely the receiver should + act as if a RSET command had been received (canceling any pending + transaction, but not undoing any previously completed transaction), + the sender should act as if the command or transaction in progress had + received a temporary error (4xx).} +function TAlSmtpClient.Quit: String; +begin + Result := SendCmd('QUIT', [221]); + Disconnect; +end; + +{**********************************} +{This command asks the receiver to confirm that the argument identifies a user. + If it is a user name, the full name of the user (if known) and the fully + specified mailbox are returned. This command has no effect on any of the + reverse-path buffer, the forward-path buffer, or the mail data buffer.} +function TAlSmtpClient.Vrfy(aUserName: String): String; +begin + Result := SendCmd('VRFY ' + aUserName, [250]); +end; + +{*************************************************************} +{This command specifies that the current mail transaction is to + be aborted. Any stored sender, recipients, and mail data must be + discarded, and all buffers and state tables cleared. The receiver + must send an OK reply.} +function TAlSmtpClient.Rset: String; +begin + Result := SendCmd('RSET', [250]); +end; + +{*********************************************} +procedure TAlSmtpClient.SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aMailData: String); +begin + if Fconnected then + Disconnect; + + connect(aHost, APort); + try + + if aAuthType = AlsmtpClientAuthAutoSelect then + ehlo + else + Helo; + if aAuthType <> AlsmtpClientAuthNone then + Auth(AUserName, APassword, aAuthType); + mailFrom(aFromName); + RcptTo(aRcptNameLst); + Data(aMailData); + Quit; + + finally + Disconnect; + end; +end; + +{*********************************************} +procedure TAlSmtpClient.SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aHeader, aBody: String); +begin + if Fconnected then + Disconnect; + + if Assigned(OnStatus) then + OnStatus('Wait for connection'); + + connect(aHost, APort); + try + if aAuthType = AlsmtpClientAuthAutoSelect then + ehlo + else + Helo; + if aAuthType <> AlsmtpClientAuthNone then + Auth(AUserName, APassword, aAuthType); + + if Assigned(OnStatus) then + OnStatus('Send email'); + + mailFrom(aFromName); + RcptTo(aRcptNameLst); + Data(aHeader, aBody); + Quit; + finally + Disconnect; + end; +end; + +{***********************************************************} + +{*******************************************************************************} +{commands consist of a command code followed by an argument field. Command codes + are four alphabetic characters. Upper and lower case alphabetic characters are + to be treated identically. Thus, any of the following may represent the mail command: + MAIL Mail mail MaIl mAIl + This also applies to any symbols representing parameter values, such as "TO" or "to" + for the forward-path. Command codes and the argument fields are separated by one or + more spaces. However, within the reverse-path and forward-path arguments case is + important. In particular, in some hosts the user "smith" is different from the user + "Smith". The argument field consists of a variable length character string ending + with the character sequence . The receiver is to take no action until + this sequence is received. Square brackets denote an optional argument field. + If the option is not taken, the appropriate default is implied. + The following are the SMTP commands: + HELO + MAIL FROM: + RCPT TO: + DATA + RSET + SEND FROM: + SOML FROM: + SAML FROM: + VRFY + EXPN + HELP [ ] + NOOP + QUIT + TURN } +function TAlSmtpClient.SendCmd(aCmd: String; OkResponses: array of Word): String; +var + P: PChar; + L: Integer; + ByteSent: Integer; +begin + if (length(aCmd) <= 1) or + (aCmd[length(aCmd)] <> #10) or + (aCmd[length(aCmd) - 1] <> #13) then + aCmd := aCmd + #13#10; + + p := @aCmd[1]; // pchar + l := length(aCmd); + while l > 0 do + begin + ByteSent := SocketWrite(p^, l); + if ByteSent <= 0 then + raise Exception.Create('Connection close gracefully!'); + + Inc(p, ByteSent); + Dec(l, ByteSent); + end; + + Result := GetResponse(OkResponses); +end; + +{*********************************************************************} +{An SMTP reply consists of a three digit number (transmitted as three + alphanumeric characters) followed by some text. The number is intended + for use by automata to determine what state to enter next; the text is + meant for the human user. It is intended that the three digits contain + enough encoded information that the sender-SMTP need not examine the + text and may either discard it or pass it on to the user, as appropriate. + In particular, the text may be receiver-dependent and context dependent, + so there are likely to be varying texts for each reply code. Formally, + a reply is defined to be the sequence: + a three-digit code, , one line of text, and , or a multiline reply. + Only the EXPN and HELP commands are expected to result in multiline replies + in normal circumstances, however multiline replies are allowed for any + command.} +function TAlSmtpClient.GetResponse(OkResponses: array of Word): String; + + {----------------------------------------------} + function Internalstpblk(PValue: PChar): PChar; + begin + Result := PValue; + {$IFDEF DELPHI12} + while CharinSet(Result^,[' ', #9, #10, #13]) do + {$ELSE} + while Result^ in [' ', #9, #10, #13] do + {$ENDIF} + Inc(Result); + end; + + {---------------------------------------------------------------------} + function InternalGetInteger(Data: PChar; var Number: Integer): PChar; + var + bSign: Boolean; + begin + Number := 0; + Result := InternalStpBlk(Data); + if (Result = nil) then + Exit; + { Remember the sign } + {$IFDEF DELPHI12} + If CharInSet(Result^,['-', '+']) then + {$ELSE} + if Result^ in ['-', '+'] then + {$ENDIF} + begin + bSign := (Result^ = '-'); + Inc(Result); + end + else + bSign := False; + { Convert any number } + {$IFDEF DELPHI12} + while ( CharInSet(Result^,[#0]) ) and ( CharInSet(Result^,['0'..'9']) ) do + {$ELSE} + while (Result^ <> #0) and (Result^ in ['0'..'9']) do + {$ENDIF} + begin + Number := Number * 10 + Ord(Result^) - Ord('0'); + Inc(Result); + end; + { Correct for sign } + if bSign then + Number := -Number; + end; + +var + aBuffStr: String; + aBuffStrLength: Integer; + aResponse: String; + aStatusCode: Integer; + aGoodResponse: Boolean; + ALst: TStringList; + P: PChar; + i, j: Integer; +begin + Result := ''; + while True do + begin + + {Read the response from the socket - end of the response is show by } + aResponse := ''; + while True do + begin + Setlength(aBuffStr, 512); //The maximum total length of a reply line including the reply code and the is 512 characters. (http://www.freesoft.org/CIE/RFC/821/24.htm) + aBuffStrLength := SocketRead(aBuffStr[1], length(aBuffStr)); + aResponse := AResponse + AlCopyStr(aBuffStr, 1, aBuffStrLength); + if aResponse = '' then + raise Exception.Create('Connection close gracefully!'); + + if (aBuffStrLength > 1) and + (aBuffStr[aBuffStrLength] = #10) and + (aBuffStr[aBuffStrLength - 1] = #13) then + Break; + end; + Result := Result + aResponse; + + {The format for multiline replies requires that every line, except the last, + begin with the reply code, followed immediately by a hyphen, "-" (also known as minus), + followed by text. The last line will begin with the reply code, followed immediately + by , optionally some text, and .} + ALst := TStringList.Create; + try + Alst.Text := aResponse; + if Alst.Count = 0 then + raise Exception.Create('Emtpy response'); + + for j := 0 to Alst.Count - 1 do + begin + aResponse := Alst[j]; + p := InternalGetInteger(@aResponse[1], aStatusCode); + aGoodResponse := False; + for I := 0 to High(OkResponses) do + if OkResponses[I] = aStatusCode then + begin + aGoodResponse := True; + Break; + end; + + if not aGoodResponse then + raise Exception.Create(aResponse); + + if p^ <> '-' then + begin + if J <> Alst.Count - 1 then + raise Exception.Create(aResponse); + Exit; + end; + end; + finally + ALst.Free; + end; + + end; +end; + +{**********************************************************************} +function TAlSmtpClient.SocketWrite(var Buffer; Count: longint): longint; +begin + Result := Send(FSocketDescriptor, Buffer, Count, 0); + CheckError(Result = SOCKET_ERROR); +end; + +{*********************************************************************} +function TAlSmtpClient.SocketRead(var Buffer; Count: longint): longint; +begin + Result := Recv(FSocketDescriptor, Buffer, Count, 0); + CheckError(Result = SOCKET_ERROR); +end; + +{*******************************************************} +procedure TAlSmtpClient.Settimeout(const Value: Integer); +begin + if Value <> Ftimeout then + begin + {$IFDEF DELPHI12} + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + {$ELSE} + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR); + {$ENDIF} + Ftimeout := Value; + end; +end; + +initialization + for Ch := #0 to #255 do + VALMove_AnsiUpcase[Ch] := Ch; + CharUpperBuff(@VALMove_AnsiUpcase, 256); + ALInitFastMovProc; + ALInitFastPosFunct; +end. diff --git a/internal/2.31RC1/1/Source/UCAbout.dfm b/internal/2.31RC1/1/Source/UCAbout.dfm new file mode 100644 index 0000000..5cccd28 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCAbout.dfm @@ -0,0 +1,835 @@ +object AboutForm: TAboutForm + Left = 296 + Top = 71 + BorderStyle = bsNone + Caption = 'About User Control' + ClientHeight = 520 + ClientWidth = 506 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + OnClose = FormClose + OnCreate = FormCreate + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object pnlFundo: TPanel + Left = 0 + Top = 0 + Width = 506 + Height = 520 + Align = alClient + Caption = 'pnlFundo' + Color = 6435072 + TabOrder = 0 + object Image4: TImage + Left = 1 + Top = 1 + Width = 28 + Height = 518 + Align = alLeft + Center = True + Picture.Data = { + 0A544A504547496D6167653C0D0000FFD8FFE000104A46494600010200006400 + 640000FFEC00114475636B79000100040000003C0000FFEE000E41646F626500 + 64C000000001FFDB0084000604040405040605050609060506090B080606080B + 0C0A0A0B0A0A0C100C0C0C0C0C0C100C0E0F100F0E0C1313141413131C1B1B1B + 1C1F1F1F1F1F1F1F1F1F1F010707070D0C0D181010181A1511151A1F1F1F1F1F + 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F + 1F1F1F1F1F1F1F1F1F1F1F1FFFC00011080206001903011100021101031101FF + C4008C0001000203010100000000000000000000000608030507020401010101 + 0101010100000000000000000000050304020106100001040103030303020505 + 010000000002000103040511120621130731412251321461718123331508A142 + 53D3941611000202020200050303050000000000000001110212032131416122 + 320451711381D162F091B1C152FFDA000C03010002110311003F00E14BF4A7E7 + 8200802008020080200802008020080200802008020080200802008020080200 + 8020080200802008020080200802008020080200802008020080200802008020 + 0802008020080200802008020080200802008020080200802008020080200802 + 0080200802008020080D8C5C6F914D40723162EDC98F32D83702094A172EBD1A + 461DBAFC5FDD79CEB313C9EB071306B97A3C8407BAEF0B4F1BCCCE50B10F705B + D5C75EADEDEC8CFA8BAB34395CD556CB60B3D8C1E2F05AC65CC29308B4756A56 + 8DC6E01B3069B8B5F8B1136DF4F8BB2869AAF0D3CB99FF00458E5F29AC7882A7 + F942F616FF009073D7309B1F1935B32AE51F402F4DE63A69F133DC4DFBAAFA13 + 5449F64BDCD3BB8E88BAD4C8CD4BA5C83A8B7F303A9FDBF737DDFA23E8FA8B87 + 94CB66A9F912971DAFE3F86EE0657802C67E3ACCD1334A22F24AC4C05180C6EE + FA8916AFA28B5AA74CB2E7E856766AF18F1F539BF9E70D8F9F85499C9B114B19 + 93A3C826C555B7480631B950024D4C845FEE69237176277DAE25A7AAEAF8B679 + 44B6B19FB1CFF26AB198873057E540E0325785E7B1142CFA3CA620CEFEDB9F44 + 6CFA8B891C984E378C3E3D6796E74E3C558A589BD20F61CA396E44270BB49D82 + 9C22262666713F8FA28BCD9E58D799656E2AA25F1C15B3CAF6F235B95E438D3C + F6870D85B53478EA1665EE76D8C9E4291F422622948DCDCDDF73EBD554F8E93A + AB78B276F6F275F044296C6264ADB3F262EE1BC71EF1DE63D1C5B5EAEDFB233E + A2D750A3E4FC772DB3C8AC720C44FC325A15E27E437F6BC735688CE5AF23C511 + C4CF623794BE5B840B5D7D7A3486F5BAE30F29E8A895D5A65631D95C3C8D91A5 + 92E739ABF4AE9646AD9B4724574DB6BCACFA7CB6ED0D1B5FB5B4F454F4A6A893 + E09DB5A766D11C5A1992FF001D734C4F19B371F21C6297267BAD184115E103ED + 10B96AF1EF8E5EA7B9B5D3E8B1DDA9DBA6EA6DAB62AF6A4B10FCB1AA720C5F8D + B23C5B8ED1872959EDCB8F79A32A90CE4E651C1243D910294CC01FA0FF00BB56 + DDA759BF8E6AEEAD6E0EFCE1AA355E4AD5E43866839BE6A19B1B062258AD1816 + 36AE9D88B6F4D22DA20DB1FD5BE2DEAAA697E85CC93B6FB9F1047568667A8A53 + 8A50941F438C9885FF00567D590FA5BB8F8AE3F915EA1CEB31E3EC90F2A1182C + 1C51DAA610CB3C203DA22096DC6ECC3B47A1833F4F933FBC7FC8EA9D15963FAF + EC55C159E4EAF2FEBCCAD7E52B399B3E41CECF9A802B648ED13CF5A3369063D1 + 99823636E85B4346D7DD53D092A28E89DB9B7773D9165A991F760E8E4EEE56B4 + 18CA735FB9BD8E3A95C0A490F63EE7D04189FD1BE8BE59A4B9E0F554DBE0B379 + 5F21F1D9395E4A96733797E31159FEDD98A1F990CF5A4AF3D6DD158A8D1EDEB1 + CB180BF4D409DC9F577F5955D36C53495BB452B6D5934DB5D32BBF90F2F8ACCF + 39CE657122ED8EB972596B39338B90917DFB5D99DB7BFCB47F4D552D3575A24F + B27EDB2766D11E5A199DB3FC6CAF95FC7E6B7305004DC8E0C68478873D9D2595 + E47666791C43A900FDCFA74EAB87E6B5E94FDB3C9DBF113F535DC12BF23F8FBC + B1CCFC79C60723891B5CC284F647245DEA719764C9FB65B86408BE4221AB0BFA + B6AB2D3BB5D2EE1FA7F535DBAB65E8A57A8AEB9BC2E4F0995B389CA43F8F90A6 + 7DBB30EE03DA4CDAE9B81C85FD7D9D52AD9594AE89F6ABAB867C4BE9E495703A + 1E49B72DC6E10591194043F3BFB6CD240FB5DCBB7DCD841AF5DDA2CB6BA2F7C7 + EA6BA95DFB6497FF00F3FF00E4DFFCBC93FF00758FFB5639E8FE3FD8DB1DDFC8 + E6DC861CEC39BB9167DE77CC048ED75ED1BC937734EBBC89C9DDFF008AE9A351 + C74735E679ECD7AF479371C6F92F27C2D920C0E4EC6365B8E11CA55E428B7E8F + F1DCE3F4725E2F4ADBB527BA5ECBA7059CB5CA38871EE454BC7D98CC723BFC92 + CF62BCB9A8EDD8001B16B6B46EC2D308336A7AFF0048B4F7D7AA96B5DAD5774A + B8FD0A4EF5ABC1BB495BFC938AC86279DE6B1D90BA792B75EC909DE95F7492B3 + B33819BEAFF27076DCDECEA9E9B2744D2827EEAB5669F246D68647B86369268E + 37776632617766727EAFA7416F5FD919F4B65CB737E42E3F93823A1C28796D9A + D5C1B19CAA6AECF6BA8B7F58631736317FBBAC7AFD1948D75A59736C7C8A97B5 + EAF8AE5E655DE4F26765E43919B3E12479A967392F84A3DB3694DF716A1A36DF + 5F4556918A8E89B79973D9AC5E8F049FC778EE2190E4215F946525C454D37C17 + 220DE3DD1267603666776626D7426F7596EB5957D2A4D752AB7EA70596CFE678 + CD5E55213791F214EAC12425261E0196D40C2C00441F90C3293F73D5FE7AB6BA + 74D14CA56CEBEC5F728DAD556F732B4F93F298ECAF9033990C69C9251B1688A0 + 925636321D19B73B49A1B6BA6ADBBAE8A9E8AB544993B7593BB688C2D4C8CB50 + 58ED422E1DC629059E3D74DDABB7C75FD51F47D45C1E645E7DAF9B28785D1C70 + 71C08616A509F64648F48D98C2463366DC27AB36CF8EDD3F551B5FE16BD4DE45 + 6D9F967D310559E7E5C84B99658B91880671E77FCF18B6EC69346D76ED771F4F + A2ABAB1C563D1336CE4E7B23EB4333DD70739E306368DC885B7BF461D5F4D7F8 + 233EA2D1DECB78FF008C72DC7F8CECE172193B56FF001E09F347626EF1496599 + 9A407DDBF4F96A5B09987AE8DD14A55BDAAF64A5E45276A56CA90DF995F3C8F8 + 40C1F3ACD6242C9DC8E9DA300B1296F9087A38B197B90B3ED7FD551D36CA899C + 1B6B8D9A238B433265E30F1B5BE7396B307E6478DC5E3A17B393C94ADA8C5175 + D3A3B8B6AFA3FA9333333BFB2C77EE5AD7D5B36D3A737F4475FF0014F94B9C72 + 0BB73889663111DFA15E4870D9AB913CD3D8900D8044749A31937036EDCC2EFD + 357625C5BF452AB287E68EBD3BAD678CAFB9C0F95D3CDD3E4D94AB9D32933115 + 9946FCA64E4E736E7DC7B9FEE627EACFF45475B4EAA3A386E9AB39ECD52F4783 + A7784798719C4CB9FE3BC9E52AB85E514DAA4D7475FE5482C620E5B59DD85DA6 + 2EBECFA6BD3576E5F95AECE2D5EEA74FC7D9552ADD589771BF18F8C7886729F2 + AC9790F1F90A18C95ADD6AB57B7DE98E17DC1A34534A6FB4D9B51117D7D3A2C6 + FBF65D62A8D49B534D28F2765C1C8B9F7261E51CCB2F9E08DE28AFD829218CB4 + DC31333046C5A74DDB05B5FD5766AA61548E4DB7CACD9A05A19992BC6D2D88A3 + 7D7433117DADABF57D3A3233EA3AEF3DFF001D396D1E4071F11C5DAC8E08E309 + 2BD89A581A56221D4C0C5DE126DAFD3A8AE3D5F32AEBEA70CEADBF12C9FA5707 + 29CBE232387C9D8C664A07AD7EA1F6EC404ECEE24DD74D45DDBFD575D6CACA51 + CD6AB4E19F22FA7932550924B30C7196C90CC440F576D09DF467D5919F516DF2 + 54AA6287FB235EE5172DE3AFE32A64725FDC6F3CB69AF813EE80467606117D37 + 682DA68EDD74EB1EAE798AF29F82F02AB51C7ABB5E2CAD7E4FC44B87E7F9CC6C + B7A6C91D7B2EDF9B64DE59A4126621EE9BFDC6C2ECC4FF00554F45B2A27104ED + D58BB5D9185A991EA188E698220FBE42611D7EA4FA3233E971B016F96E1EA653 + 1D9DE6111E3F071D3A07960A6C738DFB622C31B916F1268FBB0FDC04E5BBE4E3 + D545BAAD9A6ABCBF0F22B55D94A76EBFC9563C8787C9E1B9BE6B1B93B657EF41 + 68FBD78D9D8A673F9B4A4CEEFA398933BB6BD156D3656A26899B6AD59A647968 + 664C3C75E3EB7CC2CDB6AD97A3893C7B47231DE91E3637372D3668C5AB8ECEAB + 1DDBB0F06E4DB56ACFC60B236A9790F2E54062B5C52FC952C0E46FD2AD24A2F7 + ECC31EC88E4F848C3B7683B74F501F933374989D14FBBF6283577FF3FB95679B + DCCFDCE5D97B3C822ECE6A4B527E742CDA3048CFA380B6A5F11D341EAFD3DD56 + D492AAC7A26EC6DD9CF66917B33265E37F1FE3F984F7E3BBC86A601A98C64077 + 36E92F71C99D8774917DBB7AFEEB1DDB9D22149B6AD4AFDB83A6F17F0DF0FE33 + C8B1BC82EF9171675F15623B671C471019F6498D818BBE5F73B68FA33BBB745C + B7F936B55D551F274D3E3D6AD3765C1C9FC9BC8A8F23E7B9BCD50676A572C3BD + 7771DAE4002C026E3EDB98772EBD1475A24CE5DD756B3688C2D4C82008020080 + 2008020080200802008020080200802008020080200802008020080200802008 + 0200802008020080200802008020080200802008020080200802008020080200 + 8020080200802008020080200802008020080200802008020080200802008020 + 080200802008020080FFD9} + end + object pnlComponentes: TPanel + Left = 29 + Top = 1 + Width = 476 + Height = 518 + Align = alClient + AutoSize = True + BevelOuter = bvNone + Color = 6435072 + TabOrder = 0 + object Panel1: TPanel + Left = 0 + Top = 2 + Width = 474 + Height = 104 + BevelOuter = bvNone + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + TabOrder = 0 + DesignSize = ( + 474 + 104) + object Image1: TImage + Left = 111 + Top = 1 + Width = 374 + Height = 80 + AutoSize = True + Picture.Data = { + 0A544A504547496D616765FE200000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC00011080050017603012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD52 + DA2968A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2 + 800A28A280129314EA2801980690A8A7919A6918A0040A29703DE8A5C52B00A3 + 18A5A414B4C0422A3755352D3185260549A38D8739ACBBB82D70776EAD891335 + 977908C1AC66B4378339CBE834C19DFE67E15CF5F43A1027779D5D06A76FC371 + 5C86A96F8278AF36ABB743D3A4AFD4A772BE1B04EE37159D31F0B8CE5AE47E35 + 46FE2C678AE7EF58464F19AF32752DD11EA429DFED33A573E14EED723F1A88BF + 84FF00BD75F9D7097BAC476F9DD139C7A62B3EF3C516569A72DE3966466D8100 + F9B77A1F4AE7757FBA8E85497F333D2B7F84FF00BD75F9D1BFC27FDEBAFCEBC8 + 1BE22582FF00CBB5D9FA22FF00F1552699E3FD3753BF8ACD56686690E17CD500 + 13E9C1A9F6DFDD43F64BF999EB7BFC27FDEBAFCE8DFE13FEF5D7E75E47A87C43 + D1F4FBD92D5A5925963387F2937007D2A23F12F460325A751D7988D1EDBFBA83 + D92FE667B0EFF09FF7AEBF3A37F84FFBD75F9D7954FE39D1EDB4A8B507B922DE + 5E170A771F5E2AAC7F137C3EE3FE3EE45FADBC9FE147B6FEEA0F64BF999EBFBF + C27FDEBAFCE8DFE13FEF5D7E75E5FA678CB47D61E45B5BD5768D4BB0652B803A + 9E40A84F8FFC3C1CAFF6ADBE41C7DEA3DB7F7507B15FCCFEF3D5B7F84FFBD75F + 9D1BFC27FDEBAFCEBCD2CFC57A3DFCAB1C1A9DAC9231C2A0946E27D00A9E7D77 + 4DB598C336A16D14A3AA3CCA187E19A3DB7F7507B15FCCFEF3D1E27F0A6E386B + AE9EB4579D5BF88F4A0E4FF695A631FF003D97FC68AB557FBA84E8FF00799F6F + D14515F667C48578AFED47FB58F843F64AF0BE8FAEF8BEC757D42DB54BC36504 + 3A34514B287085CB1124B18DB85C6413C91C57B557E667FC16CF5069BC35F08B + 41882B5C5FEA779346A7824A2429D4F006661D7DBDE803F49347D622D6742B2D + 5638E5B782EAD92E563B850AE8ACA18061938201E79AF1CFD96BF6BDF08FED71 + A46BFA978434AD774DB5D1AE23B69DB5B82188C8EEA5BE4F2E59338039CE3A8E + B5DFFC43BB83C1DF077C4B72A425B697A15CC80C996C2476EC79EE785AFCB9FD + 85F46F88FF00F0EF5F8D3A97C286963F1B5C6BE21B56B363F6A31C515B3CC21F + 493CB91F6E3924903E6DB401FAF1457E7A7FC13CEC3C3BE25D3EC7C6F17C70F8 + 87ACF8CB44B694F8C3C19E24D51A4B7498C6EAE4DB3297DAAE772C9B9892B83B + 492A3C93E14FC51D5FF6CAD5BC69E37F1EF8B3E31693A1C7A8BD8E83A1FC32D3 + 2FDED2C91515834B25BC32234A1644E1BE6E493F2B28A00FD67A2BF29A4F8C1F + 1E3C3DFB0B7C7AB3F185CF8E344D47C2F7FA58F0D78BF58B6BBD2F52BCB59B50 + 4460257092310A9F31C96027DAC71815EFFF00B047C1DF889ACF87BC13F193C7 + FF00167C41E26BBD4745096DE1E9EE5E4B38ED9D0089E42CC77CC400ECE46496 + 20938CD007D91E24F12E95E0ED06FB5BD7350B6D2B48B189A7BABDBB90471428 + 064B331E00AF8E6EBFE0AADF0FF56D5EEED3C0FE03F1F7C42B5B46227D4743D1 + F740076203307C1E7EF2AF6FC392FF0082CF78BF57D13F67EF0BE8963349069B + AD6BAA97EC9902448E26748D8FA17C363D631E86BECDF82BF0DFC35F0A3E1778 + 73C33E13B6B78744B2B2896192DD028B825413331FE2673F31249249EB4009F0 + 57E2F693F1D3E1D69BE31D1AC752D2ECEF5E68CD8EB10082EEDDE295A3749630 + CC15B284E327820F7AEE335F17FF00C144BF683F1B7C3DBCF865F0C3E1BEA3FD + 85E2CF885AA8B01AC0452D6B1192288042DC2B33CCBF375011B182411E47FB4F + 7C16F887FB117C2FB5F8B3E09F8E5E3AF10EADA75EDB26B361E28D40DE595F89 + 1F696111E9F391C3163866C303C900FD2DA4AFCCBFDB1BE36FC4AF1F7C4AFD95 + D3E17F89F56F085FF8DAC2DB54FB35B5ECB1DA319DADDD3ED31290264405B72B + 020AEE183922B8BFDB17E1FF00C62FD892F3C13F12346F8EFE2DF19EA1A96A62 + CEEECF549A4F265976F981443E632344C10AF9647181827B007E9BFC48F8C1E0 + EF84506972F8BF5EB7D15755BB5B1B1598333DCCEC40088AA092791D05762391 + 5F969FF0534F86773AEFED57F01ED23F1BF88ADCF8C75986D16CD6EDBECFA291 + 35A42B7166BD23918BB3B11CEE45356FF6EDB7F897FB3AFF00C339F81FC0DF16 + 3C657DAB6A5AAEA513EABABEB33196FA469ECBC95BA2A40963432950AC080A48 + C726803F5069335F9BDFB456ADF12BF61BF83DA7787343F893ACF8E3E23FC4BD + 6E3B74D775C3BFEC0422897ECE1CB040CD246173C28662390083F685FD9BBE24 + 7ECABF042EFE2D785FE3F78F759F19E83E45CEAD0EB5A89B8D3EFD5A54470903 + 676805C1C397C80470482003EBFF00DA37F6A3F0BFECC96BE179BC4BA66B5AA7 + FC245A80D32CE3D1608A57129008DC1E44E39ED93ED5EC40EE00FAD7E5D7ED95 + F14A4F8E3E0FFD8D3C4374134F9FC4FAD4379736711E165DF6A92140792AACED + 827B30CF5AFD451C28FA5007C6BE23FF0082A37C3BD03E2078ABC1F0780FE226 + BDAA786B51B8D32F9F46D22DEE2212452B44CCA45C03B4B2360B0048EC3A57AC + 7ECC7FB63FC3DFDABACF566F07C9A8596A5A5328BCD27598161BA895890AF856 + 752A4823218E08E71919F80BF65EF8A7E36F02FED0DFB53788FC01F0EA6F88FA + A5DF8A5D1F468AF85AC90C4F777CDE76E28DB82B0452A00CEFCE462BDC7F634F + D9DBC69F0C75BF8C5F1BFE30DCE9FF000DF57F1847707ECF1DC4489A5C72C865 + 92777DC5130DB3682C4FCA77726803EFEC8CE296BF217F68DF8A3F0E349F873A + EDFF00C26F8C7F19BC75E3ED29A37FF84861D5EF64B0B502450E6E242B1C4232 + ACC079631B99474241EE3E287ED25F17BE21F81FF664F857E1EF14CFE1CF177C + 45D2ADEF75AF135B7EEEE7C973B15D597054ED59246D855890002B93900FD41C + F04D78EFECF9FB517863F692BAF1941E1AD3359B0FF845B51FECCBC93568228D + 25972C0F945247C81B3BED3F30E39AE6BE05FEC872FC09F13C5ADDBFC5AF883E + 2B46B5782EF4AF12EAA2EACA66603122C7B46C652383927048CF35F99BF077F6 + 88F137C38F83DE38F0A783E5934CF1DFC4EF1FCFA45B7882590DB5B69EB88449 + 209BA47266E0004728096E0AAE403F6D5D720D52B88F703C57CFDAAF8234AF81 + 3FB2F47E1FF881F1B3C43A34AE623A978E6F35A73A8CB3EE5774B692732140C1 + 0A2A2293B37705896AFCF4F8FDF1D74CF056A3E0DF107ECF7F10FE2B6B178DAA + ADADE6B5E23BFBC9748BF623E58D85C01E63B1524AEDC60138CE312D5CA4EC7E + B6EA30641E335C9EAD66E413B49AF953E367C4AF885FB467ED8D3FECFF00E02F + 175E7C3FF0DF8774F1A9788F5CD24EDBE986D898AC520C1400CF120008F9998B + 6E002D79978CFE19EB3FB3EFEDA1F03BC1BE1AF8AFE3ED6348F105D25CEA969A + FEBCF32CCB14A494288114C6EAAC36B03DF9AE49D1E6D2E75C2B72EB63EC8D42 + D5D890149FA5731AADAC9129DC8471DEBE5FF881F14F52F8E3FB58F8DBC0B7BA + EF8EF41F875E0D4F25ECFE1DE9D753DEDF5D0655633BDBC6EC91EEDE0646308B + 8192586A7ECFD71F107C3DF1C7C55E10B88FE206BBF0926D3FED3A46B7E3AD2E + EE1B8B49D550F95E74D1AE464C8BB78076A900739F3AA60DA8B95CF4A963173A + 8DB4D8F55D6530589FA570177765361203C6AECE14F4278AF40D7ADCBB380E40 + 071D6B86D6745DD1A8128048DC0AB7415E1BDCF711CD6A17AD711A284085776E + 61DF3D3F2ACCFB535A5CDA4A8C77ACE9839E4722AD5E6892C793F6E7EBCE0D63 + B69ACB9B87BB6985BCE8BB59F1927E607F4350C64F1EADE5CD70CD1ABC924E58 + B9EA0066CE3EA71F954324E6595DB2CB131385CF41DA9B2F872EA646BC8A6115 + BC929032C383DFF0EB43F873528ECBED4D707C8CECDF818CF5C50324D52F19B4 + 9B488A868E3B99064807AAA9C7EA6A2BBD596E632208DA06F309C87E36E381D3 + B63AD2CFA705F0FB34B3B3CA6E7098C7DEDA327F2C7D6A80D12F0410CEB3AEC9 + 7215830EB9C629202DDADE4B0A4C530ED246C8FB8F6EA7F90FCAAB69D7F6B15A + 8596373212C77AB7418C0E3A7506A44D2AE6D512E259C3444942A1C020E3BFF9 + E6B3EE74B9AD4C5FBC0AB28CA96C607247269812C37522CA926F3BD1832F3DFA + 8A20BCB792FEE1EEFCDD8DF364364E4E3D7E8696E743BFB7754255B70CA32302 + AC0F420FF9EB556F6C26B3BC68DDB6C8A76B0E281D84D4DD3CD7113EE8836109 + E0E314555786691701867D4D154897B9FB25451457DD9F0615F317EDD9FB175B + FED87E09D16D6DB595D07C4BA04D2CDA6DDCD11920612851245201C80DE5C677 + 0CE0AF435F4ED1401F9EBE29F811FB6E7C4CF8793FC37F11F8EBC056BE1FBAB6 + FB05FEB56E66379796F80ACACDE4F3BD7838542C0904F273EC3E05FD98FC7BFB + 2FFECD5A47827E08EB9A15E78BADB52FED1D46F7C556EE969A8EF5612AED8B73 + 47D220B839C4782DC935F54D1401F10FECFF00FB22FC545FDA9F56F8E5F162FB + C27A6EA177A7BD89D0BC211CBE45CEE411969BCC1D3033C972C7192028159BF0 + E7F655F8F7FB21F8A7C516DF04F56F077897E1D6B77CD7D1685E2B7B8867B291 + 8019568860E15550B6EF9828F941E47DE145007C9BF1BBE04FC6DFDA23F647F1 + 2F813C59AAF836D3C7BACEA104CBFD96D7316970DAC734522C459A3794B7EEC9 + 2769E4819C0AF79F817E04BBF85FF05BC09E0FD40DABEA1A168765A6DD3D9126 + 179A28112474255490CCA4E4804E7919AEE68A00F2BFDA5FF677F0E7ED3FF0A6 + FF00C11E23696DA19644B9B4BFB700CB677299D92A83C1E199483D55D8646723 + E5BF03FC14FDB53E07787ED7C19E14F1D780BC59E19B2416FA75EEBF1CEB736B + 08E1548099C28E80B49800007000AFBE28A00F8FBE3AFEC6DE38FDA0BE0FFC3F + 9FC41E34B0B4F8E1E0EBA7D46D3C49676FB6C8CCD207F2B68452117643B5F612 + 0C5920EE6CF0DF107F65BFDA63F6AD8744F09FC67F15782BC3FE01D3AEE3B9BD + 4F08473B5DEA6C80804F98368C827BAA82C1B6315007DF545007C99F127F643F + 10F89BF6B3F833E3DD12E747B2F87FE01D2D6C8E9B35CCC2EF728982F95188CA + 1500C2325C13B4E470337BF6E6FD967C51FB4FC7F0DED7C3F79A3DA59F87F5B1 + A96A3FDA9712C4D245F28DB17971BE588DDD4AF6E79E3EA5A2803E36FDB7FF00 + 651F88FF0018BE25FC2DF88BF0CB55D1A0D7FC1571E72D8EB8EE90BB09525460 + 555B23298653B72318354BE337ECA5F17BE3D78E3F677F17789753F080D43C0F + A9FF0069F88ACA092E12DE4DD7704CD1DAA989F70114213F78C3240C9E49AFB5 + A8A00F9FBF6CEFD94ADFF6ADF86F65A4DBEAC7C3DE26D1AEC6A3A36ADB4B2C33 + 01828E01076B71C8E54AA919C60F827C41FD9B3F6AEFDA4FC2B65F0EBE2878C7 + C0BA2F81E39E27D4F52F0EC33BDF6A8B1B065DC8EA13EF2AB607963201C1C62B + EFCA2803E3BF8F7FB13EB1E39F1BFECD83C1B2E8963E0AF8557B0BDCDA6A934A + 2E27B7496D09540B132BB14B539DC572CDC9E491F6191C114B45007C7FFB177E + C89E36FD9E7E2FFC5FF1778AB52D0AF6D3C6579F6AB38B489E6778BF7F348448 + 248900E255E85BA1FC7D4BF6C9F801A87ED33F0075EF02695AC268BA8DDC90DC + 5BCF3EEF21DE29038497682761C7500E08070718AF6EA2803E0ED7FF00661F8E + FE3FFD8FF50F8217DA5FC38F0CC70DA69F656979A6DE5CAA5CF913C723CB2010 + 1D8CDE502700966624EDEFB1F1C7F60FF1378BFC13F05754F01F896C3C35F143 + E18E996561697571BDECAE4411C63696DA5800E848250EE0CC1979E3ED9A2803 + C1BE04C7FB464F79A8CBF175FC07159476061B0B5F0C8B9F366B9CAFEF676932 + 02E01184EEC78E057CE5F0C3FE09A3AB59FEC65E32F845E38D4342B8F135EEBD + 36BFA26ABA6492CB0D9CFF006682388B33C48C3262757014FC8FC64F4FD06A28 + 03F3DFE2E7EC47F1C7E32FC12F85FA6F8ABC45E13D5FC75F0FAF9DE159EEAE67 + D3F5BB5222DBF6ADD0AB79A3C90872A430662581635D67C6DFD9A3E32FED1BA6 + FC243E20B5F03785FF00E114F118D4AF74ED36FAE5A33669E408D623E472E42C + FF002FCAA0797C9C9DBF6D9E9514BF769303E1AF8CDFB2D7C48F0EFED5B77F1A + 3E077893C370789753B14835AF0EF8919C45345B563DDFBB058A3F90848CA9DD + 19218E481E05FD9DE339BFE0A9FF000B2D7C63E26D3FC4FE2B834B7B8D461D1A + 268AC34B3F67BC7FB3401C96D823D8FB9FE66694FA8AFB9FE3CFEC8FF0FF00E3 + D789AC3C49E211AC69FE22B0B4FB0DBEABA26A525A4EB0EE66D9C641019D8F23 + F88D731F06BF643F861FB386B97FAFF85B4EBEBDF135EC4F0CBAD6B578D75721 + 18E5829202A93C6485C90304F5CE529A8ABB368C1C9D91E47E36FD9C7E22780B + F685F107C59F82FAFF0087E1B9F114623D6FC37E2712A5B5C1F972F1BC609C96 + 50FC952096E483B6BB7F07FF00C2D478B56B9F89771E11B64758D74ED3FC2AF7 + 1214396F31E7798724FC9B42718273CD7A9EAEE497393CD71BABBB156E49AF12 + BD76E3CAD1EE50C3A52E64CE1356CF98C73EB5C76B9108A4DAA79C648C743FFE + AAEBF5C0E992B9CF3DABCF35ABABB47202E49E9953CD78EF73D8455D5EC05B5B + C6FE62E48E54BF24FB0F4FA135C4DE122F2E0E401F684079C7F09ABBA86A57A5 + C8FBB838E10D6588A67B69A4663E679AAFEE7823A566CA35E5898E9913FDA588 + DC40889E14FA819FE9DFE99D58F4991FC30938BA2A4B31F21BEE151CE47E22B8 + B13DE200426476CA77A57BEBBCED2BB4F4236907E94EC05DD409FB2F04802688 + F5F50C3FA5422DDA4D29A6FB50C472045B6CF232324E3F21F89A8E232DD59DD8 + 98FCC4C65401D704E40FFBEAA9949F3900B0ED94CD219B1656F14BA44EED2482 + 58183E09FDDE0F18FA9FE40D65EA058980EEC0194C7EBFFB3547299E2E1F838E + 8463FCFF00F5E9E13CFB52F23E595C6D53D48C75FE5400B730CCBA7DADC79EF2 + 2312A149202107A0E7F954FABD835B7932995A7124633213BB6B775CFB7071D7 + 9ACE5858703201F6C7144B1B4726D7C061C1C60E3FFD540CA52B10872790DDA8 + A9EFAD96354084485802483800E3A73455AD897B9FB1F451457DD1F061505EDE + DBE9D6B2DD5DCF1DB5B44A5E49A670888A3A924F0054F5F3CFED75309DBE1DE9 + 3A94EF6DE13D475E8A3D5E40FB10A0236ABB7653973CF1F2E7B567527C91722A + 2B99D8F4DD1FE3978035FD5E3D2F4FF17693757F236C8E14B95CC8D9C00A4F0C + 4F60339AD2F157C4EF09F81EF21B5D7FC43A7E9173347E6C715DCEA8CCB92320 + 1ED906BCCFF69CF0C78374EF80FADB4FA769D66B6D6E3FB35A18923649F23CB1 + 1631D4F503A8CF6AF318E7F10EAFF17BE1C4573A559EB3E251E038A792DF5872 + 91CB2B3B06F30ED62AC0027A1E78E3AD73CAACE0F95EFA1A2826AE7D253FC5EF + 055B6836FADC9E29D297499E5304579F6A431348064A6ECFDE039C75A5F0F7C5 + BF0678B2F64B4D1BC4DA6EA7751C4D33456D70AEC11719620761915F20FC5FF8 + 4BA9FC2FF04682B7EFA75C6B9AEF8CC6A274FB2056CA12CADB6240403B464027 + 1C020638C9FA374EB6F10E97E14F15DEF893C33E1DD0441A64CD04DA1C86491B + F76C5C3651703818C511AD37269AB581C2295D1E8BE17F19E85E36B192F740D5 + AD357B48E4313CD67289155C004A923A1C107F1AB1A078934BF15581BDD22FE0 + D46D048D119ADDC3AEE5386191DC1AF8EFE10492FECEBA6782FC5D24931F05F8 + BEC92DF5757FBB6979F318A6F6565E3E9B89ED5ED1FB1B44E3F67FD0EE2460CF + 753DDCC5BB93F6891493EFF2D3A559CDA8B5ADBFCBFCC528249B477B75F187C1 + 365E275F0ECDE27D363D6DA5100B3338DE2427010F60D9E3079C9157BC5DF11B + C31E028E27F10EBB63A479BFEAD2E660AEFEEABD48F702BC06DEC3FE19ABE234 + B1EAB616BADF81BC61AC0787546895AEAC2EE424AA3E7974E3208E98247390D7 + FE09E9FA778A3E3C7C57BFF12C50DE7892C75116B6305E00E60B205846D1AB67 + 01805C91EA3A6EE45564DF2F5BFDDFE63E45BF43DC7C37F10BC35E30D2EE352D + 175CB1D4ECAD8133CB6D32B08B8CFCE3AAF009E7156B45F1768DE22D0CEB3A66 + A76D7DA500E7ED90481A3C2E777CC3D3073F4AF997E274567E1CFDA32E3FE111 + 8A18257F0A6A12EBF6F66A044408643099157A3171175E71B7D79DAFD9F751B5 + D1FF00633B8BD17118686C753925F318611C3CD853E991B4E3AF3EF446B37271 + 7D2FF8581C15AE7B45CFC5FF000559E8569AD4FE27D322D26EE468A0BC6B8511 + 4AEBF7955BB918ABBE15F887E18F1C19D7C3FAF69FAC3C1CCA96770B2320EC48 + 07207BD7C6DE15B655F85DFB3C59FD923964BCD7EEE631DC83E5B9170C006183 + C1057B7415D1E836FA86B7A7FC54F899A7C36DE1BF14E9BA65CE88DE1FD2A3D8 + F66C982F2BB0C6E7C2E548007CBDCAD66B11276D3FAB5C6E9A3E8FD77E38F807 + C33AA49A76A5E2DD2AD6FA36DB2406E0168DBD1B19DA7D8E2A5D6BE33F817C39 + A949A7EA9E2BD2AC2FA20ACF6F3DCAABA8650CA48F75607E84571DFB35F83BC2 + 2BF05BC3971A7D8D8DEBDFD9A4D7F71246B23CB70C3F7A1D8E492AFB9707A018 + AF2436BAD5D7ED7BF118786F43D135D923B0B557875890A431A886DC654856F9 + B2318FAD5CAACD4632D35128C5B6BB1F56786FC51A478C34C5D4744D46DF54B1 + 66282E2D640E85875191E95A958BE0FB4B9B3F0ED9A5F69F63A5DF32EEB8B5D3 + 7FD4239EBB4E067B738ADAAEB57B6A64F70A2909C526EA621D45341A5CE68016 + 8A28A0028A28A0043504C78A998D5699F8352CA4665F3F06B94D59F83CD747A8 + 4A0035C8EAD36735C1599DF451CA6ACFF7AB92D4D861ABA5D525C93CFE15C96A + 92F04F7AF12AB3DDA48E4B597C0635E6FE2AB968A7B62A7E6DE4835E89AADD22 + AB2B1C0279E33FE7BD79778AAE55AE611B8654312076E2B86476A29E9F756696 + 98BB505C901495CF0E0066FC3191EF5957BA82C9772F908A232C4AA8E38CF1FA + 556B8B8263554E46DC649E9515B5F3DA5CA4E84ABA1CF071F5E6A063F509644B + 59B7864CC6C57231EBCF35957B7B25C5ECF2311BCED3D38FBA2AF6B3A925DBDC + CA5A42B22127CD604E7078CD624B701667E832A98CFF00BB40D1D16BFACDAC97 + 28F64D09888236A2ED201C75F917FA9AAD7B7A9733FEEE268543124375E79C7B + 77FD2B0924000CB2E07239E95A775AF89558222A091104A0BEEDCCBFC43D3D3F + 1340CADA85DBC97A189C1F25003F4007F4AD1D5BC4C97D690C691324D16D1B88 + CEEF9403D4F1C8381D0E7B62B1AEE50E6091082BB5813D7F88FF0088AABBC11C + 9183C60D03355ADEF0DB2DCC90CA203C6FDA42FE759AD73279ACCAC438C1DC09 + CE6AECFAE3CDA65B59BB02B0B3156279C1C71598CE59B78FBA473ED4016F58D6 + 66D426131762C5543193E6390B83C9F53CD1599338F2C73DF3CD156B621EE7EC + DD14515F747C18565789BC2DA478CF469F4AD6F4F8353D3E61F3C170BB94FA11 + E847623915AB452693D181E57A47ECC7F0EF47BFB5BB5D124BC366C1AD60BFBD + 9EE61B7C74DB1C8E57D3A83D0576327C3CD025F1CC5E306B027C4515AFD892F3 + CE93E58724EDD9BB675279C679AE8E8A954E0B6453937BB393F883F0AFC31F14 + AD2CEDBC4DA69D461B394CD001712C251C8C6731B29E9EB597E1DF80DE09F0AC + 3AA45A669771047A9DA3D8DD07D46E64DF0BFDE51BE43B4FFB4B823B1AF40A28 + 708B7CCD6A1CCED6B9CBDE7C32F0CEA1E034F065CE9693F869204B75B1791C80 + 8841501F76EC82010739E3AD5DF07783747F00786ED340D06D3EC3A4DA6FF26D + FCC7936EE72EDF3392C72CC4F27BD6DD14F9527748577B1E61A57ECDBF0FF47D + 76CF55834691E6B193CEB382E2F26960B67C83BA38D9CA8E4647181DB1815A7E + 37F821E0EF883AAC5AAEADA511ABC4BB1351B3B892DA70BE85E3605B8C8E73C1 + AEF28A9F670B5AC87CD2DEE721E07F849E13F87305DC7A0E8F15ABDDFF00C7CC + F2B34D34FECF2392C47278CE39E95C8CFF00B297C339EEA693FB06486DA6904B + 2D8417D3C76AEE3A1312B85F4E071C74AF5DA2874E0D59A41CD2EE723A87C28F + 0A6A571E199A6D1E356F0D36FD252091E24B53F2F44460A7EE2F0C0F4F735634 + 9F86FE1DD0FC53ACF88AC74FF2356D65556FE513485270A00198CB6C078EA141 + E4FA9CF4B9A322AB963BD8576795DC7ECC3F0EE5BF9AE61D1E6B18E77F327B3B + 1BE9E0B694FBC48E171DB0001567C43FB387C3DF15788AF75DD4B43965D56F48 + 6B8B88B50B988C840007092003803A0AF4BDD499351ECA9FF2A1F34BB995E14F + 0AE99E09D06D745D1E07B6D3ADB779514933CA5773163F3392C7962793FA56A9 + 3484D34B815A68B442DC7526EA85A5A6F99CF5A571D8B19A51CD5712548AF9A2 + E1627A2981A9D9AA245A43416A8D9F14003BE0550BA97683534B2ED15937B738 + 06B194AC6D0899FA95C601E6B8FD5AE3EF56D6A775D6B91D4EE09CF5AF2EB48F + 528C0C4D465C96FEB5CAEA90BCB9DA466B7AF9C9278358B73B893F29FCABC99B + B9ECD3470DAC786AF2EC10850E7D4D7253FC38D4AE2E49263452319DD5EB32AB + 7A1FCAABB23127E53F957233A923C3753F841AD198883CB9A3ECDBC0FE66B264 + F83DE24278B65FC254FF001AFA17637F74FE546C6FEE9FCAA752AC7CEEBF073C + 4593BACF23DA58F9FF00C7AAFC9F07B57B848BFD1E48A5C618B49195FD1ABDE7 + 637F74FE546C6FEE9FCA9582C7CEF71F077C41148CA962F30ECEB2C401FCDB35 + 10F841E23FFA0549FF008110FF00F155F46EC6FEE9FCA8D8DFDD3F951619F3DB + FC2AF109B348468EFBD5890DF6A8BBFE3504FF00077C43184F2F4D798B282D99 + E25DA7D3EF735F45EC6FEE9FCA8D8DFDD3F951603E71FF008543E25500FF0064 + 06CF6FB4C7C7FE3D5249F0ABC4CF6EB18D0C295E770BA8B27FF1EAFA2B637F74 + FE546C6FEE9FCA8B01F355CFC1EF15CBB443A2F18C906E62EBFF007D515F4D5B + A36F3F29E9E945689684B3FFD9} + end + object Image2: TImage + Left = 12 + Top = 22 + Width = 98 + Height = 60 + Cursor = crHandPoint + AutoSize = True + Picture.Data = { + 0A544A504547496D616765FE0E0000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC0001108003C006203012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F58F + 8C1FB7F37C49F845F190781FE1C78A757F04E9FA7EA3A1FF00C279A7BC5E4C57 + 4D0346932C7B8379419E372EAC596360ECAB902B6BE03FED47A5FC05FD84FE12 + 6BBE24B7D67C55E20D77CCD3B4BD274C8CDD5F6A576D712848D79F6032493D00 + 0CC429F15F8657DF10BE027ECC5F167F673B8F83FE33F1278B9D757B4D3755D1 + 74E63A65D5A4F032FDA85C3633801CAA2A9673B2300392173BE20FECCBF10B5E + FD927F664D7E0F08F886F2F7E1FDDDCCBAE78674F8E4B3D696DE5BA490BC0AD8 + 9164516E00D80B832A328C2922BA127D8DF0D7F6C083E267883C57F0FF00C49E + 0DD77E19FC43D3B4893548F49D599185CDB6DC79B04E84062A48C8E31CE09DAF + B7E75FD91FF6A33FB3F7FC13E2DFE2178A6DF53F166CF11CF65E58B9DD70DE64 + 802FCCF9E07A569FECC5F0E2CFC67F1635BF1CE8FF000BFE2668D65A66897161 + 69E26F88DAE49F6DBB778D94DB4766E8C4AEE773B84BB415E818EDAF06F15F81 + BC45F0FF00FE0936FA5789741D4BC3BAB9F18098D86AB6525ACE15A5F94F96E0 + 3608190693B0D1F6FE99FB795843F113C23A278ABE1D78A7C19E1AF194C96DE1 + CF146A912182F6572A22124684B4224DE9B4B723782C154332FCF1F0F7F683F1 + 87C36FDB2FF692B2D17C13E28F8A173F6A824B5D2B4CB80B059431EF32312E48 + 42DBD76AA292C4115B7E3D8FC5DFB61EB7F01FE1F4BF0DBC5DE00B6F0F5CA6B1 + E20F126ABA3B369F6D2DBDB7C90DACC24D93A4AE1903EE1C323618EE51E8DFB2 + A780FC4DE1CFDB27F699D6B55F0EEA9A668BABDCD9B69FA8DD59C90DBDE85F33 + 261760164C6E192A4E33EF43567661B947E37FED45E02F8E7FB056A5F11E4FF8 + 4B74AD026BDB6B5BCB3D02F22B4D52DEE12EA3531F9A43A6DCED6CE0EE465E14 + 92170BE25789AF62FDB5FF0064EB4D2B53D4E0D1EFB4099DAD66BA62664FB339 + 065C101DB006491C9AF0EF0E7C14F8871FFC12BBC5FE117F01788E1F14DC78A9 + 2E21D11B499D6FA5884D6C4C821D9BCAE15B9C630B5EF1E38F86DE2CBCFDAD7F + 651D660F0CEB13691A2787DE1D4AFD2C66682C6436CCA127902E236C9030D839 + A6D6B60BE877BF14BF6EFD4BE1DDF78CAF2D3E0CF8B35BF067847503A6EADE25 + 0F1DB46251805A189FE69630DC171F2805492030AD6F8D1FB79F85BE11693F09 + 356B6F0CEBBE31D3FE244267D2D343895EEB18B728821620BC8FF694508083B8 + 115F0E7C47F007C52F88DA0FC5AD27E25FC3EF8B7E3AF89D26A174DE1D48BCEF + F8452C6D1764BE6C255C46CFB629008943890F908AA64248F58BBF86BE33D461 + FD83248BC19E2203C32CF16B824D2AE11B4B2A6C909B9CA66104C6E417C060A7 + 0714AD7D02E7D39F03BF6C587E28FC55F11FC38F14781F56F86FE2FD22C46A82 + CB579A39167B4CA664122FCA08F310E013FC5CFCA71E19F19FFE0A0927C41F81 + BF14AFFC13F0CBC5DA8780BFB36FF45B5F1EC3B21885CBC4D124E21622458833 + AB6FFBC0632AAD903A2D57E13F88FC47FF00051EF18EA72E89AB5A785B53F87F + 2694BE20FB1486CFCE708BB1652BB0B8193B320F07E87C37C107E29FC35FD8C3 + E227ECF375F053C65A9F8CA2FED1B6B4D4ECB4D32E91736D26659265BA240770 + A65D888ACCEDE52AE5998280647C2EF18F88E6F869E137935ED41DDB49B42CCF + 3B1627C95C9249E4D15BDF0CBE09FC41B1F86FE15B6B8F04EBD04F0E956B1C91 + 4DA7C88E8C225055948041078208C8A290CFBCFF006997B9FF00855D0DBDB6A1 + 7DA635F788FC3FA7CB73A6DE4B693F933EB1670CAAB344E9226E8E47525581C3 + 1E6A13FB387855582FF6BF8EC64E307E20EBDCFD3FD33B54FF00B4AFFC93BD27 + FEC70F0B7FE9FAC2A9FED01E30F11F84345B59745BD1A4D84ECD15C6AA9671DC + 3C1334912C2BFBC758D15B7481A493E55000CEE65CF2E2B111C2D19559EC8695 + CCBF11FC22F87BE128E11A8F893C751CF306F22D62F1D78826B89F6805BCB852 + EDA47DA082DB41C0E4E0035F287ED3567F0D7C67F083C79A71D5FC4ECD67A5CD + 7F67697BE32BBD49D2E20432C6CFF6BB996D5D59D42910334A1461198C8E9174 + 57F796BACEB325BEABADCDA8DBDFA379B6E969F6D8DFCA39533BDAEA124F21CE + D5532BBE0485536AA8AF3EF8C9A5783EC7E0E78B6F2DE0B3469344BA96DCC650 + CCA4C0C232631A9BB0390323CB3B7736E5C2E0FC054E23C555AF4E5452F66DA5 + AECF5EE69CB169C7AFC8F77F0D7C569FC4BA54779A1F8A6EEE2D611E4B2477B2 + 2B5BBA805A196332031C8B900C6CAAEA7A8ED5DCFC2BF166AD73E3DD2E1BCD66 + FAE2176903C13DDB3A36227FE12E73FC273C8E477C1AFCDED43E227D8AF6EB54 + D3FC63630DEDA01630EA365696769751053B96211CBAC24AF0A3F58E64688B03 + B91F62E7ECAFD943C47E24F1558697A9F88A5FB4995CFD87506B416B2EA16BF6 + 74FDFC902CF2286697CF0193E4608190142A6BF78A18FA18DC34E8CE928CD2E9 + 6FBCFCF6AE16BE13150AD1AADC5CB6BBFB8FBA1183A2B0E411914EA86CC96B48 + 0B72C5173CE7B54D5F22CFBC5AA392F8B9AE5F7867E14F8CB58D327FB36A5A7E + 8D79776D39556F2E5481D91B0C0838201C118F5AF96FC1DFB55F8ABC45E06F86 + 76579A88B0F1B4FE2ED2B4FD66336D16FBFD32E91A449D536E156443182C9B48 + 2323686507E95F881F0F75AF1D2F88AC3FE1296B2F0EEAFE1DB9D1BFB2858238 + 8AE65DC3ED9E6E439C236DF2B214F5CE6BCF35FF00D91F4CD76F7E126A7FDB4F + 6FACF8092C207BB4B6DC35286D4AB2A3297FDDFCCAC41CB11E6303BB835D74A5 + 4546D516BFF00C2A2A8E57833CAAC7E38788758F1CF8DB4FD57E31EA1E137B0F + 145EE95A7E996BE124BF4FB3C726232D32C0DCF3B7E66CFCB9279AF4DFDA01BE + 257873C57E17B9F0E7C459B48D23C45AEDA68A34E5D22D661641E272D207742C + E498C9C1231BB1D2AD693FB3FF008FBC21AC78AAE3C2DF14ADB47B0D7F5ABBD6 + E4B49BC351DCB452CE7950E6619002A0CE39C138E6BD0FC77F0D66F1E45E0A37 + 5AA882E7C3BACDB6B324AB6C08BA78A3910A6DDDF206F309CE4E31D0F5A994A0 + A778DADE9FF00718CB96CF732A0F877F10A386347F8AD752BAA80D21D0ECC163 + DCE02E28AF4FA2B98DCF2AFDA5BFE49D693FF637F85FFF004FD615B7F17E0593 + E1578C997396D1EF3A1DA7FD43F427A1EBD78AE17F6DBBAB9D3FF66CF12DFD8D + D49657F6377A65EDADCC4A8CD14D16A36D246C03AB29C3229C1523DABE2EB9FD + A3BC59AFFC38D6A7D73E326B6D1C967245358CB67A1C02E370D862DD25B2AA82 + 6450493C678EF8E98E02AE2B0F52AD36AD1DEEEDFF000E7156C5D3C3D48C26AE + DEC7D45E33D2D755F88BAE295202D85B0C904120DC5DE3079208C6015CE3038C + E057887ED39A6487F643BBB7B646966497536221C2E151B51666C860A0001C91 + 93DF00F0B5E37E1FFDA9AEE7F19F885B5FF8B7ADD959CF6D0C50CEB1F8665697 + 6B4CCC2411875E4CBC6C1D378663F28AE63C5BF1C0F89B4CD27C35AB78F75A9F + C2D7B2DD3DFC73DEF86A5648E7F3F0C0C2C5D5BFD209756E4658000852BF08B0 + 2BEA387C3549ABD39F33DEC95F6D8F2BD9BA78BAD8A82779452F2D1F42DE8B65 + 1E87F067E20A2848FCC31CE4921372F94C371064527E5503764E001865CE6BEF + 6F0513FF0009169F970E4B1C912139F90E490246078EA4E49C6322BF3FFC57F1 + 7FC30BE0FF0015E9FA3496ED0DF794B0CB16B564A0BEC6E591AF926382E3E70A + 0707016BEEDF837E35D33E205BF87BC45A55D2CFA7EA1199D0FDA11CC7946DC8 + FB6570194E558027041E7BD7E9B964E94F138B9C5A6A4AEBD2C7CC631577F559 + D44E2DB775E6D9F5458926CADF2727CB5C9249EDEF53D4162316506460F96BC7 + E153D788F73F485B0514514861451450014514500783FEDCB8FF00865CF1A64E + 07FA173FF6FB057E441D36587C40BAB69FA9DCE9B7C20580C96C226CA824E0EF + 56F5FA703D057EF06B9A169BE25D2E7D3757D3ED755D3A7C79B697B0ACD14982 + 186E46041C100F23A815E41E30F80BF0E4DD208FC0FE1FB6FF00AE1A6409FC93 + DEBD8C1E269C29BA1561CC9BB9E563284A7255612B5B43F367C01AFF00DB5960 + BDF1FF0089AC651F29108D3957248FBBBADCE39553D3F810FF0002E3DB3C39E1 + 0D3A68131E3CD76EE40415919EC8328DAA005D9100A46C8F040C8D91E0FEED31 + F4B49FB3FF00C3EC063E12D21B9C60D8C3FF00C4D5FB4F83DE10B623ECFA1595 + BE071E55BA2E3FF1DAF59D5CAAA4396AE13EE67CFD7C1E2EBAFE3687CEE9F0EE + C02204F17EBA8AB82AA8F6A8108C63680A00C6C4C7A6C4C7DC4DBDCFC05F0D69 + BE04F101B0D3AFAE6ED2FEF65D418DD3444A48601195411ED50B88F71017E667 + 278AF59FF8573E1F889DBA7C40FAED1FE15A3E1FF06E93A76A26E2DECE38A78F + 76D9154647CBFF00D73510AD96D252F6141C5B4D6E7152CAF14E4A6EADECD77E + E7B0D8E7EC56F9E0F96BFCAA7A8AD062D61E73F20E4FD2A5AF943F42B5B40A28 + A2800A28A2800A28A2803FFFD9} + OnClick = Image2Click + end + object lblVersao: TLabel + Left = 395 + Top = 81 + Width = 72 + Height = 23 + Alignment = taRightJustify + Anchors = [akTop, akRight] + Caption = 'Version' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = 6435072 + Font.Height = -19 + Font.Name = 'Verdana' + Font.Style = [] + ParentColor = False + ParentFont = False + Transparent = True + Layout = tlCenter + end + end + object Panel2: TPanel + Left = 0 + Top = 109 + Width = 474 + Height = 105 + BevelOuter = bvNone + Color = clWhite + TabOrder = 1 + object Label2: TLabel + Left = 8 + Top = 8 + Width = 109 + Height = 13 + Caption = 'Desenvolvido por :' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 136 + Top = 32 + Width = 37 + Height = 13 + Caption = '( QmD )' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label8: TLabel + Left = 168 + Top = 56 + Width = 68 + Height = 13 + Caption = 'icq: 15630894' + end + object Label4: TLabel + Left = 16 + Top = 56 + Width = 143 + Height = 13 + Cursor = crHandPoint + Caption = 'qmd@usercontrol.com.br' + Font.Charset = ANSI_CHARSET + Font.Color = clBlue + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [fsUnderline] + ParentFont = False + OnClick = Label4Click + end + object Label5: TLabel + Left = 16 + Top = 84 + Width = 82 + Height = 13 + Cursor = crHandPoint + Caption = 'Canal #Delphi' + Font.Charset = ANSI_CHARSET + Font.Color = 21248 + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [] + ParentFont = False + OnClick = Image2Click + end + object Label11: TLabel + Left = 104 + Top = 84 + Width = 84 + Height = 13 + Cursor = crHandPoint + Caption = 'irc.brasnet.org' + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [fsItalic] + ParentFont = False + end + object Label1: TLabel + Left = 16 + Top = 32 + Width = 108 + Height = 13 + Caption = 'Rodrigo Alves Cordeiro' + end + object Image3: TImage + Left = 424 + Top = 56 + Width = 30 + Height = 16 + Cursor = crHandPoint + AutoSize = True + Picture.Data = { + 0A544A504547496D61676502040000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC00011080010001E03012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00EC22 + F12FC42F16F88A4B2D0D5AE56355DF2150B1C63FDA63C0FA753DB3567C57F193 + 5DF84FE289BC3561A769FE33D7D2DD659E5D4B52B6B445C8DC2386DD9B7C8D8C + 60E7249C2A9AF21D3BF6BCB2F873E23BA8F4ED563B8B266FDED9CE85A22D800B + 0C1043600E41F4C835E77F1CBC5FE10F8C3E3DBBF16F877C4769692DEA45F68D + 3B5589A2963748C47942AACAEA4203C9041ED5F8EF0BE1DE3388254B889B8E0B + 924E2EF51273BC6CA6E0E2D2B7335AA8B764DBD11F3B4146182F6B85E6788E65 + 7524ACA3AFC09DD3E9BEBD92DCFA7BC1BF10FC45F1B6C7C4571E1FB69BC39E23 + D12758AFBC3F7243C6598B00639485DBCA499461C63AF35F3CFED1BF117C69A7 + C96561A94F3595CC3236E85D0A10707F3FAD747F07FF00695F0CFC06F056A3A6 + 0F11AF88F589D93ECD0A23C96968A32482EDB5893B8FCAA368C0E72493E2BF1F + 7E3643F15351B5BFB8D45EFEE9723EE61634E48551D00E4FE75857C3E2171262 + 6860A2E597A6BD9B939B7F02BD9CB571E6BD9CAEFB4A4ACCAC452A32A54653BF + B777E7492E4DDDAFD13B5B45A79267FFD9} + OnClick = Image3Click + end + object Label12: TLabel + Left = 408 + Top = 80 + Width = 59 + Height = 13 + Cursor = crHandPoint + Caption = 'Curitiba - PR' + OnClick = Image3Click + end + end + object Panel3: TPanel + Left = 0 + Top = 217 + Width = 474 + Height = 299 + BevelOuter = bvNone + TabOrder = 2 + object Label9: TLabel + Left = 6 + Top = 9 + Width = 163 + Height = 13 + Caption = 'Cr'#233'ditos e agradecimentos :' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [] + ParentFont = False + end + object Label6: TLabel + Left = 77 + Top = 271 + Width = 154 + Height = 13 + Cursor = crHandPoint + Caption = 'http://www.usercontrol.net' + Font.Charset = ANSI_CHARSET + Font.Color = clBlue + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [] + ParentFont = False + OnClick = Label6Click + end + object Label7: TLabel + Left = 6 + Top = 271 + Width = 68 + Height = 13 + Caption = 'Site oficial :' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [] + ParentFont = False + end + object MemoAgrd: TMemo + Left = 6 + Top = 24 + Width = 463 + Height = 228 + Ctl3D = False + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Verdana' + Font.Style = [] + Lines.Strings = ( + 'Alexandre Oliveira Campioni - alexandre.rural@netsite.com.br' + 'Bernard Grandmougin' + 'Carlos Guerra' + 'Daniel Wszelaki' + 'Everton Ramos [BS2 Internet]' + 'Francisco Due'#241'as - fduenas@flashmail.com' + 'Germ'#225'n H. Cravero' + 'Luciano Almeida Pimenta [ClubeDelphi.net]' + 'Luiz Benevenuto - luiz@siffra.com' + 'Luiz Fernando Severnini' + 'Peter van Mierlo' + 'Rodolfo Ferezin Moreira - rodolfo.fm@bol.com.br' + 'Rodrigo Palhano (WertherOO)' + 'Ronald Marconi ' + 'Sergiy Sekela (Dr.Web)' + 'Stefan Nawrath' + 'Vicente Barros Leonel [ Fknyght ]') + ParentCtl3D = False + ParentFont = False + ReadOnly = True + TabOrder = 1 + end + object BitBtn1: TBitBtn + Left = 395 + Top = 264 + Width = 75 + Height = 25 + TabOrder = 0 + Kind = bkOK + end + end + end + end +end diff --git a/internal/2.31RC1/1/Source/UCAbout.pas b/internal/2.31RC1/1/Source/UCAbout.pas new file mode 100644 index 0000000..5c99bb4 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCAbout.pas @@ -0,0 +1,115 @@ +unit UCAbout; + +interface + +{$I 'UserControl.inc'} + +uses + Messages, + Buttons, + Classes, + Controls, + ExtCtrls, + Forms, + jpeg, + StdCtrls; + +type + TAboutForm = class(TForm) + Panel1: TPanel; + Image1: TImage; + Image2: TImage; + lblVersao: TLabel; + Panel2: TPanel; + Label2: TLabel; + Label3: TLabel; + Label8: TLabel; + Label4: TLabel; + Label5: TLabel; + Label11: TLabel; + Panel3: TPanel; + Label9: TLabel; + Label6: TLabel; + Label7: TLabel; + MemoAgrd: TMemo; + Label1: TLabel; + Image3: TImage; + Label12: TLabel; + BitBtn1: TBitBtn; + pnlFundo: TPanel; + pnlComponentes: TPanel; + Image4: TImage; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Label4Click(Sender: TObject); + procedure Label6Click(Sender: TObject); + procedure Image2Click(Sender: TObject); + procedure Image3Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormShow(Sender: TObject); + private + procedure WMNChitTest(var M: TWMNchitTest);message WM_NCHITTEST; + { Private declarations } + public + { Public declarations } + end; + +{ +var + AboutForm: TAboutForm; +} + +implementation + +uses + ShellAPI, + UCBase, + Windows; + +{$R *.dfm} + +procedure TAboutForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TAboutForm.Label4Click(Sender: TObject); +begin + //ShellExecute(0, 'open', 'mailto:qmd@usercontrol.com.br', '', '', SW_SHOW); +end; + +procedure TAboutForm.Label6Click(Sender: TObject); +begin + //ShellExecute(0, 'open', 'http://www.usercontrol.net', '', '', SW_SHOW); +end; + +procedure TAboutForm.Image2Click(Sender: TObject); +begin + //ShellExecute(0, 'open', 'http://delphiland.dyns.cx', nil, nil, SW_SHOW); +end; + +procedure TAboutForm.Image3Click(Sender: TObject); +begin + //ShellExecute(0, 'open', 'http://www.curitiba.pr.gov.br/', nil, nil, SW_SHOW); +end; + +procedure TAboutForm.FormCreate(Sender: TObject); +begin + Self.BorderStyle := bsNone; + lblVersao.Caption := 'Versão ' + UCVersion; +end; + +procedure TAboutForm.FormShow(Sender: TObject); +begin +// pnlComponentes.Top := Round((pnlFundo.Height - pnlComponentes.Height) / 2); +// pnlComponentes.Left := Round((pnlFundo.Width - pnlComponentes.Width) / 2); +end; + +procedure TAboutForm.WMNChitTest(var M: TWMNchitTest); +begin + inherited; + if M.result = htclient then + M.result := htCaption; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/UCAboutXpStyle_U.dfm b/internal/2.31RC1/1/Source/UCAboutXpStyle_U.dfm new file mode 100644 index 0000000..966218a --- /dev/null +++ b/internal/2.31RC1/1/Source/UCAboutXpStyle_U.dfm @@ -0,0 +1,768 @@ +object UCAboutXpStyle: TUCAboutXpStyle + Left = 245 + Top = 225 + BorderStyle = bsDialog + Caption = 'About TUCXpStyle' + ClientHeight = 315 + ClientWidth = 510 + Color = clGray + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + PixelsPerInch = 96 + TextHeight = 13 + object Image1: TImage + Left = -1 + Top = 0 + Width = 510 + Height = 151 + AutoSize = True + Picture.Data = { + 0A544A504547496D616765F54C0000FFD8FFE000104A46494600010101006000 + 600000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC0001108009701FE03012200021101031101 + FFC4001E000100020301010101010000000000000000070805060904030A0201 + FFC4006A10000103030204020505080610110C03000102030400051106120708 + 21311341091422325115617181911618234254A1B1C138A2B2B3B4D117333637 + 4352556272737475769293D2192425262734355364848594A3A4C2C3E1283946 + 476365828395B5C4F0D3E2F1FFC4001B01000203010101000000000000000000 + 000003010204050607FFC4002F11000202010302050305000203000000000001 + 021103041221053113223241513361D1141571A1C12353424381FFDA000C0301 + 0002110311003F00E9738E2196D4B716942123254A380056264EB2B0C26FC491 + 7AB7C74633B9E928401F69AF5DE5D0C5A65B8AF752DA89E80F97C0D561E235FA + 3A19214CB0A013B49F0539CF7AE5CA51846DF73AB8F1BC8E913B4AE3670F6115 + 7AC6B9D3AC6DEFE25D184E3ED55798F1FF008623BF10F4BFFF00588FFE7D5174 + DA205F6F9E2FA9C6280A395A994F4E9FD8D652E3656448663A2D709008202FC1 + 6FE1FD857267D4B163E25DCEDE3E94F246D32EB7F27DE191008E21E9639E9D2F + 11FF00CFA238F7C3471CD89E2069852F3B768BBB19CFF8F54E34FE92B6352521 + C87094E673D5A6C63ED456957DD4D618F26732CDBA0ADE123C341532DABDACFC + 366690BAA29729705FF6895D597FFF0093B70E338FBBCD39DF6FFBA8CE33FE35 + 15C76E1C2319D7BA6C67B7FAAAC75FDB55129F668B6F8B1643916DE1A7901650 + DC64A55BBE19DBD2B2AC3365D5B692C376F61A92C607BA91D73F1F0E96FAB457 + B0FF00D91FCB2EEB5C6BE1F3E406F5B69F709EC137264FFDAAFBB7C5CD10EA82 + 51ABAC8B51380133DA3FF6AA8459AD6B5CB7633B1A3A10DAB614A425473FE27E + BA99B41F0E60458C64AE3B2E3A06E095B68C7E8A44FAD6D7492172E8FB5D5967 + C71034C28029D416C502768299683D7EA35FD7DDDE9CF2BE5BCFD12507F5D562 + B8C88D69BAAD8716DB51969CA709091BBCFF0017A563634C8525C5A187512413 + D46E49FCC40CD57F7A6FB240BA3DFB96D11AC6C4E0CA6ED0D43E67926BFD6F57 + D91DCEDBAC538FFDA8155A6D96F5BECF8AC846D1FD0D4D006B60B3E9BD892EBC + 184ACF64A9BC83F652A5D724A554BFBFC959F4A8C78B764F4753DA4027E528C4 + 0F30E835FE7DD45A3FAA51B1F1F105549E33EBA8F60868B4DA0B4BB83982B759 + 4E437839FD58FAEBC9C24E27196DBD0EF31824A13B9525491848F2FA727A7D74 + E7D626D5C52FEFF2443A4EE8DB6CB83F75367FEAA44FF2C9FE3AF92B59D852B0 + 937885B8F978E9CFE9A8463AADD7C64B915C5141F34242143F58FB2B0726D2EC + 175C54656F5792DC73247ED6B37EFB91774BFBFC911E957EE586775DE9C61652 + E5F6DE850EE152503F5D7C871134B904FDD0DB7A7FC291FC755851A6E3DE1F58 + 9EA5A64FE3786B391FB5C57B9BD096FB7462F02EF5F74B8B041FA462A575E7EE + 97F7F918BA3DFB96355C4BD26804AB51DB001E66523F8EBFDFE495A4CA41FBA4 + B5907FE168FE3AAC31EC51D9716B90DA568CF61839FDAD6B770532DDCA5210DE + F69006D6B03AFD7B6991EB97EC86AE8A9FBB2E08E25E93270351DB3FE748FE3A + 0E25E933FF00A476CFF9D23F8EA8ECE8724C80E368F0D39F733FFF005AF43B18 + 21090B52724754E707F73575D6EDD522FF00B1C6AF732F0C5D7DA6A6AC263DFA + DCF28F64A24A09FD35916AF76F7D7B1A9AC38AF821C06B9FECDF9EB5CA546491 + BC00BF0FCC8CFD18FCF52568BE27ADB948695B4277241F670475F8D7574FD423 + 99D1CBD4F4E783B170B70DC13E66BFDAC5E9EB80B94469C42F202015271594AE + C3AF6389CFB8AAF3CCDF3B3A2396C5C7B3BCD49D57AE26FB30B4C5A0853E54A0 + 7C32F2BAF84952B6A47452CEECA50A00E242E61B8BB1780FC17D59AEA5A03DF2 + 4432B61950514BD216436C3676F5014EAD0927C8127CAB983E8E9B34BE38F1BF + 5BF10B544A7AFBAB58530512E504AB0B925DDEE818F65494B2109DB84A52A500 + 318C3611B56CA4A4D3A458AB87359CDADEE4C3B958381DA7AD36390DA5C106F5 + 7342A6804E4856E90C96CE3036A9A0410723C8677417A4C2D96CD64DE8FE34E8 + B9FC2BBDAC27C39CE3864C1741253E21504828415020293BD1D0E56306ADCDAB + 435AEDD1D285B097DCEEA52C773518F329CA9E95E61787770B0CC8CDC4B906D4 + BB74F08DCA89236E12B1D412338CA73ED0C8E9DC4DC5F0D11525CD9F0639D0E1 + BDCB980B1F08AD32E4DF2FB7688263574B7782EDB5B498EB9294A9EF1324A9A4 + 2540A12A49F111D7A9C4EF5C1CE4E74E5C742F3B5A72C1734F8174B4DC2E3024 + A10AC843ADC79085804771B927AD7772092614724E496D3D7EAA89C547B13093 + 9773EF4A5292305294A8014A528014A528014A528014A528014A528014A52801 + 4A528014A528014A528014A528014A528014A528014A52A40C06BE9420E88BF4 + 927686613CE67E184135456F3A8A45E9294A944E427775ECAC76FCE2AEDF174A + 870BF5484F552ADCFA40F89282055046E4FABB016BE8A24287CE0A40FD46B87D + 432CA12DABE0F45D330A9C1CBEFF008363D3D6C5379DC8C255D4AAB292105525 + AC273B54304F4AC7596F01684A428249E80D643504B8F63B248B94A7C283693B + 5BC1F695E5F9EBCDA4E72ED6CF53CE38F0423C52D633CEAA94CC77D715B8FECE + 5B3DCD66B86ECC2976EDEF2A0BCEE7D616E3C83E20FAF1519CA71ED65A8F6B08 + 5788FE54A48EFE67F40ACD9B3DC6C501515511E8E5E3B52EA8E06D1D7F557665 + 0C7186D6B9150C9293E495AE136DD7E69F93EB43C409D8D3683EC835F7D22A8F + 02F315B65C0E2D6D1DE8FEBB06A0F4F8D6C4A521E586F3EF673D6B60D352661B + B09515F52D4C9DCAF2C0F3EFF366B93934D149C91D14DB4582B459D8877F75E7 + 46E69C0167033ED549D1AECEBE8D90E394242701407CD5A3D8E47CA91A0BAD37 + E1A1C4654AEE55D3E1DEB3D7176E08B4BD1E23A88CE280C3CB38090082AEBF46 + 457127EAA664CA9B9A56642668F87AB6D2B44E0ACA8F5711F8BD73DFCAA37BE7 + 09665910F3B67F582A410A4A93ED63A8ACDE9BBB7C88EACC490A929DE80E23C4 + 2B42C9501DBEBCD4AEECC75B92E3214B6C2D093840C63EDAB37E1F090A92941D + 27C118692E233B6AB53CD6A080B624B40203D903C539C0FA3AFC6BEB7DE26DC5 + EB67ABC1692C2923F0AE9EA5093F38E9D7B7D7595D53A75B97252DBE12B6DC23 + 25CC7D23B57F08D090EDB6E9E979D2A664B44123DD49C647E7C509C65CC91A61 + 1C6D6E6F923DD37A1AD3ADA4BBE24B79B928214EE1585AC13D719ACF46D1D078 + 7D73F9454DBF3ED2973608CB2327C8124F4E8483F557F4F59CE9FB3D96F30B08 + BA297EAEE20F675B07DEAF67132E4F46D24B9697521C4A90B085F441F686720D + 31F9DD2EC2E772957646C568E2B5AAF3735C18B1D36F58C270BDA9F13E615B05 + D4088E34F2FD92AEC93E67155DF40CB99A875EDBAE122032E30959DAFA127674 + 49CD4F3799CEDDDF71A1B5B61046C2E7551FEC7E1F5D2B263D8E8A4F1A849462 + CF4BF3E2C58C1F6D285C83EF253D7BF4AC14EBBC99C5D63C3D8063667AF9FC2B + 0B263A92F80DBBEA8D15ED538B574C8AF72E4A3D7938783AB40CE5A3DFA521C7 + E50F58AA3767D5A8373536579429903AA36E09F877A5B74E371E33B224379794 + 7A823B75ACAB17495290DA83ADA5A1FD0CA7DB557FB72B9AC3186FDB4F4DC318 + 3DEA8DEDE12149BF935CBBC76D8F690D25381DEB587ED91653A875F5F86A27D9 + 3D71F3FE6AD8A715C8960281013D5408AC7CE8C62A5C71080E38EF40850C84D5 + E0EDF61D16DAAB347D496E4A64267B237141DBF4A7B5601529F4294FB0A294EE + 49C8E9D8835BC5DADAE18BE1B89521D3D7C30462B013EDA96ADAB4A127784924 + 63E6AEC69DB8E44D19B3C13C6D32E1701F52FDD0E978EBDDB949484A8E0F90A9 + 3EA03E529E53BA29A2AF7B7A81FB0D4F95F4387314CF9D64E26D1493D2ED7F97 + 66E5621448CA0966EBA8A243920E7AB61A7DE0075FE9D9477CF6FAEB9C7C9573 + 38E72C9C5B62E935B54AD2B71D91EEF1DB46E70201250EB7D47B4824F4EC52A5 + 8C64823AD3E90AE1C4BE267297AE215BD90FDC6DECB776650491911DC4B8EE00 + 0727C20EE0799C7D35C15ED5BF1D38D18B25A959FA61D25AB2D1AEB4DDBAFF00 + 61B83174B3DC194BF1A5C756E43883D88FD047704107A8ACBD700395BE7275DF + 2AD7970D85E45D34D4B792ECFD3D3947D5DE3D0296D91D5A74A46378C8384EE4 + AC240AEC8F2D5CDFF0F79A0B378BA66E061DF996CB9334F5C0A5136380424AC2 + 4121C6F253EDA491EDA42B6A8ED09941C47466A4571E2EF2C9A8ACFE908D3DC5 + 5B4598AF474D8BE2DCEE2990D252CCC319E8FB4365616720304909232B273DF1 + 7D607FB463FF006B4FE8A4A84C4E40448692EA41DC028763507733BCDA59B952 + 836A9DA8F4C5EAE7679EB11D99D6C5475243D8512D14ADD4AF2128CE71B7A8EB + 9C810DB95225251B64F14AA4FC3EF4AAF0F389DAF34D693B3696D48C5C6F5706 + 6087AE098EDB2C85AB0564A5D51381D718ABACDB89750168214923208AAB8B5D + CB269F63FAA5294B245294A9014A52A005294A005294A9014A52A005294A9014 + A528014A528014A52A005294A005294A00533D71E75E6B95C63DA2DD2A74B752 + C448CD29E79D59C2508482544FCC0035CC2D6DE98FBA41E253ACE9BD136F97A2 + 633CA68AE73CE2674A4838F112A49D8DE7A9DA52BF2EA29AA2E5D8AB928F73A8 + D4AD3F847C53B271A387B66D61A7DD52EDB73603C843980B6CFE321401385039 + 07E8ADC2AB5458D5F8A08F17879A8118CE61B831F55506B9B498D150A2839421 + 00EE49C66AFF00F11491A1AF653DFD5578FB2A8FDFA72E5C4530E3284A425009 + C8F85797EA726B2A5F6FF59EC7A1F38DA7F3FE23496F50AE3BC84B696FBFE28C + 1AD3788FACA55C18303C5213B8A9601EC3BD66AED67762179F6CA94002AE9E55 + 18C97C4A97BD6A25D51DA5241EC4E3F5D65D142E7B8EEE67CD1BAF082D0CCDD5 + 487CAD4831D9F13281D76E3A9ADBB8D97A61EBAC1619756A6D0D6E08EC14318C + 9AC6704A422D37B9C879A0ADE9F0867E158CE2ABC976FD25686D450DA7C30AC1 + C0EB56CF52CFC0AC78D7734B952965A6CE7F07BBAA6B6AD117443321F56DC851 + 4A7183D8900D69689252868ED2AEBDB15B169E7DAF5D254141AFC6083839F2FC + F8AD538258CDB1EC59BE12DC5BBA3B2E329636C5E890839C03D056F1334F9996 + F9B0C3AB0EBE92105CEA9FCD508E81873AD739BB95B66B4C3EE6416CA0942860 + E428799C671F3E2A4699C50865BF010DBD1AE2DA76A5851CA94A3D329C7D35E5 + B3636F25AEC67C89B9AA350976F89A0F5E438D2E629D891D80E3C86158255FF8 + 77FAAA6E8DAC6CF7A6FD6203C5C3E1A7A295920640AAD9AB6DD2A2DE9B7A5BA0 + C998129587BA9482467AF6ED598D28E2F4BCF90B8F95425128539B4E074E9D7E + 9C52B24177343C4A51B65925D9A3C94B6F78CDAD4A1D947A0AC56A3B00930DB8 + ED3AA703609C21584AAB45D3FF0029CB5154590A74AB0A1B81DA067E7A926DF6 + A2194C85A96EBED8F6920E13D7A79F7EF5CF9368E6497872E089EFBA52F4D371 + 489676A5794A4F66FF00FDED512F10F51DE27DD16C3CE789158F60A3F157F1FC + DD6ACAF126E6AB7E9E79F61D687868EA85903AF61DEAB55A34FDC3883A83D59C + 7C223303C678B293920F4EFF005D74F49CC6CD78E52C91B245E0BEA3876DB74C + 80E7868525A0EB0D8503B727AFDBF0AD9F517146DD6CB4253B10673990907B8F + A4797D75156A6D00BD0B716E6D9964B6FA3C35B6B3ED363E3F4D78D16599227D + BE3BD8971E42FDEC12FF00C7DA3E63E8AD3979E467876ED9B1DCB532E021A71C + F1DF75F4788851FE56927E20D7F568E21DBECF15722E4F2D4EEEC165381D6B2C + FDB576D7150A486DF75253E0B4B4E709C839FABBFD550E6A4D1D77BAEA7BD214 + 96D3EAE03CB08411B904E011F59149C58B1E54DE47436B8A2CDE8ABB2350DADE + BBC771B5E07B083DD23FFF002B231A5BD25E03D5B2544E17E5DAA02E1A710646 + 8AB7A218693323A95B5C03A11F6D4C07513B74F01D8CBF05858C8420E0938F8D + 62CB81C65C7633CA0D3E0CA5E47AB4553AE101EF36D2327BFCD5AE35AA524A90 + 5290A4F62A159B8E82E36B4AD41D4FE31CFB63E18AC24C8ECC4F18A90D023CDC + 193F6D2A0A99314D2E4F3C5B8B5789EE9791D53D96074AC6EA95B486DE01012A + 4B6A3803BF4358E8D2DA89752DA1C56C7D5D0A4109E9D7F556735134D9B64A59 + C1CB0AC2BEAAEAE17FF2242B3FA192FF002909F1347B6B07185A958F9B06AC0D + 57DE51891A45B03DDEB560ABE8F15508FF0007CE327D491FCB8DA5D6D485A429 + 0A182923208AE24F3F3C92DCB97BD633B5469A86ECAE1DDC9F2EB6A6D19F92DC + 5ABF942F1D9BC9C2147E64925401576E2B17A974CDB357D925DA6F1099B85BA5 + B6A65E8F21B0B438850C292A4904104120823041A7425B5889C7723F33759AD1 + BACEF9C3DD4F6ED45A6EE722CF7BB7BA1E8D362AF6ADB56307E9041208390412 + 08209157DF9BDF460DC74C3F3B5470ADB336DC478AEE9D272E37D7DA31D64FB4 + 3183E1ABAF43B4AB2948E7A4C86FDBE5BD16532E4692CACB6EB2EA4A56850382 + 9503D41046306B626A4B831B4D773BBDC8EF37B0B9A9E1CADC9C86A06B5B3EC6 + 6EF09BE887090763ED0C93B1783D0F54A92A1D4614A83BD32BFCE57447F7FCFF + 000772A84F22DC5999C20E66B475C1871C10EE9253669AD231875A90A4A13BB3 + E4973C273A7FBDD5F1F4C5C84CAE06E83791EEB97DDC3EB8EE5276ED9AA1FBB7 + 419CE0E58094F30DC3D20E0FCB51BF762BF43763FF0072227F6B15F9DCE5C6E0 + C5AB8F1A0E64A70351D9BBC75AD4AF20162BA1BCDE73DDC66E09BF668563D14D + E92B2CAC98576BC78525D9C94A46EFC1A16435EF24E15857C40EA2A7245C9D22 + B8E4A2B93A494AA53C897A4097CCA5D24E8FD596E62D7AB634612599114E199A + 804256769F7140A93ECE4E41E9D8D59CE35718F4F701B87574D65A99E5B76D82 + 90036D0CB8F38A3843681F151E959DC5A7468524D59BD52AAC72DBCCFDD39B5D + 2B7DBE5AE4A7454589735408B1186D12E5A9094B6E171DDE0A46E4ACA4003A14 + 9393DAA07E237A46F5CF2CDC6EBC684D736881AC6DB0DD42D17185FE9593EAEE + 00B465006DDE12A008E9D7AD4A836E88DEBB9D1FA5687C15E35696E3E68283AB + 349CEF5BB7C8CA56D2C6D763B83DE6DC4F9281FA8F7190735E8E2F717B4CF03B + 42CFD5BAB277A8DA6200094A7738E2CF44A109FC6513D8556B92D6AACDD295CF + 8E0FFA46AFBCCBF1A62E8CD3F6D8DA1EC8A65E90AB849C4B96EA5006109491B1 + 2A39CE4E4601AFBF335CFA6B3E5278AD6CD2B32145D716D9D6862E6254B6C439 + 08DCEBADAD20363691F822474E9BB0738C9BEC95D15DF1AB2EEDF388FA574CDF + EDB63BB6A3B5DB6F372514C2812A5B6DBD208EE108272AFAAB63AE50F11B8131 + B9E69BA5F8BBA0351163C42989A8D13B719515F428A89404F4F6429294A7A0DA + 1273D6A76E6579BCE22728BA43482CDB2CBA921DC774360CFF001D32C065B465 + 6EAF7616A56EEA40152E1ECBB95DFF0025E8A5734B823E955D4DC58E2EE93D31 + 72D2B69B1DAE6BEA4CD92C3CE3AE14A5A5AB080AF32A48C0EA4E70324D65F9DA + F4836B7E086B4B469DD2A9B645B929A4CE9B124470F96195FF002B69C56EC788 + A00A88481B4148CAB39A8F0E5744F891EE745A955C3928E6FA1735BA0E7CD910 + 9BB3EA4B3BA966E3090E6E4614096DD467AED56D58C1F342AA30E2F7A486D70B + 8CF69E1670F2345BA5D265CDAB54BD4131798911C5B81076253D5D2924E7A819 + E99EF51B1F62772AB2EF52A9AF321CD76AAE51D9D2B79B9BED6BDB05E652E33E + CBECB70A535B4056E68A06D50C743B877C7519C558BE07F1C34B7305A0A26ACD + 2730C880F12DBACBA025E8EE8F79B7139E847E7041A8DAD724A926E8DFE954A7 + 9D6E74B5FF0028F7FB0B08B269CBFC0BE994E45043EDBACB6D29B002CEE214A2 + 1C1D4003A1E9D6B40E58BD26FA9F8F5C70D2DA2EEBA5ED564B7CEF595499315D + 5AD6AD91DC5A1290AEDED253E756D8DAB237ABA3A2B4AA2FCE7F3E3AE7953E20 + DB6C71B4FE9FBF41BA42F5F8CEB85F6DC6D1BCA36AF0AC28FB24E463BD627947 + F48FEA1E6378CF0F49DDF4D5B6C36F36F7A438EC4756E2DC753B3681BBB0EA7A + 7D1D68D8EAC37C6E8BFD4AAEBCE5F1F35972D5C3D7B5BD96158EED6969D6232A + 14E43C1F2E38A20A82D2A09DA063A633DFAD52CB47A627595DA742812345D8AD + E24496DB727092EED65B2A4852B6ABA741B8E49C7D950A0DF281CD274CEAED2A + 8473A1CF27143845658371D19A23E4AD3139D4311B545E0B6E7AC38415ED4470 + B2A482942B05C093D0E076AF07243E929B871A75C41D01C41B7C58B7B9CDAFD4 + 6EF086C6DF7120ACB6B47641290A208382538C648A9F0DD591BE3745F7D41648 + BA9AC372B44E6FC585708CE457DB3F8CDAD252A1F5826B8B9C4BF46571334BF1 + 21FB5DA556FB869A79F598F785BE1B0D359E81C6FDEDD8FE942874EE2BAEBC6C + D4FA934470FAF1A934E7C94B5DA21489F219BA36E2C3A86DA52F6A0A14304EDC + 64E475AE66C8F4C46AD9ADB9EB5C39B03AF630D2C49786CFA41CE7CBE157C7BB + D8AE4DBEE5FBE50F85C383FC2CB6E988CA52E1C26B697549DBE2BAA254B5E3CB + 2A2A3F5D4E951A72DFC47778AFC15D23A9E536D3370B95B999329A613B509716 + 904848F866A4BA4CBBF2323DB835DE22AFC3D0D7B563388AB3F9AA80DEE705CA + 5A8925B213D079F4AE80EBE478BA32F08C12151963A7D154B752E8D8B19F5361 + C0038842B27A63A66BC8F58938E58B5F1FEB3D7F449349AFBFE08E2ED3242ED3 + 251193ED29381D326A3087A5E4DDEE896DB1BA420A77E081B0E7CEA62BF31F21 + 4079C6543784FB0A3DB3DAB0FA22CE5AB34D94A49F5B93953AEE33BB1D463ECA + CFA6CEF1C3F93D24E09CB93FDD1F6136F74CF43E85252F96D655D82803D2B50D + 59735CABCDC587093B95918E8922B69D0115C9B639A1D75494AE528A09CE49FA + 2B63BD70B53758119D6886E5B60E14A1D17918EBF6D2DE48F896D8463B484CC6 + 298C858649483DC75AF569A608BA171D412D107A1F33838FCF59476D12EDD395 + 6C782912413D4E02079D65EC3A525A2E6CFAC496A3A09C92E754E0FD15B326A1 + 3850D8F637DD3A1C6E3BD295E2376F623F89BD23A6E1D719AD4ECBABA4BBAADA + BD38D87D80EEC4A8A4E00C1F3FA335B4710B595BED9A7DCB0468921A5A9AD9EB + 23A32BCF7CFD59FAEB4FBB5E2D32F4841B45B1A75831D616642540070EDC1F9E + B99096E4EC3FF2245E2AC46EE973B74C65E4BBE234970349EF8FA2B76D3F68B7 + B1A61F4AD45D0E33BB628E46F1D718EFE555EA0DCE52A304C97D4E0424368524 + E56067A60F6AB53C2ED35063E8E86B790E3AEBA3F08B70E4A0115932C631E0D1 + 964A30B3E1A43504455A602D2B4B6ADBED369EC4038FD3523BF2DB910DC5A4F8 + 4360EDD327CBF3D46FA6B45C7B729D4BD1D69DAB5EC513D36EEC8ADA5C92FF00 + 889C84B71074C2FB2AB8F349BA89CBC9152E51AA714624ABBF0FE63694308900 + A4656924F45827A8F9AAB3D9265CED12A5A84B7A1B8EE194ADB5042719F9EACC + 7102ED161C7B7B725C508AE384BDE1A804E3076F7F9F151D3B7C665DDD82C5B6 + 09B521D0DA9529A39512703AE3E38AE8E9B74214C7E9B7422D334D8EE25F118A + E5CEB9BAE15655BF294E3DEADF20C8F90E334A6D41B6D61252F38921480481D3 + EDAF91B2C5B45FE0DB5B7E332E3CB5A9C0D9010D82723AFCF5BF5FED90576F2C + 486D0B4A53B52AC6524791E9F3E299926FB0D9E457C9A6DD3C0BACB75975E2F1 + 28DA24B44EF04F4E847D358C92FB9A4E4AEE2DCD85F846043711209538A48EB9 + AC843D29F73B19D96C3EA7DC07294672939E9F9B39AD3F5469A9BAB1F5C453CC + 32C21217BF610ADD9EA2931A7C36554AFB183D4776B64C4B66CD11697CEE2F96 + FDD2707AE2B7FE14AA46A0D2ED34F1523C370A50E118DC7CC7D95AB5A786CEC6 + 43715BB8A487B207843DB3819207D952469980DE912CB0B904C46C6F4327DFDF + E75B32644D28240E6D2B332AB5C9B3DC19DC545B7BA0CF9D7F372652EF8C5C4E + E493B704742475AFE75BF112D56B87EB8F2C0776FB2D7880907E8A86EEBCC230 + 90B4222AD4950CA5455D0AB3D6918F459323B8995E777C9BA5F6E519EDAC3458 + 69C64FB49030AFAABCF2EE8F2A03ACBA308534A0147B7BA71505EABE3239704E + F662B319D27AAF2370EBF1AD6E47166F975532C2DFDAC15252427AE7A8F315DA + C1D372EF527D8C1AAD56C833A31CA4B6A6B49212B183D47C6AC0541FCAB4411B + 44C6DC72B280AFB454E15ED1764BE0F0B2929C9B4415CE1F33FF007A7F0D6D7A + B7EE6FEEA3D76EED5ABD53D7BD5366F65E73C4DFE1B99C7838C63F1B39E9D66D + 81399B9446A4C7712E34E24282927E233546BD317FB19F4D7F85B1BF81CCA95F + D1F1C558BC53E5AF4C3C891E34FB64745AE6A56E6F703CCA420959EF9527639D + 4F670536BCB62F779A8B26EB287DB287101683D0850CD523E7AB900B4F19ECB7 + 2D65A3A12626BD8D1F7EC6484A6E6103A36E03D37E3D94AFA1F7428ED036DDFA + 1191D7B556326B944CA2A4B93F3256AB849B35DA24D8ABF0A5C5790F34BDA15B + 5695029383D0F503A1AEA3FA5625197CB6F0ED655B88BE919FF8BB955024E8B5 + 6AFF00482DF2C76F61B53035F4E74B4956C488ECCC71D70248EDF836D58C7CD5 + 703D2B51150F96FE1EA0F637E2AFFABB9F0AD6DF28CAB84CE7E72C0A09E61387 + E0A10E055DD84ED706475563B7D7577BD2F36E442D1BC205F7756E5C772B3FD6 + C7E95483961FD90BC3DFEFD46FDD8ABD9E98AFE63B83BFDB2E3FB98F5597AD12 + 979594F79169F22DFCD46845C7756D15C8790B09510149F01C383F11900E3E6A + EA97A41797CD43CC5F02E044D3323FD57B5C84CE44353A50DCA4ECC292AEF923 + 394E7CEB94BC927ECA4D05FDD4EFEF0E5750F9EBE75DEE57B4A592CFA722C5B8 + EAFBCC62B6552C6F6A2B4001E229208C924F40703A79818A89DEE544C1ADAEC8 + 6BD1A1C0BD79C12D4378BA6A76D56B62EC84C64D9144297B90A3F85731900819 + 09C1390B5671D2AAF7A50483CE56AEC75FF4AC0FE0AD5495C8DF12F577319C78 + BA3DC41D4F77D431A2C33353674CA54684F3BBD081B996B62368CE76E304F706 + A1DF48A69D81A5B9ADD516FB6DB21D9E2A23C258890194B2D24AA33649094800 + 124927A75249A95EBE486FC8592F43A6B59AC5D35B69A2E1F93CA9898119E9E2 + 2C2904E3E86D3FFE8ACA7A66EFD7841E1ED992D2858961F94A787654818484FF + 008A735A47A1FBF9E46B3FEE789FBB72AF673C1CBA5AB98BE0F3B6D9535BB5DD + EDCEFACDB26B99294BD8C6C20770AEDE6479551BA98C49BC672B3D1C9FB282CD + FDC723F722A4BF4C18C7321A540E83EE422FF0B9758CE50F82FAC7803CC1DAEF + BAF74F4DB1D9DB69F8E272901C682D4001B8A09294919EA7E6ADF3D20FC32D53 + CCDF1F2C379E1FD965DE6C51AC112DCEDDD6D9663078C87D67DA5804801D4E48 + 070723C8D5ED6F17CECA305E88CD5972B5F16755D98341DB1CDB736FC852FAA5 + 0F21D096C0F9D4971CFF00147C2A5EF4CFA128D1FC304A404A44D9B800607B8D + 5487C8BF296381701C5CA784EBDDC54872E129B528340201D8DA01F24EE575C6 + 4EE39F2023DF4D17F323C30FEEE9BFBDB555BBC85E9AC6ECA1BC9FC2893F993D + 08CCD8E994C7AE95786B008DE96D6A41C1F82824FD557AB9E4F47F5FB8ABABA2 + F10B464B8EA9F718EC3172832D4500ADB4840792AEB8F6128494E3F173E66A8D + F267FB27340E7A0F5D57EF4BAFD015B1A43F688C97109524B63A11D3B54E4938 + B54571C54AD3397A787D71E44F94CD6D718171F13575ECB715D9ED82D16D4E1F + 0D286883DDB4A9C5839EA49F2E9546397B3FECF3C3B27A9FBA1807FEB08AEADF + A59F45AAEDCABB33E26C659B25F22CD75013EFA54971803ED781FAAB947CBE1C + 71DF877FE1040FE108AB45DC5B2B35B5D23A0DE978404709B853F1F5E959FF00 + 268A847D15BC639DA138E3234B2E462CD7F8E7C4656B2078C8EA8291DB241232 + 7CAA70F4BD67F913F0AB3DFD7A5FEF68AA6DC8A69C95A83998D2AE465148B72D + 739DC0FC448DBFA562AB1E71F25A5EBB2D97A6988373E1291D4166E7D7EB8D55 + 5BD1FDFB2BB45F5C7FB6BAFF00C55DAB41E99470B8BE0F150C2BD5AE5919CF9C + 5AABFE8FF19E6BB467FC6FF82BB52BE9912F593C7A61C7FB2BF0F8F9FDCEFF00 + DFAEA2AF46912399C8641C116D918FB5152AFA61FF009EBF0F7FC1EFFBF5D453 + E8D419E66A263FA9923F4A2A17D3225EA3A19E955EBCA0DD3FBE70BF7CAE32E8 + 477C1D6FA7DC284B811708EAD8B190AC389E847C2BB35E955FD88375FEF9C2FD + F2B8C5A2FF009B0B1FF7731FBE26AD8FD24CFBA3A93E945B734C728DA49F032B + 56A88C91E4123D5257415CDBE5FE63D6FE3A70F5F8EEAD97537F823736A29382 + FA01191E44120FCC6BA5DE94DFD879A3BFC298DFC125D732F819FCFAF407F7FE + 07F08454C3B04FD48EF9F17E4AE5F2E1AE9D70E56AD3370CFF00CD9CAFCEA9EE + 6BF44BC55FD8D3AE3FC19B87F0672BF3B47B9AA62F72F97D8EF7F2143FF264D0 + E7FF007547FDC5588AAF1C857EC63D0DFDEA8FFB8AB0F59E5EA6361E946035E9 + DBA36EE725204751C838AA8BAB59726F86E2101C616DA13BFCFDDAB6DC474173 + 42DF120804C55E0ABB76AA8F012A9288D15D52C7BA0EDEC3D935E33ADF134FED + FEB3D5F47928C5BFBFE08C38845943B6EB4994843606F7727AE31D3F3E2BEBA3 + D12373D1B79F56436A20246770DA7CEB70D6DA46DEC843CEB0D3EF9514EE503B + 80F2AC5E988688D9F0C143D9C16D241183D2B84B23A47AF693E4C470CED8D6E7 + 9125A7A3AD0F29C6D4E7BA52723352DC88A12DC65216971AE870923AE3AD60AD + B39CB6C971B94C36E282B0DA0A7BA6B291EF81E75D8EA31DB69209C0490479F4 + AA4F74BCC51AA311A9B4369AB94A72F8F4794B7C27DA682BD8E95E16AD369B8C + F6018E3C30D24A49EC067CEB6393257704B512227C46D632E380744A6BDF1B4D + C18A5C5C605C46C0929C609EBE59A5AC93F704E8D6B5DE8CB76A48B1E2224350 + C3683B4ABDD5F4F3A898E94BAE9C054D448F3586C93EE7422A739B6684A7D323 + 290F23DD6DCC9049E9D857926C9B75C202E3CA8F21975B3B3647E815D6B4473B + 8AA2CB976451A4ED364D61203CD30EC3951D60ADB49C209CFC3CEACC599FF538 + 8DB681B17B000DFC00AD1F4F6826ECC80B891501B7C83D46E77BE7A62A428B0C + B3BBC4C216947627AF6ACD9B26F62F3C9CD6D67C85F95295B8A125B49DA40E84 + F95691C59E249D330D10E2B8CBF31406124FB9D4673F566BE9AEF5D46D0D6E32 + 5A8C1F7D4086C1EC547A7EBCD57C72E53F55BE5E7A1176E7217EDAB19C27BF6A + AE9F4EE72DC8AE382AB3E3A83575DB5038F225AD4B6B1B928CFB1D3AFEAADAE7 + 3F0ACBA76D4FB2B7A427C2F1DE69E57407CB1F5E2B5E5C1B75AAE8D437E5A64B + EE25414B6D40A1A3B4E01C7CFD2BD7628726F32A2C59090DC44A94D9757D51B5 + 20AB1F9ABB3971C60BEE6BDADAB4481C3ED191F88F61917BBC05C48EAC6C5215 + B547072307CBB79D48D6E9564D3F6965969A97794B87624A0EF29C7C456034FE + ABB63D1E3DAE3B6531228214C471BBC6383E43EDACCC2BB3E10E2AD76F7ED2C8 + E8A4BAD8EBF3E7CAB90DCE52A68C192AFCCCFEE64D43C95C78F09E68AF070B09 + F671D7B039F2AD4752EB4B059CA5B75C6D324821CC10950E9F3D681C65E2C8D2 + 5714B16875E7EE2B07C5710E0211F1F3AAE770BDCED4D7171E794644870F449C + 939FA2BADA7E9B2D42F16E90A79563548B2372E37592D105286007DC49EAA460 + 2D3F41A8F3557196EBA85C2C5B12194AC603BFD113F41ED5A35B7435C1DC3920 + 351D048CEF07A0A9460F0EAD96C80CBEC3A6549233EC7BA3E35BDE1C1A77576C + BE29CB2AE51174B4DD24202A63EE4A59392544E457898B04EB9C92D31BF67E28 + 524E0D49B798C994E25086835B3B93D2BD8C4B90A4350E3434EE5F40E8181F6D + 5DEA6B949169E9A37CB2354F09AF13565186DB3DCA9C4F415B3D9B84F02D610F + 4B53AA92D9DC0A7F95FD62A6FB0E9B459EDAD3D35689925DEBB413ECFDBD2BC9 + AAE3B6A657E06C4A76125208CF6A547A86594D2464CFA786C69969796B5A4693 + 88949CE53D3E8C54CF50372A2F29FD26D15FE2A309A9E6BD7C1DC533C0CD2536 + 9144BD317FB19F4D7F85B1BF81CCAA8BCA8EB6E2B72568B5F1026E97977AE15E + A561A7AEB1A210B5B2D12A0DC803FA1AC270A055F835A5C4A4A82882DF60B881 + C3AD39C4FB01B46A6B1DB2FD092E07DA62EB0DB94DB6E80521C4A56080A014A1 + 91D70A23CEBCF69E1CDBA15B9C8D250994A73DE591D6B5466946999E506DD91F + E8CE75381FAE2C6C5D21F13B4E406DD1D63DE27B7024367B14A9B78A54307CF0 + 41EE09183516F329E913D07C3DD3D22CBC38BB45E21F10EE294C6B5C2B19F5C8 + EDBAE129438B7500A1783D9A412B5129184856E1B17107900E146B998A912747 + 5A94B5385D52E32150D6B51CE4AD4C290559273D49C9EB59DE1AF297A538641A + 3A7B4DD96C0F21A31FD722454996A6CE32953EADCE281C0CE54724026A3C9DC9 + 7BCAC9C8BF28D76D117093ABF581764EBABD0529EF15D2EAA234B505AC2D59F6 + 9D5A802A51CE30003EFEEF67A62971A3706342DBDB79BF1DBBD6FF0004286FD9 + E03A376DEF8C83D6AFE58B4FC5D3F17C18C8EA7DE591D546B11AD7867A6F5E20 + AEEF63B5DC25F861A4C99B09B79C4A0124242949240C92703E27E346FF0036E6 + 1B3CB47E7F796879B8BC7FD00EBCB4B4D22F31CA96B3B5291BC7524D5E8F4C1C + F8B2B4A7081966434F3A854F5A9B42C15241447C1207607CAAEDA7954D109567 + E41B3E739EB6E64E3F6B5B4DF782BA5F51406D99F61B3CB7D2D86BD65F80D2DC + D89184A7714E700761D855DCD3699450693470D392E90D42E677423D21D44765 + 325DDCE3AA094A7F00E7726AD77A5978277A9D7DD2DC51B5479172B03B6B6E04 + C798095B514A49536AE8738585ABDAC63A0EBD6AFAA3957D128712B160B36E07 + 23FD4E6BE39FE96A4C3A4A0C9D309B14A8CC396F434184301B01B4200C252138 + C0007402A1E4F35A058F8A671AFD175A9ACBA738F539BBB4E6A13D32DC598DEB + 0A0942C8712B5024F4076A49FB6B1FE942B6CBFBEC7505DFD55EF92E7468822C + DD87C17F6474217B17D95B54920E0F422BA663923E1D41D546FF000B4A59D371 + F13C5F194C0EFDBA27DDFCD5256B4E0B58B88BA5DBB26A2810EE509A4EC6E3BA + C24B681F374E9F554EF5BB711E1BAA396FE89FD5B66D31C47D50DDCEE4C44953 + 1B88DC48AB24BD29616E652DA002564129181D7DA181560B9D6E76EF9CBBF32F + A5A3274E2EEF6481675C85C07E4F80879F7CE038140286F6C2149EC461C57CC6 + ACCF0D395BD33C2A92AFB9AB641B2B255B94A88DE16AFAFBFE7F2AAFBE93AE17 + 70F755E9AD30BBCDE26C4D7EA5391EC70AD90D53665C49C1536184904A73B7DA + C80091DC9C12D4A564D350A21877D2EB6992A52DFE0D975E51CA9DFBA300E73F + DCB5EA67D2F7699CFC666E7C259061255EDA9BD4016A4A7E212632771F98A87D + 3D2ABD593D1C7C5CBB5B5326422CD699273BA04C98A53C8C123AF8485A3CB3EF + 798F3E95EF6FD19FC57712B3EBDA751B4765497F2AFA3F014CA80BB99D40E56B + 9C9E18F324D49B769372459EFB15BF15EB25D1B4B720B7D8B88DAA525C483807 + 69C8C8C84E466ABFA66AE5125E9BE1BC662532F496274DF1596DC0A5B7F836BD + E03A8FAEAA6702741EBBE5D39C4E1FDBEE56C544BC09E82929505B6F467029B7 + 1C428770105CF9C104100F4AED0DFB84FA4F5E45F5D99A6ECCFCB969DEF4A7ED + ECADD59C6325452493F49F2A534A124C626E71699C2AE4F64350F994D08F3EE2 + 1865135454E38A0948FC12FB935FA06B13EDC9B24075A712EB4B610A4AD07214 + 368C10477A899BE55F44216951D3F66560E71F2735D7F6B52CD8ED4DD8ED5160 + 3096DA8F19B4B4D34D20210842461290074000E981F0AACE4A45A10DA61789FC + 3DB5F15B87F7ED257A643D6EBB44722B830329DC301493E4A07041F222B876CF + 2FFAA7976E6BB4558B53C65B1199D490FD5AEA50511E534242085A547A038EE9 + 27A7D1D4F7B2B53D7DC33B17116DEA8B78811E6248C61E6C2863EBFD22A213A2 + 650DDC9CFDF4B7B427F0CF851122A9322699D20222B432EAC29B48CA52339191 + 8FA48AF9FA3AF959BAE81439A9B50C27225FAE8021A88F2005468E0E7DACF50A + 51C1C74E83AD5DAB6F002C368095C6B64633520A44E90A5BEF246EC909538545 + 033D7A56FDA6F4AC4D36C6D65214E9F79C3DEADBFCB446CF35B2877A5F784172 + D4BC32D1FACAD8C3F2DAD3521D8B2DB693BBC361F08FC2ABA760B6909FFE3EDD + 3239EDCA26BFB2F0C3980D31A8F50BEE46B54453C975C6D853CA056CAD09F612 + 093D543B03F457E82EE76D8F7780FC296D21F8CFA0A1C6D690A4A81F883DEA01 + 85C96E81D3FAB1DD4166D376A8771714A529F4B03764904E01E83A807A54C722 + 4A995941B95A39F7E956BBC8D67ABF87FA99986E46B149B41620392D0E3325F0 + 17B94B5B2B4852139574DD851EB903A546DE8E09D1EDBCCA447A53ED456BE4D9 + 09DEF2C2139CA3A64D765AFBC18D3DAA6D6D46BD5BE1DDDE6861B7674643BE18 + F827703815ABC7E56744C7790E0D3F66514A82B06DCD63F7346F5B688F0DDD90 + D7A556E90FEF50B94232D8F5D5DC612D31FC41E214F89DC2739C7CF5C6BD1A76 + 6AEB2295ECA44E60927B0FC20AFD196A2E1969FD56D21577B15A2E7343619F59 + 9905A75610338485292481D4F4F9CD6887956D13924582CC3273D2DACFF9B446 + 6A2A8B4A0DBB2A97A51EE70E4F289A2D86A532EBCBD4B19E4B687015291EA92C + 6E03CC67A67B5734B822E258E33E8371C506DB45FA0A94B51C0481211924D7E8 + 11FE0B69699618F6C9560B44B4C668311D6FC0697E0B79276A729F64649381D3 + A9AD4C72A7A201CFC8367F8FFB9CD7F9B531C8A2A825072767AB8B17CB6A3963 + D60EAA7C54B5234DDC10CACBC9DAEABD5DCE8939EA7E615F9E820E4F435FA486 + 3861601A621D924D92D3320C2C98B19F84DAD960924929494E06727B0AD2E5F2 + BBA265CA53C74F595009CED45B9903E8C6CA884D4499C1CA8D4F902B84695CB5 + 68D61990D3AF316B8C1D6D0B0A52328E9B80EDD8F7F8558FAD2B87BC2DB470D4 + 48459604180DC9C78DEA9190D1736E76EE290338C9EFF1ADD6932E5D978AA546 + 075DB064E8FBB343DE5B0A48FA4D40568D3AC8F0FD8CA80415123B6075AB0BAA + 97E1E9F9AAC818479FD22A1B430E04890CA82C6CF7479D78DEB5CE44BEDFEB3D + 0F4EE22DFDFF000469C42D2D21F056DE47B794E3AF4A8EA05B5DB65D545D52D0 + B3EEA87C71560E5296FB690EB7B5C190323351C6ACD312E09764A8EF49F68015 + E69499EB70E5B7B59ABDCED4BD42036CC85B17103D951248E9D7CAB4AF90F5CC + 6B8069B5C4CEEDA54A049DA7A7E8ADC61DC4C675A7C2B6AC1C28F6C7956CAC4C + 7234DCA02DF5A91E275ED8EFDE98B234A8DD91453460AC56C9DEA0B79B92E264 + 36EF86E241DA838F98F7A932D8526D8DA9CDA878FB215904FCFD2A20D493EF2F + CF44DB7A434DB6A2E142BDD52B18EA2A46B1EA06751DB1B717222A5D4B290EA5 + A385B6BC8F2A5B7625D7B1F57ECCD37710EB6A53EA47B6AE8401F6D78AF210AB + 489259282B7463C3EAA3D6B2CF5CA1426D2B6A5A1D73042D25D4E7B7C3351DEA + 2E22B16B095A55E3785B8A5B477CE0FE8EFF0055536EE95168F62414EB26B4DB + 31BC429502318CE1C1918158F9F3DDBA9F15996A0E39DD1BC6F03E6A86237106 + 35D58F94A5B894BC85FB6B50EE3B002BC175E34B6B9454CB0F96D92925C6801D + 323CEB47E8F237C149C6D998E3BDC936F62D0CA4BA5D2A20AD7D810335127DDE + 5CA338EFAB492DB8A1B14FB430540F4207D5595E24F18236BC8AC45540290DAF + 295EF1BC8A8E9FBB4661B221C57BC6F252BA81F1AF45A2D34B1C36BF914F22C6 + A8D96E9291608495C8012978152024E54B57CF8AFB49E374D8F65896D80D23C2 + 6D395AD43A951AD420D96E3A84B9225BCA4B0D8F63776AFE2D5A3644894B0B51 + 2D249CABCBEDAEBF83812B9F73064CD9E52A8AE0DCF4B73037FD26F9718896D9 + 009C9F19A2A359EBE736BAB6ED0D71D98B6B8285A76A9E69ADAA4FD1D7EAAD25 + 9E1FADD24B3B8A867A94E4564F4C707255E9D5F8CE214D8392903E1D7F552251 + D2A8B97B95587513971D8C1698B3CDD613DD9329C5F84A512E388EAA593DB1F5 + E2A65D2BC3762D308489296D2C647B5B70FF007F23FA7E6CD7A2CDA45D622B71 + 6325A6100819C104E3E7AD96269E98971E66E03C4013F82752B3815C2CDAA6E5 + 51748EB62D36C5E7EE79A559A3788B545417929006D7BDA1D7A7956305BDD4C7 + 7A4B6EE108596FF03D81F318EF5F55DBAED6A7169873025D5E410B1B8015F1B5 + 3F2E2C59169212B716ADE5D48F694A3F0AC4E519BDD26687517C231A887016DA + D5214E3AEA88C249C67AF5ACD69C7DA8B316AF60464FB892324D6B33346498ED + B9233216FA578DBDF049C76FAEB69D37A4A47AB054A0E3408CE542A6538BE2CA + CDEF76CCE4C9C9237A5FC23EBE95AC5CDE6990F292B538B52158575C0E86B3FF + 0020998957B64251F0F3AC0DE6DE5B42D08F68849EFD28C35BD519B341786D96 + BB946255A35B2AEE062A7FA807946FE6347F646A7EAFA1C3D11FE0F9964FA921 + 4A52AE505294A005294A005294A005294A005294A005519E6F783FA96C7CCFF0 + F78D56D66E379B05B11EA772890925E7618295A3C56DA1D549C39956D04FB39C + 1ABCD5F1971199CC2997DB4B8DABB850ABC5B44356A8D4B8773F4AEAAD350EEB + 629D06F111E4058951DD4BA32476241E87E20F6ACC5EAF160D3EDA55707A2462 + BC86DA5005C74FF4A840F6967E64826B5CD41C16D2BA9B6A6EDA76C97C6D2772 + 5176B7352424FCDBD2AC56534EE81B76958498567B6DB2C91123019B6C36D940 + 1F3250902A6C1264097CE09A3887C7E81C529F00DB3E4F81F24D8EDEB6CA5F52 + 54A517253E93EE1216A4A53DF69CAB04E059E83184386CB00E76240CD7CE2DB1 + A8CB2E7575D3DDC59C9AF5D0DD90950A5294B2C294A500294A500294A500294A + 500294A500294A500294A500294A50061759A928D2F7152FDC4B5B8FD00D4536 + D094C36C01B55D539CE7A8C13FA6A4AE26BC63F0FF00503A06E2986E1007D150 + 0E93D64CC88C9641C8751BC2CE7A13B7F88D792EB4AA4A5F6FF59E87A745BC6D + AF9FC1B8CC82F83BB72719F88AC75DED8BB8475B2B50248DB8FA6BE0DCF74C9F + 0DB73C504E48CF6AD8ED90038FF8EB57D44F7AF25B99D872943CC45323844A72 + 5B496DE050D2F77B43A107BFD82B6563872988B5A83EA505109C818484FD1527 + 46B7894F2CB48E87F1ABD4EDA17E0293DD5E4314394AAD165AC72F59114FE1F3 + 125E7192AF61092404E01271D3F3D47772E14DD6E0E25F8321105C4AF0E390B2 + 85AC76EF8AB17234C17D1B8AB63A7B8CD63B502E3E9EB5AB0A2DB8D23C4596B0 + 57B7CF148597237543F1EA377088465F0625C1611211707D6A09CAC3CF95E7A7 + C315A35E786CE5BA24C9CFC86DD696DA89C1F7303F356EFA8B983B4B897530E3 + 4D71D40C05A969083E5D7AF4A87B5C6B7BCDF6DAB67C12D32B077223FBB8FEB8 + D74F041B96E3A11DFF001C119DB2C73EEF1A4356FDCF0F13A0292411B87956FB + 6BD0931FB64982FC35A54E246E52505206083E7F4564780D3A340BE2AD325487 + 172523C270F749EF8FD5539B16B7A15D253CF603493B02493D4D6FCFA89E392A + 468DB17DCAD13B84EAB7C7019610EAB3951DBED8FA2BCCDE9B8AC29A48692144 + E09574C7C7BD4F7A99952D7907C34AD5B029033D7E15EB621166D4A8CEDB6049 + 46DDCE296DFE100EFD0D57F5F92A986CC776411728DE1C736C80D21C6C81F860 + 9CA4FC6BED074D14458F11390A1925450769E9E7527A349B4C237C75B6DB2FFB + 4D343F13E35F1718F0169492168070ADA30695FAB95558F5084B948D3A158A53 + 8EA5090E32067DB48C2718AD86D6D31684A51112B0F38704A8F43F1FCD9ACDCD + 2861A436DB8A2A5FF43C649AF569CD3E89EB744869C094F54FB26B2CF3B7EE3A + D2E0F8B4F2E24A694908527FAE4E466BF9D42F495CD4A565480E0F6423DD3D2B + D77584843DB4BBE12500E100FB47A5639B5ED8895788B71F493EF9E82937BB91 + 52767DBE4F6A24065730A92E28FB5B4E4FCDD6B73B4E99B71B5098CB0953F8C9 + 594E542B44811244B77129D25A51F2EBF4548365BA2AD519705921C514F53DF1 + 4A92E444BB9AE5CD80E4B75236B6D14E4AD408015FA6BE36A49948719714D9F8 + 14A8D7875219720C95FAC018EBB3B5602C825021DF115B15920E69908DA2866A + E6DFC9C54E256A0D1E84A4E0D609E71C9D16586D9DC94A09538A1D47D75B14A7 + E3CE88862602000494A7B9C751F9C5787C2C5A6429A5ADB6CA140B6AFC6E95BF + 02A92179BE932C3728BD34627FB3353FD401CA41C68C40F3F115FA0D4FF5F458 + 7A23FC1F2EC9F525FC8A5295728294A500294A500294A500294A500294A50029 + 4A500294A500294A500294A500294A500294A500294A500294A500294A500294 + A500294A500294A5006B1C4D5251C3FBF15FBBEA8BCFD18AAA5C3228951DF380 + F488CB082C248CEDC60FD99156A78AEDA9EE1AEA54273B8C07718F8ED38AA43A + 56FB2B44EA489BB608D311B96E7E30240C75F2ED5E5FAC477349FC7E4F5BD1D2 + 78A49FCFF88B2B6C8515A65C7DB8E42881952BA63EAAC8C209796144FE081F68 + 76AF85AA78BDD892B8CE32F367016A4104823AF715E28125D91352DE0A101452 + 7E720578E51B36E5B69D9245B222584A0B4E8008F748F9ABECF3AB49242C2F1E + 5DABCD063295190A4ABA247527A57D5961A5255E23A0FC46698934A91C19F2CF + 8B6CA663A3AF5EBECF6A87B8AAFB835E5BADD1D5B1A90CFB6547A6D1DFF8AA6A + 73C04290A092DAD27A7CF51DEADD29F2B712EC929C6C94351561431D0939C0A2 + 38D2E59AB4B2719591C6BBE15427ADE972345851B6A14A56D6CA52B0013957E9 + AAC1799EE5A4391D92B5B8EA8B692DF540CF4EDDFCEACEF1D353B4D990C21C79 + 8311B536B40384E48C0FA7BD41FC2BB65926872FD7A9495C588B3B230580B715 + E400F98F5FAABA586548F658B33943947CA3F0D17A1F48D9F50B4A5BB7832029 + E23AF868CFEBCE3EBA9B34DDE6F9AD6229366B626330A482E3D756D5B56AF9B0 + 3350D6A2D613F5C3F2DE65D4DBA034E6D6620E81783D323BF7C558CE5EF52AF5 + 3E8E48949025425968A50AE99EDD479FD354D4BDFE7663D44DE3568C02F83E13 + 706E6DCEE9297B30B31E36030547A1C83D7A6735919765F54448F05490CA8040 + 52939560900D4877665725D5C7D981E6723A79D6BD756550E3292B47B27A83DF + B1CFEAAE0CB236C5432CA4AD9A7C6D35062C5FC232A76436BC85760135AAEA4D + 1AFCA96EC98ABF0D0E63281F8BD6A5D5BAD5D2CCDBA86D2951E87C89C1AC34E6 + 5A84C871E412938C04F73429B66DC5964A2476CE920CA1A5CB4B892923F083A6 + 3EBADB61C584C4C65B8CF3CB6D430A5EE181D2BED73BB34F470969054823DC70 + 74358180E21943886095BAE286327D91D727A7D1436D969E46D59F5D5F62696F + A0B2C6E27FA2F98FAEB5A7EC186D3E1A56777C106A594C56E5DA92B0145C0076 + E89FCF5AD5C24CA8AF2DBE9EAC074DA3AD5E3371542B1E693746A8842ADB1490 + 9C383B6EFCFF009ABC5659A9B7EA17945EF11D713B8157400115994C59375277 + ED4344F52AF7B1E7F9AB55BEA3E4DBB21D4A01009432C9EBD08233D3E9A747CE + AD9A5BB327A890268714846545272B4F6AD43D6DD8A434C7B8848055F039ADB1 + 4FA9AB4B697595B4B4F5049C24E7E35AB4E770E2B6202B77C2B4E35EC4A56659 + 9485B4DBAE0CA88E8A0735F39D7667D49D654A4B6B6D0ACA7CFB1AC0499EF426 + 9B6D454A49C93B14322BC4BB8B0603EB736A5C2850255D55DB03B56FC70A9AA1 + 59D56365B2E5246747B5FD9295F560D580A8039483FEB39AFA3153FD7D0609A8 + 46FE0F9664FA92FE45294AB1414A528014AE5EFA49A0F183972E21DA389DA178 + 8BAAE0E89BACC6C39017A85F7E3C3B982B77C34C57145263B886F706C85A014B + A921082DA0E2B8FF00E909D59CCFD93879C3EE02337DB2EAFD45F84BDC78396E + 6477D2AF623332C29386C6C71D71D0103C3F0F72903C66C35636E9A16E695A67 + 55E95CEEE7CADBABF95BE4CF4740B17137594FD4AAD511D171D4F22F7244D98A + 5C4925690AF1096D9CA11B590768DA09DCBDCB5437A27835C75D77C9E48E39C0 + E64B5932FB16E9D73569F93729A9496A23CEA1D0240924EE28656A48F0F05442 + 49032B0285ABB073A75475D6954AFD197CDB6B2E663486ADB6EB9F027DEB4CBD + 188BD32DA1954C6A4178A52E348484254D9648DC900292A4829CA4A97637992B + ACDB172EFC50B95B65BF6FB8C3D2F73911A5C570B6EB0EA22B8A42D0B49052A4 + 900820E4100D51C5A7B5964D35648F4AE3B7A36F9C5D748E632DFA4B5CEB5BB6 + A3B06A96570507515DD4F2624B4A4AD85B6A7B71DCB295321B4A93BD4F233B8A + 102B29E934E73753AF8E2D68AE1D6AFBB69EB76946551EE12EC17272319739CD + AA750A5B2EE169682508C2929521CF1D27CA99E1BDDB4A788AACEBAD2AAA7259 + C656ACDC88696E21712B55BEE311599EFDC6FB7B94E4875494CF7D080A5A8A96 + B560210848CA89DA94824815A1DD3D30DC13B7DCE5C68F66D65738EC3CB6913A + 2DBE38664242880E2039212B09501901694AB07A80722A9B1DB48BEE556CBCF4 + A8935BF343A1B46F2FAF719A3CB7F53689432C3E87AC894B8EBA975F430004B8 + A461495AF0B4ACA5492950202814D57DFF0045EB81DF72FF002AFA9EABF5DF5C + F56F917E4D6BD6BC3D9BBD63778DE0F879F631E26FCFE26DF6A85193EC81C92E + ECBBB4A893487341A1B5F700AE7C5DD3F2DFB9E9BB65BA4DC26C56509F5D8CA6 + 1A2EBD19C6CA804BC903B156D3B92A0A285254743E0D73F9C3EE38685E23EABB + 159F5244B7683B70B9DC9AB846610EBCD16DF730C843CA0A5623AFA28A464A7A + F7C46D64EE4597A540DCADF395A2F9B6FBA5FB90B65F6DDF207AB7AD7CB4C32D + 6FF1FC5D9B3C375CCE3C156738EE319EB89E6A1A69D304EF94294A5412294A50 + 0294A500294A500294A500294A500294A500294A5006075DA3C4D1D7841190A8 + CB49FA08AA8970D3312E311E8786D5236A437B8F6E991F9EADFEB48EE4BD2776 + 659197571D6940F8AB1D07DB549A6DECE9DB9AD17561C6969202D49F6B181FD6 + E7CEB87D474F2CCEE3F077FA7678E1836DFB990B16A5D43C342C5BA7C45BF6EF + 7CC98682129FECAA66D29AA1AB9418CFB2B8E1A7145654A58C80474EBF4E2A2F + 83C74E1E26198F7CBE3F1D246C5B6B84FB8920F43EEB66A3ABDF10787B6E79C5 + E99D62EC5677E531DC852C003E390D1AF28F459E2EB6367565A9C59179A49174 + E0C97E4B4A08701481D723D9FB6BE4FEA3B4C47C32F488A873CD45C0923EDAAB + 3A6B8DFA063C46D778E22DD5D91E6CB0C4C2D7D60B2335B943E3DF01D0905EBE + 29F7F1FCB9FB64C511FF0045578E9F3C552C6CE6CE5A784AB75FF04D53B8A5A6 + E3A92DCC9B19948E9BBC618FB7B0AC5DE3891A74C03259B934EA8E705A792484 + 8EBDF3508DD38AFC03BC2D5E3EA379B07FDEAD72C7FDCD69772D51C1D9D24B49 + E21DCDAB66E196116F95850CF6FE52287A7D43FF00D6C662CDA58F36CC6F18EE + 32757EA57DBB0BCBB9879BDEB6A37E1979CF6C27269A7B8497F5DB9B6A458DD8 + 65B6FC525E6168EA7B64918A96348F1C7805A350916CBAA23BE93B4C85DA2592 + B1F1386B35B24CE6C783F2D95EED4A03AA504EE4DA660F673FDAE991D3EA231E + 31B37FEEB8A1C47B1A5E8BE0E263479F7ABCBB1DF8ECC3594B4D8DBB17B48ACC + F0D25AB4EDFEDF2E02A3FC99758C5A7191EF25690559FCD5EA47339C1C69F798 + 46A2DD01D1871B72D730A57F5785580BAF1E782698CA6A25E5C002BF0662DBA5 + 20A3CF232D0ACD3C5AA9AAF0990F5F8F3AF33268B8CF4B296C24A54F3FDC67A8 + F3AC4DD3470BA21878CB7D0E039F0C2BD9350CDB3997D090E4786ABF95C727DA + 75DB7C92E11E58FC1F4EB8ADC3EFAFE1686523EE916481DBE4D97FFF001573DE + 83537C63647EAF1C784CCD5C63C1B2A1F5B6FAD4E23A6D27201F3E9E75849F7E + 79E5C64BAC91849500474208EF5A6CCE62386931609BC389714F1529C3064901 + 3F47875E8FBE63876C3636DDC3EA41DA90AB7C9C14FF0093AB4743A9F7C6CD18 + F5B8D2E59B17AC7AE16C784521215BB03B7435F2D37604DCAE0CA90BF612A255 + E5E46B553CC0F0DA4AD4E397E7985107D96E049C7EF75F4B5F319C3CB1361B8D + 7B2E851CA96AB7C9DC3FE8EADFA1D47FD6CB4B5F8FB5937784DA5B75A48C3490 + 024E3B9CD6BD7AB7A0C27A42405049DB9F9EB4A739A4E1D2E3A922FCB0A23FA9 + F27BF97F43AF223996E1CAE3069CBF28823242ADF248DDFE4E8FD0EA3FEB62E1 + ADC49F73F9BADE531DBF063F57067200ED5ABCB65E425A90FB8572B3F83707E2 + 67FF000C8AFE6FFC6DE1FCA709897A0927F1C5BE4823FE8EB4DBBF16B4D3BE08 + 8777504A540AF7447BAFED29D8F49A85C3C6CE8AD6616B99A465EFD3A6BA95A1 + C756BD98CA770F8D79E1CD21AC21A517FC891D3E7FCD9AD66E3C47B1AEE46435 + 784B8823AA4C37F07F6958FBBF106D32168F57BB3A3E21B8CEA47E74D7461A1C + AB9DAD0D8EAF057D446C37D4A5C5EC657E1EEF7C28E0D6A6A5F86F2925DC8F85 + 7CA66ADB5CD6FDAB8A8280E998EEEE3F5EDAFE74D5B266A0B935E1B2B5B255D1 + 58C647D75D3D3E9726E4E48C9ABD76358DA84932F77294D291A359DC31DFF454 + FD51372F361167D30849053848C0352CD7AB4DB493F63E7926DC9B6294A5040A + 5294014D7D273CC5693E18F01AF7A12588378D61AB627ABC2B3C960480CB2560 + 2A6389DC3C3D9B545A5F53E3210529506D653CE5E59B555EB91AE6834C5CB895 + A2FE4B6A6C469120DEE2AC3F0214BDB99B1F6A54A0E213B92A48495603EC9095 + 956DEA6EB2E40F87FC4CE3935C50D6F78D49ACEE2CBC1C66C97892C2ED6DB49C + 96A38650CA4F8282776C2A216725CF137AF76D1CCFF281A179B2B5D862EB076E + B05FB23CEB90E6D9E4A5A752971290E3642D0B414A8A1B3D53B816C60805414F + 8CA296D1328C9BB2B97A5FAEB0AFDCA868DB95B65B170B74CD510E4469715C4B + 8D3ED2E14B521685A490A4A8104107041CD40DCBCF0039A4E34728F67B368FE2 + 5E9BB2F0AEF2CCB8ED5965294C4A0D7ADBA1F42DD6E229CDAB712E6407485216 + 527D9253577B54F219A475BF00AC3C22BF6B1D6574D3762B8A2E16E952264654 + D6128696D223073D5F05948757B4149527A242821294896F817C1AB2F2FDC2DB + 2E82D3D2674CB3DA7C6F01EB93885BEAF15E5BCADCA421093ED38A03091D00EF + DEA37A51A44ED6E56CD0B93CE52ECBCA3F0F26D8615CBEE82F1729665DC6F4E4 + 34465BF81B5A6929054A0DA139212A5ABDA71D50C6FDA368E69FF6327173FC11 + BB7F0376A51AC0EBFD1B0B88DA1751694B93AFB16EBEDBA45B24BB15412EA1A7 + 9B536B282A040500A3824119C7434BBB76C6552A4715F859C05D4DC4EE4691AD + B42A6EB2359687D7F2644489660E2A538D3F1ADC952D843485385E6DC6D85821 + 4909425D5752134E29F0175370C791A5EB6D749BAC7D65AE35FC6912E25E4389 + 94DB4C46B8A52B7D0EA12E079C71C7D649528290A695D095575AF968E5A34C72 + AFA167694D293AEB70B74CB8AEE6E3B7875B71D0EADB6DB2016DB40DB8693D31 + 9C93D7E0E65F968D31CD468583A5355CEBADBEDD0EE28B9B6ED9DD6DB74BA86D + C6C025C6D636E1D574C672075F8BBC4E7EC27C3E0E6DF11FE5AFF41E385DF25F + AF7A8FDD13DF2AFAA6FF000FD5BD72E1B7C7DBD3C3F1FD5F1BBA6FF0FF001B6D + 64B93FE5E6F5CCEF2A137465938ED6FB069F725937FD1AC6928AEC88EFF8FE23 + 2E3B277B6F39BC32D292E67184784090D148E8E70CB970D17C34E08DBB851EA5 + F753A421789FE96D48D332FC7DF21523F0A9F0C215B5C5653ECF4DA9F319AAE9 + A9BD10DC0EBEDF24CF81335669B8AF6DD96CB65C9B547670900ED2FB2E387241 + 51DCB3D547181800DEB941B1F0C8B389BC06B2F2E7E8D5E34E90B2EBD83C400D + EA28EECC9905A435EA7244BB7B4E45710975CDAE23C20482411BC0291DCC35C2 + 148FF42278D87033F75D1FAFFF0036D55D116B91BE1A5BF973BC705ED68BB5A7 + 4BDE1E6255C25C799BE6C892DA985178ADD4AD0952CC66F704A023BED4A7358B + D37C81F0FB4C72E5AA382F16F1A91CD2FA8AE28B9CA96F4960CD43A9547500DA + C32101398ADF42827AABAF51814D57FF0049707FD154F913FF00CD91CC0FFCBF + FF00D9D8A8BBD1E4A03964E6FB240FF5A29FE0772AE97F2FBCA968BE5D38637A + D03665CED41A76F12DE97358D445993E2F8ACB6CB8D29296D0953650D0052527 + 3956720E04231BD123C098F74BECA527523EC5C597DB8F09CB980D5B14E2B287 + 1829405A94D8E890F29D491EF859EB46F8F21B5F041FE84AFF00D71FFC8FFF00 + E6D750EA06E56F935D17CA4FDD2FDC85CEFB71F97FD5BD6BE5A7D9776781E2EC + D9E1B4DE33E32B39CF618C75CCF34B9B5295A2F0551A6294A52CB8A529400A52 + 9400A529400A529400A529400A529400A529401F390C890CADB3D943151C5F38 + 1F69BDC871E79B4952CF5E94A55E2E88B6BB1AACDE5534F4D7095B0820FCC2BC + AAE50F4D1491E023EC14A5129C976E03629F323E7F7A069BFC9D1F60A7DE81A6 + FF002747D8294AAF893F921C547843EF40D37F93A3EC14FBD034DFE4E8FB0529 + 47893F92C90FBD034DFE4E8FB053EF40D37F93A3EC14A54F8B3AAB21AA1F7A06 + 9BFC9D1F60A7DE81A6FF002747D8294AAC6725EE2DFD98FBD034DFE4E8FB053E + F40D37F93A3EC14A53565922C9B5EE3EF40D37F93A3EC14FBD034DFE4E8FB052 + 950F2C98393F91F7A069BFC9D1F60A7DE81A6FF2747D8294AAF8922ADB7EE3EF + 40D37F93A3EC14FBD034DFE4E8FB052947892215A7DC7DE81A6FF2747D829F7A + 069BFC9D1F60A52AAE72BBB34A4A7CC87DE81A6FF2747D82BFD4F283A6C281F5 + 747D8294A66E73E6459422BD8FA7DE8DA691D4474123CB02B61B0F2F365B2ED2 + 88C8494F6E8294A2EBD85CBCAF824EB3DA1BB347430C3612D81DC57BE94AA5D8 + 376294A5410294A500294A500294A500294A500294A500294A500294A500294A + 500294A500294A500294A500294A500294A500294A500294A500294A500294A5 + 007FFFD9} + end + object Label1: TLabel + Left = 40 + Top = 192 + Width = 377 + Height = 57 + AutoSize = False + Caption = + 'XP Menu is a none-visual component that changes the visual aspec' + + 'ts of menus, toolbars and many other controls to nearly the same' + + ' look and feel of MS Office XP. No code required, you do not hav' + + 'e to reconstruct menus or toolbars using controls other than tho' + + 'se shipped with Delphi.' + Color = clGray + Font.Charset = DEFAULT_CHARSET + Font.Color = clSilver + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentColor = False + ParentFont = False + WordWrap = True + end + object Label2: TLabel + Left = 48 + Top = 160 + Width = 218 + Height = 13 + Caption = 'TUCXpStyle component is based in TXPMenu' + Font.Charset = DEFAULT_CHARSET + Font.Color = clSilver + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 40 + Top = 264 + Width = 236 + Height = 13 + Cursor = crHandPoint + Caption = 'Author: Khaled Shagrouni khaled@shagrouni.com' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWhite + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + OnClick = Label3Click + end + object Label4: TLabel + Left = 40 + Top = 288 + Width = 274 + Height = 13 + Cursor = crHandPoint + Caption = 'http://www.shagrouni.com/english/software/xpmenu.html' + Font.Charset = DEFAULT_CHARSET + Font.Color = 16634037 + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsUnderline] + ParentFont = False + OnClick = Label4Click + end + object SpeedButton1: TSpeedButton + Left = 424 + Top = 282 + Width = 75 + Height = 25 + Caption = '&Close' + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + OnClick = SpeedButton1Click + end +end diff --git a/internal/2.31RC1/1/Source/UCAboutXpStyle_U.pas b/internal/2.31RC1/1/Source/UCAboutXpStyle_U.pas new file mode 100644 index 0000000..5cba471 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCAboutXpStyle_U.pas @@ -0,0 +1,46 @@ +unit UCAboutXpStyle_U; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, Jpeg, ExtCtrls, StdCtrls, ShellApi, Buttons; + +type + TUCAboutXpStyle = class(TForm) + Image1: TImage; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + SpeedButton1: TSpeedButton; + procedure Label3Click(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure Label4Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + + +implementation + +{$R *.dfm} + +procedure TUCAboutXpStyle.Label3Click(Sender: TObject); +begin + ShellExecute(0, 'open', 'mailto:khaled@shagrouni.com', nil, nil, sw_show); +end; + +procedure TUCAboutXpStyle.SpeedButton1Click(Sender: TObject); +begin + Close; +end; + +procedure TUCAboutXpStyle.Label4Click(Sender: TObject); +begin + ShellExecute(0, 'open', 'http://www.shagrouni.com/english/software/xpmenu.html', nil, nil, sw_show); +end; + +end. diff --git a/internal/2.31RC1/1/Source/UCBase.pas b/internal/2.31RC1/1/Source/UCBase.pas new file mode 100644 index 0000000..005af76 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCBase.pas @@ -0,0 +1,4080 @@ +{ +----------------------------------------------------------------------------- + Unit Name: UCBase + Author: QmD + changed: 06-dez-2004 + Purpose: Main Unit + History: included delphi 2005 support +-----------------------------------------------------------------------------} + +(* + + Vesões do Delphi + + VER120 = Delphi4 + VER130 = Delphi5 + VER140 = Delphi6 + VER150 = Delphi7 + VER160 = Delphi8 + VER170 = BDS2005 + VER180 = BDS2006 + +*) + +unit UCBase; + +interface + +{$I 'UserControl.inc'} + +uses + ActnList, + ActnMan, + ActnMenus, + Classes, + Controls, + DB, + ExtActns, + Forms, + Graphics, + md5, + Menus, + StdCtrls, + SysUtils, + UcConsts_Language, + UCDataConnector, + UCDataInfo, + UCMail, + UCMessages, + UCSettings, + Variants, + Windows; + +const + llBaixo = 0; + llNormal = 1; + llMedio = 2; + llCritico = 3; + +// Version +const + UCVersion = '2.31 RC1'; + +type + // Pensando em usar GUID para gerar a chave das tabelas !!!! + TUCGUID = class + //Creates and returns a new globally unique identifier + class function NovoGUID: TGUID; + //sometimes we need to have an "empty" value, like NULL + class function EmptyGUID: TGUID; + //Checks whether a Guid is EmptyGuid + class function IsEmptyGUID(GUID: TGUID): Boolean; + //Convert to string + class function ToString(GUID: TGUID): String; + //convert to quoted string + class function ToQuotedString(GUID: TGUID): String; + //return a GUID from string + class function FromString(Value: String): TGUID; + //Indicates whether two TGUID values are the same + class function EqualGUIDs(GUID1, GUID2: TGUID): Boolean; + //Creates and returns a new globally unique identifier string + class function NovoGUIDString: String; + end; + + TUCAboutVar = String; + + //classe para armazenar usuario logado = currentuser + TUCCurrentUser = class(TComponent) + private + FPerfilUsuario: TDataSet; + FPerfilGrupo: TDataSet; + public + UserID: Integer; + Profile: Integer; + UserIDOld: Integer; + IdLogon: String; + UserName: String; + UserLogin: String; + Password: String; + Email: String; + DateExpiration: TDateTime; + Privileged: Boolean; + UserNotExpired: Boolean; + UserDaysExpired: Integer; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + { TODO 1 -oLuiz -cUpgrade : Terminar a implementação dos DataSets para os Perfis de Usuario Loggado } + property PerfilUsuario: TDataSet read FPerfilUsuario write FPerfilUsuario; //Cadastro de Usuarios + property PerfilGrupo: TDataSet read FPerfilGrupo write FPerfilGrupo; //Cadastro de Perfil + end; + + TUCUser = class(TPersistent) // armazenar menuitem ou action responsavel pelo controle de usuarios + private + FAction: TAction; + FMenuItem: TMenuItem; + FUsePrivilegedField: Boolean; + FProtectAdministrator: Boolean; + procedure SetAction(const Value: TAction); + procedure SetMenuItem(const Value: TMenuItem); + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Action: TAction read FAction write SetAction; + property MenuItem: TMenuItem read FMenuItem write SetMenuItem; + property UsePrivilegedField: Boolean read FUsePrivilegedField write FUsePrivilegedField default False; + property ProtectAdministrator: Boolean read FProtectAdministrator write FProtectAdministrator default True; + end; + + TUCUserProfile = class(TPersistent) // armazenar menuitem ou action responsavel pelo Perfil de usuarios + private + FAtive: Boolean; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Active: Boolean read FAtive write FAtive default True; + end; + + TUCUserPasswordChange = class(TPersistent) // armazenar menuitem ou action responsavel pelo Form trocar senha + private + FForcePassword: Boolean; + FMinPasswordLength: Integer; + FAction: TAction; + FMenuItem: TMenuItem; + procedure SetAction(const Value: TAction); + procedure SetMenuItem(const Value: TMenuItem); + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Action: TAction read FAction write SetAction; + property MenuItem: TMenuItem read FMenuItem write SetMenuItem; + property ForcePassword: Boolean read FForcePassword write FForcePassword default False; + property MinPasswordLength: Integer read FMinPasswordLength write FMinPasswordLength default 0; + end; + + TUCUserLogoff = class(TPersistent) // armazenar menuitem ou action responsavel pelo logoff + private + FAction: TAction; + FMenuItem: TMenuItem; + procedure SetAction(const Value: TAction); + procedure SetMenuItem(const Value: TMenuItem); + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Action: TAction read FAction write SetAction; + property MenuItem: TMenuItem read FMenuItem write SetMenuItem; + end; + + TUCAutoLogin = class(TPersistent) // armazenar configuracao de Auto-Logon + private + FActive: Boolean; + FUser: String; + FPassword: String; + FMessageOnError: Boolean; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Active: Boolean read FActive write FActive default False; + property User: String read FUser write FUser; + property Password: String read FPassword write FPassword; + property MessageOnError: Boolean read FMessageOnError write FMessageOnError default True; + end; + + TUCInitialLogin = class(TPersistent) // armazenar Dados do Login que sera criado na primeira execucao do programa. + private + FUser: String; + FPassword: String; + FInitialRights: TStrings; + FEmail: String; + procedure SetInitialRights(const Value: TStrings); + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property User: String read FUser write FUser; + property Email: String read FEmail write FEmail; + property Password: String read FPassword write FPassword; + property InitialRights: TStrings read FInitialRights write SetInitialRights; + end; + + TUCGetLoginName = (lnNone, lnUserName, lnMachineName); + + TUCLogin = class(TPersistent) + private + FAutoLogin: TUCAutoLogin; + FMaxLoginAttempts: Integer; + FInitialLogin: TUCInitialLogin; + FGetLoginName: TUCGetLoginName; + fCharCaseUser: TEditCharCase; + fCharCasePass: TEditCharCase; + fDateExpireActive: Boolean; + fDaysOfSunExpired: Word; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property AutoLogin: TUCAutoLogin read FAutoLogin write FAutoLogin; + property InitialLogin: TUCInitialLogin read FInitialLogin write FInitialLogin; + property MaxLoginAttempts: Integer read FMaxLoginAttempts write FMaxLoginAttempts; + property GetLoginName: TUCGetLoginName read FGetLoginName write FGetLoginName default lnNone; + property CharCaseUser: TEditCharCase read fCharCaseUser write fCharCaseUser default ecNormal; { By Vicente Barros leonel } + property CharCasePass: TEditCharCase read fCharCasePass write fCharCasePass default ecNormal; { By Vicente Barros leonel } + property ActiveDateExpired: Boolean read fDateExpireActive write fDateExpireActive default False; { By Vicente Barros leonel } + property DaysOfSunExpired: Word read fDaysOfSunExpired write fDaysOfSunExpired default 30; { By Vicente Barros leonel } + end; + + TUCNotAllowedItems = class(TPersistent) // Ocultar e/ou Desabilitar os itens que o usuario nao tem acesso + private + FMenuVisible: Boolean; + FActionVisible: Boolean; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property MenuVisible: Boolean read FMenuVisible write FMenuVisible default True; + property ActionVisible: Boolean read FActionVisible write FActionVisible default True; + end; + + TUCLogControl = class(TPersistent) // Responsavel pelo Controle de Log + private + FActive: Boolean; + FTableLog: String; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Active: Boolean read FActive write FActive default True; + property TableLog: String read FTableLog write FTableLog; + end; + + TUCControlRight = class(TPersistent) // Menu / ActionList/ActionManager ou ActionMainMenuBar a serem Controlados + private + FActionList: TActionList; + FActionManager: TActionManager; + FActionMainMenuBar: TActionMainMenuBar; + FMainMenu: TMenu; + procedure SetActionList(const Value: TActionList); + procedure SetActionManager(const Value: TActionManager); + procedure SetActionMainMenuBar(const Value: TActionMainMenuBar); + procedure SetMainMenu(const Value: TMenu); + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property ActionList: TActionList read FActionList write SetActionList; + property MainMenu: TMenu read FMainMenu write SetMainMenu; + property ActionManager: TActionManager read FActionManager write SetActionManager; + property ActionMainMenuBar: TActionMainMenuBar read FActionMainMenuBar write SetActionMainMenuBar; + end; + + TOnLogin = procedure(Sender: TObject; var User, Password: String) of object; + TOnLoginSucess = procedure(Sender: TObject; IdUser: Integer; Usuario, Nome, Senha, Email: String; Privileged: Boolean) of object; + TOnLoginError = procedure(Sender: TObject; Usuario, Senha: String) of object; + TOnApplyRightsMenuItem = procedure(Sender: TObject; MenuItem: TMenuItem) of object; + TOnApllyRightsActionItem = procedure(Sender: TObject; Action: TAction) of object; + TCustomUserForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; + TCustomUserProfileForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; + TCustomLoginForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; + TCustomUserPasswordChangeForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; + TCustomLogControlForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; + TCustomInitialMessage = procedure(Sender: TObject; var CustomForm: TCustomForm; var Msg: TStrings) of object; + TCustomUserLoggedForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; //Cesar: 13/07/2005 + TOnAddUser = procedure(Sender: TObject; var Login, Password, Name, Mail: String; var Profile: Integer; var Privuser: Boolean) of object; + TOnChangeUser = procedure(Sender: TObject; IDUser: Integer; var Login, Name, Mail: String; var Profile: Integer; var Privuser: Boolean) of object; + TOnDeleteUser = procedure(Sender: TObject; IDUser: Integer; var CanDelete: Boolean; var ErrorMsg: String) of object; + TOnAddProfile = procedure(Sender: TObject; var Profile: String) of object; + TOnDeleteProfile = procedure(Sender: TObject; IDProfile: Integer; var CanDelete: Boolean; var ErrorMsg: String) of object; + TOnChangePassword = procedure(Sender: TObject; IDUser: Integer; Login, CurrentPassword, NewPassword: String) of object; + TOnLogoff = procedure(Sender: TObject; IDUser: Integer) of object; + + TUCExtraRights = class; + TUCExecuteThread = class; + TUCApplicationMessage = class; + TUCControls = class; + TUCUsersLogged = class; //Cesar: 12/07/2005 + + TUCLoginMode = (lmActive, lmPassive); + TUCCriptografia = (cPadrao, cMD5); + + TUserControl = class(TComponent) // Classe principal + private + FCurrentUser: TUCCurrentUser; + FUserSettings: TUCUserSettings; + FApplicationID: String; + FNotAllowedItems: TUCNotAllowedItems; + FOnLogin: TOnLogin; + FOnStartApplication: TNotifyEvent; + FOnLoginError: TOnLoginError; + FOnLoginSucess: TOnLoginSucess; + FOnApplyRightsActionIt: TOnApllyRightsActionItem; + FOnApplyRightsMenuIt: TOnApplyRightsMenuItem; + FLogControl: TUCLogControl; + FEncrytKey: Word; + FUser: TUCUser; + FLogin: TUCLogin; + FUserProfile: TUCUserProfile; + FUserPasswordChange: TUCUserPasswordChange; + FControlRight: TUCControlRight; + FOnCustomCadUsuarioForm: TCustomUserForm; + FCustomLogControlForm: TCustomLogControlForm; + FCustomLoginForm: TCustomLoginForm; + FCustomPerfilUsuarioForm: TCustomUserProfileForm; + FCustomTrocarSenhaForm: TCustomUserPasswordChangeForm; + FOnAddProfile: TOnAddProfile; + FOnAddUser: TOnAddUser; + FOnChangePassword: TOnChangePassword; + FOnChangeUser: TOnChangeUser; + FOnDeleteProfile: TOnDeleteProfile; + FOnDeleteUser: TOnDeleteUser; + FOnLogoff: TOnLogoff; + FCustomInicialMsg: TCustomInitialMessage; + FAbout: TUCAboutVar; + FExtraRights: TUCExtraRights; + FThUCRun: TUCExecuteThread; + FAutoStart: Boolean; + FTableRights: TUCTableRights; + FTableUsers: TUCTableUsers; + FLoginMode: TUCLoginMode; + FControlList: TList; + FDataConnector: TUCDataConnector; + FLoginMonitorList: TList; + FAfterLogin: TNotifyEvent; + FCheckValidationKey: Boolean; + FCriptografia: TUCCriptografia; + FUsersLogged: TUCUsersLogged; + FTableUsersLogged: TUCTableUsersLogged; + FUsersLogoff: TUCUserLogoff; + fLanguage: TUCLanguage; + FMailUserControl: TMailUserControl; + procedure SetExtraRights(Value: TUCExtraRights); + procedure ActionCadUser(Sender: TObject); + procedure ActionTrocaSenha(Sender: TObject); + procedure ActionOKLogin(Sender: TObject); + procedure TestaFecha(Sender: TObject; var CanClose: Boolean); + procedure ApplySettings(SourceSettings: TUCSettings); + procedure UnlockEX(FormObj: TCustomForm; ObjName: String); + procedure LockEX(FormObj: TCustomForm; ObjName: String; naInvisible: Boolean); + {.$IFDEF UCACTMANAGER} + procedure TrataActMenuBarIt(IT: TActionClientItem; ADataset: TDataset); + procedure IncPermissActMenuBar(idUser: Integer; Act: TAction); + {.$ENDIF} + procedure SetDataConnector(const Value: TUCDataConnector); + procedure DoCheckValidationField; + procedure SetfLanguage(const Value: TUCLanguage); + procedure SetFMailUserControl(const Value: TMailUserControl); + procedure ActionEsqueceuSenha(Sender: TObject); + protected + FRetry: Integer; + // Formulários + FFormTrocarSenha: TCustomForm; + FFormLogin: TCustomForm; + FFormGeral: TCustomForm; + // ----- + + procedure Loaded; override; + // Criar Formulários + procedure CriaFormTrocarSenha; dynamic; + // ----- + + procedure ActionLogoff(Sender: TObject); dynamic; + procedure ActionTSBtGrava(Sender: TObject); + procedure SetUserSettings(const Value: TUCUserSettings); + procedure SetfrmLoginWindow(Form: TCustomForm); + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + procedure RegistraCurrentUser(Dados: TDataset); + procedure ApplyRightsObj(ADataset: TDataset; FProfile: Boolean = False); + procedure ShowLogin; + procedure ApplyRights; + + // Criar Tabelas + procedure CriaTabelaLog; + procedure CriaTabelaRights(ExtraRights: Boolean = False); + procedure CriaTabelaUsuarios(TableExists: Boolean); + procedure CriaTabelaMsgs(const TableName: String); + // ----- + + // Atualiza Versao + procedure AtualizarVersao; + //-------- + + procedure TryAutoLogon; + procedure AddUCControlMonitor(UCControl: TUCControls); + procedure DeleteUCControlMonitor(UCControl: TUCControls); + procedure ApplyRightsUCControlMonitor; + procedure LockControlsUCControlMonitor; + procedure AddLoginMonitor(UCAppMessage: TUCApplicationMessage); + procedure DeleteLoginMonitor(UCAppMessage: TUCApplicationMessage); + procedure NotificationLoginMonitor; + procedure ShowNewConfig; + public + procedure Logoff; + procedure Execute; + procedure StartLogin; + procedure ShowChangePassword; + procedure ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile, UserExpired, UserDaysSun, Status: Integer; PrivUser: Boolean); + procedure ChangePassword(IDUser: Integer; NewPassword: String); + procedure AddRight(idUser: Integer; ItemRight: TObject; FullPath: Boolean = True); overload; + procedure AddRight(idUser: Integer; ItemRight: String); overload; + procedure AddRightEX(idUser: Integer; Module, FormName, ObjName: String); + procedure HideField(Sender: TField; var Text: String; DisplayText: Boolean); + procedure Log(MSG: String; Level: Integer = llNormal); + function VerificaLogin(User, Password: String): Integer;//Boolean; + function GetLocalUserName: String; + function GetLocalComputerName: String; + function AddUser(Login, Password, Name, Mail: String; Profile, UserExpired, DaysExpired: Integer; PrivUser: Boolean): Integer; + function ExisteUsuario(Login: String): Boolean; + property CurrentUser: TUCCurrentUser read FCurrentUser write FCurrentUser; + property UserSettings: TUCUserSettings read FUserSettings write SetUserSettings; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property About: TUCAboutVar read FAbout write FAbout; + property Criptografia: TUCCriptografia read FCriptografia write FCriptografia default cPadrao; + property AutoStart: Boolean read FAutoStart write FAutoStart default False; + property ApplicationID: String read FApplicationID write FApplicationID; + property ControlRight: TUCControlRight read FControlRight write FControlRight; + // Controle dos formularios + property User: TUCUser read FUser write FUser; + property UserProfile: TUCUserProfile read FUserProfile write FUserProfile; + property UserPasswordChange: TUCUserPasswordChange read FUserPasswordChange write FUserPasswordChange; + property UsersLogged: TUCUsersLogged read FUsersLogged write FUsersLogged; + property UsersLogoff: TUCUserLogoff read FUsersLogoff write FUsersLogoff; //by vicente barros leonel + property LogControl: TUCLogControl read FLogControl write FLogControl; + + property MailUserControl: TMailUserControl read FMailUserControl write SetFMailUserControl; // by vicente barros leonel + + property Language: TUCLanguage read fLanguage write SetfLanguage; + + property EncryptKey: Word read FEncrytKey write FEncrytKey; + property NotAllowedItems: TUCNotAllowedItems read FNotAllowedItems write FNotAllowedItems; + property Login: TUCLogin read FLogin write FLogin; + property ExtraRights: TUCExtraRights read FExtraRights write SetExtraRights; + property LoginMode: TUCLoginMode read FLoginMode write FLoginMode default lmActive; + // Tabelas + property TableUsers: TUCTableUsers read FTableUsers write FTableUsers; + property TableRights: TUCTableRights read FTableRights write FTableRights; + property TableUsersLogged: TUCTableUsersLogged read FTableUsersLogged write FTableUsersLogged; + + property DataConnector: TUCDataConnector read FDataConnector write SetDataConnector; + property CheckValidationKey: Boolean read FCheckValidationKey write FCheckValidationKey default False; + // Eventos + property OnLogin: TOnLogin read FOnLogin write FOnLogin; + property OnStartApplication: TNotifyEvent read FOnStartApplication write FOnStartApplication; + property OnLoginSucess: TOnLoginSucess read FOnLoginSucess write FOnLoginSucess; + property OnLoginError: TOnLoginError read FOnLoginError write FOnLoginError; + property OnApplyRightsMenuIt: TOnApplyRightsMenuItem read FOnApplyRightsMenuIt write FOnApplyRightsMenuIt; + property OnApplyRightsActionIt: TOnApllyRightsActionItem read FOnApplyRightsActionIt write FOnApplyRightsActionIt; + property OnCustomUsersForm: TCustomUserForm read FOnCustomCadUsuarioForm write FOnCustomCadUsuarioForm; + property OnCustomUsersProfileForm: TCustomUserProfileForm read FCustomPerfilUsuarioForm write FCustomPerfilUsuarioForm; + property OnCustomLoginForm: TCustomLoginForm read FCustomLoginForm write FCustomLoginForm; + property OnCustomChangePasswordForm: TCustomUserPasswordChangeForm read FCustomTrocarSenhaForm write FCustomTrocarSenhaForm; + property OnCustomLogControlForm: TCustomLogControlForm read FCustomLogControlForm write FCustomLogControlForm; + property OnCustomInitialMsg: TCustomInitialMessage read FCustomInicialMsg write FCustomInicialMsg; + property OnCustomUserLoggedForm: TCustomUserForm read FOnCustomCadUsuarioForm write FOnCustomCadUsuarioForm; //Cesar: 13/07/2005 + property OnAddUser: TOnAddUser read FOnAddUser write FOnAddUser; + property OnChangeUser: TOnChangeUser read FOnChangeUser write FOnChangeUser; + property OnDeleteUser: TOnDeleteUser read FOnDeleteUser write FOnDeleteUser; + property OnAddProfile: TOnAddProfile read FOnAddProfile write FOnAddProfile; + property OnDeleteProfile: TOnDeleteProfile read FOnDeleteProfile write FOnDeleteProfile; + property OnChangePassword: TOnChangePassword read FOnChangePassword write FOnChangePassword; + property OnLogoff: TOnLogoff read FOnLogoff write FOnLogoff; + property OnAfterLogin: TNotifyEvent read FAfterLogin write FAfterLogin; + end; + + TUCExtraRightsItem = class(TCollectionItem) + private + FFormName: String; + FCompName: String; + FCaption: String; + FGroupName: String; + procedure SetFormName(const Value: String); + procedure SetCompName(const Value: String); + procedure SetCaption(const Value: String); + procedure SetGroupName(const Value: String); + protected + function GetDisplayName: String; override; + public + published + property FormName: String read FFormName write SetFormName; + property CompName: String read FCompName write SetCompName; + property Caption: String read FCaption write SetCaption; + property GroupName: String read FGroupName write SetGroupName; + end; + + TUCExtraRights = class(TCollection) + private + FUCBase: TUserControl; + function GetItem(Index: Integer): TUCExtraRightsItem; + procedure SetItem(Index: Integer; Value: TUCExtraRightsItem); + protected + function GetOwner: TPersistent; override; + public + constructor Create(UCBase: TUserControl); + function Add: TUCExtraRightsItem; + property Items[Index: Integer]: TUCExtraRightsItem read GetItem write SetItem; default; + end; + + TUCVerificaMensagemThread = class(TThread) + private + procedure VerNovaMansagem; + public + AOwner: TComponent; + protected + procedure Execute; override; + end; + + TUCExecuteThread = class(TThread) + private + procedure UCStart; + public + AOwner: TComponent; + protected + procedure Execute; override; + end; + + TUCApplicationMessage = class(TComponent) + private + FActive: Boolean; + FReady: Boolean; + FInterval: Integer; + FUserControl: TUserControl; + FVerifThread: TUCVerificaMensagemThread; + FTableMessages: String; + procedure SetActive(const Value: Boolean); + procedure SetUserControl(const Value: TUserControl); + protected + procedure Loaded; override; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + public + constructor Create(AOWner: TComponent); override; + destructor Destroy; override; + procedure ShowMessages(Modal: Boolean = True); + procedure SendAppMessage(ToUser: Integer; Subject, Msg: String); + procedure DeleteAppMessage(IdMsg: Integer); + procedure CheckMessages; + published + property Active: Boolean read FActive write SetActive; + property Interval: Integer read FInterval write FInterval; + property TableMessages: String read FTableMessages write FTableMessages; + property UserControl: TUserControl read FUserControl write SetUserControl; + end; + + TUCComponentsVar = String; + + TUCNotAllowed = (naInvisible, naDisabled); + + TUCControls = class(TComponent) + private + FGroupName: String; + FComponents: TUCComponentsVar; + FUserControl: TUserControl; + FNotAllowed: TUCNotAllowed; + function GetAccessType: String; + function GetActiveForm: String; + procedure SetGroupName(const Value: String); + procedure SetUserControl(const Value: TUserControl); + protected + procedure Loaded; override; + procedure Notification(AComponent: TComponent; AOperation: TOperation); override; + public + destructor Destroy; override; + procedure ApplyRights; + procedure LockControls; + procedure ListComponents(Form: String; List: TStrings); + published + property AccessType: String read GetAccessType; + property ActiveForm: String read GetActiveForm; + property GroupName: String read FGroupName write SetGroupName; + property UserControl: TUserControl read FUserControl write SetUserControl; + property Components: TUCComponentsVar read FComponents write FComponents; + property NotAllowed: TUCNotAllowed read FNotAllowed write FNotAllowed default naInvisible; + end; + + TUCUsersLogged = class(TPersistent) + //Cesar: 12/07/2005: classe que armazena os usuarios logados no sistema + private + FUserControl: TUserControl; + FAtive: Boolean; + fMultipleLogin: Boolean; + procedure AddCurrentUser; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + procedure DelCurrentUser; + procedure CriaTableUserLogado; + function UsuarioJaLogado(ID: Integer): Boolean; + published + property Active: Boolean read FAtive write FAtive default True; + property MultipleLogin: Boolean read fMultipleLogin write fMultipleLogin default True; + end; + +function Decrypt(const S: ansistring; Key: Word): ansistring; +function Encrypt(const S: ansistring; Key: Word): ansistring; +function MD5Sum(strValor: String): String; + +{ TODO -oLuiz -cUpgrade : Mudar o GetLoginName para a Unit principal } + +implementation + +{$R UCLock.res} + +uses + DBGrids, + Dialogs, + LoginWindow_U, + MsgRecForm_U, + MsgsForm_U, + pUCGeral, + TrocaSenha_U, + UserPermis_U; + + +{$IFDEF DELPHI9_UP} {$REGION 'TUSerControl'} {$ENDIF} + +{ TUserControl } + +constructor TUserControl.Create(AOwner: TComponent); +begin + inherited; + FCurrentUser := TUCCurrentUser.Create(Self); + FControlRight := TUCControlRight.Create(Self); + FLogin := TUCLogin.Create(Self); + FLogControl := TUCLogControl.Create(Self); + FUser := TUCUser.Create(Self); + FUserProfile := TUCUserProfile.Create(Self); + FUserPasswordChange := TUCUserPasswordChange.Create(Self); + FUsersLogged := TUCUsersLogged.Create(Self); + FUsersLogoff := TUCUserLogoff.Create(Self); + FUserSettings := TUCUserSettings.Create(Self); + FNotAllowedItems := TUCNotAllowedItems.Create(Self); + FExtraRights := TUCExtraRights.Create(Self); + FTableUsers := TUCTableUsers.Create(Self); + FTableRights := TUCTableRights.Create(Self); + FTableUsersLogged := TUCTableUsersLogged.Create(Self); + + + if csDesigning in ComponentState then + begin + with TableUsers do + begin + if TableName = '' then + TableName := RetornaLingua(fLanguage, 'Const_TableUsers_TableName'); + if FieldUserID = '' then + FieldUserID := RetornaLingua(fLanguage, 'Const_TableUsers_FieldUserID'); + if FieldUserName = '' then + FieldUserName := RetornaLingua(fLanguage, 'Const_TableUsers_FieldUserName'); + if FieldLogin = '' then + FieldLogin := RetornaLingua(fLanguage, 'Const_TableUsers_FieldLogin'); + if FieldPassword = '' then + FieldPassword := RetornaLingua(fLanguage, 'Const_TableUsers_FieldPassword'); + if FieldEmail = '' then + FieldEmail := RetornaLingua(fLanguage, 'Const_TableUsers_FieldEmail'); + if FieldPrivileged = '' then + FieldPrivileged := RetornaLingua(fLanguage, 'Const_TableUsers_FieldPrivileged'); + if FieldTypeRec = '' then + FieldTypeRec := RetornaLingua(fLanguage, 'Const_TableUsers_FieldTypeRec'); + if FieldProfile = '' then + FieldProfile := RetornaLingua(fLanguage, 'Const_TableUsers_FieldProfile'); + if FieldKey = '' then + FieldKey := RetornaLingua(fLanguage, 'Const_TableUsers_FieldKey'); + + if FieldDateExpired = '' then + FieldDateExpired := RetornaLingua(fLanguage, 'Const_TableUsers_FieldDateExpired'); {Vicente Barros Leonel} + + if FieldUserExpired = '' then + FieldUserExpired := RetornaLingua(fLanguage, 'Const_TableUser_FieldUserExpired'); {Vicente Barros Leonel} + + if FieldUserDaysSun = '' then + FieldUserDaysSun := RetornaLingua(fLanguage, 'Const_TableUser_FieldUserDaysSun'); { Vicente Barros leoenl } + + if FieldUserInative = '' then + FieldUserInative := RetornaLingua(fLanguage, 'Const_TableUser_FieldUserInative'); { Vicente Barros leoenl } + end; + + with TableRights do + begin + if TableName = '' then + TableName := RetornaLingua(fLanguage, 'Const_TableRights_TableName'); + if FieldUserID = '' then + FieldUserID := RetornaLingua(fLanguage, 'Const_TableRights_FieldUserID'); + if FieldModule = '' then + FieldModule := RetornaLingua(fLanguage, 'Const_TableRights_FieldModule'); + if FieldComponentName = '' then + FieldComponentName := RetornaLingua(fLanguage, 'Const_TableRights_FieldComponentName'); + if FieldFormName = '' then + FieldFormName := RetornaLingua(fLanguage, 'Const_TableRights_FieldFormName'); + if FieldKey = '' then + FieldKey := RetornaLingua(fLanguage, 'Const_TableRights_FieldKey'); + end; + + with TableUsersLogged do + begin + if TableName = '' then + TableName := RetornaLingua(fLanguage, 'Const_TableUsersLogged_TableName'); + if FieldLogonID = '' then + FieldLogonID := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldLogonID'); + if FieldUserID = '' then + FieldUserID := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldUserID'); + if FieldApplicationID = '' then + FieldApplicationID := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldApplicationID'); + if FieldMachineName = '' then + FieldMachineName := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldMachineName'); + if FieldData = '' then + FieldData := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldData'); + end; + + + if LogControl.TableLog = '' then + LogControl.TableLog := 'UCLog'; + if ApplicationID = '' then + ApplicationID := 'ProjetoNovo'; + if Login.InitialLogin.User = '' then + Login.InitialLogin.User := 'admin'; + if Login.InitialLogin.Password = '' then + Login.InitialLogin.Password := '123mudar'; + if Login.InitialLogin.Email = '' then + Login.InitialLogin.Email := 'usercontrol@usercontrol.net'; + + FLoginMode := lmActive; + FCriptografia := cPadrao; + FAutoStart := False; + FUserProfile.Active := True; + FLogControl.Active := True; + FUser.UsePrivilegedField := False; + FUser.ProtectAdministrator := True; + FUsersLogged.Active := True; + NotAllowedItems.MenuVisible := True; + NotAllowedItems.ActionVisible := True; + end + else + begin + FControlList := TList.Create; + FLoginMonitorList := TList.Create; + end; + + UCSettings.IniSettings(UserSettings); +end; + +procedure TUserControl.Loaded; +var + Contador: Integer; +begin + inherited; + if not (csDesigning in ComponentState) then + begin + if not Assigned(DataConnector) then + raise Exception.Create(RetornaLingua(fLanguage, 'MsgExceptConnector')); + + if ApplicationID = '' then + raise Exception.Create(RetornaLingua(fLanguage, 'MsgExceptAppID')); + + if ((not Assigned(ControlRight.ActionList)) and + (not Assigned(ControlRight.ActionManager)) and + (not Assigned(ControlRight.MainMenu)) and + (not Assigned(ControlRight.ActionMainMenuBar))) then + raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['ControlRight'])); + + for Contador := 0 to Pred(Owner.ComponentCount) do + if Owner.Components[Contador] is TUCSettings then + begin + Language := TUCSettings(Owner.Components[Contador]).Language;// torna a linguage do UCSETTINGS como padrão + FUserSettings.BancoDados := TUCSettings(Owner.Components[Contador]).BancoDados; + ApplySettings(TUCSettings(Owner.Components[Contador])); + end; + + if Assigned(User.MenuItem) and (not Assigned(User.MenuItem.OnClick)) then + User.MenuItem.OnClick := ActionCadUser; + + if Assigned(User.Action) and (not Assigned(User.Action.OnExecute)) then + User.Action.OnExecute := ActionCadUser; + + if ((not Assigned(User.Action)) and (not Assigned(User.MenuItem))) then + raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['User'])); + + if Assigned(UserPasswordChange.MenuItem) and (not Assigned(UserPasswordChange.MenuItem.OnClick)) then + UserPasswordChange.MenuItem.OnClick := ActionTrocaSenha; + + if Assigned(UserPasswordChange.Action) and (not Assigned(UserPasswordChange.Action.OnExecute)) then + UserPasswordChange.Action.OnExecute := ActionTrocaSenha; + + { By Vicente Barros Leonel } + if Assigned(UsersLogoff.MenuItem) and (not Assigned(UsersLogoff.MenuItem.OnClick)) then + UsersLogoff.MenuItem.OnClick := ActionLogoff; + + if Assigned(UsersLogoff.Action) and (not Assigned(UsersLogoff.Action.OnExecute)) then + UsersLogoff.Action.OnExecute := ActionLogoff; + + if ((not Assigned(UserPasswordChange.Action)) and (not Assigned(UserPasswordChange.MenuItem))) then + raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['UserPasswordChange'])); + + if ((not Assigned(UsersLogoff.Action)) and (not Assigned(UsersLogoff.MenuItem))) then + raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['UsersLogoff'])); + + with TableUsers do + begin + if TableName = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable')); + if FieldUserID = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserID***'); + if FieldUserName = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserName***'); + if FieldLogin = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldLogin***'); + if FieldPassword = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldPassword***'); + if FieldEmail = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldEmail***'); + if FieldPrivileged = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldPrivileged***'); + if FieldTypeRec = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldTypeRec***'); + if FieldKey = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldKey***'); + if FieldProfile = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldProfile***'); + + if FieldDateExpired = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldDateExpired***'); + + if FieldUserExpired = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserExpired***'); + + if FieldUserDaysSun = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserDaysSun***'); + + if FieldUserInative = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserInative***'); + + end; + + with TableRights do + begin + if TableName = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable')); + if FieldUserID = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldProfile***'); + if FieldModule = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldModule***'); + if FieldComponentName = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldComponentName***'); + if FieldFormName = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldFormName***'); + if FieldKey = '' then + Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldKey***'); + end; + + if Assigned(OnStartApplication) then + OnStartApplication(self); + + //desviar para thread monitorando conexao ao banco qmd 30/01/2004 + if FAutoStart then + begin + FThUCRun := TUCExecuteThread.Create(True); + FThUCRun.AOwner := Self; + FThUCRun.FreeOnTerminate := True; + FThUCRun.Resume; + end; + end; +end; + +procedure TUserControl.ActionCadUser(Sender: TObject); +begin + ShowNewConfig; +end; + +procedure TUserControl.ActionEsqueceuSenha(Sender: TObject); +var + FDataset: TDataset; +begin + FDataset := DataConnector.UCGetSQLDataset('Select * from ' + TableUsers.TableName + ' Where ' + + TableUsers.FieldLogin + ' = ' + QuotedStr(TfrmLoginWindow(FFormLogin).EditUsuario.Text)); + try + if not FDataset.IsEmpty then + { TODO -oLuiz -cUpgrade : Consertar o método EnviarEsqueceuSenha para usar a criptografia md5 } + MailUserControl.EnviaEsqueceuSenha(FDataset.FieldByName(TableUsers.FieldUserName).AsString, + FDataset.FieldByName(TableUsers.FieldLogin).AsString, + FDataset.FieldByName(TableUsers.FieldPassword).AsString, + FDataset.FieldByName(TableUsers.FieldEmail).AsString, '', EncryptKey) + + else + MessageDlg(UserSettings.CommonMessages.InvalidLogin, mtWarning, [mbOK], 0); + finally + FDataset.Close; + FDataset.Free; + end; +end; + +procedure TUserControl.ActionTrocaSenha(Sender: TObject); +begin + if Assigned(OnCustomChangePasswordForm) then + OnCustomChangePasswordForm(Self, FFormTrocarSenha); + + if FFormTrocarSenha = nil then + CriaFormTrocarSenha; + + FFormTrocarSenha.ShowModal; + FreeAndNil(FFormTrocarSenha); +end; + +function TUserControl.ExisteUsuario(Login: String): Boolean; +var + SQLstmt: String; + DataSet: TDataSet; +begin + SQLstmt := Format('SELECT %s.%s FROM %s WHERE %s.%s=%s', + [Self.TableUsers.TableName, + Self.TableUsers.FieldLogin, + Self.TableUsers.TableName, + Self.TableUsers.TableName, + Self.TableUsers.FieldLogin, + QuotedStr(Login)]); + + DataSet := Self.DataConnector.UCGetSQLDataset(SQLstmt); + try + Result := (Dataset.RecordCount > 0); + finally + SysUtils.FreeAndNil(DataSet); + end; +end; + +function TUserControl.GetLocalComputerName: String; +var + Count: DWORD; + Buffer: String; +begin + Count := MAX_COMPUTERNAME_LENGTH + 1; + SetLength(Buffer, Count); + if GetComputerName(PChar(Buffer), Count) then + SetLength(Buffer, StrLen(PChar(Buffer))) + else + Buffer := ''; + Result := Buffer; +end; + +function TUserControl.GetLocalUserName: String; +var + Count: DWORD; + Buffer: String; +begin + Count := 254; + SetLength(Buffer, Count); + if GetUserName(PChar(Buffer), Count) then + SetLength(Buffer, StrLen(PChar(Buffer))) + else + Buffer := ''; + Result := Buffer; +end; + +procedure TUserControl.CriaFormTrocarSenha; +begin + FFormTrocarSenha := TTrocaSenha.Create(Self); + with Self.UserSettings.ChangePassword do + begin + TTrocaSenha(FFormTrocarSenha).fUsercontrol := Self; + TTrocaSenha(FFormTrocarSenha).Caption := WindowCaption; + TTrocaSenha(FFormTrocarSenha).lbDescricao.Caption := LabelDescription; + TTrocaSenha(FFormTrocarSenha).lbSenhaAtu.Caption := LabelCurrentPassword; + TTrocaSenha(FFormTrocarSenha).lbNovaSenha.Caption := LabelNewPassword; + TTrocaSenha(FFormTrocarSenha).lbConfirma.Caption := LabelConfirm; + TTrocaSenha(FFormTrocarSenha).btGrava.Caption := BtSave; + TTrocaSenha(FFormTrocarSenha).btCancel.Caption := BtCancel; + TTrocaSenha(FFormTrocarSenha).ForcarTroca := False; // Vicente Barros Leonel + end; + TTrocaSenha(FFormTrocarSenha).Position := Self.UserSettings.WindowsPosition; // Adicionado por Luiz Benevenuto + + TTrocaSenha(FFormTrocarSenha).btGrava.OnClick := ActionTSBtGrava; + if CurrentUser.Password = '' then + TTrocaSenha(FFormTrocarSenha).EditAtu.Enabled := False; +end; + +procedure TUserControl.ActionTSBtGrava(Sender: TObject); +var + AuxPass: String; +begin + { Pelo que eu analizei, a gravação da senha no Banco de Dados e feita criptografada + Qdo a criptografia e padrão, a funcao RegistraCurrentUser descriptografa a senha atual + agora quando criptografia e MD5SUM, devemos criptografar a senha atual vinda do formulario de + troca de senha para podemoscomparar com a senha atual da classe TUCCurrentUser + Modificação Feita por Vicente Barros Leonel + } + case Self.Criptografia of // por Vicente Barros Leonel + cPadrao: AuxPass := TTrocaSenha(FFormTrocarSenha).EditAtu.Text; + cMD5: AuxPass := MD5Sum(TTrocaSenha(FFormTrocarSenha).EditAtu.Text); + end; + + if CurrentUser.Password <> AuxPass then //MD5Sum(TTrocaSenha(FFormTrocarSenha).EditAtu.Text) then Vicente Barros Leonel + begin + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidCurrentPassword, mtWarning, [mbOK], 0); + TTrocaSenha(FFormTrocarSenha).EditAtu.SetFocus; + Exit; + end; + + if TTrocaSenha(FFormTrocarSenha).EditNova.Text <> TTrocaSenha(FFormTrocarSenha).EditConfirma.Text then + begin + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword, mtWarning, [mbOK], 0); + TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus; + Exit; + end; + + case Self.Criptografia of // por Vicente Barros Leonel + cPadrao: AuxPass := TTrocaSenha(FFormTrocarSenha).EditNova.Text; + cMD5: AuxPass := MD5Sum(TTrocaSenha(FFormTrocarSenha).EditNova.Text); + end; + + if AuxPass = CurrentUser.Password then + begin + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.NewEqualCurrent, mtWarning, [mbOK], 0); + TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus; + Exit; + end; + + if (UserPasswordChange.ForcePassword) and (TTrocaSenha(FFormTrocarSenha).EditNova.Text = '') then + begin + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.PasswordRequired, mtWarning, [mbOK], 0); + TTrocaSenha(FFormTrocarSenha).EditNova.Text; + Exit; + end; + + if Length(TTrocaSenha(FFormTrocarSenha).EditNova.Text) < UserPasswordChange.MinPasswordLength then + begin + MessageDlg(Format(UserSettings.CommonMessages.ChangePasswordError.MinPasswordLength, [UserPasswordChange.MinPasswordLength]), mtWarning, [mbOK], 0); + TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus; + Exit; + end; + + if Pos(LowerCase(TTrocaSenha(FFormTrocarSenha).EditNova.Text), 'abcdeasdfqwerzxcv1234567890321654987teste' + LowerCase(CurrentUser.UserName) + LowerCase(CurrentUser.UserLogin)) > 0 then + begin + MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword, mtWarning, [mbOK], 0); + TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus; + Exit; + end; + + if Assigned(OnChangePassword) then + OnChangePassword(Self, CurrentUser.UserID, CurrentUser.UserLogin, CurrentUser.Password, TTrocaSenha(FFormTrocarSenha).EditNova.Text); + + ChangePassword(CurrentUser.UserID, TTrocaSenha(FFormTrocarSenha).EditNova.Text); + + case Self.Criptografia of // Por Vicente Barros Leonel + cPadrao: CurrentUser.Password := TTrocaSenha(FFormTrocarSenha).EditNova.Text; + cMD5: CurrentUser.Password := MD5Sum(TTrocaSenha(FFormTrocarSenha).EditNova.Text); + end; + + + if CurrentUser.Password = '' then + MessageDlg(Format(UserSettings.CommonMessages.BlankPassword, [CurrentUser.UserLogin]), mtInformation, [mbOK], 0) + else + MessageDlg(UserSettings.CommonMessages.PasswordChanged, mtInformation, [mbOK], 0); + + if TTrocaSenha(FFormTrocarSenha).ForcarTroca = True then + TTrocaSenha(FFormTrocarSenha).ForcarTroca := False; // Vicente Barros Leonel + + + if (Assigned(FMailUserControl)) and (FMailUserControl.SenhaTrocada.Ativo) then + with CurrentUser do + try + FMailUserControl.EnviaEmailSenhaTrocada(Username, CurrentUser.UserLogin, TTrocaSenha(FFormTrocarSenha).EditNova.Text, Email, '', EncryptKey); + except + on e: Exception do + Log(e.Message, 2); + end; + + + TTrocaSenha(FFormTrocarSenha).Close; +end; + +procedure TUserControl.SetUserSettings(const Value: TUCUserSettings); +begin + UserSettings := Value; +end; + +procedure TUserControl.SetfrmLoginWindow(Form: TCustomForm); +begin + with UserSettings.Login, Form as TfrmLoginWindow do + begin + Caption := WindowCaption; + LbUsuario.Caption := LabelUser; + LbSenha.Caption := LabelPassword; + btOK.Caption := UserSettings.Login.BtOk; + BtCancela.Caption := BtCancel; + if LeftImage <> nil then + ImgLeft.Picture.Assign(LeftImage); + if BottomImage <> nil then + ImgBottom.Picture.Assign(BottomImage); + if TopImage <> nil then + ImgTop.Picture.Assign(TopImage); + + if Assigned(FMailUserControl) then + begin + lbEsqueci.Visible := FMailUserControl.EsqueceuSenha.Ativo; + lbEsqueci.Caption := FMailUserControl.EsqueceuSenha.LabelLoginForm; + end; + + StatusBar.Visible := Login.FMaxLoginAttempts > 0; // by vicente barros leonel + StatusBar.Panels[1].Text := '0'; // by vicente barros leonel + StatusBar.Panels[3].Text := IntToStr(Login.FMaxLoginAttempts); // by vicente barros leonel + end; +end; + +procedure TUserControl.Notification(AComponent: TComponent; AOperation: TOperation); +begin + if (AOperation = opRemove) then + begin + if AComponent = User.MenuItem then + User.MenuItem := nil; + if AComponent = User.Action then + User.Action := nil; + if AComponent = UserPasswordChange.Action then + UserPasswordChange.Action := nil; + if AComponent = UserPasswordChange.MenuItem then + UserPasswordChange.MenuItem := nil; + + { By Vicente Barros Leonel } + if AComponent = UsersLogoff.Action then + UsersLogoff.Action := nil; + if AComponent = UsersLogoff.MenuItem then + UsersLogoff.MenuItem := nil; + + + if AComponent = ControlRight.MainMenu then + ControlRight.MainMenu := nil; + if AComponent = ControlRight.ActionList then + ControlRight.ActionList := nil; + {.$IFDEF UCACTMANAGER} + if AComponent = ControlRight.ActionManager then + ControlRight.ActionManager := nil; + if AComponent = ControlRight.ActionMainMenuBar then + ControlRight.ActionMainMenuBar := nil; + {.$ENDIF} + + if AComponent = FDataConnector then + begin + if CurrentUser.UserID <> 0 then + UsersLogged.DelCurrentUser; + FDataConnector := nil; + end; + + if AComponent = FMailUserControl then + FMailUserControl := nil; + + end; + inherited Notification(AComponent, AOperation); +end; + + +procedure TUserControl.ActionLogoff(Sender: TObject); +begin + Self.Logoff; +end; + +procedure TUserControl.Log(MSG: String; Level: Integer); +begin + // Adicionado ao log a identificação da Aplicação + if not LogControl.Active then + Exit; + + if Assigned(DataConnector) then + DataConnector.UCExecSQL('INSERT INTO ' + LogControl.TableLog + + '(APPLICATIONID, IDUSER, MSG, DATA, NIVEL) VALUES ( ' + + QuotedStr(Self.ApplicationID) + ', ' + + IntToStr(CurrentUser.UserID) + ', ' + + QuotedStr(Copy(MSG, 1, 250)) + ', ' + + QuotedStr(FormatDateTime('YYYYMMDDhhmmss', now)) + ', ' + + IntToStr(Level) + ')'); +end; + +procedure TUserControl.RegistraCurrentUser(Dados: TDataset); +var + SQLStmt: String; +begin + with CurrentUser do + begin + UserID := Dados.FieldByName(TableUsers.FieldUserID).AsInteger; + UserName := Dados.FieldByName(TableUsers.FieldUserName).AsString; + UserLogin := Dados.FieldByName(TableUsers.FieldLogin).AsString; + DateExpiration := StrToDateDef(Dados.FieldByName(TableUsers.FieldDateExpired).AsString, Now); + UserNotExpired := Dados.FieldByName(TableUsers.FieldUserExpired).AsInteger = 1; //by vicente barros leonel + UserDaysExpired := Dados.FieldByName(TableUsers.FieldUserDaysSun).AsInteger; + + case Self.Criptografia of + cPadrao: Password := Decrypt(Dados.FieldByName(TableUsers.FieldPassword).AsString, EncryptKey); + cMD5: Password := Dados.FieldByName(TableUsers.FieldPassword).AsString; + end; + + Email := Dados.FieldByName(TableUsers.FieldEmail).AsString; + Privileged := StrToBool(Dados.FieldByName(TableUsers.FieldPrivileged).AsString); + Profile := Dados.FieldByName(TableUsers.FieldProfile).AsInteger; + + SQLStmt := Format('SELECT %s AS ObjName,' + + ' %s AS UCKey,' + + ' %s AS UserID' + + ' FROM %s' + + ' WHERE %s = %s AND %s = %s', + [TableRights.FieldComponentName, + TableRights.FieldKey, + TableRights.FieldUserID, + TableRights.TableName, + TableRights.FieldUserID, + IntToStr(UserID), + TableRights.FieldModule, + QuotedStr(ApplicationID)]); + + PerfilUsuario := DataConnector.UCGetSQLDataset(SQLStmt); + + // Aplica Permissoes do Perfil do usuario + if CurrentUser.Profile > 0 then + begin + SQLStmt := Format('SELECT %s AS ObjName,' + + ' %s AS UCKey,' + + ' %s AS UserID' + + ' FROM %s' + + ' WHERE %s = %s AND %s = %s', + [TableRights.FieldComponentName, + TableRights.FieldKey, + TableRights.FieldUserID, + TableRights.TableName, + TableRights.FieldUserID, + IntToStr(CurrentUser.Profile), + TableRights.FieldModule, + QuotedStr(ApplicationID)]); + + PerfilGrupo := DataConnector.UCGetSQLDataset(SQLStmt); + end + else + PerfilGrupo := nil; + + if Assigned(OnLoginSucess) then + OnLoginSucess(Self, UserID, UserLogin, UserName, Password, EMail, Privileged); + end; + + //Cesar: 13/07/2005 + if (CurrentUser.UserID <> 0) then + UsersLogged.AddCurrentUser; + + ApplyRightsUCControlMonitor; + NotificationLoginMonitor; + + if ((FLogin.fDateExpireActive = True) and (Date > CurrentUser.DateExpiration) and (CurrentUser.UserNotExpired = False)) then + begin { By Vicente Barros Leonel } + MessageDlg(UserSettings.CommonMessages.PasswordExpired, mtInformation, [mbOK], 0); + + if FFormTrocarSenha = nil then + CriaFormTrocarSenha; + TTrocaSenha(FFormTrocarSenha).ForcarTroca := True; + FFormTrocarSenha.ShowModal; + FreeAndNil(FFormTrocarSenha); + end; +end; + +procedure TUserControl.TryAutoLogon; +begin + if VerificaLogin(Login.AutoLogin.User, Login.AutoLogin.Password) <> 0 then + begin + if Login.AutoLogin.MessageOnError then + MessageDlg(UserSettings.CommonMessages.AutoLogonError, mtWarning, [mbOK], 0); + ShowLogin; + end; +end; + +function TUserControl.VerificaLogin(User, Password: String): Integer;//Boolean; +var + Senha: String; + Key: String; + SQLStmt: String; + Dataset: TDataset; + VerifKey: String; +begin + case Self.Criptografia of + cPadrao: Senha := TableUsers.FieldPassword + ' = ' + QuotedStr(Encrypt(Password, EncryptKey)); + cMD5: Senha := TableUsers.FieldPassword + ' = ' + QuotedStr(MD5Sum(Password)); + end; + + SQLStmt := 'SELECT * FROM ' + TableUsers.TableName + ' WHERE ' + + TableUsers.FieldLogin + ' = ' + QuotedStr(User) + ' AND ' + Senha; + + Dataset := DataConnector.UCGetSQLDataset(SQLStmt); + with Dataset do + try + if not IsEmpty then + begin + case Self.Criptografia of + cPadrao: + begin + Key := Decrypt(Dataset.FieldByName(TableUsers.FieldKey).AsString, EncryptKey); + VerifKey := Dataset.FieldByName(TableUsers.FieldUserID).AsString + + Dataset.FieldByName(TableUsers.FieldLogin).AsString + + Decrypt(Dataset.FieldByName(TableUsers.FieldPassword).AsString, EncryptKey); + end; + cMD5: + begin + Key := Dataset.FieldByName(TableUsers.FieldKey).AsString; + VerifKey := MD5Sum(Dataset.FieldByName(TableUsers.FieldUserID).AsString + + Dataset.FieldByName(TableUsers.FieldLogin).AsString + + Dataset.FieldByName(TableUsers.FieldPassword).AsString); + end; + end; + if Key <> VerifKey then + begin + Result := 1; + if Assigned(OnLoginError) then + OnLoginError(Self, User, Password); + end + else + begin + if DataSet.FieldByName(TableUsers.FieldUserInative).AsInteger = 0 then + begin + + if ((fUsersLogged.Active = True) and (fUsersLogged.MultipleLogin = False)) then + begin + //verifica se o usuário esta logado + if fUsersLogged.UsuarioJaLogado(Dataset.FieldByName(TableUsers.FieldUserID).AsInteger) = True then + begin + MessageDlg('Atenção: Seu usuário encontra-se logado em outra estação, verifique.', mtInformation, [mbOK], 0); + RegistraCurrentuser(Dataset); + Result := 0; + //Aqui deve-se colocar uma mensagem para derrubar a outra conexão + //Pensando ainda como fazer :) + end + else + begin + RegistraCurrentuser(Dataset); + Result := 0; + end; + end + else + begin + RegistraCurrentuser(Dataset); {Para voltar o codigo anterior, basta apagar e colocar esta duas linhas :) } + Result := 0; + end; + + end + else + Result := 2; + end; + end + else + begin + Result := 1; + if Assigned(OnLoginError) then + OnLoginError(Self, User, Password); + end; + finally + Close; + Free; + end; +end; + +procedure TUserControl.Logoff; +begin + if Assigned(onLogoff) then + onLogoff(Self, CurrentUser.UserID); + + LockControlsUCControlMonitor; + UsersLogged.DelCurrentUser; + CurrentUser.UserID := 0; + if LoginMode = lmActive then + ShowLogin; + ApplyRights; +end; + +function TUserControl.AddUser(Login, Password, Name, Mail: String; Profile, UserExpired, DaysExpired: Integer; PrivUser: Boolean): Integer; +var + Key: String; + SQLStmt: String; + Senha: String; +begin + case Self.Login.CharCasePass of + ecNormal: ; + ecUpperCase: Password := UpperCase(Password); + ecLowerCase: Password := LowerCase(Password); + end; + + case Self.Login.CharCaseUser of + ecNormal: ; + ecUpperCase: Login := UpperCase(Login); + ecLowerCase: Login := LowerCase(Login); + end; + + with DataConnector.UCGetSQLDataset('Select Max(' + TableUsers.FieldUserID + ') as IdUser from ' + TableUsers.TableName) do + begin + Result := StrToIntDef(FieldByName('idUser').AsString, 0) + 1; + Close; + Free; + end; + + case Self.Criptografia of + cPadrao: + begin + Key := Encrypt(IntToStr(Result) + Login + Password, EncryptKey); + Senha := Encrypt(Password, EncryptKey); + end; + cMD5: + begin + Key := MD5Sum(IntToStr(Result) + Login + MD5Sum(Password)); + Senha := MD5Sum(Password); + end; + end; + + with TableUsers do + begin + SQLStmt := Format('INSERT INTO %s( %s, %s, %s, %s, %s, %s, %s, %s, %s , %s , %s , %s , %s ) VALUES(%d, %s, %s, %s, %s, %s, %d, %s, %s , %s , %d , %d , %s )', + [TableName, + FieldUserID, + FieldUserName, + FieldLogin, + FieldPassword, + FieldEmail, + FieldPrivileged, + FieldProfile, + FieldTypeRec, + FieldKey, + FieldDateExpired, { By Vicente Barros Leonel } + FieldUserExpired, + FieldUserDaysSun, + FieldUserInative, + Result, + QuotedStr(Name), + QuotedStr(Login), + QuotedStr(Senha), + QuotedStr(Mail), + BoolToStr(PrivUser), + Profile, + QuotedStr('U'), + QuotedStr(Key), + QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FLogin.fDaysOfSunExpired)), {By vicente Barros Leonel } + UserExpired, + DaysExpired, '0']); {By vicente Barros Leonel } + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); + end; + + if Assigned(OnAddUser) then + OnAddUser(Self, Login, Password, Name, Mail, Profile, Privuser); +end; + + +procedure TUserControl.ChangePassword(IDUser: Integer; NewPassword: String); +var + Login: String; + Senha: String; + Key: String; + SQLStmt: String; +begin + inherited; + + case Self.Login.CharCasePass of + ecNormal: ; + ecUpperCase: NewPassword := UpperCase(NewPassword); + ecLowerCase: NewPassword := LowerCase(NewPassword); + end; + + SQLStmt := 'Select ' + TableUsers.FieldLogin + ' as login, ' + + TableUsers.FieldPassword + ' as senha from ' + TableUsers.TableName + ' ' + + 'where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser); + + with DataConnector.UCGetSQLDataset(SQLStmt) do + begin + Login := FieldByName('Login').AsString; + case Self.Criptografia of + cPadrao: + begin + Key := Encrypt(IntToStr(IDUser) + Login + NewPassword, EncryptKey); + Senha := Decrypt(FieldByName('Senha').AsString, EncryptKey); + end; + cMD5: + begin + Key := MD5Sum(IntToStr(IDUser) + Login + MD5Sum(NewPassword)); + Senha := FieldByName('Senha').AsString; + end; + end; + + Close; + Free; + end; + + case Self.Criptografia of // Por Vicente Barros Leonel + cPadrao: + SQLStmt := 'Update ' + TableUsers.TableName + + ' Set ' + TableUsers.FieldPassword + ' = ' + QuotedStr(Encrypt( + NewPassword, EncryptKey)) + + ', ' + TableUsers.FieldKey + ' = ' + QuotedStr(Key) + + ', ' + TableUsers.FieldDateExpired + ' = ' + + QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FCurrentUser.UserDaysExpired)) + // by vicente barros leonel + ' Where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser); + + cMD5: SQLStmt := 'Update ' + TableUsers.TableName + + ' Set ' + TableUsers.FieldPassword + ' = ' + QuotedStr(MD5Sum(NewPassword)) + + ', ' + TableUsers.FieldKey + ' = ' + QuotedStr(Key) + + ', ' + TableUsers.FieldDateExpired + ' = ' + + QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FCurrentUser.UserDaysExpired)) + // by vicente barros leonel + ' Where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser); + end; + + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); + + if Assigned(onChangePassword) then + OnChangePassword(Self, IdUser, Login, Senha, NewPassword); +end; + +procedure TUserControl.ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile, UserExpired, UserDaysSun, Status: Integer; PrivUser: Boolean); +var + Key: String; + Password: String; + SQLStmt: String; +begin + SQLStmt := 'SELECT ' + TableUsers.FieldPassword + + ' AS SENHA FROM ' + TableUsers.TableName + ' WHERE ' + + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser); + + with DataConnector.UCGetSQLDataset(SQLStmt) do + begin + case Self.Criptografia of + cPadrao: + begin + Password := Decrypt(FieldByName('Senha').AsString, EncryptKey); + Key := Encrypt(IntToStr(IDUser) + Login + Password, EncryptKey); + end; + cMD5: + begin + Password := FieldByName('Senha').AsString; + Key := MD5Sum(IntToStr(IDUser) + Login + Password); + end; + end; + Close; + Free; + end; + + with TableUsers do + if Assigned(DataConnector) then + DataConnector.UCExecSQL('Update ' + TableName + ' Set ' + + FieldUserName + ' = ' + QuotedStr(Name) + ', ' + + FieldLogin + ' = ' + QuotedStr(Login) + ', ' + + FieldEmail + ' = ' + QuotedStr(Mail) + ', ' + + FieldPrivileged + ' = ' + BooltoStr(PrivUser) + ', ' + + FieldProfile + ' = ' + IntToStr(Profile) + ', ' + + FieldKey + ' = ' + QuotedStr(Key) + ', ' + + FieldUserExpired + ' = ' + IntToStr(UserExpired) + ' , ' + // vicente barros leonel + FieldUserDaysSun + ' = ' + IntToStr(UserDaysSun) + ' , ' + + FieldUSerInative + ' = ' + IntToStr(Status) + + ' where ' + FieldUserID + ' = ' + IntToStr(IdUser)); + if Assigned(OnChangeUser) then + OnChangeUser(Self, IdUser, Login, Name, Mail, Profile, PrivUser); +end; + +procedure TUserControl.CriaTabelaMsgs(const TableName: String); +begin + if Assigned(DataConnector) then + DataConnector.UCExecSQL('CREATE TABLE ' + TableName + ' ( ' + + 'IdMsg ' + UserSettings.Type_Int + ' , ' + + 'UsrFrom ' + UserSettings.Type_Int + ' , ' + + 'UsrTo ' + UserSettings.Type_Int + ' , ' + + 'Subject ' + UserSettings.Type_VarChar + '(50),' + + 'Msg ' + UserSettings.Type_Varchar + '(255),' + + 'DtSend ' + UserSettings.Type_Varchar + '(12),' + + 'DtReceive ' + UserSettings.Type_Varchar + '(12) )'); +end; + +destructor TUserControl.Destroy; +begin + if not (csDesigning in ComponentState) then + fUsersLogged.DelCurrentUser; + + FCurrentUser.Free; + FControlRight.Free; + FLogin.Free; + FLogControl.Free; + FUser.Free; + FUserProfile.Free; + FUserPasswordChange.Free; + FUsersLogoff.Free; + FUsersLogged.Free; + FUserSettings.Free; + FNotAllowedItems.Free; + FExtraRights.Free; + FTableUsers.Free; + FTableRights.Free; + FTableUsersLogged.Free; + + if Assigned(FControlList) then + FControlList.Free; + + if Assigned(FLoginMonitorList) then + FLoginMonitorList.Free; + + inherited Destroy; +end; + +procedure TUserControl.SetExtraRights(Value: TUCExtraRights); +begin + +end; + +procedure TUserControl.HideField(Sender: TField; var Text: String; DisplayText: Boolean); +begin + Text := '(Campo Bloqueado)'; +end; + +procedure TUserControl.StartLogin; +begin + CurrentUser.UserID := 0; + ShowLogin; + ApplyRights; +end; + +procedure TUserControl.Execute; +begin + if Assigned(FThUCRun) then + FThUCRun.Terminate; + try + if not DataConnector.UCFindTable(FTableRights.TableName) then + CriaTabelaRights; + + if not DataConnector.UCFindTable(FTableRights.TableName + 'EX') then + CriaTabelaRights(True); //extra rights table + + if not DataConnector.UCFindTable(TableUsersLogged.TableName) then + UsersLogged.CriaTableUserLogado; + + if LogControl.Active then + if not DataConnector.UCFindTable(LogControl.TableLog) then + CriaTabelaLog; + + CriaTabelaUsuarios(DataConnector.UCFindTable(FTableUsers.TableName)); + + //Atualizador de Versoes By vicente barros leonel + AtualizarVersao; + + + // testa campo KEY qmd 28-02-2005 + if FCheckValidationKey then + DoCheckValidationField; + + finally + if LoginMode = lmActive then + if not Login.AutoLogin.Active then + ShowLogin + else + TryAutoLogon; + ApplyRights; + end; +end; + +procedure TUserControl.AtualizarVersao; // by vicente barros leonel +var + Sql: String; + DataSet: TDataSet; +begin + { Procura o campo FieldUserDaysSun na tabela de usuarios se o mesmo não existi cria } + try + Sql := Format('select * from %s', [FTableUsers.TableName]); + DataSet := DataConnector.UCGetSQLDataset(SQL); + + if DataSet.FindField(FTableUsers.FieldDateExpired) = nil then + begin + Sql := Format('alter table %s add %s %s(10)', + [FTableUsers.TableName, + FTableUsers.FieldDateExpired, + UserSettings.Type_Char]); + + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + Sql := Format('update %s set %s = %s where %s = ''U''', + [FTableUsers.TableName, + FTableUsers.FieldDateExpired, + QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FLogin.fDaysOfSunExpired)), + FTableUsers.FieldTypeRec]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + end; + + if DataSet.FindField(FTableUsers.FieldUserExpired) = nil then + begin + Sql := Format('alter table %s add %s %s', + [FTableUsers.TableName, + FTableUsers.FieldUserExpired, + UserSettings.Type_Int]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + Sql := Format('update %s set %s = 1 where %s = ''U''', + [FTableUsers.TableName, + FTableUsers.FieldUserExpired, + FTableUsers.FieldTypeRec]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + end; + + if DataSet.FindField(FTableUsers.FieldUserDaysSun) = nil then + begin // Cria campo setado no FieldUserDaysSun na tabela de usuarios + Sql := Format('alter table %s add %s %s', + [FTableUsers.TableName, + FTableUsers.FieldUserDaysSun, + UserSettings.Type_Int]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + Sql := Format('update %s set %s = 30 where %s = ''U''', + [FTableUsers.TableName, + FTableUsers.FieldUserDaysSun, + FTableUsers.FieldTypeRec]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + end; + + + if DataSet.FindField(FTableUsers.FieldUserInative) = nil then + begin // Cria campo setado no FieldUserInative na tabela de usuarios + Sql := Format('alter table %s add %s %s', + [FTableUsers.TableName, + FTableUsers.FieldUserInative, + UserSettings.Type_Int]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + + Sql := Format('update %s set %s = 0 where %s = ''U''', + [FTableUsers.TableName, + FTableUsers.FieldUserInative, + FTableUsers.FieldTypeRec]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Sql); + end; + + finally + FreeAndNil(DataSet); + end; + +end; + +procedure TUserControl.DoCheckValidationField; +var + TempDS: TDataset; + Key: String; + Login: String; + Senha: String; + UserID: Integer; +begin + //verifica tabela de usuarios + TempDS := DataConnector.UCGetSQLDataset('SELECT * FROM ' + TableUsers.TableName); + + if TempDS.FindField(TableUsers.FieldKey) = nil then + begin + if Assigned(DataConnector) then + DataConnector.UCExecSQL('ALTER TABLE ' + TableUsers.TableName + ' ADD ' + TableUsers.FieldKey + ' ' + UserSettings.Type_VarChar + ' (255)'); + TempDS.First; + with TempDS do + while not EOF do + begin + UserID := TempDS.FieldByName(TableUsers.FieldUserID).AsInteger; + Login := TempDS.FieldByName(TableUsers.FieldLogin).AsString; + case Self.Criptografia of + cPadrao: + begin + Senha := Decrypt(TempDS.FieldByName(TableUsers.FieldPassword).AsString, EncryptKey); + Key := Encrypt(IntToStr(UserID) + Login + Senha, EncryptKey); + end; + cMD5: + begin + Senha := TempDS.FieldByName(TableUsers.FieldPassword).AsString; + Key := MD5Sum(IntToStr(UserID) + Login + Senha); + end; + end; + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s WHERE %s = %d', + [TableUsers.TableName, + TableUsers.FieldKey, + QuotedStr(Key), + TableUsers.FieldUserID, + TempDS.FieldByName(TableUsers.FieldUserID).AsInteger])); + Next; + end; + end; + + TempDS.Close; + FreeAndNil(TempDS); + + //verifica tabela de permissoes + TempDS := DataConnector.UCGetSQLDataset('SELECT * FROM ' + TableRights.TableName); + + if TempDS.FindField(TableRights.FieldKey) = nil then + begin + if Assigned(DataConnector) then + DataConnector.UCExecSQL('ALTER TABLE ' + TableRights.TableName + ' ADD ' + TableUsers.FieldKey + ' ' + UserSettings.Type_VarChar + ' (255)'); + TempDS.First; + with TempDS do + while not EOF do + begin + UserID := TempDS.FieldByName(TableRights.FieldUserID).AsInteger; + Login := TempDS.FieldByName(TableRights.FieldComponentName).AsString; + case Self.Criptografia of + cPadrao: Key := Encrypt(IntToStr(UserID) + Login, EncryptKey); + cMD5: Key := MD5Sum(IntToStr(UserID) + Login); + end; + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s where %s = %d and %s = %s and %s = %s', + [TableRights.TableName, + TableRights.FieldKey, + QuotedStr(Key), + TableRights.FieldUserID, + TempDS.FieldByName(TableRights.FieldUserID).AsInteger, + TableRights.FieldModule, + QuotedStr(ApplicationID), + TableRights.FieldComponentName, + QuotedStr(Login)])); + Next; + end; + end; + TempDS.Close; + FreeAndNil(TempDS); + + //verifica tabela de permissoes extendidas + TempDS := DataConnector.UCGetSQLDataset('SELECT * FROM ' + TableRights.TableName + 'EX'); + if TempDS.FindField(TableRights.FieldKey) = nil then + begin + if Assigned(DataConnector) then + DataConnector.UCExecSQL('ALTER TABLE ' + TableRights.TableName + 'EX ADD ' + + TableUsers.FieldKey + '' + UserSettings.Type_VarChar + ' (255)'); + TempDS.First; + with TempDS do + while not EOF do + begin + UserID := TempDS.FieldByName(TableRights.FieldUserID).AsInteger; + Login := TempDS.FieldByName(TableRights.FieldComponentName).AsString; //componentname + Senha := TempDS.FieldByName(TableRights.FieldFormName).AsString; // formname + case Self.Criptografia of + cPadrao: Key := Encrypt(IntToStr(UserID) + Login, EncryptKey); + cMD5: Key := MD5Sum(IntToStr(UserID) + Login); + end; + if Assigned(DataConnector) then + DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s' + + ' WHERE %s = %d AND' + + ' %s = %s AND %s = %s AND' + + ' %s = %s', + [TableRights.TableName + 'EX', + TableRights.FieldKey, + QuotedStr(Key), + TableRights.FieldUserID, + TempDS.FieldByName(TableRights.FieldUserID).AsInteger, + TableRights.FieldModule, + QuotedStr(ApplicationID), + TableRights.FieldComponentName, + QuotedStr(Login), // componente name + TableRights.FieldFormName, + QuotedStr(Senha)])); // formname + Next; + end; + end; + TempDS.Close; + FreeAndNil(TempDS); +end; + +procedure TUserControl.ShowChangePassword; +begin + ActionTrocaSenha(self); +end; + +procedure TUserControl.ShowNewConfig; +begin + FFormGeral := TFormUserPerf.Create(Self); + with TFormUserPerf(FFormGeral) do + begin + Position := UserSettings.WindowsPosition; + fUserControl := Self; + ShowModal; + end; + FreeAndNil(FFormGeral); +end; + +procedure TUserControl.AddUCControlMonitor(UCControl: TUCControls); +begin + FControlList.Add(UCControl); +end; + +procedure TUserControl.ApplyRightsUCControlMonitor; +var + Contador: Integer; +begin + for Contador := 0 to Pred(FControlList.Count) do + TUCControls(FControlList.Items[Contador]).ApplyRights; +end; + +procedure TUserControl.DeleteUCControlMonitor(UCControl: TUCControls); +var + Contador: Integer; + SLControls: TStringList; +begin + if not Assigned(FControlList) then + Exit; + SLControls := TStringList.Create; + for Contador := 0 to Pred(FControlList.Count) do + if TUCControls(FControlList.Items[Contador]) = UCControl then + SLControls.Add(IntToStr(Contador)); + + for Contador := 0 to Pred(SLControls.Count) do + FControlList.Delete(StrToInt(SLControls[Contador])); + + FreeAndNil(SLControls); +end; + +procedure TUserControl.LockControlsUCControlMonitor; +var + Contador: Integer; +begin + for Contador := 0 to Pred(FControlList.Count) do + TUCControls(FControlList.Items[Contador]).LockControls; +end; + +procedure TUserControl.SetDataConnector(const Value: TUCDataConnector); +begin + FDataConnector := Value; + if Assigned(Value) then + Value.FreeNotification(Self); +end; + +procedure TUserControl.AddLoginMonitor(UCAppMessage: TUCApplicationMessage); +begin + FLoginMonitorList.Add(UCAppMessage); +end; + +procedure TUserControl.DeleteLoginMonitor(UCAppMessage: TUCApplicationMessage); +var + Contador: Integer; + SLControls: TStringList; +begin + SLControls := TStringList.Create; + if Assigned(FLoginMonitorList) then + for Contador := 0 to Pred(FLoginMonitorList.Count) do + if TUCApplicationMessage(FLoginMonitorList.Items[Contador]) = UCAppMessage then + SLControls.Add(IntToStr(Contador)); + if assigned(SLControls) then + for Contador := 0 to Pred(SLControls.Count) do + FLoginMonitorList.Delete(StrToInt(SLControls[Contador])); + SysUtils.FreeAndNil(SLControls); +end; + +procedure TUserControl.NotificationLoginMonitor; +var + Contador: Integer; +begin + for Contador := 0 to Pred(FLoginMonitorList.Count) do + TUCApplicationMessage(FLoginMonitorList.Items[Contador]).CheckMessages; +end; + +procedure TUserControl.ShowLogin; +begin + FRetry := 0; + if Assigned(onCustomLoginForm) then + OnCustomLoginForm(Self, FFormLogin); + if FFormLogin = nil then + begin + FFormLogin := TfrmLoginWindow.Create(self); + with FFormLogin as TfrmLoginWindow do + begin + SetfrmLoginWindow(TfrmLoginWindow(FFormLogin)); + FUserControl := Self; + btOK.onClick := ActionOKLogin; + onCloseQuery := Testafecha; + Position := Self.UserSettings.WindowsPosition; + lbEsqueci.OnClick := ActionEsqueceuSenha; + end; + end; + FFormLogin.ShowModal; + FreeAndNil(FFormLogin); +end; + +procedure TUserControl.ActionOKLogin(Sender: TObject); +var + TempUser: String; + TempPassword: String; + retorno: Integer; +begin + TempUser := TfrmLoginWindow(FFormLogin).EditUsuario.Text; + TempPassword := TfrmLoginWindow(FFormLogin).EditSenha.Text; + + if Assigned(OnLogin) then + Onlogin(Self, TempUser, TempPassword); + retorno := VerificaLogin(TempUser, TempPassword); + if retorno = 0 then + TfrmLoginWindow(FFormLogin).Close + else + begin + if Retorno = 1 then + MessageDlg(UserSettings.CommonMessages.InvalidLogin, mtWarning, [mbOK], 0) + else if retorno = 2 then + MessageDlg(UserSettings.CommonMessages.InactiveLogin, mtWarning, [mbOK], 0); + + Inc(FRetry); + if TfrmLoginWindow(FFormLogin).StatusBar.Visible then + TfrmLoginWindow(FFormLogin).StatusBar.Panels[1].Text := IntToStr(FRetry); + + if (Login.MaxLoginAttempts > 0) and (FRetry = Login.MaxLoginAttempts) then + begin + MessageDlg(Format(UserSettings.CommonMessages.MaxLoginAttemptsError, [Login.MaxLoginAttempts]), mtError, [mbOK], 0); + Application.Terminate; + end; + end; +end; + +procedure TUserControl.TestaFecha(Sender: TObject; var CanClose: Boolean); +begin + CanClose := (CurrentUser.UserID > 0); +end; + +procedure TUserControl.ApplyRights; +begin + if Self.CurrentUser.UserID <> 0 then + begin + ApplyRightsObj(Self.CurrentUser.PerfilUsuario); + + // Aplica Permissoes do Perfil do usuario + if CurrentUser.Profile > 0 then + ApplyRightsObj(Self.CurrentUser.PerfilGrupo, True); + + if Assigned(FAfterLogin) then + FAfterLogin(Self); + end; +end; + +procedure TUserControl.ApplyRightsObj(ADataset: TDataset; FProfile: Boolean = False); +var + Contador: Integer; + Encontrado: Boolean; + KeyField: String; + Temp: String; + ObjetoAction: TObject; + OwnerMenu: TComponent; +begin + //Permissao de Menus QMD + Encontrado := False; + + if ADataset.State = dsInactive then + ADataset.Open; + + if Assigned(ControlRight.MainMenu) then + begin + OwnerMenu := ControlRight.MainMenu.Owner; + for Contador := 0 to Pred(OwnerMenu.ComponentCount) do + if (OwnerMenu.Components[Contador].ClassType = TMenuItem) and (TMenuItem(OwnerMenu.Components[Contador]).GetParentMenu = ControlRight.MainMenu) then + begin + if not FProfile then + begin + Encontrado := ADataset.Locate('ObjName', OwnerMenu.Components[Contador].Name, []); + KeyField := ADataset.FindField('UCKey').AsString; + //verifica key + if Encontrado then + case Self.Criptografia of + cPadrao: + Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey)); + cMD5: + Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString)); + end; + TMenuItem(OwnerMenu.Components[Contador]).Enabled := Encontrado; + if not Encontrado then + TMenuItem(OwnerMenu.Components[Contador]).Visible := NotAllowedItems.MenuVisible + else + TMenuItem(OwnerMenu.Components[Contador]).Visible := True; + end + else + if ADataset.Locate('ObjName', OwnerMenu.Components[Contador].Name, []) then + begin + KeyField := ADataset.FindField('UCKey').AsString; + case Self.Criptografia of + cPadrao: + Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey)); + cMD5: + Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString)); + end; + TMenuItem(OwnerMenu.Components[Contador]).Enabled := Encontrado; + TMenuItem(OwnerMenu.Components[Contador]).Visible := Encontrado; + end; + if Assigned(OnApplyRightsMenuIt) then + OnApplyRightsMenuIt(Self, TMenuItem(OwnerMenu.Components[Contador])); + end; + end; // Fim do controle do MainMenu + + //Permissao de Actions + if (Assigned(ControlRight.ActionList)) + {.$IFDEF UCACTMANAGER} or (Assigned(ControlRight.ActionManager)) {.$ENDIF} then + begin + if Assigned(ControlRight.ActionList) then + ObjetoAction := ControlRight.ActionList + {.$IFDEF UCACTMANAGER} + else + ObjetoAction := ControlRight.ActionManager + {.$ENDIF}; + for Contador := 0 to TActionList(ObjetoAction).ActionCount - 1 do + begin + if not FProfile then + begin + Encontrado := ADataset.Locate('ObjName', TActionList(ObjetoAction).Actions[contador].Name, []); + KeyField := ADataset.FindField('UCKey').AsString; + //verifica key + if Encontrado then + case Self.Criptografia of + cPadrao: Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey)); + cMD5: Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString)); + end; + + TAction(TActionList(ObjetoAction).Actions[contador]).Enabled := Encontrado; + + if not Encontrado then + TAction(TActionList(ObjetoAction).Actions[contador]).Visible := NotAllowedItems.ActionVisible + else + TAction(TActionList(ObjetoAction).Actions[contador]).Visible := True; + end + else + if ADataset.Locate('ObjName', TActionList(ObjetoAction).Actions[contador].Name, []) then + begin + KeyField := ADataset.FindField('UCKey').AsString; + case Self.Criptografia of + cPadrao: Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey)); + cMD5: Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString)); + end; + TAction(TActionList(ObjetoAction).Actions[contador]).Enabled := Encontrado; + TAction(TActionList(ObjetoAction).Actions[contador]).Visible := Encontrado; + end; + + if Assigned(OnApplyRightsActionIt) then + OnApplyRightsActionIt(Self, TAction(TActionList(ObjetoAction).Actions[contador])); + end; + end; // Fim das permissões de Actions + + {.$IFDEF UCACTMANAGER} + if Assigned(ControlRight.ActionMainMenuBar) then + for Contador := 0 to ControlRight.ActionMainMenuBar.ActionClient.Items.Count - 1 do + begin + Temp := IntToStr(Contador); + if ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Items.Count > 0 then + begin + if Self.Criptografia = cPadrao then + ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Visible := + (ADataset.Locate('ObjName', #1 + 'G' + ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, [])) and + (ADataset.FieldByName('UCKey').AsString = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey)); + + if Self.Criptografia = cMD5 then + ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Visible := + (ADataset.Locate('ObjName', #1 + 'G' + ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, [])) and + (ADataset.FieldByName('UCKey').AsString = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString)); + + TrataActMenuBarIt(ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)], ADataset); + end; + end; + {.$ENDIF} +end; + +procedure TUserControl.UnlockEX(FormObj: TCustomForm; ObjName: String); +begin + if FormObj.FindComponent(ObjName) = nil then + Exit; + + if FormObj.FindComponent(ObjName) is TControl then + begin + TControl(FormObj.FindComponent(ObjName)).Enabled := True; + TControl(FormObj.FindComponent(ObjName)).Visible := True; + end; + + if FormObj.FindComponent(ObjName) is TMenuItem then // TMenuItem + begin + TMenuItem(FormObj.FindComponent(ObjName)).Enabled := True; + TMenuItem(FormObj.FindComponent(ObjName)).Visible := True; + //chama evento OnApplyRightsMenuIt + if Assigned(OnApplyRightsMenuIt) then + OnApplyRightsMenuIt(self, FormObj.FindComponent(ObjName) as TMenuItem); + end; + + if FormObj.FindComponent(ObjName) is TAction then // TAction + begin + TAction(FormObj.FindComponent(ObjName)).Enabled := True; + TAction(FormObj.FindComponent(ObjName)).Visible := True; + //chama evento OnApplyRightsMenuIt + if Assigned(OnApplyRightsActionIt) then + OnApplyRightsActionIt(self, FormObj.FindComponent(ObjName) as TAction); + end; + + if FormObj.FindComponent(ObjName) is TField then // TField + begin + TField(FormObj.FindComponent(ObjName)).ReadOnly := False; + TField(FormObj.FindComponent(ObjName)).Visible := True; + TField(FormObj.FindComponent(ObjName)).onGetText := nil; + end; +end; + +procedure TUserControl.LockEX(FormObj: TCustomForm; ObjName: String; naInvisible: Boolean); +begin + if FormObj.FindComponent(ObjName) = nil then + Exit; + + if FormObj.FindComponent(ObjName) is TControl then + begin + TControl(FormObj.FindComponent(ObjName)).Enabled := False; + TControl(FormObj.FindComponent(ObjName)).Visible := not naInvisible; + end; + + if FormObj.FindComponent(ObjName) is TMenuItem then // TMenuItem + begin + TMenuItem(FormObj.FindComponent(ObjName)).Enabled := False; + TMenuItem(FormObj.FindComponent(ObjName)).Visible := not naInvisible; + //chama evento OnApplyRightsMenuIt + if Assigned(OnApplyRightsMenuIt) then + OnApplyRightsMenuIt(self, FormObj.FindComponent(ObjName) as TMenuItem); + end; + + if FormObj.FindComponent(ObjName) is TAction then // TAction + begin + TAction(FormObj.FindComponent(ObjName)).Enabled := False; + TAction(FormObj.FindComponent(ObjName)).Visible := not naInvisible; + //chama evento OnApplyRightsMenuIt + if Assigned(OnApplyRightsActionIt) then + OnApplyRightsActionIt(self, FormObj.FindComponent(ObjName) as TAction); + end; + + if FormObj.FindComponent(ObjName) is TField then // TField + begin + TField(FormObj.FindComponent(ObjName)).ReadOnly := True; + TField(FormObj.FindComponent(ObjName)).Visible := not naInvisible; + TField(FormObj.FindComponent(ObjName)).onGetText := HideField; + end; +end; + +{.$IFDEF UCACTMANAGER} +procedure TUserControl.TrataActMenuBarIt(IT: TActionClientItem; ADataset: TDataset); +var + Contador: Integer; +begin + for contador := 0 to IT.Items.Count - 1 do + if IT.Items[Contador].Caption <> '-' then + if IT.Items[Contador].Items.Count > 0 then + begin + IT.Items[Contador].Visible := (ADataset.Locate('ObjName', #1 + 'G' + IT.Items[Contador].Caption, [])); + TrataActMenuBarIt(IT.Items[Contador], ADataset); + end; +end; + +{.$ENDIF} + +procedure TUserControl.CriaTabelaRights(ExtraRights: Boolean = False); +var + SQLStmt: String; + TipoCampo: String; +begin + case Self.Criptografia of + cPadrao: TipoCampo := UserSettings.Type_Varchar + '(250)'; + cMD5: TipoCampo := UserSettings.Type_Varchar + '(32)'; + end; + + with TableRights do + if not ExtraRights then + begin + SQLStmt := Format('CREATE TABLE %s( %s %s, %s %s(50), %s %s(50), %s %s )', + [TableName, + FieldUserID, + UserSettings.Type_Int, + FieldModule, + UserSettings.Type_VarChar, + FieldComponentName, + UserSettings.Type_Varchar, + FieldKey, + TipoCampo]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); + end + else + begin + SQLStmt := Format('CREATE TABLE %sEX( %s %s, %s %s(50), %s %s(50), %s %s(50), %s %s )', + [TableName, + FieldUserID, + UserSettings.Type_Int, + FieldModule, + UserSettings.Type_VarChar, + FieldComponentName, + UserSettings.Type_VarChar, + FieldFormName, + UserSettings.Type_VarChar, + FieldKey, + TipoCampo]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); + end; +end; + +procedure TUserControl.AddRightEX(idUser: Integer; Module, FormName, ObjName: String); +var + KeyField: String; + SQLStmt: String; +begin + case Self.Criptografia of + cPadrao: KeyField := Encrypt(IntToStr(idUser) + ObjName, EncryptKey); + cMD5: KeyField := MD5Sum(IntToStr(idUser) + ObjName); + end; + + with TableRights do + SQLStmt := Format('INSERT INTO %sEX( %s, %s, %s, %s, %s) VALUES (%d, %s, %s, %s, %s)', + [TableName, + FieldUserID, + FieldModule, + FieldFormName, + FieldComponentName, + FieldKey, + IdUser, + QuotedStr(Module), + QuotedStr(FormName), + QuotedStr(ObjName), + QuotedStr(KeyField)]); + + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); +end; + +procedure TUserControl.AddRight(idUser: Integer; ItemRight: String); +var + KeyField: String; + SQLStmt: String; +begin + if ItemRight = '' then + Exit; + + case Self.Criptografia of + cPadrao: KeyField := Encrypt(IntToStr(idUser) + ItemRight, EncryptKey); + cMD5: KeyField := MD5Sum(IntToStr(idUser) + ItemRight); + end; + + SQLStmt := Format('Insert into %s( %s, %s, %s, %s) Values( %d, %s, %s, %s)', + [TableRights.TableName, + TableRights.FieldUserID, + TableRights.FieldModule, + TableRights.FieldComponentName, + TableRights.FieldKey, + idUser, + QuotedStr(ApplicationID), + QuotedStr(ItemRight), + QuotedStr(KeyField)]); + + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); +end; + +procedure TUserControl.AddRight(idUser: Integer; ItemRight: TObject; FullPath: Boolean = True); +var + Obj: TObject; +begin + if ItemRight = nil then + Exit; + + Obj := ItemRight; + + if Obj.ClassType = TMenuItem then + while Assigned(Obj) and (Obj.ClassType = TMenuItem) and (TComponent(Obj).Name <> '') do + begin + AddRight(idUser, TComponent(Obj).Name); + if FullPath then + Obj := TMenuItem(Obj).Parent + else + Obj := nil; + end + else + AddRight(idUser, TComponent(Obj).Name); +end; + +procedure TUserControl.CriaTabelaLog; +begin + if Assigned(DataConnector) then + DataConnector.UCExecSQL( + Format('CREATE TABLE %S (APPLICATIONID %s(250), IDUSER %s , MSG %s(250), DATA %s(14), NIVEL %s)', + [ + LogControl.TableLog, + UserSettings.Type_VarChar, + UserSettings.Type_Int, + UserSettings.Type_Varchar, + UserSettings.Type_Varchar, + UserSettings.Type_Int + ])); +end; + +{.$IFDEF UCACTMANAGER} +procedure TUserControl.IncPermissActMenuBar(idUser: Integer; Act: TAction); +var + Temp: TActionClientItem; +begin + if Act = nil then + Exit; + + Temp := ControlRight.ActionMainMenuBar.ActionManager.FindItemByAction(Act); + while Temp <> nil do + begin + AddRight(idUser, #1 + 'G' + Temp.Caption); + Temp := (TActionClientItem(Temp).ParentItem as TActionClientItem); + end; +end; + +{.$ENDIF} + +procedure TUserControl.CriaTabelaUsuarios(TableExists: Boolean); +var + Contador: Integer; + IDUsuario: Integer; + CustomForm: TCustomForm; + Mensagens: TStrings; + DataSetUsuario: TDataSet; + DataSetPermissao: TDataSet; + SQLStmt: String; + TipoCampo: String; + UsuarioInicial: String; + PasswordInicial: String; +begin + case Self.Criptografia of + cPadrao: TipoCampo := UserSettings.Type_VarChar + '(250)'; + cMD5: TipoCampo := UserSettings.Type_Varchar + '(32)'; + end; + + if not TableExists then + with TableUsers do + begin + SQLStmt := Format('Create Table %s ' + // TableName + '( ' + + '%s %s, ' + // FieldUserID + '%s %s(30), ' + // FieldUserName + '%s %s(30), ' + // FieldLogin + '%s %s, ' + // FieldPassword + '%s %s(10), ' + // FieldDateExpired Vicente Barros Leonel + '%s %s , ' + //FieldUserExpired Vicente Barros Leonel + '%s %s , ' + //FieldUserDaysSun Vicente Barros Leonel + '%s %s(150), ' + + '%s %s, ' + + '%s %s(1), ' + + '%s %s, ' + + '%s %s,' + // FieldKey + '%s %s )', + [TableName, + FieldUserID, + UserSettings.Type_Int, + + FieldUserName, + UserSettings.Type_VarChar, + + FieldLogin, + UserSettings.Type_VarChar, + + FieldPassword, + TipoCampo, + + FieldDateExpired, + UserSettings.Type_Char, + + FieldUserExpired, + UserSettings.Type_Int, + + FieldUserDaysSun, + UserSettings.Type_Int, + + FieldEmail, + UserSettings.Type_Varchar, + + FieldPrivileged, + UserSettings.Type_Int, + + FieldTypeRec, + UserSettings.Type_Char, + + FieldProfile, + UserSettings.Type_Int, + + FieldKey, + TipoCampo, + + FieldUserInative, + UserSettings.Type_Int + ]); + + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLstmt); + end; + + case Self.Login.CharCaseUser of + ecNormal: UsuarioInicial := Self.Login.InitialLogin.User; + ecUpperCase: UsuarioInicial := UpperCase(Self.Login.InitialLogin.User); + ecLowerCase: UsuarioInicial := LowerCase(Self.Login.InitialLogin.User); + end; + + case Self.Login.CharCasePass of + ecNormal: PasswordInicial := Self.Login.InitialLogin.Password; + ecUpperCase: PasswordInicial := UpperCase(Self.Login.InitialLogin.Password); + ecLowerCase: PasswordInicial := LowerCase(Self.Login.InitialLogin.Password); + end; + + SQLStmt := 'SELECT ' + TableUsers.FieldUserID + ' as idUser ' + + 'FROM ' + TableUsers.TableName + ' ' + + 'WHERE ' + TableUsers.FieldLogin + ' = ' + QuotedStr(UsuarioInicial); + + try + DataSetUsuario := DataConnector.UCGetSQLDataset(SQLstmt); + + // Inserir login inicial + if DataSetUsuario.IsEmpty then + IDUsuario := AddUser(UsuarioInicial, + PasswordInicial, + Login.InitialLogin.User, + Login.InitialLogin.Email, + 0, 0, Login.DaysOfSunExpired, + True) + else + IDUsuario := DataSetUsuario.FieldByName('idUser').AsInteger; + + finally + DataSetUsuario.Close; + FreeAndNil(DataSetUsuario); + end; + + SQLStmt := 'SELECT ' + TableRights.FieldUserID + ' AS IDUSER ' + + 'FROM ' + TableRights.TableName + ' ' + + 'WHERE ' + TableRights.FieldUserID + ' = ' + IntToStr(IDUsuario) + ' ' + + 'AND ' + TableRights.FieldModule + ' = ' + QuotedStr(ApplicationID); + + try + DataSetPermissao := DataConnector.UCGetSQLDataset(SQLStmt); + + if not DataSetPermissao.IsEmpty then + Exit; + + finally + DataSetPermissao.Close; + FreeAndNil(DataSetPermissao); + end; + + AddRight(IDUsuario, User.MenuItem); + AddRight(IDUsuario, User.Action); + + AddRight(IDUsuario, UserPasswordChange.MenuItem); + AddRight(IDUsuario, UserPasswordChange.Action); + + AddRight(IDUsuario, UsersLogoff.MenuItem); + AddRight(IDUsuario, UsersLogoff.Action); + + {.$IFDEF UCACTMANAGER} + if Assigned(ControlRight.ActionMainMenuBar) then + IncPermissActMenuBar(IDUsuario, User.Action); + + if Assigned(ControlRight.ActionMainMenuBar) then + IncPermissActMenuBar(IDUsuario, UserPasswordChange.Action); + {.$ENDIF} + + for Contador := 0 to Pred(Login.InitialLogin.InitialRights.Count) do + if Owner.FindComponent(Login.InitialLogin.InitialRights[contador]) <> nil then + begin + AddRight(IDUsuario, Owner.FindComponent(Login.InitialLogin.InitialRights[contador])); + AddRightEX(IDUsuario, ApplicationID, TcustomForm(Owner).Name, Login.InitialLogin.InitialRights[contador]); + end; + + try + Mensagens := TStringList.Create; + Mensagens.Assign(UserSettings.CommonMessages.InitialMessage); + Mensagens.Text := StringReplace(Mensagens.Text, ':user', UsuarioInicial, [rfReplaceAll]); + Mensagens.Text := StringReplace(Mensagens.Text, ':password', PasswordInicial, [rfReplaceAll]); + + if Assigned(OnCustomInitialMsg) then + OnCustomInitialMsg(Self, CustomForm, Mensagens); + + if CustomForm <> nil then + CustomForm.ShowModal + else + MessageDlg(Mensagens.Text, mtInformation, [mbOK], 0); + + finally + FreeAndNil(Mensagens); + end; +end; + +procedure TUserControl.SetfLanguage(const Value: TUCLanguage); +begin + fLanguage := Value; + Self.UserSettings.Language := Value; + UCSettings.AlterLanguage(Self.UserSettings); +end; + + +procedure TUserControl.SetFMailUserControl(const Value: TMailUserControl); +begin // By Vicente Barros Leonel + FMailUserControl := Value; + if Value <> nil then + Value.FreeNotification(Self); +end; + +procedure TUserControl.ApplySettings(SourceSettings: TUCSettings); +begin + with UserSettings.CommonMessages do + begin + BlankPassword := SourceSettings.CommonMessages.BlankPassword; + PasswordChanged := SourceSettings.CommonMessages.PasswordChanged; + InitialMessage.Text := SourceSettings.CommonMessages.InitialMessage.Text; + MaxLoginAttemptsError := SourceSettings.CommonMessages.MaxLoginAttemptsError; + InvalidLogin := SourceSettings.CommonMessages.InvalidLogin; + InactiveLogin := SourceSettings.CommonMessages.InactiveLogin; + AutoLogonError := SourceSettings.CommonMessages.AutoLogonError; + UsuarioExiste := SourceSettings.CommonMessages.UsuarioExiste; // Luiz Benevenuto 20/04/06 + PasswordExpired := SourceSettings.CommonMessages.PasswordExpired; // vicente barros leonel + ForcaTrocaSenha := SourceSettings.CommonMessages.ForcaTrocaSenha; + end; + + with UserSettings.Login do + begin + BtCancel := SourceSettings.Login.BtCancel; + BtOK := SourceSettings.Login.BtOK; + LabelPassword := SourceSettings.Login.LabelPassword; + LabelUser := SourceSettings.Login.LabelUser; + WindowCaption := SourceSettings.Login.WindowCaption; + LabelTentativa := SourceSettings.Login.LabelTentativa; + LabelTentativas := SourceSettings.Login.LabelTentativas; + + if Assigned(SourceSettings.Login.LeftImage.Bitmap) then + LeftImage.Bitmap := SourceSettings.Login.LeftImage.Bitmap + else + LeftImage.Bitmap := nil; + + if Assigned(SourceSettings.Login.TopImage.Bitmap) then + TopImage.Bitmap := SourceSettings.Login.TopImage.Bitmap + else + TopImage.Bitmap := nil; + + if Assigned(SourceSettings.Login.BottomImage.Bitmap) then + BottomImage.Bitmap := SourceSettings.Login.BottomImage.Bitmap + else + BottomImage.Bitmap := nil; + end; + + with UserSettings.UsersForm do + begin + WindowCaption := SourceSettings.UsersForm.WindowCaption; + LabelDescription := SourceSettings.UsersForm.LabelDescription; + ColName := SourceSettings.UsersForm.ColName; + ColLogin := SourceSettings.UsersForm.ColLogin; + ColEmail := SourceSettings.UsersForm.ColEmail; + BtAdd := SourceSettings.UsersForm.BtAdd; + BtChange := SourceSettings.UsersForm.BtChange; + BtDelete := SourceSettings.UsersForm.BtDelete; + BtRights := SourceSettings.UsersForm.BtRights; + BtPassword := SourceSettings.UsersForm.BtPassword; + BtClose := SourceSettings.UsersForm.BtClose; + PromptDelete := SourceSettings.UsersForm.PromptDelete; + PromptDelete_WindowCaption := SourceSettings.UsersForm.PromptDelete_WindowCaption; //added by fduenas + end; + + with UserSettings.UsersProfile do + begin + WindowCaption := SourceSettings.UsersProfile.WindowCaption; + LabelDescription := SourceSettings.UsersProfile.LabelDescription; + ColProfile := SourceSettings.UsersProfile.ColProfile; + BtAdd := SourceSettings.UsersProfile.BtAdd; + BtChange := SourceSettings.UsersProfile.BtChange; + BtDelete := SourceSettings.UsersProfile.BtDelete; + BtRights := SourceSettings.UsersProfile.BtRights; //added by fduenas + BtClose := SourceSettings.UsersProfile.BtClose; + PromptDelete := SourceSettings.UsersProfile.PromptDelete; + PromptDelete_WindowCaption := SourceSettings.UsersProfile.PromptDelete_WindowCaption; //added by fduenas + end; + + with UserSettings.AddChangeUser do + begin + WindowCaption := SourceSettings.AddChangeUser.WindowCaption; + LabelAdd := SourceSettings.AddChangeUser.LabelAdd; + LabelChange := SourceSettings.AddChangeUser.LabelChange; + LabelName := SourceSettings.AddChangeUser.LabelName; + LabelLogin := SourceSettings.AddChangeUser.LabelLogin; + LabelEmail := SourceSettings.AddChangeUser.LabelEmail; + CheckPrivileged := SourceSettings.AddChangeUser.CheckPrivileged; + BtSave := SourceSettings.AddChangeUser.BtSave; + BtCancel := SourceSettings.AddChangeUser.BtCancel; + CheckExpira := SourceSettings.AddChangeUser.CheckExpira; + Day := SourceSettings.AddChangeUser.Day; + ExpiredIn := SourceSettings.AddChangeUser.ExpiredIn; + end; + + with UserSettings.AddChangeProfile do + begin + WindowCaption := SourceSettings.AddChangeProfile.WindowCaption; + LabelAdd := SourceSettings.AddChangeProfile.LabelAdd; + LabelChange := SourceSettings.AddChangeProfile.LabelChange; + LabelName := SourceSettings.AddChangeProfile.LabelName; + BtSave := SourceSettings.AddChangeProfile.BtSave; + BtCancel := SourceSettings.AddChangeProfile.BtCancel; + end; + + with UserSettings.Rights do + begin + WindowCaption := SourceSettings.Rights.WindowCaption; + LabelUser := SourceSettings.Rights.LabelUser; + LabelProfile := SourceSettings.Rights.LabelProfile; + PageMenu := SourceSettings.Rights.PageMenu; + PageActions := SourceSettings.Rights.PageActions; + PageControls := SourceSettings.Rights.PageControls; + BtUnlock := SourceSettings.Rights.BtUnlock; + BtLock := SourceSettings.Rights.BtLock; + BtSave := SourceSettings.Rights.BtSave; + BtCancel := SourceSettings.Rights.BtCancel; + end; + + with UserSettings.ChangePassword do + begin + WindowCaption := SourceSettings.ChangePassword.WindowCaption; + LabelDescription := SourceSettings.ChangePassword.LabelDescription; + LabelCurrentPassword := SourceSettings.ChangePassword.LabelCurrentPassword; + LabelNewPassword := SourceSettings.ChangePassword.LabelNewPassword; + LabelConfirm := SourceSettings.ChangePassword.LabelConfirm; + BtSave := SourceSettings.ChangePassword.BtSave; + BtCancel := SourceSettings.ChangePassword.BtCancel; + end; + + with UserSettings.CommonMessages.ChangePasswordError do + begin + InvalidCurrentPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidCurrentPassword; + NewPasswordError := SourceSettings.CommonMessages.ChangePasswordError.NewPasswordError; + NewEqualCurrent := SourceSettings.CommonMessages.ChangePasswordError.NewEqualCurrent; + PasswordRequired := SourceSettings.CommonMessages.ChangePasswordError.PasswordRequired; + MinPasswordLength := SourceSettings.CommonMessages.ChangePasswordError.MinPasswordLength; + InvalidNewPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidNewPassword; + end; + + with UserSettings.ResetPassword do + begin + WindowCaption := SourceSettings.ResetPassword.WindowCaption; + LabelPassword := SourceSettings.ResetPassword.LabelPassword; + end; + + with UserSettings.Log do + begin + WindowCaption := SourceSettings.Log.WindowCaption; + LabelDescription := SourceSettings.Log.LabelDescription; + LabelUser := SourceSettings.Log.LabelUser; + LabelDate := SourceSettings.Log.LabelDate; + LabelLevel := SourceSettings.Log.LabelLevel; + ColLevel := SourceSettings.Log.ColLevel; + ColMessage := SourceSettings.Log.ColMessage; + ColUser := SourceSettings.Log.ColUser; + ColDate := SourceSettings.Log.ColDate; + BtFilter := SourceSettings.Log.BtFilter; + BtDelete := SourceSettings.Log.BtDelete; + BtClose := SourceSettings.Log.BtClose; + PromptDelete := SourceSettings.Log.PromptDelete; + PromptDelete_WindowCaption := SourceSettings.Log.PromptDelete_WindowCaption; //added by fduenas + OptionUserAll := SourceSettings.Log.OptionUserAll; //added by fduenas + OptionLevelLow := SourceSettings.Log.OptionLevelLow; //added by fduenas + OptionLevelNormal := SourceSettings.Log.OptionLevelNormal; //added by fduenas + OptionLevelHigh := SourceSettings.Log.OptionLevelHigh; //added by fduenas + OptionLevelCritic := SourceSettings.Log.OptionLevelCritic; //added by fduenas + DeletePerformed := SourceSettings.Log.DeletePerformed; //added by fduenas + end; + + with UserSettings.AppMessages do + begin + MsgsForm_BtNew := SourceSettings.AppMessages.MsgsForm_BtNew; + MsgsForm_BtReplay := SourceSettings.AppMessages.MsgsForm_BtReplay; + MsgsForm_BtForward := SourceSettings.AppMessages.MsgsForm_BtForward; + MsgsForm_BtDelete := SourceSettings.AppMessages.MsgsForm_BtDelete; + MsgsForm_BtClose := SourceSettings.AppMessages.MsgsForm_BtClose; //added by fduenas + MsgsForm_WindowCaption := SourceSettings.AppMessages.MsgsForm_WindowCaption; + MsgsForm_ColFrom := SourceSettings.AppMessages.MsgsForm_ColFrom; + MsgsForm_ColSubject := SourceSettings.AppMessages.MsgsForm_ColSubject; + MsgsForm_ColDate := SourceSettings.AppMessages.MsgsForm_ColDate; + MsgsForm_PromptDelete := SourceSettings.AppMessages.MsgsForm_PromptDelete; + MsgsForm_PromptDelete_WindowCaption := SourceSettings.AppMessages.MsgsForm_PromptDelete_WindowCaption; //added by fduenas + MsgsForm_NoMessagesSelected := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected; //added by fduenas + MsgsForm_NoMessagesSelected_WindowCaption := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas + + MsgRec_BtClose := SourceSettings.AppMessages.MsgRec_BtClose; + MsgRec_WindowCaption := SourceSettings.AppMessages.MsgRec_WindowCaption; + MsgRec_Title := SourceSettings.AppMessages.MsgRec_Title; + MsgRec_LabelFrom := SourceSettings.AppMessages.MsgRec_LabelFrom; + MsgRec_LabelDate := SourceSettings.AppMessages.MsgRec_LabelDate; + MsgRec_LabelSubject := SourceSettings.AppMessages.MsgRec_LabelSubject; + MsgRec_LabelMessage := SourceSettings.AppMessages.MsgRec_LabelMessage; + MsgSend_BtSend := SourceSettings.AppMessages.MsgSend_BtSend; + MsgSend_BtCancel := SourceSettings.AppMessages.MsgSend_BtCancel; + MsgSend_WindowCaption := SourceSettings.AppMessages.MsgSend_WindowCaption; + MsgSend_Title := SourceSettings.AppMessages.MsgSend_Title; + MsgSend_GroupTo := SourceSettings.AppMessages.MsgSend_GroupTo; + MsgSend_RadioUser := SourceSettings.AppMessages.MsgSend_RadioUser; + MsgSend_RadioAll := SourceSettings.AppMessages.MsgSend_RadioAll; + MsgSend_GroupMessage := SourceSettings.AppMessages.MsgSend_GroupMessage; + MsgSend_LabelSubject := SourceSettings.AppMessages.MsgSend_LabelSubject; //added by fduenas + MsgSend_LabelMessageText := SourceSettings.AppMessages.MsgSend_LabelMessageText; //added by fduenas + end; + +{ with UserSettings.TypeFieldsDB do + begin + Type_VarChar := SourceSettings.Type_VarChar; + Type_Char := SourceSettings.Type_Char; + Type_Int := SourceSettings.Type_Int; + end; atenção mudar aqui } + + UserSettings.WindowsPosition := SourceSettings.WindowsPosition; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'Criptografia'} {$ENDIF} + +const + Codes64 = '0A1B2C3D4E5F6G7H89IjKlMnOPqRsTuVWXyZabcdefghijkLmNopQrStUvwxYz+/'; + C1 = 52845; + C2 = 22719; + +function Decode(const S: ansistring): ansistring; +const +{$IFDEF DELPHI12} + Map: array[AnsiChar] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0); +{$ELSE} + Map: array[char] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0); +{$ENDIF} + +var + I: longint; +begin + case Length(S) of + 2: + begin + I := Map[S[1]] + (Map[S[2]] shl 6); + SetLength(Result, 1); + Move(I, Result[1], Length(Result)); + end; + 3: + begin + I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12); + SetLength(Result, 2); + Move(I, Result[1], Length(Result)); + end; + 4: + begin + I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) + (Map[S[4]] shl 18); + SetLength(Result, 3); + Move(I, Result[1], Length(Result)); + end + end; +end; + +function Encode(const S: ansistring): ansistring; +const + Map: array[0..63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +var + I: longint; +begin + I := 0; + Move(S[1], I, Length(S)); + case Length(S) of + 1: + Result := Map[I mod 64] + Map[(I shr 6) mod 64]; + 2: + Result := Map[I mod 64] + Map[(I shr 6) mod 64] + Map[(I shr 12) mod 64]; + 3: + Result := Map[I mod 64] + Map[(I shr 6) mod 64] + Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]; + end; +end; + +function InternalDecrypt(const S: ansistring; Key: Word): ansistring; +var + I: Word; + Seed: int64; +begin + Result := S; + Seed := Key; + for I := 1 to Length(Result) do + begin + {$IFDEF DELPHI12} + Result[I] := AnsiChar(byte(Result[I]) xor (Seed shr 8)); + Seed := (byte(S[I]) + Seed) * Word(C1) + Word(C2); + {$ELSE} + Result[I] := char(byte(Result[I]) xor (Seed shr 8)); + Seed := (byte(S[I]) + Seed) * Word(C1) + Word(C2); + {$ENDIF} + end; +end; + +function PreProcess(const S: ansistring): ansistring; +var + SS: ansistring; +begin + SS := S; + Result := ''; + while SS <> '' do + begin + Result := Result + Decode(Copy(SS, 1, 4)); + Delete(SS, 1, 4); + end; +end; + +function Decrypt(const S: ansistring; Key: Word): ansistring; +begin + Result := InternalDecrypt(PreProcess(S), Key); +end; + +function PostProcess(const S: ansistring): ansistring; +var + SS: ansistring; +begin + SS := S; + Result := ''; + while SS <> '' do + begin + Result := Result + Encode(Copy(SS, 1, 3)); + Delete(SS, 1, 3); + end; +end; + +function InternalEncrypt(const S: ansistring; Key: Word): ansistring; +var + I: Word; + Seed: int64; +begin + Result := S; + Seed := Key; + for I := 1 to Length(Result) do + begin + {$IFDEF DELPHI12} + Result[I] := AnsiChar(byte(Result[I]) xor (Seed shr 8)); + Seed := (byte(Result[I]) + Seed) * Word(C1) + Word(C2); + {$ELSE} + Result[I] := Char(byte(Result[I]) xor (Seed shr 8)); + Seed := (byte(Result[I]) + Seed) * Word(C1) + Word(C2); + {$ENDIF} + end; +end; + +function Encrypt(const S: ansistring; Key: Word): ansistring; +begin + Result := PostProcess(InternalEncrypt(S, Key)); +end; + +function MD5Sum(strValor: String): String; +begin + Result := md5.MD5Print(md5.MD5String(strValor)); +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCAutoLogin'} {$ENDIF} + +{ TUCAutoLogin } + +procedure TUCAutoLogin.Assign(Source: TPersistent); +begin + if Source is TUCAutoLogin then + begin + Self.Active := TUCAutoLogin(Source).Active; + Self.User := TUCAutoLogin(Source).User; + Self.Password := TUCAutoLogin(Source).Password; + end + else + inherited; +end; + +constructor TUCAutoLogin.Create(AOwner: TComponent); +begin + inherited Create; + Self.Active := False; + Self.MessageOnError := True; +end; + +destructor TUCAutoLogin.Destroy; +begin + inherited Destroy; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TNaoPermitidos'} {$ENDIF} + +{ TNaoPermitidos } + +procedure TUCNotAllowedItems.Assign(Source: TPersistent); +begin + if Source is TUCNotAllowedItems then + begin + Self.MenuVisible := TUCNotAllowedItems(Source).MenuVisible; + Self.ActionVisible := TUCNotAllowedItems(Source).ActionVisible; // Consertado Luiz Benvenuto + end + else + inherited; +end; + +constructor TUCNotAllowedItems.Create(AOwner: TComponent); +begin + inherited Create; + Self.MenuVisible := True; + Self.ActionVisible := True; +end; + +destructor TUCNotAllowedItems.Destroy; +begin + inherited Destroy; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TLogControl'} {$ENDIF} + +{ TLogControl } + +constructor TUCLogControl.Create(AOwner: TComponent); +begin + inherited Create; + Self.Active := True; +end; + +destructor TUCLogControl.Destroy; +begin + inherited Destroy; +end; + +procedure TUCLogControl.Assign(Source: TPersistent); +begin + if Source is TUCLogControl then + begin + Self.Active := TUCLogControl(Source).Active; + Self.TableLog := TUCLogControl(Source).TableLog; + end + else + inherited; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TCadastroUsuarios'} {$ENDIF} + +{ TCadastroUsuarios } + +procedure TUCUser.Assign(Source: TPersistent); +begin + if Source is TUCUser then + begin + Self.MenuItem := TUCUser(Source).MenuItem; + Self.Action := TUCUser(Source).Action; + end + else + inherited; +end; + +constructor TUCUser.Create(AOwner: TComponent); +begin + inherited Create; + Self.FProtectAdministrator := True; + Self.FUsePrivilegedField := False; +end; + +destructor TUCUser.Destroy; +begin + inherited Destroy; +end; + +procedure TUCUser.SetAction(const Value: TAction); +begin + FAction := Value; + if Value <> nil then + begin + Self.FMenuItem := nil; + Value.FreeNotification(Self.Action); + end; +end; + +procedure TUCUser.SetMenuItem(const Value: TMenuItem); +begin + FMenuItem := Value; + if Value <> nil then + begin + Self.Action := nil; + Value.FreeNotification(Self.MenuItem); + end; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TLogin'} {$ENDIF} + +{ TLogin } + +constructor TUCLogin.Create(AOwner: TComponent); +begin + inherited Create; + AutoLogin := TUCAutoLogin.Create(nil); + InitialLogin := TUCInitialLogin.Create(nil); + if not AutoLogin.MessageOnError then + AutoLogin.MessageOnError := True; + + fDateExpireActive := False; { By Vicente Barros Leonel } + fDaysOfSunExpired := 30; { By Vicente Barros Leonel } +end; + +destructor TUCLogin.Destroy; +begin + SysUtils.FreeAndNil(Self.FAutoLogin); + SysUtils.FreeAndNil(Self.FInitialLogin); + + inherited Destroy; +end; + +procedure TUCLogin.Assign(Source: TPersistent); +begin + if Source is TUCLogin then + Self.MaxLoginAttempts := TUCLogin(Source).MaxLoginAttempts + else + inherited; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TPerfilUsuarios'} {$ENDIF} + +{ TPerfilUsuarios } + +constructor TUCUserProfile.Create(AOwner: TComponent); +begin + inherited Create; + Self.Active := True; +end; + +destructor TUCUserProfile.Destroy; +begin + inherited Destroy; +end; + +procedure TUCUserProfile.Assign(Source: TPersistent); +begin + if Source is TUCUserProfile then + Self.Active := TUCUserProfile(Source).Active + else + inherited; +end; + + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TTrocarSenha'} {$ENDIF} + +{ TTrocarSenha } + +procedure TUCUserPasswordChange.Assign(Source: TPersistent); +begin + if Source is TUCUserPasswordChange then + begin + Self.MenuItem := TUCUserPasswordChange(Source).MenuItem; + Self.Action := TUCUserPasswordChange(Source).Action; + Self.ForcePassword := TUCUserPasswordChange(Source).ForcePassword; + Self.MinPasswordLength := TUCUserPasswordChange(Source).MinPasswordLength; + end + else + inherited; +end; + +constructor TUCUserPasswordChange.Create(AOwner: TComponent); +begin + inherited Create; + Self.ForcePassword := False; +end; + +destructor TUCUserPasswordChange.Destroy; +begin + inherited Destroy; +end; + +procedure TUCUserPasswordChange.SetAction(const Value: TAction); +begin + FAction := Value; + if Value <> nil then + begin + Self.MenuItem := nil; + Value.FreeNotification(Self.Action); + end; +end; + +procedure TUCUserPasswordChange.SetMenuItem(const Value: TMenuItem); +begin + FMenuItem := Value; + if Value <> nil then + begin + Self.Action := nil; + Value.FreeNotification(Self.MenuItem); + end; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TInitialLogin'} {$ENDIF} + +{ TInitialLogin } + +procedure TUCInitialLogin.Assign(Source: TPersistent); +begin + if Source is TUCInitialLogin then + begin + Self.User := TUCInitialLogin(Source).User; + Self.Password := TUCInitialLogin(Source).Password; + end + else + inherited; +end; + +constructor TUCInitialLogin.Create(AOwner: TComponent); +begin + inherited Create; + FInitialRights := TStringList.Create; +end; + +destructor TUCInitialLogin.Destroy; +begin + if Assigned(Self.FInitialRights) then + Self.InitialRights.Free; + inherited Destroy; +end; + +procedure TUCInitialLogin.SetInitialRights(const Value: TStrings); +begin + FInitialRights.Assign(Value); +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCControlRight'} {$ENDIF} + +{ TUCControlRight } + +procedure TUCControlRight.Assign(Source: TPersistent); +begin + if Source is TUCControlRight then + Self.ActionList := TUCControlRight(Source).ActionList + {.$IFDEF UCACTMANAGER} + {.$ENDIF} + else + inherited; +end; + +constructor TUCControlRight.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCControlRight.Destroy; +begin + inherited Destroy; +end; + +procedure TUCControlRight.SetActionList(const Value: TActionList); +begin + FActionList := Value; + if Value <> nil then + Value.FreeNotification(Self.ActionList); +end; + +{.$IFDEF UCACTMANAGER} +procedure TUCControlRight.SetActionMainMenuBar(const Value: TActionMainMenuBar); +begin + FActionMainMenuBar := Value; + if Value <> nil then + Value.FreeNotification(Self.ActionMainMenuBar); +end; + +procedure TUCControlRight.SetActionManager(const Value: TActionManager); +begin + FActionManager := Value; + if Value <> nil then + Value.FreeNotification(Self.ActionManager); +end; + +{.$ENDIF} + +procedure TUCControlRight.SetMainMenu(const Value: TMenu); +begin + FMainMenu := Value; + if Value <> nil then + Value.FreeNotification(Self.MainMenu); +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCAppMessage'} {$ENDIF} + +{ TUCAppMessage } + +procedure TUCApplicationMessage.CheckMessages; + + function FmtDtHr(dt: String): String; + begin + Result := Copy(dt, 7, 2) + '/' + Copy(dt, 5, 2) + '/' + Copy(dt, 1, 4) + ' ' + Copy(dt, 9, 2) + ':' + Copy(dt, 11, 2); + end; + +begin + if not FReady then + Exit; + + with Self.UserControl.DataConnector.UCGetSQLDataset('SELECT UCM.IdMsg, ' + + 'UCC.' + Self.UserControl.TableUsers.FieldUserName + ' AS De, ' + + 'UCC_1.' + Self.UserControl.TableUsers.FieldUserName + ' AS Para, ' + + 'UCM.Subject, ' + + 'UCM.Msg, ' + + 'UCM.DtSend, ' + + 'UCM.DtReceive ' + + 'FROM (' + Self.TableMessages + ' UCM INNER JOIN ' + Self.UserControl.TableUsers.TableName + ' UCC ON UCM.UsrFrom = UCC.' + Self.UserControl.TableUsers.FieldUserID + ') INNER JOIN ' + + Self.UserControl.TableUsers.TableName + ' UCC_1 ON UCM.UsrTo = UCC_1.' + Self.UserControl.TableUsers.FieldUserID + ' where UCM.DtReceive is NULL and UCM.UsrTo = ' + IntToStr(Self.UserControl.CurrentUser.UserID)) do + begin + while not EOF do + begin + MsgRecForm := TMsgRecForm.Create(Self); + MsgRecForm.stDe.Caption := FieldByName('De').AsString; + MsgRecForm.stData.Caption := FmtDtHr(FieldByName('DtSend').AsString); + MsgRecForm.stAssunto.Caption := FieldByName('Subject').AsString; + MsgRecForm.MemoMsg.Text := FieldByName('msg').AsString; + if Assigned(Self.UserControl.DataConnector) then + Self.UserControl.DataConnector.UCExecSQL('Update ' + Self.TableMessages + ' set DtReceive = ' + + QuotedStr(FormatDateTime('YYYYMMDDhhmm', now)) + + ' Where idMsg = ' + FieldByName('idMsg').AsString); + MsgRecForm.Show; + Next; + end; + Close; + Free; + end; +end; + +constructor TUCApplicationMessage.Create(AOWner: TComponent); +begin + inherited Create(AOWner); + FReady := False; + if csDesigning in ComponentState then + begin + if Self.TableMessages = '' then + Self.TableMessages := 'UCTABMESSAGES'; + Interval := 60000; + Active := True; + end; + Self.FVerifThread := TUCVerificaMensagemThread.Create(False); + Self.FVerifThread.AOwner := Self; + Self.FVerifThread.FreeOnTerminate := True; +end; + +destructor TUCApplicationMessage.Destroy; +begin + + if not (csDesigning in ComponentState) then + if Assigned(UserControl) then + Usercontrol.DeleteLoginMonitor(Self); + + Self.FVerifThread.Terminate; + // FreeAndNil(FVerifThread); + inherited Destroy; +end; + +procedure TUCApplicationMessage.DeleteAppMessage(IdMsg: Integer); +begin + if MessageDlg(FUserControl.UserSettings.AppMessages.MsgsForm_PromptDelete, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then + Exit; + if Assigned(UserControl.DataConnector) then + UserControl.DataConnector.UCExecSQL('Delete from ' + TableMessages + ' where IdMsg = ' + IntToStr(idMsg)); +end; + +procedure TUCApplicationMessage.Loaded; +begin + inherited; + if not (csDesigning in ComponentState) then + begin + if not Assigned(FUserControl) then + raise Exception.Create('Component UserControl not defined!'); + Usercontrol.AddLoginMonitor(Self); + if not FUserControl.DataConnector.UCFindTable(TableMessages) then + FUserControl.CriaTabelaMsgs(TableMessages); + end; + FReady := True; +end; + +procedure TUCApplicationMessage.Notification(AComponent: TComponent; AOperation: TOperation); +begin + if AOperation = opRemove then + if AComponent = FUserControl then + FUserControl := nil; + inherited Notification(AComponent, AOperation); +end; + +procedure TUCApplicationMessage.SendAppMessage(ToUser: Integer; Subject, Msg: String); +var + UltId: Integer; +begin + with UserControl.DataConnector.UCGetSQLDataset('Select Max(idMsg) as nr from ' + TableMessages) do + begin + UltID := FieldByName('nr').AsInteger + 1; + Close; + Free; + end; + if Assigned(UserControl.DataConnector) then + UserControl.DataConnector.UCExecSQL('Insert into ' + TableMessages + '( idMsg, UsrFrom, UsrTo, Subject, Msg, DtSend) Values (' + + IntToStr(UltId) + ', ' + + IntToStr(UserControl.CurrentUser.UserID) + ', ' + + IntToStr(toUser) + ', ' + + QuotedStr(Subject) + ', ' + + QuotedStr(Msg) + ', ' + + QuotedStr(FormatDateTime('YYYYMMDDHHMM', now)) + ')'); + +end; + +procedure TUCApplicationMessage.SetActive(const Value: Boolean); +begin + FActive := Value; + if (csDesigning in ComponentState) then + Exit; + if FActive then + FVerifThread.Resume + else + FVerifThread.Suspend; +end; + +procedure TUCApplicationMessage.SetUserControl(const Value: TUserControl); +begin + FUserControl := Value; + if Value <> nil then + Value.FreeNotification(self); +end; + +procedure TUCApplicationMessage.ShowMessages; +begin + try + MsgsForm := TMsgsForm.Create(self); + with FUserControl.UserSettings.AppMessages do + begin + MsgsForm.Caption := MsgsForm_WindowCaption; + MsgsForm.btnova.Caption := MsgsForm_BtNew; + MsgsForm.btResponder.Caption := MsgsForm_BtReplay; + MsgsForm.btEncaminhar.Caption := MsgsForm_BtForward; + MsgsForm.btExcluir.Caption := MsgsForm_BtDelete; + MsgsForm.btClose.Caption := MsgsForm_BtClose; + + MsgsForm.ListView1.Columns[0].Caption := MsgsForm_ColFrom; + MsgsForm.ListView1.Columns[1].Caption := MsgsForm_ColSubject; + MsgsForm.ListView1.Columns[2].Caption := MsgsForm_ColDate; + end; + + MsgsForm.DSMsgs := UserControl.DataConnector.UCGetSQLDataset('SELECT UCM.IdMsg, UCM.UsrFrom, UCC.' + Self.UserControl.TableUsers.FieldUserName + ' AS De, UCC_1.' + Self.UserControl.TableUsers.FieldUserName + ' AS Para, UCM.Subject, UCM.Msg, UCM.DtSend, UCM.DtReceive ' + + 'FROM (' + TableMessages + ' UCM INNER JOIN ' + UserControl.TableUsers.TableName + ' UCC ON UCM.UsrFrom = UCC.' + Self.UserControl.TableUsers.FieldUserID + ') ' + + ' INNER JOIN ' + UserControl.TableUsers.TableName + ' UCC_1 ON UCM.UsrTo = UCC_1.' + Self.UserControl.TableUsers.FieldUserID + ' WHERE UCM.UsrTo = ' + IntToStr(UserControl.CurrentUser.UserID) + ' ORDER BY UCM.DtReceive DESC'); + MsgsForm.DSMsgs.Open; + MsgsForm.DSUsuarios := UserControl.DataConnector.UCGetSQLDataset('SELECT ' + + UserControl.TableUsers.FieldUserID + ' as idUser, ' + + UserControl.TableUsers.FieldLogin + ' as Login, ' + + UserControl.TableUsers.FieldUserName + ' as Nome, ' + + UserControl.TableUsers.FieldPassword + ' as Senha, ' + + UserControl.TableUsers.FieldEmail + ' as Email, ' + + UserControl.TableUsers.FieldPrivileged + ' as Privilegiado, ' + + UserControl.TableUsers.FieldTypeRec + ' as Tipo, ' + + UserControl.TableUsers.FieldProfile + ' as Perfil ' + + ' FROM ' + UserControl.TableUsers.TableName + + ' WHERE ' + UserControl.TableUsers.FieldUserID + ' <> ' + IntToStr(UserControl.CurrentUser.UserID) + + ' AND ' + UserControl.TableUsers.FieldTypeRec + ' = ' + QuotedStr('U') + + ' ORDER BY ' + UserControl.TableUsers.FieldUserName); + MsgsForm.DSUsuarios.Open; + + MsgsForm.Position := Self.FUserControl.UserSettings.WindowsPosition; + MsgsForm.ShowModal; + finally + end; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TVerifThread'} {$ENDIF} + +{ TVerifThread } + +procedure TUCVerificaMensagemThread.Execute; +begin + if (Assigned(TUCApplicationMessage(AOwner).UserControl)) and (TUCApplicationMessage(AOwner).UserControl.CurrentUser.UserID <> 0) then + Synchronize(VerNovaMansagem); + Sleep(TUCApplicationMessage(AOwner).Interval); +end; + +procedure TUCVerificaMensagemThread.VerNovaMansagem; +begin + TUCApplicationMessage(AOwner).CheckMessages; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCCollectionItem'} {$ENDIF} + +{ TUCCollectionItem } + +function TUCExtraRightsItem.GetDisplayName: String; +begin + Result := FormName + '.' + CompName; + if Result = '' then + Result := inherited GetDisplayName; +end; + +procedure TUCExtraRightsItem.SetFormName(const Value: String); +begin + if FFormName <> Value then + FFormName := Value; +end; + +procedure TUCExtraRightsItem.SetCompName(const Value: String); +begin + if FCompName <> Value then + FCompName := Value; +end; + +procedure TUCExtraRightsItem.SetCaption(const Value: String); +begin + if FCaption <> Value then + FCaption := Value; +end; + +procedure TUCExtraRightsItem.SetGroupName(const Value: String); +begin + if FGroupName <> Value then + FGroupname := Value; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCCollection'} {$ENDIF} + +{ TUCCollection } + +constructor TUCExtraRights.Create(UCBase: TUserControl); +begin + inherited Create(TUCExtraRightsItem); + FUCBase := UCBase; +end; + +function TUCExtraRights.Add: TUCExtraRightsItem; +begin + Result := TUCExtraRightsItem(inherited Add); +end; + +function TUCExtraRights.GetItem(Index: Integer): TUCExtraRightsItem; +begin + Result := TUCExtraRightsItem(inherited GetItem(Index)); +end; + +procedure TUCExtraRights.SetItem(Index: Integer; Value: TUCExtraRightsItem); +begin + inherited SetItem(Index, Value); +end; + +function TUCExtraRights.GetOwner: TPersistent; +begin + Result := FUCBase; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCRun'} {$ENDIF} + +{ TUCRun } + +procedure TUCExecuteThread.Execute; +begin + while not self.Terminated do + begin + if TUserControl(AOwner).DataConnector.UCFindDataConnection then + Synchronize(UCStart); + Sleep(50); + end; +end; + +procedure TUCExecuteThread.UCStart; +begin + TUserControl(AOwner).Execute; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUControls'} {$ENDIF} + +{ TUCControls } + +function TUCControls.GetActiveForm: String; +begin + Result := Owner.Name; +end; + +function TUCControls.GetAccessType: String; +begin + if not Assigned(UserControl) then + Result := '' + else + Result := UserControl.ClassName; +end; + +procedure TUCControls.ListComponents(Form: String; List: TStrings); +var + Contador: Integer; +begin + List.Clear; + if not Assigned(UserControl) then + Exit; + for Contador := 0 to Pred(UserControl.ExtraRights.Count) do + if UpperCase(UserControl.ExtraRights[Contador].FormName) = UpperCase(Form) then + List.Append(UserControl.ExtraRights[Contador].CompName); +end; + +procedure TUCControls.ApplyRights; +var + FListObj: TStringList; + TempDS: TDataset; + Contador: Integer; + SQLStmt: String; + ExisteObj: Boolean; + String1: String; + String2: String; +begin + // Apply Extra Rights + + if not Assigned(UserControl) then + Exit; + with UserControl do + begin + if (UserControl.LoginMode = lmActive) and (CurrentUser.UserID = 0) then + Exit; + + FListObj := TStringList.Create; + Self.ListComponents(Self.Owner.Name, FListObj); + + if UserControl.DataConnector.UCFindDataConnection then + begin + // permissoes do usuario + SQLStmt := Format('SELECT %s AS UserID,' + + ' %s AS ObjName,' + + ' %s AS UCKey ' + + 'FROM %sEX ' + + 'WHERE %s = %d AND ' + + ' %s = %s AND ' + + ' %s = %s', + [TableRights.FieldUserID, + TableRights.FieldComponentName, + TableRights.FieldKey, + TableRights.TableName, + TableRights.FieldUserID, + CurrentUser.UserID, + TableRights.FieldModule, + QuotedStr(ApplicationID), + TableRights.FieldFormName, + QuotedStr(Self.Owner.Name)]); + + TempDS := DataConnector.UCGetSQLDataset(SQLStmt); + + for Contador := 0 to Pred(FListObj.Count) do + begin + UnlockEX(TCustomForm(Self.Owner), FListObj[Contador]); + + ExisteObj := (TempDS.Locate('ObjName', FListObj[Contador], [])); + + case Self.UserControl.Criptografia of + cPadrao: + begin + String1 := Decrypt(TempDS.FieldByName('UCKey').AsString, EncryptKey); + String2 := TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString; + end; + cMD5: + begin + String1 := TempDS.FieldByName('UCKey').AsString; + String2 := MD5Sum(TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString); + end; + end; + + if not ExisteObj or (String1 <> String2) then + LockEX(TCustomForm(Self.Owner), FListObj[Contador], NotAllowed = naInvisible); + end; + TempDS.Close; + + //permissoes do grupo + SQLStmt := Format('SELECT' + + ' %s AS UserID,' + + ' %s AS ObjName,' + + ' %s AS UCKey ' + + 'FROM %sEX ' + + 'WHERE %s = %d AND ' + + ' %s = %s AND ' + + ' %s = %s', + [TableRights.FieldUserID, + TableRights.FieldComponentName, + TableRights.FieldKey, + TableRights.TableName, + TableRights.FieldUserID, + CurrentUser.Profile, + TableRights.FieldModule, + QuotedStr(ApplicationID), + TableRights.FieldFormName, + QuotedStr(Self.Owner.Name)]); + + TempDS := DataConnector.UCGetSQLDataset(SQLStmt); + + for contador := 0 to Pred(FListObj.Count) do + begin + ExisteObj := (TempDS.Locate('ObjName', FListObj[Contador], [])); + + case Self.UserControl.Criptografia of + cPadrao: + begin + String1 := Decrypt(TempDS.FieldByName('UCKey').AsString, EncryptKey); + String2 := TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString; + end; + cMD5: + begin + String1 := TempDS.FieldByName('UCKey').AsString; + String2 := MD5Sum(TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString); + end; + end; + + if ExisteObj and (String1 = String2) then + UnlockEX(TCustomForm(Self.Owner), FListObj[Contador]); + end; + TempDS.Close; + end + else + LockControls; + end; + + FreeAndNil(FListObj); +end; + +procedure TUCControls.LockControls; +var + Contador: Integer; + FListObj: TStringList; +begin + FListObj := TStringList.Create; + Self.ListComponents(Self.Owner.Name, FListObj); + for Contador := 0 to Pred(FListObj.Count) do + UserControl.LockEX(TCustomForm(Self.Owner), FListObj[Contador], NotAllowed = naInvisible); + FreeAndNil(FListObj); +end; + +procedure TUCControls.Loaded; +begin + inherited; + if not (csDesigning in ComponentState) then + begin + ApplyRights; + UserControl.AddUCControlMonitor(Self); + end; +end; + +procedure TUCControls.SetGroupName(const Value: String); +var + Contador: Integer; +begin + if FGroupName = Value then + Exit; + FGroupName := Value; + if Assigned(UserControl) then + for Contador := 0 to Pred(UserControl.ExtraRights.Count) do + if UpperCase(UserControl.ExtraRights[Contador].FormName) = UpperCase(Owner.Name) then + UserControl.ExtraRights[Contador].GroupName := Value; +end; + +destructor TUCControls.Destroy; +begin + if not (csDesigning in ComponentState) then + if Assigned(UserControl) then + UserControl.DeleteUCControlMonitor(Self); + + inherited Destroy; +end; + +procedure TUCControls.SetUserControl(const Value: TUserControl); +begin + FUserControl := Value; + if Value <> nil then + Value.FreeNotification(self.UserControl); +end; + +procedure TUCControls.Notification(AComponent: TComponent; AOperation: TOperation); +begin + if AOperation = opRemove then + if AComponent = FUserControl then + FUserControl := nil; + + inherited Notification(AComponent, AOperation); +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCGUID'} {$ENDIF} + +{ TUCGUID } + +class function TUCGUID.EmptyGUID: TGUID; +begin + Result := FromString('{00000000-0000-0000-0000-000000000000}'); +end; + +class function TUCGUID.EqualGUIDs(GUID1, GUID2: TGUID): Boolean; +begin + Result := IsEqualGUID(Guid1, Guid2); +end; + +class function TUCGUID.FromString(Value: String): TGUID; +begin + Result := StringToGuid(Value); +end; + +class function TUCGUID.IsEmptyGUID(GUID: TGUID): Boolean; +begin + Result := EqualGuids(Guid, EmptyGuid); +end; + +class function TUCGUID.NovoGUID: TGUID; +var + GUID: TGUID; +begin + CreateGUID(GUID); + Result := GUID; +end; + +class function TUCGUID.NovoGUIDString: String; +begin + Result := ToString(NovoGUID); +end; + +class function TUCGUID.ToQuotedString(GUID: TGUID): String; +begin + Result := QuotedStr(ToString(Guid)); +end; + +class function TUCGUID.ToString(GUID: TGUID): String; +begin + Result := GuidToString(Guid); +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUSERLOGGED'} {$ENDIF} +{ TUserLogged } + +procedure TUCUsersLogged.AddCurrentUser; +var + SQLStmt: String; +begin + if not Active then + Exit; + + with FUserControl do + begin + CurrentUser.IDLogon := TUCGUID.NovoGUIDString; + SQLStmt := Format('INSERT INTO %s (%s, %s, %s, %s, %s) Values( %s, %d, %s, %s, %s)', + [TableUsersLogged.TableName, + TableUsersLogged.FieldLogonID, + TableUsersLogged.FieldUserID, + TableUsersLogged.FieldApplicationID, + TableUsersLogged.FieldMachineName, + TableUsersLogged.FieldData, + QuotedStr(CurrentUser.IDLogon), + CurrentUser.UserID, + QuotedStr(ApplicationID), + QuotedStr(GetLocalComputerName), + QuotedStr(FormatDateTime('dd/mm/yy hh:mm', now))]); + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); + end; +end; + +procedure TUCUsersLogged.Assign(Source: TPersistent); +begin + if Source is TUCUsersLogged then + begin + Self.Active := TUCUsersLogged(Source).Active; + Self.MultipleLogin := TUCUsersLogged(Source).MultipleLogin; + end + else + inherited; +end; + +constructor TUCUsersLogged.Create(AOwner: TComponent); +begin + inherited Create; + FUserControl := TUserControl(AOwner); + Self.FAtive := True; + Self.fMultipleLogin := True; +end; + +procedure TUCUsersLogged.CriaTableUserLogado; +var + SQLStmt: String; +begin + if not Active then + Exit; + + with FUserControl.TableUsersLogged do + SQLStmt := Format('CREATE TABLE %s (%s %s(38), %s %s, %s %s(50), %s %s(50), %s %s(14))', + [TableName, + FieldLogonID, + FUserControl.UserSettings.Type_Char, + + FieldUserID, + FUserControl.UserSettings.Type_Int, + + FieldApplicationID, + FUserControl.UserSettings.Type_VarChar, + + FieldMachineName, + FUserControl.UserSettings.Type_VarChar, + + FieldData, + FUserControl.UserSettings.Type_VarChar]); + if Assigned(FUserControl.DataConnector) then + FUserControl.DataConnector.UCExecSQL(SQLStmt); +end; + +procedure TUCUsersLogged.DelCurrentUser; +var + SQLStmt: String; +begin + if not Active then + Exit; + + if Assigned(FUserControl.DataConnector) = False then + Exit; + + with FUserControl do + begin + SQLStmt := Format('DELETE FROM %s WHERE %s = %s', + [TableUsersLogged.TableName, + TableUsersLogged.FieldLogonID, + QuotedStr(CurrentUser.IdLogon)]); + + if Assigned(DataConnector) then + DataConnector.UCExecSQL(SQLStmt); + end; +end; + +destructor TUCUsersLogged.Destroy; +begin + inherited Destroy; +end; + +function TUCUsersLogged.UsuarioJaLogado(ID: Integer): Boolean; +var + SQLStmt: String; + FDataset: TDataset; +begin + Result := False; + if Assigned(FUserControl.DataConnector) = False then + Exit; + + with FUserControl do + begin + SQLStmt := Format('SELECT * FROM %s WHERE %s = %s', + [TableUsersLogged.TableName, + TableUsersLogged.FieldUserID, + QuotedStr(IntToStr(ID))]); + + if Assigned(DataConnector) then + begin + fDataSet := DataConnector.UCGetSQLDataset(SQLStmt); + Result := not (fDataSet.IsEmpty); + end; + end; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCUserLogoff'} {$ENDIF} + +{ TUCUserLogoff Por Vicente Barros Leonel } + +procedure TUCUserLogoff.Assign(Source: TPersistent); +begin + if Source is TUCUserLogoff then + begin + Self.MenuItem := TUCUserLogoff(Source).MenuItem; + Self.Action := TUCUserLogoff(Source).Action; + end + else + inherited; +end; + +constructor TUCUserLogoff.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCUserLogoff.Destroy; +begin + inherited Destroy; +end; + +procedure TUCUserLogoff.SetAction(const Value: TAction); +begin + FAction := Value; + if Value <> nil then + begin + Self.MenuItem := nil; + Value.FreeNotification(Self.Action); + end; +end; + +procedure TUCUserLogoff.SetMenuItem(const Value: TMenuItem); +begin + FMenuItem := Value; + if Value <> nil then + begin + Self.Action := nil; + Value.FreeNotification(Self.MenuItem); + end; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCCurrentUser'} {$ENDIF} +{ TUCCurrentUser } + +constructor TUCCurrentUser.Create(AOwner: TComponent); +begin + inherited Create(AOwner); +end; + +destructor TUCCurrentUser.Destroy; +begin + if Assigned(FPerfilUsuario) then + SysUtils.FreeAndNil(FPerfilUsuario); + if Assigned(FPerfilGrupo) then + SysUtils.FreeAndNil(FPerfilGrupo); + inherited; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +end. diff --git a/internal/2.31RC1/1/Source/UCDataConnector.pas b/internal/2.31RC1/1/Source/UCDataConnector.pas new file mode 100644 index 0000000..5c73a01 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCDataConnector.pas @@ -0,0 +1,25 @@ +unit UCDataConnector; + +interface + +{.$I 'UserControl.inc'} + +uses + Classes, + DB; + +type + TUCDataConnector = class(TComponent) + public + procedure UCExecSQL(FSQL: String); virtual; abstract; + function UCGetSQLDataset(FSQL: String): TDataset; dynamic; abstract; + function UCFindTable(const Tablename: String): Boolean; virtual; abstract; + function UCFindDataConnection: Boolean; virtual; abstract; + function GetDBObjectName: String; virtual; abstract; + function GetTransObjectName: String; virtual; abstract; + end; + +implementation + +end. + diff --git a/internal/2.31RC1/1/Source/UCDataInfo.pas b/internal/2.31RC1/1/Source/UCDataInfo.pas new file mode 100644 index 0000000..3ac4572 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCDataInfo.pas @@ -0,0 +1,247 @@ +unit UCDataInfo; + +interface + +uses + Classes; + +type + TUCTableUsers = class(TPersistent) + private + FEmail: String; + FTypeRec: String; + FUserID: String; + FPrivileged: String; + FUserName: String; + FTable: String; + FProfile: String; + FLogin: String; + FPassword: String; + FKey: String; + fDateExpired: String; + fUserExpired: String; + fFieldUserDaysSun: String; + fFieldUserInative: String; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property FieldUserID: String read FUserID write FUserID; + property FieldUserName: String read FUserName write FUserName; + property FieldLogin: String read FLogin write FLogin; + property FieldPassword: String read FPassword write FPassword; + property FieldEmail: String read FEmail write FEmail; + property FieldPrivileged: String read FPrivileged write FPrivileged; + property FieldTypeRec: String read FTypeRec write FTypeRec; + property FieldProfile: String read FProfile write FProfile; + property FieldKey: String read FKey write FKey; + property FieldDateExpired: String read fDateExpired write fDateExpired; { By Vicente Barros Leonel } + property FieldUserExpired: String read fUserExpired write fUserExpired; { By vicente barros leonel } + property FieldUserDaysSun: String read fFieldUserDaysSun write fFieldUserDaysSun; { By vicente barros leonel } + property FieldUserInative: String read fFieldUserInative write fFieldUserInative; { By vicente barros leonel } + property TableName: String read FTable write FTable; + end; + + TUCTableRights = class(TPersistent) + private + FUserID: String; + FFormName: String; + FModule: String; + FTable: String; + FComponentName: String; + FKey: String; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property FieldUserID: String read FUserID write FUserID; + property FieldModule: String read FModule write FModule; + property FieldComponentName: String read FComponentName write FComponentName; + property FieldFormName: String read FFormName write FFormName; + property FieldKey: String read FKey write FKey; + property TableName: String read FTable write FTable; + end; + + TUCTableUsersLogged = class(TPersistent) + private + FTableName: String; + FData: String; + FApplicationID: String; + FUserID: String; + FLogonID: String; + FMachineName: String; + { private declarations } + protected + { protected declarations } + public + { public declarations } + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + { published declarations } + property FieldLogonID: String read FLogonID write FLogonID; + property FieldUserID: String read FUserID write FUserID; + property FieldApplicationID: String read FApplicationID write FApplicationID; + property FieldMachineName: String read FMachineName write FMachineName; + property FieldData: String read FData write FData; + property TableName: String read FTableName write FTableName; + end; + + TUCTableHistorico = class(TPersistent) + private + FTable: String; + FApplicationID: String; + FUserID: String; + fDateEvent: String; + fFieldForm: String; + fFieldEvent: String; + fFieldObs: String; + fCaptionForm: string; + fEventTime: String; + fFieldTableName: String; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property TableName : String read FTable write FTable; // nome da tabela + property FieldApplicationID : String read FApplicationID write FApplicationID; + property FieldUserID : String read FUserID write FUserID; + property FieldEventDate : String read fDateEvent write fDateEvent; + property FieldEventTime : String read fEventTime Write fEventTime; + property FieldForm : String read fFieldForm write fFieldForm; + property FieldCaptionForm : string read fCaptionForm write fCaptionForm; + Property FieldEvent : String read fFieldEvent write fFieldEvent; + property FieldObs : String read fFieldObs write fFieldObs; + property FieldTableName : String read fFieldTableName write fFieldTableName; // grava o nome da tabela monitorada + end; + +implementation + +{ TUCTableRights } + +procedure TUCTableRights.Assign(Source: TPersistent); +begin + if Source is TUCTableRights then + begin + Self.FieldUserID := TUCTableRights(Source).FieldUserID; + Self.FieldModule := TUCTableRights(Source).FieldModule; + Self.FieldComponentName := TUCTableRights(Source).FieldComponentName; + Self.FieldFormName := TUCTableRights(Source).FieldFormName; + Self.FieldKey := TUCTableRights(Source).FieldKey; + end + else + inherited; +end; + +constructor TUCTableRights.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCTableRights.Destroy; +begin + + inherited; +end; + +{ TUCTableUsers } + +procedure TUCTableUsers.Assign(Source: TPersistent); +begin + if Source is TUCTableUsers then + begin + Self.FieldUserID := TUCTableUsers(Source).FieldUserID; + Self.FieldUserName := TUCTableUsers(Source).FieldUserName; + Self.FieldLogin := TUCTableUsers(Source).FieldLogin; + Self.FieldPassword := TUCTableUsers(Source).FieldPassword; + Self.FieldEmail := TUCTableUsers(Source).FieldEmail; + Self.FieldPrivileged := TUCTableUsers(Source).FieldPrivileged; + Self.FieldProfile := TUCTableUsers(Source).FieldProfile; + Self.FieldKey := TUCTableUsers(Source).FieldKey; + Self.FieldDateExpired := TUCTableUsers(Source).FieldDateExpired; {By Vicente Barros Leonel} + Self.FieldUserExpired := TUCTableUsers(Source).FieldUserExpired; {By Vicente Barros Leonel} + Self.FieldUserDaysSun := TUCTableUsers(Source).FieldUserDaysSun; { By vicente barros leonel } + Self.FieldUserInative := TUCTableUsers(Source).FieldUserInative; { By vicente barros leonel } + Self.TableName := TUCTableUsers(Source).TableName; + end + else + inherited; +end; + +constructor TUCTableUsers.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCTableUsers.Destroy; +begin + inherited; +end; + +{ TUCTableUsersLogged } + +procedure TUCTableUsersLogged.Assign(Source: TPersistent); +begin + if Source is TUCTableUsersLogged then + begin + Self.FieldLogonID := TUCTableUsersLogged(Source).FieldLogonID; + Self.FieldUserID := TUCTableUsersLogged(Source).FieldUserID; + Self.FieldApplicationID := TUCTableUsersLogged(Source).FieldApplicationID; + Self.FieldMachineName := TUCTableUsersLogged(Source).FieldMachineName; + Self.FieldData := TUCTableUsersLogged(Source).FieldData; + Self.TableName := TUCTableUsersLogged(Source).TableName; + end + else + inherited; +end; + +constructor TUCTableUsersLogged.Create(AOwner: TComponent); +begin + +end; + +destructor TUCTableUsersLogged.Destroy; +begin + inherited; +end; + +{ TUCTableHistorico } + +procedure TUCTableHistorico.Assign(Source: TPersistent); +begin + if Source is TUCTableHistorico then + begin + Self.FieldApplicationID := TUCTableHistorico(Source).FieldApplicationID; + Self.FieldUserID := TUCTableHistorico(Source).FieldUserID; + Self.FieldEventDate := TUCTableHistorico(Source).FieldEventDate; + Self.TableName := TUCTableHistorico(Source).TableName; + Self.FieldForm := TUCTableHistorico(Source).FieldForm; + Self.FieldEvent := TUCTableHistorico(Source).FieldEvent; + Self.FieldObs := TUCTableHistorico(Source).FieldObs; + Self.FieldCaptionForm := TUCTableHistorico(Source).FieldCaptionForm; + Self.FieldEventTime := TUCTableHistorico(Source).FieldEventTime; + Self.FieldTableName := TUCTableHistorico(Source).FieldTableName; + end + else + inherited; +end; + +constructor TUCTableHistorico.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCTableHistorico.Destroy; +begin + inherited; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/UCEMailForm_U.dfm b/internal/2.31RC1/1/Source/UCEMailForm_U.dfm new file mode 100644 index 0000000..2abfdac --- /dev/null +++ b/internal/2.31RC1/1/Source/UCEMailForm_U.dfm @@ -0,0 +1,151 @@ +object UCEMailForm: TUCEMailForm + Left = 450 + Top = 464 + BorderStyle = bsDialog + Caption = 'Envio de Email' + ClientHeight = 34 + ClientWidth = 303 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 303 + Height = 34 + Align = alClient + BevelOuter = bvLowered + Color = clWhite + TabOrder = 0 + object img: TImage + Left = 8 + Top = 3 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098300000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF009830000098300000FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D76733009830000098300000983000009830000098300000DB8D + 630098300000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7673300FBC4A100FFB3 + 8B00FCAF8800F8AB8300F0A27A00E89A7100E092680098300000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00D7673300FBC4A100FFB38B00FFB38B00FFB38B00F8AB8300F0A2 + 7A00E89A7100E092680098300000FFFFFF00C7B2A30069473100694731006947 + 3100694731006947310069473100694731006947310069473100694731006947 + 310069473100694731006947310069473100B7A29300D7673300FBC4A100FFB3 + 8B00FFB38B00FFB38B00FFB38B00F8AB8300F0A27A00E89A7100E09268009830 + 0000C7B2A300DBC9BF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2 + 9300DDC5C200D7673300FBC4A100FFB38B00FFB38B00FFB38B00FFB38B00FFB3 + 8B00F8AB8300F0A27A0098300000FFFFFF00C7B2A300DBC9BF00B7A29300E4D7 + CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7 + CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00D7673300FBC4A100FBC4 + A100FBC4A100FBC4A100FBC4A100FBC4A100FFB38B0098300000FFFFFF00FFFF + FF00C7B2A300DECEC500DECEC500B7A29300E9DED700E9DED700E9DED700E9DE + D700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DE + D700E9DED700D7673300D7673300D7673300D7673300D7673300D7673300FBC4 + A10098300000FFFFFF00FFFFFF00FFFFFF00C7B2A300E2D4CC00E2D4CC00E2D4 + CC00B7A29300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4 + DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4 + DF00DDC5C200E2D4CC00D767330098300000B7A29300FFFFFF00FFFFFF00FFFF + FF00C7B2A300E6D9D200E6D9D200E6D9D200E6D9D200B7A29300F0E9E500F0E9 + E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9 + E500F0E9E500F0E9E500F0E9E500B7A29300E6D9D200E6D9D20098300000DDC5 + C20069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300EADFD900EADFD900EADF + D900EADFD900EADFD900B7A29300F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EF + EC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00B7A29300EADF + D900EADFD900EADFD900EADFD900B7A2930069473100FFFFFF00FFFFFF00FFFF + FF00C7B2A300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A2 + 9300F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4 + F200F8F4F200B7A29300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A2 + 930069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300F0E8E400F0E8E400F0E8 + E400F0E8E400F0E8E400F0E8E400B7A29300B7A29300FCFAF900FCFAF900FCFA + F900FCFAF900FCFAF900FCFAF900FCFAF900B7A29300B7A29300F0E8E400F0E8 + E400F0E8E400F0E8E400F0E8E400B7A2930069473100FFFFFF00FFFFFF00FFFF + FF00C7B2A300F3EDE900F3EDE900F3EDE900F3EDE900F3EDE900B7A29300DDC5 + C200DDC5C200B7A29300DDC5C200FFFFFF00FFFFFF00FFFFFF00DDC5C200B7A2 + 9300DDC5C200DDC5C200B7A29300F3EDE900F3EDE900F3EDE900F3EDE900B7A2 + 930069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300F6F1EF00F6F1EF00F6F1 + EF00F6F1EF00B7A29300DDC5C200AFE0FB00A7DDFB00A0DAFC00C7B2A300B7A2 + 9300B7A29300B7A29300C7B2A300DDC5C2006AC4FD0062C0FD005ABDFD00B7A2 + 9300F6F1EF00F6F1EF00F6F1EF00B7A2930069473100FFFFFF00FFFFFF00FFFF + FF00C7B2A300F9F6F400F9F6F400F9F6F400B7A29300DDC5C200BDE7FB00B6E3 + FB00AFE0FB00A7DDFB00A0DAFC0099D7FC0091D4FC008AD1FC0082CEFC007ACA + FD0072C7FD006AC4FD0062C0FD005ABDFD00B7A29300F9F6F400F9F6F400B7A2 + 930069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300FCFBFA00FCFBFA00B7A2 + 9300C8B3A400CCEDFA00C5EAFB00BDE7FB00B6E3FB00AFE0FB00A7DDFB00A0DA + FC0099D7FC0091D4FC008AD1FC0082CEFC007ACAFD0072C7FD006AC4FD0062C0 + FD005ABDFD00B7A29300FCFBFA00B7A2930069473100FFFFFF00FFFFFF00FFFF + FF00C7B2A300FFFFFF00B8A39400DDC5C200DBF3FA00D3F0FA00CCEDFA00C5EA + FB00BDE7FB00B6E3FB00AFE0FB00A7DDFB00A0DAFC0099D7FC0091D4FC008AD1 + FC0082CEFC007ACAFD0072C7FD006AC4FD0062C0FD005ABDFD00B7A29300FFFF + FF0069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300B7A29300DDC5C200DBF3 + FA00DBF3FA00DBF3FA00D3F0FA00CCEDFA00C5EAFB00BDE7FB00B6E3FB00AFE0 + FB00A7DDFB00A0DAFC0099D7FC0091D4FC008AD1FC0082CEFC007ACAFD0072C7 + FD006AC4FD0062C0FD005ABDFD00B7A2930069473100FFFFFF00FFFFFF00FFFF + FF00FFFFFF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2 + FA00D0EFFA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00A7DDFB00A0DAFC0099D7 + FC0091D4FC008AD1FC0082CEFC007ACAFD0072C7FD006AC4FD0062C0FD00B7A2 + 930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DBF3 + FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EFFA00C8EBFA00C1E8 + FB00BAE5FB00B2E2FB00ABDFFB00A4DBFC009CD8FC0095D6FC008ED3FC0086CF + FC007ECCFD0076C9FD00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3 + FA00DBF3FA00D7F2FA00D0EFFA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00ABDF + FB00A4DBFC009CD8FC0095D6FC008ED3FC0086CFFC00BCA7980069473100FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EF + FA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00ABDFFB00A4DBFC009CD8FC0095D6 + FC00BBA6970073533E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DBF3FA00DBF3 + FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EFFA00C8EBFA00C1E8FB00BAE5 + FB00B2E2FB00ABDFFB00A4DBFC00B7A2930069473100FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3 + FA00D7F2FA00D0EFFA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00B7A293006947 + 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2 + A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EFFA00C8EB + FA00C1E8FB00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300C7B2A300C7B2A300C7B2 + A300C7B2A300C7B2A300C7B2A300C7B2A300B7A2930069473100FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + object lbStatus: TLabel + Left = 48 + Top = 14 + Width = 66 + Height = 14 + Caption = 'Status email' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + end +end diff --git a/internal/2.31RC1/1/Source/UCEMailForm_U.pas b/internal/2.31RC1/1/Source/UCEMailForm_U.pas new file mode 100644 index 0000000..79101cb --- /dev/null +++ b/internal/2.31RC1/1/Source/UCEMailForm_U.pas @@ -0,0 +1,34 @@ +unit UCEMailForm_U; + +interface + +{$I 'UserControl.inc'} + +uses + Classes, + Controls, + ExtCtrls, + Forms, + Graphics, + StdCtrls; + +type + TUCEMailForm = class(TForm) + Panel1: TPanel; + img: TImage; + lbStatus: TLabel; + private + { Private declarations } + public + { Public declarations } + end; + +var + UCEMailForm: TUCEMailForm; + +implementation + +{$R *.dfm} + +end. + diff --git a/internal/2.31RC1/1/Source/UCEditorForm_U.dfm b/internal/2.31RC1/1/Source/UCEditorForm_U.dfm new file mode 100644 index 0000000..53cd4ad --- /dev/null +++ b/internal/2.31RC1/1/Source/UCEditorForm_U.dfm @@ -0,0 +1,1585 @@ +object UCEditorForm: TUCEditorForm + Left = 237 + Top = 128 + BorderStyle = bsDialog + Caption = 'Configura'#231#227'o UserControl' + ClientHeight = 524 + ClientWidth = 594 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poMainFormCenter + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object pnlBotoes: TPanel + Left = 0 + Top = 479 + Width = 594 + Height = 45 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + object btnOK: TBitBtn + Left = 219 + Top = 7 + Width = 75 + Height = 25 + TabOrder = 0 + Kind = bkOK + end + object btnClose: TBitBtn + Left = 299 + Top = 7 + Width = 75 + Height = 25 + Caption = '&Fechar' + TabOrder = 1 + Kind = bkClose + end + end + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 594 + Height = 73 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 1 + object lbComponente: TLabel + Left = 5 + Top = 27 + Width = 230 + Height = 19 + Alignment = taCenter + AutoSize = False + Caption = 'Configura'#231#227'o B'#225'sica' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -16 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 220 + Top = 0 + Width = 374 + Height = 73 + Align = alRight + AutoSize = True + Picture.Data = { + 0A544A504547496D616765FE200000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC00011080050017603012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD52 + DA2968A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2 + 800A28A280129314EA2801980690A8A7919A6918A0040A29703DE8A5C52B00A3 + 18A5A414B4C0422A3755352D3185260549A38D8739ACBBB82D70776EAD891335 + 977908C1AC66B4378339CBE834C19DFE67E15CF5F43A1027779D5D06A76FC371 + 5C86A96F8278AF36ABB743D3A4AFD4A772BE1B04EE37159D31F0B8CE5AE47E35 + 46FE2C678AE7EF58464F19AF32752DD11EA429DFED33A573E14EED723F1A88BF + 84FF00BD75F9D7097BAC476F9DD139C7A62B3EF3C516569A72DE3966466D8100 + F9B77A1F4AE7757FBA8E85497F333D2B7F84FF00BD75F9D1BFC27FDEBAFCEBC8 + 1BE22582FF00CBB5D9FA22FF00F1552699E3FD3753BF8ACD56686690E17CD500 + 13E9C1A9F6DFDD43F64BF999EB7BFC27FDEBAFCE8DFE13FEF5D7E75E47A87C43 + D1F4FBD92D5A5925963387F2937007D2A23F12F460325A751D7988D1EDBFBA83 + D92FE667B0EFF09FF7AEBF3A37F84FFBD75F9D7954FE39D1EDB4A8B507B922DE + 5E170A771F5E2AAC7F137C3EE3FE3EE45FADBC9FE147B6FEEA0F64BF999EBFBF + C27FDEBAFCE8DFE13FEF5D7E75E5FA678CB47D61E45B5BD5768D4BB0652B803A + 9E40A84F8FFC3C1CAFF6ADBE41C7DEA3DB7F7507B15FCCFEF3D5B7F84FFBD75F + 9D1BFC27FDEBAFCEBCD2CFC57A3DFCAB1C1A9DAC9231C2A0946E27D00A9E7D77 + 4DB598C336A16D14A3AA3CCA187E19A3DB7F7507B15FCCFEF3D1E27F0A6E386B + AE9EB4579D5BF88F4A0E4FF695A631FF003D97FC68AB557FBA84E8FF00799F6F + D14515F667C48578AFED47FB58F843F64AF0BE8FAEF8BEC757D42DB54BC36504 + 3A34514B287085CB1124B18DB85C6413C91C57B557E667FC16CF5069BC35F08B + 41882B5C5FEA779346A7824A2429D4F006661D7DBDE803F49347D622D6742B2D + 5638E5B782EAD92E563B850AE8ACA18061938201E79AF1CFD96BF6BDF08FED71 + A46BFA978434AD774DB5D1AE23B69DB5B82188C8EEA5BE4F2E59338039CE3A8E + B5DFFC43BB83C1DF077C4B72A425B697A15CC80C996C2476EC79EE785AFCB9FD + 85F46F88FF00F0EF5F8D3A97C286963F1B5C6BE21B56B363F6A31C515B3CC21F + 493CB91F6E3924903E6DB401FAF1457E7A7FC13CEC3C3BE25D3EC7C6F17C70F8 + 87ACF8CB44B694F8C3C19E24D51A4B7498C6EAE4DB3297DAAE772C9B9892B83B + 492A3C93E14FC51D5FF6CAD5BC69E37F1EF8B3E31693A1C7A8BD8E83A1FC32D3 + 2FDED2C91515834B25BC32234A1644E1BE6E493F2B28A00FD67A2BF29A4F8C1F + 1E3C3DFB0B7C7AB3F185CF8E344D47C2F7FA58F0D78BF58B6BBD2F52BCB59B50 + 4460257092310A9F31C96027DAC71815EFFF00B047C1DF889ACF87BC13F193C7 + FF00167C41E26BBD4745096DE1E9EE5E4B38ED9D0089E42CC77CC400ECE46496 + 20938CD007D91E24F12E95E0ED06FB5BD7350B6D2B48B189A7BABDBB90471428 + 064B331E00AF8E6EBFE0AADF0FF56D5EEED3C0FE03F1F7C42B5B46227D4743D1 + F740076203307C1E7EF2AF6FC392FF0082CF78BF57D13F67EF0BE8963349069B + AD6BAA97EC9902448E26748D8FA17C363D631E86BECDF82BF0DFC35F0A3E1778 + 73C33E13B6B78744B2B2896192DD028B825413331FE2673F31249249EB4009F0 + 57E2F693F1D3E1D69BE31D1AC752D2ECEF5E68CD8EB10082EEDDE295A3749630 + CC15B284E327820F7AEE335F17FF00C144BF683F1B7C3DBCF865F0C3E1BEA3FD + 85E2CF885AA8B01AC0452D6B1192288042DC2B33CCBF375011B182411E47FB4F + 7C16F887FB117C2FB5F8B3E09F8E5E3AF10EADA75EDB26B361E28D40DE595F89 + 1F696111E9F391C3163866C303C900FD2DA4AFCCBFDB1BE36FC4AF1F7C4AFD95 + D3E17F89F56F085FF8DAC2DB54FB35B5ECB1DA319DADDD3ED31290264405B72B + 020AEE183922B8BFDB17E1FF00C62FD892F3C13F12346F8EFE2DF19EA1A96A62 + CEEECF549A4F265976F981443E632344C10AF9647181827B007E9BFC48F8C1E0 + EF84506972F8BF5EB7D15755BB5B1B1598333DCCEC40088AA092791D05762391 + 5F969FF0534F86773AEFED57F01ED23F1BF88ADCF8C75986D16CD6EDBECFA291 + 35A42B7166BD23918BB3B11CEE45356FF6EDB7F897FB3AFF00C339F81FC0DF16 + 3C657DAB6A5AAEA513EABABEB33196FA469ECBC95BA2A40963432950AC080A48 + C726803F5069335F9BDFB456ADF12BF61BF83DA7787343F893ACF8E3E23FC4BD + 6E3B74D775C3BFEC0422897ECE1CB040CD246173C28662390083F685FD9BBE24 + 7ECABF042EFE2D785FE3F78F759F19E83E45CEAD0EB5A89B8D3EFD5A54470903 + 676805C1C397C80470482003EBFF00DA37F6A3F0BFECC96BE179BC4BA66B5AA7 + FC245A80D32CE3D1608A57129008DC1E44E39ED93ED5EC40EE00FAD7E5D7ED95 + F14A4F8E3E0FFD8D3C4374134F9FC4FAD4379736711E165DF6A92140792AACED + 827B30CF5AFD451C28FA5007C6BE23FF0082A37C3BD03E2078ABC1F0780FE226 + BDAA786B51B8D32F9F46D22DEE2212452B44CCA45C03B4B2360B0048EC3A57AC + 7ECC7FB63FC3DFDABACF566F07C9A8596A5A5328BCD27598161BA895890AF856 + 752A4823218E08E71919F80BF65EF8A7E36F02FED0DFB53788FC01F0EA6F88FA + A5DF8A5D1F468AF85AC90C4F777CDE76E28DB82B0452A00CEFCE462BDC7F634F + D9DBC69F0C75BF8C5F1BFE30DCE9FF000DF57F1847707ECF1DC4489A5C72C865 + 92777DC5130DB3682C4FCA77726803EFEC8CE296BF217F68DF8A3F0E349F873A + EDFF00C26F8C7F19BC75E3ED29A37FF84861D5EF64B0B502450E6E242B1C4232 + ACC079631B99474241EE3E287ED25F17BE21F81FF664F857E1EF14CFE1CF177C + 45D2ADEF75AF135B7EEEE7C973B15D597054ED59246D855890002B93900FD41C + F04D78EFECF9FB517863F692BAF1941E1AD3359B0FF845B51FECCBC93568228D + 25972C0F945247C81B3BED3F30E39AE6BE05FEC872FC09F13C5ADDBFC5AF883E + 2B46B5782EF4AF12EAA2EACA66603122C7B46C652383927048CF35F99BF077F6 + 88F137C38F83DE38F0A783E5934CF1DFC4EF1FCFA45B7882590DB5B69EB88449 + 209BA47266E0004728096E0AAE403F6D5D720D52B88F703C57CFDAAF8234AF81 + 3FB2F47E1FF881F1B3C43A34AE623A978E6F35A73A8CB3EE5774B692732140C1 + 0A2A2293B37705896AFCF4F8FDF1D74CF056A3E0DF107ECF7F10FE2B6B178DAA + ADADE6B5E23BFBC9748BF623E58D85C01E63B1524AEDC60138CE312D5CA4EC7E + B6EA30641E335C9EAD66E413B49AF953E367C4AF885FB467ED8D3FECFF00E02F + 175E7C3FF0DF8774F1A9788F5CD24EDBE986D898AC520C1400CF120008F9998B + 6E002D79978CFE19EB3FB3EFEDA1F03BC1BE1AF8AFE3ED6348F105D25CEA969A + FEBCF32CCB14A494288114C6EAAC36B03DF9AE49D1E6D2E75C2B72EB63EC8D42 + D5D890149FA5731AADAC9129DC8471DEBE5FF881F14F52F8E3FB58F8DBC0B7BA + EF8EF41F875E0D4F25ECFE1DE9D753DEDF5D0655633BDBC6EC91EEDE0646308B + 8192586A7ECFD71F107C3DF1C7C55E10B88FE206BBF0926D3FED3A46B7E3AD2E + EE1B8B49D550F95E74D1AE464C8BB78076A900739F3AA60DA8B95CF4A963173A + 8DB4D8F55D6530589FA570177765361203C6AECE14F4278AF40D7ADCBB380E40 + 071D6B86D6745DD1A8128048DC0AB7415E1BDCF711CD6A17AD711A284085776E + 61DF3D3F2ACCFB535A5CDA4A8C77ACE9839E4722AD5E6892C793F6E7EBCE0D63 + B69ACB9B87BB6985BCE8BB59F1927E607F4350C64F1EADE5CD70CD1ABC924E58 + B9EA0066CE3EA71F954324E6595DB2CB131385CF41DA9B2F872EA646BC8A6115 + BC929032C383DFF0EB43F873528ECBED4D707C8CECDF818CF5C50324D52F19B4 + 9B488A868E3B99064807AAA9C7EA6A2BBD596E632208DA06F309C87E36E381D3 + B63AD2CFA705F0FB34B3B3CA6E7098C7DEDA327F2C7D6A80D12F0410CEB3AEC9 + 7215830EB9C629202DDADE4B0A4C530ED246C8FB8F6EA7F90FCAAB69D7F6B15A + 8596373212C77AB7418C0E3A7506A44D2AE6D512E259C3444942A1C020E3BFF9 + E6B3EE74B9AD4C5FBC0AB28CA96C607247269812C37522CA926F3BD1832F3DFA + 8A20BCB792FEE1EEFCDD8DF364364E4E3D7E8696E743BFB7754255B70CA32302 + AC0F420FF9EB556F6C26B3BC68DDB6C8A76B0E281D84D4DD3CD7113EE8836109 + E0E314555786691701867D4D154897B9FB25451457DD9F0615F317EDD9FB175B + FED87E09D16D6DB595D07C4BA04D2CDA6DDCD11920612851245201C80DE5C677 + 0CE0AF435F4ED1401F9EBE29F811FB6E7C4CF8793FC37F11F8EBC056BE1FBAB6 + FB05FEB56E66379796F80ACACDE4F3BD7838542C0904F273EC3E05FD98FC7BFB + 2FFECD5A47827E08EB9A15E78BADB52FED1D46F7C556EE969A8EF5612AED8B73 + 47D220B839C4782DC935F54D1401F10FECFF00FB22FC545FDA9F56F8E5F162FB + C27A6EA177A7BD89D0BC211CBE45CEE411969BCC1D3033C972C7192028159BF0 + E7F655F8F7FB21F8A7C516DF04F56F077897E1D6B77CD7D1685E2B7B8867B291 + 8019568860E15550B6EF9828F941E47DE145007C9BF1BBE04FC6DFDA23F647F1 + 2F813C59AAF836D3C7BACEA104CBFD96D7316970DAC734522C459A3794B7EEC9 + 2769E4819C0AF79F817E04BBF85FF05BC09E0FD40DABEA1A168765A6DD3D9126 + 179A28112474255490CCA4E4804E7919AEE68A00F2BFDA5FF677F0E7ED3FF0A6 + FF00C11E23696DA19644B9B4BFB700CB677299D92A83C1E199483D55D8646723 + E5BF03FC14FDB53E07787ED7C19E14F1D780BC59E19B2416FA75EEBF1CEB736B + 08E1548099C28E80B49800007000AFBE28A00F8FBE3AFEC6DE38FDA0BE0FFC3F + 9FC41E34B0B4F8E1E0EBA7D46D3C49676FB6C8CCD207F2B68452117643B5F612 + 0C5920EE6CF0DF107F65BFDA63F6AD8744F09FC67F15782BC3FE01D3AEE3B9BD + 4F08473B5DEA6C80804F98368C827BAA82C1B6315007DF545007C99F127F643F + 10F89BF6B3F833E3DD12E747B2F87FE01D2D6C8E9B35CCC2EF728982F95188CA + 1500C2325C13B4E470337BF6E6FD967C51FB4FC7F0DED7C3F79A3DA59F87F5B1 + A96A3FDA9712C4D245F28DB17971BE588DDD4AF6E79E3EA5A2803E36FDB7FF00 + 651F88FF0018BE25FC2DF88BF0CB55D1A0D7FC1571E72D8EB8EE90BB09525460 + 555B23298653B72318354BE337ECA5F17BE3D78E3F677F17789753F080D43C0F + A9FF0069F88ACA092E12DE4DD7704CD1DAA989F70114213F78C3240C9E49AFB5 + A8A00F9FBF6CEFD94ADFF6ADF86F65A4DBEAC7C3DE26D1AEC6A3A36ADB4B2C33 + 01828E01076B71C8E54AA919C60F827C41FD9B3F6AEFDA4FC2B65F0EBE2878C7 + C0BA2F81E39E27D4F52F0EC33BDF6A8B1B065DC8EA13EF2AB607963201C1C62B + EFCA2803E3BF8F7FB13EB1E39F1BFECD83C1B2E8963E0AF8557B0BDCDA6A934A + 2E27B7496D09540B132BB14B539DC572CDC9E491F6191C114B45007C7FFB177E + C89E36FD9E7E2FFC5FF1778AB52D0AF6D3C6579F6AB38B489E6778BF7F348448 + 248900E255E85BA1FC7D4BF6C9F801A87ED33F0075EF02695AC268BA8DDC90DC + 5BCF3EEF21DE29038497682761C7500E08070718AF6EA2803E0ED7FF00661F8E + FE3FFD8FF50F8217DA5FC38F0CC70DA69F656979A6DE5CAA5CF913C723CB2010 + 1D8CDE502700966624EDEFB1F1C7F60FF1378BFC13F05754F01F896C3C35F143 + E18E996561697571BDECAE4411C63696DA5800E848250EE0CC1979E3ED9A2803 + C1BE04C7FB464F79A8CBF175FC07159476061B0B5F0C8B9F366B9CAFEF676932 + 02E01184EEC78E057CE5F0C3FE09A3AB59FEC65E32F845E38D4342B8F135EEBD + 36BFA26ABA6492CB0D9CFF006682388B33C48C3262757014FC8FC64F4FD06A28 + 03F3DFE2E7EC47F1C7E32FC12F85FA6F8ABC45E13D5FC75F0FAF9DE159EEAE67 + D3F5BB5222DBF6ADD0AB79A3C90872A430662581635D67C6DFD9A3E32FED1BA6 + FC243E20B5F03785FF00E114F118D4AF74ED36FAE5A33669E408D623E472E42C + FF002FCAA0797C9C9DBF6D9E9514BF769303E1AF8CDFB2D7C48F0EFED5B77F1A + 3E077893C370789753B14835AF0EF8919C45345B563DDFBB058A3F90848CA9DD + 19218E481E05FD9DE339BFE0A9FF000B2D7C63E26D3FC4FE2B834B7B8D461D1A + 268AC34B3F67BC7FB3401C96D823D8FB9FE66694FA8AFB9FE3CFEC8FF0FF00E3 + D789AC3C49E211AC69FE22B0B4FB0DBEABA26A525A4EB0EE66D9C641019D8F23 + F88D731F06BF643F861FB386B97FAFF85B4EBEBDF135EC4F0CBAD6B578D75721 + 18E5829202A93C6485C90304F5CE529A8ABB368C1C9D91E47E36FD9C7E22780B + F685F107C59F82FAFF0087E1B9F114623D6FC37E2712A5B5C1F972F1BC609C96 + 50FC952096E483B6BB7F07FF00C2D478B56B9F89771E11B64758D74ED3FC2AF7 + 1214396F31E7798724FC9B42718273CD7A9EAEE497393CD71BABBB156E49AF12 + BD76E3CAD1EE50C3A52E64CE1356CF98C73EB5C76B9108A4DAA79C648C743FFE + AAEBF5C0E992B9CF3DABCF35ABABB47202E49E9953CD78EF73D8455D5EC05B5B + C6FE62E48E54BF24FB0F4FA135C4DE122F2E0E401F684079C7F09ABBA86A57A5 + C8FBB838E10D6588A67B69A4663E679AAFEE7823A566CA35E5898E9913FDA588 + DC40889E14FA819FE9DFE99D58F4991FC30938BA2A4B31F21BEE151CE47E22B8 + B13DE200426476CA77A57BEBBCED2BB4F4236907E94EC05DD409FB2F04802688 + F5F50C3FA5422DDA4D29A6FB50C472045B6CF232324E3F21F89A8E232DD59DD8 + 98FCC4C65401D704E40FFBEAA9949F3900B0ED94CD219B1656F14BA44EED2482 + 58183E09FDDE0F18FA9FE40D65EA058980EEC0194C7EBFFB3547299E2E1F838E + 8463FCFF00F5E9E13CFB52F23E595C6D53D48C75FE5400B730CCBA7DADC79EF2 + 2312A149202107A0E7F954FABD835B7932995A7124633213BB6B775CFB7071D7 + 9ACE5858703201F6C7144B1B4726D7C061C1C60E3FFD540CA52B10872790DDA8 + A9EFAD96354084485802483800E3A73455AD897B9FB1F451457DD1F061505EDE + DBE9D6B2DD5DCF1DB5B44A5E49A670888A3A924F0054F5F3CFED75309DBE1DE9 + 3A94EF6DE13D475E8A3D5E40FB10A0236ABB7653973CF1F2E7B567527C91722A + 2B99D8F4DD1FE3978035FD5E3D2F4FF17693757F236C8E14B95CC8D9C00A4F0C + 4F60339AD2F157C4EF09F81EF21B5D7FC43A7E9173347E6C715DCEA8CCB92320 + 1ED906BCCFF69CF0C78374EF80FADB4FA769D66B6D6E3FB35A18923649F23CB1 + 1631D4F503A8CF6AF318E7F10EAFF17BE1C4573A559EB3E251E038A792DF5872 + 91CB2B3B06F30ED62AC0027A1E78E3AD73CAACE0F95EFA1A2826AE7D253FC5EF + 055B6836FADC9E29D297499E5304579F6A431348064A6ECFDE039C75A5F0F7C5 + BF0678B2F64B4D1BC4DA6EA7751C4D33456D70AEC11719620761915F20FC5FF8 + 4BA9FC2FF04682B7EFA75C6B9AEF8CC6A274FB2056CA12CADB6240403B464027 + 1C020638C9FA374EB6F10E97E14F15DEF893C33E1DD0441A64CD04DA1C86491B + F76C5C3651703818C511AD37269AB581C2295D1E8BE17F19E85E36B192F740D5 + AD357B48E4313CD67289155C004A923A1C107F1AB1A078934BF15581BDD22FE0 + D46D048D119ADDC3AEE5386191DC1AF8EFE10492FECEBA6782FC5D24931F05F8 + BEC92DF5757FBB6979F318A6F6565E3E9B89ED5ED1FB1B44E3F67FD0EE2460CF + 753DDCC5BB93F6891493EFF2D3A559CDA8B5ADBFCBFCC528249B477B75F187C1 + 365E275F0ECDE27D363D6DA5100B3338DE2427010F60D9E3079C9157BC5DF11B + C31E028E27F10EBB63A479BFEAD2E660AEFEEABD48F702BC06DEC3FE19ABE234 + B1EAB616BADF81BC61AC0787546895AEAC2EE424AA3E7974E3208E98247390D7 + FE09E9FA778A3E3C7C57BFF12C50DE7892C75116B6305E00E60B205846D1AB67 + 01805C91EA3A6EE45564DF2F5BFDDFE63E45BF43DC7C37F10BC35E30D2EE352D + 175CB1D4ECAD8133CB6D32B08B8CFCE3AAF009E7156B45F1768DE22D0CEB3A66 + A76D7DA500E7ED90481A3C2E777CC3D3073F4AF997E274567E1CFDA32E3FE111 + 8A18257F0A6A12EBF6F66A044408643099157A3171175E71B7D79DAFD9F751B5 + D1FF00633B8BD17118686C753925F318611C3CD853E991B4E3AF3EF446B37271 + 7D2FF8581C15AE7B45CFC5FF000559E8569AD4FE27D322D26EE468A0BC6B8511 + 4AEBF7955BB918ABBE15F887E18F1C19D7C3FAF69FAC3C1CCA96770B2320EC48 + 07207BD7C6DE15B655F85DFB3C59FD923964BCD7EEE631DC83E5B9170C006183 + C1057B7415D1E836FA86B7A7FC54F899A7C36DE1BF14E9BA65CE88DE1FD2A3D8 + F66C982F2BB0C6E7C2E548007CBDCAD66B11276D3FAB5C6E9A3E8FD77E38F807 + C33AA49A76A5E2DD2AD6FA36DB2406E0168DBD1B19DA7D8E2A5D6BE33F817C39 + A949A7EA9E2BD2AC2FA20ACF6F3DCAABA8650CA48F75607E84571DFB35F83BC2 + 2BF05BC3971A7D8D8DEBDFD9A4D7F71246B23CB70C3F7A1D8E492AFB9707A018 + AF2436BAD5D7ED7BF118786F43D135D923B0B557875890A431A886DC654856F9 + B2318FAD5CAACD4632D35128C5B6BB1F56786FC51A478C34C5D4744D46DF54B1 + 66282E2D640E85875191E95A958BE0FB4B9B3F0ED9A5F69F63A5DF32EEB8B5D3 + 7FD4239EBB4E067B738ADAAEB57B6A64F70A2909C526EA621D45341A5CE68016 + 8A28A0028A28A0043504C78A998D5699F8352CA4665F3F06B94D59F83CD747A8 + 4A0035C8EAD36735C1599DF451CA6ACFF7AB92D4D861ABA5D525C93CFE15C96A + 92F04F7AF12AB3DDA48E4B597C0635E6FE2AB968A7B62A7E6DE4835E89AADD22 + AB2B1C0279E33FE7BD79778AAE55AE611B8654312076E2B86476A29E9F756696 + 98BB505C901495CF0E0066FC3191EF5957BA82C9772F908A232C4AA8E38CF1FA + 556B8B8263554E46DC649E9515B5F3DA5CA4E84ABA1CF071F5E6A063F509644B + 59B7864CC6C57231EBCF35957B7B25C5ECF2311BCED3D38FBA2AF6B3A925DBDC + CA5A42B22127CD604E7078CD624B701667E832A98CFF00BB40D1D16BFACDAC97 + 28F64D09888236A2ED201C75F917FA9AAD7B7A9733FEEE268543124375E79C7B + 77FD2B0924000CB2E07239E95A775AF89558222A091104A0BEEDCCBFC43D3D3F + 1340CADA85DBC97A189C1F25003F4007F4AD1D5BC4C97D690C691324D16D1B88 + CEEF9403D4F1C8381D0E7B62B1AEE50E6091082BB5813D7F88FF0088AABBC11C + 9183C60D03355ADEF0DB2DCC90CA203C6FDA42FE759AD73279ACCAC438C1DC09 + CE6AECFAE3CDA65B59BB02B0B3156279C1C71598CE59B78FBA473ED4016F58D6 + 66D426131762C5543193E6390B83C9F53CD1599338F2C73DF3CD156B621EE7EC + DD14515F747C18565789BC2DA478CF469F4AD6F4F8353D3E61F3C170BB94FA11 + E847623915AB452693D181E57A47ECC7F0EF47BFB5BB5D124BC366C1AD60BFBD + 9EE61B7C74DB1C8E57D3A83D0576327C3CD025F1CC5E306B027C4515AFD892F3 + CE93E58724EDD9BB675279C679AE8E8A954E0B6453937BB393F883F0AFC31F14 + AD2CEDBC4DA69D461B394CD001712C251C8C6731B29E9EB597E1DF80DE09F0AC + 3AA45A669771047A9DA3D8DD07D46E64DF0BFDE51BE43B4FFB4B823B1AF40A28 + 708B7CCD6A1CCED6B9CBDE7C32F0CEA1E034F065CE9693F869204B75B1791C80 + 8841501F76EC82010739E3AD5DF07783747F00786ED340D06D3EC3A4DA6FF26D + FCC7936EE72EDF3392C72CC4F27BD6DD14F9527748577B1E61A57ECDBF0FF47D + 76CF55834691E6B193CEB382E2F26960B67C83BA38D9CA8E4647181DB1815A7E + 37F821E0EF883AAC5AAEADA511ABC4BB1351B3B892DA70BE85E3605B8C8E73C1 + AEF28A9F670B5AC87CD2DEE721E07F849E13F87305DC7A0E8F15ABDDFF00C7CC + F2B34D34FECF2392C47278CE39E95C8CFF00B297C339EEA693FB06486DA6904B + 2D8417D3C76AEE3A1312B85F4E071C74AF5DA2874E0D59A41CD2EE723A87C28F + 0A6A571E199A6D1E356F0D36FD252091E24B53F2F44460A7EE2F0C0F4F735634 + 9F86FE1DD0FC53ACF88AC74FF2356D65556FE513485270A00198CB6C078EA141 + E4FA9CF4B9A322AB963BD8576795DC7ECC3F0EE5BF9AE61D1E6B18E77F327B3B + 1BE9E0B694FBC48E171DB0001567C43FB387C3DF15788AF75DD4B43965D56F48 + 6B8B88B50B988C840007092003803A0AF4BDD499351ECA9FF2A1F34BB995E14F + 0AE99E09D06D745D1E07B6D3ADB779514933CA5773163F3392C7962793FA56A9 + 3484D34B815A68B442DC7526EA85A5A6F99CF5A571D8B19A51CD5712548AF9A2 + E1627A2981A9D9AA245A43416A8D9F14003BE0550BA97683534B2ED15937B738 + 06B194AC6D0899FA95C601E6B8FD5AE3EF56D6A775D6B91D4EE09CF5AF2EB48F + 528C0C4D465C96FEB5CAEA90BCB9DA466B7AF9C9278358B73B893F29FCABC99B + B9ECD3470DAC786AF2EC10850E7D4D7253FC38D4AE2E49263452319DD5EB32AB + 7A1FCAABB23127E53F957233A923C3753F841AD198883CB9A3ECDBC0FE66B264 + F83DE24278B65FC254FF001AFA17637F74FE546C6FEE9FCAA752AC7CEEBF073C + 4593BACF23DA58F9FF00C7AAFC9F07B57B848BFD1E48A5C618B49195FD1ABDE7 + 637F74FE546C6FEE9FCA9582C7CEF71F077C41148CA962F30ECEB2C401FCDB35 + 10F841E23FFA0549FF008110FF00F155F46EC6FEE9FCA8D8DFDD3F951619F3DB + FC2AF109B348468EFBD5890DF6A8BBFE3504FF00077C43184F2F4D798B282D99 + E25DA7D3EF735F45EC6FEE9FCA8D8DFDD3F951603E71FF008543E25500FF0064 + 06CF6FB4C7C7FE3D5249F0ABC4CF6EB18D0C295E770BA8B27FF1EAFA2B637F74 + FE546C6FEE9FCA8B01F355CFC1EF15CBB443A2F18C906E62EBFF007D515F4D5B + A36F3F29E9E945689684B3FFD9} + ExplicitHeight = 80 + end + end + object pnlCentro: TPanel + Left = 0 + Top = 73 + Width = 594 + Height = 406 + Align = alClient + BevelOuter = bvNone + TabOrder = 2 + object PageControl: TPageControl + Left = 0 + Top = 0 + Width = 594 + Height = 406 + ActivePage = tabPrincipal + Align = alClient + Style = tsFlatButtons + TabOrder = 0 + object tabPrincipal: TTabSheet + Caption = 'Principal' + object Panel5: TPanel + Left = 0 + Top = 0 + Width = 586 + Height = 375 + Align = alClient + BevelOuter = bvNone + TabOrder = 0 + object Label5: TLabel + Left = 64 + Top = 20 + Width = 115 + Height = 13 + Caption = 'Identifica'#231#227'o Programa :' + end + object Label6: TLabel + Left = 47 + Top = 276 + Width = 132 + Height = 13 + Caption = 'Tabela de Usuarios/Perfis : ' + end + object Label7: TLabel + Left = 69 + Top = 213 + Width = 110 + Height = 13 + Caption = 'Tabela de Permiss'#245'es :' + end + object Label29: TLabel + Left = 120 + Top = 107 + Width = 59 + Height = 13 + Alignment = taRightJustify + Caption = 'Criptografia :' + end + object Label30: TLabel + Left = 116 + Top = 142 + Width = 63 + Height = 13 + Alignment = taRightJustify + Caption = 'Encrypt Key :' + end + object Label32: TLabel + Left = 117 + Top = 178 + Width = 62 + Height = 13 + Alignment = taRightJustify + Caption = 'Login Mode :' + end + object edtApplicationID: TEdit + Left = 182 + Top = 17 + Width = 220 + Height = 21 + TabOrder = 0 + end + object edtTableUsers: TEdit + Left = 182 + Top = 268 + Width = 220 + Height = 21 + TabOrder = 1 + end + object edtTableRights: TEdit + Left = 182 + Top = 205 + Width = 220 + Height = 21 + TabOrder = 2 + OnChange = edtTableRightsChange + end + object edtTabelaPermissoesEX: TEdit + Left = 182 + Top = 233 + Width = 220 + Height = 21 + Enabled = False + TabOrder = 3 + Text = 'EX' + end + object ckAutoStart: TCheckBox + Left = 182 + Top = 44 + Width = 220 + Height = 21 + Caption = 'Iniciar Automaticamente' + TabOrder = 4 + end + object btnTabelasPadrao: TButton + Left = 182 + Top = 344 + Width = 220 + Height = 21 + Caption = 'Tabelas Padr'#227'o' + TabOrder = 5 + OnClick = btnTabelasPadraoClick + end + object ckValidationKey: TCheckBox + Left = 182 + Top = 71 + Width = 220 + Height = 21 + Caption = 'CheckValidationKey' + TabOrder = 6 + end + object cbCriptografia: TComboBox + Left = 182 + Top = 99 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 7 + Items.Strings = ( + 'cPadrao' + 'cMD5') + end + object cbLoginMode: TComboBox + Left = 182 + Top = 170 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 8 + Items.Strings = ( + 'lmActive' + 'lmPassive') + end + object GroupBox3: TGroupBox + Left = 425 + Top = 9 + Width = 113 + Height = 78 + Caption = 'Not Allowed Items' + TabOrder = 9 + object ckActionVisible: TCheckBox + Left = 12 + Top = 24 + Width = 89 + Height = 17 + Caption = 'Action Visible' + Checked = True + State = cbChecked + TabOrder = 0 + end + object ckMenuVisible: TCheckBox + Left = 12 + Top = 47 + Width = 89 + Height = 17 + Caption = 'Menu Visible' + Checked = True + State = cbChecked + TabOrder = 1 + end + end + object spedtEncryptKey: TSpinEdit + Left = 182 + Top = 133 + Width = 220 + Height = 22 + MaxValue = 0 + MinValue = 0 + TabOrder = 10 + Value = 0 + end + end + end + object tabControlRights: TTabSheet + Caption = 'Control Rights' + ImageIndex = 6 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Label33: TLabel + Left = 179 + Top = 117 + Width = 52 + Height = 13 + Alignment = taRightJustify + Caption = 'ActionList :' + end + object Label34: TLabel + Left = 129 + Top = 159 + Width = 102 + Height = 13 + Alignment = taRightJustify + Caption = 'ActionMainMenuBar :' + end + object Label35: TLabel + Left = 153 + Top = 202 + Width = 78 + Height = 13 + Alignment = taRightJustify + Caption = 'ActionManager :' + end + object Label36: TLabel + Left = 175 + Top = 245 + Width = 56 + Height = 13 + Alignment = taRightJustify + Caption = 'MainMenu :' + end + object SpeedButton5: TSpeedButton + Left = 463 + Top = 112 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484 + 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404 + 0404040404040404040404040404040404040404040404040404040404040404 + 0404040404040404040404010000000000000104040404040404040002020202 + 0202000004040404040404000202020202020001000404040404040100020202 + 0202000101000404040404040003030303030300010100040404040404000303 + 0303030300010100040404040404000303030303030001010004040404040400 + 0303030303030001000404040404040400030303030303000004040404040404 + 0400030303030303000404040404040404040100000000010104040404040404 + 0404040404040404040404040404040404040404040404040404} + OnClick = SpeedButton5Click + end + object SpeedButton6: TSpeedButton + Tag = 1 + Left = 463 + Top = 155 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484 + 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404 + 0404040404040404040404040404040404040404040404040404040404040404 + 0404040404040404040404010000000000000104040404040404040002020202 + 0202000004040404040404000202020202020001000404040404040100020202 + 0202000101000404040404040003030303030300010100040404040404000303 + 0303030300010100040404040404000303030303030001010004040404040400 + 0303030303030001000404040404040400030303030303000004040404040404 + 0400030303030303000404040404040404040100000000010104040404040404 + 0404040404040404040404040404040404040404040404040404} + OnClick = SpeedButton5Click + end + object SpeedButton7: TSpeedButton + Tag = 2 + Left = 463 + Top = 197 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484 + 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404 + 0404040404040404040404040404040404040404040404040404040404040404 + 0404040404040404040404010000000000000104040404040404040002020202 + 0202000004040404040404000202020202020001000404040404040100020202 + 0202000101000404040404040003030303030300010100040404040404000303 + 0303030300010100040404040404000303030303030001010004040404040400 + 0303030303030001000404040404040400030303030303000004040404040404 + 0400030303030303000404040404040404040100000000010104040404040404 + 0404040404040404040404040404040404040404040404040404} + OnClick = SpeedButton5Click + end + object SpeedButton8: TSpeedButton + Tag = 3 + Left = 463 + Top = 241 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484 + 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404 + 0404040404040404040404040404040404040404040404040404040404040404 + 0404040404040404040404010000000000000104040404040404040002020202 + 0202000004040404040404000202020202020001000404040404040100020202 + 0202000101000404040404040003030303030300010100040404040404000303 + 0303030300010100040404040404000303030303030001010004040404040400 + 0303030303030001000404040404040400030303030303000004040404040404 + 0400030303030303000404040404040404040100000000010104040404040404 + 0404040404040404040404040404040404040404040404040404} + OnClick = SpeedButton5Click + end + object cbActionList: TComboBox + Left = 237 + Top = 113 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 0 + OnChange = ComboRightsChange + end + object cbActionMainMenuBar: TComboBox + Left = 237 + Top = 155 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 1 + OnChange = ComboRightsChange + OnClick = ComboRightsChange + end + object cbActionManager: TComboBox + Left = 237 + Top = 198 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 2 + OnChange = ComboRightsChange + end + object cbMainMenu: TComboBox + Left = 237 + Top = 241 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 3 + OnChange = ComboRightsChange + end + end + object tabUser: TTabSheet + Caption = 'User' + ImageIndex = 3 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Label2: TLabel + Left = 172 + Top = 122 + Width = 36 + Height = 13 + Caption = 'Action :' + end + object Label27: TLabel + Left = 152 + Top = 161 + Width = 56 + Height = 13 + Caption = 'Menu Item :' + end + object cbUserAction: TComboBox + Left = 214 + Top = 118 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 0 + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object cbUserMenuItem: TComboBox + Left = 214 + Top = 157 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 1 + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object ckUserProtectAdministrator: TCheckBox + Left = 214 + Top = 196 + Width = 220 + Height = 21 + Caption = 'User Protect Administrator' + TabOrder = 2 + end + object ckUserUsePrivilegedField: TCheckBox + Left = 214 + Top = 236 + Width = 220 + Height = 21 + Caption = 'Use Privileged Field' + TabOrder = 3 + end + end + object tabUserProfile: TTabSheet + Caption = 'User Profile' + ImageIndex = 4 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Label3: TLabel + Left = 174 + Top = 128 + Width = 36 + Height = 13 + Alignment = taRightJustify + Caption = 'Action :' + Visible = False + end + object Label28: TLabel + Left = 154 + Top = 181 + Width = 56 + Height = 13 + Alignment = taRightJustify + Caption = 'Menu Item :' + Visible = False + end + object cbUserProfileAction: TComboBox + Left = 213 + Top = 124 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 0 + Visible = False + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object cbUserProfileMenuItem: TComboBox + Left = 213 + Top = 177 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 1 + Visible = False + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object ckUserProfileActive: TCheckBox + Left = 213 + Top = 230 + Width = 220 + Height = 21 + Caption = 'Active' + TabOrder = 2 + end + end + object tabUserPasswordChange: TTabSheet + Caption = 'User Password Change' + ImageIndex = 5 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Label4: TLabel + Left = 126 + Top = 252 + Width = 108 + Height = 13 + Alignment = taRightJustify + Caption = 'Min Password Length :' + end + object Label31: TLabel + Left = 198 + Top = 110 + Width = 36 + Height = 13 + Alignment = taRightJustify + Caption = 'Action :' + end + object Label37: TLabel + Left = 178 + Top = 157 + Width = 56 + Height = 13 + Alignment = taRightJustify + Caption = 'Menu Item :' + end + object cbUserPasswordChangeAction: TComboBox + Left = 239 + Top = 106 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 0 + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object cbUserPasswordChangeMenuItem: TComboBox + Left = 239 + Top = 153 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 1 + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object ckUserPassowrdChangeForcePassword: TCheckBox + Left = 239 + Top = 200 + Width = 220 + Height = 21 + Caption = 'Force Password' + TabOrder = 2 + end + object spedtUserPasswordChangeMinPasswordLength: TSpinEdit + Left = 239 + Top = 247 + Width = 220 + Height = 22 + MaxValue = 0 + MinValue = 0 + TabOrder = 3 + Value = 0 + end + end + object tabLogControl: TTabSheet + Caption = 'Log Control' + ImageIndex = 1 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Label25: TLabel + Left = 140 + Top = 115 + Width = 80 + Height = 13 + Alignment = taRightJustify + Caption = 'Tabela de Logs :' + end + object Label1: TLabel + Left = 164 + Top = 75 + Width = 56 + Height = 13 + Alignment = taRightJustify + Caption = 'Menu Item :' + Visible = False + end + object Label26: TLabel + Left = 184 + Top = 35 + Width = 36 + Height = 13 + Alignment = taRightJustify + Caption = 'Action :' + Visible = False + end + object Panel4: TPanel + Left = 0 + Top = 205 + Width = 586 + Height = 170 + Align = alBottom + BevelOuter = bvNone + Color = clWhite + TabOrder = 0 + object Image4: TImage + Left = 20 + Top = 28 + Width = 25 + Height = 24 + Picture.Data = { + 07544269746D617076060000424D760600000000000036040000280000001800 + 000018000000010008000000000040020000C40E0000C40E0000000100000000 + 00000800000008080800310010004A08180031101800391821005A1821004A18 + 290063292900522131006B21310039314200843142001042420018394A001042 + 4A008C524A0031395200084252006B4A5200085252005A525200845252005A5A + 5A00635A5A006B5A5A00845A5A008C5A5A00635A6300845A63005A6363008463 + 6300946363008C6B6B00A56B6B00086B7300426B730094737300396B7B009C7B + 7B00A57B7B00AD848400187B9400188C9C00298C9C0029949C002994A500B5A5 + A500218CAD00089CAD0021A5AD0021ADAD009CA5B5007BB5B500089CBD00219C + BD0021B5BD00089CC60008BDC60010A5CE0018B5CE0008BDD60000B5DE0008B5 + DE0010B5DE0008DEDE0000BDE70008BDE70000C6E70008C6E70018C6E70008CE + E70052CEE70000D6E70000DEE70018E7E70000BDEF0000C6EF0000CEEF0000D6 + EF0018D6EF0000DEEF0008DEEF0063DEEF0000E7EF0008E7EF0010E7EF004AE7 + EF0063E7EF0000EFEF004AEFEF0000C6F70000CEF7006BDEF70000E7F70094E7 + F7009CE7F70000EFF70008F7F70010F7F700FF00FF0000D6FF0000DEFF0008DE + FF0000E7FF0008E7FF0000EFFF0008EFFF0010EFFF0000F7FF0008F7FF0010F7 + FF0018F7FF0000FFFF0008FFFF0010FFFF0018FFFF0031FFFF0052FFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF007777777777777777777777777777777777777777777777777777772F1F1A + 1D1D1D1D1D1D1D1D1D1D1D1D1D1D161B77777777483B36363636363636393636 + 36363636363930081B7777483F3E42424242424D3F37404C4242424242425B26 + 10777753434D655C5C5C654E0F073446655C5C5C655C5C2429777777464D6765 + 656565440104093C656565656C65431377777777534467676565654F12000E47 + 656565676C5C2C277777777777464E69666565665E495E666565667067451C77 + 77777777775D4E6769666666662A666666666970662E2977777777777777504F + 6C666666490B4F68666670674F1977777777777777775344676966683A063D6A + 666C6C662C28777777777777777777474F6B686A310C2B6A686F694715777777 + 7777777777777753496B6B61230A26616B70682D287777777777777777777777 + 505E6E540F0311496F6C5418777777777777777777777777585162410102053A + 706A322277777777777777777777777777526141000204386E52177777777777 + 77777777777777777757515514010D4B6D332177777777777777777777777777 + 777756616E4A746E551E7777777777777777777777777777777758546E72746D + 382077777777777777777777777777777777774B627573611E77777777777777 + 77777777777777777777775A5975713825777777777777777777777777777777 + 77777777636E6335777777777777777777777777777777777777777753765377 + 7777777777777777777777777777777777777777775377777777777777777777 + 7777} + end + object Label19: TLabel + Left = 60 + Top = 28 + Width = 320 + Height = 13 + Caption = 'O Componente n'#227'o grava nenhum log automaticamente!' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [fsBold] + ParentFont = False + end + object Label20: TLabel + Left = 60 + Top = 52 + Width = 505 + Height = 13 + Caption = + 'Utilize o Metodo: Log(msg : String; nivel : Integer {0..3} = 0) ' + + 'para gravar registros no Log de mensagens' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label21: TLabel + Left = 68 + Top = 76 + Width = 16 + Height = 13 + Caption = 'Ex:' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label22: TLabel + Left = 92 + Top = 76 + Width = 175 + Height = 13 + Caption = 'UserControl1.Log('#39'Exemplo de Log'#39');' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label23: TLabel + Left = 280 + Top = 76 + Width = 285 + Height = 65 + Caption = + 'try'#13#10' ..'#13#10'except'#13#10' on e : Exception do ADOUserControl1.Log(e.M' + + 'essage, 3);'#13#10'end;' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + object Label24: TLabel + Left = 92 + Top = 108 + Width = 162 + Height = 13 + Caption = 'UserControl1.Log('#39'Exemplo 2'#39', 1);' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + ParentFont = False + end + end + object edtLogControlTableLog: TEdit + Left = 226 + Top = 112 + Width = 220 + Height = 21 + TabOrder = 1 + end + object ckLogControlActive: TCheckBox + Left = 226 + Top = 152 + Width = 220 + Height = 21 + Caption = 'Active' + Checked = True + State = cbChecked + TabOrder = 2 + end + object cbLogControlAction: TComboBox + Left = 226 + Top = 32 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 3 + Visible = False + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + object cbLogControlMenuItem: TComboBox + Left = 226 + Top = 72 + Width = 220 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + TabOrder = 4 + Visible = False + OnChange = ComboActionMenuItem + OnClick = ComboActionMenuItem + end + end + object tabLogin: TTabSheet + Caption = 'Login' + ImageIndex = 2 + ExplicitLeft = 0 + ExplicitTop = 0 + ExplicitWidth = 0 + ExplicitHeight = 0 + object Label14: TLabel + Left = 115 + Top = 25 + Width = 149 + Height = 13 + Alignment = taRightJustify + Caption = 'N'#250'mero m'#225'ximo de Tentativas :' + end + object Label15: TLabel + Left = 181 + Top = 52 + Width = 83 + Height = 13 + Alignment = taRightJustify + Caption = 'Get Login Name :' + end + object Label16: TLabel + Left = 136 + Top = 350 + Width = 79 + Height = 13 + Caption = 'Imagem Superior' + end + object Label17: TLabel + Left = 288 + Top = 350 + Width = 85 + Height = 13 + Caption = 'Imagem Esquerda' + end + object Label18: TLabel + Left = 440 + Top = 350 + Width = 72 + Height = 13 + Caption = 'Imagem Inferior' + end + object SpeedButton1: TSpeedButton + Left = 19 + Top = 288 + Width = 73 + Height = 40 + Caption = 'Visualizar' + Flat = True + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000420B0000420B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFCC6701CC6701CC6701CC6701CC6701CC6701CC + 6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701FF00FFCC6701 + FFFFFFFFFFFFFFFAF5FFF3E6FEEBD5FEE3C3FEDCB5FED7ABFED7ABFED7ABFED7 + ABFED7ABFED7ABCC6701FF00FFCC6701FFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FE + EBD5FEE3C4FEDCB500C0C000C0C000C0C000C0C0FED7ABCC6701FF00FFCC6701 + FFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEBD5FEE3C4FFFFFFFFFFFFFFFF + FF00C0C0FED7ABCC6701FF00FFCC6701FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FAF5FFF3E6FFEBD5FEE3C4FEDCB5FED7ABFED7ABFED7ABCC6701FF00FFCC6701 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEBD5FEE3C4FEDC + B5FED7ABFED7ABCC6701FF00FFCC6701FFFFFFFFFFFFFFFFFF80808080808080 + 8080FFFFFF808080FFF3E6808080808080808080FED7ABCC6701FF00FFCC6701 + 8080FF0000FF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEB + D5FEE3C4FEDCB5CC6701FF00FFCC67010000FF0000FF0000FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEBD5FEE3C4CC6701FF00FFCC6701 + 8080FF0000FF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA + F5FFF3E6FFEBD5CC6701FF00FFCC6701FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6CC6701FF00FFCC6701 + CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC67 + 01CC6701CC6701CC6701FF00FFFF00FFCC6701CC6701CC6701CC6701CC6701CC + 6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701FF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + Layout = blGlyphTop + OnClick = SpeedButton1Click + end + object SpeedButton2: TSpeedButton + Left = 211 + Top = 322 + Width = 48 + Height = 22 + Caption = 'Limpar' + Flat = True + OnClick = SpeedButton2Click + end + object SpeedButton3: TSpeedButton + Left = 365 + Top = 322 + Width = 48 + Height = 22 + Caption = 'Limpar' + Flat = True + OnClick = SpeedButton3Click + end + object SpeedButton4: TSpeedButton + Left = 517 + Top = 322 + Width = 48 + Height = 22 + Caption = 'Limpar' + Flat = True + OnClick = SpeedButton4Click + end + object GroupBox1: TGroupBox + Left = 2 + Top = 88 + Width = 290 + Height = 185 + Caption = 'Login Inicial' + TabOrder = 0 + object Label8: TLabel + Left = 14 + Top = 24 + Width = 42 + Height = 13 + Caption = 'Usu'#225'rio :' + end + object Label9: TLabel + Left = 19 + Top = 55 + Width = 37 + Height = 13 + Caption = 'Senha :' + end + object Label12: TLabel + Left = 25 + Top = 87 + Width = 31 + Height = 13 + Caption = 'Email :' + end + object lblInitialRights: TLabel + Left = -7 + Top = 115 + Width = 63 + Height = 13 + Alignment = taRightJustify + Caption = 'Initial Rights :' + end + object edtInitialLoginUser: TEdit + Left = 64 + Top = 20 + Width = 220 + Height = 21 + TabOrder = 0 + end + object edtInitialLoginPassword: TEdit + Left = 64 + Top = 51 + Width = 220 + Height = 21 + TabOrder = 1 + end + object edtInitialLoginEmail: TEdit + Left = 64 + Top = 83 + Width = 220 + Height = 21 + TabOrder = 2 + end + object mmInitialRights: TMemo + Left = 64 + Top = 115 + Width = 220 + Height = 62 + Font.Charset = DEFAULT_CHARSET + Font.Color = clGreen + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 3 + end + end + object GroupBox2: TGroupBox + Left = 295 + Top = 88 + Width = 290 + Height = 185 + Caption = 'Login Autom'#225'tico' + TabOrder = 1 + object Label10: TLabel + Left = 13 + Top = 44 + Width = 42 + Height = 13 + Alignment = taRightJustify + Caption = 'Usu'#225'rio :' + end + object Label11: TLabel + Left = 18 + Top = 81 + Width = 37 + Height = 13 + Alignment = taRightJustify + Caption = 'Senha :' + end + object edtLoginAutoLoginUser: TEdit + Left = 56 + Top = 40 + Width = 220 + Height = 21 + TabOrder = 0 + end + object edtLoginAutoLoginPassword: TEdit + Left = 56 + Top = 77 + Width = 220 + Height = 21 + TabOrder = 1 + end + object ckLoginAutologinActive: TCheckBox + Left = 56 + Top = 104 + Width = 65 + Height = 17 + Caption = 'Ativo' + Checked = True + State = cbChecked + TabOrder = 2 + end + object ckLoginAutoLoginMessageOnError: TCheckBox + Left = 33 + Top = 127 + Width = 225 + Height = 17 + Caption = 'Exibir mensagem padr'#227'o de erro se falhar ?' + TabOrder = 3 + end + end + object cbGetLoginName: TComboBox + Left = 270 + Top = 48 + Width = 201 + Height = 21 + Style = csDropDownList + ItemHeight = 0 + ItemIndex = 0 + TabOrder = 2 + Text = 'lnNone' + Items.Strings = ( + 'lnNone' + 'lnUserName' + 'lnMachineName') + end + object Panel6: TPanel + Left = 143 + Top = 280 + Width = 65 + Height = 65 + BevelOuter = bvLowered + Color = clGray + TabOrder = 3 + object imgTop: TImage + Left = 1 + Top = 1 + Width = 63 + Height = 63 + Cursor = crHandPoint + Align = alClient + Center = True + Proportional = True + Stretch = True + OnClick = ActionsExecute + end + end + object Panel7: TPanel + Left = 295 + Top = 280 + Width = 65 + Height = 65 + BevelOuter = bvLowered + Color = clGray + TabOrder = 4 + object imgLeft: TImage + Left = 1 + Top = 1 + Width = 63 + Height = 63 + Cursor = crHandPoint + Align = alClient + Center = True + Proportional = True + Stretch = True + OnClick = ActionsExecute + end + end + object Panel8: TPanel + Left = 447 + Top = 280 + Width = 65 + Height = 65 + BevelOuter = bvLowered + Color = clGray + TabOrder = 5 + object imgBottom: TImage + Left = 1 + Top = 1 + Width = 63 + Height = 63 + Cursor = crHandPoint + Align = alClient + Center = True + Proportional = True + Stretch = True + OnClick = ActionsExecute + end + end + object spedtMaxLoginAttempts: TSpinEdit + Left = 270 + Top = 20 + Width = 121 + Height = 22 + MaxValue = 0 + MinValue = 0 + TabOrder = 6 + Value = 0 + end + end + end + end + object OpenPictureDialog: TOpenPictureDialog + Left = 512 + Top = 240 + end + object ActionList: TActionList + Left = 545 + Top = 240 + object acCarregarFigura: TAction + Caption = 'Carregar Figura' + OnExecute = ActionsExecute + end + object acVisualizarTelaLogin: TAction + Caption = 'acVisualizarTelaLogin' + OnExecute = ActionsExecute + end + end +end diff --git a/internal/2.31RC1/1/Source/UCEditorForm_U.pas b/internal/2.31RC1/1/Source/UCEditorForm_U.pas new file mode 100644 index 0000000..cb7e1fe --- /dev/null +++ b/internal/2.31RC1/1/Source/UCEditorForm_U.pas @@ -0,0 +1,469 @@ +unit UCEditorForm_U; + +interface + +{.$I 'UserControl.inc'} + +uses + ActnCtrls, + ActnList, + ActnMan, + ActnMenus, + Buttons, + Classes, + ComCtrls, + Contnrs, + Controls, + Dialogs, + ExtCtrls, + ExtDlgs, + Forms, + Graphics, + jpeg, + Menus, + Spin, + StdCtrls, + ToolWin, + UCBase; + +type + TUCEditorForm = class(TForm) + pnlBotoes: TPanel; + Panel2: TPanel; + lbComponente: TLabel; + pnlCentro: TPanel; + PageControl: TPageControl; + tabPrincipal: TTabSheet; + tabLogin: TTabSheet; + Label14: TLabel; + Label15: TLabel; + Label16: TLabel; + Label17: TLabel; + Label18: TLabel; + SpeedButton1: TSpeedButton; + GroupBox1: TGroupBox; + Label8: TLabel; + Label9: TLabel; + Label12: TLabel; + lblInitialRights: TLabel; + edtInitialLoginUser: TEdit; + edtInitialLoginPassword: TEdit; + edtInitialLoginEmail: TEdit; + mmInitialRights: TMemo; + GroupBox2: TGroupBox; + Label10: TLabel; + Label11: TLabel; + edtLoginAutoLoginUser: TEdit; + edtLoginAutoLoginPassword: TEdit; + ckLoginAutologinActive: TCheckBox; + ckLoginAutoLoginMessageOnError: TCheckBox; + cbGetLoginName: TComboBox; + tabLogControl: TTabSheet; + Label25: TLabel; + Panel4: TPanel; + Image4: TImage; + Label19: TLabel; + Label20: TLabel; + Label21: TLabel; + Label22: TLabel; + Label23: TLabel; + Label24: TLabel; + edtLogControlTableLog: TEdit; + ckLogControlActive: TCheckBox; + cbLogControlAction: TComboBox; + cbLogControlMenuItem: TComboBox; + Panel6: TPanel; + imgTop: TImage; + Panel7: TPanel; + imgLeft: TImage; + Panel8: TPanel; + imgBottom: TImage; + Panel5: TPanel; + Label5: TLabel; + Label6: TLabel; + Label7: TLabel; + edtApplicationID: TEdit; + edtTableUsers: TEdit; + edtTableRights: TEdit; + edtTabelaPermissoesEX: TEdit; + ckAutoStart: TCheckBox; + btnTabelasPadrao: TButton; + btnOK: TBitBtn; + btnClose: TBitBtn; + ckValidationKey: TCheckBox; + cbCriptografia: TComboBox; + Label29: TLabel; + Label30: TLabel; + Label32: TLabel; + cbLoginMode: TComboBox; + GroupBox3: TGroupBox; + ckActionVisible: TCheckBox; + ckMenuVisible: TCheckBox; + tabUser: TTabSheet; + tabUserProfile: TTabSheet; + tabUserPasswordChange: TTabSheet; + cbUserAction: TComboBox; + cbUserMenuItem: TComboBox; + Label3: TLabel; + cbUserProfileAction: TComboBox; + cbUserProfileMenuItem: TComboBox; + Label4: TLabel; + cbUserPasswordChangeAction: TComboBox; + cbUserPasswordChangeMenuItem: TComboBox; + Label1: TLabel; + Label26: TLabel; + tabControlRights: TTabSheet; + Label33: TLabel; + Label34: TLabel; + Label35: TLabel; + Label36: TLabel; + cbActionList: TComboBox; + cbActionMainMenuBar: TComboBox; + cbActionManager: TComboBox; + cbMainMenu: TComboBox; + spedtEncryptKey: TSpinEdit; + ckUserProtectAdministrator: TCheckBox; + ckUserUsePrivilegedField: TCheckBox; + Label2: TLabel; + Label27: TLabel; + Label28: TLabel; + ckUserProfileActive: TCheckBox; + Label31: TLabel; + Label37: TLabel; + ckUserPassowrdChangeForcePassword: TCheckBox; + spedtUserPasswordChangeMinPasswordLength: TSpinEdit; + spedtMaxLoginAttempts: TSpinEdit; + OpenPictureDialog: TOpenPictureDialog; + ActionList: TActionList; + acCarregarFigura: TAction; + acVisualizarTelaLogin: TAction; + SpeedButton2: TSpeedButton; + SpeedButton3: TSpeedButton; + SpeedButton4: TSpeedButton; + Image1: TImage; + SpeedButton5: TSpeedButton; + SpeedButton6: TSpeedButton; + SpeedButton7: TSpeedButton; + SpeedButton8: TSpeedButton; + procedure SpeedButton4Click(Sender: TObject); + procedure SpeedButton3Click(Sender: TObject); + procedure SpeedButton2Click(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + + procedure ComboRightsChange(Sender: TObject); + + procedure ComboActionMenuItem(Sender: TObject); + + procedure btnTabelasPadraoClick(Sender: TObject); + procedure edtTableRightsChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + + procedure ActionsExecute(Sender: TObject); + procedure SpeedButton5Click(Sender: TObject); + private + { Private declarations } + FUserControl: TUserControl; + public + constructor Create(AOwner: TComponent; UserControl: TUserControl); reintroduce; + end; + +implementation + +uses + LoginWindow_U, + ShellAPI, + SysUtils, + UcConsts_Language, + UCMessages, + Windows; + +{$R *.dfm} + +procedure TUCEditorForm.edtTableRightsChange(Sender: TObject); +begin + edtTabelaPermissoesEX.Text := edtTableRights.Text + 'EX'; +end; + +procedure TUCEditorForm.ActionsExecute(Sender: TObject); +begin + if Sender = imgTop then + if OpenPictureDialog.Execute then + imgTop.Picture.LoadFromFile(OpenPictureDialog.FileName); + + if Sender = imgBottom then + if OpenPictureDialog.Execute then + imgBottom.Picture.LoadFromFile(OpenPictureDialog.FileName); + + if Sender = imgLeft then + if OpenPictureDialog.Execute then + imgLeft.Picture.LoadFromFile(OpenPictureDialog.FileName); +end; + +procedure TUCEditorForm.btnTabelasPadraoClick(Sender: TObject); +begin + edtTableUsers.Text := RetornaLingua( FUserControl.Language,'Const_TableUsers_TableName'); + edtTableRights.Text := RetornaLingua( FUserControl.Language,'Const_TableRights_TableName'); +end; + +procedure TUCEditorForm.ComboActionMenuItem(Sender: TObject); +begin + // Combo USER + if (Sender = cbUserAction) and (cbUserAction.ItemIndex >= 0) then + cbUserMenuItem.ItemIndex := -1; + + if (Sender = cbUserMenuItem) and (cbUserMenuItem.ItemIndex >= 0) then + cbUserAction.ItemIndex := -1; + + // Combo USERPROFILE + if (Sender = cbUserProfileAction) and (cbUserProfileAction.ItemIndex >= 0) then + cbUserProfileMenuItem.ItemIndex := -1; + + if (Sender = cbUserProfileMenuItem) and (cbUserProfileMenuItem.ItemIndex >= 0) then + cbUserProfileAction.ItemIndex := -1; + + // Combo USERPASSWORDCHANGE + if (Sender = cbUserPasswordChangeAction) and (cbUserPasswordChangeAction.ItemIndex >= 0) then + cbUserPasswordChangeMenuItem.ItemIndex := -1; + + if (Sender = cbUserPasswordChangeMenuItem) and (cbUserPasswordChangeMenuItem.ItemIndex >= 0) then + cbUserPasswordChangeAction.ItemIndex := -1; + + // Combo LOGCONTROL + if (Sender = cbLogControlAction) and (cbLogControlAction.ItemIndex >= 0) then + cbLogControlMenuItem.ItemIndex := -1; + + if (Sender = cbLogControlMenuItem) and (cbLogControlMenuItem.ItemIndex >= 0) then + cbLogControlAction.ItemIndex := -1; +end; + +procedure TUCEditorForm.ComboRightsChange(Sender: TObject); +begin +{ if Sender = cbActionList then + if cbActionList.ItemIndex >= 0 then + begin + cbActionMainMenuBar.ItemIndex := -1; + cbActionManager.ItemIndex := -1; + cbMainMenu.ItemIndex := -1; + end; + + if Sender = cbActionMainMenuBar then + if cbActionMainMenuBar.ItemIndex >= 0 then + begin + cbActionList.ItemIndex := -1; + cbActionManager.ItemIndex := -1; + cbMainMenu.ItemIndex := -1; + end; + + if Sender = cbActionManager then + if cbActionManager.ItemIndex >= 0 then + begin + cbActionList.ItemIndex := -1; + cbActionMainMenuBar.ItemIndex := -1; + cbMainMenu.ItemIndex := -1; + end; + + if Sender = cbMainMenu then + if cbMainMenu.ItemIndex >= 0 then + begin + cbActionList.ItemIndex := -1; + cbActionMainMenuBar.ItemIndex := -1; + cbActionManager.ItemIndex := -1; + end; } + +end; + +constructor TUCEditorForm.Create(AOwner: TComponent; UserControl: TUserControl); +begin + inherited Create(AOwner); + FUserControl := UserControl; +end; + +procedure TUCEditorForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TUCEditorForm.FormCreate(Sender: TObject); +var + I: Integer; + Formulario: TForm; +begin + lblInitialRights.Caption := 'Initial ' + #13 + 'Rights :'; + PageControl.ActivePage := tabPrincipal; + + with FUserControl do + begin + edtApplicationID.Text := ApplicationID; + ckAutoStart.Checked := AutoStart; + ckValidationKey.Checked := CheckValidationKey; + spedtEncryptKey.Value := EncryptKey; + edtTableRights.Text := TableRights.TableName; + edtTableUsers.Text := TableUsers.TableName; + ckActionVisible.Checked := NotAllowedItems.ActionVisible; + ckMenuVisible.Checked := NotAllowedItems.MenuVisible; + cbCriptografia.ItemIndex := integer(Criptografia); + cbLoginMode.ItemIndex := integer(LoginMode); + end; + + Formulario := TForm(FUserControl.Owner); + + for I := 0 to Formulario.ComponentCount - 1 do + begin + if Formulario.Components[I] is TAction then + begin + cbUserAction.Items.Add(TAction(Formulario.Components[I]).Name); + cbUserProfileAction.Items.Add(TAction(Formulario.Components[I]).Name); + cbLogControlAction.Items.Add(TAction(Formulario.Components[I]).Name); + cbUserPasswordChangeAction.Items.Add(TAction(Formulario.Components[I]).Name); + end; + + if Formulario.Components[I] is TMenuItem then + begin + cbUserMenuItem.Items.Add(Formulario.Components[I].Name); + cbUserProfileMenuItem.Items.Add(Formulario.Components[I].Name); + cbLogControlMenuItem.Items.Add(Formulario.Components[I].Name); + cbUserPasswordChangeMenuItem.Items.Add(Formulario.Components[I].Name); + end; + + // Adicionar os valores dos "ControlRights" + if Formulario.Components[I] is TActionList then + cbActionList.Items.Add(Formulario.Components[I].Name); + + if Formulario.Components[I] is TActionMainMenuBar then + cbActionMainMenuBar.Items.Add(Formulario.Components[I].Name); + + if Formulario.Components[I] is TActionManager then + cbActionManager.Items.Add(Formulario.Components[I].Name); + + if Formulario.Components[I] is TMainMenu then + cbMainMenu.Items.Add(Formulario.Components[I].Name); + end; + + with FUserControl.ControlRight do + begin + if Assigned(ActionList) then + cbActionList.ItemIndex := (cbActionList.Items.IndexOf(ActionList.Name)); + + if Assigned(MainMenu) then + cbMainMenu.ItemIndex := (cbMainMenu.Items.IndexOf(MainMenu.Name)); + + if Assigned(ActionMainMenuBar) then + cbActionMainMenuBar.ItemIndex := (cbActionMainMenuBar.Items.IndexOf(ActionMainMenuBar.Name)); + + if Assigned(ActionManager) then + cbActionManager.ItemIndex := (cbActionManager.Items.IndexOf(ActionManager.Name)); + end; + + // Action e MenuItem USER + if Assigned(FUserControl.User.Action) then + cbUserAction.ItemIndex := (cbUserAction.Items.IndexOf(FUserControl.User.Action.Name)); + + if Assigned(FUserControl.User.MenuItem) then + cbUserMenuItem.ItemIndex := (cbUserMenuItem.Items.IndexOf(FUserControl.User.MenuItem.Name)); + + // Action e MenuItem USERPROFILE +{ if Assigned(FUserControl.UserProfile.Action) then + cbUserProfileAction.ItemIndex := (cbUserProfileAction.Items.IndexOf(FUserControl.UserProfile.Action.Name)); + + if Assigned(FUserControl.UserProfile.MenuItem) then + cbUserProfileMenuItem.ItemIndex := (cbUserProfileMenuItem.Items.IndexOf(FUserControl.UserProfile.MenuItem.Name)); } + + // Action e MenuItem USERPASSWORDCHANGE + if Assigned(FUserControl.UserPasswordChange.Action) then + cbUserPasswordChangeAction.ItemIndex := (cbUserPasswordChangeAction.Items.IndexOf(FUserControl.UserPasswordChange.Action.Name)); + + if Assigned(FUserControl.UserPasswordChange.MenuItem) then + cbUserPasswordChangeMenuItem.ItemIndex := (cbUserPasswordChangeMenuItem.Items.IndexOf(FUserControl.UserPasswordChange.MenuItem.Name)); + + // Action e MenuItem LOGCONTROL +{ if Assigned(FUserControl.LogControl.Action) then + cbLogControlAction.ItemIndex := (cbLogControlAction.Items.IndexOf(FUserControl.LogControl.Action.Name)); + + if Assigned(FUserControl.LogControl.MenuItem) then + cbLogControlMenuItem.ItemIndex := (cbLogControlMenuItem.Items.IndexOf(FUserControl.LogControl.MenuItem.Name)); } + + ckUserProtectAdministrator.Checked := FUserControl.User.ProtectAdministrator; + ckUserUsePrivilegedField.Checked := FUserControl.User.UsePrivilegedField; + + ckUserProfileActive.Checked := FUserControl.UserProfile.Active; + + ckUserPassowrdChangeForcePassword.Checked := FUserControl.UserPasswordChange.ForcePassword; + spedtUserPasswordChangeMinPasswordLength.Value := FUserControl.UserPasswordChange.MinPasswordLength; + + edtLogControlTableLog.Text := FUserControl.LogControl.TableLog; + ckLogControlActive.Checked := FUserControl.LogControl.Active; + + // Login + spedtMaxLoginAttempts.Value := FUserControl.Login.MaxLoginAttempts; + cbGetLoginName.ItemIndex := integer(FUserControl.Login.GetLoginName); + // login inicial + edtInitialLoginUser.Text := FUserControl.Login.InitialLogin.User; + edtInitialLoginPassword.Text := FUserControl.Login.InitialLogin.Password; + edtInitialLoginEmail.Text := FUserControl.Login.InitialLogin.Email; + mmInitialRights.Lines := FUserControl.Login.InitialLogin.InitialRights; + // AutoLogin + edtLoginAutoLoginUser.Text := FUserControl.Login.AutoLogin.User; + edtLoginAutoLoginPassword.Text := FUserControl.Login.AutoLogin.Password; + ckLoginAutologinActive.Checked := FUserControl.Login.AutoLogin.Active; + ckLoginAutoLoginMessageOnError.Checked := FUserControl.Login.AutoLogin.MessageOnError; + // Figuras + imgTop.Picture.Bitmap := FUserControl.UserSettings.Login.TopImage.Bitmap; + imgLeft.Picture.Bitmap := FUserControl.UserSettings.Login.LeftImage.Bitmap; + imgBottom.Picture.Bitmap := FUserControl.UserSettings.Login.BottomImage.Bitmap; +end; + +procedure TUCEditorForm.SpeedButton1Click(Sender: TObject); +var + frmLogin: TfrmLoginWindow; +begin + try + frmLogin := TfrmLoginWindow.Create(nil); + with frmLogin do + begin + FUserControl := Self.FUserControl; + btOK.onClick := BotoesClickVisualizacao; + BtCancela.OnClick := BotoesClickVisualizacao; + Caption := Self.FUserControl.UserSettings.Login.WindowCaption; + LbUsuario.Caption := Self.FUserControl.UserSettings.Login.LabelUser; + LbSenha.Caption := Self.FUserControl.UserSettings.Login.LabelPassword; + ImgTop.Picture := Self.ImgTop.Picture; + imgLeft.Picture := Self.imgLeft.Picture; + ImgBottom.Picture := Self.imgBottom.Picture; + btOK.Caption := Self.FUserControl.UserSettings.Login.BtOk; + BtCancela.Caption := Self.FUserControl.UserSettings.Login.BtCancel; + Position := Self.FUserControl.UserSettings.WindowsPosition; + ShowModal; + end; + finally + SysUtils.FreeAndNil(frmLogin); + end; +end; + +procedure TUCEditorForm.SpeedButton2Click(Sender: TObject); +begin + imgTop.Picture := nil; +end; + +procedure TUCEditorForm.SpeedButton3Click(Sender: TObject); +begin + imgLeft.Picture := nil; +end; + +procedure TUCEditorForm.SpeedButton4Click(Sender: TObject); +begin + imgBottom.Picture := nil; +end; + +procedure TUCEditorForm.SpeedButton5Click(Sender: TObject); +begin + Case TSpeedButton(Sender).Tag of + 0 : cbActionList.ItemIndex := -1; + 1 : cbActionMainMenuBar.ItemIndex := -1; + 2 : cbActionManager.ItemIndex := -1; + 3 : cbMainMenu.ItemIndex := -1; + End; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/UCIdle.pas b/internal/2.31RC1/1/Source/UCIdle.pas new file mode 100644 index 0000000..847719b --- /dev/null +++ b/internal/2.31RC1/1/Source/UCIdle.pas @@ -0,0 +1,138 @@ +unit UCIdle; + +interface + +uses Classes, UCBase, Dialogs, Windows, Forms, ExtCtrls, Messages,SysUtils; + +type + + TUCIdle = class; + TUCIdleTimeLeft = procedure (TimeLeft : Integer) of Object; + + TThUCIdle = class(TThread) + private + procedure DoIdle; + procedure TimeLeftSinc; + protected + procedure Execute; override; + public + CurrentMilisec : Integer; + UCIdle : TUCIdle; + end; + + TUCIdle = class(TComponent) + private + FThIdle : TThUCIdle; + FTimeOut: Integer; + FOnIdle: TNotifyEvent; + FUserControl: TUserControl; //changed from FUCComp to FUserControl + FOnAppMessage : TMessageEvent; + FTimeLeftNotify: TUCIdleTimeLeft; + procedure UCAppMessage(var Msg: TMsg; var Handled: Boolean); + procedure SetUserControl(const Value: TUserControl); + protected + procedure Loaded; override; + procedure Notification(AComponent: TComponent; + AOperation: TOperation); override; //added by fduenas + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure DoIdle; + published + property UserControl : TUserControl read FUserControl write SetUserControl; //changed by fduenas + property OnIdle : TNotifyEvent read FOnIdle write FOnIdle; + property OnTimeLeftNotify : TUCIdleTimeLeft read FTimeLeftNotify write FTimeLeftNotify; + property Timeout : Integer read FTimeOut write FTimeOut; + end; + + +implementation + +{ TUCIdle } + +constructor TUCIdle.Create(AOwner: TComponent); +begin + inherited Create(AOwner); +end; + +destructor TUCIdle.Destroy; +begin + FreeAndNil( FThIdle ); + inherited; +end; + +procedure TUCIdle.DoIdle; +begin + if Assigned(UserControl) and (UserControl.CurrentUser.UserID <> 0 ) then + UserControl.Logoff; + if Assigned(OnIdle) then OnIdle(Self); +end; + +procedure TUCIdle.Loaded; +begin + inherited; + if not (csDesigning in ComponentState) then + if (Assigned(UserControl)) or (Assigned(OnIdle))then + begin + if Assigned(Application.OnMessage) then FOnAppMessage := Application.OnMessage; + Application.OnMessage := UCAppMessage; + FThIdle := TThUCIdle.Create(True); + FThIdle.CurrentMilisec := 0; + FThIdle.UCIdle := Self; + FThIdle.Resume; + end; +end; + +procedure TUCIdle.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + If AOperation = opRemove then + If AComponent = FUserControl then + FUserControl := nil; + inherited Notification(AComponent, AOperation) ; + +end; + +procedure TUCIdle.SetUserControl(const Value: TUserControl); +begin + FUserControl := Value; + if Value <> nil then + Value.FreeNotification(self); +end; + +procedure TUCIdle.UCAppMessage(var Msg: TMsg; var Handled: Boolean); +begin + if (msg.message = wm_mousemove) or (msg.message = wm_keydown) then FThIdle.CurrentMilisec := 0; + + if Assigned(FOnAppMessage) then FOnAppMessage(Msg, Handled); +end; + +{ TThUCIdle } + +procedure TThUCIdle.DoIdle; +begin + UCIdle.DoIdle; +end; + +procedure TThUCIdle.TimeLeftSinc; +begin + if Assigned(UCIdle.OnTimeLeftNotify) then UCIdle.OnTimeLeftNotify(UCIdle.Timeout - CurrentMilisec); +end; + +procedure TThUCIdle.Execute; +begin + while not Terminated do + begin + Sleep(1000); + if UCIdle.Timeout <= CurrentMilisec then + begin + CurrentMilisec := 0; + Synchronize(DoIdle); + end else begin + Inc(CurrentMilisec, 1000); + Synchronize(TimeLeftSinc); + end; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Source/UCLock.res b/internal/2.31RC1/1/Source/UCLock.res new file mode 100644 index 0000000000000000000000000000000000000000..4a1f3aee32663f1f7fb53162354e28d37833d5b0 GIT binary patch literal 3172 zcmcK5&ube;6u|N4A0QQ#*10skWe_3ht*Gj)&*!*N_SU|TLj^kI z?py|}_G$+mRM>;3r$YaR9tL{pQKzVosN3)CNVZc-EE_WNXWzb^nVsF4Su7%AP*oYH zuav*mm-QR8S*z=|w%*%ZHhP~E1B*3TT&B*(-(OrH z@5udLZ?|vj7K7oqvwo}J@AbZ^^A`2%MbZ1Z|J`X`6vckKw_A5;4$4lQ_ZK%P%kDPS z%X(Snw{m-7fbF7a7wvZ4Uz!Z?q}acGKL2q>_04)bNdxS2!xx)5PdB`NyJ&xKyvUi7 z>+PbrSuXPCaJ;qNZcA&?fV@*zEgNvdl())7gF%@lv{jbnw{<%vod)D0<21b=*E!>g z)XUK=$6Xqh^yjSGrDMudhau->IVi{JMrHZSkoBMp7x{5cS))|nT0T%pQaKh~tE#22 zQB}!w<8d{8N2=-D^24+#cm7U9ZX_?y`G<4dN!VV=jq1_kCzV#eRpI4E6~14q;wSG? z)xZWGA>dd1Syk1n`Ig8>JV{lp%UANLd@f&d{H%`m<$-*W9+UFlZ{tI*ZDUQEsaoQ4 zvFhynLHQ8KRde9TY5iSm{(!5G@=O9syC5_g67UZ|;zO9syC5_g7_PO#n^*~n~=VY}xnB*zD`ukjN9Ny^7zR$_z=qRmDTG+{I>oY%M zQQ1C}-rnS=mG;|wKASzwEl0D%d@{dazn$;Xc*A{0`H^Oq7^g8hNSzKFm+13+Gb`Wpa1Q3P=d;;pG&>t+g+6pj<@Cu`8HedUOeN1mI$r#2XKj~fBL4!p6i|Zz literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/UCMail.pas b/internal/2.31RC1/1/Source/UCMail.pas new file mode 100644 index 0000000..0511b30 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCMail.pas @@ -0,0 +1,317 @@ +{----------------------------------------------------------------------------- + Unit Name: UCMail + Author: QmD + Date: 09-nov-2004 + Purpose: Send Mail messages (forget password, user add/change/password force/etc) + History: included indy 10 support +-----------------------------------------------------------------------------} + + +unit UCMail; + +interface + +{.$I 'UserControl.inc'} + + +uses + Classes, + Dialogs, + UCALSMTPClient, + SysUtils, + UcConsts_Language; + +type + TUCMailMessage = class(TPersistent) + private + FAtivo: Boolean; + FTitulo: String; + FLines: TStrings; + procedure SetLines(const Value: TStrings); + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Ativo: Boolean read FAtivo write FAtivo; + property Titulo: String read FTitulo write FTitulo; + property Mensagem: TStrings read FLines write SetLines; + end; + + TUCMEsqueceuSenha = class(TUCMailMessage) + private + FLabelLoginForm: String; + FMailEnviado: String; + protected + public + published + property LabelLoginForm: String read FLabelLoginForm write FLabelLoginForm; + property MensagemEmailEnviado: String read FMailEnviado write FMailEnviado; + end; + + TMessageTag = procedure(Tag: String; var ReplaceText: String) of object; + + TMailUserControl = class(TComponent) + private + FPorta: Integer; + FEmailRemetente: String; + FUsuario: String; + FNomeRemetente: String; + FSenha: String; + FSMTPServer: String; + FAdicionaUsuario: TUCMailMessage; + FSenhaTrocada: TUCMailMessage; + FAlteraUsuario: TUCMailMessage; + FSenhaForcada: TUCMailMessage; + FEsqueceuSenha: TUCMEsqueceuSenha; + fAuthType: TAlSmtpClientAuthType; + function ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String; + function TrataSenha(Senha: String; Key: Word): String; + procedure onStatus(Status: String); + protected + procedure EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure EnviaEmailAdicionaUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); + procedure EnviaEmailAlteraUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); + procedure EnviaEmailSenhaForcada(Nome, Login, Senha, Email, Perfil: String); + procedure EnviaEmailSenhaTrocada(Nome, Login, Senha, Email, Perfil: String; Key: Word); + procedure EnviaEsqueceuSenha(Nome, Login, Senha, Email, Perfil: String; Key: Word); + published + property AuthType : TAlSmtpClientAuthType read fAuthType write fAuthType; + property ServidorSMTP: String read FSMTPServer write FSMTPServer; + property Usuario: String read FUsuario write FUsuario; + property Senha: String read FSenha write FSenha; + property Porta: Integer read FPorta write FPorta default 0; + property NomeRemetente: String read FNomeRemetente write FNomeRemetente; + property EmailRemetente: String read FEmailRemetente write FEmailRemetente; + property AdicionaUsuario: TUCMailMessage read FAdicionaUsuario write FAdicionaUsuario; + property AlteraUsuario: TUCMailMessage read FAlteraUsuario write FAlteraUsuario; + property EsqueceuSenha: TUCMEsqueceuSenha read FEsqueceuSenha write FEsqueceuSenha; + property SenhaForcada: TUCMailMessage read FSenhaForcada write FSenhaForcada; + property SenhaTrocada: TUCMailMessage read FSenhaTrocada write FSenhaTrocada; + end; + +implementation + +uses + UCBase, + UCEMailForm_U; + +{ TMailAdicUsuario } + +procedure TUCMailMessage.Assign(Source: TPersistent); +begin + if Source is TUCMailMessage then + begin + Self.Ativo := TUCMailMessage(Source).Ativo; + Self.Titulo := TUCMailMessage(Source).Titulo; + Self.Mensagem.Assign(TUCMailMessage(Source).Mensagem); + end + else + inherited; +end; + +constructor TUCMailMessage.Create(AOwner: TComponent); +begin + FLines := TStringList.Create; +end; + +destructor TUCMailMessage.Destroy; +begin + SysUtils.FreeAndNil(FLines); + inherited; +end; + +procedure TUCMailMessage.SetLines(const Value: TStrings); +begin + FLines.Assign(Value); +end; + +{ TMailUserControl } + +constructor TMailUserControl.Create(AOwner: TComponent); +begin + inherited; + AdicionaUsuario := TUCMailMessage.Create(self); + AdicionaUsuario.FLines.Add('Inclusão de usuário'); + AdicionaUsuario.FLines.Add(''); + AdicionaUsuario.fLines.Add('Nome...: :nome'); + AdicionaUsuario.fLines.Add('Login..: :login'); + AdicionaUsuario.fLines.Add('Senha..: :senha'); + AdicionaUsuario.fLines.Add('Email..: :email'); + AdicionaUsuario.fLines.Add('Perfil.: :perfil'); + AdicionaUsuario.fTitulo := 'Inclusão de usuário'; + + + AlteraUsuario := TUCMailMessage.Create(self); + AlteraUsuario.FLines.Add('Alteração de usuário'); + AlteraUsuario.FLines.Add(''); + AlteraUsuario.fLines.Add('Nome...: :nome'); + AlteraUsuario.fLines.Add('Login..: :login'); + AlteraUsuario.fLines.Add('Senha..: :senha'); + AlteraUsuario.fLines.Add('Email..: :email'); + AlteraUsuario.fLines.Add('Perfil.: :perfil'); + AlteraUsuario.fTitulo := 'Alteração de usuário'; + + EsqueceuSenha := TUCMEsqueceuSenha.Create(self); + EsqueceuSenha.FLines.Add('Esquecia a senha'); + EsqueceuSenha.FLines.Add(''); + EsqueceuSenha.fLines.Add('Nome...: :nome'); + EsqueceuSenha.fLines.Add('Login..: :login'); + EsqueceuSenha.fLines.Add('Senha..: :senha'); + EsqueceuSenha.fLines.Add('Email..: :email'); + EsqueceuSenha.fLines.Add('Perfil.: :perfil'); + EsqueceuSenha.fTitulo := 'Lembrete de senha'; + + SenhaForcada := TUCMailMessage.Create(self); + SenhaForcada.FLines.Add('Troca de senha forçada'); + SenhaForcada.FLines.Add(''); + SenhaForcada.fLines.Add('Nome...: :nome'); + SenhaForcada.fLines.Add('Login..: :login'); + SenhaForcada.fLines.Add('Senha..: :senha'); + SenhaForcada.fLines.Add('Email..: :email'); + SenhaForcada.fLines.Add('Perfil.: :perfil'); + SenhaForcada.fTitulo := 'Troca de senha forçada'; + + SenhaTrocada := TUCMailMessage.Create(self); + SenhaTrocada.FLines.Add('Alteração de senha'); + SenhaTrocada.FLines.Add(''); + SenhaTrocada.fLines.Add('Nome...: :nome'); + SenhaTrocada.fLines.Add('Login..: :login'); + SenhaTrocada.fLines.Add('Senha..: :senha'); + SenhaTrocada.fLines.Add('Email..: :email'); + SenhaTrocada.fLines.Add('Perfil.: :perfil'); + SenhaTrocada.fTitulo := 'Alteração de senha'; + + fAuthType := alsmtpClientAuthPlain; + if csDesigning in ComponentState then + begin + Porta := 25; + AdicionaUsuario.Ativo := True; + AlteraUsuario.Ativo := True; + EsqueceuSenha.Ativo := True; + SenhaForcada.Ativo := True; + SenhaTrocada.Ativo := True; + EsqueceuSenha.LabelLoginForm := RetornaLingua( ucPortuguesBr, 'Const_Log_LbEsqueciSenha'); + EsqueceuSenha.MensagemEmailEnviado := RetornaLingua( ucPortuguesBr,'Const_Log_MsgMailSend'); + end; + +end; + +destructor TMailUserControl.Destroy; +begin + SysUtils.FreeAndNil(FAdicionaUsuario); + SysUtils.FreeAndNil(FAlteraUsuario); + SysUtils.FreeAndNil(FEsqueceuSenha); + SysUtils.FreeAndNil(FSenhaForcada); + SysUtils.FreeAndNil(FSenhaTrocada); + + inherited; +end; + +procedure TMailUserControl.EnviaEmailAdicionaUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); +begin + Senha := TrataSenha(Senha, Key); + EnviaEmailTP(Nome, Login, Senha, Email, Perfil, AdicionaUsuario); +end; + +procedure TMailUserControl.EnviaEmailAlteraUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word); +begin + Senha := TrataSenha(Senha, Key); + EnviaEmailTP(Nome, Login, Senha, Email, Perfil, AlteraUsuario); +end; + +procedure TMailUserControl.EnviaEmailSenhaForcada(Nome, Login, Senha, Email, Perfil: String); +begin + EnviaEmailTP(Nome, Login, Senha, Email, Perfil, SenhaForcada); +end; + +procedure TMailUserControl.EnviaEmailSenhaTrocada(Nome, Login, Senha, Email, Perfil: String; Key: Word); +begin + EnviaEmailTP(Nome, Login, Senha, Email, Perfil, SenhaTrocada); +end; + +function TMailUserControl.ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String; +begin + Txt := StringReplace(txt, ':nome', nome, [rfReplaceAll]); + Txt := StringReplace(txt, ':login', login, [rfReplaceAll]); + Txt := StringReplace(txt, ':senha', senha, [rfReplaceAll]); + Txt := StringReplace(txt, ':email', email, [rfReplaceAll]); + Txt := StringReplace(txt, ':perfil', perfil, [rfReplaceAll]); + Result := Txt; +end; + +procedure TMailUserControl.onStatus( Status : String ); +begin + if not Assigned(UCEMailForm) then Exit; + UCEMailForm.lbStatus.Caption := Status; + UCEMailForm.Update; +end; + +procedure TMailUserControl.EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage); +var + MailMsg : TAlSmtpClient; + MailRecipients : TStringlist; + MailHeader : TALSMTPClientHeader; +begin + if Trim(Email) = '' then + Exit; + MailMsg := TAlSmtpClient.Create; + MailMsg.OnStatus := OnStatus; + MailRecipients := TStringlist.Create; + MailHeader := TALSMTPClientHeader.Create; + MailHeader.From := EmailRemetente; //'rodrigo@oxio.com.br'; + MailHeader.SendTo := Email ; + MailRecipients.Append(Email); + MailHeader.Subject := UCMSG.Titulo; + + try + try + UCEMailForm := TUCEMailForm.Create(Self); + UCEMailForm.lbStatus.Caption := ''; + UCEMailForm.Show; + UCEMailForm.Update; + + MailMsg.SendMail(ServidorSMTP, FPorta, NomeRemetente , + MailRecipients, Usuario, Senha, fAuthType , MailHeader.RawHeaderText, + ParseMailMSG(Nome, Login, USenha, Email, Perfil, UCMSG.Mensagem.Text)); + + UCEMailForm.Update; + except + on e: Exception do + begin + Beep; + UCEMailForm.Close; + MessageDlg(E.Message,mtWarning,[mbok],0); + raise; + end; + end; + finally + FreeAndNil(MailMsg); + FreeAndNil(MailHeader); + FreeAndNil(MailRecipients); + FreeAndNil(UCEMailForm); + end; +end; + +procedure TMailUserControl.EnviaEsqueceuSenha(Nome, Login, Senha, Email, Perfil: String; Key: Word); +begin + if Trim(Email) = '' then + Exit; + try + Senha := TrataSenha(Senha, Key); + EnviaEmailTP(Nome, Login, Senha, Email, Perfil, EsqueceuSenha); + MessageDlg(EsqueceuSenha.MensagemEmailEnviado, mtInformation, [mbOK], 0); + except + end; +end; + +function TmailUserControl.TrataSenha(Senha: String; Key: Word): String; +begin + Result := Decrypt(Senha, Key); +end; + +end. diff --git a/internal/2.31RC1/1/Source/UCMessages.pas b/internal/2.31RC1/1/Source/UCMessages.pas new file mode 100644 index 0000000..4ef209c --- /dev/null +++ b/internal/2.31RC1/1/Source/UCMessages.pas @@ -0,0 +1,1137 @@ +unit UCMessages; + +interface + +{$I 'UserControl.inc'} + +uses + Classes, + Dialogs, + Forms, + Graphics, + SysUtils, + UCConsts_language; + +type + TUCAppMessagesMSG = class(TPersistent) + private + FMsgRec_LabelDate: String; + FMsgsForm_BtBtForward: String; + Fmsgsform_btnew: String; + FMsgSend_GroupTo: String; + FMsgSend_WindowCaption: String; + FMsgSend_GroupMessage: String; + FMsgsForm_ColFrom: String; + FMsgsForm_BtDelete: String; + FMsgsForm_BtClose: String; //added by fduenas + FMsgRec_LabelMessage: String; + FMsgRec_Title: String; + FMsgSend_RadioAll: String; + FMsgSend_RadioUser: String; + FMsgSend_Title: String; + FMsgsForm_ColSubject: String; + FMsgRec_LabelFrom: String; + FMsgsForm_WindowCaption: String; + FMsgRec_LabelSubject: String; + FMsgRec_WindowCaption: String; + FMsgSend_BtSend: String; + FMsgSend_BtCancel: String; + FMsgsForm_BtReplay: String; + FMsgRec_BtClose: String; + FMsgSend_LabelSubject: String; //added by fduenas + FMsgSend_LabelMessageText: String; //added by fduenas + FMsgsForm_PromptDelete: String; + FMsgsForm_PromptDelete_WindowCaption: String; //added by fduenas + FMsgsForm_ColDate: String; + FMsgsForm_NoMessagesSelected: String; //added by fduenas + FMsgsForm_NoMessagesSelected_WindowCaption: String; //added by fduenas + protected + public + constructor Create(Aowner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property MsgsForm_BtNew: String read Fmsgsform_btnew write Fmsgsform_btnew; + property MsgsForm_BtReplay: String read FMsgsForm_BtReplay write FMsgsForm_BtReplay; + property MsgsForm_BtForward: String read FMsgsForm_BtBtForward write FMsgsForm_BtBtForward; + property MsgsForm_BtDelete: String read FMsgsForm_BtDelete write FMsgsForm_BtDelete; + property MsgsForm_BtClose: String read FMsgsForm_BtClose write FMsgsForm_BtClose; //added By fduenas + property MsgsForm_WindowCaption: String read FMsgsForm_WindowCaption write FMsgsForm_WindowCaption; + property MsgsForm_ColFrom: String read FMsgsForm_ColFrom write FMsgsForm_ColFrom; + property MsgsForm_ColSubject: String read FMsgsForm_ColSubject write FMsgsForm_ColSubject; + property MsgsForm_ColDate: String read FMsgsForm_ColDate write FMsgsForm_ColDate; + property MsgsForm_PromptDelete: String read FMsgsForm_PromptDelete write FMsgsForm_PromptDelete; + property MsgsForm_PromptDelete_WindowCaption: String read FMsgsForm_PromptDelete_WindowCaption write FMsgsForm_PromptDelete_WindowCaption; //added by fduenas + property MsgsForm_NoMessagesSelected: String read FMsgsForm_NoMessagesSelected write FMsgsForm_NoMessagesSelected; //added by fduenas + property MsgsForm_NoMessagesSelected_WindowCaption: String read FMsgsForm_NoMessagesSelected_WindowCaption write FMsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas + + property MsgRec_BtClose: String read FMsgRec_BtClose write FMsgRec_BtClose; + property MsgRec_WindowCaption: String read FMsgRec_WindowCaption write FMsgRec_WindowCaption; + property MsgRec_Title: String read FMsgRec_Title write FMsgRec_Title; + property MsgRec_LabelFrom: String read FMsgRec_LabelFrom write FMsgRec_LabelFrom; + property MsgRec_LabelDate: String read FMsgRec_LabelDate write FMsgRec_LabelDate; + property MsgRec_LabelSubject: String read FMsgRec_LabelSubject write FMsgRec_LabelSubject; + property MsgRec_LabelMessage: String read FMsgRec_LabelMessage write FMsgRec_LabelMessage; + + property MsgSend_BtSend: String read FMsgSend_BtSend write FMsgSend_BtSend; + property MsgSend_BtCancel: String read FMsgSend_BtCancel write FMsgSend_BtCancel; + property MsgSend_WindowCaption: String read FMsgSend_WindowCaption write FMsgSend_WindowCaption; + property MsgSend_Title: String read FMsgSend_Title write FMsgSend_Title; + property MsgSend_GroupTo: String read FMsgSend_GroupTo write FMsgSend_GroupTo; + property MsgSend_RadioUser: String read FMsgSend_RadioUser write FMsgSend_RadioUser; + property MsgSend_RadioAll: String read FMsgSend_RadioAll write FMsgSend_RadioAll; + property MsgSend_GroupMessage: String read FMsgSend_GroupMessage write FMsgSend_GroupMessage; + property MsgSend_LabelSubject: String read FMsgSend_LabelSubject write FMsgSend_LabelSubject; //added by fduenas + property MsgSend_LabelMessageText: String read FMsgSend_LabelMessageText write FMsgSend_LabelMessageText; //added by fduenas + end; + + TUCChangePassError = class(TPersistent) + private + FInvalidCurrentPassword: String; + FNewPasswordError: String; + FNewEqualCurrent: String; + FPasswordRequired: String; + FMinPasswordLength: String; + FInvalidNewPassword: String; + protected + public + constructor Create(Aowner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property InvalidCurrentPassword: String read FInvalidCurrentPassword write FInvalidCurrentPassword; + property NewPasswordError: String read FNewPasswordError write FNewPasswordError; + property NewEqualCurrent: String read FNewEqualCurrent write FNewEqualCurrent; + property PasswordRequired: String read FPasswordRequired write FPasswordRequired; + property MinPasswordLength: String read FMinPasswordLength write FMinPasswordLength; + property InvalidNewPassword: String read FInvalidNewPassword write FInvalidNewPassword; + end; + + TUCUserCommonMSG = class(TPersistent) + private + FPasswordOFF: String; + FPasswordChanged: String; + FInvalidUserPass: String; + FMaxLoginTry: String; + FAutoLogonError: String; + FFirstMSG: TStrings; + FChangePasswordError: TUCChangePassError; + FUsuarioExiste: String; + fPasswordExpired: String; + fForcaTrocaSenha: String; + fInactiveLogin: String; + procedure SetFErroTrocaSenha(const Value: TUCChangePassError); + procedure SetFFirstMSG(const Value: TStrings); + protected + + public + constructor Create(Aowner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property AutoLogonError: String read FAutoLogonError write FAutoLogonError; + property ChangePasswordError: TUCChangePassError read FChangePasswordError write SetFErroTrocaSenha; + property InvalidLogin: String read FInvalidUserPass write FInvalidUserPass; + property InactiveLogin: String read fInactiveLogin write fInactiveLogin; + property InitialMessage: TStrings read FFirstMSG write SetFFirstMSG; + property MaxLoginAttemptsError: String read FMaxLoginTry write FMaxLoginTry; + property PasswordChanged: String read FPasswordChanged write FPasswordChanged; + property BlankPassword: String read FPasswordOFF write FPasswordOFF; + property UsuarioExiste: String read FUsuarioExiste write FUsuarioExiste; + property PasswordExpired : String read fPasswordExpired write fPasswordExpired; + property ForcaTrocaSenha : String read fForcaTrocaSenha write fForcaTrocaSenha; + end; + + TUCLoginFormMSG = class(TPersistent) + private + FWindowCaption: String; + FLabelUser: String; + FLabelPassword: String; + FBtOk: String; + FBtCancel: String; + FBottomImage: TPicture; + FLeftImage: TPicture; + FTopImage: TPicture; + fLabelTentativas: String; + fLabelTentativa: String; + procedure SetFBottomImage(const Value: TPicture); + procedure SetFLeftImage(const Value: TPicture); + procedure SetFTopImage(const Value: TPicture); + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelUser: String read FLabelUser write FLabelUser; + property LabelPassword: String read FLabelPassword write FLabelPassword; + property BtOk: String read FBtOk write FBtOk; + property BtCancel: String read FBtCancel write FBtCancel; + property TopImage: TPicture read FTopImage write SetFTopImage; + property LeftImage: TPicture read FLeftImage write SetFLeftImage; + property BottomImage: TPicture read FBottomImage write SetFBottomImage; + property LabelTentativa : String read fLabelTentativa write fLabelTentativa; // by vicente barros leonel + property LabelTentativas : String read fLabelTentativas write fLabelTentativas; // by vicente barros leonel + end; + + TUCCadUserFormMSG = class(TPersistent) + private + FWindowCaption: String; + FLabelDescricao: String; + FColNome: String; + FColLogin: String; + FColEmail: String; + FBtAdic: String; + FBtAlt: String; + FBtExc: String; + FBtAccess: String; + FBtPass: String; + FBtClose: String; + FConfExc: String; + FPromptDelete_WindowCaption: String; //added by fduenas + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelDescription: String read FLabelDescricao write FLabelDescricao; + property ColName: String read FColNome write FColNome; + property ColLogin: String read FColLogin write FColLogin; + property ColEmail: String read FColEmail write FColEmail; + property BtAdd: String read FBtAdic write FBtAdic; + property BtChange: String read FBtAlt write FBtAlt; + property BtDelete: String read FBtExc write FBtExc; + property PromptDelete: String read FConfExc write FConfExc; + property PromptDelete_WindowCaption: String read FPromptDelete_WindowCaption write FPromptDelete_WindowCaption; //added by fduenas + property BtRights: String read FBtAccess write FBtAccess; + property BtPassword: String read FBtPass write FBtPass; + property BtClose: String read FBtClose write FBtClose; + end; + + TUCLogControlFormMSG = class(TPersistent) + private + FColAppID: String; + FColData: String; + FColNivel: String; + FColUsuario: String; + FColMensagem: String; + FLabelDescription: String; + FWindowCaption: String; + FLabelLevel: String; + FBtClose: String; + FConfExc: String; + FLabelUser: String; + FBtFilt: String; + FLabelDate: String; + FBtExc: String; + FOptionUserAll: String; //added by fduenas + FOptionLevelLow: String; //added by fduenas + FOptionLevelNormal: String; //added by fduenas + FOptionLevelHigh: String; //added by fduenas + FOptionLevelCritic: String; //added by fduenas + FPromptDelete_WindowCaption: String; //added by fduenas + FDeletePerformed: String; + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelDescription: String read FLabelDescription write FLabelDescription; + property LabelUser: String read FLabelUser write FLabelUser; + property LabelDate: String read FLabelDate write FLabelDate; + property LabelLevel: String read FLabelLevel write FLabelLevel; + property ColAppID: String read FColAppID write FColAppID; + property ColLevel: String read FColNivel write FColNivel; + property ColMessage: String read FColMensagem write FColMensagem; + property ColUser: String read FColUsuario write FColUsuario; + property ColDate: String read FColData write FColData; + property BtFilter: String read FBtFilt write FBtFilt; + property BtDelete: String read FBtExc write FBtExc; + property BtClose: String read FBtClose write FBtClose; + property PromptDelete: String read FConfExc write FConfExc; + property PromptDelete_WindowCaption: String read FPromptDelete_WindowCaption write FPromptDelete_WindowCaption; //added by fduenas + property OptionUserAll: String read FOptionUserAll write FOptionUserAll; //added by fduenas + property OptionLevelLow: String read FOptionLevelLow write FOptionLevelLow; //added by fduenas + property OptionLevelNormal: String read FOptionLevelNormal write FOptionLevelNormal; //added by fduenas + property OptionLevelHigh: String read FOptionLevelHigh write FOptionLevelHigh; //added by fduenas + property OptionLevelCritic: String read FOptionLevelCritic write FOptionLevelCritic; //added by fduenas + property DeletePerformed: String read FDeletePerformed write FDeletePerformed; //added by fduenas + end; + + TUCProfileUserFormMSG = class(TPersistent) + private + FWindowCaption: String; + FLabelDescription: String; + FColPerfil: String; + FBtAdic: String; + FBtAlt: String; + FBtExc: String; + FBtAcess: String; + FBtClose: String; + FConfExc: String; + FPromptDelete_WindowCaption: String; //added by fduenas + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelDescription: String read FLabelDescription write FLabelDescription; + property ColProfile: String read FColPerfil write FColPerfil; + property BtAdd: String read FBtAdic write FBtAdic; + property BtChange: String read FBtAlt write FBtAlt; + property BtDelete: String read FBtExc write FBtExc; + property BtRights: String read FBtAcess write FBtAcess; //BGM + property PromptDelete: String read FConfExc write FConfExc; + property PromptDelete_WindowCaption: String read FPromptDelete_WindowCaption write FPromptDelete_WindowCaption; //added by fduenas + property BtClose: String read FBtClose write FBtClose; + end; + + TUCAddUserFormMSG = class(TPersistent) + private + FWindowCaption: String; + FLabelAdd: String; + FLabelChange: String; + FLabelNome: String; + FLabelLogin: String; + FLabelEmail: String; + FCheckPriv: String; + FBtSave: String; + FBtCancelar: String; + FLabelPerfil: String; + fCheckExpira: String; + fExpiredIn: string; + fDay: String; + fLabelStatus: String; + fStatusDisabled: string; + fStatusActive: String; + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelAdd: String read FLabelAdd write FLabelAdd; + property LabelChange: String read FLabelChange write FLabelChange; + property LabelName: String read FLabelNome write FLabelNome; + property LabelLogin: String read FLabelLogin write FLabelLogin; + property LabelEmail: String read FLabelEmail write FLabelEmail; + property LabelPerfil: String read FLabelPerfil write FLabelPerfil; + property CheckPrivileged: String read FCheckPriv write FCheckPriv; + property BtSave: String read FBtSave write FBtSave; + property BtCancel: String read FBtCancelar write FBtCancelar; + property CheckExpira: String read fCheckExpira write fCheckExpira; + property Day : String read fDay write fDay; + property ExpiredIn : string read fExpiredIn write fExpiredIn; + property LabelStatus : String read fLabelStatus write fLabelStatus; + property StatusActive : String read fStatusActive write fStatusActive; + property StatusDisabled : string read fStatusDisabled write fStatusDisabled; + end; + + TUCAddProfileFormMSG = class(TPersistent) + private + FWindowCaption, FLabelAdd, FLabelChange, FLabelName, FBtGravar, FBtCancel: String; + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelAdd: String read FLabelAdd write FLabelAdd; + property LabelChange: String read FLabelChange write FLabelChange; + property LabelName: String read FLabelName write FLabelName; + property BtSave: String read FBtGravar write FBtGravar; + property BtCancel: String read FBtCancel write FBtCancel; + end; + + TUCPermissFormMSG = class(TPersistent) + private + FWindowCaption: String; + FBtCancela: String; + FBtGrava: String; + FBtLock: String; + FBtUnlock: String; + FPageActions: String; + FPageMenu: String; + FLabelProfile: String; + FLabelUser: String; + fPageControls: string; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelUser: String read FLabelUser write FLabelUser; + property LabelProfile: String read FLabelProfile write FLabelProfile; + property PageMenu: String read FPageMenu write FPageMenu; + property PageActions: String read FPageActions write FPageActions; + property PageControls: string read fPageControls write fPageControls; + property BtUnlock: String read FBtUnlock write FBtUnlock; + property BtLock: String read FBtLock write FBtLock; + property BtSave: String read FBtGrava write FBtGrava; + property BtCancel: String read FBtCancela write FBtCancela; + end; + + TUCTrocaSenhaFormMSG = class(TPersistent) + private + FWindowCaption: String; + FBtCancel: String; + FBtSave: String; + FLabelConfirm: String; + FLabelNewPassword: String; + FLabelCurrentPassword: String; + FLabelDescription: String; + protected + + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelDescription: String read FLabelDescription write FLabelDescription; + property LabelCurrentPassword: String read FLabelCurrentPassword write FLabelCurrentPassword; + property LabelNewPassword: String read FLabelNewPassword write FLabelNewPassword; + property LabelConfirm: String read FLabelConfirm write FLabelConfirm; + property BtSave: String read FBtSave write FBtSave; + property BtCancel: String read FBtCancel write FBtCancel; + end; + + TUCResetPassword = class(TPersistent) + private + FWindowCaption: String; + FLabelPassword: String; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property WindowCaption: String read FWindowCaption write FWindowCaption; + property LabelPassword: String read FLabelPassword write FLabelPassword; + end; + + TUCCadUserLoggedMSG = Class( TPersistent ) + private + fBtnMessage: String; + fBtnRefresh: String; + fBtnClose: String; + fLabelDescricao: String; + fLabelCaption: String; + FColLogin: String; + FColData: String; + FColNome: String; + FColComputer: String; + fInputCaption: String; + fInputText: String; + fMsgSystem: String; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property BtnMessage : String read fBtnMessage write fBtnMessage; + property BtnRefresh : String read fBtnRefresh write fBtnRefresh; + property BtnClose : String read fBtnClose write fBtnClose; + property LabelDescricao : String read fLabelDescricao write fLabelDescricao; + property LabelCaption : String read fLabelCaption write fLabelCaption; + property ColName : String read FColNome write FColNome; + property ColLogin : String read FColLogin write FColLogin; + property ColComputer : String read FColComputer write FColComputer; + property ColData : String read FColData write FColData; + + property InputCaption : String read fInputCaption write fInputCaption; + property InputText : String read fInputText write fInputText; + property MsgSystem : String read fMsgSystem write fMsgSystem; + End; + + TUCTypeBancoDados = ( Interbase , Firebird , MySql , PARADOX, Oracle , SqlServer, PostgreSQL ); + + TUCUserSettings = class(TPersistent) + private + FUserCommomMSG: TUCUserCommonMSG; + FLoginFormMSG: TUCLoginFormMSG; + FCadUserFormMSG: TUCCadUserFormMSG; + FAddUserFormMSG: TUCAddUserFormMSG; + FPermissFormMSG: TUCPermissFormMSG; + FTrocaSenhaFormMSG: TUCTrocaSenhaFormMSG; + FResetPassword: TUCResetPassword; + FProfileUserFormMSG: TUCProfileUserFormMSG; + FAddProfileFormMSG: TUCAddProfileFormMSG; + FLogControlFormMSG: TUCLogControlFormMSG; + FAppMessagesMSG: TUCAppMessagesMSG; + FPosition: TPosition; + fLanguage: TUCLanguage; + fUsersLogged: TUCCadUserLoggedMSG; + fBancoDados: TUCTypeBancoDados; + procedure SetFResetPassword(const Value: TUCResetPassword); + procedure SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG); + procedure SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG); + procedure SetFLogControlFormMSG(const Value: TUCLogControlFormMSG); + procedure SetAppMessagesMSG(const Value: TUCAppMessagesMSG); + procedure SetfUsersLogged(const Value: TUCCadUserLoggedMSG); + procedure SetfBancoDados(const Value: TUCTypeBancoDados); + protected + procedure SetFUserCommonMsg(const Value: TUCUserCommonMSG); + procedure SetFFormLoginMsg(const Value: TUCLoginFormMSG); + procedure SetFCadUserFormMSG(const Value: TUCCadUserFormMSG); + procedure SetFAddUserFormMSG(const Value: TUCAddUserFormMSG); + procedure SetFPermissFormMSG(const Value: TUCPermissFormMSG); + procedure SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG); + public + Type_Int , + Type_Char , + Type_VarChar , + Type_Memo : String; + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + + published + property AppMessages: TUCAppMessagesMSG read FAppMessagesMSG write SetAppMessagesMSG; + property CommonMessages: TUCUserCommonMSG read FUserCommomMSG write SetFUserCommonMSg; + property Login: TUCLoginFormMSG read FLoginFormMSG write SetFFormLoginMsg; + property Log: TUCLogControlFormMSG read FLogControlFormMSG write SetFLogControlFormMSG; + property UsersForm: TUCCadUserFormMSG read FCadUserFormMSG write SetFCadUserFormMSG; + property AddChangeUser: TUCAddUserFormMSG read FAddUserFormMSG write SetFAddUserFormMSG; + property AddChangeProfile: TUCAddProfileFormMSG read FAddProfileFormMSG write SetFAddProfileFormMSG; + property UsersProfile: TUCProfileUserFormMSG read FProfileUserFormMSG write SetFProfileUserFormMSG; + property Rights: TUCPermissFormMSG read FPermissFormMSG write SetFPermissFormMSG; + property ChangePassword: TUCTrocaSenhaFormMSG read FTrocaSenhaFormMSG write SetFTrocaSenhaFormMSG; + property ResetPassword: TUCResetPassword read FResetPassword write SetFResetPassword; + property WindowsPosition: TPosition read FPosition write FPosition; + Property BancoDados : TUCTypeBancoDados read fBancoDados write SetfBancoDados; + property Language : TUCLanguage read fLanguage write fLanguage; + property UsersLogged : TUCCadUserLoggedMSG read fUsersLogged write SetfUsersLogged; + end; + + +implementation + +uses UCSettings; + +{ TUserSettings } + +procedure TUCUserSettings.Assign(Source: TPersistent); +begin + if Source is TUCUserSettings then + Self.CommonMessages.Assign(TUCUserSettings(Source).CommonMessages) + else + inherited; +end; + +constructor TUCUserSettings.Create(AOwner: TComponent); +begin + inherited Create; + FAppMessagesMSG := TUCAppMessagesMSG.Create(nil); + FLoginFormMSG := TUCLoginFormMSG.Create(nil); + FUserCommomMSG := TUCUserCommonMSG.Create(nil); + FCadUserFormMSG := TUCCadUserFormMSG.Create(nil); + FAddUserFormMSG := TUCAddUserFormMSG.Create(nil); + FAddProfileFormMSG := TUCAddProfileFormMSG.Create(nil); + FPermissFormMSG := TUCPermissFormMSG.Create(nil); + FProfileUserFormMSG := TUCProfileUserFormMSG.Create(nil); + FTrocaSenhaFormMSG := TUCTrocaSenhaFormMSG.Create(nil); + FResetPassword := TUCResetPassword.Create(nil); + FLogControlFormMSG := TUCLogControlFormMSG.Create(nil); + FPosition := poMainFormCenter; + fBancoDados := FireBird; + fUsersLogged := TUCCadUserLoggedMSG.Create(nil); + RetornaSqlBancoDados( fBancoDados, Type_Int,Type_Char,Type_VarChar,Type_Memo ); +end; + +destructor TUCUserSettings.Destroy; +begin + SysUtils.FreeAndNil(FAppMessagesMSG); + SysUtils.FreeAndNil(FLoginFormMSG); + SysUtils.FreeAndNil(FUserCommomMSG); + SysUtils.FreeAndNil(FCadUserFormMSG); + SysUtils.FreeAndNil(FAddUserFormMSG); + SysUtils.FreeAndNil(FAddProfileFormMSG); + SysUtils.FreeAndNil(FPermissFormMSG); + SysUtils.FreeAndNil(FProfileUserFormMSG); + SysUtils.FreeAndNil(FTrocaSenhaFormMSG); + SysUtils.FreeAndNil(FResetPassword); + SysUtils.FreeAndNil(FLogControlFormMSG); + SysUtils.FreeAndNil(fUsersLogged); + inherited; +end; + +procedure TUCUserSettings.SetAppMessagesMSG(const Value: TUCAppMessagesMSG); +begin + FAppMessagesMSG := Value; +end; + +procedure TUCUserSettings.SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG); +begin + FAddProfileFormMSG := Value; +end; + +procedure TUCUserSettings.SetFAddUserFormMSG(const Value: TUCAddUserFormMSG); +begin + AddChangeUser := Value; +end; + +procedure TUCUserSettings.SetfBancoDados(const Value: TUCTypeBancoDados); +begin + fBancoDados := Value; + RetornaSqlBancoDados( fBancoDados , Type_Int,Type_Char,Type_VarChar,Type_Memo ); +end; + +procedure TUCUserSettings.SetFCadUserFormMSG(const Value: TUCCadUserFormMSG); +begin + UsersForm := Value; +end; + +procedure TUCUserSettings.SetFFormLoginMsg(const Value: TUCLoginFormMSG); +begin + Login := Value; +end; + +procedure TUCUserSettings.SetFLogControlFormMSG(const Value: TUCLogControlFormMSG); +begin + FLogControlFormMSG := Value; +end; + +procedure TUCUserSettings.SetFPermissFormMSG(const Value: TUCPermissFormMSG); +begin + Rights := Value; +end; + +procedure TUCUserSettings.SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG); +begin + FProfileUserFormMSG := Value; +end; + +procedure TUCUserSettings.SetFResetPassword(const Value: TUCResetPassword); +begin + FResetPassword := Value; +end; + +procedure TUCUserSettings.SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG); +begin + ChangePassword := Value; +end; + +procedure TUCUserSettings.SetFUserCommonMsg(const Value: TUCUserCommonMSG); +begin + CommonMessages := Value; +end; + +procedure TUCUserSettings.SetfUsersLogged(const Value: TUCCadUserLoggedMSG); +begin + fUsersLogged := Value; +end; + +{ TUserCommonMSG } + +procedure TUCUserCommonMSG.Assign(Source: TPersistent); +begin + if Source is TUCUserCommonMSG then + begin + Self.BlankPassword := TUCUserCommonMSG(Source).BlankPassword; + Self.PasswordChanged := TUCUserCommonMSG(Source).PasswordChanged; + Self.InitialMessage := TUCUserCommonMSG(Source).InitialMessage; + Self.InvalidLogin := TUCUserCommonMSG(Source).InvalidLogin; + Self.InactiveLogin := TUCUserCommonMSG(Source).InactiveLogin; + Self.MaxLoginAttemptsError := TUCUserCommonMSG(Source).MaxLoginAttemptsError; + Self.ChangePasswordError := TUCUserCommonMSG(Source).ChangePasswordError; + Self.UsuarioExiste := TUCUserCommonMSG(Source).UsuarioExiste; + Self.PasswordExpired := TUCUserCommonMSG(Source).PasswordExpired; + Self.ForcaTrocaSenha := TUCUserCommonMSG(Source).ForcaTrocaSenha; + end + else + inherited; +end; + +constructor TUCUserCommonMSG.Create(Aowner: TComponent); +begin + inherited Create; + ChangePasswordError := TUCChangePassError.Create(nil); + FFirstMSG := TStringList.Create; +end; + +destructor TUCUserCommonMSG.Destroy; +begin + SysUtils.FreeAndNil(FChangePasswordError); + SysUtils.FreeAndNil(FFirstMSG); + inherited; +end; + +procedure TUCUserCommonMSG.SetFErroTrocaSenha(const Value: TUCChangePassError); +begin + FChangePasswordError := Value; +end; + +procedure TUCUserCommonMSG.SetFFirstMSG(const Value: TStrings); +begin + FFirstMSG.Assign(Value); +end; + +{ TLoginFormMSG } + +procedure TUCLoginFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCLoginFormMSG then + with Source as TUCLoginFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelUser := LabelUser; + Self.LabelPassword := LabelPassword; + Self.BtOk := BtOK; + Self.BtCancel := BtCancel; + end + else + inherited; +end; + +constructor TUCLoginFormMSG.Create(AOwner: TComponent); +begin + inherited Create; + FTopImage := TPicture.Create; + FLeftImage := TPicture.Create; + FBottomImage := TPicture.Create; +end; + +destructor TUCLoginFormMSG.Destroy; +begin + SysUtils.FreeAndNil(FTopImage); + SysUtils.FreeAndNil(FLeftImage); + SysUtils.FreeAndNil(FBottomImage); + inherited; +end; + +procedure TUCLoginFormMSG.SetFBottomImage(const Value: TPicture); +begin + FBottomImage.Assign(Value); +end; + +procedure TUCLoginFormMSG.SetFLeftImage(const Value: TPicture); +begin + FLeftImage.Assign(Value); +end; + +procedure TUCLoginFormMSG.SetFTopImage(const Value: TPicture); +begin + FTopImage.Assign(Value); +end; + +{ TCadUserFormMSG } + +procedure TUCCadUserFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCCadUserFormMSG then + with Source as TUCCadUserFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelDescription := LabelDescription; + Self.ColName := ColName; + Self.ColLogin := ColLogin; + Self.ColEmail := ColEmail; + Self.BtAdd := BtAdd; + Self.BtChange := BtChange; + Self.BtDelete := BtDelete; + Self.BtRights := BtRights; + Self.BtPassword := BtPassword; + Self.BtClose := BtClose; + Self.PromptDelete := PromptDelete; + Self.PromptDelete_WindowCaption := PromptDelete_WindowCaption; //added by fduenas + end + else + inherited; +end; + +constructor TUCCadUserFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCCadUserFormMSG.Destroy; +begin + inherited; +end; + +{ TAddUserFormMSG } + +procedure TUCAddUserFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCAddUserFormMSG then + with Source as TUCAddUserFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelAdd := LabelAdd; + Self.LabelChange := LabelChange; + Self.LabelName := LabelName; + Self.LabelLogin := LabelLogin; + Self.LabelEmail := LabelEmail; + Self.LabelPerfil := LabelPerfil; + Self.CheckPrivileged := CheckPrivileged; + Self.BtSave := BtSave; + Self.BtCancel := BtCancel; + Self.CheckExpira := CheckExpira; + Self.Day := Day; + Self.ExpiredIn := ExpiredIn; + Self.LabelStatus := LabelStatus; + Self.StatusDisabled := StatusDisabled; + Self.StatusActive := StatusActive; + end + else + inherited; +end; + +constructor TUCAddUserFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCAddUserFormMSG.Destroy; +begin + inherited; +end; + +{ TPermissFormMSG } + +procedure TUCPermissFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCPermissFormMSG then + with Source as TUCPermissFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelUser := LabelUser; + Self.LabelProfile := LabelProfile; + Self.PageMenu := PageMenu; + Self.PageActions := PageActions; + Self.BtUnlock := BtUnlock; + Self.BtLock := BtLock; + Self.BtSave := BtSave; + Self.BtCancel := BtCancel; + Self.PageControls := PageControls; + end + else + inherited; +end; + +constructor TUCPermissFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCPermissFormMSG.Destroy; +begin + inherited; +end; + +{ TTrocaSenhaFormMSG } + +procedure TUCTrocaSenhaFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCTrocaSenhaFormMSG then + with Source as TUCTrocaSenhaFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelDescription := LabelDescription; + Self.LabelCurrentPassword := LabelCurrentPassword; + Self.LabelNewPassword := LabelNewPassword; + Self.LabelConfirm := LabelConfirm; + Self.BtSave := BtSave; + Self.BtCancel := BtCancel; + end + else + inherited; +end; + +constructor TUCTrocaSenhaFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCTrocaSenhaFormMSG.Destroy; +begin + inherited; +end; + +{ TChangePassError } + +procedure TUCChangePassError.Assign(Source: TPersistent); +begin + if Source is TUCChangePassError then + with Source as TUCChangePassError do + begin + Self.InvalidCurrentPassword := InvalidCurrentPassword; + Self.NewPasswordError := NewPasswordError; + Self.NewEqualCurrent := NewEqualCurrent; + Self.PasswordRequired := PasswordRequired; + Self.MinPasswordLength := MinPasswordLength; + end + else + inherited; +end; + +constructor TUCChangePassError.Create(Aowner: TComponent); +begin + inherited Create; +end; + +destructor TUCChangePassError.Destroy; +begin + inherited; +end; + +{ TResetPassword } + +procedure TUCResetPassword.Assign(Source: TPersistent); +begin + if Source is TUCResetPassword then + begin + Self.WindowCaption := TUCResetPassword(Source).WindowCaption; + Self.LabelPassword := TUCResetPassword(Source).LabelPassword; + end + else + inherited; +end; + +constructor TUCResetPassword.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCResetPassword.Destroy; +begin + inherited; +end; + +{ TProfileUserFormMSG } + +procedure TUCProfileUserFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCProfileUserFormMSG then + with Source as TUCProfileUserFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelDescription := LabelDescription; + Self.ColProfile := ColProfile; + Self.BtAdd := BtAdd; + Self.BtChange := BtChange; + Self.BtDelete := BtDelete; + Self.BtRights := BtRights; //BGM + Self.BtClose := BtClose; + Self.PromptDelete := PromptDelete; + Self.PromptDelete_WindowCaption := PromptDelete_WindowCaption; //added by fduenas + end + else + inherited; +end; + +constructor TUCProfileUserFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCProfileUserFormMSG.Destroy; +begin + inherited; +end; + +{ TAddProfileFormMSG } + +procedure TUCAddProfileFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCAddProfileFormMSG then + with Source as TUCAddProfileFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelAdd := LabelAdd; + Self.LabelChange := LabelChange; + Self.LabelName := LabelName; + Self.BtSave := BtSave; + Self.BtCancel := BtCancel; + end + else + inherited; +end; + +constructor TUCAddProfileFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCAddProfileFormMSG.Destroy; +begin + inherited; +end; + +{ TLogControlFormMSG } + +procedure TUCLogControlFormMSG.Assign(Source: TPersistent); +begin + if Source is TUCLogControlFormMSG then + with Source as TUCLogControlFormMSG do + begin + Self.WindowCaption := WindowCaption; + Self.LabelDescription := LabelDescription; + Self.LabelUser := LabelUser; + Self.LabelDate := LabelDate; + Self.LabelLevel := LabelLevel; + Self.ColLevel := ColLevel; + Self.ColAppID := ColAppID; + Self.ColMessage := ColMessage; + Self.ColUser := ColUser; + Self.ColDate := ColDate; + Self.BtFilter := BtFilter; + Self.BtDelete := BtDelete; + Self.BtClose := BtClose; + Self.PromptDelete := PromptDelete; + Self.PromptDelete_WindowCaption := PromptDelete_WindowCaption; //added by fduenas + Self.OptionUserAll := OptionUserAll; //added by fduenas + Self.OptionLevelLow := OptionLevelLow; //added by fduenas + Self.OptionLevelNormal := OptionLevelNormal; //added by fduenas + Self.OptionLevelHigh := OptionLevelHigh; //added by fduenas + Self.OptionLevelCritic := OptionLevelCritic; //added by fduenas + Self.DeletePerformed := DeletePerformed; //added by fduenas + end + else + inherited; +end; + +constructor TUCLogControlFormMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCLogControlFormMSG.Destroy; +begin + inherited; +end; + +{ TAppMessagesMSG } + +procedure TUCAppMessagesMSG.Assign(Source: TPersistent); +begin + if Source is TUCAppMessagesMSG then + with Source as TUCAppMessagesMSG do + begin + Self.MsgsForm_BtNew := MsgsForm_BtNew; + Self.MsgsForm_BtReplay := MsgsForm_BtReplay; + Self.MsgsForm_BtForward := MsgsForm_BtForward; + Self.MsgsForm_BtDelete := MsgsForm_BtDelete; + Self.MsgsForm_WindowCaption := MsgsForm_WindowCaption; + Self.MsgsForm_ColFrom := MsgsForm_ColFrom; + Self.MsgsForm_ColSubject := MsgsForm_ColSubject; + Self.MsgsForm_ColDate := MsgsForm_ColDate; + Self.MsgsForm_PromptDelete := MsgsForm_PromptDelete; + Self.MsgsForm_PromptDelete_WindowCaption := MsgsForm_PromptDelete_WindowCaption; //added by fduenas + Self.MsgsForm_BtClose := MsgsForm_BtClose; //added by fduenas + Self.MsgsForm_NoMessagesSelected := MsgsForm_NoMessagesSelected; //added by fduenas + Self.MsgsForm_NoMessagesSelected_WindowCaption := MsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas + + Self.MsgRec_BtClose := MsgRec_BtClose; + Self.MsgRec_WindowCaption := MsgRec_WindowCaption; + Self.MsgRec_Title := MsgRec_Title; + Self.MsgRec_LabelFrom := MsgRec_LabelFrom; + Self.MsgRec_LabelDate := MsgRec_LabelDate; + Self.MsgRec_LabelSubject := MsgRec_LabelSubject; + Self.MsgRec_LabelMessage := MsgRec_LabelMessage; + + Self.MsgSend_BtSend := MsgSend_BtSend; + Self.MsgSend_BtCancel := MsgSend_BtCancel; + Self.MsgSend_WindowCaption := MsgSend_WindowCaption; + Self.MsgSend_Title := MsgSend_Title; + Self.MsgSend_GroupTo := MsgSend_GroupTo; + Self.MsgSend_RadioUser := MsgSend_RadioUser; + Self.MsgSend_RadioAll := MsgSend_RadioAll; + Self.MsgSend_GroupMessage := MsgSend_GroupMessage; + Self.MsgSend_LabelSubject := MsgSend_LabelSubject; + Self.MsgSend_LabelMessageText := MsgSend_LabelMessageText; + end + else + inherited; +end; + +constructor TUCAppMessagesMSG.Create(Aowner: TComponent); +begin + inherited Create; +end; + +destructor TUCAppMessagesMSG.Destroy; +begin + inherited; +end; + +{ TUCHistoryMSG } + +{ TUCFieldType } + { +procedure TUCFieldType.Assign(Source: TPersistent); +begin + if Source is TUCFieldType then + Begin + Self.Type_VarChar := TUCFieldType(Source).Type_VarChar; + Self.Type_Char := TUCFieldType(Source).Type_Char; + Self.Type_Int := TUCFieldType(Source).Type_Int; + end + else + inherited; +end; + +constructor TUCFieldType.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCFieldType.Destroy; +begin + + inherited; +end; } + +{ TUCCadUserLoggedMSG } + +procedure TUCCadUserLoggedMSG.Assign(Source: TPersistent); +begin + if Source is TUCCadUserLoggedMSG then + Begin + BtnMessage := TUCCadUserLoggedMSG(Source).BtnMessage; + BtnRefresh := TUCCadUserLoggedMSG(Source).BtnRefresh; + BtnClose := TUCCadUserLoggedMSG(Source).BtnClose; + LabelDescricao := TUCCadUserLoggedMSG(Source).LabelDescricao; + LabelCaption := TUCCadUserLoggedMSG(Source).LabelCaption; + ColName := TUCCadUserLoggedMSG(Source).ColName; + ColLogin := TUCCadUserLoggedMSG(Source).ColLogin; + ColComputer := TUCCadUserLoggedMSG(Source).ColComputer; + ColData := TUCCadUserLoggedMSG(Source).ColData; + InputCaption := TUCCadUserLoggedMSG(Source).InputCaption; + InputText := TUCCadUserLoggedMSG(Source).InputText; + MsgSystem := TUCCadUserLoggedMSG(Source).MsgSystem + End + else + inherited; +end; + +constructor TUCCadUserLoggedMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCCadUserLoggedMSG.Destroy; +begin + inherited; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/UCObjSel_U.dfm b/internal/2.31RC1/1/Source/UCObjSel_U.dfm new file mode 100644 index 0000000000000000000000000000000000000000..4da08b21a05ec045e1f6f85bc09395d8f47355a5 GIT binary patch literal 17579 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 V?kW~SRgBT@pnt9*hoTg${SWW*hDZPa literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/Source/UCObjSel_U.pas b/internal/2.31RC1/1/Source/UCObjSel_U.pas new file mode 100644 index 0000000..eff55e1 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCObjSel_U.pas @@ -0,0 +1,334 @@ +unit UCObjSel_U; + +interface + +uses + {$IFDEF VER130} + {$ELSE} + Variants, + {$ENDIF} + ActnList, + Buttons, + Classes, + ComCtrls, + Controls, + DB, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Menus, + Messages, + StdCtrls, + SysUtils, + UCBase, + UcConsts_Language, + Windows; + +type + TQControl = class(TControl) + published + property Caption; + end; + + TUCObjSel = class(TForm) + ListaCompsDisponiveis: TListView; + ListaCompsSelecionados: TListView; + Panel1: TPanel; + lbForm: TLabel; + Image1: TImage; + lbTitle: TLabel; + lbCompDisp: TLabel; + lbCompSel: TLabel; + btsellall: TSpeedButton; + btsel: TSpeedButton; + btunsel: TSpeedButton; + btunselall: TSpeedButton; + BtOK: TBitBtn; + btCancel: TBitBtn; + lbGrupo: TLabel; + lbGroup: TLabel; + cbFilter: TComboBox; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure btsellallClick(Sender: TObject); + procedure btunselallClick(Sender: TObject); + procedure btselClick(Sender: TObject); + procedure btunselClick(Sender: TObject); + procedure ListaCompsDisponiveisDblClick(Sender: TObject); + procedure ListaCompsSelecionadosDblClick(Sender: TObject); + procedure btCancelClick(Sender: TObject); + procedure BtOKClick(Sender: TObject); + procedure FormActivate(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure cbFilterClick(Sender: TObject); + procedure cbFilterKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); + private + FListaBotoes: TStringList; + FListaLabelsEdits: TStringList; + procedure MakeDispItems; + public + FForm: TCustomForm; + FUserControl: TUserControl; + FInitialObjs: TStringList; + end; + +implementation + +{$R *.dfm} + +procedure TUCObjSel.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TUCObjSel.FormShow(Sender: TObject); +begin + lbForm.Left := lbTitle.Left + lbTitle.Width + 10; //added by fduenas to adjust window name + lbgroup.Left := lbGrupo.Left + lbGrupo.Width + 10; //added by fduenas to adjust window name + lbForm.Caption := FForm.Name; + FInitialObjs.Text := UpperCase(FInitialObjs.Text); + ListaCompsSelecionados.Items.Clear; + MakeDispItems; +end; + +procedure TUCObjSel.MakeDispItems; +var + Componente: TComponent; + Classe: String; + Contador: Integer; +begin +{ +All 0 +Buttons 1 +Fields 2 +Edits 3 +Labels 4 +MenuItems 5 +Actions 6 +} + ListaCompsDisponiveis.Items.Clear; + for Contador := 0 to Pred(FForm.ComponentCount) do + begin + Componente := FForm.Components[Contador]; + Classe := UpperCase(Componente.ClassName); + if (Componente is TControl) or (Componente is TMenuItem) or (Componente is TField) or (Componente is TAction) then + if (cbFilter.ItemIndex <= 0) or + ((cbFilter.ItemIndex = 1) and (Componente is TButtonControl){(FListaBotoes.IndexOf(Classe) > -1)}) or + ((cbFilter.ItemIndex = 2) and (Componente is TField)) or + ((cbFilter.ItemIndex = 3) and (Componente is TCustomEdit){(FListaLabelsEdits.IndexOf(Classe) > -1)}) or + ((cbFilter.ItemIndex = 4) and (Componente is TCustomLabel)) or + ((cbFilter.ItemIndex = 5) and (Componente is TMenuItem)) or + ((cbFilter.ItemIndex = 6) and (Componente is TCustomAction)) then + if FInitialObjs.IndexOf(UpperCase(Componente.Name)) = -1 then + with ListaCompsDisponiveis.Items.Add do + begin + Caption := Componente.ClassName; + SubItems.Add(Componente.Name); + if Componente is TMenuItem then + SubItems.Add(StringReplace(TMenuItem(Componente).Caption, '&', '', [rfReplaceAll])) + else + if Componente is TAction then + SubItems.Add(StringReplace(TAction(Componente).Caption, '&', '', [rfReplaceAll])) + else + if Componente is TField then + SubItems.Add(TField(Componente).DisplayName) + else + SubItems.Add(StringReplace(TQControl(FForm.Components[Contador]).Caption, '&', '', [rfReplaceAll])); + end; + end; +end; + +procedure TUCObjSel.btsellallClick(Sender: TObject); +var + Contador: Integer; +begin + for Contador := 0 to Pred(ListaCompsDisponiveis.Items.Count) do + begin + FInitialObjs.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]); + with ListaCompsSelecionados.Items.Add do + begin + Caption := ListaCompsDisponiveis.Items[Contador].SubItems[1]; + SubItems.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]); + SubItems.Add(ListaCompsDisponiveis.Items[Contador].Caption); + end; + end; + ListaCompsDisponiveis.Items.Clear; +end; + +procedure TUCObjSel.btunselallClick(Sender: TObject); +begin + ListaCompsSelecionados.Items.Clear; + FInitialObjs.Clear; + MakeDispItems; +end; + +procedure TUCObjSel.btselClick(Sender: TObject); +var + Contador: Integer; +begin + for Contador := 0 to ListaCompsDisponiveis.Items.Count - 1 do + if ListaCompsDisponiveis.Items.Item[Contador].Selected then + begin + FInitialObjs.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]); + with ListaCompsSelecionados.Items.Add do + begin + Caption := ListaCompsDisponiveis.Items[Contador].SubItems[1]; + SubItems.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]); + SubItems.Add(ListaCompsDisponiveis.Items[Contador].Caption); + end; + end; + + Contador := 0; + while Contador <= Pred(ListaCompsDisponiveis.Items.Count) do + if ListaCompsDisponiveis.Items[Contador].Selected then + ListaCompsDisponiveis.Items[Contador].Delete + else + Inc(Contador); +end; + +procedure TUCObjSel.btunselClick(Sender: TObject); +var + Contador: Integer; + Obj: TComponent; +begin + if ListaCompsSelecionados.SelCount = 0 then + Exit; + for Contador := 0 to Pred(ListaCompsSelecionados.Items.Count) do + if ListaCompsSelecionados.Items.Item[Contador].Selected then + begin + if FInitialObjs.IndexOf(ListaCompsSelecionados.Items[Contador].SubItems[0]) > -1 then + FInitialObjs.Delete(FInitialObjs.IndexOf(ListaCompsSelecionados.Items[Contador].SubItems[0])); + + if ListaCompsSelecionados.Items[Contador].SubItems.Count > 1 then + with ListaCompsDisponiveis.Items.Add do + begin + if ListaCompsSelecionados.Items[Contador].SubItems.Count > 1 then + Caption := ListaCompsSelecionados.Items[Contador].SubItems[1]; + SubItems.Add(ListaCompsSelecionados.Items[Contador].SubItems[0]); + + Obj := FForm.FindComponent(ListaCompsSelecionados.Items[Contador].SubItems[0]); + if Obj is TMenuItem then + SubItems.Add(TMenuItem(Obj).Caption) + else + if Obj is TAction then + SubItems.Add(TMenuItem(Obj).Caption) + else + if Obj is TField then + SubItems.Add(TField(Obj).DisplayName) + else + SubItems.Add(TQControl(Obj).Caption); + end; + end; + + Contador := 0; + while Contador <= Pred(ListaCompsSelecionados.Items.Count) do + if ListaCompsSelecionados.Items[Contador].Selected then + ListaCompsSelecionados.Items[Contador].Delete + else + Inc(Contador); +end; + +procedure TUCObjSel.ListaCompsDisponiveisDblClick(Sender: TObject); +begin + btsel.Click; +end; + +procedure TUCObjSel.ListaCompsSelecionadosDblClick(Sender: TObject); +begin + if ListaCompsSelecionados.Items.Count = 0 then + Exit; + if ListaCompsSelecionados.SelCount = 1 then + ListaCompsSelecionados.Selected.EditCaption; +end; + +procedure TUCObjSel.btCancelClick(Sender: TObject); +begin + Close; +end; + +procedure TUCObjSel.BtOKClick(Sender: TObject); +var + Contador: Integer; +begin + if FUserControl.ExtraRights.Count > 0 then + begin + Contador := 0; + while Contador <= Pred(FUserControl.ExtraRights.Count) do + if UpperCase(FUserControl.ExtraRights[Contador].FormName) = UpperCase(FForm.Name) then + FUserControl.ExtraRights.Delete(Contador) + else + Inc(Contador); + end; + + for Contador := 0 to Pred(ListaCompsSelecionados.Items.Count) do + with FUserControl.ExtraRights.Add do + begin + Caption := ListaCompsSelecionados.Items[Contador].Caption; + CompName := ListaCompsSelecionados.Items[Contador].SubItems[0]; + FormName := FForm.Name; + GroupName := lbGroup.Caption; + end; + Close; +end; + +procedure TUCObjSel.FormActivate(Sender: TObject); +var + Contador: Integer; +begin + for Contador := 0 to Pred(FUserControl.ExtraRights.Count) do + if UpperCase(FUserControl.ExtraRights[Contador].FormName) = UpperCase(FForm.Name) then + if FForm.FindComponent(FUserControl.ExtraRights[Contador].CompName) <> nil then + with ListaCompsSelecionados.Items.Add do + begin + Caption := FUserControl.ExtraRights[Contador].Caption; + SubItems.Add(FUserControl.ExtraRights[Contador].CompName); + if FForm.FindComponent(FUserControl.ExtraRights[Contador].CompName) <> nil then + SubItems.Add(FForm.FindComponent(FUserControl.ExtraRights[Contador].CompName).ClassName); + end; + + lbTitle.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_TitleLabel'); + lbGrupo.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_GroupLabel'); + lbCompDisp.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_CompDispLabel'); + lbCompSel.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_CompSelLabel'); + ListaCompsSelecionados.Columns[0].Caption := RetornaLingua( FUserControl.Language,'Const_Contr_DescCol'); + btCancel.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_BTCancel'); + BtOK.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_BtOK'); + + //Lines Bellow added by fduenas + btSellAll.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtSellAllHint'); + btSel.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtSelHint'); + btUnSel.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtUnSelHint'); + btUnSelAll.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtUnSelAllHint'); + + lbForm.Left := lbTitle.Width + 66; +end; + +procedure TUCObjSel.FormCreate(Sender: TObject); +begin + cbFilter.ItemIndex := 0; + FListaBotoes := TStringList.Create; + FListaBotoes.CommaText := 'TButton,TSpeedButton,TBitBtn,TRxSpeedButton,' + + 'TRxSpinButton,TRxSwitch,TLMDButton,TLMDMMButton,TLMDShapeButton,' + + 'TLMD3DEffectButton,TLMDWndButtonShape,TJvHTButton,TJvBitBtn,TJvImgBtn,' + + 'TJvArrowButton,TJvTransparenftButton,TJvTransparentButton2,TJvSpeedButton'; + FListaBotoes.Text := UpperCase(FListaBotoes.Text); + FListaLabelsEdits := TStringList.Create; + FListaLabelsEdits.CommaText := 'TEdit,TLabel,TStaticText,TLabeledEdit,' + + 'TRxLabel,TComboEdit,TFileNamefEdit,TDirectoryEdit,TDateEdit,' + + 'TDateTimePicker,TRxCalcEdit,TCurrencyEdit,TRxSpinEdit'; + FListaLabelsEdits.Text := UpperCase(FListaLabelsEdits.Text); +end; + +procedure TUCObjSel.cbFilterClick(Sender: TObject); +begin + MakeDispItems; +end; + +procedure TUCObjSel.cbFilterKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); +begin + MakeDispItems; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/UCReg.dcr b/internal/2.31RC1/1/Source/UCReg.dcr new file mode 100644 index 0000000000000000000000000000000000000000..137f24a447191d32558c7d0910d02d54af55b8de GIT binary patch literal 38300 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 Oe_Z@_= 0 then + Controle_action := Formulario.cbActionList.Text; + + if Formulario.cbActionMainMenuBar.ItemIndex >= 0 then + Controle_ActionMainMenuBar := Formulario.cbActionMainMenuBar.Text; + + if Formulario.cbActionManager.ItemIndex >= 0 then + Controle_ActionManager := Formulario.cbActionManager.Text; + + if Formulario.cbMainMenu.ItemIndex >= 0 then + Controle_MainMenu := Formulario.cbMainMenu.Text; + + if Formulario.cbUserAction.ItemIndex >= 0 then + UserActionMenuItem := Formulario.cbUserAction.Text; + + if Formulario.cbUserMenuItem.ItemIndex >= 0 then + UserActionMenuItem := Formulario.cbUserMenuItem.Text; + + if Formulario.cbUserProfileAction.ItemIndex >= 0 then + UserProfileActionMenuItem := Formulario.cbUserProfileAction.Text; + if Formulario.cbUserProfileMenuItem.ItemIndex >= 0 then + UserProfileActionMenuItem := Formulario.cbUserProfileMenuItem.Text; + + if Formulario.cbLogControlAction.ItemIndex >= 0 then + LogControlActionMeuItem := Formulario.cbLogControlAction.Text; + if Formulario.cbLogControlMenuItem.ItemIndex >= 0 then + LogControlActionMeuItem := Formulario.cbLogControlMenuItem.Text; + + if Formulario.cbUserPasswordChangeAction.ItemIndex >= 0 then + UserPasswordChangeActionMenuItem := Formulario.cbUserPasswordChangeAction.Text; + if Formulario.cbUserPasswordChangeMenuItem.ItemIndex >= 0 then + UserPasswordChangeActionMenuItem := Formulario.cbUserPasswordChangeMenuItem.Text; + + + for I := 0 to FormularioDono.ComponentCount - 1 do + begin + if (FormularioDono.Components[I].Name = Controle_Action) and (Formulario.cbActionList.ItemIndex >= 0) then + ControlRight.ActionList := TActionList(FormularioDono.Components[I]); + + if (FormularioDono.Components[I].Name = Controle_ActionMainMenuBar ) and (Formulario.cbActionMainMenuBar.ItemIndex >= 0) then + ControlRight.ActionMainMenuBar := TActionMainMenuBar(UserControl.Owner.Components[I]); + + if (FormularioDono.Components[I].Name = Controle_ActionManager) and (Formulario.cbActionManager.ItemIndex >= 0) then + ControlRight.ActionManager := TActionManager(FormularioDono.Components[I]); + + if (FormularioDono.Components[I].Name = Controle_MainMenu) and (Formulario.cbMainMenu.ItemIndex >= 0) then + ControlRight.MainMenu := TMainMenu(FormularioDono.Components[I]); + + if (FormularioDono.Components[I].Name = UserActionMenuItem) and (Formulario.cbUserAction.ItemIndex >= 0) then + User.Action := TAction(FormularioDono.Components[I]); + if (FormularioDono.Components[I].Name = UserActionMenuItem) and (Formulario.cbUserMenuItem.ItemIndex >= 0) then + User.MenuItem := TMenuItem(FormularioDono.Components[I]); + if (FormularioDono.Components[I].Name = UserPasswordChangeActionMenuItem) and (Formulario.cbUserPasswordChangeAction.ItemIndex >= 0) then + UserPasswordChange.Action := TAction(FormularioDono.Components[I]); + if (FormularioDono.Components[I].Name = UserPasswordChangeActionMenuItem) and (Formulario.cbUserPasswordChangeMenuItem.ItemIndex >= 0) then + UserPasswordChange.MenuItem := TMenuItem(FormularioDono.Components[I]); + end; + + User.UsePrivilegedField := Formulario.ckUserUsePrivilegedField.Checked; + User.ProtectAdministrator := Formulario.ckUserProtectAdministrator.Checked; + UserProfile.Active := Formulario.ckUserProfileActive.Checked; + UserPasswordChange.ForcePassword := Formulario.ckUserPassowrdChangeForcePassword.Checked; + UserPasswordChange.MinPasswordLength := Formulario.spedtUserPasswordChangeMinPasswordLength.Value; + + LogControl.TableLog := Formulario.edtLogControlTableLog.Text; + LogControl.Active := Formulario.ckLogControlActive.Checked; + + Login.MaxLoginAttempts := Formulario.spedtMaxLoginAttempts.Value; + Login.GetLoginName := TUCGetLoginName(Formulario.cbGetLoginName.ItemIndex); + Login.InitialLogin.User := Formulario.edtInitialLoginUser.Text; + Login.InitialLogin.Password := Formulario.edtInitialLoginPassword.Text; + Login.InitialLogin.Email := Formulario.edtInitialLoginEmail.Text; + Login.InitialLogin.InitialRights := Formulario.mmInitialRights.Lines; + Login.AutoLogin.Active := Formulario.ckLoginAutologinActive.Checked; + Login.AutoLogin.User := Formulario.edtLoginAutoLoginUser.Text; + Login.AutoLogin.Password := Formulario.edtLoginAutoLoginPassword.Text; + Login.AutoLogin.MessageOnError := Formulario.ckLoginAutoLoginMessageOnError.Checked; + UserSettings.Login.TopImage := Formulario.imgTop.Picture; + UserSettings.Login.LeftImage := Formulario.imgLeft.Picture; + UserSettings.Login.BottomImage := Formulario.imgBottom.Picture; + end; + + Modulo := (BorlandIDEServices as IOTAModuleServices).CurrentModule; + for I := 0 to Modulo.GetModuleFileCount - 1 do + begin + Editor := Modulo.GetModuleFileEditor(I); + Editor.QueryInterface(IOTAFormEditor, FormEditor); + if FormEditor <> nil then + begin + FormEditor.MarkModified; + Break; + end; + end; + end; + finally + SysUtils.FreeAndNil(Formulario); + end; +end; + +procedure ShowControlsEditor(Componente: TUCControls); +var + FUCControl: TUCControls; + FEditor: IOTAEditor; + FModulo: IOTAModule; + FFormEditor: IOTAFormEditor; + I: Integer; +begin + FUCControl := Componente; + if not Assigned(FUCControl.UserControl) then + begin + MessageDlg('A propriedade UserControl tem que ser informada e o componente ' + #13 + #10 + 'tem que estar visível!', mtInformation, [mbOK], 0); + Exit; + end; + + with TUCObjSel.Create(nil) do + begin + FForm := TCustomForm(FUCControl.Owner); + FUserControl := FUCControl.UserControl; + FInitialObjs := TStringList.Create; + TUCControls(Componente).ListComponents(FForm.Name, FInitialObjs); + lbGroup.Caption := TUCControls(Componente).GroupName; + ShowModal; + Free; + end; + + FModulo := (BorlandIDEServices as IOTAModuleServices).FindFormModule(FUCControl.UserControl.Owner.Name); + if FModulo = nil then + begin + ShowMessage('Modulo ' + FUCControl.UserControl.Owner.Name + ' não encontrado!'); + Exit; + end + else + for I := 0 to FModulo.GetModuleFileCount - 1 do + begin + FEditor := FModulo.GetModuleFileEditor(I); + FEditor.QueryInterface(IOTAFormEditor, FFormEditor); + if FFormEditor <> nil then + begin + FFormEditor.MarkModified; + Break; + end; + end; +end; + +{TUCControlsEditor} + +procedure TUCControlsEditor.Edit; +begin + ShowControlsEditor(TUCControls(Component)); +end; + +procedure TUCControlsEditor.ExecuteVerb(Index: Integer); +begin + Edit; +end; + +function TUCControlsEditor.GetVerb(Index: Integer): String; +begin + Result := '&Selecionar Componentes...'; +end; + +function TUCControlsEditor.GetVerbCount: Integer; +begin + Result := 1; +end; + +{ TUserControlEditor } + +procedure TUserControlEditor.Edit; +begin + ShowUserControlsEditor(TUserControl(Component)); +end; + +procedure TUserControlEditor.ExecuteVerb(Index: Integer); +begin + Edit; +end; + +function TUserControlEditor.GetVerb(Index: Integer): String; +begin + Result := 'Configurar...'; +end; + +function TUserControlEditor.GetVerbCount: Integer; +begin + Result := 1; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/UCSettings.pas b/internal/2.31RC1/1/Source/UCSettings.pas new file mode 100644 index 0000000..bb9e447 --- /dev/null +++ b/internal/2.31RC1/1/Source/UCSettings.pas @@ -0,0 +1,1425 @@ +unit UCSettings; + +interface + +uses + Classes, + Forms, + UCMessages, + UcConsts_Language; + +type + TUCSettings = class(TComponent) + private + FAddProfileFormMSG: TUCAddProfileFormMSG; + FAddUserFormMSG: TUCAddUserFormMSG; + FCadUserFormMSG: TUCCadUserFormMSG; + FLogControlFormMSG: TUCLogControlFormMSG; + FLoginFormMSG: TUCLoginFormMSG; + FPermissFormMSG: TUCPermissFormMSG; + FProfileUserFormMSG: TUCProfileUserFormMSG; + FResetPassword: TUCResetPassword; + FTrocaSenhaFormMSG: TUCTrocaSenhaFormMSG; + FUserCommomMSG: TUCUserCommonMSG; + FAppMessagesMSG: TUCAppMessagesMSG; + FPosition: TPosition; + fLanguage: TUCLanguage; + fUsersLogged: TUCCadUserLoggedMSG; + fBancoDados: TUCTypeBancoDados; + procedure SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG); + procedure SetFAddUserFormMSG(const Value: TUCAddUserFormMSG); + procedure SetFCadUserFormMSG(const Value: TUCCadUserFormMSG); + procedure SetFFormLoginMsg(const Value: TUCLoginFormMSG); + procedure SetFLogControlFormMSG(const Value: TUCLogControlFormMSG); + procedure SetFPermissFormMSG(const Value: TUCPermissFormMSG); + procedure SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG); + procedure SetFResetPassword(const Value: TUCResetPassword); + procedure SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG); + procedure SetFUserCommonMSg(const Value: TUCUserCommonMSG); + procedure SetAppMessagesMSG(const Value: TUCAppMessagesMSG); + procedure SetfLanguage(const Value: TUCLanguage); + procedure SetfUsersLogged(const Value: TUCCadUserLoggedMSG); + procedure SetfBancoDados(const Value: TUCTypeBancoDados); + protected + public + Type_Int , + Type_Char , + Type_VarChar , + Type_Memo : String; + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property AppMessages: TUCAppMessagesMSG read FAppMessagesMSG write SetAppMessagesMSG; + property CommonMessages: TUCUserCommonMSG read FUserCommomMSG write SetFUserCommonMSg; + property Login: TUCLoginFormMSG read FLoginFormMSG write SetFFormLoginMsg; + property Log: TUCLogControlFormMSG read FLogControlFormMSG write SetFLogControlFormMSG; + property UsersForm: TUCCadUserFormMSG read FCadUserFormMSG write SetFCadUserFormMSG; + property AddChangeUser: TUCAddUserFormMSG read FAddUserFormMSG write SetFAddUserFormMSG; + property AddChangeProfile: TUCAddProfileFormMSG read FAddProfileFormMSG write SetFAddProfileFormMSG; + property UsersProfile: TUCProfileUserFormMSG read FProfileUserFormMSG write SetFProfileUserFormMSG; + property Rights: TUCPermissFormMSG read FPermissFormMSG write SetFPermissFormMSG; + property ChangePassword: TUCTrocaSenhaFormMSG read FTrocaSenhaFormMSG write SetFTrocaSenhaFormMSG; + property ResetPassword: TUCResetPassword read FResetPassword write SetFResetPassword; + Property BancoDados : TUCTypeBancoDados read fBancoDados write SetfBancoDados; + property WindowsPosition: TPosition read FPosition write FPosition default poMainFormCenter; + Property Language : TUCLanguage read fLanguage write SetfLanguage; + property UsersLogged : TUCCadUserLoggedMSG read fUsersLogged write SetfUsersLogged; + end; + +procedure IniSettings (DestSettings: TUCUserSettings); +procedure IniSettings2(DestSettings: TUCSettings); + +procedure AlterLanguage(DestSettings: TUCUserSettings); +procedure AlterLanguage2(DestSettings: TUCSettings); + +procedure RetornaSqlBancoDados( fBanco : TUCTypeBancoDados ; var Int, Char, VarChar, + Memo: String); + +implementation + +uses + Graphics, + SysUtils, + UCBase; +// UCConsts; + +{$IFDEF DELPHI9_UP} {$REGION 'Inicializacao'} {$ENDIF} + +procedure RetornaSqlBancoDados( fBanco : TUCTypeBancoDados ; var Int, Char, VarChar, + Memo: String); +begin + Int := 'INT'; + Char := 'CHAR'; + VarChar := 'VARCHAR'; + + Case fBanco of + Firebird : Memo := 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024'; + Interbase : Memo := 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024'; + MySql : Memo := 'MEDIUMBLOB'; + PARADOX : Memo := 'BLOB(1024,1)'; + Oracle : Memo := 'LONG RAW'; + SqlServer : Memo := 'NTEXT'; + PostgreSQL : Memo := 'TEXT'; + End; +end; + +procedure IniSettings(DestSettings: TUCUserSettings); +var + tmp: TBitmap; +begin + with DestSettings.CommonMessages do + begin + if BlankPassword = '' then + BlankPassword := RetornaLingua( ucPortuguesBr ,'Const_Men_SenhaDesabitada'); + if PasswordChanged = '' then + PasswordChanged := RetornaLingua( ucPortuguesBr ,'Const_Men_SenhaAlterada'); + if InitialMessage.Text = '' then + InitialMessage.Text := RetornaLingua( ucPortuguesBr ,'Const_Men_MsgInicial'); + if MaxLoginAttemptsError = '' then + MaxLoginAttemptsError := RetornaLingua( ucPortuguesBr ,'Const_Men_MaxTentativas'); + if InvalidLogin = '' then + InvalidLogin := RetornaLingua( ucPortuguesBr ,'Const_Men_LoginInvalido'); + if InactiveLogin = '' then + InactiveLogin := RetornaLingua( ucPortuguesBr ,'Const_Men_LoginInativo'); + + if AutoLogonError = '' then + AutoLogonError := RetornaLingua( ucPortuguesBr ,'Const_Men_AutoLogonError'); + if UsuarioExiste = '' then + UsuarioExiste := RetornaLingua( ucPortuguesBr ,'Const_Men_UsuarioExiste'); + if PasswordExpired = '' then + PasswordExpired := RetornaLingua( ucPortuguesBr ,'Const_Men_PasswordExpired'); + If ForcaTrocaSenha = '' then + ForcaTrocaSenha := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_ForcaTrocaSenha'); + end; + + with DestSettings.Login do + begin + if BtCancel = '' then + BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Log_BtCancelar'); + if BtOK = '' then + BtOK := RetornaLingua( ucPortuguesBr ,'Const_Log_BtOK'); + if LabelPassword = '' then + LabelPassword := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelSenha'); + if LabelUser = '' then + LabelUser := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelUsuario'); + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Log_WindowCaption'); + + if LabelTentativa = '' then + LabelTentativa := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelTentativa'); + if LabelTentativas = '' then + LabelTentativas := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelTentativas'); + + + try + Tmp := TBitmap.Create; + Tmp.LoadFromResourceName(HInstance, 'UCLOCKLOGIN'); + LeftImage.Assign(tmp); + finally + FreeAndNil(tmp); + end; + end; + + with DestSettings.UsersForm do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Cad_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_Cad_LabelDescricao'); + if ColName = '' then + ColName := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaNome'); + if ColLogin = '' then + ColLogin := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaLogin'); + if ColEmail = '' then + ColEmail := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaEmail'); + if BtAdd = '' then + BtAdd := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtAdicionar'); + if BtChange = '' then + BtChange := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtAlterar'); + if BtDelete = '' then + BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtExcluir'); + if BtRights = '' then + BtRights := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtPermissoes'); + if BtPassword = '' then + BtPassword := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtSenha'); + if BtClose = '' then + BtClose := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtFechar'); + if PromptDelete = '' then + PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_Cad_ConfirmaExcluir'); + if PromptDelete_WindowCaption = '' then + PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Cad_ConfirmaDelete_WindowCaption'); //added by fduenas + end; + + with DestSettings.UsersProfile do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Prof_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_Prof_LabelDescricao'); + if ColProfile = '' then + ColProfile := RetornaLingua( ucPortuguesBr ,'Const_Prof_ColunaNome'); + if BtAdd = '' then + BtAdd := RetornaLingua( ucPortuguesBr ,' Const_Prof_BtAdicionar'); + if BtChange = '' then + BtChange := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtAlterar'); + if BtDelete = '' then + BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtExcluir'); + if BtRights = '' then + BtRights := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtPermissoes'); + if BtClose = '' then + BtClose := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtFechar'); + if PromptDelete = '' then + PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_Prof_ConfirmaExcluir'); + if PromptDelete_WindowCaption = '' then + PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Prof_ConfirmaDelete_WindowCaption'); //added by fduenas + end; + + with DestSettings.AddChangeUser do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Inc_WindowCaption'); + if LabelAdd = '' then + LabelAdd := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelAdicionar'); + if LabelChange = '' then + LabelChange := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelAlterar'); + if LabelName = '' then + LabelName := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelNome'); + if LabelLogin = '' then + LabelLogin := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelLogin'); + if LabelEmail = '' then + LabelEmail := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelEmail'); + if LabelPerfil = '' then + LabelPerfil := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelPerfil'); + if CheckPrivileged = '' then + CheckPrivileged := RetornaLingua( ucPortuguesBr ,'Const_Inc_CheckPrivilegiado'); + + if BtSave = '' then + BtSave := RetornaLingua( ucPortuguesBr ,'Const_Inc_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Inc_BtCancelar'); + + if CheckExpira = '' then + CheckExpira := RetornaLingua( ucPortuguesBr ,'Const_Inc_CheckEspira'); + If Day = '' then + Day := RetornaLingua( ucPortuguesBr ,'Const_Inc_Dia'); + If ExpiredIn = '' then + ExpiredIn := RetornaLingua( ucPortuguesBr ,'Const_Inc_ExpiraEm'); + + If LabelStatus = '' then + LabelStatus := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelStatus'); + + If StatusActive = '' then + StatusActive := RetornaLingua( ucPortuguesBr ,'Const_Inc_StatusActive'); + + If StatusDisabled = '' then + StatusDisabled := RetornaLingua( ucPortuguesBr ,'Const_Inc_StatusDisabled'); + end; + + with DestSettings.AddChangeProfile do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_PInc_WindowCaption'); + if LabelAdd = '' then + LabelAdd := RetornaLingua( ucPortuguesBr ,'Const_PInc_LabelAdicionar'); + if LabelChange = '' then + LabelChange := RetornaLingua( ucPortuguesBr ,'Const_PInc_LabelAlterar'); + if LabelName = '' then + LabelName := RetornaLingua( ucPortuguesBr ,'Const_PInc_LabelNome'); + if BtSave = '' then + BtSave := RetornaLingua( ucPortuguesBr ,'Const_PInc_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( ucPortuguesBr ,'Const_PInc_BtCancelar'); + end; + + with DestSettings.Rights do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Perm_WindowCaption'); + if LabelUser = '' then + LabelUser := RetornaLingua( ucPortuguesBr ,'Const_Perm_LabelUsuario'); + if LabelProfile = '' then + LabelProfile := RetornaLingua( ucPortuguesBr ,'Const_Perm_LabelPerfil'); + if PageMenu = '' then + PageMenu := RetornaLingua( ucPortuguesBr ,'Const_Perm_PageMenu'); + if PageActions = '' then + PageActions := RetornaLingua( ucPortuguesBr ,'Const_Perm_PageActions'); + If PageControls = '' then + PageControls := RetornaLingua( ucPortuguesBr ,'Const_Perm_PageControls'); // by vicente barros leonel + if BtUnlock = '' then + BtUnlock := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtLibera'); + if BtLock = '' then + BtLock := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtBloqueia'); + if BtSave = '' then + BtSave := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtCancelar'); + end; + + with DestSettings.ChangePassword do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Troc_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelDescricao'); + if LabelCurrentPassword = '' then + LabelCurrentPassword := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelSenhaAtual'); + if LabelNewPassword = '' then + LabelNewPassword := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelNovaSenha'); + if LabelConfirm = '' then + LabelConfirm := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelConfirma'); + if BtSave = '' then + BtSave := RetornaLingua( ucPortuguesBr ,'Const_Troc_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Troc_BtCancelar'); + end; + + with DestSettings.CommonMessages.ChangePasswordError do + begin + if InvalidCurrentPassword = '' then + InvalidCurrentPassword := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaAtualInvalida'); + if NewPasswordError = '' then + NewPasswordError := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_ErroNovaSenha'); + if NewEqualCurrent = '' then + NewEqualCurrent := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_NovaIgualAtual'); + if PasswordRequired = '' then + PasswordRequired := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaObrigatoria'); + if MinPasswordLength = '' then + MinPasswordLength := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaMinima'); + if InvalidNewPassword = '' then + InvalidNewPassword := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaInvalida'); + end; + + with DestSettings.ResetPassword do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_DefPass_WindowCaption'); + if LabelPassword = '' then + LabelPassword := RetornaLingua( ucPortuguesBr ,'Const_DefPass_LabelSenha'); + end; + + with DestSettings.Log do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_LogC_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelDescricao'); + if LabelUser = '' then + LabelUser := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelUsuario'); + if LabelDate = '' then + LabelDate := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelData'); + if LabelLevel = '' then + LabelLevel := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelNivel'); + if ColLevel = '' then + ColLevel := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaNivel'); + if ColAppID = '' then + ColAppID := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaAppID'); + if ColMessage = '' then + ColMessage := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaMensagem'); + if ColUser = '' then + ColUser := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaUsuario'); + if ColDate = '' then + ColDate := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaData'); + if BtFilter = '' then + BtFilter := RetornaLingua( ucPortuguesBr ,'Const_LogC_BtFiltro'); + if BtDelete = '' then + BtDelete := RetornaLingua( ucPortuguesBr ,'Const_LogC_BtExcluir'); + if BtClose = '' then + BtClose := RetornaLingua( ucPortuguesBr ,'Const_LogC_BtFechar'); + if PromptDelete = '' then + PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_LogC_ConfirmaExcluir'); + if PromptDelete_WindowCaption = '' then + PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_LogC_ConfirmaDelete_WindowCaption'); //added by fduenas + if OptionUserAll = '' then + OptionUserAll := RetornaLingua( ucPortuguesBr ,'Const_LogC_Todos'); //added by fduenas + if OptionLevelLow = '' then + OptionLevelLow := RetornaLingua( ucPortuguesBr ,'Const_LogC_Low'); //added by fduenas + if OptionLevelNormal = '' then + OptionLevelNormal := RetornaLingua( ucPortuguesBr ,'Const_LogC_Normal'); //added by fduenas + if OptionLevelHigh = '' then + OptionLevelHigh := RetornaLingua( ucPortuguesBr ,'Const_LogC_High'); //added by fduenas + if OptionLevelCritic = '' then + OptionLevelCritic := RetornaLingua( ucPortuguesBr ,'Const_LogC_Critic'); //added by fduenas + if DeletePerformed = '' then + DeletePerformed := RetornaLingua( ucPortuguesBr ,'Const_LogC_ExcluirEfectuada'); //added by fduenas + end; + + with DestSettings.AppMessages do + begin + if MsgsForm_BtNew = '' then + MsgsForm_BtNew := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtNew'); + if MsgsForm_BtReplay = '' then + MsgsForm_BtReplay := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtReplay'); + if MsgsForm_BtForward = '' then + MsgsForm_BtForward := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtForward'); + if MsgsForm_BtDelete = '' then + MsgsForm_BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtDelete'); + if MsgsForm_BtClose = '' then + MsgsForm_BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtClose'); //added by fduenas + if MsgsForm_WindowCaption = '' then + MsgsForm_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Msgs_WindowCaption'); + if MsgsForm_ColFrom = '' then + MsgsForm_ColFrom := RetornaLingua( ucPortuguesBr ,'Const_Msgs_ColFrom'); + if MsgsForm_ColSubject = '' then + MsgsForm_ColSubject := RetornaLingua( ucPortuguesBr ,'Const_Msgs_ColSubject'); + if MsgsForm_ColDate = '' then + MsgsForm_ColDate := RetornaLingua( ucPortuguesBr ,'Const_Msgs_ColDate'); + if MsgsForm_PromptDelete = '' then + MsgsForm_PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_Msgs_PromptDelete'); + if MsgsForm_PromptDelete_WindowCaption = '' then + MsgsForm_PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Msgs_PromptDelete_WindowCaption'); + if MsgsForm_NoMessagesSelected = '' then + MsgsForm_NoMessagesSelected := RetornaLingua( ucPortuguesBr ,'Const_Msgs_NoMessagesSelected'); + if MsgsForm_NoMessagesSelected_WindowCaption = '' then + MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Msgs_NoMessagesSelected_WindowCaption'); + if MsgRec_BtClose = '' then + MsgRec_BtClose := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_BtClose'); + if MsgRec_WindowCaption = '' then + MsgRec_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_WindowCaption'); + if MsgRec_Title = '' then + MsgRec_Title := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_Title'); + if MsgRec_LabelFrom = '' then + MsgRec_LabelFrom := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelFrom'); + if MsgRec_LabelDate = '' then + MsgRec_LabelDate := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelDate'); + if MsgRec_LabelSubject = '' then + MsgRec_LabelSubject := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelSubject'); + if MsgRec_LabelMessage = '' then + MsgRec_LabelMessage := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelMessage'); + if MsgSend_BtSend = '' then + MsgSend_BtSend := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_BtSend'); + if MsgSend_BtCancel = '' then + MsgSend_BtCancel := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_BtCancel'); + if MsgSend_WindowCaption = '' then + MsgSend_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_WindowCaption'); + if MsgSend_Title = '' then + MsgSend_Title := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_Title'); + if MsgSend_GroupTo = '' then + MsgSend_GroupTo := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_GroupTo'); + if MsgSend_RadioUser = '' then + MsgSend_RadioUser := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_RadioUser'); + if MsgSend_RadioAll = '' then + MsgSend_RadioAll := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_RadioAll'); + if MsgSend_GroupMessage = '' then + MsgSend_GroupMessage := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_GroupMessage'); + if MsgSend_LabelSubject = '' then + MsgSend_LabelSubject := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_LabelSubject'); //added by fduenas + if MsgSend_LabelMessageText = '' then + MsgSend_LabelMessageText := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_LabelMessageText'); //added by fduenas + end; + + DestSettings.WindowsPosition := poMainFormCenter; + { mudar aqui + With DestSettings.TypeFieldsDB do + Begin + If Type_VarChar = '' then + Type_VarChar := 'VarChar'; + if Type_Char = '' then + Type_Char := 'Char'; + if Type_Int = '' then + Type_Int := 'Int'; + end; } + + + with DestSettings.UsersLogged do + Begin + If BtnMessage = '' then + BtnMessage := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_BtnMsg' ); + if BtnRefresh = '' then + BtnRefresh := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_Refresh'); + if Btnclose = '' then + BtnClose := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtClose'); + if LabelDescricao = '' then + LabelDescricao := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_LabelDescricao'); + if LabelCaption = '' then + LabelCaption := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_LabelCaption'); + if ColName = '' then + ColName := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaNome'); + if colLogin = '' then + ColLogin := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaLogin'); + if ColComputer = '' then + ColComputer := RetornaLingua( ucPortuguesBr ,'Const_CadColuna_Computer'); + if ColData = '' then + ColData := RetornaLingua( ucPortuguesBr ,'Const_CadColuna_Data'); + if InputCaption = '' then + InputCaption := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_InputCaption'); + If InputText = '' then + InputText := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_InputText'); + If MsgSystem = '' then + MsgSystem := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_MsgSystem'); + End; + +end; + +procedure IniSettings2(DestSettings: TUCSettings); +var + tmp: TBitmap; +begin + with DestSettings.CommonMessages do + begin + if BlankPassword = '' then + BlankPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Men_SenhaDesabitada'); + if PasswordChanged = '' then + PasswordChanged := RetornaLingua( DestSettings.fLanguage , 'Const_Men_SenhaAlterada'); + if InitialMessage.Text = '' then + InitialMessage.Text := RetornaLingua( DestSettings.fLanguage , 'Const_Men_MsgInicial'); + if MaxLoginAttemptsError = '' then + MaxLoginAttemptsError := RetornaLingua( DestSettings.fLanguage , 'Const_Men_MaxTentativas'); + if InvalidLogin = '' then + InvalidLogin := RetornaLingua( DestSettings.fLanguage , 'Const_Men_LoginInvalido'); + if InactiveLogin = '' then + InactiveLogin := RetornaLingua( DestSettings.fLanguage ,'Const_Men_LoginInativo'); + if AutoLogonError = '' then + AutoLogonError := RetornaLingua( DestSettings.fLanguage , 'Const_Men_AutoLogonError'); + if UsuarioExiste = '' then + UsuarioExiste := RetornaLingua( DestSettings.fLanguage , 'Const_Men_UsuarioExiste'); + if PasswordExpired = '' then + PasswordExpired := RetornaLingua( DestSettings.fLanguage , 'Const_Men_PasswordExpired'); + If ForcaTrocaSenha = '' then + ForcaTrocaSenha := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_ForcaTrocaSenha'); + end; + + with DestSettings.Login do + begin + if BtCancel = '' then + BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Log_BtCancelar'); + if BtOK = '' then + BtOK := RetornaLingua( DestSettings.fLanguage , 'Const_Log_BtOK'); + if LabelPassword = '' then + LabelPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelSenha'); + if LabelUser = '' then + LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelUsuario'); + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Log_WindowCaption'); + + if LabelTentativa = '' then + LabelTentativa := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelTentativa'); + if LabelTentativas = '' then + LabelTentativas := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelTentativas'); + + try + Tmp := TBitmap.Create; + Tmp.LoadFromResourceName(HInstance, 'UCLOCKLOGIN'); + LeftImage.Assign(tmp); + finally + FreeAndNil(tmp); + end; + end; + + with DestSettings.UsersForm do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_LabelDescricao'); + if ColName = '' then + ColName := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ColunaNome'); + if ColLogin = '' then + ColLogin := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ColunaLogin'); + if ColEmail = '' then + ColEmail := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ColunaEmail'); + if BtAdd = '' then + BtAdd := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtAdicionar'); + if BtChange = '' then + BtChange := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtAlterar'); + if BtDelete = '' then + BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtExcluir'); + if BtRights = '' then + BtRights := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtPermissoes'); + if BtPassword = '' then + BtPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtSenha'); + if BtClose = '' then + BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtFechar'); + if PromptDelete = '' then + PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ConfirmaExcluir'); + if PromptDelete_WindowCaption = '' then + PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ConfirmaDelete_WindowCaption'); + end; + + with DestSettings.UsersProfile do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_LabelDescricao'); + if ColProfile = '' then + ColProfile := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_ColunaNome'); + if BtAdd = '' then + BtAdd := RetornaLingua( DestSettings.Language,'Const_Prof_BtAdicionar'); + if BtChange = '' then + BtChange := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtAlterar'); + if BtDelete = '' then + BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtExcluir'); + if BtRights = '' then + BtRights := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtPermissoes'); + if BtClose = '' then + BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtFechar'); + if PromptDelete = '' then + PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_ConfirmaExcluir'); + if PromptDelete_WindowCaption = '' then + PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_ConfirmaDelete_WindowCaption'); //added by fduenas + end; + + with DestSettings.AddChangeUser do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_WindowCaption'); + if LabelAdd = '' then + LabelAdd := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelAdicionar'); + if LabelChange = '' then + LabelChange := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelAlterar'); + if LabelName = '' then + LabelName := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelNome'); + if LabelLogin = '' then + LabelLogin := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelLogin'); + if LabelEmail = '' then + LabelEmail := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelEmail'); + if CheckPrivileged = '' then + CheckPrivileged := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_CheckPrivilegiado'); + if BtSave = '' then + BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_BtCancelar'); + if LabelPerfil = '' then + LabelPerfil := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelPerfil'); + + if CheckExpira = '' then + CheckExpira := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_CheckEspira'); + If Day = '' then + Day := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_Dia'); + If ExpiredIn = '' then + ExpiredIn := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_ExpiraEm'); + If LabelStatus = '' then + LabelStatus := RetornaLingua( DestSettings.fLanguage ,'Const_Inc_LabelStatus'); + If StatusActive = '' then + StatusActive := RetornaLingua( DestSettings.fLanguage ,'Const_Inc_StatusActive'); + + If StatusDisabled = '' then + StatusDisabled := RetornaLingua( DestSettings.fLanguage ,'Const_Inc_StatusDisabled'); + + end; + + with DestSettings.AddChangeProfile do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_WindowCaption'); + if LabelAdd = '' then + LabelAdd := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_LabelAdicionar'); + if LabelChange = '' then + LabelChange := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_LabelAlterar'); + if LabelName = '' then + LabelName := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_LabelNome'); + if BtSave = '' then + BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_BtCancelar'); + end; + + with DestSettings.Rights do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_WindowCaption'); + if LabelUser = '' then + LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_LabelUsuario'); + if LabelProfile = '' then + LabelProfile := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_LabelPerfil'); + if PageMenu = '' then + PageMenu := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_PageMenu'); + if PageActions = '' then + PageActions := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_PageActions'); + If PageControls = '' then + PageControls := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_PageControls'); // by vicente barros leonel + if BtUnlock = '' then + BtUnlock := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtLibera'); + if BtLock = '' then + BtLock := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtBloqueia'); + if BtSave = '' then + BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtCancelar'); + end; + + with DestSettings.ChangePassword do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelDescricao'); + if LabelCurrentPassword = '' then + LabelCurrentPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelSenhaAtual'); + if LabelNewPassword = '' then + LabelNewPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelNovaSenha'); + if LabelConfirm = '' then + LabelConfirm := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelConfirma'); + if BtSave = '' then + BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_BtGravar'); + if BtCancel = '' then + BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_BtCancelar'); + end; + + with DestSettings.CommonMessages.ChangePasswordError do + begin + if InvalidCurrentPassword = '' then + InvalidCurrentPassword := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaAtualInvalida'); + if NewPasswordError = '' then + NewPasswordError := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_ErroNovaSenha'); + if NewEqualCurrent = '' then + NewEqualCurrent := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_NovaIgualAtual'); + if PasswordRequired = '' then + PasswordRequired := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaObrigatoria'); + if MinPasswordLength = '' then + MinPasswordLength := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaMinima'); + if InvalidNewPassword = '' then + InvalidNewPassword := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaInvalida'); + end; + + with DestSettings.ResetPassword do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_DefPass_WindowCaption'); + if LabelPassword = '' then + LabelPassword := RetornaLingua( DestSettings.fLanguage , 'Const_DefPass_LabelSenha'); + end; + + with DestSettings.Log do + begin + if WindowCaption = '' then + WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_WindowCaption'); + if LabelDescription = '' then + LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelDescricao'); + if LabelUser = '' then + LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelUsuario'); + if LabelDate = '' then + LabelDate := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelData'); + if LabelLevel = '' then + LabelLevel := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelNivel'); + if ColLevel = '' then + ColLevel := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaNivel'); + if ColAppID = '' then + ColAppID := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaAppID'); + if ColMessage = '' then + ColMessage := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaMensagem'); + if ColUser = '' then + ColUser := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaUsuario'); + if ColDate = '' then + ColDate := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaData'); + if BtFilter = '' then + BtFilter := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_BtFiltro'); + if BtDelete = '' then + BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_BtExcluir'); + if BtClose = '' then + BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_BtFechar'); + if PromptDelete = '' then + PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ConfirmaExcluir'); + if PromptDelete_WindowCaption = '' then + PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ConfirmaDelete_WindowCaption'); //added by fduenas + if OptionUserAll = '' then + OptionUserAll := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Todos'); //added by fduenas + if OptionLevelLow = '' then + OptionLevelLow := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Low'); //added by fduenas + if OptionLevelNormal = '' then + OptionLevelNormal := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Normal'); //added by fduenas + if OptionLevelHigh = '' then + OptionLevelHigh := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_High'); //added by fduenas + if OptionLevelCritic = '' then + OptionLevelCritic := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Critic'); //added by fduenas + if DeletePerformed = '' then + DeletePerformed := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ExcluirEfectuada'); //added by fduenas + end; + + with DestSettings.AppMessages do + begin + if MsgsForm_BtNew = '' then + MsgsForm_BtNew := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtNew'); + if MsgsForm_BtReplay = '' then + MsgsForm_BtReplay := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtReplay'); + if MsgsForm_BtForward = '' then + MsgsForm_BtForward := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtForward'); + if MsgsForm_BtDelete = '' then + MsgsForm_BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtDelete'); + if MsgsForm_BtClose = '' then + MsgsForm_BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtClose'); //added by fduenas + if MsgsForm_WindowCaption = '' then + MsgsForm_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_WindowCaption'); + if MsgsForm_ColFrom = '' then + MsgsForm_ColFrom := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_ColFrom'); + if MsgsForm_ColSubject = '' then + MsgsForm_ColSubject := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_ColSubject'); + if MsgsForm_ColDate = '' then + MsgsForm_ColDate := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_ColDate'); + if MsgsForm_PromptDelete = '' then + MsgsForm_PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_PromptDelete'); + if MsgsForm_PromptDelete_WindowCaption = '' then + MsgsForm_PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_PromptDelete_WindowCaption'); //added by fduenas + if MsgsForm_NoMessagesSelected = '' then + MsgsForm_NoMessagesSelected := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_NoMessagesSelected'); //added by fduenas + if MsgsForm_NoMessagesSelected_WindowCaption = '' then + MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_NoMessagesSelected_WindowCaption'); //added by fduenas + if MsgRec_BtClose = '' then + MsgRec_BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_BtClose'); + if MsgRec_WindowCaption = '' then + MsgRec_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_WindowCaption'); + if MsgRec_Title = '' then + MsgRec_Title := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_Title'); + if MsgRec_LabelFrom = '' then + MsgRec_LabelFrom := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelFrom'); + if MsgRec_LabelDate = '' then + MsgRec_LabelDate := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelDate'); + if MsgRec_LabelSubject = '' then + MsgRec_LabelSubject := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelSubject'); + if MsgRec_LabelMessage = '' then + MsgRec_LabelMessage := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelMessage'); + if MsgSend_BtSend = '' then + MsgSend_BtSend := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_BtSend'); + if MsgSend_BtCancel = '' then + MsgSend_BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_BtCancel'); + if MsgSend_WindowCaption = '' then + MsgSend_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_WindowCaption'); + if MsgSend_Title = '' then + MsgSend_Title := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_Title'); + if MsgSend_GroupTo = '' then + MsgSend_GroupTo := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_GroupTo'); + if MsgSend_RadioUser = '' then + MsgSend_RadioUser := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_RadioUser'); + if MsgSend_RadioAll = '' then + MsgSend_RadioAll := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_RadioAll'); + if MsgSend_GroupMessage = '' then + MsgSend_GroupMessage := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_GroupMessage'); + if MsgSend_LabelSubject = '' then + MsgSend_LabelSubject := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_LabelSubject'); //added by fduenas + if MsgSend_LabelMessageText = '' then + MsgSend_LabelMessageText := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_LabelMessageText'); //added by fduenas + end; + + DestSettings.WindowsPosition := poMainFormCenter; + + { With DestSettings.TypeFieldsDB do + Begin + If Type_VarChar = '' then + Type_VarChar := 'VarChar'; + if Type_Char = '' then + Type_Char := 'Char'; + if Type_Int = '' then + Type_Int := 'Int'; + end; mudar aqui } + + with DestSettings.UsersLogged do + Begin + If BtnMessage = '' then + BtnMessage := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_BtnMsg' ); + if BtnRefresh = '' then + BtnRefresh := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_Refresh'); + if Btnclose = '' then + BtnClose := RetornaLingua( DestSettings.fLanguage ,'Const_Msgs_BtClose'); + if LabelDescricao = '' then + LabelDescricao := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_LabelDescricao'); + if LabelCaption = '' then + LabelCaption := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_LabelCaption'); + if ColName = '' then + ColName := RetornaLingua( DestSettings.fLanguage ,'Const_Cad_ColunaNome'); + if colLogin = '' then + ColLogin := RetornaLingua( DestSettings.fLanguage ,'Const_Cad_ColunaLogin'); + if ColComputer = '' then + ColComputer := RetornaLingua( DestSettings.fLanguage ,'Const_CadColuna_Computer'); + if ColData = '' then + ColData := RetornaLingua( DestSettings.fLanguage ,'Const_CadColuna_Data'); + if InputCaption = '' then + InputCaption := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_InputCaption'); + If InputText = '' then + InputText := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_InputText'); + If MsgSystem = '' then + MsgSystem := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_MsgSystem'); + End; +end; + +{-------------------------------------------------------------------------------} + +procedure AlterLanguage(DestSettings: TUCUserSettings); +begin + with DestSettings.CommonMessages do + begin + BlankPassword := RetornaLingua( DestSettings.Language,'Const_Men_SenhaDesabitada'); + PasswordChanged := RetornaLingua( DestSettings.Language,'Const_Men_SenhaAlterada'); + InitialMessage.Text := RetornaLingua( DestSettings.Language,'Const_Men_MsgInicial'); + MaxLoginAttemptsError := RetornaLingua( DestSettings.Language,'Const_Men_MaxTentativas'); + InvalidLogin := RetornaLingua( DestSettings.Language,'Const_Men_LoginInvalido'); + InactiveLogin := RetornaLingua( DestSettings.Language ,'Const_Men_LoginInativo'); + AutoLogonError := RetornaLingua( DestSettings.Language,'Const_Men_AutoLogonError'); + UsuarioExiste := RetornaLingua( DestSettings.Language,'Const_Men_UsuarioExiste'); + PasswordExpired := RetornaLingua( DestSettings.Language,'Const_Men_PasswordExpired'); + end; + + with DestSettings.Login do + begin + BtCancel := RetornaLingua( DestSettings.Language,'Const_Log_BtCancelar'); + BtOK := RetornaLingua( DestSettings.Language,'Const_Log_BtOK'); + LabelPassword := RetornaLingua( DestSettings.Language,'Const_Log_LabelSenha'); + LabelUser := RetornaLingua( DestSettings.Language,'Const_Log_LabelUsuario'); + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Log_WindowCaption'); + LabelTentativa := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativa'); + LabelTentativas := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativas'); + end; + + with DestSettings.UsersForm do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_Cad_LabelDescricao'); + ColName := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaNome'); + ColLogin := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaLogin'); + ColEmail := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaEmail'); + BtAdd := RetornaLingua( DestSettings.Language,'Const_Cad_BtAdicionar'); + BtChange := RetornaLingua( DestSettings.Language,'Const_Cad_BtAlterar'); + BtDelete := RetornaLingua( DestSettings.Language,'Const_Cad_BtExcluir'); + BtRights := RetornaLingua( DestSettings.Language,'Const_Cad_BtPermissoes'); + BtPassword := RetornaLingua( DestSettings.Language,'Const_Cad_BtSenha'); + BtClose := RetornaLingua( DestSettings.Language,'Const_Cad_BtFechar'); + PromptDelete := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaExcluir'); + PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaDelete_WindowCaption'); + end; + + with DestSettings.UsersProfile do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_Prof_LabelDescricao'); + ColProfile := RetornaLingua( DestSettings.Language,'Const_Prof_ColunaNome'); + BtAdd := RetornaLingua( DestSettings.Language,'Const_Prof_BtAdicionar'); + BtChange := RetornaLingua( DestSettings.Language,'Const_Prof_BtAlterar'); + BtDelete := RetornaLingua( DestSettings.Language,'Const_Prof_BtExcluir'); + BtRights := RetornaLingua( DestSettings.Language,'Const_Prof_BtPermissoes'); + BtClose := RetornaLingua( DestSettings.Language,'Const_Prof_BtFechar'); + PromptDelete := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaExcluir'); + PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaDelete_WindowCaption'); + end; + + with DestSettings.AddChangeUser do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Inc_WindowCaption'); + LabelAdd := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAdicionar'); + LabelChange := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAlterar'); + LabelName := RetornaLingua( DestSettings.Language,'Const_Inc_LabelNome'); + LabelLogin := RetornaLingua( DestSettings.Language,'Const_Inc_LabelLogin'); + LabelEmail := RetornaLingua( DestSettings.Language,'Const_Inc_LabelEmail'); + CheckPrivileged := RetornaLingua( DestSettings.Language,'Const_Inc_CheckPrivilegiado'); + BtSave := RetornaLingua( DestSettings.Language,'Const_Inc_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_Inc_BtCancelar'); + LabelPerfil := RetornaLingua( DestSettings.Language,'Const_Inc_LabelPerfil'); + CheckExpira := RetornaLingua( DestSettings.Language,'Const_Inc_CheckEspira'); + Day := RetornaLingua( DestSettings.Language,'Const_Inc_Dia'); + ExpiredIn := RetornaLingua( DestSettings.Language,'Const_Inc_ExpiraEm'); + LabelStatus := RetornaLingua( DestSettings.Language ,'Const_Inc_LabelStatus'); + StatusActive := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusActive'); + StatusDisabled := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusDisabled'); + end; + + with DestSettings.AddChangeProfile do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_PInc_WindowCaption'); + LabelAdd := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAdicionar'); + LabelChange := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAlterar'); + LabelName := RetornaLingua( DestSettings.Language,'Const_PInc_LabelNome'); + BtSave := RetornaLingua( DestSettings.Language,'Const_PInc_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_PInc_BtCancelar'); + end; + + with DestSettings.Rights do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Perm_WindowCaption'); + LabelUser := RetornaLingua( DestSettings.Language,'Const_Perm_LabelUsuario'); + LabelProfile := RetornaLingua( DestSettings.Language,'Const_Perm_LabelPerfil'); + PageMenu := RetornaLingua( DestSettings.Language,'Const_Perm_PageMenu'); + PageActions := RetornaLingua( DestSettings.Language,'Const_Perm_PageActions'); + PageControls := RetornaLingua( DestSettings.Language,'Const_Perm_PageControls'); + BtUnlock := RetornaLingua( DestSettings.Language,'Const_Perm_BtLibera'); + BtLock := RetornaLingua( DestSettings.Language,'Const_Perm_BtBloqueia'); + BtSave := RetornaLingua( DestSettings.Language,'Const_Perm_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_Perm_BtCancelar'); + end; + + with DestSettings.ChangePassword do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Troc_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_Troc_LabelDescricao'); + LabelCurrentPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelSenhaAtual'); + LabelNewPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelNovaSenha'); + LabelConfirm := RetornaLingua( DestSettings.Language,'Const_Troc_LabelConfirma'); + BtSave := RetornaLingua( DestSettings.Language,'Const_Troc_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_Troc_BtCancelar'); + end; + + with DestSettings.CommonMessages.ChangePasswordError do + begin + InvalidCurrentPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaAtualInvalida'); + NewPasswordError := RetornaLingua( DestSettings.Language,'Const_ErrPass_ErroNovaSenha'); + NewEqualCurrent := RetornaLingua( DestSettings.Language,'Const_ErrPass_NovaIgualAtual'); + PasswordRequired := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaObrigatoria'); + MinPasswordLength := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaMinima'); + InvalidNewPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaInvalida'); + end; + + with DestSettings.ResetPassword do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_DefPass_WindowCaption'); + LabelPassword := RetornaLingua( DestSettings.Language,'Const_DefPass_LabelSenha'); + end; + + with DestSettings.Log do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_LogC_LabelDescricao'); + LabelUser := RetornaLingua( DestSettings.Language,'Const_LogC_LabelUsuario'); + LabelDate := RetornaLingua( DestSettings.Language,'Const_LogC_LabelData'); + LabelLevel := RetornaLingua( DestSettings.Language,'Const_LogC_LabelNivel'); + ColLevel := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaNivel'); + ColAppID := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaAppID'); + ColMessage := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaMensagem'); + ColUser := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaUsuario'); + ColDate := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaData'); + BtFilter := RetornaLingua( DestSettings.Language,'Const_LogC_BtFiltro'); + BtDelete := RetornaLingua( DestSettings.Language,'Const_LogC_BtExcluir'); + BtClose := RetornaLingua( DestSettings.Language,'Const_LogC_BtFechar'); + PromptDelete := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaExcluir'); + PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaDelete_WindowCaption'); + OptionUserAll := RetornaLingua( DestSettings.Language,'Const_LogC_Todos'); + OptionLevelLow := RetornaLingua( DestSettings.Language,'Const_LogC_Low'); + OptionLevelNormal := RetornaLingua( DestSettings.Language,'Const_LogC_Normal'); + OptionLevelHigh := RetornaLingua( DestSettings.Language,'Const_LogC_High'); + OptionLevelCritic := RetornaLingua( DestSettings.Language,'Const_LogC_Critic'); + DeletePerformed := RetornaLingua( DestSettings.Language,'Const_LogC_ExcluirEfectuada'); + end; + + with DestSettings.AppMessages do + begin + MsgsForm_BtNew := RetornaLingua( DestSettings.Language,'Const_Msgs_BtNew'); + MsgsForm_BtReplay := RetornaLingua( DestSettings.Language,'Const_Msgs_BtReplay'); + MsgsForm_BtForward := RetornaLingua( DestSettings.Language,'Const_Msgs_BtForward'); + MsgsForm_BtDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_BtDelete'); + MsgsForm_BtClose := RetornaLingua( DestSettings.Language,'Const_Msgs_BtClose'); //added by fduenas + MsgsForm_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_WindowCaption'); + MsgsForm_ColFrom := RetornaLingua( DestSettings.Language,'Const_Msgs_ColFrom'); + MsgsForm_ColSubject := RetornaLingua( DestSettings.Language,'Const_Msgs_ColSubject'); + MsgsForm_ColDate := RetornaLingua( DestSettings.Language,'Const_Msgs_ColDate'); + MsgsForm_PromptDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete'); + MsgsForm_PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete_WindowCaption'); //added by fduenas + MsgsForm_NoMessagesSelected := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected'); //added by fduenas + MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected_WindowCaption'); //added by fduenas + MsgRec_BtClose := RetornaLingua( DestSettings.Language,'Const_MsgRec_BtClose'); + MsgRec_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgRec_WindowCaption'); + MsgRec_Title := RetornaLingua( DestSettings.Language,'Const_MsgRec_Title'); + MsgRec_LabelFrom := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelFrom'); + MsgRec_LabelDate := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelDate'); + MsgRec_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelSubject'); + MsgRec_LabelMessage := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelMessage'); + MsgSend_BtSend := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtSend'); + MsgSend_BtCancel := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtCancel'); + MsgSend_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgSend_WindowCaption'); + MsgSend_Title := RetornaLingua( DestSettings.Language,'Const_MsgSend_Title'); + MsgSend_GroupTo := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupTo'); + MsgSend_RadioUser := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioUser'); + MsgSend_RadioAll := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioAll'); + MsgSend_GroupMessage := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupMessage'); + MsgSend_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelSubject'); //added by fduenas + MsgSend_LabelMessageText := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelMessageText'); //added by fduenas + end; + + DestSettings.WindowsPosition := poMainFormCenter; + + with DestSettings.UsersLogged do + Begin + BtnMessage := RetornaLingua( DestSettings.Language ,'Const_UserLogged_BtnMsg' ); + BtnRefresh := RetornaLingua( DestSettings.Language ,'Const_UserLogged_Refresh'); + BtnClose := RetornaLingua( DestSettings.Language ,'Const_Msgs_BtClose'); + LabelDescricao := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelDescricao'); + LabelCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelCaption'); + ColName := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaNome'); + ColLogin := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaLogin'); + ColComputer := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Computer'); + ColData := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Data'); + InputCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputCaption'); + InputText := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputText'); + MsgSystem := RetornaLingua( DestSettings.Language ,'Const_UserLogged_MsgSystem'); + End; +end; + +procedure AlterLanguage2(DestSettings: TUCSettings); +begin + with DestSettings.CommonMessages do + begin + BlankPassword := RetornaLingua( DestSettings.Language,'Const_Men_SenhaDesabitada'); + PasswordChanged := RetornaLingua( DestSettings.Language,'Const_Men_SenhaAlterada'); + InitialMessage.Text := RetornaLingua( DestSettings.Language,'Const_Men_MsgInicial'); + MaxLoginAttemptsError := RetornaLingua( DestSettings.Language,'Const_Men_MaxTentativas'); + InvalidLogin := RetornaLingua( DestSettings.Language,'Const_Men_LoginInvalido'); + InactiveLogin := RetornaLingua( DestSettings.fLanguage ,'Const_Men_LoginInativo'); + AutoLogonError := RetornaLingua( DestSettings.Language,'Const_Men_AutoLogonError'); + UsuarioExiste := RetornaLingua( DestSettings.Language,'Const_Men_UsuarioExiste'); + PasswordExpired := RetornaLingua( DestSettings.Language,'Const_Men_PasswordExpired'); + end; + + with DestSettings.Login do + begin + BtCancel := RetornaLingua( DestSettings.Language,'Const_Log_BtCancelar'); + BtOK := RetornaLingua( DestSettings.Language,'Const_Log_BtOK'); + LabelPassword := RetornaLingua( DestSettings.Language,'Const_Log_LabelSenha'); + LabelUser := RetornaLingua( DestSettings.Language,'Const_Log_LabelUsuario'); + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Log_WindowCaption'); + LabelTentativa := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativa'); + LabelTentativas := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativas'); + end; + + with DestSettings.UsersForm do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_Cad_LabelDescricao'); + ColName := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaNome'); + ColLogin := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaLogin'); + ColEmail := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaEmail'); + BtAdd := RetornaLingua( DestSettings.Language,'Const_Cad_BtAdicionar'); + BtChange := RetornaLingua( DestSettings.Language,'Const_Cad_BtAlterar'); + BtDelete := RetornaLingua( DestSettings.Language,'Const_Cad_BtExcluir'); + BtRights := RetornaLingua( DestSettings.Language,'Const_Cad_BtPermissoes'); + BtPassword := RetornaLingua( DestSettings.Language,'Const_Cad_BtSenha'); + BtClose := RetornaLingua( DestSettings.Language,'Const_Cad_BtFechar'); + PromptDelete := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaExcluir'); + PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaDelete_WindowCaption'); + end; + + with DestSettings.UsersProfile do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_Prof_LabelDescricao'); + ColProfile := RetornaLingua( DestSettings.Language,'Const_Prof_ColunaNome'); + BtAdd := RetornaLingua( DestSettings.Language,'Const_Prof_BtAdicionar'); + BtChange := RetornaLingua( DestSettings.Language,'Const_Prof_BtAlterar'); + BtDelete := RetornaLingua( DestSettings.Language,'Const_Prof_BtExcluir'); + BtRights := RetornaLingua( DestSettings.Language,'Const_Prof_BtPermissoes'); + BtClose := RetornaLingua( DestSettings.Language,'Const_Prof_BtFechar'); + PromptDelete := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaExcluir'); + PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaDelete_WindowCaption'); + end; + + with DestSettings.AddChangeUser do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Inc_WindowCaption'); + LabelAdd := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAdicionar'); + LabelChange := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAlterar'); + LabelName := RetornaLingua( DestSettings.Language,'Const_Inc_LabelNome'); + LabelLogin := RetornaLingua( DestSettings.Language,'Const_Inc_LabelLogin'); + LabelEmail := RetornaLingua( DestSettings.Language,'Const_Inc_LabelEmail'); + CheckPrivileged := RetornaLingua( DestSettings.Language,'Const_Inc_CheckPrivilegiado'); + BtSave := RetornaLingua( DestSettings.Language,'Const_Inc_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_Inc_BtCancelar'); + LabelPerfil := RetornaLingua( DestSettings.Language,'Const_Inc_LabelPerfil'); + CheckExpira := RetornaLingua( DestSettings.Language,'Const_Inc_CheckEspira'); + Day := RetornaLingua( DestSettings.Language,'Const_Inc_Dia'); + ExpiredIn := RetornaLingua( DestSettings.Language,'Const_Inc_ExpiraEm'); + LabelStatus := RetornaLingua( DestSettings.Language ,'Const_Inc_LabelStatus'); + StatusActive := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusActive'); + StatusDisabled := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusDisabled'); + end; + + with DestSettings.AddChangeProfile do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_PInc_WindowCaption'); + LabelAdd := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAdicionar'); + LabelChange := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAlterar'); + LabelName := RetornaLingua( DestSettings.Language,'Const_PInc_LabelNome'); + BtSave := RetornaLingua( DestSettings.Language,'Const_PInc_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_PInc_BtCancelar'); + end; + + with DestSettings.Rights do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Perm_WindowCaption'); + LabelUser := RetornaLingua( DestSettings.Language,'Const_Perm_LabelUsuario'); + LabelProfile := RetornaLingua( DestSettings.Language,'Const_Perm_LabelPerfil'); + PageMenu := RetornaLingua( DestSettings.Language,'Const_Perm_PageMenu'); + PageActions := RetornaLingua( DestSettings.Language,'Const_Perm_PageActions'); + PageControls := RetornaLingua( DestSettings.Language,'Const_Perm_PageControls'); + BtUnlock := RetornaLingua( DestSettings.Language,'Const_Perm_BtLibera'); + BtLock := RetornaLingua( DestSettings.Language,'Const_Perm_BtBloqueia'); + BtSave := RetornaLingua( DestSettings.Language,'Const_Perm_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_Perm_BtCancelar'); + end; + + with DestSettings.ChangePassword do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_Troc_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_Troc_LabelDescricao'); + LabelCurrentPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelSenhaAtual'); + LabelNewPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelNovaSenha'); + LabelConfirm := RetornaLingua( DestSettings.Language,'Const_Troc_LabelConfirma'); + BtSave := RetornaLingua( DestSettings.Language,'Const_Troc_BtGravar'); + BtCancel := RetornaLingua( DestSettings.Language,'Const_Troc_BtCancelar'); + end; + + with DestSettings.CommonMessages.ChangePasswordError do + begin + InvalidCurrentPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaAtualInvalida'); + NewPasswordError := RetornaLingua( DestSettings.Language,'Const_ErrPass_ErroNovaSenha'); + NewEqualCurrent := RetornaLingua( DestSettings.Language,'Const_ErrPass_NovaIgualAtual'); + PasswordRequired := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaObrigatoria'); + MinPasswordLength := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaMinima'); + InvalidNewPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaInvalida'); + end; + + with DestSettings.ResetPassword do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_DefPass_WindowCaption'); + LabelPassword := RetornaLingua( DestSettings.Language,'Const_DefPass_LabelSenha'); + end; + + with DestSettings.Log do + begin + WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_WindowCaption'); + LabelDescription := RetornaLingua( DestSettings.Language,'Const_LogC_LabelDescricao'); + LabelUser := RetornaLingua( DestSettings.Language,'Const_LogC_LabelUsuario'); + LabelDate := RetornaLingua( DestSettings.Language,'Const_LogC_LabelData'); + LabelLevel := RetornaLingua( DestSettings.Language,'Const_LogC_LabelNivel'); + ColLevel := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaNivel'); + ColAppID := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaAppID'); + ColMessage := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaMensagem'); + ColUser := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaUsuario'); + ColDate := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaData'); + BtFilter := RetornaLingua( DestSettings.Language,'Const_LogC_BtFiltro'); + BtDelete := RetornaLingua( DestSettings.Language,'Const_LogC_BtExcluir'); + BtClose := RetornaLingua( DestSettings.Language,'Const_LogC_BtFechar'); + PromptDelete := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaExcluir'); + PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaDelete_WindowCaption'); + OptionUserAll := RetornaLingua( DestSettings.Language,'Const_LogC_Todos'); + OptionLevelLow := RetornaLingua( DestSettings.Language,'Const_LogC_Low'); + OptionLevelNormal := RetornaLingua( DestSettings.Language,'Const_LogC_Normal'); + OptionLevelHigh := RetornaLingua( DestSettings.Language,'Const_LogC_High'); + OptionLevelCritic := RetornaLingua( DestSettings.Language,'Const_LogC_Critic'); + DeletePerformed := RetornaLingua( DestSettings.Language,'Const_LogC_ExcluirEfectuada'); + end; + + with DestSettings.AppMessages do + begin + MsgsForm_BtNew := RetornaLingua( DestSettings.Language,'Const_Msgs_BtNew'); + MsgsForm_BtReplay := RetornaLingua( DestSettings.Language,'Const_Msgs_BtReplay'); + MsgsForm_BtForward := RetornaLingua( DestSettings.Language,'Const_Msgs_BtForward'); + MsgsForm_BtDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_BtDelete'); + MsgsForm_BtClose := RetornaLingua( DestSettings.Language,'Const_Msgs_BtClose'); //added by fduenas + MsgsForm_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_WindowCaption'); + MsgsForm_ColFrom := RetornaLingua( DestSettings.Language,'Const_Msgs_ColFrom'); + MsgsForm_ColSubject := RetornaLingua( DestSettings.Language,'Const_Msgs_ColSubject'); + MsgsForm_ColDate := RetornaLingua( DestSettings.Language,'Const_Msgs_ColDate'); + MsgsForm_PromptDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete'); + MsgsForm_PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete_WindowCaption'); //added by fduenas + MsgsForm_NoMessagesSelected := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected'); //added by fduenas + MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected_WindowCaption'); //added by fduenas + MsgRec_BtClose := RetornaLingua( DestSettings.Language,'Const_MsgRec_BtClose'); + MsgRec_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgRec_WindowCaption'); + MsgRec_Title := RetornaLingua( DestSettings.Language,'Const_MsgRec_Title'); + MsgRec_LabelFrom := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelFrom'); + MsgRec_LabelDate := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelDate'); + MsgRec_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelSubject'); + MsgRec_LabelMessage := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelMessage'); + MsgSend_BtSend := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtSend'); + MsgSend_BtCancel := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtCancel'); + MsgSend_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgSend_WindowCaption'); + MsgSend_Title := RetornaLingua( DestSettings.Language,'Const_MsgSend_Title'); + MsgSend_GroupTo := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupTo'); + MsgSend_RadioUser := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioUser'); + MsgSend_RadioAll := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioAll'); + MsgSend_GroupMessage := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupMessage'); + MsgSend_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelSubject'); //added by fduenas + MsgSend_LabelMessageText := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelMessageText'); //added by fduenas + end; + + DestSettings.WindowsPosition := poMainFormCenter; + + + with DestSettings.UsersLogged do + Begin + BtnMessage := RetornaLingua( DestSettings.Language ,'Const_UserLogged_BtnMsg' ); + BtnRefresh := RetornaLingua( DestSettings.Language ,'Const_UserLogged_Refresh'); + BtnClose := RetornaLingua( DestSettings.Language ,'Const_Msgs_BtClose'); + LabelDescricao := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelDescricao'); + LabelCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelCaption'); + ColName := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaNome'); + ColLogin := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaLogin'); + ColComputer := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Computer'); + ColData := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Data'); + InputCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputCaption'); + InputText := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputText'); + MsgSystem := RetornaLingua( DestSettings.Language ,'Const_UserLogged_MsgSystem'); + End; + +end; + +{-------------------------------------------------------------------------------} + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +{$IFDEF DELPHI9_UP} {$REGION 'TUCSettings'} {$ENDIF} + +{ TUCSettings } + +procedure TUCSettings.Assign(Source: TPersistent); +begin + if Source is TUCUserSettings then + begin + Self.CommonMessages.Assign(TUCUserSettings(Source).CommonMessages); //modified by fduenas + Self.AppMessages.Assign(TUCUserSettings(Source).AppMessages); //modified by fduenas + Self.WindowsPosition := WindowsPosition; + end + else + inherited; +end; + +constructor TUCSettings.Create(AOwner: TComponent); +begin + inherited; + fLanguage := ucPortuguesBr; + FAppMessagesMSG := TUCAppMessagesMSG.Create(nil); + FLoginFormMSG := TUCLoginFormMSG.Create(nil); + FUserCommomMSG := TUCUserCommonMSG.Create(nil); + FCadUserFormMSG := TUCCadUserFormMSG.Create(nil); + FAddUserFormMSG := TUCAddUserFormMSG.Create(nil); + FAddProfileFormMSG := TUCAddProfileFormMSG.Create(nil); + FPermissFormMSG := TUCPermissFormMSG.Create(nil); + FProfileUserFormMSG := TUCProfileUserFormMSG.Create(nil); + FTrocaSenhaFormMSG := TUCTrocaSenhaFormMSG.Create(nil); + FResetPassword := TUCResetPassword.Create(nil); + FLogControlFormMSG := TUCLogControlFormMSG.Create(nil); + fBancoDados := FireBird; + RetornaSqlBancoDados( fBancoDados, Type_Int,Type_Char,Type_VarChar,Type_Memo ); + fUsersLogged := TUCCadUserLoggedMSG.Create(Nil); + if csDesigning in ComponentState then + IniSettings2(Self); +end; + +destructor TUCSettings.Destroy; +begin + //added by fduenas + FAppMessagesMSG.Free; + FLoginFormMSG.Free; + FUserCommomMSG.Free; + FCadUserFormMSG.Free; + FAddUserFormMSG.Free; + FAddProfileFormMSG.Free; + FPermissFormMSG.Free; + FProfileUserFormMSG.Free; + FTrocaSenhaFormMSG.Free; + FResetPassword.Free; + FLogControlFormMSG.Free; + fUsersLogged.Free; + inherited; +end; + +procedure TUCSettings.SetAppMessagesMSG(const Value: TUCAppMessagesMSG); +begin + FAppMessagesMSG := Value; +end; + +procedure TUCSettings.SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG); +begin + FAddProfileFormMSG := Value; +end; + +procedure TUCSettings.SetFAddUserFormMSG(const Value: TUCAddUserFormMSG); +begin + FAddUserFormMSG := Value; +end; + +procedure TUCSettings.SetfBancoDados(const Value: TUCTypeBancoDados); +begin + fBancoDados := Value; + RetornaSqlBancoDados( fBancoDados, Type_Int,Type_Char,Type_VarChar,Type_Memo ); +end; + +procedure TUCSettings.SetFCadUserFormMSG(const Value: TUCCadUserFormMSG); +begin + FCadUserFormMSG := Value; +end; + +procedure TUCSettings.SetFFormLoginMsg(const Value: TUCLoginFormMSG); +begin + FLoginFormMSG := Value; +end; + +procedure TUCSettings.SetfLanguage(const Value: TUCLanguage); +begin + fLanguage := Value; + AlterLanguage2(Self); +end; + +procedure TUCSettings.SetFLogControlFormMSG(const Value: TUCLogControlFormMSG); +begin + FLogControlFormMSG := Value; +end; + +procedure TUCSettings.SetFPermissFormMSG(const Value: TUCPermissFormMSG); +begin + FPermissFormMSG := Value; +end; + +procedure TUCSettings.SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG); +begin + FProfileUserFormMSG := Value; +end; + +procedure TUCSettings.SetFResetPassword(const Value: TUCResetPassword); +begin + FResetPassword := Value; +end; + +procedure TUCSettings.SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG); +begin + FTrocaSenhaFormMSG := Value; +end; + +procedure TUCSettings.SetFUserCommonMSg(const Value: TUCUserCommonMSG); +begin + FUserCommomMSG := Value; +end; + +procedure TUCSettings.SetfUsersLogged(const Value: TUCCadUserLoggedMSG); +begin + fUsersLogged := Value; +end; + +{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF} + +end. diff --git a/internal/2.31RC1/1/Source/UCXPSettings.pas b/internal/2.31RC1/1/Source/UCXPSettings.pas new file mode 100644 index 0000000..89ed10d --- /dev/null +++ b/internal/2.31RC1/1/Source/UCXPSettings.pas @@ -0,0 +1,446 @@ +{ +Class UCXPSettings: +Based on XPMenu 3.1 for Delphi + +XPMenu for Delphi +Author: Khaled Shagrouni +URL: http://www.shagrouni.com/english/software/xpmenu.html +e-mail: khaled@shagrouni.com + +Version 3.1 - 22.02.2004 + + + +XPMenu is a Delphi component to mimic Office XP menu and toolbar style. +Copyright (C) 2001, 2003 Khaled Shagrouni. + +This component is FREEWARE with source code. I still hold the copyright, but +you can use it for whatever you like: freeware, shareware or commercial software. +If you have any ideas for improvement or bug reports, don't hesitate to e-mail +me (Please state the XPMenu version and OS information). + +-------------------------------------------------------------------------------- +changes by QmD 30/11/2003 - qmd@usercontrol.com.br +* Add BitBtnColor / BitBtnSelectColor by QmD 30/11/2003 - qmd@usercontrol.com.br +* BitBtn Button multi-line corrected +* 29/03/2004 - XPmenu 2.21 incorporated in User Control Package. Class renamed to UCXPMenu to prevent conflicts (http://usercontrol.sourceforge.net) + +changes by fduenas 29/12/2004 - fduenas@outm.net, fduenas@flashmail.com +* XPMenu.pas 3.1 Ported to UCXPStyle.pas by Francisco Dueñas fduenas@outm.net. +* File UCXPMenu.pas renamed to UCXPStyle.pas +* Class UCXPSet renamed to UCXPSettings +* File UCXPSet.pas renamed to UCXPSettings.pas + +} +{$IFDEF VER130} +{$DEFINE VER5U} +{$ENDIF} + +{$IFDEF VER140} +{$DEFINE VER5U} +{$DEFINE VER6U} +{$ENDIF} + +{$IFDEF VER150} +{$DEFINE VER5U} +{$DEFINE VER6U} +{$DEFINE VER7U} +{$ENDIF} + +unit UCXPSettings; + +interface +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, ComCtrls, Forms, + Menus, Commctrl, ExtCtrls, StdCtrls, Buttons; + + type + TUCXPContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel, + xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller); + TUCXPContainers = set of TUCXPContainer; + + TUCXPControl = (xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox, + xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox, + xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel, + xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey); + {xcStringGrid, xcDrawGrid, xcDBGrid)} + + TUCXPControls = set of TUCXPControl; + + TUCXPSettings = class(TPersistent) + private + {from UCXPStyle class} + FFont: TFont; + FColor: TColor; + FIconBackColor: TColor; + FMenuBarColor: TColor; + FCheckedColor: TColor; + FSeparatorColor: TColor; + FSelectBorderColor: TColor; + FSelectColor: TColor; + FDisabledColor: TColor; + FSelectFontColor: TColor; + FIconWidth: integer; + FDrawSelect: boolean; + FUseSystemColors: boolean; + FColorsChanged: boolean; // +jt + {END from UCXPStyle class} + + {from UCXPStyle class} + FOverrideOwnerDraw: boolean; + FGradient: boolean; + FFlatMenu: boolean; + FAutoDetect: boolean; + FUCXPContainers: TUCXPContainers; + FUCXPControls: TUCXPControls; + FGrayLevel: byte; + FDimLevel: byte; + FDrawMenuBar: boolean; + FUseDimColor: boolean; + {END from UCXPStyle class} + + FBitBtnColor: TColor; //qmd + + {from UCXPStyle class} + procedure SetFont(const Value: TFont); + procedure SetColor(const Value: TColor); + procedure SetIconBackColor(const Value: TColor); + procedure SetMenuBarColor(const Value: TColor); + procedure SetCheckedColor(const Value: TColor); + procedure SetDisabledColor(const Value: TColor); + procedure SetSelectColor(const Value: TColor); + procedure SetSelectBorderColor(const Value: TColor); + procedure SetSeparatorColor(const Value: TColor); + procedure SetSelectFontColor(const Value: TColor); + procedure SetIconWidth(const Value: integer); + procedure SetDrawSelect(const Value: boolean); + procedure SetUseSystemColors(const Value: boolean); + + procedure SetOverrideOwnerDraw(const Value: boolean); + procedure SetGradient(const Value: boolean); + procedure SetFlatMenu(const Value: boolean); + procedure SetDrawMenuBar(const Value: boolean); + procedure SetUseDimColor(const Value: boolean); + procedure SetAutoDetect(const Value: boolean); + procedure SetUCXPContainers(const Value: TUCXPContainers); + procedure SetUCXPControls(const Value: TUCXPControls); + {END from UCXPStyle class} + procedure SetBitBtnColor( const Value: TColor); + procedure SetColorsChanged(const Value: boolean); + + protected + public + constructor Create(AOwner: TComponent);// override; + procedure Assign(Source: TPersistent);override; + destructor Destroy; override; + published + { from UCXPStyle class} + property DimLevel: Byte read FDimLevel write FDimLevel; + property GrayLevel: Byte read FGrayLevel write FGrayLevel; + property Font: TFont read FFont write SetFont; + property Color: TColor read FColor write SetColor; + property DrawMenuBar: boolean read FDrawMenuBar write SetDrawMenuBar; + property IconBackColor: TColor read FIconBackColor write SetIconBackColor; + property MenuBarColor: TColor read FMenuBarColor write SetMenuBarColor; + property SelectColor: TColor read FSelectColor write SetSelectColor; + property SelectBorderColor: TColor read FSelectBorderColor + write SetSelectBorderColor; + property SelectFontColor: TColor read FSelectFontColor + write SetSelectFontColor; + property DisabledColor: TColor read FDisabledColor write SetDisabledColor; + property SeparatorColor: TColor read FSeparatorColor + write SetSeparatorColor; + property CheckedColor: TColor read FCheckedColor write SetCheckedColor; + property IconWidth: integer read FIconWidth write SetIconWidth; + property DrawSelect: boolean read FDrawSelect write SetDrawSelect; + property UseSystemColors: boolean read FUseSystemColors + write SetUseSystemColors; + property UseDimColor: boolean read FUseDimColor write SetUseDimColor; + property OverrideOwnerDraw: boolean read FOverrideOwnerDraw + write SetOverrideOwnerDraw; + property Gradient: boolean read FGradient write SetGradient; + property FlatMenu: boolean read FFlatMenu write SetFlatMenu; + property AutoDetect: boolean read FAutoDetect write SetAutoDetect; + + property XPContainers: TUCXPContainers read FUCXPContainers write SetUCXPContainers + default [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel, + xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller]; + property XPControls :TUCXPControls read FUCXPControls write SetUCXPControls + default [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox, + xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox, + xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel, + xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey]; + {xcStringGrid, xcDrawGrid, xcDBGrid];} + + { END from UCXPStyle class} + property BitBtnColor: TColor read FBitBtnColor write SetBitBtnColor; {qmd} + property ColorsChanged: boolean read FColorsChanged write SetColorsChanged; + + end; + +procedure GetSystemMenuFont(Font: TFont); + +implementation + + +{ TUCXPSettings } + +procedure TUCXPSettings.Assign(Source: TPersistent); +begin + if Source is TUCXPSettings then + begin + {Based on UCXPStyle.Create method} + Self.Font := TUCXPSettings(Source).Font; + Self.Color := TUCXPSettings(Source).Color; + Self.IconBackColor := TUCXPSettings(Source).IconBackColor; + Self.MenuBarColor := TUCXPSettings(Source).MenuBarColor; + Self.CheckedColor := TUCXPSettings(Source).CheckedColor; + Self.SeparatorColor := TUCXPSettings(Source).SeparatorColor; + Self.SelectBorderColor := TUCXPSettings(Source).SelectBorderColor; + Self.SelectColor := TUCXPSettings(Source).SelectColor; + Self.DisabledColor := TUCXPSettings(Source).DisabledColor; + Self.SelectFontColor := TUCXPSettings(Source).SelectFontColor; + Self.IconWidth := TUCXPSettings(Source).IconWidth; + Self.DrawSelect := TUCXPSettings(Source).DrawSelect; + Self.UseSystemColors := TUCXPSettings(Source).UseSystemColors; + + Self.OverrideOwnerDraw := TUCXPSettings(Source).OverrideOwnerDraw; + Self.Gradient := TUCXPSettings(Source).Gradient; + Self.FlatMenu := TUCXPSettings(Source).FlatMenu; + Self.AutoDetect := TUCXPSettings(Source).AutoDetect; + Self.XPContainers := TUCXPSettings(Source).XPContainers; + Self.XPControls := TUCXPSettings(Source).XPControls; + Self.GrayLevel := TUCXPSettings(Source).GrayLevel; + Self.DimLevel := TUCXPSettings(Source).DimLevel; + Self.DrawMenuBar := TUCXPSettings(Source).DrawMenuBar; + Self.UseDimColor := TUCXPSettings(Source).UseDimColor; + {END from UCXPStyle class} + + Self.BitBtnColor := TUCXPSettings(Source).BitBtnColor; //qmd + + + end else inherited; +end; + +constructor TUCXPSettings.Create(AOwner: TComponent); +begin + inherited Create;//(AOwner); +{ if csDesigning in ComponentState then + begin} + {FROM to UCXPSettings} + FFont := TFont.Create; + + {$IFDEF VER5U} + FFont.Assign(Screen.MenuFont); + {$ELSE} + GetSystemMenuFont(FFont); + {$ENDIF} + + FUseSystemColors := true; + + FColor := clBtnFace; + FIconBackColor := clBtnFace; + FSelectColor := clHighlight; + FSelectBorderColor := clHighlight; + FMenuBarColor := clBtnFace; + FDisabledColor := clInactiveCaption; + FSeparatorColor := clBtnFace; + FCheckedColor := clHighlight; + FSelectFontColor := FFont.Color; + FGrayLevel := 10; + FDimLevel := 30; + FIconWidth := 24; + FDrawSelect := true; + XPContainers := [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel, + xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller]; + XPControls := [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox, + xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox, + xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel, + xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey]; + {xcStringGrid, xcDrawGrid, xcDBGrid];} + + {END FROM to UCXPSettings} + FBitBtnColor := clBtnFace; +// end; + +end; + + +destructor TUCXPSettings.Destroy; +begin + FreeAndNil(FFont); + inherited; +end; + +{END from UCXPStyle} +procedure TUCXPSettings.SetFont(const Value: TFont); +begin + FFont.Assign(Value); + //Windows.DrawMenuBar(FForm.Handle); + +end; + +procedure TUCXPSettings.SetColor(const Value: TColor); +begin + FColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetIconBackColor(const Value: TColor); +begin + FIconBackColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetMenuBarColor(const Value: TColor); +begin + FMenuBarColor := Value; + FColorsChanged := true; // +jt + //Windows.DrawMenuBar(FForm.Handle); +end; + +procedure TUCXPSettings.SetCheckedColor(const Value: TColor); +begin + FCheckedColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetSeparatorColor(const Value: TColor); +begin + FSeparatorColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetSelectBorderColor(const Value: TColor); +begin + FSelectBorderColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetSelectColor(const Value: TColor); +begin + FSelectColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetDisabledColor(const Value: TColor); +begin + FDisabledColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetSelectFontColor(const Value: TColor); +begin + FSelectFontColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPSettings.SetIconWidth(const Value: integer); +begin + FIconWidth := Value; +end; + +procedure TUCXPSettings.SetDrawSelect(const Value: boolean); +begin + FDrawSelect := Value; +end; + +procedure TUCXPSettings.SetOverrideOwnerDraw(const Value: boolean); +begin + FOverrideOwnerDraw := Value; + { + if FActive then + Active := True; + } +end; + +procedure TUCXPSettings.SetUseSystemColors(const Value: boolean); +begin + FUseSystemColors := Value; + {Windows.DrawMenuBar(FForm.Handle);} +end; + +procedure TUCXPSettings.SetGradient(const Value: boolean); +begin + FGradient := Value; +end; + +procedure TUCXPSettings.SetFlatMenu(const Value: boolean); +begin + FFlatMenu := Value; +end; + +procedure TUCXPSettings.SetUCXPContainers(const Value: TUCXPContainers); +begin + if Value <> FUCXPContainers then + begin + {if FActive then + begin + FActive := false; + InitItems(FForm, false, true); + FActive := true; + FUCXPContainers := Value; + InitItems(FForm, true, true); + end;} + end; + FUCXPContainers := Value; + +end; + +procedure TUCXPSettings.SetUCXPControls(const Value: TUCXPControls); +begin + if Value <> FUCXPControls then + begin + { if FActive then + begin + FActive := false; + InitItems(FForm, false, true); + FActive := true; + FUCXPControls := Value; + InitItems(FForm, true, true); + end;} + end; + FUCXPControls := Value; + +end; + +procedure TUCXPSettings.SetDrawMenuBar(const Value: boolean); +begin + FDrawMenuBar := Value; +end; + +procedure TUCXPSettings.SetUseDimColor(const Value: boolean); +begin + FUseDimColor := Value; +end; + +procedure TUCXPSettings.SetAutoDetect(const Value: boolean); +begin + FAutoDetect := Value; +end; +{END from UCXPStyle} +procedure TUCXPSettings.SetBitBtnColor( const Value: TColor); +begin + FBitBtnColor := Value; +end; + +procedure TUCXPSettings.SetColorsChanged(const Value: boolean); +begin + FColorsChanged := Value; +end; + +//generic +procedure GetSystemMenuFont(Font: TFont); +var + FNonCLientMetrics: TNonCLientMetrics; +begin + FNonCLientMetrics.cbSize := Sizeof(TNonCLientMetrics); + if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @FNonCLientMetrics,0) then + begin + Font.Handle := CreateFontIndirect(FNonCLientMetrics.lfMenuFont); + Font.Color := clMenuText; + end; +end; + + +end. diff --git a/internal/2.31RC1/1/Source/UCXPStyle.pas b/internal/2.31RC1/1/Source/UCXPStyle.pas new file mode 100644 index 0000000..694f11b --- /dev/null +++ b/internal/2.31RC1/1/Source/UCXPStyle.pas @@ -0,0 +1,5183 @@ +{ +Class UCXPStyle: +Based on XPMenu 3.1 for Delphi + + +XPMenu for Delphi +Author: Khaled Shagrouni +URL: http://www.shagrouni.com/english/software/xpmenu.html +e-mail: khaled@shagrouni.com + +Version 3.1 - 22.02.2004 + + + +XPMenu is a Delphi component to mimic Office XP menu and toolbar style. +Copyright (C) 2001, 2003 Khaled Shagrouni. + +This component is FREEWARE with source code. I still hold the copyright, but +you can use it for whatever you like: freeware, shareware or commercial software. +If you have any ideas for improvement or bug reports, don't hesitate to e-mail +me (Please state the XPMenu version and OS information). + +-------------------------------------------------------------------------------- +changes by QmD 30/11/2003 - qmd@usercontrol.com.br +* Add BitBtnColor / BitBtnSelectColor by QmD 30/11/2003 - qmd@usercontrol.com.br +* BitBtn Button multi-line corrected +* 29/03/2004 - XPmenu 2.21 incorporated in User Control Package. Class renamed to UCXPMenu to prevent conflicts (http://usercontrol.sourceforge.net) + +changes by fduenas 29/12/2004 - fduenas@outm.net, fduenas@flashmail.com +* XPMenu.pas 3.1 Ported to UCXPStyle.pas by Francisco Dueñas fduenas@outm.net. +* File UCXPMenu.pas renamed to UCXPStyle.pas +* Class UCXPSet renamed to UCXPSettings +* File UCXPSet.pas renamed to UCXPSettings.pas +} + +{$IFDEF VER130} +{$DEFINE VER5U} +{$ENDIF} + +{$IFDEF VER140} +{$DEFINE VER5U} +{$DEFINE VER6U} +{$ENDIF} + +{$IFDEF VER150} +{$DEFINE VER5U} +{$DEFINE VER6U} +{$DEFINE VER7U} +{$ENDIF} + +unit UCXPStyle; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, ComCtrls, Forms, + Menus, Commctrl, ExtCtrls, StdCtrls, Buttons, UCXPSettings, UCBase, UCSettings; + +type + { moved to UCXPSettings.pas and renamed TXP* to TUCXP* + TXPContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel, + xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller); + TXPContainers = set of TXPContainer; + + TXPControl = (xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox, + xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox, + xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel, + xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey); + {xcStringGrid, xcDrawGrid, xcDBGrid); + } + + + TUCAboutXpStyleVar=String[10]; + + TUCXPStyle = class; + + TControlSubClass = class(TComponent) //: "Fabian Jakubowski" + private + Control: TControl; + FBuilding: boolean; + FMouseInControl: boolean; + FLButtonBressed: boolean; + FBressed: boolean; + FIsKeyDown: boolean; + FIsFocused: boolean; + orgWindowProc: TWndMethod; + FXPStyle: TUCXPStyle; + FCtl3D: boolean; + FBorderStyle: TBorderStyle; + {FOnDrawCell: TDrawCellEvent;} + FDefaultDrawing: boolean; + FSelCol, FSelRow: integer; + FMsg: Cardinal; + procedure ControlSubClass(var Message: TMessage); + procedure PaintControlXP; + procedure PaintCombo; + procedure PaintDBLookupCombo; + procedure PaintEdit; + procedure PaintRichEdit; + procedure PaintCheckBox; + procedure PaintRadio; + procedure PaintButton; + procedure PaintBitButn; + procedure PaintUpDownButton; + procedure PaintSpeedButton; + procedure PaintPanel; + procedure PaintGroupBox; + procedure PaintNCWinControl; + procedure PaintProgressBar; + procedure PaintHotKey; + end; + + TUCXPStyle = class(TComponent) + private + FActive: boolean; + {Changes MMK FForm to TScrollingWinControl} + FForm: TScrollingWinControl; + + {moved to UCXPsettings + FFont: TFont; + FColor: TColor; + FIconBackColor: TColor; + FMenuBarColor: TColor; + FCheckedColor: TColor; + FSeparatorColor: TColor; + FSelectBorderColor: TColor; + FSelectColor: TColor; + FDisabledColor: TColor; + FSelectFontColor: TColor; + FIconWidth: integer; + FDrawSelect: boolean; + FUseSystemColors: boolean; + FColorsChanged: boolean; // +jt + } + + FFColor, FFIconBackColor, FFSelectColor, FFSelectBorderColor, + FFSelectFontColor, FCheckedAreaColor, FCheckedAreaSelectColor, + FFCheckedColor, FFMenuBarColor, FFDisabledColor, FFSeparatorColor, + FMenuBorderColor, FMenuShadowColor: TColor; + + Is16Bit: boolean; + { moved to UCXPSettings.pas + FOverrideOwnerDraw: boolean; + FGradient: boolean; + FFlatMenu: boolean; + FAutoDetect: boolean; + FUCXPContainers: TUCXPContainers; + FUCXPControls: TUCXPControls; + FGrayLevel: byte; + FDimLevel: byte; + FDrawMenuBar: boolean; + FUseDimColor: boolean; + } + + FDimParentColor, FDimParentColorSelect: integer; + + FAutoDetect: boolean; + // FUseParentClor: boolean; + + FSettingWindowRng: boolean; + FIsW2k: boolean; + FIsWXP: boolean; + FIsWNT: boolean; +// FTransparentColor: TColor; + // Do not allow the component to be used for subclassing + FDisableSubclassing: boolean; + + FUCSettings: TUCSettings; + FUCXPSettings: TUCXPSettings; + FUCAboutXpStyleVar: TUCAboutXpStyleVar; {+qmd} + + procedure SetDisableSubclassing(const Value: boolean); + + procedure SetActive(const Value: boolean); + + procedure SetForm(const Value: TScrollingWinControl); + { moved to UCXPSettings + procedure SetFont(const Value: TFont); + procedure SetColor(const Value: TColor); + procedure SetIconBackColor(const Value: TColor); + procedure SetMenuBarColor(const Value: TColor); + procedure SetCheckedColor(const Value: TColor); + procedure SetDisabledColor(const Value: TColor); + procedure SetSelectColor(const Value: TColor); + procedure SetSelectBorderColor(const Value: TColor); + procedure SetSeparatorColor(const Value: TColor); + procedure SetSelectFontColor(const Value: TColor); + procedure SetIconWidth(const Value: integer); + procedure SetDrawSelect(const Value: boolean); + procedure SetUseSystemColors(const Value: boolean); + procedure SetOverrideOwnerDraw(const Value: boolean); + procedure SetGradient(const Value: boolean); + procedure SetFlatMenu(const Value: boolean); + procedure SetUCXPContainers(const Value: TUCXPContainers); + procedure SetUCXPControls(const Value: TUCXPControls); + procedure SetDrawMenuBar(const Value: boolean); + procedure SetUseDimColor(const Value: boolean); + } + + procedure SetUCSettings(const Value: TUCSettings); {+qmd} + protected + procedure Loaded; override; //add by Cunha, liyang. + procedure InitItems(wForm: TWinControl; Enable, Update: boolean); + procedure InitItem(Comp: TComponent; Enable, Update: boolean); // Tom: "Thomas Knoblauch" 27.08 + procedure DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; + Selected: Boolean); + procedure MenueDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; + Selected: Boolean); + {$IFDEF VER5U} + procedure ToolBarDrawButton(Sender: TToolBar; Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean); + {$ENDIF} + procedure ControlBarPaint(Sender: TObject; Control: TControl; + Canvas: TCanvas; var ARect: TRect; var Options: TBandPaintOptions); + + procedure SetGlobalColor(ACanvas: TCanvas); + procedure DrawTopMenuItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; + BckColor:Tcolor; IsRightToLeft: boolean); + procedure DrawCheckedItem(FMenuItem: TMenuItem; Selected, Enabled, + HasImgLstBitmap: boolean; ACanvas: TCanvas; CheckedRect: TRect); + procedure DrawTheText(Sender: TObject; txt, ShortCuttext: string; + ACanvas: TCanvas; TextRect: TRect; + Selected, Enabled, Default, TopMenu, IsRightToLeft: boolean; + var TxtFont: TFont; TextFormat: integer); + procedure DrawIcon(Sender: TObject; ACanvas: TCanvas; B: TBitmap; + IconRect: Trect; Hot, Selected, Enabled, Checked, FTopMenu, + IsRightToLeft: boolean); + + procedure MeasureItem(Sender: TObject; ACanvas: TCanvas; + var Width, Height: Integer); + + //function GetImageExtent(MenuItem: TMenuItem): TPoint; + function GetImageExtent(MenuItem: TMenuItem; FTopMenu: TMenu): TPoint; // +jt + function TopMenuFontColor(ACanvas: TCanvas; Color: TColor): TColor; + procedure DrawGradient(ACanvas: TCanvas; ARect: TRect; + IsRightToLeft: boolean); + + procedure DrawWindowBorder(hWnd: HWND; IsRightToLeft: boolean); + + procedure Notification(AComponent: TComponent; + AOperation: TOperation); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure InitComponent(Comp: TComponent); // Tom: Added for usage by the main program ."Thomas Knoblauch" 27.08 + procedure ActivateMenuItem(MenuItem: TMenuItem; SubMenus: boolean); // +jt + property Form: TScrollingWinControl read FForm write SetForm;// +jt + property IsWXP: boolean read FIsWXP; + property IsW2k: boolean read FIsW2k; + property IsWNT: boolean read FIsWNT; +{ property TransparentColor: TColor read FTransparentColor write FTransparentColor;} published {moved to UCXPSettings + property DimLevel: Byte read FDimLevel write FDimLevel; + property GrayLevel: Byte read FGrayLevel write FGrayLevel; + property Font: TFont read FFont write SetFont; + property Color: TColor read FColor write SetColor; + property DrawMenuBar: boolean read FDrawMenuBar write SetDrawMenuBar; + property IconBackColor: TColor read FIconBackColor write SetIconBackColor; + property MenuBarColor: TColor read FMenuBarColor write SetMenuBarColor; + property SelectColor: TColor read FSelectColor write SetSelectColor; + property SelectBorderColor: TColor read FSelectBorderColor + write SetSelectBorderColor; + property SelectFontColor: TColor read FSelectFontColor + write SetSelectFontColor; + property DisabledColor: TColor read FDisabledColor write SetDisabledColor; + property SeparatorColor: TColor read FSeparatorColor + write SetSeparatorColor; + property CheckedColor: TColor read FCheckedColor write SetCheckedColor; + property IconWidth: integer read FIconWidth write SetIconWidth; + property DrawSelect: boolean read FDrawSelect write SetDrawSelect; + property UseSystemColors: boolean read FUseSystemColors + write SetUseSystemColors; + property UseDimColor: boolean read FUseDimColor write SetUseDimColor; + property OverrideOwnerDraw: boolean read FOverrideOwnerDraw + write SetOverrideOwnerDraw; + + property Gradient: boolean read FGradient write SetGradient; + property FlatMenu: boolean read FFlatMenu write SetFlatMenu; + property AutoDetect: boolean read FAutoDetect write SetAutoDetect; + + property XPContainers: TUCXPContainers read FUCXPContainers write SetUCXPContainers + default [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel, + xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller]; + property XPControls :TUCXPControls read FUCXPControls write SetUCXPControls + default [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox, + xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox, + xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel, + xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey]; + {xcStringGrid, xcDrawGrid, xcDBGrid]; + } + property About: TUCAboutXpStyleVar read FUCAboutXpStyleVar write FUCAboutXpStyleVar; + property Active: boolean read FActive write SetActive; + property DisableSubclassing: boolean read FDisableSubclassing write SetDisablesubclassing + default false; + property XPSettings : TUCXPSettings read FUCXPSettings write FUCXPSettings; + property UCSettings : TUCSettings read FUCSettings write SetUCSettings; + end; + + TUCXPStyleManager = class(TPersistent) + private + FXPStyleList: TList; + FPendingFormsList: TList; + FFormList: TList; + FActiveXPStyle: TUCXPStyle; + FDisableSubclassing: boolean; + + function MainWindowHook(var Message: TMessage): boolean; + procedure CollectForms; + procedure RemoveChildSubclassing(AForm: TCustomForm); + procedure SetDisableSubclassing(AValue: boolean); + function FindSubclassingXPStyle(Exclude: TUCXPStyle): TUCXPStyle; + + protected + procedure Notification(AComponent: TComponent; + AOperation: TOperation); + + public + constructor Create; + destructor Destroy; override; + procedure Add(AXPStyle: TUCXPStyle); + procedure Delete(AXPStyle: TUCXPStyle); + procedure UpdateActiveXPStyle(AXPStyle: TUCXPStyle); + procedure AddForm(AForm: TCustomForm); + procedure RemoveForm(AForm: TCustomForm); + function IsFormSubclassed(AForm: TCustomForm): boolean; + function IsComponentSubclassed(AComponent: TComponent): boolean; + + property ActiveXPStyle: TUCXPStyle read FActiveXPStyle; + property DisableSubclassing: boolean read FDisableSubclassing write SetDisableSubclassing + default false; + end; + +function GetShadeColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor; +function MergColor(Colors: Array of TColor): TColor; +function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor; +procedure DimBitmap(ABitmap: TBitmap; Value: integer); + +procedure DrawArrow(ACanvas: TCanvas; X, Y: integer); overload; +procedure DrawArrow(ACanvas: TCanvas; X, Y, Orientation: integer); overload; +function GrayColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor; +function GetInverseColor(AColor: TColor): TColor; + +procedure GrayBitmap(ABitmap: TBitmap; Value: integer); +procedure DrawBitmapShadow(B: TBitmap; ACanvas: TCanvas; X, Y: integer; ShadowColor: TColor); +procedure DrawCheckMark(ACanvas: TCanvas; X, Y: integer); + +procedure GetSystemMenuFont(Font: TFont); +//procedure Register; + +const + WM_DRAWMENUBORDER = CN_NOTIFY + 101; // +jt + WM_DRAWMENUBORDER2 = CN_NOTIFY + 102; // +jt + +// Gloabal access to the UCXPStyleManager +var + UCXPStyleManager: TUCXPStyleManager; + +implementation + +{ moved to UCReg.pas +procedure Register; +begin + RegisterComponents('XP', [TUCXPStyle]); +end; +} +// Set up the global variable that represents the UCXPStyleManager +procedure InitControls; +begin + //added by fduenas + if (csDesigning in Application.ComponentState) then + exit; + + if (Not assigned(UCXPStyleManager)) or + (UCXPStyleManager = nil) then + UCXPStyleManager := TUCXPStyleManager.Create; +end; + +// Delete the global variable that represents the UCXPStyleManager +procedure DoneControls; +begin + FreeAndNil(UCXPStyleManager); + { + if (UCXPStyleManager <> nil) then + begin + UCXPStyleManager.Free; + UCXPStyleManager := nil; + end; + } +end; + +// Test if mouse cursor is in the given rect of the application's main form +function IsMouseInRect(TheForm: TScrollingWinControl; DestRect: TRect): boolean; +var + p: TPoint; + +begin + + if Assigned(TheForm) then + begin + p := Mouse.CursorPos; + p.x := p.x - TheForm.Left; + p.y := p.y - TheForm.Top; + + Dec(DestRect.Right); + Dec(DestRect.Bottom, 2); + Result := (p.x >= DestRect.Left) and (p.x <= DestRect.Right) and + (p.y >= DestRect.Top) and (p.y <= DestRect.Bottom); + end + else Result := false; +end; + +{ TUCXPStyle } + +constructor TUCXPStyle.Create(AOwner: TComponent); +var + OSVersionInfo: TOSVersionInfo; // +jt +begin + inherited Create(AOwner); + {moved to UCXPSettings + FFont := TFont.Create; + } + FDisableSubclassing := false; // enable XPStyle to be used for global subclassing + +{moved to UCXPSettings + {$IFDEF VER5U + FFont.Assign(Screen.MenuFont); + {$ELSE + GetSystemMenuFont(FFont); + {$ENDIF +} + + FForm := (Owner as TScrollingWinControl); + FUCXPSettings := TUCXPSettings.create(self); //added by fduenas + {moved to UCXPSettings + FUseSystemColors := true; + + FColor := clBtnFace; + FIconBackColor := clBtnFace; + FSelectColor := clHighlight; + FSelectBorderColor := clHighlight; + FMenuBarColor := clBtnFace; + FDisabledColor := clInactiveCaption; + FSeparatorColor := clBtnFace; + FCheckedColor := clHighlight; + FSelectFontColor := FFont.Color; + FGrayLevel := 10; + FDimLevel := 30; + FIconWidth := 24; + FDrawSelect := true; + UCXPContainers := [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel, + xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller]; + UCXPControls := [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox, + xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox, + xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel, + xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey]; + {xcStringGrid, xcDrawGrid, xcDBGrid]; + + } + if Assigned(FForm) then + SetGlobalColor(TForm(FForm).Canvas); + +// +jt +// FTransparentColor := clFuchsia; + FUCXPSettings.ColorsChanged := false; + OSVersionInfo.dwOSVersionInfoSize := sizeof(OSVersionInfo); + GetVersionEx(OSVersionInfo); + FIsWXP:=false; + FIsW2k:=false; + FIsWNT:=false; + if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then + begin + FIsWNT:=true; + if (OSVersionInfo.dwMajorVersion = 5) and (OSVersionInfo.dwMinorVersion = 0) then FIsW2k:=true; + if (OSVersionInfo.dwMajorVersion = 5) and (OSVersionInfo.dwMinorVersion = 1) then FIsWXP:=true; + end; // +jt + + {moved to initialization section + if not(csDesigning in ComponentState) then + InitControls + else + exit; + } + if FActive then + Self.Active := FActive; + + //if FForm.Handle <> 0 then + // Windows.DrawMenuBar(FForm.Handle); +end; + +destructor TUCXPStyle.Destroy; +begin + if Assigned(FForm) then //oleg oleg@vdv-s.ru Mon Oct 7 + InitItems(FForm, false, false); + +// Remove XPStyle from UCXPStyleManager + if Assigned(UCXPStyleManager) and not(csDesigning in ComponentState) then + begin + UCXPStyleManager.Delete(Self); + FForm.Update; + {moved to finalization section + if UCXPStyleManager.FXPStyleList.Count = 0 then + DoneControls; + } + end; + + //FFont.Free; moved to TCXPSettings + FreeAndNil(FUCXPSettings); {added by fduenas} + inherited Destroy; +end; + +//add by: +//liyang ,2002-07-19 +//Pedro Miguel Cunha - 02 Apr 2002 +procedure TUCXPStyle.Loaded; +begin + inherited Loaded; + +// Add the XPStyle to the UCXPStyleManager + if Assigned(UCXPStyleManager) and not(csDesigning in ComponentState) then + UCXPStyleManager.Add(Self); +end; + +{to check for new sub items} +procedure TUCXPStyle.ActivateMenuItem(MenuItem: TMenuItem; SubMenus: boolean); // +jt + + procedure Activate(MenuItem: TMenuItem); + begin + if (MenuItem.Tag <> 999) then + if addr(MenuItem.OnDrawItem) <> addr(TUCXPStyle.DrawItem) then + begin + if (not assigned(MenuItem.OnDrawItem)) or (FUCXPSettings.OverrideOwnerDraw) then + MenuItem.OnDrawItem := DrawItem; + if (not assigned(MenuItem.OnMeasureItem)) or (FUCXPSettings.OverrideOwnerDraw) then + MenuItem.OnMeasureItem := MeasureItem; + end + end; + +var + i{, j}: integer; +begin + + Activate(MenuItem); + if (SubMenus=true) then // +jt + begin + for i := 0 to MenuItem.Count -1 do + begin + ActivateMenuItem(MenuItem.Items[i],true); + end; + end; +end; + +procedure TUCXPStyle.InitItems(wForm: TWinControl; Enable, Update: boolean ); +var + i: integer; + Comp: TComponent; +begin + for i := 0 to wForm.ComponentCount - 1 do + begin + Comp := wForm.Components[i]; + InitItem(Comp, Enable, Update); // Tom: "Thomas Knoblauch" 27.08 + end; +end; + +procedure TUCXPStyle.InitComponent(Comp: TComponent); // Tom: for external (by the main program) use without parameters. "Thomas Knoblauch" 27.08 +begin + if FActive then InitItem(Comp, true, true); +end; + + + +// Tom: "Thomas Knoblauch" 27.08 +procedure TUCXPStyle.InitItem(Comp: TComponent; Enable, Update: boolean ); + procedure Activate(MenuItem: TMenuItem); + begin + if Enable then + begin + if (MenuItem.Tag <> 999) then + begin + if (not assigned(MenuItem.OnDrawItem)) or (FUCXPSettings.OverrideOwnerDraw) then + MenuItem.OnDrawItem := DrawItem; + if (not assigned(MenuItem.OnMeasureItem)) or (FUCXPSettings.OverrideOwnerDraw) then + MenuItem.OnMeasureItem := MeasureItem; + end; + end + else + begin + if addr(MenuItem.OnDrawItem) = addr(TUCXPStyle.DrawItem) then + MenuItem.OnDrawItem := nil; + if addr(MenuItem.OnMeasureItem) = addr(TUCXPStyle.MeasureItem) then + MenuItem.OnMeasureItem := nil; + end; + end; + + procedure ItrateMenu(MenuItem: TMenuItem); + var + i: integer; + begin + Activate(MenuItem); + for i := 0 to MenuItem.Count - 1 do + begin + ItrateMenu(MenuItem.Items[i]); + end; + end; + +var + x: integer; + s: string; + +begin + if (Comp is TMainMenu) and (xcMainMenu in FUCXPSettings.XPControls) and (TMainMenu(Comp).Tag <> 999)then + begin + for x := 0 to TMainMenu(Comp).Items.Count - 1 do + begin + TMainMenu(Comp).OwnerDraw := Enable; + //Activate(TMainMenu(Comp).Items[x]); + ItrateMenu(TMainMenu(Comp).Items[x]); + end; + // Selly way to force top menu in other forms to repaint + S := TMainMenu(Comp).Items[0].Caption; + TMainMenu(Comp).Items[0].Caption := ''; + TMainMenu(Comp).Items[0].Caption := S; + end; + + if (Comp is TPopupMenu) and (xcPopupMenu in FUCXPSettings.XPControls) then + begin + for x := 0 to TPopupMenu(Comp).Items.Count - 1 do + begin + TPopupMenu(Comp).OwnerDraw := Enable; + ItrateMenu(TPopupMenu(Comp).Items[x]); + + end; + end; + + {$IFDEF VER5U} + if (Comp is TToolBar) and (xcToolBar in FUCXPSettings.XPControls) then + if not (csDesigning in ComponentState) then + begin + if not TToolBar(Comp).Flat then + TToolBar(Comp).Flat := true; + + if Enable then + begin + for x := 0 to TToolBar(Comp).ButtonCount - 1 do + if (not assigned(TToolBar(Comp).OnCustomDrawButton)) + or (FUCXPSettings.OverrideOwnerDraw) then + begin + TToolBar(Comp).OnCustomDrawButton := + ToolBarDrawButton; + + end; + end + else + begin + if addr(TToolBar(Comp).OnCustomDrawButton) = + addr(TUCXPStyle.ToolBarDrawButton) then + TToolBar(Comp).OnCustomDrawButton := nil; + end; + if Update then + TToolBar(Comp).Invalidate; + end; + {$ENDIF} + + if (Comp is TControlBar) and (xcControlBar in FUCXPSettings.XPControls) then + if not (csDesigning in ComponentState) then + begin + if Enable then + begin + if (not assigned(TControlBar(Comp).OnBandPaint)) + or (FUCXPSettings.OverrideOwnerDraw) then + begin + TControlBar(Comp).OnBandPaint := ControlBarPaint; + end; + end + else + begin + if addr(TControlBar(Comp).OnBandPaint) = + addr(TUCXPStyle.ControlBarPaint) then + TControlBar(Comp).OnBandPaint := nil; + end; + if Update then + TControlBar(Comp).Invalidate; + end; + + if not (csDesigning in ComponentState) then + if {$IFDEF VER6U} + ((Comp is TCustomCombo) and (xcCombo in FUCXPSettings.XPControls)) or + ((Comp is TCustomLabeledEdit) and (xcEdit in FUCXPSettings.XPControls)) or + + {$ELSE} + ((Comp is TCustomComboBox) and (xcCombo in FUCXPSettings.XPControls)) or + {$ENDIF} + ((Comp is TEdit) and (xcEdit in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TMaskEdit') and (xcMaskEdit in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TDBEdit') and (xcMaskEdit in FUCXPSettings.XPControls)) or + ((Comp is TCustomMemo) and (xcMemo in FUCXPSettings.XPControls)) or + ((Comp is TCustomRichEdit) and (xcRichEdit in FUCXPSettings.XPControls)) or + ((Comp is TCustomCheckBox) and (xcCheckBox in FUCXPSettings.XPControls)) or + ((Comp is TRadioButton) and (xcRadioButton in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TBitBtn') and (xcBitBtn in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TButton') and (xcButton in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TUpDown') and (xcUpDown in FUCXPSettings.XPControls)) or + ((Comp is TSpeedButton) and (xcSpeedButton in FUCXPSettings.XPControls)) or + ((Comp is TCustomPanel) and (xcPanel in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TDBNavigator') and (xcButton in FUCXPSettings.XPControls)) or + ((Comp.ClassName = 'TDBLookupComboBox') and (xcButton in FUCXPSettings.XPControls)) or + ((Comp is TCustomGroupBox) and (xcGroupBox in FUCXPSettings.XPControls)) or + ((Comp is TCustomListBox) and (xcListBox in FUCXPSettings.XPControls)) or + ((Comp is TCustomTreeView) and (xcTreeView in FUCXPSettings.XPControls)) or + ((Comp is TCustomListView) and (xcListView in FUCXPSettings.XPControls)) or + ((Comp is TProgressBar) and (xcProgressBar in FUCXPSettings.XPControls)) or + ((Comp is TCustomHotKey) and (xcHotKey in FUCXPSettings.XPControls)) + then + if ((TControl(Comp).Parent is TToolbar) and (xccToolBar in FUCXPSettings.XPContainers))or + ((TControl(Comp).Parent is TCoolbar) and (xccCoolbar in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TCustomPanel) and (xccPanel in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TControlbar) and (xccControlbar in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TScrollBox) and (xccScrollBox in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TCustomGroupBox) and (xccGroupBox in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TTabSheet) and (xccTabSheet in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TTabControl) and (xccTabSheet in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent.ClassName = 'TdxTabSheet') and (xccTabSheet in FUCXPSettings.XPContainers)) or //DeveloperExpress + ((TControl(Comp).Parent is TPageScroller) and (xccPageScroller in FUCXPSettings.XPContainers)) or + {$IFDEF VER5U} + ((TControl(Comp).Parent is TCustomFrame) and (xccFrame in FUCXPSettings.XPContainers)) or + {$ENDIF} + ((TControl(Comp).Parent.ClassName = 'TDBCtrlPanel') and (xccFrame in FUCXPSettings.XPContainers)) or + ((TControl(Comp).Parent is TCustomForm) and (xccForm in FUCXPSettings.XPContainers)) + + + then + begin + if (Enable) and (Comp.Tag <> 999) and (TControl(Comp).Parent.Tag <> 999) then + {skip if Control/Control.parent.tag = 999} + with TControlSubClass.Create(Self) do + begin + Control := TControl(Comp); + if Addr(Control.WindowProc) <> Addr(TControlSubClass.ControlSubClass) then + begin + orgWindowProc := Control.WindowProc; + Control.WindowProc := ControlSubClass; + end; + FXPStyle := self; + + if (Control is TCustomEdit) then + begin + FCtl3D := TEdit(Control).Ctl3D; + FBorderStyle := TRichEdit(Control).BorderStyle; + end; + if Control.ClassName = 'TDBLookupComboBox' then + begin + FCtl3D := TComboBox(Control).Ctl3D; + end; + if (Control is TCustomListBox) then + begin + FCtl3D := TListBox(Control).Ctl3D; + FBorderStyle := TListBox(Control).BorderStyle; + end; + if (Control is TCustomListView) then begin + FCtl3D := TListView(Control).Ctl3D; + FBorderStyle := TListView(Control).BorderStyle; + end; + if (Control is TCustomTreeView) then begin + FCtl3D := TTreeView(Control).Ctl3D; + FBorderStyle := TTreeView(Control).BorderStyle; + end; + + end; + + if Update then + begin + TControl(Comp).invalidate //in TControlSubClass.ControlSubClass + end; + + end; + + // Recursive call for possible containers. + + + // Do recursive call for RadioGroups + if (((Comp is TCustomRadioGroup)) and (xccGroupBox in FUCXPSettings.XPContainers)) then + self.InitItems(Comp as TWinControl, Enable, Update); + + + if {$IFDEF VER5U}((Comp is TCustomFrame) and (xccFrame in FUCXPSettings.XPContainers)) + or {$ENDIF}(Comp.ClassName = 'TDBNavigator') + or (Comp is TCustomForm) then //By Geir Wikran + self.InitItems(Comp as TWinControl, Enable, Update); + + +end; + +procedure TUCXPStyle.DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; + Selected: Boolean); +begin + try //"Steve Rice" + if FActive then + MenueDrawItem(Sender, ACanvas, ARect, Selected); + except + end; +end; + +function TUCXPStyle.GetImageExtent(MenuItem: TMenuItem; FTopMenu: TMenu): TPoint; +var + HasImgLstBitmap: boolean; + B: TBitmap; +begin + B := TBitmap.Create; + try + B.Width := 0; + B.Height := 0; + Result.x := 0; + Result.Y := 0; + HasImgLstBitmap := false; +// +jt + if Assigned(FTopMenu) then + begin + if FTopMenu.Images <> nil then + if MenuItem.ImageIndex <> -1 then + HasImgLstBitmap := true; + end; + if (MenuItem.Parent.GetParentMenu.Images <> nil) + {$IFDEF VER5U} + or (MenuItem.Parent.SubMenuImages <> nil) + {$ENDIF} + then + begin + if MenuItem.ImageIndex <> -1 then + HasImgLstBitmap := true + else + HasImgLstBitmap := false; + end; + + if HasImgLstBitmap then + begin + {$IFDEF VER5U} + if MenuItem.Parent.SubMenuImages <> nil then + MenuItem.Parent.SubMenuImages.GetBitmap(MenuItem.ImageIndex, B) + else + {$ENDIF} + MenuItem.Parent.GetParentMenu.Images.GetBitmap(MenuItem.ImageIndex, B) + end + else + if MenuItem.Bitmap.Width > 0 then + B.Assign(TBitmap(MenuItem.Bitmap)); + + Result.x := B.Width; + Result.Y := B.Height; + + if not Assigned(FTopMenu) then // +jt + if Result.x < FUCXPSettings.IconWidth then + Result.x := FUCXPSettings.IconWidth; + finally + B.Free; + end; +end; + +procedure TUCXPStyle.MeasureItem(Sender: TObject; ACanvas: TCanvas; + var Width, Height: Integer); +var + s: string; + W, H: integer; + P: TPoint; + IsLine: boolean; + FTopMenu: boolean; // +jt + FMenu: TMenu; // +jt + i: integer; // +jt +begin + + FTopMenu:=false; //+jt + if FActive then + begin + S := TMenuItem(Sender).Caption; + + if S = '-' then IsLine := true else IsLine := false; + if IsLine then + S := ''; + + if Trim(ShortCutToText(TMenuItem(Sender).ShortCut)) <> '' then + S := S + ShortCutToText(TMenuItem(Sender).ShortCut) + 'WWW'; + + ACanvas.Font.Assign(FUCXPSettings.Font); + W := ACanvas.TextWidth(s); + Inc(W, 5); + if pos('&', s) > 0 then + W := W - ACanvas.TextWidth('&'); + +// +jt + FMenu := TMenuItem(Sender).Parent.GetParentMenu; + if FMenu is TMainMenu then + begin + for i := 0 to TMenuItem(Sender).GetParentMenu.Items.Count - 1 do + if TMenuItem(Sender).GetParentMenu.Items[i] = TMenuItem(Sender) then + begin + FTopMenu := True; + break; + end + end; + if not FTopMenu then FMenu := nil; + if(not FTopMenu) and (TMenuItem(Sender).Count>0) then Inc(W,6); // +jt +// +jt + + P := GetImageExtent(TMenuItem(Sender), FMenu); // +jt + W := W + P.x ; + + + if Width < W then + Width := W; + + if IsLine then + Height := 4 + else + begin + H := ACanvas.TextHeight(s) + Round(ACanvas.TextHeight(s) * 0.75); + if P.y + 6 > H then + H := P.y + 6; + + if Height < H then + Height := H; + end; + end; + +end; + +procedure TUCXPStyle.MenueDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; + Selected: Boolean); +var + txt: string; + B: TBitmap; + IconRect, TextRect, CheckedRect: TRect; + FillRect: TRect; // +jt + i, X1, X2: integer; + TextFormat: integer; + HasImgLstBitmap: boolean; + HasBitmap: boolean; + FMenuItem: TMenuItem; + FMenu: TMenu; + FTopMenu: boolean; + IsLine: boolean; + ImgListHandle: HImageList; {Commctrl.pas} + ImgIndex: integer; + hWndM: HWND; + hDcM: HDC; + DrawTopMenuBorder: boolean; + msg: TMSG; // +jt + buff: TBitmap; // +jt + OrigRect: TRect; // +jt + OrigCanvas: TCanvas; // +jt + FFontSettings: TFont; +begin + + + OrigCanvas:= nil; + + FTopMenu := false; + FMenuItem := TMenuItem(Sender); + +// +jt + B := TBitmap.Create; + buff := TBitmap.Create; + try + origrect:= ARect; + Dec(origrect.Left,4); + origcanvas:=ACanvas; + ARect.Right:=(ARect.Right-ARect.Left)+4; + ARect.Bottom:=ARect.Bottom-ARect.Top; + ARect.Left:=4; + ARect.Top:=0; + buff.Width := ARect.Right; + buff.Height := ARect.Bottom; + ACanvas:=buff.Canvas; // +jt + //SetGlobalColor(ACanvas); + + if FMenuItem.Caption = '-' then IsLine := true else IsLine := false; + + FMenu := FMenuItem.Parent.GetParentMenu; + + if FMenu is TMainMenu then + for i := 0 to FMenuItem.GetParentMenu.Items.Count - 1 do + if FMenuItem.GetParentMenu.Items[i] = FMenuItem then + begin + FTopMenu := True; + // +jt + ARect.Left:=0; + Inc(origrect.Left,4); + Dec(ARect.Right,4); + buff.Width:=ARect.Right; + Dec(ARect.Bottom,1); // +jt + break; + end; + if(FUCXPSettings.ColorsChanged) then SetGlobalColor(ACanvas); // +jt + + ACanvas.Font.Assign(FUCXPSettings.Font); + + Inc(ARect.Bottom, 1); + TextRect := ARect; + txt := ' ' + FMenuItem.Caption; + +// B := TBitmap.Create; //Leslie Cutting lesnes@absamail.co.za Jul 8 2003 + HasBitmap := false; + HasImgLstBitmap := false; + + + if (FMenuItem.Parent.GetParentMenu.Images <> nil) + {$IFDEF VER5U} + or (FMenuItem.Parent.SubMenuImages <> nil) + {$ENDIF} + then + begin + if FMenuItem.ImageIndex <> -1 then + HasImgLstBitmap := true + else + HasImgLstBitmap := false; + end; + + if FMenuItem.Bitmap.Width > 0 then + HasBitmap := true; + + //------- + if HasBitmap then + begin + B.Width := FMenuItem.Bitmap.Width; + B.Height := FMenuItem.Bitmap.Height; + // +jt + //B.Canvas.Brush.Color := FTransparentColor; // ACanvas.Brush.Color; + B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher" + B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height)); + FMenuItem.Bitmap.Transparent := true; + FMenuItem.Bitmap.TransparentMode := tmAuto; + B.Canvas.Draw(0,0,FMenuItem.Bitmap); // +jt + end; + + + if HasImgLstBitmap then + begin + {$IFDEF VER5U} + if FMenuItem.Parent.SubMenuImages <> nil then + begin + ImgListHandle := FMenuItem.Parent.SubMenuImages.Handle; + ImgIndex := FMenuItem.ImageIndex; + + B.Width := FMenuItem.Parent.SubMenuImages.Width; + B.Height := FMenuItem.Parent.SubMenuImages.Height; + // B.Canvas.Brush.Color := FTransparentColor; // ACanvas.Brush.Color; // +jt + B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher" + B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height)); + ImageList_DrawEx(ImgListHandle, ImgIndex, + B.Canvas.Handle, 0, 0, 0, 0, clNone, clNone, ILD_Transparent); + + end + else + {$ENDIF} + if FMenuItem.Parent.GetParentMenu.Images <> nil then + begin + ImgListHandle := FMenuItem.Parent.GetParentMenu.Images.Handle; + ImgIndex := FMenuItem.ImageIndex; + + B.Width := FMenuItem.Parent.GetParentMenu.Images.Width; + B.Height := FMenuItem.Parent.GetParentMenu.Images.Height; + //B.Canvas.Brush.Color := FTransparentColor; //ACanvas.Pixels[2,2]; // +jt + B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher" + B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height)); + ImageList_DrawEx(ImgListHandle, ImgIndex, + B.Canvas.Handle, 0, 0, 0, 0, clNone, clNone, ILD_Transparent); + + end; + + end; + + //----- + + if FMenu.IsRightToLeft then + begin + X1 := ARect.Right - FUCXPSettings.IconWidth; + X2 := ARect.Right; + end + else + begin + X1 := ARect.Left; + X2 := ARect.Left + FUCXPSettings.IconWidth; + end; + IconRect := Rect(X1, ARect.Top, X2, ARect.Bottom); + + + if HasImgLstBitmap or HasBitmap then + begin + CheckedRect := IconRect; + Inc(CheckedRect.Left, 1); + Inc(CheckedRect.Top, 2); + Dec(CheckedRect.Right, 3); + Dec(CheckedRect.Bottom, 2); + end + else + begin + CheckedRect.Left := IconRect.Left + + (IConRect.Right - IconRect.Left - 10) div 2; + CheckedRect.Top := IconRect.Top + + (IConRect.Bottom - IconRect.Top - 10) div 2; + CheckedRect.Right := CheckedRect.Left + 10; + CheckedRect.Bottom := CheckedRect.Top + 10; + end; + + if B.Width > FUCXPSettings.IconWidth then + if FMenu.IsRightToLeft then + CheckedRect.Left := CheckedRect.Right - B.Width + else + CheckedRect.Right := CheckedRect.Left + B.Width; + + if FTopMenu then Dec(CheckedRect.Top, 1); + + + if FMenu.IsRightToLeft then + begin + X1 := ARect.Left; + if not FTopMenu then + Dec(X2, FUCXPSettings.IconWidth) + else + Dec(X2, 4); + if (ARect.Right - B.Width) < X2 then + X2 := ARect.Right - B.Width - 8; + end + else + begin + X1 := ARect.Left ; + if not FTopMenu then + Inc(X1, FUCXPSettings.IconWidth) + else + Inc(X1, 4); + + if (ARect.Left + B.Width) > X1 then + X1 := ARect.Left + B.Width + 4; + X2 := ARect.Right; + end; + + TextRect := Rect(X1, ARect.Top, X2, ARect.Bottom); + // +jt + FillRect := ARect; + Dec(FillRect.Left,4); // +jt + + if FTopMenu then + begin + if not (HasImgLstBitmap or HasBitmap) then + begin + TextRect := ARect; + end + else + begin + if FMenu.IsRightToLeft then + TextRect.Right := TextRect.Right + 5 + else + TextRect.Left := TextRect.Left - 5; + end + + end; + + if FTopMenu then + begin + if FUCXPSettings.DrawMenuBar then + FFMenuBarColor := FUCXPSettings.MenuBarColor; + ACanvas.brush.color := FFMenuBarColor; + ACanvas.Pen.Color := FFMenuBarColor; + // Inc(ARect.Bottom, 2); + ACanvas.FillRect(ARect); + + //-- + if FUCXPSettings.DrawMenuBar then + begin + if FMenuItem.GetParentMenu.Items[FMenuItem.GetParentMenu.Items.Count-1] = + FMenuItem then + begin + if FMenu.IsRightToLeft then + ACanvas.Rectangle(3, ARect.Top, ARect.Right, ARect.Bottom) + else + ACanvas.Rectangle(ARect.Left, ARect.Top, TScrollingWinControl(FMenu.Owner).ClientWidth+5{FForm.ClientWidth+5}, + ARect.Bottom); + end + else + if FMenu.IsRightToLeft then + ACanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right+7, ARect.Bottom); + end; + //-- + end + else + begin + if (Is16Bit and FUCXPSettings.Gradient) then + begin + inc(ARect.Right,2); //needed for RightToLeft + DrawGradient(ACanvas, ARect, FMenu.IsRightToLeft); + Dec(ARect.Right,2); + + end + else + begin + ACanvas.brush.color := FFColor; + ACanvas.FillRect(FillRect); // +jt + ACanvas.brush.color := FFIconBackColor; + ACanvas.FillRect(IconRect); + end; + + + //------------ + end; + + + if FMenuItem.Enabled then + ACanvas.Font.Color := FUCXPSettings.Font.Color + else + ACanvas.Font.Color := FUCXPSettings.DisabledColor; + + DrawTopMenuBorder := false; + if Selected and FUCXPSettings.DrawSelect then + begin + ACanvas.brush.Style := bsSolid; + if FTopMenu then + begin + DrawTopMenuItem(FMenuItem, ACanvas, ARect, FUCXPSettings.MenuBarColor, FMenu.IsRightToLeft); + end + else + if FMenuItem.Enabled then + begin + Inc(ARect.Top, 1); + Dec(ARect.Bottom, 1); + if FUCXPSettings.FlatMenu then + Dec(ARect.Right, 1); + ACanvas.brush.color := FFSelectColor; + ACanvas.FillRect(ARect); + ACanvas.Pen.color := FFSelectBorderColor; + ACanvas.Brush.Style := bsClear; + ACanvas.RoundRect(Arect.Left, Arect.top, Arect.Right, Arect.Bottom, 0, 0); + Dec(ARect.Top, 1); + Inc(ARect.Bottom, 1); + if FUCXPSettings.FlatMenu then + Inc(ARect.Right, 1); + end; + DrawTopMenuBorder := true; + end + + // Draw the menubar in XP Style when hovering over an main menu item + else + begin + //if FMenuItem.Enabled and FTopMenu and IsMouseInRect( TScrollingWinControl(FMenu.Owner), ARect) then + if FMenuItem.Enabled and FTopMenu and IsWNT and + IsMouseInRect( TScrollingWinControl(FMenu.Owner), origrect) then // +jt + begin + ACanvas.brush.Style := bsSolid; + ACanvas.brush.color := FFSelectColor; + DrawTopMenuBorder := true; + ACanvas.Pen.color := FFSelectBorderColor; + ACanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right - 7, ARect.Bottom); + end; + end; + + + if (FMenuItem.Checked) or (FMenuItem.RadioItem ) then //x + DrawCheckedItem(FMenuItem, Selected, FMenuItem.Enabled, HasImgLstBitmap or HasBitmap, + ACanvas, CheckedRect); + + if (B <> nil) and (B.Width > 0) then // X + DrawIcon(FMenuItem, ACanvas, B, IconRect, + Selected or DrawTopMenuBorder, False, FMenuItem.Enabled, FMenuItem.Checked, + FTopMenu, FMenu.IsRightToLeft); + + + + if not IsLine then + begin + + if FMenu.IsRightToLeft then + begin + TextFormat := DT_RIGHT + DT_RTLREADING; + Dec(TextRect.Right, 3); + end + else + begin + TextFormat := 0; + Inc(TextRect.Left, 3); + end; + TextRect.Top := TextRect.Top + + ((TextRect.Bottom - TextRect.Top) - ACanvas.TextHeight('W')) div 2; + FFontSettings := FUCXPSettings.Font; + DrawTheText(FMenuItem, txt, ShortCutToText(FMenuItem.ShortCut), + ACanvas, TextRect, + Selected, FMenuItem.Enabled, FMenuItem.Default, + FTopMenu, FMenu.IsRightToLeft, FFontSettings, TextFormat); + FUCXPSettings.Font := FFontSettings; + end + else + begin + if FMenu.IsRightToLeft then + begin + X1 := TextRect.Left; + X2 := TextRect.Right - 7; + end + else + begin + X1 := TextRect.Left + 7; + X2 := TextRect.Right; + end; + + ACanvas.Pen.Color := FFSeparatorColor; + ACanvas.MoveTo(X1, + TextRect.Top + + Round((TextRect.Bottom - TextRect.Top) / 2)); + ACanvas.LineTo(X2, + TextRect.Top + + Round((TextRect.Bottom - TextRect.Top) / 2)) + end; + + // +jt + BitBlt(origcanvas.Handle,origrect.Left,origrect.Top,buff.Width,buff.Height,ACanvas.Handle,0,0,SRCCOPY); + finally + B.free; + buff.free; + ACanvas := OrigCanvas; + ARect:=origrect; + end; // +jt + if not (csDesigning in ComponentState) then + begin + if (FUCXPSettings.FlatMenu) and (not FTopMenu) then + begin + hDcM := ACanvas.Handle; + hWndM := WindowFromDC(hDcM); +// +jt + if (hWndM=0) and (Application.Handle<>0) then + begin + if not PeekMessage(msg,Application.Handle,WM_DRAWMENUBORDER,WM_DRAWMENUBORDER2,PM_NOREMOVE) then + PostMessage(Application.Handle,WM_DRAWMENUBORDER,0,Integer(FMenuItem)); + end + else + if hWndM <> FForm.Handle then + begin + if not PeekMessage(msg,Application.Handle,WM_DRAWMENUBORDER,WM_DRAWMENUBORDER2,PM_NOREMOVE) then + PostMessage(Application.Handle,WM_DRAWMENUBORDER2,integer(FMenu.IsRightToLeft),Integer(hWndM)); + end; + end; + end; + +//----- + +end; + +{$IFDEF VER5U} +procedure TUCXPStyle.ToolBarDrawButton(Sender: TToolBar; + Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean); + +var + ACanvas: TCanvas; + + ARect, HoldRect: TRect; + B: TBitmap; + HasBitmap: boolean; + {Sylvain ...} + HasHotBitMap : Boolean; + HasDisBitMap : Boolean; + ImglstHand : THandle; + CanDraw : Boolean; + {... Sylvain} + BitmapWidth: integer; + TextFormat: integer; + XButton: TToolButton; + HasBorder: boolean; + HasBkg: boolean; + IsTransparent: boolean; + FBSelectColor: TColor; + FFontSettings: TFont; {fduenas} + procedure DrawBorder; + var + BRect, WRect: TRect; + procedure DrawRect; + begin + ACanvas.Pen.color := FFSelectBorderColor; + ACanvas.MoveTo(WRect.Left, WRect.Top); + ACanvas.LineTo(WRect.Right, WRect.Top); + ACanvas.LineTo(WRect.Right, WRect.Bottom); + ACanvas.LineTo(WRect.Left, WRect.Bottom); + ACanvas.LineTo(WRect.Left, WRect.Top); + end; + + begin + BRect := HoldRect; + Dec(BRect.Bottom, 1); + Inc(BRect.Top, 1); + Dec(BRect.Right, 1); + + WRect := BRect; + if Button.Style = tbsDropDown then + begin + Dec(WRect.Right, 13); + DrawRect; + + WRect := BRect; + Inc(WRect.Left, WRect.Right - WRect.Left - 13); + DrawRect; + end + else + begin + + DrawRect; + end; + end; + +begin + + B := nil; + + {Added By Sylvain ...} + HasHotBitmap := (Sender.HotImages <> nil) and + (Button.ImageIndex <> -1) and + (Button.ImageIndex <= Sender.HotImages.Count - 1); + + + HasDisBitmap := (Sender.DisabledImages <> nil) and + (Button.ImageIndex <> -1) and + (Button.ImageIndex <= Sender.DisabledImages.Count - 1); + {...Sylvain} + + HasBitmap := (Sender.Images <> nil) and + (Button.ImageIndex <> -1) and + (Button.ImageIndex <= Sender.Images.Count - 1); + + + IsTransparent := Sender.Transparent; + + ACanvas := Sender.Canvas; + + //SetGlobalColor(ACanvas); + if (FUCXPSettings.ColorsChanged) then SetGlobalColor(ACanvas); // +jt + + if (Is16Bit) and (not FUCXPSettings.UseSystemColors) then + FBSelectColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 68) + else + FBSelectColor := FFSelectColor; + + + HoldRect := Button.BoundsRect; + + ARect := HoldRect; + + if Is16Bit then + ACanvas.brush.color := NewColor(ACanvas, Sender.Color, 16) + else + ACanvas.brush.color := Sender.Color; + + if not IsTransparent then + ACanvas.FillRect(ARect); + + HasBorder := false; + HasBkg := false; + + if (cdsHot in State) then + begin + if (cdsChecked in State) or (Button.Down) or (cdsSelected in State) then + ACanvas.Brush.Color := FCheckedAreaSelectColor + else + ACanvas.brush.color := FBSelectColor; + HasBorder := true; + HasBkg := true; + end; + + if ((cdsChecked in State) and not (cdsHot in State)) then + begin + ACanvas.Brush.Color := FCheckedAreaColor; + HasBorder := true; + HasBkg := true; + end; + + if (cdsIndeterminate in State) and not (cdsHot in State) then + begin + ACanvas.Brush.Color := FBSelectColor; + HasBkg := true; + end; + + + if (Button.MenuItem <> nil) and (State = []) then + begin + ACanvas.brush.color := Sender.Color; + if not IsTransparent then + HasBkg := true; + end; + + + Inc(ARect.Top, 1); + + + + if HasBkg then + ACanvas.FillRect(ARect); + + if HasBorder then + DrawBorder; + + + if ((Button.MenuItem <> nil) or (Button.DropdownMenu <> nil)) + and (cdsSelected in State) then + begin + DrawTopMenuItem(Button, ACanvas, ARect, Sender.Color ,false); + DefaultDraw := false; + end; + + ARect := HoldRect; + DefaultDraw := false; + + + if Button.Style = tbsDropDown then + begin + ACanvas.Pen.Color := clBlack; + DrawArrow(ACanvas, (ARect.Right - 14) + ((14 - 5) div 2), + ARect.Top + ((ARect.Bottom - ARect.Top - 3) div 2) + 1); + end; + + BitmapWidth := 0; +{ Rem by Sylvain ... + if HasBitmap then + begin +... Sylvain} + try + B := TBitmap.Create; + CanDraw := False; + ImglstHand:=0; + if (cdsHot in State) AND HasHotBitmap then + begin + B.Width := Sender.HotImages.Width; + B.Height := Sender.HotImages.Height; + ImglstHand := Sender.HotImages.Handle; + CanDraw := True; + end + else if (cdsDisabled in State) and HasDisBitmap then + begin + B.Width := Sender.DisabledImages.Width; + B.Height := Sender.DisabledImages.Height; + ImglstHand := Sender.DisabledImages.Handle; + CanDraw := True; + end + else if HasBitMap then + begin + B.Width := Sender.Images.Width; + B.Height := Sender.Images.Height; + ImglstHand := Sender.Images.Handle; + CanDraw := True; + end; + if CanDraw then + begin {CanDraw} + // B.Canvas.Brush.Color := TransparentColor; // ACanvas.Brush.Color; // +jt + B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher" + B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height)); + ImageList_DrawEx(ImglstHand, Button.ImageIndex, + B.Canvas.Handle, 0, 0, 0, 0, clNone, clNone, ILD_Transparent); + + BitmapWidth := b.Width; + + if Button.Style = tbsDropDown then + Dec(ARect.Right, 12); + + + if TToolBar(Button.Parent).List then + begin + + if Button.BiDiMode = bdRightToLeft then + begin + Dec(ARect.Right, 3); + ARect.Left := ARect.Right - BitmapWidth; + + end + else + begin + Inc(ARect.Left, 3); + ARect.Right := ARect.Left + BitmapWidth + end + + + end + else + ARect.Left := Round(ARect.Left + (ARect.Right - ARect.Left - B.Width)/2); + + inc(ARect.Top, 2); + ARect.Bottom := ARect.Top + B.Height + 6; + + DrawIcon(Button, ACanvas, B, ARect, (cdsHot in State), + (cdsSelected in State), Button.Enabled, (cdsChecked in State), false, + false); + + end; {CanDraw} + finally + B.Free; + end; + ARect := HoldRect; + DefaultDraw := false; +{rem by sylvain ... + end; +...Sylvain} +//----------- + + if Sender.ShowCaptions then + begin + + if Button.Style = tbsDropDown then + Dec(ARect.Right, 12); + + + if not TToolBar(Button.Parent).List then + begin + TextFormat := DT_Center; + + ARect.Top := ARect.Bottom - ACanvas.TextHeight(Button.Caption) - 6; + end + else + begin + TextFormat := DT_VCENTER; + if Button.BiDiMode = bdRightToLeft then + begin + TextFormat := TextFormat + DT_Right; + Dec(ARect.Right, BitmapWidth + 7); + end + else + begin + if BitmapWidth > 0 then //"Dan Downs" + if Sender.List then //Michaël Moreno + Inc(ARect.Left, BitmapWidth + 6) + else + Inc(ARect.Left, BitmapWidth); + end + + end; + + if (Button.MenuItem <> nil) then + begin + TextFormat := DT_Center; + //Inc(ARect.Left, 1); + end; + + if Button.BiDiMode = bdRightToLeft then + TextFormat := TextFormat + DT_RTLREADING; + + if Button.Down and not Button.Enabled then //"felix" 23/5 + InflateRect(ARect, -1, -1); + + {alexs alexs75@hotbox.ru} + ARect.Top := ARect.Top + ((ARect.Bottom - ARect.Top) - ACanvas.TextHeight('W')) div 2; + FFontSettings := FUCXPSettings.Font; + DrawTheText(Button, Button.Caption, '', + ACanvas, ARect, + (cdsSelected in State), Button.Enabled, false, + (Button.MenuItem <> nil), + (Button.BidiMode = bdRightToLeft), FFontSettings, TextFormat); + FUCXPSettings.Font := FFontSettings; + ARect := HoldRect; + DefaultDraw := false; + end; + + + if Button.Index > 0 then + begin + XButton := {TToolBar(Button.Parent)}Sender.Buttons[Button.Index - 1]; + if (XButton.Style = tbsDivider) or (XButton.Style = tbsSeparator) then + begin + ARect := XButton.BoundsRect; + if Is16Bit then + ACanvas.brush.color := NewColor(ACanvas, Sender.Color, 16) + else + ACanvas.brush.color := Sender.Color; + + if not IsTransparent then + ACanvas.FillRect(ARect); + // if (XButton.Style = tbsDivider) then // Can't get it. + if XButton.Tag > 0 then + begin + Inc(ARect.Top, 2); + Dec(ARect.Bottom, 1); + + ACanvas.Pen.color := GetShadeColor(ACanvas,Sender.Color,30); + ARect.Left := ARect.Left + (ARect.Right - ARect.Left) div 2; + ACanvas.MoveTo(ARect.Left, ARect.Top); + ACanvas.LineTo(ARect.Left, ARect.Bottom); + + end; + ARect := Button.BoundsRect; + DefaultDraw := false; + end; + + end; + + {if Button.MenuItem <> nil then + if (xcMainMenu in UCXPControls) then + ActivateMenuItem(Button.MenuItem);} +end; +{$ENDIF} + +// Controlbar Paint. Added by Michiel van Oudheusden (27 sep 2001) +// Paints the bands of a controlbar like the office XP style +procedure TUCXPStyle.ControlBarPaint(Sender: TObject; Control: TControl; + Canvas: TCanvas; var ARect: TRect; var Options: TBandPaintOptions); +var + i: Integer; + intInc: integer; +begin + + if(FUCXPSettings.ColorsChanged) then SetGlobalColor(Canvas); // +jt + // No frame and grabber drawing. We do it ourselfes + Options := []; + + // First background + + if Is16Bit then + Canvas.brush.color := NewColor(Canvas, TControlBar(Sender).Color , 6) + else + Canvas.brush.color := TControlBar(Sender).Color; + + Canvas.FillRect(ARect); + + intInc := 30; + for i := (ARect.Top + 5) to (ARect.Bottom - 5)do + begin + Canvas.Pen.Color := GetShadeColor(Canvas, TControlBar(Sender).Color, intInc); + if i mod 2 = 0 then + begin + Canvas.MoveTo(ARect.Left + 3, i); + Canvas.LineTo(ARect.Left + 6, i); + Inc(intInc, 7); + end; + end; + +end; + +procedure TUCXPStyle.SetGlobalColor(ACanvas: TCanvas); +begin +//----- + FUCXPSettings.ColorsChanged:=false; // +jt + + if GetDeviceCaps(ACanvas.Handle, BITSPIXEL) < 16 then + Is16Bit := false + else + Is16Bit := true; + + + FDimParentColor := 16; + FDimParentColorSelect := 40; + + FFColor := FUCXPSettings.Color; + FFIconBackColor := FUCXPSettings.IconBackColor; + + if Is16Bit then + begin + if FUCXPSettings.UseDimColor then + begin + FFSelectColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 68); + FCheckedAreaColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 80); + FCheckedAreaSelectColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 50); + end + else + begin + FFSelectColor := FUCXPSettings.SelectColor; + FCheckedAreaColor := FUCXPSettings.SelectColor; + FCheckedAreaSelectColor := FUCXPSettings.SelectColor; + end; + + FMenuBorderColor := GetShadeColor(ACanvas, clBtnFace, 90); + FMenuShadowColor := GetShadeColor(ACanvas, clBtnFace, 76); + end + else + begin + FFSelectColor := FUCXPSettings.SelectColor; + FCheckedAreaColor := clWhite; + FCheckedAreaSelectColor := clSilver; + FMenuBorderColor := clBtnShadow; + FMenuShadowColor := clBtnShadow; + end; + + FFSelectBorderColor := FUCXPSettings.SelectBorderColor; + FFSelectFontColor := FUCXPSettings.SelectFontColor; + FFMenuBarColor := FUCXPSettings.MenuBarColor; + FFDisabledColor := FUCXPSettings.DisabledColor; + FFCheckedColor := FUCXPSettings.CheckedColor; + FFSeparatorColor := FUCXPSettings.SeparatorColor; + + + + if FUCXPSettings.UseSystemColors then + begin +// GetSystemMenuFont(FUCXPSettings.Font); + FFSelectFontColor := FUCXPSettings.Font.Color; + if not Is16Bit then + begin + FFColor := clWhite; + FFIconBackColor := clBtnFace; + FFSelectColor := clWhite; + FFSelectBorderColor := clHighlight; + FFMenuBarColor := FFIconBackColor; + FFDisabledColor := clBtnShadow; + FFCheckedColor := clHighlight; + FFSeparatorColor := clBtnShadow; + FCheckedAreaColor := clWhite; + FCheckedAreaSelectColor := clWhite; + + end + else + begin + FFColor := NewColor(ACanvas, clBtnFace, 86); + FFIconBackColor := NewColor(ACanvas, clBtnFace, 16); + FFSelectColor := NewColor(ACanvas, clHighlight, 68); + FFSelectBorderColor := clHighlight; + FFMenuBarColor := clBtnFace; + + FFDisabledColor := NewColor(ACanvas, clBtnShadow, 10); + FFSeparatorColor := NewColor(ACanvas, clBtnShadow, 25); + FFCheckedColor := clHighlight; + FCheckedAreaColor := NewColor(ACanvas, clHighlight, 80); + FCheckedAreaSelectColor := NewColor(ACanvas, clHighlight, 50); + + end; + end; + +end; + +procedure TUCXPStyle.DrawTopMenuItem(Sender: TObject; ACanvas: TCanvas; + ARect: TRect; BckColor:Tcolor; IsRightToLeft: boolean); +var + X1, X2: integer; + DefColor, HoldColor: TColor; +begin + X1 := ARect.Left; + X2 := ARect.Right; + + + ACanvas.brush.Style := bsSolid; + ACanvas.brush.color := FFSelectColor; + + ACanvas.FillRect(ARect); + ACanvas.Pen.Color := FFSelectBorderColor; + + if (not IsRightToLeft) and (Is16Bit) and (Sender is TMenuItem) then + begin + ACanvas.MoveTo(X1, ARect.Bottom - 1); + ACanvas.LineTo(X1, ARect.Top); + ACanvas.LineTo(X2 - 8, ARect.Top); + ACanvas.LineTo(X2 - 8, ARect.Bottom); +// ACanvas.LineTo(X1, ARect.Bottom); + + DefColor := FFMenuBarColor; + + + HoldColor := GetShadeColor(ACanvas, DefColor, 10); + ACanvas.Brush.Style := bsSolid; + ACanvas.Brush.Color := HoldColor; + ACanvas.Pen.Color := HoldColor; + + ACanvas.FillRect(Rect(X2 - 7, ARect.Top, X2, ARect.Bottom)); + + HoldColor := GetShadeColor(ACanvas, DefColor, 30); + ACanvas.Brush.Color := HoldColor; + ACanvas.Pen.Color := HoldColor; + ACanvas.FillRect(Rect(X2 - 7, ARect.Top + 3, X2 - 2, ARect.Bottom)); + + HoldColor := GetShadeColor(ACanvas, DefColor, 40 + 20); + ACanvas.Brush.Color := HoldColor; + ACanvas.Pen.Color := HoldColor; + ACanvas.FillRect(Rect(X2 - 7, ARect.Top + 5, X2 - 3, ARect.Bottom)); + + HoldColor := GetShadeColor(ACanvas, DefColor, 60 + 40); + ACanvas.Brush.Color := HoldColor; + ACanvas.Pen.Color := HoldColor; + ACanvas.FillRect(Rect(X2 - 7, ARect.Top + 6, X2 - 5, ARect.Bottom)); + + //--- + + ACanvas.Pen.Color := DefColor; + ACanvas.MoveTo(X2 - 5, ARect.Top + 1); + ACanvas.LineTo(X2 - 1, ARect.Top + 1); + ACanvas.LineTo(X2 - 1, ARect.Top + 6); + + ACanvas.MoveTo(X2 - 3, ARect.Top + 2); + ACanvas.LineTo(X2 - 2, ARect.Top + 2); + ACanvas.LineTo(X2 - 2, ARect.Top + 3); + ACanvas.LineTo(X2 - 3, ARect.Top + 3); + + + + ACanvas.Pen.Color := GetShadeColor(ACanvas, DefColor, 10); + ACanvas.MoveTo(X2 - 6, ARect.Top + 3); + ACanvas.LineTo(X2 - 3, ARect.Top + 3); + ACanvas.LineTo(X2 - 3, ARect.Top + 6); + ACanvas.LineTo(X2 - 4, ARect.Top + 6); + ACanvas.LineTo(X2 - 4, ARect.Top + 3); + + ACanvas.Pen.Color := GetShadeColor(ACanvas, DefColor, 30); + ACanvas.MoveTo(X2 - 5, ARect.Top + 5); + ACanvas.LineTo(X2 - 4, ARect.Top + 5); + ACanvas.LineTo(X2 - 4, ARect.Top + 9); + + ACanvas.Pen.Color := GetShadeColor(ACanvas, DefColor, 40); + ACanvas.MoveTo(X2 - 6, ARect.Top + 5); + ACanvas.LineTo(X2 - 6, ARect.Top + 7); + + end + else + begin + + ACanvas.Pen.Color := FFSelectBorderColor; + ACanvas.Brush.Color := GetShadeColor(ACanvas, BckColor, 70); + + ACanvas.MoveTo(X1, ARect.Bottom - 1); + ACanvas.LineTo(X1, ARect.Top); + ACanvas.LineTo(X2 - 3, ARect.Top); + ACanvas.LineTo(X2 - 3, ARect.Bottom); + + + ACanvas.Pen.Color := ACanvas.Brush.Color; + ACanvas.FillRect(Rect(X2 - 2, ARect.Top + 2, X2, ARect.Bottom)); + + ACanvas.Brush.Color := BckColor; + ACanvas.FillRect(Rect(X2 - 2, ARect.Top , X2, ARect.Top + 2)); + + + end; + +end; + + +procedure TUCXPStyle.DrawCheckedItem(FMenuItem: TMenuItem; Selected, Enabled, + HasImgLstBitmap: boolean; ACanvas: TCanvas; CheckedRect: TRect); +var + X1, X2: integer; +begin + if FMenuItem.RadioItem then + begin + if FMenuItem.Checked then + begin + if Enabled then + begin + ACanvas.Pen.color := FFSelectBorderColor; + if selected then + ACanvas.Brush.Color := FCheckedAreaSelectColor + else + ACanvas.Brush.Color := FCheckedAreaColor; + end + else + ACanvas.Pen.color := FFDisabledColor; + + ACanvas.Brush.Style := bsSolid; + if HasImgLstBitmap then + begin + ACanvas.RoundRect(CheckedRect.Left, CheckedRect.Top, + CheckedRect.Right, CheckedRect.Bottom, + 6, 6); + end + else + begin + ACanvas.Ellipse(CheckedRect.Left, CheckedRect.Top, + CheckedRect.Right, CheckedRect.Bottom); +// +jt + InflateRect(CheckedRect, -2, -2); + ACanvas.Brush.color := ACanvas.Pen.Color; + ACanvas.Ellipse(CheckedRect.Left, CheckedRect.Top, + CheckedRect.Right, CheckedRect.Bottom); // +jt + end; + end; + end + else + begin + if (FMenuItem.Checked) then + if (not HasImgLstBitmap) then + begin + if Enabled then + begin + ACanvas.Pen.color := FFCheckedColor; + if selected then + ACanvas.Brush.Color := FCheckedAreaSelectColor + else + ACanvas.Brush.Color := FCheckedAreaColor; ; + end + else + ACanvas.Pen.color := FFDisabledColor; + + ACanvas.Brush.Style := bsSolid; + ACanvas.Rectangle(CheckedRect.Left, CheckedRect.Top, + CheckedRect.Right, CheckedRect.Bottom); + if Enabled then + ACanvas.Pen.color := clBlack + else + ACanvas.Pen.color := FFDisabledColor; + x1 := CheckedRect.Left + 1; + x2 := CheckedRect.Top + 5; + ACanvas.MoveTo(x1, x2); + + x1 := CheckedRect.Left + 4; + x2 := CheckedRect.Bottom - 2; + ACanvas.LineTo(x1, x2); + //-- + x1 := CheckedRect.Left + 2; + x2 := CheckedRect.Top + 5; + ACanvas.MoveTo(x1, x2); + + x1 := CheckedRect.Left + 4; + x2 := CheckedRect.Bottom - 3; + ACanvas.LineTo(x1, x2); + //-- + x1 := CheckedRect.Left + 2; + x2 := CheckedRect.Top + 4; + ACanvas.MoveTo(x1, x2); + + x1 := CheckedRect.Left + 5; + x2 := CheckedRect.Bottom - 3; + ACanvas.LineTo(x1, x2); + //----------------- + + x1 := CheckedRect.Left + 4; + x2 := CheckedRect.Bottom - 3; + ACanvas.MoveTo(x1, x2); + + x1 := CheckedRect.Right + 2; + x2 := CheckedRect.Top - 1; + ACanvas.LineTo(x1, x2); + //-- + x1 := CheckedRect.Left + 4; + x2 := CheckedRect.Bottom - 2; + ACanvas.MoveTo(x1, x2); + + x1 := CheckedRect.Right - 2; + x2 := CheckedRect.Top + 3; + ACanvas.LineTo(x1, x2); + + end + else + begin + + + if Enabled then + begin + ACanvas.Pen.color := FFSelectBorderColor; + if selected then + ACanvas.Brush.Color := FCheckedAreaSelectColor + else + ACanvas.Brush.Color := FCheckedAreaColor; ; + end + else + ACanvas.Pen.color := FFDisabledColor; + + ACanvas.Brush.Style := bsSolid; + ACanvas.Rectangle(CheckedRect.Left, CheckedRect.Top, + CheckedRect.Right, CheckedRect.Bottom); + end; + end; + +end; + +procedure TUCXPStyle.DrawTheText(Sender: TObject; txt, ShortCuttext: string; + ACanvas: TCanvas; TextRect: TRect; + Selected, Enabled, Default, TopMenu, IsRightToLeft: boolean; + var TxtFont: TFont; TextFormat: integer); +var + DefColor: TColor; + B: TBitmap; + BRect: TRect; +begin + TextFormat := TextFormat + DT_EXPANDTABS; + DefColor := TxtFont.Color; + + ACanvas.Font.Assign (TxtFont); + + if Selected then + DefColor := FFSelectFontColor; + + If not Enabled then + begin + DefColor := FFDisabledColor; + + if (Sender is TToolButton) then + begin + TextRect.Top := TextRect.Top + + ((TextRect.Bottom - TextRect.Top) - ACanvas.TextHeight('W')) div 2; + B := TBitmap.Create; + try + B.Width := TextRect.Right - TextRect.Left; + B.Height := TextRect.Bottom - TextRect.Top; + BRect := Rect(0,0,B.Width, B.Height); + + + B.Canvas.Brush.Color := ACanvas.Brush.Color; + B.Canvas.FillRect (BRect); + // B.Canvas.Font := FUCXPSettings.Font; //felix added for resolving font problems in Win98 + //27.08 + B.Canvas.Font.color := DefColor; + + DrawtextEx(B.Canvas.Handle, + PChar(txt), + Length(txt), + BRect, TextFormat + DT_VCENTER, nil); + ACanvas.CopyRect(TextRect, B.Canvas, BRect); + finally + B.Free; + end; + exit; + end; + + end; + + if (TopMenu and Selected) then + if FUCXPSettings.UseSystemColors then + DefColor := TopMenuFontColor(ACanvas, FFIconBackColor); + + ACanvas.Font.color := DefColor; // will not affect Buttons + + SetBkMode(ACanvas.Handle, TRANSPARENT); + + + if Default and Enabled then + begin + + Inc(TextRect.Left, 1); + ACanvas.Font.color := GetShadeColor(ACanvas, + ACanvas.Pixels[TextRect.Left, TextRect.Top], 30); + DrawtextEx(ACanvas.Handle, + PChar(txt), + Length(txt), + TextRect, TextFormat, nil); + Dec(TextRect.Left, 1); + + + Inc(TextRect.Top, 2); + Inc(TextRect.Left, 1); + Inc(TextRect.Right, 1); + + + ACanvas.Font.color := GetShadeColor(ACanvas, + ACanvas.Pixels[TextRect.Left, TextRect.Top], 30); + DrawtextEx(ACanvas.Handle, + PChar(txt), + Length(txt), + TextRect, TextFormat, nil); + + + Dec(TextRect.Top, 1); + Dec(TextRect.Left, 1); + Dec(TextRect.Right, 1); + + ACanvas.Font.color := GetShadeColor(ACanvas, + ACanvas.Pixels[TextRect.Left, TextRect.Top], 40); + DrawtextEx(ACanvas.Handle, + PChar(txt), + Length(txt), + TextRect, TextFormat, nil); + + + Inc(TextRect.Left, 1); + Inc(TextRect.Right, 1); + + ACanvas.Font.color := GetShadeColor(ACanvas, + ACanvas.Pixels[TextRect.Left, TextRect.Top], 60); + DrawtextEx(ACanvas.Handle, + PChar(txt), + Length(txt), + TextRect, TextFormat, nil); + + Dec(TextRect.Left, 1); + Dec(TextRect.Right, 1); + Dec(TextRect.Top, 1); + + ACanvas.Font.color := DefColor; + end; + + DrawtextEx(ACanvas.Handle, + PChar(txt), + Length(txt), + TextRect, TextFormat, nil); + + + txt := ShortCutText + ' '; + { + if not Is16Bit then + ACanvas.Font.color := DefColor + else + ACanvas.Font.color := GetShadeColor(ACanvas, DefColor, -40); + } + + + if IsRightToLeft then + begin + Inc(TextRect.Left, 10); + TextFormat := DT_LEFT + end + else + begin + Dec(TextRect.Right, 10); + TextFormat := DT_RIGHT; + end; + + + DrawtextEx(ACanvas.Handle, + PChar(txt), + Length(txt), + TextRect, TextFormat, nil); + +end; + +procedure TUCXPStyle.DrawIcon(Sender: TObject; ACanvas: TCanvas; B: TBitmap; + IconRect: Trect; Hot, Selected, Enabled, Checked, FTopMenu, + IsRightToLeft: boolean); +var + DefColor: TColor; + X, Y: integer; +begin + + if (B <> nil) and (B.Width > 0) then + begin + X := IconRect.Left; + Y := IconRect.Top + 1; + + if (Sender is TMenuItem) then + begin + inc(Y, 2); + if FUCXPSettings.IconWidth > B.Width then + X := X + ((FUCXPSettings.IconWidth - B.Width) div 2) - 1 + else + begin + if IsRightToLeft then + X := IconRect.Right - b.Width - 2 + else + X := IconRect.Left + 2; + end; + end; + + if FTopMenu then + begin + if IsRightToLeft then + X := IconRect.Right - b.Width - 5 + else + X := IconRect.Left + 1; + end; + + if (Hot) and (FTopMenu) and (Enabled) then + if not Selected then + begin + dec(X, 1); + dec(Y, 2); + end; + + if (Hot) and (not FTopMenu) and (Enabled) and (not Checked) then + if not Selected then + begin + dec(X, 1); + dec(Y, 1); + end; + + if (not Hot) and (Enabled) and (not Checked) then + if Is16Bit then + DimBitmap(B, FUCXPSettings.DimLevel{30}); + + + if not Enabled then + begin + GrayBitmap(B, FUCXPSettings.GrayLevel ); + DimBitmap(B, 40); + end; + + if (Hot) and (Enabled) and (not Checked) then + begin + if (Is16Bit) and (not FUCXPSettings.UseSystemColors) and (Sender is TToolButton) then + DefColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 68) + else + DefColor := FFSelectColor; + + DefColor := GetShadeColor(ACanvas, DefColor, 50); + DrawBitmapShadow(B, ACanvas, X + 2, Y + 2, DefColor); + end; + + B.Transparent := true; + ACanvas.Draw(X, Y, B); + end; + +end; + + +function TUCXPStyle.TopMenuFontColor(ACanvas: TCanvas; Color: TColor): TColor; +var + r, g, b, avg: integer; +begin + + Color := ColorToRGB(Color); + r := Color and $000000FF; + g := (Color and $0000FF00) shr 8; + b := (Color and $00FF0000) shr 16; + + Avg := (r + b) div 2; + + if (Avg > 150) or (g > 200) then + Result := FUCXPSettings.Font.Color + else + Result := NewColor(ACanvas, Color, 90); + +end; + +procedure TUCXPStyle.SetDisableSubclassing(const Value: boolean); +begin + if Value = FDisableSubclassing then Exit; + FDisableSubClassing := Value; + if UCXPStyleManager.ActiveXPStyle = Self then + UCXPStyleManager.UpdateActiveXPStyle(Self) + else + if (UCXPStyleManager.ActiveXPStyle = nil) and not(FDisableSubclassing) then + UCXPStyleManager.UpdateActiveXPStyle(nil); +end; + + +procedure TUCXPStyle.SetActive(const Value: boolean); +begin + //if Value = FActive then exit; + + FActive := Value; + if FActive then + InitItems(FForm, true, true) + else + InitItems(FForm, false, true); + + if FForm.Handle <> 0 then + Windows.DrawMenuBar(FForm.Handle); +end; + +procedure TUCXPStyle.SetForm(const Value: TScrollingWinControl); +var + Hold: boolean; +begin + if Value <> FForm then + begin + Hold := Active; + Active := false; + FForm := Value; + if Hold then + Active := True; + end; +end; + +{moved to UCXPSettings + +procedure TUCXPStyle.SetFont(const Value: TFont); +begin + FFont.Assign(Value); + Windows.DrawMenuBar(FForm.Handle); + +end; + +procedure TUCXPStyle.SetColor(const Value: TColor); +begin + FColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetIconBackColor(const Value: TColor); +begin + FIconBackColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetMenuBarColor(const Value: TColor); +begin + FMenuBarColor := Value; + FColorsChanged := true; // +jt + Windows.DrawMenuBar(FForm.Handle); +end; + +procedure TUCXPStyle.SetCheckedColor(const Value: TColor); +begin + FCheckedColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetSeparatorColor(const Value: TColor); +begin + FSeparatorColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetSelectBorderColor(const Value: TColor); +begin + FSelectBorderColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetSelectColor(const Value: TColor); +begin + FSelectColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetDisabledColor(const Value: TColor); +begin + FDisabledColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetSelectFontColor(const Value: TColor); +begin + FSelectFontColor := Value; + FColorsChanged := true; // +jt +end; + +procedure TUCXPStyle.SetIconWidth(const Value: integer); +begin + FIconWidth := Value; +end; + +procedure TUCXPStyle.SetDrawSelect(const Value: boolean); +begin + FDrawSelect := Value; +end; + + + +procedure TUCXPStyle.SetOverrideOwnerDraw(const Value: boolean); +begin + FOverrideOwnerDraw := Value; + if FActive then + Active := True; +end; + + +procedure TUCXPStyle.SetUseSystemColors(const Value: boolean); +begin + FUseSystemColors := Value; + Windows.DrawMenuBar(FForm.Handle); +end; + +procedure TUCXPStyle.SetGradient(const Value: boolean); +begin + FGradient := Value; +end; + +procedure TUCXPStyle.SetFlatMenu(const Value: boolean); +begin + FFlatMenu := Value; +end; + +procedure TUCXPStyle.SetUCXPContainers(const Value: TUCXPContainers); +begin + if Value <> FXPContainers then + begin + if FActive then + begin + FActive := false; + InitItems(FForm, false, true); + FActive := true; + FXPContainers := Value; + InitItems(FForm, true, true); + end; + end; + FXPContainers := Value; + +end; + +procedure TUCXPStyle.SetUCXPControls(const Value: TUCXPControls); +begin + if Value <> FXPControls then + begin + if FActive then + begin + FActive := false; + InitItems(FForm, false, true); + FActive := true; + FXPControls := Value; + InitItems(FForm, true, true); + end; + end; + FXPControls := Value; + +end; + +procedure TUCXPStyle.SetDrawMenuBar(const Value: boolean); +begin + FDrawMenuBar := Value; +end; + +procedure TUCXPStyle.SetUseDimColor(const Value: boolean); +begin + FUseDimColor := Value; +end; +}{END moved to UCXPSettings} + +procedure GetSystemMenuFont(Font: TFont); +var + FNonCLientMetrics: TNonCLientMetrics; +begin + FNonCLientMetrics.cbSize := Sizeof(TNonCLientMetrics); + if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @FNonCLientMetrics,0) then + begin + Font.Handle := CreateFontIndirect(FNonCLientMetrics.lfMenuFont); + Font.Color := clMenuText; + end; +end; + +procedure TUCXPStyle.SetUCSettings(const Value: TUCSettings); +begin + FUCSettings := Value; + if Value <> nil then Value.FreeNotification(self); //changed by fduenas +end; + +procedure TUCXPStyle.DrawGradient(ACanvas: TCanvas; ARect: TRect; + IsRightToLeft: boolean); +var + i: integer; + v: integer; + FRect: TRect; +begin + + fRect := ARect; + V := 0; + if IsRightToLeft then + begin + fRect.Left := fRect.Right - 1; + for i := ARect.Right Downto ARect.Left do + begin + if (fRect.Left < ARect.Right) + and (fRect.Left > ARect.Right - FUCXPSettings.IconWidth + 5) then + inc(v, 3) + else + inc(v, 1); + + if v > 96 then v := 96; + ACanvas.Brush.Color := NewColor(ACanvas, FFIconBackColor, v); + ACanvas.FillRect(fRect); + + fRect.Left := fRect.Left - 1; + fRect.Right := fRect.Left - 1; + end; + end + else + begin + fRect.Right := fRect.Left + 1; + for i := ARect.Left to ARect.Right do + begin + if (fRect.Left > ARect.Left) + and (fRect.Left < ARect.Left + FUCXPSettings.IconWidth + 5) then + inc(v, 3) + else + inc(v, 1); + + if v > 96 then v := 96; + ACanvas.Brush.Color := NewColor(ACanvas, FFIconBackColor, v); + ACanvas.FillRect(fRect); + + fRect.Left := fRect.Left + 1; + fRect.Right := fRect.Left + 1; + end; + end; +end; + +function MenuWindowProc(hwnd: HWND; uMsg: integer; WParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; +var + oldproc: integer; + r: TRect; + pt: TPoint; begin + if(uMsg=WM_ERASEBKGND) then + begin + Result:=1; + exit; +end; + if((uMsg=WM_SHOWWINDOW) and (not Boolean(WParam))) or (uMsg=WM_CLOSE) or (uMsg=WM_DESTROY) then + begin + SetWindowRgn(hwnd, 0,false); + oldproc:=GetWindowLong(hWnd,GWL_USERDATA); + SetWindowLong(hWnd,GWL_WNDPROC,oldproc); + SetWindowLong(hWnd,GWL_USERDATA,0); + Result:=CallWindowProc(Pointer(oldproc), hwnd, uMsg, wParam, lParam); + GetWindowRect(hWnd, r); + pt.x:=r.Right+2; + pt.y:=r.Top+2; + hWnd :=WindowFromPoint(pt); + if GetWindowLong(hWnd,GWL_WNDPROC)<>integer(@MenuWindowProc) then + begin + pt.x:=r.Right+2; + pt.y:=r.Bottom-2; + hWnd :=WindowFromPoint(pt); + if GetWindowLong(hWnd,GWL_WNDPROC)<>integer(@MenuWindowProc) then exit; + end; + InvalidateRect(hwnd,nil,false); + end + else Result:=CallWindowProc(Pointer(GetWindowLong(hWnd,GWL_USERDATA)), hwnd, uMsg, wParam, lParam); end; +procedure TUCXPStyle.DrawWindowBorder(hWnd: HWND; IsRightToLeft: boolean); +var + WRect: TRect; + dCanvas: TCanvas; + wDC: HDC; // +jt + + regiontype: integer; // +jt + r1,r2,wr,region: HRGN; // +jt + rgnr: TRect; // +jt +begin + + + if (hWnd <= 0) or (FSettingWindowRng) then + begin + exit; + end; +// +jt + wDC := GetWindowDC(hWnd); //GetDesktopWindow + if wDC=0 then exit; // +jt + FSettingWindowRng :=true; // +jt + dCanvas := TCanvas.Create; + try + dCanvas.Handle := wDC; // +jt + GetWindowRect(hWnd, WRect); + // +jt + WRect.Right := WRect.Right-WRect.Left; + WRect.Bottom := WRect.Bottom-WRect.Top; + WRect.Top:=0; + WRect.Left:=0; + if GetWindowLong(hWnd,GWL_WNDPROC)<>integer(@MenuWindowProc) then + begin + SetWindowLong(hWnd,GWL_USERDATA,GetWindowLong(hWnd,GWL_WNDPROC)); + SetWindowLong(hWnd,GWL_WNDPROC,integer(@MenuWindowProc)); + end; + if not IsWXP then + begin + wr:= CreateRectRgn(0,0,0,0); + regiontype := GetWindowRgn(hWnd, wr); + GetRgnBox(wr,rgnr); + DeleteObject(wr); + if (regionType = ERROR) or (abs(rgnr.Right-WRect.Right)>5) or (abs(rgnr.Bottom-WRect.Bottom)>5) then + begin + region:= CreateRectRgn(0,0,0,0); + r1:=CreateRectRgn(WRect.Left,WRect.Top,WRect.Right-2,WRect.Bottom-2); + r2:=CreateRectRgn(WRect.Left+2,WRect.Top+2,WRect.Right,WRect.Bottom); + CombineRgn(region,r1,r2,RGN_OR); + DeleteObject(r1); + DeleteObject(r2); + SetWindowRgn(hWnd,region,true); + end; + // +jt + Dec(WRect.Right, 2); + Dec(WRect.Bottom, 2); + end; // +jt + dCanvas.Brush.Style := bsClear; + dCanvas.Pen.Color := FMenuBorderColor; + dCanvas.Rectangle(WRect.Left, WRect.Top, WRect.Right, WRect.Bottom); + if IsRightToLeft then + begin + dCanvas.Pen.Color := FFIconBackColor; + dCanvas.MoveTo(WRect.Right - 3, WRect.Top + 2); + dCanvas.LineTo(WRect.Right - 2, WRect.Bottom - 1); + end + else + begin + dCanvas.Pen.Color := FFIconBackColor; + dCanvas.Rectangle(WRect.Left + 1, WRect.Top + 2, + WRect.Left + 3, WRect.Bottom - 1); + end; +// +jt + StretchBlt(dCanvas.Handle,WRect.Left + 1,WRect.Top + 1,WRect.Right - WRect.Left-1,2, + dCanvas.Handle,WRect.Left + 1,WRect.Top + 3,WRect.Right - WRect.Left-1,1,SRCCOPY); + if IsWXP then + begin + StretchBlt(dCanvas.Handle,WRect.Left + 1,WRect.Bottom - 3,WRect.Right - WRect.Left-1,2, + dCanvas.Handle,WRect.Left + 1,WRect.Top + 3,WRect.Right - WRect.Left-1,1, SRCCOPY); + dCanvas.Pen.Color := FFColor; + dCanvas.Rectangle(WRect.Right - 3, WRect.Top+1, WRect.Right - 1, + WRect.Bottom-1); + end; // +jt + Inc(WRect.Right, 2); + Inc(WRect.Bottom, 2); + if not IsWXP then // +jt + begin // +jt + dCanvas.Pen.Color := FMenuShadowColor; + dCanvas.Rectangle(WRect.Left + 2, WRect.Bottom, WRect.Right, WRect.Bottom - 2); + dCanvas.Rectangle(WRect.Right - 2, WRect.Bottom, WRect.Right, WRect.Top + 2); + end; // +jt + + finally + ReleaseDC(hWnd, wDC); // +jt + dCanvas.Free; + FSettingWindowRng :=false; + end; +end; + +procedure TUCXPStyle.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + //added by fduenas + inherited Notification(AComponent, AOperation); //changed by fduenas + if AOperation = opRemove then + If AComponent = FUCSettings then + FUCSettings := nil; + + if not Assigned(UCXPStyleManager) then Exit; +// Pass the notification information to the UCXPStyleManager + if not(csDesigning in ComponentState) then + UCXPStyleManager.Notification(AComponent, AOperation); + + if not FActive then exit; + if not FAutoDetect then exit; + if (AOperation = opInsert) and + ((AComponent is TMenuItem) or (AComponent is TToolButton) or + (AComponent is TControlBar)) then + begin + if not (csDesigning in ComponentState) then + InitItem(AComponent, true, true); // Tom: This will process this new component + end; + +end; + + +function GetShadeColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor; +var + r, g, b: integer; + +begin + clr := ColorToRGB(clr); + r := Clr and $000000FF; + g := (Clr and $0000FF00) shr 8; + b := (Clr and $00FF0000) shr 16; + + r := (r - value); + if r < 0 then r := 0; + if r > 255 then r := 255; + + g := (g - value) + 2; + if g < 0 then g := 0; + if g > 255 then g := 255; + + b := (b - value); + if b < 0 then b := 0; + if b > 255 then b := 255; + + //Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b)); + Result := RGB(r, g, b); +end; + +function MergColor(Colors: Array of TColor): TColor; +var + r, g, b, i: integer; + clr: TColor; +begin + r := 0; g:= 0; b:= 0; + + for i := 0 to High(Colors) do + begin + + clr := ColorToRGB(Colors[i]); + r := r + (Clr and $000000FF) div High(Colors); + g := g + ((Clr and $0000FF00) shr 8) div High(Colors); + b := b + ((Clr and $00FF0000) shr 16) div High(Colors); + end; + + Result := RGB(r, g, b); + +end; +function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor; +var + r, g, b: integer; + +begin + if Value > 100 then Value := 100; + clr := ColorToRGB(clr); + r := Clr and $000000FF; + g := (Clr and $0000FF00) shr 8; + b := (Clr and $00FF0000) shr 16; + + + r := r + Round((255 - r) * (value / 100)); + g := g + Round((255 - g) * (value / 100)); + b := b + Round((255 - b) * (value / 100)); + + //Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b)); + Result := RGB(r, g, b); + +end; + +function GetInverseColor(AColor: TColor): TColor; +begin + Result := ColorToRGB(AColor) xor $FFFFFF; +end; + +function GrayColor(ACanvas: TCanvas; Clr: TColor; Value: integer): TColor; +var + r, g, b, avg: integer; + +begin + + clr := ColorToRGB(clr); + r := Clr and $000000FF; + g := (Clr and $0000FF00) shr 8; + b := (Clr and $00FF0000) shr 16; + + Avg := (r + g + b) div 3; + Avg := Avg + Value; + + if Avg > 240 then Avg := 240; + //if ACanvas <> nil then + // Result := Windows.GetNearestColor (ACanvas.Handle,RGB(Avg, avg, avg)); + Result := RGB(Avg, avg, avg); +end; + +procedure GrayBitmap(ABitmap: TBitmap; Value: integer); +var + x, y: integer; + LastColor1, LastColor2, Color: TColor; +begin + LastColor1 := 0; + LastColor2 := 0; + + for y := 0 to ABitmap.Height do + for x := 0 to ABitmap.Width do + begin + Color := ABitmap.Canvas.Pixels[x, y]; + if Color = LastColor1 then + ABitmap.Canvas.Pixels[x, y] := LastColor2 + else + begin + LastColor2 := GrayColor(ABitmap.Canvas , Color, Value); + ABitmap.Canvas.Pixels[x, y] := LastColor2; + LastColor1 := Color; + end; + end; +end; +{Modified by felix@unidreamtech.com} +{ +procedure GrayBitmap(ABitmap: TBitmap; Value: integer); +var + Pixel: PRGBTriple; + w, h: Integer; + x, y: Integer; + avg: integer; +begin + ABitmap.PixelFormat := pf24Bit; + w := ABitmap.Width; + h := ABitmap.Height; + for y := 0 to h - 1 do + begin + Pixel := ABitmap.ScanLine[y]; + for x := 0 to w - 1 do + begin + avg := ((Pixel^.rgbtRed + Pixel^.rgbtGreen + Pixel^.rgbtBlue) div 3) + + Value; + if avg > 240 then avg := 240; + Pixel^.rgbtRed := avg; + Pixel^.rgbtGreen := avg; + Pixel^.rgbtBlue := avg; + Inc(Pixel); + end; + end; +end; +} + +procedure DimBitmap(ABitmap: TBitmap; Value: integer); +var + x, y: integer; + LastColor1, LastColor2, Color: TColor; begin + if Value > 100 then Value := 100; + LastColor1 := -1; + LastColor2 := -1; + for y := 0 to ABitmap.Height - 1 do + for x := 0 to ABitmap.Width - 1 do + begin + Color := ABitmap.Canvas.Pixels[x, y]; + if Color = LastColor1 then + ABitmap.Canvas.Pixels[x, y] := LastColor2 + else + begin + LastColor2 := NewColor(ABitmap.Canvas, Color, Value); + ABitmap.Canvas.Pixels[x, y] := LastColor2; + LastColor1 := Color; + end; + end; end; + +// LIne 2647 +{Modified by felix@unidreamtech.com} +{works fine for 24 bit color +procedure DimBitmap(ABitmap: TBitmap; Value: integer); +var + Pixel: PRGBTriple; + w, h: Integer; + x, y, c1, c2: Integer; +begin + ABitmap.PixelFormat := pf24Bit; + w := ABitmap.Width; + h := ABitmap.Height; + + c1 := Value * 255; + c2 := 100 - Value; + for y := 0 to h - 1 do + begin + Pixel := ABitmap.ScanLine[y]; + for x := 0 to w - 1 do + begin + Pixel^.rgbtRed := ((c2 * Pixel^.rgbtRed) + c1) div 100; + Pixel^.rgbtGreen := ((c2 * Pixel^.rgbtGreen) + c1) div 100; + Pixel^.rgbtBlue := ((c2 * Pixel^.rgbtBlue) + c1) div 100; + Inc(Pixel); + end; + end; +end; +} +procedure DrawArrow(ACanvas: TCanvas; X, Y: integer); begin + ACanvas.MoveTo(X, Y); + ACanvas.LineTo(X + 5, Y); + + ACanvas.MoveTo(X + 1, Y + 1); + ACanvas.LineTo(X + 4, Y); + + ACanvas.MoveTo(X + 2, Y + 2); + ACanvas.LineTo(X + 3, Y); + +end; + +procedure DrawArrow(ACanvas: TCanvas; X, Y, Orientation: integer); +begin + case Orientation of + 0: + begin + + ACanvas.MoveTo(X, Y); + ACanvas.LineTo(X, Y-1); + + ACanvas.MoveTo(X + 1, Y + 1); + ACanvas.LineTo(X + 4, Y + 4); + + ACanvas.MoveTo(X, Y + 1); + ACanvas.LineTo(X + 3, Y + 4); + + ACanvas.MoveTo(X, Y + 2); + ACanvas.LineTo(X + 2, Y + 4); + + + ACanvas.MoveTo(X - 1, Y + 1); + ACanvas.LineTo(X - 4, Y + 4); + + ACanvas.MoveTo(X, Y + 2); + ACanvas.LineTo(X - 3, Y + 4); + + ACanvas.MoveTo(X, Y + 1); + ACanvas.LineTo(X - 2, Y + 4); + + end; + 1: + begin + ACanvas.MoveTo(X, Y+3); + ACanvas.LineTo(X, Y+4); + + ACanvas.MoveTo(X + 1, Y + 2); + ACanvas.LineTo(X + 4, Y - 1); + + ACanvas.MoveTo(X, Y + 2); + ACanvas.LineTo(X + 3, Y - 1); + + ACanvas.MoveTo(X, Y + 1); + ACanvas.LineTo(X + 2, Y + 0); + + + + ACanvas.MoveTo(X - 1, Y + 2); + ACanvas.LineTo(X - 4, Y - 1); + + ACanvas.MoveTo(X, Y + 2); + ACanvas.LineTo(X - 3, Y - 1); + + ACanvas.MoveTo(X, Y + 1); + ACanvas.LineTo(X - 2, Y + 0); + + + end; + end; +end; +procedure DrawBitmapShadow(B: TBitmap; ACanvas: TCanvas; X, Y: integer; + ShadowColor: TColor); var + BX, BY: integer; + TransparentColor: TColor; begin + TransparentColor := B.Canvas.Pixels[0, B.Height - 1]; + for BY := 0 to B.Height - 1 do + for BX := 0 to B.Width - 1 do + begin + if B.Canvas.Pixels[BX, BY] <> TransparentColor then + ACanvas.Pixels[X + BX, Y + BY] := ShadowColor; + end; end; + +procedure DrawCheckMark(ACanvas: TCanvas; X, Y: integer); +begin + Inc(X, 2); + Dec(Y, 3); + ACanvas.MoveTo(X , Y - 2); + ACanvas.LineTo(X + 2, Y ); + ACanvas.LineTo(X + 7, Y - 5); + + ACanvas.MoveTo(X , Y - 3); + ACanvas.LineTo(X + 2, Y - 1); + ACanvas.LineTo(X + 7, Y - 6); + + ACanvas.MoveTo(X , Y - 4); + ACanvas.LineTo(X + 2, Y - 2); + ACanvas.LineTo(X + 7, Y - 7); +end; + { TCustomComboSubClass } +//By Heath Provost (Nov 20, 2001) +// ComboBox Subclass WndProc. +// Message processing to allow control to repond to +// messages needed to paint using Office XP style. +procedure TControlSubClass.ControlSubClass(var Message: TMessage); + +begin + //Call original WindowProc FIRST. We are trying to emulate inheritance, so + //original WindowProc must handle all messages before we do. + + + if ((Message.Msg = WM_PAINT) and ((Control is TGraphicControl))) or + ((Control.ClassName = 'TDBLookupComboBox') and (Message.Msg = WM_NCPAINT)) then + Message.Result := 1 + else + //: "Marcus Paulo Tavares" + orgWindowProc(Message); + + if (FXPStyle <> nil) and (not FXPStyle.FActive) then + begin + try + Message.Result := 1; + if Control <> nil then + begin + Control.WindowProc := orgWindowProc; + if Control is TCustomEdit then + TEdit(Control).Ctl3D := FCtl3D; + if Control is TCustomRichEdit then + TRichEdit(Control).BorderStyle := FBorderStyle; + if Control.ClassName = 'TDBLookupComboBox' then + TComboBox(Control).Ctl3D := FCtl3D; + if Control is TCustomListBox then + TListBox(Control).BorderStyle := FBorderStyle; + if Control is TCustomListView then + TListView(Control).BorderStyle := FBorderStyle; + if Control is TCustomTreeView then + TTreeView(Control).BorderStyle := FBorderStyle; + Control := nil; + Free; + end; + exit; + except + exit; + end; + end; + + FMsg := Message.Msg; + case Message.Msg of + + + EM_GETMODIFY, // For edit + CM_INVALIDATE: + begin + FBuilding := true + end; + + CM_PARENTCOLORCHANGED: + begin + PaintControlXP; + end; + + WM_DESTROY: + begin + if not FBuilding then + begin + try + if Control <> nil then + begin + Control.WindowProc := orgWindowProc; + FBuilding := false; + Free; + end; + except + end; + //FBuilding := false; + end; + Exit; + end; + + WM_PAINT: + begin + FBuilding := false; + PaintControlXP; + end; + + CM_MOUSEENTER: + if TControl(Control).Enabled then + begin +// if FmouseInControl then exit; + FmouseInControl := true; + if Control is TGraphicControl then + begin + Control.Repaint; + exit; + end; + PaintControlXP; + + + {if Control is TGraphicControl then + begin + if not FMouseInControl and Control.Enabled + and (GetCapture = 0) then + begin + FMouseInControl := True; + Control.Repaint; + end; + end + else + begin + FmouseInControl := true; + PaintControlXP; + end;} + + + end; + CM_MOUSELEAVE: + if TControl(Control).Enabled then + begin + FmouseInControl := false; + if Control is TGraphicControl then + begin + Control.Invalidate; + exit; + end; + PaintControlXP; + + + {if Control is TGraphicControl then + begin + if FMouseInControl and Control.Enabled then + begin + FMouseInControl := False; + Control.Invalidate; + end; + end + else + begin + FmouseInControl := false; + PaintControlXP; + end;} + end; + + WM_MOUSEMOVE: + begin + if TControl(Control).Enabled and (Control.ClassName = 'TUpDown') then + PaintControlXP; + end; + WM_LBUTTONDOWN: + begin + FLButtonBressed := true; + PaintControlXP; + end; + + WM_LBUTTONUP: + begin + FLButtonBressed := false; + if Control is TGraphicControl then + begin + Control.Repaint; + exit; + end; + PaintControlXP; + end; + + WM_KEYDOWN: + if Message.WParam = VK_SPACE then + begin + FBressed := true; + if not FIsKeyDown then + PaintControlXP; + FIsKeyDown := true; + end; + + WM_KEYUP: + if Message.WParam = VK_SPACE then + begin + FBressed := false; + FIsKeyDown := false; + PaintControlXP; + end; + + WM_SETFOCUS: + begin + FmouseInControl := true; + PaintControlXP; + end; + WM_KILLFOCUS: + begin + FmouseInControl := false; + PaintControlXP; + end; + CM_FOCUSCHANGED: //?? + PaintControlXP; + + CM_EXIT: + begin + FmouseInControl := false; + PaintControlXP; + end; + + BM_SETCHECK: + begin + FmouseInControl := false; + PaintControlXP; + end; + BM_GETCHECK: + begin + FmouseInControl := false; + PaintControlXP; + end; + CM_ENABLEDCHANGED: + begin + if (Message.WParam = 0) then FmouseInControl := false;//Dirk Bottcher + PaintControlXP; + end; + + CM_TEXTCHANGED: + begin + PaintControlXP; + end; + + + CM_CTL3DCHANGED, CM_PARENTCTL3DCHANGED: + begin + FBuilding := true; + end; + WM_LBUTTONDBLCLK: //for button, check + begin + if (Control is TButton) or + (Control is TSpeedButton) or + (Control is TCheckBox) then + Control.Perform(WM_LBUTTONDOWN, Message.WParam , Longint(Message.LParam)); + end; + {CN_DRAWITEM,} BM_SETSTATE: + begin + PaintControlXP; // button + end; + WM_WINDOWPOSCHANGED, CN_PARENTNOTIFY: // Moving From parent to other + begin + FBuilding := true + end; + WM_NCPAINT: + begin + if (Control is TCustomListBox) or (Control is TCustomTreeView) or + (Control is TCustomListBox) + then + PaintNCWinControl; + end; + end; + +end; + +// changes added by Heath Provost (Nov 20, 2001) +{ TCustomComboSubClass } +// paints an overlay over the control to make it mimic +// Office XP style. + +procedure TControlSubClass.PaintControlXP; +begin + + If Control is TWinControl then + FIsFocused := TWinControl(Control).Focused + else + FIsFocused := false; + {$IFDEF VER6U} + if (Control is TCustomCombo) then + PaintCombo; + {$ELSE} + if (Control is TCustomComboBox) then + PaintCombo; + {$ENDIF} + if Control.ClassName = 'TDBLookupComboBox' then + PaintDBLookupCombo; + + if Control is TCustomRichEdit then + PaintRichEdit + else + if Control is TCustomEdit then + PaintEdit; + + if Control is TCustomCheckBox then + PaintCheckBox; + if Control is TRadioButton then + PaintRadio; + + if Control is TBitBtn then + PaintBitButn + else + if Control is TButton then + PaintButton; + + if Control is TUpDown then + PaintUpDownButton; + + if Control is TSpeedButton then + if Control.Visible then + PaintSpeedButton; + + if Control is TCustomPanel then + PaintPanel; + + if Control is TCustomGroupBox then + PaintGroupBox; + + if (Control is TCustomListBox) or (Control is TCustomTreeView) or + (Control is TCustomListView) + then + PaintNCWinControl; + + if Control is TProgressBar then + PaintProgressBar; + + if Control is TCustomHotKey then + PaintHotKey; +{ + if Control is TDrawGrid then + PaintGrid; +} +end; + +procedure TControlSubClass.PaintCombo; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor, ArrowColor: TColor; + X: integer; +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + +// FXPStyle.SetGlobalColor(C); + if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite; + + + if (FmouseinControl) then + begin + borderColor := FXPStyle.FFSelectBorderColor; + SelectColor := FXPStyle.FFSelectColor; + end + else + begin + borderColor := TComboBox(Control).Color; + if Control.Tag = 1000 then + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor) + else + selectColor := clBtnFace; + end; + + if (not FmouseinControl) and (FIsFocused) then + begin + borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + SelectColor := FXPStyle.FCheckedAreaColor; + end; + + R := Control.ClientRect; + + C.Brush.Color := Control.Parent.Brush.Color; + C.FrameRect(R); + InflateRect(R, -1, -1); + + C.Pen.Color := C.Brush.Color; + C.MoveTo(R.Left, R.Top); + C.LineTo(R.Right, R.Top); + + InflateRect(R, 0, -1); + + if ( FmouseinControl or FIsFocused) then + InflateRect(R, 1, 1); + + C.Brush.Color := TComboBox(Control).Color;; + C.FrameRect(R); + + Inc(R.Bottom,1); + C.Brush.Color := BorderColor; + C.FrameRect(R); + + {$IFDEF VER6U} + if TCustomCombo(Control).DroppedDown then + {$ELSE} + if TCustomComboBox(Control).DroppedDown then + {$ENDIF} + begin + BorderColor := FXPStyle.FFSelectBorderColor; + ArrowColor := clWhite; + SelectColor := FXPStyle.FCheckedAreaSelectColor ; + end; + + if TComboBox(Control).style <> csSimple then + begin + + InflateRect(R, -1, -1); + + if Control.BiDiMode = bdRightToLeft then + R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) + 1 + else + R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) - 1; + + if ( FmouseinControl or FIsFocused) then + begin + if Control.BiDiMode = bdRightToLeft then + Inc(R.Right, 2) + else + Dec(R.Left, 1); + end; + + C.Brush.Color := SelectColor; + C.FillRect(R); + + if Control.BiDiMode = bdRightToLeft then + R.Left := R.Right - 5 + else + R.Right := R.Left + 5; + + C.Brush.Color := TComboBox(Control).Color; + C.FillRect(R); + + C.Pen.Color := BorderColor; + + if Control.BiDiMode = bdRightToLeft then + begin + C.Moveto(R.Left, R.Top); + C.LineTo(R.Left, R.Bottom); + end + else + begin + C.Moveto(R.Right, R.Top); + C.LineTo(R.Right, R.Bottom); + end; + C.Pen.Color := arrowColor; + + R := Control.ClientRect; + + if Control.BiDiMode = bdRightToLeft then + X := R.Left + 5 + else + X := R.Right - 10; + + C.Moveto(X + 0, R.Top + 10); + C.LineTo(X + 5, R.Top + 10); + C.Moveto(X + 1, R.Top + 11); + C.LineTo(X + 4, R.Top + 11); + C.Moveto(X + 2, R.Top + 12); + C.LineTo(X + 3, R.Top + 12); + end; + finally + C.Free; + end; + +end; + +procedure TControlSubClass.PaintDBLookupCombo; +var + C: TControlCanvas; + R: TRect; + FrameColor, SelectColor, BorderColor, ArrowColor: TColor; + X: integer; + DC: HDC; + +begin + C := TControlCanvas.Create; + DC := GetWindowDC(TWinControl(Control).Handle); + try + C.Control := Control; + C.Handle := DC; + if TComboBox(Control).Ctl3D then + begin + FBuilding := true; + TComboBox(Control).Ctl3D := false; + end; + + //FXPStyle.SetGlobalColor(C); + if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite; + + + if (FmouseinControl) then + begin + FrameColor := FXPStyle.FFSelectBorderColor; + borderColor := FXPStyle.FFSelectBorderColor; + SelectColor := FXPStyle.FFSelectColor; + end + else + begin + FrameColor := GetShadeColor(C, Control.Parent.Brush.Color, 60); + borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + selectColor := clBtnFace; + end; + if (not FmouseinControl) and (FIsFocused) then + begin + FrameColor := GetShadeColor(C, Control.Parent.Brush.Color, 60); + borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + SelectColor := FXPStyle.FCheckedAreaColor; + end; + + + R := Rect(0, 0, Control.Width, Control.Height); + C.Brush.Color := TComboBox(Control).Color; + C.Brush.Color := FrameColor; + C.FrameRect(R); + + + R := Control.ClientRect; + + // Move the thumb one pixel to the right and one pixel down + OffsetRect(R, 1, 1); + + + C.Brush.Color := TComboBox(Control).Color; + C.FrameRect(R); + + {$IFDEF VER6U} + if TCustomCombo(Control).DroppedDown then + {$ELSE} + if TCustomComboBox(Control).DroppedDown then + {$ENDIF} + begin + BorderColor := FXPStyle.FFSelectBorderColor; + ArrowColor := clWhite; + SelectColor := FXPStyle.FCheckedAreaSelectColor ; + end; + + if TComboBox(Control).style <> csSimple then + begin + + InflateRect(R, -1, -1); + + if Control.BiDiMode = bdRightToLeft then + R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) + 1 + else + R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) - 1; + + if ( FmouseinControl or FIsFocused) then + begin + if Control.BiDiMode = bdRightToLeft then + Inc(R.Right, 1) + else + Dec(R.Left, 1); + end; + + + C.Brush.Color := SelectColor; + C.FillRect(R); + C.Brush.Color := BorderColor; + C.FrameRect(R); + + if Control.BiDiMode = bdRightToLeft then + R.Left := R.Right - 5 + else + R.Right := R.Left + 5; + + C.Brush.Color := TComboBox(Control).Color; + C.FillRect(R); + + C.Pen.Color := BorderColor; + + if Control.BiDiMode = bdRightToLeft then + begin + C.Moveto(R.Left, R.Top); + C.LineTo(R.Left, R.Bottom); + end + else + begin + C.Moveto(R.Right, R.Top); + C.LineTo(R.Right, R.Bottom); + end; + C.Pen.Color := arrowColor; + + R := Control.ClientRect; + + if Control.BiDiMode = bdRightToLeft then + X := R.Left + 5 + else + X := R.Right - 9; // Changed by Uwe Runkel, uwe@runkel.info + // Changed value from 10 to 9 because the thumb has + // moved one pixel to the right + + C.Moveto(X + 0, R.Top + 8); + C.LineTo(X + 5, R.Top + 8); + C.Moveto(X + 1, R.Top + 9); + C.LineTo(X + 4, R.Top + 9); + C.Moveto(X + 2, R.Top + 10); + C.LineTo(X + 3, R.Top + 10); + end; + finally + C.Free; + ReleaseDC(TWinControl(Control).Handle, DC); + end; + +end; + +procedure TControlSubClass.PaintEdit; +var + C: TControlCanvas; + R: TRect; + BorderColor: TColor; +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + + //FXPStyle.SetGlobalColor(C); + + if TEdit(Control).Ctl3D <> false then + begin + FBuilding := true; + TEdit(Control).Ctl3D := false; + end; + + if (FmouseinControl) or (FIsFocused) then + borderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 60) + else + borderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60); + + + if FBorderStyle = bsNone then + begin + if (FmouseinControl) and (not FIsFocused) then + //borderColor := NewColor(C, Control.Parent.Brush.Color, 60) + borderColor := NewColor(C, MergColor([TEdit(Control).Color,Control.Parent.Brush.Color]), 40) + + else + borderColor := TEdit(Control).Color; + end; + + + R := Control.ClientRect; + + C.Pen.Color := BorderColor; + C.Brush.Style := bsClear; + + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + finally + C.Free; + end; +end; + +procedure TControlSubClass.PaintRichEdit; +var + C: TControlCanvas; + R: TRect; + BorderColor: TColor; +begin + + C := TControlCanvas.Create; + try + C.Control := Control.Parent; + + R := Control.BoundsRect; + InflateRect(R, 1, 1); + + if FBorderStyle = bsSingle then + begin + FBuilding := true; + TRichEdit(Control).BorderStyle := bsNone; + if TRichEdit(Control).BorderWidth < 2 then + TRichEdit(Control).BorderWidth := 2; + end; + + if (FmouseinControl) or (FIsFocused) then + borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60) + + + else + begin + if FBorderStyle = bsSingle then + borderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60) + else + borderColor := Control.Parent.Brush.Color; + end; + + Frame3D(C, R, borderColor, borderColor, 1); + + finally + C.Free; + end; + +end; + +procedure TControlSubClass.PaintCheckBox; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor: TColor; +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + + if FMouseInControl then + begin + SelectColor := FXPStyle.FFSelectColor; + BorderColor := FXPStyle.FFSelectBorderColor; + end + else + begin + SelectColor := clWindow; + BorderColor := clBtnShadow; + end; + + if (FIsFocused) then + begin + SelectColor := FXPStyle.FFSelectColor; + BorderColor := FXPStyle.FFSelectBorderColor; + end; + if (FBressed) or (FLButtonBressed ) then + SelectColor := FXPStyle.FCheckedAreaSelectColor ; + + if TCheckBox(Control).State = cbGrayed then + SelectColor := clSilver ; + R := Control.ClientRect; + InflateRect(R, 0, -3); + R.Top := R.Top + ((R.Bottom - R.Top - GetSystemMetrics(SM_CXHTHUMB)) div 2); + R.Bottom := R.Top + GetSystemMetrics(SM_CXHTHUMB); + + if ((Control.BiDiMode = bdRightToLeft) and + (TCheckBox(Control).Alignment = taRightJustify)) or + ((Control.BiDiMode = bdLeftToRight) and + (TCheckBox(Control).Alignment = taLeftJustify)) + then + R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) + 1 + else + if ((Control.BiDiMode = bdLeftToRight) and + (TCheckBox(Control).Alignment = taRightJustify)) or + ((Control.BiDiMode = bdRightToLeft) and + (TCheckBox(Control).Alignment = taLeftJustify)) then + R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) - 1; + + + + C.Brush.Color := TCheckBox(Control).Color; + C.FillRect(R); + InflateRect(R, -2, -2); + C.Brush.Color := SelectColor; + C.Pen.Color := BorderColor; + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + + if (TCheckBox(Control).Checked) or + (TCheckBox(Control).State = cbGrayed) then + begin + if Control.Enabled then + begin + if (FBressed) or (FLButtonBressed ) then + C.Pen.color := clWindow + else + begin + if TCheckBox(Control).State = cbGrayed then + C.Pen.color := clGray + else + C.Pen.color := clHighlight; + end; + end + else + C.Pen.color := FXPStyle.FFDisabledColor; + + DrawCheckMark(C, R.Left, R.Bottom ) + end; + + finally + C.Free; + end; + + +end; + +procedure TControlSubClass.PaintRadio; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor: TColor; +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + + if FMouseInControl then + begin + SelectColor := FXPStyle.FFSelectColor; + BorderColor := FXPStyle.FFSelectBorderColor;; + end + else + begin + SelectColor := clWindow; + BorderColor := clBtnShadow; + end; + if (FIsFocused) then + SelectColor := FXPStyle.FFSelectColor; + + R := Control.ClientRect; + InflateRect(R, 0, -4); + + R.Top := R.Top + ((R.Bottom - R.Top - GetSystemMetrics(SM_CXHTHUMB)) div 2); + R.Bottom := R.Top + GetSystemMetrics(SM_CXHTHUMB)-1; + + + if ((Control.BiDiMode = bdRightToLeft) and + (TCheckBox(Control).Alignment = taRightJustify)) or + ((Control.BiDiMode = bdLeftToRight) and + (TCheckBox(Control).Alignment = taLeftJustify)) + then + R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) + 1 + else + if ((Control.BiDiMode = bdLeftToRight) and + (TCheckBox(Control).Alignment = taRightJustify)) or + ((Control.BiDiMode = bdRightToLeft) and + (TCheckBox(Control).Alignment = taLeftJustify)) then + R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) - 1; + + C.Brush.Color := TCheckBox(Control).Color; + C.FillRect(R); + + + InflateRect(R, -2, -2); + C.Brush.Color := SelectColor; + C.Pen.Color := BorderColor; + + + C.Ellipse(R.Left, R.Top, R.Right, R.Bottom); + if TRadioButton(Control).Checked then + begin + InflateRect(R, -2, -2); + + if Control.Enabled then + C.Brush.Color := clHighlight + else + C.Brush.color := FXPStyle.FFDisabledColor; + + C.Pen.Color := C.Brush.Color; + C.Ellipse(R.Left, R.Top, R.Right, R.Bottom); + end; + finally + C.Free; + end; + + +end; + +procedure TControlSubClass.PaintButton; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor: TColor; + Txt: string; + TextRect: TRect; + TxtFont: TFont; + + CWidth, CHeight, TWidth, THeight: integer; + TextFormat: integer; + +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + + if (FMouseInControl) then + begin + if Control.Tag = 1000 then // UseParentColor + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColorSelect) + else + SelectColor := NewColor(C, clBtnFace, FXPStyle.FDimParentColorSelect); + + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + end + else + begin + if Control.Tag = 1000 then + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor) + else + SelectColor := FXPStyle.FFIconBackColor; + BorderColor := clBtnShadow; + end; + + + if (not FmouseinControl) and (FIsFocused) then + begin + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + end; + + TextFormat := DT_CENTER + DT_VCENTER; + R := Control.ClientRect; + + CWidth := (R.Right - R.Left); + CHeight := (R.Bottom - R.Top); + + C.Brush.Color := Control.Parent.Brush.Color; + C.FillRect(R); + + C.Brush.Color := SelectColor; + + C.Pen.Color := NewColor(C, BorderColor, 30); + C.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 4, 4); + + if TControl(Control).Enabled then + if FBressed or (FLButtonBressed and FmouseinControl) {or FBressed} then + begin + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + C.MoveTo(R.Left , R.Bottom - 2); + C.LineTo(R.Left , R.Top + 1); + C.LineTo(R.Left + 1, R.Top ); + C.LineTo(R.Right - 1 , R.Top ); + end + else + begin + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + C.MoveTo(R.Right - 1, R.Top + 1); + C.LineTo(R.Right - 1, R.Bottom - 2); + C.LineTo(R.Right - 2, R.Bottom - 1); + C.LineTo(R.Left , R.Bottom - 1); + end; + + Txt := TButton(Control).Caption; + + TextRect := R; + + TxtFont := TButton(Control).Font; + C.Font.Assign (TxtFont); + + + if TButton(Control).IsRightToLeft then + TextFormat := TextFormat + DT_RTLREADING; + +//--- //"Holger Lembke" + + if (Txt <> '') then + begin + FillChar(TextRect, SizeOf(TextRect),0); + DrawText(C.Handle, + PChar(Txt), Length(Txt), + TextRect, + DT_CALCRECT + control.DrawTextBiDiModeFlags(0)); + TWidth := TextRect.Right; + THeight := TextRect.Bottom; + end + else + begin + TWidth := 0; + THeight := 0; + end; + +//--- + TextRect.Left := (CWidth - (TWidth)) div 2; + TextRect.Right := TextRect.Left + TWidth; + TextRect.Top := (CHeight - (THeight)) div 2; + TextRect.Bottom := TextRect.Top + THeight; + + + FXPStyle.DrawTheText(Control, + Txt, '', C, + TextRect, false, + TControl(Control).Enabled, + TButton(Control).Default, + false, + TControl(Control).IsRightToLeft, + TxtFont, + TextFormat); + + finally + C.Free; + end; + +end; + +procedure TControlSubClass.PaintSpeedButton; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor: TColor; + Txt: string; + TextRect, IconRect: TRect; + TxtFont: TFont; + B, BF: TBitmap; + CWidth, CHeight, BWidth, BHeight, TWidth, THeight, Space, + NumGlyphs, Offset: integer; + TextFormat: integer; + FDown, FFlat, FTransparent: boolean; + FLayout: TButtonLayout; + P: TPoint; +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + + FDown := TSpeedButton(Control).Down; + FFlat := TSpeedButton(Control).Flat; + FTransparent := TSpeedButton(Control).Transparent; + NumGlyphs := TSpeedButton(Control).NumGlyphs; + +//---------- + if FFlat then + if FMouseInControl then + begin + p := Mouse.CursorPos; + P := Control.ScreenToClient(P); + R := Control.ClientRect; + FMouseInControl := (p.x >= R.Left) and (p.x <= R.Right) and + (p.y >= R.Top) and (p.y <= R.Bottom); + end; + +//---------- + if (FMouseInControl) then + begin + if Control.Tag = 1000 then // UseParentColor + begin + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColorSelect); + if FFlat then + SelectColor := FXPStyle.FFSelectColor ; + end + else + begin + SelectColor := NewColor(C, clBtnFace, FXPStyle.FDimParentColorSelect); + if FFlat then + SelectColor := FXPStyle.FFSelectColor ; + end; + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + end + else + begin + if Control.Tag = 1000 then + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor) + else + SelectColor := FXPStyle.FFIconBackColor; + if FFlat then + SelectColor := TControl(Control).Parent.Brush.Color; + + if (Control.ClassName = 'TNavButton') and FFlat then + begin + SelectColor := TControl(Control).Parent.Brush.Color; + end; + BorderColor := clBtnShadow; + end; + + + if FDown then + begin + SelectColor := FXPStyle.FCheckedAreaColor; + BorderColor := FXPStyle.FFSelectBorderColor; + end; + + if FDown and FMouseInControl then + begin + SelectColor := FXPStyle.FCheckedAreaSelectColor; + BorderColor := FXPStyle.FFSelectBorderColor; + end; + + if not TControl(Control).Enabled then + BorderColor := clBtnShadow; + + + TextFormat := + DT_CENTER + DT_VCENTER;; + R := Control.ClientRect; + + CWidth := (R.Right - R.Left); + CHeight := (R.Bottom - R.Top); + + + if (FDown or FMouseInControl) and FTransparent then + begin + BF := TBitmap.Create; + try + BF.Width := R.Right - R.Left; + BF.Height := R.Bottom - R.Top; + + if FFlat then + begin + if GetDeviceCaps(C.Handle, BITSPIXEL) > 16 then + BF.Canvas.Brush.Color := NewColor(C, FXPStyle.FFSelectColor, 20) + else + BF.Canvas.Brush.Color := SelectColor; + end + else + begin + if GetDeviceCaps(C.Handle, BITSPIXEL) > 16 then + BF.Canvas.Brush.Color := NewColor(C, SelectColor, 5) + else + BF.Canvas.Brush.Color := SelectColor; + end; + BF.Canvas.FillRect (R); + BitBlt(C.handle, + R.Left, + R.Top, + R.Right - R.left, + R.Bottom - R.top, + BF.Canvas.Handle, + 0, + 0, + SRCAND); + finally + BF.Free; + end; + end; + + + + + C.Brush.Color := SelectColor; + if not FTransparent then + c.FillRect (R); + + if Control.ClassName = 'TNavButton' then + begin + c.FillRect (R); + end; + C.Pen.Color := NewColor(C, BorderColor, 30); + + if (FFlat) and (not FTransparent) and (not FDown) and (not FMouseInControl) then + C.Pen.Color := C.Brush.Color; + + if FTransparent then + C.Brush.Style := bsClear; + if ((FTransparent) and (FMouseInControl)) or + ((FTransparent) and (FDown)) or + ((not FTransparent )) or + ((not FFlat)) + then + begin + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + end; + + if TControl(Control).Enabled then + begin + if (FFlat) then + begin + if (FLButtonBressed ) or (FDown) then + begin + C.Pen.Color := BorderColor; + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + + C.MoveTo(R.Left , R.Bottom - 1); + C.LineTo(R.Left , R.Top ); + C.LineTo(R.Right , R.Top ); + end + else + if (FMouseInControl) then + begin + C.Pen.Color := FXPStyle.FFSelectBorderColor; + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + end; + end; + + if (not FFlat) then + if (FLButtonBressed ) or (FDown) then + begin + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + C.MoveTo(R.Left , R.Bottom - 1); + C.LineTo(R.Left , R.Top ); + C.LineTo(R.Right , R.Top ); + end + else + begin + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + C.MoveTo(R.Right - 1, R.Top ); + C.LineTo(R.Right - 1, R.Bottom - 1); + C.LineTo(R.Left , R.Bottom - 1); + end; + end; + Txt := TSpeedButton(Control).Caption; + + TextRect := R; + + TxtFont := TSpeedButton(Control).Font; + C.Font.Assign (TxtFont); + + TWidth := C.TextWidth(Txt); + //THeight := C.TextHeight(Txt); + TextRect.Left := (CWidth - TWidth) div 2; + + + if TControl(Control).IsRightToLeft then + TextFormat := TextFormat + DT_RTLREADING; + +//--- //"Holger Lembke" + + if (Txt <> '') then + begin + FillChar(TextRect, sizeof(TextRect),0); + DrawText(C.Handle, + PChar(Txt), Length(Txt), + TextRect, + DT_CALCRECT + control.DrawTextBiDiModeFlags(0)); + TWidth := TextRect.Right; + THeight := TextRect.Bottom; + end + else + begin + TWidth := 0; + THeight := 0; + end; + +//--- + + if (TSpeedButton(Control).Glyph <> nil) then + begin + B := TBitmap.Create; + BWidth := TSpeedButton(Control).Glyph.Width div + TSpeedButton(Control).NumGlyphs; + + BHeight := TSpeedButton(Control).Glyph.Height; + + B.Width := BWidth; + B.Height := BHeight; + if Length(TSpeedButton(Control).Caption) > 0 then + Space := TSpeedButton(Control).Spacing + else + Space := 0; + + IconRect := Rect(R.Left , R.Top, R.Left+BWidth, R.Top + BHeight); + + + // Suggested by : "Holger Lembke" + Offset := 1; + if (not Control.Enabled) and (NumGlyphs > 1) then + Offset := 2; + if (FLButtonBressed) and (NumGlyphs > 2) then + Offset := 3; + if (FDown) and (NumGlyphs > 3) then + Offset := 4; + + + B.Canvas.CopyRect (Rect(0, 0, BWidth, BHeight), + TSpeedButton(Control).Glyph.Canvas, + Rect((BWidth * Offset) - BWidth, 0, BWidth * Offset, BHeight)); + + + FLayout := TSpeedButton(Control).Layout; + if Control.IsRightToLeft then + begin + if FLayout = blGlyphLeft then + FLayout := blGlyphRight + else + if FLayout = blGlyphRight then FLayout := blGlyphLeft; + end; + case FLayout of + blGlyphLeft: + begin + IconRect.Left := (CWidth - (BWidth + Space + TWidth)) div 2; + IconRect.Right := IconRect.Left + BWidth; + IconRect.Top := ((CHeight - (BHeight)) div 2) - 1; + IconRect.Bottom := IconRect.Top + BHeight; + + TextRect.Left := IconRect.Right + Space; + TextRect.Right := TextRect.Left + TWidth; + TextRect.Top := (CHeight - (THeight)) div 2; + TextRect.Bottom := TextRect.Top + THeight; + + end; + blGlyphRight: + begin + IconRect.Right := (CWidth + (BWidth + Space + TWidth)) div 2; + IconRect.Left := IconRect.Right - BWidth; + IconRect.Top := (CHeight - (BHeight)) div 2; + IconRect.Bottom := IconRect.Top + BHeight; + + TextRect.Right := IconRect.Left - Space; + TextRect.Left := TextRect.Right - TWidth; + TextRect.Top := (CHeight - (THeight)) div 2; + TextRect.Bottom := TextRect.Top + THeight; + + end; + blGlyphTop: + begin + IconRect.Left := (CWidth - BWidth) div 2; + IconRect.Right := IconRect.Left + BWidth; + IconRect.Top := (CHeight - (BHeight + Space + THeight)) div 2; + IconRect.Bottom := IconRect.Top + BHeight; + + TextRect.Left := (CWidth - (TWidth)) div 2; + TextRect.Right := TextRect.Left + TWidth; + TextRect.Top := IconRect.Bottom + Space; + TextRect.Bottom := TextRect.Top + THeight; + + end; + blGlyphBottom: + begin + IconRect.Left := (CWidth - BWidth) div 2; + IconRect.Right := IconRect.Left + BWidth; + IconRect.Bottom := (CHeight + (BHeight + Space + THeight)) div 2; + IconRect.Top := IconRect.Bottom - BHeight; + + TextRect.Left := (CWidth - (TWidth)) div 2; + TextRect.Right := TextRect.Left + TWidth; + TextRect.Bottom := IconRect.Top - Space; + TextRect.Top := TextRect.Bottom - THeight; + + end; + + end; + + FXPStyle.DrawIcon(Control, C , B, IconRect, + FMouseinControl, + FIsFocused, + TControl(Control).Enabled, + FDown or FLButtonBressed, + false, + TControl(Control).IsRightToLeft); + + B.Free; + end; + + FXPStyle.DrawTheText(Control, + Txt, '', C, + TextRect, false, + TControl(Control).Enabled, + false, + false, + TControl(Control).IsRightToLeft, + TxtFont, + TextFormat); + finally + C.Free; + end; + +end; + +procedure TControlSubClass.PaintBitButn; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor: TColor; + Txt: string; + TextRect, IconRect: TRect; + TxtFont: TFont; + B: TBitmap; + CWidth, CHeight, BWidth, BHeight, TWidth, THeight, Space: integer; + TextFormat: integer; +begin + + C := TControlCanvas.Create; + try + C.Control := Control; + + if (FMouseInControl or FBressed) then + begin + if (Control.Tag and 1000) = 1000 then + SelectColor := NewColor(C, + TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColorSelect) + else + SelectColor := NewColor(C, clBtnFace, FXPStyle.FDimParentColorSelect); + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + end + else + begin + if (Control.Tag and 1000) = 1000 then + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor) + else + SelectColor := FXPStyle.FFIconBackColor; + BorderColor := clBtnShadow; + end; + + if (not FmouseinControl) and (FIsFocused) then + begin + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60); + end; + + if (Control.Tag and 1001) = 1001 then + begin + BorderColor := SelectColor; + end; + + + TextFormat := + DT_CENTER + DT_VCENTER; + + R := Control.ClientRect; + + CWidth := (R.Right - R.Left); + CHeight := (R.Bottom - R.Top); + + + C.Brush.Color := Control.Parent.Brush.Color; + C.FillRect(R); + + C.Brush.Color := SelectColor; + + + C.Pen.Color := NewColor(C, BorderColor, 30); + c.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 4, 4); + + if (Control.Tag and 1001) <> 1001 then + begin + if TControl(Control).Enabled then + if (FLButtonBressed and FmouseinControl) or (FBressed) then + begin + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + C.MoveTo(R.Left , R.Bottom - 2); + C.LineTo(R.Left , R.Top + 1); + C.LineTo(R.Left + 1, R.Top ); + C.LineTo(R.Right - 1 , R.Top ); + end + else + begin + C.Pen.Color := GetShadeColor(C, BorderColor, 50); + C.MoveTo(R.Right - 1, R.Top + 1); + C.LineTo(R.Right - 1, R.Bottom - 2); + C.LineTo(R.Right - 2, R.Bottom - 1); + C.LineTo(R.Left , R.Bottom - 1); + end; + end; + Txt := TBitBtn(Control).Caption; + + TextRect := R; + + TxtFont := TBitBtn(Control).Font; + C.Font.Assign (TxtFont); + + TWidth := C.TextWidth(Txt); + + TextRect.Left := (CWidth - TWidth) div 2; + + +//--- //"Holger Lembke" + + if (Txt <> '') then + begin + FillChar(TextRect, sizeof(TextRect),0); + DrawText(C.Handle, + PChar(Txt), Length(Txt), + TextRect, + DT_CALCRECT + control.DrawTextBiDiModeFlags(0)); + TWidth := TextRect.Right; + THeight := TextRect.Bottom; + end + else + begin + TWidth := 0; + THeight := 0; + end; + +//--- + if TBitBtn(Control).IsRightToLeft then + TextFormat := TextFormat + DT_RTLREADING; + + + if (TBitBtn(Control).Glyph <> nil) then + begin + B := TBitmap.Create; + BWidth := TBitBtn(Control).Glyph.Width div + TBitBtn(Control).NumGlyphs; + + BHeight := TBitBtn(Control).Glyph.Height; + + B.Width := BWidth; + B.Height := BHeight; + Space := TBitBtn(Control).Spacing; + if (Trim(TBitBtn(Control).Caption) = '') then Space := 0; //"Holger Lembke" + IconRect := Rect(R.Left , R.Top, R.Left+BWidth, R.Top + BHeight); + + B.Canvas.CopyRect (Rect(0, 0, BWidth, BHeight), + TBitBtn(Control).Glyph.Canvas, + Rect(0, 0, BWidth, BHeight)); + + case TBitBtn(Control).Layout of + blGlyphLeft: + begin + IconRect.Left := (CWidth - (BWidth + Space + TWidth)) div 2; + IconRect.Right := IconRect.Left + BWidth; + IconRect.Top := (CHeight - (BHeight)) div 2; + IconRect.Bottom := IconRect.Top + BHeight; + + TextRect.Left := IconRect.Right + Space; + TextRect.Right := TextRect.Left + TWidth; + + TextRect.Top := (CHeight - (THeight)) div 2; + TextRect.Bottom := TextRect.Top + THeight; + end; + blGlyphRight: + begin + IconRect.Right := (CWidth + (BWidth + Space + TWidth)) div 2; + IconRect.Left := IconRect.Right - BWidth; + IconRect.Top := (CHeight - (BHeight)) div 2; + IconRect.Bottom := IconRect.Top + BHeight; + + TextRect.Right := IconRect.Left - Space; + TextRect.Left := TextRect.Right - TWidth; + TextRect.Top := (CHeight - (THeight)) div 2; + TextRect.Bottom := TextRect.Top + THeight; + end; + blGlyphTop: + begin + IconRect.Left := (CWidth - BWidth) div 2; + IconRect.Right := IconRect.Left + BWidth; + IconRect.Top := (CHeight - (BHeight + Space + THeight)) div 2; + IconRect.Bottom := IconRect.Top + BHeight; + + TextRect.Left := (CWidth - (TWidth)) div 2; + TextRect.Right := TextRect.Left + TWidth; + TextRect.Top := IconRect.Bottom + Space; + TextRect.Bottom := TextRect.Top + THeight; + + end; + blGlyphBottom: + begin + IconRect.Left := (CWidth - BWidth) div 2; + IconRect.Right := IconRect.Left + BWidth; + IconRect.Bottom := (CHeight + (BHeight + Space + THeight)) div 2; + IconRect.Top := IconRect.Bottom - BHeight; + + TextRect.Left := (CWidth - (TWidth)) div 2; + TextRect.Right := TextRect.Left + TWidth; + TextRect.Bottom := IconRect.Top - Space; + TextRect.Top := TextRect.Bottom - THeight; + + end; + end; + + FXPStyle.DrawIcon(Control, C , B, IconRect, + FMouseinControl, + FIsFocused, + TControl(Control).Enabled, + false, + false, + TControl(Control).IsRightToLeft); + + B.Free; + end; + + if (Control.Tag and 1002) = 1002 then + begin + if TBitBtn(Control).IsRightToLeft then + TextFormat := + DT_RIGHT + DT_VCENTER + else + TextFormat := + DT_LEFT + DT_VCENTER; + TextRect := R; + InflateRect(TextRect, -4,-2); + end; + + FXPStyle.DrawTheText(Control, + Txt, '', C, + TextRect, false, + TControl(Control).Enabled, + TBitBtn(Control).Default, + false, + TControl(Control).IsRightToLeft, + TxtFont, + TextFormat); + + finally + C.Free; + end; +end; + +procedure TControlSubClass.PaintUpDownButton; +var + C: TControlCanvas; + R: TRect; + SelectColor, BorderColor, ArrowColor: TColor; + P: TPoint; + H: integer; + + procedure DrawUpDownButton(ARect: TRect; Arrow: integer; Active: boolean); + begin + if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite; + if Active then + begin + if FLButtonBressed then + begin + BorderColor := FXPStyle.FFSelectBorderColor; + SelectColor := FXPStyle.FCheckedAreaSelectColor ; + ArrowColor := clWhite; + end + else begin + BorderColor := FXPStyle.FFSelectBorderColor; + SelectColor := NewColor(C, FXPStyle.FFSelectColor, 60);//FXPStyle.FFSelectColor; + end; + end + else begin + if Control.Tag = 1000 then + SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor) + else + SelectColor := NewColor(C, FXPStyle.FFSelectColor, FXPStyle.FDimParentColor);//clBtnFace; + BorderColor := NewColor(C, TControl(Control).Parent.Brush.Color, 80);//SelectColor; + end; + + C.Pen.Color := BorderColor; + C.Brush.Color := SelectColor; + C.Font.Color := ArrowColor; + + if C.Pixels[ARect.Left, ARect.Top] <> ColorToRGB(BorderColor) then begin + C.Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom); + C.Pen.Color := ArrowColor; + DrawArrow(C, ARect.Left + ((ARect.Right - ARect.Left) div 2), + ARect.Top + ((ARect.Bottom - ARect.Top) div 2) -2, Arrow); + end; + end; + +begin + C := TControlCanvas.Create; + try + C.Control := Control; + R := Control.ClientRect; + + H := (R.Bottom - R.Top) div 2; + P := Control.ScreenToClient(Mouse.CursorPos); + DrawUpDownButton(Rect(R.Left, R.Top, R.Right, R.Top + H), 0, + TControl(Control).Enabled and FMouseInControl and (P.Y < H)); + DrawUpDownButton(Rect(R.Left, R.Bottom - H, R.Right, R.Bottom), 1, + TControl(Control).Enabled and FMouseInControl and not(P.Y < H)); + finally + C.Free; + end; +end; + +procedure TControlSubClass.PaintGroupBox; +var + C: TControlCanvas; + R, RText: TRect; + ShadowColor, LightColor: TColor; + TextHeight, TextWidth: integer; + Text: string; +begin + + if FMsg <> WM_PAINT then exit; + C := TControlCanvas.Create; + try + C.Control := Control; + + R := Control.ClientRect; + C.Font.Assign (TGroupBox(Control).Font); + C.Font.Height := TGroupBox(Control).Font.Height; + Text := TGroupBox(Control).Caption; + + TextHeight := C.TextHeight(Text); + TextWidth := C.TextWidth(Text); + if Length(Text) = 0 then + TextHeight := C.TextHeight(' '); + ShadowColor := GetShadeColor(C, TGroupBox(Control).color, 60); + LightColor := NewColor(C, TGroupBox(Control).color, 60); + + InflateRect(R,-1, -1); + Inc(R.Top, (TextHeight)-1); + C.Brush.Style := bsClear; + C.Pen.Color := TGroupBox(Control).Color; // Control Color; + C.Rectangle (R.Left, R.Top, R.Right, R.Bottom); + + + //----Draw the outer Frame + R := Control.ClientRect; + Inc(R.Top, (TextHeight div 2)-1); + C.Pen.Color := TGroupBox(Control).Color; + C.MoveTo(R.Left + 1, R.Top); // Repeat + C.LineTo(R.Left + 1, R.Bottom); + if TGroupBox(Control).Ctl3D then + Frame3D(C, R, LightColor, ShadowColor, 1) + else + Frame3D(C, R, ShadowColor, ShadowColor, 1); + + + // Fill Upper part (outside frame) + R := Control.ClientRect; + R.Bottom := R.Top + (TextHeight div 2) + 1; + C.Brush.Style := bsSolid; + C.Brush.Color := Control.Parent.Brush.Color; // Parent Color; + C.Pen.Color := C.Brush.Color; + C.FillRect(R); + + + if Control.IsRightToLeft then + begin + C.TextFlags := ETO_RTLREADING; + RText.Right := R.Right - 9; + RText.Left := RText.Right - TextWidth; + end + else + begin + RText.Left := R.Left + 9; + RText.Right := RText.Left + TextWidth; + end; + + RText.Top := R.Top ; + RText.Bottom := R.Top + TextHeight; + + //(inside frame) + InflateRect(R, -1, 0); + R.Top := R.Bottom; + R.Bottom := R.Top + (TextHeight div 2) + 1; + C.Brush.Style := bsSolid; + R.Left := RText.Left; + R.Right := RText.Right; + C.Brush.Color := TGroupBox(Control).Color; // Control Color; + C.Pen.Color := C.Brush.Color; + C.FillRect(R); + + R.Right := Control.ClientRect.Right; + + C.MoveTo(R.Right-2, R.Top); + C.LineTo(R.Right-2, RText.Bottom); + + C.Brush.Style := bsClear; + if Control.IsRightToLeft then + C.TextFlags := ETO_RTLREADING; + + C.TextRect (RText, RText.Left, RText.Top, Text); + + // Draw Upper Line + R := Control.ClientRect; + Inc(R.Top, (TextHeight div 2) + 1); + if TGroupBox(Control).Ctl3D then + C.Pen.Color := LightColor + else + C.Pen.Color := ShadowColor; + C.MoveTo(R.Left, R.Top); + C.LineTo(RText.Left, R.Top); + + C.MoveTo(RText.Right, R.Top); + C.LineTo(R.Right -1, R.Top); + + finally + C.Free; + end; +end; + +procedure TControlSubClass.PaintPanel; +var + C: TControlCanvas; + R: TRect; + ShadowColor, LightColor: TColor; +begin + if FMsg <> WM_PAINT then exit; + C := TControlCanvas.Create; + try + C.Control := Control; + + R := Control.ClientRect; + ShadowColor := GetShadeColor(C, TPanel(Control).color, 60); + LightColor := NewColor(C, TPanel(Control).color, 60); + if TPanel(Control).BevelOuter <> bvNone then + begin + if TPanel(Control).BevelOuter = bvLowered then + Frame3D(C, R, ShadowColor, LightColor, TPanel(Control).BevelWidth) + else + Frame3D(C, R, LightColor, ShadowColor, TPanel(Control).BevelWidth); + end; + + if TPanel(Control).BevelInner <> bvNone then + begin + InflateRect(R, -TPanel(Control).BorderWidth, -TPanel(Control).BorderWidth); + + if TPanel(Control).BevelInner = bvLowered then + Frame3D(C, R, ShadowColor, LightColor, TPanel(Control).BevelWidth) + else + Frame3D(C, R, LightColor, ShadowColor, TPanel(Control).BevelWidth); + end; + finally + C.Free; + end; + +end; + +type + TCastWinControl = class(TWinControl); + +procedure TControlSubClass.PaintNCWinControl; +var + DC: HDC; + C: TControlCanvas; + R: TRect; + BorderColor: TColor; + +begin + C := TControlCanvas.Create; + DC := GetWindowDC(TWinControl(Control).Handle); + try + C.Control := Control; + C.Handle := DC; + + FXPStyle.SetGlobalColor(C); + + if (FMouseInControl) or (FIsFocused) then + begin + if FBorderStyle = bsSingle then + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 60) + else + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 80); + end + else + begin + if FBorderStyle = bsSingle then + borderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60) + else + borderColor := Control.Parent.Brush.Color; + end; + + if TCastWinControl(Control).Ctl3D <> false then + begin + FBuilding := true; + TCastWinControl(Control).Ctl3D := false; + end; + + C.Pen.Color := BorderColor; + C.Brush.Style := bsClear; + + R := Rect(0, 0, Control.Width, Control.Height); + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + finally + C.Free; + ReleaseDC(TWinControl(Control).Handle, DC); + end; +end; + +procedure TControlSubClass.PaintProgressBar; +var + DC: HDC; + C: TControlCanvas; + R: TRect; + BorderColor: TColor; + +begin + C := TControlCanvas.Create; + DC := GetWindowDC(TWinControl(Control).Handle); + try + C.Control := Control; + C.Handle := DC; + + if (FMouseInControl) then + BorderColor := FXPStyle.FFSelectBorderColor + else + BorderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60); + + C.Pen.Color := BorderColor; + C.Brush.Style := bsClear; + + R := Rect(0, 0, Control.Width, Control.Height); + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + finally + C.Free; + ReleaseDC(TWinControl(Control).Handle, DC); + end; +end; + +procedure TControlSubClass.PaintHotKey; +var + DC: HDC; + C: TControlCanvas; + R: TRect; + BorderColor: TColor; + +begin + C := TControlCanvas.Create; + DC := GetWindowDC(TWinControl(Control).Handle); + try + C.Control := Control; + C.Handle := DC; + + FXPStyle.SetGlobalColor(C); + + if (FMouseInControl) or (FIsFocused) then + BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 60) + else + BorderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60); + + C.Pen.Color := BorderColor; + C.Brush.Style := bsClear; + + R := Rect(0, 0, Control.Width, Control.Height); + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + InflateRect(R, -1, -1); + C.Pen.Color := clWindow; + C.Rectangle(R.Left, R.Top, R.Right, R.Bottom); + + finally + C.Free; + ReleaseDC(TWinControl(Control).Handle, DC); + end; +end; + +// UCXPStyleManager +// +// Uwe Runkel, uwe@runkel.info +// +// Enable FXPStyle to be used globally (all windows in the application use XPStyle). +// Hence you don't need more than one instance in an application. However it is also +// possible to have more than one instance. But only one instance is used for subclassing. +// If this instance is destroyed the manager looks if there is another instance which is +// allowed to subclass. + +constructor TUCXPStyleManager.Create; +begin + inherited Create; + FXPStyleList := TList.Create; // list of XPStyle components in the application + FFormList := TList.Create; // list of subclassed forms + FPendingFormsList := TList.Create; // list of forms inserted but not subclassed yet + FDisableSubclassing := false; // This disables the UCXPStyleManager + FActiveXPStyle := nil; // Currently for subclassing used XPStyle + // if this is nil no subclassing is done. + {the If condition was added because sometimes it freezes delphi when + more than two windows with the UCXPStyle component are opened and the closed} + + if not (csDesigning in Application.ComponentState) then + Application.HookMainWindow(MainWindowHook); +end; + +destructor TUCXPStyleManager.Destroy; +begin +{Bret Goldsmith bretg@yahoo.com} +{alexs } + {the If condition was added because sometimes it freezes delphi when + more than two windows with the UCXPStyle component are opened and the closed} + if not (csDesigning in Application.ComponentState) then + Application.UnhookMainWindow(MainWindowHook); + + FPendingFormsList.Free; + FXPStyleList.Free; + FFormList.Free; + inherited; +end; + +// A component has been inserted or removed, if it is a form and subclassing is +// allowed then subclass it, so this form doesn't need a XPStyle component as well +procedure TUCXPStyleManager.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + if (FActiveXPStyle = nil) or FDisableSubclassing then Exit; + case AOperation of + opInsert: + // At this place we cannot subclass the control because it did not yet get its + // initial window procedure. + // So we add it to an intermediate list and subclass it at a later moment. + if (AComponent is TCustomForm) and (FPendingFormsList.IndexOf(AComponent) < 0) then + FPendingFormsList.Add(AComponent); + opRemove: + if (AComponent is TWinControl) then + begin + if AComponent is TCustomForm then begin + // Remove the destroyed form from any form list if it is still there. + FPendingFormsList.Remove(AComponent); + FFormList.Remove(AComponent); + end; + end; + end; +end; + +// Add some XPStyle to the manager +procedure TUCXPStyleManager.Add(AXPStyle: TUCXPStyle); +begin + FXPStyleList.Add(AXPStyle); + FFormList.Add(AXPStyle.Form); + if (FActiveXPStyle = nil) and AXPStyle.Active and not(AXPStyle.DisableSubclassing) and + not(FDisableSubclassing) then + begin + FActiveXPStyle := AXPStyle; + CollectForms; + end; +end; + +// Remove some XPStyle from the manager +procedure TUCXPStyleManager.Delete(AXPStyle: TUCXPStyle); +begin + if AXPStyle = FActiveXPStyle then + UpdateActiveXPStyle(AXPStyle); + FXPStyleList.Remove(AXPStyle); +end; + +// Select a new ActiveXPStyle (except the one given in the parameter) +procedure TUCXPStyleManager.UpdateActiveXPStyle(AXPStyle: TUCXPStyle); +var + Cnt : integer; + XPM : TUCXPStyle; + Item: TControlSubClass; + Comp: TControlSubClass; + +begin + XPM := FindSubclassingXPStyle(AXPStyle); + if XPM = nil then + begin + FPendingFormsList.Clear; + if not Assigned(Application.MainForm) then Exit; + for Cnt := 0 to FFormList.Count - 1 do + if (AXPStyle = nil) or (FFormList[Cnt] <> AXPStyle.Form) then + RemoveChildSubclassing(TCustomForm(FFormList[Cnt])); + FFormList.Clear; + FActiveXPStyle := XPM; + end + else begin + if FActiveXPStyle = nil then + begin + FActiveXPStyle := XPM; + CollectForms; + end + else begin + for Cnt := 0 to FActiveXPStyle.ComponentCount - 1 do + if (FActiveXPStyle.Components[Cnt] is TControlSubClass) then + begin + Comp := FActiveXPStyle.Components[Cnt] as TControlSubClass; + if (AXPStyle <> nil) and not(AXPStyle.Form.ContainsControl(Comp.Control)) then + begin + Item := TControlSubClass.Create(XPM); + Item.Control := Comp.Control; + Item.orgWindowProc := Comp.orgWindowProc; + Item.Control.WindowProc := Item.ControlSubClass; + Item.FXPStyle := XPM; + Item.FCtl3D := Comp.FCtl3D; + Item.FBorderStyle := Comp.FBorderStyle; + {Item.FOnDrawCell := Comp.FOnDrawCell;} + Item.FDefaultDrawing := Comp.FDefaultDrawing; + Item.FSelCol := Comp.FSelCol; + Item.FSelRow := Comp.FSelRow; + end; + end; + FActiveXPStyle := XPM; + end; + end; +end; + +// Find an XPStyle which can be used for subclassing +function TUCXPStyleManager.FindSubclassingXPStyle(Exclude: TUCXPStyle): TUCXPStyle; +var + XPM: TUCXPStyle; + Cnt: integer; + +begin + Result := nil; + if (FXPStyleList.Count = 0) or FDisableSubclassing then Exit; + Cnt := 0; + repeat + XPM := TUCXPStyle(FXPStyleList[Cnt]); + if XPM.Active and not(XPM.DisableSubclassing) and (XPM <> Exclude) + then Result := XPM; + inc(Cnt); + until (Result <> nil) or (Cnt = FXPStyleList.Count); +end; + +// Listens to messages sent to the application and looks if a window is inserted. +function TUCXPStyleManager.MainWindowHook(var Message: TMessage): boolean; +var + i: integer; + NewForm: TCustomForm; + + FMenuItem: TMenuItem; // +jt + FMenu: TMenu; // +jt + r: TRECT; // +jt + pt: TPOINT; // +jt + hWndM: HWND; // +j +begin + Result := false; + // +ahuser// ahuser: "Andreas Hausladen" + if UCXPStyleManager = nil then // prevent AVs on termination + Exit; + // +ahuser + if Message.Msg = WM_DRAWMENUBORDER then + begin + FMenuItem:=TMenuItem(Message.LParam); + if Assigned(FMenuItem) then + begin + GetMenuItemRect(0,FMenuItem.Parent.Handle,FMenuItem.MenuIndex,r); + FMenu := FMenuItem.Parent.GetParentMenu; + pt.x:=r.Left+(r.Right-r.Left) div 2; + pt.y:=r.Top+(r.Bottom-r.Top) div 2; + hWndM :=WindowFromPoint(pt); + if (hWndM <> 0) and Assigned(FActiveXPStyle) then //Rappido 2003 09 13 + FActiveXPStyle.DrawWindowBorder(hWndM, FMenu.IsRightToLeft); + end; + end; + + if Message.Msg = WM_DRAWMENUBORDER2 then + begin + hWndM := HWND(Message.LParam); + if (hWndM <> 0) and Assigned(FActiveXPStyle) then //Rappido 2003 09 13 + FActiveXPStyle.DrawWindowBorder(hWndM, boolean(Message.WParam)); + end; + + if (Assigned(FPendingFormsList)) and (FPendingFormsList <> nil) then + try + if (FPendingFormsList.Count > 0) then + begin + for i := 0 to FPendingFormsList.Count - 1 do begin + NewForm := TCustomForm(FPendingFormsList[i]); + if FFormList.IndexOf(NewForm) < 0 then begin + FFormList.Add(NewForm); + if not(FDisableSubclassing) then + FActiveXPStyle.InitItems(NewForm, true, true); + end; + end; + FPendingFormsList.Clear; + end; + except + end; + + +end; + +// Collect all forms of the application and subclass them +procedure TUCXPStyleManager.CollectForms; +var + FCnt, CCnt: integer; + HasXPStyle : boolean; + +begin + if not FDisableSubclassing then + for FCnt := 0 to Screen.FormCount - 1 do + if (FFormList.IndexOf(Screen.Forms[FCnt]) < 0) and (Screen.Forms[FCnt].Tag <> 999) then + begin + HasXPStyle := false; + for CCnt := 0 to Screen.Forms[FCnt].ComponentCount - 1 do + HasXPStyle := HasXPStyle or (Screen.Forms[FCnt].Components[CCnt] is TUCXPStyle); + if not(HasXPStyle) then + FPendingFormsList.Add(Screen.Forms[FCnt]); + end; +end; + +// Remove subclassing from the original components +procedure TUCXPStyleManager.RemoveChildSubclassing(AForm: TCustomForm); +var + Cnt : integer; + Comp : TComponent; + Control: TControl; + +begin +//exit; + for Cnt := FActiveXPStyle.ComponentCount - 1 downto 0 do begin + Comp := FActiveXPStyle.Components[Cnt]; + if (Comp is TControlSubClass) then begin + Control := TControlSubClass(Comp).Control; + if AForm.ContainsControl(Control) then begin + try + Control.WindowProc := TControlSubClass(Comp).orgWindowProc; + if Control is TCustomEdit then begin + TEdit(Control).Ctl3D := TControlSubClass(Comp).FCtl3D; + TEdit(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle; + end; + if Control.ClassName = 'TDBLookupComboBox' then + TComboBox(Control).Ctl3D := TControlSubClass(Comp).FCtl3D; + if Control is TCustomListBox then begin + TListBox(Control).Ctl3D := TControlSubClass(Comp).FCtl3D; + TListBox(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle; + end; + if Control is TCustomListView then begin + TListView(Control).Ctl3D := TControlSubClass(Comp).FCtl3D; + TListView(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle; + end; + if Control is TCustomTreeView then begin + TTreeView(Control).Ctl3D := TControlSubClass(Comp).FCtl3D; + TTreeView(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle; + end; + except + end; + end; + end; + end; +end; + +// Add a form manually to the current XPStyle +procedure TUCXPStyleManager.AddForm(AForm: TCustomForm); +begin + if FPendingFormsList.IndexOf(AForm) < 0 then + FPendingFormsList.Add(AForm); +end; + +// Remove a form manually from the current XPStyle +procedure TUCXPStyleManager.RemoveForm(AForm: TCustomForm); +begin + if FPendingFormsList.IndexOf(AForm) >= 0 then + FPendingFormsList.Remove(AForm); + if FFormList.IndexOf(AForm) >= 0 then + FFormList.Remove(AForm); +end; + +// Disable/Enable subclassing by the manager +procedure TUCXPStyleManager.SetDisableSubclassing(AValue: boolean); +begin + if FDisableSubclassing = AValue then Exit; + FDisableSubclassing := AValue; + UpdateActiveXPStyle(nil); +end; + +// Check if a Form is subclassed +function TUCXPStyleManager.IsFormSubclassed(AForm: TCustomForm): boolean; +begin + Result := ((FFormList <> nil) and (FFormList.IndexOf(AForm) >= 0)) or + ((FPendingFormsList <> nil) and (FPendingFormsList.IndexOf(AForm) >= 0)); +end; + +// Check if a Component is subclassed +function TUCXPStyleManager.IsComponentSubclassed(AComponent: TComponent): boolean; +var + Cnt: integer; + +begin + Result := false; + with FActiveXPStyle do + for Cnt := 0 to ComponentCount - 1 do + if Components[Cnt] is TControlSubClass then + if TControlSubClass(Components[Cnt]).Control = TControl(AComponent) then + begin + Result := True; + Break; // ahuser + end; +end; +initialization + InitControls; + //else + // exit; +finalization + DoneControls; +end. + diff --git a/internal/2.31RC1/1/Source/UcConsts_Language.pas b/internal/2.31RC1/1/Source/UcConsts_Language.pas new file mode 100644 index 0000000..c66c247 --- /dev/null +++ b/internal/2.31RC1/1/Source/UcConsts_Language.pas @@ -0,0 +1,971 @@ +unit UcConsts_Language; + +interface + +Uses SysUtils; + +Type TUCLanguage = ( ucPortuguesBr, ucEnglish, ucSpanish, ucFrench ); + +Const MaxArray = 227; + +Const UC_PTBR : Array [0..MaxArray,0..1] of string = ( + ('Const_Contr_TitleLabel','Seleção de Componentes do Form. :'), + ('Const_Contr_GroupLabel','Grupo :') , + ('Const_Contr_CompDispLabel','Componentes Disponíveis :'), + ('Const_Contr_CompSelLabel','Componentes Selecionados :'), + ('Const_Contr_BtOK','&OK'), + ('Const_Contr_BTCancel','&Cancelar'), + ('Const_Contr_DescCol','Descrição'), + ('Const_Contr_BtSellAllHint','Selecionar Todos'), + ('Const_Contr_BtSelHint','Selecionar'), + ('Const_Contr_BtUnSelHint','Desmarcar'), + ('Const_Contr_BtUnSelAllHint','Desmarcar Todos'), + ('Const_Msgs_BtNew','&Nova Mensagem'), + ('Const_Msgs_BtReplay','&Responder'), + ('Const_Msgs_BtForward','E&ncaminhar'), + ('Const_Msgs_BtDelete','&Excluir'), + ('Const_Msgs_BtClose','&Fechar'), + ('Const_Msgs_WindowCaption','Mensagens do Sistema'), + ('Const_Msgs_ColFrom','Remetente'), + ('Const_Msgs_ColSubject','Assunto'), + ('Const_Msgs_ColDate','Data'), + ('Const_Msgs_PromptDelete','Confirma excluir as mensagens selecionadas ?'), + ('Const_Msgs_PromptDelete_WindowCaption','Apagar mensagens'), + ('Const_Msgs_NoMessagesSelected','Não existem mensagens selecionadas'), + ('Const_Msgs_NoMessagesSelected_WindowCaption','Informação'), + ('Const_MsgRec_BtClose','&Fechar'), + ('Const_MsgRec_WindowCaption','Mensagem'), + ('Const_MsgRec_Title','Mensagem Recebida'), + ('Const_MsgRec_LabelFrom','De :'), + ('Const_MsgRec_LabelDate','Data'), + ('Const_MsgRec_LabelSubject','Assunto'), + ('Const_MsgRec_LabelMessage','Mensagem'), + ('Const_MsgSend_BtSend','&Enviar'), + ('Const_MsgSend_BtCancel','&Cancelar'), + ('Const_MsgSend_WindowCaption','Mensagem'), + ('Const_MsgSend_Title','Enviar Nova Mensagem'), + ('Const_MsgSend_GroupTo','Para'), + ('Const_MsgSend_RadioUser','Usuário :'), + ('Const_MsgSend_RadioAll','Todos'), + ('Const_MsgSend_GroupMessage','Mensagem'), + ('Const_MsgSend_LabelSubject','Assunto'), + ('Const_MsgSend_LabelMessageText','Texto da mensagem'), + ('MsgExceptConnection','Não informado o Connection, Transaction ou Database do componente %s'), + ('MsgExceptTransaction','Não informado o Transaction do componente %s'), + ('MsgExceptDatabase','Não informado o Database do componente %s'), + ('MsgExceptPropriedade','Favor informar a propriedade %s'), + ('MsgExceptUserMngMenu','Informe na propriedade UsersForm.MenuItem ou UsersForm.Action o Item responsável pelo controle de usuários'), + ('MsgExceptUserProfile','Informe na propriedade UsersProfile.MenuItem ou UsersProfile.Action o Item responsável pelo controle de Perfil de usuários'), + ('MsgExceptChagePassMenu','Informe na propriedade ChangePasswordForm.MenuItem or .Action o Item que permite ao usuário alterar sua senha'), + ('MsgExceptAppID','Na propriedade ApplicationID informe um nome para identificar a aplicação na tabela de permissões'), + ('MsgExceptUsersTable','Na propriedade TableUsers informe o nome da tabela que será criada para armazenar os dados dos usuários'), + ('MsgExceptRightsTable','Na propriedade TableRights informe o nome da tabela que será criada para armazenar as permissões dos usuários'), + ('MsgExceptConnector','Propriedade DataConnector não definida!'), + ('Const_Men_AutoLogonError','Falha de Auto Logon!' + #13 + #10 + 'Informe um usuário e senha válidos.'), + ('Const_Men_SenhaDesabitada','Retirada senha do Login %s'), + ('Const_Men_SenhaAlterada','Senha alterada com sucesso!'), + ('Const_Men_MsgInicial','ATENÇÃO Login Inicial:' + #13 + #10 + #13 + #10 + 'Usuário : :user' + #13 + #10 + 'Senha : :password' + #13 + #10 + #13 + #10 + 'Defina as permissões para este usuário.'), + ('Const_Men_MaxTentativas','%d Tentativas de login inválido. Por motivos de segurança o ' + #13 + #10 + 'sistema será fechado.'), + ('Const_Men_LoginInvalido','Usuário ou Senha inválidos!'), + ('Const_Men_UsuarioExiste','O Usuário "%s" já está cadastrado no sistema !!'), + ('Const_Men_PasswordExpired','Atenção, sua senha expirou, favor troca-la'), + ('Const_Log_BtCancelar','&Cancelar'), + ('Const_Log_BtOK','&OK'), + ('Const_Log_LabelSenha','Senha :'), + ('Const_Log_LabelUsuario','Usuário :'), + ('Const_Log_WindowCaption','Login'), + ('Const_Log_LbEsqueciSenha','Esqueci a senha'), + ('Const_Log_MsgMailSend','A senha foi enviada para o seu email.'), + ('Const_Log_LabelTentativa','Tentativa : '), + ('Const_Log_LabelTentativas','Máximo de Tentativas : '), + ('Const_LogC_WindowCaption','Segurança'), + ('Const_LogC_LabelDescricao','Log do Sistema'), + ('Const_LogC_LabelUsuario','Usuário :'), + ('Const_LogC_LabelData','Data :'), + ('Const_LogC_LabelNivel','Nível mínimo :'), + ('Const_LogC_ColunaAppID','AppID'), + ('Const_LogC_ColunaNivel','Nível'), + ('Const_LogC_ColunaMensagem','Mensagem'), + ('Const_LogC_ColunaUsuario','Usuário'), + ('Const_LogC_ColunaData','Data'), + ('Const_LogC_BtFiltro','&Aplicar Filtro'), + ('Const_LogC_BtExcluir','&Excluir Log'), + ('Const_LogC_BtFechar','&Fechar'), + ('Const_LogC_ConfirmaExcluir','Confirma excluir todos os registros de log selecionados ?'), + ('Const_LogC_ConfirmaDelete_WindowCaption','Confirma exclusão'), + ('Const_LogC_Todos','Todos'), + ('Const_LogC_Low','Baixo'), + ('Const_LogC_Normal','Normal'), + ('Const_LogC_High','Alto'), + ('Const_LogC_Critic','Crítico'), + ('Const_LogC_ExcluirEfectuada','Exclusão de log´s do sistema : Usuário = "%s" | Data = %s a %s | Nível <= %s'), + ('Const_Cad_WindowCaption','Segurança'), + ('Const_Cad_LabelDescricao','Cadastro de Usuários'), + ('Const_Cad_ColunaNome','Nome'), + ('Const_Cad_ColunaLogin','Login'), + ('Const_Cad_ColunaEmail','Email'), + ('Const_Cad_BtAdicionar','&Adicionar'), + ('Const_Cad_BtAlterar','A<erar'), + ('Const_Cad_BtExcluir','&Excluir'), + ('Const_Cad_BtPermissoes','A&cessos'), + ('Const_Cad_BtSenha','&Senha'), + ('Const_Cad_BtFechar','&Fechar'), + ('Const_Cad_ConfirmaExcluir','Confirma excluir o usuário "%s" ?'), + ('Const_Cad_ConfirmaDelete_WindowCaption','Excluir usuário'), + ('Const_Prof_WindowCaption','Segurança'), + ('Const_Prof_LabelDescricao','Perfil de Usuários'), + ('Const_Prof_ColunaNome','Perfil'), + ('Const_Prof_BtAdicionar','&Adicionar'), + ('Const_Prof_BtAlterar','A<erar'), + ('Const_Prof_BtExcluir','&Excluir'), + ('Const_Prof_BtPermissoes','A&cessos'), + ('Const_Prof_BtSenha','&Senha'), + ('Const_Prof_BtFechar','&Fechar'), + ('Const_Prof_ConfirmaExcluir','Existem usuários com o perfil "%s". Confirma excluir?'), + ('Const_Prof_ConfirmaDelete_WindowCaption','Delete profile'), + ('Const_Inc_WindowCaption','Cadastro de Usuários'), + ('Const_Inc_LabelAdicionar','Adicionar Usuário'), + ('Const_Inc_LabelAlterar','Alterar Usuário'), + ('Const_Inc_LabelNome','Nome :'), + ('Const_Inc_LabelLogin','Login :'), + ('Const_Inc_LabelEmail','Email :'), + ('Const_Inc_LabelPerfil','Perfil :'), + ('Const_Inc_CheckPrivilegiado','Usuário privilegiado'), + ('Const_Inc_BtGravar','&Gravar'), + ('Const_Inc_BtCancelar','Cancelar'), + ('Const_Inc_CheckEspira','Senha do usuário não expira'), + ('Const_Inc_Dia','Dias'), + ('Const_Inc_ExpiraEm','Expira em'), + ('Const_PInc_WindowCaption','Perfil de Usuários'), + ('Const_PInc_LabelAdicionar','Adicionar Perfil'), + ('Const_PInc_LabelAlterar','Alterar Perfil'), + ('Const_PInc_LabelNome','Descrição :'), + ('Const_PInc_BtGravar','&Gravar'), + ('Const_PInc_BtCancelar','Cancelar'), + ('Const_Perm_WindowCaption','Segurança'), + ('Const_Perm_LabelUsuario','Permissões do Usuário :'), + ('Const_Perm_LabelPerfil','Permissões do Perfil :'), + ('Const_Perm_PageMenu','Itens do Menu'), + ('Const_Perm_PageActions','Ações'), + ('Const_Perm_PageControls','Controles'), + ('Const_Perm_BtLibera','&Liberar'), + ('Const_Perm_BtBloqueia','&Bloquear'), + ('Const_Perm_BtGravar','&Gravar'), + ('Const_Perm_BtCancelar','&Cancelar'), + ('Const_Troc_WindowCaption','Segurança'), + ('Const_Troc_LabelDescricao','Trocar Senha'), + ('Const_Troc_LabelSenhaAtual','Senha Atual :'), + ('Const_Troc_LabelNovaSenha','Nova Senha :'), + ('Const_Troc_LabelConfirma','Confirmação :'), + ('Const_Troc_BtGravar','&Gravar'), + ('Const_Troc_BtCancelar','Cancelar'), + ('Const_ErrPass_SenhaAtualInvalida','Senha Atual não confere!'), + ('Const_ErrPass_ErroNovaSenha','Os campos: Nova Senha e Confirmação devem ser iguais.'), + ('Const_ErrPass_NovaIgualAtual','Nova senha igual a senha atual'), + ('Const_ErrPass_SenhaObrigatoria','A Senha é obrigatória'), + ('Const_ErrPass_SenhaMinima','A senha deve conter no mínimo %d caracteres'), + ('Const_ErrPass_SenhaInvalida','Proibido utilizar senhas obvias!'), + ('Const_ErrPass_ForcaTrocaSenha','Mudança de senha obrigatória'), + ('Const_DefPass_WindowCaption','Definir senha do usuário : "%s"'), + ('Const_DefPass_LabelSenha','Senha :'), + ('Const_TableUsers_FieldUserID','UCIdUser'), + ('Const_TableUsers_FieldUserName','UCUserName'), + ('Const_TableUsers_FieldLogin','UCLogin'), + ('Const_TableUsers_FieldPassword','UCPassword'), + ('Const_TableUsers_FieldEmail','UCEmail'), + ('Const_TableUsers_FieldPrivileged','UCPrivileged'), + ('Const_TableUsers_FieldTypeRec','UCTypeRec'), + ('Const_TableUsers_FieldProfile','UCProfile'), + ('Const_TableUsers_FieldKey','UCKey'), + ('Const_TableUsers_TableName','UCTabUsers'), + ('Const_TableUsers_FieldDateExpired','UCPASSEXPIRED'), + ('Const_TableUser_FieldUserExpired','UCUserExpired'), + ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'), + ('Const_TableUser_FieldUserInative','UCInative'), + ('Const_TableRights_FieldUserID','UCIdUser'), + ('Const_TableRights_FieldModule','UCModule'), + ('Const_TableRights_FieldComponentName','UCCompName'), + ('Const_TableRights_FieldFormName','UCFormName'), + ('Const_TableRights_FieldKey','UCKey'), + ('Const_TableRights_TableName','UCTabRights'), + ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'), + ('Const_TableUsersLogged_FieldUserID','UCIdUser'), + ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'), + ('Const_TableUsersLogged_FieldMachineName','UCMachineName'), + ('Const_TableUsersLogged_FieldData','UCData'), + ('Const_TableUsersLogged_TableName','UCTabUsersLogged'), + ('Const_Evento_Insert','Inserido'), + ('Const_Evento_Delete','Apagado'), + ('Const_Evento_Edit','Editado'), + ('Const_Evento_NewRecord','Novo registro'), + ('Const_Hist_All','Todos'), + ('Const_Msg_LimpHistorico','Excluir todo o conteúdo do histórico ?'), + ('Const_Msg_MensConfirma','Confirmação'), + ('Const_Msg_LogEmptyHistory','Usuário %s apagou todo o histórico as %s'), + ('Const_LabelDescricao','Histórico de tabelas'), + ('Const_LabelUser','Usuário'), + ('Const_LabelForm','Formulário'), + ('Const_LabelEvento','Evento'), + ('Const_LabelTabela','Tabela'), + ('Const_LabelDataEvento','Data'), + ('Const_LabelHoraEvento','Hora'), + ('Const_Msg_NewRecord','%s inseriu um novo registro'), + ('Const_Hist_TableName','UCTABHistory'), + ('Const_Hist_FieldApplicationID','ApplicationID'), + ('Const_Hist_FieldUserID','UserID'), + ('Const_Hist_FieldEventDate','EventDate'), + ('Const_Hist_FieldEventTime','EventTime'), + ('Const_Hist_FieldForm','Form'), + ('Const_Hist_FieldCaptionForm','FormCaption'), + ('Const_Hist_FieldEvent','Event'), + ('Const_Hist_FieldObs','Obs'), + ('Const_Hist_FieldTableName','tName'), + ('Const_Hist_MsgExceptPropr','Favor informar a propriedade %s'), + ('Const_Hist_BtnFiltro','&Aplicar Filtro'), + ('Const_Hist_BtnExcluir','&Excluir Histórico'), + ('Const_Hist_BtnFechar','&Fechar'), + + ('Const_UserLogged_BtnMsg','&Mensagem'), + ('Const_UserLogged_Refresh','&Atualizar'), + ('Const_UserLogged_LabelDescricao','Usuários Logados'), + ('Const_UserLogged_LabelCaption','Usuários Logados no sistema'), + ('Const_CadColuna_Computer','Computador'), + ('Const_CadColuna_Data','Data'), + ('Const_UserLogged_InputCaption','Mensagem'), + ('Const_UserLogged_InputText','Digite sua mensagem'), + ('Const_UserLogged_MsgSystem','Mensagem do sistema'), + ('Const_Men_LoginInativo','Atenção, seu login esta inativo'), + ('Const_Inc_LabelStatus','Status'), + ('Const_Inc_StatusActive','Ativo'), + ('Const_Inc_StatusDisabled','Inativo') + ); + +{------------------------------------------------------------------------------ } + +Const UC_ENGLISH : Array [0..MaxArray,0..1] of string = ( + ('Const_Contr_TitleLabel','Team of Components of the Form. :'), + ('Const_Contr_GroupLabel','Group:'), + ('Const_Contr_CompDispLabel','Available components:'), + ('Const_Contr_CompSelLabel','Selected components:'), + ('Const_Contr_BtOK','&OK'), + ('Const_Contr_BTCancel','&Cancel'), + ('Const_Contr_DescCol','Description'), + ('Const_Contr_BtSellAllHint','Select All'), + ('Const_Contr_BtSelHint','Select'), + ('Const_Contr_BtUnSelHint','Unselect'), + ('Const_Contr_BtUnSelAllHint','Unselect All'), + ('Const_Msgs_BtNew','&New Message'), + ('Const_Msgs_BtReplay','&Replay'), + ('Const_Msgs_BtForward','F&orward'), + ('Const_Msgs_BtDelete','&Delete'), + ('Const_Msgs_BtClose','&Close'), + ('Const_Msgs_WindowCaption','Messages of the System'), + ('Const_Msgs_ColFrom','From'), + ('Const_Msgs_ColSubject','Subject'), + ('Const_Msgs_ColDate','Date'), + ('Const_Msgs_PromptDelete','It confirms exclusion of the selected messages?'), + ('Const_Msgs_PromptDelete_WindowCaption','Delete messages'), + ('Const_Msgs_NoMessagesSelected','No Messages selected'), + ('Const_Msgs_NoMessagesSelected_WindowCaption','Information'), + ('Const_MsgRec_BtClose','&Close'), + ('Const_MsgRec_WindowCaption','Message'), + ('Const_MsgRec_Title','Received message'), + ('Const_MsgRec_LabelFrom','From:'), + ('Const_MsgRec_LabelDate','Date'), + ('Const_MsgRec_LabelSubject','Subject'), + ('Const_MsgRec_LabelMessage','Message'), + ('Const_MsgSend_BtSend','&Send'), + ('Const_MsgSend_BtCancel','&Cancel'), + ('Const_MsgSend_WindowCaption','Message'), + ('Const_MsgSend_Title','Send New Message'), + ('Const_MsgSend_GroupTo','To'), + ('Const_MsgSend_RadioUser','User:'), + ('Const_MsgSend_RadioAll','All'), + ('Const_MsgSend_GroupMessage','Message'), + ('Const_MsgSend_LabelSubject','Subject'), + ('Const_MsgSend_LabelMessageText','Message text'), + ('MsgExceptConnection','Done not informed the Connection, Transaction or Database component %s'), + ('MsgExceptTransaction','Done not informed the Transaction component %s'), + ('MsgExceptDatabase','Done not informed the Database do component %s'), + ('MsgExceptPropriedade','Inform the property %s'), + ('MsgExceptUserMngMenu','Inform in the property UsersForm.MenuItem or UsersForm.Action the item responsible for the users control'), + ('MsgExceptUserProfile','Inform in the property UsersProfile.MenuItem or UsersProfile.Action the Item responsible for the control of users Profile '), + ('MsgExceptChagePassMenu','Inform in the property ChangePasswordForm.MenuItem or .Action the Item that allows to a user to alter his password'), + ('MsgExceptAppID','In the property "ApplicationID" inform a name to identify the application in the chart of permissions'), + ('MsgExceptUsersTable','In the property "TableUsers" inform the name of the chart that will be created to store the data of the users '), + ('MsgExceptRightsTable','In the property "TableRights" inform the name of the chart that will be created to store the permissions of the users '), + ('MsgExceptConnector','The property DataConnector not defined!'), + ('Const_Men_AutoLogonError','Fault of Car Logon !' + #13 + #10 + 'Inform a valid user and password.'), + ('Const_Men_SenhaDesabitada','Retired password of the Login %s'), + ('Const_Men_SenhaAlterada','Password altered with success!'), + ('Const_Men_MsgInicial','ATTENTION, Inicial Login :' + #13 + #10 + #13 + #10 + 'User: :user' + #13 + #10 + 'Password : :password '+ #13 + #10 + #13 + #10 + 'Define the permissions for this user.'), + ('Const_Men_MaxTentativas','%d Attempts of login invalid. By reasons of security the system will be closed.'), + ('Const_Men_LoginInvalido','User invalids or password !'), + ('Const_Men_UsuarioExiste','The User "%s" is already set up in the system !!'), + ('Const_Men_PasswordExpired','Attention, his sign died, favor exchanges it '), + ('Const_Log_BtCancelar','&Cancel'), + ('Const_Log_BtOK','&OK'), + ('Const_Log_LabelSenha','Password :'), + ('Const_Log_LabelUsuario','User :'), + ('Const_Log_WindowCaption','Login'), + ('Const_Log_LbEsqueciSenha','I forgot the password'), + ('Const_Log_MsgMailSend','The password was sent for his email .'), + ('Const_Log_LabelTentativa','Attempt : '), + ('Const_Log_LabelTentativas','Max of Attempts: '), + ('Const_LogC_WindowCaption','Security'), + ('Const_LogC_LabelDescricao','Log of system'), + ('Const_LogC_LabelUsuario','User :'), + ('Const_LogC_LabelData','Date :'), + ('Const_LogC_LabelNivel','Least level:'), + ('Const_LogC_ColunaAppID','AppID'), + ('Const_LogC_ColunaNivel','Level '), + ('Const_LogC_ColunaMensagem','Message'), + ('Const_LogC_ColunaUsuario','User'), + ('Const_LogC_ColunaData','Date'), + ('Const_LogC_BtFiltro','&Apply Filter'), + ('Const_LogC_BtExcluir','&Erase Log'), + ('Const_LogC_BtFechar','&Close'), + ('Const_LogC_ConfirmaExcluir','It confirms to exclude all the registers of log selected ?'), + ('Const_LogC_ConfirmaDelete_WindowCaption','Delete confirmation'), + ('Const_LogC_Todos','All'), + ('Const_LogC_Low','Low'), + ('Const_LogC_Normal','Normal'), + ('Const_LogC_High','High'), + ('Const_LogC_Critic','Critic'), + ('Const_LogC_ExcluirEfectuada','Deletion of system log done: User = "%s" | Date = %s a %s | Level <= %s'), + ('Const_Cad_WindowCaption','Security'), + ('Const_Cad_LabelDescricao','Users register '), + ('Const_Cad_ColunaNome','Name'), + ('Const_Cad_ColunaLogin','Login'), + ('Const_Cad_ColunaEmail','Email'), + ('Const_Cad_BtAdicionar','&Add'), + ('Const_Cad_BtAlterar','A<er'), + ('Const_Cad_BtExcluir','&Erase'), + ('Const_Cad_BtPermissoes','A&ccesses'), + ('Const_Cad_BtSenha','&Password'), + ('Const_Cad_BtFechar','&Close'), + ('Const_Cad_ConfirmaExcluir','Confirm erase the user "%s" ?'), + ('Const_Cad_ConfirmaDelete_WindowCaption','Delete user'), + ('Const_Prof_WindowCaption','Security'), + ('Const_Prof_LabelDescricao','Users profile '), + ('Const_Prof_ColunaNome','Profile'), + ('Const_Prof_BtAdicionar','&Add'), + ('Const_Prof_BtAlterar','A<er'), + ('Const_Prof_BtExcluir','&Delete'), + ('Const_Prof_BtPermissoes','A&ccesses'), + ('Const_Prof_BtSenha','&Password'), + ('Const_Prof_BtFechar','&Close'), + ('Const_Prof_ConfirmaExcluir','There are users with the profile "%s". Confirm erase ?'), + ('Const_Prof_ConfirmaDelete_WindowCaption','Delete profile'), + ('Const_Inc_WindowCaption','Users register '), + ('Const_Inc_LabelAdicionar','Add User'), + ('Const_Inc_LabelAlterar','Change User'), + ('Const_Inc_LabelNome','Name :'), + ('Const_Inc_LabelLogin','Login :'), + ('Const_Inc_LabelEmail','Email :'), + ('Const_Inc_LabelPerfil','Profile :'), + ('Const_Inc_CheckPrivilegiado','Privileged user '), + ('Const_Inc_BtGravar','&Save'), + ('Const_Inc_BtCancelar','Cancel'), + ('Const_Inc_CheckEspira','Password do not expired'), + ('Const_Inc_Dia','Day'), + ('Const_Inc_ExpiraEm','Expired in'), + ('Const_PInc_WindowCaption','Profile the Users'), + ('Const_PInc_LabelAdicionar','Add Profile'), + ('Const_PInc_LabelAlterar','Change Profile '), + ('Const_PInc_LabelNome','Description :'), + ('Const_PInc_BtGravar','&Save'), + ('Const_PInc_BtCancelar','Cancel'), + ('Const_Perm_WindowCaption','Security'), + ('Const_Perm_LabelUsuario','Permissions of the User :'), + ('Const_Perm_LabelPerfil','Permissions of the Profile :'), + ('Const_Perm_PageMenu','Items of the Menu'), + ('Const_Perm_PageActions','Actions'), + ('Const_Perm_PageControls','Controls'), + ('Const_Perm_BtLibera','&Release'), + ('Const_Perm_BtBloqueia','&Block'), + ('Const_Perm_BtGravar','&Save'), + ('Const_Perm_BtCancelar','&Cancel'), + ('Const_Troc_WindowCaption','Security'), + ('Const_Troc_LabelDescricao','Change Password'), + ('Const_Troc_LabelSenhaAtual','Password :'), + ('Const_Troc_LabelNovaSenha','New Password :'), + ('Const_Troc_LabelConfirma','Confirmation :'), + ('Const_Troc_BtGravar','&Save'), + ('Const_Troc_BtCancelar','Cancel'), + ('Const_ErrPass_SenhaAtualInvalida','Current password does not tally!'), + ('Const_ErrPass_ErroNovaSenha','The Field: New Password and Confirmation must be the same.'), + ('Const_ErrPass_NovaIgualAtual','New equal password to current password '), + ('Const_ErrPass_SenhaObrigatoria','The password is compulsory '), + ('Const_ErrPass_SenhaMinima','The password must contain at least %d characters '), + ('Const_ErrPass_SenhaInvalida','When to use password was prohibited you obviate !'), + ('Const_ErrPass_ForcaTrocaSenha','Compulsory change password'), + ('Const_DefPass_WindowCaption','Define Password of the user : "%s"'), + ('Const_DefPass_LabelSenha','Password :'), + ('Const_TableUsers_FieldUserID','UCIdUser'), + ('Const_TableUsers_FieldUserName','UCUserName'), + ('Const_TableUsers_FieldLogin','UCLogin'), + ('Const_TableUsers_FieldPassword','UCPassword'), + ('Const_TableUsers_FieldEmail','UCEmail'), + ('Const_TableUsers_FieldPrivileged','UCPrivileged'), + ('Const_TableUsers_FieldTypeRec','UCTypeRec'), + ('Const_TableUsers_FieldProfile','UCProfile'), + ('Const_TableUsers_FieldKey','UCKey'), + ('Const_TableUsers_TableName','UCTabUsers'), + ('Const_TableUsers_FieldDateExpired','UCPassExpired'), + ('Const_TableUser_FieldUserExpired','UCUserExpired'), + ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'), + ('Const_TableUser_FieldUserInative','UCInative'), + ('Const_TableRights_FieldUserID','UCIdUser'), + ('Const_TableRights_FieldModule','UCModule'), + ('Const_TableRights_FieldComponentName','UCCompName'), + ('Const_TableRights_FieldFormName','UCFormName'), + ('Const_TableRights_FieldKey','UCKey'), + ('Const_TableRights_TableName','UCTabRights'), + ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'), + ('Const_TableUsersLogged_FieldUserID','UCIdUser'), + ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'), + ('Const_TableUsersLogged_FieldMachineName','UCMachineName'), + ('Const_TableUsersLogged_FieldData','UCData'), + ('Const_TableUsersLogged_TableName','UCTabUsersLogged'), + ('Const_Evento_Insert','Insert'), + ('Const_Evento_Delete','Delete'), + ('Const_Evento_Edit','Edit'), + ('Const_Evento_NewRecord','New record'), + ('Const_Hist_All','All'), + ('Const_Msg_LimpHistorico','Clean table history ?'), + ('Const_Msg_MensConfirma','Confirm'), + ('Const_Msg_LogEmptyHistory','User %s erase table history in %s'), + ('Const_LabelDescricao','History of Tables'), + ('Const_LabelUser','User'), + ('Const_LabelForm','Form'), + ('Const_LabelEvento','Event'), + ('Const_LabelTabela','Table'), + ('Const_LabelDataEvento','Date'), + ('Const_LabelHoraEvento','Time'), + ('Const_Msg_NewRecord','%s insert new record'), + + ('Const_Hist_TableName','UCTABHistory'), + ('Const_Hist_FieldApplicationID','ApplicationID'), + ('Const_Hist_FieldUserID','UserID'), + ('Const_Hist_FieldEventDate','EventDate'), + ('Const_Hist_FieldEventTime','EventTime'), + ('Const_Hist_FieldForm','Form'), + ('Const_Hist_FieldCaptionForm','FormCaption'), + ('Const_Hist_FieldEvent','Event'), + ('Const_Hist_FieldObs','Obs'), + ('Const_Hist_FieldTableName','tName'), + ('Const_Hist_MsgExceptPropr','Inform the property %s'), + ('Const_Hist_BtnFiltro','&Apply Filter'), + ('Const_Hist_BtnExcluir','&Erase History'), + ('Const_Hist_BtnFechar','&Close'), + + ('Const_UserLogged_BtnMsg','&Message'), + ('Const_UserLogged_Refresh','&Refresh'), + ('Const_UserLogged_LabelDescricao','Active users'), + ('Const_UserLogged_LabelCaption','Active users in the System'), + ('Const_CadColuna_Computer','Computer'), + ('Const_CadColuna_Data','Date'), + ('Const_UserLogged_InputCaption','Message'), + ('Const_UserLogged_InputText','Input your message'), + ('Const_UserLogged_MsgSystem','Message of system'), + ('Const_Men_LoginInativo','Inactive login'), + ('Const_Inc_LabelStatus','Status'), + ('Const_Inc_StatusActive','Active'), + ('Const_Inc_StatusDisabled','Disabled') + + ); + +{------------------------------------------------------------------------------ } + +Const UC_SPANISH : Array [0..MaxArray,0..1] of string = ( + ('Const_Contr_TitleLabel','Seleccionar Componentes del Formulario:'), + ('Const_Contr_GroupLabel','Grupo:'), + ('Const_Contr_CompDispLabel','Componentes Disponibles:'), + ('Const_Contr_CompSelLabel','Componentes Seleccionados:'), + ('Const_Contr_BtOK','&Aceptar'), + ('Const_Contr_BTCancel','&Cancelar'), + ('Const_Contr_DescCol','Descripción'), + ('Const_Contr_BtSellAllHint','Seleccionar Todo'), + ('Const_Contr_BtSelHint','Seleccionar'), + ('Const_Contr_BtUnSelHint','Deseleccionar'), + ('Const_Contr_BtUnSelAllHint','Deseleccionar Todo'), + ('Const_Msgs_BtNew','&Nuevo Mensaje'), + ('Const_Msgs_BtReplay','&Responder'), + ('Const_Msgs_BtForward','&Reenviar'), + ('Const_Msgs_BtDelete','&Borrar'), + ('Const_Msgs_BtClose','&Cerrar'), + ('Const_Msgs_WindowCaption','Mensajes de Sistema'), + ('Const_Msgs_ColFrom','Remitente'), + ('Const_Msgs_ColSubject','Asunto'), + ('Const_Msgs_ColDate','Fecha'), + ('Const_Msgs_PromptDelete','¿Está seguro de eliminar los mensajes seleccionados?'), + ('Const_Msgs_PromptDelete_WindowCaption','Eliminar mensajes'), + ('Const_Msgs_NoMessagesSelected','!Ningún mensaje seleccionado¡'), + ('Const_Msgs_NoMessagesSelected_WindowCaption','Información'), + ('Const_MsgRec_BtClose','&Cerrar'), + ('Const_MsgRec_WindowCaption','Mensaje'), + ('Const_MsgRec_Title','Mensaje Recibido'), + ('Const_MsgRec_LabelFrom','De:'), + ('Const_MsgRec_LabelDate','Fecha'), + ('Const_MsgRec_LabelSubject','Asunto'), + ('Const_MsgRec_LabelMessage','Mensaje'), + ('Const_MsgSend_BtSend','&Enviar'), + ('Const_MsgSend_BtCancel','&Cancelar'), + ('Const_MsgSend_WindowCaption','Mensaje'), + ('Const_MsgSend_Title','Enviar Nuevo Mensaje'), + ('Const_MsgSend_GroupTo','Para:'), + ('Const_MsgSend_RadioUser','Usuario:'), + ('Const_MsgSend_RadioAll','Todos'), + ('Const_MsgSend_GroupMessage','Mensaje'), + ('Const_MsgSend_LabelSubject','Asunto'), + ('Const_MsgSend_LabelMessageText','Texto del mensaje'), + ('MsgExceptConnection','¡Valor No Válido para la propiedad Connection del componente %s!'), + ('MsgExceptTransaction','¡Valor No Válido para la propiedad Transaction del componente %s!'), + ('MsgExceptDatabase','¡Valor No Válido para la propiedad Database del componente %s!'), + ('MsgExceptPropriedade','Favor informar a propriedade %s'), + ('MsgExceptUserMngMenu','Ingrese en la propiedad UsersForm.MenuItem o UsersForm.Action la opción del menu para abrir el Control de Usuarios'), + ('MsgExceptUserProfile','Ingrese en la propiedad UsersProfile.MenuItem o UsersProfile.Action la opción del menu para abrir el Perfil de Usuarios'), + ('MsgExceptChagePassMenu','Ingrese en la propiedad ChangePasswordForm.MenuItem o .Action la opción del menú que permite al usuario cambiar su Contraseña'), + ('MsgExceptAppID','La propiedad ApplicationID requiere el nombre válido de una tabla para el registro de los Permisos de Usuario'), + ('MsgExceptUsersTable','La propiedad UserTable requiere el nombre válido de una tabla para registrar/seleccionar los datos de los usuarios'), + ('MsgExceptRightsTable','La propiead RightTable requiere el nombre válido de una tabla para registrar/seleccionar los permisos de los usuarios'), + ('MsgExceptConnector','Propriedade DataConnector não definida!'), + ('Const_Men_AutoLogonError','Error de Ingreso Automático!'+#13+#10+ 'Especifique un Usuario y Contraseña Válidos.'), + ('Const_Men_SenhaDesabitada','Contraseña vacía para el Usuario %s'), + ('Const_Men_SenhaAlterada','¡Se ha cambiado la Contraseña con éxito!'), + ('Const_Men_MsgInicial','ATENCION! Conección Inicial:'+#13+#10+#13+#10+'Usuario : :user'+#13+#10+'Contraseña : :password'+#13+#10+#13+#10+'Defina permisos para este usuario'), + ('Const_Men_MaxTentativas','%d Intentos de conección inválidos !'), + ('Const_Men_LoginInvalido','Usuario y/o Contraseña Incorrectos!'), + ('Const_Men_UsuarioExiste','O Usuário "%s" já está cadastrado no sistema !!'), + ('Const_Men_PasswordExpired','Atenção, sua senha expirou, favor troca-la'), + ('Const_Log_BtCancelar','&Cancelar'), + ('Const_Log_BtOK','Aceptar'), + ('Const_Log_LabelSenha','Contraseña:'), + ('Const_Log_LabelUsuario','Usuario: '), + ('Const_Log_WindowCaption','Conección'), + ('Const_Log_LbEsqueciSenha','Olvidé mi Contraseña'), + ('Const_Log_MsgMailSend','La contraseña fue enviada a su correo.'), + ('Const_Log_LabelTentativa','Tentativa : '), + ('Const_Log_LabelTentativas','Máximo de Tentativas : '), + ('Const_LogC_WindowCaption','Seguridad'), + ('Const_LogC_LabelDescricao','Visor de Eventos'), + ('Const_LogC_LabelUsuario','Usuario:'), + ('Const_LogC_ColunaAppID','AppID'), + ('Const_LogC_LabelData','Fecha:'), + ('Const_LogC_LabelNivel','Nivel Mínimo: '), + ('Const_LogC_ColunaNivel','Nivel'), + ('Const_LogC_ColunaMensagem','Mensaje'), + ('Const_LogC_ColunaUsuario','Usuario'), + ('Const_LogC_ColunaData','Fecha'), + ('Const_LogC_BtFiltro','&Aplicar Filtro'), + ('Const_LogC_BtExcluir','&Borrar Bitácora'), + ('Const_LogC_BtFechar','&Cerrar'), + ('Const_LogC_ConfirmaExcluir','¿Está seguro de Eliminar todos todos los registros de Bitácora seleccionados?'), + ('Const_LogC_ConfirmaDelete_WindowCaption','Confirmación'), + ('Const_LogC_Todos','Todos'), + ('Const_LogC_Low','Bajo'), + ('Const_LogC_Normal','Normal'), + ('Const_LogC_High','Alto'), + ('Const_LogC_Critic','Crítico'), + ('Const_LogC_ExcluirEfectuada','Borrado de registros de bitácora realizado: Usuario = "%s" | Fecha = %s a %s | Nivel <= %s'), + ('Const_Cad_WindowCaption','Seguridad'), + ('Const_Cad_LabelDescricao','Administración de Usuarios'), + ('Const_Cad_ColunaNome','Nombre'), + ('Const_Cad_ColunaLogin','Usuario'), + ('Const_Cad_ColunaEmail','Correo'), + ('Const_Cad_BtAdicionar','&Nuevo'), + ('Const_Cad_BtAlterar','&Editar'), + ('Const_Cad_BtExcluir','E&liminar'), + ('Const_Cad_BtPermissoes','&Accesos'), + ('Const_Cad_BtSenha','C&ontraseña'), + ('Const_Cad_BtFechar','&Cerrar'), + ('Const_Cad_ConfirmaExcluir','¿Está seguro de Eliminar al Usuario "%s"?'), + ('Const_Cad_ConfirmaDelete_WindowCaption','Eliminar usuario'), + ('Const_Prof_WindowCaption','Seguridad'), + ('Const_Prof_LabelDescricao','Perfil de Usuario'), + ('Const_Prof_ColunaNome','Perfil'), + ('Const_Prof_BtAdicionar','&Nuevo'), + ('Const_Prof_BtAlterar','&Editar'), + ('Const_Prof_BtExcluir','E&liminar'), + ('Const_Prof_BtPermissoes','&Accesos'), + ('Const_Prof_BtSenha','C&ontraseña'), + ('Const_Prof_BtFechar','&Cerrar'), + ('Const_Prof_ConfirmaExcluir','Existe(n) usuario(s) con el Perfil "%s". ¿Está seguro de eliminar el perfil?'), + ('Const_Prof_ConfirmaDelete_WindowCaption','Eliminar perfil'), + ('Const_Inc_WindowCaption','Administración de Usuarios'), + ('Const_Inc_LabelAdicionar','Nuevo Usuario'), + ('Const_Inc_LabelAlterar','Editar Usuario'), + ('Const_Inc_LabelNome','Nombre:'), + ('Const_Inc_LabelLogin','Usuario: '), + ('Const_Inc_LabelEmail','Correo: '), + ('Const_Inc_LabelPerfil','Perfil: '), + ('Const_Inc_CheckPrivilegiado','Usuario Privilegiado'), + ('Const_Inc_BtGravar','&Guardar'), + ('Const_Inc_BtCancelar','Cancelar'), + ('Const_Inc_CheckEspira','Senha do usuário não expira'), + ('Const_Inc_Dia','Dias'), + ('Const_Inc_ExpiraEm','Expira em'), + ('Const_PInc_WindowCaption','Perfiles de Usuarios'), + ('Const_PInc_LabelAdicionar','Nuevo Perfil'), + ('Const_PInc_LabelAlterar','Editar Perfil'), + ('Const_PInc_LabelNome','Descripción: '), + ('Const_PInc_BtGravar','&Guardar'), + ('Const_PInc_BtCancelar','Cancelar'), + ('Const_Perm_WindowCaption','Seguridad'), + ('Const_Perm_LabelUsuario','Permisos de Usuario : '), + ('Const_Perm_LabelPerfil','Permisos del Perfil : '), + ('Const_Perm_PageMenu','Elementos del Menú'), + ('Const_Perm_PageActions','Acciones'), + ('Const_Perm_PageControls','Controles'), + ('Const_Perm_BtLibera','&Permitir'), + ('Const_Perm_BtBloqueia','&Bloquear'), + ('Const_Perm_BtGravar','&Guardar'), + ('Const_Perm_BtCancelar','&Cancelar'), + ('Const_Troc_WindowCaption','Seguridad'), + ('Const_Troc_LabelDescricao','Cambiar Contraseña'), + ('Const_Troc_LabelSenhaAtual','Contraseña Actual:'), + ('Const_Troc_LabelNovaSenha','Nueva Contraseña:'), + ('Const_Troc_LabelConfirma','Confirme Contraseña:'), + ('Const_Troc_BtGravar','&Guardar'), + ('Const_Troc_BtCancelar','Cancelar'), + ('Const_ErrPass_SenhaAtualInvalida','¡Contraseña Actual Incorrecta!'), + ('Const_ErrPass_ErroNovaSenha','Los campos Contraseña Nueva y Confirme Contraseña deben ser iguales'), + ('Const_ErrPass_NovaIgualAtual','Nueva Contraseña y Contraseña Actual deben ser diferentes'), + ('Const_ErrPass_SenhaObrigatoria','¡La Contraseña es obligatoria!'), + ('Const_ErrPass_SenhaMinima','La Contraseña debe tener un mínimo de %d caracteres'), + ('Const_ErrPass_SenhaInvalida','¡Prohibido utilizar contraseñas NO Seguras!'), + ('Const_ErrPass_ForcaTrocaSenha','Mudança de senha obrigatória'), + ('Const_DefPass_WindowCaption','Ingrese Contraseña de Usuario: "%s"'), + ('Const_DefPass_LabelSenha','Contraseña: '), + ('Const_TableUsers_FieldUserID','UCIdUser'), + ('Const_TableUsers_FieldUserName','UCUserName'), + ('Const_TableUsers_FieldLogin','UCLogin'), + ('Const_TableUsers_FieldPassword','UCPassword'), + ('Const_TableUsers_FieldEmail','UCEmail'), + ('Const_TableUsers_FieldPrivileged','UCPrivileged'), + ('Const_TableUsers_FieldTypeRec','UCTypeRec'), + ('Const_TableUsers_FieldProfile','UCProfile'), + ('Const_TableUsers_FieldKey','UCKey'), + ('Const_TableUsers_TableName','UCTabUsers'), + ('Const_TableUsers_FieldDateExpired','UCPASSEXPIRED'), + ('Const_TableUser_FieldUserExpired','UCUserExpired'), + ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'), + ('Const_TableUser_FieldUserInative','UCInative'), + ('Const_TableRights_FieldUserID','UCIdUser'), + ('Const_TableRights_FieldModule','UCModule'), + ('Const_TableRights_FieldComponentName','UCCompName'), + ('Const_TableRights_FieldFormName','UCFormName'), + ('Const_TableRights_FieldKey','UCKey'), + ('Const_TableRights_TableName','UCTabRights'), + ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'), + ('Const_TableUsersLogged_FieldUserID','UCIdUser'), + ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'), + ('Const_TableUsersLogged_FieldMachineName','UCMachineName'), + ('Const_TableUsersLogged_FieldData','UCData'), + ('Const_TableUsersLogged_TableName','UCTabUsersLogged'), + ('Const_Evento_Insert','Nuevo'), + ('Const_Evento_Delete','Eliminar'), + ('Const_Evento_Edit','Editar'), + ('Const_Evento_NewRecord','Nuevo registro'), + ('Const_Hist_All','Todos'), + ('Const_Msg_LimpHistorico','Excluir el contenido entero del histórico ?'), + ('Const_Msg_MensConfirma','Confirme'), + ('Const_Msg_LogEmptyHistory','El usuario %s borra la historia de mesa en %s '), + ('Const_LabelDescricao','Histórico de tabelas'), + ('Const_LabelUser','Usuario'), + ('Const_LabelForm','Formulário'), + ('Const_LabelEvento','Evento'), + ('Const_LabelTabela','Tabela'), + ('Const_LabelDataEvento','Data'), + ('Const_LabelHoraEvento','Hora'), + ('Const_Msg_NewRecord','%s Inserte el nuevo registro'), + ('Const_Hist_TableName','UCTABHistory'), + ('Const_Hist_FieldApplicationID','ApplicationID'), + ('Const_Hist_FieldUserID','UserID'), + ('Const_Hist_FieldEventDate','EventDate'), + ('Const_Hist_FieldEventTime','EventTime'), + ('Const_Hist_FieldForm','Form'), + ('Const_Hist_FieldCaptionForm','FormCaption'), + ('Const_Hist_FieldEvent','Event'), + ('Const_Hist_FieldObs','Obs'), + ('Const_Hist_FieldTableName','tName'), + ('Const_Hist_MsgExceptPropr','Por favor informe la propiedad %s'), + ('Const_Hist_BtnFiltro','&Aplicar Filtro'), + ('Const_Hist_BtnExcluir','&Borrar Histórico'), + ('Const_Hist_BtnFechar','&Cerrar'), + + ('Const_UserLogged_BtnMsg','&Mensaje'), + ('Const_UserLogged_Refresh','&Restaure'), + ('Const_UserLogged_LabelDescricao','Usuarios activos'), + ('Const_UserLogged_LabelCaption','Usuarios activos en el sistema'), + ('Const_CadColuna_Computer','Computadora'), + ('Const_CadColuna_Data','Data'), + ('Const_UserLogged_InputCaption','Mensaje'), + ('Const_UserLogged_InputText','Entre su mensaje'), + ('Const_UserLogged_MsgSystem','Mensaje del sistema'), + ('Const_Men_LoginInativo','Atenção, seu login esta inativo'), + ('Const_Inc_LabelStatus','Status'), + ('Const_Inc_StatusActive','Ativo'), + ('Const_Inc_StatusDisabled','Inativo') + + ); + +{------------------------------------------------------------------------------ } + +Const UC_FRENCH : Array [0..MaxArray,0..1] of string = ( + ('Const_Contr_TitleLabel','L''équipe de Composantes de la Forme :'), + ('Const_Contr_GroupLabel','Groupe :'), + ('Const_Contr_CompDispLabel','Composantes disponibles :'), + ('Const_Contr_CompSelLabel','Composantes choisies:'), + ('Const_Contr_BtOK','&OK'), + ('Const_Contr_BTCancel','&Annuler'), + ('Const_Contr_DescCol','Description'),//nao + ('Const_Contr_BtSellAllHint','Choisissez Tous'), + ('Const_Contr_BtSelHint','Choisir'), + ('Const_Contr_BtUnSelHint','No Choisir'), + ('Const_Contr_BtUnSelAllHint','Non choisissez Tous'), + ('Const_Msgs_BtNew','&Nouveau Message'), + ('Const_Msgs_BtReplay','&Rejeu'), + ('Const_Msgs_BtForward','Env&oyer'), + ('Const_Msgs_BtDelete','&Effacer'), + ('Const_Msgs_BtClose','&Près'), + ('Const_Msgs_WindowCaption','Messages du Système'), + ('Const_Msgs_ColFrom','De'), + ('Const_Msgs_ColSubject','Sujet'), + ('Const_Msgs_ColDate','Date'), //nao + ('Const_Msgs_PromptDelete','Il confirme l''exclusion des messages choisis ?'), + ('Const_Msgs_PromptDelete_WindowCaption','Effacez des messages'), + ('Const_Msgs_NoMessagesSelected','Aucun Message choisi'), + ('Const_Msgs_NoMessagesSelected_WindowCaption','Renseignements'), + ('Const_MsgRec_BtClose','&Près'), + ('Const_MsgRec_WindowCaption','Message'), + ('Const_MsgRec_Title','Message reçu'), + ('Const_MsgRec_LabelFrom','De:'), + ('Const_MsgRec_LabelDate','Date'), + ('Const_MsgRec_LabelSubject','Sujet'), + ('Const_MsgRec_LabelMessage','Message'), + ('Const_MsgSend_BtSend','&Envoyer'), + ('Const_MsgSend_BtCancel','&Annuler'), + ('Const_MsgSend_WindowCaption','Message'), + ('Const_MsgSend_Title','Envoyez le Nouveau Message'), + ('Const_MsgSend_GroupTo','À'), + ('Const_MsgSend_RadioUser','Utilisateur:'), + ('Const_MsgSend_RadioAll','Tous'), + ('Const_MsgSend_GroupMessage','Message'), + ('Const_MsgSend_LabelSubject','Sujet'), + ('Const_MsgSend_LabelMessageText','Texte de message'), + ('MsgExceptConnection','Fait non informé la Connexion, la Transaction ou la composante de Base de données %s'), + ('MsgExceptTransaction','Fait non informé la composante Transactionnelle %s'), + ('MsgExceptDatabase','Fait non informé la Base de données font la composante %s'), + ('MsgExceptPropriedade','Informez la propriété %s'), + ('MsgExceptUserMngMenu','Informez la propriété UsersForm.MenuItem ou UsersForm.Action l''article responsable du contrôle d''utilisateurs '), + ('MsgExceptUserProfile','Informez la propriété UsersProfile.MenuItem ou UsersProfile.Action l''Article responsable du contrôle de Profil d''utilisateurs'), + ('MsgExceptChagePassMenu','Informez la propriété ChangePasswordForm.MenuItem ou .Action l''Article qui permet à un utilisateur de changer son mot de passe'), + ('MsgExceptAppID','Dans la propriété "ApplicationID" informent un nom pour identifier l''application dans le graphique de permissions'), + ('MsgExceptUsersTable','Dans la propriété "TableUsers" informent le nom du graphique qui sera créé pour conserver les données des utilisateurs'), + ('MsgExceptRightsTable','Dans la propriété "TableRights" informent le nom du graphique qui sera créé pour conserver les permissions des utilisateurs'), + ('MsgExceptConnector','La propriété "DataConnector" non défini!'), + ('Const_Men_AutoLogonError','Faute de Début de transaction Automobile!' + #13 + #10 + 'Informez un utilisateur valide et un mot de passe.'), + ('Const_Men_SenhaDesabitada','Mot de passe retraité de l''Ouverture de session %s'), + ('Const_Men_SenhaAlterada','Le mot de passe changeait avec le succès!'), + ('Const_Men_MsgInicial','ATTENTION, Ouverture de session d''Inicial :' + #13 + #10 + #13 + #10 + 'Utilisateur : :user + '#13 + #10 + 'Mot de passe : :password ' + #13 + #10 + #13 + #10 + 'Définissez les permissions pour cet utilisateur.'), + ('Const_Men_MaxTentativas','%d Essais d''infirme d''ouverture de session. Par les raisons de sécurité le système sera fermé.'), + ('Const_Men_LoginInvalido','L''utilisateur devient infirme ou le mot de passe!'), + ('Const_Men_UsuarioExiste','L''Utilisateur "%s" est déjà remis sur pied dans le système !!'), + ('Const_Men_PasswordExpired','L''attention, son signe est mort, la faveur l''échange '), + ('Const_Log_BtCancelar','&Annuler'), + ('Const_Log_BtOK','&OK'), + ('Const_Log_LabelSenha','Passe :'), + ('Const_Log_LabelUsuario','Utilisateur :'), + ('Const_Log_WindowCaption','Ouverture de session'), + ('Const_Log_LbEsqueciSenha','J''ai oublié le mot de passe'), + ('Const_Log_MsgMailSend','le mot de passe a été envoyé pour son courrier électronique .'), + ('Const_Log_LabelTentativa','Essais : '), + ('Const_Log_LabelTentativas','Max d''Essais : '), + ('Const_LogC_WindowCaption','sécurité'), + ('Const_LogC_LabelDescricao','Rondin de système'), + ('Const_LogC_LabelUsuario','Utilisateur :'), + ('Const_LogC_LabelData','Date :'), + ('Const_LogC_LabelNivel','La moindre partie de niveau:'), + ('Const_LogC_ColunaAppID','AppID'), + ('Const_LogC_ColunaNivel','Niveau '), + ('Const_LogC_ColunaMensagem','Message'), + ('Const_LogC_ColunaUsuario','Utilisateur'), + ('Const_LogC_ColunaData','Date'), + ('Const_LogC_BtFiltro','&Appliquez le Filtre'), + ('Const_LogC_BtExcluir','&Effacez le Rondin'), + ('Const_LogC_BtFechar','&Près'), + ('Const_LogC_ConfirmaExcluir','Il confirme pour exclure tous les registres de rondin choisi?'), + ('Const_LogC_ConfirmaDelete_WindowCaption','Effacez la confirmation '), + ('Const_LogC_Todos','Tous'), + ('Const_LogC_Low','Bas'), + ('Const_LogC_Normal','Normal'), + ('Const_LogC_High','Haut'), + ('Const_LogC_Critic','Critique'), + ('Const_LogC_ExcluirEfectuada','L''effacement de rondin de système fait : Utilisateur = "%s" | Date = %s a %s | Niveau <= %s'), + ('Const_Cad_WindowCaption','Sécurité'), + ('Const_Cad_LabelDescricao','Les utilisateurs s''inscrivent'), + ('Const_Cad_ColunaNome','Nom'), + ('Const_Cad_ColunaLogin','Utilisateur'), + ('Const_Cad_ColunaEmail','Courrier Électronique'), + ('Const_Cad_BtAdicionar','&Ajouter'), + ('Const_Cad_BtAlterar','Ch&anger'), + ('Const_Cad_BtExcluir','&Effacer'), + ('Const_Cad_BtPermissoes','A&pproches'), + ('Const_Cad_BtSenha','&Passe'), + ('Const_Cad_BtFechar','&Près' ), + ('Const_Cad_ConfirmaExcluir','Confirmez effacent l''utilisateur "%s" ?'), + ('Const_Cad_ConfirmaDelete_WindowCaption','Effacez l''utilisateur '), + ('Const_Prof_WindowCaption','Sécurité'), + ('Const_Prof_LabelDescricao','Les utilisateurs dressent le portrait'), + ('Const_Prof_ColunaNome','Profile'), + ('Const_Prof_BtAdicionar','&Ajouter'), + ('Const_Prof_BtAlterar','&Ajouter'), + ('Const_Prof_BtExcluir','&Effacer'), + ('Const_Prof_BtPermissoes','A&pproches'), + ('Const_Prof_BtSenha','&Passe'), + ('Const_Prof_BtFechar','&Près'), + ('Const_Prof_ConfirmaExcluir','Il y a des utilisateurs avec le profil "%s". Confirmez effacent ?'), + ('Const_Prof_ConfirmaDelete_WindowCaption','Effacez le profil'), + ('Const_Inc_WindowCaption','Les utilisateurs s''inscrivent '), + ('Const_Inc_LabelAdicionar','Ajouter utilisateurs'), + ('Const_Inc_LabelAlterar','Changer utilisateurs'), + ('Const_Inc_LabelNome','Nom :'), + ('Const_Inc_LabelLogin','Login :'), + ('Const_Inc_LabelEmail','Courrier Électronique :'), + ('Const_Inc_LabelPerfil','Profil :'), + ('Const_Inc_CheckPrivilegiado','Utilisateur privilégié'), + ('Const_Inc_BtGravar','&Sauver'), + ('Const_Inc_BtCancelar','Annuler'), + ('Const_Inc_CheckEspira','Le mot de passe ne fait pas expiré'), + ('Const_Inc_Dia','Jour'), + ('Const_Inc_ExpiraEm','Expiré dans'), + ('Const_PInc_WindowCaption','Dressez le portrait des Utilisateurs'), + ('Const_PInc_LabelAdicionar','Ajouter Profil'), + ('Const_PInc_LabelAlterar','Ajouter Profil '), + ('Const_PInc_LabelNome','Description :'), + ('Const_PInc_BtGravar','&Sauver'), + ('Const_PInc_BtCancelar','Annuler'), + ('Const_Perm_WindowCaption','Sécurité'), + ('Const_Perm_LabelUsuario','Permissions de l''Utilisateur :'), + ('Const_Perm_LabelPerfil','Permissions de l'' Profil :'), + ('Const_Perm_PageMenu','Articles du Menu'), + ('Const_Perm_PageActions','Actions'), + ('Const_Perm_PageControls','Controls'), + ('Const_Perm_BtLibera','&Libération'), + ('Const_Perm_BtBloqueia','&Bloc'), + ('Const_Perm_BtGravar','&Sauver'), + ('Const_Perm_BtCancelar','&Annuler'), + ('Const_Troc_WindowCaption','Sécurité'), + ('Const_Troc_LabelDescricao','Mot de passe de Changement '), + ('Const_Troc_LabelSenhaAtual','Passe :'), + ('Const_Troc_LabelNovaSenha','Nouveau Mot de passe :'), + ('Const_Troc_LabelConfirma','Confirmation :'), + ('Const_Troc_BtGravar','&Sauver'), + ('Const_Troc_BtCancelar','Annuler'), + ('Const_ErrPass_SenhaAtualInvalida','Le mot de passe actuel ne correspond pas !'), + ('Const_ErrPass_ErroNovaSenha','Le Champ : le Nouveau Mot de passe et la Confirmation doivent être le même.'), + ('Const_ErrPass_NovaIgualAtual','Nouveau mot de passe égal au mot de passe actuel'), + ('Const_ErrPass_SenhaObrigatoria','Le mot de passe est obligatoire'), + ('Const_ErrPass_SenhaMinima','Le mot de passe doit contenir au moins %d des caractères '), + ('Const_ErrPass_SenhaInvalida','Quand utiliser le mot de passe a été interdit vous obviez !'), + ('Const_ErrPass_ForcaTrocaSenha','Mot de passe de changement obligatoire'), + ('Const_DefPass_WindowCaption','Définissez le Mot de passe de l''utilisateur : "%s"'), + ('Const_DefPass_LabelSenha','Passe :'), + ('Const_TableUsers_FieldUserID','UCIdUser'), + ('Const_TableUsers_FieldUserName','UCUserName'), + ('Const_TableUsers_FieldLogin','UCLogin'), + ('Const_TableUsers_FieldPassword','UCPassword'), + ('Const_TableUsers_FieldEmail','UCEmail'), + ('Const_TableUsers_FieldPrivileged','UCPrivileged'), + ('Const_TableUsers_FieldTypeRec','UCTypeRec'), + ('Const_TableUsers_FieldProfile','UCProfile'), + ('Const_TableUsers_FieldKey','UCKey'), + ('Const_TableUsers_TableName','UCTabUsers'), + ('Const_TableUsers_FieldDateExpired','UCPassExpired'), + ('Const_TableUser_FieldUserExpired','UCUserExpired'), + ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'), + ('Const_TableUser_FieldUserInative','UCInative'), + ('Const_TableRights_FieldUserID','UCIdUser'), + ('Const_TableRights_FieldModule','UCModule'), + ('Const_TableRights_FieldComponentName','UCCompName'), + ('Const_TableRights_FieldFormName','UCFormName'), + ('Const_TableRights_FieldKey','UCKey'), + ('Const_TableRights_TableName','UCTabRights'), + ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'), + ('Const_TableUsersLogged_FieldUserID','UCIdUser'), + ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'), + ('Const_TableUsersLogged_FieldMachineName','UCMachineName'), + ('Const_TableUsersLogged_FieldData','UCData'), + ('Const_TableUsersLogged_TableName','UCTabUsersLogged'), + ('Const_Evento_Insert','Insertion'), + ('Const_Evento_Delete','Effacer'), + ('Const_Evento_Edit','Réviser'), + ('Const_Evento_NewRecord','Nouveau record '), + ('Const_Hist_All','Tous'), + ('Const_Msg_LimpHistorico','Histoire de table propre?'), + ('Const_Msg_MensConfirma','Confirmer'), + ('Const_Msg_LogEmptyHistory','L''utilisateur %s efface l''histoire de table dans %s '), + ('Const_LabelDescricao','Histoire de Tables'), + ('Const_LabelUser','Utilisateur'), + ('Const_LabelForm','Forme'), + ('Const_LabelEvento','Événement'), + ('Const_LabelTabela','Table'), + ('Const_LabelDataEvento','Date'), + ('Const_LabelHoraEvento','Temps'), + ('Const_Msg_NewRecord','%s insérez le nouveau record'), + ('Const_Hist_TableName','UCTABHistory'), + ('Const_Hist_FieldApplicationID','ApplicationID'), + ('Const_Hist_FieldUserID','UserID'), + ('Const_Hist_FieldEventDate','EventDate'), + ('Const_Hist_FieldEventTime','EventTime'), + ('Const_Hist_FieldForm','Form'), + ('Const_Hist_FieldCaptionForm','FormCaption'), + ('Const_Hist_FieldEvent','Event'), + ('Const_Hist_FieldObs','Obs'), + ('Const_Hist_FieldTableName','tName'), + ('Const_Hist_MsgExceptPropr','Informez la propriété %s'), + ('Const_Hist_BtnFiltro','&Appliquez le Filtre'), + ('Const_Hist_BtnExcluir','&Effacez l''Histoire'), + ('Const_Hist_BtnFechar','&Près'), + + ('Const_UserLogged_BtnMsg','&Régénérez'), + ('Const_UserLogged_Refresh','&Refresh'), + ('Const_UserLogged_LabelDescricao','Utilisateurs actifs'), + ('Const_UserLogged_LabelCaption','Utilisateurs actifs dans le système'), + ('Const_CadColuna_Computer','Ordinateur'), + ('Const_CadColuna_Data','Date'), + ('Const_UserLogged_InputCaption','Message'), + ('Const_UserLogged_InputText','Entrez votre message'), + ('Const_UserLogged_MsgSystem','Message de système'), + ('Const_Men_LoginInativo','Atenção, seu login esta inativo'), + ('Const_Inc_LabelStatus','Status'), + ('Const_Inc_StatusActive','Ativo'), + ('Const_Inc_StatusDisabled','Inativo') + ); + + + Function RetornaLingua( Lingua : TUCLanguage; Prop : String ) : String; + +implementation + +Function RetornaLingua( Lingua : TUCLanguage; Prop : String ) : String; +Var I : Integer; +Begin + Result := ''; + For I := 0 to MaxArray do + Begin + Case Lingua of + ucPortuguesBr : If UpperCase( UC_PTBR[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_PTBR[ I , 1 ]; + ucEnglish : If UpperCase( UC_ENGLISH[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_ENGLISH[ I , 1 ]; + ucSpanish : if UpperCase( UC_SPANISH[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_SPANISH[ I , 1 ]; + ucFrench : if UpperCase( UC_FRENCH[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_FRENCH[ I , 1 ]; + else + If UpperCase( UC_PTBR[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_PTBR[ I , 1 ]; + End; + End; +End; + +end. + diff --git a/internal/2.31RC1/1/Source/UserControl.inc b/internal/2.31RC1/1/Source/UserControl.inc new file mode 100644 index 0000000..bedb276 --- /dev/null +++ b/internal/2.31RC1/1/Source/UserControl.inc @@ -0,0 +1,192 @@ +{------------------------------------------------------------------------------} +{ VERXXX to DELPHIX } +{------------------------------------------------------------------------------} + +{$IFDEF VER110} + {$DEFINE DELPHI3} +{$ENDIF} + +{$IFDEF VER120} + {$DEFINE DELPHI4} +{$ENDIF} + +{$IFDEF VER130} + {$DEFINE DELPHI5} +{$ENDIF} + +{$IFDEF VER140} + {$DEFINE DELPHI6} +{$ENDIF} + +{$IFDEF VER150} + {$DEFINE DELPHI7} +{$ENDIF} + +{$IFDEF VER160} + {$DEFINE DELPHI8} +{$ENDIF} + +{$IFDEF VER170} + {$DEFINE DELPHI9} +{$ENDIF} + +{$IFDEF VER180} + {$DEFINE DELPHI10} +{$ENDIF} + +{$IFDEF VER190} + {$DEFINE DELPHI11} +{$ENDIF} + +{$IFDEF VER200} + {$DEFINE DELPHI12} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ DELPHIX_UP from DELPHIX mappings } +{------------------------------------------------------------------------------} + +{$IFDEF DELPHI12} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI11} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI10} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI9} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI8} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI7} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI6} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI5} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI4} + {$DEFINE DELPHI4_UP} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI3} + {$DEFINE DELPHI3_UP} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI2} + {$DEFINE DELPHI2_UP} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +{$IFDEF DELPHI1} + {$DEFINE DELPHI1_UP} +{$ENDIF} + +(* + + Definições de funcionamento + +*) + +{$IFDEF DELPHI7_UP} + {$WARN UNSAFE_TYPE OFF} + {$WARN UNSAFE_CODE OFF} + {$WARN UNSAFE_CAST OFF} + {$WARN SYMBOL_DEPRECATED OFF} + {$WARN SYMBOL_LIBRARY OFF} + {$WARN SYMBOL_PLATFORM OFF} + {$WARN UNIT_LIBRARY OFF} + {$WARN UNIT_PLATFORM OFF} + {$WARN UNIT_DEPRECATED OFF} + {$WARN CONSTRUCTING_ABSTRACT OFF} + {$WARN IMPLICIT_IMPORT OFF} + + {$DEFINE UCACTMANAGER} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$WARN SYMBOL_EXPERIMENTAL OFF} + {$WARN UNIT_EXPERIMENTAL OFF} +{$ENDIF} + +(* + Definições do Usuario +*) diff --git a/internal/2.31RC1/1/Source/UserPermis_U.dfm b/internal/2.31RC1/1/Source/UserPermis_U.dfm new file mode 100644 index 0000000..5640f06 --- /dev/null +++ b/internal/2.31RC1/1/Source/UserPermis_U.dfm @@ -0,0 +1,636 @@ +object UserPermis: TUserPermis + Left = 255 + Top = 154 + BorderStyle = bsDialog + Caption = 'Seguran'#231'a' + ClientHeight = 522 + ClientWidth = 542 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnDestroy = FormDestroy + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 542 + Height = 35 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 0 + object LbDescricao: TLabel + Left = 44 + Top = 12 + Width = 205 + Height = 18 + Caption = 'Permiss'#245'es do Usu'#225'rio:' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Image1: TImage + Left = 8 + Top = 4 + Width = 28 + Height = 28 + AutoSize = True + Picture.Data = { + 07544269746D6170760C0000424D760C00000000000036000000280000001C00 + 00001C0000000100200000000000400C00000000000000000000000000000000 + 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00F9F9F900F1F1F100EAEA + EA00E3E3E300E0E0E000DEDEDE00DFDFDF00E1E1E100E4E4E400E8E8E800ECEC + EC00F0F0F000F5F5F500FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F6F6F600C5C7 + C5008E9F91006E8A70005E815C00527B4F004E7C4A004B7C48004A7C47004B7B + 48004C7C4A004E7B4C0050795000557854005B7A5C00677F6A007C897E00A2A2 + A200D4D4D400FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00F2F4F30074967100487638004E7C35004E8334004B893300488E + 31004592300044962F0043972F0043982F0043972F004494300047903100498C + 32004C863400507F35004E7A360047703900526C5200A9A9A900FAFAFA00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0094B3910058743900537B + 36004E8334004A8A33004690310043962F00409B2E003E9F2D003DA12D003DA1 + 2D003DA02D003F9D2E0042992F0045933000488D32004C863400517F35005577 + 3700567039005A725A00E6E6E600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00688D5B0055783700508035004B8833004790310043982F003F9E + 2D003BA42C0039A82B0037AB2A0037AB2A0038AA2B003AA62C003DA12D00419B + 2E0045943000498C32004D843400527C36005773380054724D00DEDEDE00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E875100527C36004D84 + 3400488D320044962F003F9E2E003BA52C0037AC2A0034B1290032B4280032B5 + 280033B3280035AE290039A82B003DA12D00419A2F00469131004B8933005080 + 35005577370056775100E4E4E400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00729A6800507F35004B88330046913100419A2E003CA32C0037AB + 2A0033B328002FB927002DBE25002CBF25002EBC260031B6270035AF29003AA7 + 2B003F9E2D0044953000498C32004E833400537A37006F8C6E00F2F2F200FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5C6A700508136004A8A + 3300449330003F9D2E003AA62B0035AF290030B827002BBF250035B237002BBB + 2B0029C324002DBC260033B4280037AB2A003DA12D0042982F00478F31004D85 + 34004A7B3600B0BCB200FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00F6FAF70058904D00498B3200449530003E9E2D0039A82B0034B2 + 28002EBB26004BA34E00DEE0DF00DDEADF0044BB47002BC0250031B6270036AD + 2A003CA32C00419A2F00479031004C86340072997100F1F1F100FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D4E4D6004A8E + 3D00449530003E9E2D0039A82B0034B129002FA92C00A4B0A700E5E6E600E8E9 + E900CFDED20035B3340031B6270036AC2A003CA32C0041992F00468F31005E95 + 5B00E5E7E500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00D2E4D4004E984500409C2E003AA52C0035AE + 2900518B5400989B9F00798A96006B7F8C00757E85005B7F5D002D9E240038A9 + 2A003DA12D0040952F0070A46F00E9ECEA00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00EDF4EF007BB57B003A9D2E00319131004F7C93004992C5004A98CF004897 + CE004592C800437DA400235437002C7F22004B9B4500AECAB000F9F9F900FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD3C7004C90 + AF0052A0D60052A0D500519FD4004F9DD3004C9AD1004997CE00438CBF004363 + 6700C1C2C100FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00F5F6F70072ABD00056A4D90056A4D90056A4D90055A3D80054A2 + D70052A0D5004F9DD3004B99D000468DC000727D8400E7E7E700FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2C4DC005AA6DB005BA8 + DC005BA8DC005BA8DC005AA7DB0058A5DA0056A4D90053A1D600509ED4004B9A + D0004C7FA500ADADAD00FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00E9EEF4005FA7D7005EABDF005FACE0005FACE0005FACE0005EABDF005CA9 + DD005AA7DB0057A4D90054A2D700509ED4004A95CA0076828B00F0F0F000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ADCDE20060ACE00061AEE20063B0 + E30063B0E30063B0E30061AEE2005FACE0005DAADE005AA7DC0056A4D90053A1 + D600B7A293006947310069473100694731006947310069473100694731006947 + 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF007EB5DA0063B0E30065B2E50067B4E70068B4E70067B4E60065B2E50063B0 + E30060ADE1005DAADE0059A7DB0055A3D800B7A29300FFFFFF00FCFDFF005476 + FF00E4E9FF00FFFFFF00FFFFFF0069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FAFBFC0064AAD80066B3E60069B5E8006BB7 + E9006CB8EA006BB7E90069B5E80066B3E60062AFE3005FACE0005BA8DC0057A5 + DA00B7A29300FFFFFF00B4C3FF000033FF002450FF00FCFDFF00FFFFFF006947 + 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDF2 + F50062A9D9005696BF00538EB5005E9FC9006BB4E3006EBAEC006CB8EA0069B5 + E70064B1E40060ADE1005DAADE0059A6DB00B7A29300FFFFFF004066FF000C3D + FF000033FF009CB0FF00FFFFFF0069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F1F5F9004F8FB9004385AF004485AE003F79 + 9D003E708F004B7FA00062A5D10069B5E60066B3E60062AFE2005EABDF0059A7 + DB00B7A293008CA3FF000033FF00708DFF006483FF001846FF00F0F3FF006947 + 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF005490B8004D94C1004F96C3005097C3004E95C200488BB5003D7192004375 + 95005B9FCD0061AEE1005DAADE004C8FBC00B7A2930088A0FF001C49FF00E4E9 + FF00F0F3FF00204DFF006080FF0069473100FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0084B1CD00569ECB0058A0CE0059A1 + CE00579FCC00539BC8004E95C2004689B300386A8A00447B9F004786B0003C7F + A900B7A29300FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0FF000C3DFF006080 + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00C3D8E5005EA5D30061AAD80062ABD9005FA8D6005BA3D100559DCA004E95 + C200478DB9003D7DA6003C7FAA003D82AD00B7A29300B7A29300B7A29300B7A2 + 9300B7A29300B7A293009CB0FF001443FF006080FF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFDFE0079B1D5006AB4E2006AB5 + E30067B1DF0062ABD9005BA3D000539AC7004B91BE004388B4003D82AD003C81 + AC0062849A00ECECEC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0 + FF00345DFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00DDE9F00075B9E40073BEED006EB9E80067B1DF005FA7D500569E + CB004D94C100458BB7003D82AE005584A200D8DBDD00FEFEFE00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0FF00486DFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D8E7F1007FBF + E80072BDEC0069B3E20061A9D70058A0CD004F96C2004689B5006994B000DCDF + E300FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF009CB0FF007893FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00F4F7FA00B2D0E30085B8D80070A9CE0071A6 + C70087AFC900C3D1DB00FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00} + end + object lbUser: TLabel + Left = 257 + Top = 12 + Width = 54 + Height = 18 + Caption = 'Admin' + Font.Charset = ANSI_CHARSET + Font.Color = clBlue + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + end + object Panel3: TPanel + Left = 445 + Top = 35 + Width = 97 + Height = 487 + Align = alRight + BevelOuter = bvNone + TabOrder = 1 + object BtLibera: TBitBtn + Left = 8 + Top = 80 + Width = 81 + Height = 25 + Caption = '&Liberar' + TabOrder = 0 + OnClick = BtLiberaClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000C8D0D4C8D0D4 + C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8 + D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D49FBFD0 + 0060900060900060900060900060900060900060900060900060900060900060 + 909FBFD0C8D0D4C8D0D4C8D0D4C2C8CB8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D + 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8DC2C8CBC8D0D4C8D0D4C8D0D40090C8 + 98D8F80090C80090C80090C80090C80090C80090C80090C80090C80090C80090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5E7E7E7B6B6B6B5B5B5B5B5B5B5B5B5B5 + B5B5B5B5B5B6B6B6B5B5B5B5B5B5B5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD7ACEF774CCF66EC9F55494A840404045879B4EBBF146B7EF42B5EF0090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E1E1E1E0E0E0DDDDDDB1B1B166 + 6666A7A7A7D5D5D5D3D3D3D2D2D2B5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD83D2F87DD0F777CDF671CAF540404063C5F45AC1F352BDF14AB9F00090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E3E3E3E2E2E2E0E0E0DFDFDF66 + 6666DBDBDBD8D8D8D7D7D7D4D4D4B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD89D5F983D2F87DD0F740404040404040404063C5F45AC1F352BDF10090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F6F6F6E5E5E5E3E3E3E2E2E267676766 + 6666666666DCDCDCD9D9D9D6D6D6B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD8FD8FA89D5F983D2F862AABE40404062AABE6BC8F563C5F45AC1F30090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F6F6F6E7E7E7E5E5E5E3E3E3C2C2C266 + 6666C2C2C2DDDDDDDCDCDCD9D9D9B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD95DBFB8FD8FA89D5F983D2F87DD0F777CDF671CAF56BC8F563C5F40090 + C8006090C8D0D4C8D0D4C8D0D4B6B6B6F5F5F5E9E9E9E7E7E7E5E5E5E3E3E3E2 + E2E2E0E0E0DFDFDFDDDDDDDCDCDCB5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8 + 98D8F8D7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFD98D8 + F8006090C8D0D4C8D0D4C8D0D4B5B5B5E7E7E7F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F6F5F5F5E7E7E78D8D8DC8D0D4C8D0D4C8D0D49FBFD0 + 028DC70090C80090C80090C80090C80090C80090C80090C80090C80090C80090 + C89FBFD0C8D0D4C8D0D4C8D0D4C2C8CBB4B4B4B6B6B6B6B6B6B6B6B6B5B5B5B5 + B5B5B5B5B5B6B6B6B6B6B6B5B5B5B5B5B5C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D40090C860C8F8006090C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8 + D0D4C8D0D4B6B6B6DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D40090C8006090006090C8D0D4C8D0D4C8D0D40090C860C8F8006090C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B6B6B68D8D8D8D8D8DC8D0D4C8 + D0D4C8D0D4B6B6B6DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D40090C8D7EFFD0060909FBFD0C8D0D49FBFD00090C860C8F8006090C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B5B5B5F6F6F68D8D8DC2C8CBC8 + D0D4C2C8CBB5B5B5DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D47FB1CDD7EFFD98D8F800609000609000609098D8F860C8F8367EA3C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4BDC2C4F5F5F5E7E7E78D8D8D8E + 8E8E8D8D8DE7E7E7DDDDDD9EA0A1C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D49FBFD07FB1CDD7EFFDD7EFFDD7EFFDD7EFFD4DB9EC367EA39FBFD0C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4F6F6F6F6F6F6F6 + F6F6F6F6F6D3D3D39EA0A1C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D4C8D0D49FBFD07FB1CD0090C80090C80090C87FB1CD9FBFD0C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4B5B5B5B5 + B5B5B5B5B5BDC2C4C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4} + NumGlyphs = 2 + end + object BtBloqueia: TBitBtn + Left = 8 + Top = 133 + Width = 81 + Height = 25 + Caption = '&Bloquear' + TabOrder = 1 + OnClick = BtBloqueiaClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000C8D0D4C8D0D4 + C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8 + D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D49FBFD0 + 0060900060900060900060900060900060900060900060900060900060900060 + 909FBFD0C8D0D4C8D0D4C8D0D4C2C8CB8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D + 8D8D8D8D8D8E8E8E8D8D8D8D8D8D8D8D8DC2C8CBC8D0D4C8D0D4C8D0D40090C8 + 98D8F80090C80090C80090C80090C80090C80090C80090C80090C80090C80090 + C8006090C8D0D4C8D0D4C8D0D4B6B6B6E7E7E7B5B5B5B6B6B6B5B5B5B5B5B5B5 + B5B5B6B6B6B5B5B5B5B5B5B6B6B6B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD7ACEF774CCF66EC9F55494A840404045879B4EBBF146B7EF42B5EF0090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E1E1E1E0E0E0DDDDDDB1B1B166 + 6666A7A7A7D5D5D5D3D3D3D2D2D2B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD83D2F87DD0F777CDF671CAF540404063C5F45AC1F352BDF14AB9F00090 + C8006090C8D0D4C8D0D4C8D0D4B6B6B6F6F6F6E3E3E3E2E2E2E0E0E0DFDFDF66 + 6666DCDCDCD9D9D9D7D7D7D4D4D4B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD89D5F983D2F87DD0F740404040404040404063C5F45AC1F352BDF10090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E5E5E5E3E3E3E2E2E266666666 + 6666666666DCDCDCD8D8D8D6D6D6B5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD8FD8FA89D5F983D2F862AABE40404062AABE6BC8F563C5F45AC1F30090 + C8006090C8D0D4C8D0D4C8D0D4B6B6B6F6F6F6E7E7E7E6E6E6E3E3E3C2C2C267 + 6767C2C2C2DDDDDDDBDBDBD9D9D9B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + D7EFFD95DBFB8FD8FA89D5F983D2F87DD0F777CDF671CAF56BC8F563C5F40090 + C8006090C8D0D4C8D0D4C8D0D4B5B5B5F6F6F6E9E9E9E7E7E7E6E6E6E3E3E3E2 + E2E2E0E0E0DFDFDFDDDDDDDBDBDBB6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8 + 98D8F8D7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFD98D8 + F8006090C8D0D4C8D0D4C8D0D4B5B5B5E7E7E7F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F6F6F6F6E7E7E78D8D8DC8D0D4C8D0D4C8D0D49FBFD0 + 0090C80090C80090C80090C80090C80090C80090C80090C80090C80090C80090 + C89FBFD0C8D0D4C8D0D4C8D0D4C2C8CBB5B5B5B6B6B6B6B6B6B5B5B5B6B6B6B5 + B5B5B6B6B6B6B6B6B5B5B5B5B5B5B6B6B6C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D40090C8D7EFFD006090C8D0D4C8D0D4C8D0D40090C860C8F8006090C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B5B5B5F5F5F58D8D8DC8D0D4C8 + D0D4C8D0D4B5B5B5DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D40090C8D7EFFD0060909FBFD0C8D0D49FBFD00090C860C8F8006090C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B5B5B5F6F6F68D8D8DC2C8CBC8 + D0D4C2C8CBB5B5B5DEDEDE8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D47FB1CDD7EFFD98D8F800609000609000609060C8F860C8F8367EA3C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4BDC2C4F6F6F6E7E7E78D8D8D8D + 8D8D8D8D8DDEDEDEDDDDDD9EA0A1C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D49FBFD07FB1CDD7EFFDD7EFFDD7EFFDD7EFFD60C8F8367EA39FBFD0C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4F6F6F6F6F6F6F6 + F6F6F6F6F6DDDDDD9EA0A1C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D4C8D0D49FBFD07FB1CD0090C80090C80090C87FB1CD9FBFD0C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4B5B5B5B5 + B5B5B6B6B6BDC2C4C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8 + D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4} + NumGlyphs = 2 + end + object BtGrava: TBitBtn + Left = 8 + Top = 186 + Width = 81 + Height = 25 + Caption = '&Gravar' + TabOrder = 2 + OnClick = BtGravaClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42 + 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969 + 6969696969696969696969696969696969696969696969696969FF00FFCE726F + D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443 + 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2 + D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F + D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747 + 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF + FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F + DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50 + 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF + FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F + E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459 + 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C + 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F + EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62 + 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE + AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F + F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B + 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8 + B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F + F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863 + 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E + 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F + F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA + BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA + EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F + F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD + C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1 + F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3 + C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6 + F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9 + CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB + FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF + D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4 + DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F + F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA + E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F + CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72 + 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A + 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A} + NumGlyphs = 2 + end + object BtCancel: TBitBtn + Left = 8 + Top = 240 + Width = 81 + Height = 25 + Caption = '&Cancelar' + TabOrder = 3 + OnClick = BtCancelClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + end + object PC: TPageControl + Left = 0 + Top = 35 + Width = 445 + Height = 487 + ActivePage = PageMenu + Align = alClient + Style = tsFlatButtons + TabOrder = 2 + object PageMenu: TTabSheet + Caption = 'Itens do Menu' + object TreeMenu: TTreeView + Left = 0 + Top = 0 + Width = 437 + Height = 456 + Align = alClient + Ctl3D = True + Images = ImageList1 + Indent = 19 + ParentCtl3D = False + ReadOnly = True + RightClickSelect = True + TabOrder = 0 + OnClick = TreeMenuClick + OnCollapsing = TreeMenuCollapsing + OnExpanding = TreeMenuCollapsing + OnKeyPress = TreeMenuKeyPress + OnMouseUp = TreeMenuMouseUp + end + end + object PageAction: TTabSheet + Caption = 'A'#231#245'es' + ImageIndex = 1 + object TreeAction: TTreeView + Left = 0 + Top = 0 + Width = 437 + Height = 456 + Align = alClient + Ctl3D = True + Images = ImageList1 + Indent = 19 + ParentCtl3D = False + ReadOnly = True + RightClickSelect = True + TabOrder = 0 + OnClick = TreeActionClick + OnCollapsing = TreeMenuCollapsing + OnExpanding = TreeMenuCollapsing + OnKeyPress = TreeMenuKeyPress + end + end + object PageControls: TTabSheet + Caption = 'Controles' + ImageIndex = 2 + object TreeControls: TTreeView + Left = 0 + Top = 0 + Width = 437 + Height = 456 + Align = alClient + Ctl3D = True + Images = ImageList1 + Indent = 19 + ParentCtl3D = False + ReadOnly = True + RightClickSelect = True + TabOrder = 0 + OnClick = TreeControlsClick + OnCollapsing = TreeMenuCollapsing + OnExpanding = TreeMenuCollapsing + OnKeyPress = TreeMenuKeyPress + end + end + end + object ImageList1: TImageList + Left = 360 + Top = 8 + Bitmap = { + 494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000001000000001002000000000000010 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400C6DEC600C6DE + C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE + C600C6DEC6000000000000000000000000000000000084848400C6DEC600C6DE + C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE + C600C6DEC6000000000000000000000000000000000084848400C6DEC600C6DE + C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C600C6C6C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C6008484840084848400848484008484840084848400C6C6C600C6C6C600C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C6008484840084848400C6C6C600848484008484840084848400C6C6C600C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C60084848400C6C6C600C6C6C600C6C6C600848484008484840084848400C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484840084848400C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC6000000000000000000000000000000000084848400848484000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C6DEC600000000000000000000000000000000008484840084848400C6C6 + C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6 + C600C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400C6DEC6000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400C6DEC6000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400C6DEC6000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484000000000000000000000000000000000084848400848484008484 + 8400848484008484840084848400848484008484840084848400848484008484 + 8400848484000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000100000000100010000000000800000000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFF0000 + FFFFFFFFFFFF000080078007800700009FF79FF7800700009FF79DF780070000 + 9FF798F7800700009FF79077800700009FF79237800700009FF7971780070000 + 9FF79F97800700009FF79FD7800700009FF79FF7800700008007800780070000 + 8007800780070000FFFFFFFFFFFF000000000000000000000000000000000000 + 000000000000} + end +end diff --git a/internal/2.31RC1/1/Source/UserPermis_U.pas b/internal/2.31RC1/1/Source/UserPermis_U.pas new file mode 100644 index 0000000..1ebdea4 --- /dev/null +++ b/internal/2.31RC1/1/Source/UserPermis_U.pas @@ -0,0 +1,750 @@ +unit UserPermis_U; + +interface + +{$I 'UserControl.inc'} + +uses + UCBase, + {.$IFDEF UCACTMANAGER} + ActnMan, + ActnMenus, + {.$ENDIF} + {.$IFDEF DELPHI5_UP} + Variants, + {.$ENDIF} + Buttons, + Classes, + ComCtrls, + Controls, + DB, + ExtCtrls, + Forms, + Graphics, + ImgList, + Menus, + StdCtrls; + +type + PTreeMenu = ^TTreeMenu; + + TTreeMenu = record + Selecionado: Integer; + MenuName: String; + end; + + PTreeAction = ^TTreeAction; + + TTreeAction = record + Grupo: Boolean; + Selecionado: Integer; + MenuName: String; + end; + + PTreeControl = ^TTreeControl; + + TTreeControl = record + Grupo: Boolean; + Selecionado: Integer; + CompName: String; + FormName: String; + end; + + TUserPermis = class(TForm) + Panel1: TPanel; + LbDescricao: TLabel; + Image1: TImage; + Panel3: TPanel; + BtLibera: TBitBtn; + BtBloqueia: TBitBtn; + BtGrava: TBitBtn; + lbUser: TLabel; + ImageList1: TImageList; + BtCancel: TBitBtn; + PC: TPageControl; + PageMenu: TTabSheet; + PageAction: TTabSheet; + TreeMenu: TTreeView; + TreeAction: TTreeView; + PageControls: TTabSheet; + TreeControls: TTreeView; + procedure BtGravaClick(Sender: TObject); + procedure TreeMenuClick(Sender: TObject); + procedure BtCancelClick(Sender: TObject); + procedure BtLiberaClick(Sender: TObject); + procedure BtBloqueiaClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure TreeActionClick(Sender: TObject); + procedure TreeControlsClick(Sender: TObject); + procedure TreeMenuCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean); + procedure TreeMenuKeyPress(Sender: TObject; var Key: char); + procedure TreeMenuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + procedure FormDestroy(Sender: TObject); + private + FMenu: TMenu; + FActions: TObject; + FChangingTree: Boolean; + FTempMPointer: PTreeMenu; + FTempAPointer: PTreeAction; + FTempCPointer: PTreeControl; + FExtraRights: TUCExtraRights; + FTempLista: TStringList; + FListaAction: array of PTreeAction; + FListaMenu: array of PTreeMenu; + FListaControl: array of PTreeControl; + {.$IFDEF UCACTMANAGER} + FActionMainMenuBar: TActionMainMenuBar; + procedure TrataItem(IT: TActionClientItem; node: TTreeNode); overload; + {.$ENDIF} + procedure TrataItem(IT: TMenuItem; node: TTreeNode); overload; + procedure TreeMenuItem(marca: Boolean); + procedure Atualiza(Selec: Boolean); + procedure TreeActionItem(marca: Boolean); + procedure UnCheckChild(node: TTreeNode); + procedure TreeControlItem(marca: Boolean); + procedure CarregaTreeviews; + public + FTempIdUser: Integer; + FUserControl: TUserControl; + DSPermiss: TDataset; + DSPermissEX: TDataset; + DSPerfil: TDataset; + DSPerfilEX: TDataset; + end; + +var + UserPermis: TUserPermis; + +implementation + +uses + ActnList, + Messages, + SysUtils, + Windows; + +{$R *.dfm} + +procedure TUserPermis.BtGravaClick(Sender: TObject); +var + Contador: Integer; +begin + with fUserControl.TableRights do + begin + fUserControl.DataConnector.UCExecSQL('Delete from ' + TableName + ' Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(fUserControl.ApplicationID)); + fUserControl.DataConnector.UCExecSQL('Delete from ' + TableName + 'EX Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(fUserControl.ApplicationID)); + end; + + for Contador := 0 to TreeMenu.Items.Count - 1 do + if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado = 1 then + fUserControl.AddRight(FTempIdUser, PTreeMenu(TreeMenu.Items[Contador].Data).MenuName); + + for Contador := 0 to TreeAction.Items.Count - 1 do + if PTreeAction(TreeAction.Items[Contador].Data).Selecionado = 1 then + fUserControl.AddRight(FTempIdUser, PTreeAction(TreeAction.Items[Contador].Data).MenuName); + + //Extra Rights + for Contador := 0 to Pred(TreeControls.Items.Count) do + if PTreeControl(TreeControls.Items[Contador].Data).Selecionado = 1 then + fUserControl.AddRightEX(FTempIdUser, fUserControl.ApplicationID, PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName); + + Close; +end; + +procedure TUserPermis.TrataItem(IT: TMenuItem; node: TTreeNode); +var + contador: Integer; + TempNode: TTreeNode; +begin + for contador := 0 to IT.Count - 1 do + if IT.Items[Contador].Caption <> '-' then + if IT.Items[Contador].Count > 0 then + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := IT.Items[Contador].Name; + TempNode := TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + TrataItem(IT.Items[Contador], TempNode); + end + else + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := IT.Items[Contador].Name; + TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + end; +end; + +{.$IFDEF UCACTMANAGER} +procedure TUserPermis.TrataItem(IT: TActionClientItem; node: TTreeNode); +var + contador: Integer; + TempNode: TTreeNode; +begin + for contador := 0 to IT.Items.Count - 1 do + if IT.Items[Contador].Caption <> '-' then + if IT.Items[Contador].Items.Count > 0 then + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := #1 + 'G' + IT.Items[Contador].Caption; + TempNode := TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + TrataItem(IT.Items[Contador], TempNode); + end + else + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := IT.Items[Contador].Action.Name; + TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + end; +end; + +{.$ENDIF} + +procedure TUserPermis.CarregaTreeviews; +var + Contador: Integer; + TempNode: TTreeNode; + Temp: String; + Temp2: String; + Desc: String; +begin + FChangingTree := False; + PC.ActivePage := PageMenu; + +{ Self.FMenu := fUserControl.ControlRight.MainMenu; + Self.FActionMainMenuBar := fUserControl.ControlRight.ActionMainMenuBar; + if Assigned(fUserControl.ControlRight.ActionList) then + Self.FActions := fUserControl.ControlRight.ActionList + else + Self.FActions := fUserControl.ControlRight.ActionManager; } + + Self.FMenu := fUsercontrol.ControlRight.MainMenu; + Self.FActionMainMenuBar := fUsercontrol.ControlRight.ActionMainMenuBar; + if Assigned(fUsercontrol.ControlRight.ActionList) then + Self.FActions := fUsercontrol.ControlRight.ActionList + else + Self.FActions := fUsercontrol.ControlRight.ActionManager; + Self.FExtraRights := fUsercontrol.ExtraRights; + + (*if (not Assigned(FMenu)) and (not Assigned(fUserControl.ControlRight.ActionList)) + {.$IFDEF UCACTMANAGER} and (not Assigned(fUserControl.ControlRight.ActionManager)) and + (not Assigned(fUserControl.ControlRight.ActionMainMenuBar)) + {.$ENDIF} then + begin + if (Assigned(FMenu)) + {.$IFDEF UCACTMANAGER} and (not Assigned(fUserControl.ControlRight.ActionMainMenuBar)) + {.$ENDIF} then*) + + //TempNode := nil; + if Assigned(FMenu) then + begin + TreeMenu.Items.Clear; + for Contador := 0 to FMenu.Items.Count - 1 do + if FMenu.Items[Contador].Count > 0 then + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := FMenu.Items[Contador].Name; + TempNode := TreeMenu.Items.AddObject(nil, StringReplace(FMenu.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + TrataItem(FMenu.Items[Contador], TempNode); + end + else + if FMenu.Items[Contador].Caption <> '-' then + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := FMenu.Items[Contador].Name; + TreeMenu.Items.AddObject(nil, StringReplace(FMenu.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + end; + TreeMenu.FullExpand; + TreeMenu.Perform(WM_VSCROLL, SB_TOP, 0); + end; + + {.$IFDEF UCACTMANAGER} + //TempNode := nil; + if Assigned(FActionMainMenuBar) then + begin + TreeMenu.Items.Clear; + for Contador := 0 to FActionMainMenuBar.ActionClient.Items.Count - 1 do + begin + Temp := IntToStr(Contador); + if FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Items.Count > 0 then + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := #1 + 'G' + FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption; + TempNode := TreeMenu.Items.AddObject(nil, StringReplace(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, '&', '', [rfReplaceAll]), FTempMPointer); + TrataItem(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)], TempNode); + end + else + begin + New(FTempMPointer); + SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06 + FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06 + FTempMPointer.Selecionado := 0; + FTempMPointer.MenuName := FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Action.Name; + TreeMenu.Items.AddObject(nil, StringReplace(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Action.Name, '&', '', [rfReplaceAll]), FTempMPointer); + end; + TreeMenu.FullExpand; + TreeMenu.Perform(WM_VSCROLL, SB_TOP, 0); + end; + end; + {.$ENDIF} + +(*if (Assigned(fUserControl.ControlRight.ActionList)) + {.$IFDEF UCACTMANAGER} or (Assigned(fUserControl.ControlRight.ActionManager)) + {.$ENDIF} then*) + + TempNode := nil; + if Assigned(FActions) then + begin + TreeAction.Items.Clear; + if Assigned(FTempLista) then + FreeAndNil(FTempLista); + FTempLista := TStringList.Create; + for Contador := 0 to TActionList(FActions).ActionCount - 1 do + FTempLista.Append(TActionList(FActions).Actions[contador].Category + #1 + TActionList(FActions).Actions[contador].Name + #2 + TAction(TActionList(FActions).Actions[contador]).Caption); + FTempLista.Sort; + Temp := #1; + for Contador := 0 to FTempLista.Count - 1 do + begin + if Temp <> Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1) then + begin + New(FTempAPointer); + SetLength(FListaAction, Length(FListaAction) + 1); //Adicionado por Luiz 18/01/06 + FListaAction[High(FListaAction)] := FTempAPointer; //Adicionado por Luiz 18/01/06 + FTempAPointer.Grupo := True; + FTempAPointer.Selecionado := 0; + FTempAPointer.MenuName := 'Grupo'; + TempNode := TreeAction.Items.AddObject(nil, StringReplace(Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1), '&', '', [rfReplaceAll]), FTempAPointer); + TempNode.ImageIndex := 2; + TempNode.SelectedIndex := 2; + Temp := Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1); + end; + Temp2 := FTempLista[Contador]; + Delete(Temp2, 1, pos(#1, Temp2)); + New(FTempAPointer); + SetLength(FListaAction, Length(FListaAction) + 1); //Adicionado por Luiz 18/01/06 + FListaAction[High(FListaAction)] := FTempAPointer; //Adicionado por Luiz 18/01/06 + FTempAPointer.Grupo := False; + FTempAPointer.Selecionado := 0; + FTempAPointer.MenuName := Copy(Temp2, 1, Pos(#2, Temp2) - 1); + Delete(Temp2, 1, pos(#2, Temp2)); + TreeAction.Items.AddChildObject(TempNode, StringReplace(Temp2, '&', '', [rfReplaceAll]), FTempAPointer); + end; + TreeAction.FullExpand; + TreeAction.Perform(WM_VSCROLL, SB_TOP, 0); + end; + + //ExtraRights + TempNode := nil; + if Self.FExtraRights.Count > 0 then + begin + TreeControls.Items.Clear; + if Assigned(FTempLista) then + FreeAndNil(FTempLista); + FTempLista := TStringList.Create; + for Contador := 0 to Pred(FExtraRights.Count) do + FTempLista.Append(FExtraRights[Contador].GroupName + #1 + FExtraRights[Contador].Caption + #2 + FExtraRights[Contador].FormName + #3 + FExtraRights[Contador].CompName); + FTempLista.Sort; + Temp := #1; + for Contador := 0 to Pred(FTempLista.Count) do + begin + if Temp <> Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1) then + begin + New(FTempCPointer); + SetLength(FListaControl, Length(FListaControl) + 1); //Adicionado por Luiz 18/01/06 + FListaControl[High(FListaControl)] := FTempCPointer; //Adicionado por Luiz 18/01/06 + FTempCPointer.Grupo := True; + FTempCPointer.Selecionado := 0; + FTempCPointer.FormName := 'Grupo'; + FTempCPointer.CompName := 'Grupo'; + TempNode := TreeControls.Items.AddObject(nil, Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1), FTempCPointer); + TempNode.ImageIndex := 2; + TempNode.SelectedIndex := 2; + Temp := Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1); + end; + Temp2 := FTempLista[Contador]; + Delete(Temp2, 1, pos(#1, Temp2)); + New(FTempCPointer); + SetLength(FListaControl, Length(FListaControl) + 1); //Adicionado por Luiz 18/01/06 + FListaControl[High(FListaControl)] := FTempCPointer; //Adicionado por Luiz 18/01/06 + FTempCPointer.Grupo := False; + FTempCPointer.Selecionado := 0; + Desc := Copy(Temp2, 1, Pos(#2, Temp2) - 1); // descricao do objeto + Delete(Temp2, 1, pos(#2, Temp2)); + + FTempCPointer.FormName := Copy(Temp2, 1, Pos(#3, Temp2) - 1); + Delete(Temp2, 1, pos(#3, Temp2)); + FTempCPointer.CompName := Temp2; + TreeControls.Items.AddChildObject(TempNode, Desc, FTempCPointer); + FTempCPointer := nil; + end; + TreeControls.FullExpand; + TreeControls.Perform(WM_VSCROLL, SB_TOP, 0); + end; + + PageMenu.TabVisible := Assigned(FMenu); + + PageAction.TabVisible := Assigned(FActions); + + PageControls.TabVisible := (Assigned(FExtraRights) and (FExtraRights.Count > 0)); +end; + +procedure TUserPermis.UnCheckChild(node: TTreeNode); +var + child: TTreeNode; +begin + PTreemenu(node.Data).Selecionado := 0; + node.ImageIndex := 0; + node.SelectedIndex := 0; + child := node.GetFirstChild; + repeat + if child.HasChildren then + UnCheckChild(child) + else + begin + PTreemenu(child.Data).Selecionado := 0; + child.ImageIndex := 0; + child.SelectedIndex := 0; + end; + child := node.GetNextChild(child); + until child = nil; +end; + +procedure TUserPermis.TreeMenuItem(Marca: Boolean); +var + AbsIdx: Integer; +begin + if Marca then + if PTreemenu(TreeMenu.Selected.Data).Selecionado < 2 then + begin + if PTreemenu(TreeMenu.Selected.Data).Selecionado = 0 then //marcar + begin + AbsIdx := TreeMenu.Selected.AbsoluteIndex; + while AbsIdx > -1 do + begin + PTreemenu(TreeMenu.Items.Item[AbsIdx].Data).Selecionado := 1; + TreeMenu.Items.Item[AbsIdx].ImageIndex := 1; + TreeMenu.Items.Item[AbsIdx].SelectedIndex := 1; + if TreeMenu.Items.Item[AbsIdx].Parent <> nil then + begin + AbsIdx := TreeMenu.Items.Item[AbsIdx].Parent.AbsoluteIndex; + if PTreemenu(TreeMenu.Items.Item[AbsIdx].Data).Selecionado = 2 then + AbsIdx := -1; + end + else + AbsIdx := -1; + end; + end + else + if TreeMenu.Selected.HasChildren then + UnCheckChild(TreeMenu.Selected) + else + begin + PTreemenu(TreeMenu.Selected.Data).Selecionado := 0; + TreeMenu.Selected.ImageIndex := 0; + TreeMenu.Selected.SelectedIndex := 0; + end; //desmarcar + TreeMenu.Repaint; + end; +end; + +procedure TUserPermis.TreeActionItem(marca: Boolean); +begin + if not Assigned(FActions) then + Exit; + if PTreeAction(TreeAction.Selected.Data).Grupo then + Exit; + if Marca then + begin + if PTreeAction(TreeAction.Selected.Data).Selecionado < 2 then + if PTreeAction(TreeAction.Selected.Data).Selecionado = 0 then + PTreeAction(TreeAction.Selected.Data).Selecionado := 1 + else + PTreeAction(TreeAction.Selected.Data).Selecionado := 0; + TreeAction.Selected.ImageIndex := PTreeAction(TreeAction.Selected.Data).Selecionado; + TreeAction.Selected.SelectedIndex := PTreeAction(TreeAction.Selected.Data).Selecionado; + end; + TreeAction.Repaint; +end; + +procedure TUserPermis.TreeControlItem(marca: Boolean); +begin + if PTreeControl(TreeControls.Selected.Data).Grupo then + Exit; + if Marca then + begin + if PTreeControl(TreeControls.Selected.Data).Selecionado < 2 then + if PTreeControl(TreeControls.Selected.Data).Selecionado = 0 then + PTreeControl(TreeControls.Selected.Data).Selecionado := 1 + else + PTreeControl(TreeControls.Selected.Data).Selecionado := 0; + TreeControls.Selected.ImageIndex := PTreeControl(TreeControls.Selected.Data).Selecionado; + TreeControls.Selected.SelectedIndex := PTreeAction(TreeControls.Selected.Data).Selecionado; + end; + TreeControls.Repaint; +end; + +procedure TUserPermis.TreeMenuClick(Sender: TObject); +begin + if not FChangingTree then + TreeMenuItem(True); +end; + +procedure TUserPermis.BtCancelClick(Sender: TObject); +begin + Close; +end; + +procedure TUserPermis.BtLiberaClick(Sender: TObject); +begin + Atualiza(True); +end; + +procedure TUserPermis.Atualiza(Selec: Boolean); +var + Contador: Integer; + Temp: Integer; +begin + if Selec then + Temp := 1 + else + Temp := 0; + + if PC.ActivePage = PageMenu then + begin + for Contador := 0 to TreeMenu.Items.Count - 1 do + if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado < 2 then + begin + PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Temp; + TreeMenu.Items[Contador].ImageIndex := Temp; + TreeMenu.Items[Contador].SelectedIndex := Temp; + end; + TreeMenu.Repaint; + end + else + if PC.ActivePage = PageAction then + begin + for Contador := 0 to TreeAction.Items.Count - 1 do + if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then + if PTreeAction(TreeAction.Items[Contador].Data).Selecionado < 2 then + begin + PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Temp; + TreeAction.Items[Contador].ImageIndex := Temp; + TreeAction.Items[Contador].SelectedIndex := Temp; + end; + TreeAction.Repaint; + end + else + begin // tabContols + for Contador := 0 to TreeControls.Items.Count - 1 do + if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then + if PTreeControl(TreeControls.Items[Contador].Data).Selecionado < 2 then + begin + PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Temp; + TreeControls.Items[Contador].ImageIndex := Temp; + TreeControls.Items[Contador].SelectedIndex := Temp; + end; + TreeControls.Repaint; + end; +end; + + +procedure TUserPermis.BtBloqueiaClick(Sender: TObject); +begin + Atualiza(False); +end; + +procedure TUserPermis.FormShow(Sender: TObject); +var + Contador: Integer; + Selec: Integer; +begin + // Adcionado por Luiz + SetLength(FListaAction, 0); + SetLength(FListaMenu, 0); + SetLength(FListaControl, 0); + + //carrega itens do menu, actions e controles + CarregaTreeviews; + + // Exibe Permissoes do Usuario + for Contador := 0 to TreeAction.Items.Count - 1 do + begin + DSPermiss.First; + if DSPermiss.Locate('ObjName', PTreeAction(TreeAction.Items[Contador].Data).MenuName, []) then + Selec := 1 + else + Selec := 0; + + PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Selec; + if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then + begin + TreeAction.Items[Contador].ImageIndex := Selec; + TreeAction.Items[Contador].SelectedIndex := Selec; + end; + end; + + for Contador := 0 to TreeMenu.Items.Count - 1 do + begin + DSPermiss.First; + if DSPermiss.Locate('ObjName', PTreeMenu(TreeMenu.Items[Contador].Data).MenuName, []) then + Selec := 1 + else + Selec := 0; + + PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Selec; + TreeMenu.Items[Contador].ImageIndex := Selec; + TreeMenu.Items[Contador].SelectedIndex := Selec; + end; + + //Extra Rights + for Contador := 0 to Pred(TreeControls.Items.Count) do + begin + DSPermissEX.First; + if DSPermissEX.Locate('FormName;ObjName', VarArrayOf([PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName]), []) then + Selec := 1 + else + Selec := 0; + + PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Selec; + if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then + begin + TreeControls.Items[Contador].ImageIndex := Selec; + TreeControls.Items[Contador].SelectedIndex := Selec; + end; + end; + + // Exibe Permissoes do Perfil + if DSPerfil.Active then + begin + for Contador := 0 to TreeAction.Items.Count - 1 do + begin + DSPerfil.First; + if DSPerfil.Locate('ObjName', PTreeAction(TreeAction.Items[Contador].Data).MenuName, []) then + begin + Selec := 2; + PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Selec; + if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then + begin + TreeAction.Items[Contador].ImageIndex := Selec; + TreeAction.Items[Contador].SelectedIndex := Selec; + end; + end; + end; + + for Contador := 0 to TreeMenu.Items.Count - 1 do + begin + DSPerfil.First; + if DSPerfil.Locate('ObjName', PTreeMenu(TreeMenu.Items[Contador].Data).MenuName, []) then + begin + Selec := 2; + PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Selec; + TreeMenu.Items[Contador].ImageIndex := Selec; + TreeMenu.Items[Contador].SelectedIndex := Selec; + end; + end; + + //Extra Rights + for Contador := 0 to Pred(TreeControls.Items.Count) do + begin + DSPerfilEX.First; + if DSPerfilEX.Locate('FormName;ObjName', VarArrayOf([PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName]), []) then + begin + Selec := 2; + PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Selec; + if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then + begin + TreeControls.Items[Contador].ImageIndex := Selec; + TreeControls.Items[Contador].SelectedIndex := Selec; + end; + end; + end; + end; + + TreeAction.Repaint; + TreeMenu.Repaint; + FChangingTree := False; +end; + +procedure TUserPermis.TreeActionClick(Sender: TObject); +begin + if not FChangingTree then + TreeActionItem(True); +end; + +procedure TUserPermis.TreeControlsClick(Sender: TObject); +begin + if not FChangingTree then + TreeControlItem(True); +end; + +procedure TUserPermis.TreeMenuCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean); +begin + if (Self.Showing) and (TTreeView(Sender).Focused) then + FChangingTree := True; +end; + +procedure TUserPermis.TreeMenuKeyPress(Sender: TObject; var Key: char); +begin + if Key = ' ' then + begin + TTreeView(Sender).OnClick(Sender); + Key := #0; + end; +end; + +procedure TUserPermis.TreeMenuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + FChangingTree := False; +end; + +procedure TUserPermis.FormDestroy(Sender: TObject); +var + Contador: Integer; +begin + // Adicionado por Luiz 18/01/06 + if Assigned(DSPermiss) then + FreeAndNil(DSPermiss); + + if Assigned(DSPermissEX) then + FreeAndNil(DSPermissEX); + + if Assigned(DSPerfil) then + FreeAndNil(DSPerfil); + + if Assigned(DSPerfilEX) then + FreeAndNil(DSPerfilEX); + + if Assigned(FTempLista) then + FreeAndNil(FTempLista); + + for Contador := 0 to High(FListaMenu) do + Dispose(FListaMenu[Contador]); + + for Contador := 0 to High(FListaAction) do + Dispose(FListaAction[Contador]); + + for Contador := 0 to High(FListaControl) do + Dispose(FListaControl[Contador]); +end; + +end. + diff --git a/internal/2.31RC1/1/Source/md5.pas b/internal/2.31RC1/1/Source/md5.pas new file mode 100644 index 0000000..13fcc9e --- /dev/null +++ b/internal/2.31RC1/1/Source/md5.pas @@ -0,0 +1,401 @@ +// tabs = 2 +// ----------------------------------------------------------------------------------------------- + +// MD5 Message-Digest for Delphi 4 + + // Delphi 4 Unit implementing the + // RSA Data Security, Inc. MD5 Message-Digest Algorithm + +// Implementation of Ronald L. Rivest's RFC 1321 + + // Copyright © 1997-1999 Medienagentur Fichtner & Meyer + // Written by Matthias Fichtner + +// ----------------------------------------------------------------------------------------------- +// See RFC 1321 for RSA Data Security's copyright and license notice! +// ----------------------------------------------------------------------------------------------- + +// 14-Jun-97 mf Implemented MD5 according to RFC 1321 RFC 1321 +// 16-Jun-97 mf Initial release of the compiled unit (no source code) RFC 1321 +// 28-Feb-99 mf Added MD5Match function for comparing two digests RFC 1321 +// 13-Sep-99 mf Reworked the entire unit RFC 1321 +// 17-Sep-99 mf Reworked the "Test Driver" project RFC 1321 +// 19-Sep-99 mf Release of sources for MD5 unit and "Test Driver" project RFC 1321 + +// ----------------------------------------------------------------------------------------------- + // The latest release of md5.pas will always be available from + // the distribution site at: http://www.fichtner.net/delphi/md5/ +// ----------------------------------------------------------------------------------------------- + // Please send questions, bug reports and suggestions + // regarding this code to: mfichtner@fichtner-meyer.com +// ----------------------------------------------------------------------------------------------- + // This code is provided "as is" without express or + // implied warranty of any kind. Use it at your own risk. +// ----------------------------------------------------------------------------------------------- + +unit md5; + +// ----------------------------------------------------------------------------------------------- +interface +// ----------------------------------------------------------------------------------------------- + +uses + Windows; + +type + MD5Count = array[0..1] of DWORD; + MD5State = array[0..3] of DWORD; + MD5Block = array[0..15] of DWORD; + MD5CBits = array[0..7] of Byte; + MD5Digest = array[0..15] of Byte; + MD5Buffer = array[0..63] of Byte; + + MD5Context = record + State: MD5State; + Count: MD5Count; + Buffer: MD5Buffer; + end; + +procedure MD5Init(var Context: MD5Context); +procedure MD5Update(var Context: MD5Context; Input: PChar; Length: longword); +procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest); + +function MD5String(M: String): MD5Digest; +function MD5File(N: String): MD5Digest; +function MD5Print(D: MD5Digest): String; + +function MD5Match(D1, D2: MD5Digest): Boolean; + +// ----------------------------------------------------------------------------------------------- +implementation +// ----------------------------------------------------------------------------------------------- + +var + PADDING: MD5Buffer = ($80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00); + +function F(x, y, z: DWORD): DWORD; +begin + Result := (x and y) or ((not x) and z); +end; + +function G(x, y, z: DWORD): DWORD; +begin + Result := (x and z) or (y and (not z)); +end; + +function H(x, y, z: DWORD): DWORD; +begin + Result := x xor y xor z; +end; + +function I(x, y, z: DWORD): DWORD; +begin + Result := y xor (x or (not z)); +end; + +procedure rot(var x: DWORD; n: Byte); +begin + x := (x shl n) or (x shr (32 - n)); +end; + +procedure FF(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD); +begin + Inc(a, F(b, c, d) + x + ac); + rot(a, s); + Inc(a, b); +end; + +procedure GG(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD); +begin + Inc(a, G(b, c, d) + x + ac); + rot(a, s); + Inc(a, b); +end; + +procedure HH(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD); +begin + Inc(a, H(b, c, d) + x + ac); + rot(a, s); + Inc(a, b); +end; + +procedure II(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD); +begin + Inc(a, I(b, c, d) + x + ac); + rot(a, s); + Inc(a, b); +end; + +// ----------------------------------------------------------------------------------------------- + +// Encode Count bytes at Source into (Count / 4) DWORDs at Target +procedure Encode(Source, Target: pointer; Count: longword); +var + S: PByte; + T: PDWORD; + I: longword; +begin + S := Source; + T := Target; + for I := 1 to Count div 4 do + begin + T^ := S^; + Inc(S); + T^ := T^ or (S^ shl 8); + Inc(S); + T^ := T^ or (S^ shl 16); + Inc(S); + T^ := T^ or (S^ shl 24); + Inc(S); + Inc(T); + end; +end; + +// Decode Count DWORDs at Source into (Count * 4) Bytes at Target +procedure Decode(Source, Target: pointer; Count: longword); +var + S: PDWORD; + T: PByte; + I: longword; +begin + S := Source; + T := Target; + for I := 1 to Count do + begin + T^ := S^ and $ff; + Inc(T); + T^ := (S^ shr 8) and $ff; + Inc(T); + T^ := (S^ shr 16) and $ff; + Inc(T); + T^ := (S^ shr 24) and $ff; + Inc(T); + Inc(S); + end; +end; + +// Transform State according to first 64 bytes at Buffer +procedure Transform(Buffer: pointer; var State: MD5State); +var + a, b, c, d: DWORD; + Block: MD5Block; +begin + Encode(Buffer, @Block, 64); + a := State[0]; + b := State[1]; + c := State[2]; + d := State[3]; + FF(a, b, c, d, Block[0], 7, $d76aa478); + FF(d, a, b, c, Block[1], 12, $e8c7b756); + FF(c, d, a, b, Block[2], 17, $242070db); + FF(b, c, d, a, Block[3], 22, $c1bdceee); + FF(a, b, c, d, Block[4], 7, $f57c0faf); + FF(d, a, b, c, Block[5], 12, $4787c62a); + FF(c, d, a, b, Block[6], 17, $a8304613); + FF(b, c, d, a, Block[7], 22, $fd469501); + FF(a, b, c, d, Block[8], 7, $698098d8); + FF(d, a, b, c, Block[9], 12, $8b44f7af); + FF(c, d, a, b, Block[10], 17, $ffff5bb1); + FF(b, c, d, a, Block[11], 22, $895cd7be); + FF(a, b, c, d, Block[12], 7, $6b901122); + FF(d, a, b, c, Block[13], 12, $fd987193); + FF(c, d, a, b, Block[14], 17, $a679438e); + FF(b, c, d, a, Block[15], 22, $49b40821); + GG(a, b, c, d, Block[1], 5, $f61e2562); + GG(d, a, b, c, Block[6], 9, $c040b340); + GG(c, d, a, b, Block[11], 14, $265e5a51); + GG(b, c, d, a, Block[0], 20, $e9b6c7aa); + GG(a, b, c, d, Block[5], 5, $d62f105d); + GG(d, a, b, c, Block[10], 9, $2441453); + GG(c, d, a, b, Block[15], 14, $d8a1e681); + GG(b, c, d, a, Block[4], 20, $e7d3fbc8); + GG(a, b, c, d, Block[9], 5, $21e1cde6); + GG(d, a, b, c, Block[14], 9, $c33707d6); + GG(c, d, a, b, Block[3], 14, $f4d50d87); + GG(b, c, d, a, Block[8], 20, $455a14ed); + GG(a, b, c, d, Block[13], 5, $a9e3e905); + GG(d, a, b, c, Block[2], 9, $fcefa3f8); + GG(c, d, a, b, Block[7], 14, $676f02d9); + GG(b, c, d, a, Block[12], 20, $8d2a4c8a); + HH(a, b, c, d, Block[5], 4, $fffa3942); + HH(d, a, b, c, Block[8], 11, $8771f681); + HH(c, d, a, b, Block[11], 16, $6d9d6122); + HH(b, c, d, a, Block[14], 23, $fde5380c); + HH(a, b, c, d, Block[1], 4, $a4beea44); + HH(d, a, b, c, Block[4], 11, $4bdecfa9); + HH(c, d, a, b, Block[7], 16, $f6bb4b60); + HH(b, c, d, a, Block[10], 23, $bebfbc70); + HH(a, b, c, d, Block[13], 4, $289b7ec6); + HH(d, a, b, c, Block[0], 11, $eaa127fa); + HH(c, d, a, b, Block[3], 16, $d4ef3085); + HH(b, c, d, a, Block[6], 23, $4881d05); + HH(a, b, c, d, Block[9], 4, $d9d4d039); + HH(d, a, b, c, Block[12], 11, $e6db99e5); + HH(c, d, a, b, Block[15], 16, $1fa27cf8); + HH(b, c, d, a, Block[2], 23, $c4ac5665); + II(a, b, c, d, Block[0], 6, $f4292244); + II(d, a, b, c, Block[7], 10, $432aff97); + II(c, d, a, b, Block[14], 15, $ab9423a7); + II(b, c, d, a, Block[5], 21, $fc93a039); + II(a, b, c, d, Block[12], 6, $655b59c3); + II(d, a, b, c, Block[3], 10, $8f0ccc92); + II(c, d, a, b, Block[10], 15, $ffeff47d); + II(b, c, d, a, Block[1], 21, $85845dd1); + II(a, b, c, d, Block[8], 6, $6fa87e4f); + II(d, a, b, c, Block[15], 10, $fe2ce6e0); + II(c, d, a, b, Block[6], 15, $a3014314); + II(b, c, d, a, Block[13], 21, $4e0811a1); + II(a, b, c, d, Block[4], 6, $f7537e82); + II(d, a, b, c, Block[11], 10, $bd3af235); + II(c, d, a, b, Block[2], 15, $2ad7d2bb); + II(b, c, d, a, Block[9], 21, $eb86d391); + Inc(State[0], a); + Inc(State[1], b); + Inc(State[2], c); + Inc(State[3], d); +end; + +// ----------------------------------------------------------------------------------------------- + +// Initialize given Context +procedure MD5Init(var Context: MD5Context); +begin + with Context do + begin + State[0] := $67452301; + State[1] := $efcdab89; + State[2] := $98badcfe; + State[3] := $10325476; + Count[0] := 0; + Count[1] := 0; + ZeroMemory(@Buffer, SizeOf(MD5Buffer)); + end; +end; + +// Update given Context to include Length bytes of Input +procedure MD5Update(var Context: MD5Context; Input: PChar; Length: longword); +var + Index: longword; + PartLen: longword; + I: longword; +begin + with Context do + begin + Index := (Count[0] shr 3) and $3f; + Inc(Count[0], Length shl 3); + if Count[0] < (Length shl 3) then + Inc(Count[1]); + Inc(Count[1], Length shr 29); + end; + PartLen := 64 - Index; + if Length >= PartLen then + begin + CopyMemory(@Context.Buffer[Index], Input, PartLen); + Transform(@Context.Buffer, Context.State); + I := PartLen; + while I + 63 < Length do + begin + Transform(@Input[I], Context.State); + Inc(I, 64); + end; + Index := 0; + end + else + I := 0; + CopyMemory(@Context.Buffer[Index], @Input[I], Length - I); +end; + +// Finalize given Context, create Digest and zeroize Context +procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest); +var + Bits: MD5CBits; + Index: longword; + PadLen: longword; +begin + Decode(@Context.Count, @Bits, 2); + Index := (Context.Count[0] shr 3) and $3f; + if Index < 56 then + PadLen := 56 - Index + else + PadLen := 120 - Index; + MD5Update(Context, @PADDING, PadLen); + MD5Update(Context, @Bits, 8); + Decode(@Context.State, @Digest, 4); + ZeroMemory(@Context, SizeOf(MD5Context)); +end; + +// ----------------------------------------------------------------------------------------------- + +// Create digest of given Message +function MD5String(M: String): MD5Digest; +var + Context: MD5Context; +begin + MD5Init(Context); + MD5Update(Context, PChar(M), length(M)); + MD5Final(Context, Result); +end; + +// Create digest of file with given Name +function MD5File(N: String): MD5Digest; +var + FileHandle: THandle; + MapHandle: THandle; + ViewPointer: pointer; + Context: MD5Context; +begin + MD5Init(Context); + FileHandle := CreateFile(PChar(N), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, + nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0); + if FileHandle <> INVALID_HANDLE_VALUE then + try + MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil); + if MapHandle <> 0 then + try + ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0); + if ViewPointer <> nil then + try + MD5Update(Context, ViewPointer, GetFileSize(FileHandle, nil)); + finally + UnmapViewOfFile(ViewPointer); + end; + finally + CloseHandle(MapHandle); + end; + finally + CloseHandle(FileHandle); + end; + MD5Final(Context, Result); +end; + +// Create hex representation of given Digest +function MD5Print(D: MD5Digest): String; +var + I: Byte; +const + Digits: array[0..15] of char = + ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); +begin + Result := ''; + for I := 0 to 15 do + Result := Result + Digits[(D[I] shr 4) and $0f] + Digits[D[I] and $0f]; +end; + +// ----------------------------------------------------------------------------------------------- + +// Compare two Digests +function MD5Match(D1, D2: MD5Digest): Boolean; +var + I: Byte; +begin + I := 0; + Result := True; + while Result and (I < 16) do + begin + Result := D1[I] = D2[I]; + Inc(I); + end; +end; + +end. + diff --git a/internal/2.31RC1/1/Source/pUCFrame_Log.dfm b/internal/2.31RC1/1/Source/pUCFrame_Log.dfm new file mode 100644 index 0000000..d3067b1 --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCFrame_Log.dfm @@ -0,0 +1,593 @@ +object UCFrame_Log: TUCFrame_Log + Left = 0 + Top = 0 + Width = 563 + Height = 498 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 0 + TabStop = True + object DBGrid1: TDBGrid + Left = 0 + Top = 0 + Width = 563 + Height = 394 + Align = alClient + Ctl3D = True + DataSource = DataSource1 + DefaultDrawing = False + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit] + ParentCtl3D = False + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + OnDrawColumnCell = DBGrid1DrawColumnCell + Columns = < + item + Expanded = False + Visible = True + end + item + Expanded = False + Visible = True + end + item + Expanded = False + Visible = True + end + item + Expanded = False + Visible = True + end + item + Expanded = False + Visible = True + end> + end + object Panel1: TPanel + Left = 0 + Top = 394 + Width = 563 + Height = 104 + Align = alBottom + BevelOuter = bvNone + TabOrder = 1 + object lbUsuario: TLabel + Left = 16 + Top = 8 + Width = 42 + Height = 13 + Caption = 'Usu'#225'rio :' + end + object lbData: TLabel + Left = 176 + Top = 8 + Width = 29 + Height = 13 + Caption = 'Data :' + end + object lbNivel: TLabel + Left = 376 + Top = 8 + Width = 69 + Height = 13 + Caption = 'N'#237'vel m'#237'nimo :' + end + object Bevel3: TBevel + Left = 16 + Top = 63 + Width = 529 + Height = 2 + Style = bsRaised + end + object btfiltro: TBitBtn + Left = 124 + Top = 71 + Width = 101 + Height = 25 + Cursor = crHandPoint + Caption = 'Aplicar filtro' + Enabled = False + TabOrder = 4 + OnClick = btfiltroClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7A694731FF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA8A8A86C + 6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7AB09888694731FF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7B1 + B1B16B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7ADCCCC286624D694731FF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DA + DADA8585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7ADECFC686624D694731FF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DC + DCDC8484846C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7ADFD1C886624D694731FF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DD + DDDD8585856B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7AE1D3CB86624D694731FF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DF + DFDF8585856B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7AE2D6CE86624D694731FF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7E2 + E2E28585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFA68B7AE4D8D086624D694731FF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA8A8A8E3 + E3E38585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFA68B7AFFFFFFDACABFBDA69686624D694731FF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFD8 + D8D8BDBDBD8484846C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFA68B7AFFFFFFF0F0F0E1D4CCD1BBADB4937E86624D694731FF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFF5F5F5E0 + E0E0CDCDCDAEAEAE8585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFA68B7AFFFFFFF0F0F0ECE4E0E6DBD5DFD1C7CFB9AABE9F8A86624D6947 + 31FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFF5F5F5ECECECE5 + E5E5DEDEDECBCBCBB7B7B78585856B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF + A68B7AFFFFFFF0F0F0F5F0EEF1EAE7ECE3DEE6DBD5DCCDC2CFB9AAB4937E8662 + 4D694731FF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFF5F5F5F5F5F5F0F0F0EC + ECECE6E6E6DADADACBCBCBAEAEAE8585856B6B6BFF00FFFF00FFFF00FFA68B7A + FFFFFFF0F0F0F3EEEAF0E9E5EDE6E1E5D9D1E5D9D1E2D6CEDED0C6CFB9AABE9F + 8A86624D694731FF00FFFF00FFA7A7A7FFFFFFF5F5F5F3F3F3F0F0F0EDEDEDE4 + E4E4E3E3E3E2E2E2DDDDDDCBCBCBB7B7B78585856C6C6CFF00FFFF00FFB39A89 + B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A + 89B39A89B39A89FF00FFFF00FFB4B4B4B3B3B3B3B3B3B3B3B3B4B4B4B3B3B3B3 + B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3FF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object btfecha: TBitBtn + Left = 338 + Top = 71 + Width = 101 + Height = 25 + Cursor = crHandPoint + Caption = 'Fechar' + TabOrder = 5 + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + object btexclui: TBitBtn + Left = 231 + Top = 71 + Width = 101 + Height = 25 + Cursor = crHandPoint + Caption = 'Excluir Log' + TabOrder = 6 + OnClick = btexcluiClick + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000220B0000220B000000010000000100000031DE000031 + E7000031EF000031F700FF00FF000031FF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404 + 0404040404040404000004000004040404040404040404000004040000000404 + 0404040404040000040404000000000404040404040000040404040402000000 + 0404040400000404040404040404000000040000000404040404040404040400 + 0101010004040404040404040404040401010204040404040404040404040400 + 0201020304040404040404040404030201040403030404040404040404050203 + 0404040405030404040404040303050404040404040303040404040303030404 + 0404040404040403040403030304040404040404040404040404030304040404 + 0404040404040404040404040404040404040404040404040404} + end + object ComboUsuario: TComboBox + Left = 16 + Top = 24 + Width = 145 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 0 + OnChange = ComboUsuarioChange + end + object Data1: TDateTimePicker + Left = 176 + Top = 25 + Width = 89 + Height = 21 + Date = 37615.000000000000000000 + Time = 37615.000000000000000000 + TabOrder = 1 + OnChange = Data1Change + end + object Data2: TDateTimePicker + Left = 271 + Top = 24 + Width = 89 + Height = 21 + Date = 37615.000000000000000000 + Time = 37615.000000000000000000 + TabOrder = 2 + OnChange = ComboUsuarioChange + end + object ComboNivel: TComboBox + Left = 376 + Top = 24 + Width = 145 + Height = 24 + Style = csOwnerDrawFixed + ItemHeight = 18 + TabOrder = 3 + OnChange = ComboUsuarioChange + OnDrawItem = ComboNivelDrawItem + Items.Strings = ( + 'Faible' + 'Moyen' + 'Haut' + 'Critique') + end + end + object DataSource1: TDataSource + Left = 440 + end + object ImageList1: TImageList + Left = 136 + Top = 153 + Bitmap = { + 494C010104000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002000000001002000000000000020 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000DEDEDE00DEDEDE00DEDEDE00D6D6D600000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000E7C4B300E7C4B300E7C4B300D6B9AE00000000000000 + 000000000000000000000000000000000000000000000000000000A4EB000088 + C8000088C8000088C8000088C8000088C8000088C8000088C8000088C8000088 + C8000088C8000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000DEDEDE00F1F1F100E0E0E000E0E0E000F1F1F100D6D6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000E7C4B300F2E7E100CAD0D600CAD0D600F2E7E100D6B9AE000000 + 000000000000000000000000000000000000000000002DBCFF0040D6F00015C1 + E60015C1E60015C1E60013C0E2003471890011BFDE0015C1E60015C1E60015C1 + E60015C1E60000A4EB00000000000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000000000000000 + 0000DEDEDE00F1F1F100FEFEFE00B5B5B500ACACAC00D1D1D100F1F1F100D6D6 + D600000000000000000000000000000000000000000000000000000000000000 + 0000E7C4B300F2E7E100FEFEFE00D0805D00C4695200BFB9B900F2E7E100D6B9 + AE00000000000000000000000000000000000000000078CCE80066E5F8002ECB + EC002DCAEB002CCAEB003471890031001000347189002BC8EA002BC8EA002BC8 + EA0013B9DD002DBCFF000000000000000000000000000000FF000000FF000000 + FF000000FF000000FF000000FF0000000000000000000000FF000000FF000000 + FF000000FF000000FF000000FF0000000000000000000000000000000000DEDE + DE00F1F1F100FEFEFE00B5B5B500ACACAC00A8A8A800ACACAC00D1D1D100F1F1 + F100D6D6D600000000000000000000000000000000000000000000000000E7C4 + B300F2E7E100FEFEFE00D0805D00C46E5200BF694C00C4695200BFB9B900F2E7 + E100D6B9AE0000000000000000000000000000000000000000002DBCFF0040D6 + F00039CEEC0038CDEB002DC8E2003471890021C4DA0036CAEA0035CAEA0035CA + EA0000A4EB0000000000000000000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF0000000000000000000000FF000000FF000000 + FF000000FF000000FF0000000000000000000000000000000000DEDEDE00F1F1 + F100FEFEFE00B5B5B500ACACAC00F5F5F500F5F5F500EFEFEF00A8A8A800D1D1 + D100F1F1F100D6D6D60000000000000000000000000000000000E7C4B300F2E7 + E100FEFEFE00D0805D00C46E5200F8EDE700F8EDE700F8E1D600BF694C00BFB9 + B900F2E7E100D6B9AE000000000000000000000000000000000078CCE80066E5 + F8003ACEEC0039CEEC0038CDEB003471890037CBEA0036CAEA0036CAEA0013B9 + DD002DBCFF0000000000000000000000000000000000000000000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF00000000000000000000000000DEDEDE00F1F1F100FEFE + FE00B5B5B500ACACAC00ACACAC00ACACAC00F5F5F500ACACAC00ACACAC00A8A8 + A800D1D1D100F1F1F100D6D6D6000000000000000000E7C4B300F2E7E100FEFE + FE00D0805D00C46E5200C46E5200C46E5200F8EDE700C46E5200C46E5200BF69 + 4C00BFB9B900F2E7E100D6B9AE00000000000000000000000000000000002DBC + FF0040D6F0003BCFED0017BACC003100100017BACC0037CAEA0036CAEA0000A4 + EB00000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF0000000000000000000000000000000000E5E5E500FEFEFE00B5B5 + B500B0B0B000ACACAC00ACACAC00ACACAC00F5F5F500ACACAC00ACACAC00ACAC + AC00A8A8A800D1D1D100D6D6D6000000000000000000EDD0C400FEFEFE00D080 + 5D00CA7A5700C46E5200C46E5200C46E5200F8EDE700C46E5200C46E5200C46E + 5200BF694C00BFB9B900D6B9AE000000000000000000000000000000000078CC + E80066E5F8003CD0ED001796A700310010001796A70037CBEA0013B9DD002DBC + FF00000000000000000000000000000000000000000000000000000000000000 + FF000000FF000000FF000000FF0000000000000000000000FF000000FF000000 + FF000000FF0000000000000000000000000000000000E5E5E500FFFFFF00EBEB + EB00C4C4C400B0B0B000ACACAC00ACACAC00F5F5F500ACACAC00ACACAC00ACAC + AC00B5B5B500E0E0E000D6D6D6000000000000000000EDD0C400FFFFFF00F8E1 + CA00E1A27400CA7A5700C46E5200C46E5200F8EDE700C46E5200C46E5200C46E + 5200D0805D00CAD0D600D6B9AE00000000000000000000000000000000000000 + 00002DBCFF0040D6F0003471890031001000286F7D0038CCEB0000A4EB000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF0000000000000000000000FF000000FF000000 + FF000000000000000000000000000000000000000000DEDEDE00F1F1F100FFFF + FF00EBEBEB00C4C4C400B0B0B000F5F5F500F5F5F500ACACAC00ACACAC00B5B5 + B500F1F1F100F1F1F100D6D6D6000000000000000000E7C4B300F2E7E100FFFF + FF00F8E1CA00E1A27400CA7A5700F8EDE700F8EDE700C46E5200C46E5200D080 + 5D00E7EDED00F2E7E100D6B9AE00000000000000000000000000000000000000 + 000078CCE80066E5F80034718900310010003471890013B9DD002DBCFF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FF000000FF000000FF0000000000000000000000FF000000FF000000 + FF00000000000000000000000000000000000000000000000000DEDEDE00F1F1 + F100FFFFFF00EBEBEB00C4C4C400B0B0B000CDCDCD00ACACAC00B5B5B500FEFE + FE00F1F1F100DBDBDB0000000000000000000000000000000000E7C4B300F2E7 + E100FFFFFF00F8E1CA00E1A27400CA7A5700E7AE8500C46E5200D0805D00FEFE + FE00F2E7E100E1C4B30000000000000000000000000000000000000000000000 + 0000000000002DBCFF0030B3CA002B5768002396A70000A4EB00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF0000000000000000000000FF000000FF000000 + 000000000000000000000000000000000000000000000000000000000000DEDE + DE00F1F1F100FFFFFF00EBEBEB00C4C4C400F5F5F500B5B5B500FEFEFE00F1F1 + F100DBDBDB00000000000000000000000000000000000000000000000000E7C4 + B300F2E7E100FFFFFF00F8E1CA00E1A27400F8EDE700D0805D00FEFEFE00F2E7 + E100E1C4B3000000000000000000000000000000000000000000000000000000 + 00000000000078CCE80066E5F8003ACFEC0013B9DD002DBCFF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000FF000000FF0000000000000000000000FF000000FF000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000DEDEDE00F1F1F100FFFFFF00EBEBEB00B5B5B500FEFEFE00F1F1F100DBDB + DB00000000000000000000000000000000000000000000000000000000000000 + 0000E7C4B300F2E7E100FFFFFF00F8E1CA00D0805D00FEFEFE00F2E7E100E1C4 + B300000000000000000000000000000000000000000000000000000000000000 + 000000000000000000002DBCFF0066E5F80000A4EB0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000DEDEDE00F1F1F100FFFFFF00FEFEFE00F1F1F100DBDBDB000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000E7C4B300F2E7E100FFFFFF00FEFEFE00F2E7E100E1C4B3000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000078CCE8003DD2EE002DBCFF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FF000000FF000000FF000000FF00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000DEDEDE00DEDEDE00DBDBDB00DBDBDB00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000E7C4B300E7C4B300E1C4B300E1C4B300000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000002DBCFF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FF000000FF0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000200000000100010000000000000100000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFFFFFFFFFFFFFFFC3FFC3FC007FFFF + F81FF81F8003C003F00FF00F80038001E007E007C007C003C003C003C007C003 + 80018001E00FE00780018001E00FE00780018001F01FF00F80018001F01FF00F + C003C003F83FF81FE007E007F83FF81FF00FF00FFC7FFC3FF81FF81FFC7FFC3F + FC3FFC3FFEFFFE7FFFFFFFFFFFFFFFFF00000000000000000000000000000000 + 000000000000} + end +end diff --git a/internal/2.31RC1/1/Source/pUCFrame_Log.pas b/internal/2.31RC1/1/Source/pUCFrame_Log.pas new file mode 100644 index 0000000..8234d04 --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCFrame_Log.pas @@ -0,0 +1,305 @@ +unit pUCFrame_Log; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5_UP} +{$ELSE} + Variants, +{$ENDIF} + Buttons, + Classes, + ComCtrls, + Controls, + DB, + DBGrids, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Grids, + ImgList, + Messages, + StdCtrls, + SysUtils, + UCBase, + Windows; + +type + TUCFrame_Log = class(TFrame) + DataSource1: TDataSource; + ImageList1: TImageList; + DBGrid1: TDBGrid; + Panel1: TPanel; + lbUsuario: TLabel; + lbData: TLabel; + lbNivel: TLabel; + Bevel3: TBevel; + btfiltro: TBitBtn; + btfecha: TBitBtn; + btexclui: TBitBtn; + ComboUsuario: TComboBox; + Data1: TDateTimePicker; + Data2: TDateTimePicker; + ComboNivel: TComboBox; + procedure ComboNivelDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); + procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure ComboUsuarioChange(Sender: TObject); + procedure btexcluiClick(Sender: TObject); + procedure Data1Change(Sender: TObject); + procedure btfiltroClick(Sender: TObject); + private + procedure AplicaFiltro; + public + ListIdUser: TStringList; + DSLog, DSCmd: TDataset; + FUsercontrol: TUserControl; + procedure SetWindow; + destructor Destroy; override; + end; + +implementation + +uses + UCDataInfo; + +{$R *.dfm} +destructor TUCFrame_Log.Destroy; +begin + FreeAndnil( DSLog ); + FreeAndnil( DSCmd ); + FreeAndNil( ListIdUser ); + inherited; +end; + +procedure TUCFrame_Log.ComboNivelDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); +var + TempImg: Graphics.TBitmap; +begin + TempImg := Graphics.TBitmap.Create; + Imagelist1.GetBitmap(Index, TempImg); + ComboNivel.Canvas.Draw(Rect.Left + 5, Rect.Top + 1, TempImg); + ComboNivel.Canvas.TextRect(Rect, Rect.Left + 30, Rect.Top + 2, ComboNivel.items[Index]); + ComboNivel.Canvas.Draw(Rect.Left + 5, Rect.Top + 1, TempImg); + FreeAndNil(TempImg); +end; + +procedure TUCFrame_Log.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); +var + TempImg: Graphics.TBitmap; + FData: System.TDateTime; + TempData: String; +begin + if DSLog.IsEmpty then + Exit; + + if UpperCase(Column.FieldName) = 'NIVEL' then + begin + if Column.Field.AsInteger >= 0 then + begin + TempImg := Graphics.TBitmap.Create; + imagelist1.GetBitmap(Column.Field.AsInteger, TempImg); + DbGrid1.Canvas.Draw((((Rect.Left + Rect.Right) - TempImg.Width) div 2), rect.Top, Tempimg); + FreeAndNil(TempImg); + end + else + DbGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Column.Field.AsString); + end + else + if UpperCase(Column.FieldName) = 'DATA' then + begin + TempData := Column.Field.AsString; + FData := EncodeDate(StrToInt(Copy(Tempdata, 1, 4)), StrToInt(Copy(Tempdata, 5, 2)), StrToInt(Copy(Tempdata, 7, 2))) + + EncodeTime(StrToInt(Copy(TempData, 9, 2)), StrToInt(Copy(TempData, 11, 2)), StrToInt(Copy(TempData, 13, 2)), 0); + DbGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, DateTimeToStr(FData)); + end + else + DbGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Column.Field.AsString); +end; + +procedure TUCFrame_Log.ComboUsuarioChange(Sender: TObject); +begin + btFiltro.Enabled := True; +end; + +procedure TUCFrame_Log.btexcluiClick(Sender: TObject); +var + FTabLog, Temp: String; +begin + //modified by fduenas + if MessageBox(Handle, PChar(FUsercontrol.UserSettings.Log.PromptDelete), + PChar(FUsercontrol.UserSettings.Log.PromptDelete_WindowCaption), mb_YesNo) <> mrYes then + Exit; + + btFiltro.Enabled := False; + FTabLog := FUsercontrol.LogControl.TableLog; + Temp := 'Delete from ' + FTabLog + + ' Where (Data >=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data1.DateTime)) + ') ' + + ' and (Data <=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data2.DateTime)) + ') ' + + ' and nivel >=' + IntToStr(ComboNivel.ItemIndex); + + if ComboUsuario.ItemIndex > 0 then + Temp := Temp + ' and ' + FTabLog + '.idUser = ' + ListIdUser[ComboUsuario.ItemIndex]; + + try + FUsercontrol.DataConnector.UCExecSQL(Temp); + AplicaFiltro; + DBGrid1.Repaint; + except + end; + + try + FUsercontrol.Log(Format(FUsercontrol.UserSettings.Log.DeletePerformed, [comboUsuario.Text, DateTimeToStr(Data1.datetime), DateTimeToStr(Data2.datetime), ComboNivel.Text]), 2); + except; + end; + +end; + +procedure TUCFrame_Log.Data1Change(Sender: TObject); +begin + btFiltro.Enabled := True; +end; + +procedure TUCFrame_Log.btfiltroClick(Sender: TObject); +begin + AplicaFiltro; +end; + +procedure TUCFrame_Log.AplicaFiltro; +var + FTabUser, FTabLog: String; + Temp: String; +begin + btFiltro.Enabled := False; + DSLog.Close; + FTabLog := FUsercontrol.LogControl.TableLog; + FTabUser := FUsercontrol.TableUsers.TableName; + + Temp := Format('Select TabUser.' + FUsercontrol.TableUsers.FieldUserName + ' as nome, ' + FTabLog + '.* ' + + 'from ' + FTabLog + + ' Left outer join %s TabUser on ' + FTabLog + '.idUser = TabUser.%s ' + + 'Where (data >= ' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data1.DateTime)) + ') ' + + 'and (Data <= ' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data2.DateTime)) + ') ' + + 'and nivel >= ' + IntToStr(ComboNivel.ItemIndex), + [FUsercontrol.TableUsers.TableName, FUsercontrol.TableUsers.FieldUserID]); + + if ComboUsuario.ItemIndex > 0 then + Temp := Temp + ' and ' + FTabLog + '.idUser = ' + ListIdUser[ComboUsuario.ItemIndex]; + + Temp := Temp + ' order by data desc'; + + FreeAndNil(DSLog); + DataSource1.DataSet := nil; + DSLog := FUsercontrol.DataConnector.UCGetSQLDataset(Temp); + DataSource1.DataSet := DSLog; + btexclui.Enabled := not DsLog.IsEmpty; +end; + +procedure TUCFrame_Log.SetWindow; +var + TabelaLog: String; + SQLStmt: String; +begin + ComboNivel.Items.Clear; + ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelLow); //BGM + ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelNormal); //BGM + ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelHigh); //BGM + ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelCritic); //BGM + ComboNivel.ItemIndex := 0; + ComboUsuario.Items.Clear; + data1.Date := EncodeDate(StrToInt(FormatDateTime('yyyy', Date)), 1, 1); + data2.DateTime := Now; + + if Assigned( ListIdUser ) = False then + ListIdUser := TStringList.Create + else ListIdUser.Clear; + + + with FUsercontrol do + if ((FUsercontrol.CurrentUser.Privileged = True) or + (FUsercontrol.CurrentUser.UserLogin = FUsercontrol.Login.InitialLogin.User)) then + begin + DSCmd := DataConnector.UCGetSQLDataset( + Format('SELECT %s AS IDUSER, %s AS NOME , %s AS LOGIN FROM %s WHERE %s = %s ORDER BY %s', + [TableUsers.FieldUserID, + TableUsers.FieldUserName, + TableUsers.FieldLogin, + TableUsers.TableName, + TableUsers.FieldTypeRec, + QuotedStr('U'), + TableUsers.FieldUserName])); + ComboUsuario.Items.Append(FUsercontrol.UserSettings.Log.OptionUserAll); + ListIdUser.Append('0'); + end + else + DSCmd := DataConnector.UCGetSQLDataset( + Format('SELECT %s AS IDUSER, %s AS NOME , %s AS LOGIN FROM %s WHERE %s = %s and %s = %s ORDER BY %s', + [TableUsers.FieldUserID, + TableUsers.FieldUserName, + TableUsers.FieldLogin, + TableUsers.TableName, + TableUsers.FieldTypeRec, + QuotedStr('U'), + TableUsers.FieldLogin, + QuotedStr(FUsercontrol.CurrentUser.UserLogin), + TableUsers.FieldUserName])); + + while not DSCmd.EOF do + begin + ComboUsuario.Items.Append(DSCmd.FieldByName('Nome').AsString); + ListIdUser.Append(DSCmd.FieldByName('idUser').AsString); + DSCmd.Next; + end; + + + DSCmd.Close; + FreeAndNil(DSCmd); + + ComboUsuario.ItemIndex := 0; + + + TabelaLog := FUsercontrol.LogControl.TableLog; + with FUsercontrol do + begin + SQLStmt := 'SELECT ' + TableUsers.TableName + '.' + TableUsers.FieldUserName + ' AS NOME, ' + TabelaLog + '.* from ' + TabelaLog + + ' LEFT OUTER JOIN ' + TableUsers.TableName + ' on ' + TabelaLog + '.idUser = ' + TableUsers.TableName + '.' + TableUsers.FieldUserID + + ' WHERE (DATA >=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data1.DateTime)) + ') AND (DATA<=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data2.DateTime)) + ') ORDER BY DATA DESC'; + DSLog := DataConnector.UCGetSQLDataset(SQLStmt); + end; + DataSource1.Dataset := DSLog; + btexclui.Enabled := not DsLog.IsEmpty; + + + with FUsercontrol.UserSettings.Log, DBGrid1 do + begin + lbUsuario.Caption := LabelUser; + lbData.Caption := LabelDate; + lbNivel.Caption := LabelLevel; + BtFiltro.Caption := BtFilter; + BtExclui.Caption := BtDelete; + BtFecha.Caption := BtClose; + + Columns[0].Title.Caption := ColAppID; + Columns[0].FieldName := 'APPLICATIONID'; + Columns[0].Width := 60; + Columns[1].Title.Caption := ColLevel; + Columns[1].FieldName := 'NIVEL'; + Columns[1].Width := 32; + Columns[2].Title.Caption := ColMessage; + Columns[2].FieldName := 'MSG'; + Columns[2].Width := 260; + Columns[3].Title.Caption := ColUser; + Columns[3].FieldName := 'NOME'; + Columns[3].Width := 120; + Columns[4].Title.Caption := ColDate; + Columns[4].FieldName := 'DATA'; + Columns[4].Width := 111; + end; + + Bevel3.Width := Panel1.Width - 32; + Bevel3.Left := 16; +end; + +end. diff --git a/internal/2.31RC1/1/Source/pUCFrame_Profile.dfm b/internal/2.31RC1/1/Source/pUCFrame_Profile.dfm new file mode 100644 index 0000000..6570503 --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCFrame_Profile.dfm @@ -0,0 +1,360 @@ +object Frame_Profile: TFrame_Profile + Left = 0 + Top = 0 + Width = 585 + Height = 246 + AutoSize = True + TabOrder = 0 + TabStop = True + object DbGridPerf: TDBGrid + Left = 0 + Top = 0 + Width = 585 + Height = 201 + Align = alClient + Ctl3D = True + DataSource = DataPerfil + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ParentCtl3D = False + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'Tahoma' + TitleFont.Style = [] + OnDblClick = BtnAcePerClick + Columns = < + item + Expanded = False + FieldName = 'Nome' + Title.Alignment = taCenter + Title.Caption = 'Perfil' + Width = 573 + Visible = True + end> + end + object Panel2: TPanel + Left = 0 + Top = 201 + Width = 585 + Height = 45 + Align = alBottom + BevelOuter = bvNone + TabOrder = 1 + object BtnAddPer: TBitBtn + Left = 78 + Top = 11 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Adicionar' + TabOrder = 0 + OnClick = BtnAddPerClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0060000060 + 00006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FF777777787878777777FF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600033CB + 51006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FF777777C8C8C8777777FF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600000600000600040D8 + 65006000006000006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FF787878777777777777D1D1D1787878777777777777D1BBAD694731 + 69473169473169473169473169473169473169473100600060F8985AF28F4DE5 + 7A40D8653AD25C006000CCCCCC6C6C6C6B6B6B6B6B6B6C6C6C6C6C6C6B6B6B6C + 6C6C6B6B6B777777EAEAEAE5E5E5DBDBDBD2D2D2CDCDCD787878D1BBADFFFFFF + FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060000060005AF2 + 8F006000006000006000CCCCCCFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE3 + E3E3DFDFDF777777777777777777E6E6E6777777777777787878D1BBADFFFFFF + CF875FCF875FF7F3F1CF875FCF875FEBE1DBCF875FCF875FDCCBC100600060F8 + 98006000FF00FFFF00FFCCCCCCFFFFFFA4A4A4A4A4A4F7F7F7A5A5A5A4A4A4EA + EAEAA5A5A5A4A4A4D9D9D9777777EAEAEA777777FF00FFFF00FFD1BBADFFFFFF + FFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060 + 00006000FF00FFFF00FFCCCCCCFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F3F3F3EE + EEEEE9E9E9E4E4E4DFDFDF777777777777777777FF00FFFF00FFD1BBADD1BBAD + D1BBADD1BBADE070406947316947316947316947316947316947316947316947 + 31694731694731694731CDCDCDCCCCCCCCCCCCCCCCCC9494946C6C6C6C6C6C6B + 6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2 + CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7 + F7F7F2F2F2EEEEEEEAEAEAE3E3E3DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFCF875FCF875FF7F3F1CF875FCF875FEBE1DBCF87 + 5FCF875FDCCBC1694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFA5A5A5A4 + A4A4F7F7F7A5A5A5A4A4A4EAEAEAA5A5A5A4A4A4DADADA6B6B6BFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1 + DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFFFFFFFFF + FFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE4E4E4DFDFDF6C6C6CFF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959594 + 9494949494949494959595959595949494959595959595959595FF00FFFF00FF + FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF949494D2D2D2D2D2D2D0 + D0D0C4C4C4BABABAAFAFAFA1A1A1949494959595959595959595FF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495 + 9595959595959595949494959595949494949494959595959595FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtnAltPer: TBitBtn + Left = 165 + Top = 11 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Alterar' + TabOrder = 1 + OnClick = BtnAltPerClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFD1BBAD694731 + 694731694731694731694731694731694731694731694731694731694731FF00 + FFFF00FFFF00FFFF00FFCCCCCC6C6C6C6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C6C + 6C6C6B6B6B6C6C6C6C6C6C6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF + FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CADCCBC1DBC9BF694731FF00 + FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEE9E9E9E3 + E3E3DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF + CF875FCF875FF7F3F1CF875FCF875F1C1C1C1C1C1C1C1C1CDCCBC1694731FF00 + FFFF00FFFF00FFFF00FFCDCDCDFFFFFFA4A4A4A4A4A4F7F7F7A4A4A4A4A4A440 + 4040404040414141DADADA6C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF + FFFFFFFFFFFFFBF9F8F7F3F11C1C1C0098C8FCFAF8A39D98E1D2CA694731FF00 + FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7414141B9 + B9B9FCFCFCB7B7B7DFDFDF6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADD1BBAD + D1BBADD1BBADE070401C1C1C0098C84ABEDF0098C8A39D986947316947316947 + 31694731694731694731CCCCCCCDCDCDCDCDCDCDCDCD959595404040B9B9B9D3 + D3D3B9B9B9B7B7B76C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6CFF00FFFF00FF + FF00FFFF00FF1C1C1C0098C84ABEDF94E4F60098C8EFE7E3EBE1DBE6D9D2E1D2 + CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF414141B9B9B9D3D3D3ED + EDEDB9B9B9EEEEEEEAEAEAE4E4E4DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF + FF00FF1C1C1C0098C84ABEDF94E4F60098C8F7F3F1CF875FCF875FEBE1DBCF87 + 5FCF875FDCCBC1694731FF00FFFF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9 + B9B9F7F7F7A4A4A4A4A4A4EAEAEAA4A4A4A4A4A4D9D9D96C6C6CFF00FFFF00FF + 1C1C1C0098C84ABEDF94E4F60098C8FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1 + DBE6D9D2E1D2CA694731FF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9B9B9FF + FFFFFBFBFBF7F7F7F3F3F3EEEEEEE9E9E9E3E3E3DFDFDF6C6C6CFF00FF00009A + 8080804ABEDF94E4F60098C8E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FF7272729F9F9FD3D3D3EDEDEDB9B9B994949495 + 959595959595959594949495959594949495959595959594949400009A00009A + 778C98D2BAAC0098C8FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070 + 40E07040E07040E07040727272727272AAAAAACCCCCCB9B9B9D2D2D2D2D2D2D0 + D0D0C4C4C4B9B9B9AFAFAFA2A2A29494949595959595959595954A23C70030F8 + 6D8AFD0030F8E07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040A85FA8A2A2A2C2C2C2A2A2A295959595959595959594 + 9494959595959595959595949494959595959595959595959595FF00FF8817DA + 0030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFC63EC6A2A2A2FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtnExcPer: TBitBtn + Left = 252 + Top = 11 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Excluir' + TabOrder = 2 + OnClick = BtnExcPerClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00FFFF00 + FFFF00FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA3 + A3A3707070FF00FFFF00FFFF00FFFF00FFFF00FF707070A2A2A2FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00 + FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFA2A2A2707070FF00FFFF00FFFF00FF707070A3A3A3FF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FF0000 + 980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFA2A2A2707070FF00FF727272A3A3A3FF00FFFF00FFD1BBAD694731 + 6947316947316947316947316947316947316947316947310030F8002AD0002A + D0FF00FFFF00FFFF00FFCCCCCC6C6C6C6C6C6C6C6C6C6B6B6B6C6C6C6B6B6B6B + 6B6B6C6C6C6C6C6CA3A3A3919191919191FF00FFFF00FFFF00FFD1BBADE8DCD4 + E6D9D1E4D7CEE2D4CAE1D1C7DFCFC4DDCBC0DBC8BDD8C5B90030F8002AD00000 + 98FF00FFFF00FFFF00FFCDCDCDE6E6E6E3E3E3E2E2E2E0E0E0DDDDDDDCDCDCD9 + D9D9D7D7D7D5D5D5A2A2A2919191707070FF00FFFF00FFFF00FFD1BBADE8DCD4 + 694731694731E4D7CE694731694731DFCFC46947310030F80000986947310030 + F8000098FF00FFFF00FFCDCDCDE6E6E66C6C6C6C6C6CE2E2E26C6C6C6C6C6CDC + DCDC6C6C6CA2A2A27070706C6C6CA3A3A3707070FF00FFFF00FFD1BBADE8DCD4 + E8DCD4E8DCD4E6D9D1E4D7CEE2D4CAE1D1C70030F8000098DBC8BD694731FF00 + FF0030F8000098FF00FFCDCDCDE6E6E6E6E6E6E6E6E6E3E3E3E2E2E2DFDFDFDD + DDDDA3A3A3707070D7D7D76C6C6CFF00FFA3A3A3727272FF00FFD1BBADD1BBAD + D1BBADD1BBADE070406947316947316947310000986947316947316947316947 + 316947310030F8694731CCCCCCCCCCCCCDCDCDCDCDCD9595956B6B6B6C6C6C6C + 6C6C7070706C6C6C6C6C6C6C6C6C6C6C6C6C6C6CA2A2A26C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2 + CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7 + F7F7F2F2F2EEEEEEE9E9E9E4E4E4DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFF694731694731F7F3F1694731694731EBE1DB6947 + 31694731DCCBC1694731FF00FFFF00FFFF00FFFF00FF959595FFFFFF6C6C6C6B + 6B6BF7F7F76C6C6C6C6C6CEAEAEA6B6B6B6C6C6CD9D9D96C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1 + DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFFFFFFFF + FFFFFBFBFBF7F7F7F3F3F3EEEEEEEAEAEAE3E3E3DFDFDF6C6C6CFF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959595 + 9595949494959595959595959595959595959595959595949494FF00FFFF00FF + FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF959595D2D2D2D2D2D2D0 + D0D0C4C4C4B9B9B9AFAFAFA2A2A2959595949494959595959595FF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495 + 9595959595959595959595959595949494959595959595959595FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtnClose: TBitBtn + Left = 426 + Top = 11 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Fechar' + TabOrder = 3 + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + object BtnAcePer: TBitBtn + Left = 339 + Top = 11 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Acessos' + TabOrder = 4 + OnClick = BtnAcePerClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFC2652BA53C00A53C00A53C00A53C00A53C00A53C + 00A53C00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF89898969 + 69696969696969696969696969696A6A6A696969FF00FFFF00FFFF00FFFF00FF + A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A5FFD4A5FFCD97FFC07DFFAD + 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC + DCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE6A6A6AFF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652BC2652BC2652BC265 + 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989 + 8989898989898989898989898989898989898989FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FF1C1C1C986060986060A53C00A53C00A53C00A53C + 00A53C00FF00FFFF00FFFF00FFFF00FF616161FF00FFFF00FFFF00FF41414188 + 8888888888696969696969696969696969696969FF00FFFF00FFFF00FFFF00FF + A22E08A22E08A22E08A22E08C89898FCFAF80098C81C1C1CFFCD97FFC07DFFAD + 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060B5B5B5FC + FCFCB9B9B9414141D7D7D7CCCCCCBEBEBE696969FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC898980098C84ABEDF0098C81C1C1CC2652BC265 + 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFB5B5B5B9 + B9B9D3D3D3B9B9B9414141898989898989898989FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFFF00FF0098C894E4F64ABEDF0098C81C1C1CFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFB9 + B9B9EDEDEDD3D3D3B9B9B9414141FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC2652BA53C000098C894E4F64ABEDF0098C81C1C + 1CA53C00FF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898969 + 6969B9B9B9EDEDEDD3D3D3B9B9B94040406A6A6AFF00FFFF00FFFF00FFFF00FF + A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A50098C894E4F64ABEDF0098 + C81C1C1CFF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC + DCDCDCDCDCB9B9B9EDEDEDD3D3D3BABABA414141FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652B0098C894E4F64ABE + DF80808000009AFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989 + 8989898989898989BABABAEDEDEDD3D3D3A0A0A0727272FF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0098C8D2BA + AC778C9800009A00009AFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFB9B9B9CCCCCCABABAB727272727272C2652BA22E08 + A22E08A22E08A22E08A22E08A22E08A22E16FF00FFFF00FFFF00FFFF00FF0030 + F86D8AFD0030F800009A89898960606060606060606060606060606060606061 + 6161FF00FFFF00FFFF00FFFF00FFA2A2A2C2C2C2A3A3A3727272C2652BFFD4A5 + FFD4A5FFD4A5FFCD97FFC07DFFAD55A22E08FF00FFFF00FFFF00FFFF00FFFF00 + FF0030F80030F8FF00FF898989DCDCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE60 + 6060FF00FFFF00FFFF00FFFF00FFFF00FFA2A2A2A3A3A3FF00FFC2652BC2652B + C2652BC2652BC2652BC2652BC2652BC2652BFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FF89898989898989898989898989898989898989898989 + 8989FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + end + object DataPerfil: TDataSource + AutoEdit = False + Left = 328 + Top = 152 + end +end diff --git a/internal/2.31RC1/1/Source/pUCFrame_Profile.pas b/internal/2.31RC1/1/Source/pUCFrame_Profile.pas new file mode 100644 index 0000000..3e662a0 --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCFrame_Profile.pas @@ -0,0 +1,246 @@ +unit pUCFrame_Profile; + +interface + +{$I 'UserControl.inc'} + +uses + {$IFDEF DELPHI5_UP} + {$ELSE} + Variants, + {$ENDIF} + Buttons, + Classes, + Controls, + Db, + DBGrids, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Grids, + IncPerfil_U, + Messages, + StdCtrls, + SysUtils, + UcBase, + UserPermis_U, + Windows; + +type + TFrame_Profile = class(TFrame) + DbGridPerf: TDBGrid; + Panel2: TPanel; + BtnAddPer: TBitBtn; + BtnAltPer: TBitBtn; + BtnExcPer: TBitBtn; + BtnClose: TBitBtn; + BtnAcePer: TBitBtn; + DataPerfil: TDataSource; + procedure BtnAddPerClick(Sender: TObject); + procedure BtnAltPerClick(Sender: TObject); + procedure BtnExcPerClick(Sender: TObject); + procedure BtnAcePerClick(Sender: TObject); + protected + FIncluirPerfil: TfrmIncluirPerfil; + procedure ActionBtPermissProfileDefault; + procedure SetWindowPerfil(Adicionar: Boolean); + procedure SetWindowProfile; + private + { Private declarations } + public + fUserControl: TUserControl; + FDataSetPerfilUsuario: TDataset; + destructor Destroy; override; + { Public declarations } + end; + + +implementation + +{$R *.dfm} + +procedure TFrame_Profile.SetWindowPerfil(Adicionar: Boolean); +begin + with fUserControl.UserSettings.AddChangeProfile do + begin + FIncluirPerfil.Caption := WindowCaption; + if Adicionar then + FIncluirPerfil.LbDescricao.Caption := LabelAdd + else + FIncluirPerfil.LbDescricao.Caption := LabelChange; + + FIncluirPerfil.lbNome.Caption := LabelName; + FIncluirPerfil.btGravar.Caption := BtSave; + FIncluirPerfil.btCancela.Caption := BtCancel; + FIncluirPerfil.Position := FUserControl.UserSettings.WindowsPosition; + FIncluirPerfil.FDataSetPerfilUsuario := FDataSetPerfilUsuario; + end; +end; + +procedure TFrame_Profile.ActionBtPermissProfileDefault; +var + TempCampos, TempCamposEX: String; +begin + UserPermis.FTempIdUser := FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger; + with fUserControl do + begin + TempCampos := Format(' %s as IdUser, %s as Modulo, %s as ObjName, %s as UCKey ', + [TableRights.FieldUserID, + TableRights.FieldModule, + TableRights.FieldComponentName, + TableRights.FieldKey]); + TempCamposEX := Format('%s, %s as FormName ', [TempCampos, TableRights.FieldFormName]); + + UserPermis.DSPermiss := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab Where tab.%s = %s and tab.%s = %s', + [TempCampos, + TableRights.TableName, + TableRights.FieldUserID, + FDataSetPerfilUsuario.FieldByName('IdUser').AsString, + TableRights.FieldModule, + QuotedStr(ApplicationID)])); + + UserPermis.DSPermiss.Open; + + UserPermis.DSPermissEX := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab1 Where tab1.%s = %s and tab1.%s = %s', + [TempCamposEX, + TableRights.TableName + 'EX', + TableRights.FieldUserID, + FDataSetPerfilUsuario.FieldByName('IdUser').AsString, + TableRights.FieldModule, + QuotedStr(ApplicationID)])); + + UserPermis.DSPermissEX.Open; + + UserPermis.DSPerfil := TDataset.Create(UserPermis); + + UserPermis.ShowModal; + + FDataSetPerfilUsuario.Close; + FDataSetPerfilUsuario.Open; + FDataSetPerfilUsuario.Locate('idUser', UserPermis.FTempIdUser, []); + + FreeAndNil(UserPermis); + end; +end; + +procedure TFrame_Profile.SetWindowProfile; +begin + with fUserControl.UserSettings.Rights do + begin + UserPermis.Caption := WindowCaption; + UserPermis.LbDescricao.Caption := LabelProfile; + UserPermis.lbUser.Left := UserPermis.LbDescricao.Left + UserPermis.LbDescricao.Width + 5; + UserPermis.PageMenu.Caption := PageMenu; + UserPermis.PageAction.Caption := PageActions; + UserPermis.PageControls.Caption := PageControls; // By Vicente Barros Leonel + UserPermis.BtLibera.Caption := BtUnlock; + UserPermis.BtBloqueia.Caption := BtLock; + UserPermis.BtGrava.Caption := BtSave; + UserPermis.BtCancel.Caption := BtCancel; + UserPermis.Position := fUsercontrol.UserSettings.WindowsPosition; + end; +end; + +procedure TFrame_Profile.BtnAcePerClick(Sender: TObject); +begin + if FDataSetPerfilUsuario.IsEmpty then + Exit; + UserPermis := TUserPermis.Create(self); + UserPermis.FUserControl := fUsercontrol; + SetWindowProfile; + UserPermis.lbUser.Caption := FDataSetPerfilUsuario.FieldByName('Nome').AsString; + ActionBtPermissProfileDefault; +end; + +procedure TFrame_Profile.BtnAddPerClick(Sender: TObject); +begin + try + FIncluirPerfil := TfrmIncluirPerfil.Create(Self); + FIncluirPerfil.FUserControl := Self.FUserControl; + SetWindowPerfil(True); + FIncluirPerfil.ShowModal; + finally + FreeAndNil(FIncluirPerfil); + end; +end; + +procedure TFrame_Profile.BtnAltPerClick(Sender: TObject); +begin + if FDataSetPerfilUsuario.IsEmpty then + Exit; + try + FIncluirPerfil := TfrmIncluirPerfil.Create(self); + FIncluirPerfil.FUserControl := Self.FUserControl; + FIncluirPerfil.FNewIdUser := FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger; + SetWindowPerfil(False); + with FIncluirPerfil do + begin + EditDescricao.Text := FDataSetPerfilUsuario.FieldByName('Nome').AsString; + FAltera := True; + ShowModal; + end; + finally + FreeAndNil(FIncluirPerfil); + end; +end; + +procedure TFrame_Profile.BtnExcPerClick(Sender: TObject); +var + TempID: Integer; + CanDelete: Boolean; + ErrorMsg: String; + TempDS: TDataset; +begin + if FDataSetPerfilUsuario.IsEmpty then + Exit; + TempID := FDataSetPerfilUsuario.FieldByName('IDUser').AsInteger; + TempDS := FUserControl.DataConnector.UCGetSQLDataset('Select ' + FUserControl.TableUsers.FieldUserID + ' as IdUser from ' + + FUserControl.TableUsers.TableName + + ' Where ' + FUserControl.TableUsers.FieldTypeRec + ' = ' + QuotedStr('U') + + ' AND ' + FUserControl.TableUsers.FieldProfile + ' = ' + IntToStr(TempID)); + + if TempDS.FieldByName('IdUser').AsInteger > 0 then + begin + TempDS.Close; + FreeAndNil(TempDS); + //changed by fduenas: PromptDelete_WindowCaption + if MessageBox(handle, PChar(Format(FUserControl.UserSettings.UsersProfile.PromptDelete, [FDataSetPerfilUsuario.FieldByName('Nome').AsString])), + PChar(FUserControl.UserSettings.UsersProfile.PromptDelete_WindowCaption), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> idYes then + Exit; + end + else + begin + TempDS.Close; + FreeAndNil(TempDS); + end; + + CanDelete := True; + if Assigned(FUserControl.onDeleteProfile) then + FUserControl.onDeleteProfile(TObject(Owner), TempID, CanDelete, ErrorMsg); + if not CanDelete then + begin + MessageDlg(ErrorMSG, mtWarning, [mbOK], 0); + Exit; + end; + + with FUserControl do + begin + DataConnector.UCExecSQL('Delete from ' + TableUsers.TableName + ' where ' + TableUsers.FieldUserID + ' = ' + IntToStr(TempID)); + DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + ' where ' + TableRights.FieldUserID + ' = ' + IntToStr(TempID)); + DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + 'EX where ' + TableRights.FieldUserID + ' = ' + IntToStr(TempID)); + DataConnector.UCExecSQL('Update ' + TableUsers.TableName + + ' Set ' + TableUsers.FieldProfile + ' = null where ' + TableUsers.FieldUserID + ' = ' + IntToStr(TempID)); + end; + FDataSetPerfilUsuario.Close; + FDataSetPerfilUsuario.Open; +end; + +destructor TFrame_Profile.Destroy; +begin + //nada a destruir + //não destruir o FDataSetPerfilUsuario o USERCONTROL toma conta dele + inherited; +end; + +end. diff --git a/internal/2.31RC1/1/Source/pUCFrame_User.dfm b/internal/2.31RC1/1/Source/pUCFrame_User.dfm new file mode 100644 index 0000000..6784e27 --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCFrame_User.dfm @@ -0,0 +1,440 @@ +object UCFrame_User: TUCFrame_User + Left = 0 + Top = 0 + Width = 594 + Height = 311 + AutoSize = True + TabOrder = 0 + TabStop = True + object Panel3: TPanel + Left = 0 + Top = 266 + Width = 594 + Height = 45 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + object btAdic: TBitBtn + Left = 39 + Top = 10 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Adicionar' + TabOrder = 0 + OnClick = btAdicClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0060000060 + 00006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FF777777787878777777FF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600033CB + 51006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FF777777C8C8C8777777FF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600000600000600040D8 + 65006000006000006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FF787878777777777777D1D1D1787878777777777777D1BBAD694731 + 69473169473169473169473169473169473169473100600060F8985AF28F4DE5 + 7A40D8653AD25C006000CCCCCC6C6C6C6B6B6B6B6B6B6C6C6C6C6C6C6B6B6B6C + 6C6C6B6B6B777777EAEAEAE5E5E5DBDBDBD2D2D2CDCDCD787878D1BBADFFFFFF + FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060000060005AF2 + 8F006000006000006000CCCCCCFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE3 + E3E3DFDFDF777777777777777777E6E6E6777777777777787878D1BBADFFFFFF + CF875FCF875FF7F3F1CF875FCF875FEBE1DBCF875FCF875FDCCBC100600060F8 + 98006000FF00FFFF00FFCCCCCCFFFFFFA4A4A4A4A4A4F7F7F7A5A5A5A4A4A4EA + EAEAA5A5A5A4A4A4D9D9D9777777EAEAEA777777FF00FFFF00FFD1BBADFFFFFF + FFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060 + 00006000FF00FFFF00FFCCCCCCFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F3F3F3EE + EEEEE9E9E9E4E4E4DFDFDF777777777777777777FF00FFFF00FFD1BBADD1BBAD + D1BBADD1BBADE070406947316947316947316947316947316947316947316947 + 31694731694731694731CDCDCDCCCCCCCCCCCCCCCCCC9494946C6C6C6C6C6C6B + 6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2 + CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7 + F7F7F2F2F2EEEEEEEAEAEAE3E3E3DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFCF875FCF875FF7F3F1CF875FCF875FEBE1DBCF87 + 5FCF875FDCCBC1694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFA5A5A5A4 + A4A4F7F7F7A5A5A5A4A4A4EAEAEAA5A5A5A4A4A4DADADA6B6B6BFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1 + DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFFFFFFFFF + FFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE4E4E4DFDFDF6C6C6CFF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959594 + 9494949494949494959595959595949494959595959595959595FF00FFFF00FF + FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF949494D2D2D2D2D2D2D0 + D0D0C4C4C4BABABAAFAFAFA1A1A1949494959595959595959595FF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495 + 9595959595959595949494959595949494949494959595959595FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtAlt: TBitBtn + Left = 126 + Top = 10 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Alterar' + TabOrder = 1 + OnClick = BtAltClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFD1BBAD694731 + 694731694731694731694731694731694731694731694731694731694731FF00 + FFFF00FFFF00FFFF00FFCCCCCC6C6C6C6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C6C + 6C6C6B6B6B6C6C6C6C6C6C6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF + FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CADCCBC1DBC9BF694731FF00 + FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEE9E9E9E3 + E3E3DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF + CF875FCF875FF7F3F1CF875FCF875F1C1C1C1C1C1C1C1C1CDCCBC1694731FF00 + FFFF00FFFF00FFFF00FFCDCDCDFFFFFFA4A4A4A4A4A4F7F7F7A4A4A4A4A4A440 + 4040404040414141DADADA6C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF + FFFFFFFFFFFFFBF9F8F7F3F11C1C1C0098C8FCFAF8A39D98E1D2CA694731FF00 + FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7414141B9 + B9B9FCFCFCB7B7B7DFDFDF6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADD1BBAD + D1BBADD1BBADE070401C1C1C0098C84ABEDF0098C8A39D986947316947316947 + 31694731694731694731CCCCCCCDCDCDCDCDCDCDCDCD959595404040B9B9B9D3 + D3D3B9B9B9B7B7B76C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6CFF00FFFF00FF + FF00FFFF00FF1C1C1C0098C84ABEDF94E4F60098C8EFE7E3EBE1DBE6D9D2E1D2 + CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF414141B9B9B9D3D3D3ED + EDEDB9B9B9EEEEEEEAEAEAE4E4E4DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF + FF00FF1C1C1C0098C84ABEDF94E4F60098C8F7F3F1CF875FCF875FEBE1DBCF87 + 5FCF875FDCCBC1694731FF00FFFF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9 + B9B9F7F7F7A4A4A4A4A4A4EAEAEAA4A4A4A4A4A4D9D9D96C6C6CFF00FFFF00FF + 1C1C1C0098C84ABEDF94E4F60098C8FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1 + DBE6D9D2E1D2CA694731FF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9B9B9FF + FFFFFBFBFBF7F7F7F3F3F3EEEEEEE9E9E9E3E3E3DFDFDF6C6C6CFF00FF00009A + 8080804ABEDF94E4F60098C8E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FF7272729F9F9FD3D3D3EDEDEDB9B9B994949495 + 959595959595959594949495959594949495959595959594949400009A00009A + 778C98D2BAAC0098C8FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070 + 40E07040E07040E07040727272727272AAAAAACCCCCCB9B9B9D2D2D2D2D2D2D0 + D0D0C4C4C4B9B9B9AFAFAFA2A2A29494949595959595959595954A23C70030F8 + 6D8AFD0030F8E07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040A85FA8A2A2A2C2C2C2A2A2A295959595959595959594 + 9494959595959595959595949494959595959595959595959595FF00FF8817DA + 0030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFC63EC6A2A2A2FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtExclui: TBitBtn + Left = 213 + Top = 10 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Excluir' + TabOrder = 2 + OnClick = BtExcluiClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00FFFF00 + FFFF00FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA3 + A3A3707070FF00FFFF00FFFF00FFFF00FFFF00FF707070A2A2A2FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00 + FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFA2A2A2707070FF00FFFF00FFFF00FF707070A3A3A3FF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FF0000 + 980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFA2A2A2707070FF00FF727272A3A3A3FF00FFFF00FFD1BBAD694731 + 6947316947316947316947316947316947316947316947310030F8002AD0002A + D0FF00FFFF00FFFF00FFCCCCCC6C6C6C6C6C6C6C6C6C6B6B6B6C6C6C6B6B6B6B + 6B6B6C6C6C6C6C6CA3A3A3919191919191FF00FFFF00FFFF00FFD1BBADE8DCD4 + E6D9D1E4D7CEE2D4CAE1D1C7DFCFC4DDCBC0DBC8BDD8C5B90030F8002AD00000 + 98FF00FFFF00FFFF00FFCDCDCDE6E6E6E3E3E3E2E2E2E0E0E0DDDDDDDCDCDCD9 + D9D9D7D7D7D5D5D5A2A2A2919191707070FF00FFFF00FFFF00FFD1BBADE8DCD4 + 694731694731E4D7CE694731694731DFCFC46947310030F80000986947310030 + F8000098FF00FFFF00FFCDCDCDE6E6E66C6C6C6C6C6CE2E2E26C6C6C6C6C6CDC + DCDC6C6C6CA2A2A27070706C6C6CA3A3A3707070FF00FFFF00FFD1BBADE8DCD4 + E8DCD4E8DCD4E6D9D1E4D7CEE2D4CAE1D1C70030F8000098DBC8BD694731FF00 + FF0030F8000098FF00FFCDCDCDE6E6E6E6E6E6E6E6E6E3E3E3E2E2E2DFDFDFDD + DDDDA3A3A3707070D7D7D76C6C6CFF00FFA3A3A3727272FF00FFD1BBADD1BBAD + D1BBADD1BBADE070406947316947316947310000986947316947316947316947 + 316947310030F8694731CCCCCCCCCCCCCDCDCDCDCDCD9595956B6B6B6C6C6C6C + 6C6C7070706C6C6C6C6C6C6C6C6C6C6C6C6C6C6CA2A2A26C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2 + CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7 + F7F7F2F2F2EEEEEEE9E9E9E4E4E4DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFF694731694731F7F3F1694731694731EBE1DB6947 + 31694731DCCBC1694731FF00FFFF00FFFF00FFFF00FF959595FFFFFF6C6C6C6B + 6B6BF7F7F76C6C6C6C6C6CEAEAEA6B6B6B6C6C6CD9D9D96C6C6CFF00FFFF00FF + FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1 + DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFFFFFFFF + FFFFFBFBFBF7F7F7F3F3F3EEEEEEEAEAEAE3E3E3DFDFDF6C6C6CFF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959595 + 9595949494959595959595959595959595959595959595949494FF00FFFF00FF + FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF959595D2D2D2D2D2D2D0 + D0D0C4C4C4B9B9B9AFAFAFA2A2A2959595949494959595959595FF00FFFF00FF + FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070 + 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495 + 9595959595959595959595959595949494959595959595959595FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtAcess: TBitBtn + Left = 300 + Top = 10 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Acessos' + TabOrder = 3 + OnClick = BtAcessClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFC2652BA53C00A53C00A53C00A53C00A53C00A53C + 00A53C00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF89898969 + 69696969696969696969696969696A6A6A696969FF00FFFF00FFFF00FFFF00FF + A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A5FFD4A5FFCD97FFC07DFFAD + 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC + DCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE6A6A6AFF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652BC2652BC2652BC265 + 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989 + 8989898989898989898989898989898989898989FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FF1C1C1C986060986060A53C00A53C00A53C00A53C + 00A53C00FF00FFFF00FFFF00FFFF00FF616161FF00FFFF00FFFF00FF41414188 + 8888888888696969696969696969696969696969FF00FFFF00FFFF00FFFF00FF + A22E08A22E08A22E08A22E08C89898FCFAF80098C81C1C1CFFCD97FFC07DFFAD + 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060B5B5B5FC + FCFCB9B9B9414141D7D7D7CCCCCCBEBEBE696969FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC898980098C84ABEDF0098C81C1C1CC2652BC265 + 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFB5B5B5B9 + B9B9D3D3D3B9B9B9414141898989898989898989FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFFF00FF0098C894E4F64ABEDF0098C81C1C1CFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFB9 + B9B9EDEDEDD3D3D3B9B9B9414141FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC2652BA53C000098C894E4F64ABEDF0098C81C1C + 1CA53C00FF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898969 + 6969B9B9B9EDEDEDD3D3D3B9B9B94040406A6A6AFF00FFFF00FFFF00FFFF00FF + A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A50098C894E4F64ABEDF0098 + C81C1C1CFF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC + DCDCDCDCDCB9B9B9EDEDEDD3D3D3BABABA414141FF00FFFF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652B0098C894E4F64ABE + DF80808000009AFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989 + 8989898989898989BABABAEDEDEDD3D3D3A0A0A0727272FF00FFFF00FFFF00FF + A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0098C8D2BA + AC778C9800009A00009AFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFB9B9B9CCCCCCABABAB727272727272C2652BA22E08 + A22E08A22E08A22E08A22E08A22E08A22E16FF00FFFF00FFFF00FFFF00FF0030 + F86D8AFD0030F800009A89898960606060606060606060606060606060606061 + 6161FF00FFFF00FFFF00FFFF00FFA2A2A2C2C2C2A3A3A3727272C2652BFFD4A5 + FFD4A5FFD4A5FFCD97FFC07DFFAD55A22E08FF00FFFF00FFFF00FFFF00FFFF00 + FF0030F80030F8FF00FF898989DCDCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE60 + 6060FF00FFFF00FFFF00FFFF00FFFF00FFA2A2A2A3A3A3FF00FFC2652BC2652B + C2652BC2652BC2652BC2652BC2652BC2652BFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FF89898989898989898989898989898989898989898989 + 8989FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + NumGlyphs = 2 + end + object BtnClose: TBitBtn + Left = 474 + Top = 10 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Fechar' + TabOrder = 4 + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + object BtPass: TBitBtn + Left = 387 + Top = 10 + Width = 81 + Height = 25 + Cursor = crHandPoint + Caption = '&Senha' + TabOrder = 5 + OnClick = BtPassClick + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000C8D0D4C8D0D4 + B8BFC39BA7A5879A918096888792846947316947318F9B99A1A8ABBBC3C6C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B8BFC3A8AEB19FA5A79DA2A49FA3A56C + 6C6C6C6C6C9FA5A8A1A8ABBBC3C6C8D0D4C8D0D4C8D0D4C8D0D4C8D0D491A795 + 4E773C4A8334478F3143962F694731FBE3CBF8C8986947314977364F6A48A5AC + AEC8D0D4C8D0D4C8D0D4C8D0D4ACB1B38D8D8E9595959D9D9DA2A2A26C6C6CE9 + E9E9D3D3D36B6B6B8C8D8D808182A9AFB2C8D0D4C8D0D4C8D0D4C8D0D45B8049 + 4F8135479031409C2E3AA62CA08C7DFDF1E5FBE3CBF8C8986947315675388092 + 85C8D0D4C8D0D4C8D0D4C8D0D49293939494949E9E9EA6A6A6ADADADA8A8A8F5 + F5F5E9E9E9D3D3D36C6C6C8C8C8C9A9EA1C8D0D4C8D0D4C8D0D4C8D0D4588347 + 4B893342992F39A82B32B4282EBB26A08C7DFDF1E5FBE3CBF8C8986947316947 + 31694731694731BDBEBDC8D0D4959696999999A4A4A4AFAFAFB6B6B6BCBCBCA8 + A8A8F5F5F5E9E9E9D3D3D36B6B6B6C6C6C6C6C6C6C6C6CBFC5C8C8D0D4799F75 + 488D323E9E2D35AF2935B6317ACB7B2DBF28A08C7DFDF1E5FBE3CBF8C898F8C8 + 98F8C898F8C898694731C8D0D4A7AAAC9C9C9CA8A8A8B2B2B2B8B8B8CCCCCCBE + BEBEA8A8A8F4F4F4E9E9E9D3D3D3D3D3D3D3D3D3D3D3D36B6B6BC8D0D4BCCAC9 + 56954A3E9F2D34B02980AC81D2D3D381BB8232B228A08C7DFDF1E5FBE3CBFADB + BCF9D7B5F9D7B5694731C8D0D4C4CBCFA1A3A3A8A8A8B4B4B4BBBBBBE0E0E0C4 + C4C4B4B4B4A8A8A8F4F4F4E9E9E9E3E3E3E0E0E0DFDFDF6C6C6CC8D0D4C8D0D4 + BBC9C766A76436933E598CAE498CBB4A81A62B703AA08C7DFDF1E5FBE3CBFBE3 + CB694731F9D7B5694731C8D0D4C8D0D4C3CBCEADAFB1A1A1A1AFAFAFB1B1B1A6 + A6A6878787A8A8A8F5F5F5E9E9E9E9E9E96C6C6CE0E0E06B6B6BC8D0D4C8D0D4 + C8D0D4B9C6CE5BA0CC54A2D853A1D64F9DD3468FC1A08C7DFDF1E5FBE3CB6947 + 31A08C7DFADBBC694731C8D0D4C8D0D4C8D0D4C3CACEBEBFBFC3C3C3C2C2C2C0 + C0C0B3B3B4A8A8A8F5F5F5E9E9E96C6C6CA8A8A8E3E3E36C6C6CC8D0D4C8D0D4 + C8D0D47AADD05CA9DD5CA9DD5AA7DC56A4D9519FD48E8A86FDF1E5FDF1E5FDF1 + E5FDF1E5FDF1E5694731C8D0D4C8D0D4C8D0D4C1C4C5C8C8C8C8C8C8C7C7C7C4 + C4C4C1C1C1A6A6A7F5F5F5F5F5F5F4F4F4F5F5F5F5F5F56C6C6CC8D0D4C8D0D4 + BAC8D05FABDD63B0E363B0E361AEE15CA9DD56A4D96394B69E9086A08C7DA08C + 7DA08C7DA6978BBDBEBDC8D0D4C8D0D4C5CCCFC9C9C9CDCDCDCDCDCDCCCCCCC8 + C8C8C4C4C4B4B4B4A7A8A9A8A8A8A8A8A8A8A8A8ADAEAFBFC5C8C8D0D4C8D0D4 + A0BED066B2E56BB7E96BB7E967B3E661AEE15AA7DC53A0D58798A3C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C4C9CCCECECED2D2D2D2D2D2D0D0D0CC + CCCCC6C6C6C2C2C2A3A8AAC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + 99B9CD4989B14A85AC5895BD68B2E364B0E45CA9DE53A0D4889BA8C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C1C6C8ACACACA9A9A9B7B7B7CECECECE + CECEC8C8C8C2C2C2A7ACAFC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + A3BAC85098C4539AC74E93BE437DA25190BA5198C63C79A0969FA4C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4BFC5C8B9B9B9BCBCBCB6B6B6A2A2A2B3 + B3B3B9B9B9A0A0A0A4AAADC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C3CCD264A7D062ACDA5DA6D35299C64284AD3C7FA94B7B9BBEC6CAC8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C6CED2C2C3C3C9C9C9C4C4C4BABABAA9 + A9A9A5A5A59C9D9EBEC6CAC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D49FBFD371BCE968B2E059A1CF4990BC4180A99CACB6C8D0D4C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C6CBCDD5D5D5CDCDCDC0C0C0B3 + B3B3A5A6A6B2B8BBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4 + C8D0D4C8D0D4A4C2D576B2D761A0C86C9CBBA6B8C2C8D0D4C8D0D4C8D0D4C8D0 + D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8CDCFC8C9CABDBEBEB4 + B6B7BBC1C4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4} + NumGlyphs = 2 + end + end + object DbGridUser: TDBGrid + Left = 0 + Top = 0 + Width = 594 + Height = 266 + Align = alClient + Ctl3D = True + DataSource = DataUser + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ParentCtl3D = False + ReadOnly = True + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'Tahoma' + TitleFont.Style = [] + OnDblClick = BtAltClick + Columns = < + item + Expanded = False + FieldName = 'Nome' + Title.Alignment = taCenter + Width = 239 + Visible = True + end + item + Expanded = False + FieldName = 'Login' + Title.Alignment = taCenter + Width = 123 + Visible = True + end + item + Expanded = False + FieldName = 'Email' + Title.Alignment = taCenter + Width = 199 + Visible = True + end> + end + object DataUser: TDataSource + AutoEdit = False + Left = 296 + Top = 152 + end + object DataPerfil: TDataSource + AutoEdit = False + Left = 328 + Top = 152 + end +end diff --git a/internal/2.31RC1/1/Source/pUCFrame_User.pas b/internal/2.31RC1/1/Source/pUCFrame_User.pas new file mode 100644 index 0000000..6646e6c --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCFrame_User.pas @@ -0,0 +1,326 @@ +unit pUCFrame_User; + +interface + +{$I 'UserControl.inc'} + +uses + {$IFDEF DELPHI5_UP} + {$ELSE} + Variants, + {$ENDIF} + Buttons, + Classes, + Controls, + Db, + DBGrids, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Grids, + IncUser_U, + Messages, + SenhaForm_U, + StdCtrls, + SysUtils, + UcBase, + UserPermis_U, + Windows; + +type + TUCFrame_User = class(TFrame) + Panel3: TPanel; + btAdic: TBitBtn; + BtAlt: TBitBtn; + BtExclui: TBitBtn; + BtAcess: TBitBtn; + BtnClose: TBitBtn; + BtPass: TBitBtn; + DbGridUser: TDBGrid; + DataUser: TDataSource; + DataPerfil: TDataSource; + procedure btAdicClick(Sender: TObject); + procedure BtAltClick(Sender: TObject); + procedure BtAcessClick(Sender: TObject); + procedure BtPassClick(Sender: TObject); + procedure BtExcluiClick(Sender: TObject); + protected + FormSenha: TCustomForm; + FfrmIncluirUsuario: TfrmIncluirUsuario; + procedure SetWindowUserProfile; + procedure SetWindowUser(Adicionar: Boolean); + procedure ActionBtPermissUserDefault; + procedure FDataSetCadastroUsuarioAfterScroll(DataSet: TDataSet); + private + { Private declarations } + public + FUsercontrol: TUserControl; + FDataSetCadastroUsuario: TDataset; + procedure SetWindow; + destructor Destroy; override; + { Public declarations } + end; + +implementation + +uses + UCMessages; + +{$R *.dfm} + +procedure TUCFrame_User.btAdicClick(Sender: TObject); +begin + FfrmIncluirUsuario := TfrmIncluirUsuario.Create(Self); + FfrmIncluirUsuario.FUsercontrol := Self.FUsercontrol; + SetWindowUser(True); + FfrmIncluirUsuario.ShowModal; + FreeAndNil(FfrmIncluirUsuario); +end; + +procedure TUCFrame_User.BtAltClick(Sender: TObject); +begin + if FDataSetCadastroUsuario.IsEmpty then + Exit; + FfrmIncluirUsuario := TfrmIncluirUsuario.Create(Self); + FfrmIncluirUsuario.FUsercontrol := Self.FUsercontrol; + SetWindowUser(False); + with FfrmIncluirUsuario do + begin + FAltera := True; + vNovoIDUsuario := FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger; + EditNome.Text := FDataSetCadastroUsuario.FieldByName('Nome').AsString; + EditLogin.Text := FDataSetCadastroUsuario.FieldByName('Login').AsString; + EditEmail.Text := FDataSetCadastroUsuario.FieldByName('Email').AsString; + ComboPerfil.KeyValue := FDataSetCadastroUsuario.FieldByName('Perfil').AsInteger; + ckPrivilegiado.Checked := StrToBool(FDataSetCadastroUsuario.FieldByName('Privilegiado').AsString); + ckUserExpired.Checked := StrToBool(FDataSetCadastroUsuario.FieldByName('UserNaoExpira').AsString); + SpinExpira.Value := FDataSetCadastroUsuario.FieldByName('DaysOfExpire').AsInteger; + ComboStatus.ItemIndex := FDataSetCadastroUsuario.FieldByName('UserInative').AsInteger; + if FfrmIncluirUsuario.ComboStatus.Enabled then + FfrmIncluirUsuario.ComboStatus.Enabled := not ((FUsercontrol.User.ProtectAdministrator) and + (FDataSetCadastroUsuario.FieldByName('Login').AsString = FUsercontrol.Login.InitialLogin.User)); + ShowModal; + end; + FreeAndNil(FfrmIncluirUsuario); +end; + +procedure TUCFrame_User.BtExcluiClick(Sender: TObject); +var + TempID: Integer; + CanDelete: Boolean; + ErrorMsg: String; +begin + if FDataSetCadastroUsuario.IsEmpty then + Exit; + TempID := FDataSetCadastroUsuario.FieldByName('IDUser').AsInteger; + if MessageBox(Handle, PChar(Format(FUsercontrol.UserSettings.UsersForm.PromptDelete, [FDataSetCadastroUsuario.FieldByName('Login').AsString])), + PChar(FUsercontrol.UserSettings.UsersForm.PromptDelete_WindowCaption), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = idYes then + begin + CanDelete := True; + if Assigned(FUsercontrol.onDeleteUser) then + FUsercontrol.onDeleteUser(TObject(Owner), TempID, CanDelete, ErrorMsg); + if not CanDelete then + begin + MessageDlg(ErrorMSG, mtWarning, [mbOK], 0); + Exit; + end; + + FUsercontrol.DataConnector.UCExecSQL('Delete from ' + FUsercontrol.TableRights.TableName + ' where ' + + FUsercontrol.TableRights.FieldUserID + ' = ' + IntToStr(TempID)); + FUsercontrol.DataConnector.UCExecSQL('Delete from ' + FUsercontrol.TableUsers.TableName + ' where ' + + FUsercontrol.TableUsers.FieldUserID + ' = ' + IntToStr(TempID)); + FDataSetCadastroUsuario.Close; + FDataSetCadastroUsuario.Open; + end; +end; + +procedure TUCFrame_User.BtPassClick(Sender: TObject); +begin + if FDataSetCadastroUsuario.IsEmpty then + Exit; + + FormSenha := TSenhaForm.Create(Self); + TSenhaForm(FormSenha).Position := FUsercontrol.UserSettings.WindowsPosition; + TSenhaForm(FormSenha).FUsercontrol := FUsercontrol; + TSenhaForm(FormSenha).Caption := Format(FUsercontrol.UserSettings.ResetPassword.WindowCaption, + [FDataSetCadastroUsuario.FieldByName('Login').AsString]); + if TSenhaForm(FormSenha).ShowModal = mrOk then + Begin + +(* + if (Assigned(FUsercontrol.MailUserControl)) and (FUsercontrol.MailUserControl.SenhaForcada.Ativo ) then + try + FUsercontrol.MailUserControl.EnviaEmailSenhaForcada( + FDataSetCadastroUsuario.FieldByName('NOME').AsString , + FDataSetCadastroUsuario.FieldByName('LOGIN').AsString, + TSenhaForm(FormSenha).edtSenha.Text , + FDataSetCadastroUsuario.FieldByName('EMAIL').AsString, + ''); + + except + on E : Exception do FUsercontrol.Log(e.Message, 0); + end; + +*) + FUsercontrol.ChangePassword(FDataSetCadastroUsuario.FieldByName('IDUser').AsInteger, TSenhaForm(FormSenha).edtSenha.Text); + End; + FreeAndNil(FormSenha); +end; + +destructor TUCFrame_User.Destroy; +begin + //nada a destruir + //não destruir o FDataSetCadastroUsuario o USERCONTROL toma conta dele + inherited; +end; + +procedure TUCFrame_User.BtAcessClick(Sender: TObject); +begin + if FDataSetCadastroUsuario.IsEmpty then + Exit; + UserPermis := TUserPermis.Create(self); + UserPermis.FUsercontrol := FUsercontrol; + SetWindowUserProfile; + UserPermis.lbUser.Caption := FDataSetCadastroUsuario.FieldByName('Login').AsString; + ActionBtPermissUserDefault; +end; + +procedure TUCFrame_User.SetWindowUserProfile; +begin + with FUsercontrol.UserSettings.Rights do + begin + UserPermis.Caption := WindowCaption; + UserPermis.LbDescricao.Caption := LabelUser; + UserPermis.lbUser.Left := UserPermis.LbDescricao.Left + UserPermis.LbDescricao.Width + 5; + UserPermis.PageMenu.Caption := PageMenu; + UserPermis.PageAction.Caption := PageActions; + UserPermis.PageControls.Caption := PageControls; // By Vicente Barros Leonel + UserPermis.BtLibera.Caption := BtUnlock; + UserPermis.BtBloqueia.Caption := BtLOck; + UserPermis.BtGrava.Caption := BtSave; + UserPermis.BtCancel.Caption := BtCancel; + UserPermis.Position := FUsercontrol.UserSettings.WindowsPosition; + end; +end; + +procedure TUCFrame_User.ActionBtPermissUserDefault; +var + TempCampos, TempCamposEX: String; +begin + UserPermis.FTempIdUser := FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger; + with FUsercontrol do + begin + TempCampos := Format(' %s as IdUser, %s as Modulo, %s as ObjName, %s as UCKey ', [TableRights.FieldUserID, + TableRights.FieldModule, TableRights.FieldComponentName, TableRights.FieldKey]); + TempCamposEX := Format(' %s, %s as FormName ', [TempCampos, TableRights.FieldFormName]); + + UserPermis.DSPermiss := DataConnector.UCGetSQLDataset(Format('SELECT %s FROM %s TAB WHERE TAB.%s = %s AND TAB.%s = %s', + [TempCampos, TableRights.TableName, TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('IdUser').AsString, + TableRights.FieldModule, QuotedStr(ApplicationID)])); + UserPermis.DSPermiss.Open; + + UserPermis.DSPermissEX := DataConnector.UCGetSQLDataset(Format('SELECT %s FROM %s TAB1 WHERE TAB1.%s = %s AND TAB1.%s = %s', + [TempCamposEX, TableRights.TableName + 'EX', TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('IdUser').AsString, + TableRights.FieldModule, QuotedStr(ApplicationID)])); + UserPermis.DSPermissEX.Open; + + UserPermis.DSPerfil := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab Where tab.%s = %s and tab.%s = %s', + [TempCampos, TableRights.TableName, TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('Perfil').AsString, + TableRights.FieldModule, QuotedStr(ApplicationID)])); + UserPermis.DSPerfil.Open; + + UserPermis.DSPerfilEX := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab1 Where tab1.%s = %s and tab1.%s = %s', + [TempCamposEX, TableRights.TableName + 'EX', TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('Perfil').AsString, + TableRights.FieldModule, QuotedStr(ApplicationID)])); + + UserPermis.DSPerfilEX.Open; + + UserPermis.ShowModal; + + FDataSetCadastroUsuario.Close; + FDataSetCadastroUsuario.Open; + + FDataSetCadastroUsuario.Locate('idUser', UserPermis.FTempIdUser, []); + + FreeAndNil(UserPermis); + end; +end; + +procedure TUCFrame_User.FDataSetCadastroUsuarioAfterScroll(DataSet: TDataSet); +begin + if (FUsercontrol.User.ProtectAdministrator) and (Dataset.FieldByName('Login').AsString = FUsercontrol.Login.InitialLogin.User) then + begin + BtExclui.Enabled := False; + BtPass.Enabled := False; + if FUsercontrol.CurrentUser.Username <> FUsercontrol.Login.InitialLogin.User then + BtAcess.Enabled := False; + end + else + begin + BtExclui.Enabled := True; + BtPass.Enabled := True; + BtAcess.Enabled := True; + end; +end; + + +procedure TUCFrame_User.SetWindow; +begin + FDataSetCadastroUsuario.AfterScroll := FDataSetCadastroUsuarioAfterScroll; + FDataSetCadastroUsuarioAfterScroll(FDataSetCadastroUsuario); + with FUsercontrol.UserSettings.UsersForm do + begin + DbGridUser.Columns[0].Title.Caption := ColName; + DbGridUser.Columns[1].Title.Caption := ColLogin; + DbGridUser.Columns[2].Title.Caption := ColEmail; + + btAdic.Caption := BtAdd; + BtAlt.Caption := BtChange; + BtExclui.Caption := BtDelete; + BtAcess.Caption := BtRights; + BtPass.Caption := BtPassword; + BtnClose.Caption := BtClose; + end; + +end; + +procedure TUCFrame_User.SetWindowUser(Adicionar: Boolean); +begin + with FUsercontrol.UserSettings.AddChangeUser do + begin + FfrmIncluirUsuario.Caption := WindowCaption; + if Adicionar then + FfrmIncluirUsuario.LbDescricao.Caption := LabelAdd + else + begin + FfrmIncluirUsuario.LbDescricao.Caption := LabelChange; + FfrmIncluirUsuario.LbDescricao.Tag := FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger; + end; + + FfrmIncluirUsuario.FDataSetCadastroUsuario := DataUser.DataSet; + FfrmIncluirUsuario.Label1.Caption := LabelStatus; + FfrmIncluirUsuario.lbNome.Caption := LabelName; + FfrmIncluirUsuario.lbLogin.Caption := LabelLogin; + FfrmIncluirUsuario.lbEmail.Caption := LabelEmail; + FfrmIncluirUsuario.ckPrivilegiado.Caption := CheckPrivileged; + FfrmIncluirUsuario.lbPerfil.Caption := LabelPerfil; + FfrmIncluirUsuario.btGravar.Caption := BtSave; + FfrmIncluirUsuario.btCancela.Caption := BtCancel; + FfrmIncluirUsuario.Position := Self.FUsercontrol.UserSettings.WindowsPosition; + FfrmIncluirUsuario.LabelExpira.Caption := ExpiredIn; + FfrmIncluirUsuario.LabelDias.Caption := Day; + FfrmIncluirUsuario.ckUserExpired.Caption := CheckExpira; + FfrmIncluirUsuario.ComboPerfil.ListSource := DataPerfil; + FfrmIncluirUsuario.ComboStatus.Enabled := not Adicionar; + with FfrmIncluirUsuario.ComboStatus.Items do + begin + Clear; + Add(StatusActive); + Add(StatusDisabled); + end; + FfrmIncluirUsuario.ComboStatus.ItemIndex := 0; + end; +end; + +end. diff --git a/internal/2.31RC1/1/Source/pUCGeral.dfm b/internal/2.31RC1/1/Source/pUCGeral.dfm new file mode 100644 index 0000000..4b2f07d --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCGeral.dfm @@ -0,0 +1,533 @@ +object FormUserPerf: TFormUserPerf + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = 'Controle de Usu'#225'rios' + ClientHeight = 506 + ClientWidth = 692 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + KeyPreview = True + OldCreateOrder = False + Position = poScreenCenter + OnClose = FormClose + OnDestroy = FormDestroy + OnKeyPress = FormKeyPress + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 692 + Height = 41 + Align = alTop + BevelOuter = bvNone + Color = clWhite + TabOrder = 0 + object LbDescricao: TLabel + Left = 41 + Top = 0 + Width = 183 + Height = 41 + Align = alLeft + Caption = 'Controle de Usu'#225'rios' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + ExplicitHeight = 18 + end + object Image1: TImage + Left = 0 + Top = 0 + Width = 41 + Height = 41 + Align = alLeft + Center = True + Picture.Data = { + 07544269746D617066090000424D660900000000000036000000280000001C00 + 00001C0000000100180000000000300900000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000CBC5D28B75A472 + 5199673F9863369B6334A06233A063349F63369F63389B633B97653E94694890 + 725A8C9189990000000000000000000000000000000000000000000000000000 + 00000000000000000000C2B0D55F27A06126AA6328AF652BB4672DB8682FBB69 + 30BD6931BE6830BD682FBB662DB8652BB36328AF6125AA5C239E674C83000000 + 0000000000000000000000000000000000000000000000000000000000007E51 + B16025A86328AE652BB4672EB96931BE6B33C16B34C46C35C56B34C46A33C169 + 31BE672EB9652BB46228AE6024A85B249A000000000000000000000000000000 + 0000000000000000000000000000000000006D3AA86127AC642AB2672EB86931 + BE6B34C36D36C86837BE693AC16E38CB6D36C76B34C36931BE672DB8642AB261 + 26AB59229B4B644D658963688B676D8C6D738E737B907C8D9B8FA7ACA8000000 + 0000000000007F50B36328AE652CB56830BC6B33C26D36C86E38CC596AB0698E + D46E39CC6F39CD6D36C86B33C2682FBB652CB46228AE54268F39802942982F43 + 962F459330488D324A87334E80354C76385171498E968F000000B399CF642AB0 + 662DB76931BE6C35C56F38CC6338B95C9AC76DB9EB6557C7713CD26E38CB6C34 + C46931BE662DB66329AF4347613A9C2B3CA32C3DA12D3F9D2E43972F478F314C + 8733517E365774385371470000000000007847B4662DB86931BF6C35C66F39CD + 514CA55DA7D861AFE25A8ECF6E3ACD6F39CD6C35C66931BE662DB75631933491 + 2D35AE2935AF2936AD2A39A72B3EA02D43972F488E324E84345479374F713F00 + 00000000000000007444B66931BE6C35C56B36C5416AA14A8EBD4380AA407EA8 + 5448AE6E38CA6C35C56931BE593498368A3532B3282FB9272FBA2631B72734B0 + 2939A72B3F9E2E4593304B8833517E36547A470000000000000000000000007B + 56AE6933BD5337A33775A13F85B73F88BC397DAD2C54804C288D6330B4483A76 + 2B702D31AA272EBC262CBA292AC0272BC02530B72736AD2A3CA22C43972F498C + 324F80357695720000000000000000000F3C6925496D404775467DB64E9DD34E + 9CD24C9AD04997CE4493CA3360900F2E5A02355F01346022832532B12FFFFFFF + FFFFFF37BD362EBC2634B0293BA42C42992F488D324F853F0000000000000000 + 0000000001346802356A2C659555A2D755A3D854A2D753A1D6509ED44C9AD147 + 95CC1854880033660033661C742F70A173FFFFFFFFFFFFFFFFFF2FB42935AF29 + 3BA42C42992F488D390000000000000000000000000000000538710C3F755399 + CA5AA7DC5AA7DC5AA7DB58A5DA55A3D852A0D54D9BD23B85BB00336600336622 + 6139788B94648AA65782A1607E933D7444329C263CA02D529A4A000000000000 + 0000000000000000000000000B3E7B2961915DAADE5FADE05FADE05EACDF5CAA + DD5AA7DC56A4D952A0D54C9AD0124C8000326530647F4E9BD04E9CD24C9AD048 + 97CE4187B42B604481A880000000000000000000000000000000000000000000 + 0E41824584B163B0E365B2E465B2E463B1E361AEE15DABDE5AA7DC55A3D8509E + D4296B9F0033654180AC55A3D854A2D752A0D6509ED44C9AD04890C2838E9600 + 00000000000000000000000000000000000000001345855699C567B4E669B6E8 + 69B6E868B5E765B2E561AEE15DAADE58A5DA53A1D6397FB30133654888B45AA7 + DC59A7DB57A5DA55A3D852A0D54D9BD15087AF00000000000000000000000000 + 000000000000000016488B467EA54E8BB45EA0CA6BB4E46CB8EA68B5E764B1E4 + 5FACDF5AA7DC55A2D7387EB30234654F91BD5FACE05EABDF5CA9DD59A7DB56A4 + D952A0D54C98CE85929D0000000000000000000000000000000000001C4F9B1C + 4F9C1E50A01F4F932C5C8D4C83AA63AAD965B2E460AEE15BA8DC529DD11D588B + 083A6A5CA2D264B1E463B0E360ADE15DAADE59A7DB55A3D8509ED46488A10000 + 000000000000000000000000000000002E5EA72356AE2558B02457AF2255AB1D + 4F9B2555874883AA5DA9DB488CBE174C8004376E1F548168B3E569B5E867B4E7 + 64B1E460ADE15CA9DD58A5DA53A1D6598AAE0000000000000000000000000000 + 00000000000000285BB62A5DBA295CB92659B22255AB1E51A1194A8C23558511 + 45830A3D7B0538704985AF6CB7E86EBAEC6CB8EA68B4E763B0E35EABDF5AA7DB + 54A2D75690B90000000000000000000000000000000000000000003A69BB2F62 + C42D60C1295CB82457AE1F52A41A4D9A1548901043860B3E7C1A4D7B407A9F44 + 7A9D518AAE64A9D76AB5E764B1E460ADE15BA8DC55A2D75890B6000000000000 + 0000000000000000000000000000000000003768C32E61C2295CB92457AF1F52 + A51A4D9B1548911144861A4D82478AB54F96C34F96C34B8FBA427A9E497FA35D + A4D360ADE0549CCD407EA74B6F85000000000000000000000000000000000000 + 000000000000000000406DBA285BB52356AC1E51A31B4E9916488E0000000000 + 00579FCC5AA2CF5AA2CF569ECB5198C5488CB63C72944680A83E80AA3D81AC76 + 8D9C000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000065A9D164AEDC64ADDC60A9 + D659A1CE5097C4478DB93E82AD3D82AD407BA200000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000006FB8E76EB9E768B1E05FA7D5559DCA4B91BE4086 + B13E81AA8EA6B600000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + A5CFE975BFEE6CB7E562ABD9579FCC4D93C04487B08CAABB0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000008FC0DE70ACD1 + 6DA5C888AFC90000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000} + Transparent = True + ExplicitHeight = 35 + end + end + object Panel2: TPanel + Left = 0 + Top = 41 + Width = 100 + Height = 465 + Align = alLeft + BevelOuter = bvLowered + Color = clSilver + TabOrder = 1 + object SpeedUser: TSpeedButton + Left = 1 + Top = 1 + Width = 98 + Height = 60 + Cursor = crHandPoint + Align = alTop + GroupIndex = 1 + Down = True + Caption = '&Usu'#225'rios' + Flat = True + Glyph.Data = { + 66090000424D660900000000000036000000280000001C0000001C0000000100 + 1800000000003009000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000CBC5D28B75A4725199673F9863369B + 6334A06233A063349F63369F63389B633B97653E94694890725A8C9189990000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000C2B0D55F27A06126AA6328AF652BB4672DB8682FBB6930BD6931BE6830BD + 682FBB662DB8652BB36328AF6125AA5C239E674C830000000000000000000000 + 000000000000000000000000000000000000000000007E51B16025A86328AE65 + 2BB4672EB96931BE6B33C16B34C46C35C56B34C46A33C16931BE672EB9652BB4 + 6228AE6024A85B249A0000000000000000000000000000000000000000000000 + 000000000000000000006D3AA86127AC642AB2672EB86931BE6B34C36D36C868 + 37BE693AC16E38CB6D36C76B34C36931BE672DB8642AB26126AB59229B4B644D + 658963688B676D8C6D738E737B907C8D9B8FA7ACA80000000000000000007F50 + B36328AE652CB56830BC6B33C26D36C86E38CC596AB0698ED46E39CC6F39CD6D + 36C86B33C2682FBB652CB46228AE54268F39802942982F43962F459330488D32 + 4A87334E80354C76385171498E968F000000B399CF642AB0662DB76931BE6C35 + C56F38CC6338B95C9AC76DB9EB6557C7713CD26E38CB6C34C46931BE662DB663 + 29AF4347613A9C2B3CA32C3DA12D3F9D2E43972F478F314C8733517E36577438 + 5371470000000000007847B4662DB86931BF6C35C66F39CD514CA55DA7D861AF + E25A8ECF6E3ACD6F39CD6C35C66931BE662DB756319334912D35AE2935AF2936 + AD2A39A72B3EA02D43972F488E324E84345479374F713F000000000000000000 + 7444B66931BE6C35C56B36C5416AA14A8EBD4380AA407EA85448AE6E38CA6C35 + C56931BE593498368A3532B3282FB9272FBA2631B72734B02939A72B3F9E2E45 + 93304B8833517E36547A470000000000000000000000007B56AE6933BD5337A3 + 3775A13F85B73F88BC397DAD2C54804C288D6330B4483A762B702D31AA272EBC + 262CBA292AC0272BC02530B72736AD2A3CA22C43972F498C324F803576957200 + 00000000000000000F3C6925496D404775467DB64E9DD34E9CD24C9AD04997CE + 4493CA3360900F2E5A02355F01346022832532B12FFFFFFFFFFFFF37BD362EBC + 2634B0293BA42C42992F488D324F853F00000000000000000000000001346802 + 356A2C659555A2D755A3D854A2D753A1D6509ED44C9AD14795CC185488003366 + 0033661C742F70A173FFFFFFFFFFFFFFFFFF2FB42935AF293BA42C42992F488D + 390000000000000000000000000000000538710C3F755399CA5AA7DC5AA7DC5A + A7DB58A5DA55A3D852A0D54D9BD23B85BB003366003366226139788B94648AA6 + 5782A1607E933D7444329C263CA02D529A4A0000000000000000000000000000 + 000000000B3E7B2961915DAADE5FADE05FADE05EACDF5CAADD5AA7DC56A4D952 + A0D54C9AD0124C8000326530647F4E9BD04E9CD24C9AD04897CE4187B42B6044 + 81A8800000000000000000000000000000000000000000000E41824584B163B0 + E365B2E465B2E463B1E361AEE15DABDE5AA7DC55A3D8509ED4296B9F00336541 + 80AC55A3D854A2D752A0D6509ED44C9AD04890C2838E96000000000000000000 + 0000000000000000000000001345855699C567B4E669B6E869B6E868B5E765B2 + E561AEE15DAADE58A5DA53A1D6397FB30133654888B45AA7DC59A7DB57A5DA55 + A3D852A0D54D9BD15087AF000000000000000000000000000000000000000000 + 16488B467EA54E8BB45EA0CA6BB4E46CB8EA68B5E764B1E45FACDF5AA7DC55A2 + D7387EB30234654F91BD5FACE05EABDF5CA9DD59A7DB56A4D952A0D54C98CE85 + 929D0000000000000000000000000000000000001C4F9B1C4F9C1E50A01F4F93 + 2C5C8D4C83AA63AAD965B2E460AEE15BA8DC529DD11D588B083A6A5CA2D264B1 + E463B0E360ADE15DAADE59A7DB55A3D8509ED46488A100000000000000000000 + 00000000000000002E5EA72356AE2558B02457AF2255AB1D4F9B2555874883AA + 5DA9DB488CBE174C8004376E1F548168B3E569B5E867B4E764B1E460ADE15CA9 + DD58A5DA53A1D6598AAE00000000000000000000000000000000000000000028 + 5BB62A5DBA295CB92659B22255AB1E51A1194A8C2355851145830A3D7B053870 + 4985AF6CB7E86EBAEC6CB8EA68B4E763B0E35EABDF5AA7DB54A2D75690B90000 + 000000000000000000000000000000000000003A69BB2F62C42D60C1295CB824 + 57AE1F52A41A4D9A1548901043860B3E7C1A4D7B407A9F447A9D518AAE64A9D7 + 6AB5E764B1E460ADE15BA8DC55A2D75890B60000000000000000000000000000 + 000000000000000000003768C32E61C2295CB92457AF1F52A51A4D9B15489111 + 44861A4D82478AB54F96C34F96C34B8FBA427A9E497FA35DA4D360ADE0549CCD + 407EA74B6F850000000000000000000000000000000000000000000000000000 + 00406DBA285BB52356AC1E51A31B4E9916488E000000000000579FCC5AA2CF5A + A2CF569ECB5198C5488CB63C72944680A83E80AA3D81AC768D9C000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000065A9D164AEDC64ADDC60A9D659A1CE5097C447 + 8DB93E82AD3D82AD407BA2000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000006FB8E76EB9E768B1E05FA7D5559DCA4B91BE4086B13E81AA8EA6B600 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000A5CFE975BFEE6CB7 + E562ABD9579FCC4D93C04487B08CAABB00000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008FC0DE70ACD16DA5C888AFC90000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000} + Layout = blGlyphTop + OnClick = SpeedUserClick + OnMouseEnter = SpeedUserMouseEnter + OnMouseLeave = SpeedUserMouseLeave + ExplicitLeft = -4 + ExplicitTop = 6 + ExplicitWidth = 95 + end + object SpeedPerfil: TSpeedButton + Left = 1 + Top = 61 + Width = 98 + Height = 60 + Cursor = crHandPoint + Align = alTop + GroupIndex = 1 + Caption = '&Perfil' + Flat = True + Glyph.Data = { + 66090000424D660900000000000036000000280000001C0000001C0000000100 + 1800000000003009000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000008E40198E40198E40198E40198E40198E40198E40198E40198E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E40198E40198E40198E40198E40190000000000008E4018A24E00A2 + 4E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00 + A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E + 00A24E008E4019000000000000A2511BF9F6F4B7A293B7A293B7A293B7A293B7 + A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293 + B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A2939242180000000000 + 00AE5919FAF8F6F9F6F4F7F3F1F5F1EEF4EEEBF2ECE8F1EAE6EFE7E3EDE5E0EC + E3DEEBE1DBE9DED7E7DBD4E5D9D1E3D6CEE2D3CBE0D1C8DECEC5DCCBC2DBC9BF + DBC9BFDBC9BFDBC9BFB7A2938E4019000000000000B15A17FDFCFBFBF9F8F9F7 + F5F7F3F1F5F1EEF4EEEBF2ECE8F1EAE6EFE7E3EDE5E0ECE3DEEBE1DBE9DED7E7 + DBD4E5D9D1E3D6CEE2D3CBE0D1C8DECEC5DCCBC2DBC9BFDBC9BFDBC9BFB7A293 + 8E4019000000000000B45C17FEFEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0 + EDF3EDEAF1EBE7EFE7E3EDE5E0ECE3DEEBE1DBE9DED7E7DBD4E5D9D1E3D6CEE2 + D3CBE0D1C8DECEC5DCCBC2DBC9BFDBC9BFB7A2938E4019000000000000B75E16 + FFFFFFFEFEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEAF1EBE7F0E8 + E4EEE6E1EDE4DFEBE2DCE9DED7B7A29369473169473169473169473169473169 + 4731694731B7A2938E4019000000000000B96016FFFFFFFFFFFFFEFEFDFDFCFB + FBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEAF1EBE7F0E8E4EEE6E1EDE4DFEBE2 + DCB7A293FFFFFFFCFDFF5476FFE4E9FFFFFFFFFFFFFF694731B7A2938E401900 + 0000000000BC6215FFFFFFFFFFFFFFFFFFFEFEFDFDFCFBFBF9F8F9F7F5F8F4F2 + F6F2EFF5F0EDF3EDEAF1EBE7F0E8E4EEE6E1EDE4DFB7A293FFFFFFB4C3FF0033 + FF2450FFFCFDFFFFFFFF694731B7A2938E4019000000000000BF6415FFFFFFFF + FFFFFFFFFFFFFFFFFEFEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEA + F1EBE7F0E8E4EEE6E1B7A293FFFFFF4066FF0C3DFF0033FF9CB0FFFFFFFF6947 + 31B7A2938E4019000000000000C06614FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEAF1EBE7F0E8E4B7A293 + 8CA3FF0033FF708DFF6483FF1846FFF0F3FF694731B7A2938E40190000000000 + 00C36814FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FA + F8F6F9F6F4F6F2EFF5F0EDF3EDEAF1EBE7B7A29388A0FF1C49FFE4E9FFF0F3FF + 204DFF6080FF694731B7A2938E4019000000000000C66A13FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6F9F6F4F7F3F1F5 + F1EEF4EEEBB7A293FFFFFFFFFFFFFFFFFFFFFFFF9CB0FF0C3DFF6080FFB7A293 + 8E4019000000000000C96C13FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6F9F6F4F7F3F1F5F1EEB7A293B7A293B7 + A293B7A293B7A293B7A2939CB0FF1443FF6080FF8E4019000000000000CB6D12 + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD + FCFCFAF9FAF8F6F9F6F4F7F3F1F5F1EEF4EEEBF2ECE8F1EAE6EFE7E3EDE5E0EC + E3DE9CB0FF345DFF8E4019000000000000CB6D12FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6F9F6 + F4B7A2936947316947316947316947316947316947316947319CB0FF486DFF00 + 0000000000CB6D12FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6B7A293FFFFFFFCFDFF5476 + FFE4E9FFFFFFFFFFFFFF694731B7A2939CB0FF7893FF000000CB6D12FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFDFDFCFCFAF9B7A293FFFFFFB4C3FF0033FF2450FFFCFDFFFFFFFF6947 + 31B7A2938E4019000000000000CB6D12FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDB7A293 + FFFFFF4066FF0C3DFF0033FF9CB0FFFFFFFF694731B7A2938E40190000000000 + 00CB6D12FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A2938CA3FF0033FF708DFF6483FF + 1846FFF0F3FF694731B7A2938E4019000000000000CA6C11F3EDEAF3EDEAF3ED + EAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3 + EDEAF3EDEAB7A29388A0FF1C49FFE4E9FFF0F3FF204DFF6080FF694731F3EDEA + 8E4019000000000000B963038E40198E40198E40198E40198E40198E40198E40 + 198E40198E40198E40198E40198E40198E40198E40198E4019B7A293FFFFFFFF + FFFFFFFFFFFFFFFF9CB0FF0C3DFF6080FF8E40198E4019000000000000B96303 + B45C00B45C00B45C00B45C00B45C00B45C00B45C00B55B00B55B00B55B00B55B + 00B55B00B55B00B45C00B45C00B7A293B7A293B7A293B7A293B7A293B7A2939C + B0FF1443FF6080FF8E4019000000000000E3A660E38E2DE38E2DE38E2DE38E2D + E38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E + 2DE38E2DF6CA9AF19F43E38E2DF6CA9AF19F43E38E2D9CB0FF345DFFE3A66000 + 0000000000F8EBDCE3A660D27100D27100D27100D27100D27100D27100D27100 + D27100D27100D27100D27100D27100D27100D27100D27100D27100D27100D271 + 00D27100D27100D27100D271009CB0FF486DFF00000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000009CB0FF7893FF} + Layout = blGlyphTop + OnClick = SpeedPerfilClick + OnMouseEnter = SpeedUserMouseEnter + OnMouseLeave = SpeedUserMouseLeave + ExplicitLeft = -4 + ExplicitTop = 45 + end + object SpeedLog: TSpeedButton + Left = 1 + Top = 121 + Width = 98 + Height = 60 + Cursor = crHandPoint + Align = alTop + GroupIndex = 1 + Caption = '&Log' + Flat = True + Glyph.Data = { + 66090000424D660900000000000036000000280000001C0000001C0000000100 + 1800000000003009000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000E5E0DC885D + 40694731694731885D40E5E0DC00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000E5E0DC694731B7A293B7A293B7A293B7A2936947 + 31E5E0DC00000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000E5E0DC + 694731B7A293E4D7CFE3D5CDE1D3CBE0D1C8B7A293694731E5E0DC0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000E5E0DC694731B7A293E7DBD4E5D9D2E4D7CF + E3D5CDE1D3CBE0D1C8B7A293694731E5E0DC0000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000000000E5 + E0DC694731B7A293E9DFD9E8DDD7E7DBD4983000983000E3D5CDE1D3CBE0D1C8 + B7A293694731E5E0DC0000000000000000000000000000000000000000000000 + 00000000000000000000000000000000E5E0DC694731B7A293EDE4DFEBE2DDEA + E0DA983000C86000C86000983000E3D5CDE1D3CBE0D1C8B7A293694731E5E0DC + 0000000000000000000000000000000000000000000000000000000000000000 + 00E5E0DC694731B7A293EFE8E3EEE6E1EDE4DF983000C86000F57E46F57940C8 + 6000983000E3D6CEE1D3CBE0D1C8B7A293694731E5E0DC000000000000000000 + 000000000000000000000000000000000000E5E0DC694731B7A293F2ECE8F1EA + E6EFE8E3973000C35D00E68250E37B4AE27743E3733EBE5B00962F00E3D6CEE2 + D4CCE1D2C9B7A293694731E5E0DC000000000000000000000000000000000000 + 000000E5E0DC694731B7A293F5F0EDF3EEEBF2ECE8983000C55E00E0865ABE6F + 47AC613CAA5C37B25E35CD6838C05C00983000E3D6CEE2D4CCE1D2C9B7A29369 + 4731E5E0DC000000000000000000000000000000E5E0DC694731B7A293F6F2EF + F6F2EFF5F0ED983000C86000F49C6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6D + 3EEE7941C86000983000E3D6CEE2D4CCE1D2C9B7A293694731E5E0DC00000000 + 0000000000E5E0DC694731B7A293F6F2EFF9F7F5F8F5F3983000C86000F8A77B + F7A175EEA078FFFFFFFFFFFFFFFFFFAE6C4CDE7948F38048F57C43C860009830 + 00E3D6CEE2D4CCE1D2C9B7A293694731E5E0DC000000E5E0DC694731B7A293F6 + F2EFFCFBFAFBF9F8983000C86000F9B187F9AC81F8A77BF09D71FFFFFFFFFFFF + FFFFFFAA6340E3804FF68650F58149F57C43C86000983000E3D6CEE2D4CCE1D2 + C9B7A293694731E5E0DCB7A293D0BBACF6F2EFFFFFFFFDFDFDA33705C86000FA + BA93FAB58DF9B187F9AC81F0A277FFFFFFFFFFFFFFFFFFAA6644E48556F68B56 + F68650F58149F57C43C86000983000E3D6CEE2D4CCE1D2C9B7A293885D40B7A2 + 93F6F2EFFFFFFFFFFFFFC86000F68B56FBC39FFBBF99FABA93FAB58DF9B187F1 + A77DFFFFFFFFFFFFFFFFFFAA6948E4885BF7905DF68B56F68650F58149F57C43 + C86000983000E4D7CFE3D5CDB7A293694731D0BBACFFFFFFFFFFFFFFFFFFC860 + 00FBC39FFBC39FFBC39FFBC19CFBBD96F9B78FEBA882FFFFFFFFFFFFFFFFFFAA + 6E4EE48F64F79766F79260F68D59F68853F6834DC86000983000E5D9D2E4D7CF + B7A293694731D0BBACF6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39FFBC39FFBC3 + 9FFBC19CF7BA94E2A987FFFFFFFFFFFFFFFFFFAD7354E6946AF79B6CF79766F7 + 9260F68D59C86000983000E8DDD7E7DBD4E5D9D2B7A293885D40ECE4DED0BBAC + F6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39FFBC39FFBC39FF8BF9AFFFFFFFFFF + FFFFFFFFFFFFFFC08361E99B71F8A072F79B6CF79766C86000983000EBE1DCE9 + DFD9E8DDD7B7A293694731E5E0DC000000ECE4DED0BBACF6F2EFFFFFFFFFFFFF + FFFFFFC86000FBC39FFBC39FFAC29EF7C29FF0C2A6ECCEBCF8EFE9DA9873F1A5 + 7AF8A578F8A072C86000983000EDE5E0ECE3DEEBE1DCB7A293694731E5E0DC00 + 0000000000000000ECE4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39F + FBC39FF8C19DE5B08FC49375B8886AD29674F0A87FF9AA7EC86000983000F1EA + E6EFE8E3EEE6E1B7A293694731E5E0DC000000000000000000000000000000EC + E4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39FF5BE9BEDD7C9FFFFFF + D0BFB4BD8B6DECA982C86000983000F3EEEBF2ECE8F1EAE6B7A293694731E5E0 + DC000000000000000000000000000000000000000000ECE4DED0BBACF6F2EFFF + FFFFFFFFFFFFFFFFC86000F6BF9CFFFFFFFFFFFFFFFFFFC79677BF5B00983000 + F6F2EFF5F0EDF3EEEBB7A293694731E5E0DC0000000000000000000000000000 + 00000000000000000000000000ECE4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC6 + 5F00F8E0D0FFFFFFEDD7C9B85800952F00F9F6F4F7F4F2F6F2EFB7A293694731 + E5E0DC0000000000000000000000000000000000000000000000000000000000 + 00000000ECE4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC65F00F6BF9CF0885496 + 2F00FAF9F8FAF8F7F6F2EFB7A293694731E5E0DC000000000000000000000000 + 000000000000000000000000000000000000000000000000000000ECE4DED0BB + ACF6F2EFFFFFFFFFFFFFFFFFFFC86000C86000FFFFFFFDFDFDF6F2EFB7A29369 + 4731E5E0DC000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000ECE4DED0BBACF6F2EFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFF6F2EFB7A293694731E5E0DC00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000ECE4DEE2C0B1F6F2EFFFFFFFFFFFFFFFFFFFF6F2EFB7A2 + 93694731E5E0DC00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + ECE4DED0BBACF6F2EFFFFFFFF6F2EFD0BBAC694731E5E0DC0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000ECE4DED0BBACD0BBAC + B7A293B7A293E5E0DC0000000000000000000000000000000000000000000000 + 00000000000000000000} + Layout = blGlyphTop + OnClick = SpeedLogClick + OnMouseEnter = SpeedUserMouseEnter + OnMouseLeave = SpeedUserMouseLeave + ExplicitLeft = -4 + ExplicitTop = 115 + end + object SpeedUserLog: TSpeedButton + Left = 1 + Top = 181 + Width = 98 + Height = 60 + Cursor = crHandPoint + Align = alTop + GroupIndex = 1 + Caption = 'Usu'#225'rios Logados' + Flat = True + Glyph.Data = { + 66090000424D660900000000000036000000280000001C0000001C0000000100 + 18000000000030090000C40E0000C40E00000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000084 + C6E70000000000000000000000000000000000000000000000000000006B8C73 + 5A845A527B4A4A7B4A4A7B4A4A7B424A7B4A4A7B4A4A7B4A527B52527B525A7B + 5A637B6B7B8C7BA5A5A50000000000009CD6EF7BE7F77BB5D600000000000000 + 00000000000000000000004A73394A7B314A84314A8C314A8C31429431429429 + 429429429C294294294294314294314A8C314A8C3163BDDEB5CEDE4A8C31527B + 310000007BB5CE52CEE7317BAD7B737B847373ADADAD0000000000005A733952 + 7B314A84314A8C31429431429429429C29399C2939A52939A52939A529399C29 + 429C294294319CD6EF7BEFF7398CBD8C8C9494737B94636373637321A5D6297B + AD845A63945252846B6B000000000000527B315284314A8C31429431429C2939 + 9C2939A52939AD2931AD2931AD2939AD2939A52939A529429C2994B5C642BDE7 + 1884BD846B7BBD6B6BB56B63AD636B42ADD6318CBD8C5A639C5A5A7352520000 + 00000000527B314A84314A8C31429429399C2939A52931AD2931B52931B52931 + B52931B52931AD2939AD2939AD29B573734294C6299CCE846B84C66B6BBD6B6B + B56B6B6384A55284A5A56363A55A5A845252000000000000527B314A8C314294 + 31429C2939A52931AD2931B52929BD2129BD2129BD2129BD2131B52131AD29CE + 9C9CDE7B7B7B8CA542ADD6947384CE7373C66B6BBD6B6BB56363A55A5AA56363 + AD73739473730000000000005284314A8C31429431399C2939A52931AD2931BD + 2129BD2131B53129BD2929C62129BD2131B529CEADADE77B7BD67B7B947B8CBD + 7373BD7373B57373B58484C6A5A5DEB5B5DEBDBDDEBDBD9C8484000000000000 + 5A944A4A8C31429431399C2939AD2931B52929BD214AA54AFFFFFFFFFFFF42BD + 4229C62131B52139AD29B57B7BCEA5A5D6BDBDDEC6C6E7CECEE7C6C6DEB5B5DE + A5A5DEB5B5E7C6C6D6ADADB59C9C0000000000000000004A8C39429431399C29 + 39AD2931B52929AD29FFFFFFFFFFFFFFFFFFFFFFFF31B53131B52131AD29C69C + 9CF7EFEFF7DEDEE7B5B5E7B5B5E7BDBDEFCECEEFD6D6E7CECEE7C6C6B58C8C00 + 00000000000000000000000000004A9C42429C2939A52931AD29528C529C9C9C + 7B8C946B7B8C737B845A7B5A299C2139AD2939AD29C6A5A5E7D6D6F7E7E7EFDE + DEE7B5B5DEADADE7B5B5D6BDBDBD949400000000000000000000000000000000 + 00000000007BB57B399C293194314A7B944A94C64A9CCE4A94CE4294CE427BA5 + 215231297B214A9C42000000DEC6C6C6ADADC6A5A5CEA5A5BD9C9CA584848C7B + 7B0000000000000000000000000000000000000000000000000000000000004A + 94AD52A5D652A5D6529CD64A9CD64A9CD64A94CE428CBD426363000000000000 + 000000000000000000000000ADB5B5A5A5A57373730000000000000000000000 + 0000000000000000000000000000000073ADD652A5DE52A5DE52A5DE52A5DE52 + A5D652A5D64A9CD64A9CD6428CC6737B84000000000000000000D6D6D6ADADAD + 8C9494B5B5B58C94940000000000000000000000000000000000000000000000 + 000000005AA5DE5AADDE5AADDE5AADDE5AA5DE5AA5DE52A5DE52A5D6529CD64A + 9CD64A7BA50000000000000000009C9C9CBDBDBDB5B5B5B5B5B5000000000000 + 0000000000000000000000000000000000000000005AA5D65AADDE5AADE75AAD + E75AADE75AADDE5AADDE5AA5DE52A5DE52A5D6529CD64A94CE00000000000000 + 0000ADB5B5C6C6C6000000000000000000000000000000000000000000000000 + 00000000000000000063ADE763ADE763B5E763B5E763B5E763ADE75AADE75AAD + DE5AA5DE52A5DE52A5D64A9CD65A7B9400000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007BB5DE63B5E7 + 63B5E763B5E76BB5E763B5E763B5E763B5E763ADE75AADDE5AA5DE52A5DE529C + D64A84AD00000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000063ADDE63B5E76BB5EF6BB5EF6BBDEF6BB5EF + 6BB5EF63B5E763ADE75AADE75AADDE52A5DE52A5D64A8CBD0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000063ADDE5294BD528CB55A9CCE6BB5E76BBDEF6BBDEF6BB5E763B5E763ADE7 + 5AADDE5AA5DE52A5D64A94C60000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000004A8CBD4284AD4284AD39 + 7B9C39738C4A7BA563A5D66BB5E763B5E763ADE75AADDE5AA5DE52A5D64A8CB5 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000005294BD4A94C64A94C65294C64A94C64A8CB539739442 + 73945A9CCE63ADE75AADDE4A8CBD39739C39637B000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00529CCE5AA5CE5AA5CE529CCE529CCE4A94C6428CB5396B8C427B9C4284B539 + 7BAD3984AD5A7B8C000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000005AA5D663ADDE63ADDE5AAD + D65AA5D6529CCE4A94C6428CBD397BA5397BAD3984AD397BA500000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000007BB5D66BB5E76BB5E763B5DE63ADDE5AA5D6529CC64A94 + BD428CB53984AD3984AD63849C00000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 73BDE773BDEF6BBDEF63B5DE5AA5D6529CCE4A94C6428CB53984AD5284A50000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000007BBDEF73BDEF6BB5E7 + 63ADD65AA5CE4A94C6428CB56B94B50000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000084BDDE73ADCE73A5C6000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000} + Layout = blGlyphTop + OnClick = SpeedUserLogClick + OnMouseEnter = SpeedUserMouseEnter + OnMouseLeave = SpeedUserMouseLeave + ExplicitLeft = -4 + ExplicitTop = 301 + end + end + object Panel3: TPanel + Left = 100 + Top = 41 + Width = 592 + Height = 465 + Align = alClient + BevelOuter = bvNone + TabOrder = 2 + end +end diff --git a/internal/2.31RC1/1/Source/pUCGeral.pas b/internal/2.31RC1/1/Source/pUCGeral.pas new file mode 100644 index 0000000..bcceedf --- /dev/null +++ b/internal/2.31RC1/1/Source/pUCGeral.pas @@ -0,0 +1,217 @@ +unit pUCGeral; + +interface + +uses + Buttons, + Classes, + ComCtrls, + Controls, + DB, + DBGrids, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Grids, + Messages, + StdCtrls, + SysUtils, + UcBase, + Variants, + Windows; + +type + TFormUserPerf = class(TForm) + Panel1: TPanel; + LbDescricao: TLabel; + Image1: TImage; + Panel2: TPanel; + SpeedUser: TSpeedButton; + SpeedPerfil: TSpeedButton; + Panel3: TPanel; + SpeedLog: TSpeedButton; + SpeedUserLog: TSpeedButton; + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure SpeedUserClick(Sender: TObject); + procedure SpeedPerfilClick(Sender: TObject); + procedure SpeedLogClick(Sender: TObject); + procedure SpeedUserLogClick(Sender: TObject); + procedure SpeedUserMouseEnter(Sender: TObject); + procedure SpeedUserMouseLeave(Sender: TObject); + procedure FormKeyPress(Sender: TObject; var Key: Char); + procedure FormDestroy(Sender: TObject); + protected + FrmFrame: TCustomFrame; + private + { Private declarations } + public + FUsercontrol: TUserControl; + { Public declarations } + end; + +var + FormUserPerf: TFormUserPerf; + +implementation + +uses + pUCFrame_Log, + pUcFrame_Profile, + pUcFrame_User, + pUcFrame_UserLogged, + UCMessages; + +{$R *.dfm} + + { --------------------------------------------------------------------------- } + { FORM } + +procedure TFormUserPerf.FormClose(Sender: TObject; var Action: TCloseAction); +begin + if Assigned(FrmFrame) then + FreeAndNil(FrmFrame); + Action := caFree; +end; + +procedure TFormUserPerf.FormDestroy(Sender: TObject); +begin + FreeAndNil( FrmFrame ); +end; + +procedure TFormUserPerf.FormKeyPress(Sender: TObject; var Key: Char); +begin + if key = #27 then + Close; +end; + +procedure TFormUserPerf.FormShow(Sender: TObject); +begin + with FUsercontrol do + begin + FUsercontrol.CurrentUser.PerfilUsuario := DataConnector.UCGetSQLDataset( + Format('Select %s as IdUser, %s as Login, %s as Nome, %s as Email, %s as Perfil, %s as Privilegiado, %s as Tipo, %s as Senha, %s as UserNaoExpira, %s as DaysOfExpire , %s as UserInative from %s Where %s = %s ORDER BY %s', [TableUsers.FieldUserID, TableUsers.FieldLogin, TableUsers.FieldUserName, TableUsers.FieldEmail, TableUsers.FieldProfile, TableUsers.FieldPrivileged, TableUsers.FieldTypeRec, TableUsers.FieldPassword, TableUsers.FieldUserExpired, TableUsers.FieldUserDaysSun, TableUsers.FieldUserInative, TableUsers.TableName, TableUsers.FieldTypeRec, QuotedStr('U'), TableUsers.FieldLogin])); + + FUsercontrol.CurrentUser.PerfilGrupo := DataConnector.UCGetSQLDataset( + Format('Select %s as IdUser, %s as Login, %s as Nome, %s as Tipo from %s Where %s = %s ORDER BY %s', + [TableUsers.FieldUserID, TableUsers.FieldLogin, TableUsers.FieldUserName, TableUsers.FieldTypeRec, + TableUsers.TableName, TableUsers.FieldTypeRec, QuotedStr('P'), TableUsers.FieldUserName])); + end; + SpeedPerfil.Visible := FUsercontrol.UserProfile.Active; + SpeedLog.Visible := FUsercontrol.LogControl.Active; + SpeedUserLog.Visible := FUsercontrol.UsersLogged.Active; + + SpeedUserClick(Sender); + Caption := FUsercontrol.UserSettings.UsersForm.WindowCaption; + + SpeedUser.Caption := FUsercontrol.UserSettings.Log.ColUser; + SpeedPerfil.Caption := FUsercontrol.UserSettings.UsersProfile.ColProfile; + SpeedUserLog.Caption := FUsercontrol.UserSettings.UsersLogged.LabelDescricao; + +end; + +procedure TFormUserPerf.SpeedPerfilClick(Sender: TObject); +begin + if FrmFrame is TFrame_Profile then + Exit; + if Assigned(FrmFrame) then + FreeAndNil(FrmFrame); + + FrmFrame := TFrame_Profile.Create(Self); + TFrame_Profile(FrmFrame).DataPerfil.DataSet := FUsercontrol.CurrentUser.PerfilGrupo; + TFrame_Profile(FrmFrame).BtnClose.ModalResult := mrOk; + TFrame_Profile(FrmFrame).Height := Panel3.Height; + TFrame_Profile(FrmFrame).Width := Panel3.Width; + TFrame_Profile(FrmFrame).FDataSetPerfilUsuario := FUsercontrol.CurrentUser.PerfilGrupo; + TFrame_Profile(FrmFrame).FUsercontrol := FUsercontrol; + TFrame_Profile(FrmFrame).DbGridPerf.Columns[0].Title.Caption := FUsercontrol.UserSettings.UsersProfile.ColProfile; + with FUsercontrol.UserSettings.UsersProfile, TFrame_Profile(FrmFrame) do + begin + lbDescricao.Caption := LabelDescription; + BtnAddPer.Caption := BtAdd; + BtnAltPer.Caption := BtChange; + BtnExcPer.Caption := BtDelete; + BtnAcePer.Caption := BtRights; + BtnClose.Caption := BtClose; + end; + FrmFrame.Parent := Panel3; +end; + +procedure TFormUserPerf.SpeedUserClick(Sender: TObject); +begin + if FrmFrame is TUCFrame_User then + Exit; + + if Assigned(FrmFrame) then + FreeAndNil(FrmFrame); + + FrmFrame := TUCFrame_User.Create(Self); + TUCFrame_User(FrmFrame).FDataSetCadastroUsuario := FUsercontrol.CurrentUser.PerfilUsuario; + TUCFrame_User(FrmFrame).DataUser.DataSet := TUCFrame_User(FrmFrame).FDataSetCadastroUsuario; + TUCFrame_User(FrmFrame).DataPerfil.DataSet := FUsercontrol.CurrentUser.PerfilGrupo; + TUCFrame_User(FrmFrame).BtnClose.ModalResult := mrOk; + TUCFrame_User(FrmFrame).FUsercontrol := FUsercontrol; + TUCFrame_User(FrmFrame).Height := Panel3.Height; + TUCFrame_User(FrmFrame).Width := Panel3.Width; + TUCFrame_User(FrmFrame).SetWindow; + lbDescricao.Caption := FUsercontrol.UserSettings.UsersForm.LabelDescription; + + FrmFrame.Parent := Panel3; +end; + +procedure TFormUserPerf.SpeedUserLogClick(Sender: TObject); +begin + if FrmFrame is TUCFrame_UsersLogged then + Exit; + + if Assigned(FrmFrame) then + FreeAndNil(FrmFrame); + + FrmFrame := TUCFrame_UsersLogged.Create(Self); + lbDescricao.Caption := FUsercontrol.UserSettings.UsersLogged.LabelDescricao; + TUCFrame_UsersLogged(FrmFrame).FUsercontrol := FUsercontrol; + TUCFrame_UsersLogged(FrmFrame).SetWindow; + TUCFrame_UsersLogged(FrmFrame).Height := Panel3.Height; + TUCFrame_UsersLogged(FrmFrame).Width := Panel3.Width; + TUCFrame_UsersLogged(FrmFrame).BtExit.ModalResult := mrOk; + FrmFrame.Parent := Panel3; +end; + +procedure TFormUserPerf.SpeedUserMouseEnter(Sender: TObject); +begin + with TSpeedButton(Sender) do + begin + Font.Style := [fsUnderline]; + Cursor := crHandPoint; + end; +end; + +procedure TFormUserPerf.SpeedUserMouseLeave(Sender: TObject); +begin + with TSpeedButton(Sender) do + begin + Font.Style := []; + Cursor := crDefault; + end; +end; + +procedure TFormUserPerf.SpeedLogClick(Sender: TObject); +begin + if FrmFrame is TUCFrame_Log then + Exit; + + if Assigned(FrmFrame) then + FreeAndNil(FrmFrame); + + FrmFrame := TUCFrame_Log.Create(Self); + lbDescricao.Caption := FUsercontrol.UserSettings.Log.LabelDescription; + TUCFrame_Log(FrmFrame).FUsercontrol := FUsercontrol; + TUCFrame_Log(FrmFrame).SetWindow; + TUCFrame_Log(FrmFrame).Height := Panel3.Height; + TUCFrame_Log(FrmFrame).Width := Panel3.Width; + TUCFrame_Log(FrmFrame).btfecha.ModalResult := mrOk; + FrmFrame.Parent := Panel3; +end; + +end. diff --git a/internal/2.31RC1/1/Source/pUcFrame_UserLogged.dfm b/internal/2.31RC1/1/Source/pUcFrame_UserLogged.dfm new file mode 100644 index 0000000..7ad72cb --- /dev/null +++ b/internal/2.31RC1/1/Source/pUcFrame_UserLogged.dfm @@ -0,0 +1,222 @@ +object UCFrame_UsersLogged: TUCFrame_UsersLogged + Left = 0 + Top = 0 + Width = 320 + Height = 240 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 0 + TabStop = True + object DBGrid: TDBGrid + Left = 0 + Top = 0 + Width = 320 + Height = 192 + Align = alClient + DataSource = dsDados + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ReadOnly = True + TabOrder = 0 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + Columns = < + item + Expanded = False + FieldName = 'UserName' + Title.Alignment = taCenter + Title.Caption = 'Nome' + Width = 159 + Visible = True + end + item + Expanded = False + FieldName = 'Login' + Title.Alignment = taCenter + Width = 123 + Visible = True + end + item + Expanded = False + FieldName = 'MACHINENAME' + Title.Alignment = taCenter + Title.Caption = 'Computador' + Width = 150 + Visible = True + end + item + Expanded = False + FieldName = 'DATA' + Title.Alignment = taCenter + Title.Caption = 'Data' + Width = 130 + Visible = True + end> + end + object Panel3: TPanel + Left = 0 + Top = 192 + Width = 320 + Height = 48 + Align = alBottom + BevelOuter = bvNone + TabOrder = 1 + DesignSize = ( + 320 + 48) + object BtExit: TBitBtn + Left = 212 + Top = 11 + Width = 95 + Height = 25 + Anchors = [akTop, akRight] + Caption = '&Fechar' + TabOrder = 2 + Glyph.Data = { + 36060000424D3606000000000000360000002800000020000000100000000100 + 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40 + 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69 + 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4 + C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2 + A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6 + C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA + F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB + C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7 + E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF + FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0 + C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA + EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF + FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4 + CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE + EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9 + D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1 + F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE + D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7 + F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4 + DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB + FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9 + E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE + FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F + C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B + D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019 + 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF + F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969 + 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733 + ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8 + FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD + ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614 + C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D + E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888 + 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563 + E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9} + NumGlyphs = 2 + end + object BitMsg: TBitBtn + Left = 12 + Top = 11 + Width = 95 + Height = 25 + Anchors = [akTop, akRight] + Caption = '&Mensagem' + TabOrder = 0 + OnClick = BitMsgClick + Glyph.Data = { + 42020000424D4202000000000000420000002800000010000000100000000100 + 1000030000000002000000000000000000000000000000000000007C0000E003 + 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CD3001F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CD300D300 + 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C9A19D300D300D3003B32 + D3001F7C1F7CD8520D190D190D190D190D190D1915369A19FE4ABF429D3E5C36 + 3B32D3001F7CD8521A5F964A964A964A964A964A964A9A191F53DF46BF429D3E + 5C365B32D300D852964A3B5F3B5F3B5F3B5F3B5F3B5F9A191F531F53BF429D3E + 9D3ED3001F7CD8527C6B964A7D6B7D6B7D6B7D6B7D6B9A199A199A199A19DF46 + D3001F7C1F7CD8529D739D73964ADF7BDF7BDF7BDF7BDF7BDF7BDF7B9A19D300 + 964A1F7C1F7CD852DF7BDF7B964A964AFF7FFF7FFF7FFF7F1536964AD3007C6B + 0D191F7C1F7CD852FF7F964AB97F977F964A964A964A964A0D7FEA7E964A964A + 0D191F7C1F7CD852964ADB7FDB7FB97F977F757F537F517F2F7F0D7FEA7E1536 + 0D191F7C1F7CD852DB7FDB7FDB7FDB7FB97F977F757F537F517F2F7F0D7FEA7E + 0D191F7C1F7C1F7CD852DB7FDB7FDB7FDB7FB97F977F757F537F517F2F7F4E21 + 1F7C1F7C1F7C1F7C1F7CD856DB7FDB7FDB7FDB7FB97F977F757F537F0D191F7C + 1F7C1F7C1F7C1F7C1F7C1F7CD852DB7FDB7FDB7FDB7FB97F977F0D191F7C1F7C + 1F7C1F7C1F7C1F7C1F7C1F7C1F7CD852D852D852D852D852D8521F7C1F7C1F7C + 1F7C1F7C1F7C} + end + object BitRefresh: TBitBtn + Left = 111 + Top = 11 + Width = 95 + Height = 25 + Anchors = [akTop, akRight] + Caption = '&Atualizar' + TabOrder = 1 + OnClick = BitRefreshClick + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000FF00FF000029 + 6A00002F790000307B0000317E00003382000035870000399200003A95000040 + A3000041A5000044AF00004BC000004CC200004DC500004FCA000050CD000052 + D1000053D4000054D700065AD1000055D9000056DD000058E100005AE600005B + E900005CEB00005DEE00005EF0000060F6000669F6000062F9000065FF000268 + FF00056BFF00066CFF00086EFF000A70FF000C72FF000F75FF001070F2001378 + FF001479FF00197DFF001E80FF002880EE002585FF002A88FF00328EFF003590 + FF003D95FF004592ED004596F6004097FF004598FB00469AFF00499DFF0050A0 + FF0056A4FF005AA6FF005CA7FF0066A3E90066A9F50060AAFF0066ACFF0069AF + FF006CB1FF0072B4FF0074B5FF007FBBFF007FBCFF0088B8EE0081BCFF008AC1 + FF008FC4FF009FCEFF00A3CFFF00ADD5FF00B7DAFF00EAF3FC00EAF4FF00EDF6 + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000808060402020202020202010000000C1715110C + 0C0C0C0C0C0C0C0A01000015211F1C1B171115111515150F0200001C21211E3E + 5252523D1410150C0400001C27244950342D33504710150C0200001C2E2A5238 + 1F1C1C335211150C0200001C372C523138521F283E15150C0400001C3C2F504C + 425252371B1B1B0F0600001C41303F52525252524D1C1B110800001C44322E38 + 4E52524B2A1F1F1B0A00001C48392F2E465235271F21211B0B00001C49463F3C + 37312E2A2721271F0C00001C3F494948443C312C2727212110000000242B2B2B + 2A271F1F1F1C1C15000000000000000000000000000000000000} + end + end + object dsDados: TDataSource + Left = 132 + Top = 144 + end +end diff --git a/internal/2.31RC1/1/Source/pUcFrame_UserLogged.pas b/internal/2.31RC1/1/Source/pUcFrame_UserLogged.pas new file mode 100644 index 0000000..5670b63 --- /dev/null +++ b/internal/2.31RC1/1/Source/pUcFrame_UserLogged.pas @@ -0,0 +1,130 @@ +unit pUcFrame_UserLogged; + +interface + +{$I 'UserControl.inc'} + +uses +{$IFDEF DELPHI5} +{$ELSE} + Variants, +{$ENDIF} + Buttons, + Classes, + Controls, + DB, + DBGrids, + Dialogs, + ExtCtrls, + Forms, + Graphics, + Grids, + IncUser_U, + Menus, + Messages, + StdCtrls, + SysUtils, + UCBase, + Windows; + +type + TUCFrame_UsersLogged = class(TFrame) + dsDados: TDataSource; + DBGrid: TDBGrid; + Panel3: TPanel; + BtExit: TBitBtn; + BitMsg: TBitBtn; + BitRefresh: TBitBtn; + procedure BitRefreshClick(Sender: TObject); + procedure BitMsgClick(Sender: TObject); + private + DSUserLogados: TDataset; + UCMes: TUCApplicationMessage; + public + FUserControl: TUserControl; + procedure SetWindow; + destructor Destroy; override; + end; + +implementation + +uses + UCMessages; + +{$R *.dfm} + +procedure TUCFrame_UsersLogged.SetWindow; +var + SQLStmt: String; + I: Integer; + Form: TForm; +begin + UCMes := nil; + Form := Application.MainForm; + for I := 0 to Form.ComponentCount - 1 do + if (Form.Components[I] is TUCApplicationMessage) then + UCMes := TUCApplicationMessage(Form.Components[I]); + BitMsg.Visible := UCMES <> nil; + + + with FUserControl do + begin + SQLStmt := + 'SELECT U.' + TableUsers.FieldUserName + ' AS UserName,' + + ' U.' + TableUsers.FieldUserId + ' AS id, ' + + ' U.' + TableUsers.FieldLogin + ' AS Login,' + + ' L.' + TableUsersLogged.FieldMachineName + ' AS MachineName,' + + ' L.' + TableUsersLogged.FieldData + ' AS DATA ' + + 'FROM ' + TableUsersLogged.TableName + ' L ' + + ' INNER JOIN ' + TableUsers.TableName + ' U ON U.' + TableUsers.FieldUserID + ' = L.' + TableUsersLogged.FieldUserID + + ' LEFT JOIN ' + TableUsers.TableName + ' P ON P.' + TableUsers.FieldUserID + ' = U.' + TableUsers.FieldProfile + ' ' + + 'WHERE L.' + TableUsersLogged.FieldApplicationID + ' = ' + QuotedStr(ApplicationID); + + DSUserLogados := DataConnector.UCGetSQLDataset(SQLStmt); + + with UserSettings.UsersLogged do + begin + Caption := LabelCaption; + BitMsg.Caption := BtnMessage; + BitRefresh.Caption := BtnRefresh; + BtExit.Caption := BtnClose; + + DBGrid.Columns[0].Title.Caption := ColName; + DBGrid.Columns[1].Title.Caption := ColLogin; + DBGrid.Columns[2].Title.Caption := ColComputer; + DBGrid.Columns[3].Title.Caption := ColData; + end; + + end; + dsDados.Dataset := DSUserLogados; +end; + +procedure TUCFrame_UsersLogged.BitRefreshClick(Sender: TObject); +begin + try + Screen.Cursor := crHourGlass; + dsDados.DataSet.Close; + dsDados.DataSet.Open; + finally + Screen.Cursor := crDefault; + end; +end; + +destructor TUCFrame_UsersLogged.Destroy; +begin + FreeAndNil(DSUserLogados); + FreeAndNil(UCMes); + inherited; +end; + +procedure TUCFrame_UsersLogged.BitMsgClick(Sender: TObject); +var + Msg: String; +begin + if Assigned(UcMes) then + if InputQuery(fUserControl.UserSettings.UsersLogged.InputText, fUserControl.UserSettings.UsersLogged.InputCaption, Msg) = True then + UcMes.SendAppMessage(dsDados.DataSet.FieldValues['id'], fUserControl.UserSettings.UsersLogged.MsgSystem, Msg); +end; + +end. + diff --git a/internal/2.31RC1/1/UCHistorico/GHistorico.bdsgroup b/internal/2.31RC1/1/UCHistorico/GHistorico.bdsgroup new file mode 100644 index 0000000..fbbb0b2 --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/GHistorico.bdsgroup @@ -0,0 +1,19 @@ + + + + + + + + + + + + + pckHistorico.bdsproj + pckHistorico.bpl + + + + diff --git a/internal/2.31RC1/1/UCHistorico/GHistorico.groupproj b/internal/2.31RC1/1/UCHistorico/GHistorico.groupproj new file mode 100644 index 0000000..e8e997d --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/GHistorico.groupproj @@ -0,0 +1,31 @@ + + + {db54d477-5fdc-4df2-8d4f-9ea1d372aaf4} + + + + + Default.Personality + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/internal/2.31RC1/1/UCHistorico/UCHistDataset.pas b/internal/2.31RC1/1/UCHistorico/UCHistDataset.pas new file mode 100644 index 0000000..46bcd4f --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/UCHistDataset.pas @@ -0,0 +1,266 @@ +unit UCHistDataset; + +interface + + uses SysUtils, Classes, UCHist_Type,UCHist_Base,Forms, Db, UCConsts_Language; + +Type + TUCHist_DataSet = class(TComponent) + private + fDataSet: TDataSet; + fOnNewRecord , + fOnBeforeDelete , + fOnBeforeEdit , + fOnAfterPost : TDataSetNotifyEvent; + fOptions: TUCHistOptions; + fControl: TUCControlHistorico; + procedure SetDataSet(const Value: TDataSet); + procedure SetfControl(const Value: TUCControlHistorico); + { Private declarations } + protected + DataSetInEdit : Boolean; + AFields : Array of Variant; + procedure NewRecord(DataSet: TDataSet); + procedure BeforeDelete(DataSet: TDataSet); + procedure BeforeEdit(DataSet: TDataSet); + procedure AfterPost(DataSet: TDataSet); + procedure AddHistory( AppID , Form , FormCaption, Event , Obs , TableName : String; UserId : Integer ); + Function GetValueFields : String; + procedure Loaded; override; + procedure Notification(AComponent: TComponent; AOperation: TOperation);override; + { Protected declarations } + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + { Public declarations } + published + { Published declarations } + Property DataSet : TDataSet Read fDataSet Write SetDataSet; + Property ControlHistorico : TUCControlHistorico read fControl write SetfControl; + end; + +implementation + + +procedure TUCHist_DataSet.AddHistory(AppID, Form, FormCaption, Event, Obs, + TableName: String; UserId: Integer); +begin + If fControl.Active then + fControl.UserControl.DataConnector.UCExecSQL + ( + Format('INSERT INTO %s VALUES( %s, %d , %s , %s , %s , %s ,%s ,%s , %s )', + [ fControl.TableHistory.TableName , + QuotedStr(AppID), + UserID, + QuotedStr( FormatDateTime('dd/mm/yyyy',date) ), + QuotedStr( FormatDateTime('hh:mm:ss',time) ), + QuotedStr( Form ), + QuotedStr( FormCaption ), + QuotedStr( Event ), + QuotedStr( Obs ) , + QuotedStr( TableName ) + ])); +end; + +procedure TUCHist_DataSet.AfterPost(DataSet: TDataSet); +begin + If Assigned( fOnAfterPost ) then + fOnAfterPost( DataSet ); + + If ( ( DataSetInEdit = False ) and ( fControl.Options.SavePostInsert ) ) then // quando inserindo + AddHistory(fControl.UserControl.ApplicationID, + Screen.ActiveCustomForm.Name , + Screen.ActiveCustomForm.Caption , + fControl.HistoryMsg.Evento_Insert, + GetValueFields, + DataSet.Name, + fControl.UserControl.CurrentUser.UserID); + + If ( ( DataSetInEdit = True ) and ( fControl.Options.SavePostEdit ) ) then // quando editando + AddHistory(fControl.UserControl.ApplicationID, + Screen.ActiveCustomForm.Name , + Screen.ActiveCustomForm.Caption , + fControl.HistoryMsg.Evento_Edit, + GetValueFields, + DataSet.Name, + fControl.UserControl.CurrentUser.UserID); + + DataSetInEdit := False; + SetLength( AFields , 0 ); +end; + +procedure TUCHist_DataSet.Assign(Source: TPersistent); +begin + if Source is TUCHist_DataSet then + begin + Self.DataSet := TUCHist_DataSet(Source).DataSet; + Self.ControlHistorico := TUCHist_DataSet(Source).ControlHistorico; + end + else + inherited; +end; + +procedure TUCHist_DataSet.BeforeDelete(DataSet: TDataSet); +begin + If Assigned( fOnBeforeDelete ) then + fOnBeforeDelete( DataSet ); + + DataSetInEdit := False; + SetLength( AFields , 0 ); + + If fControl.Options.SaveDelete then + AddHistory(fControl.UserControl.ApplicationID, + Screen.ActiveCustomForm.Name , + Screen.ActiveCustomForm.Caption , + fControl.HistoryMsg.Evento_Delete, + GetValueFields, + DataSet.Name, + fControl.UserControl.CurrentUser.UserID); +end; + +procedure TUCHist_DataSet.BeforeEdit(DataSet: TDataSet); +Var I : Integer; +begin + // Antes de Editar + If Assigned( fOnBeforeEdit ) then + fOnBeforeEdit( DataSet ); + + DataSetInEdit := True; + + SetLength( AFields , DataSet.FieldCount ); + For I := 0 to DataSet.FieldCount - 1 do + Begin + If DataSet.Fields[ I ].IsBlob = False then + AFields[ i ] := DataSet.Fields[ i ].Value + else AFields[ I ] := 'Blob'; + End; +end; + +constructor TUCHist_DataSet.Create(AOwner: TComponent); +begin + inherited; + DataSetInEdit := False; + fOptions := TUCHistOptions.Create(Self); + fDataSet := Nil; + fControl := Nil; +end; + +destructor TUCHist_DataSet.Destroy; +begin + FreeAndNil( fOptions ); + inherited; +end; + +function TUCHist_DataSet.GetValueFields: String; +Var Aux : Integer; +begin + Result := ''; + For Aux := 0 to DataSet.FieldCount - 1 do + Begin + If DataSet.Fields[ Aux ].IsBlob = False then + Begin + With DataSet.Fields[ Aux ] do + Begin + If DataSetInEdit = false then // inserindo ou deletando + try Result := Result + Format('%-20s = %s ',[ FieldName , AsString ] ) + #13#10; except end + else + Begin //editando + If fControl.Options.TypeSavePostEdit = tpSaveModifiedFields then + Begin + If Value <> AFields[ Aux ] then + try Result := Result + Format('%s||%s||%s',[FieldNAme, AFields[ Aux ] , Value ] ) + #13#10; except end; + End + else + try Result := Result + Format('%s||%s||%s',[FieldNAme, AFields[ Aux ] , Value ] )+ #13#10; except end; + End; + End; + end; + End; // for +end; + +procedure TUCHist_DataSet.Loaded; +begin + inherited; + if not(csDesigning in ComponentState) then + begin + if not Assigned( ControlHistorico ) then + raise Exception.Create( Format( RetornaLingua( ucPortuguesBr ,'Const_Hist_MsgExceptPropr'),['ControlHistorico']) ); + + If fControl.Active = false then exit; + + if not Assigned(DataSet) then + raise Exception.Create( Format( RetornaLingua( fControl.UserControl.Language,'Const_Hist_MsgExceptPropr'),['DataSet']) ); + + fOnNewRecord := Nil; + fOnBeforeDelete := Nil; + fOnBeforeEdit := Nil; + fOnAfterPost := Nil; + + If Assigned( DataSet.OnNewRecord ) then + fOnNewRecord := DataSet.OnNewRecord; + + If Assigned( DataSet.BeforeDelete ) then + fOnBeforeDelete := DataSet.BeforeDelete; + + If Assigned( DataSet.AfterPost ) then + fOnAfterPost := DataSet.AfterPost; + + If Assigned( DataSet.BeforeEdit ) then + fOnBeforeEdit := DataSet.BeforeEdit; + + DataSet.OnNewRecord := NewRecord; + DataSet.BeforeDelete := BeforeDelete; + DataSet.AfterPost := AfterPost; + DataSet.BeforeEdit := BeforeEdit; + end; +end; + +procedure TUCHist_DataSet.NewRecord(DataSet: TDataSet); +begin + If Assigned( fOnNewRecord ) then + fOnNewRecord( DataSet ); + + DataSetInEdit := False; // Inserindo novo registro + SetLength( AFields , 0 ); + + If fControl.Options.SaveNewRecord then + AddHistory( fControl.UserControl.ApplicationID, + Screen.ActiveCustomForm.Name , + Screen.ActiveCustomForm.Caption, + fControl.HistoryMsg.Evento_NewRecord, + Format(RetornaLingua( fControl.UserControl.Language,'Const_Msg_NewRecord'),[fControl.UserControl.CurrentUser.UserName]), + DataSet.Name, + fControl.UserControl.CurrentUser.UserID); +end; + +procedure TUCHist_DataSet.Notification(AComponent: TComponent; + AOperation: TOperation); +begin + if (AOperation = opRemove) then + begin + If AComponent = fControl then + fControl := Nil; + + if AComponent = fDataSet then + fDataSet := Nil; + end; + + inherited Notification(AComponent, AOperation); +end; + +procedure TUCHist_DataSet.SetDataSet(const Value: TDataSet); +begin + fDataSet := Value; + if Assigned(Value) then + Value.FreeNotification(Self); +end; + +procedure TUCHist_DataSet.SetfControl(const Value: TUCControlHistorico); +begin + fControl := Value; + if Value <> nil then + Value.FreeNotification(self); +end; + +end. diff --git a/internal/2.31RC1/1/UCHistorico/UCHist_Base.pas b/internal/2.31RC1/1/UCHistorico/UCHist_Base.pas new file mode 100644 index 0000000..495ca03 --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/UCHist_Base.pas @@ -0,0 +1,206 @@ +unit UCHist_Base; + +interface + +uses + SysUtils, + Classes,Forms, + UCConsts_Language, + UCHist_Type, + UCBase; + + +type + TUCControlHistorico = class(TComponent) + private + fUserControl: TUserControl; + fActive: Boolean; + fOptions: TUCHistOptions; + fTableHistory: TUCTableHistorico; + fUsersHistory: TUCUserHistory; + fHistoryMsg: TUCHistoryMSG; + procedure SetfUserControl(const Value: TUserControl); + { Private declarations } + protected + FrmHistorico : TCustomForm; + procedure Loaded; override; + procedure IniSettings( Language : TUCLanguage ); + procedure ActionUserHistory(Sender: TObject); + { Protected declarations } + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + { Public declarations } + published + property Active : Boolean read fActive write fActive default True; + property UserControl : TUserControl read fUserControl Write SetfUserControl; + Property Options : TUCHistOptions read fOptions write fOptions; + property TableHistory : TUCTableHistorico read fTableHistory write fTableHistory; + property UsersHistory : TUCUserHistory read fUsersHistory write fUsersHistory; + property HistoryMsg : TUCHistoryMSG read fHistoryMsg Write fHistoryMsg; + { Published declarations } + end; + +procedure Register; + +implementation + +uses UCHistDataset,UCHist_Form; + +{$R UcHistReg.dcr} + +procedure Register; +begin + RegisterComponents('UC Historico', + [TUCHist_DataSet, + TUCControlHistorico]); +end; + +{ TUCControlHistorico } + +procedure TUCControlHistorico.Assign(Source: TPersistent); +begin + if Source is TUCHist_DataSet then + begin + TUCHistOptions(Source).Assign(Options); + TUCTableHistorico(Source).Assign(TableHistory); + TUCUserHistory(Source).Assign(UsersHistory); + TUCHistoryMSG(Source).Assign(HistoryMSG); + end + else + inherited +end; + +constructor TUCControlHistorico.Create(AOwner: TComponent); +begin + inherited; + fUserControl := Nil; + Active := True; + fOptions := TUCHistOptions.Create(Self); + fTableHistory := TUCTableHistorico.Create(Self); + fUsersHistory := TUCUserHistory.Create(Self); + fHistoryMSG := TUCHistoryMSG.Create(Self); + if csDesigning in ComponentState then + IniSettings( ucPortuguesBr ); +end; + +destructor TUCControlHistorico.Destroy; +begin + fUserControl := Nil; + FreeAndNil(fOptions); + FreeAndNil(fTableHistory); + FreeAndNil(fUsersHistory); + FreeAndNil(fHistoryMSG); + inherited; +end; + +procedure TUCControlHistorico.Loaded; +begin + inherited; + if not(csDesigning in ComponentState) then + begin + if not Assigned( fUserControl ) then + raise Exception.Create( Format( RetornaLingua( ucPortuguesBr ,'Const_Hist_MsgExceptPropr'),['UserControl']) ); + + IniSettings( fUserControl.Language ); + If Active then + If not fUserControl.DataConnector.UCFindTable( TableHistory.TableName ) then + fUserControl.DataConnector.UCExecSQL( + Format('CREATE TABLE %s ( %s %s(250), %s %s , %s %s(10), %s %s(8), %s %s(250), %s %s(100), %s %s(50) , %s %s, %s %s(50) ) ', + [ TableHistory.TableName, + TableHistory.FieldApplicationID, + fUserControl.UserSettings.Type_VarChar, + + TableHistory.FieldUserID, + fUserControl.UserSettings.Type_Int, + + TableHistory.FieldEventDate, + fUserControl.UserSettings.Type_Char, + + TableHistory.FieldEventTime, + fUserControl.UserSettings.Type_Char, + + TableHistory.FieldForm, + fUserControl.UserSettings.Type_VarChar, + + TableHistory.FieldCaptionForm, + fUserControl.UserSettings.Type_VarChar, + + TableHistory.FieldEvent, + fUserControl.UserSettings.Type_VarChar, + + TableHistory.FieldObs, + fUserControl.UserSettings.Type_Memo, + + TableHistory.FieldTableName, + fUserControl.UserSettings.Type_VarChar])); + + + if Assigned(fUsersHistory.MenuItem) and (not Assigned(fUsersHistory.MenuItem.OnClick)) then + fUsersHistory.MenuItem.OnClick := ActionUserHistory; + + if Assigned(fUsersHistory.Action) and (not Assigned(fUsersHistory.Action.OnExecute)) then + fUsersHistory.Action.OnExecute := ActionUserHistory; + end; +end; + +procedure TUCControlHistorico.SetfUserControl(const Value: TUserControl); +begin + FUserControl := Value; + if Value <> nil then + Value.FreeNotification(self.UserControl); +end; + +procedure TUCControlHistorico.IniSettings( Language : TUCLanguage ); +Begin + With HistoryMsg do + Begin + Evento_Insert := RetornaLingua( Language ,'Const_Evento_Insert'); + Evento_Delete := RetornaLingua( Language ,'Const_Evento_Delete'); + Evento_Edit := RetornaLingua( Language ,'Const_Evento_Edit'); + Evento_NewRecord := RetornaLingua( Language ,'Const_Evento_NewRecord'); + Hist_All := RetornaLingua( Language ,'Const_Hist_All'); + Msg_LimpHistorico := RetornaLingua( Language ,'Const_Msg_LimpHistorico'); + Msg_MensConfirma := RetornaLingua( Language ,'Const_Msg_MensConfirma'); + Msg_LogEmptyHistory := RetornaLingua( Language ,'Const_Msg_LogEmptyHistory'); + LabelDescricao := RetornaLingua( Language ,'Const_LabelDescricao'); + LabelUser := RetornaLingua( Language ,'Const_LabelUser'); + LabelForm := RetornaLingua( Language ,'Const_LabelForm'); + LabelEvento := RetornaLingua( Language ,'const_LabelEvento'); + LabelTabela := RetornaLingua( Language ,'const_LabelTabela'); + LabelDataEvento := RetornaLingua( Language ,'const_LabelDataEvento'); + LabelHoraEvento := RetornaLingua( Language ,'const_LabelHoraEvento'); + Msg_NewRecord := RetornaLingua( Language ,'const_Msg_NewRecord'); + Hist_MsgExceptPropr := RetornaLingua( Language ,'Const_Hist_MsgExceptPropr'); + Hist_BtnFiltro := RetornaLingua( Language ,'const_Hist_BtnFiltro'); + Hist_BtnExcluir := RetornaLingua( Language ,'const_Hist_BtnExcluir'); + Hist_BtnFechar := RetornaLingua( Language ,'const_Hist_BtnFechar'); + End; + + With TableHistory do + Begin + TableName := RetornaLingua(Language,'Const_Hist_TableName'); + FieldApplicationID := RetornaLingua(Language,'Const_Hist_FieldApplicationID'); + FieldUserID := RetornaLingua(Language,'Const_Hist_FieldUserID'); + FieldEventDate := RetornaLingua(Language,'Const_Hist_FieldEventDate'); + FieldEventTime := RetornaLingua(Language,'Const_Hist_FieldEventTime'); + FieldForm := RetornaLingua(Language,'Const_Hist_FieldForm'); + FieldCaptionForm := RetornaLingua(Language,'Const_Hist_FieldCaptionForm'); + FieldEvent := RetornaLingua(Language,'Const_Hist_FieldEvent'); + FieldObs := RetornaLingua(Language,'Const_Hist_FieldObs'); + FieldTableName := RetornaLingua(Language,'Const_Hist_FieldTableName'); + End; +End; + +procedure TUCControlHistorico.ActionUserHistory(Sender:TObject); +Begin + FrmHistorico := TFrmHistorico.Create(Self); + TFrmHistorico(FrmHistorico).fControl := Self; + TFrmHistorico(FrmHistorico).Position := fUserControl.UserSettings.WindowsPosition; + FrmHistorico.ShowModal; + FreeAndNil(FrmHistorico); +End; + + +end. diff --git a/internal/2.31RC1/1/UCHistorico/UCHist_Form.dfm b/internal/2.31RC1/1/UCHistorico/UCHist_Form.dfm new file mode 100644 index 0000000..90cf87e --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/UCHist_Form.dfm @@ -0,0 +1,1311 @@ +object FrmHistorico: TFrmHistorico + Left = 99 + Top = 127 + BorderStyle = bsDialog + Caption = 'Historico de Tabelas' + ClientHeight = 453 + ClientWidth = 813 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 813 + Height = 49 + Align = alTop + Color = clWhite + TabOrder = 0 + object Image1: TImage + Left = 1 + Top = 1 + Width = 48 + Height = 47 + Align = alLeft + Center = True + Picture.Data = { + 055449636F6E000001000C00101010000100040028010000C600000018181000 + 01000400E8010000EE0100002020100001000400E8020000D603000030301000 + 0100040068060000BE060000101000000100080068050000260D000018180000 + 01000800C80600008E1200002020000001000800A80800005619000030300000 + 01000800A80E0000FE210000101000000100200068040000A630000018180000 + 01002000880900000E3500002020000001002000A8100000963E000030300000 + 01002000A82500003E4F00002800000010000000200000000100040000000000 + 8000000000000000000000000000000000000000000000000000800000800000 + 0080800080000000800080008080000080808000C0C0C0000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000780000000000000067E76 + 00000000000C8E8E8E77000000068E87E8E77000000687E887E8E7000007E7C8 + E88E8C00000788E87C87E000000E8888F8E8700000088E88FF8880000008E8CF + 6E888000000888E8F88E800000088FFFFFFFF7000008B3B7B888F700000B89BB + 9BBBB70000078B77B7B9B7000000000007787000E7FF0000E0FF0000E00F0000 + E0070000E0030000E0030000E0070000E0070000E0070000E0070000E0070000 + E0030000E0030000E0030000E0030000FF870000280000001800000030000000 + 0100040000000000200100000000000000000000000000000000000000000000 + 00008000008000000080800080000000800080008080000080808000C0C0C000 + 0000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000800 + 000000000000000000006C86C8000000000000000000C768E8EC700000000000 + 0000668E8E8E8EC7E00000000000C7E8E7E8E8E87C00000000006C888E87E8E8 + E86000000000C8EE88E88C8E8E8E70000000678C6778E8E8E8E7EC000000CE86 + 8ECF88888878C0000000688EF7E86E7E8E8C00000000C888686888C646800000 + 000068888F8F8FFF888E00000000C88E68EF8F88F88700000000E88E787FFF8F + 88FC00000000C88EFE6F66E7E8F60000000068F7887F8886768E00000000CFF8 + 88EFFFFFFFF700000000E88FFFFFFFFFFFF80000000078B3B38B88FFFFF80000 + 000078B9B9B9BB3B3B88700000007B8BBBBB9BBBBBBBC000000078888988B8B9 + B9BB7000000065717773573777776000000000000000000000000000FBFFFF00 + F03FFF00F007FF00F0007F00F0003F00F0001F00F0000700F0000300F0000700 + F0000F00F0001F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00 + F0000F00F0000F00F0000700F0000700F0000700F0000700FFFFFF0028000000 + 2000000040000000010004000000000000020000000000000000000000000000 + 0000000000000000000080000080000000808000800000008000800080800000 + 80808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000 + FFFFFF00000000000000000000000000000000000000006C7670000000000000 + 00000000000007C8E8CEC7E000000000000000000000076678E8E8C767000000 + 0000000000000EC7CE8E8E8E8EC6C80000000000000007C78E87E8E8E8E8E7C6 + 00000000000006C68E8E8C8E78E8E8E7C0000000000008C788E88E8E8E78E8E8 + E7000000000006CE8E87E888E8E7E8C8E7C80000000007E78CE7CE8E888E8E8E + 8E8C800000000C68868686888E8888E8E8EEC000000008CE86E8E788888E8E88 + 8E5C0000000006C88E887CE86CE8888E8C8000000000086887C88E88E7646C68 + 8600000000000CE8FFFE8688F8888E7C8C000000000007C8FE8F8F8F8F888888 + E700000000000E6887E67E8FF8F8FF8F8E000000000007CFFE8CF888F8F8F888 + F600000000000E788688E7EF8EF88FF8FE00000000000CE8FE8F8C8F666E67E8 + 88700000000007CF8788FE7F888C8666C8E00000000006EFF8E867EFFFFFF88F + F8C0000000000C88FFFFFFFFFFFFFFFFFF700000000006888FFFFFFFFFFFFFFF + FF60000000000CB8B39B7B8888F8FFFFFF60000000000688B9BB9B9BBB3B8888 + 8F800000000007B8BB9BBBB9B9BBBBBBBB78000000000CB888B9B9BBBBB9B9BB + 9B760000000006888B888B8B98BBBBBBBB37000000000773797B79B7B9898989 + B786000000000077777C8C7C7C76767775780000000000000000000000000000 + 00000000FFFFFFFFFC1FFFFFF801FFFFF8003FFFF80003FFF80000FFF800007F + F800003FF800000FF8000007F8000007F800000FF800001FF800003FF800003F + F800003FF800003FF800003FF800003FF800001FF800001FF800001FF800001F + F800001FF800001FF800001FF800000FF800000FF800000FF800000FFC00000F + FFFFFFFF28000000300000006000000001000400000000008004000000000000 + 0000000000000000000000000000000000008000008000000080800080000000 + 800080008080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000 + FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000 + 000000000000000008C668000000000000000000000000000000000000000000 + 06C7C6C6C0000000000000000000000000000000000000007C688E867C6C7800 + 00000000000000000000000000000000C6CE778E8E8EC6C67000000000000000 + 00000000000000006C7767E8E8E8E8ECEC6C8000000000000000000000000000 + C66C8E8C8E7E8E88E8EC6C670000000000000000000000006C6868E8E8E8C8E8 + E78E8ECEC6C800000000000000000000C6C7C8E8E8C8E8E78E8E88E8766C6000 + 00000000000000006C68E8E87E8E8E8E7E78E78E877C60000000000000000000 + 6C67888E88E8E8E8E8E7E8E7EE8EC6000000000000000000C6C8E8E8E88E878E + 77E8E7E878E8EC6800000000000000006CE788888E88E8E88E878E8E7E8E88EC + 6000000000000000C6778EC6E88E888E88E8E8C8E8C8E8E8C600000000000000 + 6CE88E68C6C67E88E88E88E8E8E8E77E8C60000000000000C6C887C86E88C888 + 8E88E88E88E88E8E8EC80000000000006CE88E6E7C8E68E888888E88E88E8E87 + EC670000000000006C7888678E686888E8E888E88E88E8EC6700000000000000 + CE688ECFFF86C88E677E8888888E88C780000000000000006C78F86F888E6888 + C6C66CE7E8888EC00000000000000000CECF8E66E6886E888E766646466E87C0 + 00000000000000006C7FFFF888C6C88F8F8888E76C658E600000000000000000 + 6E6FF8FF8FFF88888F8F8888888E87C00000000000000000CC7FFE7E88F8FF8F + 8888F8F8F888886000000000000000006ECFF86766E6E8F8FF8F888F88888EC0 + 0000000000000000C68FFECF8888C88F8F8F8F888F8FF8600000000000000000 + 6CEFF8786C8FE8FF8F8F8F8F88F88FC80000000000000000CE7FFE6E8E6F7EFF + FFF8FF8FF88F8F6800000000000000006C8FF8C7FF7E76FF666E888F8FF8F8EC + 0000000000000000CE7FF8EFFFF6C8FF6C66C666668E8F670000000000000008 + 6CEFF7EFFFFF6E8F88E766C66C666F8C0000000000000008CE8FF8C668E88C8F + FFFFFF888E7C688C0000000000000008C68FF8F88E7C6EFFFFFFFFFFFFFFFF86 + 0000000000000008CE88FFFFFFFFFFFFFFFFFFFFFFFFFF8C0000000000000008 + C68FFFFFFFFFFFFFFFFFFFFFFFFFFFF68000000000000008CE7F888FFFFFFFFF + FFFFFFFFFFFFFFFCE0000000000000086388B9B3373888FFFFFFFFFFFFFFFFF6 + 7000000000000008CBBFB3B9BB9BB9B3378788FFFFFFFFF8C000000000000008 + CB88B9BB9BB9BB9BBBBBBB33B78788F8C000000000000008CBBF8B9BB9BB9BBB + 9B9B9BBBBBBBBB376000000000000008CB888B9B9BB9BB9BBBBBB9B9B9BBBBBB + C000000000000008CBB888BBB9BBB9BB9B9BBBBBBBB9BB9B6800000000000008 + 698F8F8F8F88B8BBB9BB9B9BB9BBBBBB6C00000000000008CBB9B37B8B7B8888 + 8F888B8BBBBB9BBB7600000000000000C7777797939799B939B9B9B79898B798 + 7C000000000000006C6C46C6C6C66C6C66C6674767775776C700000000000000 + 00000000000000888888C8C8C7C66C6800000000000000000000000000000000 + 000000000000000000000000FFFFFFFFFFFF0000FF83FFFFFFFF0000FF807FFF + FFFF0000FF0003FFFFFF0000FF00007FFFFF0000FF000007FFFF0000FF000000 + FFFF0000FF0000000FFF0000FF00000007FF0000FF00000007FF0000FF000000 + 03FF0000FF00000000FF0000FF000000007F0000FF000000003F0000FF000000 + 001F0000FF000000000F0000FF000000000F0000FF000000003F0000FF000000 + 007F0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000 + 01FF0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000 + 00FF0000FF00000000FF0000FF00000000FF0000FF00000000FF0000FE000000 + 00FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000 + 007F0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000 + 007F0000FE000000007F0000FE000000007F0000FE000000003F0000FE000000 + 003F0000FE000000003F0000FF000000003F0000FF000000003F0000FFFFFC00 + 00FF0000FFFFFFFFFFFF00002800000010000000200000000100080000000000 + 000100000000000000000000000100000001000000000000B45D2800B6612900 + BB672D00C67436009B7E6E0079897500B0812F00B4853600D4823E00DC873B00 + E08B3700E7983F00A08F6F00BD896800A5877600AD8A7600BF8F7000B4927D00 + BE977E00D2864600C59C4E00CA9E4D00CC895100CC895600C99E5500DB945600 + E89D4100E39D5E00CBA24F00CCA25100C6A15900DAAD5900EAA54A00E6AA5300 + E8A45B00E3AD5B00FBBF5900CB8D6300C09E6500CA9E6500CEAA6100CAA66B00 + D6AF6400D5B57100D5B57700DBBA7700D1B37C00E3A26500E6B86500E1B86900 + E9AC7100E8AF7D00E3BB7500EFB67B00F2BA7F00FCC15A00FFC75F00FFC76000 + FFC86200FFC96400FFCA6900FFCB6C00FFCC6F00FFCD7200FFCF7600FBCD7B00 + FFD07900089DEE000B9DF20004A7FF0000ADFF0000B4FF0000BBFF001FBFF800 + 28ACEF0038AFF3002DB2F40029BAF7004E96CC005FA9DF0070A2CD0073ADDC00 + 4ABAEF0045ADF1004CBCFF0000C2FF0000CAFF0016C6F90000D1FB0000D1FF00 + 67CFF5006CC8F10066CFFF00D0B68600DEBF9A00DEC28400DFC38800DDC49900 + E6C78D00FFD38100FFD48400FFD78E00E7C09100E1C49100E1C89100E7C89000 + E2C89700EBC29D00F9D79700FFDB9700E1CDAA00E8D4A600E5D2AA00E8D5AC00 + EFDBB400EBDAB800ECD9B900F9E4BD008BD4F300B1DFF400EEE2CC00F2E3C400 + F8E6C400F7E8CB00FFEDCD00FFF0D500FFF2DB00CFE6F400FFF4E000E2EEF700 + FDF9F300F2F7FA00FFFDFA00FFFEFD0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000261300000000000000 + 000000000000000328210B1700000000000000000000000124393939251B090E + 000000000000000242403D3B39393922170000000000000432203164403D3B3B + 390A0000000000142B1E166D6E6664433D0C00000000001A2E63156A07081935 + 23000000000000307C736A7B7D76682A1C00000000000033611E2F7B81817E7E + 3400000000000036607229741F2F62746C00000000000037706A2C72796F5E27 + 5F000000000000688286868686868686831300000000005B45444B535B777880 + 840E00000000005D5546474849565759590D00000000004F515250544C4D4E4A + 5806000000000000000000000012100F05000000E7FF0000E0FF0000E00F0000 + E0070000E0030000E0030000E0070000E0070000E0070000E0070000E0070000 + E0030000E0030000E0030000E0030000FF870000280000001800000030000000 + 0100080000000000400200000000000000000000000100000001000000000000 + 7A5E55005F6374006B61660066766F0062637000895302009C660A009C6A1600 + A9730B0093583900B05F2D00BA662B00BE6A2E00A1702300A56B3B00AE683B00 + AF6B3D00B26D3E00A8783000C24B0100C44E0200C7520300CA560500CC590600 + CF5C0700D15F0800D3610900D5630A00D6660B00D8680C00D96E1100D5721D00 + C86D2900CC6D2B00D3702100D6762200D97F2C00CF743700C87E3F00D0713000 + D0753A00D2793C00C07E4B00D17A4200D37C4100D47E4400D47F4900B4801A00 + B2832C00B5852C00B9882B00AD813500B3843300BF913300C3953500C0943900 + C89A3800E4903400E8973A00BA904A00BD954C00B4845A00BE995800CB8A4B00 + C4974400C59A4200C79C4E00C99B4800C98B5600D98D5D00C89F5000CE985600 + CA9F5600D5985000CFA34F00CBA45600CCA65B00D2AA5300D6A85000D1AC5D00 + D9AD5C00ECA24400EFAA4A00F2AC4A00F6BA5800F6BA5F00D9916200DC966900 + D59D6A00C4937400C5967800DD9B7100C8A76C00D3AC6200D1AB6400D5B16100 + D4B06A00D2B06D00DBB46C00C7A87500CDAE7700D7A27200D2B07000D4B27500 + DDBA7700ECB86600E1BB7600F0BA7B00F8C15F00FDC35C00FFC75F00F7C36300 + FAC36000FFC76000FFC86100FFC96500FFCA6900FFCC6E00EDC27100FFCD7200 + FFCE7600FFD07A00FFD17E004C6A8C0062758000627E80006378900062878000 + 72828600578AB0006085A7000091E700099AEF001498E50000B3EF0000A5FF00 + 00AAFF0000AFFF001CABFF0000BCF70000B0FF0000B4FF0000B9FF0000BEFF00 + 34A5E60020BEF00029B1FF0057B3E80077BEE90066B8F4007FBFF30000C1FE00 + 00C7FF0001CCFF0019CCFF0005D7F90000D0FF0000D5FF0029CCFF003CCDFF00 + 43CAF2004CCEFF0059CBFD0062C7FB0076C3F70079CCFB007FCEFF0063D3F200 + D7BC8F00E2AC8800E3B68B00E4BA9100DCC28A00DCC59A00E9C68300E5C48900 + F1CA8200FBCE8500FFD28100FDD38400FFD48600FFD58900FFD68C00E2C49000 + E9CB9000E8C19A00E3CD9F00EACF9B00F4C99400EBD09F00FBD79500FFD89100 + FFD99400FFDB9800FFDD9E00E5CEA000EAC6AD00E5D0A100ECD6AA00FDDDA100 + F1D0AD00E6D3B100EDDAB400EBDBB800ECDDBA00EEDEBC00F3D2B000F8DAB000 + EFE0BE00F9E2B70088C3CC0097C8EA008CC7F50092CDF70099DDFF00BBD6EE00 + 99E0FA0099E2FF00D6D5CE00EBDDC200F7E7C700FBE0C100FFEAC500FFECC900 + F9EACE00FFEDCD00F4EBD700F8EBD100FFEFD100F9EDD600FFF0D500FFF1D900 + FFF2DD00FFF4DF00CFE2F300DBE9F600FFF4E100FFF6E600FAF4E900FFF7E900 + FFF8EB00EFF5FB00FFFAF200FEFBF600FFFCF600FFFCF900FFFEFD0000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 005C000000000000000000000000000000000000000000002F274021295B0000 + 0000000000000000000000000000000014113E7071533A202A00000000000000 + 00000000000000001411486F6F6F6F6F6F522521460000000000000000000000 + 14106A74746F6F6F6F6F6F714A0C000000000000000000001412B47B79767671 + 746F6F6F6F5524000000000000000000162BB14F77B47B7B7676746F6F6F6F3B + 2E000000000000001645AF4B334451B7B67B7B797674746F542A000000000000 + 1859B9305E6341C8C3C2C2B4B47B795524000000000000001866BC69DF5E43B0 + 0735476BC2C2B22800000000000000001AABDD614C4732DFBE683C0E06136C00 + 00000000000000001AACE4C7E1E9E1E7E4E1E1DFD2B0BD5A0000000000000000 + 1ABACB50424D61EDE9E9E7E5E1E1D05700000000000000001EC9CD3937C468F1 + F1EEEDE9E9E7E72E00000000000000001ACFCD60F66138F309323C5DA9CAE426 + 00000000000000001FC9D14FC6CD36EFDCAE653F3408642E0000000000000000 + 1FDEF3E3CDBBADF6F6F6F6F6F3F3F35700000000000000001FDBEBF2F6F6F6F6 + F6F6F6F6F6F6F6AA000000000000000004D9858486919495D4D8ECF6F6F6F6C5 + 000000000000000080D993888A8D8D909898908792A1A8D35800000000000000 + 7ED7A78B888A8A8D90909899999E9E9C2E000000000000007D9697D5D6A5A7A4 + A3A2A09F9B999E9E0F000000000000000B0A0A010101030505027C7F7F838281 + 0D000000000000000000000000000000000000000000000000000000FBFFFF00 + F03FFF00F007FF00F0007F00F0003F00F0001F00F0000700F0000300F0000700 + F0000F00F0001F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00 + F0000F00F0000F00F0000700F0000700F0000700F0000700FFFFFF0028000000 + 2000000040000000010008000000000000040000000000000000000000010000 + 0001000000000000935D0600BC4F0E00BC500E0097620B009B6609009C6A1900 + A9730A00A06E1A00A8741000AD7A1C00965D3F00AE5F2300BE632500A5762C00 + AB7D2D00A9633A00BA6C3600A6773100C1530C00C0551000C55B1100C85F1300 + CC641500CF681600CE661B00CF691F00D16C1B00D5701A00D9751B00DE7C1F00 + C7672600CA652300C76B2600CD6A2500CC6B2C00D16F2A00D5762300D9792300 + D0712F00CE6E3000C57E3D00C97E3C00D1733500D0743900825C4C008D614D00 + AC6C4200B1724600AB775500B07E5600B97A5200D27A4100AE802B00B8862200 + BB8B2700B4842D00BD8C2900B3863500BD8D3100B2883B00BB8D3800DC832D00 + C08F3400C3933300C3953800C79B3B00E2862C00E78A2D00EA8D2E00E18C3600 + EE933400E8983A00F49C3F00CCA03E00B88D4500B58D4B00BC954E00B3836400 + BD947900DF8D4000C0954500C69A4500CC9E4A00DA914200D5994F00C0845300 + C18A5400CA855900D4865400D6885400DA8E5700D68D5E00C49C5500CBA04400 + CAA04D00D0A54600CDA55300CCA15900D7A95500D8A25B00D0AC5F00DFA95900 + E7A64E00F0A84700F2AE4B00F5B55200F7BB5900F8BD5B00CD8D6300C48F6D00 + CA936000C19E6000DA926400DC966800D19D6D00C99A7B00DF9F7600CEAA6100 + CAAA6D00D3AD6500D1A56B00D5AE6900D5B36A00C8A77500DFA37500D2AF7400 + DCAD7E00DBB47000D5B77A00D7B97E00DCB97900E0AD6000E3B76600EABE6D00 + F7C05D00FEC65E00FFC76000FFC86400FFCB6B00F1C17200FFCD7300F4C97A00 + FFD07B003C78B000517398004578A200628B80004284BF0043AAA8000389DD00 + 2093DD002BB6C50029A8DD00008BE2000894E9002C9CEA003498E70000A9FC00 + 16A7FE0001B6FD0036ABEF002FB8EE003DBDEE0022B6F9003ABAF300488CC700 + 4DAAC00040A2E00055BBE90041B7FF0052BEFF0063B4E70001C9FD0017C9FF00 + 00D3FF0023C7FE0035C5FE004FC4FC0071C4EB0060C7FC0079CAFA00D1B58500 + DCB18600DCBD8300D6BB8900DEC28800DEC59200EAC58100EFCE8F00F6C88500 + F2CB8D00FED38300F6D28D00FED58A00E4CB9400E7C39E00E4CB9A00EACE9D00 + EED09900FAD79500FFD99400F0D29800FFDC9A00EBC2A100E1CAA200E0CEAF00 + EDCDAC00ECD1A000E6D2AC00EBD6AC00F0D5A100F8D5A300FDDDA000F3DAAC00 + EDCFB100EAD7B800F5DABA00F3E0B900FBE5BD0089C7EB0083C7F70099CDF700 + 9ED7FC00A2D1EF00B4D3EC00AAD8F900B8DAF100AAE3FD00D5DCDF00EEDFC000 + F5DDC500EFE0C300F3E3C300FEEAC400F4E4CB00F9E5CF00F3E8CF00FEECCB00 + EFE5D100F4EAD400FDEED200FEEDD900FEF0D500FEF2DB00CAE0F200D6E6F400 + F6EEE300FFF4E200F9F4E900FFF9EE00E7F1F900FEFDFB000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000002021232B4E0000000000000000000000000000000000 + 0000000000000000006E13577C79542519277100000000000000000000000000 + 00000000000000000034022F328489896A684826233400000000000000000000 + 00000000000000000034022F578788888888888888693E1B235A000000000000 + 00000000000000000034022F64898888888888888888886C672A0D1F00000000 + 00000000000000000034032F8C8D8B8B8A89888888888888888866292C000000 + 000000000000000000341430C0C08F8F8B8B8B8A888888888888886B43270000 + 000000000000000000341556C185868EC0C08F8F8B8B8A8A8A8888888A691B72 + 00000000000000000034166FBF37533F4163C2C0C08F8F8D8B8A8A88888A6A25 + 6D0000000000000000341773CA3F533BBC38C8CBC8C2C2C28F8F8F8D8A8A8869 + 22000000000000000034187FD3366180613BBDD5D5D5C8C2C2C2C08F8F8F4619 + 000000000000000000341BB7D652EAEA7A0AC78305386283BCC1CBC2C2465800 + 000000000000000000341CC4DA3F5378B838B8D65D350401080E4B7BBE220000 + 000000000000000000341DCFF8F8DAC5784BC7EEEEEADBC77E4B0E12BF190000 + 000000000000000000341DD7F0C5D2EEF8F3F3F3F0F3EEEEEAEAD6C7D4240000 + 000000000000000000341ED8EB426537525DD2F8F8F3F8F3F3EEEEEEDA2B0000 + 0000000000000000003443E7EB61BA39E8B8C5F8F8F8F8F3F8F3F3F3EE340000 + 0000000000000000003444E7EC4060C55F82B9FACDD1E8ECF8F4F8F8F35B0000 + 0000000000000000002C44EBEC4AF0FCBB3782FA070935384B70B9CDEC7D4F00 + 0000000000000000002344EBF060D8E6EC7B76FAD8B9774D3C3506044CC43300 + 0000000000000000002347EBFAC37B7B614178FAFCFCFAFCF7EFD8CED8E63400 + 0000000000000000002349F2FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAF92800 + 0000000000000000002355E5E3F6FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC2800 + 0000000000000000002399E49B9A9697A8ACDCE0E3F5F6FBFCFCFCFCFCFC3400 + 00000000000000000023B0E4A49E9E9E9EA09E9EA0A2A2A3A9B3DCE1F6FC6D00 + 00000000000000000023B0E4AB9E9E9E9EA0A0A0A0A0ADADADADAFAFAFAD9375 + 00000000000000000023A4E4DFAA9F9E9E9E9EA0A0ADA0ADADADAFAFAFAF9559 + 000000000000000000239FDDDEDEE2DFDDB5B4B2B1B1B1B0B0AEADADAFAF9811 + 0000000000000000002492919190949494A69D9D9D9D9D9CA1A1A1A3A3A4A70C + 0000000000000000000031313131343434342C23242311101010102E2D0B2874 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FFFFFFFFFC1FFFFFF801FFFFF8003FFFF80003FFF80000FFF800007F + F800003FF800000FF8000007F8000007F800000FF800001FF800003FF800003F + F800003FF800003FF800003FF800003FF800001FF800001FF800001FF800001F + F800001FF800001FF800001FF800000FF800000FF800000FF800000FFC00000F + FFFFFFFF28000000300000006000000001000800000000000009000000000000 + 000000000001000000010000000000007B5E550062647200627D7500854F0000 + 8B550100925B0000B8500E00B8511000976000009B6300009F6800009F6F1E00 + A26A0000A36D0B00AB730700B27A0500A06D1800AB761400AD781600A2701F00 + AF7D1E0093593900B45D2800BF652600B5602900BA642A00BE6B2C00A8792C00 + B07E2300B86E3900AA7B3300C34D0100C3500600CA550500CC580600C4550C00 + C8560800CF5C0800C7591100D7670C00CF651300C5611B00D26B1A00D6741F00 + E4781200CB642100C16E2E00C86B2A00C3712F00DA7B2500CF6F3100C5743000 + CA7A3200CE7D3800D3773800875B470093714100A8734F00AF7F5800B37E5100 + CF7D4600D27A4100BB830700B5811C00BA871F00B4812500B9862500BC8A2700 + BD8D2D00BF902F00AF843C00BD8E3400B5893C00B98E3C00BF923900C0891000 + ED831600DE832B00C4952F00DC833200C4973B00EE962900E5923600CEA13F00 + B58D4800B3805700BF865100BB95550094856100B78B6000BE8D6200BF976900 + CB814100CB874800D88F4900C69A4400DB944400D6855100C89E5300C69F5E00 + CE995A00E79F4600E29D4B00E2975400CEA64F00D0A14900CBA45A00D1A45100 + D3A85400D3AB5B00DEA85900F0A94900F4B04E00E4A25E00F8B85300F3BC5F00 + FBBF5900CE9A6000DA906100DC9B7100CCA76100D2AB6500D5B06500DCB36700 + D5B16B00DAB56D00CEA27400C8A97300CBAE7A00D1AE7400D4AB7E00CFB07600 + D4B47500DBBB7700D1B37C00DABC7C00E6A56100E4B06000E4B26900E3BA6D00 + F0B66E00E2A27400E0B77000E3BE7C00F3B97800FFC75F00DEC17E00FCC66100 + FFC86300FFCB6B00FFCE7300FACD7E00FFD07B001078BD00316EA8002570B600 + 007ACF001075C7000078DF004197AC00769AB3000087DF000095DF002090D700 + 0D80E100009EEB00009BFF002697ED003395E70000A2EF0000B5EF0000A8FE00 + 00B7FE0033ADEF0026AFFF0026B7FF0033BFFF00408DCF004093D3005097D300 + 40A8DF0070AADB00409FE90040AEE3004CB4E30046BAFF0066B3EF0000C0EF00 + 15D0E90000C7FE0000D4FE0033D1FF004DC5FF0040D1FF0066CBFB0073CEFF00 + 66D7FF0066E0FF00D4AC8300D8BB8500E1A68000E2B28F00E2B69900DDC08000 + DEC79B00E7C68800F4CC8100F0C08B00F0CC8D00FECB8F00FFD38300F3D08F00 + FFD68A00FFD88F00E5CA9400F0C29100E6D09F00FFD99300F8D69900FEDC9B00 + DFCBA800E9CDA800F4CFA400E8D3AB00F1D7A700FFDEA100F0CFB400E9D7B800 + FFE0A500FFE1AA00EFE0BF00FDE5BA0080B3DF008FBDE30080C1E7009FC6E700 + 8CD3FF0099D2F800AFD0EB00BFD9EF00A6DCFF008CE0FF0099E2FF00B3E4FF00 + FDEAC700EFE1D400FEEED100FEF2D900CCEAFD00DFECF700CCF0FF00FEF6E600 + E6F0F900FFFDFB00000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000C92020337800000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000202A5E302420203E000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000003E202A878787765E2A20202762C90000000000000000000000000000 + 00000000000000000000000000000000000000002020173B5A5C8F9294746632 + 2920202062000000000000000000000000000000000000000000000000000000 + 000000002020173A3A3C9292929292929292704E29202033C900000000000000 + 00000000000000000000000000000000000000002020173A3A6F929292929292 + 929292929273532B20202A620000000000000000000000000000000000000000 + 000000002020173A3C9292929292929292929292929292949467372A20202E77 + 00000000000000000000000000000000000000002020173A6595959492929292 + 92929292929292949492928A571E18242E000000000000000000000000000000 + 000000002020173A8B97969695959592929292929292929292929292926F3C19 + 20000000000000000000000000000000000000002020173A98D3D39797969696 + 95959292929292929292929292929261252A0000000000000000000000000000 + 0000000020201956D5D3D3D3D3D3979797969695959492929292929292929292 + 732C20620000000000000000000000000000000020251A5BDCCFDAD5D3D3D3D3 + D3979797969695959592929292929292929253252E0000000000000000000000 + 0000000020231B7FE26C0D436A8CD6D5D3D3D3D3D39797969696959592929292 + 92929271292A000000000000000000000000000020261B83E66D417C48130B42 + 6AD6D5D3D3D3D3D3979797969695959492929292732920000000000000000000 + 0000000020261BC7E86D45D1136CD48F0BDCDCDADAD5D5D3D3D3D39797979696 + 9595959295922B3E000000000000000000000000202634DEE86E0F0F4B0F8FE6 + 09CEDCE2DCDCDADAD6D5D3D3D3D3D39797969695702B20770000000000000000 + 00000000212831DEF57C0F6CE8CE0ED10ECEE6DCE2E2E2DCDCDADADAD5D3D3D3 + D3D39750212E0000000000000000000000000000202834E0F57B48F5F5F57D13 + 1DCEE86B06426390DBE2DCDCDCDADAD5D3D35021C90000000000000000000000 + 00000000202835E4F77D43F5F5F5F5600BD7E86B090606060614497BD1DCDCDC + DA8D200000000000000000000000000000000000212D34FCF8D7100F40517DD9 + 0E60F5F5D77949110605050504051F7BE2682000000000000000000000000000 + 00000000202837FCF8F8F8E7D77D480F0D6BF5F5F5F5F5E8E1CC641C0505041C + E668200000000000000000000000000000000000202D37FCFCFCFCF8FCF8F8F8 + E7F5F8F7F5F7F5F5F5F5F5E8F5D18155E8682000000000000000000000000000 + 00000000202D35FEFCD77BCCE0F7FCFCF8F8F8F8F8F7F7F7F7F5F5F5F5F5F5E8 + E8D0200000000000000000000000000000000000202D37FCFE863F51100F104B + 7AE0FCF8F8FCF8F8F7F7F7F7F5F5F5F5F5D82000000000000000000000000000 + 00000000202D61FEFC8851FECE86E4854B85FCFCFCF8FCF8F8F8F8F7F8F7F7F7 + F5DF200000000000000000000000000000000000214D72FEFE8854D7100FE7FC + 8785FCFCFCFCFCFCFCFCF8F8F8F8F7F7F7F721C9000000000000000000000000 + 00000000202D72FEFE884C106E863FE7866BFEFCFCFCFCFCFCFCFCFCFCF8F8F8 + F8F724C900000000000000000000000000000000204D89FEFE883F6DFEFE7A48 + 7D4BFEFC0E424987C8E0F6FCFCFCFCFCF8FC373E000000000000000000000000 + 00000000204D89FEFE884FFEFEFEFE450F51FEFE0F0D0D0B0B0B090B1C5580C8 + E4FC3E35000000000000000000000000000000C9204D89FEFECE54FEFEFEFEFC + 4145FEFECD864A4A0B0B0B060906090606FC8E20000000000000000000000000 + 000000C9204D89FEFE883F4C54698886C810E4FEFEFEFEFEFEFCE4DD8158470C + 06FCCA20000000000000000000000000000000C9204D91FEFEFCE7D9887E6060 + 1045FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE320000000000000000000000000 + 000000C9204DD2FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFEFEFC + FEFCF620000000000000000000000000000000C9214DD2FEFEFEFEFEFEFEFEFE + FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE21C90000000000000000000000 + 000000C92052A1FDE9F0F0FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE + FEFEFE303E0000000000000000000000000000C9219AC3F9A2A29D9D9EB2B4E9 + ECF0FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3E350000000000000000000000 + 000000C920BEC6F9B0ACACACADACACAAA6A3A29DA4B3B6E9EFF0FEFEFEFEFEFE + FEFEFE78200000000000000000000000000000C920BEC6F9BAACACACACADACAD + ADADBEBEBEBEBEBEAAABA3A3B8B8EBEAF0F9FECB200000000000000000000000 + 000000C920BEC3F9C3A7ACACACACADACADADACADADBEADBEBEBEBFBEBFBFBFBF + BFBCBCA0200000000000000000000000000000C920ADC3F9F1A7ACA7ACACACAC + ADACBEADADADBEADBEBEBEBEBFBEBFBFBFBFBFBD200000000000000000000000 + 000000C920ACC3F9F9EDBAAFACACACACACADACADADADADBEBEBEBEBEBEBEBFBF + BFBFBFBF087800000000000000000000000000C920ACC4F9F9F9F9F9F9F4F3C4 + C3C1B1B0ADADADADADBEBEBEBEBEBEBFBFBFBFBF393E00000000000000000000 + 000000C920A7A8A9A9A9A9BBBBBBBBBBEEEEEEEEEEF9F3F3F2C3C3C2C0C0BFBE + BEBFBFBF032100000000000000000000000000002002020202029B9B9B9B9B9B + 9C9F9F9F9F9F9F9F9FA5A9A9A9A9B7BBBBAEAEB9592100000000000000000000 + 000000003E212020202020202020202020202020202020081616161616160102 + 0202382121770000000000000000000000000000000000000000000000000000 + 0000C9C9C9C9C9C9773E3E3E3E3E3E2721212E78000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFFFFFFFFFFF0000FF83FFFFFFFF0000FF807FFF + FFFF0000FF0003FFFFFF0000FF00007FFFFF0000FF000007FFFF0000FF000000 + FFFF0000FF0000000FFF0000FF00000007FF0000FF00000007FF0000FF000000 + 03FF0000FF00000000FF0000FF000000007F0000FF000000003F0000FF000000 + 001F0000FF000000000F0000FF000000000F0000FF000000003F0000FF000000 + 007F0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000 + 01FF0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000 + 00FF0000FF00000000FF0000FF00000000FF0000FF00000000FF0000FE000000 + 00FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000 + 007F0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000 + 007F0000FE000000007F0000FE000000007F0000FE000000003F0000FE000000 + 003F0000FE000000003F0000FF000000003F0000FF000000003F0000FFFFFC00 + 00FF0000FFFFFFFFFFFF00002800000010000000200000000100200000000000 + 4004000000000000000000000000000000000000000000000000000015080003 + AF4D0CA383380684411A003E1508000500000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000006C2B015A + BB672DFFCA9E65FFEAA54AFFDF862EF4BC6218BF83360378411A002C00000000 + 000000000000000000000000000000000000000000000000000000008234016A + B45D28FFE3AD5BFFFFC75FFFFFC75FFFFFC75FFFFBBF59FFE89D41FFCF7428E4 + 96430D9F2B11001E00000000000000000000000000000000000000008234016A + B66129FFFBCD7BFFFFCD72FFFFCA69FFFFC862FFFFC75FFFFFC75FFFFFC75FFF + E6AA53FFB6560EB22B110015000000000000000000000000000000008234016A + C67436FFE1B869FFDAAD59FFE6B865FFFFD381FFFFCF76FFFFCB6CFFFFC964FF + FFC760FFFCC15AFFD87822E2411A00310000000000000000000000008234016A + D28646FFD6AF64FFCCA251FFCA9E4DFFF9D797FFFFDB97FFFFD78EFFFFD484FF + FFD079FFFFCC6FFFE7973CFB6E2E036A0000000000000000000000008234016A + DB9456FFDBBA77FFE6C78DFFC59C4EFFE7C890FFB0812FFFB48536FFC99E55FF + E3BB75FFE8A45BFF411A0037000000000000000000000000000000008234016A + E3A265FFF7E8CBFFEFDBB4FFE2C897FFF8E6C4FFFFEDCCFFF9E4BDFFE1C491FF + CAA66BFFE39D5EFF15080005000000000000000000000000000000008234016A + E9AC71FFDFC388FFCBA24FFFD5B577FFF2E3C4FFFFF4E0FFFFF2DBFFFFF0D5FF + FFEECFFFE8AF7DFF411A001C000000000000000000000000000000008234016D + EFB67BFFDEC284FFE8D5ACFFCEAA61FFEBDAB8FFC6A159FFD1B37CFFDDC499FF + ECD9B9FFEBC29DFF411A003A000000000000000000000000000000008234017F + F2BA7FFFE8D4A6FFE1C891FFD5B571FFE5D2AAFFEEE2CCFFE1CDAAFFD0B686FF + C09E65FFDEBF9AFF6C2B015F000000000000000000000000000000008234017F + E7C091FFE2EEF7FFFFFFFFFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFCFFFFFDFBFF + FFFDF9FFFDF9F3FF82370684000000000000000000000000000000008234017F + 67CFF5FF0B9DF2FF089DEEFF28ACEFFF4ABAEFFF6CC8F1FF8BD4F3FFB1DFF4FF + CFE6F4FFF2F7FAFF9F5627A8000000000000000000000000000000008234017F + 66CFFFFF4CBCFFFF04A7FFFF00ADFFFF00B4FFFF00BBFFFF00C2FFFF00CAFFFF + 00D1FFFF00D1FBFF8A744CCD000000000000000000000000000000008234017D + 4E96CCFF70A2CDFF73ADDCFF5FA9DFFF45ADF1FF38AFF3FF2DB2F4FF29BAF7FF + 1FBFF8FF16C6F9FF758671F7000000000000000000000000000000002B110017 + 411A0055411A00558234016A8234016A8234017A8234017F76360F8A72371394 + 6A391D9A663A21A66C2B015F0000000000000000C1FF0000C03F0000C0070000 + C0030000C0010000C0010000C0030000C0030000C0030000C0030000C0030000 + C0030000C0030000C0030000C0030000C0030000280000001800000030000000 + 0100200000000000600900000000000000000000000000000000000000000000 + 00000000000000000000000031130020C44E028F622701573113001400000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000C44E02B7C87E3FFFCB8A4BFFC86D29FFC45208CB + 933A01876227014B311300100000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000006227011CC24B01FFAF6B3DFFB4845AFFF7C363FFFAC360FF + EFAA4AFFE49034FFD5721DFFC65306C7933A017B622701300000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000062270120C24B01FFAE683BFFCE9856FFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFDC35CFFECA244FFD97F2CFFC75E15E7C44E02A3 + 6227015F3113000C000000000000000000000000000000000000000000000000 + 000000000000000062270120C24B01FFAE683BFFECB866FFFFC966FFFFC861FF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFF8C15FFFD59850FF + BA662BFF933A017B000000000000000000000000000000000000000000000000 + 000000000000000062270120C44E02FFB26D3EFFFDD384FFFFD17EFFFFCF77FF + FFCC6FFFFFCA68FFFFC863FFFFC760FFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + F6BA58FFD6741FFB933A017F3113000400000000000000000000000000000000 + 000000000000000062270120C75203FFC07E4BFFF1CA82FFD6A850FFEDC271FF + FFD587FFFFD280FFFFD079FFFFCD72FFFFCB6AFFFFC964FFFFC760FFFFC75FFF + FFC75FFFFFC75FFFE8973AFFC65306BF31130018000000000000000000000000 + 000000000000000062270120CA5605FFC98B56FFE9C683FFCFA34FFFB9882BFF + C99B48FFD9AD5CFFFFD890FFFFD589FFFFD382FFFFD17BFFFFCE74FFFFCC6DFF + FFC966FFFFC861FFFFC75FFFF2AC4AFFC75507C7000000000000000000000000 + 000000000000000062270120CC5906FFD59D6AFFE9CB90FFB4801AFFD3AC62FF + DBB46CFFC49744FFFDDDA1FFFFDD9EFFFFDB98FFFFD892FFFFD68CFFFFD485FF + FFD17EFFFFCF77FFF6BA5FFFD26C1AF7933A017F000000000000000000000000 + 000000000000000062270120CF5C07FFD7A272FFEACF9BFFDDBA77FFFFEBC6FF + D1AB64FFC79C4EFFE5C489FF9C660AFFB38433FFCA9F56FFE1BB76FFFBD795FF + FFD994FFFBCE85FFC95A0EDB3113002000000000000000000000000000000000 + 000000000000000062270120D15F08FFE3B68BFFF7E7C7FFD4B06AFFCBA456FF + C89F50FFB5852CFFFFEBC7FFEBD09FFFD4B275FFBA904AFFA17023FF895302FF + A87830FFF0BA7BFF6227017F0000000000000000000000000000000000000000 + 000000000000000062270120D36109FFE4BA91FFF8EBD1FFECD6AAFFF8EACEFF + FFF3DDFFFAEBCFFFFFF0D5FFFFEFD1FFFFEDCDFFFFECC9FFFFEAC4FFF9E2B7FF + E2C490FFF4C994FF933A018B0000000000000000000000000000000000000000 + 000000000000000062270120D5630AFFE8C19AFFEDDAB4FFD1AC5DFFC59A42FF + CCA65BFFD2B06EFFFFF4E1FFFFF3DEFFFFF2DAFFFFF0D7FFFFEFD2FFFFEECEFF + FFECCAFFF8DAB0FFC44E029F0000000000000000000000000000000000000000 + 000000000000000062270120D6650BFFF1D0ACFFEDDDB9FFC89A38FFC39535FF + E5CEA0FFD2B070FFFFF8EBFFFFF7E9FFFFF6E6FFFFF5E2FFFFF4DFFFFFF2DCFF + FFF1D8FFFFF0D4FFC34E03BF0000000000000000000000000000000000000000 + 000000000000000062270128D7670BFFF2D1AFFFEEDEBCFFD5B161FFFFFCF8FF + D2B16CFFC09439FFFFFBF3FFA9730BFFB2832CFFBD954CFFC8A76CFFD7BC8FFF + E6D3B1FFF9EDD6FFCA631FE30000000000000000000000000000000000000000 + 000000000000000062270140D8680CFFF3D2B0FFEFE0BEFFD2AA53FFE5D0A1FF + EBDBB8FFBF9133FFFAF4E9FFEBDDC2FFDCC59AFFCDAE77FFBE9958FFAD8135FF + 9C6A16FFC7A875FFD37C41FF3113000800000000000000000000000000000000 + 000000000000000062270140D9690CFFFBE0C1FFFDFBF7FFF4EBD7FFECDDBBFF + E3CD9FFFDCC28AFFFFFEFDFFFFFEFCFFFFFDFBFFFFFDF9FFFFFCF8FFFFFCF6FF + FFFBF5FFFFFAF2FFD99363FF6227012C00000000000000000000000000000000 + 000000000000000062270140D96E11FFD6D5CEFFCFE2F3FFEFF5FBFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFCFFFFFDFBFF + FFFDFAFFFFFCF8FFE2AC88FF6227014F00000000000000000000000000000000 + 00000000000000006227014066766FFF99E0FAFF099AEFFF0091E7FF1498E5FF + 34A5E6FF57B3E8FF77BEE9FF97C8EAFFBBD6EEFFDBE9F6FFFFFFFEFFFFFEFEFF + FFFEFDFFFFFEFCFFEAC6ADFF6227017300000000000000000000000000000000 + 000000000000000062270140628780FF99E2FFFF29B1FFFF00A6FFFF00ABFFFF + 00B0FFFF00B5FFFF00B9FFFF00BEFFFF00C0FDFF00BCF7FF00B3EFFF20BEF0FF + 43CAF2FF63D3F2FF88C3CCFFC44E029700000000000000000000000000000000 + 000000000000000062270140627E80FF99DDFFFF7FCEFFFF1CABFFFF00A5FFFF + 00AAFFFF00AFFFFF00B4FFFF00B9FFFF00BEFFFF00C2FFFF00C7FFFF00CCFFFF + 00D1FFFF00D6FFFF05D7F9FFC14E05BF00000000000000000000000000000000 + 000000000000000062270140627580FF66B8F4FF7FBFF3FF8CC7F5FF92CDF7FF + 76C3F7FF79CCFBFF62C7FBFF59CBFDFF4CCEFFFF3CCDFFFF29CCFFFF19CCFFFF + 03CCFFFF00D0FFFF00D5FFFF9F622EEF00000000000000000000000000000000 + 000000000000000062270120AB5520EF935839FF935839FF7A5E55FF7A5E55FF + 7A5E55FF6B6166FF626370FF626370FF5F6374FF4C6A8CFF637890FF637890FF + 6085A7FF578AB0FF728286FFB85B19E700000000000000000000000000000000 + 0000000000000000000000000000000000000000000000003113001062270120 + 6227012062270124622701406227014062270140622701576227015F6227015F + 6227016B6227017F6227015B3113000C000000000000000000000000F0FFFF00 + F00FFF00E001FF00E0001F00E0001F00E0000700E0000300E0000300E0000300 + E0000700E0000F00E0000F00E0000F00E0000F00E0000F00E0000700E0000700 + E0000700E0000700E0000700E0000700E0000700E0000700FE00070028000000 + 2000000040000000010020000000000080100000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000006C2B0143 + C44E0266411A003D411A00210000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000005722000EC45207E2 + C76B26FFC65D15E7C44F03CB8234019B8234015C572200150000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000015080005983C0192C1530CFF + C28B56FFC8A775FFD1A56BFFDA9142FFD57726FFCE6515FBC85809D7C44E029C + 6C2B0163411A0033411A00130000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0013C44E02BDBC4F0EFF + AD6E44FFB07E56FFE0AD60FFFEC65FFFFBC45FFFF5B553FFF0A847FFE8983AFF + D97923FFC85809DDC44E02BD8234017882340138000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFBC4F0EFF + AC6B42FFC08A53FFF7C05DFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFDC35CFFF1AC4AFFDC832DFFD06C1DFFC65A10E6C45004AD983C015F + 411A003C2B11000A000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFBC4F0EFF + AC6B42FFD8A25BFFFFC761FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFEC65FFFF8BD5BFFE7A64EFFC97E3CFFBD6122FB + C2570FE68234016D000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFBC500EFF + AC6C42FFF1C172FFFFCE73FFFFCC6CFFFFCA68FFFFC863FFFFC761FFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFDFA959FF + C57E3DFFC44F03C86C2B012F0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFC05510FF + B17246FFFDD486FFFFD383FFFFD17DFFFFD078FFFFCD72FFFFCC6DFFFFCA67FF + FFC863FFFFC760FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + F7BB59FFE0872DFDC85608D6823401512B110003000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFC55B11FF + C08453FFF7D28CFFE3B766FFEABE6DFFF4C97AFFFFD485FFFFD281FFFFD17BFF + FFCF77FFFFCD70FFFFCB6BFFFFC966FFFFC862FFFFC760FFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFF3AF4CFFD16917F7C55003982B1100150000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFC85F13FF + CA9360FFF0CD8BFFBB8929FFCC9E49FFC08F34FFC29137FFD7A955FFFFD68BFF + FFD586FFFFD280FFFFD17CFFFFCF75FFFFCD71FFFFCB6BFFFFCA66FFFFC862FF + FFC760FFFFC75FFFFFC75FFFF6B551FFD6731EFBAE45019C2B11001500000000 + 0000000000000000000000000000000000000000411A0015C44E02BFCC6415FF + D19D6DFFF0D298FFC19133FFCC9F4BFFBD8D31FFEBC682FFB5842BFFFAD795FF + FFDB98FFFFD993FFFFD78EFFFFD689FFFFD484FFFFD27FFFFFD07AFFFFCE74FF + FFCC6FFFFFCA69FFFFC965FFFDC45EFFF3AF4DFFCA5B0CE6411A003C00000000 + 0000000000000000000000000000000000000000411A0015C44E02BFCF6816FF + DCAD7EFFF0D5A1FFB88622FFCFA657FFDAB570FFCCA04FFFBB8D38FFEFCE8FFF + FCDCA0FFFFDEA0FFFFDD9CFFFFDA97FFFFD993FFFFD78EFFFFD689FFFFD484FF + FFD27FFFFFD079FFFFCE74FFE18C36FFCC5E0FF0983C01751508001100000000 + 0000000000000000000000000000000000000000411A0015C44E02BFD26D18FF + DCB186FFF1D9ABFFC69941FFFDE9C4FFFFEAC4FFD3AE69FFAD7A1CFFEED099FF + DCB979FF9B6609FFB1812EFFCCA159FFDCB470FFE9C481FFF6D28FFFFFDA96FF + FFD891FFFDD388FFDF8D40FFAE4501A62B11001C000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFD5701AFF + E7C39EFFF3E0B9FFC39438FFC79C47FFD3AD65FFDFBF83FFB6872FFFDFBE81FF + F3DAABFFC49C55FFAE802FFF97620AFF935D06FF9C6A19FFA7772AFFB98C44FF + D7AE6AFFF6C885FFCF691FFF2B11001800000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFD8741BFF + EDCDACFFFFF4E1FFFFF3DEFFF4E2C0FFE5CC9BFFCEAA63FFC09545FFE6CB99FF + FFEDCDFFFFECC9FFFFEBC6FFFBE5BDFFECD1A0FFD2AF74FFB78D49FFA4762EFF + A67731FFF5C98FFFCE661DFF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFDA771CFF + EDCFB1FFF8ECD4FFE6CC98FFEBD5A9FFF8EACEFFFFF3DEFFFCEED5FFFDF0D6FF + FFF0D6FFFFEFD3FFFFEED0FFFFEDCCFFFFECCAFFFFEBC5FFFFEAC3FFF5DCAFFF + EACE9DFFF8D5A3FFD16F2AFF5722001500000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFDE7C1FFF + EFD3B7FFF3E4C7FFC79B3BFFD0AC5FFFBD8D2AFFC59B47FFC8A052FFEBD7AFFF + FFF4E0FFFFF3DDFFFFF2DAFFFFF1D8FFFFF0D5FFFFEFD2FFFFEECFFFFFEDCBFF + FFECC9FFFADEB6FFD37633FF8234012A00000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFE5862AFF + F4DCC3FFF3E6CBFFCFA751FFDEC288FFBF8F2AFFEFDFBFFFD9BC83FFE2CA9BFF + FFF6E7FFFFF6E4FFFFF5E2FFFFF4E0FFFFF3DDFFFFF2DAFFFFF1D8FFFFF0D5FF + FFEFD2FFFDEACAFFD67F41FF8234014700000000000000000000000000000000 + 0000000000000000000000000000000000000000411A0015C44E02BFE78A2DFF + F6DFC8FFF3E8CFFFC79730FFCBA044FFE3CC9DFFC8A04CFFD7B97EFFD9BD85FF + FFF9EEFFE2CBA0FFE6D2ACFFEFE0C3FFF4E7CEFFFCF1DDFFFFF4E2FFFFF3DFFF + FFF3DCFFFFF2D9FFDA8E57FF8234016300000000000000000000000000000000 + 0000000000000000000000000000000000000000411A001CC44E02C6E98C2EFF + F6E0C9FFF3E9D2FFCCA03EFFF5EBD7FFFFFCF9FFDEC592FFBB8B27FFD5B77AFF + FFFBF4FFA9730AFFA87410FFAF8028FFB38635FFB88E46FFC19E60FFD1B585FF + E0CAA4FFF5E7CEFFDFA375FF8234018600000000000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D4EB8E2FFF + F7E1CAFFF4EAD3FFD0A546FFEBD9B3FFEEDFC0FFF1E6CDFFD2B06CFFCDAA60FF + FCF8F1FFE6D4B3FFD6BB89FFCAAA6DFFBC954EFFB2883BFFAB7D2DFFA06E1AFF + 97630DFFB48D4DFFEBC2A1FF983C01AD15080003000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D4EE9334FF + F9E5CFFFF9F4E9FFE4CB94FFD8B76DFFD5B266FFCEA754FFC49638FFCFAB62FF + FCF9F4FFFFFDFAFFFFFDF9FFFFFCF8FFFDFAF4FFF5EEE0FFEFE5D1FFE7D8BEFF + E0CEAFFFE6D6BBFFF1D6BFFFC44E02BB411A0011000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D4F49C3FFF + FEEDD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFF + FFFEFEFFFFFEFDFFFFFEFCFFFFFEFCFFFFFDFBFFFFFDFAFFFFFDF9FFFFFCF8FF + FFFCF7FFFFFBF5FFF7EFE6FFC34E03D1411A0027000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D4D5994FFF + D5DCDFFFB8D4EDFFD4E5F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFEFFFFFFFEFFFFFFFEFFFFFEFDFFFFFEFDFFFFFEFCFFFFFEFCFFFFFDFBFF + FFFDFAFFFFFCF9FFFFFCF8FFC55A15E2411A0038000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D429A8DDFF + AAE2FAFF0894E9FF008BE2FF0389DDFF2093DDFF40A2E0FF63B4E7FF86C5EBFF + A2D1EFFFB8DAF1FFCAE0F2FFD9E8F5FFE7F1F9FFFFFFFEFFFFFFFEFFFFFEFDFF + FFFEFDFFFFFEFCFFFFFEFBFFCE753BF4411A004A000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D422CDFEFF + AAE6FFFF24B0FFFF00A6FFFF00AAFFFF00AEFFFF00ADFBFF00ADF8FF00ABF4FF + 00A8F0FF0EB0F1FF20B8F2FF2FB8EEFF3DBDEEFF55BBE9FF71C4EBFF8DCAEBFF + B1D3ECFFD7E7F4FFF4F8FBFFD68D5EFF983C0163000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D422C2FFFF + AAE3FFFF52BEFFFF00A2FFFF00A6FFFF00A9FFFF00ADFFFF00B0FFFF00B4FFFF + 00B8FFFF00BBFFFF00BFFFFF00C3FFFF00C6FFFF00CAFFFF00CEFFFF00D1FFFF + 00D5FFFF00CFF9FF00C8F4FF628B80FFC44E028A000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D422B8FFFF + AAE1FFFF9ED9FFFF41B7FFFF10A8FFFF00A5FFFF00A9FFFF00ADFFFF00B0FFFF + 00B4FFFF00B8FFFF00BBFFFF00BFFFFF00C2FFFF00C6FFFF00CAFFFF00CDFFFF + 00D1FFFF00D5FFFF00D8FFFF43AAA8FFC14E04AD000000000000000000000000 + 0000000000000000000000000000000000000000411A002AC44E02D41DA7FDFF + 83C7F7FF99CDF7FF99CEF7FFAAD8F9FF9ED5F9FF7FCAF9FF74CAFBFF60C7FCFF + 4FC4FCFF38C1FDFF38C7FFFF31C8FFFF26C8FFFF1DC9FFFF12C9FFFF0CCCFFFF + 01CCFFFF00D0FFFF00D4FFFF2BB6C5FFAE5B1CE2000000000000000000000000 + 0000000000000000000000000000000000000000411A0027C44E02D14578A2FF + 507399FF527398FF3C78B0FF4284BFFF4284BFFF4284BFFF488CC7FF3395E7FF + 3395E7FF3899E7FF389CE9FF319BE9FF2C9CEAFF3FACEFFF34AAEFFF31ABEFFF + 3DB8F3FF38BCF4FF22B9F4FF4DAAC0FFAE5F23FF000000000000000000000000 + 00000000000000000000000000000000000000002B11000382340158823401AA + 823401AA823401AA823401AAC44E02BFC44E02BFC44E02BFC44E02BFC44E02CA + C44E02D4C44E02D4C44E02D4B35114D8A35526E6A35526E9A35526E99E562CE9 + 885A45F4825C4CFF935839F7C44E02CF983C0184000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000411A0015411A0015411A0015411A0015411A0020 + 411A002A411A002A411A002A411A002E411A003C411A003F411A003F411A003F + 411A004A411A0055411A004D411A002515080005000000000000000000000000 + 00000000FC3FFFFFF807FFFFF0003FFFF0000FFFF000007FF000007FF000003F + F000000FF0000007F0000003F0000003F0000003F000000FF000001FF000003F + F000001FF000001FF000001FF000001FF000001FF000000FF000000FF000000F + F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000F + FFC0000F28000000300000006000000001002000000000008025000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000C44E0230C44E021000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000C44E0280C44E02FFC44E02FFC44E02CF + C44E028FC44E0250000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000C44E0220C44E02FFC56019FFCB8748FFC86E29FF + C5540AFFC44E02FFC44E02FFC44E02BFC44E0270C44E02300000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000C44E02BFC44E02FFC3621FFFD0B27DFFD0B37EFF + D1B37EFFCE9A60FFCB8141FFC7611AFFC44E02FFC44E02FFC44E02EFC44E02AF + C44E0280C44E0240000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0230C44E02FFC14A01FFB45D28FFAF7F58FFB78B60FF + BF9769FFE0B770FFFFC75FFFF9C563FFF3BC5FFFE79F46FFDA7B25FFCF6513FF + C44E02FFC44E02FFC44E02FFC44E02AFC44E0270C44E02200000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFA8734FFF + B37E51FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFF0A948FFDE832BFFCF6513FFC44E02FFC44E02FFC44E02CFC44E0280 + C44E024000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFA8734FFF + DEA859FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFF8B853FFE59236FFD06B1CFFC44E02FF + C44E02FFC44E02EFC44E02AFC44E0270C44E0220000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFB37E51FF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFAC564FF + E29D4BFFCE7D38FFC7621AFFC44E02FFC44E02FFC44E02DFC44E029FC44E0230 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFCE995AFF + FFC965FFFFC862FFFFC760FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFE4B060FFBF8651FFB86E39FFBF6526FFC3570FFFC44E02DF + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFE4B269FF + FFCE72FFFFCC6EFFFFCB6AFFFFCA66FFFFC863FFFFC861FFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFDEA859FFB37E51FFB66129FFC44E02FF + C44E021000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC34D02FFB56029FFA8734FFFFACD7EFF + FFD27EFFFFD07AFFFFCF76FFFFCE73FFFFCD6FFFFFCB6BFFFFCA68FFFFC964FF + FFC861FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFDB9444FFC85608FF + C44E02EFC44E0250000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFC65004FFB8622AFFB38057FFFFD78CFF + FFD689FFFFD586FFFFD382FFFFD27FFFFFD17BFFFFD078FFFFCE74FFFFCD70FF + FFCC6DFFFFCB69FFFFC965FFFFC862FFFFC760FFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFF8B853FF + D6741FFFC44E02FFC44E02AFC44E021000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFCA5505FFBA652BFFBE8D62FFFFDB97FF + F4CC81FFFFD891FFFFD78DFFFFD68AFFFFD587FFFFD483FFFFD380FFFFD17CFF + FFD079FFFFCF75FFFFCE72FFFFCC6EFFFFCB6AFFFFCA66FFFFC863FFFFC861FF + FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFE59236FFC85608FFC44E02DFC44E0230000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFCC5806FFBC672BFFCEA274FFFFDEA1FF + D2A550FFA46C00FFB98625FFD0A149FFE7BC6CFFFFD88FFFFFD68BFFFFD588FF + FFD485FFFFD381FFFFD27EFFFFD07AFFFFCF76FFFFCE73FFFFCD6FFFFFCB6BFF + FFCA68FFFFC964FFFFC861FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF + FFC75FFFFFC75FFFF4B04EFFCF6513FFC44E02EFC44E02600000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFCF5C08FFBD6A2CFFD4AB7EFFFFE2ABFF + D3A854FFB6831FFFDCB367FFBE8E33FFAB7614FF9D6500FFB48125FFCC9D48FF + FFD890FFFFD78CFFFFD689FFFFD586FFFFD382FFFFD27FFFFFD17BFFFFD078FF + FFCE74FFFFCD70FFFFCC6DFFFFCB69FFFFC965FFFFC862FFFFC760FFFFC75FFF + FFC75FFFFFC75FFFFFC75FFFFBBF59FFCF6513FFC44E02FFC44E026000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFD26009FFBF6C2DFFD4AC83FFFFE5B4FF + D4AA59FFBD8B2BFFEECC8BFFAE7915FFD0A452FFF3D08FFFE0B86FFF9A6300FF + FFDC9AFFFFDB97FFFFDA94FFFFD891FFFFD78DFFFFD68AFFFFD587FFFFD483FF + FFD380FFFFD17CFFFFD079FFFFCF75FFFFCE72FFFFCC6EFFFFCB6AFFFFCA66FF + FFC863FFFFC861FFFFC75FFFFFC75FFFFFC75FFFD36C19FFC44E02BF00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFD4630AFFC16E2EFFE9CBA3FFFFE8BDFF + D4AC5DFFAE770BFFAC750BFFC09138FFA7710BFFDCB46BFFFFE1AAFF9B6400FF + ECC885FFFFDEA1FFFFDD9EFFFFDC9BFFFFDB98FFFFDA95FFFFD992FFFFD88FFF + FFD68BFFFFD588FFFFD485FFFFD381FFFFD27EFFFFD07AFFFFCF76FFFFCE73FF + FFCD6FFFFFCB6BFFFFCA68FFF0AA4BFFD36C19FFC44E02FFC44E029F00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFD7660BFFC3712FFFE9CDA9FFFFEBC5FF + D5AE62FFA97100FFCEA454FFFFE7BBFFE8C88BFFA7710BFFEDCD91FFA36D0BFF + E6C382FFFFE2ABFFF9D89DFFFFE0A5FFFFDFA2FFFFDE9FFFFFDC9CFFFFDB99FF + FFDA96FFFFD993FFFFD890FFFFD78CFFFFD689FFFFD586FFFFD382FFFFD27FFF + FFD17BFFFFD078FFDE8633FFC44E02FFC44E02DFC44E02600000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFD9690DFFC47330FFE9CFAEFFFFEDCCFF + D6B065FFC09032FFFFEBC6FFFFEAC3FFFFE9C1FFD6B16CFFAC7817FFB07E23FF + E6C589FFFFE5B4FFCBA259FF965F00FFAF7E2AFFC89E53FFE3BE7CFFF8D699FF + FFDEA0FFFFDD9DFFFFDC9AFFFFDB97FFFFDA94FFFFD891FFFFD78DFFFFD68AFF + FFD587FFDA8032FFC44E02FFC44E028000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFDB6C0EFFC67530FFE9D3BAFFFFF0D3FF + D6B269FFBC8A27FFFAE6C0FFFFEDCBFFFFECC9FFFFEBC6FFC49A4AFF9F6800FF + E7C88FFFFFE8BDFFCCA45DFF976000FF955E00FF935C00FF915A00FF8F5800FF + A2701FFFB6893EFFD3AA65FFF0CC8DFFFFDD9EFFFFDC9BFFFFDB98FFFFDA95FF + F0B66EFFC44E02FFC44E02700000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFDE6F0FFFC77631FFFFF5E3FFFFF2DAFF + E1C387FFB37C0EFFAB7200FFB4801AFFC39640FFD2AD66FFE8CC98FFA7710DFF + C3994AFFFFEBC5FFFFEAC2FFE5C791FFCAA460FFB5893BFFA06D18FF905900FF + 8E5800FF8C5600FF8A5400FF875200FF8D590AFFAA7B33FFD0A764FFFFDE9FFF + E29550FFC44E02FF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE07210FFC97832FFFFF7E7FFFFF4E0FF + FFF3DEFFFFF3DCFFF5E2BFFFE4CA95FFD4B06CFFBC8F36FFAA740DFFA26A00FF + CAA35BFFFFEDCCFFFFEDCAFFFFECC8FFFFEBC6FFFFEAC3FFFFE9C1FFF1D7A7FF + DCBB82FFC69F5EFFA8792FFF895300FF875100FF854F00FFA2722BFFFFE1A9FF + E29754FFC44E02FF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE17411FFCA7A32FFFFF8EDFFFFF6E5FF + FFF5E4FFFFF5E2FFFFF4E0FFFFF4DFFFFFF3DDFFFFF2DBFFFFF2D9FFF3E0BDFF + F9E8C8FFFFF0D3FFFFEFD1FFFFEECFFFFFEECDFFFFEDCBFFFFECC9FFFFEBC6FF + FFEAC4FFFFEAC2FFFFE9BFFFFFE8BDFFE9CB98FFD1AE74FFBA9150FFFFE4B2FF + E29959FFC44E02FF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE37611FFCB7B33FFFFFBF3FFFFF8EAFF + E3C991FFD5B065FFDDBF81FFEBD6ABFFFAEDD4FFFFF4E1FFFFF4DFFFFFF3DDFF + FFF3DCFFFFF2DAFFFFF1D8FFFFF1D6FFFFF0D4FFFFEFD2FFFFEED0FFFFEECEFF + FFEDCCFFFFECC9FFFFEBC7FFFFEBC5FFFFEAC2FFFFE9C0FFFFE8BDFFFFE7BBFF + F0C08BFFC44E02FFC44E02300000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE57812FFCC7D33FFFFFCF6FFFFF9EEFF + DBBB77FFB9830FFFC6993BFFB07700FFAE7500FFB17B0EFFBF9239FFCEAA63FF + E9D3A9FFFFF4E0FFFFF3DEFFFFF3DCFFFFF2DAFFFFF2D8FFFFF1D7FFFFF0D5FF + FFEFD3FFFFEFD1FFFFEECEFFFFEDCCFFFFEDCAFFFFECC8FFFFEBC6FFFFEAC3FF + F0C291FFC44E02FFC44E02400000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE77A13FFD88F49FFFFFCF8FFFFFBF2FF + DBBC79FFC89C3CFFFFF9EFFFE2C894FFD7B776FFEBD7B1FFD5B575FFBF923AFF + D3B373FFFFF6E5FFFFF5E4FFFFF5E2FFFFF4E0FFFFF4DFFFFFF3DDFFFFF2DBFF + FFF2D9FFFFF1D7FFFFF0D5FFFFF0D3FFFFEFD1FFFFEECFFFFFEECDFFFFEDCBFF + F4CFA4FFC44E02FFC44E02400000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE87C14FFE4A25EFFFFFDFAFFFFFCF6FF + DCBD7AFFCA9D3DFFE3CB97FFB37900FFB17800FFF0E1C2FFFFF9EEFFD5B577FF + D4B476FFFFF8EAFFFFF7E9FFFFF7E7FFFFF6E6FFFFF6E4FFFFF5E3FFFFF4E1FF + FFF4DFFFFFF3DDFFFFF3DCFFFFF2DAFFFFF1D8FFFFF1D6FFFFF0D4FFFFEFD2FF + FFEED0FFC44E02FFC44E02800000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFE97E14FFE5A35FFFFFFEFCFFFFFDF8FF + DDBE7CFFBD860FFFB77D00FFD1AB5CFFD8BA7AFFB57F0FFFF0E2C4FFD5B679FF + CAA45AFFFFF9EEFFFFF9EDFFFFF8ECFFFFF8EBFFFFF7E9FFFFF7E8FFFFF6E6FF + FFF6E5FFFFF5E3FFFFF5E1FFFFF4E0FFFFF3DEFFFFF3DCFFFFF2DAFFFFF2D8FF + FFF1D7FFC25007FFC44E02800000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E02FFEA8015FFE5A460FFFFFEFDFFFFFEFBFF + DDBF7DFFBA8000FFD3AE5DFFFFFDF8FFFFFCF7FFCEA95DFFBF8F2EFFD1AF6BFF + C1953DFFFFFBF2FFFFFAF1FFA56D00FFAF7D1EFFB88D3BFFCFB076FFD4B884FF + E6D2AFFFF2E4CBFFFFF6E7FFFFF6E5FFFFF5E4FFFFF5E2FFFFF4E0FFFFF4DFFF + FFF3DDFFD37738FFC44E02BF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0260C44E02FFEC8116FFE6A561FFFFFFFEFFFFFEFDFF + DEC07EFFC8992FFFFFFEFBFFFFFDFAFFFFFDFAFFFFFDF9FFBF902FFFAF7600FF + C1963EFFFFFCF6FFFFFBF5FFAC770FFFA46C00FFA26A00FFA06800FF9E6600FF + 9C6400FF9A6200FF986000FFA97B2CFFB58D48FFC8A973FFD5BB8FFFEAD8B9FF + FFF5E3FFCF7C43FFC44E02CF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FFED8216FFE7A662FFFFFFFFFFFFFFFEFF + DFC17FFFCEA13FFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFFFAF5EBFFBA871FFF + BD8F2FFFFFFDF8FFFFFCF8FFDEC79BFFD2B47BFFBA8F3EFFB98E3DFF9F6700FF + 9D6500FF9B6400FF996200FF976000FF955E00FF935C00FF905A00FF8E5800FF + FFF7E8FFE2A274FFC44E02FF0000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FFED8316FFE7A762FFFFFFFFFFFFFFFFFF + DFC27FFFBE8300FFC08910FFCB9F3FFFCEA64FFFDBBD7EFFDABC7EFFD8BB7EFF + AF7600FFEBDBBCFFFFFDFAFFFFFDF9FFFFFDF9FFFFFDF8FFFFFCF7FFFFFCF6FF + F9F2E6FFE6D6B8FFDFCBA8FFCBAE7AFFBD995BFFAF843CFF9F6F1EFF905900FF + FFF8ECFFE2B28FFFC44E02FFC44E022000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FFEE8417FFF3B978FFFFFFFFFFFFFFFFFF + F7F0DFFFEFE0BFFFE6D09FFFDDC080FFD8B76FFFC99D40FFC79C40FFB37900FF + C0912FFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFFFFFDFAFFFFFDFAFFFFFDF9FF + FFFDF8FFFFFCF7FFFFFCF6FFFFFCF6FFFFFBF5FFFFFBF4FFFFFBF3FFFFFAF2FF + FFFAF0FFF0CFB4FFC44E02FFC44E024000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FFEF8517FFFECB8FFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF + FFFFFEFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFF + FFFDFAFFFFFDFAFFFFFDF9FFFFFDF8FFFFFCF8FFFFFCF7FFFFFCF6FFFFFBF5FF + FFFBF4FFEFE1D4FFC44E02FFC44E027000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FFEF8617FFFECC8FFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFDFFFFFEFDFF + FFFEFCFFFFFEFCFFFFFEFBFFFFFEFBFFFFFDFAFFFFFDF9FFFFFDF9FFFFFDF8FF + FFFCF7FFFFFCF6FFC25007FFC44E028000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FFEE9629FF769AB3FFE6F0F9FF80B3DFFF + BFD9EFFFBFD9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFF + FFFFFEFFFFFEFDFFFFFEFDFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFFFFFDFAFF + FFFDFAFFFFFDF9FFC8692BFFC44E02BF00000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF1078BDFF66CDF1FFCCE9FBFF0087DFFF + 0088DFFF0078CFFF0079CFFF1075C7FF408DCFFF5097D3FF80B3DFFF9FC6E7FF + BFD9EFFFDFECF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFDFFFFFEFCFF + FFFEFCFFFFFEFBFFCF7F4AFFC44E02CF00000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF00C7FBFF66E0FFFFCCECFFFF26B2FFFF + 00A7FFFF00A9FFFF00ACFFFF00AEFFFF00B1FFFF00A9F7FF00A2EFFF009EEBFF + 0090DFFF0091DFFF007DCFFF2090D7FF4093D3FF70AADBFF80B3DFFFAFD0EBFF + BFD9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFF + FFFEFDFFFFFEFDFFDC9D74FFC44E02FF00000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF00C5FFFF66DBFFFFCCECFFFF40B9FFFF + 00A4FFFF00A7FFFF00A9FFFF00ABFFFF00AEFFFF00B0FFFF00B3FFFF00B5FFFF + 00B8FFFF00BAFFFF00BCFFFF00BFFFFF00C1FFFF00C4FFFF00BAF7FF00B0EFFF + 00B2EFFF009ADFFF009BDFFF40AEE3FF40A8DFFF80C1E7FF8FBDE3FFBFD9EFFF + CFE3F2FFFFFFFEFFE2B699FFC44E02FFC44E0220000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF00BCFFFF66D6FFFFCCEBFFFF66C6FFFF + 00A1FFFF00A4FFFF00A6FFFF00A9FFFF00ABFFFF00ADFFFF00B0FFFF00B2FFFF + 00B5FFFF00B7FFFF00BAFFFF00BCFFFF00BEFFFF00C1FFFF00C3FFFF00C6FFFF + 00C8FFFF00CBFFFF00CDFFFF00D0FFFF00D2FFFF00D4FFFF00D7FFFF00D2FBFF + 00BEEFFF00C0EFFF4197ACFFC44E02FFC44E0240000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF00B3FFFF66D2FFFFCCEBFFFFA6DCFFFF + 009EFFFF00A1FFFF00A3FFFF00A6FFFF00A8FFFF00ABFFFF00ADFFFF00B0FFFF + 00B2FFFF00B4FFFF00B7FFFF00B9FFFF00BCFFFF00BEFFFF00C1FFFF00C3FFFF + 00C5FFFF00C8FFFF00CAFFFF00CDFFFF00CFFFFF00D1FFFF00D4FFFF00D6FFFF + 00D9FFFF00DBFFFF15D0E9FFC44E02FFC44E0270000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF00AAFFFF66CDFFFFCCEAFFFFCCEBFFFF + 8CD3FFFF4DBBFFFF26AFFFFF00A3FFFF00A5FFFF00A8FFFF00AAFFFF00ADFFFF + 00AFFFFF00B2FFFF00B4FFFF00B6FFFF00B9FFFF00BBFFFF00BEFFFF00C0FFFF + 00C2FFFF00C5FFFF00C7FFFF00CAFFFF00CCFFFF00CFFFFF00D1FFFF00D4FFFF + 00D6FFFF00D8FFFF00DBFFFFB8500EFFC44E028F000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF00A1FFFF73CDFFFFCCEAFFFFCCEAFFFF + CCEBFFFFCCEBFFFFCCECFFFFCCECFFFFB3E4FFFF99DBFFFF73CFFFFF66CCFFFF + 4DC5FFFF33BFFFFF26BDFFFF00B4FFFF00B6FFFF00B8FFFF00BBFFFF00BDFFFF + 00C0FFFF00C2FFFF00C5FFFF00C7FFFF00CAFFFF00CCFFFF00CEFFFF00D1FFFF + 00D3FFFF00D6FFFF00D8FFFF937141FFC44E02BF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0280C44E02FF0098FFFF2697EDFF3394E7FF3395E7FF + 3395E7FF3395E7FF66B2EFFF66B2EFFF66B2EFFF66B2EFFF66B3EFFF99D0F7FF + 99D1F7FF99D1F7FF99D1F7FF99D2F7FFCCF0FFFF99E2FFFF99E3FFFF8CE0FFFF + 66D8FFFF66D9FFFF40D1FFFF33D0FFFF33D2FFFF0DCCFFFF00CBFFFF00CEFFFF + 00D0FFFF00D3FFFF00D5FFFF627D75FFC44E02FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0270C44E02FF626B7BFF626371FF626371FF626371FF + 626371FF316EA8FF316EA8FF316EA8FF316EA8FF316EA8FF316EA8FF2570B6FF + 0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF + 0D80E1FF3397E7FF3397E7FF3397E7FF3397E7FF409FE9FF66B6EFFF66B7EFFF + 33ADEFFF33AEEFFF4CB4E3FF948561FFC44E02FF000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0210C44E02BFC44E02FFC44E02FFC44E02FFC44E02FF + C44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FF + C44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FFB85110FF935939FF + 935939FF935939FF935939FF935939FF935939FF7B5E55FF626371FF626371FF + 626371FF875B47FFC44E02FFC44E02FFC44E029F000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000C44E0240C44E0240C44E0240C44E0240C44E0240C44E0240 + C44E0250C44E0280C44E0280C44E0280C44E0280C44E0280C44E0280C44E029F + C44E02BFC44E02BFC44E02BFC44E02BFC44E02BFC44E02BFC44E02EFC44E02FF + C44E02FFC44E02DFC44E028FC44E023000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFCFFFFFFFFF0000FF81FFFFFFFF0000FF001FFF + FFFF0000FF0001FFFFFF0000FE00001FFFFF0000FE000003FFFF0000FE000000 + 3FFF0000FE00000007FF0000FE00000007FF0000FE00000003FF0000FE000000 + 01FF0000FE000000007F0000FE000000003F0000FE000000001F0000FE000000 + 000F0000FE000000000F0000FE000000000F0000FE000000001F0000FE000000 + 007F0000FE00000000FF0000FE00000001FF0000FE00000001FF0000FE000000 + 01FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000 + 00FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000 + 00FF0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000 + 007F0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000 + 003F0000FE000000003F0000FE000000003F0000FE000000003F0000FE000000 + 003F0000FE000000003F0000FE000000003F0000FE000000003F0000FFFE0000 + 007F0000FFFFFFFFFFFF0000} + end + object LabelDescricao: TLabel + Left = 49 + Top = 1 + Width = 193 + Height = 47 + Align = alLeft + Caption = 'Hist'#243'rico de Tabelas' + Font.Charset = DEFAULT_CHARSET + Font.Color = clNavy + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + Layout = tlCenter + ExplicitHeight = 24 + end + end + object Panel2: TPanel + Left = 0 + Top = 49 + Width = 177 + Height = 404 + Align = alLeft + BevelOuter = bvNone + TabOrder = 1 + object LabelUser: TLabel + Left = 7 + Top = 8 + Width = 36 + Height = 13 + Caption = '&Usu'#225'rio' + FocusControl = ComboUser + end + object LabelForm: TLabel + Left = 7 + Top = 56 + Width = 48 + Height = 13 + Caption = '&Formul'#225'rio' + FocusControl = ComboForm + end + object LabelEvento: TLabel + Left = 7 + Top = 104 + Width = 34 + Height = 13 + Caption = '&Evento' + FocusControl = ComboEvento + end + object LabelTabela: TLabel + Left = 7 + Top = 152 + Width = 33 + Height = 13 + Caption = '&Tabela' + FocusControl = ComboTabela + end + object ComboUser: TComboBox + Left = 7 + Top = 24 + Width = 163 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 0 + OnChange = ComboUserChange + end + object ComboForm: TComboBox + Left = 7 + Top = 72 + Width = 163 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 1 + OnChange = ComboUserChange + end + object BitBtn1: TBitBtn + Left = 16 + Top = 304 + Width = 145 + Height = 25 + Caption = '&Aplicar Filtro' + Enabled = False + TabOrder = 2 + OnClick = BitBtn1Click + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 08000000000000010000530B0000530B0000000100000001000000310000004A + 0000005A0000006B0000007B0000219C390018AD390021AD390029BD390021AD + 4A0031CE4A0031CE5A0039D65A0039DE63004AEF6B004AEF730052EF730052EF + 7B006BF78C00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00131313131313 + 1313020213131313131313131313131313030902131313131313131313131313 + 030D090213131313131313131313131303120902131313131313131313131313 + 0312090213131313131313131313131303120902131313131313131313131313 + 0312090213131313131313131313131303120902131313131313131313131303 + 120D09000213131313131313131303120D0D0501000213131313131313031210 + 0E0D070401000213131313130312110F0D0B0909040100021313130312110C0A + 0806090909040100021303030303030303030303030303030303131313131313 + 1313131313131313131313131313131313131313131313131313} + end + object BitBtn2: TBitBtn + Left = 16 + Top = 336 + Width = 145 + Height = 25 + Caption = '&Excluir Hist'#243'rico' + TabOrder = 3 + OnClick = BitBtn2Click + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FF1877EA1574E0FF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF1776E615 + 73E7136FDC126ED30F6AC9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + FF00FFFF00FFFF00FF1676CA268BE5278CEB2184E3116CCF0C67C40B64BB0962 + B4075CA9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF258BD83EABEE45 + B4F72687DD3DAAF41E80D50F69BF065BAA0458A004579A035495FF00FFFF00FF + FF00FFFF00FF01500A319CF739A4F41B6DC448B7FA2687DD41ADFA3BA7F81F81 + D4197ACC065B9F025291FF00FFFF00FFFF00FF0B6344185F6901500A166AD425 + 81CE1160C02889E340ACFE359EF23CA6FF3CA6FF2D95EFFF00FFFF00FFFF00FF + 06630925AC461CB62F1CB62F1CB62F01500A01500A196DA32380E12C8FEB38A3 + FF38A1FFFF00FFFF00FFFF00FF096D111C9A3147F77936E5541CB62F0E912D12 + 805B1CB62F1CB62F01500A01500AFF00FFFF00FFFF00FFFF00FFFF00FF1C982F + 18902935E05D21C2390CA015008600008300068E0F1DA6572D9197FF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FF035A0617992811AA1D018202007B0004 + 8A0B005D01005D01FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + 1387232AD149048807005C00005D01046D0AFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FF0E78182CD44D068C09005400FF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF08690E2BCE49 + 07960D005800FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FF0D82170C9D15005E00FF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0B8913006501 + FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF + 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + end + object BitBtn3: TBitBtn + Left = 16 + Top = 368 + Width = 145 + Height = 25 + Caption = '&Fechar' + TabOrder = 4 + OnClick = BitBtn3Click + Glyph.Data = { + 36030000424D3603000000000000360000002800000010000000100000000100 + 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF + FF00FFFF00FFFF00FFFF00FFFF00FF824B4B4E1E1FFF00FFFF00FFFF00FFFF00 + FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF824B4B824B4BA64B4BA9 + 4D4D4E1E1FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF + 824B4B824B4BB64F50C24F50C54D4EB24D4E4E1E1F824B4B824B4B824B4B824B + 4B824B4B824B4BFF00FFFF00FFFF00FF824B4BD45859CB5556C95455C95253B7 + 4F524E1E1FFE8B8CFB9A9CF8AAABF7B5B6F7B5B6824B4BFF00FFFF00FFFF00FF + 824B4BD75C5DD05A5BCF595ACF5758BD53564E1E1F23B54A13C14816BD480CBC + 41F7B5B6824B4BFF00FFFF00FFFF00FF824B4BDD6364D75F60D55E5FD55C5DC2 + 575A4E1E1F2AB44D1CBF4C1EBC4C13BC45F7B5B6824B4BFF00FFFF00FFFF00FF + 824B4BE36869DD6566DA6364DE6667C6595B4E1E1F26B14916BC481BBB4910BB + 43F7B5B6824B4BFF00FFFF00FFFF00FF824B4BEB6D6EE26768E67E7FFAD3D4CC + 6E704E1E1FA5D89750D16F42C9662DC758F7B5B6824B4BFF00FFFF00FFFF00FF + 824B4BF27374E96C6DEB8182FCD1D3CF6E704E1E1FFFF2CCFFFFD7FFFFD4E6FC + C7F7B5B6824B4BFF00FFFF00FFFF00FF824B4BF87879F07576EE7273F07374D1 + 65664E1E1FFCEFC7FFFFD5FFFFD3FFFFD7F7B5B6824B4BFF00FFFF00FFFF00FF + 824B4BFE7F80F77A7BF6797AF77779D76B6B4E1E1FFCEFC7FFFFD5FFFFD3FFFF + D5F7B5B6824B4BFF00FFFF00FFFF00FF824B4BFF8384FC7F80FB7E7FFE7F80DA + 6E6F4E1E1FFCEFC7FFFFD5FFFFD3FFFFD5F7B5B6824B4BFF00FFFF00FFFF00FF + 824B4BFF8889FF8283FF8182FF8283E073744E1E1FFCEFC7FFFFD5FFFFD3FFFF + D5F7B5B6824B4BFF00FFFF00FFFF00FF824B4B824B4BE27576FE8182FF8687E5 + 76774E1E1FFAEBC5FCFBD1FCFBCFFCFBD1F7B5B6824B4BFF00FFFF00FFFF00FF + FF00FFFF00FF824B4B9C5657CB6C6DCF6E6E4E1E1F824B4B824B4B824B4B824B + 4B824B4B824B4BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF824B4B82 + 4B4B4E1E1FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF} + end + object ComboEvento: TComboBox + Left = 7 + Top = 120 + Width = 163 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 5 + OnChange = ComboUserChange + end + object ComboTabela: TComboBox + Left = 7 + Top = 168 + Width = 163 + Height = 21 + Style = csDropDownList + ItemHeight = 13 + TabOrder = 6 + OnChange = ComboUserChange + end + end + object Panel3: TPanel + Left = 177 + Top = 49 + Width = 636 + Height = 404 + Align = alClient + BevelOuter = bvNone + TabOrder = 2 + object Splitter1: TSplitter + Left = 0 + Top = 89 + Width = 636 + Height = 3 + Cursor = crVSplit + Align = alBottom + end + object DBMemo1: TDBMemo + Left = 0 + Top = 248 + Width = 636 + Height = 156 + Align = alBottom + DataField = 'Obs' + DataSource = DataSource1 + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Courier New' + Font.Style = [] + ParentFont = False + ReadOnly = True + ScrollBars = ssBoth + TabOrder = 0 + end + object DBGrid1: TDBGrid + Left = 0 + Top = 0 + Width = 636 + Height = 89 + Align = alClient + DataSource = DataSource1 + Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + ReadOnly = True + TabOrder = 1 + TitleFont.Charset = DEFAULT_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -11 + TitleFont.Name = 'MS Sans Serif' + TitleFont.Style = [] + Columns = < + item + Expanded = False + FieldName = 'UserName' + Title.Caption = 'Usu'#225'rio' + Width = 157 + Visible = True + end + item + Expanded = False + FieldName = 'FormCaption' + Title.Caption = 'Formul'#225'rio' + Width = 157 + Visible = True + end + item + Expanded = False + FieldName = 'Evento' + Title.Caption = 'Evento ' + Width = 79 + Visible = True + end + item + Expanded = False + FieldName = 'EventDate' + Title.Caption = 'Data do Evento' + Width = 65 + Visible = True + end + item + Expanded = False + FieldName = 'EventTime' + Title.Caption = 'Hora do Evento' + Width = 65 + Visible = True + end + item + Expanded = False + FieldName = 'TableName' + Width = 84 + Visible = True + end> + end + object StringGrid1: TStringGrid + Left = 0 + Top = 92 + Width = 636 + Height = 156 + Align = alBottom + ColCount = 3 + DefaultColWidth = 220 + DefaultRowHeight = 21 + FixedCols = 0 + RowCount = 2 + Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSelect] + TabOrder = 2 + ColWidths = ( + 169 + 220 + 220) + end + end + object DataSource1: TDataSource + OnDataChange = DataSource1DataChange + Left = 224 + Top = 121 + end +end diff --git a/internal/2.31RC1/1/UCHistorico/UCHist_Form.pas b/internal/2.31RC1/1/UCHistorico/UCHist_Form.pas new file mode 100644 index 0000000..1a78fa6 --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/UCHist_Form.pas @@ -0,0 +1,318 @@ +unit UCHist_Form; + +interface + +{$I 'UserControl.inc'} + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + UCHist_Base, Dialogs, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, DBCtrls, DB; + +Type TAuxObj = class(TObject) + Private + IdUser : Integer; +end; + +type + TFrmHistorico = class(TForm) + Panel1: TPanel; + Image1: TImage; + LabelDescricao: TLabel; + Panel2: TPanel; + DataSource1: TDataSource; + Panel3: TPanel; + DBMemo1: TDBMemo; + Splitter1: TSplitter; + DBGrid1: TDBGrid; + LabelUser: TLabel; + ComboUser: TComboBox; + LabelForm: TLabel; + ComboForm: TComboBox; + BitBtn1: TBitBtn; + BitBtn2: TBitBtn; + BitBtn3: TBitBtn; + LabelEvento: TLabel; + ComboEvento: TComboBox; + LabelTabela: TLabel; + ComboTabela: TComboBox; + StringGrid1: TStringGrid; + procedure BitBtn1Click(Sender: TObject); + procedure BitBtn2Click(Sender: TObject); + procedure BitBtn3Click(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormShow(Sender: TObject); + procedure ComboUserChange(Sender: TObject); + procedure DataSource1DataChange(Sender: TObject; Field: TField); + private + DataSetHist : TDataSet; + procedure SetComBoValues; + { Private declarations } + public + fControl : TUCControlHistorico + { Public declarations } + end; + +implementation + + +{$R *.dfm} + +procedure TFrmHistorico.BitBtn1Click(Sender: TObject); +Var cSql : String; +begin + cSql := Format('Select UH.%s as UserId, Uh.%s as Form , ' + + 'Uh.%s as Evento , Uh.%s as Obs, Uh.%s as FormCaption, Uh.%s as EventDate, Uh.%s as EventTime, uh.%s as TableName, '+ + 'US.%s As UserName from %s UH, %s US where UH.%s = US.%s and Uh.%s = %s ', + [ fControl.TableHistory.FieldUserID , + fControl.TableHistory.FieldForm , + fControl.TableHistory.FieldEvent , + fControl.TableHistory.FieldObs , + fControl.TableHistory.FieldCaptionForm , + fControl.TableHistory.FieldEventDate , + fControl.TableHistory.FieldEventTime , + fControl.TableHistory.FieldTableName , + fControl.UserControl.TableUsers.FieldLogin , + fControl.TableHistory.TableName , + fControl.UserControl.TableUsers.TableName , + fControl.TableHistory.FieldUserId , + fControl.UserControl.TableUsers.FieldUserID , + fControl.TableHistory.FieldApplicationID , + QuotedStr(fControl.UserControl.ApplicationID) ]); + + if ComboUser.ItemIndex <> 0 then + cSql := cSql + Format(' and US.%s = %s ',[fControl.UserControl.TableUsers.FieldLogin,QuotedStr(ComboUser.Text)]); + + if ComboForm.ItemIndex <> 0 then + cSql := cSql + Format(' and UH.%s = %s ',[fControl.TableHistory.FieldCaptionForm,QuotedStr(ComboForm.Text)]); + + if ComboEvento.ItemIndex <> 0 then + cSql := cSql + Format(' and UH.%s = %s ',[fControl.TableHistory.FieldEvent,QuotedStr(ComboEvento.Text)]); + + if ComboTabela.ItemIndex <> 0 then + cSql := cSql + Format(' and UH.%s = %s ',[fControl.TableHistory.FieldTableName,QuotedStr(ComboTabela.Text)]); + + cSql := cSql + Format(' order by Uh.%s, Uh.%s',[fControl.TableHistory.FieldTableName,fControl.TableHistory.FieldEventDate ]) ; + + DataSetHist.Close; + DataSetHist := nil; + DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset( cSql ); + DataSetHist.Open; + DataSource1.DataSet := DataSetHist; + BitBtn1.Enabled := False; +end; + +procedure TFrmHistorico.BitBtn2Click(Sender: TObject); +var cSql : String; +begin + if MessageBox(Handle, pChar( fControl.Historymsg.Msg_LimpHistorico ) , pChar(fControl.HistoryMsg.Msg_MensConfirma),mb_YesNo) = ID_YES then + begin + cSql := ''; + + if ComboUser.ItemIndex <> 0 then + cSql := cSql + Format(' %s = %d ',[fControl.TableHistory.FieldUserID , TAuxObj(ComboUser.Items.Objects[ComboUser.ItemIndex]).IdUser ]); + + if ComboForm.ItemIndex <> 0 then + cSql := cSql + Format(' and %s = %s ',[fControl.TableHistory.FieldCaptionForm,QuotedStr(ComboForm.Text)]); + + if ComboEvento.ItemIndex <> 0 then + cSql := cSql + Format(' and %s = %s ',[fControl.TableHistory.FieldEvent,QuotedStr(ComboEvento.Text)]); + + if ComboTabela.ItemIndex <> 0 then + cSql := cSql + Format(' and %s = %s ',[fControl.TableHistory.FieldTableName,QuotedStr(ComboTabela.Text)]); + + If Length( trim( cSql ) ) <> 0 then + Begin + If UpperCase(trim(Copy( cSql , 1 , 4 ))) = 'AND' then + Delete(cSql,1,4); + cSql := Format('delete from %s where ',[fControl.TableHistory.TableName]) + cSql; + End + else + cSql := Format('delete from %s ',[fControl.TableHistory.TableName]) + cSql; + fControl.UserControl.DataConnector.UCExecSQL( cSql ); + DataSetHist := Nil; + SetComBoValues; + + If fControl.UserControl.LogControl.Active then + fControl.UserControl.Log( Format( fControl.HistoryMsg.Msg_LogEmptyHistory,[ fControl.UserControl.CurrentUser.UserName, QuotedStr(FormatDateTime('YYYYMMDDhhmmss', now)) ]),3); + end; +end; + +procedure TFrmHistorico.BitBtn3Click(Sender: TObject); +begin + close; +end; + +procedure TFrmHistorico.FormClose(Sender: TObject; + var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TFrmHistorico.SetComBoValues; +Var Aux : TAuxObj; +Begin + Aux := TAuxObj.Create; + Aux.IdUser := -1; + + ComboUser.Items.Clear; + ComboForm.Items.Clear; + ComboEvento.Items.Clear; + ComboTabela.Items.Clear; + + ComboUser.Items.AddObject( fControl.HistoryMsg.Hist_All , Aux ); + + ComboForm.Items.Add ( fControl.HistoryMsg.Hist_All ); + + ComboEvento.Items.Add( fControl.HistoryMsg.Hist_All ); + ComboEvento.Items.Add( fControl.HistoryMsg.Evento_Insert ); + ComboEvento.Items.Add( fControl.HistoryMsg.Evento_Delete ); + ComboEvento.Items.Add( fControl.HistoryMsg.Evento_Edit ); + ComboEvento.Items.Add( fControl.HistoryMsg.Evento_NewRecord ); + + ComboTabela.Items.Add( fControl.HistoryMsg.Hist_All ); + + DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset( + Format('Select distinct %s from %s',[ + fControl.TableHistory.FieldTableName, + fControl.TableHistory.TableName])); + while DataSetHist.Eof = False do + Begin + ComboTabela.Items.Add( DataSetHist.Fields[ 0 ].AsString ); + DataSetHist.Next; + End; + + DataSetHist := nil; + DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset( + Format('Select distinct %s from %s',[ + fControl.TableHistory.FieldCaptionForm, + fControl.TableHistory.TableName ])); + while DataSetHist.Eof = False do + Begin + ComboForm.Items.Add( DataSetHist.Fields[ 0 ].AsString ); + DataSetHist.Next; + End; + + DataSetHist := nil; + DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset( + Format('Select %s, %s as Usuario from %s where %s = %s order by %s', + [ fControl.UserControl.TableUsers.FieldUserID, + fControl.UserControl.TableUsers.FieldLogin , + fControl.UserControl.TableUsers.TableName , + fControl.UserControl.TableUsers.FieldTypeRec, + QuotedStr('U') , + fControl.UserControl.TableUsers.FieldLogin ])); + + If fControl.UserControl.CurrentUser.Privileged = true then + Begin + while DataSetHist.Eof = False do + Begin + Aux := TAuxObj.Create; + Aux.IdUser := DataSetHist.Fields[ 0 ].AsInteger; + ComboUser.Items.AddObject( DataSetHist.Fields[ 1 ].AsString, Aux ); + DataSetHist.Next; + End; + End + else + begin + Aux := TAuxObj.Create; + Aux.IdUser := fControl.UserControl.CurrentUser.UserID; + ComboUser.Items.AddObject( fControl.UserControl.CurrentUser.UserLogin, Aux ); + end; + + + ComboUser.ItemIndex := 0; + ComboForm.ItemIndex := 0; + ComboEvento.ItemIndex := 0; + ComboTabela.ItemIndex := 0; + + + DataSetHist := nil; + DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset( + Format('Select UH.%s as UserId, Uh.%s as Form , ' + + 'Uh.%s as Evento , Uh.%s as Obs, Uh.%s as FormCaption, Uh.%s as EventDate, Uh.%s as EventTime, uh.%s as TableName, '+ + 'US.%s As UserName from %s UH, %s US where UH.%s = US.%s and Uh.%s = %s order by Uh.%s, uh.%s', + [ fControl.TableHistory.FieldUserId , + fControl.TableHistory.FieldForm , + fControl.TableHistory.FieldEvent , + fControl.TableHistory.FieldObs , + fControl.TableHistory.FieldCaptionForm , + fControl.TableHistory.FieldEventDate , + fControl.TableHistory.FieldEventTime , + fControl.TableHistory.FieldTableName , + fControl.UserControl.TableUsers.FieldLogin , + fControl.TableHistory.TableName , + fControl.UserControl.TableUsers.TableName , + fControl.TableHistory.FieldUserId , + fControl.UserControl.TableUsers.FieldUserID , + fControl.TableHistory.FieldApplicationID , + QuotedStr(fControl.UserControl.ApplicationID) , + fControl.TableHistory.FieldTableName , + fControl.TableHistory.FieldEventDate ])); + + DataSource1.DataSet := DataSetHist; +end; + +procedure TFrmHistorico.FormShow(Sender: TObject); +begin + SetComBoValues; + + Self.Caption := fControl.HistoryMsg.LabelDescricao; + BitBtn1.Caption := fControl.HistoryMsg.Hist_BtnFiltro; + BitBtn2.Caption := fControl.HistoryMsg.Hist_BtnExcluir; + BitBtn3.Caption := fControl.HistoryMsg.Hist_BtnFechar; + + BitBtn2.Enabled := fControl.UserControl.CurrentUser.Privileged; + + + LabelDescricao.Caption := fControl.HistoryMsg.LabelDescricao; + LabelUser.Caption := fControl.HistoryMsg.LabelUser; + LabelForm.Caption := fControl.HistoryMsg.LabelForm; + LabelEvento.Caption := fControl.HistoryMsg.LabelEvento; + LabelTabela.Caption := fControl.HistoryMsg.LabelTabela; + + DBGrid1.Columns[ 0 ].Title.Caption := fControl.HistoryMsg.LabelUser; + DBGrid1.Columns[ 1 ].Title.Caption := fControl.HistoryMsg.LabelForm; + DBGrid1.Columns[ 2 ].Title.Caption := fControl.HistoryMsg.LabelEvento; + DBGrid1.Columns[ 3 ].Title.Caption := fControl.HistoryMsg.LabelDataEvento; + DBGrid1.Columns[ 4 ].Title.Caption := fControl.HistoryMsg.LabelHoraEvento; + DBGrid1.Columns[ 5 ].Title.Caption := fControl.HistoryMsg.LabelTabela; + + StringGrid1.Cells[0,0] := 'Campo'; + StringGrid1.Cells[1,0] := 'Original'; + StringGrid1.Cells[2,0] := 'Modificado para'; +end; + +procedure TFrmHistorico.ComboUserChange(Sender: TObject); +begin + BitBtn1.Enabled := True; +end; + +procedure TFrmHistorico.DataSource1DataChange(Sender: TObject; + Field: TField); +Var List : TStringList; Aux : Integer; S : String; +begin + DBMemo1.Visible := DataSource1.DataSet.FieldValues['Evento'] <> fControl.HistoryMsg.Evento_Edit; + StringGrid1.Visible := DataSource1.DataSet.FieldValues['Evento'] = fControl.HistoryMsg.Evento_Edit; + If StringGrid1.Visible Then + Begin + try + List := TStringList.Create; + List.Text := DataSource1.DataSet.FieldValues['Obs']; + StringGrid1.RowCount := List.Count + 1; + For Aux := 0 to List.Count - 1 do + Begin + S := List[ Aux ]; + StringGrid1.Cells[ 0 , Aux + 1 ] := Copy(S,1,Pos('||',S)-1 ); + Delete(S,1,Pos('||',s)+1); + StringGrid1.Cells[ 1 , Aux + 1 ] := Copy(S,1,Pos('||',S)-1 ); + Delete(S,1,Pos('||',s)+1); + StringGrid1.Cells[ 2 , Aux + 1 ] := S; + End; + + finally + FreeAndNil( List ); + end; + End; +end; + +end. diff --git a/internal/2.31RC1/1/UCHistorico/UCHist_Type.pas b/internal/2.31RC1/1/UCHistorico/UCHist_Type.pas new file mode 100644 index 0000000..9173c59 --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/UCHist_Type.pas @@ -0,0 +1,278 @@ +unit UCHist_Type; + +interface + + uses SysUtils,Classes,Menus,ActnList; + +Type + TUCHistoryMSG = class(TPersistent) + private + fEvento_edit: String; + fEvento_NewRecord: String; + fEvento_Insert: String; + fEvento_delete: String; + fLabelTabela: String; + fMsg_LogEmptyHistory: String; + fMsg_MensConfirma: String; + fLabelDescricao: String; + fHist_BtnExcluir: String; + fHist_BtnFiltro: String; + fLabelForm: String; + fHist_BtnFechar: String; + fLabelDataEvento: String; + fLabelEvento: String; + fMsg_NewRecord: String; + fHist_All: String; + fMsg_LimpHistorico: String; + fLabelHoraEvento: String; + fLabelUser: String; + fHist_MsgExceptPropr: String; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + Property Evento_Insert : String read fEvento_Insert write fEvento_Insert; + Property Evento_Delete : String read fEvento_delete write fEvento_delete; + Property Evento_Edit : String read fEvento_edit write fEvento_edit; + Property Evento_NewRecord : String read fEvento_NewRecord write fEvento_NewRecord; + Property Hist_All : String read fHist_All Write fHist_All ; + Property Msg_LimpHistorico : String read fMsg_LimpHistorico Write fMsg_LimpHistorico ; + Property Msg_MensConfirma : String read fMsg_MensConfirma Write fMsg_MensConfirma ; + Property Msg_LogEmptyHistory : String read fMsg_LogEmptyHistory Write fMsg_LogEmptyHistory; + Property LabelDescricao : String read fLabelDescricao Write fLabelDescricao ; + Property LabelUser : String read fLabelUser Write fLabelUser; + Property LabelForm : String read fLabelForm Write fLabelForm ; + Property LabelEvento : String read fLabelEvento Write fLabelEvento; + Property LabelTabela : String read fLabelTabela Write fLabelTabela; + Property LabelDataEvento : String read fLabelDataEvento Write fLabelDataEvento; + Property LabelHoraEvento : String read fLabelHoraEvento Write fLabelHoraEvento; + Property Msg_NewRecord : String read fMsg_NewRecord Write fMsg_NewRecord; + Property Hist_MsgExceptPropr : String read fHist_MsgExceptPropr write fHist_MsgExceptPropr; + Property Hist_BtnFiltro : String read fHist_BtnFiltro write fHist_BtnFiltro; + Property Hist_BtnExcluir : String read fHist_BtnExcluir write fHist_BtnExcluir; + Property Hist_BtnFechar : String read fHist_BtnFechar write fHist_BtnFechar; + end; + + + TUCUserHistory = class(TPersistent) // armazenar menuitem ou action responsavel pelo historico + private + FAction: TAction; + FMenuItem: TMenuItem; + procedure SetAction(const Value: TAction); + procedure SetMenuItem(const Value: TMenuItem); + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property Action: TAction read FAction write SetAction; + property MenuItem: TMenuItem read FMenuItem write SetMenuItem; + end; + + TUCTableHistorico = class(TPersistent) + private + FTable: String; + FApplicationID: String; + FUserID: String; + fDateEvent: String; + fFieldForm: String; + fFieldEvent: String; + fFieldObs: String; + fCaptionForm: string; + fEventTime: String; + fFieldTableName: String; + protected + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property TableName : String read FTable write FTable; // nome da tabela + property FieldApplicationID : String read FApplicationID write FApplicationID; + property FieldUserID : String read FUserID write FUserID; + property FieldEventDate : String read fDateEvent write fDateEvent; + property FieldEventTime : String read fEventTime Write fEventTime; + property FieldForm : String read fFieldForm write fFieldForm; + property FieldCaptionForm : string read fCaptionForm write fCaptionForm; + Property FieldEvent : String read fFieldEvent write fFieldEvent; + property FieldObs : String read fFieldObs write fFieldObs; + property FieldTableName : String read fFieldTableName write fFieldTableName; // grava o nome da tabela monitorada + end; + + TUCHistTypeSavePostEdit = ( tpSaveAllFields , tpSaveModifiedFields ); + + TUCHistOptions = Class( TPersistent ) + private + fSavePostEdit: Boolean; + fSavePostInsert: Boolean; + fSaveDelete: Boolean; + fSaveNewRecord: Boolean; + fTypeSave: TUCHistTypeSavePostEdit; + public + constructor Create(AOwner: TComponent); + destructor Destroy; override; + procedure Assign(Source: TPersistent); override; + published + property SaveNewRecord : Boolean read fSaveNewRecord write fSaveNewRecord; + property SaveDelete : Boolean read fSaveDelete write fSaveDelete; + property SavePostInsert : Boolean read fSavePostInsert write fSavePostInsert; + property SavePostEdit : Boolean read fSavePostEdit Write fSavePostEdit; + Property TypeSavePostEdit : TUCHistTypeSavePostEdit read fTypeSave Write fTypeSave; + end; + + +implementation + + +{ TUCHistoryMSG } + +procedure TUCHistoryMSG.Assign(Source: TPersistent); +begin + if Source is TUCHistoryMSG then + Begin + Self.Evento_edit := TUCHistoryMSG(Source).Evento_edit; + Self.Evento_NewRecord := TUCHistoryMSG(Source).Evento_NewRecord; + Self.Evento_Insert := TUCHistoryMSG(Source).Evento_Insert; + Self.Evento_delete := TUCHistoryMSG(Source).Evento_Delete; + Self.LabelTabela := TUCHistoryMSG(Source).LabelTabela; + Self.Msg_LogEmptyHistory := TUCHistoryMSG(Source).Msg_LogEmptyHistory; + Self.Msg_MensConfirma := TUCHistoryMSG(Source).Msg_MensConfirma; + Self.LabelDescricao := TUCHistoryMSG(Source).LabelDescricao; + Self.Hist_BtnExcluir := TUCHistoryMSG(Source).Hist_BtnExcluir; + Self.Hist_BtnFiltro := TUCHistoryMSG(Source).Hist_BtnFiltro; + Self.LabelForm := TUCHistoryMSG(Source).LabelForm; + Self.Hist_BtnFechar := TUCHistoryMSG(Source).Hist_BtnFechar; + Self.LabelDataEvento := TUCHistoryMSG(Source).LabelDataEvento; + Self.LabelEvento := TUCHistoryMSG(Source).LabelEvento; + Self.Msg_NewRecord := TUCHistoryMSG(Source).Msg_NewRecord; + Self.Hist_All := TUCHistoryMSG(Source).Hist_All; + Self.Msg_LimpHistorico := TUCHistoryMSG(Source).Msg_LimpHistorico; + Self.LabelHoraEvento := TUCHistoryMSG(Source).LabelHoraEvento; + Self.LabelUser := TUCHistoryMSG(Source).LabelUser; + Self.Hist_MsgExceptPropr := TUCHistoryMSG(Source).Hist_MsgExceptPropr; + End + else + inherited; +end; + +constructor TUCHistoryMSG.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCHistoryMSG.Destroy; +begin + inherited; +end; + + +//------------------------------------------------------------------------------// + +{ TUCHistOptions } + +procedure TUCHistOptions.Assign(Source: TPersistent); +begin + if Source is TUCHistOptions then + begin + Self.SaveNewRecord := TUCHistOptions(Source).SaveNewRecord; + Self.SaveDelete := TUCHistOptions(Source).SaveDelete; + Self.SavePostInsert := TUCHistOptions(Source).SavePostInsert; + Self.SavePostEdit := TUCHistOptions(Source).SavePostEdit; + Self.TypeSavePostEdit := TUCHistOptions(Source).TypeSavePostEdit; + end + else + inherited; +end; + +constructor TUCHistOptions.Create(AOwner: TComponent); +begin + fSavePostEdit := true; + fSavePostInsert := true; + fSaveDelete := true; + fSaveNewRecord := true; + fTypeSave := tpSaveAllFields; +end; + +destructor TUCHistOptions.Destroy; +begin + inherited; +end; + +//------------------------------------------------------------------------------// + +{ TUCTableHistorico } + +procedure TUCTableHistorico.Assign(Source: TPersistent); +begin + if Source is TUCTableHistorico then + begin + Self.FieldApplicationID := TUCTableHistorico(Source).FieldApplicationID; + Self.FieldUserID := TUCTableHistorico(Source).FieldUserID; + Self.FieldEventDate := TUCTableHistorico(Source).FieldEventDate; + Self.TableName := TUCTableHistorico(Source).TableName; + Self.FieldForm := TUCTableHistorico(Source).FieldForm; + Self.FieldEvent := TUCTableHistorico(Source).FieldEvent; + Self.FieldObs := TUCTableHistorico(Source).FieldObs; + Self.FieldCaptionForm := TUCTableHistorico(Source).FieldCaptionForm; + Self.FieldEventTime := TUCTableHistorico(Source).FieldEventTime; + Self.FieldTableName := TUCTableHistorico(Source).FieldTableName; + end + else + inherited; +end; + +constructor TUCTableHistorico.Create(AOwner: TComponent); +begin +end; + +destructor TUCTableHistorico.Destroy; +begin + inherited; +end; + +{ TUCUserHistory } + +procedure TUCUserHistory.Assign(Source: TPersistent); +begin + if Source is TUCUserHistory then + begin + Self.MenuItem := TUCUserHistory(Source).MenuItem; + Self.Action := TUCUserHistory(Source).Action; + end + else + inherited; +end; + +constructor TUCUserHistory.Create(AOwner: TComponent); +begin + inherited Create; +end; + +destructor TUCUserHistory.Destroy; +begin + inherited; +end; + +procedure TUCUserHistory.SetAction(const Value: TAction); +begin + FAction := Value; + if Value <> nil then + begin + Self.MenuItem := nil; + Value.FreeNotification(Self.Action); + end; +end; + +procedure TUCUserHistory.SetMenuItem(const Value: TMenuItem); +begin + FMenuItem := Value; + if Value <> nil then + begin + Self.Action := nil; + Value.FreeNotification(Self.MenuItem); + end; +end; + +end. diff --git a/internal/2.31RC1/1/UCHistorico/UcHistReg.dcr b/internal/2.31RC1/1/UCHistorico/UcHistReg.dcr new file mode 100644 index 0000000000000000000000000000000000000000..3b81f6ee85e7846b1c92b0d023de2b83958c613e GIT binary patch literal 4912 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 J=KjC?{{yaVNYwxU literal 0 HcmV?d00001 diff --git a/internal/2.31RC1/1/UCHistorico/dcr/UCHist_DataSet.bmp b/internal/2.31RC1/1/UCHistorico/dcr/UCHist_DataSet.bmp new file mode 100644 index 0000000000000000000000000000000000000000..384b3e87835788e398b64ef2f825981b33960f08 GIT binary patch literal 1654 zcmeH{y?2vf6vl6wrlM9FKPqU6il0Riq@ZXJ(+FA=?ZU{)$jCV^tc;8qvu4bgF>A(* z8M8QK?4J-HNJ!)A<~e;izue1n-}m7mCnxs#uRSW3u}gG}j$czDrqH`PM8DY;RDlE- zh9REkNs>e$k!`nu4LtIIpH~m~9-Xv(@_nCz5Cj2gKp}{L?}rrR1R;eW2vI?l6XjZj z`v^UV(MK`GAc|2z0@A!sVw_E&CD0ORs7XRuiat$IGfK0JvYcKZm&1f;7QPP`ZKBxJ7P9!bJ zixw1T7t|YE&=OaaEvY|3x4h!&JNW;913&(0$*RDyEXxU!s>>S(nbSm;6BWa>EM1Z1 za&lcblQ|Ast*+g%49#4hfUaJeC&Z)chsXeiq2S-og)2-EN zyL;~U)u8t1ta+c4a($K4b-(5lhVMSRQv?!ZMb(hgE36n^7jLcJtB6@Xm*MeT9yyH; zDeZSJw)KO$*wV~Sp8w;vey`qWX-22|Wh;N~fBRvhr5aY{ljD5bow> + + + + + + + + + + + pckHistorico.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + UserControl Historico + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/internal/2.31RC1/1/UCHistorico/pckHistorico.dpk b/internal/2.31RC1/1/UCHistorico/pckHistorico.dpk new file mode 100644 index 0000000..90f248d --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/pckHistorico.dpk @@ -0,0 +1,52 @@ +package pckHistorico; + +{$I 'UserControl.inc'} +{$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} +{$DESCRIPTION 'UserControl Historico'} +{$IMPLICITBUILD OFF} + +requires + rtl, + dbrtl, + vcl, + vclactnband, + vcldb, + VclSmp, + pckMD5, + pckUCDataConnector, + pckUserControl_RT, + vclx, + {$IFDEF DELPHI12} + vclimg; + {$ELSE} + vcljpg; + {$ENDIF} + +contains + UCHist_Base in 'UCHist_Base.pas', + UCHistDataset in 'UCHistDataset.pas', + UCHist_Type in 'UCHist_Type.pas', + UCHist_Form in 'UCHist_Form.pas'; + +end. diff --git a/internal/2.31RC1/1/UCHistorico/pckHistorico.dproj b/internal/2.31RC1/1/UCHistorico/pckHistorico.dproj new file mode 100644 index 0000000..0159d2f --- /dev/null +++ b/internal/2.31RC1/1/UCHistorico/pckHistorico.dproj @@ -0,0 +1,124 @@ + + + {db94e44b-94f7-4352-ace8-34ac2dcbb2ce} + pckHistorico.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckHistorico.bpl + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + false + UserControl Historico + C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\pckHistorico.bpl + true + true + 1 + true + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + + + 7.0 + DEBUG;$(DCC_Define) + + + Delphi.Personality.12 + Package + + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + pckHistorico.dpk + + + + 12 + + + + MainSource + + + + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + + diff --git a/internal/2.31RC1/1/UCHistorico/pckHistorico.res b/internal/2.31RC1/1/UCHistorico/pckHistorico.res new file mode 100644 index 0000000000000000000000000000000000000000..fd84fb872882577a463353799f7f7e527c393530 GIT binary patch literal 5056 zcmbW5zi%8>5XZ-fC8)p!NV zkN&^-fRWhg8A~4RqV@S+yxL}NtvF20`E*ZgPTWGpq}}z=SL|s|V$4fk@+6nGZY;*5 z7VrX_IxKO}nB#-pv}Py5K1mL0E9bfg9IRc8wf5Qyhw;D*4tm@f zC(}!=k-%l za=H%U$>%x8Iyk20=HgGjzL%z&IB{T&xJ=EtcB;MN(cOZ(Mt|fDJoYg-L|uKZ0aI3d zXbKMVrtGt{I$nC}Pdod?+hi>3AG)bgGhm~K@z}qDT}w;V$Rclxu3ByULbaVKu2P+4 z?1^cv?O02UO!?>ZyI2oC7-$aNt@Vn@e&8#2BNOh???)bw{W+4sZf9u*qBS700;;lXDPlYFv2E-}Jy z8afBCv03cDV~RVRXv5WOAS^$N;ufC%X>HYB>%ie19XpZf4l z2al0|@^UXdV7NBr2RH5(>Z|t+{HZBloZ+IoE?j2ftX#h5MSt#*?-O-aEI8=$y%#_3 zTz^l6%Q)EN@b(&f)_c7x@sq(NOy^JBc%S1A2>pIGz@Z*>*`oz9s(*vl!a?oC55Hc& z*I&6Dvu1C@O!}G2JI8CJxj6Uo!cP61{n#I^1z!ec8uPSy|CVZB_94z4_ZJ)^7x~cd z`>!^7y-v0AD~@^3*#(x*Yi-_*%;oz)+xyLW{5aF-E_+9Q=}&ymUGM`t=G&&6U*(PZ zi<`z03(s!^d>T1dYv6mZDEAv03VzgIeeJCo?`YO0-nC(W;8rP4Ykhy@{XEv?ofL=s zZfDIZzV~(4`FBTR%*OlA&!76#1cM*<7rD@dcIPJT)G)Q?y%4{l#yYIU*I9^r4gJz1 z9P)?8I6vs)HxTc+kE_o;HJnZHA_jc!K)$QUm3&l0Z?kqChv)QjK2Nk?<$Hj3-Zg$E z#L>^aaP#bf<@Zg&%`*r#PjXp@&lqRX>s^iY&blx83f-YS-(B7_um=uJw5i4PVV?Ku zMI44RKLZ0UQ@@N&jmLYI_Q(OO)rT=`-Mf&S*dt>6o~aUV^zpq{aC9E>cVzlJ@1A3o zfclJMiFc|$iSH851{$dwcOrc_`dQNW^tYVvf2qM5=wWE!z!~GLoy8REm^zdEe!$@3 zzlYsNO~`$gCpo<6JUqt>z5|cr@=n6xeAvk^IpAH}8S3D1U8#k1vp1P1^Pbn|dOY=b zA(!K0pC>NYofq%4_{?`!e_Ec^@&3rH*Wll>zhuv3Pi05N4&|})K8O0-0Xs6gh&?rX zNx5GY#!Oh1F#G=KV*i?%?aKQ875muUx9j$a>;t