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.