Détecter le type de curseur de la couris [Résolu]

Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
- - Dernière réponse : Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
- 5 avril 2015 à 18:22
Bonjour à toutes et à tous.

Comme il est dit dans le titre, je souhaite détecter le type de curseur de souris affiché. Pour être plus précis, je cherche à détecter quel curseur est affiché (ex : WaitCursor, IBeam ...) par Windows, et cela afin de pouvoir le remplacer par un curseur personnalisé approprié (dans mon programme uniquement).

Je sais déjà comment remplacer le curseur par un autre de son choix.

Je tiens à préciser que définir les curseurs à utiliser un par un à l'ouverture du programme est dans mon cas à éviter, car un trop grand nombre de formulaires sont présents dans mon projet.

Merci d'avance à toute réponse constructive,
désolé si les explication ne sont pas très simples, si besoin de précisions, je suis à disposition.
Afficher la suite 

Votre réponse

4 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
Un "type de curseur" ne veut pas dire grand chose
D'autant qu'un curseur peut toujours avoir été personnalisé, voire carrément créé.
Je ne comprends pas pourquoi tu cherches à déterminer cela. Il te suffit d'imposer celui que tu veux en fonction du contexte de ton choix, quel que soit le curseur en vigueur avant celui que tu imposes !
Si tu cherches par contre à mémoriser le curseur système par défaut avant ton intervention en vue de le restituer ensuite, c'est autre chose (et c'est assez risqué, en cas notamment d'interruption brutale et inopinée).
Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
-
Je souhaite tout simplement (si cela l'est vraiment), déterminer le curseur qui est actuellement affiché par le système (WaitCursor lors d'une attente), afin de le remplacer par un personnalisé dans mon application, par soucis d'esthétique.
Je recherche donc juste une méthode permettant de connaître quel curseur est affiché par le système, afin de le remplacer par un personnalisé dans mon application seulement (si la souris sort de la fenêtre, le curseur devient à nouveau celui du système).

Je tiens à préciser que je suis sous Visual Studio 2013
Commenter la réponse de ucfoutu
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

  Public Shared Property Current As Cursor
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Current = New Cursor(Cursor.Current.Handle)
        MsgBox(Current.ToString)
    End Sub


Voilà
cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Je tiens à préciser que dans ce cas c'est le curseur qui est attribué au Button1, a adapter donc!
Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
> cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
merci,
je vais tester et je vous donne des nouvelles.
Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
> Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
-
Après quelques tests, je pense que ce n'est pas le code adapté, c'est donc pour cela que je vais reformuler le problème.

Le code donné juste au dessus permet d'obtenir le curseur utilisé lors du clic sur le bouton (ou autre si réadaptation).

Or le problème se trouve là : ce que je voudrais, c'est que lorsque Windows affiche un curseur différent que celui par défaut (comme par exemple le WaitCursor lorsqu'il est nécessaire de faire patienter l'utilisateur), que cela puisse être détecté par le programme, pour ainsi mettre un curseur personnalisé à la place de ce fameux WaitCursor.

Cela nécessite donc de connaître quel curseur windows souhaite afficher, car connaître le curseur déjà utilisé poserait problème lorsque l'on a déjà défini un curseur personnalisé.

Bien entendu, le changement de curseur ne s'applique que dans l'application, mais cela, je sais déjà le faire.
Là où je suis bloqué est donc dans la détection du curseur que Windows souhaite afficher.

Merci d'avance, et encore désolé pour le dérangement.
Commenter la réponse de cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
essaye ceci:

Public Class Form1
    Public Shared Property Current As Cursor
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.Cursor = Cursors.Hand
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Me.Cursor = Cursors.Cross
    End Sub
    Private Sub Form1_MouseEnter(sender As Object, e As System.EventArgs) Handles Me.MouseEnter
        Dim buttonToolTip As New ToolTip()
        Current = New Cursor(Cursor.Current.Handle)
        buttonToolTip.ToolTipTitle = "Curseur"

        buttonToolTip.UseFading = True

        buttonToolTip.UseAnimation = True

        buttonToolTip.IsBalloon = True

        buttonToolTip.ShowAlways = True

        buttonToolTip.AutoPopDelay = 5000

        buttonToolTip.InitialDelay = 1000

        buttonToolTip.ReshowDelay = 500

        buttonToolTip.IsBalloon = True

        buttonToolTip.SetToolTip(Me, Current.ToString)
    End Sub
End Class


a adapter
Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
-
Encore moi,

N'y aurait-il pas plutôt un moyen de définir tous les curseurs en remplacement de ceux de base que propose Windows par le code, et ceci pour qu'ils se chargent automatiquement si nécessaire ? (par exemple de l'affichage de l'IBeam personnalisé s'il s'agit d'une zone de texte)

Attention, je ne parle pas de définir les curseurs pour chaque contrôle un par un, mais de faire en sorte que ce soit les curseurs personnalisés qui soit affiché à la place de ceux que propose Windows.

merci d'avance.
cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
> Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
-
Tu peux par exemple mettre un curseur d'attente pour une opération assez longue. Ensuite tu remets le curseur par défaut comme ceci:

  System.Windows.Forms.Cursor.Current = Cursors.WaitCursor
        ' System.Windows.Forms.Cursor.Current = Cursors.AppStarting 'au choix
        Dim i As Int32
        For i = 0 To 10000
            'Certains processus long
            Debug.Print(i.ToString())
        Next
        System.Windows.Forms.MessageBox.Show("Terminé!")
        System.Windows.Forms.Cursor.Current = Cursors.Default


voilà

@+ Le Pivert
Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
> cs_Le Pivert
Messages postés
5607
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Merci de ta réponse,

effectivement dans la majorité des cas, opérer de cette manière serait approprié, mais dans ma situation, il m'est nécessaire de remplacer l'ensemble des différents curseurs proposés par Windows, et cela temporairement.

Les définir pour chaque situation une par une serait beaucoup trop long.

je vais tenter quelques autres solutions (Je n'ai pas grand espoir qu'elles fonctionnent), et sinon, je m'en remettrait à toutes vos propositions.

Je vous mettrait un code source si je parviens à mes fins.
Commenter la réponse de cs_Le Pivert
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
Je n'ai apparemment pas dû/su être assez clair (ou insistant) :
1) les curseurs qu'utilise Windows sont tous ses propres curseurs/système.
Ils ont tous là (rien à voir avec VB) :
https://msdn.microsoft.com/en-us/library/windows/desktop/ms648395%28v=vs.85%29.aspx
2) la fonction GetCursor de la librairie User32 de l'Api de Windows retourne le handle du cursor en cours (handle correspondant à l'un de ceux montrés en 1))
3) modifier ce curseur est bien évidemment possible : utilisation de la fonction SetSystemCursor de la librairie user32 de l'Api de Windows. Le curseur de remplacement est à acquérir depuis un fichier par utilisatioin de la fonction LoadCursorFromFile de la librairie User32 de l'Api de Windows
4) le changement de curseur par Windows est le résultat d'un évènement et ne déclenche pas, lui, un évènement. Le repérer ne peut donc se faire que par l'utilisation d'un timer ou autre (addressof)
5) Je répète qu'il est très risqué de procéder à un tel changement.
(je l'ai dit plus haut et ai dit pourquoi). J'ajoute que ce changement n'affecte pas que l'appli en cours, mais toutes les applis en cours !
Voilà voilà ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Matthieu7503
Messages postés
22
Date d'inscription
samedi 4 avril 2015
Dernière intervention
15 novembre 2015
-
Merci beaucoup,

je vais me contenter de définir les curseurs un par un.

Merci beaucoup pour votre aide.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.