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

VBA Discussion :

forcer le cursor a rester dans le cadre du userform


Sujet :

VBA

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut forcer le cursor a rester dans le cadre du userform
    Bonjour a tous
    existe il un moyen avec les api de forcer le cursor (souris) a rester dans la surface du userform
    tout simplement l'empêcher d'en sortir

    actuellement je le fait avec le x et y l'evenement move de l'userform mais si on bouge trop rapidement ca saute le blocage et passe en dehors

    merci pour les retours
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Cela se fait très aisément par utilisation de la fonction ClipCursor de la livrairie "user32" de l'Api de Windows, en conjugaison avec ces 3 autres fonctions :
    GetClientRect, ClientToScreen et OffsetRect de la même librairie.
    m a i s
    je te conseille très vivement de ne pas faire une telle chose. Que ton application crashe ou soit interrompue brutalement pour une raison x ou y et ton curseur restera confiné à l'intérieur du rectangle correspondant, sur ton écran, à ton userform.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Il t'est également possible d'utiliser la fonction TrackMouseEvent dfe la librairie user32 pour "kooker", déceler et forcer.
    Je le déconseille également très vivement (un "hook" = toujours instabilité si erreur, interruption brutale et/ou conflits éventuels).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonsoir jacques
    même si je fait une gestion d'erreur global (au cas ou) qui consisterait a appeler une sub pour remettre le clipcursor a l'identique de getclipcursor qui donne l'écran en terme de rect ???????
    parce que le move c'est vraiment faiblard pour peut que j'accélère le mouvement c'a n'a pas le temps de contrôler le x,y qu'il est déjà sorti .j'ai pourtant mis 10 points de marges et même essayé plus de tout cotés
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Il n'y a pas de possibilité de "gestion d'erreur globale" en "hooking". En cas de conflit, ton application "subit" et ne gère rien de ce que décide ou trame l'autre
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    sans Hooker juste avec clipcursor

    ce blocage figure que dans le userform et je n'ai que l'évènement move et rien d'autre (pas de code autre que private sub userform_move....)
    il est donc facile d'y mettre une gestion d'erreur non?????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    sans Hooker juste avec clipcursor
    aucune gestion d'erreur n'est à prévoir dans le cas de l'utilisation de clipcursor, mais relis ce que j'en ai dit. Rien à voir avec une erreur ! Une simple interruption (quelle qu'en soit la raison, y compris volontaire) alors que le curseur est confiné et il le reste, confiné ...
    J'ajoute qu'il sera confiné ainsi (tant que non "déconfiné") sur toute la machine, quelle que soit l'application en cours ou que l'on ouvre.
    Ce n'est pas clair ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    si c'est clair c'est moi qui le suis pas visiblement

    a part une coupure de courant tout les évènement peuvent être affublés d'un on error goto gestionerr et comme il n'y en a pas beaucoup (2) exactement le move et le click d'un bouton

    je sais même pas si quand on rallume la machine ce clipcursor n'est pas perdu demain je tente l'opération

    en tout cas si tu a une autre solution d'autre api ou un/des liens je prends
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    si quand on rallume la machine ce clipcursor n'est pas perdu demain je tente l'opération
    Non. Fort heureusement : Windows rétablit une situation normale à chaque démarrage.
    a part une coupure de courant tout les évènement peuvent être affublés d'un on error goto
    les évènements de ton application, oui. Pas les autres impondérables éventuels (mémoire insuffisante, échauffement du processeur, défaillance d'un élément matériel, etc ...) ou les interventions impulsives d'un utilisateur dans le gestionnaire des taches.
    Pour résumer et conclure : si appli uniquement pour toi et sur ta seule machine -->> pas grave (tu seras seul à supporter les conséquences et devoir redémarrer ou lancer - te faudra alors dans la plupart des cas utiliser le clavier - un autre programme pour "déconfiner"). Mais si appli destinée à être distribuée ---> tu vas faire des mécontents en cas du moindre problème et/ou seras fréquemment appelé pour débloquer ...

    EDIT :
    en tout cas si tu a une autre solution d'autre api ou un/des liens je prends
    Aucune de valable sans connaître les tenants et aboutissants exacts de ton appli.
    Tout ce que tu as jusqu'à présent dit ne concerne que l'exercice d'une restriction de déplacement du curseur. Et mes réponses ne concernent donc QUE le déplacement du curseur, sans même savoir (puisque tu n'en parles pas) pourquoi tu veux limiter CE déplacement.
    Mes réponses auraient peut-être été autres si ta question l'avait été également : par exemple : "limiter non le déplacement du curseur, mais celui, à l'aide de la souris, d'un contrôle placé que un userform ". Mais je veux croire que tu aurais alors ouvert une discussion autre et avec un titre autre. *****

    ***** : je crois que mon habitude de discipline en ce qui concerne cet aspect n'est plus un secret pour personne.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

Discussions similaires

  1. [Débutant] Scrollbar - Listbox WPF - La forcer à rester dans le fond
    Par Unrivalled dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 11/02/2013, 12h49
  2. Comment forcer une page web à s'afficher dans un cadre?
    Par lazario dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/10/2007, 13h39
  3. L'include doit rester dans le même cadre
    Par koskoz dans le forum Langage
    Réponses: 8
    Dernier message: 03/12/2006, 12h21
  4. Forcer l'affichage d'une page dans un cadre
    Par Thcan dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/11/2005, 10h58
  5. Forcer la saisie en MAJ dans un Formulaire
    Par lolos dans le forum IHM
    Réponses: 4
    Dernier message: 12/08/2003, 10h57

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