Cambiar texto en input
Cambiar texto en input
Tengo una duda, necesito cambiar el texto de un input cuando este input tenga el focus.
Osea, tengo un input con texto "Esperando ..." y que cuando ese input tenga el foco, se borre "Esperando ..." dejando el input en blanco para escribir. Ahora si escribo algo que quede tal cual, pero si no escribo nada, y saco el foco de ese input, quiero que vuelva la palabra "Esperando ...". Alguna sugerencia? Gracias!!!
Osea, tengo un input con texto "Esperando ..." y que cuando ese input tenga el foco, se borre "Esperando ..." dejando el input en blanco para escribir. Ahora si escribo algo que quede tal cual, pero si no escribo nada, y saco el foco de ese input, quiero que vuelva la palabra "Esperando ...". Alguna sugerencia? Gracias!!!
- chekok
- Hacker del Foro
- Mensajes: 111
- Registrado: 16 Sep 2011, 11:50
- Ubicación: Valencia / España
- Contactar:
Re: Cambiar texto en input
hace un tiempo tuve el mismo problema y encontre la solucion, en cuanto vuelva a casa te subo el code (estoy de viaje de negocios y no llevo conmigo mi pc ni me acuerdo de memoria de todo el code), te contesto desde el movil. El lunes o martes proximo te lo subo. Un saludo.
La vida es larga y dura.
Re: Cambiar texto en input
Perfecto, a esperar. Muchas Gracias!
Re: Cambiar texto en input
¿Es un imput creado con las funciones GUI de autoit?.
Si es así, prueba con la función GuiCTRLSetData().
Salu2!
Si es así, prueba con la función GuiCTRLSetData().
Salu2!
- Chefito
- Profesional del Autoit
- Mensajes: 2035
- Registrado: 21 Feb 2008, 18:42
- Ubicación: Albacete/Cuenca (España)
Re: Cambiar texto en input
Lo mejor para hacer esto es utilizar los eventos del input que se disparan cuando éste gana y pierde el foco. Te recomiendo que mires en la ayuda la función _GUICtrlEdit_Create, donde en el ejemplo encontrarás casi todos los eventos que dispara un input/edit. De aquí está sacado el ejemplo que te voy a poner a continuación....algo modificado, por supuesto :
Te explico un poco.
Con GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") registramos (recogemos) los mensajes de nuestra ventana que pertenecen a wm_command. Se recogen muchos mensajes, así que filtramos los que nos interesan, que son los que dispara nuestro input (Case $Input_1, $hWndEdit) cuando pierde ($EN_KILLFOCUS) o gana ($EN_SETFOCUS) el foco. Dentro de estos case introducimos el código apropiado para que cuando pierda el foco aparezca el texto "Esperando ...", y cuando lo gane se quede en blanco preparado para escribir.
Si miras bien el código se puede optimizar más, ya que no he variado nada del principio de la función wm_command del ejemplo. Esto si quieres lo investigas tú .
Le he añadido un par de opciones más que veo lógica. Le he cambiado el color al texto "Esperando ...", poniendolo más clarito (esto es cuestión de gustos), y otra más importante, le he puesto una condición apoyándome en una variable auxiliar ($aux), la cual dice que si en el input hay texto escrito, que si pierde el foco no lo borre, y si lo gana, no lo machaque poniendo el texto "Esperando ...". Si no hay nada escrito en el input, funciona normalmente.
Si no quieres que pase esto último solamente tienes que cambiar este código:
por este otro:
Saludos.
Código: Seleccionar todo
#include <GuiEdit.au3>
#include <WinAPI.au3> ; used for Lo/Hi word
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
Opt('MustDeclareVars', 1)
Global $Input_1, $boton, $Input_2, $aux=True
Local $hGUI
; Create GUI
$hGUI = GUICreate("", 400, 300)
$boton=GUICtrlCreateButton("Mi boton", 40,40)
$Input_1 = GUICtrlCreateInput("Esperando ...", 10,10, 100)
GUICtrlSetColor(-1,0x8080ff)
$Input_2= GUICtrlCreateInput("", 10,100)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
If Not IsHWnd($Input_1) Then $hWndEdit = GUICtrlGetHandle($Input_1)
$hWndFrom = $ilParam
$iIDFrom = _WinAPI_LoWord($iwParam)
$iCode = _WinAPI_HiWord($iwParam)
Switch $hWndFrom
Case $Input_1, $hWndEdit
Switch $iCode
Case $EN_KILLFOCUS ; Sent when an edit control loses the keyboard focus
If GUICtrlRead($Input_1)="" Then
GUICtrlSetColor($Input_1,0x8080ff) ;Cambio el color del texto del Input.
GUICtrlSetData($Input_1,"Esperando ...") ;Pongo es texto Esperando ... en el Input.
$aux=True
Else
$aux=False
EndIf
Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
If $aux Then
GUICtrlSetData($Input_1,"") ;Borro el contenido del Input.
GUICtrlSetColor($Input_1,0) ;Cambio el color del texto del Input a negro.
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Con GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") registramos (recogemos) los mensajes de nuestra ventana que pertenecen a wm_command. Se recogen muchos mensajes, así que filtramos los que nos interesan, que son los que dispara nuestro input (Case $Input_1, $hWndEdit) cuando pierde ($EN_KILLFOCUS) o gana ($EN_SETFOCUS) el foco. Dentro de estos case introducimos el código apropiado para que cuando pierda el foco aparezca el texto "Esperando ...", y cuando lo gane se quede en blanco preparado para escribir.
Si miras bien el código se puede optimizar más, ya que no he variado nada del principio de la función wm_command del ejemplo. Esto si quieres lo investigas tú .
Le he añadido un par de opciones más que veo lógica. Le he cambiado el color al texto "Esperando ...", poniendolo más clarito (esto es cuestión de gustos), y otra más importante, le he puesto una condición apoyándome en una variable auxiliar ($aux), la cual dice que si en el input hay texto escrito, que si pierde el foco no lo borre, y si lo gana, no lo machaque poniendo el texto "Esperando ...". Si no hay nada escrito en el input, funciona normalmente.
Si no quieres que pase esto último solamente tienes que cambiar este código:
Código: Seleccionar todo
Case $EN_KILLFOCUS ; Sent when an edit control loses the keyboard focus
If GUICtrlRead($Input_1)="" Then
GUICtrlSetColor($Input_1,0x8080ff) ;Cambio el color del texto del Input.
GUICtrlSetData($Input_1,"Esperando ...") ;Pongo es texto Esperando ... en el Input.
$aux=True
Else
$aux=False
EndIf
Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
If $aux Then
GUICtrlSetData($Input_1,"") ;Borro el contenido del Input.
GUICtrlSetColor($Input_1,0) ;Cambio el color del texto del Input a negro.
EndIf
Código: Seleccionar todo
Case $EN_KILLFOCUS ; Sent when an edit control loses the keyboard focus
GUICtrlSetColor($Input_1,0x8080ff) ;Cambio el color del texto del Input.
GUICtrlSetData($Input_1,"Esperando ...") ;Pongo es texto Esperando ... en el Input.
Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
GUICtrlSetData($Input_1,"") ;Borro el contenido del Input.
GUICtrlSetColor($Input_1,0) ;Cambio el color del texto del Input a negro.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Re: Cambiar texto en input
estaba seguro de que era con GUIRegisterMsg pero no se utilizarlo muy bien, con esta explicacion va a quedar muy claro. muchisimas gracias!!!!
Re: Cambiar texto en input
Otra cosa, con que lenguaje se puede hacer esto mas "sencillamente". Yo con Flash (AS3) es mucho mas facil. en 3 renglones lo tenes (Me refiero a la parte de "WM_COMMAND"). Con .NET se puede hacer mas sencillo?
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Cambiar texto en input
AutoIt es ideal para algunas cosas y menos bueno para otras. En concreto el modelo de eventos es demasiado sencillo, y cuando quieres controlarlos mejor tienes que hacer cosas más complejas como mirar los mensajes, como en este ejemplo. Al menos lo bueno del asunto es que se puede, que no es poco.
Si te pasas a otros lenguajes probablemente podrás hacer estas cosas (gestión de eventos) más fácilmente pero habrá otras que sean más farragosas de programar. Comprendo que te haya asustado pero yo le daría una oportunidad a Autoit, cuando comprendes cómo va eso no es tan complicado, y tampoco hay que aprendérselo al dedillo, total para otra vez es básicamente coger ese código y en vez de $EN_SETFOCUS o $EN_KILLFOCUS es poner los eventos correspondientes.
Dicho eso, si te quieres pasar a otros lenguajes probablemente los .NET te servirán bien. En el viejo VB ya había gestión de eventos bastante completa, así que la plataforma .NET lo habrá heredado y seguramente mejorado.
Si te ha asustado AutoIt no te recomiendo usar Java, te parecerá más esotérico.
Si te pasas a otros lenguajes probablemente podrás hacer estas cosas (gestión de eventos) más fácilmente pero habrá otras que sean más farragosas de programar. Comprendo que te haya asustado pero yo le daría una oportunidad a Autoit, cuando comprendes cómo va eso no es tan complicado, y tampoco hay que aprendérselo al dedillo, total para otra vez es básicamente coger ese código y en vez de $EN_SETFOCUS o $EN_KILLFOCUS es poner los eventos correspondientes.
Dicho eso, si te quieres pasar a otros lenguajes probablemente los .NET te servirán bien. En el viejo VB ya había gestión de eventos bastante completa, así que la plataforma .NET lo habrá heredado y seguramente mejorado.
Si te ha asustado AutoIt no te recomiendo usar Java, te parecerá más esotérico.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Cambiar texto en input
Si es verdad. No es que me alla asustado es que muchas cosas "no las entiendo" y como q no da para preguntar todo. Me gusta que si copio un codigo, saberlo aplicar para futuros proyectos. este COMMAND entiendo la mitad. pero hay cosas q no las termino de aprender todavia :(