Window1.Paint(Events:Paint) にSpriteSurface1で使用する、惑星となる図形を用意します。
Sub Paint(g As Graphics)
dim n as integer
//「nob」は惑星の数
for n=1 to nob
ball(n)=newpicture(10,10,8)
next
//表示する文字の表示領域を考えてサイズを決めます。
//ここでは、縦横のサイズが200*15の表示領域で
//カラー深度は16ビットとしています。0,1,2,4,8,16,32
//が使えます。大きい領域でカラー深度を上げると、
//メモリーを消費します、適当にします。
text01=newpicture(200,15,16)
back01=newpicture(600,450,8)
ball(0)=newpicture(35,35,16)
//
//「sun」はPICT形式の図形です。
//ball(0)を太陽とします。
ball(0)=sun
//白の部分を透明にします
ball(0).transparent=1
//Window1に描いて確認します
graphics.drawpicture ball(0),20,10
//惑星の色付けと確認表示です。
for n=1 to nob
ball(n).graphics.forecolor=rgb(250-n*(250/nob),n*(250/nob),100)
ball(n).graphics.filloval 0,0,ball(n).width,ball(n).height
ball(n).transparent=1
graphics.drawpicture ball(n),0,n*11
next
//文字もpictureとして用意します。
text01.graphics.drawstring "SolarSystem < koko@ask.or.jp >",0,10
text01.transparent=1
//確認用
graphics.drawpicture text01,100,10
//
//背景1
back01.graphics.forecolor=rgb(50,100,100)
back01.graphics.fillrect 0,0,back01.width,back01.height
back01.graphics.forecolor=rgb(50,50,200)
back01.graphics.filloval 0,0,back01.width,back01.height
back01.transparent=1
End Sub
PushButton:Action にSpriteSurface1を開くためのプログラムを書く。
Sub Action()
dim n as integer
//Spriteの初期条件をSpriteのOpenではなく
//ここに書き込む
for n =1 to nob
vx(n)=0
vy(n)=-10
x(n)=300+n*(120 /nob)
y(n)=250
next
//SpriteSurface1に新しいパーツを登録する。
//「NewSprite(ball01,100,200)」の各パラメータは
//(picture型変数名、表示位置X、表示位置Y)
Spritetext01=SpriteSurface1.NewSprite(text01,300,10)
for n=1 to nob
Sprite(n)=SpriteSurface1.NewSprite(ball(n),10,10+10*n)
next
Sprite(0)=SpriteSurface1.NewSprite(ball(0),250,250)
x(0)=250-20
y(0)=250-20
//
spriteSurface1.backdrop=back01
SpriteSurface1.Run
//SpriteSurface1がCloseされると
//ここ「SpriteSurface1.Run」直後に処理が戻って来る。
if SpriteSurface1<>nil then
SpriteSurface1.close
end if
for n =0 to nob
if Sprite(n).image<>nil then
Sprite(n).image=nil
end if
next
End Sub
「SpriteSurface1.close」だけでは、SpriteSurface1に配置した、パーツは残ったままですので、再度「SpriteSurface1.Run」を実行すると、2重に表示されてしまいます。「SpriteSurface1.Run」以下は、これらのパーツを消去するためのものです。
文字の表示は、「SpriteSurface1」という名前の掲示ボードに、文字を描いた「text01」という名前のメモ紙を張り付ける感じで理解できます。
ですから、はじめに、自分が書きたいだけの文字がかける大きさのメモ紙を、用意しておく必要があります。使いたい文字のフォントやサイズで、必要な領域が変わってきますので、試してみて下さい。
「text01=newpicture(200,15,16)」であれば、200*15の横長のメモ紙ですから、一行くらいしか入りません。
「text01=newpicture(150,30,16)」として、
text01.graphics.drawstring "一行目の表示",0,10
text01.graphics.drawstring "二行目の表示",0,25
のようにすれば、何列でもOKです。
もちろん、文字の色や修飾もこのときに指定すれば好みの文字が、表示できます。
結局、ststictextでは、文字を一回の操作で変更、表示できます。
statictext1.text="一行目の表示"
のように、
「SpriteSurface1」での変更は、一旦pictureに書き直したり書き加えたりした後、「SpriteSurface1」の画面に、登録表示することになり、手順が少し複雑になりますが、コンピュータは、すばやいので結果的には、ststictextと同様に使えます。