Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

autoredraw

64 views
Skip to first unread message

Miguel F

unread,
Jun 12, 2008, 7:58:04 PM6/12/08
to
hola.
cuando dibujo en un picture, al minimizar y maximizar, desaparece lo que he
pintado, żcomo se hace para que lo que pinte no se borre? es como cuando en
vb6 le poniamos la propiedad autoredraw a true para que se crease una copia
en memoria y no se borrase lo pintado.

gracias.


SoftJaén

unread,
Jun 13, 2008, 12:26:17 AM6/13/08
to
"Miguel F" preguntó:

> cuando dibujo en un picture, al minimizar y maximizar, desaparece lo que

> he pintado, ¿como se hace para que lo que pinte no se borre? es como

> cuando en vb6 le poniamos la propiedad autoredraw a true para que se
> crease una copia en memoria y no se borrase lo pintado.

Si quieres tener un gráfico persistente, escribe o dibuja en el evento
«Paint» del control PictureBox:

Private Sub PictureBox1_Paint( ... )

Dim g As Graphics = e.Graphics
g.DrawString("­Hola, Mundo!", Me.Font, Brushes.Black, 0, 0)

End Sub

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.


Miguel F

unread,
Jun 13, 2008, 4:46:56 AM6/13/08
to
hola enrique. Tengo un problema con el evento paint, resulta que dibujo una
guia con los días del mes, y con una barra de scroll me muevo para adelante
y para atras, Uso una funcion llamada Dibujar(Fecha) para dibujar la guia ,
el problema es que si pongo en el evento paint esta funcion , me parpadea
por que se está redibujando continuamente, y es si lo dibujo normalmente, se
borra en cuanto algo pasa por encima de la ventana.

¿es que no se puede dibujar en .Net de forma persistente? ¿se les ha
olvidado meter la propiedad autoredraw? nose, lo veo un poco raro esto y
además es que no veo información de como hacerlo.

saludos.


"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje
news:5C59C18E-DC1C-497C...@microsoft.com...

SoftJaén

unread,
Jun 13, 2008, 9:53:02 AM6/13/08
to
"Miguel F" escribió:

> Tengo un problema con el evento paint, resulta que dibujo una guia con los
> días del mes, y con una barra de scroll me muevo para adelante y para
> atras, Uso una funcion llamada Dibujar(Fecha) para dibujar la guia , el
> problema es que si pongo en el evento paint esta funcion , me parpadea por
> que se está redibujando continuamente, y es si lo dibujo normalmente, se
> borra en cuanto algo pasa por encima de la ventana.
>
> ¿es que no se puede dibujar en .Net de forma persistente? ¿se les ha
> olvidado meter la propiedad autoredraw? nose, lo veo un poco raro esto y
> además es que no veo información de como hacerlo.

La única manera que conozco en .NET de crear gráficos persistentes (lo que
hacía la propiedad AutoreDraw de Visual Basic 6.0), es la que te he
indicado: utilizar el evento Paint del formulario o del control PictureBox,
dependiendo dónde se desee dibujar. ¿Que te parpadea? Ahí ya, no puedo
entrar. :-)

Miguel F

unread,
Jun 13, 2008, 10:07:20 AM6/13/08
to
Pues como no pueda poner un gráfico persistente sime tu que voy a hacer,

¿por que no han puesto algo tan sencillo como la propiedad autoredraw? por
que nos complican la vida? se supone que el .Net nos daba ventajas, pues en
esto veo que no.

seguiré investigando a ver si descubro algo,

saludos y gracias.

"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje

news:E14F74C0-8A52-44C3...@microsoft.com...

SoftJaén

unread,
Jun 13, 2008, 10:54:52 AM6/13/08
to
"Miguel F" escribió:

> Pues como no pueda poner un gráfico persistente sime tu que voy a hacer,
>
> ¿por que no han puesto algo tan sencillo como la propiedad autoredraw? por
> que nos complican la vida? se supone que el .Net nos daba ventajas, pues
> en esto veo que no.

Digo yo que habrán quitado la propiedad AutoreDraw, aparte de que "chubaba"
bastantes recursos, porque se puede dibujar en el evento «Paint», de hecho,
dicho evento nos proporciona el objeto Graphics adecuado. Lo mismo el
problema lo tienes en el código fuente que estás utilizando para dibujar.
;-)

Si lo crees oportuno, abre la ayuda de Visual Studio y busca el tema «Dibujo
y representación personalizados de controles», por si encuentras alguna
solución para resolver el problema.

Miguel F

unread,
Jun 13, 2008, 11:23:04 AM6/13/08
to
Así lo haré, el problema es que al mover una barra de scroll vuelvo a
redibujar todo con nuevos tamaños, y para que no se machaquen los gráficos
hay un clear, y es precisamente ese clear el queme genera el molesto
parpadeo,

voy a mirar la ayuda como dices a ver si veo algo.

saludos.

"SoftJaén" <grupo_n...@softjaen.es> escribió en el mensaje

news:uzzxzVWz...@TK2MSFTNGP03.phx.gbl...

