unit PantallaAcceso;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  cxContainer, cxEdit, cxControls, cxTextEdit, ExtCtrls, StdCtrls,
  RdxBotones, RdxPaneles, pngimage, cxMaskEdit, cxDropDownEdit,
  cxImageComboBox, cxDBEdit, JvFormPlacement, JvComponent, JvAppStorage,
  JvAppRegistryStorage, cxGraphics, JvComponentBase;

type
  TfPantallaAcceso = class(TForm)
    pnlBarraSuperior: TRdxGradientePanel;
    pnlInferior: TPanel;
    bSalir: TRdxBoton;
    bAceptar: TRdxBoton;
    Shape1: TShape;
    eBienvenido: TLabel;
    eTexto: TLabel;
    lblFullName: TLabel;
    lblOrg: TLabel;
    Image1: TImage;
    imgFondo: TImage;
    Image2: TImage;
    imgSombra: TImage;
    Label1: TLabel;
    eEmpresa: TLabel;
    eVersion: TLabel;
    Image3: TImage;
    Shape2: TShape;
    Usuario: TcxTextEdit;
    Clave: TcxTextEdit;
    JvAppRegistryStorage1: TJvAppRegistryStorage;
    JvFormStorage1: TJvFormStorage;
    Timer1: TTimer;
    Label2: TLabel;
    cbBD: TcxComboBox;
    procedure bAceptarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure JvFormStorage1StoredValues0Save(Sender: TJvStoredValue;
      var AValue: Variant);
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    FRuta : String;
    property Ruta : String read FRuta write FRuta;
  public
    Version : string;
  end;

var
  fPantallaAcceso: TfPantallaAcceso;

implementation

{$R *.DFM}

uses
  Principal, BaseDatos, IB, Mensajes, Configuracion, StrFunc, SysFunc,
  Excepciones;

procedure TfPantallaAcceso.bAceptarClick(Sender: TObject);
begin
  dmBaseDatos.NombreBD := cbBD.Text;
  try
    Ruta := ListaBD.Values[cbBD.Text];
    dmBaseDatos.Conectar(Ruta, Usuario.Text, Clave.Text);
    JvFormStorage1.SaveFormPlacement;
    ModalResult := mrOk;
  except
    on E : EIBError do begin
      TratarExcepcion(E);
      Usuario.SetFocus;
    end;
  end;
end;

procedure TfPantallaAcceso.FormShow(Sender: TObject);
var
  i : integer;
begin
  eVersion.Caption := 'Versión: ' + Version;

  //Bases de datos
  cbBD.Properties.Items.Clear;
  for i := 0 to ListaBD.Count - 1 do
    cbBD.Properties.Items.Add(ListaBD.Names[i]);
  cbBD.Text := cbBD.Properties.Items.Strings[0];
  ConfigurarPantallaAcceso(Self);
end;

procedure TfPantallaAcceso.JvFormStorage1StoredValues0Save(
  Sender: TJvStoredValue; var AValue: Variant);
begin
  AValue := ExtractFilePath(Application.ExeName);
end;

procedure TfPantallaAcceso.FormActivate(Sender: TObject);
begin
  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 (cbBD.Properties.Items.Count < 2) and
    ((not EsCadenaVacia(Usuario.Text)) and (not EsCadenaVacia(Clave.Text))) then
    Timer1.Enabled := True;
end;

procedure TfPantallaAcceso.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  bAceptar.Click;
end;

end.
