Bonjour à tout le forum.
Je suis confronté à une difficulté.
Dans une fenêtre d'application avec 3 vues de classeur dont l'une des vues est fractionnée en 4 volets, j'aimerais pouvoir intercepter les Scrolls effectués par l'utilisateur.
Comment?
Bonjour à tout le forum.
Je suis confronté à une difficulté.
Dans une fenêtre d'application avec 3 vues de classeur dont l'une des vues est fractionnée en 4 volets, j'aimerais pouvoir intercepter les Scrolls effectués par l'utilisateur.
Comment?
Bonjour,
Je crains qu'on ne puisse solutionner votre demande en VBA. Peut être qu'un contributeur averti viendra me détromper.
******
Cependant, en faisant de la programmation Windows (usage des APIs), il y a des chances d'y arriver mais cela est compliqué et n'est pas d'une lecture facile et compréhensible.
Si vous êtes intéressé et que cela en vaille la peine, dites le moi, j'ai une idée de ce qu'il faut faire.
bonjour
Merci de s'intéresser à la question.
Les idées avec les APIS m'intéressent. J'avais effectué une recherche de ce côté.
Une réponse de medev dans cette discussion #2 http://www.developpez.net/forums/d89...scroll-resolu/ m'avait inspiré à aborder le problème sous un autre angle.
La solution que j'ai mis en oeuvre actuellement ne me dit pas grand chose:
une boucle avec un Timer initialisé à 0.4
Je me demandes si c'est idéal.
Bonjour,
Pouvez-vous m'adresser un message privé avec votre adresse E-mail pour que je puisse vous répondre ?
Si vous désirez rester anonyme, créez une adresse E-mail temporaire.
Ceci pour éviter d'encombrer inutilement le forum avec mes tentatives de résolution qui risque de ne pas aboutir dans l'immédiat.
***
C'est très compliqué et il faudra également s'occuper des évènements de la roulette de la souris.
Il faut, dans un premier temps :
1) identifier les Windows Class Excel
2) faire un SubClassing (Hook) et une procédure de rappel (CallBack)
3) créer des évènements (Event, RaiseEvent)
4) créer un timer avec les APIs SetTimer, KillTimer
A plus.
Bonjour,
et merci encore pour ton aide.
Je penses qu'il est préférable de faire marcher la discussion si l'idée doit évoluer.
Afin que d'autres puissent y mettre du sien, ou y trouver une résolution à un problème semblable qu'ils auraient.
Alors je dois d'abord expliquer un peu plus clairement le problème, qui m'a conduit à construire un Objet de surveillance de zones affichées dans une des fenêtres afin d'agir conséquemment sur les deux autres.
Le but final en fait est d'analyser le temps mort effectué dans l'affichage pour lire un passage ou observer une image.
Une statistique pour déterminer l'intérêt de l'utilisateur sur ces consultations du classeur.
_Première solution que j'ai abandonné:
- Pour être tranquille j'avais commencé par désactiver l'Affichage des Contrôles ScrollBar des fenêtres du classeur afin d'obliger la navigation avec le clavier me permettant d'avoir simplement les évènements que je souhaites.
- Cela semble avoir des répercussions pas appréciés dans l'aisance de la navigation. Le contrôle Visuel qu'est le ScrollBar est utile pour que l'utilisateur soupçonne rapidement que le reste de la page peut être défilée.(sans compter les reflexes Souris en plus...)
_Deuxième solution sur laquelle j'ai buté d'emblée:
- La Fenetre Excel ne fournissant pas un évènement clic sur Ses ScrollBars (à juste titre), je les gardes masquer et je places mes contrôles ScrolBars qui génèrent un clic.
- Le problème est qu'au moins un des volets et une des fenêtres doivent être scrollés horizontalement.
- Et les propriétés Orientation du contrôle ne sont pas disponibles.
- Serait-il possible de le rendre disponible?
_Troisième solution que j'ai adopté pour le moment:
- C'est de créer ma propre Classe de Controle d'affichage et qui me permet du coup de laisser visible les ScrollBars de la fenêtre d'Excel qui son bien implémentés.
- Le coeur du code est basé sur une boucle branché sur une valeur booléenne, avec un DoEvents permettant de passer la main aux autres processus de l'application.
- A chaque itération vérification des valeurs d'affichage précédemment stockés
Je publierais le code de cette classe à mon prochain retour pour que tu me dises s'il y a d'autres solutions plus acceptables avec les API ou sans.
Merci
S'il s'agit d'un contrôle ScrollBar (Barre de défilement) inséré en tant qu'OLEObject dans la feuille Excel, la propriété Orientation existe bel et bien.Et les propriétés Orientation du contrôle ne sont pas disponibles.
Serait-il possible de le rendre disponible?
Pour obtenir l'horizontalité :
1) en mode création, sélectionnez l'objet
2) faites un clic droit dessus et cliquez sur "Propriétés"
3) dans la liste des propriétés, en face de la propriété "Orientation" choisissez "1 - fmOrientationHorizontal"
****
Mais je penche plutôt pour une solution par le biais des APIs. J'y réfléchis.
bonsoir PMO2017,
j'ai à nouveau essayé sur la base de ton message curieusement j'obtiens un menu contextuel complètement différent et un affichage de propriétés correspondant bien à ce que tu m'as décrit!
Je n'en reviens pas. Pourtant auparavant c'était tout autre.
Et bizarrement j'ai cherché à identifier le Premier ScrollBar que j'avais obtenu à partir de la boîte de dialogue AutresControles, j'obtiens le même que le nouveau. Je ne me l'explique pas.
Y aurait-t-il 2 types de chargements de cet objet
Du coup, cette alternative risque de m'amener à tout repenser. Je crois que cela simplifie grandement mon problème.
ça me permet d'interagir avec l'évènement Change de ce contrôle pour gérer l'affichage et renseigner ma collecte de données.
Mille merci!
Tant mieux si ton problème est résolu avec un contrôle OLEOject ScrollBar.
***
Cependant, je continue mes recherches d'une solution par les APIs car c'est cela qui m'avait interpellé et qui continue à m'intéresser.
Bonne journée et à plus.
re,
même si c'est tard, ça peut-être utile de dire que j'ai abandonné les contrôles activeX pour me rabattre sur le procédé que j'avais.
Le code de base est publié dans cette contribution: http://www.developpez.net/forums/d13...a/#post7351501
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager