Scroll de Imagenes?

Iniciado por z3nth10n, 31 Mayo 2013, 20:38 PM

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

z3nth10n

Hola muy buenas, pues me estoy copiando un poco de una app...  :xD
Y me gustaría saber como hacer esto:



Como veis a la izquierda hay un menú... Cuando le damos a click al botón se Scrolea... Será muy sencillo pero eso no lo he dado en mi vida y no se como hacerlo...

Luego si le damos con la rueda también se scrolea...

¿Como lo puedo hacer?

Un saludo.

Interesados hablad por Discord.

Eleкtro

#1
Es bastante fácil, mira:

1.Como contenedor usa un panel.

2.Metes dentro los pictureboxes que quieras (preferiblemente añádelos en tiempo de ejecución, porque si tienes que meter 30 o 50 pictureboxes... se te va a quedar pequeña la pantalla para agrandar el panel e ir metiendoles desde el designer xD)

3. Y ya el resto es símplemente usar las scrollbar del panel "Panel1.VerticalScroll." (Aunque no las tengas activas ni estén visibles, puedes usarlas para scrollear).

Puedes capturar la rueda del botón en el evento "Panel1.MouseWheel" de la forma que ya has visto en uno de mis codes,
Y si quieres hacer medio transparente el panel es suficiente con que uses un color ARGB, donde la A es el canal Alpha (transparencia), el valor máximo es 255, si lo pones a 125 pues el panel se verá al 50% de transparencia.

[youtube=640,360]http://www.youtube.com/watch?v=zIBDTMjrDd4&feature=youtu.be[/youtube]
Es una versión barata, te puede dar algunos problemas de Flickering (parpadeos) como se puede apreciar en el vídeo, me gustaría saber evitar los problemas de flickering, pero esto es WindowsForms y creeme que he preguntado a 1.000 expertos y nadie tiene la respuesta xD, es lo que hay.

PD: ¿Esperabas un code?  >:D

Saludos








z3nth10n

Y se puede hacer que vaya imagen por imagen en vez de un Scroll fluido? :silbar:

Interesados hablad por Discord.

kub0x

Cita de: EleKtro H@cker en 31 Mayo 2013, 22:23 PM
Es una versión barata, te puede dar algunos problemas de Flickering (parpadeos) como se puede apreciar en el vídeo, me gustaría saber evitar los problemas de flickering, pero esto es WindowsForms y creeme que he preguntado a 1.000 expertos y nadie tiene la respuesta xD, es lo que hay.

EleKtro si no quieres flickering no utilices Windows Forms. Para ello tienes WPF, tecnología que utiliza la aceleración por hardware (GPU) para el procesamiento gráfico, no como Windows Forms que utiliza el procesador para todo tipo de cómputo.

Ahora estoy sufriendo ya que he lanzado una aplicación comercial bastante amplia y necesita un par de toques gráficos. Al haberla implementado en Win Forms la app consume bastantes recursos al presentar gráficos y animaciones. Espero que si todo me va bien poder portarla a WPF.

P.D = WPF trabaja en el diseño de los controles con XAML, ni te puedes imaginar las maravillas que se pueden conseguir con éste.

Seazoux, no te recomiendo "petar" mucho la aplicación o ya verás lo que pasará xD.

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Eleкtro

#4
Tienes razón Kubox, yo siempre digo que para trabajar con transparencias hay que usar WPF y para lo del Flickering también, pero tooodo cambia en WPF, se me hace complejo, el hecho de crear un proyecto en WPF, aprender XAML, asimilar el hecho de volver a aprender todo lo que llevo aprendido en WindowsForms para poder "trasladarlo" a la sintaxis y los métodos de WPF... No me motiva nada, más bien me desespera.

Recuerdo una vez, no hace mucho, intenté usar un código de un WF en un WPF, para ello necesitaba un timer, y no hay timer en WPF, sé que puedo buscar el equivalente de un Timer en un WPF, pero es que diréctamente cerré el proyecto y me olvidé, porque para cada cosa voy a tener que ir buscando su equivalente y cambiar cada pequeña cosa, se me queda muy grande WPF.

Gracias por tu consejo Kubox






@Seazoux
Cita de: Seazoux en 31 Mayo 2013, 22:55 PM
Y se puede hacer que vaya imagen por imagen en vez de un Scroll fluido? :silbar:

Usé un timer para el scroll progresivo, perféctamente se puede hacer "imágen por imágen", lo que te permita tu imaginación (verticalscrollbar.value = )xD

