找回密码
 加入
搜索
查看: 1369|回复: 9

请教Edit编辑框中如何让包含指定内容的行显示在第一行?

[复制链接]
发表于 2009-4-12 17:22:34 | 显示全部楼层 |阅读模式
我想创建显示一个Edit编辑框,数百行内容,想让包含指定内容的行显示在第一行,怎么办?

我翻了内置函数和UDF里的编辑框控件管理(GuiEdit)函数,都没找到此类显示函数。也想不出什么思路来实现,请大侠帮忙!

[ 本帖最后由 thackit 于 2009-4-13 08:29 编辑 ]
发表于 2009-4-12 17:58:02 | 显示全部楼层
不关控件的事,主要是字符串截取。把包含指定内容的行截取出来,删掉原行,然后合并。
 楼主| 发表于 2009-4-12 18:57:22 | 显示全部楼层
我想要的是保持原Edit框内容不变,然后让包含指定内容的行显示在第一行。

原意是想创建的GUI显示出来后自动读取某文本文件,然后自动滚动到让包含指定内容的行显示在第一行。
发表于 2009-4-12 19:09:36 | 显示全部楼层
自动滚动?第一行?
先想办法让Edit控件随你的意思滚动吧。UDF里有这方面的相关函数,不过实现就比较麻烦。
计算所在行数,然后_GUICtrlEdit_LineScroll。或是定位光标,然后_GUICtrlEdit_Scroll。

[ 本帖最后由 sensel 于 2009-4-12 19:13 编辑 ]
 楼主| 发表于 2009-4-12 19:47:26 | 显示全部楼层
好像定位光标都没有相关的函数。

你提到的那些函数,我也看过了,好像不太行。

用_GUICtrlEdit_LineScroll是要计算行数,好像速度较慢。

用_GUICtrlEdit_Scroll基本不可行。
发表于 2009-4-12 20:28:08 | 显示全部楼层
试试

#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
发表于 2009-4-13 05:48:59 | 显示全部楼层
...汗 先把原来的读出来 写新内容  再写回去...
 楼主| 发表于 2009-4-13 08:24:28 | 显示全部楼层
下面是我早上想出来的方法,不过来论坛后看了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))
 楼主| 发表于 2009-4-13 08:29:04 | 显示全部楼层
什么时候能有汉化完全的 UDF 帮助文件,_GUICtrlEdit_LineFromChar这个函数我翻来翻去看着好像不能用,因为英文不好看不太懂参数含义。。。。

总的来说,问题解决,谢谢各位。
 楼主| 发表于 2009-4-20 15:57:08 | 显示全部楼层
经检测发现 _GUICtrlEdit_LineFromChar 函数有Bug:
当文件中某行无内容(即仅一个回车)时,该函数不会将此行计入行数。
当某行中仅包含空格时,即使只有一个空格,也会计入行数。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-29 02:12 , Processed in 0.076915 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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