Red de conocimientos turísticos - Conocimientos sobre calendario chino - Preguntas sobre los datos y bases de datos de Mapinfo

Preguntas sobre los datos y bases de datos de Mapinfo

1Devolución de llamada

Después de integrar la aplicación MapInfo en nuestro programa, MapInfo puede enviar información automáticamente al programa cliente. Por ejemplo, cuando cambia la ventana del mapa en la aplicación, MapInfo llamará al programa cliente para notificar el identificador de la ventana modificada. Este método de llamar a un programa cliente para invocar MapInfo cuando ocurre un evento se llama devolución de llamada.

Las devoluciones de llamada permiten a MapInfo enviar mensajes a programas cliente en las siguientes situaciones:

- Cuando el usuario interactúa con la ventana de MapInfo usando una herramienta personalizada

Por ejemplo , cuando Cuando el usuario hace clic y arrastra el mouse para dibujar una línea en la ventana del mapa de MapInfo, MapInfo puede enviar mensajes de coordenadas a la aplicación para cada punto que seleccione el usuario.

-Comando de menú seleccionado por el usuario

Por ejemplo, si la aplicación personaliza el menú contextual de MapInfo (es decir, el menú que aparece cuando el usuario hace clic derecho), luego, cuando el usuario selecciona el menú contextual del menú contextual, MapInfo notifica a la aplicación de este evento de menú cuando se selecciona un comando personalizado.

-Cambios en la ventana del mapa

Cuando el usuario cambia el contenido de la ventana del mapa (por ejemplo, agregando o eliminando capas, desplazando el mapa), MapInfo notifica a la aplicación de la ventana modificada. handle (¿Es similar al proceso de controlador propio de apasic: WinChangedHandler)?

El contenido de la barra de estado en MapInfo cambia

2 Implementación de devoluciones de llamada de MapInfo en P

Para utilizar las devoluciones de llamada de MapInfo, la aplicación debe poder actuar como servidor DDE o servidor de automatización OLE. Sin embargo, el soporte de P para los servicios de automatización OLE no es ideal. El autor y muchos colegas a mi alrededor probaron muchos métodos pero no lograron implementar la devolución de llamada. ¿Es cierto que la devolución de llamada de MapInfo no se puede utilizar en P? Después de revisar una gran cantidad de literatura, finalmente encontré una manera de implementar Callback. El principio se muestra en la Figura 1.

Figura 1 Implementar el esquema de devolución de llamada de MapInfo en P

Los pasos de implementación son los siguientes:

Abra el tablero de la biblioteca P, cree una nueva biblioteca P y asígnele un nombre. Ole [CD # * 3] Callack.pbl; Defina una variable inmediata: identificador entero; Cree un objeto de usuario personalizado invisible en la biblioteca: nuo [CD #*3] Callack y agréguele una función de objeto de usuario: subrutina pública uf [CD#*3]ini(entero Whnd), sin valor de retorno.

Agregue el siguiente código en su script:

handle=Whnd

Si desea reflejar la información de la barra de estado de MapInfo en la barra de estado del aplicación cliente, agregue una función de objeto de usuario llamada SetStatusText que tenga solo un parámetro de tipo cadena (cadena). Cuando MapInfo necesita notificar a una aplicación cada vez que cambia la ventana del mapa, agregue una función de objeto de usuario llamada WindowContentsChanged que solo toma un parámetro entero de cuatro bytes. Al utilizar un elemento de menú personalizado o un botón personalizado, si necesita notificaciones de MapInfo para su aplicación, debe agregar una función de objeto de usuario con el mismo nombre que el nombre del procedimiento almacenado del elemento de menú personalizado o botón personalizado y contener solo un parámetro de cadena. Debido a limitaciones de espacio, aquí solo agregamos una función de objeto de usuario llamada WindowContentsChanged. Los parámetros son: respuesta entera y sin valor de retorno.

Agrega el siguiente código al script:

send(handle,1024,0,as_response)/*Envía el mensaje del sistema pbm_custom01 a la ventana con handle como handle y envíalo a la ventana al mismo tiempo que_response*

Guarde el archivo de la biblioteca y compílelo en la biblioteca de enlaces de tiempo de ejecución Ole_Callack.pbd. Esta es la clave. La primera fase del trabajo se ha completado y utilizaremos esta biblioteca de enlaces en trabajos posteriores.

Cree una nueva biblioteca P llamada Callack_Test.plb en el tablero de dibujo de la biblioteca P, cree una nueva ventana DI w_main y una ventana de hoja de trabajo w_sheet como w_main.

Agregue un nuevo evento definido por el usuario para W_main: ue_MapInfoWCHnd número de evento para pbm_custom01 para recibir el identificador de ventana de MapInfo.

Escribe el código en el evento open de w_main de la siguiente manera:

openSheet(w_sheet,w_main)

Escribe el código en el evento ue_MapInfoWCHnd de w_main de la siguiente manera :

messagebox( "Prueba de devolución de llamada", "MapInfo devolvió la ventana del mapa modificada

El identificador es: "+cadena (como respuesta))

En w ?_sheet Escribe código en el evento abierto, escribe el código de la siguiente manera:

OleObject myPOleObject

myPOleObject=create OleObject/*Create Poweruilder OLE objeto de servicio de automatización**

int Errcode

ErrCode=myPOleObject.ConnectToNewObject("Poweruilder.Application")

Si ErrCode<>0 entonces

Messageox( "Error", " Error al conectarse al servidor Poweruilder, salga.")

Detener cerrar

end if

/* Esta es la biblioteca en cadena Ole[CD#*3]Callack compilamos anteriormente Ruta completa a pbd*/

myPOleObject.LibraryList="c:\ Callack.pbd"

myPOleObject.LibraryList="c:\ Callack.pbd"

MyPOleObject.LibraryList="c:\ Callack.pbd"