KEYMOUSE PARAMÉTRAGE, OU MODIFIER LES PARAMÈTRES DE LA SOURIS ET DU CLAVIER

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 20 août 2008 à 15:08
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 23 août 2008 à 16:52
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/47668-keymouse-parametrage-ou-modifier-les-parametres-de-la-souris-et-du-clavier

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
23 août 2008 à 16:52
Bonjour,
bon voilà c'est corrigé ...

"bon ben je corrige dans quelques minutes ^^ " il fallait comprendre 1 jour evidemment ...

*** IMPORTANT ***
Si vous experiencez des problèmes de double-clic suite au test de ma source, n'allez pas sortir l'arsenal, le CD de réinstallation de Windows, rangez tout ça au placard et relancez ma source. J'ai corrigé le bug qui fixait à 0 la hauteur du rectangle du Double-clic, donc impossible de double-cliquer. Pour les remettre, faites : Hauteur 4, Largeur 4 (ce sont les valeurs par défaut) et appliquez les changements.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2008 à 16:02
Ah zut, bon ben je corrige dans quelques minutes ^^

Cordialement, Bacterius !
Utilisateur anonyme
21 août 2008 à 15:56
Salut,

tu fais un "SETDOUBLECLKHEIGHT" :
SystemParametersInfo(SPI_SETDOUBLECLKHEIGHT,0, @MouseInfo.NbTraces,SPIF_SENDCHANGE);

juste avant de faire
MouseInfo.DCHeight := GetSystemMetrics(SM_CYDOUBLECLK);
MouseInfo.DCWidth := GetSystemMetrics(SM_CXDOUBLECLK);

pas étonnant que ça reste à zéro alors ^^
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2008 à 15:32
Bon ben voilà ça utilise les API SystemParametersInfo et GetSystemMetrics.
En revanche j'ai un bug chez moi, la hauteur du rectangle de définition du double-clic est toujours à 0 (donc si vous avez le même problème pensez à le mettre à 4 et à appliquer les changements sinon vous pourrez plus double-cliquer ;) )

Les changements s'appliquent directement.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2008 à 02:04
Profond, vachement profond ...
Moi aussi je dois tout (presque) à DelphiFr, mais surtout à mon père :) qui m'a appris les bases.
En tout cas j'adore les API ^^
(désolé j'ai pas réussi à écrire un aussi gros paragraphe que toi :x)

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
21 août 2008 à 01:55
Effectivement, cette API est fabuleuse dès que l'on commence à s'intéresser au paramétrage de Windows en lui-même! Sur le coup je dois bien avouer que je n'y avais pas pensé ;)

@Cirec:
Je rentre en deuxième année de prépa maths physique, et c'est pas facile tous les jours de trouver le moment de programmer un peu... C'est pourquoi je tente de me rattraper pendant les vacances ;)
Disons que je ne fais qu'un passage ici jusqu'à la rentrée... Ensuite c'est reparti pour un an de calvaire! Je pense qu'à la fin de l'année prochaine, une fois les concours passés je serai un peu plus à même de participer plus activement comme je l'ai fait dans le passé, et comme j'ai hâte de le refaire.

Je vois, et cela m'enchante véritablement, que certains que je connaissais avant de "m'éclipser" cette année sont toujours là et contribuent énormément à ce site, et que d'autres prennent également le relais ! (je ne citerai personne pour ne pas m'exposer au risque d'oublier quelqu'un, mais tout le monde les connait ici et apprécie leur grande valeur)

Et même si je regrette le très récent départ de florenth, cela ne doit pas faire oublier que d'autres sont également bien présents, et que le site continuera a vivre tant que ses membres y contribueront! J'espère qu'il en sera de même pendant encore de nombreuses années.

Cela fait plus de 4 ans que je connais delphifr, c'est lui qui m'a formé, qui m'a quasiment tout appris de ce que je connais sur Delphi, et ma reconnaissance est immense envers ceux qui étaient là à l'époque pour me guider. Je tente maintenant de prendre place à leurs côtés, même si leur savoir me dépasse parfois (très, voir trop) largement... Qui a parlé de Delphiprog? ;)

Bye,
Nico
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2008 à 22:39
oooh merci de me faciliter la recherche Cirec !
Je raffole de la MSDN :)
Héhé finalement cette source ne traitera plus du registre, mais de l'API :p

