Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar delphi7.0 para operar mapinfo electrónicamente (urgente)

Cómo utilizar delphi7.0 para operar mapinfo electrónicamente (urgente)

Tomando la aplicación Delphi como ejemplo, presenta en detalle cómo utilizar la tecnología de automatización OLE para integrar y desarrollar aplicaciones MapInfo. Este artículo presenta el uso de llamadas OLE y funciones de devolución de llamada. Finalmente, se utiliza un ejemplo para ilustrar cómo utilizar el método propuesto en este artículo en aplicaciones prácticas.

Palabras clave: automatización OLE; integración de mapas MapInfo

1 Descripción general

MapInfo Professional 6.0 es una plataforma de desarrollo de sistemas de información geográfica de escritorio desarrollada por la empresa estadounidense MapInfo. Debido a que es pequeño y exquisito, fácil de aprender y usar, y tiene potentes funciones de recopilación, almacenamiento y análisis de datos espaciales, se ha convertido en el sistema de información geográfica de escritorio más popular del mundo. Actualmente, existen tres formas principales de desarrollar aplicaciones utilizando MapInfo. Simplemente se desarrollan con MapBasic, se integran con el desarrollo secundario utilizando herramientas de programación visual y se desarrollan con MapX.

Entre estos tres métodos, la programación MapBasic simple rara vez se usa debido a la falta de un entorno de programación visual y un ciclo de desarrollo largo, mientras que los dos últimos métodos se usan más comúnmente en aplicaciones prácticas.

Las aplicaciones desarrolladas con MapX son un método de desarrollo popular porque no requieren soporte de MapInfo en segundo plano, por lo que se ejecutan rápido, son pequeños y flexibles. Sin embargo, MapX no implementa todas las funciones de MapInfo y aún falta la capacidad de generar y editar mapas. Creo que con el lanzamiento de versiones superiores de MapX, este método de desarrollo se volverá cada vez más popular.

El desarrollo integrado con herramientas de programación visual consiste en utilizar herramientas de programación visual (VC, VB, Delphi, etc.) para desarrollar interfaces de usuario que no tienen nada que ver con funciones de información geográfica en primer plano y llamar a MapInfo en en segundo plano cuando están involucradas funciones de información geográfica. De hecho, la ventana del mapa está integrada en aplicaciones desarrolladas en otros lenguajes de programación y MapInfo se controla enviando comandos a otros lenguajes de programación. Este método puede crear una interfaz hermosa y amigable a voluntad y realizar casi todas las funciones de MapInfo, especialmente cuando es necesario agregar funciones de administración de información geográfica al sistema de aplicación maduro original. Este método funciona muy bien.

Introducción a dos métodos de llamada OLE

Hay dos formas principales para que las aplicaciones envíen comandos a MapInfo:

Una es utilizar tecnología DDE entre MapInfo y el aplicación establece comunicación entre ellos. Una sesión DDE es el proceso mediante el cual dos aplicaciones de Windows intercambian información. Puede haber una sesión DDE entre dos aplicaciones habilitadas para DDE sólo si se ejecutan simultáneamente. En una sesión, solo una aplicación está activa y se convierte en cliente, mientras que la aplicación pasiva se convierte en servidor. En funcionamiento real, MapInfo actúa como un servidor y es llamado por las aplicaciones cliente.

Otro método para enviar comandos a MapInfo es la tecnología de automatización OLE. MapInfo permite que otras aplicaciones que admiten funciones OLE llamen a MapInfo como un objeto. MapInfo actúa como un servidor OLE y proporciona sus objetos a otras aplicaciones, mientras que las aplicaciones cliente consumen sus objetos. Otras aplicaciones manipulan MapInfo llamando a métodos y propiedades de objetos de automatización OLE.

En aplicaciones prácticas, OLE es un método comúnmente utilizado porque es más estable y confiable que DDE, y también puede informar errores de ejecución de MapInfo, pero DDE no puede obtener códigos de error de MapInfo. Este artículo analiza principalmente el desarrollo integrado basado en la automatización OLE.

Tomando la integración de MapInfo por parte de Delphi como ejemplo, el método de desarrollo integrado automatizado usando OLE es el siguiente:

a) Iniciar MapInfo

Iniciar MapInfo en el cliente el programa es a través Se implementa la siguiente declaración:

var ole mapinfo: Variant; //Declarar una variable de tipo OLE Variant en la aplicación Delphi.

oleMapInfo:= create ole object('MapInfo.Application');

La función es crear una instancia del servidor de automatización MapInfo. La declaración anterior asigna el valor de retorno de la función a la variable de tipo variante oleMapInfo. Mediante la declaración anterior, el objeto oleMapInfo se define como una instancia de MapInfo. En las siguientes operaciones, OleMapInfo es equivalente a un servidor MapInfo, y la aplicación Delphi es equivalente a administrar y operar oleMapInfo llamando a oleMapInfo.

