FreeBASIC マニュアルのトップに戻る

FreeBASIC DrawString

目次→描画ライブラリ参考→2次元 描画関数DRAW STRING←オリジナル・サイト

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
文字列を描くスプライト(sprite)
buffer を指定しないときは、文字列は、画面に描かれます。

 参考:スプライトでキャラクタを操作しよう
http://allabout.co.jp/gm/gc/80719/

STEP
相対的な座標を使用します。
STEP が加えられると、xとy座標は、最後に描かれた点からの、相対位置として翻訳されます。

x, y
描くための、画面の左上の端から測った、水平/垂直の位置。( STEP を使わない場合)
文字の左上の隅は、この位置に描かれます

text
描くテキストを含む、文字列

color
字体を全く供給しないなら、これで、テキストの色を選ぶことができます。
省略すると、デフォルトの前景 Color が、使われます。
字体を供給すると、color は、無視されます。そして、字体自体が、各画素に、色を指定します。

font
カスタム字体を含む、イメージバッファ。
字体を全く供給しないなら、現在のテキストの標準の字体が使用されます。そして、以下のパラメタは無視されます。

method Custom
字体キャラクタが、目標の表面の上にどう描かれるかを指定します。
Put 命令文と同じ方法が、許容されています。唯一の違いは、この関数では、Trans が、デフォルトの方法になっていることです。
このパラメタは、カスタム字体だけに適用されます。

alpha
アルファの値。0〜255の範囲。
このパラメタは、 ADDALPHA 方法にだけ、適用されます。

blender
CUSTOM 描画法のための、カスタム混合関数。
詳細は、Put (描画) 命令文の記述を見てください。
このパラメタはCUSTOM 方法だけに適用されます。

parameter
カスタム混合関数に渡される、任意の POINTER;
省略時の、デフォルト値は、 (0) です。

説明:
 この描画キーワードは、文字列を、画素位置決めして、透明な背景を使って、画面に描きます。ユーザが供給する字体を使用できます。
 Draw String は、文字列や、描画カーソルを、更新しません。
 また、行末で ワードラップ しません。(注:ワードラップは、行の桁数を超える単語を次の行に送ること。)
 Draw String では、タブ、改行、その他の特殊文字は、どんな特別な振舞いもしません。普通の文字として扱われます。


 描画モードで、この関数は、Print に対応する、柔軟な代替手段を提供します。
 これは、いくつかの重要な利点があります:

- Draw String は、画面の上のどんな座標にもテキストを表示できます。ただし、Print は、Locate によってアクセスしやすいように、文字格子の位置に制限されます。
- Print は、現在の背景色で、テキストの背面で、背景を無効にします。
 Draw String は、これをしません:
 背景の画素を、何もしない状態で放置します。
- Put に似て、Draw String には、 ALPHACUSTOM などの、テキスト表示のためのいくつかの異なった方法があります。
- Draw String は、ただ一つの文字の組に、制限されません:
 代替使用するカスタム字体を供給することができます。


注意:
 カスタム字体が供給されないと、Draw String は、標準の字体をデフォルトとします。Print で使用されるように。そして、文字サイズは、Width で指定します。
 method をパスすると、無視されます。テキストは、透明な背景で、供給された色を使って作成されます。。

カスタム字体形式:
 字体は、標準の Get (描画)/Put バッファに格納されます。;
 字体は、現在の色の濃さと同じ濃さを使って、バッファに格納しなければなりません。さもないと、Draw String は、不法な関数呼び出しランタイム・エラーになります。

 字体バッファの画素の最初の線は、バイト(画素(pixel)ではない)ベースで、字体のヘッダーを持っています。
 まさしくその最初のバイトは、字体ヘッダーバージョンを特定します。
 現在、これは 0 になっています。
 2番目のバイトは、その字体で、最初の該当文字の ASCII コードを与えます。
 3番目のバイトは、最後の該当文字の ASCIIコードを与えます。
 それで、字体が最大限の範囲 0〜255 の場合は、0255 が、これらの2バイトの内容になります。

 次に、それぞれ、バイト単位で、該当文字列の各文字の幅が来ます。
 字体が、96の文字を保持して、範囲が、32以上〜127以下の場合は、ヘッダーには、0, 32127 の最初の3バイトを保持して、対応する文字の幅を与える 96バイトが、後に続きます。

 字体の高さは、バッファの高さから1を引き算して取得します。すなわち、画素の最初のバッファ行が、字体ヘッダーとして作用している間、残っている行は、グリフ(象徴)のレイアウトを定義します。
 バッファは、同じ列(相次ぐ)にすべてのサポートされたキャラクタ・スプライトを保持するのに必要なだけ、広くなければなりません。

