Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   focus de los componentes de un ventana (https://www.clubdelphi.com/foros/showthread.php?t=81927)

odiseeus 04-01-2013 21:06:29

focus de los componentes de un ventana
 
Buen día,

tengo una duda respecto al focus, como se hace para saber cual es el orden y cual es el componente que tiene el foco y cual es el que le sigue.... por ejemplo si tengo cierta cantidad de Edit's en una ventana pero dependiendo de lo digitado en el primero los siguientes o solo algunos se desabilitan... como se le dice a la ventana que vaya al siguiente componente que puede tener el foco, sin utilizar la tabulación... ademas como hago para cambiar el comportamiento de cambio de foco para que no sea con tabulacion si no con otra tecla?.. por ejemplo enter... y desabilitar la tabulacion como cambio de foco entre los componentes.... Muchas gracias.

yo sé que los componentes y su orden de tomar el foco se guian por una propiedad llamada TabOrder que es un numero, entonces la ventana activa debe mantener ese numero en algún lado... como hago para decirle a la aplicacion tome el componente con el taborder 6 por ejemplo... gracias y espero haberme explicado...

TOPX 04-01-2013 22:01:26

Saludos,

Cita:

Empezado por odiseeus (Mensaje 452919)
cual es el orden y cual es el componente que tiene el foco y cual es el que le sigue....

Por favor revise el método GetTabOrderList de la forma (si desciende de TWinControl).

Cita:

Empezado por odiseeus (Mensaje 452919)
ademas como hago para cambiar el comportamiento de cambio de foco para que no sea con tabulacion si no con otra tecla?.. por ejemplo enter... y desabilitar la tabulacion como cambio de foco entre los componentes

En el evento OnKeyPress, si aplica para su TEdit, puede capturar la tecla "Enter" (vk_return) pulsada y llamar al método SelectNext de la forma (si desciende de TWinControl).

Y en el evento OnKeyUp/OnKeyDown, puede capturar la tecla "Tab" (vk_tab) pulsada y hacer lo propio. Aunque, si no me equivoco, podría optar mejor por capturar el mensaje de Windows cm_dialogkey, para la forma completa.

-

odiseeus 07-01-2013 03:57:54

gracias, :) .... me sirvió de guía pero me encantaría saber un poco mas exacto como puedo anular el tab como cambio de foco entre los componentes.. gracias.

ecfisa 08-01-2013 03:13:48

Cita:

Empezado por odiseeus (Mensaje 452990)
gracias, :) .... me sirvió de guía pero me encantaría saber un poco mas exacto como puedo anular el tab como cambio de foco entre los componentes.. gracias.

Hola.

En este ejemplo, anulo la tecla Tab como generadora del cambio de foco y le doy esta función a la tecla F2.

Unit1.h:
Código:

...
private:       
  TMessageEvent OldMessageEvent;
  void __fastcall ApplicationMessage(tagMSG &msg, bool &handled);
...

Unit1.cpp:
Código:

...
void __fastcall TForm1::ApplicationMessage(tagMSG &msg, bool &handled)
{
  if (msg.message == WM_KEYDOWN)
    switch (msg.wParam) {
      case VK_TAB  : handled = true; break;  // TAB
      case VK_F2: msg.wParam = VK_TAB; break; // F2 = TAB
    }
}


void __fastcall TForm1::FormCreate(TObject *Sender)
{
  OldMessageEvent = Application->OnMessage;
  Application->OnMessage = ApplicationMessage;
}

//...

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 Application->OnMessage = OldMessageEvent;
}
...

Podes asignar el comportamiento a otra tecla, o a ninguna como en este código:
Código:

void __fastcall TForm1::ApplicationMessage(tagMSG &msg, bool &handled)
{
  if (msg.message  == WM_KEYDOWN && msg.wParam == VK_TAB)
    handled = true;
}

Saludos.

odiseeus 08-01-2013 18:45:14

Muchas gracias ecfisa... siempre tan explicito... :) ... gracias... completamente entendido, lo probaré... gracias :D


La franja horaria es GMT +2. Ahora son las 05:32:17.

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