用于将文本呈现到图像或屏幕的图形语句。
语法
Draw String [buffer ,] [STEP] (x , y ), text [,color [, font [, method [, (alpha |blender ) [, parameter ] ] ] ] ]
用法
Draw String [buffer ,] [STEP] (x , y ), text [, color ]
Draw String [buffer ,] [STEP] (x , y ), text , , font [, method [, alpha ] ]
Draw String [buffer ,] [STEP] (x , y ), text , , font , Custom, blender [, parameter ]
参数
buffer
文本要画出到的子画面。如果没有提供,它将被绘制到屏幕。
STEP
使用相对坐标。如果添加STEP,则x和y坐标相对于最后一个绘制点进行翻译。
x ,
y
相对于屏幕左上角的水平/垂直位置(除非STEP被使用 - 见上文)。文本的左上角将在此位置绘制。
text
该字符串包含要绘制的文本
color
如果没有提供字体,则可以选择文本的颜色。如果省略,则使用默认的前台
Color.
如果提供了字体,
color 将被忽略,字体本身会指定每个像素的颜色。
font
包含自定义字体的图像缓冲区。如果没有提供字体,则使用当前文本分辨率的标准字体,并忽略以下参数。
method |
Custom
指定字体字符在目标曲面顶部的绘制方式。与
Put语句相同的方法是允许的,唯一的区别是该函数的默认方法是
Trans.此参数仅适用于自定义字体。
alpha
blender
parameter
可选
Pointer传递给自定义搅拌机功能;如果省略,默认值为零(
0)。
说明
此图形关键字将字符串打印到具有像素定位,透明背景的屏幕上,并且可以使用用户提供的字体。
Draw String不更新任何文本或图形光标。它不包括在行尾。标签,回车符和其他特殊字符在
Draw String中没有特殊的行为,被视为普通字符。
在图形模式下,此函数为
Print提供了灵活的替代方案。它有几个关键优点:
-
Draw String可以将文本打印到屏幕上的任何坐标,而
Print被限制为
Locate可访问的字符网格。
-
Print将使用当前背景颜色覆盖文本后面的背景。
Draw String不这样做:它使背景中的像素保持不变。
- 像
Put,
Draw String有几种不同的打印文本的方法,例如
Alpha和
Custom.
-
Draw String不限于单个字符集:可以提供要使用的自定义字体。
注意:如果未提供自定义字体,
Draw String将默认为
Print使用的标准字体,字符大小由
Width指定。
method - 如果传递 - 将被忽略,文本将使用提供的颜色绘制,并带有透明背景。
自定义字体格式:字体存储在标准的
Get/
Put缓冲区中;必须使用与当前颜色深度相同的深度将字体存储在缓冲区中,否则
Draw String将以非法函数调用运行时错误出现。
字体缓冲区中的第一行像素以字节(
不像素)为单位保存字体的标题。第一个字节标识字体标题版本;目前这个必须是
0.第二个字节给出字体中第一个支持字符的ASCII码;第三个字节给出最后支持的字符的ASCII码。因此,如果该字体支持全范围0-255,则
0和
255将是这两个字节的内容。
接下来是每个支持的字符的宽度,每个字节都是一个字节。假设字体保留96个字符,范围从32到127(含),头部将包含前三个字节,保留
0,
32和
127,后跟96个字节给出相应字符的宽度。
字体高度是通过从缓冲区高度减1得到的,即像素的第一个缓冲行用作字体标题时,剩下的行定义字形布局。缓冲区必须一样宽,以将所有支持的字符精灵一个接一个地保存在同一行中。
例子
这里给出了一个基本的
绘制字符串用法的例子:它使用它在屏幕中央打印
“Hello world”
Const w = 320, h = 200 ''屏幕尺寸
Dim x As Integer, y As Integer, s As String
''打开图形窗口
ScreenRes w, h
''在屏幕中央绘制一个字符串:
s = "你好,世界"
x = (w - Len(s) * 8) \ 2
y = (h - 1 * 8) \ 2
Draw String (x, y), s
''在结束程序之前等待按键
Sleep
此示例显示如何创建和使用自己的自定义字体。为了简单起见,它使用
绘制字符串与默认字体创建字形。
''定义字符范围
Const FIRSTCHAR = 32, LASTCHAR = 127
Const NUMCHARS = (LASTCHAR - FIRSTCHAR) + 1
Dim As UByte Ptr p, myFont
Dim As Integer i
''打开256色图形画面(320 * 200)
ScreenRes 320, 200, 8
''在PUT缓冲区中创建自定义字体
myFont = ImageCreate(NUMCHARS * 8, 9)
''将字体标题放在像素数据的开头
#ifndef ImageInfo '' older versions of FB don't have the ImageInfo feature
p = myFont + IIf(myFont[0] = 7, 32, 4)
#else
ImageInfo( myFont, , , , , p )
#endif
p[0] = 0
p[1] = FIRSTCHAR
p[2] = LASTCHAR
''将每个字符输入字体并更新宽度信息
For i = FIRSTCHAR To LASTCHAR
''这里我们可以定义每个字母的自定义宽度,但为了简单起见,我们使用
''固定宽度为8,因为我们正在重用默认的字体字形
p[3 + i - FIRSTCHAR] = 8
''通过使用默认字体绘制来创建字符到自定义字体缓冲区
Draw String myFont, ((i - FIRSTCHAR) * 8, 1), Chr(i), 32 + (i Mod 24) + 24
Next i
''现在字体缓冲区就绪;我们可以使用BSAVE保存以备将来使用
Rem BSave "myfont.bmp", myFont
''这里我们使用自定义字体绘制一个字符串
Draw String (10, 10), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", , myFont
Draw String (10, 26), "ABCDEFGHIJKLMNOPQRSTUVWXYZ", , myFont
Draw String (66, 58), "你好,世界!", , myFont
''从内存中释放字体,现在我们完成了它
ImageDestroy myFont
Sleep
与QB差别
参考