Rendre une flexgrid dimensionnable sizable

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 021 fois - Téléchargée 26 fois

Contenu du snippet

Bonjour,

Je cherchais la propriété "sizable" de ma flexgrid "MSFlexGrid", mais je n'ai rien trouvé... J'ai crée un bout de code qui simule l'aspect sizable de la liste...

On peut gérer la sensibilité de la souris avec la flexgrid
SENS_WIDTH = 300
SENS_HEIGHT = 600
SENS_BOTH = 300

Source / Exemple :


Private Sub MSFlexGrid_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
On Error Resume Next
    Screen.MousePointer = 0
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
On Error Resume Next
    Dim SENS_WIDTH, SENS_HEIGHT, SENS_BOTH As Integer
    Dim WIDTH, HEIGHT, BOTH, WAIT, NORMAL As Integer
    Dim who As Integer
    'définie la sensibilité
    SENS_WIDTH = 300
    SENS_HEIGHT = 600
    SENS_BOTH = 300
    'les pointeurs de souris
    WAIT = 11
    NORMAL = 0
    WIDTH = 9
    HEIGHT = 7
    BOTH = 8

    'par defaut on ne modifie rien
    who = NORMAL
    'on redimensionne la largeur de la flexgrid suivant la position de la souris
    If (x > (MSFlexGrid.WIDTH + MSFlexGrid.Left - SENS_WIDTH) And x < (MSFlexGrid.WIDTH + MSFlexGrid.Left + SENS_WIDTH) And y > MSFlexGrid.Top And y < (MSFlexGrid.HEIGHT + MSFlexGrid.Top + SENS_BOTH)) Then
        who = WIDTH
    End If
    'on redimensionne la hauteur de la flexgrid suivant la position de la souris
    If (y > (MSFlexGrid.HEIGHT + MSFlexGrid.Top - SENS_HEIGHT) And y < (MSFlexGrid.HEIGHT + MSFlexGrid.Top + SENS_HEIGHT) And x > MSFlexGrid.Top And x < (MSFlexGrid.WIDTH + MSFlexGrid.Left + SENS_BOTH)) Then
        If who <> WIDTH Then
            who = HEIGHT
        Else
            who = BOTH
        End If
    End If
    
    'traitement seulement lorsque le bouton clic gauche est enfoncé
    Screen.MousePointer = who
    If Button = 1 Then
        Select Case who
            Case HEIGHT
                MSFlexGrid.HEIGHT = y - MSFlexGrid.Top
            Case WIDTH
                MSFlexGrid.WIDTH = x - MSFlexGrid.Left
            Case BOTH
                MSFlexGrid.HEIGHT = y - MSFlexGrid.Top
                MSFlexGrid.WIDTH = x - MSFlexGrid.Left
        End Select
    End If
End Sub

A voir également

Ajouter un commentaire

Commentaires

Messages postés
556
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
31 octobre 2019

Je vois. En fait, tu devrai rendre la sensibilité toute petite, comme tous les controles (juste quand on est sur le bord du MSFlexGrid), et pour le redimensionnement, il faut faire en sorte de recuperer la place du pointeur lors du premier click, puis de recuperer la place du pointeur (pas dans l'evenement Mouse_Move, dans une boucle (ne pas oublier DoEvents !), sinon il pourra eventuellement y avoir des bugs si par exemple le curseur sort de la feuille), de faire la soustraction et de l'ajouter a la taille du FlexGrid. J'espere que tu comprends ce que je veux dire =P . Si jamais tu ne comprends pas, dis le moi, je m'efforcerai de te donner un exemple de code.

PS : Utilise les API pour les positions de curseur.

BILALoch
Messages postés
34
Date d'inscription
jeudi 9 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2007

Merci pour tes remarques.

Alors pour le point 1: C'est voulu. C'est un code que j'ai implémenté dans un de mes formulaires. Et je voulais gérer uniquement le redimensionnement en bas et à droite (ou les deux) mais ni à gauche ni en haut....

Pour les points 2 et 3: c'est lié au même probleme. => On doit régler la variable sensibilité SENS_...
Ainsi, plus on va augmenter la sensibilité, plus le redimensionnement fonctionnera avec l'acceleration de la souris, mais aussi plus le curseur se transformera en fleche trop tot :( .... et vice versa

Si quelqu'un a une astuce pour pouvoir redimensionner quelque soit l'acceleration de la souris, on pourra alors baisser le SENS_ donc corriger le point 3...
Messages postés
556
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
31 octobre 2019

Franchement, c'est pas mal. 7 / 10 pour quelques points :
- On ne peut redimensionner que d'en bas et d'à droite ;
- Si on accelere avec la souris, la redimension ne fonctionne pas ;
- Le curseur se transforme trop tot avec le curseur en fleches et on peut redimensionner de loin ;

Voila trois points, en sens réel (trois points de ta note :P) mais aussi en sens figuré (les trois defaults de ton code)

BILALoch

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.