AAuto用户库标准库使用指南

   首先创建对话框应用程序,打开 main.aau,在【对话框】上添加一个按钮,如下图:


  然后暂时望记这按钮,在工具箱点击鼠标指针,然后在【对话框设计器】中点击【窗体】,按钮控件周围的八个小方块不见了,这表示他失去焦点了。然后我们点击快手右侧【属性面板】,在里面修改边框属性为:resizable


  把边框设置为resizable,那么窗体运行以后就可以用鼠标拖动边框调整大小了。


  然后继续在【对话框设计器】上添加一个【文本框控件】,用鼠标拖动控件右下角的小方块调整到合适大小, 如下图:


  别忘记了窗体是可调整大小的,我们希望【控钮控件】大小不变,总是显示在【窗体】的右下角,然后我们希望【文本框控件】大小是可变的,总是尽可能显示到最大,首先点击【文本框控件】,在属性面板中点击【固定边距】前面的加号展开所有选项:


  然后设置左、右、上、下四个边距的属性为true,true就是真,false就是假,在编程中称为【逻辑值】或者【布尔值】再按上面的方法设置【按钮控件】固定下边距、固定右边距。然后在快手中点击【运行】测试一下效果,试试最大化运行显示的对话框。然后修改按钮控件的文本属性为“点我抓取”,如下图:


  然后在【对话框设计器】中双击按钮控件,自动切换到代码视图。快手编辑器自动的添加了一个事件函数:


  首先,我们删除上面的注释,双斜杠开始的行是注释语句,一般显示为绿色,注释语句在运行时会被忽略,这里的注释语句仅仅是演示用法,我们可以先删掉不必要注释(程序中不要包含不必要的注释是一个良好习惯),变成下面这样:


  function关键字定义一个函数,函数将一小段代码包含在一对大括号里,构成了一个短小的子程序。

  下次我们要调用这段子程序,只要输入函数名字加圆括号就可以,例如我们执行代码mainForm.button.oncommand() 也就是执行上面我们定义的函数。

  不过 oncommand是个特殊的函数,一般不是我们自己调用,而是在用户点击按钮时,由窗体对象自动调用的函数 - 也就是回调函数。

  例如你认识了一个新朋友,他会跟你说:“Hi,请把你的电话号码留给我,你不要打电话给我,我有需要会打给你的”,这就是回调的一种形式了,回调函数也一样,你定义好 mainForm.button.oncommand 这个函数,窗体会在有需要时自动调用你的oncommand函数。我们决定在用户点击按钮时修改文本框的内容,于是我们输入 mainForm.edit. 当输入圆点以后,快手编辑器自动列出了名字为edit的控件对象所有可用的成员属性、以及成员函数。如下图:


  经验是个很好的东西,所有的控件用法类似,甚至在不同编程语言里 - 常用的属性名、函数名都是类似的,再加上快手编辑器提供的代码自动提示功能,我们一般能快速的找到需要的属性、或方法。

  有的新手可能会说:“我是真正的小白,什么经验也没有,我还是想知道edit控件到底有哪些可用的属性,最好是中文的说明”,好吧,我告诉你怎么找到这些东西,所有的窗口控件,都是在标准库的 win.ui.ctrl 名字空间下定义的(别问我什么是名字空间,你不需要搞清楚,其实我也不清楚)。在标准库中找到 win.ui.ctrl.edit 然后双击鼠标左键打开库文件, 如下图:


  完成我们所有的代码如下( 鼠标放到代码上,然后你能在代码右上角看到复制源码的工具条 ):


  我们进一步修改上面的程序,我们希望点击按钮控件不仅仅只是显示 “hello world”,而是抓取一个网页的html源码,并显示在文本框中。

  我们希望在标准库中有一个名字空间叫 myTools 包含了我们需要的函数,而我们希望 myTools 名字空间下有一个 myTools.getHtml() 函数用来抓取网页的HTML源码。

  但是很遗憾,标准库里没有这些东西,当然,我们可以在工程的用户库里添加自定义的库。下面我们在工程用鼠标右键中点击【用户库】,弹出下图的菜单:


  在弹出的【用户库】菜单中点击【新建库】,弹出【新建】对话框如下图:


  直接输入新用户库的名字"myTools",点后点击【打开】按钮,一切很顺利,在【工程管理器】的【用户库】目录下多了库文件 myTools,并且在编辑器中自动打开了这个库,如下图:


  用户库中添加了默认代码


  namespace 定义一个新的名字空间,我们可以在名字空间中添加需要的函数 getHtml,修改用户库代码如下;


  return 语句指定函数的返回值。继续修改上面的代码,将 return "返回值"; 改为返回网页源码。

  因为我们需要抓取网页,需要用到标准库中的 inet.http 对象,我们使用 import inet.http; 导入这个库备用,修改代码如下:


  点击快手【快捷工具栏】的【保存】按钮保存库文件。


  切换到 main.aau ,修改按钮回调函数为如下代码:


  我们发现一点小小的不足,myTools.getHtml()只是固定的抓取指定网址,这非常的不方便,我们再回到 myTools 用户库,将网址修改为可变的函数参数,修改后的 myTools库源码如下( 修改部份为粗体字 ):


  函数多了一个网址参数,在调用时需要由调用者在参数中传入要抓取的网址,在 myTools用户库最后面,添加一小段智能提示配置代码,如下:


  点击【保存】按钮保存库文件,然后在【工程管理器】中右键点击用户库,在弹出菜单中点击【刷新目录、智能提示】


  我们回到 main.aau 文件,修改 mainForm.button.oncommand 事件回调函数如下:


  我们还遇到一个问题,如果网速比较慢的话,抓取的时间会很长,在单线程的窗口程序中,如果线程被耗时的操作所阻塞,也就不能正常的处理用户消息,导致用户点击界面没有反应。

  这时候就需要用到多线程了,使用 thread.create() 可以创建线程,我们还要用 thread.waitOne() 函数等待线程执行完成。

  在窗口程序中,可以使用更简单的 win.invoke() 函数创建工作线程。

  win.invoke() 会创建一个工作线程执行代码,并且等待线程结束,然后获取返回值。

  我们修改 main.aau 中 mainForm.button.oncommand 函数代码如下:


  看完上面的教程相信大家心中已经有一些操作方向了。

