elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda para corregir error visual redrawing effect en mi form
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda para corregir error visual redrawing effect en mi form  (Leído 6,879 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Ayuda para corregir error visual redrawing effect en mi form
« en: 24 Noviembre 2012, 09:41 am »

Como reproducir este error?

1. Crear un nuevo winform

2. Seleccionar una imagen de fondo para el form

3. Añadir un panel

4. Cambiar la spropiedades del panel a "Color=Transparent", "AutoScroll=True", y añadr unos cuantos controles dentro del panel.

Ejemplo:




5. Ahora scrollear arriba o abajo y...








¿Como corregir este error?

Yo: He probado todo lo que me han aconsejado expertos, y sigo sin tener idea.

El método de Invalidate o Refresh soamente disimulan el problema real y crean otro problema, porque se "flashea" el panel todo el rato si scrolleamos.

Una solución sería crear una vScrollbar para mi panel, y cambiar el mínimo de scroll-lines al usar la mouse-wheel, por ejemplo scrollear 15 lineas en vez de las 6 por defecto, ya que si scrolleo una página entera no tengo ningún problema visual. Pero esto no se hacerlo por mi mismo, si alguien me pudiera dar un ejemplo se lo agradecería mucho, pues con esto ya podría terminar mi app.





Más información:

(Supuestas soluciones que a mi no me han servido del todo, quizás no he sabido usarlas correctamente)

http://stackoverflow.com/questions/13516557/visual-problems-with-the-form-background-image
http://stackoverflow.com/questions/13535693/change-mouse-wheel-scroll-lines
http://www.daniweb.com/software-development/vbnet/threads/441204/how-to-correct-a-redrawing-background-cutted-effect-inside-a-panel
http://www.vbdotnetforums.com/vb-net-general-discussion/54165-how-correct-redrawing-background-cutted-effect-inside-panel.html#post153014


« Última modificación: 24 Noviembre 2012, 12:02 pm por EleKtro H@cker » En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #1 en: 24 Noviembre 2012, 14:54 pm »

la solucion que me funciono, es de crear un panel personalizado (una clase que herede del control panel), y dentro hacer el codigo necesario para que se bloquee el redraw, con la api LockWindowUpdate y el OptimizedDoubleBuffer que se usa para que no flickee o flashee como dijiste vos.

Código
  1. Public Class MyPanel
  2.    Inherits Panel
  3.    Public Sub New()
  4.        Me.AutoScroll = True
  5.        Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
  6.        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
  7.    End Sub
  8.    Private mImage As Image
  9.    Public Property Image() As Image
  10.        Get
  11.            Return mImage
  12.        End Get
  13.        Set(ByVal value As Image)
  14.            mImage = value
  15.            Invalidate()
  16.        End Set
  17.    End Property
  18.    Protected Overrides Sub OnScroll(ByVal se As ScrollEventArgs)
  19.        If se.Type = ScrollEventType.First Then
  20.            LockWindowUpdate(Me.Handle)
  21.        ElseIf se.Type = ScrollEventType.ThumbTrack OrElse se.Type = ScrollEventType.ThumbPosition Then
  22.            LockWindowUpdate(IntPtr.Zero)
  23.            Me.Refresh()
  24.            LockWindowUpdate(Me.Handle)
  25.        Else
  26.            LockWindowUpdate(IntPtr.Zero)
  27.            Me.Invalidate()
  28.        End If
  29.        MyBase.OnScroll(se)
  30.    End Sub
  31.    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
  32.        Console.WriteLine(e.ClipRectangle.ToString())
  33.        Using br As New SolidBrush(Me.BackColor)
  34.            e.Graphics.FillRectangle(br, Me.ClientRectangle)
  35.        End Using
  36.        If mImage IsNot Nothing Then
  37.            e.Graphics.DrawImage(mImage, 0, 0)
  38.        End If
  39.        MyBase.OnPaint(e)
  40.    End Sub
  41.    <DllImport("user32.dll")> _
  42.    Private Shared Function LockWindowUpdate(ByVal hWnd As IntPtr) As Boolean
  43.    End Function
  44. End Class
  45.  

es como si fuera un panel comun de visual basic, ya que hereda todas als propiedades del panel, salvo que se le programa dentro para que haga lo que vos quieras. fijate que te tiene que aparecer como si fuera un control en la barra de controles, llamado "MyPanel" despues cambiale el nombre por el que quieras. para que te aparezca como control tenes que generar la solucion.

lo metes en el form y listo, usas ese.

saludos.





« Última modificación: 24 Noviembre 2012, 15:00 pm por seba123neo » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #2 en: 24 Noviembre 2012, 15:33 pm »

Te lo agradezco Seba, pero el efecto que consigo con ese nuevo control es el mismo que se aprecia en la imagen que puse... no cambia absolutamente nada, todo sigue igual  :(

Para asegurarme lo he probado tanto en mi APP como creando un nuevo winform solamente con tu class, el MyPanel, y unos checkboxes como en el ejemplo que puse...

¿Debo hacer algo en especial con tu class aparte de "crear" el nuevo panel en mi form y meter los checkboxes adentro?

Por si sirve de algo, el entorno en el que lo estoy intentando es:
winform + .net framework 4.5

¿Que configuración has usado para que te funcione?

un saludo
En línea

Keyen Night


Desconectado Desconectado

Mensajes: 496


Nothing


Ver Perfil
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #3 en: 24 Noviembre 2012, 15:49 pm »

Yo lo resolví así no es perfecto pero disimula casi totalmente...

Ese código en el evento Load del Form

Código
  1.        Me.DoubleBuffered = True
  2.        Panel1.GetType.GetProperty( _
  3. "DoubleBuffered", _
  4. Reflection.BindingFlags.NonPublic Or _
  5. Reflection.BindingFlags.Instance) _
  6. .SetValue(Panel1, True, Nothing)

Y en el evento Scroll, no en el MouseWheel, colocas...

Código
  1. Panel1.Invalidate()

Sino lo vez bien entonces solo queda una alternativa, recortar el rectángulo del BackgroundImage que esta detrás del Panel y colocarlo como fondo al Panel, el método Invalidate llama al evento Paint del Panel de modo que se puede editar las coordenadas y tamaños en el evento Scroll para que al hacer Invalidate se redibuje el rectángulo. Estoy haciendo el ejemplo a ver si se ve mejor.
En línea

La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #4 en: 24 Noviembre 2012, 16:20 pm »

Te lo agradezco Seba, pero el efecto que consigo con ese nuevo control es el mismo que se aprecia en la imagen que puse... no cambia absolutamente nada, todo sigue igual  :(

Para asegurarme lo he probado tanto en mi APP como creando un nuevo winform solamente con tu class, el MyPanel, y unos checkboxes como en el ejemplo que puse...

¿Debo hacer algo en especial con tu class aparte de "crear" el nuevo panel en mi form y meter los checkboxes adentro?

Por si sirve de algo, el entorno en el que lo estoy intentando es:
winform + .net framework 4.5

¿Que configuración has usado para que te funcione?

un saludo


una imagen para que veas que funciona:



fijate que el primero es un panel normal.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #5 en: 24 Noviembre 2012, 16:26 pm »

una imagen para que veas que funciona:



fijate que el primero es un panel normal.

!!!!!!!!!!!!! como es posible? Hice todo lo que me dijiste y solo consigo que se véa "MyPanel" como el panel de la izquierda :(

es más, como es posible que esos 2 paneles se muevan mientras arrastras la rueda esa? si yo creo un panel, por defecto no consigo que se mueva al arrastrar como lo haces tú... solo puedo hacerlo con la rueda de mi mouse, o pinchando en la scrollbar sin mantener apretado.

Seba, lo de la imagen es un winform??

Uf, necesito conseguir el mismo efecto :(


¿¿¿¿Me podrías pasar el source????


PD: Keyen, en un rato pruebo tu solución, gracias!
« Última modificación: 24 Noviembre 2012, 16:31 pm por EleKtro H@cker » En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #6 en: 24 Noviembre 2012, 17:04 pm »

Citar
como es posible que esos 2 paneles se muevan mientras arrastras la rueda esa?

pues asi es el panel por defecto, mientras moves el scroll se mueve el contenido, no quiero creer que en el VB 2010 no se mueva el contenido, hasta el VB6 tiene esa funcion.

Citar
si yo creo un panel, por defecto no consigo que se mueva al arrastrar como lo haces tú... solo puedo hacerlo con la rueda de mi mouse, o pinchando en la scrollbar sin mantener apretado.

eso es raro, no creo que el VB 2010 es peor que el 2008  y le sacaron esa funcion :o

Citar
Seba, lo de la imagen es un winform??

si, es un formulario comun con una imagen de fondo, la recorte porque mi monitor es gigante y el gif pesaba megas.

aca podes descargar el codigo del proyecto:

Panel

En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #7 en: 24 Noviembre 2012, 18:31 pm »

asi es el panel por defecto, mientras moves el scroll se mueve el contenido, no quiero creer que en el VB 2010 no se mueva el contenido, hasta el VB6 tiene esa funcion.

Uso VS2012 (Ultimate).

He usado tu source, sin modificar NADA (Solamente he actualizado los ficheros para la migración a VS2012) y aqui tengo la prueba de lo que me ocurre, es muy raro...

Como ves las scrollbars de los paneles no hay modo de "arrastrarlos", y el panel de la derecha flickea o flashea (Y el de la izquierda ni te cuento lo que hace puf xD).




¿Alguna idea de esta diferencia entre tu imagen y la mía?
« Última modificación: 24 Noviembre 2012, 18:46 pm por EleKtro H@cker » En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #8 en: 24 Noviembre 2012, 18:49 pm »

para saber si es un problema del VB2012 hace esto, ejecuta el .exe de la carpeta debug del proyecto que yo te pase (que esta compilado usando VB 2008), si ahi la scrollbar te funciona, es porque el problema es el VB 2012.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.821



Ver Perfil
Re: Ayuda para corregir error visual redrawing effect en mi form
« Respuesta #9 en: 24 Noviembre 2012, 19:04 pm »

para saber si es un problema del VB2012 hace esto, ejecuta el .exe de la carpeta debug del proyecto que yo te pase (que esta compilado usando VB 2008), si ahi la scrollbar te funciona, es porque el problema es el VB 2012.

Hola Seba,

He vuelto a descargar el archivo de mediafire, he ejecutado el exe de la cerpeta debug, y es lo mismo, no puedo arrastrar la scrollbar y además flashea.

PD: Uso win7 x64, pero también he probado el exe en una máquina virtual con Win7 x64 sin mi theme oscuro de Windows y sin modificar

 :-(
« Última modificación: 24 Noviembre 2012, 19:06 pm por EleKtro H@cker » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como corregir ...Popup menu se muestra en el form
Programación Visual Basic
byway 8 3,693 Último mensaje 13 Diciembre 2008, 18:17 pm
por byway
[ Batch ] Preguntas y ayuda para corregir mi script...
Scripting
SuperDraco 6 7,010 Último mensaje 24 Marzo 2011, 15:57 pm
por SuperDraco
como puedo corregir este error
GNU/Linux
felix6193 3 2,669 Último mensaje 31 Mayo 2012, 13:19 pm
por Saberuneko
corregir error XML externo
PHP
alcatraz 1 1,801 Último mensaje 6 Agosto 2012, 11:59 am
por #!drvy
BioWare regala Mass Effect Trilogy a los afectados por el error de COD: Black ..
Noticias
wolfbcn 0 1,241 Último mensaje 14 Noviembre 2012, 21:54 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines