[CLASS] RESTREINDRE LE CURSEUR DE LA SOURIS À UNE ZONE DE CONTRÔLE

mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017 - 11 juin 2007 à 01:20
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 8 mai 2008 à 18:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43074-class-restreindre-le-curseur-de-la-souris-a-une-zone-de-controle

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 mai 2008 à 18:25
Salut,

merci ;)
@++
sethlaerce Messages postés 30 Date d'inscription mardi 21 août 2007 Statut Membre Dernière intervention 4 octobre 2010
8 mai 2008 à 18:06
slt man
j 'ai aimé c'est cool et j t'encourage
ciaoo!
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 juin 2007 à 12:25
Salut Exploreur,

beh voilà.. (merci Rey)
Effectivement, je n'avais pas pensé à fermer l'application 'avant' de restaurer le curseur.

++
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
14 juin 2007 à 09:32
Salut Renfield,

Impécable.....

A+
Exploreur
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 juin 2007 à 09:19
manque un

ClipCursor ByVal 0&

dans le Class_Terminate
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
14 juin 2007 à 09:05
Salut Mortalino,

Sympa cette source, mais je viens de m'appercevoir d'un truc...je ne sais pas si cela vient de chez moi ou de la source mais voici :

Donc quand je fais restreindre sur n'importe quels contrôles et que par la suite je fait : ALT + F4, le prog se ferme bien mais la souris elle, reste restreint dans le choix que j'ai fait précédement et pour retrouver les joies de la balade de la souris, obliger de faire encore ALT + F4...

Donc je pense cas un moment quand on fait AMT + F4, il y a quelque chose qui reste toujours en "fonction" ou qui n'est pas décharger de l'appli....

Vla...vla...

A+
Exploreur
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
12 juin 2007 à 21:26
C'est sympa cette class Mortalino, il suffisait d'y penser ! cela permet entre autre d'obliger les utilisateurs à remplir un champ. Merci de nous en faire profiter

Bonne Prog.
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
12 juin 2007 à 11:02
Pour les string, c'est un cas particulier : la variables est un pointeur vers la string qui est désaffecté à chaque affectation de la variable. Je m'explique :
dans le cas
a = "abc"
a pointe vers "abc"
a = "efg"
"abc" est supprimé de la mémoire puis a pointe vers "efg"
donc si tu fais
a = vbnullstring tu affectes une nouvelle valeur vide à a qui devra être désaffectée. En principe c'est nettoyé par le compilateur, mais c'est pas très utile.
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 juin 2007 à 22:03
OK! Merci. ;)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juin 2007 à 21:58
quand tu sors de ta fonction, que la variable devient hors de portée, un compteur interne a l'objet est décrementé (c'est le nombre de references vers cet objet)
s'il atteint 0, le Class_Terminate est appelé (enfin, son destructeur) et les resources sont libérées.

la mécanique COM est bien en place... nul besoin, de faire Set a = Nothing, donc...
simple habitude a prendre que de libérer les chose dès qu'elles ne servent plus, de savoir ou tu en est... y'a pas de danger a ne pas le faire, vraiment... gaffe avec les handle vers les objets GDI, les references que tu auraient piqué vers ton objet...

pour le tableau, même topo... si ca sert plus, tu vide, raison de plus our bien définir la portée des variables, et de favoriser les parametres aux variables publiques (une bonne architecture facilitera la réutilisabilité du code, et la modification de points précis du code, pour une plus grande maintenabilité...)
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 juin 2007 à 21:04
Salut Renfield,

Ok pour le vbNullString.
Par contre, confirme moi stp, j'ai lu plusieurs fois qu'avant de terminer une class, il fallait tout vider (Erase tableau, Set objet = Nothing, et donc mettre les variables à vides).

Est-ce vrai ?
Ou est-ce inutile ici car il n'y a qu'une variable ?

Merci,
@++
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
11 juin 2007 à 18:31
Merci RENFIELD, çà marche, à condition de prendre les coordonnées du contrôle en relation avec l'écran ,c'est à dire qu'il faut tenir compte de la position de la form sur l'écran, et bien sûr travailler en pixels.
Pour la position top, il faut également ajouter la valeur de la hauteur da la barre de titre de la form (28 pixels normalement), et si on est puriste, ajouter pour la position left la valeur de l'épaisseur du cadre de la form (2 pixels)...
Merci encore, la solution était plus simple que je le pensais!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juin 2007 à 12:58
le tout est simplement de connaitre les coordonnées (en pixels) du rectangle dans lequel tu souhaite enfermer le curseur, et ensuite appeler l'API ClipCursor
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
11 juin 2007 à 12:44
Mortalino, je voudrais appliquer ton code à un programme Excel VBA.
Sais-tu comment récupérer les handles des contrôles de la form, puisqu'il n'y a pas de propriété Contrôle.Hwnd en VBA?
Merci d'avance.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
11 juin 2007 à 09:06
inutile de mettre:

Private Sub Class_Terminate()
SelectedObjectName = vbNullString
End Sub


mais rien de grave a le laisser...^^
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 juin 2007 à 05:44
Beh je viens de remarquer une chose : ça arrange, ça n'arrange pas, c'est à vous de voir

--> Si une zone est en cours de restriction sur un contrôle, elle s'annule en cas de changement de fenêtre (Alt + Tab) et toute la zone de l'écran est à nouveau disponible !

@++
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
11 juin 2007 à 01:24
Salut MimiZanzan et merci beaucoup pour tes encouragement ;)

Pas bête du tout l'idée du ByVal 0&, je mets à jour de suite. Effectivement, une fonction d'API en moins :D
Merci encore,
@ bientôt :p
mimiZanzan Messages postés 301 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 17 décembre 2017
11 juin 2007 à 01:20
Très simple et très utile, par ex pour aider un utilisateur à remplir un formulaire.Cà me sera en effet très utile.
Je me permets une petite remarque: on peut encore simplifier le code en utilisant seulement "ClipCursor ByVal 0&" pour libérer le curseur dans la sub "DisableRestriction". Celà évite d'utiliser l'API "GetDesktopWindow" et c'est plus rapide que passer par le handle du bureau.
Sinon, encore c'est super, ponds-nous encore qq bons petits codes comme çà!