From 60a3539bd86961c217e1f8c32769c9d4de5d30e8 Mon Sep 17 00:00:00 2001 From: david Date: Fri, 27 Feb 2009 17:12:01 +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@16 970f2627-a9d2-4748-b3d4-b5283c4fe7db --- .../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 official/2.31RC1/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 + official/2.31RC1/Packages/pckMD5.bdsproj | 179 + official/2.31RC1/Packages/pckMD5.dpk | 35 + official/2.31RC1/Packages/pckMD5.dproj | 115 + official/2.31RC1/Packages/pckMD5.res | Bin 0 -> 5056 bytes .../Packages/pckUCDataConnector.bdsproj | 181 + .../2.31RC1/Packages/pckUCDataConnector.dpk | 37 + .../2.31RC1/Packages/pckUCDataConnector.dproj | 117 + .../2.31RC1/Packages/pckUCDataConnector.res | Bin 0 -> 5056 bytes official/2.31RC1/Packages/pckUCGlobal.bdsproj | 175 + official/2.31RC1/Packages/pckUCGlobal.dpk | 40 + official/2.31RC1/Packages/pckUCGlobal.res | Bin 0 -> 4396 bytes .../Packages/pckUserControl_DT.bdsproj | 178 + .../2.31RC1/Packages/pckUserControl_DT.dpk | 54 + .../2.31RC1/Packages/pckUserControl_DT.dproj | 125 + .../2.31RC1/Packages/pckUserControl_DT.res | Bin 0 -> 5184 bytes .../Packages/pckUserControl_RT.bdsproj | 180 + .../2.31RC1/Packages/pckUserControl_RT.dpk | 65 + .../2.31RC1/Packages/pckUserControl_RT.dproj | 153 + .../2.31RC1/Packages/pckUserControl_RT.res | Bin 0 -> 5056 bytes official/2.31RC1/Source/Dcr/UCADOConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCASTAConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCAppMessage.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCBDEConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCControls.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCDBISAMConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCDBXConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCFIBConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCIBOConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCIBXConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCIdle.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCMDOConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCMail.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCMain.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCMidasConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCMyDACConn.bmp | Bin 0 -> 1782 bytes .../2.31RC1/Source/Dcr/UCMySQLDACConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCReg.dcr | Bin 0 -> 38300 bytes official/2.31RC1/Source/Dcr/UCReg.rc | 21 + official/2.31RC1/Source/Dcr/UCSettings.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCXp.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UCZEOSConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/UODACConn.bmp | Bin 0 -> 1782 bytes official/2.31RC1/Source/Dcr/make.bat | 1 + official/2.31RC1/Source/EnvMsgForm_U.dfm | 343 ++ official/2.31RC1/Source/EnvMsgForm_U.pas | 116 + official/2.31RC1/Source/IncPerfil_U.dfm | 307 + official/2.31RC1/Source/IncPerfil_U.pas | 111 + official/2.31RC1/Source/IncUser_U.dfm | 485 ++ official/2.31RC1/Source/IncUser_U.pas | 245 + official/2.31RC1/Source/LoginWindow_U.dfm | 260 + official/2.31RC1/Source/LoginWindow_U.pas | 142 + official/2.31RC1/Source/MsgRecForm_U.dfm | 263 + official/2.31RC1/Source/MsgRecForm_U.pas | 77 + official/2.31RC1/Source/MsgsForm_U.dfm | 1153 ++++ official/2.31RC1/Source/MsgsForm_U.pas | 346 ++ official/2.31RC1/Source/SenhaForm_U.dfm | 73 + official/2.31RC1/Source/SenhaForm_U.pas | 95 + official/2.31RC1/Source/TrocaSenha_U.dfm | 350 ++ official/2.31RC1/Source/TrocaSenha_U.pas | 89 + official/2.31RC1/Source/UCALSMTPClient.pas | 3770 ++++++++++++ official/2.31RC1/Source/UCAbout.dfm | 835 +++ official/2.31RC1/Source/UCAbout.pas | 115 + official/2.31RC1/Source/UCAboutXpStyle_U.dfm | 768 +++ official/2.31RC1/Source/UCAboutXpStyle_U.pas | 46 + official/2.31RC1/Source/UCBase.pas | 4080 +++++++++++++ official/2.31RC1/Source/UCDataConnector.pas | 25 + official/2.31RC1/Source/UCDataInfo.pas | 247 + official/2.31RC1/Source/UCEMailForm_U.dfm | 151 + official/2.31RC1/Source/UCEMailForm_U.pas | 34 + official/2.31RC1/Source/UCEditorForm_U.dfm | 1585 +++++ official/2.31RC1/Source/UCEditorForm_U.pas | 469 ++ official/2.31RC1/Source/UCIdle.pas | 138 + official/2.31RC1/Source/UCLock.res | Bin 0 -> 3172 bytes official/2.31RC1/Source/UCMail.pas | 317 + official/2.31RC1/Source/UCMessages.pas | 1137 ++++ official/2.31RC1/Source/UCObjSel_U.dfm | Bin 0 -> 17579 bytes official/2.31RC1/Source/UCObjSel_U.pas | 334 ++ official/2.31RC1/Source/UCReg.dcr | Bin 0 -> 38300 bytes official/2.31RC1/Source/UCReg.pas | 348 ++ official/2.31RC1/Source/UCSettings.pas | 1425 +++++ official/2.31RC1/Source/UCXPSettings.pas | 446 ++ official/2.31RC1/Source/UCXPStyle.pas | 5183 +++++++++++++++++ official/2.31RC1/Source/UcConsts_Language.pas | 971 +++ official/2.31RC1/Source/UserControl.inc | 192 + official/2.31RC1/Source/UserPermis_U.dfm | 636 ++ official/2.31RC1/Source/UserPermis_U.pas | 750 +++ official/2.31RC1/Source/md5.pas | 401 ++ official/2.31RC1/Source/pUCFrame_Log.dfm | 593 ++ official/2.31RC1/Source/pUCFrame_Log.pas | 305 + official/2.31RC1/Source/pUCFrame_Profile.dfm | 360 ++ official/2.31RC1/Source/pUCFrame_Profile.pas | 246 + official/2.31RC1/Source/pUCFrame_User.dfm | 440 ++ official/2.31RC1/Source/pUCFrame_User.pas | 326 ++ official/2.31RC1/Source/pUCGeral.dfm | 533 ++ official/2.31RC1/Source/pUCGeral.pas | 217 + .../2.31RC1/Source/pUcFrame_UserLogged.dfm | 222 + .../2.31RC1/Source/pUcFrame_UserLogged.pas | 130 + .../2.31RC1/UCHistorico/GHistorico.bdsgroup | 19 + .../2.31RC1/UCHistorico/GHistorico.groupproj | 31 + .../2.31RC1/UCHistorico/UCHistDataset.pas | 266 + official/2.31RC1/UCHistorico/UCHist_Base.pas | 206 + official/2.31RC1/UCHistorico/UCHist_Form.dfm | 1311 +++++ official/2.31RC1/UCHistorico/UCHist_Form.pas | 318 + official/2.31RC1/UCHistorico/UCHist_Type.pas | 278 + official/2.31RC1/UCHistorico/UcHistReg.dcr | Bin 0 -> 4912 bytes .../UCHistorico/dcr/UCControlHistorico.bmp | Bin 0 -> 3126 bytes .../UCHistorico/dcr/UCHist_DataSet.bmp | Bin 0 -> 1654 bytes official/2.31RC1/UCHistorico/dcr/UcHistReg.rc | 2 + official/2.31RC1/UCHistorico/dcr/make.bat | 1 + .../2.31RC1/UCHistorico/pckHistorico.bdsproj | 175 + official/2.31RC1/UCHistorico/pckHistorico.dpk | 52 + .../2.31RC1/UCHistorico/pckHistorico.dproj | 124 + official/2.31RC1/UCHistorico/pckHistorico.res | Bin 0 -> 5056 bytes official/2.31RC1/clean.bat | 7 + 203 files changed, 42246 insertions(+) create mode 100644 official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj create mode 100644 official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj create mode 100644 official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res create mode 100644 official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj create mode 100644 official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res create mode 100644 official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConn.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas create mode 100644 official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj create mode 100644 official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk create mode 100644 official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj create mode 100644 official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.res create mode 100644 official/2.31RC1/Packages/D2009.groupproj create mode 100644 official/2.31RC1/Packages/ModelSupport_pckMD5/default.txaPackage create mode 100644 official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig create mode 100644 official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage create mode 100644 official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig create mode 100644 official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage create mode 100644 official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig create mode 100644 official/2.31RC1/Packages/pckMD5.bdsproj create mode 100644 official/2.31RC1/Packages/pckMD5.dpk create mode 100644 official/2.31RC1/Packages/pckMD5.dproj create mode 100644 official/2.31RC1/Packages/pckMD5.res create mode 100644 official/2.31RC1/Packages/pckUCDataConnector.bdsproj create mode 100644 official/2.31RC1/Packages/pckUCDataConnector.dpk create mode 100644 official/2.31RC1/Packages/pckUCDataConnector.dproj create mode 100644 official/2.31RC1/Packages/pckUCDataConnector.res create mode 100644 official/2.31RC1/Packages/pckUCGlobal.bdsproj create mode 100644 official/2.31RC1/Packages/pckUCGlobal.dpk create mode 100644 official/2.31RC1/Packages/pckUCGlobal.res create mode 100644 official/2.31RC1/Packages/pckUserControl_DT.bdsproj create mode 100644 official/2.31RC1/Packages/pckUserControl_DT.dpk create mode 100644 official/2.31RC1/Packages/pckUserControl_DT.dproj create mode 100644 official/2.31RC1/Packages/pckUserControl_DT.res create mode 100644 official/2.31RC1/Packages/pckUserControl_RT.bdsproj create mode 100644 official/2.31RC1/Packages/pckUserControl_RT.dpk create mode 100644 official/2.31RC1/Packages/pckUserControl_RT.dproj create mode 100644 official/2.31RC1/Packages/pckUserControl_RT.res create mode 100644 official/2.31RC1/Source/Dcr/UCADOConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCASTAConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCAppMessage.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCBDEConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCControls.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCDBISAMConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCDBXConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCFIBConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCIBOConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCIBXConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCIdle.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCMDOConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCMail.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCMain.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCMidasConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCMyDACConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCMySQLDACConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCReg.dcr create mode 100644 official/2.31RC1/Source/Dcr/UCReg.rc create mode 100644 official/2.31RC1/Source/Dcr/UCSettings.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCXp.bmp create mode 100644 official/2.31RC1/Source/Dcr/UCZEOSConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/UODACConn.bmp create mode 100644 official/2.31RC1/Source/Dcr/make.bat create mode 100644 official/2.31RC1/Source/EnvMsgForm_U.dfm create mode 100644 official/2.31RC1/Source/EnvMsgForm_U.pas create mode 100644 official/2.31RC1/Source/IncPerfil_U.dfm create mode 100644 official/2.31RC1/Source/IncPerfil_U.pas create mode 100644 official/2.31RC1/Source/IncUser_U.dfm create mode 100644 official/2.31RC1/Source/IncUser_U.pas create mode 100644 official/2.31RC1/Source/LoginWindow_U.dfm create mode 100644 official/2.31RC1/Source/LoginWindow_U.pas create mode 100644 official/2.31RC1/Source/MsgRecForm_U.dfm create mode 100644 official/2.31RC1/Source/MsgRecForm_U.pas create mode 100644 official/2.31RC1/Source/MsgsForm_U.dfm create mode 100644 official/2.31RC1/Source/MsgsForm_U.pas create mode 100644 official/2.31RC1/Source/SenhaForm_U.dfm create mode 100644 official/2.31RC1/Source/SenhaForm_U.pas create mode 100644 official/2.31RC1/Source/TrocaSenha_U.dfm create mode 100644 official/2.31RC1/Source/TrocaSenha_U.pas create mode 100644 official/2.31RC1/Source/UCALSMTPClient.pas create mode 100644 official/2.31RC1/Source/UCAbout.dfm create mode 100644 official/2.31RC1/Source/UCAbout.pas create mode 100644 official/2.31RC1/Source/UCAboutXpStyle_U.dfm create mode 100644 official/2.31RC1/Source/UCAboutXpStyle_U.pas create mode 100644 official/2.31RC1/Source/UCBase.pas create mode 100644 official/2.31RC1/Source/UCDataConnector.pas create mode 100644 official/2.31RC1/Source/UCDataInfo.pas create mode 100644 official/2.31RC1/Source/UCEMailForm_U.dfm create mode 100644 official/2.31RC1/Source/UCEMailForm_U.pas create mode 100644 official/2.31RC1/Source/UCEditorForm_U.dfm create mode 100644 official/2.31RC1/Source/UCEditorForm_U.pas create mode 100644 official/2.31RC1/Source/UCIdle.pas create mode 100644 official/2.31RC1/Source/UCLock.res create mode 100644 official/2.31RC1/Source/UCMail.pas create mode 100644 official/2.31RC1/Source/UCMessages.pas create mode 100644 official/2.31RC1/Source/UCObjSel_U.dfm create mode 100644 official/2.31RC1/Source/UCObjSel_U.pas create mode 100644 official/2.31RC1/Source/UCReg.dcr create mode 100644 official/2.31RC1/Source/UCReg.pas create mode 100644 official/2.31RC1/Source/UCSettings.pas create mode 100644 official/2.31RC1/Source/UCXPSettings.pas create mode 100644 official/2.31RC1/Source/UCXPStyle.pas create mode 100644 official/2.31RC1/Source/UcConsts_Language.pas create mode 100644 official/2.31RC1/Source/UserControl.inc create mode 100644 official/2.31RC1/Source/UserPermis_U.dfm create mode 100644 official/2.31RC1/Source/UserPermis_U.pas create mode 100644 official/2.31RC1/Source/md5.pas create mode 100644 official/2.31RC1/Source/pUCFrame_Log.dfm create mode 100644 official/2.31RC1/Source/pUCFrame_Log.pas create mode 100644 official/2.31RC1/Source/pUCFrame_Profile.dfm create mode 100644 official/2.31RC1/Source/pUCFrame_Profile.pas create mode 100644 official/2.31RC1/Source/pUCFrame_User.dfm create mode 100644 official/2.31RC1/Source/pUCFrame_User.pas create mode 100644 official/2.31RC1/Source/pUCGeral.dfm create mode 100644 official/2.31RC1/Source/pUCGeral.pas create mode 100644 official/2.31RC1/Source/pUcFrame_UserLogged.dfm create mode 100644 official/2.31RC1/Source/pUcFrame_UserLogged.pas create mode 100644 official/2.31RC1/UCHistorico/GHistorico.bdsgroup create mode 100644 official/2.31RC1/UCHistorico/GHistorico.groupproj create mode 100644 official/2.31RC1/UCHistorico/UCHistDataset.pas create mode 100644 official/2.31RC1/UCHistorico/UCHist_Base.pas create mode 100644 official/2.31RC1/UCHistorico/UCHist_Form.dfm create mode 100644 official/2.31RC1/UCHistorico/UCHist_Form.pas create mode 100644 official/2.31RC1/UCHistorico/UCHist_Type.pas create mode 100644 official/2.31RC1/UCHistorico/UcHistReg.dcr create mode 100644 official/2.31RC1/UCHistorico/dcr/UCControlHistorico.bmp create mode 100644 official/2.31RC1/UCHistorico/dcr/UCHist_DataSet.bmp create mode 100644 official/2.31RC1/UCHistorico/dcr/UcHistReg.rc create mode 100644 official/2.31RC1/UCHistorico/dcr/make.bat create mode 100644 official/2.31RC1/UCHistorico/pckHistorico.bdsproj create mode 100644 official/2.31RC1/UCHistorico/pckHistorico.dpk create mode 100644 official/2.31RC1/UCHistorico/pckHistorico.dproj create mode 100644 official/2.31RC1/UCHistorico/pckHistorico.res create mode 100644 official/2.31RC1/clean.bat diff --git a/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConn.pas b/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConn.pas new file mode 100644 index 0000000..da90afa --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConnReg.pas b/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConnReg.pas new file mode 100644 index 0000000..32c5c62 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj new file mode 100644 index 0000000..1b6a6b0 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk new file mode 100644 index 0000000..92d149f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas b/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas new file mode 100644 index 0000000..0febf8e --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas b/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas new file mode 100644 index 0000000..d0a63fd --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk new file mode 100644 index 0000000..e431c67 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj new file mode 100644 index 0000000..d67206e --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConn.pas b/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConn.pas new file mode 100644 index 0000000..abf4425 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas b/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas new file mode 100644 index 0000000..225400c --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConn.pas b/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConn.pas new file mode 100644 index 0000000..dd1bb92 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas b/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas new file mode 100644 index 0000000..943d623 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj new file mode 100644 index 0000000..017237f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk new file mode 100644 index 0000000..4c1dd8d --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas b/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas new file mode 100644 index 0000000..35e4049 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas b/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas new file mode 100644 index 0000000..cd9fe75 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConn.pas b/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConn.pas new file mode 100644 index 0000000..50e5dc3 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas b/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas new file mode 100644 index 0000000..7aebf23 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj new file mode 100644 index 0000000..2d66f05 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk new file mode 100644 index 0000000..05fa12c --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj new file mode 100644 index 0000000..7f4966a --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConn.pas b/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConn.pas new file mode 100644 index 0000000..557326e --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas b/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas new file mode 100644 index 0000000..f7387bb --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConn.pas b/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConn.pas new file mode 100644 index 0000000..42a11f8 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas b/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas new file mode 100644 index 0000000..f8c4eb9 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk b/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk new file mode 100644 index 0000000..6671069 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConn.pas b/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConn.pas new file mode 100644 index 0000000..642fa7e --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas b/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas new file mode 100644 index 0000000..7eb0997 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj new file mode 100644 index 0000000..c59c976 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk new file mode 100644 index 0000000..4511021 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConn.pas b/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConn.pas new file mode 100644 index 0000000..0f07703 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas new file mode 100644 index 0000000..7b41340 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj new file mode 100644 index 0000000..d712089 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk new file mode 100644 index 0000000..6e8946f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas new file mode 100644 index 0000000..9bbf9b1 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj new file mode 100644 index 0000000..1b24c02 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk new file mode 100644 index 0000000..adaef7f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj new file mode 100644 index 0000000..fac6a75 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas b/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas new file mode 100644 index 0000000..cd66940 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas new file mode 100644 index 0000000..d73c134 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk new file mode 100644 index 0000000..82fd28b --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj new file mode 100644 index 0000000..388d778 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj new file mode 100644 index 0000000..15dbba3 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj new file mode 100644 index 0000000..ed35f99 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk new file mode 100644 index 0000000..fec983f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas new file mode 100644 index 0000000..2e7c007 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj new file mode 100644 index 0000000..afe1c73 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk new file mode 100644 index 0000000..39fe7be --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj new file mode 100644 index 0000000..fde8cb2 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas new file mode 100644 index 0000000..8a71536 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk new file mode 100644 index 0000000..f08bd48 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConnReg.pas b/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConnReg.pas new file mode 100644 index 0000000..3ef86c9 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj new file mode 100644 index 0000000..652f77c --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.dpk b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.dpk new file mode 100644 index 0000000..4ea5346 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConn.pas b/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConn.pas new file mode 100644 index 0000000..240e1ea --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas b/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas new file mode 100644 index 0000000..c706578 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj new file mode 100644 index 0000000..47c867d --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk new file mode 100644 index 0000000..2d94322 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas b/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas new file mode 100644 index 0000000..00a0d31 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj new file mode 100644 index 0000000..8dae755 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk new file mode 100644 index 0000000..0f15e5d --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj new file mode 100644 index 0000000..e87a3c5 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.res b/official/2.31RC1/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/official/2.31RC1/Packages/D2009.groupproj b/official/2.31RC1/Packages/D2009.groupproj new file mode 100644 index 0000000..801c9f8 --- /dev/null +++ b/official/2.31RC1/Packages/D2009.groupproj @@ -0,0 +1,74 @@ + + + {1c592c69-53bd-49f1-a789-a4ac64f25b09} + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/official/2.31RC1/Packages/ModelSupport_pckMD5/default.txaPackage b/official/2.31RC1/Packages/ModelSupport_pckMD5/default.txaPackage new file mode 100644 index 0000000..e69de29 diff --git a/official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig b/official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage b/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage new file mode 100644 index 0000000..e69de29 diff --git a/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig b/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage b/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage new file mode 100644 index 0000000..e69de29 diff --git a/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig b/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig new file mode 100644 index 0000000..c8f2834 --- /dev/null +++ b/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/official/2.31RC1/Packages/pckMD5.bdsproj b/official/2.31RC1/Packages/pckMD5.bdsproj new file mode 100644 index 0000000..c4ecafc --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/pckMD5.dpk b/official/2.31RC1/Packages/pckMD5.dpk new file mode 100644 index 0000000..0c8a0dc --- /dev/null +++ b/official/2.31RC1/Packages/pckMD5.dpk @@ -0,0 +1,35 @@ +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} +{%TogetherDiagram 'ModelSupport_pckMD5\default.txaPackage'} + +requires + rtl; + +contains + md5 in '..\Source\md5.pas'; + +end. diff --git a/official/2.31RC1/Packages/pckMD5.dproj b/official/2.31RC1/Packages/pckMD5.dproj new file mode 100644 index 0000000..93ff37f --- /dev/null +++ b/official/2.31RC1/Packages/pckMD5.dproj @@ -0,0 +1,115 @@ + + + {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 + + + 00400000 + false + MD5SUM Package + C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\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/official/2.31RC1/Packages/pckMD5.res b/official/2.31RC1/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/official/2.31RC1/Packages/pckUCDataConnector.dpk b/official/2.31RC1/Packages/pckUCDataConnector.dpk new file mode 100644 index 0000000..ea7b6c9 --- /dev/null +++ b/official/2.31RC1/Packages/pckUCDataConnector.dpk @@ -0,0 +1,37 @@ +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} +{%TogetherDiagram 'ModelSupport_pckUCDataConnector\default.txaPackage'} + +requires + rtl, + dbrtl; + +contains + UCDataConnector in '..\Source\UCDataConnector.pas'; + +end. diff --git a/official/2.31RC1/Packages/pckUCDataConnector.dproj b/official/2.31RC1/Packages/pckUCDataConnector.dproj new file mode 100644 index 0000000..ad8a57c --- /dev/null +++ b/official/2.31RC1/Packages/pckUCDataConnector.dproj @@ -0,0 +1,117 @@ + + + {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 + + + C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\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/official/2.31RC1/Packages/pckUCDataConnector.res b/official/2.31RC1/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/official/2.31RC1/Packages/pckUCGlobal.dpk b/official/2.31RC1/Packages/pckUCGlobal.dpk new file mode 100644 index 0000000..80bd32b --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/pckUCGlobal.res b/official/2.31RC1/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/official/2.31RC1/Packages/pckUserControl_DT.bdsproj b/official/2.31RC1/Packages/pckUserControl_DT.bdsproj new file mode 100644 index 0000000..b91ca3f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/pckUserControl_DT.dpk b/official/2.31RC1/Packages/pckUserControl_DT.dpk new file mode 100644 index 0000000..14f1c8b --- /dev/null +++ b/official/2.31RC1/Packages/pckUserControl_DT.dpk @@ -0,0 +1,54 @@ +package pckUserControl_DT; + +{$I '..\Source\UserControl.inc'} +{$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, + {$IFDEF DELPHI12} + vclimg + {$ELSE} + vcljpg + {$ENDIF} +; + +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/official/2.31RC1/Packages/pckUserControl_DT.dproj b/official/2.31RC1/Packages/pckUserControl_DT.dproj new file mode 100644 index 0000000..c115bd4 --- /dev/null +++ b/official/2.31RC1/Packages/pckUserControl_DT.dproj @@ -0,0 +1,125 @@ + + + {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 + + + 00400000 + true + User Control Package 2 + C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\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 + 1 + 0 + 0 + 0 + False + False + False + False + False + 1046 + 1252 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + WL Decision Cube Components + + + pckUserControl_DT.dpk + + + + 12 + + + + MainSource + + + + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + diff --git a/official/2.31RC1/Packages/pckUserControl_DT.res b/official/2.31RC1/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/official/2.31RC1/Packages/pckUserControl_RT.bdsproj b/official/2.31RC1/Packages/pckUserControl_RT.bdsproj new file mode 100644 index 0000000..84dc8ef --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/pckUserControl_RT.dpk b/official/2.31RC1/Packages/pckUserControl_RT.dpk new file mode 100644 index 0000000..9c71e00 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Packages/pckUserControl_RT.dproj b/official/2.31RC1/Packages/pckUserControl_RT.dproj new file mode 100644 index 0000000..06cd058 --- /dev/null +++ b/official/2.31RC1/Packages/pckUserControl_RT.dproj @@ -0,0 +1,153 @@ + + + {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 + + + C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\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/official/2.31RC1/Packages/pckUserControl_RT.res b/official/2.31RC1/Packages/pckUserControl_RT.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>;tK|%i<{z3R{)sw~31j%koC1rOsOTb(k#*vb@^nIZj1@$XQKy?l zEYEd?v|USqLTPJDUp(4UN_%N34;#SR6;=wD*DBDpqZHu=+E3w1?^pt;9rCB(*1E@FA54$!hOy2*w_<-yZ1QPu5a6g-nzHD6L=B*!xyL# z2UcfH*Nz4W(@u26zYYO4;)xrvFFTMvbbN>reGoFNj}NU`CIX;%xCoH(a7V$btMC{{ z`Qtg5>V7X$T!@E2Pbmhk`8hiPrXDbI(Ruti2uOPf!YFaruj5b^3S~oe%)@_&w&>aWk&lsf$Lc?41kjM z?lZJ^p5EQ@VVsf1GDzxb3Z;ZN2*#OLz^g8$1*ix16f|HR@rOZ%abU`bd2wk%JE#5w z_|#)hwj6)fVH&I)UcBpj*Z{h*KljL5E^nvSHZkk!5WOBa z?hU7eSsTD^sEp++?k_0f%92uEQxk_o%1Ji%gBl9G#~p_cIB&dT5@u6Vj^&o+fJRl zdgM4gB%Bo-&JKRRB_xI%3fM)9nNf&SvuVQo^RW%;&}P%6+)CAV=lgTAC0Uv2BxX_t zlm2xo6L+R!k5kc0jIIw2YYmRP9v;~e9?p67M12TwmS_J0)HsiOv#hk_m)0oWRAWJ< zjzG}l{)ZCa)7U8~tc-MSadAyv9@Jw(jh}L&-mE)9;MU}}R=-6F1Ber~ug%+_9%Wx`q+lZd+u;SXS zNvxSuR0Ca(-1%qCj~W#TH&JxmX0!M7fH?*R(2cYtWzlFR6uri%j>(Sv?kJxiOtBDG~^^%0h}G*Hiq(71&xaJGb}`mMiz@rD7@fwI{h37MweZw z;+tnV=1(a70MY)v07*bStcPBJaZnW1BS>dAUnCZHb$9!GzWp2w1z#HsnAk1wyKsDX zx3=6a_;)sMFEbmfrE*4CC+DJ_gbTOOrdDfCBwv<#ZUu>4@WI$q^b+EEI4;KzPTh9mLj+>>*E=X*c* z^!DECciMi)ZKwHwe;@jryZyjUfrg$0-qP1O+0)MZ`YnhRIbk3sI1f9U2$}xQjlCRG9Rmd7@Dt#n z0FM6~tWOU0SLD0a99vtP1ZQz{kdR^R!o8eHq!k3L6EDH;!CZ#-!Nxd$DdjZ7`@sAI zL+8x|$hKbznK2@e0vQY!%maHlD^nPxz@Q|^HeCt;0!+CZUoVPMzv{i-%OnEIY-`%7=1qCudzTMI#_rVCGjf4n%iIy>2l4rCil9NpNO z(}{zOiu$+!ul=pydPXFxp_Ek)GMHtv*?5RKsC)W&PBo*jlv`AUXtltxFI$_rh5Ojw zN;GHI{(XTYH#4iQw6u~&OO8%+XB&@X)zU(LE({7{(doeXfcoy?#8;j%_&9Ft9qrR% zdQEjpXMlY4ZJOe@xO7>3d~<9}Rm?@-TI0um$ZlSUW(5bQk;%Xbt_nPL>*%L!4-(Iv z#CQL!+{2&l3E1gjBPTUf#b-4nCj=C$Jj?Xg5_6TmB(z_QZ;p$Nrg6_vx$N)=ZfFQ~ zheK`6@Vo8lRpIW#B>9w+NR{t>e%k{$Goudx)mJAN$#|xq^YTmmoH0bv@Q;3u({dX(qfiMB^(ZL;4hGwRcFiCLCo$m#i}!Te^#k#mgg)u z%3>Z;78hyR?0%^f>*|_7kO`#{6N`uWJgmNcT&?aC2#~fmoWn;g=WEQN)#h`&p+JU? zEk{-t=LuAAW5bHYvV>vdO-*2v3WcSo=aIoMjiTckjaDdJwb_6(XLnwbVNnf}QT3By zwHTReiY;$<*p>*?ta-c4vs# z7+PVB5@8Xdhd=TLNwi8QJchO<2Rmig1lM&Eapeu_pi()kR^M-Fg;PY&$aFlp8o;qR zUFjWWG8-kAAwRH?Q}h<#Y`E5O6j2o%RQx={>IjPRczjCguU4xShS2c+>7B7fNJh?A z8ow=Q2Z-jMDM$h8X+7)|oMW+AvO1b{h-=JOzGpbHn9a zTeI8X?yM}#a7*%}a=E;%P1mdM(V@;KmlTvx&;PRS9$kk@DU*206Q?*{RJ>>E5Y Hof!TLo!+O0 literal 0 HcmV?d00001 diff --git a/official/2.31RC1/Source/Dcr/UCAppMessage.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCBDEConn.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCControls.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCDBISAMConn.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCFIBConn.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCIBXConn.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCMain.bmp b/official/2.31RC1/Source/Dcr/UCMain.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a9104008dccf973798406694a7ed5812e4dacfed GIT binary patch literal 1782 zcma)+`BPd~6vyo^{V_lHFQ`i(sBxPLS|t|IAPS;U+~N{7tu`@@5)*Mj>mIj?il~5y zvI{7SxIs{&sh}a&DryobmlsL;?PHJA zUl2quxIX#!`sg(C@R*1DmP@Yd^g#$uS6{fsqV4(o(`VWllYBxys!$0f3PpFVxSc6% zVhq)la4NrIKgjR+=4MMVy}poElS8gZCo*o}?@@5Yq~Jn=A3&^jhd?1KtShE6DAA>O zd^t9vA|$*jSkvEha&lrf=`I|A0#2WbAAcW9eHawS3W#aC`bCEyo{fp%VD$WU;DBdW z{Oiv@AbdfJAlqMsTj+c<9g()QpG?1Q*1W zxKY0z?730EfeivDsfs|U2)bVXj}x$g6`(>SmjjjFW*OHFfpuNE8|8Kd9OxBrvYL~@ z46)h&8rwIFhYk^6zN+@Z7(A^ify)LW0_yko$FM<{s{`jcv>iCCu?7+=Ao{UiWFIC} zhyo|R22Yg1`+MCOpuiPu5PAh||Bp8aoZ02&#MT%>8*J(dv?W00jn;o!Evr2~J~nJm zV~i+Yy=Rcz2PZ(`doaWn|HS$P-MkruXNTOZkL`$r=D7TXbHiun<}4PA*=&9|&cvua zgJnKAJ{sO5iuOUL7Cf-RAIl&vCVmcQ~E9(|k)(|R0Ic2qF zj&5cv_j6Tm^3*>;%vSCJ4Nx~kPH+`J;7BWLn6o}Z2oWXExRN`*pRaj)Tl?;|_ONjB z9ppLV`MV~+5;>&syTh;l>-GYe&ump`t8Ff;I9Lbej!@LC{ zM3ns#7EYhGaLk)eu@XNG@Q&HxnU5l+foS&O)ld zP9I)N;oB0qOL5&MJWKjnQClQagsqZdnPcS*?f>T}K9Vlw%AI-2ogCR#`iO%zuuSTj z$2U&mYGk+?IpKb%#yE>u{oHbL!Tz;o=g!pOm)bV~qz|tq^ezxu4Ph)rICHp@FM%)l zxx%xP@+WJI>4Uq|NBOFk=^_V}VAW-U8ZjB5&9Ubp{_ssvC^L@YbpL5T- zf#)1=dh9>`(0&N-yRY6i_LYan0L(vl8-4c^p?UHDo-Nx33Xl-XJ93hTXidaRA(Jv; z<@uAgaB}J}T%!ISY#I+?*C2Oww^_2ITWuZR$3?$S<2CbOq zP!8*MdQqU)xTxn42L}6UOG-}rb{FL^Zlx4|%My!iA{N@|Rb(+=GU3BUIH;NClV zD2Etx4rW0g;y@-CVCJPZ#D?m-J79IN1P&EcBKR?n>tSi|2}?k2YuaVV2i=wt|BoC_ zVOCXmAQS>;q?ZY;W!kvCX>U#l2Mq@1^lIQ#e0KsiN7;T4#NRnCrvu!=7J;#P%$bHC zL(4-yf3dgsdp{2~Hp=f>evAMInCyZKL^}lH5C<|#zy1`)hdb{BM^I4!nw6gpdRC`| z+3uojXyKzw%f&nb?x9lZw5@}X{8qMQw}F@+)1g!R@_Ylg6AIy3oEU|vS)B^)LOBzM zmEEg;zPqC|j310axm+d|J{XV;X$>$ws8B!`29>%I=qi*d+adzdKW55au(fFBwp}ii zX_T;&f_+~fl?B;X8aefi&5#CFcDtRTHiauK$MV{VRrTcRYPCuQ9LL5gk6iVdxG&Y_ zJ#~Cr$<5EnW!Bfz@c8TTnVux$$GM$&%;l=^@J0dwI7e{rzmxLTp@6}8qi%LYh3FOS zqQPL{?0a}gVN#YLIhmK3(3WsDpwsx-9YM(t@r_YYnGq4diE0ZAD)sq-f-Xq%l4p85%OH)n=&_VXs9Il@PNE~M&j=d1miA0bm z5}W&-_H{SvscB|Zz%!4H*%lX9rY7e&Y=ps>874^X>B4p<{olf_8w!3z-222qo zZA6p$e4{#uAOa3t85HGq1qT&9&rqn=YAF;dHa%l?b=A!Qp@4B|P9d@`owv{Dv vT^U~}6pFc6Qurq2l0A;k{-L-yWP+0!H^|0tkia$wfsKsGWV{(d2gqPf7^7~w z!4}>^>2ABec+=WT&vCuezj3?OCuo*fo3$p>F<$qb`@@fL9ELiY)i{HlWX z07sk}$nt-$^~zW5@B{zF8I^I$_dmz-f4>{KUh(;h5DX~+r@yxJ?$I5TBX4jbJh(BQ zm4UmBhWiU6+DAFSr~B@bW}kz7smrdg0vur>`SrL*IWl6Dj2I0}{&{a+{88X^-MOYL zxM=6V5)8k0kVCIR4nPoHI3Y;%6%vlYE@(bGp@;O@3y_cWY6P4i*?pVhW+GaY0S?Sk z%r( z@^jK7NSsm<8Nz^LG#Y8BE~tHSe`aM_K`FJc5LGIHV_KXSPz#=*yHa)LjLAQrmz{B` zuC$a%BwmP0b3`A#L1QB=t_5VCp#U>jp}av)c&-dE%cac4P!SEQ}T%Rh^c0 zJ1GhB=`yJOn1??q+)Jpwoyf@hINt>z^9KFg7zX*YmgJ3OUhe+(yZrPUq9lSaC54-s z$|DlnC={(gpp!^+LLrYr0S;V&NGCf{fdrMeA1{_2&%4EvRV~gMaFjteC@n5jB1oT5 zh_$tiq3D=YiZwJ0(POc&+dByn9 zj+)U8^@;>zeSJ$46AuQpqZ~F?TRY0*4hV(ae7-riLA%M>+heU zXVgq&x( z#{{u3*-DEoD->v--uvWv&w0yZLBH-<^4Tbato`G+>Ru6_*j*j9x3?sR>~#O- zaL!Frg){vI5#6io=&N@}2B=02GxF*i9)q&qxO<<%K=`S?4g>pZm_onDKrnJM3;iEQ zS`&M~z3eownY;tfAvIUzFHVlYAc})tAUQ-n18GNYDs=irr|yRYvS4ywWt65od*v3LVm9mx@e?E+sM?u}lXNymNX$)>MP!uJV(nKZTtK6nYffe|*- zuZN*Hqt|PZZslMgCSSDgX|(rOU4>%#(Dt0IS z@-CDg+lkd-*L2^Qxl zT)pR>HWTVLf-%0pCx&N7hn8k0@OS3s>Q4{(K0H{NjA)MR3a1EV7-F~E1%%~z$E5$o za(3R8;{1G~vlAT0!dzW(-oFOUI~7M+a>~Pa^2}7q$<7Anb>_?4lb(4X&^Tr`qSD&k zR<3S^c`>UQS|1-@7k36GK)lZR@sn6+I-L&AiL%h3OFsK}UNnIxt;BPGk=Ma&Z(t{f z)+@Co99eQAj5oI%+VWXq)7f~K*sNkGFER?s+~6=97=f3)eM>$43Tb{tG@9_WcQ1Q^ zGd=PLYI>?f!x>+~1XT4GqMFEpi-i-k>r#ZY!MZfQ{|R0!C)v`&r=agcV|fyW@W6E zVaUAII;Kz{#+#dMU0qWq)1<*L*4EZpS-E7lgLB*AN~pKS$i`!;$4`r`^y2=wq9&(( zosvCq^S=o#)oK7boB**S@U(i_SJOiCe z9ODo{*=lg^xmQROH7guc@;qY{VK4{;CFfH=pPQT8z^va37~`}(Ni;w0%%jXK(iQHr?Ld-tFz|?9Pl40VO%2L={oVU_=B1K}E#~Iw+zDf=EUr z=S-7xXlQbiK}01B2+D|Y45-uhH6_pXb%2?@*`2%V_F4W_uj+e$z1Lme`~Ui@WH1kzy;jrQURqU`o>v%?#0-f@2nvnG5fYUU z8J`rF!c5K1&u6hK8(L6P%u&K_aI_5HsqAki9csQPZs(%Zol?wQQfU@a$;fVB6k#gk zZ@SFQ#?&b;HC+sjlUb_y=ZU-KGxtd4SVXZU>V1mUwn}xjinaUXDs5y-0kvyEhWQtX zhVrKzJuh4c^!B*o?-LSoH7YtjEhE3IqPnRK;I=ChcP&UqWhk&;q2|D{2Gd;o$OSAfu<2QhDa{lD@QCz9L#`W%OdzFlo&|nYErv zb!Sx|Hox|Wy2Ii!&TeQ@=ayMoouqfBoSnE5K<(p!QyX0l2N2+|e1y?&wUU>H=lBXwX$+JISV zziCqM=D1tN(OtTs?f<#aeU98NRfizRIw5V^LCqSjIg2ewcVGHJuQ+(8nc5lRi|m)bXz}iMat}!^lpZkajIkmi>88@(rZ)v2aRQ zw8PgjYj|(o*uH{$HhE(JG-nR(${510S#9cL64C%AwoMc%n1~g;z8&~Ts!O*SliM;L9yyvWp*$Z zm=@reyCv%{#z}wF4f)L2m9%>Jipx7V@#FxeliH``)V_-mv|HpH%963DkhWkiFfIIS zBl8o3=<-M>9K5!#xM)Zn6dHlT7)a>@p{BWGp9f23Cl3crD1^7lOhfVOMs=1S2Qqr< z63$v?$rJ>kRH9({wW8sWEYR}VoOku7ZqB<-k$c5=$Iv^WIHVBI8XpRc;HZ82DOJJ~ zrtZ8L98@4U{7~;9Oo8BvwtgJ-Lx6i*HAHT|-`J1%62h%*@ziW^__2QV>OQW)3sAAiJovsG_=}u95aVqWX&G z7R^kxaXDaQZ@Bijrsl~N>W<4)os?A1Dy}@EsPdJPx`VRjv6XA=G}ha$H#xAy!TD@P zelh>Agg{-*jM6{0!swJD24D>5YkZb~BGiLr)Iz1zLZmgW%B%{I)$&@h-c3&5Nx{fo zN!wP*#A++pjM9V%yIi-L*emIsRR9QvVfA2XP=s=v)bfNy%i|X*$4IF}EY=8;!AK7% zgVTx|k1f--RuQD`jZRvIj*1&xd73~C5ZAKgMHrRkvgXTY%~xbD_%d;k3drY*%-YLK zbTf;VsFkKP8SRr*5~WNMvF);)4*zNL)(m3b?!E;$f+xVWZP z3uR@r+Y^pr-qHA>QdyjBFPKjT6p4MC`)+U6YzH+QBFfvdr>NOz{+1{#kH zuT zBKO{X-be~e8jfFn^UjnWv#6#$DK~8k?%EcP1I;q~4k#L=4V6Ik!0EotUAL3VkbM!F z$bC5}1jjqOezglz{Y<=?L#XD7AY;!gtMoqW93J`OMr}#xHjLo)%RQV2LXP1(LU2NI zs&stI^sZFu2UY0>vb8Q|sT}rOe?DnP(k-*(zV)7k$|u5sLlC<9d1!~ch2Y>mZw#*9 z8r`xjrfo}9vvFv>Za{_Rxs>I$UK*$4S2(4tIGqTb(Qz)C;{#;?h2GKb53*mS)bCE~ z-jm+DEA`g)xDJyrj*efs=EdBV&Z#S%)3lEH0*C(q2%rRUa;sYoX7?T{y1OrL7=YVi zS`C7#wLA+|&M{R_$M{Ai3y#U6pwcSa>`O-NO2(}+`?tq;7zNjAdlhS)OY)7)5cLfd z1yx+%>XqMiIHhHGWUX~*>ABdVyowoqX_DQNoQ9ZhU7KQG>z% zb8h@yq%^~vfrGjs{K9Ow(e#8HtF{3+Uz9Evg)kjs&GFFbBkgK0?Y zMjeJa?8Oc6xALq`qAW?Yr>t+G0xIz1 zh_WQVD~>2jQV@q$Leoc-CCT3kGRcyZbQ3avzeHJ*R73u@KtPt1AmzsqWl2s|7kR76 zS$-VILM=&BQ+!IpK~`c(3f>c1$=}VABy35$IxRbUwxl(rWoOTpw1%{-c(x>#SWhP14Bwj`FMp0z!^Z?uNAta!F0mgGq{@7XvtX33T`1q8FRWJ|$@f+e$IOTkt` zOJ-zCS}Q>tax-Qljlhjtz?aiAj||3-nj2|e*1ulO`XH(OPjydz(=z$%qT7NNy-;o( z^>(?F5ObeZI-Z#}w%;N@GUg9gb3Tl&|3k(2pF6leY3ClV>7v~{q1^cL@-c3_$D7nE zT+f3On^ZYxopj;~J`67XRsP@?t*<}6##Jo2MZ*!rjog3}+}ud+)l*OQ>UD0>cTdZo z5G4XD~grB7v2d)1e)5VUF*vpHw)0d_VZ3$%x-GkMrX|7RrtAvPzwOVG}lH;BoKQ zruRP4DsV_oo8xLaC-dmfdc6MWW%QgHCmIg2Lb-AN>DPu)Tm?_=2WHPdQYd#$DgL#a z#he)1pSHOCd@}YY1K#!pae`2SmZVkalQn_dbwS);?0qvwrQPOIp?rY-zeOG~?ufIx zTckRkrkUv>h=USAFRPsEx0|E6|7Fjev*GpvQ)aTA=O6UvEX<}oWaw4oqvthaNt=i124j-k$$!4A$q zTWwyHPlUHCZ737PiL8>M>g>3$Z}*Ph?i(NMnHcWB+jo8FM%z$lV}EOPiqF}ctPFlA zQJk2Y6gAY<`e1B$Vr=;SP(M2>p|_p$_}=iuP|w({j+Ww#sP|P8#ff?Gp%Wv6k0pBdzI$WCA7ob{&D7PDcYQ!zLOz zQCCK~JA2#edYfwoTB}3dPV)B)vQSPe&Pe)tsBiMciKK}+d&Xy)aw>l^84BqYUs>w}cMh6Q8A%%jRSeDCdXXj6h4CF)xjP_n1 z=-{x^qcY>d#efLqM9lG3SFua7Q;V4~1&I-PDY0S@$SH}vDCQPP>_ss*hn)JqV=pe_ z-IH1db?XWT%EwAh<4(DJV)S;NV^XM-(&GW=5l} z;0I8kCv=c#HQL>Y+YTI2%-EQp2qL`tWMM>=1Ki=BR0bR@@GgTfK7 z&z(jVYKDIKPoc|x_U)V31gGJOBMR%hj~3YJLTHP2M_O@iw-|l!Oi>3%vhhMxBRI%L zY5wkRd(9v_8~DKrKM7y)i;GD=0J^r_k!@)2FeVUX!{} zr87yvenHXx{+#-H;5>W$fIn(aP>!i+Iy3%E-#6F!a zgfrbg-)OR>%o7a9Vi^?Y#wNw=Aa;oiOZ)>esD`_xlA z6)qLJn^}f#*>YmzM&N8oG+5;!vm#PzY3$skadTIOOKEya0~RkkQAbVLaiLjddYyN1W^I?5Ym(pfdODj@z*#*2*&F#0l?1hoDc(Sks0C z^~L@&b}8Nm<1fqlE&<4cv7!6J{m`fU%H@GGj;&vv_I2hp`!h3#s;b&jQaGih1ShU(Y!yO$@?%bKUd1Ejuvp+3uFgK^GprAD`@9E>m=n-)4KAYT@(P3keZ%5CxAE#|w+L;`HY)67m z>SpQq4S${)h0Eo~N!0%$+e#e>oyq=4S!Z@&%tnRpij%f=3CI=*cbdw95UKWS$e^t6 ziW8>%b1+7Moz9!d7m50x0|dvT+qb?ePQ1=vGR&8Oi+~fi?oR~g@krly#Yx#HRdmb{ zuOSZyZU7`f_peBMi;})84p9IMKTw_lxheQ;=(3OSKJx0#w_>@G_Z_ds5{}ZM+JStT35gbwody?RQ4Z8E= zW`onkPp>8VQvJ$1uueQT5@M_@XVo_GmQ_~Q)PNFESl7(kPyr12S(;D90Fvc^ltP;DW~6ZAeqI#9v$%!v9>&kM%kwIn}+gH~{igB5Y3Ah*R_ zLR#nVAch+WG4eAZ&vYy+scqnGV?@rre);^#=s?-^ehD{9xKYB55^fZvL7^q0#x6l_ zjNhio~3y&O3ER3n3Aj~deu4$y9jIa>06FnWGdQ6qma4;Rm z8=-xU=O0)Hq2A9PY1PGjRDDqb4TsG5Vg4|~{7WDZ+AKY}MO1UDoQ4y<`rkor5BfTp z+Z8CB;u9uReNh4p2ZSG@_#yny@T^ie;wKvkG7YCW>^z$H6efUUA+$w%Acgl>lp0hy z4F|12s$k~6k`z2UGTDfU;u(FagaB(ejiAK07UR3gMpkJ`6eb&SQHf7g;!~CQR3$!D zp)@G8kQ%9If*?1p!7czAKW3jQdO#-h$Rr+_B*f$%X6G>Of(O7VFdb)jYH61ink6`}d*Se;;qc~BV&7TPjf#4p=kq*e1q`jp)#4_9Asxf zMldIwx^N`ItqQp@=rjt;zS>5$2*)6b^`&ss`>A#3BA$%;upQEHqGG?Arf?Ou}v`oZHoTC?wTdB3uP=i2s)Oa-jfX zl|atmH&8BOsVN*1XiBOHHLyoGCAbh?E^znI7G#UXD2SK^GvB|}3NsRC!SnYzIXH!C z$WHWL6VwNhF*t<-*TPx6!T2G|F3B1W$r=u_MnSTMgZwZhYdGGGC-1K@796-p z36C53*Z*rGN>u}1Ro?$prSpUEBL>^&6L&@FBfgxPx&i|dTEwVJ0!Cnh5UL`9r#G|0 zL8F8$Dx7!GU@06-P^N5Jj0zZ~i5C?{5)4OVJL0{N5{rk#R*J%bDF#}EN`!MUC5MKo zn`K~qA_NB0YRF=u5Glf5k&42>6e?W9u=Y>~O!Vs66Hp1>0kB*G1l?DfigKRGB|it? z;&IRgbRPtYmk`h*s1^Y=cvZl>C&9rA5nvKGv?zUGbb`omhe^!qlhMJf-75(dB6^kJ zKn;$+15)w&Hpm2ukia_NkEaQuQBHw3fsu64mPQ*dQswP_U zW#O49Mv!5HUQzpP_~i?;U*qVy{I_W6vX!@r$8Gs<@LB>P{NQG!4jYta zzs51vR1rbg+s2tU$?LajZk*OU2*FAp z`>y@0x{)+VdgAuK66P-OgRJU*pKMP(>4WQ{HQ5&^nov zbqgV+>hV?yM`+8=evM<|X5Q>M?@;_G!%Q!3J?~8tN0{<2nj!*czsB))Yh8)Eb4`$c zdtNTqIQEqlb*CrYjE(G$jh3u&f}pa3wxiBJX8k`j;%xySHY$hE z8fNi85oA$4FD!Ma+agp_&4q;h=CJZZM}GDbFH>Yl69jEX9qcl`3YMcL z&2s#H`;F5sN3xg;#GDq01AGWe0t?frYEv%2w>fYn|EWCNwV)61Li~nL5#Rv^#Igip z{fu`t!mNRX1YRgSq7Tyq>oE|@ib5E6sDo^GUM#^C#KANe#%j^&VhZ5Wb99V~-Zwd#Oz|IFSh@k@z;9$-_ zxE^LGdVyC3lwcK5m+rz!vZ=A=EMhpY&IWCMP|7T)zFqo!pkp%%zYvZRTBJWYk z!Kgsk2ndN{5u73(xtm!LU_lZLf_3aUSIS{Bv3<2bgE))MPUX?)kkWtOod<`}mqj27uj^$-! zV;oqI2*%<6a??Dnh+D;!XmJh4VdQZXr|^rr4)aigo5s;f{`NiO@LQq|>>)?V z5U__Fm7Q@9In*S3$U(p!a!AP@auBeG98&mKk9O{rg($F(!YwDWDhwA*h3B}*+UKj_K-sg|0>cM_mD#!>cAdy zlneoT$WhtZ$L64kWDhyX9&-Ex6p@A5ki7qugBPLme&p)xY{<%AG8nwS(;vYrey5Tb zPk0*>;=>B|NXjl^$ z41I>Lwcygw6PG~S_#?YeA9CVxOQASf7wr8^G|&(@ZFx+jqqjQo-&%xQnLvgDgDo83 z_!z3-=F}xcKoG>4eEtmD;ub-%Ak%dr7J6QK%dz?4^|E}TSbIVG{oDP(0cPg;7gx;@`hC2#s-Bx=OJe}AB8;7T!*vSt`11?P;OO~=6gEz)Ky@Ma|o=fmtQ=6 z0%545nVc%{a&FB{MMHervB~%4+ia+JAK&nwCRF;NAE9XB;wM8L5Bn!c5T1oy2f;dzY zoFXzB;vgRgI7q9vMemnTXCY7@$mF6Bs6$i<0VijPOlv}&`W}KLc2%_0Bq 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/official/2.31RC1/Source/Dcr/UCXp.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UCZEOSConn.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/UODACConn.bmp b/official/2.31RC1/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/official/2.31RC1/Source/Dcr/make.bat b/official/2.31RC1/Source/Dcr/make.bat new file mode 100644 index 0000000..47515b0 --- /dev/null +++ b/official/2.31RC1/Source/Dcr/make.bat @@ -0,0 +1 @@ +brc32 -foUCReg.dcr -r -t UCReg.rc \ No newline at end of file diff --git a/official/2.31RC1/Source/EnvMsgForm_U.dfm b/official/2.31RC1/Source/EnvMsgForm_U.dfm new file mode 100644 index 0000000..3fd2c8f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/EnvMsgForm_U.pas b/official/2.31RC1/Source/EnvMsgForm_U.pas new file mode 100644 index 0000000..a915610 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/IncPerfil_U.dfm b/official/2.31RC1/Source/IncPerfil_U.dfm new file mode 100644 index 0000000..843b1a7 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/IncPerfil_U.pas b/official/2.31RC1/Source/IncPerfil_U.pas new file mode 100644 index 0000000..3b1fac8 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/IncUser_U.dfm b/official/2.31RC1/Source/IncUser_U.dfm new file mode 100644 index 0000000..d5352a9 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/IncUser_U.pas b/official/2.31RC1/Source/IncUser_U.pas new file mode 100644 index 0000000..02f4c70 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/LoginWindow_U.dfm b/official/2.31RC1/Source/LoginWindow_U.dfm new file mode 100644 index 0000000..41b0673 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/LoginWindow_U.pas b/official/2.31RC1/Source/LoginWindow_U.pas new file mode 100644 index 0000000..83b0bf3 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/MsgRecForm_U.dfm b/official/2.31RC1/Source/MsgRecForm_U.dfm new file mode 100644 index 0000000..ae8dacf --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/MsgRecForm_U.pas b/official/2.31RC1/Source/MsgRecForm_U.pas new file mode 100644 index 0000000..a180469 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/MsgsForm_U.dfm b/official/2.31RC1/Source/MsgsForm_U.dfm new file mode 100644 index 0000000..905767a --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/MsgsForm_U.pas b/official/2.31RC1/Source/MsgsForm_U.pas new file mode 100644 index 0000000..6913efe --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/SenhaForm_U.dfm b/official/2.31RC1/Source/SenhaForm_U.dfm new file mode 100644 index 0000000..3ad53eb --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/SenhaForm_U.pas b/official/2.31RC1/Source/SenhaForm_U.pas new file mode 100644 index 0000000..ee9be2c --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/TrocaSenha_U.dfm b/official/2.31RC1/Source/TrocaSenha_U.dfm new file mode 100644 index 0000000..5bdaf68 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/TrocaSenha_U.pas b/official/2.31RC1/Source/TrocaSenha_U.pas new file mode 100644 index 0000000..a034907 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCALSMTPClient.pas b/official/2.31RC1/Source/UCALSMTPClient.pas new file mode 100644 index 0000000..181ebcd --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCAbout.dfm b/official/2.31RC1/Source/UCAbout.dfm new file mode 100644 index 0000000..5cccd28 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCAbout.pas b/official/2.31RC1/Source/UCAbout.pas new file mode 100644 index 0000000..5c99bb4 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCAboutXpStyle_U.dfm b/official/2.31RC1/Source/UCAboutXpStyle_U.dfm new file mode 100644 index 0000000..966218a --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCAboutXpStyle_U.pas b/official/2.31RC1/Source/UCAboutXpStyle_U.pas new file mode 100644 index 0000000..5cba471 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCBase.pas b/official/2.31RC1/Source/UCBase.pas new file mode 100644 index 0000000..005af76 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCDataConnector.pas b/official/2.31RC1/Source/UCDataConnector.pas new file mode 100644 index 0000000..5c73a01 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCDataInfo.pas b/official/2.31RC1/Source/UCDataInfo.pas new file mode 100644 index 0000000..3ac4572 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCEMailForm_U.dfm b/official/2.31RC1/Source/UCEMailForm_U.dfm new file mode 100644 index 0000000..2abfdac --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCEMailForm_U.pas b/official/2.31RC1/Source/UCEMailForm_U.pas new file mode 100644 index 0000000..79101cb --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCEditorForm_U.dfm b/official/2.31RC1/Source/UCEditorForm_U.dfm new file mode 100644 index 0000000..53cd4ad --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCEditorForm_U.pas b/official/2.31RC1/Source/UCEditorForm_U.pas new file mode 100644 index 0000000..cb7e1fe --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCIdle.pas b/official/2.31RC1/Source/UCIdle.pas new file mode 100644 index 0000000..847719b --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCLock.res b/official/2.31RC1/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/official/2.31RC1/Source/UCMail.pas b/official/2.31RC1/Source/UCMail.pas new file mode 100644 index 0000000..0511b30 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCMessages.pas b/official/2.31RC1/Source/UCMessages.pas new file mode 100644 index 0000000..4ef209c --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCObjSel_U.dfm b/official/2.31RC1/Source/UCObjSel_U.dfm new file mode 100644 index 0000000000000000000000000000000000000000..4da08b21a05ec045e1f6f85bc09395d8f47355a5 GIT binary patch literal 17579 zcmeHPdvp}l8UOOwXA+=_J%Cu_sZ~$^pemJ96kC!F;bB5jvgpBDbsrNlGTB*oCqOu@ zM``P^IhI!RNUK$>Sg{2asR$}o5K!I^dB`L32r)bYA-vzF-*;#4WU`r^olS`Kc(U2M zd*{yg{l3S&bN9P8)6~V2&{#pRwEiJs&MUDPP$^^;DE15+?xstI0 zGQ4s);|a*hmm@(TQl?Z(g2U;LmWiS9So8S8iYSNd*Nlw{kz9`)QX;aHTj~o;@QoL8 zvpte1gp?72IKD#3*q)Z99^WShm5Pj$={Aon$q|PuAmuBeLSI10E<}I<&$rMMAuv`|12tvq%stXZ!NhmL%h!c_0 zf%-)%wWE@dN0Ot00|iDZS=EV64AX(Ku#MI2C84qkd6L6PO;mFi2vKo-s7#z9q@fqk zFOX9zP8OtSsSp_%3RI*&>?X5f2IYX=TjcW#l3Vh7^@&m{6&8E2B}Fg_2Kkxra;D;fetTKE>z0(*-aHOMWqZ(rXZw zTd?$rl{Co38opxZ)dTgj1-k#fjULF1+LHE+6`Dl0Wmee%%E45I6`Dl&wn+}?`^?Rz zGOW-f#Gm41_+~O}7HAUT+kfL?_}9+7C7~TwXxvZrWIiBY#~0H5hS|4+CgXk!G;w|A zuIUMXJNusI3&PZwTjmXECqsXp>g{NBGP0iT#qdk_Pk~XjkHWC6A`D&cgS%FagFBX# z!hl7E?fKD;q%<)Z+0(wq@W&pW3SA*1`!829{9hff0V^`7F97v7vz5`r^v`+bYKBjJ zU{v&e;MnnW?PzrV&zXKTkPNbed`101eNN+waCm=k?4&e0>_lUq+WEL5Kj`h%^H`zL z)9dSeTqVLLS}QbqOnse?E3-My3XL99U#I>s!zNlQGGW5n0p*6M*C zY7|NVIR#u!C$G626xfS_3636G%*KuZ+C+3Vc2r+A(|d1QJw#krW9hO zUlI+ z%+B+1l`PaU!!SG7nGnqkm!Inn(YPnB?6-xm&CLQcqma$vSE@p|4c8`UJKP<#UD+=B zZlHD5#6#X8?5@HmTnZk#0-s}d1wO|vS^VG?*PmniKa0S)r4<@JwHuXGMli>Ibi-5- z*GvJD!GkxWZ=$z~&#|A_J{_tz*MMFI*+ISA7#sA!o@iMrc)NWKbUn<{v85}CN*So(v=K%{rTXrloGYZ=z z8rfz>Lw!bluAg@~Hr;Qe`;Np<`1-=J&1m%Wd|YvC+F+x5nROsNH)`^mk~c{AUpxX1Of0Rc3`KjSIrFL%nKCV1JSWm_^GLpE)LATsSl(oMDHu^@QUYl*B97Tg z7X-*sg)^(2Hjg3=EO5GpN5o(eCO<}9S;bY7BC_m0#pN6$_<|)NsoLclBTwRuWpYIE zR)+DK^;ka zceT=_=4s7`X~}%}17pv$I??Ve^@Rk<&OUEb$1Tf~PUl9ROy}vGx7qR}O!jryd=idU zcfK%DkV>jBuh`-8Pb`ur2@xR}%Y$}cPIHB*2(8_n&a-3flAp4N)y|RB)L2{0S);kA zt2DPdh+su9vrpc9`PhN|3txS<18>yC5OdjEGmjr` zK-i;S?LD%8cjLZYhjxE)VAqzfc5K?eZGGM5HG4O$+`WE9?V3+^t@>F1MjaAiE`R%# z6GsjrtV+|~35j4$Fjvg`$El`9ghd)O0q^Yl6A@-PgbV z`ZB^IP23w{dwUYXnqe+@9raRSRVSP~b>hs4W2c*so;-ROVSoDTmZpY%?X@+*T=U*+ z)nt_h9T@jU*b$WmuqK#m-+M#D#7g@yuWCE_*?3qp%!O?*+mCtG3C9}`G#{+jJHZ5V z-J*Z#^=v=p)hj~1e)Y4B3Fi7m|JE=K$Gmz)sMoJL+o+S63Fe0P=V+LQWB$UqGlsAx zm>WNst6{1Y^-~-3moA()gf+wbuoV-@^lxp<>tVNk{LbnHud8G@>hx-8^-UkXsny$8 z)G?2jnF@;&W8CO%&w?$VFMi9gU29awyb6nx*vZC*V-0%`)^5SykwkiK{^)IuJy8W= zam?fOi<4MVKm@UZsmVf2a}8C>E&pW`y2fT&!AZ=-WQ`U35#NZ63ZrlFjlG5gY{Lh0 zaOmO{ffw4^g>T@rfU^zucp@KafLFGnJ&5Iy{9aL!1U0Pv8G8yV7HVevm@miDwOF(F z4>1s<1q6%tbAtjt1lan#Sy0ZUP;@~2vt|iH(ZtX7B@0N~MWXDPIkaYYq$(`yt+_51 zir&pbQOy{;gAxCKwUw*FYMlSLx~Aaj4r;Hijj8*MNBL@aj?Zjn<|`%lsLK9ceV%P0 zza=w{Yuh(|-QK!l*VZc;HuuesL z?k#qnX!wioid5$R1UgcPe|U7Ex7!VaZoHQ9o;}_K z#Jg|xM~wgF(qaumFMt2MIY1c1Z&qF#cQ0@ZJ^#^<7Qul9^I-4X*|77qnXu)>8O$Fm zo}3CFKUNLzS3L^zCse>3|3knr^!&}}DVVs8#-W3?u#N8th1kZ7$&K<@75aUns!S0sD7m26Nq{Lir-C^H`=fkL7Sl zT{M@`nC{5mlJed#ZD`*P6_Q8%=TD!4W%K`;QX!d~|I&pE4C8cj6P#!~2u%%jaHOsl zaM=sEM2EU9YhlmE&seElvy{ov^RuyH0fXa^uJQa_>*C9d(8L=1J}cF5$6+J zR<-d5_enDTcnn;aLGz)nSiwcFq5p^{zUcKJ431+(KF8u1H7^~49~G{H>wd8c`rfq? z`e1qDxqWQ>aN0!QgfVdJE;w=OGK`+E14fPC&gz6=b^H!_;7geLd_C;ga~{@hJqtzR zcIY=mc`4GZi8@$ovSKX?(g?>-N|tlSCL4_yW4det%=NDs48{K$T$ zbNO%UAoPbiR=;`Vddt`B3v-SEVUQjLfj#i^2Y17tUv0#Y#^uFu+b`$Klbr#7p(x?T zvKo&~SA)kp)L1uTt@i&DuCb}N4|)Wm1ra%1AWsU>ez$w1B2@DKAJIC8*;?l?j<4Qm zC<)yoRF4fia(FX4%psKMfHEb5{~jcoX3xlzB)dcX4+v4ay-*aSVAO6K78DgcWD$DQ V?kW~SRgBT@pnt9*hoTg${SWW*hDZPa literal 0 HcmV?d00001 diff --git a/official/2.31RC1/Source/UCObjSel_U.pas b/official/2.31RC1/Source/UCObjSel_U.pas new file mode 100644 index 0000000..eff55e1 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCReg.dcr b/official/2.31RC1/Source/UCReg.dcr new file mode 100644 index 0000000000000000000000000000000000000000..137f24a447191d32558c7d0910d02d54af55b8de GIT binary patch literal 38300 zcmeHQ2S8Lwnr>%jXK(iQHr?Ld-tFz|?9Pl40VO%2L={oVU_=B1K}E#~Iw+zDf=EUr z=S-7xXlQbiK}01B2+D|Y45-uhH6_pXb%2?@*`2%V_F4W_uj+e$z1Lme`~Ui@WH1kzy;jrQURqU`o>v%?#0-f@2nvnG5fYUU z8J`rF!c5K1&u6hK8(L6P%u&K_aI_5HsqAki9csQPZs(%Zol?wQQfU@a$;fVB6k#gk zZ@SFQ#?&b;HC+sjlUb_y=ZU-KGxtd4SVXZU>V1mUwn}xjinaUXDs5y-0kvyEhWQtX zhVrKzJuh4c^!B*o?-LSoH7YtjEhE3IqPnRK;I=ChcP&UqWhk&;q2|D{2Gd;o$OSAfu<2QhDa{lD@QCz9L#`W%OdzFlo&|nYErv zb!Sx|Hox|Wy2Ii!&TeQ@=ayMoouqfBoSnE5K<(p!QyX0l2N2+|e1y?&wUU>H=lBXwX$+JISV zziCqM=D1tN(OtTs?f<#aeU98NRfizRIw5V^LCqSjIg2ewcVGHJuQ+(8nc5lRi|m)bXz}iMat}!^lpZkajIkmi>88@(rZ)v2aRQ zw8PgjYj|(o*uH{$HhE(JG-nR(${510S#9cL64C%AwoMc%n1~g;z8&~Ts!O*SliM;L9yyvWp*$Z zm=@reyCv%{#z}wF4f)L2m9%>Jipx7V@#FxeliH``)V_-mv|HpH%963DkhWkiFfIIS zBl8o3=<-M>9K5!#xM)Zn6dHlT7)a>@p{BWGp9f23Cl3crD1^7lOhfVOMs=1S2Qqr< z63$v?$rJ>kRH9({wW8sWEYR}VoOku7ZqB<-k$c5=$Iv^WIHVBI8XpRc;HZ82DOJJ~ zrtZ8L98@4U{7~;9Oo8BvwtgJ-Lx6i*HAHT|-`J1%62h%*@ziW^__2QV>OQW)3sAAiJovsG_=}u95aVqWX&G z7R^kxaXDaQZ@Bijrsl~N>W<4)os?A1Dy}@EsPdJPx`VRjv6XA=G}ha$H#xAy!TD@P zelh>Agg{-*jM6{0!swJD24D>5YkZb~BGiLr)Iz1zLZmgW%B%{I)$&@h-c3&5Nx{fo zN!wP*#A++pjM9V%yIi-L*emIsRR9QvVfA2XP=s=v)bfNy%i|X*$4IF}EY=8;!AK7% zgVTx|k1f--RuQD`jZRvIj*1&xd73~C5ZAKgMHrRkvgXTY%~xbD_%d;k3drY*%-YLK zbTf;VsFkKP8SRr*5~WNMvF);)4*zNL)(m3b?!E;$f+xVWZP z3uR@r+Y^pr-qHA>QdyjBFPKjT6p4MC`)+U6YzH+QBFfvdr>NOz{+1{#kH zuT zBKO{X-be~e8jfFn^UjnWv#6#$DK~8k?%EcP1I;q~4k#L=4V6Ik!0EotUAL3VkbM!F z$bC5}1jjqOezglz{Y<=?L#XD7AY;!gtMoqW93J`OMr}#xHjLo)%RQV2LXP1(LU2NI zs&stI^sZFu2UY0>vb8Q|sT}rOe?DnP(k-*(zV)7k$|u5sLlC<9d1!~ch2Y>mZw#*9 z8r`xjrfo}9vvFv>Za{_Rxs>I$UK*$4S2(4tIGqTb(Qz)C;{#;?h2GKb53*mS)bCE~ z-jm+DEA`g)xDJyrj*efs=EdBV&Z#S%)3lEH0*C(q2%rRUa;sYoX7?T{y1OrL7=YVi zS`C7#wLA+|&M{R_$M{Ai3y#U6pwcSa>`O-NO2(}+`?tq;7zNjAdlhS)OY)7)5cLfd z1yx+%>XqMiIHhHGWUX~*>ABdVyowoqX_DQNoQ9ZhU7KQG>z% zb8h@yq%^~vfrGjs{K9Ow(e#8HtF{3+Uz9Evg)kjs&GFFbBkgK0?Y zMjeJa?8Oc6xALq`qAW?Yr>t+G0xIz1 zh_WQVD~>2jQV@q$Leoc-CCT3kGRcyZbQ3avzeHJ*R73u@KtPt1AmzsqWl2s|7kR76 zS$-VILM=&BQ+!IpK~`c(3f>c1$=}VABy35$IxRbUwxl(rWoOTpw1%{-c(x>#SWhP14Bwj`FMp0z!^Z?uNAta!F0mgGq{@7XvtX33T`1q8FRWJ|$@f+e$IOTkt` zOJ-zCS}Q>tax-Qljlhjtz?aiAj||3-nj2|e*1ulO`XH(OPjydz(=z$%qT7NNy-;o( z^>(?F5ObeZI-Z#}w%;N@GUg9gb3Tl&|3k(2pF6leY3ClV>7v~{q1^cL@-c3_$D7nE zT+f3On^ZYxopj;~J`67XRsP@?t*<}6##Jo2MZ*!rjog3}+}ud+)l*OQ>UD0>cTdZo z5G4XD~grB7v2d)1e)5VUF*vpHw)0d_VZ3$%x-GkMrX|7RrtAvPzwOVG}lH;BoKQ zruRP4DsV_oo8xLaC-dmfdc6MWW%QgHCmIg2Lb-AN>DPu)Tm?_=2WHPdQYd#$DgL#a z#he)1pSHOCd@}YY1K#!pae`2SmZVkalQn_dbwS);?0qvwrQPOIp?rY-zeOG~?ufIx zTckRkrkUv>h=USAFRPsEx0|E6|7Fjev*GpvQ)aTA=O6UvEX<}oWaw4oqvthaNt=i124j-k$$!4A$q zTWwyHPlUHCZ737PiL8>M>g>3$Z}*Ph?i(NMnHcWB+jo8FM%z$lV}EOPiqF}ctPFlA zQJk2Y6gAY<`e1B$Vr=;SP(M2>p|_p$_}=iuP|w({j+Ww#sP|P8#ff?Gp%Wv6k0pBdzI$WCA7ob{&D7PDcYQ!zLOz zQCCK~JA2#edYfwoTB}3dPV)B)vQSPe&Pe)tsBiMciKK}+d&Xy)aw>l^84BqYUs>w}cMh6Q8A%%jRSeDCdXXj6h4CF)xjP_n1 z=-{x^qcY>d#efLqM9lG3SFua7Q;V4~1&I-PDY0S@$SH}vDCQPP>_ss*hn)JqV=pe_ z-IH1db?XWT%EwAh<4(DJV)S;NV^XM-(&GW=5l} z;0I8kCv=c#HQL>Y+YTI2%-EQp2qL`tWMM>=1Ki=BR0bR@@GgTfK7 z&z(jVYKDIKPoc|x_U)V31gGJOBMR%hj~3YJLTHP2M_O@iw-|l!Oi>3%vhhMxBRI%L zY5wkRd(9v_8~DKrKM7y)i;GD=0J^r_k!@)2FeVUX!{} zr87yvenHXx{+#-H;5>W$fIn(aP>!i+Iy3%E-#6F!a zgfrbg-)OR>%o7a9Vi^?Y#wNw=Aa;oiOZ)>esD`_xlA z6)qLJn^}f#*>YmzM&N8oG+5;!vm#PzY3$skadTIOOKEya0~RkkQAbVLaiLjddYyN1W^I?5Ym(pfdODj@z*#*2*&F#0l?1hoDc(Sks0C z^~L@&b}8Nm<1fqlE&<4cv7!6J{m`fU%H@GGj;&vv_I2hp`!h3#s;b&jQaGih1ShU(Y!yO$@?%bKUd1Ejuvp+3uFgK^GprAD`@9E>m=n-)4KAYT@(P3keZ%5CxAE#|w+L;`HY)67m z>SpQq4S${)h0Eo~N!0%$+e#e>oyq=4S!Z@&%tnRpij%f=3CI=*cbdw95UKWS$e^t6 ziW8>%b1+7Moz9!d7m50x0|dvT+qb?ePQ1=vGR&8Oi+~fi?oR~g@krly#Yx#HRdmb{ zuOSZyZU7`f_peBMi;})84p9IMKTw_lxheQ;=(3OSKJx0#w_>@G_Z_ds5{}ZM+JStT35gbwody?RQ4Z8E= zW`onkPp>8VQvJ$1uueQT5@M_@XVo_GmQ_~Q)PNFESl7(kPyr12S(;D90Fvc^ltP;DW~6ZAeqI#9v$%!v9>&kM%kwIn}+gH~{igB5Y3Ah*R_ zLR#nVAch+WG4eAZ&vYy+scqnGV?@rre);^#=s?-^ehD{9xKYB55^fZvL7^q0#x6l_ zjNhio~3y&O3ER3n3Aj~deu4$y9jIa>06FnWGdQ6qma4;Rm z8=-xU=O0)Hq2A9PY1PGjRDDqb4TsG5Vg4|~{7WDZ+AKY}MO1UDoQ4y<`rkor5BfTp z+Z8CB;u9uReNh4p2ZSG@_#yny@T^ie;wKvkG7YCW>^z$H6efUUA+$w%Acgl>lp0hy z4F|12s$k~6k`z2UGTDfU;u(FagaB(ejiAK07UR3gMpkJ`6eb&SQHf7g;!~CQR3$!D zp)@G8kQ%9If*?1p!7czAKW3jQdO#-h$Rr+_B*f$%X6G>Of(O7VFdb)jYH61ink6`}d*Se;;qc~BV&7TPjf#4p=kq*e1q`jp)#4_9Asxf zMldIwx^N`ItqQp@=rjt;zS>5$2*)6b^`&ss`>A#3BA$%;upQEHqGG?Arf?Ou}v`oZHoTC?wTdB3uP=i2s)Oa-jfX zl|atmH&8BOsVN*1XiBOHHLyoGCAbh?E^znI7G#UXD2SK^GvB|}3NsRC!SnYzIXH!C z$WHWL6VwNhF*t<-*TPx6!T2G|F3B1W$r=u_MnSTMgZwZhYdGGGC-1K@796-p z36C53*Z*rGN>u}1Ro?$prSpUEBL>^&6L&@FBfgxPx&i|dTEwVJ0!Cnh5UL`9r#G|0 zL8F8$Dx7!GU@06-P^N5Jj0zZ~i5C?{5)4OVJL0{N5{rk#R*J%bDF#}EN`!MUC5MKo zn`K~qA_NB0YRF=u5Glf5k&42>6e?W9u=Y>~O!Vs66Hp1>0kB*G1l?DfigKRGB|it? z;&IRgbRPtYmk`h*s1^Y=cvZl>C&9rA5nvKGv?zUGbb`omhe^!qlhMJf-75(dB6^kJ zKn;$+15)w&Hpm2ukia_NkEaQuQBHw3fsu64mPQ*dQswP_U zW#O49Mv!5HUQzpP_~i?;U*qVy{I_W6vX!@r$8Gs<@LB>P{NQG!4jYta zzs51vR1rbg+s2tU$?LajZk*OU2*FAp z`>y@0x{)+VdgAuK66P-OgRJU*pKMP(>4WQ{HQ5&^nov zbqgV+>hV?yM`+8=evM<|X5Q>M?@;_G!%Q!3J?~8tN0{<2nj!*czsB))Yh8)Eb4`$c zdtNTqIQEqlb*CrYjE(G$jh3u&f}pa3wxiBJX8k`j;%xySHY$hE z8fNi85oA$4FD!Ma+agp_&4q;h=CJZZM}GDbFH>Yl69jEX9qcl`3YMcL z&2s#H`;F5sN3xg;#GDq01AGWe0t?frYEv%2w>fYn|EWCNwV)61Li~nL5#Rv^#Igip z{fu`t!mNRX1YRgSq7Tyq>oE|@ib5E6sDo^GUM#^C#KANe#%j^&VhZ5Wb99V~-Zwd#Oz|IFSh@k@z;9$-_ zxE^LGdVyC3lwcK5m+rz!vZ=A=EMhpY&IWCMP|7T)zFqo!pkp%%zYvZRTBJWYk z!Kgsk2ndN{5u73(xtm!LU_lZLf_3aUSIS{Bv3<2bgE))MPUX?)kkWtOod<`}mqj27uj^$-! zV;oqI2*%<6a??Dnh+D;!XmJh4VdQZXr|^rr4)aigo5s;f{`NiO@LQq|>>)?V z5U__Fm7Q@9In*S3$U(p!a!AP@auBeG98&mKk9O{rg($F(!YwDWDhwA*h3B}*+UKj_K-sg|0>cM_mD#!>cAdy zlneoT$WhtZ$L64kWDhyX9&-Ex6p@A5ki7qugBPLme&p)xY{<%AG8nwS(;vYrey5Tb zPk0*>;=>B|NXjl^$ z41I>Lwcygw6PG~S_#?YeA9CVxOQASf7wr8^G|&(@ZFx+jqqjQo-&%xQnLvgDgDo83 z_!z3-=F}xcKoG>4eEtmD;ub-%Ak%dr7J6QK%dz?4^|E}TSbIVG{oDP(0cPg;7gx;@`hC2#s-Bx=OJe}AB8;7T!*vSt`11?P;OO~=6gEz)Ky@Ma|o=fmtQ=6 z0%545nVc%{a&FB{MMHervB~%4+ia+JAK&nwCRF;NAE9XB;wM8L5Bn!c5T1oy2f;dzY zoFXzB;vgRgI7q9vMemnTXCY7@$mF6Bs6$i<0VijPOlv}&`W}KLc2%_0Bq 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/official/2.31RC1/Source/UCSettings.pas b/official/2.31RC1/Source/UCSettings.pas new file mode 100644 index 0000000..bb9e447 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCXPSettings.pas b/official/2.31RC1/Source/UCXPSettings.pas new file mode 100644 index 0000000..89ed10d --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UCXPStyle.pas b/official/2.31RC1/Source/UCXPStyle.pas new file mode 100644 index 0000000..694f11b --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UcConsts_Language.pas b/official/2.31RC1/Source/UcConsts_Language.pas new file mode 100644 index 0000000..c66c247 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UserControl.inc b/official/2.31RC1/Source/UserControl.inc new file mode 100644 index 0000000..bedb276 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UserPermis_U.dfm b/official/2.31RC1/Source/UserPermis_U.dfm new file mode 100644 index 0000000..5640f06 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/UserPermis_U.pas b/official/2.31RC1/Source/UserPermis_U.pas new file mode 100644 index 0000000..1ebdea4 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/md5.pas b/official/2.31RC1/Source/md5.pas new file mode 100644 index 0000000..13fcc9e --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCFrame_Log.dfm b/official/2.31RC1/Source/pUCFrame_Log.dfm new file mode 100644 index 0000000..d3067b1 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCFrame_Log.pas b/official/2.31RC1/Source/pUCFrame_Log.pas new file mode 100644 index 0000000..8234d04 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCFrame_Profile.dfm b/official/2.31RC1/Source/pUCFrame_Profile.dfm new file mode 100644 index 0000000..6570503 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCFrame_Profile.pas b/official/2.31RC1/Source/pUCFrame_Profile.pas new file mode 100644 index 0000000..3e662a0 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCFrame_User.dfm b/official/2.31RC1/Source/pUCFrame_User.dfm new file mode 100644 index 0000000..6784e27 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCFrame_User.pas b/official/2.31RC1/Source/pUCFrame_User.pas new file mode 100644 index 0000000..6646e6c --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCGeral.dfm b/official/2.31RC1/Source/pUCGeral.dfm new file mode 100644 index 0000000..4b2f07d --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUCGeral.pas b/official/2.31RC1/Source/pUCGeral.pas new file mode 100644 index 0000000..bcceedf --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUcFrame_UserLogged.dfm b/official/2.31RC1/Source/pUcFrame_UserLogged.dfm new file mode 100644 index 0000000..7ad72cb --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/Source/pUcFrame_UserLogged.pas b/official/2.31RC1/Source/pUcFrame_UserLogged.pas new file mode 100644 index 0000000..5670b63 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/GHistorico.bdsgroup b/official/2.31RC1/UCHistorico/GHistorico.bdsgroup new file mode 100644 index 0000000..fbbb0b2 --- /dev/null +++ b/official/2.31RC1/UCHistorico/GHistorico.bdsgroup @@ -0,0 +1,19 @@ + + + + + + + + + + + + + pckHistorico.bdsproj + pckHistorico.bpl + + + + diff --git a/official/2.31RC1/UCHistorico/GHistorico.groupproj b/official/2.31RC1/UCHistorico/GHistorico.groupproj new file mode 100644 index 0000000..e8e997d --- /dev/null +++ b/official/2.31RC1/UCHistorico/GHistorico.groupproj @@ -0,0 +1,31 @@ + + + {db54d477-5fdc-4df2-8d4f-9ea1d372aaf4} + + + + + Default.Personality + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/official/2.31RC1/UCHistorico/UCHistDataset.pas b/official/2.31RC1/UCHistorico/UCHistDataset.pas new file mode 100644 index 0000000..46bcd4f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/UCHist_Base.pas b/official/2.31RC1/UCHistorico/UCHist_Base.pas new file mode 100644 index 0000000..495ca03 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/UCHist_Form.dfm b/official/2.31RC1/UCHistorico/UCHist_Form.dfm new file mode 100644 index 0000000..90cf87e --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/UCHist_Form.pas b/official/2.31RC1/UCHistorico/UCHist_Form.pas new file mode 100644 index 0000000..1a78fa6 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/UCHist_Type.pas b/official/2.31RC1/UCHistorico/UCHist_Type.pas new file mode 100644 index 0000000..9173c59 --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/UcHistReg.dcr b/official/2.31RC1/UCHistorico/UcHistReg.dcr new file mode 100644 index 0000000000000000000000000000000000000000..3b81f6ee85e7846b1c92b0d023de2b83958c613e GIT binary patch literal 4912 zcmeHKc~p~E7Js&NhMDQmWu}Erbw)a!R-~mADlLe}q99=pn?}}#JtPnk)({dT>;VFV zeG#M}mDL4N1TBJ~qJk(C*(@y-N>OC7DkyL6mq4U;Ii8*~f6O_3$^G8@?tAZdfA`+^ zUh)t^XcGv=Qi0}=%H|gl+6fwrpF_6D4jID75?Mf-47C~BjZBaYyjjA#iKI_DT@Ahd z!Ya^aXlz=Mbx2XF2HdC1g=Z-3?d@%CZLO`X=OhK%P&zs~o?+^*4FOodYieq$udlDE zsX2W3@aK|JSy@?ES9jvXiRR|!-)0DqTUuHg8X5qqsHiA8Ihh+7$qEegqtO_2KQ@cS zJ2)uF#h&a#(&ZRwBpQ7n+O3*mxP_;` z*>~HPy*oa3w72DOI0Xd-wY9b2%lY%?e=Qu6J^%;WrKP3e;o($kQ=#eBW|wVUp85j} z(oLq>mx1PA23iaTSq=M}UUt_lF@Be-w$aYiSP&CaQBl#@*!b%v034zUe7xLT0C(SGTjRKWfML`XVBYR$dcoJ^ire-sclhq;_R#O~l6<}Od))OpeT=TKY$jq{ zZ+Pi>E5Ay0aV{?}hxGvIdn!5`x6C5FYZpnY{T z>mz*1ijSuUWc-USzIX~B7QoS? zM_CNN&mFXe*%p@q%sc63SD04azD8{{(+8L+k1>YELyYfBUg2^1Kw`JER!^|qWv0at z-|4$Bt4~$lh~o1hgAi(&2`TyX^z=xRPey~xyP4!pf2%IG^|fHT>w%Wtf!0fNQ;Xvx z68IJ9AI5IshYLL!oIcvlUJj)<#J(%gb}Y`l$4k#)`&LNAS{J|;>>#?+o=#8w{!qIs z0oL7Yo9jV#Uxx4L58pQ!v9FJ+)o%ILox9Vk#PK=0S--=Up>X>_o=ZR1sh_jAFU;QjQOR_A$Ce6>!-%r{)&av+fw&`Kp_J%t2bM_2y9fx_&!%=RdeCIxf z$^3%_8Gcs+{o62`(HQDi(bTV^T!(m$1KfSRp_CE63+TN_dayBNAp&2x!R!XdZ6jPt z576f98R9w(^Ib;-ZeuajZ{s~CV%>*>Eaw-0kl|lTV$SgPP9*w{$9s>*Qb%LlhY2e# zH@TGA1P`&*C#fkZZ~{OIAo#GN*p7Dn0VYF{&V6Bf1|ywsMZ1p0c#J1_PbT_IrTE*{KgZFbDWeL5cRHJRvr8^AMI_p^hS@;SIT z5|{AqC3#MUTg|P;ANUXD^KdB_mqz1*yvIcmiv?l#vV&mObPD6HC}2V89^piW13}6k z4y7cD$t0h0JCzREoJ(f{_#)6Q0g%YKLhj|!k?!kVi;J*#iL!`se*qs?MB&fla9IpK z$X_nzKFpVzVEm99JS}hwqwbTfPiVyXI1L7xKFABdBVsIMu~(RvMdQz+<_>VBu(BtZ zxls~>YhrPg5Ld?IasfUVwOkbWATM-2i;W98{UJ7dc7T+;^eGbX+Ff*TF?TM51u=&P z2JnhlT%Cw(giA+7i#5XK<09NB#%Bv3x0XMw&&0<>_-HEh;=_r!obclDfr$G#p}1oI zVF&H}+?=)e)m4?Hc3Ml~z=wt5OZj0i7$1tk)k(NE6(3K-bwXS(!gaB?bJ^2*0r*$~ zZqCK0vT=O|K9;s(;*bCrMMAh1a|5Hu2Jj2G79Y+E5z}+fe>XlNS}x?^@@RrpZ89S_dlNYY{p3UUoGoZ}FjX5hOYLoEccwEW{qn)05aS@?w!KLlWibK_V zbqMgPL|i5ySOIuLCc*P;?%kTi+0_Jmb8l%9qSso4PfNTwo{o>C68@gbTgqb!EVjY# z)KBq2lNlY+McqcQ1wLQ}+z0Z_`M4?b-kD-J|7GRtnp6V+Y$4$SZ~!s{jl9o{H|J)g z{VX^r;a4V;?)nYe6kj+*%mV(v5J1iq;l{LwGh=`chtJnHI`HWXe7=O}f&q}AbH%v3 zromD>EP=BI{WQ)K&4#=@-d#R}YBM$m&ex0VnHO_|FBEwdM^@ac5iQAQ}w6cG3~ z8<#r{9y5I>KEV4~{sqBtoyqpTM%(r1s1Wxa2V%JGAa4H*w;sezV%(C0JIaaIOBHye z36HmYpGhy+`A%x&&*b!{{AHR0Vo|xL)fk_$SeJ-lF)1%8mQ8&21{~mpsY%5Qr&GS>eH{CVWUt9o-&=8RJ)z{|jvwb(ew6IF zw6(th=oWj7NdeP zkb(jP|3Q%!sT%sLQFV1S^wmQRQeThYUl=0Onh|V57~hWIR751|Rdn_0Rm2kXp}xL8 zG%?bLIN}lLA3-A{BM2!^AQEi?v4k^7TsDI+d}u<93hJQ+7sTJ?_Za-YuL0BFR8-V9 zD9FppD{N3!(@>Eis3@o_$tx(SYHI7~XsD{FtoHnAgOQ4Y0u0sBGtkx1RM%da0eV#h z1tm2NZP05!(XZcN0OOTZHMDhqq?h4H#%riO!O>Nce^J8cIXKG{6<6`)HI(G#2^^hu zhK9x;t?HlP>pib;Y-qfy|Kl5m@4fum<`00+x{nPFcNnkWtlwnt-b-)31vq-^*ROx! z55^|aj`jaEdhc}wWkN6IX>7cU=#f*@`}eC7LK{?6)zpC}NdhIOsG;;%sb3PBt9IoS z!LB0k)YL_)T3i3KR{zq=O7E*{>k|C8t=0ei<&E#FYwA9~a}9q2|CN7id|ypdXWe!~ z!`(9eZ)&{#w-*&&Q&8COJUH+dV{09uYf)1*r(PcS-FNTr{LeY} z-p3DaU;X}*E&B@Zd+_(^&hK}h{0UoVJMXt2w(r+=VJ4HQzrVk)ukXs1VH<5=U|<(h zKQ;uh$m{CrYH4X{XlSUdtv$14b#--3O--$>t=-+-|C=Ku_xAR-wY4FttgI|MJ6j|c z$8k8ZG#Y~*%Z-bZNTnK$#$Yg@-}d%)3~l$}prp>u&ieZL!oos6j~D9i9qs(R(D9#g z$1l~#zR3CaKFN_iF$eb@Km2u&zpqdzEGa2zY;43>u3o+Rv2<*`LpaK=s;Wv%OeA}` zC|&k88{+;}fzxcTvO-oO&sj2Dc==it` zgkx4wPh@zQ%2JPY zd`hR$P!;CtLoTrY;>C*yrv&;o1bsKoa2#T}nPOe8#W>vx|89ta*I{$Sk>SX#E9%HF z#bGeo@m8GAY!0;4_Ll;5{1>l1Xfp9Q-cD!!VZtKoUb$7uhE=u z#Jb#IxS!{pXrg(Yi}g82_iChhH$;2aQ{8K5UM8OZFw6A@-Q$5YbS}Y*x%Usz)CjEj z<;$1f;o|~mZf=fa#GVN_FvWGh!EzgrgWr=?fRcK%Qn{g(uvnRN2QRPw{*ut`bKxah=)fHW-)#r{ZV2i%zU6k#kPKDRCC z;IxP|jIxD+lcL}$Y1njHxFwzZi!5R`gEGbQSXz5w=igSapGl6-%44juC~F3JCY>@x zcnQ5PA}wS^?bP5V`a2WL0gtb2!lNB{HCVHY@fr=GEZ7%kv4hM6NGEyUKaA#^+Ko+gF&*QpxP2W z7vJO`^-t<0P$hz@RH&3}lqIc|B&-zjaMpYd0EQGt=ffLu+fecL`eq7%P!NO){Lxgz9vtlx|jtR`uI17%z1E z`Lyr^@(KI;#71Ux@C3)@RdM1|HDkGeyQ9216;35DmW#Hr_B*<{YelCL$$+zRXi%;4b3Wi3$=1E5>afFC%r5ZKut<*z_)r`(cAp9^>tN#2iEgA ztEGwS`UD&dr_%qFH^EPyUOv}(rB=8aiw*Y1p5$`?Wp zb{0cN(T`nt&DU)j{-23^7Kfgc)qv9;A$rq^Yq6{HArMS{Yt^wWm&cXrT+ J=KjC?{{yaVNYwxU literal 0 HcmV?d00001 diff --git a/official/2.31RC1/UCHistorico/dcr/UCHist_DataSet.bmp b/official/2.31RC1/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/official/2.31RC1/UCHistorico/pckHistorico.dpk b/official/2.31RC1/UCHistorico/pckHistorico.dpk new file mode 100644 index 0000000..90f248d --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/pckHistorico.dproj b/official/2.31RC1/UCHistorico/pckHistorico.dproj new file mode 100644 index 0000000..0159d2f --- /dev/null +++ b/official/2.31RC1/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/official/2.31RC1/UCHistorico/pckHistorico.res b/official/2.31RC1/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