//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