文字を、画像や画面に描くための、描画命令文。
構文:
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
アルファの値。0〜255の範囲。
このパラメタは、
ADD か
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 を渡しても無視されます。テキストは、透明な背景で、供給された色を使って描画されます。
Draw String 座標は、
Window および
View (Graphics) 命令文で設定されたカスタム座標系の影響を受けます。
描画されたテキストは、
View (Graphics) で設定された、切り取り四角形を尊重します。
カスタム・フォント形式:
フォントは、標準の
Get (描画)/
Put バッファに格納されます。;
フォントは、現在の色の濃さと同じ濃さを使って、バッファに格納しなければなりません。さもないと、
Draw String は、不法な関数呼び出しランタイム・エラーになります。
フォント・バッファの画素の最初の行は、フォントのヘッダーをバイト単位(画素(pixel)単位ではない)で、持っています。
一番最初のバイトは、フォント・ヘッダーのバージョンを特定します。
現在、これは 0 になっています。
2番目のバイトは、そのフォントで、最初の該当文字の ASCII コードを示します。
3番目のバイトは、サポートされている最後の該当文字の ASCIIコードを示します。
それで、フォントの範囲が最大限 0〜255 の場合は、0 と 255 が、これらの2バイトの内容になります。
次に、バイト単位で、該当文字列の各文字の幅がそれぞれ来ます。
フォントが、32〜127 の範囲で 96の文字を保持している場合は、ヘッダーの最初の3バイトは、0, 32 と 127 を保持して、その後、対応する文字の幅を与える 96バイトが続きます。
フォントの高さは、バッファの高さから1を引いて取得します。つまり、最初のバッファ行のピクセルがフォント・ヘッダーとして機能し、残りの行はグリフ(象徴)のレイアウトを定義します。
サポートされたすべての文字スプライトを、同じ行に次々と保持するために、バッファは必要なだけ広くしなければなりません。
例:
ここでは、基本的な Draw String の使用例を、示します:
画面の中央に "Hello world" を表示します。:

注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
Const w =
320, h =
200 '' screen dimensions
Dim x
As Integer, y
As Integer, s
As String
'' 描画ウィンドウを開けます
ScreenRes w, h
'' 画面の中央に文字列を描きます:
s =
"Hello world"
x =
(w -
Len(s
) *
8) \
2
y =
(h -
1 *
8) \
2
Draw String (x, y
), s
'' プログラムの終了前に、キー操作を待ちます
Sleep
描画画面に日本語を表示する
1.
FBTrueType を使う(渡辺推奨)
2.X-Font を使う
カスタム字体を作成して、使う
下の例は、カスタム字体を作成して、使う方法を示します。
簡単のために、画像を作成するデフォルト字体として、 Draw String を使用します。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' 文字を表示する範囲を定義します
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 '' FBの旧バージョンには、ImageInfoの機能が、ありません。
p = myFont +
IIf
(myFont
[0] =
7,
32,
4)
#else
ImageInfo
( myFont, , , , , p
)
#endif
p
[0] =
0
p
[1] = FIRSTCHAR
p
[2] = LASTCHAR
'' 字体とアップデート幅情報に、各文字を PUT します
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),
"Hello world!", , myFont
'' 字体をメモリから解放します。ここで、それを実行します
ImageDestroy myFont
Sleep
QBとの違い:
参照: