[R] Recherche dans Edit à l'ouverture du programme

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
GMH
Niveau 6
Niveau 6
Messages : 227
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

[R] Recherche dans Edit à l'ouverture du programme

#1

Message par GMH »

Bonjour,

Lorsque je fais une recherche dans un Edit à partir d'une valeur entrée dans un Input et d'un clic sur un bouton, l'opération réussit.
Mais lorsque je souhaite que le programme lance une recherche dès son ouverture, sans que j'intervienne, la recherche ne s'effectue pas.
Voici le code que je teste :
- La variable $Recherche contient la valeur à trouver dans l'Edit
- $Editeur est l'identification du contrôle Edit
- $sText est le contenu de l'Edit

Code : Tout sélectionner

...
Global $Recherche = "Jean Valjean"
Parcourir()
...
Func Parcourir()
	GUICtrlEdit_FindText($Editeur)
EndFunc

Func GUICtrlEdit_FindText($hWnd)
	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
	Local $sFind
	$sFind = StringStripWS($Recherche,3)
	Local $sText = GUICtrlEdit_GetText($hWnd)
	If $sFind <> "" Then
		$iPos = StringInStr($sText, $sFind)
		_GUICtrlEdit_SetSel($hWnd, $iPos - 1, ($iPos + StringLen($sFind)) - 1)
		_GUICtrlEdit_Scroll($hWnd, $__EDITCONSTANT_SB_SCROLLCARET)
	EndIf
EndFunc

Func GUICtrlEdit_GetText($hWnd)
	If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
	Local $iTextLen = _GUICtrlEdit_GetTextLen($hWnd) + 1
	Local $tText = DllStructCreate("wchar Text[" & $iTextLen & "]")
	_SendMessage($hWnd, $__EDITCONSTANT_WM_GETTEXT, $iTextLen, $tText, 0, "wparam", "struct*")
	Return DllStructGetData($tText, "Text")
EndFunc
Voyez-vous une erreur ou un oubli dans ce code ?

Je vous remercie.
Modifié en dernier par GMH le dim. 17 avr. 2016 19:16, modifié 2 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Recherche dans Edit à l'ouverture du programme

#2

Message par mikell »

à partir d'une valeur entrée dans un Input et d'un clic sur un bouton, l'opération réussit.
Si c'est le même code qui est utilisé, ça veut dire qu'il n'y a pas d'erreur, non ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
GMH
Niveau 6
Niveau 6
Messages : 227
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

Re: [..] Recherche dans Edit à l'ouverture du programme

#3

Message par GMH »

Bonjour,

Il n'y a, en effet, pas d'erreur à la compilation.
Si je change le contenu de la variable $Recherche en proposant un mot qui ne se trouve pas dans l'Edit, j'obtiens l'affichage de la MsgBox avertissant de l'échec de la recherche, programmée à cet effet.
Si le contenu de la variable $Recherche est bien présent dans l'Edit, la MsgBox d'échec ne s'affiche pas (j'en conclus que la recherche a réussi) mais le contenu de l'Edit ne scrolle pas.
Une MsgBox (0,"",$sFind & " " & $iPos - 1 & " " & ($iPos + StringLen($sFind)) - 1) placée après la ligne $iPos, affiche correctement la position dans l'Edit de $Recherche.
Si je passe par un Input dans lequel j'entre "Jean Valjean", et si je clique sur le bouton d'envoi, l'Edit scrolle.
GMH
Niveau 6
Niveau 6
Messages : 227
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

Re: [..] Recherche dans Edit à l'ouverture du programme

#4

Message par GMH »

Voici le code complet :

Code : Tout sélectionner

#Include <GuiEdit.au3>
#include <GUIConstantsEx.au3>
#include <ScrollBarsConstants.au3> ;
Opt("GUIOnEventMode", 1)
Global $Recherche = "Jean Valjean"
Global $Contenu = ""
$MaGui = GUICreate("Test", 800, 340, 30, 10)
GuiSetOnEvent(-3, "_Close", $MaGui)
Global $Editeur = GUICtrlCreateEdit("", 10, 20, 600, 300)
_GUICtrlEdit_SetLimitText($Editeur, 0) ; 0 = nombre de caractères illimité dans l'Edit
GUICtrlSetData(-1, "")
GUICtrlSetFont(-1, 12, 400, 0, "Lucida console") ; police à chasse fixe
GUICtrlSetCursor(-1, 5)
GUICtrlCreateButton("Rechercher",630,20,150,30)
GUICtrlSetOnEvent(-1, "Parcourir")

For $i = 0 TO 50
	$Contenu = $Contenu & $i & @CRLF
Next
$Contenu = $Contenu & "51 Jean Valjean" & @CRLF
For $i = 52 TO 100
	$Contenu = $Contenu & $i & @CRLF
Next
GUICtrlSetData($Editeur, $Contenu)
Parcourir()

GUISetState(@SW_SHOW)

While 1
	Sleep(1000)
WEnd

Func _Close()
   Exit
EndFunc

Func Parcourir()
   GUICtrlEdit_FindText($Editeur)
EndFunc

Func GUICtrlEdit_FindText($hWnd)
   If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
   Local $sFind
   $sFind = StringStripWS($Recherche,3)
   Local $sText = GUICtrlEdit_GetText($hWnd)
   If $sFind <> "" Then
      $iPos = StringInStr($sText, $sFind)
      MsgBox (0,"",$sFind & " " & $iPos - 1 & " " & ($iPos + StringLen($sFind)) - 1) 
      _GUICtrlEdit_SetSel($hWnd, $iPos - 1, ($iPos + StringLen($sFind)) - 1)
      _GUICtrlEdit_Scroll($hWnd, $__EDITCONSTANT_SB_SCROLLCARET)
   EndIf
EndFunc

Func GUICtrlEdit_GetText($hWnd)
   If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
   Local $iTextLen = _GUICtrlEdit_GetTextLen($hWnd) + 1
   Local $tText = DllStructCreate("wchar Text[" & $iTextLen & "]")
   _SendMessage($hWnd, $__EDITCONSTANT_WM_GETTEXT, $iTextLen, $tText, 0, "wparam", "struct*")
   Return DllStructGetData($tText, "Text")
EndFunc
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Recherche dans Edit à l'ouverture du programme

#5

Message par mikell »

ça ne marche que si la fonction est lancée après le GUISetState()
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
GMH
Niveau 6
Niveau 6
Messages : 227
Enregistré le : dim. 24 juin 2012 14:56
Status : Hors ligne

Re: [..] Recherche dans Edit à l'ouverture du programme

#6

Message par GMH »

Jamais je n'aurais imaginé une telle chose !
Je suis abasourdi par votre connaissance.
Grand merci Mikell pour le temps que vous avez pris à chercher une solution au problème, et votre solution.
Répondre