Jhollman Chacon

unread,
Oct 22, 2010, 5:17:18 PM10/22/10
to
Hola, pues seg?n parece no hay manera directa en VB.Net de hacer los gr?ficos persistentes mas que poner el c?digo de dibujo en el m?todo Paint como tan sabiamente lo dice el MSDN (no se en que andaban pensando los devs de .NET).

Pero por su puesto nada es imposible si sabes como, y resolver este problema es f?cil y ademas ventajoso.

Para ello debemos crear una "Falsa Imagen" sobre la cual dibujaremos y luego pasaremos su contenido ya dibujado a la propiedad "Image" del PictureBox o lo que sea vayas a mostrar tu gr?fico.

Para ustedes hice este ejemplo general de como es que se hace:

Dim FakePic As Bitmap 'creo una imagen falsa para dibujar sobre ella
Dim Gfx As Graphics = Graphics.FromImage(FakePic)'asignar la falsa imagen al GDI para poder dibujar sobre ella
Dim p As Pen = New Pen(Color.Black, 2)'El l?piz con el que se va a pintar
Dim SelectRect As Rectangle = New Rectangle()'esto es porque voy a dibujar un cuadrado.

FakePic = New Bitmap(CInt(PictureBox1.Width), CInt(PictureBox1.Height))'Instancio la FakePic y la hago del mismo tama?o que el PictureBox donde se va a mostrar.
With SelectRect
.X = e.X - 1 'x origen
.Y = e.Y - 1 'y origen
.Width = 20 'x final
.Height = 20 'y final
End With
Gfx.FillRectangle(p.Brush, SelectRect)'Dibujo un cuadrado simple
Pic.Image = FakePic'paso lo dibujado al PictureBox
Pic.Update()'Actualizo los cambios...
Gfx.Dispose()'Y unca vez terminado librero los recursos claro.

Eso es todo, se puede aplicar a cualquier situaci?n, no requiere para nada del evento Paint, los gr?ficos son persistentes y si prestan atenci?n notaran dos cosas:

- Los gr?ficos dibujados se hacen sobre un fondo transparente, lo notaran al guardar su imagen en formato JPG o BMP, intente guardarlo en GIF o PNG y ver?n las transparencias, en JPG la transparencia se ve toda negra. Ojo con eso!!.

- Esto permite dibujar usando capas!!!! quiere crear un clon de Photoshop?? pues no es tan dif?cil jejeje.

Espero les haya ayudado, suertes.

Lic. Jhollman Chacon R.


> On Thursday, June 12, 2008 7:58 PM Miguel F wrote:

> hola.


> cuando dibujo en un picture, al minimizar y maximizar, desaparece lo que he

> pintado, ?como se hace para que lo que pinte no se borre? es como cuando en

> vb6 le poniamos la propiedad autoredraw a true para que se crease una copia
> en memoria y no se borrase lo pintado.
>

> gracias.


>> On Friday, June 13, 2008 12:26 AM grupo_noticia wrote:

>> "Miguel F" pregunt?:
>>
>>
>> Si quieres tener un gr?fico persistente, escribe o dibuja en el evento
>> ?Paint? del control PictureBox:


>>
>> Private Sub PictureBox1_Paint( ... )
>>
>> Dim g As Graphics = e.Graphics

>> g.DrawString("?Hola, Mundo!", Me.Font, Brushes.Black, 0, 0)
>>
>> End Sub
>>
>> --
>> Enrique Mart?nez
>> [MS MVP - VB]
>>
>> Nota informativa: La informaci?n contenida en este mensaje, as? como el
>> c?digo fuente incluido en el mismo, se proporciona ?COMO EST??, sin
>> garant?as de ninguna clase, y no otorga derecho alguno. Usted asume
>> cualquier riesgo al poner en pr?ctica, utilizar o ejecutar lo recomendado o

>> sugerido en el presente mensaje.


>>> On Friday, June 13, 2008 4:46 AM Miguel F wrote:

>>> hola enrique. Tengo un problema con el evento paint, resulta que dibujo una
>>> guia con los d?as del mes, y con una barra de scroll me muevo para adelante

>>> y para atras, Uso una funcion llamada Dibujar(Fecha) para dibujar la guia ,
>>> el problema es que si pongo en el evento paint esta funcion , me parpadea

>>> por que se est? redibujando continuamente, y es si lo dibujo normalmente, se

>>> borra en cuanto algo pasa por encima de la ventana.
>>>

>>> ?es que no se puede dibujar en .Net de forma persistente? ?se les ha

>>> olvidado meter la propiedad autoredraw? nose, lo veo un poco raro esto y

>>> adem?s es que no veo informaci?n de como hacerlo.
>>>
>>> saludos.
>>>
>>>
>>> "SoftJa?n" <grupo_n...@softjaen.es> escribi? en el mensaje
>>> news:5C59C18E-DC1C-497C...@microsoft.com...


>>>> On Friday, June 13, 2008 9:53 AM grupo_noticia wrote:

