• Lunes 23 de Diciembre de 2024, 17:22

Autor Tema:  Graficos persistentes en VB2005  (Leído 2745 veces)

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Graficos persistentes en VB2005
« en: Martes 24 de Marzo de 2009, 20:26 »
0
Hola a todos...

estoy tratando de hacer una linea en un picturebox(que sea persistente, es decir, que el picturebox no la borre cuando se minimiza y despues de maximiza)  por medio de codigo, esta linea se debe dibujar desde un Button.
Cuando pulso el botón, se dibuja la linea...

Algo asi como en VB6.0, mirar el siguiente code de VB6.0

Código: Visual Basic
  1. Private Sub Command1_Click()
  2.  
  3. Me.Picture1.AutoRedraw = True
  4. Me.Picture1.Line (0, 0)-(Me.Picture1.ScaleWidth, Me.Picture1.ScaleHeight)
  5.  
  6. 'Como se hace esta linea persistente en VB2005 (linea persistente creada por code desde un boton)?
  7.  
  8. End Sub
  9.  
  10.  

Alguien sabe como se hace esta linea en VB2005? ( me imagino que debes ser sencillo, pero no se como es)

Saludos y gracias por leer el post.


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Graficos persistentes en VB2005
« Respuesta #1 en: Miércoles 25 de Marzo de 2009, 06:01 »
0
Tienes que poner los métodos gráficos dentro del evento paint del contenedor deseado.
Si no sabes como dibujar líneas, te pongo un copy/paste de otro mensaje anterior: http://foros.solocodigo.com/viewtopic.php?f=53&t=37584&p=136812#p136812

Cita de: "Nebire"
Si en vb6.0 querías hacer una línea dentro de un picture hacía como indicas picture1.line(xo,yo)-(xf,yf),color . Al hacer esto fíjate que el grueso de línea y algunas otras opciones gráficas quedaban definidas por el contenedor donde se dibujaba es decir picture1.DrawWidth  implicaba el ancho de los métodos gráficos referidos al picture1.

Ahora en VB2005-2008...  se ha querido separar e independizar, te pongo un ejemplo que será más significativo y te comento dentro del mismo:

Código: Visual Basic
  1.  
  2. Dim p = New Pen(Color.Red, 2) ' Creo una 'brocha' del color y ancho indicados
  3.  
  4. ' suele ser útil si vamos a emplear mucho gráfico importar la clase
  5. Imports System.Drawing.Graphics
  6.  
  7. ' cuando queremos utilizar un gráfico a nivel de formulario suele ser útil describir una variable para usar los gráficos
  8. Dim g As Graphics
  9.  
  10. ' para usarlo en un momento dado, por ejemplo en un picturebox
  11. g = PictureBox1.CreateGraphics  ' esto indica que g vamos a usarlo dentro del picturebox1
  12.  
  13. ' finalmente de ejemplo una línea:
  14. g.DrawLine(p, xo, yo, xf, yf)  ' el pen que indicamos, y las cordenadas todas juntitas...
  15.  
  16.  
  17.  
«Ma non troppo»
----> ModoVacaciones = False<----

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: Graficos persistentes en VB2005
« Respuesta #2 en: Miércoles 25 de Marzo de 2009, 15:35 »
0
Nebire, gracias por responder...

El problema es que el codigo debe ir en un boton y no en el evento paint.


Imagina que se quiere hacer un rectangulo con el objeto rectangle en un picturebox, el usuario digitara valores en unos textbox, de acuerdo a estos valores el rectangulo tomará la forma de ancho y alto. Por ejemplo si el usuario dice que la base es 1 y el alto es 100, el rectangulo será muy angosto y muy alto cuando el usuario pulse un button ("Aceptar"), pero si el usuario dice que la base es 100 y el alto es 1 el rectangulo será muy ancho y de muy poca altura, este se dibujará en el picture cuando el usuario pulse el button ("Aceptar").

Problema: Es que el rectangulo no es persistente, se borra cuando:
1) Se dibuja por primera vez
2) Se superpone una ventana encima de otra
3) Se minimiza y luego se maximiza...
4) ...
5) ...
etc...

Si uso el evento paint no puedo hacer el efecto de "Introduzco valores, Pulso aceptar y el rectangulo cambia dentro del picture"...

Nota:
No tengo problemas con saber dibujar las lineas, rectangulos, circulos, etc...
Mi problema es de Persistencia.

Saludos y gracias de nuevo.


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Graficos persistentes en VB2005
« Respuesta #3 en: Miércoles 25 de Marzo de 2009, 15:49 »
0
Cita de: "Jimbenit"
Nebire, gracias por responder...

El problema es que el codigo debe ir en un boton y no en el evento paint.


Imagina que se quiere hacer un rectangulo con el objeto rectangle en un picturebox, el usuario digitara valores en unos textbox, de acuerdo a estos valores el rectangulo tomará la forma de ancho y alto. Por ejemplo si el usuario dice que la base es 1 y el alto es 100, el rectangulo será muy angosto y muy alto cuando el usuario pulse un button ("Aceptar"), pero si el usuario dice que la base es 100 y el alto es 1 el rectangulo será muy ancho y de muy poca altura, este se dibujará en el picture cuando el usuario pulse el button ("Aceptar").
 
