找回密码
 加入
搜索
查看: 8280|回复: 11

[GUI管理] [已解决]input框中怎么出气泡提示

 火.. [复制链接]
发表于 2010-11-3 05:59:45 | 显示全部楼层 |阅读模式
本帖最后由 pig 于 2010-11-3 20:42 编辑

想编写一个程序,需要在input框中输入指定的字符,如果用户输错则给出气泡提示,但是不会弄。
想要的就是那种限制输入数字的效果,就是输入一个不是数字的字符时直接提示不能输入。
我知道那个只要把INPUT的扩展属性设置为NUMBER就行,但是我这个不是想只能输入数字。
看了帮助,用GUICtrlSetTip的话好像可以做到类似功能,但是必须焦点在INPUT才可以,难不成用ToolTip?这样需要取得INPUT的坐标,似乎走了一个大弯路呀?

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-11-3 06:29:04 | 显示全部楼层
总要设置个坐标的,哪怕是跟随鼠标箭头,如果要是跟随输入文本似乎很麻烦
另外这个估计要用_guitooltip_create,至于实时监控输入,可以使用$en_change消息,试试看吧
发表于 2010-11-3 12:18:44 | 显示全部楼层
新建一个Label  平时隐藏  错误时显示   可以不?
发表于 2010-11-3 12:30:58 | 显示全部楼层
首先对LZ的id喜感一下 ^ ____ ^
是否类似 http://www.autoitx.com/thread-19345-1-1.html 这个软件中的在底部4个输入框输入字符时的效果?
发表于 2010-11-3 13:31:02 | 显示全部楼层
楼上看来有完美解决的办法~~  情况确实如此
 楼主| 发表于 2010-11-3 19:53:51 | 显示全部楼层
