Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mandar datos con patalla tactil (https://www.clubdelphi.com/foros/showthread.php?t=22434)

gryphus 15-06-2005 15:47:38

Mandar datos con patalla tactil
 
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

Mandar datos con patalla tactil
 
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...

Código:


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:

Código:



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...
Código:



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:
Código Delphi [-]
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:


La franja horaria es GMT +2. Ahora son las 23:54:19.

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