b) Llamar a los métodos y propiedades de la instancia de MapInfo.

El objeto OleMapInfo tiene los siguientes métodos y propiedades

Destino

Métodos

Propiedades

Aplicación

Do, Eval, RunCommand, SetCallBack, RunMenuCommand, DataObject,

Nombre, Aplicación, Padre, Versión, Visibilidad, LastErrorCode, etc.

Llamar a diferentes métodos y atributos en una aplicación puede lograr diferentes funciones, entre las cuales:

1) Enviar instrucciones de método a MapInfo.

Después de iniciar MapInfo, puede enviarle instrucciones MapBasic para permitirle implementar las funciones correspondientes a las declaraciones MapBasic. Por ejemplo, la siguiente instrucción se abre y llama en un mapa:

msg string: = ' Open Table " D:\Map\Map 1. Tab "Interactive";

oleMapInfo. do(msg string);

msg string: = 'Mapa del mapa 1';

oleMapInfo. El método más utilizado en desarrollo, básicamente se implementan algunas funciones importantes con él.

(1) Regeneración de la ventana MapInfo

Al iniciar MapInfo, el primer paso suele ser regenerar. la ventana MapInfo:

msg string: = ' Establecer el siguiente documento principal ' swin hand ' Estilo 1 '//sWinHand es donde Delphi sostiene MapInfo El identificador del control de la ventana;

oleMapInfo. do(msg string);

Cuando se ejecuta la instrucción anterior, el cuadro de diálogo MapInfo y el mensaje de error serán propiedad del programa cliente. ② Ejecute directamente el programa Mapbasic

A veces, en el desarrollo secundario, es necesario llamar al programa MapBasic ya preparado para implementar funciones específicas. La implementación específica es la siguiente:

MsgString: = 'Ejecutar aplicación" D:\MapBasic\DrawArc. MBX"';

oleMapInfo.do(msg string);

③Redefina el menú contextual de MapInfo.

Esta es una función muy práctica. Desarrollador usted Puede agregar o modificar el menú contextual de la ventana del mapa de MapInfo según las necesidades reales, o incluso bloquear completamente el menú contextual de MapInfo:

MsgString:= 'Crear menú" acceso directo al mapeador " ID 17 As "(-" '; // Bloquear el menú contextual

oleMapInfo.

do(msg string);

2) Método de evaluación: obtiene el valor de retorno de MapInfo.

El método Eval de oleMapInfo puede devolver el valor en MapInfo al programa cliente. Este método es necesario cuando el programa cliente necesita obtener información del mapa. Las siguientes declaraciones devuelven las coordenadas horizontales y verticales del centro del mapa al programa cliente:

msg string:= 'MapperInfo(window id(0),3)';

CenterLongitude := oleMapInfo. eval(cadena de mensaje);

cadena de mensaje:= 'MapperInfo(id de ventana(0), 4)';

CenterLatitude:= oleMapInfo. eval(msg string);

//MapperInfo es una función intrínseca de MapInfo.

3) Método RunMenuCommand: llama al menú MapInfo.

Utilice el método RunMenuCommand para implementar fácilmente la función del menú MapInfo. En MapInfo, cada función del menú corresponde a un número de identificación, y el número de identificación correspondiente a cada menú se puede encontrar en el menú. Archivo DEF en el directorio de instalación de MapBasic. Por ejemplo, cuando se presiona el botón del programa cliente, aparecerá el cuadro de diálogo Cambiar vista de MapInfo (correspondiente al elemento de menú Cambiar vista del menú del mapa en MapInfo). Simplemente responda al evento OnClick de este botón y llame al método RunMenuCommand de oleMapInfo:

Procedimiento TFormMap.cmdChangeViewClick (remitente: al objeto);

Inicio

oleMapInfo. RunMenuCommand(805);

//805 es el valor correspondiente a MEMU M_MAP_CHANGE_VIEW. Excelente

Fin;

Usando el mismo método, el botón correspondiente en la barra de herramientas principal de MapInfo también se puede integrar en la aplicación. El número de ID correspondiente al botón de la barra de herramientas también se puede encontrar en MENU.DEF.

3 Utilice el mecanismo de devolución de llamada para obtener información de MapInfo

En el desarrollo secundario de la integración, el mecanismo de devolución de llamada generalmente se utiliza para obtener información de MapInfo. La llamada devolución de llamada se refiere al mecanismo mediante el cual MapInfo envía automáticamente mensajes a la aplicación cliente a través de objetos de automatización OLE cuando ocurre un evento en la ventana del mapa de MapInfo integrada con el programa cliente.