我想要图片里的效果,就是指定输入的内容必须是FTP或者\\开头的字符,输入错误则给出气泡提示。
已经给INPUT控件设置了CHANGE事件,就是改变字符并且光标移开后才判断字符是否错误。
问题是用GUICtrlSetTip必须鼠标停留在那里才能显示啊,不知道怎么才能直接显示。
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Date.au3>
#include <File.au3>
#include <Array.au3>
#include <FTPEx.au3>
#include <WinAPI.au3>
#include <GuiToolTip.au3>
#include <GuiTab.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("RZX日志备份器", 387, 346, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Group1 = GUICtrlCreateGroup("本地备份设置", 8, 8, 369, 89)
GUICtrlSetFont(-1, 9, 400, 0, "黑体")
$Button1 = GUICtrlCreateButton("浏览", 328, 31, 41, 22)
GUICtrlSetOnEvent(-1, "Button1Click")
$Label1 = GUICtrlCreateLabel("RZX日志目录", 16, 32, 75, 21)
GUICtrlSetFont(-1, 9, 400, 0, "微软雅黑")
$Input1 = GUICtrlCreateInput("", 96, 32, 225, 20)
$Label2 = GUICtrlCreateLabel("本地备份目录", 16, 64, 76, 21)
GUICtrlSetFont(-1, 9, 400, 0, "微软雅黑")
$input2 = GUICtrlCreateInput("", 96, 64, 225, 20)
$Button2 = GUICtrlCreateButton("浏览", 328, 63, 41, 22)
GUICtrlSetOnEvent(-1, "Button2Click")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("异地备份设置", 8, 112, 369, 89)
GUICtrlSetFont(-1, 9, 400, 0, "黑体")
$Label3 = GUICtrlCreateLabel("异地备份目录", 16, 136, 76, 21)
GUICtrlSetFont(-1, 9, 400, 0, "微软雅黑")
$Input3 = GUICtrlCreateInput("请输入FTP地址或共享路径", 104, 136, 225, 20)
;GUICtrlSetFont(-1, 9, 400, 0, "宋体")
GUICtrlSetColor(-1, 0xC0C0C0)
GUICtrlSetOnEvent(-1, "Input3Change")
$Label4 = GUICtrlCreateLabel("用户名", 16, 168, 40, 21)
GUICtrlSetFont(-1, 9, 400, 0, "微软雅黑")
$Input4 = GUICtrlCreateInput("", 56, 168, 97, 20)
$Label5 = GUICtrlCreateLabel("密码", 168, 168, 28, 21)
GUICtrlSetFont(-1, 9, 400, 0, "微软雅黑")
$Input5 = GUICtrlCreateInput("", 199, 168, 97, 20, $ES_PASSWORD)
$Button3 = GUICtrlCreateButton("测试连接", 312, 168, 57, 22)
GUICtrlSetOnEvent(-1, "Button3Click")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("计划任务设置", 8, 216, 369, 73)
GUICtrlSetFont(-1, 9, 400, 0, "黑体")
$Label6 = GUICtrlCreateLabel("保存", 16, 240, 28, 16)
$Combo1 = GUICtrlCreateCombo("", 48, 232, 41, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
$Label7 = GUICtrlCreateLabel("天内的日志文件", 88, 240, 88, 16)
$Label8 = GUICtrlCreateLabel("每天", 16, 264, 28, 16)
GUICtrlCreateInput("", 48, 256, 49, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
$Label9 = GUICtrlCreateLabel("点自动备份日志", 96, 264, 88, 16)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
        If _WinAPI_GetFocus() = GUICtrlGetHandle($Input3) And GUICtrlRead($Input3) = "请输入FTP地址或共享路径" Then
                GUICtrlSetData($Input3, "")
                GUICtrlSetColor($Input3, 0x000000)
        ElseIf _WinAPI_GetFocus() <> GUICtrlGetHandle($Input3) And GUICtrlRead($Input3) = "" Then
                GUICtrlSetColor($Input3, 0xC0C0C0)
                GUICtrlSetData($Input3, "请输入FTP地址或共享路径")
        EndIf
        Sleep(100)
WEnd

Func Input3Change()
        $pos = ControlGetPos("RZX日志备份器", "", $Input3)
        If GUICtrlRead($Input3) <> "" Then
                If StringInStr(GUICtrlRead($Input3), "ftp", 0, 1, 1, 3) = 0 Or StringInStr(GUICtrlRead($Input3), "\", 0, 1, 1, 2) Then GUICtrlSetTip($Input3, "请输入FTP地址或UNC共享路径", "输入错误", 3, 1)
                EndIf
EndFunc   ;==>Input3Change
Func Click()
        MsgBox(0, 0, 0)
EndFunc   ;==>Click
Func Button1Click()
        GUISetState(@SW_DISABLE, $Form1)
        GUICtrlSetData($Input1, FileSelectFolder("指定RZX日志目录", "D:", 1, "", $Form1))
        GUISetState(@SW_ENABLE, $Form1)
EndFunc   ;==>Button1Click
Func Button2Click()
        GUISetState(@SW_DISABLE, $Form1)
        GUICtrlSetData($input2, FileSelectFolder("指定日志备份目录", "D:", 1, "", $Form1))
        GUISetState(@SW_ENABLE, $Form1)
EndFunc   ;==>Button2Click

Func Button3Click()
        If StringInStr(StringLeft(GUICtrlRead($Input3), 3), "\") Then
                RunWait(@ComSpec & " /c net use " & GUICtrlRead($Input3) & " " & GUICtrlRead($Input5) & " /user:" & GUICtrlRead($Input4), "", @SW_HIDE)
                If FileExists(GUICtrlRead($Input3)) Then
                        MsgBox(0, 0, "通过")
                Else
                        MsgBox(48, 0, "不存在")
                EndIf
        ElseIf StringInStr(StringLeft(GUICtrlRead($Input3), 3), "ftp") Then
                If StringInStr(StringMid(GUICtrlRead($Input3), 7), ":") = 0 Then
                        $Address = StringMid(GUICtrlRead($Input3), 7)
                        $Port = 21
                Else
                        $Address = StringLeft(StringMid(GUICtrlRead($Input3), 7), StringInStr(StringMid(GUICtrlRead($Input3), 7), ":") - 1)
                        $Port = StringMid(StringMid(GUICtrlRead($Input3), 7), StringInStr(StringMid(GUICtrlRead($Input3), 7), ":") + 1)
                EndIf
                MsgBox(0, 0, $Address)
                MsgBox(0, 0, $Port)
                $Open = _FTP_Open("BackupFTP")
                $Conn = _FTP_Connect($Open, $Address, GUICtrlRead($Input4), GUICtrlRead($Input5), 0, $Port)
                If @error Then
                        MsgBox(0, 0, "NO")
                Else
                        MsgBox(0, 0, $Conn)
                EndIf

        EndIf
EndFunc   ;==>Button3Click
Func Form1Close()
        Exit
EndFunc   ;==>Form1Close




$SourcePath = IniRead("RZXbackup.dll", "set", "SourcePath", "D:\RZX")
$BackupPath = IniRead("RZXbackup.dll", "set", "BackupPath", "D:\Bak")
$NetPath = IniRead("RZXbackup.dll", "set", "NetPath", "d:")
$User = IniRead("RZXbackup.dll", "set", "User", "")
$PassWord = IniRead("RZXbackup.dll", "set", "PassWord", "")
$KeepDays = IniRead("RZXbackup.ini", "set", "KeepDays", "10")

Dim $BackupFileList[$KeepDays + 1] = [$KeepDays]
For $i = 1 To $KeepDays
        $BackupFileList[$i] = "Z_" & StringReplace(_DateAdd("d", -$i, _NowCalcDate()), "/", "") & ".log"
Next

DelCopyFile($BackupPath)

Func DelCopyFile($Path)
        $Array = _FileListToArray($Path, "*.log", 1)
        If $Array <> 0 Then
                For $i = 1 To $Array[0]
                        _ArraySearch($BackupFileList, $Array[$i])
                        If @error = 6 And $Array[$i] <> "Z_" & StringReplace(_NowCalcDate(), "/", "") & ".log" Then FileDelete($Path & "" & $Array[$i])
                Next
                If $Path <> $SourcePath Then
                        For $i = 1 To $BackupFileList[0]
                                _ArraySearch($Array, $BackupFileList[$i])
                                If @error = 6 Then FileCopy($SourcePath & "" & $BackupFileList[$i], $Path)
                        Next
                EndIf
        Else
                If $Path <> $SourcePath Then
                        For $i = 1 To $BackupFileList[0]
                                FileCopy($SourcePath & "" & $BackupFileList[$i], $Path)
                        Next
                EndIf
        EndIf
EndFunc   ;==>DelCopyFile

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-11-3 20:17:34 | 显示全部楼层
注册 $WM_COMMAND 消息
在判断到需要出现气泡时用 _GUICtrlEdit_ShowBalloonTip() 即可
 楼主| 发表于 2010-11-3 20:40:07 | 显示全部楼层
谢谢版主,用 _GUICtrlEdit_ShowBalloonTip() 已完美解决。
不过我不知道“注册 $WM_COMMAND 消息”是什么意思,我不是很懂。我是用那个图形编辑器帮我生成了一个INPUT改变事件的。
发表于 2010-11-3 20:55:34 | 显示全部楼层
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 192, 124)
$Label1 = GUICtrlCreateLabel("下面文本框只能输入数字,不能输入英文字母", 48, 64, 244, 17)
$Input1 = GUICtrlCreateInput("", 56, 104, 297, 21, $ES_NUMBER)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

        EndSwitch
WEnd

评分

参与人数 1金钱 +20 收起 理由
se7en + 20 金币不多,为签名加分

查看全部评分

发表于 2010-11-7 15:05:46 | 显示全部楼层
顶楼上的签名!
发表于 2011-1-21 09:21:58 | 显示全部楼层
学习了 楼上都是强人
发表于 2014-4-29 00:04:49 | 显示全部楼层
哈哈,都各有奇招,但正规些的是哪种呢?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 08:36 , Processed in 0.087714 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表