pb12.5通过sendmessage读取mle中的一行文字

//23-08-09 
//最后一个参数, 使用ref blob方式, 使用分配的缓冲区大小, 内存安全
//使用ref String方式, 如果预分配空间不够大, 就会向缓冲区后面相临内存地址写入
//

在pb11.5中, 是不需要使用blob转换的(存疑), 是升级到12.5后, 才被迫换成这种方式的

外部函数声明:

function long SendMessage(ulong hWnd, uint msg, long wParam, ref blob lParam) library "user32.dll" alias for "SendMessageA;ansi"

constant long EM_GETLINE = 196 
long nums
blob lp_buffer

string ls_text
for i=0 to mle_1.linecount( ) -1
    lp_buffer=blob(char(512)+space(255)) //lp_buffer=blob(space(80)), 用空格最多接收33位英文字符
    nums=SendMessage(handle(mle_1), EM_GETLINE, i, ref lp_buffer) //取得第i行的文本,0为起始         
    ls_text=string(lp_buffer, encodingAnsi!)
next

//因为仅仅用于接收条码, 没有超过33byte, 所以没发现之前pb12.5写法中的问题, 更正于21-06-27

参考EM_GETLINE的古怪_weixin_30256505的博客-CSDN博客

参考原文:https://www.cnblogs.com/bcpl/archive/2005/03/24/124524.html

最初学到的地方: pb中获取多行文本编辑框(mle控件)指定行的内容_yyoinge的专栏-CSDN博客

pb11.5

function long SendMessage(ulong hWnd, uint msg, long wParam, ref string lParam) library "user32.dll" alias for "SendMessageA;ansi"

constant long EM_GETLINE = 196 
string ls_text
for i=0 to mle_1.linecount( ) -1
    ls_text=space(80)    //pb11.5测试, 可以不做这个初始化, pb11.5自动处理, 且没有字数限制(存疑)
    SendMessage(handle(mle_1), EM_GETLINE, i, ref ls_text) //表示取得第i行的文本,0为起始 
next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值