使用SAPGUI画图
国内80后上的编程课应该都学过Logo这门编程语言:
Logo语言是一门专门设计用来进行编程教学的语言,于1967年由Wally Feurzeig, Seymour Papert和Cynthia Solomon发明的。
下图是用Logo语言画出来的图案。

Perhaps I practiced it in Pentium 386? I could not remember it clearly.
同样,在SAPGUI里内发现有一个非常古老的ABAP包,最后一次修改已经是22年前的1995年了。这比SAP成都研究院很多新同事的年龄都要大。

这个包提供了一个HPGL接口。Hewlett-Packard Graphics Language,简称为HPGL,是一种打印机控制语言,由Hewlett-Packard设计。
下面是我用ABAP代码写的一个HPGL控制台,可以调用函数GRAPH_HPGL,像小时候使用Logo语言那样在屏幕上作图。
REPORT z.
DATA: go_text_edit TYPE REF TO cl_gui_textedit,
go_cust_container TYPE REF TO cl_gui_custom_container,
ok_code TYPE sy-ucomm.
DATA lt_text(256) TYPE c OCCURS 0.
DATA: BEGIN OF lt_hpgl OCCURS 1,
entry(128),
END OF lt_hpgl.
CALL SCREEN 0101.
MODULE status_0101 OUTPUT.
SET PF-STATUS 'JERRY_CONSOLE'.
SET TITLEBAR 'JERRY_TITLEBAR'.
IF go_cust_container IS INITIAL.
go_cust_container = NEW #( container_name = 'CUSTOM_CONTROL' ).
CREATE OBJECT go_text_edit
EXPORTING
parent = go_cust_container
wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_to_linebreak_mode = cl_gui_textedit=>false.
ENDIF.
ENDMODULE.
MODULE user_command_0101 INPUT.
ok_code = sy-ucomm.
CASE ok_code.
WHEN 'BACK' OR 'QUIT' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'EXECUTE'.
CLEAR: lt_text, lt_hpgl[].
go_text_edit->get_text_as_r3table( IMPORTING table = lt_text ).
LOOP AT lt_text ASSIGNING FIELD-SYMBOL(<text>).
APPEND INITIAL LINE TO lt_hpgl ASSIGNING FIELD-SYMBOL(<hpgl>).
<hpgl>-entry = <text>.
ENDLOOP.
CALL FUNCTION 'GRAPH_HPGL'
TABLES
data = lt_hpgl.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
The PBO and API for screen 101:

The layout of screen 101, 需要手工创建一个名为“CUSTOM_CONTROL”的控件。

The screen status:

执行这个report,点击Load Local file,从本地加载Doraemon.txt文件,内容可以从文末获得。
当然也可以从我的github下载:

执行之后,位于本地安装目录下的gnhpx.exe文件会根据txt里的指令进行图形渲染:
“C:\Program Files (x86)\SAP\FrontEnd\SAPgui\gnhpx.exe”

如果一切正常工作,可以看到一只渲染好的机器猫(哆啦A梦)。
关于HPGL的语法手册,可以在这个网站上查阅:
http://www.isoplotec.co.jp/HPGL/eHPGL.htm
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

使用SAPGUI画图的更多相关文章
- 使用ABAP绘制可伸缩矢量图
Jerry去年的文章 动手使用ABAP Channel开发一些小工具,提升日常工作效率 里曾经介绍过一些用ABAP实现的可供娱乐的小程序,比如用古老的HPGL接口在SAPGUI里绘图: 关于如何用SA ...
- Ubuntu 16.10 安装KolourPaint 4画图工具
KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...
- Android开发之画图的实现
Android开发之画图的实现 四天前上完安卓的第一节课,真的是一脸懵逼,尽管熊哥说和java是差不多的,然而这个包和那个包之间的那些转换都是些什么鬼呀!!!但是四天的学习和操作下来,我觉得安卓 ...
- matlab画图函数plot()/set/legend
简单plot()/legend/XY轴范围axis 除了坐标轴信息外还可以添加其它的信息,如所画曲线的信息等:测试代码如下 x=0:pi/20:2*pi; y1=sin(x); y2=cos(x); ...
- 对Raphael画图标的一个jquery简单封装
公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery ...
- java画图之曲线拖动
目标:在窗体上按下鼠标按键.然后拖动鼠标,在按下和拖动之间绘制曲线 事件机制 事件源对象:窗体 事件监听方法:addMouseListener(MouseListener l);addMouseMot ...
- java画图之初体验
1.实现画图程序所需的API类 JFrame JButton ActionListener 动作事件接口 ActionEvent ...
- 【JavaScript】操作Canvas画图
1.页面添加 Canvas 标签 标签内可以写文字,浏览器不支持Canvas的情况下显示, 2.js获取 Canvas 标签 3.利用js函数画图,[线][图][文字] 源:http://www.li ...
- 用Canvas制作简单的画图工具
今天用Canvas制作了一个画图工具,非常简单,功能也不是很多,主要有背景网格,画线,画圆,画矩形和画圆角矩形,也用到了canvas的一些基本知识,在这里一一列举. 1.线段的绘制: 如何绘制真正的1 ...
随机推荐
- 【总结】sqlmap命令
post -u url --forms --skip(指定跳过参数) "" --technique BEUST(自选) --dbms mysql --batch --threads ...
- python之拷贝(深浅)
深浅拷贝 深浅拷贝分为两部分,一部分是数字和字符串另一部分是列表.元组.字典等其他数据类型. 数字和字符串 对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为他们的值永远都会指向同一个内存地址. ...
- IDEA查看第三方jar包的源代码时出现Decompiled.class file, bytecode version:52.0 (Java 8)的解决方案
IDEA中使用Ctrl+左键查看第三方jar包的源代码时,出现Decompiled.class file, bytecode version:52.0 (Java 8),说明IDEA没找到该类的.ja ...
- oracle sql命令
set time on; 设置时间 alter table flashback_test enable row movement; 开启行移 select * from flashback_test ...
- CentOS 7安装zabbix3.0
CentOS 7安装zabbix3.0 一.环境介绍 # systemctl stop firewalld # setenforce 0 # yum -y install unzip vim ne ...
- Python 断言的使用方法
自动化测试常用断言的使用方法(python) 自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 这 ...
- 分享:JAVA和C# 3DES加密解密
最近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题,下面分享一下,这里的KEY采用Base64编码,便用分发,因为Java的Byt ...
- java中的输入输出方法
输入 import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 ...
- H5禁止页面滑动/滚动
禁止页面滚动--完美解决方案,滚动条显示与否,手持设备兼容与否 禁止页面滚动 有三种方法 1,依靠css 将页面 document.documentElement.style.overflow='hi ...
- HDU 5289——Assignment——————【RMQ+优化求解】
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...