Scroll control user pour dérouler les controles et enregistrer les coordonnées.

Description

Héritier du UserControl il permet de faire défiler aussi bien un WebBrowser qu'une pictureBox.
L'exemple d'utilisation de ce Contrôle user permet de Transformer le Bureau en pupitre de jeu Online: En sauvegardant les paramètres de positionnement des curseurs et les coordonnées d'affichage, on peut limiter et multiplier les points de vue (Faire des fenêtres spécialisées autour des spécificité des pages internet). Si on enregitre les paramètres on peut re-ouvrir la fenêtre exactement comme on a fermé. c'est une version Bêta je vérifie pas si la barre de défilement s'en va pour un contrôle qui traite une page Webb dont une dimension est plus petite où égale que la fenêtre: peut être il faut effacer la partie qui gère cette éventualité. (m'est arrivé que la barre est aussi longue que la fenêtre aux premiers débuggages, et j'inverse tout le temps x et y quand j'affecte à H ou L.) Je retourne à mon Thread et la quetion de la position au passage en mode plein écran reste en suspens.

Source / Exemple :


Public Class Form1
    Dim Exemple As New Surf '(réserve mémoire dessin page Webb en option)
    Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        Text = "Mon Site rouille"
        'Tous les controls de l'exemple dand la fenêtre
        For Each C As Control In Exemple.Controls : Controls.Add(C) : Next
        Exemple.init() '(le Site et sa position en option)
    End Sub
End Class

Public Class Surf
    Inherits Form
    Dim Fly As New WebBrowser
    Dim Scroller As New Scroll(Fly)
    Friend Sub New(Optional ByVal Largeur As Single = 1200, _
                  Optional ByVal Hauteur As Single = 1200)
        Text = "Surf"
        Fly.SetBounds(0, 0, Largeur, Hauteur) 'Taille de la Page webb
        Fly.ScrollBarsEnabled = False
        Controls.Add(Scroller)
    End Sub
    Friend Sub init(Optional ByVal Site As String = "http://www.vbfrance.com/", _
                    Optional ByVal XOffset As Single = 870, _
                    Optional ByVal YOffset As Single = 200)
        Fly.Navigate(Site)
        Scroller.init(XOffset, YOffset)
    End Sub
End Class

Public Class Scroll
    Inherits UserControl
    Dim Outil As Control
    Dim Planche As New Panel
    Dim WithEvents VBar As New VScrollBar
    Dim WithEvents HBar As New HScrollBar
    Dim Cas As Byte = 0

    Friend Sub Emboite()
        Dim épaisseur As Single = VBar.Width 'épaisseur standard des barres (Largeur= BL)
        Dim Largeur As Single = Width 'init Largeur de la planche et de la barre horizontale
        Dim Hauteur As Single = Height 'init Hauteur de la planche et de la barre verticale
        Dim U As ScrollBars = ScrollBars.None

        If Largeur < Outil.Height Then
            Largeur = Largeur - épaisseur
            U = ScrollBars.Horizontal
            Cas = 2
        End If
        If Hauteur < Outil.Width Then
            Hauteur = Hauteur - épaisseur
            Cas = Cas + 1
            If Cas = 3 Then U = ScrollBars.Both _
            Else U = ScrollBars.Vertical
        End If

        'Cas par cas 
        If Cas = 2 Or Cas = 3 Then
            VBar.SetBounds(Largeur, 0, épaisseur, Hauteur)
            VBar.Minimum = 0
            VBar.Maximum = Outil.ClientRectangle.Height - Hauteur + VBar.LargeChange - 1
            VBar.SmallChange = Hauteur / 5
        Else
        End If
        If Cas = 1 Or Cas = 3 Then
            HBar.SetBounds(0, Hauteur, Largeur, épaisseur)
            HBar.Minimum = 0
            HBar.Maximum = Outil.ClientRectangle.Width - Largeur + HBar.LargeChange - 1
            HBar.SmallChange = Hauteur / 5
        End If
        Planche.SetBounds(0, 0, Largeur, Hauteur)
    End Sub

    Friend Sub New(ByVal O As Control)
        Outil = O
        Dock = DockStyle.Fill
        Controls.Add(Planche)
        Controls.Add(VBar)
        Controls.Add(HBar)
    End Sub

    Friend Sub init(Optional ByVal dx As Integer = System.Math.E, _
                        Optional ByVal dy As Integer = System.Math.E)

        If dx <> System.Math.E Then
            If dy = System.Math.E Then dy = Outil.Location.Y
            Outil.SetBounds(-dx, -dy, Outil.Width, Outil.Height)
            HBar.Value = dx
            VBar.Value = dy
        End If

        Planche.Controls.Add(Outil) 'épingle l'outil sur la planche
        Emboite()
    End Sub

    Private Sub HBar_Scroll(ByVal eventSender As System.Object, _
             ByVal eventArgs As System.Windows.Forms.ScrollEventArgs) _
             Handles HBar.Scroll
        Outil.Left = -eventArgs.NewValue
    End Sub
    Private Sub VBar_Scroll(ByVal eventSender As System.Object, _
                 ByVal eventArgs As System.Windows.Forms.ScrollEventArgs) _
                 Handles VBar.Scroll
        Outil.Top = -eventArgs.NewValue
    End Sub

    Private Sub frmScroll_Resize(ByVal eventSender As System.Object, _
     ByVal eventArgs As System.EventArgs) Handles Me.Resize
        Emboite()
    End Sub

End Class

Conclusion :


Il y a tant de façons de développer l'objet que je limite à l'essentiel.
On a tous remarqué la nouvelle tendance des pages webb à moduler la géomètrie des modules qui les composent au lieu des barres de défilement habituelles. Sans doute comme Bt Yahoo que le navigateur Microsoft ne peut ouvrir sans oublier le positionnement, et donc obligé d'afficher les publicités. Si on voulait ouvrir plusieur fenêtres, il fallait tout recadrer manuellement pour avoir la place sur l'écran, et sur vista, re-paramètrer l'affichage des fenêtres du navigateur local. Il fallait faire quelque chose.
C'est pas parfait mais utilisable. J'enregistre les OffSets dans des flux et re-ouvre les fenêtres comme je les ai fermées. Le site se nourissant de pub, ca risque d'être éffacé. Dépèchez de copier. Je met pas ma bêbête gestion des flux qu'elle me satisfait pas et que de toutes façon c'est dur de faire mieux que le stream.
J'espère qu'au pire, ce petit code aidera les joueurs à gérer plusieurs pages simultanément. Si je me remet pas à l'étude ses Threads, peut-être je m'attaque au login.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.