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.
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.