liuhuascanf 发表于 2007-7-10 19:16:25

如何从cb的第三方控件Tmemo中获取字符串(或文本内容)

获取tmemo这个控件中的内容我一直都没有搞定,通过了不同的方式
obj_get_text();
obj_get_info();
。。。。

见插图,灰色部分“资料校验:该号码不存在或者已被占用”,和窗体下面的白色部分的内容都是在tmemo控件中
请问这种控件该如何获取
或者有没有其他方式获取里面的值?
麻烦各位高人给个解答,不胜感谢!

插图见附件

liuhuascanf 发表于 2007-7-11 09:28:54

自己顶下先,怎么没人来回答呢?
这个问题对高手来说很难么?

dionysus 发表于 2007-7-11 11:44:14

lz先用gui spy查看一下这个弹出框的属性,感觉应该是win_get_text之类的函数可以

liuhuascanf 发表于 2007-7-11 14:46:41

{
class: object,
MSW_class: TMemo,
location: 0
}

昨天忘说了,是obj对象,靠win_get_text是取不出来的

lantianwei 发表于 2007-7-12 12:31:33

估计是取不出来了

liuhuascanf 发表于 2007-7-12 19:54:29

肯定有办法的,如果这些字符串都取不出来,mi顺带着hp一起公司关掉算了!

liuhuascanf 发表于 2007-7-14 00:56:12

小研究了下,自己写了个函数,通过把字符串读入记事本,把问题搞定了
1.定义一个test:a,目录 "D:\\wr\\a",
2.a中新增gui文件 a.gui,被learn的对象有"系统通知","记事本"的窗体
3.定义函数 tmemo_get_text(out text,guiFile),函数如下:

public function tmemo_get_text(out text,guiFile){

        GUI_close_all();
        GUI_load("D:\\wr\\a\\a.gui"); #Load the GUI file
       
        if(win_exists("系统通知")==E_OK){
                if(obj_exists("TMemo_1")==E_OK){
                        win_activate("系统通知");
                        set_window("系统通知");                       
                        obj_type ("TMemo_1","<kDown_E><kDown_E><kHome_E><kS_End_E><kCtrl_L-c>"); #仅需获取最后一行内容
                       
                        invoke_application("notepad.exe","","C:\\WINDOWS\\system32\\",SW_SHOW);
                        win_activate ("无标题 - 记事本");
                        set_window ("无标题 - 记事本", 1);
                        obj_type ("Edit","<kCtrl_L-v>");
                        edit_get_text("Edit",text);
                        obj_type ("Edit","<kCtrl_L-z><kAlt_L-kF4>");
                       
                        win_activate("系统通知");
                        set_window("系统通知");               
                }
                else{
                        text="There's no such control named Tmemo_1 !";
                        report_msg(text);
                }
        }
       
        else{
                text="There's no such window which you need !";
                report_msg(text);
        }
       
        GUI_close_all();
        GUI_load(guiFile);
};

在b 的test中调用:
GUI_close_all();
GUI_file=getvar("testname")&"\\b.gui";
GUI_load(GUI_file);

call "d:\\wr\\a"();
win_activate("系统通知");
set_window("系统通知");       

tmemo_get_text(text,GUI_file);
report_msg(text);       

从而获取了tmemo中的字符串,欢迎各位高手帮忙改进函数实现方式,小弟是新手,目前只会用这种比较老土的方法

dionysus 发表于 2007-7-14 15:39:45

obj_type ("TMemo_1","<kDown_E><kDown_E><kHome_E><kS_End_E><kCtrl_L-c>"); #仅需获取最后一行内容
这一行前面部分的键盘操作是什么意思?后面是一个复制的快捷键
另:强烈支持lz的这种自我解决问题的方法,自己编写函数以适应产品特性,加精!

liuhuascanf 发表于 2007-7-14 20:45:25

哈哈哈,难得发一篇帖子就拿了精华,激动ing!感谢版主!
obj_type ("TMemo_1","<kDown_E><kDown_E><kHome_E><kS_End_E><kCtrl_L-c>");
这一行代码主要是针对我们自己的产品设计的,就我们的产品中,TMemo_1内部的提示信息有且只有3行
<kDown_E><kDown_E>表示将光标定位到TMemo_1上时候,将光标再往下移动2行,以保证取到的值肯定是最后一行
<kHome_E>表示将光标定位到行首home键,<kS_End_E>就是shift+end键,这两个键组合就是把这一行内容全部取到,最后复制下就ok了!
hoho,再次感谢版主,我想以后会有更多的精华贴出现的:)sdlkfj5

lantianwei 发表于 2007-7-16 09:14:48

学习了。。。。佩服

kolecat 发表于 2007-7-16 11:23:30

想法挺新颖,不错
页: [1]
查看完整版本: 如何从cb的第三方控件Tmemo中获取字符串(或文本内容)