En este truco, usaremos un fichero de memoria para poder compartir una zona de memoria, y poder así enviar datos de una aplicación a la otra.
Crearemos dos aplicaciones, una será la que escriba los datos y otra será la que los reciba.
En concreto, haremos que el texto de un TEdit se vea en el Label de otra aplicación.
Aplicación que escribe los datos:
unit Unit1; |
Aplicación que leerá los datos:
unit Unit1; |
Ahora compila y arranca la primera aplicacion y compila y arranca la segunda.
Lo que escribas en el Edit de una aplicacion saldrá en el Label de la otra.
El funcionamiento es el siguiente:
En la primera aplicación, creamos un fichero de memoria mediante:
{Creamos el fichero de memoria} |
que lo que hace es permitirnos compartir una zona de memoria.
Para facilitarnos el acceso a esta zona de memoria, la manejaremos mediante una estructura que nos hemos creado a tal efecto:
type |
Aqui debes tener cuidado... la estructura debe tener un tamaño definido, esto quiere decir... que no podrías hacer una estructura de este tipo:
type |
ya que la longitud de esta estructura dependería de la longitud de la string contenida en 'Cadena'.
Una vez creado el fichero, creamos un puntero a la zona de memoria a la que apunta el fichero, para poder escribir los datos en nuestra estructura:
{Direccionamos nuestra estructura al fichero de memoria} |
De tal manera que todo lo que escribamos a través de nuestra estructura, se escribirá en la zona de memoria del fichero de memoria, y será accesible para otras aplicaciones que mapeen el mismo fichero:
{Escribimos datos en el fichero de memoria} |
Ahora veamos cómo leer estos datos desde otra aplicación Delphi:
En este caso, en lugar de crear el fichero, lo abriremos para lectura.
{Miramos si existe el fichero} |
y generamos un error si no hemos sido capaces de abrirlo (por ejemplo porque no haya sido creado por la otra aplicación)
Una vez que el fichero ha sido abierto, activamos el Timer1, para que cada x tiempo refresque el Label1 con la cadena recibida desde la otra aplicación a través del fichero de memoria:
procedure TForm1.Timer1Timer(Sender: TObject); |
Ah, por último, decir que debemos cerrar tanto la vista del fichero de memoria como el propio fichero de memoria cuando terminemos de usarlos. Por ejemplo, en el evento OnDestroy de la form:
procedure TForm1.FormDestroy(Sender: TObject); |
Aqui está un nuevo ejemplo, basado en el anterior pero que utiliza un mensaje propio para avisar a la otra aplicación de que hay nuevos datos:
Enviado por: Arturo García (sArthur7@teleline.es)
Aplicación que escribe los datos
unit Trans; |
Aplicación que leerá los datos
unit Recep; |
Ref: http://www.trucomania.org/trucomania/truco.cgi?381&esp
No hay comentarios:
Publicar un comentario