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 :

Retourner les coordonnées d'un usercontrol


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut Retourner les coordonnées d'un usercontrol
    Salut,

    J'ai un usercontrol qui contient un textbox.

    Je fais du déplacement de ce usercontrol sur ma form.

    Quan j'utilise l'événément MouseUp du textbox, après le déplacement, je récupère bien les nouvelles coordonnées X & Y du contrôle, mais dès que la main est redonnée à la form, ces coordonnées sont perdues.

    Comment faire pour retourner les nouvelles coordonnées du usercontrol au conteneur ?

    Merci par avance.

  2. #2
    Membre régulier Avatar de Ndugu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 121
    Points : 88
    Points
    88
    Par défaut
    Peut etre en ajoutant deux variables publiques à ton controle que tu modifie en même temps que les coordonnées X et Y.

    Ensuite tu dois pouvoir faire MonControle1.MaVariableX

    a plus

  3. #3
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Salut esoso
    Je crois avoir compris se que tu recherches, tu veux que ton Form soit avertit quand le UserControl est deplacé.
    Il faut que tu ajoutes dans le code de l’User, un evenement
    Dans les declarations de l’User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Déclarations d'événement:
    Event Deplacement()
    Dans toutes les procedures de ton User, là ou ces coordonées changes, tu mets ceci, ce qui va declancher la procedure UserControl11_ Deplacement sur ton Form
    Pour toi il me semble que ces procedures sont,
    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
    Private Sub UserControl_KeyUp(KeyCode As Integer, Shift As Integer)
    If Shift = 0 And Pictemoin.Visible = True Then
     'termine l'action deplacemnt et/ou dimmensionnement
     '….
     UserControl.MousePointer = 1
     RaiseEvent Deplacement
    End If
    End Sub
     
    Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Shift = vbCtrlMask And Button = 1 Then ' Ctrl et bouton gauche de la souris relevé
     'pour garantir que UserControl soit toujours entierement dans son conteneur
      'verifications des coordonnées minimum
      '….
     UserControl.MousePointer = 1
     RaiseEvent Deplacement
    End If
    End Sub
     
    Private Sub txtText_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 And Shift = vbCtrlMask Then
     'action speciale, passe la main au traitement niveau UserControl
     UserControl_MouseUp Button, Shift, X, Y
     RaiseEvent MouseUp(Button, Shift, X, Y)
     '….
     RaiseEvent Deplacement
    End If
    End Sub
    Dans ta Form, tu recuperes les coordonées dans la procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserControl11_ Deplacement()
     Dim LeUserLeft As Integer, LeUserTop As Integer
     LeUserLeft =  UserControl11.Left
     LeUserTop = UserControl11.Top
    End Sub
    A+

  4. #4
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Encore une fois, merci ProgELecT.

    Juste un petit problème : j'ai déclaré les événements comme indiqué, mais j'ai le message suivant :

    Interface invalide pour implémentations
    A quoi est-ce dû ? Faut-il créer l'événement "Deplacement" dans le usercontrol ?

  5. #5
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Amicalement : tu as lut trop vite
    Il faut que tu ajoutes dans le code de l’User, un evenement
    Dans les declarations de l’User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Déclarations d'événement:
    Event Deplacement()
    Oui, il faut créer l'événement "Deplacement" dans le usercontrol.
    A+

  6. #6
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Salut,

    Ok, j'avais lu trop vite .

    Mais j'ai encore un problème .

    Donc, j'ai bien créé l'événement du usercontrol Deplacement, et ajouter les RaiseEvent Deplacement là ou il fallait, puis, en fin de compte, créer la procédure au niveau de la form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub test_Deplacement()
    Dim LeUserLeft As Integer, LeUserTop As Integer
     
      LeUserLeft = test.Left
      LeUserTop = test.Top
     
      Debug.Print "Left: " & LeUserLeft
      Debug.Print "Top:" & LeUserTop
    End Sub
    Le nom de mon usercontrol sur la form étant test.

    Malheureusement, les coordonnées affichées sont exactement les mêmes quelque soit le déplacement du usercontrol. En fait, ce sont même les coordonnées originales du usercontrol.

    J'ai certainement oublié quelque chose mais où ?

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Le X et Y dans le UC ne réprésente pas l'emplacement du UC pour y remédier..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Déclarer 
    Event Deplacement(Gauche as single,  Haut as single)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    et pour les raisevent
    RaiseEvent Deplacement(Extender.left, Extender.Top)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dans un module
    Public LeUserLeft As single 
    Public LeUserTop As single
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub test_Deplacement(Gauche as single , Haut as single)
       LeUserLeft=Gauche
       LeUserTop =Haut
      Debug.Print "Left: " & Gauche
      Debug.Print "Top:" & Haut
    End Sub
    Comme cela tu devrais récupérer l'emplacement de to UC
    A+
    EDIT:
    ou peut-être plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub test_Deplacement()
    Dim LeUserLeft As Integer, LeUserTop As Integer
     
      LeUserLeft = NomDuUC.Left
      LeUserTop = NomDuUC.Top
     
      Debug.Print "Left: " & LeUserLeft
      Debug.Print "Top:" & LeUserTop
    End Sub

  8. #8
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Salut LeForestier , curieusement tes propositions ne fonctionnent pas, et la mienne posté hier non plus (sa me semblait tellement evidant, simple que je n'avai pas verifié ).
    Salut esoso,
    voici comment solutionner, avec une amelioration à apporter (l'unité de mesure), je suis au pro, je n'ai pas le code de l'User et pas trop de temp, quelqu'un te donnerat peut être la solution d'ici la fin de l'apres-midi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Déclarations d'événement:
    Event Deplacement(Left As Single, Top As Single)
    declanchement pour le Form ou est le User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'cette ligne n'est valable que si le conteneur ou est posé le user et lui aussi ScalMode = VBPixels
    RaiseEvent Deplacement(CSng(NewMeCoord.Left), CSng(NewMeCoord.Top))
    recuperation dans le Form test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserControl11_Deplacement(Left As Single, Top As Single)
    Me.Caption = "Left:" & CStr(Left) & " / Top:" & CStr(Top)
    End Sub
    La sa fonctionne, par contre je continu a voire pour le code qui renvairat dans l'unité de mesure du conteneur de l'User
    A+

    De retour : 13h20
    Pas tres propre, mais sa fonctionne quelque soit le ScaleMode du conteneur ou est posé le User, renvoie dans l'unité ScaleMode ou se trouve le User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    On Error Resume Next
    RaiseEvent Deplacement(ScaleX(CSng(NewMeCoord.Left), vbPixels, UserControl.Extender.Container.ScaleMode), _
        ScaleY(CSng(NewMeCoord.Top), vbPixels, UserControl.Extender.Container.ScaleMode))
    If Err Then
     Err.Clear
     RaiseEvent Deplacement(ScaleX(CSng(NewMeCoord.Left), vbPixels, UserControl.Parent.ScaleMode), _
        ScaleY(CSng(NewMeCoord.Top), vbPixels, UserControl.Parent.ScaleMode))
    End If
    La declaration de l'evenement est toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Déclarations d'événement:
    Event Deplacement(Left As Single, Top As Single)
    A+

  9. #9
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Salut à vous,

    C'était pas si simple cependant , mais maintenant, ça marche impécable.

    Un grand merci... et j'en ai appris ;-).

    A+

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

Discussions similaires

  1. Retourner les coordonnées d'une cellule excel
    Par boboch dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 23/11/2011, 19h53
  2. Afficher les coordonnées d'un usercontrol lors de son déplacement
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 14/11/2007, 21h48
  3. Déterminer les coordonnées d'un usercontrol
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 12/09/2007, 17h41
  4. Réponses: 2
    Dernier message: 14/09/2004, 18h00
  5. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 11h51

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