获取给定位置的字符或颜色属性
语法
用法
result = Screen( row , column [, colorflag ] )
参数
row
基于1的偏移量从控制台的左上角。
column
基于1的偏移量从控制台的左上角。
colorflag
如果等于0,则返回
ASCII代码,否则返回颜色属性。如果省略,则默认为0。
返回值
说明
Screen返回在控制台输出的给定位置处找到的字符或颜色属性。它在控制台模式和图形模式下工作。
颜色属性的格式取决于当前的颜色深度:
如果颜色类型是每像素高达4位(如Win32控制台)的调色板类型,则颜色属性是8位值,其中较高的四位保持单元格背景颜色,低四位保持前景(字符)颜色。
如果颜色类型是8位调色板,则颜色属性是16位值,高字节保存背景颜色,低字节保存前景色。
如果颜色类型为全色,则颜色属性为32位整数,保持单色值。如果
colorflag 等于1,则返回前景色;如果
colorflag 等于2,则返回背景颜色。
标准16调色板的颜色值为:
值 | 颜色 | 值 | 颜色 |
0 | 黑色 | 8 | 灰色 |
1 | 蓝色 | 9 | 亮蓝色 |
2 | 绿色 | 10 | 明亮的绿色 |
3 | 青色 | 11 | 明亮的青色 |
4 | 红 | 12 | 亮红 |
5 | 品红 | 13 | 粉 |
6 | 棕色 | 14 | 黄色 |
7 | 白色 | 15 | 明亮的白色 |
例子
Dim character_ascii_value As Integer
Dim attribute As Integer
Dim background As Integer
Dim cell_color As Integer
Dim row As Integer, col As Integer
character_ascii_value = Screen( row, col )
attribute = Screen( row, col, 1 )
background = attribute Shr 4
cell_color = attribute And &hf
''打开一个4位像素的图形屏幕
''(或者,省略这一行来使用控制台)
ScreenRes 320, 200, 4
''打印一个字符
Color 7, 1
Print "A"
Dim As UInteger char, col, fg, bg
'' get the ASCII value of the character we've刚刚印刷
char = Screen(1, 1, 0)
''获取颜色属性
col = Screen(1, 1, 1)
fg = col And &HF
bg = (col Shr 4) And &HF
Print Using "ASCII值:###(“”!“”)"; char; Chr(char)
Print Using "前景颜色:##"; fg
Print Using "背景颜色: ##"; bg
Sleep
''打开一个8位像素的图形屏幕
ScreenRes 320, 200, 8
''打印一个字符
Color 30, 16
Print "Z"
Dim As UInteger char, col, fg, bg
'' get the ASCII value of the character we've刚刚印刷
char = Screen(1, 1, 0)
''获取颜色属性
col = Screen(1, 1, 1)
fg = col And &HFF
bg = (col Shr 8) And &HFF
Print Using "ASCII值:###(“”!“”)"; char; Chr(char)
Print Using "前景颜色:###"; fg
Print Using "背景颜色: ###"; bg
Sleep
''打开全色图形屏幕
ScreenRes 320, 200, 32
''打印一个字符
Color RGB(255, 255, 0), RGB(0, 0, 255) '黄色在蓝色
Print "M"
Dim As Integer char, fg, bg
'' get the ASCII value of the character we've刚刚印刷
char = Screen(1, 1, 0)
''获取颜色属性
fg = Screen(1, 1, 1)
bg = Screen(1, 1, 2)
Print Using "ASCII值:###(“”!“”)"; char; Chr(char)
Print Using "前景颜色:&"; Hex(fg, 8)
Print Using "背景颜色:&"; Hex(bg, 8)
Sleep
平台差异
- 在Linux版本上,返回的值可能与控制台上显示的字符不同。例如,在打印编辑文本结束之后隐含发生的不可打印的控制代码(例如LF 字符(10 ))可能会被拾取而不是它所在的人物。
与QB差别
参考