[R] InputBox perd son focus

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jlf
Niveau 2
Niveau 2
Messages : 15
Enregistré le : sam. 24 juil. 2010 13:42
Status : Hors ligne

[R] InputBox perd son focus

#1

Message par jlf »

Bonjour,

J'ai une GUI qui contient différents contrôles, dont un TreeView et une InputBox. Cette dernière permet de faire une recherche sur les éléments affichés dans le TreeView.

Code : Tout sélectionner

$tv = GUICtrlCreateTreeView(....), $sf = GUICtrlCreateInput(...)
Lorsque l'utilisateur saisit/modifie le texte de l'InputBoxf, l'objectif est de mettre à jour le TreeView.
Le TreeView n'est pas réellement mis à jour : il est détruit (via GUICtrlDelete) puis reconstruit (GUICtrlCreateTreeView) avec seulement les éléments à afficher (donc déjà filtrés).
HIC : le InputBox perd son focus dans l'affaire :evil:
J'ai donc ajouté juste après la commande suivante :

Code : Tout sélectionner

GUICtrlSetData($sf,GUICtrlRead($sf))
Et là, nouveau hic :oops: Pendant un bref instant, le texte de l'InputBox apparaît entièrement sélectionné. Donc si l'utilisateur effectue une nouvelle entrée clavier (il suffit de rester appuyer sur une touche), alors la nouvelle entrée remplace entièrement le texte au lieu de s'y ajouter. :roll:
Cette méthode n'est donc pas viable... :?

Pour résoudre mon problème, je pense qu'il y aurait au moins ces deux possibilités, mais que je n'arrive pas à mettre en œuvre :
  • soit il existe une commande pour empêcher que la commande GUICtrlCreateTreeView fasse perdre le focus à l'InputBox. Il n'y aurait alors plus à lui redonner le focus puisqu'il ne l'aurait pas perdu...
  • soit il existe une commande (laquelle ?) pour redonner le focus à l'InputBox mais en évitant que le texte soit sélectionné.
J'ai reproduit un test-case. Le défaut est moins sensible mais apparaît quand même. Il suffit de maintenir une touche enfoncée dans le champ de recherche (en bas) pour voir que de temps en temps tout est effacé... :x

Si quelqu'un a une solution / une piste, je suis preneur !!! :D Merci d'avance

JL
Fichiers joints
CtrlTreeView.au3
(5.12 Kio) Téléchargé 98 fois
Modifié en dernier par jlf le lun. 04 juil. 2016 16:06, modifié 1 fois.
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] InputBox perd son focus  

#2

Message par GhostLine »

Je propose ceci : ça n'est pas super super propre, mais ça ne dénature pas ton code.

Code : Tout sélectionner

			Case $sf_txt_cur<>$sf_txt_prv
				GUICtrlSetState($sf_hnd,128)
				ConsoleWrite("ok" & @CRLF)
				_SaveThis()
				GUICtrlDelete($idTreeview)
				$idTreeview = GUICtrlCreateTreeView(5, 5, 310, 150, BitOR($TVS_CHECKBOXES, $TVS_FULLROWSELECT, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
				$sf_txt_prv = $sf_txt_cur
				$sf_txt_cur = StringReplace($sf_txt_cur,"?",".")
				$sf_txt_cur = StringReplace($sf_txt_cur,"*",".*")
				ConsoleWrite("$sf_txt_cur = " & $sf_txt_cur & @CRLF)
				For $i=1 To UBound($array,1)-1
					If StringRegExp($array[$i][$IDX_TXT],"(?i)" & $sf_txt_cur) Then
						ConsoleWrite($i & @CRLF)
						$array[$i][$IDX_HND] = GUICtrlCreateTreeViewItem($array[$i][$IDX_TXT],$idTreeview)
						If $array[$i][$IDX_CHK] Then GUICtrlSetState($array[$i][$IDX_HND],$GUI_CHECKED)
					EndIf
				Next

				;Restore focus
				GUICtrlSetState($sf_hnd,320)
				GUICtrlSetData($sf_hnd,GUICtrlRead($sf_hnd))
jlf
Niveau 2
Niveau 2
Messages : 15
Enregistré le : sam. 24 juil. 2010 13:42
Status : Hors ligne

Re: [..] InputBox perd son focus

#3

Message par jlf »

yes ! Merci :D
Répondre