国内80后上的编程课应该都学过Logo这门编程语言:

Logo语言是一门专门设计用来进行编程教学的语言,于1967年由Wally Feurzeig, Seymour PapertCynthia 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语言那样在屏幕上作图。


  1. REPORT z.
  2. DATA: go_text_edit TYPE REF TO cl_gui_textedit,
  3. go_cust_container TYPE REF TO cl_gui_custom_container,
  4. ok_code TYPE sy-ucomm.
  5. DATA lt_text(256) TYPE c OCCURS 0.
  6. DATA: BEGIN OF lt_hpgl OCCURS 1,
  7. entry(128),
  8. END OF lt_hpgl.
  9. CALL SCREEN 0101.
  10. MODULE status_0101 OUTPUT.
  11. SET PF-STATUS 'JERRY_CONSOLE'.
  12. SET TITLEBAR 'JERRY_TITLEBAR'.
  13. IF go_cust_container IS INITIAL.
  14. go_cust_container = NEW #( container_name = 'CUSTOM_CONTROL' ).
  15. CREATE OBJECT go_text_edit
  16. EXPORTING
  17. parent = go_cust_container
  18. wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
  19. wordwrap_to_linebreak_mode = cl_gui_textedit=>false.
  20. ENDIF.
  21. ENDMODULE.
  22. MODULE user_command_0101 INPUT.
  23. ok_code = sy-ucomm.
  24. CASE ok_code.
  25. WHEN 'BACK' OR 'QUIT' OR 'EXIT'.
  26. LEAVE TO SCREEN 0.
  27. WHEN 'EXECUTE'.
  28. CLEAR: lt_text, lt_hpgl[].
  29. go_text_edit->get_text_as_r3table( IMPORTING table = lt_text ).
  30. LOOP AT lt_text ASSIGNING FIELD-SYMBOL(<text>).
  31. APPEND INITIAL LINE TO lt_hpgl ASSIGNING FIELD-SYMBOL(<hpgl>).
  32. <hpgl>-entry = <text>.
  33. ENDLOOP.
  34. CALL FUNCTION 'GRAPH_HPGL'
  35. TABLES
  36. data = lt_hpgl.
  37. WHEN OTHERS.
  38. ENDCASE.
  39. 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画图的更多相关文章

  1. 使用ABAP绘制可伸缩矢量图

    Jerry去年的文章 动手使用ABAP Channel开发一些小工具,提升日常工作效率 里曾经介绍过一些用ABAP实现的可供娱乐的小程序,比如用古老的HPGL接口在SAPGUI里绘图: 关于如何用SA ...

  2. Ubuntu 16.10 安装KolourPaint 4画图工具

    KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...

  3. Android开发之画图的实现

    Android开发之画图的实现    四天前上完安卓的第一节课,真的是一脸懵逼,尽管熊哥说和java是差不多的,然而这个包和那个包之间的那些转换都是些什么鬼呀!!!但是四天的学习和操作下来,我觉得安卓 ...

  4. matlab画图函数plot()/set/legend

    简单plot()/legend/XY轴范围axis 除了坐标轴信息外还可以添加其它的信息,如所画曲线的信息等:测试代码如下 x=0:pi/20:2*pi; y1=sin(x); y2=cos(x); ...

  5. 对Raphael画图标的一个jquery简单封装

    公司要做一个项目的demo,要求地图上可以插红旗,所以就用到了Raphael. 因为是个demo,所以地图就用了一张图片,效果如下: 所以为了更好的封装一下这个功能,就写了一个简单的插件:jquery ...

  6. java画图之曲线拖动

    目标:在窗体上按下鼠标按键.然后拖动鼠标,在按下和拖动之间绘制曲线 事件机制 事件源对象:窗体 事件监听方法:addMouseListener(MouseListener l);addMouseMot ...

  7. java画图之初体验

    1.实现画图程序所需的API类 JFrame JButton ActionListener              动作事件接口 ActionEvent                        ...

  8. 【JavaScript】操作Canvas画图

    1.页面添加 Canvas 标签 标签内可以写文字,浏览器不支持Canvas的情况下显示, 2.js获取 Canvas 标签 3.利用js函数画图,[线][图][文字] 源:http://www.li ...

  9. 用Canvas制作简单的画图工具

    今天用Canvas制作了一个画图工具,非常简单,功能也不是很多,主要有背景网格,画线,画圆,画矩形和画圆角矩形,也用到了canvas的一些基本知识,在这里一一列举. 1.线段的绘制: 如何绘制真正的1 ...

随机推荐

  1. 玩转微信2次开发1_交互通信api.php(微擎版)

    在2次开发中,涉及到比较多的也比较繁琐的就是服务器和微信服务器的交互 用户在公众号里操作回复关键词都会让微信服务器和开发者的服务器进行交互 用户一旦关注了某某公众号--微信后台会去查询该公众号是否连接 ...

  2. win10 安装MySQL8.0.11记录。

    参考了博客A:https://blog.csdn.net/m0_37788308/article/details/79965378 博客B:https://blog.csdn.net/fxbin123 ...

  3. linux 登陆失败处理

    1.备份要操作的两个配置文件 cp /etc/pam.d/sshd /etc/pam.d/sshd.bak cp /etc/pam.d/login /etc/pam.d/login.bak 2.检查是 ...

  4. 设计模式学习总结(六)原型模式(Prototype)

    原型模式即通过对象拷贝的方式来实现对同类对象的生成的一种设计模式! 浅复制:对于值类型,则直接复制该值,对于引用类型的字段则是对其引用的复制,如果原引用与现引用只要有一个的值发生变化,则都会造成两者值 ...

  5. ibaits数组形式批量入库

    一.xml层 <!--批量入库--> <insert id="addSecCodeList" parameterClass="java.util.Has ...

  6. (转)DB2 restart database命令的作用总结

    DB2 restart database命令的作用总结 原文:https://blog.csdn.net/qingsong3333/article/details/62049039 信息中心对于RES ...

  7. Ace教你一步一步做Android新闻客户端(一)

    复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...

  8. [Scala] Currying

    Currying是一種函數式編程技巧, 指的是把接受多個參數的函數變換成接受一個單一參數的函數. 以一個簡單的例子在Scala中實現.. def f(a:Int, b:Int)={ a+b } //f ...

  9. Python Fabric ssh 配置解读

    Python Fabric ssh 配置解读 Fabric 2.4简介: Fabric is a high level Python (2.7, 3.4+) library designed to e ...

  10. HTML的注释方式对JSP的JSTL不管用

    <fmt:parseNumber var="y" integerOnly="true" type="number" value=&qu ...