Utilizando el mecanismo de devolución de llamada, MapInfo puede enviar información al programa cliente en las siguientes circunstancias:

1) Comando para ejecutar la barra de menú o el botón de herramienta en apinfo.

2) La ventana gráfica cambia.

La barra de estado de MapInfo cambia (el usuario mueve el ratón sobre el mapa).

El programa cliente puede recibir la información correspondiente y procesarla en su propio método definido. Por lo tanto, puede utilizar el mecanismo de devolución de llamada para implementar las siguientes funciones en la aplicación:

1) Definir el menú contextual de MapInfo.

2) Interactuar con MapInfo a través de herramientas personalizadas.

3) Controla el mapa modificado.

4) Personalizar el contenido que se muestra en la barra de estado del programa cliente.

La devolución de llamada es un punto difícil en el desarrollo secundario de la integración de automatización OLE. Su idea central es que el servidor MapInfo envíe mensajes al programa cliente. Tomando como ejemplo la barra de estado de un programa cliente personalizado, el mecanismo de devolución de llamada se puede utilizar de la siguiente manera:

1) Cree una clase y defina el método SetStatusText.

Este método toma un parámetro StatusText de tipo WideString. MapInfo pasa este parámetro al programa cliente.

En Delphi6.0, seleccione Archivo | Nuevo | ActiveX | Objeto de automatización y abra el editor "Biblioteca de tipos" iniciando el Asistente de objetos de automatización. Supongamos que el nombre de la clase creada aquí es TmyCallBack.

2) Añade una barra de estado al formulario de solicitud.

3) Crea un objeto usando la clase definida en el primer paso.

varCallBack := TMyCallBack. Crear;

4) Llame al método SetCallBack del objeto OLE automático para pasar parámetros.

oleMapInfo. set callback(var callback As IMyCallBack);

5) Procese el parámetro StatusText pasado por MapInfo en el método SetStatusText para controlar la visualización de la barra de estado.

Procedimiento TMyCallBack. SetStatusText(const StatusText: WideString);

Inicio

Formulario principal. Barra de estado1. Panel[0]. text:= status text;

//MainForm es un formulario que contiene componentes del mapa.

Fin;

4 ejemplos de aplicación

El autor aplicó la tecnología de automatización OLE a un sistema de análisis predictivo EMC (compatibilidad electromagnética) desarrollado para una empresa. logrado a partir de aplicaciones prácticas.

El sistema analiza la compatibilidad electromagnética de transmisores y receptores distribuidos en diferentes emplazamientos. Como subsistema, la función de información geográfica se desarrolla en conjunto con Delphi 6.0 y MapInfo 6.5. La base de datos es MS SQL Server. Las aplicaciones se desarrollan principalmente en Delphi. Cuando es necesario mostrar visualmente información geográfica como mapas, sitios, transmisores, receptores y señales transmitidas, se llama a la función MapInfo. Utilice la tecnología de automatización OLE para realizar la interacción entre ellos.

Las coordenadas del sitio, los parámetros, los parámetros del transmisor y del receptor, la ubicación del sitio y otra información se almacenan en tablas de SQL Server. Primero, utilice un programa MapBasic para conectarse a la base de datos de SQL Server, almacenar la información obtenida en la tabla MapInfo, cargar el mapa básico y crear capas para estaciones, transmisores, receptores, señales, etc.

Delphi primero inicia el servidor MapInfo, luego ejecuta el programa MapBasic para cargar el mapa y luego interactúa con el servidor MapInfo a través de la automatización OLE. La estructura del sistema se muestra en la siguiente figura:

La interfaz de operación del sistema es la siguiente:

En...

Ocultar y mostrar capas se realiza llamando el método do de oleMapInfo Se implementa la declaración MapBasic.

Los botones de acercar, alejar y desplazarse se implementan mediante el método RunMenuCommand de oleMapInfo.

Intentar obtener las coordenadas del centro del mapa en la configuración se logra mediante el método Eval de oleMapInfo.

La barra de estado se actualiza mediante devoluciones de llamada OLE.

5 Conclusión

La práctica ha demostrado que el uso de la tecnología de automatización OLE para desarrollar aplicaciones MapInfo puede ahorrar el ciclo de desarrollo, controlar MapInfo de manera flexible y efectiva y realizar las funciones del sistema de información geográfica de MapInfo. Su desventaja es que es necesario llamar a MapInfo en segundo plano, por lo que la velocidad de ejecución del programa es limitada. Sin embargo, hasta que madure la aplicación de los controles MapX, las llamadas y devoluciones de llamada OLE seguirán siendo un método de desarrollo ampliamente utilizado.