unit fdlgcajas;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  Tdlgcajas = class(TForm)
    vfecha: TDateTimePicker;
    eefectivo: TEdit;
    Label1: TLabel;
    econcepto: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    etarjeta: TEdit;
    btnAceptar: TButton;  // Botón Aceptar
    btnCancelar: TButton;
    Label5: TLabel;
    esalida: TEdit;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    // El evento OnClick de los botones ahora no necesita código,
    // ya que se gestiona con la propiedad ModalResult.
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  dlgcajas: Tdlgcajas;

implementation

{$R *.dfm}

// NOTA: Para que esto funcione, en el diseñador de formularios de Delphi
// debes hacer lo siguiente:
// 1. Selecciona el botón 'btnAceptar'.
// 2. En el Inspector de Objetos, busca la propiedad 'ModalResult'.
// 3. Asígnale el valor 'mrOk'.
//
// 4. Selecciona el botón 'btnCancelar'.
// 5. En el Inspector de Objetos, busca la propiedad 'ModalResult'.
// 6. Asígnale el valor 'mrCancel'.
//
// Al hacer esto, los botones cerrarán el formulario automáticamente
// devolviendo el resultado correcto, sin necesidad de escribir código
// en sus eventos OnClick.

procedure Tdlgcajas.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  // --- Lógica para la tecla Enter ---
  if Key = VK_RETURN then
  begin
    // Si el control con el foco NO es un botón, nos comportamos como la tecla TAB
    if not (ActiveControl is TButton) then
    begin
      // Marcamos la tecla como manejada para evitar el sonido y el procesamiento por defecto
      Key := 0;
      // Movemos el foco al siguiente control en el orden de tabulación
      SelectNext(ActiveControl, True, True);
    end;
    // Si el control activo SÍ es un botón, no hacemos nada.
    // El sistema ejecutará el evento OnClick del botón, que es lo que queremos.
  end;

  // --- Lógica para la tecla Escape ---
  if Key = VK_ESCAPE then
  begin
    // Marcamos la tecla como manejada y cerramos el formulario cancelando.
    Key := 0;
    btnCancelar.Click;
  end;
end;

procedure Tdlgcajas.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key='.') and (activecontrol is tedit) then
    begin
       key:=','
    end;

end;

end.

