Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Utilizando un Actionlist (https://www.clubdelphi.com/foros/showthread.php?t=3611)

Carlos Arevalo 12-09-2003 23:06:33

Utilizando un Actionlist
 
Como podría desplazarme por los componentes de un formulario utilizando un Actionlist ?
Estuve probando con lo siguiente pero no me funciona:
Para desplazarme hacia adelante
SelectNext(TWinControl(Sender), true, true);
Y
SelectNext(TWinControl(Sender), false, true);
Para desplazarme hacia atrás.

Muchas gracias por la ayuda

Rudi 12-09-2003 23:49:48

Hola.
Cita:

Mensaje original de Carlos Arevalo
Para desplazarme hacia adelante
SelectNext(TWinControl(Sender), true, true);
Y
SelectNext(TWinControl(Sender), false, true);
Para desplazarme hacia atrás.

eso es correcto, lo que tienes que hacer es tener cuidado en la llamada, es decir sender debe ser el control sobre el cual estas parado o el activecontrol para ser mas generico.

supongo que creaste una accion llamada Adelante y otra llamada atras y en el execute de cada una colocaste el selectnext correspondiente, entonces en la llamada a esta accion debes pasar el control actual como parametro sender, es decir:
Código:

procedure TForm1.AdelanteExecute(Sender: TObject);
begin
  SelectNext(twincontrol(sender),true,true);
end;

procedure TForm1.AtrasExecute(Sender: TObject);
begin
  SelectNext(twincontrol(sender),false,true);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = #13) then
  if (GetKeyState(VK_SHIFT) and $80 = 0) then
  begin
    key := #0;
    AdelanteExecute(sender);
  end else
    AtrasExecute(sender);
end;

si esto es lo que quieres hacer, me parece mas facil y generico hacerlo en el onkeypress de la Form (recuerda de activar el keypreview de la Form), seria algo asi:
Código:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if (key = #13) and
    ((ActiveControl is TEdit) or (ActiveControl is TDBEdit)) then
  begin
    Key := #0;
    SelectNext(ActiveControl, GetKeyState(VK_SHIFT) and $80 = 0, True);
  end
end;

Nota: GetKeyState(VK_SHIFT) and $80 = 0 lo que hace es verificar si tienes la tecla shift oprimida junto con el enter para que funcione como el tab y el key := #0 es para evitar que suene una campanita.

espero que te sirva.

Carlos Arevalo 13-09-2003 01:31:51

Ok. gracias lo voy a probar

Carlos Arevalo 13-09-2003 18:01:33

Gracias Rudi por tu sugerencia, me funciono parcialmente y utilice lo siguiente y funciono perfecto:
SelectNext(TWinControl(Sender), GetKeyState(VK_SHIFT) and $80 = 0, True);
Pero al utilizar en el formulario varios Tpanel no brinca de un Tpanel al otro pero si utilizo la tecla de tabulacion si puedo recorrer el formulario completo.

Alguna sugerencia?

Rudi 13-09-2003 19:18:02

Hola carlos

No se que te estará pasando, lo acabo de probar con tpanel, con tgroupbox, directo sobre el form y lo hace perfecto.

por decirte algo verifica el keypreview de la forma y fijate si al llamar al metodo el codigo pasa por donde debe pasar, te lo digo por decirte algo pues aveces se nos olvida poner o quitar algo, bien sea una validacion o inicializar alguna variable.

Carlos Arevalo 13-09-2003 22:14:56

El problema es que tenia los Tpanel con la propiedad tabstop en true ya funciona bien

gracias nuevamente.


La franja horaria es GMT +2. Ahora son las 20:58:21.

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