diff --git a/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConn.pas b/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConn.pas
new file mode 100644
index 0000000..da90afa
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConn.pas
@@ -0,0 +1,114 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCADOConn
+ Author: QmD
+ Date: 08-nov-2004
+ Purpose: ADO Support
+
+ registered in UCReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCADOConn;
+
+interface
+
+uses
+ ADODB,
+ Classes,
+ DB,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TUCADOConn = class(TUCDataConnector)
+ private
+ FConnection: TADOConnection;
+ procedure SetADOConnection(Value: TADOConnection);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TADOConnection read FConnection write SetADOConnection;
+ end;
+
+implementation
+
+{ TUCADOConn }
+
+procedure TUCADOConn.SetADOConnection(Value: TADOConnection);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCADOConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCADOConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList: TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ FConnection.GetTableNames(TempList, True);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCADOConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCADOConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCADOConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCADOConn.UCExecSQL(FSQL: String);
+begin
+ FConnection.Execute(FSQL);
+end;
+
+function TUCADOConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TADOQuery.Create(nil);
+ with Result as TADOQuery do
+ begin
+ Connection := FConnection;
+ SQL.Text := FSQL;
+ Open;
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConnReg.pas b/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConnReg.pas
new file mode 100644
index 0000000..32c5c62
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCADOConn/UCADOConnReg.pas
@@ -0,0 +1,19 @@
+unit UCADOConnReg;
+
+interface
+
+uses
+ Classes,
+ UCADOConn;
+
+procedure Register;
+
+implementation
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCADOConn]);
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj
new file mode 100644
index 0000000..1b6a6b0
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCADOConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control ADO Connectors
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk
new file mode 100644
index 0000000..92d149f
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.dpk
@@ -0,0 +1,36 @@
+package pckUCADOConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control ADO Connectors'}
+{$IMPLICITBUILD OFF}
+
+requires
+ pckUCDataConnector,
+ adortl;
+
+contains
+ UCADOConn in 'UCADOConn.pas',
+ UCADOConnReg in 'UCADOConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.res b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCADOConn/pckUCADOConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas b/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas
new file mode 100644
index 0000000..0febf8e
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConn.pas
@@ -0,0 +1,123 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCZEOSConn
+ Author: Vicente Barros Leonel
+ Date: 29-outubro-2007
+ Purpose: Absolute Database
+
+ registered in UCAbsoluteConn.pas
+-----------------------------------------------------------------------------}
+
+unit UCAbsoluteConn;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DB,
+ SysUtils,
+ UCDataConnector,
+ ABSMain;
+
+type
+ TUCAbsoluteConn = class(TUCDataConnector)
+ private
+ FConnection: TABSDatabase;
+ procedure SetFConnection(const Value: TABSDatabase);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TABSDatabase read FConnection write SetFConnection;
+ end;
+implementation
+
+{ TUCAbsoluteConn }
+
+function TUCAbsoluteConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCAbsoluteConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCAbsoluteConn.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+procedure TUCAbsoluteConn.SetFConnection(const Value: TABSDatabase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCAbsoluteConn.UCExecSQL(FSQL: String);
+begin
+ with TABSQuery.Create(nil) do
+ begin
+ DataBaseName := FConnection.Name;
+ SQL.Clear;
+ Sql.Add(fSql);
+ ExecSQL;
+ Free;
+ end;
+end;
+
+function TUCAbsoluteConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCAbsoluteConn.UCFindTable(const Tablename: String): Boolean;
+var
+ TempList: TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ FConnection.GetTablesList(TempList);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCAbsoluteConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TABSQuery.Create(nil);
+ with Result as TABSQuery do
+ begin
+ DataBaseName := FConnection.Name;
+ SQL.Clear;
+ Sql.Add(fSql);
+ Open;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas b/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas
new file mode 100644
index 0000000..d0a63fd
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCAboluteBase/UCAbsoluteConnReg.pas
@@ -0,0 +1,17 @@
+unit UCAbsoluteConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCAbsoluteConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCAbsoluteConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk
new file mode 100644
index 0000000..e431c67
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dpk
@@ -0,0 +1,38 @@
+package pckUCAbsoluteConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control Absolute DataBase Connectors'}
+{$IMPLICITBUILD ON}
+
+requires
+ rtl,
+ dbrtl,
+ vclAbsDBd11,
+ vcl;
+
+contains
+ UCAbsoluteConnReg in 'UCAbsoluteConnReg.pas',
+ UCAbsoluteConn in 'UCAbsoluteConn.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj
new file mode 100644
index 0000000..d67206e
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.dproj
@@ -0,0 +1,40 @@
+
+
+
+ {e9d49972-8f3b-467c-b46e-69225c5b5b37}
+ pckUCAbsoluteConn.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCAbsoluteConn.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE
+
+
+ 7.0
+
+
+ Delphi.Personality
+ Package
+
+FalseTrueFalseTrueFalseFalse User Control Absolute DataBase Connectors
+ TrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0pckUCAbsoluteConn.dpk
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res
new file mode 100644
index 0000000..c0980e1
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCAboluteBase/pckUCAbsoluteConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConn.pas b/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConn.pas
new file mode 100644
index 0000000..abf4425
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConn.pas
@@ -0,0 +1,113 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCAstaConn
+ Author: QmD
+ Date: 24-nov-2004
+ Purpose: Asta 3 Support
+
+ registered in UCAstaReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCAstaConn;
+
+interface
+
+uses
+ SysUtils, Classes, UCBase, DB, AstaDrv2, AstaClientDataset, ScktComp,
+ AstaCustomSocket, AstaClientSocket,AstaDBTypes;
+type
+ TUCAstaConn = class(TUCDataConn)
+ private
+ FAstaClientSocket: TAstaClientSocket;
+ procedure SetFAstaClientSocket(const Value: TAstaClientSocket);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation);override;
+ public
+ function GetDBObjectName : String; override;
+ function GetTransObjectName : String; override;
+ function UCFindDataConnection : Boolean; override;
+ function UCFindTable(const Tablename : String) : Boolean; override;
+ function UCGetSQLDataset(FSQL : String) : TDataset;override;
+ procedure UCExecSQL(FSQL: String);override;
+ published
+ property AstaClientSocket : TAstaClientSocket read FAstaClientSocket write SetFAstaClientSocket;
+ end;
+
+implementation
+
+{ TUCAstaConn }
+
+procedure TUCAstaConn.SetFAstaClientSocket(
+ const Value: TAstaClientSocket);
+begin
+ FAstaClientSocket := Value;
+ if Value <> nil then Value.FreeNotification(Self);
+end;
+
+procedure TUCAstaConn.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FAstaClientSocket) then
+ begin
+ FAstaClientSocket := nil;
+ end;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCAstaConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempQuery : TAstaClientDataSet;
+begin
+ TempQuery := TAstaClientDataset.Create(nil);
+ TempQuery.AstaClientSocket := FAstaClientSocket;
+ TempQuery.MetaDataRequest := mdTables;
+ TempQuery.Open;
+ Result := TempQuery.Locate('TableName',UpperCase(TableName),[]);
+ TempQuery.Close;
+ FreeAndNil(TempQuery);
+end;
+
+
+function TUCAstaConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FAstaClientSocket) and (FAstaClientSocket.Active);
+end;
+
+function TUCAstaConn.GetDBObjectName: String;
+begin
+ if Assigned(FAstaClientSocket) then
+ begin
+ if Owner = FAstaClientSocket.Owner then Result := FAstaClientSocket.Name
+ else begin
+ Result := FAstaClientSocket.Owner.Name+'.'+FAstaClientSocket.Name;
+ end;
+ end else Result := '';
+end;
+
+function TUCAstaConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCAstaConn.UCExecSQL(FSQL: String);
+begin
+ with TAstaClientDataset.Create(nil) do
+ begin
+ AstaClientSocket := FAstaClientSocket;
+ SQL.text := FSQL;
+ ExecSQL;
+ Free;
+ end;
+end;
+
+function TUCAstaConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TAstaClientDataset.Create(nil);
+ with Result as TAstaClientDataset do
+ begin
+ AstaClientSocket := FAstaClientSocket;
+ SQL.text := FSQL;
+ Open;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas b/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas
new file mode 100644
index 0000000..225400c
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCAstaConn/UCAstaConnReg.pas
@@ -0,0 +1,17 @@
+unit UCAstaReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCAstaConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCAstaConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConn.pas b/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConn.pas
new file mode 100644
index 0000000..dd1bb92
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConn.pas
@@ -0,0 +1,127 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCBDEConn
+ Author: QmD
+ Date: 10-nov-2004
+ Purpose: BDE Support
+
+ registered in UCReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCBDEConn;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DB,
+ DBTables,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TUCBDEConn = class(TUCDataConnector)
+ private
+ FConnection: TDatabase;
+ procedure SetFDatabase(Value: TDatabase);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TDatabase read FConnection write SetFDatabase;
+ end;
+
+implementation
+
+{ TUCBDEConn }
+
+procedure TUCBDEConn.SetFDatabase(Value: TDatabase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCBDEConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCBDEConn.UCFindTable(const TableName: String): Boolean;
+var
+ Lista: TStringList;
+begin
+ Lista := TStringList.Create;
+{$IFDEF DELPHI5}
+ FConnection.Session.GetTableNames(FDatabase.Databasename,'*.db*', False, False, Lista);
+{$ELSE}
+ FConnection.GetTableNames(Lista);
+{$ENDIF}
+ Result := Lista.IndexOf(TableName) > -1;
+ FreeAndNil(Lista);
+end;
+
+function TUCBDEConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCBDEConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCBDEConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCBDEConn.UCExecSQL(FSQL: String);
+begin
+ with TQuery.Create(nil) do
+ begin
+ DatabaseName := FConnection.DatabaseName;
+ SQL.Text := FSQL;
+ ExecSQL;
+ Free;
+ end;
+
+end;
+
+function TUCBDEConn.UCGetSQLDataset(FSQL: String): TDataset;
+var
+ TempQuery: TQuery;
+begin
+ TempQuery := TQuery.Create(nil);
+
+ with TempQuery do
+ begin
+ DatabaseName := FConnection.DatabaseName;
+ SQL.Text := FSQL;
+ Open;
+ end;
+ Result := TempQuery;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas b/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas
new file mode 100644
index 0000000..943d623
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCBDEConn/UCBDEConnReg.pas
@@ -0,0 +1,20 @@
+unit UCBDEConnReg;
+
+interface
+
+uses
+ Classes;
+
+procedure Register;
+
+implementation
+
+uses
+ UCBDEConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCBDEConn]);
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj
new file mode 100644
index 0000000..017237f
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCBDEConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control BDE Connector
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk
new file mode 100644
index 0000000..4c1dd8d
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.dpk
@@ -0,0 +1,36 @@
+package pckUCBDEConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control BDE Connector'}
+{$IMPLICITBUILD ON}
+
+requires
+ pckUCDataConnector,
+ bdertl;
+
+contains
+ UCBDEConn in 'UCBDEConn.pas',
+ UCBDEConnReg in 'UCBDEConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCBDEConn/pckUCBDEConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas b/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas
new file mode 100644
index 0000000..35e4049
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConn.pas
@@ -0,0 +1,128 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCDBISAMConn
+ Changed: Carlos Guerra
+ Date: 01-dez-2004
+ Author: QmD
+ Purpose: DBISAM Support
+
+ registered in UCDBISAMReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCDBISAMConn;
+
+interface
+
+uses
+ SysUtils, Classes, UCBase, DB, dbisamtb;
+
+type
+ TUCDBISAMConn = class(TUCDataConn)
+ private
+ FConnection : TDBISAMDatabase;
+ FSessionName: TDBISAMSession; //Carlos Guerra 12/01/2004
+ procedure SetFDatabase(Value : TDBISAMDatabase);
+ procedure SetFSessionName(const Value: TDBISAMSession); //Carlos Guerra 12/01/2004
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation);override;
+ public
+ function GetDBObjectName : String; override;
+// function GetTransObjectName : String; override;
+ function UCFindDataConnection : Boolean; override;
+ function UCFindTable(const Tablename : String) : Boolean; override;
+ function UCGetSQLDataset(FSQL : String) : TDataset;override;
+ procedure UCExecSQL(FSQL: String);override;
+ published
+ property Connection : TDBISAMDatabase read FConnection write SetFDatabase;
+ property SessionName : TDBISAMSession read FSessionName write SetFSessionName; //Carlos Guerra 12/01/2004
+ end;
+
+implementation
+
+{ TUCDBISAMConn }
+
+procedure TUCDBISAMConn.SetFDatabase(Value: TDBISAMDatabase);
+begin
+ if FConnection <> Value then FConnection := Value;
+ if FConnection <> nil then FConnection.FreeNotification(Self);
+end;
+
+procedure TUCDBISAMConn.SetFSessionName(const Value: TDBISAMSession);
+begin
+ FSessionName := Value;
+ if Value <> nil then Value.FreeNotification(Self);
+end;
+
+
+procedure TUCDBISAMConn.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ begin
+ FConnection := nil;
+ end;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCDBISAMConn.UCFindTable(const TableName: String): Boolean;
+var
+ Lista : TStringList;
+begin
+ Lista := TStringList.Create;
+
+ FConnection.Session.GetTableNames(FConnection.RemoteDatabase,Lista);
+ Result := Lista.IndexOf(TableName) > -1;
+ FreeAndNil(Lista);
+end;
+
+function TUCDBISAMConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCDBISAMConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then Result := FConnection.Name
+ else begin
+ Result := FConnection.Owner.Name+'.'+FConnection.Name;
+ end;
+ end else Result := '';
+end;
+
+{function TUCDBISAMConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;}
+
+procedure TUCDBISAMConn.UCExecSQL(FSQL: String);
+begin
+ with TDBISAMQuery.Create(nil) do
+ begin
+ //DatabaseName := FConnection.DatabaseName; //Cancel by Carlos Guerra 12/01/2004
+ DatabaseName := FConnection.RemoteDatabase; //Carlos Guerra 12/01/2004
+ SessionName := FConnection.SessionName; //Carlos Guerra 12/01/2004
+ SQL.text := FSQL;
+ ExecSQL;
+ Free;
+ end;
+
+end;
+
+function TUCDBISAMConn.UCGetSQLDataset(FSQL: String): TDataset;
+var
+ TempQuery : TDBISAMQuery;
+begin
+ TempQuery := TDBISAMQuery.Create(nil);
+ TempQuery.SessionName := FConnection.SessionName; //Carlos Guerra 12/01/2004
+ TempQuery.DatabaseName := FConnection.RemoteDatabase; //Carlos Guerra 12/01/2004
+ with TempQuery do
+ begin
+ //DatabaseName := FConnection.DatabaseName; //Cancel by Carlos Guerra 12/01/2004
+ SQL.text := FSQL;
+ Open;
+ end;
+ Result := TempQuery;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas b/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas
new file mode 100644
index 0000000..cd9fe75
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBISAMConn/UCDBISAMConnReg.pas
@@ -0,0 +1,17 @@
+unit UCDBISAMReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCDBISAMConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCDBISAMConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConn.pas b/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConn.pas
new file mode 100644
index 0000000..50e5dc3
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConn.pas
@@ -0,0 +1,122 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCDBXConn
+ Author: QmD
+ Date: 08-nov-2004
+ Purpose: ADO Support
+
+ registered in UCDBXReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCDBXConn;
+
+interface
+
+uses
+ Classes,
+ DB,
+ SimpleDS,
+ SqlExpr,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TUCDBXConn = class(TUCDataConnector)
+ private
+ FConnection: TSQLConnection;
+ FSchema: String;
+ procedure SetSQLConnection(Value: TSQLConnection);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TSQLConnection read FConnection write SetSQLConnection;
+ property SchemaName: String read FSchema write FSchema;
+ end;
+
+implementation
+
+{ TUCDBXConn }
+
+procedure TUCDBXConn.SetSQLConnection(Value: TSQLConnection);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCDBXConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCDBXConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList: TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ if SchemaName <> '' then
+ FConnection.GetTableNames(TempList, SchemaName)
+ else
+ FConnection.GetTableNames(TempList);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCDBXConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCDBXConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCDBXConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCDBXConn.UCExecSQL(FSQL: String);
+begin
+// FConnection.Execute(FSQL, nil); // by vicente barros leonel
+ FConnection.ExecuteDirect(FSQL);
+end;
+
+function TUCDBXConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TSimpleDataSet.Create(nil);
+ with Result as TSimpleDataSet do
+ begin
+ Connection := FConnection;
+ DataSet.CommandText := FSQL;
+ SchemaName := FSchema;
+ Open;
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas b/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas
new file mode 100644
index 0000000..7aebf23
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBXConn/UCDBXConnReg.pas
@@ -0,0 +1,21 @@
+unit UCDBXConnReg;
+
+interface
+
+uses
+ Classes;
+
+procedure Register;
+
+implementation
+
+uses
+ UCDBXConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCDBXConn]);
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj
new file mode 100644
index 0000000..2d66f05
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCDBXConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control DBX Connectors
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk
new file mode 100644
index 0000000..05fa12c
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dpk
@@ -0,0 +1,38 @@
+package pckUCDBXConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control DBX Connectors'}
+{$IMPLICITBUILD OFF}
+
+requires
+ pckUCDataConnector,
+ dsnap,
+ dbxcds,
+ dbexpress;
+
+contains
+ UCDBXConn in 'UCDBXConn.pas',
+ UCDBXConnReg in 'UCDBXConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj
new file mode 100644
index 0000000..7f4966a
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.dproj
@@ -0,0 +1,98 @@
+
+
+ {2e1b5318-7a28-4093-9bbb-c66237b9a704}
+ pckUCDBXConn.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCDBXConn.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ RELEASE
+
+
+ 7.0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ DEBUG
+
+
+ Delphi.Personality
+ Package
+
+
+ False
+ True
+ False
+
+
+ User Control DBX Connectors
+ False
+ False
+ False
+
+
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ pckUCDBXConn.dpk
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCDBXConn/pckUCDBXConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConn.pas b/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConn.pas
new file mode 100644
index 0000000..557326e
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConn.pas
@@ -0,0 +1,120 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCFIBConn
+ Author: QmD
+ Date: 08-nov-2004
+ Purpose: FIB Support
+
+ registered in UCReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCFIBConn;
+
+interface
+
+uses
+ SysUtils, Classes, UCBase, DB, pFIBDatabase, pFIBDataset;
+
+type
+ TUCFIBConn = class(TUCDataConn)
+ private
+ FConnection : TpFIBDatabase;
+ FTransaction: TpFIBTransaction;
+ procedure SetFTransaction(const Value: TpFIBTransaction);
+ procedure SetFConnection(const Value: TpFIBDatabase);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation);override;
+ public
+ function GetDBObjectName : String; override;
+ function GetTransObjectName : String; override;
+ function UCFindDataConnection : Boolean; override;
+ function UCFindTable(const Tablename : String) : Boolean; override;
+ function UCGetSQLDataset(FSQL : String) : TDataset; override;
+ procedure UCExecSQL(FSQL: String);override;
+ published
+ property Connection : TpFIBDatabase read FConnection write SetFConnection;
+ property Transaction : TpFIBTransaction read FTransaction write SetFTransaction;
+ end;
+
+implementation
+
+{ TUCFIBConn }
+
+procedure TUCFIBConn.SetFTransaction(const Value: TpFIBTransaction);
+begin
+ FTransaction := Value;
+ if Value <> nil then Value.FreeNotification(Self);
+end;
+
+procedure TUCFIBConn.SetFConnection(const Value: TpFIBDatabase);
+begin
+ if FConnection <> Value then FConnection := Value;
+ if FConnection <> nil then FConnection.FreeNotification(Self);
+end;
+
+procedure TUCFIBConn.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then FConnection := nil;
+ if (Operation = opRemove) and (AComponent = FTransaction) then FTransaction := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCFIBConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList : TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ FConnection.GetTableNames(TempList,False);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCFIBConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCFIBConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then Result := FConnection.Name
+ else begin
+ Result := FConnection.Owner.Name+'.'+FConnection.Name;
+ end;
+ end else Result := '';
+end;
+
+function TUCFIBConn.GetTransObjectName: String;
+begin
+ if Assigned(FTransaction) then
+ begin
+ if Owner = FTransaction.Owner then Result := FTransaction.Name
+ else begin
+ Result := FTransaction.Owner.Name+'.'+FTransaction.Name;
+ end;
+ end else Result := '';
+end;
+
+procedure TUCFIBConn.UCExecSQL(FSQL: String);
+begin
+ FConnection.Execute(FSQL);
+end;
+
+function TUCFIBConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TpFIBDataset.Create(nil);
+ with Result as TpFIBDataset do
+ begin
+ Database := FConnection;
+ Transaction := FTransaction;
+ SelectSQL.text := FSQL;
+ Open;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas b/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas
new file mode 100644
index 0000000..f7387bb
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCFIBConn/UCFIBConnReg.pas
@@ -0,0 +1,17 @@
+unit UCFIBReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCFIBConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCFIBConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConn.pas b/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConn.pas
new file mode 100644
index 0000000..42a11f8
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConn.pas
@@ -0,0 +1,111 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCIBOConn
+ Author: QmD
+ Date: 22-nov-2004
+ Purpose: IBO Dataset Support
+
+ registered in UCIBOReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCIBOConn;
+
+interface
+
+uses
+ Classes,
+ DB,
+ IB_Components,
+ IBODataset,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TUCIBOConn = class(TUCDataConnector)
+ private
+ FConnection: TIBODatabase;
+ procedure SetIBOConnection(const Value: TIBODatabase);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TIBODatabase read FConnection write SetIBOConnection;
+ end;
+
+implementation
+
+{ TUCIBOConn }
+
+
+procedure TUCIBOConn.SetIBOConnection(const Value: TIBODatabase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCIBOConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCIBOConn.UCFindTable(const TableName: String): Boolean;
+begin
+ with TIBOQuery.Create(nil) do
+ begin
+ IB_Connection := FConnection;
+ SQL.Text := 'SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 and RDB$RELATION_NAME = ' + QuotedStr(Uppercase(TableName));
+ Open;
+ Result := FieldByName('RDB$RELATION_NAME').AsString = Uppercase(TableName);
+ Close;
+ Free;
+ end;
+end;
+
+function TUCIBOConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCIBOConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+
+procedure TUCIBOConn.UCExecSQL(FSQL: String);
+begin
+ FConnection.DefaultTransaction.ExecuteImmediate(FSQL);
+ FConnection.DefaultTransaction.Commit;
+end;
+
+function TUCIBOConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TIBOQuery.Create(nil);
+ with Result as TIBOQuery do
+ begin
+ IB_Connection := FConnection;
+ SQL.Text := FSQL;
+ Open;
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas b/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas
new file mode 100644
index 0000000..f8c4eb9
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBOConn/UCIBOConnReg.pas
@@ -0,0 +1,18 @@
+unit UCIBOConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCIBOConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCIBOConn]);
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk b/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk
new file mode 100644
index 0000000..6671069
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.dpk
@@ -0,0 +1,32 @@
+package pckIBOConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control IBO Connector'}
+{$IMPLICITBUILD ON}
+
+contains
+ UCIBOConn in 'UCIBOConn.pas',
+ UCIBOConnReg in 'UCIBOConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.res b/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCIBOConn/pckIBOConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConn.pas b/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConn.pas
new file mode 100644
index 0000000..642fa7e
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConn.pas
@@ -0,0 +1,152 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCIBXConn
+ Author: QmD
+ Date: 08-nov-2004
+ Purpose: IBX Support
+
+ registered in UCReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCIBXConn;
+
+interface
+
+uses
+ Classes,
+ DB,
+ IBDataBase,
+ IBQuery,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TUCIBXConn = class(TUCDataConnector)
+ private
+ FConnection: TIBDatabase;
+ FTransaction: TIBTransaction;
+ procedure SetTransaction(const Value: TIBTransaction);
+ procedure SetConnection(const Value: TIBDatabase);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TIBDatabase read FConnection write SetConnection;
+ property Transaction: TIBTransaction read FTransaction write SetTransaction;
+ end;
+
+implementation
+
+{ TUCIBXConn }
+
+procedure TUCIBXConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ if (Operation = opRemove) and (AComponent = FTransaction) then
+ FTransaction := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCIBXConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList: TStringList;
+begin
+ TempList := TStringList.Create;
+ try
+ FConnection.GetTableNames(TempList, False);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ SysUtils.FreeAndNil(TempList);
+ end;
+end;
+
+function TUCIBXConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCIBXConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCIBXConn.GetTransObjectName: String;
+begin
+ if Assigned(FTransaction) then
+ begin
+ if Owner = FTransaction.Owner then
+ Result := FTransaction.Name
+ else
+ begin
+ Result := FTransaction.Owner.Name + '.' + FTransaction.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+procedure TUCIBXConn.UCExecSQL(FSQL: String);
+var
+ Qry: TIBQuery;
+begin
+ Qry := TIBQuery.Create(nil);
+ try
+ Qry.Database := FConnection;
+ Qry.Transaction := FTransaction;
+ if not Qry.Transaction.Active then
+ Qry.Transaction.Active := True;
+ Qry.SQL.Text := FSQL;
+ Qry.ExecSQL;
+ Qry.Transaction.Commit;
+ finally
+ Qry.Free;
+ end;
+end;
+
+function TUCIBXConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TIBQuery.Create(nil);
+ with Result as TIBQuery do
+ begin
+ Database := FConnection;
+ Transaction := FTransaction;
+ SQL.Text := FSQL;
+ Open;
+ end;
+end;
+
+
+procedure TUCIBXConn.SetTransaction(const Value: TIBTransaction);
+begin
+ FTransaction := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUCIBXConn.SetConnection(const Value: TIBDatabase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas b/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas
new file mode 100644
index 0000000..7eb0997
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBXConn/UCIBXConnReg.pas
@@ -0,0 +1,20 @@
+unit UCIBXConnReg;
+
+interface
+
+uses
+ Classes;
+
+procedure Register;
+
+implementation
+
+uses
+ UCIBXConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCIBXConn]);
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj
new file mode 100644
index 0000000..c59c976
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCIBXConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control IBX Connector
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk
new file mode 100644
index 0000000..4511021
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.dpk
@@ -0,0 +1,36 @@
+package pckUCIBXConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control IBX Connector'}
+{$IMPLICITBUILD ON}
+
+requires
+ pckUCDataConnector,
+ ibxpress;
+
+contains
+ UCIBXConn in 'UCIBXConn.pas',
+ UCIBXConnReg in 'UCIBXConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCIBXConn/pckUCIBXConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConn.pas b/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConn.pas
new file mode 100644
index 0000000..0f07703
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConn.pas
@@ -0,0 +1,149 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCMDOConn
+ Author: Alexandre Oliveira - 05/11/2004
+ Change: QmD
+ Date: 10-nov-2004
+ Purpose: MDO Support
+
+ registered in UCMDOReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCMDOConn;
+
+interface
+
+uses
+ Classes,
+ DB,
+ MDODatabase,
+ MDOQuery,
+ SysUtils,
+ UCDataConnector;
+
+type
+ TUCMDOConn = class(TUCDataConnector)
+ private
+ FConnection: TMDODatabase;
+ FTransaction: TMDOTransaction;
+ procedure SetFTransaction(const Value: TMDOTransaction);
+ procedure SetMDOConnection(const Value: TMDODatabase);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ function UCFindDataConnection: Boolean; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ procedure UCExecSQL(FSQL: String); override;
+ published
+ property Connection: TMDODatabase read FConnection write SetMDOConnection;
+ property Transaction: TMDOTransaction read FTransaction write SetFTransaction;
+ end;
+
+implementation
+
+{ TUCMDOConn }
+
+procedure TUCMDOConn.SetFTransaction(const Value: TMDOTransaction);
+begin
+ FTransaction := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUCMDOConn.SetMDOConnection(const Value: TMDODatabase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCMDOConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ if (Operation = opRemove) and (AComponent = FTransaction) then
+ FTransaction := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCMDOConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList: TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ FConnection.GetTableNames(TempList, False);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCMDOConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCMDOConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCMDOConn.GetTransObjectName: String;
+begin
+ if Assigned(FTransaction) then
+ begin
+ if Owner = FTransaction.Owner then
+ Result := FTransaction.Name
+ else
+ begin
+ Result := FTransaction.Owner.Name + '.' + FTransaction.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+procedure TUCMDOConn.UCExecSQL(FSQL: String);
+begin
+ with TMDOQuery.Create(nil) do
+ begin
+ Database := FConnection;
+ Transaction := FTransaction;
+ if not Transaction.Active then
+ Transaction.Active := True;
+ SQL.Text := FSQL;
+ ExecSQL;
+ FTransaction.Commit;
+ Free;
+ end;
+end;
+
+function TUCMDOConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TMDOQuery.Create(nil);
+ with Result as TMDOQuery do
+ begin
+ Database := FConnection;
+ Transaction := FTransaction;
+ SQL.Text := FSQL;
+ Open;
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas
new file mode 100644
index 0000000..7b41340
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMDOConn/UCMDOConnReg.pas
@@ -0,0 +1,17 @@
+unit UCMDOConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCMDOConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCMDOConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj
new file mode 100644
index 0000000..d712089
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.bdsproj
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCMDOConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control MDO Connector
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk
new file mode 100644
index 0000000..6e8946f
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.dpk
@@ -0,0 +1,40 @@
+package pckUCMDOConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control MDO Connector'}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ pckUCDataConnector,
+ vcl,
+ vclactnband,
+ vcldb,
+ RCLMDO2005;
+
+contains
+ UCMDOConnReg in 'UCMDOConnReg.pas',
+ UCMDOConn in 'UCMDOConn.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCMDOConn/pckUCMDOConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConn.pas b/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConn.pas
new file mode 100644
index 0000000..494ac1f
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConn.pas
@@ -0,0 +1,181 @@
+{-----------------------------------------------------------------------------
+ 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.net
+
+ 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.31RC1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas
new file mode 100644
index 0000000..9bbf9b1
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMidasConn/UCMidasConnReg.pas
@@ -0,0 +1,74 @@
+unit UCMidasConnReg;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DesignEditors,
+ DesignIntf,
+ TypInfo;
+
+type
+ TUCProviderNameProperty = class(TStringProperty)
+ function GetAttributes: TPropertyAttributes; override;
+ procedure GetValues(Proc: TGetStrProc); override;
+ end;
+
+procedure Register;
+
+implementation
+
+uses
+ Midas,
+ UCMidasConn,
+ Variants;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCMidasConn]);
+ RegisterPropertyEditor(TypeInfo(String), TUCMidasConn, 'ProviderName', TUCProviderNameProperty);
+end;
+
+{ TUCProviderNameProperty }
+
+function TUCProviderNameProperty.GetAttributes: TPropertyAttributes;
+begin
+ Result := [paValueList];
+end;
+
+procedure TUCProviderNameProperty.GetValues(Proc: TGetStrProc);
+var
+ Componente: TComponent;
+ Lista: variant;
+ I: Integer;
+begin
+ Componente := TComponent(GetComponent(0));
+
+ if not Assigned(Componente) then
+ Exit;
+
+ if not (Componente is TUCMidasConn) then
+ Exit;
+
+ if not Assigned(TUCMidasConn(Componente).Connection) then
+ Exit;
+
+ with TUCMidasConn(Componente) do
+ begin
+
+ try
+ Lista := IAppServer(Connection.GetServer).AS_GetProviderNames;
+ except
+ end;
+
+ if VarIsArray(Lista) and (VarArrayDimCount(Lista) = 1) then
+ for I := VarArrayLowBound(Lista, 1) to VarArrayHighBound(Lista, 1) do
+ Proc(Lista[I]);
+
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj
new file mode 100644
index 0000000..1b24c02
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.bdsproj
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCMidasConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control Midas Connector
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+ TeeChart Components
+ JVCL BDE Components
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk
new file mode 100644
index 0000000..adaef7f
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dpk
@@ -0,0 +1,39 @@
+package pckUCMidasConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control Midas Connector'}
+{$IMPLICITBUILD OFF}
+
+requires
+ designide,
+ dbrtl,
+ dsnap,
+ rtl,
+ pckUCDataConnector;
+
+contains
+ UCMidasConn in 'UCMidasConn.pas',
+ UCMidasConnReg in 'UCMidasConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj
new file mode 100644
index 0000000..fac6a75
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.dproj
@@ -0,0 +1,56 @@
+
+
+ {8fed7c75-8e0d-4aa3-a33b-65582db4fefb}
+ pckUCMidasConn.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCMidasConn.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ RELEASE
+
+
+ 7.0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+ Delphi.Personality
+ Package
+
+FalseTrueFalseUser Control Midas ConnectorFalseFalseFalseC:\Arquivos de programas\Borland\Delphi7\Bin\TrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0
+ TeeChart Components
+ JVCL BDE Components
+ pckUCMidasConn.dpk
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCMidasConn/pckUCMidasConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas b/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas
new file mode 100644
index 0000000..cd66940
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConn.pas
@@ -0,0 +1,106 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCMyDACConn
+ Author: QmD
+ Date: 22-nov-2004
+ Purpose: MyDAC Support
+
+ registered in UCMyDACReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCMyDACConn;
+
+interface
+
+uses
+ UCDataConnector,SysUtils, Classes, UCBase, DB, DBAccess, MyAccess, MemDS;
+
+type
+ TUCMyDACConn = class(TUCDataConnector)
+ private
+ FConnection : TMyConnection;
+ procedure SetFConnection(Value : TMyConnection);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation);override;
+ public
+ function GetDBObjectName : String; override;
+ function GetTransObjectName : String; override;
+ function UCFindDataConnection : Boolean; override;
+ function UCFindTable(const Tablename : String) : Boolean; override;
+ function UCGetSQLDataset(FSQL : String) : TDataset;override;
+ procedure UCExecSQL(FSQL: String);override;
+ published
+ property Connection : TMyConnection read FConnection write SetFConnection;
+ end;
+
+implementation
+
+{ TUCMyDACConn }
+
+procedure TUCMyDACConn.SetFConnection(Value: TMyConnection);
+begin
+ if FConnection <> Value then FConnection := Value;
+ if FConnection <> nil then FConnection.FreeNotification(Self);
+end;
+
+procedure TUCMyDACConn.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ begin
+ FConnection := nil;
+ end;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCMyDACConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList : TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ FConnection.GetTableNames(TempList);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCMyDACConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCMyDACConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then Result := FConnection.Name
+ else begin
+ Result := FConnection.Owner.Name+'.'+FConnection.Name;
+ end;
+ end else Result := '';
+end;
+
+function TUCMyDACConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCMyDACConn.UCExecSQL(FSQL: String);
+begin
+ FConnection.ExecSQL(FSQL,[]);
+end;
+
+function TUCMyDACConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TMyQuery.Create(nil);
+ with Result as TMyQuery do
+ begin
+ Connection := FConnection;
+ SQL.Text := FSQL;
+ Open;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas
new file mode 100644
index 0000000..d73c134
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/UCMyDACConnReg.pas
@@ -0,0 +1,17 @@
+unit UCMyDACConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCMyDACConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCMyDACConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk
new file mode 100644
index 0000000..82fd28b
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dpk
@@ -0,0 +1,48 @@
+package pckMyDacConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$IMPLICITBUILD ON}
+
+requires
+ rtl,
+ dbrtl,
+ dac105,
+ mydac105,
+ vcldb,
+ vcl,
+ pckUserControl_RT,
+ pckUCDataConnector,
+ pckMD5,
+ VclSmp,
+ vclx,
+ inet,
+ designide,
+ xmlrtl,
+ vclactnband;
+
+contains
+ UCMyDACConnReg in 'UCMyDACConnReg.pas',
+ UCMyDACConn in 'UCMyDACConn.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj
new file mode 100644
index 0000000..388d778
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.dproj
@@ -0,0 +1,90 @@
+
+
+
+ {5338e891-3591-4e66-859a-eaa77ade0066}
+ pckMyDacConn.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMyDacConn.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE
+
+
+ 7.0
+
+
+ Delphi.Personality
+ Package
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ pckMyDacConn.dpk
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj
new file mode 100644
index 0000000..15dbba3
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.groupproj
@@ -0,0 +1,31 @@
+
+
+ {9e0c44c1-7f19-426e-959f-54b897d52e85}
+
+
+
+
+ Default.Personality
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res
new file mode 100644
index 0000000..1826680
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckMyDacConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj
new file mode 100644
index 0000000..ed35f99
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCMYDac.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ UserControl MyDac Connector
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk
new file mode 100644
index 0000000..fec983f
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.dpk
@@ -0,0 +1,47 @@
+package pckUCMYDac;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'UserControl MyDac Connector'}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ pckUserControl_RT,
+ VclSmp,
+ vclx,
+ vcl,
+ pckUCDataConnector,
+ pckMD5,
+ vcldb,
+ vclactnband,
+ vcljpg,
+ dac100,
+ mydac100;
+
+contains
+ UCMyDACConnReg in 'UCMyDACConnReg.pas',
+ UCMyDACConn in 'UCMyDACConn.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCMyDACConn/pckUCMYDac.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConn.pas
new file mode 100644
index 0000000..02050f0
--- /dev/null
+++ b/official/2.31RC1/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.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas
new file mode 100644
index 0000000..2e7c007
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/UCMySQLDACConnReg.pas
@@ -0,0 +1,17 @@
+unit UCMySQLDACConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCMySQLDACConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCMySQLDACConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj
new file mode 100644
index 0000000..afe1c73
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckMySQLDACConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control ADO Connectors
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk
new file mode 100644
index 0000000..39fe7be
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dpk
@@ -0,0 +1,38 @@
+package pckMySQLDACConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control ADO Connectors'}
+{$IMPLICITBUILD OFF}
+
+requires
+ pckUCDataConnector,
+ adortl,
+ rtl,
+ dbrtl;
+
+contains
+ UCMySQLDACConnReg in 'UCMySQLDACConnReg.pas',
+ UCMySQLDACConn in 'UCMySQLDACConn.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj
new file mode 100644
index 0000000..fde8cb2
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.dproj
@@ -0,0 +1,98 @@
+
+
+ {480541f5-52fb-4c6b-adf4-7b2eb88c5599}
+ pckMySQLDACConn.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMySQLDACConn.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ RELEASE
+
+
+ 7.0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ DEBUG
+
+
+ Delphi.Personality
+ Package
+
+
+ False
+ True
+ False
+
+
+ User Control ADO Connectors
+ False
+ False
+ False
+
+
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ pckMySQLDACConn.dpk
+
+
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCMySQLDACConn/pckMySQLDACConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConn.pas b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConn.pas
new file mode 100644
index 0000000..6d0e44d
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConn.pas
@@ -0,0 +1,104 @@
+{Connector para NexusDB v2.xx adaptado por WanX}
+
+unit UCNexusDBConn;
+
+interface
+
+{.$I 'UserControl.inc'}
+
+uses
+ SysUtils, Classes, DB, UCDataConnector, nxdb, nxsdFmtBCD;
+
+type
+ TUCNexusDBConnector = class(TUCDataConnector)
+ private
+ FConnection: TnxDatabase;
+ procedure SetConnection(const Value: TnxDatabase);
+ 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;
+ published
+ property Connection: TnxDatabase read FConnection write SetConnection;
+ end;
+
+implementation
+
+{ TUCNexusDBConnector }
+
+function TUCNexusDBConnector.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 TUCNexusDBConnector.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if ((Operation = opRemove) and (AComponent = FConnection)) then
+ FConnection := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+procedure TUCNexusDBConnector.SetConnection(const Value: TnxDatabase);
+begin
+ if FConnection <> Value then FConnection := Value;
+ if FConnection <> nil then FConnection.FreeNotification(Self);
+end;
+
+procedure TUCNexusDBConnector.UCExecSQL(FSQL: String);
+var
+ TempQuery: TnxQuery;
+begin
+ TempQuery:= TnxQuery.Create(nil);
+ try
+ TempQuery.Database:= FConnection;
+ TempQuery.SQL.text := FSQL;
+ TempQuery.ExecSQL;
+ finally
+ FreeAndNil(TempQuery);
+ end;
+end;
+
+function TUCNexusDBConnector.UCFindDataConnection: Boolean;
+begin
+ Result := (Assigned(FConnection) and (FConnection.Connected));
+end;
+
+function TUCNexusDBConnector.UCFindTable(const Tablename: String): Boolean;
+var
+ Lista : TStringList;
+begin
+ Lista := TStringList.Create;
+ try
+ FConnection.GetTableNames(Lista);
+ Result := Lista.IndexOf(TableName) > -1;
+ finally
+ FreeAndNil(Lista);
+ end;
+end;
+
+function TUCNexusDBConnector.UCGetSQLDataset(FSQL: String): TDataset;
+var
+ TempQuery : TnxQuery;
+begin
+ TempQuery := TnxQuery.Create(nil);
+ TempQuery.Database:= FConnection;
+ with TempQuery do
+ begin
+ SQL.text := FSQL;
+ Open;
+ end;
+ Result := TempQuery;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas
new file mode 100644
index 0000000..8a71536
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/UCNexusDBConnReg.pas
@@ -0,0 +1,15 @@
+unit UCNexusDBConnReg;
+
+interface
+
+uses Classes, UCNexusDBConn;
+
+procedure Register;
+
+implementation
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCNexusDBConnector]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk
new file mode 100644
index 0000000..f08bd48
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.dpk
@@ -0,0 +1,38 @@
+package pckUCNexusDBConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ pckUCDataConnector,
+ NexusDB207ll100,
+ NexusDB207db100,
+ NexusDB207sd100;
+
+contains
+ UCNexusDBConnReg in 'UCNexusDBConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCNexusDBConn/pckUCNexusDBConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConn.pas b/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConn.pas
new file mode 100644
index 0000000..6fbaa55
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConn.pas
@@ -0,0 +1,119 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCOADCCon
+ Author: QmD
+ Date: 23-jun-2007
+ Purpose: ODAC Support
+
+ registered in UCODACReg.pas
+-----------------------------------------------------------------------------}
+
+unit UCODACConn;
+
+interface
+
+uses
+ SysUtils, Classes, UCBase, DB, DBAccess, Ora;
+
+type
+ TUCODACConn = class(TUCDataConn)
+ private
+ FConnection : TOraSession;
+ procedure SetFConnection(Value : TOraSession);
+ 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 : TOraSession read FConnection write SetFConnection;
+ end;
+
+implementation
+
+{ TUCODACConn }
+
+procedure TUCODACConn.SetFConnection(Value: TOraSession);
+begin
+ if FConnection <> Value then FConnection := Value;
+ if FConnection <> nil then FConnection.FreeNotification(Self);
+end;
+
+procedure TUCODACConn.Notification(AComponent: TComponent;
+ Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ begin
+ FConnection := nil;
+ end;
+ inherited Notification(AComponent, Operation);
+end;
+
+function TUCODACConn.UCFindTable(const TableName: String): Boolean;
+var
+ TempList : TStringList;
+begin
+ try
+ TempList := TStringList.Create;
+ FConnection.GetTableNames(TempList);
+ TempList.Text := UpperCase(TempList.Text);
+ Result := TempList.IndexOf(UpperCase(TableName)) > -1;
+ finally
+ FreeAndNil(TempList);
+ end;
+end;
+
+function TUCODACConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCODACConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then Result := FConnection.Name
+ else begin
+ Result := FConnection.Owner.Name+'.'+FConnection.Name;
+ end;
+ end else Result := '';
+end;
+
+function TUCODACConn.GetTransObjectName: String;
+begin
+ Result := '';
+end;
+
+procedure TUCODACConn.UCExecSQL(FSQL: String);
+Var Query : TOraSql;
+begin
+ Try
+ Query := TOraSql.create(self);
+ With Query as TOraSql do
+ Begin
+ Connecton := FConnection;
+ Sql.Add( fSql );
+ Execute;
+ Connecton.Commit;
+ End;
+ Finally
+ FreeAndNil( Query );
+ End;
+end;
+
+function TUCODACConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TOraQuery.Create(nil);
+ with Result as TOraQuery do
+ begin
+ Session := FConnection;
+ SQL.Clear;
+ Sql.Add(FSQL);
+ Open;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConnReg.pas b/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConnReg.pas
new file mode 100644
index 0000000..3ef86c9
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCODACConn/UCODACConnReg.pas
@@ -0,0 +1,17 @@
+unit UCODACConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCODACConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCODACConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj
new file mode 100644
index 0000000..652f77c
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckODACConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.dpk b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.dpk
new file mode 100644
index 0000000..4ea5346
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.dpk
@@ -0,0 +1,35 @@
+package pckODACConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl;
+
+contains
+ UCODACConnReg in 'UCODACConnReg.pas',
+ UCODACConn in 'UCODACConn.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.res b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.res
new file mode 100644
index 0000000..3424a68
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCODACConn/pckODACConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConn.pas b/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConn.pas
new file mode 100644
index 0000000..240e1ea
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConn.pas
@@ -0,0 +1,146 @@
+unit UCUIBConn;
+
+interface
+
+uses
+ Classes,
+ DB,
+ jvuib,
+ jvuibdataset,
+ jvuibmetadata,
+ UCDataConnector;
+
+type
+ TUCUIBConn = class(TUCDataConnector)
+ private
+ FConnection: TJvUIBDataBase;
+ FTransaction: TJvUIBTransaction;
+ procedure SetConnection(const Value: TJvUIBDataBase);
+ procedure SetTransaction(const Value: TJvUIBTransaction);
+ protected
+ procedure Notification(AComponent: TComponent; Operation: TOperation); override;
+ public
+ procedure UCExecSQL(FSQL: String); override;
+ function UCGetSQLDataset(FSQL: String): TDataset; override;
+ function UCFindTable(const Tablename: String): Boolean; override;
+ function UCFindDataConnection: Boolean; override;
+ function GetDBObjectName: String; override;
+ function GetTransObjectName: String; override;
+ published
+ property Connection: TJvUIBDataBase read FConnection write SetConnection;
+ property Transaction: TJvUIBTransaction read FTransaction write SetTransaction;
+ end;
+
+implementation
+
+uses
+ SysUtils;
+
+{ TUCUIBConn }
+
+function TUCUIBConn.GetDBObjectName: String;
+begin
+ if Assigned(FConnection) then
+ begin
+ if Owner = FConnection.Owner then
+ Result := FConnection.Name
+ else
+ begin
+ Result := FConnection.Owner.Name + '.' + FConnection.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+function TUCUIBConn.GetTransObjectName: String;
+begin
+ if Assigned(FTransaction) then
+ begin
+ if Owner = FTransaction.Owner then
+ Result := FTransaction.Name
+ else
+ begin
+ Result := FTransaction.Owner.Name + '.' + FTransaction.Name;
+ end;
+ end
+ else
+ Result := '';
+end;
+
+procedure TUCUIBConn.Notification(AComponent: TComponent; Operation: TOperation);
+begin
+ if (Operation = opRemove) and (AComponent = FConnection) then
+ FConnection := nil;
+ if (Operation = opRemove) and (AComponent = FTransaction) then
+ FTransaction := nil;
+ inherited Notification(AComponent, Operation);
+end;
+
+procedure TUCUIBConn.SetConnection(const Value: TJvUIBDataBase);
+begin
+ if FConnection <> Value then
+ FConnection := Value;
+ if FConnection <> nil then
+ FConnection.FreeNotification(Self);
+end;
+
+procedure TUCUIBConn.SetTransaction(const Value: TJvUIBTransaction);
+begin
+ FTransaction := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUCUIBConn.UCExecSQL(FSQL: String);
+var
+ Query: TJvUIBQuery;
+begin
+ try
+ Query := TJvUIBQuery.Create(nil);
+ Query.DataBase := FConnection;
+ Query.Transaction := FTransaction;
+ Query.SQL.Text := FSQL;
+ FTransaction.StartTransaction;
+ Query.ExecSQL;
+ FTransaction.Commit;
+ finally
+ SysUtils.FreeAndNil(Query);
+ end;
+end;
+
+function TUCUIBConn.UCFindDataConnection: Boolean;
+begin
+ Result := Assigned(FConnection) and (FConnection.Connected);
+end;
+
+function TUCUIBConn.UCFindTable(const Tablename: String): Boolean;
+var
+ MetaData: TMetaDataBase;
+ Table: TMetaTable;
+begin
+ Result := False;
+ MetaData := TMetaDataBase(FConnection.GetMetadata(True));
+ Table := MetaData.FindTableName(Tablename);
+ if Assigned(Table) then
+ Result := True;
+end;
+
+function TUCUIBConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ try
+ Result := TJvUIBDataSet.Create(nil);
+ with (Result as TJvUIBDataSet) do
+ begin
+ DataBase := FConnection;
+ Transaction := FTransaction;
+ SQL.Text := FSQL;
+ Open;
+ end;
+ except
+ SysUtils.FreeAndNil(Result);
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas b/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas
new file mode 100644
index 0000000..c706578
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCUIBConn/UCUIBConnReg.pas
@@ -0,0 +1,21 @@
+unit UCUIBConnReg;
+
+interface
+
+uses
+ Classes;
+
+procedure Register;
+
+implementation
+
+uses
+ UCUIBConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCUIBConn]);
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj
new file mode 100644
index 0000000..47c867d
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.bdsproj
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUCUIBConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control UIB Connector
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
+ TeeChart Components
+ JVCL BDE Components
+
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk
new file mode 100644
index 0000000..2d94322
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.dpk
@@ -0,0 +1,43 @@
+package pckUCUIBConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control UIB Connector'}
+{$IMPLICITBUILD ON}
+
+requires
+ rtl,
+ vcl,
+ vclactnband,
+ dbrtl,
+ vcldb,
+ pckUCDataConnector,
+ JvCoreD10R,
+ JvUIBD10R;
+
+contains
+ UCUIBConn in 'UCUIBConn.pas',
+ UCUIBConnReg in 'UCUIBConnReg.pas';
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCUIBConn/pckUCUIBConn.res differ
diff --git a/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConn.pas b/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConn.pas
new file mode 100644
index 0000000..a8f26c0
--- /dev/null
+++ b/official/2.31RC1/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
+ FConnection.Commit;
+ Free;
+ end;
+end;
+
+function TUCZEOSConn.UCGetSQLDataset(FSQL: String): TDataset;
+begin
+ Result := TZQuery.Create(nil);
+ with Result as TZQuery do
+ begin
+ Connection := FConnection;
+ SQL.Text := FSQL;
+ Open;
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas b/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas
new file mode 100644
index 0000000..00a0d31
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCZeosConn/UCZEOSConnReg.pas
@@ -0,0 +1,17 @@
+unit UCZEOSConnReg;
+
+interface
+
+uses Classes;
+
+procedure Register;
+
+implementation
+
+uses UCZEOSConn;
+
+procedure Register;
+begin
+ RegisterComponents('UC Connectors', [TUCZEOSConn]);
+end;
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj
new file mode 100644
index 0000000..8dae755
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckZeosConn.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control Zeos Connector
+
+
+
+ C:\WINDOWS\Temp
+
+
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+ C:\Arquivos de programas\Borland\Delphi7\Bin\
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk
new file mode 100644
index 0000000..0f15e5d
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dpk
@@ -0,0 +1,36 @@
+package pckZeosConn;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control Zeos Connector'}
+{$IMPLICITBUILD OFF}
+
+requires
+ ZComponentDesign,
+ pckUCDataConnector;
+
+contains
+ UCZEOSConn in 'UCZEOSConn.pas',
+ UCZEOSConnReg in 'UCZEOSConnReg.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj
new file mode 100644
index 0000000..e87a3c5
--- /dev/null
+++ b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.dproj
@@ -0,0 +1,51 @@
+
+
+
+ {874a4671-4e5b-4e1c-a73c-fddb167ca5d2}
+ pckZeosConn.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckZeosConn.bpl
+
+
+ 7.0
+ False
+ False
+ 0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ RELEASE
+
+
+ 7.0
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ C:\WINDOWS\Temp
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+ ;C:\Arquivos de programas\Borland\Componentes\TeeChart.Pro.v7.06\Sources\Compiled\Delphi7\Lib
+
+
+ Delphi.Personality
+ Package
+
+FalseTrueFalseUser Control Zeos ConnectorFalseFalseFalseC:\Arquivos de programas\Borland\Delphi7\Bin\TrueFalse1000FalseFalseFalseFalseFalse104612521.0.0.01.0.0.0pckZeosConn.dpk
+
+
+
+
+ MainSource
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.res b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.res
new file mode 100644
index 0000000..a3a102a
Binary files /dev/null and b/official/2.31RC1/Packages/Connectors/UCZeosConn/pckZeosConn.res differ
diff --git a/official/2.31RC1/Packages/D2009.groupproj b/official/2.31RC1/Packages/D2009.groupproj
new file mode 100644
index 0000000..801c9f8
--- /dev/null
+++ b/official/2.31RC1/Packages/D2009.groupproj
@@ -0,0 +1,74 @@
+
+
+ {1c592c69-53bd-49f1-a789-a4ac64f25b09}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Default.Personality.12
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/official/2.31RC1/Packages/ModelSupport_pckMD5/default.txaPackage b/official/2.31RC1/Packages/ModelSupport_pckMD5/default.txaPackage
new file mode 100644
index 0000000..e69de29
diff --git a/official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig b/official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig
new file mode 100644
index 0000000..c8f2834
--- /dev/null
+++ b/official/2.31RC1/Packages/ModelSupport_pckMD5/pckMD5.prjconfig
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage b/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/default.txaPackage
new file mode 100644
index 0000000..e69de29
diff --git a/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig b/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig
new file mode 100644
index 0000000..c8f2834
--- /dev/null
+++ b/official/2.31RC1/Packages/ModelSupport_pckUCDataConnector/pckUCDataConnector.prjconfig
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage b/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/default.txaPackage
new file mode 100644
index 0000000..e69de29
diff --git a/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig b/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig
new file mode 100644
index 0000000..c8f2834
--- /dev/null
+++ b/official/2.31RC1/Packages/ModelSupport_pckUserControl_RT/pckUserControl_RT.prjconfig
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/Packages/pckMD5.bdsproj b/official/2.31RC1/Packages/pckMD5.bdsproj
new file mode 100644
index 0000000..c4ecafc
--- /dev/null
+++ b/official/2.31RC1/Packages/pckMD5.bdsproj
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckMD5.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ MD5SUM Package
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+ TeeChart Components
+ JVCL BDE Components
+
+
+ True
+
diff --git a/official/2.31RC1/Packages/pckMD5.dpk b/official/2.31RC1/Packages/pckMD5.dpk
new file mode 100644
index 0000000..0c8a0dc
--- /dev/null
+++ b/official/2.31RC1/Packages/pckMD5.dpk
@@ -0,0 +1,35 @@
+package pckMD5;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'MD5SUM Package'}
+{$IMPLICITBUILD OFF}
+{%TogetherDiagram 'ModelSupport_pckMD5\default.txaPackage'}
+
+requires
+ rtl;
+
+contains
+ md5 in '..\Source\md5.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/pckMD5.dproj b/official/2.31RC1/Packages/pckMD5.dproj
new file mode 100644
index 0000000..93ff37f
--- /dev/null
+++ b/official/2.31RC1/Packages/pckMD5.dproj
@@ -0,0 +1,115 @@
+
+
+ {d2274d98-f9f6-4f51-9617-6c46e56a95d2}
+ pckMD5.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckMD5.bpl
+ 12.0
+ Debug
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ 00400000
+ false
+ MD5SUM Package
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\pckMD5.bpl
+ true
+ true
+ 1
+ true
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE;$(DCC_Define)
+
+
+ 7.0
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ TeeChart Components
+ JVCL BDE Components
+
+
+ pckMD5.dpk
+
+
+
+ 12
+
+
+
+ MainSource
+
+
+
+
+
+
+
+ Base
+
+
+ Cfg_2
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
diff --git a/official/2.31RC1/Packages/pckMD5.res b/official/2.31RC1/Packages/pckMD5.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/pckMD5.res differ
diff --git a/official/2.31RC1/Packages/pckUCDataConnector.bdsproj b/official/2.31RC1/Packages/pckUCDataConnector.bdsproj
new file mode 100644
index 0000000..f54a1f5
--- /dev/null
+++ b/official/2.31RC1/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.31RC1/Packages/pckUCDataConnector.dpk b/official/2.31RC1/Packages/pckUCDataConnector.dpk
new file mode 100644
index 0000000..ea7b6c9
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUCDataConnector.dpk
@@ -0,0 +1,37 @@
+package pckUCDataConnector;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control DataConn'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+{%TogetherDiagram 'ModelSupport_pckUCDataConnector\default.txaPackage'}
+
+requires
+ rtl,
+ dbrtl;
+
+contains
+ UCDataConnector in '..\Source\UCDataConnector.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/pckUCDataConnector.dproj b/official/2.31RC1/Packages/pckUCDataConnector.dproj
new file mode 100644
index 0000000..ad8a57c
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUCDataConnector.dproj
@@ -0,0 +1,117 @@
+
+
+ {32671bc6-e575-4ad0-9f27-6e30a6d8f220}
+ pckUCDataConnector.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUCDataConnector.bpl
+ 12.0
+ Debug
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\pckUCDataConnector.bpl
+ 00400000
+ User Control DataConn
+ true
+ false
+ true
+ true
+ 1
+ true
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE;$(DCC_Define)
+
+
+ 7.0
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ TeeChart Components
+ JVCL BDE Components
+
+
+ pckUCDataConnector.dpk
+
+
+
+ 12
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+ Base
+
+
+ Cfg_2
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
diff --git a/official/2.31RC1/Packages/pckUCDataConnector.res b/official/2.31RC1/Packages/pckUCDataConnector.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/pckUCDataConnector.res differ
diff --git a/official/2.31RC1/Packages/pckUCGlobal.bdsproj b/official/2.31RC1/Packages/pckUCGlobal.bdsproj
new file mode 100644
index 0000000..561c496
--- /dev/null
+++ b/official/2.31RC1/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.31RC1/Packages/pckUCGlobal.dpk b/official/2.31RC1/Packages/pckUCGlobal.dpk
new file mode 100644
index 0000000..80bd32b
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUCGlobal.dpk
@@ -0,0 +1,40 @@
+package pckUCGlobal;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ vcl,
+ dbrtl,
+ vclactnband,
+ dclindy,
+ indy,
+ vcldb,
+ pckMD5,
+ pckUCDataConnector,
+ VclSmp,
+ pckUserControl_RT;
+
+end.
diff --git a/official/2.31RC1/Packages/pckUCGlobal.res b/official/2.31RC1/Packages/pckUCGlobal.res
new file mode 100644
index 0000000..3424a68
Binary files /dev/null and b/official/2.31RC1/Packages/pckUCGlobal.res differ
diff --git a/official/2.31RC1/Packages/pckUserControl_DT.bdsproj b/official/2.31RC1/Packages/pckUserControl_DT.bdsproj
new file mode 100644
index 0000000..b91ca3f
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUserControl_DT.bdsproj
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUserControl_DT.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control Package 2
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 2
+ 3
+ 2
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+ UserControl
+ UserControl 2.30 RC2
+ 2.3.2.0
+ pkUserControl_DT
+
+
+
+
+ 2.3.2.0
+ www.usercontrol.net
+
+
+
+
+ False
+
diff --git a/official/2.31RC1/Packages/pckUserControl_DT.dpk b/official/2.31RC1/Packages/pckUserControl_DT.dpk
new file mode 100644
index 0000000..14f1c8b
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUserControl_DT.dpk
@@ -0,0 +1,54 @@
+package pckUserControl_DT;
+
+{$I '..\Source\UserControl.inc'}
+{$R *.res}
+{$R '..\Source\UCReg.dcr'}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control Package 2'}
+{$DESIGNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ designide,
+ inet,
+ dbrtl,
+ vcldb,
+ VclSmp,
+ pckMD5,
+ pckUCDataConnector,
+ pckUSerControl_RT,
+ {$IFDEF DELPHI12}
+ vclimg
+ {$ELSE}
+ vcljpg
+ {$ENDIF}
+;
+
+contains
+ UCReg in '..\Source\UCReg.pas',
+ UCObjSel_U in '..\Source\UCObjSel_U.pas',
+ UCAbout in '..\Source\UCAbout.pas',
+ UCIdle in '..\Source\UCIdle.pas',
+ UCEditorForm_U in '..\Source\UCEditorForm_U.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/pckUserControl_DT.dproj b/official/2.31RC1/Packages/pckUserControl_DT.dproj
new file mode 100644
index 0000000..c115bd4
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUserControl_DT.dproj
@@ -0,0 +1,125 @@
+
+
+ {a30f53db-e475-4ad9-a852-f9ebf338bf98}
+ pckUserControl_DT.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Users\Public\Documents\RAD Studio\5.0\Bpl\pckUserControl_DT.bpl
+ 12.0
+ Debug
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ 00400000
+ true
+ User Control Package 2
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\pckUserControl_DT.bpl
+ true
+ true
+ 1
+ true
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE;$(DCC_Define)
+
+
+ 7.0
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ WL Decision Cube Components
+
+
+ pckUserControl_DT.dpk
+
+
+
+ 12
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Base
+
+
+ Cfg_2
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
diff --git a/official/2.31RC1/Packages/pckUserControl_DT.res b/official/2.31RC1/Packages/pckUserControl_DT.res
new file mode 100644
index 0000000..502e9bf
Binary files /dev/null and b/official/2.31RC1/Packages/pckUserControl_DT.res differ
diff --git a/official/2.31RC1/Packages/pckUserControl_RT.bdsproj b/official/2.31RC1/Packages/pckUserControl_RT.bdsproj
new file mode 100644
index 0000000..84dc8ef
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUserControl_RT.bdsproj
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckUserControl_RT.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ User Control Package 2
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+ WL Decision Cube Components
+
+
+
+
+ True
+
diff --git a/official/2.31RC1/Packages/pckUserControl_RT.dpk b/official/2.31RC1/Packages/pckUserControl_RT.dpk
new file mode 100644
index 0000000..9c71e00
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUserControl_RT.dpk
@@ -0,0 +1,65 @@
+package pckUserControl_RT;
+
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'User Control Package 2'}
+{$RUNONLY}
+{$IMPLICITBUILD OFF}
+
+requires
+ designide,
+ inet,
+ dbrtl,
+ vcldb,
+ VclSmp,
+ pckMD5,
+ pckUCDataConnector,
+ vcl,
+ rtl,
+ vclx;
+
+contains
+ TrocaSenha_U in '..\Source\TrocaSenha_U.pas',
+ UCBase in '..\Source\UCBase.pas',
+ SenhaForm_U in '..\Source\SenhaForm_U.pas',
+ EnvMsgForm_U in '..\Source\EnvMsgForm_U.pas',
+ MsgRecForm_U in '..\Source\MsgRecForm_U.pas',
+ MsgsForm_U in '..\Source\MsgsForm_U.pas',
+ UCDataInfo in '..\Source\UCDataInfo.pas',
+ UCMessages in '..\Source\UCMessages.pas',
+ UserPermis_U in '..\Source\UserPermis_U.pas',
+ UCSettings in '..\Source\UCSettings.pas',
+ LoginWindow_U in '..\Source\LoginWindow_U.pas',
+ UcConsts_Language in '..\Source\UcConsts_Language.pas',
+ pUCGeral in '..\Source\pUCGeral.pas',
+ pUCFrame_User in '..\Source\pUCFrame_User.pas',
+ pUCFrame_Profile in '..\Source\pUCFrame_Profile.pas',
+ pUCFrame_Log in '..\Source\pUCFrame_Log.pas' {UCFrame_Log},
+ pUcFrame_UserLogged in '..\Source\pUcFrame_UserLogged.pas' {UCFrame_UsersLogged},
+ UCMail in '..\Source\UCMail.pas',
+ UCEMailForm_U in '..\Source\UCEMailForm_U.pas',
+ UCALSMTPClient in '..\Source\UCALSMTPClient.pas',
+ IncUser_U in '..\Source\IncUser_U.pas',
+ IncPerfil_U in '..\Source\IncPerfil_U.pas';
+
+end.
diff --git a/official/2.31RC1/Packages/pckUserControl_RT.dproj b/official/2.31RC1/Packages/pckUserControl_RT.dproj
new file mode 100644
index 0000000..06cd058
--- /dev/null
+++ b/official/2.31RC1/Packages/pckUserControl_RT.dproj
@@ -0,0 +1,153 @@
+
+
+ {0e9c6372-292f-47d7-b235-70ab25776f3b}
+ pckUserControl_RT.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckUserControl_RT.bpl
+ 12.0
+ Debug
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\pckUserControl_RT.bpl
+ 00400000
+ User Control Package 2
+ true
+ false
+ true
+ true
+ 1
+ true
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE;$(DCC_Define)
+ True
+ True
+ True
+
+
+ 7.0
+ True
+ True
+ True
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ WL Decision Cube Components
+
+
+ pckUserControl_RT.dpk
+
+
+
+ 12
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Base
+
+
+ Cfg_2
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
diff --git a/official/2.31RC1/Packages/pckUserControl_RT.res b/official/2.31RC1/Packages/pckUserControl_RT.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/Packages/pckUserControl_RT.res differ
diff --git a/official/2.31RC1/Source/Dcr/UCADOConn.bmp b/official/2.31RC1/Source/Dcr/UCADOConn.bmp
new file mode 100644
index 0000000..6e2460a
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCADOConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCASTAConn.bmp b/official/2.31RC1/Source/Dcr/UCASTAConn.bmp
new file mode 100644
index 0000000..4ab2924
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCASTAConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCAppMessage.bmp b/official/2.31RC1/Source/Dcr/UCAppMessage.bmp
new file mode 100644
index 0000000..56dc64e
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCAppMessage.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCBDEConn.bmp b/official/2.31RC1/Source/Dcr/UCBDEConn.bmp
new file mode 100644
index 0000000..cf17266
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCBDEConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCControls.bmp b/official/2.31RC1/Source/Dcr/UCControls.bmp
new file mode 100644
index 0000000..b760f3a
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCControls.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCDBISAMConn.bmp b/official/2.31RC1/Source/Dcr/UCDBISAMConn.bmp
new file mode 100644
index 0000000..c0244da
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCDBISAMConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCDBXConn.bmp b/official/2.31RC1/Source/Dcr/UCDBXConn.bmp
new file mode 100644
index 0000000..1470e9a
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCDBXConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCFIBConn.bmp b/official/2.31RC1/Source/Dcr/UCFIBConn.bmp
new file mode 100644
index 0000000..dc9869b
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCFIBConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCIBOConn.bmp b/official/2.31RC1/Source/Dcr/UCIBOConn.bmp
new file mode 100644
index 0000000..8f5965a
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCIBOConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCIBXConn.bmp b/official/2.31RC1/Source/Dcr/UCIBXConn.bmp
new file mode 100644
index 0000000..29ab05f
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCIBXConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCIdle.bmp b/official/2.31RC1/Source/Dcr/UCIdle.bmp
new file mode 100644
index 0000000..124cb68
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCIdle.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCMDOConn.bmp b/official/2.31RC1/Source/Dcr/UCMDOConn.bmp
new file mode 100644
index 0000000..93d8a5e
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCMDOConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCMail.bmp b/official/2.31RC1/Source/Dcr/UCMail.bmp
new file mode 100644
index 0000000..0cffa95
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCMail.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCMain.bmp b/official/2.31RC1/Source/Dcr/UCMain.bmp
new file mode 100644
index 0000000..a910400
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCMain.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCMidasConn.bmp b/official/2.31RC1/Source/Dcr/UCMidasConn.bmp
new file mode 100644
index 0000000..749299a
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCMidasConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCMyDACConn.bmp b/official/2.31RC1/Source/Dcr/UCMyDACConn.bmp
new file mode 100644
index 0000000..6ec4ef5
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCMyDACConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCMySQLDACConn.bmp b/official/2.31RC1/Source/Dcr/UCMySQLDACConn.bmp
new file mode 100644
index 0000000..fe78af3
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCMySQLDACConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCReg.dcr b/official/2.31RC1/Source/Dcr/UCReg.dcr
new file mode 100644
index 0000000..137f24a
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCReg.dcr differ
diff --git a/official/2.31RC1/Source/Dcr/UCReg.rc b/official/2.31RC1/Source/Dcr/UCReg.rc
new file mode 100644
index 0000000..f42f613
--- /dev/null
+++ b/official/2.31RC1/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"
+TUCODACConn BITMAP "UODACConn.bmp"
\ No newline at end of file
diff --git a/official/2.31RC1/Source/Dcr/UCSettings.bmp b/official/2.31RC1/Source/Dcr/UCSettings.bmp
new file mode 100644
index 0000000..6017c40
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCSettings.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCXp.bmp b/official/2.31RC1/Source/Dcr/UCXp.bmp
new file mode 100644
index 0000000..a7de19c
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCXp.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UCZEOSConn.bmp b/official/2.31RC1/Source/Dcr/UCZEOSConn.bmp
new file mode 100644
index 0000000..7452700
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UCZEOSConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/UODACConn.bmp b/official/2.31RC1/Source/Dcr/UODACConn.bmp
new file mode 100644
index 0000000..4ed6161
Binary files /dev/null and b/official/2.31RC1/Source/Dcr/UODACConn.bmp differ
diff --git a/official/2.31RC1/Source/Dcr/make.bat b/official/2.31RC1/Source/Dcr/make.bat
new file mode 100644
index 0000000..47515b0
--- /dev/null
+++ b/official/2.31RC1/Source/Dcr/make.bat
@@ -0,0 +1 @@
+brc32 -foUCReg.dcr -r -t UCReg.rc
\ No newline at end of file
diff --git a/official/2.31RC1/Source/EnvMsgForm_U.dfm b/official/2.31RC1/Source/EnvMsgForm_U.dfm
new file mode 100644
index 0000000..3fd2c8f
--- /dev/null
+++ b/official/2.31RC1/Source/EnvMsgForm_U.dfm
@@ -0,0 +1,343 @@
+object EnvMsgForm: TEnvMsgForm
+ Left = 304
+ Top = 204
+ BorderStyle = bsDialog
+ Caption = 'Mensagem'
+ ClientHeight = 364
+ ClientWidth = 377
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 377
+ Height = 35
+ Align = alTop
+ BevelOuter = bvLowered
+ Color = clWhite
+ TabOrder = 0
+ object lbTitulo: TLabel
+ Left = 48
+ Top = 10
+ Width = 205
+ Height = 18
+ Caption = 'Enviar Nova Mensagem'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300694731006947
+ 3100694731006947310069473100694731006947310069473100694731006947
+ 3100694731006947310069473100694731006947310069473100694731006947
+ 310069473100694731006947310069473100694731006947310069473100FFFF
+ FF00FFFFFF00C7B2A300DBC9BF00B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A2930069473100FFFFFF00FFFFFF00C7B2A300B7A29300DFD0
+ C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0
+ C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0
+ C700DFD0C700DFD0C700DFD0C700DFD0C700DFD0C700CE99970069473100FFFF
+ FF00FFFFFF00C7B2A300DBC9BF00B7A29300E4D7CF00E4D7CF00E4D7CF00E4D7
+ CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7
+ CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7
+ CF00B7A29300B7A2930069473100FFFFFF00FFFFFF00C7B2A300DECEC500DECE
+ C500B7A29300E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DE
+ D700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DE
+ D700E9DED700E9DED700E9DED700B7A29300DECEC500B7A2930069473100FFFF
+ FF00FFFFFF00C7B2A300E2D4CC00E2D4CC00E2D4CC00B7A29300EDE4DF00EDE4
+ DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4
+ DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A29300E2D4
+ CC00E2D4CC00B7A2930069473100FFFFFF00FFFFFF00C7B2A300E6D9D200E6D9
+ D200E6D9D200E6D9D200B7A29300F0E9E500F0E9E500F0E9E500F0E9E500F0E9
+ E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9
+ E500F0E9E500B7A29300E6D9D200E6D9D200E6D9D200B7A2930069473100FFFF
+ FF00FFFFFF00C7B2A300EADFD900EADFD900EADFD900EADFD900EADFD900B7A2
+ 9300F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EF
+ EC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00B7A29300EADFD900EADFD900EADF
+ D900EADFD900B7A2930069473100FFFFFF00FFFFFF00C7B2A300EDE4DF00EDE4
+ DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A29300F8F4F200F8F4F200F8F4
+ F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200B7A2
+ 9300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A2930069473100FFFF
+ FF00FFFFFF00C7B2A300F0E8E400F0E8E400F0E8E400F0E8E400F0E8E400F0E8
+ E400B7A29300B7A29300FCFAF900FCFAF900FCFAF900FCFAF900FCFAF900FCFA
+ F900FCFAF900FCFAF900B7A29300B7A29300F0E8E400F0E8E400F0E8E400F0E8
+ E400F0E8E400B7A2930069473100FFFFFF00FFFFFF00C7B2A300F3EDE900F3ED
+ E900F3EDE900F3EDE900F3EDE900B7A29300DDC5C200DDC5C200B7A29300DDC5
+ C200FFFFFF00FFFFFF00FFFFFF00FFFFFF00DDC5C200B7A29300DDC5C200DDC5
+ C200B7A29300F3EDE900F3EDE900F3EDE900F3EDE900B7A2930069473100FFFF
+ FF00FFFFFF00C7B2A300F6F1EF00F6F1EF00F6F1EF00F6F1EF00B7A29300DDC5
+ C200FBF9F700F7F4F100DDC5C200C7B2A300B7A29300B7A29300B7A29300B7A2
+ 9300C7B2A300DDC5C200DCCBC100DBC9BF00DDC5C200B7A29300F6F1EF00F6F1
+ EF00F6F1EF00B7A2930069473100FFFFFF00FFFFFF00C7B2A300F9F6F400F9F6
+ F400F9F6F400B7A29300DDC5C200FFFFFF00FEFDFC00FBF9F700F7F4F100EEE0
+ E000EEE0E000EEE0E000EEE0E000EEE0E000EEE0E000E4D7CF00E1D2C900DECD
+ C400DBC9BF00DDC5C200B7A29300F9F6F400F9F6F400B7A2930069473100FFFF
+ FF00FFFFFF00C7B2A300FCFBFA00FCFBFA00B7A29300C8B3A400FFFFFF00FFFF
+ FF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300DECDC400DBC9BF00D2C0B300B7A2
+ 9300FCFBFA00B7A2930069473100FFFFFF00FFFFFF00C7B2A300FFFFFF00B8A3
+ 9400DDC5C200C8B3A400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFB
+ F900F9F6F400F6F2EF00F3EDE900F0E8E400EDE4DF00EAE0D900E7DBD400E4D7
+ CF00E1D2C900DECDC400D2BFB200DDC5C200B7A29300FFFFFF0069473100FFFF
+ FF00FFFFFF00C7B2A300B7A29300DDC5C20027A5E900C8B3A400FFFFFF00FFFF
+ FF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300E4D7CF00E1D2C900D1BEB10027A5
+ E900DDC5C200B7A2930069473100FFFFFF00FFFFFF00C7B2A300DDC5C20027A5
+ E90027A5E900C8B3A400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FCFBF900F9F6F400F6F2EF00F3EDE900F0E8E400EDE4DF00EAE0
+ D900E7DBD400E4D7CF00D1BEB10027A5E90027A5E900B7A2930069473100FFFF
+ FF00FFFFFF00FFFFFF00C7B2A300DDC5C20047B6FF00C8B3A400FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFBF900F9F6
+ F400F6F2EF00F3EDE900F0E8E400EDE4DF00EAE0D900E7DBD400D0BDB00047B6
+ FF00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2
+ A300DDC5C200C8B3A400C8B3A400C8B3A400C8B3A400C8B3A400C8B3A400C9B4
+ A500C9B5A600CAB6A700CBB6A800CBB7A900CCB8AA00CCB9AB00CDB9AB00CEBA
+ AC00CEBBAD00CFBBAE00CFBCAF00BCA7980069473100FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DDC5C200DBF3FA00DBF3
+ FA00DBF3FA00D4F0FA00C7EBFB00B9E5FB00ACDFFB009ED9FC0091D4FC0082CE
+ FD0073C8FD0064C2FE0055BCFE0047B6FF0047B6FF0047B6FF00BBA697007353
+ 3E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00C7B2A300EEE0E000DBF3FA00DBF3FA00DBF3FA00D4F0FA00C7EB
+ FB00B9E5FB00B2E2FB00A5DCFC0097D6FC0089D1FC007BCBFD006CC5FD005DBF
+ FE004EB9FE00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300EEE0
+ E000DBF3FA00DBF3FA00DBF3FA00DBF3FA00CDEDFA00C0E8FB00B2E2FB00A5DC
+ FC0097D6FC0089D1FC007BCBFD006CC5FD00B7A2930069473100FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00C7B2A300EEE0E000DBF3FA00DBF3FA00DBF3
+ FA00DBF3FA00CDEDFA00C0E8FB00B2E2FB00A5DCFC0097D6FC0089D1FC00B7A2
+ 930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300EEE0E000DBF3FA00DBF3FA00DBF3FA00DBF3FA00CDEDFA00C0E8
+ FB00B2E2FB00A5DCFC00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300EEE0E000EEE0
+ E000EEE0E000EEE0E000EEE0E000EEE0E000DDC5C200B7A2930069473100FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00C7B2A300C7B2A300C7B2A300C7B2A300C7B2A300C7B2
+ A300C7B2A300C7B2A300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object gbPara: TGroupBox
+ Left = 8
+ Top = 40
+ Width = 361
+ Height = 81
+ Caption = 'Para'
+ TabOrder = 1
+ object rbUsuario: TRadioButton
+ Left = 40
+ Top = 24
+ Width = 80
+ Height = 17
+ Caption = 'Usu'#225'rio :'
+ Checked = True
+ TabOrder = 0
+ TabStop = True
+ OnClick = rbUsuarioClick
+ end
+ object rbTodos: TRadioButton
+ Left = 40
+ Top = 56
+ Width = 113
+ Height = 17
+ Caption = 'Todos'
+ TabOrder = 1
+ OnClick = rbUsuarioClick
+ end
+ object dbUsuario: TDBLookupComboBox
+ Left = 120
+ Top = 18
+ Width = 217
+ Height = 21
+ BevelEdges = []
+ BevelInner = bvNone
+ BevelOuter = bvNone
+ KeyField = 'IdUser'
+ ListField = 'Nome'
+ ListSource = DataSource1
+ TabOrder = 2
+ OnCloseUp = dbUsuarioCloseUp
+ end
+ end
+ object gbMensagem: TGroupBox
+ Left = 8
+ Top = 128
+ Width = 361
+ Height = 201
+ Caption = 'Mensagem'
+ TabOrder = 2
+ object lbAssunto: TLabel
+ Left = 24
+ Top = 24
+ Width = 38
+ Height = 13
+ Caption = 'Assunto'
+ end
+ object lbMensagem: TLabel
+ Left = 24
+ Top = 72
+ Width = 52
+ Height = 13
+ Caption = 'Mensagem'
+ end
+ object EditAssunto: TEdit
+ Left = 24
+ Top = 40
+ Width = 313
+ Height = 21
+ MaxLength = 50
+ TabOrder = 0
+ end
+ object MemoMsg: TMemo
+ Left = 24
+ Top = 88
+ Width = 313
+ Height = 97
+ MaxLength = 255
+ ScrollBars = ssBoth
+ TabOrder = 1
+ end
+ end
+ object btEnvia: TBitBtn
+ Left = 93
+ Top = 336
+ Width = 79
+ Height = 25
+ Caption = '&Enviar'
+ TabOrder = 3
+ OnClick = btEnviaClick
+ Glyph.Data = {
+ 42040000424D4204000000000000420000002800000020000000100000000100
+ 1000030000000004000000000000000000000000000000000000007C0000E003
+ 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C45261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C94521F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C4526862645261F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C9452D65A94521F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C673286268626862645261F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7CD65AD65AD65AD65A94521F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C45268626C62A862E862645261F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C9452D65AF75ED65AD65A94521F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C47328626C62A252E252EC62A8822C62A1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7CB556D65AF75EB556B556F75ED65AF75E1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C4526C62A252E1F7C1F7C252EC62A45261F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C9452F75EB5561F7C1F7CB556F75E94521F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C252E1F7C1F7C1F7C1F7C252EC62A45261F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7CB5561F7C1F7C1F7C1F7CB556F75E94521F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252EC62AC62A1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556F75EF75E1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E8626
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E
+ 86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556
+ D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 252E86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ B556D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C252E1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7CB5561F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C}
+ NumGlyphs = 2
+ end
+ object btCancela: TBitBtn
+ Left = 205
+ Top = 336
+ Width = 79
+ Height = 25
+ Cancel = True
+ Caption = 'Cancelar'
+ TabOrder = 4
+ OnClick = btCancelaClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ object DataSource1: TDataSource
+ Left = 144
+ Top = 96
+ end
+end
diff --git a/official/2.31RC1/Source/EnvMsgForm_U.pas b/official/2.31RC1/Source/EnvMsgForm_U.pas
new file mode 100644
index 0000000..a915610
--- /dev/null
+++ b/official/2.31RC1/Source/EnvMsgForm_U.pas
@@ -0,0 +1,116 @@
+unit EnvMsgForm_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ DB,
+ DBCtrls,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TEnvMsgForm = class(TForm)
+ Panel1: TPanel;
+ lbTitulo: TLabel;
+ Image1: TImage;
+ gbPara: TGroupBox;
+ rbUsuario: TRadioButton;
+ rbTodos: TRadioButton;
+ dbUsuario: TDBLookupComboBox;
+ gbMensagem: TGroupBox;
+ lbAssunto: TLabel;
+ lbMensagem: TLabel;
+ EditAssunto: TEdit;
+ MemoMsg: TMemo;
+ btEnvia: TBitBtn;
+ btCancela: TBitBtn;
+ DataSource1: TDataSource;
+ procedure btCancelaClick(Sender: TObject);
+ procedure dbUsuarioCloseUp(Sender: TObject);
+ procedure rbUsuarioClick(Sender: TObject);
+ procedure btEnviaClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject); //added by fduenas
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ EnvMsgForm: TEnvMsgForm;
+
+implementation
+
+uses
+ MsgsForm_U,
+ UCMessages;
+
+{$R *.dfm}
+
+procedure TEnvMsgForm.btCancelaClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TEnvMsgForm.dbUsuarioCloseUp(Sender: TObject);
+begin
+ if dbUsuario.KeyValue <> null then
+ rbUsuario.Checked := True;
+end;
+
+procedure TEnvMsgForm.rbUsuarioClick(Sender: TObject);
+begin
+ if not rbUsuario.Checked then
+ dbUsuario.KeyValue := null;
+end;
+
+procedure TEnvMsgForm.btEnviaClick(Sender: TObject);
+begin
+ if rbUsuario.Checked then
+ TUCApplicationMessage(MsgsForm.Owner).SendAppMessage(MsgsForm.DSUsuarios.FieldByName('IdUser').AsInteger, EditAssunto.Text, MemoMsg.Text)
+ else
+ with MsgsForm.DSUsuarios do
+ begin
+ First;
+ while not EOF do
+ begin
+ TUCApplicationMessage(MsgsForm.Owner).SendAppMessage(FieldByName('IdUser').AsInteger, EditAssunto.Text, MemoMsg.Text);
+ Next;
+ end;
+ end;
+ Close;
+end;
+
+procedure TEnvMsgForm.FormCreate(Sender: TObject);
+begin
+ with TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages do
+ begin
+ Self.Caption := MsgSend_WindowCaption;
+ lbTitulo.Caption := MsgSend_Title;
+ gbpara.Caption := MsgSend_GroupTo;
+ rbUsuario.Caption := MsgSend_RadioUser;
+ rbTodos.Caption := MsgSend_RadioAll;
+ gbMensagem.Caption := MsgSend_GroupMessage;
+ lbAssunto.Caption := MsgSend_LabelSubject;
+ lbMensagem.Caption := MsgSend_LabelMessageText;
+ btCancela.Caption := MsgSend_BtCancel;
+ btEnvia.Caption := MsgSend_BtSend;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/IncPerfil_U.dfm b/official/2.31RC1/Source/IncPerfil_U.dfm
new file mode 100644
index 0000000..843b1a7
--- /dev/null
+++ b/official/2.31RC1/Source/IncPerfil_U.dfm
@@ -0,0 +1,307 @@
+object frmIncluirPerfil: TfrmIncluirPerfil
+ Left = 232
+ Top = 319
+ BorderStyle = bsDialog
+ Caption = 'Perfil de Usu'#225'rios'
+ ClientHeight = 132
+ ClientWidth = 434
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 434
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 1
+ object LbDescricao: TLabel
+ Left = 45
+ Top = 10
+ Width = 132
+ Height = 18
+ Caption = 'Adicionar Perfil'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00AB937F00755944007559440075594400755A4500755A4500755A4600775B
+ 4700775C4700785C4700785C4700795D48007A5D49007B5E49007C5F4A007C60
+ 4A007D604B007E614C007E614C00795B4500FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00AB937F00755D4C00795E4B007A5F4C007A5F
+ 4C007C624F007F6351008266530085695500886C59008B705B008B705B008E72
+ 5E009176610094786500987C67009B7E6A009D806D009F836E00A0836E009979
+ 63005E412D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007259
+ 47007F624D0080634F00836652008366520085695500896C58008C6F5A009073
+ 5E0093776200977B6600977B66009A7E69009F826D00A2867100A6897400A98C
+ 7800AC8F7A00B1937F00B7998200997962005D402C00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00A089790097827300826A5800826A5800826A5800826A
+ 5800826A5800826A5800826A5800826A5800826A5800826A5800826A5800826A
+ 5800826A5800826A5800826A5800826A5800826A5800826A5800B2947E009979
+ 62005E412D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAFA400F7EB
+ E500FEF7F200FFF7F300FFF3ED00FFF3ED00FFEEE500FFEADE00FEE4D600FDE0
+ CF00FEDDCB00FEDCC800FEDCC800FFD9C300FFD6BF00FFD4BB00FFD0B500FFCF
+ B300FEC7A800DAA88B00B79279009D7C65005F422E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00C4B5AB00E7DBD200FFF5F000FFF5F000FFF5EF00FFF5
+ EF00357821000060000000600000006000000060000000600000006000000060
+ 00000060000000600000FFD5BC00FFD2B700FECCAF00F6BF9E00C09D8600A07E
+ 660060432F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F3F0EE00BFAF
+ A400FFF6F200FFF6F200FFF5F000357821003A6D23003A6D2300347A20002F85
+ 1E002C8C1D002B8E1D002C8A1D0030821F00367721003C69240000600000FFD5
+ BC00FFD0B600FDC9AB00C29C880092735E0061453100FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEF9FA00FFFAF800FFF8F5003578
+ 21003A6D2300357821002E871E0028941C001A8E130013850E00249919002A90
+ 1C0030821F003773220000600000FFD6BF00FFD4BC00FFD1B600C4A089009574
+ 5F0063463200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEF9FA00FFFBF900FFF9F6006DAB6D0035782100327F1F002A901C001F99
+ 16000A7A080008770700189C1200249C1A002C8B1D00347A200000780000FFDC
+ C900FFD8C300FFD6BD00C6A08B009C7A640064483300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEF9FA00FFFCFB00FFFAF800B8D8
+ B8003578210030821F0027941A0010850D00218120006DAB6D00138D110022A2
+ 19002A8F1C0000600000FFE2D200FFE0CF00FFDDC900FFD9C300C9A38E00A581
+ 6A0066493500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEFBFD00FFFDFC00FFFBFA00FFFBFA006DAB6D003578210026911B00157D
+ 1300BAD7B900C6DEC600327F34002096170000600000FFE9DD00FFE6D800FFE4
+ D400FFE0CE00FFDCC900CDA59000AE887200684B3700FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFCFA00FFFC
+ FA00FFFBFA006DAB6D0035782100006890000068900000689000006890002361
+ 4C00FFEDE400FFECE100FFE9DD00FFE6D800FFE3D300FFDFCD00CEA89300B68E
+ 7700694D3800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEFBFD00FFFDFC00FFFCFB00FFFCFB00FFFCFB00FFFBFA00006890004293
+ D1004193D0003F90CE003C8CCA0000689000FFEFE600FFECE300FFEADE00FFE8
+ DB00FFE5D700FFE3D200D3AB9600BC927C006B4E3A00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD
+ FC00FFFCFB00007FB4004899D400499BD800499AD7004697D5004293D1003D8E
+ CB00007FB400FFEDE300FFEBDF00FFEADD00FFE8DB00FFE5D700D6AE9900C197
+ 80006D503C00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC00006890004EA0DD0051A2
+ DF005CA9DD004C9EDB004899D6004192D00000689000FFEFE500FFECE100FFEC
+ E000FFEBDF00FFE8DA00DBAF9A00C79C85006E513E00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD
+ FC00FFFDFC000068900055A7E2005CA9DD006DB9EB005CA9DD004B9DDA004596
+ D30000689000FFF2EA00FFEFE500FFEDE300FFECE100FFEADE00DCB49D00CCA0
+ 8A006F533F00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC0000689000427EA400427E
+ A4005CA9DD0055A7E3004D9FDC004798D50000689000FFF6F000FFF3EC00FFF1
+ E900FFEFE600FFEDE200DFB5A000D2A48E0071544000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD
+ FC00FFFDFC00007FB400427EA400427EA400427EA400427EA4004998D200427E
+ A400007FB400FFF7F400FFF6F100FFF4EE00FFF1EA00FFEEE500E1B9A200D6A8
+ 910072554200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFDFC0000689000427E
+ A400427EA400427EA400427EA40000689000FFFAF800FFF9F600FFF7F400FFF5
+ F000FFF3ED00FFF1E800E5B9A400DAAB940073574300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400FEFBFD00FFFDFC00FFFDFC00FFFD
+ FC00FFFDFC00FFFDFC00FFFDFC00007FB4000068900000689000007FB400FFFA
+ F800FFF9F600FFF7F400FFF6F100FFF4EE00FFF1EA00FFEEE500E1B9A200D6A8
+ 910072554200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BFAF
+ A400FEFBFD00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFDFC00FFFD
+ FC00FFFCFC00FFFCFB00FFFCFB00FFFBFA00FFFAF800FFF9F600FFF7F400FFF5
+ F000FFF3ED00FFF1E800E5B9A400DAAB940073574300FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BFAFA400BFAFA400BFAFA400BFAFA400BFAF
+ A400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAF
+ A400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400BFAFA400C19C
+ 8B005D524D00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0041B4
+ F30041B4F30041B4F30041B4F30041B4F30041B3F30041B1F30040AEF2003FAB
+ F1003EA8F0003EA6F0003EA6F0003EA3F0003DA0EF003D9DEE003C9AED003C98
+ ED003C98ED003C98ED00227BD2005B6674004F545A00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF0041B4F300BEE5FB00BEE5FB00BEE5FB00BEE5
+ FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5
+ FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00227BD2005B66
+ 74004F545A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0041B4
+ F300BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5
+ FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5FB00BEE5
+ FB00BEE5FB00BEE5FB00227BD2005B6674004F545A00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF0041B4F30041B4F30041B4F30041B4F30041B4
+ F30041B4F30041B4F30041B4F30041B4F30041B2F30040AFF20040AFF2003FAC
+ F1003FAAF1003EA7F0003EA4F0003EA2F0003D9FEF003C9CEE00227BD2005B66
+ 74004F545A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object Panel3: TPanel
+ Left = 337
+ Top = 35
+ Width = 97
+ Height = 97
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 2
+ object btGravar: TBitBtn
+ Left = 8
+ Top = 17
+ Width = 81
+ Height = 25
+ Caption = '&Gravar'
+ TabOrder = 0
+ OnClick = btGravarClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42
+ 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969
+ 6969696969696969696969696969696969696969696969696969FF00FFCE726F
+ D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443
+ 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2
+ D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F
+ D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747
+ 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF
+ FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F
+ DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50
+ 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF
+ FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F
+ E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459
+ 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C
+ 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F
+ EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62
+ 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE
+ AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F
+ F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B
+ 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8
+ B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F
+ F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863
+ 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E
+ 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F
+ F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA
+ BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA
+ EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD
+ C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1
+ F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3
+ C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6
+ F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9
+ CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB
+ FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF
+ D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4
+ DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA
+ E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F
+ CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72
+ 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+ 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A}
+ NumGlyphs = 2
+ end
+ object btCancela: TBitBtn
+ Left = 8
+ Top = 57
+ Width = 81
+ Height = 25
+ Caption = '&Cancelar'
+ TabOrder = 1
+ OnClick = btCancelaClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 35
+ Width = 337
+ Height = 97
+ Align = alClient
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ TabOrder = 0
+ object lbNome: TLabel
+ Left = 15
+ Top = 42
+ Width = 54
+ Height = 13
+ Caption = 'Descri'#231#227'o :'
+ end
+ object EditDescricao: TEdit
+ Left = 73
+ Top = 39
+ Width = 249
+ Height = 21
+ Ctl3D = True
+ MaxLength = 30
+ ParentCtl3D = False
+ TabOrder = 0
+ end
+ end
+end
diff --git a/official/2.31RC1/Source/IncPerfil_U.pas b/official/2.31RC1/Source/IncPerfil_U.pas
new file mode 100644
index 0000000..3b1fac8
--- /dev/null
+++ b/official/2.31RC1/Source/IncPerfil_U.pas
@@ -0,0 +1,111 @@
+unit IncPerfil_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{.$IFDEF DELPHI5_UP}
+ Variants,
+{.$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ DB,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TfrmIncluirPerfil = class(TForm)
+ Panel1: TPanel;
+ LbDescricao: TLabel;
+ Image1: TImage;
+ Panel3: TPanel;
+ btGravar: TBitBtn;
+ btCancela: TBitBtn;
+ Panel2: TPanel;
+ lbNome: TLabel;
+ EditDescricao: TEdit;
+ procedure btCancelaClick(Sender: TObject);
+ procedure btGravarClick(Sender: TObject);
+ private
+ function GetNewIdUser: Integer;
+ { Private declarations }
+ public
+ FAltera: Boolean;
+ FUserControl: TUserControl;
+ FNewIdUser : Integer;
+ FDataSetPerfilUsuario : TDataSet;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+procedure TfrmIncluirPerfil.btCancelaClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmIncluirPerfil.btGravarClick(Sender: TObject);
+var
+ FProfile: String;
+begin
+ btGravar.Enabled := False;
+ with FUserControl do
+ if not FAltera then
+ begin // inclui perfil
+ FNewIdUser := GetNewIdUser;
+ FProfile := EditDescricao.Text;
+ if Assigned(onAddProfile) then
+ onAddProfile(TObject(Self.Owner.Owner), FProfile);
+
+
+ DataConnector.UCExecSQL(Format('INSERT INTO %s(%s, %s, %s) Values(%d,%s,%s)',
+ [TableUsers.TableName,
+ TableUsers.FieldUserID,
+ TableUsers.FieldUserName,
+ TableUsers.FieldTypeRec,
+ FNewIdUser,
+ QuotedStr(FProfile),
+ QuotedStr('P')]));
+
+ end
+ else
+ begin // alterar perfil
+ //FNewIdUser := TfrmCadastrarPerfil(Self.Owner).FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger;
+ FProfile := EditDescricao.Text;
+
+ DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s WHERE %s = %d',
+ [TableUsers.TableName,
+ TableUsers.FieldUserName,
+ QuotedStr(FProfile),
+ TableUsers.FieldUserID,
+ FNewIdUser]));
+ end;
+ FDataSetPerfilUsuario.Close;
+ FDataSetPerfilUsuario.Open;
+ FDataSetPerfilUsuario.Locate('IDUser', FNewIdUser, []);
+ Close;
+end;
+
+function TfrmIncluirPerfil.GetNewIdUser: Integer;
+var
+ TempDs: TDataset;
+begin
+ with FUserControl do
+ TempDS := DataConnector.UCGetSQLDataSet('SELECT ' + TableUsers.FieldUserID + ' as MaxUserID from ' + TableUsers.TableName +
+ ' ORDER BY ' + TableUsers.FieldUserID + ' DESC');
+ Result := TempDs.FieldByName('MaxUserID').AsInteger + 1;
+ TempDS.Close;
+ FreeAndNil(TempDS);
+end;
+
+end.
diff --git a/official/2.31RC1/Source/IncUser_U.dfm b/official/2.31RC1/Source/IncUser_U.dfm
new file mode 100644
index 0000000..d5352a9
--- /dev/null
+++ b/official/2.31RC1/Source/IncUser_U.dfm
@@ -0,0 +1,485 @@
+object frmIncluirUsuario: TfrmIncluirUsuario
+ Left = 323
+ Top = 236
+ BorderStyle = bsDialog
+ Caption = 'Cadastro de Usu'#225'rios'
+ ClientHeight = 281
+ ClientWidth = 472
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 472
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 2
+ object LbDescricao: TLabel
+ Left = 46
+ Top = 9
+ Width = 153
+ Height = 18
+ Caption = 'Adicionar Usu'#225'rio'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00F9F9
+ F900F1F1F100EAEAEA00E3E3E300E0E0E000DEDEDE00DFDFDF00E1E1E100E4E4
+ E400E8E8E800ECECEC00F0F0F000F5F5F500FAFAFA00FEFEFE00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00F6F6F600C5C7C5008E9F91006E8A70005E815C00527B4F004E7C4A004B7C
+ 48004A7C47004B7B48004C7C4A004E7B4C0050795000557854005B7A5C00677F
+ 6A007C897E00A2A2A200D4D4D400FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F2F4F30074967100487638004E7C35004E83
+ 34004B893300488E31004592300044962F0043972F0043982F0043972F004494
+ 300047903100498C32004C863400507F35004E7A360047703900526C5200A9A9
+ A900FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0094B3
+ 910058743900537B36004E8334004A8A33004690310043962F00409B2E003E9F
+ 2D003DA12D003DA12D003DA02D003F9D2E0042992F0045933000488D32004C86
+ 3400517F350055773700567039005A725A00E6E6E600FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00688D5B0055783700508035004B8833004790
+ 310043982F003F9E2D003BA42C0039A82B0037AB2A0037AB2A0038AA2B003AA6
+ 2C003DA12D00419B2E0045943000498C32004D843400527C3600577338005472
+ 4D00DEDEDE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E87
+ 5100527C36004D843400488D320044962F003F9E2E003BA52C0037AC2A0034B1
+ 290032B4280032B5280033B3280035AE290039A82B003DA12D00419A2F004691
+ 31004B893300508035005577370056775100E4E4E400FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00729A6800507F35004B88330046913100419A
+ 2E003CA32C0037AB2A0033B328002FB927002DBE25002CBF25002EBC260031B6
+ 270035AF29003AA72B003F9E2D0044953000498C32004E833400537A37006F8C
+ 6E00F2F2F200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5C6
+ A700508136004A8A3300449330003F9D2E003AA62B0035AF290030B827002BBF
+ 250035B237002BBB2B0029C324002DBC260033B4280037AB2A003DA12D004298
+ 2F00478F31004D8534004A7B3600B0BCB200FDFDFD00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F6FAF70058904D00498B3200449530003E9E
+ 2D0039A82B0034B228002EBB26004BA34E00DEE0DF00DDEADF0044BB47002BC0
+ 250031B6270036AD2A003CA32C00419A2F00479031004C86340072997100F1F1
+ F100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00D4E4D6004A8E3D00449530003E9E2D0039A82B0034B129002FA92C00A4B0
+ A700E5E6E600E8E9E900CFDED20035B3340031B6270036AC2A003CA32C004199
+ 2F00468F31005E955B00E5E7E500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D2E4D4004E984500409C
+ 2E003AA52C0035AE2900518B5400989B9F00798A96006B7F8C00757E85005B7F
+ 5D002D9E240038A92A003DA12D0040952F0070A46F00E9ECEA00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00EDF4EF007BB57B003A9D2E00319131004F7C93004992
+ C5004A98CF004897CE004592C800437DA400235437002C7F22004B9B4500AECA
+ B000F9F9F900FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00BDD3C7004C90AF0052A0D60052A0D500519FD4004F9DD3004C9AD1004997
+ CE00438CBF0043636700C1C2C100FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F5F6F70072ABD00056A4D90056A4D90056A4
+ D90055A3D80054A2D70052A0D5004F9DD3004B99D000468DC000727D8400E7E7
+ E700FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2C4
+ DC005AA6DB005BA8DC005BA8DC005BA8DC005AA7DB0058A5DA0056A4D90053A1
+ D600509ED4004B9AD0004C7FA500ADADAD00FDFDFD00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00E9EEF4005FA7D7005EABDF005FACE0005FACE0005FAC
+ E0005EABDF005CA9DD005AA7DB0057A4D90054A2D700509ED4004A95CA007682
+ 8B00F0F0F000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000C8F80000A6FF0060AC
+ E00061AEE20063B0E30063B0E30063B0E30061AEE2005FACE0005DAADE005AA7
+ DC0056A4D90053A1D6004E9DD3005B7E9600DADADA00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000C8F80000A6FF00FFFF
+ FF00FFFFFF0000C8F80000A6FF0063B0E30065B2E50000A6FF0000C8F80067B4
+ E60065B2E50063B0E30060ADE1005DAADE0059A7DB0055A3D800519FD5004F84
+ A800C5C5C500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF0000C8F80000A6FF009AEBF90000C8F80000A6FF009AEB
+ F90000A6FF0000C8F8006CB8EA006BB7E90069B5E80066B3E60062AFE3005FAC
+ E0005BA8DC0057A5DA0053A1D6004E8DBB00B8B8B800FEFEFE00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009AEBF90000C8
+ F8009AEBF90000A6FF0000A6FF0000A6FF0000C8F8009AEBF9006BB4E3006EBA
+ EC006CB8EA0069B5E70064B1E40060ADE1005DAADE0059A6DB0054A2D7004E91
+ C000B8B8B800FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF009AEBF9009AEBF90000F8F80000F8F8009AEB
+ F9009AEBF9003F799D003E708F004B7FA00062A5D10069B5E60066B3E60062AF
+ E2005EABDF0059A7DB0053A0D4004D88B200C4C4C400FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000A6FF0000A6FF0000A6FF0000A6
+ FF0000F8F800FFFFFF00FFFFFF0000F8F80000A6FF0000A6FF0000A6FF0000A6
+ FF003D719200437595005B9FCD0061AEE1005DAADE004C8FBC003B779D003C62
+ 7A00D0D0D000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF0000C8F80000C8F80000C8F80000A6FF0000F8F8009AEBF900FFFFFF0000F8
+ F80000C8F80000C8F80000C8F80000C8F8004E95C2004689B300386A8A00447B
+ 9F004786B0003C7FA9003C81AC005C7A8B00EDEDED00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009AEB
+ F9009AEBF90000F8F80000F8F8009AEBF9009AEBF90062ABD9005FA8D6005BA3
+ D100559DCA004E95C200478DB9003D7DA6003C7FAA003D82AD003C7CA200A3AA
+ AE00FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF009AEBF90000A6FF0000C8F80000C8F80000A6FF0000C8
+ F80000A6FF009AEBF90067B1DF0062ABD9005BA3D000539AC7004B91BE004388
+ B4003D82AD003C81AC0062849A00ECECEC00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000A6FF0000C8
+ F8009AEBF90000C8F80000A6FF009AEBF90000C8F80000A6FF006EB9E80067B1
+ DF005FA7D500569ECB004D94C100458BB7003D82AE005584A200D8DBDD00FEFE
+ FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0000A6FF0000C8F800FFFFFF00FFFFFF0000C8F80000A6FF00FFFF
+ FF00D8E7F10000C8F80000A6FF0069B3E20061A9D70058A0CD004F96C2004689
+ B5006994B000DCDFE300FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF0000C8F80000A6FF00FFFFFF00FFFFFF00F4F7FA00B2D0E30085B8
+ D80070A9CE0071A6C70087AFC900C3D1DB00FAFAFA00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object Panel3: TPanel
+ Left = 375
+ Top = 35
+ Width = 97
+ Height = 246
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 1
+ object btGravar: TBitBtn
+ Left = 8
+ Top = 16
+ Width = 81
+ Height = 25
+ Caption = '&Gravar'
+ TabOrder = 0
+ OnClick = btGravarClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42
+ 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969
+ 6969696969696969696969696969696969696969696969696969FF00FFCE726F
+ D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443
+ 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2
+ D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F
+ D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747
+ 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF
+ FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F
+ DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50
+ 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF
+ FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F
+ E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459
+ 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C
+ 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F
+ EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62
+ 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE
+ AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F
+ F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B
+ 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8
+ B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F
+ F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863
+ 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E
+ 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F
+ F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA
+ BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA
+ EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD
+ C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1
+ F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3
+ C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6
+ F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9
+ CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB
+ FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF
+ D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4
+ DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA
+ E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F
+ CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72
+ 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+ 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A}
+ NumGlyphs = 2
+ end
+ object btCancela: TBitBtn
+ Left = 8
+ Top = 56
+ Width = 81
+ Height = 25
+ Caption = '&Cancelar'
+ TabOrder = 1
+ OnClick = btCancelaClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 35
+ Width = 375
+ Height = 246
+ Align = alClient
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ TabOrder = 0
+ object lbNome: TLabel
+ Left = 48
+ Top = 15
+ Width = 34
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Nome :'
+ Layout = tlCenter
+ end
+ object lbLogin: TLabel
+ Left = 50
+ Top = 45
+ Width = 32
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Login :'
+ Layout = tlCenter
+ end
+ object lbEmail: TLabel
+ Left = 50
+ Top = 75
+ Width = 32
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'EMail :'
+ Layout = tlCenter
+ end
+ object lbPerfil: TLabel
+ Left = 53
+ Top = 136
+ Width = 29
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Perfil :'
+ Layout = tlCenter
+ end
+ object btlimpa: TSpeedButton
+ Left = 334
+ Top = 136
+ Width = 19
+ Height = 21
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 080000000000000100000E0F00000E0F00000001000000010000FF00FF00B584
+ 8400B5948C00C6A59C00D6BDB500E7C6B500E7CECE0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000020101010101010200000000000000000106060606
+ 0606010100000000000000010606060606060103010000000000000204040404
+ 0404010303010000000000000205050505050501030301000000000000020505
+ 0505050501030301000000000000020505050505050103030100000000000002
+ 0505050505050103010000000000000002050505050505010100000000000000
+ 0002050505050505010000000000000000000201010101010200000000000000
+ 0000000000000000000000000000000000000000000000000000}
+ OnClick = btlimpaClick
+ end
+ object LabelExpira: TLabel
+ Left = 30
+ Top = 167
+ Width = 52
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Expira em :'
+ Layout = tlCenter
+ end
+ object LabelDias: TLabel
+ Left = 331
+ Top = 167
+ Width = 19
+ Height = 13
+ Caption = 'dias'
+ Layout = tlCenter
+ end
+ object Label1: TLabel
+ Left = 46
+ Top = 106
+ Width = 36
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Status :'
+ Layout = tlCenter
+ end
+ object EditNome: TEdit
+ Left = 88
+ Top = 15
+ Width = 265
+ Height = 21
+ Ctl3D = True
+ MaxLength = 30
+ ParentCtl3D = False
+ TabOrder = 0
+ end
+ object EditLogin: TEdit
+ Left = 88
+ Top = 45
+ Width = 265
+ Height = 21
+ Ctl3D = True
+ MaxLength = 30
+ ParentCtl3D = False
+ TabOrder = 1
+ end
+ object EditEmail: TEdit
+ Left = 88
+ Top = 75
+ Width = 265
+ Height = 21
+ Ctl3D = True
+ MaxLength = 150
+ ParentCtl3D = False
+ TabOrder = 2
+ end
+ object ckPrivilegiado: TCheckBox
+ Left = 89
+ Top = 220
+ Width = 120
+ Height = 17
+ Caption = 'Usu'#225'rio privilegiado'
+ TabOrder = 7
+ end
+ object ComboPerfil: TDBLookupComboBox
+ Left = 88
+ Top = 136
+ Width = 242
+ Height = 21
+ Ctl3D = True
+ KeyField = 'IDUser'
+ ListField = 'Nome'
+ ParentCtl3D = False
+ TabOrder = 4
+ end
+ object ckUserExpired: TCheckBox
+ Left = 89
+ Top = 196
+ Width = 160
+ Height = 17
+ Caption = 'Senha do usu'#225'rio n'#227'o expira'
+ TabOrder = 6
+ OnClick = ckUserExpiredClick
+ end
+ object SpinExpira: TSpinEdit
+ Left = 88
+ Top = 167
+ Width = 241
+ Height = 22
+ MaxValue = 100
+ MinValue = 10
+ TabOrder = 5
+ Value = 10
+ end
+ object ComboStatus: TComboBox
+ Left = 88
+ Top = 106
+ Width = 265
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 3
+ Items.Strings = (
+ 'Ativo'
+ 'Inativo')
+ end
+ end
+end
diff --git a/official/2.31RC1/Source/IncUser_U.pas b/official/2.31RC1/Source/IncUser_U.pas
new file mode 100644
index 0000000..02f4c70
--- /dev/null
+++ b/official/2.31RC1/Source/IncUser_U.pas
@@ -0,0 +1,245 @@
+unit IncUser_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ DB,
+ DBCtrls,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Messages,
+ Spin,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TfrmIncluirUsuario = class(TForm)
+ Panel1: TPanel;
+ LbDescricao: TLabel;
+ Image1: TImage;
+ Panel3: TPanel;
+ btGravar: TBitBtn;
+ btCancela: TBitBtn;
+ Panel2: TPanel;
+ lbNome: TLabel;
+ EditNome: TEdit;
+ lbLogin: TLabel;
+ EditLogin: TEdit;
+ lbEmail: TLabel;
+ EditEmail: TEdit;
+ ckPrivilegiado: TCheckBox;
+ lbPerfil: TLabel;
+ ComboPerfil: TDBLookupComboBox;
+ btlimpa: TSpeedButton;
+ ckUserExpired: TCheckBox;
+ LabelExpira: TLabel;
+ SpinExpira: TSpinEdit;
+ LabelDias: TLabel;
+ ComboStatus: TComboBox;
+ Label1: TLabel;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure btCancelaClick(Sender: TObject);
+ procedure btGravarClick(Sender: TObject);
+ function GetNewIdUser: Integer;
+ procedure btlimpaClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure ckUserExpiredClick(Sender: TObject);
+ private
+ FormSenha: TCustomForm;
+ { Private declarations }
+ public
+ { Public declarations }
+ FAltera: Boolean;
+ FUserControl: TUserControl;
+ FDataSetCadastroUsuario: TDataSet;
+ vNovoIDUsuario: Integer;
+ end;
+
+implementation
+
+uses
+ SenhaForm_U;
+
+{$R *.dfm}
+
+procedure TfrmIncluirUsuario.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TfrmIncluirUsuario.FormCreate(Sender: TObject);
+begin
+ Self.BorderIcons := [];
+ Self.BorderStyle := bsDialog;
+end;
+
+procedure TfrmIncluirUsuario.btCancelaClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TfrmIncluirUsuario.btGravarClick(Sender: TObject);
+var
+ vNovaSenha: String;
+ vNome: String;
+ vLogin: String;
+ vEmail: String;
+ vUserExpired: Integer;
+ vPerfil: Integer;
+ vPrivilegiado: Boolean;
+begin
+ btGravar.Enabled := False;
+
+ with FUserControl do
+ if not FAltera then
+ begin // inclui user
+ if Self.FUserControl.ExisteUsuario(EditLogin.Text) then
+ begin
+ MessageDlg(Format(FUserControl.UserSettings.CommonMessages.UsuarioExiste, [EditLogin.Text]), mtWarning, [mbOK], 0);
+ Exit;
+ end;
+
+ FormSenha := TSenhaForm.Create(Self);
+ TSenhaForm(FormSenha).Position := UserSettings.WindowsPosition;
+ TSenhaForm(FormSenha).fUserControl := fUserControl;
+ TSenhaForm(FormSenha).Caption := Format(FUserControl.UserSettings.ResetPassword.WindowCaption, [EditLogin.Text]);
+ if TSenhaForm(FormSenha).ShowModal <> mrOk then
+ begin
+ btGravar.Enabled := True;
+ Exit;
+ end;
+ vNovaSenha := TSenhaForm(FormSenha).edtSenha.Text;
+ vNovoIDUsuario := GetNewIdUser;
+ vNome := EditNome.Text;
+ vLogin := EditLogin.Text;
+ vEmail := EditEmail.Text;
+ FreeAndNil(FormSenha);
+
+ if ComboPerfil.KeyValue = null then
+ vPerfil := 0
+ else
+ vPerfil := ComboPerfil.KeyValue;
+
+ vPrivilegiado := ckPrivilegiado.Checked;
+ vUserExpired := StrToInt(BoolToStr(ckUserExpired.Checked));
+
+ AddUser(vLogin, vNovaSenha, vNome, vEmail, vPerfil, vUserExpired, SpinExpira.Value, vPrivilegiado);
+
+
+ if (Assigned( fUserControl.MailUserControl)) and (fUserControl.MailUserControl.AdicionaUsuario.Ativo ) then
+ try
+ fUserControl.MailUserControl.EnviaEmailAdicionaUsuario(vNome, vLogin, Encrypt(vNovaSenha, EncryptKey) , vEmail, IntToStr(vPerfil), EncryptKey);
+ except
+ on E : Exception do Log(e.Message, 0 );
+ end;
+
+ end
+ else
+ begin // alterar user
+ // vNovoIDUsuario := TfrmCadastrarUsuario(Self.Owner).FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger;
+ vNome := EditNome.Text;
+ vLogin := EditLogin.Text;
+ vEmail := EditEmail.Text;
+ if ComboPerfil.KeyValue = null then
+ vPerfil := 0
+ else
+ vPerfil := ComboPerfil.KeyValue;
+
+ vUserExpired := StrToInt(BoolToStr(ckUserExpired.Checked)); //Added by Petrus van Breda 28/04/2007
+ vPrivilegiado := ckPrivilegiado.Checked;
+ ChangeUser(vNovoIDUsuario, vLogin, vNome, vEmail, vPerfil, vUserExpired, SpinExpira.Value, ComboStatus.ItemIndex, vPrivilegiado);
+
+
+ if (Assigned(fUserControl.MailUserControl)) and (fUserControl.MailUserControl.AlteraUsuario.Ativo ) then
+ try
+ fUserControl.MailUserControl.EnviaEmailAlteraUsuario(vNome, vLogin, 'Não Alterada', vEmail, IntToStr(vPerfil), EncryptKey);
+ except
+ on E : Exception do Log(e.Message, 2);
+ end;
+
+
+ end;
+
+{ With TfrmCadastrarUsuario(Owner) do
+ Begin }
+ FDataSetCadastroUsuario.Close;
+ FDataSetCadastroUsuario.Open;
+ FDataSetCadastroUsuario.Locate('idUser', vNovoIDUsuario, []);
+ // End;
+ Close;
+end;
+
+function TfrmIncluirUsuario.GetNewIdUser: Integer;
+var
+ DataSet: TDataset;
+ SQLStmt: String;
+begin
+ with FUserControl do
+ begin
+ SQLStmt := Format('SELECT %s.%s FROM %s ORDER BY %s DESC', [TableUsers.TableName, TableUsers.FieldUserID,
+ TableUsers.TableName, TableUsers.FieldUserID]);
+ try
+ DataSet := DataConnector.UCGetSQLDataSet(SQLStmt);
+ Result := DataSet.Fields[0].AsInteger + 1;
+ DataSet.Close;
+ finally
+ SysUtils.FreeAndNil(DataSet);
+ end;
+ end;
+end;
+
+procedure TfrmIncluirUsuario.btLimpaClick(Sender: TObject);
+begin
+ ComboPerfil.KeyValue := NULL;
+end;
+
+procedure TfrmIncluirUsuario.FormShow(Sender: TObject);
+begin
+ if not FUserControl.UserProfile.Active then
+ begin
+ lbPerfil.Visible := False;
+ ComboPerfil.Visible := False;
+ btLimpa.Visible := False;
+ end
+ else
+ begin
+ ComboPerfil.ListSource.DataSet.Close;
+ ComboPerfil.ListSource.DataSet.Open;
+ end;
+
+ if FUserControl.Login.ActiveDateExpired = True then
+ //Opção de senha so deve aparecer qdo setada como true no componente By Vicente Barros Leonel
+ ckPrivilegiado.Visible := FUserControl.User.UsePrivilegedField
+ else
+ ckUserExpired.Visible := False;
+
+ EditLogin.CharCase := Self.FUserControl.Login.CharCaseUser;
+
+ SpinExpira.Visible := ckUserExpired.Visible;
+ LabelExpira.Visible := ckUserExpired.Visible;
+ LabelDias.Visible := ckUserExpired.Visible;
+
+ if (FUserControl.User.ProtectAdministrator) and (EditLogin.Text = FUserControl.Login.InitialLogin.User) then
+ EditLogin.Enabled := False;
+end;
+
+procedure TfrmIncluirUsuario.ckUserExpiredClick(Sender: TObject);
+begin
+ SpinExpira.Enabled := not ckUserExpired.Checked;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/LoginWindow_U.dfm b/official/2.31RC1/Source/LoginWindow_U.dfm
new file mode 100644
index 0000000..41b0673
--- /dev/null
+++ b/official/2.31RC1/Source/LoginWindow_U.dfm
@@ -0,0 +1,260 @@
+object frmLoginWindow: TfrmLoginWindow
+ Left = 343
+ Top = 286
+ BorderIcons = [biSystemMenu]
+ BorderStyle = bsSingle
+ Caption = 'Login'
+ ClientHeight = 171
+ ClientWidth = 350
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ KeyPreview = True
+ OldCreateOrder = False
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnKeyPress = FormKeyPress
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object PTop: TPanel
+ Left = 0
+ Top = 0
+ Width = 350
+ Height = 17
+ Align = alTop
+ BevelOuter = bvNone
+ TabOrder = 0
+ object ImgTop: TImage
+ Left = 0
+ Top = 0
+ Width = 0
+ Height = 0
+ AutoSize = True
+ Center = True
+ end
+ end
+ object PLeft: TPanel
+ Left = 0
+ Top = 17
+ Width = 10
+ Height = 124
+ Align = alLeft
+ BevelOuter = bvNone
+ TabOrder = 1
+ object imgLeft: TImage
+ Left = 0
+ Top = 0
+ Width = 0
+ Height = 0
+ AutoSize = True
+ Center = True
+ Transparent = True
+ end
+ end
+ object PBottom: TPanel
+ Left = 0
+ Top = 141
+ Width = 350
+ Height = 11
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 2
+ object ImgBottom: TImage
+ Left = 0
+ Top = 0
+ Width = 0
+ Height = 0
+ AutoSize = True
+ Center = True
+ end
+ end
+ object Panel1: TPanel
+ Left = 10
+ Top = 17
+ Width = 340
+ Height = 124
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 3
+ object PLogin: TPanel
+ Left = 1
+ Top = 1
+ Width = 340
+ Height = 132
+ BevelOuter = bvNone
+ TabOrder = 0
+ object LbUsuario: TLabel
+ Left = 33
+ Top = 10
+ Width = 42
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Usu'#225'rio :'
+ end
+ object LbSenha: TLabel
+ Left = 38
+ Top = 42
+ Width = 37
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Senha :'
+ end
+ object lbEsqueci: TLabel
+ Left = 87
+ Top = 70
+ Width = 79
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'Esqueci a senha'
+ Enabled = False
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlue
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ Visible = False
+ end
+ object EditUsuario: TEdit
+ Left = 82
+ Top = 7
+ Width = 225
+ Height = 21
+ CharCase = ecUpperCase
+ Ctl3D = True
+ MaxLength = 15
+ ParentCtl3D = False
+ TabOrder = 0
+ OnChange = EditUsuarioChange
+ end
+ object EditSenha: TEdit
+ Left = 82
+ Top = 39
+ Width = 225
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 1
+ end
+ object btOK: TBitBtn
+ Left = 81
+ Top = 96
+ Width = 75
+ Height = 25
+ Caption = 'OK'
+ TabOrder = 2
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000000000000000000000000000000000000C8D0D400C8D0
+ D400C8D0D400B6907D00B57F6800C6C9CC00C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C7CCD000C1806000C6503000B75A4100C3BFBD00C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400BFADA500D1886200C4724700C4502E00BA6F5C00C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C7CE
+ D200C0866900D1875F00C5724900C5734A00BF432500C1B6B300C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C0AA
+ 9F00D6916C00CD774F00B94A2E00CC856000C7613C00B85F4700C7CFD300C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BCA19500D08D
+ 6A00D58D6500C84C2D00BD9E9300BD968200D2896400C5462800BF968C00C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C1B5B100C585
+ 6400D37B5900B96B5400C7CCD000C6CBCE00BE836500D2886200C4472D00C6B8
+ B800C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C5C7
+ C800BFB0AA00C6CBCD00C8D0D400C8D0D400C2BDBB00C8846100D07C5600C158
+ 4500C6CBCE00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BEADA500CE876100CD6B
+ 4900C5776B00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BDA49700D18D
+ 6800CD684600C6878000C7CFD300C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400BEA3
+ 9500D6937000CA603E00C7908A00C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C0A79C00CD876100C95D3D00C89B9700C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400BFADA500C6815D00CC5D4100C79F9B00C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C2BCBB00C1876A00CB614400BEA59C00C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C6CACD00BB9A8A00B99A8B00C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400}
+ end
+ object BtCancela: TBitBtn
+ Left = 185
+ Top = 96
+ Width = 75
+ Height = 25
+ Cancel = True
+ Caption = 'Cancelar'
+ TabOrder = 3
+ OnClick = BtCancelaClick
+ Glyph.Data = {
+ 36040000424D3604000000000000360000002800000010000000100000000100
+ 2000000000000004000000000000000000000000000000000000C8D0D400ACB3
+ CC003C41AF00B7BFCE00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400A6ADCA000F19
+ B000000BAE00464BB300C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D4009398C300B1B8CD00C8D0D4005665D000071B
+ C600000EB400010BAD00858CC100C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400BEC6D1005357B100020298005C60B300C8D0D400364CDD002342
+ F0000012BC00000EB5001119AE00B4BBCE00C8D0D400C8D0D400C8D0D400C8D0
+ D400989EC5001D1E9F00000098002122A100B7BECE00C8D0D4008B95CA002E4C
+ F2001C35DB000011BB00000EB5003037B200C2CAD200C8D0D400C1C8D1005A5D
+ B20004049900000098001D1EA000B3BACD00C8D0D400C8D0D400C8D0D4006672
+ C9004D67F7000D22C9000012BC00000EB5004C53B7009DA3C8002125A8000002
+ 9D000000980018199E00AEB5CB00C8D0D400C8D0D400C8D0D400C8D0D400C5CD
+ D2006972C9004C60E6000016C2000012BC00000EB500030DAD000009AA000006
+ A4001417A100A9B0CA00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C7CFD300727BC600162ACB000015C2000012BC00000FB600000CB0001016
+ A900A5ABC900C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400A2AACB00091DC4000018C9000015C3000012BD00000FB600767B
+ BD00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400AFB6CD00162DCC00001ED500001BCF000018C9000015C3000012BD000F1A
+ B300A6ADCA00C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400B8BF
+ CF002138D0000025E2000022DC000120D7002742E3002536C700071FCD000013
+ BE001723B400AFB6CC00C8D0D400C8D0D400C8D0D400C8D0D400C0C8D1002D44
+ D100002BEF000028E900092EE6003A57F2006D78CC00C1C9D2005562C8000D25
+ D1000013BE001823B400A7AECB00C8D0D400C8D0D400C8D0D4005A68C800002F
+ F700002EF500183FF4004662F8006C76CA00C7CFD300C8D0D400C8D0D4007F89
+ C8002539CE000518C2000F1BB4009AA1C700C8D0D400C8D0D400AFB6CD001535
+ DF002A4FFC004A66FA006C77CC00C7CFD300C8D0D400C8D0D400C8D0D400C8D0
+ D400B4BBCE005964C9001729C6000815B500878DC200C8D0D400C8D0D400B7BE
+ CF00707DCF006F7ACC00C7CFD300C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400949CC900424DBE009097C500C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0
+ D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400C8D0D400}
+ end
+ end
+ end
+ object StatusBar: TStatusBar
+ Left = 0
+ Top = 152
+ Width = 350
+ Height = 19
+ Panels = <
+ item
+ Alignment = taRightJustify
+ Text = 'Tentativa: '
+ Width = 60
+ end
+ item
+ Alignment = taCenter
+ Width = 80
+ end
+ item
+ Alignment = taRightJustify
+ Text = 'Limite de Tentativas: '
+ Width = 130
+ end
+ item
+ Alignment = taCenter
+ Width = 50
+ end>
+ end
+end
diff --git a/official/2.31RC1/Source/LoginWindow_U.pas b/official/2.31RC1/Source/LoginWindow_U.pas
new file mode 100644
index 0000000..83b0bf3
--- /dev/null
+++ b/official/2.31RC1/Source/LoginWindow_U.pas
@@ -0,0 +1,142 @@
+unit LoginWindow_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Math,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows, ComCtrls;
+
+type
+ TfrmLoginWindow = class(TForm)
+ PTop: TPanel;
+ ImgTop: TImage;
+ PLeft: TPanel;
+ imgLeft: TImage;
+ PBottom: TPanel;
+ ImgBottom: TImage;
+ Panel1: TPanel;
+ PLogin: TPanel;
+ LbUsuario: TLabel;
+ LbSenha: TLabel;
+ EditUsuario: TEdit;
+ EditSenha: TEdit;
+ btOK: TBitBtn;
+ BtCancela: TBitBtn;
+ lbEsqueci: TLabel;
+ StatusBar: TStatusBar;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure BtCancelaClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure EditUsuarioChange(Sender: TObject);
+ procedure FormKeyPress(Sender: TObject; var Key: char);
+ procedure BotoesClickVisualizacao(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ public
+ FUserControl: TUserControl;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+procedure TfrmLoginWindow.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+
+end;
+
+procedure TfrmLoginWindow.BotoesClickVisualizacao(Sender: TObject);
+begin
+ Self.ModalResult := mrOk;
+end;
+
+procedure TfrmLoginWindow.BtCancelaClick(Sender: TObject);
+begin
+ Application.Terminate;
+end;
+
+procedure TfrmLoginWindow.FormShow(Sender: TObject);
+var
+ w, h: Integer;
+begin
+ w := Max(ImgTop.Width, ImgLeft.Width + PLogin.Width);
+ w := Max(w, ImgBottom.Width);
+ h := Max(ImgLeft.Height + ImgTop.Height + ImgBottom.Height, ImgTop.Height + PLogin.Height + ImgBottom.Height);
+
+ Width := w;
+ Height := h + 28;
+ If FUserControl.Login.MaxLoginAttempts > 0 then
+ Begin
+ Height := Height + 19; // by vicente barros leonel and Petrus van Breda
+ StatusBar.Panels[ 0 ].Text := FUserControl.UserSettings.Login.LabelTentativa;
+ StatusBar.Panels[ 2 ].Text := FUserControl.UserSettings.Login.LabelTentativas;
+ End;
+
+ // Topo
+ PTop.Height := ImgTop.Height;
+ ImgTop.AutoSize := False;
+ ImgTop.Align := alClient;
+ ImgTop.Center := True;
+
+ //Centro
+ PLeft.Width := ImgLeft.Width;
+ ImgLeft.AutoSize := False;
+ ImgLeft.Align := alClient;
+ ImgLeft.Center := True;
+
+ //Bottom
+ PBottom.Height := ImgBottom.Height;
+ ImgBottom.AutoSize := False;
+ ImgBottom.Align := alClient;
+ ImgBottom.Center := True;
+
+ PTop.Visible := ImgTop.Picture <> nil;
+ PLeft.Visible := ImgLeft.Picture <> nil;
+ PBottom.Visible := ImgBottom.Picture <> nil;
+
+ if FUserControl.Login.GetLoginName = lnUserName then
+ EditUsuario.Text := FUserControl.GetLocalUserName;
+ if FUserControl.Login.GetLoginName = lnMachineName then
+ EditUsuario.Text := FUserControl.GetLocalComputerName;
+ if FUserControl.Login.GetLoginName <> lnNone then
+ EditSenha.SetFocus;
+end;
+
+procedure TfrmLoginWindow.EditUsuarioChange(Sender: TObject);
+begin
+ lbEsqueci.Enabled := Length(EditUsuario.Text) > 0;
+end;
+
+procedure TfrmLoginWindow.FormKeyPress(Sender: TObject; var Key: char);
+begin
+ if Key = #13 then
+ Begin
+ Key := #0;
+ Perform(WM_NEXTDLGCTL,0,0);
+ End;
+end;
+
+procedure TfrmLoginWindow.FormActivate(Sender: TObject);
+begin
+ EditUsuario.CharCase := Self.FUserControl.Login.CharCaseUser;
+ EditSenha.CharCase := Self.FUserControl.Login.CharCasePass; { Por Vicente Barros Leonel }
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/MsgRecForm_U.dfm b/official/2.31RC1/Source/MsgRecForm_U.dfm
new file mode 100644
index 0000000..ae8dacf
--- /dev/null
+++ b/official/2.31RC1/Source/MsgRecForm_U.dfm
@@ -0,0 +1,263 @@
+object MsgRecForm: TMsgRecForm
+ Left = 215
+ Top = 162
+ BorderStyle = bsDialog
+ Caption = 'Mensagem'
+ ClientHeight = 336
+ ClientWidth = 506
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object lbDE: TLabel
+ Left = 16
+ Top = 57
+ Width = 20
+ Height = 13
+ Caption = 'De :'
+ end
+ object lbAssunto: TLabel
+ Left = 19
+ Top = 89
+ Width = 38
+ Height = 13
+ Caption = 'Assunto'
+ end
+ object lbMensagem: TLabel
+ Left = 16
+ Top = 120
+ Width = 52
+ Height = 13
+ Caption = 'Mensagem'
+ end
+ object lbData: TLabel
+ Left = 360
+ Top = 57
+ Width = 23
+ Height = 13
+ Caption = 'Data'
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 506
+ Height = 35
+ Align = alTop
+ BevelOuter = bvLowered
+ Color = clWhite
+ TabOrder = 2
+ object lbTitulo: TLabel
+ Left = 48
+ Top = 10
+ Width = 181
+ Height = 18
+ Caption = 'Mensagem Recebida'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098300000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF009830000098300000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00D3BDAF0069473100694731006947310069473100694731006947
+ 3100694731006947310069473100694731006947310069473100694731006947
+ 3100D76733009830000098300000983000009830000098300000C16E39009830
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00FCF9F800B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300D7673300FBC4A100DD986500D48B
+ 5800D48B5800CE824E00C7784300C16E390098300000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00D3BDAF00FEFCFB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EE
+ EA00F2EBE700F0E8E400EEE5E000ECE3DD00EAE0DA00E8DCD600E6D9D200E4D6
+ CF00D7673300FBC4A100DD986500DD986500D48B5800D78F5C00D1875300CB7D
+ 4900C16E390098300000FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00FEFC
+ FB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EBE700F0E8E400EEE5
+ E000ECE3DD00EAE0DA00E8DCD600E6D9D200D7673300FBC4A100E3A16E00DD98
+ 6500DD986500D48B5800D78F5C00D1875300CB7D4900C16E390098300000FFFF
+ FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FEFCFB00FCF9F800E7B98600E7B9
+ 8600E7B98600E7B98600E7B98600E7B98600E7B98600E7B98600E7B98600E7B9
+ 8600D7673300FBC4A100E3A16E00E3A16E00DD986500DD986500D48B5800D78F
+ 5C00C16E390098300000FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF
+ FF00FFFFFF00FEFCFB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EB
+ E700F0E8E400EEE5E000ECE3DD00EAE0DA00D7673300FBC4A100FBC4A100FBC4
+ A100FBC4A100FBC4A100FBC4A100C16E390098300000FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFDFD00FDFB
+ FA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900F0E8E400EEE5E000ECE3
+ DD00D7673300D7673300D7673300D7673300D7673300D7673300FBC4A1009830
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00E7B98600E7B98600E7B98600E7B98600E7B98600E7B9
+ 8600E7B98600E7B98600E7B98600E7B98600EDE4DF00EBE1DB00E9DED800E7DB
+ D400E5D8D100D76733009830000069473100694731006947310069473100FFFF
+ FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900F1E9
+ E500EFE6E200EDE4DF00EBE1DB00E9DED800E7DBD40098300000B7A293006947
+ 3100B7A29300B7A2930069473100FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFDFD00FDFBFA00FBF8
+ F600F9F5F300F7F2EF00F5EFEC00F3ECE900F1E9E500EFE6E200EDE4DF00EBE1
+ DB00E9DED800E7DBD400B7A2930069473100DBC9BF00B7A2930069473100FFFF
+ FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098300000FFFF
+ FF00FFFFFF00FFFFFF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EF
+ EC00F3ECE900F1E9E500EFE6E200EDE4DF00EBE1DB00E9DED800B7A293006947
+ 3100DBC9BF00B7A2930069473100FFFFFF00FFFFFF00D3BDAF00FFFFFF00FFFF
+ FF00FFFFFF009830000098300000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFD
+ FD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900316ADC00316A
+ DC00316ADC00EBE1DB00B7A2930069473100DCCAC000B7A2930069473100FFFF
+ FF00FFFFFF00D3BDAF00FFFFFF00FFFFFF0098300000C16E3900983000009830
+ 000098300000983000009830000098300000FFFDFD00FDFBFA00FBF8F600F9F5
+ F300F7F2EF00F5EFEC00314A800060A2FA00316ADC00EDE4DF00B7A293006947
+ 3100DECDC400B7A2930069473100FFFFFF00FFFFFF00D3BDAF00FFFFFF009830
+ 0000CB7D4900D58B5700C16E3900C16E3900C16E3900C16E3900C16E39009830
+ 0000FFFFFF00FFFFFF00FEFCFB00FCF9F800FAF6F400F8F3F100396EE30060A2
+ FA00316ADC00EFE6E200B7A2930069473100E0D0C800B7A2930069473100FFFF
+ FF00FFFFFF00D3BDAF0098300000CB7D4900E19C6A00DB946100D58B5700D287
+ 5300CD7F4A00C7764100C16E390098300000FFFFFF00FFFFFF00FFFFFF00FEFC
+ FB00FCF9F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EBE700F0E8E4006947
+ 3100E3D5CD00B7A2930069473100FFFFFF00FFFFFF0098300000FBC4A100E3A1
+ 6E00E3A16E00E3A16E00DE986500D88F5C00D2875300CD7F4A00C16E39009830
+ 0000D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BD
+ AF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00E5D8D100B7A2930069473100FFFF
+ FF00FFFFFF00FFFFFF00D7673300FBC4A100E3A16E00E3A16E00E3A16E00DE98
+ 6500D88F5C00D2875300C16E390098300000FFFDFD00FDFBFA00FBF8F600F9F5
+ F300F7F2EF00F5EFEC00F3ECE900F1E9E500EFE6E200EDE4DF00EBE1DB00E9DE
+ D800E7DBD400B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00D767
+ 3300FBC4A100E3A16E00FBC4A100FBC4A100FBC4A100FBC4A100FBC4A1009830
+ 0000FFFFFF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3EC
+ E900F1E9E500EFE6E200EDE4DF00EBE1DB00E9DED800B7A2930069473100FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7673300FBC4A100D7673300D767
+ 3300D7673300D7673300D7673300D7673300FFFFFF00FFFFFF00FFFDFD00FDFB
+ FA00FBF8F600F9F5F300F7F2EF00F5EFEC00F3ECE900316ADC00316ADC00316A
+ DC00EBE1DB00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00D3BDAF00D7673300D7673300FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFDFD00FDFBFA00FBF8F600F9F5F300F7F2
+ EF00F5EFEC00314A800060A2FA00316ADC00EDE4DF00B7A2930069473100FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00FFFFFF00D7673300FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FEFCFB00FCF9F800FAF6F400F8F3F100396EE30060A2FA00316A
+ DC00EFE6E200B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFCFB00FCF9
+ F800FAF6F400F8F3F100F6F0EE00F4EEEA00F2EBE700F0E8E40069473100FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D3BDAF00D3BDAF00D3BDAF00D3BD
+ AF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BD
+ AF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BDAF00D3BD
+ AF00D3BDAF00D3BDAF00D3BDAF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object stDe: TStaticText
+ Left = 64
+ Top = 56
+ Width = 289
+ Height = 17
+ AutoSize = False
+ BorderStyle = sbsSunken
+ TabOrder = 3
+ end
+ object stAssunto: TStaticText
+ Left = 64
+ Top = 88
+ Width = 431
+ Height = 17
+ AutoSize = False
+ BorderStyle = sbsSunken
+ TabOrder = 4
+ end
+ object MemoMsg: TMemo
+ Left = 16
+ Top = 144
+ Width = 481
+ Height = 145
+ MaxLength = 255
+ ReadOnly = True
+ ScrollBars = ssBoth
+ TabOrder = 0
+ end
+ object btFechar: TBitBtn
+ Left = 199
+ Top = 303
+ Width = 79
+ Height = 25
+ Caption = '&Fechar'
+ TabOrder = 1
+ OnClick = btFecharClick
+ Glyph.Data = {
+ 42040000424D4204000000000000420000002800000020000000100000000100
+ 1000030000000004000000000000000000000000000000000000007C0000E003
+ 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C45261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C94521F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C4526862645261F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C9452D65A94521F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C673286268626862645261F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7CD65AD65AD65AD65A94521F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C45268626C62A862E862645261F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C9452D65AF75ED65AD65A94521F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C47328626C62A252E252EC62A8822C62A1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7CB556D65AF75EB556B556F75ED65AF75E1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C4526C62A252E1F7C1F7C252EC62A45261F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C9452F75EB5561F7C1F7CB556F75E94521F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C252E1F7C1F7C1F7C1F7C252EC62A45261F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7CB5561F7C1F7C1F7C1F7CB556F75E94521F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252EC62AC62A1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556F75EF75E1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E86261F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E8626
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556D65A
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C252E
+ 86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CB556
+ D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 252E86261F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ B556D65A1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C252E1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7CB5561F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C
+ 1F7C1F7C1F7C}
+ NumGlyphs = 2
+ end
+ object stData: TStaticText
+ Left = 397
+ Top = 56
+ Width = 97
+ Height = 17
+ AutoSize = False
+ BorderStyle = sbsSunken
+ Caption = '99/99/9999 99:99'
+ TabOrder = 5
+ end
+end
diff --git a/official/2.31RC1/Source/MsgRecForm_U.pas b/official/2.31RC1/Source/MsgRecForm_U.pas
new file mode 100644
index 0000000..a180469
--- /dev/null
+++ b/official/2.31RC1/Source/MsgRecForm_U.pas
@@ -0,0 +1,77 @@
+unit MsgRecForm_U;
+
+interface
+
+uses
+{$IFDEF VER130}
+{$ELSE}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TMsgRecForm = class(TForm)
+ Panel1: TPanel;
+ lbTitulo: TLabel;
+ Image1: TImage;
+ lbDE: TLabel;
+ stDe: TStaticText;
+ lbAssunto: TLabel;
+ stAssunto: TStaticText;
+ lbMensagem: TLabel;
+ MemoMsg: TMemo;
+ btFechar: TBitBtn;
+ lbData: TLabel;
+ stData: TStaticText;
+ procedure btFecharClick(Sender: TObject);
+ procedure FormCreate(Sender: TObject); //added by fduenas
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ MsgRecForm: TMsgRecForm;
+
+implementation
+
+uses
+ UCMessages;
+
+{$R *.dfm}
+
+procedure TMsgRecForm.btFecharClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TMsgRecForm.FormCreate(Sender: TObject);
+begin
+ //added by fduenas
+ if not (Self.Owner is TUCApplicationMessage) then
+ Exit;
+ with TUCApplicationMessage(Self.Owner).UserControl.UserSettings.AppMessages do
+ begin
+ Self.Caption := MsgRec_WindowCaption;
+ lbTitulo.Caption := MsgRec_Title;
+ lbDE.Caption := MsgRec_LabelFrom;
+ lbData.Caption := MsgRec_LabelDate;
+ lbAssunto.Caption := MsgRec_LabelSubject;
+ lbMensagem.Caption := MsgRec_LabelMessage;
+ btFechar.Caption := MsgRec_BtClose;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/MsgsForm_U.dfm b/official/2.31RC1/Source/MsgsForm_U.dfm
new file mode 100644
index 0000000..905767a
--- /dev/null
+++ b/official/2.31RC1/Source/MsgsForm_U.dfm
@@ -0,0 +1,1153 @@
+object MsgsForm: TMsgsForm
+ Left = 144
+ Top = 150
+ BorderStyle = bsDialog
+ Caption = 'Mensagens do Sistema'
+ ClientHeight = 452
+ ClientWidth = 598
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Splitter1: TSplitter
+ Left = 0
+ Top = 237
+ Width = 598
+ Height = 6
+ Cursor = crVSplit
+ Align = alTop
+ Beveled = True
+ end
+ object ListView1: TListView
+ Left = 0
+ Top = 52
+ Width = 598
+ Height = 185
+ Align = alTop
+ Columns = <
+ item
+ Caption = 'Remetente'
+ MaxWidth = 300
+ MinWidth = 50
+ Width = 150
+ end
+ item
+ Caption = 'Assunto'
+ MaxWidth = 500
+ MinWidth = 50
+ Width = 300
+ end
+ item
+ Caption = 'Data'
+ MaxWidth = 150
+ MinWidth = 50
+ Width = 100
+ end>
+ HideSelection = False
+ MultiSelect = True
+ ReadOnly = True
+ RowSelect = True
+ SmallImages = ImageList1
+ TabOrder = 0
+ ViewStyle = vsReport
+ OnColumnClick = ListView1ColumnClick
+ OnCompare = ListView1Compare
+ OnDblClick = ListView1DblClick
+ OnSelectItem = ListView1SelectItem
+ end
+ object ToolBar1: TToolBar
+ Left = 0
+ Top = 0
+ Width = 598
+ Height = 52
+ ButtonHeight = 44
+ ButtonWidth = 94
+ Caption = 'Op'#231#245'es'
+ Images = ImageList2
+ ShowCaptions = True
+ TabOrder = 1
+ object btnova: TToolButton
+ Left = 0
+ Top = 2
+ Caption = '&Nova Mensagem'
+ ImageIndex = 0
+ OnClick = btnovaClick
+ end
+ object btResponder: TToolButton
+ Left = 94
+ Top = 2
+ Caption = '&Responder'
+ ImageIndex = 1
+ OnClick = btResponderClick
+ end
+ object btEncaminhar: TToolButton
+ Left = 188
+ Top = 2
+ Caption = 'E&ncaminhar'
+ ImageIndex = 2
+ OnClick = btEncaminharClick
+ end
+ object btExcluir: TToolButton
+ Left = 282
+ Top = 2
+ Caption = '&Excluir'
+ ImageIndex = 3
+ OnClick = btExcluirClick
+ end
+ object btClose: TToolButton
+ Left = 376
+ Top = 2
+ Caption = '&Fechar'
+ ImageIndex = 4
+ OnClick = btCloseClick
+ end
+ end
+ object MemoMsg: TMemo
+ Left = 0
+ Top = 243
+ Width = 598
+ Height = 209
+ Align = alClient
+ ReadOnly = True
+ TabOrder = 2
+ end
+ object ImageList1: TImageList
+ Height = 14
+ Left = 48
+ Top = 88
+ Bitmap = {
+ 494C010102000400040010000E00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000000E0000000100200000000000000E
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000007B7B7B00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00000000007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00000000007B7B7B0000000000FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007B7B7B00FFFFFF0000000000000000007B7B7B00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000FFFFFF00FFFFFF007B7B7B00FFFFFF007B7B7B00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007B7B7B000000000000000000000000007B7B7B0000000000FFFF
+ FF00000000000000000000000000000000000000000000000000000000007B7B
+ 7B007B7B7B007B7B7B007B7B7B00000000007B7B7B007B7B7B007B7B7B007B7B
+ 7B00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00007B7B7B00FFFFFF00000000000000000000000000000000007B7B7B00FFFF
+ FF00000000000000000000000000000000000000000000000000000000007B7B
+ 7B0000000000FFFFFF0000000000000000000000000000000000000000007B7B
+ 7B00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00007B7B7B0000000000000000000000000000000000000000007B7B7B000000
+ 0000FFFFFF000000000000000000000000000000000000000000000000000000
+ 00007B7B7B00FFFFFF00000000000000000000000000000000007B7B7B00FFFF
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007B7B
+ 7B00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000000FFFFFF00FFFFFF007B7B
+ 7B00FFFFFF000000000000000000000000000000000000000000000000000000
+ 00007B7B7B0000000000FFFFFF000000000000000000000000007B7B7B000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000007B7B
+ 7B007B7B7B007B7B7B007B7B7B00FFFFFF007B7B7B007B7B7B007B7B7B007B7B
+ 7B00000000000000000000000000000000000000000000000000000000000000
+ 0000000000007B7B7B00FFFFFF0000000000000000007B7B7B00FFFFFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000007B7B7B0000000000FFFFFF00000000007B7B7B00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00000000007B7B7B0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B00FFFFFF007B7B7B00FFFFFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000007B7B7B00FFFFFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000007B7B7B007B7B7B007B7B7B0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000007B7B7B000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 28000000400000000E0000000100010000000000700000000000000000000000
+ 000000000000000000000000FFFFFF00FE7FFC3F00000000FD3FFC3F00000000
+ FD5FFC3F00000000F99FF00700000000FBAFE10700000000F3CFEBEF00000000
+ F7D7F3CF00000000E087F5DF00000000E00FF99F00000000FC3FFABF00000000
+ FC3FFC3F00000000FC3FFD7F00000000FC3FFE7F00000000FC7FFEFF00000000
+ 00000000000000000000000000000000000000000000}
+ end
+ object ImageList2: TImageList
+ Height = 24
+ Width = 24
+ Left = 216
+ Top = 328
+ Bitmap = {
+ 494C010105000900040018001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 000000000000360000002800000060000000480000000100200000000000006C
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900A54A
+ 2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A
+ 2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A
+ 2100A54A2100A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFF7
+ F700DEC6BD00D6C6B500D6BDB500CEBDAD00CEB5AD00C6B5A500C6AD9C00BDAD
+ 9C00BDA59C00BDA59400B5A59400B59C8C00B59C8C00B59C8C00B59C8C00B59C
+ 8C00B59C8C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7
+ DE00E7DED600E7DED600E7D6CE00E7D6CE00DECEC600DECEC600DECEBD00DECE
+ BD00B59C8C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EFE700EFE7E700EFE7
+ DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6CE00DECEC600DECEC600DECE
+ BD00B59C8C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EFE700EFE7
+ E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6CE00DECEC600DECE
+ C600B59C8C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EFEF00F7EF
+ E700EFE7E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6CE00DECE
+ C600B59C8C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EFEF00F7EF
+ EF00F7EFE700EFE7E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6CE00E7D6
+ CE00B59C8C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7EF
+ EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7DE00E7DED600E7DED600E7D6
+ CE00B5A59400A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7F700F7F7
+ F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7DE00EFDEDE00E7DE
+ D600BDA59400A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7
+ F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7DE00EFDE
+ DE00BDA59C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFF7F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7DE00EFE7
+ DE00BDAD9C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFF7F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7E700EFE7
+ DE00C6AD9C00A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFF7F700F7F7F700F7F7EF00F7EFEF00F7EFE700EFE7
+ E700C6B5A500A54A210000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00BDCEF70000009C0000009C0000009C000000
+ 9C0000009C0000009C0000009C00C608FF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF000031FF00294ACE001842CE001039C6000029
+ C6000029C6000029C6000029C60000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900A54A
+ 2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A2100A54A
+ 2100A54A2100A54A2100A54A21000031FF003152D600B5C6F7009CADF7001039
+ C6009CADF700B5C6F7000029C60000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000CE732900D66B
+ 0000D66B0000D66B0000D66B0000D66B0000D66B0000D66B0000D66B0000D66B
+ 0000D66B0000D66B0000D66B00000031FF004263D600CED6F700F7F7FF009CAD
+ F700F7F7FF009CADF7000029C60000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000E7426300E78C
+ 2900EF943100EF943100EF943100EF943100EF943100EF943100EF943100EF94
+ 3100EF943100EF943100EF9431000031FF004A63D6004A63D600D6DEFF00FFFF
+ FF009CADF7001839CE000831C60000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000FF10DE00E742
+ 6300DE7B0800DE7B0800DE7B0800DE7B0800DE7B0800DE7B0800DE7B0800DE7B
+ 0800DE7B0800DE7B0800DE7B08000031FF004A63DE008CA5EF00F7F7FF00CED6
+ FF00F7F7FF009CADF7001839CE0000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000031FF005A73E700B5C6F7008C9CEF004A63
+ D6009CADF700B5C6F700214ACE0000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000031FF006B84E7005A73E7004A63DE004A63
+ D6004A63D600395AD6003152D60000009C000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000C608FF000031FF000031FF000031FF000031
+ FF000031FF000031FF000031FF00C608FF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000005A185A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000009C3100000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A5006B4231006B42
+ 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42
+ 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42
+ 31006B4231006B4231006B423100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000005A185A005A185A000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000009C3100009C31
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000018D6000018D6000000000000000000C6B5A500DED6C600B5A5
+ 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400B5A594006B423100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000005A185A00B56BAD00B563A5005A18
+ 5A005A185A005A185A005A185A005A185A000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000D66331009C3100009C3100009C3100009C3100009C310000DE8C
+ 63009C3100000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000018D6000018D6000018D6000000000000000000C6B5A500B5A59400DED6
+ C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6
+ C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6
+ C600DED6C600B5A594006B42310000000000C6B5A5006B4231006B4231006B42
+ 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42
+ 31006B4231006B423100B5A594005A185A00C67BBD00C67BBD00BD6BB500B563
+ AD00AD5AA500A5529C009C4A94005A185A00C6B5A5006B4231006B4231006B42
+ 31006B4231006B4231006B4231006B4231006B4231006B4231006B4231006B42
+ 3100B5A59400D6633100FFC6A500FFB58C00FFAD8C00FFAD8400F7A57B00EF9C
+ 7300E7946B009C310000000000000000000000000000000000000018D6000018
+ D6000018D6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000018
+ D6000018D6000018D600000000000000000000000000C6B5A500DED6C600B5A5
+ 9400E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE
+ D600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE
+ D600B5A59400B5A594006B42310000000000C6B5A500DED6C600B5A59400B5A5
+ 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400DECEBD005A185A00CE84BD00CE84BD00CE84BD00C67BBD00BD6B
+ B500B563AD00AD5AA500A5529C005A185A00C6B5A500DED6C600B5A59400B5A5
+ 9400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A59400B5A5
+ 9400DECEBD00D6633100FFC6A500FFB58C00FFB58C00FFB58C00FFAD8400F7A5
+ 7B00EF9C7300E7946B009C3100000000000000000000000000000018D6000018
+ D6000018D6000018D60000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000018D6000018D6000018
+ D6000018D60000000000000000000000000000000000C6B5A500E7D6CE00E7D6
+ CE00B5A59400EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7
+ DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00B5A5
+ 9400DED6C600B5A594006B42310000000000C6B5A500B5A59400DED6C600DED6
+ C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6
+ C600DED6C6005A185A00D6A5CE00CE84BD00CE84BD00CE84BD00CE84BD00C67B
+ BD00BD6BB500B563AD00AD5AA5005A185A00C6B5A500B5A59400DED6C600DED6
+ C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6C600DED6
+ C600DED6C600D6633100FFC6A500FFB58C00FFB58C00FFB58C00FFB58C00FFAD
+ 8400F7A57B00EF9C7300E7946B009C31000000000000000000000018D6000018
+ D6000018D6000018D6000018D600000000000000000000000000000000000000
+ 0000000000000000000000000000000000000018D6000018D6000018D6000018
+ D6000000000000000000000000000000000000000000C6B5A500EFDEDE00EFDE
+ DE00EFDEDE00B5A59400F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EF
+ EF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00B5A59400E7DE
+ D600E7DED600B5A594006B42310000000000C6B5A500DED6C600B5A59400E7DE
+ D600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE
+ D600E7DED600E7DED600A5429400D6A5CE00CE84BD00CE84BD00CE84BD00CE84
+ BD00C67BBD00BD6BB500B563AD005A185A00C6B5A500DED6C600B5A59400E7DE
+ D600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DED600E7DE
+ D600E7DED600D6633100FFC6A500FFB58C00FFB58C00FFB58C00FFB58C00FFB5
+ 8C00FFAD8400F7A57B009C310000000000000000000000000000000000000018
+ D6000018D6000018D6000018D6000018D6000000000000000000000000000000
+ 00000000000000000000000000000018D6000018D6000018D6000018D6000000
+ 00000000000000000000000000000000000000000000C6B5A500EFE7E700EFE7
+ E700EFE7E700EFE7E700B5A59400F7F7F700F7F7F700F7F7F700F7F7F700F7F7
+ F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700B5A59400EFE7DE00EFE7
+ DE00EFE7DE00B5A594006B42310000000000C6B5A500E7D6CE00E7D6CE00B5A5
+ 9400EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7
+ DE00EFE7DE00EFE7DE00EFE7DE00A5429400D6A5CE00CE84BD00CE84BD00CE84
+ BD00CE84BD00CE84BD00CE84BD005A185A00C6B5A500E7D6CE00E7D6CE00B5A5
+ 9400EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7DE00EFE7
+ DE00EFE7DE00D6633100FFC6A500FFC6A500FFC6A500FFC6A500FFC6A500FFC6
+ A500FFB58C009C31000000000000000000000000000000000000000000000000
+ 00000018FF000018D6000018D6000018D6000018D60000000000000000000000
+ 000000000000000000000018D6000018D6000018D6000018D600000000000000
+ 00000000000000000000000000000000000000000000C6B5A500F7EFE700F7EF
+ E700F7EFE700F7EFE700F7EFE700B5A59400FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B5A59400F7EFEF00F7EFEF00F7EF
+ EF00F7EFEF00B5A594006B42310000000000C6B5A500EFDEDE00EFDEDE00EFDE
+ DE00B5A59400F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EF
+ EF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00A5429400D6A5CE00A5429400A542
+ 9400A5429400A5429400A5429400A5429400C6B5A500EFDEDE00EFDEDE00EFDE
+ DE00B5A59400F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EFEF00F7EF
+ EF00F7EFEF00D6633100D6633100D6633100D6633100D6633100D6633100FFC6
+ A5009C3100000000000000000000000000000000000000000000000000000000
+ 000000000000000000000018D6000018D6000018D6000018D600000000000000
+ 00000018D6000018D6000018D6000018D6000018D60000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A500F7EFEF00F7EF
+ EF00F7EFEF00F7EFEF00B5A59400EFE7E700B5A59400FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00B5A59400DEC6C600B5A59400F7F7F700F7F7
+ F700F7F7F700B5A594006B42310000000000C6B5A500EFE7E700EFE7E700EFE7
+ E700EFE7E700B5A59400F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7
+ F700F7F7F700F7F7F700F7F7F700B5A59400EFE7DE00A5429400A5429400DECE
+ BD00B5A59400000000000000000000000000C6B5A500EFE7E700EFE7E700EFE7
+ E700EFE7E700B5A59400F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7
+ F700F7F7F700F7F7F700F7F7F700B5A59400EFE7DE00EFE7DE00D66331009C31
+ 0000B5A594000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000018D6000018D6000018D6000018D6000018
+ D6000018D6000018D6000018D6000018D6000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A500FFF7F700FFF7
+ F700FFF7F700B5A59400EFE7E700FFFFF700EFE7E700B5A59400B5A59400B5A5
+ 9400B5A59400B5A59400B5A59400DEC6C600DECEBD00DEC6C600B5A59400FFFF
+ FF00FFFFFF00B5A594006B42310000000000C6B5A500F7EFE700F7EFE700F7EF
+ E700F7EFE700F7EFE700B5A59400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00B5A59400F7EFEF00F7EFEF00F7EFEF00A5429400DECE
+ BD006B423100000000000000000000000000C6B5A500F7EFE700F7EFE700F7EF
+ E700F7EFE700F7EFE700B5A59400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00B5A59400F7EFEF00F7EFEF00F7EFEF009C310000DECE
+ BD006B4231000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000018D6000018D6000018FF000018
+ D6000018FF000018D6000018D600000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A500FFFFFF00FFFF
+ FF00B5A59400EFE7E700FFFFFF00FFFFFF00FFFFF700EFE7E700EFE7E700EFE7
+ E700EFE7E700EFE7E700EFE7E700E7D6CE00E7D6CE00DECEC600DEC6C600B5A5
+ 9400FFFFFF00B5A594006B42310000000000C6B5A500F7EFEF00F7EFEF00F7EF
+ EF00F7EFEF00B5A59400DEC6C600B5A59400FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00B5A59400DEC6C600B5A59400F7F7F700F7F7F700F7F7F700B5A5
+ 94006B423100000000000000000000000000C6B5A500F7EFEF00F7EFEF00F7EF
+ EF00F7EFEF00B5A59400DEC6C600B5A59400FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00B5A59400DEC6C600B5A59400F7F7F700F7F7F700F7F7F700B5A5
+ 94006B4231000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000018D6000018D6000018
+ D6000018FF000018D60000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A500FFFFFF00BDA5
+ 9400FFFFFF00FFFFFF00B5A59400B5A59400B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400B5A59400B5A59400B5A59400B5A59400E7D6CE00DECEC600CEB5
+ A500B5A59400F7F7EF006B42310000000000C6B5A500FFF7F700FFF7F700FFF7
+ F700B5A59400DEC6C600B5E7FF00ADDEFF00B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400DEC6C60073C6FF006BC6FF00B5A59400FFFFFF00FFFFFF00B5A5
+ 94006B423100000000000000000000000000C6B5A500FFF7F700FFF7F700FFF7
+ F700B5A59400DEC6C600B5E7FF00ADDEFF00B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400DEC6C60073C6FF006BC6FF00B5A59400FFFFFF00FFFFFF00B5A5
+ 94006B4231000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000018D6000018D6000018FF000018
+ D6000018D6000018FF000018FF00000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A500B5A59400CEB5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFF7
+ F700F7F7EF00F7EFEF00EFE7E700EFE7DE00EFDED600E7D6CE00E7D6CE00CEB5
+ A500DEC6C600D6A59C006B42310000000000C6B5A500FFFFFF00FFFFFF00B5A5
+ 9400DEC6C600C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDEFF0094D6
+ FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400FFFFFF00B5A5
+ 94006B423100000000000000000000000000C6B5A500FFFFFF00FFFFFF00B5A5
+ 9400DEC6C600C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDEFF0094D6
+ FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400FFFFFF00B5A5
+ 94006B4231000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000018D6000018D6000018FF000018D6000018
+ FF000018FF000018FF000018D6000018FF000000000000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A50021A5EF00CEB5
+ A500FFFFFF00FFFFFF00B5A59400B5A59400B5A59400B5A59400B5A59400B5A5
+ 9400B5A59400B5A59400B5A59400B5A59400B5A59400EFDED600E7D6CE00CEB5
+ A50021A5EF00B5A594006B42310000000000C6B5A500FFFFFF00BDA59400DEC6
+ C600D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDE
+ FF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400F7F7
+ EF006B423100000000000000000000000000C6B5A500FFFFFF00BDA59400DEC6
+ C600D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DEFF009CDE
+ FF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00B5A59400F7F7
+ EF006B4231000000000000000000000000000000000000000000000000000000
+ 000000000000000000000018FF000018FF000018FF000018D6000018FF000000
+ 0000000000000018FF000018FF000018FF000018FF0000000000000000000000
+ 00000000000000000000000000000000000000000000C6B5A50021A5EF00CEB5
+ A500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFF7F700F7F7EF00F7EFEF00EFE7E700EFE7DE00EFDED600CEB5
+ A50021A5EF00B5A594006B42310000000000C6B5A500B5A59400DEC6C600DEF7
+ FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DE
+ FF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00D6A5
+ 9C006B423100000000000000000000000000C6B5A500B5A59400DEC6C600DEF7
+ FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDEFF00A5DE
+ FF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6FF00D6A5
+ 9C006B4231000000000000000000000000000000000000000000000000000000
+ 0000000000000018FF000018FF000018D6000018FF000018FF00000000000000
+ 000000000000000000000018FF000018FF000018FF000018FF00000000000000
+ 0000000000000000000000000000000000000000000000000000C6B5A500CEB5
+ A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5
+ A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5A500CEB5
+ A500BDA594006B4231000000000000000000C6B5A500DEC6C600DEF7FF00DEF7
+ FF00DEF7FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDE
+ FF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6
+ FF006B423100000000000000000000000000C6B5A500DEC6C600DEF7FF00DEF7
+ FF00DEF7FF00DEF7FF00D6EFFF00CEEFFF00C6EFFF00BDE7FF00B5E7FF00ADDE
+ FF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF0073C6FF006BC6
+ FF006B4231000000000000000000000000000000000000000000000000000000
+ 00000018FF000018FF000018FF000018FF000018FF0000000000000000000000
+ 0000000000000000000000000000000000000018FF000018FF000018FF000000
+ 000000000000000000000000000000000000000000000000000000000000C6B5
+ A500DEF7FF00DEF7FF00DEF7FF00D6F7FF00C6EFFF00B5E7FF00A5DEFF009CD6
+ FF008CD6FF007BCEFF006BC6FF005ABDFF004ABDFF0042B5FF0042B5FF00B5A5
+ 94006B42310000000000000000000000000000000000C6B5A500DEF7FF00DEF7
+ FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7FF00B5E7
+ FF00ADDEFF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF006B42
+ 31000000000000000000000000000000000000000000C6B5A500DEF7FF00DEF7
+ FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7FF00B5E7
+ FF00ADDEFF00A5DEFF009CDEFF0094D6FF008CD6FF0084CEFF007BCEFF006B42
+ 3100000000000000000000000000000000000000000000000000000000000018
+ FF000018FF000018FF000018FF000018FF000000000000000000000000000000
+ 000000000000000000000000000000000000000000000018FF000018FF000018
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000C6B5A500DEF7FF00DEF7FF00DEF7FF00D6F7FF00C6EFFF00B5E7FF00A5DE
+ FF009CD6FF0094D6FF0084CEFF0073CEFF0063C6FF0052BDFF00B5A594006B42
+ 3100000000000000000000000000000000000000000000000000C6B5A500DEF7
+ FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7
+ FF00B5E7FF00ADE7FF00A5DEFF009CDEFF0094D6FF008CD6FF006B4231000000
+ 0000000000000000000000000000000000000000000000000000C6B5A500DEF7
+ FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EFFF00BDE7
+ FF00B5E7FF00ADE7FF00A5DEFF009CDEFF0094D6FF008CD6FF006B4231000000
+ 00000000000000000000000000000000000000000000000000000018FF000018
+ FF000018FF000018FF000018FF00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000018
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00CEEFFF00BDE7
+ FF00ADE7FF009CDEFF0094D6FF0084CEFF0073CEFF00B5A594006B4231000000
+ 000000000000000000000000000000000000000000000000000000000000C6B5
+ A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EF
+ FF00BDE7FF00B5E7FF00ADE7FF00A5DEFF009CDEFF006B423100000000000000
+ 000000000000000000000000000000000000000000000000000000000000C6B5
+ A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEFFF00C6EF
+ FF00BDE7FF00B5E7FF00ADE7FF00A5DEFF009CDEFF006B423100000000000000
+ 000000000000000000000000000000000000000000000018FF000018FF000018
+ FF000018FF000018FF0000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00CEEF
+ FF00BDE7FF00ADE7FF009CDEFF0094D6FF00B5A594006B423100000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEF
+ FF00C6EFFF00BDE7FF00B5E7FF00ADE7FF006B42310000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7FF00CEEF
+ FF00C6EFFF00BDE7FF00B5E7FF00ADE7FF006B42310000000000000000000000
+ 000000000000000000000000000000000000000000000018FF000018FF000018
+ FF000018FF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7
+ FF00CEEFFF00BDE7FF00ADE7FF009CDEFF006B42310000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7
+ FF00CEEFFF00C6EFFF00BDE7FF006B4231000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7FF00D6F7
+ FF00CEEFFF00C6EFFF00BDE7FF006B4231000000000000000000000000000000
+ 000000000000000000000000000000000000000000000018FF000018FF000018
+ FF00000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000C6B5A500C6B5A500C6B5A500C6B5
+ A500C6B5A500C6B5A500C6B5A500C6B5A5000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7
+ FF00D6F7FF00CEEFFF006B423100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000C6B5A500DEF7FF00DEF7FF00DEF7FF00DEF7FF00DEF7
+ FF00D6F7FF00CEEFFF006B423100000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000C6B5A500C6B5A500C6B5A500C6B5A500C6B5
+ A500C6B5A500C6B5A50000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000C6B5A500C6B5A500C6B5A500C6B5A500C6B5
+ A500C6B5A500C6B5A50000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000060000000480000000100010000000000600300000000000000000000
+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000FFFFFF000000000000000000FFFFFF00
+ 0000000000000000C00003000000000000000000C00003000000000000000000
+ C00003000000000000000000C00003000000000000000000C000030000000000
+ 00000000C00003000000000000000000C00003000000000000000000C0000300
+ 0000000000000000C00003000000000000000000C00003000000000000000000
+ C00003000000000000000000C00003000000000000000000C000030000000000
+ 00000000C00000000000000000000000C00000000000000000000000C0000000
+ 0000000000000000C00000000000000000000000C00000000000000000000000
+ C00000000000000000000000FFFE00000000000000000000FFFE000000000000
+ 00000000FFFE00000000000000000000FFFFFFFFFFDFFFFFDFFFFFFF800001FF
+ FF9FFFFFCFFFFFF9800001FFFF00FFF807FFFFF1800001000000000003C7FFE3
+ 800001000000000001C3FF87800001000000000000C1FF0F8000010000000000
+ 01E0FE1F800001000000000003F07C3F800001000000000007FC307F80000100
+ 0007000007FE00FF800001000007000007FF01FF800001000007000007FF83FF
+ 800001000007000007FF01FF800001000007000007FE00FF8000010000070000
+ 07FC187F800001000007000007F83C3FC00003000007000007F07F1FE0000780
+ 000F80000FE0FF8FF0000FC0001FC0001FC1FFEFF8001FE0003FE0003F83FFFF
+ FC003FF0007FF0007F87FFFFFE007FF800FFF800FF8FFFFFFF00FFFC01FFFC01
+ FFFFFFFFFFFFFFFE03FFFE03FFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+end
diff --git a/official/2.31RC1/Source/MsgsForm_U.pas b/official/2.31RC1/Source/MsgsForm_U.pas
new file mode 100644
index 0000000..6913efe
--- /dev/null
+++ b/official/2.31RC1/Source/MsgsForm_U.pas
@@ -0,0 +1,346 @@
+unit MsgsForm_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+ Variants,
+{$ENDIF}
+ Classes,
+ ComCtrls,
+ Controls,
+ DB,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ ImgList,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ ToolWin,
+ Windows;
+
+type
+ TPointMsg = ^PPointMsg;
+
+ PPointMsg = record
+ IdMsg: Integer;
+ Msg: String;
+ end;
+
+ TMsgsForm = class(TForm)
+ ImageList1: TImageList;
+ ListView1: TListView;
+ ToolBar1: TToolBar;
+ btnova: TToolButton;
+ ImageList2: TImageList;
+ btResponder: TToolButton;
+ btEncaminhar: TToolButton;
+ btExcluir: TToolButton;
+ Splitter1: TSplitter;
+ btClose: TToolButton;
+ MemoMsg: TMemo;
+ procedure btCloseClick(Sender: TObject);
+ procedure btnovaClick(Sender: TObject);
+ procedure ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
+ procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
+ procedure ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
+ procedure ListView1DblClick(Sender: TObject);
+ procedure btExcluirClick(Sender: TObject);
+ procedure btEncaminharClick(Sender: TObject);
+ procedure btResponderClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ private
+ FColuna: Integer;
+ FAsc: Boolean;
+ FListaTPointMsg: array of TPointMsg;
+ procedure MontaTela;
+ public
+ DSMsgs: TDataset;
+ DSUsuarios: TDataset;
+ end;
+
+var
+ MsgsForm: TMsgsForm;
+
+implementation
+
+uses
+ EnvMsgForm_U,
+ MsgRecForm_U,
+ UCBase;
+
+{$R *.dfm}
+
+procedure TMsgsForm.btCloseClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TMsgsForm.btnovaClick(Sender: TObject);
+begin
+ EnvMsgForm := TEnvMsgForm.Create(Self.Owner);
+ EnvMsgForm.DataSource1.DataSet := DSUsuarios;
+ EnvMsgForm.Showmodal;
+ FreeAndNil(EnvMsgForm);
+end;
+
+function FmtDtHr(dt: String): String;
+begin
+ Result := Copy(dt, 7, 2) + '/' + Copy(dt, 5, 2) + '/' + Copy(dt, 1, 4) + ' ' + Copy(dt, 9, 2) + ':' + Copy(dt, 11, 2);
+end;
+
+procedure TMsgsForm.MontaTela;
+var
+ TempPoint: TPointMsg;
+begin
+ DSMsgs.Open;
+ while not DSMsgs.EOF do
+ begin
+ with ListView1.Items.Add do
+ begin
+ ImageIndex := -1;
+ StateIndex := -1;
+ Caption := DSMsgs.FieldByName('de').AsString;
+ SubItems.Add(DSMsgs.FieldByName('Subject').AsString);
+ SubItems.Add(FmtDtHr(DSMsgs.FieldByName('DtSend').AsString));
+ New(TempPoint);
+ SetLength(FListaTPointMsg, Length(FListaTPointMsg) + 1);
+ FListaTPointMsg[High(FListaTPointMsg)] := TempPoint;
+ TempPoint.IdMsg := DSMsgs.FieldByName('idMsg').AsInteger;
+ TempPoint.Msg := DSMsgs.FieldByName('Msg').AsString;
+ Data := TempPoint;
+ end;
+ DSMsgs.Next;
+{$IFDEF DELPHI5}
+ ListView1.Selected := nil;
+{$ELSE}
+ ListView1.ItemIndex := 0;
+{$ENDIF}
+
+ end;
+ DSMsgs.Close;
+end;
+
+procedure TMsgsForm.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
+begin
+ if ListView1.SelCount > 1 then
+ begin
+ btResponder.Enabled := False;
+ btEncaminhar.Enabled := False;
+ end
+ else
+ begin
+ btResponder.Enabled := True;
+ btEncaminhar.Enabled := True;
+ end;
+ MemoMsg.Text := TPointMsg(Item.Data).Msg;
+end;
+
+procedure TMsgsForm.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
+begin
+ if FColuna = Column.Index then
+ begin
+ FAsc := not FAsc;
+ ListView1.Columns[FColuna].ImageIndex := integer(FAsc);
+ end
+ else
+ begin
+ ListView1.Columns[FColuna].ImageIndex := -1;
+ FColuna := Column.Index;
+ FAsc := True;
+ ListView1.Columns[FColuna].ImageIndex := integer(FAsc);
+ end;
+ (Sender as TCustomListView).AlphaSort;
+end;
+
+procedure TMsgsForm.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
+var
+ ix: Integer;
+begin
+ if FColuna = 0 then
+ begin
+ if FAsc then
+ Compare := CompareText(Item1.Caption, Item2.Caption)
+ else
+ Compare := CompareText(Item2.Caption, Item1.Caption);
+ end
+ else
+ begin
+ ix := FColuna - 1;
+ if FAsc then
+ Compare := CompareText(Item1.SubItems[ix], Item2.SubItems[ix])
+ else
+ Compare := CompareText(Item2.SubItems[ix], Item1.SubItems[ix]);
+ end;
+end;
+
+procedure TMsgsForm.ListView1DblClick(Sender: TObject);
+begin
+ if ListView1.Selected = nil then
+ exit; //added to prevent AV error {fduenas}
+ MsgRecForm := TMsgRecForm.Create(Self.Owner); //midifed by fduenas
+
+ MsgRecForm.MemoMsg.Text := TPointMsg(ListView1.Selected.Data).Msg;
+ MsgRecForm.stDe.Caption := ListView1.Selected.Caption;
+ MsgRecForm.stAssunto.Caption := ListView1.Selected.SubItems[0];
+ MsgRecForm.stData.Caption := ListView1.Selected.SubItems[1];
+
+ MsgRecForm.ShowModal;
+ FreeAndNil(MsgRecForm);
+end;
+
+procedure TMsgsForm.btExcluirClick(Sender: TObject);
+var
+ contador: Integer;
+begin
+{$IFDEF DELPHI5}
+ if ListView1.Selected = nil then
+ begin
+ //Modfied by fduenas
+ MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected),
+ PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption),
+ MB_ICONINFORMATION + MB_OK);
+ Exit;
+ end;
+{$ELSE}
+ if ListView1.ItemIndex = -1 then
+ begin
+ //Modfied by fduenas
+ MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected),
+ PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption),
+ MB_ICONINFORMATION or mb_OK);
+ Exit;
+ end;
+{$ENDIF}
+
+ if ListView1.SelCount = 1 then
+ begin
+ TUCApplicationMessage(Owner).DeleteAppMessage(TPointMsg(ListView1.Selected.Data).idMsg);
+ {$IFDEF DELPHI5}
+ ListView1.Selected.Delete;
+ {$ELSE}
+ ListView1.DeleteSelected;
+ {$ENDIF}
+ end
+ else
+ begin
+ for contador := 0 to LIstView1.Items.Count - 1 do
+ if ListView1.items[contador].selected then
+ TUCApplicationMessage(Owner).DeleteAppMessage(TPointMsg(ListView1.items[contador].Data).idMsg);
+ {$IFDEF DELPHI5}
+ ListView1.Selected.Delete;
+ {$ELSE}
+ ListView1.DeleteSelected;
+ {$ENDIF}
+ end;
+
+end;
+
+procedure TMsgsForm.btEncaminharClick(Sender: TObject);
+var
+ contador: Integer;
+begin
+{$IFDEF DELPHI5}
+ if ListView1.Selected = nil then
+ begin
+ //Modfied by fduenas
+ MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected),
+ PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption),
+ MB_ICONINFORMATION or mb_OK);
+ Exit;
+ end;
+{$ELSE}
+ if ListView1.ItemIndex = -1 then
+ begin
+ //Modfied by fduenas
+ MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected),
+ PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption),
+ MB_ICONINFORMATION or mb_OK);
+ Exit;
+ end;
+{$ENDIF}
+ try
+ EnvMsgForm := TEnvMsgForm.Create(Self.Owner);
+ EnvMsgForm.DataSource1.DataSet := DSUsuarios;
+ if EnvMsgForm.dbUsuario.Text <> '' then
+ EnvMsgForm.dbUsuario.Enabled := False;
+ EnvMsgForm.EditAssunto.Text := Copy('Enc: ' + ListView1.Selected.SubItems[0], 1, EnvMsgForm.EditAssunto.MaxLength);
+ EnvMsgForm.MemoMsg.Text := TPointMsg(ListView1.Selected.Data).Msg;
+ for contador := 0 to EnvMsgForm.MemoMsg.Lines.Count - 1 do
+ EnvMsgForm.MemoMsg.Lines[contador] := '>' + EnvMsgForm.MemoMsg.Lines[contador];
+ EnvMsgForm.MemoMsg.Lines.Insert(0, ListView1.Selected.Caption + ' ' + ListView1.Selected.SubItems[1]);
+ EnvMsgForm.MemoMsg.Text := Copy(EnvMsgForm.MemoMsg.Text, 1, EnvMsgForm.MemoMsg.MaxLength);
+ EnvMsgForm.Showmodal;
+ finally
+ FreeAndNil(EnvMsgForm);
+ end;
+end;
+
+procedure TMsgsForm.btResponderClick(Sender: TObject);
+begin
+{$IFDEF DELPHI5}
+ if ListView1.Selected = nil then
+ begin
+ //Modfied by fduenas
+ MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected), PChar(TUCApplicationMessage(Owner).UserControl.Settings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption), MB_ICONINFORMATION + MB_OK);
+ Exit;
+ end;
+{$ELSE}
+ if ListView1.ItemIndex = -1 then
+ begin
+ //Modfied by fduenas
+ MessageBox(Handle, PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected),
+ PChar(TUCApplicationMessage(Owner).UserControl.UserSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption),
+ MB_ICONINFORMATION or mb_OK);
+ Exit;
+ end;
+{$ENDIF}
+ try
+ EnvMsgForm := TEnvMsgForm.Create(Self.Owner);
+ EnvMsgForm.rbUsuario.Checked := True;
+ EnvMsgForm.rbTodos.Enabled := False;
+ DSMsgs.Open;
+ DSMsgs.Locate('idMsg', TPointMsg(ListView1.Selected.Data).idMsg, []);
+ EnvMsgForm.DataSource1.DataSet := DSUsuarios;
+ EnvMsgForm.dbUsuario.KeyValue := DSMsgs.FieldByName('UsrFrom').AsInteger;
+ if EnvMsgForm.dbUsuario.Text <> '' then
+ EnvMsgForm.dbUsuario.Enabled := False;
+ EnvMsgForm.EditAssunto.Text := Copy('Re: ' + ListView1.Selected.SubItems[0], 1, EnvMsgForm.EditAssunto.MaxLength);
+ EnvMsgForm.Showmodal;
+ finally
+ DSMsgs.Close;
+ FreeAndNil(EnvMsgForm);
+ end;
+end;
+
+procedure TMsgsForm.FormClose(Sender: TObject; var Action: TCloseAction);
+var
+ I: Integer;
+begin
+ for I := 0 to High(FListaTPointMsg) do
+ Dispose(FListaTPointMsg[I]);
+
+ if Assigned(DSMsgs) then
+ SysUtils.FreeAndNil(DSMsgs);
+
+ if Assigned(DSUsuarios) then
+ SysUtils.FreeAndNil(DSUsuarios);
+end;
+
+procedure TMsgsForm.FormCreate(Sender: TObject);
+begin
+ SetLength(FListaTPointMsg, 0);
+end;
+
+procedure TMsgsForm.FormShow(Sender: TObject);
+begin
+ MontaTela;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/SenhaForm_U.dfm b/official/2.31RC1/Source/SenhaForm_U.dfm
new file mode 100644
index 0000000..3ad53eb
--- /dev/null
+++ b/official/2.31RC1/Source/SenhaForm_U.dfm
@@ -0,0 +1,73 @@
+object SenhaForm: TSenhaForm
+ Left = 355
+ Top = 241
+ ActiveControl = edtSenha
+ BorderStyle = bsDialog
+ Caption = 'Digitar Senha...'
+ ClientHeight = 145
+ ClientWidth = 244
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ OnClose = FormClose
+ OnCloseQuery = FormCloseQuery
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object LabelSenha: TLabel
+ Left = 16
+ Top = 7
+ Width = 30
+ Height = 13
+ Caption = 'Senha'
+ end
+ object LabelConfirma: TLabel
+ Left = 16
+ Top = 51
+ Width = 30
+ Height = 13
+ Caption = 'Senha'
+ end
+ object edtSenha: TEdit
+ Left = 16
+ Top = 23
+ Width = 217
+ Height = 21
+ Ctl3D = True
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 0
+ end
+ object edtConfirmaSenha: TEdit
+ Left = 16
+ Top = 67
+ Width = 217
+ Height = 21
+ Ctl3D = True
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 1
+ end
+ object btnOK: TBitBtn
+ Left = 44
+ Top = 108
+ Width = 75
+ Height = 25
+ TabOrder = 2
+ Kind = bkOK
+ end
+ object BtCancel: TBitBtn
+ Left = 124
+ Top = 108
+ Width = 75
+ Height = 25
+ TabOrder = 3
+ Kind = bkCancel
+ end
+end
diff --git a/official/2.31RC1/Source/SenhaForm_U.pas b/official/2.31RC1/Source/SenhaForm_U.pas
new file mode 100644
index 0000000..ee9be2c
--- /dev/null
+++ b/official/2.31RC1/Source/SenhaForm_U.pas
@@ -0,0 +1,95 @@
+unit SenhaForm_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Buttons,
+ Classes,
+ Controls,
+ Dialogs,
+ Forms,
+ Graphics,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ Variants,
+ Windows,
+ UCBase;
+
+type
+ TSenhaForm = class(TForm)
+ edtSenha: TEdit;
+ edtConfirmaSenha: TEdit;
+ btnOK: TBitBtn;
+ BtCancel: TBitBtn;
+ LabelSenha: TLabel;
+ LabelConfirma: TLabel;
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ { Private declarations }
+ function CompararSenhas(Senha, ConfirmaSenha: String): Boolean;
+ public
+ fUserControl : TUserControl;
+ { Public declarations }
+ end;
+
+implementation
+
+{$R *.dfm}
+
+{ TForm1 }
+
+function TSenhaForm.CompararSenhas(Senha, ConfirmaSenha: String): Boolean;
+begin
+ Result := False;
+ With fUserControl do
+ begin
+ if ( UserPasswordChange.ForcePassword ) and ( senha = '' ) then
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.PasswordRequired, mtWarning, [mbOK], 0)
+ else if Length( Senha ) < UserPasswordChange.MinPasswordLength then
+ MessageDlg(Format(UserSettings.CommonMessages.ChangePasswordError.MinPasswordLength, [UserPasswordChange.MinPasswordLength]), mtWarning, [mbOK], 0)
+ else if Pos(LowerCase(senha), 'abcdeasdfqwerzxcv1234567890321654987teste' + LowerCase(CurrentUser.UserName) + LowerCase(CurrentUser.UserLogin)) > 0 then
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword, mtWarning, [mbOK], 0)
+ else if ( senha <> confirmasenha ) then
+ MessageDlg( UserSettings.CommonMessages.ChangePasswordError.NewPasswordError , mtWarning, [mbOK], 0)
+ else result := true;
+ End;
+end;
+
+procedure TSenhaForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TSenhaForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ if not (ModalResult = mrCancel) then
+ begin
+ CanClose := CompararSenhas(edtSenha.Text, edtConfirmaSenha.Text);
+ if not CanClose then
+ edtSenha.SetFocus;
+ end;
+end;
+
+procedure TSenhaForm.FormCreate(Sender: TObject);
+begin
+ edtSenha.Clear;
+ edtConfirmaSenha.Clear;
+end;
+
+procedure TSenhaForm.FormShow(Sender: TObject);
+begin
+ edtSenha.CharCase := fUserControl.Login.CharCasePass;
+ edtConfirmaSenha.CharCase := fUserControl.Login.CharCasePass;
+ LabelSenha.Caption := fUserControl.UserSettings.Login.LabelPassword;
+ LabelConfirma.Caption := fUserControl.UserSettings.ChangePassword.LabelConfirm;
+ btnOK.Caption := fUserControl.UserSettings.Login.BtOk;
+ BtCancel.Caption := fUserControl.UserSettings.Login.BtCancel;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/TrocaSenha_U.dfm b/official/2.31RC1/Source/TrocaSenha_U.dfm
new file mode 100644
index 0000000..5bdaf68
--- /dev/null
+++ b/official/2.31RC1/Source/TrocaSenha_U.dfm
@@ -0,0 +1,350 @@
+object TrocaSenha: TTrocaSenha
+ Left = 398
+ Top = 263
+ ActiveControl = EditAtu
+ BorderStyle = bsDialog
+ Caption = 'Seguran'#231'a'
+ ClientHeight = 163
+ ClientWidth = 353
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnActivate = FormActivate
+ OnClose = FormClose
+ OnCloseQuery = FormCloseQuery
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 353
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 0
+ object lbDescricao: TLabel
+ Left = 47
+ Top = 11
+ Width = 124
+ Height = 18
+ Caption = 'Trocar Senha '
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00F9F9F900F1F1F100EAEA
+ EA00E3E3E300E0E0E000DEDEDE00DFDFDF00D3D0CD0077594300694731006947
+ 310069473100D8D1CD00FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F6F6F600C5C7
+ C5008E9F91006E8A70005E815C00527B4F004E7C4A004B7C48004A7C47004B7B
+ 480074574100EAD3BB00F4CA9F00E8BB8E0069473100626B570078817500A19F
+ 9F00D4D4D400FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F2F4F30074967100487638004E7C35004E8334004B893300488E
+ 31004592300044962F0043972F0043982F00A08C7D00F3EEEB00FEF3E300FEE6
+ CA00DFBF9A0069473100694731004C663600526C5200A9A9A900FAFAFA00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0094B3910058743900537B
+ 36004E8334004A8A33004690310043962F00409B2E003E9F2D003DA12D003DA1
+ 2D00519F3E00A08C7D00EEEAE500FEF5EA00FCE6CB00E2B8900069473100545E
+ 2E00566736005A6F5700E5E5E500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00688D5B0055783700508035004B8833004790310043982F003F9E
+ 2D003BA42C0039A82B0037AB2A0037AB2A0038A92B004B9E3800A08C7D00EAE7
+ E200FEF7EC00FCE8CC00D8B99400694731006947310054664600DEDEDE00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E875100527C36004D84
+ 3400488D320044962F003F9E2E003BA52C0037AC2A0034B1290032B4280032B5
+ 280033B3280035AD2A004B9E3800A08C7D00E7E4DE00FDFAEF00FBE8CD00DEB6
+ 8F0069473100535B3C00BEB7B400D4CCC900D3CBC800D9D2D000F9F9F800FFFF
+ FF00FFFFFF00729A6800507F35004B88330046913100419A2E003CA32C0037AB
+ 2A0033B328002FB927002DBE25002CBF25002EBC260031B6270036AD29004D9A
+ 3700A08C7D00E6E3DE00FEF9EF00FBE8CF00D4B6900069473100694731006947
+ 31006947310069473100CFC5C000FCFCFC00FFFFFF00A5C6A700508136004A8A
+ 3300449330003F9D2E003AA62B0035AF290030B827002BBF250035B237002BBB
+ 2B0029C324002DBC260034B3280038A72A0050943900A08C7D00E4E1DA00FBF4
+ EA00F8E3C700E6C39D00DFBB9100E1BD9300E3BE9300DAB2890069473100D8CF
+ C900FFFFFF00F6FAF70058904D00498B3200449530003E9E2D0039A82B0034B2
+ 28002EBB26004BA34E00DEE0DF00DDEADF0044BB47002BC0250031B6270037AD
+ 2B003D9F2B00588D3F00A08C7D00F4EADE00FEF2E200FDEBD300FCE8CD00FCE5
+ C700FCE3C200FFE1BB00DFBB950069473100FFFFFF00FFFFFF00D4E4D6004A8E
+ 3D00449530003E9E2D0039A82B0034B129002FA92C00A4B0A700E5E6E600E8E9
+ E900CFDED20035B3340031B6270036AC2A003CA22C004E8F3800A08C7D00F0E5
+ D700FDF1E100FBE7D300FAE4CD00FBE1C600FBDCBE00EED2B300F5D0A9006947
+ 3100FFFFFF00FFFFFF00FFFFFF00D2E4D4004E984500409C2E003AA52C0035AE
+ 2900518B5400989B9F00798A96006B7F8C00757E85005B7F5D002D9E240038A9
+ 2A003DA12D00508D3B00A08C7D00F1E6D700FCEDD900FAE1C900FBDFC300FCDD
+ BD00E0C2A600AA907B00EBC49F0069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00EDF4EF007BB57B003A9D2E00319131004F7C93004992C5004A98CF004897
+ CE004592C800437DA400235437002C7F22004B9B4500A6B69E00A08C7D00F3E8
+ D800FBEAD300FADDC000FADABA00DFC1A3009A806C008D6A5000EEC69F006947
+ 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD3C7004C90
+ AF0052A0D60052A0D500519FD4004F9DD3004C9AD1004997CE00438CBF004363
+ 6700C1C2C100E6E2DF00A08C7D00E8DBCB00FDE9D100FDE2C300EFD4B800AD96
+ 85008E705A00D9C19B00E1BC970069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F5F6F70072ABD00056A4D90056A4D90056A4D90055A3D80054A2
+ D70052A0D5004F9DD3004B99D000468DC000727D8400E5E4E300E2DDD900A08C
+ 7D00ECDFD100F9EEE000F4E7DA00F0E3D700F0E6D900E6D9CB0069473100E7E3
+ DF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2C4DC005AA6DB005BA8
+ DC005BA8DC005BA8DC005AA7DB0058A5DA0056A4D90053A1D600509ED4004B9A
+ D0004C7FA500ADADAD00FCFCFB00E6E1DE00A08C7D00A08C7D00A08C7D00A08C
+ 7D00A08C7D00A08C7D00EDEAE600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00E9EEF4005FA7D7005EABDF005FACE0005FACE0005FACE0005EABDF005CA9
+ DD005AA7DB0057A4D90054A2D700509ED4004A95CA0076828B00F0F0F000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ADCDE20060ACE00061AEE20063B0
+ E30063B0E30063B0E30061AEE2005FACE0005DAADE005AA7DC0056A4D90053A1
+ D6004E9DD3005B7E9600DADADA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF007EB5DA0063B0E30065B2E50067B4E70068B4E70067B4E60065B2E50063B0
+ E30060ADE1005DAADE0059A7DB0055A3D800519FD5004F84A800C5C5C500FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FAFBFC0064AAD80066B3E60069B5E8006BB7
+ E9006CB8EA006BB7E90069B5E80066B3E60062AFE3005FACE0005BA8DC0057A5
+ DA0053A1D6004E8DBB00B8B8B800FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDF2
+ F50062A9D9005696BF00538EB5005E9FC9006BB4E3006EBAEC006CB8EA0069B5
+ E70064B1E40060ADE1005DAADE0059A6DB0054A2D7004E91C000B8B8B800FEFE
+ FE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F1F5F9004F8FB9004385AF004485AE003F79
+ 9D003E708F004B7FA00062A5D10069B5E60066B3E60062AFE2005EABDF0059A7
+ DB0053A0D4004D88B200C4C4C400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005490B8004D94C1004F96C3005097C3004E95C200488BB5003D7192004375
+ 95005B9FCD0061AEE1005DAADE004C8FBC003B779D003C627A00D0D0D000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0084B1CD00569ECB0058A0CE0059A1
+ CE00579FCC00539BC8004E95C2004689B300386A8A00447B9F004786B0003C7F
+ A9003C81AC005C7A8B00EDEDED00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00C3D8E5005EA5D30061AAD80062ABD9005FA8D6005BA3D100559DCA004E95
+ C200478DB9003D7DA6003C7FAA003D82AD003C7CA200A3AAAE00FDFDFD00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFDFE0079B1D5006AB4E2006AB5
+ E30067B1DF0062ABD9005BA3D000539AC7004B91BE004388B4003D82AD003C81
+ AC0062849A00ECECEC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00DDE9F00075B9E40073BEED006EB9E80067B1DF005FA7D500569E
+ CB004D94C100458BB7003D82AE005584A200D8DBDD00FEFEFE00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D8E7F1007FBF
+ E80072BDEC0069B3E20061A9D70058A0CD004F96C2004689B5006994B000DCDF
+ E300FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F4F7FA00B2D0E30085B8D80070A9CE0071A6
+ C70087AFC900C3D1DB00FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ end
+ object Panel3: TPanel
+ Left = 256
+ Top = 35
+ Width = 97
+ Height = 128
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 1
+ object btGrava: TBitBtn
+ Left = 8
+ Top = 32
+ Width = 81
+ Height = 25
+ Caption = '&Gravar'
+ TabOrder = 0
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42
+ 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969
+ 6969696969696969696969696969696969696969696969696969FF00FFCE726F
+ D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443
+ 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2
+ D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F
+ D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747
+ 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF
+ FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F
+ DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50
+ 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF
+ FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F
+ E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459
+ 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C
+ 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F
+ EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62
+ 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE
+ AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F
+ F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B
+ 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8
+ B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F
+ F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863
+ 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E
+ 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F
+ F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA
+ BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA
+ EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD
+ C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1
+ F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3
+ C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6
+ F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9
+ CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB
+ FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF
+ D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4
+ DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA
+ E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F
+ CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72
+ 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+ 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A}
+ NumGlyphs = 2
+ end
+ object btCancel: TBitBtn
+ Left = 8
+ Top = 72
+ Width = 81
+ Height = 25
+ Caption = '&Cancelar'
+ TabOrder = 1
+ OnClick = btCancelClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 35
+ Width = 256
+ Height = 128
+ Align = alClient
+ BevelInner = bvRaised
+ BevelOuter = bvLowered
+ TabOrder = 2
+ object lbSenhaAtu: TLabel
+ Left = 34
+ Top = 27
+ Width = 64
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Senha Atual :'
+ end
+ object lbNovaSenha: TLabel
+ Left = 32
+ Top = 57
+ Width = 66
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Nova Senha :'
+ end
+ object lbConfirma: TLabel
+ Left = 51
+ Top = 88
+ Width = 47
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Confirma :'
+ end
+ object EditAtu: TEdit
+ Left = 103
+ Top = 24
+ Width = 121
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 0
+ end
+ object EditNova: TEdit
+ Left = 103
+ Top = 54
+ Width = 121
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 1
+ end
+ object EditConfirma: TEdit
+ Left = 103
+ Top = 85
+ Width = 121
+ Height = 21
+ Ctl3D = True
+ MaxLength = 10
+ ParentCtl3D = False
+ PasswordChar = '*'
+ TabOrder = 2
+ end
+ end
+end
diff --git a/official/2.31RC1/Source/TrocaSenha_U.pas b/official/2.31RC1/Source/TrocaSenha_U.pas
new file mode 100644
index 0000000..a034907
--- /dev/null
+++ b/official/2.31RC1/Source/TrocaSenha_U.pas
@@ -0,0 +1,89 @@
+unit TrocaSenha_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+{$ELSE}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ Windows,
+// UCConsts,
+ UCBase; { Por Vicente Barros Leonel }
+
+type
+ TTrocaSenha = class(TForm)
+ Panel1: TPanel;
+ lbDescricao: TLabel;
+ Image1: TImage;
+ Panel3: TPanel;
+ btGrava: TBitBtn;
+ btCancel: TBitBtn;
+ Panel2: TPanel;
+ lbSenhaAtu: TLabel;
+ lbNovaSenha: TLabel;
+ lbConfirma: TLabel;
+ EditAtu: TEdit;
+ EditNova: TEdit;
+ EditConfirma: TEdit;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure btCancelClick(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ private
+ { Private declarations }
+ public
+ fUsercontrol : TUserControl; { Por Vicente Barros Leonel }
+ ForcarTroca : Boolean;
+ { Public declarations }
+ end;
+
+{
+var
+ TrocaSenha: TTrocaSenha;
+}
+
+implementation
+
+{$R *.dfm}
+
+procedure TTrocaSenha.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TTrocaSenha.btCancelClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TTrocaSenha.FormActivate(Sender: TObject);
+begin
+ EditAtu.CharCase := Self.FUserControl.Login.CharCasePass;
+ EditNova.CharCase := Self.FUserControl.Login.CharCasePass;
+ EditConfirma.CharCase := Self.FUserControl.Login.CharCasePass; { Por Vicente Barros Leonel }
+end;
+
+procedure TTrocaSenha.FormCloseQuery(Sender: TObject;
+ var CanClose: Boolean);
+begin
+ If ForcarTroca = True then
+ Begin
+ CanClose := False;
+ MessageDlg( fUsercontrol.UserSettings.CommonMessages.ForcaTrocaSenha ,mtWarning, [mbOK], 0);
+ End;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/UCALSMTPClient.pas b/official/2.31RC1/Source/UCALSMTPClient.pas
new file mode 100644
index 0000000..181ebcd
--- /dev/null
+++ b/official/2.31RC1/Source/UCALSMTPClient.pas
@@ -0,0 +1,3770 @@
+{*************************************************************
+Author: Stéphane Vander Clock (SVanderClock@Arkadia.com)
+
+Contributor François PIETTE (http://www.overbyte.be)
+ Paul TOTH (tothpaul@free.fr - http://tothpaul.free.fr)
+
+EMail: http://www.arkadia.com
+ SVanderClock@Arkadia.com
+
+product: TALSMTPClient
+Version: 3.05
+
+Description: TALsmtpClient class implements the SMTP protocol (RFC-821)
+ Support file attachement using MIME format (RFC-1521, RFC-2045)
+ Support authentification (RFC-2104)
+
+Legal issues: Copyright (C) 2005 by Stéphane Vander Clock
+
+ This software is provided 'as-is', without any express
+ or implied warranty. In no event will the author be
+ held liable for any damages arising from the use of
+ this software.
+
+ Permission is granted to anyone to use this software
+ for any purpose, including commercial applications,
+ and to alter it and redistribute it freely, subject
+ to the following restrictions:
+
+ 1. The origin of this software must not be
+ misrepresented, you must not claim that you wrote
+ the original software. If you use this software in
+ a product, an acknowledgment in the product
+ documentation would be appreciated but is not
+ required.
+
+ 2. Altered source versions must be plainly marked as
+ such, and must not be misrepresented as being the
+ original software.
+
+ 3. This notice may not be removed or altered from any
+ source distribution.
+
+ 4. You must register this software by sending a picture
+ postcard to the author. Use a nice stamp and mention
+ your name, street address, EMail address and any
+ comment you like to say.
+
+Know bug :
+
+History :
+
+Link : http://linuxgazette.net/issue45/stumpel.html
+ http://www.overbyte.be
+ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/socket_options.asp
+ http://www.fehcom.de/qmail/smtpauth.html
+ http://www.freesoft.org/CIE/RFC/821/
+ http://www.expita.com/header1.html
+ http://cr.yp.to/immhf.html
+
+Please send all your feedback to SVanderClock@Arkadia.com
+**************************************************************}
+
+{$I 'UserControl.inc'}
+
+unit UCALSMTPClient;
+
+interface
+
+uses
+ Classes,
+ Dialogs,
+ sysutils,
+ windows,
+ WinSock;
+
+type
+ {Note: when changing TVendor, also change VendorStr array below}
+ TALCPUVendor = (
+ cvUnknown,
+ cvAMD,
+ cvCentaur,
+ cvCyrix,
+ cvIntel,
+ cvTransmeta,
+ cvNexGen,
+ cvRise,
+ cvUMC,
+ cvNSC,
+ cvSiS
+ );
+{Note: when changing TInstruction, also change InstructionSupportStr below
+ * - instruction(s) not supported in Delphi 7 assembler}
+ TALCPUInstructions = (
+ isFPU, {80x87}
+ isTSC, {RDTSC}
+ isCX8, {CMPXCHG8B}
+ isSEP, {SYSENTER/SYSEXIT}
+ isCMOV, {CMOVcc, and if isFPU, FCMOVcc/FCOMI}
+ isMMX, {MMX}
+ isFXSR, {FXSAVE/FXRSTOR}
+ isSSE, {SSE}
+ isSSE2, {SSE2}
+ isSSE3, {SSE3*}
+ isMONITOR, {MONITOR/MWAIT*}
+ isCX16, {CMPXCHG16B*}
+ isX64, {AMD AMD64* or Intel EM64T*}
+ isExMMX, {MMX+ - AMD only}
+ isEx3DNow, {3DNow!+ - AMD only}
+ is3DNow {3DNow! - AMD only}
+ );
+ TALCPUInstructionSupport = set of TALCPUInstructions;
+
+ TALCPUInfo = record
+ Vendor: TALCPUVendor;
+ Signature: cardinal;
+ EffFamily: byte; {ExtendedFamily + Family}
+ EffModel: byte; {(ExtendedModel shl 4) + Model}
+ CodeL1CacheSize, {KB or micro-ops for Pentium 4}
+ DataL1CacheSize, {KB}
+ L2CacheSize, {KB}
+ L3CacheSize: Word; {KB}
+ InstructionSupport: TALCPUInstructionSupport;
+ end;
+ TALHandleTagfunct = function(const TagString: String; TagParams: TStrings; ExtData: pointer; var Handled: Boolean): String;
+ TALMoveProc = procedure(const Source; var Dest; Count: Integer);
+ TALCharPosFunct = function(Ch: char; const Str: ansistring): Integer;
+ TALPosFunct = function(const SubStr: ansistring; const Str: ansistring): Integer;
+
+
+ PALMimeBase64Byte4 = ^TALMimeBase64Byte4;
+
+ TALMimeBase64Byte4 = packed record
+ b1: byte;
+ b2: byte;
+ b3: byte;
+ b4: byte;
+ end;
+ PALMimeBase64Byte3 = ^TALMimeBase64Byte3;
+
+ TALMimeBase64Byte3 = packed record
+ b1: byte;
+ b2: byte;
+ b3: byte;
+ end;
+
+ {-----------------------}
+ TAlSmtpClientAuthType = (
+ AlsmtpClientAuthNone,
+ alsmtpClientAuthPlain,
+ AlsmtpClientAuthLogin,
+ AlsmtpClientAuthCramMD5,
+ AlsmtpClientAuthCramSha1,
+ AlsmtpClientAuthAutoSelect
+ );
+
+ {------------------------------------------------------}
+ TAlSmtpClientAuthTypeSet = set of TAlSmtpClientAuthType;
+
+ {--------------------------------------}
+ TALSMTPClientHeader = class(TPersistent)
+ private
+ fSendTo: String;
+ fSender: String;
+ fMessageID: String;
+ fbcc: String;
+ fContentTransferEncoding: String;
+ fComments: String;
+ fMIMEVersion: String;
+ fPriority: String;
+ fReplyTo: String;
+ fSubject: String;
+ fFrom: String;
+ fDate: String;
+ fDispositionNotificationTo: String;
+ fReferences: String;
+ fcc: String;
+ fContentType: String;
+ FCustomHeaders: TStrings;
+ function GetRawHeaderText: String;
+ procedure SetRawHeaderText(const aRawHeaderText: String);
+ protected
+ procedure AssignTo(Dest: TPersistent); override;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+ procedure Clear;
+ published
+ property From: String Read fFrom Write fFrom; {From: John Doe - Author(s) or person(s) taking responsibility for the message 4.4.1; RFC 1123: 5.2.15-16, 5.3.7; RFC 1036: 2.1.1}
+ property Sender: String Read fSender Write fSender; {Sender: Michael Jones - The person or agent submitting the message to the network, if other than shown by the From header RFC 822: 4.4.2; RFC 1123: 5.2.15-16, 5.3.7; RFC 1036: 2.1.1}
+ property SendTo: String Read fSendTo Write fSendTo; {To: Mary Smith - Primary recipient(s) RFC 822: 4.5.1; RFC 1123: 5.2.15-16, 5.3.7;}
+ property cc: String Read fcc Write fcc; {cc: , "Giant; \"Big\" Box" - Secondary, informational recipient(s) RFC 822: 4.5.2; RFC 1123: 5.2.15-16, 5.3.7;}
+ property bcc: String Read fbcc Write fbcc; {bcc: , "Giant; \"Big\" Box" - Recipient(s) not to be disclosed to other recipients ("blind carbon copy") RFC 822: 4.5.3; RFC 1123: 5.2.15-16, 5.3.7;}
+ property ReplyTo: String Read fReplyTo Write fReplyTo; {Reply-To: "Mary Smith: Personal Account" - Suggested E-mail address for replies RFC 822: 4.4.3; RFC 1036: 2.2.1}
+ property Subject: String Read fSubject Write fSubject; {Subject: Saying Hello - Text that provides a summary, or indicates the nature, of the message RFC 822: 4.7.1; RFC 1036: 2.1.4}
+ property MessageID: String Read fMessageID Write fMessageID; {Message-ID: <1234@local.machine.example> - Unique ID for the message RFC 822: 4.6.1; RFC 1036: 2.1.5}
+ property References: String Read fReferences Write fReferences; {References: <1234@local.machine.example> <3456@example.net> - In E-mail: reference to other related messages; in Usenet: reference to replied-to-articles RFC 822: 4.6.3; RFC 1036: 2.2.5}
+ property Comments: String Read fComments Write fComments; {Comments: Authenticated sender is gboyd@netcom.com - Text comments added to the message RFC 822: 4.7.2}
+ property Date: String Read fDate Write fDate; {Date: Fri, 21 Nov 1997 09:55:06 -0600 - The time when the message was written (or submitted) RFC 822: 5.1; RFC 1123: 5.2.14; RFC 1036: 2.1.2}
+ property ContentType: String Read fContentType Write fContentType; {Content-Type: text/plain; charset="iso-8859-1" - Data type and format of content RFC 1049 (historic); RFC 1123: 5.2.13; RFC 2045: 5; RFC 1766: 4.1}
+ property ContentTransferEncoding: String Read fContentTransferEncoding Write fContentTransferEncoding; {Content-Transfer-Encoding: 8bit - Coding method used in a MIME message body RFC 2045: 6;}
+ property MIMEVersion: String Read fMIMEVersion Write fMIMEVersion; {MIME-Version: 1.0 - specifies the version of MIME that the message format complies with RFC 2045: 4}
+ property Priority: String Read fPriority Write fPriority; {Priority: normal - Priority for message delivery ("normal" / "non-urgent" / "urgent") RFC 2156}
+ property DispositionNotificationTo: String Read fDispositionNotificationTo Write fDispositionNotificationTo; {Disposition-Notification-To: boss@nil.test - Requests for notification when the message is received, and specifies the address for them RFC 2298}
+ property CustomHeaders: TStrings Read FCustomHeaders;
+ property RawHeaderText: String Read GetRawHeaderText Write SetRawHeaderText;
+ end;
+
+ TOnStatus = procedure(Status: String) of object;
+
+ {----------------------------}
+ TAlSmtpClient = class(TObject)
+ private
+ FWSAData: TWSAData;
+ Fconnected: Boolean;
+ FSocketDescriptor: Integer;
+ FAuthTypesSupported: TAlSmtpClientAuthTypeSet;
+ Ftimeout: Integer;
+ fOnStatus: TOnStatus;
+ procedure Settimeout(const Value: Integer);
+ protected
+ procedure CheckError(Error: Boolean);
+ function SendCmd(aCmd: String; OkResponses: array of Word): String; virtual;
+ function GetResponse(OkResponses: array of Word): String;
+ function SocketWrite(var Buffer; Count: longint): longint; virtual;
+ function SocketRead(var Buffer; Count: longint): longint; virtual;
+ public
+ constructor Create; virtual;
+ destructor Destroy; override;
+ function Connect(aHost: String; APort: Integer): String; virtual;
+ function Helo: String; virtual;
+ function Ehlo: String; virtual;
+ function Auth(AUserName, APassword: String; aAuthType: TalSmtpClientAuthType): String; virtual;
+ function Vrfy(aUserName: String): String; virtual;
+ function MailFrom(aFromName: String): String; virtual;
+ function RcptTo(aRcptNameLst: TStrings): String; virtual;
+ function Data(aMailData: String): String; overload; virtual;
+ function Data(aHeader, aBody: String): String; overload; virtual;
+ function Data(aHeader: TALSMTPClientHeader; aBody: String): String; overload; virtual;
+ function Quit: String; virtual;
+ function Rset: String; virtual;
+ procedure SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aMailData: String); overload; virtual;
+ procedure SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aHeader, aBody: String); overload; virtual;
+ procedure Disconnect; virtual;
+ function GetAuthTypeFromEhloResponse(EhloResponse: String): TAlSmtpClientAuthTypeSet; virtual;
+ property Connected: Boolean Read FConnected;
+ property Timeout: Integer Read Ftimeout Write Settimeout default 60000;
+ property OnStatus: TOnStatus Read fOnStatus Write fOnStatus;
+ end;
+
+{----------------------------------------------------------------------------------------}
+function AlSMTPClientParseEmail(FriendlyEmail: String; var FriendlyName: String): String;
+function AlSMTPClientGenerateMessageID: String;
+
+var
+ ALMove: TALMoveProc;
+ ALCharPos: TALCharPosFunct;
+ ALPos: TALPosFunct;
+
+
+implementation
+
+uses
+ HTTPAPP;
+
+
+ //***********************************************************************
+ //AlFcnWinSock Partial Unit
+ //***********************************************************************
+function ALgetLocalHostName: String;
+var
+ {$IFDEF DELPHI12}
+ Buffer : pAnsichar;
+ {$ELSE}
+ Buffer : array [0..255] of char;
+ {$ENDIF}
+ WSAData : TWSAData;
+begin
+ WSAData.wVersion := 0;
+ WSAStartup(MAKEWORD(2, 2), WSAData);
+ try
+
+ if gethostname(Buffer, SizeOf(Buffer)) <> 0 then
+ raise Exception.Create('Winsock GetHostName failed');
+ Result := StrPas(Buffer);
+ finally
+ if WSAData.wVersion = 2 then
+ WSACleanup;
+ end;
+end;
+
+function ALHostToIP(HostName: String; var Ip: String): Boolean;
+var
+ WSAData: TWSAData;
+ hostEnt: PHostEnt;
+ {$IFDEF DELPHI12} addr: PAnsiChar; {$ELSE} addr: PChar; {$ENDIF}
+begin
+ WSAData.wVersion := 0;
+ WSAStartup(MAKEWORD(2, 2), WSAData);
+ try
+
+ {$IFDEF DELPHI12}
+ hostEnt := gethostbyname(PAnsiChar(hostName));
+ {$ELSE}
+ hostEnt := gethostbyname(PChar(hostName));
+ {$ENDIF}
+ if Assigned(hostEnt) then
+ begin
+ if Assigned(hostEnt^.h_addr_list) then
+ begin
+ {$IFDEF DELPHI12}
+ addr := hostEnt^.h_addr_list^;
+ {$ELSE}
+ addr := hostEnt^.h_addr_list^;
+ {$ENDIF}
+ if Assigned(addr) then
+ begin
+ IP := Format('%d.%d.%d.%d', [byte(addr[0]),
+ byte(addr[1]), byte(addr[2]), byte(addr[3])]);
+ Result := True;
+ end
+ else
+ Result := False;
+ end
+ else
+ Result := False;
+ end
+ else
+ Result := False;
+
+ finally
+ if WSAData.wVersion = 2 then
+ WSACleanup;
+ end;
+end;
+
+ //***********************************************************************
+ //AlFcnRFC Partial Unit
+ //***********************************************************************
+const
+ CAlRfc822DaysOfWeek: array[1..7] of String = (
+ 'Sun',
+ 'Mon',
+ 'Tue',
+ 'Wed',
+ 'Thu',
+ 'Fri',
+ 'Sat'
+ );
+ CALRfc822MonthNames: array[1..12] of String = (
+ 'Jan',
+ 'Feb',
+ 'Mar',
+ 'Apr',
+ 'May',
+ 'Jun',
+ 'Jul',
+ 'Aug',
+ 'Sep',
+ 'Oct',
+ 'Nov',
+ 'Dec'
+ );
+
+
+function ALGMTDateTimeToRfc822Str(const aValue: TDateTime): String;
+var
+ aDay, aMonth, aYear: Word;
+begin
+ DecodeDate(
+ aValue,
+ aYear,
+ aMonth,
+ aDay
+ );
+
+ Result := Format(
+ '%s, %.2d %s %.4d %s %s',
+ [
+ CAlRfc822DaysOfWeek[DayOfWeek(aValue)],
+ aDay,
+ CAlRfc822MonthNames[aMonth],
+ aYear,
+ FormatDateTime('hh":"nn":"ss', aValue),
+ 'GMT'
+ ]
+ );
+end;
+
+
+function ALDateTimeToRfc822Str(const aValue: TDateTime): String;
+
+ {--------------------------------------------}
+ function InternalCalcTimeZoneBias: TDateTime;
+ const
+ Time_Zone_ID_DayLight = 2;
+ var
+ TZI: TTimeZoneInformation;
+ TZIResult: Integer;
+ aBias: Integer;
+ begin
+ TZIResult := GetTimeZoneInformation(TZI);
+ if TZIResult = -1 then
+ Result := 0
+ else
+ begin
+ if TZIResult = Time_Zone_ID_DayLight then
+ aBias := TZI.Bias + TZI.DayLightBias
+ else
+ aBias := TZI.Bias + TZI.StandardBias;
+ Result := EncodeTime(Abs(aBias) div 60, Abs(aBias) mod 60, 0, 0);
+ if aBias < 0 then
+ Result := -Result;
+ end;
+ end;
+
+begin
+ Result := ALGMTDateTimeToRfc822Str(aValue + InternalCalcTimeZoneBias);
+end;
+
+
+ //***********************************************************************
+ //AlFcnMime Partial Unit
+ //***********************************************************************
+const
+ cALMime_Base64_Encode_Table: array[0..63] of byte = (
+ 065, 066, 067, 068, 069, 070, 071, 072, // 00 - 07
+ 073, 074, 075, 076, 077, 078, 079, 080, // 08 - 15
+ 081, 082, 083, 084, 085, 086, 087, 088, // 16 - 23
+ 089, 090, 097, 098, 099, 100, 101, 102, // 24 - 31
+ 103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39
+ 111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47
+ 119, 120, 121, 122, 048, 049, 050, 051, // 48 - 55
+ 052, 053, 054, 055, 056, 057, 043, 047 // 56 - 63
+ );
+ cALMime_Base64_Pad_Char = byte('=');
+
+function ALMimeBase64EncodedSizeNoCRLF(const InputSize: cardinal): cardinal;
+begin
+ Result := (InputSize + 2) div 3 * 4;
+end;
+
+procedure ALMimeBase64EncodeNoCRLF(const InputBuffer; const InputByteCount: cardinal; out OutputBuffer);
+var
+ B, InnerLimit, OuterLimit: cardinal;
+ InPtr: PALMimeBase64Byte3;
+ OutPtr: PALMimeBase64Byte4;
+begin
+ if InputByteCount = 0 then
+ Exit;
+
+ InPtr := @InputBuffer;
+ OutPtr := @OutputBuffer;
+
+ OuterLimit := InputByteCount div 3 * 3;
+
+ InnerLimit := cardinal(InPtr);
+ Inc(InnerLimit, OuterLimit);
+
+ { Last line loop. }
+ while cardinal(InPtr) < InnerLimit do
+ begin
+ { Read 3 bytes from InputBuffer. }
+ B := InPtr^.b1;
+ B := B shl 8;
+ B := B or InPtr^.b2;
+ B := B shl 8;
+ B := B or InPtr^.b3;
+ Inc(InPtr);
+ { Write 4 bytes to OutputBuffer (in reverse order). }
+ OutPtr^.b4 := CALMIME_Base64_ENCODE_TABLE[B and $3F];
+ B := B shr 6;
+ OutPtr^.b3 := CALMIME_Base64_ENCODE_TABLE[B and $3F];
+ B := B shr 6;
+ OutPtr^.b2 := CALMIME_Base64_ENCODE_TABLE[B and $3F];
+ B := B shr 6;
+ OutPtr^.b1 := CALMIME_Base64_ENCODE_TABLE[B];
+ Inc(OutPtr);
+ end;
+
+ { End of data & padding. }
+ case InputByteCount - OuterLimit of
+ 1:
+ begin
+ B := InPtr^.b1;
+ B := B shl 4;
+ OutPtr.b2 := CALMIME_Base64_ENCODE_TABLE[B and $3F];
+ B := B shr 6;
+ OutPtr.b1 := CALMIME_Base64_ENCODE_TABLE[B];
+ OutPtr.b3 := CALMIME_Base64_PAD_CHAR; { Pad remaining 2 bytes. }
+ OutPtr.b4 := CALMIME_Base64_PAD_CHAR;
+ end;
+ 2:
+ begin
+ B := InPtr^.b1;
+ B := B shl 8;
+ B := B or InPtr^.b2;
+ B := B shl 2;
+ OutPtr.b3 := CALMIME_Base64_ENCODE_TABLE[B and $3F];
+ B := B shr 6;
+ OutPtr.b2 := CALMIME_Base64_ENCODE_TABLE[B and $3F];
+ B := B shr 6;
+ OutPtr.b1 := CALMIME_Base64_ENCODE_TABLE[B];
+ OutPtr.b4 := CALMIME_Base64_PAD_CHAR; { Pad remaining byte. }
+ end;
+ end;
+end;
+
+
+function ALMimeBase64EncodeStringNoCRLF(const S: ansistring): ansistring;
+var
+ L: cardinal;
+begin
+ if Pointer(S) <> nil then
+ begin
+ L := PCardinal(cardinal(S) - 4)^;
+ SetLength(Result, ALMimeBase64EncodedSizeNoCRLF(L));
+ ALMimeBase64EncodeNoCRLF(Pointer(S)^, L, Pointer(Result)^);
+ end
+ else
+ Result := '';
+end;
+
+
+ //***********************************************************************
+ //ALFcnMisc Partial Unit
+ //***********************************************************************
+
+function ALMakeKeyStrByGUID: String;
+var
+ aGUID: TGUID;
+begin
+ CreateGUID(aGUID);
+ Result := GUIDToString(aGUID);
+ Delete(Result, 1, 1);
+ Delete(Result, Length(Result), 1);
+end;
+
+
+ //***********************************************************************
+ //ALFCNString Partial Unit
+ //***********************************************************************
+
+
+{-------------------------------}
+const
+ CALMOVE_SMALLMOVESIZE = 36;
+
+{-------------------------------------------------}
+var
+ VALMove_AnsiUpcase: packed array[char] of char;
+// VALMove_PrefetchLimit: Integer;
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////
+ //////////ALPosEx from FastCode AINSIStringReplace John O'Harrow (john@almcrest.demon.co.uk)//////////
+ //////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ {*********************************}
+ {Fast Equivalent of Delphi 7 PosEx}
+function ALPosEx(const SubStr, S: String; Offset: cardinal = 1): Integer;
+asm
+ push ebx
+ push esi
+ push edx {@Str}
+ test eax, eax
+ jz @@NotFound {Exit if SubStr = ''}
+ test edx, edx
+ jz @@NotFound {Exit if Str = ''}
+ mov esi, ecx
+ mov ecx, [edx-4] {Length(Str)}
+ mov ebx, [eax-4] {Length(SubStr)}
+ add ecx, edx
+ sub ecx, ebx {Max Start Pos for Full Match}
+ lea edx, [edx+esi-1] {Set Start Position}
+ cmp edx, ecx
+ jg @@NotFound {StartPos > Max Start Pos}
+ cmp ebx, 1 {Length(SubStr)}
+ jle @@SingleChar {Length(SubStr) <= 1}
+ push edi
+ push ebp
+ lea edi, [ebx-2] {Length(SubStr) - 2}
+ mov esi, eax
+ movzx ebx, [eax] {Search Character}
+ @@Loop: {Compare 2 Characters per Loop}
+ cmp bl, [edx]
+ jne @@NotChar1
+ mov ebp, edi {Remainder}
+ @@Char1Loop:
+ movzx eax, word ptr [esi+ebp]
+ cmp ax, [edx+ebp]
+ jne @@NotChar1
+ sub ebp, 2
+ jnc @@Char1Loop
+ pop ebp
+ pop edi
+ jmp @@SetResult
+ @@NotChar1:
+ cmp bl, [edx+1]
+ jne @@NotChar2
+ mov ebp, edi {Remainder}
+ @@Char2Loop:
+ movzx eax, word ptr [esi+ebp]
+ cmp ax, [edx+ebp+1]
+ jne @@NotChar2
+ sub ebp, 2
+ jnc @@Char2Loop
+ pop ebp
+ pop edi
+ jmp @@CheckResult
+ @@NotChar2:
+ add edx, 2
+ cmp edx, ecx {Next Start Position <= Max Start Position}
+ jle @@Loop
+ pop ebp
+ pop edi
+ jmp @@NotFound
+ @@SingleChar:
+ jl @@NotFound {Needed for Zero-Length Non-NIL Strings}
+ movzx eax, [eax] {Search Character}
+ @@CharLoop:
+ cmp al, [edx]
+ je @@SetResult
+ cmp al, [edx+1]
+ je @@CheckResult
+ add edx, 2
+ cmp edx, ecx
+ jle @@CharLoop
+ @@NotFound:
+ xor eax, eax
+ pop edx
+ pop esi
+ pop ebx
+ ret
+ @@CheckResult: {Check within String}
+ cmp edx, ecx
+ jge @@NotFound
+ add edx, 1
+ @@SetResult:
+ pop ecx {@Str}
+ pop esi
+ pop ebx
+ neg ecx
+ lea eax, [edx+ecx+1]
+end;
+
+ {***********************************}
+ {Non Case Sensitive version of PosEx}
+function ALPosExIgnoreCase(const SubStr, S: String; Offset: cardinal = 1): Integer;
+asm
+ push ebx
+ push esi
+ push edx {@Str}
+ test eax, eax
+ jz @@NotFound {Exit if SubStr = ''}
+ test edx, edx
+ jz @@NotFound {Exit if Str = ''}
+ mov esi, ecx
+ mov ecx, [edx-4] {Length(Str)}
+ mov ebx, [eax-4] {Length(SubStr)}
+ add ecx, edx
+ sub ecx, ebx {Max Start Pos for Full Match}
+ lea edx, [edx+esi-1] {Set Start Position}
+ cmp edx, ecx
+ jg @@NotFound {StartPos > Max Start Pos}
+ cmp ebx, 1 {Length(SubStr)}
+ jle @@SingleChar {Length(SubStr) <= 1}
+ push edi
+ push ebp
+ lea edi, [ebx-2] {Length(SubStr) - 2}
+ mov esi, eax
+ push edi {Save Remainder to Check = Length(SubStr) - 2}
+ push ecx {Save Max Start Position}
+ lea edi, VALMove_AnsiUpcase {Uppercase Lookup Table}
+ movzx ebx, [eax] {Search Character = 1st Char of SubStr}
+ movzx ebx, [edi+ebx] {Convert to Uppercase}
+ @@Loop: {Loop Comparing 2 Characters per Loop}
+ movzx eax, [edx] {Get Next Character}
+ movzx eax, [edi+eax] {Convert to Uppercase}
+ cmp eax, ebx
+ jne @@NotChar1
+ mov ebp, [esp+4] {Remainder to Check}
+ @@Char1Loop:
+ movzx eax, [esi+ebp]
+ movzx ecx, [edx+ebp]
+ movzx eax, [edi+eax] {Convert to Uppercase}
+ movzx ecx, [edi+ecx] {Convert to Uppercase}
+ cmp eax, ecx
+ jne @@NotChar1
+ movzx eax, [esi+ebp+1]
+ movzx ecx, [edx+ebp+1]
+ movzx eax, [edi+eax] {Convert to Uppercase}
+ movzx ecx, [edi+ecx] {Convert to Uppercase}
+ cmp eax, ecx
+ jne @@NotChar1
+ sub ebp, 2
+ jnc @@Char1Loop
+ pop ecx
+ pop edi
+ pop ebp
+ pop edi
+ jmp @@SetResult
+ @@NotChar1:
+ movzx eax, [edx+1] {Get Next Character}
+ movzx eax, [edi+eax] {Convert to Uppercase}
+ cmp bl, al
+ jne @@NotChar2
+ mov ebp, [esp+4] {Remainder to Check}
+ @@Char2Loop:
+ movzx eax, [esi+ebp]
+ movzx ecx, [edx+ebp+1]
+ movzx eax, [edi+eax] {Convert to Uppercase}
+ movzx ecx, [edi+ecx] {Convert to Uppercase}
+ cmp eax, ecx
+ jne @@NotChar2
+ movzx eax, [esi+ebp+1]
+ movzx ecx, [edx+ebp+2]
+ movzx eax, [edi+eax] {Convert to Uppercase}
+ movzx ecx, [edi+ecx] {Convert to Uppercase}
+ cmp eax, ecx
+ jne @@NotChar2
+ sub ebp, 2
+ jnc @@Char2Loop
+ pop ecx
+ pop edi
+ pop ebp
+ pop edi
+ jmp @@CheckResult {Check Match is within String Data}
+ @@NotChar2:
+ add edx, 2
+ cmp edx, [esp] {Compate to Max Start Position}
+ jle @@Loop {Loop until Start Position > Max Start Position}
+ pop ecx {Dump Start Position}
+ pop edi {Dump Remainder to Check}
+ pop ebp
+ pop edi
+ jmp @@NotFound
+ @@SingleChar:
+ jl @@NotFound {Needed for Zero-Length Non-NIL Strings}
+ lea esi, VALMove_AnsiUpcase
+ movzx ebx, [eax] {Search Character = 1st Char of SubStr}
+ movzx ebx, [esi+ebx] {Convert to Uppercase}
+ @@CharLoop:
+ movzx eax, [edx]
+ movzx eax, [esi+eax] {Convert to Uppercase}
+ cmp eax, ebx
+ je @@SetResult
+ movzx eax, [edx+1]
+ movzx eax, [esi+eax] {Convert to Uppercase}
+ cmp eax, ebx
+ je @@CheckResult
+ add edx, 2
+ cmp edx, ecx
+ jle @@CharLoop
+ @@NotFound:
+ xor eax, eax
+ pop edx
+ pop esi
+ pop ebx
+ ret
+ @@CheckResult: {Check Match is within String Data}
+ cmp edx, ecx
+ jge @@NotFound
+ add edx, 1 {OK - Adjust Result}
+ @@SetResult: {Set Result Position}
+ pop ecx {@Str}
+ pop esi
+ pop ebx
+ neg ecx
+ lea eax, [edx+ecx+1]
+end;
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ //////////AlFastStringReplace from FastCode John O'Harrow (john@almcrest.demon.co.uk)//////////
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+
+ {****************************************}
+ {Non-Overlapping Move for Positive Counts}
+procedure ALStringReplaceMoveEx(const Source; var Dest; Count: Integer);
+const
+ SMALLMOVESIZE = 16;
+asm
+ cmp ecx, SMALLMOVESIZE
+ ja @Large
+ lea eax, [eax+ecx]
+ lea edx, [edx+ecx]
+ jmp dword ptr [@@FwdJumpTable+ecx*4]
+ @Large:
+ fild qword ptr [eax]
+ fistp qword ptr [edx]
+ add eax, ecx
+ add ecx, edx
+ add edx, 7+8
+ neg ecx
+ and edx, -8
+ add ecx, edx
+ sub edx, ecx {Writes Now QWORD Aligned}
+ @FwdLoop:
+ fild qword ptr [eax+ecx-8]
+ fistp qword ptr [edx+ecx-8]
+ add ecx, 8
+ jle @FwdLoop
+ neg ecx
+ add ecx, 8
+ jmp dword ptr [@@FwdJumpTable+ecx*4]
+ nop {Align Jump Table}
+ @@FwdJumpTable:
+ dd @@Done {Removes need to test for zero size Move}
+ dd @@Fwd01,@@Fwd02,@@Fwd03,@@Fwd04,@@Fwd05,@@Fwd06,@@Fwd07,@@Fwd08
+ dd @@Fwd09,@@Fwd10,@@Fwd11,@@Fwd12,@@Fwd13,@@Fwd14,@@Fwd15,@@Fwd16
+ @@Fwd16:
+ mov ecx,[eax-16]
+ mov[edx-16],ecx
+ @@Fwd12:
+ mov ecx,[eax-12]
+ mov[edx-12],ecx
+ @@Fwd08:
+ mov ecx,[eax-8]
+ mov[edx-8],ecx
+ @@Fwd04:
+ mov ecx,[eax-4]
+ mov[edx-4],ecx
+ ret
+ @@Fwd15:
+ mov ecx,[eax-15]
+ mov[edx-15],ecx
+ @@Fwd11:
+ mov ecx,[eax-11]
+ mov[edx-11],ecx
+ @@Fwd07:
+ mov ecx,[eax-7]
+ mov[edx-7],ecx
+ @@Fwd03:
+ movzx ecx, word ptr [eax-3]
+ mov[edx-3],cx
+ movzx ecx, byte ptr [eax-1]
+ mov[edx-1],cl
+ ret
+ @@Fwd14:
+ mov ecx,[eax-14]
+ mov[edx-14],ecx
+ @@Fwd10:
+ mov ecx,[eax-10]
+ mov[edx-10],ecx
+ @@Fwd06:
+ mov ecx,[eax-6]
+ mov[edx-6],ecx
+ @@Fwd02:
+ movzx ecx, word ptr [eax-2]
+ mov[edx-2],cx
+ ret
+ @@Fwd13:
+ mov ecx,[eax-13]
+ mov[edx-13],ecx
+ @@Fwd09:
+ mov ecx,[eax-9]
+ mov[edx-9],ecx
+ @@Fwd05:
+ mov ecx,[eax-5]
+ mov[edx-5],ecx
+ @@Fwd01:
+ movzx ecx, byte ptr [eax-1]
+ mov[edx-1],cl
+ @@Done:
+end; {MoveEx}
+
+ {**************************************************************************}
+ {Replace all occurance of Old (Ignoring Case) with New in Non-Null String S}
+{$IFDEF DELPHI12}
+procedure ALCharReplaceIC(var S: ansistring; const Old, New: pAnsichar);
+{$ELSE}
+procedure ALCharReplaceIC(var S: ansistring; const Old, New: char);
+{$ENDIF}
+asm
+ push ebx
+ push edi
+ push esi
+ mov eax, [eax] {@S}
+ mov ebx, ecx {bl = New}
+ lea edi, VALMove_AnsiUpcase
+ and edx, $FF {edx = Old}
+ mov ecx, [eax-4] {Length(S)}
+ movzx edx, [edx+edi] {edx = Uppercase(Old)}
+ lea esi, [eax+ecx]
+ neg ecx
+ @@Loop:
+ movzx eax, [esi+ecx] {Next Char}
+ movzx eax, [eax+edi] {Convert to Uppercase}
+ cmp eax, edx {Compare Char}
+ jne @@Next
+ mov[esi+ecx], bl {Replace Char}
+ @@Next:
+ add ecx, 1
+ jnz @@Loop
+ pop esi
+ pop edi
+ pop ebx
+end;
+
+ {***************************************************************************}
+ {Replace all occurance of Old (Case Sensitive) with New in Non-Null String S}
+{$IFDEF DELPHI12}
+procedure ALCharReplaceCS(var S: ansistring; const Old, New: pAnsichar);
+{$ELSE}
+procedure ALCharReplaceCS(var S: ansistring; const Old, New: char);
+{$ENDIF}
+asm
+ push ebx
+ mov eax, [eax] {@S}
+ mov ebx, ecx {bl = New, dl = Old}
+ mov ecx, [eax-4] {Length(S)}
+ add eax, ecx
+ neg ecx
+ @@Loop:
+ cmp dl, [eax+ecx] {Compare Next Char}
+ jne @@Next
+ mov[eax+ecx], bl {Replace Char}
+ @@Next:
+ add ecx, 1
+ jnz @@Loop
+ pop ebx
+end;
+
+ {***************************************************************************************}
+ {from John O'Harrow (john@almcrest.demon.co.uk) - original name: StringReplaceJOH_IA32_4}
+function ALStringReplace(const S, OldPattern, NewPattern: ansistring; Flags: TReplaceFlags): ansistring;
+type
+ TPosEx = function(const SubStr, S: String; Offset: cardinal = 1): Integer;
+ {$IFDEF DELPHI12}
+ TCharRep = procedure(var S: ansistring; const Old, New: pAnsichar);
+ {$ELSE}
+ TCharRep = procedure(var S: ansistring; const Old, New: char);
+ {$ENDIF}
+const
+ StaticBufferSize = 16;
+ PosExFunction: array[Boolean] of TPosEx = (ALPosEx, ALPosExIgnoreCase);
+ CharReplace: array[Boolean] of TCharRep = (ALCharReplaceCS, ALCharReplaceIC);
+var
+ SrcLen, OldLen, NewLen, Found, Count, Start, Match, BufSize, BufMax: Integer;
+ StaticBuffer: array[0..StaticBufferSize - 1] of Integer;
+ Buffer: PIntegerArray;
+ {$IFDEF DELPHI12} PSrc, PRes: PAnsiChar; {$ELSE} PSrc, PRes: PChar; {$ENDIF}
+ IgnoreCase: Boolean;
+begin
+{$IFDEF ALStringReplace_AllowLengthShortcut}
+ SrcLen := 0;
+ if (S <> '') then
+ SrcLen := PCardinal(Cardinal(S)-4)^;
+ OldLen := 0;
+ if (OldPattern <> '') then
+ OldLen := PCardinal(Cardinal(OldPattern)-4)^;
+ NewLen := 0;
+ if (NewPattern <> '') then
+ NewLen := PCardinal(Cardinal(NewPattern)-4)^;
+{$ELSE}
+ SrcLen := Length(S);
+ OldLen := Length(OldPattern);
+ NewLen := Length(NewPattern);
+{$ENDIF}
+ if (OldLen = 0) or (SrcLen < OldLen) then
+ begin
+ if SrcLen = 0 then
+ Result := '' {Needed for Non-Nil Zero Length Strings}
+ else
+ Result := S;
+ end
+ else
+ begin
+ IgnoreCase := rfIgnoreCase in Flags;
+ if rfReplaceAll in Flags then
+ begin
+ if (OldLen = 1) and (NewLen = 1) then
+ begin
+ SetLength(Result, SrcLen);
+ ALStringReplaceMoveEx(Pointer(S)^, Pointer(Result)^, SrcLen);
+ {$IFDEF DELPHI12}
+
+ CharReplace[IgnoreCase](Result, pAnsiChar(OldPattern[1]), pAnsiChar(NewPattern[1]));
+ {$ELSE}
+ CharReplace[IgnoreCase](Result, OldPattern[1], NewPattern[1]);
+ {$ENDIF}
+ Exit;
+ end;
+ Found := PosExFunction[IgnoreCase](OldPattern, S, 1);
+ if Found <> 0 then
+ begin
+ Buffer := @StaticBuffer;
+ BufMax := StaticBufferSize;
+ BufSize := 1;
+ Buffer[0] := Found;
+ repeat
+ Inc(Found, OldLen);
+ Found := PosExFunction[IgnoreCase](OldPattern, S, Found);
+ if Found > 0 then
+ begin
+ if BufSize = BufMax then
+ begin {Create or Expand Dynamic Buffer}
+ BufMax := BufMax + (BufMax shr 1); {Grow by 50%}
+ if Buffer = @StaticBuffer then
+ begin {Create Dynamic Buffer}
+ GetMem(Buffer, BufMax * SizeOf(integer));
+ ALStringReplaceMoveEx(StaticBuffer, Buffer^, SizeOf(StaticBuffer));
+ end
+ else {Expand Dynamic Buffer}
+ ReallocMem(Buffer, BufMax * SizeOf(integer));
+ end;
+ Buffer[BufSize] := Found;
+ Inc(BufSize);
+ end
+ until Found = 0;
+ SetLength(Result, SrcLen + (BufSize * (NewLen - OldLen)));
+ PSrc := Pointer(S);
+ PRes := Pointer(Result);
+ Start := 1;
+ Match := 0;
+ repeat
+ Found := Buffer[Match];
+ Count := Found - Start;
+ Start := Found + OldLen;
+ if Count > 0 then
+ begin
+ ALStringReplaceMoveEx(PSrc^, PRes^, Count);
+ Inc(PRes, Count);
+ end;
+ Inc(PSrc, Count + OldLen);
+ ALStringReplaceMoveEx(Pointer(NewPattern)^, PRes^, NewLen);
+ Inc(PRes, NewLen);
+ Inc(Match);
+ until Match = BufSize;
+ Dec(SrcLen, Start);
+ if SrcLen >= 0 then
+ ALStringReplaceMoveEx(PSrc^, PRes^, SrcLen + 1);
+ if BufMax <> StaticBufferSize then
+ FreeMem(Buffer); {Free Dynamic Buffwe if Created}
+ end
+ else {No Matches Found}
+ Result := S;
+ end
+ else
+ begin {Replace First Occurance Only}
+ Found := PosExFunction[IgnoreCase](OldPattern, S, 1);
+ if Found <> 0 then
+ begin {Match Found}
+ SetLength(Result, SrcLen - OldLen + NewLen);
+ Dec(Found);
+ PSrc := Pointer(S);
+ PRes := Pointer(Result);
+ if NewLen = OldLen then
+ begin
+ ALStringReplaceMoveEx(PSrc^, PRes^, SrcLen);
+ Inc(PRes, Found);
+ ALStringReplaceMoveEx(Pointer(NewPattern)^, PRes^, NewLen);
+ end
+ else
+ begin
+ ALStringReplaceMoveEx(PSrc^, PRes^, Found);
+ Inc(PRes, Found);
+ Inc(PSrc, Found + OldLen);
+ ALStringReplaceMoveEx(Pointer(NewPattern)^, PRes^, NewLen);
+ Inc(PRes, NewLen);
+ ALStringReplaceMoveEx(PSrc^, PRes^, SrcLen - Found - OldLen);
+ end;
+ end
+ else {No Matches Found}
+ Result := S;
+ end;
+ end;
+end;
+
+
+ ////////////////////////////////////////////////////////////////
+ //////////ALUpperCase from FastCode Aleksandr Sharahov//////////
+ ////////////////////////////////////////////////////////////////
+
+{********************************************}
+function AlUpperCase(const s: String): String;
+asm
+ push ebx
+ push esi
+ push edi
+ mov esi, eax // s
+ mov eax, edx
+ test esi, esi
+ jz @nil
+ mov ebx, [esi-4] // Length(s)
+ mov edx, ebx
+ mov edi, eax // @Result
+ add ebx, -1
+ jl @nil
+ and ebx, -4
+ call System.@LStrSetLength
+ mov eax, [ebx+esi]
+ mov edi, [edi] // Result
+
+ @loop: mov ecx, eax
+ or eax, $80808080 // $E1..$FA
+ mov edx, eax
+ sub eax, $7B7B7B7B // $66..$7F
+ xor edx, ecx // $80
+ or eax, $80808080 // $E6..$FF
+ sub eax, $66666666 // $80..$99
+ and eax, edx // $80
+ shr eax, 2 // $20
+ xor eax, ecx // Upper
+ mov[ebx+edi], eax
+ mov eax, [ebx+esi-4]
+ sub ebx, 4
+ jge @loop
+
+ pop edi
+ pop esi
+ pop ebx
+ ret
+
+ @nil: pop edi
+ pop esi
+ pop ebx
+ jmp System.@LStrClr // Result:=''
+end;
+
+{********************************************}
+function ALLowerCase(const s: String): String;
+asm
+ push ebx
+ push esi
+ push edi
+ mov esi, eax // s
+ mov eax, edx
+ test esi, esi
+ jz @nil
+ mov ebx, [esi-4] // Length(s)
+ mov edx, ebx
+ mov edi, eax // @Result
+ add ebx, -1
+ jl @nil
+ and ebx, -4
+ call System.@LStrSetLength
+ mov eax, [ebx+esi]
+ mov edi, [edi] // Result
+
+ @loop: mov ecx, eax
+ or eax, $80808080 // $C1..$DA
+ mov edx, eax
+ sub eax, $5B5B5B5B // $66..$7F
+ xor edx, ecx // $80
+ or eax, $80808080 // $E6..$FF
+ sub eax, $66666666 // $80..$99
+ and eax, edx // $80
+ shr eax, 2 // $20
+ xor eax, ecx // Lower
+ mov[ebx+edi], eax
+ mov eax, [ebx+esi-4]
+ sub ebx, 4
+ jge @loop
+
+ pop edi
+ pop esi
+ pop ebx
+ ret
+
+ @nil: pop edi
+ pop esi
+ pop ebx
+ jmp System.@LStrClr // Result:=''
+end;
+
+
+ ///////////////////////////
+ //////////Alcinoe//////////
+ ///////////////////////////
+
+{********************************************************************************}
+function ALCopyStr(const aSourceString: String; aStart, aLength: Integer): String;
+var
+ SourceStringLength: Integer;
+begin
+ SourceStringLength := Length(aSourceString);
+ if (aStart < 1) then
+ aStart := 1;
+
+ if (SourceStringLength = 0) or
+ (aLength < 1) or
+ (aStart > SourceStringLength) then
+ begin
+ Result := '';
+ Exit;
+ end;
+
+ if aLength > SourceStringLength - (aStart - 1) then
+ aLength := SourceStringLength - (aStart - 1);
+
+ SetLength(Result, aLength);
+ ALMove(aSourceString[aStart], Result[1], aLength);
+end;
+
+{************}
+var
+ Ch: char;
+
+
+//***********************************************************************
+
+
+function AlSMTPClientParseEmail(FriendlyEmail: String; var FriendlyName: String): String;
+var
+ I, J: Integer;
+ Flag: Boolean;
+ Delim: char;
+begin
+ Result := '';
+ FriendlyName := '';
+ Flag := (ALCharPos('<', FriendlyEmail) > 0);
+ { Skip spaces }
+ I := 1;
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] = ' ') do
+ Inc(I);
+ if I > Length(FriendlyEmail) then
+ Exit;
+ { Check if quoted string }
+ if FriendlyEmail[I] in ['"', ''''] then
+ begin
+ Delim := FriendlyEmail[I];
+ { Skip opening quote }
+ Inc(I);
+ { Go to closing quote }
+ J := I;
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> Delim) do
+ Inc(I);
+ FriendlyName := AlCopyStr(FriendlyEmail, J, I - J);
+ Inc(I);
+ if Flag then
+ begin
+ { Go to less-than sign }
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '<') do
+ Inc(I);
+ Inc(I);
+ J := I;
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '>') do
+ Inc(I);
+ Result := AlCopyStr(FriendlyEmail, J, I - J);
+ end
+ else
+ Result := Trim(AlCopyStr(FriendlyEmail, I, Length(FriendlyEmail)));
+ end
+ else if Flag then
+ begin
+ { Go to less-than sign }
+ J := I;
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '<') do
+ Inc(I);
+ FriendlyName := Trim(AlCopyStr(FriendlyEmail, J, I - J));
+ Inc(I);
+ { Go to greater-than sign }
+ J := I;
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> '>') do
+ Inc(I);
+ Result := AlCopyStr(FriendlyEmail, J, I - J);
+ end
+ else
+ begin
+ { No <..>, goto next space }
+ J := I;
+ while (I <= Length(FriendlyEmail)) and (FriendlyEmail[I] <> ' ') do
+ Inc(I);
+ FriendlyName := Trim(AlCopyStr(FriendlyEmail, J, I - J));
+ Result := Trim(AlCopyStr(FriendlyEmail, I + 1, Length(FriendlyEmail)));
+ end;
+ if (Result = '') and (AlCharPos('@', FriendlyName) > 0) then
+ begin
+ Result := FriendlyName;
+ FriendlyName := '';
+ end;
+end;
+
+{*********************************************}
+function AlSMTPClientGenerateMessageID: String;
+begin
+ Result := AlStringReplace(ALMakeKeyStrByGUID, '-', '', [rfReplaceAll]) + '@' + AlGetLocalHostName;
+end;
+
+
+ {***********************************}
+ {Perform Forward Move of 0..36 Bytes}
+ {On Entry, ECX = Count, EAX = Source+Count, EDX = Dest+Count. Destroys ECX}
+procedure ALSmallForwardMove;
+asm
+ jmp dword ptr [@@FwdJumpTable+ecx*4]
+ nop {Align Jump Table}
+ @@FwdJumpTable:
+ dd @@Done {Removes need to test for zero size move}
+ dd @@Fwd01, @@Fwd02, @@Fwd03, @@Fwd04, @@Fwd05, @@Fwd06, @@Fwd07, @@Fwd08
+ dd @@Fwd09, @@Fwd10, @@Fwd11, @@Fwd12, @@Fwd13, @@Fwd14, @@Fwd15, @@Fwd16
+ dd @@Fwd17, @@Fwd18, @@Fwd19, @@Fwd20, @@Fwd21, @@Fwd22, @@Fwd23, @@Fwd24
+ dd @@Fwd25, @@Fwd26, @@Fwd27, @@Fwd28, @@Fwd29, @@Fwd30, @@Fwd31, @@Fwd32
+ dd @@Fwd33, @@Fwd34, @@Fwd35, @@Fwd36
+ @@Fwd36:
+ mov ecx, [eax-36]
+ mov[edx-36], ecx
+ @@Fwd32:
+ mov ecx, [eax-32]
+ mov[edx-32], ecx
+ @@Fwd28:
+ mov ecx, [eax-28]
+ mov[edx-28], ecx
+ @@Fwd24:
+ mov ecx, [eax-24]
+ mov[edx-24], ecx
+ @@Fwd20:
+ mov ecx, [eax-20]
+ mov[edx-20], ecx
+ @@Fwd16:
+ mov ecx, [eax-16]
+ mov[edx-16], ecx
+ @@Fwd12:
+ mov ecx, [eax-12]
+ mov[edx-12], ecx
+ @@Fwd08:
+ mov ecx, [eax-8]
+ mov[edx-8], ecx
+ @@Fwd04:
+ mov ecx, [eax-4]
+ mov[edx-4], ecx
+ ret
+ nop
+ @@Fwd35:
+ mov ecx, [eax-35]
+ mov[edx-35], ecx
+ @@Fwd31:
+ mov ecx, [eax-31]
+ mov[edx-31], ecx
+ @@Fwd27:
+ mov ecx, [eax-27]
+ mov[edx-27], ecx
+ @@Fwd23:
+ mov ecx, [eax-23]
+ mov[edx-23], ecx
+ @@Fwd19:
+ mov ecx, [eax-19]
+ mov[edx-19], ecx
+ @@Fwd15:
+ mov ecx, [eax-15]
+ mov[edx-15], ecx
+ @@Fwd11:
+ mov ecx, [eax-11]
+ mov[edx-11], ecx
+ @@Fwd07:
+ mov ecx, [eax-7]
+ mov[edx-7], ecx
+ mov ecx, [eax-4]
+ mov[edx-4], ecx
+ ret
+ nop
+ @@Fwd03:
+ movzx ecx, word ptr [eax-3]
+ mov[edx-3], cx
+ movzx ecx, byte ptr [eax-1]
+ mov[edx-1], cl
+ ret
+ @@Fwd34:
+ mov ecx, [eax-34]
+ mov[edx-34], ecx
+ @@Fwd30:
+ mov ecx, [eax-30]
+ mov[edx-30], ecx
+ @@Fwd26:
+ mov ecx, [eax-26]
+ mov[edx-26], ecx
+ @@Fwd22:
+ mov ecx, [eax-22]
+ mov[edx-22], ecx
+ @@Fwd18:
+ mov ecx, [eax-18]
+ mov[edx-18], ecx
+ @@Fwd14:
+ mov ecx, [eax-14]
+ mov[edx-14], ecx
+ @@Fwd10:
+ mov ecx, [eax-10]
+ mov[edx-10], ecx
+ @@Fwd06:
+ mov ecx, [eax-6]
+ mov[edx-6], ecx
+ @@Fwd02:
+ movzx ecx, word ptr [eax-2]
+ mov[edx-2], cx
+ ret
+ nop
+ nop
+ nop
+ @@Fwd33:
+ mov ecx, [eax-33]
+ mov[edx-33], ecx
+ @@Fwd29:
+ mov ecx, [eax-29]
+ mov[edx-29], ecx
+ @@Fwd25:
+ mov ecx, [eax-25]
+ mov[edx-25], ecx
+ @@Fwd21:
+ mov ecx, [eax-21]
+ mov[edx-21], ecx
+ @@Fwd17:
+ mov ecx, [eax-17]
+ mov[edx-17], ecx
+ @@Fwd13:
+ mov ecx, [eax-13]
+ mov[edx-13], ecx
+ @@Fwd09:
+ mov ecx, [eax-9]
+ mov[edx-9], ecx
+ @@Fwd05:
+ mov ecx, [eax-5]
+ mov[edx-5], ecx
+ @@Fwd01:
+ movzx ecx, byte ptr [eax-1]
+ mov[edx-1], cl
+ ret
+ @@Done:
+end;
+
+ {************************************}
+ {Perform Backward Move of 0..36 Bytes}
+ {On Entry, ECX = Count, EAX = Source, EDX = Dest. Destroys ECX}
+procedure ALSmallBackwardMove;
+asm
+ jmp dword ptr [@@BwdJumpTable+ecx*4]
+ nop {Align Jump Table}
+ @@BwdJumpTable:
+ dd @@Done {Removes need to test for zero size move}
+ dd @@Bwd01, @@Bwd02, @@Bwd03, @@Bwd04, @@Bwd05, @@Bwd06, @@Bwd07, @@Bwd08
+ dd @@Bwd09, @@Bwd10, @@Bwd11, @@Bwd12, @@Bwd13, @@Bwd14, @@Bwd15, @@Bwd16
+ dd @@Bwd17, @@Bwd18, @@Bwd19, @@Bwd20, @@Bwd21, @@Bwd22, @@Bwd23, @@Bwd24
+ dd @@Bwd25, @@Bwd26, @@Bwd27, @@Bwd28, @@Bwd29, @@Bwd30, @@Bwd31, @@Bwd32
+ dd @@Bwd33, @@Bwd34, @@Bwd35, @@Bwd36
+ @@Bwd36:
+ mov ecx, [eax+32]
+ mov[edx+32], ecx
+ @@Bwd32:
+ mov ecx, [eax+28]
+ mov[edx+28], ecx
+ @@Bwd28:
+ mov ecx, [eax+24]
+ mov[edx+24], ecx
+ @@Bwd24:
+ mov ecx, [eax+20]
+ mov[edx+20], ecx
+ @@Bwd20:
+ mov ecx, [eax+16]
+ mov[edx+16], ecx
+ @@Bwd16:
+ mov ecx, [eax+12]
+ mov[edx+12], ecx
+ @@Bwd12:
+ mov ecx, [eax+8]
+ mov[edx+8], ecx
+ @@Bwd08:
+ mov ecx, [eax+4]
+ mov[edx+4], ecx
+ @@Bwd04:
+ mov ecx, [eax]
+ mov[edx], ecx
+ ret
+ nop
+ nop
+ nop
+ @@Bwd35:
+ mov ecx, [eax+31]
+ mov[edx+31], ecx
+ @@Bwd31:
+ mov ecx, [eax+27]
+ mov[edx+27], ecx
+ @@Bwd27:
+ mov ecx, [eax+23]
+ mov[edx+23], ecx
+ @@Bwd23:
+ mov ecx, [eax+19]
+ mov[edx+19], ecx
+ @@Bwd19:
+ mov ecx, [eax+15]
+ mov[edx+15], ecx
+ @@Bwd15:
+ mov ecx, [eax+11]
+ mov[edx+11], ecx
+ @@Bwd11:
+ mov ecx, [eax+7]
+ mov[edx+7], ecx
+ @@Bwd07:
+ mov ecx, [eax+3]
+ mov[edx+3], ecx
+ mov ecx, [eax]
+ mov[edx], ecx
+ ret
+ nop
+ nop
+ nop
+ @@Bwd03:
+ movzx ecx, word ptr [eax+1]
+ mov[edx+1], cx
+ movzx ecx, byte ptr [eax]
+ mov[edx], cl
+ ret
+ nop
+ nop
+ @@Bwd34:
+ mov ecx, [eax+30]
+ mov[edx+30], ecx
+ @@Bwd30:
+ mov ecx, [eax+26]
+ mov[edx+26], ecx
+ @@Bwd26:
+ mov ecx, [eax+22]
+ mov[edx+22], ecx
+ @@Bwd22:
+ mov ecx, [eax+18]
+ mov[edx+18], ecx
+ @@Bwd18:
+ mov ecx, [eax+14]
+ mov[edx+14], ecx
+ @@Bwd14:
+ mov ecx, [eax+10]
+ mov[edx+10], ecx
+ @@Bwd10:
+ mov ecx, [eax+6]
+ mov[edx+6], ecx
+ @@Bwd06:
+ mov ecx, [eax+2]
+ mov[edx+2], ecx
+ @@Bwd02:
+ movzx ecx, word ptr [eax]
+ mov[edx], cx
+ ret
+ nop
+ @@Bwd33:
+ mov ecx, [eax+29]
+ mov[edx+29], ecx
+ @@Bwd29:
+ mov ecx, [eax+25]
+ mov[edx+25], ecx
+ @@Bwd25:
+ mov ecx, [eax+21]
+ mov[edx+21], ecx
+ @@Bwd21:
+ mov ecx, [eax+17]
+ mov[edx+17], ecx
+ @@Bwd17:
+ mov ecx, [eax+13]
+ mov[edx+13], ecx
+ @@Bwd13:
+ mov ecx, [eax+9]
+ mov[edx+9], ecx
+ @@Bwd09:
+ mov ecx, [eax+5]
+ mov[edx+5], ecx
+ @@Bwd05:
+ mov ecx, [eax+1]
+ mov[edx+1], ecx
+ @@Bwd01:
+ movzx ecx, byte ptr[eax]
+ mov[edx], cl
+ ret
+ nop
+ nop
+ @@Done:
+end;
+
+var
+ VALMove_PrefetchLimit: Integer;
+
+ {***********************************************************}
+ {Dest MUST be 16-Byes Aligned, Count MUST be multiple of 16 }
+procedure ALAlignedFwdMoveSSE(const Source; var Dest; Count: Integer);
+const
+ Prefetch = 512;
+asm
+ push ebx
+ mov ebx, eax {ebx = Source}
+ mov eax, ecx {EAX = Count}
+ and eax, -128 {EAX = No of Bytes to Block Move}
+ add ebx, eax
+ add edx, eax
+ shr eax, 3 {EAX = No of QWORD's to Block Move}
+ neg eax
+ cmp eax, VALMove_PrefetchLimit {Count > Limit - Use Prefetch}
+ jl @Large
+ @Small:
+ test ebx, 15 {Check if Both Source/Dest are Aligned}
+ jnz @SmallUnaligned
+ @SmallAligned: {Both Source and Dest 16-Byte Aligned}
+
+ nop {Align Loops}
+ nop
+ nop
+
+ @SmallAlignedLoop:
+ movaps xmm0, [ebx+8*eax]
+ movaps xmm1, [ebx+8*eax+16]
+ movaps xmm2, [ebx+8*eax+32]
+ movaps xmm3, [ebx+8*eax+48]
+ movaps[edx+8*eax], xmm0
+ movaps[edx+8*eax+16], xmm1
+ movaps[edx+8*eax+32], xmm2
+ movaps[edx+8*eax+48], xmm3
+ movaps xmm4, [ebx+8*eax+64]
+ movaps xmm5, [ebx+8*eax+80]
+ movaps xmm6, [ebx+8*eax+96]
+ movaps xmm7, [ebx+8*eax+112]
+ movaps[edx+8*eax+64], xmm4
+ movaps[edx+8*eax+80], xmm5
+ movaps[edx+8*eax+96], xmm6
+ movaps[edx+8*eax+112], xmm7
+ add eax, 16
+ js @SmallAlignedLoop
+ jmp @Remainder
+
+ @SmallUnaligned: {Source Not 16-Byte Aligned}
+ @SmallUnalignedLoop:
+ movups xmm0, [ebx+8*eax]
+ movups xmm1, [ebx+8*eax+16]
+ movups xmm2, [ebx+8*eax+32]
+ movups xmm3, [ebx+8*eax+48]
+ movaps[edx+8*eax], xmm0
+ movaps[edx+8*eax+16], xmm1
+ movaps[edx+8*eax+32], xmm2
+ movaps[edx+8*eax+48], xmm3
+ movups xmm4, [ebx+8*eax+64]
+ movups xmm5, [ebx+8*eax+80]
+ movups xmm6, [ebx+8*eax+96]
+ movups xmm7, [ebx+8*eax+112]
+ movaps[edx+8*eax+64], xmm4
+ movaps[edx+8*eax+80], xmm5
+ movaps[edx+8*eax+96], xmm6
+ movaps[edx+8*eax+112], xmm7
+ add eax, 16
+ js @SmallUnalignedLoop
+ jmp @Remainder
+
+ @Large:
+ test ebx, 15 {Check if Both Source/Dest Aligned}
+ jnz @LargeUnaligned
+ @LargeAligned: {Both Source and Dest 16-Byte Aligned}
+ @LargeAlignedLoop:
+ prefetchnta[ebx+8*eax+Prefetch]
+ prefetchnta[ebx+8*eax+Prefetch+64]
+ movaps xmm0, [ebx+8*eax]
+ movaps xmm1, [ebx+8*eax+16]
+ movaps xmm2, [ebx+8*eax+32]
+ movaps xmm3, [ebx+8*eax+48]
+ movntps[edx+8*eax], xmm0
+ movntps[edx+8*eax+16], xmm1
+ movntps[edx+8*eax+32], xmm2
+ movntps[edx+8*eax+48], xmm3
+ movaps xmm4, [ebx+8*eax+64]
+ movaps xmm5, [ebx+8*eax+80]
+ movaps xmm6, [ebx+8*eax+96]
+ movaps xmm7, [ebx+8*eax+112]
+ movntps[edx+8*eax+64], xmm4
+ movntps[edx+8*eax+80], xmm5
+ movntps[edx+8*eax+96], xmm6
+ movntps[edx+8*eax+112], xmm7
+ add eax, 16
+ js @LargeAlignedLoop
+ sfence
+ jmp @Remainder
+
+ @LargeUnaligned: {Source Not 16-Byte Aligned}
+ @LargeUnalignedLoop:
+ prefetchnta[ebx+8*eax+Prefetch]
+ prefetchnta[ebx+8*eax+Prefetch+64]
+ movups xmm0, [ebx+8*eax]
+ movups xmm1, [ebx+8*eax+16]
+ movups xmm2, [ebx+8*eax+32]
+ movups xmm3, [ebx+8*eax+48]
+ movntps[edx+8*eax], xmm0
+ movntps[edx+8*eax+16], xmm1
+ movntps[edx+8*eax+32], xmm2
+ movntps[edx+8*eax+48], xmm3
+ movups xmm4, [ebx+8*eax+64]
+ movups xmm5, [ebx+8*eax+80]
+ movups xmm6, [ebx+8*eax+96]
+ movups xmm7, [ebx+8*eax+112]
+ movntps[edx+8*eax+64], xmm4
+ movntps[edx+8*eax+80], xmm5
+ movntps[edx+8*eax+96], xmm6
+ movntps[edx+8*eax+112], xmm7
+ add eax, 16
+ js @LargeUnalignedLoop
+ sfence
+
+ @Remainder:
+ and ecx, $7F {ECX = Remainder (0..112 - Multiple of 16)}
+ jz @Done
+ add ebx, ecx
+ add edx, ecx
+ neg ecx
+ @RemainderLoop:
+ movups xmm0, [ebx+ecx]
+ movaps[edx+ecx], xmm0
+ add ecx, 16
+ jnz @RemainderLoop
+ @Done:
+ pop ebx
+end;
+
+ {****************************************************************************}
+ {Move ECX Bytes from EAX to EDX, where EAX > EDX and ECX > 36 (SMALLMOVESIZE)}
+procedure ALForwards_SSE;
+const
+ LARGESIZE = 2048;
+asm
+ cmp ecx, LARGESIZE
+ jge @FwdLargeMove
+ cmp ecx, CALMOVE_SMALLMOVESIZE+32
+ movups xmm0, [eax]
+ jg @FwdMoveSSE
+ movups xmm1, [eax+16]
+ movups[edx], xmm0
+ movups[edx+16], xmm1
+ add eax, ecx
+ add edx, ecx
+ sub ecx, 32
+ jmp ALSmallForwardMove
+ @FwdMoveSSE:
+ push ebx
+ mov ebx, edx
+ {Align Writes}
+ add eax, ecx
+ add ecx, edx
+ add edx, 15
+ and edx, -16
+ sub ecx, edx
+ add edx, ecx
+ {Now Aligned}
+ sub ecx, 32
+ neg ecx
+ @FwdLoopSSE:
+ movups xmm1, [eax+ecx-32]
+ movups xmm2, [eax+ecx-16]
+ movaps[edx+ecx-32], xmm1
+ movaps[edx+ecx-16], xmm2
+ add ecx, 32
+ jle @FwdLoopSSE
+ movups[ebx], xmm0 {First 16 Bytes}
+ neg ecx
+ add ecx, 32
+ pop ebx
+ jmp ALSmallForwardMove
+ @FwdLargeMove:
+ push ebx
+ mov ebx, ecx
+ test edx, 15
+ jz @FwdLargeAligned
+ {16 byte Align Destination}
+ mov ecx, edx
+ add ecx, 15
+ and ecx, -16
+ sub ecx, edx
+ add eax, ecx
+ add edx, ecx
+ sub ebx, ecx
+ {Destination now 16 Byte Aligned}
+ call ALSmallForwardMove
+ mov ecx, ebx
+ @FwdLargeAligned:
+ and ecx, -16
+ sub ebx, ecx {EBX = Remainder}
+ push edx
+ push eax
+ push ecx
+ call ALAlignedFwdMoveSSE
+ pop ecx
+ pop eax
+ pop edx
+ add ecx, ebx
+ add eax, ecx
+ add edx, ecx
+ mov ecx, ebx
+ pop ebx
+ jmp ALSmallForwardMove
+end;
+
+ {****************************************************************************}
+ {Move ECX Bytes from EAX to EDX, where EAX < EDX and ECX > 36 (SMALLMOVESIZE)}
+procedure ALBackwards_SSE;
+asm
+ cmp ecx, CALMOVE_SMALLMOVESIZE+32
+ jg @BwdMoveSSE
+ sub ecx, 32
+ movups xmm1, [eax+ecx]
+ movups xmm2, [eax+ecx+16]
+ movups[edx+ecx], xmm1
+ movups[edx+ecx+16], xmm2
+ jmp ALSmallBackwardMove
+ @BwdMoveSSE:
+ push ebx
+ movups xmm0, [eax+ecx-16] {Last 16 Bytes}
+ {Align Writes}
+ lea ebx, [edx+ecx]
+ and ebx, 15
+ sub ecx, ebx
+ add ebx, ecx
+ {Now Aligned}
+ sub ecx, 32
+ @BwdLoop:
+ movups xmm1, [eax+ecx]
+ movups xmm2, [eax+ecx+16]
+ movaps[edx+ecx], xmm1
+ movaps[edx+ecx+16], xmm2
+ sub ecx, 32
+ jge @BwdLoop
+ movups[edx+ebx-16], xmm0 {Last 16 Bytes}
+ add ecx, 32
+ pop ebx
+ jmp ALSmallBackwardMove
+end;
+
+ {******************************}
+ {Move using SSE Instruction Set}
+procedure ALMove_SSE(const Source; var Dest; Count: Integer);
+asm
+ cmp ecx, CALMOVE_SMALLMOVESIZE
+ ja @Large {Count > SMALLMOVESIZE or Count < 0}
+ cmp eax, edx
+ jbe @SmallCheck
+ add eax, ecx
+ add edx, ecx
+ jmp ALSmallForwardMove
+ @SmallCheck:
+ jne ALSmallBackwardMove
+ ret {For Compatibility with Delphi's move for Source = Dest}
+ @Large:
+ jng @Done {For Compatibility with Delphi's move for Count < 0}
+ cmp eax, edx
+ ja ALForwards_SSE
+ je @Done {For Compatibility with Delphi's move for Source = Dest}
+ sub edx, ecx
+ cmp eax, edx
+ lea edx, [edx+ecx]
+ jna ALForwards_SSE
+ jmp ALBackwards_SSE {Source/Dest Overlap}
+ @Done:
+end;
+
+ {****************************************************************************}
+ {Move ECX Bytes from EAX to EDX, where EAX > EDX and ECX > 36 (SMALLMOVESIZE)}
+procedure ALForwards_IA32;
+asm
+ push ebx
+ mov ebx, edx
+ fild qword ptr [eax]
+ add eax, ecx {QWORD Align Writes}
+ add ecx, edx
+ add edx, 7
+ and edx, -8
+ sub ecx, edx
+ add edx, ecx {Now QWORD Aligned}
+ sub ecx, 16
+ neg ecx
+ @FwdLoop:
+ fild qword ptr [eax+ecx-16]
+ fistp qword ptr [edx+ecx-16]
+ fild qword ptr [eax+ecx-8]
+ fistp qword ptr [edx+ecx-8]
+ add ecx, 16
+ jle @FwdLoop
+ fistp qword ptr [ebx]
+ neg ecx
+ add ecx, 16
+ pop ebx
+ jmp ALSmallForwardMove
+end;
+
+ {****************************************************************************}
+ {Move ECX Bytes from EAX to EDX, where EAX > EDX and ECX > 36 (SMALLMOVESIZE)}
+procedure ALForwards_MMX;
+const
+ LARGESIZE = 1024;
+asm
+ cmp ecx, LARGESIZE
+ jge @FwdLargeMove
+ cmp ecx, 72 {Size at which using MMX becomes worthwhile}
+ jl ALForwards_IA32
+ push ebx
+ mov ebx, edx
+ movq mm0, [eax] {First 8 Bytes}
+ {QWORD Align Writes}
+ add eax, ecx
+ add ecx, edx
+ add edx, 7
+ and edx, -8
+ sub ecx, edx
+ add edx, ecx
+ {Now QWORD Aligned}
+ sub ecx, 32
+ neg ecx
+ @FwdLoopMMX:
+ movq mm1, [eax+ecx-32]
+ movq mm2, [eax+ecx-24]
+ movq mm3, [eax+ecx-16]
+ movq mm4, [eax+ecx- 8]
+ movq[edx+ecx-32], mm1
+ movq[edx+ecx-24], mm2
+ movq[edx+ecx-16], mm3
+ movq[edx+ecx- 8], mm4
+ add ecx, 32
+ jle @FwdLoopMMX
+ movq[ebx], mm0 {First 8 Bytes}
+ emms
+ pop ebx
+ neg ecx
+ add ecx, 32
+ jmp ALSmallForwardMove
+ @FwdLargeMove:
+ push ebx
+ mov ebx, ecx
+ test edx, 15
+ jz @FwdAligned
+ {16 byte Align Destination}
+ mov ecx, edx
+ add ecx, 15
+ and ecx, -16
+ sub ecx, edx
+ add eax, ecx
+ add edx, ecx
+ sub ebx, ecx
+ {Destination now 16 Byte Aligned}
+ call ALSmallForwardMove
+ @FwdAligned:
+ mov ecx, ebx
+ and ecx, -16
+ sub ebx, ecx {EBX = Remainder}
+ push esi
+ push edi
+ mov esi, eax {ESI = Source}
+ mov edi, edx {EDI = Dest}
+ mov eax, ecx {EAX = Count}
+ and eax, -64 {EAX = No of Bytes to Blocks Moves}
+ and ecx, $3F {ECX = Remaining Bytes to Move (0..63)}
+ add esi, eax
+ add edi, eax
+ shr eax, 3 {EAX = No of QWORD's to Block Move}
+ neg eax
+ @MMXcopyloop:
+ movq mm0, [esi+eax*8 ]
+ movq mm1, [esi+eax*8+ 8]
+ movq mm2, [esi+eax*8+16]
+ movq mm3, [esi+eax*8+24]
+ movq mm4, [esi+eax*8+32]
+ movq mm5, [esi+eax*8+40]
+ movq mm6, [esi+eax*8+48]
+ movq mm7, [esi+eax*8+56]
+ movq[edi+eax*8 ], mm0
+ movq[edi+eax*8+ 8], mm1
+ movq[edi+eax*8+16], mm2
+ movq[edi+eax*8+24], mm3
+ movq[edi+eax*8+32], mm4
+ movq[edi+eax*8+40], mm5
+ movq[edi+eax*8+48], mm6
+ movq[edi+eax*8+56], mm7
+ add eax, 8
+ jnz @MMXcopyloop
+ emms {Empty MMX State}
+ add ecx, ebx
+ shr ecx, 2
+ rep movsd
+ mov ecx, ebx
+ and ecx, 3
+ rep movsb
+ pop edi
+ pop esi
+ pop ebx
+end;
+
+ {****************************************************************************}
+ {Move ECX Bytes from EAX to EDX, where EAX < EDX and ECX > 36 (SMALLMOVESIZE)}
+procedure ALBackwards_IA32;
+asm
+ push ebx
+ fild qword ptr [eax+ecx-8]
+ lea ebx, [edx+ecx] {QWORD Align Writes}
+ and ebx, 7
+ sub ecx, ebx
+ add ebx, ecx {Now QWORD Aligned, EBX = Original Length}
+ sub ecx, 16
+ @BwdLoop:
+ fild qword ptr [eax+ecx]
+ fild qword ptr [eax+ecx+8]
+ fistp qword ptr [edx+ecx+8]
+ fistp qword ptr [edx+ecx]
+ sub ecx, 16
+ jge @BwdLoop
+ fistp qword ptr [edx+ebx-8]
+ add ecx, 16
+ pop ebx
+ jmp ALSmallBackwardMove
+end;
+
+ {****************************************************************************}
+ {Move ECX Bytes from EAX to EDX, where EAX < EDX and ECX > 36 (SMALLMOVESIZE)}
+procedure ALBackwards_MMX;
+asm
+ cmp ecx, 72 {Size at which using MMX becomes worthwhile}
+ jl ALBackwards_IA32
+ push ebx
+ movq mm0, [eax+ecx-8] {Get Last QWORD}
+ {QWORD Align Writes}
+ lea ebx, [edx+ecx]
+ and ebx, 7
+ sub ecx, ebx
+ add ebx, ecx
+ {Now QWORD Aligned}
+ sub ecx, 32
+ @BwdLoopMMX:
+ movq mm1, [eax+ecx ]
+ movq mm2, [eax+ecx+ 8]
+ movq mm3, [eax+ecx+16]
+ movq mm4, [eax+ecx+24]
+ movq[edx+ecx+24], mm4
+ movq[edx+ecx+16], mm3
+ movq[edx+ecx+ 8], mm2
+ movq[edx+ecx ], mm1
+ sub ecx, 32
+ jge @BwdLoopMMX
+ movq[edx+ebx-8], mm0 {Last QWORD}
+ emms
+ add ecx, 32
+ pop ebx
+ jmp ALSmallBackwardMove
+end;
+
+ {******************************}
+ {Move using MMX Instruction Set}
+procedure ALMove_MMX(const Source; var Dest; Count: Integer);
+asm
+ cmp ecx, CALMOVE_SMALLMOVESIZE
+ ja @Large {Count > SMALLMOVESIZE or Count < 0}
+ cmp eax, edx
+ jbe @SmallCheck
+ add eax, ecx
+ add edx, ecx
+ jmp ALSmallForwardMove
+ @SmallCheck:
+ jne ALSmallBackwardMove
+ ret {For Compatibility with Delphi's move for Source = Dest}
+ @Large:
+ jng @Done {For Compatibility with Delphi's move for Count < 0}
+ cmp eax, edx
+ ja ALForwards_MMX
+ je @Done {For Compatibility with Delphi's move for Source = Dest}
+ sub edx, ecx
+ cmp eax, edx
+ lea edx, [edx+ecx]
+ jna ALForwards_MMX
+ jmp ALBackwards_MMX {Source/Dest Overlap}
+ @Done:
+end;
+
+procedure ALMove_IA32(const Source; var Dest; Count: Integer);
+asm
+ cmp ecx, CALMOVE_SMALLMOVESIZE
+ ja @Large {Count > SMALLMOVESIZE or Count < 0}
+ cmp eax, edx
+ jbe @SmallCheck
+ add eax, ecx
+ add edx, ecx
+ jmp ALSmallForwardMove
+ @SmallCheck:
+ jne ALSmallBackwardMove
+ ret {For Compatibility with Delphi's move for Source = Dest}
+ @Large:
+ jng @Done {For Compatibility with Delphi's move for Count < 0}
+ cmp eax, edx
+ ja ALForwards_IA32
+ je @Done {For Compatibility with Delphi's move for Source = Dest}
+ sub edx, ecx
+ cmp eax, edx
+ lea edx, [edx+ecx]
+ jna ALForwards_IA32
+ jmp ALBackwards_IA32 {Source/Dest Overlap}
+ @Done:
+end;
+
+ //***************************************************************************
+ //**** ALCPUID Partial Unit
+ //***************************************************************************
+var
+ VALCPUInfo: TALCPUinfo;
+
+function ALGetCPUInfo: TALCPUinfo;
+begin
+ Result := VALCPUInfo;
+end;
+
+function ALPos_IA32(const SubStr: ansistring; const Str: ansistring): Integer;
+asm
+ test eax, eax
+ jz @NotFoundExit {Exit if SubStr = ''}
+ test edx, edx
+ jz @NotFound {Exit if Str = ''}
+ mov ecx, [edx-4] {Length(Str)}
+ cmp[eax-4], 1 {Length SubStr = 1?}
+ je @SingleChar {Yes - Exit via CharPos}
+ jl @NotFound {Exit if Length(SubStr) < 1}
+ sub ecx, [eax-4] {Subtract Length(SubStr), -ve handled by
+CharPos}
+ add ecx, 1 {Number of Chars to Check for 1st Char}
+ push esi {Save Registers}
+ push edi
+ push ebx
+ push ebp
+ mov ebx, [eax] {BL = 1st Char of SubStr}
+ mov esi, eax {Start Address of SubStr}
+ mov edi, ecx {Initial Remainder Count}
+ mov ebp, edx {Start Address of Str}
+ @StrLoop:
+ mov eax, ebx {AL = 1st char of SubStr for next Search}
+ mov ecx, edi {Remaining Length}
+ push edx {Save Start Position}
+ call @CharPos {Search for 1st Character}
+ pop edx {Restore Start Position}
+ jz @StrExit {Exit with Zero Result if 1st Char Not Found}
+ mov ecx, [esi-4] {Length SubStr}
+ add edx, eax {Update Start Position for Next Loop}
+ sub edi, eax {Update Remaining Length for Next Loop}
+ sub ecx, 1 {Remaining Characters to Compare}
+ @StrCheck:
+ mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str}
+ cmp al, [esi+ecx]
+ jne @StrLoop {Different - Return to First Character Search}
+ sub ecx, 1
+ jg @StrCheck {Check each Remaining Character}
+ mov eax, edx {All Characters Matched - Calculate Result}
+ sub eax, ebp
+ @StrExit:
+ pop ebp {Restore Registers}
+ pop ebx
+ pop edi
+ pop esi
+ ret
+ @NotFound:
+ xor eax, eax {Return 0}
+ @NotFoundExit:
+ ret
+ @SingleChar:
+ mov al, [eax] {Search Character}
+ {Return Position of Character AL within a String of Length ECX starting}
+ {at Address EDX. If Found, Return Index in EAX and Clear Zero Flag, }
+ {otherwise Return 0 in EAX and Set Zero Flag. Changes EAX, ECX and EDX}
+ @CharPos:
+ push ecx {Save Length}
+ neg ecx
+ cmp ecx, -4
+ jle @NotSmall {Length >= 4}
+ or ecx, ecx
+ jge @CharNotFound {Exit if Length <= 0}
+ cmp al, [edx] {Check 1st Char}
+ je @Found
+ add ecx, 1
+ jz @CharNotFound
+ cmp al, [edx+1] {Check 2nd Char}
+ je @Found
+ add ecx, 1
+ jz @CharNotFound
+ cmp al, [edx+2] {Check 3rd Char}
+ je @Found
+ jmp @CharNotFound
+ @NotSmall:
+ sub edx, ecx {End of String}
+ @Loop:
+ cmp al, [edx+ecx] {Compare Next 4 Characters}
+ je @Found
+ cmp al, [edx+ecx+1]
+ je @Found2
+ cmp al, [edx+ecx+2]
+ je @Found3
+ cmp al, [edx+ecx+3]
+ je @Found4
+ add ecx, 4 {Next Character Position}
+ and ecx, -4 {Prevent Read Past Last Character}
+ jnz @Loop {Loop until all Characters Compared}
+ @CharNotFound:
+ pop ecx {Restore Stack}
+ xor eax, eax {Set Result to 0 and Set Zero Flag}
+ ret {Finished}
+ @Found4:
+ add ecx, 1
+ @Found3:
+ add ecx, 1
+ @Found2:
+ add ecx, 1
+ @Found:
+ add ecx, 1
+ pop eax
+ add eax, ecx {Set Result and Clear Zero Flag}
+end;
+
+{***************************************************************************}
+function ALPos_MMX(const SubStr: ansistring; const Str: ansistring): Integer;
+asm
+ test eax, eax
+ jz @NotFoundExit {Exit if SurStr = ''}
+ test edx, edx
+ jz @NotFound {Exit if Str = ''}
+ mov ecx, [edx-4] {Length(Str)}
+ cmp[eax-4], 1 {Length SubStr = 1?}
+ je @SingleChar {Yes - Exit via CharPos}
+ jl @NotFound {Exit if Length(SubStr) < 1}
+ sub ecx, [eax-4] {Subtract Length(SubStr), -ve handled by
+CharPos}
+ add ecx, 1 {Number of Chars to Check for 1st Char}
+ push esi {Save Registers}
+ push edi
+ push ebx
+ push ebp
+ mov esi, eax {Start Address of SubStr}
+ mov edi, ecx {Initial Remainder Count}
+ mov eax, [eax] {AL = 1st Char of SubStr}
+ mov ebp, edx {Start Address of Str}
+ mov ebx, eax {Maintain 1st Search Char in BL}
+ @StrLoop:
+ mov eax, ebx {AL = 1st char of SubStr}
+ mov ecx, edi {Remaining Length}
+ push edx {Save Start Position}
+ call @CharPos {Search for 1st Character}
+ pop edx {Restore Start Position}
+ test eax, eax {Result = 0?}
+ jz @StrExit {Exit if 1st Character Not Found}
+ mov ecx, [esi-4] {Length SubStr}
+ add edx, eax {Update Start Position for Next Loop}
+ sub edi, eax {Update Remaining Length for Next Loop}
+ sub ecx, 1 {Remaining Characters to Compare}
+ @StrCheck:
+ mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str}
+ cmp al, [esi+ecx]
+ jne @StrLoop {Different - Return to First Character Search}
+ sub ecx, 1
+ jnz @StrCheck {Check each Remaining Character}
+ mov eax, edx {All Characters Matched - Calculate Result}
+ sub eax, ebp
+ @StrExit:
+ pop ebp {Restore Registers}
+ pop ebx
+ pop edi
+ pop esi
+ ret
+ @NotFound:
+ xor eax, eax {Return 0}
+ @NotFoundExit:
+ ret
+ @SingleChar:
+ mov al, [eax] {Search Character}
+ @CharPos:
+ CMP ECX, 8
+ JG @@NotSmall
+ @@Small:
+ or ecx, ecx
+ jle @@NotFound {Exit if Length <= 0}
+ CMP AL, [EDX]
+ JZ @Found1
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+1]
+ JZ @Found2
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+2]
+ JZ @Found3
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+3]
+ JZ @Found4
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+4]
+ JZ @Found5
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+5]
+ JZ @Found6
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+6]
+ JZ @Found7
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+7]
+ JZ @Found8
+ @@NotFound:
+ xor EAX, EAX
+ RET
+ @Found1:
+ MOV EAX, 1
+ RET
+ @Found2:
+ MOV EAX, 2
+ RET
+ @Found3:
+ MOV EAX, 3
+ RET
+ @Found4:
+ MOV EAX, 4
+ RET
+ @Found5:
+ MOV EAX, 5
+ RET
+ @Found6:
+ MOV EAX, 6
+ RET
+ @Found7:
+ MOV EAX, 7
+ RET
+ @Found8:
+ MOV EAX, 8
+ RET
+
+ @@NotSmall: {Length(Str) > 8}
+ MOV AH, AL
+ ADD EDX, ECX
+ MOVD MM0, EAX
+ PUNPCKLWD MM0, MM0
+ PUNPCKLDQ MM0, MM0
+ PUSH ECX {Save Length}
+ NEG ECX
+ @@First8:
+ MOVQ MM1, [EDX+ECX]
+ ADD ECX, 8
+ PCMPEQB MM1, MM0 {Compare All 8 Bytes}
+ PACKSSWB MM1, MM1 {Pack Result into 4 Bytes}
+ MOVD EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched {Exit on Match at any Position}
+ CMP ECX, -8 {Check if Next Loop would pass String End}
+ JGE @@Last8
+ @@Align: {Align to Previous 8 Byte Boundary}
+ LEA EAX, [EDX+ECX]
+ and EAX, 7 {EAX -> 0 or 4}
+ SUB ECX, EAX
+ @@Loop:
+ MOVQ MM1, [EDX+ECX]
+ ADD ECX, 8
+ PCMPEQB MM1, MM0 {Compare All 8 Bytes}
+ PACKSSWB MM1, MM1 {Pack Result into 4 Bytes}
+ MOVD EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched {Exit on Match at any Position}
+ CMP ECX, -8 {Check if Next Loop would pass String End}
+{$IFNDEF NoUnroll}
+ JGE @@Last8
+ MOVQ MM1, [EDX+ECX]
+ ADD ECX, 8
+ PCMPEQB MM1, MM0 {Compare All 8 Bytes}
+ PACKSSWB MM1, MM1 {Pack Result into 4 Bytes}
+ MOVD EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched {Exit on Match at any Position}
+ CMP ECX, -8 {Check if Next Loop would pass String End}
+{$ENDIF}
+ JL @@Loop
+ @@Last8:
+ MOVQ MM1, [EDX-8] {Position for Last 8 Used Characters}
+ POP EDX {Original Length}
+ PCMPEQB MM1, MM0 {Compare All 8 Bytes}
+ PACKSSWB MM1, MM1 {Pack Result into 4 Bytes}
+ MOVD EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched2 {Exit on Match at any Position}
+ EMMS
+ RET {Finished - Not Found}
+ @@Matched: {Set Result from 1st Match in EDX}
+ POP EDX {Original Length}
+ ADD EDX, ECX
+ @@Matched2:
+ EMMS
+ SUB EDX, 8 {Adjust for Extra ADD ECX,8 in Loop}
+ TEST AL, AL
+ JNZ @@MatchDone {Match at Position 1 or 2}
+ TEST AH, AH
+ JNZ @@Match1 {Match at Position 3 or 4}
+ shr EAX, 16
+ TEST AL, AL
+ JNZ @@Match2 {Match at Position 5 or 6}
+ shr EAX, 8
+ ADD EDX, 6
+ JMP @@MatchDone
+ @@Match2:
+ ADD EDX, 4
+ JMP @@MatchDone
+ @@Match1:
+ shr EAX, 8 {AL <- AH}
+ ADD EDX, 2
+ @@MatchDone:
+ xor EAX, 2
+ and EAX, 3 {EAX <- 1 or 2}
+ ADD EAX, EDX
+
+end;
+
+{***************************************************************************}
+function ALPos_SSE(const SubStr: ansistring; const Str: ansistring): Integer;
+asm
+ test eax, eax
+ jz @NotFoundExit {Exit if SurStr = ''}
+ test edx, edx
+ jz @NotFound {Exit if Str = ''}
+ mov ecx, [edx-4] {Length(Str)}
+ cmp[eax-4], 1 {Length SubStr = 1?}
+ je @SingleChar {Yes - Exit via CharPos}
+ jl @NotFound {Exit if Length(SubStr) < 1}
+ sub ecx, [eax-4] {Subtract Length(SubStr), -ve handled by
+CharPos}
+ add ecx, 1 {Number of Chars to Check for 1st Char}
+ push esi {Save Registers}
+ push edi
+ push ebx
+ push ebp
+ mov esi, eax {Start Address of SubStr}
+ mov edi, ecx {Initial Remainder Count}
+ mov eax, [eax] {AL = 1st Char of SubStr}
+ mov ebp, edx {Start Address of Str}
+ mov ebx, eax {Maintain 1st Search Char in BL}
+ @StrLoop:
+ mov eax, ebx {AL = 1st char of SubStr}
+ mov ecx, edi {Remaining Length}
+ push edx {Save Start Position}
+ call @CharPos {Search for 1st Character}
+ pop edx {Restore Start Position}
+ test eax, eax {Result = 0?}
+ jz @StrExit {Exit if 1st Character Not Found}
+ mov ecx, [esi-4] {Length SubStr}
+ add edx, eax {Update Start Position for Next Loop}
+ sub edi, eax {Update Remaining Length for Next Loop}
+ sub ecx, 1 {Remaining Characters to Compare}
+ @StrCheck:
+ mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str}
+ cmp al, [esi+ecx]
+ jne @StrLoop {Different - Return to First Character Search}
+ sub ecx, 1
+ jnz @StrCheck {Check each Remaining Character}
+ mov eax, edx {All Characters Matched - Calculate Result}
+ sub eax, ebp
+ @StrExit:
+ pop ebp {Restore Registers}
+ pop ebx
+ pop edi
+ pop esi
+ ret
+ @NotFound:
+ xor eax, eax {Return 0}
+ @NotFoundExit:
+ ret
+ @SingleChar:
+ mov al, [eax] {Search Character}
+ @CharPos:
+ CMP ECX, 8
+ JG @@NotSmall
+ @@Small:
+ or ecx, ecx
+ jle @@NotFound {Exit if Length <= 0}
+ CMP AL, [EDX]
+ JZ @Found1
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+1]
+ JZ @Found2
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+2]
+ JZ @Found3
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+3]
+ JZ @Found4
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+4]
+ JZ @Found5
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+5]
+ JZ @Found6
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+6]
+ JZ @Found7
+ DEC ECX
+ JZ @@NotFound
+ CMP AL, [EDX+7]
+ JZ @Found8
+ @@NotFound:
+ xor EAX, EAX
+ RET
+ @Found1:
+ MOV EAX, 1
+ RET
+ @Found2:
+ MOV EAX, 2
+ RET
+ @Found3:
+ MOV EAX, 3
+ RET
+ @Found4:
+ MOV EAX, 4
+ RET
+ @Found5:
+ MOV EAX, 5
+ RET
+ @Found6:
+ MOV EAX, 6
+ RET
+ @Found7:
+ MOV EAX, 7
+ RET
+ @Found8:
+ MOV EAX, 8
+ RET
+ @@NotSmall:
+ MOV AH, AL
+ ADD EDX, ECX
+ MOVD MM0, EAX
+ PSHUFW MM0, MM0, 0
+ PUSH ECX
+ NEG ECX
+ @@First8:
+ MOVQ MM1, [EDX+ECX]
+ ADD ECX, 8
+ PCMPEQB MM1, MM0 {Compare Next 8 Bytes}
+ PMOVMSKB EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched {Exit on Match at any Position}
+ CMP ECX, -8 {Check if Next Loop would pass String End}
+ JGE @@Last8
+ @@Align:
+ LEA EAX, [EDX+ECX]
+ and EAX, 7
+ SUB ECX, EAX
+ @@Loop: {Loop Unrolled 2X}
+ MOVQ MM1, [EDX+ECX]
+ ADD ECX, 8
+ PCMPEQB MM1, MM0 {Compare Next 8 Bytes}
+ PMOVMSKB EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched {Exit on Match at any Position}
+ CMP ECX, -8 {Check if Next Loop would pass String End}
+{$IFNDEF NoUnroll}
+ JGE @@Last8
+ MOVQ MM1, [EDX+ECX]
+ ADD ECX, 8
+ PCMPEQB MM1, MM0 {Compare Next 8 Bytes}
+ PMOVMSKB EAX, MM1
+ TEST EAX, EAX
+ JNZ @@Matched {Exit on Match at any Position}
+ CMP ECX, -8 {Check if Next Loop would pass String End}
+{$ENDIF}
+ JL @@loop
+ @@Last8:
+ PCMPEQB MM0, [EDX-8]
+ POP ECX {Original Length}
+ PMOVMSKB EAX, MM0
+ TEST EAX, EAX
+ JNZ @@Matched2
+ EMMS
+ RET {Finished}
+ @@Matched: {Set Result from 1st Match in EcX}
+ POP EDX {Original Length}
+ ADD ECX, EDX
+ @@Matched2:
+ EMMS
+ BSF EDX, EAX
+ LEA EAX, [EDX+ECX-7]
+end;
+
+{****************************************************************************}
+function ALPos_SSE2(const SubStr: ansistring; const Str: ansistring): Integer;
+asm
+ test eax, eax
+ jz @NotFoundExit {Exit if SurStr = ''}
+ test edx, edx
+ jz @NotFound {Exit if Str = ''}
+ mov ecx, [edx-4] {Length(Str)}
+ cmp[eax-4], 1 {Length SubStr = 1?}
+ je @SingleChar {Yes - Exit via CharPos}
+ jl @NotFound {Exit if Length(SubStr) < 1}
+ sub ecx, [eax-4] {Subtract Length(SubStr)}
+ jl @NotFound {Exit if Length(SubStr) > Length(Str)}
+ add ecx, 1 {Number of Chars to Check for 1st Char}
+ push esi {Save Registers}
+ push edi
+ push ebx
+ push ebp
+ mov esi, eax {Start Address of SubStr}
+ mov edi, ecx {Initial Remainder Count}
+ mov eax, [eax] {AL = 1st Char of SubStr}
+ mov ebp, edx {Start Address of Str}
+ mov ebx, eax {Maintain 1st Search Char in BL}
+ @StrLoop:
+ mov eax, ebx {AL = 1st char of SubStr}
+ mov ecx, edi {Remaining Length}
+ push edx {Save Start Position}
+ call @CharPos {Search for 1st Character}
+ pop edx {Restore Start Position}
+ test eax, eax {Result = 0?}
+ jz @StrExit {Exit if 1st Character Not Found}
+ mov ecx, [esi-4] {Length SubStr}
+ add edx, eax {Update Start Position for Next Loop}
+ sub edi, eax {Update Remaining Length for Next Loop}
+ sub ecx, 1 {Remaining Characters to Compare}
+ @StrCheck:
+ mov al, [edx+ecx-1] {Compare Next Char of SubStr and Str}
+ cmp al, [esi+ecx]
+ jne @StrLoop {Different - Return to First Character Search}
+ sub ecx, 1
+ jnz @StrCheck {Check each Remaining Character}
+ mov eax, edx {All Characters Matched - Calculate Result}
+ sub eax, ebp
+ @StrExit:
+ pop ebp {Restore Registers}
+ pop ebx
+ pop edi
+ pop esi
+ ret
+ @NotFound:
+ xor eax, eax {Return 0}
+ @NotFoundExit:
+ ret
+ @SingleChar:
+ mov al, [eax] {Search Character}
+ @CharPos:
+ PUSH EBX
+ MOV EBX, EAX
+ CMP ECX, 16
+ JL @@Small
+ @@NotSmall:
+ MOV AH, AL {Fill each Byte of XMM1 with AL}
+ MOVD XMM1, EAX
+ PSHUFLW XMM1, XMM1, 0
+ PSHUFD XMM1, XMM1, 0
+ @@First16:
+ MOVUPS XMM0, [EDX] {Unaligned}
+ PCMPEQB XMM0, XMM1 {Compare First 16 Characters}
+ PMOVMSKB EAX, XMM0
+ TEST EAX, EAX
+ JNZ @@FoundStart {Exit on any Match}
+ CMP ECX, 32
+ JL @@Medium {If Length(Str) < 32, Check Remainder}
+ @@Align:
+ SUB ECX, 16 {Align Block Reads}
+ PUSH ECX
+ MOV EAX, EDX
+ NEG EAX
+ and EAX, 15
+ ADD EDX, ECX
+ NEG ECX
+ ADD ECX, EAX
+ @@Loop:
+ MOVAPS XMM0, [EDX+ECX] {Aligned}
+ PCMPEQB XMM0, XMM1 {Compare Next 16 Characters}
+ PMOVMSKB EAX, XMM0
+ TEST EAX, EAX
+ JNZ @@Found {Exit on any Match}
+ ADD ECX, 16
+ JLE @@Loop
+ @Remainder:
+ POP EAX {Check Remaining Characters}
+ ADD EDX, 16
+ ADD EAX, ECX {Count from Last Loop End Position}
+ JMP DWORD PTR [@@JumpTable2-ECX*4]
+
+ @@NullString:
+ xor EAX, EAX {Result = 0}
+ RET
+
+ @@FoundStart:
+ BSF EAX, EAX {Get Set Bit}
+ POP EBX
+ ADD EAX, 1 {Set Result}
+ RET
+
+ @@Found:
+ POP EDX
+ BSF EAX, EAX {Get Set Bit}
+ ADD EDX, ECX
+ POP EBX
+ LEA EAX, [EAX+EDX+1] {Set Result}
+ RET
+
+ @@Medium:
+ ADD EDX, ECX {End of String}
+ MOV EAX, 16 {Count from 16}
+ JMP DWORD PTR [@@JumpTable1-64-ECX*4]
+
+ @@Small:
+ ADD EDX, ECX {End of String}
+ xor EAX, EAX {Count from 0}
+ JMP DWORD PTR [@@JumpTable1-ECX*4]
+
+ nop;
+ nop;
+ nop {Aligb Jump Tables}
+
+ @@JumpTable1:
+ DD @@NotFound, @@01, @@02, @@03, @@04, @@05, @@06, @@07
+ DD @@08, @@09, @@10, @@11, @@12, @@13, @@14, @@15, @@16
+
+ @@JumpTable2:
+ DD @@16, @@15, @@14, @@13, @@12, @@11, @@10, @@09, @@08
+ DD @@07, @@06, @@05, @@04, @@03, @@02, @@01, @@NotFound
+
+ @@16:
+ ADD EAX, 1
+ CMP BL, [EDX-16]
+ JE @@Done
+ @@15:
+ ADD EAX, 1
+ CMP BL, [EDX-15]
+ JE @@Done
+ @@14:
+ ADD EAX, 1
+ CMP BL, [EDX-14]
+ JE @@Done
+ @@13:
+ ADD EAX, 1
+ CMP BL, [EDX-13]
+ JE @@Done
+ @@12:
+ ADD EAX, 1
+ CMP BL, [EDX-12]
+ JE @@Done
+ @@11:
+ ADD EAX, 1
+ CMP BL, [EDX-11]
+ JE @@Done
+ @@10:
+ ADD EAX, 1
+ CMP BL, [EDX-10]
+ JE @@Done
+ @@09:
+ ADD EAX, 1
+ CMP BL, [EDX-9]
+ JE @@Done
+ @@08:
+ ADD EAX, 1
+ CMP BL, [EDX-8]
+ JE @@Done
+ @@07:
+ ADD EAX, 1
+ CMP BL, [EDX-7]
+ JE @@Done
+ @@06:
+ ADD EAX, 1
+ CMP BL, [EDX-6]
+ JE @@Done
+ @@05:
+ ADD EAX, 1
+ CMP BL, [EDX-5]
+ JE @@Done
+ @@04:
+ ADD EAX, 1
+ CMP BL, [EDX-4]
+ JE @@Done
+ @@03:
+ ADD EAX, 1
+ CMP BL, [EDX-3]
+ JE @@Done
+ @@02:
+ ADD EAX, 1
+ CMP BL, [EDX-2]
+ JE @@Done
+ @@01:
+ ADD EAX, 1
+ CMP BL, [EDX-1]
+ JE @@Done
+ @@NotFound:
+ xor EAX, EAX
+ @@Done:
+ POP EBX
+end;
+
+
+ {**********************************}
+ {Called Once by Unit Initialisation}
+procedure ALInitFastPosFunct;
+var
+ aCpuInfo: TALCpuinfo;
+begin
+ aCpuInfo := AlGetCpuInfo;
+
+ if (isSSE2 in aCpuInfo.InstructionSupport) then
+ ALPos := AlPos_SSE2 {Processor Supports SSE}
+ else if (isSSE in aCpuInfo.InstructionSupport) then
+ ALPos := AlPos_SSE {Processor Supports SSE}
+ else if (isMMX in aCpuInfo.InstructionSupport) then
+ ALPos := AlPos_MMX {Processor Supports MMX}
+ else
+ ALPos := ALPos_IA32; {Processor does not Support MMX or SSE}
+end;
+
+//***************************************************************************
+procedure ALInitFastMovProc;
+var
+ aCpuInfo: TALCpuinfo;
+begin
+ aCpuInfo := AlGetCpuInfo;
+
+ if (isSSE in aCpuInfo.InstructionSupport) then
+ ALMove := AlMove_SSE {Processor Supports SSE}
+ else if (isMMX in aCpuInfo.InstructionSupport) then
+ ALMove := AlMove_MMX {Processor Supports MMX}
+ else
+ ALMove := ALMove_IA32; {Processor does not Support MMX or SSE}
+end;
+
+
+ /////////////////////////////////////////
+ ////////// TALSMTPClientHeader //////////
+ /////////////////////////////////////////
+
+{********************************************************}
+procedure TALSMTPClientHeader.AssignTo(Dest: TPersistent);
+begin
+ if Dest is TALSMTPClientHeader then
+ with Dest as TALSMTPClientHeader do
+ begin
+ fSendTo := self.fSendTo;
+ fSender := self.fSender;
+ fMessageID := self.fMessageID;
+ fbcc := self.fbcc;
+ fContentTransferEncoding := self.fContentTransferEncoding;
+ fComments := self.fComments;
+ fMIMEVersion := self.fMIMEVersion;
+ fPriority := self.fPriority;
+ fReplyTo := self.fReplyTo;
+ fSubject := self.fSubject;
+ fFrom := self.fFrom;
+ fDate := self.fDate;
+ fDispositionNotificationTo := self.fDispositionNotificationTo;
+ fReferences := self.fReferences;
+ fcc := self.fcc;
+ fContentType := self.fContentType;
+ FCustomHeaders.Assign(FCustomHeaders);
+ end
+ else
+ inherited AssignTo(Dest);
+end;
+
+{**********************************}
+procedure TALSMTPClientHeader.Clear;
+begin
+ fSendTo := '';
+ fSender := '';
+ fMessageID := '';
+ fbcc := '';
+ fContentTransferEncoding := '';
+ fComments := '';
+ fMIMEVersion := '';
+ fPriority := '';
+ fReplyTo := '';
+ fSubject := '';
+ fFrom := '';
+ fDate := '';
+ fDispositionNotificationTo := '';
+ fReferences := '';
+ fcc := '';
+ fContentType := '';
+ FCustomHeaders.Clear;
+end;
+
+{*************************************}
+constructor TALSMTPClientHeader.Create;
+begin
+ inherited Create;
+ FCustomHeaders := TStringList.Create;
+ FCustomHeaders.NameValueSeparator := ':';
+ Clear;
+ fMessageID := 'AUTO';
+ fMIMEVersion := '1.0';
+ fDate := 'NOW';
+ fContentType := 'text/plain';
+end;
+
+{*************************************}
+destructor TALSMTPClientHeader.Destroy;
+begin
+ FCustomHeaders.Free;
+ inherited;
+end;
+
+{****************************************************}
+function TALSMTPClientHeader.GetRawHeaderText: String;
+var
+ i: Integer;
+ Str: String;
+begin
+ Result := '';
+ if Trim(fFrom) <> '' then
+ Result := Result + 'From: ' + trim(fFrom) + #13#10;
+ if Trim(fSender) <> '' then
+ Result := Result + 'Sender: ' + trim(fSender) + #13#10;
+ if Trim(fSendTo) <> '' then
+ Result := Result + 'To: ' + trim(fSendTo) + #13#10;
+ if Trim(fcc) <> '' then
+ Result := Result + 'cc: ' + trim(fcc) + #13#10;
+ if Trim(fbcc) <> '' then
+ Result := Result + 'bcc: ' + trim(fbcc) + #13#10;
+ if Trim(fReplyTo) <> '' then
+ Result := Result + 'Reply-To: ' + trim(fReplyTo) + #13#10;
+ if Trim(fSubject) <> '' then
+ Result := Result + 'Subject: ' + trim(fSubject) + #13#10;
+ Str := fMessageID;
+ if Trim(str) <> '' then
+ begin
+ if sametext(Str, 'AUTO') then
+ Str := '<' + AlSMTPClientGenerateMessageID + '>';
+ Result := Result + 'Message-ID: ' + trim(str) + #13#10;
+ end;
+ if Trim(fReferences) <> '' then
+ Result := Result + 'References: ' + trim(fReferences) + #13#10;
+ if Trim(fComments) <> '' then
+ Result := Result + 'Comments: ' + trim(fComments) + #13#10;
+ Str := fDate;
+ if Trim(str) <> '' then
+ begin
+ if sametext(Str, 'NOW') then
+ Str := ALDateTimeToRfc822Str(Now);
+ Result := Result + 'Date: ' + trim(str) + #13#10;
+ end;
+ if Trim(fContentType) <> '' then
+ Result := Result + 'Content-Type: ' + trim(fContentType) + #13#10;
+ if Trim(fContentTransferEncoding) <> '' then
+ Result := Result + 'Content-Transfer-Encoding: ' + trim(fContentTransferEncoding) + #13#10;
+ if Trim(fMIMEVersion) <> '' then
+ Result := Result + 'MIME-Version: ' + trim(fMIMEVersion) + #13#10;
+ if Trim(fPriority) <> '' then
+ Result := Result + 'Priority: ' + trim(fPriority) + #13#10;
+ if Trim(fDispositionNotificationTo) <> '' then
+ Result := Result + 'Disposition-Notification-To: ' + trim(fDispositionNotificationTo) + #13#10;
+ for i := 0 to FCustomHeaders.Count - 1 do
+ if (trim(FCustomHeaders.names[i]) <> '') and (trim(FCustomHeaders.ValueFromIndex[i]) <> '') then
+ Result := Result + FCustomHeaders.names[i] + ': ' + trim(FCustomHeaders.ValueFromIndex[i]) + #13#10;
+end;
+
+{***************************************************************************}
+procedure TALSMTPClientHeader.SetRawHeaderText(const aRawHeaderText: String);
+var
+ aRawHeaderLst: TStringList;
+
+ {-------------------------------------}
+ function AlG001(aName: String): String;
+ var
+ i: Integer;
+ Str: String;
+ begin
+ I := aRawHeaderLst.IndexOfName(aName);
+ if I >= 0 then
+ begin
+ Result := Trim(aRawHeaderLst.ValueFromIndex[i]);
+ aRawHeaderLst.Delete(i);
+ while True do
+ begin
+ if i >= aRawHeaderLst.Count then
+ break;
+ str := aRawHeaderLst[i];
+ if (str = '') or
+ (not (str[1] in [' ', #9])) then
+ break; //(1) an empty line or (2) a line that does not start with a space, a tab, or a field name followed by a colon
+ Result := trim(Result + ' ' + trim(str));
+ aRawHeaderLst.Delete(i);
+ end;
+ end
+ else
+ Result := '';
+ end;
+
+var
+ Str1, Str2: String;
+ j: Integer;
+begin
+ aRawHeaderLst := TStringList.Create;
+ try
+ aRawHeaderLst.NameValueSeparator := ':';
+ aRawHeaderLst.Text := aRawHeaderText;
+
+ fFrom := Alg001('From');
+ fSender := Alg001('Sender');
+ fSendTo := Alg001('To');
+ fcc := Alg001('cc');
+ fbcc := Alg001('bcc');
+ fReplyTo := Alg001('Reply-To');
+ fSubject := Alg001('Subject');
+ fMessageID := Alg001('Message-ID');
+ fReferences := Alg001('References');
+ fComments := Alg001('Comments');
+ fDate := Alg001('Date');
+ fContentType := Alg001('Content-Type');
+ fContentTransferEncoding := Alg001('Content-Transfer-Encoding');
+ fMIMEVersion := Alg001('MIME-Version');
+ fPriority := Alg001('Priority');
+ fDispositionNotificationTo := Alg001('Disposition-Notification-To');
+
+ FCustomHeaders.Clear;
+ J := 0;
+ while j <= aRawHeaderLst.Count - 1 do
+ begin
+ Str1 := trim(aRawHeaderLst.Names[j]);
+ if (trim(str1) <> '') and (not (str1[1] in [' ', #9])) then
+ begin
+ Str1 := trim(Str1) + ': ' + trim(aRawHeaderLst.ValueFromIndex[j]);
+ Inc(j);
+ while True do
+ begin
+ if j >= aRawHeaderLst.Count then
+ break;
+ str2 := aRawHeaderLst[j];
+ if (str2 = '') or
+ (not (str2[1] in [' ', #9])) then
+ break; //(1) an empty line or (2) a line that does not start with a space, a tab, or a field name followed by a colon
+ Str1 := trim(Str1 + ' ' + trim(str2));
+ Inc(j);
+ end;
+ FCustomHeaders.Add(Str1);
+ end
+ else
+ Inc(j);
+ end;
+
+ finally
+ aRawHeaderLst.Free;
+ end;
+end;
+
+
+ ///////////////////////////////////
+ ////////// TAlSmtpClient //////////
+ ///////////////////////////////////
+
+{*******************************}
+constructor TAlSmtpClient.Create;
+begin
+ FWSAData.wVersion := 0;
+ Fconnected := False;
+ FSocketDescriptor := INVALID_SOCKET;
+ FAuthTypesSupported := [];
+ Ftimeout := 60000;
+ Randomize;
+end;
+
+{*******************************}
+destructor TAlSmtpClient.Destroy;
+begin
+ if Fconnected then
+ Disconnect;
+ inherited;
+end;
+
+{*************************************************}
+procedure TAlSmtpClient.CheckError(Error: Boolean);
+var
+ ErrCode: Integer;
+ S: String;
+begin
+ ErrCode := WSAGetLastError;
+ if Error and (ErrCode <> 0) then
+ begin
+ case ErrCode of
+ WSAEINTR: S := 'Interrupted function call';
+ WSAEACCES: S := 'Permission denied';
+ WSAEFAULT: S := 'Bad address';
+ WSAEINVAL: S := 'Invalid argument';
+ WSAEMFILE: S := 'Too many open files';
+ WSAEWOULDBLOCK: S := 'Resource temporarily unavailable';
+ WSAEINPROGRESS: S := 'Operation now in progress';
+ WSAEALREADY: S := 'Operation already in progress';
+ WSAENOTSOCK: S := 'Socket operation on nonsocket';
+ WSAEDESTADDRREQ: S := 'Destination address required';
+ WSAEMSGSIZE: S := 'Message too long';
+ WSAEPROTOTYPE: S := 'Protocol wrong type for socket';
+ WSAENOPROTOOPT: S := 'Bad protocol option';
+ WSAEPROTONOSUPPORT: S := 'Protocol not supported';
+ WSAESOCKTNOSUPPORT: S := 'Socket type not supported';
+ WSAEOPNOTSUPP: S := 'Operation not supported';
+ WSAEPFNOSUPPORT: S := 'Protocol family not supported';
+ WSAEAFNOSUPPORT: S := 'Address family not supported by protocol family';
+ WSAEADDRINUSE: S := 'Address already in use';
+ WSAEADDRNOTAVAIL: S := 'Cannot assign requested address';
+ WSAENETDOWN: S := 'Network is down';
+ WSAENETUNREACH: S := 'Network is unreachable';
+ WSAENETRESET: S := 'Network dropped connection on reset';
+ WSAECONNABORTED: S := 'Software caused connection abort';
+ WSAECONNRESET: S := 'Connection reset by peer';
+ WSAENOBUFS: S := 'No buffer space available';
+ WSAEISCONN: S := 'Socket is already connected';
+ WSAENOTCONN: S := 'Socket is not connected';
+ WSAESHUTDOWN: S := 'Cannot send after socket shutdown';
+ WSAETIMEDOUT: S := 'Connection timed out';
+ WSAECONNREFUSED: S := 'Connection refused';
+ WSAEHOSTDOWN: S := 'Host is down';
+ WSAEHOSTUNREACH: S := 'No route to host';
+ WSAEPROCLIM: S := 'Too many processes';
+ WSASYSNOTREADY: S := 'Network subsystem is unavailable';
+ WSAVERNOTSUPPORTED: S := 'Winsock.dll version out of range';
+ WSANOTINITIALISED: S := 'Successful WSAStartup not yet performed';
+ WSAEDISCON: S := 'Graceful shutdown in progress';
+ WSAHOST_NOT_FOUND: S := 'Host not found';
+ WSATRY_AGAIN: S := 'Nonauthoritative host not found';
+ WSANO_RECOVERY: S := 'This is a nonrecoverable error';
+ WSANO_DATA: S := 'Valid name, no data record of requested type';
+ else
+ begin
+ SetLength(S, 256);
+ FormatMessage(
+ FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_FROM_HMODULE,
+ Pointer(GetModuleHandle('wsock32.dll')),
+ ErrCode,
+ 0,
+ PChar(S),
+ Length(S),
+ nil
+ );
+ SetLength(S, StrLen(PChar(S)));
+ while (Length(S) > 0) and (S[Length(S)] in [#10, #13]) do
+ SetLength(S, Length(S) - 1);
+ end;
+ end;
+ raise Exception.Create(Format('%s (Error code:%s)', [S, IntToStr(ErrCode)])); { Do not localize }
+ end;
+end;
+
+{********************************************************************}
+function TAlSmtpClient.Connect(aHost: String; APort: Integer): String;
+
+ {---------------------------------------------}
+ procedure CallServer(Server: String; Port: Word);
+ var
+ SockAddr: Sockaddr_in;
+ IP: String;
+ begin
+ FSocketDescriptor := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
+ CheckError(FSocketDescriptor = INVALID_SOCKET);
+ FillChar(SockAddr, SizeOf(SockAddr), 0);
+ SockAddr.sin_family := AF_INET;
+ SockAddr.sin_port := swap(Port);
+ {$IFDEF DELPHI12}
+ SockAddr.sin_addr.S_addr := inet_addr( PAnsiChar(Server) );
+ {$ELSE}
+ SockAddr.sin_addr.S_addr := inet_addr(PChar(Server));
+ {$ENDIF}
+ if SockAddr.sin_addr.S_addr = INADDR_NONE then
+ begin
+ checkError(ALHostToIP(Server, IP));
+ {$IFDEF DELPHI12}
+ SockAddr.sin_addr.S_addr := inet_addr(pAnsiChar(IP));
+ {$ELSE}
+ SockAddr.sin_addr.S_addr := inet_addr(PChar(IP));
+ {$ENDIF}
+ end;
+ CheckError(WinSock.Connect(FSocketDescriptor, SockAddr, SizeOf(SockAddr)) = SOCKET_ERROR);
+ end;
+
+begin
+ if FConnected then
+ raise Exception.Create('SMTP component already connected');
+
+ try
+
+ WSAStartup(MAKEWORD(2, 2), FWSAData);
+ CallServer(aHost, aPort);
+ {$IFDEF DELPHI12}
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ {$ELSE}
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ {$ENDIF}
+ Result := GetResponse([220]);
+ FAuthTypesSupported := [];
+ Fconnected := True;
+
+ except
+ Disconnect;
+ raise;
+ end;
+
+end;
+
+{*********************************}
+procedure TAlSmtpClient.Disconnect;
+begin
+ if Fconnected then
+ begin
+ ShutDown(FSocketDescriptor, SD_BOTH);
+ CloseSocket(FSocketDescriptor);
+ FSocketDescriptor := INVALID_SOCKET;
+ if FWSAData.wVersion = 2 then
+ WSACleanup;
+ FWSAData.wVersion := 0;
+ Fconnected := False;
+ if Assigned(OnStatus) then
+ OnStatus('Disconnect');
+ end;
+end;
+
+{********************}
+{EhloResponse is like:
+ 250-ec-is.net Hello your_name, ravi de vous rencontrer
+ 250-VRFY
+ 250-ETRN
+ 250-AUTH=LOGIN
+ 250-AUTH LOGIN CRAM-MD5
+ 250-8BITMIME
+ 250 SIZE 0}
+function TAlSmtpClient.GetAuthTypeFromEhloResponse(EhloResponse: String): TAlSmtpClientAuthTypeSet;
+var
+ k, J: Integer;
+ Str1, Str2: String;
+ Lst: TStringList;
+begin
+ Result := [];
+ Lst := TStringList.Create;
+ try
+ Lst.Text := AlUpperCase(Trim(EhloResponse));
+ for j := 0 to Lst.Count - 1 do
+ begin
+ Str1 := trim(Lst[J]); //250-AUTH=LOGIN
+ Delete(Str1, 1, 4); //AUTH=LOGIN
+ Str2 := AlCopyStr(Str1, 1, 5); //AUTH=
+ if (str2 = 'AUTH ') or (Str2 = 'AUTH=') then
+ begin
+ Str1 := AlCopyStr(Str1, 6, maxint); //LOGIN
+ Str1 := AlStringReplace(Str1, '=', ' ', [rfReplaceAll]); //LOGIN
+ while (str1 <> '') do
+ begin
+ K := AlCharPos(' ', Str1);
+ if K <= 0 then
+ begin
+ Str2 := trim(Str1);
+ Str1 := '';
+ end
+ else
+ begin
+ Str2 := Trim(AlCopyStr(Str1, 1, k - 1));
+ Delete(Str1, 1, k);
+ end;
+
+ if Str2 = ('PLAIN') then
+ Result := Result + [AlsmtpClientAuthPlain]
+ else if Str2 = ('LOGIN') then
+ Result := Result + [AlsmtpClientAuthLogin]
+ else if Str2 = ('CRAM-MD5') then
+ Result := Result + [AlsmtpClientAuthCramMD5]
+ else if Str2 = ('CRAM-SHA1') then
+ Result := Result + [AlsmtpClientAuthCramSHA1];
+
+ end;
+ end;
+ end;
+ finally
+ Lst.Free;
+ end;
+end;
+
+{****************************************************************************************}
+{This command is used to identify the sender-SMTP to the receiver-SMTP. The argument field
+ contains the host name of the sender-SMTP. The receiver-SMTP identifies itself to the
+ sender-SMTP in the connection greeting reply, and in the response to this command.
+ This command and an OK reply to it confirm that both the sender-SMTP and the receiver-SMTP
+ are in the initial state, that is, there is no transaction in progress and all state tables
+ and buffers are cleared.}
+function TAlSmtpClient.Helo: String;
+begin
+ Result := SendCmd('HELO ' + AlGetLocalHostName, [250]);
+end;
+
+{**********************************}
+function TAlSmtpClient.Ehlo: String;
+begin
+ Result := SendCmd('EHLO ' + AlGetLocalHostName, [250]);
+ FAuthTypesSupported := GetAuthTypeFromEhloResponse(Result);
+end;
+
+{****************************************************************************}
+{This command is used to initiate a mail transaction in which the mail data is
+ delivered to one or more mailboxes. The argument field contains a reverse-path.
+ The reverse-path consists of an optional list of hosts and the sender mailbox. When
+ the list of hosts is present, it is a "reverse" source route and indicates that the
+ mail was relayed through each host on the list (the first host in the list was the
+ most recent relay). This list is used as a source route to return non-delivery notices
+ to the sender. As each relay host adds itself to the beginning of the list, it must
+ use its name as known in the IPCE to which it is relaying the mail rather than the IPCE
+ from which the mail came (if they are different). In some types of error reporting
+ messages (for example, undeliverable mail notifications) the reverse-path may be null.
+ This command clears the reverse-path buffer, the forward-path buffer, and the mail data
+ buffer; and inserts the reverse-path information from this command into the reverse-path buffer.}
+function TAlSmtpClient.MailFrom(aFromName: String): String;
+begin
+ aFromName := trim(aFromName);
+ if aFromName = '' then
+ raise Exception.Create('From name is empty');
+
+ if AlPos(#13#10, aFromName) > 0 then
+ raise Exception.Create('From name is invalid');
+
+ Result := SendCmd('MAIL From:<' + aFromName + '>', [250]);
+end;
+
+{**************************************************************************************************}
+function TAlSmtpClient.Auth(AUserName, APassword: String; aAuthType: TalSmtpClientAuthType): String;
+
+ {-----------------------------------}
+ function InternalDoAuthPlain: String;
+ var
+ aAuthPlain: String;
+ begin
+ if aUserName = '' then
+ raise Exception.Create('UserName is empty');
+
+ if aPassword = '' then
+ raise Exception.Create('Password is empty');
+
+ aAuthPlain := ALMimeBase64EncodeStringNoCRLF(aUserName + #0 + aUserName + #0 + aPassword);
+ Result := SendCmd('AUTH PLAIN ' + aAuthPlain, [235]);
+ end;
+
+ {-----------------------------------}
+ function InternalDoAuthLogin: String;
+ begin
+ if aUserName = '' then
+ raise Exception.Create('UserName is empty');
+
+ if aPassword = '' then
+ raise Exception.Create('Password is empty');
+
+ SendCmd('AUTH LOGIN', [334]);
+ SendCmd(ALMimeBase64EncodeStringNoCRLF(aUsername), [334]);
+ Result := SendCmd(ALMimeBase64EncodeStringNoCRLF(aPassword), [235]);
+ end;
+
+var
+ tmpAuthType: TAlSmtpClientAuthType;
+begin
+
+ if aAuthType = AlsmtpClientAuthAutoSelect then
+ begin
+ if AlsmtpClientAuthPlain in FAuthTypesSupported then
+ tmpAuthType := AlsmtpClientAuthPlain
+ else if AlsmtpClientAuthLogin in FAuthTypesSupported then
+ tmpAuthType := AlsmtpClientAuthLogin
+ else if AlsmtpClientAuthCramMD5 in FAuthTypesSupported then
+ tmpAuthType := AlsmtpClientAuthCramMD5
+ else if AlsmtpClientAuthCramSHA1 in FAuthTypesSupported then
+ tmpAuthType := AlsmtpClientAuthCramSHA1
+ else
+ tmpAuthType := AlsmtpClientAuthNone;
+ end
+ else
+ tmpAuthType := aAuthType;
+
+ if Assigned(OnStatus) then
+ OnStatus('Authentication');
+
+ case tmpAuthType of
+ alsmtpClientAuthPlain: Result := InternalDoAuthPlain;
+ alsmtpClientAuthLogin: Result := InternalDoAuthLogin;
+ alsmtpClientAuthCramMD5: raise Exception.Create('CRAM-MD5 Authentication is not supported yet!');
+ alsmtpClientAuthCramSHA1: raise Exception.Create('CRAM-SHA1 Authentication is not supported yet!');
+ else
+ raise Exception.Create('No Authentication scheme found');
+ end;
+
+end;
+
+{*************************************************************************}
+{This command is used to identify an individual recipient of the mail data;
+ multiple recipients are specified by multiple use of this command.}
+function TAlSmtpClient.RcptTo(aRcptNameLst: TStrings): String;
+var
+ i: Integer;
+ aRcptNameValue: String;
+begin
+ Result := '';
+ if aRcptNameLst.Count <= 0 then
+ raise Exception.Create('RcptName list is empty');
+
+ for i := 0 to aRcptNameLst.Count - 1 do
+ begin
+ aRcptNameValue := trim(aRcptNameLst[i]);
+ if (aRcptNameValue = '') or (AlPos(#13#10, aRcptNameValue) > 0) then
+ raise Exception.Create('Bad entry in RcptName list');
+
+ Result := Result + SendCmd('RCPT To:<' + aRcptNameValue + '>', [250, 251]) + #13#10;
+ end;
+ if Result <> '' then
+ Delete(Result, Length(Result) - 1, 2);
+end;
+
+{********************************************************************************}
+{The receiver treats the lines following the command as mail data from the sender.
+ This command causes the mail data from this command to be appended to the mail data buffer.
+ The mail data may contain any of the 128 ASCII character codes.
+ The mail data is terminated by a line containing only a period, that is the character sequence ".".
+ This is the end of mail data indication. The end of mail data indication requires that the receiver must now process
+ the stored mail transaction information. This processing consumes the information in the reverse-path buffer,
+ the forward-path buffer, and the mail data buffer, and on the completion of this command these buffers are cleared.
+ If the processing is successful the receiver must send an OK reply. If the processing fails completely
+ the receiver must send a failure reply. When the receiver-SMTP accepts a message either for relaying or for
+ final delivery it inserts at the beginning of the mail data a time stamp line. The time stamp line indicates the
+ identity of the host that sent the message, and the identity of the host that received the message (and is inserting this
+ time stamp), and the date and time the message was received. Relayed messages will have multiple time stamp lines.
+ When the receiver-SMTP makes the "final delivery" of a message it inserts at the beginning of the mail data a return path
+ line. The return path line preserves the information in the from the MAIL command. Here, final delivery
+ means the message leaves the SMTP world. Normally, this would mean it has been delivered to the destination user, but
+ in some cases it may be further processed and transmitted by another mail system.
+ It is possible for the mailbox in the return path be different from the actual sender's mailbox, for example,
+ if error responses are to be delivered a special error handling mailbox rather than the message senders.
+ The preceding two paragraphs imply that the final mail data will begin with a return path line, followed
+ by one or more time stamp lines. These lines will be followed by the mail data header and body [2].
+ Special mention is needed of the response and further action required when the processing following the end of mail
+ data indication is partially successful. This could arise if after accepting several recipients and the mail data,
+ the receiver-SMTP finds that the mail data can be successfully delivered to some of the recipients, but it cannot
+ be to others (for example, due to mailbox space allocation problems). In such a situation, the response to the DATA
+ command must be an OK reply. But, the receiver-SMTP must compose and send an "undeliverable mail" notification
+ message to the originator of the message. Either a single notification which lists all of the recipients that failed
+ to get the message, or separate notification messages must be sent for each failed recipient. All undeliverable mail
+ notification messages are sent using the MAIL command (even if they result from processing a SEND, SOML, or SAML command).}
+function TAlSmtpClient.Data(aMailData: String): String;
+var
+ I: Integer;
+begin
+ SendCmd('DATA', [354]);
+
+ i := 2;
+ while i <= Length(aMailData) do
+ begin
+ if (aMailData[i] = '.') and (aMailData[i - 1] = #10) and (aMailData[i - 2] = #13) then
+ Insert('.', aMailData, i);
+ Inc(i);
+ end;
+
+ Result := SendCmd(aMailData + #13#10 + '.', [250]);
+
+end;
+
+{**********************************************************}
+function TAlSmtpClient.Data(aHeader, aBody: String): String;
+begin
+ Result := Data(Trim(aHeader) + #13#10#13#10 + aBody);
+end;
+
+{******************************************************************************}
+function TAlSmtpClient.Data(aHeader: TALSMTPClientHeader; aBody: String): String;
+begin
+ Result := Data(aHeader.GetRawHeaderText, aBody);
+end;
+
+{**************************************************************}
+{This command specifies that the receiver must send an OK reply,
+ and then close the transmission channel. The receiver should not
+ close the transmission channel until it receives and replies to
+ a QUIT command (even if there was an error). The sender should not
+ close the transmission channel until it send a QUIT command and
+ receives the reply (even if there was an error response to a previous
+ command). If the connection is closed prematurely the receiver should
+ act as if a RSET command had been received (canceling any pending
+ transaction, but not undoing any previously completed transaction),
+ the sender should act as if the command or transaction in progress had
+ received a temporary error (4xx).}
+function TAlSmtpClient.Quit: String;
+begin
+ Result := SendCmd('QUIT', [221]);
+ Disconnect;
+end;
+
+{**********************************}
+{This command asks the receiver to confirm that the argument identifies a user.
+ If it is a user name, the full name of the user (if known) and the fully
+ specified mailbox are returned. This command has no effect on any of the
+ reverse-path buffer, the forward-path buffer, or the mail data buffer.}
+function TAlSmtpClient.Vrfy(aUserName: String): String;
+begin
+ Result := SendCmd('VRFY ' + aUserName, [250]);
+end;
+
+{*************************************************************}
+{This command specifies that the current mail transaction is to
+ be aborted. Any stored sender, recipients, and mail data must be
+ discarded, and all buffers and state tables cleared. The receiver
+ must send an OK reply.}
+function TAlSmtpClient.Rset: String;
+begin
+ Result := SendCmd('RSET', [250]);
+end;
+
+{*********************************************}
+procedure TAlSmtpClient.SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aMailData: String);
+begin
+ if Fconnected then
+ Disconnect;
+
+ connect(aHost, APort);
+ try
+
+ if aAuthType = AlsmtpClientAuthAutoSelect then
+ ehlo
+ else
+ Helo;
+ if aAuthType <> AlsmtpClientAuthNone then
+ Auth(AUserName, APassword, aAuthType);
+ mailFrom(aFromName);
+ RcptTo(aRcptNameLst);
+ Data(aMailData);
+ Quit;
+
+ finally
+ Disconnect;
+ end;
+end;
+
+{*********************************************}
+procedure TAlSmtpClient.SendMail(aHost: String; APort: Integer; aFromName: String; aRcptNameLst: TStrings; AUserName, APassword: String; aAuthType: TalSmtpClientAuthType; aHeader, aBody: String);
+begin
+ if Fconnected then
+ Disconnect;
+
+ if Assigned(OnStatus) then
+ OnStatus('Wait for connection');
+
+ connect(aHost, APort);
+ try
+ if aAuthType = AlsmtpClientAuthAutoSelect then
+ ehlo
+ else
+ Helo;
+ if aAuthType <> AlsmtpClientAuthNone then
+ Auth(AUserName, APassword, aAuthType);
+
+ if Assigned(OnStatus) then
+ OnStatus('Send email');
+
+ mailFrom(aFromName);
+ RcptTo(aRcptNameLst);
+ Data(aHeader, aBody);
+ Quit;
+ finally
+ Disconnect;
+ end;
+end;
+
+{***********************************************************}
+
+{*******************************************************************************}
+{commands consist of a command code followed by an argument field. Command codes
+ are four alphabetic characters. Upper and lower case alphabetic characters are
+ to be treated identically. Thus, any of the following may represent the mail command:
+ MAIL Mail mail MaIl mAIl
+ This also applies to any symbols representing parameter values, such as "TO" or "to"
+ for the forward-path. Command codes and the argument fields are separated by one or
+ more spaces. However, within the reverse-path and forward-path arguments case is
+ important. In particular, in some hosts the user "smith" is different from the user
+ "Smith". The argument field consists of a variable length character string ending
+ with the character sequence . The receiver is to take no action until
+ this sequence is received. Square brackets denote an optional argument field.
+ If the option is not taken, the appropriate default is implied.
+ The following are the SMTP commands:
+ HELO
+ MAIL FROM:
+ RCPT TO:
+ DATA
+ RSET
+ SEND FROM:
+ SOML FROM:
+ SAML FROM:
+ VRFY
+ EXPN
+ HELP [ ]
+ NOOP
+ QUIT
+ TURN }
+function TAlSmtpClient.SendCmd(aCmd: String; OkResponses: array of Word): String;
+var
+ P: PChar;
+ L: Integer;
+ ByteSent: Integer;
+begin
+ if (length(aCmd) <= 1) or
+ (aCmd[length(aCmd)] <> #10) or
+ (aCmd[length(aCmd) - 1] <> #13) then
+ aCmd := aCmd + #13#10;
+
+ p := @aCmd[1]; // pchar
+ l := length(aCmd);
+ while l > 0 do
+ begin
+ ByteSent := SocketWrite(p^, l);
+ if ByteSent <= 0 then
+ raise Exception.Create('Connection close gracefully!');
+
+ Inc(p, ByteSent);
+ Dec(l, ByteSent);
+ end;
+
+ Result := GetResponse(OkResponses);
+end;
+
+{*********************************************************************}
+{An SMTP reply consists of a three digit number (transmitted as three
+ alphanumeric characters) followed by some text. The number is intended
+ for use by automata to determine what state to enter next; the text is
+ meant for the human user. It is intended that the three digits contain
+ enough encoded information that the sender-SMTP need not examine the
+ text and may either discard it or pass it on to the user, as appropriate.
+ In particular, the text may be receiver-dependent and context dependent,
+ so there are likely to be varying texts for each reply code. Formally,
+ a reply is defined to be the sequence:
+ a three-digit code, , one line of text, and , or a multiline reply.
+ Only the EXPN and HELP commands are expected to result in multiline replies
+ in normal circumstances, however multiline replies are allowed for any
+ command.}
+function TAlSmtpClient.GetResponse(OkResponses: array of Word): String;
+
+ {----------------------------------------------}
+ function Internalstpblk(PValue: PChar): PChar;
+ begin
+ Result := PValue;
+ {$IFDEF DELPHI12}
+ while CharinSet(Result^,[' ', #9, #10, #13]) do
+ {$ELSE}
+ while Result^ in [' ', #9, #10, #13] do
+ {$ENDIF}
+ Inc(Result);
+ end;
+
+ {---------------------------------------------------------------------}
+ function InternalGetInteger(Data: PChar; var Number: Integer): PChar;
+ var
+ bSign: Boolean;
+ begin
+ Number := 0;
+ Result := InternalStpBlk(Data);
+ if (Result = nil) then
+ Exit;
+ { Remember the sign }
+ {$IFDEF DELPHI12}
+ If CharInSet(Result^,['-', '+']) then
+ {$ELSE}
+ if Result^ in ['-', '+'] then
+ {$ENDIF}
+ begin
+ bSign := (Result^ = '-');
+ Inc(Result);
+ end
+ else
+ bSign := False;
+ { Convert any number }
+ {$IFDEF DELPHI12}
+ while ( CharInSet(Result^,[#0]) ) and ( CharInSet(Result^,['0'..'9']) ) do
+ {$ELSE}
+ while (Result^ <> #0) and (Result^ in ['0'..'9']) do
+ {$ENDIF}
+ begin
+ Number := Number * 10 + Ord(Result^) - Ord('0');
+ Inc(Result);
+ end;
+ { Correct for sign }
+ if bSign then
+ Number := -Number;
+ end;
+
+var
+ aBuffStr: String;
+ aBuffStrLength: Integer;
+ aResponse: String;
+ aStatusCode: Integer;
+ aGoodResponse: Boolean;
+ ALst: TStringList;
+ P: PChar;
+ i, j: Integer;
+begin
+ Result := '';
+ while True do
+ begin
+
+ {Read the response from the socket - end of the response is show by }
+ aResponse := '';
+ while True do
+ begin
+ Setlength(aBuffStr, 512); //The maximum total length of a reply line including the reply code and the is 512 characters. (http://www.freesoft.org/CIE/RFC/821/24.htm)
+ aBuffStrLength := SocketRead(aBuffStr[1], length(aBuffStr));
+ aResponse := AResponse + AlCopyStr(aBuffStr, 1, aBuffStrLength);
+ if aResponse = '' then
+ raise Exception.Create('Connection close gracefully!');
+
+ if (aBuffStrLength > 1) and
+ (aBuffStr[aBuffStrLength] = #10) and
+ (aBuffStr[aBuffStrLength - 1] = #13) then
+ Break;
+ end;
+ Result := Result + aResponse;
+
+ {The format for multiline replies requires that every line, except the last,
+ begin with the reply code, followed immediately by a hyphen, "-" (also known as minus),
+ followed by text. The last line will begin with the reply code, followed immediately
+ by , optionally some text, and .}
+ ALst := TStringList.Create;
+ try
+ Alst.Text := aResponse;
+ if Alst.Count = 0 then
+ raise Exception.Create('Emtpy response');
+
+ for j := 0 to Alst.Count - 1 do
+ begin
+ aResponse := Alst[j];
+ p := InternalGetInteger(@aResponse[1], aStatusCode);
+ aGoodResponse := False;
+ for I := 0 to High(OkResponses) do
+ if OkResponses[I] = aStatusCode then
+ begin
+ aGoodResponse := True;
+ Break;
+ end;
+
+ if not aGoodResponse then
+ raise Exception.Create(aResponse);
+
+ if p^ <> '-' then
+ begin
+ if J <> Alst.Count - 1 then
+ raise Exception.Create(aResponse);
+ Exit;
+ end;
+ end;
+ finally
+ ALst.Free;
+ end;
+
+ end;
+end;
+
+{**********************************************************************}
+function TAlSmtpClient.SocketWrite(var Buffer; Count: longint): longint;
+begin
+ Result := Send(FSocketDescriptor, Buffer, Count, 0);
+ CheckError(Result = SOCKET_ERROR);
+end;
+
+{*********************************************************************}
+function TAlSmtpClient.SocketRead(var Buffer; Count: longint): longint;
+begin
+ Result := Recv(FSocketDescriptor, Buffer, Count, 0);
+ CheckError(Result = SOCKET_ERROR);
+end;
+
+{*******************************************************}
+procedure TAlSmtpClient.Settimeout(const Value: Integer);
+begin
+ if Value <> Ftimeout then
+ begin
+ {$IFDEF DELPHI12}
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PAnsiChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ {$ELSE}
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_RCVTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ CheckError(setsockopt(FSocketDescriptor, SOL_SOCKET, SO_SNDTIMEO, PChar(@FTimeOut), SizeOf(integer)) = SOCKET_ERROR);
+ {$ENDIF}
+ Ftimeout := Value;
+ end;
+end;
+
+initialization
+ for Ch := #0 to #255 do
+ VALMove_AnsiUpcase[Ch] := Ch;
+ CharUpperBuff(@VALMove_AnsiUpcase, 256);
+ ALInitFastMovProc;
+ ALInitFastPosFunct;
+end.
diff --git a/official/2.31RC1/Source/UCAbout.dfm b/official/2.31RC1/Source/UCAbout.dfm
new file mode 100644
index 0000000..5cccd28
--- /dev/null
+++ b/official/2.31RC1/Source/UCAbout.dfm
@@ -0,0 +1,835 @@
+object AboutForm: TAboutForm
+ Left = 296
+ Top = 71
+ BorderStyle = bsNone
+ Caption = 'About User Control'
+ ClientHeight = 520
+ ClientWidth = 506
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ OnClose = FormClose
+ OnCreate = FormCreate
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object pnlFundo: TPanel
+ Left = 0
+ Top = 0
+ Width = 506
+ Height = 520
+ Align = alClient
+ Caption = 'pnlFundo'
+ Color = 6435072
+ TabOrder = 0
+ object Image4: TImage
+ Left = 1
+ Top = 1
+ Width = 28
+ Height = 518
+ Align = alLeft
+ Center = True
+ Picture.Data = {
+ 0A544A504547496D6167653C0D0000FFD8FFE000104A46494600010200006400
+ 640000FFEC00114475636B79000100040000003C0000FFEE000E41646F626500
+ 64C000000001FFDB0084000604040405040605050609060506090B080606080B
+ 0C0A0A0B0A0A0C100C0C0C0C0C0C100C0E0F100F0E0C1313141413131C1B1B1B
+ 1C1F1F1F1F1F1F1F1F1F1F010707070D0C0D181010181A1511151A1F1F1F1F1F
+ 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F
+ 1F1F1F1F1F1F1F1F1F1F1F1FFFC00011080206001903011100021101031101FF
+ C4008C0001000203010100000000000000000000000608030507020401010101
+ 0101010100000000000000000000050304020106100001040103030303020505
+ 010000000002000103040511120621130731412251321461718123331508A142
+ 53D3941611000202020200050303050000000000000001110212032131416122
+ 320451711381D162F091B1C152FFDA000C03010002110311003F00E14BF4A7E7
+ 8200802008020080200802008020080200802008020080200802008020080200
+ 8020080200802008020080200802008020080200802008020080200802008020
+ 0802008020080200802008020080200802008020080200802008020080200802
+ 0080200802008020080D8C5C6F914D40723162EDC98F32D83702094A172EBD1A
+ 461DBAFC5FDD79CEB313C9EB071306B97A3C8407BAEF0B4F1BCCCE50B10F705B
+ D5C75EADEDEC8CFA8BAB34395CD556CB60B3D8C1E2F05AC65CC29308B4756A56
+ 8DC6E01B3069B8B5F8B1136DF4F8BB2869AAF0D3CB99FF00458E5F29AC7882A7
+ F942F616FF009073D7309B1F1935B32AE51F402F4DE63A69F133DC4DFBAAFA13
+ 5449F64BDCD3BB8E88BAD4C8CD4BA5C83A8B7F303A9FDBF737DDFA23E8FA8B87
+ 94CB66A9F912971DAFE3F86EE0657802C67E3ACCD1334A22F24AC4C05180C6EE
+ FA8916AFA28B5AA74CB2E7E856766AF18F1F539BF9E70D8F9F85499C9B114B19
+ 93A3C826C555B7480631B950024D4C845FEE69237176277DAE25A7AAEAF8B679
+ 44B6B19FB1CFF26AB198873057E540E0325785E7B1142CFA3CA620CEFEDB9F44
+ 6CFA8B891C984E378C3E3D6796E74E3C558A589BD20F61CA396E44270BB49D82
+ 9C22262666713F8FA28BCD9E58D799656E2AA25F1C15B3CAF6F235B95E438D3C
+ F6870D85B53478EA1665EE76D8C9E4291F422622948DCDCDDF73EBD554F8E93A
+ AB78B276F6F275F044296C6264ADB3F262EE1BC71EF1DE63D1C5B5EAEDFB233E
+ A2D750A3E4FC772DB3C8AC720C44FC325A15E27E437F6BC735688CE5AF23C511
+ C4CF623794BE5B840B5D7D7A3486F5BAE30F29E8A895D5A65631D95C3C8D91A5
+ 92E739ABF4AE9646AD9B4724574DB6BCACFA7CB6ED0D1B5FB5B4F454F4A6A893
+ E09DB5A766D11C5A1992FF001D734C4F19B371F21C6297267BAD184115E103ED
+ 10B96AF1EF8E5EA7B9B5D3E8B1DDA9DBA6EA6DAB62AF6A4B10FCB1AA720C5F8D
+ B23C5B8ED1872959EDCB8F79A32A90CE4E651C1243D910294CC01FA0FF00BB56
+ DDA759BF8E6AEEAD6E0EFCE1AA355E4AD5E43866839BE6A19B1B062258AD1816
+ 36AE9D88B6F4D22DA20DB1FD5BE2DEAAA697E85CC93B6FB9F1047568667A8A53
+ 8A50941F438C9885FF00567D590FA5BB8F8AE3F915EA1CEB31E3EC90F2A1182C
+ 1C51DAA610CB3C203DA22096DC6ECC3B47A1833F4F933FBC7FC8EA9D15963FAF
+ EC55C159E4EAF2FEBCCAD7E52B399B3E41CECF9A802B648ED13CF5A3369063D1
+ 99823636E85B4346D7DD53D092A28E89DB9B7773D9165A991F760E8E4EEE56B4
+ 18CA735FB9BD8E3A95C0A490F63EE7D04189FD1BE8BE59A4B9E0F554DBE0B379
+ 5F21F1D9395E4A96733797E31159FEDD98A1F990CF5A4AF3D6DD158A8D1EDEB1
+ CB180BF4D409DC9F577F5955D36C53495BB452B6D5934DB5D32BBF90F2F8ACCF
+ 39CE657122ED8EB972596B39338B90917DFB5D99DB7BFCB47F4D552D3575A24F
+ B27EDB2766D11E5A199DB3FC6CAF95FC7E6B7305004DC8E0C68478873D9D2595
+ E47666791C43A900FDCFA74EAB87E6B5E94FDB3C9DBF113F535DC12BF23F8FBC
+ B1CCFC79C60723891B5CC284F647245DEA719764C9FB65B86408BE4221AB0BFA
+ B6AB2D3BB5D2EE1FA7F535DBAB65E8A57A8AEB9BC2E4F0995B389CA43F8F90A6
+ 7DBB30EE03DA4CDAE9B81C85FD7D9D52AD9594AE89F6ABAB867C4BE9E495703A
+ 1E49B72DC6E10591194043F3BFB6CD240FB5DCBB7DCD841AF5DDA2CB6BA2F7C7
+ EA6BA95DFB6497FF00F3FF00E4DFFCBC93FF00758FFB5639E8FE3FD8DB1DDFC8
+ E6DC861CEC39BB9167DE77CC048ED75ED1BC937734EBBC89C9DDFF008AE9A351
+ C74735E679ECD7AF479371C6F92F27C2D920C0E4EC6365B8E11CA55E428B7E8F
+ F1DCE3F4725E2F4ADBB527BA5ECBA7059CB5CA38871EE454BC7D98CC723BFC92
+ CF62BCB9A8EDD8001B16B6B46EC2D308336A7AFF0048B4F7D7AA96B5DAD5774A
+ B8FD0A4EF5ABC1BB495BFC938AC86279DE6B1D90BA792B75EC909DE95F7492B3
+ B33819BEAFF27076DCDECEA9E9B2744D2827EEAB5669F246D68647B86369268E
+ 37776632617766727EAFA7416F5FD919F4B65CB737E42E3F93823A1C28796D9A
+ D5C1B19CAA6AECF6BA8B7F58631736317FBBAC7AFD1948D75A59736C7C8A97B5
+ EAF8AE5E655DE4F26765E43919B3E12479A967392F84A3DB3694DF716A1A36DF
+ 5F4556918A8E89B79973D9AC5E8F049FC778EE2190E4215F946525C454D37C17
+ 220DE3DD1267603666776626D7426F7596EB5957D2A4D752AB7EA70596CFE678
+ CD5E55213791F214EAC12425261E0196D40C2C00441F90C3293F73D5FE7AB6BA
+ 74D14CA56CEBEC5F728DAD556F732B4F93F298ECAF9033990C69C9251B1688A0
+ 925636321D19B73B49A1B6BA6ADBBAE8A9E8AB544993B7593BB688C2D4C8CB50
+ 58ED422E1DC629059E3D74DDABB7C75FD51F47D45C1E645E7DAF9B28785D1C70
+ 71C08616A509F64648F48D98C2463366DC27AB36CF8EDD3F551B5FE16BD4DE45
+ 6D9F967D310559E7E5C84B99658B91880671E77FCF18B6EC69346D76ED771F4F
+ A2ABAB1C563D1336CE4E7B23EB4333DD70739E306368DC885B7BF461D5F4D7F8
+ 233EA2D1DECB78FF008C72DC7F8CECE172193B56FF001E09F347626EF1496599
+ 9A407DDBF4F96A5B09987AE8DD14A55BDAAF64A5E45276A56CA90DF995F3C8F8
+ 40C1F3ACD6242C9DC8E9DA300B1296F9087A38B197B90B3ED7FD551D36CA899C
+ 1B6B8D9A238B433265E30F1B5BE7396B307E6478DC5E3A17B393C94ADA8C5175
+ D3A3B8B6AFA3FA9333333BFB2C77EE5AD7D5B36D3A737F4475FF0014F94B9C72
+ 0BB73889663111DFA15E4870D9AB913CD3D8900D8044749A31937036EDCC2EFD
+ 357625C5BF452AB287E68EBD3BAD678CAFB9C0F95D3CDD3E4D94AB9D32933115
+ 9946FCA64E4E736E7DC7B9FEE627EACFF45475B4EAA3A386E9AB39ECD52F4783
+ A7784798719C4CB9FE3BC9E52AB85E514DAA4D7475FE5482C620E5B59DD85DA6
+ 2EBECFA6BD3576E5F95AECE2D5EEA74FC7D9552ADD589771BF18F8C7886729F2
+ AC9790F1F90A18C95ADD6AB57B7DE98E17DC1A34534A6FB4D9B51117D7D3A2C6
+ FBF65D62A8D49B534D28F2765C1C8B9F7261E51CCB2F9E08DE28AFD829218CB4
+ DC31333046C5A74DDB05B5FD5766AA61548E4DB7CACD9A05A19992BC6D2D88A3
+ 7D7433117DADABF57D3A3233EA3AEF3DFF001D396D1E4071F11C5DAC8E08E309
+ 2BD89A581A56221D4C0C5DE126DAFD3A8AE3D5F32AEBEA70CEADBF12C9FA5707
+ 29CBE232387C9D8C664A07AD7EA1F6EC404ECEE24DD74D45DDBFD575D6CACA51
+ CD6AB4E19F22FA7932550924B30C7196C90CC440F576D09DF467D5919F516DF2
+ 54AA6287FB235EE5172DE3AFE32A64725FDC6F3CB69AF813EE80467606117D37
+ 682DA68EDD74EB1EAE798AF29F82F02AB51C7ABB5E2CAD7E4FC44B87E7F9CC6C
+ B7A6C91D7B2EDF9B64DE59A4126621EE9BFDC6C2ECC4FF00554F45B2A27104ED
+ D58BB5D9185A991EA188E698220FBE42611D7EA4FA3233E971B016F96E1EA653
+ 1D9DE6111E3F071D3A07960A6C738DFB622C31B916F1268FBB0FDC04E5BBE4E3
+ D545BAAD9A6ABCBF0F22B55D94A76EBFC9563C8787C9E1B9BE6B1B93B657EF41
+ 68FBD78D9D8A673F9B4A4CEEFA398933BB6BD156D3656A26899B6AD59A647968
+ 664C3C75E3EB7CC2CDB6AD97A3893C7B47231DE91E3637372D3668C5AB8ECEAB
+ 1DDBB0F06E4DB56ACFC60B236A9790F2E54062B5C52FC952C0E46FD2AD24A2F7
+ ECC31EC88E4F848C3B7683B74F501F933374989D14FBBF6283577FF3FB95679B
+ DCCFDCE5D97B3C822ECE6A4B527E742CDA3048CFA380B6A5F11D341EAFD3DD56
+ D492AAC7A26EC6DD9CF66917B33265E37F1FE3F984F7E3BBC86A601A98C64077
+ 36E92F71C99D8774917DBB7AFEEB1DDB9D22149B6AD4AFDB83A6F17F0DF0FE33
+ C8B1BC82EF9171675F15623B671C471019F6498D818BBE5F73B68FA33BBB745C
+ B7F936B55D551F274D3E3D6AD3765C1C9FC9BC8A8F23E7B9BCD50676A572C3BD
+ 7771DAE4002C026E3EDB98772EBD1475A24CE5DD756B3688C2D4C82008020080
+ 2008020080200802008020080200802008020080200802008020080200802008
+ 0200802008020080200802008020080200802008020080200802008020080200
+ 8020080200802008020080200802008020080200802008020080200802008020
+ 080200802008020080FFD9}
+ end
+ object pnlComponentes: TPanel
+ Left = 29
+ Top = 1
+ Width = 476
+ Height = 518
+ Align = alClient
+ AutoSize = True
+ BevelOuter = bvNone
+ Color = 6435072
+ TabOrder = 0
+ object Panel1: TPanel
+ Left = 0
+ Top = 2
+ Width = 474
+ Height = 104
+ BevelOuter = bvNone
+ Color = clWhite
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ DesignSize = (
+ 474
+ 104)
+ object Image1: TImage
+ Left = 111
+ Top = 1
+ Width = 374
+ Height = 80
+ AutoSize = True
+ Picture.Data = {
+ 0A544A504547496D616765FE200000FFD8FFE000104A46494600010101004800
+ 480000FFDB0043000302020302020303030304030304050805050404050A0707
+ 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17
+ 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414
+ 1414141414141414141414141414141414141414141414141414141414141414
+ 14141414141414141414141414FFC00011080050017603012200021101031101
+ FFC4001F0000010501010101010100000000000000000102030405060708090A
+ 0BFFC400B5100002010303020403050504040000017D01020300041105122131
+ 410613516107227114328191A1082342B1C11552D1F02433627282090A161718
+ 191A25262728292A3435363738393A434445464748494A535455565758595A63
+ 6465666768696A737475767778797A838485868788898A92939495969798999A
+ A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6
+ D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301
+ 01010101010101010000000000000102030405060708090A0BFFC400B5110002
+ 0102040403040705040400010277000102031104052131061241510761711322
+ 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728
+ 292A35363738393A434445464748494A535455565758595A636465666768696A
+ 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7
+ A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3
+ E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD52
+ DA2968A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2
+ 800A28A280129314EA2801980690A8A7919A6918A0040A29703DE8A5C52B00A3
+ 18A5A414B4C0422A3755352D3185260549A38D8739ACBBB82D70776EAD891335
+ 977908C1AC66B4378339CBE834C19DFE67E15CF5F43A1027779D5D06A76FC371
+ 5C86A96F8278AF36ABB743D3A4AFD4A772BE1B04EE37159D31F0B8CE5AE47E35
+ 46FE2C678AE7EF58464F19AF32752DD11EA429DFED33A573E14EED723F1A88BF
+ 84FF00BD75F9D7097BAC476F9DD139C7A62B3EF3C516569A72DE3966466D8100
+ F9B77A1F4AE7757FBA8E85497F333D2B7F84FF00BD75F9D1BFC27FDEBAFCEBC8
+ 1BE22582FF00CBB5D9FA22FF00F1552699E3FD3753BF8ACD56686690E17CD500
+ 13E9C1A9F6DFDD43F64BF999EB7BFC27FDEBAFCE8DFE13FEF5D7E75E47A87C43
+ D1F4FBD92D5A5925963387F2937007D2A23F12F460325A751D7988D1EDBFBA83
+ D92FE667B0EFF09FF7AEBF3A37F84FFBD75F9D7954FE39D1EDB4A8B507B922DE
+ 5E170A771F5E2AAC7F137C3EE3FE3EE45FADBC9FE147B6FEEA0F64BF999EBFBF
+ C27FDEBAFCE8DFE13FEF5D7E75E5FA678CB47D61E45B5BD5768D4BB0652B803A
+ 9E40A84F8FFC3C1CAFF6ADBE41C7DEA3DB7F7507B15FCCFEF3D5B7F84FFBD75F
+ 9D1BFC27FDEBAFCEBCD2CFC57A3DFCAB1C1A9DAC9231C2A0946E27D00A9E7D77
+ 4DB598C336A16D14A3AA3CCA187E19A3DB7F7507B15FCCFEF3D1E27F0A6E386B
+ AE9EB4579D5BF88F4A0E4FF695A631FF003D97FC68AB557FBA84E8FF00799F6F
+ D14515F667C48578AFED47FB58F843F64AF0BE8FAEF8BEC757D42DB54BC36504
+ 3A34514B287085CB1124B18DB85C6413C91C57B557E667FC16CF5069BC35F08B
+ 41882B5C5FEA779346A7824A2429D4F006661D7DBDE803F49347D622D6742B2D
+ 5638E5B782EAD92E563B850AE8ACA18061938201E79AF1CFD96BF6BDF08FED71
+ A46BFA978434AD774DB5D1AE23B69DB5B82188C8EEA5BE4F2E59338039CE3A8E
+ B5DFFC43BB83C1DF077C4B72A425B697A15CC80C996C2476EC79EE785AFCB9FD
+ 85F46F88FF00F0EF5F8D3A97C286963F1B5C6BE21B56B363F6A31C515B3CC21F
+ 493CB91F6E3924903E6DB401FAF1457E7A7FC13CEC3C3BE25D3EC7C6F17C70F8
+ 87ACF8CB44B694F8C3C19E24D51A4B7498C6EAE4DB3297DAAE772C9B9892B83B
+ 492A3C93E14FC51D5FF6CAD5BC69E37F1EF8B3E31693A1C7A8BD8E83A1FC32D3
+ 2FDED2C91515834B25BC32234A1644E1BE6E493F2B28A00FD67A2BF29A4F8C1F
+ 1E3C3DFB0B7C7AB3F185CF8E344D47C2F7FA58F0D78BF58B6BBD2F52BCB59B50
+ 4460257092310A9F31C96027DAC71815EFFF00B047C1DF889ACF87BC13F193C7
+ FF00167C41E26BBD4745096DE1E9EE5E4B38ED9D0089E42CC77CC400ECE46496
+ 20938CD007D91E24F12E95E0ED06FB5BD7350B6D2B48B189A7BABDBB90471428
+ 064B331E00AF8E6EBFE0AADF0FF56D5EEED3C0FE03F1F7C42B5B46227D4743D1
+ F740076203307C1E7EF2AF6FC392FF0082CF78BF57D13F67EF0BE8963349069B
+ AD6BAA97EC9902448E26748D8FA17C363D631E86BECDF82BF0DFC35F0A3E1778
+ 73C33E13B6B78744B2B2896192DD028B825413331FE2673F31249249EB4009F0
+ 57E2F693F1D3E1D69BE31D1AC752D2ECEF5E68CD8EB10082EEDDE295A3749630
+ CC15B284E327820F7AEE335F17FF00C144BF683F1B7C3DBCF865F0C3E1BEA3FD
+ 85E2CF885AA8B01AC0452D6B1192288042DC2B33CCBF375011B182411E47FB4F
+ 7C16F887FB117C2FB5F8B3E09F8E5E3AF10EADA75EDB26B361E28D40DE595F89
+ 1F696111E9F391C3163866C303C900FD2DA4AFCCBFDB1BE36FC4AF1F7C4AFD95
+ D3E17F89F56F085FF8DAC2DB54FB35B5ECB1DA319DADDD3ED31290264405B72B
+ 020AEE183922B8BFDB17E1FF00C62FD892F3C13F12346F8EFE2DF19EA1A96A62
+ CEEECF549A4F265976F981443E632344C10AF9647181827B007E9BFC48F8C1E0
+ EF84506972F8BF5EB7D15755BB5B1B1598333DCCEC40088AA092791D05762391
+ 5F969FF0534F86773AEFED57F01ED23F1BF88ADCF8C75986D16CD6EDBECFA291
+ 35A42B7166BD23918BB3B11CEE45356FF6EDB7F897FB3AFF00C339F81FC0DF16
+ 3C657DAB6A5AAEA513EABABEB33196FA469ECBC95BA2A40963432950AC080A48
+ C726803F5069335F9BDFB456ADF12BF61BF83DA7787343F893ACF8E3E23FC4BD
+ 6E3B74D775C3BFEC0422897ECE1CB040CD246173C28662390083F685FD9BBE24
+ 7ECABF042EFE2D785FE3F78F759F19E83E45CEAD0EB5A89B8D3EFD5A54470903
+ 676805C1C397C80470482003EBFF00DA37F6A3F0BFECC96BE179BC4BA66B5AA7
+ FC245A80D32CE3D1608A57129008DC1E44E39ED93ED5EC40EE00FAD7E5D7ED95
+ F14A4F8E3E0FFD8D3C4374134F9FC4FAD4379736711E165DF6A92140792AACED
+ 827B30CF5AFD451C28FA5007C6BE23FF0082A37C3BD03E2078ABC1F0780FE226
+ BDAA786B51B8D32F9F46D22DEE2212452B44CCA45C03B4B2360B0048EC3A57AC
+ 7ECC7FB63FC3DFDABACF566F07C9A8596A5A5328BCD27598161BA895890AF856
+ 752A4823218E08E71919F80BF65EF8A7E36F02FED0DFB53788FC01F0EA6F88FA
+ A5DF8A5D1F468AF85AC90C4F777CDE76E28DB82B0452A00CEFCE462BDC7F634F
+ D9DBC69F0C75BF8C5F1BFE30DCE9FF000DF57F1847707ECF1DC4489A5C72C865
+ 92777DC5130DB3682C4FCA77726803EFEC8CE296BF217F68DF8A3F0E349F873A
+ EDFF00C26F8C7F19BC75E3ED29A37FF84861D5EF64B0B502450E6E242B1C4232
+ ACC079631B99474241EE3E287ED25F17BE21F81FF664F857E1EF14CFE1CF177C
+ 45D2ADEF75AF135B7EEEE7C973B15D597054ED59246D855890002B93900FD41C
+ F04D78EFECF9FB517863F692BAF1941E1AD3359B0FF845B51FECCBC93568228D
+ 25972C0F945247C81B3BED3F30E39AE6BE05FEC872FC09F13C5ADDBFC5AF883E
+ 2B46B5782EF4AF12EAA2EACA66603122C7B46C652383927048CF35F99BF077F6
+ 88F137C38F83DE38F0A783E5934CF1DFC4EF1FCFA45B7882590DB5B69EB88449
+ 209BA47266E0004728096E0AAE403F6D5D720D52B88F703C57CFDAAF8234AF81
+ 3FB2F47E1FF881F1B3C43A34AE623A978E6F35A73A8CB3EE5774B692732140C1
+ 0A2A2293B37705896AFCF4F8FDF1D74CF056A3E0DF107ECF7F10FE2B6B178DAA
+ ADADE6B5E23BFBC9748BF623E58D85C01E63B1524AEDC60138CE312D5CA4EC7E
+ B6EA30641E335C9EAD66E413B49AF953E367C4AF885FB467ED8D3FECFF00E02F
+ 175E7C3FF0DF8774F1A9788F5CD24EDBE986D898AC520C1400CF120008F9998B
+ 6E002D79978CFE19EB3FB3EFEDA1F03BC1BE1AF8AFE3ED6348F105D25CEA969A
+ FEBCF32CCB14A494288114C6EAAC36B03DF9AE49D1E6D2E75C2B72EB63EC8D42
+ D5D890149FA5731AADAC9129DC8471DEBE5FF881F14F52F8E3FB58F8DBC0B7BA
+ EF8EF41F875E0D4F25ECFE1DE9D753DEDF5D0655633BDBC6EC91EEDE0646308B
+ 8192586A7ECFD71F107C3DF1C7C55E10B88FE206BBF0926D3FED3A46B7E3AD2E
+ EE1B8B49D550F95E74D1AE464C8BB78076A900739F3AA60DA8B95CF4A963173A
+ 8DB4D8F55D6530589FA570177765361203C6AECE14F4278AF40D7ADCBB380E40
+ 071D6B86D6745DD1A8128048DC0AB7415E1BDCF711CD6A17AD711A284085776E
+ 61DF3D3F2ACCFB535A5CDA4A8C77ACE9839E4722AD5E6892C793F6E7EBCE0D63
+ B69ACB9B87BB6985BCE8BB59F1927E607F4350C64F1EADE5CD70CD1ABC924E58
+ B9EA0066CE3EA71F954324E6595DB2CB131385CF41DA9B2F872EA646BC8A6115
+ BC929032C383DFF0EB43F873528ECBED4D707C8CECDF818CF5C50324D52F19B4
+ 9B488A868E3B99064807AAA9C7EA6A2BBD596E632208DA06F309C87E36E381D3
+ B63AD2CFA705F0FB34B3B3CA6E7098C7DEDA327F2C7D6A80D12F0410CEB3AEC9
+ 7215830EB9C629202DDADE4B0A4C530ED246C8FB8F6EA7F90FCAAB69D7F6B15A
+ 8596373212C77AB7418C0E3A7506A44D2AE6D512E259C3444942A1C020E3BFF9
+ E6B3EE74B9AD4C5FBC0AB28CA96C607247269812C37522CA926F3BD1832F3DFA
+ 8A20BCB792FEE1EEFCDD8DF364364E4E3D7E8696E743BFB7754255B70CA32302
+ AC0F420FF9EB556F6C26B3BC68DDB6C8A76B0E281D84D4DD3CD7113EE8836109
+ E0E314555786691701867D4D154897B9FB25451457DD9F0615F317EDD9FB175B
+ FED87E09D16D6DB595D07C4BA04D2CDA6DDCD11920612851245201C80DE5C677
+ 0CE0AF435F4ED1401F9EBE29F811FB6E7C4CF8793FC37F11F8EBC056BE1FBAB6
+ FB05FEB56E66379796F80ACACDE4F3BD7838542C0904F273EC3E05FD98FC7BFB
+ 2FFECD5A47827E08EB9A15E78BADB52FED1D46F7C556EE969A8EF5612AED8B73
+ 47D220B839C4782DC935F54D1401F10FECFF00FB22FC545FDA9F56F8E5F162FB
+ C27A6EA177A7BD89D0BC211CBE45CEE411969BCC1D3033C972C7192028159BF0
+ E7F655F8F7FB21F8A7C516DF04F56F077897E1D6B77CD7D1685E2B7B8867B291
+ 8019568860E15550B6EF9828F941E47DE145007C9BF1BBE04FC6DFDA23F647F1
+ 2F813C59AAF836D3C7BACEA104CBFD96D7316970DAC734522C459A3794B7EEC9
+ 2769E4819C0AF79F817E04BBF85FF05BC09E0FD40DABEA1A168765A6DD3D9126
+ 179A28112474255490CCA4E4804E7919AEE68A00F2BFDA5FF677F0E7ED3FF0A6
+ FF00C11E23696DA19644B9B4BFB700CB677299D92A83C1E199483D55D8646723
+ E5BF03FC14FDB53E07787ED7C19E14F1D780BC59E19B2416FA75EEBF1CEB736B
+ 08E1548099C28E80B49800007000AFBE28A00F8FBE3AFEC6DE38FDA0BE0FFC3F
+ 9FC41E34B0B4F8E1E0EBA7D46D3C49676FB6C8CCD207F2B68452117643B5F612
+ 0C5920EE6CF0DF107F65BFDA63F6AD8744F09FC67F15782BC3FE01D3AEE3B9BD
+ 4F08473B5DEA6C80804F98368C827BAA82C1B6315007DF545007C99F127F643F
+ 10F89BF6B3F833E3DD12E747B2F87FE01D2D6C8E9B35CCC2EF728982F95188CA
+ 1500C2325C13B4E470337BF6E6FD967C51FB4FC7F0DED7C3F79A3DA59F87F5B1
+ A96A3FDA9712C4D245F28DB17971BE588DDD4AF6E79E3EA5A2803E36FDB7FF00
+ 651F88FF0018BE25FC2DF88BF0CB55D1A0D7FC1571E72D8EB8EE90BB09525460
+ 555B23298653B72318354BE337ECA5F17BE3D78E3F677F17789753F080D43C0F
+ A9FF0069F88ACA092E12DE4DD7704CD1DAA989F70114213F78C3240C9E49AFB5
+ A8A00F9FBF6CEFD94ADFF6ADF86F65A4DBEAC7C3DE26D1AEC6A3A36ADB4B2C33
+ 01828E01076B71C8E54AA919C60F827C41FD9B3F6AEFDA4FC2B65F0EBE2878C7
+ C0BA2F81E39E27D4F52F0EC33BDF6A8B1B065DC8EA13EF2AB607963201C1C62B
+ EFCA2803E3BF8F7FB13EB1E39F1BFECD83C1B2E8963E0AF8557B0BDCDA6A934A
+ 2E27B7496D09540B132BB14B539DC572CDC9E491F6191C114B45007C7FFB177E
+ C89E36FD9E7E2FFC5FF1778AB52D0AF6D3C6579F6AB38B489E6778BF7F348448
+ 248900E255E85BA1FC7D4BF6C9F801A87ED33F0075EF02695AC268BA8DDC90DC
+ 5BCF3EEF21DE29038497682761C7500E08070718AF6EA2803E0ED7FF00661F8E
+ FE3FFD8FF50F8217DA5FC38F0CC70DA69F656979A6DE5CAA5CF913C723CB2010
+ 1D8CDE502700966624EDEFB1F1C7F60FF1378BFC13F05754F01F896C3C35F143
+ E18E996561697571BDECAE4411C63696DA5800E848250EE0CC1979E3ED9A2803
+ C1BE04C7FB464F79A8CBF175FC07159476061B0B5F0C8B9F366B9CAFEF676932
+ 02E01184EEC78E057CE5F0C3FE09A3AB59FEC65E32F845E38D4342B8F135EEBD
+ 36BFA26ABA6492CB0D9CFF006682388B33C48C3262757014FC8FC64F4FD06A28
+ 03F3DFE2E7EC47F1C7E32FC12F85FA6F8ABC45E13D5FC75F0FAF9DE159EEAE67
+ D3F5BB5222DBF6ADD0AB79A3C90872A430662581635D67C6DFD9A3E32FED1BA6
+ FC243E20B5F03785FF00E114F118D4AF74ED36FAE5A33669E408D623E472E42C
+ FF002FCAA0797C9C9DBF6D9E9514BF769303E1AF8CDFB2D7C48F0EFED5B77F1A
+ 3E077893C370789753B14835AF0EF8919C45345B563DDFBB058A3F90848CA9DD
+ 19218E481E05FD9DE339BFE0A9FF000B2D7C63E26D3FC4FE2B834B7B8D461D1A
+ 268AC34B3F67BC7FB3401C96D823D8FB9FE66694FA8AFB9FE3CFEC8FF0FF00E3
+ D789AC3C49E211AC69FE22B0B4FB0DBEABA26A525A4EB0EE66D9C641019D8F23
+ F88D731F06BF643F861FB386B97FAFF85B4EBEBDF135EC4F0CBAD6B578D75721
+ 18E5829202A93C6485C90304F5CE529A8ABB368C1C9D91E47E36FD9C7E22780B
+ F685F107C59F82FAFF0087E1B9F114623D6FC37E2712A5B5C1F972F1BC609C96
+ 50FC952096E483B6BB7F07FF00C2D478B56B9F89771E11B64758D74ED3FC2AF7
+ 1214396F31E7798724FC9B42718273CD7A9EAEE497393CD71BABBB156E49AF12
+ BD76E3CAD1EE50C3A52E64CE1356CF98C73EB5C76B9108A4DAA79C648C743FFE
+ AAEBF5C0E992B9CF3DABCF35ABABB47202E49E9953CD78EF73D8455D5EC05B5B
+ C6FE62E48E54BF24FB0F4FA135C4DE122F2E0E401F684079C7F09ABBA86A57A5
+ C8FBB838E10D6588A67B69A4663E679AAFEE7823A566CA35E5898E9913FDA588
+ DC40889E14FA819FE9DFE99D58F4991FC30938BA2A4B31F21BEE151CE47E22B8
+ B13DE200426476CA77A57BEBBCED2BB4F4236907E94EC05DD409FB2F04802688
+ F5F50C3FA5422DDA4D29A6FB50C472045B6CF232324E3F21F89A8E232DD59DD8
+ 98FCC4C65401D704E40FFBEAA9949F3900B0ED94CD219B1656F14BA44EED2482
+ 58183E09FDDE0F18FA9FE40D65EA058980EEC0194C7EBFFB3547299E2E1F838E
+ 8463FCFF00F5E9E13CFB52F23E595C6D53D48C75FE5400B730CCBA7DADC79EF2
+ 2312A149202107A0E7F954FABD835B7932995A7124633213BB6B775CFB7071D7
+ 9ACE5858703201F6C7144B1B4726D7C061C1C60E3FFD540CA52B10872790DDA8
+ A9EFAD96354084485802483800E3A73455AD897B9FB1F451457DD1F061505EDE
+ DBE9D6B2DD5DCF1DB5B44A5E49A670888A3A924F0054F5F3CFED75309DBE1DE9
+ 3A94EF6DE13D475E8A3D5E40FB10A0236ABB7653973CF1F2E7B567527C91722A
+ 2B99D8F4DD1FE3978035FD5E3D2F4FF17693757F236C8E14B95CC8D9C00A4F0C
+ 4F60339AD2F157C4EF09F81EF21B5D7FC43A7E9173347E6C715DCEA8CCB92320
+ 1ED906BCCFF69CF0C78374EF80FADB4FA769D66B6D6E3FB35A18923649F23CB1
+ 1631D4F503A8CF6AF318E7F10EAFF17BE1C4573A559EB3E251E038A792DF5872
+ 91CB2B3B06F30ED62AC0027A1E78E3AD73CAACE0F95EFA1A2826AE7D253FC5EF
+ 055B6836FADC9E29D297499E5304579F6A431348064A6ECFDE039C75A5F0F7C5
+ BF0678B2F64B4D1BC4DA6EA7751C4D33456D70AEC11719620761915F20FC5FF8
+ 4BA9FC2FF04682B7EFA75C6B9AEF8CC6A274FB2056CA12CADB6240403B464027
+ 1C020638C9FA374EB6F10E97E14F15DEF893C33E1DD0441A64CD04DA1C86491B
+ F76C5C3651703818C511AD37269AB581C2295D1E8BE17F19E85E36B192F740D5
+ AD357B48E4313CD67289155C004A923A1C107F1AB1A078934BF15581BDD22FE0
+ D46D048D119ADDC3AEE5386191DC1AF8EFE10492FECEBA6782FC5D24931F05F8
+ BEC92DF5757FBB6979F318A6F6565E3E9B89ED5ED1FB1B44E3F67FD0EE2460CF
+ 753DDCC5BB93F6891493EFF2D3A559CDA8B5ADBFCBFCC528249B477B75F187C1
+ 365E275F0ECDE27D363D6DA5100B3338DE2427010F60D9E3079C9157BC5DF11B
+ C31E028E27F10EBB63A479BFEAD2E660AEFEEABD48F702BC06DEC3FE19ABE234
+ B1EAB616BADF81BC61AC0787546895AEAC2EE424AA3E7974E3208E98247390D7
+ FE09E9FA778A3E3C7C57BFF12C50DE7892C75116B6305E00E60B205846D1AB67
+ 01805C91EA3A6EE45564DF2F5BFDDFE63E45BF43DC7C37F10BC35E30D2EE352D
+ 175CB1D4ECAD8133CB6D32B08B8CFCE3AAF009E7156B45F1768DE22D0CEB3A66
+ A76D7DA500E7ED90481A3C2E777CC3D3073F4AF997E274567E1CFDA32E3FE111
+ 8A18257F0A6A12EBF6F66A044408643099157A3171175E71B7D79DAFD9F751B5
+ D1FF00633B8BD17118686C753925F318611C3CD853E991B4E3AF3EF446B37271
+ 7D2FF8581C15AE7B45CFC5FF000559E8569AD4FE27D322D26EE468A0BC6B8511
+ 4AEBF7955BB918ABBE15F887E18F1C19D7C3FAF69FAC3C1CCA96770B2320EC48
+ 07207BD7C6DE15B655F85DFB3C59FD923964BCD7EEE631DC83E5B9170C006183
+ C1057B7415D1E836FA86B7A7FC54F899A7C36DE1BF14E9BA65CE88DE1FD2A3D8
+ F66C982F2BB0C6E7C2E548007CBDCAD66B11276D3FAB5C6E9A3E8FD77E38F807
+ C33AA49A76A5E2DD2AD6FA36DB2406E0168DBD1B19DA7D8E2A5D6BE33F817C39
+ A949A7EA9E2BD2AC2FA20ACF6F3DCAABA8650CA48F75607E84571DFB35F83BC2
+ 2BF05BC3971A7D8D8DEBDFD9A4D7F71246B23CB70C3F7A1D8E492AFB9707A018
+ AF2436BAD5D7ED7BF118786F43D135D923B0B557875890A431A886DC654856F9
+ B2318FAD5CAACD4632D35128C5B6BB1F56786FC51A478C34C5D4744D46DF54B1
+ 66282E2D640E85875191E95A958BE0FB4B9B3F0ED9A5F69F63A5DF32EEB8B5D3
+ 7FD4239EBB4E067B738ADAAEB57B6A64F70A2909C526EA621D45341A5CE68016
+ 8A28A0028A28A0043504C78A998D5699F8352CA4665F3F06B94D59F83CD747A8
+ 4A0035C8EAD36735C1599DF451CA6ACFF7AB92D4D861ABA5D525C93CFE15C96A
+ 92F04F7AF12AB3DDA48E4B597C0635E6FE2AB968A7B62A7E6DE4835E89AADD22
+ AB2B1C0279E33FE7BD79778AAE55AE611B8654312076E2B86476A29E9F756696
+ 98BB505C901495CF0E0066FC3191EF5957BA82C9772F908A232C4AA8E38CF1FA
+ 556B8B8263554E46DC649E9515B5F3DA5CA4E84ABA1CF071F5E6A063F509644B
+ 59B7864CC6C57231EBCF35957B7B25C5ECF2311BCED3D38FBA2AF6B3A925DBDC
+ CA5A42B22127CD604E7078CD624B701667E832A98CFF00BB40D1D16BFACDAC97
+ 28F64D09888236A2ED201C75F917FA9AAD7B7A9733FEEE268543124375E79C7B
+ 77FD2B0924000CB2E07239E95A775AF89558222A091104A0BEEDCCBFC43D3D3F
+ 1340CADA85DBC97A189C1F25003F4007F4AD1D5BC4C97D690C691324D16D1B88
+ CEEF9403D4F1C8381D0E7B62B1AEE50E6091082BB5813D7F88FF0088AABBC11C
+ 9183C60D03355ADEF0DB2DCC90CA203C6FDA42FE759AD73279ACCAC438C1DC09
+ CE6AECFAE3CDA65B59BB02B0B3156279C1C71598CE59B78FBA473ED4016F58D6
+ 66D426131762C5543193E6390B83C9F53CD1599338F2C73DF3CD156B621EE7EC
+ DD14515F747C18565789BC2DA478CF469F4AD6F4F8353D3E61F3C170BB94FA11
+ E847623915AB452693D181E57A47ECC7F0EF47BFB5BB5D124BC366C1AD60BFBD
+ 9EE61B7C74DB1C8E57D3A83D0576327C3CD025F1CC5E306B027C4515AFD892F3
+ CE93E58724EDD9BB675279C679AE8E8A954E0B6453937BB393F883F0AFC31F14
+ AD2CEDBC4DA69D461B394CD001712C251C8C6731B29E9EB597E1DF80DE09F0AC
+ 3AA45A669771047A9DA3D8DD07D46E64DF0BFDE51BE43B4FFB4B823B1AF40A28
+ 708B7CCD6A1CCED6B9CBDE7C32F0CEA1E034F065CE9693F869204B75B1791C80
+ 8841501F76EC82010739E3AD5DF07783747F00786ED340D06D3EC3A4DA6FF26D
+ FCC7936EE72EDF3392C72CC4F27BD6DD14F9527748577B1E61A57ECDBF0FF47D
+ 76CF55834691E6B193CEB382E2F26960B67C83BA38D9CA8E4647181DB1815A7E
+ 37F821E0EF883AAC5AAEADA511ABC4BB1351B3B892DA70BE85E3605B8C8E73C1
+ AEF28A9F670B5AC87CD2DEE721E07F849E13F87305DC7A0E8F15ABDDFF00C7CC
+ F2B34D34FECF2392C47278CE39E95C8CFF00B297C339EEA693FB06486DA6904B
+ 2D8417D3C76AEE3A1312B85F4E071C74AF5DA2874E0D59A41CD2EE723A87C28F
+ 0A6A571E199A6D1E356F0D36FD252091E24B53F2F44460A7EE2F0C0F4F735634
+ 9F86FE1DD0FC53ACF88AC74FF2356D65556FE513485270A00198CB6C078EA141
+ E4FA9CF4B9A322AB963BD8576795DC7ECC3F0EE5BF9AE61D1E6B18E77F327B3B
+ 1BE9E0B694FBC48E171DB0001567C43FB387C3DF15788AF75DD4B43965D56F48
+ 6B8B88B50B988C840007092003803A0AF4BDD499351ECA9FF2A1F34BB995E14F
+ 0AE99E09D06D745D1E07B6D3ADB779514933CA5773163F3392C7962793FA56A9
+ 3484D34B815A68B442DC7526EA85A5A6F99CF5A571D8B19A51CD5712548AF9A2
+ E1627A2981A9D9AA245A43416A8D9F14003BE0550BA97683534B2ED15937B738
+ 06B194AC6D0899FA95C601E6B8FD5AE3EF56D6A775D6B91D4EE09CF5AF2EB48F
+ 528C0C4D465C96FEB5CAEA90BCB9DA466B7AF9C9278358B73B893F29FCABC99B
+ B9ECD3470DAC786AF2EC10850E7D4D7253FC38D4AE2E49263452319DD5EB32AB
+ 7A1FCAABB23127E53F957233A923C3753F841AD198883CB9A3ECDBC0FE66B264
+ F83DE24278B65FC254FF001AFA17637F74FE546C6FEE9FCAA752AC7CEEBF073C
+ 4593BACF23DA58F9FF00C7AAFC9F07B57B848BFD1E48A5C618B49195FD1ABDE7
+ 637F74FE546C6FEE9FCA9582C7CEF71F077C41148CA962F30ECEB2C401FCDB35
+ 10F841E23FFA0549FF008110FF00F155F46EC6FEE9FCA8D8DFDD3F951619F3DB
+ FC2AF109B348468EFBD5890DF6A8BBFE3504FF00077C43184F2F4D798B282D99
+ E25DA7D3EF735F45EC6FEE9FCA8D8DFDD3F951603E71FF008543E25500FF0064
+ 06CF6FB4C7C7FE3D5249F0ABC4CF6EB18D0C295E770BA8B27FF1EAFA2B637F74
+ FE546C6FEE9FCA8B01F355CFC1EF15CBB443A2F18C906E62EBFF007D515F4D5B
+ A36F3F29E9E945689684B3FFD9}
+ end
+ object Image2: TImage
+ Left = 12
+ Top = 22
+ Width = 98
+ Height = 60
+ Cursor = crHandPoint
+ AutoSize = True
+ Picture.Data = {
+ 0A544A504547496D616765FE0E0000FFD8FFE000104A46494600010101004800
+ 480000FFDB0043000302020302020303030304030304050805050404050A0707
+ 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17
+ 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414
+ 1414141414141414141414141414141414141414141414141414141414141414
+ 14141414141414141414141414FFC0001108003C006203012200021101031101
+ FFC4001F0000010501010101010100000000000000000102030405060708090A
+ 0BFFC400B5100002010303020403050504040000017D01020300041105122131
+ 410613516107227114328191A1082342B1C11552D1F02433627282090A161718
+ 191A25262728292A3435363738393A434445464748494A535455565758595A63
+ 6465666768696A737475767778797A838485868788898A92939495969798999A
+ A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6
+ D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301
+ 01010101010101010000000000000102030405060708090A0BFFC400B5110002
+ 0102040403040705040400010277000102031104052131061241510761711322
+ 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728
+ 292A35363738393A434445464748494A535455565758595A636465666768696A
+ 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7
+ A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3
+ E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F58F
+ 8C1FB7F37C49F845F190781FE1C78A757F04E9FA7EA3A1FF00C279A7BC5E4C57
+ 4D0346932C7B8379419E372EAC596360ECAB902B6BE03FED47A5FC05FD84FE12
+ 6BBE24B7D67C55E20D77CCD3B4BD274C8CDD5F6A576D712848D79F6032493D00
+ 0CC429F15F8657DF10BE027ECC5F167F673B8F83FE33F1278B9D757B4D3755D1
+ 74E63A65D5A4F032FDA85C3633801CAA2A9673B2300392173BE20FECCBF10B5E
+ FD927F664D7E0F08F886F2F7E1FDDDCCBAE78674F8E4B3D696DE5BA490BC0AD8
+ 9164516E00D80B832A328C2922BA127D8DF0D7F6C083E267883C57F0FF00C49E
+ 0DD77E19FC43D3B4893548F49D599185CDB6DC79B04E84062A48C8E31CE09DAF
+ B7E75FD91FF6A33FB3F7FC13E2DFE2178A6DF53F166CF11CF65E58B9DD70DE64
+ 802FCCF9E07A569FECC5F0E2CFC67F1635BF1CE8FF000BFE2668D65A66897161
+ 69E26F88DAE49F6DBB778D94DB4766E8C4AEE773B84BB415E818EDAF06F15F81
+ BC45F0FF00FE0936FA5789741D4BC3BAB9F18098D86AB6525ACE15A5F94F96E0
+ 3608190693B0D1F6FE99FB795843F113C23A278ABE1D78A7C19E1AF194C96DE1
+ CF146A912182F6572A22124684B4224DE9B4B723782C154332FCF1F0F7F683F1
+ 87C36FDB2FF692B2D17C13E28F8A173F6A824B5D2B4CB80B059431EF32312E48
+ 42DBD76AA292C4115B7E3D8FC5DFB61EB7F01FE1F4BF0DBC5DE00B6F0F5CA6B1
+ E20F126ABA3B369F6D2DBDB7C90DACC24D93A4AE1903EE1C323618EE51E8DFB2
+ A780FC4DE1CFDB27F699D6B55F0EEA9A668BABDCD9B69FA8DD59C90DBDE85F33
+ 261760164C6E192A4E33EF43567661B947E37FED45E02F8E7FB056A5F11E4FF8
+ 4B74AD026BDB6B5BCB3D02F22B4D52DEE12EA3531F9A43A6DCED6CE0EE465E14
+ 92170BE25789AF62FDB5FF0064EB4D2B53D4E0D1EFB4099DAD66BA62664FB339
+ 065C101DB006491C9AF0EF0E7C14F8871FFC12BBC5FE117F01788E1F14DC78A9
+ 2E21D11B499D6FA5884D6C4C821D9BCAE15B9C630B5EF1E38F86DE2CBCFDAD7F
+ 651D660F0CEB13691A2787DE1D4AFD2C66682C6436CCA127902E236C9030D839
+ A6D6B60BE877BF14BF6EFD4BE1DDF78CAF2D3E0CF8B35BF067847503A6EADE25
+ 0F1DB46251805A189FE69630DC171F2805492030AD6F8D1FB79F85BE11693F09
+ 356B6F0CEBBE31D3FE244267D2D343895EEB18B728821620BC8FF694508083B8
+ 115F0E7C47F007C52F88DA0FC5AD27E25FC3EF8B7E3AF89D26A174DE1D48BCEF
+ F8452C6D1764BE6C255C46CFB629008943890F908AA64248F58BBF86BE33D461
+ FD83248BC19E2203C32CF16B824D2AE11B4B2A6C909B9CA66104C6E417C060A7
+ 0714AD7D02E7D39F03BF6C587E28FC55F11FC38F14781F56F86FE2FD22C46A82
+ CB579A39167B4CA664122FCA08F310E013FC5CFCA71E19F19FFE0A0927C41F81
+ BF14AFFC13F0CBC5DA8780BFB36FF45B5F1EC3B21885CBC4D124E21622458833
+ AB6FFBC0632AAD903A2D57E13F88FC47FF00051EF18EA72E89AB5A785B53F87F
+ 2694BE20FB1486CFCE708BB1652BB0B8193B320F07E87C37C107E29FC35FD8C3
+ E227ECF375F053C65A9F8CA2FED1B6B4D4ECB4D32E91736D26659265BA240770
+ A65D888ACCEDE52AE5998280647C2EF18F88E6F869E137935ED41DDB49B42CCF
+ 3B1627C95C9249E4D15BDF0CBE09FC41B1F86FE15B6B8F04EBD04F0E956B1C91
+ 4DA7C88E8C225055948041078208C8A290CFBCFF006997B9FF00855D0DBDB6A1
+ 7DA635F788FC3FA7CB73A6DE4B693F933EB1670CAAB344E9226E8E47525581C3
+ 1E6A13FB387855582FF6BF8EC64E307E20EBDCFD3FD33B54FF00B4AFFC93BD27
+ FEC70F0B7FE9FAC2A9FED01E30F11F84345B59745BD1A4D84ECD15C6AA9671DC
+ 3C1334912C2BFBC758D15B7481A493E55000CEE65CF2E2B111C2D19559EC8695
+ CCBF11FC22F87BE128E11A8F893C751CF306F22D62F1D78826B89F6805BCB852
+ EDA47DA082DB41C0E4E0035F287ED3567F0D7C67F083C79A71D5FC4ECD67A5CD
+ 7F67697BE32BBD49D2E20432C6CFF6BB996D5D59D42910334A1461198C8E9174
+ 57F796BACEB325BEABADCDA8DBDFA379B6E969F6D8DFCA39533BDAEA124F21CE
+ D5532BBE0485536AA8AF3EF8C9A5783EC7E0E78B6F2DE0B3469344BA96DCC650
+ CCA4C0C232631A9BB0390323CB3B7736E5C2E0FC054E23C555AF4E5452F66DA5
+ AECF5EE69CB169C7AFC8F77F0D7C569FC4BA54779A1F8A6EEE2D611E4B2477B2
+ 2B5BBA805A196332031C8B900C6CAAEA7A8ED5DCFC2BF166AD73E3DD2E1BCD66
+ FAE2176903C13DDB3A36227FE12E73FC273C8E477C1AFCDED43E227D8AF6EB54
+ D3FC63630DEDA01630EA365696769751053B96211CBAC24AF0A3F58E64688B03
+ B91F62E7ECAFD943C47E24F1558697A9F88A5FB4995CFD87506B416B2EA16BF6
+ 74FDFC902CF2286697CF0193E4608190142A6BF78A18FA18DC34E8CE928CD2E9
+ 6FBCFCF6AE16BE13150AD1AADC5CB6BBFB8FBA1183A2B0E411914EA86CC96B48
+ 0B72C5173CE7B54D5F22CFBC5AA392F8B9AE5F7867E14F8CB58D327FB36A5A7E
+ 8D79776D39556F2E5481D91B0C0838201C118F5AF96FC1DFB55F8ABC45E06F86
+ 76579A88B0F1B4FE2ED2B4FD66336D16FBFD32E91A449D536E156443182C9B48
+ 2323686507E95F881F0F75AF1D2F88AC3FE1296B2F0EEAFE1DB9D1BFB2858238
+ 8AE65DC3ED9E6E439C236DF2B214F5CE6BCF35FF00D91F4CD76F7E126A7FDB4F
+ 6FACF8092C207BB4B6DC35286D4AB2A3297FDDFCCAC41CB11E6303BB835D74A5
+ 4546D516BFF00C2A2A8E57833CAAC7E38788758F1CF8DB4FD57E31EA1E137B0F
+ 145EE95A7E996BE124BF4FB3C726232D32C0DCF3B7E66CFCB9279AF4DFDA01BE
+ 257873C57E17B9F0E7C459B48D23C45AEDA68A34E5D22D661641E272D207742C
+ E498C9C1231BB1D2AD693FB3FF008FBC21AC78AAE3C2DF14ADB47B0D7F5ABBD6
+ E4B49BC351DCB452CE7950E6619002A0CE39C138E6BD0FC77F0D66F1E45E0A37
+ 5AA882E7C3BACDB6B324AB6C08BA78A3910A6DDDF206F309CE4E31D0F5A994A0
+ A778DADE9FF00718CB96CF732A0F877F10A386347F8AD752BAA80D21D0ECC163
+ DCE02E28AF4FA2B98DCF2AFDA5BFE49D693FF637F85FFF004FD615B7F17E0593
+ E1578C997396D1EF3A1DA7FD43F427A1EBD78AE17F6DBBAB9D3FF66CF12DFD8D
+ D49657F6377A65EDADCC4A8CD14D16A36D246C03AB29C3229C1523DABE2EB9FD
+ A3BC59AFFC38D6A7D73E326B6D1C967245358CB67A1C02E370D862DD25B2AA82
+ 6450493C678EF8E98E02AE2B0F52AD36AD1DEEEDFF000E7156C5D3C3D48C26AE
+ DEC7D45E33D2D755F88BAE295202D85B0C904120DC5DE3079208C6015CE3038C
+ E057887ED39A6487F643BBB7B646966497536221C2E151B51666C860A0001C91
+ 93DF00F0B5E37E1FFDA9AEE7F19F885B5FF8B7ADD959CF6D0C50CEB1F8665697
+ 6B4CCC2411875E4CBC6C1D378663F28AE63C5BF1C0F89B4CD27C35AB78F75A9F
+ C2D7B2DD3DFC73DEF86A5648E7F3F0C0C2C5D5BFD209756E4658000852BF08B0
+ 2BEA387C3549ABD39F33DEC95F6D8F2BD9BA78BAD8A82779452F2D1F42DE8B65
+ 1E87F067E20A2848FCC31CE4921372F94C371064527E5503764E001865CE6BEF
+ 6F0513FF0009169F970E4B1C912139F90E490246078EA4E49C6322BF3FFC57F1
+ 7FC30BE0FF0015E9FA3496ED0DF794B0CB16B564A0BEC6E591AF926382E3E70A
+ 0707016BEEDF837E35D33E205BF87BC45A55D2CFA7EA1199D0FDA11CC7946DC8
+ FB6570194E558027041E7BD7E9B964E94F138B9C5A6A4AEBD2C7CC631577F559
+ D44E2DB775E6D9F5458926CADF2727CB5C9249EDEF53D4162316506460F96BC7
+ E153D788F73F485B0514514861451450014514500783FEDCB8FF00865CF1A64E
+ 07FA173FF6FB057E441D36587C40BAB69FA9DCE9B7C20580C96C226CA824E0EF
+ 56F5FA703D057EF06B9A169BE25D2E7D3757D3ED755D3A7C79B697B0ACD14982
+ 186E46041C100F23A815E41E30F80BF0E4DD208FC0FE1FB6FF00AE1A6409FC93
+ DEBD8C1E269C29BA1561CC9BB9E563284A7255612B5B43F367C01AFF00DB5960
+ BDF1FF0089AC651F29108D3957248FBBBADCE39553D3F810FF0002E3DB3C39E1
+ 0D3A68131E3CD76EE40415919EC8328DAA005D9100A46C8F040C8D91E0FEED31
+ F4B49FB3FF00C3EC063E12D21B9C60D8C3FF00C4D5FB4F83DE10B623ECFA1595
+ BE071E55BA2E3FF1DAF59D5CAAA4396AE13EE67CFD7C1E2EBAFE3687CEE9F0EE
+ C02204F17EBA8AB82AA8F6A8108C63680A00C6C4C7A6C4C7DC4DBDCFC05F0D69
+ BE04F101B0D3AFAE6ED2FEF65D418DD3444A48601195411ED50B88F71017E667
+ 278AF59FF8573E1F889DBA7C40FAED1FE15A3E1FF06E93A76A26E2DECE38A78F
+ 76D9154647CBFF00D73510AD96D252F6141C5B4D6E7152CAF14E4A6EADECD77E
+ E7B0D8E7EC56F9E0F96BFCAA7A8AD062D61E73F20E4FD2A5AF943F42B5B40A28
+ A2800A28A2800A28A2803FFFD9}
+ OnClick = Image2Click
+ end
+ object lblVersao: TLabel
+ Left = 395
+ Top = 81
+ Width = 72
+ Height = 23
+ Alignment = taRightJustify
+ Anchors = [akTop, akRight]
+ Caption = 'Version'
+ Color = clWhite
+ Font.Charset = ANSI_CHARSET
+ Font.Color = 6435072
+ Font.Height = -19
+ Font.Name = 'Verdana'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ Transparent = True
+ Layout = tlCenter
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 109
+ Width = 474
+ Height = 105
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 1
+ object Label2: TLabel
+ Left = 8
+ Top = 8
+ Width = 109
+ Height = 13
+ Caption = 'Desenvolvido por :'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label3: TLabel
+ Left = 136
+ Top = 32
+ Width = 37
+ Height = 13
+ Caption = '( QmD )'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label8: TLabel
+ Left = 168
+ Top = 56
+ Width = 68
+ Height = 13
+ Caption = 'icq: 15630894'
+ end
+ object Label4: TLabel
+ Left = 16
+ Top = 56
+ Width = 143
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'qmd@usercontrol.com.br'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlue
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = Label4Click
+ end
+ object Label5: TLabel
+ Left = 16
+ Top = 84
+ Width = 82
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'Canal #Delphi'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = 21248
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = []
+ ParentFont = False
+ OnClick = Image2Click
+ end
+ object Label11: TLabel
+ Left = 104
+ Top = 84
+ Width = 84
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'irc.brasnet.org'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clGray
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = [fsItalic]
+ ParentFont = False
+ end
+ object Label1: TLabel
+ Left = 16
+ Top = 32
+ Width = 108
+ Height = 13
+ Caption = 'Rodrigo Alves Cordeiro'
+ end
+ object Image3: TImage
+ Left = 424
+ Top = 56
+ Width = 30
+ Height = 16
+ Cursor = crHandPoint
+ AutoSize = True
+ Picture.Data = {
+ 0A544A504547496D61676502040000FFD8FFE000104A46494600010101004800
+ 480000FFDB0043000302020302020303030304030304050805050404050A0707
+ 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17
+ 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414
+ 1414141414141414141414141414141414141414141414141414141414141414
+ 14141414141414141414141414FFC00011080010001E03012200021101031101
+ FFC4001F0000010501010101010100000000000000000102030405060708090A
+ 0BFFC400B5100002010303020403050504040000017D01020300041105122131
+ 410613516107227114328191A1082342B1C11552D1F02433627282090A161718
+ 191A25262728292A3435363738393A434445464748494A535455565758595A63
+ 6465666768696A737475767778797A838485868788898A92939495969798999A
+ A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6
+ D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301
+ 01010101010101010000000000000102030405060708090A0BFFC400B5110002
+ 0102040403040705040400010277000102031104052131061241510761711322
+ 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728
+ 292A35363738393A434445464748494A535455565758595A636465666768696A
+ 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7
+ A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3
+ E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00EC22
+ F12FC42F16F88A4B2D0D5AE56355DF2150B1C63FDA63C0FA753DB3567C57F193
+ 5DF84FE289BC3561A769FE33D7D2DD659E5D4B52B6B445C8DC2386DD9B7C8D8C
+ 60E7249C2A9AF21D3BF6BCB2F873E23BA8F4ED563B8B266FDED9CE85A22D800B
+ 0C1043600E41F4C835E77F1CBC5FE10F8C3E3DBBF16F877C4769692DEA45F68D
+ 3B5589A2963748C47942AACAEA4203C9041ED5F8EF0BE1DE3388254B889B8E0B
+ 924E2EF51273BC6CA6E0E2D2B7335AA8B764DBD11F3B4146182F6B85E6788E65
+ 7524ACA3AFC09DD3E9BEBD92DCFA7BC1BF10FC45F1B6C7C4571E1FB69BC39E23
+ D12758AFBC3F7243C6598B00639485DBCA499461C63AF35F3CFED1BF117C69A7
+ C96561A94F3595CC3236E85D0A10707F3FAD747F07FF00695F0CFC06F056A3A6
+ 0F11AF88F589D93ECD0A23C96968A32482EDB5893B8FCAA368C0E72493E2BF1F
+ 7E3643F15351B5BFB8D45EFEE9723EE61634E48551D00E4FE75857C3E2171262
+ 6860A2E597A6BD9B939B7F02BD9CB571E6BD9CAEFB4A4ACCAC452A32A54653BF
+ B777E7492E4DDDAFD13B5B45A79267FFD9}
+ OnClick = Image3Click
+ end
+ object Label12: TLabel
+ Left = 408
+ Top = 80
+ Width = 59
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'Curitiba - PR'
+ OnClick = Image3Click
+ end
+ end
+ object Panel3: TPanel
+ Left = 0
+ Top = 217
+ Width = 474
+ Height = 299
+ BevelOuter = bvNone
+ TabOrder = 2
+ object Label9: TLabel
+ Left = 6
+ Top = 9
+ Width = 163
+ Height = 13
+ Caption = 'Cr'#233'ditos e agradecimentos :'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label6: TLabel
+ Left = 77
+ Top = 271
+ Width = 154
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'http://www.usercontrol.net'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlue
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = []
+ ParentFont = False
+ OnClick = Label6Click
+ end
+ object Label7: TLabel
+ Left = 6
+ Top = 271
+ Width = 68
+ Height = 13
+ Caption = 'Site oficial :'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = []
+ ParentFont = False
+ end
+ object MemoAgrd: TMemo
+ Left = 6
+ Top = 24
+ Width = 463
+ Height = 228
+ Ctl3D = False
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -11
+ Font.Name = 'Verdana'
+ Font.Style = []
+ Lines.Strings = (
+ 'Alexandre Oliveira Campioni - alexandre.rural@netsite.com.br'
+ 'Bernard Grandmougin'
+ 'Carlos Guerra'
+ 'Daniel Wszelaki'
+ 'Everton Ramos [BS2 Internet]'
+ 'Francisco Due'#241'as - fduenas@flashmail.com'
+ 'Germ'#225'n H. Cravero'
+ 'Luciano Almeida Pimenta [ClubeDelphi.net]'
+ 'Luiz Benevenuto - luiz@siffra.com'
+ 'Luiz Fernando Severnini'
+ 'Peter van Mierlo'
+ 'Rodolfo Ferezin Moreira - rodolfo.fm@bol.com.br'
+ 'Rodrigo Palhano (WertherOO)'
+ 'Ronald Marconi '
+ 'Sergiy Sekela (Dr.Web)'
+ 'Stefan Nawrath'
+ 'Vicente Barros Leonel [ Fknyght ]')
+ ParentCtl3D = False
+ ParentFont = False
+ ReadOnly = True
+ TabOrder = 1
+ end
+ object BitBtn1: TBitBtn
+ Left = 395
+ Top = 264
+ Width = 75
+ Height = 25
+ TabOrder = 0
+ Kind = bkOK
+ end
+ end
+ end
+ end
+end
diff --git a/official/2.31RC1/Source/UCAbout.pas b/official/2.31RC1/Source/UCAbout.pas
new file mode 100644
index 0000000..5c99bb4
--- /dev/null
+++ b/official/2.31RC1/Source/UCAbout.pas
@@ -0,0 +1,115 @@
+unit UCAbout;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Messages,
+ Buttons,
+ Classes,
+ Controls,
+ ExtCtrls,
+ Forms,
+ jpeg,
+ StdCtrls;
+
+type
+ TAboutForm = class(TForm)
+ Panel1: TPanel;
+ Image1: TImage;
+ Image2: TImage;
+ lblVersao: TLabel;
+ Panel2: TPanel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label8: TLabel;
+ Label4: TLabel;
+ Label5: TLabel;
+ Label11: TLabel;
+ Panel3: TPanel;
+ Label9: TLabel;
+ Label6: TLabel;
+ Label7: TLabel;
+ MemoAgrd: TMemo;
+ Label1: TLabel;
+ Image3: TImage;
+ Label12: TLabel;
+ BitBtn1: TBitBtn;
+ pnlFundo: TPanel;
+ pnlComponentes: TPanel;
+ Image4: TImage;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure Label4Click(Sender: TObject);
+ procedure Label6Click(Sender: TObject);
+ procedure Image2Click(Sender: TObject);
+ procedure Image3Click(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ private
+ procedure WMNChitTest(var M: TWMNchitTest);message WM_NCHITTEST;
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+{
+var
+ AboutForm: TAboutForm;
+}
+
+implementation
+
+uses
+ ShellAPI,
+ UCBase,
+ Windows;
+
+{$R *.dfm}
+
+procedure TAboutForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TAboutForm.Label4Click(Sender: TObject);
+begin
+ //ShellExecute(0, 'open', 'mailto:qmd@usercontrol.com.br', '', '', SW_SHOW);
+end;
+
+procedure TAboutForm.Label6Click(Sender: TObject);
+begin
+ //ShellExecute(0, 'open', 'http://www.usercontrol.net', '', '', SW_SHOW);
+end;
+
+procedure TAboutForm.Image2Click(Sender: TObject);
+begin
+ //ShellExecute(0, 'open', 'http://delphiland.dyns.cx', nil, nil, SW_SHOW);
+end;
+
+procedure TAboutForm.Image3Click(Sender: TObject);
+begin
+ //ShellExecute(0, 'open', 'http://www.curitiba.pr.gov.br/', nil, nil, SW_SHOW);
+end;
+
+procedure TAboutForm.FormCreate(Sender: TObject);
+begin
+ Self.BorderStyle := bsNone;
+ lblVersao.Caption := 'Versão ' + UCVersion;
+end;
+
+procedure TAboutForm.FormShow(Sender: TObject);
+begin
+// pnlComponentes.Top := Round((pnlFundo.Height - pnlComponentes.Height) / 2);
+// pnlComponentes.Left := Round((pnlFundo.Width - pnlComponentes.Width) / 2);
+end;
+
+procedure TAboutForm.WMNChitTest(var M: TWMNchitTest);
+begin
+ inherited;
+ if M.result = htclient then
+ M.result := htCaption;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/UCAboutXpStyle_U.dfm b/official/2.31RC1/Source/UCAboutXpStyle_U.dfm
new file mode 100644
index 0000000..966218a
--- /dev/null
+++ b/official/2.31RC1/Source/UCAboutXpStyle_U.dfm
@@ -0,0 +1,768 @@
+object UCAboutXpStyle: TUCAboutXpStyle
+ Left = 245
+ Top = 225
+ BorderStyle = bsDialog
+ Caption = 'About TUCXpStyle'
+ ClientHeight = 315
+ ClientWidth = 510
+ Color = clGray
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poDesktopCenter
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Image1: TImage
+ Left = -1
+ Top = 0
+ Width = 510
+ Height = 151
+ AutoSize = True
+ Picture.Data = {
+ 0A544A504547496D616765F54C0000FFD8FFE000104A46494600010101006000
+ 600000FFDB0043000302020302020303030304030304050805050404050A0707
+ 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17
+ 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414
+ 1414141414141414141414141414141414141414141414141414141414141414
+ 14141414141414141414141414FFC0001108009701FE03012200021101031101
+ FFC4001E000100020301010101010000000000000000070805060904030A0201
+ FFC4006A10000103030204020505080610110C03000102030400051106120708
+ 21311341091422325115617181911618234254A1B1C138A2B2B3B4D117333637
+ 4352556272737475769293D2192425262734355364848594A3A4C2C3E1283946
+ 476365828395B5C4F0D3E2F1FFC4001B01000203010101000000000000000000
+ 000003010204050607FFC4002F11000202010302050305000203000000000001
+ 021103041221053113223241513361D1141571A1C12353424381FFDA000C0301
+ 0002110311003F00E9738E2196D4B716942123254A380056264EB2B0C26FC491
+ 7AB7C74633B9E928401F69AF5DE5D0C5A65B8AF752DA89E80F97C0D561E235FA
+ 3A19214CB0A013B49F0539CF7AE5CA51846DF73AB8F1BC8E913B4AE3670F6115
+ 7AC6B9D3AC6DEFE25D184E3ED55798F1FF008623BF10F4BFFF00588FFE7D5174
+ DA205F6F9E2FA9C6280A395A994F4E9FD8D652E3656448663A2D709008202FC1
+ 6FE1FD857267D4B163E25DCEDE3E94F246D32EB7F27DE191008E21E9639E9D2F
+ 11FF00CFA238F7C3471CD89E2069852F3B768BBB19CFF8F54E34FE92B6352521
+ C87094E673D5A6C63ED456957DD4D618F26732CDBA0ADE123C341532DABDACFC
+ 366690BAA29729705FF6895D597FFF0093B70E338FBBCD39DF6FFBA8CE33FE35
+ 15C76E1C2319D7BA6C67B7FAAAC75FDB55129F668B6F8B1643916DE1A7901650
+ DC64A55BBE19DBD2B2AC3365D5B692C376F61A92C607BA91D73F1F0E96FAB457
+ B0FF00D91FCB2EEB5C6BE1F3E406F5B69F709EC137264FFDAAFBB7C5CD10EA82
+ 51ABAC8B51380133DA3FF6AA8459AD6B5CB7633B1A3A10DAB614A425473FE27E
+ BA99B41F0E60458C64AE3B2E3A06E095B68C7E8A44FAD6D7492172E8FB5D5967
+ C71034C28029D416C502768299683D7EA35FD7DDDE9CF2BE5BCFD12507F5D562
+ B8C88D69BAAD8716DB51969CA709091BBCFF0017A563634C8525C5A187512413
+ D46E49FCC40CD57F7A6FB240BA3DFB96D11AC6C4E0CA6ED0D43E67926BFD6F57
+ D91DCEDBAC538FFDA8155A6D96F5BECF8AC846D1FD0D4D006B60B3E9BD892EBC
+ 184ACF64A9BC83F652A5D724A554BFBFC959F4A8C78B764F4753DA4027E528C4
+ 0F30E835FE7DD45A3FAA51B1F1F105549E33EBA8F60868B4DA0B4BB83982B759
+ 4E437839FD58FAEBC9C24E27196DBD0EF31824A13B9525491848F2FA727A7D74
+ E7D626D5C52FEFF2443A4EE8DB6CB83F75367FEAA44FF2C9FE3AF92B59D852B0
+ 937885B8F978E9CFE9A8463AADD7C64B915C5141F34242143F58FB2B0726D2EC
+ 175C54656F5792DC73247ED6B37EFB91774BFBFC911E957EE586775DE9C61652
+ E5F6DE850EE152503F5D7C871134B904FDD0DB7A7FC291FC755851A6E3DE1F58
+ 9EA5A64FE3786B391FB5C57B9BD096FB7462F02EF5F74B8B041FA462A575E7EE
+ 97F7F918BA3DFB96355C4BD26804AB51DB001E66523F8EBFDFE495A4CA41FBA4
+ B5907FE168FE3AAC31EC51D9716B90DA568CF61839FDAD6B770532DDCA5210DE
+ F69006D6B03AFD7B6991EB97EC86AE8A9FBB2E08E25E93270351DB3FE748FE3A
+ 0E25E933FF00A476CFF9D23F8EA8ECE8724C80E368F0D39F733FFF005AF43B18
+ 21090B52724754E707F73575D6EDD522FF00B1C6AF732F0C5D7DA6A6AC263DFA
+ DCF28F64A24A09FD35916AF76F7D7B1A9AC38AF821C06B9FECDF9EB5CA546491
+ BC00BF0FCC8CFD18FCF52568BE27ADB948695B4277241F670475F8D7574FD423
+ 99D1CBD4F4E783B170B70DC13E66BFDAC5E9EB80B94469C42F202015271594AE
+ C3AF6389CFB8AAF3CCDF3B3A2396C5C7B3BCD49D57AE26FB30B4C5A0853E54A0
+ 7C32F2BAF84952B6A47452CEECA50A00E242E61B8BB1780FC17D59AEA5A03DF2
+ 4432B61950514BD216436C3676F5014EAD0927C8127CAB983E8E9B34BE38F1BF
+ 5BF10B544A7AFBAB58530512E504AB0B925DDEE818F65494B2109DB84A52A500
+ 318C3611B56CA4A4D3A458AB87359CDADEE4C3B958381DA7AD36390DA5C106F5
+ 7342A6804E4856E90C96CE3036A9A0410723C8677417A4C2D96CD64DE8FE34E8
+ B9FC2BBDAC27C39CE3864C1741253E21504828415020293BD1D0E56306ADCDAB
+ 435AEDD1D285B097DCEEA52C773518F329CA9E95E61787770B0CC8CDC4B906D4
+ BB74F08DCA89236E12B1D412338CA73ED0C8E9DC4DC5F0D11525CD9F0639D0E1
+ BDCB980B1F08AD32E4DF2FB7688263574B7782EDB5B498EB9294A9EF1324A9A4
+ 2540A12A49F111D7A9C4EF5C1CE4E74E5C742F3B5A72C1734F8174B4DC2E3024
+ A10AC843ADC79085804771B927AD7772092614724E496D3D7EAA89C547B13093
+ 9773EF4A5292305294A8014A528014A528014A528014A528014A528014A52801
+ 4A528014A528014A528014A528014A528014A528014A52A40C06BE9420E88BF4
+ 927686613CE67E184135456F3A8A45E9294A944E427775ECAC76FCE2AEDF174A
+ 870BF5484F552ADCFA40F89282055046E4FABB016BE8A24287CE0A40FD46B87D
+ 432CA12DABE0F45D330A9C1CBEFF008363D3D6C5379DC8C255D4AAB292105525
+ AC273B54304F4AC7596F01684A428249E80D643504B8F63B248B94A7C283693B
+ 5BC1F695E5F9EBCDA4E72ED6CF53CE38F0423C52D633CEAA94CC77D715B8FECE
+ 5B3DCD66B86ECC2976EDEF2A0BCEE7D616E3C83E20FAF1519CA71ED65A8F6B08
+ 5788FE54A48EFE67F40ACD9B3DC6C501515511E8E5E3B52EA8E06D1D7F557665
+ 0C7186D6B9150C9293E495AE136DD7E69F93EB43C409D8D3683EC835F7D22A8F
+ 02F315B65C0E2D6D1DE8FEBB06A0F4F8D6C4A521E586F3EF673D6B60D352661B
+ B09515F52D4C9DCAF2C0F3EFF366B93934D149C91D14DB4582B459D8877F75E7
+ 46E69C0167033ED549D1AECEBE8D90E394242701407CD5A3D8E47CA91A0BAD37
+ E1A1C4654AEE55D3E1DEB3D7176E08B4BD1E23A88CE280C3CB38090082AEBF46
+ 457127EAA664CA9B9A56642668F87AB6D2B44E0ACA8F5711F8BD73DFCAA37BE7
+ 09665910F3B67F582A410A4A93ED63A8ACDE9BBB7C88EACC490A929DE80E23C4
+ 2B42C9501DBEBCD4AEECC75B92E3214B6C2D093840C63EDAB37E1F090A92941D
+ 27C118692E233B6AB53CD6A080B624B40203D903C539C0FA3AFC6BEB7DE26DC5
+ EB67ABC1692C2923F0AE9EA5093F38E9D7B7D7595D53A75B97252DBE12B6DC23
+ 25CC7D23B57F08D090EDB6E9E979D2A664B44123DD49C647E7C509C65CC91A61
+ 1C6D6E6F923DD37A1AD3ADA4BBE24B79B928214EE1585AC13D719ACF46D1D078
+ 7D73F9454DBF3ED2973608CB2327C8124F4E8483F557F4F59CE9FB3D96F30B08
+ BA297EAEE20F675B07DEAF67132E4F46D24B9697521C4A90B085F441F686720D
+ 31F9DD2EC2E772957646C568E2B5AAF3735C18B1D36F58C270BDA9F13E615B05
+ D4088E34F2FD92AEC93E67155DF40CB99A875EDBAE122032E30959DAFA127674
+ 49CD4F3799CEDDDF71A1B5B61046C2E7551FEC7E1F5D2B263D8E8A4F1A849462
+ CF4BF3E2C58C1F6D285C83EF253D7BF4AC14EBBC99C5D63C3D8063667AF9FC2B
+ 0B263A92F80DBBEA8D15ED538B574C8AF72E4A3D7938783AB40CE5A3DFA521C7
+ E50F58AA3767D5A8373536579429903AA36E09F877A5B74E371E33B224379794
+ 7A823B75ACAB17495290DA83ADA5A1FD0CA7DB557FB72B9AC3186FDB4F4DC318
+ 3DEA8DEDE12149BF935CBBC76D8F690D25381DEB587ED91653A875F5F86A27D9
+ 3D71F3FE6AD8A715C8960281013D5408AC7CE8C62A5C71080E38EF40850C84D5
+ E0EDF61D16DAAB347D496E4A64267B237141DBF4A7B5601529F4294FB0A294EE
+ 49C8E9D8835BC5DADAE18BE1B89521D3D7C30462B013EDA96ADAB4A127784924
+ 63E6AEC69DB8E44D19B3C13C6D32E1701F52FDD0E978EBDDB949484A8E0F90A9
+ 3EA03E529E53BA29A2AF7B7A81FB0D4F95F4387314CF9D64E26D1493D2ED7F97
+ 66E5621448CA0966EBA8A243920E7AB61A7DE0075FE9D9477CF6FAEB9C7C9573
+ 38E72C9C5B62E935B54AD2B71D91EEF1DB46E70201250EB7D47B4824F4EC52A5
+ 8C64823AD3E90AE1C4BE267297AE215BD90FDC6DECB776650491911DC4B8EE00
+ 0727C20EE0799C7D35C15ED5BF1D38D18B25A959FA61D25AB2D1AEB4DDBAFF00
+ 61B83174B3DC194BF1A5C756E43883D88FD047704107A8ACBD700395BE7275DF
+ 2AD7970D85E45D34D4B792ECFD3D3947D5DE3D0296D91D5A74A46378C8384EE4
+ AC240AEC8F2D5CDFF0F79A0B378BA66E061DF996CB9334F5C0A5136380424AC2
+ 4121C6F253EDA491EDA42B6A8ED09941C47466A4571E2EF2C9A8ACFE908D3DC5
+ 5B4598AF474D8BE2DCEE2990D252CCC319E8FB4365616720304909232B273DF1
+ 7D607FB463FF006B4FE8A4A84C4E40448692EA41DC028763507733BCDA59B952
+ 836A9DA8F4C5EAE7679EB11D99D6C5475243D8512D14ADD4AF2128CE71B7A8EB
+ 9C810DB95225251B64F14AA4FC3EF4AAF0F389DAF34D693B3696D48C5C6F5706
+ 6087AE098EDB2C85AB0564A5D51381D718ABACDB89750168214923208AAB8B5D
+ CB269F63FAA5294B245294A9014A52A005294A005294A9014A52A005294A9014
+ A528014A528014A52A005294A005294A00533D71E75E6B95C63DA2DD2A74B752
+ C448CD29E79D59C2508482544FCC0035CC2D6DE98FBA41E253ACE9BD136F97A2
+ 633CA68AE73CE2674A4838F112A49D8DE7A9DA52BF2EA29AA2E5D8AB928F73A8
+ D4AD3F847C53B271A387B66D61A7DD52EDB73603C843980B6CFE321401385039
+ 07E8ADC2AB5458D5F8A08F17879A8118CE61B831F55506B9B498D150A2839421
+ 00EE49C66AFF00F11491A1AF653DFD5578FB2A8FDFA72E5C4530E3284A425009
+ C8F85797EA726B2A5F6FF59EC7A1F38DA7F3FE23496F50AE3BC84B696FBFE28C
+ 1AD3788FACA55C18303C5213B8A9601EC3BD66AED67762179F6CA94002AE9E55
+ 18C97C4A97BD6A25D51DA5241EC4E3F5D65D142E7B8EEE67CD1BAF082D0CCDD5
+ 487CAD4831D9F13281D76E3A9ADBB8D97A61EBAC1619756A6D0D6E08EC14318C
+ 9AC6704A422D37B9C879A0ADE9F0867E158CE2ABC976FD25686D450DA7C30AC1
+ C0EB56CF52CFC0AC78D7734B952965A6CE7F07BBAA6B6AD117443321F56DC851
+ 4A7183D8900D69689252868ED2AEBDB15B169E7DAF5D254141AFC6083839F2FC
+ F8AD538258CDB1EC59BE12DC5BBA3B2E329636C5E890839C03D056F1334F9996
+ F9B0C3AB0EBE92105CEA9FCD508E81873AD739BB95B66B4C3EE6416CA0942860
+ E428799C671F3E2A4699C50865BF010DBD1AE2DA76A5851CA94A3D329C7D35E5
+ B3636F25AEC67C89B9AA350976F89A0F5E438D2E629D891D80E3C86158255FF8
+ 77FAAA6E8DAC6CF7A6FD6203C5C3E1A7A295920640AAD9AB6DD2A2DE9B7A5BA0
+ C998129587BA9482467AF6ED598D28E2F4BCF90B8F95425128539B4E074E9D7E
+ 9C52B24177343C4A51B65925D9A3C94B6F78CDAD4A1D947A0AC56A3B00930DB8
+ ED3AA703609C21584AAB45D3FF0029CB5154590A74AB0A1B81DA067E7A926DF6
+ A2194C85A96EBED8F6920E13D7A79F7EF5CF9368E6497872E089EFBA52F4D371
+ 489676A5794A4F66FF00FDED512F10F51DE27DD16C3CE789158F60A3F157F1FC
+ DD6ACAF126E6AB7E9E79F61D687868EA85903AF61DEAB55A34FDC3883A83D59C
+ 7C223303C678B293920F4EFF005D74F49CC6CD78E52C91B245E0BEA3876DB74C
+ 80E7868525A0EB0D8503B727AFDBF0AD9F517146DD6CB4253B10673990907B8F
+ A4797D75156A6D00BD0B716E6D9964B6FA3C35B6B3ED363E3F4D78D16599227D
+ BE3BD8971E42FDEC12FF00C7DA3E63E8AD3979E467876ED9B1DCB532E021A71C
+ F1DF75F4788851FE56927E20D7F568E21DBECF15722E4F2D4EEEC165381D6B2C
+ FDB576D7150A486DF75253E0B4B4E709C839FABBFD550E6A4D1D77BAEA7BD214
+ 96D3EAE03CB08411B904E011F59149C58B1E54DE47436B8A2CDE8ABB2350DADE
+ BBC771B5E07B083DD23FFF002B231A5BD25E03D5B2544E17E5DAA02E1A710646
+ 8AB7A218693323A95B5C03A11F6D4C07513B74F01D8CBF05858C8420E0938F8D
+ 62CB81C65C7633CA0D3E0CA5E47AB4553AE101EF36D2327BFCD5AE35AA524A90
+ 5290A4F62A159B8E82E36B4AD41D4FE31CFB63E18AC24C8ECC4F18A90D023CDC
+ 193F6D2A0A99314D2E4F3C5B8B5789EE9791D53D96074AC6EA95B486DE01012A
+ 4B6A3803BF4358E8D2DA89752DA1C56C7D5D0A4109E9D7F556735134D9B64A59
+ C1CB0AC2BEAAEAE17FF2242B3FA192FF002909F1347B6B07185A958F9B06AC0D
+ 57DE51891A45B03DDEB560ABE8F15508FF0007CE327D491FCB8DA5D6D485A429
+ 0A182923208AE24F3F3C92DCB97BD633B5469A86ECAE1DDC9F2EB6A6D19F92DC
+ 5ABF942F1D9BC9C2147E64925401576E2B17A974CDB357D925DA6F1099B85BA5
+ B6A65E8F21B0B438850C292A4904104120823041A7425B5889C7723F33759AD1
+ BACEF9C3DD4F6ED45A6EE722CF7BB7BA1E8D362AF6ADB56307E9041208390412
+ 08209157DF9BDF460DC74C3F3B5470ADB336DC478AEE9D272E37D7DA31D64FB4
+ 3183E1ABAF43B4AB2948E7A4C86FDBE5BD16532E4692CACB6EB2EA4A56850382
+ 9503D41046306B626A4B831B4D773BBDC8EF37B0B9A9E1CADC9C86A06B5B3EC6
+ 6EF09BE887090763ED0C93B1783D0F54A92A1D4614A83BD32BFCE57447F7FCFF
+ 000772A84F22DC5999C20E66B475C1871C10EE9253669AD231875A90A4A13BB3
+ E4973C273A7FBDD5F1F4C5C84CAE06E83791EEB97DDC3EB8EE5276ED9AA1FBB7
+ 419CE0E58094F30DC3D20E0FCB51BF762BF43763FF0072227F6B15F9DCE5C6E0
+ C5AB8F1A0E64A70351D9BBC75AD4AF20162BA1BCDE73DDC66E09BF668563D14D
+ E92B2CAC98576BC78525D9C94A46EFC1A16435EF24E15857C40EA2A7245C9D22
+ B8E4A2B93A494AA53C897A4097CCA5D24E8FD596E62D7AB634612599114E199A
+ 804256769F7140A93ECE4E41E9D8D59CE35718F4F701B87574D65A99E5B76D82
+ 90036D0CB8F38A3843681F151E959DC5A7468524D59BD52AAC72DBCCFDD39B5D
+ 2B7DBE5AE4A7454589735408B1186D12E5A9094B6E171DDE0A46E4ACA4003A14
+ 9393DAA07E237A46F5CF2CDC6EBC684D736881AC6DB0DD42D17185FE9593EAEE
+ 00B465006DDE12A008E9D7AD4A836E88DEBB9D1FA5687C15E35696E3E68283AB
+ 349CEF5BB7C8CA56D2C6D763B83DE6DC4F9281FA8F7190735E8E2F717B4CF03B
+ 42CFD5BAB277A8DA6200094A7738E2CF44A109FC6513D8556B92D6AACDD295CF
+ 8E0FFA46AFBCCBF1A62E8CD3F6D8DA1EC8A65E90AB849C4B96EA5006109491B1
+ 2A39CE4E4601AFBF335CFA6B3E5278AD6CD2B32145D716D9D6862E6254B6C439
+ 08DCEBADAD20363691F822474E9BB0738C9BEC95D15DF1AB2EEDF388FA574CDF
+ EDB63BB6A3B5DB6F372514C2812A5B6DBD208EE108272AFAAB63AE50F11B8131
+ B9E69BA5F8BBA0351163C42989A8D13B719515F428A89404F4F6429294A7A0DA
+ 1273D6A76E6579BCE22728BA43482CDB2CBA921DC774360CFF001D32C065B465
+ 6EAF7616A56EEA40152E1ECBB95DFF0025E8A5734B823E955D4DC58E2EE93D31
+ 72D2B69B1DAE6BEA4CD92C3CE3AE14A5A5AB080AF32A48C0EA4E70324D65F9DA
+ F4836B7E086B4B469DD2A9B645B929A4CE9B124470F96195FF002B69C56EC788
+ A00A88481B4148CAB39A8F0E5744F891EE745A955C3928E6FA1735BA0E7CD910
+ 9BB3EA4B3BA966E3090E6E4614096DD467AED56D58C1F342AA30E2F7A486D70B
+ 8CF69E1670F2345BA5D265CDAB54BD4131798911C5B81076253D5D2924E7A819
+ E99EF51B1F62772AB2EF52A9AF321CD76AAE51D9D2B79B9BED6BDB05E652E33E
+ CBECB70A535B4056E68A06D50C743B877C7519C558BE07F1C34B7305A0A26ACD
+ 2730C880F12DBACBA025E8EE8F79B7139E847E7041A8DAD724A926E8DFE954A7
+ 9D6E74B5FF0028F7FB0B08B269CBFC0BE994E45043EDBACB6D29B002CEE214A2
+ 1C1D4003A1E9D6B40E58BD26FA9F8F5C70D2DA2EEBA5ED564B7CEF595499315D
+ 5AD6AD91DC5A1290AEDED253E756D8DAB237ABA3A2B4AA2FCE7F3E3AE7953E20
+ DB6C71B4FE9FBF41BA42F5F8CEB85F6DC6D1BCA36AF0AC28FB24E463BD627947
+ F48FEA1E6378CF0F49DDF4D5B6C36F36F7A438EC4756E2DC753B3681BBB0EA7A
+ 7D1D68D8EAC37C6E8BFD4AAEBCE5F1F35972D5C3D7B5BD96158EED6969D6232A
+ 14E43C1F2E38A20A82D2A09DA063A633DFAD52CB47A627595DA742812345D8AD
+ E24496DB727092EED65B2A4852B6ABA741B8E49C7D950A0DF281CD274CEAED2A
+ 8473A1CF27143845658371D19A23E4AD3139D4311B545E0B6E7AC38415ED4470
+ B2A482942B05C093D0E076AF07243E929B871A75C41D01C41B7C58B7B9CDAFD4
+ 6EF086C6DF7120ACB6B47641290A208382538C648A9F0DD591BE3745F7D41648
+ BA9AC372B44E6FC585708CE457DB3F8CDAD252A1F5826B8B9C4BF46571334BF1
+ 21FB5DA556FB869A79F598F785BE1B0D359E81C6FDEDD8FE942874EE2BAEBC6C
+ D4FA934470FAF1A934E7C94B5DA21489F219BA36E2C3A86DA52F6A0A14304EDC
+ 64E475AE66C8F4C46AD9ADB9EB5C39B03AF630D2C49786CFA41CE7CBE157C7BB
+ D8AE4DBEE5FBE50F85C383FC2CB6E988CA52E1C26B697549DBE2BAA254B5E3CB
+ 2A2A3F5D4E951A72DFC47778AFC15D23A9E536D3370B95B999329A613B509716
+ 904848F866A4BA4CBBF2323DB835DE22AFC3D0D7B563388AB3F9AA80DEE705CA
+ 5A8925B213D079F4AE80EBE478BA32F08C12151963A7D154B752E8D8B19F5361
+ C0038842B27A63A66BC8F58938E58B5F1FEB3D7F449349AFBFE08E2ED3242ED3
+ 251193ED29381D326A3087A5E4DDEE896DB1BA420A77E081B0E7CEA62BF31F21
+ 4079C6543784FB0A3DB3DAB0FA22CE5AB34D94A49F5B93953AEE33BB1D463ECA
+ CFA6CEF1C3F93D24E09CB93FDD1F6136F74CF43E85252F96D655D82803D2B50D
+ 59735CABCDC587093B95918E8922B69D0115C9B639A1D75494AE528A09CE49FA
+ 2B63BD70B53758119D6886E5B60E14A1D17918EBF6D2DE48F896D8463B484CC6
+ 298C858649483DC75AF569A608BA171D412D107A1F33838FCF59476D12EDD395
+ 6C782912413D4E02079D65EC3A525A2E6CFAC496A3A09C92E754E0FD15B326A1
+ 3850D8F637DD3A1C6E3BD295E2376F623F89BD23A6E1D719AD4ECBABA4BBAADA
+ BD38D87D80EEC4A8A4E00C1F3FA335B4710B595BED9A7DCB0468921A5A9AD9EB
+ 23A32BCF7CFD59FAEB4FBB5E2D32F4841B45B1A75831D616642540070EDC1F9E
+ B99096E4EC3FF2245E2AC46EE973B74C65E4BBE234970349EF8FA2B76D3F68B7
+ B1A61F4AD45D0E33BB628E46F1D718EFE555EA0DCE52A304C97D4E0424368524
+ E56067A60F6AB53C2ED35063E8E86B790E3AEBA3F08B70E4A0115932C631E0D1
+ 964A30B3E1A43504455A602D2B4B6ADBED369EC4038FD3523BF2DB910DC5A4F8
+ 4360EDD327CBF3D46FA6B45C7B729D4BD1D69DAB5EC513D36EEC8ADA5C92FF00
+ 889C84B71074C2FB2AB8F349BA89CBC9152E51AA714624ABBF0FE63694308900
+ A4656924F45827A8F9AAB3D9265CED12A5A84B7A1B8EE194ADB5042719F9EACC
+ 7102ED161C7B7B725C508AE384BDE1A804E3076F7F9F151D3B7C665DDD82C5B6
+ 09B521D0DA9529A39512703AE3E38AE8E9B74214C7E9B7422D334D8EE25F118A
+ E5CEB9BAE15655BF294E3DEADF20C8F90E334A6D41B6D61252F38921480481D3
+ EDAF91B2C5B45FE0DB5B7E332E3CB5A9C0D9010D82723AFCF5BF5FED90576F2C
+ 486D0B4A53B52AC6524791E9F3E299926FB0D9E457C9A6DD3C0BACB75975E2F1
+ 28DA24B44EF04F4E847D358C92FB9A4E4AEE2DCD85F846043711209538A48EB9
+ AC843D29F73B19D96C3EA7DC07294672939E9F9B39AD3F5469A9BAB1F5C453CC
+ 32C21217BF610ADD9EA2931A7C36554AFB183D4776B64C4B66CD11697CEE2F96
+ FDD2707AE2B7FE14AA46A0D2ED34F1523C370A50E118DC7CC7D95AB5A786CEC6
+ 43715BB8A487B207843DB3819207D952469980DE912CB0B904C46C6F4327DFDF
+ E75B32644D28240E6D2B332AB5C9B3DC19DC545B7BA0CF9D7F372652EF8C5C4E
+ E493B704742475AFE75BF112D56B87EB8F2C0776FB2D7880907E8A86EEBCC230
+ 90B4222AD4950CA5455D0AB3D6918F459323B8995E777C9BA5F6E519EDAC3458
+ 69C64FB49030AFAABCF2EE8F2A03ACBA308534A0147B7BA71505EABE3239704E
+ F662B319D27AAF2370EBF1AD6E47166F975532C2DFDAC15252427AE7A8F315DA
+ C1D372EF527D8C1AAD56C833A31CA4B6A6B49212B183D47C6AC0541FCAB4411B
+ 44C6DC72B280AFB454E15ED1764BE0F0B2929C9B4415CE1F33FF007A7F0D6D7A
+ B7EE6FEEA3D76EED5ABD53D7BD5366F65E73C4DFE1B99C7838C63F1B39E9D66D
+ 81399B9446A4C7712E34E24282927E233546BD317FB19F4D7F85B1BF81CCA95F
+ D1F1C558BC53E5AF4C3C891E34FB64745AE6A56E6F703CCA420959EF9527639D
+ 4F670536BCB62F779A8B26EB287DB287101683D0850CD523E7AB900B4F19ECB7
+ 2D65A3A12626BD8D1F7EC6484A6E6103A36E03D37E3D94AFA1F7428ED036DDFA
+ 1191D7B556326B944CA2A4B93F3256AB849B35DA24D8ABF0A5C5790F34BDA15B
+ 5695029383D0F503A1AEA3FA5625197CB6F0ED655B88BE919FF8BB955024E8B5
+ 6AFF00482DF2C76F61B53035F4E74B4956C488ECCC71D70248EDF836D58C7CD5
+ 703D2B51150F96FE1EA0F637E2AFFABB9F0AD6DF28CAB84CE7E72C0A09E61387
+ E0A10E055DD84ED706475563B7D7577BD2F36E442D1BC205F7756E5C772B3FD6
+ C7E95483961FD90BC3DFEFD46FDD8ABD9E98AFE63B83BFDB2E3FB98F5597AD12
+ 979594F79169F22DFCD46845C7756D15C8790B09510149F01C383F11900E3E6A
+ EA97A41797CD43CC5F02E044D3323FD57B5C84CE44353A50DCA4ECC292AEF923
+ 394E7CEB94BC927ECA4D05FDD4EFEF0E5750F9EBE75DEE57B4A592CFA722C5B8
+ EAFBCC62B6552C6F6A2B4001E229208C924F40703A79818A89DEE544C1ADAEC8
+ 6BD1A1C0BD79C12D4378BA6A76D56B62EC84C64D9144297B90A3F85731900819
+ 09C1390B5671D2AAF7A50483CE56AEC75FF4AC0FE0AD5495C8DF12F577319C78
+ BA3DC41D4F77D431A2C33353674CA54684F3BBD081B996B62368CE76E304F706
+ A1DF48A69D81A5B9ADD516FB6DB21D9E2A23C258890194B2D24AA33649094800
+ 124927A75249A95EBE486FC8592F43A6B59AC5D35B69A2E1F93CA9898119E9E2
+ 2C2904E3E86D3FFE8ACA7A66EFD7841E1ED992D2858961F94A787654818484FF
+ 008A735A47A1FBF9E46B3FEE789FBB72AF673C1CBA5AB98BE0F3B6D9535BB5DD
+ EDCEFACDB26B99294BD8C6C20770AEDE6479551BA98C49BC672B3D1C9FB282CD
+ FDC723F722A4BF4C18C7321A540E83EE422FF0B9758CE50F82FAC7803CC1DAEF
+ BAF74F4DB1D9DB69F8E272901C682D4001B8A09294919EA7E6ADF3D20FC32D53
+ CCDF1F2C379E1FD965DE6C51AC112DCEDDD6D9663078C87D67DA5804801D4E48
+ 070723C8D5ED6F17CECA305E88CD5972B5F16755D98341DB1CDB736FC852FAA5
+ 0F21D096C0F9D4971CFF00147C2A5EF4CFA128D1FC304A404A44D9B800607B8D
+ 5487C8BF296381701C5CA784EBDDC54872E129B528340201D8DA01F24EE575C6
+ 4EE39F2023DF4D17F323C30FEEE9BFBDB555BBC85E9AC6ECA1BC9FC2893F993D
+ 08CCD8E994C7AE95786B008DE96D6A41C1F82824FD557AB9E4F47F5FB8ABABA2
+ F10B464B8EA9F718EC3172832D4500ADB4840792AEB8F6128494E3F173E66A8D
+ F267FB27340E7A0F5D57EF4BAFD015B1A43F688C97109524B63A11D3B54E4938
+ B54571C54AD3397A787D71E44F94CD6D718171F13575ECB715D9ED82D16D4E1F
+ 0D286883DDB4A9C5839EA49F2E9546397B3FECF3C3B27A9FBA1807FEB08AEADF
+ A59F45AAEDCABB33E26C659B25F22CD75013EFA54971803ED781FAAB947CBE1C
+ 71DF877FE1040FE108AB45DC5B2B35B5D23A0DE978404709B853F1F5E959FF00
+ 268A847D15BC639DA138E3234B2E462CD7F8E7C4656B2078C8EA8291DB241232
+ 7CAA70F4BD67F913F0AB3DFD7A5FEF68AA6DC8A69C95A83998D2AE465148B72D
+ 739DC0FC448DBFA562AB1E71F25A5EBB2D97A6988373E1291D4166E7D7EB8D55
+ 5BD1FDFB2BB45F5C7FB6BAFF00C55DAB41E99470B8BE0F150C2BD5AE5919CF9C
+ 5AABFE8FF19E6BB467FC6FF82BB52BE9912F593C7A61C7FB2BF0F8F9FDCEFF00
+ DFAEA2AF46912399C8641C116D918FB5152AFA61FF009EBF0F7FC1EFFBF5D453
+ E8D419E66A263FA9923F4A2A17D3225EA3A19E955EBCA0DD3FBE70BF7CAE32E8
+ 477C1D6FA7DC284B811708EAD8B190AC389E847C2BB35E955FD88375FEF9C2FD
+ F2B8C5A2FF009B0B1FF7731FBE26AD8FD24CFBA3A93E945B734C728DA49F032B
+ 56A88C91E4123D5257415CDBE5FE63D6FE3A70F5F8EEAD97537F823736A29382
+ FA01191E44120FCC6BA5DE94DFD879A3BFC298DFC125D732F819FCFAF407F7FE
+ 07F08454C3B04FD48EF9F17E4AE5F2E1AE9D70E56AD3370CFF00CD9CAFCEA9EE
+ 6BF44BC55FD8D3AE3FC19B87F0672BF3B47B9AA62F72F97D8EF7F2143FF264D0
+ E7FF007547FDC5588AAF1C857EC63D0DFDEA8FFB8AB0F59E5EA6361E946035E9
+ DBA36EE725204751C838AA8BAB59726F86E2101C616DA13BFCFDDAB6DC474173
+ 42DF120804C55E0ABB76AA8F012A9288D15D52C7BA0EDEC3D935E33ADF134FED
+ FEB3D5F47928C5BFBFE08C38845943B6EB4994843606F7727AE31D3F3E2BEBA3
+ D12373D1B79F56436A20246770DA7CEB70D6DA46DEC843CEB0D3EF9514EE503B
+ 80F2AC5E988688D9F0C143D9C16D241183D2B84B23A47AF693E4C470CED8D6E7
+ 9125A7A3AD0F29C6D4E7BA52723352DC88A12DC65216971AE870923AE3AD60AD
+ B39CB6C971B94C36E282B0DA0A7BA6B291EF81E75D8EA31DB69209C0490479F4
+ AA4F74BCC51AA311A9B4369AB94A72F8F4794B7C27DA682BD8E95E16AD369B8C
+ F6018E3C30D24A49EC067CEB6393257704B512227C46D632E380744A6BDF1B4D
+ C18A5C5C605C46C0929C609EBE59A5AC93F704E8D6B5DE8CB76A48B1E2224350
+ C3683B4ABDD5F4F3A898E94BAE9C054D448F3586C93EE7422A739B6684A7D323
+ 290F23DD6DCC9049E9D857926C9B75C202E3CA8F21975B3B3647E815D6B4473B
+ 8AA2CB976451A4ED364D61203CD30EC3951D60ADB49C209CFC3CEACC599FF538
+ 8DB681B17B000DFC00AD1F4F6826ECC80B891501B7C83D46E77BE7A62A428B0C
+ B3BBC4C216947627AF6ACD9B26F62F3C9CD6D67C85F95295B8A125B49DA40E84
+ F95691C59E249D330D10E2B8CBF31406124FB9D4673F566BE9AEF5D46D0D6E32
+ 5A8C1F7D4086C1EC547A7EBCD57C72E53F55BE5E7A1176E7217EDAB19C27BF6A
+ AE9F4EE72DC8AE382AB3E3A83575DB5038F225AD4B6B1B928CFB1D3AFEAADAE7
+ 3F0ACBA76D4FB2B7A427C2F1DE69E57407CB1F5E2B5E5C1B75AAE8D437E5A64B
+ EE25414B6D40A1A3B4E01C7CFD2BD7628726F32A2C59090DC44A94D9757D51B5
+ 20AB1F9ABB3971C60BEE6BDADAB4481C3ED191F88F61917BBC05C48EAC6C5215
+ B547072307CBB79D48D6E9564D3F6965969A97794B87624A0EF29C7C456034FE
+ ABB63D1E3DAE3B6531228214C471BBC6383E43EDACCC2BB3E10E2AD76F7ED2C8
+ E8A4BAD8EBF3E7CAB90DCE52A68C192AFCCCFEE64D43C95C78F09E68AF070B09
+ F671D7B039F2AD4752EB4B059CA5B75C6D324821CC10950E9F3D681C65E2C8D2
+ 5714B16875E7EE2B07C5710E0211F1F3AAE770BDCED4D7171E794644870F449C
+ 939FA2BADA7E9B2D42F16E90A79563548B2372E37592D105286007DC49EAA460
+ 2D3F41A8F3557196EBA85C2C5B12194AC603BFD113F41ED5A35B7435C1DC3920
+ 351D048CEF07A0A9460F0EAD96C80CBEC3A6549233EC7BA3E35BDE1C1A77576C
+ BE29CB2AE51174B4DD24202A63EE4A59392544E457898B04EB9C92D31BF67E28
+ 524E0D49B798C994E25086835B3B93D2BD8C4B90A4350E3434EE5F40E8181F6D
+ 5DEA6B949169E9A37CB2354F09AF13565186DB3DCA9C4F415B3D9B84F02D610F
+ 4B53AA92D9DC0A7F95FD62A6FB0E9B459EDAD3D35689925DEBB413ECFDBD2BC9
+ AAE3B6A657E06C4A76125208CF6A547A86594D2464CFA786C69969796B5A4693
+ 88949CE53D3E8C54CF50372A2F29FD26D15FE2A309A9E6BD7C1DC533C0CD2536
+ 9144BD317FB19F4D7F85B1BF81CCAA8BCA8EB6E2B72568B5F1026E97977AE15E
+ A561A7AEB1A210B5B2D12A0DC803FA1AC270A055F835A5C4A4A82882DF60B881
+ C3AD39C4FB01B46A6B1DB2FD092E07DA62EB0DB94DB6E80521C4A56080A014A1
+ 91D70A23CEBCF69E1CDBA15B9C8D250994A73DE591D6B5466946999E506DD91F
+ E8CE75381FAE2C6C5D21F13B4E406DD1D63DE27B7024367B14A9B78A54307CF0
+ 41EE09183516F329E913D07C3DD3D22CBC38BB45E21F10EE294C6B5C2B19F5C8
+ EDBAE129438B7500A1783D9A412B5129184856E1B17107900E146B998A912747
+ 5A94B5385D52E32150D6B51CE4AD4C290559273D49C9EB59DE1AF297A538641A
+ 3A7B4DD96C0F21A31FD722454996A6CE32953EADCE281C0CE54724026A3C9DC9
+ 7BCAC9C8BF28D76D117093ABF581764EBABD0529EF15D2EAA234B505AC2D59F6
+ 9D5A802A51CE30003EFEEF67A62971A3706342DBDB79BF1DBBD6FF0004286FD9
+ E03A376DEF8C83D6AFE58B4FC5D3F17C18C8EA7DE591D546B11AD7867A6F5E20
+ AEEF63B5DC25F861A4C99B09B79C4A0124242949240C92703E27E346FF0036E6
+ 1B3CB47E7F796879B8BC7FD00EBCB4B4D22F31CA96B3B5291BC7524D5E8F4C1C
+ F8B2B4A7081966434F3A854F5A9B42C15241447C1207607CAAEDA7954D109567
+ E41B3E739EB6E64E3F6B5B4DF782BA5F51406D99F61B3CB7D2D86BD65F80D2DC
+ D89184A7714E700761D855DCD3699450693470D392E90D42E677423D21D44765
+ 325DDCE3AA094A7F00E7726AD77A5978277A9D7DD2DC51B5479172B03B6B6E04
+ C798095B514A49536AE8738585ABDAC63A0EBD6AFAA3957D128712B160B36E07
+ 23FD4E6BE39FE96A4C3A4A0C9D309B14A8CC396F434184301B01B4200C252138
+ C0007402A1E4F35A058F8A671AFD175A9ACBA738F539BBB4E6A13D32DC598DEB
+ 0A0942C8712B5024F4076A49FB6B1FE942B6CBFBEC7505DFD55EF92E7468822C
+ DD87C17F6474217B17D95B54920E0F422BA663923E1D41D546FF000B4A59D371
+ F13C5F194C0EFDBA27DDFCD5256B4E0B58B88BA5DBB26A2810EE509A4EC6E3BA
+ C24B681F374E9F554EF5BB711E1BAA396FE89FD5B66D31C47D50DDCEE4C44953
+ 1B88DC48AB24BD29616E652DA002564129181D7DA181560B9D6E76EF9CBBF32F
+ A5A3274E2EEF6481675C85C07E4F80879F7CE038140286F6C2149EC461C57CC6
+ ACCF0D395BD33C2A92AFB9AB641B2B255B94A88DE16AFAFBFE7F2AAFBE93AE17
+ 70F755E9AD30BBCDE26C4D7EA5391EC70AD90D53665C49C1536184904A73B7DA
+ C80091DC9C12D4A564D350A21877D2EB6992A52DFE0D975E51CA9DFBA300E73F
+ DCB5EA67D2F7699CFC666E7C259061255EDA9BD4016A4A7E212632771F98A87D
+ 3D2ABD593D1C7C5CBB5B5326422CD699273BA04C98A53C8C123AF8485A3CB3EF
+ 798F3E95EF6FD19FC57712B3EBDA751B4765497F2AFA3F014CA80BB99D40E56B
+ 9C9E18F324D49B769372459EFB15BF15EB25D1B4B720B7D8B88DAA525C483807
+ 69C8C8C84E466ABFA66AE5125E9BE1BC662532F496274DF1596DC0A5B7F836BD
+ E03A8FAEAA6702741EBBE5D39C4E1FDBEE56C544BC09E82929505B6F467029B7
+ 1C428770105CF9C104100F4AED0DFB84FA4F5E45F5D99A6ECCFCB969DEF4A7ED
+ ECADD59C6325452493F49F2A534A124C626E71699C2AE4F64350F994D08F3EE2
+ 1865135454E38A0948FC12FB935FA06B13EDC9B24075A712EB4B610A4AD07214
+ 368C10477A899BE55F44216951D3F66560E71F2735D7F6B52CD8ED4DD8ED5160
+ 3096DA8F19B4B4D34D20210842461290074000E981F0AACE4A45A10DA61789FC
+ 3DB5F15B87F7ED257A643D6EBB44722B830329DC301493E4A07041F222B876CF
+ 2FFAA7976E6BB4558B53C65B1199D490FD5AEA50511E534242085A547A038EE9
+ 27A7D1D4F7B2B53D7DC33B17116DEA8B78811E6248C61E6C2863EBFD22A213A2
+ 650DDC9CFDF4B7B427F0CF851122A9322699D20222B432EAC29B48CA52339191
+ 8FA48AF9FA3AF959BAE81439A9B50C27225FAE8021A88F2005468E0E7DACF50A
+ 51C1C74E83AD5DAB6F002C368095C6B64633520A44E90A5BEF246EC909538545
+ 033D7A56FDA6F4AC4D36C6D65214E9F79C3DEADBFCB446CF35B2877A5F784172
+ D4BC32D1FACAD8C3F2DAD3521D8B2DB693BBC361F08FC2ABA760B6909FFE3EDD
+ 3239EDCA26BFB2F0C3980D31A8F50BEE46B54453C975C6D853CA056CAD09F612
+ 093D543B03F457E82EE76D8F7780FC296D21F8CFA0A1C6D690A4A81F883DEA01
+ 85C96E81D3FAB1DD4166D376A8771714A529F4B03764904E01E83A807A54C722
+ 4A995941B95A39F7E956BBC8D67ABF87FA99986E46B149B41620392D0E3325F0
+ 17B94B5B2B4852139574DD851EB903A546DE8E09D1EDBCCA447A53ED456BE4D9
+ 09DEF2C2139CA3A64D765AFBC18D3DAA6D6D46BD5BE1DDDE6861B7674643BE18
+ F827703815ABC7E56744C7790E0D3F66514A82B06DCD63F7346F5B688F0DDD90
+ D7A556E90FEF50B94232D8F5D5DC612D31FC41E214F89DC2739C7CF5C6BD1A76
+ 6AEB2295ECA44E60927B0FC20AFD196A2E1969FD56D21577B15A2E7343619F59
+ 9905A75610338485292481D4F4F9CD6887956D13924582CC3273D2DACFF9B446
+ 6A2A8B4A0DBB2A97A51EE70E4F289A2D86A532EBCBD4B19E4B687015291EA92C
+ 6E03CC67A67B5734B822E258E33E8371C506DB45FA0A94B51C0481211924D7E8
+ 11FE0B69699618F6C9560B44B4C668311D6FC0697E0B79276A729F64649381D3
+ A9AD4C72A7A201CFC8367F8FFB9CD7F9B531C8A2A825072767AB8B17CB6A3963
+ D60EAA7C54B5234DDC10CACBC9DAEABD5DCE8939EA7E615F9E820E4F435FA486
+ 3861601A621D924D92D3320C2C98B19F84DAD960924929494E06727B0AD2E5F2
+ BBA265CA53C74F595009CED45B9903E8C6CA884D4499C1CA8D4F902B84695CB5
+ 68D61990D3AF316B8C1D6D0B0A52328E9B80EDD8F7F8558FAD2B87BC2DB470D4
+ 48459604180DC9C78DEA9190D1736E76EE290338C9EFF1ADD6932E5D978AA546
+ 075DB064E8FBB343DE5B0A48FA4D40568D3AC8F0FD8CA80415123B6075AB0BAA
+ 97E1E9F9AAC818479FD22A1B430E04890CA82C6CF7479D78DEB5CE44BEDFEB3D
+ 0F4EE22DFDFF000469C42D2D21F056DE47B794E3AF4A8EA05B5DB65D545D52D0
+ B3EEA87C71560E5296FB690EB7B5C190323351C6ACD312E09764A8EF49F68015
+ E69499EB70E5B7B59ABDCED4BD42036CC85B17103D951248E9D7CAB4AF90F5CC
+ 6B8069B5C4CEEDA54A049DA7A7E8ADC61DC4C675A7C2B6AC1C28F6C7956CAC4C
+ 7234DCA02DF5A91E275ED8EFDE98B234A8DD91453460AC56C9DEA0B79B92E264
+ 36EF86E241DA838F98F7A932D8526D8DA9CDA878FB215904FCFD2A20D493EF2F
+ CF44DB7A434DB6A2E142BDD52B18EA2A46B1EA06751DB1B717222A5D4B290EA5
+ A385B6BC8F2A5B7625D7B1F57ECCD37710EB6A53EA47B6AE8401F6D78AF210AB
+ 489259282B7463C3EAA3D6B2CF5CA1426D2B6A5A1D73042D25D4E7B7C3351DEA
+ 2E22B16B095A55E3785B8A5B477CE0FE8EFF0055536EE95168F62414EB26B4DB
+ 31BC429502318CE1C1918158F9F3DDBA9F15996A0E39DD1BC6F03E6A86237106
+ 35D58F94A5B894BC85FB6B50EE3B002BC175E34B6B9454CB0F96D92925C6801D
+ 323CEB47E8F237C149C6D998E3BDC936F62D0CA4BA5D2A20AD7D810335127DDE
+ 5CA338EFAB492DB8A1B14FB430540F4207D5595E24F18236BC8AC45540290DAF
+ 295EF1BC8A8E9FBB4661B221C57BC6F252BA81F1AF45A2D34B1C36BF914F22C6
+ A8D96E9291608495C8012978152024E54B57CF8AFB49E374D8F65896D80D23C2
+ 6D395AD43A951AD420D96E3A84B9225BCA4B0D8F63776AFE2D5A3644894B0B51
+ 2D249CABCBEDAEBF83812B9F73064CD9E52A8AE0DCF4B73037FD26F9718896D9
+ 009C9F19A2A359EBE736BAB6ED0D71D98B6B8285A76A9E69ADAA4FD1D7EAAD25
+ 9E1FADD24B3B8A867A94E4564F4C707255E9D5F8CE214D8392903E1D7F552251
+ D2A8B97B95587513971D8C1698B3CDD613DD9329C5F84A512E388EAA593DB1F5
+ E2A65D2BC3762D308489296D2C647B5B70FF007F23FA7E6CD7A2CDA45D622B71
+ 6325A6100819C104E3E7AD96269E98971E66E03C4013F82752B3815C2CDAA6E5
+ 51748EB62D36C5E7EE79A559A3788B545417929006D7BDA1D7A7956305BDD4C7
+ 7A4B6EE108596FF03D81F318EF5F55DBAED6A7169873025D5E410B1B8015F1B5
+ 3F2E2C59169212B716ADE5D48F694A3F0AC4E519BDD26687517C231A887016DA
+ D5214E3AEA88C249C67AF5ACD69C7DA8B316AF60464FB892324D6B33346498ED
+ B9233216FA578DBDF049C76FAEB69D37A4A47AB054A0E3408CE542A6538BE2CA
+ CDEF76CCE4C9C9237A5FC23EBE95AC5CDE6990F292B538B52158575C0E86B3FF
+ 0020998957B64251F0F3AC0DE6DE5B42D08F68849EFD28C35BD519B341786D96
+ BB946255A35B2AEE062A7FA807946FE6347F646A7EAFA1C3D11FE0F9964FA921
+ 4A52AE505294A005294A005294A005294A005294A005519E6F783FA96C7CCFF0
+ F78D56D66E379B05B11EA772890925E7618295A3C56DA1D549C39956D04FB39C
+ 1ABCD5F1971199CC2997DB4B8DABB850ABC5B44356A8D4B8773F4AEAAD350EEB
+ 629D06F111E4058951DD4BA32476241E87E20F6ACC5EAF160D3EDA55707A2462
+ BC86DA5005C74FF4A840F6967E64826B5CD41C16D2BA9B6A6EDA76C97C6D2772
+ 5176B7352424FCDBD2AC56534EE81B76958498567B6DB2C91123019B6C36D940
+ 1F3250902A6C1264097CE09A3887C7E81C529F00DB3E4F81F24D8EDEB6CA5F52
+ 54A517253E93EE1216A4A53DF69CAB04E059E83184386CB00E76240CD7CE2DB1
+ A8CB2E7575D3DDC59C9AF5D0DD90950A5294B2C294A500294A500294A500294A
+ 500294A500294A500294A500294A50061759A928D2F7152FDC4B5B8FD00D4536
+ D094C36C01B55D539CE7A8C13FA6A4AE26BC63F0FF00503A06E2986E1007D150
+ 0E93D64CC88C9641C8751BC2CE7A13B7F88D792EB4AA4A5F6FF59E87A745BC6D
+ AF9FC1B8CC82F83BB72719F88AC75DED8BB8475B2B50248DB8FA6BE0DCF74C9F
+ 0DB73C504E48CF6AD8ED90038FF8EB57D44F7AF25B99D872943CC45323844A72
+ 5B496DE050D2F77B43A107BFD82B6563872988B5A83EA505109C818484FD1527
+ 46B7894F2CB48E87F1ABD4EDA17E0293DD5E4314394AAD165AC72F59114FE1F3
+ 125E7192AF61092404E01271D3F3D47772E14DD6E0E25F8321105C4AF0E390B2
+ 85AC76EF8AB17234C17D1B8AB63A7B8CD63B502E3E9EB5AB0A2DB8D23C4596B0
+ 57B7CF148597237543F1EA377088465F0625C1611211707D6A09CAC3CF95E7A7
+ C315A35E786CE5BA24C9CFC86DD696DA89C1F7303F356EFA8B983B4B897530E3
+ 4D71D40C05A969083E5D7AF4A87B5C6B7BCDF6DAB67C12D32B077223FBB8FEB8
+ D74F041B96E3A11DFF001C119DB2C73EEF1A4356FDCF0F13A0292411B87956FB
+ 6BD0931FB64982FC35A54E246E52505206083E7F4564780D3A340BE2AD325487
+ 172523C270F749EF8FD5539B16B7A15D253CF603493B02493D4D6FCFA89E392A
+ 468DB17DCAD13B84EAB7C7019610EAB3951DBED8FA2BCCDE9B8AC29A48692144
+ E09574C7C7BD4F7A99952D7907C34AD5B029033D7E15EB621166D4A8CEDB6049
+ 46DDCE296DFE100EFD0D57F5F92A986CC776411728DE1C736C80D21C6C81F860
+ 9CA4FC6BED074D14458F11390A1925450769E9E7527A349B4C237C75B6DB2FFB
+ 4D343F13E35F1718F0169492168070ADA30695FAB95558F5084B948D3A158A53
+ 8EA5090E32067DB48C2718AD86D6D31684A51112B0F38704A8F43F1FCD9ACDCD
+ 2861A436DB8A2A5FF43C649AF569CD3E89EB744869C094F54FB26B2CF3B7EE3A
+ D2E0F8B4F2E24A694908527FAE4E466BF9D42F495CD4A565480E0F6423DD3D2B
+ D77584843DB4BBE12500E100FB47A5639B5ED8895788B71F493EF9E82937BB91
+ 52767DBE4F6A24065730A92E28FB5B4E4FCDD6B73B4E99B71B5098CB0953F8C9
+ 594E542B44811244B77129D25A51F2EBF4548365BA2AD519705921C514F53DF1
+ 4A92E444BB9AE5CD80E4B75236B6D14E4AD408015FA6BE36A49948719714D9F8
+ 14A8D7875219720C95FAC018EBB3B5602C825021DF115B15920E69908DA2866A
+ E6DFC9C54E256A0D1E84A4E0D609E71C9D16586D9DC94A09538A1D47D75B14A7
+ E3CE88862602000494A7B9C751F9C5787C2C5A6429A5ADB6CA140B6AFC6E95BF
+ 02A92179BE932C3728BD34627FB3353FD401CA41C68C40F3F115FA0D4FF5F458
+ 7A23FC1F2EC9F525FC8A5295728294A500294A500294A500294A500294A50029
+ 4A500294A500294A500294A500294A500294A500294A500294A500294A500294
+ A500294A500294A5006B1C4D5251C3FBF15FBBEA8BCFD18AAA5C3228951DF380
+ F488CB082C248CEDC60FD99156A78AEDA9EE1AEA54273B8C07718F8ED38AA43A
+ 56FB2B44EA489BB608D311B96E7E30240C75F2ED5E5FAC477349FC7E4F5BD1D2
+ 78A49FCFF88B2B6C8515A65C7DB8E42881952BA63EAAC8C209796144FE081F68
+ 76AF85AA78BDD892B8CE32F367016A4104823AF715E28125D91352DE0A101452
+ 7E720578E51B36E5B69D9245B222584A0B4E8008F748F9ABECF3AB49242C2F1E
+ 5DABCD063295190A4ABA247527A57D5961A5255E23A0FC46698934A91C19F2CF
+ 8B6CA663A3AF5EBECF6A87B8AAFB835E5BADD1D5B1A90CFB6547A6D1DFF8AA6A
+ 73C04290A092DAD27A7CF51DEADD29F2B712EC929C6C94351561431D0939C0A2
+ 38D2E59AB4B2719591C6BBE15427ADE972345851B6A14A56D6CA52B0013957E9
+ AAC1799EE5A4391D92B5B8EA8B692DF540CF4EDDFCEACEF1D353B4D990C21C79
+ 8311B536B40384E48C0FA7BD41FC2BB65926872FD7A9495C588B3B230580B715
+ E400F98F5FAABA586548F658B33943947CA3F0D17A1F48D9F50B4A5BB7832029
+ E23AF868CFEBCE3EBA9B34DDE6F9AD6229366B626330A482E3D756D5B56AF9B0
+ 3350D6A2D613F5C3F2DE65D4DBA034E6D6620E81783D323BF7C558CE5EF52AF5
+ 3E8E48949025425968A50AE99EDD479FD354D4BDFE7663D44DE3568C02F83E13
+ 706E6DCEE9297B30B31E36030547A1C83D7A6735919765F54448F05490CA8040
+ 52939560900D4877665725D5C7D981E6723A79D6BD756550E3292B47B27A83DF
+ B1CFEAAE0CB236C5432CA4AD9A7C6D35062C5FC232A76436BC85760135AAEA4D
+ 1AFCA96EC98ABF0D0E63281F8BD6A5D5BAD5D2CCDBA86D2951E87C89C1AC34E6
+ 5A84C871E412938C04F73429B66DC5964A2476CE920CA1A5CB4B892923F083A6
+ 3EBADB61C584C4C65B8CF3CB6D430A5EE181D2BED73BB34F470969054823DC70
+ 74358180E21943886095BAE286327D91D727A7D1436D969E46D59F5D5F62696F
+ A0B2C6E27FA2F98FAEB5A7EC186D3E1A56777C106A594C56E5DA92B0145C0076
+ E89FCF5AD5C24CA8AF2DBE9EAC074DA3AD5E3371542B1E693746A8842ADB1490
+ 9C383B6EFCFF009ABC5659A9B7EA17945EF11D713B8157400115994C59375277
+ ED4344F52AF7B1E7F9AB55BEA3E4DBB21D4A01009432C9EBD08233D3E9A747CE
+ AD9A5BB327A890268714846545272B4F6AD43D6DD8A434C7B8848055F039ADB1
+ 4FA9AB4B697595B4B4F5049C24E7E35AB4E770E2B6202B77C2B4E35EC4A56659
+ 9485B4DBAE0CA88E8A0735F39D7667D49D654A4B6B6D0ACA7CFB1AC0499EF426
+ 9B6D454A49C93B14322BC4BB8B0603EB736A5C2850255D55DB03B56FC70A9AA1
+ 59D56365B2E5246747B5FD9295F560D580A8039483FEB39AFA3153FD7D0609A8
+ 46FE0F9664FA92FE45294AB1414A528014AE5EFA49A0F183972E21DA389DA178
+ 8BAAE0E89BACC6C39017A85F7E3C3B982B77C34C57145263B886F706C85A014B
+ A921082DA0E2B8FF00E909D59CCFD93879C3EE02337DB2EAFD45F84BDC78396E
+ 6477D2AF623332C29386C6C71D71D0103C3F0F72903C66C35636E9A16E695A67
+ 55E95CEEE7CADBABF95BE4CF4740B17137594FD4AAD511D171D4F22F7244D98A
+ 5C4925690AF1096D9CA11B590768DA09DCBDCB5437A27835C75D77C9E48E39C0
+ E64B5932FB16E9D73569F93729A9496A23CEA1D0240924EE28656A48F0F05442
+ 49032B0285ABB073A75475D6954AFD197CDB6B2E663486ADB6EB9F027DEB4CBD
+ 188BD32DA1954C6A4178A52E348484254D9648DC900292A4829CA4A97637992B
+ ACDB172EFC50B95B65BF6FB8C3D2F73911A5C570B6EB0EA22B8A42D0B49052A4
+ 900820E4100D51C5A7B5964D35648F4AE3B7A36F9C5D748E632DFA4B5CEB5BB6
+ A3B06A96570507515DD4F2624B4A4AD85B6A7B71DCB295321B4A93BD4F233B8A
+ 102B29E934E73753AF8E2D68AE1D6AFBB69EB76946551EE12EC17272319739CD
+ AA750A5B2EE169682508C2929521CF1D27CA99E1BDDB4A788AACEBAD2AAA7259
+ C656ACDC88696E21712B55BEE311599EFDC6FB7B94E4875494CF7D080A5A8A96
+ B560210848CA89DA94824815A1DD3D30DC13B7DCE5C68F66D65738EC3CB6913A
+ 2DBE38664242880E2039212B09501901694AB07A80722A9B1DB48BEE556CBCF4
+ A8935BF343A1B46F2FAF719A3CB7F53689432C3E87AC894B8EBA975F430004B8
+ A461495AF0B4ACA5492950202814D57DFF0045EB81DF72FF002AFA9EABF5DF5C
+ F56F917E4D6BD6BC3D9BBD63778DE0F879F631E26FCFE26DF6A85193EC81C92E
+ ECBBB4A893487341A1B5F700AE7C5DD3F2DFB9E9BB65BA4DC26C56509F5D8CA6
+ 1A2EBD19C6CA804BC903B156D3B92A0A285254743E0D73F9C3EE38685E23EABB
+ 159F5244B7683B70B9DC9AB846610EBCD16DF730C843CA0A5623AFA28A464A7A
+ F7C46D64EE4597A540DCADF395A2F9B6FBA5FB90B65F6DDF207AB7AD7CB4C32D
+ 6FF1FC5D9B3C375CCE3C156738EE319EB89E6A1A69D304EF94294A5412294A50
+ 0294A500294A500294A500294A500294A500294A5006075DA3C4D1D7841190A8
+ CB49FA08AA8970D3312E311E8786D5236A437B8F6E991F9EADFEB48EE4BD2776
+ 659197571D6940F8AB1D07DB549A6DECE9DB9AD17561C6969202D49F6B181FD6
+ E7CEB87D474F2CCEE3F077FA7678E1836DFB990B16A5D43C342C5BA7C45BF6EF
+ 7CC98682129FECAA66D29AA1AB9418CFB2B8E1A7145654A58C80474EBF4E2A2F
+ 83C74E1E26198F7CBE3F1D246C5B6B84FB8920F43EEB66A3ABDF10787B6E79C5
+ E99D62EC5677E531DC852C003E390D1AF28F459E2EB6367565A9C59179A49174
+ E0C97E4B4A08701481D723D9FB6BE4FEA3B4C47C32F488A873CD45C0923EDAAB
+ 3A6B8DFA063C46D778E22DD5D91E6CB0C4C2D7D60B2335B943E3DF01D0905EBE
+ 29F7F1FCB9FB64C511FF0045578E9F3C552C6CE6CE5A784AB75FF04D53B8A5A6
+ E3A92DCC9B19948E9BBC618FB7B0AC5DE3891A74C03259B934EA8E705A792484
+ 8EBDF3508DD38AFC03BC2D5E3EA379B07FDEAD72C7FDCD69772D51C1D9D24B49
+ E21DCDAB66E196116F95850CF6FE52287A7D43FF00D6C662CDA58F36CC6F18EE
+ 32757EA57DBB0BCBB9879BDEB6A37E1979CF6C27269A7B8497F5DB9B6A458DD8
+ 65B6FC525E6168EA7B64918A96348F1C7805A350916CBAA23BE93B4C85DA2592
+ B1F1386B35B24CE6C783F2D95EED4A03AA504EE4DA660F673FDAE991D3EA231E
+ 31B37FEEB8A1C47B1A5E8BE0E263479F7ABCBB1DF8ECC3594B4D8DBB17B48ACC
+ F0D25AB4EDFEDF2E02A3FC99758C5A7191EF25690559FCD5EA47339C1C69F798
+ 46A2DD01D1871B72D730A57F5785580BAF1E782698CA6A25E5C002BF0662DBA5
+ 20A3CF232D0ACD3C5AA9AAF0990F5F8F3AF33268B8CF4B296C24A54F3FDC67A8
+ F3AC4DD3470BA21878CB7D0E039F0C2BD9350CDB3997D090E4786ABF95C727DA
+ 75DB7C92E11E58FC1F4EB8ADC3EFAFE1686523EE916481DBE4D97FFF001573DE
+ 83537C63647EAF1C784CCD5C63C1B2A1F5B6FAD4E23A6D27201F3E9E75849F7E
+ 79E5C64BAC91849500474208EF5A6CCE62386931609BC389714F1529C3064901
+ 3F47875E8FBE63876C3636DDC3EA41DA90AB7C9C14FF0093AB4743A9F7C6CD18
+ F5B8D2E59B17AC7AE16C784521215BB03B7435F2D37604DCAE0CA90BF612A255
+ E5E46B553CC0F0DA4AD4E397E7985107D96E049C7EF75F4B5F319C3CB1361B8D
+ 7B2E851CA96AB7C9DC3FE8EADFA1D47FD6CB4B5F8FB5937784DA5B75A48C3490
+ 024E3B9CD6BD7AB7A0C27A42405049DB9F9EB4A739A4E1D2E3A922FCB0A23FA9
+ F27BF97F43AF223996E1CAE3069CBF28823242ADF248DDFE4E8FD0EA3FEB62E1
+ ADC49F73F9BADE531DBF063F57067200ED5ABCB65E425A90FB8572B3F83707E2
+ 67FF000C8AFE6FFC6DE1FCA709897A0927F1C5BE4823FE8EB4DBBF16B4D3BE08
+ 8777504A540AF7447BAFED29D8F49A85C3C6CE8AD6616B99A465EFD3A6BA95A1
+ C756BD98CA770F8D79E1CD21AC21A517FC891D3E7FCD9AD66E3C47B1AEE46435
+ 784B8823AA4C37F07F6958FBBF106D32168F57BB3A3E21B8CEA47E74D7461A1C
+ AB9DAD0D8EAF057D446C37D4A5C5EC657E1EEF7C28E0D6A6A5F86F2925DC8F85
+ 7CA66ADB5CD6FDAB8A8280E998EEEE3F5EDAFE74D5B266A0B935E1B2B5B255D1
+ 58C647D75D3D3E9726E4E48C9ABD76358DA84932F77294D291A359DC31DFF454
+ FD51372F361167D30849053848C0352CD7AB4DB493F63E7926DC9B6294A5040A
+ 5294014D7D273CC5693E18F01AF7A12588378D61AB627ABC2B3C960480CB2560
+ 2A6389DC3C3D9B545A5F53E3210529506D653CE5E59B555EB91AE6834C5CB895
+ A2FE4B6A6C469120DEE2AC3F0214BDB99B1F6A54A0E213B92A48495603EC9095
+ 956DEA6EB2E40F87FC4CE3935C50D6F78D49ACEE2CBC1C66C97892C2ED6DB49C
+ 96A38650CA4F8282776C2A216725CF137AF76D1CCFF281A179B2B5D862EB076E
+ B05FB23CEB90E6D9E4A5A752971290E3642D0B414A8A1B3D53B816C60805414F
+ 8CA296D1328C9BB2B97A5FAEB0AFDCA868DB95B65B170B74CD510E4469715C4B
+ 8D3ED2E14B521685A490A4A8104107041CD40DCBCF0039A4E34728F67B368FE2
+ 5E9BB2F0AEF2CCB8ED5965294C4A0D7ADBA1F42DD6E229CDAB712E6407485216
+ 527D9253577B54F219A475BF00AC3C22BF6B1D6574D3762B8A2E16E952264654
+ D6128696D223073D5F05948757B4149527A242821294896F817C1AB2F2FDC2DB
+ 2E82D3D2674CB3DA7C6F01EB93885BEAF15E5BCADCA421093ED38A03091D00EF
+ DEA37A51A44ED6E56CD0B93CE52ECBCA3F0F26D8615CBEE82F1729665DC6F4E4
+ 34465BF81B5A6929054A0DA139212A5ABDA71D50C6FDA368E69FF6327173FC11
+ BB7F0376A51AC0EBFD1B0B88DA1751694B93AFB16EBEDBA45B24BB15412EA1A7
+ 9B536B282A040500A3824119C7434BBB76C6552A4715F859C05D4DC4EE4691AD
+ B42A6EB2359687D7F2644489660E2A538D3F1ADC952D843485385E6DC6D85821
+ 4909425D5752134E29F0175370C791A5EB6D749BAC7D65AE35FC6912E25E4389
+ 94DB4C46B8A52B7D0EA12E079C71C7D649528290A695D095575AF968E5A34C72
+ AFA167694D293AEB70B74CB8AEE6E3B7875B71D0EADB6DB2016DB40DB8693D31
+ 9C93D7E0E65F968D31CD468583A5355CEBADBEDD0EE28B9B6ED9DD6DB74BA86D
+ C6C025C6D636E1D574C672075F8BBC4E7EC27C3E0E6DF11FE5AFF41E385DF25F
+ AF7A8FDD13DF2AFAA6FF000FD5BD72E1B7C7DBD3C3F1FD5F1BBA6FF0FF001B6D
+ 64B93FE5E6F5CCEF2A137465938ED6FB069F725937FD1AC6928AEC88EFF8FE23
+ 2E3B277B6F39BC32D292E67184784090D148E8E70CB970D17C34E08DBB851EA5
+ F753A421789FE96D48D332FC7DF21523F0A9F0C215B5C5653ECF4DA9F319AAE9
+ A9BD10DC0EBEDF24CF81335669B8AF6DD96CB65C9B547670900ED2FB2E387241
+ 51DCB3D547181800DEB941B1F0C8B389BC06B2F2E7E8D5E34E90B2EBD83C400D
+ EA28EECC9905A435EA7244BB7B4E45710975CDAE23C20482411BC0291DCC35C2
+ 148FF42278D87033F75D1FAFFF0036D55D116B91BE1A5BF973BC705ED68BB5A7
+ 4BDE1E6255C25C799BE6C892DA985178ADD4AD0952CC66F704A023BED4A7358B
+ D37C81F0FB4C72E5AA382F16F1A91CD2FA8AE28B9CA96F4960CD43A9547500DA
+ C32101398ADF42827AABAF51814D57FF0049707FD154F913FF00CD91CC0FFCBF
+ FF00D9D8A8BBD1E4A03964E6FB240FF5A29FE0772AE97F2FBCA968BE5D38637A
+ D03665CED41A76F12DE97358D445993E2F8ACB6CB8D29296D0953650D0052527
+ 3956720E04231BD123C098F74BECA527523EC5C597DB8F09CB980D5B14E2B287
+ 1829405A94D8E890F29D491EF859EB46F8F21B5F041FE84AFF00D71FFC8FFF00
+ E6D750EA06E56F935D17CA4FDD2FDC85CEFB71F97FD5BD6BE5A7D9776781E2EC
+ D9E1B4DE33E32B39CF618C75CCF34B9B5295A2F0551A6294A52CB8A529400A52
+ 9400A529400A529400A529400A529400A529401F390C890CADB3D943151C5F38
+ 1F69BDC871E79B4952CF5E94A55E2E88B6BB1AACDE5534F4D7095B0820FCC2BC
+ AAE50F4D1491E023EC14A5129C976E03629F323E7F7A069BFC9D1F60A7DE81A6
+ FF002747D8294AAF893F921C547843EF40D37F93A3EC14FBD034DFE4E8FB0529
+ 47893F92C90FBD034DFE4E8FB053EF40D37F93A3EC14A54F8B3AAB21AA1F7A06
+ 9BFC9D1F60A7DE81A6FF002747D8294AAC6725EE2DFD98FBD034DFE4E8FB053E
+ F40D37F93A3EC14A53565922C9B5EE3EF40D37F93A3EC14FBD034DFE4E8FB052
+ 950F2C98393F91F7A069BFC9D1F60A7DE81A6FF2747D8294AAF8922ADB7EE3EF
+ 40D37F93A3EC14FBD034DFE4E8FB052947892215A7DC7DE81A6FF2747D829F7A
+ 069BFC9D1F60A52AAE72BBB34A4A7CC87DE81A6FF2747D82BFD4F283A6C281F5
+ 747D8294A66E73E6459422BD8FA7DE8DA691D4474123CB02B61B0F2F365B2ED2
+ 88C8494F6E8294A2EBD85CBCAF824EB3DA1BB347430C3612D81DC57BE94AA5D8
+ 376294A5410294A500294A500294A500294A500294A500294A500294A500294A
+ 500294A500294A500294A500294A500294A500294A500294A500294A500294A5
+ 007FFFD9}
+ end
+ object Label1: TLabel
+ Left = 40
+ Top = 192
+ Width = 377
+ Height = 57
+ AutoSize = False
+ Caption =
+ 'XP Menu is a none-visual component that changes the visual aspec' +
+ 'ts of menus, toolbars and many other controls to nearly the same' +
+ ' look and feel of MS Office XP. No code required, you do not hav' +
+ 'e to reconstruct menus or toolbars using controls other than tho' +
+ 'se shipped with Delphi.'
+ Color = clGray
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clSilver
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentColor = False
+ ParentFont = False
+ WordWrap = True
+ end
+ object Label2: TLabel
+ Left = 48
+ Top = 160
+ Width = 218
+ Height = 13
+ Caption = 'TUCXpStyle component is based in TXPMenu'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clSilver
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label3: TLabel
+ Left = 40
+ Top = 264
+ Width = 236
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'Author: Khaled Shagrouni khaled@shagrouni.com'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWhite
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ OnClick = Label3Click
+ end
+ object Label4: TLabel
+ Left = 40
+ Top = 288
+ Width = 274
+ Height = 13
+ Cursor = crHandPoint
+ Caption = 'http://www.shagrouni.com/english/software/xpmenu.html'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = 16634037
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsUnderline]
+ ParentFont = False
+ OnClick = Label4Click
+ end
+ object SpeedButton1: TSpeedButton
+ Left = 424
+ Top = 282
+ Width = 75
+ Height = 25
+ Caption = '&Close'
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ OnClick = SpeedButton1Click
+ end
+end
diff --git a/official/2.31RC1/Source/UCAboutXpStyle_U.pas b/official/2.31RC1/Source/UCAboutXpStyle_U.pas
new file mode 100644
index 0000000..5cba471
--- /dev/null
+++ b/official/2.31RC1/Source/UCAboutXpStyle_U.pas
@@ -0,0 +1,46 @@
+unit UCAboutXpStyle_U;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, Jpeg, ExtCtrls, StdCtrls, ShellApi, Buttons;
+
+type
+ TUCAboutXpStyle = class(TForm)
+ Image1: TImage;
+ Label1: TLabel;
+ Label2: TLabel;
+ Label3: TLabel;
+ Label4: TLabel;
+ SpeedButton1: TSpeedButton;
+ procedure Label3Click(Sender: TObject);
+ procedure SpeedButton1Click(Sender: TObject);
+ procedure Label4Click(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+
+implementation
+
+{$R *.dfm}
+
+procedure TUCAboutXpStyle.Label3Click(Sender: TObject);
+begin
+ ShellExecute(0, 'open', 'mailto:khaled@shagrouni.com', nil, nil, sw_show);
+end;
+
+procedure TUCAboutXpStyle.SpeedButton1Click(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TUCAboutXpStyle.Label4Click(Sender: TObject);
+begin
+ ShellExecute(0, 'open', 'http://www.shagrouni.com/english/software/xpmenu.html', nil, nil, sw_show);
+end;
+
+end.
diff --git a/official/2.31RC1/Source/UCBase.pas b/official/2.31RC1/Source/UCBase.pas
new file mode 100644
index 0000000..005af76
--- /dev/null
+++ b/official/2.31RC1/Source/UCBase.pas
@@ -0,0 +1,4080 @@
+{
+-----------------------------------------------------------------------------
+ Unit Name: UCBase
+ Author: QmD
+ changed: 06-dez-2004
+ Purpose: Main Unit
+ History: included delphi 2005 support
+-----------------------------------------------------------------------------}
+
+(*
+
+ Vesões do Delphi
+
+ VER120 = Delphi4
+ VER130 = Delphi5
+ VER140 = Delphi6
+ VER150 = Delphi7
+ VER160 = Delphi8
+ VER170 = BDS2005
+ VER180 = BDS2006
+
+*)
+
+unit UCBase;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ ActnList,
+ ActnMan,
+ ActnMenus,
+ Classes,
+ Controls,
+ DB,
+ ExtActns,
+ Forms,
+ Graphics,
+ md5,
+ Menus,
+ StdCtrls,
+ SysUtils,
+ UcConsts_Language,
+ UCDataConnector,
+ UCDataInfo,
+ UCMail,
+ UCMessages,
+ UCSettings,
+ Variants,
+ Windows;
+
+const
+ llBaixo = 0;
+ llNormal = 1;
+ llMedio = 2;
+ llCritico = 3;
+
+// Version
+const
+ UCVersion = '2.31 RC1';
+
+type
+ // Pensando em usar GUID para gerar a chave das tabelas !!!!
+ TUCGUID = class
+ //Creates and returns a new globally unique identifier
+ class function NovoGUID: TGUID;
+ //sometimes we need to have an "empty" value, like NULL
+ class function EmptyGUID: TGUID;
+ //Checks whether a Guid is EmptyGuid
+ class function IsEmptyGUID(GUID: TGUID): Boolean;
+ //Convert to string
+ class function ToString(GUID: TGUID): String;
+ //convert to quoted string
+ class function ToQuotedString(GUID: TGUID): String;
+ //return a GUID from string
+ class function FromString(Value: String): TGUID;
+ //Indicates whether two TGUID values are the same
+ class function EqualGUIDs(GUID1, GUID2: TGUID): Boolean;
+ //Creates and returns a new globally unique identifier string
+ class function NovoGUIDString: String;
+ end;
+
+ TUCAboutVar = String;
+
+ //classe para armazenar usuario logado = currentuser
+ TUCCurrentUser = class(TComponent)
+ private
+ FPerfilUsuario: TDataSet;
+ FPerfilGrupo: TDataSet;
+ public
+ UserID: Integer;
+ Profile: Integer;
+ UserIDOld: Integer;
+ IdLogon: String;
+ UserName: String;
+ UserLogin: String;
+ Password: String;
+ Email: String;
+ DateExpiration: TDateTime;
+ Privileged: Boolean;
+ UserNotExpired: Boolean;
+ UserDaysExpired: Integer;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ { TODO 1 -oLuiz -cUpgrade : Terminar a implementação dos DataSets para os Perfis de Usuario Loggado }
+ property PerfilUsuario: TDataSet read FPerfilUsuario write FPerfilUsuario; //Cadastro de Usuarios
+ property PerfilGrupo: TDataSet read FPerfilGrupo write FPerfilGrupo; //Cadastro de Perfil
+ end;
+
+ TUCUser = class(TPersistent) // armazenar menuitem ou action responsavel pelo controle de usuarios
+ private
+ FAction: TAction;
+ FMenuItem: TMenuItem;
+ FUsePrivilegedField: Boolean;
+ FProtectAdministrator: Boolean;
+ procedure SetAction(const Value: TAction);
+ procedure SetMenuItem(const Value: TMenuItem);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ property UsePrivilegedField: Boolean read FUsePrivilegedField write FUsePrivilegedField default False;
+ property ProtectAdministrator: Boolean read FProtectAdministrator write FProtectAdministrator default True;
+ end;
+
+ TUCUserProfile = class(TPersistent) // armazenar menuitem ou action responsavel pelo Perfil de usuarios
+ private
+ FAtive: Boolean;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Active: Boolean read FAtive write FAtive default True;
+ end;
+
+ TUCUserPasswordChange = class(TPersistent) // armazenar menuitem ou action responsavel pelo Form trocar senha
+ private
+ FForcePassword: Boolean;
+ FMinPasswordLength: Integer;
+ FAction: TAction;
+ FMenuItem: TMenuItem;
+ procedure SetAction(const Value: TAction);
+ procedure SetMenuItem(const Value: TMenuItem);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ property ForcePassword: Boolean read FForcePassword write FForcePassword default False;
+ property MinPasswordLength: Integer read FMinPasswordLength write FMinPasswordLength default 0;
+ end;
+
+ TUCUserLogoff = class(TPersistent) // armazenar menuitem ou action responsavel pelo logoff
+ private
+ FAction: TAction;
+ FMenuItem: TMenuItem;
+ procedure SetAction(const Value: TAction);
+ procedure SetMenuItem(const Value: TMenuItem);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ end;
+
+ TUCAutoLogin = class(TPersistent) // armazenar configuracao de Auto-Logon
+ private
+ FActive: Boolean;
+ FUser: String;
+ FPassword: String;
+ FMessageOnError: Boolean;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Active: Boolean read FActive write FActive default False;
+ property User: String read FUser write FUser;
+ property Password: String read FPassword write FPassword;
+ property MessageOnError: Boolean read FMessageOnError write FMessageOnError default True;
+ end;
+
+ TUCInitialLogin = class(TPersistent) // armazenar Dados do Login que sera criado na primeira execucao do programa.
+ private
+ FUser: String;
+ FPassword: String;
+ FInitialRights: TStrings;
+ FEmail: String;
+ procedure SetInitialRights(const Value: TStrings);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property User: String read FUser write FUser;
+ property Email: String read FEmail write FEmail;
+ property Password: String read FPassword write FPassword;
+ property InitialRights: TStrings read FInitialRights write SetInitialRights;
+ end;
+
+ TUCGetLoginName = (lnNone, lnUserName, lnMachineName);
+
+ TUCLogin = class(TPersistent)
+ private
+ FAutoLogin: TUCAutoLogin;
+ FMaxLoginAttempts: Integer;
+ FInitialLogin: TUCInitialLogin;
+ FGetLoginName: TUCGetLoginName;
+ fCharCaseUser: TEditCharCase;
+ fCharCasePass: TEditCharCase;
+ fDateExpireActive: Boolean;
+ fDaysOfSunExpired: Word;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property AutoLogin: TUCAutoLogin read FAutoLogin write FAutoLogin;
+ property InitialLogin: TUCInitialLogin read FInitialLogin write FInitialLogin;
+ property MaxLoginAttempts: Integer read FMaxLoginAttempts write FMaxLoginAttempts;
+ property GetLoginName: TUCGetLoginName read FGetLoginName write FGetLoginName default lnNone;
+ property CharCaseUser: TEditCharCase read fCharCaseUser write fCharCaseUser default ecNormal; { By Vicente Barros leonel }
+ property CharCasePass: TEditCharCase read fCharCasePass write fCharCasePass default ecNormal; { By Vicente Barros leonel }
+ property ActiveDateExpired: Boolean read fDateExpireActive write fDateExpireActive default False; { By Vicente Barros leonel }
+ property DaysOfSunExpired: Word read fDaysOfSunExpired write fDaysOfSunExpired default 30; { By Vicente Barros leonel }
+ end;
+
+ TUCNotAllowedItems = class(TPersistent) // Ocultar e/ou Desabilitar os itens que o usuario nao tem acesso
+ private
+ FMenuVisible: Boolean;
+ FActionVisible: Boolean;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property MenuVisible: Boolean read FMenuVisible write FMenuVisible default True;
+ property ActionVisible: Boolean read FActionVisible write FActionVisible default True;
+ end;
+
+ TUCLogControl = class(TPersistent) // Responsavel pelo Controle de Log
+ private
+ FActive: Boolean;
+ FTableLog: String;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Active: Boolean read FActive write FActive default True;
+ property TableLog: String read FTableLog write FTableLog;
+ end;
+
+ TUCControlRight = class(TPersistent) // Menu / ActionList/ActionManager ou ActionMainMenuBar a serem Controlados
+ private
+ FActionList: TActionList;
+ FActionManager: TActionManager;
+ FActionMainMenuBar: TActionMainMenuBar;
+ FMainMenu: TMenu;
+ procedure SetActionList(const Value: TActionList);
+ procedure SetActionManager(const Value: TActionManager);
+ procedure SetActionMainMenuBar(const Value: TActionMainMenuBar);
+ procedure SetMainMenu(const Value: TMenu);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property ActionList: TActionList read FActionList write SetActionList;
+ property MainMenu: TMenu read FMainMenu write SetMainMenu;
+ property ActionManager: TActionManager read FActionManager write SetActionManager;
+ property ActionMainMenuBar: TActionMainMenuBar read FActionMainMenuBar write SetActionMainMenuBar;
+ end;
+
+ TOnLogin = procedure(Sender: TObject; var User, Password: String) of object;
+ TOnLoginSucess = procedure(Sender: TObject; IdUser: Integer; Usuario, Nome, Senha, Email: String; Privileged: Boolean) of object;
+ TOnLoginError = procedure(Sender: TObject; Usuario, Senha: String) of object;
+ TOnApplyRightsMenuItem = procedure(Sender: TObject; MenuItem: TMenuItem) of object;
+ TOnApllyRightsActionItem = procedure(Sender: TObject; Action: TAction) of object;
+ TCustomUserForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object;
+ TCustomUserProfileForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object;
+ TCustomLoginForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object;
+ TCustomUserPasswordChangeForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object;
+ TCustomLogControlForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object;
+ TCustomInitialMessage = procedure(Sender: TObject; var CustomForm: TCustomForm; var Msg: TStrings) of object;
+ TCustomUserLoggedForm = procedure(Sender: TObject; var CustomForm: TCustomForm) of object; //Cesar: 13/07/2005
+ TOnAddUser = procedure(Sender: TObject; var Login, Password, Name, Mail: String; var Profile: Integer; var Privuser: Boolean) of object;
+ TOnChangeUser = procedure(Sender: TObject; IDUser: Integer; var Login, Name, Mail: String; var Profile: Integer; var Privuser: Boolean) of object;
+ TOnDeleteUser = procedure(Sender: TObject; IDUser: Integer; var CanDelete: Boolean; var ErrorMsg: String) of object;
+ TOnAddProfile = procedure(Sender: TObject; var Profile: String) of object;
+ TOnDeleteProfile = procedure(Sender: TObject; IDProfile: Integer; var CanDelete: Boolean; var ErrorMsg: String) of object;
+ TOnChangePassword = procedure(Sender: TObject; IDUser: Integer; Login, CurrentPassword, NewPassword: String) of object;
+ TOnLogoff = procedure(Sender: TObject; IDUser: Integer) of object;
+
+ TUCExtraRights = class;
+ TUCExecuteThread = class;
+ TUCApplicationMessage = class;
+ TUCControls = class;
+ TUCUsersLogged = class; //Cesar: 12/07/2005
+
+ TUCLoginMode = (lmActive, lmPassive);
+ TUCCriptografia = (cPadrao, cMD5);
+
+ TUserControl = class(TComponent) // Classe principal
+ private
+ FCurrentUser: TUCCurrentUser;
+ FUserSettings: TUCUserSettings;
+ FApplicationID: String;
+ FNotAllowedItems: TUCNotAllowedItems;
+ FOnLogin: TOnLogin;
+ FOnStartApplication: TNotifyEvent;
+ FOnLoginError: TOnLoginError;
+ FOnLoginSucess: TOnLoginSucess;
+ FOnApplyRightsActionIt: TOnApllyRightsActionItem;
+ FOnApplyRightsMenuIt: TOnApplyRightsMenuItem;
+ FLogControl: TUCLogControl;
+ FEncrytKey: Word;
+ FUser: TUCUser;
+ FLogin: TUCLogin;
+ FUserProfile: TUCUserProfile;
+ FUserPasswordChange: TUCUserPasswordChange;
+ FControlRight: TUCControlRight;
+ FOnCustomCadUsuarioForm: TCustomUserForm;
+ FCustomLogControlForm: TCustomLogControlForm;
+ FCustomLoginForm: TCustomLoginForm;
+ FCustomPerfilUsuarioForm: TCustomUserProfileForm;
+ FCustomTrocarSenhaForm: TCustomUserPasswordChangeForm;
+ FOnAddProfile: TOnAddProfile;
+ FOnAddUser: TOnAddUser;
+ FOnChangePassword: TOnChangePassword;
+ FOnChangeUser: TOnChangeUser;
+ FOnDeleteProfile: TOnDeleteProfile;
+ FOnDeleteUser: TOnDeleteUser;
+ FOnLogoff: TOnLogoff;
+ FCustomInicialMsg: TCustomInitialMessage;
+ FAbout: TUCAboutVar;
+ FExtraRights: TUCExtraRights;
+ FThUCRun: TUCExecuteThread;
+ FAutoStart: Boolean;
+ FTableRights: TUCTableRights;
+ FTableUsers: TUCTableUsers;
+ FLoginMode: TUCLoginMode;
+ FControlList: TList;
+ FDataConnector: TUCDataConnector;
+ FLoginMonitorList: TList;
+ FAfterLogin: TNotifyEvent;
+ FCheckValidationKey: Boolean;
+ FCriptografia: TUCCriptografia;
+ FUsersLogged: TUCUsersLogged;
+ FTableUsersLogged: TUCTableUsersLogged;
+ FUsersLogoff: TUCUserLogoff;
+ fLanguage: TUCLanguage;
+ FMailUserControl: TMailUserControl;
+ procedure SetExtraRights(Value: TUCExtraRights);
+ procedure ActionCadUser(Sender: TObject);
+ procedure ActionTrocaSenha(Sender: TObject);
+ procedure ActionOKLogin(Sender: TObject);
+ procedure TestaFecha(Sender: TObject; var CanClose: Boolean);
+ procedure ApplySettings(SourceSettings: TUCSettings);
+ procedure UnlockEX(FormObj: TCustomForm; ObjName: String);
+ procedure LockEX(FormObj: TCustomForm; ObjName: String; naInvisible: Boolean);
+ {.$IFDEF UCACTMANAGER}
+ procedure TrataActMenuBarIt(IT: TActionClientItem; ADataset: TDataset);
+ procedure IncPermissActMenuBar(idUser: Integer; Act: TAction);
+ {.$ENDIF}
+ procedure SetDataConnector(const Value: TUCDataConnector);
+ procedure DoCheckValidationField;
+ procedure SetfLanguage(const Value: TUCLanguage);
+ procedure SetFMailUserControl(const Value: TMailUserControl);
+ procedure ActionEsqueceuSenha(Sender: TObject);
+ protected
+ FRetry: Integer;
+ // Formulários
+ FFormTrocarSenha: TCustomForm;
+ FFormLogin: TCustomForm;
+ FFormGeral: TCustomForm;
+ // -----
+
+ procedure Loaded; override;
+ // Criar Formulários
+ procedure CriaFormTrocarSenha; dynamic;
+ // -----
+
+ procedure ActionLogoff(Sender: TObject); dynamic;
+ procedure ActionTSBtGrava(Sender: TObject);
+ procedure SetUserSettings(const Value: TUCUserSettings);
+ procedure SetfrmLoginWindow(Form: TCustomForm);
+ procedure Notification(AComponent: TComponent; AOperation: TOperation); override;
+ procedure RegistraCurrentUser(Dados: TDataset);
+ procedure ApplyRightsObj(ADataset: TDataset; FProfile: Boolean = False);
+ procedure ShowLogin;
+ procedure ApplyRights;
+
+ // Criar Tabelas
+ procedure CriaTabelaLog;
+ procedure CriaTabelaRights(ExtraRights: Boolean = False);
+ procedure CriaTabelaUsuarios(TableExists: Boolean);
+ procedure CriaTabelaMsgs(const TableName: String);
+ // -----
+
+ // Atualiza Versao
+ procedure AtualizarVersao;
+ //--------
+
+ procedure TryAutoLogon;
+ procedure AddUCControlMonitor(UCControl: TUCControls);
+ procedure DeleteUCControlMonitor(UCControl: TUCControls);
+ procedure ApplyRightsUCControlMonitor;
+ procedure LockControlsUCControlMonitor;
+ procedure AddLoginMonitor(UCAppMessage: TUCApplicationMessage);
+ procedure DeleteLoginMonitor(UCAppMessage: TUCApplicationMessage);
+ procedure NotificationLoginMonitor;
+ procedure ShowNewConfig;
+ public
+ procedure Logoff;
+ procedure Execute;
+ procedure StartLogin;
+ procedure ShowChangePassword;
+ procedure ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile, UserExpired, UserDaysSun, Status: Integer; PrivUser: Boolean);
+ procedure ChangePassword(IDUser: Integer; NewPassword: String);
+ procedure AddRight(idUser: Integer; ItemRight: TObject; FullPath: Boolean = True); overload;
+ procedure AddRight(idUser: Integer; ItemRight: String); overload;
+ procedure AddRightEX(idUser: Integer; Module, FormName, ObjName: String);
+ procedure HideField(Sender: TField; var Text: String; DisplayText: Boolean);
+ procedure Log(MSG: String; Level: Integer = llNormal);
+ function VerificaLogin(User, Password: String): Integer;//Boolean;
+ function GetLocalUserName: String;
+ function GetLocalComputerName: String;
+ function AddUser(Login, Password, Name, Mail: String; Profile, UserExpired, DaysExpired: Integer; PrivUser: Boolean): Integer;
+ function ExisteUsuario(Login: String): Boolean;
+ property CurrentUser: TUCCurrentUser read FCurrentUser write FCurrentUser;
+ property UserSettings: TUCUserSettings read FUserSettings write SetUserSettings;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property About: TUCAboutVar read FAbout write FAbout;
+ property Criptografia: TUCCriptografia read FCriptografia write FCriptografia default cPadrao;
+ property AutoStart: Boolean read FAutoStart write FAutoStart default False;
+ property ApplicationID: String read FApplicationID write FApplicationID;
+ property ControlRight: TUCControlRight read FControlRight write FControlRight;
+ // Controle dos formularios
+ property User: TUCUser read FUser write FUser;
+ property UserProfile: TUCUserProfile read FUserProfile write FUserProfile;
+ property UserPasswordChange: TUCUserPasswordChange read FUserPasswordChange write FUserPasswordChange;
+ property UsersLogged: TUCUsersLogged read FUsersLogged write FUsersLogged;
+ property UsersLogoff: TUCUserLogoff read FUsersLogoff write FUsersLogoff; //by vicente barros leonel
+ property LogControl: TUCLogControl read FLogControl write FLogControl;
+
+ property MailUserControl: TMailUserControl read FMailUserControl write SetFMailUserControl; // by vicente barros leonel
+
+ property Language: TUCLanguage read fLanguage write SetfLanguage;
+
+ property EncryptKey: Word read FEncrytKey write FEncrytKey;
+ property NotAllowedItems: TUCNotAllowedItems read FNotAllowedItems write FNotAllowedItems;
+ property Login: TUCLogin read FLogin write FLogin;
+ property ExtraRights: TUCExtraRights read FExtraRights write SetExtraRights;
+ property LoginMode: TUCLoginMode read FLoginMode write FLoginMode default lmActive;
+ // Tabelas
+ property TableUsers: TUCTableUsers read FTableUsers write FTableUsers;
+ property TableRights: TUCTableRights read FTableRights write FTableRights;
+ property TableUsersLogged: TUCTableUsersLogged read FTableUsersLogged write FTableUsersLogged;
+
+ property DataConnector: TUCDataConnector read FDataConnector write SetDataConnector;
+ property CheckValidationKey: Boolean read FCheckValidationKey write FCheckValidationKey default False;
+ // Eventos
+ property OnLogin: TOnLogin read FOnLogin write FOnLogin;
+ property OnStartApplication: TNotifyEvent read FOnStartApplication write FOnStartApplication;
+ property OnLoginSucess: TOnLoginSucess read FOnLoginSucess write FOnLoginSucess;
+ property OnLoginError: TOnLoginError read FOnLoginError write FOnLoginError;
+ property OnApplyRightsMenuIt: TOnApplyRightsMenuItem read FOnApplyRightsMenuIt write FOnApplyRightsMenuIt;
+ property OnApplyRightsActionIt: TOnApllyRightsActionItem read FOnApplyRightsActionIt write FOnApplyRightsActionIt;
+ property OnCustomUsersForm: TCustomUserForm read FOnCustomCadUsuarioForm write FOnCustomCadUsuarioForm;
+ property OnCustomUsersProfileForm: TCustomUserProfileForm read FCustomPerfilUsuarioForm write FCustomPerfilUsuarioForm;
+ property OnCustomLoginForm: TCustomLoginForm read FCustomLoginForm write FCustomLoginForm;
+ property OnCustomChangePasswordForm: TCustomUserPasswordChangeForm read FCustomTrocarSenhaForm write FCustomTrocarSenhaForm;
+ property OnCustomLogControlForm: TCustomLogControlForm read FCustomLogControlForm write FCustomLogControlForm;
+ property OnCustomInitialMsg: TCustomInitialMessage read FCustomInicialMsg write FCustomInicialMsg;
+ property OnCustomUserLoggedForm: TCustomUserForm read FOnCustomCadUsuarioForm write FOnCustomCadUsuarioForm; //Cesar: 13/07/2005
+ property OnAddUser: TOnAddUser read FOnAddUser write FOnAddUser;
+ property OnChangeUser: TOnChangeUser read FOnChangeUser write FOnChangeUser;
+ property OnDeleteUser: TOnDeleteUser read FOnDeleteUser write FOnDeleteUser;
+ property OnAddProfile: TOnAddProfile read FOnAddProfile write FOnAddProfile;
+ property OnDeleteProfile: TOnDeleteProfile read FOnDeleteProfile write FOnDeleteProfile;
+ property OnChangePassword: TOnChangePassword read FOnChangePassword write FOnChangePassword;
+ property OnLogoff: TOnLogoff read FOnLogoff write FOnLogoff;
+ property OnAfterLogin: TNotifyEvent read FAfterLogin write FAfterLogin;
+ end;
+
+ TUCExtraRightsItem = class(TCollectionItem)
+ private
+ FFormName: String;
+ FCompName: String;
+ FCaption: String;
+ FGroupName: String;
+ procedure SetFormName(const Value: String);
+ procedure SetCompName(const Value: String);
+ procedure SetCaption(const Value: String);
+ procedure SetGroupName(const Value: String);
+ protected
+ function GetDisplayName: String; override;
+ public
+ published
+ property FormName: String read FFormName write SetFormName;
+ property CompName: String read FCompName write SetCompName;
+ property Caption: String read FCaption write SetCaption;
+ property GroupName: String read FGroupName write SetGroupName;
+ end;
+
+ TUCExtraRights = class(TCollection)
+ private
+ FUCBase: TUserControl;
+ function GetItem(Index: Integer): TUCExtraRightsItem;
+ procedure SetItem(Index: Integer; Value: TUCExtraRightsItem);
+ protected
+ function GetOwner: TPersistent; override;
+ public
+ constructor Create(UCBase: TUserControl);
+ function Add: TUCExtraRightsItem;
+ property Items[Index: Integer]: TUCExtraRightsItem read GetItem write SetItem; default;
+ end;
+
+ TUCVerificaMensagemThread = class(TThread)
+ private
+ procedure VerNovaMansagem;
+ public
+ AOwner: TComponent;
+ protected
+ procedure Execute; override;
+ end;
+
+ TUCExecuteThread = class(TThread)
+ private
+ procedure UCStart;
+ public
+ AOwner: TComponent;
+ protected
+ procedure Execute; override;
+ end;
+
+ TUCApplicationMessage = class(TComponent)
+ private
+ FActive: Boolean;
+ FReady: Boolean;
+ FInterval: Integer;
+ FUserControl: TUserControl;
+ FVerifThread: TUCVerificaMensagemThread;
+ FTableMessages: String;
+ procedure SetActive(const Value: Boolean);
+ procedure SetUserControl(const Value: TUserControl);
+ protected
+ procedure Loaded; override;
+ procedure Notification(AComponent: TComponent; AOperation: TOperation); override;
+ public
+ constructor Create(AOWner: TComponent); override;
+ destructor Destroy; override;
+ procedure ShowMessages(Modal: Boolean = True);
+ procedure SendAppMessage(ToUser: Integer; Subject, Msg: String);
+ procedure DeleteAppMessage(IdMsg: Integer);
+ procedure CheckMessages;
+ published
+ property Active: Boolean read FActive write SetActive;
+ property Interval: Integer read FInterval write FInterval;
+ property TableMessages: String read FTableMessages write FTableMessages;
+ property UserControl: TUserControl read FUserControl write SetUserControl;
+ end;
+
+ TUCComponentsVar = String;
+
+ TUCNotAllowed = (naInvisible, naDisabled);
+
+ TUCControls = class(TComponent)
+ private
+ FGroupName: String;
+ FComponents: TUCComponentsVar;
+ FUserControl: TUserControl;
+ FNotAllowed: TUCNotAllowed;
+ function GetAccessType: String;
+ function GetActiveForm: String;
+ procedure SetGroupName(const Value: String);
+ procedure SetUserControl(const Value: TUserControl);
+ protected
+ procedure Loaded; override;
+ procedure Notification(AComponent: TComponent; AOperation: TOperation); override;
+ public
+ destructor Destroy; override;
+ procedure ApplyRights;
+ procedure LockControls;
+ procedure ListComponents(Form: String; List: TStrings);
+ published
+ property AccessType: String read GetAccessType;
+ property ActiveForm: String read GetActiveForm;
+ property GroupName: String read FGroupName write SetGroupName;
+ property UserControl: TUserControl read FUserControl write SetUserControl;
+ property Components: TUCComponentsVar read FComponents write FComponents;
+ property NotAllowed: TUCNotAllowed read FNotAllowed write FNotAllowed default naInvisible;
+ end;
+
+ TUCUsersLogged = class(TPersistent)
+ //Cesar: 12/07/2005: classe que armazena os usuarios logados no sistema
+ private
+ FUserControl: TUserControl;
+ FAtive: Boolean;
+ fMultipleLogin: Boolean;
+ procedure AddCurrentUser;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ procedure DelCurrentUser;
+ procedure CriaTableUserLogado;
+ function UsuarioJaLogado(ID: Integer): Boolean;
+ published
+ property Active: Boolean read FAtive write FAtive default True;
+ property MultipleLogin: Boolean read fMultipleLogin write fMultipleLogin default True;
+ end;
+
+function Decrypt(const S: ansistring; Key: Word): ansistring;
+function Encrypt(const S: ansistring; Key: Word): ansistring;
+function MD5Sum(strValor: String): String;
+
+{ TODO -oLuiz -cUpgrade : Mudar o GetLoginName para a Unit principal }
+
+implementation
+
+{$R UCLock.res}
+
+uses
+ DBGrids,
+ Dialogs,
+ LoginWindow_U,
+ MsgRecForm_U,
+ MsgsForm_U,
+ pUCGeral,
+ TrocaSenha_U,
+ UserPermis_U;
+
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUSerControl'} {$ENDIF}
+
+{ TUserControl }
+
+constructor TUserControl.Create(AOwner: TComponent);
+begin
+ inherited;
+ FCurrentUser := TUCCurrentUser.Create(Self);
+ FControlRight := TUCControlRight.Create(Self);
+ FLogin := TUCLogin.Create(Self);
+ FLogControl := TUCLogControl.Create(Self);
+ FUser := TUCUser.Create(Self);
+ FUserProfile := TUCUserProfile.Create(Self);
+ FUserPasswordChange := TUCUserPasswordChange.Create(Self);
+ FUsersLogged := TUCUsersLogged.Create(Self);
+ FUsersLogoff := TUCUserLogoff.Create(Self);
+ FUserSettings := TUCUserSettings.Create(Self);
+ FNotAllowedItems := TUCNotAllowedItems.Create(Self);
+ FExtraRights := TUCExtraRights.Create(Self);
+ FTableUsers := TUCTableUsers.Create(Self);
+ FTableRights := TUCTableRights.Create(Self);
+ FTableUsersLogged := TUCTableUsersLogged.Create(Self);
+
+
+ if csDesigning in ComponentState then
+ begin
+ with TableUsers do
+ begin
+ if TableName = '' then
+ TableName := RetornaLingua(fLanguage, 'Const_TableUsers_TableName');
+ if FieldUserID = '' then
+ FieldUserID := RetornaLingua(fLanguage, 'Const_TableUsers_FieldUserID');
+ if FieldUserName = '' then
+ FieldUserName := RetornaLingua(fLanguage, 'Const_TableUsers_FieldUserName');
+ if FieldLogin = '' then
+ FieldLogin := RetornaLingua(fLanguage, 'Const_TableUsers_FieldLogin');
+ if FieldPassword = '' then
+ FieldPassword := RetornaLingua(fLanguage, 'Const_TableUsers_FieldPassword');
+ if FieldEmail = '' then
+ FieldEmail := RetornaLingua(fLanguage, 'Const_TableUsers_FieldEmail');
+ if FieldPrivileged = '' then
+ FieldPrivileged := RetornaLingua(fLanguage, 'Const_TableUsers_FieldPrivileged');
+ if FieldTypeRec = '' then
+ FieldTypeRec := RetornaLingua(fLanguage, 'Const_TableUsers_FieldTypeRec');
+ if FieldProfile = '' then
+ FieldProfile := RetornaLingua(fLanguage, 'Const_TableUsers_FieldProfile');
+ if FieldKey = '' then
+ FieldKey := RetornaLingua(fLanguage, 'Const_TableUsers_FieldKey');
+
+ if FieldDateExpired = '' then
+ FieldDateExpired := RetornaLingua(fLanguage, 'Const_TableUsers_FieldDateExpired'); {Vicente Barros Leonel}
+
+ if FieldUserExpired = '' then
+ FieldUserExpired := RetornaLingua(fLanguage, 'Const_TableUser_FieldUserExpired'); {Vicente Barros Leonel}
+
+ if FieldUserDaysSun = '' then
+ FieldUserDaysSun := RetornaLingua(fLanguage, 'Const_TableUser_FieldUserDaysSun'); { Vicente Barros leoenl }
+
+ if FieldUserInative = '' then
+ FieldUserInative := RetornaLingua(fLanguage, 'Const_TableUser_FieldUserInative'); { Vicente Barros leoenl }
+ end;
+
+ with TableRights do
+ begin
+ if TableName = '' then
+ TableName := RetornaLingua(fLanguage, 'Const_TableRights_TableName');
+ if FieldUserID = '' then
+ FieldUserID := RetornaLingua(fLanguage, 'Const_TableRights_FieldUserID');
+ if FieldModule = '' then
+ FieldModule := RetornaLingua(fLanguage, 'Const_TableRights_FieldModule');
+ if FieldComponentName = '' then
+ FieldComponentName := RetornaLingua(fLanguage, 'Const_TableRights_FieldComponentName');
+ if FieldFormName = '' then
+ FieldFormName := RetornaLingua(fLanguage, 'Const_TableRights_FieldFormName');
+ if FieldKey = '' then
+ FieldKey := RetornaLingua(fLanguage, 'Const_TableRights_FieldKey');
+ end;
+
+ with TableUsersLogged do
+ begin
+ if TableName = '' then
+ TableName := RetornaLingua(fLanguage, 'Const_TableUsersLogged_TableName');
+ if FieldLogonID = '' then
+ FieldLogonID := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldLogonID');
+ if FieldUserID = '' then
+ FieldUserID := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldUserID');
+ if FieldApplicationID = '' then
+ FieldApplicationID := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldApplicationID');
+ if FieldMachineName = '' then
+ FieldMachineName := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldMachineName');
+ if FieldData = '' then
+ FieldData := RetornaLingua(fLanguage, 'Const_TableUsersLogged_FieldData');
+ end;
+
+
+ if LogControl.TableLog = '' then
+ LogControl.TableLog := 'UCLog';
+ if ApplicationID = '' then
+ ApplicationID := 'ProjetoNovo';
+ if Login.InitialLogin.User = '' then
+ Login.InitialLogin.User := 'admin';
+ if Login.InitialLogin.Password = '' then
+ Login.InitialLogin.Password := '123mudar';
+ if Login.InitialLogin.Email = '' then
+ Login.InitialLogin.Email := 'usercontrol@usercontrol.net';
+
+ FLoginMode := lmActive;
+ FCriptografia := cPadrao;
+ FAutoStart := False;
+ FUserProfile.Active := True;
+ FLogControl.Active := True;
+ FUser.UsePrivilegedField := False;
+ FUser.ProtectAdministrator := True;
+ FUsersLogged.Active := True;
+ NotAllowedItems.MenuVisible := True;
+ NotAllowedItems.ActionVisible := True;
+ end
+ else
+ begin
+ FControlList := TList.Create;
+ FLoginMonitorList := TList.Create;
+ end;
+
+ UCSettings.IniSettings(UserSettings);
+end;
+
+procedure TUserControl.Loaded;
+var
+ Contador: Integer;
+begin
+ inherited;
+ if not (csDesigning in ComponentState) then
+ begin
+ if not Assigned(DataConnector) then
+ raise Exception.Create(RetornaLingua(fLanguage, 'MsgExceptConnector'));
+
+ if ApplicationID = '' then
+ raise Exception.Create(RetornaLingua(fLanguage, 'MsgExceptAppID'));
+
+ if ((not Assigned(ControlRight.ActionList)) and
+ (not Assigned(ControlRight.ActionManager)) and
+ (not Assigned(ControlRight.MainMenu)) and
+ (not Assigned(ControlRight.ActionMainMenuBar))) then
+ raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['ControlRight']));
+
+ for Contador := 0 to Pred(Owner.ComponentCount) do
+ if Owner.Components[Contador] is TUCSettings then
+ begin
+ Language := TUCSettings(Owner.Components[Contador]).Language;// torna a linguage do UCSETTINGS como padrão
+ FUserSettings.BancoDados := TUCSettings(Owner.Components[Contador]).BancoDados;
+ ApplySettings(TUCSettings(Owner.Components[Contador]));
+ end;
+
+ if Assigned(User.MenuItem) and (not Assigned(User.MenuItem.OnClick)) then
+ User.MenuItem.OnClick := ActionCadUser;
+
+ if Assigned(User.Action) and (not Assigned(User.Action.OnExecute)) then
+ User.Action.OnExecute := ActionCadUser;
+
+ if ((not Assigned(User.Action)) and (not Assigned(User.MenuItem))) then
+ raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['User']));
+
+ if Assigned(UserPasswordChange.MenuItem) and (not Assigned(UserPasswordChange.MenuItem.OnClick)) then
+ UserPasswordChange.MenuItem.OnClick := ActionTrocaSenha;
+
+ if Assigned(UserPasswordChange.Action) and (not Assigned(UserPasswordChange.Action.OnExecute)) then
+ UserPasswordChange.Action.OnExecute := ActionTrocaSenha;
+
+ { By Vicente Barros Leonel }
+ if Assigned(UsersLogoff.MenuItem) and (not Assigned(UsersLogoff.MenuItem.OnClick)) then
+ UsersLogoff.MenuItem.OnClick := ActionLogoff;
+
+ if Assigned(UsersLogoff.Action) and (not Assigned(UsersLogoff.Action.OnExecute)) then
+ UsersLogoff.Action.OnExecute := ActionLogoff;
+
+ if ((not Assigned(UserPasswordChange.Action)) and (not Assigned(UserPasswordChange.MenuItem))) then
+ raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['UserPasswordChange']));
+
+ if ((not Assigned(UsersLogoff.Action)) and (not Assigned(UsersLogoff.MenuItem))) then
+ raise Exception.Create(Format(RetornaLingua(fLanguage, 'MsgExceptPropriedade'), ['UsersLogoff']));
+
+ with TableUsers do
+ begin
+ if TableName = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable'));
+ if FieldUserID = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserID***');
+ if FieldUserName = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserName***');
+ if FieldLogin = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldLogin***');
+ if FieldPassword = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldPassword***');
+ if FieldEmail = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldEmail***');
+ if FieldPrivileged = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldPrivileged***');
+ if FieldTypeRec = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldTypeRec***');
+ if FieldKey = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldKey***');
+ if FieldProfile = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldProfile***');
+
+ if FieldDateExpired = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldDateExpired***');
+
+ if FieldUserExpired = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserExpired***');
+
+ if FieldUserDaysSun = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserDaysSun***');
+
+ if FieldUserInative = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptUsersTable') + #13 + #10 + 'FieldUserInative***');
+
+ end;
+
+ with TableRights do
+ begin
+ if TableName = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable'));
+ if FieldUserID = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldProfile***');
+ if FieldModule = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldModule***');
+ if FieldComponentName = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldComponentName***');
+ if FieldFormName = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldFormName***');
+ if FieldKey = '' then
+ Exception.Create(RetornaLingua(fLanguage, 'MsgExceptRightsTable') + #13 + #10 + 'FieldKey***');
+ end;
+
+ if Assigned(OnStartApplication) then
+ OnStartApplication(self);
+
+ //desviar para thread monitorando conexao ao banco qmd 30/01/2004
+ if FAutoStart then
+ begin
+ FThUCRun := TUCExecuteThread.Create(True);
+ FThUCRun.AOwner := Self;
+ FThUCRun.FreeOnTerminate := True;
+ FThUCRun.Resume;
+ end;
+ end;
+end;
+
+procedure TUserControl.ActionCadUser(Sender: TObject);
+begin
+ ShowNewConfig;
+end;
+
+procedure TUserControl.ActionEsqueceuSenha(Sender: TObject);
+var
+ FDataset: TDataset;
+begin
+ FDataset := DataConnector.UCGetSQLDataset('Select * from ' + TableUsers.TableName + ' Where ' +
+ TableUsers.FieldLogin + ' = ' + QuotedStr(TfrmLoginWindow(FFormLogin).EditUsuario.Text));
+ try
+ if not FDataset.IsEmpty then
+ { TODO -oLuiz -cUpgrade : Consertar o método EnviarEsqueceuSenha para usar a criptografia md5 }
+ MailUserControl.EnviaEsqueceuSenha(FDataset.FieldByName(TableUsers.FieldUserName).AsString,
+ FDataset.FieldByName(TableUsers.FieldLogin).AsString,
+ FDataset.FieldByName(TableUsers.FieldPassword).AsString,
+ FDataset.FieldByName(TableUsers.FieldEmail).AsString, '', EncryptKey)
+
+ else
+ MessageDlg(UserSettings.CommonMessages.InvalidLogin, mtWarning, [mbOK], 0);
+ finally
+ FDataset.Close;
+ FDataset.Free;
+ end;
+end;
+
+procedure TUserControl.ActionTrocaSenha(Sender: TObject);
+begin
+ if Assigned(OnCustomChangePasswordForm) then
+ OnCustomChangePasswordForm(Self, FFormTrocarSenha);
+
+ if FFormTrocarSenha = nil then
+ CriaFormTrocarSenha;
+
+ FFormTrocarSenha.ShowModal;
+ FreeAndNil(FFormTrocarSenha);
+end;
+
+function TUserControl.ExisteUsuario(Login: String): Boolean;
+var
+ SQLstmt: String;
+ DataSet: TDataSet;
+begin
+ SQLstmt := Format('SELECT %s.%s FROM %s WHERE %s.%s=%s',
+ [Self.TableUsers.TableName,
+ Self.TableUsers.FieldLogin,
+ Self.TableUsers.TableName,
+ Self.TableUsers.TableName,
+ Self.TableUsers.FieldLogin,
+ QuotedStr(Login)]);
+
+ DataSet := Self.DataConnector.UCGetSQLDataset(SQLstmt);
+ try
+ Result := (Dataset.RecordCount > 0);
+ finally
+ SysUtils.FreeAndNil(DataSet);
+ end;
+end;
+
+function TUserControl.GetLocalComputerName: String;
+var
+ Count: DWORD;
+ Buffer: String;
+begin
+ Count := MAX_COMPUTERNAME_LENGTH + 1;
+ SetLength(Buffer, Count);
+ if GetComputerName(PChar(Buffer), Count) then
+ SetLength(Buffer, StrLen(PChar(Buffer)))
+ else
+ Buffer := '';
+ Result := Buffer;
+end;
+
+function TUserControl.GetLocalUserName: String;
+var
+ Count: DWORD;
+ Buffer: String;
+begin
+ Count := 254;
+ SetLength(Buffer, Count);
+ if GetUserName(PChar(Buffer), Count) then
+ SetLength(Buffer, StrLen(PChar(Buffer)))
+ else
+ Buffer := '';
+ Result := Buffer;
+end;
+
+procedure TUserControl.CriaFormTrocarSenha;
+begin
+ FFormTrocarSenha := TTrocaSenha.Create(Self);
+ with Self.UserSettings.ChangePassword do
+ begin
+ TTrocaSenha(FFormTrocarSenha).fUsercontrol := Self;
+ TTrocaSenha(FFormTrocarSenha).Caption := WindowCaption;
+ TTrocaSenha(FFormTrocarSenha).lbDescricao.Caption := LabelDescription;
+ TTrocaSenha(FFormTrocarSenha).lbSenhaAtu.Caption := LabelCurrentPassword;
+ TTrocaSenha(FFormTrocarSenha).lbNovaSenha.Caption := LabelNewPassword;
+ TTrocaSenha(FFormTrocarSenha).lbConfirma.Caption := LabelConfirm;
+ TTrocaSenha(FFormTrocarSenha).btGrava.Caption := BtSave;
+ TTrocaSenha(FFormTrocarSenha).btCancel.Caption := BtCancel;
+ TTrocaSenha(FFormTrocarSenha).ForcarTroca := False; // Vicente Barros Leonel
+ end;
+ TTrocaSenha(FFormTrocarSenha).Position := Self.UserSettings.WindowsPosition; // Adicionado por Luiz Benevenuto
+
+ TTrocaSenha(FFormTrocarSenha).btGrava.OnClick := ActionTSBtGrava;
+ if CurrentUser.Password = '' then
+ TTrocaSenha(FFormTrocarSenha).EditAtu.Enabled := False;
+end;
+
+procedure TUserControl.ActionTSBtGrava(Sender: TObject);
+var
+ AuxPass: String;
+begin
+ { Pelo que eu analizei, a gravação da senha no Banco de Dados e feita criptografada
+ Qdo a criptografia e padrão, a funcao RegistraCurrentUser descriptografa a senha atual
+ agora quando criptografia e MD5SUM, devemos criptografar a senha atual vinda do formulario de
+ troca de senha para podemoscomparar com a senha atual da classe TUCCurrentUser
+ Modificação Feita por Vicente Barros Leonel
+ }
+ case Self.Criptografia of // por Vicente Barros Leonel
+ cPadrao: AuxPass := TTrocaSenha(FFormTrocarSenha).EditAtu.Text;
+ cMD5: AuxPass := MD5Sum(TTrocaSenha(FFormTrocarSenha).EditAtu.Text);
+ end;
+
+ if CurrentUser.Password <> AuxPass then //MD5Sum(TTrocaSenha(FFormTrocarSenha).EditAtu.Text) then Vicente Barros Leonel
+ begin
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidCurrentPassword, mtWarning, [mbOK], 0);
+ TTrocaSenha(FFormTrocarSenha).EditAtu.SetFocus;
+ Exit;
+ end;
+
+ if TTrocaSenha(FFormTrocarSenha).EditNova.Text <> TTrocaSenha(FFormTrocarSenha).EditConfirma.Text then
+ begin
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword, mtWarning, [mbOK], 0);
+ TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus;
+ Exit;
+ end;
+
+ case Self.Criptografia of // por Vicente Barros Leonel
+ cPadrao: AuxPass := TTrocaSenha(FFormTrocarSenha).EditNova.Text;
+ cMD5: AuxPass := MD5Sum(TTrocaSenha(FFormTrocarSenha).EditNova.Text);
+ end;
+
+ if AuxPass = CurrentUser.Password then
+ begin
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.NewEqualCurrent, mtWarning, [mbOK], 0);
+ TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus;
+ Exit;
+ end;
+
+ if (UserPasswordChange.ForcePassword) and (TTrocaSenha(FFormTrocarSenha).EditNova.Text = '') then
+ begin
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.PasswordRequired, mtWarning, [mbOK], 0);
+ TTrocaSenha(FFormTrocarSenha).EditNova.Text;
+ Exit;
+ end;
+
+ if Length(TTrocaSenha(FFormTrocarSenha).EditNova.Text) < UserPasswordChange.MinPasswordLength then
+ begin
+ MessageDlg(Format(UserSettings.CommonMessages.ChangePasswordError.MinPasswordLength, [UserPasswordChange.MinPasswordLength]), mtWarning, [mbOK], 0);
+ TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus;
+ Exit;
+ end;
+
+ if Pos(LowerCase(TTrocaSenha(FFormTrocarSenha).EditNova.Text), 'abcdeasdfqwerzxcv1234567890321654987teste' + LowerCase(CurrentUser.UserName) + LowerCase(CurrentUser.UserLogin)) > 0 then
+ begin
+ MessageDlg(UserSettings.CommonMessages.ChangePasswordError.InvalidNewPassword, mtWarning, [mbOK], 0);
+ TTrocaSenha(FFormTrocarSenha).EditNova.SetFocus;
+ Exit;
+ end;
+
+ if Assigned(OnChangePassword) then
+ OnChangePassword(Self, CurrentUser.UserID, CurrentUser.UserLogin, CurrentUser.Password, TTrocaSenha(FFormTrocarSenha).EditNova.Text);
+
+ ChangePassword(CurrentUser.UserID, TTrocaSenha(FFormTrocarSenha).EditNova.Text);
+
+ case Self.Criptografia of // Por Vicente Barros Leonel
+ cPadrao: CurrentUser.Password := TTrocaSenha(FFormTrocarSenha).EditNova.Text;
+ cMD5: CurrentUser.Password := MD5Sum(TTrocaSenha(FFormTrocarSenha).EditNova.Text);
+ end;
+
+
+ if CurrentUser.Password = '' then
+ MessageDlg(Format(UserSettings.CommonMessages.BlankPassword, [CurrentUser.UserLogin]), mtInformation, [mbOK], 0)
+ else
+ MessageDlg(UserSettings.CommonMessages.PasswordChanged, mtInformation, [mbOK], 0);
+
+ if TTrocaSenha(FFormTrocarSenha).ForcarTroca = True then
+ TTrocaSenha(FFormTrocarSenha).ForcarTroca := False; // Vicente Barros Leonel
+
+
+ if (Assigned(FMailUserControl)) and (FMailUserControl.SenhaTrocada.Ativo) then
+ with CurrentUser do
+ try
+ FMailUserControl.EnviaEmailSenhaTrocada(Username, CurrentUser.UserLogin, TTrocaSenha(FFormTrocarSenha).EditNova.Text, Email, '', EncryptKey);
+ except
+ on e: Exception do
+ Log(e.Message, 2);
+ end;
+
+
+ TTrocaSenha(FFormTrocarSenha).Close;
+end;
+
+procedure TUserControl.SetUserSettings(const Value: TUCUserSettings);
+begin
+ UserSettings := Value;
+end;
+
+procedure TUserControl.SetfrmLoginWindow(Form: TCustomForm);
+begin
+ with UserSettings.Login, Form as TfrmLoginWindow do
+ begin
+ Caption := WindowCaption;
+ LbUsuario.Caption := LabelUser;
+ LbSenha.Caption := LabelPassword;
+ btOK.Caption := UserSettings.Login.BtOk;
+ BtCancela.Caption := BtCancel;
+ if LeftImage <> nil then
+ ImgLeft.Picture.Assign(LeftImage);
+ if BottomImage <> nil then
+ ImgBottom.Picture.Assign(BottomImage);
+ if TopImage <> nil then
+ ImgTop.Picture.Assign(TopImage);
+
+ if Assigned(FMailUserControl) then
+ begin
+ lbEsqueci.Visible := FMailUserControl.EsqueceuSenha.Ativo;
+ lbEsqueci.Caption := FMailUserControl.EsqueceuSenha.LabelLoginForm;
+ end;
+
+ StatusBar.Visible := Login.FMaxLoginAttempts > 0; // by vicente barros leonel
+ StatusBar.Panels[1].Text := '0'; // by vicente barros leonel
+ StatusBar.Panels[3].Text := IntToStr(Login.FMaxLoginAttempts); // by vicente barros leonel
+ end;
+end;
+
+procedure TUserControl.Notification(AComponent: TComponent; AOperation: TOperation);
+begin
+ if (AOperation = opRemove) then
+ begin
+ if AComponent = User.MenuItem then
+ User.MenuItem := nil;
+ if AComponent = User.Action then
+ User.Action := nil;
+ if AComponent = UserPasswordChange.Action then
+ UserPasswordChange.Action := nil;
+ if AComponent = UserPasswordChange.MenuItem then
+ UserPasswordChange.MenuItem := nil;
+
+ { By Vicente Barros Leonel }
+ if AComponent = UsersLogoff.Action then
+ UsersLogoff.Action := nil;
+ if AComponent = UsersLogoff.MenuItem then
+ UsersLogoff.MenuItem := nil;
+
+
+ if AComponent = ControlRight.MainMenu then
+ ControlRight.MainMenu := nil;
+ if AComponent = ControlRight.ActionList then
+ ControlRight.ActionList := nil;
+ {.$IFDEF UCACTMANAGER}
+ if AComponent = ControlRight.ActionManager then
+ ControlRight.ActionManager := nil;
+ if AComponent = ControlRight.ActionMainMenuBar then
+ ControlRight.ActionMainMenuBar := nil;
+ {.$ENDIF}
+
+ if AComponent = FDataConnector then
+ begin
+ if CurrentUser.UserID <> 0 then
+ UsersLogged.DelCurrentUser;
+ FDataConnector := nil;
+ end;
+
+ if AComponent = FMailUserControl then
+ FMailUserControl := nil;
+
+ end;
+ inherited Notification(AComponent, AOperation);
+end;
+
+
+procedure TUserControl.ActionLogoff(Sender: TObject);
+begin
+ Self.Logoff;
+end;
+
+procedure TUserControl.Log(MSG: String; Level: Integer);
+begin
+ // Adicionado ao log a identificação da Aplicação
+ if not LogControl.Active then
+ Exit;
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL('INSERT INTO ' + LogControl.TableLog +
+ '(APPLICATIONID, IDUSER, MSG, DATA, NIVEL) VALUES ( ' +
+ QuotedStr(Self.ApplicationID) + ', ' +
+ IntToStr(CurrentUser.UserID) + ', ' +
+ QuotedStr(Copy(MSG, 1, 250)) + ', ' +
+ QuotedStr(FormatDateTime('YYYYMMDDhhmmss', now)) + ', ' +
+ IntToStr(Level) + ')');
+end;
+
+procedure TUserControl.RegistraCurrentUser(Dados: TDataset);
+var
+ SQLStmt: String;
+begin
+ with CurrentUser do
+ begin
+ UserID := Dados.FieldByName(TableUsers.FieldUserID).AsInteger;
+ UserName := Dados.FieldByName(TableUsers.FieldUserName).AsString;
+ UserLogin := Dados.FieldByName(TableUsers.FieldLogin).AsString;
+ DateExpiration := StrToDateDef(Dados.FieldByName(TableUsers.FieldDateExpired).AsString, Now);
+ UserNotExpired := Dados.FieldByName(TableUsers.FieldUserExpired).AsInteger = 1; //by vicente barros leonel
+ UserDaysExpired := Dados.FieldByName(TableUsers.FieldUserDaysSun).AsInteger;
+
+ case Self.Criptografia of
+ cPadrao: Password := Decrypt(Dados.FieldByName(TableUsers.FieldPassword).AsString, EncryptKey);
+ cMD5: Password := Dados.FieldByName(TableUsers.FieldPassword).AsString;
+ end;
+
+ Email := Dados.FieldByName(TableUsers.FieldEmail).AsString;
+ Privileged := StrToBool(Dados.FieldByName(TableUsers.FieldPrivileged).AsString);
+ Profile := Dados.FieldByName(TableUsers.FieldProfile).AsInteger;
+
+ SQLStmt := Format('SELECT %s AS ObjName,' +
+ ' %s AS UCKey,' +
+ ' %s AS UserID' +
+ ' FROM %s' +
+ ' WHERE %s = %s AND %s = %s',
+ [TableRights.FieldComponentName,
+ TableRights.FieldKey,
+ TableRights.FieldUserID,
+ TableRights.TableName,
+ TableRights.FieldUserID,
+ IntToStr(UserID),
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]);
+
+ PerfilUsuario := DataConnector.UCGetSQLDataset(SQLStmt);
+
+ // Aplica Permissoes do Perfil do usuario
+ if CurrentUser.Profile > 0 then
+ begin
+ SQLStmt := Format('SELECT %s AS ObjName,' +
+ ' %s AS UCKey,' +
+ ' %s AS UserID' +
+ ' FROM %s' +
+ ' WHERE %s = %s AND %s = %s',
+ [TableRights.FieldComponentName,
+ TableRights.FieldKey,
+ TableRights.FieldUserID,
+ TableRights.TableName,
+ TableRights.FieldUserID,
+ IntToStr(CurrentUser.Profile),
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]);
+
+ PerfilGrupo := DataConnector.UCGetSQLDataset(SQLStmt);
+ end
+ else
+ PerfilGrupo := nil;
+
+ if Assigned(OnLoginSucess) then
+ OnLoginSucess(Self, UserID, UserLogin, UserName, Password, EMail, Privileged);
+ end;
+
+ //Cesar: 13/07/2005
+ if (CurrentUser.UserID <> 0) then
+ UsersLogged.AddCurrentUser;
+
+ ApplyRightsUCControlMonitor;
+ NotificationLoginMonitor;
+
+ if ((FLogin.fDateExpireActive = True) and (Date > CurrentUser.DateExpiration) and (CurrentUser.UserNotExpired = False)) then
+ begin { By Vicente Barros Leonel }
+ MessageDlg(UserSettings.CommonMessages.PasswordExpired, mtInformation, [mbOK], 0);
+
+ if FFormTrocarSenha = nil then
+ CriaFormTrocarSenha;
+ TTrocaSenha(FFormTrocarSenha).ForcarTroca := True;
+ FFormTrocarSenha.ShowModal;
+ FreeAndNil(FFormTrocarSenha);
+ end;
+end;
+
+procedure TUserControl.TryAutoLogon;
+begin
+ if VerificaLogin(Login.AutoLogin.User, Login.AutoLogin.Password) <> 0 then
+ begin
+ if Login.AutoLogin.MessageOnError then
+ MessageDlg(UserSettings.CommonMessages.AutoLogonError, mtWarning, [mbOK], 0);
+ ShowLogin;
+ end;
+end;
+
+function TUserControl.VerificaLogin(User, Password: String): Integer;//Boolean;
+var
+ Senha: String;
+ Key: String;
+ SQLStmt: String;
+ Dataset: TDataset;
+ VerifKey: String;
+begin
+ case Self.Criptografia of
+ cPadrao: Senha := TableUsers.FieldPassword + ' = ' + QuotedStr(Encrypt(Password, EncryptKey));
+ cMD5: Senha := TableUsers.FieldPassword + ' = ' + QuotedStr(MD5Sum(Password));
+ end;
+
+ SQLStmt := 'SELECT * FROM ' + TableUsers.TableName + ' WHERE ' +
+ TableUsers.FieldLogin + ' = ' + QuotedStr(User) + ' AND ' + Senha;
+
+ Dataset := DataConnector.UCGetSQLDataset(SQLStmt);
+ with Dataset do
+ try
+ if not IsEmpty then
+ begin
+ case Self.Criptografia of
+ cPadrao:
+ begin
+ Key := Decrypt(Dataset.FieldByName(TableUsers.FieldKey).AsString, EncryptKey);
+ VerifKey := Dataset.FieldByName(TableUsers.FieldUserID).AsString +
+ Dataset.FieldByName(TableUsers.FieldLogin).AsString +
+ Decrypt(Dataset.FieldByName(TableUsers.FieldPassword).AsString, EncryptKey);
+ end;
+ cMD5:
+ begin
+ Key := Dataset.FieldByName(TableUsers.FieldKey).AsString;
+ VerifKey := MD5Sum(Dataset.FieldByName(TableUsers.FieldUserID).AsString +
+ Dataset.FieldByName(TableUsers.FieldLogin).AsString +
+ Dataset.FieldByName(TableUsers.FieldPassword).AsString);
+ end;
+ end;
+ if Key <> VerifKey then
+ begin
+ Result := 1;
+ if Assigned(OnLoginError) then
+ OnLoginError(Self, User, Password);
+ end
+ else
+ begin
+ if DataSet.FieldByName(TableUsers.FieldUserInative).AsInteger = 0 then
+ begin
+
+ if ((fUsersLogged.Active = True) and (fUsersLogged.MultipleLogin = False)) then
+ begin
+ //verifica se o usuário esta logado
+ if fUsersLogged.UsuarioJaLogado(Dataset.FieldByName(TableUsers.FieldUserID).AsInteger) = True then
+ begin
+ MessageDlg('Atenção: Seu usuário encontra-se logado em outra estação, verifique.', mtInformation, [mbOK], 0);
+ RegistraCurrentuser(Dataset);
+ Result := 0;
+ //Aqui deve-se colocar uma mensagem para derrubar a outra conexão
+ //Pensando ainda como fazer :)
+ end
+ else
+ begin
+ RegistraCurrentuser(Dataset);
+ Result := 0;
+ end;
+ end
+ else
+ begin
+ RegistraCurrentuser(Dataset); {Para voltar o codigo anterior, basta apagar e colocar esta duas linhas :) }
+ Result := 0;
+ end;
+
+ end
+ else
+ Result := 2;
+ end;
+ end
+ else
+ begin
+ Result := 1;
+ if Assigned(OnLoginError) then
+ OnLoginError(Self, User, Password);
+ end;
+ finally
+ Close;
+ Free;
+ end;
+end;
+
+procedure TUserControl.Logoff;
+begin
+ if Assigned(onLogoff) then
+ onLogoff(Self, CurrentUser.UserID);
+
+ LockControlsUCControlMonitor;
+ UsersLogged.DelCurrentUser;
+ CurrentUser.UserID := 0;
+ if LoginMode = lmActive then
+ ShowLogin;
+ ApplyRights;
+end;
+
+function TUserControl.AddUser(Login, Password, Name, Mail: String; Profile, UserExpired, DaysExpired: Integer; PrivUser: Boolean): Integer;
+var
+ Key: String;
+ SQLStmt: String;
+ Senha: String;
+begin
+ case Self.Login.CharCasePass of
+ ecNormal: ;
+ ecUpperCase: Password := UpperCase(Password);
+ ecLowerCase: Password := LowerCase(Password);
+ end;
+
+ case Self.Login.CharCaseUser of
+ ecNormal: ;
+ ecUpperCase: Login := UpperCase(Login);
+ ecLowerCase: Login := LowerCase(Login);
+ end;
+
+ with DataConnector.UCGetSQLDataset('Select Max(' + TableUsers.FieldUserID + ') as IdUser from ' + TableUsers.TableName) do
+ begin
+ Result := StrToIntDef(FieldByName('idUser').AsString, 0) + 1;
+ Close;
+ Free;
+ end;
+
+ case Self.Criptografia of
+ cPadrao:
+ begin
+ Key := Encrypt(IntToStr(Result) + Login + Password, EncryptKey);
+ Senha := Encrypt(Password, EncryptKey);
+ end;
+ cMD5:
+ begin
+ Key := MD5Sum(IntToStr(Result) + Login + MD5Sum(Password));
+ Senha := MD5Sum(Password);
+ end;
+ end;
+
+ with TableUsers do
+ begin
+ SQLStmt := Format('INSERT INTO %s( %s, %s, %s, %s, %s, %s, %s, %s, %s , %s , %s , %s , %s ) VALUES(%d, %s, %s, %s, %s, %s, %d, %s, %s , %s , %d , %d , %s )',
+ [TableName,
+ FieldUserID,
+ FieldUserName,
+ FieldLogin,
+ FieldPassword,
+ FieldEmail,
+ FieldPrivileged,
+ FieldProfile,
+ FieldTypeRec,
+ FieldKey,
+ FieldDateExpired, { By Vicente Barros Leonel }
+ FieldUserExpired,
+ FieldUserDaysSun,
+ FieldUserInative,
+ Result,
+ QuotedStr(Name),
+ QuotedStr(Login),
+ QuotedStr(Senha),
+ QuotedStr(Mail),
+ BoolToStr(PrivUser),
+ Profile,
+ QuotedStr('U'),
+ QuotedStr(Key),
+ QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FLogin.fDaysOfSunExpired)), {By vicente Barros Leonel }
+ UserExpired,
+ DaysExpired, '0']); {By vicente Barros Leonel }
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+ end;
+
+ if Assigned(OnAddUser) then
+ OnAddUser(Self, Login, Password, Name, Mail, Profile, Privuser);
+end;
+
+
+procedure TUserControl.ChangePassword(IDUser: Integer; NewPassword: String);
+var
+ Login: String;
+ Senha: String;
+ Key: String;
+ SQLStmt: String;
+begin
+ inherited;
+
+ case Self.Login.CharCasePass of
+ ecNormal: ;
+ ecUpperCase: NewPassword := UpperCase(NewPassword);
+ ecLowerCase: NewPassword := LowerCase(NewPassword);
+ end;
+
+ SQLStmt := 'Select ' + TableUsers.FieldLogin + ' as login, ' +
+ TableUsers.FieldPassword + ' as senha from ' + TableUsers.TableName + ' ' +
+ 'where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser);
+
+ with DataConnector.UCGetSQLDataset(SQLStmt) do
+ begin
+ Login := FieldByName('Login').AsString;
+ case Self.Criptografia of
+ cPadrao:
+ begin
+ Key := Encrypt(IntToStr(IDUser) + Login + NewPassword, EncryptKey);
+ Senha := Decrypt(FieldByName('Senha').AsString, EncryptKey);
+ end;
+ cMD5:
+ begin
+ Key := MD5Sum(IntToStr(IDUser) + Login + MD5Sum(NewPassword));
+ Senha := FieldByName('Senha').AsString;
+ end;
+ end;
+
+ Close;
+ Free;
+ end;
+
+ case Self.Criptografia of // Por Vicente Barros Leonel
+ cPadrao:
+ SQLStmt := 'Update ' + TableUsers.TableName +
+ ' Set ' + TableUsers.FieldPassword + ' = ' + QuotedStr(Encrypt(
+ NewPassword, EncryptKey)) +
+ ', ' + TableUsers.FieldKey + ' = ' + QuotedStr(Key) +
+ ', ' + TableUsers.FieldDateExpired + ' = ' +
+ QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FCurrentUser.UserDaysExpired)) + // by vicente barros leonel
+ ' Where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser);
+
+ cMD5: SQLStmt := 'Update ' + TableUsers.TableName +
+ ' Set ' + TableUsers.FieldPassword + ' = ' + QuotedStr(MD5Sum(NewPassword)) +
+ ', ' + TableUsers.FieldKey + ' = ' + QuotedStr(Key) +
+ ', ' + TableUsers.FieldDateExpired + ' = ' +
+ QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FCurrentUser.UserDaysExpired)) + // by vicente barros leonel
+ ' Where ' + TableUsers.FieldUserID + ' = ' + IntToStr(IdUser);
+ end;
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+
+ if Assigned(onChangePassword) then
+ OnChangePassword(Self, IdUser, Login, Senha, NewPassword);
+end;
+
+procedure TUserControl.ChangeUser(IDUser: Integer; Login, Name, Mail: String; Profile, UserExpired, UserDaysSun, Status: Integer; PrivUser: Boolean);
+var
+ Key: String;
+ Password: String;
+ SQLStmt: String;
+begin
+ SQLStmt := 'SELECT ' + TableUsers.FieldPassword +
+ ' AS SENHA FROM ' + TableUsers.TableName + ' WHERE ' +
+ TableUsers.FieldUserID + ' = ' + IntToStr(IdUser);
+
+ with DataConnector.UCGetSQLDataset(SQLStmt) do
+ begin
+ case Self.Criptografia of
+ cPadrao:
+ begin
+ Password := Decrypt(FieldByName('Senha').AsString, EncryptKey);
+ Key := Encrypt(IntToStr(IDUser) + Login + Password, EncryptKey);
+ end;
+ cMD5:
+ begin
+ Password := FieldByName('Senha').AsString;
+ Key := MD5Sum(IntToStr(IDUser) + Login + Password);
+ end;
+ end;
+ Close;
+ Free;
+ end;
+
+ with TableUsers do
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL('Update ' + TableName + ' Set ' +
+ FieldUserName + ' = ' + QuotedStr(Name) + ', ' +
+ FieldLogin + ' = ' + QuotedStr(Login) + ', ' +
+ FieldEmail + ' = ' + QuotedStr(Mail) + ', ' +
+ FieldPrivileged + ' = ' + BooltoStr(PrivUser) + ', ' +
+ FieldProfile + ' = ' + IntToStr(Profile) + ', ' +
+ FieldKey + ' = ' + QuotedStr(Key) + ', ' +
+ FieldUserExpired + ' = ' + IntToStr(UserExpired) + ' , ' + // vicente barros leonel
+ FieldUserDaysSun + ' = ' + IntToStr(UserDaysSun) + ' , ' +
+ FieldUSerInative + ' = ' + IntToStr(Status) +
+ ' where ' + FieldUserID + ' = ' + IntToStr(IdUser));
+ if Assigned(OnChangeUser) then
+ OnChangeUser(Self, IdUser, Login, Name, Mail, Profile, PrivUser);
+end;
+
+procedure TUserControl.CriaTabelaMsgs(const TableName: String);
+begin
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL('CREATE TABLE ' + TableName + ' ( ' +
+ 'IdMsg ' + UserSettings.Type_Int + ' , ' +
+ 'UsrFrom ' + UserSettings.Type_Int + ' , ' +
+ 'UsrTo ' + UserSettings.Type_Int + ' , ' +
+ 'Subject ' + UserSettings.Type_VarChar + '(50),' +
+ 'Msg ' + UserSettings.Type_Varchar + '(255),' +
+ 'DtSend ' + UserSettings.Type_Varchar + '(12),' +
+ 'DtReceive ' + UserSettings.Type_Varchar + '(12) )');
+end;
+
+destructor TUserControl.Destroy;
+begin
+ if not (csDesigning in ComponentState) then
+ fUsersLogged.DelCurrentUser;
+
+ FCurrentUser.Free;
+ FControlRight.Free;
+ FLogin.Free;
+ FLogControl.Free;
+ FUser.Free;
+ FUserProfile.Free;
+ FUserPasswordChange.Free;
+ FUsersLogoff.Free;
+ FUsersLogged.Free;
+ FUserSettings.Free;
+ FNotAllowedItems.Free;
+ FExtraRights.Free;
+ FTableUsers.Free;
+ FTableRights.Free;
+ FTableUsersLogged.Free;
+
+ if Assigned(FControlList) then
+ FControlList.Free;
+
+ if Assigned(FLoginMonitorList) then
+ FLoginMonitorList.Free;
+
+ inherited Destroy;
+end;
+
+procedure TUserControl.SetExtraRights(Value: TUCExtraRights);
+begin
+
+end;
+
+procedure TUserControl.HideField(Sender: TField; var Text: String; DisplayText: Boolean);
+begin
+ Text := '(Campo Bloqueado)';
+end;
+
+procedure TUserControl.StartLogin;
+begin
+ CurrentUser.UserID := 0;
+ ShowLogin;
+ ApplyRights;
+end;
+
+procedure TUserControl.Execute;
+begin
+ if Assigned(FThUCRun) then
+ FThUCRun.Terminate;
+ try
+ if not DataConnector.UCFindTable(FTableRights.TableName) then
+ CriaTabelaRights;
+
+ if not DataConnector.UCFindTable(FTableRights.TableName + 'EX') then
+ CriaTabelaRights(True); //extra rights table
+
+ if not DataConnector.UCFindTable(TableUsersLogged.TableName) then
+ UsersLogged.CriaTableUserLogado;
+
+ if LogControl.Active then
+ if not DataConnector.UCFindTable(LogControl.TableLog) then
+ CriaTabelaLog;
+
+ CriaTabelaUsuarios(DataConnector.UCFindTable(FTableUsers.TableName));
+
+ //Atualizador de Versoes By vicente barros leonel
+ AtualizarVersao;
+
+
+ // testa campo KEY qmd 28-02-2005
+ if FCheckValidationKey then
+ DoCheckValidationField;
+
+ finally
+ if LoginMode = lmActive then
+ if not Login.AutoLogin.Active then
+ ShowLogin
+ else
+ TryAutoLogon;
+ ApplyRights;
+ end;
+end;
+
+procedure TUserControl.AtualizarVersao; // by vicente barros leonel
+var
+ Sql: String;
+ DataSet: TDataSet;
+begin
+ { Procura o campo FieldUserDaysSun na tabela de usuarios se o mesmo não existi cria }
+ try
+ Sql := Format('select * from %s', [FTableUsers.TableName]);
+ DataSet := DataConnector.UCGetSQLDataset(SQL);
+
+ if DataSet.FindField(FTableUsers.FieldDateExpired) = nil then
+ begin
+ Sql := Format('alter table %s add %s %s(10)',
+ [FTableUsers.TableName,
+ FTableUsers.FieldDateExpired,
+ UserSettings.Type_Char]);
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ Sql := Format('update %s set %s = %s where %s = ''U''',
+ [FTableUsers.TableName,
+ FTableUsers.FieldDateExpired,
+ QuotedStr(FormatDateTime('dd/mm/yyyy', Date + FLogin.fDaysOfSunExpired)),
+ FTableUsers.FieldTypeRec]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ end;
+
+ if DataSet.FindField(FTableUsers.FieldUserExpired) = nil then
+ begin
+ Sql := Format('alter table %s add %s %s',
+ [FTableUsers.TableName,
+ FTableUsers.FieldUserExpired,
+ UserSettings.Type_Int]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ Sql := Format('update %s set %s = 1 where %s = ''U''',
+ [FTableUsers.TableName,
+ FTableUsers.FieldUserExpired,
+ FTableUsers.FieldTypeRec]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ end;
+
+ if DataSet.FindField(FTableUsers.FieldUserDaysSun) = nil then
+ begin // Cria campo setado no FieldUserDaysSun na tabela de usuarios
+ Sql := Format('alter table %s add %s %s',
+ [FTableUsers.TableName,
+ FTableUsers.FieldUserDaysSun,
+ UserSettings.Type_Int]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ Sql := Format('update %s set %s = 30 where %s = ''U''',
+ [FTableUsers.TableName,
+ FTableUsers.FieldUserDaysSun,
+ FTableUsers.FieldTypeRec]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ end;
+
+
+ if DataSet.FindField(FTableUsers.FieldUserInative) = nil then
+ begin // Cria campo setado no FieldUserInative na tabela de usuarios
+ Sql := Format('alter table %s add %s %s',
+ [FTableUsers.TableName,
+ FTableUsers.FieldUserInative,
+ UserSettings.Type_Int]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+
+ Sql := Format('update %s set %s = 0 where %s = ''U''',
+ [FTableUsers.TableName,
+ FTableUsers.FieldUserInative,
+ FTableUsers.FieldTypeRec]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Sql);
+ end;
+
+ finally
+ FreeAndNil(DataSet);
+ end;
+
+end;
+
+procedure TUserControl.DoCheckValidationField;
+var
+ TempDS: TDataset;
+ Key: String;
+ Login: String;
+ Senha: String;
+ UserID: Integer;
+begin
+ //verifica tabela de usuarios
+ TempDS := DataConnector.UCGetSQLDataset('SELECT * FROM ' + TableUsers.TableName);
+
+ if TempDS.FindField(TableUsers.FieldKey) = nil then
+ begin
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL('ALTER TABLE ' + TableUsers.TableName + ' ADD ' + TableUsers.FieldKey + ' ' + UserSettings.Type_VarChar + ' (255)');
+ TempDS.First;
+ with TempDS do
+ while not EOF do
+ begin
+ UserID := TempDS.FieldByName(TableUsers.FieldUserID).AsInteger;
+ Login := TempDS.FieldByName(TableUsers.FieldLogin).AsString;
+ case Self.Criptografia of
+ cPadrao:
+ begin
+ Senha := Decrypt(TempDS.FieldByName(TableUsers.FieldPassword).AsString, EncryptKey);
+ Key := Encrypt(IntToStr(UserID) + Login + Senha, EncryptKey);
+ end;
+ cMD5:
+ begin
+ Senha := TempDS.FieldByName(TableUsers.FieldPassword).AsString;
+ Key := MD5Sum(IntToStr(UserID) + Login + Senha);
+ end;
+ end;
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s WHERE %s = %d',
+ [TableUsers.TableName,
+ TableUsers.FieldKey,
+ QuotedStr(Key),
+ TableUsers.FieldUserID,
+ TempDS.FieldByName(TableUsers.FieldUserID).AsInteger]));
+ Next;
+ end;
+ end;
+
+ TempDS.Close;
+ FreeAndNil(TempDS);
+
+ //verifica tabela de permissoes
+ TempDS := DataConnector.UCGetSQLDataset('SELECT * FROM ' + TableRights.TableName);
+
+ if TempDS.FindField(TableRights.FieldKey) = nil then
+ begin
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL('ALTER TABLE ' + TableRights.TableName + ' ADD ' + TableUsers.FieldKey + ' ' + UserSettings.Type_VarChar + ' (255)');
+ TempDS.First;
+ with TempDS do
+ while not EOF do
+ begin
+ UserID := TempDS.FieldByName(TableRights.FieldUserID).AsInteger;
+ Login := TempDS.FieldByName(TableRights.FieldComponentName).AsString;
+ case Self.Criptografia of
+ cPadrao: Key := Encrypt(IntToStr(UserID) + Login, EncryptKey);
+ cMD5: Key := MD5Sum(IntToStr(UserID) + Login);
+ end;
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s where %s = %d and %s = %s and %s = %s',
+ [TableRights.TableName,
+ TableRights.FieldKey,
+ QuotedStr(Key),
+ TableRights.FieldUserID,
+ TempDS.FieldByName(TableRights.FieldUserID).AsInteger,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID),
+ TableRights.FieldComponentName,
+ QuotedStr(Login)]));
+ Next;
+ end;
+ end;
+ TempDS.Close;
+ FreeAndNil(TempDS);
+
+ //verifica tabela de permissoes extendidas
+ TempDS := DataConnector.UCGetSQLDataset('SELECT * FROM ' + TableRights.TableName + 'EX');
+ if TempDS.FindField(TableRights.FieldKey) = nil then
+ begin
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL('ALTER TABLE ' + TableRights.TableName + 'EX ADD ' +
+ TableUsers.FieldKey + '' + UserSettings.Type_VarChar + ' (255)');
+ TempDS.First;
+ with TempDS do
+ while not EOF do
+ begin
+ UserID := TempDS.FieldByName(TableRights.FieldUserID).AsInteger;
+ Login := TempDS.FieldByName(TableRights.FieldComponentName).AsString; //componentname
+ Senha := TempDS.FieldByName(TableRights.FieldFormName).AsString; // formname
+ case Self.Criptografia of
+ cPadrao: Key := Encrypt(IntToStr(UserID) + Login, EncryptKey);
+ cMD5: Key := MD5Sum(IntToStr(UserID) + Login);
+ end;
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(Format('UPDATE %s SET %s = %s' +
+ ' WHERE %s = %d AND' +
+ ' %s = %s AND %s = %s AND' +
+ ' %s = %s',
+ [TableRights.TableName + 'EX',
+ TableRights.FieldKey,
+ QuotedStr(Key),
+ TableRights.FieldUserID,
+ TempDS.FieldByName(TableRights.FieldUserID).AsInteger,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID),
+ TableRights.FieldComponentName,
+ QuotedStr(Login), // componente name
+ TableRights.FieldFormName,
+ QuotedStr(Senha)])); // formname
+ Next;
+ end;
+ end;
+ TempDS.Close;
+ FreeAndNil(TempDS);
+end;
+
+procedure TUserControl.ShowChangePassword;
+begin
+ ActionTrocaSenha(self);
+end;
+
+procedure TUserControl.ShowNewConfig;
+begin
+ FFormGeral := TFormUserPerf.Create(Self);
+ with TFormUserPerf(FFormGeral) do
+ begin
+ Position := UserSettings.WindowsPosition;
+ fUserControl := Self;
+ ShowModal;
+ end;
+ FreeAndNil(FFormGeral);
+end;
+
+procedure TUserControl.AddUCControlMonitor(UCControl: TUCControls);
+begin
+ FControlList.Add(UCControl);
+end;
+
+procedure TUserControl.ApplyRightsUCControlMonitor;
+var
+ Contador: Integer;
+begin
+ for Contador := 0 to Pred(FControlList.Count) do
+ TUCControls(FControlList.Items[Contador]).ApplyRights;
+end;
+
+procedure TUserControl.DeleteUCControlMonitor(UCControl: TUCControls);
+var
+ Contador: Integer;
+ SLControls: TStringList;
+begin
+ if not Assigned(FControlList) then
+ Exit;
+ SLControls := TStringList.Create;
+ for Contador := 0 to Pred(FControlList.Count) do
+ if TUCControls(FControlList.Items[Contador]) = UCControl then
+ SLControls.Add(IntToStr(Contador));
+
+ for Contador := 0 to Pred(SLControls.Count) do
+ FControlList.Delete(StrToInt(SLControls[Contador]));
+
+ FreeAndNil(SLControls);
+end;
+
+procedure TUserControl.LockControlsUCControlMonitor;
+var
+ Contador: Integer;
+begin
+ for Contador := 0 to Pred(FControlList.Count) do
+ TUCControls(FControlList.Items[Contador]).LockControls;
+end;
+
+procedure TUserControl.SetDataConnector(const Value: TUCDataConnector);
+begin
+ FDataConnector := Value;
+ if Assigned(Value) then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUserControl.AddLoginMonitor(UCAppMessage: TUCApplicationMessage);
+begin
+ FLoginMonitorList.Add(UCAppMessage);
+end;
+
+procedure TUserControl.DeleteLoginMonitor(UCAppMessage: TUCApplicationMessage);
+var
+ Contador: Integer;
+ SLControls: TStringList;
+begin
+ SLControls := TStringList.Create;
+ if Assigned(FLoginMonitorList) then
+ for Contador := 0 to Pred(FLoginMonitorList.Count) do
+ if TUCApplicationMessage(FLoginMonitorList.Items[Contador]) = UCAppMessage then
+ SLControls.Add(IntToStr(Contador));
+ if assigned(SLControls) then
+ for Contador := 0 to Pred(SLControls.Count) do
+ FLoginMonitorList.Delete(StrToInt(SLControls[Contador]));
+ SysUtils.FreeAndNil(SLControls);
+end;
+
+procedure TUserControl.NotificationLoginMonitor;
+var
+ Contador: Integer;
+begin
+ for Contador := 0 to Pred(FLoginMonitorList.Count) do
+ TUCApplicationMessage(FLoginMonitorList.Items[Contador]).CheckMessages;
+end;
+
+procedure TUserControl.ShowLogin;
+begin
+ FRetry := 0;
+ if Assigned(onCustomLoginForm) then
+ OnCustomLoginForm(Self, FFormLogin);
+ if FFormLogin = nil then
+ begin
+ FFormLogin := TfrmLoginWindow.Create(self);
+ with FFormLogin as TfrmLoginWindow do
+ begin
+ SetfrmLoginWindow(TfrmLoginWindow(FFormLogin));
+ FUserControl := Self;
+ btOK.onClick := ActionOKLogin;
+ onCloseQuery := Testafecha;
+ Position := Self.UserSettings.WindowsPosition;
+ lbEsqueci.OnClick := ActionEsqueceuSenha;
+ end;
+ end;
+ FFormLogin.ShowModal;
+ FreeAndNil(FFormLogin);
+end;
+
+procedure TUserControl.ActionOKLogin(Sender: TObject);
+var
+ TempUser: String;
+ TempPassword: String;
+ retorno: Integer;
+begin
+ TempUser := TfrmLoginWindow(FFormLogin).EditUsuario.Text;
+ TempPassword := TfrmLoginWindow(FFormLogin).EditSenha.Text;
+
+ if Assigned(OnLogin) then
+ Onlogin(Self, TempUser, TempPassword);
+ retorno := VerificaLogin(TempUser, TempPassword);
+ if retorno = 0 then
+ TfrmLoginWindow(FFormLogin).Close
+ else
+ begin
+ if Retorno = 1 then
+ MessageDlg(UserSettings.CommonMessages.InvalidLogin, mtWarning, [mbOK], 0)
+ else if retorno = 2 then
+ MessageDlg(UserSettings.CommonMessages.InactiveLogin, mtWarning, [mbOK], 0);
+
+ Inc(FRetry);
+ if TfrmLoginWindow(FFormLogin).StatusBar.Visible then
+ TfrmLoginWindow(FFormLogin).StatusBar.Panels[1].Text := IntToStr(FRetry);
+
+ if (Login.MaxLoginAttempts > 0) and (FRetry = Login.MaxLoginAttempts) then
+ begin
+ MessageDlg(Format(UserSettings.CommonMessages.MaxLoginAttemptsError, [Login.MaxLoginAttempts]), mtError, [mbOK], 0);
+ Application.Terminate;
+ end;
+ end;
+end;
+
+procedure TUserControl.TestaFecha(Sender: TObject; var CanClose: Boolean);
+begin
+ CanClose := (CurrentUser.UserID > 0);
+end;
+
+procedure TUserControl.ApplyRights;
+begin
+ if Self.CurrentUser.UserID <> 0 then
+ begin
+ ApplyRightsObj(Self.CurrentUser.PerfilUsuario);
+
+ // Aplica Permissoes do Perfil do usuario
+ if CurrentUser.Profile > 0 then
+ ApplyRightsObj(Self.CurrentUser.PerfilGrupo, True);
+
+ if Assigned(FAfterLogin) then
+ FAfterLogin(Self);
+ end;
+end;
+
+procedure TUserControl.ApplyRightsObj(ADataset: TDataset; FProfile: Boolean = False);
+var
+ Contador: Integer;
+ Encontrado: Boolean;
+ KeyField: String;
+ Temp: String;
+ ObjetoAction: TObject;
+ OwnerMenu: TComponent;
+begin
+ //Permissao de Menus QMD
+ Encontrado := False;
+
+ if ADataset.State = dsInactive then
+ ADataset.Open;
+
+ if Assigned(ControlRight.MainMenu) then
+ begin
+ OwnerMenu := ControlRight.MainMenu.Owner;
+ for Contador := 0 to Pred(OwnerMenu.ComponentCount) do
+ if (OwnerMenu.Components[Contador].ClassType = TMenuItem) and (TMenuItem(OwnerMenu.Components[Contador]).GetParentMenu = ControlRight.MainMenu) then
+ begin
+ if not FProfile then
+ begin
+ Encontrado := ADataset.Locate('ObjName', OwnerMenu.Components[Contador].Name, []);
+ KeyField := ADataset.FindField('UCKey').AsString;
+ //verifica key
+ if Encontrado then
+ case Self.Criptografia of
+ cPadrao:
+ Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey));
+ cMD5:
+ Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString));
+ end;
+ TMenuItem(OwnerMenu.Components[Contador]).Enabled := Encontrado;
+ if not Encontrado then
+ TMenuItem(OwnerMenu.Components[Contador]).Visible := NotAllowedItems.MenuVisible
+ else
+ TMenuItem(OwnerMenu.Components[Contador]).Visible := True;
+ end
+ else
+ if ADataset.Locate('ObjName', OwnerMenu.Components[Contador].Name, []) then
+ begin
+ KeyField := ADataset.FindField('UCKey').AsString;
+ case Self.Criptografia of
+ cPadrao:
+ Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey));
+ cMD5:
+ Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString));
+ end;
+ TMenuItem(OwnerMenu.Components[Contador]).Enabled := Encontrado;
+ TMenuItem(OwnerMenu.Components[Contador]).Visible := Encontrado;
+ end;
+ if Assigned(OnApplyRightsMenuIt) then
+ OnApplyRightsMenuIt(Self, TMenuItem(OwnerMenu.Components[Contador]));
+ end;
+ end; // Fim do controle do MainMenu
+
+ //Permissao de Actions
+ if (Assigned(ControlRight.ActionList))
+ {.$IFDEF UCACTMANAGER} or (Assigned(ControlRight.ActionManager)) {.$ENDIF} then
+ begin
+ if Assigned(ControlRight.ActionList) then
+ ObjetoAction := ControlRight.ActionList
+ {.$IFDEF UCACTMANAGER}
+ else
+ ObjetoAction := ControlRight.ActionManager
+ {.$ENDIF};
+ for Contador := 0 to TActionList(ObjetoAction).ActionCount - 1 do
+ begin
+ if not FProfile then
+ begin
+ Encontrado := ADataset.Locate('ObjName', TActionList(ObjetoAction).Actions[contador].Name, []);
+ KeyField := ADataset.FindField('UCKey').AsString;
+ //verifica key
+ if Encontrado then
+ case Self.Criptografia of
+ cPadrao: Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey));
+ cMD5: Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString));
+ end;
+
+ TAction(TActionList(ObjetoAction).Actions[contador]).Enabled := Encontrado;
+
+ if not Encontrado then
+ TAction(TActionList(ObjetoAction).Actions[contador]).Visible := NotAllowedItems.ActionVisible
+ else
+ TAction(TActionList(ObjetoAction).Actions[contador]).Visible := True;
+ end
+ else
+ if ADataset.Locate('ObjName', TActionList(ObjetoAction).Actions[contador].Name, []) then
+ begin
+ KeyField := ADataset.FindField('UCKey').AsString;
+ case Self.Criptografia of
+ cPadrao: Encontrado := (KeyField = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey));
+ cMD5: Encontrado := (KeyField = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString));
+ end;
+ TAction(TActionList(ObjetoAction).Actions[contador]).Enabled := Encontrado;
+ TAction(TActionList(ObjetoAction).Actions[contador]).Visible := Encontrado;
+ end;
+
+ if Assigned(OnApplyRightsActionIt) then
+ OnApplyRightsActionIt(Self, TAction(TActionList(ObjetoAction).Actions[contador]));
+ end;
+ end; // Fim das permissões de Actions
+
+ {.$IFDEF UCACTMANAGER}
+ if Assigned(ControlRight.ActionMainMenuBar) then
+ for Contador := 0 to ControlRight.ActionMainMenuBar.ActionClient.Items.Count - 1 do
+ begin
+ Temp := IntToStr(Contador);
+ if ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Items.Count > 0 then
+ begin
+ if Self.Criptografia = cPadrao then
+ ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Visible :=
+ (ADataset.Locate('ObjName', #1 + 'G' + ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, [])) and
+ (ADataset.FieldByName('UCKey').AsString = Encrypt(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString, EncryptKey));
+
+ if Self.Criptografia = cMD5 then
+ ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Visible :=
+ (ADataset.Locate('ObjName', #1 + 'G' + ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, [])) and
+ (ADataset.FieldByName('UCKey').AsString = MD5Sum(ADataset.FieldByName('UserID').AsString + ADataset.FieldByName('ObjName').AsString));
+
+ TrataActMenuBarIt(ControlRight.ActionMainMenuBar.ActionClient.Items[StrToInt(Temp)], ADataset);
+ end;
+ end;
+ {.$ENDIF}
+end;
+
+procedure TUserControl.UnlockEX(FormObj: TCustomForm; ObjName: String);
+begin
+ if FormObj.FindComponent(ObjName) = nil then
+ Exit;
+
+ if FormObj.FindComponent(ObjName) is TControl then
+ begin
+ TControl(FormObj.FindComponent(ObjName)).Enabled := True;
+ TControl(FormObj.FindComponent(ObjName)).Visible := True;
+ end;
+
+ if FormObj.FindComponent(ObjName) is TMenuItem then // TMenuItem
+ begin
+ TMenuItem(FormObj.FindComponent(ObjName)).Enabled := True;
+ TMenuItem(FormObj.FindComponent(ObjName)).Visible := True;
+ //chama evento OnApplyRightsMenuIt
+ if Assigned(OnApplyRightsMenuIt) then
+ OnApplyRightsMenuIt(self, FormObj.FindComponent(ObjName) as TMenuItem);
+ end;
+
+ if FormObj.FindComponent(ObjName) is TAction then // TAction
+ begin
+ TAction(FormObj.FindComponent(ObjName)).Enabled := True;
+ TAction(FormObj.FindComponent(ObjName)).Visible := True;
+ //chama evento OnApplyRightsMenuIt
+ if Assigned(OnApplyRightsActionIt) then
+ OnApplyRightsActionIt(self, FormObj.FindComponent(ObjName) as TAction);
+ end;
+
+ if FormObj.FindComponent(ObjName) is TField then // TField
+ begin
+ TField(FormObj.FindComponent(ObjName)).ReadOnly := False;
+ TField(FormObj.FindComponent(ObjName)).Visible := True;
+ TField(FormObj.FindComponent(ObjName)).onGetText := nil;
+ end;
+end;
+
+procedure TUserControl.LockEX(FormObj: TCustomForm; ObjName: String; naInvisible: Boolean);
+begin
+ if FormObj.FindComponent(ObjName) = nil then
+ Exit;
+
+ if FormObj.FindComponent(ObjName) is TControl then
+ begin
+ TControl(FormObj.FindComponent(ObjName)).Enabled := False;
+ TControl(FormObj.FindComponent(ObjName)).Visible := not naInvisible;
+ end;
+
+ if FormObj.FindComponent(ObjName) is TMenuItem then // TMenuItem
+ begin
+ TMenuItem(FormObj.FindComponent(ObjName)).Enabled := False;
+ TMenuItem(FormObj.FindComponent(ObjName)).Visible := not naInvisible;
+ //chama evento OnApplyRightsMenuIt
+ if Assigned(OnApplyRightsMenuIt) then
+ OnApplyRightsMenuIt(self, FormObj.FindComponent(ObjName) as TMenuItem);
+ end;
+
+ if FormObj.FindComponent(ObjName) is TAction then // TAction
+ begin
+ TAction(FormObj.FindComponent(ObjName)).Enabled := False;
+ TAction(FormObj.FindComponent(ObjName)).Visible := not naInvisible;
+ //chama evento OnApplyRightsMenuIt
+ if Assigned(OnApplyRightsActionIt) then
+ OnApplyRightsActionIt(self, FormObj.FindComponent(ObjName) as TAction);
+ end;
+
+ if FormObj.FindComponent(ObjName) is TField then // TField
+ begin
+ TField(FormObj.FindComponent(ObjName)).ReadOnly := True;
+ TField(FormObj.FindComponent(ObjName)).Visible := not naInvisible;
+ TField(FormObj.FindComponent(ObjName)).onGetText := HideField;
+ end;
+end;
+
+{.$IFDEF UCACTMANAGER}
+procedure TUserControl.TrataActMenuBarIt(IT: TActionClientItem; ADataset: TDataset);
+var
+ Contador: Integer;
+begin
+ for contador := 0 to IT.Items.Count - 1 do
+ if IT.Items[Contador].Caption <> '-' then
+ if IT.Items[Contador].Items.Count > 0 then
+ begin
+ IT.Items[Contador].Visible := (ADataset.Locate('ObjName', #1 + 'G' + IT.Items[Contador].Caption, []));
+ TrataActMenuBarIt(IT.Items[Contador], ADataset);
+ end;
+end;
+
+{.$ENDIF}
+
+procedure TUserControl.CriaTabelaRights(ExtraRights: Boolean = False);
+var
+ SQLStmt: String;
+ TipoCampo: String;
+begin
+ case Self.Criptografia of
+ cPadrao: TipoCampo := UserSettings.Type_Varchar + '(250)';
+ cMD5: TipoCampo := UserSettings.Type_Varchar + '(32)';
+ end;
+
+ with TableRights do
+ if not ExtraRights then
+ begin
+ SQLStmt := Format('CREATE TABLE %s( %s %s, %s %s(50), %s %s(50), %s %s )',
+ [TableName,
+ FieldUserID,
+ UserSettings.Type_Int,
+ FieldModule,
+ UserSettings.Type_VarChar,
+ FieldComponentName,
+ UserSettings.Type_Varchar,
+ FieldKey,
+ TipoCampo]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+ end
+ else
+ begin
+ SQLStmt := Format('CREATE TABLE %sEX( %s %s, %s %s(50), %s %s(50), %s %s(50), %s %s )',
+ [TableName,
+ FieldUserID,
+ UserSettings.Type_Int,
+ FieldModule,
+ UserSettings.Type_VarChar,
+ FieldComponentName,
+ UserSettings.Type_VarChar,
+ FieldFormName,
+ UserSettings.Type_VarChar,
+ FieldKey,
+ TipoCampo]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+ end;
+end;
+
+procedure TUserControl.AddRightEX(idUser: Integer; Module, FormName, ObjName: String);
+var
+ KeyField: String;
+ SQLStmt: String;
+begin
+ case Self.Criptografia of
+ cPadrao: KeyField := Encrypt(IntToStr(idUser) + ObjName, EncryptKey);
+ cMD5: KeyField := MD5Sum(IntToStr(idUser) + ObjName);
+ end;
+
+ with TableRights do
+ SQLStmt := Format('INSERT INTO %sEX( %s, %s, %s, %s, %s) VALUES (%d, %s, %s, %s, %s)',
+ [TableName,
+ FieldUserID,
+ FieldModule,
+ FieldFormName,
+ FieldComponentName,
+ FieldKey,
+ IdUser,
+ QuotedStr(Module),
+ QuotedStr(FormName),
+ QuotedStr(ObjName),
+ QuotedStr(KeyField)]);
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+end;
+
+procedure TUserControl.AddRight(idUser: Integer; ItemRight: String);
+var
+ KeyField: String;
+ SQLStmt: String;
+begin
+ if ItemRight = '' then
+ Exit;
+
+ case Self.Criptografia of
+ cPadrao: KeyField := Encrypt(IntToStr(idUser) + ItemRight, EncryptKey);
+ cMD5: KeyField := MD5Sum(IntToStr(idUser) + ItemRight);
+ end;
+
+ SQLStmt := Format('Insert into %s( %s, %s, %s, %s) Values( %d, %s, %s, %s)',
+ [TableRights.TableName,
+ TableRights.FieldUserID,
+ TableRights.FieldModule,
+ TableRights.FieldComponentName,
+ TableRights.FieldKey,
+ idUser,
+ QuotedStr(ApplicationID),
+ QuotedStr(ItemRight),
+ QuotedStr(KeyField)]);
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+end;
+
+procedure TUserControl.AddRight(idUser: Integer; ItemRight: TObject; FullPath: Boolean = True);
+var
+ Obj: TObject;
+begin
+ if ItemRight = nil then
+ Exit;
+
+ Obj := ItemRight;
+
+ if Obj.ClassType = TMenuItem then
+ while Assigned(Obj) and (Obj.ClassType = TMenuItem) and (TComponent(Obj).Name <> '') do
+ begin
+ AddRight(idUser, TComponent(Obj).Name);
+ if FullPath then
+ Obj := TMenuItem(Obj).Parent
+ else
+ Obj := nil;
+ end
+ else
+ AddRight(idUser, TComponent(Obj).Name);
+end;
+
+procedure TUserControl.CriaTabelaLog;
+begin
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(
+ Format('CREATE TABLE %S (APPLICATIONID %s(250), IDUSER %s , MSG %s(250), DATA %s(14), NIVEL %s)',
+ [
+ LogControl.TableLog,
+ UserSettings.Type_VarChar,
+ UserSettings.Type_Int,
+ UserSettings.Type_Varchar,
+ UserSettings.Type_Varchar,
+ UserSettings.Type_Int
+ ]));
+end;
+
+{.$IFDEF UCACTMANAGER}
+procedure TUserControl.IncPermissActMenuBar(idUser: Integer; Act: TAction);
+var
+ Temp: TActionClientItem;
+begin
+ if Act = nil then
+ Exit;
+
+ Temp := ControlRight.ActionMainMenuBar.ActionManager.FindItemByAction(Act);
+ while Temp <> nil do
+ begin
+ AddRight(idUser, #1 + 'G' + Temp.Caption);
+ Temp := (TActionClientItem(Temp).ParentItem as TActionClientItem);
+ end;
+end;
+
+{.$ENDIF}
+
+procedure TUserControl.CriaTabelaUsuarios(TableExists: Boolean);
+var
+ Contador: Integer;
+ IDUsuario: Integer;
+ CustomForm: TCustomForm;
+ Mensagens: TStrings;
+ DataSetUsuario: TDataSet;
+ DataSetPermissao: TDataSet;
+ SQLStmt: String;
+ TipoCampo: String;
+ UsuarioInicial: String;
+ PasswordInicial: String;
+begin
+ case Self.Criptografia of
+ cPadrao: TipoCampo := UserSettings.Type_VarChar + '(250)';
+ cMD5: TipoCampo := UserSettings.Type_Varchar + '(32)';
+ end;
+
+ if not TableExists then
+ with TableUsers do
+ begin
+ SQLStmt := Format('Create Table %s ' + // TableName
+ '( ' +
+ '%s %s, ' + // FieldUserID
+ '%s %s(30), ' + // FieldUserName
+ '%s %s(30), ' + // FieldLogin
+ '%s %s, ' + // FieldPassword
+ '%s %s(10), ' + // FieldDateExpired Vicente Barros Leonel
+ '%s %s , ' + //FieldUserExpired Vicente Barros Leonel
+ '%s %s , ' + //FieldUserDaysSun Vicente Barros Leonel
+ '%s %s(150), ' +
+ '%s %s, ' +
+ '%s %s(1), ' +
+ '%s %s, ' +
+ '%s %s,' + // FieldKey
+ '%s %s )',
+ [TableName,
+ FieldUserID,
+ UserSettings.Type_Int,
+
+ FieldUserName,
+ UserSettings.Type_VarChar,
+
+ FieldLogin,
+ UserSettings.Type_VarChar,
+
+ FieldPassword,
+ TipoCampo,
+
+ FieldDateExpired,
+ UserSettings.Type_Char,
+
+ FieldUserExpired,
+ UserSettings.Type_Int,
+
+ FieldUserDaysSun,
+ UserSettings.Type_Int,
+
+ FieldEmail,
+ UserSettings.Type_Varchar,
+
+ FieldPrivileged,
+ UserSettings.Type_Int,
+
+ FieldTypeRec,
+ UserSettings.Type_Char,
+
+ FieldProfile,
+ UserSettings.Type_Int,
+
+ FieldKey,
+ TipoCampo,
+
+ FieldUserInative,
+ UserSettings.Type_Int
+ ]);
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLstmt);
+ end;
+
+ case Self.Login.CharCaseUser of
+ ecNormal: UsuarioInicial := Self.Login.InitialLogin.User;
+ ecUpperCase: UsuarioInicial := UpperCase(Self.Login.InitialLogin.User);
+ ecLowerCase: UsuarioInicial := LowerCase(Self.Login.InitialLogin.User);
+ end;
+
+ case Self.Login.CharCasePass of
+ ecNormal: PasswordInicial := Self.Login.InitialLogin.Password;
+ ecUpperCase: PasswordInicial := UpperCase(Self.Login.InitialLogin.Password);
+ ecLowerCase: PasswordInicial := LowerCase(Self.Login.InitialLogin.Password);
+ end;
+
+ SQLStmt := 'SELECT ' + TableUsers.FieldUserID + ' as idUser ' +
+ 'FROM ' + TableUsers.TableName + ' ' +
+ 'WHERE ' + TableUsers.FieldLogin + ' = ' + QuotedStr(UsuarioInicial);
+
+ try
+ DataSetUsuario := DataConnector.UCGetSQLDataset(SQLstmt);
+
+ // Inserir login inicial
+ if DataSetUsuario.IsEmpty then
+ IDUsuario := AddUser(UsuarioInicial,
+ PasswordInicial,
+ Login.InitialLogin.User,
+ Login.InitialLogin.Email,
+ 0, 0, Login.DaysOfSunExpired,
+ True)
+ else
+ IDUsuario := DataSetUsuario.FieldByName('idUser').AsInteger;
+
+ finally
+ DataSetUsuario.Close;
+ FreeAndNil(DataSetUsuario);
+ end;
+
+ SQLStmt := 'SELECT ' + TableRights.FieldUserID + ' AS IDUSER ' +
+ 'FROM ' + TableRights.TableName + ' ' +
+ 'WHERE ' + TableRights.FieldUserID + ' = ' + IntToStr(IDUsuario) + ' ' +
+ 'AND ' + TableRights.FieldModule + ' = ' + QuotedStr(ApplicationID);
+
+ try
+ DataSetPermissao := DataConnector.UCGetSQLDataset(SQLStmt);
+
+ if not DataSetPermissao.IsEmpty then
+ Exit;
+
+ finally
+ DataSetPermissao.Close;
+ FreeAndNil(DataSetPermissao);
+ end;
+
+ AddRight(IDUsuario, User.MenuItem);
+ AddRight(IDUsuario, User.Action);
+
+ AddRight(IDUsuario, UserPasswordChange.MenuItem);
+ AddRight(IDUsuario, UserPasswordChange.Action);
+
+ AddRight(IDUsuario, UsersLogoff.MenuItem);
+ AddRight(IDUsuario, UsersLogoff.Action);
+
+ {.$IFDEF UCACTMANAGER}
+ if Assigned(ControlRight.ActionMainMenuBar) then
+ IncPermissActMenuBar(IDUsuario, User.Action);
+
+ if Assigned(ControlRight.ActionMainMenuBar) then
+ IncPermissActMenuBar(IDUsuario, UserPasswordChange.Action);
+ {.$ENDIF}
+
+ for Contador := 0 to Pred(Login.InitialLogin.InitialRights.Count) do
+ if Owner.FindComponent(Login.InitialLogin.InitialRights[contador]) <> nil then
+ begin
+ AddRight(IDUsuario, Owner.FindComponent(Login.InitialLogin.InitialRights[contador]));
+ AddRightEX(IDUsuario, ApplicationID, TcustomForm(Owner).Name, Login.InitialLogin.InitialRights[contador]);
+ end;
+
+ try
+ Mensagens := TStringList.Create;
+ Mensagens.Assign(UserSettings.CommonMessages.InitialMessage);
+ Mensagens.Text := StringReplace(Mensagens.Text, ':user', UsuarioInicial, [rfReplaceAll]);
+ Mensagens.Text := StringReplace(Mensagens.Text, ':password', PasswordInicial, [rfReplaceAll]);
+
+ if Assigned(OnCustomInitialMsg) then
+ OnCustomInitialMsg(Self, CustomForm, Mensagens);
+
+ if CustomForm <> nil then
+ CustomForm.ShowModal
+ else
+ MessageDlg(Mensagens.Text, mtInformation, [mbOK], 0);
+
+ finally
+ FreeAndNil(Mensagens);
+ end;
+end;
+
+procedure TUserControl.SetfLanguage(const Value: TUCLanguage);
+begin
+ fLanguage := Value;
+ Self.UserSettings.Language := Value;
+ UCSettings.AlterLanguage(Self.UserSettings);
+end;
+
+
+procedure TUserControl.SetFMailUserControl(const Value: TMailUserControl);
+begin // By Vicente Barros Leonel
+ FMailUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUserControl.ApplySettings(SourceSettings: TUCSettings);
+begin
+ with UserSettings.CommonMessages do
+ begin
+ BlankPassword := SourceSettings.CommonMessages.BlankPassword;
+ PasswordChanged := SourceSettings.CommonMessages.PasswordChanged;
+ InitialMessage.Text := SourceSettings.CommonMessages.InitialMessage.Text;
+ MaxLoginAttemptsError := SourceSettings.CommonMessages.MaxLoginAttemptsError;
+ InvalidLogin := SourceSettings.CommonMessages.InvalidLogin;
+ InactiveLogin := SourceSettings.CommonMessages.InactiveLogin;
+ AutoLogonError := SourceSettings.CommonMessages.AutoLogonError;
+ UsuarioExiste := SourceSettings.CommonMessages.UsuarioExiste; // Luiz Benevenuto 20/04/06
+ PasswordExpired := SourceSettings.CommonMessages.PasswordExpired; // vicente barros leonel
+ ForcaTrocaSenha := SourceSettings.CommonMessages.ForcaTrocaSenha;
+ end;
+
+ with UserSettings.Login do
+ begin
+ BtCancel := SourceSettings.Login.BtCancel;
+ BtOK := SourceSettings.Login.BtOK;
+ LabelPassword := SourceSettings.Login.LabelPassword;
+ LabelUser := SourceSettings.Login.LabelUser;
+ WindowCaption := SourceSettings.Login.WindowCaption;
+ LabelTentativa := SourceSettings.Login.LabelTentativa;
+ LabelTentativas := SourceSettings.Login.LabelTentativas;
+
+ if Assigned(SourceSettings.Login.LeftImage.Bitmap) then
+ LeftImage.Bitmap := SourceSettings.Login.LeftImage.Bitmap
+ else
+ LeftImage.Bitmap := nil;
+
+ if Assigned(SourceSettings.Login.TopImage.Bitmap) then
+ TopImage.Bitmap := SourceSettings.Login.TopImage.Bitmap
+ else
+ TopImage.Bitmap := nil;
+
+ if Assigned(SourceSettings.Login.BottomImage.Bitmap) then
+ BottomImage.Bitmap := SourceSettings.Login.BottomImage.Bitmap
+ else
+ BottomImage.Bitmap := nil;
+ end;
+
+ with UserSettings.UsersForm do
+ begin
+ WindowCaption := SourceSettings.UsersForm.WindowCaption;
+ LabelDescription := SourceSettings.UsersForm.LabelDescription;
+ ColName := SourceSettings.UsersForm.ColName;
+ ColLogin := SourceSettings.UsersForm.ColLogin;
+ ColEmail := SourceSettings.UsersForm.ColEmail;
+ BtAdd := SourceSettings.UsersForm.BtAdd;
+ BtChange := SourceSettings.UsersForm.BtChange;
+ BtDelete := SourceSettings.UsersForm.BtDelete;
+ BtRights := SourceSettings.UsersForm.BtRights;
+ BtPassword := SourceSettings.UsersForm.BtPassword;
+ BtClose := SourceSettings.UsersForm.BtClose;
+ PromptDelete := SourceSettings.UsersForm.PromptDelete;
+ PromptDelete_WindowCaption := SourceSettings.UsersForm.PromptDelete_WindowCaption; //added by fduenas
+ end;
+
+ with UserSettings.UsersProfile do
+ begin
+ WindowCaption := SourceSettings.UsersProfile.WindowCaption;
+ LabelDescription := SourceSettings.UsersProfile.LabelDescription;
+ ColProfile := SourceSettings.UsersProfile.ColProfile;
+ BtAdd := SourceSettings.UsersProfile.BtAdd;
+ BtChange := SourceSettings.UsersProfile.BtChange;
+ BtDelete := SourceSettings.UsersProfile.BtDelete;
+ BtRights := SourceSettings.UsersProfile.BtRights; //added by fduenas
+ BtClose := SourceSettings.UsersProfile.BtClose;
+ PromptDelete := SourceSettings.UsersProfile.PromptDelete;
+ PromptDelete_WindowCaption := SourceSettings.UsersProfile.PromptDelete_WindowCaption; //added by fduenas
+ end;
+
+ with UserSettings.AddChangeUser do
+ begin
+ WindowCaption := SourceSettings.AddChangeUser.WindowCaption;
+ LabelAdd := SourceSettings.AddChangeUser.LabelAdd;
+ LabelChange := SourceSettings.AddChangeUser.LabelChange;
+ LabelName := SourceSettings.AddChangeUser.LabelName;
+ LabelLogin := SourceSettings.AddChangeUser.LabelLogin;
+ LabelEmail := SourceSettings.AddChangeUser.LabelEmail;
+ CheckPrivileged := SourceSettings.AddChangeUser.CheckPrivileged;
+ BtSave := SourceSettings.AddChangeUser.BtSave;
+ BtCancel := SourceSettings.AddChangeUser.BtCancel;
+ CheckExpira := SourceSettings.AddChangeUser.CheckExpira;
+ Day := SourceSettings.AddChangeUser.Day;
+ ExpiredIn := SourceSettings.AddChangeUser.ExpiredIn;
+ end;
+
+ with UserSettings.AddChangeProfile do
+ begin
+ WindowCaption := SourceSettings.AddChangeProfile.WindowCaption;
+ LabelAdd := SourceSettings.AddChangeProfile.LabelAdd;
+ LabelChange := SourceSettings.AddChangeProfile.LabelChange;
+ LabelName := SourceSettings.AddChangeProfile.LabelName;
+ BtSave := SourceSettings.AddChangeProfile.BtSave;
+ BtCancel := SourceSettings.AddChangeProfile.BtCancel;
+ end;
+
+ with UserSettings.Rights do
+ begin
+ WindowCaption := SourceSettings.Rights.WindowCaption;
+ LabelUser := SourceSettings.Rights.LabelUser;
+ LabelProfile := SourceSettings.Rights.LabelProfile;
+ PageMenu := SourceSettings.Rights.PageMenu;
+ PageActions := SourceSettings.Rights.PageActions;
+ PageControls := SourceSettings.Rights.PageControls;
+ BtUnlock := SourceSettings.Rights.BtUnlock;
+ BtLock := SourceSettings.Rights.BtLock;
+ BtSave := SourceSettings.Rights.BtSave;
+ BtCancel := SourceSettings.Rights.BtCancel;
+ end;
+
+ with UserSettings.ChangePassword do
+ begin
+ WindowCaption := SourceSettings.ChangePassword.WindowCaption;
+ LabelDescription := SourceSettings.ChangePassword.LabelDescription;
+ LabelCurrentPassword := SourceSettings.ChangePassword.LabelCurrentPassword;
+ LabelNewPassword := SourceSettings.ChangePassword.LabelNewPassword;
+ LabelConfirm := SourceSettings.ChangePassword.LabelConfirm;
+ BtSave := SourceSettings.ChangePassword.BtSave;
+ BtCancel := SourceSettings.ChangePassword.BtCancel;
+ end;
+
+ with UserSettings.CommonMessages.ChangePasswordError do
+ begin
+ InvalidCurrentPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidCurrentPassword;
+ NewPasswordError := SourceSettings.CommonMessages.ChangePasswordError.NewPasswordError;
+ NewEqualCurrent := SourceSettings.CommonMessages.ChangePasswordError.NewEqualCurrent;
+ PasswordRequired := SourceSettings.CommonMessages.ChangePasswordError.PasswordRequired;
+ MinPasswordLength := SourceSettings.CommonMessages.ChangePasswordError.MinPasswordLength;
+ InvalidNewPassword := SourceSettings.CommonMessages.ChangePasswordError.InvalidNewPassword;
+ end;
+
+ with UserSettings.ResetPassword do
+ begin
+ WindowCaption := SourceSettings.ResetPassword.WindowCaption;
+ LabelPassword := SourceSettings.ResetPassword.LabelPassword;
+ end;
+
+ with UserSettings.Log do
+ begin
+ WindowCaption := SourceSettings.Log.WindowCaption;
+ LabelDescription := SourceSettings.Log.LabelDescription;
+ LabelUser := SourceSettings.Log.LabelUser;
+ LabelDate := SourceSettings.Log.LabelDate;
+ LabelLevel := SourceSettings.Log.LabelLevel;
+ ColLevel := SourceSettings.Log.ColLevel;
+ ColMessage := SourceSettings.Log.ColMessage;
+ ColUser := SourceSettings.Log.ColUser;
+ ColDate := SourceSettings.Log.ColDate;
+ BtFilter := SourceSettings.Log.BtFilter;
+ BtDelete := SourceSettings.Log.BtDelete;
+ BtClose := SourceSettings.Log.BtClose;
+ PromptDelete := SourceSettings.Log.PromptDelete;
+ PromptDelete_WindowCaption := SourceSettings.Log.PromptDelete_WindowCaption; //added by fduenas
+ OptionUserAll := SourceSettings.Log.OptionUserAll; //added by fduenas
+ OptionLevelLow := SourceSettings.Log.OptionLevelLow; //added by fduenas
+ OptionLevelNormal := SourceSettings.Log.OptionLevelNormal; //added by fduenas
+ OptionLevelHigh := SourceSettings.Log.OptionLevelHigh; //added by fduenas
+ OptionLevelCritic := SourceSettings.Log.OptionLevelCritic; //added by fduenas
+ DeletePerformed := SourceSettings.Log.DeletePerformed; //added by fduenas
+ end;
+
+ with UserSettings.AppMessages do
+ begin
+ MsgsForm_BtNew := SourceSettings.AppMessages.MsgsForm_BtNew;
+ MsgsForm_BtReplay := SourceSettings.AppMessages.MsgsForm_BtReplay;
+ MsgsForm_BtForward := SourceSettings.AppMessages.MsgsForm_BtForward;
+ MsgsForm_BtDelete := SourceSettings.AppMessages.MsgsForm_BtDelete;
+ MsgsForm_BtClose := SourceSettings.AppMessages.MsgsForm_BtClose; //added by fduenas
+ MsgsForm_WindowCaption := SourceSettings.AppMessages.MsgsForm_WindowCaption;
+ MsgsForm_ColFrom := SourceSettings.AppMessages.MsgsForm_ColFrom;
+ MsgsForm_ColSubject := SourceSettings.AppMessages.MsgsForm_ColSubject;
+ MsgsForm_ColDate := SourceSettings.AppMessages.MsgsForm_ColDate;
+ MsgsForm_PromptDelete := SourceSettings.AppMessages.MsgsForm_PromptDelete;
+ MsgsForm_PromptDelete_WindowCaption := SourceSettings.AppMessages.MsgsForm_PromptDelete_WindowCaption; //added by fduenas
+ MsgsForm_NoMessagesSelected := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected; //added by fduenas
+ MsgsForm_NoMessagesSelected_WindowCaption := SourceSettings.AppMessages.MsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas
+
+ MsgRec_BtClose := SourceSettings.AppMessages.MsgRec_BtClose;
+ MsgRec_WindowCaption := SourceSettings.AppMessages.MsgRec_WindowCaption;
+ MsgRec_Title := SourceSettings.AppMessages.MsgRec_Title;
+ MsgRec_LabelFrom := SourceSettings.AppMessages.MsgRec_LabelFrom;
+ MsgRec_LabelDate := SourceSettings.AppMessages.MsgRec_LabelDate;
+ MsgRec_LabelSubject := SourceSettings.AppMessages.MsgRec_LabelSubject;
+ MsgRec_LabelMessage := SourceSettings.AppMessages.MsgRec_LabelMessage;
+ MsgSend_BtSend := SourceSettings.AppMessages.MsgSend_BtSend;
+ MsgSend_BtCancel := SourceSettings.AppMessages.MsgSend_BtCancel;
+ MsgSend_WindowCaption := SourceSettings.AppMessages.MsgSend_WindowCaption;
+ MsgSend_Title := SourceSettings.AppMessages.MsgSend_Title;
+ MsgSend_GroupTo := SourceSettings.AppMessages.MsgSend_GroupTo;
+ MsgSend_RadioUser := SourceSettings.AppMessages.MsgSend_RadioUser;
+ MsgSend_RadioAll := SourceSettings.AppMessages.MsgSend_RadioAll;
+ MsgSend_GroupMessage := SourceSettings.AppMessages.MsgSend_GroupMessage;
+ MsgSend_LabelSubject := SourceSettings.AppMessages.MsgSend_LabelSubject; //added by fduenas
+ MsgSend_LabelMessageText := SourceSettings.AppMessages.MsgSend_LabelMessageText; //added by fduenas
+ end;
+
+{ with UserSettings.TypeFieldsDB do
+ begin
+ Type_VarChar := SourceSettings.Type_VarChar;
+ Type_Char := SourceSettings.Type_Char;
+ Type_Int := SourceSettings.Type_Int;
+ end; atenção mudar aqui }
+
+ UserSettings.WindowsPosition := SourceSettings.WindowsPosition;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'Criptografia'} {$ENDIF}
+
+const
+ Codes64 = '0A1B2C3D4E5F6G7H89IjKlMnOPqRsTuVWXyZabcdefghijkLmNopQrStUvwxYz+/';
+ C1 = 52845;
+ C2 = 22719;
+
+function Decode(const S: ansistring): ansistring;
+const
+{$IFDEF DELPHI12}
+ Map: array[AnsiChar] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0);
+{$ELSE}
+ Map: array[char] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0);
+{$ENDIF}
+
+var
+ I: longint;
+begin
+ case Length(S) of
+ 2:
+ begin
+ I := Map[S[1]] + (Map[S[2]] shl 6);
+ SetLength(Result, 1);
+ Move(I, Result[1], Length(Result));
+ end;
+ 3:
+ begin
+ I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);
+ SetLength(Result, 2);
+ Move(I, Result[1], Length(Result));
+ end;
+ 4:
+ begin
+ I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) + (Map[S[4]] shl 18);
+ SetLength(Result, 3);
+ Move(I, Result[1], Length(Result));
+ end
+ end;
+end;
+
+function Encode(const S: ansistring): ansistring;
+const
+ Map: array[0..63] of char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+var
+ I: longint;
+begin
+ I := 0;
+ Move(S[1], I, Length(S));
+ case Length(S) of
+ 1:
+ Result := Map[I mod 64] + Map[(I shr 6) mod 64];
+ 2:
+ Result := Map[I mod 64] + Map[(I shr 6) mod 64] + Map[(I shr 12) mod 64];
+ 3:
+ Result := Map[I mod 64] + Map[(I shr 6) mod 64] + Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64];
+ end;
+end;
+
+function InternalDecrypt(const S: ansistring; Key: Word): ansistring;
+var
+ I: Word;
+ Seed: int64;
+begin
+ Result := S;
+ Seed := Key;
+ for I := 1 to Length(Result) do
+ begin
+ {$IFDEF DELPHI12}
+ Result[I] := AnsiChar(byte(Result[I]) xor (Seed shr 8));
+ Seed := (byte(S[I]) + Seed) * Word(C1) + Word(C2);
+ {$ELSE}
+ Result[I] := char(byte(Result[I]) xor (Seed shr 8));
+ Seed := (byte(S[I]) + Seed) * Word(C1) + Word(C2);
+ {$ENDIF}
+ end;
+end;
+
+function PreProcess(const S: ansistring): ansistring;
+var
+ SS: ansistring;
+begin
+ SS := S;
+ Result := '';
+ while SS <> '' do
+ begin
+ Result := Result + Decode(Copy(SS, 1, 4));
+ Delete(SS, 1, 4);
+ end;
+end;
+
+function Decrypt(const S: ansistring; Key: Word): ansistring;
+begin
+ Result := InternalDecrypt(PreProcess(S), Key);
+end;
+
+function PostProcess(const S: ansistring): ansistring;
+var
+ SS: ansistring;
+begin
+ SS := S;
+ Result := '';
+ while SS <> '' do
+ begin
+ Result := Result + Encode(Copy(SS, 1, 3));
+ Delete(SS, 1, 3);
+ end;
+end;
+
+function InternalEncrypt(const S: ansistring; Key: Word): ansistring;
+var
+ I: Word;
+ Seed: int64;
+begin
+ Result := S;
+ Seed := Key;
+ for I := 1 to Length(Result) do
+ begin
+ {$IFDEF DELPHI12}
+ Result[I] := AnsiChar(byte(Result[I]) xor (Seed shr 8));
+ Seed := (byte(Result[I]) + Seed) * Word(C1) + Word(C2);
+ {$ELSE}
+ Result[I] := Char(byte(Result[I]) xor (Seed shr 8));
+ Seed := (byte(Result[I]) + Seed) * Word(C1) + Word(C2);
+ {$ENDIF}
+ end;
+end;
+
+function Encrypt(const S: ansistring; Key: Word): ansistring;
+begin
+ Result := PostProcess(InternalEncrypt(S, Key));
+end;
+
+function MD5Sum(strValor: String): String;
+begin
+ Result := md5.MD5Print(md5.MD5String(strValor));
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCAutoLogin'} {$ENDIF}
+
+{ TUCAutoLogin }
+
+procedure TUCAutoLogin.Assign(Source: TPersistent);
+begin
+ if Source is TUCAutoLogin then
+ begin
+ Self.Active := TUCAutoLogin(Source).Active;
+ Self.User := TUCAutoLogin(Source).User;
+ Self.Password := TUCAutoLogin(Source).Password;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCAutoLogin.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.Active := False;
+ Self.MessageOnError := True;
+end;
+
+destructor TUCAutoLogin.Destroy;
+begin
+ inherited Destroy;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TNaoPermitidos'} {$ENDIF}
+
+{ TNaoPermitidos }
+
+procedure TUCNotAllowedItems.Assign(Source: TPersistent);
+begin
+ if Source is TUCNotAllowedItems then
+ begin
+ Self.MenuVisible := TUCNotAllowedItems(Source).MenuVisible;
+ Self.ActionVisible := TUCNotAllowedItems(Source).ActionVisible; // Consertado Luiz Benvenuto
+ end
+ else
+ inherited;
+end;
+
+constructor TUCNotAllowedItems.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.MenuVisible := True;
+ Self.ActionVisible := True;
+end;
+
+destructor TUCNotAllowedItems.Destroy;
+begin
+ inherited Destroy;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TLogControl'} {$ENDIF}
+
+{ TLogControl }
+
+constructor TUCLogControl.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.Active := True;
+end;
+
+destructor TUCLogControl.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TUCLogControl.Assign(Source: TPersistent);
+begin
+ if Source is TUCLogControl then
+ begin
+ Self.Active := TUCLogControl(Source).Active;
+ Self.TableLog := TUCLogControl(Source).TableLog;
+ end
+ else
+ inherited;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TCadastroUsuarios'} {$ENDIF}
+
+{ TCadastroUsuarios }
+
+procedure TUCUser.Assign(Source: TPersistent);
+begin
+ if Source is TUCUser then
+ begin
+ Self.MenuItem := TUCUser(Source).MenuItem;
+ Self.Action := TUCUser(Source).Action;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUser.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.FProtectAdministrator := True;
+ Self.FUsePrivilegedField := False;
+end;
+
+destructor TUCUser.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TUCUser.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ begin
+ Self.FMenuItem := nil;
+ Value.FreeNotification(Self.Action);
+ end;
+end;
+
+procedure TUCUser.SetMenuItem(const Value: TMenuItem);
+begin
+ FMenuItem := Value;
+ if Value <> nil then
+ begin
+ Self.Action := nil;
+ Value.FreeNotification(Self.MenuItem);
+ end;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TLogin'} {$ENDIF}
+
+{ TLogin }
+
+constructor TUCLogin.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ AutoLogin := TUCAutoLogin.Create(nil);
+ InitialLogin := TUCInitialLogin.Create(nil);
+ if not AutoLogin.MessageOnError then
+ AutoLogin.MessageOnError := True;
+
+ fDateExpireActive := False; { By Vicente Barros Leonel }
+ fDaysOfSunExpired := 30; { By Vicente Barros Leonel }
+end;
+
+destructor TUCLogin.Destroy;
+begin
+ SysUtils.FreeAndNil(Self.FAutoLogin);
+ SysUtils.FreeAndNil(Self.FInitialLogin);
+
+ inherited Destroy;
+end;
+
+procedure TUCLogin.Assign(Source: TPersistent);
+begin
+ if Source is TUCLogin then
+ Self.MaxLoginAttempts := TUCLogin(Source).MaxLoginAttempts
+ else
+ inherited;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TPerfilUsuarios'} {$ENDIF}
+
+{ TPerfilUsuarios }
+
+constructor TUCUserProfile.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.Active := True;
+end;
+
+destructor TUCUserProfile.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TUCUserProfile.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserProfile then
+ Self.Active := TUCUserProfile(Source).Active
+ else
+ inherited;
+end;
+
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TTrocarSenha'} {$ENDIF}
+
+{ TTrocarSenha }
+
+procedure TUCUserPasswordChange.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserPasswordChange then
+ begin
+ Self.MenuItem := TUCUserPasswordChange(Source).MenuItem;
+ Self.Action := TUCUserPasswordChange(Source).Action;
+ Self.ForcePassword := TUCUserPasswordChange(Source).ForcePassword;
+ Self.MinPasswordLength := TUCUserPasswordChange(Source).MinPasswordLength;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUserPasswordChange.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ Self.ForcePassword := False;
+end;
+
+destructor TUCUserPasswordChange.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TUCUserPasswordChange.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ begin
+ Self.MenuItem := nil;
+ Value.FreeNotification(Self.Action);
+ end;
+end;
+
+procedure TUCUserPasswordChange.SetMenuItem(const Value: TMenuItem);
+begin
+ FMenuItem := Value;
+ if Value <> nil then
+ begin
+ Self.Action := nil;
+ Value.FreeNotification(Self.MenuItem);
+ end;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TInitialLogin'} {$ENDIF}
+
+{ TInitialLogin }
+
+procedure TUCInitialLogin.Assign(Source: TPersistent);
+begin
+ if Source is TUCInitialLogin then
+ begin
+ Self.User := TUCInitialLogin(Source).User;
+ Self.Password := TUCInitialLogin(Source).Password;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCInitialLogin.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ FInitialRights := TStringList.Create;
+end;
+
+destructor TUCInitialLogin.Destroy;
+begin
+ if Assigned(Self.FInitialRights) then
+ Self.InitialRights.Free;
+ inherited Destroy;
+end;
+
+procedure TUCInitialLogin.SetInitialRights(const Value: TStrings);
+begin
+ FInitialRights.Assign(Value);
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCControlRight'} {$ENDIF}
+
+{ TUCControlRight }
+
+procedure TUCControlRight.Assign(Source: TPersistent);
+begin
+ if Source is TUCControlRight then
+ Self.ActionList := TUCControlRight(Source).ActionList
+ {.$IFDEF UCACTMANAGER}
+ {.$ENDIF}
+ else
+ inherited;
+end;
+
+constructor TUCControlRight.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCControlRight.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TUCControlRight.SetActionList(const Value: TActionList);
+begin
+ FActionList := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self.ActionList);
+end;
+
+{.$IFDEF UCACTMANAGER}
+procedure TUCControlRight.SetActionMainMenuBar(const Value: TActionMainMenuBar);
+begin
+ FActionMainMenuBar := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self.ActionMainMenuBar);
+end;
+
+procedure TUCControlRight.SetActionManager(const Value: TActionManager);
+begin
+ FActionManager := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self.ActionManager);
+end;
+
+{.$ENDIF}
+
+procedure TUCControlRight.SetMainMenu(const Value: TMenu);
+begin
+ FMainMenu := Value;
+ if Value <> nil then
+ Value.FreeNotification(Self.MainMenu);
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCAppMessage'} {$ENDIF}
+
+{ TUCAppMessage }
+
+procedure TUCApplicationMessage.CheckMessages;
+
+ function FmtDtHr(dt: String): String;
+ begin
+ Result := Copy(dt, 7, 2) + '/' + Copy(dt, 5, 2) + '/' + Copy(dt, 1, 4) + ' ' + Copy(dt, 9, 2) + ':' + Copy(dt, 11, 2);
+ end;
+
+begin
+ if not FReady then
+ Exit;
+
+ with Self.UserControl.DataConnector.UCGetSQLDataset('SELECT UCM.IdMsg, ' +
+ 'UCC.' + Self.UserControl.TableUsers.FieldUserName + ' AS De, ' +
+ 'UCC_1.' + Self.UserControl.TableUsers.FieldUserName + ' AS Para, ' +
+ 'UCM.Subject, ' +
+ 'UCM.Msg, ' +
+ 'UCM.DtSend, ' +
+ 'UCM.DtReceive ' +
+ 'FROM (' + Self.TableMessages + ' UCM INNER JOIN ' + Self.UserControl.TableUsers.TableName + ' UCC ON UCM.UsrFrom = UCC.' + Self.UserControl.TableUsers.FieldUserID + ') INNER JOIN ' +
+ Self.UserControl.TableUsers.TableName + ' UCC_1 ON UCM.UsrTo = UCC_1.' + Self.UserControl.TableUsers.FieldUserID + ' where UCM.DtReceive is NULL and UCM.UsrTo = ' + IntToStr(Self.UserControl.CurrentUser.UserID)) do
+ begin
+ while not EOF do
+ begin
+ MsgRecForm := TMsgRecForm.Create(Self);
+ MsgRecForm.stDe.Caption := FieldByName('De').AsString;
+ MsgRecForm.stData.Caption := FmtDtHr(FieldByName('DtSend').AsString);
+ MsgRecForm.stAssunto.Caption := FieldByName('Subject').AsString;
+ MsgRecForm.MemoMsg.Text := FieldByName('msg').AsString;
+ if Assigned(Self.UserControl.DataConnector) then
+ Self.UserControl.DataConnector.UCExecSQL('Update ' + Self.TableMessages + ' set DtReceive = ' +
+ QuotedStr(FormatDateTime('YYYYMMDDhhmm', now)) +
+ ' Where idMsg = ' + FieldByName('idMsg').AsString);
+ MsgRecForm.Show;
+ Next;
+ end;
+ Close;
+ Free;
+ end;
+end;
+
+constructor TUCApplicationMessage.Create(AOWner: TComponent);
+begin
+ inherited Create(AOWner);
+ FReady := False;
+ if csDesigning in ComponentState then
+ begin
+ if Self.TableMessages = '' then
+ Self.TableMessages := 'UCTABMESSAGES';
+ Interval := 60000;
+ Active := True;
+ end;
+ Self.FVerifThread := TUCVerificaMensagemThread.Create(False);
+ Self.FVerifThread.AOwner := Self;
+ Self.FVerifThread.FreeOnTerminate := True;
+end;
+
+destructor TUCApplicationMessage.Destroy;
+begin
+
+ if not (csDesigning in ComponentState) then
+ if Assigned(UserControl) then
+ Usercontrol.DeleteLoginMonitor(Self);
+
+ Self.FVerifThread.Terminate;
+ // FreeAndNil(FVerifThread);
+ inherited Destroy;
+end;
+
+procedure TUCApplicationMessage.DeleteAppMessage(IdMsg: Integer);
+begin
+ if MessageDlg(FUserControl.UserSettings.AppMessages.MsgsForm_PromptDelete, mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
+ Exit;
+ if Assigned(UserControl.DataConnector) then
+ UserControl.DataConnector.UCExecSQL('Delete from ' + TableMessages + ' where IdMsg = ' + IntToStr(idMsg));
+end;
+
+procedure TUCApplicationMessage.Loaded;
+begin
+ inherited;
+ if not (csDesigning in ComponentState) then
+ begin
+ if not Assigned(FUserControl) then
+ raise Exception.Create('Component UserControl not defined!');
+ Usercontrol.AddLoginMonitor(Self);
+ if not FUserControl.DataConnector.UCFindTable(TableMessages) then
+ FUserControl.CriaTabelaMsgs(TableMessages);
+ end;
+ FReady := True;
+end;
+
+procedure TUCApplicationMessage.Notification(AComponent: TComponent; AOperation: TOperation);
+begin
+ if AOperation = opRemove then
+ if AComponent = FUserControl then
+ FUserControl := nil;
+ inherited Notification(AComponent, AOperation);
+end;
+
+procedure TUCApplicationMessage.SendAppMessage(ToUser: Integer; Subject, Msg: String);
+var
+ UltId: Integer;
+begin
+ with UserControl.DataConnector.UCGetSQLDataset('Select Max(idMsg) as nr from ' + TableMessages) do
+ begin
+ UltID := FieldByName('nr').AsInteger + 1;
+ Close;
+ Free;
+ end;
+ if Assigned(UserControl.DataConnector) then
+ UserControl.DataConnector.UCExecSQL('Insert into ' + TableMessages + '( idMsg, UsrFrom, UsrTo, Subject, Msg, DtSend) Values (' +
+ IntToStr(UltId) + ', ' +
+ IntToStr(UserControl.CurrentUser.UserID) + ', ' +
+ IntToStr(toUser) + ', ' +
+ QuotedStr(Subject) + ', ' +
+ QuotedStr(Msg) + ', ' +
+ QuotedStr(FormatDateTime('YYYYMMDDHHMM', now)) + ')');
+
+end;
+
+procedure TUCApplicationMessage.SetActive(const Value: Boolean);
+begin
+ FActive := Value;
+ if (csDesigning in ComponentState) then
+ Exit;
+ if FActive then
+ FVerifThread.Resume
+ else
+ FVerifThread.Suspend;
+end;
+
+procedure TUCApplicationMessage.SetUserControl(const Value: TUserControl);
+begin
+ FUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(self);
+end;
+
+procedure TUCApplicationMessage.ShowMessages;
+begin
+ try
+ MsgsForm := TMsgsForm.Create(self);
+ with FUserControl.UserSettings.AppMessages do
+ begin
+ MsgsForm.Caption := MsgsForm_WindowCaption;
+ MsgsForm.btnova.Caption := MsgsForm_BtNew;
+ MsgsForm.btResponder.Caption := MsgsForm_BtReplay;
+ MsgsForm.btEncaminhar.Caption := MsgsForm_BtForward;
+ MsgsForm.btExcluir.Caption := MsgsForm_BtDelete;
+ MsgsForm.btClose.Caption := MsgsForm_BtClose;
+
+ MsgsForm.ListView1.Columns[0].Caption := MsgsForm_ColFrom;
+ MsgsForm.ListView1.Columns[1].Caption := MsgsForm_ColSubject;
+ MsgsForm.ListView1.Columns[2].Caption := MsgsForm_ColDate;
+ end;
+
+ MsgsForm.DSMsgs := UserControl.DataConnector.UCGetSQLDataset('SELECT UCM.IdMsg, UCM.UsrFrom, UCC.' + Self.UserControl.TableUsers.FieldUserName + ' AS De, UCC_1.' + Self.UserControl.TableUsers.FieldUserName + ' AS Para, UCM.Subject, UCM.Msg, UCM.DtSend, UCM.DtReceive ' +
+ 'FROM (' + TableMessages + ' UCM INNER JOIN ' + UserControl.TableUsers.TableName + ' UCC ON UCM.UsrFrom = UCC.' + Self.UserControl.TableUsers.FieldUserID + ') ' +
+ ' INNER JOIN ' + UserControl.TableUsers.TableName + ' UCC_1 ON UCM.UsrTo = UCC_1.' + Self.UserControl.TableUsers.FieldUserID + ' WHERE UCM.UsrTo = ' + IntToStr(UserControl.CurrentUser.UserID) + ' ORDER BY UCM.DtReceive DESC');
+ MsgsForm.DSMsgs.Open;
+ MsgsForm.DSUsuarios := UserControl.DataConnector.UCGetSQLDataset('SELECT ' +
+ UserControl.TableUsers.FieldUserID + ' as idUser, ' +
+ UserControl.TableUsers.FieldLogin + ' as Login, ' +
+ UserControl.TableUsers.FieldUserName + ' as Nome, ' +
+ UserControl.TableUsers.FieldPassword + ' as Senha, ' +
+ UserControl.TableUsers.FieldEmail + ' as Email, ' +
+ UserControl.TableUsers.FieldPrivileged + ' as Privilegiado, ' +
+ UserControl.TableUsers.FieldTypeRec + ' as Tipo, ' +
+ UserControl.TableUsers.FieldProfile + ' as Perfil ' +
+ ' FROM ' + UserControl.TableUsers.TableName +
+ ' WHERE ' + UserControl.TableUsers.FieldUserID + ' <> ' + IntToStr(UserControl.CurrentUser.UserID) +
+ ' AND ' + UserControl.TableUsers.FieldTypeRec + ' = ' + QuotedStr('U') +
+ ' ORDER BY ' + UserControl.TableUsers.FieldUserName);
+ MsgsForm.DSUsuarios.Open;
+
+ MsgsForm.Position := Self.FUserControl.UserSettings.WindowsPosition;
+ MsgsForm.ShowModal;
+ finally
+ end;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TVerifThread'} {$ENDIF}
+
+{ TVerifThread }
+
+procedure TUCVerificaMensagemThread.Execute;
+begin
+ if (Assigned(TUCApplicationMessage(AOwner).UserControl)) and (TUCApplicationMessage(AOwner).UserControl.CurrentUser.UserID <> 0) then
+ Synchronize(VerNovaMansagem);
+ Sleep(TUCApplicationMessage(AOwner).Interval);
+end;
+
+procedure TUCVerificaMensagemThread.VerNovaMansagem;
+begin
+ TUCApplicationMessage(AOwner).CheckMessages;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCCollectionItem'} {$ENDIF}
+
+{ TUCCollectionItem }
+
+function TUCExtraRightsItem.GetDisplayName: String;
+begin
+ Result := FormName + '.' + CompName;
+ if Result = '' then
+ Result := inherited GetDisplayName;
+end;
+
+procedure TUCExtraRightsItem.SetFormName(const Value: String);
+begin
+ if FFormName <> Value then
+ FFormName := Value;
+end;
+
+procedure TUCExtraRightsItem.SetCompName(const Value: String);
+begin
+ if FCompName <> Value then
+ FCompName := Value;
+end;
+
+procedure TUCExtraRightsItem.SetCaption(const Value: String);
+begin
+ if FCaption <> Value then
+ FCaption := Value;
+end;
+
+procedure TUCExtraRightsItem.SetGroupName(const Value: String);
+begin
+ if FGroupName <> Value then
+ FGroupname := Value;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCCollection'} {$ENDIF}
+
+{ TUCCollection }
+
+constructor TUCExtraRights.Create(UCBase: TUserControl);
+begin
+ inherited Create(TUCExtraRightsItem);
+ FUCBase := UCBase;
+end;
+
+function TUCExtraRights.Add: TUCExtraRightsItem;
+begin
+ Result := TUCExtraRightsItem(inherited Add);
+end;
+
+function TUCExtraRights.GetItem(Index: Integer): TUCExtraRightsItem;
+begin
+ Result := TUCExtraRightsItem(inherited GetItem(Index));
+end;
+
+procedure TUCExtraRights.SetItem(Index: Integer; Value: TUCExtraRightsItem);
+begin
+ inherited SetItem(Index, Value);
+end;
+
+function TUCExtraRights.GetOwner: TPersistent;
+begin
+ Result := FUCBase;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCRun'} {$ENDIF}
+
+{ TUCRun }
+
+procedure TUCExecuteThread.Execute;
+begin
+ while not self.Terminated do
+ begin
+ if TUserControl(AOwner).DataConnector.UCFindDataConnection then
+ Synchronize(UCStart);
+ Sleep(50);
+ end;
+end;
+
+procedure TUCExecuteThread.UCStart;
+begin
+ TUserControl(AOwner).Execute;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUControls'} {$ENDIF}
+
+{ TUCControls }
+
+function TUCControls.GetActiveForm: String;
+begin
+ Result := Owner.Name;
+end;
+
+function TUCControls.GetAccessType: String;
+begin
+ if not Assigned(UserControl) then
+ Result := ''
+ else
+ Result := UserControl.ClassName;
+end;
+
+procedure TUCControls.ListComponents(Form: String; List: TStrings);
+var
+ Contador: Integer;
+begin
+ List.Clear;
+ if not Assigned(UserControl) then
+ Exit;
+ for Contador := 0 to Pred(UserControl.ExtraRights.Count) do
+ if UpperCase(UserControl.ExtraRights[Contador].FormName) = UpperCase(Form) then
+ List.Append(UserControl.ExtraRights[Contador].CompName);
+end;
+
+procedure TUCControls.ApplyRights;
+var
+ FListObj: TStringList;
+ TempDS: TDataset;
+ Contador: Integer;
+ SQLStmt: String;
+ ExisteObj: Boolean;
+ String1: String;
+ String2: String;
+begin
+ // Apply Extra Rights
+
+ if not Assigned(UserControl) then
+ Exit;
+ with UserControl do
+ begin
+ if (UserControl.LoginMode = lmActive) and (CurrentUser.UserID = 0) then
+ Exit;
+
+ FListObj := TStringList.Create;
+ Self.ListComponents(Self.Owner.Name, FListObj);
+
+ if UserControl.DataConnector.UCFindDataConnection then
+ begin
+ // permissoes do usuario
+ SQLStmt := Format('SELECT %s AS UserID,' +
+ ' %s AS ObjName,' +
+ ' %s AS UCKey ' +
+ 'FROM %sEX ' +
+ 'WHERE %s = %d AND ' +
+ ' %s = %s AND ' +
+ ' %s = %s',
+ [TableRights.FieldUserID,
+ TableRights.FieldComponentName,
+ TableRights.FieldKey,
+ TableRights.TableName,
+ TableRights.FieldUserID,
+ CurrentUser.UserID,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID),
+ TableRights.FieldFormName,
+ QuotedStr(Self.Owner.Name)]);
+
+ TempDS := DataConnector.UCGetSQLDataset(SQLStmt);
+
+ for Contador := 0 to Pred(FListObj.Count) do
+ begin
+ UnlockEX(TCustomForm(Self.Owner), FListObj[Contador]);
+
+ ExisteObj := (TempDS.Locate('ObjName', FListObj[Contador], []));
+
+ case Self.UserControl.Criptografia of
+ cPadrao:
+ begin
+ String1 := Decrypt(TempDS.FieldByName('UCKey').AsString, EncryptKey);
+ String2 := TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString;
+ end;
+ cMD5:
+ begin
+ String1 := TempDS.FieldByName('UCKey').AsString;
+ String2 := MD5Sum(TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString);
+ end;
+ end;
+
+ if not ExisteObj or (String1 <> String2) then
+ LockEX(TCustomForm(Self.Owner), FListObj[Contador], NotAllowed = naInvisible);
+ end;
+ TempDS.Close;
+
+ //permissoes do grupo
+ SQLStmt := Format('SELECT' +
+ ' %s AS UserID,' +
+ ' %s AS ObjName,' +
+ ' %s AS UCKey ' +
+ 'FROM %sEX ' +
+ 'WHERE %s = %d AND ' +
+ ' %s = %s AND ' +
+ ' %s = %s',
+ [TableRights.FieldUserID,
+ TableRights.FieldComponentName,
+ TableRights.FieldKey,
+ TableRights.TableName,
+ TableRights.FieldUserID,
+ CurrentUser.Profile,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID),
+ TableRights.FieldFormName,
+ QuotedStr(Self.Owner.Name)]);
+
+ TempDS := DataConnector.UCGetSQLDataset(SQLStmt);
+
+ for contador := 0 to Pred(FListObj.Count) do
+ begin
+ ExisteObj := (TempDS.Locate('ObjName', FListObj[Contador], []));
+
+ case Self.UserControl.Criptografia of
+ cPadrao:
+ begin
+ String1 := Decrypt(TempDS.FieldByName('UCKey').AsString, EncryptKey);
+ String2 := TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString;
+ end;
+ cMD5:
+ begin
+ String1 := TempDS.FieldByName('UCKey').AsString;
+ String2 := MD5Sum(TempDS.FieldByName('UserID').AsString + TempDS.FieldByName('ObjName').AsString);
+ end;
+ end;
+
+ if ExisteObj and (String1 = String2) then
+ UnlockEX(TCustomForm(Self.Owner), FListObj[Contador]);
+ end;
+ TempDS.Close;
+ end
+ else
+ LockControls;
+ end;
+
+ FreeAndNil(FListObj);
+end;
+
+procedure TUCControls.LockControls;
+var
+ Contador: Integer;
+ FListObj: TStringList;
+begin
+ FListObj := TStringList.Create;
+ Self.ListComponents(Self.Owner.Name, FListObj);
+ for Contador := 0 to Pred(FListObj.Count) do
+ UserControl.LockEX(TCustomForm(Self.Owner), FListObj[Contador], NotAllowed = naInvisible);
+ FreeAndNil(FListObj);
+end;
+
+procedure TUCControls.Loaded;
+begin
+ inherited;
+ if not (csDesigning in ComponentState) then
+ begin
+ ApplyRights;
+ UserControl.AddUCControlMonitor(Self);
+ end;
+end;
+
+procedure TUCControls.SetGroupName(const Value: String);
+var
+ Contador: Integer;
+begin
+ if FGroupName = Value then
+ Exit;
+ FGroupName := Value;
+ if Assigned(UserControl) then
+ for Contador := 0 to Pred(UserControl.ExtraRights.Count) do
+ if UpperCase(UserControl.ExtraRights[Contador].FormName) = UpperCase(Owner.Name) then
+ UserControl.ExtraRights[Contador].GroupName := Value;
+end;
+
+destructor TUCControls.Destroy;
+begin
+ if not (csDesigning in ComponentState) then
+ if Assigned(UserControl) then
+ UserControl.DeleteUCControlMonitor(Self);
+
+ inherited Destroy;
+end;
+
+procedure TUCControls.SetUserControl(const Value: TUserControl);
+begin
+ FUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(self.UserControl);
+end;
+
+procedure TUCControls.Notification(AComponent: TComponent; AOperation: TOperation);
+begin
+ if AOperation = opRemove then
+ if AComponent = FUserControl then
+ FUserControl := nil;
+
+ inherited Notification(AComponent, AOperation);
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCGUID'} {$ENDIF}
+
+{ TUCGUID }
+
+class function TUCGUID.EmptyGUID: TGUID;
+begin
+ Result := FromString('{00000000-0000-0000-0000-000000000000}');
+end;
+
+class function TUCGUID.EqualGUIDs(GUID1, GUID2: TGUID): Boolean;
+begin
+ Result := IsEqualGUID(Guid1, Guid2);
+end;
+
+class function TUCGUID.FromString(Value: String): TGUID;
+begin
+ Result := StringToGuid(Value);
+end;
+
+class function TUCGUID.IsEmptyGUID(GUID: TGUID): Boolean;
+begin
+ Result := EqualGuids(Guid, EmptyGuid);
+end;
+
+class function TUCGUID.NovoGUID: TGUID;
+var
+ GUID: TGUID;
+begin
+ CreateGUID(GUID);
+ Result := GUID;
+end;
+
+class function TUCGUID.NovoGUIDString: String;
+begin
+ Result := ToString(NovoGUID);
+end;
+
+class function TUCGUID.ToQuotedString(GUID: TGUID): String;
+begin
+ Result := QuotedStr(ToString(Guid));
+end;
+
+class function TUCGUID.ToString(GUID: TGUID): String;
+begin
+ Result := GuidToString(Guid);
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUSERLOGGED'} {$ENDIF}
+{ TUserLogged }
+
+procedure TUCUsersLogged.AddCurrentUser;
+var
+ SQLStmt: String;
+begin
+ if not Active then
+ Exit;
+
+ with FUserControl do
+ begin
+ CurrentUser.IDLogon := TUCGUID.NovoGUIDString;
+ SQLStmt := Format('INSERT INTO %s (%s, %s, %s, %s, %s) Values( %s, %d, %s, %s, %s)',
+ [TableUsersLogged.TableName,
+ TableUsersLogged.FieldLogonID,
+ TableUsersLogged.FieldUserID,
+ TableUsersLogged.FieldApplicationID,
+ TableUsersLogged.FieldMachineName,
+ TableUsersLogged.FieldData,
+ QuotedStr(CurrentUser.IDLogon),
+ CurrentUser.UserID,
+ QuotedStr(ApplicationID),
+ QuotedStr(GetLocalComputerName),
+ QuotedStr(FormatDateTime('dd/mm/yy hh:mm', now))]);
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+ end;
+end;
+
+procedure TUCUsersLogged.Assign(Source: TPersistent);
+begin
+ if Source is TUCUsersLogged then
+ begin
+ Self.Active := TUCUsersLogged(Source).Active;
+ Self.MultipleLogin := TUCUsersLogged(Source).MultipleLogin;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUsersLogged.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ FUserControl := TUserControl(AOwner);
+ Self.FAtive := True;
+ Self.fMultipleLogin := True;
+end;
+
+procedure TUCUsersLogged.CriaTableUserLogado;
+var
+ SQLStmt: String;
+begin
+ if not Active then
+ Exit;
+
+ with FUserControl.TableUsersLogged do
+ SQLStmt := Format('CREATE TABLE %s (%s %s(38), %s %s, %s %s(50), %s %s(50), %s %s(14))',
+ [TableName,
+ FieldLogonID,
+ FUserControl.UserSettings.Type_Char,
+
+ FieldUserID,
+ FUserControl.UserSettings.Type_Int,
+
+ FieldApplicationID,
+ FUserControl.UserSettings.Type_VarChar,
+
+ FieldMachineName,
+ FUserControl.UserSettings.Type_VarChar,
+
+ FieldData,
+ FUserControl.UserSettings.Type_VarChar]);
+ if Assigned(FUserControl.DataConnector) then
+ FUserControl.DataConnector.UCExecSQL(SQLStmt);
+end;
+
+procedure TUCUsersLogged.DelCurrentUser;
+var
+ SQLStmt: String;
+begin
+ if not Active then
+ Exit;
+
+ if Assigned(FUserControl.DataConnector) = False then
+ Exit;
+
+ with FUserControl do
+ begin
+ SQLStmt := Format('DELETE FROM %s WHERE %s = %s',
+ [TableUsersLogged.TableName,
+ TableUsersLogged.FieldLogonID,
+ QuotedStr(CurrentUser.IdLogon)]);
+
+ if Assigned(DataConnector) then
+ DataConnector.UCExecSQL(SQLStmt);
+ end;
+end;
+
+destructor TUCUsersLogged.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TUCUsersLogged.UsuarioJaLogado(ID: Integer): Boolean;
+var
+ SQLStmt: String;
+ FDataset: TDataset;
+begin
+ Result := False;
+ if Assigned(FUserControl.DataConnector) = False then
+ Exit;
+
+ with FUserControl do
+ begin
+ SQLStmt := Format('SELECT * FROM %s WHERE %s = %s',
+ [TableUsersLogged.TableName,
+ TableUsersLogged.FieldUserID,
+ QuotedStr(IntToStr(ID))]);
+
+ if Assigned(DataConnector) then
+ begin
+ fDataSet := DataConnector.UCGetSQLDataset(SQLStmt);
+ Result := not (fDataSet.IsEmpty);
+ end;
+ end;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCUserLogoff'} {$ENDIF}
+
+{ TUCUserLogoff Por Vicente Barros Leonel }
+
+procedure TUCUserLogoff.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserLogoff then
+ begin
+ Self.MenuItem := TUCUserLogoff(Source).MenuItem;
+ Self.Action := TUCUserLogoff(Source).Action;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUserLogoff.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCUserLogoff.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TUCUserLogoff.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ begin
+ Self.MenuItem := nil;
+ Value.FreeNotification(Self.Action);
+ end;
+end;
+
+procedure TUCUserLogoff.SetMenuItem(const Value: TMenuItem);
+begin
+ FMenuItem := Value;
+ if Value <> nil then
+ begin
+ Self.Action := nil;
+ Value.FreeNotification(Self.MenuItem);
+ end;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCCurrentUser'} {$ENDIF}
+{ TUCCurrentUser }
+
+constructor TUCCurrentUser.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+destructor TUCCurrentUser.Destroy;
+begin
+ if Assigned(FPerfilUsuario) then
+ SysUtils.FreeAndNil(FPerfilUsuario);
+ if Assigned(FPerfilGrupo) then
+ SysUtils.FreeAndNil(FPerfilGrupo);
+ inherited;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+end.
diff --git a/official/2.31RC1/Source/UCDataConnector.pas b/official/2.31RC1/Source/UCDataConnector.pas
new file mode 100644
index 0000000..5c73a01
--- /dev/null
+++ b/official/2.31RC1/Source/UCDataConnector.pas
@@ -0,0 +1,25 @@
+unit UCDataConnector;
+
+interface
+
+{.$I 'UserControl.inc'}
+
+uses
+ Classes,
+ DB;
+
+type
+ TUCDataConnector = class(TComponent)
+ public
+ procedure UCExecSQL(FSQL: String); virtual; abstract;
+ function UCGetSQLDataset(FSQL: String): TDataset; dynamic; abstract;
+ function UCFindTable(const Tablename: String): Boolean; virtual; abstract;
+ function UCFindDataConnection: Boolean; virtual; abstract;
+ function GetDBObjectName: String; virtual; abstract;
+ function GetTransObjectName: String; virtual; abstract;
+ end;
+
+implementation
+
+end.
+
diff --git a/official/2.31RC1/Source/UCDataInfo.pas b/official/2.31RC1/Source/UCDataInfo.pas
new file mode 100644
index 0000000..3ac4572
--- /dev/null
+++ b/official/2.31RC1/Source/UCDataInfo.pas
@@ -0,0 +1,247 @@
+unit UCDataInfo;
+
+interface
+
+uses
+ Classes;
+
+type
+ TUCTableUsers = class(TPersistent)
+ private
+ FEmail: String;
+ FTypeRec: String;
+ FUserID: String;
+ FPrivileged: String;
+ FUserName: String;
+ FTable: String;
+ FProfile: String;
+ FLogin: String;
+ FPassword: String;
+ FKey: String;
+ fDateExpired: String;
+ fUserExpired: String;
+ fFieldUserDaysSun: String;
+ fFieldUserInative: String;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property FieldUserID: String read FUserID write FUserID;
+ property FieldUserName: String read FUserName write FUserName;
+ property FieldLogin: String read FLogin write FLogin;
+ property FieldPassword: String read FPassword write FPassword;
+ property FieldEmail: String read FEmail write FEmail;
+ property FieldPrivileged: String read FPrivileged write FPrivileged;
+ property FieldTypeRec: String read FTypeRec write FTypeRec;
+ property FieldProfile: String read FProfile write FProfile;
+ property FieldKey: String read FKey write FKey;
+ property FieldDateExpired: String read fDateExpired write fDateExpired; { By Vicente Barros Leonel }
+ property FieldUserExpired: String read fUserExpired write fUserExpired; { By vicente barros leonel }
+ property FieldUserDaysSun: String read fFieldUserDaysSun write fFieldUserDaysSun; { By vicente barros leonel }
+ property FieldUserInative: String read fFieldUserInative write fFieldUserInative; { By vicente barros leonel }
+ property TableName: String read FTable write FTable;
+ end;
+
+ TUCTableRights = class(TPersistent)
+ private
+ FUserID: String;
+ FFormName: String;
+ FModule: String;
+ FTable: String;
+ FComponentName: String;
+ FKey: String;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property FieldUserID: String read FUserID write FUserID;
+ property FieldModule: String read FModule write FModule;
+ property FieldComponentName: String read FComponentName write FComponentName;
+ property FieldFormName: String read FFormName write FFormName;
+ property FieldKey: String read FKey write FKey;
+ property TableName: String read FTable write FTable;
+ end;
+
+ TUCTableUsersLogged = class(TPersistent)
+ private
+ FTableName: String;
+ FData: String;
+ FApplicationID: String;
+ FUserID: String;
+ FLogonID: String;
+ FMachineName: String;
+ { private declarations }
+ protected
+ { protected declarations }
+ public
+ { public declarations }
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ { published declarations }
+ property FieldLogonID: String read FLogonID write FLogonID;
+ property FieldUserID: String read FUserID write FUserID;
+ property FieldApplicationID: String read FApplicationID write FApplicationID;
+ property FieldMachineName: String read FMachineName write FMachineName;
+ property FieldData: String read FData write FData;
+ property TableName: String read FTableName write FTableName;
+ end;
+
+ TUCTableHistorico = class(TPersistent)
+ private
+ FTable: String;
+ FApplicationID: String;
+ FUserID: String;
+ fDateEvent: String;
+ fFieldForm: String;
+ fFieldEvent: String;
+ fFieldObs: String;
+ fCaptionForm: string;
+ fEventTime: String;
+ fFieldTableName: String;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property TableName : String read FTable write FTable; // nome da tabela
+ property FieldApplicationID : String read FApplicationID write FApplicationID;
+ property FieldUserID : String read FUserID write FUserID;
+ property FieldEventDate : String read fDateEvent write fDateEvent;
+ property FieldEventTime : String read fEventTime Write fEventTime;
+ property FieldForm : String read fFieldForm write fFieldForm;
+ property FieldCaptionForm : string read fCaptionForm write fCaptionForm;
+ Property FieldEvent : String read fFieldEvent write fFieldEvent;
+ property FieldObs : String read fFieldObs write fFieldObs;
+ property FieldTableName : String read fFieldTableName write fFieldTableName; // grava o nome da tabela monitorada
+ end;
+
+implementation
+
+{ TUCTableRights }
+
+procedure TUCTableRights.Assign(Source: TPersistent);
+begin
+ if Source is TUCTableRights then
+ begin
+ Self.FieldUserID := TUCTableRights(Source).FieldUserID;
+ Self.FieldModule := TUCTableRights(Source).FieldModule;
+ Self.FieldComponentName := TUCTableRights(Source).FieldComponentName;
+ Self.FieldFormName := TUCTableRights(Source).FieldFormName;
+ Self.FieldKey := TUCTableRights(Source).FieldKey;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCTableRights.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCTableRights.Destroy;
+begin
+
+ inherited;
+end;
+
+{ TUCTableUsers }
+
+procedure TUCTableUsers.Assign(Source: TPersistent);
+begin
+ if Source is TUCTableUsers then
+ begin
+ Self.FieldUserID := TUCTableUsers(Source).FieldUserID;
+ Self.FieldUserName := TUCTableUsers(Source).FieldUserName;
+ Self.FieldLogin := TUCTableUsers(Source).FieldLogin;
+ Self.FieldPassword := TUCTableUsers(Source).FieldPassword;
+ Self.FieldEmail := TUCTableUsers(Source).FieldEmail;
+ Self.FieldPrivileged := TUCTableUsers(Source).FieldPrivileged;
+ Self.FieldProfile := TUCTableUsers(Source).FieldProfile;
+ Self.FieldKey := TUCTableUsers(Source).FieldKey;
+ Self.FieldDateExpired := TUCTableUsers(Source).FieldDateExpired; {By Vicente Barros Leonel}
+ Self.FieldUserExpired := TUCTableUsers(Source).FieldUserExpired; {By Vicente Barros Leonel}
+ Self.FieldUserDaysSun := TUCTableUsers(Source).FieldUserDaysSun; { By vicente barros leonel }
+ Self.FieldUserInative := TUCTableUsers(Source).FieldUserInative; { By vicente barros leonel }
+ Self.TableName := TUCTableUsers(Source).TableName;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCTableUsers.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCTableUsers.Destroy;
+begin
+ inherited;
+end;
+
+{ TUCTableUsersLogged }
+
+procedure TUCTableUsersLogged.Assign(Source: TPersistent);
+begin
+ if Source is TUCTableUsersLogged then
+ begin
+ Self.FieldLogonID := TUCTableUsersLogged(Source).FieldLogonID;
+ Self.FieldUserID := TUCTableUsersLogged(Source).FieldUserID;
+ Self.FieldApplicationID := TUCTableUsersLogged(Source).FieldApplicationID;
+ Self.FieldMachineName := TUCTableUsersLogged(Source).FieldMachineName;
+ Self.FieldData := TUCTableUsersLogged(Source).FieldData;
+ Self.TableName := TUCTableUsersLogged(Source).TableName;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCTableUsersLogged.Create(AOwner: TComponent);
+begin
+
+end;
+
+destructor TUCTableUsersLogged.Destroy;
+begin
+ inherited;
+end;
+
+{ TUCTableHistorico }
+
+procedure TUCTableHistorico.Assign(Source: TPersistent);
+begin
+ if Source is TUCTableHistorico then
+ begin
+ Self.FieldApplicationID := TUCTableHistorico(Source).FieldApplicationID;
+ Self.FieldUserID := TUCTableHistorico(Source).FieldUserID;
+ Self.FieldEventDate := TUCTableHistorico(Source).FieldEventDate;
+ Self.TableName := TUCTableHistorico(Source).TableName;
+ Self.FieldForm := TUCTableHistorico(Source).FieldForm;
+ Self.FieldEvent := TUCTableHistorico(Source).FieldEvent;
+ Self.FieldObs := TUCTableHistorico(Source).FieldObs;
+ Self.FieldCaptionForm := TUCTableHistorico(Source).FieldCaptionForm;
+ Self.FieldEventTime := TUCTableHistorico(Source).FieldEventTime;
+ Self.FieldTableName := TUCTableHistorico(Source).FieldTableName;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCTableHistorico.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCTableHistorico.Destroy;
+begin
+ inherited;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/UCEMailForm_U.dfm b/official/2.31RC1/Source/UCEMailForm_U.dfm
new file mode 100644
index 0000000..2abfdac
--- /dev/null
+++ b/official/2.31RC1/Source/UCEMailForm_U.dfm
@@ -0,0 +1,151 @@
+object UCEMailForm: TUCEMailForm
+ Left = 450
+ Top = 464
+ BorderStyle = bsDialog
+ Caption = 'Envio de Email'
+ ClientHeight = 34
+ ClientWidth = 303
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ FormStyle = fsStayOnTop
+ OldCreateOrder = False
+ Position = poScreenCenter
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 303
+ Height = 34
+ Align = alClient
+ BevelOuter = bvLowered
+ Color = clWhite
+ TabOrder = 0
+ object img: TImage
+ Left = 8
+ Top = 3
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0098300000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF009830000098300000FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00D76733009830000098300000983000009830000098300000DB8D
+ 630098300000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7673300FBC4A100FFB3
+ 8B00FCAF8800F8AB8300F0A27A00E89A7100E092680098300000FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00D7673300FBC4A100FFB38B00FFB38B00FFB38B00F8AB8300F0A2
+ 7A00E89A7100E092680098300000FFFFFF00C7B2A30069473100694731006947
+ 3100694731006947310069473100694731006947310069473100694731006947
+ 310069473100694731006947310069473100B7A29300D7673300FBC4A100FFB3
+ 8B00FFB38B00FFB38B00FFB38B00F8AB8300F0A27A00E89A7100E09268009830
+ 0000C7B2A300DBC9BF00B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A29300B7A2
+ 9300DDC5C200D7673300FBC4A100FFB38B00FFB38B00FFB38B00FFB38B00FFB3
+ 8B00F8AB8300F0A27A0098300000FFFFFF00C7B2A300DBC9BF00B7A29300E4D7
+ CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7
+ CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00E4D7CF00D7673300FBC4A100FBC4
+ A100FBC4A100FBC4A100FBC4A100FBC4A100FFB38B0098300000FFFFFF00FFFF
+ FF00C7B2A300DECEC500DECEC500B7A29300E9DED700E9DED700E9DED700E9DE
+ D700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DED700E9DE
+ D700E9DED700D7673300D7673300D7673300D7673300D7673300D7673300FBC4
+ A10098300000FFFFFF00FFFFFF00FFFFFF00C7B2A300E2D4CC00E2D4CC00E2D4
+ CC00B7A29300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4
+ DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4
+ DF00DDC5C200E2D4CC00D767330098300000B7A29300FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300E6D9D200E6D9D200E6D9D200E6D9D200B7A29300F0E9E500F0E9
+ E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9E500F0E9
+ E500F0E9E500F0E9E500F0E9E500B7A29300E6D9D200E6D9D20098300000DDC5
+ C20069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300EADFD900EADFD900EADF
+ D900EADFD900EADFD900B7A29300F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EF
+ EC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00F4EFEC00B7A29300EADF
+ D900EADFD900EADFD900EADFD900B7A2930069473100FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A2
+ 9300F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4F200F8F4
+ F200F8F4F200B7A29300EDE4DF00EDE4DF00EDE4DF00EDE4DF00EDE4DF00B7A2
+ 930069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300F0E8E400F0E8E400F0E8
+ E400F0E8E400F0E8E400F0E8E400B7A29300B7A29300FCFAF900FCFAF900FCFA
+ F900FCFAF900FCFAF900FCFAF900FCFAF900B7A29300B7A29300F0E8E400F0E8
+ E400F0E8E400F0E8E400F0E8E400B7A2930069473100FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300F3EDE900F3EDE900F3EDE900F3EDE900F3EDE900B7A29300DDC5
+ C200DDC5C200B7A29300DDC5C200FFFFFF00FFFFFF00FFFFFF00DDC5C200B7A2
+ 9300DDC5C200DDC5C200B7A29300F3EDE900F3EDE900F3EDE900F3EDE900B7A2
+ 930069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300F6F1EF00F6F1EF00F6F1
+ EF00F6F1EF00B7A29300DDC5C200AFE0FB00A7DDFB00A0DAFC00C7B2A300B7A2
+ 9300B7A29300B7A29300C7B2A300DDC5C2006AC4FD0062C0FD005ABDFD00B7A2
+ 9300F6F1EF00F6F1EF00F6F1EF00B7A2930069473100FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300F9F6F400F9F6F400F9F6F400B7A29300DDC5C200BDE7FB00B6E3
+ FB00AFE0FB00A7DDFB00A0DAFC0099D7FC0091D4FC008AD1FC0082CEFC007ACA
+ FD0072C7FD006AC4FD0062C0FD005ABDFD00B7A29300F9F6F400F9F6F400B7A2
+ 930069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300FCFBFA00FCFBFA00B7A2
+ 9300C8B3A400CCEDFA00C5EAFB00BDE7FB00B6E3FB00AFE0FB00A7DDFB00A0DA
+ FC0099D7FC0091D4FC008AD1FC0082CEFC007ACAFD0072C7FD006AC4FD0062C0
+ FD005ABDFD00B7A29300FCFBFA00B7A2930069473100FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300FFFFFF00B8A39400DDC5C200DBF3FA00D3F0FA00CCEDFA00C5EA
+ FB00BDE7FB00B6E3FB00AFE0FB00A7DDFB00A0DAFC0099D7FC0091D4FC008AD1
+ FC0082CEFC007ACAFD0072C7FD006AC4FD0062C0FD005ABDFD00B7A29300FFFF
+ FF0069473100FFFFFF00FFFFFF00FFFFFF00C7B2A300B7A29300DDC5C200DBF3
+ FA00DBF3FA00DBF3FA00D3F0FA00CCEDFA00C5EAFB00BDE7FB00B6E3FB00AFE0
+ FB00A7DDFB00A0DAFC0099D7FC0091D4FC008AD1FC0082CEFC007ACAFD0072C7
+ FD006AC4FD0062C0FD005ABDFD00B7A2930069473100FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2
+ FA00D0EFFA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00A7DDFB00A0DAFC0099D7
+ FC0091D4FC008AD1FC0082CEFC007ACAFD0072C7FD006AC4FD0062C0FD00B7A2
+ 930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DBF3
+ FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EFFA00C8EBFA00C1E8
+ FB00BAE5FB00B2E2FB00ABDFFB00A4DBFC009CD8FC0095D6FC008ED3FC0086CF
+ FC007ECCFD0076C9FD00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3
+ FA00DBF3FA00D7F2FA00D0EFFA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00ABDF
+ FB00A4DBFC009CD8FC0095D6FC008ED3FC0086CFFC00BCA7980069473100FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EF
+ FA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00ABDFFB00A4DBFC009CD8FC0095D6
+ FC00BBA6970073533E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300DBF3FA00DBF3
+ FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EFFA00C8EBFA00C1E8FB00BAE5
+ FB00B2E2FB00ABDFFB00A4DBFC00B7A2930069473100FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00C7B2A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3
+ FA00D7F2FA00D0EFFA00C8EBFA00C1E8FB00BAE5FB00B2E2FB00B7A293006947
+ 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2
+ A300DBF3FA00DBF3FA00DBF3FA00DBF3FA00DBF3FA00D7F2FA00D0EFFA00C8EB
+ FA00C1E8FB00B7A2930069473100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C7B2A300C7B2A300C7B2A300C7B2
+ A300C7B2A300C7B2A300C7B2A300C7B2A300B7A2930069473100FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ object lbStatus: TLabel
+ Left = 48
+ Top = 14
+ Width = 66
+ Height = 14
+ Caption = 'Status email'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -12
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ end
+end
diff --git a/official/2.31RC1/Source/UCEMailForm_U.pas b/official/2.31RC1/Source/UCEMailForm_U.pas
new file mode 100644
index 0000000..79101cb
--- /dev/null
+++ b/official/2.31RC1/Source/UCEMailForm_U.pas
@@ -0,0 +1,34 @@
+unit UCEMailForm_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ Controls,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ StdCtrls;
+
+type
+ TUCEMailForm = class(TForm)
+ Panel1: TPanel;
+ img: TImage;
+ lbStatus: TLabel;
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ UCEMailForm: TUCEMailForm;
+
+implementation
+
+{$R *.dfm}
+
+end.
+
diff --git a/official/2.31RC1/Source/UCEditorForm_U.dfm b/official/2.31RC1/Source/UCEditorForm_U.dfm
new file mode 100644
index 0000000..53cd4ad
--- /dev/null
+++ b/official/2.31RC1/Source/UCEditorForm_U.dfm
@@ -0,0 +1,1585 @@
+object UCEditorForm: TUCEditorForm
+ Left = 237
+ Top = 128
+ BorderStyle = bsDialog
+ Caption = 'Configura'#231#227'o UserControl'
+ ClientHeight = 524
+ ClientWidth = 594
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ Position = poMainFormCenter
+ OnClose = FormClose
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+ object pnlBotoes: TPanel
+ Left = 0
+ Top = 479
+ Width = 594
+ Height = 45
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 0
+ object btnOK: TBitBtn
+ Left = 219
+ Top = 7
+ Width = 75
+ Height = 25
+ TabOrder = 0
+ Kind = bkOK
+ end
+ object btnClose: TBitBtn
+ Left = 299
+ Top = 7
+ Width = 75
+ Height = 25
+ Caption = '&Fechar'
+ TabOrder = 1
+ Kind = bkClose
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 0
+ Width = 594
+ Height = 73
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 1
+ object lbComponente: TLabel
+ Left = 5
+ Top = 27
+ Width = 230
+ Height = 19
+ Alignment = taCenter
+ AutoSize = False
+ Caption = 'Configura'#231#227'o B'#225'sica'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlack
+ Font.Height = -16
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 220
+ Top = 0
+ Width = 374
+ Height = 73
+ Align = alRight
+ AutoSize = True
+ Picture.Data = {
+ 0A544A504547496D616765FE200000FFD8FFE000104A46494600010101004800
+ 480000FFDB0043000302020302020303030304030304050805050404050A0707
+ 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17
+ 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414
+ 1414141414141414141414141414141414141414141414141414141414141414
+ 14141414141414141414141414FFC00011080050017603012200021101031101
+ FFC4001F0000010501010101010100000000000000000102030405060708090A
+ 0BFFC400B5100002010303020403050504040000017D01020300041105122131
+ 410613516107227114328191A1082342B1C11552D1F02433627282090A161718
+ 191A25262728292A3435363738393A434445464748494A535455565758595A63
+ 6465666768696A737475767778797A838485868788898A92939495969798999A
+ A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6
+ D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301
+ 01010101010101010000000000000102030405060708090A0BFFC400B5110002
+ 0102040403040705040400010277000102031104052131061241510761711322
+ 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728
+ 292A35363738393A434445464748494A535455565758595A636465666768696A
+ 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7
+ A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3
+ E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD52
+ DA2968A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2
+ 800A28A280129314EA2801980690A8A7919A6918A0040A29703DE8A5C52B00A3
+ 18A5A414B4C0422A3755352D3185260549A38D8739ACBBB82D70776EAD891335
+ 977908C1AC66B4378339CBE834C19DFE67E15CF5F43A1027779D5D06A76FC371
+ 5C86A96F8278AF36ABB743D3A4AFD4A772BE1B04EE37159D31F0B8CE5AE47E35
+ 46FE2C678AE7EF58464F19AF32752DD11EA429DFED33A573E14EED723F1A88BF
+ 84FF00BD75F9D7097BAC476F9DD139C7A62B3EF3C516569A72DE3966466D8100
+ F9B77A1F4AE7757FBA8E85497F333D2B7F84FF00BD75F9D1BFC27FDEBAFCEBC8
+ 1BE22582FF00CBB5D9FA22FF00F1552699E3FD3753BF8ACD56686690E17CD500
+ 13E9C1A9F6DFDD43F64BF999EB7BFC27FDEBAFCE8DFE13FEF5D7E75E47A87C43
+ D1F4FBD92D5A5925963387F2937007D2A23F12F460325A751D7988D1EDBFBA83
+ D92FE667B0EFF09FF7AEBF3A37F84FFBD75F9D7954FE39D1EDB4A8B507B922DE
+ 5E170A771F5E2AAC7F137C3EE3FE3EE45FADBC9FE147B6FEEA0F64BF999EBFBF
+ C27FDEBAFCE8DFE13FEF5D7E75E5FA678CB47D61E45B5BD5768D4BB0652B803A
+ 9E40A84F8FFC3C1CAFF6ADBE41C7DEA3DB7F7507B15FCCFEF3D5B7F84FFBD75F
+ 9D1BFC27FDEBAFCEBCD2CFC57A3DFCAB1C1A9DAC9231C2A0946E27D00A9E7D77
+ 4DB598C336A16D14A3AA3CCA187E19A3DB7F7507B15FCCFEF3D1E27F0A6E386B
+ AE9EB4579D5BF88F4A0E4FF695A631FF003D97FC68AB557FBA84E8FF00799F6F
+ D14515F667C48578AFED47FB58F843F64AF0BE8FAEF8BEC757D42DB54BC36504
+ 3A34514B287085CB1124B18DB85C6413C91C57B557E667FC16CF5069BC35F08B
+ 41882B5C5FEA779346A7824A2429D4F006661D7DBDE803F49347D622D6742B2D
+ 5638E5B782EAD92E563B850AE8ACA18061938201E79AF1CFD96BF6BDF08FED71
+ A46BFA978434AD774DB5D1AE23B69DB5B82188C8EEA5BE4F2E59338039CE3A8E
+ B5DFFC43BB83C1DF077C4B72A425B697A15CC80C996C2476EC79EE785AFCB9FD
+ 85F46F88FF00F0EF5F8D3A97C286963F1B5C6BE21B56B363F6A31C515B3CC21F
+ 493CB91F6E3924903E6DB401FAF1457E7A7FC13CEC3C3BE25D3EC7C6F17C70F8
+ 87ACF8CB44B694F8C3C19E24D51A4B7498C6EAE4DB3297DAAE772C9B9892B83B
+ 492A3C93E14FC51D5FF6CAD5BC69E37F1EF8B3E31693A1C7A8BD8E83A1FC32D3
+ 2FDED2C91515834B25BC32234A1644E1BE6E493F2B28A00FD67A2BF29A4F8C1F
+ 1E3C3DFB0B7C7AB3F185CF8E344D47C2F7FA58F0D78BF58B6BBD2F52BCB59B50
+ 4460257092310A9F31C96027DAC71815EFFF00B047C1DF889ACF87BC13F193C7
+ FF00167C41E26BBD4745096DE1E9EE5E4B38ED9D0089E42CC77CC400ECE46496
+ 20938CD007D91E24F12E95E0ED06FB5BD7350B6D2B48B189A7BABDBB90471428
+ 064B331E00AF8E6EBFE0AADF0FF56D5EEED3C0FE03F1F7C42B5B46227D4743D1
+ F740076203307C1E7EF2AF6FC392FF0082CF78BF57D13F67EF0BE8963349069B
+ AD6BAA97EC9902448E26748D8FA17C363D631E86BECDF82BF0DFC35F0A3E1778
+ 73C33E13B6B78744B2B2896192DD028B825413331FE2673F31249249EB4009F0
+ 57E2F693F1D3E1D69BE31D1AC752D2ECEF5E68CD8EB10082EEDDE295A3749630
+ CC15B284E327820F7AEE335F17FF00C144BF683F1B7C3DBCF865F0C3E1BEA3FD
+ 85E2CF885AA8B01AC0452D6B1192288042DC2B33CCBF375011B182411E47FB4F
+ 7C16F887FB117C2FB5F8B3E09F8E5E3AF10EADA75EDB26B361E28D40DE595F89
+ 1F696111E9F391C3163866C303C900FD2DA4AFCCBFDB1BE36FC4AF1F7C4AFD95
+ D3E17F89F56F085FF8DAC2DB54FB35B5ECB1DA319DADDD3ED31290264405B72B
+ 020AEE183922B8BFDB17E1FF00C62FD892F3C13F12346F8EFE2DF19EA1A96A62
+ CEEECF549A4F265976F981443E632344C10AF9647181827B007E9BFC48F8C1E0
+ EF84506972F8BF5EB7D15755BB5B1B1598333DCCEC40088AA092791D05762391
+ 5F969FF0534F86773AEFED57F01ED23F1BF88ADCF8C75986D16CD6EDBECFA291
+ 35A42B7166BD23918BB3B11CEE45356FF6EDB7F897FB3AFF00C339F81FC0DF16
+ 3C657DAB6A5AAEA513EABABEB33196FA469ECBC95BA2A40963432950AC080A48
+ C726803F5069335F9BDFB456ADF12BF61BF83DA7787343F893ACF8E3E23FC4BD
+ 6E3B74D775C3BFEC0422897ECE1CB040CD246173C28662390083F685FD9BBE24
+ 7ECABF042EFE2D785FE3F78F759F19E83E45CEAD0EB5A89B8D3EFD5A54470903
+ 676805C1C397C80470482003EBFF00DA37F6A3F0BFECC96BE179BC4BA66B5AA7
+ FC245A80D32CE3D1608A57129008DC1E44E39ED93ED5EC40EE00FAD7E5D7ED95
+ F14A4F8E3E0FFD8D3C4374134F9FC4FAD4379736711E165DF6A92140792AACED
+ 827B30CF5AFD451C28FA5007C6BE23FF0082A37C3BD03E2078ABC1F0780FE226
+ BDAA786B51B8D32F9F46D22DEE2212452B44CCA45C03B4B2360B0048EC3A57AC
+ 7ECC7FB63FC3DFDABACF566F07C9A8596A5A5328BCD27598161BA895890AF856
+ 752A4823218E08E71919F80BF65EF8A7E36F02FED0DFB53788FC01F0EA6F88FA
+ A5DF8A5D1F468AF85AC90C4F777CDE76E28DB82B0452A00CEFCE462BDC7F634F
+ D9DBC69F0C75BF8C5F1BFE30DCE9FF000DF57F1847707ECF1DC4489A5C72C865
+ 92777DC5130DB3682C4FCA77726803EFEC8CE296BF217F68DF8A3F0E349F873A
+ EDFF00C26F8C7F19BC75E3ED29A37FF84861D5EF64B0B502450E6E242B1C4232
+ ACC079631B99474241EE3E287ED25F17BE21F81FF664F857E1EF14CFE1CF177C
+ 45D2ADEF75AF135B7EEEE7C973B15D597054ED59246D855890002B93900FD41C
+ F04D78EFECF9FB517863F692BAF1941E1AD3359B0FF845B51FECCBC93568228D
+ 25972C0F945247C81B3BED3F30E39AE6BE05FEC872FC09F13C5ADDBFC5AF883E
+ 2B46B5782EF4AF12EAA2EACA66603122C7B46C652383927048CF35F99BF077F6
+ 88F137C38F83DE38F0A783E5934CF1DFC4EF1FCFA45B7882590DB5B69EB88449
+ 209BA47266E0004728096E0AAE403F6D5D720D52B88F703C57CFDAAF8234AF81
+ 3FB2F47E1FF881F1B3C43A34AE623A978E6F35A73A8CB3EE5774B692732140C1
+ 0A2A2293B37705896AFCF4F8FDF1D74CF056A3E0DF107ECF7F10FE2B6B178DAA
+ ADADE6B5E23BFBC9748BF623E58D85C01E63B1524AEDC60138CE312D5CA4EC7E
+ B6EA30641E335C9EAD66E413B49AF953E367C4AF885FB467ED8D3FECFF00E02F
+ 175E7C3FF0DF8774F1A9788F5CD24EDBE986D898AC520C1400CF120008F9998B
+ 6E002D79978CFE19EB3FB3EFEDA1F03BC1BE1AF8AFE3ED6348F105D25CEA969A
+ FEBCF32CCB14A494288114C6EAAC36B03DF9AE49D1E6D2E75C2B72EB63EC8D42
+ D5D890149FA5731AADAC9129DC8471DEBE5FF881F14F52F8E3FB58F8DBC0B7BA
+ EF8EF41F875E0D4F25ECFE1DE9D753DEDF5D0655633BDBC6EC91EEDE0646308B
+ 8192586A7ECFD71F107C3DF1C7C55E10B88FE206BBF0926D3FED3A46B7E3AD2E
+ EE1B8B49D550F95E74D1AE464C8BB78076A900739F3AA60DA8B95CF4A963173A
+ 8DB4D8F55D6530589FA570177765361203C6AECE14F4278AF40D7ADCBB380E40
+ 071D6B86D6745DD1A8128048DC0AB7415E1BDCF711CD6A17AD711A284085776E
+ 61DF3D3F2ACCFB535A5CDA4A8C77ACE9839E4722AD5E6892C793F6E7EBCE0D63
+ B69ACB9B87BB6985BCE8BB59F1927E607F4350C64F1EADE5CD70CD1ABC924E58
+ B9EA0066CE3EA71F954324E6595DB2CB131385CF41DA9B2F872EA646BC8A6115
+ BC929032C383DFF0EB43F873528ECBED4D707C8CECDF818CF5C50324D52F19B4
+ 9B488A868E3B99064807AAA9C7EA6A2BBD596E632208DA06F309C87E36E381D3
+ B63AD2CFA705F0FB34B3B3CA6E7098C7DEDA327F2C7D6A80D12F0410CEB3AEC9
+ 7215830EB9C629202DDADE4B0A4C530ED246C8FB8F6EA7F90FCAAB69D7F6B15A
+ 8596373212C77AB7418C0E3A7506A44D2AE6D512E259C3444942A1C020E3BFF9
+ E6B3EE74B9AD4C5FBC0AB28CA96C607247269812C37522CA926F3BD1832F3DFA
+ 8A20BCB792FEE1EEFCDD8DF364364E4E3D7E8696E743BFB7754255B70CA32302
+ AC0F420FF9EB556F6C26B3BC68DDB6C8A76B0E281D84D4DD3CD7113EE8836109
+ E0E314555786691701867D4D154897B9FB25451457DD9F0615F317EDD9FB175B
+ FED87E09D16D6DB595D07C4BA04D2CDA6DDCD11920612851245201C80DE5C677
+ 0CE0AF435F4ED1401F9EBE29F811FB6E7C4CF8793FC37F11F8EBC056BE1FBAB6
+ FB05FEB56E66379796F80ACACDE4F3BD7838542C0904F273EC3E05FD98FC7BFB
+ 2FFECD5A47827E08EB9A15E78BADB52FED1D46F7C556EE969A8EF5612AED8B73
+ 47D220B839C4782DC935F54D1401F10FECFF00FB22FC545FDA9F56F8E5F162FB
+ C27A6EA177A7BD89D0BC211CBE45CEE411969BCC1D3033C972C7192028159BF0
+ E7F655F8F7FB21F8A7C516DF04F56F077897E1D6B77CD7D1685E2B7B8867B291
+ 8019568860E15550B6EF9828F941E47DE145007C9BF1BBE04FC6DFDA23F647F1
+ 2F813C59AAF836D3C7BACEA104CBFD96D7316970DAC734522C459A3794B7EEC9
+ 2769E4819C0AF79F817E04BBF85FF05BC09E0FD40DABEA1A168765A6DD3D9126
+ 179A28112474255490CCA4E4804E7919AEE68A00F2BFDA5FF677F0E7ED3FF0A6
+ FF00C11E23696DA19644B9B4BFB700CB677299D92A83C1E199483D55D8646723
+ E5BF03FC14FDB53E07787ED7C19E14F1D780BC59E19B2416FA75EEBF1CEB736B
+ 08E1548099C28E80B49800007000AFBE28A00F8FBE3AFEC6DE38FDA0BE0FFC3F
+ 9FC41E34B0B4F8E1E0EBA7D46D3C49676FB6C8CCD207F2B68452117643B5F612
+ 0C5920EE6CF0DF107F65BFDA63F6AD8744F09FC67F15782BC3FE01D3AEE3B9BD
+ 4F08473B5DEA6C80804F98368C827BAA82C1B6315007DF545007C99F127F643F
+ 10F89BF6B3F833E3DD12E747B2F87FE01D2D6C8E9B35CCC2EF728982F95188CA
+ 1500C2325C13B4E470337BF6E6FD967C51FB4FC7F0DED7C3F79A3DA59F87F5B1
+ A96A3FDA9712C4D245F28DB17971BE588DDD4AF6E79E3EA5A2803E36FDB7FF00
+ 651F88FF0018BE25FC2DF88BF0CB55D1A0D7FC1571E72D8EB8EE90BB09525460
+ 555B23298653B72318354BE337ECA5F17BE3D78E3F677F17789753F080D43C0F
+ A9FF0069F88ACA092E12DE4DD7704CD1DAA989F70114213F78C3240C9E49AFB5
+ A8A00F9FBF6CEFD94ADFF6ADF86F65A4DBEAC7C3DE26D1AEC6A3A36ADB4B2C33
+ 01828E01076B71C8E54AA919C60F827C41FD9B3F6AEFDA4FC2B65F0EBE2878C7
+ C0BA2F81E39E27D4F52F0EC33BDF6A8B1B065DC8EA13EF2AB607963201C1C62B
+ EFCA2803E3BF8F7FB13EB1E39F1BFECD83C1B2E8963E0AF8557B0BDCDA6A934A
+ 2E27B7496D09540B132BB14B539DC572CDC9E491F6191C114B45007C7FFB177E
+ C89E36FD9E7E2FFC5FF1778AB52D0AF6D3C6579F6AB38B489E6778BF7F348448
+ 248900E255E85BA1FC7D4BF6C9F801A87ED33F0075EF02695AC268BA8DDC90DC
+ 5BCF3EEF21DE29038497682761C7500E08070718AF6EA2803E0ED7FF00661F8E
+ FE3FFD8FF50F8217DA5FC38F0CC70DA69F656979A6DE5CAA5CF913C723CB2010
+ 1D8CDE502700966624EDEFB1F1C7F60FF1378BFC13F05754F01F896C3C35F143
+ E18E996561697571BDECAE4411C63696DA5800E848250EE0CC1979E3ED9A2803
+ C1BE04C7FB464F79A8CBF175FC07159476061B0B5F0C8B9F366B9CAFEF676932
+ 02E01184EEC78E057CE5F0C3FE09A3AB59FEC65E32F845E38D4342B8F135EEBD
+ 36BFA26ABA6492CB0D9CFF006682388B33C48C3262757014FC8FC64F4FD06A28
+ 03F3DFE2E7EC47F1C7E32FC12F85FA6F8ABC45E13D5FC75F0FAF9DE159EEAE67
+ D3F5BB5222DBF6ADD0AB79A3C90872A430662581635D67C6DFD9A3E32FED1BA6
+ FC243E20B5F03785FF00E114F118D4AF74ED36FAE5A33669E408D623E472E42C
+ FF002FCAA0797C9C9DBF6D9E9514BF769303E1AF8CDFB2D7C48F0EFED5B77F1A
+ 3E077893C370789753B14835AF0EF8919C45345B563DDFBB058A3F90848CA9DD
+ 19218E481E05FD9DE339BFE0A9FF000B2D7C63E26D3FC4FE2B834B7B8D461D1A
+ 268AC34B3F67BC7FB3401C96D823D8FB9FE66694FA8AFB9FE3CFEC8FF0FF00E3
+ D789AC3C49E211AC69FE22B0B4FB0DBEABA26A525A4EB0EE66D9C641019D8F23
+ F88D731F06BF643F861FB386B97FAFF85B4EBEBDF135EC4F0CBAD6B578D75721
+ 18E5829202A93C6485C90304F5CE529A8ABB368C1C9D91E47E36FD9C7E22780B
+ F685F107C59F82FAFF0087E1B9F114623D6FC37E2712A5B5C1F972F1BC609C96
+ 50FC952096E483B6BB7F07FF00C2D478B56B9F89771E11B64758D74ED3FC2AF7
+ 1214396F31E7798724FC9B42718273CD7A9EAEE497393CD71BABBB156E49AF12
+ BD76E3CAD1EE50C3A52E64CE1356CF98C73EB5C76B9108A4DAA79C648C743FFE
+ AAEBF5C0E992B9CF3DABCF35ABABB47202E49E9953CD78EF73D8455D5EC05B5B
+ C6FE62E48E54BF24FB0F4FA135C4DE122F2E0E401F684079C7F09ABBA86A57A5
+ C8FBB838E10D6588A67B69A4663E679AAFEE7823A566CA35E5898E9913FDA588
+ DC40889E14FA819FE9DFE99D58F4991FC30938BA2A4B31F21BEE151CE47E22B8
+ B13DE200426476CA77A57BEBBCED2BB4F4236907E94EC05DD409FB2F04802688
+ F5F50C3FA5422DDA4D29A6FB50C472045B6CF232324E3F21F89A8E232DD59DD8
+ 98FCC4C65401D704E40FFBEAA9949F3900B0ED94CD219B1656F14BA44EED2482
+ 58183E09FDDE0F18FA9FE40D65EA058980EEC0194C7EBFFB3547299E2E1F838E
+ 8463FCFF00F5E9E13CFB52F23E595C6D53D48C75FE5400B730CCBA7DADC79EF2
+ 2312A149202107A0E7F954FABD835B7932995A7124633213BB6B775CFB7071D7
+ 9ACE5858703201F6C7144B1B4726D7C061C1C60E3FFD540CA52B10872790DDA8
+ A9EFAD96354084485802483800E3A73455AD897B9FB1F451457DD1F061505EDE
+ DBE9D6B2DD5DCF1DB5B44A5E49A670888A3A924F0054F5F3CFED75309DBE1DE9
+ 3A94EF6DE13D475E8A3D5E40FB10A0236ABB7653973CF1F2E7B567527C91722A
+ 2B99D8F4DD1FE3978035FD5E3D2F4FF17693757F236C8E14B95CC8D9C00A4F0C
+ 4F60339AD2F157C4EF09F81EF21B5D7FC43A7E9173347E6C715DCEA8CCB92320
+ 1ED906BCCFF69CF0C78374EF80FADB4FA769D66B6D6E3FB35A18923649F23CB1
+ 1631D4F503A8CF6AF318E7F10EAFF17BE1C4573A559EB3E251E038A792DF5872
+ 91CB2B3B06F30ED62AC0027A1E78E3AD73CAACE0F95EFA1A2826AE7D253FC5EF
+ 055B6836FADC9E29D297499E5304579F6A431348064A6ECFDE039C75A5F0F7C5
+ BF0678B2F64B4D1BC4DA6EA7751C4D33456D70AEC11719620761915F20FC5FF8
+ 4BA9FC2FF04682B7EFA75C6B9AEF8CC6A274FB2056CA12CADB6240403B464027
+ 1C020638C9FA374EB6F10E97E14F15DEF893C33E1DD0441A64CD04DA1C86491B
+ F76C5C3651703818C511AD37269AB581C2295D1E8BE17F19E85E36B192F740D5
+ AD357B48E4313CD67289155C004A923A1C107F1AB1A078934BF15581BDD22FE0
+ D46D048D119ADDC3AEE5386191DC1AF8EFE10492FECEBA6782FC5D24931F05F8
+ BEC92DF5757FBB6979F318A6F6565E3E9B89ED5ED1FB1B44E3F67FD0EE2460CF
+ 753DDCC5BB93F6891493EFF2D3A559CDA8B5ADBFCBFCC528249B477B75F187C1
+ 365E275F0ECDE27D363D6DA5100B3338DE2427010F60D9E3079C9157BC5DF11B
+ C31E028E27F10EBB63A479BFEAD2E660AEFEEABD48F702BC06DEC3FE19ABE234
+ B1EAB616BADF81BC61AC0787546895AEAC2EE424AA3E7974E3208E98247390D7
+ FE09E9FA778A3E3C7C57BFF12C50DE7892C75116B6305E00E60B205846D1AB67
+ 01805C91EA3A6EE45564DF2F5BFDDFE63E45BF43DC7C37F10BC35E30D2EE352D
+ 175CB1D4ECAD8133CB6D32B08B8CFCE3AAF009E7156B45F1768DE22D0CEB3A66
+ A76D7DA500E7ED90481A3C2E777CC3D3073F4AF997E274567E1CFDA32E3FE111
+ 8A18257F0A6A12EBF6F66A044408643099157A3171175E71B7D79DAFD9F751B5
+ D1FF00633B8BD17118686C753925F318611C3CD853E991B4E3AF3EF446B37271
+ 7D2FF8581C15AE7B45CFC5FF000559E8569AD4FE27D322D26EE468A0BC6B8511
+ 4AEBF7955BB918ABBE15F887E18F1C19D7C3FAF69FAC3C1CCA96770B2320EC48
+ 07207BD7C6DE15B655F85DFB3C59FD923964BCD7EEE631DC83E5B9170C006183
+ C1057B7415D1E836FA86B7A7FC54F899A7C36DE1BF14E9BA65CE88DE1FD2A3D8
+ F66C982F2BB0C6E7C2E548007CBDCAD66B11276D3FAB5C6E9A3E8FD77E38F807
+ C33AA49A76A5E2DD2AD6FA36DB2406E0168DBD1B19DA7D8E2A5D6BE33F817C39
+ A949A7EA9E2BD2AC2FA20ACF6F3DCAABA8650CA48F75607E84571DFB35F83BC2
+ 2BF05BC3971A7D8D8DEBDFD9A4D7F71246B23CB70C3F7A1D8E492AFB9707A018
+ AF2436BAD5D7ED7BF118786F43D135D923B0B557875890A431A886DC654856F9
+ B2318FAD5CAACD4632D35128C5B6BB1F56786FC51A478C34C5D4744D46DF54B1
+ 66282E2D640E85875191E95A958BE0FB4B9B3F0ED9A5F69F63A5DF32EEB8B5D3
+ 7FD4239EBB4E067B738ADAAEB57B6A64F70A2909C526EA621D45341A5CE68016
+ 8A28A0028A28A0043504C78A998D5699F8352CA4665F3F06B94D59F83CD747A8
+ 4A0035C8EAD36735C1599DF451CA6ACFF7AB92D4D861ABA5D525C93CFE15C96A
+ 92F04F7AF12AB3DDA48E4B597C0635E6FE2AB968A7B62A7E6DE4835E89AADD22
+ AB2B1C0279E33FE7BD79778AAE55AE611B8654312076E2B86476A29E9F756696
+ 98BB505C901495CF0E0066FC3191EF5957BA82C9772F908A232C4AA8E38CF1FA
+ 556B8B8263554E46DC649E9515B5F3DA5CA4E84ABA1CF071F5E6A063F509644B
+ 59B7864CC6C57231EBCF35957B7B25C5ECF2311BCED3D38FBA2AF6B3A925DBDC
+ CA5A42B22127CD604E7078CD624B701667E832A98CFF00BB40D1D16BFACDAC97
+ 28F64D09888236A2ED201C75F917FA9AAD7B7A9733FEEE268543124375E79C7B
+ 77FD2B0924000CB2E07239E95A775AF89558222A091104A0BEEDCCBFC43D3D3F
+ 1340CADA85DBC97A189C1F25003F4007F4AD1D5BC4C97D690C691324D16D1B88
+ CEEF9403D4F1C8381D0E7B62B1AEE50E6091082BB5813D7F88FF0088AABBC11C
+ 9183C60D03355ADEF0DB2DCC90CA203C6FDA42FE759AD73279ACCAC438C1DC09
+ CE6AECFAE3CDA65B59BB02B0B3156279C1C71598CE59B78FBA473ED4016F58D6
+ 66D426131762C5543193E6390B83C9F53CD1599338F2C73DF3CD156B621EE7EC
+ DD14515F747C18565789BC2DA478CF469F4AD6F4F8353D3E61F3C170BB94FA11
+ E847623915AB452693D181E57A47ECC7F0EF47BFB5BB5D124BC366C1AD60BFBD
+ 9EE61B7C74DB1C8E57D3A83D0576327C3CD025F1CC5E306B027C4515AFD892F3
+ CE93E58724EDD9BB675279C679AE8E8A954E0B6453937BB393F883F0AFC31F14
+ AD2CEDBC4DA69D461B394CD001712C251C8C6731B29E9EB597E1DF80DE09F0AC
+ 3AA45A669771047A9DA3D8DD07D46E64DF0BFDE51BE43B4FFB4B823B1AF40A28
+ 708B7CCD6A1CCED6B9CBDE7C32F0CEA1E034F065CE9693F869204B75B1791C80
+ 8841501F76EC82010739E3AD5DF07783747F00786ED340D06D3EC3A4DA6FF26D
+ FCC7936EE72EDF3392C72CC4F27BD6DD14F9527748577B1E61A57ECDBF0FF47D
+ 76CF55834691E6B193CEB382E2F26960B67C83BA38D9CA8E4647181DB1815A7E
+ 37F821E0EF883AAC5AAEADA511ABC4BB1351B3B892DA70BE85E3605B8C8E73C1
+ AEF28A9F670B5AC87CD2DEE721E07F849E13F87305DC7A0E8F15ABDDFF00C7CC
+ F2B34D34FECF2392C47278CE39E95C8CFF00B297C339EEA693FB06486DA6904B
+ 2D8417D3C76AEE3A1312B85F4E071C74AF5DA2874E0D59A41CD2EE723A87C28F
+ 0A6A571E199A6D1E356F0D36FD252091E24B53F2F44460A7EE2F0C0F4F735634
+ 9F86FE1DD0FC53ACF88AC74FF2356D65556FE513485270A00198CB6C078EA141
+ E4FA9CF4B9A322AB963BD8576795DC7ECC3F0EE5BF9AE61D1E6B18E77F327B3B
+ 1BE9E0B694FBC48E171DB0001567C43FB387C3DF15788AF75DD4B43965D56F48
+ 6B8B88B50B988C840007092003803A0AF4BDD499351ECA9FF2A1F34BB995E14F
+ 0AE99E09D06D745D1E07B6D3ADB779514933CA5773163F3392C7962793FA56A9
+ 3484D34B815A68B442DC7526EA85A5A6F99CF5A571D8B19A51CD5712548AF9A2
+ E1627A2981A9D9AA245A43416A8D9F14003BE0550BA97683534B2ED15937B738
+ 06B194AC6D0899FA95C601E6B8FD5AE3EF56D6A775D6B91D4EE09CF5AF2EB48F
+ 528C0C4D465C96FEB5CAEA90BCB9DA466B7AF9C9278358B73B893F29FCABC99B
+ B9ECD3470DAC786AF2EC10850E7D4D7253FC38D4AE2E49263452319DD5EB32AB
+ 7A1FCAABB23127E53F957233A923C3753F841AD198883CB9A3ECDBC0FE66B264
+ F83DE24278B65FC254FF001AFA17637F74FE546C6FEE9FCAA752AC7CEEBF073C
+ 4593BACF23DA58F9FF00C7AAFC9F07B57B848BFD1E48A5C618B49195FD1ABDE7
+ 637F74FE546C6FEE9FCA9582C7CEF71F077C41148CA962F30ECEB2C401FCDB35
+ 10F841E23FFA0549FF008110FF00F155F46EC6FEE9FCA8D8DFDD3F951619F3DB
+ FC2AF109B348468EFBD5890DF6A8BBFE3504FF00077C43184F2F4D798B282D99
+ E25DA7D3EF735F45EC6FEE9FCA8D8DFDD3F951603E71FF008543E25500FF0064
+ 06CF6FB4C7C7FE3D5249F0ABC4CF6EB18D0C295E770BA8B27FF1EAFA2B637F74
+ FE546C6FEE9FCA8B01F355CFC1EF15CBB443A2F18C906E62EBFF007D515F4D5B
+ A36F3F29E9E945689684B3FFD9}
+ ExplicitHeight = 80
+ end
+ end
+ object pnlCentro: TPanel
+ Left = 0
+ Top = 73
+ Width = 594
+ Height = 406
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ object PageControl: TPageControl
+ Left = 0
+ Top = 0
+ Width = 594
+ Height = 406
+ ActivePage = tabPrincipal
+ Align = alClient
+ Style = tsFlatButtons
+ TabOrder = 0
+ object tabPrincipal: TTabSheet
+ Caption = 'Principal'
+ object Panel5: TPanel
+ Left = 0
+ Top = 0
+ Width = 586
+ Height = 375
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 0
+ object Label5: TLabel
+ Left = 64
+ Top = 20
+ Width = 115
+ Height = 13
+ Caption = 'Identifica'#231#227'o Programa :'
+ end
+ object Label6: TLabel
+ Left = 47
+ Top = 276
+ Width = 132
+ Height = 13
+ Caption = 'Tabela de Usuarios/Perfis : '
+ end
+ object Label7: TLabel
+ Left = 69
+ Top = 213
+ Width = 110
+ Height = 13
+ Caption = 'Tabela de Permiss'#245'es :'
+ end
+ object Label29: TLabel
+ Left = 120
+ Top = 107
+ Width = 59
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Criptografia :'
+ end
+ object Label30: TLabel
+ Left = 116
+ Top = 142
+ Width = 63
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Encrypt Key :'
+ end
+ object Label32: TLabel
+ Left = 117
+ Top = 178
+ Width = 62
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Login Mode :'
+ end
+ object edtApplicationID: TEdit
+ Left = 182
+ Top = 17
+ Width = 220
+ Height = 21
+ TabOrder = 0
+ end
+ object edtTableUsers: TEdit
+ Left = 182
+ Top = 268
+ Width = 220
+ Height = 21
+ TabOrder = 1
+ end
+ object edtTableRights: TEdit
+ Left = 182
+ Top = 205
+ Width = 220
+ Height = 21
+ TabOrder = 2
+ OnChange = edtTableRightsChange
+ end
+ object edtTabelaPermissoesEX: TEdit
+ Left = 182
+ Top = 233
+ Width = 220
+ Height = 21
+ Enabled = False
+ TabOrder = 3
+ Text = 'EX'
+ end
+ object ckAutoStart: TCheckBox
+ Left = 182
+ Top = 44
+ Width = 220
+ Height = 21
+ Caption = 'Iniciar Automaticamente'
+ TabOrder = 4
+ end
+ object btnTabelasPadrao: TButton
+ Left = 182
+ Top = 344
+ Width = 220
+ Height = 21
+ Caption = 'Tabelas Padr'#227'o'
+ TabOrder = 5
+ OnClick = btnTabelasPadraoClick
+ end
+ object ckValidationKey: TCheckBox
+ Left = 182
+ Top = 71
+ Width = 220
+ Height = 21
+ Caption = 'CheckValidationKey'
+ TabOrder = 6
+ end
+ object cbCriptografia: TComboBox
+ Left = 182
+ Top = 99
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 7
+ Items.Strings = (
+ 'cPadrao'
+ 'cMD5')
+ end
+ object cbLoginMode: TComboBox
+ Left = 182
+ Top = 170
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 8
+ Items.Strings = (
+ 'lmActive'
+ 'lmPassive')
+ end
+ object GroupBox3: TGroupBox
+ Left = 425
+ Top = 9
+ Width = 113
+ Height = 78
+ Caption = 'Not Allowed Items'
+ TabOrder = 9
+ object ckActionVisible: TCheckBox
+ Left = 12
+ Top = 24
+ Width = 89
+ Height = 17
+ Caption = 'Action Visible'
+ Checked = True
+ State = cbChecked
+ TabOrder = 0
+ end
+ object ckMenuVisible: TCheckBox
+ Left = 12
+ Top = 47
+ Width = 89
+ Height = 17
+ Caption = 'Menu Visible'
+ Checked = True
+ State = cbChecked
+ TabOrder = 1
+ end
+ end
+ object spedtEncryptKey: TSpinEdit
+ Left = 182
+ Top = 133
+ Width = 220
+ Height = 22
+ MaxValue = 0
+ MinValue = 0
+ TabOrder = 10
+ Value = 0
+ end
+ end
+ end
+ object tabControlRights: TTabSheet
+ Caption = 'Control Rights'
+ ImageIndex = 6
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Label33: TLabel
+ Left = 179
+ Top = 117
+ Width = 52
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'ActionList :'
+ end
+ object Label34: TLabel
+ Left = 129
+ Top = 159
+ Width = 102
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'ActionMainMenuBar :'
+ end
+ object Label35: TLabel
+ Left = 153
+ Top = 202
+ Width = 78
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'ActionManager :'
+ end
+ object Label36: TLabel
+ Left = 175
+ Top = 245
+ Width = 56
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'MainMenu :'
+ end
+ object SpeedButton5: TSpeedButton
+ Left = 463
+ Top = 112
+ Width = 23
+ Height = 22
+ Flat = True
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484
+ 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404
+ 0404040404040404040404040404040404040404040404040404040404040404
+ 0404040404040404040404010000000000000104040404040404040002020202
+ 0202000004040404040404000202020202020001000404040404040100020202
+ 0202000101000404040404040003030303030300010100040404040404000303
+ 0303030300010100040404040404000303030303030001010004040404040400
+ 0303030303030001000404040404040400030303030303000004040404040404
+ 0400030303030303000404040404040404040100000000010104040404040404
+ 0404040404040404040404040404040404040404040404040404}
+ OnClick = SpeedButton5Click
+ end
+ object SpeedButton6: TSpeedButton
+ Tag = 1
+ Left = 463
+ Top = 155
+ Width = 23
+ Height = 22
+ Flat = True
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484
+ 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404
+ 0404040404040404040404040404040404040404040404040404040404040404
+ 0404040404040404040404010000000000000104040404040404040002020202
+ 0202000004040404040404000202020202020001000404040404040100020202
+ 0202000101000404040404040003030303030300010100040404040404000303
+ 0303030300010100040404040404000303030303030001010004040404040400
+ 0303030303030001000404040404040400030303030303000004040404040404
+ 0400030303030303000404040404040404040100000000010104040404040404
+ 0404040404040404040404040404040404040404040404040404}
+ OnClick = SpeedButton5Click
+ end
+ object SpeedButton7: TSpeedButton
+ Tag = 2
+ Left = 463
+ Top = 197
+ Width = 23
+ Height = 22
+ Flat = True
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484
+ 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404
+ 0404040404040404040404040404040404040404040404040404040404040404
+ 0404040404040404040404010000000000000104040404040404040002020202
+ 0202000004040404040404000202020202020001000404040404040100020202
+ 0202000101000404040404040003030303030300010100040404040404000303
+ 0303030300010100040404040404000303030303030001010004040404040400
+ 0303030303030001000404040404040400030303030303000004040404040404
+ 0400030303030303000404040404040404040100000000010104040404040404
+ 0404040404040404040404040404040404040404040404040404}
+ OnClick = SpeedButton5Click
+ end
+ object SpeedButton8: TSpeedButton
+ Tag = 3
+ Left = 463
+ Top = 241
+ Width = 23
+ Height = 22
+ Flat = True
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000EE0E0000EE0E000000010000000100006B6B6B008484
+ 8400C6C6C600DEDEDE00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404
+ 0404040404040404040404040404040404040404040404040404040404040404
+ 0404040404040404040404010000000000000104040404040404040002020202
+ 0202000004040404040404000202020202020001000404040404040100020202
+ 0202000101000404040404040003030303030300010100040404040404000303
+ 0303030300010100040404040404000303030303030001010004040404040400
+ 0303030303030001000404040404040400030303030303000004040404040404
+ 0400030303030303000404040404040404040100000000010104040404040404
+ 0404040404040404040404040404040404040404040404040404}
+ OnClick = SpeedButton5Click
+ end
+ object cbActionList: TComboBox
+ Left = 237
+ Top = 113
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 0
+ OnChange = ComboRightsChange
+ end
+ object cbActionMainMenuBar: TComboBox
+ Left = 237
+ Top = 155
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 1
+ OnChange = ComboRightsChange
+ OnClick = ComboRightsChange
+ end
+ object cbActionManager: TComboBox
+ Left = 237
+ Top = 198
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 2
+ OnChange = ComboRightsChange
+ end
+ object cbMainMenu: TComboBox
+ Left = 237
+ Top = 241
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 3
+ OnChange = ComboRightsChange
+ end
+ end
+ object tabUser: TTabSheet
+ Caption = 'User'
+ ImageIndex = 3
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Label2: TLabel
+ Left = 172
+ Top = 122
+ Width = 36
+ Height = 13
+ Caption = 'Action :'
+ end
+ object Label27: TLabel
+ Left = 152
+ Top = 161
+ Width = 56
+ Height = 13
+ Caption = 'Menu Item :'
+ end
+ object cbUserAction: TComboBox
+ Left = 214
+ Top = 118
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 0
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object cbUserMenuItem: TComboBox
+ Left = 214
+ Top = 157
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 1
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object ckUserProtectAdministrator: TCheckBox
+ Left = 214
+ Top = 196
+ Width = 220
+ Height = 21
+ Caption = 'User Protect Administrator'
+ TabOrder = 2
+ end
+ object ckUserUsePrivilegedField: TCheckBox
+ Left = 214
+ Top = 236
+ Width = 220
+ Height = 21
+ Caption = 'Use Privileged Field'
+ TabOrder = 3
+ end
+ end
+ object tabUserProfile: TTabSheet
+ Caption = 'User Profile'
+ ImageIndex = 4
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Label3: TLabel
+ Left = 174
+ Top = 128
+ Width = 36
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Action :'
+ Visible = False
+ end
+ object Label28: TLabel
+ Left = 154
+ Top = 181
+ Width = 56
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Menu Item :'
+ Visible = False
+ end
+ object cbUserProfileAction: TComboBox
+ Left = 213
+ Top = 124
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 0
+ Visible = False
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object cbUserProfileMenuItem: TComboBox
+ Left = 213
+ Top = 177
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 1
+ Visible = False
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object ckUserProfileActive: TCheckBox
+ Left = 213
+ Top = 230
+ Width = 220
+ Height = 21
+ Caption = 'Active'
+ TabOrder = 2
+ end
+ end
+ object tabUserPasswordChange: TTabSheet
+ Caption = 'User Password Change'
+ ImageIndex = 5
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Label4: TLabel
+ Left = 126
+ Top = 252
+ Width = 108
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Min Password Length :'
+ end
+ object Label31: TLabel
+ Left = 198
+ Top = 110
+ Width = 36
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Action :'
+ end
+ object Label37: TLabel
+ Left = 178
+ Top = 157
+ Width = 56
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Menu Item :'
+ end
+ object cbUserPasswordChangeAction: TComboBox
+ Left = 239
+ Top = 106
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 0
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object cbUserPasswordChangeMenuItem: TComboBox
+ Left = 239
+ Top = 153
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 1
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object ckUserPassowrdChangeForcePassword: TCheckBox
+ Left = 239
+ Top = 200
+ Width = 220
+ Height = 21
+ Caption = 'Force Password'
+ TabOrder = 2
+ end
+ object spedtUserPasswordChangeMinPasswordLength: TSpinEdit
+ Left = 239
+ Top = 247
+ Width = 220
+ Height = 22
+ MaxValue = 0
+ MinValue = 0
+ TabOrder = 3
+ Value = 0
+ end
+ end
+ object tabLogControl: TTabSheet
+ Caption = 'Log Control'
+ ImageIndex = 1
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Label25: TLabel
+ Left = 140
+ Top = 115
+ Width = 80
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Tabela de Logs :'
+ end
+ object Label1: TLabel
+ Left = 164
+ Top = 75
+ Width = 56
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Menu Item :'
+ Visible = False
+ end
+ object Label26: TLabel
+ Left = 184
+ Top = 35
+ Width = 36
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Action :'
+ Visible = False
+ end
+ object Panel4: TPanel
+ Left = 0
+ Top = 205
+ Width = 586
+ Height = 170
+ Align = alBottom
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 0
+ object Image4: TImage
+ Left = 20
+ Top = 28
+ Width = 25
+ Height = 24
+ Picture.Data = {
+ 07544269746D617076060000424D760600000000000036040000280000001800
+ 000018000000010008000000000040020000C40E0000C40E0000000100000000
+ 00000800000008080800310010004A08180031101800391821005A1821004A18
+ 290063292900522131006B21310039314200843142001042420018394A001042
+ 4A008C524A0031395200084252006B4A5200085252005A525200845252005A5A
+ 5A00635A5A006B5A5A00845A5A008C5A5A00635A6300845A63005A6363008463
+ 6300946363008C6B6B00A56B6B00086B7300426B730094737300396B7B009C7B
+ 7B00A57B7B00AD848400187B9400188C9C00298C9C0029949C002994A500B5A5
+ A500218CAD00089CAD0021A5AD0021ADAD009CA5B5007BB5B500089CBD00219C
+ BD0021B5BD00089CC60008BDC60010A5CE0018B5CE0008BDD60000B5DE0008B5
+ DE0010B5DE0008DEDE0000BDE70008BDE70000C6E70008C6E70018C6E70008CE
+ E70052CEE70000D6E70000DEE70018E7E70000BDEF0000C6EF0000CEEF0000D6
+ EF0018D6EF0000DEEF0008DEEF0063DEEF0000E7EF0008E7EF0010E7EF004AE7
+ EF0063E7EF0000EFEF004AEFEF0000C6F70000CEF7006BDEF70000E7F70094E7
+ F7009CE7F70000EFF70008F7F70010F7F700FF00FF0000D6FF0000DEFF0008DE
+ FF0000E7FF0008E7FF0000EFFF0008EFFF0010EFFF0000F7FF0008F7FF0010F7
+ FF0018F7FF0000FFFF0008FFFF0010FFFF0018FFFF0031FFFF0052FFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF007777777777777777777777777777777777777777777777777777772F1F1A
+ 1D1D1D1D1D1D1D1D1D1D1D1D1D1D161B77777777483B36363636363636393636
+ 36363636363930081B7777483F3E42424242424D3F37404C4242424242425B26
+ 10777753434D655C5C5C654E0F073446655C5C5C655C5C2429777777464D6765
+ 656565440104093C656565656C65431377777777534467676565654F12000E47
+ 656565676C5C2C277777777777464E69666565665E495E666565667067451C77
+ 77777777775D4E6769666666662A666666666970662E2977777777777777504F
+ 6C666666490B4F68666670674F1977777777777777775344676966683A063D6A
+ 666C6C662C28777777777777777777474F6B686A310C2B6A686F694715777777
+ 7777777777777753496B6B61230A26616B70682D287777777777777777777777
+ 505E6E540F0311496F6C5418777777777777777777777777585162410102053A
+ 706A322277777777777777777777777777526141000204386E52177777777777
+ 77777777777777777757515514010D4B6D332177777777777777777777777777
+ 777756616E4A746E551E7777777777777777777777777777777758546E72746D
+ 382077777777777777777777777777777777774B627573611E77777777777777
+ 77777777777777777777775A5975713825777777777777777777777777777777
+ 77777777636E6335777777777777777777777777777777777777777753765377
+ 7777777777777777777777777777777777777777775377777777777777777777
+ 7777}
+ end
+ object Label19: TLabel
+ Left = 60
+ Top = 28
+ Width = 320
+ Height = 13
+ Caption = 'O Componente n'#227'o grava nenhum log automaticamente!'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Label20: TLabel
+ Left = 60
+ Top = 52
+ Width = 505
+ Height = 13
+ Caption =
+ 'Utilize o Metodo: Log(msg : String; nivel : Integer {0..3} = 0) ' +
+ 'para gravar registros no Log de mensagens'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label21: TLabel
+ Left = 68
+ Top = 76
+ Width = 16
+ Height = 13
+ Caption = 'Ex:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label22: TLabel
+ Left = 92
+ Top = 76
+ Width = 175
+ Height = 13
+ Caption = 'UserControl1.Log('#39'Exemplo de Log'#39');'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label23: TLabel
+ Left = 280
+ Top = 76
+ Width = 285
+ Height = 65
+ Caption =
+ 'try'#13#10' ..'#13#10'except'#13#10' on e : Exception do ADOUserControl1.Log(e.M' +
+ 'essage, 3);'#13#10'end;'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ object Label24: TLabel
+ Left = 92
+ Top = 108
+ Width = 162
+ Height = 13
+ Caption = 'UserControl1.Log('#39'Exemplo 2'#39', 1);'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ ParentFont = False
+ end
+ end
+ object edtLogControlTableLog: TEdit
+ Left = 226
+ Top = 112
+ Width = 220
+ Height = 21
+ TabOrder = 1
+ end
+ object ckLogControlActive: TCheckBox
+ Left = 226
+ Top = 152
+ Width = 220
+ Height = 21
+ Caption = 'Active'
+ Checked = True
+ State = cbChecked
+ TabOrder = 2
+ end
+ object cbLogControlAction: TComboBox
+ Left = 226
+ Top = 32
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 3
+ Visible = False
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ object cbLogControlMenuItem: TComboBox
+ Left = 226
+ Top = 72
+ Width = 220
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ TabOrder = 4
+ Visible = False
+ OnChange = ComboActionMenuItem
+ OnClick = ComboActionMenuItem
+ end
+ end
+ object tabLogin: TTabSheet
+ Caption = 'Login'
+ ImageIndex = 2
+ ExplicitLeft = 0
+ ExplicitTop = 0
+ ExplicitWidth = 0
+ ExplicitHeight = 0
+ object Label14: TLabel
+ Left = 115
+ Top = 25
+ Width = 149
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'N'#250'mero m'#225'ximo de Tentativas :'
+ end
+ object Label15: TLabel
+ Left = 181
+ Top = 52
+ Width = 83
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Get Login Name :'
+ end
+ object Label16: TLabel
+ Left = 136
+ Top = 350
+ Width = 79
+ Height = 13
+ Caption = 'Imagem Superior'
+ end
+ object Label17: TLabel
+ Left = 288
+ Top = 350
+ Width = 85
+ Height = 13
+ Caption = 'Imagem Esquerda'
+ end
+ object Label18: TLabel
+ Left = 440
+ Top = 350
+ Width = 72
+ Height = 13
+ Caption = 'Imagem Inferior'
+ end
+ object SpeedButton1: TSpeedButton
+ Left = 19
+ Top = 288
+ Width = 73
+ Height = 40
+ Caption = 'Visualizar'
+ Flat = True
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000420B0000420B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFCC6701CC6701CC6701CC6701CC6701CC6701CC
+ 6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701FF00FFCC6701
+ FFFFFFFFFFFFFFFAF5FFF3E6FEEBD5FEE3C3FEDCB5FED7ABFED7ABFED7ABFED7
+ ABFED7ABFED7ABCC6701FF00FFCC6701FFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FE
+ EBD5FEE3C4FEDCB500C0C000C0C000C0C000C0C0FED7ABCC6701FF00FFCC6701
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEBD5FEE3C4FFFFFFFFFFFFFFFF
+ FF00C0C0FED7ABCC6701FF00FFCC6701FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FAF5FFF3E6FFEBD5FEE3C4FEDCB5FED7ABFED7ABFED7ABCC6701FF00FFCC6701
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEBD5FEE3C4FEDC
+ B5FED7ABFED7ABCC6701FF00FFCC6701FFFFFFFFFFFFFFFFFF80808080808080
+ 8080FFFFFF808080FFF3E6808080808080808080FED7ABCC6701FF00FFCC6701
+ 8080FF0000FF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEB
+ D5FEE3C4FEDCB5CC6701FF00FFCC67010000FF0000FF0000FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6FFEBD5FEE3C4CC6701FF00FFCC6701
+ 8080FF0000FF8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA
+ F5FFF3E6FFEBD5CC6701FF00FFCC6701FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FFF3E6CC6701FF00FFCC6701
+ CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701CC67
+ 01CC6701CC6701CC6701FF00FFFF00FFCC6701CC6701CC6701CC6701CC6701CC
+ 6701CC6701CC6701CC6701CC6701CC6701CC6701CC6701FF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ Layout = blGlyphTop
+ OnClick = SpeedButton1Click
+ end
+ object SpeedButton2: TSpeedButton
+ Left = 211
+ Top = 322
+ Width = 48
+ Height = 22
+ Caption = 'Limpar'
+ Flat = True
+ OnClick = SpeedButton2Click
+ end
+ object SpeedButton3: TSpeedButton
+ Left = 365
+ Top = 322
+ Width = 48
+ Height = 22
+ Caption = 'Limpar'
+ Flat = True
+ OnClick = SpeedButton3Click
+ end
+ object SpeedButton4: TSpeedButton
+ Left = 517
+ Top = 322
+ Width = 48
+ Height = 22
+ Caption = 'Limpar'
+ Flat = True
+ OnClick = SpeedButton4Click
+ end
+ object GroupBox1: TGroupBox
+ Left = 2
+ Top = 88
+ Width = 290
+ Height = 185
+ Caption = 'Login Inicial'
+ TabOrder = 0
+ object Label8: TLabel
+ Left = 14
+ Top = 24
+ Width = 42
+ Height = 13
+ Caption = 'Usu'#225'rio :'
+ end
+ object Label9: TLabel
+ Left = 19
+ Top = 55
+ Width = 37
+ Height = 13
+ Caption = 'Senha :'
+ end
+ object Label12: TLabel
+ Left = 25
+ Top = 87
+ Width = 31
+ Height = 13
+ Caption = 'Email :'
+ end
+ object lblInitialRights: TLabel
+ Left = -7
+ Top = 115
+ Width = 63
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Initial Rights :'
+ end
+ object edtInitialLoginUser: TEdit
+ Left = 64
+ Top = 20
+ Width = 220
+ Height = 21
+ TabOrder = 0
+ end
+ object edtInitialLoginPassword: TEdit
+ Left = 64
+ Top = 51
+ Width = 220
+ Height = 21
+ TabOrder = 1
+ end
+ object edtInitialLoginEmail: TEdit
+ Left = 64
+ Top = 83
+ Width = 220
+ Height = 21
+ TabOrder = 2
+ end
+ object mmInitialRights: TMemo
+ Left = 64
+ Top = 115
+ Width = 220
+ Height = 62
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clGreen
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 3
+ end
+ end
+ object GroupBox2: TGroupBox
+ Left = 295
+ Top = 88
+ Width = 290
+ Height = 185
+ Caption = 'Login Autom'#225'tico'
+ TabOrder = 1
+ object Label10: TLabel
+ Left = 13
+ Top = 44
+ Width = 42
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Usu'#225'rio :'
+ end
+ object Label11: TLabel
+ Left = 18
+ Top = 81
+ Width = 37
+ Height = 13
+ Alignment = taRightJustify
+ Caption = 'Senha :'
+ end
+ object edtLoginAutoLoginUser: TEdit
+ Left = 56
+ Top = 40
+ Width = 220
+ Height = 21
+ TabOrder = 0
+ end
+ object edtLoginAutoLoginPassword: TEdit
+ Left = 56
+ Top = 77
+ Width = 220
+ Height = 21
+ TabOrder = 1
+ end
+ object ckLoginAutologinActive: TCheckBox
+ Left = 56
+ Top = 104
+ Width = 65
+ Height = 17
+ Caption = 'Ativo'
+ Checked = True
+ State = cbChecked
+ TabOrder = 2
+ end
+ object ckLoginAutoLoginMessageOnError: TCheckBox
+ Left = 33
+ Top = 127
+ Width = 225
+ Height = 17
+ Caption = 'Exibir mensagem padr'#227'o de erro se falhar ?'
+ TabOrder = 3
+ end
+ end
+ object cbGetLoginName: TComboBox
+ Left = 270
+ Top = 48
+ Width = 201
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 0
+ ItemIndex = 0
+ TabOrder = 2
+ Text = 'lnNone'
+ Items.Strings = (
+ 'lnNone'
+ 'lnUserName'
+ 'lnMachineName')
+ end
+ object Panel6: TPanel
+ Left = 143
+ Top = 280
+ Width = 65
+ Height = 65
+ BevelOuter = bvLowered
+ Color = clGray
+ TabOrder = 3
+ object imgTop: TImage
+ Left = 1
+ Top = 1
+ Width = 63
+ Height = 63
+ Cursor = crHandPoint
+ Align = alClient
+ Center = True
+ Proportional = True
+ Stretch = True
+ OnClick = ActionsExecute
+ end
+ end
+ object Panel7: TPanel
+ Left = 295
+ Top = 280
+ Width = 65
+ Height = 65
+ BevelOuter = bvLowered
+ Color = clGray
+ TabOrder = 4
+ object imgLeft: TImage
+ Left = 1
+ Top = 1
+ Width = 63
+ Height = 63
+ Cursor = crHandPoint
+ Align = alClient
+ Center = True
+ Proportional = True
+ Stretch = True
+ OnClick = ActionsExecute
+ end
+ end
+ object Panel8: TPanel
+ Left = 447
+ Top = 280
+ Width = 65
+ Height = 65
+ BevelOuter = bvLowered
+ Color = clGray
+ TabOrder = 5
+ object imgBottom: TImage
+ Left = 1
+ Top = 1
+ Width = 63
+ Height = 63
+ Cursor = crHandPoint
+ Align = alClient
+ Center = True
+ Proportional = True
+ Stretch = True
+ OnClick = ActionsExecute
+ end
+ end
+ object spedtMaxLoginAttempts: TSpinEdit
+ Left = 270
+ Top = 20
+ Width = 121
+ Height = 22
+ MaxValue = 0
+ MinValue = 0
+ TabOrder = 6
+ Value = 0
+ end
+ end
+ end
+ end
+ object OpenPictureDialog: TOpenPictureDialog
+ Left = 512
+ Top = 240
+ end
+ object ActionList: TActionList
+ Left = 545
+ Top = 240
+ object acCarregarFigura: TAction
+ Caption = 'Carregar Figura'
+ OnExecute = ActionsExecute
+ end
+ object acVisualizarTelaLogin: TAction
+ Caption = 'acVisualizarTelaLogin'
+ OnExecute = ActionsExecute
+ end
+ end
+end
diff --git a/official/2.31RC1/Source/UCEditorForm_U.pas b/official/2.31RC1/Source/UCEditorForm_U.pas
new file mode 100644
index 0000000..cb7e1fe
--- /dev/null
+++ b/official/2.31RC1/Source/UCEditorForm_U.pas
@@ -0,0 +1,469 @@
+unit UCEditorForm_U;
+
+interface
+
+{.$I 'UserControl.inc'}
+
+uses
+ ActnCtrls,
+ ActnList,
+ ActnMan,
+ ActnMenus,
+ Buttons,
+ Classes,
+ ComCtrls,
+ Contnrs,
+ Controls,
+ Dialogs,
+ ExtCtrls,
+ ExtDlgs,
+ Forms,
+ Graphics,
+ jpeg,
+ Menus,
+ Spin,
+ StdCtrls,
+ ToolWin,
+ UCBase;
+
+type
+ TUCEditorForm = class(TForm)
+ pnlBotoes: TPanel;
+ Panel2: TPanel;
+ lbComponente: TLabel;
+ pnlCentro: TPanel;
+ PageControl: TPageControl;
+ tabPrincipal: TTabSheet;
+ tabLogin: TTabSheet;
+ Label14: TLabel;
+ Label15: TLabel;
+ Label16: TLabel;
+ Label17: TLabel;
+ Label18: TLabel;
+ SpeedButton1: TSpeedButton;
+ GroupBox1: TGroupBox;
+ Label8: TLabel;
+ Label9: TLabel;
+ Label12: TLabel;
+ lblInitialRights: TLabel;
+ edtInitialLoginUser: TEdit;
+ edtInitialLoginPassword: TEdit;
+ edtInitialLoginEmail: TEdit;
+ mmInitialRights: TMemo;
+ GroupBox2: TGroupBox;
+ Label10: TLabel;
+ Label11: TLabel;
+ edtLoginAutoLoginUser: TEdit;
+ edtLoginAutoLoginPassword: TEdit;
+ ckLoginAutologinActive: TCheckBox;
+ ckLoginAutoLoginMessageOnError: TCheckBox;
+ cbGetLoginName: TComboBox;
+ tabLogControl: TTabSheet;
+ Label25: TLabel;
+ Panel4: TPanel;
+ Image4: TImage;
+ Label19: TLabel;
+ Label20: TLabel;
+ Label21: TLabel;
+ Label22: TLabel;
+ Label23: TLabel;
+ Label24: TLabel;
+ edtLogControlTableLog: TEdit;
+ ckLogControlActive: TCheckBox;
+ cbLogControlAction: TComboBox;
+ cbLogControlMenuItem: TComboBox;
+ Panel6: TPanel;
+ imgTop: TImage;
+ Panel7: TPanel;
+ imgLeft: TImage;
+ Panel8: TPanel;
+ imgBottom: TImage;
+ Panel5: TPanel;
+ Label5: TLabel;
+ Label6: TLabel;
+ Label7: TLabel;
+ edtApplicationID: TEdit;
+ edtTableUsers: TEdit;
+ edtTableRights: TEdit;
+ edtTabelaPermissoesEX: TEdit;
+ ckAutoStart: TCheckBox;
+ btnTabelasPadrao: TButton;
+ btnOK: TBitBtn;
+ btnClose: TBitBtn;
+ ckValidationKey: TCheckBox;
+ cbCriptografia: TComboBox;
+ Label29: TLabel;
+ Label30: TLabel;
+ Label32: TLabel;
+ cbLoginMode: TComboBox;
+ GroupBox3: TGroupBox;
+ ckActionVisible: TCheckBox;
+ ckMenuVisible: TCheckBox;
+ tabUser: TTabSheet;
+ tabUserProfile: TTabSheet;
+ tabUserPasswordChange: TTabSheet;
+ cbUserAction: TComboBox;
+ cbUserMenuItem: TComboBox;
+ Label3: TLabel;
+ cbUserProfileAction: TComboBox;
+ cbUserProfileMenuItem: TComboBox;
+ Label4: TLabel;
+ cbUserPasswordChangeAction: TComboBox;
+ cbUserPasswordChangeMenuItem: TComboBox;
+ Label1: TLabel;
+ Label26: TLabel;
+ tabControlRights: TTabSheet;
+ Label33: TLabel;
+ Label34: TLabel;
+ Label35: TLabel;
+ Label36: TLabel;
+ cbActionList: TComboBox;
+ cbActionMainMenuBar: TComboBox;
+ cbActionManager: TComboBox;
+ cbMainMenu: TComboBox;
+ spedtEncryptKey: TSpinEdit;
+ ckUserProtectAdministrator: TCheckBox;
+ ckUserUsePrivilegedField: TCheckBox;
+ Label2: TLabel;
+ Label27: TLabel;
+ Label28: TLabel;
+ ckUserProfileActive: TCheckBox;
+ Label31: TLabel;
+ Label37: TLabel;
+ ckUserPassowrdChangeForcePassword: TCheckBox;
+ spedtUserPasswordChangeMinPasswordLength: TSpinEdit;
+ spedtMaxLoginAttempts: TSpinEdit;
+ OpenPictureDialog: TOpenPictureDialog;
+ ActionList: TActionList;
+ acCarregarFigura: TAction;
+ acVisualizarTelaLogin: TAction;
+ SpeedButton2: TSpeedButton;
+ SpeedButton3: TSpeedButton;
+ SpeedButton4: TSpeedButton;
+ Image1: TImage;
+ SpeedButton5: TSpeedButton;
+ SpeedButton6: TSpeedButton;
+ SpeedButton7: TSpeedButton;
+ SpeedButton8: TSpeedButton;
+ procedure SpeedButton4Click(Sender: TObject);
+ procedure SpeedButton3Click(Sender: TObject);
+ procedure SpeedButton2Click(Sender: TObject);
+ procedure SpeedButton1Click(Sender: TObject);
+
+ procedure ComboRightsChange(Sender: TObject);
+
+ procedure ComboActionMenuItem(Sender: TObject);
+
+ procedure btnTabelasPadraoClick(Sender: TObject);
+ procedure edtTableRightsChange(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+
+ procedure ActionsExecute(Sender: TObject);
+ procedure SpeedButton5Click(Sender: TObject);
+ private
+ { Private declarations }
+ FUserControl: TUserControl;
+ public
+ constructor Create(AOwner: TComponent; UserControl: TUserControl); reintroduce;
+ end;
+
+implementation
+
+uses
+ LoginWindow_U,
+ ShellAPI,
+ SysUtils,
+ UcConsts_Language,
+ UCMessages,
+ Windows;
+
+{$R *.dfm}
+
+procedure TUCEditorForm.edtTableRightsChange(Sender: TObject);
+begin
+ edtTabelaPermissoesEX.Text := edtTableRights.Text + 'EX';
+end;
+
+procedure TUCEditorForm.ActionsExecute(Sender: TObject);
+begin
+ if Sender = imgTop then
+ if OpenPictureDialog.Execute then
+ imgTop.Picture.LoadFromFile(OpenPictureDialog.FileName);
+
+ if Sender = imgBottom then
+ if OpenPictureDialog.Execute then
+ imgBottom.Picture.LoadFromFile(OpenPictureDialog.FileName);
+
+ if Sender = imgLeft then
+ if OpenPictureDialog.Execute then
+ imgLeft.Picture.LoadFromFile(OpenPictureDialog.FileName);
+end;
+
+procedure TUCEditorForm.btnTabelasPadraoClick(Sender: TObject);
+begin
+ edtTableUsers.Text := RetornaLingua( FUserControl.Language,'Const_TableUsers_TableName');
+ edtTableRights.Text := RetornaLingua( FUserControl.Language,'Const_TableRights_TableName');
+end;
+
+procedure TUCEditorForm.ComboActionMenuItem(Sender: TObject);
+begin
+ // Combo USER
+ if (Sender = cbUserAction) and (cbUserAction.ItemIndex >= 0) then
+ cbUserMenuItem.ItemIndex := -1;
+
+ if (Sender = cbUserMenuItem) and (cbUserMenuItem.ItemIndex >= 0) then
+ cbUserAction.ItemIndex := -1;
+
+ // Combo USERPROFILE
+ if (Sender = cbUserProfileAction) and (cbUserProfileAction.ItemIndex >= 0) then
+ cbUserProfileMenuItem.ItemIndex := -1;
+
+ if (Sender = cbUserProfileMenuItem) and (cbUserProfileMenuItem.ItemIndex >= 0) then
+ cbUserProfileAction.ItemIndex := -1;
+
+ // Combo USERPASSWORDCHANGE
+ if (Sender = cbUserPasswordChangeAction) and (cbUserPasswordChangeAction.ItemIndex >= 0) then
+ cbUserPasswordChangeMenuItem.ItemIndex := -1;
+
+ if (Sender = cbUserPasswordChangeMenuItem) and (cbUserPasswordChangeMenuItem.ItemIndex >= 0) then
+ cbUserPasswordChangeAction.ItemIndex := -1;
+
+ // Combo LOGCONTROL
+ if (Sender = cbLogControlAction) and (cbLogControlAction.ItemIndex >= 0) then
+ cbLogControlMenuItem.ItemIndex := -1;
+
+ if (Sender = cbLogControlMenuItem) and (cbLogControlMenuItem.ItemIndex >= 0) then
+ cbLogControlAction.ItemIndex := -1;
+end;
+
+procedure TUCEditorForm.ComboRightsChange(Sender: TObject);
+begin
+{ if Sender = cbActionList then
+ if cbActionList.ItemIndex >= 0 then
+ begin
+ cbActionMainMenuBar.ItemIndex := -1;
+ cbActionManager.ItemIndex := -1;
+ cbMainMenu.ItemIndex := -1;
+ end;
+
+ if Sender = cbActionMainMenuBar then
+ if cbActionMainMenuBar.ItemIndex >= 0 then
+ begin
+ cbActionList.ItemIndex := -1;
+ cbActionManager.ItemIndex := -1;
+ cbMainMenu.ItemIndex := -1;
+ end;
+
+ if Sender = cbActionManager then
+ if cbActionManager.ItemIndex >= 0 then
+ begin
+ cbActionList.ItemIndex := -1;
+ cbActionMainMenuBar.ItemIndex := -1;
+ cbMainMenu.ItemIndex := -1;
+ end;
+
+ if Sender = cbMainMenu then
+ if cbMainMenu.ItemIndex >= 0 then
+ begin
+ cbActionList.ItemIndex := -1;
+ cbActionMainMenuBar.ItemIndex := -1;
+ cbActionManager.ItemIndex := -1;
+ end; }
+
+end;
+
+constructor TUCEditorForm.Create(AOwner: TComponent; UserControl: TUserControl);
+begin
+ inherited Create(AOwner);
+ FUserControl := UserControl;
+end;
+
+procedure TUCEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TUCEditorForm.FormCreate(Sender: TObject);
+var
+ I: Integer;
+ Formulario: TForm;
+begin
+ lblInitialRights.Caption := 'Initial ' + #13 + 'Rights :';
+ PageControl.ActivePage := tabPrincipal;
+
+ with FUserControl do
+ begin
+ edtApplicationID.Text := ApplicationID;
+ ckAutoStart.Checked := AutoStart;
+ ckValidationKey.Checked := CheckValidationKey;
+ spedtEncryptKey.Value := EncryptKey;
+ edtTableRights.Text := TableRights.TableName;
+ edtTableUsers.Text := TableUsers.TableName;
+ ckActionVisible.Checked := NotAllowedItems.ActionVisible;
+ ckMenuVisible.Checked := NotAllowedItems.MenuVisible;
+ cbCriptografia.ItemIndex := integer(Criptografia);
+ cbLoginMode.ItemIndex := integer(LoginMode);
+ end;
+
+ Formulario := TForm(FUserControl.Owner);
+
+ for I := 0 to Formulario.ComponentCount - 1 do
+ begin
+ if Formulario.Components[I] is TAction then
+ begin
+ cbUserAction.Items.Add(TAction(Formulario.Components[I]).Name);
+ cbUserProfileAction.Items.Add(TAction(Formulario.Components[I]).Name);
+ cbLogControlAction.Items.Add(TAction(Formulario.Components[I]).Name);
+ cbUserPasswordChangeAction.Items.Add(TAction(Formulario.Components[I]).Name);
+ end;
+
+ if Formulario.Components[I] is TMenuItem then
+ begin
+ cbUserMenuItem.Items.Add(Formulario.Components[I].Name);
+ cbUserProfileMenuItem.Items.Add(Formulario.Components[I].Name);
+ cbLogControlMenuItem.Items.Add(Formulario.Components[I].Name);
+ cbUserPasswordChangeMenuItem.Items.Add(Formulario.Components[I].Name);
+ end;
+
+ // Adicionar os valores dos "ControlRights"
+ if Formulario.Components[I] is TActionList then
+ cbActionList.Items.Add(Formulario.Components[I].Name);
+
+ if Formulario.Components[I] is TActionMainMenuBar then
+ cbActionMainMenuBar.Items.Add(Formulario.Components[I].Name);
+
+ if Formulario.Components[I] is TActionManager then
+ cbActionManager.Items.Add(Formulario.Components[I].Name);
+
+ if Formulario.Components[I] is TMainMenu then
+ cbMainMenu.Items.Add(Formulario.Components[I].Name);
+ end;
+
+ with FUserControl.ControlRight do
+ begin
+ if Assigned(ActionList) then
+ cbActionList.ItemIndex := (cbActionList.Items.IndexOf(ActionList.Name));
+
+ if Assigned(MainMenu) then
+ cbMainMenu.ItemIndex := (cbMainMenu.Items.IndexOf(MainMenu.Name));
+
+ if Assigned(ActionMainMenuBar) then
+ cbActionMainMenuBar.ItemIndex := (cbActionMainMenuBar.Items.IndexOf(ActionMainMenuBar.Name));
+
+ if Assigned(ActionManager) then
+ cbActionManager.ItemIndex := (cbActionManager.Items.IndexOf(ActionManager.Name));
+ end;
+
+ // Action e MenuItem USER
+ if Assigned(FUserControl.User.Action) then
+ cbUserAction.ItemIndex := (cbUserAction.Items.IndexOf(FUserControl.User.Action.Name));
+
+ if Assigned(FUserControl.User.MenuItem) then
+ cbUserMenuItem.ItemIndex := (cbUserMenuItem.Items.IndexOf(FUserControl.User.MenuItem.Name));
+
+ // Action e MenuItem USERPROFILE
+{ if Assigned(FUserControl.UserProfile.Action) then
+ cbUserProfileAction.ItemIndex := (cbUserProfileAction.Items.IndexOf(FUserControl.UserProfile.Action.Name));
+
+ if Assigned(FUserControl.UserProfile.MenuItem) then
+ cbUserProfileMenuItem.ItemIndex := (cbUserProfileMenuItem.Items.IndexOf(FUserControl.UserProfile.MenuItem.Name)); }
+
+ // Action e MenuItem USERPASSWORDCHANGE
+ if Assigned(FUserControl.UserPasswordChange.Action) then
+ cbUserPasswordChangeAction.ItemIndex := (cbUserPasswordChangeAction.Items.IndexOf(FUserControl.UserPasswordChange.Action.Name));
+
+ if Assigned(FUserControl.UserPasswordChange.MenuItem) then
+ cbUserPasswordChangeMenuItem.ItemIndex := (cbUserPasswordChangeMenuItem.Items.IndexOf(FUserControl.UserPasswordChange.MenuItem.Name));
+
+ // Action e MenuItem LOGCONTROL
+{ if Assigned(FUserControl.LogControl.Action) then
+ cbLogControlAction.ItemIndex := (cbLogControlAction.Items.IndexOf(FUserControl.LogControl.Action.Name));
+
+ if Assigned(FUserControl.LogControl.MenuItem) then
+ cbLogControlMenuItem.ItemIndex := (cbLogControlMenuItem.Items.IndexOf(FUserControl.LogControl.MenuItem.Name)); }
+
+ ckUserProtectAdministrator.Checked := FUserControl.User.ProtectAdministrator;
+ ckUserUsePrivilegedField.Checked := FUserControl.User.UsePrivilegedField;
+
+ ckUserProfileActive.Checked := FUserControl.UserProfile.Active;
+
+ ckUserPassowrdChangeForcePassword.Checked := FUserControl.UserPasswordChange.ForcePassword;
+ spedtUserPasswordChangeMinPasswordLength.Value := FUserControl.UserPasswordChange.MinPasswordLength;
+
+ edtLogControlTableLog.Text := FUserControl.LogControl.TableLog;
+ ckLogControlActive.Checked := FUserControl.LogControl.Active;
+
+ // Login
+ spedtMaxLoginAttempts.Value := FUserControl.Login.MaxLoginAttempts;
+ cbGetLoginName.ItemIndex := integer(FUserControl.Login.GetLoginName);
+ // login inicial
+ edtInitialLoginUser.Text := FUserControl.Login.InitialLogin.User;
+ edtInitialLoginPassword.Text := FUserControl.Login.InitialLogin.Password;
+ edtInitialLoginEmail.Text := FUserControl.Login.InitialLogin.Email;
+ mmInitialRights.Lines := FUserControl.Login.InitialLogin.InitialRights;
+ // AutoLogin
+ edtLoginAutoLoginUser.Text := FUserControl.Login.AutoLogin.User;
+ edtLoginAutoLoginPassword.Text := FUserControl.Login.AutoLogin.Password;
+ ckLoginAutologinActive.Checked := FUserControl.Login.AutoLogin.Active;
+ ckLoginAutoLoginMessageOnError.Checked := FUserControl.Login.AutoLogin.MessageOnError;
+ // Figuras
+ imgTop.Picture.Bitmap := FUserControl.UserSettings.Login.TopImage.Bitmap;
+ imgLeft.Picture.Bitmap := FUserControl.UserSettings.Login.LeftImage.Bitmap;
+ imgBottom.Picture.Bitmap := FUserControl.UserSettings.Login.BottomImage.Bitmap;
+end;
+
+procedure TUCEditorForm.SpeedButton1Click(Sender: TObject);
+var
+ frmLogin: TfrmLoginWindow;
+begin
+ try
+ frmLogin := TfrmLoginWindow.Create(nil);
+ with frmLogin do
+ begin
+ FUserControl := Self.FUserControl;
+ btOK.onClick := BotoesClickVisualizacao;
+ BtCancela.OnClick := BotoesClickVisualizacao;
+ Caption := Self.FUserControl.UserSettings.Login.WindowCaption;
+ LbUsuario.Caption := Self.FUserControl.UserSettings.Login.LabelUser;
+ LbSenha.Caption := Self.FUserControl.UserSettings.Login.LabelPassword;
+ ImgTop.Picture := Self.ImgTop.Picture;
+ imgLeft.Picture := Self.imgLeft.Picture;
+ ImgBottom.Picture := Self.imgBottom.Picture;
+ btOK.Caption := Self.FUserControl.UserSettings.Login.BtOk;
+ BtCancela.Caption := Self.FUserControl.UserSettings.Login.BtCancel;
+ Position := Self.FUserControl.UserSettings.WindowsPosition;
+ ShowModal;
+ end;
+ finally
+ SysUtils.FreeAndNil(frmLogin);
+ end;
+end;
+
+procedure TUCEditorForm.SpeedButton2Click(Sender: TObject);
+begin
+ imgTop.Picture := nil;
+end;
+
+procedure TUCEditorForm.SpeedButton3Click(Sender: TObject);
+begin
+ imgLeft.Picture := nil;
+end;
+
+procedure TUCEditorForm.SpeedButton4Click(Sender: TObject);
+begin
+ imgBottom.Picture := nil;
+end;
+
+procedure TUCEditorForm.SpeedButton5Click(Sender: TObject);
+begin
+ Case TSpeedButton(Sender).Tag of
+ 0 : cbActionList.ItemIndex := -1;
+ 1 : cbActionMainMenuBar.ItemIndex := -1;
+ 2 : cbActionManager.ItemIndex := -1;
+ 3 : cbMainMenu.ItemIndex := -1;
+ End;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/UCIdle.pas b/official/2.31RC1/Source/UCIdle.pas
new file mode 100644
index 0000000..847719b
--- /dev/null
+++ b/official/2.31RC1/Source/UCIdle.pas
@@ -0,0 +1,138 @@
+unit UCIdle;
+
+interface
+
+uses Classes, UCBase, Dialogs, Windows, Forms, ExtCtrls, Messages,SysUtils;
+
+type
+
+ TUCIdle = class;
+ TUCIdleTimeLeft = procedure (TimeLeft : Integer) of Object;
+
+ TThUCIdle = class(TThread)
+ private
+ procedure DoIdle;
+ procedure TimeLeftSinc;
+ protected
+ procedure Execute; override;
+ public
+ CurrentMilisec : Integer;
+ UCIdle : TUCIdle;
+ end;
+
+ TUCIdle = class(TComponent)
+ private
+ FThIdle : TThUCIdle;
+ FTimeOut: Integer;
+ FOnIdle: TNotifyEvent;
+ FUserControl: TUserControl; //changed from FUCComp to FUserControl
+ FOnAppMessage : TMessageEvent;
+ FTimeLeftNotify: TUCIdleTimeLeft;
+ procedure UCAppMessage(var Msg: TMsg; var Handled: Boolean);
+ procedure SetUserControl(const Value: TUserControl);
+ protected
+ procedure Loaded; override;
+ procedure Notification(AComponent: TComponent;
+ AOperation: TOperation); override; //added by fduenas
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure DoIdle;
+ published
+ property UserControl : TUserControl read FUserControl write SetUserControl; //changed by fduenas
+ property OnIdle : TNotifyEvent read FOnIdle write FOnIdle;
+ property OnTimeLeftNotify : TUCIdleTimeLeft read FTimeLeftNotify write FTimeLeftNotify;
+ property Timeout : Integer read FTimeOut write FTimeOut;
+ end;
+
+
+implementation
+
+{ TUCIdle }
+
+constructor TUCIdle.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+destructor TUCIdle.Destroy;
+begin
+ FreeAndNil( FThIdle );
+ inherited;
+end;
+
+procedure TUCIdle.DoIdle;
+begin
+ if Assigned(UserControl) and (UserControl.CurrentUser.UserID <> 0 ) then
+ UserControl.Logoff;
+ if Assigned(OnIdle) then OnIdle(Self);
+end;
+
+procedure TUCIdle.Loaded;
+begin
+ inherited;
+ if not (csDesigning in ComponentState) then
+ if (Assigned(UserControl)) or (Assigned(OnIdle))then
+ begin
+ if Assigned(Application.OnMessage) then FOnAppMessage := Application.OnMessage;
+ Application.OnMessage := UCAppMessage;
+ FThIdle := TThUCIdle.Create(True);
+ FThIdle.CurrentMilisec := 0;
+ FThIdle.UCIdle := Self;
+ FThIdle.Resume;
+ end;
+end;
+
+procedure TUCIdle.Notification(AComponent: TComponent;
+ AOperation: TOperation);
+begin
+ If AOperation = opRemove then
+ If AComponent = FUserControl then
+ FUserControl := nil;
+ inherited Notification(AComponent, AOperation) ;
+
+end;
+
+procedure TUCIdle.SetUserControl(const Value: TUserControl);
+begin
+ FUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(self);
+end;
+
+procedure TUCIdle.UCAppMessage(var Msg: TMsg; var Handled: Boolean);
+begin
+ if (msg.message = wm_mousemove) or (msg.message = wm_keydown) then FThIdle.CurrentMilisec := 0;
+
+ if Assigned(FOnAppMessage) then FOnAppMessage(Msg, Handled);
+end;
+
+{ TThUCIdle }
+
+procedure TThUCIdle.DoIdle;
+begin
+ UCIdle.DoIdle;
+end;
+
+procedure TThUCIdle.TimeLeftSinc;
+begin
+ if Assigned(UCIdle.OnTimeLeftNotify) then UCIdle.OnTimeLeftNotify(UCIdle.Timeout - CurrentMilisec);
+end;
+
+procedure TThUCIdle.Execute;
+begin
+ while not Terminated do
+ begin
+ Sleep(1000);
+ if UCIdle.Timeout <= CurrentMilisec then
+ begin
+ CurrentMilisec := 0;
+ Synchronize(DoIdle);
+ end else begin
+ Inc(CurrentMilisec, 1000);
+ Synchronize(TimeLeftSinc);
+ end;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/UCLock.res b/official/2.31RC1/Source/UCLock.res
new file mode 100644
index 0000000..4a1f3ae
Binary files /dev/null and b/official/2.31RC1/Source/UCLock.res differ
diff --git a/official/2.31RC1/Source/UCMail.pas b/official/2.31RC1/Source/UCMail.pas
new file mode 100644
index 0000000..0511b30
--- /dev/null
+++ b/official/2.31RC1/Source/UCMail.pas
@@ -0,0 +1,317 @@
+{-----------------------------------------------------------------------------
+ Unit Name: UCMail
+ Author: QmD
+ Date: 09-nov-2004
+ Purpose: Send Mail messages (forget password, user add/change/password force/etc)
+ History: included indy 10 support
+-----------------------------------------------------------------------------}
+
+
+unit UCMail;
+
+interface
+
+{.$I 'UserControl.inc'}
+
+
+uses
+ Classes,
+ Dialogs,
+ UCALSMTPClient,
+ SysUtils,
+ UcConsts_Language;
+
+type
+ TUCMailMessage = class(TPersistent)
+ private
+ FAtivo: Boolean;
+ FTitulo: String;
+ FLines: TStrings;
+ procedure SetLines(const Value: TStrings);
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Ativo: Boolean read FAtivo write FAtivo;
+ property Titulo: String read FTitulo write FTitulo;
+ property Mensagem: TStrings read FLines write SetLines;
+ end;
+
+ TUCMEsqueceuSenha = class(TUCMailMessage)
+ private
+ FLabelLoginForm: String;
+ FMailEnviado: String;
+ protected
+ public
+ published
+ property LabelLoginForm: String read FLabelLoginForm write FLabelLoginForm;
+ property MensagemEmailEnviado: String read FMailEnviado write FMailEnviado;
+ end;
+
+ TMessageTag = procedure(Tag: String; var ReplaceText: String) of object;
+
+ TMailUserControl = class(TComponent)
+ private
+ FPorta: Integer;
+ FEmailRemetente: String;
+ FUsuario: String;
+ FNomeRemetente: String;
+ FSenha: String;
+ FSMTPServer: String;
+ FAdicionaUsuario: TUCMailMessage;
+ FSenhaTrocada: TUCMailMessage;
+ FAlteraUsuario: TUCMailMessage;
+ FSenhaForcada: TUCMailMessage;
+ FEsqueceuSenha: TUCMEsqueceuSenha;
+ fAuthType: TAlSmtpClientAuthType;
+ function ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String;
+ function TrataSenha(Senha: String; Key: Word): String;
+ procedure onStatus(Status: String);
+ protected
+ procedure EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure EnviaEmailAdicionaUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+ procedure EnviaEmailAlteraUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+ procedure EnviaEmailSenhaForcada(Nome, Login, Senha, Email, Perfil: String);
+ procedure EnviaEmailSenhaTrocada(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+ procedure EnviaEsqueceuSenha(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+ published
+ property AuthType : TAlSmtpClientAuthType read fAuthType write fAuthType;
+ property ServidorSMTP: String read FSMTPServer write FSMTPServer;
+ property Usuario: String read FUsuario write FUsuario;
+ property Senha: String read FSenha write FSenha;
+ property Porta: Integer read FPorta write FPorta default 0;
+ property NomeRemetente: String read FNomeRemetente write FNomeRemetente;
+ property EmailRemetente: String read FEmailRemetente write FEmailRemetente;
+ property AdicionaUsuario: TUCMailMessage read FAdicionaUsuario write FAdicionaUsuario;
+ property AlteraUsuario: TUCMailMessage read FAlteraUsuario write FAlteraUsuario;
+ property EsqueceuSenha: TUCMEsqueceuSenha read FEsqueceuSenha write FEsqueceuSenha;
+ property SenhaForcada: TUCMailMessage read FSenhaForcada write FSenhaForcada;
+ property SenhaTrocada: TUCMailMessage read FSenhaTrocada write FSenhaTrocada;
+ end;
+
+implementation
+
+uses
+ UCBase,
+ UCEMailForm_U;
+
+{ TMailAdicUsuario }
+
+procedure TUCMailMessage.Assign(Source: TPersistent);
+begin
+ if Source is TUCMailMessage then
+ begin
+ Self.Ativo := TUCMailMessage(Source).Ativo;
+ Self.Titulo := TUCMailMessage(Source).Titulo;
+ Self.Mensagem.Assign(TUCMailMessage(Source).Mensagem);
+ end
+ else
+ inherited;
+end;
+
+constructor TUCMailMessage.Create(AOwner: TComponent);
+begin
+ FLines := TStringList.Create;
+end;
+
+destructor TUCMailMessage.Destroy;
+begin
+ SysUtils.FreeAndNil(FLines);
+ inherited;
+end;
+
+procedure TUCMailMessage.SetLines(const Value: TStrings);
+begin
+ FLines.Assign(Value);
+end;
+
+{ TMailUserControl }
+
+constructor TMailUserControl.Create(AOwner: TComponent);
+begin
+ inherited;
+ AdicionaUsuario := TUCMailMessage.Create(self);
+ AdicionaUsuario.FLines.Add('Inclusão de usuário');
+ AdicionaUsuario.FLines.Add('');
+ AdicionaUsuario.fLines.Add('Nome...: :nome');
+ AdicionaUsuario.fLines.Add('Login..: :login');
+ AdicionaUsuario.fLines.Add('Senha..: :senha');
+ AdicionaUsuario.fLines.Add('Email..: :email');
+ AdicionaUsuario.fLines.Add('Perfil.: :perfil');
+ AdicionaUsuario.fTitulo := 'Inclusão de usuário';
+
+
+ AlteraUsuario := TUCMailMessage.Create(self);
+ AlteraUsuario.FLines.Add('Alteração de usuário');
+ AlteraUsuario.FLines.Add('');
+ AlteraUsuario.fLines.Add('Nome...: :nome');
+ AlteraUsuario.fLines.Add('Login..: :login');
+ AlteraUsuario.fLines.Add('Senha..: :senha');
+ AlteraUsuario.fLines.Add('Email..: :email');
+ AlteraUsuario.fLines.Add('Perfil.: :perfil');
+ AlteraUsuario.fTitulo := 'Alteração de usuário';
+
+ EsqueceuSenha := TUCMEsqueceuSenha.Create(self);
+ EsqueceuSenha.FLines.Add('Esquecia a senha');
+ EsqueceuSenha.FLines.Add('');
+ EsqueceuSenha.fLines.Add('Nome...: :nome');
+ EsqueceuSenha.fLines.Add('Login..: :login');
+ EsqueceuSenha.fLines.Add('Senha..: :senha');
+ EsqueceuSenha.fLines.Add('Email..: :email');
+ EsqueceuSenha.fLines.Add('Perfil.: :perfil');
+ EsqueceuSenha.fTitulo := 'Lembrete de senha';
+
+ SenhaForcada := TUCMailMessage.Create(self);
+ SenhaForcada.FLines.Add('Troca de senha forçada');
+ SenhaForcada.FLines.Add('');
+ SenhaForcada.fLines.Add('Nome...: :nome');
+ SenhaForcada.fLines.Add('Login..: :login');
+ SenhaForcada.fLines.Add('Senha..: :senha');
+ SenhaForcada.fLines.Add('Email..: :email');
+ SenhaForcada.fLines.Add('Perfil.: :perfil');
+ SenhaForcada.fTitulo := 'Troca de senha forçada';
+
+ SenhaTrocada := TUCMailMessage.Create(self);
+ SenhaTrocada.FLines.Add('Alteração de senha');
+ SenhaTrocada.FLines.Add('');
+ SenhaTrocada.fLines.Add('Nome...: :nome');
+ SenhaTrocada.fLines.Add('Login..: :login');
+ SenhaTrocada.fLines.Add('Senha..: :senha');
+ SenhaTrocada.fLines.Add('Email..: :email');
+ SenhaTrocada.fLines.Add('Perfil.: :perfil');
+ SenhaTrocada.fTitulo := 'Alteração de senha';
+
+ fAuthType := alsmtpClientAuthPlain;
+ if csDesigning in ComponentState then
+ begin
+ Porta := 25;
+ AdicionaUsuario.Ativo := True;
+ AlteraUsuario.Ativo := True;
+ EsqueceuSenha.Ativo := True;
+ SenhaForcada.Ativo := True;
+ SenhaTrocada.Ativo := True;
+ EsqueceuSenha.LabelLoginForm := RetornaLingua( ucPortuguesBr, 'Const_Log_LbEsqueciSenha');
+ EsqueceuSenha.MensagemEmailEnviado := RetornaLingua( ucPortuguesBr,'Const_Log_MsgMailSend');
+ end;
+
+end;
+
+destructor TMailUserControl.Destroy;
+begin
+ SysUtils.FreeAndNil(FAdicionaUsuario);
+ SysUtils.FreeAndNil(FAlteraUsuario);
+ SysUtils.FreeAndNil(FEsqueceuSenha);
+ SysUtils.FreeAndNil(FSenhaForcada);
+ SysUtils.FreeAndNil(FSenhaTrocada);
+
+ inherited;
+end;
+
+procedure TMailUserControl.EnviaEmailAdicionaUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+begin
+ Senha := TrataSenha(Senha, Key);
+ EnviaEmailTP(Nome, Login, Senha, Email, Perfil, AdicionaUsuario);
+end;
+
+procedure TMailUserControl.EnviaEmailAlteraUsuario(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+begin
+ Senha := TrataSenha(Senha, Key);
+ EnviaEmailTP(Nome, Login, Senha, Email, Perfil, AlteraUsuario);
+end;
+
+procedure TMailUserControl.EnviaEmailSenhaForcada(Nome, Login, Senha, Email, Perfil: String);
+begin
+ EnviaEmailTP(Nome, Login, Senha, Email, Perfil, SenhaForcada);
+end;
+
+procedure TMailUserControl.EnviaEmailSenhaTrocada(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+begin
+ EnviaEmailTP(Nome, Login, Senha, Email, Perfil, SenhaTrocada);
+end;
+
+function TMailUserControl.ParseMailMSG(Nome, Login, Senha, Email, Perfil, txt: String): String;
+begin
+ Txt := StringReplace(txt, ':nome', nome, [rfReplaceAll]);
+ Txt := StringReplace(txt, ':login', login, [rfReplaceAll]);
+ Txt := StringReplace(txt, ':senha', senha, [rfReplaceAll]);
+ Txt := StringReplace(txt, ':email', email, [rfReplaceAll]);
+ Txt := StringReplace(txt, ':perfil', perfil, [rfReplaceAll]);
+ Result := Txt;
+end;
+
+procedure TMailUserControl.onStatus( Status : String );
+begin
+ if not Assigned(UCEMailForm) then Exit;
+ UCEMailForm.lbStatus.Caption := Status;
+ UCEMailForm.Update;
+end;
+
+procedure TMailUserControl.EnviaEmailTp(Nome, Login, USenha, Email, Perfil: String; UCMSG: TUCMailMessage);
+var
+ MailMsg : TAlSmtpClient;
+ MailRecipients : TStringlist;
+ MailHeader : TALSMTPClientHeader;
+begin
+ if Trim(Email) = '' then
+ Exit;
+ MailMsg := TAlSmtpClient.Create;
+ MailMsg.OnStatus := OnStatus;
+ MailRecipients := TStringlist.Create;
+ MailHeader := TALSMTPClientHeader.Create;
+ MailHeader.From := EmailRemetente; //'rodrigo@oxio.com.br';
+ MailHeader.SendTo := Email ;
+ MailRecipients.Append(Email);
+ MailHeader.Subject := UCMSG.Titulo;
+
+ try
+ try
+ UCEMailForm := TUCEMailForm.Create(Self);
+ UCEMailForm.lbStatus.Caption := '';
+ UCEMailForm.Show;
+ UCEMailForm.Update;
+
+ MailMsg.SendMail(ServidorSMTP, FPorta, NomeRemetente ,
+ MailRecipients, Usuario, Senha, fAuthType , MailHeader.RawHeaderText,
+ ParseMailMSG(Nome, Login, USenha, Email, Perfil, UCMSG.Mensagem.Text));
+
+ UCEMailForm.Update;
+ except
+ on e: Exception do
+ begin
+ Beep;
+ UCEMailForm.Close;
+ MessageDlg(E.Message,mtWarning,[mbok],0);
+ raise;
+ end;
+ end;
+ finally
+ FreeAndNil(MailMsg);
+ FreeAndNil(MailHeader);
+ FreeAndNil(MailRecipients);
+ FreeAndNil(UCEMailForm);
+ end;
+end;
+
+procedure TMailUserControl.EnviaEsqueceuSenha(Nome, Login, Senha, Email, Perfil: String; Key: Word);
+begin
+ if Trim(Email) = '' then
+ Exit;
+ try
+ Senha := TrataSenha(Senha, Key);
+ EnviaEmailTP(Nome, Login, Senha, Email, Perfil, EsqueceuSenha);
+ MessageDlg(EsqueceuSenha.MensagemEmailEnviado, mtInformation, [mbOK], 0);
+ except
+ end;
+end;
+
+function TmailUserControl.TrataSenha(Senha: String; Key: Word): String;
+begin
+ Result := Decrypt(Senha, Key);
+end;
+
+end.
diff --git a/official/2.31RC1/Source/UCMessages.pas b/official/2.31RC1/Source/UCMessages.pas
new file mode 100644
index 0000000..4ef209c
--- /dev/null
+++ b/official/2.31RC1/Source/UCMessages.pas
@@ -0,0 +1,1137 @@
+unit UCMessages;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Classes,
+ Dialogs,
+ Forms,
+ Graphics,
+ SysUtils,
+ UCConsts_language;
+
+type
+ TUCAppMessagesMSG = class(TPersistent)
+ private
+ FMsgRec_LabelDate: String;
+ FMsgsForm_BtBtForward: String;
+ Fmsgsform_btnew: String;
+ FMsgSend_GroupTo: String;
+ FMsgSend_WindowCaption: String;
+ FMsgSend_GroupMessage: String;
+ FMsgsForm_ColFrom: String;
+ FMsgsForm_BtDelete: String;
+ FMsgsForm_BtClose: String; //added by fduenas
+ FMsgRec_LabelMessage: String;
+ FMsgRec_Title: String;
+ FMsgSend_RadioAll: String;
+ FMsgSend_RadioUser: String;
+ FMsgSend_Title: String;
+ FMsgsForm_ColSubject: String;
+ FMsgRec_LabelFrom: String;
+ FMsgsForm_WindowCaption: String;
+ FMsgRec_LabelSubject: String;
+ FMsgRec_WindowCaption: String;
+ FMsgSend_BtSend: String;
+ FMsgSend_BtCancel: String;
+ FMsgsForm_BtReplay: String;
+ FMsgRec_BtClose: String;
+ FMsgSend_LabelSubject: String; //added by fduenas
+ FMsgSend_LabelMessageText: String; //added by fduenas
+ FMsgsForm_PromptDelete: String;
+ FMsgsForm_PromptDelete_WindowCaption: String; //added by fduenas
+ FMsgsForm_ColDate: String;
+ FMsgsForm_NoMessagesSelected: String; //added by fduenas
+ FMsgsForm_NoMessagesSelected_WindowCaption: String; //added by fduenas
+ protected
+ public
+ constructor Create(Aowner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property MsgsForm_BtNew: String read Fmsgsform_btnew write Fmsgsform_btnew;
+ property MsgsForm_BtReplay: String read FMsgsForm_BtReplay write FMsgsForm_BtReplay;
+ property MsgsForm_BtForward: String read FMsgsForm_BtBtForward write FMsgsForm_BtBtForward;
+ property MsgsForm_BtDelete: String read FMsgsForm_BtDelete write FMsgsForm_BtDelete;
+ property MsgsForm_BtClose: String read FMsgsForm_BtClose write FMsgsForm_BtClose; //added By fduenas
+ property MsgsForm_WindowCaption: String read FMsgsForm_WindowCaption write FMsgsForm_WindowCaption;
+ property MsgsForm_ColFrom: String read FMsgsForm_ColFrom write FMsgsForm_ColFrom;
+ property MsgsForm_ColSubject: String read FMsgsForm_ColSubject write FMsgsForm_ColSubject;
+ property MsgsForm_ColDate: String read FMsgsForm_ColDate write FMsgsForm_ColDate;
+ property MsgsForm_PromptDelete: String read FMsgsForm_PromptDelete write FMsgsForm_PromptDelete;
+ property MsgsForm_PromptDelete_WindowCaption: String read FMsgsForm_PromptDelete_WindowCaption write FMsgsForm_PromptDelete_WindowCaption; //added by fduenas
+ property MsgsForm_NoMessagesSelected: String read FMsgsForm_NoMessagesSelected write FMsgsForm_NoMessagesSelected; //added by fduenas
+ property MsgsForm_NoMessagesSelected_WindowCaption: String read FMsgsForm_NoMessagesSelected_WindowCaption write FMsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas
+
+ property MsgRec_BtClose: String read FMsgRec_BtClose write FMsgRec_BtClose;
+ property MsgRec_WindowCaption: String read FMsgRec_WindowCaption write FMsgRec_WindowCaption;
+ property MsgRec_Title: String read FMsgRec_Title write FMsgRec_Title;
+ property MsgRec_LabelFrom: String read FMsgRec_LabelFrom write FMsgRec_LabelFrom;
+ property MsgRec_LabelDate: String read FMsgRec_LabelDate write FMsgRec_LabelDate;
+ property MsgRec_LabelSubject: String read FMsgRec_LabelSubject write FMsgRec_LabelSubject;
+ property MsgRec_LabelMessage: String read FMsgRec_LabelMessage write FMsgRec_LabelMessage;
+
+ property MsgSend_BtSend: String read FMsgSend_BtSend write FMsgSend_BtSend;
+ property MsgSend_BtCancel: String read FMsgSend_BtCancel write FMsgSend_BtCancel;
+ property MsgSend_WindowCaption: String read FMsgSend_WindowCaption write FMsgSend_WindowCaption;
+ property MsgSend_Title: String read FMsgSend_Title write FMsgSend_Title;
+ property MsgSend_GroupTo: String read FMsgSend_GroupTo write FMsgSend_GroupTo;
+ property MsgSend_RadioUser: String read FMsgSend_RadioUser write FMsgSend_RadioUser;
+ property MsgSend_RadioAll: String read FMsgSend_RadioAll write FMsgSend_RadioAll;
+ property MsgSend_GroupMessage: String read FMsgSend_GroupMessage write FMsgSend_GroupMessage;
+ property MsgSend_LabelSubject: String read FMsgSend_LabelSubject write FMsgSend_LabelSubject; //added by fduenas
+ property MsgSend_LabelMessageText: String read FMsgSend_LabelMessageText write FMsgSend_LabelMessageText; //added by fduenas
+ end;
+
+ TUCChangePassError = class(TPersistent)
+ private
+ FInvalidCurrentPassword: String;
+ FNewPasswordError: String;
+ FNewEqualCurrent: String;
+ FPasswordRequired: String;
+ FMinPasswordLength: String;
+ FInvalidNewPassword: String;
+ protected
+ public
+ constructor Create(Aowner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property InvalidCurrentPassword: String read FInvalidCurrentPassword write FInvalidCurrentPassword;
+ property NewPasswordError: String read FNewPasswordError write FNewPasswordError;
+ property NewEqualCurrent: String read FNewEqualCurrent write FNewEqualCurrent;
+ property PasswordRequired: String read FPasswordRequired write FPasswordRequired;
+ property MinPasswordLength: String read FMinPasswordLength write FMinPasswordLength;
+ property InvalidNewPassword: String read FInvalidNewPassword write FInvalidNewPassword;
+ end;
+
+ TUCUserCommonMSG = class(TPersistent)
+ private
+ FPasswordOFF: String;
+ FPasswordChanged: String;
+ FInvalidUserPass: String;
+ FMaxLoginTry: String;
+ FAutoLogonError: String;
+ FFirstMSG: TStrings;
+ FChangePasswordError: TUCChangePassError;
+ FUsuarioExiste: String;
+ fPasswordExpired: String;
+ fForcaTrocaSenha: String;
+ fInactiveLogin: String;
+ procedure SetFErroTrocaSenha(const Value: TUCChangePassError);
+ procedure SetFFirstMSG(const Value: TStrings);
+ protected
+
+ public
+ constructor Create(Aowner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property AutoLogonError: String read FAutoLogonError write FAutoLogonError;
+ property ChangePasswordError: TUCChangePassError read FChangePasswordError write SetFErroTrocaSenha;
+ property InvalidLogin: String read FInvalidUserPass write FInvalidUserPass;
+ property InactiveLogin: String read fInactiveLogin write fInactiveLogin;
+ property InitialMessage: TStrings read FFirstMSG write SetFFirstMSG;
+ property MaxLoginAttemptsError: String read FMaxLoginTry write FMaxLoginTry;
+ property PasswordChanged: String read FPasswordChanged write FPasswordChanged;
+ property BlankPassword: String read FPasswordOFF write FPasswordOFF;
+ property UsuarioExiste: String read FUsuarioExiste write FUsuarioExiste;
+ property PasswordExpired : String read fPasswordExpired write fPasswordExpired;
+ property ForcaTrocaSenha : String read fForcaTrocaSenha write fForcaTrocaSenha;
+ end;
+
+ TUCLoginFormMSG = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FLabelUser: String;
+ FLabelPassword: String;
+ FBtOk: String;
+ FBtCancel: String;
+ FBottomImage: TPicture;
+ FLeftImage: TPicture;
+ FTopImage: TPicture;
+ fLabelTentativas: String;
+ fLabelTentativa: String;
+ procedure SetFBottomImage(const Value: TPicture);
+ procedure SetFLeftImage(const Value: TPicture);
+ procedure SetFTopImage(const Value: TPicture);
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelUser: String read FLabelUser write FLabelUser;
+ property LabelPassword: String read FLabelPassword write FLabelPassword;
+ property BtOk: String read FBtOk write FBtOk;
+ property BtCancel: String read FBtCancel write FBtCancel;
+ property TopImage: TPicture read FTopImage write SetFTopImage;
+ property LeftImage: TPicture read FLeftImage write SetFLeftImage;
+ property BottomImage: TPicture read FBottomImage write SetFBottomImage;
+ property LabelTentativa : String read fLabelTentativa write fLabelTentativa; // by vicente barros leonel
+ property LabelTentativas : String read fLabelTentativas write fLabelTentativas; // by vicente barros leonel
+ end;
+
+ TUCCadUserFormMSG = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FLabelDescricao: String;
+ FColNome: String;
+ FColLogin: String;
+ FColEmail: String;
+ FBtAdic: String;
+ FBtAlt: String;
+ FBtExc: String;
+ FBtAccess: String;
+ FBtPass: String;
+ FBtClose: String;
+ FConfExc: String;
+ FPromptDelete_WindowCaption: String; //added by fduenas
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelDescription: String read FLabelDescricao write FLabelDescricao;
+ property ColName: String read FColNome write FColNome;
+ property ColLogin: String read FColLogin write FColLogin;
+ property ColEmail: String read FColEmail write FColEmail;
+ property BtAdd: String read FBtAdic write FBtAdic;
+ property BtChange: String read FBtAlt write FBtAlt;
+ property BtDelete: String read FBtExc write FBtExc;
+ property PromptDelete: String read FConfExc write FConfExc;
+ property PromptDelete_WindowCaption: String read FPromptDelete_WindowCaption write FPromptDelete_WindowCaption; //added by fduenas
+ property BtRights: String read FBtAccess write FBtAccess;
+ property BtPassword: String read FBtPass write FBtPass;
+ property BtClose: String read FBtClose write FBtClose;
+ end;
+
+ TUCLogControlFormMSG = class(TPersistent)
+ private
+ FColAppID: String;
+ FColData: String;
+ FColNivel: String;
+ FColUsuario: String;
+ FColMensagem: String;
+ FLabelDescription: String;
+ FWindowCaption: String;
+ FLabelLevel: String;
+ FBtClose: String;
+ FConfExc: String;
+ FLabelUser: String;
+ FBtFilt: String;
+ FLabelDate: String;
+ FBtExc: String;
+ FOptionUserAll: String; //added by fduenas
+ FOptionLevelLow: String; //added by fduenas
+ FOptionLevelNormal: String; //added by fduenas
+ FOptionLevelHigh: String; //added by fduenas
+ FOptionLevelCritic: String; //added by fduenas
+ FPromptDelete_WindowCaption: String; //added by fduenas
+ FDeletePerformed: String;
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelDescription: String read FLabelDescription write FLabelDescription;
+ property LabelUser: String read FLabelUser write FLabelUser;
+ property LabelDate: String read FLabelDate write FLabelDate;
+ property LabelLevel: String read FLabelLevel write FLabelLevel;
+ property ColAppID: String read FColAppID write FColAppID;
+ property ColLevel: String read FColNivel write FColNivel;
+ property ColMessage: String read FColMensagem write FColMensagem;
+ property ColUser: String read FColUsuario write FColUsuario;
+ property ColDate: String read FColData write FColData;
+ property BtFilter: String read FBtFilt write FBtFilt;
+ property BtDelete: String read FBtExc write FBtExc;
+ property BtClose: String read FBtClose write FBtClose;
+ property PromptDelete: String read FConfExc write FConfExc;
+ property PromptDelete_WindowCaption: String read FPromptDelete_WindowCaption write FPromptDelete_WindowCaption; //added by fduenas
+ property OptionUserAll: String read FOptionUserAll write FOptionUserAll; //added by fduenas
+ property OptionLevelLow: String read FOptionLevelLow write FOptionLevelLow; //added by fduenas
+ property OptionLevelNormal: String read FOptionLevelNormal write FOptionLevelNormal; //added by fduenas
+ property OptionLevelHigh: String read FOptionLevelHigh write FOptionLevelHigh; //added by fduenas
+ property OptionLevelCritic: String read FOptionLevelCritic write FOptionLevelCritic; //added by fduenas
+ property DeletePerformed: String read FDeletePerformed write FDeletePerformed; //added by fduenas
+ end;
+
+ TUCProfileUserFormMSG = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FLabelDescription: String;
+ FColPerfil: String;
+ FBtAdic: String;
+ FBtAlt: String;
+ FBtExc: String;
+ FBtAcess: String;
+ FBtClose: String;
+ FConfExc: String;
+ FPromptDelete_WindowCaption: String; //added by fduenas
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelDescription: String read FLabelDescription write FLabelDescription;
+ property ColProfile: String read FColPerfil write FColPerfil;
+ property BtAdd: String read FBtAdic write FBtAdic;
+ property BtChange: String read FBtAlt write FBtAlt;
+ property BtDelete: String read FBtExc write FBtExc;
+ property BtRights: String read FBtAcess write FBtAcess; //BGM
+ property PromptDelete: String read FConfExc write FConfExc;
+ property PromptDelete_WindowCaption: String read FPromptDelete_WindowCaption write FPromptDelete_WindowCaption; //added by fduenas
+ property BtClose: String read FBtClose write FBtClose;
+ end;
+
+ TUCAddUserFormMSG = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FLabelAdd: String;
+ FLabelChange: String;
+ FLabelNome: String;
+ FLabelLogin: String;
+ FLabelEmail: String;
+ FCheckPriv: String;
+ FBtSave: String;
+ FBtCancelar: String;
+ FLabelPerfil: String;
+ fCheckExpira: String;
+ fExpiredIn: string;
+ fDay: String;
+ fLabelStatus: String;
+ fStatusDisabled: string;
+ fStatusActive: String;
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelAdd: String read FLabelAdd write FLabelAdd;
+ property LabelChange: String read FLabelChange write FLabelChange;
+ property LabelName: String read FLabelNome write FLabelNome;
+ property LabelLogin: String read FLabelLogin write FLabelLogin;
+ property LabelEmail: String read FLabelEmail write FLabelEmail;
+ property LabelPerfil: String read FLabelPerfil write FLabelPerfil;
+ property CheckPrivileged: String read FCheckPriv write FCheckPriv;
+ property BtSave: String read FBtSave write FBtSave;
+ property BtCancel: String read FBtCancelar write FBtCancelar;
+ property CheckExpira: String read fCheckExpira write fCheckExpira;
+ property Day : String read fDay write fDay;
+ property ExpiredIn : string read fExpiredIn write fExpiredIn;
+ property LabelStatus : String read fLabelStatus write fLabelStatus;
+ property StatusActive : String read fStatusActive write fStatusActive;
+ property StatusDisabled : string read fStatusDisabled write fStatusDisabled;
+ end;
+
+ TUCAddProfileFormMSG = class(TPersistent)
+ private
+ FWindowCaption, FLabelAdd, FLabelChange, FLabelName, FBtGravar, FBtCancel: String;
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelAdd: String read FLabelAdd write FLabelAdd;
+ property LabelChange: String read FLabelChange write FLabelChange;
+ property LabelName: String read FLabelName write FLabelName;
+ property BtSave: String read FBtGravar write FBtGravar;
+ property BtCancel: String read FBtCancel write FBtCancel;
+ end;
+
+ TUCPermissFormMSG = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FBtCancela: String;
+ FBtGrava: String;
+ FBtLock: String;
+ FBtUnlock: String;
+ FPageActions: String;
+ FPageMenu: String;
+ FLabelProfile: String;
+ FLabelUser: String;
+ fPageControls: string;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelUser: String read FLabelUser write FLabelUser;
+ property LabelProfile: String read FLabelProfile write FLabelProfile;
+ property PageMenu: String read FPageMenu write FPageMenu;
+ property PageActions: String read FPageActions write FPageActions;
+ property PageControls: string read fPageControls write fPageControls;
+ property BtUnlock: String read FBtUnlock write FBtUnlock;
+ property BtLock: String read FBtLock write FBtLock;
+ property BtSave: String read FBtGrava write FBtGrava;
+ property BtCancel: String read FBtCancela write FBtCancela;
+ end;
+
+ TUCTrocaSenhaFormMSG = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FBtCancel: String;
+ FBtSave: String;
+ FLabelConfirm: String;
+ FLabelNewPassword: String;
+ FLabelCurrentPassword: String;
+ FLabelDescription: String;
+ protected
+
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelDescription: String read FLabelDescription write FLabelDescription;
+ property LabelCurrentPassword: String read FLabelCurrentPassword write FLabelCurrentPassword;
+ property LabelNewPassword: String read FLabelNewPassword write FLabelNewPassword;
+ property LabelConfirm: String read FLabelConfirm write FLabelConfirm;
+ property BtSave: String read FBtSave write FBtSave;
+ property BtCancel: String read FBtCancel write FBtCancel;
+ end;
+
+ TUCResetPassword = class(TPersistent)
+ private
+ FWindowCaption: String;
+ FLabelPassword: String;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property WindowCaption: String read FWindowCaption write FWindowCaption;
+ property LabelPassword: String read FLabelPassword write FLabelPassword;
+ end;
+
+ TUCCadUserLoggedMSG = Class( TPersistent )
+ private
+ fBtnMessage: String;
+ fBtnRefresh: String;
+ fBtnClose: String;
+ fLabelDescricao: String;
+ fLabelCaption: String;
+ FColLogin: String;
+ FColData: String;
+ FColNome: String;
+ FColComputer: String;
+ fInputCaption: String;
+ fInputText: String;
+ fMsgSystem: String;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property BtnMessage : String read fBtnMessage write fBtnMessage;
+ property BtnRefresh : String read fBtnRefresh write fBtnRefresh;
+ property BtnClose : String read fBtnClose write fBtnClose;
+ property LabelDescricao : String read fLabelDescricao write fLabelDescricao;
+ property LabelCaption : String read fLabelCaption write fLabelCaption;
+ property ColName : String read FColNome write FColNome;
+ property ColLogin : String read FColLogin write FColLogin;
+ property ColComputer : String read FColComputer write FColComputer;
+ property ColData : String read FColData write FColData;
+
+ property InputCaption : String read fInputCaption write fInputCaption;
+ property InputText : String read fInputText write fInputText;
+ property MsgSystem : String read fMsgSystem write fMsgSystem;
+ End;
+
+ TUCTypeBancoDados = ( Interbase , Firebird , MySql , PARADOX, Oracle , SqlServer, PostgreSQL );
+
+ TUCUserSettings = class(TPersistent)
+ private
+ FUserCommomMSG: TUCUserCommonMSG;
+ FLoginFormMSG: TUCLoginFormMSG;
+ FCadUserFormMSG: TUCCadUserFormMSG;
+ FAddUserFormMSG: TUCAddUserFormMSG;
+ FPermissFormMSG: TUCPermissFormMSG;
+ FTrocaSenhaFormMSG: TUCTrocaSenhaFormMSG;
+ FResetPassword: TUCResetPassword;
+ FProfileUserFormMSG: TUCProfileUserFormMSG;
+ FAddProfileFormMSG: TUCAddProfileFormMSG;
+ FLogControlFormMSG: TUCLogControlFormMSG;
+ FAppMessagesMSG: TUCAppMessagesMSG;
+ FPosition: TPosition;
+ fLanguage: TUCLanguage;
+ fUsersLogged: TUCCadUserLoggedMSG;
+ fBancoDados: TUCTypeBancoDados;
+ procedure SetFResetPassword(const Value: TUCResetPassword);
+ procedure SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG);
+ procedure SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG);
+ procedure SetFLogControlFormMSG(const Value: TUCLogControlFormMSG);
+ procedure SetAppMessagesMSG(const Value: TUCAppMessagesMSG);
+ procedure SetfUsersLogged(const Value: TUCCadUserLoggedMSG);
+ procedure SetfBancoDados(const Value: TUCTypeBancoDados);
+ protected
+ procedure SetFUserCommonMsg(const Value: TUCUserCommonMSG);
+ procedure SetFFormLoginMsg(const Value: TUCLoginFormMSG);
+ procedure SetFCadUserFormMSG(const Value: TUCCadUserFormMSG);
+ procedure SetFAddUserFormMSG(const Value: TUCAddUserFormMSG);
+ procedure SetFPermissFormMSG(const Value: TUCPermissFormMSG);
+ procedure SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG);
+ public
+ Type_Int ,
+ Type_Char ,
+ Type_VarChar ,
+ Type_Memo : String;
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+
+ published
+ property AppMessages: TUCAppMessagesMSG read FAppMessagesMSG write SetAppMessagesMSG;
+ property CommonMessages: TUCUserCommonMSG read FUserCommomMSG write SetFUserCommonMSg;
+ property Login: TUCLoginFormMSG read FLoginFormMSG write SetFFormLoginMsg;
+ property Log: TUCLogControlFormMSG read FLogControlFormMSG write SetFLogControlFormMSG;
+ property UsersForm: TUCCadUserFormMSG read FCadUserFormMSG write SetFCadUserFormMSG;
+ property AddChangeUser: TUCAddUserFormMSG read FAddUserFormMSG write SetFAddUserFormMSG;
+ property AddChangeProfile: TUCAddProfileFormMSG read FAddProfileFormMSG write SetFAddProfileFormMSG;
+ property UsersProfile: TUCProfileUserFormMSG read FProfileUserFormMSG write SetFProfileUserFormMSG;
+ property Rights: TUCPermissFormMSG read FPermissFormMSG write SetFPermissFormMSG;
+ property ChangePassword: TUCTrocaSenhaFormMSG read FTrocaSenhaFormMSG write SetFTrocaSenhaFormMSG;
+ property ResetPassword: TUCResetPassword read FResetPassword write SetFResetPassword;
+ property WindowsPosition: TPosition read FPosition write FPosition;
+ Property BancoDados : TUCTypeBancoDados read fBancoDados write SetfBancoDados;
+ property Language : TUCLanguage read fLanguage write fLanguage;
+ property UsersLogged : TUCCadUserLoggedMSG read fUsersLogged write SetfUsersLogged;
+ end;
+
+
+implementation
+
+uses UCSettings;
+
+{ TUserSettings }
+
+procedure TUCUserSettings.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserSettings then
+ Self.CommonMessages.Assign(TUCUserSettings(Source).CommonMessages)
+ else
+ inherited;
+end;
+
+constructor TUCUserSettings.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ FAppMessagesMSG := TUCAppMessagesMSG.Create(nil);
+ FLoginFormMSG := TUCLoginFormMSG.Create(nil);
+ FUserCommomMSG := TUCUserCommonMSG.Create(nil);
+ FCadUserFormMSG := TUCCadUserFormMSG.Create(nil);
+ FAddUserFormMSG := TUCAddUserFormMSG.Create(nil);
+ FAddProfileFormMSG := TUCAddProfileFormMSG.Create(nil);
+ FPermissFormMSG := TUCPermissFormMSG.Create(nil);
+ FProfileUserFormMSG := TUCProfileUserFormMSG.Create(nil);
+ FTrocaSenhaFormMSG := TUCTrocaSenhaFormMSG.Create(nil);
+ FResetPassword := TUCResetPassword.Create(nil);
+ FLogControlFormMSG := TUCLogControlFormMSG.Create(nil);
+ FPosition := poMainFormCenter;
+ fBancoDados := FireBird;
+ fUsersLogged := TUCCadUserLoggedMSG.Create(nil);
+ RetornaSqlBancoDados( fBancoDados, Type_Int,Type_Char,Type_VarChar,Type_Memo );
+end;
+
+destructor TUCUserSettings.Destroy;
+begin
+ SysUtils.FreeAndNil(FAppMessagesMSG);
+ SysUtils.FreeAndNil(FLoginFormMSG);
+ SysUtils.FreeAndNil(FUserCommomMSG);
+ SysUtils.FreeAndNil(FCadUserFormMSG);
+ SysUtils.FreeAndNil(FAddUserFormMSG);
+ SysUtils.FreeAndNil(FAddProfileFormMSG);
+ SysUtils.FreeAndNil(FPermissFormMSG);
+ SysUtils.FreeAndNil(FProfileUserFormMSG);
+ SysUtils.FreeAndNil(FTrocaSenhaFormMSG);
+ SysUtils.FreeAndNil(FResetPassword);
+ SysUtils.FreeAndNil(FLogControlFormMSG);
+ SysUtils.FreeAndNil(fUsersLogged);
+ inherited;
+end;
+
+procedure TUCUserSettings.SetAppMessagesMSG(const Value: TUCAppMessagesMSG);
+begin
+ FAppMessagesMSG := Value;
+end;
+
+procedure TUCUserSettings.SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG);
+begin
+ FAddProfileFormMSG := Value;
+end;
+
+procedure TUCUserSettings.SetFAddUserFormMSG(const Value: TUCAddUserFormMSG);
+begin
+ AddChangeUser := Value;
+end;
+
+procedure TUCUserSettings.SetfBancoDados(const Value: TUCTypeBancoDados);
+begin
+ fBancoDados := Value;
+ RetornaSqlBancoDados( fBancoDados , Type_Int,Type_Char,Type_VarChar,Type_Memo );
+end;
+
+procedure TUCUserSettings.SetFCadUserFormMSG(const Value: TUCCadUserFormMSG);
+begin
+ UsersForm := Value;
+end;
+
+procedure TUCUserSettings.SetFFormLoginMsg(const Value: TUCLoginFormMSG);
+begin
+ Login := Value;
+end;
+
+procedure TUCUserSettings.SetFLogControlFormMSG(const Value: TUCLogControlFormMSG);
+begin
+ FLogControlFormMSG := Value;
+end;
+
+procedure TUCUserSettings.SetFPermissFormMSG(const Value: TUCPermissFormMSG);
+begin
+ Rights := Value;
+end;
+
+procedure TUCUserSettings.SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG);
+begin
+ FProfileUserFormMSG := Value;
+end;
+
+procedure TUCUserSettings.SetFResetPassword(const Value: TUCResetPassword);
+begin
+ FResetPassword := Value;
+end;
+
+procedure TUCUserSettings.SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG);
+begin
+ ChangePassword := Value;
+end;
+
+procedure TUCUserSettings.SetFUserCommonMsg(const Value: TUCUserCommonMSG);
+begin
+ CommonMessages := Value;
+end;
+
+procedure TUCUserSettings.SetfUsersLogged(const Value: TUCCadUserLoggedMSG);
+begin
+ fUsersLogged := Value;
+end;
+
+{ TUserCommonMSG }
+
+procedure TUCUserCommonMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserCommonMSG then
+ begin
+ Self.BlankPassword := TUCUserCommonMSG(Source).BlankPassword;
+ Self.PasswordChanged := TUCUserCommonMSG(Source).PasswordChanged;
+ Self.InitialMessage := TUCUserCommonMSG(Source).InitialMessage;
+ Self.InvalidLogin := TUCUserCommonMSG(Source).InvalidLogin;
+ Self.InactiveLogin := TUCUserCommonMSG(Source).InactiveLogin;
+ Self.MaxLoginAttemptsError := TUCUserCommonMSG(Source).MaxLoginAttemptsError;
+ Self.ChangePasswordError := TUCUserCommonMSG(Source).ChangePasswordError;
+ Self.UsuarioExiste := TUCUserCommonMSG(Source).UsuarioExiste;
+ Self.PasswordExpired := TUCUserCommonMSG(Source).PasswordExpired;
+ Self.ForcaTrocaSenha := TUCUserCommonMSG(Source).ForcaTrocaSenha;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUserCommonMSG.Create(Aowner: TComponent);
+begin
+ inherited Create;
+ ChangePasswordError := TUCChangePassError.Create(nil);
+ FFirstMSG := TStringList.Create;
+end;
+
+destructor TUCUserCommonMSG.Destroy;
+begin
+ SysUtils.FreeAndNil(FChangePasswordError);
+ SysUtils.FreeAndNil(FFirstMSG);
+ inherited;
+end;
+
+procedure TUCUserCommonMSG.SetFErroTrocaSenha(const Value: TUCChangePassError);
+begin
+ FChangePasswordError := Value;
+end;
+
+procedure TUCUserCommonMSG.SetFFirstMSG(const Value: TStrings);
+begin
+ FFirstMSG.Assign(Value);
+end;
+
+{ TLoginFormMSG }
+
+procedure TUCLoginFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCLoginFormMSG then
+ with Source as TUCLoginFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelUser := LabelUser;
+ Self.LabelPassword := LabelPassword;
+ Self.BtOk := BtOK;
+ Self.BtCancel := BtCancel;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCLoginFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+ FTopImage := TPicture.Create;
+ FLeftImage := TPicture.Create;
+ FBottomImage := TPicture.Create;
+end;
+
+destructor TUCLoginFormMSG.Destroy;
+begin
+ SysUtils.FreeAndNil(FTopImage);
+ SysUtils.FreeAndNil(FLeftImage);
+ SysUtils.FreeAndNil(FBottomImage);
+ inherited;
+end;
+
+procedure TUCLoginFormMSG.SetFBottomImage(const Value: TPicture);
+begin
+ FBottomImage.Assign(Value);
+end;
+
+procedure TUCLoginFormMSG.SetFLeftImage(const Value: TPicture);
+begin
+ FLeftImage.Assign(Value);
+end;
+
+procedure TUCLoginFormMSG.SetFTopImage(const Value: TPicture);
+begin
+ FTopImage.Assign(Value);
+end;
+
+{ TCadUserFormMSG }
+
+procedure TUCCadUserFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCCadUserFormMSG then
+ with Source as TUCCadUserFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelDescription := LabelDescription;
+ Self.ColName := ColName;
+ Self.ColLogin := ColLogin;
+ Self.ColEmail := ColEmail;
+ Self.BtAdd := BtAdd;
+ Self.BtChange := BtChange;
+ Self.BtDelete := BtDelete;
+ Self.BtRights := BtRights;
+ Self.BtPassword := BtPassword;
+ Self.BtClose := BtClose;
+ Self.PromptDelete := PromptDelete;
+ Self.PromptDelete_WindowCaption := PromptDelete_WindowCaption; //added by fduenas
+ end
+ else
+ inherited;
+end;
+
+constructor TUCCadUserFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCCadUserFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TAddUserFormMSG }
+
+procedure TUCAddUserFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCAddUserFormMSG then
+ with Source as TUCAddUserFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelAdd := LabelAdd;
+ Self.LabelChange := LabelChange;
+ Self.LabelName := LabelName;
+ Self.LabelLogin := LabelLogin;
+ Self.LabelEmail := LabelEmail;
+ Self.LabelPerfil := LabelPerfil;
+ Self.CheckPrivileged := CheckPrivileged;
+ Self.BtSave := BtSave;
+ Self.BtCancel := BtCancel;
+ Self.CheckExpira := CheckExpira;
+ Self.Day := Day;
+ Self.ExpiredIn := ExpiredIn;
+ Self.LabelStatus := LabelStatus;
+ Self.StatusDisabled := StatusDisabled;
+ Self.StatusActive := StatusActive;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCAddUserFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCAddUserFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TPermissFormMSG }
+
+procedure TUCPermissFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCPermissFormMSG then
+ with Source as TUCPermissFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelUser := LabelUser;
+ Self.LabelProfile := LabelProfile;
+ Self.PageMenu := PageMenu;
+ Self.PageActions := PageActions;
+ Self.BtUnlock := BtUnlock;
+ Self.BtLock := BtLock;
+ Self.BtSave := BtSave;
+ Self.BtCancel := BtCancel;
+ Self.PageControls := PageControls;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCPermissFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCPermissFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TTrocaSenhaFormMSG }
+
+procedure TUCTrocaSenhaFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCTrocaSenhaFormMSG then
+ with Source as TUCTrocaSenhaFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelDescription := LabelDescription;
+ Self.LabelCurrentPassword := LabelCurrentPassword;
+ Self.LabelNewPassword := LabelNewPassword;
+ Self.LabelConfirm := LabelConfirm;
+ Self.BtSave := BtSave;
+ Self.BtCancel := BtCancel;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCTrocaSenhaFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCTrocaSenhaFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TChangePassError }
+
+procedure TUCChangePassError.Assign(Source: TPersistent);
+begin
+ if Source is TUCChangePassError then
+ with Source as TUCChangePassError do
+ begin
+ Self.InvalidCurrentPassword := InvalidCurrentPassword;
+ Self.NewPasswordError := NewPasswordError;
+ Self.NewEqualCurrent := NewEqualCurrent;
+ Self.PasswordRequired := PasswordRequired;
+ Self.MinPasswordLength := MinPasswordLength;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCChangePassError.Create(Aowner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCChangePassError.Destroy;
+begin
+ inherited;
+end;
+
+{ TResetPassword }
+
+procedure TUCResetPassword.Assign(Source: TPersistent);
+begin
+ if Source is TUCResetPassword then
+ begin
+ Self.WindowCaption := TUCResetPassword(Source).WindowCaption;
+ Self.LabelPassword := TUCResetPassword(Source).LabelPassword;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCResetPassword.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCResetPassword.Destroy;
+begin
+ inherited;
+end;
+
+{ TProfileUserFormMSG }
+
+procedure TUCProfileUserFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCProfileUserFormMSG then
+ with Source as TUCProfileUserFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelDescription := LabelDescription;
+ Self.ColProfile := ColProfile;
+ Self.BtAdd := BtAdd;
+ Self.BtChange := BtChange;
+ Self.BtDelete := BtDelete;
+ Self.BtRights := BtRights; //BGM
+ Self.BtClose := BtClose;
+ Self.PromptDelete := PromptDelete;
+ Self.PromptDelete_WindowCaption := PromptDelete_WindowCaption; //added by fduenas
+ end
+ else
+ inherited;
+end;
+
+constructor TUCProfileUserFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCProfileUserFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TAddProfileFormMSG }
+
+procedure TUCAddProfileFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCAddProfileFormMSG then
+ with Source as TUCAddProfileFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelAdd := LabelAdd;
+ Self.LabelChange := LabelChange;
+ Self.LabelName := LabelName;
+ Self.BtSave := BtSave;
+ Self.BtCancel := BtCancel;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCAddProfileFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCAddProfileFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TLogControlFormMSG }
+
+procedure TUCLogControlFormMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCLogControlFormMSG then
+ with Source as TUCLogControlFormMSG do
+ begin
+ Self.WindowCaption := WindowCaption;
+ Self.LabelDescription := LabelDescription;
+ Self.LabelUser := LabelUser;
+ Self.LabelDate := LabelDate;
+ Self.LabelLevel := LabelLevel;
+ Self.ColLevel := ColLevel;
+ Self.ColAppID := ColAppID;
+ Self.ColMessage := ColMessage;
+ Self.ColUser := ColUser;
+ Self.ColDate := ColDate;
+ Self.BtFilter := BtFilter;
+ Self.BtDelete := BtDelete;
+ Self.BtClose := BtClose;
+ Self.PromptDelete := PromptDelete;
+ Self.PromptDelete_WindowCaption := PromptDelete_WindowCaption; //added by fduenas
+ Self.OptionUserAll := OptionUserAll; //added by fduenas
+ Self.OptionLevelLow := OptionLevelLow; //added by fduenas
+ Self.OptionLevelNormal := OptionLevelNormal; //added by fduenas
+ Self.OptionLevelHigh := OptionLevelHigh; //added by fduenas
+ Self.OptionLevelCritic := OptionLevelCritic; //added by fduenas
+ Self.DeletePerformed := DeletePerformed; //added by fduenas
+ end
+ else
+ inherited;
+end;
+
+constructor TUCLogControlFormMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCLogControlFormMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TAppMessagesMSG }
+
+procedure TUCAppMessagesMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCAppMessagesMSG then
+ with Source as TUCAppMessagesMSG do
+ begin
+ Self.MsgsForm_BtNew := MsgsForm_BtNew;
+ Self.MsgsForm_BtReplay := MsgsForm_BtReplay;
+ Self.MsgsForm_BtForward := MsgsForm_BtForward;
+ Self.MsgsForm_BtDelete := MsgsForm_BtDelete;
+ Self.MsgsForm_WindowCaption := MsgsForm_WindowCaption;
+ Self.MsgsForm_ColFrom := MsgsForm_ColFrom;
+ Self.MsgsForm_ColSubject := MsgsForm_ColSubject;
+ Self.MsgsForm_ColDate := MsgsForm_ColDate;
+ Self.MsgsForm_PromptDelete := MsgsForm_PromptDelete;
+ Self.MsgsForm_PromptDelete_WindowCaption := MsgsForm_PromptDelete_WindowCaption; //added by fduenas
+ Self.MsgsForm_BtClose := MsgsForm_BtClose; //added by fduenas
+ Self.MsgsForm_NoMessagesSelected := MsgsForm_NoMessagesSelected; //added by fduenas
+ Self.MsgsForm_NoMessagesSelected_WindowCaption := MsgsForm_NoMessagesSelected_WindowCaption; //added by fduenas
+
+ Self.MsgRec_BtClose := MsgRec_BtClose;
+ Self.MsgRec_WindowCaption := MsgRec_WindowCaption;
+ Self.MsgRec_Title := MsgRec_Title;
+ Self.MsgRec_LabelFrom := MsgRec_LabelFrom;
+ Self.MsgRec_LabelDate := MsgRec_LabelDate;
+ Self.MsgRec_LabelSubject := MsgRec_LabelSubject;
+ Self.MsgRec_LabelMessage := MsgRec_LabelMessage;
+
+ Self.MsgSend_BtSend := MsgSend_BtSend;
+ Self.MsgSend_BtCancel := MsgSend_BtCancel;
+ Self.MsgSend_WindowCaption := MsgSend_WindowCaption;
+ Self.MsgSend_Title := MsgSend_Title;
+ Self.MsgSend_GroupTo := MsgSend_GroupTo;
+ Self.MsgSend_RadioUser := MsgSend_RadioUser;
+ Self.MsgSend_RadioAll := MsgSend_RadioAll;
+ Self.MsgSend_GroupMessage := MsgSend_GroupMessage;
+ Self.MsgSend_LabelSubject := MsgSend_LabelSubject;
+ Self.MsgSend_LabelMessageText := MsgSend_LabelMessageText;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCAppMessagesMSG.Create(Aowner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCAppMessagesMSG.Destroy;
+begin
+ inherited;
+end;
+
+{ TUCHistoryMSG }
+
+{ TUCFieldType }
+ {
+procedure TUCFieldType.Assign(Source: TPersistent);
+begin
+ if Source is TUCFieldType then
+ Begin
+ Self.Type_VarChar := TUCFieldType(Source).Type_VarChar;
+ Self.Type_Char := TUCFieldType(Source).Type_Char;
+ Self.Type_Int := TUCFieldType(Source).Type_Int;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCFieldType.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCFieldType.Destroy;
+begin
+
+ inherited;
+end; }
+
+{ TUCCadUserLoggedMSG }
+
+procedure TUCCadUserLoggedMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCCadUserLoggedMSG then
+ Begin
+ BtnMessage := TUCCadUserLoggedMSG(Source).BtnMessage;
+ BtnRefresh := TUCCadUserLoggedMSG(Source).BtnRefresh;
+ BtnClose := TUCCadUserLoggedMSG(Source).BtnClose;
+ LabelDescricao := TUCCadUserLoggedMSG(Source).LabelDescricao;
+ LabelCaption := TUCCadUserLoggedMSG(Source).LabelCaption;
+ ColName := TUCCadUserLoggedMSG(Source).ColName;
+ ColLogin := TUCCadUserLoggedMSG(Source).ColLogin;
+ ColComputer := TUCCadUserLoggedMSG(Source).ColComputer;
+ ColData := TUCCadUserLoggedMSG(Source).ColData;
+ InputCaption := TUCCadUserLoggedMSG(Source).InputCaption;
+ InputText := TUCCadUserLoggedMSG(Source).InputText;
+ MsgSystem := TUCCadUserLoggedMSG(Source).MsgSystem
+ End
+ else
+ inherited;
+end;
+
+constructor TUCCadUserLoggedMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCCadUserLoggedMSG.Destroy;
+begin
+ inherited;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/UCObjSel_U.dfm b/official/2.31RC1/Source/UCObjSel_U.dfm
new file mode 100644
index 0000000..4da08b2
Binary files /dev/null and b/official/2.31RC1/Source/UCObjSel_U.dfm differ
diff --git a/official/2.31RC1/Source/UCObjSel_U.pas b/official/2.31RC1/Source/UCObjSel_U.pas
new file mode 100644
index 0000000..eff55e1
--- /dev/null
+++ b/official/2.31RC1/Source/UCObjSel_U.pas
@@ -0,0 +1,334 @@
+unit UCObjSel_U;
+
+interface
+
+uses
+ {$IFDEF VER130}
+ {$ELSE}
+ Variants,
+ {$ENDIF}
+ ActnList,
+ Buttons,
+ Classes,
+ ComCtrls,
+ Controls,
+ DB,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Menus,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ UcConsts_Language,
+ Windows;
+
+type
+ TQControl = class(TControl)
+ published
+ property Caption;
+ end;
+
+ TUCObjSel = class(TForm)
+ ListaCompsDisponiveis: TListView;
+ ListaCompsSelecionados: TListView;
+ Panel1: TPanel;
+ lbForm: TLabel;
+ Image1: TImage;
+ lbTitle: TLabel;
+ lbCompDisp: TLabel;
+ lbCompSel: TLabel;
+ btsellall: TSpeedButton;
+ btsel: TSpeedButton;
+ btunsel: TSpeedButton;
+ btunselall: TSpeedButton;
+ BtOK: TBitBtn;
+ btCancel: TBitBtn;
+ lbGrupo: TLabel;
+ lbGroup: TLabel;
+ cbFilter: TComboBox;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormShow(Sender: TObject);
+ procedure btsellallClick(Sender: TObject);
+ procedure btunselallClick(Sender: TObject);
+ procedure btselClick(Sender: TObject);
+ procedure btunselClick(Sender: TObject);
+ procedure ListaCompsDisponiveisDblClick(Sender: TObject);
+ procedure ListaCompsSelecionadosDblClick(Sender: TObject);
+ procedure btCancelClick(Sender: TObject);
+ procedure BtOKClick(Sender: TObject);
+ procedure FormActivate(Sender: TObject);
+ procedure FormCreate(Sender: TObject);
+ procedure cbFilterClick(Sender: TObject);
+ procedure cbFilterKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
+ private
+ FListaBotoes: TStringList;
+ FListaLabelsEdits: TStringList;
+ procedure MakeDispItems;
+ public
+ FForm: TCustomForm;
+ FUserControl: TUserControl;
+ FInitialObjs: TStringList;
+ end;
+
+implementation
+
+{$R *.dfm}
+
+procedure TUCObjSel.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TUCObjSel.FormShow(Sender: TObject);
+begin
+ lbForm.Left := lbTitle.Left + lbTitle.Width + 10; //added by fduenas to adjust window name
+ lbgroup.Left := lbGrupo.Left + lbGrupo.Width + 10; //added by fduenas to adjust window name
+ lbForm.Caption := FForm.Name;
+ FInitialObjs.Text := UpperCase(FInitialObjs.Text);
+ ListaCompsSelecionados.Items.Clear;
+ MakeDispItems;
+end;
+
+procedure TUCObjSel.MakeDispItems;
+var
+ Componente: TComponent;
+ Classe: String;
+ Contador: Integer;
+begin
+{
+All 0
+Buttons 1
+Fields 2
+Edits 3
+Labels 4
+MenuItems 5
+Actions 6
+}
+ ListaCompsDisponiveis.Items.Clear;
+ for Contador := 0 to Pred(FForm.ComponentCount) do
+ begin
+ Componente := FForm.Components[Contador];
+ Classe := UpperCase(Componente.ClassName);
+ if (Componente is TControl) or (Componente is TMenuItem) or (Componente is TField) or (Componente is TAction) then
+ if (cbFilter.ItemIndex <= 0) or
+ ((cbFilter.ItemIndex = 1) and (Componente is TButtonControl){(FListaBotoes.IndexOf(Classe) > -1)}) or
+ ((cbFilter.ItemIndex = 2) and (Componente is TField)) or
+ ((cbFilter.ItemIndex = 3) and (Componente is TCustomEdit){(FListaLabelsEdits.IndexOf(Classe) > -1)}) or
+ ((cbFilter.ItemIndex = 4) and (Componente is TCustomLabel)) or
+ ((cbFilter.ItemIndex = 5) and (Componente is TMenuItem)) or
+ ((cbFilter.ItemIndex = 6) and (Componente is TCustomAction)) then
+ if FInitialObjs.IndexOf(UpperCase(Componente.Name)) = -1 then
+ with ListaCompsDisponiveis.Items.Add do
+ begin
+ Caption := Componente.ClassName;
+ SubItems.Add(Componente.Name);
+ if Componente is TMenuItem then
+ SubItems.Add(StringReplace(TMenuItem(Componente).Caption, '&', '', [rfReplaceAll]))
+ else
+ if Componente is TAction then
+ SubItems.Add(StringReplace(TAction(Componente).Caption, '&', '', [rfReplaceAll]))
+ else
+ if Componente is TField then
+ SubItems.Add(TField(Componente).DisplayName)
+ else
+ SubItems.Add(StringReplace(TQControl(FForm.Components[Contador]).Caption, '&', '', [rfReplaceAll]));
+ end;
+ end;
+end;
+
+procedure TUCObjSel.btsellallClick(Sender: TObject);
+var
+ Contador: Integer;
+begin
+ for Contador := 0 to Pred(ListaCompsDisponiveis.Items.Count) do
+ begin
+ FInitialObjs.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]);
+ with ListaCompsSelecionados.Items.Add do
+ begin
+ Caption := ListaCompsDisponiveis.Items[Contador].SubItems[1];
+ SubItems.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]);
+ SubItems.Add(ListaCompsDisponiveis.Items[Contador].Caption);
+ end;
+ end;
+ ListaCompsDisponiveis.Items.Clear;
+end;
+
+procedure TUCObjSel.btunselallClick(Sender: TObject);
+begin
+ ListaCompsSelecionados.Items.Clear;
+ FInitialObjs.Clear;
+ MakeDispItems;
+end;
+
+procedure TUCObjSel.btselClick(Sender: TObject);
+var
+ Contador: Integer;
+begin
+ for Contador := 0 to ListaCompsDisponiveis.Items.Count - 1 do
+ if ListaCompsDisponiveis.Items.Item[Contador].Selected then
+ begin
+ FInitialObjs.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]);
+ with ListaCompsSelecionados.Items.Add do
+ begin
+ Caption := ListaCompsDisponiveis.Items[Contador].SubItems[1];
+ SubItems.Add(ListaCompsDisponiveis.Items[Contador].SubItems[0]);
+ SubItems.Add(ListaCompsDisponiveis.Items[Contador].Caption);
+ end;
+ end;
+
+ Contador := 0;
+ while Contador <= Pred(ListaCompsDisponiveis.Items.Count) do
+ if ListaCompsDisponiveis.Items[Contador].Selected then
+ ListaCompsDisponiveis.Items[Contador].Delete
+ else
+ Inc(Contador);
+end;
+
+procedure TUCObjSel.btunselClick(Sender: TObject);
+var
+ Contador: Integer;
+ Obj: TComponent;
+begin
+ if ListaCompsSelecionados.SelCount = 0 then
+ Exit;
+ for Contador := 0 to Pred(ListaCompsSelecionados.Items.Count) do
+ if ListaCompsSelecionados.Items.Item[Contador].Selected then
+ begin
+ if FInitialObjs.IndexOf(ListaCompsSelecionados.Items[Contador].SubItems[0]) > -1 then
+ FInitialObjs.Delete(FInitialObjs.IndexOf(ListaCompsSelecionados.Items[Contador].SubItems[0]));
+
+ if ListaCompsSelecionados.Items[Contador].SubItems.Count > 1 then
+ with ListaCompsDisponiveis.Items.Add do
+ begin
+ if ListaCompsSelecionados.Items[Contador].SubItems.Count > 1 then
+ Caption := ListaCompsSelecionados.Items[Contador].SubItems[1];
+ SubItems.Add(ListaCompsSelecionados.Items[Contador].SubItems[0]);
+
+ Obj := FForm.FindComponent(ListaCompsSelecionados.Items[Contador].SubItems[0]);
+ if Obj is TMenuItem then
+ SubItems.Add(TMenuItem(Obj).Caption)
+ else
+ if Obj is TAction then
+ SubItems.Add(TMenuItem(Obj).Caption)
+ else
+ if Obj is TField then
+ SubItems.Add(TField(Obj).DisplayName)
+ else
+ SubItems.Add(TQControl(Obj).Caption);
+ end;
+ end;
+
+ Contador := 0;
+ while Contador <= Pred(ListaCompsSelecionados.Items.Count) do
+ if ListaCompsSelecionados.Items[Contador].Selected then
+ ListaCompsSelecionados.Items[Contador].Delete
+ else
+ Inc(Contador);
+end;
+
+procedure TUCObjSel.ListaCompsDisponiveisDblClick(Sender: TObject);
+begin
+ btsel.Click;
+end;
+
+procedure TUCObjSel.ListaCompsSelecionadosDblClick(Sender: TObject);
+begin
+ if ListaCompsSelecionados.Items.Count = 0 then
+ Exit;
+ if ListaCompsSelecionados.SelCount = 1 then
+ ListaCompsSelecionados.Selected.EditCaption;
+end;
+
+procedure TUCObjSel.btCancelClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TUCObjSel.BtOKClick(Sender: TObject);
+var
+ Contador: Integer;
+begin
+ if FUserControl.ExtraRights.Count > 0 then
+ begin
+ Contador := 0;
+ while Contador <= Pred(FUserControl.ExtraRights.Count) do
+ if UpperCase(FUserControl.ExtraRights[Contador].FormName) = UpperCase(FForm.Name) then
+ FUserControl.ExtraRights.Delete(Contador)
+ else
+ Inc(Contador);
+ end;
+
+ for Contador := 0 to Pred(ListaCompsSelecionados.Items.Count) do
+ with FUserControl.ExtraRights.Add do
+ begin
+ Caption := ListaCompsSelecionados.Items[Contador].Caption;
+ CompName := ListaCompsSelecionados.Items[Contador].SubItems[0];
+ FormName := FForm.Name;
+ GroupName := lbGroup.Caption;
+ end;
+ Close;
+end;
+
+procedure TUCObjSel.FormActivate(Sender: TObject);
+var
+ Contador: Integer;
+begin
+ for Contador := 0 to Pred(FUserControl.ExtraRights.Count) do
+ if UpperCase(FUserControl.ExtraRights[Contador].FormName) = UpperCase(FForm.Name) then
+ if FForm.FindComponent(FUserControl.ExtraRights[Contador].CompName) <> nil then
+ with ListaCompsSelecionados.Items.Add do
+ begin
+ Caption := FUserControl.ExtraRights[Contador].Caption;
+ SubItems.Add(FUserControl.ExtraRights[Contador].CompName);
+ if FForm.FindComponent(FUserControl.ExtraRights[Contador].CompName) <> nil then
+ SubItems.Add(FForm.FindComponent(FUserControl.ExtraRights[Contador].CompName).ClassName);
+ end;
+
+ lbTitle.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_TitleLabel');
+ lbGrupo.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_GroupLabel');
+ lbCompDisp.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_CompDispLabel');
+ lbCompSel.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_CompSelLabel');
+ ListaCompsSelecionados.Columns[0].Caption := RetornaLingua( FUserControl.Language,'Const_Contr_DescCol');
+ btCancel.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_BTCancel');
+ BtOK.Caption := RetornaLingua( FUserControl.Language,'Const_Contr_BtOK');
+
+ //Lines Bellow added by fduenas
+ btSellAll.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtSellAllHint');
+ btSel.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtSelHint');
+ btUnSel.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtUnSelHint');
+ btUnSelAll.Hint := RetornaLingua( FUserControl.Language,'Const_Contr_BtUnSelAllHint');
+
+ lbForm.Left := lbTitle.Width + 66;
+end;
+
+procedure TUCObjSel.FormCreate(Sender: TObject);
+begin
+ cbFilter.ItemIndex := 0;
+ FListaBotoes := TStringList.Create;
+ FListaBotoes.CommaText := 'TButton,TSpeedButton,TBitBtn,TRxSpeedButton,' +
+ 'TRxSpinButton,TRxSwitch,TLMDButton,TLMDMMButton,TLMDShapeButton,' +
+ 'TLMD3DEffectButton,TLMDWndButtonShape,TJvHTButton,TJvBitBtn,TJvImgBtn,' +
+ 'TJvArrowButton,TJvTransparenftButton,TJvTransparentButton2,TJvSpeedButton';
+ FListaBotoes.Text := UpperCase(FListaBotoes.Text);
+ FListaLabelsEdits := TStringList.Create;
+ FListaLabelsEdits.CommaText := 'TEdit,TLabel,TStaticText,TLabeledEdit,' +
+ 'TRxLabel,TComboEdit,TFileNamefEdit,TDirectoryEdit,TDateEdit,' +
+ 'TDateTimePicker,TRxCalcEdit,TCurrencyEdit,TRxSpinEdit';
+ FListaLabelsEdits.Text := UpperCase(FListaLabelsEdits.Text);
+end;
+
+procedure TUCObjSel.cbFilterClick(Sender: TObject);
+begin
+ MakeDispItems;
+end;
+
+procedure TUCObjSel.cbFilterKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
+begin
+ MakeDispItems;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/UCReg.dcr b/official/2.31RC1/Source/UCReg.dcr
new file mode 100644
index 0000000..137f24a
Binary files /dev/null and b/official/2.31RC1/Source/UCReg.dcr differ
diff --git a/official/2.31RC1/Source/UCReg.pas b/official/2.31RC1/Source/UCReg.pas
new file mode 100644
index 0000000..c156ceb
--- /dev/null
+++ b/official/2.31RC1/Source/UCReg.pas
@@ -0,0 +1,348 @@
+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;
+
+procedure Register;
+procedure ShowControlsEditor(Componente: TUCControls);
+procedure ShowUserControlsEditor(Componente: TUserControl);
+
+implementation
+
+uses
+ Dialogs,
+ Forms,
+ SysUtils,
+ UCAbout,
+ UCIdle,
+ UCObjSel_U,
+ UCEditorForm_U,
+ ActnList,
+ ActnMan,
+ ActnMenus,
+ Menus,
+ StdCtrls,
+ UCSettings,
+ Variants,
+ UcMail;
+
+procedure Register;
+begin
+ RegisterComponents('UC Main',
+ [TUserControl,
+ TUCSettings,
+ TUCControls,
+ TUCApplicationMessage,
+ TUCIdle,
+ TMailUserControl
+ ]);
+
+ 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_Action ,
+ Controle_MainMenu ,
+ Controle_ActionManager,
+ Controle_ActionMainMenuBar : 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_action := Formulario.cbActionList.Text;
+
+ if Formulario.cbActionMainMenuBar.ItemIndex >= 0 then
+ Controle_ActionMainMenuBar := Formulario.cbActionMainMenuBar.Text;
+
+ if Formulario.cbActionManager.ItemIndex >= 0 then
+ Controle_ActionManager := Formulario.cbActionManager.Text;
+
+ if Formulario.cbMainMenu.ItemIndex >= 0 then
+ Controle_MainMenu := Formulario.cbMainMenu.Text;
+
+ if Formulario.cbUserAction.ItemIndex >= 0 then
+ UserActionMenuItem := Formulario.cbUserAction.Text;
+
+ if Formulario.cbUserMenuItem.ItemIndex >= 0 then
+ UserActionMenuItem := Formulario.cbUserMenuItem.Text;
+
+ if Formulario.cbUserProfileAction.ItemIndex >= 0 then
+ UserProfileActionMenuItem := Formulario.cbUserProfileAction.Text;
+ if Formulario.cbUserProfileMenuItem.ItemIndex >= 0 then
+ UserProfileActionMenuItem := Formulario.cbUserProfileMenuItem.Text;
+
+ if Formulario.cbLogControlAction.ItemIndex >= 0 then
+ LogControlActionMeuItem := Formulario.cbLogControlAction.Text;
+ if Formulario.cbLogControlMenuItem.ItemIndex >= 0 then
+ LogControlActionMeuItem := Formulario.cbLogControlMenuItem.Text;
+
+ if Formulario.cbUserPasswordChangeAction.ItemIndex >= 0 then
+ UserPasswordChangeActionMenuItem := Formulario.cbUserPasswordChangeAction.Text;
+ if Formulario.cbUserPasswordChangeMenuItem.ItemIndex >= 0 then
+ UserPasswordChangeActionMenuItem := Formulario.cbUserPasswordChangeMenuItem.Text;
+
+
+ for I := 0 to FormularioDono.ComponentCount - 1 do
+ begin
+ if (FormularioDono.Components[I].Name = Controle_Action) and (Formulario.cbActionList.ItemIndex >= 0) then
+ ControlRight.ActionList := TActionList(FormularioDono.Components[I]);
+
+ if (FormularioDono.Components[I].Name = Controle_ActionMainMenuBar ) and (Formulario.cbActionMainMenuBar.ItemIndex >= 0) then
+ ControlRight.ActionMainMenuBar := TActionMainMenuBar(UserControl.Owner.Components[I]);
+
+ if (FormularioDono.Components[I].Name = Controle_ActionManager) and (Formulario.cbActionManager.ItemIndex >= 0) then
+ ControlRight.ActionManager := TActionManager(FormularioDono.Components[I]);
+
+ if (FormularioDono.Components[I].Name = Controle_MainMenu) and (Formulario.cbMainMenu.ItemIndex >= 0) then
+ ControlRight.MainMenu := TMainMenu(FormularioDono.Components[I]);
+
+ if (FormularioDono.Components[I].Name = UserActionMenuItem) and (Formulario.cbUserAction.ItemIndex >= 0) then
+ User.Action := TAction(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = UserActionMenuItem) and (Formulario.cbUserMenuItem.ItemIndex >= 0) then
+ User.MenuItem := TMenuItem(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = UserPasswordChangeActionMenuItem) and (Formulario.cbUserPasswordChangeAction.ItemIndex >= 0) then
+ UserPasswordChange.Action := TAction(FormularioDono.Components[I]);
+ if (FormularioDono.Components[I].Name = UserPasswordChangeActionMenuItem) and (Formulario.cbUserPasswordChangeMenuItem.ItemIndex >= 0) then
+ UserPasswordChange.MenuItem := TMenuItem(FormularioDono.Components[I]);
+ end;
+
+ User.UsePrivilegedField := Formulario.ckUserUsePrivilegedField.Checked;
+ User.ProtectAdministrator := Formulario.ckUserProtectAdministrator.Checked;
+ UserProfile.Active := Formulario.ckUserProfileActive.Checked;
+ UserPasswordChange.ForcePassword := Formulario.ckUserPassowrdChangeForcePassword.Checked;
+ UserPasswordChange.MinPasswordLength := Formulario.spedtUserPasswordChangeMinPasswordLength.Value;
+
+ LogControl.TableLog := Formulario.edtLogControlTableLog.Text;
+ LogControl.Active := Formulario.ckLogControlActive.Checked;
+
+ Login.MaxLoginAttempts := Formulario.spedtMaxLoginAttempts.Value;
+ Login.GetLoginName := TUCGetLoginName(Formulario.cbGetLoginName.ItemIndex);
+ Login.InitialLogin.User := Formulario.edtInitialLoginUser.Text;
+ Login.InitialLogin.Password := Formulario.edtInitialLoginPassword.Text;
+ Login.InitialLogin.Email := Formulario.edtInitialLoginEmail.Text;
+ Login.InitialLogin.InitialRights := Formulario.mmInitialRights.Lines;
+ Login.AutoLogin.Active := Formulario.ckLoginAutologinActive.Checked;
+ Login.AutoLogin.User := Formulario.edtLoginAutoLoginUser.Text;
+ Login.AutoLogin.Password := Formulario.edtLoginAutoLoginPassword.Text;
+ Login.AutoLogin.MessageOnError := Formulario.ckLoginAutoLoginMessageOnError.Checked;
+ UserSettings.Login.TopImage := Formulario.imgTop.Picture;
+ UserSettings.Login.LeftImage := Formulario.imgLeft.Picture;
+ UserSettings.Login.BottomImage := Formulario.imgBottom.Picture;
+ end;
+
+ Modulo := (BorlandIDEServices as IOTAModuleServices).CurrentModule;
+ for I := 0 to Modulo.GetModuleFileCount - 1 do
+ begin
+ Editor := Modulo.GetModuleFileEditor(I);
+ Editor.QueryInterface(IOTAFormEditor, FormEditor);
+ if FormEditor <> nil then
+ begin
+ FormEditor.MarkModified;
+ Break;
+ end;
+ end;
+ end;
+ finally
+ SysUtils.FreeAndNil(Formulario);
+ end;
+end;
+
+procedure ShowControlsEditor(Componente: TUCControls);
+var
+ FUCControl: TUCControls;
+ FEditor: IOTAEditor;
+ FModulo: IOTAModule;
+ FFormEditor: IOTAFormEditor;
+ I: Integer;
+begin
+ FUCControl := Componente;
+ if not Assigned(FUCControl.UserControl) then
+ begin
+ MessageDlg('A propriedade UserControl tem que ser informada e o componente ' + #13 + #10 + 'tem que estar visível!', mtInformation, [mbOK], 0);
+ Exit;
+ end;
+
+ with TUCObjSel.Create(nil) do
+ begin
+ FForm := TCustomForm(FUCControl.Owner);
+ FUserControl := FUCControl.UserControl;
+ FInitialObjs := TStringList.Create;
+ TUCControls(Componente).ListComponents(FForm.Name, FInitialObjs);
+ lbGroup.Caption := TUCControls(Componente).GroupName;
+ ShowModal;
+ Free;
+ end;
+
+ FModulo := (BorlandIDEServices as IOTAModuleServices).FindFormModule(FUCControl.UserControl.Owner.Name);
+ if FModulo = nil then
+ begin
+ ShowMessage('Modulo ' + FUCControl.UserControl.Owner.Name + ' não encontrado!');
+ Exit;
+ end
+ else
+ for I := 0 to FModulo.GetModuleFileCount - 1 do
+ begin
+ FEditor := FModulo.GetModuleFileEditor(I);
+ FEditor.QueryInterface(IOTAFormEditor, FFormEditor);
+ if FFormEditor <> nil then
+ begin
+ FFormEditor.MarkModified;
+ Break;
+ end;
+ end;
+end;
+
+{TUCControlsEditor}
+
+procedure TUCControlsEditor.Edit;
+begin
+ ShowControlsEditor(TUCControls(Component));
+end;
+
+procedure TUCControlsEditor.ExecuteVerb(Index: Integer);
+begin
+ Edit;
+end;
+
+function TUCControlsEditor.GetVerb(Index: Integer): String;
+begin
+ Result := '&Selecionar Componentes...';
+end;
+
+function TUCControlsEditor.GetVerbCount: Integer;
+begin
+ Result := 1;
+end;
+
+{ TUserControlEditor }
+
+procedure TUserControlEditor.Edit;
+begin
+ ShowUserControlsEditor(TUserControl(Component));
+end;
+
+procedure TUserControlEditor.ExecuteVerb(Index: Integer);
+begin
+ Edit;
+end;
+
+function TUserControlEditor.GetVerb(Index: Integer): String;
+begin
+ Result := 'Configurar...';
+end;
+
+function TUserControlEditor.GetVerbCount: Integer;
+begin
+ Result := 1;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/UCSettings.pas b/official/2.31RC1/Source/UCSettings.pas
new file mode 100644
index 0000000..bb9e447
--- /dev/null
+++ b/official/2.31RC1/Source/UCSettings.pas
@@ -0,0 +1,1425 @@
+unit UCSettings;
+
+interface
+
+uses
+ Classes,
+ Forms,
+ UCMessages,
+ UcConsts_Language;
+
+type
+ TUCSettings = class(TComponent)
+ private
+ FAddProfileFormMSG: TUCAddProfileFormMSG;
+ FAddUserFormMSG: TUCAddUserFormMSG;
+ FCadUserFormMSG: TUCCadUserFormMSG;
+ FLogControlFormMSG: TUCLogControlFormMSG;
+ FLoginFormMSG: TUCLoginFormMSG;
+ FPermissFormMSG: TUCPermissFormMSG;
+ FProfileUserFormMSG: TUCProfileUserFormMSG;
+ FResetPassword: TUCResetPassword;
+ FTrocaSenhaFormMSG: TUCTrocaSenhaFormMSG;
+ FUserCommomMSG: TUCUserCommonMSG;
+ FAppMessagesMSG: TUCAppMessagesMSG;
+ FPosition: TPosition;
+ fLanguage: TUCLanguage;
+ fUsersLogged: TUCCadUserLoggedMSG;
+ fBancoDados: TUCTypeBancoDados;
+ procedure SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG);
+ procedure SetFAddUserFormMSG(const Value: TUCAddUserFormMSG);
+ procedure SetFCadUserFormMSG(const Value: TUCCadUserFormMSG);
+ procedure SetFFormLoginMsg(const Value: TUCLoginFormMSG);
+ procedure SetFLogControlFormMSG(const Value: TUCLogControlFormMSG);
+ procedure SetFPermissFormMSG(const Value: TUCPermissFormMSG);
+ procedure SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG);
+ procedure SetFResetPassword(const Value: TUCResetPassword);
+ procedure SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG);
+ procedure SetFUserCommonMSg(const Value: TUCUserCommonMSG);
+ procedure SetAppMessagesMSG(const Value: TUCAppMessagesMSG);
+ procedure SetfLanguage(const Value: TUCLanguage);
+ procedure SetfUsersLogged(const Value: TUCCadUserLoggedMSG);
+ procedure SetfBancoDados(const Value: TUCTypeBancoDados);
+ protected
+ public
+ Type_Int ,
+ Type_Char ,
+ Type_VarChar ,
+ Type_Memo : String;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property AppMessages: TUCAppMessagesMSG read FAppMessagesMSG write SetAppMessagesMSG;
+ property CommonMessages: TUCUserCommonMSG read FUserCommomMSG write SetFUserCommonMSg;
+ property Login: TUCLoginFormMSG read FLoginFormMSG write SetFFormLoginMsg;
+ property Log: TUCLogControlFormMSG read FLogControlFormMSG write SetFLogControlFormMSG;
+ property UsersForm: TUCCadUserFormMSG read FCadUserFormMSG write SetFCadUserFormMSG;
+ property AddChangeUser: TUCAddUserFormMSG read FAddUserFormMSG write SetFAddUserFormMSG;
+ property AddChangeProfile: TUCAddProfileFormMSG read FAddProfileFormMSG write SetFAddProfileFormMSG;
+ property UsersProfile: TUCProfileUserFormMSG read FProfileUserFormMSG write SetFProfileUserFormMSG;
+ property Rights: TUCPermissFormMSG read FPermissFormMSG write SetFPermissFormMSG;
+ property ChangePassword: TUCTrocaSenhaFormMSG read FTrocaSenhaFormMSG write SetFTrocaSenhaFormMSG;
+ property ResetPassword: TUCResetPassword read FResetPassword write SetFResetPassword;
+ Property BancoDados : TUCTypeBancoDados read fBancoDados write SetfBancoDados;
+ property WindowsPosition: TPosition read FPosition write FPosition default poMainFormCenter;
+ Property Language : TUCLanguage read fLanguage write SetfLanguage;
+ property UsersLogged : TUCCadUserLoggedMSG read fUsersLogged write SetfUsersLogged;
+ end;
+
+procedure IniSettings (DestSettings: TUCUserSettings);
+procedure IniSettings2(DestSettings: TUCSettings);
+
+procedure AlterLanguage(DestSettings: TUCUserSettings);
+procedure AlterLanguage2(DestSettings: TUCSettings);
+
+procedure RetornaSqlBancoDados( fBanco : TUCTypeBancoDados ; var Int, Char, VarChar,
+ Memo: String);
+
+implementation
+
+uses
+ Graphics,
+ SysUtils,
+ UCBase;
+// UCConsts;
+
+{$IFDEF DELPHI9_UP} {$REGION 'Inicializacao'} {$ENDIF}
+
+procedure RetornaSqlBancoDados( fBanco : TUCTypeBancoDados ; var Int, Char, VarChar,
+ Memo: String);
+begin
+ Int := 'INT';
+ Char := 'CHAR';
+ VarChar := 'VARCHAR';
+
+ Case fBanco of
+ Firebird : Memo := 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024';
+ Interbase : Memo := 'BLOB SUB_TYPE 1 SEGMENT SIZE 1024';
+ MySql : Memo := 'MEDIUMBLOB';
+ PARADOX : Memo := 'BLOB(1024,1)';
+ Oracle : Memo := 'LONG RAW';
+ SqlServer : Memo := 'NTEXT';
+ PostgreSQL : Memo := 'TEXT';
+ End;
+end;
+
+procedure IniSettings(DestSettings: TUCUserSettings);
+var
+ tmp: TBitmap;
+begin
+ with DestSettings.CommonMessages do
+ begin
+ if BlankPassword = '' then
+ BlankPassword := RetornaLingua( ucPortuguesBr ,'Const_Men_SenhaDesabitada');
+ if PasswordChanged = '' then
+ PasswordChanged := RetornaLingua( ucPortuguesBr ,'Const_Men_SenhaAlterada');
+ if InitialMessage.Text = '' then
+ InitialMessage.Text := RetornaLingua( ucPortuguesBr ,'Const_Men_MsgInicial');
+ if MaxLoginAttemptsError = '' then
+ MaxLoginAttemptsError := RetornaLingua( ucPortuguesBr ,'Const_Men_MaxTentativas');
+ if InvalidLogin = '' then
+ InvalidLogin := RetornaLingua( ucPortuguesBr ,'Const_Men_LoginInvalido');
+ if InactiveLogin = '' then
+ InactiveLogin := RetornaLingua( ucPortuguesBr ,'Const_Men_LoginInativo');
+
+ if AutoLogonError = '' then
+ AutoLogonError := RetornaLingua( ucPortuguesBr ,'Const_Men_AutoLogonError');
+ if UsuarioExiste = '' then
+ UsuarioExiste := RetornaLingua( ucPortuguesBr ,'Const_Men_UsuarioExiste');
+ if PasswordExpired = '' then
+ PasswordExpired := RetornaLingua( ucPortuguesBr ,'Const_Men_PasswordExpired');
+ If ForcaTrocaSenha = '' then
+ ForcaTrocaSenha := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_ForcaTrocaSenha');
+ end;
+
+ with DestSettings.Login do
+ begin
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Log_BtCancelar');
+ if BtOK = '' then
+ BtOK := RetornaLingua( ucPortuguesBr ,'Const_Log_BtOK');
+ if LabelPassword = '' then
+ LabelPassword := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelSenha');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelUsuario');
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Log_WindowCaption');
+
+ if LabelTentativa = '' then
+ LabelTentativa := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelTentativa');
+ if LabelTentativas = '' then
+ LabelTentativas := RetornaLingua( ucPortuguesBr ,'Const_Log_LabelTentativas');
+
+
+ try
+ Tmp := TBitmap.Create;
+ Tmp.LoadFromResourceName(HInstance, 'UCLOCKLOGIN');
+ LeftImage.Assign(tmp);
+ finally
+ FreeAndNil(tmp);
+ end;
+ end;
+
+ with DestSettings.UsersForm do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Cad_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_Cad_LabelDescricao');
+ if ColName = '' then
+ ColName := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaNome');
+ if ColLogin = '' then
+ ColLogin := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaLogin');
+ if ColEmail = '' then
+ ColEmail := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaEmail');
+ if BtAdd = '' then
+ BtAdd := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtAdicionar');
+ if BtChange = '' then
+ BtChange := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtAlterar');
+ if BtDelete = '' then
+ BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtExcluir');
+ if BtRights = '' then
+ BtRights := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtPermissoes');
+ if BtPassword = '' then
+ BtPassword := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtSenha');
+ if BtClose = '' then
+ BtClose := RetornaLingua( ucPortuguesBr ,'Const_Cad_BtFechar');
+ if PromptDelete = '' then
+ PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_Cad_ConfirmaExcluir');
+ if PromptDelete_WindowCaption = '' then
+ PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Cad_ConfirmaDelete_WindowCaption'); //added by fduenas
+ end;
+
+ with DestSettings.UsersProfile do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Prof_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_Prof_LabelDescricao');
+ if ColProfile = '' then
+ ColProfile := RetornaLingua( ucPortuguesBr ,'Const_Prof_ColunaNome');
+ if BtAdd = '' then
+ BtAdd := RetornaLingua( ucPortuguesBr ,' Const_Prof_BtAdicionar');
+ if BtChange = '' then
+ BtChange := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtAlterar');
+ if BtDelete = '' then
+ BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtExcluir');
+ if BtRights = '' then
+ BtRights := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtPermissoes');
+ if BtClose = '' then
+ BtClose := RetornaLingua( ucPortuguesBr ,'Const_Prof_BtFechar');
+ if PromptDelete = '' then
+ PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_Prof_ConfirmaExcluir');
+ if PromptDelete_WindowCaption = '' then
+ PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Prof_ConfirmaDelete_WindowCaption'); //added by fduenas
+ end;
+
+ with DestSettings.AddChangeUser do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Inc_WindowCaption');
+ if LabelAdd = '' then
+ LabelAdd := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelAdicionar');
+ if LabelChange = '' then
+ LabelChange := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelAlterar');
+ if LabelName = '' then
+ LabelName := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelNome');
+ if LabelLogin = '' then
+ LabelLogin := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelLogin');
+ if LabelEmail = '' then
+ LabelEmail := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelEmail');
+ if LabelPerfil = '' then
+ LabelPerfil := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelPerfil');
+ if CheckPrivileged = '' then
+ CheckPrivileged := RetornaLingua( ucPortuguesBr ,'Const_Inc_CheckPrivilegiado');
+
+ if BtSave = '' then
+ BtSave := RetornaLingua( ucPortuguesBr ,'Const_Inc_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Inc_BtCancelar');
+
+ if CheckExpira = '' then
+ CheckExpira := RetornaLingua( ucPortuguesBr ,'Const_Inc_CheckEspira');
+ If Day = '' then
+ Day := RetornaLingua( ucPortuguesBr ,'Const_Inc_Dia');
+ If ExpiredIn = '' then
+ ExpiredIn := RetornaLingua( ucPortuguesBr ,'Const_Inc_ExpiraEm');
+
+ If LabelStatus = '' then
+ LabelStatus := RetornaLingua( ucPortuguesBr ,'Const_Inc_LabelStatus');
+
+ If StatusActive = '' then
+ StatusActive := RetornaLingua( ucPortuguesBr ,'Const_Inc_StatusActive');
+
+ If StatusDisabled = '' then
+ StatusDisabled := RetornaLingua( ucPortuguesBr ,'Const_Inc_StatusDisabled');
+ end;
+
+ with DestSettings.AddChangeProfile do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_PInc_WindowCaption');
+ if LabelAdd = '' then
+ LabelAdd := RetornaLingua( ucPortuguesBr ,'Const_PInc_LabelAdicionar');
+ if LabelChange = '' then
+ LabelChange := RetornaLingua( ucPortuguesBr ,'Const_PInc_LabelAlterar');
+ if LabelName = '' then
+ LabelName := RetornaLingua( ucPortuguesBr ,'Const_PInc_LabelNome');
+ if BtSave = '' then
+ BtSave := RetornaLingua( ucPortuguesBr ,'Const_PInc_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( ucPortuguesBr ,'Const_PInc_BtCancelar');
+ end;
+
+ with DestSettings.Rights do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Perm_WindowCaption');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( ucPortuguesBr ,'Const_Perm_LabelUsuario');
+ if LabelProfile = '' then
+ LabelProfile := RetornaLingua( ucPortuguesBr ,'Const_Perm_LabelPerfil');
+ if PageMenu = '' then
+ PageMenu := RetornaLingua( ucPortuguesBr ,'Const_Perm_PageMenu');
+ if PageActions = '' then
+ PageActions := RetornaLingua( ucPortuguesBr ,'Const_Perm_PageActions');
+ If PageControls = '' then
+ PageControls := RetornaLingua( ucPortuguesBr ,'Const_Perm_PageControls'); // by vicente barros leonel
+ if BtUnlock = '' then
+ BtUnlock := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtLibera');
+ if BtLock = '' then
+ BtLock := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtBloqueia');
+ if BtSave = '' then
+ BtSave := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Perm_BtCancelar');
+ end;
+
+ with DestSettings.ChangePassword do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Troc_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelDescricao');
+ if LabelCurrentPassword = '' then
+ LabelCurrentPassword := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelSenhaAtual');
+ if LabelNewPassword = '' then
+ LabelNewPassword := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelNovaSenha');
+ if LabelConfirm = '' then
+ LabelConfirm := RetornaLingua( ucPortuguesBr ,'Const_Troc_LabelConfirma');
+ if BtSave = '' then
+ BtSave := RetornaLingua( ucPortuguesBr ,'Const_Troc_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( ucPortuguesBr ,'Const_Troc_BtCancelar');
+ end;
+
+ with DestSettings.CommonMessages.ChangePasswordError do
+ begin
+ if InvalidCurrentPassword = '' then
+ InvalidCurrentPassword := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaAtualInvalida');
+ if NewPasswordError = '' then
+ NewPasswordError := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_ErroNovaSenha');
+ if NewEqualCurrent = '' then
+ NewEqualCurrent := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_NovaIgualAtual');
+ if PasswordRequired = '' then
+ PasswordRequired := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaObrigatoria');
+ if MinPasswordLength = '' then
+ MinPasswordLength := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaMinima');
+ if InvalidNewPassword = '' then
+ InvalidNewPassword := RetornaLingua( ucPortuguesBr ,'Const_ErrPass_SenhaInvalida');
+ end;
+
+ with DestSettings.ResetPassword do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_DefPass_WindowCaption');
+ if LabelPassword = '' then
+ LabelPassword := RetornaLingua( ucPortuguesBr ,'Const_DefPass_LabelSenha');
+ end;
+
+ with DestSettings.Log do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_LogC_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelDescricao');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelUsuario');
+ if LabelDate = '' then
+ LabelDate := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelData');
+ if LabelLevel = '' then
+ LabelLevel := RetornaLingua( ucPortuguesBr ,'Const_LogC_LabelNivel');
+ if ColLevel = '' then
+ ColLevel := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaNivel');
+ if ColAppID = '' then
+ ColAppID := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaAppID');
+ if ColMessage = '' then
+ ColMessage := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaMensagem');
+ if ColUser = '' then
+ ColUser := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaUsuario');
+ if ColDate = '' then
+ ColDate := RetornaLingua( ucPortuguesBr ,'Const_LogC_ColunaData');
+ if BtFilter = '' then
+ BtFilter := RetornaLingua( ucPortuguesBr ,'Const_LogC_BtFiltro');
+ if BtDelete = '' then
+ BtDelete := RetornaLingua( ucPortuguesBr ,'Const_LogC_BtExcluir');
+ if BtClose = '' then
+ BtClose := RetornaLingua( ucPortuguesBr ,'Const_LogC_BtFechar');
+ if PromptDelete = '' then
+ PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_LogC_ConfirmaExcluir');
+ if PromptDelete_WindowCaption = '' then
+ PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_LogC_ConfirmaDelete_WindowCaption'); //added by fduenas
+ if OptionUserAll = '' then
+ OptionUserAll := RetornaLingua( ucPortuguesBr ,'Const_LogC_Todos'); //added by fduenas
+ if OptionLevelLow = '' then
+ OptionLevelLow := RetornaLingua( ucPortuguesBr ,'Const_LogC_Low'); //added by fduenas
+ if OptionLevelNormal = '' then
+ OptionLevelNormal := RetornaLingua( ucPortuguesBr ,'Const_LogC_Normal'); //added by fduenas
+ if OptionLevelHigh = '' then
+ OptionLevelHigh := RetornaLingua( ucPortuguesBr ,'Const_LogC_High'); //added by fduenas
+ if OptionLevelCritic = '' then
+ OptionLevelCritic := RetornaLingua( ucPortuguesBr ,'Const_LogC_Critic'); //added by fduenas
+ if DeletePerformed = '' then
+ DeletePerformed := RetornaLingua( ucPortuguesBr ,'Const_LogC_ExcluirEfectuada'); //added by fduenas
+ end;
+
+ with DestSettings.AppMessages do
+ begin
+ if MsgsForm_BtNew = '' then
+ MsgsForm_BtNew := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtNew');
+ if MsgsForm_BtReplay = '' then
+ MsgsForm_BtReplay := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtReplay');
+ if MsgsForm_BtForward = '' then
+ MsgsForm_BtForward := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtForward');
+ if MsgsForm_BtDelete = '' then
+ MsgsForm_BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtDelete');
+ if MsgsForm_BtClose = '' then
+ MsgsForm_BtDelete := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtClose'); //added by fduenas
+ if MsgsForm_WindowCaption = '' then
+ MsgsForm_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Msgs_WindowCaption');
+ if MsgsForm_ColFrom = '' then
+ MsgsForm_ColFrom := RetornaLingua( ucPortuguesBr ,'Const_Msgs_ColFrom');
+ if MsgsForm_ColSubject = '' then
+ MsgsForm_ColSubject := RetornaLingua( ucPortuguesBr ,'Const_Msgs_ColSubject');
+ if MsgsForm_ColDate = '' then
+ MsgsForm_ColDate := RetornaLingua( ucPortuguesBr ,'Const_Msgs_ColDate');
+ if MsgsForm_PromptDelete = '' then
+ MsgsForm_PromptDelete := RetornaLingua( ucPortuguesBr ,'Const_Msgs_PromptDelete');
+ if MsgsForm_PromptDelete_WindowCaption = '' then
+ MsgsForm_PromptDelete_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Msgs_PromptDelete_WindowCaption');
+ if MsgsForm_NoMessagesSelected = '' then
+ MsgsForm_NoMessagesSelected := RetornaLingua( ucPortuguesBr ,'Const_Msgs_NoMessagesSelected');
+ if MsgsForm_NoMessagesSelected_WindowCaption = '' then
+ MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_Msgs_NoMessagesSelected_WindowCaption');
+ if MsgRec_BtClose = '' then
+ MsgRec_BtClose := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_BtClose');
+ if MsgRec_WindowCaption = '' then
+ MsgRec_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_WindowCaption');
+ if MsgRec_Title = '' then
+ MsgRec_Title := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_Title');
+ if MsgRec_LabelFrom = '' then
+ MsgRec_LabelFrom := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelFrom');
+ if MsgRec_LabelDate = '' then
+ MsgRec_LabelDate := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelDate');
+ if MsgRec_LabelSubject = '' then
+ MsgRec_LabelSubject := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelSubject');
+ if MsgRec_LabelMessage = '' then
+ MsgRec_LabelMessage := RetornaLingua( ucPortuguesBr ,'Const_MsgRec_LabelMessage');
+ if MsgSend_BtSend = '' then
+ MsgSend_BtSend := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_BtSend');
+ if MsgSend_BtCancel = '' then
+ MsgSend_BtCancel := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_BtCancel');
+ if MsgSend_WindowCaption = '' then
+ MsgSend_WindowCaption := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_WindowCaption');
+ if MsgSend_Title = '' then
+ MsgSend_Title := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_Title');
+ if MsgSend_GroupTo = '' then
+ MsgSend_GroupTo := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_GroupTo');
+ if MsgSend_RadioUser = '' then
+ MsgSend_RadioUser := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_RadioUser');
+ if MsgSend_RadioAll = '' then
+ MsgSend_RadioAll := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_RadioAll');
+ if MsgSend_GroupMessage = '' then
+ MsgSend_GroupMessage := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_GroupMessage');
+ if MsgSend_LabelSubject = '' then
+ MsgSend_LabelSubject := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_LabelSubject'); //added by fduenas
+ if MsgSend_LabelMessageText = '' then
+ MsgSend_LabelMessageText := RetornaLingua( ucPortuguesBr ,'Const_MsgSend_LabelMessageText'); //added by fduenas
+ end;
+
+ DestSettings.WindowsPosition := poMainFormCenter;
+ { mudar aqui
+ With DestSettings.TypeFieldsDB do
+ Begin
+ If Type_VarChar = '' then
+ Type_VarChar := 'VarChar';
+ if Type_Char = '' then
+ Type_Char := 'Char';
+ if Type_Int = '' then
+ Type_Int := 'Int';
+ end; }
+
+
+ with DestSettings.UsersLogged do
+ Begin
+ If BtnMessage = '' then
+ BtnMessage := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_BtnMsg' );
+ if BtnRefresh = '' then
+ BtnRefresh := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_Refresh');
+ if Btnclose = '' then
+ BtnClose := RetornaLingua( ucPortuguesBr ,'Const_Msgs_BtClose');
+ if LabelDescricao = '' then
+ LabelDescricao := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_LabelDescricao');
+ if LabelCaption = '' then
+ LabelCaption := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_LabelCaption');
+ if ColName = '' then
+ ColName := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaNome');
+ if colLogin = '' then
+ ColLogin := RetornaLingua( ucPortuguesBr ,'Const_Cad_ColunaLogin');
+ if ColComputer = '' then
+ ColComputer := RetornaLingua( ucPortuguesBr ,'Const_CadColuna_Computer');
+ if ColData = '' then
+ ColData := RetornaLingua( ucPortuguesBr ,'Const_CadColuna_Data');
+ if InputCaption = '' then
+ InputCaption := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_InputCaption');
+ If InputText = '' then
+ InputText := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_InputText');
+ If MsgSystem = '' then
+ MsgSystem := RetornaLingua( ucPortuguesBr ,'Const_UserLogged_MsgSystem');
+ End;
+
+end;
+
+procedure IniSettings2(DestSettings: TUCSettings);
+var
+ tmp: TBitmap;
+begin
+ with DestSettings.CommonMessages do
+ begin
+ if BlankPassword = '' then
+ BlankPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Men_SenhaDesabitada');
+ if PasswordChanged = '' then
+ PasswordChanged := RetornaLingua( DestSettings.fLanguage , 'Const_Men_SenhaAlterada');
+ if InitialMessage.Text = '' then
+ InitialMessage.Text := RetornaLingua( DestSettings.fLanguage , 'Const_Men_MsgInicial');
+ if MaxLoginAttemptsError = '' then
+ MaxLoginAttemptsError := RetornaLingua( DestSettings.fLanguage , 'Const_Men_MaxTentativas');
+ if InvalidLogin = '' then
+ InvalidLogin := RetornaLingua( DestSettings.fLanguage , 'Const_Men_LoginInvalido');
+ if InactiveLogin = '' then
+ InactiveLogin := RetornaLingua( DestSettings.fLanguage ,'Const_Men_LoginInativo');
+ if AutoLogonError = '' then
+ AutoLogonError := RetornaLingua( DestSettings.fLanguage , 'Const_Men_AutoLogonError');
+ if UsuarioExiste = '' then
+ UsuarioExiste := RetornaLingua( DestSettings.fLanguage , 'Const_Men_UsuarioExiste');
+ if PasswordExpired = '' then
+ PasswordExpired := RetornaLingua( DestSettings.fLanguage , 'Const_Men_PasswordExpired');
+ If ForcaTrocaSenha = '' then
+ ForcaTrocaSenha := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_ForcaTrocaSenha');
+ end;
+
+ with DestSettings.Login do
+ begin
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Log_BtCancelar');
+ if BtOK = '' then
+ BtOK := RetornaLingua( DestSettings.fLanguage , 'Const_Log_BtOK');
+ if LabelPassword = '' then
+ LabelPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelSenha');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelUsuario');
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Log_WindowCaption');
+
+ if LabelTentativa = '' then
+ LabelTentativa := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelTentativa');
+ if LabelTentativas = '' then
+ LabelTentativas := RetornaLingua( DestSettings.fLanguage , 'Const_Log_LabelTentativas');
+
+ try
+ Tmp := TBitmap.Create;
+ Tmp.LoadFromResourceName(HInstance, 'UCLOCKLOGIN');
+ LeftImage.Assign(tmp);
+ finally
+ FreeAndNil(tmp);
+ end;
+ end;
+
+ with DestSettings.UsersForm do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_LabelDescricao');
+ if ColName = '' then
+ ColName := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ColunaNome');
+ if ColLogin = '' then
+ ColLogin := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ColunaLogin');
+ if ColEmail = '' then
+ ColEmail := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ColunaEmail');
+ if BtAdd = '' then
+ BtAdd := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtAdicionar');
+ if BtChange = '' then
+ BtChange := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtAlterar');
+ if BtDelete = '' then
+ BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtExcluir');
+ if BtRights = '' then
+ BtRights := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtPermissoes');
+ if BtPassword = '' then
+ BtPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtSenha');
+ if BtClose = '' then
+ BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_BtFechar');
+ if PromptDelete = '' then
+ PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ConfirmaExcluir');
+ if PromptDelete_WindowCaption = '' then
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Cad_ConfirmaDelete_WindowCaption');
+ end;
+
+ with DestSettings.UsersProfile do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_LabelDescricao');
+ if ColProfile = '' then
+ ColProfile := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_ColunaNome');
+ if BtAdd = '' then
+ BtAdd := RetornaLingua( DestSettings.Language,'Const_Prof_BtAdicionar');
+ if BtChange = '' then
+ BtChange := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtAlterar');
+ if BtDelete = '' then
+ BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtExcluir');
+ if BtRights = '' then
+ BtRights := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtPermissoes');
+ if BtClose = '' then
+ BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_BtFechar');
+ if PromptDelete = '' then
+ PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_ConfirmaExcluir');
+ if PromptDelete_WindowCaption = '' then
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Prof_ConfirmaDelete_WindowCaption'); //added by fduenas
+ end;
+
+ with DestSettings.AddChangeUser do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_WindowCaption');
+ if LabelAdd = '' then
+ LabelAdd := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelAdicionar');
+ if LabelChange = '' then
+ LabelChange := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelAlterar');
+ if LabelName = '' then
+ LabelName := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelNome');
+ if LabelLogin = '' then
+ LabelLogin := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelLogin');
+ if LabelEmail = '' then
+ LabelEmail := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelEmail');
+ if CheckPrivileged = '' then
+ CheckPrivileged := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_CheckPrivilegiado');
+ if BtSave = '' then
+ BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_BtCancelar');
+ if LabelPerfil = '' then
+ LabelPerfil := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_LabelPerfil');
+
+ if CheckExpira = '' then
+ CheckExpira := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_CheckEspira');
+ If Day = '' then
+ Day := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_Dia');
+ If ExpiredIn = '' then
+ ExpiredIn := RetornaLingua( DestSettings.fLanguage , 'Const_Inc_ExpiraEm');
+ If LabelStatus = '' then
+ LabelStatus := RetornaLingua( DestSettings.fLanguage ,'Const_Inc_LabelStatus');
+ If StatusActive = '' then
+ StatusActive := RetornaLingua( DestSettings.fLanguage ,'Const_Inc_StatusActive');
+
+ If StatusDisabled = '' then
+ StatusDisabled := RetornaLingua( DestSettings.fLanguage ,'Const_Inc_StatusDisabled');
+
+ end;
+
+ with DestSettings.AddChangeProfile do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_WindowCaption');
+ if LabelAdd = '' then
+ LabelAdd := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_LabelAdicionar');
+ if LabelChange = '' then
+ LabelChange := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_LabelAlterar');
+ if LabelName = '' then
+ LabelName := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_LabelNome');
+ if BtSave = '' then
+ BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_PInc_BtCancelar');
+ end;
+
+ with DestSettings.Rights do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_WindowCaption');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_LabelUsuario');
+ if LabelProfile = '' then
+ LabelProfile := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_LabelPerfil');
+ if PageMenu = '' then
+ PageMenu := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_PageMenu');
+ if PageActions = '' then
+ PageActions := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_PageActions');
+ If PageControls = '' then
+ PageControls := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_PageControls'); // by vicente barros leonel
+ if BtUnlock = '' then
+ BtUnlock := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtLibera');
+ if BtLock = '' then
+ BtLock := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtBloqueia');
+ if BtSave = '' then
+ BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Perm_BtCancelar');
+ end;
+
+ with DestSettings.ChangePassword do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelDescricao');
+ if LabelCurrentPassword = '' then
+ LabelCurrentPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelSenhaAtual');
+ if LabelNewPassword = '' then
+ LabelNewPassword := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelNovaSenha');
+ if LabelConfirm = '' then
+ LabelConfirm := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_LabelConfirma');
+ if BtSave = '' then
+ BtSave := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_BtGravar');
+ if BtCancel = '' then
+ BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_Troc_BtCancelar');
+ end;
+
+ with DestSettings.CommonMessages.ChangePasswordError do
+ begin
+ if InvalidCurrentPassword = '' then
+ InvalidCurrentPassword := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaAtualInvalida');
+ if NewPasswordError = '' then
+ NewPasswordError := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_ErroNovaSenha');
+ if NewEqualCurrent = '' then
+ NewEqualCurrent := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_NovaIgualAtual');
+ if PasswordRequired = '' then
+ PasswordRequired := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaObrigatoria');
+ if MinPasswordLength = '' then
+ MinPasswordLength := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaMinima');
+ if InvalidNewPassword = '' then
+ InvalidNewPassword := RetornaLingua( DestSettings.fLanguage , 'Const_ErrPass_SenhaInvalida');
+ end;
+
+ with DestSettings.ResetPassword do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_DefPass_WindowCaption');
+ if LabelPassword = '' then
+ LabelPassword := RetornaLingua( DestSettings.fLanguage , 'Const_DefPass_LabelSenha');
+ end;
+
+ with DestSettings.Log do
+ begin
+ if WindowCaption = '' then
+ WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_WindowCaption');
+ if LabelDescription = '' then
+ LabelDescription := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelDescricao');
+ if LabelUser = '' then
+ LabelUser := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelUsuario');
+ if LabelDate = '' then
+ LabelDate := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelData');
+ if LabelLevel = '' then
+ LabelLevel := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_LabelNivel');
+ if ColLevel = '' then
+ ColLevel := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaNivel');
+ if ColAppID = '' then
+ ColAppID := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaAppID');
+ if ColMessage = '' then
+ ColMessage := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaMensagem');
+ if ColUser = '' then
+ ColUser := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaUsuario');
+ if ColDate = '' then
+ ColDate := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ColunaData');
+ if BtFilter = '' then
+ BtFilter := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_BtFiltro');
+ if BtDelete = '' then
+ BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_BtExcluir');
+ if BtClose = '' then
+ BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_BtFechar');
+ if PromptDelete = '' then
+ PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ConfirmaExcluir');
+ if PromptDelete_WindowCaption = '' then
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ConfirmaDelete_WindowCaption'); //added by fduenas
+ if OptionUserAll = '' then
+ OptionUserAll := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Todos'); //added by fduenas
+ if OptionLevelLow = '' then
+ OptionLevelLow := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Low'); //added by fduenas
+ if OptionLevelNormal = '' then
+ OptionLevelNormal := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Normal'); //added by fduenas
+ if OptionLevelHigh = '' then
+ OptionLevelHigh := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_High'); //added by fduenas
+ if OptionLevelCritic = '' then
+ OptionLevelCritic := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_Critic'); //added by fduenas
+ if DeletePerformed = '' then
+ DeletePerformed := RetornaLingua( DestSettings.fLanguage , 'Const_LogC_ExcluirEfectuada'); //added by fduenas
+ end;
+
+ with DestSettings.AppMessages do
+ begin
+ if MsgsForm_BtNew = '' then
+ MsgsForm_BtNew := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtNew');
+ if MsgsForm_BtReplay = '' then
+ MsgsForm_BtReplay := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtReplay');
+ if MsgsForm_BtForward = '' then
+ MsgsForm_BtForward := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtForward');
+ if MsgsForm_BtDelete = '' then
+ MsgsForm_BtDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtDelete');
+ if MsgsForm_BtClose = '' then
+ MsgsForm_BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_BtClose'); //added by fduenas
+ if MsgsForm_WindowCaption = '' then
+ MsgsForm_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_WindowCaption');
+ if MsgsForm_ColFrom = '' then
+ MsgsForm_ColFrom := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_ColFrom');
+ if MsgsForm_ColSubject = '' then
+ MsgsForm_ColSubject := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_ColSubject');
+ if MsgsForm_ColDate = '' then
+ MsgsForm_ColDate := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_ColDate');
+ if MsgsForm_PromptDelete = '' then
+ MsgsForm_PromptDelete := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_PromptDelete');
+ if MsgsForm_PromptDelete_WindowCaption = '' then
+ MsgsForm_PromptDelete_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_PromptDelete_WindowCaption'); //added by fduenas
+ if MsgsForm_NoMessagesSelected = '' then
+ MsgsForm_NoMessagesSelected := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_NoMessagesSelected'); //added by fduenas
+ if MsgsForm_NoMessagesSelected_WindowCaption = '' then
+ MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_Msgs_NoMessagesSelected_WindowCaption'); //added by fduenas
+ if MsgRec_BtClose = '' then
+ MsgRec_BtClose := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_BtClose');
+ if MsgRec_WindowCaption = '' then
+ MsgRec_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_WindowCaption');
+ if MsgRec_Title = '' then
+ MsgRec_Title := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_Title');
+ if MsgRec_LabelFrom = '' then
+ MsgRec_LabelFrom := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelFrom');
+ if MsgRec_LabelDate = '' then
+ MsgRec_LabelDate := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelDate');
+ if MsgRec_LabelSubject = '' then
+ MsgRec_LabelSubject := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelSubject');
+ if MsgRec_LabelMessage = '' then
+ MsgRec_LabelMessage := RetornaLingua( DestSettings.fLanguage , 'Const_MsgRec_LabelMessage');
+ if MsgSend_BtSend = '' then
+ MsgSend_BtSend := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_BtSend');
+ if MsgSend_BtCancel = '' then
+ MsgSend_BtCancel := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_BtCancel');
+ if MsgSend_WindowCaption = '' then
+ MsgSend_WindowCaption := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_WindowCaption');
+ if MsgSend_Title = '' then
+ MsgSend_Title := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_Title');
+ if MsgSend_GroupTo = '' then
+ MsgSend_GroupTo := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_GroupTo');
+ if MsgSend_RadioUser = '' then
+ MsgSend_RadioUser := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_RadioUser');
+ if MsgSend_RadioAll = '' then
+ MsgSend_RadioAll := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_RadioAll');
+ if MsgSend_GroupMessage = '' then
+ MsgSend_GroupMessage := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_GroupMessage');
+ if MsgSend_LabelSubject = '' then
+ MsgSend_LabelSubject := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_LabelSubject'); //added by fduenas
+ if MsgSend_LabelMessageText = '' then
+ MsgSend_LabelMessageText := RetornaLingua( DestSettings.fLanguage , 'Const_MsgSend_LabelMessageText'); //added by fduenas
+ end;
+
+ DestSettings.WindowsPosition := poMainFormCenter;
+
+ { With DestSettings.TypeFieldsDB do
+ Begin
+ If Type_VarChar = '' then
+ Type_VarChar := 'VarChar';
+ if Type_Char = '' then
+ Type_Char := 'Char';
+ if Type_Int = '' then
+ Type_Int := 'Int';
+ end; mudar aqui }
+
+ with DestSettings.UsersLogged do
+ Begin
+ If BtnMessage = '' then
+ BtnMessage := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_BtnMsg' );
+ if BtnRefresh = '' then
+ BtnRefresh := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_Refresh');
+ if Btnclose = '' then
+ BtnClose := RetornaLingua( DestSettings.fLanguage ,'Const_Msgs_BtClose');
+ if LabelDescricao = '' then
+ LabelDescricao := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_LabelDescricao');
+ if LabelCaption = '' then
+ LabelCaption := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_LabelCaption');
+ if ColName = '' then
+ ColName := RetornaLingua( DestSettings.fLanguage ,'Const_Cad_ColunaNome');
+ if colLogin = '' then
+ ColLogin := RetornaLingua( DestSettings.fLanguage ,'Const_Cad_ColunaLogin');
+ if ColComputer = '' then
+ ColComputer := RetornaLingua( DestSettings.fLanguage ,'Const_CadColuna_Computer');
+ if ColData = '' then
+ ColData := RetornaLingua( DestSettings.fLanguage ,'Const_CadColuna_Data');
+ if InputCaption = '' then
+ InputCaption := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_InputCaption');
+ If InputText = '' then
+ InputText := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_InputText');
+ If MsgSystem = '' then
+ MsgSystem := RetornaLingua( DestSettings.fLanguage ,'Const_UserLogged_MsgSystem');
+ End;
+end;
+
+{-------------------------------------------------------------------------------}
+
+procedure AlterLanguage(DestSettings: TUCUserSettings);
+begin
+ with DestSettings.CommonMessages do
+ begin
+ BlankPassword := RetornaLingua( DestSettings.Language,'Const_Men_SenhaDesabitada');
+ PasswordChanged := RetornaLingua( DestSettings.Language,'Const_Men_SenhaAlterada');
+ InitialMessage.Text := RetornaLingua( DestSettings.Language,'Const_Men_MsgInicial');
+ MaxLoginAttemptsError := RetornaLingua( DestSettings.Language,'Const_Men_MaxTentativas');
+ InvalidLogin := RetornaLingua( DestSettings.Language,'Const_Men_LoginInvalido');
+ InactiveLogin := RetornaLingua( DestSettings.Language ,'Const_Men_LoginInativo');
+ AutoLogonError := RetornaLingua( DestSettings.Language,'Const_Men_AutoLogonError');
+ UsuarioExiste := RetornaLingua( DestSettings.Language,'Const_Men_UsuarioExiste');
+ PasswordExpired := RetornaLingua( DestSettings.Language,'Const_Men_PasswordExpired');
+ end;
+
+ with DestSettings.Login do
+ begin
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Log_BtCancelar');
+ BtOK := RetornaLingua( DestSettings.Language,'Const_Log_BtOK');
+ LabelPassword := RetornaLingua( DestSettings.Language,'Const_Log_LabelSenha');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_Log_LabelUsuario');
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Log_WindowCaption');
+ LabelTentativa := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativa');
+ LabelTentativas := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativas');
+ end;
+
+ with DestSettings.UsersForm do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_Cad_LabelDescricao');
+ ColName := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaNome');
+ ColLogin := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaLogin');
+ ColEmail := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaEmail');
+ BtAdd := RetornaLingua( DestSettings.Language,'Const_Cad_BtAdicionar');
+ BtChange := RetornaLingua( DestSettings.Language,'Const_Cad_BtAlterar');
+ BtDelete := RetornaLingua( DestSettings.Language,'Const_Cad_BtExcluir');
+ BtRights := RetornaLingua( DestSettings.Language,'Const_Cad_BtPermissoes');
+ BtPassword := RetornaLingua( DestSettings.Language,'Const_Cad_BtSenha');
+ BtClose := RetornaLingua( DestSettings.Language,'Const_Cad_BtFechar');
+ PromptDelete := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaExcluir');
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaDelete_WindowCaption');
+ end;
+
+ with DestSettings.UsersProfile do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_Prof_LabelDescricao');
+ ColProfile := RetornaLingua( DestSettings.Language,'Const_Prof_ColunaNome');
+ BtAdd := RetornaLingua( DestSettings.Language,'Const_Prof_BtAdicionar');
+ BtChange := RetornaLingua( DestSettings.Language,'Const_Prof_BtAlterar');
+ BtDelete := RetornaLingua( DestSettings.Language,'Const_Prof_BtExcluir');
+ BtRights := RetornaLingua( DestSettings.Language,'Const_Prof_BtPermissoes');
+ BtClose := RetornaLingua( DestSettings.Language,'Const_Prof_BtFechar');
+ PromptDelete := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaExcluir');
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaDelete_WindowCaption');
+ end;
+
+ with DestSettings.AddChangeUser do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Inc_WindowCaption');
+ LabelAdd := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAdicionar');
+ LabelChange := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAlterar');
+ LabelName := RetornaLingua( DestSettings.Language,'Const_Inc_LabelNome');
+ LabelLogin := RetornaLingua( DestSettings.Language,'Const_Inc_LabelLogin');
+ LabelEmail := RetornaLingua( DestSettings.Language,'Const_Inc_LabelEmail');
+ CheckPrivileged := RetornaLingua( DestSettings.Language,'Const_Inc_CheckPrivilegiado');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_Inc_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Inc_BtCancelar');
+ LabelPerfil := RetornaLingua( DestSettings.Language,'Const_Inc_LabelPerfil');
+ CheckExpira := RetornaLingua( DestSettings.Language,'Const_Inc_CheckEspira');
+ Day := RetornaLingua( DestSettings.Language,'Const_Inc_Dia');
+ ExpiredIn := RetornaLingua( DestSettings.Language,'Const_Inc_ExpiraEm');
+ LabelStatus := RetornaLingua( DestSettings.Language ,'Const_Inc_LabelStatus');
+ StatusActive := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusActive');
+ StatusDisabled := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusDisabled');
+ end;
+
+ with DestSettings.AddChangeProfile do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_PInc_WindowCaption');
+ LabelAdd := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAdicionar');
+ LabelChange := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAlterar');
+ LabelName := RetornaLingua( DestSettings.Language,'Const_PInc_LabelNome');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_PInc_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_PInc_BtCancelar');
+ end;
+
+ with DestSettings.Rights do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Perm_WindowCaption');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_Perm_LabelUsuario');
+ LabelProfile := RetornaLingua( DestSettings.Language,'Const_Perm_LabelPerfil');
+ PageMenu := RetornaLingua( DestSettings.Language,'Const_Perm_PageMenu');
+ PageActions := RetornaLingua( DestSettings.Language,'Const_Perm_PageActions');
+ PageControls := RetornaLingua( DestSettings.Language,'Const_Perm_PageControls');
+ BtUnlock := RetornaLingua( DestSettings.Language,'Const_Perm_BtLibera');
+ BtLock := RetornaLingua( DestSettings.Language,'Const_Perm_BtBloqueia');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_Perm_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Perm_BtCancelar');
+ end;
+
+ with DestSettings.ChangePassword do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Troc_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_Troc_LabelDescricao');
+ LabelCurrentPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelSenhaAtual');
+ LabelNewPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelNovaSenha');
+ LabelConfirm := RetornaLingua( DestSettings.Language,'Const_Troc_LabelConfirma');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_Troc_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Troc_BtCancelar');
+ end;
+
+ with DestSettings.CommonMessages.ChangePasswordError do
+ begin
+ InvalidCurrentPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaAtualInvalida');
+ NewPasswordError := RetornaLingua( DestSettings.Language,'Const_ErrPass_ErroNovaSenha');
+ NewEqualCurrent := RetornaLingua( DestSettings.Language,'Const_ErrPass_NovaIgualAtual');
+ PasswordRequired := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaObrigatoria');
+ MinPasswordLength := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaMinima');
+ InvalidNewPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaInvalida');
+ end;
+
+ with DestSettings.ResetPassword do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_DefPass_WindowCaption');
+ LabelPassword := RetornaLingua( DestSettings.Language,'Const_DefPass_LabelSenha');
+ end;
+
+ with DestSettings.Log do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_LogC_LabelDescricao');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_LogC_LabelUsuario');
+ LabelDate := RetornaLingua( DestSettings.Language,'Const_LogC_LabelData');
+ LabelLevel := RetornaLingua( DestSettings.Language,'Const_LogC_LabelNivel');
+ ColLevel := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaNivel');
+ ColAppID := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaAppID');
+ ColMessage := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaMensagem');
+ ColUser := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaUsuario');
+ ColDate := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaData');
+ BtFilter := RetornaLingua( DestSettings.Language,'Const_LogC_BtFiltro');
+ BtDelete := RetornaLingua( DestSettings.Language,'Const_LogC_BtExcluir');
+ BtClose := RetornaLingua( DestSettings.Language,'Const_LogC_BtFechar');
+ PromptDelete := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaExcluir');
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaDelete_WindowCaption');
+ OptionUserAll := RetornaLingua( DestSettings.Language,'Const_LogC_Todos');
+ OptionLevelLow := RetornaLingua( DestSettings.Language,'Const_LogC_Low');
+ OptionLevelNormal := RetornaLingua( DestSettings.Language,'Const_LogC_Normal');
+ OptionLevelHigh := RetornaLingua( DestSettings.Language,'Const_LogC_High');
+ OptionLevelCritic := RetornaLingua( DestSettings.Language,'Const_LogC_Critic');
+ DeletePerformed := RetornaLingua( DestSettings.Language,'Const_LogC_ExcluirEfectuada');
+ end;
+
+ with DestSettings.AppMessages do
+ begin
+ MsgsForm_BtNew := RetornaLingua( DestSettings.Language,'Const_Msgs_BtNew');
+ MsgsForm_BtReplay := RetornaLingua( DestSettings.Language,'Const_Msgs_BtReplay');
+ MsgsForm_BtForward := RetornaLingua( DestSettings.Language,'Const_Msgs_BtForward');
+ MsgsForm_BtDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_BtDelete');
+ MsgsForm_BtClose := RetornaLingua( DestSettings.Language,'Const_Msgs_BtClose'); //added by fduenas
+ MsgsForm_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_WindowCaption');
+ MsgsForm_ColFrom := RetornaLingua( DestSettings.Language,'Const_Msgs_ColFrom');
+ MsgsForm_ColSubject := RetornaLingua( DestSettings.Language,'Const_Msgs_ColSubject');
+ MsgsForm_ColDate := RetornaLingua( DestSettings.Language,'Const_Msgs_ColDate');
+ MsgsForm_PromptDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete');
+ MsgsForm_PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete_WindowCaption'); //added by fduenas
+ MsgsForm_NoMessagesSelected := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected'); //added by fduenas
+ MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected_WindowCaption'); //added by fduenas
+ MsgRec_BtClose := RetornaLingua( DestSettings.Language,'Const_MsgRec_BtClose');
+ MsgRec_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgRec_WindowCaption');
+ MsgRec_Title := RetornaLingua( DestSettings.Language,'Const_MsgRec_Title');
+ MsgRec_LabelFrom := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelFrom');
+ MsgRec_LabelDate := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelDate');
+ MsgRec_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelSubject');
+ MsgRec_LabelMessage := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelMessage');
+ MsgSend_BtSend := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtSend');
+ MsgSend_BtCancel := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtCancel');
+ MsgSend_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgSend_WindowCaption');
+ MsgSend_Title := RetornaLingua( DestSettings.Language,'Const_MsgSend_Title');
+ MsgSend_GroupTo := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupTo');
+ MsgSend_RadioUser := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioUser');
+ MsgSend_RadioAll := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioAll');
+ MsgSend_GroupMessage := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupMessage');
+ MsgSend_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelSubject'); //added by fduenas
+ MsgSend_LabelMessageText := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelMessageText'); //added by fduenas
+ end;
+
+ DestSettings.WindowsPosition := poMainFormCenter;
+
+ with DestSettings.UsersLogged do
+ Begin
+ BtnMessage := RetornaLingua( DestSettings.Language ,'Const_UserLogged_BtnMsg' );
+ BtnRefresh := RetornaLingua( DestSettings.Language ,'Const_UserLogged_Refresh');
+ BtnClose := RetornaLingua( DestSettings.Language ,'Const_Msgs_BtClose');
+ LabelDescricao := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelDescricao');
+ LabelCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelCaption');
+ ColName := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaNome');
+ ColLogin := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaLogin');
+ ColComputer := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Computer');
+ ColData := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Data');
+ InputCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputCaption');
+ InputText := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputText');
+ MsgSystem := RetornaLingua( DestSettings.Language ,'Const_UserLogged_MsgSystem');
+ End;
+end;
+
+procedure AlterLanguage2(DestSettings: TUCSettings);
+begin
+ with DestSettings.CommonMessages do
+ begin
+ BlankPassword := RetornaLingua( DestSettings.Language,'Const_Men_SenhaDesabitada');
+ PasswordChanged := RetornaLingua( DestSettings.Language,'Const_Men_SenhaAlterada');
+ InitialMessage.Text := RetornaLingua( DestSettings.Language,'Const_Men_MsgInicial');
+ MaxLoginAttemptsError := RetornaLingua( DestSettings.Language,'Const_Men_MaxTentativas');
+ InvalidLogin := RetornaLingua( DestSettings.Language,'Const_Men_LoginInvalido');
+ InactiveLogin := RetornaLingua( DestSettings.fLanguage ,'Const_Men_LoginInativo');
+ AutoLogonError := RetornaLingua( DestSettings.Language,'Const_Men_AutoLogonError');
+ UsuarioExiste := RetornaLingua( DestSettings.Language,'Const_Men_UsuarioExiste');
+ PasswordExpired := RetornaLingua( DestSettings.Language,'Const_Men_PasswordExpired');
+ end;
+
+ with DestSettings.Login do
+ begin
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Log_BtCancelar');
+ BtOK := RetornaLingua( DestSettings.Language,'Const_Log_BtOK');
+ LabelPassword := RetornaLingua( DestSettings.Language,'Const_Log_LabelSenha');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_Log_LabelUsuario');
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Log_WindowCaption');
+ LabelTentativa := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativa');
+ LabelTentativas := RetornaLingua( DestSettings.Language,'Const_Log_LabelTentativas');
+ end;
+
+ with DestSettings.UsersForm do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_Cad_LabelDescricao');
+ ColName := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaNome');
+ ColLogin := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaLogin');
+ ColEmail := RetornaLingua( DestSettings.Language,'Const_Cad_ColunaEmail');
+ BtAdd := RetornaLingua( DestSettings.Language,'Const_Cad_BtAdicionar');
+ BtChange := RetornaLingua( DestSettings.Language,'Const_Cad_BtAlterar');
+ BtDelete := RetornaLingua( DestSettings.Language,'Const_Cad_BtExcluir');
+ BtRights := RetornaLingua( DestSettings.Language,'Const_Cad_BtPermissoes');
+ BtPassword := RetornaLingua( DestSettings.Language,'Const_Cad_BtSenha');
+ BtClose := RetornaLingua( DestSettings.Language,'Const_Cad_BtFechar');
+ PromptDelete := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaExcluir');
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Cad_ConfirmaDelete_WindowCaption');
+ end;
+
+ with DestSettings.UsersProfile do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_Prof_LabelDescricao');
+ ColProfile := RetornaLingua( DestSettings.Language,'Const_Prof_ColunaNome');
+ BtAdd := RetornaLingua( DestSettings.Language,'Const_Prof_BtAdicionar');
+ BtChange := RetornaLingua( DestSettings.Language,'Const_Prof_BtAlterar');
+ BtDelete := RetornaLingua( DestSettings.Language,'Const_Prof_BtExcluir');
+ BtRights := RetornaLingua( DestSettings.Language,'Const_Prof_BtPermissoes');
+ BtClose := RetornaLingua( DestSettings.Language,'Const_Prof_BtFechar');
+ PromptDelete := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaExcluir');
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Prof_ConfirmaDelete_WindowCaption');
+ end;
+
+ with DestSettings.AddChangeUser do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Inc_WindowCaption');
+ LabelAdd := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAdicionar');
+ LabelChange := RetornaLingua( DestSettings.Language,'Const_Inc_LabelAlterar');
+ LabelName := RetornaLingua( DestSettings.Language,'Const_Inc_LabelNome');
+ LabelLogin := RetornaLingua( DestSettings.Language,'Const_Inc_LabelLogin');
+ LabelEmail := RetornaLingua( DestSettings.Language,'Const_Inc_LabelEmail');
+ CheckPrivileged := RetornaLingua( DestSettings.Language,'Const_Inc_CheckPrivilegiado');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_Inc_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Inc_BtCancelar');
+ LabelPerfil := RetornaLingua( DestSettings.Language,'Const_Inc_LabelPerfil');
+ CheckExpira := RetornaLingua( DestSettings.Language,'Const_Inc_CheckEspira');
+ Day := RetornaLingua( DestSettings.Language,'Const_Inc_Dia');
+ ExpiredIn := RetornaLingua( DestSettings.Language,'Const_Inc_ExpiraEm');
+ LabelStatus := RetornaLingua( DestSettings.Language ,'Const_Inc_LabelStatus');
+ StatusActive := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusActive');
+ StatusDisabled := RetornaLingua( DestSettings.Language ,'Const_Inc_StatusDisabled');
+ end;
+
+ with DestSettings.AddChangeProfile do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_PInc_WindowCaption');
+ LabelAdd := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAdicionar');
+ LabelChange := RetornaLingua( DestSettings.Language,'Const_PInc_LabelAlterar');
+ LabelName := RetornaLingua( DestSettings.Language,'Const_PInc_LabelNome');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_PInc_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_PInc_BtCancelar');
+ end;
+
+ with DestSettings.Rights do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Perm_WindowCaption');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_Perm_LabelUsuario');
+ LabelProfile := RetornaLingua( DestSettings.Language,'Const_Perm_LabelPerfil');
+ PageMenu := RetornaLingua( DestSettings.Language,'Const_Perm_PageMenu');
+ PageActions := RetornaLingua( DestSettings.Language,'Const_Perm_PageActions');
+ PageControls := RetornaLingua( DestSettings.Language,'Const_Perm_PageControls');
+ BtUnlock := RetornaLingua( DestSettings.Language,'Const_Perm_BtLibera');
+ BtLock := RetornaLingua( DestSettings.Language,'Const_Perm_BtBloqueia');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_Perm_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Perm_BtCancelar');
+ end;
+
+ with DestSettings.ChangePassword do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_Troc_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_Troc_LabelDescricao');
+ LabelCurrentPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelSenhaAtual');
+ LabelNewPassword := RetornaLingua( DestSettings.Language,'Const_Troc_LabelNovaSenha');
+ LabelConfirm := RetornaLingua( DestSettings.Language,'Const_Troc_LabelConfirma');
+ BtSave := RetornaLingua( DestSettings.Language,'Const_Troc_BtGravar');
+ BtCancel := RetornaLingua( DestSettings.Language,'Const_Troc_BtCancelar');
+ end;
+
+ with DestSettings.CommonMessages.ChangePasswordError do
+ begin
+ InvalidCurrentPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaAtualInvalida');
+ NewPasswordError := RetornaLingua( DestSettings.Language,'Const_ErrPass_ErroNovaSenha');
+ NewEqualCurrent := RetornaLingua( DestSettings.Language,'Const_ErrPass_NovaIgualAtual');
+ PasswordRequired := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaObrigatoria');
+ MinPasswordLength := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaMinima');
+ InvalidNewPassword := RetornaLingua( DestSettings.Language,'Const_ErrPass_SenhaInvalida');
+ end;
+
+ with DestSettings.ResetPassword do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_DefPass_WindowCaption');
+ LabelPassword := RetornaLingua( DestSettings.Language,'Const_DefPass_LabelSenha');
+ end;
+
+ with DestSettings.Log do
+ begin
+ WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_WindowCaption');
+ LabelDescription := RetornaLingua( DestSettings.Language,'Const_LogC_LabelDescricao');
+ LabelUser := RetornaLingua( DestSettings.Language,'Const_LogC_LabelUsuario');
+ LabelDate := RetornaLingua( DestSettings.Language,'Const_LogC_LabelData');
+ LabelLevel := RetornaLingua( DestSettings.Language,'Const_LogC_LabelNivel');
+ ColLevel := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaNivel');
+ ColAppID := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaAppID');
+ ColMessage := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaMensagem');
+ ColUser := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaUsuario');
+ ColDate := RetornaLingua( DestSettings.Language,'Const_LogC_ColunaData');
+ BtFilter := RetornaLingua( DestSettings.Language,'Const_LogC_BtFiltro');
+ BtDelete := RetornaLingua( DestSettings.Language,'Const_LogC_BtExcluir');
+ BtClose := RetornaLingua( DestSettings.Language,'Const_LogC_BtFechar');
+ PromptDelete := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaExcluir');
+ PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_LogC_ConfirmaDelete_WindowCaption');
+ OptionUserAll := RetornaLingua( DestSettings.Language,'Const_LogC_Todos');
+ OptionLevelLow := RetornaLingua( DestSettings.Language,'Const_LogC_Low');
+ OptionLevelNormal := RetornaLingua( DestSettings.Language,'Const_LogC_Normal');
+ OptionLevelHigh := RetornaLingua( DestSettings.Language,'Const_LogC_High');
+ OptionLevelCritic := RetornaLingua( DestSettings.Language,'Const_LogC_Critic');
+ DeletePerformed := RetornaLingua( DestSettings.Language,'Const_LogC_ExcluirEfectuada');
+ end;
+
+ with DestSettings.AppMessages do
+ begin
+ MsgsForm_BtNew := RetornaLingua( DestSettings.Language,'Const_Msgs_BtNew');
+ MsgsForm_BtReplay := RetornaLingua( DestSettings.Language,'Const_Msgs_BtReplay');
+ MsgsForm_BtForward := RetornaLingua( DestSettings.Language,'Const_Msgs_BtForward');
+ MsgsForm_BtDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_BtDelete');
+ MsgsForm_BtClose := RetornaLingua( DestSettings.Language,'Const_Msgs_BtClose'); //added by fduenas
+ MsgsForm_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_WindowCaption');
+ MsgsForm_ColFrom := RetornaLingua( DestSettings.Language,'Const_Msgs_ColFrom');
+ MsgsForm_ColSubject := RetornaLingua( DestSettings.Language,'Const_Msgs_ColSubject');
+ MsgsForm_ColDate := RetornaLingua( DestSettings.Language,'Const_Msgs_ColDate');
+ MsgsForm_PromptDelete := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete');
+ MsgsForm_PromptDelete_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_PromptDelete_WindowCaption'); //added by fduenas
+ MsgsForm_NoMessagesSelected := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected'); //added by fduenas
+ MsgsForm_NoMessagesSelected_WindowCaption := RetornaLingua( DestSettings.Language,'Const_Msgs_NoMessagesSelected_WindowCaption'); //added by fduenas
+ MsgRec_BtClose := RetornaLingua( DestSettings.Language,'Const_MsgRec_BtClose');
+ MsgRec_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgRec_WindowCaption');
+ MsgRec_Title := RetornaLingua( DestSettings.Language,'Const_MsgRec_Title');
+ MsgRec_LabelFrom := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelFrom');
+ MsgRec_LabelDate := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelDate');
+ MsgRec_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelSubject');
+ MsgRec_LabelMessage := RetornaLingua( DestSettings.Language,'Const_MsgRec_LabelMessage');
+ MsgSend_BtSend := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtSend');
+ MsgSend_BtCancel := RetornaLingua( DestSettings.Language,'Const_MsgSend_BtCancel');
+ MsgSend_WindowCaption := RetornaLingua( DestSettings.Language,'Const_MsgSend_WindowCaption');
+ MsgSend_Title := RetornaLingua( DestSettings.Language,'Const_MsgSend_Title');
+ MsgSend_GroupTo := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupTo');
+ MsgSend_RadioUser := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioUser');
+ MsgSend_RadioAll := RetornaLingua( DestSettings.Language,'Const_MsgSend_RadioAll');
+ MsgSend_GroupMessage := RetornaLingua( DestSettings.Language,'Const_MsgSend_GroupMessage');
+ MsgSend_LabelSubject := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelSubject'); //added by fduenas
+ MsgSend_LabelMessageText := RetornaLingua( DestSettings.Language,'Const_MsgSend_LabelMessageText'); //added by fduenas
+ end;
+
+ DestSettings.WindowsPosition := poMainFormCenter;
+
+
+ with DestSettings.UsersLogged do
+ Begin
+ BtnMessage := RetornaLingua( DestSettings.Language ,'Const_UserLogged_BtnMsg' );
+ BtnRefresh := RetornaLingua( DestSettings.Language ,'Const_UserLogged_Refresh');
+ BtnClose := RetornaLingua( DestSettings.Language ,'Const_Msgs_BtClose');
+ LabelDescricao := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelDescricao');
+ LabelCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_LabelCaption');
+ ColName := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaNome');
+ ColLogin := RetornaLingua( DestSettings.Language ,'Const_Cad_ColunaLogin');
+ ColComputer := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Computer');
+ ColData := RetornaLingua( DestSettings.Language ,'Const_CadColuna_Data');
+ InputCaption := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputCaption');
+ InputText := RetornaLingua( DestSettings.Language ,'Const_UserLogged_InputText');
+ MsgSystem := RetornaLingua( DestSettings.Language ,'Const_UserLogged_MsgSystem');
+ End;
+
+end;
+
+{-------------------------------------------------------------------------------}
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+{$IFDEF DELPHI9_UP} {$REGION 'TUCSettings'} {$ENDIF}
+
+{ TUCSettings }
+
+procedure TUCSettings.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserSettings then
+ begin
+ Self.CommonMessages.Assign(TUCUserSettings(Source).CommonMessages); //modified by fduenas
+ Self.AppMessages.Assign(TUCUserSettings(Source).AppMessages); //modified by fduenas
+ Self.WindowsPosition := WindowsPosition;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCSettings.Create(AOwner: TComponent);
+begin
+ inherited;
+ fLanguage := ucPortuguesBr;
+ FAppMessagesMSG := TUCAppMessagesMSG.Create(nil);
+ FLoginFormMSG := TUCLoginFormMSG.Create(nil);
+ FUserCommomMSG := TUCUserCommonMSG.Create(nil);
+ FCadUserFormMSG := TUCCadUserFormMSG.Create(nil);
+ FAddUserFormMSG := TUCAddUserFormMSG.Create(nil);
+ FAddProfileFormMSG := TUCAddProfileFormMSG.Create(nil);
+ FPermissFormMSG := TUCPermissFormMSG.Create(nil);
+ FProfileUserFormMSG := TUCProfileUserFormMSG.Create(nil);
+ FTrocaSenhaFormMSG := TUCTrocaSenhaFormMSG.Create(nil);
+ FResetPassword := TUCResetPassword.Create(nil);
+ FLogControlFormMSG := TUCLogControlFormMSG.Create(nil);
+ fBancoDados := FireBird;
+ RetornaSqlBancoDados( fBancoDados, Type_Int,Type_Char,Type_VarChar,Type_Memo );
+ fUsersLogged := TUCCadUserLoggedMSG.Create(Nil);
+ if csDesigning in ComponentState then
+ IniSettings2(Self);
+end;
+
+destructor TUCSettings.Destroy;
+begin
+ //added by fduenas
+ FAppMessagesMSG.Free;
+ FLoginFormMSG.Free;
+ FUserCommomMSG.Free;
+ FCadUserFormMSG.Free;
+ FAddUserFormMSG.Free;
+ FAddProfileFormMSG.Free;
+ FPermissFormMSG.Free;
+ FProfileUserFormMSG.Free;
+ FTrocaSenhaFormMSG.Free;
+ FResetPassword.Free;
+ FLogControlFormMSG.Free;
+ fUsersLogged.Free;
+ inherited;
+end;
+
+procedure TUCSettings.SetAppMessagesMSG(const Value: TUCAppMessagesMSG);
+begin
+ FAppMessagesMSG := Value;
+end;
+
+procedure TUCSettings.SetFAddProfileFormMSG(const Value: TUCAddProfileFormMSG);
+begin
+ FAddProfileFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFAddUserFormMSG(const Value: TUCAddUserFormMSG);
+begin
+ FAddUserFormMSG := Value;
+end;
+
+procedure TUCSettings.SetfBancoDados(const Value: TUCTypeBancoDados);
+begin
+ fBancoDados := Value;
+ RetornaSqlBancoDados( fBancoDados, Type_Int,Type_Char,Type_VarChar,Type_Memo );
+end;
+
+procedure TUCSettings.SetFCadUserFormMSG(const Value: TUCCadUserFormMSG);
+begin
+ FCadUserFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFFormLoginMsg(const Value: TUCLoginFormMSG);
+begin
+ FLoginFormMSG := Value;
+end;
+
+procedure TUCSettings.SetfLanguage(const Value: TUCLanguage);
+begin
+ fLanguage := Value;
+ AlterLanguage2(Self);
+end;
+
+procedure TUCSettings.SetFLogControlFormMSG(const Value: TUCLogControlFormMSG);
+begin
+ FLogControlFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFPermissFormMSG(const Value: TUCPermissFormMSG);
+begin
+ FPermissFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFProfileUserFormMSG(const Value: TUCProfileUserFormMSG);
+begin
+ FProfileUserFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFResetPassword(const Value: TUCResetPassword);
+begin
+ FResetPassword := Value;
+end;
+
+procedure TUCSettings.SetFTrocaSenhaFormMSG(const Value: TUCTrocaSenhaFormMSG);
+begin
+ FTrocaSenhaFormMSG := Value;
+end;
+
+procedure TUCSettings.SetFUserCommonMSg(const Value: TUCUserCommonMSG);
+begin
+ FUserCommomMSG := Value;
+end;
+
+procedure TUCSettings.SetfUsersLogged(const Value: TUCCadUserLoggedMSG);
+begin
+ fUsersLogged := Value;
+end;
+
+{$IFDEF DELPHI9_UP} {$ENDREGION} {$ENDIF}
+
+end.
diff --git a/official/2.31RC1/Source/UCXPSettings.pas b/official/2.31RC1/Source/UCXPSettings.pas
new file mode 100644
index 0000000..89ed10d
--- /dev/null
+++ b/official/2.31RC1/Source/UCXPSettings.pas
@@ -0,0 +1,446 @@
+{
+Class UCXPSettings:
+Based on XPMenu 3.1 for Delphi
+
+XPMenu for Delphi
+Author: Khaled Shagrouni
+URL: http://www.shagrouni.com/english/software/xpmenu.html
+e-mail: khaled@shagrouni.com
+
+Version 3.1 - 22.02.2004
+
+
+
+XPMenu is a Delphi component to mimic Office XP menu and toolbar style.
+Copyright (C) 2001, 2003 Khaled Shagrouni.
+
+This component is FREEWARE with source code. I still hold the copyright, but
+you can use it for whatever you like: freeware, shareware or commercial software.
+If you have any ideas for improvement or bug reports, don't hesitate to e-mail
+me (Please state the XPMenu version and OS information).
+
+--------------------------------------------------------------------------------
+changes by QmD 30/11/2003 - qmd@usercontrol.com.br
+* Add BitBtnColor / BitBtnSelectColor by QmD 30/11/2003 - qmd@usercontrol.com.br
+* BitBtn Button multi-line corrected
+* 29/03/2004 - XPmenu 2.21 incorporated in User Control Package. Class renamed to UCXPMenu to prevent conflicts (http://usercontrol.sourceforge.net)
+
+changes by fduenas 29/12/2004 - fduenas@outm.net, fduenas@flashmail.com
+* XPMenu.pas 3.1 Ported to UCXPStyle.pas by Francisco Dueñas fduenas@outm.net.
+* File UCXPMenu.pas renamed to UCXPStyle.pas
+* Class UCXPSet renamed to UCXPSettings
+* File UCXPSet.pas renamed to UCXPSettings.pas
+
+}
+{$IFDEF VER130}
+{$DEFINE VER5U}
+{$ENDIF}
+
+{$IFDEF VER140}
+{$DEFINE VER5U}
+{$DEFINE VER6U}
+{$ENDIF}
+
+{$IFDEF VER150}
+{$DEFINE VER5U}
+{$DEFINE VER6U}
+{$DEFINE VER7U}
+{$ENDIF}
+
+unit UCXPSettings;
+
+interface
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, ComCtrls, Forms,
+ Menus, Commctrl, ExtCtrls, StdCtrls, Buttons;
+
+ type
+ TUCXPContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
+ xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller);
+ TUCXPContainers = set of TUCXPContainer;
+
+ TUCXPControl = (xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox,
+ xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox,
+ xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel,
+ xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey);
+ {xcStringGrid, xcDrawGrid, xcDBGrid)}
+
+ TUCXPControls = set of TUCXPControl;
+
+ TUCXPSettings = class(TPersistent)
+ private
+ {from UCXPStyle class}
+ FFont: TFont;
+ FColor: TColor;
+ FIconBackColor: TColor;
+ FMenuBarColor: TColor;
+ FCheckedColor: TColor;
+ FSeparatorColor: TColor;
+ FSelectBorderColor: TColor;
+ FSelectColor: TColor;
+ FDisabledColor: TColor;
+ FSelectFontColor: TColor;
+ FIconWidth: integer;
+ FDrawSelect: boolean;
+ FUseSystemColors: boolean;
+ FColorsChanged: boolean; // +jt
+ {END from UCXPStyle class}
+
+ {from UCXPStyle class}
+ FOverrideOwnerDraw: boolean;
+ FGradient: boolean;
+ FFlatMenu: boolean;
+ FAutoDetect: boolean;
+ FUCXPContainers: TUCXPContainers;
+ FUCXPControls: TUCXPControls;
+ FGrayLevel: byte;
+ FDimLevel: byte;
+ FDrawMenuBar: boolean;
+ FUseDimColor: boolean;
+ {END from UCXPStyle class}
+
+ FBitBtnColor: TColor; //qmd
+
+ {from UCXPStyle class}
+ procedure SetFont(const Value: TFont);
+ procedure SetColor(const Value: TColor);
+ procedure SetIconBackColor(const Value: TColor);
+ procedure SetMenuBarColor(const Value: TColor);
+ procedure SetCheckedColor(const Value: TColor);
+ procedure SetDisabledColor(const Value: TColor);
+ procedure SetSelectColor(const Value: TColor);
+ procedure SetSelectBorderColor(const Value: TColor);
+ procedure SetSeparatorColor(const Value: TColor);
+ procedure SetSelectFontColor(const Value: TColor);
+ procedure SetIconWidth(const Value: integer);
+ procedure SetDrawSelect(const Value: boolean);
+ procedure SetUseSystemColors(const Value: boolean);
+
+ procedure SetOverrideOwnerDraw(const Value: boolean);
+ procedure SetGradient(const Value: boolean);
+ procedure SetFlatMenu(const Value: boolean);
+ procedure SetDrawMenuBar(const Value: boolean);
+ procedure SetUseDimColor(const Value: boolean);
+ procedure SetAutoDetect(const Value: boolean);
+ procedure SetUCXPContainers(const Value: TUCXPContainers);
+ procedure SetUCXPControls(const Value: TUCXPControls);
+ {END from UCXPStyle class}
+ procedure SetBitBtnColor( const Value: TColor);
+ procedure SetColorsChanged(const Value: boolean);
+
+ protected
+ public
+ constructor Create(AOwner: TComponent);// override;
+ procedure Assign(Source: TPersistent);override;
+ destructor Destroy; override;
+ published
+ { from UCXPStyle class}
+ property DimLevel: Byte read FDimLevel write FDimLevel;
+ property GrayLevel: Byte read FGrayLevel write FGrayLevel;
+ property Font: TFont read FFont write SetFont;
+ property Color: TColor read FColor write SetColor;
+ property DrawMenuBar: boolean read FDrawMenuBar write SetDrawMenuBar;
+ property IconBackColor: TColor read FIconBackColor write SetIconBackColor;
+ property MenuBarColor: TColor read FMenuBarColor write SetMenuBarColor;
+ property SelectColor: TColor read FSelectColor write SetSelectColor;
+ property SelectBorderColor: TColor read FSelectBorderColor
+ write SetSelectBorderColor;
+ property SelectFontColor: TColor read FSelectFontColor
+ write SetSelectFontColor;
+ property DisabledColor: TColor read FDisabledColor write SetDisabledColor;
+ property SeparatorColor: TColor read FSeparatorColor
+ write SetSeparatorColor;
+ property CheckedColor: TColor read FCheckedColor write SetCheckedColor;
+ property IconWidth: integer read FIconWidth write SetIconWidth;
+ property DrawSelect: boolean read FDrawSelect write SetDrawSelect;
+ property UseSystemColors: boolean read FUseSystemColors
+ write SetUseSystemColors;
+ property UseDimColor: boolean read FUseDimColor write SetUseDimColor;
+ property OverrideOwnerDraw: boolean read FOverrideOwnerDraw
+ write SetOverrideOwnerDraw;
+ property Gradient: boolean read FGradient write SetGradient;
+ property FlatMenu: boolean read FFlatMenu write SetFlatMenu;
+ property AutoDetect: boolean read FAutoDetect write SetAutoDetect;
+
+ property XPContainers: TUCXPContainers read FUCXPContainers write SetUCXPContainers
+ default [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
+ xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller];
+ property XPControls :TUCXPControls read FUCXPControls write SetUCXPControls
+ default [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox,
+ xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox,
+ xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel,
+ xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey];
+ {xcStringGrid, xcDrawGrid, xcDBGrid];}
+
+ { END from UCXPStyle class}
+ property BitBtnColor: TColor read FBitBtnColor write SetBitBtnColor; {qmd}
+ property ColorsChanged: boolean read FColorsChanged write SetColorsChanged;
+
+ end;
+
+procedure GetSystemMenuFont(Font: TFont);
+
+implementation
+
+
+{ TUCXPSettings }
+
+procedure TUCXPSettings.Assign(Source: TPersistent);
+begin
+ if Source is TUCXPSettings then
+ begin
+ {Based on UCXPStyle.Create method}
+ Self.Font := TUCXPSettings(Source).Font;
+ Self.Color := TUCXPSettings(Source).Color;
+ Self.IconBackColor := TUCXPSettings(Source).IconBackColor;
+ Self.MenuBarColor := TUCXPSettings(Source).MenuBarColor;
+ Self.CheckedColor := TUCXPSettings(Source).CheckedColor;
+ Self.SeparatorColor := TUCXPSettings(Source).SeparatorColor;
+ Self.SelectBorderColor := TUCXPSettings(Source).SelectBorderColor;
+ Self.SelectColor := TUCXPSettings(Source).SelectColor;
+ Self.DisabledColor := TUCXPSettings(Source).DisabledColor;
+ Self.SelectFontColor := TUCXPSettings(Source).SelectFontColor;
+ Self.IconWidth := TUCXPSettings(Source).IconWidth;
+ Self.DrawSelect := TUCXPSettings(Source).DrawSelect;
+ Self.UseSystemColors := TUCXPSettings(Source).UseSystemColors;
+
+ Self.OverrideOwnerDraw := TUCXPSettings(Source).OverrideOwnerDraw;
+ Self.Gradient := TUCXPSettings(Source).Gradient;
+ Self.FlatMenu := TUCXPSettings(Source).FlatMenu;
+ Self.AutoDetect := TUCXPSettings(Source).AutoDetect;
+ Self.XPContainers := TUCXPSettings(Source).XPContainers;
+ Self.XPControls := TUCXPSettings(Source).XPControls;
+ Self.GrayLevel := TUCXPSettings(Source).GrayLevel;
+ Self.DimLevel := TUCXPSettings(Source).DimLevel;
+ Self.DrawMenuBar := TUCXPSettings(Source).DrawMenuBar;
+ Self.UseDimColor := TUCXPSettings(Source).UseDimColor;
+ {END from UCXPStyle class}
+
+ Self.BitBtnColor := TUCXPSettings(Source).BitBtnColor; //qmd
+
+
+ end else inherited;
+end;
+
+constructor TUCXPSettings.Create(AOwner: TComponent);
+begin
+ inherited Create;//(AOwner);
+{ if csDesigning in ComponentState then
+ begin}
+ {FROM to UCXPSettings}
+ FFont := TFont.Create;
+
+ {$IFDEF VER5U}
+ FFont.Assign(Screen.MenuFont);
+ {$ELSE}
+ GetSystemMenuFont(FFont);
+ {$ENDIF}
+
+ FUseSystemColors := true;
+
+ FColor := clBtnFace;
+ FIconBackColor := clBtnFace;
+ FSelectColor := clHighlight;
+ FSelectBorderColor := clHighlight;
+ FMenuBarColor := clBtnFace;
+ FDisabledColor := clInactiveCaption;
+ FSeparatorColor := clBtnFace;
+ FCheckedColor := clHighlight;
+ FSelectFontColor := FFont.Color;
+ FGrayLevel := 10;
+ FDimLevel := 30;
+ FIconWidth := 24;
+ FDrawSelect := true;
+ XPContainers := [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
+ xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller];
+ XPControls := [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox,
+ xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox,
+ xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel,
+ xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey];
+ {xcStringGrid, xcDrawGrid, xcDBGrid];}
+
+ {END FROM to UCXPSettings}
+ FBitBtnColor := clBtnFace;
+// end;
+
+end;
+
+
+destructor TUCXPSettings.Destroy;
+begin
+ FreeAndNil(FFont);
+ inherited;
+end;
+
+{END from UCXPStyle}
+procedure TUCXPSettings.SetFont(const Value: TFont);
+begin
+ FFont.Assign(Value);
+ //Windows.DrawMenuBar(FForm.Handle);
+
+end;
+
+procedure TUCXPSettings.SetColor(const Value: TColor);
+begin
+ FColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetIconBackColor(const Value: TColor);
+begin
+ FIconBackColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetMenuBarColor(const Value: TColor);
+begin
+ FMenuBarColor := Value;
+ FColorsChanged := true; // +jt
+ //Windows.DrawMenuBar(FForm.Handle);
+end;
+
+procedure TUCXPSettings.SetCheckedColor(const Value: TColor);
+begin
+ FCheckedColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetSeparatorColor(const Value: TColor);
+begin
+ FSeparatorColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetSelectBorderColor(const Value: TColor);
+begin
+ FSelectBorderColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetSelectColor(const Value: TColor);
+begin
+ FSelectColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetDisabledColor(const Value: TColor);
+begin
+ FDisabledColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetSelectFontColor(const Value: TColor);
+begin
+ FSelectFontColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPSettings.SetIconWidth(const Value: integer);
+begin
+ FIconWidth := Value;
+end;
+
+procedure TUCXPSettings.SetDrawSelect(const Value: boolean);
+begin
+ FDrawSelect := Value;
+end;
+
+procedure TUCXPSettings.SetOverrideOwnerDraw(const Value: boolean);
+begin
+ FOverrideOwnerDraw := Value;
+ {
+ if FActive then
+ Active := True;
+ }
+end;
+
+procedure TUCXPSettings.SetUseSystemColors(const Value: boolean);
+begin
+ FUseSystemColors := Value;
+ {Windows.DrawMenuBar(FForm.Handle);}
+end;
+
+procedure TUCXPSettings.SetGradient(const Value: boolean);
+begin
+ FGradient := Value;
+end;
+
+procedure TUCXPSettings.SetFlatMenu(const Value: boolean);
+begin
+ FFlatMenu := Value;
+end;
+
+procedure TUCXPSettings.SetUCXPContainers(const Value: TUCXPContainers);
+begin
+ if Value <> FUCXPContainers then
+ begin
+ {if FActive then
+ begin
+ FActive := false;
+ InitItems(FForm, false, true);
+ FActive := true;
+ FUCXPContainers := Value;
+ InitItems(FForm, true, true);
+ end;}
+ end;
+ FUCXPContainers := Value;
+
+end;
+
+procedure TUCXPSettings.SetUCXPControls(const Value: TUCXPControls);
+begin
+ if Value <> FUCXPControls then
+ begin
+ { if FActive then
+ begin
+ FActive := false;
+ InitItems(FForm, false, true);
+ FActive := true;
+ FUCXPControls := Value;
+ InitItems(FForm, true, true);
+ end;}
+ end;
+ FUCXPControls := Value;
+
+end;
+
+procedure TUCXPSettings.SetDrawMenuBar(const Value: boolean);
+begin
+ FDrawMenuBar := Value;
+end;
+
+procedure TUCXPSettings.SetUseDimColor(const Value: boolean);
+begin
+ FUseDimColor := Value;
+end;
+
+procedure TUCXPSettings.SetAutoDetect(const Value: boolean);
+begin
+ FAutoDetect := Value;
+end;
+{END from UCXPStyle}
+procedure TUCXPSettings.SetBitBtnColor( const Value: TColor);
+begin
+ FBitBtnColor := Value;
+end;
+
+procedure TUCXPSettings.SetColorsChanged(const Value: boolean);
+begin
+ FColorsChanged := Value;
+end;
+
+//generic
+procedure GetSystemMenuFont(Font: TFont);
+var
+ FNonCLientMetrics: TNonCLientMetrics;
+begin
+ FNonCLientMetrics.cbSize := Sizeof(TNonCLientMetrics);
+ if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @FNonCLientMetrics,0) then
+ begin
+ Font.Handle := CreateFontIndirect(FNonCLientMetrics.lfMenuFont);
+ Font.Color := clMenuText;
+ end;
+end;
+
+
+end.
diff --git a/official/2.31RC1/Source/UCXPStyle.pas b/official/2.31RC1/Source/UCXPStyle.pas
new file mode 100644
index 0000000..694f11b
--- /dev/null
+++ b/official/2.31RC1/Source/UCXPStyle.pas
@@ -0,0 +1,5183 @@
+{
+Class UCXPStyle:
+Based on XPMenu 3.1 for Delphi
+
+
+XPMenu for Delphi
+Author: Khaled Shagrouni
+URL: http://www.shagrouni.com/english/software/xpmenu.html
+e-mail: khaled@shagrouni.com
+
+Version 3.1 - 22.02.2004
+
+
+
+XPMenu is a Delphi component to mimic Office XP menu and toolbar style.
+Copyright (C) 2001, 2003 Khaled Shagrouni.
+
+This component is FREEWARE with source code. I still hold the copyright, but
+you can use it for whatever you like: freeware, shareware or commercial software.
+If you have any ideas for improvement or bug reports, don't hesitate to e-mail
+me (Please state the XPMenu version and OS information).
+
+--------------------------------------------------------------------------------
+changes by QmD 30/11/2003 - qmd@usercontrol.com.br
+* Add BitBtnColor / BitBtnSelectColor by QmD 30/11/2003 - qmd@usercontrol.com.br
+* BitBtn Button multi-line corrected
+* 29/03/2004 - XPmenu 2.21 incorporated in User Control Package. Class renamed to UCXPMenu to prevent conflicts (http://usercontrol.sourceforge.net)
+
+changes by fduenas 29/12/2004 - fduenas@outm.net, fduenas@flashmail.com
+* XPMenu.pas 3.1 Ported to UCXPStyle.pas by Francisco Dueñas fduenas@outm.net.
+* File UCXPMenu.pas renamed to UCXPStyle.pas
+* Class UCXPSet renamed to UCXPSettings
+* File UCXPSet.pas renamed to UCXPSettings.pas
+}
+
+{$IFDEF VER130}
+{$DEFINE VER5U}
+{$ENDIF}
+
+{$IFDEF VER140}
+{$DEFINE VER5U}
+{$DEFINE VER6U}
+{$ENDIF}
+
+{$IFDEF VER150}
+{$DEFINE VER5U}
+{$DEFINE VER6U}
+{$DEFINE VER7U}
+{$ENDIF}
+
+unit UCXPStyle;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, ComCtrls, Forms,
+ Menus, Commctrl, ExtCtrls, StdCtrls, Buttons, UCXPSettings, UCBase, UCSettings;
+
+type
+ { moved to UCXPSettings.pas and renamed TXP* to TUCXP*
+ TXPContainer = (xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
+ xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller);
+ TXPContainers = set of TXPContainer;
+
+ TXPControl = (xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox,
+ xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox,
+ xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel,
+ xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey);
+ {xcStringGrid, xcDrawGrid, xcDBGrid);
+ }
+
+
+ TUCAboutXpStyleVar=String[10];
+
+ TUCXPStyle = class;
+
+ TControlSubClass = class(TComponent) //: "Fabian Jakubowski"
+ private
+ Control: TControl;
+ FBuilding: boolean;
+ FMouseInControl: boolean;
+ FLButtonBressed: boolean;
+ FBressed: boolean;
+ FIsKeyDown: boolean;
+ FIsFocused: boolean;
+ orgWindowProc: TWndMethod;
+ FXPStyle: TUCXPStyle;
+ FCtl3D: boolean;
+ FBorderStyle: TBorderStyle;
+ {FOnDrawCell: TDrawCellEvent;}
+ FDefaultDrawing: boolean;
+ FSelCol, FSelRow: integer;
+ FMsg: Cardinal;
+ procedure ControlSubClass(var Message: TMessage);
+ procedure PaintControlXP;
+ procedure PaintCombo;
+ procedure PaintDBLookupCombo;
+ procedure PaintEdit;
+ procedure PaintRichEdit;
+ procedure PaintCheckBox;
+ procedure PaintRadio;
+ procedure PaintButton;
+ procedure PaintBitButn;
+ procedure PaintUpDownButton;
+ procedure PaintSpeedButton;
+ procedure PaintPanel;
+ procedure PaintGroupBox;
+ procedure PaintNCWinControl;
+ procedure PaintProgressBar;
+ procedure PaintHotKey;
+ end;
+
+ TUCXPStyle = class(TComponent)
+ private
+ FActive: boolean;
+ {Changes MMK FForm to TScrollingWinControl}
+ FForm: TScrollingWinControl;
+
+ {moved to UCXPsettings
+ FFont: TFont;
+ FColor: TColor;
+ FIconBackColor: TColor;
+ FMenuBarColor: TColor;
+ FCheckedColor: TColor;
+ FSeparatorColor: TColor;
+ FSelectBorderColor: TColor;
+ FSelectColor: TColor;
+ FDisabledColor: TColor;
+ FSelectFontColor: TColor;
+ FIconWidth: integer;
+ FDrawSelect: boolean;
+ FUseSystemColors: boolean;
+ FColorsChanged: boolean; // +jt
+ }
+
+ FFColor, FFIconBackColor, FFSelectColor, FFSelectBorderColor,
+ FFSelectFontColor, FCheckedAreaColor, FCheckedAreaSelectColor,
+ FFCheckedColor, FFMenuBarColor, FFDisabledColor, FFSeparatorColor,
+ FMenuBorderColor, FMenuShadowColor: TColor;
+
+ Is16Bit: boolean;
+ { moved to UCXPSettings.pas
+ FOverrideOwnerDraw: boolean;
+ FGradient: boolean;
+ FFlatMenu: boolean;
+ FAutoDetect: boolean;
+ FUCXPContainers: TUCXPContainers;
+ FUCXPControls: TUCXPControls;
+ FGrayLevel: byte;
+ FDimLevel: byte;
+ FDrawMenuBar: boolean;
+ FUseDimColor: boolean;
+ }
+
+ FDimParentColor, FDimParentColorSelect: integer;
+
+ FAutoDetect: boolean;
+ // FUseParentClor: boolean;
+
+ FSettingWindowRng: boolean;
+ FIsW2k: boolean;
+ FIsWXP: boolean;
+ FIsWNT: boolean;
+// FTransparentColor: TColor;
+ // Do not allow the component to be used for subclassing
+ FDisableSubclassing: boolean;
+
+ FUCSettings: TUCSettings;
+ FUCXPSettings: TUCXPSettings;
+ FUCAboutXpStyleVar: TUCAboutXpStyleVar; {+qmd}
+
+ procedure SetDisableSubclassing(const Value: boolean);
+
+ procedure SetActive(const Value: boolean);
+
+ procedure SetForm(const Value: TScrollingWinControl);
+ { moved to UCXPSettings
+ procedure SetFont(const Value: TFont);
+ procedure SetColor(const Value: TColor);
+ procedure SetIconBackColor(const Value: TColor);
+ procedure SetMenuBarColor(const Value: TColor);
+ procedure SetCheckedColor(const Value: TColor);
+ procedure SetDisabledColor(const Value: TColor);
+ procedure SetSelectColor(const Value: TColor);
+ procedure SetSelectBorderColor(const Value: TColor);
+ procedure SetSeparatorColor(const Value: TColor);
+ procedure SetSelectFontColor(const Value: TColor);
+ procedure SetIconWidth(const Value: integer);
+ procedure SetDrawSelect(const Value: boolean);
+ procedure SetUseSystemColors(const Value: boolean);
+ procedure SetOverrideOwnerDraw(const Value: boolean);
+ procedure SetGradient(const Value: boolean);
+ procedure SetFlatMenu(const Value: boolean);
+ procedure SetUCXPContainers(const Value: TUCXPContainers);
+ procedure SetUCXPControls(const Value: TUCXPControls);
+ procedure SetDrawMenuBar(const Value: boolean);
+ procedure SetUseDimColor(const Value: boolean);
+ }
+
+ procedure SetUCSettings(const Value: TUCSettings); {+qmd}
+ protected
+ procedure Loaded; override; //add by Cunha, liyang.
+ procedure InitItems(wForm: TWinControl; Enable, Update: boolean);
+ procedure InitItem(Comp: TComponent; Enable, Update: boolean); // Tom: "Thomas Knoblauch" 27.08
+ procedure DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
+ Selected: Boolean);
+ procedure MenueDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
+ Selected: Boolean);
+ {$IFDEF VER5U}
+ procedure ToolBarDrawButton(Sender: TToolBar; Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
+ {$ENDIF}
+ procedure ControlBarPaint(Sender: TObject; Control: TControl;
+ Canvas: TCanvas; var ARect: TRect; var Options: TBandPaintOptions);
+
+ procedure SetGlobalColor(ACanvas: TCanvas);
+ procedure DrawTopMenuItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
+ BckColor:Tcolor; IsRightToLeft: boolean);
+ procedure DrawCheckedItem(FMenuItem: TMenuItem; Selected, Enabled,
+ HasImgLstBitmap: boolean; ACanvas: TCanvas; CheckedRect: TRect);
+ procedure DrawTheText(Sender: TObject; txt, ShortCuttext: string;
+ ACanvas: TCanvas; TextRect: TRect;
+ Selected, Enabled, Default, TopMenu, IsRightToLeft: boolean;
+ var TxtFont: TFont; TextFormat: integer);
+ procedure DrawIcon(Sender: TObject; ACanvas: TCanvas; B: TBitmap;
+ IconRect: Trect; Hot, Selected, Enabled, Checked, FTopMenu,
+ IsRightToLeft: boolean);
+
+ procedure MeasureItem(Sender: TObject; ACanvas: TCanvas;
+ var Width, Height: Integer);
+
+ //function GetImageExtent(MenuItem: TMenuItem): TPoint;
+ function GetImageExtent(MenuItem: TMenuItem; FTopMenu: TMenu): TPoint; // +jt
+ function TopMenuFontColor(ACanvas: TCanvas; Color: TColor): TColor;
+ procedure DrawGradient(ACanvas: TCanvas; ARect: TRect;
+ IsRightToLeft: boolean);
+
+ procedure DrawWindowBorder(hWnd: HWND; IsRightToLeft: boolean);
+
+ procedure Notification(AComponent: TComponent;
+ AOperation: TOperation); override;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure InitComponent(Comp: TComponent); // Tom: Added for usage by the main program ."Thomas Knoblauch" 27.08
+ procedure ActivateMenuItem(MenuItem: TMenuItem; SubMenus: boolean); // +jt
+ property Form: TScrollingWinControl read FForm write SetForm;// +jt
+ property IsWXP: boolean read FIsWXP;
+ property IsW2k: boolean read FIsW2k;
+ property IsWNT: boolean read FIsWNT;
+{ property TransparentColor: TColor read FTransparentColor write FTransparentColor;}
published
{moved to UCXPSettings
+ property DimLevel: Byte read FDimLevel write FDimLevel;
+ property GrayLevel: Byte read FGrayLevel write FGrayLevel;
+ property Font: TFont read FFont write SetFont;
+ property Color: TColor read FColor write SetColor;
+ property DrawMenuBar: boolean read FDrawMenuBar write SetDrawMenuBar;
+ property IconBackColor: TColor read FIconBackColor write SetIconBackColor;
+ property MenuBarColor: TColor read FMenuBarColor write SetMenuBarColor;
+ property SelectColor: TColor read FSelectColor write SetSelectColor;
+ property SelectBorderColor: TColor read FSelectBorderColor
+ write SetSelectBorderColor;
+ property SelectFontColor: TColor read FSelectFontColor
+ write SetSelectFontColor;
+ property DisabledColor: TColor read FDisabledColor write SetDisabledColor;
+ property SeparatorColor: TColor read FSeparatorColor
+ write SetSeparatorColor;
+ property CheckedColor: TColor read FCheckedColor write SetCheckedColor;
+ property IconWidth: integer read FIconWidth write SetIconWidth;
+ property DrawSelect: boolean read FDrawSelect write SetDrawSelect;
+ property UseSystemColors: boolean read FUseSystemColors
+ write SetUseSystemColors;
+ property UseDimColor: boolean read FUseDimColor write SetUseDimColor;
+ property OverrideOwnerDraw: boolean read FOverrideOwnerDraw
+ write SetOverrideOwnerDraw;
+
+ property Gradient: boolean read FGradient write SetGradient;
+ property FlatMenu: boolean read FFlatMenu write SetFlatMenu;
+ property AutoDetect: boolean read FAutoDetect write SetAutoDetect;
+
+ property XPContainers: TUCXPContainers read FUCXPContainers write SetUCXPContainers
+ default [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
+ xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller];
+ property XPControls :TUCXPControls read FUCXPControls write SetUCXPControls
+ default [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox,
+ xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox,
+ xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel,
+ xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey];
+ {xcStringGrid, xcDrawGrid, xcDBGrid];
+ }
+ property About: TUCAboutXpStyleVar read FUCAboutXpStyleVar write FUCAboutXpStyleVar;
+ property Active: boolean read FActive write SetActive;
+ property DisableSubclassing: boolean read FDisableSubclassing write SetDisablesubclassing
+ default false;
+ property XPSettings : TUCXPSettings read FUCXPSettings write FUCXPSettings;
+ property UCSettings : TUCSettings read FUCSettings write SetUCSettings;
+ end;
+
+ TUCXPStyleManager = class(TPersistent)
+ private
+ FXPStyleList: TList;
+ FPendingFormsList: TList;
+ FFormList: TList;
+ FActiveXPStyle: TUCXPStyle;
+ FDisableSubclassing: boolean;
+
+ function MainWindowHook(var Message: TMessage): boolean;
+ procedure CollectForms;
+ procedure RemoveChildSubclassing(AForm: TCustomForm);
+ procedure SetDisableSubclassing(AValue: boolean);
+ function FindSubclassingXPStyle(Exclude: TUCXPStyle): TUCXPStyle;
+
+ protected
+ procedure Notification(AComponent: TComponent;
+ AOperation: TOperation);
+
+ public
+ constructor Create;
+ destructor Destroy; override;
+ procedure Add(AXPStyle: TUCXPStyle);
+ procedure Delete(AXPStyle: TUCXPStyle);
+ procedure UpdateActiveXPStyle(AXPStyle: TUCXPStyle);
+ procedure AddForm(AForm: TCustomForm);
+ procedure RemoveForm(AForm: TCustomForm);
+ function IsFormSubclassed(AForm: TCustomForm): boolean;
+ function IsComponentSubclassed(AComponent: TComponent): boolean;
+
+ property ActiveXPStyle: TUCXPStyle read FActiveXPStyle;
+ property DisableSubclassing: boolean read FDisableSubclassing write SetDisableSubclassing
+ default false;
+ end;
+
+function GetShadeColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
+function MergColor(Colors: Array of TColor): TColor;
+function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
+procedure DimBitmap(ABitmap: TBitmap; Value: integer);
+
+procedure DrawArrow(ACanvas: TCanvas; X, Y: integer); overload;
+procedure DrawArrow(ACanvas: TCanvas; X, Y, Orientation: integer); overload;
+function GrayColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
+function GetInverseColor(AColor: TColor): TColor;
+
+procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
+procedure DrawBitmapShadow(B: TBitmap; ACanvas: TCanvas; X, Y: integer; ShadowColor: TColor);
+procedure DrawCheckMark(ACanvas: TCanvas; X, Y: integer);
+
+procedure GetSystemMenuFont(Font: TFont);
+//procedure Register;
+
+const
+ WM_DRAWMENUBORDER = CN_NOTIFY + 101; // +jt
+ WM_DRAWMENUBORDER2 = CN_NOTIFY + 102; // +jt
+
+// Gloabal access to the UCXPStyleManager
+var
+ UCXPStyleManager: TUCXPStyleManager;
+
+implementation
+
+{ moved to UCReg.pas
+procedure Register;
+begin
+ RegisterComponents('XP', [TUCXPStyle]);
+end;
+}
+// Set up the global variable that represents the UCXPStyleManager
+procedure InitControls;
+begin
+ //added by fduenas
+ if (csDesigning in Application.ComponentState) then
+ exit;
+
+ if (Not assigned(UCXPStyleManager)) or
+ (UCXPStyleManager = nil) then
+ UCXPStyleManager := TUCXPStyleManager.Create;
+end;
+
+// Delete the global variable that represents the UCXPStyleManager
+procedure DoneControls;
+begin
+ FreeAndNil(UCXPStyleManager);
+ {
+ if (UCXPStyleManager <> nil) then
+ begin
+ UCXPStyleManager.Free;
+ UCXPStyleManager := nil;
+ end;
+ }
+end;
+
+// Test if mouse cursor is in the given rect of the application's main form
+function IsMouseInRect(TheForm: TScrollingWinControl; DestRect: TRect): boolean;
+var
+ p: TPoint;
+
+begin
+
+ if Assigned(TheForm) then
+ begin
+ p := Mouse.CursorPos;
+ p.x := p.x - TheForm.Left;
+ p.y := p.y - TheForm.Top;
+
+ Dec(DestRect.Right);
+ Dec(DestRect.Bottom, 2);
+ Result := (p.x >= DestRect.Left) and (p.x <= DestRect.Right) and
+ (p.y >= DestRect.Top) and (p.y <= DestRect.Bottom);
+ end
+ else Result := false;
+end;
+
+{ TUCXPStyle }
+
+constructor TUCXPStyle.Create(AOwner: TComponent);
+var
+ OSVersionInfo: TOSVersionInfo; // +jt
+begin
+ inherited Create(AOwner);
+ {moved to UCXPSettings
+ FFont := TFont.Create;
+ }
+ FDisableSubclassing := false; // enable XPStyle to be used for global subclassing
+
+{moved to UCXPSettings
+ {$IFDEF VER5U
+ FFont.Assign(Screen.MenuFont);
+ {$ELSE
+ GetSystemMenuFont(FFont);
+ {$ENDIF
+}
+
+ FForm := (Owner as TScrollingWinControl);
+ FUCXPSettings := TUCXPSettings.create(self); //added by fduenas
+ {moved to UCXPSettings
+ FUseSystemColors := true;
+
+ FColor := clBtnFace;
+ FIconBackColor := clBtnFace;
+ FSelectColor := clHighlight;
+ FSelectBorderColor := clHighlight;
+ FMenuBarColor := clBtnFace;
+ FDisabledColor := clInactiveCaption;
+ FSeparatorColor := clBtnFace;
+ FCheckedColor := clHighlight;
+ FSelectFontColor := FFont.Color;
+ FGrayLevel := 10;
+ FDimLevel := 30;
+ FIconWidth := 24;
+ FDrawSelect := true;
+ UCXPContainers := [xccForm, xccFrame, xccToolbar, xccCoolbar, xccControlbar, xccPanel,
+ xccScrollBox, xccGroupBox, xccTabSheet, xccPageScroller];
+ UCXPControls := [xcMainMenu, xcPopupMenu, xcToolbar, xcControlbar, xcCombo, xcListBox,
+ xcEdit, xcMaskEdit, xcMemo, xcRichEdit, xcMiscEdit, xcCheckBox,
+ xcRadioButton, xcButton, xcBitBtn, xcSpeedButton, xcUpDown, xcPanel,
+ xcGroupBox, xcTreeView, xcListView, xcProgressBar, xcHotKey];
+ {xcStringGrid, xcDrawGrid, xcDBGrid];
+
+ }
+ if Assigned(FForm) then
+ SetGlobalColor(TForm(FForm).Canvas);
+
+// +jt
+// FTransparentColor := clFuchsia;
+ FUCXPSettings.ColorsChanged := false;
+ OSVersionInfo.dwOSVersionInfoSize := sizeof(OSVersionInfo);
+ GetVersionEx(OSVersionInfo);
+ FIsWXP:=false;
+ FIsW2k:=false;
+ FIsWNT:=false;
+ if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
+ begin
+ FIsWNT:=true;
+ if (OSVersionInfo.dwMajorVersion = 5) and (OSVersionInfo.dwMinorVersion = 0) then FIsW2k:=true;
+ if (OSVersionInfo.dwMajorVersion = 5) and (OSVersionInfo.dwMinorVersion = 1) then FIsWXP:=true;
+ end;
// +jt
+
+ {moved to initialization section
+ if not(csDesigning in ComponentState) then
+ InitControls
+ else
+ exit;
+ }
+ if FActive then
+ Self.Active := FActive;
+
+ //if FForm.Handle <> 0 then
+ // Windows.DrawMenuBar(FForm.Handle);
+end;
+
+destructor TUCXPStyle.Destroy;
+begin
+ if Assigned(FForm) then //oleg oleg@vdv-s.ru Mon Oct 7
+ InitItems(FForm, false, false);
+
+// Remove XPStyle from UCXPStyleManager
+ if Assigned(UCXPStyleManager) and not(csDesigning in ComponentState) then
+ begin
+ UCXPStyleManager.Delete(Self);
+ FForm.Update;
+ {moved to finalization section
+ if UCXPStyleManager.FXPStyleList.Count = 0 then
+ DoneControls;
+ }
+ end;
+
+ //FFont.Free; moved to TCXPSettings
+ FreeAndNil(FUCXPSettings); {added by fduenas}
+ inherited Destroy;
+end;
+
+//add by:
+//liyang ,2002-07-19
+//Pedro Miguel Cunha - 02 Apr 2002
+procedure TUCXPStyle.Loaded;
+begin
+ inherited Loaded;
+
+// Add the XPStyle to the UCXPStyleManager
+ if Assigned(UCXPStyleManager) and not(csDesigning in ComponentState) then
+ UCXPStyleManager.Add(Self);
+end;
+
+{to check for new sub items}
+procedure TUCXPStyle.ActivateMenuItem(MenuItem: TMenuItem; SubMenus: boolean); // +jt
+
+ procedure Activate(MenuItem: TMenuItem);
+ begin
+ if (MenuItem.Tag <> 999) then
+ if addr(MenuItem.OnDrawItem) <> addr(TUCXPStyle.DrawItem) then
+ begin
+ if (not assigned(MenuItem.OnDrawItem)) or (FUCXPSettings.OverrideOwnerDraw) then
+ MenuItem.OnDrawItem := DrawItem;
+ if (not assigned(MenuItem.OnMeasureItem)) or (FUCXPSettings.OverrideOwnerDraw) then
+ MenuItem.OnMeasureItem := MeasureItem;
+ end
+ end;
+
+var
+ i{, j}: integer;
+begin
+
+ Activate(MenuItem);
+ if (SubMenus=true) then // +jt
+ begin
+ for i := 0 to MenuItem.Count -1 do
+ begin
+ ActivateMenuItem(MenuItem.Items[i],true);
+ end;
+ end;
+end;
+
+procedure TUCXPStyle.InitItems(wForm: TWinControl; Enable, Update: boolean );
+var
+ i: integer;
+ Comp: TComponent;
+begin
+ for i := 0 to wForm.ComponentCount - 1 do
+ begin
+ Comp := wForm.Components[i];
+ InitItem(Comp, Enable, Update); // Tom: "Thomas Knoblauch" 27.08
+ end;
+end;
+
+procedure TUCXPStyle.InitComponent(Comp: TComponent); // Tom: for external (by the main program) use without parameters. "Thomas Knoblauch" 27.08
+begin
+ if FActive then InitItem(Comp, true, true);
+end;
+
+
+
+// Tom: "Thomas Knoblauch" 27.08
+procedure TUCXPStyle.InitItem(Comp: TComponent; Enable, Update: boolean );
+ procedure Activate(MenuItem: TMenuItem);
+ begin
+ if Enable then
+ begin
+ if (MenuItem.Tag <> 999) then
+ begin
+ if (not assigned(MenuItem.OnDrawItem)) or (FUCXPSettings.OverrideOwnerDraw) then
+ MenuItem.OnDrawItem := DrawItem;
+ if (not assigned(MenuItem.OnMeasureItem)) or (FUCXPSettings.OverrideOwnerDraw) then
+ MenuItem.OnMeasureItem := MeasureItem;
+ end;
+ end
+ else
+ begin
+ if addr(MenuItem.OnDrawItem) = addr(TUCXPStyle.DrawItem) then
+ MenuItem.OnDrawItem := nil;
+ if addr(MenuItem.OnMeasureItem) = addr(TUCXPStyle.MeasureItem) then
+ MenuItem.OnMeasureItem := nil;
+ end;
+ end;
+
+ procedure ItrateMenu(MenuItem: TMenuItem);
+ var
+ i: integer;
+ begin
+ Activate(MenuItem);
+ for i := 0 to MenuItem.Count - 1 do
+ begin
+ ItrateMenu(MenuItem.Items[i]);
+ end;
+ end;
+
+var
+ x: integer;
+ s: string;
+
+begin
+ if (Comp is TMainMenu) and (xcMainMenu in FUCXPSettings.XPControls) and (TMainMenu(Comp).Tag <> 999)then
+ begin
+ for x := 0 to TMainMenu(Comp).Items.Count - 1 do
+ begin
+ TMainMenu(Comp).OwnerDraw := Enable;
+ //Activate(TMainMenu(Comp).Items[x]);
+ ItrateMenu(TMainMenu(Comp).Items[x]);
+ end;
+ // Selly way to force top menu in other forms to repaint
+ S := TMainMenu(Comp).Items[0].Caption;
+ TMainMenu(Comp).Items[0].Caption := '';
+ TMainMenu(Comp).Items[0].Caption := S;
+ end;
+
+ if (Comp is TPopupMenu) and (xcPopupMenu in FUCXPSettings.XPControls) then
+ begin
+ for x := 0 to TPopupMenu(Comp).Items.Count - 1 do
+ begin
+ TPopupMenu(Comp).OwnerDraw := Enable;
+ ItrateMenu(TPopupMenu(Comp).Items[x]);
+
+ end;
+ end;
+
+ {$IFDEF VER5U}
+ if (Comp is TToolBar) and (xcToolBar in FUCXPSettings.XPControls) then
+ if not (csDesigning in ComponentState) then
+ begin
+ if not TToolBar(Comp).Flat then
+ TToolBar(Comp).Flat := true;
+
+ if Enable then
+ begin
+ for x := 0 to TToolBar(Comp).ButtonCount - 1 do
+ if (not assigned(TToolBar(Comp).OnCustomDrawButton))
+ or (FUCXPSettings.OverrideOwnerDraw) then
+ begin
+ TToolBar(Comp).OnCustomDrawButton :=
+ ToolBarDrawButton;
+
+ end;
+ end
+ else
+ begin
+ if addr(TToolBar(Comp).OnCustomDrawButton) =
+ addr(TUCXPStyle.ToolBarDrawButton) then
+ TToolBar(Comp).OnCustomDrawButton := nil;
+ end;
+ if Update then
+ TToolBar(Comp).Invalidate;
+ end;
+ {$ENDIF}
+
+ if (Comp is TControlBar) and (xcControlBar in FUCXPSettings.XPControls) then
+ if not (csDesigning in ComponentState) then
+ begin
+ if Enable then
+ begin
+ if (not assigned(TControlBar(Comp).OnBandPaint))
+ or (FUCXPSettings.OverrideOwnerDraw) then
+ begin
+ TControlBar(Comp).OnBandPaint := ControlBarPaint;
+ end;
+ end
+ else
+ begin
+ if addr(TControlBar(Comp).OnBandPaint) =
+ addr(TUCXPStyle.ControlBarPaint) then
+ TControlBar(Comp).OnBandPaint := nil;
+ end;
+ if Update then
+ TControlBar(Comp).Invalidate;
+ end;
+
+ if not (csDesigning in ComponentState) then
+ if {$IFDEF VER6U}
+ ((Comp is TCustomCombo) and (xcCombo in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomLabeledEdit) and (xcEdit in FUCXPSettings.XPControls)) or
+
+ {$ELSE}
+ ((Comp is TCustomComboBox) and (xcCombo in FUCXPSettings.XPControls)) or
+ {$ENDIF}
+ ((Comp is TEdit) and (xcEdit in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TMaskEdit') and (xcMaskEdit in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TDBEdit') and (xcMaskEdit in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomMemo) and (xcMemo in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomRichEdit) and (xcRichEdit in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomCheckBox) and (xcCheckBox in FUCXPSettings.XPControls)) or
+ ((Comp is TRadioButton) and (xcRadioButton in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TBitBtn') and (xcBitBtn in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TButton') and (xcButton in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TUpDown') and (xcUpDown in FUCXPSettings.XPControls)) or
+ ((Comp is TSpeedButton) and (xcSpeedButton in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomPanel) and (xcPanel in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TDBNavigator') and (xcButton in FUCXPSettings.XPControls)) or
+ ((Comp.ClassName = 'TDBLookupComboBox') and (xcButton in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomGroupBox) and (xcGroupBox in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomListBox) and (xcListBox in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomTreeView) and (xcTreeView in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomListView) and (xcListView in FUCXPSettings.XPControls)) or
+ ((Comp is TProgressBar) and (xcProgressBar in FUCXPSettings.XPControls)) or
+ ((Comp is TCustomHotKey) and (xcHotKey in FUCXPSettings.XPControls))
+ then
+ if ((TControl(Comp).Parent is TToolbar) and (xccToolBar in FUCXPSettings.XPContainers))or
+ ((TControl(Comp).Parent is TCoolbar) and (xccCoolbar in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TCustomPanel) and (xccPanel in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TControlbar) and (xccControlbar in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TScrollBox) and (xccScrollBox in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TCustomGroupBox) and (xccGroupBox in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TTabSheet) and (xccTabSheet in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TTabControl) and (xccTabSheet in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent.ClassName = 'TdxTabSheet') and (xccTabSheet in FUCXPSettings.XPContainers)) or //DeveloperExpress
+ ((TControl(Comp).Parent is TPageScroller) and (xccPageScroller in FUCXPSettings.XPContainers)) or
+ {$IFDEF VER5U}
+ ((TControl(Comp).Parent is TCustomFrame) and (xccFrame in FUCXPSettings.XPContainers)) or
+ {$ENDIF}
+ ((TControl(Comp).Parent.ClassName = 'TDBCtrlPanel') and (xccFrame in FUCXPSettings.XPContainers)) or
+ ((TControl(Comp).Parent is TCustomForm) and (xccForm in FUCXPSettings.XPContainers))
+
+
+ then
+ begin
+ if (Enable) and (Comp.Tag <> 999) and (TControl(Comp).Parent.Tag <> 999) then
+ {skip if Control/Control.parent.tag = 999}
+ with TControlSubClass.Create(Self) do
+ begin
+ Control := TControl(Comp);
+ if Addr(Control.WindowProc) <> Addr(TControlSubClass.ControlSubClass) then
+ begin
+ orgWindowProc := Control.WindowProc;
+ Control.WindowProc := ControlSubClass;
+ end;
+ FXPStyle := self;
+
+ if (Control is TCustomEdit) then
+ begin
+ FCtl3D := TEdit(Control).Ctl3D;
+ FBorderStyle := TRichEdit(Control).BorderStyle;
+ end;
+ if Control.ClassName = 'TDBLookupComboBox' then
+ begin
+ FCtl3D := TComboBox(Control).Ctl3D;
+ end;
+ if (Control is TCustomListBox) then
+ begin
+ FCtl3D := TListBox(Control).Ctl3D;
+ FBorderStyle := TListBox(Control).BorderStyle;
+ end;
+ if (Control is TCustomListView) then begin
+ FCtl3D := TListView(Control).Ctl3D;
+ FBorderStyle := TListView(Control).BorderStyle;
+ end;
+ if (Control is TCustomTreeView) then begin
+ FCtl3D := TTreeView(Control).Ctl3D;
+ FBorderStyle := TTreeView(Control).BorderStyle;
+ end;
+
+ end;
+
+ if Update then
+ begin
+ TControl(Comp).invalidate //in TControlSubClass.ControlSubClass
+ end;
+
+ end;
+
+ // Recursive call for possible containers.
+
+
+ // Do recursive call for RadioGroups
+ if (((Comp is TCustomRadioGroup)) and (xccGroupBox in FUCXPSettings.XPContainers)) then
+ self.InitItems(Comp as TWinControl, Enable, Update);
+
+
+ if {$IFDEF VER5U}((Comp is TCustomFrame) and (xccFrame in FUCXPSettings.XPContainers))
+ or {$ENDIF}(Comp.ClassName = 'TDBNavigator')
+ or (Comp is TCustomForm) then //By Geir Wikran
+ self.InitItems(Comp as TWinControl, Enable, Update);
+
+
+end;
+
+procedure TUCXPStyle.DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
+ Selected: Boolean);
+begin
+ try //"Steve Rice"
+ if FActive then
+ MenueDrawItem(Sender, ACanvas, ARect, Selected);
+ except
+ end;
+end;
+
+function TUCXPStyle.GetImageExtent(MenuItem: TMenuItem; FTopMenu: TMenu): TPoint;
+var
+ HasImgLstBitmap: boolean;
+ B: TBitmap;
+begin
+ B := TBitmap.Create;
+ try
+ B.Width := 0;
+ B.Height := 0;
+ Result.x := 0;
+ Result.Y := 0;
+ HasImgLstBitmap := false;
+// +jt
+ if Assigned(FTopMenu) then
+ begin
+ if FTopMenu.Images <> nil then
+ if MenuItem.ImageIndex <> -1 then
+ HasImgLstBitmap := true;
+ end;
+ if (MenuItem.Parent.GetParentMenu.Images <> nil)
+ {$IFDEF VER5U}
+ or (MenuItem.Parent.SubMenuImages <> nil)
+ {$ENDIF}
+ then
+ begin
+ if MenuItem.ImageIndex <> -1 then
+ HasImgLstBitmap := true
+ else
+ HasImgLstBitmap := false;
+ end;
+
+ if HasImgLstBitmap then
+ begin
+ {$IFDEF VER5U}
+ if MenuItem.Parent.SubMenuImages <> nil then
+ MenuItem.Parent.SubMenuImages.GetBitmap(MenuItem.ImageIndex, B)
+ else
+ {$ENDIF}
+ MenuItem.Parent.GetParentMenu.Images.GetBitmap(MenuItem.ImageIndex, B)
+ end
+ else
+ if MenuItem.Bitmap.Width > 0 then
+ B.Assign(TBitmap(MenuItem.Bitmap));
+
+ Result.x := B.Width;
+ Result.Y := B.Height;
+
+ if not Assigned(FTopMenu) then // +jt
+ if Result.x < FUCXPSettings.IconWidth then
+ Result.x := FUCXPSettings.IconWidth;
+ finally
+ B.Free;
+ end;
+end;
+
+procedure TUCXPStyle.MeasureItem(Sender: TObject; ACanvas: TCanvas;
+ var Width, Height: Integer);
+var
+ s: string;
+ W, H: integer;
+ P: TPoint;
+ IsLine: boolean;
+ FTopMenu: boolean; // +jt
+ FMenu: TMenu; // +jt
+ i: integer; // +jt
+begin
+
+ FTopMenu:=false; //+jt
+ if FActive then
+ begin
+ S := TMenuItem(Sender).Caption;
+
+ if S = '-' then IsLine := true else IsLine := false;
+ if IsLine then
+ S := '';
+
+ if Trim(ShortCutToText(TMenuItem(Sender).ShortCut)) <> '' then
+ S := S + ShortCutToText(TMenuItem(Sender).ShortCut) + 'WWW';
+
+ ACanvas.Font.Assign(FUCXPSettings.Font);
+ W := ACanvas.TextWidth(s);
+ Inc(W, 5);
+ if pos('&', s) > 0 then
+ W := W - ACanvas.TextWidth('&');
+
+// +jt
+ FMenu := TMenuItem(Sender).Parent.GetParentMenu;
+ if FMenu is TMainMenu then
+ begin
+ for i := 0 to TMenuItem(Sender).GetParentMenu.Items.Count - 1 do
+ if TMenuItem(Sender).GetParentMenu.Items[i] = TMenuItem(Sender) then
+ begin
+ FTopMenu := True;
+ break;
+ end
+ end;
+ if not FTopMenu then FMenu := nil;
+ if(not FTopMenu) and (TMenuItem(Sender).Count>0) then Inc(W,6); // +jt
+// +jt
+
+ P := GetImageExtent(TMenuItem(Sender), FMenu); // +jt
+ W := W + P.x ;
+
+
+ if Width < W then
+ Width := W;
+
+ if IsLine then
+ Height := 4
+ else
+ begin
+ H := ACanvas.TextHeight(s) + Round(ACanvas.TextHeight(s) * 0.75);
+ if P.y + 6 > H then
+ H := P.y + 6;
+
+ if Height < H then
+ Height := H;
+ end;
+ end;
+
+end;
+
+procedure TUCXPStyle.MenueDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect;
+ Selected: Boolean);
+var
+ txt: string;
+ B: TBitmap;
+ IconRect, TextRect, CheckedRect: TRect;
+ FillRect: TRect; // +jt
+ i, X1, X2: integer;
+ TextFormat: integer;
+ HasImgLstBitmap: boolean;
+ HasBitmap: boolean;
+ FMenuItem: TMenuItem;
+ FMenu: TMenu;
+ FTopMenu: boolean;
+ IsLine: boolean;
+ ImgListHandle: HImageList; {Commctrl.pas}
+ ImgIndex: integer;
+ hWndM: HWND;
+ hDcM: HDC;
+ DrawTopMenuBorder: boolean;
+ msg: TMSG; // +jt
+ buff: TBitmap; // +jt
+ OrigRect: TRect; // +jt
+ OrigCanvas: TCanvas; // +jt
+ FFontSettings: TFont;
+begin
+
+
+ OrigCanvas:= nil;
+
+ FTopMenu := false;
+ FMenuItem := TMenuItem(Sender);
+
+// +jt
+ B := TBitmap.Create;
+ buff := TBitmap.Create;
+ try
+ origrect:= ARect;
+ Dec(origrect.Left,4);
+ origcanvas:=ACanvas;
+ ARect.Right:=(ARect.Right-ARect.Left)+4;
+ ARect.Bottom:=ARect.Bottom-ARect.Top;
+ ARect.Left:=4;
+ ARect.Top:=0;
+ buff.Width := ARect.Right;
+ buff.Height := ARect.Bottom;
+ ACanvas:=buff.Canvas;
// +jt
+ //SetGlobalColor(ACanvas);
+
+ if FMenuItem.Caption = '-' then IsLine := true else IsLine := false;
+
+ FMenu := FMenuItem.Parent.GetParentMenu;
+
+ if FMenu is TMainMenu then
+ for i := 0 to FMenuItem.GetParentMenu.Items.Count - 1 do
+ if FMenuItem.GetParentMenu.Items[i] = FMenuItem then
+ begin
+ FTopMenu := True;
+ // +jt
+ ARect.Left:=0;
+ Inc(origrect.Left,4);
+ Dec(ARect.Right,4);
+ buff.Width:=ARect.Right;
+ Dec(ARect.Bottom,1);
// +jt
+ break;
+ end;
+ if(FUCXPSettings.ColorsChanged) then SetGlobalColor(ACanvas); // +jt
+
+ ACanvas.Font.Assign(FUCXPSettings.Font);
+
+ Inc(ARect.Bottom, 1);
+ TextRect := ARect;
+ txt := ' ' + FMenuItem.Caption;
+
+// B := TBitmap.Create; //Leslie Cutting lesnes@absamail.co.za Jul 8 2003
+ HasBitmap := false;
+ HasImgLstBitmap := false;
+
+
+ if (FMenuItem.Parent.GetParentMenu.Images <> nil)
+ {$IFDEF VER5U}
+ or (FMenuItem.Parent.SubMenuImages <> nil)
+ {$ENDIF}
+ then
+ begin
+ if FMenuItem.ImageIndex <> -1 then
+ HasImgLstBitmap := true
+ else
+ HasImgLstBitmap := false;
+ end;
+
+ if FMenuItem.Bitmap.Width > 0 then
+ HasBitmap := true;
+
+ //-------
+ if HasBitmap then
+ begin
+ B.Width := FMenuItem.Bitmap.Width;
+ B.Height := FMenuItem.Bitmap.Height;
+ // +jt
+ //B.Canvas.Brush.Color := FTransparentColor; // ACanvas.Brush.Color;
+ B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher"
+ B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height));
+ FMenuItem.Bitmap.Transparent := true;
+ FMenuItem.Bitmap.TransparentMode := tmAuto;
+ B.Canvas.Draw(0,0,FMenuItem.Bitmap);
// +jt
+ end;
+
+
+ if HasImgLstBitmap then
+ begin
+ {$IFDEF VER5U}
+ if FMenuItem.Parent.SubMenuImages <> nil then
+ begin
+ ImgListHandle := FMenuItem.Parent.SubMenuImages.Handle;
+ ImgIndex := FMenuItem.ImageIndex;
+
+ B.Width := FMenuItem.Parent.SubMenuImages.Width;
+ B.Height := FMenuItem.Parent.SubMenuImages.Height;
+ // B.Canvas.Brush.Color := FTransparentColor; // ACanvas.Brush.Color; // +jt
+ B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher"
+ B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height));
+ ImageList_DrawEx(ImgListHandle, ImgIndex,
+ B.Canvas.Handle, 0, 0, 0, 0, clNone, clNone, ILD_Transparent);
+
+ end
+ else
+ {$ENDIF}
+ if FMenuItem.Parent.GetParentMenu.Images <> nil then
+ begin
+ ImgListHandle := FMenuItem.Parent.GetParentMenu.Images.Handle;
+ ImgIndex := FMenuItem.ImageIndex;
+
+ B.Width := FMenuItem.Parent.GetParentMenu.Images.Width;
+ B.Height := FMenuItem.Parent.GetParentMenu.Images.Height;
+ //B.Canvas.Brush.Color := FTransparentColor; //ACanvas.Pixels[2,2]; // +jt
+ B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher"
+ B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height));
+ ImageList_DrawEx(ImgListHandle, ImgIndex,
+ B.Canvas.Handle, 0, 0, 0, 0, clNone, clNone, ILD_Transparent);
+
+ end;
+
+ end;
+
+ //-----
+
+ if FMenu.IsRightToLeft then
+ begin
+ X1 := ARect.Right - FUCXPSettings.IconWidth;
+ X2 := ARect.Right;
+ end
+ else
+ begin
+ X1 := ARect.Left;
+ X2 := ARect.Left + FUCXPSettings.IconWidth;
+ end;
+ IconRect := Rect(X1, ARect.Top, X2, ARect.Bottom);
+
+
+ if HasImgLstBitmap or HasBitmap then
+ begin
+ CheckedRect := IconRect;
+ Inc(CheckedRect.Left, 1);
+ Inc(CheckedRect.Top, 2);
+ Dec(CheckedRect.Right, 3);
+ Dec(CheckedRect.Bottom, 2);
+ end
+ else
+ begin
+ CheckedRect.Left := IconRect.Left +
+ (IConRect.Right - IconRect.Left - 10) div 2;
+ CheckedRect.Top := IconRect.Top +
+ (IConRect.Bottom - IconRect.Top - 10) div 2;
+ CheckedRect.Right := CheckedRect.Left + 10;
+ CheckedRect.Bottom := CheckedRect.Top + 10;
+ end;
+
+ if B.Width > FUCXPSettings.IconWidth then
+ if FMenu.IsRightToLeft then
+ CheckedRect.Left := CheckedRect.Right - B.Width
+ else
+ CheckedRect.Right := CheckedRect.Left + B.Width;
+
+ if FTopMenu then Dec(CheckedRect.Top, 1);
+
+
+ if FMenu.IsRightToLeft then
+ begin
+ X1 := ARect.Left;
+ if not FTopMenu then
+ Dec(X2, FUCXPSettings.IconWidth)
+ else
+ Dec(X2, 4);
+ if (ARect.Right - B.Width) < X2 then
+ X2 := ARect.Right - B.Width - 8;
+ end
+ else
+ begin
+ X1 := ARect.Left ;
+ if not FTopMenu then
+ Inc(X1, FUCXPSettings.IconWidth)
+ else
+ Inc(X1, 4);
+
+ if (ARect.Left + B.Width) > X1 then
+ X1 := ARect.Left + B.Width + 4;
+ X2 := ARect.Right;
+ end;
+
+ TextRect := Rect(X1, ARect.Top, X2, ARect.Bottom);
+ // +jt
+ FillRect := ARect;
+ Dec(FillRect.Left,4);
// +jt
+
+ if FTopMenu then
+ begin
+ if not (HasImgLstBitmap or HasBitmap) then
+ begin
+ TextRect := ARect;
+ end
+ else
+ begin
+ if FMenu.IsRightToLeft then
+ TextRect.Right := TextRect.Right + 5
+ else
+ TextRect.Left := TextRect.Left - 5;
+ end
+
+ end;
+
+ if FTopMenu then
+ begin
+ if FUCXPSettings.DrawMenuBar then
+ FFMenuBarColor := FUCXPSettings.MenuBarColor;
+ ACanvas.brush.color := FFMenuBarColor;
+ ACanvas.Pen.Color := FFMenuBarColor;
+ // Inc(ARect.Bottom, 2);
+ ACanvas.FillRect(ARect);
+
+ //--
+ if FUCXPSettings.DrawMenuBar then
+ begin
+ if FMenuItem.GetParentMenu.Items[FMenuItem.GetParentMenu.Items.Count-1] =
+ FMenuItem then
+ begin
+ if FMenu.IsRightToLeft then
+ ACanvas.Rectangle(3, ARect.Top, ARect.Right, ARect.Bottom)
+ else
+ ACanvas.Rectangle(ARect.Left, ARect.Top, TScrollingWinControl(FMenu.Owner).ClientWidth+5{FForm.ClientWidth+5},
+ ARect.Bottom);
+ end
+ else
+ if FMenu.IsRightToLeft then
+ ACanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right+7, ARect.Bottom);
+ end;
+ //--
+ end
+ else
+ begin
+ if (Is16Bit and FUCXPSettings.Gradient) then
+ begin
+ inc(ARect.Right,2); //needed for RightToLeft
+ DrawGradient(ACanvas, ARect, FMenu.IsRightToLeft);
+ Dec(ARect.Right,2);
+
+ end
+ else
+ begin
+ ACanvas.brush.color := FFColor;
+ ACanvas.FillRect(FillRect); // +jt
+ ACanvas.brush.color := FFIconBackColor;
+ ACanvas.FillRect(IconRect);
+ end;
+
+
+ //------------
+ end;
+
+
+ if FMenuItem.Enabled then
+ ACanvas.Font.Color := FUCXPSettings.Font.Color
+ else
+ ACanvas.Font.Color := FUCXPSettings.DisabledColor;
+
+ DrawTopMenuBorder := false;
+ if Selected and FUCXPSettings.DrawSelect then
+ begin
+ ACanvas.brush.Style := bsSolid;
+ if FTopMenu then
+ begin
+ DrawTopMenuItem(FMenuItem, ACanvas, ARect, FUCXPSettings.MenuBarColor, FMenu.IsRightToLeft);
+ end
+ else
+ if FMenuItem.Enabled then
+ begin
+ Inc(ARect.Top, 1);
+ Dec(ARect.Bottom, 1);
+ if FUCXPSettings.FlatMenu then
+ Dec(ARect.Right, 1);
+ ACanvas.brush.color := FFSelectColor;
+ ACanvas.FillRect(ARect);
+ ACanvas.Pen.color := FFSelectBorderColor;
+ ACanvas.Brush.Style := bsClear;
+ ACanvas.RoundRect(Arect.Left, Arect.top, Arect.Right, Arect.Bottom, 0, 0);
+ Dec(ARect.Top, 1);
+ Inc(ARect.Bottom, 1);
+ if FUCXPSettings.FlatMenu then
+ Inc(ARect.Right, 1);
+ end;
+ DrawTopMenuBorder := true;
+ end
+
+ // Draw the menubar in XP Style when hovering over an main menu item
+ else
+ begin
+ //if FMenuItem.Enabled and FTopMenu and IsMouseInRect( TScrollingWinControl(FMenu.Owner), ARect) then
+ if FMenuItem.Enabled and FTopMenu and IsWNT and
+ IsMouseInRect( TScrollingWinControl(FMenu.Owner), origrect) then // +jt
+ begin
+ ACanvas.brush.Style := bsSolid;
+ ACanvas.brush.color := FFSelectColor;
+ DrawTopMenuBorder := true;
+ ACanvas.Pen.color := FFSelectBorderColor;
+ ACanvas.Rectangle(ARect.Left, ARect.Top, ARect.Right - 7, ARect.Bottom);
+ end;
+ end;
+
+
+ if (FMenuItem.Checked) or (FMenuItem.RadioItem ) then //x
+ DrawCheckedItem(FMenuItem, Selected, FMenuItem.Enabled, HasImgLstBitmap or HasBitmap,
+ ACanvas, CheckedRect);
+
+ if (B <> nil) and (B.Width > 0) then // X
+ DrawIcon(FMenuItem, ACanvas, B, IconRect,
+ Selected or DrawTopMenuBorder, False, FMenuItem.Enabled, FMenuItem.Checked,
+ FTopMenu, FMenu.IsRightToLeft);
+
+
+
+ if not IsLine then
+ begin
+
+ if FMenu.IsRightToLeft then
+ begin
+ TextFormat := DT_RIGHT + DT_RTLREADING;
+ Dec(TextRect.Right, 3);
+ end
+ else
+ begin
+ TextFormat := 0;
+ Inc(TextRect.Left, 3);
+ end;
+ TextRect.Top := TextRect.Top +
+ ((TextRect.Bottom - TextRect.Top) - ACanvas.TextHeight('W')) div 2;
+ FFontSettings := FUCXPSettings.Font;
+ DrawTheText(FMenuItem, txt, ShortCutToText(FMenuItem.ShortCut),
+ ACanvas, TextRect,
+ Selected, FMenuItem.Enabled, FMenuItem.Default,
+ FTopMenu, FMenu.IsRightToLeft, FFontSettings, TextFormat);
+ FUCXPSettings.Font := FFontSettings;
+ end
+ else
+ begin
+ if FMenu.IsRightToLeft then
+ begin
+ X1 := TextRect.Left;
+ X2 := TextRect.Right - 7;
+ end
+ else
+ begin
+ X1 := TextRect.Left + 7;
+ X2 := TextRect.Right;
+ end;
+
+ ACanvas.Pen.Color := FFSeparatorColor;
+ ACanvas.MoveTo(X1,
+ TextRect.Top +
+ Round((TextRect.Bottom - TextRect.Top) / 2));
+ ACanvas.LineTo(X2,
+ TextRect.Top +
+ Round((TextRect.Bottom - TextRect.Top) / 2))
+ end;
+
+ // +jt
+ BitBlt(origcanvas.Handle,origrect.Left,origrect.Top,buff.Width,buff.Height,ACanvas.Handle,0,0,SRCCOPY);
+ finally
+ B.free;
+ buff.free;
+ ACanvas := OrigCanvas;
+ ARect:=origrect;
+ end;
// +jt
+ if not (csDesigning in ComponentState) then
+ begin
+ if (FUCXPSettings.FlatMenu) and (not FTopMenu) then
+ begin
+ hDcM := ACanvas.Handle;
+ hWndM := WindowFromDC(hDcM);
+// +jt
+ if (hWndM=0) and (Application.Handle<>0) then
+ begin
+ if not PeekMessage(msg,Application.Handle,WM_DRAWMENUBORDER,WM_DRAWMENUBORDER2,PM_NOREMOVE) then
+ PostMessage(Application.Handle,WM_DRAWMENUBORDER,0,Integer(FMenuItem));
+ end
+ else
+ if hWndM <> FForm.Handle then
+ begin
+ if not PeekMessage(msg,Application.Handle,WM_DRAWMENUBORDER,WM_DRAWMENUBORDER2,PM_NOREMOVE) then
+ PostMessage(Application.Handle,WM_DRAWMENUBORDER2,integer(FMenu.IsRightToLeft),Integer(hWndM));
+ end;
+ end;
+ end;
+
+//-----
+
+end;
+
+{$IFDEF VER5U}
+procedure TUCXPStyle.ToolBarDrawButton(Sender: TToolBar;
+ Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
+
+var
+ ACanvas: TCanvas;
+
+ ARect, HoldRect: TRect;
+ B: TBitmap;
+ HasBitmap: boolean;
+ {Sylvain ...}
+ HasHotBitMap : Boolean;
+ HasDisBitMap : Boolean;
+ ImglstHand : THandle;
+ CanDraw : Boolean;
+ {... Sylvain}
+ BitmapWidth: integer;
+ TextFormat: integer;
+ XButton: TToolButton;
+ HasBorder: boolean;
+ HasBkg: boolean;
+ IsTransparent: boolean;
+ FBSelectColor: TColor;
+ FFontSettings: TFont; {fduenas}
+ procedure DrawBorder;
+ var
+ BRect, WRect: TRect;
+ procedure DrawRect;
+ begin
+ ACanvas.Pen.color := FFSelectBorderColor;
+ ACanvas.MoveTo(WRect.Left, WRect.Top);
+ ACanvas.LineTo(WRect.Right, WRect.Top);
+ ACanvas.LineTo(WRect.Right, WRect.Bottom);
+ ACanvas.LineTo(WRect.Left, WRect.Bottom);
+ ACanvas.LineTo(WRect.Left, WRect.Top);
+ end;
+
+ begin
+ BRect := HoldRect;
+ Dec(BRect.Bottom, 1);
+ Inc(BRect.Top, 1);
+ Dec(BRect.Right, 1);
+
+ WRect := BRect;
+ if Button.Style = tbsDropDown then
+ begin
+ Dec(WRect.Right, 13);
+ DrawRect;
+
+ WRect := BRect;
+ Inc(WRect.Left, WRect.Right - WRect.Left - 13);
+ DrawRect;
+ end
+ else
+ begin
+
+ DrawRect;
+ end;
+ end;
+
+begin
+
+ B := nil;
+
+ {Added By Sylvain ...}
+ HasHotBitmap := (Sender.HotImages <> nil) and
+ (Button.ImageIndex <> -1) and
+ (Button.ImageIndex <= Sender.HotImages.Count - 1);
+
+
+ HasDisBitmap := (Sender.DisabledImages <> nil) and
+ (Button.ImageIndex <> -1) and
+ (Button.ImageIndex <= Sender.DisabledImages.Count - 1);
+ {...Sylvain}
+
+ HasBitmap := (Sender.Images <> nil) and
+ (Button.ImageIndex <> -1) and
+ (Button.ImageIndex <= Sender.Images.Count - 1);
+
+
+ IsTransparent := Sender.Transparent;
+
+ ACanvas := Sender.Canvas;
+
+ //SetGlobalColor(ACanvas);
+ if (FUCXPSettings.ColorsChanged) then SetGlobalColor(ACanvas); // +jt
+
+ if (Is16Bit) and (not FUCXPSettings.UseSystemColors) then
+ FBSelectColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 68)
+ else
+ FBSelectColor := FFSelectColor;
+
+
+ HoldRect := Button.BoundsRect;
+
+ ARect := HoldRect;
+
+ if Is16Bit then
+ ACanvas.brush.color := NewColor(ACanvas, Sender.Color, 16)
+ else
+ ACanvas.brush.color := Sender.Color;
+
+ if not IsTransparent then
+ ACanvas.FillRect(ARect);
+
+ HasBorder := false;
+ HasBkg := false;
+
+ if (cdsHot in State) then
+ begin
+ if (cdsChecked in State) or (Button.Down) or (cdsSelected in State) then
+ ACanvas.Brush.Color := FCheckedAreaSelectColor
+ else
+ ACanvas.brush.color := FBSelectColor;
+ HasBorder := true;
+ HasBkg := true;
+ end;
+
+ if ((cdsChecked in State) and not (cdsHot in State)) then
+ begin
+ ACanvas.Brush.Color := FCheckedAreaColor;
+ HasBorder := true;
+ HasBkg := true;
+ end;
+
+ if (cdsIndeterminate in State) and not (cdsHot in State) then
+ begin
+ ACanvas.Brush.Color := FBSelectColor;
+ HasBkg := true;
+ end;
+
+
+ if (Button.MenuItem <> nil) and (State = []) then
+ begin
+ ACanvas.brush.color := Sender.Color;
+ if not IsTransparent then
+ HasBkg := true;
+ end;
+
+
+ Inc(ARect.Top, 1);
+
+
+
+ if HasBkg then
+ ACanvas.FillRect(ARect);
+
+ if HasBorder then
+ DrawBorder;
+
+
+ if ((Button.MenuItem <> nil) or (Button.DropdownMenu <> nil))
+ and (cdsSelected in State) then
+ begin
+ DrawTopMenuItem(Button, ACanvas, ARect, Sender.Color ,false);
+ DefaultDraw := false;
+ end;
+
+ ARect := HoldRect;
+ DefaultDraw := false;
+
+
+ if Button.Style = tbsDropDown then
+ begin
+ ACanvas.Pen.Color := clBlack;
+ DrawArrow(ACanvas, (ARect.Right - 14) + ((14 - 5) div 2),
+ ARect.Top + ((ARect.Bottom - ARect.Top - 3) div 2) + 1);
+ end;
+
+ BitmapWidth := 0;
+{ Rem by Sylvain ...
+ if HasBitmap then
+ begin
+... Sylvain}
+ try
+ B := TBitmap.Create;
+ CanDraw := False;
+ ImglstHand:=0;
+ if (cdsHot in State) AND HasHotBitmap then
+ begin
+ B.Width := Sender.HotImages.Width;
+ B.Height := Sender.HotImages.Height;
+ ImglstHand := Sender.HotImages.Handle;
+ CanDraw := True;
+ end
+ else if (cdsDisabled in State) and HasDisBitmap then
+ begin
+ B.Width := Sender.DisabledImages.Width;
+ B.Height := Sender.DisabledImages.Height;
+ ImglstHand := Sender.DisabledImages.Handle;
+ CanDraw := True;
+ end
+ else if HasBitMap then
+ begin
+ B.Width := Sender.Images.Width;
+ B.Height := Sender.Images.Height;
+ ImglstHand := Sender.Images.Handle;
+ CanDraw := True;
+ end;
+ if CanDraw then
+ begin {CanDraw}
+ // B.Canvas.Brush.Color := TransparentColor; // ACanvas.Brush.Color; // +jt
+ B.Canvas.Brush.Color := B.Canvas.Pixels[0, B.Height - 1];//"Todd Asher"
+ B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height));
+ ImageList_DrawEx(ImglstHand, Button.ImageIndex,
+ B.Canvas.Handle, 0, 0, 0, 0, clNone, clNone, ILD_Transparent);
+
+ BitmapWidth := b.Width;
+
+ if Button.Style = tbsDropDown then
+ Dec(ARect.Right, 12);
+
+
+ if TToolBar(Button.Parent).List then
+ begin
+
+ if Button.BiDiMode = bdRightToLeft then
+ begin
+ Dec(ARect.Right, 3);
+ ARect.Left := ARect.Right - BitmapWidth;
+
+ end
+ else
+ begin
+ Inc(ARect.Left, 3);
+ ARect.Right := ARect.Left + BitmapWidth
+ end
+
+
+ end
+ else
+ ARect.Left := Round(ARect.Left + (ARect.Right - ARect.Left - B.Width)/2);
+
+ inc(ARect.Top, 2);
+ ARect.Bottom := ARect.Top + B.Height + 6;
+
+ DrawIcon(Button, ACanvas, B, ARect, (cdsHot in State),
+ (cdsSelected in State), Button.Enabled, (cdsChecked in State), false,
+ false);
+
+ end; {CanDraw}
+ finally
+ B.Free;
+ end;
+ ARect := HoldRect;
+ DefaultDraw := false;
+{rem by sylvain ...
+ end;
+...Sylvain}
+//-----------
+
+ if Sender.ShowCaptions then
+ begin
+
+ if Button.Style = tbsDropDown then
+ Dec(ARect.Right, 12);
+
+
+ if not TToolBar(Button.Parent).List then
+ begin
+ TextFormat := DT_Center;
+
+ ARect.Top := ARect.Bottom - ACanvas.TextHeight(Button.Caption) - 6;
+ end
+ else
+ begin
+ TextFormat := DT_VCENTER;
+ if Button.BiDiMode = bdRightToLeft then
+ begin
+ TextFormat := TextFormat + DT_Right;
+ Dec(ARect.Right, BitmapWidth + 7);
+ end
+ else
+ begin
+ if BitmapWidth > 0 then //"Dan Downs"
+ if Sender.List then //Michaël Moreno
+ Inc(ARect.Left, BitmapWidth + 6)
+ else
+ Inc(ARect.Left, BitmapWidth);
+ end
+
+ end;
+
+ if (Button.MenuItem <> nil) then
+ begin
+ TextFormat := DT_Center;
+ //Inc(ARect.Left, 1);
+ end;
+
+ if Button.BiDiMode = bdRightToLeft then
+ TextFormat := TextFormat + DT_RTLREADING;
+
+ if Button.Down and not Button.Enabled then //"felix" 23/5
+ InflateRect(ARect, -1, -1);
+
+ {alexs alexs75@hotbox.ru}
+ ARect.Top := ARect.Top + ((ARect.Bottom - ARect.Top) - ACanvas.TextHeight('W')) div 2;
+ FFontSettings := FUCXPSettings.Font;
+ DrawTheText(Button, Button.Caption, '',
+ ACanvas, ARect,
+ (cdsSelected in State), Button.Enabled, false,
+ (Button.MenuItem <> nil),
+ (Button.BidiMode = bdRightToLeft), FFontSettings, TextFormat);
+ FUCXPSettings.Font := FFontSettings;
+ ARect := HoldRect;
+ DefaultDraw := false;
+ end;
+
+
+ if Button.Index > 0 then
+ begin
+ XButton := {TToolBar(Button.Parent)}Sender.Buttons[Button.Index - 1];
+ if (XButton.Style = tbsDivider) or (XButton.Style = tbsSeparator) then
+ begin
+ ARect := XButton.BoundsRect;
+ if Is16Bit then
+ ACanvas.brush.color := NewColor(ACanvas, Sender.Color, 16)
+ else
+ ACanvas.brush.color := Sender.Color;
+
+ if not IsTransparent then
+ ACanvas.FillRect(ARect);
+ // if (XButton.Style = tbsDivider) then // Can't get it.
+ if XButton.Tag > 0 then
+ begin
+ Inc(ARect.Top, 2);
+ Dec(ARect.Bottom, 1);
+
+ ACanvas.Pen.color := GetShadeColor(ACanvas,Sender.Color,30);
+ ARect.Left := ARect.Left + (ARect.Right - ARect.Left) div 2;
+ ACanvas.MoveTo(ARect.Left, ARect.Top);
+ ACanvas.LineTo(ARect.Left, ARect.Bottom);
+
+ end;
+ ARect := Button.BoundsRect;
+ DefaultDraw := false;
+ end;
+
+ end;
+
+ {if Button.MenuItem <> nil then
+ if (xcMainMenu in UCXPControls) then
+ ActivateMenuItem(Button.MenuItem);}
+end;
+{$ENDIF}
+
+// Controlbar Paint. Added by Michiel van Oudheusden (27 sep 2001)
+// Paints the bands of a controlbar like the office XP style
+procedure TUCXPStyle.ControlBarPaint(Sender: TObject; Control: TControl;
+ Canvas: TCanvas; var ARect: TRect; var Options: TBandPaintOptions);
+var
+ i: Integer;
+ intInc: integer;
+begin
+
+ if(FUCXPSettings.ColorsChanged) then SetGlobalColor(Canvas); // +jt
+ // No frame and grabber drawing. We do it ourselfes
+ Options := [];
+
+ // First background
+
+ if Is16Bit then
+ Canvas.brush.color := NewColor(Canvas, TControlBar(Sender).Color , 6)
+ else
+ Canvas.brush.color := TControlBar(Sender).Color;
+
+ Canvas.FillRect(ARect);
+
+ intInc := 30;
+ for i := (ARect.Top + 5) to (ARect.Bottom - 5)do
+ begin
+ Canvas.Pen.Color := GetShadeColor(Canvas, TControlBar(Sender).Color, intInc);
+ if i mod 2 = 0 then
+ begin
+ Canvas.MoveTo(ARect.Left + 3, i);
+ Canvas.LineTo(ARect.Left + 6, i);
+ Inc(intInc, 7);
+ end;
+ end;
+
+end;
+
+procedure TUCXPStyle.SetGlobalColor(ACanvas: TCanvas);
+begin
+//-----
+ FUCXPSettings.ColorsChanged:=false; // +jt
+
+ if GetDeviceCaps(ACanvas.Handle, BITSPIXEL) < 16 then
+ Is16Bit := false
+ else
+ Is16Bit := true;
+
+
+ FDimParentColor := 16;
+ FDimParentColorSelect := 40;
+
+ FFColor := FUCXPSettings.Color;
+ FFIconBackColor := FUCXPSettings.IconBackColor;
+
+ if Is16Bit then
+ begin
+ if FUCXPSettings.UseDimColor then
+ begin
+ FFSelectColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 68);
+ FCheckedAreaColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 80);
+ FCheckedAreaSelectColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 50);
+ end
+ else
+ begin
+ FFSelectColor := FUCXPSettings.SelectColor;
+ FCheckedAreaColor := FUCXPSettings.SelectColor;
+ FCheckedAreaSelectColor := FUCXPSettings.SelectColor;
+ end;
+
+ FMenuBorderColor := GetShadeColor(ACanvas, clBtnFace, 90);
+ FMenuShadowColor := GetShadeColor(ACanvas, clBtnFace, 76);
+ end
+ else
+ begin
+ FFSelectColor := FUCXPSettings.SelectColor;
+ FCheckedAreaColor := clWhite;
+ FCheckedAreaSelectColor := clSilver;
+ FMenuBorderColor := clBtnShadow;
+ FMenuShadowColor := clBtnShadow;
+ end;
+
+ FFSelectBorderColor := FUCXPSettings.SelectBorderColor;
+ FFSelectFontColor := FUCXPSettings.SelectFontColor;
+ FFMenuBarColor := FUCXPSettings.MenuBarColor;
+ FFDisabledColor := FUCXPSettings.DisabledColor;
+ FFCheckedColor := FUCXPSettings.CheckedColor;
+ FFSeparatorColor := FUCXPSettings.SeparatorColor;
+
+
+
+ if FUCXPSettings.UseSystemColors then
+ begin
+// GetSystemMenuFont(FUCXPSettings.Font);
+ FFSelectFontColor := FUCXPSettings.Font.Color;
+ if not Is16Bit then
+ begin
+ FFColor := clWhite;
+ FFIconBackColor := clBtnFace;
+ FFSelectColor := clWhite;
+ FFSelectBorderColor := clHighlight;
+ FFMenuBarColor := FFIconBackColor;
+ FFDisabledColor := clBtnShadow;
+ FFCheckedColor := clHighlight;
+ FFSeparatorColor := clBtnShadow;
+ FCheckedAreaColor := clWhite;
+ FCheckedAreaSelectColor := clWhite;
+
+ end
+ else
+ begin
+ FFColor := NewColor(ACanvas, clBtnFace, 86);
+ FFIconBackColor := NewColor(ACanvas, clBtnFace, 16);
+ FFSelectColor := NewColor(ACanvas, clHighlight, 68);
+ FFSelectBorderColor := clHighlight;
+ FFMenuBarColor := clBtnFace;
+
+ FFDisabledColor := NewColor(ACanvas, clBtnShadow, 10);
+ FFSeparatorColor := NewColor(ACanvas, clBtnShadow, 25);
+ FFCheckedColor := clHighlight;
+ FCheckedAreaColor := NewColor(ACanvas, clHighlight, 80);
+ FCheckedAreaSelectColor := NewColor(ACanvas, clHighlight, 50);
+
+ end;
+ end;
+
+end;
+
+procedure TUCXPStyle.DrawTopMenuItem(Sender: TObject; ACanvas: TCanvas;
+ ARect: TRect; BckColor:Tcolor; IsRightToLeft: boolean);
+var
+ X1, X2: integer;
+ DefColor, HoldColor: TColor;
+begin
+ X1 := ARect.Left;
+ X2 := ARect.Right;
+
+
+ ACanvas.brush.Style := bsSolid;
+ ACanvas.brush.color := FFSelectColor;
+
+ ACanvas.FillRect(ARect);
+ ACanvas.Pen.Color := FFSelectBorderColor;
+
+ if (not IsRightToLeft) and (Is16Bit) and (Sender is TMenuItem) then
+ begin
+ ACanvas.MoveTo(X1, ARect.Bottom - 1);
+ ACanvas.LineTo(X1, ARect.Top);
+ ACanvas.LineTo(X2 - 8, ARect.Top);
+ ACanvas.LineTo(X2 - 8, ARect.Bottom);
+// ACanvas.LineTo(X1, ARect.Bottom);
+
+ DefColor := FFMenuBarColor;
+
+
+ HoldColor := GetShadeColor(ACanvas, DefColor, 10);
+ ACanvas.Brush.Style := bsSolid;
+ ACanvas.Brush.Color := HoldColor;
+ ACanvas.Pen.Color := HoldColor;
+
+ ACanvas.FillRect(Rect(X2 - 7, ARect.Top, X2, ARect.Bottom));
+
+ HoldColor := GetShadeColor(ACanvas, DefColor, 30);
+ ACanvas.Brush.Color := HoldColor;
+ ACanvas.Pen.Color := HoldColor;
+ ACanvas.FillRect(Rect(X2 - 7, ARect.Top + 3, X2 - 2, ARect.Bottom));
+
+ HoldColor := GetShadeColor(ACanvas, DefColor, 40 + 20);
+ ACanvas.Brush.Color := HoldColor;
+ ACanvas.Pen.Color := HoldColor;
+ ACanvas.FillRect(Rect(X2 - 7, ARect.Top + 5, X2 - 3, ARect.Bottom));
+
+ HoldColor := GetShadeColor(ACanvas, DefColor, 60 + 40);
+ ACanvas.Brush.Color := HoldColor;
+ ACanvas.Pen.Color := HoldColor;
+ ACanvas.FillRect(Rect(X2 - 7, ARect.Top + 6, X2 - 5, ARect.Bottom));
+
+ //---
+
+ ACanvas.Pen.Color := DefColor;
+ ACanvas.MoveTo(X2 - 5, ARect.Top + 1);
+ ACanvas.LineTo(X2 - 1, ARect.Top + 1);
+ ACanvas.LineTo(X2 - 1, ARect.Top + 6);
+
+ ACanvas.MoveTo(X2 - 3, ARect.Top + 2);
+ ACanvas.LineTo(X2 - 2, ARect.Top + 2);
+ ACanvas.LineTo(X2 - 2, ARect.Top + 3);
+ ACanvas.LineTo(X2 - 3, ARect.Top + 3);
+
+
+
+ ACanvas.Pen.Color := GetShadeColor(ACanvas, DefColor, 10);
+ ACanvas.MoveTo(X2 - 6, ARect.Top + 3);
+ ACanvas.LineTo(X2 - 3, ARect.Top + 3);
+ ACanvas.LineTo(X2 - 3, ARect.Top + 6);
+ ACanvas.LineTo(X2 - 4, ARect.Top + 6);
+ ACanvas.LineTo(X2 - 4, ARect.Top + 3);
+
+ ACanvas.Pen.Color := GetShadeColor(ACanvas, DefColor, 30);
+ ACanvas.MoveTo(X2 - 5, ARect.Top + 5);
+ ACanvas.LineTo(X2 - 4, ARect.Top + 5);
+ ACanvas.LineTo(X2 - 4, ARect.Top + 9);
+
+ ACanvas.Pen.Color := GetShadeColor(ACanvas, DefColor, 40);
+ ACanvas.MoveTo(X2 - 6, ARect.Top + 5);
+ ACanvas.LineTo(X2 - 6, ARect.Top + 7);
+
+ end
+ else
+ begin
+
+ ACanvas.Pen.Color := FFSelectBorderColor;
+ ACanvas.Brush.Color := GetShadeColor(ACanvas, BckColor, 70);
+
+ ACanvas.MoveTo(X1, ARect.Bottom - 1);
+ ACanvas.LineTo(X1, ARect.Top);
+ ACanvas.LineTo(X2 - 3, ARect.Top);
+ ACanvas.LineTo(X2 - 3, ARect.Bottom);
+
+
+ ACanvas.Pen.Color := ACanvas.Brush.Color;
+ ACanvas.FillRect(Rect(X2 - 2, ARect.Top + 2, X2, ARect.Bottom));
+
+ ACanvas.Brush.Color := BckColor;
+ ACanvas.FillRect(Rect(X2 - 2, ARect.Top , X2, ARect.Top + 2));
+
+
+ end;
+
+end;
+
+
+procedure TUCXPStyle.DrawCheckedItem(FMenuItem: TMenuItem; Selected, Enabled,
+ HasImgLstBitmap: boolean; ACanvas: TCanvas; CheckedRect: TRect);
+var
+ X1, X2: integer;
+begin
+ if FMenuItem.RadioItem then
+ begin
+ if FMenuItem.Checked then
+ begin
+ if Enabled then
+ begin
+ ACanvas.Pen.color := FFSelectBorderColor;
+ if selected then
+ ACanvas.Brush.Color := FCheckedAreaSelectColor
+ else
+ ACanvas.Brush.Color := FCheckedAreaColor;
+ end
+ else
+ ACanvas.Pen.color := FFDisabledColor;
+
+ ACanvas.Brush.Style := bsSolid;
+ if HasImgLstBitmap then
+ begin
+ ACanvas.RoundRect(CheckedRect.Left, CheckedRect.Top,
+ CheckedRect.Right, CheckedRect.Bottom,
+ 6, 6);
+ end
+ else
+ begin
+ ACanvas.Ellipse(CheckedRect.Left, CheckedRect.Top,
+ CheckedRect.Right, CheckedRect.Bottom);
+// +jt
+ InflateRect(CheckedRect, -2, -2);
+ ACanvas.Brush.color := ACanvas.Pen.Color;
+ ACanvas.Ellipse(CheckedRect.Left, CheckedRect.Top,
+ CheckedRect.Right, CheckedRect.Bottom);
// +jt
+ end;
+ end;
+ end
+ else
+ begin
+ if (FMenuItem.Checked) then
+ if (not HasImgLstBitmap) then
+ begin
+ if Enabled then
+ begin
+ ACanvas.Pen.color := FFCheckedColor;
+ if selected then
+ ACanvas.Brush.Color := FCheckedAreaSelectColor
+ else
+ ACanvas.Brush.Color := FCheckedAreaColor; ;
+ end
+ else
+ ACanvas.Pen.color := FFDisabledColor;
+
+ ACanvas.Brush.Style := bsSolid;
+ ACanvas.Rectangle(CheckedRect.Left, CheckedRect.Top,
+ CheckedRect.Right, CheckedRect.Bottom);
+ if Enabled then
+ ACanvas.Pen.color := clBlack
+ else
+ ACanvas.Pen.color := FFDisabledColor;
+ x1 := CheckedRect.Left + 1;
+ x2 := CheckedRect.Top + 5;
+ ACanvas.MoveTo(x1, x2);
+
+ x1 := CheckedRect.Left + 4;
+ x2 := CheckedRect.Bottom - 2;
+ ACanvas.LineTo(x1, x2);
+ //--
+ x1 := CheckedRect.Left + 2;
+ x2 := CheckedRect.Top + 5;
+ ACanvas.MoveTo(x1, x2);
+
+ x1 := CheckedRect.Left + 4;
+ x2 := CheckedRect.Bottom - 3;
+ ACanvas.LineTo(x1, x2);
+ //--
+ x1 := CheckedRect.Left + 2;
+ x2 := CheckedRect.Top + 4;
+ ACanvas.MoveTo(x1, x2);
+
+ x1 := CheckedRect.Left + 5;
+ x2 := CheckedRect.Bottom - 3;
+ ACanvas.LineTo(x1, x2);
+ //-----------------
+
+ x1 := CheckedRect.Left + 4;
+ x2 := CheckedRect.Bottom - 3;
+ ACanvas.MoveTo(x1, x2);
+
+ x1 := CheckedRect.Right + 2;
+ x2 := CheckedRect.Top - 1;
+ ACanvas.LineTo(x1, x2);
+ //--
+ x1 := CheckedRect.Left + 4;
+ x2 := CheckedRect.Bottom - 2;
+ ACanvas.MoveTo(x1, x2);
+
+ x1 := CheckedRect.Right - 2;
+ x2 := CheckedRect.Top + 3;
+ ACanvas.LineTo(x1, x2);
+
+ end
+ else
+ begin
+
+
+ if Enabled then
+ begin
+ ACanvas.Pen.color := FFSelectBorderColor;
+ if selected then
+ ACanvas.Brush.Color := FCheckedAreaSelectColor
+ else
+ ACanvas.Brush.Color := FCheckedAreaColor; ;
+ end
+ else
+ ACanvas.Pen.color := FFDisabledColor;
+
+ ACanvas.Brush.Style := bsSolid;
+ ACanvas.Rectangle(CheckedRect.Left, CheckedRect.Top,
+ CheckedRect.Right, CheckedRect.Bottom);
+ end;
+ end;
+
+end;
+
+procedure TUCXPStyle.DrawTheText(Sender: TObject; txt, ShortCuttext: string;
+ ACanvas: TCanvas; TextRect: TRect;
+ Selected, Enabled, Default, TopMenu, IsRightToLeft: boolean;
+ var TxtFont: TFont; TextFormat: integer);
+var
+ DefColor: TColor;
+ B: TBitmap;
+ BRect: TRect;
+begin
+ TextFormat := TextFormat + DT_EXPANDTABS;
+ DefColor := TxtFont.Color;
+
+ ACanvas.Font.Assign (TxtFont);
+
+ if Selected then
+ DefColor := FFSelectFontColor;
+
+ If not Enabled then
+ begin
+ DefColor := FFDisabledColor;
+
+ if (Sender is TToolButton) then
+ begin
+ TextRect.Top := TextRect.Top +
+ ((TextRect.Bottom - TextRect.Top) - ACanvas.TextHeight('W')) div 2;
+ B := TBitmap.Create;
+ try
+ B.Width := TextRect.Right - TextRect.Left;
+ B.Height := TextRect.Bottom - TextRect.Top;
+ BRect := Rect(0,0,B.Width, B.Height);
+
+
+ B.Canvas.Brush.Color := ACanvas.Brush.Color;
+ B.Canvas.FillRect (BRect);
+ // B.Canvas.Font := FUCXPSettings.Font; //felix added for resolving font problems in Win98
+ //27.08
+ B.Canvas.Font.color := DefColor;
+
+ DrawtextEx(B.Canvas.Handle,
+ PChar(txt),
+ Length(txt),
+ BRect, TextFormat + DT_VCENTER, nil);
+ ACanvas.CopyRect(TextRect, B.Canvas, BRect);
+ finally
+ B.Free;
+ end;
+ exit;
+ end;
+
+ end;
+
+ if (TopMenu and Selected) then
+ if FUCXPSettings.UseSystemColors then
+ DefColor := TopMenuFontColor(ACanvas, FFIconBackColor);
+
+ ACanvas.Font.color := DefColor; // will not affect Buttons
+
+ SetBkMode(ACanvas.Handle, TRANSPARENT);
+
+
+ if Default and Enabled then
+ begin
+
+ Inc(TextRect.Left, 1);
+ ACanvas.Font.color := GetShadeColor(ACanvas,
+ ACanvas.Pixels[TextRect.Left, TextRect.Top], 30);
+ DrawtextEx(ACanvas.Handle,
+ PChar(txt),
+ Length(txt),
+ TextRect, TextFormat, nil);
+ Dec(TextRect.Left, 1);
+
+
+ Inc(TextRect.Top, 2);
+ Inc(TextRect.Left, 1);
+ Inc(TextRect.Right, 1);
+
+
+ ACanvas.Font.color := GetShadeColor(ACanvas,
+ ACanvas.Pixels[TextRect.Left, TextRect.Top], 30);
+ DrawtextEx(ACanvas.Handle,
+ PChar(txt),
+ Length(txt),
+ TextRect, TextFormat, nil);
+
+
+ Dec(TextRect.Top, 1);
+ Dec(TextRect.Left, 1);
+ Dec(TextRect.Right, 1);
+
+ ACanvas.Font.color := GetShadeColor(ACanvas,
+ ACanvas.Pixels[TextRect.Left, TextRect.Top], 40);
+ DrawtextEx(ACanvas.Handle,
+ PChar(txt),
+ Length(txt),
+ TextRect, TextFormat, nil);
+
+
+ Inc(TextRect.Left, 1);
+ Inc(TextRect.Right, 1);
+
+ ACanvas.Font.color := GetShadeColor(ACanvas,
+ ACanvas.Pixels[TextRect.Left, TextRect.Top], 60);
+ DrawtextEx(ACanvas.Handle,
+ PChar(txt),
+ Length(txt),
+ TextRect, TextFormat, nil);
+
+ Dec(TextRect.Left, 1);
+ Dec(TextRect.Right, 1);
+ Dec(TextRect.Top, 1);
+
+ ACanvas.Font.color := DefColor;
+ end;
+
+ DrawtextEx(ACanvas.Handle,
+ PChar(txt),
+ Length(txt),
+ TextRect, TextFormat, nil);
+
+
+ txt := ShortCutText + ' ';
+ {
+ if not Is16Bit then
+ ACanvas.Font.color := DefColor
+ else
+ ACanvas.Font.color := GetShadeColor(ACanvas, DefColor, -40);
+ }
+
+
+ if IsRightToLeft then
+ begin
+ Inc(TextRect.Left, 10);
+ TextFormat := DT_LEFT
+ end
+ else
+ begin
+ Dec(TextRect.Right, 10);
+ TextFormat := DT_RIGHT;
+ end;
+
+
+ DrawtextEx(ACanvas.Handle,
+ PChar(txt),
+ Length(txt),
+ TextRect, TextFormat, nil);
+
+end;
+
+procedure TUCXPStyle.DrawIcon(Sender: TObject; ACanvas: TCanvas; B: TBitmap;
+ IconRect: Trect; Hot, Selected, Enabled, Checked, FTopMenu,
+ IsRightToLeft: boolean);
+var
+ DefColor: TColor;
+ X, Y: integer;
+begin
+
+ if (B <> nil) and (B.Width > 0) then
+ begin
+ X := IconRect.Left;
+ Y := IconRect.Top + 1;
+
+ if (Sender is TMenuItem) then
+ begin
+ inc(Y, 2);
+ if FUCXPSettings.IconWidth > B.Width then
+ X := X + ((FUCXPSettings.IconWidth - B.Width) div 2) - 1
+ else
+ begin
+ if IsRightToLeft then
+ X := IconRect.Right - b.Width - 2
+ else
+ X := IconRect.Left + 2;
+ end;
+ end;
+
+ if FTopMenu then
+ begin
+ if IsRightToLeft then
+ X := IconRect.Right - b.Width - 5
+ else
+ X := IconRect.Left + 1;
+ end;
+
+ if (Hot) and (FTopMenu) and (Enabled) then
+ if not Selected then
+ begin
+ dec(X, 1);
+ dec(Y, 2);
+ end;
+
+ if (Hot) and (not FTopMenu) and (Enabled) and (not Checked) then
+ if not Selected then
+ begin
+ dec(X, 1);
+ dec(Y, 1);
+ end;
+
+ if (not Hot) and (Enabled) and (not Checked) then
+ if Is16Bit then
+ DimBitmap(B, FUCXPSettings.DimLevel{30});
+
+
+ if not Enabled then
+ begin
+ GrayBitmap(B, FUCXPSettings.GrayLevel );
+ DimBitmap(B, 40);
+ end;
+
+ if (Hot) and (Enabled) and (not Checked) then
+ begin
+ if (Is16Bit) and (not FUCXPSettings.UseSystemColors) and (Sender is TToolButton) then
+ DefColor := NewColor(ACanvas, FUCXPSettings.SelectColor, 68)
+ else
+ DefColor := FFSelectColor;
+
+ DefColor := GetShadeColor(ACanvas, DefColor, 50);
+ DrawBitmapShadow(B, ACanvas, X + 2, Y + 2, DefColor);
+ end;
+
+ B.Transparent := true;
+ ACanvas.Draw(X, Y, B);
+ end;
+
+end;
+
+
+function TUCXPStyle.TopMenuFontColor(ACanvas: TCanvas; Color: TColor): TColor;
+var
+ r, g, b, avg: integer;
+begin
+
+ Color := ColorToRGB(Color);
+ r := Color and $000000FF;
+ g := (Color and $0000FF00) shr 8;
+ b := (Color and $00FF0000) shr 16;
+
+ Avg := (r + b) div 2;
+
+ if (Avg > 150) or (g > 200) then
+ Result := FUCXPSettings.Font.Color
+ else
+ Result := NewColor(ACanvas, Color, 90);
+
+end;
+
+procedure TUCXPStyle.SetDisableSubclassing(const Value: boolean);
+begin
+ if Value = FDisableSubclassing then Exit;
+ FDisableSubClassing := Value;
+ if UCXPStyleManager.ActiveXPStyle = Self then
+ UCXPStyleManager.UpdateActiveXPStyle(Self)
+ else
+ if (UCXPStyleManager.ActiveXPStyle = nil) and not(FDisableSubclassing) then
+ UCXPStyleManager.UpdateActiveXPStyle(nil);
+end;
+
+
+procedure TUCXPStyle.SetActive(const Value: boolean);
+begin
+ //if Value = FActive then exit;
+
+ FActive := Value;
+ if FActive then
+ InitItems(FForm, true, true)
+ else
+ InitItems(FForm, false, true);
+
+ if FForm.Handle <> 0 then
+ Windows.DrawMenuBar(FForm.Handle);
+end;
+
+procedure TUCXPStyle.SetForm(const Value: TScrollingWinControl);
+var
+ Hold: boolean;
+begin
+ if Value <> FForm then
+ begin
+ Hold := Active;
+ Active := false;
+ FForm := Value;
+ if Hold then
+ Active := True;
+ end;
+end;
+
+{moved to UCXPSettings
+
+procedure TUCXPStyle.SetFont(const Value: TFont);
+begin
+ FFont.Assign(Value);
+ Windows.DrawMenuBar(FForm.Handle);
+
+end;
+
+procedure TUCXPStyle.SetColor(const Value: TColor);
+begin
+ FColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetIconBackColor(const Value: TColor);
+begin
+ FIconBackColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetMenuBarColor(const Value: TColor);
+begin
+ FMenuBarColor := Value;
+ FColorsChanged := true; // +jt
+ Windows.DrawMenuBar(FForm.Handle);
+end;
+
+procedure TUCXPStyle.SetCheckedColor(const Value: TColor);
+begin
+ FCheckedColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetSeparatorColor(const Value: TColor);
+begin
+ FSeparatorColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetSelectBorderColor(const Value: TColor);
+begin
+ FSelectBorderColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetSelectColor(const Value: TColor);
+begin
+ FSelectColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetDisabledColor(const Value: TColor);
+begin
+ FDisabledColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetSelectFontColor(const Value: TColor);
+begin
+ FSelectFontColor := Value;
+ FColorsChanged := true; // +jt
+end;
+
+procedure TUCXPStyle.SetIconWidth(const Value: integer);
+begin
+ FIconWidth := Value;
+end;
+
+procedure TUCXPStyle.SetDrawSelect(const Value: boolean);
+begin
+ FDrawSelect := Value;
+end;
+
+
+
+procedure TUCXPStyle.SetOverrideOwnerDraw(const Value: boolean);
+begin
+ FOverrideOwnerDraw := Value;
+ if FActive then
+ Active := True;
+end;
+
+
+procedure TUCXPStyle.SetUseSystemColors(const Value: boolean);
+begin
+ FUseSystemColors := Value;
+ Windows.DrawMenuBar(FForm.Handle);
+end;
+
+procedure TUCXPStyle.SetGradient(const Value: boolean);
+begin
+ FGradient := Value;
+end;
+
+procedure TUCXPStyle.SetFlatMenu(const Value: boolean);
+begin
+ FFlatMenu := Value;
+end;
+
+procedure TUCXPStyle.SetUCXPContainers(const Value: TUCXPContainers);
+begin
+ if Value <> FXPContainers then
+ begin
+ if FActive then
+ begin
+ FActive := false;
+ InitItems(FForm, false, true);
+ FActive := true;
+ FXPContainers := Value;
+ InitItems(FForm, true, true);
+ end;
+ end;
+ FXPContainers := Value;
+
+end;
+
+procedure TUCXPStyle.SetUCXPControls(const Value: TUCXPControls);
+begin
+ if Value <> FXPControls then
+ begin
+ if FActive then
+ begin
+ FActive := false;
+ InitItems(FForm, false, true);
+ FActive := true;
+ FXPControls := Value;
+ InitItems(FForm, true, true);
+ end;
+ end;
+ FXPControls := Value;
+
+end;
+
+procedure TUCXPStyle.SetDrawMenuBar(const Value: boolean);
+begin
+ FDrawMenuBar := Value;
+end;
+
+procedure TUCXPStyle.SetUseDimColor(const Value: boolean);
+begin
+ FUseDimColor := Value;
+end;
+}{END moved to UCXPSettings}
+
+procedure GetSystemMenuFont(Font: TFont);
+var
+ FNonCLientMetrics: TNonCLientMetrics;
+begin
+ FNonCLientMetrics.cbSize := Sizeof(TNonCLientMetrics);
+ if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @FNonCLientMetrics,0) then
+ begin
+ Font.Handle := CreateFontIndirect(FNonCLientMetrics.lfMenuFont);
+ Font.Color := clMenuText;
+ end;
+end;
+
+procedure TUCXPStyle.SetUCSettings(const Value: TUCSettings);
+begin
+ FUCSettings := Value;
+ if Value <> nil then Value.FreeNotification(self); //changed by fduenas
+end;
+
+procedure TUCXPStyle.DrawGradient(ACanvas: TCanvas; ARect: TRect;
+ IsRightToLeft: boolean);
+var
+ i: integer;
+ v: integer;
+ FRect: TRect;
+begin
+
+ fRect := ARect;
+ V := 0;
+ if IsRightToLeft then
+ begin
+ fRect.Left := fRect.Right - 1;
+ for i := ARect.Right Downto ARect.Left do
+ begin
+ if (fRect.Left < ARect.Right)
+ and (fRect.Left > ARect.Right - FUCXPSettings.IconWidth + 5) then
+ inc(v, 3)
+ else
+ inc(v, 1);
+
+ if v > 96 then v := 96;
+ ACanvas.Brush.Color := NewColor(ACanvas, FFIconBackColor, v);
+ ACanvas.FillRect(fRect);
+
+ fRect.Left := fRect.Left - 1;
+ fRect.Right := fRect.Left - 1;
+ end;
+ end
+ else
+ begin
+ fRect.Right := fRect.Left + 1;
+ for i := ARect.Left to ARect.Right do
+ begin
+ if (fRect.Left > ARect.Left)
+ and (fRect.Left < ARect.Left + FUCXPSettings.IconWidth + 5) then
+ inc(v, 3)
+ else
+ inc(v, 1);
+
+ if v > 96 then v := 96;
+ ACanvas.Brush.Color := NewColor(ACanvas, FFIconBackColor, v);
+ ACanvas.FillRect(fRect);
+
+ fRect.Left := fRect.Left + 1;
+ fRect.Right := fRect.Left + 1;
+ end;
+ end;
+end;
+
+function MenuWindowProc(hwnd: HWND; uMsg: integer; WParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
+var
+ oldproc: integer;
+ r: TRect;
+ pt: TPoint;
begin
+ if(uMsg=WM_ERASEBKGND) then
+ begin
+ Result:=1;
+ exit;
+end;
+ if((uMsg=WM_SHOWWINDOW) and (not Boolean(WParam))) or (uMsg=WM_CLOSE) or (uMsg=WM_DESTROY) then
+ begin
+ SetWindowRgn(hwnd, 0,false);
+ oldproc:=GetWindowLong(hWnd,GWL_USERDATA);
+ SetWindowLong(hWnd,GWL_WNDPROC,oldproc);
+ SetWindowLong(hWnd,GWL_USERDATA,0);
+ Result:=CallWindowProc(Pointer(oldproc), hwnd, uMsg, wParam, lParam);
+ GetWindowRect(hWnd, r);
+ pt.x:=r.Right+2;
+ pt.y:=r.Top+2;
+ hWnd :=WindowFromPoint(pt);
+ if GetWindowLong(hWnd,GWL_WNDPROC)<>integer(@MenuWindowProc) then
+ begin
+ pt.x:=r.Right+2;
+ pt.y:=r.Bottom-2;
+ hWnd :=WindowFromPoint(pt);
+ if GetWindowLong(hWnd,GWL_WNDPROC)<>integer(@MenuWindowProc) then exit;
+ end;
+ InvalidateRect(hwnd,nil,false);
+ end
+ else Result:=CallWindowProc(Pointer(GetWindowLong(hWnd,GWL_USERDATA)), hwnd, uMsg, wParam, lParam);
end;
+procedure TUCXPStyle.DrawWindowBorder(hWnd: HWND; IsRightToLeft: boolean);
+var
+ WRect: TRect;
+ dCanvas: TCanvas;
+ wDC: HDC; // +jt
+
+ regiontype: integer; // +jt
+ r1,r2,wr,region: HRGN; // +jt
+ rgnr: TRect; // +jt
+begin
+
+
+ if (hWnd <= 0) or (FSettingWindowRng) then
+ begin
+ exit;
+ end;
+// +jt
+ wDC := GetWindowDC(hWnd); //GetDesktopWindow
+ if wDC=0 then exit;
// +jt
+ FSettingWindowRng :=true; // +jt
+ dCanvas := TCanvas.Create;
+ try
+ dCanvas.Handle := wDC; // +jt
+ GetWindowRect(hWnd, WRect);
+ // +jt
+ WRect.Right := WRect.Right-WRect.Left;
+ WRect.Bottom := WRect.Bottom-WRect.Top;
+ WRect.Top:=0;
+ WRect.Left:=0;
+ if GetWindowLong(hWnd,GWL_WNDPROC)<>integer(@MenuWindowProc) then
+ begin
+ SetWindowLong(hWnd,GWL_USERDATA,GetWindowLong(hWnd,GWL_WNDPROC));
+ SetWindowLong(hWnd,GWL_WNDPROC,integer(@MenuWindowProc));
+ end;
+ if not IsWXP then
+ begin
+ wr:= CreateRectRgn(0,0,0,0);
+ regiontype := GetWindowRgn(hWnd, wr);
+ GetRgnBox(wr,rgnr);
+ DeleteObject(wr);
+ if (regionType = ERROR) or (abs(rgnr.Right-WRect.Right)>5) or (abs(rgnr.Bottom-WRect.Bottom)>5) then
+ begin
+ region:= CreateRectRgn(0,0,0,0);
+ r1:=CreateRectRgn(WRect.Left,WRect.Top,WRect.Right-2,WRect.Bottom-2);
+ r2:=CreateRectRgn(WRect.Left+2,WRect.Top+2,WRect.Right,WRect.Bottom);
+ CombineRgn(region,r1,r2,RGN_OR);
+ DeleteObject(r1);
+ DeleteObject(r2);
+ SetWindowRgn(hWnd,region,true);
+ end;
+ // +jt
+ Dec(WRect.Right, 2);
+ Dec(WRect.Bottom, 2);
+ end; // +jt
+ dCanvas.Brush.Style := bsClear;
+ dCanvas.Pen.Color := FMenuBorderColor;
+ dCanvas.Rectangle(WRect.Left, WRect.Top, WRect.Right, WRect.Bottom);
+ if IsRightToLeft then
+ begin
+ dCanvas.Pen.Color := FFIconBackColor;
+ dCanvas.MoveTo(WRect.Right - 3, WRect.Top + 2);
+ dCanvas.LineTo(WRect.Right - 2, WRect.Bottom - 1);
+ end
+ else
+ begin
+ dCanvas.Pen.Color := FFIconBackColor;
+ dCanvas.Rectangle(WRect.Left + 1, WRect.Top + 2,
+ WRect.Left + 3, WRect.Bottom - 1);
+ end;
+// +jt
+ StretchBlt(dCanvas.Handle,WRect.Left + 1,WRect.Top + 1,WRect.Right - WRect.Left-1,2,
+ dCanvas.Handle,WRect.Left + 1,WRect.Top + 3,WRect.Right - WRect.Left-1,1,SRCCOPY);
+ if IsWXP then
+ begin
+ StretchBlt(dCanvas.Handle,WRect.Left + 1,WRect.Bottom - 3,WRect.Right - WRect.Left-1,2,
+ dCanvas.Handle,WRect.Left + 1,WRect.Top + 3,WRect.Right - WRect.Left-1,1, SRCCOPY);
+ dCanvas.Pen.Color := FFColor;
+ dCanvas.Rectangle(WRect.Right - 3, WRect.Top+1, WRect.Right - 1,
+ WRect.Bottom-1);
+ end;
// +jt
+ Inc(WRect.Right, 2);
+ Inc(WRect.Bottom, 2);
+ if not IsWXP then // +jt
+ begin // +jt
+ dCanvas.Pen.Color := FMenuShadowColor;
+ dCanvas.Rectangle(WRect.Left + 2, WRect.Bottom, WRect.Right, WRect.Bottom - 2);
+ dCanvas.Rectangle(WRect.Right - 2, WRect.Bottom, WRect.Right, WRect.Top + 2);
+ end; // +jt
+
+ finally
+ ReleaseDC(hWnd, wDC); // +jt
+ dCanvas.Free;
+ FSettingWindowRng :=false;
+ end;
+end;
+
+procedure TUCXPStyle.Notification(AComponent: TComponent;
+ AOperation: TOperation);
+begin
+ //added by fduenas
+ inherited Notification(AComponent, AOperation); //changed by fduenas
+ if AOperation = opRemove then
+ If AComponent = FUCSettings then
+ FUCSettings := nil;
+
+ if not Assigned(UCXPStyleManager) then Exit;
+// Pass the notification information to the UCXPStyleManager
+ if not(csDesigning in ComponentState) then
+ UCXPStyleManager.Notification(AComponent, AOperation);
+
+ if not FActive then exit;
+ if not FAutoDetect then exit;
+ if (AOperation = opInsert) and
+ ((AComponent is TMenuItem) or (AComponent is TToolButton) or
+ (AComponent is TControlBar)) then
+ begin
+ if not (csDesigning in ComponentState) then
+ InitItem(AComponent, true, true); // Tom: This will process this new component
+ end;
+
+end;
+
+
+function GetShadeColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
+var
+ r, g, b: integer;
+
+begin
+ clr := ColorToRGB(clr);
+ r := Clr and $000000FF;
+ g := (Clr and $0000FF00) shr 8;
+ b := (Clr and $00FF0000) shr 16;
+
+ r := (r - value);
+ if r < 0 then r := 0;
+ if r > 255 then r := 255;
+
+ g := (g - value) + 2;
+ if g < 0 then g := 0;
+ if g > 255 then g := 255;
+
+ b := (b - value);
+ if b < 0 then b := 0;
+ if b > 255 then b := 255;
+
+ //Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b));
+ Result := RGB(r, g, b);
+end;
+
+function MergColor(Colors: Array of TColor): TColor;
+var
+ r, g, b, i: integer;
+ clr: TColor;
+begin
+ r := 0; g:= 0; b:= 0;
+
+ for i := 0 to High(Colors) do
+ begin
+
+ clr := ColorToRGB(Colors[i]);
+ r := r + (Clr and $000000FF) div High(Colors);
+ g := g + ((Clr and $0000FF00) shr 8) div High(Colors);
+ b := b + ((Clr and $00FF0000) shr 16) div High(Colors);
+ end;
+
+ Result := RGB(r, g, b);
+
+end;
+function NewColor(ACanvas: TCanvas; clr: TColor; Value: integer): TColor;
+var
+ r, g, b: integer;
+
+begin
+ if Value > 100 then Value := 100;
+ clr := ColorToRGB(clr);
+ r := Clr and $000000FF;
+ g := (Clr and $0000FF00) shr 8;
+ b := (Clr and $00FF0000) shr 16;
+
+
+ r := r + Round((255 - r) * (value / 100));
+ g := g + Round((255 - g) * (value / 100));
+ b := b + Round((255 - b) * (value / 100));
+
+ //Result := Windows.GetNearestColor(ACanvas.Handle, RGB(r, g, b));
+ Result := RGB(r, g, b);
+
+end;
+
+function GetInverseColor(AColor: TColor): TColor;
+begin
+ Result := ColorToRGB(AColor) xor $FFFFFF;
+end;
+
+function GrayColor(ACanvas: TCanvas; Clr: TColor; Value: integer): TColor;
+var
+ r, g, b, avg: integer;
+
+begin
+
+ clr := ColorToRGB(clr);
+ r := Clr and $000000FF;
+ g := (Clr and $0000FF00) shr 8;
+ b := (Clr and $00FF0000) shr 16;
+
+ Avg := (r + g + b) div 3;
+ Avg := Avg + Value;
+
+ if Avg > 240 then Avg := 240;
+ //if ACanvas <> nil then
+ // Result := Windows.GetNearestColor (ACanvas.Handle,RGB(Avg, avg, avg));
+ Result := RGB(Avg, avg, avg);
+end;
+
+procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
+var
+ x, y: integer;
+ LastColor1, LastColor2, Color: TColor;
+begin
+ LastColor1 := 0;
+ LastColor2 := 0;
+
+ for y := 0 to ABitmap.Height do
+ for x := 0 to ABitmap.Width do
+ begin
+ Color := ABitmap.Canvas.Pixels[x, y];
+ if Color = LastColor1 then
+ ABitmap.Canvas.Pixels[x, y] := LastColor2
+ else
+ begin
+ LastColor2 := GrayColor(ABitmap.Canvas , Color, Value);
+ ABitmap.Canvas.Pixels[x, y] := LastColor2;
+ LastColor1 := Color;
+ end;
+ end;
+end;
+{Modified by felix@unidreamtech.com}
+{
+procedure GrayBitmap(ABitmap: TBitmap; Value: integer);
+var
+ Pixel: PRGBTriple;
+ w, h: Integer;
+ x, y: Integer;
+ avg: integer;
+begin
+ ABitmap.PixelFormat := pf24Bit;
+ w := ABitmap.Width;
+ h := ABitmap.Height;
+ for y := 0 to h - 1 do
+ begin
+ Pixel := ABitmap.ScanLine[y];
+ for x := 0 to w - 1 do
+ begin
+ avg := ((Pixel^.rgbtRed + Pixel^.rgbtGreen + Pixel^.rgbtBlue) div 3)
+ + Value;
+ if avg > 240 then avg := 240;
+ Pixel^.rgbtRed := avg;
+ Pixel^.rgbtGreen := avg;
+ Pixel^.rgbtBlue := avg;
+ Inc(Pixel);
+ end;
+ end;
+end;
+}
+
+procedure DimBitmap(ABitmap: TBitmap; Value: integer);
+var
+ x, y: integer;
+ LastColor1, LastColor2, Color: TColor;
begin
+ if Value > 100 then Value := 100;
+ LastColor1 := -1;
+ LastColor2 := -1;
+ for y := 0 to ABitmap.Height - 1 do
+ for x := 0 to ABitmap.Width - 1 do
+ begin
+ Color := ABitmap.Canvas.Pixels[x, y];
+ if Color = LastColor1 then
+ ABitmap.Canvas.Pixels[x, y] := LastColor2
+ else
+ begin
+ LastColor2 := NewColor(ABitmap.Canvas, Color, Value);
+ ABitmap.Canvas.Pixels[x, y] := LastColor2;
+ LastColor1 := Color;
+ end;
+ end;
end;
+
+// LIne 2647
+{Modified by felix@unidreamtech.com}
+{works fine for 24 bit color
+procedure DimBitmap(ABitmap: TBitmap; Value: integer);
+var
+ Pixel: PRGBTriple;
+ w, h: Integer;
+ x, y, c1, c2: Integer;
+begin
+ ABitmap.PixelFormat := pf24Bit;
+ w := ABitmap.Width;
+ h := ABitmap.Height;
+
+ c1 := Value * 255;
+ c2 := 100 - Value;
+ for y := 0 to h - 1 do
+ begin
+ Pixel := ABitmap.ScanLine[y];
+ for x := 0 to w - 1 do
+ begin
+ Pixel^.rgbtRed := ((c2 * Pixel^.rgbtRed) + c1) div 100;
+ Pixel^.rgbtGreen := ((c2 * Pixel^.rgbtGreen) + c1) div 100;
+ Pixel^.rgbtBlue := ((c2 * Pixel^.rgbtBlue) + c1) div 100;
+ Inc(Pixel);
+ end;
+ end;
+end;
+}
+procedure DrawArrow(ACanvas: TCanvas; X, Y: integer);
begin
+ ACanvas.MoveTo(X, Y);
+ ACanvas.LineTo(X + 5, Y);
+
+ ACanvas.MoveTo(X + 1, Y + 1);
+ ACanvas.LineTo(X + 4, Y);
+
+ ACanvas.MoveTo(X + 2, Y + 2);
+ ACanvas.LineTo(X + 3, Y);
+
+end;
+
+procedure DrawArrow(ACanvas: TCanvas; X, Y, Orientation: integer);
+begin
+ case Orientation of
+ 0:
+ begin
+
+ ACanvas.MoveTo(X, Y);
+ ACanvas.LineTo(X, Y-1);
+
+ ACanvas.MoveTo(X + 1, Y + 1);
+ ACanvas.LineTo(X + 4, Y + 4);
+
+ ACanvas.MoveTo(X, Y + 1);
+ ACanvas.LineTo(X + 3, Y + 4);
+
+ ACanvas.MoveTo(X, Y + 2);
+ ACanvas.LineTo(X + 2, Y + 4);
+
+
+ ACanvas.MoveTo(X - 1, Y + 1);
+ ACanvas.LineTo(X - 4, Y + 4);
+
+ ACanvas.MoveTo(X, Y + 2);
+ ACanvas.LineTo(X - 3, Y + 4);
+
+ ACanvas.MoveTo(X, Y + 1);
+ ACanvas.LineTo(X - 2, Y + 4);
+
+ end;
+ 1:
+ begin
+ ACanvas.MoveTo(X, Y+3);
+ ACanvas.LineTo(X, Y+4);
+
+ ACanvas.MoveTo(X + 1, Y + 2);
+ ACanvas.LineTo(X + 4, Y - 1);
+
+ ACanvas.MoveTo(X, Y + 2);
+ ACanvas.LineTo(X + 3, Y - 1);
+
+ ACanvas.MoveTo(X, Y + 1);
+ ACanvas.LineTo(X + 2, Y + 0);
+
+
+
+ ACanvas.MoveTo(X - 1, Y + 2);
+ ACanvas.LineTo(X - 4, Y - 1);
+
+ ACanvas.MoveTo(X, Y + 2);
+ ACanvas.LineTo(X - 3, Y - 1);
+
+ ACanvas.MoveTo(X, Y + 1);
+ ACanvas.LineTo(X - 2, Y + 0);
+
+
+ end;
+ end;
+end;
+procedure DrawBitmapShadow(B: TBitmap; ACanvas: TCanvas; X, Y: integer;
+ ShadowColor: TColor);
var
+ BX, BY: integer;
+ TransparentColor: TColor;
begin
+ TransparentColor := B.Canvas.Pixels[0, B.Height - 1];
+ for BY := 0 to B.Height - 1 do
+ for BX := 0 to B.Width - 1 do
+ begin
+ if B.Canvas.Pixels[BX, BY] <> TransparentColor then
+ ACanvas.Pixels[X + BX, Y + BY] := ShadowColor;
+ end;
end;
+
+procedure DrawCheckMark(ACanvas: TCanvas; X, Y: integer);
+begin
+ Inc(X, 2);
+ Dec(Y, 3);
+ ACanvas.MoveTo(X , Y - 2);
+ ACanvas.LineTo(X + 2, Y );
+ ACanvas.LineTo(X + 7, Y - 5);
+
+ ACanvas.MoveTo(X , Y - 3);
+ ACanvas.LineTo(X + 2, Y - 1);
+ ACanvas.LineTo(X + 7, Y - 6);
+
+ ACanvas.MoveTo(X , Y - 4);
+ ACanvas.LineTo(X + 2, Y - 2);
+ ACanvas.LineTo(X + 7, Y - 7);
+end;
+
{ TCustomComboSubClass }
+//By Heath Provost (Nov 20, 2001)
+// ComboBox Subclass WndProc.
+// Message processing to allow control to repond to
+// messages needed to paint using Office XP style.
+procedure TControlSubClass.ControlSubClass(var Message: TMessage);
+
+begin
+ //Call original WindowProc FIRST. We are trying to emulate inheritance, so
+ //original WindowProc must handle all messages before we do.
+
+
+ if ((Message.Msg = WM_PAINT) and ((Control is TGraphicControl))) or
+ ((Control.ClassName = 'TDBLookupComboBox') and (Message.Msg = WM_NCPAINT)) then
+ Message.Result := 1
+ else
+ //: "Marcus Paulo Tavares"
+ orgWindowProc(Message);
+
+ if (FXPStyle <> nil) and (not FXPStyle.FActive) then
+ begin
+ try
+ Message.Result := 1;
+ if Control <> nil then
+ begin
+ Control.WindowProc := orgWindowProc;
+ if Control is TCustomEdit then
+ TEdit(Control).Ctl3D := FCtl3D;
+ if Control is TCustomRichEdit then
+ TRichEdit(Control).BorderStyle := FBorderStyle;
+ if Control.ClassName = 'TDBLookupComboBox' then
+ TComboBox(Control).Ctl3D := FCtl3D;
+ if Control is TCustomListBox then
+ TListBox(Control).BorderStyle := FBorderStyle;
+ if Control is TCustomListView then
+ TListView(Control).BorderStyle := FBorderStyle;
+ if Control is TCustomTreeView then
+ TTreeView(Control).BorderStyle := FBorderStyle;
+ Control := nil;
+ Free;
+ end;
+ exit;
+ except
+ exit;
+ end;
+ end;
+
+ FMsg := Message.Msg;
+ case Message.Msg of
+
+
+ EM_GETMODIFY, // For edit
+ CM_INVALIDATE:
+ begin
+ FBuilding := true
+ end;
+
+ CM_PARENTCOLORCHANGED:
+ begin
+ PaintControlXP;
+ end;
+
+ WM_DESTROY:
+ begin
+ if not FBuilding then
+ begin
+ try
+ if Control <> nil then
+ begin
+ Control.WindowProc := orgWindowProc;
+ FBuilding := false;
+ Free;
+ end;
+ except
+ end;
+ //FBuilding := false;
+ end;
+ Exit;
+ end;
+
+ WM_PAINT:
+ begin
+ FBuilding := false;
+ PaintControlXP;
+ end;
+
+ CM_MOUSEENTER:
+ if TControl(Control).Enabled then
+ begin
+// if FmouseInControl then exit;
+ FmouseInControl := true;
+ if Control is TGraphicControl then
+ begin
+ Control.Repaint;
+ exit;
+ end;
+ PaintControlXP;
+
+
+ {if Control is TGraphicControl then
+ begin
+ if not FMouseInControl and Control.Enabled
+ and (GetCapture = 0) then
+ begin
+ FMouseInControl := True;
+ Control.Repaint;
+ end;
+ end
+ else
+ begin
+ FmouseInControl := true;
+ PaintControlXP;
+ end;}
+
+
+ end;
+ CM_MOUSELEAVE:
+ if TControl(Control).Enabled then
+ begin
+ FmouseInControl := false;
+ if Control is TGraphicControl then
+ begin
+ Control.Invalidate;
+ exit;
+ end;
+ PaintControlXP;
+
+
+ {if Control is TGraphicControl then
+ begin
+ if FMouseInControl and Control.Enabled then
+ begin
+ FMouseInControl := False;
+ Control.Invalidate;
+ end;
+ end
+ else
+ begin
+ FmouseInControl := false;
+ PaintControlXP;
+ end;}
+ end;
+
+ WM_MOUSEMOVE:
+ begin
+ if TControl(Control).Enabled and (Control.ClassName = 'TUpDown') then
+ PaintControlXP;
+ end;
+ WM_LBUTTONDOWN:
+ begin
+ FLButtonBressed := true;
+ PaintControlXP;
+ end;
+
+ WM_LBUTTONUP:
+ begin
+ FLButtonBressed := false;
+ if Control is TGraphicControl then
+ begin
+ Control.Repaint;
+ exit;
+ end;
+ PaintControlXP;
+ end;
+
+ WM_KEYDOWN:
+ if Message.WParam = VK_SPACE then
+ begin
+ FBressed := true;
+ if not FIsKeyDown then
+ PaintControlXP;
+ FIsKeyDown := true;
+ end;
+
+ WM_KEYUP:
+ if Message.WParam = VK_SPACE then
+ begin
+ FBressed := false;
+ FIsKeyDown := false;
+ PaintControlXP;
+ end;
+
+ WM_SETFOCUS:
+ begin
+ FmouseInControl := true;
+ PaintControlXP;
+ end;
+ WM_KILLFOCUS:
+ begin
+ FmouseInControl := false;
+ PaintControlXP;
+ end;
+ CM_FOCUSCHANGED: //??
+ PaintControlXP;
+
+ CM_EXIT:
+ begin
+ FmouseInControl := false;
+ PaintControlXP;
+ end;
+
+ BM_SETCHECK:
+ begin
+ FmouseInControl := false;
+ PaintControlXP;
+ end;
+ BM_GETCHECK:
+ begin
+ FmouseInControl := false;
+ PaintControlXP;
+ end;
+ CM_ENABLEDCHANGED:
+ begin
+ if (Message.WParam = 0) then FmouseInControl := false;//Dirk Bottcher
+ PaintControlXP;
+ end;
+
+ CM_TEXTCHANGED:
+ begin
+ PaintControlXP;
+ end;
+
+
+ CM_CTL3DCHANGED, CM_PARENTCTL3DCHANGED:
+ begin
+ FBuilding := true;
+ end;
+ WM_LBUTTONDBLCLK: //for button, check
+ begin
+ if (Control is TButton) or
+ (Control is TSpeedButton) or
+ (Control is TCheckBox) then
+ Control.Perform(WM_LBUTTONDOWN, Message.WParam , Longint(Message.LParam));
+ end;
+ {CN_DRAWITEM,} BM_SETSTATE:
+ begin
+ PaintControlXP; // button
+ end;
+ WM_WINDOWPOSCHANGED, CN_PARENTNOTIFY: // Moving From parent to other
+ begin
+ FBuilding := true
+ end;
+ WM_NCPAINT:
+ begin
+ if (Control is TCustomListBox) or (Control is TCustomTreeView) or
+ (Control is TCustomListBox)
+ then
+ PaintNCWinControl;
+ end;
+ end;
+
+end;
+
+// changes added by Heath Provost (Nov 20, 2001)
+{ TCustomComboSubClass }
+// paints an overlay over the control to make it mimic
+// Office XP style.
+
+procedure TControlSubClass.PaintControlXP;
+begin
+
+ If Control is TWinControl then
+ FIsFocused := TWinControl(Control).Focused
+ else
+ FIsFocused := false;
+ {$IFDEF VER6U}
+ if (Control is TCustomCombo) then
+ PaintCombo;
+ {$ELSE}
+ if (Control is TCustomComboBox) then
+ PaintCombo;
+ {$ENDIF}
+ if Control.ClassName = 'TDBLookupComboBox' then
+ PaintDBLookupCombo;
+
+ if Control is TCustomRichEdit then
+ PaintRichEdit
+ else
+ if Control is TCustomEdit then
+ PaintEdit;
+
+ if Control is TCustomCheckBox then
+ PaintCheckBox;
+ if Control is TRadioButton then
+ PaintRadio;
+
+ if Control is TBitBtn then
+ PaintBitButn
+ else
+ if Control is TButton then
+ PaintButton;
+
+ if Control is TUpDown then
+ PaintUpDownButton;
+
+ if Control is TSpeedButton then
+ if Control.Visible then
+ PaintSpeedButton;
+
+ if Control is TCustomPanel then
+ PaintPanel;
+
+ if Control is TCustomGroupBox then
+ PaintGroupBox;
+
+ if (Control is TCustomListBox) or (Control is TCustomTreeView) or
+ (Control is TCustomListView)
+ then
+ PaintNCWinControl;
+
+ if Control is TProgressBar then
+ PaintProgressBar;
+
+ if Control is TCustomHotKey then
+ PaintHotKey;
+{
+ if Control is TDrawGrid then
+ PaintGrid;
+}
+end;
+
+procedure TControlSubClass.PaintCombo;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor, ArrowColor: TColor;
+ X: integer;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+// FXPStyle.SetGlobalColor(C);
+ if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite;
+
+
+ if (FmouseinControl) then
+ begin
+ borderColor := FXPStyle.FFSelectBorderColor;
+ SelectColor := FXPStyle.FFSelectColor;
+ end
+ else
+ begin
+ borderColor := TComboBox(Control).Color;
+ if Control.Tag = 1000 then
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor)
+ else
+ selectColor := clBtnFace;
+ end;
+
+ if (not FmouseinControl) and (FIsFocused) then
+ begin
+ borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ SelectColor := FXPStyle.FCheckedAreaColor;
+ end;
+
+ R := Control.ClientRect;
+
+ C.Brush.Color := Control.Parent.Brush.Color;
+ C.FrameRect(R);
+ InflateRect(R, -1, -1);
+
+ C.Pen.Color := C.Brush.Color;
+ C.MoveTo(R.Left, R.Top);
+ C.LineTo(R.Right, R.Top);
+
+ InflateRect(R, 0, -1);
+
+ if ( FmouseinControl or FIsFocused) then
+ InflateRect(R, 1, 1);
+
+ C.Brush.Color := TComboBox(Control).Color;;
+ C.FrameRect(R);
+
+ Inc(R.Bottom,1);
+ C.Brush.Color := BorderColor;
+ C.FrameRect(R);
+
+ {$IFDEF VER6U}
+ if TCustomCombo(Control).DroppedDown then
+ {$ELSE}
+ if TCustomComboBox(Control).DroppedDown then
+ {$ENDIF}
+ begin
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ ArrowColor := clWhite;
+ SelectColor := FXPStyle.FCheckedAreaSelectColor ;
+ end;
+
+ if TComboBox(Control).style <> csSimple then
+ begin
+
+ InflateRect(R, -1, -1);
+
+ if Control.BiDiMode = bdRightToLeft then
+ R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) + 1
+ else
+ R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) - 1;
+
+ if ( FmouseinControl or FIsFocused) then
+ begin
+ if Control.BiDiMode = bdRightToLeft then
+ Inc(R.Right, 2)
+ else
+ Dec(R.Left, 1);
+ end;
+
+ C.Brush.Color := SelectColor;
+ C.FillRect(R);
+
+ if Control.BiDiMode = bdRightToLeft then
+ R.Left := R.Right - 5
+ else
+ R.Right := R.Left + 5;
+
+ C.Brush.Color := TComboBox(Control).Color;
+ C.FillRect(R);
+
+ C.Pen.Color := BorderColor;
+
+ if Control.BiDiMode = bdRightToLeft then
+ begin
+ C.Moveto(R.Left, R.Top);
+ C.LineTo(R.Left, R.Bottom);
+ end
+ else
+ begin
+ C.Moveto(R.Right, R.Top);
+ C.LineTo(R.Right, R.Bottom);
+ end;
+ C.Pen.Color := arrowColor;
+
+ R := Control.ClientRect;
+
+ if Control.BiDiMode = bdRightToLeft then
+ X := R.Left + 5
+ else
+ X := R.Right - 10;
+
+ C.Moveto(X + 0, R.Top + 10);
+ C.LineTo(X + 5, R.Top + 10);
+ C.Moveto(X + 1, R.Top + 11);
+ C.LineTo(X + 4, R.Top + 11);
+ C.Moveto(X + 2, R.Top + 12);
+ C.LineTo(X + 3, R.Top + 12);
+ end;
+ finally
+ C.Free;
+ end;
+
+end;
+
+procedure TControlSubClass.PaintDBLookupCombo;
+var
+ C: TControlCanvas;
+ R: TRect;
+ FrameColor, SelectColor, BorderColor, ArrowColor: TColor;
+ X: integer;
+ DC: HDC;
+
+begin
+ C := TControlCanvas.Create;
+ DC := GetWindowDC(TWinControl(Control).Handle);
+ try
+ C.Control := Control;
+ C.Handle := DC;
+ if TComboBox(Control).Ctl3D then
+ begin
+ FBuilding := true;
+ TComboBox(Control).Ctl3D := false;
+ end;
+
+ //FXPStyle.SetGlobalColor(C);
+ if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite;
+
+
+ if (FmouseinControl) then
+ begin
+ FrameColor := FXPStyle.FFSelectBorderColor;
+ borderColor := FXPStyle.FFSelectBorderColor;
+ SelectColor := FXPStyle.FFSelectColor;
+ end
+ else
+ begin
+ FrameColor := GetShadeColor(C, Control.Parent.Brush.Color, 60);
+ borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ selectColor := clBtnFace;
+ end;
+ if (not FmouseinControl) and (FIsFocused) then
+ begin
+ FrameColor := GetShadeColor(C, Control.Parent.Brush.Color, 60);
+ borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ SelectColor := FXPStyle.FCheckedAreaColor;
+ end;
+
+
+ R := Rect(0, 0, Control.Width, Control.Height);
+ C.Brush.Color := TComboBox(Control).Color;
+ C.Brush.Color := FrameColor;
+ C.FrameRect(R);
+
+
+ R := Control.ClientRect;
+
+ // Move the thumb one pixel to the right and one pixel down
+ OffsetRect(R, 1, 1);
+
+
+ C.Brush.Color := TComboBox(Control).Color;
+ C.FrameRect(R);
+
+ {$IFDEF VER6U}
+ if TCustomCombo(Control).DroppedDown then
+ {$ELSE}
+ if TCustomComboBox(Control).DroppedDown then
+ {$ENDIF}
+ begin
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ ArrowColor := clWhite;
+ SelectColor := FXPStyle.FCheckedAreaSelectColor ;
+ end;
+
+ if TComboBox(Control).style <> csSimple then
+ begin
+
+ InflateRect(R, -1, -1);
+
+ if Control.BiDiMode = bdRightToLeft then
+ R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) + 1
+ else
+ R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) - 1;
+
+ if ( FmouseinControl or FIsFocused) then
+ begin
+ if Control.BiDiMode = bdRightToLeft then
+ Inc(R.Right, 1)
+ else
+ Dec(R.Left, 1);
+ end;
+
+
+ C.Brush.Color := SelectColor;
+ C.FillRect(R);
+ C.Brush.Color := BorderColor;
+ C.FrameRect(R);
+
+ if Control.BiDiMode = bdRightToLeft then
+ R.Left := R.Right - 5
+ else
+ R.Right := R.Left + 5;
+
+ C.Brush.Color := TComboBox(Control).Color;
+ C.FillRect(R);
+
+ C.Pen.Color := BorderColor;
+
+ if Control.BiDiMode = bdRightToLeft then
+ begin
+ C.Moveto(R.Left, R.Top);
+ C.LineTo(R.Left, R.Bottom);
+ end
+ else
+ begin
+ C.Moveto(R.Right, R.Top);
+ C.LineTo(R.Right, R.Bottom);
+ end;
+ C.Pen.Color := arrowColor;
+
+ R := Control.ClientRect;
+
+ if Control.BiDiMode = bdRightToLeft then
+ X := R.Left + 5
+ else
+ X := R.Right - 9; // Changed by Uwe Runkel, uwe@runkel.info
+ // Changed value from 10 to 9 because the thumb has
+ // moved one pixel to the right
+
+ C.Moveto(X + 0, R.Top + 8);
+ C.LineTo(X + 5, R.Top + 8);
+ C.Moveto(X + 1, R.Top + 9);
+ C.LineTo(X + 4, R.Top + 9);
+ C.Moveto(X + 2, R.Top + 10);
+ C.LineTo(X + 3, R.Top + 10);
+ end;
+ finally
+ C.Free;
+ ReleaseDC(TWinControl(Control).Handle, DC);
+ end;
+
+end;
+
+procedure TControlSubClass.PaintEdit;
+var
+ C: TControlCanvas;
+ R: TRect;
+ BorderColor: TColor;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ //FXPStyle.SetGlobalColor(C);
+
+ if TEdit(Control).Ctl3D <> false then
+ begin
+ FBuilding := true;
+ TEdit(Control).Ctl3D := false;
+ end;
+
+ if (FmouseinControl) or (FIsFocused) then
+ borderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 60)
+ else
+ borderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60);
+
+
+ if FBorderStyle = bsNone then
+ begin
+ if (FmouseinControl) and (not FIsFocused) then
+ //borderColor := NewColor(C, Control.Parent.Brush.Color, 60)
+ borderColor := NewColor(C, MergColor([TEdit(Control).Color,Control.Parent.Brush.Color]), 40)
+
+ else
+ borderColor := TEdit(Control).Color;
+ end;
+
+
+ R := Control.ClientRect;
+
+ C.Pen.Color := BorderColor;
+ C.Brush.Style := bsClear;
+
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ finally
+ C.Free;
+ end;
+end;
+
+procedure TControlSubClass.PaintRichEdit;
+var
+ C: TControlCanvas;
+ R: TRect;
+ BorderColor: TColor;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control.Parent;
+
+ R := Control.BoundsRect;
+ InflateRect(R, 1, 1);
+
+ if FBorderStyle = bsSingle then
+ begin
+ FBuilding := true;
+ TRichEdit(Control).BorderStyle := bsNone;
+ if TRichEdit(Control).BorderWidth < 2 then
+ TRichEdit(Control).BorderWidth := 2;
+ end;
+
+ if (FmouseinControl) or (FIsFocused) then
+ borderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60)
+
+
+ else
+ begin
+ if FBorderStyle = bsSingle then
+ borderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60)
+ else
+ borderColor := Control.Parent.Brush.Color;
+ end;
+
+ Frame3D(C, R, borderColor, borderColor, 1);
+
+ finally
+ C.Free;
+ end;
+
+end;
+
+procedure TControlSubClass.PaintCheckBox;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor: TColor;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ if FMouseInControl then
+ begin
+ SelectColor := FXPStyle.FFSelectColor;
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ end
+ else
+ begin
+ SelectColor := clWindow;
+ BorderColor := clBtnShadow;
+ end;
+
+ if (FIsFocused) then
+ begin
+ SelectColor := FXPStyle.FFSelectColor;
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ end;
+ if (FBressed) or (FLButtonBressed ) then
+ SelectColor := FXPStyle.FCheckedAreaSelectColor ;
+
+ if TCheckBox(Control).State = cbGrayed then
+ SelectColor := clSilver ;
+ R := Control.ClientRect;
+ InflateRect(R, 0, -3);
+ R.Top := R.Top + ((R.Bottom - R.Top - GetSystemMetrics(SM_CXHTHUMB)) div 2);
+ R.Bottom := R.Top + GetSystemMetrics(SM_CXHTHUMB);
+
+ if ((Control.BiDiMode = bdRightToLeft) and
+ (TCheckBox(Control).Alignment = taRightJustify)) or
+ ((Control.BiDiMode = bdLeftToRight) and
+ (TCheckBox(Control).Alignment = taLeftJustify))
+ then
+ R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) + 1
+ else
+ if ((Control.BiDiMode = bdLeftToRight) and
+ (TCheckBox(Control).Alignment = taRightJustify)) or
+ ((Control.BiDiMode = bdRightToLeft) and
+ (TCheckBox(Control).Alignment = taLeftJustify)) then
+ R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) - 1;
+
+
+
+ C.Brush.Color := TCheckBox(Control).Color;
+ C.FillRect(R);
+ InflateRect(R, -2, -2);
+ C.Brush.Color := SelectColor;
+ C.Pen.Color := BorderColor;
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+
+ if (TCheckBox(Control).Checked) or
+ (TCheckBox(Control).State = cbGrayed) then
+ begin
+ if Control.Enabled then
+ begin
+ if (FBressed) or (FLButtonBressed ) then
+ C.Pen.color := clWindow
+ else
+ begin
+ if TCheckBox(Control).State = cbGrayed then
+ C.Pen.color := clGray
+ else
+ C.Pen.color := clHighlight;
+ end;
+ end
+ else
+ C.Pen.color := FXPStyle.FFDisabledColor;
+
+ DrawCheckMark(C, R.Left, R.Bottom )
+ end;
+
+ finally
+ C.Free;
+ end;
+
+
+end;
+
+procedure TControlSubClass.PaintRadio;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor: TColor;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ if FMouseInControl then
+ begin
+ SelectColor := FXPStyle.FFSelectColor;
+ BorderColor := FXPStyle.FFSelectBorderColor;;
+ end
+ else
+ begin
+ SelectColor := clWindow;
+ BorderColor := clBtnShadow;
+ end;
+ if (FIsFocused) then
+ SelectColor := FXPStyle.FFSelectColor;
+
+ R := Control.ClientRect;
+ InflateRect(R, 0, -4);
+
+ R.Top := R.Top + ((R.Bottom - R.Top - GetSystemMetrics(SM_CXHTHUMB)) div 2);
+ R.Bottom := R.Top + GetSystemMetrics(SM_CXHTHUMB)-1;
+
+
+ if ((Control.BiDiMode = bdRightToLeft) and
+ (TCheckBox(Control).Alignment = taRightJustify)) or
+ ((Control.BiDiMode = bdLeftToRight) and
+ (TCheckBox(Control).Alignment = taLeftJustify))
+ then
+ R.Left := R.Right - GetSystemMetrics(SM_CXHTHUMB) + 1
+ else
+ if ((Control.BiDiMode = bdLeftToRight) and
+ (TCheckBox(Control).Alignment = taRightJustify)) or
+ ((Control.BiDiMode = bdRightToLeft) and
+ (TCheckBox(Control).Alignment = taLeftJustify)) then
+ R.Right := R.Left + GetSystemMetrics(SM_CXHTHUMB) - 1;
+
+ C.Brush.Color := TCheckBox(Control).Color;
+ C.FillRect(R);
+
+
+ InflateRect(R, -2, -2);
+ C.Brush.Color := SelectColor;
+ C.Pen.Color := BorderColor;
+
+
+ C.Ellipse(R.Left, R.Top, R.Right, R.Bottom);
+ if TRadioButton(Control).Checked then
+ begin
+ InflateRect(R, -2, -2);
+
+ if Control.Enabled then
+ C.Brush.Color := clHighlight
+ else
+ C.Brush.color := FXPStyle.FFDisabledColor;
+
+ C.Pen.Color := C.Brush.Color;
+ C.Ellipse(R.Left, R.Top, R.Right, R.Bottom);
+ end;
+ finally
+ C.Free;
+ end;
+
+
+end;
+
+procedure TControlSubClass.PaintButton;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor: TColor;
+ Txt: string;
+ TextRect: TRect;
+ TxtFont: TFont;
+
+ CWidth, CHeight, TWidth, THeight: integer;
+ TextFormat: integer;
+
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ if (FMouseInControl) then
+ begin
+ if Control.Tag = 1000 then // UseParentColor
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColorSelect)
+ else
+ SelectColor := NewColor(C, clBtnFace, FXPStyle.FDimParentColorSelect);
+
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ end
+ else
+ begin
+ if Control.Tag = 1000 then
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor)
+ else
+ SelectColor := FXPStyle.FFIconBackColor;
+ BorderColor := clBtnShadow;
+ end;
+
+
+ if (not FmouseinControl) and (FIsFocused) then
+ begin
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ end;
+
+ TextFormat := DT_CENTER + DT_VCENTER;
+ R := Control.ClientRect;
+
+ CWidth := (R.Right - R.Left);
+ CHeight := (R.Bottom - R.Top);
+
+ C.Brush.Color := Control.Parent.Brush.Color;
+ C.FillRect(R);
+
+ C.Brush.Color := SelectColor;
+
+ C.Pen.Color := NewColor(C, BorderColor, 30);
+ C.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 4, 4);
+
+ if TControl(Control).Enabled then
+ if FBressed or (FLButtonBressed and FmouseinControl) {or FBressed} then
+ begin
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+ C.MoveTo(R.Left , R.Bottom - 2);
+ C.LineTo(R.Left , R.Top + 1);
+ C.LineTo(R.Left + 1, R.Top );
+ C.LineTo(R.Right - 1 , R.Top );
+ end
+ else
+ begin
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+ C.MoveTo(R.Right - 1, R.Top + 1);
+ C.LineTo(R.Right - 1, R.Bottom - 2);
+ C.LineTo(R.Right - 2, R.Bottom - 1);
+ C.LineTo(R.Left , R.Bottom - 1);
+ end;
+
+ Txt := TButton(Control).Caption;
+
+ TextRect := R;
+
+ TxtFont := TButton(Control).Font;
+ C.Font.Assign (TxtFont);
+
+
+ if TButton(Control).IsRightToLeft then
+ TextFormat := TextFormat + DT_RTLREADING;
+
+//--- //"Holger Lembke"
+
+ if (Txt <> '') then
+ begin
+ FillChar(TextRect, SizeOf(TextRect),0);
+ DrawText(C.Handle,
+ PChar(Txt), Length(Txt),
+ TextRect,
+ DT_CALCRECT + control.DrawTextBiDiModeFlags(0));
+ TWidth := TextRect.Right;
+ THeight := TextRect.Bottom;
+ end
+ else
+ begin
+ TWidth := 0;
+ THeight := 0;
+ end;
+
+//---
+ TextRect.Left := (CWidth - (TWidth)) div 2;
+ TextRect.Right := TextRect.Left + TWidth;
+ TextRect.Top := (CHeight - (THeight)) div 2;
+ TextRect.Bottom := TextRect.Top + THeight;
+
+
+ FXPStyle.DrawTheText(Control,
+ Txt, '', C,
+ TextRect, false,
+ TControl(Control).Enabled,
+ TButton(Control).Default,
+ false,
+ TControl(Control).IsRightToLeft,
+ TxtFont,
+ TextFormat);
+
+ finally
+ C.Free;
+ end;
+
+end;
+
+procedure TControlSubClass.PaintSpeedButton;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor: TColor;
+ Txt: string;
+ TextRect, IconRect: TRect;
+ TxtFont: TFont;
+ B, BF: TBitmap;
+ CWidth, CHeight, BWidth, BHeight, TWidth, THeight, Space,
+ NumGlyphs, Offset: integer;
+ TextFormat: integer;
+ FDown, FFlat, FTransparent: boolean;
+ FLayout: TButtonLayout;
+ P: TPoint;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ FDown := TSpeedButton(Control).Down;
+ FFlat := TSpeedButton(Control).Flat;
+ FTransparent := TSpeedButton(Control).Transparent;
+ NumGlyphs := TSpeedButton(Control).NumGlyphs;
+
+//----------
+ if FFlat then
+ if FMouseInControl then
+ begin
+ p := Mouse.CursorPos;
+ P := Control.ScreenToClient(P);
+ R := Control.ClientRect;
+ FMouseInControl := (p.x >= R.Left) and (p.x <= R.Right) and
+ (p.y >= R.Top) and (p.y <= R.Bottom);
+ end;
+
+//----------
+ if (FMouseInControl) then
+ begin
+ if Control.Tag = 1000 then // UseParentColor
+ begin
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColorSelect);
+ if FFlat then
+ SelectColor := FXPStyle.FFSelectColor ;
+ end
+ else
+ begin
+ SelectColor := NewColor(C, clBtnFace, FXPStyle.FDimParentColorSelect);
+ if FFlat then
+ SelectColor := FXPStyle.FFSelectColor ;
+ end;
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ end
+ else
+ begin
+ if Control.Tag = 1000 then
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor)
+ else
+ SelectColor := FXPStyle.FFIconBackColor;
+ if FFlat then
+ SelectColor := TControl(Control).Parent.Brush.Color;
+
+ if (Control.ClassName = 'TNavButton') and FFlat then
+ begin
+ SelectColor := TControl(Control).Parent.Brush.Color;
+ end;
+ BorderColor := clBtnShadow;
+ end;
+
+
+ if FDown then
+ begin
+ SelectColor := FXPStyle.FCheckedAreaColor;
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ end;
+
+ if FDown and FMouseInControl then
+ begin
+ SelectColor := FXPStyle.FCheckedAreaSelectColor;
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ end;
+
+ if not TControl(Control).Enabled then
+ BorderColor := clBtnShadow;
+
+
+ TextFormat := + DT_CENTER + DT_VCENTER;;
+ R := Control.ClientRect;
+
+ CWidth := (R.Right - R.Left);
+ CHeight := (R.Bottom - R.Top);
+
+
+ if (FDown or FMouseInControl) and FTransparent then
+ begin
+ BF := TBitmap.Create;
+ try
+ BF.Width := R.Right - R.Left;
+ BF.Height := R.Bottom - R.Top;
+
+ if FFlat then
+ begin
+ if GetDeviceCaps(C.Handle, BITSPIXEL) > 16 then
+ BF.Canvas.Brush.Color := NewColor(C, FXPStyle.FFSelectColor, 20)
+ else
+ BF.Canvas.Brush.Color := SelectColor;
+ end
+ else
+ begin
+ if GetDeviceCaps(C.Handle, BITSPIXEL) > 16 then
+ BF.Canvas.Brush.Color := NewColor(C, SelectColor, 5)
+ else
+ BF.Canvas.Brush.Color := SelectColor;
+ end;
+ BF.Canvas.FillRect (R);
+ BitBlt(C.handle,
+ R.Left,
+ R.Top,
+ R.Right - R.left,
+ R.Bottom - R.top,
+ BF.Canvas.Handle,
+ 0,
+ 0,
+ SRCAND);
+ finally
+ BF.Free;
+ end;
+ end;
+
+
+
+
+ C.Brush.Color := SelectColor;
+ if not FTransparent then
+ c.FillRect (R);
+
+ if Control.ClassName = 'TNavButton' then
+ begin
+ c.FillRect (R);
+ end;
+ C.Pen.Color := NewColor(C, BorderColor, 30);
+
+ if (FFlat) and (not FTransparent) and (not FDown) and (not FMouseInControl) then
+ C.Pen.Color := C.Brush.Color;
+
+ if FTransparent then
+ C.Brush.Style := bsClear;
+ if ((FTransparent) and (FMouseInControl)) or
+ ((FTransparent) and (FDown)) or
+ ((not FTransparent )) or
+ ((not FFlat))
+ then
+ begin
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ end;
+
+ if TControl(Control).Enabled then
+ begin
+ if (FFlat) then
+ begin
+ if (FLButtonBressed ) or (FDown) then
+ begin
+ C.Pen.Color := BorderColor;
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+
+ C.MoveTo(R.Left , R.Bottom - 1);
+ C.LineTo(R.Left , R.Top );
+ C.LineTo(R.Right , R.Top );
+ end
+ else
+ if (FMouseInControl) then
+ begin
+ C.Pen.Color := FXPStyle.FFSelectBorderColor;
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ end;
+ end;
+
+ if (not FFlat) then
+ if (FLButtonBressed ) or (FDown) then
+ begin
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+ C.MoveTo(R.Left , R.Bottom - 1);
+ C.LineTo(R.Left , R.Top );
+ C.LineTo(R.Right , R.Top );
+ end
+ else
+ begin
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+ C.MoveTo(R.Right - 1, R.Top );
+ C.LineTo(R.Right - 1, R.Bottom - 1);
+ C.LineTo(R.Left , R.Bottom - 1);
+ end;
+ end;
+ Txt := TSpeedButton(Control).Caption;
+
+ TextRect := R;
+
+ TxtFont := TSpeedButton(Control).Font;
+ C.Font.Assign (TxtFont);
+
+ TWidth := C.TextWidth(Txt);
+ //THeight := C.TextHeight(Txt);
+ TextRect.Left := (CWidth - TWidth) div 2;
+
+
+ if TControl(Control).IsRightToLeft then
+ TextFormat := TextFormat + DT_RTLREADING;
+
+//--- //"Holger Lembke"
+
+ if (Txt <> '') then
+ begin
+ FillChar(TextRect, sizeof(TextRect),0);
+ DrawText(C.Handle,
+ PChar(Txt), Length(Txt),
+ TextRect,
+ DT_CALCRECT + control.DrawTextBiDiModeFlags(0));
+ TWidth := TextRect.Right;
+ THeight := TextRect.Bottom;
+ end
+ else
+ begin
+ TWidth := 0;
+ THeight := 0;
+ end;
+
+//---
+
+ if (TSpeedButton(Control).Glyph <> nil) then
+ begin
+ B := TBitmap.Create;
+ BWidth := TSpeedButton(Control).Glyph.Width div
+ TSpeedButton(Control).NumGlyphs;
+
+ BHeight := TSpeedButton(Control).Glyph.Height;
+
+ B.Width := BWidth;
+ B.Height := BHeight;
+ if Length(TSpeedButton(Control).Caption) > 0 then
+ Space := TSpeedButton(Control).Spacing
+ else
+ Space := 0;
+
+ IconRect := Rect(R.Left , R.Top, R.Left+BWidth, R.Top + BHeight);
+
+
+ // Suggested by : "Holger Lembke"
+ Offset := 1;
+ if (not Control.Enabled) and (NumGlyphs > 1) then
+ Offset := 2;
+ if (FLButtonBressed) and (NumGlyphs > 2) then
+ Offset := 3;
+ if (FDown) and (NumGlyphs > 3) then
+ Offset := 4;
+
+
+ B.Canvas.CopyRect (Rect(0, 0, BWidth, BHeight),
+ TSpeedButton(Control).Glyph.Canvas,
+ Rect((BWidth * Offset) - BWidth, 0, BWidth * Offset, BHeight));
+
+
+ FLayout := TSpeedButton(Control).Layout;
+ if Control.IsRightToLeft then
+ begin
+ if FLayout = blGlyphLeft then
+ FLayout := blGlyphRight
+ else
+ if FLayout = blGlyphRight then FLayout := blGlyphLeft;
+ end;
+ case FLayout of
+ blGlyphLeft:
+ begin
+ IconRect.Left := (CWidth - (BWidth + Space + TWidth)) div 2;
+ IconRect.Right := IconRect.Left + BWidth;
+ IconRect.Top := ((CHeight - (BHeight)) div 2) - 1;
+ IconRect.Bottom := IconRect.Top + BHeight;
+
+ TextRect.Left := IconRect.Right + Space;
+ TextRect.Right := TextRect.Left + TWidth;
+ TextRect.Top := (CHeight - (THeight)) div 2;
+ TextRect.Bottom := TextRect.Top + THeight;
+
+ end;
+ blGlyphRight:
+ begin
+ IconRect.Right := (CWidth + (BWidth + Space + TWidth)) div 2;
+ IconRect.Left := IconRect.Right - BWidth;
+ IconRect.Top := (CHeight - (BHeight)) div 2;
+ IconRect.Bottom := IconRect.Top + BHeight;
+
+ TextRect.Right := IconRect.Left - Space;
+ TextRect.Left := TextRect.Right - TWidth;
+ TextRect.Top := (CHeight - (THeight)) div 2;
+ TextRect.Bottom := TextRect.Top + THeight;
+
+ end;
+ blGlyphTop:
+ begin
+ IconRect.Left := (CWidth - BWidth) div 2;
+ IconRect.Right := IconRect.Left + BWidth;
+ IconRect.Top := (CHeight - (BHeight + Space + THeight)) div 2;
+ IconRect.Bottom := IconRect.Top + BHeight;
+
+ TextRect.Left := (CWidth - (TWidth)) div 2;
+ TextRect.Right := TextRect.Left + TWidth;
+ TextRect.Top := IconRect.Bottom + Space;
+ TextRect.Bottom := TextRect.Top + THeight;
+
+ end;
+ blGlyphBottom:
+ begin
+ IconRect.Left := (CWidth - BWidth) div 2;
+ IconRect.Right := IconRect.Left + BWidth;
+ IconRect.Bottom := (CHeight + (BHeight + Space + THeight)) div 2;
+ IconRect.Top := IconRect.Bottom - BHeight;
+
+ TextRect.Left := (CWidth - (TWidth)) div 2;
+ TextRect.Right := TextRect.Left + TWidth;
+ TextRect.Bottom := IconRect.Top - Space;
+ TextRect.Top := TextRect.Bottom - THeight;
+
+ end;
+
+ end;
+
+ FXPStyle.DrawIcon(Control, C , B, IconRect,
+ FMouseinControl,
+ FIsFocused,
+ TControl(Control).Enabled,
+ FDown or FLButtonBressed,
+ false,
+ TControl(Control).IsRightToLeft);
+
+ B.Free;
+ end;
+
+ FXPStyle.DrawTheText(Control,
+ Txt, '', C,
+ TextRect, false,
+ TControl(Control).Enabled,
+ false,
+ false,
+ TControl(Control).IsRightToLeft,
+ TxtFont,
+ TextFormat);
+ finally
+ C.Free;
+ end;
+
+end;
+
+procedure TControlSubClass.PaintBitButn;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor: TColor;
+ Txt: string;
+ TextRect, IconRect: TRect;
+ TxtFont: TFont;
+ B: TBitmap;
+ CWidth, CHeight, BWidth, BHeight, TWidth, THeight, Space: integer;
+ TextFormat: integer;
+begin
+
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ if (FMouseInControl or FBressed) then
+ begin
+ if (Control.Tag and 1000) = 1000 then
+ SelectColor := NewColor(C,
+ TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColorSelect)
+ else
+ SelectColor := NewColor(C, clBtnFace, FXPStyle.FDimParentColorSelect);
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ end
+ else
+ begin
+ if (Control.Tag and 1000) = 1000 then
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor)
+ else
+ SelectColor := FXPStyle.FFIconBackColor;
+ BorderColor := clBtnShadow;
+ end;
+
+ if (not FmouseinControl) and (FIsFocused) then
+ begin
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor,60);
+ end;
+
+ if (Control.Tag and 1001) = 1001 then
+ begin
+ BorderColor := SelectColor;
+ end;
+
+
+ TextFormat := + DT_CENTER + DT_VCENTER;
+
+ R := Control.ClientRect;
+
+ CWidth := (R.Right - R.Left);
+ CHeight := (R.Bottom - R.Top);
+
+
+ C.Brush.Color := Control.Parent.Brush.Color;
+ C.FillRect(R);
+
+ C.Brush.Color := SelectColor;
+
+
+ C.Pen.Color := NewColor(C, BorderColor, 30);
+ c.RoundRect(R.Left, R.Top, R.Right, R.Bottom, 4, 4);
+
+ if (Control.Tag and 1001) <> 1001 then
+ begin
+ if TControl(Control).Enabled then
+ if (FLButtonBressed and FmouseinControl) or (FBressed) then
+ begin
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+ C.MoveTo(R.Left , R.Bottom - 2);
+ C.LineTo(R.Left , R.Top + 1);
+ C.LineTo(R.Left + 1, R.Top );
+ C.LineTo(R.Right - 1 , R.Top );
+ end
+ else
+ begin
+ C.Pen.Color := GetShadeColor(C, BorderColor, 50);
+ C.MoveTo(R.Right - 1, R.Top + 1);
+ C.LineTo(R.Right - 1, R.Bottom - 2);
+ C.LineTo(R.Right - 2, R.Bottom - 1);
+ C.LineTo(R.Left , R.Bottom - 1);
+ end;
+ end;
+ Txt := TBitBtn(Control).Caption;
+
+ TextRect := R;
+
+ TxtFont := TBitBtn(Control).Font;
+ C.Font.Assign (TxtFont);
+
+ TWidth := C.TextWidth(Txt);
+
+ TextRect.Left := (CWidth - TWidth) div 2;
+
+
+//--- //"Holger Lembke"
+
+ if (Txt <> '') then
+ begin
+ FillChar(TextRect, sizeof(TextRect),0);
+ DrawText(C.Handle,
+ PChar(Txt), Length(Txt),
+ TextRect,
+ DT_CALCRECT + control.DrawTextBiDiModeFlags(0));
+ TWidth := TextRect.Right;
+ THeight := TextRect.Bottom;
+ end
+ else
+ begin
+ TWidth := 0;
+ THeight := 0;
+ end;
+
+//---
+ if TBitBtn(Control).IsRightToLeft then
+ TextFormat := TextFormat + DT_RTLREADING;
+
+
+ if (TBitBtn(Control).Glyph <> nil) then
+ begin
+ B := TBitmap.Create;
+ BWidth := TBitBtn(Control).Glyph.Width div
+ TBitBtn(Control).NumGlyphs;
+
+ BHeight := TBitBtn(Control).Glyph.Height;
+
+ B.Width := BWidth;
+ B.Height := BHeight;
+ Space := TBitBtn(Control).Spacing;
+ if (Trim(TBitBtn(Control).Caption) = '') then Space := 0; //"Holger Lembke"
+ IconRect := Rect(R.Left , R.Top, R.Left+BWidth, R.Top + BHeight);
+
+ B.Canvas.CopyRect (Rect(0, 0, BWidth, BHeight),
+ TBitBtn(Control).Glyph.Canvas,
+ Rect(0, 0, BWidth, BHeight));
+
+ case TBitBtn(Control).Layout of
+ blGlyphLeft:
+ begin
+ IconRect.Left := (CWidth - (BWidth + Space + TWidth)) div 2;
+ IconRect.Right := IconRect.Left + BWidth;
+ IconRect.Top := (CHeight - (BHeight)) div 2;
+ IconRect.Bottom := IconRect.Top + BHeight;
+
+ TextRect.Left := IconRect.Right + Space;
+ TextRect.Right := TextRect.Left + TWidth;
+
+ TextRect.Top := (CHeight - (THeight)) div 2;
+ TextRect.Bottom := TextRect.Top + THeight;
+ end;
+ blGlyphRight:
+ begin
+ IconRect.Right := (CWidth + (BWidth + Space + TWidth)) div 2;
+ IconRect.Left := IconRect.Right - BWidth;
+ IconRect.Top := (CHeight - (BHeight)) div 2;
+ IconRect.Bottom := IconRect.Top + BHeight;
+
+ TextRect.Right := IconRect.Left - Space;
+ TextRect.Left := TextRect.Right - TWidth;
+ TextRect.Top := (CHeight - (THeight)) div 2;
+ TextRect.Bottom := TextRect.Top + THeight;
+ end;
+ blGlyphTop:
+ begin
+ IconRect.Left := (CWidth - BWidth) div 2;
+ IconRect.Right := IconRect.Left + BWidth;
+ IconRect.Top := (CHeight - (BHeight + Space + THeight)) div 2;
+ IconRect.Bottom := IconRect.Top + BHeight;
+
+ TextRect.Left := (CWidth - (TWidth)) div 2;
+ TextRect.Right := TextRect.Left + TWidth;
+ TextRect.Top := IconRect.Bottom + Space;
+ TextRect.Bottom := TextRect.Top + THeight;
+
+ end;
+ blGlyphBottom:
+ begin
+ IconRect.Left := (CWidth - BWidth) div 2;
+ IconRect.Right := IconRect.Left + BWidth;
+ IconRect.Bottom := (CHeight + (BHeight + Space + THeight)) div 2;
+ IconRect.Top := IconRect.Bottom - BHeight;
+
+ TextRect.Left := (CWidth - (TWidth)) div 2;
+ TextRect.Right := TextRect.Left + TWidth;
+ TextRect.Bottom := IconRect.Top - Space;
+ TextRect.Top := TextRect.Bottom - THeight;
+
+ end;
+ end;
+
+ FXPStyle.DrawIcon(Control, C , B, IconRect,
+ FMouseinControl,
+ FIsFocused,
+ TControl(Control).Enabled,
+ false,
+ false,
+ TControl(Control).IsRightToLeft);
+
+ B.Free;
+ end;
+
+ if (Control.Tag and 1002) = 1002 then
+ begin
+ if TBitBtn(Control).IsRightToLeft then
+ TextFormat := + DT_RIGHT + DT_VCENTER
+ else
+ TextFormat := + DT_LEFT + DT_VCENTER;
+ TextRect := R;
+ InflateRect(TextRect, -4,-2);
+ end;
+
+ FXPStyle.DrawTheText(Control,
+ Txt, '', C,
+ TextRect, false,
+ TControl(Control).Enabled,
+ TBitBtn(Control).Default,
+ false,
+ TControl(Control).IsRightToLeft,
+ TxtFont,
+ TextFormat);
+
+ finally
+ C.Free;
+ end;
+end;
+
+procedure TControlSubClass.PaintUpDownButton;
+var
+ C: TControlCanvas;
+ R: TRect;
+ SelectColor, BorderColor, ArrowColor: TColor;
+ P: TPoint;
+ H: integer;
+
+ procedure DrawUpDownButton(ARect: TRect; Arrow: integer; Active: boolean);
+ begin
+ if Control.Enabled then ArrowColor := clBlack else ArrowColor := clWhite;
+ if Active then
+ begin
+ if FLButtonBressed then
+ begin
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ SelectColor := FXPStyle.FCheckedAreaSelectColor ;
+ ArrowColor := clWhite;
+ end
+ else begin
+ BorderColor := FXPStyle.FFSelectBorderColor;
+ SelectColor := NewColor(C, FXPStyle.FFSelectColor, 60);//FXPStyle.FFSelectColor;
+ end;
+ end
+ else begin
+ if Control.Tag = 1000 then
+ SelectColor := NewColor(C, TControl(Control).Parent.Brush.Color, FXPStyle.FDimParentColor)
+ else
+ SelectColor := NewColor(C, FXPStyle.FFSelectColor, FXPStyle.FDimParentColor);//clBtnFace;
+ BorderColor := NewColor(C, TControl(Control).Parent.Brush.Color, 80);//SelectColor;
+ end;
+
+ C.Pen.Color := BorderColor;
+ C.Brush.Color := SelectColor;
+ C.Font.Color := ArrowColor;
+
+ if C.Pixels[ARect.Left, ARect.Top] <> ColorToRGB(BorderColor) then begin
+ C.Rectangle(ARect.Left, ARect.Top, ARect.Right, ARect.Bottom);
+ C.Pen.Color := ArrowColor;
+ DrawArrow(C, ARect.Left + ((ARect.Right - ARect.Left) div 2),
+ ARect.Top + ((ARect.Bottom - ARect.Top) div 2) -2, Arrow);
+ end;
+ end;
+
+begin
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+ R := Control.ClientRect;
+
+ H := (R.Bottom - R.Top) div 2;
+ P := Control.ScreenToClient(Mouse.CursorPos);
+ DrawUpDownButton(Rect(R.Left, R.Top, R.Right, R.Top + H), 0,
+ TControl(Control).Enabled and FMouseInControl and (P.Y < H));
+ DrawUpDownButton(Rect(R.Left, R.Bottom - H, R.Right, R.Bottom), 1,
+ TControl(Control).Enabled and FMouseInControl and not(P.Y < H));
+ finally
+ C.Free;
+ end;
+end;
+
+procedure TControlSubClass.PaintGroupBox;
+var
+ C: TControlCanvas;
+ R, RText: TRect;
+ ShadowColor, LightColor: TColor;
+ TextHeight, TextWidth: integer;
+ Text: string;
+begin
+
+ if FMsg <> WM_PAINT then exit;
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ R := Control.ClientRect;
+ C.Font.Assign (TGroupBox(Control).Font);
+ C.Font.Height := TGroupBox(Control).Font.Height;
+ Text := TGroupBox(Control).Caption;
+
+ TextHeight := C.TextHeight(Text);
+ TextWidth := C.TextWidth(Text);
+ if Length(Text) = 0 then
+ TextHeight := C.TextHeight(' ');
+ ShadowColor := GetShadeColor(C, TGroupBox(Control).color, 60);
+ LightColor := NewColor(C, TGroupBox(Control).color, 60);
+
+ InflateRect(R,-1, -1);
+ Inc(R.Top, (TextHeight)-1);
+ C.Brush.Style := bsClear;
+ C.Pen.Color := TGroupBox(Control).Color; // Control Color;
+ C.Rectangle (R.Left, R.Top, R.Right, R.Bottom);
+
+
+ //----Draw the outer Frame
+ R := Control.ClientRect;
+ Inc(R.Top, (TextHeight div 2)-1);
+ C.Pen.Color := TGroupBox(Control).Color;
+ C.MoveTo(R.Left + 1, R.Top); // Repeat
+ C.LineTo(R.Left + 1, R.Bottom);
+ if TGroupBox(Control).Ctl3D then
+ Frame3D(C, R, LightColor, ShadowColor, 1)
+ else
+ Frame3D(C, R, ShadowColor, ShadowColor, 1);
+
+
+ // Fill Upper part (outside frame)
+ R := Control.ClientRect;
+ R.Bottom := R.Top + (TextHeight div 2) + 1;
+ C.Brush.Style := bsSolid;
+ C.Brush.Color := Control.Parent.Brush.Color; // Parent Color;
+ C.Pen.Color := C.Brush.Color;
+ C.FillRect(R);
+
+
+ if Control.IsRightToLeft then
+ begin
+ C.TextFlags := ETO_RTLREADING;
+ RText.Right := R.Right - 9;
+ RText.Left := RText.Right - TextWidth;
+ end
+ else
+ begin
+ RText.Left := R.Left + 9;
+ RText.Right := RText.Left + TextWidth;
+ end;
+
+ RText.Top := R.Top ;
+ RText.Bottom := R.Top + TextHeight;
+
+ //(inside frame)
+ InflateRect(R, -1, 0);
+ R.Top := R.Bottom;
+ R.Bottom := R.Top + (TextHeight div 2) + 1;
+ C.Brush.Style := bsSolid;
+ R.Left := RText.Left;
+ R.Right := RText.Right;
+ C.Brush.Color := TGroupBox(Control).Color; // Control Color;
+ C.Pen.Color := C.Brush.Color;
+ C.FillRect(R);
+
+ R.Right := Control.ClientRect.Right;
+
+ C.MoveTo(R.Right-2, R.Top);
+ C.LineTo(R.Right-2, RText.Bottom);
+
+ C.Brush.Style := bsClear;
+ if Control.IsRightToLeft then
+ C.TextFlags := ETO_RTLREADING;
+
+ C.TextRect (RText, RText.Left, RText.Top, Text);
+
+ // Draw Upper Line
+ R := Control.ClientRect;
+ Inc(R.Top, (TextHeight div 2) + 1);
+ if TGroupBox(Control).Ctl3D then
+ C.Pen.Color := LightColor
+ else
+ C.Pen.Color := ShadowColor;
+ C.MoveTo(R.Left, R.Top);
+ C.LineTo(RText.Left, R.Top);
+
+ C.MoveTo(RText.Right, R.Top);
+ C.LineTo(R.Right -1, R.Top);
+
+ finally
+ C.Free;
+ end;
+end;
+
+procedure TControlSubClass.PaintPanel;
+var
+ C: TControlCanvas;
+ R: TRect;
+ ShadowColor, LightColor: TColor;
+begin
+ if FMsg <> WM_PAINT then exit;
+ C := TControlCanvas.Create;
+ try
+ C.Control := Control;
+
+ R := Control.ClientRect;
+ ShadowColor := GetShadeColor(C, TPanel(Control).color, 60);
+ LightColor := NewColor(C, TPanel(Control).color, 60);
+ if TPanel(Control).BevelOuter <> bvNone then
+ begin
+ if TPanel(Control).BevelOuter = bvLowered then
+ Frame3D(C, R, ShadowColor, LightColor, TPanel(Control).BevelWidth)
+ else
+ Frame3D(C, R, LightColor, ShadowColor, TPanel(Control).BevelWidth);
+ end;
+
+ if TPanel(Control).BevelInner <> bvNone then
+ begin
+ InflateRect(R, -TPanel(Control).BorderWidth, -TPanel(Control).BorderWidth);
+
+ if TPanel(Control).BevelInner = bvLowered then
+ Frame3D(C, R, ShadowColor, LightColor, TPanel(Control).BevelWidth)
+ else
+ Frame3D(C, R, LightColor, ShadowColor, TPanel(Control).BevelWidth);
+ end;
+ finally
+ C.Free;
+ end;
+
+end;
+
+type
+ TCastWinControl = class(TWinControl);
+
+procedure TControlSubClass.PaintNCWinControl;
+var
+ DC: HDC;
+ C: TControlCanvas;
+ R: TRect;
+ BorderColor: TColor;
+
+begin
+ C := TControlCanvas.Create;
+ DC := GetWindowDC(TWinControl(Control).Handle);
+ try
+ C.Control := Control;
+ C.Handle := DC;
+
+ FXPStyle.SetGlobalColor(C);
+
+ if (FMouseInControl) or (FIsFocused) then
+ begin
+ if FBorderStyle = bsSingle then
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 60)
+ else
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 80);
+ end
+ else
+ begin
+ if FBorderStyle = bsSingle then
+ borderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60)
+ else
+ borderColor := Control.Parent.Brush.Color;
+ end;
+
+ if TCastWinControl(Control).Ctl3D <> false then
+ begin
+ FBuilding := true;
+ TCastWinControl(Control).Ctl3D := false;
+ end;
+
+ C.Pen.Color := BorderColor;
+ C.Brush.Style := bsClear;
+
+ R := Rect(0, 0, Control.Width, Control.Height);
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ finally
+ C.Free;
+ ReleaseDC(TWinControl(Control).Handle, DC);
+ end;
+end;
+
+procedure TControlSubClass.PaintProgressBar;
+var
+ DC: HDC;
+ C: TControlCanvas;
+ R: TRect;
+ BorderColor: TColor;
+
+begin
+ C := TControlCanvas.Create;
+ DC := GetWindowDC(TWinControl(Control).Handle);
+ try
+ C.Control := Control;
+ C.Handle := DC;
+
+ if (FMouseInControl) then
+ BorderColor := FXPStyle.FFSelectBorderColor
+ else
+ BorderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60);
+
+ C.Pen.Color := BorderColor;
+ C.Brush.Style := bsClear;
+
+ R := Rect(0, 0, Control.Width, Control.Height);
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ finally
+ C.Free;
+ ReleaseDC(TWinControl(Control).Handle, DC);
+ end;
+end;
+
+procedure TControlSubClass.PaintHotKey;
+var
+ DC: HDC;
+ C: TControlCanvas;
+ R: TRect;
+ BorderColor: TColor;
+
+begin
+ C := TControlCanvas.Create;
+ DC := GetWindowDC(TWinControl(Control).Handle);
+ try
+ C.Control := Control;
+ C.Handle := DC;
+
+ FXPStyle.SetGlobalColor(C);
+
+ if (FMouseInControl) or (FIsFocused) then
+ BorderColor := NewColor(C, FXPStyle.FFSelectBorderColor, 60)
+ else
+ BorderColor := GetShadeColor(C, Control.Parent.Brush.Color, 60);
+
+ C.Pen.Color := BorderColor;
+ C.Brush.Style := bsClear;
+
+ R := Rect(0, 0, Control.Width, Control.Height);
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+ InflateRect(R, -1, -1);
+ C.Pen.Color := clWindow;
+ C.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
+
+ finally
+ C.Free;
+ ReleaseDC(TWinControl(Control).Handle, DC);
+ end;
+end;
+
+// UCXPStyleManager
+//
+// Uwe Runkel, uwe@runkel.info
+//
+// Enable FXPStyle to be used globally (all windows in the application use XPStyle).
+// Hence you don't need more than one instance in an application. However it is also
+// possible to have more than one instance. But only one instance is used for subclassing.
+// If this instance is destroyed the manager looks if there is another instance which is
+// allowed to subclass.
+
+constructor TUCXPStyleManager.Create;
+begin
+ inherited Create;
+ FXPStyleList := TList.Create; // list of XPStyle components in the application
+ FFormList := TList.Create; // list of subclassed forms
+ FPendingFormsList := TList.Create; // list of forms inserted but not subclassed yet
+ FDisableSubclassing := false; // This disables the UCXPStyleManager
+ FActiveXPStyle := nil; // Currently for subclassing used XPStyle
+ // if this is nil no subclassing is done.
+ {the If condition was added because sometimes it freezes delphi when
+ more than two windows with the UCXPStyle component are opened and the closed}
+
+ if not (csDesigning in Application.ComponentState) then
+ Application.HookMainWindow(MainWindowHook);
+end;
+
+destructor TUCXPStyleManager.Destroy;
+begin
+{Bret Goldsmith bretg@yahoo.com}
+{alexs }
+ {the If condition was added because sometimes it freezes delphi when
+ more than two windows with the UCXPStyle component are opened and the closed}
+ if not (csDesigning in Application.ComponentState) then
+ Application.UnhookMainWindow(MainWindowHook);
+
+ FPendingFormsList.Free;
+ FXPStyleList.Free;
+ FFormList.Free;
+ inherited;
+end;
+
+// A component has been inserted or removed, if it is a form and subclassing is
+// allowed then subclass it, so this form doesn't need a XPStyle component as well
+procedure TUCXPStyleManager.Notification(AComponent: TComponent;
+ AOperation: TOperation);
+begin
+ if (FActiveXPStyle = nil) or FDisableSubclassing then Exit;
+ case AOperation of
+ opInsert:
+ // At this place we cannot subclass the control because it did not yet get its
+ // initial window procedure.
+ // So we add it to an intermediate list and subclass it at a later moment.
+ if (AComponent is TCustomForm) and (FPendingFormsList.IndexOf(AComponent) < 0) then
+ FPendingFormsList.Add(AComponent);
+ opRemove:
+ if (AComponent is TWinControl) then
+ begin
+ if AComponent is TCustomForm then begin
+ // Remove the destroyed form from any form list if it is still there.
+ FPendingFormsList.Remove(AComponent);
+ FFormList.Remove(AComponent);
+ end;
+ end;
+ end;
+end;
+
+// Add some XPStyle to the manager
+procedure TUCXPStyleManager.Add(AXPStyle: TUCXPStyle);
+begin
+ FXPStyleList.Add(AXPStyle);
+ FFormList.Add(AXPStyle.Form);
+ if (FActiveXPStyle = nil) and AXPStyle.Active and not(AXPStyle.DisableSubclassing) and
+ not(FDisableSubclassing) then
+ begin
+ FActiveXPStyle := AXPStyle;
+ CollectForms;
+ end;
+end;
+
+// Remove some XPStyle from the manager
+procedure TUCXPStyleManager.Delete(AXPStyle: TUCXPStyle);
+begin
+ if AXPStyle = FActiveXPStyle then
+ UpdateActiveXPStyle(AXPStyle);
+ FXPStyleList.Remove(AXPStyle);
+end;
+
+// Select a new ActiveXPStyle (except the one given in the parameter)
+procedure TUCXPStyleManager.UpdateActiveXPStyle(AXPStyle: TUCXPStyle);
+var
+ Cnt : integer;
+ XPM : TUCXPStyle;
+ Item: TControlSubClass;
+ Comp: TControlSubClass;
+
+begin
+ XPM := FindSubclassingXPStyle(AXPStyle);
+ if XPM = nil then
+ begin
+ FPendingFormsList.Clear;
+ if not Assigned(Application.MainForm) then Exit;
+ for Cnt := 0 to FFormList.Count - 1 do
+ if (AXPStyle = nil) or (FFormList[Cnt] <> AXPStyle.Form) then
+ RemoveChildSubclassing(TCustomForm(FFormList[Cnt]));
+ FFormList.Clear;
+ FActiveXPStyle := XPM;
+ end
+ else begin
+ if FActiveXPStyle = nil then
+ begin
+ FActiveXPStyle := XPM;
+ CollectForms;
+ end
+ else begin
+ for Cnt := 0 to FActiveXPStyle.ComponentCount - 1 do
+ if (FActiveXPStyle.Components[Cnt] is TControlSubClass) then
+ begin
+ Comp := FActiveXPStyle.Components[Cnt] as TControlSubClass;
+ if (AXPStyle <> nil) and not(AXPStyle.Form.ContainsControl(Comp.Control)) then
+ begin
+ Item := TControlSubClass.Create(XPM);
+ Item.Control := Comp.Control;
+ Item.orgWindowProc := Comp.orgWindowProc;
+ Item.Control.WindowProc := Item.ControlSubClass;
+ Item.FXPStyle := XPM;
+ Item.FCtl3D := Comp.FCtl3D;
+ Item.FBorderStyle := Comp.FBorderStyle;
+ {Item.FOnDrawCell := Comp.FOnDrawCell;}
+ Item.FDefaultDrawing := Comp.FDefaultDrawing;
+ Item.FSelCol := Comp.FSelCol;
+ Item.FSelRow := Comp.FSelRow;
+ end;
+ end;
+ FActiveXPStyle := XPM;
+ end;
+ end;
+end;
+
+// Find an XPStyle which can be used for subclassing
+function TUCXPStyleManager.FindSubclassingXPStyle(Exclude: TUCXPStyle): TUCXPStyle;
+var
+ XPM: TUCXPStyle;
+ Cnt: integer;
+
+begin
+ Result := nil;
+ if (FXPStyleList.Count = 0) or FDisableSubclassing then Exit;
+ Cnt := 0;
+ repeat
+ XPM := TUCXPStyle(FXPStyleList[Cnt]);
+ if XPM.Active and not(XPM.DisableSubclassing) and (XPM <> Exclude)
+ then Result := XPM;
+ inc(Cnt);
+ until (Result <> nil) or (Cnt = FXPStyleList.Count);
+end;
+
+// Listens to messages sent to the application and looks if a window is inserted.
+function TUCXPStyleManager.MainWindowHook(var Message: TMessage): boolean;
+var
+ i: integer;
+ NewForm: TCustomForm;
+
+ FMenuItem: TMenuItem; // +jt
+ FMenu: TMenu; // +jt
+ r: TRECT; // +jt
+ pt: TPOINT; // +jt
+ hWndM: HWND; // +j
+begin
+ Result := false;
+ // +ahuser// ahuser: "Andreas Hausladen"
+ if UCXPStyleManager = nil then // prevent AVs on termination
+ Exit;
+ // +ahuser
+ if Message.Msg = WM_DRAWMENUBORDER then
+ begin
+ FMenuItem:=TMenuItem(Message.LParam);
+ if Assigned(FMenuItem) then
+ begin
+ GetMenuItemRect(0,FMenuItem.Parent.Handle,FMenuItem.MenuIndex,r);
+ FMenu := FMenuItem.Parent.GetParentMenu;
+ pt.x:=r.Left+(r.Right-r.Left) div 2;
+ pt.y:=r.Top+(r.Bottom-r.Top) div 2;
+ hWndM :=WindowFromPoint(pt);
+ if (hWndM <> 0) and Assigned(FActiveXPStyle) then //Rappido 2003 09 13
+ FActiveXPStyle.DrawWindowBorder(hWndM, FMenu.IsRightToLeft);
+ end;
+ end;
+
+ if Message.Msg = WM_DRAWMENUBORDER2 then
+ begin
+ hWndM := HWND(Message.LParam);
+ if (hWndM <> 0) and Assigned(FActiveXPStyle) then //Rappido 2003 09 13
+ FActiveXPStyle.DrawWindowBorder(hWndM, boolean(Message.WParam));
+ end;
+
+ if (Assigned(FPendingFormsList)) and (FPendingFormsList <> nil) then
+ try
+ if (FPendingFormsList.Count > 0) then
+ begin
+ for i := 0 to FPendingFormsList.Count - 1 do begin
+ NewForm := TCustomForm(FPendingFormsList[i]);
+ if FFormList.IndexOf(NewForm) < 0 then begin
+ FFormList.Add(NewForm);
+ if not(FDisableSubclassing) then
+ FActiveXPStyle.InitItems(NewForm, true, true);
+ end;
+ end;
+ FPendingFormsList.Clear;
+ end;
+ except
+ end;
+
+
+end;
+
+// Collect all forms of the application and subclass them
+procedure TUCXPStyleManager.CollectForms;
+var
+ FCnt, CCnt: integer;
+ HasXPStyle : boolean;
+
+begin
+ if not FDisableSubclassing then
+ for FCnt := 0 to Screen.FormCount - 1 do
+ if (FFormList.IndexOf(Screen.Forms[FCnt]) < 0) and (Screen.Forms[FCnt].Tag <> 999) then
+ begin
+ HasXPStyle := false;
+ for CCnt := 0 to Screen.Forms[FCnt].ComponentCount - 1 do
+ HasXPStyle := HasXPStyle or (Screen.Forms[FCnt].Components[CCnt] is TUCXPStyle);
+ if not(HasXPStyle) then
+ FPendingFormsList.Add(Screen.Forms[FCnt]);
+ end;
+end;
+
+// Remove subclassing from the original components
+procedure TUCXPStyleManager.RemoveChildSubclassing(AForm: TCustomForm);
+var
+ Cnt : integer;
+ Comp : TComponent;
+ Control: TControl;
+
+begin
+//exit;
+ for Cnt := FActiveXPStyle.ComponentCount - 1 downto 0 do begin
+ Comp := FActiveXPStyle.Components[Cnt];
+ if (Comp is TControlSubClass) then begin
+ Control := TControlSubClass(Comp).Control;
+ if AForm.ContainsControl(Control) then begin
+ try
+ Control.WindowProc := TControlSubClass(Comp).orgWindowProc;
+ if Control is TCustomEdit then begin
+ TEdit(Control).Ctl3D := TControlSubClass(Comp).FCtl3D;
+ TEdit(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle;
+ end;
+ if Control.ClassName = 'TDBLookupComboBox' then
+ TComboBox(Control).Ctl3D := TControlSubClass(Comp).FCtl3D;
+ if Control is TCustomListBox then begin
+ TListBox(Control).Ctl3D := TControlSubClass(Comp).FCtl3D;
+ TListBox(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle;
+ end;
+ if Control is TCustomListView then begin
+ TListView(Control).Ctl3D := TControlSubClass(Comp).FCtl3D;
+ TListView(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle;
+ end;
+ if Control is TCustomTreeView then begin
+ TTreeView(Control).Ctl3D := TControlSubClass(Comp).FCtl3D;
+ TTreeView(Control).BorderStyle := TControlSubClass(Comp).FBorderStyle;
+ end;
+ except
+ end;
+ end;
+ end;
+ end;
+end;
+
+// Add a form manually to the current XPStyle
+procedure TUCXPStyleManager.AddForm(AForm: TCustomForm);
+begin
+ if FPendingFormsList.IndexOf(AForm) < 0 then
+ FPendingFormsList.Add(AForm);
+end;
+
+// Remove a form manually from the current XPStyle
+procedure TUCXPStyleManager.RemoveForm(AForm: TCustomForm);
+begin
+ if FPendingFormsList.IndexOf(AForm) >= 0 then
+ FPendingFormsList.Remove(AForm);
+ if FFormList.IndexOf(AForm) >= 0 then
+ FFormList.Remove(AForm);
+end;
+
+// Disable/Enable subclassing by the manager
+procedure TUCXPStyleManager.SetDisableSubclassing(AValue: boolean);
+begin
+ if FDisableSubclassing = AValue then Exit;
+ FDisableSubclassing := AValue;
+ UpdateActiveXPStyle(nil);
+end;
+
+// Check if a Form is subclassed
+function TUCXPStyleManager.IsFormSubclassed(AForm: TCustomForm): boolean;
+begin
+ Result := ((FFormList <> nil) and (FFormList.IndexOf(AForm) >= 0)) or
+ ((FPendingFormsList <> nil) and (FPendingFormsList.IndexOf(AForm) >= 0));
+end;
+
+// Check if a Component is subclassed
+function TUCXPStyleManager.IsComponentSubclassed(AComponent: TComponent): boolean;
+var
+ Cnt: integer;
+
+begin
+ Result := false;
+ with FActiveXPStyle do
+ for Cnt := 0 to ComponentCount - 1 do
+ if Components[Cnt] is TControlSubClass then
+ if TControlSubClass(Components[Cnt]).Control = TControl(AComponent) then
+ begin
+ Result := True;
+ Break; // ahuser
+ end;
+end;
+initialization
+ InitControls;
+ //else
+ // exit;
+finalization
+ DoneControls;
+end.
+
diff --git a/official/2.31RC1/Source/UcConsts_Language.pas b/official/2.31RC1/Source/UcConsts_Language.pas
new file mode 100644
index 0000000..c66c247
--- /dev/null
+++ b/official/2.31RC1/Source/UcConsts_Language.pas
@@ -0,0 +1,971 @@
+unit UcConsts_Language;
+
+interface
+
+Uses SysUtils;
+
+Type TUCLanguage = ( ucPortuguesBr, ucEnglish, ucSpanish, ucFrench );
+
+Const MaxArray = 227;
+
+Const UC_PTBR : Array [0..MaxArray,0..1] of string = (
+ ('Const_Contr_TitleLabel','Seleção de Componentes do Form. :'),
+ ('Const_Contr_GroupLabel','Grupo :') ,
+ ('Const_Contr_CompDispLabel','Componentes Disponíveis :'),
+ ('Const_Contr_CompSelLabel','Componentes Selecionados :'),
+ ('Const_Contr_BtOK','&OK'),
+ ('Const_Contr_BTCancel','&Cancelar'),
+ ('Const_Contr_DescCol','Descrição'),
+ ('Const_Contr_BtSellAllHint','Selecionar Todos'),
+ ('Const_Contr_BtSelHint','Selecionar'),
+ ('Const_Contr_BtUnSelHint','Desmarcar'),
+ ('Const_Contr_BtUnSelAllHint','Desmarcar Todos'),
+ ('Const_Msgs_BtNew','&Nova Mensagem'),
+ ('Const_Msgs_BtReplay','&Responder'),
+ ('Const_Msgs_BtForward','E&ncaminhar'),
+ ('Const_Msgs_BtDelete','&Excluir'),
+ ('Const_Msgs_BtClose','&Fechar'),
+ ('Const_Msgs_WindowCaption','Mensagens do Sistema'),
+ ('Const_Msgs_ColFrom','Remetente'),
+ ('Const_Msgs_ColSubject','Assunto'),
+ ('Const_Msgs_ColDate','Data'),
+ ('Const_Msgs_PromptDelete','Confirma excluir as mensagens selecionadas ?'),
+ ('Const_Msgs_PromptDelete_WindowCaption','Apagar mensagens'),
+ ('Const_Msgs_NoMessagesSelected','Não existem mensagens selecionadas'),
+ ('Const_Msgs_NoMessagesSelected_WindowCaption','Informação'),
+ ('Const_MsgRec_BtClose','&Fechar'),
+ ('Const_MsgRec_WindowCaption','Mensagem'),
+ ('Const_MsgRec_Title','Mensagem Recebida'),
+ ('Const_MsgRec_LabelFrom','De :'),
+ ('Const_MsgRec_LabelDate','Data'),
+ ('Const_MsgRec_LabelSubject','Assunto'),
+ ('Const_MsgRec_LabelMessage','Mensagem'),
+ ('Const_MsgSend_BtSend','&Enviar'),
+ ('Const_MsgSend_BtCancel','&Cancelar'),
+ ('Const_MsgSend_WindowCaption','Mensagem'),
+ ('Const_MsgSend_Title','Enviar Nova Mensagem'),
+ ('Const_MsgSend_GroupTo','Para'),
+ ('Const_MsgSend_RadioUser','Usuário :'),
+ ('Const_MsgSend_RadioAll','Todos'),
+ ('Const_MsgSend_GroupMessage','Mensagem'),
+ ('Const_MsgSend_LabelSubject','Assunto'),
+ ('Const_MsgSend_LabelMessageText','Texto da mensagem'),
+ ('MsgExceptConnection','Não informado o Connection, Transaction ou Database do componente %s'),
+ ('MsgExceptTransaction','Não informado o Transaction do componente %s'),
+ ('MsgExceptDatabase','Não informado o Database do componente %s'),
+ ('MsgExceptPropriedade','Favor informar a propriedade %s'),
+ ('MsgExceptUserMngMenu','Informe na propriedade UsersForm.MenuItem ou UsersForm.Action o Item responsável pelo controle de usuários'),
+ ('MsgExceptUserProfile','Informe na propriedade UsersProfile.MenuItem ou UsersProfile.Action o Item responsável pelo controle de Perfil de usuários'),
+ ('MsgExceptChagePassMenu','Informe na propriedade ChangePasswordForm.MenuItem or .Action o Item que permite ao usuário alterar sua senha'),
+ ('MsgExceptAppID','Na propriedade ApplicationID informe um nome para identificar a aplicação na tabela de permissões'),
+ ('MsgExceptUsersTable','Na propriedade TableUsers informe o nome da tabela que será criada para armazenar os dados dos usuários'),
+ ('MsgExceptRightsTable','Na propriedade TableRights informe o nome da tabela que será criada para armazenar as permissões dos usuários'),
+ ('MsgExceptConnector','Propriedade DataConnector não definida!'),
+ ('Const_Men_AutoLogonError','Falha de Auto Logon!' + #13 + #10 + 'Informe um usuário e senha válidos.'),
+ ('Const_Men_SenhaDesabitada','Retirada senha do Login %s'),
+ ('Const_Men_SenhaAlterada','Senha alterada com sucesso!'),
+ ('Const_Men_MsgInicial','ATENÇÃO Login Inicial:' + #13 + #10 + #13 + #10 + 'Usuário : :user' + #13 + #10 + 'Senha : :password' + #13 + #10 + #13 + #10 + 'Defina as permissões para este usuário.'),
+ ('Const_Men_MaxTentativas','%d Tentativas de login inválido. Por motivos de segurança o ' + #13 + #10 + 'sistema será fechado.'),
+ ('Const_Men_LoginInvalido','Usuário ou Senha inválidos!'),
+ ('Const_Men_UsuarioExiste','O Usuário "%s" já está cadastrado no sistema !!'),
+ ('Const_Men_PasswordExpired','Atenção, sua senha expirou, favor troca-la'),
+ ('Const_Log_BtCancelar','&Cancelar'),
+ ('Const_Log_BtOK','&OK'),
+ ('Const_Log_LabelSenha','Senha :'),
+ ('Const_Log_LabelUsuario','Usuário :'),
+ ('Const_Log_WindowCaption','Login'),
+ ('Const_Log_LbEsqueciSenha','Esqueci a senha'),
+ ('Const_Log_MsgMailSend','A senha foi enviada para o seu email.'),
+ ('Const_Log_LabelTentativa','Tentativa : '),
+ ('Const_Log_LabelTentativas','Máximo de Tentativas : '),
+ ('Const_LogC_WindowCaption','Segurança'),
+ ('Const_LogC_LabelDescricao','Log do Sistema'),
+ ('Const_LogC_LabelUsuario','Usuário :'),
+ ('Const_LogC_LabelData','Data :'),
+ ('Const_LogC_LabelNivel','Nível mínimo :'),
+ ('Const_LogC_ColunaAppID','AppID'),
+ ('Const_LogC_ColunaNivel','Nível'),
+ ('Const_LogC_ColunaMensagem','Mensagem'),
+ ('Const_LogC_ColunaUsuario','Usuário'),
+ ('Const_LogC_ColunaData','Data'),
+ ('Const_LogC_BtFiltro','&Aplicar Filtro'),
+ ('Const_LogC_BtExcluir','&Excluir Log'),
+ ('Const_LogC_BtFechar','&Fechar'),
+ ('Const_LogC_ConfirmaExcluir','Confirma excluir todos os registros de log selecionados ?'),
+ ('Const_LogC_ConfirmaDelete_WindowCaption','Confirma exclusão'),
+ ('Const_LogC_Todos','Todos'),
+ ('Const_LogC_Low','Baixo'),
+ ('Const_LogC_Normal','Normal'),
+ ('Const_LogC_High','Alto'),
+ ('Const_LogC_Critic','Crítico'),
+ ('Const_LogC_ExcluirEfectuada','Exclusão de log´s do sistema : Usuário = "%s" | Data = %s a %s | Nível <= %s'),
+ ('Const_Cad_WindowCaption','Segurança'),
+ ('Const_Cad_LabelDescricao','Cadastro de Usuários'),
+ ('Const_Cad_ColunaNome','Nome'),
+ ('Const_Cad_ColunaLogin','Login'),
+ ('Const_Cad_ColunaEmail','Email'),
+ ('Const_Cad_BtAdicionar','&Adicionar'),
+ ('Const_Cad_BtAlterar','A<erar'),
+ ('Const_Cad_BtExcluir','&Excluir'),
+ ('Const_Cad_BtPermissoes','A&cessos'),
+ ('Const_Cad_BtSenha','&Senha'),
+ ('Const_Cad_BtFechar','&Fechar'),
+ ('Const_Cad_ConfirmaExcluir','Confirma excluir o usuário "%s" ?'),
+ ('Const_Cad_ConfirmaDelete_WindowCaption','Excluir usuário'),
+ ('Const_Prof_WindowCaption','Segurança'),
+ ('Const_Prof_LabelDescricao','Perfil de Usuários'),
+ ('Const_Prof_ColunaNome','Perfil'),
+ ('Const_Prof_BtAdicionar','&Adicionar'),
+ ('Const_Prof_BtAlterar','A<erar'),
+ ('Const_Prof_BtExcluir','&Excluir'),
+ ('Const_Prof_BtPermissoes','A&cessos'),
+ ('Const_Prof_BtSenha','&Senha'),
+ ('Const_Prof_BtFechar','&Fechar'),
+ ('Const_Prof_ConfirmaExcluir','Existem usuários com o perfil "%s". Confirma excluir?'),
+ ('Const_Prof_ConfirmaDelete_WindowCaption','Delete profile'),
+ ('Const_Inc_WindowCaption','Cadastro de Usuários'),
+ ('Const_Inc_LabelAdicionar','Adicionar Usuário'),
+ ('Const_Inc_LabelAlterar','Alterar Usuário'),
+ ('Const_Inc_LabelNome','Nome :'),
+ ('Const_Inc_LabelLogin','Login :'),
+ ('Const_Inc_LabelEmail','Email :'),
+ ('Const_Inc_LabelPerfil','Perfil :'),
+ ('Const_Inc_CheckPrivilegiado','Usuário privilegiado'),
+ ('Const_Inc_BtGravar','&Gravar'),
+ ('Const_Inc_BtCancelar','Cancelar'),
+ ('Const_Inc_CheckEspira','Senha do usuário não expira'),
+ ('Const_Inc_Dia','Dias'),
+ ('Const_Inc_ExpiraEm','Expira em'),
+ ('Const_PInc_WindowCaption','Perfil de Usuários'),
+ ('Const_PInc_LabelAdicionar','Adicionar Perfil'),
+ ('Const_PInc_LabelAlterar','Alterar Perfil'),
+ ('Const_PInc_LabelNome','Descrição :'),
+ ('Const_PInc_BtGravar','&Gravar'),
+ ('Const_PInc_BtCancelar','Cancelar'),
+ ('Const_Perm_WindowCaption','Segurança'),
+ ('Const_Perm_LabelUsuario','Permissões do Usuário :'),
+ ('Const_Perm_LabelPerfil','Permissões do Perfil :'),
+ ('Const_Perm_PageMenu','Itens do Menu'),
+ ('Const_Perm_PageActions','Ações'),
+ ('Const_Perm_PageControls','Controles'),
+ ('Const_Perm_BtLibera','&Liberar'),
+ ('Const_Perm_BtBloqueia','&Bloquear'),
+ ('Const_Perm_BtGravar','&Gravar'),
+ ('Const_Perm_BtCancelar','&Cancelar'),
+ ('Const_Troc_WindowCaption','Segurança'),
+ ('Const_Troc_LabelDescricao','Trocar Senha'),
+ ('Const_Troc_LabelSenhaAtual','Senha Atual :'),
+ ('Const_Troc_LabelNovaSenha','Nova Senha :'),
+ ('Const_Troc_LabelConfirma','Confirmação :'),
+ ('Const_Troc_BtGravar','&Gravar'),
+ ('Const_Troc_BtCancelar','Cancelar'),
+ ('Const_ErrPass_SenhaAtualInvalida','Senha Atual não confere!'),
+ ('Const_ErrPass_ErroNovaSenha','Os campos: Nova Senha e Confirmação devem ser iguais.'),
+ ('Const_ErrPass_NovaIgualAtual','Nova senha igual a senha atual'),
+ ('Const_ErrPass_SenhaObrigatoria','A Senha é obrigatória'),
+ ('Const_ErrPass_SenhaMinima','A senha deve conter no mínimo %d caracteres'),
+ ('Const_ErrPass_SenhaInvalida','Proibido utilizar senhas obvias!'),
+ ('Const_ErrPass_ForcaTrocaSenha','Mudança de senha obrigatória'),
+ ('Const_DefPass_WindowCaption','Definir senha do usuário : "%s"'),
+ ('Const_DefPass_LabelSenha','Senha :'),
+ ('Const_TableUsers_FieldUserID','UCIdUser'),
+ ('Const_TableUsers_FieldUserName','UCUserName'),
+ ('Const_TableUsers_FieldLogin','UCLogin'),
+ ('Const_TableUsers_FieldPassword','UCPassword'),
+ ('Const_TableUsers_FieldEmail','UCEmail'),
+ ('Const_TableUsers_FieldPrivileged','UCPrivileged'),
+ ('Const_TableUsers_FieldTypeRec','UCTypeRec'),
+ ('Const_TableUsers_FieldProfile','UCProfile'),
+ ('Const_TableUsers_FieldKey','UCKey'),
+ ('Const_TableUsers_TableName','UCTabUsers'),
+ ('Const_TableUsers_FieldDateExpired','UCPASSEXPIRED'),
+ ('Const_TableUser_FieldUserExpired','UCUserExpired'),
+ ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'),
+ ('Const_TableUser_FieldUserInative','UCInative'),
+ ('Const_TableRights_FieldUserID','UCIdUser'),
+ ('Const_TableRights_FieldModule','UCModule'),
+ ('Const_TableRights_FieldComponentName','UCCompName'),
+ ('Const_TableRights_FieldFormName','UCFormName'),
+ ('Const_TableRights_FieldKey','UCKey'),
+ ('Const_TableRights_TableName','UCTabRights'),
+ ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'),
+ ('Const_TableUsersLogged_FieldUserID','UCIdUser'),
+ ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'),
+ ('Const_TableUsersLogged_FieldMachineName','UCMachineName'),
+ ('Const_TableUsersLogged_FieldData','UCData'),
+ ('Const_TableUsersLogged_TableName','UCTabUsersLogged'),
+ ('Const_Evento_Insert','Inserido'),
+ ('Const_Evento_Delete','Apagado'),
+ ('Const_Evento_Edit','Editado'),
+ ('Const_Evento_NewRecord','Novo registro'),
+ ('Const_Hist_All','Todos'),
+ ('Const_Msg_LimpHistorico','Excluir todo o conteúdo do histórico ?'),
+ ('Const_Msg_MensConfirma','Confirmação'),
+ ('Const_Msg_LogEmptyHistory','Usuário %s apagou todo o histórico as %s'),
+ ('Const_LabelDescricao','Histórico de tabelas'),
+ ('Const_LabelUser','Usuário'),
+ ('Const_LabelForm','Formulário'),
+ ('Const_LabelEvento','Evento'),
+ ('Const_LabelTabela','Tabela'),
+ ('Const_LabelDataEvento','Data'),
+ ('Const_LabelHoraEvento','Hora'),
+ ('Const_Msg_NewRecord','%s inseriu um novo registro'),
+ ('Const_Hist_TableName','UCTABHistory'),
+ ('Const_Hist_FieldApplicationID','ApplicationID'),
+ ('Const_Hist_FieldUserID','UserID'),
+ ('Const_Hist_FieldEventDate','EventDate'),
+ ('Const_Hist_FieldEventTime','EventTime'),
+ ('Const_Hist_FieldForm','Form'),
+ ('Const_Hist_FieldCaptionForm','FormCaption'),
+ ('Const_Hist_FieldEvent','Event'),
+ ('Const_Hist_FieldObs','Obs'),
+ ('Const_Hist_FieldTableName','tName'),
+ ('Const_Hist_MsgExceptPropr','Favor informar a propriedade %s'),
+ ('Const_Hist_BtnFiltro','&Aplicar Filtro'),
+ ('Const_Hist_BtnExcluir','&Excluir Histórico'),
+ ('Const_Hist_BtnFechar','&Fechar'),
+
+ ('Const_UserLogged_BtnMsg','&Mensagem'),
+ ('Const_UserLogged_Refresh','&Atualizar'),
+ ('Const_UserLogged_LabelDescricao','Usuários Logados'),
+ ('Const_UserLogged_LabelCaption','Usuários Logados no sistema'),
+ ('Const_CadColuna_Computer','Computador'),
+ ('Const_CadColuna_Data','Data'),
+ ('Const_UserLogged_InputCaption','Mensagem'),
+ ('Const_UserLogged_InputText','Digite sua mensagem'),
+ ('Const_UserLogged_MsgSystem','Mensagem do sistema'),
+ ('Const_Men_LoginInativo','Atenção, seu login esta inativo'),
+ ('Const_Inc_LabelStatus','Status'),
+ ('Const_Inc_StatusActive','Ativo'),
+ ('Const_Inc_StatusDisabled','Inativo')
+ );
+
+{------------------------------------------------------------------------------ }
+
+Const UC_ENGLISH : Array [0..MaxArray,0..1] of string = (
+ ('Const_Contr_TitleLabel','Team of Components of the Form. :'),
+ ('Const_Contr_GroupLabel','Group:'),
+ ('Const_Contr_CompDispLabel','Available components:'),
+ ('Const_Contr_CompSelLabel','Selected components:'),
+ ('Const_Contr_BtOK','&OK'),
+ ('Const_Contr_BTCancel','&Cancel'),
+ ('Const_Contr_DescCol','Description'),
+ ('Const_Contr_BtSellAllHint','Select All'),
+ ('Const_Contr_BtSelHint','Select'),
+ ('Const_Contr_BtUnSelHint','Unselect'),
+ ('Const_Contr_BtUnSelAllHint','Unselect All'),
+ ('Const_Msgs_BtNew','&New Message'),
+ ('Const_Msgs_BtReplay','&Replay'),
+ ('Const_Msgs_BtForward','F&orward'),
+ ('Const_Msgs_BtDelete','&Delete'),
+ ('Const_Msgs_BtClose','&Close'),
+ ('Const_Msgs_WindowCaption','Messages of the System'),
+ ('Const_Msgs_ColFrom','From'),
+ ('Const_Msgs_ColSubject','Subject'),
+ ('Const_Msgs_ColDate','Date'),
+ ('Const_Msgs_PromptDelete','It confirms exclusion of the selected messages?'),
+ ('Const_Msgs_PromptDelete_WindowCaption','Delete messages'),
+ ('Const_Msgs_NoMessagesSelected','No Messages selected'),
+ ('Const_Msgs_NoMessagesSelected_WindowCaption','Information'),
+ ('Const_MsgRec_BtClose','&Close'),
+ ('Const_MsgRec_WindowCaption','Message'),
+ ('Const_MsgRec_Title','Received message'),
+ ('Const_MsgRec_LabelFrom','From:'),
+ ('Const_MsgRec_LabelDate','Date'),
+ ('Const_MsgRec_LabelSubject','Subject'),
+ ('Const_MsgRec_LabelMessage','Message'),
+ ('Const_MsgSend_BtSend','&Send'),
+ ('Const_MsgSend_BtCancel','&Cancel'),
+ ('Const_MsgSend_WindowCaption','Message'),
+ ('Const_MsgSend_Title','Send New Message'),
+ ('Const_MsgSend_GroupTo','To'),
+ ('Const_MsgSend_RadioUser','User:'),
+ ('Const_MsgSend_RadioAll','All'),
+ ('Const_MsgSend_GroupMessage','Message'),
+ ('Const_MsgSend_LabelSubject','Subject'),
+ ('Const_MsgSend_LabelMessageText','Message text'),
+ ('MsgExceptConnection','Done not informed the Connection, Transaction or Database component %s'),
+ ('MsgExceptTransaction','Done not informed the Transaction component %s'),
+ ('MsgExceptDatabase','Done not informed the Database do component %s'),
+ ('MsgExceptPropriedade','Inform the property %s'),
+ ('MsgExceptUserMngMenu','Inform in the property UsersForm.MenuItem or UsersForm.Action the item responsible for the users control'),
+ ('MsgExceptUserProfile','Inform in the property UsersProfile.MenuItem or UsersProfile.Action the Item responsible for the control of users Profile '),
+ ('MsgExceptChagePassMenu','Inform in the property ChangePasswordForm.MenuItem or .Action the Item that allows to a user to alter his password'),
+ ('MsgExceptAppID','In the property "ApplicationID" inform a name to identify the application in the chart of permissions'),
+ ('MsgExceptUsersTable','In the property "TableUsers" inform the name of the chart that will be created to store the data of the users '),
+ ('MsgExceptRightsTable','In the property "TableRights" inform the name of the chart that will be created to store the permissions of the users '),
+ ('MsgExceptConnector','The property DataConnector not defined!'),
+ ('Const_Men_AutoLogonError','Fault of Car Logon !' + #13 + #10 + 'Inform a valid user and password.'),
+ ('Const_Men_SenhaDesabitada','Retired password of the Login %s'),
+ ('Const_Men_SenhaAlterada','Password altered with success!'),
+ ('Const_Men_MsgInicial','ATTENTION, Inicial Login :' + #13 + #10 + #13 + #10 + 'User: :user' + #13 + #10 + 'Password : :password '+ #13 + #10 + #13 + #10 + 'Define the permissions for this user.'),
+ ('Const_Men_MaxTentativas','%d Attempts of login invalid. By reasons of security the system will be closed.'),
+ ('Const_Men_LoginInvalido','User invalids or password !'),
+ ('Const_Men_UsuarioExiste','The User "%s" is already set up in the system !!'),
+ ('Const_Men_PasswordExpired','Attention, his sign died, favor exchanges it '),
+ ('Const_Log_BtCancelar','&Cancel'),
+ ('Const_Log_BtOK','&OK'),
+ ('Const_Log_LabelSenha','Password :'),
+ ('Const_Log_LabelUsuario','User :'),
+ ('Const_Log_WindowCaption','Login'),
+ ('Const_Log_LbEsqueciSenha','I forgot the password'),
+ ('Const_Log_MsgMailSend','The password was sent for his email .'),
+ ('Const_Log_LabelTentativa','Attempt : '),
+ ('Const_Log_LabelTentativas','Max of Attempts: '),
+ ('Const_LogC_WindowCaption','Security'),
+ ('Const_LogC_LabelDescricao','Log of system'),
+ ('Const_LogC_LabelUsuario','User :'),
+ ('Const_LogC_LabelData','Date :'),
+ ('Const_LogC_LabelNivel','Least level:'),
+ ('Const_LogC_ColunaAppID','AppID'),
+ ('Const_LogC_ColunaNivel','Level '),
+ ('Const_LogC_ColunaMensagem','Message'),
+ ('Const_LogC_ColunaUsuario','User'),
+ ('Const_LogC_ColunaData','Date'),
+ ('Const_LogC_BtFiltro','&Apply Filter'),
+ ('Const_LogC_BtExcluir','&Erase Log'),
+ ('Const_LogC_BtFechar','&Close'),
+ ('Const_LogC_ConfirmaExcluir','It confirms to exclude all the registers of log selected ?'),
+ ('Const_LogC_ConfirmaDelete_WindowCaption','Delete confirmation'),
+ ('Const_LogC_Todos','All'),
+ ('Const_LogC_Low','Low'),
+ ('Const_LogC_Normal','Normal'),
+ ('Const_LogC_High','High'),
+ ('Const_LogC_Critic','Critic'),
+ ('Const_LogC_ExcluirEfectuada','Deletion of system log done: User = "%s" | Date = %s a %s | Level <= %s'),
+ ('Const_Cad_WindowCaption','Security'),
+ ('Const_Cad_LabelDescricao','Users register '),
+ ('Const_Cad_ColunaNome','Name'),
+ ('Const_Cad_ColunaLogin','Login'),
+ ('Const_Cad_ColunaEmail','Email'),
+ ('Const_Cad_BtAdicionar','&Add'),
+ ('Const_Cad_BtAlterar','A<er'),
+ ('Const_Cad_BtExcluir','&Erase'),
+ ('Const_Cad_BtPermissoes','A&ccesses'),
+ ('Const_Cad_BtSenha','&Password'),
+ ('Const_Cad_BtFechar','&Close'),
+ ('Const_Cad_ConfirmaExcluir','Confirm erase the user "%s" ?'),
+ ('Const_Cad_ConfirmaDelete_WindowCaption','Delete user'),
+ ('Const_Prof_WindowCaption','Security'),
+ ('Const_Prof_LabelDescricao','Users profile '),
+ ('Const_Prof_ColunaNome','Profile'),
+ ('Const_Prof_BtAdicionar','&Add'),
+ ('Const_Prof_BtAlterar','A<er'),
+ ('Const_Prof_BtExcluir','&Delete'),
+ ('Const_Prof_BtPermissoes','A&ccesses'),
+ ('Const_Prof_BtSenha','&Password'),
+ ('Const_Prof_BtFechar','&Close'),
+ ('Const_Prof_ConfirmaExcluir','There are users with the profile "%s". Confirm erase ?'),
+ ('Const_Prof_ConfirmaDelete_WindowCaption','Delete profile'),
+ ('Const_Inc_WindowCaption','Users register '),
+ ('Const_Inc_LabelAdicionar','Add User'),
+ ('Const_Inc_LabelAlterar','Change User'),
+ ('Const_Inc_LabelNome','Name :'),
+ ('Const_Inc_LabelLogin','Login :'),
+ ('Const_Inc_LabelEmail','Email :'),
+ ('Const_Inc_LabelPerfil','Profile :'),
+ ('Const_Inc_CheckPrivilegiado','Privileged user '),
+ ('Const_Inc_BtGravar','&Save'),
+ ('Const_Inc_BtCancelar','Cancel'),
+ ('Const_Inc_CheckEspira','Password do not expired'),
+ ('Const_Inc_Dia','Day'),
+ ('Const_Inc_ExpiraEm','Expired in'),
+ ('Const_PInc_WindowCaption','Profile the Users'),
+ ('Const_PInc_LabelAdicionar','Add Profile'),
+ ('Const_PInc_LabelAlterar','Change Profile '),
+ ('Const_PInc_LabelNome','Description :'),
+ ('Const_PInc_BtGravar','&Save'),
+ ('Const_PInc_BtCancelar','Cancel'),
+ ('Const_Perm_WindowCaption','Security'),
+ ('Const_Perm_LabelUsuario','Permissions of the User :'),
+ ('Const_Perm_LabelPerfil','Permissions of the Profile :'),
+ ('Const_Perm_PageMenu','Items of the Menu'),
+ ('Const_Perm_PageActions','Actions'),
+ ('Const_Perm_PageControls','Controls'),
+ ('Const_Perm_BtLibera','&Release'),
+ ('Const_Perm_BtBloqueia','&Block'),
+ ('Const_Perm_BtGravar','&Save'),
+ ('Const_Perm_BtCancelar','&Cancel'),
+ ('Const_Troc_WindowCaption','Security'),
+ ('Const_Troc_LabelDescricao','Change Password'),
+ ('Const_Troc_LabelSenhaAtual','Password :'),
+ ('Const_Troc_LabelNovaSenha','New Password :'),
+ ('Const_Troc_LabelConfirma','Confirmation :'),
+ ('Const_Troc_BtGravar','&Save'),
+ ('Const_Troc_BtCancelar','Cancel'),
+ ('Const_ErrPass_SenhaAtualInvalida','Current password does not tally!'),
+ ('Const_ErrPass_ErroNovaSenha','The Field: New Password and Confirmation must be the same.'),
+ ('Const_ErrPass_NovaIgualAtual','New equal password to current password '),
+ ('Const_ErrPass_SenhaObrigatoria','The password is compulsory '),
+ ('Const_ErrPass_SenhaMinima','The password must contain at least %d characters '),
+ ('Const_ErrPass_SenhaInvalida','When to use password was prohibited you obviate !'),
+ ('Const_ErrPass_ForcaTrocaSenha','Compulsory change password'),
+ ('Const_DefPass_WindowCaption','Define Password of the user : "%s"'),
+ ('Const_DefPass_LabelSenha','Password :'),
+ ('Const_TableUsers_FieldUserID','UCIdUser'),
+ ('Const_TableUsers_FieldUserName','UCUserName'),
+ ('Const_TableUsers_FieldLogin','UCLogin'),
+ ('Const_TableUsers_FieldPassword','UCPassword'),
+ ('Const_TableUsers_FieldEmail','UCEmail'),
+ ('Const_TableUsers_FieldPrivileged','UCPrivileged'),
+ ('Const_TableUsers_FieldTypeRec','UCTypeRec'),
+ ('Const_TableUsers_FieldProfile','UCProfile'),
+ ('Const_TableUsers_FieldKey','UCKey'),
+ ('Const_TableUsers_TableName','UCTabUsers'),
+ ('Const_TableUsers_FieldDateExpired','UCPassExpired'),
+ ('Const_TableUser_FieldUserExpired','UCUserExpired'),
+ ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'),
+ ('Const_TableUser_FieldUserInative','UCInative'),
+ ('Const_TableRights_FieldUserID','UCIdUser'),
+ ('Const_TableRights_FieldModule','UCModule'),
+ ('Const_TableRights_FieldComponentName','UCCompName'),
+ ('Const_TableRights_FieldFormName','UCFormName'),
+ ('Const_TableRights_FieldKey','UCKey'),
+ ('Const_TableRights_TableName','UCTabRights'),
+ ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'),
+ ('Const_TableUsersLogged_FieldUserID','UCIdUser'),
+ ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'),
+ ('Const_TableUsersLogged_FieldMachineName','UCMachineName'),
+ ('Const_TableUsersLogged_FieldData','UCData'),
+ ('Const_TableUsersLogged_TableName','UCTabUsersLogged'),
+ ('Const_Evento_Insert','Insert'),
+ ('Const_Evento_Delete','Delete'),
+ ('Const_Evento_Edit','Edit'),
+ ('Const_Evento_NewRecord','New record'),
+ ('Const_Hist_All','All'),
+ ('Const_Msg_LimpHistorico','Clean table history ?'),
+ ('Const_Msg_MensConfirma','Confirm'),
+ ('Const_Msg_LogEmptyHistory','User %s erase table history in %s'),
+ ('Const_LabelDescricao','History of Tables'),
+ ('Const_LabelUser','User'),
+ ('Const_LabelForm','Form'),
+ ('Const_LabelEvento','Event'),
+ ('Const_LabelTabela','Table'),
+ ('Const_LabelDataEvento','Date'),
+ ('Const_LabelHoraEvento','Time'),
+ ('Const_Msg_NewRecord','%s insert new record'),
+
+ ('Const_Hist_TableName','UCTABHistory'),
+ ('Const_Hist_FieldApplicationID','ApplicationID'),
+ ('Const_Hist_FieldUserID','UserID'),
+ ('Const_Hist_FieldEventDate','EventDate'),
+ ('Const_Hist_FieldEventTime','EventTime'),
+ ('Const_Hist_FieldForm','Form'),
+ ('Const_Hist_FieldCaptionForm','FormCaption'),
+ ('Const_Hist_FieldEvent','Event'),
+ ('Const_Hist_FieldObs','Obs'),
+ ('Const_Hist_FieldTableName','tName'),
+ ('Const_Hist_MsgExceptPropr','Inform the property %s'),
+ ('Const_Hist_BtnFiltro','&Apply Filter'),
+ ('Const_Hist_BtnExcluir','&Erase History'),
+ ('Const_Hist_BtnFechar','&Close'),
+
+ ('Const_UserLogged_BtnMsg','&Message'),
+ ('Const_UserLogged_Refresh','&Refresh'),
+ ('Const_UserLogged_LabelDescricao','Active users'),
+ ('Const_UserLogged_LabelCaption','Active users in the System'),
+ ('Const_CadColuna_Computer','Computer'),
+ ('Const_CadColuna_Data','Date'),
+ ('Const_UserLogged_InputCaption','Message'),
+ ('Const_UserLogged_InputText','Input your message'),
+ ('Const_UserLogged_MsgSystem','Message of system'),
+ ('Const_Men_LoginInativo','Inactive login'),
+ ('Const_Inc_LabelStatus','Status'),
+ ('Const_Inc_StatusActive','Active'),
+ ('Const_Inc_StatusDisabled','Disabled')
+
+ );
+
+{------------------------------------------------------------------------------ }
+
+Const UC_SPANISH : Array [0..MaxArray,0..1] of string = (
+ ('Const_Contr_TitleLabel','Seleccionar Componentes del Formulario:'),
+ ('Const_Contr_GroupLabel','Grupo:'),
+ ('Const_Contr_CompDispLabel','Componentes Disponibles:'),
+ ('Const_Contr_CompSelLabel','Componentes Seleccionados:'),
+ ('Const_Contr_BtOK','&Aceptar'),
+ ('Const_Contr_BTCancel','&Cancelar'),
+ ('Const_Contr_DescCol','Descripción'),
+ ('Const_Contr_BtSellAllHint','Seleccionar Todo'),
+ ('Const_Contr_BtSelHint','Seleccionar'),
+ ('Const_Contr_BtUnSelHint','Deseleccionar'),
+ ('Const_Contr_BtUnSelAllHint','Deseleccionar Todo'),
+ ('Const_Msgs_BtNew','&Nuevo Mensaje'),
+ ('Const_Msgs_BtReplay','&Responder'),
+ ('Const_Msgs_BtForward','&Reenviar'),
+ ('Const_Msgs_BtDelete','&Borrar'),
+ ('Const_Msgs_BtClose','&Cerrar'),
+ ('Const_Msgs_WindowCaption','Mensajes de Sistema'),
+ ('Const_Msgs_ColFrom','Remitente'),
+ ('Const_Msgs_ColSubject','Asunto'),
+ ('Const_Msgs_ColDate','Fecha'),
+ ('Const_Msgs_PromptDelete','¿Está seguro de eliminar los mensajes seleccionados?'),
+ ('Const_Msgs_PromptDelete_WindowCaption','Eliminar mensajes'),
+ ('Const_Msgs_NoMessagesSelected','!Ningún mensaje seleccionado¡'),
+ ('Const_Msgs_NoMessagesSelected_WindowCaption','Información'),
+ ('Const_MsgRec_BtClose','&Cerrar'),
+ ('Const_MsgRec_WindowCaption','Mensaje'),
+ ('Const_MsgRec_Title','Mensaje Recibido'),
+ ('Const_MsgRec_LabelFrom','De:'),
+ ('Const_MsgRec_LabelDate','Fecha'),
+ ('Const_MsgRec_LabelSubject','Asunto'),
+ ('Const_MsgRec_LabelMessage','Mensaje'),
+ ('Const_MsgSend_BtSend','&Enviar'),
+ ('Const_MsgSend_BtCancel','&Cancelar'),
+ ('Const_MsgSend_WindowCaption','Mensaje'),
+ ('Const_MsgSend_Title','Enviar Nuevo Mensaje'),
+ ('Const_MsgSend_GroupTo','Para:'),
+ ('Const_MsgSend_RadioUser','Usuario:'),
+ ('Const_MsgSend_RadioAll','Todos'),
+ ('Const_MsgSend_GroupMessage','Mensaje'),
+ ('Const_MsgSend_LabelSubject','Asunto'),
+ ('Const_MsgSend_LabelMessageText','Texto del mensaje'),
+ ('MsgExceptConnection','¡Valor No Válido para la propiedad Connection del componente %s!'),
+ ('MsgExceptTransaction','¡Valor No Válido para la propiedad Transaction del componente %s!'),
+ ('MsgExceptDatabase','¡Valor No Válido para la propiedad Database del componente %s!'),
+ ('MsgExceptPropriedade','Favor informar a propriedade %s'),
+ ('MsgExceptUserMngMenu','Ingrese en la propiedad UsersForm.MenuItem o UsersForm.Action la opción del menu para abrir el Control de Usuarios'),
+ ('MsgExceptUserProfile','Ingrese en la propiedad UsersProfile.MenuItem o UsersProfile.Action la opción del menu para abrir el Perfil de Usuarios'),
+ ('MsgExceptChagePassMenu','Ingrese en la propiedad ChangePasswordForm.MenuItem o .Action la opción del menú que permite al usuario cambiar su Contraseña'),
+ ('MsgExceptAppID','La propiedad ApplicationID requiere el nombre válido de una tabla para el registro de los Permisos de Usuario'),
+ ('MsgExceptUsersTable','La propiedad UserTable requiere el nombre válido de una tabla para registrar/seleccionar los datos de los usuarios'),
+ ('MsgExceptRightsTable','La propiead RightTable requiere el nombre válido de una tabla para registrar/seleccionar los permisos de los usuarios'),
+ ('MsgExceptConnector','Propriedade DataConnector não definida!'),
+ ('Const_Men_AutoLogonError','Error de Ingreso Automático!'+#13+#10+ 'Especifique un Usuario y Contraseña Válidos.'),
+ ('Const_Men_SenhaDesabitada','Contraseña vacía para el Usuario %s'),
+ ('Const_Men_SenhaAlterada','¡Se ha cambiado la Contraseña con éxito!'),
+ ('Const_Men_MsgInicial','ATENCION! Conección Inicial:'+#13+#10+#13+#10+'Usuario : :user'+#13+#10+'Contraseña : :password'+#13+#10+#13+#10+'Defina permisos para este usuario'),
+ ('Const_Men_MaxTentativas','%d Intentos de conección inválidos !'),
+ ('Const_Men_LoginInvalido','Usuario y/o Contraseña Incorrectos!'),
+ ('Const_Men_UsuarioExiste','O Usuário "%s" já está cadastrado no sistema !!'),
+ ('Const_Men_PasswordExpired','Atenção, sua senha expirou, favor troca-la'),
+ ('Const_Log_BtCancelar','&Cancelar'),
+ ('Const_Log_BtOK','Aceptar'),
+ ('Const_Log_LabelSenha','Contraseña:'),
+ ('Const_Log_LabelUsuario','Usuario: '),
+ ('Const_Log_WindowCaption','Conección'),
+ ('Const_Log_LbEsqueciSenha','Olvidé mi Contraseña'),
+ ('Const_Log_MsgMailSend','La contraseña fue enviada a su correo.'),
+ ('Const_Log_LabelTentativa','Tentativa : '),
+ ('Const_Log_LabelTentativas','Máximo de Tentativas : '),
+ ('Const_LogC_WindowCaption','Seguridad'),
+ ('Const_LogC_LabelDescricao','Visor de Eventos'),
+ ('Const_LogC_LabelUsuario','Usuario:'),
+ ('Const_LogC_ColunaAppID','AppID'),
+ ('Const_LogC_LabelData','Fecha:'),
+ ('Const_LogC_LabelNivel','Nivel Mínimo: '),
+ ('Const_LogC_ColunaNivel','Nivel'),
+ ('Const_LogC_ColunaMensagem','Mensaje'),
+ ('Const_LogC_ColunaUsuario','Usuario'),
+ ('Const_LogC_ColunaData','Fecha'),
+ ('Const_LogC_BtFiltro','&Aplicar Filtro'),
+ ('Const_LogC_BtExcluir','&Borrar Bitácora'),
+ ('Const_LogC_BtFechar','&Cerrar'),
+ ('Const_LogC_ConfirmaExcluir','¿Está seguro de Eliminar todos todos los registros de Bitácora seleccionados?'),
+ ('Const_LogC_ConfirmaDelete_WindowCaption','Confirmación'),
+ ('Const_LogC_Todos','Todos'),
+ ('Const_LogC_Low','Bajo'),
+ ('Const_LogC_Normal','Normal'),
+ ('Const_LogC_High','Alto'),
+ ('Const_LogC_Critic','Crítico'),
+ ('Const_LogC_ExcluirEfectuada','Borrado de registros de bitácora realizado: Usuario = "%s" | Fecha = %s a %s | Nivel <= %s'),
+ ('Const_Cad_WindowCaption','Seguridad'),
+ ('Const_Cad_LabelDescricao','Administración de Usuarios'),
+ ('Const_Cad_ColunaNome','Nombre'),
+ ('Const_Cad_ColunaLogin','Usuario'),
+ ('Const_Cad_ColunaEmail','Correo'),
+ ('Const_Cad_BtAdicionar','&Nuevo'),
+ ('Const_Cad_BtAlterar','&Editar'),
+ ('Const_Cad_BtExcluir','E&liminar'),
+ ('Const_Cad_BtPermissoes','&Accesos'),
+ ('Const_Cad_BtSenha','C&ontraseña'),
+ ('Const_Cad_BtFechar','&Cerrar'),
+ ('Const_Cad_ConfirmaExcluir','¿Está seguro de Eliminar al Usuario "%s"?'),
+ ('Const_Cad_ConfirmaDelete_WindowCaption','Eliminar usuario'),
+ ('Const_Prof_WindowCaption','Seguridad'),
+ ('Const_Prof_LabelDescricao','Perfil de Usuario'),
+ ('Const_Prof_ColunaNome','Perfil'),
+ ('Const_Prof_BtAdicionar','&Nuevo'),
+ ('Const_Prof_BtAlterar','&Editar'),
+ ('Const_Prof_BtExcluir','E&liminar'),
+ ('Const_Prof_BtPermissoes','&Accesos'),
+ ('Const_Prof_BtSenha','C&ontraseña'),
+ ('Const_Prof_BtFechar','&Cerrar'),
+ ('Const_Prof_ConfirmaExcluir','Existe(n) usuario(s) con el Perfil "%s". ¿Está seguro de eliminar el perfil?'),
+ ('Const_Prof_ConfirmaDelete_WindowCaption','Eliminar perfil'),
+ ('Const_Inc_WindowCaption','Administración de Usuarios'),
+ ('Const_Inc_LabelAdicionar','Nuevo Usuario'),
+ ('Const_Inc_LabelAlterar','Editar Usuario'),
+ ('Const_Inc_LabelNome','Nombre:'),
+ ('Const_Inc_LabelLogin','Usuario: '),
+ ('Const_Inc_LabelEmail','Correo: '),
+ ('Const_Inc_LabelPerfil','Perfil: '),
+ ('Const_Inc_CheckPrivilegiado','Usuario Privilegiado'),
+ ('Const_Inc_BtGravar','&Guardar'),
+ ('Const_Inc_BtCancelar','Cancelar'),
+ ('Const_Inc_CheckEspira','Senha do usuário não expira'),
+ ('Const_Inc_Dia','Dias'),
+ ('Const_Inc_ExpiraEm','Expira em'),
+ ('Const_PInc_WindowCaption','Perfiles de Usuarios'),
+ ('Const_PInc_LabelAdicionar','Nuevo Perfil'),
+ ('Const_PInc_LabelAlterar','Editar Perfil'),
+ ('Const_PInc_LabelNome','Descripción: '),
+ ('Const_PInc_BtGravar','&Guardar'),
+ ('Const_PInc_BtCancelar','Cancelar'),
+ ('Const_Perm_WindowCaption','Seguridad'),
+ ('Const_Perm_LabelUsuario','Permisos de Usuario : '),
+ ('Const_Perm_LabelPerfil','Permisos del Perfil : '),
+ ('Const_Perm_PageMenu','Elementos del Menú'),
+ ('Const_Perm_PageActions','Acciones'),
+ ('Const_Perm_PageControls','Controles'),
+ ('Const_Perm_BtLibera','&Permitir'),
+ ('Const_Perm_BtBloqueia','&Bloquear'),
+ ('Const_Perm_BtGravar','&Guardar'),
+ ('Const_Perm_BtCancelar','&Cancelar'),
+ ('Const_Troc_WindowCaption','Seguridad'),
+ ('Const_Troc_LabelDescricao','Cambiar Contraseña'),
+ ('Const_Troc_LabelSenhaAtual','Contraseña Actual:'),
+ ('Const_Troc_LabelNovaSenha','Nueva Contraseña:'),
+ ('Const_Troc_LabelConfirma','Confirme Contraseña:'),
+ ('Const_Troc_BtGravar','&Guardar'),
+ ('Const_Troc_BtCancelar','Cancelar'),
+ ('Const_ErrPass_SenhaAtualInvalida','¡Contraseña Actual Incorrecta!'),
+ ('Const_ErrPass_ErroNovaSenha','Los campos Contraseña Nueva y Confirme Contraseña deben ser iguales'),
+ ('Const_ErrPass_NovaIgualAtual','Nueva Contraseña y Contraseña Actual deben ser diferentes'),
+ ('Const_ErrPass_SenhaObrigatoria','¡La Contraseña es obligatoria!'),
+ ('Const_ErrPass_SenhaMinima','La Contraseña debe tener un mínimo de %d caracteres'),
+ ('Const_ErrPass_SenhaInvalida','¡Prohibido utilizar contraseñas NO Seguras!'),
+ ('Const_ErrPass_ForcaTrocaSenha','Mudança de senha obrigatória'),
+ ('Const_DefPass_WindowCaption','Ingrese Contraseña de Usuario: "%s"'),
+ ('Const_DefPass_LabelSenha','Contraseña: '),
+ ('Const_TableUsers_FieldUserID','UCIdUser'),
+ ('Const_TableUsers_FieldUserName','UCUserName'),
+ ('Const_TableUsers_FieldLogin','UCLogin'),
+ ('Const_TableUsers_FieldPassword','UCPassword'),
+ ('Const_TableUsers_FieldEmail','UCEmail'),
+ ('Const_TableUsers_FieldPrivileged','UCPrivileged'),
+ ('Const_TableUsers_FieldTypeRec','UCTypeRec'),
+ ('Const_TableUsers_FieldProfile','UCProfile'),
+ ('Const_TableUsers_FieldKey','UCKey'),
+ ('Const_TableUsers_TableName','UCTabUsers'),
+ ('Const_TableUsers_FieldDateExpired','UCPASSEXPIRED'),
+ ('Const_TableUser_FieldUserExpired','UCUserExpired'),
+ ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'),
+ ('Const_TableUser_FieldUserInative','UCInative'),
+ ('Const_TableRights_FieldUserID','UCIdUser'),
+ ('Const_TableRights_FieldModule','UCModule'),
+ ('Const_TableRights_FieldComponentName','UCCompName'),
+ ('Const_TableRights_FieldFormName','UCFormName'),
+ ('Const_TableRights_FieldKey','UCKey'),
+ ('Const_TableRights_TableName','UCTabRights'),
+ ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'),
+ ('Const_TableUsersLogged_FieldUserID','UCIdUser'),
+ ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'),
+ ('Const_TableUsersLogged_FieldMachineName','UCMachineName'),
+ ('Const_TableUsersLogged_FieldData','UCData'),
+ ('Const_TableUsersLogged_TableName','UCTabUsersLogged'),
+ ('Const_Evento_Insert','Nuevo'),
+ ('Const_Evento_Delete','Eliminar'),
+ ('Const_Evento_Edit','Editar'),
+ ('Const_Evento_NewRecord','Nuevo registro'),
+ ('Const_Hist_All','Todos'),
+ ('Const_Msg_LimpHistorico','Excluir el contenido entero del histórico ?'),
+ ('Const_Msg_MensConfirma','Confirme'),
+ ('Const_Msg_LogEmptyHistory','El usuario %s borra la historia de mesa en %s '),
+ ('Const_LabelDescricao','Histórico de tabelas'),
+ ('Const_LabelUser','Usuario'),
+ ('Const_LabelForm','Formulário'),
+ ('Const_LabelEvento','Evento'),
+ ('Const_LabelTabela','Tabela'),
+ ('Const_LabelDataEvento','Data'),
+ ('Const_LabelHoraEvento','Hora'),
+ ('Const_Msg_NewRecord','%s Inserte el nuevo registro'),
+ ('Const_Hist_TableName','UCTABHistory'),
+ ('Const_Hist_FieldApplicationID','ApplicationID'),
+ ('Const_Hist_FieldUserID','UserID'),
+ ('Const_Hist_FieldEventDate','EventDate'),
+ ('Const_Hist_FieldEventTime','EventTime'),
+ ('Const_Hist_FieldForm','Form'),
+ ('Const_Hist_FieldCaptionForm','FormCaption'),
+ ('Const_Hist_FieldEvent','Event'),
+ ('Const_Hist_FieldObs','Obs'),
+ ('Const_Hist_FieldTableName','tName'),
+ ('Const_Hist_MsgExceptPropr','Por favor informe la propiedad %s'),
+ ('Const_Hist_BtnFiltro','&Aplicar Filtro'),
+ ('Const_Hist_BtnExcluir','&Borrar Histórico'),
+ ('Const_Hist_BtnFechar','&Cerrar'),
+
+ ('Const_UserLogged_BtnMsg','&Mensaje'),
+ ('Const_UserLogged_Refresh','&Restaure'),
+ ('Const_UserLogged_LabelDescricao','Usuarios activos'),
+ ('Const_UserLogged_LabelCaption','Usuarios activos en el sistema'),
+ ('Const_CadColuna_Computer','Computadora'),
+ ('Const_CadColuna_Data','Data'),
+ ('Const_UserLogged_InputCaption','Mensaje'),
+ ('Const_UserLogged_InputText','Entre su mensaje'),
+ ('Const_UserLogged_MsgSystem','Mensaje del sistema'),
+ ('Const_Men_LoginInativo','Atenção, seu login esta inativo'),
+ ('Const_Inc_LabelStatus','Status'),
+ ('Const_Inc_StatusActive','Ativo'),
+ ('Const_Inc_StatusDisabled','Inativo')
+
+ );
+
+{------------------------------------------------------------------------------ }
+
+Const UC_FRENCH : Array [0..MaxArray,0..1] of string = (
+ ('Const_Contr_TitleLabel','L''équipe de Composantes de la Forme :'),
+ ('Const_Contr_GroupLabel','Groupe :'),
+ ('Const_Contr_CompDispLabel','Composantes disponibles :'),
+ ('Const_Contr_CompSelLabel','Composantes choisies:'),
+ ('Const_Contr_BtOK','&OK'),
+ ('Const_Contr_BTCancel','&Annuler'),
+ ('Const_Contr_DescCol','Description'),//nao
+ ('Const_Contr_BtSellAllHint','Choisissez Tous'),
+ ('Const_Contr_BtSelHint','Choisir'),
+ ('Const_Contr_BtUnSelHint','No Choisir'),
+ ('Const_Contr_BtUnSelAllHint','Non choisissez Tous'),
+ ('Const_Msgs_BtNew','&Nouveau Message'),
+ ('Const_Msgs_BtReplay','&Rejeu'),
+ ('Const_Msgs_BtForward','Env&oyer'),
+ ('Const_Msgs_BtDelete','&Effacer'),
+ ('Const_Msgs_BtClose','&Près'),
+ ('Const_Msgs_WindowCaption','Messages du Système'),
+ ('Const_Msgs_ColFrom','De'),
+ ('Const_Msgs_ColSubject','Sujet'),
+ ('Const_Msgs_ColDate','Date'), //nao
+ ('Const_Msgs_PromptDelete','Il confirme l''exclusion des messages choisis ?'),
+ ('Const_Msgs_PromptDelete_WindowCaption','Effacez des messages'),
+ ('Const_Msgs_NoMessagesSelected','Aucun Message choisi'),
+ ('Const_Msgs_NoMessagesSelected_WindowCaption','Renseignements'),
+ ('Const_MsgRec_BtClose','&Près'),
+ ('Const_MsgRec_WindowCaption','Message'),
+ ('Const_MsgRec_Title','Message reçu'),
+ ('Const_MsgRec_LabelFrom','De:'),
+ ('Const_MsgRec_LabelDate','Date'),
+ ('Const_MsgRec_LabelSubject','Sujet'),
+ ('Const_MsgRec_LabelMessage','Message'),
+ ('Const_MsgSend_BtSend','&Envoyer'),
+ ('Const_MsgSend_BtCancel','&Annuler'),
+ ('Const_MsgSend_WindowCaption','Message'),
+ ('Const_MsgSend_Title','Envoyez le Nouveau Message'),
+ ('Const_MsgSend_GroupTo','À'),
+ ('Const_MsgSend_RadioUser','Utilisateur:'),
+ ('Const_MsgSend_RadioAll','Tous'),
+ ('Const_MsgSend_GroupMessage','Message'),
+ ('Const_MsgSend_LabelSubject','Sujet'),
+ ('Const_MsgSend_LabelMessageText','Texte de message'),
+ ('MsgExceptConnection','Fait non informé la Connexion, la Transaction ou la composante de Base de données %s'),
+ ('MsgExceptTransaction','Fait non informé la composante Transactionnelle %s'),
+ ('MsgExceptDatabase','Fait non informé la Base de données font la composante %s'),
+ ('MsgExceptPropriedade','Informez la propriété %s'),
+ ('MsgExceptUserMngMenu','Informez la propriété UsersForm.MenuItem ou UsersForm.Action l''article responsable du contrôle d''utilisateurs '),
+ ('MsgExceptUserProfile','Informez la propriété UsersProfile.MenuItem ou UsersProfile.Action l''Article responsable du contrôle de Profil d''utilisateurs'),
+ ('MsgExceptChagePassMenu','Informez la propriété ChangePasswordForm.MenuItem ou .Action l''Article qui permet à un utilisateur de changer son mot de passe'),
+ ('MsgExceptAppID','Dans la propriété "ApplicationID" informent un nom pour identifier l''application dans le graphique de permissions'),
+ ('MsgExceptUsersTable','Dans la propriété "TableUsers" informent le nom du graphique qui sera créé pour conserver les données des utilisateurs'),
+ ('MsgExceptRightsTable','Dans la propriété "TableRights" informent le nom du graphique qui sera créé pour conserver les permissions des utilisateurs'),
+ ('MsgExceptConnector','La propriété "DataConnector" non défini!'),
+ ('Const_Men_AutoLogonError','Faute de Début de transaction Automobile!' + #13 + #10 + 'Informez un utilisateur valide et un mot de passe.'),
+ ('Const_Men_SenhaDesabitada','Mot de passe retraité de l''Ouverture de session %s'),
+ ('Const_Men_SenhaAlterada','Le mot de passe changeait avec le succès!'),
+ ('Const_Men_MsgInicial','ATTENTION, Ouverture de session d''Inicial :' + #13 + #10 + #13 + #10 + 'Utilisateur : :user + '#13 + #10 + 'Mot de passe : :password ' + #13 + #10 + #13 + #10 + 'Définissez les permissions pour cet utilisateur.'),
+ ('Const_Men_MaxTentativas','%d Essais d''infirme d''ouverture de session. Par les raisons de sécurité le système sera fermé.'),
+ ('Const_Men_LoginInvalido','L''utilisateur devient infirme ou le mot de passe!'),
+ ('Const_Men_UsuarioExiste','L''Utilisateur "%s" est déjà remis sur pied dans le système !!'),
+ ('Const_Men_PasswordExpired','L''attention, son signe est mort, la faveur l''échange '),
+ ('Const_Log_BtCancelar','&Annuler'),
+ ('Const_Log_BtOK','&OK'),
+ ('Const_Log_LabelSenha','Passe :'),
+ ('Const_Log_LabelUsuario','Utilisateur :'),
+ ('Const_Log_WindowCaption','Ouverture de session'),
+ ('Const_Log_LbEsqueciSenha','J''ai oublié le mot de passe'),
+ ('Const_Log_MsgMailSend','le mot de passe a été envoyé pour son courrier électronique .'),
+ ('Const_Log_LabelTentativa','Essais : '),
+ ('Const_Log_LabelTentativas','Max d''Essais : '),
+ ('Const_LogC_WindowCaption','sécurité'),
+ ('Const_LogC_LabelDescricao','Rondin de système'),
+ ('Const_LogC_LabelUsuario','Utilisateur :'),
+ ('Const_LogC_LabelData','Date :'),
+ ('Const_LogC_LabelNivel','La moindre partie de niveau:'),
+ ('Const_LogC_ColunaAppID','AppID'),
+ ('Const_LogC_ColunaNivel','Niveau '),
+ ('Const_LogC_ColunaMensagem','Message'),
+ ('Const_LogC_ColunaUsuario','Utilisateur'),
+ ('Const_LogC_ColunaData','Date'),
+ ('Const_LogC_BtFiltro','&Appliquez le Filtre'),
+ ('Const_LogC_BtExcluir','&Effacez le Rondin'),
+ ('Const_LogC_BtFechar','&Près'),
+ ('Const_LogC_ConfirmaExcluir','Il confirme pour exclure tous les registres de rondin choisi?'),
+ ('Const_LogC_ConfirmaDelete_WindowCaption','Effacez la confirmation '),
+ ('Const_LogC_Todos','Tous'),
+ ('Const_LogC_Low','Bas'),
+ ('Const_LogC_Normal','Normal'),
+ ('Const_LogC_High','Haut'),
+ ('Const_LogC_Critic','Critique'),
+ ('Const_LogC_ExcluirEfectuada','L''effacement de rondin de système fait : Utilisateur = "%s" | Date = %s a %s | Niveau <= %s'),
+ ('Const_Cad_WindowCaption','Sécurité'),
+ ('Const_Cad_LabelDescricao','Les utilisateurs s''inscrivent'),
+ ('Const_Cad_ColunaNome','Nom'),
+ ('Const_Cad_ColunaLogin','Utilisateur'),
+ ('Const_Cad_ColunaEmail','Courrier Électronique'),
+ ('Const_Cad_BtAdicionar','&Ajouter'),
+ ('Const_Cad_BtAlterar','Ch&anger'),
+ ('Const_Cad_BtExcluir','&Effacer'),
+ ('Const_Cad_BtPermissoes','A&pproches'),
+ ('Const_Cad_BtSenha','&Passe'),
+ ('Const_Cad_BtFechar','&Près' ),
+ ('Const_Cad_ConfirmaExcluir','Confirmez effacent l''utilisateur "%s" ?'),
+ ('Const_Cad_ConfirmaDelete_WindowCaption','Effacez l''utilisateur '),
+ ('Const_Prof_WindowCaption','Sécurité'),
+ ('Const_Prof_LabelDescricao','Les utilisateurs dressent le portrait'),
+ ('Const_Prof_ColunaNome','Profile'),
+ ('Const_Prof_BtAdicionar','&Ajouter'),
+ ('Const_Prof_BtAlterar','&Ajouter'),
+ ('Const_Prof_BtExcluir','&Effacer'),
+ ('Const_Prof_BtPermissoes','A&pproches'),
+ ('Const_Prof_BtSenha','&Passe'),
+ ('Const_Prof_BtFechar','&Près'),
+ ('Const_Prof_ConfirmaExcluir','Il y a des utilisateurs avec le profil "%s". Confirmez effacent ?'),
+ ('Const_Prof_ConfirmaDelete_WindowCaption','Effacez le profil'),
+ ('Const_Inc_WindowCaption','Les utilisateurs s''inscrivent '),
+ ('Const_Inc_LabelAdicionar','Ajouter utilisateurs'),
+ ('Const_Inc_LabelAlterar','Changer utilisateurs'),
+ ('Const_Inc_LabelNome','Nom :'),
+ ('Const_Inc_LabelLogin','Login :'),
+ ('Const_Inc_LabelEmail','Courrier Électronique :'),
+ ('Const_Inc_LabelPerfil','Profil :'),
+ ('Const_Inc_CheckPrivilegiado','Utilisateur privilégié'),
+ ('Const_Inc_BtGravar','&Sauver'),
+ ('Const_Inc_BtCancelar','Annuler'),
+ ('Const_Inc_CheckEspira','Le mot de passe ne fait pas expiré'),
+ ('Const_Inc_Dia','Jour'),
+ ('Const_Inc_ExpiraEm','Expiré dans'),
+ ('Const_PInc_WindowCaption','Dressez le portrait des Utilisateurs'),
+ ('Const_PInc_LabelAdicionar','Ajouter Profil'),
+ ('Const_PInc_LabelAlterar','Ajouter Profil '),
+ ('Const_PInc_LabelNome','Description :'),
+ ('Const_PInc_BtGravar','&Sauver'),
+ ('Const_PInc_BtCancelar','Annuler'),
+ ('Const_Perm_WindowCaption','Sécurité'),
+ ('Const_Perm_LabelUsuario','Permissions de l''Utilisateur :'),
+ ('Const_Perm_LabelPerfil','Permissions de l'' Profil :'),
+ ('Const_Perm_PageMenu','Articles du Menu'),
+ ('Const_Perm_PageActions','Actions'),
+ ('Const_Perm_PageControls','Controls'),
+ ('Const_Perm_BtLibera','&Libération'),
+ ('Const_Perm_BtBloqueia','&Bloc'),
+ ('Const_Perm_BtGravar','&Sauver'),
+ ('Const_Perm_BtCancelar','&Annuler'),
+ ('Const_Troc_WindowCaption','Sécurité'),
+ ('Const_Troc_LabelDescricao','Mot de passe de Changement '),
+ ('Const_Troc_LabelSenhaAtual','Passe :'),
+ ('Const_Troc_LabelNovaSenha','Nouveau Mot de passe :'),
+ ('Const_Troc_LabelConfirma','Confirmation :'),
+ ('Const_Troc_BtGravar','&Sauver'),
+ ('Const_Troc_BtCancelar','Annuler'),
+ ('Const_ErrPass_SenhaAtualInvalida','Le mot de passe actuel ne correspond pas !'),
+ ('Const_ErrPass_ErroNovaSenha','Le Champ : le Nouveau Mot de passe et la Confirmation doivent être le même.'),
+ ('Const_ErrPass_NovaIgualAtual','Nouveau mot de passe égal au mot de passe actuel'),
+ ('Const_ErrPass_SenhaObrigatoria','Le mot de passe est obligatoire'),
+ ('Const_ErrPass_SenhaMinima','Le mot de passe doit contenir au moins %d des caractères '),
+ ('Const_ErrPass_SenhaInvalida','Quand utiliser le mot de passe a été interdit vous obviez !'),
+ ('Const_ErrPass_ForcaTrocaSenha','Mot de passe de changement obligatoire'),
+ ('Const_DefPass_WindowCaption','Définissez le Mot de passe de l''utilisateur : "%s"'),
+ ('Const_DefPass_LabelSenha','Passe :'),
+ ('Const_TableUsers_FieldUserID','UCIdUser'),
+ ('Const_TableUsers_FieldUserName','UCUserName'),
+ ('Const_TableUsers_FieldLogin','UCLogin'),
+ ('Const_TableUsers_FieldPassword','UCPassword'),
+ ('Const_TableUsers_FieldEmail','UCEmail'),
+ ('Const_TableUsers_FieldPrivileged','UCPrivileged'),
+ ('Const_TableUsers_FieldTypeRec','UCTypeRec'),
+ ('Const_TableUsers_FieldProfile','UCProfile'),
+ ('Const_TableUsers_FieldKey','UCKey'),
+ ('Const_TableUsers_TableName','UCTabUsers'),
+ ('Const_TableUsers_FieldDateExpired','UCPassExpired'),
+ ('Const_TableUser_FieldUserExpired','UCUserExpired'),
+ ('Const_TableUser_FieldUserDaysSun','UCUserDaysSun'),
+ ('Const_TableUser_FieldUserInative','UCInative'),
+ ('Const_TableRights_FieldUserID','UCIdUser'),
+ ('Const_TableRights_FieldModule','UCModule'),
+ ('Const_TableRights_FieldComponentName','UCCompName'),
+ ('Const_TableRights_FieldFormName','UCFormName'),
+ ('Const_TableRights_FieldKey','UCKey'),
+ ('Const_TableRights_TableName','UCTabRights'),
+ ('Const_TableUsersLogged_FieldLogonID','UCIdLogon'),
+ ('Const_TableUsersLogged_FieldUserID','UCIdUser'),
+ ('Const_TableUsersLogged_FieldApplicationID','UCApplicationId'),
+ ('Const_TableUsersLogged_FieldMachineName','UCMachineName'),
+ ('Const_TableUsersLogged_FieldData','UCData'),
+ ('Const_TableUsersLogged_TableName','UCTabUsersLogged'),
+ ('Const_Evento_Insert','Insertion'),
+ ('Const_Evento_Delete','Effacer'),
+ ('Const_Evento_Edit','Réviser'),
+ ('Const_Evento_NewRecord','Nouveau record '),
+ ('Const_Hist_All','Tous'),
+ ('Const_Msg_LimpHistorico','Histoire de table propre?'),
+ ('Const_Msg_MensConfirma','Confirmer'),
+ ('Const_Msg_LogEmptyHistory','L''utilisateur %s efface l''histoire de table dans %s '),
+ ('Const_LabelDescricao','Histoire de Tables'),
+ ('Const_LabelUser','Utilisateur'),
+ ('Const_LabelForm','Forme'),
+ ('Const_LabelEvento','Événement'),
+ ('Const_LabelTabela','Table'),
+ ('Const_LabelDataEvento','Date'),
+ ('Const_LabelHoraEvento','Temps'),
+ ('Const_Msg_NewRecord','%s insérez le nouveau record'),
+ ('Const_Hist_TableName','UCTABHistory'),
+ ('Const_Hist_FieldApplicationID','ApplicationID'),
+ ('Const_Hist_FieldUserID','UserID'),
+ ('Const_Hist_FieldEventDate','EventDate'),
+ ('Const_Hist_FieldEventTime','EventTime'),
+ ('Const_Hist_FieldForm','Form'),
+ ('Const_Hist_FieldCaptionForm','FormCaption'),
+ ('Const_Hist_FieldEvent','Event'),
+ ('Const_Hist_FieldObs','Obs'),
+ ('Const_Hist_FieldTableName','tName'),
+ ('Const_Hist_MsgExceptPropr','Informez la propriété %s'),
+ ('Const_Hist_BtnFiltro','&Appliquez le Filtre'),
+ ('Const_Hist_BtnExcluir','&Effacez l''Histoire'),
+ ('Const_Hist_BtnFechar','&Près'),
+
+ ('Const_UserLogged_BtnMsg','&Régénérez'),
+ ('Const_UserLogged_Refresh','&Refresh'),
+ ('Const_UserLogged_LabelDescricao','Utilisateurs actifs'),
+ ('Const_UserLogged_LabelCaption','Utilisateurs actifs dans le système'),
+ ('Const_CadColuna_Computer','Ordinateur'),
+ ('Const_CadColuna_Data','Date'),
+ ('Const_UserLogged_InputCaption','Message'),
+ ('Const_UserLogged_InputText','Entrez votre message'),
+ ('Const_UserLogged_MsgSystem','Message de système'),
+ ('Const_Men_LoginInativo','Atenção, seu login esta inativo'),
+ ('Const_Inc_LabelStatus','Status'),
+ ('Const_Inc_StatusActive','Ativo'),
+ ('Const_Inc_StatusDisabled','Inativo')
+ );
+
+
+ Function RetornaLingua( Lingua : TUCLanguage; Prop : String ) : String;
+
+implementation
+
+Function RetornaLingua( Lingua : TUCLanguage; Prop : String ) : String;
+Var I : Integer;
+Begin
+ Result := '';
+ For I := 0 to MaxArray do
+ Begin
+ Case Lingua of
+ ucPortuguesBr : If UpperCase( UC_PTBR[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_PTBR[ I , 1 ];
+ ucEnglish : If UpperCase( UC_ENGLISH[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_ENGLISH[ I , 1 ];
+ ucSpanish : if UpperCase( UC_SPANISH[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_SPANISH[ I , 1 ];
+ ucFrench : if UpperCase( UC_FRENCH[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_FRENCH[ I , 1 ];
+ else
+ If UpperCase( UC_PTBR[ I , 0 ] ) = UpperCase( Prop ) then Result := UC_PTBR[ I , 1 ];
+ End;
+ End;
+End;
+
+end.
+
diff --git a/official/2.31RC1/Source/UserControl.inc b/official/2.31RC1/Source/UserControl.inc
new file mode 100644
index 0000000..bedb276
--- /dev/null
+++ b/official/2.31RC1/Source/UserControl.inc
@@ -0,0 +1,192 @@
+{------------------------------------------------------------------------------}
+{ VERXXX to DELPHIX }
+{------------------------------------------------------------------------------}
+
+{$IFDEF VER110}
+ {$DEFINE DELPHI3}
+{$ENDIF}
+
+{$IFDEF VER120}
+ {$DEFINE DELPHI4}
+{$ENDIF}
+
+{$IFDEF VER130}
+ {$DEFINE DELPHI5}
+{$ENDIF}
+
+{$IFDEF VER140}
+ {$DEFINE DELPHI6}
+{$ENDIF}
+
+{$IFDEF VER150}
+ {$DEFINE DELPHI7}
+{$ENDIF}
+
+{$IFDEF VER160}
+ {$DEFINE DELPHI8}
+{$ENDIF}
+
+{$IFDEF VER170}
+ {$DEFINE DELPHI9}
+{$ENDIF}
+
+{$IFDEF VER180}
+ {$DEFINE DELPHI10}
+{$ENDIF}
+
+{$IFDEF VER190}
+ {$DEFINE DELPHI11}
+{$ENDIF}
+
+{$IFDEF VER200}
+ {$DEFINE DELPHI12}
+{$ENDIF}
+
+{------------------------------------------------------------------------------}
+{ DELPHIX_UP from DELPHIX mappings }
+{------------------------------------------------------------------------------}
+
+{$IFDEF DELPHI12}
+ {$DEFINE DELPHI12_UP}
+ {$DEFINE DELPHI11_UP}
+ {$DEFINE DELPHI10_UP}
+ {$DEFINE DELPHI9_UP}
+ {$DEFINE DELPHI8_UP}
+ {$DEFINE DELPHI7_UP}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI11}
+ {$DEFINE DELPHI11_UP}
+ {$DEFINE DELPHI10_UP}
+ {$DEFINE DELPHI9_UP}
+ {$DEFINE DELPHI8_UP}
+ {$DEFINE DELPHI7_UP}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI10}
+ {$DEFINE DELPHI10_UP}
+ {$DEFINE DELPHI9_UP}
+ {$DEFINE DELPHI8_UP}
+ {$DEFINE DELPHI7_UP}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI9}
+ {$DEFINE DELPHI9_UP}
+ {$DEFINE DELPHI8_UP}
+ {$DEFINE DELPHI7_UP}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI8}
+ {$DEFINE DELPHI8_UP}
+ {$DEFINE DELPHI7_UP}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI7}
+ {$DEFINE DELPHI7_UP}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI6}
+ {$DEFINE DELPHI6_UP}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI5}
+ {$DEFINE DELPHI5_UP}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI4}
+ {$DEFINE DELPHI4_UP}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI3}
+ {$DEFINE DELPHI3_UP}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI2}
+ {$DEFINE DELPHI2_UP}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+{$IFDEF DELPHI1}
+ {$DEFINE DELPHI1_UP}
+{$ENDIF}
+
+(*
+
+ Definições de funcionamento
+
+*)
+
+{$IFDEF DELPHI7_UP}
+ {$WARN UNSAFE_TYPE OFF}
+ {$WARN UNSAFE_CODE OFF}
+ {$WARN UNSAFE_CAST OFF}
+ {$WARN SYMBOL_DEPRECATED OFF}
+ {$WARN SYMBOL_LIBRARY OFF}
+ {$WARN SYMBOL_PLATFORM OFF}
+ {$WARN UNIT_LIBRARY OFF}
+ {$WARN UNIT_PLATFORM OFF}
+ {$WARN UNIT_DEPRECATED OFF}
+ {$WARN CONSTRUCTING_ABSTRACT OFF}
+ {$WARN IMPLICIT_IMPORT OFF}
+
+ {$DEFINE UCACTMANAGER}
+{$ENDIF}
+
+{$IFDEF DELPHI9_UP}
+ {$WARN SYMBOL_EXPERIMENTAL OFF}
+ {$WARN UNIT_EXPERIMENTAL OFF}
+{$ENDIF}
+
+(*
+ Definições do Usuario
+*)
diff --git a/official/2.31RC1/Source/UserPermis_U.dfm b/official/2.31RC1/Source/UserPermis_U.dfm
new file mode 100644
index 0000000..5640f06
--- /dev/null
+++ b/official/2.31RC1/Source/UserPermis_U.dfm
@@ -0,0 +1,636 @@
+object UserPermis: TUserPermis
+ Left = 255
+ Top = 154
+ BorderStyle = bsDialog
+ Caption = 'Seguran'#231'a'
+ ClientHeight = 522
+ ClientWidth = 542
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnDestroy = FormDestroy
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 542
+ Height = 35
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 0
+ object LbDescricao: TLabel
+ Left = 44
+ Top = 12
+ Width = 205
+ Height = 18
+ Caption = 'Permiss'#245'es do Usu'#225'rio:'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ object Image1: TImage
+ Left = 8
+ Top = 4
+ Width = 28
+ Height = 28
+ AutoSize = True
+ Picture.Data = {
+ 07544269746D6170760C0000424D760C00000000000036000000280000001C00
+ 00001C0000000100200000000000400C00000000000000000000000000000000
+ 0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FEFEFE00F9F9F900F1F1F100EAEA
+ EA00E3E3E300E0E0E000DEDEDE00DFDFDF00E1E1E100E4E4E400E8E8E800ECEC
+ EC00F0F0F000F5F5F500FAFAFA00FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00F6F6F600C5C7
+ C5008E9F91006E8A70005E815C00527B4F004E7C4A004B7C48004A7C47004B7B
+ 48004C7C4A004E7B4C0050795000557854005B7A5C00677F6A007C897E00A2A2
+ A200D4D4D400FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F2F4F30074967100487638004E7C35004E8334004B893300488E
+ 31004592300044962F0043972F0043982F0043972F004494300047903100498C
+ 32004C863400507F35004E7A360047703900526C5200A9A9A900FAFAFA00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0094B3910058743900537B
+ 36004E8334004A8A33004690310043962F00409B2E003E9F2D003DA12D003DA1
+ 2D003DA02D003F9D2E0042992F0045933000488D32004C863400517F35005577
+ 3700567039005A725A00E6E6E600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00688D5B0055783700508035004B8833004790310043982F003F9E
+ 2D003BA42C0039A82B0037AB2A0037AB2A0038AA2B003AA62C003DA12D00419B
+ 2E0045943000498C32004D843400527C36005773380054724D00DEDEDE00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E875100527C36004D84
+ 3400488D320044962F003F9E2E003BA52C0037AC2A0034B1290032B4280032B5
+ 280033B3280035AE290039A82B003DA12D00419A2F00469131004B8933005080
+ 35005577370056775100E4E4E400FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00729A6800507F35004B88330046913100419A2E003CA32C0037AB
+ 2A0033B328002FB927002DBE25002CBF25002EBC260031B6270035AF29003AA7
+ 2B003F9E2D0044953000498C32004E833400537A37006F8C6E00F2F2F200FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5C6A700508136004A8A
+ 3300449330003F9D2E003AA62B0035AF290030B827002BBF250035B237002BBB
+ 2B0029C324002DBC260033B4280037AB2A003DA12D0042982F00478F31004D85
+ 34004A7B3600B0BCB200FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F6FAF70058904D00498B3200449530003E9E2D0039A82B0034B2
+ 28002EBB26004BA34E00DEE0DF00DDEADF0044BB47002BC0250031B6270036AD
+ 2A003CA32C00419A2F00479031004C86340072997100F1F1F100FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D4E4D6004A8E
+ 3D00449530003E9E2D0039A82B0034B129002FA92C00A4B0A700E5E6E600E8E9
+ E900CFDED20035B3340031B6270036AC2A003CA32C0041992F00468F31005E95
+ 5B00E5E7E500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00D2E4D4004E984500409C2E003AA52C0035AE
+ 2900518B5400989B9F00798A96006B7F8C00757E85005B7F5D002D9E240038A9
+ 2A003DA12D0040952F0070A46F00E9ECEA00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00EDF4EF007BB57B003A9D2E00319131004F7C93004992C5004A98CF004897
+ CE004592C800437DA400235437002C7F22004B9B4500AECAB000F9F9F900FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00BDD3C7004C90
+ AF0052A0D60052A0D500519FD4004F9DD3004C9AD1004997CE00438CBF004363
+ 6700C1C2C100FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00F5F6F70072ABD00056A4D90056A4D90056A4D90055A3D80054A2
+ D70052A0D5004F9DD3004B99D000468DC000727D8400E7E7E700FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A2C4DC005AA6DB005BA8
+ DC005BA8DC005BA8DC005AA7DB0058A5DA0056A4D90053A1D600509ED4004B9A
+ D0004C7FA500ADADAD00FDFDFD00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00E9EEF4005FA7D7005EABDF005FACE0005FACE0005FACE0005EABDF005CA9
+ DD005AA7DB0057A4D90054A2D700509ED4004A95CA0076828B00F0F0F000FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00ADCDE20060ACE00061AEE20063B0
+ E30063B0E30063B0E30061AEE2005FACE0005DAADE005AA7DC0056A4D90053A1
+ D600B7A293006947310069473100694731006947310069473100694731006947
+ 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF007EB5DA0063B0E30065B2E50067B4E70068B4E70067B4E60065B2E50063B0
+ E30060ADE1005DAADE0059A7DB0055A3D800B7A29300FFFFFF00FCFDFF005476
+ FF00E4E9FF00FFFFFF00FFFFFF0069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FAFBFC0064AAD80066B3E60069B5E8006BB7
+ E9006CB8EA006BB7E90069B5E80066B3E60062AFE3005FACE0005BA8DC0057A5
+ DA00B7A29300FFFFFF00B4C3FF000033FF002450FF00FCFDFF00FFFFFF006947
+ 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EDF2
+ F50062A9D9005696BF00538EB5005E9FC9006BB4E3006EBAEC006CB8EA0069B5
+ E70064B1E40060ADE1005DAADE0059A6DB00B7A29300FFFFFF004066FF000C3D
+ FF000033FF009CB0FF00FFFFFF0069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F1F5F9004F8FB9004385AF004485AE003F79
+ 9D003E708F004B7FA00062A5D10069B5E60066B3E60062AFE2005EABDF0059A7
+ DB00B7A293008CA3FF000033FF00708DFF006483FF001846FF00F0F3FF006947
+ 3100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF005490B8004D94C1004F96C3005097C3004E95C200488BB5003D7192004375
+ 95005B9FCD0061AEE1005DAADE004C8FBC00B7A2930088A0FF001C49FF00E4E9
+ FF00F0F3FF00204DFF006080FF0069473100FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0084B1CD00569ECB0058A0CE0059A1
+ CE00579FCC00539BC8004E95C2004689B300386A8A00447B9F004786B0003C7F
+ A900B7A29300FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0FF000C3DFF006080
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00C3D8E5005EA5D30061AAD80062ABD9005FA8D6005BA3D100559DCA004E95
+ C200478DB9003D7DA6003C7FAA003D82AD00B7A29300B7A29300B7A29300B7A2
+ 9300B7A29300B7A293009CB0FF001443FF006080FF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FCFDFE0079B1D5006AB4E2006AB5
+ E30067B1DF0062ABD9005BA3D000539AC7004B91BE004388B4003D82AD003C81
+ AC0062849A00ECECEC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0
+ FF00345DFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00DDE9F00075B9E40073BEED006EB9E80067B1DF005FA7D500569E
+ CB004D94C100458BB7003D82AE005584A200D8DBDD00FEFEFE00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009CB0FF00486DFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D8E7F1007FBF
+ E80072BDEC0069B3E20061A9D70058A0CD004F96C2004689B5006994B000DCDF
+ E300FEFEFE00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF009CB0FF007893FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00F4F7FA00B2D0E30085B8D80070A9CE0071A6
+ C70087AFC900C3D1DB00FAFAFA00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00}
+ end
+ object lbUser: TLabel
+ Left = 257
+ Top = 12
+ Width = 54
+ Height = 18
+ Caption = 'Admin'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clBlue
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ end
+ end
+ object Panel3: TPanel
+ Left = 445
+ Top = 35
+ Width = 97
+ Height = 487
+ Align = alRight
+ BevelOuter = bvNone
+ TabOrder = 1
+ object BtLibera: TBitBtn
+ Left = 8
+ Top = 80
+ Width = 81
+ Height = 25
+ Caption = '&Liberar'
+ TabOrder = 0
+ OnClick = BtLiberaClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000C8D0D4C8D0D4
+ C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8
+ D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D49FBFD0
+ 0060900060900060900060900060900060900060900060900060900060900060
+ 909FBFD0C8D0D4C8D0D4C8D0D4C2C8CB8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D
+ 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8DC2C8CBC8D0D4C8D0D4C8D0D40090C8
+ 98D8F80090C80090C80090C80090C80090C80090C80090C80090C80090C80090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5E7E7E7B6B6B6B5B5B5B5B5B5B5B5B5B5
+ B5B5B5B5B5B6B6B6B5B5B5B5B5B5B5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD7ACEF774CCF66EC9F55494A840404045879B4EBBF146B7EF42B5EF0090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E1E1E1E0E0E0DDDDDDB1B1B166
+ 6666A7A7A7D5D5D5D3D3D3D2D2D2B5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD83D2F87DD0F777CDF671CAF540404063C5F45AC1F352BDF14AB9F00090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E3E3E3E2E2E2E0E0E0DFDFDF66
+ 6666DBDBDBD8D8D8D7D7D7D4D4D4B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD89D5F983D2F87DD0F740404040404040404063C5F45AC1F352BDF10090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F6F6F6E5E5E5E3E3E3E2E2E267676766
+ 6666666666DCDCDCD9D9D9D6D6D6B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD8FD8FA89D5F983D2F862AABE40404062AABE6BC8F563C5F45AC1F30090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F6F6F6E7E7E7E5E5E5E3E3E3C2C2C266
+ 6666C2C2C2DDDDDDDCDCDCD9D9D9B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD95DBFB8FD8FA89D5F983D2F87DD0F777CDF671CAF56BC8F563C5F40090
+ C8006090C8D0D4C8D0D4C8D0D4B6B6B6F5F5F5E9E9E9E7E7E7E5E5E5E3E3E3E2
+ E2E2E0E0E0DFDFDFDDDDDDDCDCDCB5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8
+ 98D8F8D7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFD98D8
+ F8006090C8D0D4C8D0D4C8D0D4B5B5B5E7E7E7F6F6F6F6F6F6F6F6F6F6F6F6F6
+ F6F6F6F6F6F6F6F6F6F6F6F5F5F5E7E7E78D8D8DC8D0D4C8D0D4C8D0D49FBFD0
+ 028DC70090C80090C80090C80090C80090C80090C80090C80090C80090C80090
+ C89FBFD0C8D0D4C8D0D4C8D0D4C2C8CBB4B4B4B6B6B6B6B6B6B6B6B6B5B5B5B5
+ B5B5B5B5B5B6B6B6B6B6B6B5B5B5B5B5B5C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D40090C860C8F8006090C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8
+ D0D4C8D0D4B6B6B6DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D40090C8006090006090C8D0D4C8D0D4C8D0D40090C860C8F8006090C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B6B6B68D8D8D8D8D8DC8D0D4C8
+ D0D4C8D0D4B6B6B6DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D40090C8D7EFFD0060909FBFD0C8D0D49FBFD00090C860C8F8006090C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B5B5B5F6F6F68D8D8DC2C8CBC8
+ D0D4C2C8CBB5B5B5DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D47FB1CDD7EFFD98D8F800609000609000609098D8F860C8F8367EA3C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4BDC2C4F5F5F5E7E7E78D8D8D8E
+ 8E8E8D8D8DE7E7E7DDDDDD9EA0A1C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D49FBFD07FB1CDD7EFFDD7EFFDD7EFFDD7EFFD4DB9EC367EA39FBFD0C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4F6F6F6F6F6F6F6
+ F6F6F6F6F6D3D3D39EA0A1C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D4C8D0D49FBFD07FB1CD0090C80090C80090C87FB1CD9FBFD0C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4B5B5B5B5
+ B5B5B5B5B5BDC2C4C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4}
+ NumGlyphs = 2
+ end
+ object BtBloqueia: TBitBtn
+ Left = 8
+ Top = 133
+ Width = 81
+ Height = 25
+ Caption = '&Bloquear'
+ TabOrder = 1
+ OnClick = BtBloqueiaClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000C8D0D4C8D0D4
+ C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8
+ D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D49FBFD0
+ 0060900060900060900060900060900060900060900060900060900060900060
+ 909FBFD0C8D0D4C8D0D4C8D0D4C2C8CB8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D
+ 8D8D8D8D8D8E8E8E8D8D8D8D8D8D8D8D8DC2C8CBC8D0D4C8D0D4C8D0D40090C8
+ 98D8F80090C80090C80090C80090C80090C80090C80090C80090C80090C80090
+ C8006090C8D0D4C8D0D4C8D0D4B6B6B6E7E7E7B5B5B5B6B6B6B5B5B5B5B5B5B5
+ B5B5B6B6B6B5B5B5B5B5B5B6B6B6B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD7ACEF774CCF66EC9F55494A840404045879B4EBBF146B7EF42B5EF0090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E1E1E1E0E0E0DDDDDDB1B1B166
+ 6666A7A7A7D5D5D5D3D3D3D2D2D2B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD83D2F87DD0F777CDF671CAF540404063C5F45AC1F352BDF14AB9F00090
+ C8006090C8D0D4C8D0D4C8D0D4B6B6B6F6F6F6E3E3E3E2E2E2E0E0E0DFDFDF66
+ 6666DCDCDCD9D9D9D7D7D7D4D4D4B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD89D5F983D2F87DD0F740404040404040404063C5F45AC1F352BDF10090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F5F5F5E5E5E5E3E3E3E2E2E266666666
+ 6666666666DCDCDCD8D8D8D6D6D6B5B5B58D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD8FD8FA89D5F983D2F862AABE40404062AABE6BC8F563C5F45AC1F30090
+ C8006090C8D0D4C8D0D4C8D0D4B6B6B6F6F6F6E7E7E7E6E6E6E3E3E3C2C2C267
+ 6767C2C2C2DDDDDDDBDBDBD9D9D9B6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ D7EFFD95DBFB8FD8FA89D5F983D2F87DD0F777CDF671CAF56BC8F563C5F40090
+ C8006090C8D0D4C8D0D4C8D0D4B5B5B5F6F6F6E9E9E9E7E7E7E6E6E6E3E3E3E2
+ E2E2E0E0E0DFDFDFDDDDDDDBDBDBB6B6B68D8D8DC8D0D4C8D0D4C8D0D40090C8
+ 98D8F8D7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFDD7EFFD98D8
+ F8006090C8D0D4C8D0D4C8D0D4B5B5B5E7E7E7F6F6F6F6F6F6F6F6F6F6F6F6F6
+ F6F6F6F6F6F6F6F6F6F6F6F6F6F6E7E7E78D8D8DC8D0D4C8D0D4C8D0D49FBFD0
+ 0090C80090C80090C80090C80090C80090C80090C80090C80090C80090C80090
+ C89FBFD0C8D0D4C8D0D4C8D0D4C2C8CBB5B5B5B6B6B6B6B6B6B5B5B5B6B6B6B5
+ B5B5B6B6B6B6B6B6B5B5B5B5B5B5B6B6B6C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D40090C8D7EFFD006090C8D0D4C8D0D4C8D0D40090C860C8F8006090C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B5B5B5F5F5F58D8D8DC8D0D4C8
+ D0D4C8D0D4B5B5B5DDDDDD8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D40090C8D7EFFD0060909FBFD0C8D0D49FBFD00090C860C8F8006090C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B5B5B5F6F6F68D8D8DC2C8CBC8
+ D0D4C2C8CBB5B5B5DEDEDE8D8D8DC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D47FB1CDD7EFFD98D8F800609000609000609060C8F860C8F8367EA3C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4BDC2C4F6F6F6E7E7E78D8D8D8D
+ 8D8D8D8D8DDEDEDEDDDDDD9EA0A1C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D49FBFD07FB1CDD7EFFDD7EFFDD7EFFDD7EFFD60C8F8367EA39FBFD0C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4F6F6F6F6F6F6F6
+ F6F6F6F6F6DDDDDD9EA0A1C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D4C8D0D49FBFD07FB1CD0090C80090C80090C87FB1CD9FBFD0C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C2C8CBBDC2C4B5B5B5B5
+ B5B5B6B6B6BDC2C4C2C8CBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8
+ D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4}
+ NumGlyphs = 2
+ end
+ object BtGrava: TBitBtn
+ Left = 8
+ Top = 186
+ Width = 81
+ Height = 25
+ Caption = '&Gravar'
+ TabOrder = 2
+ OnClick = BtGravaClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ 6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D422F6D42
+ 2F6D422F6D422F6D422FFF00FFFF00FF69696969696969696969696969696969
+ 6969696969696969696969696969696969696969696969696969FF00FFCE726F
+ D19792CB8E8A715A48C0B2ABC4BCB8CAC1BCCAC1BCCAC1BCCAC1BC8C76679443
+ 409443409443406D422FFF00FF9A9A9AB4B4B4AEAEAE7D7D7DC6C6C6CECECED2
+ D2D2D2D2D2D2D2D2D2D2D2969696707070707070707070696969FF00FFCE726F
+ D79F9BD19792715A482E1F185F5046FFFFFFFFFFFFFFFFFFF0E4DE8C76679747
+ 449443409443406D422FFF00FF9A9A9ABBBBBBB5B5B57C7C7C434343747474FF
+ FFFFFFFFFFFFFFFFECECEC969696747474707070707070696969FF00FFCE726F
+ DDA8A3D79F9B715A480A0A0A36241BFFFFFFF7F1EEF0E4DEE1CABD8C76679E50
+ 4D9747449443406D422FFF00FF9A9A9AC1C1C1BBBBBB7D7D7D2A2A2A4A4A4AFF
+ FFFFF6F6F6ECECECD8D8D89595957C7C7C757575707070696969FF00FFCE726F
+ E3B0ABDDA8A3715A48715A48715A48715A48715A48715A48715A48715A48A459
+ 569E504D9747446D422FFF00FF9A9A9AC8C8C8C1C1C17D7D7D7D7D7D7D7D7D7C
+ 7C7C7D7D7D7D7D7D7D7D7D7D7D7D8383837C7C7C747474696969FF00FFCE726F
+ EDBDB8E7B5B0E0ACA7DAA49FD49B97CB8E8AC58682BF7E79B97571B26B68AB62
+ 5FA459569E504D6D422FFF00FF9A9A9AD2D2D2CCCCCCC4C4C4BEBEBEB8B8B8AE
+ AEAEA8A8A8A1A1A19A9A9A9292928B8B8B8484847B7B7B696969FF00FFCE726F
+ F0C1BCEDBDB8E7B5B0E0ACA7DAA49FD49B97CE938EC88A86C2827EBC7975B26B
+ 68AB625FA459566D422FFF00FF9A9A9AD4D4D4D2D2D2CBCBCBC4C4C4BFBFBFB8
+ B8B8B1B1B1ABABABA5A5A59D9D9D9292928B8B8B848484696969FF00FFCE726F
+ F0C1BCF0C1BCC8635CC8635CC8635CC8635CC8635CC8635CC8635CC8635CC863
+ 5CB5706CAE67636D422FFF00FF9A9A9AD4D4D4D5D5D58E8E8E8E8E8E8E8E8E8E
+ 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9696968E8E8E696969FF00FFCE726F
+ F0C1BCC8635CFAF5F3F6EEEAF2E7E2EEE2DAEBDCD3E7D6CBE4D0C4E1CABDE1CA
+ BDC8635CB5706C6D422FFF00FF9A9A9AD4D4D48E8E8EF8F8F8F3F3F3EEEEEEEA
+ EAEAE6E6E6E1E1E1DDDDDDD8D8D8D8D8D88E8E8E969696676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3C8E2CD
+ C0C8635CBC79756D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFAFAFAF6F6F6F1
+ F1F1ECECECE7E7E7E3E3E3DFDFDFDADADA8E8E8E9D9D9D696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9CFE6D3
+ C8C8635CC2827E6D422FFF00FF9A9A9AD4D4D48D8D8DFFFFFFFFFFFFFBFBFBF6
+ F6F6F0F0F0ECECECE7E7E7E3E3E3DFDFDF8E8E8EA5A5A5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDFD6E9D9
+ CFC8635CC88A866D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFB
+ FBFBF5F5F5F1F1F1ECECECE8E8E8E3E3E38E8E8EABABAB696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4DEECDF
+ D6C8635CD197926D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFBFBFBF6F6F6F1F1F1ECECECE7E7E78E8E8EB5B5B5696969FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EAE6F0E4
+ DEC8635C0A0A0A6D422FFF00FF9A9A9AD4D4D48E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFBFBFBF6F6F6F1F1F1ECECEC8E8E8E2A2A2A676767FF00FFCE726F
+ F0C1BCC8635CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F7F8F1EEF4EA
+ E6C8635CC88A866D422FFF00FF9A9A9AD5D5D58E8E8EFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFBFBFBF5F5F5F1F1F18E8E8EABABAB696969FF00FFCE726F
+ CE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE726FCE72
+ 6FCE726FCE726FCE726FFF00FF9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A
+ 9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A}
+ NumGlyphs = 2
+ end
+ object BtCancel: TBitBtn
+ Left = 8
+ Top = 240
+ Width = 81
+ Height = 25
+ Caption = '&Cancelar'
+ TabOrder = 3
+ OnClick = BtCancelClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ end
+ object PC: TPageControl
+ Left = 0
+ Top = 35
+ Width = 445
+ Height = 487
+ ActivePage = PageMenu
+ Align = alClient
+ Style = tsFlatButtons
+ TabOrder = 2
+ object PageMenu: TTabSheet
+ Caption = 'Itens do Menu'
+ object TreeMenu: TTreeView
+ Left = 0
+ Top = 0
+ Width = 437
+ Height = 456
+ Align = alClient
+ Ctl3D = True
+ Images = ImageList1
+ Indent = 19
+ ParentCtl3D = False
+ ReadOnly = True
+ RightClickSelect = True
+ TabOrder = 0
+ OnClick = TreeMenuClick
+ OnCollapsing = TreeMenuCollapsing
+ OnExpanding = TreeMenuCollapsing
+ OnKeyPress = TreeMenuKeyPress
+ OnMouseUp = TreeMenuMouseUp
+ end
+ end
+ object PageAction: TTabSheet
+ Caption = 'A'#231#245'es'
+ ImageIndex = 1
+ object TreeAction: TTreeView
+ Left = 0
+ Top = 0
+ Width = 437
+ Height = 456
+ Align = alClient
+ Ctl3D = True
+ Images = ImageList1
+ Indent = 19
+ ParentCtl3D = False
+ ReadOnly = True
+ RightClickSelect = True
+ TabOrder = 0
+ OnClick = TreeActionClick
+ OnCollapsing = TreeMenuCollapsing
+ OnExpanding = TreeMenuCollapsing
+ OnKeyPress = TreeMenuKeyPress
+ end
+ end
+ object PageControls: TTabSheet
+ Caption = 'Controles'
+ ImageIndex = 2
+ object TreeControls: TTreeView
+ Left = 0
+ Top = 0
+ Width = 437
+ Height = 456
+ Align = alClient
+ Ctl3D = True
+ Images = ImageList1
+ Indent = 19
+ ParentCtl3D = False
+ ReadOnly = True
+ RightClickSelect = True
+ TabOrder = 0
+ OnClick = TreeControlsClick
+ OnCollapsing = TreeMenuCollapsing
+ OnExpanding = TreeMenuCollapsing
+ OnKeyPress = TreeMenuKeyPress
+ end
+ end
+ end
+ object ImageList1: TImageList
+ Left = 360
+ Top = 8
+ Bitmap = {
+ 494C010103000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000001000000001002000000000000010
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400C6DEC600C6DE
+ C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE
+ C600C6DEC6000000000000000000000000000000000084848400C6DEC600C6DE
+ C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE
+ C600C6DEC6000000000000000000000000000000000084848400C6DEC600C6DE
+ C600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DEC600C6DE
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C600C6C6C600C6C6C60084848400C6C6C600C6C6C600C6C6C600C6C6C600C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C600C6C6C600848484008484840084848400C6C6C600C6C6C600C6C6C600C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C6008484840084848400848484008484840084848400C6C6C600C6C6C600C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C6008484840084848400C6C6C600848484008484840084848400C6C6C600C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C60084848400C6C6C600C6C6C600C6C6C600848484008484840084848400C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C6008484840084848400C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C60084848400C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC6000000000000000000000000000000000084848400848484000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C6DEC600000000000000000000000000000000008484840084848400C6C6
+ C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6C600C6C6
+ C600C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484008484
+ 8400848484008484840084848400848484008484840084848400848484008484
+ 8400C6DEC6000000000000000000000000000000000084848400848484008484
+ 8400848484008484840084848400848484008484840084848400848484008484
+ 8400C6DEC6000000000000000000000000000000000084848400848484008484
+ 8400848484008484840084848400848484008484840084848400848484008484
+ 8400C6DEC6000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000084848400848484008484
+ 8400848484008484840084848400848484008484840084848400848484008484
+ 8400848484000000000000000000000000000000000084848400848484008484
+ 8400848484008484840084848400848484008484840084848400848484008484
+ 8400848484000000000000000000000000000000000084848400848484008484
+ 8400848484008484840084848400848484008484840084848400848484008484
+ 8400848484000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000100000000100010000000000800000000000000000000000
+ 000000000000000000000000FFFFFF00FFFFFFFFFFFF0000FFFFFFFFFFFF0000
+ FFFFFFFFFFFF000080078007800700009FF79FF7800700009FF79DF780070000
+ 9FF798F7800700009FF79077800700009FF79237800700009FF7971780070000
+ 9FF79F97800700009FF79FD7800700009FF79FF7800700008007800780070000
+ 8007800780070000FFFFFFFFFFFF000000000000000000000000000000000000
+ 000000000000}
+ end
+end
diff --git a/official/2.31RC1/Source/UserPermis_U.pas b/official/2.31RC1/Source/UserPermis_U.pas
new file mode 100644
index 0000000..1ebdea4
--- /dev/null
+++ b/official/2.31RC1/Source/UserPermis_U.pas
@@ -0,0 +1,750 @@
+unit UserPermis_U;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ UCBase,
+ {.$IFDEF UCACTMANAGER}
+ ActnMan,
+ ActnMenus,
+ {.$ENDIF}
+ {.$IFDEF DELPHI5_UP}
+ Variants,
+ {.$ENDIF}
+ Buttons,
+ Classes,
+ ComCtrls,
+ Controls,
+ DB,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ ImgList,
+ Menus,
+ StdCtrls;
+
+type
+ PTreeMenu = ^TTreeMenu;
+
+ TTreeMenu = record
+ Selecionado: Integer;
+ MenuName: String;
+ end;
+
+ PTreeAction = ^TTreeAction;
+
+ TTreeAction = record
+ Grupo: Boolean;
+ Selecionado: Integer;
+ MenuName: String;
+ end;
+
+ PTreeControl = ^TTreeControl;
+
+ TTreeControl = record
+ Grupo: Boolean;
+ Selecionado: Integer;
+ CompName: String;
+ FormName: String;
+ end;
+
+ TUserPermis = class(TForm)
+ Panel1: TPanel;
+ LbDescricao: TLabel;
+ Image1: TImage;
+ Panel3: TPanel;
+ BtLibera: TBitBtn;
+ BtBloqueia: TBitBtn;
+ BtGrava: TBitBtn;
+ lbUser: TLabel;
+ ImageList1: TImageList;
+ BtCancel: TBitBtn;
+ PC: TPageControl;
+ PageMenu: TTabSheet;
+ PageAction: TTabSheet;
+ TreeMenu: TTreeView;
+ TreeAction: TTreeView;
+ PageControls: TTabSheet;
+ TreeControls: TTreeView;
+ procedure BtGravaClick(Sender: TObject);
+ procedure TreeMenuClick(Sender: TObject);
+ procedure BtCancelClick(Sender: TObject);
+ procedure BtLiberaClick(Sender: TObject);
+ procedure BtBloqueiaClick(Sender: TObject);
+ procedure FormShow(Sender: TObject);
+ procedure TreeActionClick(Sender: TObject);
+ procedure TreeControlsClick(Sender: TObject);
+ procedure TreeMenuCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean);
+ procedure TreeMenuKeyPress(Sender: TObject; var Key: char);
+ procedure TreeMenuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+ procedure FormDestroy(Sender: TObject);
+ private
+ FMenu: TMenu;
+ FActions: TObject;
+ FChangingTree: Boolean;
+ FTempMPointer: PTreeMenu;
+ FTempAPointer: PTreeAction;
+ FTempCPointer: PTreeControl;
+ FExtraRights: TUCExtraRights;
+ FTempLista: TStringList;
+ FListaAction: array of PTreeAction;
+ FListaMenu: array of PTreeMenu;
+ FListaControl: array of PTreeControl;
+ {.$IFDEF UCACTMANAGER}
+ FActionMainMenuBar: TActionMainMenuBar;
+ procedure TrataItem(IT: TActionClientItem; node: TTreeNode); overload;
+ {.$ENDIF}
+ procedure TrataItem(IT: TMenuItem; node: TTreeNode); overload;
+ procedure TreeMenuItem(marca: Boolean);
+ procedure Atualiza(Selec: Boolean);
+ procedure TreeActionItem(marca: Boolean);
+ procedure UnCheckChild(node: TTreeNode);
+ procedure TreeControlItem(marca: Boolean);
+ procedure CarregaTreeviews;
+ public
+ FTempIdUser: Integer;
+ FUserControl: TUserControl;
+ DSPermiss: TDataset;
+ DSPermissEX: TDataset;
+ DSPerfil: TDataset;
+ DSPerfilEX: TDataset;
+ end;
+
+var
+ UserPermis: TUserPermis;
+
+implementation
+
+uses
+ ActnList,
+ Messages,
+ SysUtils,
+ Windows;
+
+{$R *.dfm}
+
+procedure TUserPermis.BtGravaClick(Sender: TObject);
+var
+ Contador: Integer;
+begin
+ with fUserControl.TableRights do
+ begin
+ fUserControl.DataConnector.UCExecSQL('Delete from ' + TableName + ' Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(fUserControl.ApplicationID));
+ fUserControl.DataConnector.UCExecSQL('Delete from ' + TableName + 'EX Where ' + FieldUserID + ' = ' + IntToStr(FTempIdUser) + ' and ' + FieldModule + ' = ' + QuotedStr(fUserControl.ApplicationID));
+ end;
+
+ for Contador := 0 to TreeMenu.Items.Count - 1 do
+ if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado = 1 then
+ fUserControl.AddRight(FTempIdUser, PTreeMenu(TreeMenu.Items[Contador].Data).MenuName);
+
+ for Contador := 0 to TreeAction.Items.Count - 1 do
+ if PTreeAction(TreeAction.Items[Contador].Data).Selecionado = 1 then
+ fUserControl.AddRight(FTempIdUser, PTreeAction(TreeAction.Items[Contador].Data).MenuName);
+
+ //Extra Rights
+ for Contador := 0 to Pred(TreeControls.Items.Count) do
+ if PTreeControl(TreeControls.Items[Contador].Data).Selecionado = 1 then
+ fUserControl.AddRightEX(FTempIdUser, fUserControl.ApplicationID, PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName);
+
+ Close;
+end;
+
+procedure TUserPermis.TrataItem(IT: TMenuItem; node: TTreeNode);
+var
+ contador: Integer;
+ TempNode: TTreeNode;
+begin
+ for contador := 0 to IT.Count - 1 do
+ if IT.Items[Contador].Caption <> '-' then
+ if IT.Items[Contador].Count > 0 then
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := IT.Items[Contador].Name;
+ TempNode := TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ TrataItem(IT.Items[Contador], TempNode);
+ end
+ else
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := IT.Items[Contador].Name;
+ TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ end;
+end;
+
+{.$IFDEF UCACTMANAGER}
+procedure TUserPermis.TrataItem(IT: TActionClientItem; node: TTreeNode);
+var
+ contador: Integer;
+ TempNode: TTreeNode;
+begin
+ for contador := 0 to IT.Items.Count - 1 do
+ if IT.Items[Contador].Caption <> '-' then
+ if IT.Items[Contador].Items.Count > 0 then
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := #1 + 'G' + IT.Items[Contador].Caption;
+ TempNode := TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ TrataItem(IT.Items[Contador], TempNode);
+ end
+ else
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := IT.Items[Contador].Action.Name;
+ TreeMenu.Items.AddChildObject(node, StringReplace(IT.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ end;
+end;
+
+{.$ENDIF}
+
+procedure TUserPermis.CarregaTreeviews;
+var
+ Contador: Integer;
+ TempNode: TTreeNode;
+ Temp: String;
+ Temp2: String;
+ Desc: String;
+begin
+ FChangingTree := False;
+ PC.ActivePage := PageMenu;
+
+{ Self.FMenu := fUserControl.ControlRight.MainMenu;
+ Self.FActionMainMenuBar := fUserControl.ControlRight.ActionMainMenuBar;
+ if Assigned(fUserControl.ControlRight.ActionList) then
+ Self.FActions := fUserControl.ControlRight.ActionList
+ else
+ Self.FActions := fUserControl.ControlRight.ActionManager; }
+
+ Self.FMenu := fUsercontrol.ControlRight.MainMenu;
+ Self.FActionMainMenuBar := fUsercontrol.ControlRight.ActionMainMenuBar;
+ if Assigned(fUsercontrol.ControlRight.ActionList) then
+ Self.FActions := fUsercontrol.ControlRight.ActionList
+ else
+ Self.FActions := fUsercontrol.ControlRight.ActionManager;
+ Self.FExtraRights := fUsercontrol.ExtraRights;
+
+ (*if (not Assigned(FMenu)) and (not Assigned(fUserControl.ControlRight.ActionList))
+ {.$IFDEF UCACTMANAGER} and (not Assigned(fUserControl.ControlRight.ActionManager)) and
+ (not Assigned(fUserControl.ControlRight.ActionMainMenuBar))
+ {.$ENDIF} then
+ begin
+ if (Assigned(FMenu))
+ {.$IFDEF UCACTMANAGER} and (not Assigned(fUserControl.ControlRight.ActionMainMenuBar))
+ {.$ENDIF} then*)
+
+ //TempNode := nil;
+ if Assigned(FMenu) then
+ begin
+ TreeMenu.Items.Clear;
+ for Contador := 0 to FMenu.Items.Count - 1 do
+ if FMenu.Items[Contador].Count > 0 then
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := FMenu.Items[Contador].Name;
+ TempNode := TreeMenu.Items.AddObject(nil, StringReplace(FMenu.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ TrataItem(FMenu.Items[Contador], TempNode);
+ end
+ else
+ if FMenu.Items[Contador].Caption <> '-' then
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := FMenu.Items[Contador].Name;
+ TreeMenu.Items.AddObject(nil, StringReplace(FMenu.Items[Contador].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ end;
+ TreeMenu.FullExpand;
+ TreeMenu.Perform(WM_VSCROLL, SB_TOP, 0);
+ end;
+
+ {.$IFDEF UCACTMANAGER}
+ //TempNode := nil;
+ if Assigned(FActionMainMenuBar) then
+ begin
+ TreeMenu.Items.Clear;
+ for Contador := 0 to FActionMainMenuBar.ActionClient.Items.Count - 1 do
+ begin
+ Temp := IntToStr(Contador);
+ if FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Items.Count > 0 then
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := #1 + 'G' + FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption;
+ TempNode := TreeMenu.Items.AddObject(nil, StringReplace(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Caption, '&', '', [rfReplaceAll]), FTempMPointer);
+ TrataItem(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)], TempNode);
+ end
+ else
+ begin
+ New(FTempMPointer);
+ SetLength(FListaMenu, Length(FListaMenu) + 1); //Adicionado por Luiz 18/01/06
+ FListaMenu[High(FListaMenu)] := FTempMPointer; //Adicionado por Luiz 18/01/06
+ FTempMPointer.Selecionado := 0;
+ FTempMPointer.MenuName := FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Action.Name;
+ TreeMenu.Items.AddObject(nil, StringReplace(FActionMainMenuBar.ActionClient.Items[StrToInt(Temp)].Action.Name, '&', '', [rfReplaceAll]), FTempMPointer);
+ end;
+ TreeMenu.FullExpand;
+ TreeMenu.Perform(WM_VSCROLL, SB_TOP, 0);
+ end;
+ end;
+ {.$ENDIF}
+
+(*if (Assigned(fUserControl.ControlRight.ActionList))
+ {.$IFDEF UCACTMANAGER} or (Assigned(fUserControl.ControlRight.ActionManager))
+ {.$ENDIF} then*)
+
+ TempNode := nil;
+ if Assigned(FActions) then
+ begin
+ TreeAction.Items.Clear;
+ if Assigned(FTempLista) then
+ FreeAndNil(FTempLista);
+ FTempLista := TStringList.Create;
+ for Contador := 0 to TActionList(FActions).ActionCount - 1 do
+ FTempLista.Append(TActionList(FActions).Actions[contador].Category + #1 + TActionList(FActions).Actions[contador].Name + #2 + TAction(TActionList(FActions).Actions[contador]).Caption);
+ FTempLista.Sort;
+ Temp := #1;
+ for Contador := 0 to FTempLista.Count - 1 do
+ begin
+ if Temp <> Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1) then
+ begin
+ New(FTempAPointer);
+ SetLength(FListaAction, Length(FListaAction) + 1); //Adicionado por Luiz 18/01/06
+ FListaAction[High(FListaAction)] := FTempAPointer; //Adicionado por Luiz 18/01/06
+ FTempAPointer.Grupo := True;
+ FTempAPointer.Selecionado := 0;
+ FTempAPointer.MenuName := 'Grupo';
+ TempNode := TreeAction.Items.AddObject(nil, StringReplace(Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1), '&', '', [rfReplaceAll]), FTempAPointer);
+ TempNode.ImageIndex := 2;
+ TempNode.SelectedIndex := 2;
+ Temp := Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1);
+ end;
+ Temp2 := FTempLista[Contador];
+ Delete(Temp2, 1, pos(#1, Temp2));
+ New(FTempAPointer);
+ SetLength(FListaAction, Length(FListaAction) + 1); //Adicionado por Luiz 18/01/06
+ FListaAction[High(FListaAction)] := FTempAPointer; //Adicionado por Luiz 18/01/06
+ FTempAPointer.Grupo := False;
+ FTempAPointer.Selecionado := 0;
+ FTempAPointer.MenuName := Copy(Temp2, 1, Pos(#2, Temp2) - 1);
+ Delete(Temp2, 1, pos(#2, Temp2));
+ TreeAction.Items.AddChildObject(TempNode, StringReplace(Temp2, '&', '', [rfReplaceAll]), FTempAPointer);
+ end;
+ TreeAction.FullExpand;
+ TreeAction.Perform(WM_VSCROLL, SB_TOP, 0);
+ end;
+
+ //ExtraRights
+ TempNode := nil;
+ if Self.FExtraRights.Count > 0 then
+ begin
+ TreeControls.Items.Clear;
+ if Assigned(FTempLista) then
+ FreeAndNil(FTempLista);
+ FTempLista := TStringList.Create;
+ for Contador := 0 to Pred(FExtraRights.Count) do
+ FTempLista.Append(FExtraRights[Contador].GroupName + #1 + FExtraRights[Contador].Caption + #2 + FExtraRights[Contador].FormName + #3 + FExtraRights[Contador].CompName);
+ FTempLista.Sort;
+ Temp := #1;
+ for Contador := 0 to Pred(FTempLista.Count) do
+ begin
+ if Temp <> Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1) then
+ begin
+ New(FTempCPointer);
+ SetLength(FListaControl, Length(FListaControl) + 1); //Adicionado por Luiz 18/01/06
+ FListaControl[High(FListaControl)] := FTempCPointer; //Adicionado por Luiz 18/01/06
+ FTempCPointer.Grupo := True;
+ FTempCPointer.Selecionado := 0;
+ FTempCPointer.FormName := 'Grupo';
+ FTempCPointer.CompName := 'Grupo';
+ TempNode := TreeControls.Items.AddObject(nil, Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1), FTempCPointer);
+ TempNode.ImageIndex := 2;
+ TempNode.SelectedIndex := 2;
+ Temp := Copy(FTempLista[Contador], 1, Pos(#1, FTempLista[Contador]) - 1);
+ end;
+ Temp2 := FTempLista[Contador];
+ Delete(Temp2, 1, pos(#1, Temp2));
+ New(FTempCPointer);
+ SetLength(FListaControl, Length(FListaControl) + 1); //Adicionado por Luiz 18/01/06
+ FListaControl[High(FListaControl)] := FTempCPointer; //Adicionado por Luiz 18/01/06
+ FTempCPointer.Grupo := False;
+ FTempCPointer.Selecionado := 0;
+ Desc := Copy(Temp2, 1, Pos(#2, Temp2) - 1); // descricao do objeto
+ Delete(Temp2, 1, pos(#2, Temp2));
+
+ FTempCPointer.FormName := Copy(Temp2, 1, Pos(#3, Temp2) - 1);
+ Delete(Temp2, 1, pos(#3, Temp2));
+ FTempCPointer.CompName := Temp2;
+ TreeControls.Items.AddChildObject(TempNode, Desc, FTempCPointer);
+ FTempCPointer := nil;
+ end;
+ TreeControls.FullExpand;
+ TreeControls.Perform(WM_VSCROLL, SB_TOP, 0);
+ end;
+
+ PageMenu.TabVisible := Assigned(FMenu);
+
+ PageAction.TabVisible := Assigned(FActions);
+
+ PageControls.TabVisible := (Assigned(FExtraRights) and (FExtraRights.Count > 0));
+end;
+
+procedure TUserPermis.UnCheckChild(node: TTreeNode);
+var
+ child: TTreeNode;
+begin
+ PTreemenu(node.Data).Selecionado := 0;
+ node.ImageIndex := 0;
+ node.SelectedIndex := 0;
+ child := node.GetFirstChild;
+ repeat
+ if child.HasChildren then
+ UnCheckChild(child)
+ else
+ begin
+ PTreemenu(child.Data).Selecionado := 0;
+ child.ImageIndex := 0;
+ child.SelectedIndex := 0;
+ end;
+ child := node.GetNextChild(child);
+ until child = nil;
+end;
+
+procedure TUserPermis.TreeMenuItem(Marca: Boolean);
+var
+ AbsIdx: Integer;
+begin
+ if Marca then
+ if PTreemenu(TreeMenu.Selected.Data).Selecionado < 2 then
+ begin
+ if PTreemenu(TreeMenu.Selected.Data).Selecionado = 0 then //marcar
+ begin
+ AbsIdx := TreeMenu.Selected.AbsoluteIndex;
+ while AbsIdx > -1 do
+ begin
+ PTreemenu(TreeMenu.Items.Item[AbsIdx].Data).Selecionado := 1;
+ TreeMenu.Items.Item[AbsIdx].ImageIndex := 1;
+ TreeMenu.Items.Item[AbsIdx].SelectedIndex := 1;
+ if TreeMenu.Items.Item[AbsIdx].Parent <> nil then
+ begin
+ AbsIdx := TreeMenu.Items.Item[AbsIdx].Parent.AbsoluteIndex;
+ if PTreemenu(TreeMenu.Items.Item[AbsIdx].Data).Selecionado = 2 then
+ AbsIdx := -1;
+ end
+ else
+ AbsIdx := -1;
+ end;
+ end
+ else
+ if TreeMenu.Selected.HasChildren then
+ UnCheckChild(TreeMenu.Selected)
+ else
+ begin
+ PTreemenu(TreeMenu.Selected.Data).Selecionado := 0;
+ TreeMenu.Selected.ImageIndex := 0;
+ TreeMenu.Selected.SelectedIndex := 0;
+ end; //desmarcar
+ TreeMenu.Repaint;
+ end;
+end;
+
+procedure TUserPermis.TreeActionItem(marca: Boolean);
+begin
+ if not Assigned(FActions) then
+ Exit;
+ if PTreeAction(TreeAction.Selected.Data).Grupo then
+ Exit;
+ if Marca then
+ begin
+ if PTreeAction(TreeAction.Selected.Data).Selecionado < 2 then
+ if PTreeAction(TreeAction.Selected.Data).Selecionado = 0 then
+ PTreeAction(TreeAction.Selected.Data).Selecionado := 1
+ else
+ PTreeAction(TreeAction.Selected.Data).Selecionado := 0;
+ TreeAction.Selected.ImageIndex := PTreeAction(TreeAction.Selected.Data).Selecionado;
+ TreeAction.Selected.SelectedIndex := PTreeAction(TreeAction.Selected.Data).Selecionado;
+ end;
+ TreeAction.Repaint;
+end;
+
+procedure TUserPermis.TreeControlItem(marca: Boolean);
+begin
+ if PTreeControl(TreeControls.Selected.Data).Grupo then
+ Exit;
+ if Marca then
+ begin
+ if PTreeControl(TreeControls.Selected.Data).Selecionado < 2 then
+ if PTreeControl(TreeControls.Selected.Data).Selecionado = 0 then
+ PTreeControl(TreeControls.Selected.Data).Selecionado := 1
+ else
+ PTreeControl(TreeControls.Selected.Data).Selecionado := 0;
+ TreeControls.Selected.ImageIndex := PTreeControl(TreeControls.Selected.Data).Selecionado;
+ TreeControls.Selected.SelectedIndex := PTreeAction(TreeControls.Selected.Data).Selecionado;
+ end;
+ TreeControls.Repaint;
+end;
+
+procedure TUserPermis.TreeMenuClick(Sender: TObject);
+begin
+ if not FChangingTree then
+ TreeMenuItem(True);
+end;
+
+procedure TUserPermis.BtCancelClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TUserPermis.BtLiberaClick(Sender: TObject);
+begin
+ Atualiza(True);
+end;
+
+procedure TUserPermis.Atualiza(Selec: Boolean);
+var
+ Contador: Integer;
+ Temp: Integer;
+begin
+ if Selec then
+ Temp := 1
+ else
+ Temp := 0;
+
+ if PC.ActivePage = PageMenu then
+ begin
+ for Contador := 0 to TreeMenu.Items.Count - 1 do
+ if PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado < 2 then
+ begin
+ PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Temp;
+ TreeMenu.Items[Contador].ImageIndex := Temp;
+ TreeMenu.Items[Contador].SelectedIndex := Temp;
+ end;
+ TreeMenu.Repaint;
+ end
+ else
+ if PC.ActivePage = PageAction then
+ begin
+ for Contador := 0 to TreeAction.Items.Count - 1 do
+ if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then
+ if PTreeAction(TreeAction.Items[Contador].Data).Selecionado < 2 then
+ begin
+ PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Temp;
+ TreeAction.Items[Contador].ImageIndex := Temp;
+ TreeAction.Items[Contador].SelectedIndex := Temp;
+ end;
+ TreeAction.Repaint;
+ end
+ else
+ begin // tabContols
+ for Contador := 0 to TreeControls.Items.Count - 1 do
+ if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then
+ if PTreeControl(TreeControls.Items[Contador].Data).Selecionado < 2 then
+ begin
+ PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Temp;
+ TreeControls.Items[Contador].ImageIndex := Temp;
+ TreeControls.Items[Contador].SelectedIndex := Temp;
+ end;
+ TreeControls.Repaint;
+ end;
+end;
+
+
+procedure TUserPermis.BtBloqueiaClick(Sender: TObject);
+begin
+ Atualiza(False);
+end;
+
+procedure TUserPermis.FormShow(Sender: TObject);
+var
+ Contador: Integer;
+ Selec: Integer;
+begin
+ // Adcionado por Luiz
+ SetLength(FListaAction, 0);
+ SetLength(FListaMenu, 0);
+ SetLength(FListaControl, 0);
+
+ //carrega itens do menu, actions e controles
+ CarregaTreeviews;
+
+ // Exibe Permissoes do Usuario
+ for Contador := 0 to TreeAction.Items.Count - 1 do
+ begin
+ DSPermiss.First;
+ if DSPermiss.Locate('ObjName', PTreeAction(TreeAction.Items[Contador].Data).MenuName, []) then
+ Selec := 1
+ else
+ Selec := 0;
+
+ PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Selec;
+ if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then
+ begin
+ TreeAction.Items[Contador].ImageIndex := Selec;
+ TreeAction.Items[Contador].SelectedIndex := Selec;
+ end;
+ end;
+
+ for Contador := 0 to TreeMenu.Items.Count - 1 do
+ begin
+ DSPermiss.First;
+ if DSPermiss.Locate('ObjName', PTreeMenu(TreeMenu.Items[Contador].Data).MenuName, []) then
+ Selec := 1
+ else
+ Selec := 0;
+
+ PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Selec;
+ TreeMenu.Items[Contador].ImageIndex := Selec;
+ TreeMenu.Items[Contador].SelectedIndex := Selec;
+ end;
+
+ //Extra Rights
+ for Contador := 0 to Pred(TreeControls.Items.Count) do
+ begin
+ DSPermissEX.First;
+ if DSPermissEX.Locate('FormName;ObjName', VarArrayOf([PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName]), []) then
+ Selec := 1
+ else
+ Selec := 0;
+
+ PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Selec;
+ if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then
+ begin
+ TreeControls.Items[Contador].ImageIndex := Selec;
+ TreeControls.Items[Contador].SelectedIndex := Selec;
+ end;
+ end;
+
+ // Exibe Permissoes do Perfil
+ if DSPerfil.Active then
+ begin
+ for Contador := 0 to TreeAction.Items.Count - 1 do
+ begin
+ DSPerfil.First;
+ if DSPerfil.Locate('ObjName', PTreeAction(TreeAction.Items[Contador].Data).MenuName, []) then
+ begin
+ Selec := 2;
+ PTreeAction(TreeAction.Items[Contador].Data).Selecionado := Selec;
+ if not PTreeAction(TreeAction.Items[Contador].Data).Grupo then
+ begin
+ TreeAction.Items[Contador].ImageIndex := Selec;
+ TreeAction.Items[Contador].SelectedIndex := Selec;
+ end;
+ end;
+ end;
+
+ for Contador := 0 to TreeMenu.Items.Count - 1 do
+ begin
+ DSPerfil.First;
+ if DSPerfil.Locate('ObjName', PTreeMenu(TreeMenu.Items[Contador].Data).MenuName, []) then
+ begin
+ Selec := 2;
+ PTreeMenu(TreeMenu.Items[Contador].Data).Selecionado := Selec;
+ TreeMenu.Items[Contador].ImageIndex := Selec;
+ TreeMenu.Items[Contador].SelectedIndex := Selec;
+ end;
+ end;
+
+ //Extra Rights
+ for Contador := 0 to Pred(TreeControls.Items.Count) do
+ begin
+ DSPerfilEX.First;
+ if DSPerfilEX.Locate('FormName;ObjName', VarArrayOf([PTreeControl(TreeControls.Items[Contador].Data).FormName, PTreeControl(TreeControls.Items[Contador].Data).CompName]), []) then
+ begin
+ Selec := 2;
+ PTreeControl(TreeControls.Items[Contador].Data).Selecionado := Selec;
+ if not PTreeControl(TreeControls.Items[Contador].Data).Grupo then
+ begin
+ TreeControls.Items[Contador].ImageIndex := Selec;
+ TreeControls.Items[Contador].SelectedIndex := Selec;
+ end;
+ end;
+ end;
+ end;
+
+ TreeAction.Repaint;
+ TreeMenu.Repaint;
+ FChangingTree := False;
+end;
+
+procedure TUserPermis.TreeActionClick(Sender: TObject);
+begin
+ if not FChangingTree then
+ TreeActionItem(True);
+end;
+
+procedure TUserPermis.TreeControlsClick(Sender: TObject);
+begin
+ if not FChangingTree then
+ TreeControlItem(True);
+end;
+
+procedure TUserPermis.TreeMenuCollapsing(Sender: TObject; Node: TTreeNode; var AllowCollapse: Boolean);
+begin
+ if (Self.Showing) and (TTreeView(Sender).Focused) then
+ FChangingTree := True;
+end;
+
+procedure TUserPermis.TreeMenuKeyPress(Sender: TObject; var Key: char);
+begin
+ if Key = ' ' then
+ begin
+ TTreeView(Sender).OnClick(Sender);
+ Key := #0;
+ end;
+end;
+
+procedure TUserPermis.TreeMenuMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ FChangingTree := False;
+end;
+
+procedure TUserPermis.FormDestroy(Sender: TObject);
+var
+ Contador: Integer;
+begin
+ // Adicionado por Luiz 18/01/06
+ if Assigned(DSPermiss) then
+ FreeAndNil(DSPermiss);
+
+ if Assigned(DSPermissEX) then
+ FreeAndNil(DSPermissEX);
+
+ if Assigned(DSPerfil) then
+ FreeAndNil(DSPerfil);
+
+ if Assigned(DSPerfilEX) then
+ FreeAndNil(DSPerfilEX);
+
+ if Assigned(FTempLista) then
+ FreeAndNil(FTempLista);
+
+ for Contador := 0 to High(FListaMenu) do
+ Dispose(FListaMenu[Contador]);
+
+ for Contador := 0 to High(FListaAction) do
+ Dispose(FListaAction[Contador]);
+
+ for Contador := 0 to High(FListaControl) do
+ Dispose(FListaControl[Contador]);
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/md5.pas b/official/2.31RC1/Source/md5.pas
new file mode 100644
index 0000000..13fcc9e
--- /dev/null
+++ b/official/2.31RC1/Source/md5.pas
@@ -0,0 +1,401 @@
+// tabs = 2
+// -----------------------------------------------------------------------------------------------
+
+// MD5 Message-Digest for Delphi 4
+
+ // Delphi 4 Unit implementing the
+ // RSA Data Security, Inc. MD5 Message-Digest Algorithm
+
+// Implementation of Ronald L. Rivest's RFC 1321
+
+ // Copyright © 1997-1999 Medienagentur Fichtner & Meyer
+ // Written by Matthias Fichtner
+
+// -----------------------------------------------------------------------------------------------
+// See RFC 1321 for RSA Data Security's copyright and license notice!
+// -----------------------------------------------------------------------------------------------
+
+// 14-Jun-97 mf Implemented MD5 according to RFC 1321 RFC 1321
+// 16-Jun-97 mf Initial release of the compiled unit (no source code) RFC 1321
+// 28-Feb-99 mf Added MD5Match function for comparing two digests RFC 1321
+// 13-Sep-99 mf Reworked the entire unit RFC 1321
+// 17-Sep-99 mf Reworked the "Test Driver" project RFC 1321
+// 19-Sep-99 mf Release of sources for MD5 unit and "Test Driver" project RFC 1321
+
+// -----------------------------------------------------------------------------------------------
+ // The latest release of md5.pas will always be available from
+ // the distribution site at: http://www.fichtner.net/delphi/md5/
+// -----------------------------------------------------------------------------------------------
+ // Please send questions, bug reports and suggestions
+ // regarding this code to: mfichtner@fichtner-meyer.com
+// -----------------------------------------------------------------------------------------------
+ // This code is provided "as is" without express or
+ // implied warranty of any kind. Use it at your own risk.
+// -----------------------------------------------------------------------------------------------
+
+unit md5;
+
+// -----------------------------------------------------------------------------------------------
+interface
+// -----------------------------------------------------------------------------------------------
+
+uses
+ Windows;
+
+type
+ MD5Count = array[0..1] of DWORD;
+ MD5State = array[0..3] of DWORD;
+ MD5Block = array[0..15] of DWORD;
+ MD5CBits = array[0..7] of Byte;
+ MD5Digest = array[0..15] of Byte;
+ MD5Buffer = array[0..63] of Byte;
+
+ MD5Context = record
+ State: MD5State;
+ Count: MD5Count;
+ Buffer: MD5Buffer;
+ end;
+
+procedure MD5Init(var Context: MD5Context);
+procedure MD5Update(var Context: MD5Context; Input: PChar; Length: longword);
+procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);
+
+function MD5String(M: String): MD5Digest;
+function MD5File(N: String): MD5Digest;
+function MD5Print(D: MD5Digest): String;
+
+function MD5Match(D1, D2: MD5Digest): Boolean;
+
+// -----------------------------------------------------------------------------------------------
+implementation
+// -----------------------------------------------------------------------------------------------
+
+var
+ PADDING: MD5Buffer = ($80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00);
+
+function F(x, y, z: DWORD): DWORD;
+begin
+ Result := (x and y) or ((not x) and z);
+end;
+
+function G(x, y, z: DWORD): DWORD;
+begin
+ Result := (x and z) or (y and (not z));
+end;
+
+function H(x, y, z: DWORD): DWORD;
+begin
+ Result := x xor y xor z;
+end;
+
+function I(x, y, z: DWORD): DWORD;
+begin
+ Result := y xor (x or (not z));
+end;
+
+procedure rot(var x: DWORD; n: Byte);
+begin
+ x := (x shl n) or (x shr (32 - n));
+end;
+
+procedure FF(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD);
+begin
+ Inc(a, F(b, c, d) + x + ac);
+ rot(a, s);
+ Inc(a, b);
+end;
+
+procedure GG(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD);
+begin
+ Inc(a, G(b, c, d) + x + ac);
+ rot(a, s);
+ Inc(a, b);
+end;
+
+procedure HH(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD);
+begin
+ Inc(a, H(b, c, d) + x + ac);
+ rot(a, s);
+ Inc(a, b);
+end;
+
+procedure II(var a: DWORD; b, c, d, x: DWORD; s: Byte; ac: DWORD);
+begin
+ Inc(a, I(b, c, d) + x + ac);
+ rot(a, s);
+ Inc(a, b);
+end;
+
+// -----------------------------------------------------------------------------------------------
+
+// Encode Count bytes at Source into (Count / 4) DWORDs at Target
+procedure Encode(Source, Target: pointer; Count: longword);
+var
+ S: PByte;
+ T: PDWORD;
+ I: longword;
+begin
+ S := Source;
+ T := Target;
+ for I := 1 to Count div 4 do
+ begin
+ T^ := S^;
+ Inc(S);
+ T^ := T^ or (S^ shl 8);
+ Inc(S);
+ T^ := T^ or (S^ shl 16);
+ Inc(S);
+ T^ := T^ or (S^ shl 24);
+ Inc(S);
+ Inc(T);
+ end;
+end;
+
+// Decode Count DWORDs at Source into (Count * 4) Bytes at Target
+procedure Decode(Source, Target: pointer; Count: longword);
+var
+ S: PDWORD;
+ T: PByte;
+ I: longword;
+begin
+ S := Source;
+ T := Target;
+ for I := 1 to Count do
+ begin
+ T^ := S^ and $ff;
+ Inc(T);
+ T^ := (S^ shr 8) and $ff;
+ Inc(T);
+ T^ := (S^ shr 16) and $ff;
+ Inc(T);
+ T^ := (S^ shr 24) and $ff;
+ Inc(T);
+ Inc(S);
+ end;
+end;
+
+// Transform State according to first 64 bytes at Buffer
+procedure Transform(Buffer: pointer; var State: MD5State);
+var
+ a, b, c, d: DWORD;
+ Block: MD5Block;
+begin
+ Encode(Buffer, @Block, 64);
+ a := State[0];
+ b := State[1];
+ c := State[2];
+ d := State[3];
+ FF(a, b, c, d, Block[0], 7, $d76aa478);
+ FF(d, a, b, c, Block[1], 12, $e8c7b756);
+ FF(c, d, a, b, Block[2], 17, $242070db);
+ FF(b, c, d, a, Block[3], 22, $c1bdceee);
+ FF(a, b, c, d, Block[4], 7, $f57c0faf);
+ FF(d, a, b, c, Block[5], 12, $4787c62a);
+ FF(c, d, a, b, Block[6], 17, $a8304613);
+ FF(b, c, d, a, Block[7], 22, $fd469501);
+ FF(a, b, c, d, Block[8], 7, $698098d8);
+ FF(d, a, b, c, Block[9], 12, $8b44f7af);
+ FF(c, d, a, b, Block[10], 17, $ffff5bb1);
+ FF(b, c, d, a, Block[11], 22, $895cd7be);
+ FF(a, b, c, d, Block[12], 7, $6b901122);
+ FF(d, a, b, c, Block[13], 12, $fd987193);
+ FF(c, d, a, b, Block[14], 17, $a679438e);
+ FF(b, c, d, a, Block[15], 22, $49b40821);
+ GG(a, b, c, d, Block[1], 5, $f61e2562);
+ GG(d, a, b, c, Block[6], 9, $c040b340);
+ GG(c, d, a, b, Block[11], 14, $265e5a51);
+ GG(b, c, d, a, Block[0], 20, $e9b6c7aa);
+ GG(a, b, c, d, Block[5], 5, $d62f105d);
+ GG(d, a, b, c, Block[10], 9, $2441453);
+ GG(c, d, a, b, Block[15], 14, $d8a1e681);
+ GG(b, c, d, a, Block[4], 20, $e7d3fbc8);
+ GG(a, b, c, d, Block[9], 5, $21e1cde6);
+ GG(d, a, b, c, Block[14], 9, $c33707d6);
+ GG(c, d, a, b, Block[3], 14, $f4d50d87);
+ GG(b, c, d, a, Block[8], 20, $455a14ed);
+ GG(a, b, c, d, Block[13], 5, $a9e3e905);
+ GG(d, a, b, c, Block[2], 9, $fcefa3f8);
+ GG(c, d, a, b, Block[7], 14, $676f02d9);
+ GG(b, c, d, a, Block[12], 20, $8d2a4c8a);
+ HH(a, b, c, d, Block[5], 4, $fffa3942);
+ HH(d, a, b, c, Block[8], 11, $8771f681);
+ HH(c, d, a, b, Block[11], 16, $6d9d6122);
+ HH(b, c, d, a, Block[14], 23, $fde5380c);
+ HH(a, b, c, d, Block[1], 4, $a4beea44);
+ HH(d, a, b, c, Block[4], 11, $4bdecfa9);
+ HH(c, d, a, b, Block[7], 16, $f6bb4b60);
+ HH(b, c, d, a, Block[10], 23, $bebfbc70);
+ HH(a, b, c, d, Block[13], 4, $289b7ec6);
+ HH(d, a, b, c, Block[0], 11, $eaa127fa);
+ HH(c, d, a, b, Block[3], 16, $d4ef3085);
+ HH(b, c, d, a, Block[6], 23, $4881d05);
+ HH(a, b, c, d, Block[9], 4, $d9d4d039);
+ HH(d, a, b, c, Block[12], 11, $e6db99e5);
+ HH(c, d, a, b, Block[15], 16, $1fa27cf8);
+ HH(b, c, d, a, Block[2], 23, $c4ac5665);
+ II(a, b, c, d, Block[0], 6, $f4292244);
+ II(d, a, b, c, Block[7], 10, $432aff97);
+ II(c, d, a, b, Block[14], 15, $ab9423a7);
+ II(b, c, d, a, Block[5], 21, $fc93a039);
+ II(a, b, c, d, Block[12], 6, $655b59c3);
+ II(d, a, b, c, Block[3], 10, $8f0ccc92);
+ II(c, d, a, b, Block[10], 15, $ffeff47d);
+ II(b, c, d, a, Block[1], 21, $85845dd1);
+ II(a, b, c, d, Block[8], 6, $6fa87e4f);
+ II(d, a, b, c, Block[15], 10, $fe2ce6e0);
+ II(c, d, a, b, Block[6], 15, $a3014314);
+ II(b, c, d, a, Block[13], 21, $4e0811a1);
+ II(a, b, c, d, Block[4], 6, $f7537e82);
+ II(d, a, b, c, Block[11], 10, $bd3af235);
+ II(c, d, a, b, Block[2], 15, $2ad7d2bb);
+ II(b, c, d, a, Block[9], 21, $eb86d391);
+ Inc(State[0], a);
+ Inc(State[1], b);
+ Inc(State[2], c);
+ Inc(State[3], d);
+end;
+
+// -----------------------------------------------------------------------------------------------
+
+// Initialize given Context
+procedure MD5Init(var Context: MD5Context);
+begin
+ with Context do
+ begin
+ State[0] := $67452301;
+ State[1] := $efcdab89;
+ State[2] := $98badcfe;
+ State[3] := $10325476;
+ Count[0] := 0;
+ Count[1] := 0;
+ ZeroMemory(@Buffer, SizeOf(MD5Buffer));
+ end;
+end;
+
+// Update given Context to include Length bytes of Input
+procedure MD5Update(var Context: MD5Context; Input: PChar; Length: longword);
+var
+ Index: longword;
+ PartLen: longword;
+ I: longword;
+begin
+ with Context do
+ begin
+ Index := (Count[0] shr 3) and $3f;
+ Inc(Count[0], Length shl 3);
+ if Count[0] < (Length shl 3) then
+ Inc(Count[1]);
+ Inc(Count[1], Length shr 29);
+ end;
+ PartLen := 64 - Index;
+ if Length >= PartLen then
+ begin
+ CopyMemory(@Context.Buffer[Index], Input, PartLen);
+ Transform(@Context.Buffer, Context.State);
+ I := PartLen;
+ while I + 63 < Length do
+ begin
+ Transform(@Input[I], Context.State);
+ Inc(I, 64);
+ end;
+ Index := 0;
+ end
+ else
+ I := 0;
+ CopyMemory(@Context.Buffer[Index], @Input[I], Length - I);
+end;
+
+// Finalize given Context, create Digest and zeroize Context
+procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest);
+var
+ Bits: MD5CBits;
+ Index: longword;
+ PadLen: longword;
+begin
+ Decode(@Context.Count, @Bits, 2);
+ Index := (Context.Count[0] shr 3) and $3f;
+ if Index < 56 then
+ PadLen := 56 - Index
+ else
+ PadLen := 120 - Index;
+ MD5Update(Context, @PADDING, PadLen);
+ MD5Update(Context, @Bits, 8);
+ Decode(@Context.State, @Digest, 4);
+ ZeroMemory(@Context, SizeOf(MD5Context));
+end;
+
+// -----------------------------------------------------------------------------------------------
+
+// Create digest of given Message
+function MD5String(M: String): MD5Digest;
+var
+ Context: MD5Context;
+begin
+ MD5Init(Context);
+ MD5Update(Context, PChar(M), length(M));
+ MD5Final(Context, Result);
+end;
+
+// Create digest of file with given Name
+function MD5File(N: String): MD5Digest;
+var
+ FileHandle: THandle;
+ MapHandle: THandle;
+ ViewPointer: pointer;
+ Context: MD5Context;
+begin
+ MD5Init(Context);
+ FileHandle := CreateFile(PChar(N), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
+ nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN, 0);
+ if FileHandle <> INVALID_HANDLE_VALUE then
+ try
+ MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
+ if MapHandle <> 0 then
+ try
+ ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
+ if ViewPointer <> nil then
+ try
+ MD5Update(Context, ViewPointer, GetFileSize(FileHandle, nil));
+ finally
+ UnmapViewOfFile(ViewPointer);
+ end;
+ finally
+ CloseHandle(MapHandle);
+ end;
+ finally
+ CloseHandle(FileHandle);
+ end;
+ MD5Final(Context, Result);
+end;
+
+// Create hex representation of given Digest
+function MD5Print(D: MD5Digest): String;
+var
+ I: Byte;
+const
+ Digits: array[0..15] of char =
+ ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
+begin
+ Result := '';
+ for I := 0 to 15 do
+ Result := Result + Digits[(D[I] shr 4) and $0f] + Digits[D[I] and $0f];
+end;
+
+// -----------------------------------------------------------------------------------------------
+
+// Compare two Digests
+function MD5Match(D1, D2: MD5Digest): Boolean;
+var
+ I: Byte;
+begin
+ I := 0;
+ Result := True;
+ while Result and (I < 16) do
+ begin
+ Result := D1[I] = D2[I];
+ Inc(I);
+ end;
+end;
+
+end.
+
diff --git a/official/2.31RC1/Source/pUCFrame_Log.dfm b/official/2.31RC1/Source/pUCFrame_Log.dfm
new file mode 100644
index 0000000..d3067b1
--- /dev/null
+++ b/official/2.31RC1/Source/pUCFrame_Log.dfm
@@ -0,0 +1,593 @@
+object UCFrame_Log: TUCFrame_Log
+ Left = 0
+ Top = 0
+ Width = 563
+ Height = 498
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ TabStop = True
+ object DBGrid1: TDBGrid
+ Left = 0
+ Top = 0
+ Width = 563
+ Height = 394
+ Align = alClient
+ Ctl3D = True
+ DataSource = DataSource1
+ DefaultDrawing = False
+ Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit]
+ ParentCtl3D = False
+ ReadOnly = True
+ TabOrder = 0
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'MS Sans Serif'
+ TitleFont.Style = []
+ OnDrawColumnCell = DBGrid1DrawColumnCell
+ Columns = <
+ item
+ Expanded = False
+ Visible = True
+ end
+ item
+ Expanded = False
+ Visible = True
+ end
+ item
+ Expanded = False
+ Visible = True
+ end
+ item
+ Expanded = False
+ Visible = True
+ end
+ item
+ Expanded = False
+ Visible = True
+ end>
+ end
+ object Panel1: TPanel
+ Left = 0
+ Top = 394
+ Width = 563
+ Height = 104
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 1
+ object lbUsuario: TLabel
+ Left = 16
+ Top = 8
+ Width = 42
+ Height = 13
+ Caption = 'Usu'#225'rio :'
+ end
+ object lbData: TLabel
+ Left = 176
+ Top = 8
+ Width = 29
+ Height = 13
+ Caption = 'Data :'
+ end
+ object lbNivel: TLabel
+ Left = 376
+ Top = 8
+ Width = 69
+ Height = 13
+ Caption = 'N'#237'vel m'#237'nimo :'
+ end
+ object Bevel3: TBevel
+ Left = 16
+ Top = 63
+ Width = 529
+ Height = 2
+ Style = bsRaised
+ end
+ object btfiltro: TBitBtn
+ Left = 124
+ Top = 71
+ Width = 101
+ Height = 25
+ Cursor = crHandPoint
+ Caption = 'Aplicar filtro'
+ Enabled = False
+ TabOrder = 4
+ OnClick = btfiltroClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7A694731FF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA8A8A86C
+ 6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7AB09888694731FF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7B1
+ B1B16B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7ADCCCC286624D694731FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DA
+ DADA8585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7ADECFC686624D694731FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DC
+ DCDC8484846C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7ADFD1C886624D694731FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DD
+ DDDD8585856B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7AE1D3CB86624D694731FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7DF
+ DFDF8585856B6B6BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7AE2D6CE86624D694731FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7E2
+ E2E28585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFA68B7AE4D8D086624D694731FF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA8A8A8E3
+ E3E38585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFA68B7AFFFFFFDACABFBDA69686624D694731FF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFD8
+ D8D8BDBDBD8484846C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFA68B7AFFFFFFF0F0F0E1D4CCD1BBADB4937E86624D694731FF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFF5F5F5E0
+ E0E0CDCDCDAEAEAE8585856C6C6CFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFA68B7AFFFFFFF0F0F0ECE4E0E6DBD5DFD1C7CFB9AABE9F8A86624D6947
+ 31FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFF5F5F5ECECECE5
+ E5E5DEDEDECBCBCBB7B7B78585856B6B6BFF00FFFF00FFFF00FFFF00FFFF00FF
+ A68B7AFFFFFFF0F0F0F5F0EEF1EAE7ECE3DEE6DBD5DCCDC2CFB9AAB4937E8662
+ 4D694731FF00FFFF00FFFF00FFFF00FFA7A7A7FFFFFFF5F5F5F5F5F5F0F0F0EC
+ ECECE6E6E6DADADACBCBCBAEAEAE8585856B6B6BFF00FFFF00FFFF00FFA68B7A
+ FFFFFFF0F0F0F3EEEAF0E9E5EDE6E1E5D9D1E5D9D1E2D6CEDED0C6CFB9AABE9F
+ 8A86624D694731FF00FFFF00FFA7A7A7FFFFFFF5F5F5F3F3F3F0F0F0EDEDEDE4
+ E4E4E3E3E3E2E2E2DDDDDDCBCBCBB7B7B78585856C6C6CFF00FFFF00FFB39A89
+ B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A89B39A
+ 89B39A89B39A89FF00FFFF00FFB4B4B4B3B3B3B3B3B3B3B3B3B4B4B4B3B3B3B3
+ B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3FF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object btfecha: TBitBtn
+ Left = 338
+ Top = 71
+ Width = 101
+ Height = 25
+ Cursor = crHandPoint
+ Caption = 'Fechar'
+ TabOrder = 5
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ object btexclui: TBitBtn
+ Left = 231
+ Top = 71
+ Width = 101
+ Height = 25
+ Cursor = crHandPoint
+ Caption = 'Excluir Log'
+ TabOrder = 6
+ OnClick = btexcluiClick
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000220B0000220B000000010000000100000031DE000031
+ E7000031EF000031F700FF00FF000031FF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00040404040404
+ 0404040404040404000004000004040404040404040404000004040000000404
+ 0404040404040000040404000000000404040404040000040404040402000000
+ 0404040400000404040404040404000000040000000404040404040404040400
+ 0101010004040404040404040404040401010204040404040404040404040400
+ 0201020304040404040404040404030201040403030404040404040404050203
+ 0404040405030404040404040303050404040404040303040404040303030404
+ 0404040404040403040403030304040404040404040404040404030304040404
+ 0404040404040404040404040404040404040404040404040404}
+ end
+ object ComboUsuario: TComboBox
+ Left = 16
+ Top = 24
+ Width = 145
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ OnChange = ComboUsuarioChange
+ end
+ object Data1: TDateTimePicker
+ Left = 176
+ Top = 25
+ Width = 89
+ Height = 21
+ Date = 37615.000000000000000000
+ Time = 37615.000000000000000000
+ TabOrder = 1
+ OnChange = Data1Change
+ end
+ object Data2: TDateTimePicker
+ Left = 271
+ Top = 24
+ Width = 89
+ Height = 21
+ Date = 37615.000000000000000000
+ Time = 37615.000000000000000000
+ TabOrder = 2
+ OnChange = ComboUsuarioChange
+ end
+ object ComboNivel: TComboBox
+ Left = 376
+ Top = 24
+ Width = 145
+ Height = 24
+ Style = csOwnerDrawFixed
+ ItemHeight = 18
+ TabOrder = 3
+ OnChange = ComboUsuarioChange
+ OnDrawItem = ComboNivelDrawItem
+ Items.Strings = (
+ 'Faible'
+ 'Moyen'
+ 'Haut'
+ 'Critique')
+ end
+ end
+ object DataSource1: TDataSource
+ Left = 440
+ end
+ object ImageList1: TImageList
+ Left = 136
+ Top = 153
+ Bitmap = {
+ 494C010104000900040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+ 0000000000003600000028000000400000002000000001002000000000000020
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000DEDEDE00DEDEDE00DEDEDE00D6D6D600000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000E7C4B300E7C4B300E7C4B300D6B9AE00000000000000
+ 000000000000000000000000000000000000000000000000000000A4EB000088
+ C8000088C8000088C8000088C8000088C8000088C8000088C8000088C8000088
+ C8000088C8000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000DEDEDE00F1F1F100E0E0E000E0E0E000F1F1F100D6D6D6000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000E7C4B300F2E7E100CAD0D600CAD0D600F2E7E100D6B9AE000000
+ 000000000000000000000000000000000000000000002DBCFF0040D6F00015C1
+ E60015C1E60015C1E60013C0E2003471890011BFDE0015C1E60015C1E60015C1
+ E60015C1E60000A4EB00000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF000000FF000000FF0000000000000000000000000000000000000000000000
+ 0000DEDEDE00F1F1F100FEFEFE00B5B5B500ACACAC00D1D1D100F1F1F100D6D6
+ D600000000000000000000000000000000000000000000000000000000000000
+ 0000E7C4B300F2E7E100FEFEFE00D0805D00C4695200BFB9B900F2E7E100D6B9
+ AE00000000000000000000000000000000000000000078CCE80066E5F8002ECB
+ EC002DCAEB002CCAEB003471890031001000347189002BC8EA002BC8EA002BC8
+ EA0013B9DD002DBCFF000000000000000000000000000000FF000000FF000000
+ FF000000FF000000FF000000FF0000000000000000000000FF000000FF000000
+ FF000000FF000000FF000000FF0000000000000000000000000000000000DEDE
+ DE00F1F1F100FEFEFE00B5B5B500ACACAC00A8A8A800ACACAC00D1D1D100F1F1
+ F100D6D6D600000000000000000000000000000000000000000000000000E7C4
+ B300F2E7E100FEFEFE00D0805D00C46E5200BF694C00C4695200BFB9B900F2E7
+ E100D6B9AE0000000000000000000000000000000000000000002DBCFF0040D6
+ F00039CEEC0038CDEB002DC8E2003471890021C4DA0036CAEA0035CAEA0035CA
+ EA0000A4EB0000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF0000000000000000000000FF000000FF000000
+ FF000000FF000000FF0000000000000000000000000000000000DEDEDE00F1F1
+ F100FEFEFE00B5B5B500ACACAC00F5F5F500F5F5F500EFEFEF00A8A8A800D1D1
+ D100F1F1F100D6D6D60000000000000000000000000000000000E7C4B300F2E7
+ E100FEFEFE00D0805D00C46E5200F8EDE700F8EDE700F8E1D600BF694C00BFB9
+ B900F2E7E100D6B9AE000000000000000000000000000000000078CCE80066E5
+ F8003ACEEC0039CEEC0038CDEB003471890037CBEA0036CAEA0036CAEA0013B9
+ DD002DBCFF0000000000000000000000000000000000000000000000FF000000
+ FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF000000FF000000FF00000000000000000000000000DEDEDE00F1F1F100FEFE
+ FE00B5B5B500ACACAC00ACACAC00ACACAC00F5F5F500ACACAC00ACACAC00A8A8
+ A800D1D1D100F1F1F100D6D6D6000000000000000000E7C4B300F2E7E100FEFE
+ FE00D0805D00C46E5200C46E5200C46E5200F8EDE700C46E5200C46E5200BF69
+ 4C00BFB9B900F2E7E100D6B9AE00000000000000000000000000000000002DBC
+ FF0040D6F0003BCFED0017BACC003100100017BACC0037CAEA0036CAEA0000A4
+ EB00000000000000000000000000000000000000000000000000000000000000
+ FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
+ FF000000FF0000000000000000000000000000000000E5E5E500FEFEFE00B5B5
+ B500B0B0B000ACACAC00ACACAC00ACACAC00F5F5F500ACACAC00ACACAC00ACAC
+ AC00A8A8A800D1D1D100D6D6D6000000000000000000EDD0C400FEFEFE00D080
+ 5D00CA7A5700C46E5200C46E5200C46E5200F8EDE700C46E5200C46E5200C46E
+ 5200BF694C00BFB9B900D6B9AE000000000000000000000000000000000078CC
+ E80066E5F8003CD0ED001796A700310010001796A70037CBEA0013B9DD002DBC
+ FF00000000000000000000000000000000000000000000000000000000000000
+ FF000000FF000000FF000000FF0000000000000000000000FF000000FF000000
+ FF000000FF0000000000000000000000000000000000E5E5E500FFFFFF00EBEB
+ EB00C4C4C400B0B0B000ACACAC00ACACAC00F5F5F500ACACAC00ACACAC00ACAC
+ AC00B5B5B500E0E0E000D6D6D6000000000000000000EDD0C400FFFFFF00F8E1
+ CA00E1A27400CA7A5700C46E5200C46E5200F8EDE700C46E5200C46E5200C46E
+ 5200D0805D00CAD0D600D6B9AE00000000000000000000000000000000000000
+ 00002DBCFF0040D6F0003471890031001000286F7D0038CCEB0000A4EB000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF000000FF0000000000000000000000FF000000FF000000
+ FF000000000000000000000000000000000000000000DEDEDE00F1F1F100FFFF
+ FF00EBEBEB00C4C4C400B0B0B000F5F5F500F5F5F500ACACAC00ACACAC00B5B5
+ B500F1F1F100F1F1F100D6D6D6000000000000000000E7C4B300F2E7E100FFFF
+ FF00F8E1CA00E1A27400CA7A5700F8EDE700F8EDE700C46E5200C46E5200D080
+ 5D00E7EDED00F2E7E100D6B9AE00000000000000000000000000000000000000
+ 000078CCE80066E5F80034718900310010003471890013B9DD002DBCFF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FF000000FF000000FF0000000000000000000000FF000000FF000000
+ FF00000000000000000000000000000000000000000000000000DEDEDE00F1F1
+ F100FFFFFF00EBEBEB00C4C4C400B0B0B000CDCDCD00ACACAC00B5B5B500FEFE
+ FE00F1F1F100DBDBDB0000000000000000000000000000000000E7C4B300F2E7
+ E100FFFFFF00F8E1CA00E1A27400CA7A5700E7AE8500C46E5200D0805D00FEFE
+ FE00F2E7E100E1C4B30000000000000000000000000000000000000000000000
+ 0000000000002DBCFF0030B3CA002B5768002396A70000A4EB00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF000000FF0000000000000000000000FF000000FF000000
+ 000000000000000000000000000000000000000000000000000000000000DEDE
+ DE00F1F1F100FFFFFF00EBEBEB00C4C4C400F5F5F500B5B5B500FEFEFE00F1F1
+ F100DBDBDB00000000000000000000000000000000000000000000000000E7C4
+ B300F2E7E100FFFFFF00F8E1CA00E1A27400F8EDE700D0805D00FEFEFE00F2E7
+ E100E1C4B3000000000000000000000000000000000000000000000000000000
+ 00000000000078CCE80066E5F8003ACFEC0013B9DD002DBCFF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000FF000000FF0000000000000000000000FF000000FF000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000DEDEDE00F1F1F100FFFFFF00EBEBEB00B5B5B500FEFEFE00F1F1F100DBDB
+ DB00000000000000000000000000000000000000000000000000000000000000
+ 0000E7C4B300F2E7E100FFFFFF00F8E1CA00D0805D00FEFEFE00F2E7E100E1C4
+ B300000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000002DBCFF0066E5F80000A4EB0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000FF000000FF000000FF000000FF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000DEDEDE00F1F1F100FFFFFF00FEFEFE00F1F1F100DBDBDB000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000E7C4B300F2E7E100FFFFFF00FEFEFE00F2E7E100E1C4B3000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000078CCE8003DD2EE002DBCFF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000FF000000FF000000FF000000FF00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000DEDEDE00DEDEDE00DBDBDB00DBDBDB00000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000E7C4B300E7C4B300E1C4B300E1C4B300000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000002DBCFF000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000FF000000FF0000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000424D3E000000000000003E000000
+ 2800000040000000200000000100010000000000000100000000000000000000
+ 000000000000000000000000FFFFFF0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000FFFFFFFFFFFFFFFFFC3FFC3FC007FFFF
+ F81FF81F8003C003F00FF00F80038001E007E007C007C003C003C003C007C003
+ 80018001E00FE00780018001E00FE00780018001F01FF00F80018001F01FF00F
+ C003C003F83FF81FE007E007F83FF81FF00FF00FFC7FFC3FF81FF81FFC7FFC3F
+ FC3FFC3FFEFFFE7FFFFFFFFFFFFFFFFF00000000000000000000000000000000
+ 000000000000}
+ end
+end
diff --git a/official/2.31RC1/Source/pUCFrame_Log.pas b/official/2.31RC1/Source/pUCFrame_Log.pas
new file mode 100644
index 0000000..8234d04
--- /dev/null
+++ b/official/2.31RC1/Source/pUCFrame_Log.pas
@@ -0,0 +1,305 @@
+unit pUCFrame_Log;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5_UP}
+{$ELSE}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ ComCtrls,
+ Controls,
+ DB,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ ImgList,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TUCFrame_Log = class(TFrame)
+ DataSource1: TDataSource;
+ ImageList1: TImageList;
+ DBGrid1: TDBGrid;
+ Panel1: TPanel;
+ lbUsuario: TLabel;
+ lbData: TLabel;
+ lbNivel: TLabel;
+ Bevel3: TBevel;
+ btfiltro: TBitBtn;
+ btfecha: TBitBtn;
+ btexclui: TBitBtn;
+ ComboUsuario: TComboBox;
+ Data1: TDateTimePicker;
+ Data2: TDateTimePicker;
+ ComboNivel: TComboBox;
+ procedure ComboNivelDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
+ procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
+ procedure ComboUsuarioChange(Sender: TObject);
+ procedure btexcluiClick(Sender: TObject);
+ procedure Data1Change(Sender: TObject);
+ procedure btfiltroClick(Sender: TObject);
+ private
+ procedure AplicaFiltro;
+ public
+ ListIdUser: TStringList;
+ DSLog, DSCmd: TDataset;
+ FUsercontrol: TUserControl;
+ procedure SetWindow;
+ destructor Destroy; override;
+ end;
+
+implementation
+
+uses
+ UCDataInfo;
+
+{$R *.dfm}
+destructor TUCFrame_Log.Destroy;
+begin
+ FreeAndnil( DSLog );
+ FreeAndnil( DSCmd );
+ FreeAndNil( ListIdUser );
+ inherited;
+end;
+
+procedure TUCFrame_Log.ComboNivelDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
+var
+ TempImg: Graphics.TBitmap;
+begin
+ TempImg := Graphics.TBitmap.Create;
+ Imagelist1.GetBitmap(Index, TempImg);
+ ComboNivel.Canvas.Draw(Rect.Left + 5, Rect.Top + 1, TempImg);
+ ComboNivel.Canvas.TextRect(Rect, Rect.Left + 30, Rect.Top + 2, ComboNivel.items[Index]);
+ ComboNivel.Canvas.Draw(Rect.Left + 5, Rect.Top + 1, TempImg);
+ FreeAndNil(TempImg);
+end;
+
+procedure TUCFrame_Log.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
+var
+ TempImg: Graphics.TBitmap;
+ FData: System.TDateTime;
+ TempData: String;
+begin
+ if DSLog.IsEmpty then
+ Exit;
+
+ if UpperCase(Column.FieldName) = 'NIVEL' then
+ begin
+ if Column.Field.AsInteger >= 0 then
+ begin
+ TempImg := Graphics.TBitmap.Create;
+ imagelist1.GetBitmap(Column.Field.AsInteger, TempImg);
+ DbGrid1.Canvas.Draw((((Rect.Left + Rect.Right) - TempImg.Width) div 2), rect.Top, Tempimg);
+ FreeAndNil(TempImg);
+ end
+ else
+ DbGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Column.Field.AsString);
+ end
+ else
+ if UpperCase(Column.FieldName) = 'DATA' then
+ begin
+ TempData := Column.Field.AsString;
+ FData := EncodeDate(StrToInt(Copy(Tempdata, 1, 4)), StrToInt(Copy(Tempdata, 5, 2)), StrToInt(Copy(Tempdata, 7, 2))) +
+ EncodeTime(StrToInt(Copy(TempData, 9, 2)), StrToInt(Copy(TempData, 11, 2)), StrToInt(Copy(TempData, 13, 2)), 0);
+ DbGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, DateTimeToStr(FData));
+ end
+ else
+ DbGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Column.Field.AsString);
+end;
+
+procedure TUCFrame_Log.ComboUsuarioChange(Sender: TObject);
+begin
+ btFiltro.Enabled := True;
+end;
+
+procedure TUCFrame_Log.btexcluiClick(Sender: TObject);
+var
+ FTabLog, Temp: String;
+begin
+ //modified by fduenas
+ if MessageBox(Handle, PChar(FUsercontrol.UserSettings.Log.PromptDelete),
+ PChar(FUsercontrol.UserSettings.Log.PromptDelete_WindowCaption), mb_YesNo) <> mrYes then
+ Exit;
+
+ btFiltro.Enabled := False;
+ FTabLog := FUsercontrol.LogControl.TableLog;
+ Temp := 'Delete from ' + FTabLog +
+ ' Where (Data >=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data1.DateTime)) + ') ' +
+ ' and (Data <=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data2.DateTime)) + ') ' +
+ ' and nivel >=' + IntToStr(ComboNivel.ItemIndex);
+
+ if ComboUsuario.ItemIndex > 0 then
+ Temp := Temp + ' and ' + FTabLog + '.idUser = ' + ListIdUser[ComboUsuario.ItemIndex];
+
+ try
+ FUsercontrol.DataConnector.UCExecSQL(Temp);
+ AplicaFiltro;
+ DBGrid1.Repaint;
+ except
+ end;
+
+ try
+ FUsercontrol.Log(Format(FUsercontrol.UserSettings.Log.DeletePerformed, [comboUsuario.Text, DateTimeToStr(Data1.datetime), DateTimeToStr(Data2.datetime), ComboNivel.Text]), 2);
+ except;
+ end;
+
+end;
+
+procedure TUCFrame_Log.Data1Change(Sender: TObject);
+begin
+ btFiltro.Enabled := True;
+end;
+
+procedure TUCFrame_Log.btfiltroClick(Sender: TObject);
+begin
+ AplicaFiltro;
+end;
+
+procedure TUCFrame_Log.AplicaFiltro;
+var
+ FTabUser, FTabLog: String;
+ Temp: String;
+begin
+ btFiltro.Enabled := False;
+ DSLog.Close;
+ FTabLog := FUsercontrol.LogControl.TableLog;
+ FTabUser := FUsercontrol.TableUsers.TableName;
+
+ Temp := Format('Select TabUser.' + FUsercontrol.TableUsers.FieldUserName + ' as nome, ' + FTabLog + '.* ' +
+ 'from ' + FTabLog +
+ ' Left outer join %s TabUser on ' + FTabLog + '.idUser = TabUser.%s ' +
+ 'Where (data >= ' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data1.DateTime)) + ') ' +
+ 'and (Data <= ' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data2.DateTime)) + ') ' +
+ 'and nivel >= ' + IntToStr(ComboNivel.ItemIndex),
+ [FUsercontrol.TableUsers.TableName, FUsercontrol.TableUsers.FieldUserID]);
+
+ if ComboUsuario.ItemIndex > 0 then
+ Temp := Temp + ' and ' + FTabLog + '.idUser = ' + ListIdUser[ComboUsuario.ItemIndex];
+
+ Temp := Temp + ' order by data desc';
+
+ FreeAndNil(DSLog);
+ DataSource1.DataSet := nil;
+ DSLog := FUsercontrol.DataConnector.UCGetSQLDataset(Temp);
+ DataSource1.DataSet := DSLog;
+ btexclui.Enabled := not DsLog.IsEmpty;
+end;
+
+procedure TUCFrame_Log.SetWindow;
+var
+ TabelaLog: String;
+ SQLStmt: String;
+begin
+ ComboNivel.Items.Clear;
+ ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelLow); //BGM
+ ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelNormal); //BGM
+ ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelHigh); //BGM
+ ComboNivel.Items.Append(FUsercontrol.UserSettings.Log.OptionLevelCritic); //BGM
+ ComboNivel.ItemIndex := 0;
+ ComboUsuario.Items.Clear;
+ data1.Date := EncodeDate(StrToInt(FormatDateTime('yyyy', Date)), 1, 1);
+ data2.DateTime := Now;
+
+ if Assigned( ListIdUser ) = False then
+ ListIdUser := TStringList.Create
+ else ListIdUser.Clear;
+
+
+ with FUsercontrol do
+ if ((FUsercontrol.CurrentUser.Privileged = True) or
+ (FUsercontrol.CurrentUser.UserLogin = FUsercontrol.Login.InitialLogin.User)) then
+ begin
+ DSCmd := DataConnector.UCGetSQLDataset(
+ Format('SELECT %s AS IDUSER, %s AS NOME , %s AS LOGIN FROM %s WHERE %s = %s ORDER BY %s',
+ [TableUsers.FieldUserID,
+ TableUsers.FieldUserName,
+ TableUsers.FieldLogin,
+ TableUsers.TableName,
+ TableUsers.FieldTypeRec,
+ QuotedStr('U'),
+ TableUsers.FieldUserName]));
+ ComboUsuario.Items.Append(FUsercontrol.UserSettings.Log.OptionUserAll);
+ ListIdUser.Append('0');
+ end
+ else
+ DSCmd := DataConnector.UCGetSQLDataset(
+ Format('SELECT %s AS IDUSER, %s AS NOME , %s AS LOGIN FROM %s WHERE %s = %s and %s = %s ORDER BY %s',
+ [TableUsers.FieldUserID,
+ TableUsers.FieldUserName,
+ TableUsers.FieldLogin,
+ TableUsers.TableName,
+ TableUsers.FieldTypeRec,
+ QuotedStr('U'),
+ TableUsers.FieldLogin,
+ QuotedStr(FUsercontrol.CurrentUser.UserLogin),
+ TableUsers.FieldUserName]));
+
+ while not DSCmd.EOF do
+ begin
+ ComboUsuario.Items.Append(DSCmd.FieldByName('Nome').AsString);
+ ListIdUser.Append(DSCmd.FieldByName('idUser').AsString);
+ DSCmd.Next;
+ end;
+
+
+ DSCmd.Close;
+ FreeAndNil(DSCmd);
+
+ ComboUsuario.ItemIndex := 0;
+
+
+ TabelaLog := FUsercontrol.LogControl.TableLog;
+ with FUsercontrol do
+ begin
+ SQLStmt := 'SELECT ' + TableUsers.TableName + '.' + TableUsers.FieldUserName + ' AS NOME, ' + TabelaLog + '.* from ' + TabelaLog +
+ ' LEFT OUTER JOIN ' + TableUsers.TableName + ' on ' + TabelaLog + '.idUser = ' + TableUsers.TableName + '.' + TableUsers.FieldUserID +
+ ' WHERE (DATA >=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data1.DateTime)) + ') AND (DATA<=' + QuotedStr(FormatDateTime('yyyyMMddhhmmss', data2.DateTime)) + ') ORDER BY DATA DESC';
+ DSLog := DataConnector.UCGetSQLDataset(SQLStmt);
+ end;
+ DataSource1.Dataset := DSLog;
+ btexclui.Enabled := not DsLog.IsEmpty;
+
+
+ with FUsercontrol.UserSettings.Log, DBGrid1 do
+ begin
+ lbUsuario.Caption := LabelUser;
+ lbData.Caption := LabelDate;
+ lbNivel.Caption := LabelLevel;
+ BtFiltro.Caption := BtFilter;
+ BtExclui.Caption := BtDelete;
+ BtFecha.Caption := BtClose;
+
+ Columns[0].Title.Caption := ColAppID;
+ Columns[0].FieldName := 'APPLICATIONID';
+ Columns[0].Width := 60;
+ Columns[1].Title.Caption := ColLevel;
+ Columns[1].FieldName := 'NIVEL';
+ Columns[1].Width := 32;
+ Columns[2].Title.Caption := ColMessage;
+ Columns[2].FieldName := 'MSG';
+ Columns[2].Width := 260;
+ Columns[3].Title.Caption := ColUser;
+ Columns[3].FieldName := 'NOME';
+ Columns[3].Width := 120;
+ Columns[4].Title.Caption := ColDate;
+ Columns[4].FieldName := 'DATA';
+ Columns[4].Width := 111;
+ end;
+
+ Bevel3.Width := Panel1.Width - 32;
+ Bevel3.Left := 16;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/pUCFrame_Profile.dfm b/official/2.31RC1/Source/pUCFrame_Profile.dfm
new file mode 100644
index 0000000..6570503
--- /dev/null
+++ b/official/2.31RC1/Source/pUCFrame_Profile.dfm
@@ -0,0 +1,360 @@
+object Frame_Profile: TFrame_Profile
+ Left = 0
+ Top = 0
+ Width = 585
+ Height = 246
+ AutoSize = True
+ TabOrder = 0
+ TabStop = True
+ object DbGridPerf: TDBGrid
+ Left = 0
+ Top = 0
+ Width = 585
+ Height = 201
+ Align = alClient
+ Ctl3D = True
+ DataSource = DataPerfil
+ Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
+ ParentCtl3D = False
+ ReadOnly = True
+ TabOrder = 0
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'Tahoma'
+ TitleFont.Style = []
+ OnDblClick = BtnAcePerClick
+ Columns = <
+ item
+ Expanded = False
+ FieldName = 'Nome'
+ Title.Alignment = taCenter
+ Title.Caption = 'Perfil'
+ Width = 573
+ Visible = True
+ end>
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 201
+ Width = 585
+ Height = 45
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 1
+ object BtnAddPer: TBitBtn
+ Left = 78
+ Top = 11
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Adicionar'
+ TabOrder = 0
+ OnClick = BtnAddPerClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0060000060
+ 00006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FF777777787878777777FF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600033CB
+ 51006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FF777777C8C8C8777777FF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600000600000600040D8
+ 65006000006000006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FF787878777777777777D1D1D1787878777777777777D1BBAD694731
+ 69473169473169473169473169473169473169473100600060F8985AF28F4DE5
+ 7A40D8653AD25C006000CCCCCC6C6C6C6B6B6B6B6B6B6C6C6C6C6C6C6B6B6B6C
+ 6C6C6B6B6B777777EAEAEAE5E5E5DBDBDBD2D2D2CDCDCD787878D1BBADFFFFFF
+ FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060000060005AF2
+ 8F006000006000006000CCCCCCFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE3
+ E3E3DFDFDF777777777777777777E6E6E6777777777777787878D1BBADFFFFFF
+ CF875FCF875FF7F3F1CF875FCF875FEBE1DBCF875FCF875FDCCBC100600060F8
+ 98006000FF00FFFF00FFCCCCCCFFFFFFA4A4A4A4A4A4F7F7F7A5A5A5A4A4A4EA
+ EAEAA5A5A5A4A4A4D9D9D9777777EAEAEA777777FF00FFFF00FFD1BBADFFFFFF
+ FFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060
+ 00006000FF00FFFF00FFCCCCCCFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F3F3F3EE
+ EEEEE9E9E9E4E4E4DFDFDF777777777777777777FF00FFFF00FFD1BBADD1BBAD
+ D1BBADD1BBADE070406947316947316947316947316947316947316947316947
+ 31694731694731694731CDCDCDCCCCCCCCCCCCCCCCCC9494946C6C6C6C6C6C6B
+ 6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2
+ CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7
+ F7F7F2F2F2EEEEEEEAEAEAE3E3E3DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFCF875FCF875FF7F3F1CF875FCF875FEBE1DBCF87
+ 5FCF875FDCCBC1694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFA5A5A5A4
+ A4A4F7F7F7A5A5A5A4A4A4EAEAEAA5A5A5A4A4A4DADADA6B6B6BFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1
+ DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFFFFFFFFF
+ FFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE4E4E4DFDFDF6C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959594
+ 9494949494949494959595959595949494959595959595959595FF00FFFF00FF
+ FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF949494D2D2D2D2D2D2D0
+ D0D0C4C4C4BABABAAFAFAFA1A1A1949494959595959595959595FF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495
+ 9595959595959595949494959595949494949494959595959595FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtnAltPer: TBitBtn
+ Left = 165
+ Top = 11
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Alterar'
+ TabOrder = 1
+ OnClick = BtnAltPerClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFD1BBAD694731
+ 694731694731694731694731694731694731694731694731694731694731FF00
+ FFFF00FFFF00FFFF00FFCCCCCC6C6C6C6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C6C
+ 6C6C6B6B6B6C6C6C6C6C6C6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF
+ FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CADCCBC1DBC9BF694731FF00
+ FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEE9E9E9E3
+ E3E3DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF
+ CF875FCF875FF7F3F1CF875FCF875F1C1C1C1C1C1C1C1C1CDCCBC1694731FF00
+ FFFF00FFFF00FFFF00FFCDCDCDFFFFFFA4A4A4A4A4A4F7F7F7A4A4A4A4A4A440
+ 4040404040414141DADADA6C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF
+ FFFFFFFFFFFFFBF9F8F7F3F11C1C1C0098C8FCFAF8A39D98E1D2CA694731FF00
+ FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7414141B9
+ B9B9FCFCFCB7B7B7DFDFDF6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADD1BBAD
+ D1BBADD1BBADE070401C1C1C0098C84ABEDF0098C8A39D986947316947316947
+ 31694731694731694731CCCCCCCDCDCDCDCDCDCDCDCD959595404040B9B9B9D3
+ D3D3B9B9B9B7B7B76C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6CFF00FFFF00FF
+ FF00FFFF00FF1C1C1C0098C84ABEDF94E4F60098C8EFE7E3EBE1DBE6D9D2E1D2
+ CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF414141B9B9B9D3D3D3ED
+ EDEDB9B9B9EEEEEEEAEAEAE4E4E4DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF
+ FF00FF1C1C1C0098C84ABEDF94E4F60098C8F7F3F1CF875FCF875FEBE1DBCF87
+ 5FCF875FDCCBC1694731FF00FFFF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9
+ B9B9F7F7F7A4A4A4A4A4A4EAEAEAA4A4A4A4A4A4D9D9D96C6C6CFF00FFFF00FF
+ 1C1C1C0098C84ABEDF94E4F60098C8FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1
+ DBE6D9D2E1D2CA694731FF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9B9B9FF
+ FFFFFBFBFBF7F7F7F3F3F3EEEEEEE9E9E9E3E3E3DFDFDF6C6C6CFF00FF00009A
+ 8080804ABEDF94E4F60098C8E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FF7272729F9F9FD3D3D3EDEDEDB9B9B994949495
+ 959595959595959594949495959594949495959595959594949400009A00009A
+ 778C98D2BAAC0098C8FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070
+ 40E07040E07040E07040727272727272AAAAAACCCCCCB9B9B9D2D2D2D2D2D2D0
+ D0D0C4C4C4B9B9B9AFAFAFA2A2A29494949595959595959595954A23C70030F8
+ 6D8AFD0030F8E07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040A85FA8A2A2A2C2C2C2A2A2A295959595959595959594
+ 9494959595959595959595949494959595959595959595959595FF00FF8817DA
+ 0030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFC63EC6A2A2A2FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtnExcPer: TBitBtn
+ Left = 252
+ Top = 11
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Excluir'
+ TabOrder = 2
+ OnClick = BtnExcPerClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00FFFF00
+ FFFF00FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA3
+ A3A3707070FF00FFFF00FFFF00FFFF00FFFF00FF707070A2A2A2FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00
+ FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFA2A2A2707070FF00FFFF00FFFF00FF707070A3A3A3FF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FF0000
+ 980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFA2A2A2707070FF00FF727272A3A3A3FF00FFFF00FFD1BBAD694731
+ 6947316947316947316947316947316947316947316947310030F8002AD0002A
+ D0FF00FFFF00FFFF00FFCCCCCC6C6C6C6C6C6C6C6C6C6B6B6B6C6C6C6B6B6B6B
+ 6B6B6C6C6C6C6C6CA3A3A3919191919191FF00FFFF00FFFF00FFD1BBADE8DCD4
+ E6D9D1E4D7CEE2D4CAE1D1C7DFCFC4DDCBC0DBC8BDD8C5B90030F8002AD00000
+ 98FF00FFFF00FFFF00FFCDCDCDE6E6E6E3E3E3E2E2E2E0E0E0DDDDDDDCDCDCD9
+ D9D9D7D7D7D5D5D5A2A2A2919191707070FF00FFFF00FFFF00FFD1BBADE8DCD4
+ 694731694731E4D7CE694731694731DFCFC46947310030F80000986947310030
+ F8000098FF00FFFF00FFCDCDCDE6E6E66C6C6C6C6C6CE2E2E26C6C6C6C6C6CDC
+ DCDC6C6C6CA2A2A27070706C6C6CA3A3A3707070FF00FFFF00FFD1BBADE8DCD4
+ E8DCD4E8DCD4E6D9D1E4D7CEE2D4CAE1D1C70030F8000098DBC8BD694731FF00
+ FF0030F8000098FF00FFCDCDCDE6E6E6E6E6E6E6E6E6E3E3E3E2E2E2DFDFDFDD
+ DDDDA3A3A3707070D7D7D76C6C6CFF00FFA3A3A3727272FF00FFD1BBADD1BBAD
+ D1BBADD1BBADE070406947316947316947310000986947316947316947316947
+ 316947310030F8694731CCCCCCCCCCCCCDCDCDCDCDCD9595956B6B6B6C6C6C6C
+ 6C6C7070706C6C6C6C6C6C6C6C6C6C6C6C6C6C6CA2A2A26C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2
+ CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7
+ F7F7F2F2F2EEEEEEE9E9E9E4E4E4DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFF694731694731F7F3F1694731694731EBE1DB6947
+ 31694731DCCBC1694731FF00FFFF00FFFF00FFFF00FF959595FFFFFF6C6C6C6B
+ 6B6BF7F7F76C6C6C6C6C6CEAEAEA6B6B6B6C6C6CD9D9D96C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1
+ DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFFFFFFFF
+ FFFFFBFBFBF7F7F7F3F3F3EEEEEEEAEAEAE3E3E3DFDFDF6C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959595
+ 9595949494959595959595959595959595959595959595949494FF00FFFF00FF
+ FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF959595D2D2D2D2D2D2D0
+ D0D0C4C4C4B9B9B9AFAFAFA2A2A2959595949494959595959595FF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495
+ 9595959595959595959595959595949494959595959595959595FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtnClose: TBitBtn
+ Left = 426
+ Top = 11
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Fechar'
+ TabOrder = 3
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ object BtnAcePer: TBitBtn
+ Left = 339
+ Top = 11
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Acessos'
+ TabOrder = 4
+ OnClick = BtnAcePerClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFC2652BA53C00A53C00A53C00A53C00A53C00A53C
+ 00A53C00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF89898969
+ 69696969696969696969696969696A6A6A696969FF00FFFF00FFFF00FFFF00FF
+ A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A5FFD4A5FFCD97FFC07DFFAD
+ 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC
+ DCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE6A6A6AFF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652BC2652BC2652BC265
+ 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989
+ 8989898989898989898989898989898989898989FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FF1C1C1C986060986060A53C00A53C00A53C00A53C
+ 00A53C00FF00FFFF00FFFF00FFFF00FF616161FF00FFFF00FFFF00FF41414188
+ 8888888888696969696969696969696969696969FF00FFFF00FFFF00FFFF00FF
+ A22E08A22E08A22E08A22E08C89898FCFAF80098C81C1C1CFFCD97FFC07DFFAD
+ 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060B5B5B5FC
+ FCFCB9B9B9414141D7D7D7CCCCCCBEBEBE696969FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC898980098C84ABEDF0098C81C1C1CC2652BC265
+ 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFB5B5B5B9
+ B9B9D3D3D3B9B9B9414141898989898989898989FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFFF00FF0098C894E4F64ABEDF0098C81C1C1CFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFB9
+ B9B9EDEDEDD3D3D3B9B9B9414141FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC2652BA53C000098C894E4F64ABEDF0098C81C1C
+ 1CA53C00FF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898969
+ 6969B9B9B9EDEDEDD3D3D3B9B9B94040406A6A6AFF00FFFF00FFFF00FFFF00FF
+ A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A50098C894E4F64ABEDF0098
+ C81C1C1CFF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC
+ DCDCDCDCDCB9B9B9EDEDEDD3D3D3BABABA414141FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652B0098C894E4F64ABE
+ DF80808000009AFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989
+ 8989898989898989BABABAEDEDEDD3D3D3A0A0A0727272FF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0098C8D2BA
+ AC778C9800009A00009AFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFB9B9B9CCCCCCABABAB727272727272C2652BA22E08
+ A22E08A22E08A22E08A22E08A22E08A22E16FF00FFFF00FFFF00FFFF00FF0030
+ F86D8AFD0030F800009A89898960606060606060606060606060606060606061
+ 6161FF00FFFF00FFFF00FFFF00FFA2A2A2C2C2C2A3A3A3727272C2652BFFD4A5
+ FFD4A5FFD4A5FFCD97FFC07DFFAD55A22E08FF00FFFF00FFFF00FFFF00FFFF00
+ FF0030F80030F8FF00FF898989DCDCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE60
+ 6060FF00FFFF00FFFF00FFFF00FFFF00FFA2A2A2A3A3A3FF00FFC2652BC2652B
+ C2652BC2652BC2652BC2652BC2652BC2652BFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FF89898989898989898989898989898989898989898989
+ 8989FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ end
+ object DataPerfil: TDataSource
+ AutoEdit = False
+ Left = 328
+ Top = 152
+ end
+end
diff --git a/official/2.31RC1/Source/pUCFrame_Profile.pas b/official/2.31RC1/Source/pUCFrame_Profile.pas
new file mode 100644
index 0000000..3e662a0
--- /dev/null
+++ b/official/2.31RC1/Source/pUCFrame_Profile.pas
@@ -0,0 +1,246 @@
+unit pUCFrame_Profile;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ {$IFDEF DELPHI5_UP}
+ {$ELSE}
+ Variants,
+ {$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ Db,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ IncPerfil_U,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UcBase,
+ UserPermis_U,
+ Windows;
+
+type
+ TFrame_Profile = class(TFrame)
+ DbGridPerf: TDBGrid;
+ Panel2: TPanel;
+ BtnAddPer: TBitBtn;
+ BtnAltPer: TBitBtn;
+ BtnExcPer: TBitBtn;
+ BtnClose: TBitBtn;
+ BtnAcePer: TBitBtn;
+ DataPerfil: TDataSource;
+ procedure BtnAddPerClick(Sender: TObject);
+ procedure BtnAltPerClick(Sender: TObject);
+ procedure BtnExcPerClick(Sender: TObject);
+ procedure BtnAcePerClick(Sender: TObject);
+ protected
+ FIncluirPerfil: TfrmIncluirPerfil;
+ procedure ActionBtPermissProfileDefault;
+ procedure SetWindowPerfil(Adicionar: Boolean);
+ procedure SetWindowProfile;
+ private
+ { Private declarations }
+ public
+ fUserControl: TUserControl;
+ FDataSetPerfilUsuario: TDataset;
+ destructor Destroy; override;
+ { Public declarations }
+ end;
+
+
+implementation
+
+{$R *.dfm}
+
+procedure TFrame_Profile.SetWindowPerfil(Adicionar: Boolean);
+begin
+ with fUserControl.UserSettings.AddChangeProfile do
+ begin
+ FIncluirPerfil.Caption := WindowCaption;
+ if Adicionar then
+ FIncluirPerfil.LbDescricao.Caption := LabelAdd
+ else
+ FIncluirPerfil.LbDescricao.Caption := LabelChange;
+
+ FIncluirPerfil.lbNome.Caption := LabelName;
+ FIncluirPerfil.btGravar.Caption := BtSave;
+ FIncluirPerfil.btCancela.Caption := BtCancel;
+ FIncluirPerfil.Position := FUserControl.UserSettings.WindowsPosition;
+ FIncluirPerfil.FDataSetPerfilUsuario := FDataSetPerfilUsuario;
+ end;
+end;
+
+procedure TFrame_Profile.ActionBtPermissProfileDefault;
+var
+ TempCampos, TempCamposEX: String;
+begin
+ UserPermis.FTempIdUser := FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger;
+ with fUserControl do
+ begin
+ TempCampos := Format(' %s as IdUser, %s as Modulo, %s as ObjName, %s as UCKey ',
+ [TableRights.FieldUserID,
+ TableRights.FieldModule,
+ TableRights.FieldComponentName,
+ TableRights.FieldKey]);
+ TempCamposEX := Format('%s, %s as FormName ', [TempCampos, TableRights.FieldFormName]);
+
+ UserPermis.DSPermiss := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab Where tab.%s = %s and tab.%s = %s',
+ [TempCampos,
+ TableRights.TableName,
+ TableRights.FieldUserID,
+ FDataSetPerfilUsuario.FieldByName('IdUser').AsString,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]));
+
+ UserPermis.DSPermiss.Open;
+
+ UserPermis.DSPermissEX := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab1 Where tab1.%s = %s and tab1.%s = %s',
+ [TempCamposEX,
+ TableRights.TableName + 'EX',
+ TableRights.FieldUserID,
+ FDataSetPerfilUsuario.FieldByName('IdUser').AsString,
+ TableRights.FieldModule,
+ QuotedStr(ApplicationID)]));
+
+ UserPermis.DSPermissEX.Open;
+
+ UserPermis.DSPerfil := TDataset.Create(UserPermis);
+
+ UserPermis.ShowModal;
+
+ FDataSetPerfilUsuario.Close;
+ FDataSetPerfilUsuario.Open;
+ FDataSetPerfilUsuario.Locate('idUser', UserPermis.FTempIdUser, []);
+
+ FreeAndNil(UserPermis);
+ end;
+end;
+
+procedure TFrame_Profile.SetWindowProfile;
+begin
+ with fUserControl.UserSettings.Rights do
+ begin
+ UserPermis.Caption := WindowCaption;
+ UserPermis.LbDescricao.Caption := LabelProfile;
+ UserPermis.lbUser.Left := UserPermis.LbDescricao.Left + UserPermis.LbDescricao.Width + 5;
+ UserPermis.PageMenu.Caption := PageMenu;
+ UserPermis.PageAction.Caption := PageActions;
+ UserPermis.PageControls.Caption := PageControls; // By Vicente Barros Leonel
+ UserPermis.BtLibera.Caption := BtUnlock;
+ UserPermis.BtBloqueia.Caption := BtLock;
+ UserPermis.BtGrava.Caption := BtSave;
+ UserPermis.BtCancel.Caption := BtCancel;
+ UserPermis.Position := fUsercontrol.UserSettings.WindowsPosition;
+ end;
+end;
+
+procedure TFrame_Profile.BtnAcePerClick(Sender: TObject);
+begin
+ if FDataSetPerfilUsuario.IsEmpty then
+ Exit;
+ UserPermis := TUserPermis.Create(self);
+ UserPermis.FUserControl := fUsercontrol;
+ SetWindowProfile;
+ UserPermis.lbUser.Caption := FDataSetPerfilUsuario.FieldByName('Nome').AsString;
+ ActionBtPermissProfileDefault;
+end;
+
+procedure TFrame_Profile.BtnAddPerClick(Sender: TObject);
+begin
+ try
+ FIncluirPerfil := TfrmIncluirPerfil.Create(Self);
+ FIncluirPerfil.FUserControl := Self.FUserControl;
+ SetWindowPerfil(True);
+ FIncluirPerfil.ShowModal;
+ finally
+ FreeAndNil(FIncluirPerfil);
+ end;
+end;
+
+procedure TFrame_Profile.BtnAltPerClick(Sender: TObject);
+begin
+ if FDataSetPerfilUsuario.IsEmpty then
+ Exit;
+ try
+ FIncluirPerfil := TfrmIncluirPerfil.Create(self);
+ FIncluirPerfil.FUserControl := Self.FUserControl;
+ FIncluirPerfil.FNewIdUser := FDataSetPerfilUsuario.FieldByName('IdUser').AsInteger;
+ SetWindowPerfil(False);
+ with FIncluirPerfil do
+ begin
+ EditDescricao.Text := FDataSetPerfilUsuario.FieldByName('Nome').AsString;
+ FAltera := True;
+ ShowModal;
+ end;
+ finally
+ FreeAndNil(FIncluirPerfil);
+ end;
+end;
+
+procedure TFrame_Profile.BtnExcPerClick(Sender: TObject);
+var
+ TempID: Integer;
+ CanDelete: Boolean;
+ ErrorMsg: String;
+ TempDS: TDataset;
+begin
+ if FDataSetPerfilUsuario.IsEmpty then
+ Exit;
+ TempID := FDataSetPerfilUsuario.FieldByName('IDUser').AsInteger;
+ TempDS := FUserControl.DataConnector.UCGetSQLDataset('Select ' + FUserControl.TableUsers.FieldUserID + ' as IdUser from ' +
+ FUserControl.TableUsers.TableName +
+ ' Where ' + FUserControl.TableUsers.FieldTypeRec + ' = ' + QuotedStr('U') +
+ ' AND ' + FUserControl.TableUsers.FieldProfile + ' = ' + IntToStr(TempID));
+
+ if TempDS.FieldByName('IdUser').AsInteger > 0 then
+ begin
+ TempDS.Close;
+ FreeAndNil(TempDS);
+ //changed by fduenas: PromptDelete_WindowCaption
+ if MessageBox(handle, PChar(Format(FUserControl.UserSettings.UsersProfile.PromptDelete, [FDataSetPerfilUsuario.FieldByName('Nome').AsString])),
+ PChar(FUserControl.UserSettings.UsersProfile.PromptDelete_WindowCaption), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> idYes then
+ Exit;
+ end
+ else
+ begin
+ TempDS.Close;
+ FreeAndNil(TempDS);
+ end;
+
+ CanDelete := True;
+ if Assigned(FUserControl.onDeleteProfile) then
+ FUserControl.onDeleteProfile(TObject(Owner), TempID, CanDelete, ErrorMsg);
+ if not CanDelete then
+ begin
+ MessageDlg(ErrorMSG, mtWarning, [mbOK], 0);
+ Exit;
+ end;
+
+ with FUserControl do
+ begin
+ DataConnector.UCExecSQL('Delete from ' + TableUsers.TableName + ' where ' + TableUsers.FieldUserID + ' = ' + IntToStr(TempID));
+ DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + ' where ' + TableRights.FieldUserID + ' = ' + IntToStr(TempID));
+ DataConnector.UCExecSQL('Delete from ' + TableRights.TableName + 'EX where ' + TableRights.FieldUserID + ' = ' + IntToStr(TempID));
+ DataConnector.UCExecSQL('Update ' + TableUsers.TableName +
+ ' Set ' + TableUsers.FieldProfile + ' = null where ' + TableUsers.FieldUserID + ' = ' + IntToStr(TempID));
+ end;
+ FDataSetPerfilUsuario.Close;
+ FDataSetPerfilUsuario.Open;
+end;
+
+destructor TFrame_Profile.Destroy;
+begin
+ //nada a destruir
+ //não destruir o FDataSetPerfilUsuario o USERCONTROL toma conta dele
+ inherited;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/pUCFrame_User.dfm b/official/2.31RC1/Source/pUCFrame_User.dfm
new file mode 100644
index 0000000..6784e27
--- /dev/null
+++ b/official/2.31RC1/Source/pUCFrame_User.dfm
@@ -0,0 +1,440 @@
+object UCFrame_User: TUCFrame_User
+ Left = 0
+ Top = 0
+ Width = 594
+ Height = 311
+ AutoSize = True
+ TabOrder = 0
+ TabStop = True
+ object Panel3: TPanel
+ Left = 0
+ Top = 266
+ Width = 594
+ Height = 45
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 0
+ object btAdic: TBitBtn
+ Left = 39
+ Top = 10
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Adicionar'
+ TabOrder = 0
+ OnClick = btAdicClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0060000060
+ 00006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FF777777787878777777FF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600033CB
+ 51006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FF777777C8C8C8777777FF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00600000600000600040D8
+ 65006000006000006000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FF787878777777777777D1D1D1787878777777777777D1BBAD694731
+ 69473169473169473169473169473169473169473100600060F8985AF28F4DE5
+ 7A40D8653AD25C006000CCCCCC6C6C6C6B6B6B6B6B6B6C6C6C6C6C6C6B6B6B6C
+ 6C6C6B6B6B777777EAEAEAE5E5E5DBDBDBD2D2D2CDCDCD787878D1BBADFFFFFF
+ FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060000060005AF2
+ 8F006000006000006000CCCCCCFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE3
+ E3E3DFDFDF777777777777777777E6E6E6777777777777787878D1BBADFFFFFF
+ CF875FCF875FF7F3F1CF875FCF875FEBE1DBCF875FCF875FDCCBC100600060F8
+ 98006000FF00FFFF00FFCCCCCCFFFFFFA4A4A4A4A4A4F7F7F7A5A5A5A4A4A4EA
+ EAEAA5A5A5A4A4A4D9D9D9777777EAEAEA777777FF00FFFF00FFD1BBADFFFFFF
+ FFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CA0060000060
+ 00006000FF00FFFF00FFCCCCCCFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F3F3F3EE
+ EEEEE9E9E9E4E4E4DFDFDF777777777777777777FF00FFFF00FFD1BBADD1BBAD
+ D1BBADD1BBADE070406947316947316947316947316947316947316947316947
+ 31694731694731694731CDCDCDCCCCCCCCCCCCCCCCCC9494946C6C6C6C6C6C6B
+ 6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6B6B6B6C6C6C6C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2
+ CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7
+ F7F7F2F2F2EEEEEEEAEAEAE3E3E3DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFCF875FCF875FF7F3F1CF875FCF875FEBE1DBCF87
+ 5FCF875FDCCBC1694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFA5A5A5A4
+ A4A4F7F7F7A5A5A5A4A4A4EAEAEAA5A5A5A4A4A4DADADA6B6B6BFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1
+ DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF949494FFFFFFFFFFFFFF
+ FFFFFBFBFBF7F7F7F2F2F2EEEEEEEAEAEAE4E4E4DFDFDF6C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959594
+ 9494949494949494959595959595949494959595959595959595FF00FFFF00FF
+ FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF949494D2D2D2D2D2D2D0
+ D0D0C4C4C4BABABAAFAFAFA1A1A1949494959595959595959595FF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495
+ 9595959595959595949494959595949494949494959595959595FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtAlt: TBitBtn
+ Left = 126
+ Top = 10
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Alterar'
+ TabOrder = 1
+ OnClick = BtAltClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFD1BBAD694731
+ 694731694731694731694731694731694731694731694731694731694731FF00
+ FFFF00FFFF00FFFF00FFCCCCCC6C6C6C6B6B6B6C6C6C6C6C6C6C6C6C6C6C6C6C
+ 6C6C6B6B6B6C6C6C6C6C6C6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF
+ FBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2CADCCBC1DBC9BF694731FF00
+ FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFBFBFBF7F7F7F2F2F2EEEEEEE9E9E9E3
+ E3E3DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF
+ CF875FCF875FF7F3F1CF875FCF875F1C1C1C1C1C1C1C1C1CDCCBC1694731FF00
+ FFFF00FFFF00FFFF00FFCDCDCDFFFFFFA4A4A4A4A4A4F7F7F7A4A4A4A4A4A440
+ 4040404040414141DADADA6C6C6CFF00FFFF00FFFF00FFFF00FFD1BBADFFFFFF
+ FFFFFFFFFFFFFBF9F8F7F3F11C1C1C0098C8FCFAF8A39D98E1D2CA694731FF00
+ FFFF00FFFF00FFFF00FFCDCDCDFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7414141B9
+ B9B9FCFCFCB7B7B7DFDFDF6B6B6BFF00FFFF00FFFF00FFFF00FFD1BBADD1BBAD
+ D1BBADD1BBADE070401C1C1C0098C84ABEDF0098C8A39D986947316947316947
+ 31694731694731694731CCCCCCCDCDCDCDCDCDCDCDCD959595404040B9B9B9D3
+ D3D3B9B9B9B7B7B76C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6CFF00FFFF00FF
+ FF00FFFF00FF1C1C1C0098C84ABEDF94E4F60098C8EFE7E3EBE1DBE6D9D2E1D2
+ CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF414141B9B9B9D3D3D3ED
+ EDEDB9B9B9EEEEEEEAEAEAE4E4E4DFDFDFD9D9D9D8D8D86C6C6CFF00FFFF00FF
+ FF00FF1C1C1C0098C84ABEDF94E4F60098C8F7F3F1CF875FCF875FEBE1DBCF87
+ 5FCF875FDCCBC1694731FF00FFFF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9
+ B9B9F7F7F7A4A4A4A4A4A4EAEAEAA4A4A4A4A4A4D9D9D96C6C6CFF00FFFF00FF
+ 1C1C1C0098C84ABEDF94E4F60098C8FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1
+ DBE6D9D2E1D2CA694731FF00FFFF00FF414141B9B9B9D3D3D3EDEDEDB9B9B9FF
+ FFFFFBFBFBF7F7F7F3F3F3EEEEEEE9E9E9E3E3E3DFDFDF6C6C6CFF00FF00009A
+ 8080804ABEDF94E4F60098C8E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FF7272729F9F9FD3D3D3EDEDEDB9B9B994949495
+ 959595959595959594949495959594949495959595959594949400009A00009A
+ 778C98D2BAAC0098C8FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070
+ 40E07040E07040E07040727272727272AAAAAACCCCCCB9B9B9D2D2D2D2D2D2D0
+ D0D0C4C4C4B9B9B9AFAFAFA2A2A29494949595959595959595954A23C70030F8
+ 6D8AFD0030F8E07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040A85FA8A2A2A2C2C2C2A2A2A295959595959595959594
+ 9494959595959595959595949494959595959595959595959595FF00FF8817DA
+ 0030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFC63EC6A2A2A2FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtExclui: TBitBtn
+ Left = 213
+ Top = 10
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Excluir'
+ TabOrder = 2
+ OnClick = BtExcluiClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00FFFF00
+ FFFF00FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFA3
+ A3A3707070FF00FFFF00FFFF00FFFF00FFFF00FF707070A2A2A2FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FFFF00FFFF00
+ FF0000980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFA2A2A2707070FF00FFFF00FFFF00FF707070A3A3A3FF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0030F8000098FF00FF0000
+ 980030F8FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFA2A2A2707070FF00FF727272A3A3A3FF00FFFF00FFD1BBAD694731
+ 6947316947316947316947316947316947316947316947310030F8002AD0002A
+ D0FF00FFFF00FFFF00FFCCCCCC6C6C6C6C6C6C6C6C6C6B6B6B6C6C6C6B6B6B6B
+ 6B6B6C6C6C6C6C6CA3A3A3919191919191FF00FFFF00FFFF00FFD1BBADE8DCD4
+ E6D9D1E4D7CEE2D4CAE1D1C7DFCFC4DDCBC0DBC8BDD8C5B90030F8002AD00000
+ 98FF00FFFF00FFFF00FFCDCDCDE6E6E6E3E3E3E2E2E2E0E0E0DDDDDDDCDCDCD9
+ D9D9D7D7D7D5D5D5A2A2A2919191707070FF00FFFF00FFFF00FFD1BBADE8DCD4
+ 694731694731E4D7CE694731694731DFCFC46947310030F80000986947310030
+ F8000098FF00FFFF00FFCDCDCDE6E6E66C6C6C6C6C6CE2E2E26C6C6C6C6C6CDC
+ DCDC6C6C6CA2A2A27070706C6C6CA3A3A3707070FF00FFFF00FFD1BBADE8DCD4
+ E8DCD4E8DCD4E6D9D1E4D7CEE2D4CAE1D1C70030F8000098DBC8BD694731FF00
+ FF0030F8000098FF00FFCDCDCDE6E6E6E6E6E6E6E6E6E3E3E3E2E2E2DFDFDFDD
+ DDDDA3A3A3707070D7D7D76C6C6CFF00FFA3A3A3727272FF00FFD1BBADD1BBAD
+ D1BBADD1BBADE070406947316947316947310000986947316947316947316947
+ 316947310030F8694731CCCCCCCCCCCCCDCDCDCDCDCD9595956B6B6B6C6C6C6C
+ 6C6C7070706C6C6C6C6C6C6C6C6C6C6C6C6C6C6CA2A2A26C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1DBE6D9D2E1D2
+ CADCCBC1DBC9BF694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFBFBFBF7
+ F7F7F2F2F2EEEEEEE9E9E9E4E4E4DFDFDFDADADAD8D8D86C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFF694731694731F7F3F1694731694731EBE1DB6947
+ 31694731DCCBC1694731FF00FFFF00FFFF00FFFF00FF959595FFFFFF6C6C6C6B
+ 6B6BF7F7F76C6C6C6C6C6CEAEAEA6B6B6B6C6C6CD9D9D96C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040FFFFFFFFFFFFFFFFFFFBF9F8F7F3F1F3EDEAEFE7E3EBE1
+ DBE6D9D2E1D2CA694731FF00FFFF00FFFF00FFFF00FF959595FFFFFFFFFFFFFF
+ FFFFFBFBFBF7F7F7F3F3F3EEEEEEEAEAEAE3E3E3DFDFDF6C6C6CFF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959595959595
+ 9595949494959595959595959595959595959595959595949494FF00FFFF00FF
+ FF00FFFF00FFE07040FBC39FFBC39FFAC19CF5B18BEFA27AEB9369E68254E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF959595D2D2D2D2D2D2D0
+ D0D0C4C4C4B9B9B9AFAFAFA2A2A2959595949494959595959595FF00FFFF00FF
+ FF00FFFF00FFE07040E07040E07040E07040E07040E07040E07040E07040E070
+ 40E07040E07040E07040FF00FFFF00FFFF00FFFF00FF95959595959594949495
+ 9595959595959595959595959595949494959595959595959595FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtAcess: TBitBtn
+ Left = 300
+ Top = 10
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Acessos'
+ TabOrder = 3
+ OnClick = BtAcessClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFC2652BA53C00A53C00A53C00A53C00A53C00A53C
+ 00A53C00FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF89898969
+ 69696969696969696969696969696A6A6A696969FF00FFFF00FFFF00FFFF00FF
+ A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A5FFD4A5FFCD97FFC07DFFAD
+ 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC
+ DCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE6A6A6AFF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652BC2652BC2652BC265
+ 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989
+ 8989898989898989898989898989898989898989FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FF1C1C1C986060986060A53C00A53C00A53C00A53C
+ 00A53C00FF00FFFF00FFFF00FFFF00FF616161FF00FFFF00FFFF00FF41414188
+ 8888888888696969696969696969696969696969FF00FFFF00FFFF00FFFF00FF
+ A22E08A22E08A22E08A22E08C89898FCFAF80098C81C1C1CFFCD97FFC07DFFAD
+ 55A53C00FF00FFFF00FFFF00FFFF00FF606060606060606060606060B5B5B5FC
+ FCFCB9B9B9414141D7D7D7CCCCCCBEBEBE696969FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC898980098C84ABEDF0098C81C1C1CC2652BC265
+ 2BC2652BFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFB5B5B5B9
+ B9B9D3D3D3B9B9B9414141898989898989898989FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFFF00FF0098C894E4F64ABEDF0098C81C1C1CFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFB9
+ B9B9EDEDEDD3D3D3B9B9B9414141FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC2652BA53C000098C894E4F64ABEDF0098C81C1C
+ 1CA53C00FF00FFFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898969
+ 6969B9B9B9EDEDEDD3D3D3B9B9B94040406A6A6AFF00FFFF00FFFF00FFFF00FF
+ A22E08A22E08A22E08A22E08C2652BFFD4A5FFD4A50098C894E4F64ABEDF0098
+ C81C1C1CFF00FFFF00FFFF00FFFF00FF606060606060606060606060898989DC
+ DCDCDCDCDCB9B9B9EDEDEDD3D3D3BABABA414141FF00FFFF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFC2652BC2652BC2652BC2652B0098C894E4F64ABE
+ DF80808000009AFF00FFFF00FFFF00FF606060FF00FFFF00FFFF00FF89898989
+ 8989898989898989BABABAEDEDEDD3D3D3A0A0A0727272FF00FFFF00FFFF00FF
+ A22E08FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0098C8D2BA
+ AC778C9800009A00009AFF00FFFF00FF606060FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFB9B9B9CCCCCCABABAB727272727272C2652BA22E08
+ A22E08A22E08A22E08A22E08A22E08A22E16FF00FFFF00FFFF00FFFF00FF0030
+ F86D8AFD0030F800009A89898960606060606060606060606060606060606061
+ 6161FF00FFFF00FFFF00FFFF00FFA2A2A2C2C2C2A3A3A3727272C2652BFFD4A5
+ FFD4A5FFD4A5FFCD97FFC07DFFAD55A22E08FF00FFFF00FFFF00FFFF00FFFF00
+ FF0030F80030F8FF00FF898989DCDCDCDCDCDCDCDCDCD7D7D7CCCCCCBEBEBE60
+ 6060FF00FFFF00FFFF00FFFF00FFFF00FFA2A2A2A3A3A3FF00FFC2652BC2652B
+ C2652BC2652BC2652BC2652BC2652BC2652BFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FF89898989898989898989898989898989898989898989
+ 8989FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ NumGlyphs = 2
+ end
+ object BtnClose: TBitBtn
+ Left = 474
+ Top = 10
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Fechar'
+ TabOrder = 4
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ object BtPass: TBitBtn
+ Left = 387
+ Top = 10
+ Width = 81
+ Height = 25
+ Cursor = crHandPoint
+ Caption = '&Senha'
+ TabOrder = 5
+ OnClick = BtPassClick
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000C8D0D4C8D0D4
+ B8BFC39BA7A5879A918096888792846947316947318F9B99A1A8ABBBC3C6C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4B8BFC3A8AEB19FA5A79DA2A49FA3A56C
+ 6C6C6C6C6C9FA5A8A1A8ABBBC3C6C8D0D4C8D0D4C8D0D4C8D0D4C8D0D491A795
+ 4E773C4A8334478F3143962F694731FBE3CBF8C8986947314977364F6A48A5AC
+ AEC8D0D4C8D0D4C8D0D4C8D0D4ACB1B38D8D8E9595959D9D9DA2A2A26C6C6CE9
+ E9E9D3D3D36B6B6B8C8D8D808182A9AFB2C8D0D4C8D0D4C8D0D4C8D0D45B8049
+ 4F8135479031409C2E3AA62CA08C7DFDF1E5FBE3CBF8C8986947315675388092
+ 85C8D0D4C8D0D4C8D0D4C8D0D49293939494949E9E9EA6A6A6ADADADA8A8A8F5
+ F5F5E9E9E9D3D3D36C6C6C8C8C8C9A9EA1C8D0D4C8D0D4C8D0D4C8D0D4588347
+ 4B893342992F39A82B32B4282EBB26A08C7DFDF1E5FBE3CBF8C8986947316947
+ 31694731694731BDBEBDC8D0D4959696999999A4A4A4AFAFAFB6B6B6BCBCBCA8
+ A8A8F5F5F5E9E9E9D3D3D36B6B6B6C6C6C6C6C6C6C6C6CBFC5C8C8D0D4799F75
+ 488D323E9E2D35AF2935B6317ACB7B2DBF28A08C7DFDF1E5FBE3CBF8C898F8C8
+ 98F8C898F8C898694731C8D0D4A7AAAC9C9C9CA8A8A8B2B2B2B8B8B8CCCCCCBE
+ BEBEA8A8A8F4F4F4E9E9E9D3D3D3D3D3D3D3D3D3D3D3D36B6B6BC8D0D4BCCAC9
+ 56954A3E9F2D34B02980AC81D2D3D381BB8232B228A08C7DFDF1E5FBE3CBFADB
+ BCF9D7B5F9D7B5694731C8D0D4C4CBCFA1A3A3A8A8A8B4B4B4BBBBBBE0E0E0C4
+ C4C4B4B4B4A8A8A8F4F4F4E9E9E9E3E3E3E0E0E0DFDFDF6C6C6CC8D0D4C8D0D4
+ BBC9C766A76436933E598CAE498CBB4A81A62B703AA08C7DFDF1E5FBE3CBFBE3
+ CB694731F9D7B5694731C8D0D4C8D0D4C3CBCEADAFB1A1A1A1AFAFAFB1B1B1A6
+ A6A6878787A8A8A8F5F5F5E9E9E9E9E9E96C6C6CE0E0E06B6B6BC8D0D4C8D0D4
+ C8D0D4B9C6CE5BA0CC54A2D853A1D64F9DD3468FC1A08C7DFDF1E5FBE3CB6947
+ 31A08C7DFADBBC694731C8D0D4C8D0D4C8D0D4C3CACEBEBFBFC3C3C3C2C2C2C0
+ C0C0B3B3B4A8A8A8F5F5F5E9E9E96C6C6CA8A8A8E3E3E36C6C6CC8D0D4C8D0D4
+ C8D0D47AADD05CA9DD5CA9DD5AA7DC56A4D9519FD48E8A86FDF1E5FDF1E5FDF1
+ E5FDF1E5FDF1E5694731C8D0D4C8D0D4C8D0D4C1C4C5C8C8C8C8C8C8C7C7C7C4
+ C4C4C1C1C1A6A6A7F5F5F5F5F5F5F4F4F4F5F5F5F5F5F56C6C6CC8D0D4C8D0D4
+ BAC8D05FABDD63B0E363B0E361AEE15CA9DD56A4D96394B69E9086A08C7DA08C
+ 7DA08C7DA6978BBDBEBDC8D0D4C8D0D4C5CCCFC9C9C9CDCDCDCDCDCDCCCCCCC8
+ C8C8C4C4C4B4B4B4A7A8A9A8A8A8A8A8A8A8A8A8ADAEAFBFC5C8C8D0D4C8D0D4
+ A0BED066B2E56BB7E96BB7E967B3E661AEE15AA7DC53A0D58798A3C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C4C9CCCECECED2D2D2D2D2D2D0D0D0CC
+ CCCCC6C6C6C2C2C2A3A8AAC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ 99B9CD4989B14A85AC5895BD68B2E364B0E45CA9DE53A0D4889BA8C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C1C6C8ACACACA9A9A9B7B7B7CECECECE
+ CECEC8C8C8C2C2C2A7ACAFC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ A3BAC85098C4539AC74E93BE437DA25190BA5198C63C79A0969FA4C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4BFC5C8B9B9B9BCBCBCB6B6B6A2A2A2B3
+ B3B3B9B9B9A0A0A0A4AAADC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C3CCD264A7D062ACDA5DA6D35299C64284AD3C7FA94B7B9BBEC6CAC8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C6CED2C2C3C3C9C9C9C4C4C4BABABAA9
+ A9A9A5A5A59C9D9EBEC6CAC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D49FBFD371BCE968B2E059A1CF4990BC4180A99CACB6C8D0D4C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C6CBCDD5D5D5CDCDCDC0C0C0B3
+ B3B3A5A6A6B2B8BBC8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4
+ C8D0D4C8D0D4A4C2D576B2D761A0C86C9CBBA6B8C2C8D0D4C8D0D4C8D0D4C8D0
+ D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8CDCFC8C9CABDBEBEB4
+ B6B7BBC1C4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4C8D0D4}
+ NumGlyphs = 2
+ end
+ end
+ object DbGridUser: TDBGrid
+ Left = 0
+ Top = 0
+ Width = 594
+ Height = 266
+ Align = alClient
+ Ctl3D = True
+ DataSource = DataUser
+ Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
+ ParentCtl3D = False
+ ReadOnly = True
+ TabOrder = 1
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'Tahoma'
+ TitleFont.Style = []
+ OnDblClick = BtAltClick
+ Columns = <
+ item
+ Expanded = False
+ FieldName = 'Nome'
+ Title.Alignment = taCenter
+ Width = 239
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'Login'
+ Title.Alignment = taCenter
+ Width = 123
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'Email'
+ Title.Alignment = taCenter
+ Width = 199
+ Visible = True
+ end>
+ end
+ object DataUser: TDataSource
+ AutoEdit = False
+ Left = 296
+ Top = 152
+ end
+ object DataPerfil: TDataSource
+ AutoEdit = False
+ Left = 328
+ Top = 152
+ end
+end
diff --git a/official/2.31RC1/Source/pUCFrame_User.pas b/official/2.31RC1/Source/pUCFrame_User.pas
new file mode 100644
index 0000000..6646e6c
--- /dev/null
+++ b/official/2.31RC1/Source/pUCFrame_User.pas
@@ -0,0 +1,326 @@
+unit pUCFrame_User;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ {$IFDEF DELPHI5_UP}
+ {$ELSE}
+ Variants,
+ {$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ Db,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ IncUser_U,
+ Messages,
+ SenhaForm_U,
+ StdCtrls,
+ SysUtils,
+ UcBase,
+ UserPermis_U,
+ Windows;
+
+type
+ TUCFrame_User = class(TFrame)
+ Panel3: TPanel;
+ btAdic: TBitBtn;
+ BtAlt: TBitBtn;
+ BtExclui: TBitBtn;
+ BtAcess: TBitBtn;
+ BtnClose: TBitBtn;
+ BtPass: TBitBtn;
+ DbGridUser: TDBGrid;
+ DataUser: TDataSource;
+ DataPerfil: TDataSource;
+ procedure btAdicClick(Sender: TObject);
+ procedure BtAltClick(Sender: TObject);
+ procedure BtAcessClick(Sender: TObject);
+ procedure BtPassClick(Sender: TObject);
+ procedure BtExcluiClick(Sender: TObject);
+ protected
+ FormSenha: TCustomForm;
+ FfrmIncluirUsuario: TfrmIncluirUsuario;
+ procedure SetWindowUserProfile;
+ procedure SetWindowUser(Adicionar: Boolean);
+ procedure ActionBtPermissUserDefault;
+ procedure FDataSetCadastroUsuarioAfterScroll(DataSet: TDataSet);
+ private
+ { Private declarations }
+ public
+ FUsercontrol: TUserControl;
+ FDataSetCadastroUsuario: TDataset;
+ procedure SetWindow;
+ destructor Destroy; override;
+ { Public declarations }
+ end;
+
+implementation
+
+uses
+ UCMessages;
+
+{$R *.dfm}
+
+procedure TUCFrame_User.btAdicClick(Sender: TObject);
+begin
+ FfrmIncluirUsuario := TfrmIncluirUsuario.Create(Self);
+ FfrmIncluirUsuario.FUsercontrol := Self.FUsercontrol;
+ SetWindowUser(True);
+ FfrmIncluirUsuario.ShowModal;
+ FreeAndNil(FfrmIncluirUsuario);
+end;
+
+procedure TUCFrame_User.BtAltClick(Sender: TObject);
+begin
+ if FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+ FfrmIncluirUsuario := TfrmIncluirUsuario.Create(Self);
+ FfrmIncluirUsuario.FUsercontrol := Self.FUsercontrol;
+ SetWindowUser(False);
+ with FfrmIncluirUsuario do
+ begin
+ FAltera := True;
+ vNovoIDUsuario := FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger;
+ EditNome.Text := FDataSetCadastroUsuario.FieldByName('Nome').AsString;
+ EditLogin.Text := FDataSetCadastroUsuario.FieldByName('Login').AsString;
+ EditEmail.Text := FDataSetCadastroUsuario.FieldByName('Email').AsString;
+ ComboPerfil.KeyValue := FDataSetCadastroUsuario.FieldByName('Perfil').AsInteger;
+ ckPrivilegiado.Checked := StrToBool(FDataSetCadastroUsuario.FieldByName('Privilegiado').AsString);
+ ckUserExpired.Checked := StrToBool(FDataSetCadastroUsuario.FieldByName('UserNaoExpira').AsString);
+ SpinExpira.Value := FDataSetCadastroUsuario.FieldByName('DaysOfExpire').AsInteger;
+ ComboStatus.ItemIndex := FDataSetCadastroUsuario.FieldByName('UserInative').AsInteger;
+ if FfrmIncluirUsuario.ComboStatus.Enabled then
+ FfrmIncluirUsuario.ComboStatus.Enabled := not ((FUsercontrol.User.ProtectAdministrator) and
+ (FDataSetCadastroUsuario.FieldByName('Login').AsString = FUsercontrol.Login.InitialLogin.User));
+ ShowModal;
+ end;
+ FreeAndNil(FfrmIncluirUsuario);
+end;
+
+procedure TUCFrame_User.BtExcluiClick(Sender: TObject);
+var
+ TempID: Integer;
+ CanDelete: Boolean;
+ ErrorMsg: String;
+begin
+ if FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+ TempID := FDataSetCadastroUsuario.FieldByName('IDUser').AsInteger;
+ if MessageBox(Handle, PChar(Format(FUsercontrol.UserSettings.UsersForm.PromptDelete, [FDataSetCadastroUsuario.FieldByName('Login').AsString])),
+ PChar(FUsercontrol.UserSettings.UsersForm.PromptDelete_WindowCaption), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = idYes then
+ begin
+ CanDelete := True;
+ if Assigned(FUsercontrol.onDeleteUser) then
+ FUsercontrol.onDeleteUser(TObject(Owner), TempID, CanDelete, ErrorMsg);
+ if not CanDelete then
+ begin
+ MessageDlg(ErrorMSG, mtWarning, [mbOK], 0);
+ Exit;
+ end;
+
+ FUsercontrol.DataConnector.UCExecSQL('Delete from ' + FUsercontrol.TableRights.TableName + ' where ' +
+ FUsercontrol.TableRights.FieldUserID + ' = ' + IntToStr(TempID));
+ FUsercontrol.DataConnector.UCExecSQL('Delete from ' + FUsercontrol.TableUsers.TableName + ' where ' +
+ FUsercontrol.TableUsers.FieldUserID + ' = ' + IntToStr(TempID));
+ FDataSetCadastroUsuario.Close;
+ FDataSetCadastroUsuario.Open;
+ end;
+end;
+
+procedure TUCFrame_User.BtPassClick(Sender: TObject);
+begin
+ if FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+
+ FormSenha := TSenhaForm.Create(Self);
+ TSenhaForm(FormSenha).Position := FUsercontrol.UserSettings.WindowsPosition;
+ TSenhaForm(FormSenha).FUsercontrol := FUsercontrol;
+ TSenhaForm(FormSenha).Caption := Format(FUsercontrol.UserSettings.ResetPassword.WindowCaption,
+ [FDataSetCadastroUsuario.FieldByName('Login').AsString]);
+ if TSenhaForm(FormSenha).ShowModal = mrOk then
+ Begin
+
+(*
+ if (Assigned(FUsercontrol.MailUserControl)) and (FUsercontrol.MailUserControl.SenhaForcada.Ativo ) then
+ try
+ FUsercontrol.MailUserControl.EnviaEmailSenhaForcada(
+ FDataSetCadastroUsuario.FieldByName('NOME').AsString ,
+ FDataSetCadastroUsuario.FieldByName('LOGIN').AsString,
+ TSenhaForm(FormSenha).edtSenha.Text ,
+ FDataSetCadastroUsuario.FieldByName('EMAIL').AsString,
+ '');
+
+ except
+ on E : Exception do FUsercontrol.Log(e.Message, 0);
+ end;
+
+*)
+ FUsercontrol.ChangePassword(FDataSetCadastroUsuario.FieldByName('IDUser').AsInteger, TSenhaForm(FormSenha).edtSenha.Text);
+ End;
+ FreeAndNil(FormSenha);
+end;
+
+destructor TUCFrame_User.Destroy;
+begin
+ //nada a destruir
+ //não destruir o FDataSetCadastroUsuario o USERCONTROL toma conta dele
+ inherited;
+end;
+
+procedure TUCFrame_User.BtAcessClick(Sender: TObject);
+begin
+ if FDataSetCadastroUsuario.IsEmpty then
+ Exit;
+ UserPermis := TUserPermis.Create(self);
+ UserPermis.FUsercontrol := FUsercontrol;
+ SetWindowUserProfile;
+ UserPermis.lbUser.Caption := FDataSetCadastroUsuario.FieldByName('Login').AsString;
+ ActionBtPermissUserDefault;
+end;
+
+procedure TUCFrame_User.SetWindowUserProfile;
+begin
+ with FUsercontrol.UserSettings.Rights do
+ begin
+ UserPermis.Caption := WindowCaption;
+ UserPermis.LbDescricao.Caption := LabelUser;
+ UserPermis.lbUser.Left := UserPermis.LbDescricao.Left + UserPermis.LbDescricao.Width + 5;
+ UserPermis.PageMenu.Caption := PageMenu;
+ UserPermis.PageAction.Caption := PageActions;
+ UserPermis.PageControls.Caption := PageControls; // By Vicente Barros Leonel
+ UserPermis.BtLibera.Caption := BtUnlock;
+ UserPermis.BtBloqueia.Caption := BtLOck;
+ UserPermis.BtGrava.Caption := BtSave;
+ UserPermis.BtCancel.Caption := BtCancel;
+ UserPermis.Position := FUsercontrol.UserSettings.WindowsPosition;
+ end;
+end;
+
+procedure TUCFrame_User.ActionBtPermissUserDefault;
+var
+ TempCampos, TempCamposEX: String;
+begin
+ UserPermis.FTempIdUser := FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger;
+ with FUsercontrol do
+ begin
+ TempCampos := Format(' %s as IdUser, %s as Modulo, %s as ObjName, %s as UCKey ', [TableRights.FieldUserID,
+ TableRights.FieldModule, TableRights.FieldComponentName, TableRights.FieldKey]);
+ TempCamposEX := Format(' %s, %s as FormName ', [TempCampos, TableRights.FieldFormName]);
+
+ UserPermis.DSPermiss := DataConnector.UCGetSQLDataset(Format('SELECT %s FROM %s TAB WHERE TAB.%s = %s AND TAB.%s = %s',
+ [TempCampos, TableRights.TableName, TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('IdUser').AsString,
+ TableRights.FieldModule, QuotedStr(ApplicationID)]));
+ UserPermis.DSPermiss.Open;
+
+ UserPermis.DSPermissEX := DataConnector.UCGetSQLDataset(Format('SELECT %s FROM %s TAB1 WHERE TAB1.%s = %s AND TAB1.%s = %s',
+ [TempCamposEX, TableRights.TableName + 'EX', TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('IdUser').AsString,
+ TableRights.FieldModule, QuotedStr(ApplicationID)]));
+ UserPermis.DSPermissEX.Open;
+
+ UserPermis.DSPerfil := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab Where tab.%s = %s and tab.%s = %s',
+ [TempCampos, TableRights.TableName, TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('Perfil').AsString,
+ TableRights.FieldModule, QuotedStr(ApplicationID)]));
+ UserPermis.DSPerfil.Open;
+
+ UserPermis.DSPerfilEX := DataConnector.UCGetSQLDataset(Format('Select %s from %s tab1 Where tab1.%s = %s and tab1.%s = %s',
+ [TempCamposEX, TableRights.TableName + 'EX', TableRights.FieldUserID, FDataSetCadastroUsuario.FieldByName('Perfil').AsString,
+ TableRights.FieldModule, QuotedStr(ApplicationID)]));
+
+ UserPermis.DSPerfilEX.Open;
+
+ UserPermis.ShowModal;
+
+ FDataSetCadastroUsuario.Close;
+ FDataSetCadastroUsuario.Open;
+
+ FDataSetCadastroUsuario.Locate('idUser', UserPermis.FTempIdUser, []);
+
+ FreeAndNil(UserPermis);
+ end;
+end;
+
+procedure TUCFrame_User.FDataSetCadastroUsuarioAfterScroll(DataSet: TDataSet);
+begin
+ if (FUsercontrol.User.ProtectAdministrator) and (Dataset.FieldByName('Login').AsString = FUsercontrol.Login.InitialLogin.User) then
+ begin
+ BtExclui.Enabled := False;
+ BtPass.Enabled := False;
+ if FUsercontrol.CurrentUser.Username <> FUsercontrol.Login.InitialLogin.User then
+ BtAcess.Enabled := False;
+ end
+ else
+ begin
+ BtExclui.Enabled := True;
+ BtPass.Enabled := True;
+ BtAcess.Enabled := True;
+ end;
+end;
+
+
+procedure TUCFrame_User.SetWindow;
+begin
+ FDataSetCadastroUsuario.AfterScroll := FDataSetCadastroUsuarioAfterScroll;
+ FDataSetCadastroUsuarioAfterScroll(FDataSetCadastroUsuario);
+ with FUsercontrol.UserSettings.UsersForm do
+ begin
+ DbGridUser.Columns[0].Title.Caption := ColName;
+ DbGridUser.Columns[1].Title.Caption := ColLogin;
+ DbGridUser.Columns[2].Title.Caption := ColEmail;
+
+ btAdic.Caption := BtAdd;
+ BtAlt.Caption := BtChange;
+ BtExclui.Caption := BtDelete;
+ BtAcess.Caption := BtRights;
+ BtPass.Caption := BtPassword;
+ BtnClose.Caption := BtClose;
+ end;
+
+end;
+
+procedure TUCFrame_User.SetWindowUser(Adicionar: Boolean);
+begin
+ with FUsercontrol.UserSettings.AddChangeUser do
+ begin
+ FfrmIncluirUsuario.Caption := WindowCaption;
+ if Adicionar then
+ FfrmIncluirUsuario.LbDescricao.Caption := LabelAdd
+ else
+ begin
+ FfrmIncluirUsuario.LbDescricao.Caption := LabelChange;
+ FfrmIncluirUsuario.LbDescricao.Tag := FDataSetCadastroUsuario.FieldByName('IdUser').AsInteger;
+ end;
+
+ FfrmIncluirUsuario.FDataSetCadastroUsuario := DataUser.DataSet;
+ FfrmIncluirUsuario.Label1.Caption := LabelStatus;
+ FfrmIncluirUsuario.lbNome.Caption := LabelName;
+ FfrmIncluirUsuario.lbLogin.Caption := LabelLogin;
+ FfrmIncluirUsuario.lbEmail.Caption := LabelEmail;
+ FfrmIncluirUsuario.ckPrivilegiado.Caption := CheckPrivileged;
+ FfrmIncluirUsuario.lbPerfil.Caption := LabelPerfil;
+ FfrmIncluirUsuario.btGravar.Caption := BtSave;
+ FfrmIncluirUsuario.btCancela.Caption := BtCancel;
+ FfrmIncluirUsuario.Position := Self.FUsercontrol.UserSettings.WindowsPosition;
+ FfrmIncluirUsuario.LabelExpira.Caption := ExpiredIn;
+ FfrmIncluirUsuario.LabelDias.Caption := Day;
+ FfrmIncluirUsuario.ckUserExpired.Caption := CheckExpira;
+ FfrmIncluirUsuario.ComboPerfil.ListSource := DataPerfil;
+ FfrmIncluirUsuario.ComboStatus.Enabled := not Adicionar;
+ with FfrmIncluirUsuario.ComboStatus.Items do
+ begin
+ Clear;
+ Add(StatusActive);
+ Add(StatusDisabled);
+ end;
+ FfrmIncluirUsuario.ComboStatus.ItemIndex := 0;
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/pUCGeral.dfm b/official/2.31RC1/Source/pUCGeral.dfm
new file mode 100644
index 0000000..4b2f07d
--- /dev/null
+++ b/official/2.31RC1/Source/pUCGeral.dfm
@@ -0,0 +1,533 @@
+object FormUserPerf: TFormUserPerf
+ Left = 0
+ Top = 0
+ BorderStyle = bsDialog
+ Caption = 'Controle de Usu'#225'rios'
+ ClientHeight = 506
+ ClientWidth = 692
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Tahoma'
+ Font.Style = []
+ KeyPreview = True
+ OldCreateOrder = False
+ Position = poScreenCenter
+ OnClose = FormClose
+ OnDestroy = FormDestroy
+ OnKeyPress = FormKeyPress
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 692
+ Height = 41
+ Align = alTop
+ BevelOuter = bvNone
+ Color = clWhite
+ TabOrder = 0
+ object LbDescricao: TLabel
+ Left = 41
+ Top = 0
+ Width = 183
+ Height = 41
+ Align = alLeft
+ Caption = 'Controle de Usu'#225'rios'
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -16
+ Font.Name = 'Verdana'
+ Font.Style = [fsBold]
+ ParentFont = False
+ Layout = tlCenter
+ ExplicitHeight = 18
+ end
+ object Image1: TImage
+ Left = 0
+ Top = 0
+ Width = 41
+ Height = 41
+ Align = alLeft
+ Center = True
+ Picture.Data = {
+ 07544269746D617066090000424D660900000000000036000000280000001C00
+ 00001C0000000100180000000000300900000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000CBC5D28B75A472
+ 5199673F9863369B6334A06233A063349F63369F63389B633B97653E94694890
+ 725A8C9189990000000000000000000000000000000000000000000000000000
+ 00000000000000000000C2B0D55F27A06126AA6328AF652BB4672DB8682FBB69
+ 30BD6931BE6830BD682FBB662DB8652BB36328AF6125AA5C239E674C83000000
+ 0000000000000000000000000000000000000000000000000000000000007E51
+ B16025A86328AE652BB4672EB96931BE6B33C16B34C46C35C56B34C46A33C169
+ 31BE672EB9652BB46228AE6024A85B249A000000000000000000000000000000
+ 0000000000000000000000000000000000006D3AA86127AC642AB2672EB86931
+ BE6B34C36D36C86837BE693AC16E38CB6D36C76B34C36931BE672DB8642AB261
+ 26AB59229B4B644D658963688B676D8C6D738E737B907C8D9B8FA7ACA8000000
+ 0000000000007F50B36328AE652CB56830BC6B33C26D36C86E38CC596AB0698E
+ D46E39CC6F39CD6D36C86B33C2682FBB652CB46228AE54268F39802942982F43
+ 962F459330488D324A87334E80354C76385171498E968F000000B399CF642AB0
+ 662DB76931BE6C35C56F38CC6338B95C9AC76DB9EB6557C7713CD26E38CB6C34
+ C46931BE662DB66329AF4347613A9C2B3CA32C3DA12D3F9D2E43972F478F314C
+ 8733517E365774385371470000000000007847B4662DB86931BF6C35C66F39CD
+ 514CA55DA7D861AFE25A8ECF6E3ACD6F39CD6C35C66931BE662DB75631933491
+ 2D35AE2935AF2936AD2A39A72B3EA02D43972F488E324E84345479374F713F00
+ 00000000000000007444B66931BE6C35C56B36C5416AA14A8EBD4380AA407EA8
+ 5448AE6E38CA6C35C56931BE593498368A3532B3282FB9272FBA2631B72734B0
+ 2939A72B3F9E2E4593304B8833517E36547A470000000000000000000000007B
+ 56AE6933BD5337A33775A13F85B73F88BC397DAD2C54804C288D6330B4483A76
+ 2B702D31AA272EBC262CBA292AC0272BC02530B72736AD2A3CA22C43972F498C
+ 324F80357695720000000000000000000F3C6925496D404775467DB64E9DD34E
+ 9CD24C9AD04997CE4493CA3360900F2E5A02355F01346022832532B12FFFFFFF
+ FFFFFF37BD362EBC2634B0293BA42C42992F488D324F853F0000000000000000
+ 0000000001346802356A2C659555A2D755A3D854A2D753A1D6509ED44C9AD147
+ 95CC1854880033660033661C742F70A173FFFFFFFFFFFFFFFFFF2FB42935AF29
+ 3BA42C42992F488D390000000000000000000000000000000538710C3F755399
+ CA5AA7DC5AA7DC5AA7DB58A5DA55A3D852A0D54D9BD23B85BB00336600336622
+ 6139788B94648AA65782A1607E933D7444329C263CA02D529A4A000000000000
+ 0000000000000000000000000B3E7B2961915DAADE5FADE05FADE05EACDF5CAA
+ DD5AA7DC56A4D952A0D54C9AD0124C8000326530647F4E9BD04E9CD24C9AD048
+ 97CE4187B42B604481A880000000000000000000000000000000000000000000
+ 0E41824584B163B0E365B2E465B2E463B1E361AEE15DABDE5AA7DC55A3D8509E
+ D4296B9F0033654180AC55A3D854A2D752A0D6509ED44C9AD04890C2838E9600
+ 00000000000000000000000000000000000000001345855699C567B4E669B6E8
+ 69B6E868B5E765B2E561AEE15DAADE58A5DA53A1D6397FB30133654888B45AA7
+ DC59A7DB57A5DA55A3D852A0D54D9BD15087AF00000000000000000000000000
+ 000000000000000016488B467EA54E8BB45EA0CA6BB4E46CB8EA68B5E764B1E4
+ 5FACDF5AA7DC55A2D7387EB30234654F91BD5FACE05EABDF5CA9DD59A7DB56A4
+ D952A0D54C98CE85929D0000000000000000000000000000000000001C4F9B1C
+ 4F9C1E50A01F4F932C5C8D4C83AA63AAD965B2E460AEE15BA8DC529DD11D588B
+ 083A6A5CA2D264B1E463B0E360ADE15DAADE59A7DB55A3D8509ED46488A10000
+ 000000000000000000000000000000002E5EA72356AE2558B02457AF2255AB1D
+ 4F9B2555874883AA5DA9DB488CBE174C8004376E1F548168B3E569B5E867B4E7
+ 64B1E460ADE15CA9DD58A5DA53A1D6598AAE0000000000000000000000000000
+ 00000000000000285BB62A5DBA295CB92659B22255AB1E51A1194A8C23558511
+ 45830A3D7B0538704985AF6CB7E86EBAEC6CB8EA68B4E763B0E35EABDF5AA7DB
+ 54A2D75690B90000000000000000000000000000000000000000003A69BB2F62
+ C42D60C1295CB82457AE1F52A41A4D9A1548901043860B3E7C1A4D7B407A9F44
+ 7A9D518AAE64A9D76AB5E764B1E460ADE15BA8DC55A2D75890B6000000000000
+ 0000000000000000000000000000000000003768C32E61C2295CB92457AF1F52
+ A51A4D9B1548911144861A4D82478AB54F96C34F96C34B8FBA427A9E497FA35D
+ A4D360ADE0549CCD407EA74B6F85000000000000000000000000000000000000
+ 000000000000000000406DBA285BB52356AC1E51A31B4E9916488E0000000000
+ 00579FCC5AA2CF5AA2CF569ECB5198C5488CB63C72944680A83E80AA3D81AC76
+ 8D9C000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000065A9D164AEDC64ADDC60A9
+ D659A1CE5097C4478DB93E82AD3D82AD407BA200000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000006FB8E76EB9E768B1E05FA7D5559DCA4B91BE4086
+ B13E81AA8EA6B600000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ A5CFE975BFEE6CB7E562ABD9579FCC4D93C04487B08CAABB0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000008FC0DE70ACD1
+ 6DA5C888AFC90000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000}
+ Transparent = True
+ ExplicitHeight = 35
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 41
+ Width = 100
+ Height = 465
+ Align = alLeft
+ BevelOuter = bvLowered
+ Color = clSilver
+ TabOrder = 1
+ object SpeedUser: TSpeedButton
+ Left = 1
+ Top = 1
+ Width = 98
+ Height = 60
+ Cursor = crHandPoint
+ Align = alTop
+ GroupIndex = 1
+ Down = True
+ Caption = '&Usu'#225'rios'
+ Flat = True
+ Glyph.Data = {
+ 66090000424D660900000000000036000000280000001C0000001C0000000100
+ 1800000000003009000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000CBC5D28B75A4725199673F9863369B
+ 6334A06233A063349F63369F63389B633B97653E94694890725A8C9189990000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000C2B0D55F27A06126AA6328AF652BB4672DB8682FBB6930BD6931BE6830BD
+ 682FBB662DB8652BB36328AF6125AA5C239E674C830000000000000000000000
+ 000000000000000000000000000000000000000000007E51B16025A86328AE65
+ 2BB4672EB96931BE6B33C16B34C46C35C56B34C46A33C16931BE672EB9652BB4
+ 6228AE6024A85B249A0000000000000000000000000000000000000000000000
+ 000000000000000000006D3AA86127AC642AB2672EB86931BE6B34C36D36C868
+ 37BE693AC16E38CB6D36C76B34C36931BE672DB8642AB26126AB59229B4B644D
+ 658963688B676D8C6D738E737B907C8D9B8FA7ACA80000000000000000007F50
+ B36328AE652CB56830BC6B33C26D36C86E38CC596AB0698ED46E39CC6F39CD6D
+ 36C86B33C2682FBB652CB46228AE54268F39802942982F43962F459330488D32
+ 4A87334E80354C76385171498E968F000000B399CF642AB0662DB76931BE6C35
+ C56F38CC6338B95C9AC76DB9EB6557C7713CD26E38CB6C34C46931BE662DB663
+ 29AF4347613A9C2B3CA32C3DA12D3F9D2E43972F478F314C8733517E36577438
+ 5371470000000000007847B4662DB86931BF6C35C66F39CD514CA55DA7D861AF
+ E25A8ECF6E3ACD6F39CD6C35C66931BE662DB756319334912D35AE2935AF2936
+ AD2A39A72B3EA02D43972F488E324E84345479374F713F000000000000000000
+ 7444B66931BE6C35C56B36C5416AA14A8EBD4380AA407EA85448AE6E38CA6C35
+ C56931BE593498368A3532B3282FB9272FBA2631B72734B02939A72B3F9E2E45
+ 93304B8833517E36547A470000000000000000000000007B56AE6933BD5337A3
+ 3775A13F85B73F88BC397DAD2C54804C288D6330B4483A762B702D31AA272EBC
+ 262CBA292AC0272BC02530B72736AD2A3CA22C43972F498C324F803576957200
+ 00000000000000000F3C6925496D404775467DB64E9DD34E9CD24C9AD04997CE
+ 4493CA3360900F2E5A02355F01346022832532B12FFFFFFFFFFFFF37BD362EBC
+ 2634B0293BA42C42992F488D324F853F00000000000000000000000001346802
+ 356A2C659555A2D755A3D854A2D753A1D6509ED44C9AD14795CC185488003366
+ 0033661C742F70A173FFFFFFFFFFFFFFFFFF2FB42935AF293BA42C42992F488D
+ 390000000000000000000000000000000538710C3F755399CA5AA7DC5AA7DC5A
+ A7DB58A5DA55A3D852A0D54D9BD23B85BB003366003366226139788B94648AA6
+ 5782A1607E933D7444329C263CA02D529A4A0000000000000000000000000000
+ 000000000B3E7B2961915DAADE5FADE05FADE05EACDF5CAADD5AA7DC56A4D952
+ A0D54C9AD0124C8000326530647F4E9BD04E9CD24C9AD04897CE4187B42B6044
+ 81A8800000000000000000000000000000000000000000000E41824584B163B0
+ E365B2E465B2E463B1E361AEE15DABDE5AA7DC55A3D8509ED4296B9F00336541
+ 80AC55A3D854A2D752A0D6509ED44C9AD04890C2838E96000000000000000000
+ 0000000000000000000000001345855699C567B4E669B6E869B6E868B5E765B2
+ E561AEE15DAADE58A5DA53A1D6397FB30133654888B45AA7DC59A7DB57A5DA55
+ A3D852A0D54D9BD15087AF000000000000000000000000000000000000000000
+ 16488B467EA54E8BB45EA0CA6BB4E46CB8EA68B5E764B1E45FACDF5AA7DC55A2
+ D7387EB30234654F91BD5FACE05EABDF5CA9DD59A7DB56A4D952A0D54C98CE85
+ 929D0000000000000000000000000000000000001C4F9B1C4F9C1E50A01F4F93
+ 2C5C8D4C83AA63AAD965B2E460AEE15BA8DC529DD11D588B083A6A5CA2D264B1
+ E463B0E360ADE15DAADE59A7DB55A3D8509ED46488A100000000000000000000
+ 00000000000000002E5EA72356AE2558B02457AF2255AB1D4F9B2555874883AA
+ 5DA9DB488CBE174C8004376E1F548168B3E569B5E867B4E764B1E460ADE15CA9
+ DD58A5DA53A1D6598AAE00000000000000000000000000000000000000000028
+ 5BB62A5DBA295CB92659B22255AB1E51A1194A8C2355851145830A3D7B053870
+ 4985AF6CB7E86EBAEC6CB8EA68B4E763B0E35EABDF5AA7DB54A2D75690B90000
+ 000000000000000000000000000000000000003A69BB2F62C42D60C1295CB824
+ 57AE1F52A41A4D9A1548901043860B3E7C1A4D7B407A9F447A9D518AAE64A9D7
+ 6AB5E764B1E460ADE15BA8DC55A2D75890B60000000000000000000000000000
+ 000000000000000000003768C32E61C2295CB92457AF1F52A51A4D9B15489111
+ 44861A4D82478AB54F96C34F96C34B8FBA427A9E497FA35DA4D360ADE0549CCD
+ 407EA74B6F850000000000000000000000000000000000000000000000000000
+ 00406DBA285BB52356AC1E51A31B4E9916488E000000000000579FCC5AA2CF5A
+ A2CF569ECB5198C5488CB63C72944680A83E80AA3D81AC768D9C000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000065A9D164AEDC64ADDC60A9D659A1CE5097C447
+ 8DB93E82AD3D82AD407BA2000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000006FB8E76EB9E768B1E05FA7D5559DCA4B91BE4086B13E81AA8EA6B600
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000A5CFE975BFEE6CB7
+ E562ABD9579FCC4D93C04487B08CAABB00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000008FC0DE70ACD16DA5C888AFC90000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000}
+ Layout = blGlyphTop
+ OnClick = SpeedUserClick
+ OnMouseEnter = SpeedUserMouseEnter
+ OnMouseLeave = SpeedUserMouseLeave
+ ExplicitLeft = -4
+ ExplicitTop = 6
+ ExplicitWidth = 95
+ end
+ object SpeedPerfil: TSpeedButton
+ Left = 1
+ Top = 61
+ Width = 98
+ Height = 60
+ Cursor = crHandPoint
+ Align = alTop
+ GroupIndex = 1
+ Caption = '&Perfil'
+ Flat = True
+ Glyph.Data = {
+ 66090000424D660900000000000036000000280000001C0000001C0000000100
+ 1800000000003009000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000008E40198E40198E40198E40198E40198E40198E40198E40198E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E40198E40198E40198E40198E40190000000000008E4018A24E00A2
+ 4E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00
+ A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E00A24E
+ 00A24E008E4019000000000000A2511BF9F6F4B7A293B7A293B7A293B7A293B7
+ A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A293
+ B7A293B7A293B7A293B7A293B7A293B7A293B7A293B7A2939242180000000000
+ 00AE5919FAF8F6F9F6F4F7F3F1F5F1EEF4EEEBF2ECE8F1EAE6EFE7E3EDE5E0EC
+ E3DEEBE1DBE9DED7E7DBD4E5D9D1E3D6CEE2D3CBE0D1C8DECEC5DCCBC2DBC9BF
+ DBC9BFDBC9BFDBC9BFB7A2938E4019000000000000B15A17FDFCFBFBF9F8F9F7
+ F5F7F3F1F5F1EEF4EEEBF2ECE8F1EAE6EFE7E3EDE5E0ECE3DEEBE1DBE9DED7E7
+ DBD4E5D9D1E3D6CEE2D3CBE0D1C8DECEC5DCCBC2DBC9BFDBC9BFDBC9BFB7A293
+ 8E4019000000000000B45C17FEFEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0
+ EDF3EDEAF1EBE7EFE7E3EDE5E0ECE3DEEBE1DBE9DED7E7DBD4E5D9D1E3D6CEE2
+ D3CBE0D1C8DECEC5DCCBC2DBC9BFDBC9BFB7A2938E4019000000000000B75E16
+ FFFFFFFEFEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEAF1EBE7F0E8
+ E4EEE6E1EDE4DFEBE2DCE9DED7B7A29369473169473169473169473169473169
+ 4731694731B7A2938E4019000000000000B96016FFFFFFFFFFFFFEFEFDFDFCFB
+ FBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEAF1EBE7F0E8E4EEE6E1EDE4DFEBE2
+ DCB7A293FFFFFFFCFDFF5476FFE4E9FFFFFFFFFFFFFF694731B7A2938E401900
+ 0000000000BC6215FFFFFFFFFFFFFFFFFFFEFEFDFDFCFBFBF9F8F9F7F5F8F4F2
+ F6F2EFF5F0EDF3EDEAF1EBE7F0E8E4EEE6E1EDE4DFB7A293FFFFFFB4C3FF0033
+ FF2450FFFCFDFFFFFFFF694731B7A2938E4019000000000000BF6415FFFFFFFF
+ FFFFFFFFFFFFFFFFFEFEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEA
+ F1EBE7F0E8E4EEE6E1B7A293FFFFFF4066FF0C3DFF0033FF9CB0FFFFFFFF6947
+ 31B7A2938E4019000000000000C06614FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFDFDFCFBFBF9F8F9F7F5F8F4F2F6F2EFF5F0EDF3EDEAF1EBE7F0E8E4B7A293
+ 8CA3FF0033FF708DFF6483FF1846FFF0F3FF694731B7A2938E40190000000000
+ 00C36814FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FA
+ F8F6F9F6F4F6F2EFF5F0EDF3EDEAF1EBE7B7A29388A0FF1C49FFE4E9FFF0F3FF
+ 204DFF6080FF694731B7A2938E4019000000000000C66A13FFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6F9F6F4F7F3F1F5
+ F1EEF4EEEBB7A293FFFFFFFFFFFFFFFFFFFFFFFF9CB0FF0C3DFF6080FFB7A293
+ 8E4019000000000000C96C13FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6F9F6F4F7F3F1F5F1EEB7A293B7A293B7
+ A293B7A293B7A293B7A2939CB0FF1443FF6080FF8E4019000000000000CB6D12
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD
+ FCFCFAF9FAF8F6F9F6F4F7F3F1F5F1EEF4EEEBF2ECE8F1EAE6EFE7E3EDE5E0EC
+ E3DE9CB0FF345DFF8E4019000000000000CB6D12FFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6F9F6
+ F4B7A2936947316947316947316947316947316947316947319CB0FF486DFF00
+ 0000000000CB6D12FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFDFDFCFCFAF9FAF8F6B7A293FFFFFFFCFDFF5476
+ FFE4E9FFFFFFFFFFFFFF694731B7A2939CB0FF7893FF000000CB6D12FFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFDFDFCFCFAF9B7A293FFFFFFB4C3FF0033FF2450FFFCFDFFFFFFFF6947
+ 31B7A2938E4019000000000000CB6D12FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDB7A293
+ FFFFFF4066FF0C3DFF0033FF9CB0FFFFFFFF694731B7A2938E40190000000000
+ 00CB6D12FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7A2938CA3FF0033FF708DFF6483FF
+ 1846FFF0F3FF694731B7A2938E4019000000000000CA6C11F3EDEAF3EDEAF3ED
+ EAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3EDEAF3
+ EDEAF3EDEAB7A29388A0FF1C49FFE4E9FFF0F3FF204DFF6080FF694731F3EDEA
+ 8E4019000000000000B963038E40198E40198E40198E40198E40198E40198E40
+ 198E40198E40198E40198E40198E40198E40198E40198E4019B7A293FFFFFFFF
+ FFFFFFFFFFFFFFFF9CB0FF0C3DFF6080FF8E40198E4019000000000000B96303
+ B45C00B45C00B45C00B45C00B45C00B45C00B45C00B55B00B55B00B55B00B55B
+ 00B55B00B55B00B45C00B45C00B7A293B7A293B7A293B7A293B7A293B7A2939C
+ B0FF1443FF6080FF8E4019000000000000E3A660E38E2DE38E2DE38E2DE38E2D
+ E38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E2DE38E
+ 2DE38E2DF6CA9AF19F43E38E2DF6CA9AF19F43E38E2D9CB0FF345DFFE3A66000
+ 0000000000F8EBDCE3A660D27100D27100D27100D27100D27100D27100D27100
+ D27100D27100D27100D27100D27100D27100D27100D27100D27100D27100D271
+ 00D27100D27100D27100D271009CB0FF486DFF00000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000009CB0FF7893FF}
+ Layout = blGlyphTop
+ OnClick = SpeedPerfilClick
+ OnMouseEnter = SpeedUserMouseEnter
+ OnMouseLeave = SpeedUserMouseLeave
+ ExplicitLeft = -4
+ ExplicitTop = 45
+ end
+ object SpeedLog: TSpeedButton
+ Left = 1
+ Top = 121
+ Width = 98
+ Height = 60
+ Cursor = crHandPoint
+ Align = alTop
+ GroupIndex = 1
+ Caption = '&Log'
+ Flat = True
+ Glyph.Data = {
+ 66090000424D660900000000000036000000280000001C0000001C0000000100
+ 1800000000003009000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000E5E0DC885D
+ 40694731694731885D40E5E0DC00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000E5E0DC694731B7A293B7A293B7A293B7A2936947
+ 31E5E0DC00000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000E5E0DC
+ 694731B7A293E4D7CFE3D5CDE1D3CBE0D1C8B7A293694731E5E0DC0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000E5E0DC694731B7A293E7DBD4E5D9D2E4D7CF
+ E3D5CDE1D3CBE0D1C8B7A293694731E5E0DC0000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000000000000000E5
+ E0DC694731B7A293E9DFD9E8DDD7E7DBD4983000983000E3D5CDE1D3CBE0D1C8
+ B7A293694731E5E0DC0000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000E5E0DC694731B7A293EDE4DFEBE2DDEA
+ E0DA983000C86000C86000983000E3D5CDE1D3CBE0D1C8B7A293694731E5E0DC
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00E5E0DC694731B7A293EFE8E3EEE6E1EDE4DF983000C86000F57E46F57940C8
+ 6000983000E3D6CEE1D3CBE0D1C8B7A293694731E5E0DC000000000000000000
+ 000000000000000000000000000000000000E5E0DC694731B7A293F2ECE8F1EA
+ E6EFE8E3973000C35D00E68250E37B4AE27743E3733EBE5B00962F00E3D6CEE2
+ D4CCE1D2C9B7A293694731E5E0DC000000000000000000000000000000000000
+ 000000E5E0DC694731B7A293F5F0EDF3EEEBF2ECE8983000C55E00E0865ABE6F
+ 47AC613CAA5C37B25E35CD6838C05C00983000E3D6CEE2D4CCE1D2C9B7A29369
+ 4731E5E0DC000000000000000000000000000000E5E0DC694731B7A293F6F2EF
+ F6F2EFF5F0ED983000C86000F49C6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6D
+ 3EEE7941C86000983000E3D6CEE2D4CCE1D2C9B7A293694731E5E0DC00000000
+ 0000000000E5E0DC694731B7A293F6F2EFF9F7F5F8F5F3983000C86000F8A77B
+ F7A175EEA078FFFFFFFFFFFFFFFFFFAE6C4CDE7948F38048F57C43C860009830
+ 00E3D6CEE2D4CCE1D2C9B7A293694731E5E0DC000000E5E0DC694731B7A293F6
+ F2EFFCFBFAFBF9F8983000C86000F9B187F9AC81F8A77BF09D71FFFFFFFFFFFF
+ FFFFFFAA6340E3804FF68650F58149F57C43C86000983000E3D6CEE2D4CCE1D2
+ C9B7A293694731E5E0DCB7A293D0BBACF6F2EFFFFFFFFDFDFDA33705C86000FA
+ BA93FAB58DF9B187F9AC81F0A277FFFFFFFFFFFFFFFFFFAA6644E48556F68B56
+ F68650F58149F57C43C86000983000E3D6CEE2D4CCE1D2C9B7A293885D40B7A2
+ 93F6F2EFFFFFFFFFFFFFC86000F68B56FBC39FFBBF99FABA93FAB58DF9B187F1
+ A77DFFFFFFFFFFFFFFFFFFAA6948E4885BF7905DF68B56F68650F58149F57C43
+ C86000983000E4D7CFE3D5CDB7A293694731D0BBACFFFFFFFFFFFFFFFFFFC860
+ 00FBC39FFBC39FFBC39FFBC19CFBBD96F9B78FEBA882FFFFFFFFFFFFFFFFFFAA
+ 6E4EE48F64F79766F79260F68D59F68853F6834DC86000983000E5D9D2E4D7CF
+ B7A293694731D0BBACF6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39FFBC39FFBC3
+ 9FFBC19CF7BA94E2A987FFFFFFFFFFFFFFFFFFAD7354E6946AF79B6CF79766F7
+ 9260F68D59C86000983000E8DDD7E7DBD4E5D9D2B7A293885D40ECE4DED0BBAC
+ F6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39FFBC39FFBC39FF8BF9AFFFFFFFFFF
+ FFFFFFFFFFFFFFC08361E99B71F8A072F79B6CF79766C86000983000EBE1DCE9
+ DFD9E8DDD7B7A293694731E5E0DC000000ECE4DED0BBACF6F2EFFFFFFFFFFFFF
+ FFFFFFC86000FBC39FFBC39FFAC29EF7C29FF0C2A6ECCEBCF8EFE9DA9873F1A5
+ 7AF8A578F8A072C86000983000EDE5E0ECE3DEEBE1DCB7A293694731E5E0DC00
+ 0000000000000000ECE4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39F
+ FBC39FF8C19DE5B08FC49375B8886AD29674F0A87FF9AA7EC86000983000F1EA
+ E6EFE8E3EEE6E1B7A293694731E5E0DC000000000000000000000000000000EC
+ E4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC86000FBC39FF5BE9BEDD7C9FFFFFF
+ D0BFB4BD8B6DECA982C86000983000F3EEEBF2ECE8F1EAE6B7A293694731E5E0
+ DC000000000000000000000000000000000000000000ECE4DED0BBACF6F2EFFF
+ FFFFFFFFFFFFFFFFC86000F6BF9CFFFFFFFFFFFFFFFFFFC79677BF5B00983000
+ F6F2EFF5F0EDF3EEEBB7A293694731E5E0DC0000000000000000000000000000
+ 00000000000000000000000000ECE4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC6
+ 5F00F8E0D0FFFFFFEDD7C9B85800952F00F9F6F4F7F4F2F6F2EFB7A293694731
+ E5E0DC0000000000000000000000000000000000000000000000000000000000
+ 00000000ECE4DED0BBACF6F2EFFFFFFFFFFFFFFFFFFFC65F00F6BF9CF0885496
+ 2F00FAF9F8FAF8F7F6F2EFB7A293694731E5E0DC000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000ECE4DED0BB
+ ACF6F2EFFFFFFFFFFFFFFFFFFFC86000C86000FFFFFFFDFDFDF6F2EFB7A29369
+ 4731E5E0DC000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000ECE4DED0BBACF6F2EFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFF6F2EFB7A293694731E5E0DC00000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000ECE4DEE2C0B1F6F2EFFFFFFFFFFFFFFFFFFFF6F2EFB7A2
+ 93694731E5E0DC00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ ECE4DED0BBACF6F2EFFFFFFFF6F2EFD0BBAC694731E5E0DC0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000ECE4DED0BBACD0BBAC
+ B7A293B7A293E5E0DC0000000000000000000000000000000000000000000000
+ 00000000000000000000}
+ Layout = blGlyphTop
+ OnClick = SpeedLogClick
+ OnMouseEnter = SpeedUserMouseEnter
+ OnMouseLeave = SpeedUserMouseLeave
+ ExplicitLeft = -4
+ ExplicitTop = 115
+ end
+ object SpeedUserLog: TSpeedButton
+ Left = 1
+ Top = 181
+ Width = 98
+ Height = 60
+ Cursor = crHandPoint
+ Align = alTop
+ GroupIndex = 1
+ Caption = 'Usu'#225'rios Logados'
+ Flat = True
+ Glyph.Data = {
+ 66090000424D660900000000000036000000280000001C0000001C0000000100
+ 18000000000030090000C40E0000C40E00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000084
+ C6E70000000000000000000000000000000000000000000000000000006B8C73
+ 5A845A527B4A4A7B4A4A7B4A4A7B424A7B4A4A7B4A4A7B4A527B52527B525A7B
+ 5A637B6B7B8C7BA5A5A50000000000009CD6EF7BE7F77BB5D600000000000000
+ 00000000000000000000004A73394A7B314A84314A8C314A8C31429431429429
+ 429429429C294294294294314294314A8C314A8C3163BDDEB5CEDE4A8C31527B
+ 310000007BB5CE52CEE7317BAD7B737B847373ADADAD0000000000005A733952
+ 7B314A84314A8C31429431429429429C29399C2939A52939A52939A529399C29
+ 429C294294319CD6EF7BEFF7398CBD8C8C9494737B94636373637321A5D6297B
+ AD845A63945252846B6B000000000000527B315284314A8C31429431429C2939
+ 9C2939A52939AD2931AD2931AD2939AD2939A52939A529429C2994B5C642BDE7
+ 1884BD846B7BBD6B6BB56B63AD636B42ADD6318CBD8C5A639C5A5A7352520000
+ 00000000527B314A84314A8C31429429399C2939A52931AD2931B52931B52931
+ B52931B52931AD2939AD2939AD29B573734294C6299CCE846B84C66B6BBD6B6B
+ B56B6B6384A55284A5A56363A55A5A845252000000000000527B314A8C314294
+ 31429C2939A52931AD2931B52929BD2129BD2129BD2129BD2131B52131AD29CE
+ 9C9CDE7B7B7B8CA542ADD6947384CE7373C66B6BBD6B6BB56363A55A5AA56363
+ AD73739473730000000000005284314A8C31429431399C2939A52931AD2931BD
+ 2129BD2131B53129BD2929C62129BD2131B529CEADADE77B7BD67B7B947B8CBD
+ 7373BD7373B57373B58484C6A5A5DEB5B5DEBDBDDEBDBD9C8484000000000000
+ 5A944A4A8C31429431399C2939AD2931B52929BD214AA54AFFFFFFFFFFFF42BD
+ 4229C62131B52139AD29B57B7BCEA5A5D6BDBDDEC6C6E7CECEE7C6C6DEB5B5DE
+ A5A5DEB5B5E7C6C6D6ADADB59C9C0000000000000000004A8C39429431399C29
+ 39AD2931B52929AD29FFFFFFFFFFFFFFFFFFFFFFFF31B53131B52131AD29C69C
+ 9CF7EFEFF7DEDEE7B5B5E7B5B5E7BDBDEFCECEEFD6D6E7CECEE7C6C6B58C8C00
+ 00000000000000000000000000004A9C42429C2939A52931AD29528C529C9C9C
+ 7B8C946B7B8C737B845A7B5A299C2139AD2939AD29C6A5A5E7D6D6F7E7E7EFDE
+ DEE7B5B5DEADADE7B5B5D6BDBDBD949400000000000000000000000000000000
+ 00000000007BB57B399C293194314A7B944A94C64A9CCE4A94CE4294CE427BA5
+ 215231297B214A9C42000000DEC6C6C6ADADC6A5A5CEA5A5BD9C9CA584848C7B
+ 7B0000000000000000000000000000000000000000000000000000000000004A
+ 94AD52A5D652A5D6529CD64A9CD64A9CD64A94CE428CBD426363000000000000
+ 000000000000000000000000ADB5B5A5A5A57373730000000000000000000000
+ 0000000000000000000000000000000073ADD652A5DE52A5DE52A5DE52A5DE52
+ A5D652A5D64A9CD64A9CD6428CC6737B84000000000000000000D6D6D6ADADAD
+ 8C9494B5B5B58C94940000000000000000000000000000000000000000000000
+ 000000005AA5DE5AADDE5AADDE5AADDE5AA5DE5AA5DE52A5DE52A5D6529CD64A
+ 9CD64A7BA50000000000000000009C9C9CBDBDBDB5B5B5B5B5B5000000000000
+ 0000000000000000000000000000000000000000005AA5D65AADDE5AADE75AAD
+ E75AADE75AADDE5AADDE5AA5DE52A5DE52A5D6529CD64A94CE00000000000000
+ 0000ADB5B5C6C6C6000000000000000000000000000000000000000000000000
+ 00000000000000000063ADE763ADE763B5E763B5E763B5E763ADE75AADE75AAD
+ DE5AA5DE52A5DE52A5D64A9CD65A7B9400000000000000000000000000000000
+ 00000000000000000000000000000000000000000000000000007BB5DE63B5E7
+ 63B5E763B5E76BB5E763B5E763B5E763B5E763ADE75AADDE5AA5DE52A5DE529C
+ D64A84AD00000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000063ADDE63B5E76BB5EF6BB5EF6BBDEF6BB5EF
+ 6BB5EF63B5E763ADE75AADE75AADDE52A5DE52A5D64A8CBD0000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000063ADDE5294BD528CB55A9CCE6BB5E76BBDEF6BBDEF6BB5E763B5E763ADE7
+ 5AADDE5AA5DE52A5D64A94C60000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000004A8CBD4284AD4284AD39
+ 7B9C39738C4A7BA563A5D66BB5E763B5E763ADE75AADDE5AA5DE52A5D64A8CB5
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000005294BD4A94C64A94C65294C64A94C64A8CB539739442
+ 73945A9CCE63ADE75AADDE4A8CBD39739C39637B000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00529CCE5AA5CE5AA5CE529CCE529CCE4A94C6428CB5396B8C427B9C4284B539
+ 7BAD3984AD5A7B8C000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000005AA5D663ADDE63ADDE5AAD
+ D65AA5D6529CCE4A94C6428CBD397BA5397BAD3984AD397BA500000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000007BB5D66BB5E76BB5E763B5DE63ADDE5AA5D6529CC64A94
+ BD428CB53984AD3984AD63849C00000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 73BDE773BDEF6BBDEF63B5DE5AA5D6529CCE4A94C6428CB53984AD5284A50000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000000000000000007BBDEF73BDEF6BB5E7
+ 63ADD65AA5CE4A94C6428CB56B94B50000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000084BDDE73ADCE73A5C6000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000}
+ Layout = blGlyphTop
+ OnClick = SpeedUserLogClick
+ OnMouseEnter = SpeedUserMouseEnter
+ OnMouseLeave = SpeedUserMouseLeave
+ ExplicitLeft = -4
+ ExplicitTop = 301
+ end
+ end
+ object Panel3: TPanel
+ Left = 100
+ Top = 41
+ Width = 592
+ Height = 465
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ end
+end
diff --git a/official/2.31RC1/Source/pUCGeral.pas b/official/2.31RC1/Source/pUCGeral.pas
new file mode 100644
index 0000000..bcceedf
--- /dev/null
+++ b/official/2.31RC1/Source/pUCGeral.pas
@@ -0,0 +1,217 @@
+unit pUCGeral;
+
+interface
+
+uses
+ Buttons,
+ Classes,
+ ComCtrls,
+ Controls,
+ DB,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UcBase,
+ Variants,
+ Windows;
+
+type
+ TFormUserPerf = class(TForm)
+ Panel1: TPanel;
+ LbDescricao: TLabel;
+ Image1: TImage;
+ Panel2: TPanel;
+ SpeedUser: TSpeedButton;
+ SpeedPerfil: TSpeedButton;
+ Panel3: TPanel;
+ SpeedLog: TSpeedButton;
+ SpeedUserLog: TSpeedButton;
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormShow(Sender: TObject);
+ procedure SpeedUserClick(Sender: TObject);
+ procedure SpeedPerfilClick(Sender: TObject);
+ procedure SpeedLogClick(Sender: TObject);
+ procedure SpeedUserLogClick(Sender: TObject);
+ procedure SpeedUserMouseEnter(Sender: TObject);
+ procedure SpeedUserMouseLeave(Sender: TObject);
+ procedure FormKeyPress(Sender: TObject; var Key: Char);
+ procedure FormDestroy(Sender: TObject);
+ protected
+ FrmFrame: TCustomFrame;
+ private
+ { Private declarations }
+ public
+ FUsercontrol: TUserControl;
+ { Public declarations }
+ end;
+
+var
+ FormUserPerf: TFormUserPerf;
+
+implementation
+
+uses
+ pUCFrame_Log,
+ pUcFrame_Profile,
+ pUcFrame_User,
+ pUcFrame_UserLogged,
+ UCMessages;
+
+{$R *.dfm}
+
+ { --------------------------------------------------------------------------- }
+ { FORM }
+
+procedure TFormUserPerf.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ if Assigned(FrmFrame) then
+ FreeAndNil(FrmFrame);
+ Action := caFree;
+end;
+
+procedure TFormUserPerf.FormDestroy(Sender: TObject);
+begin
+ FreeAndNil( FrmFrame );
+end;
+
+procedure TFormUserPerf.FormKeyPress(Sender: TObject; var Key: Char);
+begin
+ if key = #27 then
+ Close;
+end;
+
+procedure TFormUserPerf.FormShow(Sender: TObject);
+begin
+ with FUsercontrol do
+ begin
+ FUsercontrol.CurrentUser.PerfilUsuario := DataConnector.UCGetSQLDataset(
+ Format('Select %s as IdUser, %s as Login, %s as Nome, %s as Email, %s as Perfil, %s as Privilegiado, %s as Tipo, %s as Senha, %s as UserNaoExpira, %s as DaysOfExpire , %s as UserInative from %s Where %s = %s ORDER BY %s', [TableUsers.FieldUserID, TableUsers.FieldLogin, TableUsers.FieldUserName, TableUsers.FieldEmail, TableUsers.FieldProfile, TableUsers.FieldPrivileged, TableUsers.FieldTypeRec, TableUsers.FieldPassword, TableUsers.FieldUserExpired, TableUsers.FieldUserDaysSun, TableUsers.FieldUserInative, TableUsers.TableName, TableUsers.FieldTypeRec, QuotedStr('U'), TableUsers.FieldLogin]));
+
+ FUsercontrol.CurrentUser.PerfilGrupo := DataConnector.UCGetSQLDataset(
+ Format('Select %s as IdUser, %s as Login, %s as Nome, %s as Tipo from %s Where %s = %s ORDER BY %s',
+ [TableUsers.FieldUserID, TableUsers.FieldLogin, TableUsers.FieldUserName, TableUsers.FieldTypeRec,
+ TableUsers.TableName, TableUsers.FieldTypeRec, QuotedStr('P'), TableUsers.FieldUserName]));
+ end;
+ SpeedPerfil.Visible := FUsercontrol.UserProfile.Active;
+ SpeedLog.Visible := FUsercontrol.LogControl.Active;
+ SpeedUserLog.Visible := FUsercontrol.UsersLogged.Active;
+
+ SpeedUserClick(Sender);
+ Caption := FUsercontrol.UserSettings.UsersForm.WindowCaption;
+
+ SpeedUser.Caption := FUsercontrol.UserSettings.Log.ColUser;
+ SpeedPerfil.Caption := FUsercontrol.UserSettings.UsersProfile.ColProfile;
+ SpeedUserLog.Caption := FUsercontrol.UserSettings.UsersLogged.LabelDescricao;
+
+end;
+
+procedure TFormUserPerf.SpeedPerfilClick(Sender: TObject);
+begin
+ if FrmFrame is TFrame_Profile then
+ Exit;
+ if Assigned(FrmFrame) then
+ FreeAndNil(FrmFrame);
+
+ FrmFrame := TFrame_Profile.Create(Self);
+ TFrame_Profile(FrmFrame).DataPerfil.DataSet := FUsercontrol.CurrentUser.PerfilGrupo;
+ TFrame_Profile(FrmFrame).BtnClose.ModalResult := mrOk;
+ TFrame_Profile(FrmFrame).Height := Panel3.Height;
+ TFrame_Profile(FrmFrame).Width := Panel3.Width;
+ TFrame_Profile(FrmFrame).FDataSetPerfilUsuario := FUsercontrol.CurrentUser.PerfilGrupo;
+ TFrame_Profile(FrmFrame).FUsercontrol := FUsercontrol;
+ TFrame_Profile(FrmFrame).DbGridPerf.Columns[0].Title.Caption := FUsercontrol.UserSettings.UsersProfile.ColProfile;
+ with FUsercontrol.UserSettings.UsersProfile, TFrame_Profile(FrmFrame) do
+ begin
+ lbDescricao.Caption := LabelDescription;
+ BtnAddPer.Caption := BtAdd;
+ BtnAltPer.Caption := BtChange;
+ BtnExcPer.Caption := BtDelete;
+ BtnAcePer.Caption := BtRights;
+ BtnClose.Caption := BtClose;
+ end;
+ FrmFrame.Parent := Panel3;
+end;
+
+procedure TFormUserPerf.SpeedUserClick(Sender: TObject);
+begin
+ if FrmFrame is TUCFrame_User then
+ Exit;
+
+ if Assigned(FrmFrame) then
+ FreeAndNil(FrmFrame);
+
+ FrmFrame := TUCFrame_User.Create(Self);
+ TUCFrame_User(FrmFrame).FDataSetCadastroUsuario := FUsercontrol.CurrentUser.PerfilUsuario;
+ TUCFrame_User(FrmFrame).DataUser.DataSet := TUCFrame_User(FrmFrame).FDataSetCadastroUsuario;
+ TUCFrame_User(FrmFrame).DataPerfil.DataSet := FUsercontrol.CurrentUser.PerfilGrupo;
+ TUCFrame_User(FrmFrame).BtnClose.ModalResult := mrOk;
+ TUCFrame_User(FrmFrame).FUsercontrol := FUsercontrol;
+ TUCFrame_User(FrmFrame).Height := Panel3.Height;
+ TUCFrame_User(FrmFrame).Width := Panel3.Width;
+ TUCFrame_User(FrmFrame).SetWindow;
+ lbDescricao.Caption := FUsercontrol.UserSettings.UsersForm.LabelDescription;
+
+ FrmFrame.Parent := Panel3;
+end;
+
+procedure TFormUserPerf.SpeedUserLogClick(Sender: TObject);
+begin
+ if FrmFrame is TUCFrame_UsersLogged then
+ Exit;
+
+ if Assigned(FrmFrame) then
+ FreeAndNil(FrmFrame);
+
+ FrmFrame := TUCFrame_UsersLogged.Create(Self);
+ lbDescricao.Caption := FUsercontrol.UserSettings.UsersLogged.LabelDescricao;
+ TUCFrame_UsersLogged(FrmFrame).FUsercontrol := FUsercontrol;
+ TUCFrame_UsersLogged(FrmFrame).SetWindow;
+ TUCFrame_UsersLogged(FrmFrame).Height := Panel3.Height;
+ TUCFrame_UsersLogged(FrmFrame).Width := Panel3.Width;
+ TUCFrame_UsersLogged(FrmFrame).BtExit.ModalResult := mrOk;
+ FrmFrame.Parent := Panel3;
+end;
+
+procedure TFormUserPerf.SpeedUserMouseEnter(Sender: TObject);
+begin
+ with TSpeedButton(Sender) do
+ begin
+ Font.Style := [fsUnderline];
+ Cursor := crHandPoint;
+ end;
+end;
+
+procedure TFormUserPerf.SpeedUserMouseLeave(Sender: TObject);
+begin
+ with TSpeedButton(Sender) do
+ begin
+ Font.Style := [];
+ Cursor := crDefault;
+ end;
+end;
+
+procedure TFormUserPerf.SpeedLogClick(Sender: TObject);
+begin
+ if FrmFrame is TUCFrame_Log then
+ Exit;
+
+ if Assigned(FrmFrame) then
+ FreeAndNil(FrmFrame);
+
+ FrmFrame := TUCFrame_Log.Create(Self);
+ lbDescricao.Caption := FUsercontrol.UserSettings.Log.LabelDescription;
+ TUCFrame_Log(FrmFrame).FUsercontrol := FUsercontrol;
+ TUCFrame_Log(FrmFrame).SetWindow;
+ TUCFrame_Log(FrmFrame).Height := Panel3.Height;
+ TUCFrame_Log(FrmFrame).Width := Panel3.Width;
+ TUCFrame_Log(FrmFrame).btfecha.ModalResult := mrOk;
+ FrmFrame.Parent := Panel3;
+end;
+
+end.
diff --git a/official/2.31RC1/Source/pUcFrame_UserLogged.dfm b/official/2.31RC1/Source/pUcFrame_UserLogged.dfm
new file mode 100644
index 0000000..7ad72cb
--- /dev/null
+++ b/official/2.31RC1/Source/pUcFrame_UserLogged.dfm
@@ -0,0 +1,222 @@
+object UCFrame_UsersLogged: TUCFrame_UsersLogged
+ Left = 0
+ Top = 0
+ Width = 320
+ Height = 240
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ ParentFont = False
+ TabOrder = 0
+ TabStop = True
+ object DBGrid: TDBGrid
+ Left = 0
+ Top = 0
+ Width = 320
+ Height = 192
+ Align = alClient
+ DataSource = dsDados
+ Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
+ ReadOnly = True
+ TabOrder = 0
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'MS Sans Serif'
+ TitleFont.Style = []
+ Columns = <
+ item
+ Expanded = False
+ FieldName = 'UserName'
+ Title.Alignment = taCenter
+ Title.Caption = 'Nome'
+ Width = 159
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'Login'
+ Title.Alignment = taCenter
+ Width = 123
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'MACHINENAME'
+ Title.Alignment = taCenter
+ Title.Caption = 'Computador'
+ Width = 150
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'DATA'
+ Title.Alignment = taCenter
+ Title.Caption = 'Data'
+ Width = 130
+ Visible = True
+ end>
+ end
+ object Panel3: TPanel
+ Left = 0
+ Top = 192
+ Width = 320
+ Height = 48
+ Align = alBottom
+ BevelOuter = bvNone
+ TabOrder = 1
+ DesignSize = (
+ 320
+ 48)
+ object BtExit: TBitBtn
+ Left = 212
+ Top = 11
+ Width = 95
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Fechar'
+ TabOrder = 2
+ Glyph.Data = {
+ 36060000424D3606000000000000360000002800000020000000100000000100
+ 18000000000000060000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFC066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40198E40198E40198E40
+ 198E40198E4019FF00FF8888886969696969696969696969696969696A6A6A69
+ 69696969696969696A6A6A6969696969696A6A6A696969FF00FFC06614F9F5F4
+ C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2A5C3B2
+ A5C3B2A58E4019FF00FF888888F8F8F8C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6
+ C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6696969FF00FFC06614FCFAFA
+ F9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCDFD0C7DFD0C7DCCB
+ C1C3B2A58E4019FF00FF888888FCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEAEAEAE7
+ E7E7E4E4E4E0E0E0DDDDDDDDDDDDD9D9D9C6C6C6696969FF00FFC06614FFFFFF
+ FCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E2D4CCE2D4CCDFD0
+ C7C3B2A58E4019FF00FF888888FFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EEEEEEEA
+ EAEAE7E7E7E3E3E3E0E0E0E0E0E0DDDDDDC6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E5D9D1E5D9D1E2D4
+ CCC3B2A58E4019FF00FF888888FFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1F1F1EE
+ EEEEEAEAEAE7E7E7E3E3E3E3E3E3E0E0E0C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFCFAFAF9F5F4F5F0EEF2EBE8EEE6E2ECE2DCE9DED7E9DED7E5D9
+ D1C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F5F5F5F1
+ F1F1EEEEEEEAEAEAE7E7E7E7E7E7E3E3E3C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F2EBE8EEE6E2ECE2DCECE2DCE9DE
+ D7C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7
+ F7F7F1F1F1EEEEEEEAEAEAEAEAEAE7E7E7C6C6C6696969FF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF0E9E5F0E9E5EDE4
+ DFC3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB
+ FBFBF7F7F7F3F3F3F0F0F0F0F0F0ECECECC6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F7F7F3F1F4EEEBF4EEEBF0E9
+ E5C3B2A58E4019FF00FF888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
+ FEFEFBFBFBF7F7F7F3F3F3F3F3F3F0F0F0C6C6C66A6A6AFF00FFC06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF8F78A9DE92546CD1D3F
+ C9193BC8183BC88194E1898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFEFEFAFAFAC6C6C6979797929292929292929292C0C0C0C06614FFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD3355DBF2F4FD4E6B
+ D94A67D8F2F4FD183BC8888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFEFEFEA1A1A1FAFAFAAAAAAAA8A8A8F9F9F9929292C066148E4019
+ 8E40198E40198E40198E40198E40198E40198E40198E40193C5CDD8296E4D9DF
+ F9CDD5F74C69D81A3CC88888886969696969696969696A6A6A69696969696969
+ 6969696969696969A5A5A5C1C1C1EDEDEDE7E7E7A8A8A8929292C06614ED9733
+ ED9733ED9733ED9733ED9733ED9733ED9733F6CA9AED97334563E16980E2E4E8
+ FBD8DEF9516DDA1F40C9888888ACACACACACACADADADADADADADADADACACACAD
+ ADADD5D5D5ADADADA8A8A8B6B6B6F2F2F2ECECECABABAB939393F810DCC06614
+ C06614C06614C06614C06614C06614C06614C06614C066144D6AE3F2F4FD667D
+ E26E85E2F2F4FD2749CEEF14EF88888888888888888888888889898988888888
+ 8888888888898989ACACACF9F9F9B5B5B5B9B9B9F9F9F9989898FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF9AABEF4D6AE34563
+ E14463DF3E5EDE8FA2EBFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFCFCFCFACACACA8A8A8A8A8A8A6A6A6C9C9C9}
+ NumGlyphs = 2
+ end
+ object BitMsg: TBitBtn
+ Left = 12
+ Top = 11
+ Width = 95
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Mensagem'
+ TabOrder = 0
+ OnClick = BitMsgClick
+ Glyph.Data = {
+ 42020000424D4202000000000000420000002800000010000000100000000100
+ 1000030000000002000000000000000000000000000000000000007C0000E003
+ 00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CD3001F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7CD300D300
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C9A19D300D300D3003B32
+ D3001F7C1F7CD8520D190D190D190D190D190D1915369A19FE4ABF429D3E5C36
+ 3B32D3001F7CD8521A5F964A964A964A964A964A964A9A191F53DF46BF429D3E
+ 5C365B32D300D852964A3B5F3B5F3B5F3B5F3B5F3B5F9A191F531F53BF429D3E
+ 9D3ED3001F7CD8527C6B964A7D6B7D6B7D6B7D6B7D6B9A199A199A199A19DF46
+ D3001F7C1F7CD8529D739D73964ADF7BDF7BDF7BDF7BDF7BDF7BDF7B9A19D300
+ 964A1F7C1F7CD852DF7BDF7B964A964AFF7FFF7FFF7FFF7F1536964AD3007C6B
+ 0D191F7C1F7CD852FF7F964AB97F977F964A964A964A964A0D7FEA7E964A964A
+ 0D191F7C1F7CD852964ADB7FDB7FB97F977F757F537F517F2F7F0D7FEA7E1536
+ 0D191F7C1F7CD852DB7FDB7FDB7FDB7FB97F977F757F537F517F2F7F0D7FEA7E
+ 0D191F7C1F7C1F7CD852DB7FDB7FDB7FDB7FB97F977F757F537F517F2F7F4E21
+ 1F7C1F7C1F7C1F7C1F7CD856DB7FDB7FDB7FDB7FB97F977F757F537F0D191F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7CD852DB7FDB7FDB7FDB7FB97F977F0D191F7C1F7C
+ 1F7C1F7C1F7C1F7C1F7C1F7C1F7CD852D852D852D852D852D8521F7C1F7C1F7C
+ 1F7C1F7C1F7C}
+ end
+ object BitRefresh: TBitBtn
+ Left = 111
+ Top = 11
+ Width = 95
+ Height = 25
+ Anchors = [akTop, akRight]
+ Caption = '&Atualizar'
+ TabOrder = 1
+ OnClick = BitRefreshClick
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 0800000000000001000000000000000000000001000000010000FF00FF000029
+ 6A00002F790000307B0000317E00003382000035870000399200003A95000040
+ A3000041A5000044AF00004BC000004CC200004DC500004FCA000050CD000052
+ D1000053D4000054D700065AD1000055D9000056DD000058E100005AE600005B
+ E900005CEB00005DEE00005EF0000060F6000669F6000062F9000065FF000268
+ FF00056BFF00066CFF00086EFF000A70FF000C72FF000F75FF001070F2001378
+ FF001479FF00197DFF001E80FF002880EE002585FF002A88FF00328EFF003590
+ FF003D95FF004592ED004596F6004097FF004598FB00469AFF00499DFF0050A0
+ FF0056A4FF005AA6FF005CA7FF0066A3E90066A9F50060AAFF0066ACFF0069AF
+ FF006CB1FF0072B4FF0074B5FF007FBBFF007FBCFF0088B8EE0081BCFF008AC1
+ FF008FC4FF009FCEFF00A3CFFF00ADD5FF00B7DAFF00EAF3FC00EAF4FF00EDF6
+ FF00FFFFFF000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000808060402020202020202010000000C1715110C
+ 0C0C0C0C0C0C0C0A01000015211F1C1B171115111515150F0200001C21211E3E
+ 5252523D1410150C0400001C27244950342D33504710150C0200001C2E2A5238
+ 1F1C1C335211150C0200001C372C523138521F283E15150C0400001C3C2F504C
+ 425252371B1B1B0F0600001C41303F52525252524D1C1B110800001C44322E38
+ 4E52524B2A1F1F1B0A00001C48392F2E465235271F21211B0B00001C49463F3C
+ 37312E2A2721271F0C00001C3F494948443C312C2727212110000000242B2B2B
+ 2A271F1F1F1C1C15000000000000000000000000000000000000}
+ end
+ end
+ object dsDados: TDataSource
+ Left = 132
+ Top = 144
+ end
+end
diff --git a/official/2.31RC1/Source/pUcFrame_UserLogged.pas b/official/2.31RC1/Source/pUcFrame_UserLogged.pas
new file mode 100644
index 0000000..5670b63
--- /dev/null
+++ b/official/2.31RC1/Source/pUcFrame_UserLogged.pas
@@ -0,0 +1,130 @@
+unit pUcFrame_UserLogged;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+{$IFDEF DELPHI5}
+{$ELSE}
+ Variants,
+{$ENDIF}
+ Buttons,
+ Classes,
+ Controls,
+ DB,
+ DBGrids,
+ Dialogs,
+ ExtCtrls,
+ Forms,
+ Graphics,
+ Grids,
+ IncUser_U,
+ Menus,
+ Messages,
+ StdCtrls,
+ SysUtils,
+ UCBase,
+ Windows;
+
+type
+ TUCFrame_UsersLogged = class(TFrame)
+ dsDados: TDataSource;
+ DBGrid: TDBGrid;
+ Panel3: TPanel;
+ BtExit: TBitBtn;
+ BitMsg: TBitBtn;
+ BitRefresh: TBitBtn;
+ procedure BitRefreshClick(Sender: TObject);
+ procedure BitMsgClick(Sender: TObject);
+ private
+ DSUserLogados: TDataset;
+ UCMes: TUCApplicationMessage;
+ public
+ FUserControl: TUserControl;
+ procedure SetWindow;
+ destructor Destroy; override;
+ end;
+
+implementation
+
+uses
+ UCMessages;
+
+{$R *.dfm}
+
+procedure TUCFrame_UsersLogged.SetWindow;
+var
+ SQLStmt: String;
+ I: Integer;
+ Form: TForm;
+begin
+ UCMes := nil;
+ Form := Application.MainForm;
+ for I := 0 to Form.ComponentCount - 1 do
+ if (Form.Components[I] is TUCApplicationMessage) then
+ UCMes := TUCApplicationMessage(Form.Components[I]);
+ BitMsg.Visible := UCMES <> nil;
+
+
+ with FUserControl do
+ begin
+ SQLStmt :=
+ 'SELECT U.' + TableUsers.FieldUserName + ' AS UserName,' +
+ ' U.' + TableUsers.FieldUserId + ' AS id, ' +
+ ' U.' + TableUsers.FieldLogin + ' AS Login,' +
+ ' L.' + TableUsersLogged.FieldMachineName + ' AS MachineName,' +
+ ' L.' + TableUsersLogged.FieldData + ' AS DATA ' +
+ 'FROM ' + TableUsersLogged.TableName + ' L ' +
+ ' INNER JOIN ' + TableUsers.TableName + ' U ON U.' + TableUsers.FieldUserID + ' = L.' + TableUsersLogged.FieldUserID +
+ ' LEFT JOIN ' + TableUsers.TableName + ' P ON P.' + TableUsers.FieldUserID + ' = U.' + TableUsers.FieldProfile + ' ' +
+ 'WHERE L.' + TableUsersLogged.FieldApplicationID + ' = ' + QuotedStr(ApplicationID);
+
+ DSUserLogados := DataConnector.UCGetSQLDataset(SQLStmt);
+
+ with UserSettings.UsersLogged do
+ begin
+ Caption := LabelCaption;
+ BitMsg.Caption := BtnMessage;
+ BitRefresh.Caption := BtnRefresh;
+ BtExit.Caption := BtnClose;
+
+ DBGrid.Columns[0].Title.Caption := ColName;
+ DBGrid.Columns[1].Title.Caption := ColLogin;
+ DBGrid.Columns[2].Title.Caption := ColComputer;
+ DBGrid.Columns[3].Title.Caption := ColData;
+ end;
+
+ end;
+ dsDados.Dataset := DSUserLogados;
+end;
+
+procedure TUCFrame_UsersLogged.BitRefreshClick(Sender: TObject);
+begin
+ try
+ Screen.Cursor := crHourGlass;
+ dsDados.DataSet.Close;
+ dsDados.DataSet.Open;
+ finally
+ Screen.Cursor := crDefault;
+ end;
+end;
+
+destructor TUCFrame_UsersLogged.Destroy;
+begin
+ FreeAndNil(DSUserLogados);
+ FreeAndNil(UCMes);
+ inherited;
+end;
+
+procedure TUCFrame_UsersLogged.BitMsgClick(Sender: TObject);
+var
+ Msg: String;
+begin
+ if Assigned(UcMes) then
+ if InputQuery(fUserControl.UserSettings.UsersLogged.InputText, fUserControl.UserSettings.UsersLogged.InputCaption, Msg) = True then
+ UcMes.SendAppMessage(dsDados.DataSet.FieldValues['id'], fUserControl.UserSettings.UsersLogged.MsgSystem, Msg);
+end;
+
+end.
+
diff --git a/official/2.31RC1/UCHistorico/GHistorico.bdsgroup b/official/2.31RC1/UCHistorico/GHistorico.bdsgroup
new file mode 100644
index 0000000..fbbb0b2
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/GHistorico.bdsgroup
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ pckHistorico.bdsproj
+ pckHistorico.bpl
+
+
+
+
diff --git a/official/2.31RC1/UCHistorico/GHistorico.groupproj b/official/2.31RC1/UCHistorico/GHistorico.groupproj
new file mode 100644
index 0000000..e8e997d
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/GHistorico.groupproj
@@ -0,0 +1,31 @@
+
+
+ {db54d477-5fdc-4df2-8d4f-9ea1d372aaf4}
+
+
+
+
+ Default.Personality
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/official/2.31RC1/UCHistorico/UCHistDataset.pas b/official/2.31RC1/UCHistorico/UCHistDataset.pas
new file mode 100644
index 0000000..46bcd4f
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/UCHistDataset.pas
@@ -0,0 +1,266 @@
+unit UCHistDataset;
+
+interface
+
+ uses SysUtils, Classes, UCHist_Type,UCHist_Base,Forms, Db, UCConsts_Language;
+
+Type
+ TUCHist_DataSet = class(TComponent)
+ private
+ fDataSet: TDataSet;
+ fOnNewRecord ,
+ fOnBeforeDelete ,
+ fOnBeforeEdit ,
+ fOnAfterPost : TDataSetNotifyEvent;
+ fOptions: TUCHistOptions;
+ fControl: TUCControlHistorico;
+ procedure SetDataSet(const Value: TDataSet);
+ procedure SetfControl(const Value: TUCControlHistorico);
+ { Private declarations }
+ protected
+ DataSetInEdit : Boolean;
+ AFields : Array of Variant;
+ procedure NewRecord(DataSet: TDataSet);
+ procedure BeforeDelete(DataSet: TDataSet);
+ procedure BeforeEdit(DataSet: TDataSet);
+ procedure AfterPost(DataSet: TDataSet);
+ procedure AddHistory( AppID , Form , FormCaption, Event , Obs , TableName : String; UserId : Integer );
+ Function GetValueFields : String;
+ procedure Loaded; override;
+ procedure Notification(AComponent: TComponent; AOperation: TOperation);override;
+ { Protected declarations }
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ { Public declarations }
+ published
+ { Published declarations }
+ Property DataSet : TDataSet Read fDataSet Write SetDataSet;
+ Property ControlHistorico : TUCControlHistorico read fControl write SetfControl;
+ end;
+
+implementation
+
+
+procedure TUCHist_DataSet.AddHistory(AppID, Form, FormCaption, Event, Obs,
+ TableName: String; UserId: Integer);
+begin
+ If fControl.Active then
+ fControl.UserControl.DataConnector.UCExecSQL
+ (
+ Format('INSERT INTO %s VALUES( %s, %d , %s , %s , %s , %s ,%s ,%s , %s )',
+ [ fControl.TableHistory.TableName ,
+ QuotedStr(AppID),
+ UserID,
+ QuotedStr( FormatDateTime('dd/mm/yyyy',date) ),
+ QuotedStr( FormatDateTime('hh:mm:ss',time) ),
+ QuotedStr( Form ),
+ QuotedStr( FormCaption ),
+ QuotedStr( Event ),
+ QuotedStr( Obs ) ,
+ QuotedStr( TableName )
+ ]));
+end;
+
+procedure TUCHist_DataSet.AfterPost(DataSet: TDataSet);
+begin
+ If Assigned( fOnAfterPost ) then
+ fOnAfterPost( DataSet );
+
+ If ( ( DataSetInEdit = False ) and ( fControl.Options.SavePostInsert ) ) then // quando inserindo
+ AddHistory(fControl.UserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption ,
+ fControl.HistoryMsg.Evento_Insert,
+ GetValueFields,
+ DataSet.Name,
+ fControl.UserControl.CurrentUser.UserID);
+
+ If ( ( DataSetInEdit = True ) and ( fControl.Options.SavePostEdit ) ) then // quando editando
+ AddHistory(fControl.UserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption ,
+ fControl.HistoryMsg.Evento_Edit,
+ GetValueFields,
+ DataSet.Name,
+ fControl.UserControl.CurrentUser.UserID);
+
+ DataSetInEdit := False;
+ SetLength( AFields , 0 );
+end;
+
+procedure TUCHist_DataSet.Assign(Source: TPersistent);
+begin
+ if Source is TUCHist_DataSet then
+ begin
+ Self.DataSet := TUCHist_DataSet(Source).DataSet;
+ Self.ControlHistorico := TUCHist_DataSet(Source).ControlHistorico;
+ end
+ else
+ inherited;
+end;
+
+procedure TUCHist_DataSet.BeforeDelete(DataSet: TDataSet);
+begin
+ If Assigned( fOnBeforeDelete ) then
+ fOnBeforeDelete( DataSet );
+
+ DataSetInEdit := False;
+ SetLength( AFields , 0 );
+
+ If fControl.Options.SaveDelete then
+ AddHistory(fControl.UserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption ,
+ fControl.HistoryMsg.Evento_Delete,
+ GetValueFields,
+ DataSet.Name,
+ fControl.UserControl.CurrentUser.UserID);
+end;
+
+procedure TUCHist_DataSet.BeforeEdit(DataSet: TDataSet);
+Var I : Integer;
+begin
+ // Antes de Editar
+ If Assigned( fOnBeforeEdit ) then
+ fOnBeforeEdit( DataSet );
+
+ DataSetInEdit := True;
+
+ SetLength( AFields , DataSet.FieldCount );
+ For I := 0 to DataSet.FieldCount - 1 do
+ Begin
+ If DataSet.Fields[ I ].IsBlob = False then
+ AFields[ i ] := DataSet.Fields[ i ].Value
+ else AFields[ I ] := 'Blob';
+ End;
+end;
+
+constructor TUCHist_DataSet.Create(AOwner: TComponent);
+begin
+ inherited;
+ DataSetInEdit := False;
+ fOptions := TUCHistOptions.Create(Self);
+ fDataSet := Nil;
+ fControl := Nil;
+end;
+
+destructor TUCHist_DataSet.Destroy;
+begin
+ FreeAndNil( fOptions );
+ inherited;
+end;
+
+function TUCHist_DataSet.GetValueFields: String;
+Var Aux : Integer;
+begin
+ Result := '';
+ For Aux := 0 to DataSet.FieldCount - 1 do
+ Begin
+ If DataSet.Fields[ Aux ].IsBlob = False then
+ Begin
+ With DataSet.Fields[ Aux ] do
+ Begin
+ If DataSetInEdit = false then // inserindo ou deletando
+ try Result := Result + Format('%-20s = %s ',[ FieldName , AsString ] ) + #13#10; except end
+ else
+ Begin //editando
+ If fControl.Options.TypeSavePostEdit = tpSaveModifiedFields then
+ Begin
+ If Value <> AFields[ Aux ] then
+ try Result := Result + Format('%s||%s||%s',[FieldNAme, AFields[ Aux ] , Value ] ) + #13#10; except end;
+ End
+ else
+ try Result := Result + Format('%s||%s||%s',[FieldNAme, AFields[ Aux ] , Value ] )+ #13#10; except end;
+ End;
+ End;
+ end;
+ End; // for
+end;
+
+procedure TUCHist_DataSet.Loaded;
+begin
+ inherited;
+ if not(csDesigning in ComponentState) then
+ begin
+ if not Assigned( ControlHistorico ) then
+ raise Exception.Create( Format( RetornaLingua( ucPortuguesBr ,'Const_Hist_MsgExceptPropr'),['ControlHistorico']) );
+
+ If fControl.Active = false then exit;
+
+ if not Assigned(DataSet) then
+ raise Exception.Create( Format( RetornaLingua( fControl.UserControl.Language,'Const_Hist_MsgExceptPropr'),['DataSet']) );
+
+ fOnNewRecord := Nil;
+ fOnBeforeDelete := Nil;
+ fOnBeforeEdit := Nil;
+ fOnAfterPost := Nil;
+
+ If Assigned( DataSet.OnNewRecord ) then
+ fOnNewRecord := DataSet.OnNewRecord;
+
+ If Assigned( DataSet.BeforeDelete ) then
+ fOnBeforeDelete := DataSet.BeforeDelete;
+
+ If Assigned( DataSet.AfterPost ) then
+ fOnAfterPost := DataSet.AfterPost;
+
+ If Assigned( DataSet.BeforeEdit ) then
+ fOnBeforeEdit := DataSet.BeforeEdit;
+
+ DataSet.OnNewRecord := NewRecord;
+ DataSet.BeforeDelete := BeforeDelete;
+ DataSet.AfterPost := AfterPost;
+ DataSet.BeforeEdit := BeforeEdit;
+ end;
+end;
+
+procedure TUCHist_DataSet.NewRecord(DataSet: TDataSet);
+begin
+ If Assigned( fOnNewRecord ) then
+ fOnNewRecord( DataSet );
+
+ DataSetInEdit := False; // Inserindo novo registro
+ SetLength( AFields , 0 );
+
+ If fControl.Options.SaveNewRecord then
+ AddHistory( fControl.UserControl.ApplicationID,
+ Screen.ActiveCustomForm.Name ,
+ Screen.ActiveCustomForm.Caption,
+ fControl.HistoryMsg.Evento_NewRecord,
+ Format(RetornaLingua( fControl.UserControl.Language,'Const_Msg_NewRecord'),[fControl.UserControl.CurrentUser.UserName]),
+ DataSet.Name,
+ fControl.UserControl.CurrentUser.UserID);
+end;
+
+procedure TUCHist_DataSet.Notification(AComponent: TComponent;
+ AOperation: TOperation);
+begin
+ if (AOperation = opRemove) then
+ begin
+ If AComponent = fControl then
+ fControl := Nil;
+
+ if AComponent = fDataSet then
+ fDataSet := Nil;
+ end;
+
+ inherited Notification(AComponent, AOperation);
+end;
+
+procedure TUCHist_DataSet.SetDataSet(const Value: TDataSet);
+begin
+ fDataSet := Value;
+ if Assigned(Value) then
+ Value.FreeNotification(Self);
+end;
+
+procedure TUCHist_DataSet.SetfControl(const Value: TUCControlHistorico);
+begin
+ fControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(self);
+end;
+
+end.
diff --git a/official/2.31RC1/UCHistorico/UCHist_Base.pas b/official/2.31RC1/UCHistorico/UCHist_Base.pas
new file mode 100644
index 0000000..495ca03
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/UCHist_Base.pas
@@ -0,0 +1,206 @@
+unit UCHist_Base;
+
+interface
+
+uses
+ SysUtils,
+ Classes,Forms,
+ UCConsts_Language,
+ UCHist_Type,
+ UCBase;
+
+
+type
+ TUCControlHistorico = class(TComponent)
+ private
+ fUserControl: TUserControl;
+ fActive: Boolean;
+ fOptions: TUCHistOptions;
+ fTableHistory: TUCTableHistorico;
+ fUsersHistory: TUCUserHistory;
+ fHistoryMsg: TUCHistoryMSG;
+ procedure SetfUserControl(const Value: TUserControl);
+ { Private declarations }
+ protected
+ FrmHistorico : TCustomForm;
+ procedure Loaded; override;
+ procedure IniSettings( Language : TUCLanguage );
+ procedure ActionUserHistory(Sender: TObject);
+ { Protected declarations }
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ { Public declarations }
+ published
+ property Active : Boolean read fActive write fActive default True;
+ property UserControl : TUserControl read fUserControl Write SetfUserControl;
+ Property Options : TUCHistOptions read fOptions write fOptions;
+ property TableHistory : TUCTableHistorico read fTableHistory write fTableHistory;
+ property UsersHistory : TUCUserHistory read fUsersHistory write fUsersHistory;
+ property HistoryMsg : TUCHistoryMSG read fHistoryMsg Write fHistoryMsg;
+ { Published declarations }
+ end;
+
+procedure Register;
+
+implementation
+
+uses UCHistDataset,UCHist_Form;
+
+{$R UcHistReg.dcr}
+
+procedure Register;
+begin
+ RegisterComponents('UC Historico',
+ [TUCHist_DataSet,
+ TUCControlHistorico]);
+end;
+
+{ TUCControlHistorico }
+
+procedure TUCControlHistorico.Assign(Source: TPersistent);
+begin
+ if Source is TUCHist_DataSet then
+ begin
+ TUCHistOptions(Source).Assign(Options);
+ TUCTableHistorico(Source).Assign(TableHistory);
+ TUCUserHistory(Source).Assign(UsersHistory);
+ TUCHistoryMSG(Source).Assign(HistoryMSG);
+ end
+ else
+ inherited
+end;
+
+constructor TUCControlHistorico.Create(AOwner: TComponent);
+begin
+ inherited;
+ fUserControl := Nil;
+ Active := True;
+ fOptions := TUCHistOptions.Create(Self);
+ fTableHistory := TUCTableHistorico.Create(Self);
+ fUsersHistory := TUCUserHistory.Create(Self);
+ fHistoryMSG := TUCHistoryMSG.Create(Self);
+ if csDesigning in ComponentState then
+ IniSettings( ucPortuguesBr );
+end;
+
+destructor TUCControlHistorico.Destroy;
+begin
+ fUserControl := Nil;
+ FreeAndNil(fOptions);
+ FreeAndNil(fTableHistory);
+ FreeAndNil(fUsersHistory);
+ FreeAndNil(fHistoryMSG);
+ inherited;
+end;
+
+procedure TUCControlHistorico.Loaded;
+begin
+ inherited;
+ if not(csDesigning in ComponentState) then
+ begin
+ if not Assigned( fUserControl ) then
+ raise Exception.Create( Format( RetornaLingua( ucPortuguesBr ,'Const_Hist_MsgExceptPropr'),['UserControl']) );
+
+ IniSettings( fUserControl.Language );
+ If Active then
+ If not fUserControl.DataConnector.UCFindTable( TableHistory.TableName ) then
+ fUserControl.DataConnector.UCExecSQL(
+ Format('CREATE TABLE %s ( %s %s(250), %s %s , %s %s(10), %s %s(8), %s %s(250), %s %s(100), %s %s(50) , %s %s, %s %s(50) ) ',
+ [ TableHistory.TableName,
+ TableHistory.FieldApplicationID,
+ fUserControl.UserSettings.Type_VarChar,
+
+ TableHistory.FieldUserID,
+ fUserControl.UserSettings.Type_Int,
+
+ TableHistory.FieldEventDate,
+ fUserControl.UserSettings.Type_Char,
+
+ TableHistory.FieldEventTime,
+ fUserControl.UserSettings.Type_Char,
+
+ TableHistory.FieldForm,
+ fUserControl.UserSettings.Type_VarChar,
+
+ TableHistory.FieldCaptionForm,
+ fUserControl.UserSettings.Type_VarChar,
+
+ TableHistory.FieldEvent,
+ fUserControl.UserSettings.Type_VarChar,
+
+ TableHistory.FieldObs,
+ fUserControl.UserSettings.Type_Memo,
+
+ TableHistory.FieldTableName,
+ fUserControl.UserSettings.Type_VarChar]));
+
+
+ if Assigned(fUsersHistory.MenuItem) and (not Assigned(fUsersHistory.MenuItem.OnClick)) then
+ fUsersHistory.MenuItem.OnClick := ActionUserHistory;
+
+ if Assigned(fUsersHistory.Action) and (not Assigned(fUsersHistory.Action.OnExecute)) then
+ fUsersHistory.Action.OnExecute := ActionUserHistory;
+ end;
+end;
+
+procedure TUCControlHistorico.SetfUserControl(const Value: TUserControl);
+begin
+ FUserControl := Value;
+ if Value <> nil then
+ Value.FreeNotification(self.UserControl);
+end;
+
+procedure TUCControlHistorico.IniSettings( Language : TUCLanguage );
+Begin
+ With HistoryMsg do
+ Begin
+ Evento_Insert := RetornaLingua( Language ,'Const_Evento_Insert');
+ Evento_Delete := RetornaLingua( Language ,'Const_Evento_Delete');
+ Evento_Edit := RetornaLingua( Language ,'Const_Evento_Edit');
+ Evento_NewRecord := RetornaLingua( Language ,'Const_Evento_NewRecord');
+ Hist_All := RetornaLingua( Language ,'Const_Hist_All');
+ Msg_LimpHistorico := RetornaLingua( Language ,'Const_Msg_LimpHistorico');
+ Msg_MensConfirma := RetornaLingua( Language ,'Const_Msg_MensConfirma');
+ Msg_LogEmptyHistory := RetornaLingua( Language ,'Const_Msg_LogEmptyHistory');
+ LabelDescricao := RetornaLingua( Language ,'Const_LabelDescricao');
+ LabelUser := RetornaLingua( Language ,'Const_LabelUser');
+ LabelForm := RetornaLingua( Language ,'Const_LabelForm');
+ LabelEvento := RetornaLingua( Language ,'const_LabelEvento');
+ LabelTabela := RetornaLingua( Language ,'const_LabelTabela');
+ LabelDataEvento := RetornaLingua( Language ,'const_LabelDataEvento');
+ LabelHoraEvento := RetornaLingua( Language ,'const_LabelHoraEvento');
+ Msg_NewRecord := RetornaLingua( Language ,'const_Msg_NewRecord');
+ Hist_MsgExceptPropr := RetornaLingua( Language ,'Const_Hist_MsgExceptPropr');
+ Hist_BtnFiltro := RetornaLingua( Language ,'const_Hist_BtnFiltro');
+ Hist_BtnExcluir := RetornaLingua( Language ,'const_Hist_BtnExcluir');
+ Hist_BtnFechar := RetornaLingua( Language ,'const_Hist_BtnFechar');
+ End;
+
+ With TableHistory do
+ Begin
+ TableName := RetornaLingua(Language,'Const_Hist_TableName');
+ FieldApplicationID := RetornaLingua(Language,'Const_Hist_FieldApplicationID');
+ FieldUserID := RetornaLingua(Language,'Const_Hist_FieldUserID');
+ FieldEventDate := RetornaLingua(Language,'Const_Hist_FieldEventDate');
+ FieldEventTime := RetornaLingua(Language,'Const_Hist_FieldEventTime');
+ FieldForm := RetornaLingua(Language,'Const_Hist_FieldForm');
+ FieldCaptionForm := RetornaLingua(Language,'Const_Hist_FieldCaptionForm');
+ FieldEvent := RetornaLingua(Language,'Const_Hist_FieldEvent');
+ FieldObs := RetornaLingua(Language,'Const_Hist_FieldObs');
+ FieldTableName := RetornaLingua(Language,'Const_Hist_FieldTableName');
+ End;
+End;
+
+procedure TUCControlHistorico.ActionUserHistory(Sender:TObject);
+Begin
+ FrmHistorico := TFrmHistorico.Create(Self);
+ TFrmHistorico(FrmHistorico).fControl := Self;
+ TFrmHistorico(FrmHistorico).Position := fUserControl.UserSettings.WindowsPosition;
+ FrmHistorico.ShowModal;
+ FreeAndNil(FrmHistorico);
+End;
+
+
+end.
diff --git a/official/2.31RC1/UCHistorico/UCHist_Form.dfm b/official/2.31RC1/UCHistorico/UCHist_Form.dfm
new file mode 100644
index 0000000..90cf87e
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/UCHist_Form.dfm
@@ -0,0 +1,1311 @@
+object FrmHistorico: TFrmHistorico
+ Left = 99
+ Top = 127
+ BorderStyle = bsDialog
+ Caption = 'Historico de Tabelas'
+ ClientHeight = 453
+ ClientWidth = 813
+ Color = clBtnFace
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ OldCreateOrder = False
+ OnClose = FormClose
+ OnShow = FormShow
+ PixelsPerInch = 96
+ TextHeight = 13
+ object Panel1: TPanel
+ Left = 0
+ Top = 0
+ Width = 813
+ Height = 49
+ Align = alTop
+ Color = clWhite
+ TabOrder = 0
+ object Image1: TImage
+ Left = 1
+ Top = 1
+ Width = 48
+ Height = 47
+ Align = alLeft
+ Center = True
+ Picture.Data = {
+ 055449636F6E000001000C00101010000100040028010000C600000018181000
+ 01000400E8010000EE0100002020100001000400E8020000D603000030301000
+ 0100040068060000BE060000101000000100080068050000260D000018180000
+ 01000800C80600008E1200002020000001000800A80800005619000030300000
+ 01000800A80E0000FE210000101000000100200068040000A630000018180000
+ 01002000880900000E3500002020000001002000A8100000963E000030300000
+ 01002000A82500003E4F00002800000010000000200000000100040000000000
+ 8000000000000000000000000000000000000000000000000000800000800000
+ 0080800080000000800080008080000080808000C0C0C0000000FF0000FF0000
+ 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000780000000000000067E76
+ 00000000000C8E8E8E77000000068E87E8E77000000687E887E8E7000007E7C8
+ E88E8C00000788E87C87E000000E8888F8E8700000088E88FF8880000008E8CF
+ 6E888000000888E8F88E800000088FFFFFFFF7000008B3B7B888F700000B89BB
+ 9BBBB70000078B77B7B9B7000000000007787000E7FF0000E0FF0000E00F0000
+ E0070000E0030000E0030000E0070000E0070000E0070000E0070000E0070000
+ E0030000E0030000E0030000E0030000FF870000280000001800000030000000
+ 0100040000000000200100000000000000000000000000000000000000000000
+ 00008000008000000080800080000000800080008080000080808000C0C0C000
+ 0000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000800
+ 000000000000000000006C86C8000000000000000000C768E8EC700000000000
+ 0000668E8E8E8EC7E00000000000C7E8E7E8E8E87C00000000006C888E87E8E8
+ E86000000000C8EE88E88C8E8E8E70000000678C6778E8E8E8E7EC000000CE86
+ 8ECF88888878C0000000688EF7E86E7E8E8C00000000C888686888C646800000
+ 000068888F8F8FFF888E00000000C88E68EF8F88F88700000000E88E787FFF8F
+ 88FC00000000C88EFE6F66E7E8F60000000068F7887F8886768E00000000CFF8
+ 88EFFFFFFFF700000000E88FFFFFFFFFFFF80000000078B3B38B88FFFFF80000
+ 000078B9B9B9BB3B3B88700000007B8BBBBB9BBBBBBBC000000078888988B8B9
+ B9BB7000000065717773573777776000000000000000000000000000FBFFFF00
+ F03FFF00F007FF00F0007F00F0003F00F0001F00F0000700F0000300F0000700
+ F0000F00F0001F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00
+ F0000F00F0000F00F0000700F0000700F0000700F0000700FFFFFF0028000000
+ 2000000040000000010004000000000000020000000000000000000000000000
+ 0000000000000000000080000080000000808000800000008000800080800000
+ 80808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000
+ FFFFFF00000000000000000000000000000000000000006C7670000000000000
+ 00000000000007C8E8CEC7E000000000000000000000076678E8E8C767000000
+ 0000000000000EC7CE8E8E8E8EC6C80000000000000007C78E87E8E8E8E8E7C6
+ 00000000000006C68E8E8C8E78E8E8E7C0000000000008C788E88E8E8E78E8E8
+ E7000000000006CE8E87E888E8E7E8C8E7C80000000007E78CE7CE8E888E8E8E
+ 8E8C800000000C68868686888E8888E8E8EEC000000008CE86E8E788888E8E88
+ 8E5C0000000006C88E887CE86CE8888E8C8000000000086887C88E88E7646C68
+ 8600000000000CE8FFFE8688F8888E7C8C000000000007C8FE8F8F8F8F888888
+ E700000000000E6887E67E8FF8F8FF8F8E000000000007CFFE8CF888F8F8F888
+ F600000000000E788688E7EF8EF88FF8FE00000000000CE8FE8F8C8F666E67E8
+ 88700000000007CF8788FE7F888C8666C8E00000000006EFF8E867EFFFFFF88F
+ F8C0000000000C88FFFFFFFFFFFFFFFFFF700000000006888FFFFFFFFFFFFFFF
+ FF60000000000CB8B39B7B8888F8FFFFFF60000000000688B9BB9B9BBB3B8888
+ 8F800000000007B8BB9BBBB9B9BBBBBBBB78000000000CB888B9B9BBBBB9B9BB
+ 9B760000000006888B888B8B98BBBBBBBB37000000000773797B79B7B9898989
+ B786000000000077777C8C7C7C76767775780000000000000000000000000000
+ 00000000FFFFFFFFFC1FFFFFF801FFFFF8003FFFF80003FFF80000FFF800007F
+ F800003FF800000FF8000007F8000007F800000FF800001FF800003FF800003F
+ F800003FF800003FF800003FF800003FF800001FF800001FF800001FF800001F
+ F800001FF800001FF800001FF800000FF800000FF800000FF800000FFC00000F
+ FFFFFFFF28000000300000006000000001000400000000008004000000000000
+ 0000000000000000000000000000000000008000008000000080800080000000
+ 800080008080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000
+ FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000
+ 000000000000000008C668000000000000000000000000000000000000000000
+ 06C7C6C6C0000000000000000000000000000000000000007C688E867C6C7800
+ 00000000000000000000000000000000C6CE778E8E8EC6C67000000000000000
+ 00000000000000006C7767E8E8E8E8ECEC6C8000000000000000000000000000
+ C66C8E8C8E7E8E88E8EC6C670000000000000000000000006C6868E8E8E8C8E8
+ E78E8ECEC6C800000000000000000000C6C7C8E8E8C8E8E78E8E88E8766C6000
+ 00000000000000006C68E8E87E8E8E8E7E78E78E877C60000000000000000000
+ 6C67888E88E8E8E8E8E7E8E7EE8EC6000000000000000000C6C8E8E8E88E878E
+ 77E8E7E878E8EC6800000000000000006CE788888E88E8E88E878E8E7E8E88EC
+ 6000000000000000C6778EC6E88E888E88E8E8C8E8C8E8E8C600000000000000
+ 6CE88E68C6C67E88E88E88E8E8E8E77E8C60000000000000C6C887C86E88C888
+ 8E88E88E88E88E8E8EC80000000000006CE88E6E7C8E68E888888E88E88E8E87
+ EC670000000000006C7888678E686888E8E888E88E88E8EC6700000000000000
+ CE688ECFFF86C88E677E8888888E88C780000000000000006C78F86F888E6888
+ C6C66CE7E8888EC00000000000000000CECF8E66E6886E888E766646466E87C0
+ 00000000000000006C7FFFF888C6C88F8F8888E76C658E600000000000000000
+ 6E6FF8FF8FFF88888F8F8888888E87C00000000000000000CC7FFE7E88F8FF8F
+ 8888F8F8F888886000000000000000006ECFF86766E6E8F8FF8F888F88888EC0
+ 0000000000000000C68FFECF8888C88F8F8F8F888F8FF8600000000000000000
+ 6CEFF8786C8FE8FF8F8F8F8F88F88FC80000000000000000CE7FFE6E8E6F7EFF
+ FFF8FF8FF88F8F6800000000000000006C8FF8C7FF7E76FF666E888F8FF8F8EC
+ 0000000000000000CE7FF8EFFFF6C8FF6C66C666668E8F670000000000000008
+ 6CEFF7EFFFFF6E8F88E766C66C666F8C0000000000000008CE8FF8C668E88C8F
+ FFFFFF888E7C688C0000000000000008C68FF8F88E7C6EFFFFFFFFFFFFFFFF86
+ 0000000000000008CE88FFFFFFFFFFFFFFFFFFFFFFFFFF8C0000000000000008
+ C68FFFFFFFFFFFFFFFFFFFFFFFFFFFF68000000000000008CE7F888FFFFFFFFF
+ FFFFFFFFFFFFFFFCE0000000000000086388B9B3373888FFFFFFFFFFFFFFFFF6
+ 7000000000000008CBBFB3B9BB9BB9B3378788FFFFFFFFF8C000000000000008
+ CB88B9BB9BB9BB9BBBBBBB33B78788F8C000000000000008CBBF8B9BB9BB9BBB
+ 9B9B9BBBBBBBBB376000000000000008CB888B9B9BB9BB9BBBBBB9B9B9BBBBBB
+ C000000000000008CBB888BBB9BBB9BB9B9BBBBBBBB9BB9B6800000000000008
+ 698F8F8F8F88B8BBB9BB9B9BB9BBBBBB6C00000000000008CBB9B37B8B7B8888
+ 8F888B8BBBBB9BBB7600000000000000C7777797939799B939B9B9B79898B798
+ 7C000000000000006C6C46C6C6C66C6C66C6674767775776C700000000000000
+ 00000000000000888888C8C8C7C66C6800000000000000000000000000000000
+ 000000000000000000000000FFFFFFFFFFFF0000FF83FFFFFFFF0000FF807FFF
+ FFFF0000FF0003FFFFFF0000FF00007FFFFF0000FF000007FFFF0000FF000000
+ FFFF0000FF0000000FFF0000FF00000007FF0000FF00000007FF0000FF000000
+ 03FF0000FF00000000FF0000FF000000007F0000FF000000003F0000FF000000
+ 001F0000FF000000000F0000FF000000000F0000FF000000003F0000FF000000
+ 007F0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000
+ 01FF0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000
+ 00FF0000FF00000000FF0000FF00000000FF0000FF00000000FF0000FE000000
+ 00FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000
+ 007F0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000
+ 007F0000FE000000007F0000FE000000007F0000FE000000003F0000FE000000
+ 003F0000FE000000003F0000FF000000003F0000FF000000003F0000FFFFFC00
+ 00FF0000FFFFFFFFFFFF00002800000010000000200000000100080000000000
+ 000100000000000000000000000100000001000000000000B45D2800B6612900
+ BB672D00C67436009B7E6E0079897500B0812F00B4853600D4823E00DC873B00
+ E08B3700E7983F00A08F6F00BD896800A5877600AD8A7600BF8F7000B4927D00
+ BE977E00D2864600C59C4E00CA9E4D00CC895100CC895600C99E5500DB945600
+ E89D4100E39D5E00CBA24F00CCA25100C6A15900DAAD5900EAA54A00E6AA5300
+ E8A45B00E3AD5B00FBBF5900CB8D6300C09E6500CA9E6500CEAA6100CAA66B00
+ D6AF6400D5B57100D5B57700DBBA7700D1B37C00E3A26500E6B86500E1B86900
+ E9AC7100E8AF7D00E3BB7500EFB67B00F2BA7F00FCC15A00FFC75F00FFC76000
+ FFC86200FFC96400FFCA6900FFCB6C00FFCC6F00FFCD7200FFCF7600FBCD7B00
+ FFD07900089DEE000B9DF20004A7FF0000ADFF0000B4FF0000BBFF001FBFF800
+ 28ACEF0038AFF3002DB2F40029BAF7004E96CC005FA9DF0070A2CD0073ADDC00
+ 4ABAEF0045ADF1004CBCFF0000C2FF0000CAFF0016C6F90000D1FB0000D1FF00
+ 67CFF5006CC8F10066CFFF00D0B68600DEBF9A00DEC28400DFC38800DDC49900
+ E6C78D00FFD38100FFD48400FFD78E00E7C09100E1C49100E1C89100E7C89000
+ E2C89700EBC29D00F9D79700FFDB9700E1CDAA00E8D4A600E5D2AA00E8D5AC00
+ EFDBB400EBDAB800ECD9B900F9E4BD008BD4F300B1DFF400EEE2CC00F2E3C400
+ F8E6C400F7E8CB00FFEDCD00FFF0D500FFF2DB00CFE6F400FFF4E000E2EEF700
+ FDF9F300F2F7FA00FFFDFA00FFFEFD0000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000261300000000000000
+ 000000000000000328210B1700000000000000000000000124393939251B090E
+ 000000000000000242403D3B39393922170000000000000432203164403D3B3B
+ 390A0000000000142B1E166D6E6664433D0C00000000001A2E63156A07081935
+ 23000000000000307C736A7B7D76682A1C00000000000033611E2F7B81817E7E
+ 3400000000000036607229741F2F62746C00000000000037706A2C72796F5E27
+ 5F000000000000688286868686868686831300000000005B45444B535B777880
+ 840E00000000005D5546474849565759590D00000000004F515250544C4D4E4A
+ 5806000000000000000000000012100F05000000E7FF0000E0FF0000E00F0000
+ E0070000E0030000E0030000E0070000E0070000E0070000E0070000E0070000
+ E0030000E0030000E0030000E0030000FF870000280000001800000030000000
+ 0100080000000000400200000000000000000000000100000001000000000000
+ 7A5E55005F6374006B61660066766F0062637000895302009C660A009C6A1600
+ A9730B0093583900B05F2D00BA662B00BE6A2E00A1702300A56B3B00AE683B00
+ AF6B3D00B26D3E00A8783000C24B0100C44E0200C7520300CA560500CC590600
+ CF5C0700D15F0800D3610900D5630A00D6660B00D8680C00D96E1100D5721D00
+ C86D2900CC6D2B00D3702100D6762200D97F2C00CF743700C87E3F00D0713000
+ D0753A00D2793C00C07E4B00D17A4200D37C4100D47E4400D47F4900B4801A00
+ B2832C00B5852C00B9882B00AD813500B3843300BF913300C3953500C0943900
+ C89A3800E4903400E8973A00BA904A00BD954C00B4845A00BE995800CB8A4B00
+ C4974400C59A4200C79C4E00C99B4800C98B5600D98D5D00C89F5000CE985600
+ CA9F5600D5985000CFA34F00CBA45600CCA65B00D2AA5300D6A85000D1AC5D00
+ D9AD5C00ECA24400EFAA4A00F2AC4A00F6BA5800F6BA5F00D9916200DC966900
+ D59D6A00C4937400C5967800DD9B7100C8A76C00D3AC6200D1AB6400D5B16100
+ D4B06A00D2B06D00DBB46C00C7A87500CDAE7700D7A27200D2B07000D4B27500
+ DDBA7700ECB86600E1BB7600F0BA7B00F8C15F00FDC35C00FFC75F00F7C36300
+ FAC36000FFC76000FFC86100FFC96500FFCA6900FFCC6E00EDC27100FFCD7200
+ FFCE7600FFD07A00FFD17E004C6A8C0062758000627E80006378900062878000
+ 72828600578AB0006085A7000091E700099AEF001498E50000B3EF0000A5FF00
+ 00AAFF0000AFFF001CABFF0000BCF70000B0FF0000B4FF0000B9FF0000BEFF00
+ 34A5E60020BEF00029B1FF0057B3E80077BEE90066B8F4007FBFF30000C1FE00
+ 00C7FF0001CCFF0019CCFF0005D7F90000D0FF0000D5FF0029CCFF003CCDFF00
+ 43CAF2004CCEFF0059CBFD0062C7FB0076C3F70079CCFB007FCEFF0063D3F200
+ D7BC8F00E2AC8800E3B68B00E4BA9100DCC28A00DCC59A00E9C68300E5C48900
+ F1CA8200FBCE8500FFD28100FDD38400FFD48600FFD58900FFD68C00E2C49000
+ E9CB9000E8C19A00E3CD9F00EACF9B00F4C99400EBD09F00FBD79500FFD89100
+ FFD99400FFDB9800FFDD9E00E5CEA000EAC6AD00E5D0A100ECD6AA00FDDDA100
+ F1D0AD00E6D3B100EDDAB400EBDBB800ECDDBA00EEDEBC00F3D2B000F8DAB000
+ EFE0BE00F9E2B70088C3CC0097C8EA008CC7F50092CDF70099DDFF00BBD6EE00
+ 99E0FA0099E2FF00D6D5CE00EBDDC200F7E7C700FBE0C100FFEAC500FFECC900
+ F9EACE00FFEDCD00F4EBD700F8EBD100FFEFD100F9EDD600FFF0D500FFF1D900
+ FFF2DD00FFF4DF00CFE2F300DBE9F600FFF4E100FFF6E600FAF4E900FFF7E900
+ FFF8EB00EFF5FB00FFFAF200FEFBF600FFFCF600FFFCF900FFFEFD0000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 005C000000000000000000000000000000000000000000002F274021295B0000
+ 0000000000000000000000000000000014113E7071533A202A00000000000000
+ 00000000000000001411486F6F6F6F6F6F522521460000000000000000000000
+ 14106A74746F6F6F6F6F6F714A0C000000000000000000001412B47B79767671
+ 746F6F6F6F5524000000000000000000162BB14F77B47B7B7676746F6F6F6F3B
+ 2E000000000000001645AF4B334451B7B67B7B797674746F542A000000000000
+ 1859B9305E6341C8C3C2C2B4B47B795524000000000000001866BC69DF5E43B0
+ 0735476BC2C2B22800000000000000001AABDD614C4732DFBE683C0E06136C00
+ 00000000000000001AACE4C7E1E9E1E7E4E1E1DFD2B0BD5A0000000000000000
+ 1ABACB50424D61EDE9E9E7E5E1E1D05700000000000000001EC9CD3937C468F1
+ F1EEEDE9E9E7E72E00000000000000001ACFCD60F66138F309323C5DA9CAE426
+ 00000000000000001FC9D14FC6CD36EFDCAE653F3408642E0000000000000000
+ 1FDEF3E3CDBBADF6F6F6F6F6F3F3F35700000000000000001FDBEBF2F6F6F6F6
+ F6F6F6F6F6F6F6AA000000000000000004D9858486919495D4D8ECF6F6F6F6C5
+ 000000000000000080D993888A8D8D909898908792A1A8D35800000000000000
+ 7ED7A78B888A8A8D90909899999E9E9C2E000000000000007D9697D5D6A5A7A4
+ A3A2A09F9B999E9E0F000000000000000B0A0A010101030505027C7F7F838281
+ 0D000000000000000000000000000000000000000000000000000000FBFFFF00
+ F03FFF00F007FF00F0007F00F0003F00F0001F00F0000700F0000300F0000700
+ F0000F00F0001F00F0000F00F0000F00F0000F00F0000F00F0000F00F0000F00
+ F0000F00F0000F00F0000700F0000700F0000700F0000700FFFFFF0028000000
+ 2000000040000000010008000000000000040000000000000000000000010000
+ 0001000000000000935D0600BC4F0E00BC500E0097620B009B6609009C6A1900
+ A9730A00A06E1A00A8741000AD7A1C00965D3F00AE5F2300BE632500A5762C00
+ AB7D2D00A9633A00BA6C3600A6773100C1530C00C0551000C55B1100C85F1300
+ CC641500CF681600CE661B00CF691F00D16C1B00D5701A00D9751B00DE7C1F00
+ C7672600CA652300C76B2600CD6A2500CC6B2C00D16F2A00D5762300D9792300
+ D0712F00CE6E3000C57E3D00C97E3C00D1733500D0743900825C4C008D614D00
+ AC6C4200B1724600AB775500B07E5600B97A5200D27A4100AE802B00B8862200
+ BB8B2700B4842D00BD8C2900B3863500BD8D3100B2883B00BB8D3800DC832D00
+ C08F3400C3933300C3953800C79B3B00E2862C00E78A2D00EA8D2E00E18C3600
+ EE933400E8983A00F49C3F00CCA03E00B88D4500B58D4B00BC954E00B3836400
+ BD947900DF8D4000C0954500C69A4500CC9E4A00DA914200D5994F00C0845300
+ C18A5400CA855900D4865400D6885400DA8E5700D68D5E00C49C5500CBA04400
+ CAA04D00D0A54600CDA55300CCA15900D7A95500D8A25B00D0AC5F00DFA95900
+ E7A64E00F0A84700F2AE4B00F5B55200F7BB5900F8BD5B00CD8D6300C48F6D00
+ CA936000C19E6000DA926400DC966800D19D6D00C99A7B00DF9F7600CEAA6100
+ CAAA6D00D3AD6500D1A56B00D5AE6900D5B36A00C8A77500DFA37500D2AF7400
+ DCAD7E00DBB47000D5B77A00D7B97E00DCB97900E0AD6000E3B76600EABE6D00
+ F7C05D00FEC65E00FFC76000FFC86400FFCB6B00F1C17200FFCD7300F4C97A00
+ FFD07B003C78B000517398004578A200628B80004284BF0043AAA8000389DD00
+ 2093DD002BB6C50029A8DD00008BE2000894E9002C9CEA003498E70000A9FC00
+ 16A7FE0001B6FD0036ABEF002FB8EE003DBDEE0022B6F9003ABAF300488CC700
+ 4DAAC00040A2E00055BBE90041B7FF0052BEFF0063B4E70001C9FD0017C9FF00
+ 00D3FF0023C7FE0035C5FE004FC4FC0071C4EB0060C7FC0079CAFA00D1B58500
+ DCB18600DCBD8300D6BB8900DEC28800DEC59200EAC58100EFCE8F00F6C88500
+ F2CB8D00FED38300F6D28D00FED58A00E4CB9400E7C39E00E4CB9A00EACE9D00
+ EED09900FAD79500FFD99400F0D29800FFDC9A00EBC2A100E1CAA200E0CEAF00
+ EDCDAC00ECD1A000E6D2AC00EBD6AC00F0D5A100F8D5A300FDDDA000F3DAAC00
+ EDCFB100EAD7B800F5DABA00F3E0B900FBE5BD0089C7EB0083C7F70099CDF700
+ 9ED7FC00A2D1EF00B4D3EC00AAD8F900B8DAF100AAE3FD00D5DCDF00EEDFC000
+ F5DDC500EFE0C300F3E3C300FEEAC400F4E4CB00F9E5CF00F3E8CF00FEECCB00
+ EFE5D100F4EAD400FDEED200FEEDD900FEF0D500FEF2DB00CAE0F200D6E6F400
+ F6EEE300FFF4E200F9F4E900FFF9EE00E7F1F900FEFDFB000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000002021232B4E0000000000000000000000000000000000
+ 0000000000000000006E13577C79542519277100000000000000000000000000
+ 00000000000000000034022F328489896A684826233400000000000000000000
+ 00000000000000000034022F578788888888888888693E1B235A000000000000
+ 00000000000000000034022F64898888888888888888886C672A0D1F00000000
+ 00000000000000000034032F8C8D8B8B8A89888888888888888866292C000000
+ 000000000000000000341430C0C08F8F8B8B8B8A888888888888886B43270000
+ 000000000000000000341556C185868EC0C08F8F8B8B8A8A8A8888888A691B72
+ 00000000000000000034166FBF37533F4163C2C0C08F8F8D8B8A8A88888A6A25
+ 6D0000000000000000341773CA3F533BBC38C8CBC8C2C2C28F8F8F8D8A8A8869
+ 22000000000000000034187FD3366180613BBDD5D5D5C8C2C2C2C08F8F8F4619
+ 000000000000000000341BB7D652EAEA7A0AC78305386283BCC1CBC2C2465800
+ 000000000000000000341CC4DA3F5378B838B8D65D350401080E4B7BBE220000
+ 000000000000000000341DCFF8F8DAC5784BC7EEEEEADBC77E4B0E12BF190000
+ 000000000000000000341DD7F0C5D2EEF8F3F3F3F0F3EEEEEAEAD6C7D4240000
+ 000000000000000000341ED8EB426537525DD2F8F8F3F8F3F3EEEEEEDA2B0000
+ 0000000000000000003443E7EB61BA39E8B8C5F8F8F8F8F3F8F3F3F3EE340000
+ 0000000000000000003444E7EC4060C55F82B9FACDD1E8ECF8F4F8F8F35B0000
+ 0000000000000000002C44EBEC4AF0FCBB3782FA070935384B70B9CDEC7D4F00
+ 0000000000000000002344EBF060D8E6EC7B76FAD8B9774D3C3506044CC43300
+ 0000000000000000002347EBFAC37B7B614178FAFCFCFAFCF7EFD8CED8E63400
+ 0000000000000000002349F2FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFAF92800
+ 0000000000000000002355E5E3F6FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC2800
+ 0000000000000000002399E49B9A9697A8ACDCE0E3F5F6FBFCFCFCFCFCFC3400
+ 00000000000000000023B0E4A49E9E9E9EA09E9EA0A2A2A3A9B3DCE1F6FC6D00
+ 00000000000000000023B0E4AB9E9E9E9EA0A0A0A0A0ADADADADAFAFAFAD9375
+ 00000000000000000023A4E4DFAA9F9E9E9E9EA0A0ADA0ADADADAFAFAFAF9559
+ 000000000000000000239FDDDEDEE2DFDDB5B4B2B1B1B1B0B0AEADADAFAF9811
+ 0000000000000000002492919190949494A69D9D9D9D9D9CA1A1A1A3A3A4A70C
+ 0000000000000000000031313131343434342C23242311101010102E2D0B2874
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000FFFFFFFFFC1FFFFFF801FFFFF8003FFFF80003FFF80000FFF800007F
+ F800003FF800000FF8000007F8000007F800000FF800001FF800003FF800003F
+ F800003FF800003FF800003FF800003FF800001FF800001FF800001FF800001F
+ F800001FF800001FF800001FF800000FF800000FF800000FF800000FFC00000F
+ FFFFFFFF28000000300000006000000001000800000000000009000000000000
+ 000000000001000000010000000000007B5E550062647200627D7500854F0000
+ 8B550100925B0000B8500E00B8511000976000009B6300009F6800009F6F1E00
+ A26A0000A36D0B00AB730700B27A0500A06D1800AB761400AD781600A2701F00
+ AF7D1E0093593900B45D2800BF652600B5602900BA642A00BE6B2C00A8792C00
+ B07E2300B86E3900AA7B3300C34D0100C3500600CA550500CC580600C4550C00
+ C8560800CF5C0800C7591100D7670C00CF651300C5611B00D26B1A00D6741F00
+ E4781200CB642100C16E2E00C86B2A00C3712F00DA7B2500CF6F3100C5743000
+ CA7A3200CE7D3800D3773800875B470093714100A8734F00AF7F5800B37E5100
+ CF7D4600D27A4100BB830700B5811C00BA871F00B4812500B9862500BC8A2700
+ BD8D2D00BF902F00AF843C00BD8E3400B5893C00B98E3C00BF923900C0891000
+ ED831600DE832B00C4952F00DC833200C4973B00EE962900E5923600CEA13F00
+ B58D4800B3805700BF865100BB95550094856100B78B6000BE8D6200BF976900
+ CB814100CB874800D88F4900C69A4400DB944400D6855100C89E5300C69F5E00
+ CE995A00E79F4600E29D4B00E2975400CEA64F00D0A14900CBA45A00D1A45100
+ D3A85400D3AB5B00DEA85900F0A94900F4B04E00E4A25E00F8B85300F3BC5F00
+ FBBF5900CE9A6000DA906100DC9B7100CCA76100D2AB6500D5B06500DCB36700
+ D5B16B00DAB56D00CEA27400C8A97300CBAE7A00D1AE7400D4AB7E00CFB07600
+ D4B47500DBBB7700D1B37C00DABC7C00E6A56100E4B06000E4B26900E3BA6D00
+ F0B66E00E2A27400E0B77000E3BE7C00F3B97800FFC75F00DEC17E00FCC66100
+ FFC86300FFCB6B00FFCE7300FACD7E00FFD07B001078BD00316EA8002570B600
+ 007ACF001075C7000078DF004197AC00769AB3000087DF000095DF002090D700
+ 0D80E100009EEB00009BFF002697ED003395E70000A2EF0000B5EF0000A8FE00
+ 00B7FE0033ADEF0026AFFF0026B7FF0033BFFF00408DCF004093D3005097D300
+ 40A8DF0070AADB00409FE90040AEE3004CB4E30046BAFF0066B3EF0000C0EF00
+ 15D0E90000C7FE0000D4FE0033D1FF004DC5FF0040D1FF0066CBFB0073CEFF00
+ 66D7FF0066E0FF00D4AC8300D8BB8500E1A68000E2B28F00E2B69900DDC08000
+ DEC79B00E7C68800F4CC8100F0C08B00F0CC8D00FECB8F00FFD38300F3D08F00
+ FFD68A00FFD88F00E5CA9400F0C29100E6D09F00FFD99300F8D69900FEDC9B00
+ DFCBA800E9CDA800F4CFA400E8D3AB00F1D7A700FFDEA100F0CFB400E9D7B800
+ FFE0A500FFE1AA00EFE0BF00FDE5BA0080B3DF008FBDE30080C1E7009FC6E700
+ 8CD3FF0099D2F800AFD0EB00BFD9EF00A6DCFF008CE0FF0099E2FF00B3E4FF00
+ FDEAC700EFE1D400FEEED100FEF2D900CCEAFD00DFECF700CCF0FF00FEF6E600
+ E6F0F900FFFDFB00000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000C92020337800000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000000202A5E302420203E000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000003E202A878787765E2A20202762C90000000000000000000000000000
+ 00000000000000000000000000000000000000002020173B5A5C8F9294746632
+ 2920202062000000000000000000000000000000000000000000000000000000
+ 000000002020173A3A3C9292929292929292704E29202033C900000000000000
+ 00000000000000000000000000000000000000002020173A3A6F929292929292
+ 929292929273532B20202A620000000000000000000000000000000000000000
+ 000000002020173A3C9292929292929292929292929292949467372A20202E77
+ 00000000000000000000000000000000000000002020173A6595959492929292
+ 92929292929292949492928A571E18242E000000000000000000000000000000
+ 000000002020173A8B97969695959592929292929292929292929292926F3C19
+ 20000000000000000000000000000000000000002020173A98D3D39797969696
+ 95959292929292929292929292929261252A0000000000000000000000000000
+ 0000000020201956D5D3D3D3D3D3979797969695959492929292929292929292
+ 732C20620000000000000000000000000000000020251A5BDCCFDAD5D3D3D3D3
+ D3979797969695959592929292929292929253252E0000000000000000000000
+ 0000000020231B7FE26C0D436A8CD6D5D3D3D3D3D39797969696959592929292
+ 92929271292A000000000000000000000000000020261B83E66D417C48130B42
+ 6AD6D5D3D3D3D3D3979797969695959492929292732920000000000000000000
+ 0000000020261BC7E86D45D1136CD48F0BDCDCDADAD5D5D3D3D3D39797979696
+ 9595959295922B3E000000000000000000000000202634DEE86E0F0F4B0F8FE6
+ 09CEDCE2DCDCDADAD6D5D3D3D3D3D39797969695702B20770000000000000000
+ 00000000212831DEF57C0F6CE8CE0ED10ECEE6DCE2E2E2DCDCDADADAD5D3D3D3
+ D3D39750212E0000000000000000000000000000202834E0F57B48F5F5F57D13
+ 1DCEE86B06426390DBE2DCDCDCDADAD5D3D35021C90000000000000000000000
+ 00000000202835E4F77D43F5F5F5F5600BD7E86B090606060614497BD1DCDCDC
+ DA8D200000000000000000000000000000000000212D34FCF8D7100F40517DD9
+ 0E60F5F5D77949110605050504051F7BE2682000000000000000000000000000
+ 00000000202837FCF8F8F8E7D77D480F0D6BF5F5F5F5F5E8E1CC641C0505041C
+ E668200000000000000000000000000000000000202D37FCFCFCFCF8FCF8F8F8
+ E7F5F8F7F5F7F5F5F5F5F5E8F5D18155E8682000000000000000000000000000
+ 00000000202D35FEFCD77BCCE0F7FCFCF8F8F8F8F8F7F7F7F7F5F5F5F5F5F5E8
+ E8D0200000000000000000000000000000000000202D37FCFE863F51100F104B
+ 7AE0FCF8F8FCF8F8F7F7F7F7F5F5F5F5F5D82000000000000000000000000000
+ 00000000202D61FEFC8851FECE86E4854B85FCFCFCF8FCF8F8F8F8F7F8F7F7F7
+ F5DF200000000000000000000000000000000000214D72FEFE8854D7100FE7FC
+ 8785FCFCFCFCFCFCFCFCF8F8F8F8F7F7F7F721C9000000000000000000000000
+ 00000000202D72FEFE884C106E863FE7866BFEFCFCFCFCFCFCFCFCFCFCF8F8F8
+ F8F724C900000000000000000000000000000000204D89FEFE883F6DFEFE7A48
+ 7D4BFEFC0E424987C8E0F6FCFCFCFCFCF8FC373E000000000000000000000000
+ 00000000204D89FEFE884FFEFEFEFE450F51FEFE0F0D0D0B0B0B090B1C5580C8
+ E4FC3E35000000000000000000000000000000C9204D89FEFECE54FEFEFEFEFC
+ 4145FEFECD864A4A0B0B0B060906090606FC8E20000000000000000000000000
+ 000000C9204D89FEFE883F4C54698886C810E4FEFEFEFEFEFEFCE4DD8158470C
+ 06FCCA20000000000000000000000000000000C9204D91FEFEFCE7D9887E6060
+ 1045FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEE320000000000000000000000000
+ 000000C9204DD2FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFEFEFC
+ FEFCF620000000000000000000000000000000C9214DD2FEFEFEFEFEFEFEFEFE
+ FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE21C90000000000000000000000
+ 000000C92052A1FDE9F0F0FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE
+ FEFEFE303E0000000000000000000000000000C9219AC3F9A2A29D9D9EB2B4E9
+ ECF0FAFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE3E350000000000000000000000
+ 000000C920BEC6F9B0ACACACADACACAAA6A3A29DA4B3B6E9EFF0FEFEFEFEFEFE
+ FEFEFE78200000000000000000000000000000C920BEC6F9BAACACACACADACAD
+ ADADBEBEBEBEBEBEAAABA3A3B8B8EBEAF0F9FECB200000000000000000000000
+ 000000C920BEC3F9C3A7ACACACACADACADADACADADBEADBEBEBEBFBEBFBFBFBF
+ BFBCBCA0200000000000000000000000000000C920ADC3F9F1A7ACA7ACACACAC
+ ADACBEADADADBEADBEBEBEBEBFBEBFBFBFBFBFBD200000000000000000000000
+ 000000C920ACC3F9F9EDBAAFACACACACACADACADADADADBEBEBEBEBEBEBEBFBF
+ BFBFBFBF087800000000000000000000000000C920ACC4F9F9F9F9F9F9F4F3C4
+ C3C1B1B0ADADADADADBEBEBEBEBEBEBFBFBFBFBF393E00000000000000000000
+ 000000C920A7A8A9A9A9A9BBBBBBBBBBEEEEEEEEEEF9F3F3F2C3C3C2C0C0BFBE
+ BEBFBFBF032100000000000000000000000000002002020202029B9B9B9B9B9B
+ 9C9F9F9F9F9F9F9F9FA5A9A9A9A9B7BBBBAEAEB9592100000000000000000000
+ 000000003E212020202020202020202020202020202020081616161616160102
+ 0202382121770000000000000000000000000000000000000000000000000000
+ 0000C9C9C9C9C9C9773E3E3E3E3E3E2721212E78000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000FFFFFFFFFFFF0000FF83FFFFFFFF0000FF807FFF
+ FFFF0000FF0003FFFFFF0000FF00007FFFFF0000FF000007FFFF0000FF000000
+ FFFF0000FF0000000FFF0000FF00000007FF0000FF00000007FF0000FF000000
+ 03FF0000FF00000000FF0000FF000000007F0000FF000000003F0000FF000000
+ 001F0000FF000000000F0000FF000000000F0000FF000000003F0000FF000000
+ 007F0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000
+ 01FF0000FF00000001FF0000FF00000001FF0000FF00000001FF0000FF000000
+ 00FF0000FF00000000FF0000FF00000000FF0000FF00000000FF0000FE000000
+ 00FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000
+ 007F0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000
+ 007F0000FE000000007F0000FE000000007F0000FE000000003F0000FE000000
+ 003F0000FE000000003F0000FF000000003F0000FF000000003F0000FFFFFC00
+ 00FF0000FFFFFFFFFFFF00002800000010000000200000000100200000000000
+ 4004000000000000000000000000000000000000000000000000000015080003
+ AF4D0CA383380684411A003E1508000500000000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000006C2B015A
+ BB672DFFCA9E65FFEAA54AFFDF862EF4BC6218BF83360378411A002C00000000
+ 000000000000000000000000000000000000000000000000000000008234016A
+ B45D28FFE3AD5BFFFFC75FFFFFC75FFFFFC75FFFFBBF59FFE89D41FFCF7428E4
+ 96430D9F2B11001E00000000000000000000000000000000000000008234016A
+ B66129FFFBCD7BFFFFCD72FFFFCA69FFFFC862FFFFC75FFFFFC75FFFFFC75FFF
+ E6AA53FFB6560EB22B110015000000000000000000000000000000008234016A
+ C67436FFE1B869FFDAAD59FFE6B865FFFFD381FFFFCF76FFFFCB6CFFFFC964FF
+ FFC760FFFCC15AFFD87822E2411A00310000000000000000000000008234016A
+ D28646FFD6AF64FFCCA251FFCA9E4DFFF9D797FFFFDB97FFFFD78EFFFFD484FF
+ FFD079FFFFCC6FFFE7973CFB6E2E036A0000000000000000000000008234016A
+ DB9456FFDBBA77FFE6C78DFFC59C4EFFE7C890FFB0812FFFB48536FFC99E55FF
+ E3BB75FFE8A45BFF411A0037000000000000000000000000000000008234016A
+ E3A265FFF7E8CBFFEFDBB4FFE2C897FFF8E6C4FFFFEDCCFFF9E4BDFFE1C491FF
+ CAA66BFFE39D5EFF15080005000000000000000000000000000000008234016A
+ E9AC71FFDFC388FFCBA24FFFD5B577FFF2E3C4FFFFF4E0FFFFF2DBFFFFF0D5FF
+ FFEECFFFE8AF7DFF411A001C000000000000000000000000000000008234016D
+ EFB67BFFDEC284FFE8D5ACFFCEAA61FFEBDAB8FFC6A159FFD1B37CFFDDC499FF
+ ECD9B9FFEBC29DFF411A003A000000000000000000000000000000008234017F
+ F2BA7FFFE8D4A6FFE1C891FFD5B571FFE5D2AAFFEEE2CCFFE1CDAAFFD0B686FF
+ C09E65FFDEBF9AFF6C2B015F000000000000000000000000000000008234017F
+ E7C091FFE2EEF7FFFFFFFFFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFCFFFFFDFBFF
+ FFFDF9FFFDF9F3FF82370684000000000000000000000000000000008234017F
+ 67CFF5FF0B9DF2FF089DEEFF28ACEFFF4ABAEFFF6CC8F1FF8BD4F3FFB1DFF4FF
+ CFE6F4FFF2F7FAFF9F5627A8000000000000000000000000000000008234017F
+ 66CFFFFF4CBCFFFF04A7FFFF00ADFFFF00B4FFFF00BBFFFF00C2FFFF00CAFFFF
+ 00D1FFFF00D1FBFF8A744CCD000000000000000000000000000000008234017D
+ 4E96CCFF70A2CDFF73ADDCFF5FA9DFFF45ADF1FF38AFF3FF2DB2F4FF29BAF7FF
+ 1FBFF8FF16C6F9FF758671F7000000000000000000000000000000002B110017
+ 411A0055411A00558234016A8234016A8234017A8234017F76360F8A72371394
+ 6A391D9A663A21A66C2B015F0000000000000000C1FF0000C03F0000C0070000
+ C0030000C0010000C0010000C0030000C0030000C0030000C0030000C0030000
+ C0030000C0030000C0030000C0030000C0030000280000001800000030000000
+ 0100200000000000600900000000000000000000000000000000000000000000
+ 00000000000000000000000031130020C44E028F622701573113001400000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000C44E02B7C87E3FFFCB8A4BFFC86D29FFC45208CB
+ 933A01876227014B311300100000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000006227011CC24B01FFAF6B3DFFB4845AFFF7C363FFFAC360FF
+ EFAA4AFFE49034FFD5721DFFC65306C7933A017B622701300000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000062270120C24B01FFAE683BFFCE9856FFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFDC35CFFECA244FFD97F2CFFC75E15E7C44E02A3
+ 6227015F3113000C000000000000000000000000000000000000000000000000
+ 000000000000000062270120C24B01FFAE683BFFECB866FFFFC966FFFFC861FF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFF8C15FFFD59850FF
+ BA662BFF933A017B000000000000000000000000000000000000000000000000
+ 000000000000000062270120C44E02FFB26D3EFFFDD384FFFFD17EFFFFCF77FF
+ FFCC6FFFFFCA68FFFFC863FFFFC760FFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ F6BA58FFD6741FFB933A017F3113000400000000000000000000000000000000
+ 000000000000000062270120C75203FFC07E4BFFF1CA82FFD6A850FFEDC271FF
+ FFD587FFFFD280FFFFD079FFFFCD72FFFFCB6AFFFFC964FFFFC760FFFFC75FFF
+ FFC75FFFFFC75FFFE8973AFFC65306BF31130018000000000000000000000000
+ 000000000000000062270120CA5605FFC98B56FFE9C683FFCFA34FFFB9882BFF
+ C99B48FFD9AD5CFFFFD890FFFFD589FFFFD382FFFFD17BFFFFCE74FFFFCC6DFF
+ FFC966FFFFC861FFFFC75FFFF2AC4AFFC75507C7000000000000000000000000
+ 000000000000000062270120CC5906FFD59D6AFFE9CB90FFB4801AFFD3AC62FF
+ DBB46CFFC49744FFFDDDA1FFFFDD9EFFFFDB98FFFFD892FFFFD68CFFFFD485FF
+ FFD17EFFFFCF77FFF6BA5FFFD26C1AF7933A017F000000000000000000000000
+ 000000000000000062270120CF5C07FFD7A272FFEACF9BFFDDBA77FFFFEBC6FF
+ D1AB64FFC79C4EFFE5C489FF9C660AFFB38433FFCA9F56FFE1BB76FFFBD795FF
+ FFD994FFFBCE85FFC95A0EDB3113002000000000000000000000000000000000
+ 000000000000000062270120D15F08FFE3B68BFFF7E7C7FFD4B06AFFCBA456FF
+ C89F50FFB5852CFFFFEBC7FFEBD09FFFD4B275FFBA904AFFA17023FF895302FF
+ A87830FFF0BA7BFF6227017F0000000000000000000000000000000000000000
+ 000000000000000062270120D36109FFE4BA91FFF8EBD1FFECD6AAFFF8EACEFF
+ FFF3DDFFFAEBCFFFFFF0D5FFFFEFD1FFFFEDCDFFFFECC9FFFFEAC4FFF9E2B7FF
+ E2C490FFF4C994FF933A018B0000000000000000000000000000000000000000
+ 000000000000000062270120D5630AFFE8C19AFFEDDAB4FFD1AC5DFFC59A42FF
+ CCA65BFFD2B06EFFFFF4E1FFFFF3DEFFFFF2DAFFFFF0D7FFFFEFD2FFFFEECEFF
+ FFECCAFFF8DAB0FFC44E029F0000000000000000000000000000000000000000
+ 000000000000000062270120D6650BFFF1D0ACFFEDDDB9FFC89A38FFC39535FF
+ E5CEA0FFD2B070FFFFF8EBFFFFF7E9FFFFF6E6FFFFF5E2FFFFF4DFFFFFF2DCFF
+ FFF1D8FFFFF0D4FFC34E03BF0000000000000000000000000000000000000000
+ 000000000000000062270128D7670BFFF2D1AFFFEEDEBCFFD5B161FFFFFCF8FF
+ D2B16CFFC09439FFFFFBF3FFA9730BFFB2832CFFBD954CFFC8A76CFFD7BC8FFF
+ E6D3B1FFF9EDD6FFCA631FE30000000000000000000000000000000000000000
+ 000000000000000062270140D8680CFFF3D2B0FFEFE0BEFFD2AA53FFE5D0A1FF
+ EBDBB8FFBF9133FFFAF4E9FFEBDDC2FFDCC59AFFCDAE77FFBE9958FFAD8135FF
+ 9C6A16FFC7A875FFD37C41FF3113000800000000000000000000000000000000
+ 000000000000000062270140D9690CFFFBE0C1FFFDFBF7FFF4EBD7FFECDDBBFF
+ E3CD9FFFDCC28AFFFFFEFDFFFFFEFCFFFFFDFBFFFFFDF9FFFFFCF8FFFFFCF6FF
+ FFFBF5FFFFFAF2FFD99363FF6227012C00000000000000000000000000000000
+ 000000000000000062270140D96E11FFD6D5CEFFCFE2F3FFEFF5FBFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFCFFFFFDFBFF
+ FFFDFAFFFFFCF8FFE2AC88FF6227014F00000000000000000000000000000000
+ 00000000000000006227014066766FFF99E0FAFF099AEFFF0091E7FF1498E5FF
+ 34A5E6FF57B3E8FF77BEE9FF97C8EAFFBBD6EEFFDBE9F6FFFFFFFEFFFFFEFEFF
+ FFFEFDFFFFFEFCFFEAC6ADFF6227017300000000000000000000000000000000
+ 000000000000000062270140628780FF99E2FFFF29B1FFFF00A6FFFF00ABFFFF
+ 00B0FFFF00B5FFFF00B9FFFF00BEFFFF00C0FDFF00BCF7FF00B3EFFF20BEF0FF
+ 43CAF2FF63D3F2FF88C3CCFFC44E029700000000000000000000000000000000
+ 000000000000000062270140627E80FF99DDFFFF7FCEFFFF1CABFFFF00A5FFFF
+ 00AAFFFF00AFFFFF00B4FFFF00B9FFFF00BEFFFF00C2FFFF00C7FFFF00CCFFFF
+ 00D1FFFF00D6FFFF05D7F9FFC14E05BF00000000000000000000000000000000
+ 000000000000000062270140627580FF66B8F4FF7FBFF3FF8CC7F5FF92CDF7FF
+ 76C3F7FF79CCFBFF62C7FBFF59CBFDFF4CCEFFFF3CCDFFFF29CCFFFF19CCFFFF
+ 03CCFFFF00D0FFFF00D5FFFF9F622EEF00000000000000000000000000000000
+ 000000000000000062270120AB5520EF935839FF935839FF7A5E55FF7A5E55FF
+ 7A5E55FF6B6166FF626370FF626370FF5F6374FF4C6A8CFF637890FF637890FF
+ 6085A7FF578AB0FF728286FFB85B19E700000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000003113001062270120
+ 6227012062270124622701406227014062270140622701576227015F6227015F
+ 6227016B6227017F6227015B3113000C000000000000000000000000F0FFFF00
+ F00FFF00E001FF00E0001F00E0001F00E0000700E0000300E0000300E0000300
+ E0000700E0000F00E0000F00E0000F00E0000F00E0000F00E0000700E0000700
+ E0000700E0000700E0000700E0000700E0000700E0000700FE00070028000000
+ 2000000040000000010020000000000080100000000000000000000000000000
+ 000000000000000000000000000000000000000000000000000000006C2B0143
+ C44E0266411A003D411A00210000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000005722000EC45207E2
+ C76B26FFC65D15E7C44F03CB8234019B8234015C572200150000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000000000000000000015080005983C0192C1530CFF
+ C28B56FFC8A775FFD1A56BFFDA9142FFD57726FFCE6515FBC85809D7C44E029C
+ 6C2B0163411A0033411A00130000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0013C44E02BDBC4F0EFF
+ AD6E44FFB07E56FFE0AD60FFFEC65FFFFBC45FFFF5B553FFF0A847FFE8983AFF
+ D97923FFC85809DDC44E02BD8234017882340138000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFBC4F0EFF
+ AC6B42FFC08A53FFF7C05DFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFDC35CFFF1AC4AFFDC832DFFD06C1DFFC65A10E6C45004AD983C015F
+ 411A003C2B11000A000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFBC4F0EFF
+ AC6B42FFD8A25BFFFFC761FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFEC65FFFF8BD5BFFE7A64EFFC97E3CFFBD6122FB
+ C2570FE68234016D000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFBC500EFF
+ AC6C42FFF1C172FFFFCE73FFFFCC6CFFFFCA68FFFFC863FFFFC761FFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFDFA959FF
+ C57E3DFFC44F03C86C2B012F0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFC05510FF
+ B17246FFFDD486FFFFD383FFFFD17DFFFFD078FFFFCD72FFFFCC6DFFFFCA67FF
+ FFC863FFFFC760FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ F7BB59FFE0872DFDC85608D6823401512B110003000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFC55B11FF
+ C08453FFF7D28CFFE3B766FFEABE6DFFF4C97AFFFFD485FFFFD281FFFFD17BFF
+ FFCF77FFFFCD70FFFFCB6BFFFFC966FFFFC862FFFFC760FFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFF3AF4CFFD16917F7C55003982B1100150000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFC85F13FF
+ CA9360FFF0CD8BFFBB8929FFCC9E49FFC08F34FFC29137FFD7A955FFFFD68BFF
+ FFD586FFFFD280FFFFD17CFFFFCF75FFFFCD71FFFFCB6BFFFFCA66FFFFC862FF
+ FFC760FFFFC75FFFFFC75FFFF6B551FFD6731EFBAE45019C2B11001500000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFCC6415FF
+ D19D6DFFF0D298FFC19133FFCC9F4BFFBD8D31FFEBC682FFB5842BFFFAD795FF
+ FFDB98FFFFD993FFFFD78EFFFFD689FFFFD484FFFFD27FFFFFD07AFFFFCE74FF
+ FFCC6FFFFFCA69FFFFC965FFFDC45EFFF3AF4DFFCA5B0CE6411A003C00000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFCF6816FF
+ DCAD7EFFF0D5A1FFB88622FFCFA657FFDAB570FFCCA04FFFBB8D38FFEFCE8FFF
+ FCDCA0FFFFDEA0FFFFDD9CFFFFDA97FFFFD993FFFFD78EFFFFD689FFFFD484FF
+ FFD27FFFFFD079FFFFCE74FFE18C36FFCC5E0FF0983C01751508001100000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFD26D18FF
+ DCB186FFF1D9ABFFC69941FFFDE9C4FFFFEAC4FFD3AE69FFAD7A1CFFEED099FF
+ DCB979FF9B6609FFB1812EFFCCA159FFDCB470FFE9C481FFF6D28FFFFFDA96FF
+ FFD891FFFDD388FFDF8D40FFAE4501A62B11001C000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFD5701AFF
+ E7C39EFFF3E0B9FFC39438FFC79C47FFD3AD65FFDFBF83FFB6872FFFDFBE81FF
+ F3DAABFFC49C55FFAE802FFF97620AFF935D06FF9C6A19FFA7772AFFB98C44FF
+ D7AE6AFFF6C885FFCF691FFF2B11001800000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFD8741BFF
+ EDCDACFFFFF4E1FFFFF3DEFFF4E2C0FFE5CC9BFFCEAA63FFC09545FFE6CB99FF
+ FFEDCDFFFFECC9FFFFEBC6FFFBE5BDFFECD1A0FFD2AF74FFB78D49FFA4762EFF
+ A67731FFF5C98FFFCE661DFF0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFDA771CFF
+ EDCFB1FFF8ECD4FFE6CC98FFEBD5A9FFF8EACEFFFFF3DEFFFCEED5FFFDF0D6FF
+ FFF0D6FFFFEFD3FFFFEED0FFFFEDCCFFFFECCAFFFFEBC5FFFFEAC3FFF5DCAFFF
+ EACE9DFFF8D5A3FFD16F2AFF5722001500000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFDE7C1FFF
+ EFD3B7FFF3E4C7FFC79B3BFFD0AC5FFFBD8D2AFFC59B47FFC8A052FFEBD7AFFF
+ FFF4E0FFFFF3DDFFFFF2DAFFFFF1D8FFFFF0D5FFFFEFD2FFFFEECFFFFFEDCBFF
+ FFECC9FFFADEB6FFD37633FF8234012A00000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFE5862AFF
+ F4DCC3FFF3E6CBFFCFA751FFDEC288FFBF8F2AFFEFDFBFFFD9BC83FFE2CA9BFF
+ FFF6E7FFFFF6E4FFFFF5E2FFFFF4E0FFFFF3DDFFFFF2DAFFFFF1D8FFFFF0D5FF
+ FFEFD2FFFDEACAFFD67F41FF8234014700000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A0015C44E02BFE78A2DFF
+ F6DFC8FFF3E8CFFFC79730FFCBA044FFE3CC9DFFC8A04CFFD7B97EFFD9BD85FF
+ FFF9EEFFE2CBA0FFE6D2ACFFEFE0C3FFF4E7CEFFFCF1DDFFFFF4E2FFFFF3DFFF
+ FFF3DCFFFFF2D9FFDA8E57FF8234016300000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A001CC44E02C6E98C2EFF
+ F6E0C9FFF3E9D2FFCCA03EFFF5EBD7FFFFFCF9FFDEC592FFBB8B27FFD5B77AFF
+ FFFBF4FFA9730AFFA87410FFAF8028FFB38635FFB88E46FFC19E60FFD1B585FF
+ E0CAA4FFF5E7CEFFDFA375FF8234018600000000000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D4EB8E2FFF
+ F7E1CAFFF4EAD3FFD0A546FFEBD9B3FFEEDFC0FFF1E6CDFFD2B06CFFCDAA60FF
+ FCF8F1FFE6D4B3FFD6BB89FFCAAA6DFFBC954EFFB2883BFFAB7D2DFFA06E1AFF
+ 97630DFFB48D4DFFEBC2A1FF983C01AD15080003000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D4EE9334FF
+ F9E5CFFFF9F4E9FFE4CB94FFD8B76DFFD5B266FFCEA754FFC49638FFCFAB62FF
+ FCF9F4FFFFFDFAFFFFFDF9FFFFFCF8FFFDFAF4FFF5EEE0FFEFE5D1FFE7D8BEFF
+ E0CEAFFFE6D6BBFFF1D6BFFFC44E02BB411A0011000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D4F49C3FFF
+ FEEDD9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFF
+ FFFEFEFFFFFEFDFFFFFEFCFFFFFEFCFFFFFDFBFFFFFDFAFFFFFDF9FFFFFCF8FF
+ FFFCF7FFFFFBF5FFF7EFE6FFC34E03D1411A0027000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D4D5994FFF
+ D5DCDFFFB8D4EDFFD4E5F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFEFFFFFFFEFFFFFFFEFFFFFEFDFFFFFEFDFFFFFEFCFFFFFEFCFFFFFDFBFF
+ FFFDFAFFFFFCF9FFFFFCF8FFC55A15E2411A0038000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D429A8DDFF
+ AAE2FAFF0894E9FF008BE2FF0389DDFF2093DDFF40A2E0FF63B4E7FF86C5EBFF
+ A2D1EFFFB8DAF1FFCAE0F2FFD9E8F5FFE7F1F9FFFFFFFEFFFFFFFEFFFFFEFDFF
+ FFFEFDFFFFFEFCFFFFFEFBFFCE753BF4411A004A000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D422CDFEFF
+ AAE6FFFF24B0FFFF00A6FFFF00AAFFFF00AEFFFF00ADFBFF00ADF8FF00ABF4FF
+ 00A8F0FF0EB0F1FF20B8F2FF2FB8EEFF3DBDEEFF55BBE9FF71C4EBFF8DCAEBFF
+ B1D3ECFFD7E7F4FFF4F8FBFFD68D5EFF983C0163000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D422C2FFFF
+ AAE3FFFF52BEFFFF00A2FFFF00A6FFFF00A9FFFF00ADFFFF00B0FFFF00B4FFFF
+ 00B8FFFF00BBFFFF00BFFFFF00C3FFFF00C6FFFF00CAFFFF00CEFFFF00D1FFFF
+ 00D5FFFF00CFF9FF00C8F4FF628B80FFC44E028A000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D422B8FFFF
+ AAE1FFFF9ED9FFFF41B7FFFF10A8FFFF00A5FFFF00A9FFFF00ADFFFF00B0FFFF
+ 00B4FFFF00B8FFFF00BBFFFF00BFFFFF00C2FFFF00C6FFFF00CAFFFF00CDFFFF
+ 00D1FFFF00D5FFFF00D8FFFF43AAA8FFC14E04AD000000000000000000000000
+ 0000000000000000000000000000000000000000411A002AC44E02D41DA7FDFF
+ 83C7F7FF99CDF7FF99CEF7FFAAD8F9FF9ED5F9FF7FCAF9FF74CAFBFF60C7FCFF
+ 4FC4FCFF38C1FDFF38C7FFFF31C8FFFF26C8FFFF1DC9FFFF12C9FFFF0CCCFFFF
+ 01CCFFFF00D0FFFF00D4FFFF2BB6C5FFAE5B1CE2000000000000000000000000
+ 0000000000000000000000000000000000000000411A0027C44E02D14578A2FF
+ 507399FF527398FF3C78B0FF4284BFFF4284BFFF4284BFFF488CC7FF3395E7FF
+ 3395E7FF3899E7FF389CE9FF319BE9FF2C9CEAFF3FACEFFF34AAEFFF31ABEFFF
+ 3DB8F3FF38BCF4FF22B9F4FF4DAAC0FFAE5F23FF000000000000000000000000
+ 00000000000000000000000000000000000000002B11000382340158823401AA
+ 823401AA823401AA823401AAC44E02BFC44E02BFC44E02BFC44E02BFC44E02CA
+ C44E02D4C44E02D4C44E02D4B35114D8A35526E6A35526E9A35526E99E562CE9
+ 885A45F4825C4CFF935839F7C44E02CF983C0184000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000411A0015411A0015411A0015411A0015411A0020
+ 411A002A411A002A411A002A411A002E411A003C411A003F411A003F411A003F
+ 411A004A411A0055411A004D411A002515080005000000000000000000000000
+ 00000000FC3FFFFFF807FFFFF0003FFFF0000FFFF000007FF000007FF000003F
+ F000000FF0000007F0000003F0000003F0000003F000000FF000001FF000003F
+ F000001FF000001FF000001FF000001FF000001FF000000FF000000FF000000F
+ F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000F
+ FFC0000F28000000300000006000000001002000000000008025000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000C44E0230C44E021000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 00000000000000000000000000000000C44E0280C44E02FFC44E02FFC44E02CF
+ C44E028FC44E0250000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000C44E0220C44E02FFC56019FFCB8748FFC86E29FF
+ C5540AFFC44E02FFC44E02FFC44E02BFC44E0270C44E02300000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000C44E02BFC44E02FFC3621FFFD0B27DFFD0B37EFF
+ D1B37EFFCE9A60FFCB8141FFC7611AFFC44E02FFC44E02FFC44E02EFC44E02AF
+ C44E0280C44E0240000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0230C44E02FFC14A01FFB45D28FFAF7F58FFB78B60FF
+ BF9769FFE0B770FFFFC75FFFF9C563FFF3BC5FFFE79F46FFDA7B25FFCF6513FF
+ C44E02FFC44E02FFC44E02FFC44E02AFC44E0270C44E02200000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFA8734FFF
+ B37E51FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFF0A948FFDE832BFFCF6513FFC44E02FFC44E02FFC44E02CFC44E0280
+ C44E024000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFA8734FFF
+ DEA859FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFF8B853FFE59236FFD06B1CFFC44E02FF
+ C44E02FFC44E02EFC44E02AFC44E0270C44E0220000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFB37E51FF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFAC564FF
+ E29D4BFFCE7D38FFC7621AFFC44E02FFC44E02FFC44E02DFC44E029FC44E0230
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFCE995AFF
+ FFC965FFFFC862FFFFC760FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFE4B060FFBF8651FFB86E39FFBF6526FFC3570FFFC44E02DF
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC04901FFB45D28FFA8734FFFE4B269FF
+ FFCE72FFFFCC6EFFFFCB6AFFFFCA66FFFFC863FFFFC861FFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFDEA859FFB37E51FFB66129FFC44E02FF
+ C44E021000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC34D02FFB56029FFA8734FFFFACD7EFF
+ FFD27EFFFFD07AFFFFCF76FFFFCE73FFFFCD6FFFFFCB6BFFFFCA68FFFFC964FF
+ FFC861FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFDB9444FFC85608FF
+ C44E02EFC44E0250000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFC65004FFB8622AFFB38057FFFFD78CFF
+ FFD689FFFFD586FFFFD382FFFFD27FFFFFD17BFFFFD078FFFFCE74FFFFCD70FF
+ FFCC6DFFFFCB69FFFFC965FFFFC862FFFFC760FFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFF8B853FF
+ D6741FFFC44E02FFC44E02AFC44E021000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFCA5505FFBA652BFFBE8D62FFFFDB97FF
+ F4CC81FFFFD891FFFFD78DFFFFD68AFFFFD587FFFFD483FFFFD380FFFFD17CFF
+ FFD079FFFFCF75FFFFCE72FFFFCC6EFFFFCB6AFFFFCA66FFFFC863FFFFC861FF
+ FFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFE59236FFC85608FFC44E02DFC44E0230000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFCC5806FFBC672BFFCEA274FFFFDEA1FF
+ D2A550FFA46C00FFB98625FFD0A149FFE7BC6CFFFFD88FFFFFD68BFFFFD588FF
+ FFD485FFFFD381FFFFD27EFFFFD07AFFFFCF76FFFFCE73FFFFCD6FFFFFCB6BFF
+ FFCA68FFFFC964FFFFC861FFFFC75FFFFFC75FFFFFC75FFFFFC75FFFFFC75FFF
+ FFC75FFFFFC75FFFF4B04EFFCF6513FFC44E02EFC44E02600000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFCF5C08FFBD6A2CFFD4AB7EFFFFE2ABFF
+ D3A854FFB6831FFFDCB367FFBE8E33FFAB7614FF9D6500FFB48125FFCC9D48FF
+ FFD890FFFFD78CFFFFD689FFFFD586FFFFD382FFFFD27FFFFFD17BFFFFD078FF
+ FFCE74FFFFCD70FFFFCC6DFFFFCB69FFFFC965FFFFC862FFFFC760FFFFC75FFF
+ FFC75FFFFFC75FFFFFC75FFFFBBF59FFCF6513FFC44E02FFC44E026000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFD26009FFBF6C2DFFD4AC83FFFFE5B4FF
+ D4AA59FFBD8B2BFFEECC8BFFAE7915FFD0A452FFF3D08FFFE0B86FFF9A6300FF
+ FFDC9AFFFFDB97FFFFDA94FFFFD891FFFFD78DFFFFD68AFFFFD587FFFFD483FF
+ FFD380FFFFD17CFFFFD079FFFFCF75FFFFCE72FFFFCC6EFFFFCB6AFFFFCA66FF
+ FFC863FFFFC861FFFFC75FFFFFC75FFFFFC75FFFD36C19FFC44E02BF00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFD4630AFFC16E2EFFE9CBA3FFFFE8BDFF
+ D4AC5DFFAE770BFFAC750BFFC09138FFA7710BFFDCB46BFFFFE1AAFF9B6400FF
+ ECC885FFFFDEA1FFFFDD9EFFFFDC9BFFFFDB98FFFFDA95FFFFD992FFFFD88FFF
+ FFD68BFFFFD588FFFFD485FFFFD381FFFFD27EFFFFD07AFFFFCF76FFFFCE73FF
+ FFCD6FFFFFCB6BFFFFCA68FFF0AA4BFFD36C19FFC44E02FFC44E029F00000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFD7660BFFC3712FFFE9CDA9FFFFEBC5FF
+ D5AE62FFA97100FFCEA454FFFFE7BBFFE8C88BFFA7710BFFEDCD91FFA36D0BFF
+ E6C382FFFFE2ABFFF9D89DFFFFE0A5FFFFDFA2FFFFDE9FFFFFDC9CFFFFDB99FF
+ FFDA96FFFFD993FFFFD890FFFFD78CFFFFD689FFFFD586FFFFD382FFFFD27FFF
+ FFD17BFFFFD078FFDE8633FFC44E02FFC44E02DFC44E02600000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFD9690DFFC47330FFE9CFAEFFFFEDCCFF
+ D6B065FFC09032FFFFEBC6FFFFEAC3FFFFE9C1FFD6B16CFFAC7817FFB07E23FF
+ E6C589FFFFE5B4FFCBA259FF965F00FFAF7E2AFFC89E53FFE3BE7CFFF8D699FF
+ FFDEA0FFFFDD9DFFFFDC9AFFFFDB97FFFFDA94FFFFD891FFFFD78DFFFFD68AFF
+ FFD587FFDA8032FFC44E02FFC44E028000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFDB6C0EFFC67530FFE9D3BAFFFFF0D3FF
+ D6B269FFBC8A27FFFAE6C0FFFFEDCBFFFFECC9FFFFEBC6FFC49A4AFF9F6800FF
+ E7C88FFFFFE8BDFFCCA45DFF976000FF955E00FF935C00FF915A00FF8F5800FF
+ A2701FFFB6893EFFD3AA65FFF0CC8DFFFFDD9EFFFFDC9BFFFFDB98FFFFDA95FF
+ F0B66EFFC44E02FFC44E02700000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFDE6F0FFFC77631FFFFF5E3FFFFF2DAFF
+ E1C387FFB37C0EFFAB7200FFB4801AFFC39640FFD2AD66FFE8CC98FFA7710DFF
+ C3994AFFFFEBC5FFFFEAC2FFE5C791FFCAA460FFB5893BFFA06D18FF905900FF
+ 8E5800FF8C5600FF8A5400FF875200FF8D590AFFAA7B33FFD0A764FFFFDE9FFF
+ E29550FFC44E02FF000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE07210FFC97832FFFFF7E7FFFFF4E0FF
+ FFF3DEFFFFF3DCFFF5E2BFFFE4CA95FFD4B06CFFBC8F36FFAA740DFFA26A00FF
+ CAA35BFFFFEDCCFFFFEDCAFFFFECC8FFFFEBC6FFFFEAC3FFFFE9C1FFF1D7A7FF
+ DCBB82FFC69F5EFFA8792FFF895300FF875100FF854F00FFA2722BFFFFE1A9FF
+ E29754FFC44E02FF000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE17411FFCA7A32FFFFF8EDFFFFF6E5FF
+ FFF5E4FFFFF5E2FFFFF4E0FFFFF4DFFFFFF3DDFFFFF2DBFFFFF2D9FFF3E0BDFF
+ F9E8C8FFFFF0D3FFFFEFD1FFFFEECFFFFFEECDFFFFEDCBFFFFECC9FFFFEBC6FF
+ FFEAC4FFFFEAC2FFFFE9BFFFFFE8BDFFE9CB98FFD1AE74FFBA9150FFFFE4B2FF
+ E29959FFC44E02FF000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE37611FFCB7B33FFFFFBF3FFFFF8EAFF
+ E3C991FFD5B065FFDDBF81FFEBD6ABFFFAEDD4FFFFF4E1FFFFF4DFFFFFF3DDFF
+ FFF3DCFFFFF2DAFFFFF1D8FFFFF1D6FFFFF0D4FFFFEFD2FFFFEED0FFFFEECEFF
+ FFEDCCFFFFECC9FFFFEBC7FFFFEBC5FFFFEAC2FFFFE9C0FFFFE8BDFFFFE7BBFF
+ F0C08BFFC44E02FFC44E02300000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE57812FFCC7D33FFFFFCF6FFFFF9EEFF
+ DBBB77FFB9830FFFC6993BFFB07700FFAE7500FFB17B0EFFBF9239FFCEAA63FF
+ E9D3A9FFFFF4E0FFFFF3DEFFFFF3DCFFFFF2DAFFFFF2D8FFFFF1D7FFFFF0D5FF
+ FFEFD3FFFFEFD1FFFFEECEFFFFEDCCFFFFEDCAFFFFECC8FFFFEBC6FFFFEAC3FF
+ F0C291FFC44E02FFC44E02400000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE77A13FFD88F49FFFFFCF8FFFFFBF2FF
+ DBBC79FFC89C3CFFFFF9EFFFE2C894FFD7B776FFEBD7B1FFD5B575FFBF923AFF
+ D3B373FFFFF6E5FFFFF5E4FFFFF5E2FFFFF4E0FFFFF4DFFFFFF3DDFFFFF2DBFF
+ FFF2D9FFFFF1D7FFFFF0D5FFFFF0D3FFFFEFD1FFFFEECFFFFFEECDFFFFEDCBFF
+ F4CFA4FFC44E02FFC44E02400000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE87C14FFE4A25EFFFFFDFAFFFFFCF6FF
+ DCBD7AFFCA9D3DFFE3CB97FFB37900FFB17800FFF0E1C2FFFFF9EEFFD5B577FF
+ D4B476FFFFF8EAFFFFF7E9FFFFF7E7FFFFF6E6FFFFF6E4FFFFF5E3FFFFF4E1FF
+ FFF4DFFFFFF3DDFFFFF3DCFFFFF2DAFFFFF1D8FFFFF1D6FFFFF0D4FFFFEFD2FF
+ FFEED0FFC44E02FFC44E02800000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFE97E14FFE5A35FFFFFFEFCFFFFFDF8FF
+ DDBE7CFFBD860FFFB77D00FFD1AB5CFFD8BA7AFFB57F0FFFF0E2C4FFD5B679FF
+ CAA45AFFFFF9EEFFFFF9EDFFFFF8ECFFFFF8EBFFFFF7E9FFFFF7E8FFFFF6E6FF
+ FFF6E5FFFFF5E3FFFFF5E1FFFFF4E0FFFFF3DEFFFFF3DCFFFFF2DAFFFFF2D8FF
+ FFF1D7FFC25007FFC44E02800000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E02FFEA8015FFE5A460FFFFFEFDFFFFFEFBFF
+ DDBF7DFFBA8000FFD3AE5DFFFFFDF8FFFFFCF7FFCEA95DFFBF8F2EFFD1AF6BFF
+ C1953DFFFFFBF2FFFFFAF1FFA56D00FFAF7D1EFFB88D3BFFCFB076FFD4B884FF
+ E6D2AFFFF2E4CBFFFFF6E7FFFFF6E5FFFFF5E4FFFFF5E2FFFFF4E0FFFFF4DFFF
+ FFF3DDFFD37738FFC44E02BF0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0260C44E02FFEC8116FFE6A561FFFFFFFEFFFFFEFDFF
+ DEC07EFFC8992FFFFFFEFBFFFFFDFAFFFFFDFAFFFFFDF9FFBF902FFFAF7600FF
+ C1963EFFFFFCF6FFFFFBF5FFAC770FFFA46C00FFA26A00FFA06800FF9E6600FF
+ 9C6400FF9A6200FF986000FFA97B2CFFB58D48FFC8A973FFD5BB8FFFEAD8B9FF
+ FFF5E3FFCF7C43FFC44E02CF0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FFED8216FFE7A662FFFFFFFFFFFFFFFEFF
+ DFC17FFFCEA13FFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFFFAF5EBFFBA871FFF
+ BD8F2FFFFFFDF8FFFFFCF8FFDEC79BFFD2B47BFFBA8F3EFFB98E3DFF9F6700FF
+ 9D6500FF9B6400FF996200FF976000FF955E00FF935C00FF905A00FF8E5800FF
+ FFF7E8FFE2A274FFC44E02FF0000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FFED8316FFE7A762FFFFFFFFFFFFFFFFFF
+ DFC27FFFBE8300FFC08910FFCB9F3FFFCEA64FFFDBBD7EFFDABC7EFFD8BB7EFF
+ AF7600FFEBDBBCFFFFFDFAFFFFFDF9FFFFFDF9FFFFFDF8FFFFFCF7FFFFFCF6FF
+ F9F2E6FFE6D6B8FFDFCBA8FFCBAE7AFFBD995BFFAF843CFF9F6F1EFF905900FF
+ FFF8ECFFE2B28FFFC44E02FFC44E022000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FFEE8417FFF3B978FFFFFFFFFFFFFFFFFF
+ F7F0DFFFEFE0BFFFE6D09FFFDDC080FFD8B76FFFC99D40FFC79C40FFB37900FF
+ C0912FFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFFFFFDFAFFFFFDFAFFFFFDF9FF
+ FFFDF8FFFFFCF7FFFFFCF6FFFFFCF6FFFFFBF5FFFFFBF4FFFFFBF3FFFFFAF2FF
+ FFFAF0FFF0CFB4FFC44E02FFC44E024000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FFEF8517FFFECB8FFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF
+ FFFFFEFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFF
+ FFFDFAFFFFFDFAFFFFFDF9FFFFFDF8FFFFFCF8FFFFFCF7FFFFFCF6FFFFFBF5FF
+ FFFBF4FFEFE1D4FFC44E02FFC44E027000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FFEF8617FFFECC8FFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFDFFFFFEFDFF
+ FFFEFCFFFFFEFCFFFFFEFBFFFFFEFBFFFFFDFAFFFFFDF9FFFFFDF9FFFFFDF8FF
+ FFFCF7FFFFFCF6FFC25007FFC44E028000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FFEE9629FF769AB3FFE6F0F9FF80B3DFFF
+ BFD9EFFFBFD9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFF
+ FFFFFEFFFFFEFDFFFFFEFDFFFFFEFDFFFFFEFCFFFFFEFCFFFFFEFBFFFFFDFAFF
+ FFFDFAFFFFFDF9FFC8692BFFC44E02BF00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF1078BDFF66CDF1FFCCE9FBFF0087DFFF
+ 0088DFFF0078CFFF0079CFFF1075C7FF408DCFFF5097D3FF80B3DFFF9FC6E7FF
+ BFD9EFFFDFECF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ FFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFEFEFFFFFEFDFFFFFEFDFFFFFEFCFF
+ FFFEFCFFFFFEFBFFCF7F4AFFC44E02CF00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF00C7FBFF66E0FFFFCCECFFFF26B2FFFF
+ 00A7FFFF00A9FFFF00ACFFFF00AEFFFF00B1FFFF00A9F7FF00A2EFFF009EEBFF
+ 0090DFFF0091DFFF007DCFFF2090D7FF4093D3FF70AADBFF80B3DFFFAFD0EBFF
+ BFD9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFF
+ FFFEFDFFFFFEFDFFDC9D74FFC44E02FF00000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF00C5FFFF66DBFFFFCCECFFFF40B9FFFF
+ 00A4FFFF00A7FFFF00A9FFFF00ABFFFF00AEFFFF00B0FFFF00B3FFFF00B5FFFF
+ 00B8FFFF00BAFFFF00BCFFFF00BFFFFF00C1FFFF00C4FFFF00BAF7FF00B0EFFF
+ 00B2EFFF009ADFFF009BDFFF40AEE3FF40A8DFFF80C1E7FF8FBDE3FFBFD9EFFF
+ CFE3F2FFFFFFFEFFE2B699FFC44E02FFC44E0220000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF00BCFFFF66D6FFFFCCEBFFFF66C6FFFF
+ 00A1FFFF00A4FFFF00A6FFFF00A9FFFF00ABFFFF00ADFFFF00B0FFFF00B2FFFF
+ 00B5FFFF00B7FFFF00BAFFFF00BCFFFF00BEFFFF00C1FFFF00C3FFFF00C6FFFF
+ 00C8FFFF00CBFFFF00CDFFFF00D0FFFF00D2FFFF00D4FFFF00D7FFFF00D2FBFF
+ 00BEEFFF00C0EFFF4197ACFFC44E02FFC44E0240000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF00B3FFFF66D2FFFFCCEBFFFFA6DCFFFF
+ 009EFFFF00A1FFFF00A3FFFF00A6FFFF00A8FFFF00ABFFFF00ADFFFF00B0FFFF
+ 00B2FFFF00B4FFFF00B7FFFF00B9FFFF00BCFFFF00BEFFFF00C1FFFF00C3FFFF
+ 00C5FFFF00C8FFFF00CAFFFF00CDFFFF00CFFFFF00D1FFFF00D4FFFF00D6FFFF
+ 00D9FFFF00DBFFFF15D0E9FFC44E02FFC44E0270000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF00AAFFFF66CDFFFFCCEAFFFFCCEBFFFF
+ 8CD3FFFF4DBBFFFF26AFFFFF00A3FFFF00A5FFFF00A8FFFF00AAFFFF00ADFFFF
+ 00AFFFFF00B2FFFF00B4FFFF00B6FFFF00B9FFFF00BBFFFF00BEFFFF00C0FFFF
+ 00C2FFFF00C5FFFF00C7FFFF00CAFFFF00CCFFFF00CFFFFF00D1FFFF00D4FFFF
+ 00D6FFFF00D8FFFF00DBFFFFB8500EFFC44E028F000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF00A1FFFF73CDFFFFCCEAFFFFCCEAFFFF
+ CCEBFFFFCCEBFFFFCCECFFFFCCECFFFFB3E4FFFF99DBFFFF73CFFFFF66CCFFFF
+ 4DC5FFFF33BFFFFF26BDFFFF00B4FFFF00B6FFFF00B8FFFF00BBFFFF00BDFFFF
+ 00C0FFFF00C2FFFF00C5FFFF00C7FFFF00CAFFFF00CCFFFF00CEFFFF00D1FFFF
+ 00D3FFFF00D6FFFF00D8FFFF937141FFC44E02BF000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0280C44E02FF0098FFFF2697EDFF3394E7FF3395E7FF
+ 3395E7FF3395E7FF66B2EFFF66B2EFFF66B2EFFF66B2EFFF66B3EFFF99D0F7FF
+ 99D1F7FF99D1F7FF99D1F7FF99D2F7FFCCF0FFFF99E2FFFF99E3FFFF8CE0FFFF
+ 66D8FFFF66D9FFFF40D1FFFF33D0FFFF33D2FFFF0DCCFFFF00CBFFFF00CEFFFF
+ 00D0FFFF00D3FFFF00D5FFFF627D75FFC44E02FF000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0270C44E02FF626B7BFF626371FF626371FF626371FF
+ 626371FF316EA8FF316EA8FF316EA8FF316EA8FF316EA8FF316EA8FF2570B6FF
+ 0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF0078DFFF
+ 0D80E1FF3397E7FF3397E7FF3397E7FF3397E7FF409FE9FF66B6EFFF66B7EFFF
+ 33ADEFFF33AEEFFF4CB4E3FF948561FFC44E02FF000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0210C44E02BFC44E02FFC44E02FFC44E02FFC44E02FF
+ C44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FF
+ C44E02FFC44E02FFC44E02FFC44E02FFC44E02FFC44E02FFB85110FF935939FF
+ 935939FF935939FF935939FF935939FF935939FF7B5E55FF626371FF626371FF
+ 626371FF875B47FFC44E02FFC44E02FFC44E029F000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000C44E0240C44E0240C44E0240C44E0240C44E0240C44E0240
+ C44E0250C44E0280C44E0280C44E0280C44E0280C44E0280C44E0280C44E029F
+ C44E02BFC44E02BFC44E02BFC44E02BFC44E02BFC44E02BFC44E02EFC44E02FF
+ C44E02FFC44E02DFC44E028FC44E023000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 000000000000000000000000FFCFFFFFFFFF0000FF81FFFFFFFF0000FF001FFF
+ FFFF0000FF0001FFFFFF0000FE00001FFFFF0000FE000003FFFF0000FE000000
+ 3FFF0000FE00000007FF0000FE00000007FF0000FE00000003FF0000FE000000
+ 01FF0000FE000000007F0000FE000000003F0000FE000000001F0000FE000000
+ 000F0000FE000000000F0000FE000000000F0000FE000000001F0000FE000000
+ 007F0000FE00000000FF0000FE00000001FF0000FE00000001FF0000FE000000
+ 01FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000
+ 00FF0000FE00000000FF0000FE00000000FF0000FE00000000FF0000FE000000
+ 00FF0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000
+ 007F0000FE000000007F0000FE000000007F0000FE000000007F0000FE000000
+ 003F0000FE000000003F0000FE000000003F0000FE000000003F0000FE000000
+ 003F0000FE000000003F0000FE000000003F0000FE000000003F0000FFFE0000
+ 007F0000FFFFFFFFFFFF0000}
+ end
+ object LabelDescricao: TLabel
+ Left = 49
+ Top = 1
+ Width = 193
+ Height = 47
+ Align = alLeft
+ Caption = 'Hist'#243'rico de Tabelas'
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clNavy
+ Font.Height = -19
+ Font.Name = 'MS Sans Serif'
+ Font.Style = [fsBold]
+ ParentFont = False
+ Layout = tlCenter
+ ExplicitHeight = 24
+ end
+ end
+ object Panel2: TPanel
+ Left = 0
+ Top = 49
+ Width = 177
+ Height = 404
+ Align = alLeft
+ BevelOuter = bvNone
+ TabOrder = 1
+ object LabelUser: TLabel
+ Left = 7
+ Top = 8
+ Width = 36
+ Height = 13
+ Caption = '&Usu'#225'rio'
+ FocusControl = ComboUser
+ end
+ object LabelForm: TLabel
+ Left = 7
+ Top = 56
+ Width = 48
+ Height = 13
+ Caption = '&Formul'#225'rio'
+ FocusControl = ComboForm
+ end
+ object LabelEvento: TLabel
+ Left = 7
+ Top = 104
+ Width = 34
+ Height = 13
+ Caption = '&Evento'
+ FocusControl = ComboEvento
+ end
+ object LabelTabela: TLabel
+ Left = 7
+ Top = 152
+ Width = 33
+ Height = 13
+ Caption = '&Tabela'
+ FocusControl = ComboTabela
+ end
+ object ComboUser: TComboBox
+ Left = 7
+ Top = 24
+ Width = 163
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 0
+ OnChange = ComboUserChange
+ end
+ object ComboForm: TComboBox
+ Left = 7
+ Top = 72
+ Width = 163
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 1
+ OnChange = ComboUserChange
+ end
+ object BitBtn1: TBitBtn
+ Left = 16
+ Top = 304
+ Width = 145
+ Height = 25
+ Caption = '&Aplicar Filtro'
+ Enabled = False
+ TabOrder = 2
+ OnClick = BitBtn1Click
+ Glyph.Data = {
+ 36050000424D3605000000000000360400002800000010000000100000000100
+ 08000000000000010000530B0000530B0000000100000001000000310000004A
+ 0000005A0000006B0000007B0000219C390018AD390021AD390029BD390021AD
+ 4A0031CE4A0031CE5A0039D65A0039DE63004AEF6B004AEF730052EF730052EF
+ 7B006BF78C00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
+ FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00131313131313
+ 1313020213131313131313131313131313030902131313131313131313131313
+ 030D090213131313131313131313131303120902131313131313131313131313
+ 0312090213131313131313131313131303120902131313131313131313131313
+ 0312090213131313131313131313131303120902131313131313131313131303
+ 120D09000213131313131313131303120D0D0501000213131313131313031210
+ 0E0D070401000213131313130312110F0D0B0909040100021313130312110C0A
+ 0806090909040100021303030303030303030303030303030303131313131313
+ 1313131313131313131313131313131313131313131313131313}
+ end
+ object BitBtn2: TBitBtn
+ Left = 16
+ Top = 336
+ Width = 145
+ Height = 25
+ Caption = '&Excluir Hist'#243'rico'
+ TabOrder = 3
+ OnClick = BitBtn2Click
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FF1877EA1574E0FF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF1776E615
+ 73E7136FDC126ED30F6AC9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ FF00FFFF00FFFF00FF1676CA268BE5278CEB2184E3116CCF0C67C40B64BB0962
+ B4075CA9FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF258BD83EABEE45
+ B4F72687DD3DAAF41E80D50F69BF065BAA0458A004579A035495FF00FFFF00FF
+ FF00FFFF00FF01500A319CF739A4F41B6DC448B7FA2687DD41ADFA3BA7F81F81
+ D4197ACC065B9F025291FF00FFFF00FFFF00FF0B6344185F6901500A166AD425
+ 81CE1160C02889E340ACFE359EF23CA6FF3CA6FF2D95EFFF00FFFF00FFFF00FF
+ 06630925AC461CB62F1CB62F1CB62F01500A01500A196DA32380E12C8FEB38A3
+ FF38A1FFFF00FFFF00FFFF00FF096D111C9A3147F77936E5541CB62F0E912D12
+ 805B1CB62F1CB62F01500A01500AFF00FFFF00FFFF00FFFF00FFFF00FF1C982F
+ 18902935E05D21C2390CA015008600008300068E0F1DA6572D9197FF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FF035A0617992811AA1D018202007B0004
+ 8A0B005D01005D01FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ 1387232AD149048807005C00005D01046D0AFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FF0E78182CD44D068C09005400FF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF08690E2BCE49
+ 07960D005800FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FF0D82170C9D15005E00FF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF0B8913006501
+ FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
+ 00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ end
+ object BitBtn3: TBitBtn
+ Left = 16
+ Top = 368
+ Width = 145
+ Height = 25
+ Caption = '&Fechar'
+ TabOrder = 4
+ OnClick = BitBtn3Click
+ Glyph.Data = {
+ 36030000424D3603000000000000360000002800000010000000100000000100
+ 18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
+ FF00FFFF00FFFF00FFFF00FFFF00FF824B4B4E1E1FFF00FFFF00FFFF00FFFF00
+ FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF824B4B824B4BA64B4BA9
+ 4D4D4E1E1FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
+ 824B4B824B4BB64F50C24F50C54D4EB24D4E4E1E1F824B4B824B4B824B4B824B
+ 4B824B4B824B4BFF00FFFF00FFFF00FF824B4BD45859CB5556C95455C95253B7
+ 4F524E1E1FFE8B8CFB9A9CF8AAABF7B5B6F7B5B6824B4BFF00FFFF00FFFF00FF
+ 824B4BD75C5DD05A5BCF595ACF5758BD53564E1E1F23B54A13C14816BD480CBC
+ 41F7B5B6824B4BFF00FFFF00FFFF00FF824B4BDD6364D75F60D55E5FD55C5DC2
+ 575A4E1E1F2AB44D1CBF4C1EBC4C13BC45F7B5B6824B4BFF00FFFF00FFFF00FF
+ 824B4BE36869DD6566DA6364DE6667C6595B4E1E1F26B14916BC481BBB4910BB
+ 43F7B5B6824B4BFF00FFFF00FFFF00FF824B4BEB6D6EE26768E67E7FFAD3D4CC
+ 6E704E1E1FA5D89750D16F42C9662DC758F7B5B6824B4BFF00FFFF00FFFF00FF
+ 824B4BF27374E96C6DEB8182FCD1D3CF6E704E1E1FFFF2CCFFFFD7FFFFD4E6FC
+ C7F7B5B6824B4BFF00FFFF00FFFF00FF824B4BF87879F07576EE7273F07374D1
+ 65664E1E1FFCEFC7FFFFD5FFFFD3FFFFD7F7B5B6824B4BFF00FFFF00FFFF00FF
+ 824B4BFE7F80F77A7BF6797AF77779D76B6B4E1E1FFCEFC7FFFFD5FFFFD3FFFF
+ D5F7B5B6824B4BFF00FFFF00FFFF00FF824B4BFF8384FC7F80FB7E7FFE7F80DA
+ 6E6F4E1E1FFCEFC7FFFFD5FFFFD3FFFFD5F7B5B6824B4BFF00FFFF00FFFF00FF
+ 824B4BFF8889FF8283FF8182FF8283E073744E1E1FFCEFC7FFFFD5FFFFD3FFFF
+ D5F7B5B6824B4BFF00FFFF00FFFF00FF824B4B824B4BE27576FE8182FF8687E5
+ 76774E1E1FFAEBC5FCFBD1FCFBCFFCFBD1F7B5B6824B4BFF00FFFF00FFFF00FF
+ FF00FFFF00FF824B4B9C5657CB6C6DCF6E6E4E1E1F824B4B824B4B824B4B824B
+ 4B824B4B824B4BFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF824B4B82
+ 4B4B4E1E1FFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
+ end
+ object ComboEvento: TComboBox
+ Left = 7
+ Top = 120
+ Width = 163
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 5
+ OnChange = ComboUserChange
+ end
+ object ComboTabela: TComboBox
+ Left = 7
+ Top = 168
+ Width = 163
+ Height = 21
+ Style = csDropDownList
+ ItemHeight = 13
+ TabOrder = 6
+ OnChange = ComboUserChange
+ end
+ end
+ object Panel3: TPanel
+ Left = 177
+ Top = 49
+ Width = 636
+ Height = 404
+ Align = alClient
+ BevelOuter = bvNone
+ TabOrder = 2
+ object Splitter1: TSplitter
+ Left = 0
+ Top = 89
+ Width = 636
+ Height = 3
+ Cursor = crVSplit
+ Align = alBottom
+ end
+ object DBMemo1: TDBMemo
+ Left = 0
+ Top = 248
+ Width = 636
+ Height = 156
+ Align = alBottom
+ DataField = 'Obs'
+ DataSource = DataSource1
+ Font.Charset = ANSI_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ Font.Style = []
+ ParentFont = False
+ ReadOnly = True
+ ScrollBars = ssBoth
+ TabOrder = 0
+ end
+ object DBGrid1: TDBGrid
+ Left = 0
+ Top = 0
+ Width = 636
+ Height = 89
+ Align = alClient
+ DataSource = DataSource1
+ Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
+ ReadOnly = True
+ TabOrder = 1
+ TitleFont.Charset = DEFAULT_CHARSET
+ TitleFont.Color = clWindowText
+ TitleFont.Height = -11
+ TitleFont.Name = 'MS Sans Serif'
+ TitleFont.Style = []
+ Columns = <
+ item
+ Expanded = False
+ FieldName = 'UserName'
+ Title.Caption = 'Usu'#225'rio'
+ Width = 157
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'FormCaption'
+ Title.Caption = 'Formul'#225'rio'
+ Width = 157
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'Evento'
+ Title.Caption = 'Evento '
+ Width = 79
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'EventDate'
+ Title.Caption = 'Data do Evento'
+ Width = 65
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'EventTime'
+ Title.Caption = 'Hora do Evento'
+ Width = 65
+ Visible = True
+ end
+ item
+ Expanded = False
+ FieldName = 'TableName'
+ Width = 84
+ Visible = True
+ end>
+ end
+ object StringGrid1: TStringGrid
+ Left = 0
+ Top = 92
+ Width = 636
+ Height = 156
+ Align = alBottom
+ ColCount = 3
+ DefaultColWidth = 220
+ DefaultRowHeight = 21
+ FixedCols = 0
+ RowCount = 2
+ Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goRowSelect]
+ TabOrder = 2
+ ColWidths = (
+ 169
+ 220
+ 220)
+ end
+ end
+ object DataSource1: TDataSource
+ OnDataChange = DataSource1DataChange
+ Left = 224
+ Top = 121
+ end
+end
diff --git a/official/2.31RC1/UCHistorico/UCHist_Form.pas b/official/2.31RC1/UCHistorico/UCHist_Form.pas
new file mode 100644
index 0000000..1a78fa6
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/UCHist_Form.pas
@@ -0,0 +1,318 @@
+unit UCHist_Form;
+
+interface
+
+{$I 'UserControl.inc'}
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ UCHist_Base, Dialogs, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, DBCtrls, DB;
+
+Type TAuxObj = class(TObject)
+ Private
+ IdUser : Integer;
+end;
+
+type
+ TFrmHistorico = class(TForm)
+ Panel1: TPanel;
+ Image1: TImage;
+ LabelDescricao: TLabel;
+ Panel2: TPanel;
+ DataSource1: TDataSource;
+ Panel3: TPanel;
+ DBMemo1: TDBMemo;
+ Splitter1: TSplitter;
+ DBGrid1: TDBGrid;
+ LabelUser: TLabel;
+ ComboUser: TComboBox;
+ LabelForm: TLabel;
+ ComboForm: TComboBox;
+ BitBtn1: TBitBtn;
+ BitBtn2: TBitBtn;
+ BitBtn3: TBitBtn;
+ LabelEvento: TLabel;
+ ComboEvento: TComboBox;
+ LabelTabela: TLabel;
+ ComboTabela: TComboBox;
+ StringGrid1: TStringGrid;
+ procedure BitBtn1Click(Sender: TObject);
+ procedure BitBtn2Click(Sender: TObject);
+ procedure BitBtn3Click(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormShow(Sender: TObject);
+ procedure ComboUserChange(Sender: TObject);
+ procedure DataSource1DataChange(Sender: TObject; Field: TField);
+ private
+ DataSetHist : TDataSet;
+ procedure SetComBoValues;
+ { Private declarations }
+ public
+ fControl : TUCControlHistorico
+ { Public declarations }
+ end;
+
+implementation
+
+
+{$R *.dfm}
+
+procedure TFrmHistorico.BitBtn1Click(Sender: TObject);
+Var cSql : String;
+begin
+ cSql := Format('Select UH.%s as UserId, Uh.%s as Form , ' +
+ 'Uh.%s as Evento , Uh.%s as Obs, Uh.%s as FormCaption, Uh.%s as EventDate, Uh.%s as EventTime, uh.%s as TableName, '+
+ 'US.%s As UserName from %s UH, %s US where UH.%s = US.%s and Uh.%s = %s ',
+ [ fControl.TableHistory.FieldUserID ,
+ fControl.TableHistory.FieldForm ,
+ fControl.TableHistory.FieldEvent ,
+ fControl.TableHistory.FieldObs ,
+ fControl.TableHistory.FieldCaptionForm ,
+ fControl.TableHistory.FieldEventDate ,
+ fControl.TableHistory.FieldEventTime ,
+ fControl.TableHistory.FieldTableName ,
+ fControl.UserControl.TableUsers.FieldLogin ,
+ fControl.TableHistory.TableName ,
+ fControl.UserControl.TableUsers.TableName ,
+ fControl.TableHistory.FieldUserId ,
+ fControl.UserControl.TableUsers.FieldUserID ,
+ fControl.TableHistory.FieldApplicationID ,
+ QuotedStr(fControl.UserControl.ApplicationID) ]);
+
+ if ComboUser.ItemIndex <> 0 then
+ cSql := cSql + Format(' and US.%s = %s ',[fControl.UserControl.TableUsers.FieldLogin,QuotedStr(ComboUser.Text)]);
+
+ if ComboForm.ItemIndex <> 0 then
+ cSql := cSql + Format(' and UH.%s = %s ',[fControl.TableHistory.FieldCaptionForm,QuotedStr(ComboForm.Text)]);
+
+ if ComboEvento.ItemIndex <> 0 then
+ cSql := cSql + Format(' and UH.%s = %s ',[fControl.TableHistory.FieldEvent,QuotedStr(ComboEvento.Text)]);
+
+ if ComboTabela.ItemIndex <> 0 then
+ cSql := cSql + Format(' and UH.%s = %s ',[fControl.TableHistory.FieldTableName,QuotedStr(ComboTabela.Text)]);
+
+ cSql := cSql + Format(' order by Uh.%s, Uh.%s',[fControl.TableHistory.FieldTableName,fControl.TableHistory.FieldEventDate ]) ;
+
+ DataSetHist.Close;
+ DataSetHist := nil;
+ DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset( cSql );
+ DataSetHist.Open;
+ DataSource1.DataSet := DataSetHist;
+ BitBtn1.Enabled := False;
+end;
+
+procedure TFrmHistorico.BitBtn2Click(Sender: TObject);
+var cSql : String;
+begin
+ if MessageBox(Handle, pChar( fControl.Historymsg.Msg_LimpHistorico ) , pChar(fControl.HistoryMsg.Msg_MensConfirma),mb_YesNo) = ID_YES then
+ begin
+ cSql := '';
+
+ if ComboUser.ItemIndex <> 0 then
+ cSql := cSql + Format(' %s = %d ',[fControl.TableHistory.FieldUserID , TAuxObj(ComboUser.Items.Objects[ComboUser.ItemIndex]).IdUser ]);
+
+ if ComboForm.ItemIndex <> 0 then
+ cSql := cSql + Format(' and %s = %s ',[fControl.TableHistory.FieldCaptionForm,QuotedStr(ComboForm.Text)]);
+
+ if ComboEvento.ItemIndex <> 0 then
+ cSql := cSql + Format(' and %s = %s ',[fControl.TableHistory.FieldEvent,QuotedStr(ComboEvento.Text)]);
+
+ if ComboTabela.ItemIndex <> 0 then
+ cSql := cSql + Format(' and %s = %s ',[fControl.TableHistory.FieldTableName,QuotedStr(ComboTabela.Text)]);
+
+ If Length( trim( cSql ) ) <> 0 then
+ Begin
+ If UpperCase(trim(Copy( cSql , 1 , 4 ))) = 'AND' then
+ Delete(cSql,1,4);
+ cSql := Format('delete from %s where ',[fControl.TableHistory.TableName]) + cSql;
+ End
+ else
+ cSql := Format('delete from %s ',[fControl.TableHistory.TableName]) + cSql;
+ fControl.UserControl.DataConnector.UCExecSQL( cSql );
+ DataSetHist := Nil;
+ SetComBoValues;
+
+ If fControl.UserControl.LogControl.Active then
+ fControl.UserControl.Log( Format( fControl.HistoryMsg.Msg_LogEmptyHistory,[ fControl.UserControl.CurrentUser.UserName, QuotedStr(FormatDateTime('YYYYMMDDhhmmss', now)) ]),3);
+ end;
+end;
+
+procedure TFrmHistorico.BitBtn3Click(Sender: TObject);
+begin
+ close;
+end;
+
+procedure TFrmHistorico.FormClose(Sender: TObject;
+ var Action: TCloseAction);
+begin
+ Action := caFree;
+end;
+
+procedure TFrmHistorico.SetComBoValues;
+Var Aux : TAuxObj;
+Begin
+ Aux := TAuxObj.Create;
+ Aux.IdUser := -1;
+
+ ComboUser.Items.Clear;
+ ComboForm.Items.Clear;
+ ComboEvento.Items.Clear;
+ ComboTabela.Items.Clear;
+
+ ComboUser.Items.AddObject( fControl.HistoryMsg.Hist_All , Aux );
+
+ ComboForm.Items.Add ( fControl.HistoryMsg.Hist_All );
+
+ ComboEvento.Items.Add( fControl.HistoryMsg.Hist_All );
+ ComboEvento.Items.Add( fControl.HistoryMsg.Evento_Insert );
+ ComboEvento.Items.Add( fControl.HistoryMsg.Evento_Delete );
+ ComboEvento.Items.Add( fControl.HistoryMsg.Evento_Edit );
+ ComboEvento.Items.Add( fControl.HistoryMsg.Evento_NewRecord );
+
+ ComboTabela.Items.Add( fControl.HistoryMsg.Hist_All );
+
+ DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset(
+ Format('Select distinct %s from %s',[
+ fControl.TableHistory.FieldTableName,
+ fControl.TableHistory.TableName]));
+ while DataSetHist.Eof = False do
+ Begin
+ ComboTabela.Items.Add( DataSetHist.Fields[ 0 ].AsString );
+ DataSetHist.Next;
+ End;
+
+ DataSetHist := nil;
+ DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset(
+ Format('Select distinct %s from %s',[
+ fControl.TableHistory.FieldCaptionForm,
+ fControl.TableHistory.TableName ]));
+ while DataSetHist.Eof = False do
+ Begin
+ ComboForm.Items.Add( DataSetHist.Fields[ 0 ].AsString );
+ DataSetHist.Next;
+ End;
+
+ DataSetHist := nil;
+ DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset(
+ Format('Select %s, %s as Usuario from %s where %s = %s order by %s',
+ [ fControl.UserControl.TableUsers.FieldUserID,
+ fControl.UserControl.TableUsers.FieldLogin ,
+ fControl.UserControl.TableUsers.TableName ,
+ fControl.UserControl.TableUsers.FieldTypeRec,
+ QuotedStr('U') ,
+ fControl.UserControl.TableUsers.FieldLogin ]));
+
+ If fControl.UserControl.CurrentUser.Privileged = true then
+ Begin
+ while DataSetHist.Eof = False do
+ Begin
+ Aux := TAuxObj.Create;
+ Aux.IdUser := DataSetHist.Fields[ 0 ].AsInteger;
+ ComboUser.Items.AddObject( DataSetHist.Fields[ 1 ].AsString, Aux );
+ DataSetHist.Next;
+ End;
+ End
+ else
+ begin
+ Aux := TAuxObj.Create;
+ Aux.IdUser := fControl.UserControl.CurrentUser.UserID;
+ ComboUser.Items.AddObject( fControl.UserControl.CurrentUser.UserLogin, Aux );
+ end;
+
+
+ ComboUser.ItemIndex := 0;
+ ComboForm.ItemIndex := 0;
+ ComboEvento.ItemIndex := 0;
+ ComboTabela.ItemIndex := 0;
+
+
+ DataSetHist := nil;
+ DataSetHist := fControl.UserControl.DataConnector.UCGetSQLDataset(
+ Format('Select UH.%s as UserId, Uh.%s as Form , ' +
+ 'Uh.%s as Evento , Uh.%s as Obs, Uh.%s as FormCaption, Uh.%s as EventDate, Uh.%s as EventTime, uh.%s as TableName, '+
+ 'US.%s As UserName from %s UH, %s US where UH.%s = US.%s and Uh.%s = %s order by Uh.%s, uh.%s',
+ [ fControl.TableHistory.FieldUserId ,
+ fControl.TableHistory.FieldForm ,
+ fControl.TableHistory.FieldEvent ,
+ fControl.TableHistory.FieldObs ,
+ fControl.TableHistory.FieldCaptionForm ,
+ fControl.TableHistory.FieldEventDate ,
+ fControl.TableHistory.FieldEventTime ,
+ fControl.TableHistory.FieldTableName ,
+ fControl.UserControl.TableUsers.FieldLogin ,
+ fControl.TableHistory.TableName ,
+ fControl.UserControl.TableUsers.TableName ,
+ fControl.TableHistory.FieldUserId ,
+ fControl.UserControl.TableUsers.FieldUserID ,
+ fControl.TableHistory.FieldApplicationID ,
+ QuotedStr(fControl.UserControl.ApplicationID) ,
+ fControl.TableHistory.FieldTableName ,
+ fControl.TableHistory.FieldEventDate ]));
+
+ DataSource1.DataSet := DataSetHist;
+end;
+
+procedure TFrmHistorico.FormShow(Sender: TObject);
+begin
+ SetComBoValues;
+
+ Self.Caption := fControl.HistoryMsg.LabelDescricao;
+ BitBtn1.Caption := fControl.HistoryMsg.Hist_BtnFiltro;
+ BitBtn2.Caption := fControl.HistoryMsg.Hist_BtnExcluir;
+ BitBtn3.Caption := fControl.HistoryMsg.Hist_BtnFechar;
+
+ BitBtn2.Enabled := fControl.UserControl.CurrentUser.Privileged;
+
+
+ LabelDescricao.Caption := fControl.HistoryMsg.LabelDescricao;
+ LabelUser.Caption := fControl.HistoryMsg.LabelUser;
+ LabelForm.Caption := fControl.HistoryMsg.LabelForm;
+ LabelEvento.Caption := fControl.HistoryMsg.LabelEvento;
+ LabelTabela.Caption := fControl.HistoryMsg.LabelTabela;
+
+ DBGrid1.Columns[ 0 ].Title.Caption := fControl.HistoryMsg.LabelUser;
+ DBGrid1.Columns[ 1 ].Title.Caption := fControl.HistoryMsg.LabelForm;
+ DBGrid1.Columns[ 2 ].Title.Caption := fControl.HistoryMsg.LabelEvento;
+ DBGrid1.Columns[ 3 ].Title.Caption := fControl.HistoryMsg.LabelDataEvento;
+ DBGrid1.Columns[ 4 ].Title.Caption := fControl.HistoryMsg.LabelHoraEvento;
+ DBGrid1.Columns[ 5 ].Title.Caption := fControl.HistoryMsg.LabelTabela;
+
+ StringGrid1.Cells[0,0] := 'Campo';
+ StringGrid1.Cells[1,0] := 'Original';
+ StringGrid1.Cells[2,0] := 'Modificado para';
+end;
+
+procedure TFrmHistorico.ComboUserChange(Sender: TObject);
+begin
+ BitBtn1.Enabled := True;
+end;
+
+procedure TFrmHistorico.DataSource1DataChange(Sender: TObject;
+ Field: TField);
+Var List : TStringList; Aux : Integer; S : String;
+begin
+ DBMemo1.Visible := DataSource1.DataSet.FieldValues['Evento'] <> fControl.HistoryMsg.Evento_Edit;
+ StringGrid1.Visible := DataSource1.DataSet.FieldValues['Evento'] = fControl.HistoryMsg.Evento_Edit;
+ If StringGrid1.Visible Then
+ Begin
+ try
+ List := TStringList.Create;
+ List.Text := DataSource1.DataSet.FieldValues['Obs'];
+ StringGrid1.RowCount := List.Count + 1;
+ For Aux := 0 to List.Count - 1 do
+ Begin
+ S := List[ Aux ];
+ StringGrid1.Cells[ 0 , Aux + 1 ] := Copy(S,1,Pos('||',S)-1 );
+ Delete(S,1,Pos('||',s)+1);
+ StringGrid1.Cells[ 1 , Aux + 1 ] := Copy(S,1,Pos('||',S)-1 );
+ Delete(S,1,Pos('||',s)+1);
+ StringGrid1.Cells[ 2 , Aux + 1 ] := S;
+ End;
+
+ finally
+ FreeAndNil( List );
+ end;
+ End;
+end;
+
+end.
diff --git a/official/2.31RC1/UCHistorico/UCHist_Type.pas b/official/2.31RC1/UCHistorico/UCHist_Type.pas
new file mode 100644
index 0000000..9173c59
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/UCHist_Type.pas
@@ -0,0 +1,278 @@
+unit UCHist_Type;
+
+interface
+
+ uses SysUtils,Classes,Menus,ActnList;
+
+Type
+ TUCHistoryMSG = class(TPersistent)
+ private
+ fEvento_edit: String;
+ fEvento_NewRecord: String;
+ fEvento_Insert: String;
+ fEvento_delete: String;
+ fLabelTabela: String;
+ fMsg_LogEmptyHistory: String;
+ fMsg_MensConfirma: String;
+ fLabelDescricao: String;
+ fHist_BtnExcluir: String;
+ fHist_BtnFiltro: String;
+ fLabelForm: String;
+ fHist_BtnFechar: String;
+ fLabelDataEvento: String;
+ fLabelEvento: String;
+ fMsg_NewRecord: String;
+ fHist_All: String;
+ fMsg_LimpHistorico: String;
+ fLabelHoraEvento: String;
+ fLabelUser: String;
+ fHist_MsgExceptPropr: String;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ Property Evento_Insert : String read fEvento_Insert write fEvento_Insert;
+ Property Evento_Delete : String read fEvento_delete write fEvento_delete;
+ Property Evento_Edit : String read fEvento_edit write fEvento_edit;
+ Property Evento_NewRecord : String read fEvento_NewRecord write fEvento_NewRecord;
+ Property Hist_All : String read fHist_All Write fHist_All ;
+ Property Msg_LimpHistorico : String read fMsg_LimpHistorico Write fMsg_LimpHistorico ;
+ Property Msg_MensConfirma : String read fMsg_MensConfirma Write fMsg_MensConfirma ;
+ Property Msg_LogEmptyHistory : String read fMsg_LogEmptyHistory Write fMsg_LogEmptyHistory;
+ Property LabelDescricao : String read fLabelDescricao Write fLabelDescricao ;
+ Property LabelUser : String read fLabelUser Write fLabelUser;
+ Property LabelForm : String read fLabelForm Write fLabelForm ;
+ Property LabelEvento : String read fLabelEvento Write fLabelEvento;
+ Property LabelTabela : String read fLabelTabela Write fLabelTabela;
+ Property LabelDataEvento : String read fLabelDataEvento Write fLabelDataEvento;
+ Property LabelHoraEvento : String read fLabelHoraEvento Write fLabelHoraEvento;
+ Property Msg_NewRecord : String read fMsg_NewRecord Write fMsg_NewRecord;
+ Property Hist_MsgExceptPropr : String read fHist_MsgExceptPropr write fHist_MsgExceptPropr;
+ Property Hist_BtnFiltro : String read fHist_BtnFiltro write fHist_BtnFiltro;
+ Property Hist_BtnExcluir : String read fHist_BtnExcluir write fHist_BtnExcluir;
+ Property Hist_BtnFechar : String read fHist_BtnFechar write fHist_BtnFechar;
+ end;
+
+
+ TUCUserHistory = class(TPersistent) // armazenar menuitem ou action responsavel pelo historico
+ private
+ FAction: TAction;
+ FMenuItem: TMenuItem;
+ procedure SetAction(const Value: TAction);
+ procedure SetMenuItem(const Value: TMenuItem);
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property Action: TAction read FAction write SetAction;
+ property MenuItem: TMenuItem read FMenuItem write SetMenuItem;
+ end;
+
+ TUCTableHistorico = class(TPersistent)
+ private
+ FTable: String;
+ FApplicationID: String;
+ FUserID: String;
+ fDateEvent: String;
+ fFieldForm: String;
+ fFieldEvent: String;
+ fFieldObs: String;
+ fCaptionForm: string;
+ fEventTime: String;
+ fFieldTableName: String;
+ protected
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property TableName : String read FTable write FTable; // nome da tabela
+ property FieldApplicationID : String read FApplicationID write FApplicationID;
+ property FieldUserID : String read FUserID write FUserID;
+ property FieldEventDate : String read fDateEvent write fDateEvent;
+ property FieldEventTime : String read fEventTime Write fEventTime;
+ property FieldForm : String read fFieldForm write fFieldForm;
+ property FieldCaptionForm : string read fCaptionForm write fCaptionForm;
+ Property FieldEvent : String read fFieldEvent write fFieldEvent;
+ property FieldObs : String read fFieldObs write fFieldObs;
+ property FieldTableName : String read fFieldTableName write fFieldTableName; // grava o nome da tabela monitorada
+ end;
+
+ TUCHistTypeSavePostEdit = ( tpSaveAllFields , tpSaveModifiedFields );
+
+ TUCHistOptions = Class( TPersistent )
+ private
+ fSavePostEdit: Boolean;
+ fSavePostInsert: Boolean;
+ fSaveDelete: Boolean;
+ fSaveNewRecord: Boolean;
+ fTypeSave: TUCHistTypeSavePostEdit;
+ public
+ constructor Create(AOwner: TComponent);
+ destructor Destroy; override;
+ procedure Assign(Source: TPersistent); override;
+ published
+ property SaveNewRecord : Boolean read fSaveNewRecord write fSaveNewRecord;
+ property SaveDelete : Boolean read fSaveDelete write fSaveDelete;
+ property SavePostInsert : Boolean read fSavePostInsert write fSavePostInsert;
+ property SavePostEdit : Boolean read fSavePostEdit Write fSavePostEdit;
+ Property TypeSavePostEdit : TUCHistTypeSavePostEdit read fTypeSave Write fTypeSave;
+ end;
+
+
+implementation
+
+
+{ TUCHistoryMSG }
+
+procedure TUCHistoryMSG.Assign(Source: TPersistent);
+begin
+ if Source is TUCHistoryMSG then
+ Begin
+ Self.Evento_edit := TUCHistoryMSG(Source).Evento_edit;
+ Self.Evento_NewRecord := TUCHistoryMSG(Source).Evento_NewRecord;
+ Self.Evento_Insert := TUCHistoryMSG(Source).Evento_Insert;
+ Self.Evento_delete := TUCHistoryMSG(Source).Evento_Delete;
+ Self.LabelTabela := TUCHistoryMSG(Source).LabelTabela;
+ Self.Msg_LogEmptyHistory := TUCHistoryMSG(Source).Msg_LogEmptyHistory;
+ Self.Msg_MensConfirma := TUCHistoryMSG(Source).Msg_MensConfirma;
+ Self.LabelDescricao := TUCHistoryMSG(Source).LabelDescricao;
+ Self.Hist_BtnExcluir := TUCHistoryMSG(Source).Hist_BtnExcluir;
+ Self.Hist_BtnFiltro := TUCHistoryMSG(Source).Hist_BtnFiltro;
+ Self.LabelForm := TUCHistoryMSG(Source).LabelForm;
+ Self.Hist_BtnFechar := TUCHistoryMSG(Source).Hist_BtnFechar;
+ Self.LabelDataEvento := TUCHistoryMSG(Source).LabelDataEvento;
+ Self.LabelEvento := TUCHistoryMSG(Source).LabelEvento;
+ Self.Msg_NewRecord := TUCHistoryMSG(Source).Msg_NewRecord;
+ Self.Hist_All := TUCHistoryMSG(Source).Hist_All;
+ Self.Msg_LimpHistorico := TUCHistoryMSG(Source).Msg_LimpHistorico;
+ Self.LabelHoraEvento := TUCHistoryMSG(Source).LabelHoraEvento;
+ Self.LabelUser := TUCHistoryMSG(Source).LabelUser;
+ Self.Hist_MsgExceptPropr := TUCHistoryMSG(Source).Hist_MsgExceptPropr;
+ End
+ else
+ inherited;
+end;
+
+constructor TUCHistoryMSG.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCHistoryMSG.Destroy;
+begin
+ inherited;
+end;
+
+
+//------------------------------------------------------------------------------//
+
+{ TUCHistOptions }
+
+procedure TUCHistOptions.Assign(Source: TPersistent);
+begin
+ if Source is TUCHistOptions then
+ begin
+ Self.SaveNewRecord := TUCHistOptions(Source).SaveNewRecord;
+ Self.SaveDelete := TUCHistOptions(Source).SaveDelete;
+ Self.SavePostInsert := TUCHistOptions(Source).SavePostInsert;
+ Self.SavePostEdit := TUCHistOptions(Source).SavePostEdit;
+ Self.TypeSavePostEdit := TUCHistOptions(Source).TypeSavePostEdit;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCHistOptions.Create(AOwner: TComponent);
+begin
+ fSavePostEdit := true;
+ fSavePostInsert := true;
+ fSaveDelete := true;
+ fSaveNewRecord := true;
+ fTypeSave := tpSaveAllFields;
+end;
+
+destructor TUCHistOptions.Destroy;
+begin
+ inherited;
+end;
+
+//------------------------------------------------------------------------------//
+
+{ TUCTableHistorico }
+
+procedure TUCTableHistorico.Assign(Source: TPersistent);
+begin
+ if Source is TUCTableHistorico then
+ begin
+ Self.FieldApplicationID := TUCTableHistorico(Source).FieldApplicationID;
+ Self.FieldUserID := TUCTableHistorico(Source).FieldUserID;
+ Self.FieldEventDate := TUCTableHistorico(Source).FieldEventDate;
+ Self.TableName := TUCTableHistorico(Source).TableName;
+ Self.FieldForm := TUCTableHistorico(Source).FieldForm;
+ Self.FieldEvent := TUCTableHistorico(Source).FieldEvent;
+ Self.FieldObs := TUCTableHistorico(Source).FieldObs;
+ Self.FieldCaptionForm := TUCTableHistorico(Source).FieldCaptionForm;
+ Self.FieldEventTime := TUCTableHistorico(Source).FieldEventTime;
+ Self.FieldTableName := TUCTableHistorico(Source).FieldTableName;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCTableHistorico.Create(AOwner: TComponent);
+begin
+end;
+
+destructor TUCTableHistorico.Destroy;
+begin
+ inherited;
+end;
+
+{ TUCUserHistory }
+
+procedure TUCUserHistory.Assign(Source: TPersistent);
+begin
+ if Source is TUCUserHistory then
+ begin
+ Self.MenuItem := TUCUserHistory(Source).MenuItem;
+ Self.Action := TUCUserHistory(Source).Action;
+ end
+ else
+ inherited;
+end;
+
+constructor TUCUserHistory.Create(AOwner: TComponent);
+begin
+ inherited Create;
+end;
+
+destructor TUCUserHistory.Destroy;
+begin
+ inherited;
+end;
+
+procedure TUCUserHistory.SetAction(const Value: TAction);
+begin
+ FAction := Value;
+ if Value <> nil then
+ begin
+ Self.MenuItem := nil;
+ Value.FreeNotification(Self.Action);
+ end;
+end;
+
+procedure TUCUserHistory.SetMenuItem(const Value: TMenuItem);
+begin
+ FMenuItem := Value;
+ if Value <> nil then
+ begin
+ Self.Action := nil;
+ Value.FreeNotification(Self.MenuItem);
+ end;
+end;
+
+end.
diff --git a/official/2.31RC1/UCHistorico/UcHistReg.dcr b/official/2.31RC1/UCHistorico/UcHistReg.dcr
new file mode 100644
index 0000000..3b81f6e
Binary files /dev/null and b/official/2.31RC1/UCHistorico/UcHistReg.dcr differ
diff --git a/official/2.31RC1/UCHistorico/dcr/UCControlHistorico.bmp b/official/2.31RC1/UCHistorico/dcr/UCControlHistorico.bmp
new file mode 100644
index 0000000..1bf3cab
Binary files /dev/null and b/official/2.31RC1/UCHistorico/dcr/UCControlHistorico.bmp differ
diff --git a/official/2.31RC1/UCHistorico/dcr/UCHist_DataSet.bmp b/official/2.31RC1/UCHistorico/dcr/UCHist_DataSet.bmp
new file mode 100644
index 0000000..384b3e8
Binary files /dev/null and b/official/2.31RC1/UCHistorico/dcr/UCHist_DataSet.bmp differ
diff --git a/official/2.31RC1/UCHistorico/dcr/UcHistReg.rc b/official/2.31RC1/UCHistorico/dcr/UcHistReg.rc
new file mode 100644
index 0000000..1807941
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/dcr/UcHistReg.rc
@@ -0,0 +1,2 @@
+TUCControlHistorico BITMAP "UCControlHistorico.bmp"
+TUCHist_DataSet BITMAP "UCHist_DataSet.bmp"
diff --git a/official/2.31RC1/UCHistorico/dcr/make.bat b/official/2.31RC1/UCHistorico/dcr/make.bat
new file mode 100644
index 0000000..99c6099
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/dcr/make.bat
@@ -0,0 +1 @@
+brc32 -foUcHistReg.dcr -r -t UcHistReg.rc
\ No newline at end of file
diff --git a/official/2.31RC1/UCHistorico/pckHistorico.bdsproj b/official/2.31RC1/UCHistorico/pckHistorico.bdsproj
new file mode 100644
index 0000000..3cda098
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/pckHistorico.bdsproj
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+ pckHistorico.dpk
+
+
+ 7.0
+
+
+ 8
+ 0
+ 1
+ 1
+ 0
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ 0
+ 1
+ 1
+ 1
+ True
+ True
+ WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+
+ False
+
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ True
+ False
+ False
+ False
+ True
+ True
+ True
+ True
+ True
+ True
+
+
+
+ 0
+ 0
+ False
+ 1
+ False
+ False
+ False
+ 16384
+ 1048576
+ 4194304
+ UserControl Historico
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+ False
+
+
+ True
+ False
+
+
+
+ $00000000
+
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+
diff --git a/official/2.31RC1/UCHistorico/pckHistorico.dpk b/official/2.31RC1/UCHistorico/pckHistorico.dpk
new file mode 100644
index 0000000..90f248d
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/pckHistorico.dpk
@@ -0,0 +1,52 @@
+package pckHistorico;
+
+{$I 'UserControl.inc'}
+{$R *.res}
+{$ALIGN 8}
+{$ASSERTIONS ON}
+{$BOOLEVAL OFF}
+{$DEBUGINFO ON}
+{$EXTENDEDSYNTAX ON}
+{$IMPORTEDDATA ON}
+{$IOCHECKS ON}
+{$LOCALSYMBOLS ON}
+{$LONGSTRINGS ON}
+{$OPENSTRINGS ON}
+{$OPTIMIZATION ON}
+{$OVERFLOWCHECKS OFF}
+{$RANGECHECKS OFF}
+{$REFERENCEINFO ON}
+{$SAFEDIVIDE OFF}
+{$STACKFRAMES OFF}
+{$TYPEDADDRESS OFF}
+{$VARSTRINGCHECKS ON}
+{$WRITEABLECONST OFF}
+{$MINENUMSIZE 1}
+{$IMAGEBASE $400000}
+{$DESCRIPTION 'UserControl Historico'}
+{$IMPLICITBUILD OFF}
+
+requires
+ rtl,
+ dbrtl,
+ vcl,
+ vclactnband,
+ vcldb,
+ VclSmp,
+ pckMD5,
+ pckUCDataConnector,
+ pckUserControl_RT,
+ vclx,
+ {$IFDEF DELPHI12}
+ vclimg;
+ {$ELSE}
+ vcljpg;
+ {$ENDIF}
+
+contains
+ UCHist_Base in 'UCHist_Base.pas',
+ UCHistDataset in 'UCHistDataset.pas',
+ UCHist_Type in 'UCHist_Type.pas',
+ UCHist_Form in 'UCHist_Form.pas';
+
+end.
diff --git a/official/2.31RC1/UCHistorico/pckHistorico.dproj b/official/2.31RC1/UCHistorico/pckHistorico.dproj
new file mode 100644
index 0000000..0159d2f
--- /dev/null
+++ b/official/2.31RC1/UCHistorico/pckHistorico.dproj
@@ -0,0 +1,124 @@
+
+
+ {db94e44b-94f7-4352-ace8-34ac2dcbb2ce}
+ pckHistorico.dpk
+ Debug
+ AnyCPU
+ DCC32
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\pckHistorico.bpl
+ 12.0
+ Debug
+
+
+ true
+
+
+ true
+ Base
+ true
+
+
+ true
+ Base
+ true
+
+
+ 00400000
+ false
+ UserControl Historico
+ C:\Documents and Settings\All Users\Documentos\RAD Studio\6.0\Bpl\pckHistorico.bpl
+ true
+ true
+ 1
+ true
+
+
+ 7.0
+ False
+ False
+ 0
+ RELEASE;$(DCC_Define)
+
+
+ 7.0
+ DEBUG;$(DCC_Define)
+
+
+ Delphi.Personality.12
+ Package
+
+
+
+ False
+ True
+ False
+
+
+ True
+ False
+ 1
+ 0
+ 0
+ 0
+ False
+ False
+ False
+ False
+ False
+ 1046
+ 1252
+
+
+
+
+ 1.0.0.0
+
+
+
+
+
+ 1.0.0.0
+
+
+
+ pckHistorico.dpk
+
+
+
+ 12
+
+
+
+ MainSource
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Base
+
+
+ Cfg_2
+ Base
+
+
+ Cfg_1
+ Base
+
+
+
+
+
diff --git a/official/2.31RC1/UCHistorico/pckHistorico.res b/official/2.31RC1/UCHistorico/pckHistorico.res
new file mode 100644
index 0000000..fd84fb8
Binary files /dev/null and b/official/2.31RC1/UCHistorico/pckHistorico.res differ
diff --git a/official/2.31RC1/clean.bat b/official/2.31RC1/clean.bat
new file mode 100644
index 0000000..67b7895
--- /dev/null
+++ b/official/2.31RC1/clean.bat
@@ -0,0 +1,7 @@
+@echo off
+echo erasing...
+del /S *.local *.dcu *.ddp *.dsk *.~* *.cfg *.dsm *.identcache *.dof *.stat *humbs.db *.config
+del ??history* /s /a
+
+
+:LEAVE