Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ciclo infinito con enter.. como lo soluciono ? (https://www.clubdelphi.com/foros/showthread.php?t=73896)

Rofocale 23-05-2011 22:20:50

ciclo infinito con enter.. como lo soluciono ?
 
Código Delphi [-]
If (Key = VK_Return) then
               begin
                  txtcodigo.Text:= (''+idciu+'');
                  BuscaArticulo;
                  codebusqgrid.Visible:=False;
              end;

en buscar articulo al final tengo buttonagregar.setfocus para que se situe en el boton y poder yo apretar enter y agregar el articulo sin necesitad de utilizar el mouse.. pero el problema es que la rutina ahi como se ve es que si apreto enter me busca un articulo dependendiendo de que si txtcodigo ya tiene el codigo que se paso..

y a la vez cuando aprieto el boton con enter el articulo se agrega al grid normal pero vuelve a buscar el articulo y a posicionar el boton en focus..

ya que estoy utilizando el enter para las 2 cosas..

no se como hacerlo para que me funcione bien ... como lo haria ?

cuando tengo el codigo en el txt aprieto enter me busca el articulo y se posiciona el focus en el boton y de ahi aprieto enter y este es agregado al grid y al final se limpian los txt y el focus vuelve al edit.txt


alguien me ayuda ?

oscarac 23-05-2011 22:29:43

Cita:

Empezado por Rofocale (Mensaje 401026)
pero el problema es que la rutina ahi como se ve es que si apreto enter me busca un articulo dependendiendo de que si txtcodigo ya tiene el codigo que se paso..


no entiendo esto.. puedes explicar mejor?

BlueSteel 23-05-2011 22:34:33

en el evento onKeyPress del TxtCodigo puedes poner esto

Código Delphi [-]
If Key =#13 Then  
   Begin
             BuscaArticulo;
             btn_Agrega.SetFocus;  
   End;


en el evento del boton puedes poner algo

Código Delphi [-]
// Agrega articulo al Grid....
...
TxtCodigo.Clear
TxtCodigo.SetFocus;


espero que asi sea

Salu2:rolleyes:



ecfisa 23-05-2011 22:54:38

Hola Rofocale.

El código que adjuntas, ¿ Al evento OnKeyDown de que componente está asignado ?

Saludos.

Rofocale 23-05-2011 22:55:07

se pone el codigo en el edit apreto enter busca el articulo aparecen en los demas edits los datos y posiciona el focus en el boton agregar

ahora al darle enter el boton agrega los datos al grid pero el focus permanece en el y se busca de nuevo el mismo articulo es como si fuera infinito

el enter esta haciendo 2 veces el trabajo a la vez como si el focus siempre estuviera en el edit y al apretar enter este busca el articulo y al apretar enter otra ves el boton agrega y busca y devuelve el focus al boton

espero haberme explicado

Rofocale 23-05-2011 22:57:19

lo he puesto en el evento onkeyup del edit txtcodigo

ecfisa 23-05-2011 23:06:57

Hola.

¿ Podrías poner el código del evento OnClick del TButton ?

Saludos.

Rofocale 23-05-2011 23:20:07

Código Delphi [-]
                agregar;
                Total;
                txtCodigo.Clear;
                txtDescripc.Clear;
                txtPrecio.Clear;
                txtCantidad.Clear;
                btnAgregar.Enabled := False;
                btnEliminar.Enabled := True;
                btnPagar.Enabled := true;
                txtcodigo.setfocus

bueno lo solucione quitando txtcodigo.setfocus eso producia el bucle infinito.. pero ahora como puedo hacer para que al agregar este me devuelva el focus al edit

osea pongo el codigo y apreto enter busca y pone el focus en el boton apreto enter llena el grid.. y aqui tiene que devolver el focus al edit... ya que no devuelve el focus al edit...


sugerencias?

ecfisa 23-05-2011 23:36:57

Hola Rofocale.

En forma muy simplificada traté de reproducir la situación que creo haber entendido.
En la prueba no me provoca ciclo infinito, te pongo el código por si te da alguna idea o para que me aclares si te interpreté mal.

Código Delphi [-]
...
procedure TForm1.BuscarArticulo;
begin
  Panel1.Caption:= 'Buscar articulo';
  btn_Agrega.SetFocus;  // Foco en TButton
end;

procedure TForm1.AgregarArticulo;
begin
  Panel1.Caption:= 'Agregar articulo';
end;

procedure TForm1.btn_AgregaClick(Sender: TObject);
begin
  AgregarArticulo;
  txtcodigo.SetFocus;  // Foco en TEdit
end;

procedure TForm1.txtcodigoKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_RETURN) then
    BuscarArticulo;
end;

Saludos.

Al González 23-05-2011 23:40:27

Cita:

Empezado por Rofocale (Mensaje 401038)
sugerencias?

Plantear con más calma, claridad y extensión las preguntas, mostrar partes más completas de tu código. Y, si no es mucho pedir, usar comas y acentos.

Todo eso ayudará a que te entendamos mejor. ¿Cuál es la prisa? Respira, redacta la duda como te sugiero, léela antes de enviarla para ver si no te faltó dar una pieza de información importante, y entonces la publicas. Así es más probable que el problema quede resuelto pronto. :)

Por ir de prisa llegarás en último lugar.

Un tranquilo saludo.

Al.

Rofocale 23-05-2011 23:59:35

Bueno asi lo tenia antes... ahora me di cuenta que si pongo este codigo
Código Delphi [-]
       If (Key = VK_Return) then
               begin
                  txtcodigo.Text:= (''+idciu+'');
                  BuscaArticulo;
                  codebusqgrid.Visible:=False;

en onkeyup, entonces ahi es el problema de que los datos permanecen en el edit con el foco en el boton otra ves...

en cambio si lo pongo en onkey down si funciona.. a que se debe ?

por otro lado tengo otro problema, ese mismo codigo en el evento onkeyup si funcionaba la parte de
Código Delphi [-]
codebusqgrid.Visible:=False;
que es un grid que muestro al teclear para autocompletar los datos.
cuando apretaba enter este grid desaparecia, ahora que he movido el codigo al evento onkeydown el grid no desaparece...

a que se debe ?

luchifer 28-05-2011 04:48:48

Una vez trate de hacer un bucle infinito para un sorteo del cual debia salir cuando presionase una tecla, lamentablemente no pude y la mejor solucion que encontre fue la siguiente:

Código Delphi [-]
 
procedure TFsorteo.SpeedButton3Click(Sender: TObject);
var regis, contad:integer;
    sigue:boolean;
begin
   contad:=qconsulta.RecordCount;
   regis:=random(contad);
   if regis<1 then regis:=random(contad);
   qconsulta.First;
   contad:=1;
   sigue:=true;
   while sigue do
   begin
      qconsulta.Next;
      contad:=contad+1;
      if contad=regis then sigue:=false;
   end;
   dbg_clien.SetFocus;
end;

Encuentro un numero al azar comprendido entre el numero total de registros de la tabla y voy a dicho registro


La franja horaria es GMT +2. Ahora son las 10:47:59.

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