【发布时间】:2017-02-16 21:13:08
【问题描述】:
我在 Informix 4GL 中生成了一个打印到屏幕的报告。 我需要以反向格式显示一列。 我尝试了以下方法:
print line_image attribute(reverse)
但这不起作用。这可能吗?
【问题讨论】:
我在 Informix 4GL 中生成了一个打印到屏幕的报告。 我需要以反向格式显示一列。 我尝试了以下方法:
print line_image attribute(reverse)
但这不起作用。这可能吗?
【问题讨论】:
在上一个答案的基础上,您可以尝试以下方法
print "\033[7mHello \033[0mWorld"
\033[7m 表示反向打印。并且,\033[0m 意味着回到标准。
【讨论】:
如果您的意思是“有没有办法做到这一点”,答案是“是的”。如果您的意思是“是否有一种很好的简单内置方法可以做到这一点”,答案是“否”。
你需要做的是:
brv(开始反向视频;如果您不喜欢我的名字,请选择您自己的名字)。erv(结束反向视频)中。安排您的打印使用:
PRINT COLUMN 1, first_lot_of_data,
COLUMN 37, brv, reverse_data,
COLUMN 52, erv,
COLUMN 56, next_lot_of_data
切换可能需要 3 或 4 个字符。这些字符将按报告中的列计数代码进行计数。
不同的终端类型会有不同的顺序。这些天来,您可能没有处理 80 年代中期盛行的大量实际绿屏终端,因此您可以将您的发现硬连接到 brv 和 erv 字符串。 OTOH,您可能需要做一些花哨的步法才能在运行时为不同的终端找到正确的序列。如果您需要这方面的更多信息,请大声喊叫。
一种可能让您发现相关序列的简单方法是运行一个程序,例如(这在 I4GL 编译器附近还没有——其中可能存在语法错误):
MAIN
DISPLAY "HI" AT 1,1
DISPLAY "REVERSE" AT 1,4 ATTRIBUTE(REVERSE)
DISPLAY "LO" AT 1, 12
SLEEP 2
END MAIN
将其编译成terminfo.4ge 并运行:
./terminfo.4ge # So you know what the screen looks like
./terminfo.4ge > out.file
有可能不会使用显示属性。您会看到,如果您运行cat out.file 并且没有看到反向闪现,那么我们必须更加努力。
您还可以查看termcap 文件或terminfo 条目中的终端条目。使用infocmp $TERM(在环境变量中设置正确的终端类型)并寻找smso(进入杰出模式)和rmso(退出杰出模式)功能。破译这些(我有rmso=\E[27m 和smso=\E[7m 用于xterm-256color 终端;\E 是ASCII ESC 或\033)并在brv 和erv 字符串中使用它们。请注意,rmso 的长度为 5 个字符。
【讨论】: