smooth 发表于 2014-11-23 21:34:41

[已解决]如何让鼠标点击GUICtrlCreateInput时内置的信息自动消失?

本帖最后由 smooth 于 2015-2-25 15:35 编辑

如何让鼠标点击GUICtrlCreateInput时内置的信息自动消失?而当鼠标离开后若没有输入任何内容时,又恢复默认的信息?谢谢!

user3000 发表于 2014-11-24 18:06:08

回复 1# smooth #include <WindowsConstants.au3>
#include <EditConstants.au3>

Local $sDefault = "默认值"
GUICreate('TEST', 420, 200)
$Input = GUICtrlCreateInput($sDefault, 10, 15, 400, 23)
$Edit =GUICtrlCreateEdit('', 10, 50, 400, 140)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
Do
Until GUIGetMsg() == -3

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
      Local $nCode = BitShift($wParam, 16)
      Local $ID = BitAND($wParam, 0x0000FFFF)
                If $ID <>$Input Then Return
      If $nCode = $EN_KILLFOCUS Then
                   If GUICtrlRead($Input) == '' Then GUICtrlSetData($Input, $sDefault)
          ElseIf $nCode = $EN_SETFOCUS Then
                   GUICtrlSetData($Input, '')
      EndIf
EndFunc

chzj589 发表于 2014-11-24 19:28:16

回复 2# user3000

谢谢,又学习了。但感觉把排列对换一下会好一点,不知是什么原因?

$Input = GUICtrlCreateInput($sDefault, 10, 15, 400, 23)
$Edit =GUICtrlCreateEdit('', 10, 50, 400, 140)

$Edit =GUICtrlCreateEdit('', 10, 50, 400, 140)       
$Input = GUICtrlCreateInput($sDefault, 10, 15, 400, 23)

vigiles 发表于 2014-11-26 18:02:05

回复 2# user3000


    能否在事件模式下实现?

user3000 发表于 2014-11-26 18:27:46

回复 4# vigiles


    这问题可以自己尝试下,比发问更有体会.

netegg 发表于 2014-11-27 08:50:12

回复 2# user3000
为什么要建立两个控件

user3000 发表于 2014-11-27 18:07:51

回复 6# netegg

老大,没什么特殊缘由.随手改的代码;这样又方便转移输入焦点.

smooth 发表于 2014-12-6 21:30:37

回复 2# user3000

这样有点问题,弹出界面后,当鼠标一开始就点击这个GUICtrlCreateInput时,默认的信息无法自动消失。只有当鼠标点到别的地方,然后再点GUICtrlCreateInput时,才有那样的效果。

user3000 发表于 2014-12-6 21:53:49

回复 8# smooth

应该就是3楼说的重新排列一下会"更好"的原因了,像那样先创建EDIT控件,输入焦点就会在其上.
也可以创建完控件后再设置输入焦点:;#include <GUIConstantsEx.au3>
;.............
;GUICtrlSetState($Edit, $gui_focus)
页: [1]
查看完整版本: [已解决]如何让鼠标点击GUICtrlCreateInput时内置的信息自动消失?