请教Edit编辑框中如何让包含指定内容的行显示在第一行?
我想创建显示一个Edit编辑框,数百行内容,想让包含指定内容的行显示在第一行,怎么办?我翻了内置函数和UDF里的编辑框控件管理(GuiEdit)函数,都没找到此类显示函数。也想不出什么思路来实现,请大侠帮忙!
[ 本帖最后由 thackit 于 2009-4-13 08:29 编辑 ] 不关控件的事,主要是字符串截取。把包含指定内容的行截取出来,删掉原行,然后合并。 我想要的是保持原Edit框内容不变,然后让包含指定内容的行显示在第一行。
原意是想创建的GUI显示出来后自动读取某文本文件,然后自动滚动到让包含指定内容的行显示在第一行。 自动滚动?第一行?
先想办法让Edit控件随你的意思滚动吧。UDF里有这方面的相关函数,不过实现就比较麻烦。
计算所在行数,然后_GUICtrlEdit_LineScroll。或是定位光标,然后_GUICtrlEdit_Scroll。
[ 本帖最后由 sensel 于 2009-4-12 19:13 编辑 ] 好像定位光标都没有相关的函数。
你提到的那些函数,我也看过了,好像不太行。
用_GUICtrlEdit_LineScroll是要计算行数,好像速度较慢。
用_GUICtrlEdit_Scroll基本不可行。:face (13): 试试
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiEdit.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 397, 180, 100, 125)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 377, 161)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GUICtrlEdit_SetText($Edit1,FileRead(StringReplace(@AutoItExe,"autoit3.exe","readme.txt")))
MsgBox(0,"^_^ pcbar","这是au3的readme文件,按下确定键,将含有字符“正则表达式”的行置顶")
$n=StringInStr(_GUICtrlEdit_GetText($Edit1),"正则表达式")
_GUICtrlEdit_LineScroll($Edit1,0,_GUICtrlEdit_LineFromChar($Edit1,$n))
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd ...汗 先把原来的读出来 写新内容再写回去... 下面是我早上想出来的方法,不过来论坛后看了6楼版主的方法好像比我的好。
Func ToPos($filecon, $Tocon)
$tmp = StringMid($filecon, "1", StringInStr($filecon, $Tocon)) ;提取指定内容之前的全部内容
StringReplace($tmp, @CR, @CR)
$repnum = @extended
Return $repnum ;确定行数
EndFunc
_GUICtrlEdit_LineScroll($Edit1, "", ToPos($filecon, $ToCon)) 什么时候能有汉化完全的 UDF 帮助文件,_GUICtrlEdit_LineFromChar这个函数我翻来翻去看着好像不能用,因为英文不好看不太懂参数含义。。。。
总的来说,问题解决,谢谢各位。 经检测发现 _GUICtrlEdit_LineFromChar 函数有Bug:
当文件中某行无内容(即仅一个回车)时,该函数不会将此行计入行数。
当某行中仅包含空格时,即使只有一个空格,也会计入行数。
页:
[1]