Saludos








z3nth10n

#5
Por las transparencias no te preocupes... Me vas a tener que ayudar con los codes... ya que no puedo estar mucho tiempo en el PC  :-\

Puedes ayudarme?  :(




Tengo un pequeño problema...

Uno quiero hacer que cuando este sobre la imagen la imagen se amplie, y que salga los dos botones que se puede ver en el pantallazo...

Dos quiero hacer que cuando se clique en un boton (el de añadir) y lo selecciones de una lista que usara PHP y MySQL te cree un control (PictureBox) con los datos que no se aun si sacaros de un TXT  :-\




Cita de: kub0x en 31 Mayo 2013, 23:01 PM
Seazoux, no te recomiendo "petar" mucho la aplicación o ya verás lo que pasará xD.

Que puede pasar? :o

Interesados hablad por Discord.

BlackM4ster

Te paso mi solución personal:

Es un poco *****, pero es la idea  :silbar:
https://www.dropbox.com/s/i5fi777zqpdutlj/ListaImagenes.rar
- Pásate por mi web -
https://codeisc.com

Eleкtro

Ahora que leo ese último comentario, se me olvidó pasarte el form del video xD:

Añade en el form:
1 un panel y métele pictureboxes
1 botón para scrollear hacia arriba
1 botón apra scrollear hacia abajo

Código (vbnet) [Seleccionar]
Public Class Form1

    Dim Scroll_Position As Int32 = 0
    Dim Button_Down_Is_Pressed As Boolean = False
    Dim Button_Up_Is_Pressed As Boolean = False
    Dim WithEvents Progressive_Scroll_Timer As New Timer
    Dim SmallChange As Int32 = 5
    Dim Largechange As Int32 = 10

    ' Sub which reduces the Flickering, but this sub makes x20 times slower any operation of any Form/Application.
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H2000000
            Return cp
        End Get
    End Property 'CreateParams

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.ResumeLayout(False)
        Panel1.ResumeLayout(False)

        Panel1.VerticalScroll.Maximum = 999999999
        Progressive_Scroll_Timer.Interval = 50
        Panel1.BackColor = Color.FromArgb(150, 0, 0, 0)
    End Sub

    Private Sub Panel_MouseHover(sender As Object, e As EventArgs) Handles Panel1.MouseHover
        sender.focus()
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Progressive_Scroll_Timer.Tick
        If Button_Down_Is_Pressed Then
            Scroll_Down(SmallChange)
        ElseIf Button_Up_Is_Pressed Then
            Scroll_Up(SmallChange)
        Else
            sender.stop()
        End If
    End Sub

    Private Sub Scroll_Up(ByVal Change As Int32)
        Scroll_Position -= Change
        Try : Panel1.VerticalScroll.Value = Scroll_Position : Catch : Scroll_Position += Change : End Try
    End Sub

    Private Sub Scroll_Down(ByVal Change As Int32)
        Scroll_Position += Change
        Try : Panel1.VerticalScroll.Value = Scroll_Position : Catch : Scroll_Position -= Change : End Try
    End Sub

    Private Sub Button_Down_MouseDown(sender As Object, e As MouseEventArgs) Handles Button2.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Button_Down_Is_Pressed = True
            Progressive_Scroll_Timer.Start()
        End If
    End Sub

    Private Sub Button_Up_MouseDown(sender As Object, e As MouseEventArgs) Handles Button1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Button_Up_Is_Pressed = True
            Progressive_Scroll_Timer.Start()
        End If
    End Sub

    Private Sub Button_Down_MouseUp(sender As Object, e As MouseEventArgs) Handles Button2.MouseUp
        Button_Down_Is_Pressed = False
    End Sub

    Private Sub Button_Up_MouseUp(sender As Object, e As MouseEventArgs) Handles Button1.MouseUp
        Button_Up_Is_Pressed = False
    End Sub

    Private Sub Form_MouseWheel(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Panel1.MouseWheel
        If Panel1.Focused Then
            Select Case Math.Sign(e.Delta)
                Case Is > 0 : Scroll_Up(Largechange)
                Case Is < 0 : Scroll_Down(Largechange)
            End Select
        End If
    End Sub

End Class


salu2








z3nth10n

#8
Si es que no Electro, ya le has hecho trabajar al pobre BlackMaster  :xD

Interesados hablad por Discord.

BlackM4ster

- Pásate por mi web -
https://codeisc.com