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