Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saltar al control anterior, shift+tab. ¿COMO? (https://www.clubdelphi.com/foros/showthread.php?t=14780)

seldonito 30-09-2004 12:45:43

Saltar al control anterior, shift+tab. ¿COMO?
 
Saludos a todos y muchas gracias de antemano por vuestras respuestas.

Quisiera saber como ejecutar el shift+tab (que hace que vayas al control anterior) desde una tecla cualquiera (por ejemplo f2).

Tampoco sé si será mejor ejecutar shift+tab o hay alguna manera de saber cual es el el control anterior en el tab order y que ese contror coja el foco.

Muchas gracias de nuevo.

Neftali [Germán.Estévez] 30-09-2004 15:40:15

Cita:

Empezado por seldonito
...(que hace que vayas al control anterior) desde una tecla cualquiera (por ejemplo f2).

Una forma sencilla es hacerlo desde los eventos del form; Coloca la propiedad Preview del Form a True y el siguiente código en el evento OnKeyUp:

Código Delphi [-]
    
    if (key = VK_F2) then begin
      // Control anterior
      Self.Perform (WM_NEXTDLGCTL, Integer(0){Anterior}, 0);
     end;
    if (key = VK_F3) then begin
      // Control siguiente
      Self.Perform (WM_NEXTDLGCTL, Integer(1){siguiente}, 0);
    end;


Cita:

Empezado por seldonito
...Tampoco sé si será mejor ejecutar shift+tab o hay alguna manera de saber cual es el el control anterior en el tab order y que ese contror coja el foco
...

Bueno ésto lo que te va a hacer es ir al control anterior segun el TabOrder definido; Si lo que estás pensando es ir al control anterior de pantalla deberás utilizar una función que te lo calcule.
Puedes obtener la lista de controles del form a través de Components y componentesCount; Deberás buscar su Left y su Top para calcular cual es el "anterior" o "posterior" al tuyo (segun posición de pantalla) y no olvidarte de comprobar los contenedores de ambos controles (ya que si no puedes tener problemas cn controles en diferentes TAB's por ejemplo)

seldonito 01-10-2004 10:44:39

Prueba superada!!!!
 
Muchas gracias por la ayuda Neftalí. Con tus consejos al final lo he conseguido.

He conseguido poner el código en el evento AppMessage del formPrincipal por lo cual me sirve para todos los formularios de la aplicación.

Al final se ha quedado algo así, sé que es mejorable, por ahora no tengo demasiado tiempo, por lo que con que medio funcione me vale:
Código:

procedure TfrmPrincipal.AppMessage(var Msg: TMSg; var Handled:Boolean);
var
 actual : TWincontrol;
 tmp : TWincontrol;
 FrmActual: TForm;
 i: integer;
begin
 
  if ((Msg.wParam) = VK_F2) and (Msg.lParam>3500000) then
  begin
                TRY
                                FrmActual:=Screen.ActiveForm;
                                Actual := Screen.ActiveControl;
                                for i:=0 to FrmActual.ControlCount do
                                begin
                                                if (frmActual.Controls[i] is Twincontrol) then
                                                begin
                                                                tmp:=(frmActual.Controls[i] as twincontrol);
                                                                if (tmp.Parent=actual.Parent) and (tmp.tabOrder=actual.TabOrder-1) then
                                                                begin
                                                                                tmp.SetFocus;
                                                                                exit;
                                                                end;
                                                end;
                                end;
                except
                                actual.Parent.SetFocus;
                end;
  end;

end;


Leonard 09-02-2006 01:54:46

Saltar Foco Control Anterior
 
Hola a todos, Amigos Disculpen que no pueda comprender el codigo anterior, pero estoy trabajando en Delphi V.6 con un solo Formulario y lo que quiero en realidad es que cuando el usuario presione la tecla Arriba salte el foco al control anterior como si efectuaramos el un simple Shift+Tab, Poseo el siguiente codigo y me gustaria que me ayudaran en el siguiente codigo que debo poner en el codigo en Negrita.

Código Delphi [-]
procedure TFE_Clientes.FormCreate(Sender: TObject);
begin
    Application.OnMessage := Capturar_Mensajes; // Controla los Mensajes Windows
end;
 
procedure TFE_Clientes.Capturar_Mensajes(var Msg: TMSg; var Handled:Boolean);
var
    Actual : TWinControl;
Begin
    If Msg.message = WM_KEYDOWN Then
    Begin
// ------------------**-------------------
        If (Msg.wParam = VK_RETURN) Then 
        Begin
            Actual := Screen.ActiveControl; 
            If (Actual is TCustomEdit) 
            Then Msg.wParam := VK_TAB;
        End;
// ------------------**-------------------
        If Msg.wParam = VK_UP Then //Si Presiona Tecla Arriba
        Begin
            Actual := Screen.ActiveControl; 
            If (Actual is TCustomEdit) 
            Then Msg.wParam := VK_SHIFT+VK_TAB; 
        End; 
End;


La franja horaria es GMT +2. Ahora son las 12:57: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