PDA

Ver la Versión Completa : Mandar datos con patalla tactil


gryphus
15-06-2005, 15:47:38
He de hacer un programa que, mediante una pantalla tactil y un teclado virtual numérico, envie el valor de la tecla que pulso a otro lugar... Como puedo hacer esto? Hay algun evento que lo permita ya?
Gracias! :)

gryphus
15-06-2005, 15:55:38
He de hacer un programa que, mediante una pantalla tactil y un teclado virtual numérico, envie el valor de la tecla que pulso a otro lugar... Como puedo hacer esto? Hay algun evento que lo permita ya?
Gracias! :)
Perdonad las molestias, me confundí de foro y lo puse en el de SQL, moderadores, lo siento, lo podéis borrar. :(

delphi.com.ar
15-06-2005, 15:55:48
Puedes hacerlo enviando un mensaje (WM_KEYDOWN, WM_KEYUP) si nececitas hacerlo a una ventana en particular, sino utilizando keybd_event para que lo reciba quien tiene el foco.

PD: ¿Conoces la herramienta de Teclado en Pantalla que trae Windows?

Saludos!

gryphus
15-06-2005, 16:14:47
No, no conozco esa herramienta... en que consiste??

delphi.com.ar
15-06-2005, 16:17:30
Es un tecladito en pantalla que hace exactamente lo que tu quieres hacer.

gryphus
15-06-2005, 16:28:34
A!!! Ok! Muchas grácias! Voy a probarlo. En quanto tenga una solución, o otra duda :P, te lo comunico ok?
Merci!
Chao

gryphus
16-06-2005, 08:47:40
El problema me persiste.... :(
A ver... sigo el consejo de Delphi.com.ar ya que creo que es la solución más lógica (y en parte es la que pensava antes pero no sabía como hacerlo...)
Ahora tengo el problema de que no se como crear la sentencia para que me salga el programa.
El texto que escriba en el teclado numérico virtual tiene que ir hacia otra ventana (pongo el ejemplo de que quiero escribir en el Word o en el Foro mismo) pero no se como hacerlo...
Plis... ;)
Grácias.

edit:
P.D. Parece ser que he encontrado una manera de hacer lo que quiero usando el WM_KEYDOWN, el problema es que solo me lo escribe en el mismo formulario. Hay alguna propiedad para que el formulario te quede en una especie de "segundo termino" para poder poner el foco en otra ventana y seguir viendo el teclado virtual?

gryphus
17-06-2005, 12:36:46
No se si no encontráis una solución para mi problema... yo he ido probando cosas pero no hay manera... he echo alguna prueba como esto...
El mayor problema es que necesito que el foco se mantenga en la pantalla en la que quiero escribir los numero y cuando aprieto un boton en mi aplicació el foco pasa cambia a mi aplicación. Supongo que la solución sería encontrar la manera de que el foco se mantenga en el mismo sitio sin pasar al programa.

Me han dicho que se puede desactivar que el foco se vaya al programa usando WS_EX_NOACTIVATE pero solo funciona en WinXP y yo uso 2000, y mis clientes también... :(

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...

delphi.com.ar
17-06-2005, 14:23:38
En un ratito hice esto, y funciona sin aparentes problemas:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormClick(Sender: TObject);
private
protected
procedure CreateParams(var Params: TCreateParams); override;
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := (Params.ExStyle or WS_EX_NOACTIVATE);
end;

procedure TForm1.FormClick(Sender: TObject);
begin
keybd_event(VK_RETURN, 0, 0, 0);
end;

end.


El problema que tienes al enviar el mensaje, es que seguramente se lo estas enviando al form contenedor, y no al editor que necesitas que lo reciba.

Saludos!

gryphus
17-06-2005, 15:41:17
Delphi.com.ar, te han dicho alguna vez que eres el amo?? xD Grácias, ya he solucionado el problema.
Ni probé a ver si funcionaba WS_EX_NOACTIVATE pues me habían comentado eso, que no funcionava con Win2000 y ya ni lo probé.
A más, tal como me has pasado el código hacía un enter :
Código Delphi:
keybd_event(VK_RETURN, 0, 0, 0);

de manera que lo he adaptado para que escriba un número. Tan solo se tiene que poner el código ASCII del número en cuestion y ya está.

Código Delphi:
keybd_event(49, 0, 0, 0);
(El número uno)

Grácias!!!! ;) :rolleyes: :p :cool: