| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 387 人关注过本帖
标题:请教各位老师RichText控件如何获取行数,某行的文字?
只看楼主 加入收藏
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:403
专家分:644
注 册:2019-10-11
收藏
得分:0 
那就按17楼的方法做
前天 13:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10676
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用wxzd123在2025-9-1 13:00:35的发言:

版主您好
 nWordCount  = SendMessageW2(hEdit, EM_GETLINE, nLineNo, @cBuffer)
这行提示数据类型不匹配

 贴相关代码和截图出错提示看看
前天 20:15
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:361
专家分:874
注 册:2021-1-9
收藏
得分:0 
以下是引用wxzd123在2025-9-1 13:00:35的发言:

版主您好
 nWordCount  = SendMessageW2(hEdit, EM_GETLINE, nLineNo, @cBuffer)
这行提示数据类型不匹配


修改一下这句
 hEdit       = thisform.oleRTF.Hwnd
前天 20:48
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:403
专家分:644
注 册:2019-10-11
收藏
得分:0 
注意:仅在vfp支持的字符集下有效

FUNCTION mGetRTLine(RThwnd As long, LineNum As Long)
#defi GTL_NUMBYTES  16
#defi EM_LINEINDEX 0xBB
#defi EM_GETLINECOUNT 0xBA
#defi EM_LINELENGTH 0xC1
#defi WM_USER  0x400
#DEFINE EM_GETTEXTRANGE  (WM_USER + 75)
Declare INTEGER SendMessage in WIN32API as sendmessage_n INTEGER hwnd , INTEGER wMsg , INTEGER wParam , INTEGER lParam
DECLARE INTEGER SendMessage IN win32api as sendmessage_c INTEGER hWnd, INTEGER wParam, INTEGER lParam,string @
DECLARE INTEGER GlobalAlloc IN KERNEL32.DLL  INTEGER         uFlags,INTEGER         dwBytes
DECLARE INTEGER GlobalLock IN KERNEL32.DLL   INTEGER         hMem
DECLARE INTEGER GlobalUnlock IN KERNEL32.DLL  INTEGER         hMem
DECLARE INTEGER GlobalFree IN KERNEL32.DLL    INTEGER         hMem
If LineNum < 1
    RETURN ""
EndIf
LineCount = SendMessage_n(RThWnd, EM_GETLINECOUNT, 0, 0)
If LineNum > LineCount
    RETURN ""
EndIf
charFrom = SendMessage_n(RThWnd, EM_LINEINDEX, LineNum - 1,  0)
lc = SendMessage_n(RThWnd, EM_LINELENGTH, charFrom,  0)
If lc = 0
    RETURN ""
endif
charEnd = charFrom + lc
trAddress=GetMemPoint(0,2048)
IF trAddress=0
    RETURN ""
endif
tr=BINTOC(charFrom,"4rs")+BINTOC(charEnd,"4rs")+BINTOC(trAddress,"4rs")
j = SendMessage_c(RThWnd, EM_GETTEXTRANGE, 0, @TR)
If j = 0
    RETURN ""
ENDIF
getRTLine = left(SYS(2600,trAddress,2048),j)
DeleteMemPoint(trAddress)
RETURN getRTLine

FUNCTION GetMemPoint()
lPARAMETER uFlags,MemLen,PointAddress
LOCAL MemHandle,PAddress,MemSize
MemHandle = GlobalAlloc(m.uFlags,m.Memlen)
IF m.MemHandle = 0
    RETURN 0
ENDIF
PAddress = GlobalLock(m.MemHandle)
IF m.PAddress = 0
    =GlobalFree(m.PointAddress)
    RETURN 0
ENDIF
RETURN     (m.PAddress)
ENDFUNC

FUNCTION DeleteMemPoint()
LPARAMETER PointAddress
=GlobalUnlock(m.PointAddress)
=GlobalFree(m.PointAddress)
ENDFUNC
昨天 08:22
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:403
专家分:644
注 册:2019-10-11
收藏
得分:0 
回复 18楼 吹水佬
还是这个方法简单高效
DECLARE long SendMessageW   IN user32 as SendMessageW2   long,long,long,string@
DECLARE long SetWindowTextW IN user32 as SetWindowTextW2 long,string
#define EM_GETLINE    0x00C4
nBufferSize = 2048    && 要足够大
cBuffer     = BINTOC(nBufferSize,"4rs")+REPLICATE(0h00,nBufferSize+1)
hEdit       = thisform.hEdit1    &&编辑框句柄
nLineNo     = 9                  &&要取的行号(通常是从0行起)
nWordCount  = SendMessageW2(hEdit, EM_GETLINE, nLineNo, @cBuffer)
SetWindowTextW2(hEdit, cBuffer)   && 显示结果

[此贴子已经被作者于2025-9-2 08:40编辑过]

昨天 08:38
wxzd123
Rank: 2
等 级:论坛游民
帖 子:445
专家分:96
注 册:2012-9-6
收藏
得分:0 
sun这个参数是什么?请教sych老师
昨天 11:17
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:403
专家分:644
注 册:2019-10-11
收藏
得分:0 
这个是数组名,你要看帮助文档呀,里面很详细的
昨天 11:20
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:403
专家分:644
注 册:2019-10-11
收藏
得分:0 
回复 18楼 吹水佬
好像文本内容包含如ŋ之类的文字是无法正确获取的

[此贴子已经被作者于2025-9-2 14:50编辑过]

昨天 14:44
sych
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:403
专家分:644
注 册:2019-10-11
收藏
得分:0 
oform1=NEWOBJECT("form1")
oform1.Show
READ EVENTS
RETURN

DEFINE CLASS form1 AS form

    autocenter = .t.
    Height = 325
    Width = 705

    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 12, ;
        Left = 12, ;
        Height = 27, ;
        Width = 120, ;
        Caption = "装入 文本文件", ;
        Name = "Command1"

    ADD OBJECT mstext AS olecontrol WITH ;
        Top = 50, ;
        Left = 12, ;
        Height = 232, ;
        Width = 684, ;
        oleclass = "Forms.TextBox.1", ;
        Name = "mstext"

    ADD OBJECT command2 AS commandbutton WITH ;
        Top = 12, ;
        Left = 144, ;
        Height = 27, ;
        Width = 120, ;
        Caption = "保存 utf-8 文本", ;
        Name = "Command2"

    PROCEDURE mstext.init
        WITH this
        .MultiLine = .t.
        .EnterkeyBehavior = .t.
        .wordwrap=.f.
        .scrollbars=3
        endwith
    ENDPROC

    PROCEDURE command1.Click
        Thisform.mstext.font.size = 20
        Sys(3101, 65001)
        aa=FileToStr(GetFile('txt'))
        Thisform.mstext.Text = IIF(left(aa,3)=0hefbbbf,SUBSTR(aa,4),IIF(LEFT(aa,2)=0hfffe,STRCONV(SUBSTR(aa,3),10),aa))
        Sys(3101, 0)
    ENDPROC

    PROCEDURE command2.Click
        Sys(3101, 65001)
        STRTOFILE(CHR(0xef)+CHR(0xbb)+CHR(0xbf)+Thisform.mstext.Text,"222.txt")
        Sys(3101, 0)
    ENDPROC

    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC

ENDDEFINE
昨天 14:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10676
专家分:43295
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2025-9-2 14:44:29的发言:

好像文本内容包含如ŋ之类的文字是无法正确获取的

windows标准控件测试正常,NET控件未试过。
昨天 15:50
快速回复:请教各位老师RichText控件如何获取行数,某行的文字?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025040 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved