Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2019
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 1.870
Poder: 14
oscarac Va por buen camino
Invocar procedimiento OnKeyDown

buenas noches
tengo un edit que valida ciertos datos cuando se presiona ENTER
entonces en el procedimiento OnkeyDown hago una serie de validaciones

Código Delphi [-]
procedure TfrmValesdeConsumo.edtTrabajadorKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
Var _Trabajador :String;
begin
  _pasar := '1';
  if (Key = 13) or (key = VK_TAB) then
    Begin
      _Trabajador := edtTrabajador.Text;
      if not VerificarTrabajador (_Trabajador) then
       begin
          frmCatalogoTrabajador := TfrmCatalogoTrabajador.Create(nil);
          frmCatalogoTrabajador.FormStyle := fsNormal;
          frmCatalogoTrabajador.Position := poMainFormCenter;
          frmCatalogoTrabajador.Visible := False;
          frmCatalogoTrabajador.t_para := True;
          frmCatalogoTrabajador.ShowModal;
          frmCatalogoTrabajador.Free;
        end;

      edtTrabajador.Text := dmComedor.vResultTrabajador;
      _TipoTrabajador := dmComedor.vResultTrabajadorTipo;
      lblTrabajador.Caption := Trim(dmComedor.vResultTrabajadorDescripcion);

      if dmComedor.g_ESTADOTrabajador = 'A' Then
      Begin
        edtTrabajador.Text := '';
        MessageDlg('Cliente Anulado', mtError, [mbAbort], 0);
      end;


      if dmComedor.g_StatusTrabajador = 'X' Then
      Begin
        edtTrabajador.Text := '';
        MessageDlg('Cliente no puede consumir', mtError, [mbAbort], 0);
      end;
      if edtTrabajador.Text = '' then
        edtTrabajador.SetFocus;

      tblTrabajador.Locate('KOD', dmComedor.vResultTrabajador, []);
      _NORetail := False;
      _SubvTotal := False;
      _SoloComedor := False;

      _SubvTotal := iif (dmComedor.vResultTrabajadorSubvencion = '1', True, False);
      if tblTrabajadorFechaCese.Value <> 0 Then
      _SoloComedor := iif (tblTrabajadorFechaCese.Value <= Trunc(dmComedor.g_FECHA), True, False);

      _NORetail := iif (tblTrabajadorFT.AsString = 'x', True, False);

      if _SoloComedor Then  // Preguntar por la fecha
      Begin
        edtTrabajador.Text := '';
        MessageDlg('No puede consumir', mtError, [mbAbort], 0);
      End;


    end;
end;


la pregunta es....
como puedo ejecutar este procedimiento sin necesidad de presionar enter

por ejemplo
cuando quiero presionar un click en un botton seria algo asi

Código Delphi [-]
btnOpcion.Click;

con el OnkeyDown como seria?

se entiende?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 02-03-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.704
Poder: 28
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

El evento no deja de ser un método, por lo tanto, puedes llamarlo como cualquier otro método. De hecho, el método "Click" de "TControl" al final termina llamando al evento "OnClick", si este ha sido definido previamente. Dicho esto, es posible algo como lo siguiente:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Key: Word;
begin
  Key := 49; // ASCII = 1

  // Llamamos al método "FormKeyDown"
  Self.FormKeyDown(nil, Key, []);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ShowMessage(Chr(Key));
end;

... sin embargo, aunque lo anterior sea posible, no es lo más recomendable. Lo recomendable sería que la validación que tratas de hacer esté fuera del evento "KeyDown", en otro método, función o procedimiento, y, que uses dicha validación tanto en el evento "KeyDown", como en otro sitio en que la necesitases. En definitiva, se trata de desligar la validación del evento, precisamente, para no tener que llamar a dicho evento nosotros mismos, "inventándonos" argumentos, con los posibles problemas que eso puede suponer.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
invocar a una dll lestad Varios 3 07-03-2014 18:47:54
Invocar dll desde lenguaje web JuanPa1 .NET 3 07-01-2008 20:44:44
Error al invocar procedimiento en trigger Ken_Masters MySQL 1 27-10-2007 09:53:41
Invocar ADOStoredProc estopi Conexión con bases de datos 0 11-10-2006 14:54:50
invocar dll de forma asíncrona felixgo Varios 2 25-11-2005 12:03:23


La franja horaria es GMT +2. Ahora son las 06:34:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi