Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.

Réponse
 
Outils de la discussion
Vieux 04/10/2008, 13h09   #1 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut Disparition d'image lors du déplacement

Bonjour,

Dans le cadre d'une macro que je dois réaliser pour ArcGis (un logiciel de cartographie) je veux afficher une image et ensuite pouvoir la déplacer.

L'affichage ne pose pas de problème. J'ai réussi à faire mes zooms et mes déplacements par boutons (comment faire en appuyant sur les flèches ? J'ai essayé avec KeyPress sans succès mais sans trop m'y attarder non plus...). Malheureusement quand j'essaie de bouger mon image avec la souris, elle disparaît parfois. Développant en VB depuis très peu de temps, je pense que mon code doit manquer quelque chose mais je n'arrive pas à trouver dans les références quoi.

Voici mon code pour bouger l'image à la souris :
Code :
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        If Button = 1 Then
            Image1.Left = Image1.Width + X
            Image1.Top = Image1.Height + Y
        End If
End Sub
Merci à vous.
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/10/2008, 22h25   #2 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
Par défaut

Bonsoir,

Tu ne npis dis pas sur quoi se trouve ton image !!!

Essaye d'abord ainsi :

Code :
Option Explicit
Dim MovTop, MovLft As Integer
Dim DbTop, DbLft As Integer
 
Private Sub image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then
   DbTop = Y: DbLft = X
  End If
End Sub
Private Sub image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then
    MovLft = image1.Left + X - DbLft
    MovTop = image1.Top + Y - DbTop
    image1.Move MovLft, MovTop
  End If
End Sub
Si défaut : dis-le (je n'ai pas Excel sous la main pour essayer, mais saurais au besoin corriger).
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/10/2008, 22h03   #3 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut

Bonsoir, désolé pour mes imprecisions. En ce qui concerne l'image, elle est directement sur un UserForm (il n'y a pas de picturbox dans ArcGis).

Pour ce qui est de ton code, en effet, l'image ne disparaît pas, je l'avais déjà utilisé ce code là, mais malheureusement il ne fait pas ce que je souhaite, car, du moi sous ArcGis, la souris pointe toujours sur le bord haut gauche du cadre, empêchant de le déplacer librement comme avec ma petite fonction plus haut.
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/10/2008, 23h07   #4 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
Par défaut

Que veux-tu dire ?
Que lorsque tu cliques sur ton image, le curseur se place automatiquement en son coin supérieur gauche (de l'image) et que tu ne peux le déplacer sur l'image en gardant ton bouton enfoncé ?
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/10/2008, 06h09   #5 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut

Oui le curseur est en son coin supérieur gauche, mais on peut quand même la déplacer mais pas comme je le voudrais. La, quand on clic, l'image se positionne en son coin supérieur gauche sous le curseur, alors qu'il faudrait tout simplement qu'elle reste en place quand on clic et qu'en suite quand on bouge elle bouge en même temps que la souris, ce qui se fait avec mon bout de code plus haut, mais qui malheureusement fait scintiller l'image et parfois la fait disparaître.
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/10/2008, 08h40   #6 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
Par défaut

Re,

Pas vraiment clair

Qu'est-ce qui se déplace en haut et à gauche ? et en haut et à gauche de quoi ?

réponse 1 : le curseur, en haut et à gauche de l'image
réponse 2 : l'image, en haut et à gauche de l'Userform
réponse 3 : le curseur, en haut et à gauche de l'userform

Si c'est la réponse 2, je crois avoir deviné alors de quoi il s'agit... je mettrai alors en route un portable où se trouve Excel, pour essayer.

Réponds-moi pour l'instant par 1,2 ou 3 ...
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/10/2008, 23h43   #7 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut

Réponse 1.
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/10/2008, 00h05   #8 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
Par défaut

Ah... zut ...

Bon...
Essaye ceci :

Code :
Option Explicit
Dim MovTop, MovLft As Integer
Dim DbTop As Single, DbLft As Single
Const coucou = 20
 
Private Sub image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then
   DbTop = Y: DbLft = X
  End If
End Sub
Private Sub image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then
    '''''''MovTop = Image1.Top + Me.ScaleY(Y - DbTop, vbTwips, vbPoints)
    MovLft = Image1.Left + (X - DbLft) / coucou
    MovTop = Image1.Top + (Y - DbTop) / coucou
    Image1.Move MovLft, MovTop
  End If
End Sub
Si ça marche, je t'expliquerai plus longuement pourquoi la constante coucou = 20 (il se fait tard...).
Bonne chance
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).

Dernière modification par ucfoutu ; 08/10/2008 à 09h17
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/10/2008, 06h25   #9 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut

Bonjour,

Merci à toi de t'occuper de mon cas.

Je viens de tester, et il me dit que vbTwips est une variable non définie, tout comme vbPoints. Quand je les remplace par des 0. Ça me dit que ScaleY est un Membre de méthode ou de données introuvable.

Je sais pas si dans ArcGis on a pas un VBA de base...
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/10/2008, 08h18   #10 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
Par défaut

Re...
C'est cette ligne qu'il faut carrément supprimer :
Code :
 'MovTop = Image1.Top + Me.ScaleY(Y - DbTop, vbTwips, vbPoints)
je ne sais pas ce qui s'est passé (le ' de commentaire a sauté lors du copier-coller...

n'as-tu pas vu que Movtop, défini plus loin, la rendait de toutes manières caduque ? :
Code :
MovTop = Image1.Top + (Y - DbTop) / coucou
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/10/2008, 22h25   #11 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut

Pardon pour mon dernier post mais je n'avais pas les yeux en face des trous, en effet en enlevant la ligne inutile ça fonctionne à merveille.

Maintenant j'attends ta promesse
Citation:
Si ça marche, je t'expliquerai plus longuement pourquoi la constante coucou = 20 (il se fait tard...).
Merci à toi.
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 07/10/2008, 23h02   #12 (permalink)
Inscrit(e)
 
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
Par défaut

Bon ... tu m'en vois réjoui

Et la discussion que tu as ouverte devrait (si elle ne se perd pas) servir à beaucoup d'autres ... (alors merci de l'avoir ouverte).

Chose promise étant chose dûe :

Parlons donc de la constante coucou . Pourquoi lui donner la valeur 20 ?
Parce que VBA fonctionne avec une échelle exprimée en points ...

Pour des raisons que j'ignore, toutefois, les déplacements y sont calculés en twips (mais doivent ensuite bien évidemment être retransposés en points pour être en concordance avec VBA)

Or :

Il y a 1440 twips par pouce logique
Il y a 72 points par pouce logique

combien de twips dans un point, alors ?

ben ma foi : 1440/72 ====>> 20 twips

Tu comprends maintenant le pourquoi de la ligne en commentaires) ?
Mes essais ont d'abord été faits avec VB6 et une échelle en points et la ligne en commentaire permettait (fonctions de VB6) de transposer l'échelle. Une fois la chose comprise, il m'a suffi de me lancer dans le calcul arithmétique ci-dessus pour palier à l'absence, sous VBA, de cette fonction de transposition..
Voilà.
Nous nous sommes amusés, hein ...
J'ajoute ici que si cette solution n'avait pas marché, j'en aurais mis en oeuvre une autre, totalement différente, faisant appel à une variable booléenne et deux fonctions de l'Api de Windows (mais c'était peut-être plus "compliqué"...)

J'espère que cette solution sera "gravée" en mémoire quelque part, car elle vaut le coup ...
(N'oublie pas de cliquer sur RESOLU)
__________________
Deux points essentiels à mes yeux :
1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion.
2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère).

Dernière modification par ucfoutu ; 07/10/2008 à 23h14
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/10/2008, 06h50   #13 (permalink)
Membre régulier
 
Date d'inscription: juillet 2006
Messages: 117
Par défaut

Eh bien merci beaucoup de ta précieuse aide et du partage de tes connaissances
_-Slash-_ est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide