Draw String
 
用于将文本呈现到图像或屏幕的图形语句。

语法

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
alpha值,范围0-255。此参数仅适用于Add??或Alpha方法。
blender
自定义搅拌机功能为Custom绘图方法;有关详细信息,请参阅Put (图形)语句说明。此参数仅适用于Custom方法。
parameter
可选Pointer传递给自定义搅拌机功能;如果省略,默认值为零(0)。

说明

此图形关键字将字符串打印到具有像素定位,透明背景的屏幕上,并且可以使用用户提供的字体。Draw String不更新任何文本或图形光标。它不包括在行尾。标签,回车符和其他特殊字符在Draw String中没有特殊的行为,被视为普通字符。

在图形模式下,此函数为Print提供了灵活的替代方案。它有几个关键优点:
- Draw String可以将文本打印到屏幕上的任何坐标,而Print被限制为Locate可访问的字符网格。
- Print将使用当前背景颜色覆盖文本后面的背景。Draw String不这样做:它使背景中的像素保持不变。
- 像PutDraw String有几种不同的打印文本的方法,例如AlphaCustom.
- Draw String不限于单个字符集:可以提供要使用的自定义字体。

注意:如果未提供自定义字体,Draw String将默认为Print使用的标准字体,字符大小由Width指定。method - 如果传递 - 将被忽略,文本将使用提供的颜色绘制,并带有透明背景。

自定义字体格式:
字体存储在标准的Get/ Put缓冲区中;必须使用与当前颜色深度相同的深度将字体存储在缓冲区中,否则Draw String将以非法函数调用运行时错误出现。

字体缓冲区中的第一行像素以字节(像素)为单位保存字体的标题。第一个字节标识字体标题版本;目前这个必须是0.第二个字节给出字体中第一个支持字符的ASCII码;第三个字节给出最后支持的字符的ASCII码。因此,如果该字体支持全范围0-255,则0255将是这两个字节的内容。
接下来是每个支持的字符的宽度,每个字节都是一个字节。假设字体保留96个字符,范围从32到127(含),头部将包含前三个字节,保留032127,后跟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差别

  • 新的FreeBASIC

参考