PDA

Ver la Versión Completa : Invocar procedimiento OnKeyDown


oscarac
02-03-2019, 04:39:53
buenas noches
tengo un edit que valida ciertos datos cuando se presiona ENTER
entonces en el procedimiento OnkeyDown hago una serie de validaciones

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

btnOpcion.Click;

con el OnkeyDown como seria?

se entiende?

dec
02-03-2019, 10:15:50
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:


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.