none
dibujar rectangulo variable

    Pregunta

  • hola a tot@s

    estoi haciendo una aplicación

    y necesito una barra que sea variable en función de una variable

    lo hago con fillrectangle dentro de un picturebox pero no me funciona

    alguien me puede ayudar?

    gracias de antemano

    es en vb net 2017

    joan

    viernes, 14 de abril de 2017 18:37

Respuestas

  • Hola JoanVB

    Te puede servir esta documentación? Creación de una clase para dibujar en Windows Forms utilizando un buffer doble

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    viernes, 14 de abril de 2017 19:20
  • Hay dos formas de pintar un rectángulo de menor ancho: Una es primero borrar el fondo con e.Graphics.Clear(color) y luego pintar de nuevo el rectángulo. La otra es pintarle por la derecha un rectangulito más pequeño con el mismo color que el fondo, eso "achica" el rectángulo principal. Pero recuerda que esto hay que hacerlo siempre en el evento Paint, de lo contrario puede fallar en muchos casos. En resumen: cargas en una variable el valor deseado y llamas al método Invalidate del picturebox. Eso hace que se dispare el evento Paint, dentro del Paint limpias todo el fondo y pintas el rectángulo. Desde luego, para que dé tiempo a verlo, hay que dosificar las llamadas al Invalidate. Por ejemplo, si es un VU-meter que quieres refrescar 10 veces por segundo, ten cuidado en la llamada al Invalidate de no llamarlo mas de una vez cada 100 milisegundos (podrías hacerlo con un Timer, simplemente carga la variable sin preocuparte de nada, y en el Tick del Timer llamas a Invalidate). En comparación con los 100 milisegundos, el borrado del fondo y repintado del rectángulo es tan rápido que ni se nota.
    lunes, 17 de abril de 2017 15:49

Todas las respuestas

  • Hola JoanVB

    Te puede servir esta documentación? Creación de una clase para dibujar en Windows Forms utilizando un buffer doble

    Saludos


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    viernes, 14 de abril de 2017 19:20
  • lo hago con fillrectangle dentro de un picturebox pero no me funciona

    Debe funcionar bien si lo haces bien hecho. Lo primero que hay que recordar es que el dibujo en un picturebox no es "lo dibujo y me olvido", sino que tienes que codificar lo necesario para que la imagen se repinte cada vez que Windows lo requiera. Esto implica que el dibujo hay que hacerlo en el evento Paint, el cual será disparado cuando se requiera.

    Dentro del picturebox_Paint, pon una llamada a FillRectangle que pinte el rectángulo tomando su tamaño desde una variable global (definida a nivel de clase).

    Y cada vez que cambies el valor de esa variable, llama al método Invalidate() del PictureBox. Esto hace que se dispare el evento Paint y se redibuje el rectángulo. Y si además Windows necesita repintarlo en algún otro momento, volverá a disparar el Paint, y como la variable seguirá teniendo el valor que le metiste, se pintará de nuevo en el mismo tamaño y el usuario no notará nada.

    viernes, 14 de abril de 2017 20:33
  • hola

    gracias por ayudarme pero

    me podríais indicar las instrucciones

    para dibujar una barra de ancho variable en función de un valor variable

    lo dibujo dentro de un picturebox

    gracias

    pd. es en vb net

    domingo, 16 de abril de 2017 22:00
  • Pero, ¿no decías que ya lo estabas haciendo con un FillRectangle? No tienes más que tomar el FillRectangle que ya tienes y pasarle la variable en el argumento que indica la anchura. Por ejemplo, podría ser así:

    Dim rect as New Rectangle(0, 0, aquiTuVariable, 200)

    e.Graphics.FillRectangle(brocha, rect)

    Pero si quieres pon aquí las instrucciones que ya tenías y te indicamos cómo modificarlas para que tome la anchura de una variable.

    lunes, 17 de abril de 2017 7:29
  • hola Alberto,

    ya dibujo el rectángulo variable

    pero solo dibuja el de mas ancho, al dibujar uno de menos ancho no se ve,

    y si borro el picturebox se ve que va tan rápido que no se ve nada

    como puedo ir dibujando la barra variable , tipo vumeter, para indicar el valor de una magnitud física? me entiendes?

    gracias por tu apuyo

    pd vb 6.0 era mas fácil jeje 

    lunes, 17 de abril de 2017 14:33
  • Hay dos formas de pintar un rectángulo de menor ancho: Una es primero borrar el fondo con e.Graphics.Clear(color) y luego pintar de nuevo el rectángulo. La otra es pintarle por la derecha un rectangulito más pequeño con el mismo color que el fondo, eso "achica" el rectángulo principal. Pero recuerda que esto hay que hacerlo siempre en el evento Paint, de lo contrario puede fallar en muchos casos. En resumen: cargas en una variable el valor deseado y llamas al método Invalidate del picturebox. Eso hace que se dispare el evento Paint, dentro del Paint limpias todo el fondo y pintas el rectángulo. Desde luego, para que dé tiempo a verlo, hay que dosificar las llamadas al Invalidate. Por ejemplo, si es un VU-meter que quieres refrescar 10 veces por segundo, ten cuidado en la llamada al Invalidate de no llamarlo mas de una vez cada 100 milisegundos (podrías hacerlo con un Timer, simplemente carga la variable sin preocuparte de nada, y en el Tick del Timer llamas a Invalidate). En comparación con los 100 milisegundos, el borrado del fondo y repintado del rectángulo es tan rápido que ni se nota.
    lunes, 17 de abril de 2017 15:49
  • hola a todos

    ya puedo dibujar lo que quería

    gracias de nuevo por vuestro apoyo, aquí un amigo

    joan

    pd gracias alberto


    joanVB

    viernes, 21 de abril de 2017 15:10