diff --git a/official/2.20/Packages/BDS2006.bdsgroup b/official/2.20/Packages/BDS2006.bdsgroup
new file mode 100644
index 0000000..5a58426
--- /dev/null
+++ b/official/2.20/Packages/BDS2006.bdsgroup
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+ pckMD5.bdsproj
+ pckUCDataConnector.bdsproj
+ pckUserControl_RT.bdsproj
+ pckUserControl_DT.bdsproj
+ pckMD5.bpl pckUCDataConnector.bpl pckUserControl_RT.bpl pckUserControl_DT.bpl
+
+
+
+
+
+
diff --git a/official/2.20/Packages/BDS2006.config b/official/2.20/Packages/BDS2006.config
new file mode 100644
index 0000000..c8f2834
--- /dev/null
+++ b/official/2.20/Packages/BDS2006.config
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/Connectors/UCADOConn/UCADOConn.pas b/official/2.20/Packages/Connectors/UCADOConn/UCADOConn.pas
new file mode 100644
index 0000000..da90afa
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCADOConn/UCADOConnReg.pas b/official/2.20/Packages/Connectors/UCADOConn/UCADOConnReg.pas
new file mode 100644
index 0000000..32c5c62
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj b/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj
new file mode 100644
index 0000000..1b6a6b0
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCADOConn/pckUCADOConn.cfg b/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.cfg
new file mode 100644
index 0000000..5a54e49
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.cfg
@@ -0,0 +1,44 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0"C:\WINDOWS\Temp"
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.dpk b/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.dpk
new file mode 100644
index 0000000..92d149f
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCADOConn/pckUCADOConn.res b/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCADOConn/pckUCADOConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCAstaConn/UCAstaConn.pas b/official/2.20/Packages/Connectors/UCAstaConn/UCAstaConn.pas
new file mode 100644
index 0000000..abf4425
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas b/official/2.20/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas
new file mode 100644
index 0000000..225400c
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCBDEConn/UCBDEConn.pas b/official/2.20/Packages/Connectors/UCBDEConn/UCBDEConn.pas
new file mode 100644
index 0000000..dd1bb92
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas b/official/2.20/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas
new file mode 100644
index 0000000..943d623
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj b/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj
new file mode 100644
index 0000000..017237f
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.cfg b/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.cfg
new file mode 100644
index 0000000..512ff4e
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.cfg
@@ -0,0 +1,43 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0"C:\WINDOWS\Temp"
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk b/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk
new file mode 100644
index 0000000..4c1dd8d
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.res b/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCBDEConn/pckUCBDEConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas b/official/2.20/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas
new file mode 100644
index 0000000..35e4049
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas b/official/2.20/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas
new file mode 100644
index 0000000..cd9fe75
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCDBXConn/UCDBXConn.pas b/official/2.20/Packages/Connectors/UCDBXConn/UCDBXConn.pas
new file mode 100644
index 0000000..50e5dc3
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas b/official/2.20/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas
new file mode 100644
index 0000000..7aebf23
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj b/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj
new file mode 100644
index 0000000..2d66f05
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.cfg b/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.cfg
new file mode 100644
index 0000000..5a54e49
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.cfg
@@ -0,0 +1,44 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0"C:\WINDOWS\Temp"
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk b/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk
new file mode 100644
index 0000000..05fa12c
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.res b/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCDBXConn/pckUCDBXConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCFIBConn/UCFIBConn.pas b/official/2.20/Packages/Connectors/UCFIBConn/UCFIBConn.pas
new file mode 100644
index 0000000..557326e
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas b/official/2.20/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas
new file mode 100644
index 0000000..f7387bb
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBOConn/UCIBOConn.pas b/official/2.20/Packages/Connectors/UCIBOConn/UCIBOConn.pas
new file mode 100644
index 0000000..42a11f8
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas b/official/2.20/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas
new file mode 100644
index 0000000..f8c4eb9
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBOConn/pckIBOConn.cfg b/official/2.20/Packages/Connectors/UCIBOConn/pckIBOConn.cfg
new file mode 100644
index 0000000..10bc6f1
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCIBOConn/pckIBOConn.cfg
@@ -0,0 +1,42 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
+-LN"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCIBOConn/pckIBOConn.dpk b/official/2.20/Packages/Connectors/UCIBOConn/pckIBOConn.dpk
new file mode 100644
index 0000000..6671069
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBOConn/pckIBOConn.res b/official/2.20/Packages/Connectors/UCIBOConn/pckIBOConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCIBOConn/pckIBOConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCIBXConn/UCIBXConn.pas b/official/2.20/Packages/Connectors/UCIBXConn/UCIBXConn.pas
new file mode 100644
index 0000000..a817678
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCIBXConn/UCIBXConn.pas
@@ -0,0 +1,149 @@
+{-----------------------------------------------------------------------------
+ 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 SetFTransaction(const Value: TIBTransaction);
+ procedure SetIBXConnection(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 SetIBXConnection;
+ property Transaction: TIBTransaction read FTransaction write SetFTransaction;
+ 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
+ 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 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);
+begin
+ with TIBQuery.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 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.SetFTransaction(const Value: TIBTransaction);
+begin
+ FTransaction := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUCIBXConn.SetIBXConnection(const Value: TIBDatabase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+end.
+
diff --git a/official/2.20/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas b/official/2.20/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas
new file mode 100644
index 0000000..7eb0997
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj b/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj
new file mode 100644
index 0000000..c59c976
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.cfg b/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.cfg
new file mode 100644
index 0000000..512ff4e
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.cfg
@@ -0,0 +1,43 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0"C:\WINDOWS\Temp"
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk b/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk
new file mode 100644
index 0000000..4511021
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.res b/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCIBXConn/pckUCIBXConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCMDOConn/UCMDOConn.pas b/official/2.20/Packages/Connectors/UCMDOConn/UCMDOConn.pas
new file mode 100644
index 0000000..0f07703
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas b/official/2.20/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas
new file mode 100644
index 0000000..7b41340
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj b/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj
new file mode 100644
index 0000000..d712089
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.cfg b/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.cfg
new file mode 100644
index 0000000..1b27aab
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.cfg
@@ -0,0 +1,39 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk b/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk
new file mode 100644
index 0000000..6e8946f
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.res b/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCMDOConn/pckUCMDOConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCMidasConn/UCMidasConn.pas b/official/2.20/Packages/Connectors/UCMidasConn/UCMidasConn.pas
new file mode 100644
index 0000000..37779cf
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMidasConn/UCMidasConn.pas
@@ -0,0 +1,182 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCMidasConn
+ Author : Luiz Benevenuto
+ Date : 31/07/2005
+ Purpose : Midas Suporte ( DataSnap )
+ E-mail : luiz@siffra.com
+ URL : www.siffra.com
+ UC : www.usercontrol.com.br
+ Forum : http://www.usercontrol.com.br/modules.php?name=Forums
+
+ registered in UCMidasConnReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCMidasConn;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DB,
+ DBClient,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TBancoDados = (bdFirebird, bdMSSQL, bdOracle, bdPostgreSQL, bdMySQL, bdParadox);
+
+ TUCMidasConn = class(TUCDataConnector)
+ private
+ FResultado: OleVariant;
+ FSQLStmt: String;
+ FParams: OleVariant;
+ FOwnerData: OleVariant;
+ FRecsOut: Integer;
+ FConnection: TCustomRemoteServer;
+ FProviderName: String;
+ FBancoDados: TBancoDados;
+ procedure SetConnection(const Value: TCustomRemoteServer);
+ procedure SetProviderName(const Value: String);
+ 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: TCustomRemoteServer read FConnection write SetConnection;
+ property ProviderName: String read FProviderName write SetProviderName;
+ property BancoDados: TBancoDados read FBancoDados write FBancoDados;
+ end;
+
+const
+ // Select para as tabelas de sistema !!! Para outro tipo de banco implemente aqui !!!!!
+
+ // Para banco novo !!!
+ // Não esquecer de colocar em TBancoDados, o tipo de banco !!!!!!
+ // Não esquecer de colocar no 'case' de UCFindTable
+
+ SQL_Firebird =
+ 'SELECT ' +
+ ' UPPER(RDB$RELATIONS.RDB$RELATION_NAME) RDB$RELATION_NAME ' +
+ 'FROM ' +
+ ' RDB$RELATIONS ' +
+ 'WHERE ' +
+ ' RDB$RELATIONS.RDB$FLAGS = 1 AND UPPER(RDB$RELATIONS.RDB$RELATION_NAME) = ' +
+ ' UPPER(''%s'')';
+
+ SQL_MSSQL = '';
+
+ SQL_Oracle = '';
+
+ SQL_PostgreSQL =
+ 'SELECT ' +
+ ' UPPER(PG_CLASS.RELNAME) ' +
+ 'FROM ' +
+ ' PG_CLASS ' +
+ 'WHERE ' +
+ ' PG_CLASS.RELKIND = ''r'' AND ' +
+ ' UPPER(PG_CLASS.RELNAME) LIKE UPPER(''%s'')';
+
+ SQL_MySQL = '';
+
+ SQL_Paradox = '';
+
+implementation
+
+uses
+ Midas,
+ Provider;
+
+{ TUCMidasConn }
+
+function TUCMidasConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end
+ else
+ Result := '';
+end;
+
+function TUCMidasConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCMidasConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+procedure TUCMidasConn.SetConnection(const Value: TCustomRemoteServer);
+begin
+ if FConnection <> 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.20/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas b/official/2.20/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas
new file mode 100644
index 0000000..9bbf9b1
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj
new file mode 100644
index 0000000..1b24c02
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.cfg b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.cfg
new file mode 100644
index 0000000..5a54e49
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.cfg
@@ -0,0 +1,44 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0"C:\WINDOWS\Temp"
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dof b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dof
new file mode 100644
index 0000000..43de243
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dof
@@ -0,0 +1,139 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=0
+UnsafeCode=0
+UnsafeCast=0
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=User Control Midas Connector
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;indy;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;RCLMDO70;IndyCore70;IndySystem70;IndyProtocols70;TeeUI77;Tee77;TeeDB77;TeeLanguage77;TeePro77;TeeGL77;TeeQR77;frx7;frxADO7;frxBDE7;frxDB7;frxDBX7;frxe7;frxIBX7;frxTee7;fs7;fsADO7;fsBDE7;fsDB7;fsIBX7;fsTee7
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1046
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+[Excluded Packages]
+c:\arquivos de programas\borland\delphi7\Bin\dcltee70.bpl=TeeChart Components
+c:\arquivos de programas\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components
diff --git a/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk
new file mode 100644
index 0000000..adaef7f
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj
new file mode 100644
index 0000000..63902d7
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj
@@ -0,0 +1,108 @@
+
+
+ {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
+
+
+ False
+ True
+ False
+
+
+ User Control Midas Connector
+ 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
+
+
+
+
+
+
+
+
+
+ TeeChart Components
+ JVCL BDE Components
+
+
+ pckUCMidasConn.dpk
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.res b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCMidasConn/pckUCMidasConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas b/official/2.20/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas
new file mode 100644
index 0000000..bea3aae
--- /dev/null
+++ b/official/2.20/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
+ SysUtils, Classes, UCBase, DB, DBAccess, MyAccess, MemDS;
+
+type
+ TUCMyDACConn = class(TUCDataConn)
+ 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.20/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas b/official/2.20/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas
new file mode 100644
index 0000000..e7f5afb
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas
@@ -0,0 +1,17 @@
+unit UCMyDACReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCMyDACConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCMyDACConn]);
+end;
+end.
diff --git a/official/2.20/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas b/official/2.20/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas
new file mode 100644
index 0000000..02050f0
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas
@@ -0,0 +1,106 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCMySQLDACConn
+ Author: QmD
+ Date: 22-nov-2004
+ Purpose: MySQLDAC Support
+
+ registered in UCMySQLDACReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCMySQLDACConn;
+
+interface
+
+uses
+ SysUtils, Classes, UCBase, DB, mySQLDbTables;
+
+type
+ TUCMySQLDACConn = class(TUCDataConn)
+ private
+ FConnection : TmySQLDatabase;
+ procedure SetFConnection(Value : TmySQLDatabase);
+ 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 : TmySQLDatabase read FConnection write SetFConnection;
+ end;
+
+implementation
+
+{ TUCMySQLDACConn }
+
+procedure TUCMySQLDACConn.SetFConnection(Value: TmySQLDatabase);
+begin
+ if FConnection <> 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.20/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas b/official/2.20/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas
new file mode 100644
index 0000000..c740a4e
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas
@@ -0,0 +1,17 @@
+unit UCMySQLDACReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCMySQLDACConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCMySQLDACConn]);
+end;
+end.
diff --git a/official/2.20/Packages/Connectors/UCUIBConn/UCUIBConn.pas b/official/2.20/Packages/Connectors/UCUIBConn/UCUIBConn.pas
new file mode 100644
index 0000000..240e1ea
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas b/official/2.20/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas
new file mode 100644
index 0000000..c706578
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj b/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj
new file mode 100644
index 0000000..47c867d
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.cfg b/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.cfg
new file mode 100644
index 0000000..1d52980
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.cfg
@@ -0,0 +1,38 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk b/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk
new file mode 100644
index 0000000..2d94322
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.res b/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCUIBConn/pckUCUIBConn.res differ
diff --git a/official/2.20/Packages/Connectors/UCZeosConn/UCZEOSConn.pas b/official/2.20/Packages/Connectors/UCZeosConn/UCZEOSConn.pas
new file mode 100644
index 0000000..22a4fd6
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCZeosConn/UCZEOSConn.pas
@@ -0,0 +1,127 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCZEOSConn
+ Author: QmD
+ Date: 08-nov-2004
+ Purpose: ZEOS 6 Support
+
+ registered in UCZEOSReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCZEOSConn;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DB,
+ SysUtils,
+ UCDataConnector,
+ ZConnection;
+
+type
+ TUCZEOSConn = class(TUCDataConnector)
+ private
+ FConnection: TZConnection;
+ procedure SetFConnection(const Value: TZConnection);
+ 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: TZConnection read FConnection write SetFConnection;
+ end;
+
+implementation
+
+uses
+ ZDataset, Dialogs;
+
+{ TUCZEOSConn }
+
+procedure TUCZEOSConn.SetFConnection(const Value: TZConnection);
+begin
+ if FConnection <> 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 // By vicente barros leonel
+ 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.20/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas b/official/2.20/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas
new file mode 100644
index 0000000..00a0d31
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj b/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj
new file mode 100644
index 0000000..8dae755
--- /dev/null
+++ b/official/2.20/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.20/Packages/Connectors/UCZeosConn/pckZeosConn.cfg b/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.cfg
new file mode 100644
index 0000000..5a54e49
--- /dev/null
+++ b/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.cfg
@@ -0,0 +1,44 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-N0"C:\WINDOWS\Temp"
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-U";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-O";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-I";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-R";C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.dpk b/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.dpk
new file mode 100644
index 0000000..18ac3d1
--- /dev/null
+++ b/official/2.20/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
+ ZComponent,
+ pckUCDataConnector;
+
+contains
+ UCZEOSConn in 'UCZEOSConn.pas',
+ UCZEOSConnReg in 'UCZEOSConnReg.pas';
+
+end.
diff --git a/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.res b/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.20/Packages/Connectors/UCZeosConn/pckZeosConn.res differ
diff --git a/official/2.20/Packages/D2007.groupproj b/official/2.20/Packages/D2007.groupproj
new file mode 100644
index 0000000..9281129
--- /dev/null
+++ b/official/2.20/Packages/D2007.groupproj
@@ -0,0 +1,58 @@
+
+
+ {1c592c69-53bd-49f1-a789-a4ac64f25b09}
+
+
+
+
+ Default.Personality
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/pckMD5.bdsproj b/official/2.20/Packages/pckMD5.bdsproj
new file mode 100644
index 0000000..ca5f509
--- /dev/null
+++ b/official/2.20/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.20/Packages/pckMD5.cfg b/official/2.20/Packages/pckMD5.cfg
new file mode 100644
index 0000000..1b27aab
--- /dev/null
+++ b/official/2.20/Packages/pckMD5.cfg
@@ -0,0 +1,39 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/pckMD5.dof b/official/2.20/Packages/pckMD5.dof
new file mode 100644
index 0000000..6fafe53
--- /dev/null
+++ b/official/2.20/Packages/pckMD5.dof
@@ -0,0 +1,129 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=1
+UnsafeCode=1
+UnsafeCast=1
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=MD5SUM Package
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;Jcl;cxGridVCLD7;cxEditorsVCLD7;cxLibraryVCLD7;cxPageControlVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxSchedulerVCLD7;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDBD7R;JvDlgsD7R;JvDockingD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;IOCore;IODBX;IOIBX;IOXML;RaizeComponentsVcl;RaizeComponentsVclDb;TeeUI77;Tee77;TeeDB77;TeeGL77;TeeLanguage77;TeePro77;TeeImage77;pckUserControl_RT
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1046
+CodePage=1252
+[Excluded Packages]
+c:\arquivos de programas\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components
+C:\Arquivos de programas\Borland\Delphi7\Bin\dcltee70.bpl=TeeChart Components
+C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Bin\DclTQR77.bpl=TeeChart 7 for QuickReport
diff --git a/official/2.20/Packages/pckMD5.dpk b/official/2.20/Packages/pckMD5.dpk
new file mode 100644
index 0000000..00403ea
--- /dev/null
+++ b/official/2.20/Packages/pckMD5.dpk
@@ -0,0 +1,37 @@
+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'}
+{%TogetherDiagram 'ModelSupport_pckMD5\md5\default.txaPackage'}
+{%TogetherDiagram 'ModelSupport_pckMD5\default.txvpck'}
+
+requires
+ rtl;
+
+contains
+ md5 in '..\Source\md5.pas';
+
+end.
diff --git a/official/2.20/Packages/pckMD5.dproj b/official/2.20/Packages/pckMD5.dproj
new file mode 100644
index 0000000..0df04a7
--- /dev/null
+++ b/official/2.20/Packages/pckMD5.dproj
@@ -0,0 +1,88 @@
+
+
+ {d2274d98-f9f6-4f51-9617-6c46e56a95d2}
+ pckMD5.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMD5.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE
+
+
+ 7.0
+ DEBUG
+
+
+ Delphi.Personality
+ Package
+
+
+ False
+ True
+ False
+
+
+ MD5SUM Package
+ False
+ False
+ 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
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/pckMD5.res b/official/2.20/Packages/pckMD5.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.20/Packages/pckMD5.res differ
diff --git a/official/2.20/Packages/pckUCDataConn.cfg b/official/2.20/Packages/pckUCDataConn.cfg
new file mode 100644
index 0000000..1b27aab
--- /dev/null
+++ b/official/2.20/Packages/pckUCDataConn.cfg
@@ -0,0 +1,39 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/pckUCDataConnector.bdsproj b/official/2.20/Packages/pckUCDataConnector.bdsproj
new file mode 100644
index 0000000..394d14a
--- /dev/null
+++ b/official/2.20/Packages/pckUCDataConnector.bdsproj
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+ 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.20/Packages/pckUCDataConnector.cfg b/official/2.20/Packages/pckUCDataConnector.cfg
new file mode 100644
index 0000000..1b27aab
--- /dev/null
+++ b/official/2.20/Packages/pckUCDataConnector.cfg
@@ -0,0 +1,39 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"D:\Documentos\Borland Studio Projects\Bpl"
+-LN"D:\Documentos\Borland Studio Projects\Bpl"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/pckUCDataConnector.dof b/official/2.20/Packages/pckUCDataConnector.dof
new file mode 100644
index 0000000..0d0647f
--- /dev/null
+++ b/official/2.20/Packages/pckUCDataConnector.dof
@@ -0,0 +1,129 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=1
+UnsafeCode=1
+UnsafeCast=1
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=User Control DataConn
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;Jcl;cxGridVCLD7;cxEditorsVCLD7;cxLibraryVCLD7;cxPageControlVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxSchedulerVCLD7;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDBD7R;JvDlgsD7R;JvDockingD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;IOCore;IODBX;IOIBX;IOXML;RaizeComponentsVcl;RaizeComponentsVclDb;TeeUI77;Tee77;TeeDB77;TeeGL77;TeeLanguage77;TeePro77;TeeImage77;pckUserControl_RT
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1046
+CodePage=1252
+[Excluded Packages]
+c:\arquivos de programas\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components
+C:\Arquivos de programas\Borland\Delphi7\Bin\dcltee70.bpl=TeeChart Components
+C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Bin\DclTQR77.bpl=TeeChart 7 for QuickReport
diff --git a/official/2.20/Packages/pckUCDataConnector.dpk b/official/2.20/Packages/pckUCDataConnector.dpk
new file mode 100644
index 0000000..656ff50
--- /dev/null
+++ b/official/2.20/Packages/pckUCDataConnector.dpk
@@ -0,0 +1,39 @@
+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'}
+{%TogetherDiagram 'ModelSupport_pckUCDataConnector\UCDataConnector\default.txaPackage'}
+{%TogetherDiagram 'ModelSupport_pckUCDataConnector\default.txvpck'}
+
+requires
+ rtl,
+ dbrtl;
+
+contains
+ UCDataConnector in '..\Source\UCDataConnector.pas';
+
+end.
diff --git a/official/2.20/Packages/pckUCDataConnector.dproj b/official/2.20/Packages/pckUCDataConnector.dproj
new file mode 100644
index 0000000..4e67966
--- /dev/null
+++ b/official/2.20/Packages/pckUCDataConnector.dproj
@@ -0,0 +1,89 @@
+
+
+ {32671bc6-e575-4ad0-9f27-6e30a6d8f220}
+ pckUCDataConnector.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCDataConnector.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE
+
+
+ 7.0
+ DEBUG
+
+
+ Delphi.Personality
+ Package
+
+
+ False
+ True
+ False
+
+
+ User Control DataConn
+ False
+ False
+ True
+
+
+ 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
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/pckUCDataConnector.res b/official/2.20/Packages/pckUCDataConnector.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.20/Packages/pckUCDataConnector.res differ
diff --git a/official/2.20/Packages/pckUCGlobal.bdsproj b/official/2.20/Packages/pckUCGlobal.bdsproj
new file mode 100644
index 0000000..561c496
--- /dev/null
+++ b/official/2.20/Packages/pckUCGlobal.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ 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.20/Packages/pckUCGlobal.cfg b/official/2.20/Packages/pckUCGlobal.cfg
new file mode 100644
index 0000000..75258b1
--- /dev/null
+++ b/official/2.20/Packages/pckUCGlobal.cfg
@@ -0,0 +1,40 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-E"C:\Vicente\Projetos\Vicente\megamax"
+-LE"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
+-LN"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
+-Z
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/official/2.20/Packages/pckUCGlobal.dof b/official/2.20/Packages/pckUCGlobal.dof
new file mode 100644
index 0000000..4a8aaf1
--- /dev/null
+++ b/official/2.20/Packages/pckUCGlobal.dof
@@ -0,0 +1,136 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=0
+UnsafeCode=0
+UnsafeCast=0
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=C:\Vicente\Projetos\Vicente\megamax
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;indy;vclie;dbrtl;dsnap;vcldb;VclSmp;dbexpress;dbxcds;bdertl;ibxpress;visualclx;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;inet;xmlrtl;soaprtl;vclactnband;adortl;vcldbx;visualdbclx;dsnapcon;dss;webdsnap;inetdb;websnap;JvStdCtrlsD7R;JvAppFrmD7R;JvCoreD7R;JvBandsD7R;JvBDED7R;JvCustomD7R;JvDlgsD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;JvCryptD7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvCmpD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvCtrlsD7R;JvTimeFrameworkD7R;JvSystemD7R;JvValidatorsD7R;JvXPCtrlsD7R;JvWizardD7R
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1046
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
diff --git a/official/2.20/Packages/pckUCGlobal.dpk b/official/2.20/Packages/pckUCGlobal.dpk
new file mode 100644
index 0000000..80bd32b
--- /dev/null
+++ b/official/2.20/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.20/Packages/pckUCGlobal.res b/official/2.20/Packages/pckUCGlobal.res
new file mode 100644
index 0000000..3424a68
Binary files /dev/null and b/official/2.20/Packages/pckUCGlobal.res differ
diff --git a/official/2.20/Packages/pckUserControl_DT.bdsproj b/official/2.20/Packages/pckUserControl_DT.bdsproj
new file mode 100644
index 0000000..1e550b9
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_DT.bdsproj
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+ 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
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ WL Decision Cube Components
+
+
+
+ False
+
diff --git a/official/2.20/Packages/pckUserControl_DT.cfg b/official/2.20/Packages/pckUserControl_DT.cfg
new file mode 100644
index 0000000..2e86c43
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_DT.cfg
@@ -0,0 +1,36 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
+-LN"c:\arquivos de programas\borland\delphi7\Projects\Bpl"
+-Z
diff --git a/official/2.20/Packages/pckUserControl_DT.dof b/official/2.20/Packages/pckUserControl_DT.dof
new file mode 100644
index 0000000..7532c99
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_DT.dof
@@ -0,0 +1,136 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=1
+UnsafeCode=1
+UnsafeCast=1
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=User Control Package 2
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;Jcl;cxGridVCLD7;cxEditorsVCLD7;cxLibraryVCLD7;cxPageControlVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxSchedulerVCLD7;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDBD7R;JvDlgsD7R;JvDockingD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;IOCore;IODBX;IOIBX;IOXML;RaizeComponentsVcl;RaizeComponentsVclDb;TeeUI77;Tee77;TeeDB77;TeeGL77;TeeLanguage77;TeePro77;TeeImage77;pckUserControl_RT
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1046
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
diff --git a/official/2.20/Packages/pckUserControl_DT.dpk b/official/2.20/Packages/pckUserControl_DT.dpk
new file mode 100644
index 0000000..a42ea5f
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_DT.dpk
@@ -0,0 +1,52 @@
+package pckUserControl_DT;
+
+{$R *.res}
+{$R '..\Source\UCReg.dcr'}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control Package 2'}
+{$DESIGNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ designide,
+ pckUserControl_RT,
+ vcljpg,
+ vcl,
+ rtl,
+ VclSmp,
+ xmlrtl,
+ vclactnband,
+ vclx,
+ pckUCDataConnector,
+ dbrtl,
+ pckMD5,
+ vcldb;
+
+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.20/Packages/pckUserControl_DT.dproj b/official/2.20/Packages/pckUserControl_DT.dproj
new file mode 100644
index 0000000..8d7ad5f
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_DT.dproj
@@ -0,0 +1,65 @@
+
+
+ {a30f53db-e475-4ad9-a852-f9ebf338bf98}
+ pckUserControl_DT.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUserControl_DT.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE
+
+
+ 7.0
+
+
+ Delphi.Personality
+ Package
+
+FalseTrueFalseUser Control Package 2FalseTrueFalseTrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0
+ WL Decision Cube Components
+ pckUserControl_DT.dpk
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/pckUserControl_DT.res b/official/2.20/Packages/pckUserControl_DT.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.20/Packages/pckUserControl_DT.res differ
diff --git a/official/2.20/Packages/pckUserControl_RT.bdsproj b/official/2.20/Packages/pckUserControl_RT.bdsproj
new file mode 100644
index 0000000..84dc8ef
--- /dev/null
+++ b/official/2.20/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.20/Packages/pckUserControl_RT.cfg b/official/2.20/Packages/pckUserControl_RT.cfg
new file mode 100644
index 0000000..9369cd3
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_RT.cfg
@@ -0,0 +1,36 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"C:\Documents and Settings\Vicente\Meus documentos\Borland Studio Projects\Bpl"
+-LN"C:\Documents and Settings\Vicente\Meus documentos\Borland Studio Projects\Bpl"
+-Z
diff --git a/official/2.20/Packages/pckUserControl_RT.dof b/official/2.20/Packages/pckUserControl_RT.dof
new file mode 100644
index 0000000..caba6fe
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_RT.dof
@@ -0,0 +1,140 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=1
+UnsafeCode=1
+UnsafeCast=1
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=User Control Package 2
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;Jcl;cxGridVCLD7;cxEditorsVCLD7;cxLibraryVCLD7;cxPageControlVCLD7;dxThemeD7;cxDataD7;cxExtEditorsVCLD7;cxSchedulerVCLD7;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDBD7R;JvDlgsD7R;JvDockingD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;IOCore;IODBX;IOIBX;IOXML;RaizeComponentsVcl;RaizeComponentsVclDb;TeeUI77;Tee77;TeeDB77;TeeGL77;TeeLanguage77;TeePro77;TeeImage77;pckUserControl_RT
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=C:\Arquivos de programas\Borland\Delphi7\Bin\
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1046
+CodePage=1252
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+[Excluded Packages]
+c:\arquivos de programas\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components
+C:\Arquivos de programas\Borland\Delphi7\Bin\dcltee70.bpl=TeeChart Components
+C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Bin\DclTQR77.bpl=TeeChart 7 for QuickReport
diff --git a/official/2.20/Packages/pckUserControl_RT.dpk b/official/2.20/Packages/pckUserControl_RT.dpk
new file mode 100644
index 0000000..e0d7934
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_RT.dpk
@@ -0,0 +1,68 @@
+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}
+{%TogetherDiagram 'ModelSupport_pckUserControl_RT\default.txaPackage'}
+
+requires
+ vcljpg,
+ vcl,
+ rtl,
+ vclactnband,
+ dbrtl,
+ vcldb,
+ pckMD5,
+ pckUCDataConnector,
+ VclSmp,
+ dclIndyCore,
+ IndyCore,
+ IndySystem,
+ IndyProtocols;
+
+contains
+ UCMail in '..\Source\UCMail.pas',
+ IncPerfil_U in '..\Source\IncPerfil_U.pas' {frmIncluirPerfil},
+ IncUser_U in '..\Source\IncUser_U.pas' {frmIncluirUsuario},
+ TrocaSenha_U in '..\Source\TrocaSenha_U.pas',
+ UCBase in '..\Source\UCBase.pas',
+ CadPerfil_U in '..\Source\CadPerfil_U.pas' {frmCadastrarPerfil},
+ SenhaForm_U in '..\Source\SenhaForm_U.pas',
+ CadUser_U in '..\Source\CadUser_U.pas' {frmCadastrarUsuario},
+ 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',
+ ViewLog_U in '..\Source\ViewLog_U.pas',
+ UCEMailForm_U in '..\Source\UCEMailForm_U.pas',
+ UCSettings in '..\Source\UCSettings.pas',
+ UsersLogged_U in '..\Source\UsersLogged_U.pas' {frmUsersLogged},
+ LoginWindow_U in '..\Source\LoginWindow_U.pas',
+ UCHist_Form in '..\Source\UCHist_Form.pas' {FrmHistorico},
+ UcConsts_Language in '..\Source\UcConsts_Language.pas';
+
+end.
diff --git a/official/2.20/Packages/pckUserControl_RT.dproj b/official/2.20/Packages/pckUserControl_RT.dproj
new file mode 100644
index 0000000..33bcdea
--- /dev/null
+++ b/official/2.20/Packages/pckUserControl_RT.dproj
@@ -0,0 +1,150 @@
+
+
+ {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
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE
+ True
+ True
+ True
+
+
+ 7.0
+ DEBUG
+ True
+ True
+ True
+
+
+ Delphi.Personality
+ Package
+
+
+ False
+ True
+ False
+
+
+ User Control Package 2
+ False
+ False
+ True
+
+
+ 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
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.20/Packages/pckUserControl_RT.res b/official/2.20/Packages/pckUserControl_RT.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.20/Packages/pckUserControl_RT.res differ
diff --git a/official/2.20/Source/CadPerfil_U.dfm b/official/2.20/Source/CadPerfil_U.dfm
new file mode 100644
index 0000000..2740912
--- /dev/null
+++ b/official/2.20/Source/CadPerfil_U.dfm
@@ -0,0 +1,497 @@
+object frmCadastrarPerfil: TfrmCadastrarPerfil
+ Left = 407
+ Top = 193
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'Seguranca'
+ ClientHeight = 240
+ ClientWidth = 390
+ 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 DBGrid1: TDBGrid
+ Left = 0
+ Top = 35
+ Width = 293
+ Height = 205
+ Align = alClient
+ Ctl3D = True
+ DataSource = DataSource1
+ 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 = 'MS Sans Serif'
+ TitleFont.Style = []
+ OnDblClick = DBGrid1DblClick
+ Columns = <
+ item
+ Expanded = False
+ FieldName = 'Nome'
+ Title.Alignment = taCenter
+ Title.Caption = 'Perfil'
+ Width = 274
+ Visible = True
+ end>
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 390
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 1
+ object lbDescricao: TLabel
+ Left = 40
+ Top = 11
+ Width = 154
+ Height = 18
+ Caption = 'Perfil de Usu'#225'rios'
+ 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
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF008E4019008E4019008E4019008E4019008E4019008E4019008E40
+ 19008E4019008E4019008E4019008E4019008E4019008E4019008E4019008E40
+ 19008E4019008E4019008E4019008E4019008E4019008E4019008E4019008E40
+ 19008E4019008E4019008E401900FFFFFF00FFFFFF008E401800A24E0000A24E
+ 0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E
+ 0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E
+ 0000A24E0000A24E0000A24E0000A24E0000A24E0000A24E00008E401900FFFF
+ FF00FFFFFF00A2511B00F9F6F400B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A2930092421800FFFFFF00FFFFFF00AE591900FAF8F600F9F6
+ F400F7F3F100F5F1EE00F4EEEB00F2ECE800F1EAE600EFE7E300EDE5E000ECE3
+ DE00EBE1DB00E9DED700E7DBD400E5D9D100E3D6CE00E2D3CB00E0D1C800DECE
+ C500DCCBC200DBC9BF00DBC9BF00DBC9BF00DBC9BF00B7A293008E401900FFFF
+ FF00FFFFFF00B15A1700FDFCFB00FBF9F800F9F7F500F7F3F100F5F1EE00F4EE
+ EB00F2ECE800F1EAE600EFE7E300EDE5E000ECE3DE00EBE1DB00E9DED700E7DB
+ D400E5D9D100E3D6CE00E2D3CB00E0D1C800DECEC500DCCBC200DBC9BF00DBC9
+ BF00DBC9BF00B7A293008E401900FFFFFF00FFFFFF00B45C1700FEFEFD00FDFC
+ FB00FBF9F800F9F7F500F8F4F200F6F2EF00F5F0ED00F3EDEA00F1EBE700EFE7
+ E300EDE5E000ECE3DE00EBE1DB00E9DED700E7DBD400E5D9D100E3D6CE00E2D3
+ CB00E0D1C800DECEC500DCCBC200DBC9BF00DBC9BF00B7A293008E401900FFFF
+ FF00FFFFFF00B75E1600FFFFFF00FEFEFD00FDFCFB00FBF9F800F9F7F500F8F4
+ F200F6F2EF00F5F0ED00F3EDEA00F1EBE700F0E8E400EEE6E100EDE4DF00EBE2
+ DC00E9DED700B7A2930069473100694731006947310069473100694731006947
+ 310069473100B7A293008E401900FFFFFF00FFFFFF00B9601600FFFFFF00FFFF
+ FF00FEFEFD00FDFCFB00FBF9F800F9F7F500F8F4F200F6F2EF00F5F0ED00F3ED
+ EA00F1EBE700F0E8E400EEE6E100EDE4DF00EBE2DC00B7A29300FFFFFF00FCFD
+ FF005476FF00E4E9FF00FFFFFF00FFFFFF0069473100B7A293008E401900FFFF
+ FF00FFFFFF00BC621500FFFFFF00FFFFFF00FFFFFF00FEFEFD00FDFCFB00FBF9
+ F800F9F7F500F8F4F200F6F2EF00F5F0ED00F3EDEA00F1EBE700F0E8E400EEE6
+ E100EDE4DF00B7A29300FFFFFF00B4C3FF000033FF002450FF00FCFDFF00FFFF
+ FF0069473100B7A293008E401900FFFFFF00FFFFFF00BF641500FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FEFEFD00FDFCFB00FBF9F800F9F7F500F8F4F200F6F2
+ EF00F5F0ED00F3EDEA00F1EBE700F0E8E400EEE6E100B7A29300FFFFFF004066
+ FF000C3DFF000033FF009CB0FF00FFFFFF0069473100B7A293008E401900FFFF
+ FF00FFFFFF00C0661400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFE
+ FD00FDFCFB00FBF9F800F9F7F500F8F4F200F6F2EF00F5F0ED00F3EDEA00F1EB
+ E700F0E8E400B7A293008CA3FF000033FF00708DFF006483FF001846FF00F0F3
+ FF0069473100B7A293008E401900FFFFFF00FFFFFF00C3681400FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFC00FCFAF900FAF8
+ F600F9F6F400F6F2EF00F5F0ED00F3EDEA00F1EBE700B7A2930088A0FF001C49
+ FF00E4E9FF00F0F3FF00204DFF006080FF0069473100B7A293008E401900FFFF
+ FF00FFFFFF00C66A1300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FDFDFC00FCFAF900FAF8F600F9F6F400F7F3F100F5F1
+ EE00F4EEEB00B7A29300FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0FF000C3D
+ FF006080FF00B7A293008E401900FFFFFF00FFFFFF00C96C1300FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFD
+ FC00FCFAF900FAF8F600F9F6F400F7F3F100F5F1EE00B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A293009CB0FF001443FF006080FF008E401900FFFF
+ FF00FFFFFF00CB6D1200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFC00FCFAF900FAF8F600F9F6
+ F400F7F3F100F5F1EE00F4EEEB00F2ECE800F1EAE600EFE7E300EDE5E000ECE3
+ DE009CB0FF00345DFF008E401900FFFFFF00FFFFFF00CB6D1200FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FDFDFC00FCFAF900FAF8F600F9F6F400B7A29300694731006947
+ 310069473100694731006947310069473100694731009CB0FF00486DFF00FFFF
+ FF00FFFFFF00CB6D1200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FDFDFC00FCFA
+ F900FAF8F600B7A29300FFFFFF00FCFDFF005476FF00E4E9FF00FFFFFF00FFFF
+ FF0069473100B7A293009CB0FF007893FF00FFFFFF00CB6D1200FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FDFDFC00FCFAF900B7A29300FFFFFF00B4C3
+ FF000033FF002450FF00FCFDFF00FFFFFF0069473100B7A293008E401900FFFF
+ FF00FFFFFF00CB6D1200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FEFEFD00B7A29300FFFFFF004066FF000C3DFF000033FF009CB0FF00FFFF
+ FF0069473100B7A293008E401900FFFFFF00FFFFFF00CB6D1200FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B7A293008CA3FF000033
+ FF00708DFF006483FF001846FF00F0F3FF0069473100B7A293008E401900FFFF
+ FF00FFFFFF00CA6C1100F3EDEA00F3EDEA00F3EDEA00F3EDEA00F3EDEA00F3ED
+ EA00F3EDEA00F3EDEA00F3EDEA00F3EDEA00F3EDEA00F3EDEA00F3EDEA00F3ED
+ EA00F3EDEA00B7A2930088A0FF001C49FF00E4E9FF00F0F3FF00204DFF006080
+ FF0069473100F3EDEA008E401900FFFFFF00FFFFFF00B96303008E4019008E40
+ 19008E4019008E4019008E4019008E4019008E4019008E4019008E4019008E40
+ 19008E4019008E4019008E4019008E4019008E401900B7A29300FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF009CB0FF000C3DFF006080FF008E4019008E401900FFFF
+ FF00FFFFFF00B9630300B45C0000B45C0000B45C0000B45C0000B45C0000B45C
+ 0000B45C0000B55B0000B55B0000B55B0000B55B0000B55B0000B55B0000B45C
+ 0000B45C0000B7A29300B7A29300B7A29300B7A29300B7A29300B7A293009CB0
+ FF001443FF006080FF008E401900FFFFFF00FFFFFF00E3A66000E38E2D00E38E
+ 2D00E38E2D00E38E2D00E38E2D00E38E2D00E38E2D00E38E2D00E38E2D00E38E
+ 2D00E38E2D00E38E2D00E38E2D00E38E2D00E38E2D00E38E2D00F6CA9A00F19F
+ 4300E38E2D00F6CA9A00F19F4300E38E2D009CB0FF00345DFF00E3A66000FFFF
+ FF00FFFFFF00F8EBDC00E3A66000D2710000D2710000D2710000D2710000D271
+ 0000D2710000D2710000D2710000D2710000D2710000D2710000D2710000D271
+ 0000D2710000D2710000D2710000D2710000D2710000D2710000D2710000D271
+ 0000D27100009CB0FF00486DFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0FF007893
+ FF00}
+ end
+ end
+ object Panel3: TPanel
+ Left = 293
+ Top = 35
+ Width = 97
+ Height = 205
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 2
+ object btAdic: TBitBtn
+ Left = 8
+ Top = 11
+ Width = 81
+ Height = 25
+ 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 = 8
+ Top = 51
+ Width = 81
+ Height = 25
+ 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 = 8
+ Top = 91
+ Width = 81
+ Height = 25
+ 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 BtExit: TBitBtn
+ Left = 8
+ Top = 171
+ Width = 81
+ Height = 25
+ Caption = '&Fechar'
+ TabOrder = 3
+ OnClick = BtExitClick
+ 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 BtAcess: TBitBtn
+ Left = 8
+ Top = 131
+ Width = 81
+ Height = 25
+ Caption = '&Acessos'
+ TabOrder = 4
+ 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 DataSource1: TDataSource
+ Left = 128
+ Top = 104
+ end
+end
diff --git a/official/2.20/Source/CadPerfil_U.pas b/official/2.20/Source/CadPerfil_U.pas
new file mode 100644
index 0000000..3c78371
--- /dev/null
+++ b/official/2.20/Source/CadPerfil_U.pas
@@ -0,0 +1,201 @@
+{-----------------------------------------------------------------------------
+ Unit Name: CadPerfil_U
+ Author: QmD
+ Last Change: 25-abr-2005
+ Purpose: User profile
+ History: Corrected Bug on Apply XPStyle definitions
+-----------------------------------------------------------------------------}
+
+unit CadPerfil_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ DB,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ IncPerfil_U,
+ Menus,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TfrmCadastrarPerfil = class(TForm)
+ DBGrid1: TDBGrid;
+ Panel1: TPanel;
+ lbDescricao: TLabel;
+ Image1: TImage;
+ Panel3: TPanel;
+ btAdic: TBitBtn;
+ BtAlt: TBitBtn;
+ BtExclui: TBitBtn;
+ BtExit: TBitBtn;
+ DataSource1: TDataSource;
+ BtAcess: TBitBtn;
+ procedure BtExitClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure DBGrid1DblClick(Sender: TObject);
+ procedure btAdicClick(Sender: TObject);
+ procedure BtAltClick(Sender: TObject);
+ procedure BtExcluiClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ FIncluirPerfil: TfrmIncluirPerfil;
+ public
+ FUserControl: TUserControl;
+ FDataSetPerfilUsuario: TDataset;
+ procedure SetWindow(Adicionar: Boolean);
+ end;
+
+implementation
+
+{$R *.dfm}
+
+procedure TfrmCadastrarPerfil.BtExitClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmCadastrarPerfil.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TfrmCadastrarPerfil.DBGrid1DblClick(Sender: TObject);
+begin
+ BtAlt.Click;
+end;
+
+procedure TfrmCadastrarPerfil.btAdicClick(Sender: TObject);
+begin
+ try
+ FIncluirPerfil := TfrmIncluirPerfil.Create(Self);
+ FIncluirPerfil.FUserControl := Self.FUserControl;
+ SetWindow(True);
+ FIncluirPerfil.ShowModal;
+ finally
+ FreeAndNil(FIncluirPerfil);
+ end;
+end;
+
+procedure TfrmCadastrarPerfil.SetWindow(Adicionar: Boolean);
+begin
+ with TUserControl(owner).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 := Self.FUserControl.UserSettings.WindowsPosition;
+ end;
+end;
+
+procedure TfrmCadastrarPerfil.BtAltClick(Sender: TObject);
+begin
+ if FDataSetPerfilUsuario.IsEmpty then
+ Exit;
+ try
+ FIncluirPerfil := TfrmIncluirPerfil.Create(self);
+ FIncluirPerfil.FUserControl := Self.FUserControl;
+ SetWindow(False);
+ with FIncluirPerfil do
+ begin
+ FAltera := True;
+ EditDescricao.Text := FDataSetPerfilUsuario.FieldByName('Nome').AsString;
+ ShowModal;
+ end;
+ finally
+ FreeAndNil(FIncluirPerfil);
+ end;
+end;
+
+procedure TfrmCadastrarPerfil.BtExcluiClick(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;
+ TempDS.Close;
+ FreeAndNil(TempDS);
+
+ 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;
+
+procedure TfrmCadastrarPerfil.FormShow(Sender: TObject);
+begin
+ with FUserControl do
+ begin
+ FDataSetPerfilUsuario := 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]));
+
+
+ DBGrid1.Columns[0].Title.Caption := UserSettings.UsersProfile.ColProfile;
+ end;
+ DataSource1.Dataset := FDataSetPerfilUsuario;
+end;
+
+end.
diff --git a/official/2.20/Source/CadUser_U.dfm b/official/2.20/Source/CadUser_U.dfm
new file mode 100644
index 0000000..73cfad2
--- /dev/null
+++ b/official/2.20/Source/CadUser_U.dfm
@@ -0,0 +1,594 @@
+object frmCadastrarUsuario: TfrmCadastrarUsuario
+ Left = 215
+ Top = 179
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'Seguran'#231'a'
+ ClientHeight = 312
+ ClientWidth = 586
+ 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 DBGrid1: TDBGrid
+ Left = 0
+ Top = 35
+ Width = 489
+ Height = 277
+ Align = alClient
+ Ctl3D = True
+ DataSource = DataSource1
+ Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
+ ParentCtl3D = False
+ PopupMenu = PopupMenu1
+ ReadOnly = True
+ TabOrder = 0
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'MS Sans Serif'
+ TitleFont.Style = []
+ OnDblClick = DBGrid1DblClick
+ Columns = <
+ item
+ Expanded = False
+ FieldName = 'Nome'
+ Title.Alignment = taCenter
+ Width = 159
+ 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 = 183
+ Visible = True
+ end>
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 586
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 1
+ object lbDescricao: TLabel
+ Left = 44
+ Top = 12
+ Width = 188
+ Height = 18
+ Caption = 'Cadastro de Usu'#225'rios'
+ 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
+ 0000FFFFFF00FFFFFF00FCFCFC00F4F4F400E7E7E700DCDCDC00D6D6D600D2D2
+ D200D2D2D200D4D4D400D8D8D800DDDDDD00E2E2E200EAEAEA00F4F4F400FCFC
+ FC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00CBC5D2008B75A4007251
+ 9900673F980063369B006334A0006233A00063349F0063369F0063389B00633B
+ 9700653E940069489000725A8C0091899900D1D1D100FCFCFC00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00C2B0D5005F27A0006126AA006328AF00652BB400672DB800682FBB006930
+ BD006931BE006830BD00682FBB00662DB800652BB3006328AF006125AA005C23
+ 9E00674C8300D5D5D500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007E51B1006025A8006328AE00652B
+ B400672EB9006931BE006B33C1006B34C4006C35C5006B34C4006A33C1006931
+ BE00672EB900652BB4006228AE006024A8005B249A00B2B0B400F7F7F700F8F8
+ F800F9F9F900FBFBFB00FDFDFD00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF006D3AA8006127AC00642AB200672EB8006931BE006B34C3006D36C8006837
+ BE00693AC1006E38CB006D36C7006B34C3006931BE00672DB800642AB2006126
+ AB0059229B004B644D0065896300688B67006D8C6D00738E73007B907C008D9B
+ 8F00A7ACA800D0D0D000F6F6F600FFFFFF007F50B3006328AE00652CB5006830
+ BC006B33C2006D36C8006E38CC00596AB000698ED4006E39CC006F39CD006D36
+ C8006B33C200682FBB00652CB4006228AE0054268F003980290042982F004396
+ 2F0045933000488D32004A8733004E8035004C763800517149008E968F00F3F3
+ F300B399CF00642AB000662DB7006931BE006C35C5006F38CC006338B9005C9A
+ C7006DB9EB006557C700713CD2006E38CB006C34C4006931BE00662DB6006329
+ AF00434761003A9C2B003CA32C003DA12D003F9D2E0043972F00478F31004C87
+ 3300517E36005774380053714700D7D7D700F7F4F8007847B400662DB8006931
+ BF006C35C6006F39CD00514CA5005DA7D80061AFE2005A8ECF006E3ACD006F39
+ CD006C35C6006931BE00662DB7005631930034912D0035AE290035AF290036AD
+ 2A0039A72B003EA02D0043972F00488E32004E843400547937004F713F00D2D2
+ D200FFFFFF00E5DEEE007444B6006931BE006C35C5006B36C500416AA1004A8E
+ BD004380AA00407EA8005448AE006E38CA006C35C5006931BE0059349800368A
+ 350032B328002FB927002FBA260031B7270034B0290039A72B003F9E2E004593
+ 30004B883300517E3600547A4700E1E1E100FFFFFF00FEFEFE00CCC8D3007B56
+ AE006933BD005337A3003775A1003F85B7003F88BC00397DAD002C5480004C28
+ 8D006330B400483A76002B702D0031AA27002EBC26002CBA29002AC027002BC0
+ 250030B7270036AD2A003CA22C0043972F00498C32004F80350076957200F7F7
+ F700FFFFFF00AEBDCC000F3C690025496D0040477500467DB6004E9DD3004E9C
+ D2004C9AD0004997CE004493CA00336090000F2E5A0002355F00013460002283
+ 250032B12F00B8CBBA00C6E1C90037BD36002EBC260034B029003BA42C004299
+ 2F00488D32004F853F00CFD7D000FFFFFF00FFFFFF006C89A500013468000235
+ 6A002C65950055A2D70055A3D80054A2D70053A1D600509ED4004C9AD1004795
+ CC001854880000336600003366001C742F0070A17300DBDBDC00DEDEDE00AECD
+ B1002FB4290035AF29003BA42C0042992F00488D3900B5C9B500FDFDFD00FFFF
+ FF00FFFFFF00708DAC00053871000C3F75005399CA005AA7DC005AA7DC005AA7
+ DB0058A5DA0055A3D80052A0D5004D9BD2003B85BB0000336600003366002261
+ 3900788B9400648AA6005782A100607E93003D744400329C26003CA02D00529A
+ 4A00C5D6C600FEFEFE00FFFFFF00FFFFFF00FFFFFF008099B6000B3E7B002961
+ 91005DAADE005FADE0005FADE0005EACDF005CAADD005AA7DC0056A4D90052A0
+ D5004C9AD000124C80000032650030647F004E9BD0004E9CD2004C9AD0004897
+ CE004187B4002B60440081A88000EFF2EF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0095ABC3000E4182004584B10063B0E30065B2E40065B2E40063B1
+ E30061AEE1005DABDE005AA7DC0055A3D800509ED400296B9F00003365004180
+ AC0055A3D80054A2D70052A0D600509ED4004C9AD0004890C200838E9600F3F3
+ F300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ADBED300134585005699
+ C50067B4E60069B6E80069B6E80068B5E70065B2E50061AEE1005DAADE0058A5
+ DA0053A1D600397FB300013365004888B4005AA7DC0059A7DB0057A5DA0055A3
+ D80052A0D5004D9BD1005087AF00C1C1C100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00B4C2D50016488B00467EA5004E8BB4005EA0CA006BB4E4006CB8
+ EA0068B5E70064B1E4005FACDF005AA7DC0055A2D700387EB300023465004F91
+ BD005FACE0005EABDF005CA9DD0059A7DB0056A4D90052A0D5004C98CE008592
+ 9D00F9F9F900FFFFFF00FFFFFF00FFFFFF00FFFFFF00C9D4E1001C4F9B001C4F
+ 9C001E50A0001F4F93002C5C8D004C83AA0063AAD90065B2E40060AEE1005BA8
+ DC00529DD1001D588B00083A6A005CA2D20064B1E40063B0E30060ADE1005DAA
+ DE0059A7DB0055A3D800509ED4006488A100ECECEC00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F4F6F7002E5EA7002356AE002558B0002457AF002255AB001D4F
+ 9B00255587004883AA005DA9DB00488CBE00174C800004376E001F54810068B3
+ E50069B5E80067B4E70064B1E40060ADE1005CA9DD0058A5DA0053A1D600598A
+ AE00DDDDDD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F9CC600285B
+ B6002A5DBA00295CB9002659B2002255AB001E51A100194A8C00235585001145
+ 83000A3D7B00053870004985AF006CB7E8006EBAEC006CB8EA0068B4E70063B0
+ E3005EABDF005AA7DB0054A2D7005690B900D8D8D800FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00E9EDF2003A69BB002F62C4002D60C100295CB8002457
+ AE001F52A4001A4D9A0015489000104386000B3E7C001A4D7B00407A9F00447A
+ 9D00518AAE0064A9D7006AB5E70064B1E40060ADE1005BA8DC0055A2D7005890
+ B600DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C3D0
+ E5003768C3002E61C200295CB9002457AF001F52A5001A4D9B00154891001144
+ 86001A4D8200478AB5004F96C3004F96C3004B8FBA00427A9E00497FA3005DA4
+ D30060ADE000549CCD00407EA7004B6F8500EAEAEA00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C8D4E500406DBA00285BB5002356
+ AC001E51A3001B4E990016488E006785A900A6C0D300579FCC005AA2CF005AA2
+ CF00569ECB005198C500488CB6003C7294004680A8003E80AA003D81AC00768D
+ 9C00FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F6F8FA00AFC0D8007E9BC4007B98BE00A0B3CA00DDE3E900FFFF
+ FF00F1F5F70065A9D10064AEDC0064ADDC0060A9D60059A1CE005097C400478D
+ B9003E82AD003D82AD00407BA200C8CBCD00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B5D2E6006FB8E7006EB9
+ E70068B1E0005FA7D500559DCA004B91BE004086B1003E81AA008EA6B600FAFA
+ FA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FDFEFE00A5CFE90075BFEE006CB7E50062ABD900579FCC004D93
+ C0004487B0008CAABB00F6F6F600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CCDF
+ ED008FC0DE0070ACD1006DA5C80088AFC900CED9E100FDFDFD00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object Panel3: TPanel
+ Left = 489
+ Top = 35
+ Width = 97
+ Height = 277
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 2
+ object btAdic: TBitBtn
+ Left = 8
+ Top = 26
+ Width = 81
+ Height = 25
+ 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 = 8
+ Top = 66
+ Width = 81
+ Height = 25
+ 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 = 8
+ Top = 106
+ Width = 81
+ Height = 25
+ 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 = 8
+ Top = 146
+ Width = 81
+ Height = 25
+ Caption = '&Acessos'
+ TabOrder = 3
+ 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 BtExit: TBitBtn
+ Left = 8
+ Top = 226
+ Width = 81
+ Height = 25
+ Caption = '&Fechar'
+ TabOrder = 4
+ OnClick = BtExitClick
+ 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 = 8
+ Top = 186
+ Width = 81
+ Height = 25
+ 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 DataSource1: TDataSource
+ Left = 128
+ Top = 104
+ end
+ object PopupMenu1: TPopupMenu
+ Left = 168
+ Top = 104
+ object Alterar1: TMenuItem
+ Caption = '&Alterar'
+ OnClick = BtAltClick
+ end
+ object Excluir1: TMenuItem
+ Caption = '&Excluir'
+ OnClick = BtExcluiClick
+ end
+ object N1: TMenuItem
+ Caption = '-'
+ end
+ object Permisses1: TMenuItem
+ Caption = '&Permiss'#245'es'
+ end
+ end
+ object DataSource2: TDataSource
+ Left = 128
+ Top = 144
+ end
+end
diff --git a/official/2.20/Source/CadUser_U.pas b/official/2.20/Source/CadUser_U.pas
new file mode 100644
index 0000000..99cb345
--- /dev/null
+++ b/official/2.20/Source/CadUser_U.pas
@@ -0,0 +1,240 @@
+unit CadUser_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ DB,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ IncUser_U,
+ Menus,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TfrmCadastrarUsuario = class(TForm)
+ DataSource1: TDataSource;
+ DBGrid1: TDBGrid;
+ Panel1: TPanel;
+ lbDescricao: TLabel;
+ Image1: TImage;
+ PopupMenu1: TPopupMenu;
+ Alterar1: TMenuItem;
+ Excluir1: TMenuItem;
+ N1: TMenuItem;
+ Permisses1: TMenuItem;
+ Panel3: TPanel;
+ btAdic: TBitBtn;
+ BtAlt: TBitBtn;
+ BtExclui: TBitBtn;
+ BtAcess: TBitBtn;
+ BtExit: TBitBtn;
+ BtPass: TBitBtn;
+ DataSource2: TDataSource;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure BtExitClick(Sender: TObject);
+ procedure btAdicClick(Sender: TObject);
+ procedure BtAltClick(Sender: TObject);
+ procedure BtExcluiClick(Sender: TObject);
+ procedure DBGrid1DblClick(Sender: TObject);
+ procedure BtPassClick(Sender: TObject);
+ procedure SetWindow(Adicionar: Boolean);
+ procedure FDataSetCadastroUsuarioAfterScroll(DataSet: TDataSet);
+ procedure FormShow(Sender: TObject);
+ private
+ FLockAdmin: Boolean;
+ FDataSetPerfilUsuario: TDataset;
+ FfrmIncluirUsuario: TfrmIncluirUsuario;
+ FormSenha : TCustomForm;
+ public
+ FUserControl: TUserControl;
+ FDataSetCadastroUsuario: TDataset;
+ end;
+
+implementation
+
+uses
+ Consts, UCMessages,SenhaForm_U;
+
+{$R *.dfm}
+
+procedure TfrmCadastrarUsuario.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TfrmCadastrarUsuario.BtExitClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmCadastrarUsuario.btAdicClick(Sender: TObject);
+begin
+ FfrmIncluirUsuario := TfrmIncluirUsuario.Create(Self);
+ FfrmIncluirUsuario.FUserControl := Self.FUserControl;
+ SetWindow(True);
+ FfrmIncluirUsuario.ShowModal;
+ FreeAndNil(FfrmIncluirUsuario);
+end;
+
+procedure TfrmCadastrarUsuario.SetWindow(Adicionar: Boolean);
+begin
+ with TUserControl(owner).UserSettings.AddChangeUser do
+ begin
+ FfrmIncluirUsuario.Caption := WindowCaption;
+ if Adicionar then
+ FfrmIncluirUsuario.LbDescricao.Caption := LabelAdd
+ else
+ FfrmIncluirUsuario.LbDescricao.Caption := LabelChange;
+
+ 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;
+
+ end;
+end;
+
+procedure TfrmCadastrarUsuario.BtAltClick(Sender: TObject);
+begin
+ if FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+ FfrmIncluirUsuario := TfrmIncluirUsuario.Create(Self);
+ FfrmIncluirUsuario.FUserControl := Self.FUserControl;
+ SetWindow(False);
+ with FfrmIncluirUsuario do
+ begin
+ FAltera := True;
+ 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); //Added by Petrus v Breda 28/4/2007
+ SpinExpira.Value := FDataSetCadastroUsuario.FieldByName('DaysOfExpire').AsInteger;
+ ShowModal;
+ end;
+ FreeAndNil(FfrmIncluirUsuario);
+end;
+
+procedure TfrmCadastrarUsuario.BtExcluiClick(Sender: TObject);
+var
+ TempID: Integer;
+ CanDelete: Boolean;
+ ErrorMsg: String;
+begin
+ if FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+ TempID := FDataSetCadastroUsuario.FieldByName('IDUser').AsInteger;
+ //changed by fduenas: using PromptDelete_WindowCaption and Format functiom
+ 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.TableRights.FieldUserID + ' = ' + IntToStr(TempID));
+ FDataSetCadastroUsuario.Close;
+ FDataSetCadastroUsuario.Open;
+ end;
+end;
+
+procedure TfrmCadastrarUsuario.DBGrid1DblClick(Sender: TObject);
+begin
+ BtAlt.Click;
+end;
+
+procedure TfrmCadastrarUsuario.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
+ FUserControl.ChangePassword(FDataSetCadastroUsuario.FieldByName('IDUser').AsInteger, TSenhaForm(FormSenha).edtSenha.Text );
+ FreeAndNil( FormSenha );
+end;
+
+procedure TfrmCadastrarUsuario.FDataSetCadastroUsuarioAfterScroll(DataSet: TDataSet);
+begin
+ if (FLockAdmin) and (Dataset.FieldByName('Login').AsString = TUserControl(Owner).Login.InitialLogin.User) then
+ begin
+ BtExclui.Enabled := False;
+ BtPass.Enabled := False;
+ Excluir1.Enabled := False;
+ Permisses1.Enabled := False;
+ if TUserControl(Owner).CurrentUser.Username <> TUserControl(Owner).Login.InitialLogin.User then
+ BtAcess.Enabled := False;
+ end
+ else
+ begin
+ BtExclui.Enabled := True;
+ BtPass.Enabled := True;
+ BtAcess.Enabled := True;
+ Excluir1.Enabled := True;
+ Permisses1.Enabled := True;
+ end;
+end;
+
+procedure TfrmCadastrarUsuario.FormShow(Sender: TObject);
+begin
+ FLockAdmin := FUserControl.User.ProtectAdministrator;
+
+ with FUserControl do
+ begin
+ FDataSetCadastroUsuario := 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 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.TableName, TableUsers.FieldTypeRec, QuotedStr('U'), TableUsers.FieldLogin]));
+
+
+ DBGrid1.Columns[0].Title.Caption := UserSettings.UsersForm.ColName;
+ DBGrid1.Columns[1].Title.Caption := UserSettings.UsersForm.ColLogin;
+ DBGrid1.Columns[2].Title.Caption := UserSettings.UsersForm.ColEmail;
+
+ FDataSetPerfilUsuario := 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;
+
+ DataSource1.Dataset := FDataSetCadastroUsuario;
+ DataSource2.Dataset := FDataSetPerfilUsuario;
+ FDataSetCadastroUsuario.AfterScroll := FDataSetCadastroUsuarioAfterScroll;
+ FDataSetCadastroUsuarioAfterScroll(FDataSetCadastroUsuario);
+end;
+
+end.
+
diff --git a/official/2.20/Source/Dcr/Thumbs.db b/official/2.20/Source/Dcr/Thumbs.db
new file mode 100644
index 0000000..dffa8f3
Binary files /dev/null and b/official/2.20/Source/Dcr/Thumbs.db differ
diff --git a/official/2.20/Source/Dcr/UCADOConn.bmp b/official/2.20/Source/Dcr/UCADOConn.bmp
new file mode 100644
index 0000000..6e2460a
Binary files /dev/null and b/official/2.20/Source/Dcr/UCADOConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCASTAConn.bmp b/official/2.20/Source/Dcr/UCASTAConn.bmp
new file mode 100644
index 0000000..4ab2924
Binary files /dev/null and b/official/2.20/Source/Dcr/UCASTAConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCAppMessage.bmp b/official/2.20/Source/Dcr/UCAppMessage.bmp
new file mode 100644
index 0000000..56dc64e
Binary files /dev/null and b/official/2.20/Source/Dcr/UCAppMessage.bmp differ
diff --git a/official/2.20/Source/Dcr/UCBDEConn.bmp b/official/2.20/Source/Dcr/UCBDEConn.bmp
new file mode 100644
index 0000000..cf17266
Binary files /dev/null and b/official/2.20/Source/Dcr/UCBDEConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCControls.bmp b/official/2.20/Source/Dcr/UCControls.bmp
new file mode 100644
index 0000000..b760f3a
Binary files /dev/null and b/official/2.20/Source/Dcr/UCControls.bmp differ
diff --git a/official/2.20/Source/Dcr/UCDBISAMConn.bmp b/official/2.20/Source/Dcr/UCDBISAMConn.bmp
new file mode 100644
index 0000000..c0244da
Binary files /dev/null and b/official/2.20/Source/Dcr/UCDBISAMConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCDBXConn.bmp b/official/2.20/Source/Dcr/UCDBXConn.bmp
new file mode 100644
index 0000000..1470e9a
Binary files /dev/null and b/official/2.20/Source/Dcr/UCDBXConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCFIBConn.bmp b/official/2.20/Source/Dcr/UCFIBConn.bmp
new file mode 100644
index 0000000..dc9869b
Binary files /dev/null and b/official/2.20/Source/Dcr/UCFIBConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCIBOConn.bmp b/official/2.20/Source/Dcr/UCIBOConn.bmp
new file mode 100644
index 0000000..8f5965a
Binary files /dev/null and b/official/2.20/Source/Dcr/UCIBOConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCIBXConn.bmp b/official/2.20/Source/Dcr/UCIBXConn.bmp
new file mode 100644
index 0000000..29ab05f
Binary files /dev/null and b/official/2.20/Source/Dcr/UCIBXConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCIdle.bmp b/official/2.20/Source/Dcr/UCIdle.bmp
new file mode 100644
index 0000000..124cb68
Binary files /dev/null and b/official/2.20/Source/Dcr/UCIdle.bmp differ
diff --git a/official/2.20/Source/Dcr/UCMDOConn.bmp b/official/2.20/Source/Dcr/UCMDOConn.bmp
new file mode 100644
index 0000000..93d8a5e
Binary files /dev/null and b/official/2.20/Source/Dcr/UCMDOConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCMail.bmp b/official/2.20/Source/Dcr/UCMail.bmp
new file mode 100644
index 0000000..0cffa95
Binary files /dev/null and b/official/2.20/Source/Dcr/UCMail.bmp differ
diff --git a/official/2.20/Source/Dcr/UCMain.bmp b/official/2.20/Source/Dcr/UCMain.bmp
new file mode 100644
index 0000000..a910400
Binary files /dev/null and b/official/2.20/Source/Dcr/UCMain.bmp differ
diff --git a/official/2.20/Source/Dcr/UCMidasConn.bmp b/official/2.20/Source/Dcr/UCMidasConn.bmp
new file mode 100644
index 0000000..749299a
Binary files /dev/null and b/official/2.20/Source/Dcr/UCMidasConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCMyDACConn.bmp b/official/2.20/Source/Dcr/UCMyDACConn.bmp
new file mode 100644
index 0000000..6ec4ef5
Binary files /dev/null and b/official/2.20/Source/Dcr/UCMyDACConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCMySQLDACConn.bmp b/official/2.20/Source/Dcr/UCMySQLDACConn.bmp
new file mode 100644
index 0000000..fe78af3
Binary files /dev/null and b/official/2.20/Source/Dcr/UCMySQLDACConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UCReg.dcr b/official/2.20/Source/Dcr/UCReg.dcr
new file mode 100644
index 0000000..a0a2722
Binary files /dev/null and b/official/2.20/Source/Dcr/UCReg.dcr differ
diff --git a/official/2.20/Source/Dcr/UCReg.rc b/official/2.20/Source/Dcr/UCReg.rc
new file mode 100644
index 0000000..4fb6615
--- /dev/null
+++ b/official/2.20/Source/Dcr/UCReg.rc
@@ -0,0 +1,21 @@
+TUCAPPLICATIONMESSAGE BITMAP "UCAppMessage.bmp"
+TUCSETTINGS BITMAP "UCSettings.bmp"
+TUCCONTROLS BITMAP "UCControls.bmp"
+TMAILUSERCONTROL BITMAP "UCMail.bmp"
+TUCXPSTYLE BITMAP "UCXp.bmp"
+TUCIDLE BITMAP "UCIdle.bmp"
+TUSERCONTROL BITMAP "UCMain.bmp"
+TUCADOCONN BITMAP "UCADOConn.bmp"
+TUCIBXCONN BITMAP "UCIBXConn.bmp"
+TUCBDECONN BITMAP "UCBDEConn.bmp"
+TUCDBXCONN BITMAP "UCDBXConn.bmp"
+TUCIBOCONN BITMAP "UCIBOConn.bmp"
+TUCFIBCONN BITMAP "UCFIBConn.bmp"
+TUCZEOSCONN BITMAP "UCZEOSConn.bmp"
+TUCASTACONN BITMAP "UCASTAConn.bmp"
+TUCDBISAMCONN BITMAP "UCDBISAMConn.bmp"
+TUCMDOCONN BITMAP "UCMDOConn.bmp"
+TUCMYDACCONN BITMAP "UCMyDACConn.bmp"
+TUCMYSQLDACCONN BITMAP "UCMySQLDACConn.bmp"
+TUCMIDASCONN BITMAP "UCMidasConn.bmp"
+TUCHISTORICO BITMAP "UcHistorico.bmp"
\ No newline at end of file
diff --git a/official/2.20/Source/Dcr/UCSettings.bmp b/official/2.20/Source/Dcr/UCSettings.bmp
new file mode 100644
index 0000000..6017c40
Binary files /dev/null and b/official/2.20/Source/Dcr/UCSettings.bmp differ
diff --git a/official/2.20/Source/Dcr/UCXp.bmp b/official/2.20/Source/Dcr/UCXp.bmp
new file mode 100644
index 0000000..a7de19c
Binary files /dev/null and b/official/2.20/Source/Dcr/UCXp.bmp differ
diff --git a/official/2.20/Source/Dcr/UCZEOSConn.bmp b/official/2.20/Source/Dcr/UCZEOSConn.bmp
new file mode 100644
index 0000000..7452700
Binary files /dev/null and b/official/2.20/Source/Dcr/UCZEOSConn.bmp differ
diff --git a/official/2.20/Source/Dcr/UcHistorico.bmp b/official/2.20/Source/Dcr/UcHistorico.bmp
new file mode 100644
index 0000000..008a11a
Binary files /dev/null and b/official/2.20/Source/Dcr/UcHistorico.bmp differ
diff --git a/official/2.20/Source/Dcr/make.bat b/official/2.20/Source/Dcr/make.bat
new file mode 100644
index 0000000..47515b0
--- /dev/null
+++ b/official/2.20/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.20/Source/EnvMsgForm_U.dfm b/official/2.20/Source/EnvMsgForm_U.dfm
new file mode 100644
index 0000000..3fd2c8f
--- /dev/null
+++ b/official/2.20/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.20/Source/EnvMsgForm_U.pas b/official/2.20/Source/EnvMsgForm_U.pas
new file mode 100644
index 0000000..a915610
--- /dev/null
+++ b/official/2.20/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.20/Source/IdCompilerDefines.inc b/official/2.20/Source/IdCompilerDefines.inc
new file mode 100644
index 0000000..4fbd77d
--- /dev/null
+++ b/official/2.20/Source/IdCompilerDefines.inc
@@ -0,0 +1,189 @@
+// General
+
+// Make this $DEFINE to use the 16 color icons required by Borland
+// or DEFINE to use the 256 color Indy versions
+{DEFINE Borland}
+
+// S.G. 4/9/2002: IPv4/IPv6 general switch (for defaults only)
+{$DEFINE IdIPv4}
+
+{$DEFINE INDY100}
+
+{$IFDEF BCB}
+ {$DEFINE CBUILDER}
+{$ELSE}
+ {$DEFINE DELPHI}
+{$ENDIF}
+
+// Delphi 4
+{$IFDEF VER120}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL40}
+ {$DEFINE DELPHI4}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE MSWINDOWS}
+{$ENDIF}
+
+// C++ Builder 4
+{$IFDEF VER125}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL40}
+ {$DEFINE CBUILDER4}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE MSWINDOWS}
+{$ENDIF}
+
+// Delphi 5 & CBuilder 5
+{$IFDEF VER130}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE VCL5}
+ {$IFDEF BCB}
+ {$DEFINE CBUILDER5}
+ {$ELSE}
+ {$DEFINE DELPHI5}
+ {$ENDIF}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE MSWINDOWS}
+{$ENDIF}
+
+//Delphi 6
+{$IFDEF VER140}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$IFDEF BCB}
+ {$DEFINE CBUILDER6}
+ {$DEFINE ALLOW_NAMED_THREADS}
+ {$ELSE}
+ {$DEFINE DELPHI6}
+ {$ENDIF}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL60}
+{$ENDIF}
+
+//Delphi 7
+{$IFDEF VER150}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL7ORABOVE}
+ {$DEFINE VCL70}
+ {$IFDEF BCB}
+ {$DEFINE CBUILDER7}
+ {$ELSE}
+ {$DEFINE DELPHI7}
+ {$ENDIF}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE ALLOW_NAMED_THREADS}
+{$ENDIF}
+
+//Delphi 8
+{$IFDEF VER160}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL7ORABOVE}
+ {$DEFINE VCL8ORABOVE}
+ {$DEFINE VCL80}
+ {$DEFINE DELPHI8}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE ALLOW_NAMED_THREADS}
+{$ENDIF}
+
+//Delphi 9
+{$IFDEF VER170}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL7ORABOVE}
+ {$DEFINE VCL8ORABOVE}
+ {$DEFINE VCL9ORABOVE}
+ {$DEFINE VCL90}
+ {$DEFINE DELPHI9}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE ALLOW_NAMED_THREADS}
+{$ENDIF}
+
+//Delphi 10
+{$IFDEF VER180}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL7ORABOVE}
+ {$DEFINE VCL8ORABOVE}
+ {$DEFINE VCL9ORABOVE}
+ {$DEFINE VCL10ORABOVE}
+ {$DEFINE VCL10}
+ {$DEFINE DELPHI10}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE ALLOW_NAMED_THREADS}
+{$ENDIF}
+
+//Delphi 11
+{$IFDEF VER190}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL7ORABOVE}
+ {$DEFINE VCL8ORABOVE}
+ {$DEFINE VCL9ORABOVE}
+ {$DEFINE VCL10ORABOVE}
+ {$DEFINE VCL11ORABOVE}
+ {$DEFINE VCL11}
+ {$DEFINE DELPHI11}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE ALLOW_NAMED_THREADS}
+{$ENDIF}
+
+//Delphi.NET
+// Covers D8+
+{$IFDEF CIL}
+ // Platform specific conditional. Used for platform specific code.
+ {$DEFINE DotNet}
+ // Extra include used in D7 for testing. Remove later when all comps are
+ // ported. Used to selectively exclude non ported parts. Allowed in places
+ // IFDEFs are otherwise not permitted.
+ {$DEFINE DotNetExclude}
+{$ENDIF}
+
+// Kylix
+//
+//Important: Don't use CompilerVersion here as
+//$IF's are evaluated before $IFDEF's
+//and Kylix 1 does not have CompilerVersion defined at all.
+{$IFDEF LINUX}
+ {$IFDEF CONDITIONALEXPRESSIONS}
+ {$IF RTLVersion = 14.0}
+ {$DEFINE KYLIX1}
+ {$DEFINE KYLIX1ORABOVE}
+ {$IFEND}
+ {$IF RTLVersion = 14.2}
+ {$DEFINE KYLIX2}
+ {$DEFINE USEZLIBUNIT}
+ {$DEFINE KYLIX1ORABOVE}
+ {$DEFINE KYLIX2ORABOVE}
+ {$IFEND}
+ {$IF RTLVersion = 14.5}
+ {$DEFINE KYLIX3}
+ {$DEFINE USEZLIBUNIT}
+ {$DEFINE KYLIX1ORABOVE}
+ {$DEFINE KYLIX2ORABOVE}
+ {$DEFINE KYLIX3ORABOVE}
+ {$IFEND}
+ {$ENDIF}
+ {$DEFINE VCL4ORABOVE}
+ {$DEFINE VCL5ORABOVE}
+ {$DEFINE OPTIONALPARAMS}
+ {$DEFINE SAMETEXT}
+ {$DEFINE VCL6ORABOVE}
+ {$DEFINE VCL60}
+{$ENDIF}
+
diff --git a/official/2.20/Source/IdStack.pas b/official/2.20/Source/IdStack.pas
new file mode 100644
index 0000000..200d8c5
--- /dev/null
+++ b/official/2.20/Source/IdStack.pas
@@ -0,0 +1,840 @@
+{
+ $Project$
+ $Workfile$
+ $Revision$
+ $DateUTC$
+ $Id$
+
+ This file is part of the Indy (Internet Direct) project, and is offered
+ under the dual-licensing agreement described on the Indy website.
+ (http://www.indyproject.org/)
+
+ Copyright:
+ (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
+}
+{
+ $Log$
+}
+{
+{ Rev 1.7 1/17/2005 7:25:48 PM JPMugaas
+{ Moved some stack management code here to so that we can reuse it in
+{ non-TIdComponent classes.
+{ Made HostToNetwork and NetworkToHost byte order overload functions for IPv6
+{ addresses.
+}
+{
+{ Rev 1.6 10/26/2004 8:12:30 PM JPMugaas
+{ Now uses TIdStrings and TIdStringList for portability.
+}
+{
+{ Rev 1.5 6/30/2004 12:41:14 PM BGooijen
+{ Added SetStackClass
+}
+{
+ Rev 1.4 6/11/2004 8:28:50 AM DSiders
+ Added "Do not Localize" comments.
+}
+{
+{ Rev 1.3 4/18/04 2:45:38 PM RLebeau
+{ Conversion support for Int64 values
+}
+{
+{ Rev 1.2 2004.03.07 11:45:22 AM czhower
+{ Flushbuffer fix + other minor ones found
+}
+{
+{ Rev 1.1 3/6/2004 5:16:20 PM JPMugaas
+{ Bug 67 fixes. Do not write to const values.
+}
+{
+{ Rev 1.0 2004.02.03 3:14:42 PM czhower
+{ Move and updates
+}
+{
+{ Rev 1.39 2/1/2004 6:10:50 PM JPMugaas
+{ GetSockOpt.
+}
+{
+{ Rev 1.38 2/1/2004 3:28:24 AM JPMugaas
+{ Changed WSGetLocalAddress to GetLocalAddress and moved into IdStack since
+{ that will work the same in the DotNET as elsewhere. This is required to
+{ reenable IPWatch.
+}
+{
+{ Rev 1.37 2/1/2004 1:54:56 AM JPMugaas
+{ Missapplied fix. IP 0.0.0.0 should now be accepted.
+}
+{
+{ Rev 1.36 1/31/2004 4:39:12 PM JPMugaas
+{ Removed empty methods.
+}
+{
+{ Rev 1.35 1/31/2004 1:13:04 PM JPMugaas
+{ Minor stack changes required as DotNET does support getting all IP addresses
+{ just like the other stacks.
+}
+{
+{ Rev 1.34 2004.01.22 5:59:10 PM czhower
+{ IdCriticalSection
+}
+{
+{ Rev 1.33 1/18/2004 11:15:52 AM JPMugaas
+{ IsIP was not handling "0" in an IP address. This caused the address
+{ "127.0.0.1" to be treated as a hostname.
+}
+{
+{ Rev 1.32 12/4/2003 3:14:50 PM BGooijen
+{ Added HostByAddress
+}
+{
+{ Rev 1.31 1/3/2004 12:21:44 AM BGooijen
+{ Added function SupportsIPv6
+}
+{
+{ Rev 1.30 12/31/2003 9:54:16 PM BGooijen
+{ Added IPv6 support
+}
+{
+{ Rev 1.29 2003.12.31 3:47:42 PM czhower
+{ Changed to use TextIsSame
+}
+{
+{ Rev 1.28 10/21/2003 9:24:32 PM BGooijen
+{ Started on SendTo, ReceiveFrom
+}
+{
+{ Rev 1.27 10/19/2003 5:21:28 PM BGooijen
+{ SetSocketOption
+}
+{
+ Rev 1.26 10/15/2003 7:21:02 PM DSiders
+ Added resource strings in TIdStack.Make.
+}
+{
+{ Rev 1.25 2003.10.11 5:51:02 PM czhower
+{ -VCL fixes for servers
+{ -Chain suport for servers (Super core)
+{ -Scheduler upgrades
+{ -Full yarn support
+}
+{
+{ Rev 1.24 10/5/2003 9:55:30 PM BGooijen
+{ TIdTCPServer works on D7 and DotNet now
+}
+{
+{ Rev 1.23 04/10/2003 22:31:56 HHariri
+{ moving of WSNXXX method to IdStack and renaming of the DotNet ones
+}
+{
+{ Rev 1.22 10/2/2003 7:31:18 PM BGooijen
+{ .net
+}
+{
+{ Rev 1.21 10/2/2003 6:05:16 PM GGrieve
+{ DontNet
+}
+{
+{ Rev 1.20 2003.10.02 10:16:30 AM czhower
+{ .Net
+}
+{
+{ Rev 1.19 2003.10.01 9:11:20 PM czhower
+{ .Net
+}
+{
+{ Rev 1.18 2003.10.01 5:05:16 PM czhower
+{ .Net
+}
+{
+{ Rev 1.17 2003.10.01 2:30:40 PM czhower
+{ .Net
+}
+{
+{ Rev 1.16 2003.10.01 12:30:08 PM czhower
+{ .Net
+}
+{
+{ Rev 1.14 2003.10.01 1:37:36 AM czhower
+{ .Net
+}
+{
+{ Rev 1.12 9/30/2003 7:15:46 PM BGooijen
+{ IdCompilerDefines.inc is included now
+}
+{
+{ Rev 1.11 2003.09.30 1:23:04 PM czhower
+{ Stack split for DotNet
+}
+unit IdStack;
+
+{$I IdCompilerDefines.inc}
+{$DEFINE IDFREEONFINAL}
+
+interface
+
+uses
+ IdException, IdStackConsts, IdObjs, IdGlobal, IdSys;
+
+type
+ EIdSocketError = class(EIdException)
+ private
+ FLastError: Integer;
+ public
+ // Params must be in this order to avoid conflict with CreateHelp
+ // constructor in CBuilder
+ constructor CreateError(const AErr: Integer; const AMsg: string); virtual;
+ //
+ property LastError: Integer read FLastError;
+ end;
+
+ TIdPacketInfo = class
+ protected
+ FSourceIP: String;
+ FSourcePort : Integer;
+ FDestIP: String;
+ FDestPort : Integer;
+ FSourceIF: Cardinal;
+ FDestIF: Cardinal;
+ FTTL: Byte;
+ public
+ property TTL : Byte read FTTL write FTTL;
+ //The computer that sent it to you
+ property SourceIP : String read FSourceIP write FSourceIP;
+ property SourcePort : Integer read FSourcePort write FSourcePort;
+ property SourceIF : Cardinal read FSourceIF write FSourceIF;
+ //you, the receiver - this is provided for multihorned machines
+ property DestIP : String read FDestIP write FDestIP;
+ property DestPort : Integer read FDestPort write FDestPort;
+ property DestIF : Cardinal read FDestIF write FDestIF;
+ end;
+ TIdSocketListClass = class of TIdSocketList;
+
+ // Descend from only TObject. This objects is created a lot and should be fast
+ // and small
+ TIdSocketList = class(TObject)
+ protected
+ FLock: TIdCriticalSection;
+ //
+ function GetItem(AIndex: Integer): TIdStackSocketHandle; virtual; abstract;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+ procedure Add(AHandle: TIdStackSocketHandle); virtual; abstract;
+ function Clone: TIdSocketList; virtual; abstract;
+ function Count: Integer; virtual; abstract;
+ class function CreateSocketList: TIdSocketList;
+ property Items[AIndex: Integer]: TIdStackSocketHandle read GetItem; default;
+ procedure Remove(AHandle: TIdStackSocketHandle); virtual; abstract;
+ procedure Clear; virtual; abstract;
+ function Contains(AHandle: TIdStackSocketHandle): boolean; virtual; abstract;
+ procedure Lock;
+ class function Select(AReadList: TIdSocketList; AWriteList: TIdSocketList;
+ AExceptList: TIdSocketList; const ATimeout: Integer = IdTimeoutInfinite): Boolean; virtual;
+ function SelectRead(const ATimeout: Integer = IdTimeoutInfinite): Boolean; virtual; abstract;
+ function SelectReadList(var VSocketList: TIdSocketList; const ATimeout: Integer = IdTimeoutInfinite): Boolean; virtual; abstract;
+ procedure Unlock;
+ end;
+
+ TIdStack = class(TObject)
+ protected
+ FHostName: string;
+ FLocalAddress: string;
+ FLocalAddresses: TIdStrings;
+ //
+ function HostByName(const AHostName: string;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION): string; virtual; abstract;
+
+ function MakeCanonicalIPv6Address(const AAddr: string): string;
+ function ReadHostName: string; virtual; abstract;
+ procedure PopulateLocalAddresses; virtual; abstract;
+ function GetLocalAddress: string; virtual; abstract;
+ function GetLocalAddresses: TIdStrings; virtual; abstract;
+ public
+ function Accept(ASocket: TIdStackSocketHandle; var VIP: string;
+ var VPort: Integer;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION
+ ): TIdStackSocketHandle; virtual; abstract;
+ procedure Bind(ASocket: TIdStackSocketHandle; const AIP: string;
+ const APort: Integer;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION ); virtual; abstract;
+ procedure Connect(const ASocket: TIdStackSocketHandle; const AIP: string;
+ const APort: TIdPort;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION); virtual; abstract;
+ constructor Create; virtual;
+ procedure Disconnect(ASocket: TIdStackSocketHandle); virtual; abstract;
+ function IOControl(const s: TIdStackSocketHandle; const cmd: cardinal; var arg: cardinal ): Integer; virtual; abstract;
+ class procedure Make;
+ class procedure IncUsage; //create stack if necessary and inc counter
+ class procedure DecUsage; //decrement counter and free if it gets to zero
+ procedure GetPeerName(ASocket: TIdStackSocketHandle; var VIP: string;
+ var VPort: Integer); virtual; abstract;
+ procedure GetSocketName(ASocket: TIdStackSocketHandle; var VIP: string;
+ var VPort: TIdPort); virtual; abstract;
+ function HostByAddress(const AAddress: string;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION): string; virtual; abstract;
+ function HostToNetwork(AValue: Word): Word; overload; virtual; abstract;
+ function HostToNetwork(AValue: LongWord): LongWord; overload; virtual; abstract;
+ function HostToNetwork(AValue: Int64): Int64; overload; virtual; abstract;
+ function HostToNetwork(AValue: TIdIPv6Address): TIdIPv6Address; overload; virtual;
+ function IsIP(AIP: string): Boolean;
+ procedure Listen(ASocket: TIdStackSocketHandle; ABackLog: Integer); virtual;
+ abstract;
+ function NewSocketHandle(const ASocketType:TIdSocketType;
+ const AProtocol: TIdSocketProtocol;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION;
+ const AOverlapped: Boolean = False)
+ : TIdStackSocketHandle; virtual; abstract;
+ function NetworkToHost(AValue: Word): Word; overload; virtual; abstract;
+ function NetworkToHost(AValue: LongWord): LongWord; overload; virtual; abstract;
+ function NetworkToHost(AValue: Int64): Int64; overload; virtual; abstract;
+ function NetworkToHost(AValue: TIdIPv6Address): TIdIPv6Address; overload; virtual;
+ procedure GetSocketOption(ASocket: TIdStackSocketHandle;
+ ALevel: TIdSocketOptionLevel; AOptName: TIdSocketOption;
+ out AOptVal: Integer); virtual; abstract;
+ procedure SetSocketOption(ASocket: TIdStackSocketHandle; ALevel:TIdSocketOptionLevel;
+ AOptName: TIdSocketOption; AOptVal: Integer); overload;virtual;abstract;
+ function ResolveHost(const AHost: string;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION): string;
+
+ // Result:
+ // > 0: Number of bytes received
+ // 0: Connection closed gracefully
+ // Will raise exceptions in other cases
+ function Receive(ASocket: TIdStackSocketHandle; var VBuffer: TIdBytes)
+ : Integer; virtual; abstract;
+ function Send(
+ ASocket: TIdStackSocketHandle;
+ const ABuffer: TIdBytes;
+ AOffset: Integer = 0;
+ ASize: Integer = -1
+ ): Integer; virtual; abstract;
+
+ function ReceiveFrom(ASocket: TIdStackSocketHandle; var VBuffer: TIdBytes;
+ var VIP: string; var VPort: Integer;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION
+ ): Integer; virtual; abstract;
+ function SendTo(ASocket: TIdStackSocketHandle; const ABuffer: TIdBytes;
+ const AOffset: Integer; const AIP: string; const APort: integer;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION
+ ): Integer; virtual; abstract;
+ function ReceiveMsg(ASocket: TIdStackSocketHandle;
+ var VBuffer: TIdBytes;
+ APkt : TIdPacketInfo;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION): Cardinal; virtual; abstract;
+ function SupportsIPv6:boolean; virtual; abstract;
+
+ //multicast stuff Kudzu permitted me to add here.
+ function IsValidIPv4MulticastGroup(const Value: string): Boolean;
+ function IsValidIPv6MulticastGroup(const Value: string): Boolean;
+ procedure SetMulticastTTL(AHandle: TIdStackSocketHandle;
+ const AValue : Byte; const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION); virtual; abstract;
+ procedure SetLoopBack(AHandle: TIdStackSocketHandle; const AValue: Boolean;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION); virtual; abstract;
+ procedure DropMulticastMembership(AHandle: TIdStackSocketHandle;
+ const AGroupIP, ALocalIP : String; const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION); virtual; abstract;
+ procedure AddMulticastMembership(AHandle: TIdStackSocketHandle;
+ const AGroupIP, ALocalIP : String; const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION); virtual; abstract;
+ //I know this looks like an odd place to put a function for calculating a
+ //packet checksum. There is a reason for it though. The reason is that
+ //you need it for ICMPv6 and in Windows, you do that with some other stuff
+ //in the stack descendants
+ function CalcCheckSum(const AData : TIdBytes): word; virtual;
+ //In Windows, this writes a checksum into a buffer. In Linux, it would probably
+ //simply have the kernal write the checksum with something like this (RFC 2292):
+//
+// int offset = 2;
+// setsockopt(fd, IPPROTO_IPV6, IPV6_CHECKSUM, &offset, sizeof(offset));
+//
+// Note that this should be called
+ //IMMEDIATELY before you do a SendTo because the Local IPv6 address might change
+ procedure WriteChecksum(s : TIdStackSocketHandle;
+ var VBuffer : TIdBytes;
+ const AOffset : Integer;
+ const AIP : String;
+ const APort : Integer;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION); virtual; abstract;
+ //
+ // Properties
+ //
+ property HostName: string read FHostname;
+ property LocalAddress: string read GetLocalAddress;
+ property LocalAddresses: TIdStrings read GetLocalAddresses;
+ end;
+
+ TIdStackClass = class of TIdStack;
+
+var
+ GStack: TIdStack = nil;
+ GSocketListClass: TIdSocketListClass;
+
+// Procedures
+ function IdStackFactory : TIdStack;
+ procedure SetStackClass( AStackClass: TIdStackClass );
+
+implementation
+
+uses
+ {$IFDEF LINUX} IdStackLinux, {$ENDIF}
+ {$IFDEF MSWINDOWS} IdStackWindows, {$ENDIF}
+ {$IFDEF DOTNET} IdStackDotNet, {$ENDIF}
+ IdResourceStrings;
+
+var
+ GStackClass: TIdStackClass = nil;
+
+var
+ GInstanceCount: Integer = 0;
+ GStackCriticalSection: TIdCriticalSection;
+
+//for IPv4 Multicast address chacking
+const
+ IPv4MCastLo = 224;
+ IPv4MCastHi = 239;
+
+procedure SetStackClass( AStackClass: TIdStackClass );
+begin
+ GStackClass := AStackClass;
+end;
+
+function IdStackFactory: TIdStack;
+begin
+ Result := GStackClass.Create;
+ // GStackClass used to be public, but this factory has
+ // replaced it so that the following line (which once
+ // live in AfterConstruction, but this doesn't exist
+ // in DotNet) will be run
+ Result.FHostName := Result.ReadHostName;
+end;
+
+{ TIdSocketList }
+
+constructor TIdSocketList.Create;
+begin
+ inherited Create;
+ FLock := TIdCriticalSection.Create;
+end;
+
+class function TIdSocketList.CreateSocketList: TIdSocketList;
+Begin
+ Result := GSocketListClass.Create;
+End;
+
+destructor TIdSocketList.Destroy;
+begin
+ Sys.FreeAndNil(FLock);
+ inherited Destroy;
+end;
+
+procedure TIdSocketList.Lock;
+begin
+ FLock.Acquire;
+end;
+
+class function TIdSocketList.Select(AReadList, AWriteList,
+ AExceptList: TIdSocketList; const ATimeout: Integer): Boolean;
+begin
+ // C++ Builder cannot have abstract class functions thus we need this base
+ Result := False;
+end;
+
+procedure TIdSocketList.Unlock;
+begin
+ FLock.Release;
+end;
+
+{ TIdStack }
+
+constructor TIdStack.Create;
+begin
+ // Here for .net
+ inherited Create;
+end;
+
+function TIdStack.IsIP(AIP: string): Boolean;
+var
+ i: Integer;
+begin
+//
+//Result := Result and ((i > 0) and (i < 256));
+//
+ i := Sys.StrToInt(Fetch(AIP, '.'), -1); {Do not Localize}
+ Result := (i > -1) and (i < 256);
+ i := Sys.StrToInt(Fetch(AIP, '.'), -1); {Do not Localize}
+ Result := Result and ((i > -1) and (i < 256));
+ i := Sys.StrToInt(Fetch(AIP, '.'), -1); {Do not Localize}
+ Result := Result and ((i > -1) and (i < 256));
+ i := Sys.StrToInt(Fetch(AIP, '.'), -1); {Do not Localize}
+ Result := Result and ((i > -1) and (i < 256)) and (AIP = '');
+end;
+
+function TIdStack.MakeCanonicalIPv6Address(const AAddr: string): string;
+// return an empty string if the address is invalid,
+// for easy checking if its an address or not.
+var
+ p, i: integer;
+ dots, colons: integer;
+ colonpos: array[1..8] of integer;
+ dotpos: array[1..3] of integer;
+ LAddr: string;
+ num: integer;
+ haddoublecolon: boolean;
+ fillzeros: integer;
+begin
+ Result := ''; // error
+ LAddr := AAddr;
+ if Length(LAddr) = 0 then exit;
+
+ if LAddr[1] = ':' then begin
+ LAddr := '0'+LAddr;
+ end;
+ if LAddr[Length(LAddr)] = ':' then begin
+ LAddr := LAddr + '0';
+ end;
+ dots := 0;
+ colons := 0;
+ for p := 1 to Length(LAddr) do begin
+ case LAddr[p] of
+ '.' : begin
+ inc(dots);
+ if dots < 4 then begin
+ dotpos[dots] := p;
+ end else begin
+ exit; // error in address
+ end;
+ end;
+ ':' : begin
+ inc(colons);
+ if colons < 8 then begin
+ colonpos[colons] := p;
+ end else begin
+ exit; // error in address
+ end;
+ end;
+ 'a'..'f',
+ 'A'..'F': if dots>0 then exit;
+ // allow only decimal stuff within dotted portion, ignore otherwise
+ '0'..'9': ; // do nothing
+ else exit; // error in address
+ end; // case
+ end; // for
+ if not (dots in [0,3]) then begin
+ exit; // you have to write 0 or 3 dots...
+ end;
+ if dots = 3 then begin
+ if not (colons in [2..6]) then begin
+ exit; // must not have 7 colons if we have dots
+ end;
+ if colonpos[colons] > dotpos[1] then begin
+ exit; // x:x:x.x:x:x is not valid
+ end;
+ end else begin
+ if not (colons in [2..7]) then begin
+ exit; // must at least have two colons
+ end;
+ end;
+
+ // now start :-)
+ num := Sys.StrToInt('$'+Copy(LAddr, 1, colonpos[1]-1), -1);
+ if (num<0) or (num>65535) then begin
+ exit; // huh? odd number...
+ end;
+ Result := Sys.IntToHex(num,1)+':';
+
+ haddoublecolon := false;
+ for p := 2 to colons do begin
+ if colonpos[p-1] = colonpos[p]-1 then begin
+ if haddoublecolon then begin
+ Result := '';
+ exit; // only a single double-dot allowed!
+ end;
+ haddoublecolon := true;
+ fillzeros := 8 - colons;
+ if dots>0 then dec(fillzeros,2);
+ for i := 1 to fillzeros do begin
+ Result := Result + '0:'; {do not localize}
+ end;
+ end else begin
+ num := Sys.StrToInt('$'+Copy(LAddr, colonpos[p-1]+1, colonpos[p]-colonpos[p-1]-1), -1);
+ if (num<0) or (num>65535) then begin
+ Result := '';
+ exit; // huh? odd number...
+ end;
+ Result := Result + Sys.IntToHex(num,1)+':';
+ end;
+ end; // end of colon separated part
+
+ if dots = 0 then begin
+ num := Sys.StrToInt('$'+Copy(LAddr, colonpos[colons]+1, MaxInt), -1);
+ if (num<0) or (num>65535) then begin
+ Result := '';
+ exit; // huh? odd number...
+ end;
+ Result := Result + Sys.IntToHex(num,1)+':';
+ end;
+
+ if dots > 0 then begin
+ num := Sys.StrToInt(Copy(LAddr, colonpos[colons]+1, dotpos[1]-colonpos[colons]-1),-1);
+ if (num < 0) or (num>255) then begin
+ Result := '';
+ exit;
+ end;
+ Result := Result + Sys.IntToHex(num, 2);
+ num := Sys.StrToInt(Copy(LAddr, dotpos[1]+1, dotpos[2]-dotpos[1]-1),-1);
+ if (num < 0) or (num>255) then begin
+ Result := '';
+ exit;
+ end;
+ Result := Result + Sys.IntToHex(num, 2)+':';
+
+ num := Sys.StrToInt(Copy(LAddr, dotpos[2]+1, dotpos[3]-dotpos[2]-1),-1);
+ if (num < 0) or (num>255) then begin
+ Result := '';
+ exit;
+ end;
+ Result := Result + Sys.IntToHex(num, 2);
+ num := Sys.StrToInt(Copy(LAddr, dotpos[3]+1, 3), -1);
+ if (num < 0) or (num>255) then begin
+ Result := '';
+ exit;
+ end;
+ Result := Result + Sys.IntToHex(num, 2)+':';
+ end;
+ SetLength(Result, Length(Result)-1);
+end;
+
+class procedure TIdStack.Make;
+begin
+ EIdException.IfTrue(GStackClass = nil, RSStackClassUndefined);
+ EIdException.IfTrue(GStack <> nil, RSStackAlreadyCreated);
+ GStack := IdStackFactory;
+end;
+
+function TIdStack.ResolveHost(const AHost: string;
+ const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION): string;
+begin
+ if AIPVersion = Id_IPv4 then begin
+ // Sometimes 95 forgets who localhost is
+ if TextIsSame(AHost, 'LOCALHOST') then begin {Do not Localize}
+ Result := '127.0.0.1'; {Do not Localize}
+ end else if IsIP(AHost) then begin
+ Result := AHost;
+ end else begin
+ Result := HostByName(AHost, Id_IPv4);
+ end;
+ end else if AIPVersion = Id_IPv6 then begin
+ result := MakeCanonicalIPv6Address(AHost);
+ if result='' then begin
+ Result := HostByName(AHost, Id_IPv6);
+ end;
+ end //else IPVersionUnsupported; // IPVersionUnsupported is introduced in
+ // a decendant class, so we can't use it here,
+ // TODO: move it to this class
+end;
+
+constructor EIdSocketError.CreateError(const AErr: Integer; const AMsg: string);
+begin
+ inherited Create(AMsg);
+ FLastError := AErr;
+end;
+
+class procedure TIdStack.DecUsage;
+begin
+ Assert(GStackCriticalSection<>nil);
+
+ GStackCriticalSection.Acquire; try
+ Dec(GInstanceCount);
+ if GInstanceCount = 0 then begin
+ // This CS will guarantee that during the FreeAndNil nobody will try to use
+ // or construct GStack
+ Sys.FreeAndNil(GStack);
+ end;
+ finally GStackCriticalSection.Release; end;
+end;
+
+class procedure TIdStack.IncUsage;
+begin
+ Assert(GStackCriticalSection<>nil);
+
+ GStackCriticalSection.Acquire; try
+ Inc(GInstanceCount);
+ if GInstanceCount = 1 then begin
+ TIdStack.Make;
+ end;
+ finally GStackCriticalSection.Release; end;
+end;
+
+function TIdStack.HostToNetwork(AValue: TIdIPv6Address): TIdIPv6Address;
+var i : Integer;
+begin
+ for i := 0 to 7 do begin
+ Result[i] := HostToNetwork(AValue[i]);
+ end;
+end;
+
+function TIdStack.NetworkToHost(AValue: TIdIPv6Address): TIdIPv6Address;
+var i : Integer;
+begin
+ for i := 0 to 7 do begin
+ Result[i] := NetworkToHost(AValue[i]);
+ end;
+end;
+
+function TIdStack.IsValidIPv4MulticastGroup(const Value: string): Boolean;
+var
+ ThisIP: string;
+ s1: string;
+ ip1: integer;
+begin
+ Result := false;
+
+ if not GStack.IsIP(Value) then
+ begin
+ Exit;
+ end;
+ ThisIP := Value;
+ s1 := Fetch(ThisIP, '.'); {Do not Localize}
+ ip1 := Sys.StrToInt(s1);
+
+ if ((ip1 < IPv4MCastLo) or (ip1 > IPv4MCastHi)) then
+ begin
+ Exit;
+ end;
+ Result := true;
+end;
+
+function TIdStack.IsValidIPv6MulticastGroup(const Value: string): Boolean;
+var
+ LTmp : String;
+begin
+ Result := False;
+ LTmp := MakeCanonicalIPv6Address(Value);
+ if LTmp = '' then
+ begin
+ //not valid IP
+ Exit;
+ end;
+{ From "rfc 2373"
+
+2.7 Multicast Addresses
+
+ An IPv6 multicast address is an identifier for a group of nodes. A
+ node may belong to any number of multicast groups. Multicast
+ addresses have the following format:
+
+#
+ | 8 | 4 | 4 | 112 bits |
+ +------ -+----+----+---------------------------------------------+
+ |11111111|flgs|scop| group ID |
+ +--------+----+----+---------------------------------------------+
+
+ 11111111 at the start of the address identifies the address as
+ being a multicast address.
+
+ +-+-+-+-+
+ flgs is a set of 4 flags: |0|0|0|T|
+ +-+-+-+-+
+
+ The high-order 3 flags are reserved, and must be initialized to
+ 0.
+
+ T = 0 indicates a permanently-assigned ("well-known") multicast
+ address, assigned by the global internet numbering authority.
+
+ T = 1 indicates a non-permanently-assigned ("transient")
+ multicast address.
+
+ scop is a 4-bit multicast scope value used to limit the scope of
+ the multicast group. The values are:
+
+ 0 reserved
+ 1 node-local scope
+ 2 link-local scope
+ 3 (unassigned)
+ 4 (unassigned)
+ 5 site-local scope
+ 6 (unassigned)
+ 7 (unassigned)
+ 8 organization-local scope
+ 9 (unassigned)
+ A (unassigned)
+ B (unassigned)
+ C (unassigned)
+
+ D (unassigned)
+ E global scope
+ F reserved
+
+ group ID identifies the multicast group, either permanent or
+ transient, within the given scope.
+
+ The "meaning" of a permanently-assigned multicast address is
+ independent of the scope value. For example, if the "NTP servers
+ group" is assigned a permanent multicast address with a group ID of
+ 101 (hex), then:
+
+ FF01:0:0:0:0:0:0:101 means all NTP servers on the same node as the
+ sender.
+
+ FF02:0:0:0:0:0:0:101 means all NTP servers on the same link as the
+ sender.
+
+ FF05:0:0:0:0:0:0:101 means all NTP servers at the same site as the
+ sender.
+
+ FF0E:0:0:0:0:0:0:101 means all NTP servers in the internet.
+
+ Non-permanently-assigned multicast addresses are meaningful only
+ within a given scope. For example, a group identified by the non-
+ permanent, site-local multicast address FF15:0:0:0:0:0:0:101 at one
+ site bears no relationship to a group using the same address at a
+ different site, nor to a non-permanent group using the same group ID
+ with different scope, nor to a permanent group with the same group
+ ID.
+
+ Multicast addresses must not be used as source addresses in IPv6
+ packets or appear in any routing header.
+}
+ Result := Copy(LTmp,1,2)='FF';
+end;
+
+function TIdStack.CalcCheckSum(const AData: TIdBytes): word;
+var i : Integer;
+ LSize : Integer;
+ LCRC : Cardinal;
+begin
+ LCRC := 0;
+ i := 0;
+
+ LSize := Length(AData);
+
+ while LSize >1 do
+ begin
+ LCRC := LCRC + IdGlobal.BytesToWord(AData,i);
+
+ Dec(LSize,2);
+ inc(i,2);
+
+ end;
+ if LSize>0 then
+ begin
+ LCRC := LCRC + AData[i];
+ end;
+ LCRC := (LCRC shr 16) + (LCRC and $ffff); //(LCRC >> 16)
+ LCRC := LCRC + (LCRC shr 16);
+
+ Result := not Word(LCRC);
+end;
+
+initialization
+ GStackClass :=
+ {$IFDEF LINUX} TIdStackLinux; {$ENDIF}
+ {$IFDEF MSWINDOWS} TIdStackWindows; {$ENDIF}
+ {$IFDEF DOTNET} TIdStackDotNet; {$ENDIF}
+ GStackCriticalSection := TIdCriticalSection.Create;
+finalization
+ // Dont Free. If shutdown is from another Init section, it can cause GPF when stack
+ // tries to access it. App will kill it off anyways, so just let it leak
+ {$IFDEF IDFREEONFINAL}
+ Sys.FreeAndNil(GStackCriticalSection);
+ {$ENDIF}
+end.
diff --git a/official/2.20/Source/IdThread.pas b/official/2.20/Source/IdThread.pas
new file mode 100644
index 0000000..1532125
--- /dev/null
+++ b/official/2.20/Source/IdThread.pas
@@ -0,0 +1,618 @@
+{
+ $Project$
+ $Workfile$
+ $Revision$
+ $DateUTC$
+ $Id$
+
+ This file is part of the Indy (Internet Direct) project, and is offered
+ under the dual-licensing agreement described on the Indy website.
+ (http://www.indyproject.org/)
+
+ Copyright:
+ (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
+}
+{
+ $Log$
+}
+{
+{ Rev 1.34 03/16/05 10:29:40 AM JSouthwell
+{ Added a default thread name to ease debugging of IdThreads.
+}
+{
+{ Rev 1.33 1/15/05 1:52:36 PM RLebeau
+{ Extra cleanup handling for the FYarn member
+}
+{
+{ Rev 1.32 1/6/2005 10:02:58 PM JPMugaas
+{ This should compile.
+}
+{
+{ Rev 1.31 1/6/05 2:33:04 PM RLebeau
+{ one more try...finally block, for Before/AfterExecute()
+}
+{
+{ Rev 1.29 1/5/05 5:31:08 PM RLebeau
+{ Added extra try..finally block to Execute() to free the FYarn member.
+}
+{
+ Rev 1.28 6/9/2004 10:38:46 PM DSiders
+ Fixed case for TIdNotifyThreadEvent.
+}
+{
+{ Rev 1.27 3/12/2004 7:11:02 PM BGooijen
+{ Changed order of commands for dotnet
+}
+{
+{ Rev 1.26 2004.03.01 5:12:44 PM czhower
+{ -Bug fix for shutdown of servers when connections still existed (AV)
+{ -Implicit HELP support in CMDserver
+{ -Several command handler bugs
+{ -Additional command handler functionality.
+}
+{
+{ Rev 1.25 2004.02.03 4:17:00 PM czhower
+{ For unit name changes.
+}
+{
+{ Rev 1.24 2004.01.22 5:59:12 PM czhower
+{ IdCriticalSection
+}
+{
+{ Rev 1.23 2003.12.28 2:33:16 PM czhower
+{ .Net finalization fix.
+}
+{
+{ Rev 1.22 2003.12.28 1:27:46 PM czhower
+{ .Net compatibility
+}
+{
+{ Rev 1.21 2003.10.24 12:59:20 PM czhower
+{ Name change
+}
+{
+{ Rev 1.20 2003.10.21 12:19:04 AM czhower
+{ TIdTask support and fiber bug fixes.
+}
+{
+ Rev 1.19 10/15/2003 8:40:48 PM DSiders
+ Added locaization comments.
+}
+{
+{ Rev 1.18 10/5/2003 3:19:58 PM BGooijen
+{ disabled some stuff for DotNet
+}
+{
+{ Rev 1.17 2003.09.19 10:11:22 PM czhower
+{ Next stage of fiber support in servers.
+}
+{
+{ Rev 1.14 2003.09.19 11:54:36 AM czhower
+{ -Completed more features necessary for servers
+{ -Fixed some bugs
+}
+{
+{ Rev 1.13 2003.09.18 4:43:18 PM czhower
+{ -Removed IdBaseThread
+{ -Threads now have default names
+}
+{
+{ Rev 1.12 12.9.2003 ã. 16:42:08 DBondzhev
+{ Fixed AV when exception is raised in BeforeRun and thread is terminated
+{ before Start is compleated
+}
+{
+{ Rev 1.11 2003.07.08 2:41:52 PM czhower
+{ Avoid calling SetThreadName if we do not need to
+}
+{
+{ Rev 1.10 08.07.2003 13:16:18 ARybin
+{ tiny opt fix
+}
+{
+ Rev 1.9 7/1/2003 7:11:30 PM BGooijen
+ Added comment
+}
+{
+{ Rev 1.8 2003.07.01 4:14:58 PM czhower
+{ Consolidation.
+{ Added Name, Loop
+}
+{
+{ Rev 1.7 04.06.2003 14:06:20 ARybin
+{ bug fix & limited waiting
+}
+{
+{ Rev 1.6 28.05.2003 14:16:16 ARybin
+{ WaitAllThreadsTerminated class method
+}
+{
+{ Rev 1.5 08.05.2003 12:45:10 ARybin
+{ "be sure" fix
+}
+{
+ Rev 1.4 4/30/2003 4:53:26 PM BGooijen
+ Fixed bug in Kylix where GThreadCount was not decremented
+}
+{
+ Rev 1.3 4/22/2003 4:44:06 PM BGooijen
+ changed Handle to ThreadID
+}
+{
+ Rev 1.2 3/22/2003 12:53:26 PM BGooijen
+ - Exceptions in the constructor are now handled better.
+ - GThreadCount can't become negative anymore
+}
+{
+{ Rev 1.1 06.03.2003 11:54:24 ARybin
+{ TIdThreadOptions: is thread Data owner, smart Cleanup
+}
+{
+{ Rev 1.0 11/13/2002 09:01:14 AM JPMugaas
+}
+unit IdThread;
+
+{
+2002-03-12 -Andrew P.Rybin
+ -TerminatingExceptionClass, etc.
+2002-06-20 -Andrew P.Rybin
+ -"Terminated Start" bug fix (FLock.Leave AV)
+ -Wait All threads termination in FINALIZATION (prevent AV in WinSock)
+ -HandleRunException
+2003-01-27 -Andrew P.Rybin
+ -TIdThreadOptions
+}
+{$I IdCompilerDefines.inc}
+{$DEFINE IDFREEONFINAL}
+
+interface
+
+uses
+ IdGlobal, IdException, IdSys, IdYarn, IdTask, IdThreadSafe, IdObjs;
+
+const
+ IdWaitAllThreadsTerminatedCount = 1 * 60 * 1000;
+ IdWaitAllThreadsTerminatedStep = 250;
+
+type
+ EIdThreadException = class(EIdException);
+ EIdThreadTerminateAndWaitFor = class(EIdThreadException);
+
+ TIdThreadStopMode = (smTerminate, smSuspend);
+ TIdThread = class;
+ TIdExceptionThreadEvent = procedure(AThread: TIdThread; AException: Exception) of object;
+ TIdNotifyThreadEvent = procedure(AThread: TIdThread) of object;
+ TIdSynchronizeThreadEvent = procedure(AThread: TIdThread; AData: Pointer) of object;
+
+ TIdThreadOptions = set of (itoStopped, itoReqCleanup, itoDataOwner, itoTag);
+
+ TIdThread = class(TIdNativeThread)
+ protected
+ FData: TObject;
+ FLock: TIdCriticalSection;
+ FLoop: Boolean;
+ FName: string;
+ FStopMode: TIdThreadStopMode;
+ FOptions: TIdThreadOptions;
+ FTerminatingException: String;
+ FTerminatingExceptionClass: TClass;
+ FYarn: TIdYarn;
+ //
+ FOnException: TIdExceptionThreadEvent;
+ FOnStopped: TIdNotifyThreadEvent;
+ //
+ procedure AfterRun; virtual; //3* not abstract - otherwise it is required
+ procedure AfterExecute; virtual;//5 not abstract - otherwise it is required
+ procedure BeforeExecute; virtual;//1 not abstract - otherwise it is required
+ procedure BeforeRun; virtual; //2* not abstract - otherwise it is required
+ procedure Cleanup; virtual;//4*
+ procedure DoException (AException: Exception); virtual;
+ procedure DoStopped; virtual;
+ procedure Execute; override;
+ function GetStopped: Boolean;
+ function HandleRunException(AException: Exception): Boolean; virtual;
+ procedure Run; virtual; abstract;
+ class procedure WaitAllThreadsTerminated(
+ AMSec: Integer = IdWaitAllThreadsTerminatedCount);
+ public
+ constructor Create(ACreateSuspended: Boolean = True;
+ ALoop: Boolean = True; AName: string = ''); virtual;
+ destructor Destroy; override;
+ procedure Start; virtual;
+ procedure Stop; virtual;
+ procedure Synchronize(Method: TIdThreadMethod); overload;
+//BGO:TODO procedure Synchronize(Method: TMethod); overload;
+ // Here to make virtual
+ procedure Terminate; virtual;
+ procedure TerminateAndWaitFor; virtual;
+ //
+ property Data: TObject read FData write FData;
+ property Loop: Boolean read FLoop write FLoop;
+ property Name: string read FName write FName;
+ property ReturnValue;
+ property StopMode: TIdThreadStopMode read FStopMode write FStopMode;
+ property Stopped: Boolean read GetStopped;
+ property Terminated;
+ // TODO: Change this to be like TIdFiber. D6 implementation is not as good
+ // as what is done in TIdFiber.
+ property TerminatingException: string read FTerminatingException;
+ property TerminatingExceptionClass: TClass read FTerminatingExceptionClass;
+ //Represents the thread or fiber for the scheduler of the thread.
+ property Yarn: TIdYarn read FYarn write FYarn;
+ //
+ property OnException: TIdExceptionThreadEvent read FOnException write FOnException;
+ property OnStopped: TIdNotifyThreadEvent read FOnStopped write FOnStopped;
+ end;
+
+ TIdThreadWithTask = class(TIdThread)
+ protected
+ FTask: TIdTask;
+ //
+ procedure AfterRun; override;
+ procedure BeforeRun; override;
+ procedure Run; override;
+ public
+ // Defaults because
+ // Must always create suspended so task can be set
+ // And a bit crazy to create a non looped task
+ constructor Create(
+ ATask: TIdTask = nil;
+ AName: string = ''
+ ); reintroduce; virtual;
+ destructor Destroy;
+ override;
+ //
+ // Must be writeable because tasks are often created after thread or
+ // thread is pooled
+ property Task: TIdTask read FTask write FTask;
+ end;
+
+ TIdThreadClass = class of TIdThread;
+ TIdThreadWithTaskClass = class of TIdThreadWithTask;
+
+var
+ // GThreadCount shoudl be in implementation as it is not needed outside of
+ // this unit. However with D8, GThreadCount will be deallocated before the
+ // finalization can run and thus when the finalizaiton accesses GThreadCount
+ // in TerminateAll an error occurs. Moving this declaration to the interface
+ // "fixes" it.
+ GThreadCount: TIdThreadSafeInteger = nil;
+
+implementation
+
+uses
+ IdResourceStringsCore;
+
+class procedure TIdThread.WaitAllThreadsTerminated(
+ AMSec: Integer = IdWaitAllThreadsTerminatedCount);
+begin
+ while AMSec > 0 do begin
+ if GThreadCount.Value = 0 then begin
+ Break;
+ end;
+ Sleep(IdWaitAllThreadsTerminatedStep);
+ AMSec := AMSec - IdWaitAllThreadsTerminatedStep;
+ end;
+end;
+
+procedure TIdThread.TerminateAndWaitFor;
+begin
+ if FreeOnTerminate then begin
+ raise EIdThreadTerminateAndWaitFor.Create(RSThreadTerminateAndWaitFor);
+ end;
+ Terminate;
+ Start; //resume
+ WaitFor;
+end;
+
+procedure TIdThread.BeforeRun;
+begin
+end;
+
+procedure TIdThread.AfterRun;
+begin
+end;
+
+procedure TIdThread.BeforeExecute;
+begin
+end;
+
+procedure TIdThread.AfterExecute;
+begin
+end;
+
+procedure TIdThread.Execute;
+begin
+ // Must make this call from INSIDE the thread. The call in Create
+ // was naming the thread that was creating this thread. :(
+ //
+ // RLebeau - no need to put this inside the try blocks below as it
+ // already uses its own try..except block internally
+ if Name = '' then begin
+ Name := 'IdThread (unknown)';
+ end;
+ SetThreadName(Name);
+
+ try
+ BeforeExecute;
+ try
+ while not Terminated do begin
+ if Stopped then begin
+ DoStopped;
+ // It is possible that either in the DoStopped or from another thread,
+ // the thread is restarted, in which case we dont want to restop it.
+ if Stopped then begin // DONE: if terminated?
+ if Terminated then begin
+ Break;
+ end;
+ Suspend; // Thread manager will revive us
+ if Terminated then begin
+ Break;
+ end;
+ end;
+ end;
+
+ Include(FOptions, itoReqCleanup);
+ try
+ try
+ BeforeRun;
+ try
+ if Loop then begin
+ while not Stopped do begin
+ try
+ Run;
+ except
+ on E: Exception do begin
+ if not HandleRunException(E) then begin
+ Terminate;
+ raise;
+ end;
+ end;
+ end;
+ end;
+ end else begin
+ try
+ Run;
+ except
+ on E: Exception do begin
+ if not HandleRunException(E) then begin
+ Terminate;
+ raise;
+ end;
+ end;
+ end;
+ end;
+ finally
+ AfterRun;
+ end;
+ except
+ Terminate;
+ raise;
+ end;
+ finally
+ Cleanup;
+ end;
+ end;
+ finally
+ AfterExecute;
+ end;
+ except
+ on E: Exception do begin
+ FTerminatingExceptionClass := E.ClassType;
+ FTerminatingException := E.Message;
+ DoException(E);
+ Terminate;
+ end;
+ end;
+end;
+
+constructor TIdThread.Create(ACreateSuspended: Boolean; ALoop: Boolean;
+ AName: string);
+begin
+{$IFDEF DOTNET}
+ inherited Create(true);
+{$ENDIF}
+ FOptions := [itoDataOwner];
+ if ACreateSuspended then begin
+ Include(FOptions, itoStopped);
+ end;
+ FLock := TIdCriticalSection.Create;
+ Loop := ALoop;
+ Name := AName;
+ //
+{$IFDEF DOTNET}
+ if not ACreateSuspended then begin
+ Resume;
+ end;
+{$ELSE}
+ //
+ // Most things BEFORE inherited - inherited creates the actual thread and if
+ // not suspended will start before we initialize
+ inherited Create(ACreateSuspended);
+{$ENDIF}
+ {$IFNDEF VCL6ORABOVE}
+ // Delphi 6 and above raise an exception when an error occures
+ // while creating a thread (eg. not enough address space to allocate a stack)
+ // Delphi 5 and below don't do that, which results in a TIdThread instance
+ // with an invalid handle in it.
+ // Therefore we raise the exceptions manually on D5 and below
+ {$IFNDEF DOTNET}
+ if (ThreadID = 0) then begin
+ Sys.RaiseLastOSError;
+ end;
+ {$ENDIF}
+ {$ENDIF}
+ // Last, so we only do this if successful
+ GThreadCount.Increment;
+end;
+
+destructor TIdThread.Destroy;
+begin
+ FreeOnTerminate := False; //prevent destroy between Terminate & WaitFor
+ Terminate;
+ try
+ if itoReqCleanup in FOptions then begin
+ Cleanup;
+ end;
+ finally
+ // RLebeau- clean up the Yarn one more time, in case the thread was
+ // terminated after the Yarn was assigned but the thread was not
+ // re-started, so the Yarn would not be freed in Cleanup()
+ try
+ Sys.FreeAndNil(FYarn);
+ finally
+ // Protect FLock if thread was resumed by Start Method and we are still there.
+ // This usually happens if Exception was raised in BeforeRun for some reason
+ // And thread was terminated there before Start method is completed.
+ FLock.Enter; try
+ finally FLock.Leave; end;
+
+ Sys.FreeAndNil(FLock);
+ GThreadCount.Decrement;
+ end;
+ end;
+ inherited Destroy; //+WaitFor!
+end;
+
+procedure TIdThread.Start;
+begin
+ FLock.Enter; try
+ if Stopped then begin
+ // Resume is also called for smTerminate as .Start can be used to initially start a
+ // thread that is created suspended
+ if Terminated then begin
+ Include(FOptions,itoStopped);
+ end else begin
+ Exclude(FOptions,itoStopped);
+ end;
+ Resume;
+ {APR: [in past] thread can be destroyed here! now Destroy wait FLock}
+ end;
+ finally FLock.Leave; end;
+end;
+
+procedure TIdThread.Stop;
+begin
+ FLock.Enter; try
+ if not Stopped then begin
+ case FStopMode of
+ smTerminate: Terminate;
+ smSuspend: {DO not suspend here. Suspend is immediate. See Execute for implementation};
+ end;
+ Include(FOptions, itoStopped);
+ end;
+ finally FLock.Leave; end;
+end;
+
+function TIdThread.GetStopped: Boolean;
+begin
+ if Assigned(FLock) then begin
+ FLock.Enter; try
+ // Suspended may be True if checking stopped from another thread
+ Result := Terminated or (itoStopped in FOptions) or Suspended;
+ finally FLock.Leave; end;
+ end else begin
+ Result := True; //user call Destroy
+ end;
+end;
+
+procedure TIdThread.DoStopped;
+begin
+ if Assigned(OnStopped) then begin
+ OnStopped(Self);
+ end;
+end;
+
+procedure TIdThread.DoException (AException: Exception);
+begin
+ if Assigned(FOnException) then begin
+ FOnException(self, AException);
+ end;
+end;
+
+procedure TIdThread.Terminate;
+begin
+ //this assert can only raise if terminate is called on an already-destroyed thread
+ Assert(FLock<>nil);
+
+ FLock.Enter; try
+ Include(FOptions, itoStopped);
+ inherited Terminate;
+ finally FLock.Leave; end;
+end;
+
+procedure TIdThread.Cleanup;
+begin
+ Exclude(FOptions, itoReqCleanup);
+ Sys.FreeAndNil(FYarn);
+ if itoDataOwner in FOptions then begin
+ Sys.FreeAndNil(FData);
+ end;
+end;
+
+function TIdThread.HandleRunException(AException: Exception): Boolean;
+begin
+ // Default behavior: Exception is death sentence
+ Result := False;
+end;
+
+procedure TIdThread.Synchronize(Method: TIdThreadMethod);
+begin
+ inherited Synchronize(Method);
+end;
+//BGO:TODO
+//procedure TIdThread.Synchronize(Method: TMethod);
+//begin
+// inherited Synchronize(TThreadMethod(Method));
+//end;
+
+{ TIdThreadWithTask }
+
+procedure TIdThreadWithTask.AfterRun;
+begin
+ FTask.DoAfterRun;
+ inherited AfterRun;
+end;
+
+procedure TIdThreadWithTask.BeforeRun;
+begin
+ inherited BeforeRun;
+ FTask.DoBeforeRun;
+end;
+
+constructor TIdThreadWithTask.Create(
+ ATask: TIdTask;
+ AName: string
+ );
+begin
+ inherited Create(True, True, AName);
+ FTask := ATask;
+end;
+
+destructor TIdThreadWithTask.Destroy;
+begin
+ Sys.FreeAndNil(FTask);
+ inherited Destroy;
+end;
+
+procedure TIdThreadWithTask.Run;
+begin
+ if not FTask.DoRun then begin
+ Stop;
+ end;
+end;
+
+initialization
+ SetThreadName('Main'); {do not localize}
+ GThreadCount := TIdThreadSafeInteger.Create;
+
+ finalization
+ // This call hangs if not all threads have been properly destroyed.
+ // But without this, bad threads can often have worse results. Catch 22.
+ //TIdThread.WaitAllThreadsTerminated;
+
+ {$IFDEF IDFREEONFINAL}
+ //only enable this if you know your code exits thread-clean
+ Sys.FreeAndNil(GThreadCount);
+ {$ENDIF}
+end.
diff --git a/official/2.20/Source/IncPerfil_U.dfm b/official/2.20/Source/IncPerfil_U.dfm
new file mode 100644
index 0000000..843b1a7
--- /dev/null
+++ b/official/2.20/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.20/Source/IncPerfil_U.pas b/official/2.20/Source/IncPerfil_U.pas
new file mode 100644
index 0000000..b3d4138
--- /dev/null
+++ b/official/2.20/Source/IncPerfil_U.pas
@@ -0,0 +1,113 @@
+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;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+uses
+ CadPerfil_U;
+
+procedure TfrmIncluirPerfil.btCancelaClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmIncluirPerfil.btGravarClick(Sender: TObject);
+var
+ FNewIdUser: Integer;
+ 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;
+ TfrmCadastrarPerfil(Owner).FDataSetPerfilUsuario.Close;
+ TfrmCadastrarPerfil(Owner).FDataSetPerfilUsuario.Open;
+ TfrmCadastrarPerfil(Owner).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.20/Source/IncUser_U.dfm b/official/2.20/Source/IncUser_U.dfm
new file mode 100644
index 0000000..181971b
--- /dev/null
+++ b/official/2.20/Source/IncUser_U.dfm
@@ -0,0 +1,460 @@
+object frmIncluirUsuario: TfrmIncluirUsuario
+ Left = 323
+ Top = 236
+ BorderStyle = bsDialog
+ Caption = 'Cadastro de Usu'#225'rios'
+ ClientHeight = 254
+ 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 = 219
+ 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 = 219
+ Align = alClient
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ TabOrder = 0
+ object lbNome: TLabel
+ Left = 52
+ Top = 18
+ Width = 34
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Nome :'
+ end
+ object lbLogin: TLabel
+ Left = 54
+ Top = 50
+ Width = 32
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Login :'
+ end
+ object lbEmail: TLabel
+ Left = 54
+ Top = 82
+ Width = 32
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'EMail :'
+ end
+ object lbPerfil: TLabel
+ Left = 57
+ Top = 114
+ Width = 29
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Perfil :'
+ end
+ object btlimpa: TSpeedButton
+ Left = 335
+ Top = 111
+ Width = 19
+ Height = 19
+ 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 = 31
+ Top = 148
+ Width = 55
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Expira em : '
+ end
+ object LabelDias: TLabel
+ Left = 331
+ Top = 148
+ Width = 19
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'dias'
+ end
+ object EditNome: TEdit
+ Left = 89
+ Top = 15
+ Width = 265
+ Height = 21
+ Ctl3D = True
+ MaxLength = 30
+ ParentCtl3D = False
+ TabOrder = 0
+ end
+ object EditLogin: TEdit
+ Left = 89
+ Top = 47
+ Width = 265
+ Height = 21
+ Ctl3D = True
+ MaxLength = 30
+ ParentCtl3D = False
+ TabOrder = 1
+ end
+ object EditEmail: TEdit
+ Left = 89
+ Top = 79
+ Width = 265
+ Height = 21
+ Ctl3D = True
+ MaxLength = 150
+ ParentCtl3D = False
+ TabOrder = 2
+ end
+ object ckPrivilegiado: TCheckBox
+ Left = 89
+ Top = 193
+ Width = 120
+ Height = 17
+ Caption = 'Usu'#225'rio privilegiado'
+ TabOrder = 4
+ end
+ object ComboPerfil: TDBLookupComboBox
+ Left = 89
+ Top = 111
+ Width = 242
+ Height = 21
+ Ctl3D = True
+ KeyField = 'IDUser'
+ ListField = 'Nome'
+ ListSource = frmCadastrarUsuario.DataSource2
+ ParentCtl3D = False
+ TabOrder = 3
+ end
+ object ckUserExpired: TCheckBox
+ Left = 89
+ Top = 169
+ Width = 160
+ Height = 17
+ Caption = 'Senha do usu'#225'rio n'#227'o expira'
+ TabOrder = 5
+ OnClick = ckUserExpiredClick
+ end
+ object SpinExpira: TSpinEdit
+ Left = 88
+ Top = 140
+ Width = 241
+ Height = 22
+ MaxValue = 100
+ MinValue = 10
+ TabOrder = 6
+ Value = 10
+ end
+ end
+end
diff --git a/official/2.20/Source/IncUser_U.pas b/official/2.20/Source/IncUser_U.pas
new file mode 100644
index 0000000..e4cbb66
--- /dev/null
+++ b/official/2.20/Source/IncUser_U.pas
@@ -0,0 +1,247 @@
+unit IncUser_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,
+ Spin;
+
+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;
+ 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;
+ end;
+
+implementation
+
+uses
+ CadUser_U,
+ 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;
+ vNovoIDUsuario: 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);
+
+ { TODO -oLuiz -cUpgrade : Consertar a Senha para poder avisar MD5 }
+ if (Assigned(MailUserControl)) and (MailUserControl.AdicionaUsuario.Ativo) then
+ try
+ MailUserControl.EnviaEmailAdicionaUsuario(vNome, vLogin, Encrypt(vNovaSenha, EncryptKey), vEmail, IntToStr(vPerfil), EncryptKey);
+ except
+ on E: Exception do
+ Log(E.Message, llMedio);
+ 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, vPrivilegiado);
+
+ { TODO -oLuiz -cUpgrade : Consertar a Senha para poder avisar MD5 }
+ if (Assigned(MailUserControl)) and (MailUserControl.AlteraUsuario.Ativo) then
+ try
+ MailUserControl.EnviaEmailAlteraUsuario(vNome,
+ vLogin,
+ TfrmCadastrarUsuario(Self.Owner).FDataSetCadastroUsuario.FieldByName('SENHA').AsString,
+ vEmail,
+ IntToStr(vPerfil),
+ EncryptKey);
+ except
+ on E: Exception do
+ Log(E.Message, 2);
+ end;
+ end;
+ TfrmCadastrarUsuario(Owner).FDataSetCadastroUsuario.Close;
+ TfrmCadastrarUsuario(Owner).FDataSetCadastroUsuario.Open;
+
+ TfrmCadastrarUsuario(Owner).FDataSetCadastroUsuario.Locate('idUser', vNovoIDUsuario, []);
+ 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 := ckUserExpired.Checked;
+end;
+
+end.
+
diff --git a/official/2.20/Source/Languages/English/UCConsts.pas b/official/2.20/Source/Languages/English/UCConsts.pas
new file mode 100644
index 0000000..d7c89bf
--- /dev/null
+++ b/official/2.20/Source/Languages/English/UCConsts.pas
@@ -0,0 +1,284 @@
+{
+
+ Unit criada por Vicente Barros Leonel
+ Ultima Revisão - 15/05/2007 Por Vicente Barros Leonel
+
+}
+
+unit UCConsts;
+
+interface
+
+const
+ // new consts version 2 a 5 =========================================
+ // Form Select Controls (design-time)
+ 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';
+ //===================================================================
+
+ // group property Settins.AppMsgsForm
+ 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';
+
+
+ // group property Settins.AppMsgsRec
+ 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';
+
+ // group property Settins.AppMsgsSend
+ 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';
+
+
+ // Run errors
+ 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!';
+
+ // group property Settings.Mensagens
+ 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 segunça 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 ';
+
+
+ //group property Settings.Login
+ 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: ';
+
+ //group property Settings.Log //new
+ 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';
+
+ //group property Settings.CadastroUsuarios
+ 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'; //added by fduenas
+
+ //group property Settings.PerfilUsuarios
+ 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'; //added by fduenas
+
+ //group property Settings.IncAltUsuario
+ 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';
+
+ //group property Settings.IncAltPerfil
+ 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';
+
+ //group property Settings.Permissao
+ 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'; // by vicente barros leonel
+ Const_Perm_BtLibera = '&Release';
+ Const_Perm_BtBloqueia = '&Block';
+ Const_Perm_BtGravar = '&Save';
+ Const_Perm_BtCancelar = '&Cancel';
+
+ //group property Settings.TrocaSenha do begin
+ 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';
+
+ //group property Settings.Mensagens.ErroTrocaSenha
+ 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';
+
+ //group property Settings.DefineSenha
+ Const_DefPass_WindowCaption = 'Define Password of the user : "%s"';
+ Const_DefPass_LabelSenha = 'Password :';
+
+ //Group das tabelas do UC
+ 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_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';
+
+
+{ TUCHISTORICO }
+ //Eventos
+ Const_Evento_Insert = 'Insert';
+ Const_Evento_Delete = 'Delete';
+ Const_Evento_Edit = 'Edit';
+ Const_Evento_NewRecord = 'New record';
+
+ //Gerais
+ 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';
+
+ //Campos da tabela
+ 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'; // nome do campo que grava a tabela nao confuda
+
+ // mensagem de erro
+ Const_Hist_MsgExceptPropr = 'Inform the property %s';
+
+ //Botoes do form
+ Const_Hist_BtnFiltro = '&Apply Filter';
+ Const_Hist_BtnExcluir = '&Erase History';
+ Const_Hist_BtnFechar = '&Close';
+
+
+implementation
+
+end.
+
diff --git a/official/2.20/Source/Languages/Portugues_Brasil/UCConsts.pas b/official/2.20/Source/Languages/Portugues_Brasil/UCConsts.pas
new file mode 100644
index 0000000..0232ab1
--- /dev/null
+++ b/official/2.20/Source/Languages/Portugues_Brasil/UCConsts.pas
@@ -0,0 +1,278 @@
+unit UCConsts;
+
+interface
+
+const
+ // new consts version 2 a 5 =========================================
+ // Form Select Controls (design-time)
+ 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';
+ //===================================================================
+
+ // group property Settins.AppMsgsForm
+ 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';
+
+
+ // group property Settins.AppMsgsRec
+ 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';
+
+ // group property Settins.AppMsgsSend
+ 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';
+
+
+ // Run errors
+ 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!';
+
+ // group property Settings.Mensagens
+ 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 segunç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 !!'; // Luiz Benevenuto 20/04/06
+
+ Const_Men_PasswordExpired = 'Atenção, sua senha expirou, favor troca-la'; { By vicente barros leonel }
+
+
+ //group property Settings.Login
+ 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'; //new
+ Const_Log_MsgMailSend = 'A senha foi enviada para o seu email.'; //new
+ Const_Log_LabelTentativa = 'Tentativa : ';
+ Const_Log_LabelTentativas = 'Máximo de Tentativas : ';
+
+ //group property Settings.Log //new
+ 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'; //added by fduenas
+ Const_LogC_Todos = 'Todos'; //BGM
+ Const_LogC_Low = 'Baixo'; //BGM
+ Const_LogC_Normal = 'Normal'; //BGM
+ Const_LogC_High = 'Alto'; //BGM
+ Const_LogC_Critic = 'Crítico'; //BGM
+ Const_LogC_ExcluirEfectuada = 'Exclusão de log´s do sistema : Usuário = "%s" | Data = %s a %s | Nível <= %s'; //added by fduenas
+
+
+ //group property Settings.CadastroUsuarios
+ 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'; //added by fduenas
+
+ //group property Settings.PerfilUsuarios
+ 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'; //added by fduenas
+
+ //group property Settings.IncAltUsuario
+ 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';
+
+ //group property Settings.IncAltPerfil
+ 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';
+
+ //group property Settings.Permissao
+ 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'; // by vicente barros leonel
+ Const_Perm_BtLibera = '&Liberar';
+ Const_Perm_BtBloqueia = '&Bloquear';
+ Const_Perm_BtGravar = '&Gravar';
+ Const_Perm_BtCancelar = '&Cancelar';
+
+ //group property Settings.TrocaSenha do begin
+ 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';
+
+ //group property Settings.Mensagens.ErroTrocaSenha
+ 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';
+
+ //group property Settings.DefineSenha
+ Const_DefPass_WindowCaption = 'Definir senha do usuário : "%s"';
+ Const_DefPass_LabelSenha = 'Senha :';
+
+ //Group das tabelas do UC
+ 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'; { By Vicente Barros Leonel }
+ Const_TableUser_FieldUserExpired = 'UCUserExpired'; { By Vicente Barros Leonel }
+ Const_TableUser_FieldUserDaysSun = 'UCUserDaysSun'; { By Vicente Barros Leonel }
+
+ 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';
+
+
+{ TUCHISTORICO }
+ //Eventos
+ Const_Evento_Insert = 'Inserido';
+ Const_Evento_Delete = 'Apagado';
+ Const_Evento_Edit = 'Editado';
+ Const_Evento_NewRecord = 'Novo registro';
+
+ //Gerais
+ 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';
+
+ //Campos da tabela
+ 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'; // nome do campo que grava a tabela nao confuda
+
+ // mensagem de erro
+ Const_Hist_MsgExceptPropr = 'Favor informar a propriedade %s';
+
+ //Botoes do form
+ Const_Hist_BtnFiltro = '&Aplicar Filtro';
+ Const_Hist_BtnExcluir = '&Excluir Histórico';
+ Const_Hist_BtnFechar = '&Fechar';
+
+implementation
+
+end.
+
diff --git a/official/2.20/Source/Languages/Spanish/UCConsts.pas b/official/2.20/Source/Languages/Spanish/UCConsts.pas
new file mode 100644
index 0000000..515f138
--- /dev/null
+++ b/official/2.20/Source/Languages/Spanish/UCConsts.pas
@@ -0,0 +1,283 @@
+{ Translated by Francisco Armando Dueñas Rodríguez - Cancún
+ ultima revisão - Vicente Barros Leonel - Brasil
+}
+unit UCConsts;
+
+interface
+
+Const
+
+ // new consts version 2 a 5 =========================================
+ // Form Select Controls (design-time)
+ 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'; //added by fduenas
+ Const_Contr_BtSelHint = 'Seleccionar'; //added by fduenas
+ Const_Contr_BtUnSelHint = 'Deseleccionar'; //added by fduenas
+ Const_Contr_BtUnSelAllHint = 'Deseleccionar Todo'; //added by fduenas
+
+ //===================================================================
+
+
+ // group property Settins.AppMsgsForm
+ Const_Msgs_BtNew = '&Nuevo Mensaje';
+ Const_Msgs_BtReplay = '&Responder';
+ Const_Msgs_BtForward = '&Reenviar';
+ Const_Msgs_BtDelete = '&Borrar';
+ Const_Msgs_BtClose = '&Cerrar'; //added by fduenas
+ 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'; //added by fduenas
+ Const_Msgs_NoMessagesSelected = '!Ningún mensaje seleccionado¡'; //added by fduenas
+ Const_Msgs_NoMessagesSelected_WindowCaption = 'Información'; //added by fduenas
+
+ // group property Settins.AppMsgsRec
+ 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';
+
+ // group property Settins.AppMsgsSend
+ 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'; //added by fduenas
+ Const_MsgSend_LabelMessageText = 'Texto del mensaje'; //added by fduenas
+
+ // Run errors
+ 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!';
+
+
+ // group property Settings.Mensagens
+ 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 !!'; // Luiz Benevenuto 20/04/06
+ Const_Men_PasswordExpired = 'Atenção, sua senha expirou, favor troca-la'; { By vicente barros leonel }
+
+ //group property Settings.Login
+ 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 : ';
+
+
+ //group property Settings.Log //new
+ 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'; //added by fduenas
+ Const_LogC_Todos = 'Todos'; //BGM
+ Const_LogC_Low = 'Bajo'; //BGM
+ Const_LogC_Normal = 'Normal'; //BGM
+ Const_LogC_High = 'Alto'; //BGM
+ Const_LogC_Critic = 'Crítico'; //BGM
+ Const_LogC_ExcluirEfectuada = 'Borrado de registros de bitácora realizado: '+
+ 'Usuario = "%s" | Fecha = %s a %s | Nivel <= %s'; //added by fduenas
+
+ //group property Settings.CadastroUsuarios
+ 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'; //added by fduenas
+
+ //group property Settings.PerfilUsuarios
+ 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'; //BGM
+ 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'; //added by fduenas
+
+ //group property Settings.IncAltUsuario
+ 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';
+
+
+ //group property Settings.IncAltPerfil
+ 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';
+
+ //group property Settings.Permissao
+ 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';
+
+ //group property Settings.TrocaSenha do begin
+ 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';
+
+ //group property Settings.Mensagens.ErroTrocaSenha
+ 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';
+
+ //group property Settings.DefineSenha
+ Const_DefPass_WindowCaption = 'Ingrese Contraseña de Usuario: "%s"';
+ Const_DefPass_LabelSenha = 'Contraseña: ';
+
+//Group das tabelas do UC
+ 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'; { By Vicente Barros Leonel }
+ Const_TableUser_FieldUserExpired = 'UCUserExpired'; { By Vicente Barros Leonel }
+ Const_TableUser_FieldUserDaysSun = 'UCUserDaysSun'; { By Vicente Barros Leonel }
+
+ 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';
+
+
+{ TUCHISTORICO }
+ //Eventos
+ Const_Evento_Insert = 'Inserido';
+ Const_Evento_Delete = 'Apagado';
+ Const_Evento_Edit = 'Editado';
+ Const_Evento_NewRecord = 'Novo registro';
+
+ //Gerais
+ 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';
+
+ //Campos da tabela
+ 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'; // nome do campo que grava a tabela não confuda com o nome da tabela fisicamente
+
+ // mensagem de erro
+ Const_Hist_MsgExceptPropr = 'Favor informar a propriedade %s';
+
+ //Botoes do form
+ Const_Hist_BtnFiltro = '&Aplicar Filtro';
+ Const_Hist_BtnExcluir = '&Borrar Histórico';
+ Const_Hist_BtnFechar = '&Cerrar';
+
+
+implementation
+
+end.
diff --git a/official/2.20/Source/LoginWindow_U.dfm b/official/2.20/Source/LoginWindow_U.dfm
new file mode 100644
index 0000000..41b0673
--- /dev/null
+++ b/official/2.20/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.20/Source/LoginWindow_U.pas b/official/2.20/Source/LoginWindow_U.pas
new file mode 100644
index 0000000..bfd5dcc
--- /dev/null
+++ b/official/2.20/Source/LoginWindow_U.pas
@@ -0,0 +1,139 @@
+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
+ btOK.Click;
+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.20/Source/MsgRecForm_U.dfm b/official/2.20/Source/MsgRecForm_U.dfm
new file mode 100644
index 0000000..ae8dacf
--- /dev/null
+++ b/official/2.20/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.20/Source/MsgRecForm_U.pas b/official/2.20/Source/MsgRecForm_U.pas
new file mode 100644
index 0000000..a180469
--- /dev/null
+++ b/official/2.20/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.20/Source/MsgsForm_U.dfm b/official/2.20/Source/MsgsForm_U.dfm
new file mode 100644
index 0000000..905767a
--- /dev/null
+++ b/official/2.20/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.20/Source/MsgsForm_U.pas b/official/2.20/Source/MsgsForm_U.pas
new file mode 100644
index 0000000..6913efe
--- /dev/null
+++ b/official/2.20/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.20/Source/SenhaForm_U.dfm b/official/2.20/Source/SenhaForm_U.dfm
new file mode 100644
index 0000000..3ad53eb
--- /dev/null
+++ b/official/2.20/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.20/Source/SenhaForm_U.pas b/official/2.20/Source/SenhaForm_U.pas
new file mode 100644
index 0000000..ee9be2c
--- /dev/null
+++ b/official/2.20/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.20/Source/TrocaSenha_U.dfm b/official/2.20/Source/TrocaSenha_U.dfm
new file mode 100644
index 0000000..5bdaf68
--- /dev/null
+++ b/official/2.20/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.20/Source/TrocaSenha_U.pas b/official/2.20/Source/TrocaSenha_U.pas
new file mode 100644
index 0000000..a034907
--- /dev/null
+++ b/official/2.20/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.20/Source/UCAbout.dfm b/official/2.20/Source/UCAbout.dfm
new file mode 100644
index 0000000..5cccd28
--- /dev/null
+++ b/official/2.20/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.20/Source/UCAbout.pas b/official/2.20/Source/UCAbout.pas
new file mode 100644
index 0000000..5c99bb4
--- /dev/null
+++ b/official/2.20/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.20/Source/UCAboutXpStyle_U.dfm b/official/2.20/Source/UCAboutXpStyle_U.dfm
new file mode 100644
index 0000000..966218a
--- /dev/null
+++ b/official/2.20/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.20/Source/UCAboutXpStyle_U.pas b/official/2.20/Source/UCAboutXpStyle_U.pas
new file mode 100644
index 0000000..5cba471
--- /dev/null
+++ b/official/2.20/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.20/Source/UCBase.pas b/official/2.20/Source/UCBase.pas
new file mode 100644
index 0000000..0fbb85c
--- /dev/null
+++ b/official/2.20/Source/UCBase.pas
@@ -0,0 +1,4910 @@
+{
+-----------------------------------------------------------------------------
+ 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
+ ExtActns,
+ Variants,
+ Windows,
+ {.$IFDEF UCACTMANAGER}
+ ActnMan,
+ ActnMenus,
+ {.$ENDIF}
+ ActnList,
+ Classes,
+ Controls,
+ DB,
+ Forms,
+ Graphics,
+ md5,
+ Menus,
+ SysUtils,
+ StdCtrls,
+ UCDataConnector,
+ UCDataInfo,
+ {.$IFDEF Indy}
+ UCMail,
+ {.$ENDIF}
+ UCMessages,
+ UCSettings,
+ UcConsts_Language;
+
+const
+ llBaixo = 0;
+ llNormal = 1;
+ llMedio = 2;
+ llCritico = 3;
+
+// Version
+const
+ UCVersion = '2.20 Final';
+
+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;
+ published
+ { TODO 1 -oLuiz -cUpgrade : Terminar a implementação dos DataSets para os Perfis de Usuario Loggado }
+ property PerfilUsuario: TDataSet read FPerfilUsuario write FPerfilUsuario;
+ property PerfilGrupo: TDataSet read FPerfilGrupo write FPerfilGrupo;
+ end;
+
+ TUCUser = class(TPersistent) // armazenar menuitem ou action responsavel pelo cadastro 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;
+ 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 Active: Boolean read FAtive write FAtive default True;
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ end;
+
+ TUCUserHistory = class(TPersistent) // armazenar menuitem ou action responsavel pelo historico
+ private
+ FAtive: Boolean;
+ 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 Active: Boolean read FAtive write FAtive default True;
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ 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;
+ FMenuItem: TMenuItem;
+ FAction: TAction;
+ procedure SetMenuItem(const Value: TMenuItem);
+ procedure SetAction(const Value: TAction);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Action: TAction read FAction write SetAction;
+ property Active: Boolean read FActive write FActive default True;
+ property TableLog: String read FTableLog write FTableLog;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ 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;
+ {.$IFDEF Indy}
+ FMailUserControl: TMailUserControl;
+ {.$ENDIF}
+ 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;
+ fTableHistory: TUCTableHistorico;
+ fUsersHistory: TUCUserHistory;
+ fLanguage: TUCLanguage;
+ procedure SetExtraRights(Value: TUCExtraRights);
+ procedure SetWindow;
+ procedure SetWindowProfile;
+ {.$IFDEF Indy}
+ procedure SetMailUserControl(const Value: TMailUserControl);
+ {.$ENDIF}
+ procedure ActionCadUser(Sender: TObject);
+ procedure ActionTrocaSenha(Sender: TObject);
+ procedure ActionUserProfile(Sender: TObject);
+ procedure ActionUserHistory(Sender: TObject);
+ procedure ActionUsersLogged(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);
+ protected
+ FRetry: Integer;
+ // Formulários
+ FFormCadastroUsuarios: TCustomForm;
+ FFormPerfilUsuarios: TCustomForm;
+ FFormTrocarSenha: TCustomForm;
+ FFormLogin: TCustomForm;
+ FFormLogControl: TCustomForm;
+ FFormUsersLogged: TCustomForm;
+ FrmHistorico: TCustomForm;
+ // -----
+
+ procedure Loaded; override;
+ procedure ActionBtPermissDefault;
+ procedure ActionBtPermissProfileDefault;
+
+ // Criar Formulários
+ procedure CriaFormCadastroUsuarios; dynamic;
+ procedure CriaFormPerfilUsuarios; dynamic;
+ procedure CriaFormTrocarSenha; dynamic;
+ procedure CriaFormUsersLogged; dynamic;
+ // -----
+
+ procedure ActionLog(Sender: TObject); dynamic;
+ procedure ActionLogoff(Sender: TObject); dynamic;
+ procedure ActionBtnPermissao(Sender: TObject); dynamic;
+ procedure ActionBtnPermissaoProfile(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 ActionEsqueceuSenha(Sender: TObject);
+ 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;
+ public
+ procedure Logoff;
+ procedure Execute;
+ procedure StartLogin;
+ procedure ShowUserManager;
+ procedure ShowProfileManager;
+ procedure ShowLogManager;
+ procedure ShowChangePassword;
+ procedure ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile,UserExpired,UserDaysSun: 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): 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 UsersHistory: TUCUserHistory read fUsersHistory write fUsersHistory; //by vicente barros leonel
+ property LogControl: TUCLogControl read FLogControl write FLogControl;
+
+ 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;
+ {.$IFDEF Indy}
+ property MailUserControl: TMailUserControl read FMailUserControl write SetMailUserControl;
+ {.$ENDIF}
+
+ // Tabelas
+ property TableUsers: TUCTableUsers read FTableUsers write FTableUsers;
+ property TableRights: TUCTableRights read FTableRights write FTableRights;
+ property TableUsersLogged: TUCTableUsersLogged read FTableUsersLogged write FTableUsersLogged;
+ property TableHistory : TUCTableHistorico read fTableHistory write fTableHistory;
+
+ 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;
+ FAction: TAction;
+ FMenuItem: TMenuItem;
+ FAtive: Boolean;
+ procedure SetAction(const Value: TAction);
+ procedure SetMenuItem(const Value: TMenuItem);
+ procedure AddCurrentUser;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ procedure DelCurrentUser;
+ procedure CriaTableUserLogado;
+ published
+ property Active: Boolean read FAtive write FAtive default True;
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ 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;
+
+ TUCHistorico = class(TComponent) // Componente TUCHISTORICO
+ private
+ fUserControl: TUserControl;
+ fDataSet: TDataSet;
+ fOnNewRecord ,
+ fOnBeforeDelete ,
+ fOnBeforeEdit ,
+ fOnAfterPost : TDataSetNotifyEvent;
+ fOptions: TUCHistOptions;
+ procedure SetDataSet(const Value: TDataSet);
+ procedure SetUserControl(const Value: TUserControl);
+ { 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 UserControl : TUserControl read fUserControl write SetUserControl;
+ Property DataSet : TDataSet Read fDataSet Write SetDataSet;
+ Property Options : TUCHistOptions read fOptions write fOptions;
+ 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
+ CadPerfil_U,
+ CadUser_U,
+ DBGrids,
+ Dialogs,
+ LoginWindow_U,
+ MsgRecForm_U,
+ MsgsForm_U,
+ TrocaSenha_U,
+// UCConsts,
+ UserPermis_U,
+ UsersLogged_U,
+ ViewLog_U,
+ UCHist_Form;
+
+
+{$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);
+ fUsersHistory := TUCUserHistory.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);
+ fTableHistory := TUCTableHistorico.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 }
+ 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;
+
+
+ With fTableHistory do
+ Begin
+ if Length(Trim(TableName)) = 0 then
+ TableName := RetornaLingua( fLanguage,'Const_Hist_TableName');
+
+ if Length(Trim(FieldApplicationID)) = 0 then
+ FieldApplicationID := RetornaLingua( fLanguage,'Const_Hist_FieldApplicationID');
+
+ if Length(trim(FieldUserID)) = 0 then
+ FieldUserID := RetornaLingua( fLanguage,'Const_Hist_FieldUserID');
+
+ If Length(Trim(FieldEventDate)) = 0 then
+ FieldEventDate := RetornaLingua( fLanguage,'Const_Hist_FieldEventDate');
+
+ If Length(trim(FieldEventTime)) = 0 then
+ FieldEventTime := RetornaLingua( fLanguage,'Const_Hist_FieldEventTime');
+
+ If Length(trim(FieldForm)) = 0 then
+ FieldForm := RetornaLingua( fLanguage,'Const_Hist_FieldForm');
+
+ If Length(trim(FieldCaptionForm)) = 0 then
+ FieldCaptionForm := RetornaLingua( fLanguage,'Const_Hist_FieldCaptionForm');
+
+ If Length(trim(FieldEvent)) = 0 then
+ FieldEvent := RetornaLingua( fLanguage,'Const_Hist_FieldEvent');
+
+ If Length(trim(FieldObs)) = 0 then
+ FieldObs := RetornaLingua( fLanguage,'Const_Hist_FieldObs');
+
+ If Length(trim(FieldTableName)) = 0 then
+ FieldTableName := RetornaLingua( fLanguage,'Const_Hist_FieldTableName'); // nome do campo que grava a tabela nao confuda
+ 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
+ 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 UserProfile.Active then
+ begin
+ if Assigned(UserProfile.MenuItem) and (not Assigned(UserProfile.MenuItem.OnClick)) then
+ UserProfile.MenuItem.OnClick := ActionUserProfile;
+
+ if Assigned(UserProfile.Action) and (not Assigned(UserProfile.Action.OnExecute)) then
+ UserProfile.Action.OnExecute := ActionUserProfile;
+
+ If ( ( Not Assigned(UserProfile.Action) ) and ( not Assigned( UserProfile.MenuItem) ) ) then
+ raise Exception.Create(Format(RetornaLingua( fLanguage,'MsgExceptPropriedade'),['UserProfile']));
+ end;
+
+ if UsersLogged.Active then
+ begin
+ if Assigned(UsersLogged.MenuItem) and (not Assigned(UsersLogged.MenuItem.OnClick)) then
+ UsersLogged.MenuItem.OnClick := ActionUsersLogged;
+
+ if Assigned(UsersLogged.Action) and (not Assigned(UsersLogged.Action.OnExecute)) then
+ UsersLogged.Action.OnExecute := ActionUsersLogged;
+
+ If ( ( Not Assigned(UsersLogged.Action) ) and ( not Assigned( UsersLogged.MenuItem) ) ) then
+ raise Exception.Create(Format(RetornaLingua( fLanguage,'MsgExceptPropriedade'),['UsersLogged']));
+
+ end;
+
+ 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']));
+
+
+ if (LogControl.Active) then
+ begin
+ if Assigned(LogControl.MenuItem) and (not Assigned(LogControl.MenuItem.OnClick)) then
+ LogControl.MenuItem.OnClick := ActionLog;
+
+ if Assigned(LogControl.Action) and (not Assigned(LogControl.Action.OnExecute)) then
+ LogControl.Action.OnExecute := ActionLog;
+
+ If ( ( Not Assigned(LogControl.Action) ) and ( not Assigned( LogControl.MenuItem) ) ) then
+ raise Exception.Create(Format(RetornaLingua( fLanguage,'MsgExceptPropriedade'),['LogControl']));
+ end;
+
+ If ( UsersHistory.Active ) then
+ begin
+ With fTableHistory do
+ Begin
+ if Length(trim(TableName)) = 0 then
+ Raise Exception.Create( Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['TableName']));
+
+ if Length(trim(FieldApplicationID)) = 0 then
+ Raise Exception.Create( Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldApplicationID']));
+
+ if Length(trim(FieldUserID)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldUserID']));
+
+ if Length(trim(FieldEventDate)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldEventDate']));
+
+ if Length(trim(FieldEventTime)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldEventTime']));
+
+ if Length(trim(FieldForm)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldForm']));
+
+ if Length(trim(FieldEvent)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldEvent']));
+
+ if Length(trim(FieldObs)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldObs']));
+
+ if Length(trim(FieldCaptionForm)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldCaptionForm']));
+
+ if Length(trim(FieldTableName)) = 0 then
+ Raise Exception.Create(Format( RetornaLingua( fLanguage,'Const_Hist_MsgExceptPropr'),['FieldTableName']));
+ end;
+
+ if Assigned(UsersHistory.MenuItem) and (not Assigned(UsersHistory.MenuItem.OnClick)) then
+ UsersHistory.MenuItem.OnClick := ActionUserHistory;
+
+ if Assigned(UsersHistory.Action) and (not Assigned(UsersHistory.Action.OnExecute)) then
+ UsersHistory.Action.OnExecute := ActionUserHistory;
+
+ If ( ( Not Assigned(UsersHistory.Action) ) and ( not Assigned( UsersHistory.MenuItem) ) ) then
+ raise Exception.Create(Format(RetornaLingua( fLanguage,'MsgExceptPropriedade'),['UsersHistory']));
+
+ End;
+
+ 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***');
+ 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.ActionUserProfile(Sender: TObject);
+begin
+ if Assigned(OnCustomUsersProfileForm) then
+ OnCustomUsersProfileForm(Self, FFormPerfilUsuarios);
+
+ if FFormPerfilUsuarios = nil then
+ CriaFormPerfilUsuarios;
+
+ FFormPerfilUsuarios.ShowModal;
+ FreeAndNil(FFormPerfilUsuarios);
+end;
+
+procedure TUserControl.ActionUsersLogged(Sender: TObject);
+begin
+ if Assigned(OnCustomUserLoggedForm) then
+ OnCustomUserLoggedForm(Self, FFormUsersLogged);
+
+ if FFormUsersLogged = nil then
+ CriaFormUsersLogged;
+
+ FFormUsersLogged.ShowModal;
+ FreeAndNil(FFormUsersLogged);
+end;
+
+
+procedure TUserControl.ActionUserHistory(Sender:TObject);
+Begin
+ FrmHistorico := TFrmHistorico.Create(Self);
+ TFrmHistorico(FrmHistorico).fUserControl := Self;
+ TFrmHistorico(FrmHistorico).Position := Self.UserSettings.WindowsPosition;
+ FrmHistorico.ShowModal;
+ FreeAndNil(FrmHistorico);
+End;
+
+procedure TUserControl.ActionCadUser(Sender: TObject);
+begin
+ if Assigned(OnCustomUsersForm) then
+ OnCustomUsersForm(Self, FFormCadastroUsuarios);
+
+ if FFormCadastroUsuarios = nil then
+ CriaFormCadastroUsuarios;
+
+ FFormCadastroUsuarios.ShowModal;
+ FreeAndNil(FFormCadastroUsuarios);
+end;
+
+procedure TUserControl.ActionTrocaSenha(Sender: TObject);
+begin
+ if Assigned(OnCustomChangePasswordForm) then
+ OnCustomChangePasswordForm(Self, FFormTrocarSenha);
+
+ if FFormTrocarSenha = nil then
+ CriaFormTrocarSenha;
+
+ FFormTrocarSenha.ShowModal;
+ FreeAndNil(FFormTrocarSenha);
+end;
+
+procedure TUserControl.CriaFormPerfilUsuarios;
+begin
+ FFormPerfilUsuarios := TfrmCadastrarPerfil.Create(self);
+ with Self.UserSettings.UsersProfile, TfrmCadastrarPerfil(FFormPerfilUsuarios) do
+ begin
+ Caption := WindowCaption;
+ lbDescricao.Caption := LabelDescription;
+ btAdic.Caption := BtAdd;
+ BtAlt.Caption := BtChange;
+ BtExclui.Caption := BtDelete;
+ BtAcess.Caption := BtRights;
+ BtExit.Caption := BtClose;
+ BtAcess.OnClick := ActionBtnPermissaoProfile;
+ FUserControl := Self;
+ Position := Self.UserSettings.WindowsPosition;
+ end;
+end;
+
+procedure TUserControl.ActionBtnPermissaoProfile(Sender: TObject);
+begin
+ if TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.IsEmpty then
+ Exit;
+ UserPermis := TUserPermis.Create(self);
+ UserPermis.FUserControl := Self;
+ SetWindowProfile;
+ UserPermis.lbUser.Caption := TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.FieldByName('Nome').AsString;
+ ActionBtPermissProfileDefault;
+end;
+
+procedure TUserControl.SetWindowProfile;
+begin
+ with Self.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 := Self.UserSettings.WindowsPosition;
+ end;
+end;
+
+procedure TUserControl.CriaFormCadastroUsuarios;
+begin
+ FFormCadastroUsuarios := TfrmCadastrarUsuario.Create(self);
+ with Self.UserSettings.UsersForm, TfrmCadastrarUsuario(FFormCadastroUsuarios) do
+ begin
+ Caption := WindowCaption;
+ lbDescricao.Caption := LabelDescription;
+ btAdic.Caption := BtAdd;
+ BtAlt.Caption := BtChange;
+ BtExclui.Caption := BtDelete;
+ BtAcess.Caption := BtRights;
+ BtPass.Caption := BtPassword;
+ BtExit.Caption := BtClose;
+ BtAcess.OnClick := Self.ActionBtnPermissao;
+ FUserControl := Self;
+ Position := Self.UserSettings.WindowsPosition;
+ end;
+end;
+
+procedure TUserControl.ActionBtnPermissao(Sender: TObject);
+begin
+ if TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+ UserPermis := TUserPermis.Create(self);
+ UserPermis.FUserControl := Self;
+ SetWindow;
+ UserPermis.lbUser.Caption := TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.FieldByName('Login').AsString;
+ ActionBtPermissDefault;
+end;
+
+procedure TUserControl.SetWindow;
+begin
+ with Self.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 := Self.UserSettings.WindowsPosition;
+ end;
+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)]);
+
+ try
+ DataSet := Self.DataConnector.UCGetSQLDataset(SQLstmt);
+ 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.CriaFormUsersLogged;
+begin
+ FFormUsersLogged := TfrmUsersLogged.Create(Self);
+ TfrmUsersLogged(FFormUsersLogged).Position := Self.UserSettings.WindowsPosition;
+ TfrmUsersLogged(FFormUsersLogged).FUserControl := Self;
+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);
+
+ {.$IFDEF Indy}
+ if (Assigned(MailUserControl)) and (MailUserControl.SenhaTrocada.Ativo) then
+ with CurrentUser do
+ try
+ MailUserControl.EnviaEmailSenhaTrocada(UserName, UserLogin, TTrocaSenha(FFormTrocarSenha).EditNova.Text, Email, '', EncryptKey);
+ except
+ on e: Exception do
+ Log(e.Message, 2);
+ end;
+ {.$ENDIF}
+ If TTrocaSenha(FFormTrocarSenha).ForcarTroca = True then
+ TTrocaSenha(FFormTrocarSenha).ForcarTroca := False; // Vicente Barros Leonel
+ 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);
+
+ 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
+
+ {.$IFDEF Indy}
+ if Assigned(MailUserControl) then
+ begin
+ lbEsqueci.Visible := MailUserControl.EsqueceuSenha.Ativo;
+ lbEsqueci.Caption := MailUserControl.EsqueceuSenha.LabelLoginForm;
+ end;
+ {.$ENDIF}
+ Position := Self.UserSettings.WindowsPosition;
+ 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 = UserProfile.MenuItem then
+ UserProfile.MenuItem := nil;
+ if AComponent = UserProfile.Action then
+ UserProfile.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 = LogControl.MenuItem then
+ LogControl.MenuItem := nil;
+ if AComponent = LogControl.Action then
+ LogControl.Action := nil;
+ if AComponent = FDataConnector then
+ FDataConnector := nil;
+
+ {.$IFDEF Indy}
+ if AComponent = FMailUserControl then
+ FMailUserControl := nil;
+ {.$ENDIF}
+ end;
+ inherited Notification(AComponent, AOperation);
+end;
+
+procedure TUserControl.ActionLog(Sender: TObject);
+begin
+ FFormLogControl := TViewLog.Create(self);
+ TViewLog(FFormLogControl).UCComponent := Self;
+ with TViewLog(FFormLogControl), UserSettings.Log do
+ begin
+ Caption := WindowCaption;
+ lbDescricao.Caption := LabelDescription;
+ lbUsuario.Caption := LabelUser;
+ lbData.Caption := LabelDate;
+ lbNivel.Caption := LabelLevel;
+ BtFiltro.Caption := BtFilter;
+ BtExclui.Caption := BtDelete;
+ BtFecha.Caption := BtClose;
+ with DBGrid1 do
+ begin
+ 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;
+ Position := Self.UserSettings.WindowsPosition;
+ end;
+ TViewLog(FFormLogControl).ShowModal;
+ FreeAndNil(FFormLogControl);
+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;
+ 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;
+
+{.$IFDEF Indy}
+procedure TUserControl.SetMailUserControl(const Value: TMailUserControl);
+begin
+ FMailUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self);
+end;
+
+{.$ENDIF}
+
+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;
+
+{.$IFDEF Indy}
+procedure TUserControl.ActionEsqueceuSenha(Sender: TObject);
+var
+ FDataset: TDataset;
+begin
+ FDataset := DataConnector.UCGetSQLDataset('Select * from ' + TableUsers.TableName + ' Where ' +
+ TableUsers.FieldLogin + ' = ' + QuotedStr(TfrmLoginWindow(FFormLogin).EditUsuario.Text));
+ with FDataset do
+ try
+ if not IsEmpty then
+ { TODO -oLuiz -cUpgrade : Consertar o método EnviarEsquceuSenha para usar a criptografia md5 }
+ MailUserControl.EnviaEsqueceuSenha(FieldByName(TableUsers.FieldUserName).AsString,
+ FieldByName(TableUsers.FieldLogin).AsString,
+ FieldByName(TableUsers.FieldPassword).AsString,
+ FieldByName(TableUsers.FieldEmail).AsString, '', EncryptKey)
+ else
+ MessageDlg(UserSettings.CommonMessages.InvalidLogin, mtWarning, [mbOK], 0);
+ finally
+ Close;
+ Free;
+ end;
+end;
+
+{.$ENDIF}
+
+procedure TUserControl.TryAutoLogon;
+begin
+ if not VerificaLogin(Login.AutoLogin.User, Login.AutoLogin.Password) then
+ begin
+ if Login.AutoLogin.MessageOnError then
+ MessageDlg(UserSettings.CommonMessages.AutoLogonError, mtWarning, [mbOK], 0);
+ ShowLogin;
+ end;
+end;
+
+function TUserControl.VerificaLogin(User, Password: String): 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 := False;
+ if Assigned(OnLoginError) then
+ OnLoginError(Self, User, Password);
+ end
+ else
+ begin
+ Result := True;
+ RegistraCurrentuser(Dataset);
+ end;
+ end
+ else
+ begin
+ Result := False;
+ 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
+ with DataConnector.UCGetSQLDataset('Select Max(' + TableUsers.FieldUserID + ') as IdUser from ' + TableUsers.TableName) do
+ begin
+ Result := FieldByName('idUser').AsInteger + 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 ) VALUES(%d, %s, %s, %s, %s, %s, %d, %s, %s , %s , %d , %d )',
+ [TableName,
+ FieldUserID,
+ FieldUserName,
+ FieldLogin,
+ FieldPassword,
+ FieldEmail,
+ FieldPrivileged,
+ FieldProfile,
+ FieldTypeRec,
+ FieldKey,
+ FieldDateExpired, { By Vicente Barros Leonel }
+ FieldUserExpired,
+ FieldUserDaysSun,
+ 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 ]); {By vicente Barros Leonel }
+ 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
+ cSql ,
+ Login,
+ Senha,
+ Key : String;
+begin
+ inherited;
+ with DataConnector.UCGetSQLDataset('Select ' + TableUsers.FieldLogin + ' as login, ' + TableUsers.FieldPassword + ' as senha from ' + TableUsers.TableName + ' where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser)) 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: cSql := '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: cSql := '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;
+
+ DataConnector.UCExecSQL( cSql );
+
+ if Assigned(onChangePassword) then
+ OnChangePassword(Self, IdUser, Login, Senha, NewPassword);
+end;
+
+procedure TUserControl.ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile , UserExpired , UserDaysSun : Integer; PrivUser: Boolean);
+var
+ Key, Password: String;
+begin
+ with DataConnector.UCGetSQLDataset('SELECT ' + TableUsers.FieldPassword +
+ ' AS SENHA FROM ' + TableUsers.TableName + ' WHERE ' +
+ TableUsers.FieldUserID + ' = ' + IntToStr(IdUser)) 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
+ 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 ) +
+ ' where ' + FieldUserID + ' = ' + IntToStr(IdUser));
+ if Assigned(OnChangeUser) then
+ OnChangeUser(Self, IdUser, Login, Name, Mail, Profile, PrivUser);
+end;
+
+procedure TUserControl.CriaTabelaMsgs(const TableName: String);
+begin
+ DataConnector.UCExecSQL('CREATE TABLE ' + TableName + ' ( ' +
+ 'IdMsg ' + UserSettings.TypeFieldsDB.Type_Int + ' , ' +
+ 'UsrFrom ' + UserSettings.TypeFieldsDB.Type_Int + ' , ' +
+ 'UsrTo ' + UserSettings.TypeFieldsDB.Type_Int + ' , ' +
+ 'Subject ' + UserSettings.TypeFieldsDB.Type_VarChar + '(50),' +
+ 'Msg ' + UserSettings.TypeFieldsDB.Type_Varchar + '(255),' +
+ 'DtSend ' + UserSettings.TypeFieldsDB.Type_Varchar + '(12),' +
+ 'DtReceive ' + UserSettings.TypeFieldsDB.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;
+ fTableHistory.Free;
+ fUsersHistory.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) ) ;
+
+ If UsersHistory.Active then
+ If not DataConnector.UCFindTable( TableHistory.TableName ) then
+ 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(20) ) ',
+ [ TableHistory.TableName,
+ TableHistory.FieldApplicationID,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+
+ TableHistory.FieldUserID,
+ UserSettings.TypeFieldsDB.Type_Int,
+
+ TableHistory.FieldEventDate,
+ UserSettings.TypeFieldsDB.Type_Char,
+
+ TableHistory.FieldEventTime,
+ UserSettings.TypeFieldsDB.Type_Char,
+
+ TableHistory.FieldForm,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+
+ TableHistory.FieldCaptionForm,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+
+ TableHistory.FieldEvent,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+
+ TableHistory.FieldObs,
+ UserSettings.TypeFieldsDB.Type_MemoField,
+
+ TableHistory.FieldTableName,
+ UserSettings.TypeFieldsDB.Type_VarChar]));
+
+ //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.TypeFieldsDB.Type_Char ] );
+
+ 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 ] );
+ 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.TypeFieldsDB.Type_Int] );
+ DataConnector.UCExecSQL( Sql );
+ Sql := Format('update %s set %s = 1 where %s = ''U''',
+ [ FTableUsers.TableName,
+ FTableUsers.FieldUserExpired,
+ FTableUsers.FieldTypeRec ] );
+ 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.TypeFieldsDB.Type_Int] );
+ DataConnector.UCExecSQL( Sql );
+ Sql := Format('update %s set %s = 30 where %s = ''U''',
+ [ FTableUsers.TableName,
+ FTableUsers.FieldUserDaysSun,
+ FTableUsers.FieldTypeRec ] );
+ 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
+ DataConnector.UCExecSQL('ALTER TABLE ' + TableUsers.TableName + ' ADD ' + TableUsers.FieldKey + ' 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;
+ 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
+ DataConnector.UCExecSQL('ALTER TABLE ' + TableRights.TableName + ' ADD ' + TableUsers.FieldKey + ' 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;
+ 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
+ DataConnector.UCExecSQL('ALTER TABLE ' + TableRights.TableName + 'EX ADD ' +
+ TableUsers.FieldKey + ' 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;
+ 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.ActionBtPermissDefault;
+var
+ TempCampos, TempCamposEX: String;
+begin
+ UserPermis.FTempIdUser := TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger;
+
+ 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,
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).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,
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).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,
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).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,
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.FieldByName('Perfil').AsString,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]));
+
+ UserPermis.DSPerfilEX.Open;
+
+ UserPermis.ShowModal;
+
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.Close;
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.Open;
+
+ TfrmCadastrarUsuario(FFormCadastroUsuarios).FDataSetCadastroUsuario.Locate('idUser', UserPermis.FTempIdUser, []);
+
+ FreeAndNil(UserPermis);
+end;
+
+procedure TUserControl.ActionBtPermissProfileDefault;
+var
+ TempCampos, TempCamposEX: String;
+begin
+ UserPermis.FTempIdUser := TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger;
+
+ 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,
+ TfrmCadastrarPerfil(FFormPerfilUsuarios).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,
+ TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.FieldByName('IdUser').AsString,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]));
+
+ UserPermis.DSPermissEX.Open;
+
+ UserPermis.DSPerfil := TDataset.Create(UserPermis);
+
+ UserPermis.ShowModal;
+
+ TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.Close;
+ TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.Open;
+ TfrmCadastrarPerfil(FFormPerfilUsuarios).FDataSetPerfilUsuario.Locate('idUser', UserPermis.FTempIdUser, []);
+
+ FreeAndNil(UserPermis);
+end;
+
+procedure TUserControl.ShowChangePassword;
+begin
+ ActionTrocaSenha(self);
+end;
+
+procedure TUserControl.ShowLogManager;
+begin
+ ActionLog(Self);
+end;
+
+procedure TUserControl.ShowProfileManager;
+begin
+ ActionUserProfile(self);
+end;
+
+procedure TUserControl.ShowUserManager;
+begin
+ ActionCadUser(Self);
+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;
+ {.$IFDEF Indy}
+ lbEsqueci.OnClick := ActionEsqueceuSenha;
+ {.$ENDIF}
+ end;
+ end;
+ FFormLogin.ShowModal;
+ FreeAndNil(FFormLogin);
+end;
+
+procedure TUserControl.ActionOKLogin(Sender: TObject);
+var
+ TempUser: String;
+ TempPassword: String;
+begin
+ TempUser := TfrmLoginWindow(FFormLogin).EditUsuario.Text;
+ TempPassword := TfrmLoginWindow(FFormLogin).EditSenha.Text;
+
+ if Assigned(OnLogin) then
+ Onlogin(Self, TempUser, TempPassword);
+ if VerificaLogin(TempUser, TempPassword) then
+ TfrmLoginWindow(FFormLogin).Close
+ else
+ begin
+ MessageDlg(UserSettings.CommonMessages.InvalidLogin, 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);
+ Halt;
+ end;
+ end;
+end;
+
+procedure TUserControl.TestaFecha(Sender: TObject; var CanClose: Boolean);
+begin
+ CanClose := (CurrentUser.UserID > 0);
+end;
+
+procedure TUserControl.ApplyRights;
+var
+ DataSet: TDataset;
+ SQLStmt: String;
+begin
+ try
+ // Aplica Permissoes do Usuario logado
+ 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.UserID),
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]);
+
+ DataSet := DataConnector.UCGetSQLDataset(SQLStmt);
+ ApplyRightsObj(DataSet);
+ DataSet.Close;
+
+ // 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)]);
+
+ DataSet := DataConnector.UCGetSQLDataset(SQLStmt);
+ ApplyRightsObj(DataSet, True);
+ DataSet.Close;
+ end;
+ finally
+ FreeAndNil(DataSet);
+ end;
+
+ if Assigned(FAfterLogin) then
+ FAfterLogin(Self);
+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 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;
+ if Encontrado then
+ begin
+ TMenuItem(OwnerMenu.Components[Contador]).Enabled := True;
+ TMenuItem(OwnerMenu.Components[Contador]).Visible := True;
+ end; //verifica key
+ 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;
+ if Encontrado then
+ begin
+ TAction(TActionList(ObjetoAction).Actions[contador]).Enabled := True;
+ TAction(TActionList(ObjetoAction).Actions[contador]).Visible := True;
+ end; //verifica key
+ 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.TypeFieldsDB.Type_Varchar + '(250)';
+ cMD5: TipoCampo := UserSettings.TypeFieldsDB.Type_Varchar + '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.TypeFieldsDB.Type_Int,
+ FieldModule,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+ FieldComponentName,
+ UserSettings.TypeFieldsDB.Type_Varchar,
+ FieldKey,
+ TipoCampo]);
+ 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.TypeFieldsDB.Type_Int,
+ FieldModule,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+ FieldComponentName,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+ FieldFormName,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+ FieldKey,
+ TipoCampo]);
+ 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)]);
+
+ 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)]);
+
+ 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
+ DataConnector.UCExecSQL(
+ Format('CREATE TABLE %S (APPLICATIONID %s(250), IDUSER %s , MSG %s(250), DATA %s(14), NIVEL %s)',
+ [
+ LogControl.TableLog,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+ UserSettings.TypeFieldsDB.Type_Int,
+ UserSettings.TypeFieldsDB.Type_Varchar,
+ UserSettings.TypeFieldsDB.Type_Varchar,
+ UserSettings.TypeFieldsDB.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;
+begin
+ case Self.Criptografia of
+ cPadrao: TipoCampo := UserSettings.TypeFieldsDB.Type_VarChar + '(250)';
+ cMD5 : TipoCampo := UserSettings.TypeFieldsDB.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
+ ')',
+ [TableName,
+ FieldUserID,
+ UserSettings.TypeFieldsDB.Type_Int,
+
+ FieldUserName,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+
+ FieldLogin,
+ UserSettings.TypeFieldsDB.Type_VarChar,
+
+ FieldPassword,
+ TipoCampo,
+
+ FieldDateExpired,
+ UserSettings.TypeFieldsDB.Type_Char,
+
+ FieldUserExpired,
+ UserSettings.TypeFieldsDB.Type_Int,
+
+ FieldUserDaysSun,
+ UserSettings.TypeFieldsDB.Type_Int,
+
+ FieldEmail,
+ UserSettings.TypeFieldsDB.Type_Varchar,
+
+ FieldPrivileged,
+ UserSettings.TypeFieldsDB.Type_Int,
+
+ FieldTypeRec,
+ UserSettings.TypeFieldsDB.Type_Char,
+
+ FieldProfile,
+ UserSettings.TypeFieldsDB.Type_Int,
+
+ FieldKey,
+ TipoCampo]);
+
+ DataConnector.UCExecSQL(SQLstmt);
+ end;
+
+ SQLStmt := 'SELECT ' + TableUsers.FieldUserID + ' as idUser ' +
+ 'FROM ' + TableUsers.TableName + ' ' +
+ 'WHERE ' + TableUsers.FieldLogin + ' = ' + QuotedStr(Login.InitialLogin.User);
+
+ DataSetUsuario := DataConnector.UCGetSQLDataset(SQLstmt);
+
+ // Inserir login inicial
+ if DataSetUsuario.IsEmpty then
+ IDUsuario := AddUser(Login.InitialLogin.User,
+ Login.InitialLogin.Password,
+ Login.InitialLogin.User,
+ Login.InitialLogin.Email,
+ 0, 0 , Login.DaysOfSunExpired,
+ True)
+ else
+ IDUsuario := DataSetUsuario.FieldByName('idUser').AsInteger;
+
+ DataSetUsuario.Close;
+ FreeAndNil(DataSetUsuario);
+
+ SQLStmt := 'SELECT ' + TableRights.FieldUserID + ' AS IDUSER ' +
+ 'FROM ' + TableRights.TableName + ' ' +
+ 'WHERE ' + TableRights.FieldUserID + ' = ' + IntToStr(IDUsuario) + ' ' +
+ 'AND ' + TableRights.FieldModule + ' = ' + QuotedStr(ApplicationID);
+
+ DataSetPermissao := DataConnector.UCGetSQLDataset(SQLStmt);
+
+ if not DataSetPermissao.IsEmpty then
+ begin
+ DataSetPermissao.Close;
+ FreeAndNil(DataSetPermissao);
+ Exit; //login!
+ end;
+
+ DataSetPermissao.Close;
+ FreeAndNil(DataSetPermissao);
+
+ AddRight(IDUsuario, User.MenuItem);
+ AddRight(IDUsuario, User.Action);
+ AddRight(IDUsuario, UserProfile.MenuItem);
+ AddRight(IDUsuario, UserProfile.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, UserProfile.Action);
+ if Assigned(ControlRight.ActionMainMenuBar) then
+ IncPermissActMenuBar(IDUsuario, UserPasswordChange.Action);
+ {.$ENDIF}
+
+ if LogControl.Active then
+ begin
+ AddRight(IDUsuario, LogControl.MenuItem);
+ AddRight(IDUsuario, LogControl.Action);
+ {.$IFDEF UCACTMANAGER}
+ if Assigned(ControlRight.ActionMainMenuBar) then
+ IncPermissActMenuBar(IDUsuario, LogControl.Action);
+ {.$ENDIF}
+ end;
+
+ if UsersHistory.Active then
+ Begin
+ AddRight(IDUsuario, UsersHistory.MenuItem);
+ AddRight(IDUsuario, UsersHistory.Action);
+ {.$IFDEF UCACTMANAGER}
+ if Assigned(ControlRight.ActionMainMenuBar) then
+ IncPermissActMenuBar(IDUsuario, UsersHistory.Action);
+ {.$ENDIF}
+ End;
+
+ 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', Login.InitialLogin.User, [rfReplaceAll]);
+ Mensagens.Text := StringReplace(Mensagens.Text, ':password', Login.InitialLogin.Password, [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.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;
+ 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.History do
+ Begin
+ Evento_edit := SourceSettings.History.Evento_edit;
+ Evento_NewRecord := SourceSettings.History.Evento_NewRecord;
+ Evento_Insert := SourceSettings.History.Evento_Insert;
+ Evento_delete := SourceSettings.History.Evento_Delete;
+ LabelTabela := SourceSettings.History.LabelTabela;
+ Msg_LogEmptyHistory := SourceSettings.History.Msg_LogEmptyHistory;
+ Msg_MensConfirma := SourceSettings.History.Msg_MensConfirma;
+ LabelDescricao := SourceSettings.History.LabelDescricao;
+ Hist_BtnExcluir := SourceSettings.History.Hist_BtnExcluir;
+ Hist_BtnFiltro := SourceSettings.History.Hist_BtnFiltro;
+ LabelForm := SourceSettings.History.LabelForm;
+ Hist_BtnFechar := SourceSettings.History.Hist_BtnFechar;
+ LabelDataEvento := SourceSettings.History.LabelDataEvento;
+ LabelEvento := SourceSettings.History.LabelEvento;
+ Msg_NewRecord := SourceSettings.History.Msg_NewRecord;
+ Hist_All := SourceSettings.History.Hist_All;
+ Msg_LimpHistorico := SourceSettings.History.Msg_LimpHistorico;
+ LabelHoraEvento := SourceSettings.History.LabelHoraEvento;
+ LabelUser := SourceSettings.History.LabelUser;
+ Hist_MsgExceptPropr := SourceSettings.History.Hist_MsgExceptPropr;
+ End;
+
+ with UserSettings.TypeFieldsDB do
+ Begin
+ Type_VarChar := SourceSettings.TypeFieldsDB.Type_VarChar;
+ Type_Char := SourceSettings.TypeFieldsDB.Type_Char;
+ Type_Int := SourceSettings.TypeFieldsDB.Type_Int;
+ Type_MemoField := SourceSettings.TypeFieldsDB.Type_MemoField;
+ end;
+
+ 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
+ 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);
+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
+ Result[I] := char(byte(Result[I]) xor (Seed shr 8));
+ Seed := (byte(S[I]) + Seed) * word(C1) + word(C2);
+ 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
+ Result[I] := char(byte(Result[I]) xor (Seed shr 8));
+ Seed := (byte(Result[I]) + Seed) * word(C1) + word(C2);
+ 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;
+ Self.MenuItem := TUCLogControl(Source).MenuItem;
+ Self.Action := TUCLogControl(Source).Action;
+ end
+ else
+ inherited;
+end;
+
+procedure TUCLogControl.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ begin
+ Self.MenuItem := nil;
+ Value.FreeNotification(Self.Action);
+ end;
+end;
+
+procedure TUCLogControl.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 '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
+ begin
+ Self.MenuItem := TUCUserProfile(Source).MenuItem;
+ Self.Action := TUCUserProfile(Source).Action;
+ end
+ else
+ inherited;
+end;
+
+procedure TUCUserProfile.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ begin
+ Self.MenuItem := nil;
+ Value.FreeNotification(Self.Action);
+ end;
+end;
+
+procedure TUCUserProfile.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 '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
+ begin
+ Value.FreeNotification(Self.ActionList);
+{ ActionManager := nil;
+ ActionMainMenuBar := nil;
+ MainMenu := nil; By Fknyght and QMD}
+ end;
+end;
+
+{.$IFDEF UCACTMANAGER}
+procedure TUCControlRight.SetActionMainMenuBar(const Value: TActionMainMenuBar);
+begin
+ FActionMainMenuBar := Value;
+ if Value <> nil then
+ begin
+ Value.FreeNotification(Self.ActionMainMenuBar);
+ { ActionList := nil;
+ ActionManager := nil;
+ MainMenu := nil; By Fknyght and QMD }
+ end;
+end;
+
+procedure TUCControlRight.SetActionManager(const Value: TActionManager);
+begin
+ FActionManager := Value;
+ if Value <> nil then
+ begin
+ Value.FreeNotification(Self.ActionManager);
+ { ActionList := nil;
+ ActionMainMenuBar := nil;
+ MainMenu := nil; By Fknyght and QMD }
+ end;
+end;
+
+{.$ENDIF}
+
+procedure TUCControlRight.SetMainMenu(const Value: TMenu);
+begin
+ FMainMenu := Value;
+ if Value <> nil then
+ begin
+ Value.FreeNotification(Self.MainMenu);
+ { ActionList := nil;
+ ActionMainMenuBar := nil;
+ ActionManager := nil; By Fknyght and QMD }
+ end;
+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;
+ 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;
+
+ inherited Destroy;
+end;
+
+procedure TUCApplicationMessage.DeleteAppMessage(IdMsg: Integer);
+begin
+ if MessageDlg(FUserControl.UserSettings.AppMessages.MsgsForm_PromptDelete, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
+ Exit;
+ 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);
+ { FVerifThread := TVerifThread.Create(True);
+ FVerifThread.AOwner := Self;
+ FVerifThread.FreeOnTerminate := True;}
+ 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;
+ 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))]);
+ DataConnector.UCExecSQL(SQLStmt);
+ end;
+end;
+
+procedure TUCUsersLogged.Assign(Source: TPersistent);
+begin
+ inherited;
+end;
+
+constructor TUCUsersLogged.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ FUserControl := TUserControl(AOwner);
+ Self.FAtive := 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.TypeFieldsDB.Type_Char,
+
+ FieldUserID,
+ FUserControl.UserSettings.TypeFieldsDB.Type_Int,
+
+ FieldApplicationID,
+ FUserControl.UserSettings.TypeFieldsDB.Type_VarChar,
+
+ FieldMachineName,
+ FUserControl.UserSettings.TypeFieldsDB.Type_VarChar,
+
+ FieldData,
+ FUserControl.UserSettings.TypeFieldsDB.Type_VarChar]);
+ 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;
+
+procedure TUCUsersLogged.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self.Action);
+end;
+
+procedure TUCUsersLogged.SetMenuItem(const Value: TMenuItem);
+begin
+ FMenuItem := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self.MenuItem);
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+
+{ TUCUserLogoff Por Vicente Barros Leonel }
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCUserLogoff'} {$ENDIF}
+
+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 'TUCHistorico'} {$ENDIF}
+
+{By Vicente Barros Leonel }
+
+function TUCHistorico.GetValueFields: String;
+Var Aux : Integer;
+begin
+ Result := '';
+ For Aux := 0 to DataSet.FieldCount -1 do
+ 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 Options.TypeSavePostEdit = tpSaveModifiedFields then
+ Begin
+ If Value <> AFields[ Aux ] then
+ try Result := Result + Format('%s||%s||%s',[FieldNAme, Value , AFields[ Aux ] ] ) + #13#10; except end;
+ End
+ else
+ try Result := Result + Format('%s||%s||%s',[FieldNAme, Value , AFields[ Aux ] ] )+ #13#10; except end;
+ End;
+ end;
+ End; // for
+end;
+
+procedure TUCHistorico.AfterPost(DataSet: TDataSet);
+begin
+ If Assigned( fOnAfterPost ) then
+ fOnAfterPost( DataSet );
+
+ If ( ( DataSetInEdit = False ) and ( Options.SavePostInsert ) ) then // quando inserindo
+ AddHistory(fUserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption ,
+ fUserControl.UserSettings.History.Evento_Insert,
+ GetValueFields,
+ DataSet.Name,
+ UserControl.CurrentUser.UserID);
+
+ If ( ( DataSetInEdit = True ) and ( Options.SavePostEdit ) ) then // quando editando
+ AddHistory(fUserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption ,
+ fUserControl.UserSettings.History.Evento_Edit,
+ GetValueFields,
+ DataSet.Name,
+ UserControl.CurrentUser.UserID);
+
+ DataSetInEdit := False;
+ SetLength( AFields , 0 );
+end;
+
+procedure TUCHistorico.BeforeDelete(DataSet: TDataSet);
+begin
+ If Assigned( fOnBeforeDelete ) then
+ fOnBeforeDelete( DataSet );
+
+ DataSetInEdit := False;
+ SetLength( AFields , 0 );
+
+ If Options.SaveDelete then
+ AddHistory(fUserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption ,
+ fUserControl.UserSettings.History.Evento_Delete,
+ GetValueFields,
+ DataSet.Name,
+ UserControl.CurrentUser.UserID);
+end;
+
+procedure TUCHistorico.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
+ AFields[ i ] := DataSet.Fields[ i ].Value;
+end;
+
+procedure TUCHistorico.NewRecord(DataSet: TDataSet);
+begin { Adciona novo registro }
+ If Assigned( fOnNewRecord ) then
+ fOnNewRecord( DataSet );
+
+ DataSetInEdit := False; // Inserindo novo registro
+ SetLength( AFields , 0 );
+
+ If Options.SaveNewRecord then
+ AddHistory( fUserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption,
+ fUserControl.UserSettings.History.Evento_NewRecord,
+ Format(RetornaLingua( fUserControl.Language,'Const_Msg_NewRecord'),[UserControl.CurrentUser.UserName]),
+ DataSet.Name,
+ UserControl.CurrentUser.UserID);
+end;
+
+procedure TUCHistorico.SetDataSet(const Value: TDataSet);
+begin
+ fDataSet := Value;
+ if Assigned(Value) then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUCHistorico.SetUserControl(const Value: TUserControl);
+begin
+ FUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(self);
+end;
+
+{----------------------------------------------------------------------------}
+
+constructor TUCHistorico.Create(AOwner: TComponent);
+begin
+ inherited;
+ DataSetInEdit := False;
+ fOptions := TUCHistOptions.Create(Self);
+ fDataSet := Nil;
+ fUserControl := Nil;
+end;
+
+destructor TUCHistorico.Destroy;
+begin
+ FreeAndNil( fOptions );
+ inherited;
+end;
+
+procedure TUCHistorico.Assign(Source: TPersistent);
+begin
+ if Source is TUCHistorico then
+ begin
+ Self.UserControl := TUCHistorico(Source).UserControl;
+ Self.DataSet := TUCHistorico(Source).DataSet;
+ Self.Options.Assign(TUCHistorico(Source).Options);
+ end
+ else
+ inherited;
+end;
+
+procedure TUCHistorico.Loaded;
+begin
+ inherited;
+ if not(csDesigning in ComponentState) then
+ begin
+ if not Assigned(UserControl) then
+ raise Exception.Create( Format( RetornaLingua( null ,'Const_Hist_MsgExceptPropr'),['UserControl']) );
+
+ If fUserControl.UsersHistory.Active = false then exit;
+
+ if not Assigned(DataSet) then
+ raise Exception.Create( Format( RetornaLingua( fUserControl.Language,'Const_Hist_MsgExceptPropr'),['DataSet']) );
+
+ if not Assigned(UserControl.DataConnector) then
+ raise Exception.Create( Format( RetornaLingua( fUserControl.Language,'Const_Hist_MsgExceptPropr'),['UserControl.DataConnector']) );
+
+ 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 TUCHistorico.Notification(AComponent: TComponent;
+ AOperation: TOperation);
+begin
+ if (AOperation = opRemove) then
+ begin
+ If AComponent = fUserControl then
+ fUserControl := Nil;
+
+ if AComponent = fDataSet then
+ fDataSet := Nil;
+ end;
+
+ inherited Notification(AComponent, AOperation);
+end;
+
+procedure TUCHistorico.AddHistory(AppID, Form, FormCaption, Event, Obs, TableName: String;
+ UserId: Integer);
+begin
+ If fUserControl.UsersHistory.Active then
+ fUserControl.DataConnector.UCExecSQL
+ (
+ Format('INSERT INTO %s VALUES( %s, %d , %s , %s , %s , %s ,%s ,%s , %s )',
+ [ fUserControl.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( Form + '.' + TableName )
+ ]));
+end;
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{ TUCUserHistory }
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCUserHistory'} {$ENDIF}
+
+procedure TUCUserHistory.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserProfile then
+ begin
+ Self.MenuItem := TUCUserProfile(Source).MenuItem;
+ Self.Action := TUCUserProfile(Source).Action;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUserHistory.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.Active := True;
+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;
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+{ TUCHistOptions }
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCHistOptions'} {$ENDIF}
+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;
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+end.
+
diff --git a/official/2.20/Source/UCDataConnector.pas b/official/2.20/Source/UCDataConnector.pas
new file mode 100644
index 0000000..ea0411a
--- /dev/null
+++ b/official/2.20/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.20/Source/UCDataInfo.pas b/official/2.20/Source/UCDataInfo.pas
new file mode 100644
index 0000000..76e0cbb
--- /dev/null
+++ b/official/2.20/Source/UCDataInfo.pas
@@ -0,0 +1,244 @@
+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;
+ 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 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.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.20/Source/UCEMailForm_U.dfm b/official/2.20/Source/UCEMailForm_U.dfm
new file mode 100644
index 0000000..2abfdac
--- /dev/null
+++ b/official/2.20/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.20/Source/UCEMailForm_U.pas b/official/2.20/Source/UCEMailForm_U.pas
new file mode 100644
index 0000000..79101cb
--- /dev/null
+++ b/official/2.20/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.20/Source/UCEditorForm_U.dfm b/official/2.20/Source/UCEditorForm_U.dfm
new file mode 100644
index 0000000..4c82d10
--- /dev/null
+++ b/official/2.20/Source/UCEditorForm_U.dfm
@@ -0,0 +1,1345 @@
+object UCEditorForm: TUCEditorForm
+ Left = 237
+ Top = 128
+ BorderStyle = bsDialog
+ Caption = 'User Control Editor'
+ 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}
+ 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
+ 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 cbActionList: TComboBox
+ Left = 237
+ Top = 113
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ OnChange = ComboRightsChange
+ end
+ object cbActionMainMenuBar: TComboBox
+ Left = 237
+ Top = 155
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 1
+ OnChange = ComboRightsChange
+ OnClick = ComboRightsChange
+ end
+ object cbActionManager: TComboBox
+ Left = 237
+ Top = 198
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 2
+ OnChange = ComboRightsChange
+ end
+ object cbMainMenu: TComboBox
+ Left = 237
+ Top = 241
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 3
+ OnChange = ComboRightsChange
+ end
+ end
+ object tabUser: TTabSheet
+ Caption = 'User'
+ ImageIndex = 3
+ 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
+ object Label3: TLabel
+ Left = 174
+ Top = 128
+ Width = 36
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Action :'
+ end
+ object Label28: TLabel
+ Left = 154
+ Top = 181
+ Width = 56
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Menu Item :'
+ end
+ object cbUserProfileAction: TComboBox
+ Left = 213
+ Top = 124
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 0
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object cbUserProfileMenuItem: TComboBox
+ Left = 213
+ Top = 177
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 1
+ 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
+ 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
+ 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 :'
+ end
+ object Label26: TLabel
+ Left = 184
+ Top = 35
+ Width = 36
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Action :'
+ 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
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object cbLogControlMenuItem: TComboBox
+ Left = 226
+ Top = 72
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 4
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ end
+ object tabLogin: TTabSheet
+ Caption = 'Login'
+ ImageIndex = 2
+ 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 = 13
+ 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.20/Source/UCEditorForm_U.pas b/official/2.20/Source/UCEditorForm_U.pas
new file mode 100644
index 0000000..4ae69b1
--- /dev/null
+++ b/official/2.20/Source/UCEditorForm_U.pas
@@ -0,0 +1,454 @@
+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;
+ 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);
+ 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;
+
+end.
+
diff --git a/official/2.20/Source/UCHist_Form.dfm b/official/2.20/Source/UCHist_Form.dfm
new file mode 100644
index 0000000..ad89169
--- /dev/null
+++ b/official/2.20/Source/UCHist_Form.dfm
@@ -0,0 +1,1309 @@
+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
+ 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
+ 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.20/Source/UCHist_Form.pas b/official/2.20/Source/UCHist_Form.pas
new file mode 100644
index 0000000..5b602b9
--- /dev/null
+++ b/official/2.20/Source/UCHist_Form.pas
@@ -0,0 +1,303 @@
+unit UCHist_Form;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, DBCtrls, DB, UcBase;
+
+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
+ fUserControl : TUserControl;
+ { 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 ',
+ [ fUserControl.TableHistory.FieldUserID ,
+ fUserControl.TableHistory.FieldForm ,
+ fUserControl.TableHistory.FieldEvent ,
+ fUserControl.TableHistory.FieldObs ,
+ fUserControl.TableHistory.FieldCaptionForm ,
+ fUserControl.TableHistory.FieldEventDate ,
+ fUserControl.TableHistory.FieldEventTime ,
+ fUserControl.TableHistory.FieldTableName ,
+ fUserControl.TableUsers.FieldLogin ,
+ fUserControl.TableHistory.TableName ,
+ fUserControl.TableUsers.TableName ,
+ fUserControl.TableHistory.FieldUserId ,
+ fUserControl.TableUsers.FieldUserID ,
+ fUserControl.TableHistory.FieldApplicationID ,
+ QuotedStr(fUserControl.ApplicationID) ]);
+
+ if ComboUser.ItemIndex <> 0 then
+ cSql := cSql + Format(' and US.%s = %s ',[fUserControl.TableUsers.FieldLogin,QuotedStr(ComboUser.Text)]);
+
+ if ComboForm.ItemIndex <> 0 then
+ cSql := cSql + Format(' and UH.%s = %s ',[fUserControl.TableHistory.FieldCaptionForm,QuotedStr(ComboForm.Text)]);
+
+ if ComboEvento.ItemIndex <> 0 then
+ cSql := cSql + Format(' and UH.%s = %s ',[fUserControl.TableHistory.FieldEvent,QuotedStr(ComboEvento.Text)]);
+
+ if ComboTabela.ItemIndex <> 0 then
+ cSql := cSql + Format(' and UH.%s = %s ',[fUserControl.TableHistory.FieldTableName,QuotedStr(ComboTabela.Text)]);
+
+ cSql := cSql + Format(' order by Uh.%s, Uh.%s',[fUserControl.TableHistory.FieldTableName,fUserControl.TableHistory.FieldEventDate ]) ;
+
+ DataSetHist.Close;
+ DataSetHist := nil;
+ DataSetHist := fUserControl.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( fUserControl.UserSettings.History.Msg_LimpHistorico ) , pChar(fUserControl.UserSettings.History.Msg_MensConfirma),mb_YesNo) = ID_YES then
+ begin
+ cSql := '';
+
+ if ComboUser.ItemIndex <> 0 then
+ cSql := cSql + Format(' %s = %d ',[fUserControl.TableHistory.FieldUserID , TAuxObj(ComboUser.Items.Objects[ComboUser.ItemIndex]).IdUser ]);
+
+ if ComboForm.ItemIndex <> 0 then
+ cSql := cSql + Format(' and %s = %s ',[fUserControl.TableHistory.FieldCaptionForm,QuotedStr(ComboForm.Text)]);
+
+ if ComboEvento.ItemIndex <> 0 then
+ cSql := cSql + Format(' and %s = %s ',[fUserControl.TableHistory.FieldEvent,QuotedStr(ComboEvento.Text)]);
+
+ if ComboTabela.ItemIndex <> 0 then
+ cSql := cSql + Format(' and %s = %s ',[fUserControl.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 ',[fUserControl.TableHistory.TableName]) + cSql;
+ End
+ else
+ cSql := Format('delete from %s ',[fUserControl.TableHistory.TableName]) + cSql;
+ fUserControl.DataConnector.UCExecSQL( cSql );
+ DataSetHist := Nil;
+ SetComBoValues;
+
+ If fUserControl.LogControl.Active then
+ fUserControl.Log( Format( fUserControl.UserSettings.History.Msg_LogEmptyHistory,[ fUserControl.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( fUserControl.UserSettings.History.Hist_All , Aux );
+
+ ComboForm.Items.Add ( fUserControl.UserSettings.History.Hist_All );
+
+ ComboEvento.Items.Add( fUserControl.UserSettings.History.Hist_All );
+ ComboEvento.Items.Add( fUserControl.UserSettings.History.Evento_Insert );
+ ComboEvento.Items.Add( fUserControl.UserSettings.History.Evento_Delete );
+ ComboEvento.Items.Add( fUserControl.UserSettings.History.Evento_Edit );
+ ComboEvento.Items.Add( fUserControl.UserSettings.History.Evento_NewRecord );
+
+ ComboTabela.Items.Add( fUserControl.UserSettings.History.Hist_All );
+
+ DataSetHist := fUserControl.DataConnector.UCGetSQLDataset(
+ Format('Select distinct %s from %s',[
+ fUserControl.TableHistory.FieldTableName,
+ fUserControl.TableHistory.TableName]));
+ while DataSetHist.Eof = False do
+ Begin
+ ComboTabela.Items.Add( DataSetHist.Fields[ 0 ].AsString );
+ DataSetHist.Next;
+ End;
+
+ DataSetHist := nil;
+ DataSetHist := fUserControl.DataConnector.UCGetSQLDataset(
+ Format('Select distinct %s from %s',[
+ fUserControl.TableHistory.FieldCaptionForm,
+ fUserControl.TableHistory.TableName ]));
+ while DataSetHist.Eof = False do
+ Begin
+ ComboForm.Items.Add( DataSetHist.Fields[ 0 ].AsString );
+ DataSetHist.Next;
+ End;
+
+ DataSetHist := nil;
+ DataSetHist := fUserControl.DataConnector.UCGetSQLDataset(
+ Format('Select %s, %s as Usuario from %s where %s = %s order by %s',
+ [ fUserControl.TableUsers.FieldUserID,
+ fUserControl.TableUsers.FieldLogin ,
+ fUserControl.TableUsers.TableName ,
+ fUserControl.TableUsers.FieldTypeRec,
+ QuotedStr('U') ,
+ fUserControl.TableUsers.FieldLogin ]));
+ 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;
+ ComboUser.ItemIndex := 0;
+ ComboForm.ItemIndex := 0;
+ ComboEvento.ItemIndex := 0;
+ ComboTabela.ItemIndex := 0;
+
+
+ DataSetHist := nil;
+ DataSetHist := fUserControl.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',
+ [ fUserControl.TableHistory.FieldUserId ,
+ fUserControl.TableHistory.FieldForm ,
+ fUserControl.TableHistory.FieldEvent ,
+ fUserControl.TableHistory.FieldObs ,
+ fUserControl.TableHistory.FieldCaptionForm ,
+ fUserControl.TableHistory.FieldEventDate ,
+ fUserControl.TableHistory.FieldEventTime ,
+ fUserControl.TableHistory.FieldTableName ,
+ fUserControl.TableUsers.FieldLogin ,
+ fUserControl.TableHistory.TableName ,
+ fUserControl.TableUsers.TableName ,
+ fUserControl.TableHistory.FieldUserId ,
+ fUserControl.TableUsers.FieldUserID ,
+ fUserControl.TableHistory.FieldApplicationID ,
+ QuotedStr(fUserControl.ApplicationID) ,
+ fUserControl.TableHistory.FieldTableName ,
+ fUserControl.TableHistory.FieldEventDate ]));
+
+ DataSource1.DataSet := DataSetHist;
+end;
+
+procedure TFrmHistorico.FormShow(Sender: TObject);
+begin
+ SetComBoValues;
+
+ Self.Caption := fUserControl.UserSettings.History.LabelDescricao;
+ BitBtn1.Caption := fUserControl.UserSettings.History.Hist_BtnFiltro;
+ BitBtn2.Caption := fUserControl.UserSettings.History.Hist_BtnExcluir;
+ BitBtn3.Caption := fUserControl.UserSettings.History.Hist_BtnFechar;
+
+ LabelDescricao.Caption := fUserControl.UserSettings.History.LabelDescricao;
+ LabelUser.Caption := fUserControl.UserSettings.History.LabelUser;
+ LabelForm.Caption := fUserControl.UserSettings.History.LabelForm;
+ LabelEvento.Caption := fUserControl.UserSettings.History.LabelEvento;
+ LabelTabela.Caption := fUserControl.UserSettings.History.LabelTabela;
+
+ DBGrid1.Columns[ 0 ].Title.Caption := fUserControl.UserSettings.History.LabelUser;
+ DBGrid1.Columns[ 1 ].Title.Caption := fUserControl.UserSettings.History.LabelForm;
+ DBGrid1.Columns[ 2 ].Title.Caption := fUserControl.UserSettings.History.LabelEvento;
+ DBGrid1.Columns[ 3 ].Title.Caption := fUserControl.UserSettings.History.LabelDataEvento;
+ DBGrid1.Columns[ 4 ].Title.Caption := fUserControl.UserSettings.History.LabelHoraEvento;
+ DBGrid1.Columns[ 5 ].Title.Caption := fUserControl.UserSettings.History.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'] <> fUserControl.UserSettings.History.Evento_Edit;
+ StringGrid1.Visible := DataSource1.DataSet.FieldValues['Evento'] = fUserControl.UserSettings.History.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.20/Source/UCIdle.pas b/official/2.20/Source/UCIdle.pas
new file mode 100644
index 0000000..1888637
--- /dev/null
+++ b/official/2.20/Source/UCIdle.pas
@@ -0,0 +1,131 @@
+unit UCIdle;
+
+interface
+
+uses Classes, UCBase, Dialogs, Windows, Forms, ExtCtrls, Messages;
+
+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;
+ 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;
+
+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.20/Source/UCLock.res b/official/2.20/Source/UCLock.res
new file mode 100644
index 0000000..4a1f3ae
Binary files /dev/null and b/official/2.20/Source/UCLock.res differ
diff --git a/official/2.20/Source/UCMail.pas b/official/2.20/Source/UCMail.pas
new file mode 100644
index 0000000..10f5946
--- /dev/null
+++ b/official/2.20/Source/UCMail.pas
@@ -0,0 +1,289 @@
+{-----------------------------------------------------------------------------
+ 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'}
+{.$I 'IdCompilerDefines.inc'}
+
+uses
+ Classes,
+ Dialogs,
+ IdAntiFreeze,
+ IdAntiFreezeBase,
+ IdBaseComponent,
+ IdComponent,
+ IdMessage,
+ IdMessageClient,
+ IdSMTP,
+ IdTCPClient,
+ IdTCPConnection,
+ 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;
+ FIdAntiFreeze: TIdAntiFreeze;
+ FEsqueceuSenha: TUCMEsqueceuSenha;
+ function ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String;
+ function TrataSenha(Senha: String; Key: Word): String;
+ procedure SMTPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: 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 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 25;
+ 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);
+ AlteraUsuario := TUCMailMessage.Create(self);
+ EsqueceuSenha := TUCMEsqueceuSenha.Create(self);
+ SenhaForcada := TUCMailMessage.Create(self);
+ SenhaTrocada := TUCMailMessage.Create(self);
+ 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
+ else
+ begin
+ FIdAntiFreeze := TIdAntiFreeze.Create(Self);
+ FIdAntiFreeze.Active := True;
+ 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.SMTPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: String);
+begin
+ if not Assigned(UCEMailForm) then
+ Exit;
+ UCEMailForm.lbStatus.Caption := AStatusText;
+ UCEMailForm.Update;
+end;
+
+procedure TMailUserControl.EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage);
+var
+ Mailmsg: TIdMessage;
+ MailSMTP: TIdSMTP;
+begin
+ if Trim(Email) = '' then
+ Exit;
+ MailSMTP := TIdSMTP.Create(nil);
+ MailSMTP.OnStatus := SMTPStatus;
+ MailSMTP.Host := ServidorSMTP;
+ MailSMTP.Username := Usuario;
+ if Senha <> '' then
+ MailSMTP.Password := Senha;
+
+ MailMsg := TIdMessage.Create(nil);
+ MailMSG.From.Address := EmailRemetente;
+ MailMSG.From.Name := NomeRemetente;
+ MailMSG.From.Text := NomeRemetente + ' <' + EmailRemetente + '>';
+ with MailMSG.Recipients.Add do
+ begin
+ Address := Email;
+ Name := Nome;
+ Text := Nome + ' <' + Email + '>';
+ end;
+ MailMsg.Body.Text := ParseMailMSG(Nome, Login, USenha, Email, Perfil, UCMSG.Mensagem.Text);
+ MailMSG.Subject := UCMSG.Titulo;
+ try
+ try
+ UCEMailForm := TUCEMailForm.Create(Self);
+ UCEMailForm.lbStatus.Caption := '';
+ UCEMailForm.Show;
+ MailSMTP.Connect;
+ MailSMTP.Send(MailMSG);
+ except
+ on e: Exception do
+ begin
+ UCEMailForm.lbStatus.Caption := E.Message;
+ UCEMailForm.Update;
+ Beep;
+ Sleep(5000);
+ raise;
+ end;
+ end;
+ finally
+ if MailSMTP.Connected then
+ MailSMTP.Disconnect;
+ MailMSG.Free;
+ MailSMTP.Free;
+ UCEMailForm.Close;
+ 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.20/Source/UCMessages.pas b/official/2.20/Source/UCMessages.pas
new file mode 100644
index 0000000..a4e3d31
--- /dev/null
+++ b/official/2.20/Source/UCMessages.pas
@@ -0,0 +1,1152 @@
+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;
+ 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 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;
+ 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;
+ 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;
+
+
+ TUCHistoryMSG = class(TPersistent) // by vicente barros leonel
+ 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;
+
+ TUCFieldType = class(TPersistent) // classe serve para controlar os tipos de campos
+ // no comando sql de create e alter table
+ private
+ fTypeChar: String;
+ fTypeVarChar: String;
+ fTypeInt: String;
+ fTypeMemo: String;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ Property Type_VarChar : String read fTypeVarChar write fTypeVarChar;
+ property Type_Char : String read fTypeChar write fTypeChar;
+ property Type_Int : String read fTypeInt write fTypeInt;
+ Property Type_MemoField : String read fTypeMemo write fTypeMemo;
+ end;
+
+ 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;
+ fHistory: TUCHistoryMSG;
+ fTypeFields: TUCFieldType;
+ fLanguage: TUCLanguage;
+ 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 SetfHistory(const Value: TUCHistoryMSG);
+ 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
+ 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 History : TUCHistoryMSG read fHistory write SetfHistory;
+ property WindowsPosition: TPosition read FPosition write FPosition;
+ Property TypeFieldsDB : TUCFieldType read fTypeFields write fTypeFields;
+ property Language : TUCLanguage read fLanguage write fLanguage;
+ end;
+
+
+implementation
+
+{ 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;
+ fHistory := TUCHistoryMsg.Create(Nil);
+ fTypeFields := TUCFieldType.Create(Nil);
+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(fHistory);
+ SysUtils.FreeAndNil(fTypeFields);
+ 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.SetFCadUserFormMSG(const Value: TUCCadUserFormMSG);
+begin
+ UsersForm := Value;
+end;
+
+procedure TUCUserSettings.SetFFormLoginMsg(const Value: TUCLoginFormMSG);
+begin
+ Login := Value;
+end;
+
+procedure TUCUserSettings.SetfHistory(const Value: TUCHistoryMSG);
+begin
+ History := 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;
+
+{ 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.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;
+ 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 }
+
+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;
+
+{ 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;
+ Self.Type_MemoField := TUCFieldType(Source).Type_MemoField;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCFieldType.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCFieldType.Destroy;
+begin
+
+ inherited;
+end;
+
+end.
+
diff --git a/official/2.20/Source/UCObjSel_U.dfm b/official/2.20/Source/UCObjSel_U.dfm
new file mode 100644
index 0000000..4da08b2
Binary files /dev/null and b/official/2.20/Source/UCObjSel_U.dfm differ
diff --git a/official/2.20/Source/UCObjSel_U.pas b/official/2.20/Source/UCObjSel_U.pas
new file mode 100644
index 0000000..eff55e1
--- /dev/null
+++ b/official/2.20/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.20/Source/UCReg.dcr b/official/2.20/Source/UCReg.dcr
new file mode 100644
index 0000000..a0a2722
Binary files /dev/null and b/official/2.20/Source/UCReg.dcr differ
diff --git a/official/2.20/Source/UCReg.pas b/official/2.20/Source/UCReg.pas
new file mode 100644
index 0000000..9673c77
--- /dev/null
+++ b/official/2.20/Source/UCReg.pas
@@ -0,0 +1,392 @@
+unit UCReg;
+
+interface
+
+{.$I 'UserControl.inc'}
+
+uses
+ Classes,
+ Controls,
+ DesignEditors,
+ DesignIntf,
+ ToolsAPI,
+ TypInfo,
+ UCBase;
+
+type
+ TUCComponentsVarProperty = class(TStringProperty)
+ function GetAttributes: TPropertyAttributes; override;
+ procedure Edit; override;
+ function GetValue: String; override;
+ end;
+
+
+ TUCControlsEditor = class(TComponentEditor)
+ procedure Edit; override;
+ procedure ExecuteVerb(Index: Integer); override;
+ function GetVerb(Index: Integer): String; override;
+ function GetVerbCount: Integer; override;
+ end;
+
+ TUserControlEditor = class(TComponentEditor)
+ procedure Edit; override;
+ procedure ExecuteVerb(Index: Integer); override;
+ function GetVerb(Index: Integer): String; override;
+ function GetVerbCount: Integer; override;
+ end;
+
+ TUCAboutVarProperty = class(TStringProperty)
+ function GetAttributes: TPropertyAttributes; override;
+ procedure Edit; override;
+ function GetValue: String; override;
+ end;
+
+ {.$IFDEF DELPHI7}
+ TUCAboutXpStyleVarProperty = class(TStringProperty)
+ function GetAttributes: TPropertyAttributes; override;
+ procedure Edit; override;
+ function GetValue: String; override;
+ end;
+ {.$ENDIF}
+
+procedure Register;
+procedure ShowControlsEditor(Componente: TUCControls);
+procedure ShowUserControlsEditor(Componente: TUserControl);
+
+implementation
+
+uses
+ Dialogs,
+ Forms,
+ SysUtils,
+ UCAbout,
+ UCIdle,
+ UCObjSel_U,
+ {.$IFDEF DELPHI7}
+ UCAboutXPStyle_U,
+ UCXPStyle,
+ {.$ENDIF}
+ UCEditorForm_U,
+ {.$IFDEF Indy}
+ UCMail,
+ {.$ENDIF}
+ ActnList,
+ ActnMan,
+ ActnMenus,
+ Menus,
+ StdCtrls,
+ UCSettings,
+ Variants;
+
+procedure Register;
+begin
+ RegisterComponents('UC Main',
+ [TUserControl,
+ TUCSettings,
+ TUCControls,
+ TUCApplicationMessage,
+ TUCIdle,
+ TUCHistorico
+ {.$IFDEF Indy}
+ , TMailUserControl
+ {.$ENDIF}
+ {.$IFDEF DELPHI7}
+ , TUCXPStyle
+ {.$ENDIF}
+ ]);
+
+ {.$IFDEF DELPHI7}
+ RegisterPropertyEditor(TypeInfo(TUCAboutXpStyleVar), nil, '', TUCAboutXpStyleVarProperty);
+ {.$ENDIF}
+
+ RegisterPropertyEditor(TypeInfo(TUCAboutVar), TUserControl, 'About', TUCAboutVarProperty);
+ RegisterPropertyEditor(TypeInfo(TUCComponentsVar), TUserControl, 'Components', TUCComponentsVarProperty);
+ RegisterComponentEditor(TUCcontrols, TUCControlsEditor);
+ RegisterComponentEditor(TUserControl, TUserControlEditor);
+end;
+
+{ TUCComponentsVarProperty }
+procedure TUCComponentsVarProperty.Edit;
+begin
+ ShowControlsEditor(TUCControls(GetComponent(0)));
+end;
+
+function TUCComponentsVarProperty.GetAttributes: TPropertyAttributes;
+begin
+ Result := [paDialog, paReadOnly];
+end;
+
+function TUCComponentsVarProperty.GetValue: String;
+begin
+ Result := 'Components...';
+end;
+
+{ TUCAboutVarProperty }
+
+procedure TUCAboutVarProperty.Edit;
+begin
+ with TAboutForm.Create(nil) do
+ begin
+ ShowModal;
+ Free;
+ end;
+end;
+
+function TUCAboutVarProperty.GetAttributes: TPropertyAttributes;
+begin
+ Result := [paDialog, paReadOnly];
+end;
+
+function TUCAboutVarProperty.GetValue: String;
+begin
+ Result := 'Versao ' + UCVersion;
+end;
+
+procedure ShowUserControlsEditor(Componente: TUserControl);
+var
+ Editor: IOTAEditor;
+ Modulo: IOTAModule;
+ FormEditor: IOTAFormEditor;
+ I: Integer;
+ Formulario: TUCEditorForm;
+ UserControl: TUserControl;
+ Controle: String;
+ UserActionMenuItem: String;
+ UserProfileActionMenuItem: String;
+ LogControlActionMeuItem: String;
+ UserPasswordChangeActionMenuItem: String;
+ FormularioDono: TForm;
+begin
+ UserControl := Componente;
+ FormularioDono := TForm(UserControl.Owner);
+ try
+ Formulario := TUCEditorForm.Create(nil, UserControl);
+
+ if Formulario.ShowModal = mrOk then
+ begin
+ with UserControl do
+ begin
+ ApplicationID := Formulario.edtApplicationID.Text;
+ AutoStart := Formulario.ckAutoStart.Checked;
+ CheckValidationKey := Formulario.ckValidationKey.Checked;
+ EncryptKey := Formulario.spedtEncryptKey.Value;
+ TableRights.TableName := Formulario.edtTableRights.Text;
+ TableUsers.TableName := Formulario.edtTableUsers.Text;
+ NotAllowedItems.ActionVisible := Formulario.ckActionVisible.Checked;
+ NotAllowedItems.MenuVisible := Formulario.ckMenuVisible.Checked;
+ Criptografia := TUCCriptografia(Formulario.cbCriptografia.ItemIndex);
+ LoginMode := TUCLoginMode(Formulario.cbLoginMode.ItemIndex);
+
+ if Formulario.cbActionList.ItemIndex >= 0 then
+ Controle := Formulario.cbActionList.Text;
+ if Formulario.cbActionMainMenuBar.ItemIndex >= 0 then
+ Controle := Formulario.cbActionMainMenuBar.Text;
+
+ if Formulario.cbActionManager.ItemIndex >= 0 then
+ Controle := Formulario.cbActionManager.Text;
+ if Formulario.cbMainMenu.ItemIndex >= 0 then
+ Controle := 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) and (Formulario.cbActionList.ItemIndex >= 0) then
+ ControlRight.ActionList := TActionList(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = Controle) and (Formulario.cbActionMainMenuBar.ItemIndex >= 0) then
+ ControlRight.ActionMainMenuBar := TActionMainMenuBar(UserControl.Owner.Components[I]);
+ if (FormularioDono.Components[I].Name = Controle) and (Formulario.cbActionManager.ItemIndex >= 0) then
+ ControlRight.ActionManager := TActionManager(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = Controle) 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 = UserProfileActionMenuItem) and (Formulario.cbUserProfileAction.ItemIndex >= 0) then
+ UserProfile.Action := TAction(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = UserProfileActionMenuItem) and (Formulario.cbUserProfileMenuItem.ItemIndex >= 0) then
+ UserProfile.MenuItem := TMenuItem(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = LogControlActionMeuItem) and (Formulario.cbLogControlAction.ItemIndex >= 0) then
+ LogControl.Action := TAction(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = LogControlActionMeuItem) and (Formulario.cbLogControlMenuItem.ItemIndex >= 0) then
+ LogControl.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 + ' nao 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;
+
+{.$IFDEF DELPHI7}
+ { TUCAboutXpStyleVarProperty }
+
+procedure TUCAboutXpStyleVarProperty.Edit;
+begin
+ with TUCAboutXpStyle.Create(nil) do
+ begin
+ ShowModal;
+ Free;
+ end;
+end;
+
+function TUCAboutXpStyleVarProperty.GetAttributes: TPropertyAttributes;
+begin
+ Result := [paDialog, paReadOnly];
+end;
+
+function TUCAboutXpStyleVarProperty.GetValue: String;
+begin
+ Result := 'About...';
+end;
+{.$ENDIF}
+
+{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 := '&Select Components...';
+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.20/Source/UCSettings.pas b/official/2.20/Source/UCSettings.pas
new file mode 100644
index 0000000..54194a5
--- /dev/null
+++ b/official/2.20/Source/UCSettings.pas
@@ -0,0 +1,1411 @@
+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;
+ fHistory: TUCHistoryMSG;
+ fTypeFields: TUCFieldType;
+ fLanguage: TUCLanguage;
+ 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 SetfHistory(const Value: TUCHistoryMSG);
+ procedure SetfLanguage(const Value: TUCLanguage);
+ protected
+ public
+ 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 History : TUCHistoryMSG read fHistory write SetfHistory;
+ Property TypeFieldsDB : TUCFieldType read fTypeFields write fTypeFields;
+ property WindowsPosition: TPosition read FPosition write FPosition default poMainFormCenter;
+ Property Language : TUCLanguage read fLanguage write SetfLanguage;
+ end;
+
+procedure IniSettings (DestSettings: TUCUserSettings);
+procedure IniSettings2(DestSettings: TUCSettings);
+
+procedure AlterLanguage(DestSettings: TUCUserSettings);
+procedure AlterLanguage2(DestSettings: TUCSettings);
+
+implementation
+
+uses
+ Graphics,
+ SysUtils,
+ UCBase;
+// UCConsts;
+
+{$IFDEF DELPHI9_UP} {$REGION 'Inicializacao'} {$ENDIF}
+
+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 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');
+ 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;
+
+ With DestSettings.History do
+ Begin
+ If Evento_Insert = '' then
+ Evento_Insert := RetornaLingua( ucPortuguesBr ,'Const_Evento_Insert');
+ if Evento_Delete = '' then
+ Evento_Delete := RetornaLingua( ucPortuguesBr ,'Const_Evento_Delete');
+ if Evento_Edit = '' then
+ Evento_Edit := RetornaLingua( ucPortuguesBr ,'Const_Evento_Edit');
+ If Evento_NewRecord = '' then
+ Evento_NewRecord := RetornaLingua( ucPortuguesBr ,'Const_Evento_NewRecord');
+ If Hist_all = '' then
+ Hist_All := RetornaLingua( ucPortuguesBr ,'Const_Hist_All');
+ If Msg_LimpHistorico = '' then
+ Msg_LimpHistorico := RetornaLingua( ucPortuguesBr ,'Const_Msg_LimpHistorico');
+ If Msg_MensConfirma = '' then
+ Msg_MensConfirma := RetornaLingua( ucPortuguesBr ,'Const_Msg_MensConfirma');
+ if Msg_LogEmptyHistory = '' then
+ Msg_LogEmptyHistory := RetornaLingua( ucPortuguesBr ,'Const_Msg_LogEmptyHistory');
+ if LabelDescricao = '' then
+ LabelDescricao := RetornaLingua( ucPortuguesBr ,'Const_LabelDescricao');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( ucPortuguesBr ,'Const_LabelUser');
+ if LabelForm = '' then
+ LabelForm := RetornaLingua( ucPortuguesBr ,'Const_LabelForm');
+ if LabelEvento = '' then
+ LabelEvento := RetornaLingua( ucPortuguesBr ,'const_LabelEvento');
+ if LabelTabela = '' then
+ LabelTabela := RetornaLingua( ucPortuguesBr ,'const_LabelTabela');
+ if LabelDataEvento = '' then
+ LabelDataEvento := RetornaLingua( ucPortuguesBr ,'const_LabelDataEvento');
+ if LabelHoraEvento = '' then
+ LabelHoraEvento := RetornaLingua( ucPortuguesBr ,'const_LabelHoraEvento');
+ if Msg_NewRecord = '' then
+ Msg_NewRecord := RetornaLingua( ucPortuguesBr ,'const_Msg_NewRecord');
+ if Hist_MsgExceptPropr = '' then
+ Hist_MsgExceptPropr := RetornaLingua( ucPortuguesBr ,'Const_Hist_MsgExceptPropr');
+ if Hist_BtnFiltro = '' then
+ Hist_BtnFiltro := RetornaLingua( ucPortuguesBr ,'const_Hist_BtnFiltro');
+ if Hist_BtnExcluir = '' then
+ Hist_BtnExcluir := RetornaLingua( ucPortuguesBr ,'const_Hist_BtnExcluir');
+ if Hist_BtnFechar = '' then
+ Hist_BtnFechar := RetornaLingua( ucPortuguesBr ,'const_Hist_BtnFechar');
+ End;
+
+ 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';
+ if Type_MemoField = '' then
+ Type_MemoField := 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024';
+ 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 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');
+ 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.History do
+ Begin
+ If Evento_Insert = '' then
+ Evento_Insert := RetornaLingua( DestSettings.fLanguage , 'Const_Evento_Insert');
+ if Evento_Delete = '' then
+ Evento_Delete := RetornaLingua( DestSettings.fLanguage , 'Const_Evento_Delete');
+ if Evento_Edit = '' then
+ Evento_Edit := RetornaLingua( DestSettings.fLanguage , 'Const_Evento_Edit');
+ If Evento_NewRecord = '' then
+ Evento_NewRecord := RetornaLingua( DestSettings.fLanguage , 'Const_Evento_NewRecord');
+ If Hist_all = '' then
+ Hist_All := RetornaLingua( DestSettings.fLanguage , 'Const_Hist_All');
+ If Msg_LimpHistorico = '' then
+ Msg_LimpHistorico := RetornaLingua( DestSettings.fLanguage , 'Const_Msg_LimpHistorico');
+ If Msg_MensConfirma = '' then
+ Msg_MensConfirma := RetornaLingua( DestSettings.fLanguage , 'Const_Msg_MensConfirma');
+ if Msg_LogEmptyHistory = '' then
+ Msg_LogEmptyHistory := RetornaLingua( DestSettings.fLanguage , 'Const_Msg_LogEmptyHistory');
+ if LabelDescricao = '' then
+ LabelDescricao := RetornaLingua( DestSettings.fLanguage , 'Const_LabelDescricao');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_LabelUser');
+ if LabelForm = '' then
+ LabelForm := RetornaLingua( DestSettings.fLanguage , 'Const_LabelForm');
+ if LabelEvento = '' then
+ LabelEvento := RetornaLingua( DestSettings.fLanguage , 'const_LabelEvento');
+ if LabelTabela = '' then
+ LabelTabela := RetornaLingua( DestSettings.fLanguage , 'const_LabelTabela');
+ if LabelDataEvento = '' then
+ LabelDataEvento := RetornaLingua( DestSettings.fLanguage , 'const_LabelDataEvento');
+ if LabelHoraEvento = '' then
+ LabelHoraEvento := RetornaLingua( DestSettings.fLanguage , 'const_LabelHoraEvento');
+ if Msg_NewRecord = '' then
+ Msg_NewRecord := RetornaLingua( DestSettings.fLanguage , 'const_Msg_NewRecord');
+ if Hist_MsgExceptPropr = '' then
+ Hist_MsgExceptPropr := RetornaLingua( DestSettings.fLanguage , 'Const_Hist_MsgExceptPropr');
+ if Hist_BtnFiltro = '' then
+ Hist_BtnFiltro := RetornaLingua( DestSettings.fLanguage , 'const_Hist_BtnFiltro');
+ if Hist_BtnExcluir = '' then
+ Hist_BtnExcluir := RetornaLingua( DestSettings.fLanguage , 'const_Hist_BtnExcluir');
+ if Hist_BtnFechar = '' then
+ Hist_BtnFechar := RetornaLingua( DestSettings.fLanguage , 'const_Hist_BtnFechar');
+ End;
+
+ 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';
+ if Type_MemoField = '' then
+ Type_MemoField := 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024';
+ 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');
+ 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');
+ 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.History do
+ Begin
+ Evento_Insert := RetornaLingua( DestSettings.Language,'Const_Evento_Insert');
+ Evento_Delete := RetornaLingua( DestSettings.Language,'Const_Evento_Delete');
+ Evento_Edit := RetornaLingua( DestSettings.Language,'Const_Evento_Edit');
+ Evento_NewRecord := RetornaLingua( DestSettings.Language,'Const_Evento_NewRecord');
+ Hist_All := RetornaLingua( DestSettings.Language,'Const_Hist_All');
+ Msg_LimpHistorico := RetornaLingua( DestSettings.Language,'Const_Msg_LimpHistorico');
+ Msg_MensConfirma := RetornaLingua( DestSettings.Language,'Const_Msg_MensConfirma');
+ Msg_LogEmptyHistory := RetornaLingua( DestSettings.Language,'Const_Msg_LogEmptyHistory');
+ LabelDescricao := RetornaLingua( DestSettings.Language,'Const_LabelDescricao');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_LabelUser');
+ LabelForm := RetornaLingua( DestSettings.Language,'Const_LabelForm');
+ LabelEvento := RetornaLingua( DestSettings.Language,'const_LabelEvento');
+ LabelTabela := RetornaLingua( DestSettings.Language,'const_LabelTabela');
+ LabelDataEvento := RetornaLingua( DestSettings.Language,'const_LabelDataEvento');
+ LabelHoraEvento := RetornaLingua( DestSettings.Language,'const_LabelHoraEvento');
+ Msg_NewRecord := RetornaLingua( DestSettings.Language,'const_Msg_NewRecord');
+ Hist_MsgExceptPropr := RetornaLingua( DestSettings.Language,'Const_Hist_MsgExceptPropr');
+ Hist_BtnFiltro := RetornaLingua( DestSettings.Language,'const_Hist_BtnFiltro');
+ Hist_BtnExcluir := RetornaLingua( DestSettings.Language,'const_Hist_BtnExcluir');
+ Hist_BtnFechar := RetornaLingua( DestSettings.Language,'const_Hist_BtnFechar');
+ 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');
+ 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');
+ 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.History do
+ Begin
+ Evento_Insert := RetornaLingua( DestSettings.Language,'Const_Evento_Insert');
+ Evento_Delete := RetornaLingua( DestSettings.Language,'Const_Evento_Delete');
+ Evento_Edit := RetornaLingua( DestSettings.Language,'Const_Evento_Edit');
+ Evento_NewRecord := RetornaLingua( DestSettings.Language,'Const_Evento_NewRecord');
+ Hist_All := RetornaLingua( DestSettings.Language,'Const_Hist_All');
+ Msg_LimpHistorico := RetornaLingua( DestSettings.Language,'Const_Msg_LimpHistorico');
+ Msg_MensConfirma := RetornaLingua( DestSettings.Language,'Const_Msg_MensConfirma');
+ Msg_LogEmptyHistory := RetornaLingua( DestSettings.Language,'Const_Msg_LogEmptyHistory');
+ LabelDescricao := RetornaLingua( DestSettings.Language,'Const_LabelDescricao');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_LabelUser');
+ LabelForm := RetornaLingua( DestSettings.Language,'Const_LabelForm');
+ LabelEvento := RetornaLingua( DestSettings.Language,'const_LabelEvento');
+ LabelTabela := RetornaLingua( DestSettings.Language,'const_LabelTabela');
+ LabelDataEvento := RetornaLingua( DestSettings.Language,'const_LabelDataEvento');
+ LabelHoraEvento := RetornaLingua( DestSettings.Language,'const_LabelHoraEvento');
+ Msg_NewRecord := RetornaLingua( DestSettings.Language,'const_Msg_NewRecord');
+ Hist_MsgExceptPropr := RetornaLingua( DestSettings.Language,'Const_Hist_MsgExceptPropr');
+ Hist_BtnFiltro := RetornaLingua( DestSettings.Language,'const_Hist_BtnFiltro');
+ Hist_BtnExcluir := RetornaLingua( DestSettings.Language,'const_Hist_BtnExcluir');
+ Hist_BtnFechar := RetornaLingua( DestSettings.Language,'const_Hist_BtnFechar');
+ 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);
+ fHistory := TUCHistoryMSG.Create(Nil);
+ fTypeFields := TUCFieldType.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;
+ fHistory.Free;
+ fTypeFields.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.SetFCadUserFormMSG(const Value: TUCCadUserFormMSG);
+begin
+ FCadUserFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFFormLoginMsg(const Value: TUCLoginFormMSG);
+begin
+ FLoginFormMSG := Value;
+end;
+
+procedure TUCSettings.SetfHistory(const Value: TUCHistoryMSG);
+begin
+ fHistory := 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;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+end.
diff --git a/official/2.20/Source/UCXPSettings.pas b/official/2.20/Source/UCXPSettings.pas
new file mode 100644
index 0000000..89ed10d
--- /dev/null
+++ b/official/2.20/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.20/Source/UCXPStyle.pas b/official/2.20/Source/UCXPStyle.pas
new file mode 100644
index 0000000..694f11b
--- /dev/null
+++ b/official/2.20/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.20/Source/UcConsts_Language.pas b/official/2.20/Source/UcConsts_Language.pas
new file mode 100644
index 0000000..efbe4bb
--- /dev/null
+++ b/official/2.20/Source/UcConsts_Language.pas
@@ -0,0 +1,904 @@
+unit UcConsts_Language;
+
+interface
+
+Uses SysUtils;
+
+Type TUCLanguage = ( ucPortuguesBr, ucEnglish, ucSpanish, ucFrench );
+
+Const MaxArray = 213;
+
+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_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 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_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 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_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 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_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') );
+
+
+ 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.20/Source/UserControl.inc b/official/2.20/Source/UserControl.inc
new file mode 100644
index 0000000..efc80b5
--- /dev/null
+++ b/official/2.20/Source/UserControl.inc
@@ -0,0 +1,159 @@
+{------------------------------------------------------------------------------}
+{ 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}
+
+{------------------------------------------------------------------------------}
+{ DELPHIX_UP from DELPHIX mappings }
+{------------------------------------------------------------------------------}
+
+{$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
+*)
+
+// Define se vai compilar com o indy
+
+{$DEFINE INDY}
diff --git a/official/2.20/Source/UserPermis_U.dfm b/official/2.20/Source/UserPermis_U.dfm
new file mode 100644
index 0000000..5640f06
--- /dev/null
+++ b/official/2.20/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.20/Source/UserPermis_U.pas b/official/2.20/Source/UserPermis_U.pas
new file mode 100644
index 0000000..7efb03b
--- /dev/null
+++ b/official/2.20/Source/UserPermis_U.pas
@@ -0,0 +1,744 @@
+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 TUserControl(Owner).TableRights do
+ begin
+ TUserControl(Owner).DataConnector.UCExecSQL('Delete from ' + TableName + ' Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(TUserControl(owner).ApplicationID));
+ TUserControl(Owner).DataConnector.UCExecSQL('Delete from ' + TableName + 'EX Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(TUserControl(owner).ApplicationID));
+ end;
+
+ for Contador := 0 to TreeMenu.Items.Count - 1 do
+ if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado = 1 then
+ TUserControl(Owner).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
+ TUserControl(Owner).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
+ TUserControl(Owner).AddRightEX(FTempIdUser, TUserControl(Owner).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 := TUserControl(Owner).ControlRight.MainMenu;
+ Self.FActionMainMenuBar := TUserControl(Owner).ControlRight.ActionMainMenuBar;
+ if Assigned(TUserControl(Owner).ControlRight.ActionList) then
+ Self.FActions := TUserControl(Owner).ControlRight.ActionList
+ else
+ Self.FActions := TUserControl(Owner).ControlRight.ActionManager;
+
+ Self.FExtraRights := TUserControl(Owner).ExtraRights;
+
+ (*if (not Assigned(FMenu)) and (not Assigned(TUserControl(Owner).ControlRight.ActionList))
+ {.$IFDEF UCACTMANAGER} and (not Assigned(TUserControl(Owner).ControlRight.ActionManager)) and
+ (not Assigned(TUserControl(Owner).ControlRight.ActionMainMenuBar))
+ {.$ENDIF} then
+ begin
+ if (Assigned(FMenu))
+ {.$IFDEF UCACTMANAGER} and (not Assigned(TUserControl(Owner).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(TUserControl(Owner).ControlRight.ActionList))
+ {.$IFDEF UCACTMANAGER} or (Assigned(TUserControl(Owner).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.20/Source/UsersLogged_U.dfm b/official/2.20/Source/UsersLogged_U.dfm
new file mode 100644
index 0000000..29c55b4
--- /dev/null
+++ b/official/2.20/Source/UsersLogged_U.dfm
@@ -0,0 +1,262 @@
+object frmUsersLogged: TfrmUsersLogged
+ Left = 238
+ Top = 239
+ BorderStyle = bsDialog
+ Caption = 'Usu'#225'rios logados no Sistema'
+ ClientHeight = 311
+ ClientWidth = 586
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poDesktopCenter
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object DBGrid: TDBGrid
+ Left = 0
+ Top = 35
+ Width = 586
+ Height = 242
+ 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 Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 586
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 1
+ object lbDescricao: TLabel
+ Left = 46
+ Top = 12
+ Width = 149
+ Height = 18
+ Caption = 'Usu'#225'rios logados'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image2: TImage
+ Left = 7
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D617066090000424D660900000000000036000000280000001C00
+ 00001C000000010018000000000030090000C40E0000C40E0000000000000000
+ 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7EFEFEFE7E7E7E7E7E7
+ DEDEDEDEDEDEE7E7E7E7E7E7EFEFEFEFEFEFF7F7F7F7F7F7FFFFFFFFFFFFFFFF
+ FFFFFFFFEFF7FF84C6E7E7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C6
+ C6C68C9C946B8C735A845A527B4A4A7B4A4A7B4A4A7B424A7B4A4A7B4A4A7B4A
+ 527B52527B525A7B5A637B6B7B8C7BA5A5A5D6D6D6FFFFFF9CD6EF7BE7F77BB5
+ D6E7EFEFF7F7F7FFFFFFFFFFFFF7F7F77394734A73394A7B314A84314A8C314A
+ 8C31429431429429429429429C294294294294314294314A8C314A8C3163BDDE
+ B5CEDE4A8C31527B31E7E7E77BB5CE52CEE7317BAD7B737B847373ADADADFFFF
+ FF94B5945A7339527B314A84314A8C31429431429429429C29399C2939A52939
+ A52939A529399C29429C294294319CD6EF7BEFF7398CBD8C8C9494737B946363
+ 73637321A5D6297BAD845A63945252846B6BFFFFFF6B8C5A527B315284314A8C
+ 31429431429C29399C2939A52939AD2931AD2931AD2939AD2939A52939A52942
+ 9C2994B5C642BDE71884BD846B7BBD6B6BB56B63AD636B42ADD6318CBD8C5A63
+ 9C5A5A735252FFFFFF5A8452527B314A84314A8C31429429399C2939A52931AD
+ 2931B52931B52931B52931B52931AD2939AD2939AD29B573734294C6299CCE84
+ 6B84C66B6BBD6B6BB56B6B6384A55284A5A56363A55A5A845252FFFFFF739C6B
+ 527B314A8C31429431429C2939A52931AD2931B52929BD2129BD2129BD2129BD
+ 2131B52131AD29CE9C9CDE7B7B7B8CA542ADD6947384CE7373C66B6BBD6B6BB5
+ 6363A55A5AA56363AD7373947373FFFFFFA5C6A55284314A8C31429431399C29
+ 39A52931AD2931BD2129BD2131B53129BD2929C62129BD2131B529CEADADE77B
+ 7BD67B7B947B8CBD7373BD7373B57373B58484C6A5A5DEB5B5DEBDBDDEBDBD9C
+ 8484FFFFFFF7FFF75A944A4A8C31429431399C2939AD2931B52929BD214AA54A
+ DEE7DEDEEFDE42BD4229C62131B52139AD29B57B7BCEA5A5D6BDBDDEC6C6E7CE
+ CEE7C6C6DEB5B5DEA5A5DEB5B5E7C6C6D6ADADB59C9CFFFFFFFFFFFFD6E7D64A
+ 8C39429431399C2939AD2931B52929AD29A5B5A5E7E7E7EFEFEFCEDED631B531
+ 31B52131AD29C69C9CF7EFEFF7DEDEE7B5B5E7B5B5E7BDBDEFCECEEFD6D6E7CE
+ CEE7C6C6B58C8CE7E7E7FFFFFFFFFFFFFFFFFFD6E7D64A9C42429C2939A52931
+ AD29528C529C9C9C7B8C946B7B8C737B845A7B5A299C2139AD2939AD29C6A5A5
+ E7D6D6F7E7E7EFDEDEE7B5B5DEADADE7B5B5D6BDBDBD9494E7DEDEFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFEFF7EF7BB57B399C293194314A7B944A94C64A9CCE4A
+ 94CE4294CE427BA5215231297B214A9C42F7EFEFDEC6C6C6ADADC6A5A5CEA5A5
+ BD9C9CA584848C7B7BE7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFBDD6C64A94AD52A5D652A5D6529CD64A9CD64A9CD64A94CE428CBD42
+ 6363C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADB5B5A5A5A5737373DEDEDE
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F773ADD652A5DE52A5
+ DE52A5DE52A5DE52A5D652A5D64A9CD64A9CD6428CC6737B84E7E7E7FFFFFFFF
+ FFFFD6D6D6ADADAD8C9494B5B5B58C9494EFEFEFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFA5C6DE5AA5DE5AADDE5AADDE5AADDE5AA5DE5AA5DE52A5
+ DE52A5D6529CD64A9CD64A7BA5ADADADFFFFFFC6CECE9C9C9CBDBDBDB5B5B5B5
+ B5B5EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF75AA5D6
+ 5AADDE5AADE75AADE75AADE75AADDE5AADDE5AA5DE52A5DE52A5D6529CD64A94
+ CE73848CF7F7F7F7F7F7ADB5B5C6C6C6EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFADCEE763ADE763ADE763B5E763B5E763B5E7
+ 63ADE75AADE75AADDE5AA5DE52A5DE52A5D64A9CD65A7B94DEDEDEFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFF7BB5DE63B5E763B5E763B5E76BB5E763B5E763B5E763B5E763ADE75AADDE
+ 5AA5DE52A5DE529CD64A84ADC6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63ADDE63B5E76BB5EF6B
+ B5EF6BBDEF6BB5EF6BB5EF63B5E763ADE75AADE75AADDE52A5DE52A5D64A8CBD
+ BDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFEFF7F763ADDE5294BD528CB55A9CCE6BB5E76BBDEF6BBDEF6B
+ B5E763B5E763ADE75AADDE5AA5DE52A5D64A94C6BDBDBDFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FF4A8C
+ BD4284AD4284AD397B9C39738C4A7BA563A5D66BB5E763B5E763ADE75AADDE5A
+ A5DE52A5D64A8CB5C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5294BD4A94C64A94C65294C64A94
+ C64A8CB53973944273945A9CCE63ADE75AADDE4A8CBD39739C39637BD6D6D6FF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFF84B5CE529CCE5AA5CE5AA5CE529CCE529CCE4A94C6428CB5396B
+ 8C427B9C4284B5397BAD3984AD5A7B8CEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6DEE75AA5D6
+ 63ADDE63ADDE5AADD65AA5D6529CCE4A94C6428CBD397BA5397BAD3984AD397B
+ A5A5ADADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7BB5D66BB5E76BB5E763B5DE63ADDE
+ 5AA5D6529CC64A94BD428CB53984AD3984AD63849CEFEFEFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFDEEFF773BDE773BDEF6BBDEF63B5DE5AA5D6529CCE4A94C6428CB5
+ 3984AD5284A5DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEE7F77B
+ BDEF73BDEF6BB5E763ADD65AA5CE4A94C6428CB56B94B5DEDEE7FFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFB5D6E784BDDE73ADCE73
+ A5C684ADCEC6D6DEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}
+ end
+ end
+ object Panel3: TPanel
+ Left = 0
+ Top = 277
+ Width = 586
+ Height = 34
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 2
+ DesignSize = (
+ 586
+ 34)
+ object BtExit: TBitBtn
+ Left = 484
+ Top = 6
+ Width = 95
+ Height = 25
+ Caption = '&Fechar'
+ TabOrder = 2
+ Kind = bkClose
+ end
+ object BitMsg: TBitBtn
+ Left = 287
+ Top = 6
+ 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 = 386
+ Top = 6
+ Width = 95
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Atualizar'
+ TabOrder = 1
+ OnClick = BitRefreshClick
+ Glyph.Data = {
+ 42020000424D4202000000000000420000002800000010000000100000000100
+ 1000030000000002000000000000000000000000000000000000007C0000E003
+ 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7CD9560D190D190D190D190D190D190D190D190D190D190D19
+ 0D190D191F7C1F7CD956964A964A964A964A964A964A964A964A964A964A964A
+ 964A0D191F7C1F7C8049FF7FDF7BBE77D9569D6F7D6F7C6B964A3B633B5F3B5F
+ 964A0D191F7C1F7CB05E8049FF7FDF7BD956BE739D6F7D6F964A5C673B633B5F
+ 964A0D191F7C1F7CD956B05E8049D956D956964A964A964A964A964A964A964A
+ 964A0D191F7C1F7CD956B05EDA7F8049D956DF7BBE77BE73964A7D6F7C6B5C67
+ 964A0D191F7C1F7CD956FF7FB05E527F8049FF7FDF7BBE77964A9D6F7D6F7C6B
+ 964A0D191F7C1F7CD956D956B05EDA7F207F8049D956D956964A964A964A964A
+ 964A0D191F7C8049804980498049FF7FDA7F207F8049FF7FD956DE77BE779D6F
+ 964A0D191F7C1F7CB05E207F207F207FFF7FDA7F207F8049D956DF7BDE77BE77
+ 964A0D191F7C1F7CB05EDA7FFF7FFF7F207F207F207F207F8049004C004C004C
+ 004C004C1F7C1F7CC07CB05EFF7FFF7F207F8049804980498049867E477E087E
+ E97D004C1F7C1F7CC07CB05EDA7FFF7F987F207F8049C07CC07CC07CC07CC07C
+ C07CC07C1F7C1F7C1F7C1F7CB05EFF7FFE7FB77F207F80491F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7CB05EA04980498049804980491F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C}
+ end
+ end
+ object dsDados: TDataSource
+ Left = 132
+ Top = 144
+ end
+end
diff --git a/official/2.20/Source/UsersLogged_U.pas b/official/2.20/Source/UsersLogged_U.pas
new file mode 100644
index 0000000..21604fb
--- /dev/null
+++ b/official/2.20/Source/UsersLogged_U.pas
@@ -0,0 +1,124 @@
+unit UsersLogged_U;
+
+interface
+
+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
+ TfrmUsersLogged = class(TForm)
+ dsDados: TDataSource;
+ DBGrid: TDBGrid;
+ Panel1: TPanel;
+ lbDescricao: TLabel;
+ Panel3: TPanel;
+ BtExit: TBitBtn;
+ BitMsg: TBitBtn;
+ BitRefresh: TBitBtn;
+ Image2: TImage;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormShow(Sender: TObject);
+ procedure BitRefreshClick(Sender: TObject);
+ procedure BitMsgClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormDestroy(Sender: TObject);
+ private
+ DSUserLogados: TDataset;
+ UCMes : TUCApplicationMessage; // Por Vicente Barros Leonel
+ public
+ FUserControl: TUserControl;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+procedure TfrmUsersLogged.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TfrmUsersLogged.FormShow(Sender: TObject);
+var
+ SQLStmt: String;
+begin
+ with FUserControl do
+ begin
+ SQLStmt :=
+ 'SELECT U.' + TableUsers.FieldUserName + ' AS UserName,' +
+ ' 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);
+ end;
+ dsDados.Dataset := DSUserLogados;
+end;
+
+procedure TfrmUsersLogged.BitRefreshClick(Sender: TObject);
+begin
+ try
+ Screen.Cursor := crHourGlass;
+ dsDados.DataSet.Close;
+ dsDados.DataSet.Open;
+ finally
+ Screen.Cursor := crDefault;
+ end;
+end;
+
+procedure TfrmUsersLogged.BitMsgClick(Sender: TObject);
+var Msg : String;
+begin
+ //Vicente Barros Leonel
+ If Assigned( UcMes ) then
+ begin
+ If InputQuery('Mensagem','Digite sua mensagem',Msg) = true then
+ UcMes.SendAppMessage( dsDados.DataSet.FieldValues['id'],'Mensagem do Sistema',Msg);
+ End;
+end;
+
+procedure TfrmUsersLogged.FormCreate(Sender: TObject);
+Var I : Integer; Form : TForm; { Por Vicente Barros Leonel }
+begin
+ UCMes := nil;
+ Form := Application.MainForm;
+ For I := 0 to Form.ComponentCount - 1 do
+ Begin
+ If ( Form.Components[ I ] is TUCApplicationMessage ) then
+ UCMes := TUCApplicationMessage( Form.Components[ I ] );
+ end;
+
+ BitMsg.Visible := UCMES <> Nil;
+end;
+
+procedure TfrmUsersLogged.FormDestroy(Sender: TObject);
+begin { Por Vicente Barros Leonel }
+ UCMes := Nil;
+end;
+
+end.
+
diff --git a/official/2.20/Source/ViewLog_U.dfm b/official/2.20/Source/ViewLog_U.dfm
new file mode 100644
index 0000000..490d4c6
--- /dev/null
+++ b/official/2.20/Source/ViewLog_U.dfm
@@ -0,0 +1,894 @@
+object ViewLog: TViewLog
+ Left = 202
+ Top = 147
+ BorderStyle = bsDialog
+ Caption = 'Seguran'#231'a'
+ ClientHeight = 573
+ ClientWidth = 792
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poDefault
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Splitter1: TSplitter
+ Left = 177
+ Top = 35
+ Height = 538
+ Beveled = True
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 792
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 0
+ object lbDescricao: TLabel
+ Left = 49
+ Top = 12
+ Width = 133
+ Height = 18
+ Caption = 'Log do Sistema'
+ 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
+ FF00FFFFFF00FFFFFF00FFFFFF00E5E0DC00885D40006947310069473100885D
+ 4000E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E0DC006947
+ 3100B7A29300B7A29300B7A29300B7A2930069473100E5E0DC00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00E5E0DC0069473100B7A29300E4D7CF00E3D5CD00E1D3CB00E0D1
+ C800B7A2930069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E0DC0069473100B7A29300E7DB
+ D400E5D9D200E4D7CF00E3D5CD00E1D3CB00E0D1C800B7A2930069473100E5E0
+ DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E0
+ DC0069473100B7A29300E9DFD900E8DDD700E7DBD4009830000098300000E3D5
+ CD00E1D3CB00E0D1C800B7A2930069473100E5E0DC00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00E5E0DC0069473100B7A29300EDE4DF00EBE2DD00EAE0
+ DA0098300000C8600000C860000098300000E3D5CD00E1D3CB00E0D1C800B7A2
+ 930069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E0DC0069473100B7A2
+ 9300EFE8E300EEE6E100EDE4DF0098300000C8600000F57E4600F5794000C860
+ 000098300000E3D6CE00E1D3CB00E0D1C800B7A2930069473100E5E0DC00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00E5E0DC0069473100B7A29300F2ECE800F1EAE600EFE8E30097300000C35D
+ 0000E6825000E37B4A00E2774300E3733E00BE5B0000962F0000E3D6CE00E2D4
+ CC00E1D2C900B7A2930069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00E5E0DC0069473100B7A29300F5F0ED00F3EE
+ EB00F2ECE80098300000C55E0000E0865A00BE6F4700AC613C00AA5C3700B25E
+ 3500CD683800C05C000098300000E3D6CE00E2D4CC00E1D2C900B7A293006947
+ 3100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5E0DC006947
+ 3100B7A29300F6F2EF00F6F2EF00F5F0ED0098300000C8600000F49C6E00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CF6D3E00EE794100C86000009830
+ 0000E3D6CE00E2D4CC00E1D2C900B7A2930069473100E5E0DC00FFFFFF00FFFF
+ FF00FFFFFF00E5E0DC0069473100B7A29300F6F2EF00F9F7F500F8F5F3009830
+ 0000C8600000F8A77B00F7A17500EEA07800FFFFFF00FFFFFF00FFFFFF00AE6C
+ 4C00DE794800F3804800F57C4300C860000098300000E3D6CE00E2D4CC00E1D2
+ C900B7A2930069473100E5E0DC00FFFFFF00E5E0DC0069473100B7A29300F6F2
+ EF00FCFBFA00FBF9F80098300000C8600000F9B18700F9AC8100F8A77B00F09D
+ 7100FFFFFF00FFFFFF00FFFFFF00AA634000E3804F00F6865000F5814900F57C
+ 4300C860000098300000E3D6CE00E2D4CC00E1D2C900B7A2930069473100E5E0
+ DC00B7A29300D0BBAC00F6F2EF00FFFFFF00FDFDFD00A3370500C8600000FABA
+ 9300FAB58D00F9B18700F9AC8100F0A27700FFFFFF00FFFFFF00FFFFFF00AA66
+ 4400E4855600F68B5600F6865000F5814900F57C4300C860000098300000E3D6
+ CE00E2D4CC00E1D2C900B7A29300885D4000B7A29300F6F2EF00FFFFFF00FFFF
+ FF00C8600000F68B5600FBC39F00FBBF9900FABA9300FAB58D00F9B18700F1A7
+ 7D00FFFFFF00FFFFFF00FFFFFF00AA694800E4885B00F7905D00F68B5600F686
+ 5000F5814900F57C4300C860000098300000E4D7CF00E3D5CD00B7A293006947
+ 3100D0BBAC00FFFFFF00FFFFFF00FFFFFF00C8600000FBC39F00FBC39F00FBC3
+ 9F00FBC19C00FBBD9600F9B78F00EBA88200FFFFFF00FFFFFF00FFFFFF00AA6E
+ 4E00E48F6400F7976600F7926000F68D5900F6885300F6834D00C86000009830
+ 0000E5D9D200E4D7CF00B7A2930069473100D0BBAC00F6F2EF00FFFFFF00FFFF
+ FF00FFFFFF00C8600000FBC39F00FBC39F00FBC39F00FBC19C00F7BA9400E2A9
+ 8700FFFFFF00FFFFFF00FFFFFF00AD735400E6946A00F79B6C00F7976600F792
+ 6000F68D5900C860000098300000E8DDD700E7DBD400E5D9D200B7A29300885D
+ 4000ECE4DE00D0BBAC00F6F2EF00FFFFFF00FFFFFF00FFFFFF00C8600000FBC3
+ 9F00FBC39F00FBC39F00F8BF9A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C083
+ 6100E99B7100F8A07200F79B6C00F7976600C860000098300000EBE1DC00E9DF
+ D900E8DDD700B7A2930069473100E5E0DC00FFFFFF00ECE4DE00D0BBAC00F6F2
+ EF00FFFFFF00FFFFFF00FFFFFF00C8600000FBC39F00FBC39F00FAC29E00F7C2
+ 9F00F0C2A600ECCEBC00F8EFE900DA987300F1A57A00F8A57800F8A07200C860
+ 000098300000EDE5E000ECE3DE00EBE1DC00B7A2930069473100E5E0DC00FFFF
+ FF00FFFFFF00FFFFFF00ECE4DE00D0BBAC00F6F2EF00FFFFFF00FFFFFF00FFFF
+ FF00C8600000FBC39F00FBC39F00F8C19D00E5B08F00C4937500B8886A00D296
+ 7400F0A87F00F9AA7E00C860000098300000F1EAE600EFE8E300EEE6E100B7A2
+ 930069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECE4
+ DE00D0BBAC00F6F2EF00FFFFFF00FFFFFF00FFFFFF00C8600000FBC39F00F5BE
+ 9B00EDD7C900FFFFFF00D0BFB400BD8B6D00ECA98200C860000098300000F3EE
+ EB00F2ECE800F1EAE600B7A2930069473100E5E0DC00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECE4DE00D0BBAC00F6F2EF00FFFF
+ FF00FFFFFF00FFFFFF00C8600000F6BF9C00FFFFFF00FFFFFF00FFFFFF00C796
+ 7700BF5B000098300000F6F2EF00F5F0ED00F3EEEB00B7A2930069473100E5E0
+ DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00ECE4DE00D0BBAC00F6F2EF00FFFFFF00FFFFFF00FFFFFF00C65F
+ 0000F8E0D000FFFFFF00EDD7C900B8580000952F0000F9F6F400F7F4F200F6F2
+ EF00B7A2930069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECE4DE00D0BB
+ AC00F6F2EF00FFFFFF00FFFFFF00FFFFFF00C65F0000F6BF9C00F0885400962F
+ 0000FAF9F800FAF8F700F6F2EF00B7A2930069473100E5E0DC00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00ECE4DE00D0BBAC00F6F2EF00FFFFFF00FFFF
+ FF00FFFFFF00C8600000C8600000FFFFFF00FDFDFD00F6F2EF00B7A293006947
+ 3100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00ECE4DE00D0BBAC00F6F2EF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00F6F2EF00B7A2930069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECE4DE00E2C0B100F6F2
+ EF00FFFFFF00FFFFFF00FFFFFF00F6F2EF00B7A2930069473100E5E0DC00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00ECE4DE00D0BBAC00F6F2EF00FFFFFF00F6F2EF00D0BB
+ AC0069473100E5E0DC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ECE4
+ DE00D0BBAC00D0BBAC00B7A29300B7A29300E5E0DC00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 35
+ Width = 177
+ Height = 538
+ Align = alLeft
+ BevelOuter = bvNone
+ TabOrder = 1
+ object lbUsuario: TLabel
+ Left = 16
+ Top = 24
+ Width = 42
+ Height = 13
+ Caption = 'Usu'#225'rio :'
+ end
+ object Bevel1: TBevel
+ Left = 8
+ Top = 72
+ Width = 161
+ Height = 2
+ Style = bsRaised
+ end
+ object lbData: TLabel
+ Left = 16
+ Top = 88
+ Width = 29
+ Height = 13
+ Caption = 'Data :'
+ end
+ object Bevel2: TBevel
+ Left = 8
+ Top = 176
+ Width = 161
+ Height = 2
+ Style = bsRaised
+ end
+ object lbNivel: TLabel
+ Left = 16
+ Top = 200
+ Width = 69
+ Height = 13
+ Caption = 'N'#237'vel m'#237'nimo :'
+ end
+ object Bevel3: TBevel
+ Left = 8
+ Top = 256
+ Width = 161
+ Height = 2
+ Style = bsRaised
+ end
+ object btfiltro: TBitBtn
+ Left = 38
+ Top = 272
+ Width = 101
+ Height = 31
+ 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 = 38
+ Top = 352
+ Width = 101
+ Height = 31
+ Caption = 'Fechar'
+ TabOrder = 5
+ OnClick = btfechaClick
+ 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 = 38
+ Top = 312
+ Width = 101
+ Height = 31
+ 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 = 40
+ Width = 145
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ OnChange = ComboUsuarioChange
+ end
+ object data1: TDateTimePicker
+ Left = 16
+ Top = 104
+ Width = 89
+ Height = 21
+ Date = 37615.000000000000000000
+ Time = 37615.000000000000000000
+ TabOrder = 1
+ OnChange = data1Change
+ end
+ object data2: TDateTimePicker
+ Left = 16
+ Top = 136
+ Width = 89
+ Height = 21
+ Date = 37615.000000000000000000
+ Time = 37615.000000000000000000
+ TabOrder = 2
+ OnChange = ComboUsuarioChange
+ end
+ object ComboNivel: TComboBox
+ Left = 16
+ Top = 216
+ Width = 145
+ Height = 24
+ Style = csOwnerDrawFixed
+ ItemHeight = 18
+ TabOrder = 3
+ OnChange = ComboUsuarioChange
+ OnDrawItem = ComboNivelDrawItem
+ Items.Strings = (
+ 'Faible'
+ 'Moyen'
+ 'Haut'
+ 'Critique')
+ end
+ end
+ object Panel3: TPanel
+ Left = 180
+ Top = 35
+ Width = 612
+ Height = 538
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ DesignSize = (
+ 612
+ 538)
+ object DBGrid1: TDBGrid
+ Left = 3
+ Top = 6
+ Width = 608
+ Height = 529
+ Anchors = [akLeft, akTop, akRight, akBottom]
+ 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
+ end
+ object DataSource1: TDataSource
+ Left = 440
+ end
+ object ImageList1: TImageList
+ Left = 136
+ Top = 153
+ Bitmap = {
+ 494C010104000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000003000000001002000000000000030
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 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
+ 2800000040000000300000000100010000000000800100000000000000000000
+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000FFFFFFFFFFFFFFFFFC3FFC3FC007FFFF
+ F81FF81F8003C003F00FF00F80038001E007E007C007C003C003C003C007C003
+ 80018001E00FE00780018001E00FE00780018001F01FF00F80018001F01FF00F
+ C003C003F83FF81FE007E007F83FF81FF00FF00FFC7FFC3FF81FF81FFC7FFC3F
+ FC3FFC3FFEFFFE7FFFFFFFFFFFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+end
diff --git a/official/2.20/Source/ViewLog_U.pas b/official/2.20/Source/ViewLog_U.pas
new file mode 100644
index 0000000..3dddd0b
--- /dev/null
+++ b/official/2.20/Source/ViewLog_U.pas
@@ -0,0 +1,272 @@
+unit ViewLog_U;
+
+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,
+// UCConsts,
+ Windows;
+
+type
+ TViewLog = class(TForm)
+ Panel1: TPanel;
+ lbDescricao: TLabel;
+ Image1: TImage;
+ Panel2: TPanel;
+ Splitter1: TSplitter;
+ Panel3: TPanel;
+ lbUsuario: TLabel;
+ ComboUsuario: TComboBox;
+ Bevel1: TBevel;
+ lbData: TLabel;
+ data1: TDateTimePicker;
+ data2: TDateTimePicker;
+ Bevel2: TBevel;
+ lbNivel: TLabel;
+ ComboNivel: TComboBox;
+ btfiltro: TBitBtn;
+ Bevel3: TBevel;
+ DataSource1: TDataSource;
+ DBGrid1: TDBGrid;
+ ImageList1: TImageList;
+ btfecha: TBitBtn;
+ btexclui: TBitBtn;
+ procedure FormCreate(Sender: TObject);
+ procedure ComboNivelDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
+ procedure FormShow(Sender: TObject);
+ procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
+ procedure ComboUsuarioChange(Sender: TObject);
+ procedure btfechaClick(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure btexcluiClick(Sender: TObject);
+ procedure data1Change(Sender: TObject);
+ procedure btfiltroClick(Sender: TObject);
+ private
+ procedure AplicaFiltro;
+ public
+ ListIdUser: TStringList;
+ DSLog, DSCmd: TDataset;
+ UCComponent: TUserControl;
+ end;
+
+implementation
+
+uses
+ UCDataInfo;
+
+{$R *.dfm}
+
+procedure TViewLog.FormCreate(Sender: TObject);
+begin
+ ComboNivel.Items.Clear;
+ //Modified by fduenas
+ ComboNivel.Items.Append(TUserControl(Owner).UserSettings.Log.OptionLevelLow); //BGM
+ ComboNivel.Items.Append(TUserControl(Owner).UserSettings.Log.OptionLevelNormal); //BGM
+ ComboNivel.Items.Append(TUserControl(Owner).UserSettings.Log.OptionLevelHigh); //BGM
+ ComboNivel.Items.Append(TUserControl(Owner).UserSettings.Log.OptionLevelCritic); //BGM
+ ComboNivel.ItemIndex := 0;
+ ComboUsuario.Items.Clear;
+ ListIdUser := TStringList.Create;
+ data1.Date := EncodeDate(StrToInt(FormatDateTime('yyyy', Date)), 1, 1);
+ data2.DateTime := Now;
+end;
+
+procedure TViewLog.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 TViewLog.FormShow(Sender: TObject);
+var
+ TabelaLog: String;
+ SQLStmt: String;
+begin
+ with TUserControl(Owner) do
+ DSCmd := DataConnector.UCGetSQLDataset(
+ Format('SELECT %s AS IDUSER, %s AS NOME FROM %s WHERE %s = %s ORDER BY %s',
+ [TableUsers.FieldUserID,
+ TableUsers.FieldUserName,
+ TableUsers.TableName,
+ TableUsers.FieldTypeRec,
+ QuotedStr('U'),
+ TableUsers.FieldUserName]));
+ ComboUsuario.Items.Append(TUserControl(Owner).UserSettings.Log.OptionUserAll); //BGM, modified by fduenas
+ ListIdUser.Append('0');
+ 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 := TUserControl(Owner).LogControl.TableLog;
+ with TUserControl(Owner) 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; //added by fduenas
+ try Position := poScreenCenter; except end;
+end;
+
+procedure TViewLog.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 //Done by Petrus v Breda 28/4/2007
+ begin
+ If Column.Field.AsInteger >= 0 then // By Vicente Barros Leonel
+ { No meu banco de dados, qdo não tinha log dava pau pq o TempIMG era null}
+ 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 //Done by Petrus v Breda 28/4/2007
+ 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 TViewLog.ComboUsuarioChange(Sender: TObject);
+begin
+ btFiltro.Enabled := True;
+end;
+
+procedure TViewLog.btfechaClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TViewLog.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ ListIdUser.Free;
+ Action := caFree;
+end;
+
+procedure TViewLog.btexcluiClick(Sender: TObject);
+var
+ FTabLog, Temp: String;
+begin
+ //modified by fduenas
+ if MessageBox(Handle, PChar(TUserControl(Owner).UserSettings.Log.PromptDelete),
+ PChar(TUserControl(Owner).UserSettings.Log.PromptDelete_WindowCaption), mb_YesNo) <> mrYes then
+ exit;
+
+ btFiltro.Enabled := False;
+ FTabLog := TUserControl(Owner).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
+ TUserControl(Owner).DataConnector.UCExecSQL(Temp);
+ AplicaFiltro;
+ DBGrid1.Repaint;
+ except
+ end;
+
+ //modified by fduenas
+ try
+ TUserControl(Owner).Log(Format(TUserControl(Owner).UserSettings.Log.DeletePerformed, [comboUsuario.Text, DateTimeToStr(Data1.datetime), DateTimeToStr(Data2.datetime), ComboNivel.Text]), 2);
+ except;
+ end;
+
+end;
+
+procedure TViewLog.data1Change(Sender: TObject);
+begin
+ btFiltro.Enabled := True;
+end;
+
+procedure TViewLog.btfiltroClick(Sender: TObject);
+begin
+ AplicaFiltro;
+end;
+
+procedure TViewLog.AplicaFiltro;
+var
+ FTabUser, FTabLog: String;
+ Temp: String;
+begin
+ btFiltro.Enabled := False;
+ DSLog.Close;
+ FTabLog := TUserControl(Owner).LogControl.TableLog;
+ FTabUser := TUserControl(Owner).TableUsers.TableName;
+
+ Temp := Format('Select TabUser.' + TUserControl(Owner).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),
+ [TUserControl(Owner).TableUsers.TableName, TUserControl(Owner).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 := TUserControl(Owner).DataConnector.UCGetSQLDataset(Temp);
+ DataSource1.DataSet := DSLog;
+ btexclui.Enabled := not DsLog.IsEmpty;
+end;
+
+end.
diff --git a/official/2.20/Source/md5.pas b/official/2.20/Source/md5.pas
new file mode 100644
index 0000000..13fcc9e
--- /dev/null
+++ b/official/2.20/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.
+