原典:
http://compasstech.com.au/TNS_Authoring/Scripting/script_tut1.html
レッスン1.2:もう少し面白くしてみる
(略)先ほどのon.paintスクリプトにあと2行足します。
function on.paint(gc)
gc:setFont("sansserif", "b", 12)
gc:setColorRGB(158, 5, 8)
gc:drawString("This is my text", 20, 20)
end
新しいコマンドが登場しました。それぞれの機能を考えてみてください。setFontに3つの指定項目のあることはすぐにわかります。1つ目はフォントの種類(serif、sanserifのいずれか)、2つ目はスタイル(bは太字、rは標準、iはイタリック)。3つ目はサイズです。
setColorRGBを使えば、たくさんの色が簡単に指定できます。RGBはRed、Green、Blueの頭字語です。赤は(255, 0, 0)、緑は(0, 255, 0)、青は(0, 0, 255)です。各色を変化させることで無数の色が作り出せます。いろいろ試してみてください。また、カラー・リスト(Web版)を利用することもできます。カラー・リスト(PDF版)もあります。定評のあるカラー・コンサルタントによれば、赤ワイン色(158, 5, 8)とネイビー(20, 20, 138)との組み合わせが実に効果的です。TI-Nspireの元々の機能では9~15色しか利用できないことを考えれば、すごいことです。
ここまでついてこられたなら、Luaの第一歩としては上出来です。最初のレッスンの仕上げとして、画面中央にテキストを配置する方法を学びます。さらにその過程で、ローカル変数、グローバル変数という大切な要素を紹介します。今回、便利コマンドはすべてLuaが提供してくれます。platform.window:height()やlatform.window:width() などです。このコマンドは、その名前からわかるように、現行ウィンドウに関する値を指定するときに使えるコマンドです。これらのコマンドをwやhなどの変数として定義すれば、いくつかの単純な計算をするだけで、テキストを配置する最適な場所が決定できます。これらの変数は、ローカル変数として定義しますが、函数の外部に記述することにより、スクリプト全体で利用できるようにしています。下の例を見てください。長ったらしいplatform.windowの代わりにscreenという変数名を定義しているのがわかりますか? このほうが合理的だと思います......
Luaコマンドをあと2つ紹介します。getStringWidth、getStringHeightの2つです。この機能も読んで字のごとくです。(略)
local screen=platform.window
local h=screen:height()
local w=screen:width()
function on.paint(gc)
gc:setFont("sansserif", "b", 12)
gc:setColorRGB(158, 5, 8)
local sw=gc:getStringWidth("This is my text")
local sh=gc:getStringHeight("This is my text")
gc:drawString("This is my text", w/2 - sw/2, h/2 + sh/2)
end
wおよびhという単純なローカル変数で幅と高さとを定義します。文字列は、その寸法も取得できます。文字列を左右の中央に配置してみましょう。まずウィンドウ全体の左右の真ん中の位置を求めます(w/2)。次に、文字列の長さの半分の長さだけ左へ戻します(w/2 - sw/2)。縦方向についても同じですが、上下が逆になっていることは忘れないでください。
次は何?
これでレッスン1はすべて終了です。今度はあなたがいろいろ試してみる番です。
テキストを右揃えにしてみましょう。今回のレッスンではテキストを中央揃えにする方法を学びました。それを足がかりに、テキストを左揃え、あるいは右揃えにするにはどうすればよいのかを考えてみましょう。
テキストをページの一番上、または一番下に配置するにはどうすればよいでしょうか?
色についても、ためらわず大胆に試してみてください。
次のレッスンでは、テキストをもっと活き活きと表示する方法、およびページに複数行を整然と並べるテーブルの使い方について学びます。
--------------------------------------------------------------------
(訳註)レッスン1の実行例:
縦方向の中央揃えは、上記の方法よりも、下記のように h/2, "middle" と指定したほうが簡単だと思うのだが......