Delphi - Pasar datos fuera del formulario

 
Vista:

Pasar datos fuera del formulario

Publicado por Ivan (5 intervenciones) el 16/06/2005 15:23:06
Tengo un pequeño problema... estoy haciendo un programa que se usará en una pantalla táctil. Estoy haciendo un teclado virtual numérico que, cuando presione un número, este se tendrá que escribir en un foco que está situado fuera del formulario.
No se si me explico bien...
Me han comentado que para hacer esto he de usar el evento WM_KEYDOWN o WM_KEYUP pero no consigo salirme con la mia...
Si se hace asi, no se como formular la sentencia para que el resultado sea el deseado.
Podéis ayudarme???
Grácias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pasar datos fuera del formulario

Publicado por beosman (163 intervenciones) el 17/06/2005 10:11:11
Supongo que hay varias formas, aunque es un poco complejo. Hay que darse cuenta de que cuando presionas sobre la ventana que contiene el teclado virtual, ésta gana el foco, por tanto la presión de un botón simulando una tecla no irá a la ventana deseada.

Para hacer puedes coger, justo cuando gana el foco la ventana del teclado virtual, la ventana que estaba activada previamente (no sé si se puede hacer) para luego enviarle un mensaje de tipo VM_KEYDOWN y WM_KEYUP con los parámetros pertinentes, y justamente después, volver a activarla. Repito que no sé si se puede saber cual fue la ventana activa antes de la tuya.

Otra forma es usar una característica de las ventanas que es que nunca ganen el foco. Esto se consigue poniendo en las características de la ventana la constante:

WS_EX_NOACTIVATE

Esto se pone sobreescribiendo la función del form CreateParams(...). Viene ayuda en Delphi. Ten en cuenta que esto sólo funciona en Windows XP.

Una vez que tienes la ventana, no se activa al hacer click en ella, por tanto es fácil coger la ventana activa y enviarle un mensaje del tipo anterior con los parámetros necesarios.

Espero que esto te sirva de ayuda, un saludo.

Diego :: beosman
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pasar datos fuera del formulario

Publicado por Ivan (5 intervenciones) el 17/06/2005 12:20:45
Muchisimas gracias por tu ayuda... la segunda solución que has dado me ha gustado mucho, pero ha y un problema... uso Win2000... :(
Luego, uso WM_KEYDOWN para enviar el mensaje... esta es la linia de código que uso...

--> PostMessage(edit1.Handle, WM_KEYDOWN, 51, 0);

Esto se lo pongo en el momento de hacer click en un boton. Al poner "edit1.handle", en el momento de presionar el boton, me envia el valor 51 (representa el número 3) y se visualiza en la caja de texto...

Luego he probado lo siguiente:

--> PostMessage(FindWindow(Nil, Pchar('Caption dl programa')), WM_close, 0, 0);

Esto busca una ventana de windows que tenga en el caption el nombre que le haya puesto entre comillas ' ', con WM_CLOSE lo cierra... y funciona. Entonces, x logica, e probado haciendo esto...

--> PostMessage(FindWindow(Nil, Pchar('Caption dl programa')), WM_KEYDOWN, 51, 0);

Así en teoria (yo pensava) debería enviar el valor 51 (número 3) a la ventana con el caption y enviarle el dato... no funciona :(

Con esto... alguien tiene alguna idea de como seguir?

Gracias otra vez...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar