Déplacement d'un label très saccadé

Signaler
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
bonjour à tous


j'ai fait une application scrabble avec des des userform pour les pions . ce userform n'est que deux label imbriqués. le problème est quand je déplace mes pions l'apparence n'est pas "chouette" . le userform se réduit à son pourtour (pas le plus génant) mais surtout le glissement est très saccadé, avec disparition totale du pourtour, très saccadé!


 


si vous me comprenez, c'est peut être pas clair, avez vous une solution

12 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Bonjour à toi...

1) userform = VBA et non VB6
2) avec quel code ?
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
pardon un contrôle que j'ai fait moi même Un gran,d label pour contenir la lmettre et un plus petit label imbriqué dans l'autre pour le point de la lettre
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
C'est donc un User Control ? sous VB6 ?

Quel code utilises-tu pour le déplacement ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
simplement je clique dessus je maintien et je déplace
j'ai téléchargé d'autres logiciel scrabble mais là se sont des picturebox qui servent de pions et il n'y a apparement pas de saccade
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
"simplement je clique dessus je maintien et je déplace"


Cela veut dire (si tu parles bien d'un déplacement en mode exécution et pas en mode création de l'appli sur laquelle tu as unséré ce UserControl) :
Qu'il contient lui-même des instructions de déplacement !...

Question, dans ce cas : cet ocx est-il de toi ? Si non : en as-tu le source ? Si non également : tu ne peux que le subir, tel qu'il est écrit, bien évidemment  !!!
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
oui c'est bien un OCX que j'ai créé.
sur ma form  qui représente mon jeu j'ai charger mes cases fabriquées à partir de l'OCX . une fois chargé et prêt à jouer je déplace mes cases, j'utilise "DragDrop" de mon OCX case.
mais je viens de remarquer lors de la phase de création, lorsque je déplace des objets sur ma form ça fait exactement le même genre de déplacement saccadé
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Alors  ===>> tu nous le montres quand, ce bout de code qui gère le déplacemen (et que TU as forcément écrit dans ton ocx) ?
Pas tout l'ocx, hein ... juste les parties gérant le déplacement ....
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
voici une partie de code , je ne sais si c'est ça que tu veux voir???

Private Sub Case_DragDrop(ind As Integer, Source As Control, X As Single, Y As Single)
'place les lettres du chevalet sur le plateau, les cases prennent la valeur du chevalet


Dim ligne, col As Integer
Dim i As Integer
Dim Jocker As String


X = Form1.Case(ind).Top
Y = Form1.Case(ind).Left
If Change = False Then
    If Form1.Case(ind).Caption = "" Then 'si case destination vide
        If Source.Name = "Chev" Then 'la source est le chevalet
            Form1.ListView1.Enabled = False
            Form1.CmdSolution.Visible = False
            Form1.Menu_Solution.Enabled = False
            Form1.Menu_Changer.Enabled = False
            Form1.Case(ind).DragMode = 1 'autorise le mode glisser déplacer
            If Source.Caption = "?" Then
                Jocker = UCase(InputBox("Quelle lettre choississez vous pour remplacer le JOCKER ? ", "JOCKER", , X, Y))
                If Jocker = "" Then
                    MsgBox "Vous devez rentrer une lettre pour le Jocker "
                    Exit Sub
                ElseIf Len(Jocker) > 1 Then
                    Exit Sub
                ElseIf Asc(Jocker) < 65 Or Asc(Jocker) > 90 Then
                    Exit Sub
                End If
                Source.Caption = Jocker
                Source.point = tab_point_let(Asc(Jocker))
                Form1.Case(ind).Tag = 1
            End If
            Source.DragMode = 0 'bloque le mode glisser déplacer de la source
            Form1.Case(ind).Caption = Source.Caption 'la case prend la lettre de la source
            Plateau(ind).Let = Source.Caption 'met à jour le plateau
            Source.Caption = "" 'vide la source
            Form1.Case(ind).point = Source.point 'la case prend le point de la source
            Plateau(ind).point = Source.point 'met à jour le plateau
            Form1.Case(ind).PtVisible = True ' le point devient visible
            Source.PtVisible = False 'efface le point de la source
            NumPose = NumPose + 1
            With CoordLetDéposé(NumPose) 'enregistre chaque lettre déposée dans un tableau qui enregistre les coordonnees de chaque lettres
                    .Y = Plateau(ind).Y 'prends la ligne du plateau
                    .X = Plateau(ind).X 'prends la colonne du plateau
                    .ind = ind 'Form1.Case(ind).Index
                    .Let = Plateau(ind).Let 'Form1.Case(ind).Caption
                    .Bon = Plateau(ind).Bon 'Form1.Case(ind).Tag
                    .point = Plateau(ind).point 'Form1.Case(ind).Point
                    .MotMultipli = Plateau(ind).MotMultipli
                End With
               
        ElseIf Source.Name = "Case" Then 'une lettre qui vient d'être placée sur le plateau est bougéeée dans le plateau _
                    il faut changer ses coordonnées
            Form1.Case(ind).DragMode = 1 'autorise le mode glisser déplacer
            If Source.Tag = 1 Then
                Jocker = UCase(InputBox("Quelle lettre choississez vous pour remplacer le JOCKER ? ", "JOCKER", , X, Y))
                If Jocker = "" Then
                    MsgBox "Vous devez rentrer une lettre pour le Jocker "
                    Exit Sub
                ElseIf Len(Jocker) > 1 Then Exit Sub
                ElseIf ((Asc(Jocker)) < 65) Or ((Asc(Jocker)) > 90) Then Exit Sub
                End If
                Source.Caption = Jocker
                Source.point = tab_point_let(Asc(Jocker))
                Form1.Case(ind).Tag = 1
            End If
            Source.DragMode = 0 'empêche le glisser déplacer
            Form1.Case(ind).Caption = Source.Caption 'la case prend la lettre de la source
            Plateau(ind).Let = Source.Caption
            Plateau(Source.Index).Let = ""
            Source.Caption = ""
            Form1.Case(ind).point = Source.point 'la case prend le point de la source
            Plateau(ind).point = Source.point
            Plateau(Source.Index).point = 0
            Form1.Case(ind).PtVisible = True ' le point devient visible
            Source.PtVisible = False 'le point de la source devient invisible
            For i = 1 To 7
                If CoordLetDéposé(i).ind = Source.Index Then
                    With CoordLetDéposé(i)
                            .X = Plateau(ind).X 'Int(Form1.Case(ind).Top / Form1.Case(ind).Height)
                            .Y = Plateau(ind).Y 'Int(Form1.Case(ind).Left / Form1.Case(ind).Width)
                            .ind = ind 'Form1.Case(ind).Index
                            .Let = Plateau(ind).Let 'form1.Case(ind).Caption
                            .Bon = Plateau(ind).Bon 'Form1.Case(ind).Tag
                            .point = Plateau(ind).point ' Form1.Case(ind).Point
                            .MotMultipli = Plateau(ind).MotMultipli
                    End With
                End If
            Next i
        End If
    End If
End If
If NumPose > 0 Then
    Form1.CmdValide.Visible = True
End If


End Sub
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Je ne suis pas certain de ce que j'avance, mais plutôt que d'utiliser les X et Y
X = Form1.Case(ind).Top
Y = Form1.Case(ind).Left
qui sont les paramètres de la procédure, crées 2 variables qui prendront ces valeurs
MonX= X
MonY = Y

et utilise ces variables dans toute la procédure

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Ce code n'étant pas celui du glisser d'un objet mais celui d'un drag and drop source/cible qui positionne l'objet, in fine, sur la cible, il n'y a absolument pas à s'étonner des mouvements saccadés !!!
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
Merci j'ai bien compris!
comme on me l'a aussi expliqué sur l'autre forum "développez.com" il faut que je crée des méthodes pour gérer le déplacemen t de mon OCX.

problème annexe: J'ai créé cet OCX endhors de mon projet de scrabble, est il possible d'intégrer le code de mon Ocx dans mon projet scrabble, pour n'avoir pas à fournir l'OCX, comme le usercontrol ne sert que pour ce projet.!
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Dans le menu Fichier, tu choisis Ajouter un projet et tu choisis le projet original .vbp de ton OCX. Ça va te créer un nouveau projet .VBG qui deviendra ton projet de départ.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.