juin 10
L’objectif d’un clavier virtuel est d’offrir à l’utilisateur, un confort d’utilisation qui ne lui fera pas regretter son clavier physique favori.
La principale différence est que le clavier physique est détaché de l’écran tandis qu’un clavier virtuel est quant à lui, prisonnier de cette jungle de pixels.
L’enjeu est donc de réduire ce désavantage au minimum.
Et la première difficulté que nous avons rencontré fut de rendre le CVK totalement “transparent” aux yeux du système d’exploitation. Concrètement, lorsque l’on clique sur une fenetre, celle-ci reprends le focus, devenant active. Cependant, pour un clavier virtuel, le but étant de saisir des informations dans une autre fenetre, ce mécanisme rendrait la chose impossible. Voir la suite »
mai 26
Un petit point technique concernant l’accès à la ressource d’un même élément par plusieurs Threads tout en évitant le Cross-Thread Access.
Exemple concrêt : l’image qui représente la Touche est la même pour les 105 touches du clavier. Le plugin de défilement automatique (qui est un autre Thread) change cette image pour la faire apparaitre comme illuminée, et ce, pour une sélection de N Touches. Lors de cette opération, il est très probable qu’une exception de type : InvalidOperatioException soit jetée. Ceci est du au fait que le Thread qui essaye d’accéder à l’image n’est pas le même que le thread qui a créé le contrôle.
Voici la méthode utilisée pour régler ce problème :
///Sets the Image by a thread-safe manner.
private void SetImageOut()
{
if ( InvokeRequired ) //Vérifie si l’appelant est un thread différent de celui qui a créé le contrôle
//Dans ce cas, on ré-appelle notre méthode SetImageOut () par le Thread à qui notre contrôle appartient
this.Invoke(new MethodInvoker(delegate() { SetImageOut(); }));
else {
//Si tout est bon, on peut appliquer notre Image au contrôle
if (this.Image == null)
this.Image = _keyNormalImage;
}