programa en visual studio

Iniciado por al161684, 7 Septiembre 2018, 02:46 AM

0 Miembros y 1 Visitante están viendo este tema.

al161684

hola, alguien me podría ayudar en como hacer un programa en visual studio 2017 para hacer un programa que presente en una imagen las partes del cuerpo y que cuando el usuario señale con el mouse alguna de ellas el programa presente su nombre en inglés y en español.
gracias!!

Serapis

En primer lugar este espacio es para vb6... para NET el sitio está algo más 'arriba'.

Hay varias formas...

1 - Una de ellas es definir regiones... con una estructura simple similar a esto:

Código ( vbnet) [Seleccionar]

Structure RegionPicture
    X as Int32
    Y as Int32
    Ancho as Int32
    Alto    as Int32
    Texto  as string
End Structure


Se crea una estructura por cada parte del cuerpo humano se rellenan los datos y se añaden a una colección...
Cuando el usuario haga click en la imagen, el evento devuelve las cordenadas de click, se va recorriendo la colección, para investigar si se ha pulsado en una región específica, en cuyo caso se muestra el texto correspondiente... incluso puede ponerse en una casilla en español/inglés, por ejemplo y pedir la traducción al otro idioma no dado.

Este método aunque simple presenta algunas desventajas...
- La región definida es rectangular, no refleja la forma exacta de prácticamente ninguna parte.
- Dos partes podrían compartir cordenadas, con lo que aunque se encontrase una región sería acertado terminar de recorrer la región para ver si alguna más se centra en la posición pulsada. Podría decidirse entre ellas en base a la región que mejor tenga centrada dicha cordenada, o puede mostrarse las diferentes regiones coincidentes... Si son más de dos, lo complica de cara al usuario.

- Unas forma de paliarlo, es modificar la imagen original (una copia), y señalar pequeñas áreas donde debe pulsarse, coloreando ligeramente de diferentes colores cada área... ciñendo las áreas los más posible, se minimiza la posibilidad de error o de pulsar en dos regiones colindantes...

2 - Algo más complejo es modificar la estructura para definir una región con un array de puntos, y no solo 4 que definen un ractángulo... Esto tiene la desventaja de que supondrá mayor esfuerzo para hacerlo, además deberá crearse una función también algo más compleja para determinar "boolean = EstaPuntoEnRegion(pt as punto, region() as punto)"
Código ( vbnet) [Seleccionar]

Structure Punto
    X as Int32
    Y as Int32
end Structure

' El array de puntos debería encerrar la figura, es decir el último punto debería tener las mismas coredenadas que el primero.
Structure RegionPicture
    Pts() as Punto
    Texto  as string

    Function PuntoEnRegion(pt as Punto) as boolean
          ' recorrer el array 'pts', para determinar si el punto recibido está dentro de la región que define el array de 'pts'...
    end function
End Structure



3 - Otra solución más óptima es recurrir de nuevo a la imagen original... hacer una selección de las regiones de cada parte, copiar las selecciónes y guardarlas como una imagen transparente. Proceder de igual modo con cada parte dle cuerpo humano que se quiera considerar...

Luego simplemente se trata de mostrar en la ventana todas las imágenes superpuestas... al hacer click, se hará click sobre cada imagen específica (las áreas transparentes deben manejarse como no sensibles al click), entonces derivando al mismo evento click, para todas las funciones, basta un 'select case' para determinar cual de las imágenes fue pulsada y por ello mostrar el texto que corresponda.



...cuando te decidas por un método a usar y adelantes código, si te quedas atascado en algún punto... pregunta, pero ya centrado en una cuestión específica...

gundream

Yo pongo la imagen en la pantalla, pongo encima de la imagen unas pocas etiquetas de texto en plan LABEL transparente, y cuando hagas click en la zona del label (aunque sea transparente, el evento se dispara igual) muestras el texto o sonido que quieras. Fácil, rápido y sin pegas.  :silbar:

Eleкtro

#3
Llego tarde a leer y responder, pero bueno...

La solución apropiada sería la que ha comentado NEBIRE, solo que suponiendo que realmente la pregunta sea para VB.NET, entonces los ejemplos con clases personalizadas resulta algo innecesario cuando tenemos a nuestra disposición la clase System.Drawing.Region y System.Drawing.GraphicsPath. No necesitarías más. Y también deberías recortar las imágenes y superponerlas en la original, lo que dijo NEBIRE al final de su comentario, vaya, esto simplificaría enormemente la tarea de asignar las regiones, puesto que usarías los límites de la imagen recortada como región (en lugar de tener que calcular y especificar manualmente todos los puntos de la trayectoria).

Saludos.