Page 1 sur 1

[R] Input comme la barre de recherche dans firefox

Posté : ven. 01 juil. 2011 23:52
par karime1
bonjours
j'ai fait une fenêtre avec Autoit, qui ressemble a un formulaire avec quelque input. rien de difficile jusqu'au la. après j'ai eu l'idée de remplacer les label qui guide l'utilisateur, par un texte écrit a l'intérieur de l'input. sauf que l'utilisateur doit les vider a chaque fois. alors j'ai cherché a faire un truc comme la barre de recherche google ou celle de linternaute.com qui est ecrite malheureusement en html
<input ... value="Rechercher" onfocus="if(this.value=='Rechercher') this.value='';" onblur="if(this.value=='') this.value='Rechercher';">

qui devient a peu près:

if "onfocus" AND guictrlread($h)='Rechercher' then
guictrlsetdata($h,'')
Elseif "onblur" AND guictrlread($h)='' then
guictrlsetdata($h,'Rechercher')
Endif

le prob c'est que y'a pas de fonction comme "onfocus" ou "onblur" pour les input, j'ai même essayé GUICtrlGetState mais ça marche pas :cry:
Quelq'un peu me sauver?svp

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 02 juil. 2011 11:12
par TT22
Tien, essaye avec ça :

Code : Tout sélectionner

#include<GuiConstantsEx.au3>
#include <EditConstants.au3>

GUICreate("Form")
GUICtrlCreateInput("Rechercher",5,5,100,50,$ES_MULTILINE)
GUISetState()

While 1
    $msg = guigetmsg()
    If $msg = $GUI_EVENT_CLOSE Then
        Exit
        EndIf
    WEnd

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 02 juil. 2011 12:26
par mikell
Voilà exactement ce que tu veux
► Afficher le texte
Méthode bourrin mais ça marche :mrgreen:
C'est l'idée mais il vaudrait peut-être mieux mettre le bazar dans un GUISetOnEvent plutôt que dans un While

Re: [..] Input comme la barre de recherche dans firefox

Posté : dim. 03 juil. 2011 11:45
par Tlem
Un sujet similaire a été présenté.

Une callback sur l'input avec un GuiRegister, puis une fonction de traitement.

Si mes souvenirs sont exacts, il s'agissait d'un système avec dictionnaire.
Là, il m'est difficile de faire des recherches mais je ne doute pas que vous allez y arriver.

Re: [..] Input comme la barre de recherche dans firefox

Posté : jeu. 07 juil. 2011 17:10
par karime1
@ Tlem: j'ai pas trouvé le vieu sujet
@mikell: une fois le texte supprimé il ne revient plus et ça marche seulement avec le bouton gauche de la souris, il se peut qu'on utilise le bouton droit ou le bouton TAB ou guictrlGetFocus et donc on pe plus utiliser GUIGetCursorInfo
si quelqu'un a une autre idée svp

Re: [..] Input comme la barre de recherche dans firefox

Posté : jeu. 07 juil. 2011 17:35
par Tlem
De mon PC, la recherche était plus simple (30 secondes) :
http://www.autoitscript.fr/forum/viewto ... f=6&t=3232

La partie intéressante ce trouve dans les derniers messages.

Re: [..] Input comme la barre de recherche dans firefox

Posté : ven. 08 juil. 2011 19:49
par karime1
c'est pas ça :D
c'est comme ce qu'a fait mikell ce que je cherche.

Re: [..] Input comme la barre de recherche dans firefox

Posté : ven. 08 juil. 2011 21:23
par mikell
karime1 a écrit :@mikell: une fois le texte supprimé il ne revient plus et ça marche seulement avec le bouton gauche de la souris, il se peut qu'on utilise le bouton droit ou le bouton TAB ou guictrlGetFocus
Alors
- je te signale que dans la barre de recherche de google (comme celle qui est dans firefox par exemple) le texte il revient pas non plus :mrgreen:
- pour les boutons tu as absolument le droit d'adapter le script selon tes envies (voir les différentes possibilités pour _IsPressed dans l'aide)
Mon exemple n'était qu'une trame, à toi d'en faire exactement ce que tu veux :wink:
► Afficher le texte

Re: [..] Input comme la barre de recherche dans firefox

Posté : ven. 08 juil. 2011 23:31
par Tlem
karime1 a écrit :c'est pas ça :D
c'est comme ce qu'a fait mikell ce que je cherche.
:shock:

C'est pas un truc comme ceci que vous cherchez à faire ?
► Afficher le texte

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 00:21
par mikell
:shock:
Tlem pourriez-vous expliquer en détail la signification des lignes dans cette fonction MY_WM_COMMAND ?

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 00:56
par Tlem
Code édité pour rajouter les commentaires.

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 01:11
par mikell
:mrgreen: merci...

