1 dev系列函数
在HDevelop中我们会看到很多dev开头的函数,这些函数一般都会存在一个不带有dev前缀且名称相同、参数相近的算子,这两种算子的区别在于,前者作用范围仅限于HDevelop在导出为其他语言代码时将被忽略,后者则可以被成功导出为C、C++、CSharp等代码。
2 打开窗口
我们可以通过代码的方式创建窗口,具体函数如下。
或
正如我们之前所说的dev_open_window会创建一个HDevelop的图形窗口,它拥有HDevelop图形窗口的所有功能,但该代码不会被导出。由open_window创建的窗口可以被导出,但关闭操作必须通过调用函数close_window (WindowHandle1)实现。
3 激活窗口
在HDevelop中dev函数只会对激活窗口起作用,因此在调用这些函数之前我们需要通过dev_set_window (WindowHandle)设置窗口为激活状态,然后再调用相应的dev函数进行设置或绘图。对于新建程序后自带的窗口,可以在脚本第一行添加dev_get_window (WindowHandle)语句,获取当前激活的窗口句柄。
4 打开缓存窗口
我们可以使用open_window创建一个缓冲窗口,具体代码如下
open_window (0, 0, 256, 256, 0, ' buffer', '', WindowHandle1)
此窗口不会被显示出来,但是却拥有可见窗口所有的显示存储功能,这其中也包括了窗口截图存储功能,如果你在导出程序中希望在不显示窗口的情况下存储一些处理过程,它将是不错的选择。
5 窗口参数
创建好窗口后我们可以通过相应的函数改变窗口的尺寸和显示范围。
修改窗口尺寸
我们可以使用dev_set_window_extents设置激活窗口的尺寸,具体代码如下:
修改显示区域
默认情况下,当调用绘图函数时,显示的图像会以拉伸的方式填满整个窗口。我们也可以使用dev_set_part函数,将原图的某个特定区域以拉伸的方式填充整个窗口。
具体代码如下:
示例:
三 绘制HObject对象
1 绘制对象到窗口
我们可以使用dev_display (Image)或disp_obj (Image, WindowHandle)刷新任意图形对象(图像、边缘、区域)到图形窗口上。
2 设置绘制属性
通过窗口右键菜单修改的数据绝大部分都可以使用代码实现,详见下表:
四 绘制文字
在HDevelop中我们有3种方式在窗口上绘制文字:
1 write_string
write_string需配合set_tposition或new_line函数可以在窗体任意位置绘图。set_tposition可用于指定文字绘制位置,new_line可以根据字体高度自动计算并设置字符下一行的绘制位置。字体颜色则可通过dev_set_color设置。
示例:循环打印0到5数组元素的内容
2 dev_disp_text
dev_disp_text可以一次性绘制数组中的数据,并可为字符添加文本框,数组各元素之间用换行的形式分割。通过函数参数,我们可以修改字符颜色、位置、文本框属性等。具体参数如下:
输出数组
该参数支持对字符和数据混合类型的tuple数组进行绘制
参考坐标系
‘window’ 绘制坐标基于窗体左上角
‘image’ 绘制坐标基于图像左上角
绘制位置X、Y
该参数用于设置字符绘制的起始位置,除了填写固定数值,我们还可以,填写’left’,’top’,’center’等参数,实现文本框停靠效果。
示例:
HDevelop脚本代码:
dev_clear_window () dev_get_window (WinID) tup:=['center','150'] dev_disp_text ('(top, left)', 'window', 'top', 'left', 'black', [], []) dev_disp_text ('(top, center)', 'window', 'top', 'center', 'black', [], []) dev_disp_text ('(top, right)', 'window', 'top', 'right', 'black', [], []) dev_disp_text ('(center, left)', 'window', 'center', 'left', 'black', [], []) dev_disp_text ('(center, center)', 'window', 'center', 'center', 'black', [], []) dev_disp_text ('(center, right)', 'window', 'center', 'right', 'black', [], []) dev_disp_text ('(bottom, left)', 'window', 'bottom', 'left', 'black', [], []) dev_disp_text ('(bottom, center)', 'window', 'bottom', 'center', 'black', [], []) dev_disp_text ('(bottom, right)', 'window', 'bottom', 'right', 'black', [], []) dev_disp_text ('(100, 200)', 'window', 50, 200, '#df00df', [], []) dev_disp_text (tup, 'window', 'center', 150, '#df00df', [], []) dev_set_window_extents (-1, -1, 600, 220) stop() dev_set_window_extents (-1, -1, 700, 300)
不同尺寸窗体显示效果:
窗体尺寸600x220
窗体尺寸700x300
字符颜色
Halcon为我们提供了一些预设字符颜色,大家可以通过字符串设置,此外我们还可以使用数值的方式设置颜色,设置格式为#RGB[A],所有数据的范围均为0-255,最后一项A为透明度,可以不写,默认为ff不透明。例如红色为’#ff0000’或’#ff0000ff’。
下图是Halcon为我们提供的颜色对照表。
Halcon颜色对照表
绘制属性、值
属性和值用于设置文本框的相关参数。两个参数均为数组,在两个数组中,待设置的属性名称和属性值需要一一对应。如果我们希望文本框背景色为绿色且阴影为蓝色,则需通过如下代码实现(以下函数中‘\’用于实现代码换行)。
示例代码:
dev_disp_text ('(test)', 'window', 12, 12, 'black'\ , ['box_color','shadow_color'], ['green','blue'])
显示效果:
具体参数设置效果详见下表:
文本框属性及设置效果
3 disp_message
该函数是对disp_text的封装,简化了阴影以及边框圆角的设置。
此函数最后一个参数可用于设置文本框的有无以及颜色,具体格式如下。
示例:
HDevelop代码:
dev_open_window (0, 0, 512, 512, 'white', WindowHandle) Col:=12 Row:=12 Dy:=50 Text:='测试' *输入单元素表示是否显示边框默认为’true’ disp_message (WindowHandle, Text, 'window', Row, Col, 'black', []) Row:=Row+40 disp_message (WindowHandle, Text, 'window', Row, Col, 'black', 'false') Row:=Row+40 *输入多元素时,元素0表示文本框背景设置,元素1表示阴影设置 disp_message (WindowHandle, Text, 'window', Row, Col, 'black', ['true','false']) Row:=Row+40 *可通过数组直接设置文本框背景色以及阴影颜色 disp_message (WindowHandle, Text, 'window', Row, Col, 'black', ['green','#ff11ff'])
执行结果:
4 字体设置
获取当前窗口字体
通过get_font (WindowHandle, Font1)函数,我们可获取窗口当前字体脚本Font1。
设置字体
使用函数set_font (WindowHandle, '宋体-20')可设置窗口字体。在Halcon中字体脚本的格式为:字体[-字体风格]-字号。其中“字体风格”包括Normal(默认)、Bold(加粗)、Italic(倾斜)以及BoldItalic(倾斜加粗),在脚本中该项可以省略。
示例:
获取可用字体
不同的系统搭载的字体有所不同,通过query_font (WindowHandle, Font)函数,我们可以获得当前系统可用字体数组Font。
五 窗口截图
1 使用菜单截图
图形窗口右键菜单的最后一项可帮助我们保存当前窗口中的图像,保存图像的分辨率与窗口大小一致。
2 使用函数截图
Halcon为我们提供了两个截图函数dump_window_image和dump_window。两者都可对窗体进行截图,不同的是,前者截图后转换为HObject图像,后者则直接保存为本地图像文件。
示例:
dev_get_window (WindowHandle) read_image (Image, 'printer_chip/printer_chip_01') binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold) connection (Region, ConnectedRegions) dump_window_image (Image1,WindowHandle) dump_window (WindowHandle, 'bmp', 'halcon_dump')

