Splitter de fenêtre

Soyez le premier à donner votre avis sur cette source.

Vue 3 833 fois - Téléchargée 506 fois

Description

C'est un exemple de splitter de fenêtre, comme entre l'arborescence et le conteun du dossier dans l'Explorer de widows. Les controles à gauches et à droite sont plus ou moins grands. S vous n'avez pas compris (c'est pas facile à expliquer), jetez un voup d'oeil à la capture ;)

Tout est dans le zip, je mets la source ici pour les pressés ;)

Source / Exemple :


' Tout est dans le zip

Dim Resizing As Boolean

Private Sub Form_Load()
    ' Je le laisse à 1 pour pouvoir la voir en création ;)
    Picture1.BorderStyle = 0
End Sub

Private Sub Form_Resize()
    ' Hop, en haut à gauche...
    Text1.Top = 0
    Text1.Left = 0
    
    ' Puis on règle les dimentions...
    Text1.Height = Me.ScaleHeight   ' Max de hhaut
    Text1.Width = Picture1.Left     ' Jusqu'au Picture1
    
    ' Hop, après le Picture1
    Text2.Top = 0
    Text2.Left = Picture1.Left + Picture1.Width
    
    ' Puis on règle les dimentions...
    Text2.Height = Me.ScaleHeight
    Text2.Width = Me.ScaleWidth - Picture1.Left - Picture1.Width
    
    ' On règle la hauteur de Picture1
    Picture1.Height = Me.ScaleHeight
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Resizing = True
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Resizing Then
        DoEvents
        ' Si on sort de la form avec 500 twips de marge...
        If Picture1.Left + X <= Me.ScaleWidth - 500 And Picture1.Left + X >= 500 Then
            ' We place the PicturePox at the right place
            Picture1.Left = Picture1.Left + X
        Else
            ' On se met à la limite
            If Picture1.Left + X >= Me.ScaleWidth - 500 Then
                
                Picture1.Left = Me.ScaleWidth - 500
            Else
                Picture1.Left = 500
            End If
        End If
        
        ' On redimentionne les Text1 et Text2
        Text1.Width = Picture1.Left
        Text2.Width = Me.ScaleWidth - Picture1.Left - Picture1.Width
        Text2.Left = Picture1.Left + Picture1.Width
    End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Resizing = False
End Sub

Conclusion :


Violà. J'espère que ce n'est pas une source déjà postée (je n'ai rien trouvé d'autre y ressemblant en tous cas...). Peut-être un jour un OCX...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
159
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 septembre 2005

Et si ! Je l'avais déjà fait :

http://www.vbfrance.com/code.aspx?ID=3909
Messages postés
267
Date d'inscription
lundi 22 septembre 2003
Statut
Membre
Dernière intervention
27 novembre 2005

seyev> Par trivial, je pense "simple dans le principe" : c'est juste une modif de la position et de la taille d'une zone quand tu resize l'autre.

tout betement ... :-D

mais y'a aucune critique dans mon post. C'est juste pour dire que c'est tout simple mais hyper pratique qd meme
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

En fait Seyev, il y a quelques changements...

Premièrement, WITH ... END WITH va optimiser ton code. Il sera plus rapide. C'est pratique surtout si chacune des fenêtres contiennent beaucoups de choses.

Deuxièmement, regarde bien la vérification avant le Resize... If Me.ScaleWidth - (.Left - .Width) > 0 Then ... Ce petit bout de code va permettre à ton application de ne pas planter si quelqu'un réduit la fenêtre au plus petit.. Présentement, ça plante.

Troisièmement, le MOVE accélère aussi ton application.

La constante, c'est juste pour rendre la modification du code plus facile.. par exemple, si tu voulais changer ta marge et mettre 800 à la place de 500, et bien là tu n'as qu'à changer la valeur de la constante et la modif s'appliquera à l'ensemble de ton code. C'est plus rapide et c'est plus sûre car tu ne risque pas d'oublier des valeurs.. Surtout si ton code est très long.

Une autre façon serait aussi d'utiliser un ImageBox à la place d'un PictureBox.. Ou encore mieux, un SHAPE. C'est encore plus rapide.

Voilà,

MadLucas
Messages postés
93
Date d'inscription
samedi 9 juin 2001
Statut
Membre
Dernière intervention
6 mai 2005
1
kimmelf2> "basique et triviale" tu dis... Comment faire autrement, sans OCX supplémentaire et sans être trivial ? Là, je vois pas... ;)

MadLucal> Bien sûr, mais l'idée est la même ;) C'est vrai que de mettre des constantes permet desimplifier le code... (d'ailleurs dans mes programmes, ce sont des constantes que j'utilise...) Pour ce qui est du move par contre, je n'ai pas l'habitude de l'utiliser... Merce à toi ;)

++
Seyev
Messages postés
60
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
25 avril 2005

Voici ce que je te suggère:

'-----------------------------------------------------------
Dim Resizing As Boolean
Private Const myMargin = 500

Private Sub Form_Load()
Picture1.BorderStyle = 0
End Sub

Private Sub Form_Resize()
With Picture1
Text1.Move 0, 0, .Left, Me.ScaleHeight
If Me.ScaleWidth - (.Left - .Width) > 0 Then
Text2.Move .Left + .Width, 0, Me.ScaleWidth - (.Left - .Width), Me.ScaleHeight
End If
.Height = Me.ScaleHeight
End With
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Resizing = True
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Resizing Then
DoEvents
With Picture1
If .Left + X <= (Me.ScaleWidth - myMargin) And .Left + X >= myMargin Then
.Left = .Left + X
Else
If .Left + X >= Me.ScaleWidth - myMargin Then
.Left = Me.ScaleWidth - myMargin
Else
.Left = myMargin
End If
End If

Text1.Width = .Left
Text2.Move .Left + .Width, Text2.Top, Me.ScaleWidth - (.Left - .Width)
End With
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Resizing = False
End Sub
'------------------------------------------------------------

+

MadLucas
Afficher les 17 commentaires

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.