[CLASS] RESTREINDRE LE CURSEUR DE LA SOURIS À UNE ZONE DE CONTRÔLE
mimiZanzan
Messages postés301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 décembre 2017
-
11 juin 2007 à 01:20
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 8 mai 2008 à 18:25
Salut,
merci ;)
@++
sethlaerce
Messages postés30Date d'inscriptionmardi 21 août 2007StatutMembreDerniè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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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és4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 14 juin 2007 à 09:32
Salut Renfield,
Impécable.....
A+
Exploreur
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 14 juin 2007 à 09:19
manque un
ClipCursor ByVal 0&
dans le Class_Terminate
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 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és615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDerniè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és473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 11 juin 2007 à 22:03
OK! Merci. ;)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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és301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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és6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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és301Date d'inscriptionlundi 27 février 2006StatutMembreDernière intervention17 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 çà!
8 mai 2008 à 18:25
merci ;)
@++
8 mai 2008 à 18:06
j 'ai aimé c'est cool et j t'encourage
ciaoo!
14 juin 2007 à 12:25
beh voilà.. (merci Rey)
Effectivement, je n'avais pas pensé à fermer l'application 'avant' de restaurer le curseur.
++
14 juin 2007 à 09:32
Impécable.....
A+
Exploreur
14 juin 2007 à 09:19
ClipCursor ByVal 0&
dans le Class_Terminate
14 juin 2007 à 09:05
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
12 juin 2007 à 21:26
Bonne Prog.
12 juin 2007 à 11:02
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.
11 juin 2007 à 22:03
11 juin 2007 à 21:58
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é...)
11 juin 2007 à 21:04
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,
@++
11 juin 2007 à 18:31
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!
11 juin 2007 à 12:58
11 juin 2007 à 12:44
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.
11 juin 2007 à 09:06
Private Sub Class_Terminate()
SelectedObjectName = vbNullString
End Sub
mais rien de grave a le laisser...^^
11 juin 2007 à 05:44
--> 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 !
@++
11 juin 2007 à 01:24
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
11 juin 2007 à 01:20
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 çà!