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); 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; {$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 if Timer1.Enabled then begin ATimer := True; Timer1.Enabled := False; end; dmConexion.ConfigurarConexion; if ATimer then Timer1.Enabled := True; end; procedure TfEditorLogin.FormCreate(Sender: TObject); begin FIntentos := 0; end; procedure TfEditorLogin.FormShow(Sender: TObject); begin Self.Caption := Self.Caption + ' - ' + AppFactuGES.AppVersion; 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.