时间: 2024-08-31 11:10:35

AAuto用户库标准库使用指南的相关文章

C++著名类库和C++标准库介绍

C++著名类库 1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库Boost 3.C++各大有名库的介绍--GUI 4.C++各大有名库的介绍--网络通信 5.C++各大有名库的介绍--XML 6.C++各大有名库的介绍--科学计算 7.C++各大有名库的介绍--游戏开发 8.C++各大有名库的介绍--线程 9.C++各大有名库的介绍--序列化 10.C++各大有名库的介绍--字符串 11.C++各大有名库的介绍--综合 12.C++各大有名库的介绍--其他库 1

C++的iostream标准库介绍

我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用. iostream为内置类型类型对象提供了输入输出支持,同时也支持文件的输入输出,类的设计者可以通过对iostream库的扩展,来支持自定义类型的输入输出操作. 为什么说要扩展才能提供支持呢?我们来一个示例. #include <stdio.h

C标准库参考指南(1)assert.h

1.1 assert.h 断言头文件用于调试. 宏: assert(); 外部引用: NDEBUG 1.1. assert 声明: void assert(intexpression); 断言头文件中的宏允许你将一些特殊信息写入到标准错误文件. 如果表达式的值为0(false),那么表达式.源文件名和行号都会被发送给标准错误输出,并调用abort函数.如果标识符NDEBUG ("no debug")由#define NDEBUG定义,那么断言头文件中的宏就什么都不做. 标准错误输出的格

C++ POCO库中文编程参考指南(1) 总览

1 What is POCO? POCO 是什么?这是我最常被人问到的.POCO 是 POrtable COmponents 的缩写,官方主页:POCOProject.org.是一个非常出色的 C++ 库,相当于 Java 的 Class Library..NET 的 Framework 和 Apple 的 Cocoa.它与 Boost 是非常不同的,简单说 Boost 就是相当于 Advanced STL. 2 本系列文章所使用的 POCO 版本 POCO C++ Library 1.4.3p

linux系统编程基础(四) C标准库IO缓冲区和内核缓冲区的区别

1.C标准库的I/O缓冲区 UNIX的传统 是Everything is a file,键盘.显示器.串口.磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开.读.写和关闭,使用的函数接口是相同的.用户程序调用C标准I/O库函数读写普通文件或设备,而这些库函数要通过系统调用把读写请求传给内核 ,最终由内核驱动磁盘或设备完成I/O操作.C标准库为每个打开的文件分配一个I/O缓冲区以加速读写操作,通过文件的FILE 结构体可以找到这

我自己关于C语言,编译器,标准库,GUN glibc,CRT ,API之类的理解。

先声明,只是我自己看了一些东东的想法. 因为以前这一套东东太缠绕人了. C语言,是一种语言标准,和它对照的是C++,JAVA,BASIC,FORTRAN,PASCAL等等概念.它定义的是自己一套适用于计算机的标准规范.如关键字,数据类型,表达式,语句结构等等,它不包含强制具体的实现,没有强制INT数据类型的长度一定是4等.这种具体而微的定义,一般是各编译器厂商实现的.所以,那本经典的二人合著本的C教材第二版,其实很薄.真正C语言标准的内容,不多. 编译器和标准库,其实是不同的厂商依据C语言标准的

Python标准库——走马观花

原文:Python标准库--走马观花 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python的一大好处在于它有一套很有用的标准库(standard library).标准库是随着Python一起安装在你的电脑中的,是Python的一部分 (当然也有特殊情况.有些场合会因为系统安全性的要求,不使用全部的标准库,比如说Google App Engine).   利用已有的类(class)和函数(function)进行开发

Python标准库10 多进程初步 (multiprocessing包)

原文:Python标准库10 多进程初步 (multiprocessing包) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   我们已经见过了使用subprocess包来创建子进程,但这个包有两个很大的局限性:1) 我们总是让subprocess运行外部的程序,而不是运行一个Python脚本内部编写的函数.2) 进程间只通过管道进行文本交流.以上限制了我们将subprocess包应用到更广泛的多进程任务.(这样的比较实际是

《Spark 官方文档》机器学习库(MLlib)指南

机器学习库(MLlib)指南 MLlib是Spark的机器学习(ML)库.旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib由一些通用的学习算法和工具组成,包括分类.回归.聚类.协同过滤.降维等,同时还包括底层的优化原语和高层的管道API. MLllib目前分为两个代码包: spark.mllib 包含基于RDD的原始算法API. spark.ml 则提供了基于DataFrames 高层次的API,可以用来构建机器学习管道. 我们推荐您使用spark.ml,因为基于DataFram