Code : Tout sélectionner

    $nNotifyCode = BitShift($wParam, 16) ; [color=#FF0000]Converti $wParam avant utilisation[/color]
    $nID = BitAND($wParam, 0x0000FFFF) ; [color=#FF0000]Converti $wParam avant utilisation[/color]
Heu oui, mais encore ?!?

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 01:15
par Tlem
Ha, on ne sait pas lire :
; Pour plus de détails sur les paramètres, lire la section Remarks de la fonction GUIRegisterMsg.
Allez, c'est bien parce que c'est vous :
When the user function is called then these 4 parameters have the following values:
Position Parameter Meaning
hWnd - The Window handle of the GUI in which the message appears.
Msg - The Windows message ID.
wParam - The first message parameter as hex value.
lParam - The second message parameter as hex value.

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 04:32
par mikell
Ha, ha, ha. Funny le boss, sauf qu'il répond à côté

Code : Tout sélectionner

    $nNotifyCode = BitShift($wParam, 16) ; [color=#FF0000]Converti $wParam avant utilisation[/color]
    $nID = BitAND($wParam, 0x0000FFFF) ; [color=#FF0000]Converti $wParam avant utilisation[/color]
alors je m'obstine : que signifient précisément (traduction en français please) BitShift($wParam, 16) et BitAND($wParam, 0x0000FFFF )?
Sachant que le fichier d'aide qui est mon livre de chevet me susurre "BitShift : Performs a bit shifting operation" , "BitAND : Performs a bitwise AND operation", ce qui vous en conviendrez est d'une clarté aveuglante :roll:

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 09:28
par Tlem
Cela me semblait inutile de donner plus de détails, car là on entre dans la partie cachée de l'iceberg, mais si vous y tenez :

Alors, on commence par GUIRegisterMsg qui est une fonction qui permet d'utiliser une callback sur les messages Windows.
En l’occurrence, le message Windows utilisé est : WM_COMMAND
Mais vous pouvez déterminer celui que vous voulez en consultant cette liste : Codes des Messages Windows

Ensuite, afin de connaitre les valeurs de retour de la commande utilisée, allez chez notre ami Bill et utilisez le moteur de recherche intégré : http://msdn.microsoft.com

Ce qui nous donne pour WM_COMMAND : http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Dans la section Remarks, vous avez un tableau avec les valeurs de retour possible. En consultant l'élément utilisé dans notre cas (un contrôle input), on peut lire sur la ligne Control :
► Afficher le texte
Pour notre cas, nous retiendrons que :
wParam (high word) = Control-defined notification code
wParam (low word) = Control identifier

Comme ces deux paramètres (Control-defined notification code et Control identifier) sont dans la valeur de retour de wParam, il va falloir les séparer !!!

BitShift($wParam, 16) permet donc de récupérer le low word de wParam (l'ID du contrôle), alors que BitAND($wParam, 0x0000FFFF) permet de récupérer le high word de wParam et donc le code de notification Windows.

* Juste au cas ou vous chercheriez encore la petite bête en ce qui concerne wParam, low word et high word, je rajouterais :
lParam est de type DWORD (double word) qui est un entier non signé de 32 bits.
La ligne : BitShift($wParam, 16) extrait le WORD inférieur
La ligne : BitAND($wParam, 0x0000FFFF) extrait le WORD supérieur
WORD - Un word est simplement 2 bytes ensemble, soit 16 bits. Un Word
peut avoir une valeur maximale de 0FFFFh (soit 65535d, ou h veut dire "en
hexadécimal", et d "en décimal").

DOUBLE WORD - Syntaxe DWORD: Un DWORD consiste en deux WORD
ensemble, soit un maximum de 32 bits. Valeur maximale = 0FFFFFFFFh (ou
encore 4294967295d).
Voilà, j'espère vous avoir bien malaxé les neurones et que cette journée vous soit comme un jour de révélation ... hihihi

.

Re: [..] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 10:23
par karime1
:shock: :shock: :shock:
tros compliqué tout ça, je vais me contenter de copier le script et l'admirer
merci beaucoup

Re: [R] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 10:44
par mikell
Tlem MERCI Image
C'est exactement le genre d'explication claire qui manque parfois cruellement dans le fichier d'aide
Tlem a écrit :Juste au cas ou vous chercheriez encore la petite bête ...
Vous n'aimez pas comprendre ce que vous faites, vous ?
"Utiliser les choses sans les comprendre ne saurait manquer de faire trébucher le blaireau" (Confucius) :mrgreen:

Re: [R] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 11:46
par Tlem
mikell a écrit :Vous n'aimez pas comprendre ce que vous faites, vous ?
Parfois, je prend les codes comme ils viennent, sans en comprendre l'intégralité, mais en sachant m'en servir pour mes besoins.

En l’occurrence, je savait ce qu'était les variables $nNotifyCode et $nID (leur nom était suffisamment évocateur) sans pour autant connaitre le détail de l'extraction du low word et du high word. ;)

Comme je sais trouver les réponses, je l'ai fait afin d'en faire profiter ceux que ça pourrait intéresser ...
Au final, ceci et ceci suffisent largement pour la compréhension d'un point particulier. :P

Re: [R] Input comme la barre de recherche dans firefox

Posté : sam. 09 juil. 2011 21:01
par zeshrek
[Msg supprimés pour cause de hors sujet et départ en troll.]