>>>> "Miguel F" escribi?:
>>>>
>>>>
>>>> La ?nica manera que conozco en .NET de crear gr?ficos persistentes (lo que
>>>> hac?a la propiedad AutoreDraw de Visual Basic 6.0), es la que te he

>>>> indicado: utilizar el evento Paint del formulario o del control PictureBox,

>>>> dependiendo d?nde se desee dibujar. ?Que te parpadea? Ah? ya, no puedo
>>>> entrar. :-)
>>>>
>>>> --
>>>> Enrique Mart?nez
>>>> [MS MVP - VB]
>>>>
>>>> Nota informativa: La informaci?n contenida en este mensaje, as? como el
>>>> c?digo fuente incluido en el mismo, se proporciona ?COMO EST??, sin
>>>> garant?as de ninguna clase, y no otorga derecho alguno. Usted asume
>>>> cualquier riesgo al poner en pr?ctica, utilizar o ejecutar lo recomendado o

>>>> sugerido en el presente mensaje.


>>>>> On Friday, June 13, 2008 10:07 AM Miguel F wrote:

>>>>> Pues como no pueda poner un gr?fico persistente sime tu que voy a hacer,
>>>>>
>>>>> ?por que no han puesto algo tan sencillo como la propiedad autoredraw? por

>>>>> que nos complican la vida? se supone que el .Net nos daba ventajas, pues en
>>>>> esto veo que no.
>>>>>

>>>>> seguir? investigando a ver si descubro algo,
>>>>>
>>>>> saludos y gracias.
>>>>>
>>>>> "SoftJa?n" <grupo_n...@softjaen.es> escribi? en el mensaje
>>>>> news:E14F74C0-8A52-44C3...@microsoft.com...


>>>>>> On Friday, June 13, 2008 10:54 AM SoftJa?n wrote:

>>>>>> "Miguel F" escribi?:
>>>>>>
>>>>>>
>>>>>> Digo yo que habr?n quitado la propiedad AutoreDraw, aparte de que "chubaba"
>>>>>> bastantes recursos, porque se puede dibujar en el evento ?Paint?, de hecho,

>>>>>> dicho evento nos proporciona el objeto Graphics adecuado. Lo mismo el

>>>>>> problema lo tienes en el c?digo fuente que est?s utilizando para dibujar.
>>>>>> ;-)
>>>>>>
>>>>>> Si lo crees oportuno, abre la ayuda de Visual Studio y busca el tema ?Dibujo
>>>>>> y representaci?n personalizados de controles?, por si encuentras alguna
>>>>>> soluci?n para resolver el problema.
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Enrique Mart?nez
>>>>>> [MS MVP - VB]
>>>>>>
>>>>>> Nota informativa: La informaci?n contenida en este mensaje, as? como el
>>>>>> c?digo fuente incluido en el mismo, se proporciona ?COMO EST??, sin
>>>>>> garant?as de ninguna clase, y no otorga derecho alguno. Usted asume
>>>>>> cualquier riesgo al poner en pr?ctica, utilizar o ejecutar lo recomendado


>>>>>> o sugerido en el presente mensaje.


>>>>>>> On Friday, June 13, 2008 11:23 AM Miguel F wrote:

>>>>>>> As? lo har?, el problema es que al mover una barra de scroll vuelvo a
>>>>>>> redibujar todo con nuevos tama?os, y para que no se machaquen los gr?ficos

>>>>>>> hay un clear, y es precisamente ese clear el queme genera el molesto
>>>>>>> parpadeo,
>>>>>>>
>>>>>>> voy a mirar la ayuda como dices a ver si veo algo.
>>>>>>>
>>>>>>> saludos.
>>>>>>>

>>>>>>> "SoftJa?n" <grupo_n...@softjaen.es> escribi? en el mensaje
>>>>>>> news:uzzxzVWz...@TK2MSFTNGP03.phx.gbl...


>>>>>>> Submitted via EggHeadCafe - Software Developer Portal of Choice
>>>>>>> ASP.NET MaskedTextBox Custom Control
>>>>>>> http://www.eggheadcafe.com/tutorials/aspnet/39a071cd-9f96-4e81-9346-4e445181d645/aspnet-maskedtextbox-custom-control.aspx

Jhollman Chacon

unread,
Oct 22, 2010, 7:33:36 PM10/22/10
to
se me olvido, para guardar la imagen en diferentes formatos usen esto:

FakePic.Save("C:\ejemplo.png", Imaging.ImageFormat.Png)

En la lista de "Imaging.ImageFormat" aparecen los demas formatos en que se puede guardar la imagen, entre ellos: "JPG, BMP, GIF, TIFF, PNG, ICO"

Recuerden que como mencione, las transparencias aparecen negras en formatos que no las soportan, para evitar eso y poder guardar en JPG o BMP simplemente usen:

FakePic.Save("C:\ejemplo.bmp")

Submitted via EggHeadCafe - Software Developer Portal of Choice

ASP.NET Caching Concepts
http://www.eggheadcafe.com/tutorials/aspnet/78de4d09-b013-48c0-8d4a-bedd68f675f5/aspnet-caching-concepts.aspx

0 new messages