cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 2012
-
26 août 2010 à 07:15
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 2012
-
31 août 2010 à 10:54
Bonjour,
j'ai une question sur la creation d'un clavier virtuel pour une appication.
Je voudrais realiser une application tactile et il me faut donc un clavier virtuel dedans.
Pour l'intant j'ai "fait" un clavier avec edes boutons ou il ya les caracteres dessus, c'est un control de mon form principal (mdiparent)
quand certains forms fils sont lancés avec des textbox ou autre...
je fais apparaitre le clavier (en topmost=true)
je rencontre un probleme quand le form que je fais apparaitre est modal (showdialog()) , je n'ai plus alors acces au clavier bien qu'il soit visible...
comment puis je faire pour dissocier , les deux..
tjrs pouvoir taper sur le clavier sans qu'il ai jamais le focus mais accessible ...
En fait je voudrais pouvoir dans n'importe quel condition utiliser ce clavier , est ce possible ? comment ?
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 26 août 2010 à 08:48
j'ai ajouté ca que j'ai trouvé sur le forum et internet :
private const int WS_CAPTION = 0xc00000;
/// <summary>
/// Override virtual method to have a form with Resizable borders but no
/// TitleBar and to made the form inactive when clicks are performed over its
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
long Style = cp.Style;
//pour ne pas voir le border
//cp.Style ^= WS_CAPTION;
cp.ExStyle |= WS_EX_NOACTIVATE;
return cp;
}
}
deadhand
Messages postés152Date d'inscriptiondimanche 15 octobre 2006StatutMembreDernière intervention27 août 20103 26 août 2010 à 14:26
Salut !
De mon point de vue ca arrive parce que tu es sur le même thread que la form qui demande un ShowDialog (qui met en "pause" toutes les autres form). Essaye de mettre ton clavier sur un thread asynchrone et à part.
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 26 août 2010 à 15:06
Bonjour
Même avis que Deadhand.
Soit tu te passes des Showdialog() en inhibant toi même le formulaire pricipal avant d'afficher les autres et tu mets en place des evenements pour récuperer les clicks du clavier virtuel.
Soit tu utilises un autre thread, mais attention aux événements entre les form il faudra tester InvokeRequired.
mais le positionnement du clavier ne me plait pas trop...(en fait il ne se place pas ou la ou je voudrais...
j'aimerais aussi pouvoir le cacher et le faire apparaitre a ma guise et dans différents forms (la c'est le form principal apartir duquel je le lance mais j'aimerais pouvoir le cacher/montrer a differents endroits et moments , j'aimerais aussi pouvoir ne montrer que la partie numérique ou le tout selon le formulaire que j'ai...)
comment implémenter cela ( ou une piste si vous avez ou des conseils )
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 26 août 2010 à 18:01
Je pense qu'il te faut définir une architecture differente.
par exemple
Mets ton clavier virtuel dans une DLL qui comportera une class d'interface avec des méthodes public et static telles que
ShowKeyboard(), HideKeyboard(), MoveKeyboard(point location) etc... accessible par tout le monde.
Cette class pourra aussi recuperer les evenements en provenance de la fenetre du clavier et les "émettera" aux fenetres ayant souscris aux evenements.
Dans la methode ShowKeyboard() tu lanceras ton thread s'il ce n'est pas encore fait.
Conserve un menbre static sur ton thread, cela permettra à cette class de communiquer avec le thread via des propriété public.
pour cacher le clavier il suffit d'appeller la méthod Hide() de la fenetre principale.
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 27 août 2010 à 08:51
Merci , c'est un peu l'idée que j'avais...
mais comme il y a des threads qui interviennent...
je ne suis pas sur de moi.
je defini un form_clavier_virtuel ds une dll . ca OK
je met les methodes ShowKeyboard(), HideKeyboard(), MoveKeyboard(point location) dans le meme form ?
avec le thread dans showkeyboard ? (je ne sais pas comment on fait)
"Conserve un menbre static sur ton thread, cela permettra à cette class de communiquer avec le thread via des propriété public"
ca je ne comprend pas trop non plus ...
je voudrais effectivement que mon clavier soit "static"
je voudrais pouvoir faire depuis n'importe quel formulaire : ma_class_clavier_virtuel.showkeyboard() ,etc....
mais je ne sais pas comment...
J'apprécierais bien de l'aide (c'est surtout comment placer le thread et l'implementer ou je bloque...)
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 27 août 2010 à 15:55
J'ai essayé quelque chose mais evidemment cela ne fontionne pas :
j'ai créé unne class class_constante (dans laquell je voudrais mettre que des controles ou "variables" constantes et visibles de tous dont le clavier virtuel
j'ai d'un coté le form_clavier_virtuel (qui contient justes les methodes d'appui sur les touches : sendinupt..)
et de l'autre ma classe constante ou j'ai mis :
#region clavier virtuel
public static Form_pave_numerique clavier = new Form_pave_numerique();
//VARIABLES.Form_pave_numerique pavnum = new VARIABLES.Form_pave_numerique();
public static Thread clav_thread;
private ThreadHasFinishedDelegateHandler ThreadHasFinishedDelegate;
internal delegate void ThreadHasFinishedDelegateHandler();
#region thread clavier test
public static void lancer_thread_clavier()
{
try
{
evidemment ca ne marche pas , j'ai des messages d'appel inter thread etc...
le comportement que j'aimerais avoir (mais ej ne sais pas comment l'implémenter )
depuis un formulaire quelconque
si je detecte l'entree dans un textbox ou l'appui sur un bouton (bref je decide lors de l'evenement)
j'appelle class_constante.movekeyboard(x,y) et class_constante.showkeyboard()
ou meme un class_constante.showkeyboard(x,y)....
voila reste qu'a faire ca avec des threads je crois mais je ne sais pas le faire...
ce serait d'ailleurs une bonne chose a apprendre a maitriser je pense...
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 31 août 2010 à 08:14
Je n'ai pas une tres bonne visualisation de ce qu'il faudrait que je fasse...
organisation dans les class etc...ou doivent se trouver les methodes et comment les lancer...
la methode pour lancer le thread ca va (je pense)
mais apres, je voudrais (enfin je crois) aller modifier ce thread grace a des methodes static
ds ma fonction hide (que je ne sais pas comment implementer et ou la mettre : ds ma class_constante ou dans le form du clavier directement ?)
je voudrais en fait juste changer la propriete du clavier (faire clavier.hide() ou bien alors clavier.visible=false)
mais voila , je ne sais pas comment l'implémenter...
Je serais tres reconnaissant de recevoir un coup de main la dessus
j'ai fait un fomrulaire ou il y a un bouton hide();
quand je clique dessus j'appelle class_constante.hidekeyboard();
j'appelle donc hidekeyboard depuis le formulaire que je veux
ca ne fonctionne qu'une fois : la seconde fois j'ai un message :
"impossible d'appeler invoke ou begininvoke sur un controle tant que le handle de fenetre n'a pas ete cree"