No necesito imaginarlo, te aseguro que veo el código sin siquiera escribirlo, pero bueno digamos que imagino  ¿¿¿¿¿¿¿¿¿¿¿ y... ????????????

Cita de: "Jimbenit"
Si uso el evento paint no puedo hacer el efecto de "Introduzco valores, Pulso aceptar y el rectangulo cambia dentro del picture"...
 

Porqué no ???????.

Te dejo tiempo para pensarlo... te pondré un ejemplo sencillo, pero no antes que repienses tus desafortunadas afirnaciones (desafortunadas por incorrectas, nada más, que no se vea ningún desprecio en ello) . Te invito a que demuestres porqué no puedes hacer lo que te decía en el evento paint consiguiendo lo que tu quieres hacer... sólo te doy una pista, que no es una pista, que es la madre de la programación: 'control', tu tienes el control, controla...

Te lo puedo decir de otro modo: ¿ para qué crees tú que sirve el evento paint ?, ¿ Qué es lo que hace el evento paint ? , en vb2005, en vb6 o en cualquier lenguaje habido y por haber...  ¿ qué crees tú que hace autoredraw ?
« última modificación: Miércoles 25 de Marzo de 2009, 16:09 por Nebire »
«Ma non troppo»
----> ModoVacaciones = False<----

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: Graficos persistentes en VB2005
« Respuesta #4 en: Miércoles 25 de Marzo de 2009, 15:59 »
0
Cita de: "[color=#40FF00
Nebire[/color]"]
No necesito imaginarlo, te aseguro que veo el código sin siquiera escribirlo, pero bueno digamos que imagino  ¿¿¿¿¿¿¿¿¿¿¿ y... ????????????
:lol:  :lol:  :lol:
Tienes un buen sentido del humor y una capacidad asombrosa (no dudo en nada en que lo puedas ver, estoy seguro de ello)

Cita de: "[color=#40FF00
Nebire[/color]"]
Porqué no ???????.

Te dejo tiempo para pensarlo... te pondré un ejemplo sencillo, pero no antes que repienses tus desafortunadas afirnaciones (desafortunadas por incorrectas, nada más, que no se vea ningún desprecio en ello) . Te invito a que demuestres porqué no puedes hacer lo que te decía en el evento paint consiguiendo lo que tu quieres hacer... sólo te doy una pista, que no es una pista, que es la madre de la programación: 'control', tu tienes el control, controla...

Te lo puedo decir de otro modo: ¿ para qué crees tú que sirve el evento paint ? , en vb2005, en vb6 o en cualquier lenguaje habido y por haber...

Te haré caso, voy a pensar y luego escribo, creo que respondí muy rápido....

Gracias Nebire. :good:


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: Graficos persistentes en VB2005
« Respuesta #5 en: Miércoles 25 de Marzo de 2009, 16:36 »
0
Cita de: "[color=#40FF00
Nebire[/color]"]
No necesito imaginarlo, te aseguro que veo el código sin siquiera escribirlo
Esta frase es totalmente cierta... Tenias razón amigo...

Me doy cuenta que haciendo un pequeño ejemplo con tu código, tu código funciona perfecto...
Me funcionó bien...
Acontinuación Mira tu código con un simple ejemplo de dibujar unas lieneas persistentes:

Código: vb.net
  1. ' suele ser útil si vamos a emplear mucho gráfico importar la clase
  2. Imports System.Drawing.Graphics
  3.  
  4.  
  5. Public Class Form1
  6.     Dim Xo, Yo, Xf, Yf As Integer
  7.  
  8.     Public Sub Dibujo(ByVal PictureKE As PictureBox)
  9.         Dim p = New Pen(Color.Red, 2) ' Creo una 'brocha' del color y ancho indicados
  10.  
  11.         Xf = PictureKE.Width
  12.         Yf = PictureKE.Height
  13.  
  14.  
  15.         ' cuando queremos utilizar un gráfico a nivel de formulario suele ser útil describir una variable para usar los gráficos
  16.         Dim g As Graphics
  17.  
  18.         ' para usarlo en un momento dado, por ejemplo en un picturebox
  19.         g = PictureKE.CreateGraphics  ' esto indica que g vamos a usarlo dentro del picturebox1
  20.  
  21.         g.Clear(PictureKE.BackColor)
  22.  
  23.         ' finalmente de ejemplo una línea:
  24.         g.DrawLine(p, Xo, Yo, Xf, Yf)  ' el pen que indicamos, y las cordenadas todas juntitas...
  25.     End Sub
  26.  
  27.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  28.         Xo = Xo + 50
  29.         If Xo = 400 Then : Xo = 0 : Yo = Yo + 50 : End If
  30.         If Yo = 300 Then Yo = 0
  31.  
  32.         Call Dibujo(Me.PictureBox1)
  33.     End Sub
  34.  
  35.     Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
  36.         Call Dibujo(Me.PictureBox1)
  37.     End Sub
  38. End Class
  39.  

Esto era lo que necesitaba...
Gracias Nebire
Saludos.


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]