FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema con SetFocus
Hola a todos, programo en C++ Builder 2007, quiero usar la función SetFocus del API de Windows, pero el problema es que se confunde con el SetFocus del propio CodeGear. Supongo que tendré que indicarle que quiero usar la función del API de Windows poniendo delante la clase o el namespace o algo, pero no sé cual es. He probado con Windows::SetFocus pero me dice que no es miembro de Windows.
Si alguien sabe como tengo que llamar a la función gracias de antemano. |
#2
|
|||
|
|||
Prueba con, “::SetFocus( Handle );”
|
#3
|
|||
|
|||
Gracias _cero_, así no me da error, otra forma de que no me de error es llamándola desde otra función fuera del evento onclick del botón. Pero de todas formas no me funciona no sé por que, pretendo mandar a el foco a otra aplicación para mandarle unas pulsaciones de teclado, para ello obtengo el manejador de la ventana con FindWindow y luego el SetFocus, pero no hace nada, la única forma en que consigo mandarle el foco es obteniendo el manejador y luego minimizando y maximizando la ventana, pero no me parece muy elegante.
Gracias por tu respuesta. |
#4
|
|||
|
|||
mmm tampoco estoy muy seguro de porque el set focus no funciona, supongo que necesitas hacer más con la aplicación externa (no sabría decirte que, revisa la MSDN), pero para sintetizar teclas yo uso el “keybd_event” el problema de esta función es que no manda teclas a una ventana sino a quien tiene el foco, así que lo que podrías hacer es:
1 evitar que tu aplicación reciba el foco. 2 poner darle el foco a la aplicación X. 3 usar “keybd_event” para sintetizar teclas. Te pongo código paso 1, esto va en el OnCreate Código:
long wsex=GetWindowLongPtr(Handle,GWL_EXSTYLE); wsex |= WS_EX_NOACTIVATE; SetWindowLongPtr(Handle,GWL_EXSTYLE,wsex); SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE+SWP_NOMOVE); Código:
String Cadena = "LAS LETRAS MAYUSCULAS"; for(int i = 1; i <= Cadena.Length(); i++) { keybd_event( Cadena[ i ], 0, 0, 0 ); keybd_event( Cadena[ i ], 0, KEYEVENTF_KEYUP, 0 ); } keybd_event( VK_RETURN, 0, 0, 0 ); // keybd_event( VK_RETURN, 0, KEYEVENTF_KEYUP, 0); //Mando un enter |
#5
|
|||
|
|||
Gracias por tus respuestas _cero_, de momento el tema del foco lo voy a dejar minizando la aplicación y maximizándola después, para salir del paso, si descubro por qué no me va el SetFocus lo postearé.
Muchas gracias. |
#6
|
|||
|
|||
Bueno he encontrado otra función que sí me va, SetForeGroundWindow(HANDLE), que me trae la ventana al frente y le da el foco. No sé que diferencias habrá entre esta función y SetFocus, pero el resultado me vale.
Saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Frame y setfocus | mjjj | Varios | 3 | 09-01-2008 19:49:57 |
SpeedButton SetFocus | lpedrazzi | Varios | 2 | 05-12-2007 16:23:18 |
SetFocus a un Edit en JavaScript | Ricardojosep | HTML, Javascript y otros | 2 | 25-10-2007 17:12:04 |
SetFocus en un Stringrid | jaime cotino | Varios | 1 | 03-06-2004 19:34:30 |
|