Cambiar texto en input

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Cambiar texto en input

Mensaje por avechuche »

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!!!
Avatar de Usuario
chekok
Hacker del Foro
Mensajes: 111
Registrado: 16 Sep 2011, 11:50
Ubicación: Valencia / España
Contactar:

Re: Cambiar texto en input

Mensaje por chekok »

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.
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Re: Cambiar texto en input

Mensaje por avechuche »

Perfecto, a esperar. Muchas Gracias!
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Cambiar texto en input

Mensaje por Jonny »

¿Es un imput creado con las funciones GUI de autoit?.

Si es así, prueba con la función GuiCTRLSetData().

Salu2!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Cambiar texto en input

Mensaje por Chefito »

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 :smt024 :

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
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ú :smt002 .

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
por este otro:

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.
Saludos.
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 ;).
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Re: Cambiar texto en input

Mensaje por avechuche »

estaba seguro de que era con GUIRegisterMsg pero no se utilizarlo muy bien, con esta explicacion va a quedar muy claro. muchisimas gracias!!!!
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Re: Cambiar texto en input

Mensaje por avechuche »

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?
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Cambiar texto en input

Mensaje por Ximorro »

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. ;-)
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Re: Cambiar texto en input

Mensaje por avechuche »

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 :(
Responder