找回密码
 加入
搜索
楼主: itljl

edit输入框被用户干挠的疑问

  [复制链接]
发表于 2009-12-31 21:44:27 | 显示全部楼层
和楼上一个思路的另一个写法:
#Include <GuiEdit.au3>
#Include <ScrollBarConstants.au3>

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 313, 150, 226, 375)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 289, 130)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
For $i = 1 To 30
        _write()
Next
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd
Func _write()
        GUICtrlSetData($Edit1,GUICtrlRead($Edit1) & "这是行 " & $i & @CRLF)                  ;----------------这个方法很有用的,楼主应该能明白什么意思吧
;~                 _GUICtrlEdit_Scroll($Edit1, $SB_SCROLLCARET)               ;----------滚动到最底部
                _GUICtrlEdit_LineScroll($Edit1, 0, _GUICtrlEdit_GetLineCount($Edit1))                ;----------这句也是滚动到最底部
Sleep(50)
EndFunc
 楼主| 发表于 2010-1-1 00:09:31 | 显示全部楼层
回复 15# sanmoking


  谢谢楼上这位兄弟,算是比较完美解决了。你的思维很活跃啊。
我原以为有UDF,或者样式的方式解决这个问题。复制数据再增加的办法始终感觉到有点笨,在数据大的情况下,会有些效率问题。
发表于 2010-1-1 01:10:29 | 显示全部楼层
恩,14楼就是用的udf来解决的,用的是逐步增加而不是复制全部数据再增加的办法
_GUICtrlEdit_InsertText($Edit1,$i &" "& Chr(10), _GUICtrlEdit_GetTextLen($Edit1) )         

_GUICtrlEdit_GetTextLen($Edit1) 是获取edit有多少个字符
_GUICtrlEdit_InsertText是在那个位置插入文字。。。
所以上面那行的意思就是在最后一个字符的位置插入新的内容,但是我在测试的时候,只要有中文就会出错,也不知道是不是我的版本有问题。。。。而且这个udf函数也并不是完美节决了用户干扰的问题,如果用户拖选了一部分字符,在增加新内容的时候就会把拖选的字符替换成新的。。。你可以试一下。。。。
方法很多,就是看你怎么用了。。。殊途同归。。。
发表于 2010-1-1 01:23:29 | 显示全部楼层
本帖最后由 sanmoking 于 2010-1-1 01:26 编辑

如果怕用户手动删除部分字符干扰到。。。。那就参考4楼的方法,多设置一个看不见的edit控件,就算用户删除那个显示在窗体中的edit一部分字符,那个隐藏的是删不掉的,下次更新还会还原的。。。。

其实完全不必担心数据量的问题,纯字符形式的内容你想他能占多大资源?100万汉字字符才相当于2M...

例子

#Include <GuiEdit.au3>
#Include <ScrollBarConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 313, 289, 226, 375)
$Edit1 = ""                ;----------------这个变量其实就相当于那个看不见的控件
$Edit2 = GUICtrlCreateEdit("", 8, 8, 289, 265)                  ;----------------窗体上显示出来的输入框
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###




For $i = 1 To 30
        _write()
Next


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

Func _write()
$Edit1 = $Edit1&"这是行 " & $i & @CRLF  
GUICtrlSetData($Edit2,$Edit1,"")  
_GUICtrlEdit_Scroll($Edit2, $SB_SCROLLCARET)                 ;----------------滚动到最底部
        Sleep(100)
EndFunc   ;==>_write
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 02:12 , Processed in 0.151829 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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