例:
 ここでは、基本的な Draw String の使い方の例を、示します。:
 画面の中央に "Hello world" を表示します。:

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

イメージ

描画画面に日本語を表示する

描画画面に日本語を表示する方法
 この方法は、Solbianca さんのサイトで、教えていただきました。
http://syntaxerror445.blog21.fc2.com/blog-category-2.html

 描画画面に日本語を表示するには、X-Font を使います。
http://xaviorsoft.freebasic.net/fbproduct/
上のサイトで、XFont (Text Render Library) の、Library, Converter, Documentation をダウンロードします。
 下記に、Documentation の日本語版と、補足説明が有ります。
http://syntaxerror445.blog21.fc2.com/

まず、Converterを使って、日本語のフォント辞書を作ります。
コンバートを実行
 左の Selection について、Solbianca さんは、
一般的に英数字、全角英数字、日本語、全角記号を使用するのであれば、
Basic Latin
Latin-1 Supplement
Latin Extended-A
Latin Extended-B
CJK Symbols & Punct.
Hiragana
Katakana
CJK Unified Ideographs
CJK Compat. Ideographs
Half. & Fullwidth Forms
を選択するとよい。
と書いています。

 コンパイルするときに、ソース・コードのファイルと同じフォルダに、下記を合せて登録した上で、コンパイルします。(静的ライブラリを参照下さい。)
1.上のフォント辞書(私の場合は MsGothic.xf)
2.libxfont.a
3.xfont.bi

注意:FbEdit は、これを書いている時点のバージョンでは、UNICODE のファイルを保存すると、不要な文字が入るバグが有ります。
このため、FbEdit を使う場合は、FbEdit でソース・コードを編集した後、全画面コピーして、UNICODE保存できるテキスト・エディタに貼り付けて、ファイル保存します。すると、FbEdit 側に、変更内容が返ってきます。

*******************************************
ファイルは、外部エディタで変更されました!
ファイルを開きなおしますか?
*******************************************
ここで、「はい」を押します。そして「Go」します。
つまり、表示・編集・コンパイルだけに、FbEdit を使うと、うまく行きます。

UNICODE保存できる旧バージョン「fbedit1.0.7.4.zip」を、下でダウンロードできるようにしました。

http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/fbedit1.0.7.4Unicode.zip


'注意: このソースは、ユニコードを扱うことができるエディタで、表示・編集して下さい。
'そうしないと、文字化けします。

#Include Once "xfont.bi"

Dim Shared As xfont.interface font
font.loadfont("MsGothic.xf", 1) 'FontIndex 1 に、登録します
font.fontindex = 1 'フォントを使います


Const w = 320, h = 200 '' 画面の寸法

Dim x As Integer, y As Integer, s As WString * 12

'' 描画ウィンドウを開けます
ScreenRes w, h, 32


'' 画面の中央に文字列を描きます:

s = "こんにちは世界!渡辺真"
x = (w - Len(s) * 8) \ 2
y = (h - 1 * 8) \ 2

font.drawstring ( , s , x, y)

'' プログラムを終わらせる前に、キー操作を待ちます
Sleep
描画画面に日本語を表示した例



カスタム字体を作成して、使う

 下の例は、カスタム字体を作成して、使う方法を示します。
 簡単のために、画像を作成するデフォルト字体として、 Draw String を使用します。

'' 文字を表示する範囲を定義します
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との違い:
参照:
2次元描画関数に戻る

←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2016-01-08 14:22:02
日本語翻訳:WATANABE Makoto、原文著作者:AntoniGual

ホームページのトップに戻る

表示-非営利-継承