Cordialement, Bacterius !
Utilisateur anonyme
20 août 2008 à 21:25
Salut,

regarde aussi du coté de l'api "SystemParametersInfo"
http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx

elle permet les mêmes choses et bien plus encore ... et il me semble que les modifications sont prises en compte de suite ^^

ça va te plaire ... j'en suis certain ;)

@Nico69:
Salut,
ça fait plaisir de te voir à nouveau parmi nous ;)

@++
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
20 août 2008 à 20:59
C'est un plaisir :)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2008 à 20:56
Ouais ... je mettrais ça en ligne demain ^^
Merci pour ton aide et tes conseils Ni69 :p

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
20 août 2008 à 20:52
"par contre l'application met les boutons dans l'ordre normal automatiquement au démarrage" :
Tu peux changer ceci de la manière suivante : Tu sauvegarde l'état initial dans une variable globale tout en réinitialisant le statut, et tu remets tout de suite comme c'était avant.

var
BTN_INITIAL_STATE: boolean;

BTN_INITIAL_STATE := SwapMouseButton(false);
SwapMouseButton(BTN_INITIAL_STATE);

Donc ainsi tu connais l'état initial sans le modifier lors de l'ouverture de l'application (imagine un utilisateur gaucher qui aurait testé ton programme, il aurait sans doute pas été content s'il bossait sur d'autres programmes en même temps et que tu lui inversais ses boutons! lol)

Bye...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2008 à 19:18
Et voila elle est à jour, j'ai viré les DoubleBuffered en trop, et j'ai ajouté l'option SwapMouseButton (par contre l'application met les boutons dans l'ordre normal automatiquement au démarrage).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2008 à 19:06
Ouais pourquoi pas ...
Je fais ça directement, et je poste après (au pire après manger) ^^

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
20 août 2008 à 18:59
J'y pense, tu pourrais aussi ajouter le swap des boutons gauche/droite dans les options.
SwapMouseButton(fSwap: Boolean): Boolean;
Le Booléen renvoyé représente l'état précédant le changement.
Bonne continuation!
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2008 à 18:18
Bonjour,
oui je n'ai pas bossé du côté gestion des erreurs, mais il suffit d'incruster des blocs try..finally.
Par contre tu m'apprends quelque chose sur les DoubleBuffered !
Finies les 20 lignes de doublebuffered, il suffira de mettre les panels, les groupboxs, les scrollboxs, et autres contrôles "containers", et bien sûr la fiche !

Sinon pour redémarrer l'ordinateur, oui je me dis que c'est pas terrible de ce côté là, mais je ne vois pas comment faire ça ... en fait je faisais une promenade dans ma BDR (quand il fait pas beau dehors ...) et j'ai vu des valeurs interessantes, et je me suis dit que j'allais faire un truc autour de ça ... ce que j'ai fait.
Chez moi ca marche en redémarrant, mais par contre sur une autre, ça ne marche pas du tout (XP, SP2, exactement comme moi).
Mais il doit exister un moyen ... SetSystemParameters ?

Cordialement, Bacterius !
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
20 août 2008 à 18:11
Bonjour Bacterius!

Une petite question: n'y a-t-il pas un moyen d'appliquer les modifications sans redémarrer le système ? L'utilitaire de configuration par défaut de Windows le permet, donc ça doit être possible je pense! A creuser de ce côté là.

Quelques commentaires sur le code en lui-même :

N'abuse pas des déclarations "DoubleBuffered := true", il en suffit d'une par contrôle fenêtré (la Form, puis chaque Panel ou GroupBox), et c'est une propriété qui est appliquée aux contrôles directement enfants tels que les TButton, TLabel, TImage...
Par conséquent, définir le DoubleBuffered d'un bouton ou d'une checkbox est inutile !

Ensuite, lors de ton usage des TRegistry, et plus généralement lors de l'usage de tout objet que tu crées manuellement, utilise de préférence une structure du type try/finally :
WITH TObject.Create DO TRY
[...]
FINALLY
Free;
END;
Ainsi tu es sûr que l'objet sera libéré quoiqu'il arrive dans le code (erreurs, etc... Dans ton cas en particulier, si une des valeurs du registre n'existe pas, une exception est levée!)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2008 à 15:08
Codé sous Delphi 6 Personal Edition.

Cordialement, Bacterius !