Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: pedroesca en Noviembre 02, 2011, 10:40:30 am
-
Buenos días a todos !!! esta vez quiero tocar un tema en el cual estoy "un poco" desorientado, y es, a grandes rasgos, todo lo que tenga que ver con programación de gráficos, coordenadas, zoom, acercamientos, clicks en imágenes dibujadas en tiempo de ejecución, etc.
Pero para que tengan una idea, me voy a remitir a un ejemplo:
Tengo un mapa, que coloco en un formulario, y hago click en el mismo, y marco un punto allí (coordenada), guardo esas coordenadas en donde sea (tabla, txt, etc), y luego recupero esa coordenada y muestro ese punto. Hasta allí todo joya, genial y de lujo; but (pero), el problema se presenta cuando cambio de monitor, ya sea o mas chico o mas grande, ya que las coordenadas que guardo son absolutas a la pantalla y con el simple método de posicionamiento del cursor, a lo cual, NO debería ser así.
No se si me explico, pero subo una imagen a modo de ejemplo:
(http://s7.postimage.org/mfo68ddwn/Screen_Hunter_01_Nov_02_09_45.jpg) (http://postimage.org/image/mfo68ddwn/)
Como podrán ver, hay un punto marcado (el autito de policía), que aparece EN EL RÍO!!! y es porque al redimensionar la ventana, se cambió la posición, y el punto quedó fijo, sin moverse. Creo que la solución sería jugar con las coordenadas a niveles de fórmulas matemáticas u otros algoritmos.
Espero hayan entendido el cuestionamiento, sino, voy a subir mas imágenes (o el proyecto) para que lo entiendan, ya que es algo que rompe un poco el esquema de programación al que estamos acostumbrados.
Gracias y saludos a todos!!
-
Hola creo que deberias buscar una función que es relativa a la pantalla no se si era TwipsPerPixel o algo así seguramente leandro te dará la posta.
Suerte!!!
-
Genial! consultémosle al amigo Leandro entonces!
-
HOLA!!!
Lo que haria en tu caso seria lo siguiente...
Usaria los eventos MouseDown Y MouseUp (Suponiendo que no lo tenga tu control usa MouseMove)
Para guardar la X e Y del Click.
Ese sera un numero que no cambie seguramente...
Espero que te sirva.
GRACIAS POR LEER!!!
-
Mi estimado @79137913, es así justamente como lo hago, y te lo muestro a continuación:
Call GetCursorPos(CURSOr)
Call ScreenToClient(picMapa.hwnd, CURSOr)
With Me.shpPoint
Me.lblY.Caption = CURSOr.Y - (.Height / 2)
Me.lblX.Caption = CURSOr.X - (.Width / 2)
End With
With LineX
.X1 = picMapa.ScaleLeft
.X2 = picMapa.ScaleLeft + picMapa.ScaleWidth
.Y1 = CURSOr.Y
.Y2 = CURSOr.Y
.Visible = True
End With
With LineY
.X1 = CURSOr.X
.X2 = CURSOr.X
.Y1 = picMapa.ScaleTop
.Y2 = picMapa.ScaleTop + picMapa.ScaleHeight
.Visible = True
End With
Pero insisto en la aclaración, eso solo guarda posiciones absolutas a la pantalla.
-
Hola lo mejor es trabajar en vbPixels, o bien multiplicar por Screen.TwipsPerPixelX o Screen.TwipsPerPixelY dependiendo el caso.
no te puedo dar un ejemplo ahora pero si tenes dudas despues esta noche vemos algun ejemplo.
Saludos.
-
Perfecto Leandro, gracias, te lo agradecería.
-
podrías subir el code o mostrar donde falla, asi te puedo orientar.
Saludos.
-
Si Leandro, estoy intentando subir el proyecto completo, ya que sería interesante mostrarle a todos ustedes, ya que si bien posee un módulo de datos (abm), también cuenta , como mencioné, un módulo gráfico (mapa), con lo cual rompe con el esquema clásico de programación al que estamos acostumbrados, y sería espectacular compartir ese trabajo.
En fin, tal vez abra otro tema para explicar en principio de que se trata, xq si solo "pregunto" como se hace tal cosa, no tiene sentido. Insisto, me gustaría también tratar de encontrarle entre todos, la verdadera potencia gráfica de nuestro tan amado vb.
Saludos.
-
Estoy trabajando en un programa de delivery, en donde uso las imagenes de googlemap, (pude haber usado las api de googlemap, pero me pidieron que el programa tambien funcionara sin estar conectado a internet, asi que baje las imagenes de la ciudad y con eso alimento el mapa). En el programa trabajo todo con pixels y no importa si la ventana la redimencionan, el tamaño del mapa es siempre el mismo 1024x768 (12 tiles), ¿ tu haces lo mismo, mantienes el tamaño del mapa siempre igual, o tambien lo redimensionas junto con la ventana ?, por que a lo mejor ahi tienes el problema de desface de coordenadas.
Aqui te dejo lo que hago con el mapa.
(http://i39.tinypic.com/wguhdl.png)
http://www.4shared.com/file/BOti_drY/mapa.html (http://www.4shared.com/file/BOti_drY/mapa.html)
Al principio el programa te va a cargar las 12 imagenes necesarias para poder ver un mapa, (debes estar conectado a internet), pero van a quedar guardadas en la carpeta del programa, para poner una flecha has click en cualquier lugar del mapa, luego con las flechas te mueves, tambien puedes maximizar la ventana, y la flecha permanece en el mismo lugar
-
Hola @Virgil, exactamente lo que tú dices debería hacer el sistema, cargar los puntos geográficos, señalar en el mapa, guardar la ubicación, y luego reflejarlos al consultar las capas.
El inconveniente se presenta en que se debería poder hacer ZOOM y MOVER el mapa (cuando está ampliado), y es así cuando se "corren" los puntos marcados, lo mismo al cambiarse de monitor. Supuse también que lo ideal debería ser utilizar las API de Google Maps, y si te fijas en la imagen que subí al inicio de este tema, verás que es un mapa hecho a mano (lo calqué en Flash :o ) , y mas o menos refleja el espíritu del proyecto.
Saludos.
-
Lo ideal es que subas el codigo de tu mapa, para revisarlo, pero en el programa utilizo un picturebox para contener al mapa y mis coordenadas 0,0 es la esquina superior izquierda del picturebox, asi al hacer click se hace click sobre el mapa y no sobre la pantalla, y tu en tu codigo de ejemplo capturas la posicion del cursor sobre la pantalla, y al hacer zoom ¿que haces ?, utilizas un factor, digamos un 10% cada vez que incrementas el zoom, por que ese mismo factor deberias aplicarlo a la posicion del cursor, en mi programa es mas facil, por que parto con un zoom de 17, y la primera imagen es x=40456 y=78227, si quiero un zoom de 18 multiplico por 2, o si quiero zoom de 16 divido por 2, y esos valores se los mando a googlemap y el me manda mis 12 imagenes necesarias para construir el mapa y el tamaño del mapa se mantiene constante en 1024x768
-
Ok Virgil, subiré en el transcurso del día, el proyecto completo, mas la explicación del mismo.
-
Si quieres usar mi programa para ver la ciudad de Formosa cambia en el procedimiento initmap
la linea del setposmap
'formosa
SetPosMap 44359, 75420, False
Si quieres el mapa y no la imagen satelital cambia las lineas en el procedimiento paintmap
'satelite
'cPiece = "Sat_x=" & m_Mapa(i).x & "y=" & m_Mapa(i).y & "zoom=" & m_nMapZoom & ".jpg"
'mapa
cPiece = "Map_x=" & m_Mapa(i).x & "y=" & m_Mapa(i).y & "zoom=" & m_nMapZoom & ".png"
'satelite
'cUrl = "http://khm0.google.com/kh/v=94&x=[X]&y=[Y]&z=[Z]&s=galileo"
'mapa
cUrl = "http://mt0.google.com/vt/lyrs=m@161000000&hl=es&x=[X]&y=[Y]&z=[Z]&s=Galileo"
Para poder ver imagenes png, vas ha tener que cambiar LoadPicture por LoadPicturePlus
http://mvps.org/emorcillo/en/code/vb6/loadimagegdip.shtml (http://mvps.org/emorcillo/en/code/vb6/loadimagegdip.shtml)
-
Cuando buscaba informacion para mi programa encontre esta pagina que muestra cualquier lugar geografico ( mapa o satelital ) con solo darle la latitud y la longitud, tambien viene el codigo fuente
http://pallit.lhi.is/bigice/bigpic.html (http://pallit.lhi.is/bigice/bigpic.html)
Formosa
Latitud : -26.124463
Longitud : -58.251572
Zoom : 14
Numero imagenes horizontales : 7
Numero imagenes verticales : 6
Tipo mapa : a gusto del usuario ( mapa o satelite )
-
En este ejemplo utilizo una unica imagen para el mapa, con click se pone un marcador, con las flechas se mueve el mapa, con "+" se aumenta el zoom y con "-" se disminuye el zoom, el marcador queda fijo al mapa, no importa el nivel de zoom o la posicion del mapa en pantalla
(http://i42.tinypic.com/2j4r4v5.png)
http://www.4shared.com/file/_EmeeWMZ/mapa2.html
(http://www.4shared.com/file/_EmeeWMZ/mapa2.html)
Y en esta pagina hay marcadores de todo tipo para mapas
http://mapicons.nicolasmollet.com/ (http://mapicons.nicolasmollet.com/)