Что нового

Вернуть текст элементу Input

FlatX007

Tattoo!
Сообщения
197
Репутация
35
У элемента Input есть стандартный текст, если на него навести курсор и нажать то текст исчезает, в этом нет проблемы, проблема вернуть его назад если я ничего не вписал в это поле или пользователь кликнул мышкой в другое место ...

Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 398, 225, 192, 124)
$Input_Dummi = GUICtrlCreateInput("0", -100, -100, -100, -100)
$Input2 = GUICtrlCreateInput("Text", 64, 64, 121, 21)
$Button1 = GUICtrlCreateButton("Button1", 16, 192, 75, 25, 0)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 208, 64, 97, 17)
$Radio1 = GUICtrlCreateRadio("Radio1", 208, 88, 113, 17)

GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func WM_COMMAND($hGui, $MsgID, $WParam, $LParam)
    Local $iIDFrom = BitAND($wParam, 0xFFFF) ; Low Word
    Local $iCode = BitShift($wParam, 16) ; Hi Word
	Dim $aRead[2] = [GUICtrlRead($iIDFrom), GUICtrlRead($iIDFrom, 1)]

	If $aRead[1] = "Text" Then GUICtrlSetData($Input2, "")

    Return $GUI_RUNDEFMSG
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>

GUICreate("_GUICtrlEdit_SetDefault")

Global $EDIT_DEF_ITEMS[1][2] = [[0, 0]]

$nEdit1 = GUICtrlCreateInput("", 5, 5, 100, 20)
_GUICtrlEdit_SetDefault($nEdit1, "This is the test", 0xFFC1C1, 0x0000FF)

$nEdit2 = GUICtrlCreateInput("", 5, 30, 100, 20)
_GUICtrlEdit_SetDefault($nEdit2, "Take 2.", 0x989898)

GUICtrlCreateInput("Just a standard input", 5, 55, 200, 20)
GUICtrlSetState(-1, $GUI_FOCUS)

GUISetState()

While GUIGetMsg() <> -3
WEnd

Func _GUICtrlEdit_SetDefault($hEdit, $sDefText, $nDefColor = 0x989898, $nTextColor = 0x000000)
	If $hEdit = 0 Then
		Return SetError(1, 0, 0)
	EndIf
	
	If $EDIT_DEF_ITEMS[0][0] = 0 Then
		GUIRegisterMsg($WM_COMMAND, "__EDIT_DEF_WM_COMMAND")
	EndIf
	
	If GUICtrlRead($hEdit) = "" Then
		GUICtrlSetColor($hEdit, $nDefColor)
		GUICtrlSetData($hEdit, $sDefText)
	EndIf
	
	$EDIT_DEF_ITEMS[0][0] += 1
	ReDim $EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0] + 1][4]
	
	$EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][0] = $hEdit
	$EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][1] = $sDefText
	$EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][2] = $nDefColor
	$EDIT_DEF_ITEMS[$EDIT_DEF_ITEMS[0][0]][3] = $nTextColor
	
	Return 1
EndFunc   ;==>_GUICtrlEdit_SetDefault

Func __EDIT_DEF_WM_COMMAND($hWnd, $msgID, $wParam, $lParam)
	Local $n = __EDIT_DEF_GETINDEX(BitAND($wParam, 0xFFFF))
	
	If $n = -1 Then
		Return $GUI_RUNDEFMSG
	EndIf
	
	Local $nMsg = BitShift($wParam, 16)
	
	If $nMsg = $EN_SETFOCUS Then ; Gained focus (EN_SETFOCUS)
		If (GUICtrlRead($EDIT_DEF_ITEMS[$n][0]) == $EDIT_DEF_ITEMS[$n][1]) Then
			GUICtrlSetColor($EDIT_DEF_ITEMS[$n][0], $EDIT_DEF_ITEMS[$n][3])
			GUICtrlSetData($EDIT_DEF_ITEMS[$n][0], "")
		EndIf
	ElseIf $nMsg = $EN_KILLFOCUS Then ; Lost Focus (EN_KILLFOCUS)
		If GUICtrlRead($EDIT_DEF_ITEMS[$n][0]) = "" Then
			GUICtrlSetColor($EDIT_DEF_ITEMS[$n][0], $EDIT_DEF_ITEMS[$n][2])
			GUICtrlSetData($EDIT_DEF_ITEMS[$n][0], $EDIT_DEF_ITEMS[$n][1])
		EndIf
	EndIf
EndFunc   ;==>__EDIT_DEF_WM_COMMAND

Func __EDIT_DEF_GETINDEX($hEdit)
	For $i = 1 To UBound($EDIT_DEF_ITEMS) - 1
		If $EDIT_DEF_ITEMS[$i][0] = $hEdit Then
			Return $i
		EndIf
	Next
	
	Return -1
EndFunc   ;==>__EDIT_DEF_GETINDEX
 
Автор
F

FlatX007

Tattoo!
Сообщения
197
Репутация
35
Если кликнуть по пустому месту в окне то текст не возвращается назад.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ну так и фокус остается у Input. А если кликнуть по пустому окну, то куда должен быть установлен фокус? Так и должно быть, это стандартное поведение Windows. Попробуй понажимать клавишу TAB...
 
Верх