unit uEditorLogin; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, cxGraphics, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxImageComboBox, ImgList, PngImageList, pngimage, ToolWin, JvExControls, JvComponent, JvGradient, JvGIF, JvComponentBase, JvFormPlacement, JvAppStorage, JvAppRegistryStorage, uIEditorLogin, uUsuariosController; type TfEditorLogin = class(TForm, IEditorLogin) Panel1: TPanel; Label3: TLabel; Label4: TLabel; edtPassword: TEdit; bAceptar: TButton; bCancelar: TButton; Label1: TLabel; edtUser: TEdit; JvGradient1: TJvGradient; Button1: TButton; Timer1: TTimer; JvAppRegistryStorage1: TJvAppRegistryStorage; JvFormStorage1: TJvFormStorage; Image1: TImage; procedure bAceptarClick(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure edtUserKeyPress(Sender: TObject; var Key: Char); private FController : IUsuariosController; FIntentos : Integer; function GetController : IUsuariosController; procedure SetController (const AValue : IUsuariosController); published property Controller : IUsuariosController read GetController write SetController; end; implementation uses uFactuGES_App, uDataModuleConexion, uDisplayUtils; {$R *.dfm} { ********************************* TfEditorLogin ********************************** } procedure TfEditorLogin.bAceptarClick(Sender: TObject); var bOk : Boolean; begin Timer1.Enabled := False; ShowHourglassCursor; try bOK := FController.ComprobarUsuario(edtUser.Text, edtPassword.Text); finally HideHourglassCursor; end; if bOk then ModalResult := mrOK else begin Application.MessageBox('Usuario no válido. Compruebe si ha escrito correctamente' + #13 + #10 + 'el usuario y la contraseña.', 'Atención', MB_OK); Inc(FIntentos); if (Controller.MaxIntentosLogin > 0) and (FIntentos = Controller.MaxIntentosLogin) then ModalResult := mrCancel; end; end; procedure TfEditorLogin.ToolButton4Click(Sender: TObject); var ATimer : Boolean; begin ATimer := False; if Timer1.Enabled then begin ATimer := True; Timer1.Enabled := False; end; dmConexion.ConfigurarConexion; if ATimer then Timer1.Enabled := True; end; procedure TfEditorLogin.edtUserKeyPress(Sender: TObject; var Key: Char); begin // Desactivar el timer si el usuario escribe algo Timer1.Enabled := False; end; procedure TfEditorLogin.FormCreate(Sender: TObject); begin FIntentos := 0; end; procedure TfEditorLogin.FormDestroy(Sender: TObject); begin FController := NIL; end; procedure TfEditorLogin.FormShow(Sender: TObject); begin ScaleFormFont(Self); Self.Caption := AppFactuGES.AppFullName; // JvFormStorage1.RestoreFormPlacement; // Hacer login automática si hay usuario/password y no hay más de una base // de datos como opción para conectarse. if ((Length(edtUser.Text) > 0) and (Length(edtPassword.Text) > 0)) then Timer1.Enabled := True; end; function TfEditorLogin.GetController: IUsuariosController; begin Result := FController; end; procedure TfEditorLogin.SetController(const AValue: IUsuariosController); begin FController := AValue; end; procedure TfEditorLogin.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; bAceptar.Click; end; end.