使用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 ...
随机推荐
- js 方法总结
1. 格式化时间 function format(str,fmt) { var usedDate = new Date(usedDay); var o = { "M+": used ...
- java判断jsonObject和jsonArray是否为空
resJsonObj = {"res":"0","msg":"","data":{"Nam ...
- Caused by java.lang.IllegalStateException Not allowed to start service Intent { cmp=com.x.x.x/.x.x.xService }: app is in background uid UidRecord(一)
Caused by java.lang.IllegalStateException Not allowed to start service Intent { cmp=com.x.x.x/.x.x.x ...
- 枚举类型与字符串ConvertEnumToString
枚举类型与字符串添加字典互转ConvertEnumToString using UnityEngine; using System.Collections; using UnityEngine.UI; ...
- 使用 Ninject
在[ASP.NET MVC 小牛之路]系列上一篇文章(依赖注入(DI)和Ninject)的末尾提到了在ASP.NET MVC中使用Ninject要做的两件事情,续这篇文章之后,本文将用一个实际的示例来 ...
- css3之transition、transform、animation比较
css3动画多少都有些了解,但是对于transition.transform.animation这几个属性一直是比较模糊的,所以啊,这里做一个总结,也希望大家都可以对此有一个更好地理解. 其实, ...
- jenkins~管道Pipeline里使用公用类库
Pipeline使用了groovy语法,同时可以使用所有jenkins插件在groovy里进行调用,可以说通过UI可以实现的功能使用pipeline也可以实现,这一点我在上一篇文章里已经说明,今天主要 ...
- 【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览
功能简介:利用利用selenium和Chrome浏览器,让其自动打开百度页面,并设置为每页显示50条,接着在百度的搜索框中输入selenium,进行查询.然后再打开的页面中选中“Selenium - ...
- [Matlab] fprintf
%s format as a string%d format with no fractional part (integer format)%f format as a oating-point v ...
- nyoj1087——摆格子——————【规律题】
摆方格 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的 ...