Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   "Saltar" de campo (https://www.clubdelphi.com/foros/showthread.php?t=97774)

Angel.Matilla 21-10-2025 10:03:25

"Saltar" de campo
 
Buenos días. Sé que esto que voy a preguntar tiene que ser una tontería, pero no soy capaz de recordar como lo hacía en otras aplicaciones.

Tengo este panel:

Todos los campos son TLabeledEdit. En muchas aplicaciones que he hecho para pasar de uno TEdit al siguiente usaba bien la tecla TAB, que es lo habitual, o el retorno de carro y es esto último lo que no recuerdo donde y como implementarlo. Ya digo que tiene que ser una tontería pero ¡¡¡NO ME ACUERDO COMO LO HACÍA!!! y, encima, formularios en los que recuerdo que tenía ese código con el virus que me entró el año pasado se han ido a hace gárgaras.

Neftali [Germán.Estévez] 21-10-2025 10:36:45

Creo recordar que capturas la techa en el formulario y mandas un mensaje con el TAB.
Tendrás que tener la propiedad KeyPreview a True, para que el formulario las capture.

Si utilizar una formulario base con ese código y el resto los derivas de ese, lo tendrás para todos.

Neftali [Germán.Estévez] 21-10-2025 10:42:56

Define la propiedad KeyPreview a True y en el evento OnKeyDown colocas esto:

Código Delphi [-]
var
  AC: TWinControl;
begin
  if Key = VK_RETURN then
  begin
    AC := ActiveControl;
    // No interceptar Enter en controles multilínea o que necesiten enter:
    if Assigned(AC) then
      if (AC is TMemo) or (AC is TRichEdit) then
        Exit;
    // Se consume la tecla y se mueve al siguiente control.
    Key := 0;
    // si Shift está presionado, navegamos hacia atrás (como Shift+Tab)
    SelectNext(AC, not (ssShift in Shift), True);
  end;
end;

Angel.Matilla 21-10-2025 12:23:36

Muchas gracias a los dos. Gracias a vuestras respuestas encontré dónde lo hacía. Yo lo pongo en el OnKeyPress con este código:
Código:

void __fastcall TfRanFec::FormKeyPress(TObject *Sender, char &Key)
{
    switch (Key)
    {
          case 13:
              Key = 0;
              Perform(WM_NEXTDLGCTL, 0, 0);
              break;
          case 27:
              Key        = 0;
              this->Close();
    }
}

Me faltaba ese WM_NEXTDLGCTL, que era lo que no recordaba.


La franja horaria es GMT +2. Ahora son las 06:32:42.

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