下面的红宝石代码通过Curses
打印两个窗口(重叠)。第一个“边框”窗口以黑色/青色打印,“内容”窗口以蓝色打印在青色上。
内容窗口仅显示打印文本的背景颜色。内容窗口的其余部分仍为黑色。 ruby dox描述了使用color_set
,bkgd
或bkgdset
方法操纵窗口背景的方法。我只能让color_set()
工作,而且只能用于正在打印的文本:
如何使用适当的背景颜色填充内容窗口的重置?我找到了Set a window's background color in Ruby curses的一些代码,但它似乎没有用,而且还很老。我唯一的另一个想法就是用空格填充字符串,用背景字符填充整个窗口,但这看起来很糟糕。
编辑:添加代码
EDIT2:增加了“hacky padding”工作
#!/usr/bin/ruby
require 'curses'
Curses.init_screen
Curses.start_color
Curses.noecho
Curses.cbreak
Curses.refresh # Refresh the screen
xulc = 10
yulc = 10
width = 30
height = 8
# text color for border window
Curses.init_pair(1, Curses::COLOR_BLACK, Curses::COLOR_CYAN)
Curses.attrset(Curses.color_pair(1) | Curses::A_BOLD)
# Text color for content window
Curses.init_pair(2, Curses::COLOR_BLUE, Curses::COLOR_CYAN)
Curses.attrset(Curses.color_pair(2) | Curses::A_NORMAL)
# border window
win1 = Curses::Window.new(height, width, yulc, xulc)
win1.color_set(1)
win1.box("|", "-")
# content window
win2 = Curses::Window.new(height - 2, width - 2, yulc + 1, xulc + 1)
win2.color_set(2)
win2.setpos(0, 0)
# only prints in background color where there is text!
# add hacky padding to fill background then go back and print message
bg_padding = " " * ((width - 2) * (height - 2));
win2.addstr(bg_padding);
win2.setpos(0, 0)
win2.addstr("blah")
# prints without the color_set() attributes
#win2.bkgd ('.'.ord)
# make content visisble
win1.refresh
win2.refresh
# hit a key to exit curses
Curses.getch
Curses.close_screen
答案 0 :(得分:0)
好的,所以我找到this,实际代码在这里:
已经有一段时间了,但也许我的例子仍然有用:
使用
时,对我来说是“钻石”window.bkgd(COLOR_RED)这似乎出现了,因为bkgd方法 获取一个字符并将其打印到窗口的所有空闲区域(请参阅旧的 DOC)。
然而,您可以使用具有所需背景的颜色对 颜色并在写入其他内容之前将其应用于所有屏幕位置。
以下是我解决它的方法:
require 'curses'
init_screen
start_color
init_pair(COLOR_RED, COLOR_WHITE, COLOR_RED)
window = Curses::Window.new(0, 0, 0, 0)
window.attron(color_pair(COLOR_RED)) do
lines.times do |line|
window.setpos(line, 0)
window << ' ' * cols
end
end
还找到this:
# color_set(col)
# Sets the current color of the given window to the foreground/background
# combination described by the Fixnum col.
main_window.color_set(1)
tutorial.html#颜色初始化
答案 1 :(得分:0)
猜猜我会使用hacky padding解决方法。似乎是我到目前为止所发现的全部