En este
ejercicio, se hará una emulación del botón Info
Tool del MapInfo usando programación en MapBasic.
SearchPoint: busca en un mapa los objetos que están en
una específica coordenada X, Y. Su sintaxis es la siguiente:
SearchPoint (id del Map, x, y)
Dónde:
Id del
Map: es el Identificador del Map activado y se obtiene con FrontWindow().
X:
coordenada X obtenida con el puntero del mouse y se obtiene con el
CommandInfo(CMD_INFO_X) o
CommandInfo(1).
Y:
coordenada Y obtenida con el puntero del mouse y se obtiene con el
CommandInfo(CMD_INFO_Y) o
CommandInfo(2).
El
resultado es el “número de objetos encontrados”. Pero para entender mejor esto
último, vemos que es el SearchInfo.
SearchInfo: Devuelve la información obtenida desde el SearchPoint. Su sintaxis es la
siguiente:
SearchInfo(número
de orden*, atributo)
*traducción libre del editor del Blog.
Dónde:
Numero
de orden: es el número con el cual vamos a identificar cada objeto hallado en
el SearchPoint. Por ejemplo, si en
el SearchPoint obtuve un número 3,
entonces es porque hay 3 objetos y si quiero acceder al primero, segundo o
tercer objeto escribo respectivamente 1, 2 o 3.
Atributo:
es el atributo la que quiero leer. En este ejercicio se usa el atributo
SEARC_INFO_TABLE o 1 para obtener el nombre de la tabla y el SEARCH_INFO_ROW o
2 para obtener el RowID del objeto seleccionado.
Código
del ejercicio:
Este es
el código del ejercicio con algunos comentarios para su comprensión., Se utilizó una Tabla de MapInfo con los departamentos del Perú:
Include "Mapbasic.def" Include "Menu.def" Include "Icons.def" Declare Sub Main 'DECLARO UN SUB MAIN Declare Sub MiIdentificador 'DECLARO UN SUB PARA MI IDENTIFICADOR Sub Main 'RUTINA QUE CREA UN BOTON PARA MI IDENTIFICADOR Create ButtonPad "MiBoton" As ToolButton Calling MiIdentificador 'LLAMA SUB MiIdentificador Icon MI_ICON_CROSSHAIR Cursor MI_CURSOR_CROSSHAIR Title "Mis botones" Width 3 Show End Sub Sub MiIdentificador Dim X as Float Dim Y as Float Dim MiTabla as String Dim MiId as Integer Dim Seleccion as Integer Dim MiValor as Alias Dim MisValores as String Dim i as Integer X = CommandInfo(1)'LEE LA COORDENADA X DEL MOUSE EN EL MOMENTO QUE PRESIONO EL CLICK IZQUIERDO Y = CommandInfo(2)'LEE LA COORDENADA Y DEL MOUSE EN EL MOMENTO QUE PRESIONO EL CLICK IZQUIERDO Seleccion = SearchPoint (FrontWindow(),X, Y) 'SELECCIONO LAS CAPAS EXISTENTES DEL MAP CUYAS GEOMETRIAS INTERSECTAN CON LA COORDENADA X, Y MiTabla = SearchInfo(Seleccion ,1)'LEO LA PRIMERA CAPA SELECCIONADA (SOLO HAY UNA CAPA EN ESTE EJEMPLO) MiId = SearchInfo(Seleccion ,2)'LEO EL RowID DEL OBJETO SELECCIONADO PROVENIENTE DE LA CAPA SELECCIONADA Fetch Rec MiId From MiTabla 'APUNTO EL Fetch HACIA EL RowID SELECCIONADO MisValores = "" 'EN ESTA VARIABLE ESTARAN LOS NOMBRES DE LAS COLUMNAS Y SUS VALORES SELECCIONADOS SEGUN EL RowID For i = 1 to TableInfo(MiTabla,4)'FOR PARA LEER LAS COLUMNAS DE LA TABLA SELECCIONADA If (MisValores = "") Then MiValor = MiTabla &".col"& i MisValores = ColumnInfo(MiTabla,"COL"& i,1 )& ": " & MiValor Else MiValor = MiTabla &".col"& i MisValores = MisValores & ";" & ColumnInfo(MiTabla,"COL" & i,1 )& ": " & MiValor End If Next 'ESTE Dialog ES PARA VER LOS RESULTADOS DE LA SELECCION COMO SI FUERA EL Id DEL MAPINFO Dialog Title "Mi Identificador-"&MiTabla Control ListBox Title MisValores Width 200 Height 200 End Sub
Resultados:
Se
observan estos resultados:
Cometarios:
Quizá
no sea tan interactiva como el Info Tool
del MapInfo ya que hay que cerrar el Cuadro de Dialogo cada vez que se
quiera usar de nuevo esta herramienta, pero puede ser útil al querer obtener
información de ciertos elementos al usar el puntero mouse a tiempo real.
Esperando
que sea útil esta información, será hasta el otro mes. Hasta luego.