IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] Limiter le déplacement d'un controle


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Par défaut [VB6] Limiter le déplacement d'un controle
    Bonjour , j'aimerai limiter le deplacement d'un controle , je m'explique , j'ai inserer un controle PICTUREBOX2 dans une PICTUREBOX1 , grace aux evenement MouseMove et MouseDown , je peux deplacer la picturebox2, mais je peux le deplacer en dehors des limite de la picturebox , en d'autre terme , je perd ma picturebox2, j'ai fais ceci pour limiter le deplacement du control à l'interieure de ma picturebox , mais ya kk bug :s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Option Explicit
    Dim x0 As Integer, Y0 As Integer
     
    Private Sub picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
            If Picture2.Left > 0 And (Picture2.Left + Picture2.ScaleWidth) < 2775 And Picture2.Top > 0 And (Picture2.Top + Picture2.ScaleHeight) < 2115 Then ' definition des limites de ma picturebox1
                Picture2.Move Int((Picture2.Left + ScaleX(X, 1, 3)) - x0), Int((Picture2.Top + ScaleY(Y, 1, 3)) - Y0)
            Else
                If Picture2.Left <= 0 Then
                    Picture2.Left = 1
                End If
                If (Picture2.Left + Picture2.ScaleWidth) >= 2775 Then
                    Picture2.Left = 2770 - Picture2.ScaleWidth
                End If
                If Picture2.Top <= 0 Then
                    Picture2.Top = 5
                End If
                If (Picture2.Top + Picture2.ScaleHeight) Then
                    Picture2.Top = 2110 - Picture2.ScaleWidth
                End If
            End If
        End If
        Label1.Caption = Picture2.Left
        Label2.Caption = Picture2.Top
    End Sub
     
    Private Sub picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
          Y0 = ScaleY(Y, 1, 3)
          x0 = ScaleX(X, 1, 3)
        End If
    End Sub
    merci d'avance
    amicalement lucas

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    et on peut connaitre la nature du bug?

  3. #3
    Membre éclairé Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Par défaut
    Et bien la picturebox2 fait nimporte quoi lorsque je suis aux limite :s
    Essaye en mettant une picturebox2 dans une picturebox1 de dimension
    height = 2115 et Width = 2775

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Explications plus claires et plus précises à donner car je ne vois aucun déplacement de lanel dans ce code !
    Deplus, quand je vois :
    "2775"
    je me dis que c'est tout sauf du calcul informatique !

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    pas éttonant , essaye comme ça.
    Citation Envoyé par Lucas42
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Option Explicit
    Dim x0 As Integer, Y0 As Integer
     
    Private Sub picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
            If Picture2.Left > 0 And (Picture2.Left + Picture2.ScaleWidth) < 2775 And Picture2.Top > 0 And (Picture2.Top + Picture2.ScaleHeight) < 2115 Then ' definition des limites de ma picturebox1
                Picture2.Move Int((Picture2.Left + ScaleX(X, 1, 3)) - x0), Int((Picture2.Top + ScaleY(Y, 1, 3)) - Y0)
           End If
        End If
        Label1.Caption = Picture2.Left
        Label2.Caption = Picture2.Top
    End Sub
     
    Private Sub picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
          Y0 = ScaleY(Y, 1, 3)
          x0 = ScaleX(X, 1, 3)
        End If
    End Sub
    merci d'avance
    amicalement lucas

  6. #6
    Membre éclairé Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Par défaut
    oui pour le moment ya pas de calcul informatique mais je comprend qd mm po pourquoi ma PICTURE2 fait n'importe quoi lorsque je suis aux limite de ma PICTURE1

    et méphistopheles , ce que tu as donner ne fonctionne qu'a moitié car dés qu'on atteint la limite du la PICTURE1 , la PICTURE2 reste figé

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Bon, je vois que Lucas a corrigé son 1er message (plus de déplacements de labels)
    Mais il va falloir qu'il soit plus clair :
    jusqu'ou exactement permettre à la Picture2 de naviguer à l'intérieur de la Picture1 ? (pour chacune des 4 arêtes, s'entend). Car le code de Méphisto en empêchait la sortie et me semblait correspondre au voeu !
    Des explications claires s'imposent, sinon il va y avoir des pages et des pages inutiles !

  8. #8
    Membre éclairé Avatar de Lucas42
    Inscrit en
    Janvier 2006
    Messages
    301
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 301
    Par défaut
    Et bien oui le code de mephisto "fonctionne" mais ne correspond pas TOTALEMENT à mes attentes ... Je desire en effet pouvoir deplacer la picture2 à l'interieure des 4 arretes de la picture1 .
    Mon code qd à lui fonctionne ( il est vrai qu'il n'est pas rédigé dans les régles de l'art ) mais lorsque que j'atteint les limites le picture2 fait nimporte quoi , mais je peut toujours deplacer ma picture2 , contrairement aux code de mephisto qui fige la picture2 lorsqu'on atteint les limites ....

  9. #9
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Lucas42
    oui pour le moment ya pas de calcul informatique mais je comprend qd mm po pourquoi ma PICTURE2 fait n'importe quoi lorsque je suis aux limite de ma PICTURE1

    et méphistopheles , ce que tu as donner ne fonctionne qu'a moitié car dés qu'on atteint la limite du la PICTURE1 , la PICTURE2 reste figé
    ben oui, mais c'est par-ce que si tu déplace la picture box2, la position de la souris change, donc soit tu déplace aussi la souris, soit tu met une conditionpour arêter l'evenement (je vois pas trop comment).

    une manière plus simple consisterais à utiliser getx et gety dans un timer, relié à mousedown et mousup.

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Que veux-tu faire exactement ?
    J'y perds mon latin...
    Veux-tu, par hasard, essayer d'exprimer que tu souhaites que de drag sur la picture2 provoque celui de la picture1 lorsque la picture2 atteint une arrête de la picture1 ?

  11. #11
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    à son code, on dirais qu'il veut remmete lea picture 1 en 1,1 mais je vois pas pourquoi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/02/2005, 15h49
  2. Limiter les déplacement de la souris a la fenetre
    Par Mathieu.J dans le forum OpenGL
    Réponses: 22
    Dernier message: 11/06/2004, 12h55
  3. [VB6] Afficher le ToolTipText d'un controle perso
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 14/12/2002, 15h52
  4. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56
  5. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo