![]() |
| 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é. | |||||||
|
|||||||
| Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Membre régulier
![]() Date d'inscription: juillet 2006
Messages: 117
|
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 |
|
|
|
|
|
#2 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
|
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
__________________
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). |
|
|
|
|
|
#3 (permalink) |
|
Membre régulier
![]() Date d'inscription: juillet 2006
Messages: 117
|
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. |
|
|
|
|
|
#4 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
|
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). |
|
|
|
|
|
#5 (permalink) |
|
Membre régulier
![]() Date d'inscription: juillet 2006
Messages: 117
|
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.
|
|
|
|
|
|
#6 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
|
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). |
|
|
|
|
|
#8 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
|
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 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 |
|
|
|
|
|
#9 (permalink) |
|
Membre régulier
![]() Date d'inscription: juillet 2006
Messages: 117
|
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... |
|
|
|
|
|
#10 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
|
Re...
C'est cette ligne qu'il faut carrément supprimer : Code :
'MovTop = Image1.Top + Me.ScaleY(Y - DbTop, vbTwips, vbPoints)
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). |
|
|
|
|
|
#11 (permalink) | |
|
Membre régulier
![]() Date d'inscription: juillet 2006
Messages: 117
|
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:
|
|
|
|
|
|
|
#12 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 079
|
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 |
|
|
|
![]() |
![]() |
||
Disparition d'image lors du déplacement
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|