トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

HSP

一部、HSP2.61に基づいてかかれたものをHSP3用に修正中なので注意

HSP


 画像の一部分のコピー(画像を「部品」として使う)

  • gmode によってコピーするモードを選ぶ
  • gcopy によって、どのウィンドウIDの画像のどの部分をコピーするか指定

gmode 0

gcopy ウィンドウID, コピー元座標x, y, x軸で何ドット分か、y軸で何ドット分か

PictureFeedback参照

 文字列と数値の連結

    「文字列型」に「数値型」を足し算した場合には、「数値」を文字列にして連結される。
    「数値型」に「文字列型」を足し算した場合には、「文字列」を数値にして加算される。

つまり、計算式で最初の項になっている型に自動的に合わせてくれるということです。

http://www.onionsoft.net/hsp/v34/doclib/hsp3str.htm

 音声を録音する

mci "set sam channels 2"
mci "set sam samplepersec 44100"
mci "set sam bitspersample 16"
mci "open new alias sam type waveaudio"

mci "record sam"				; 録音の開始
mci "stop sam"					; 録音停止
mci "save sam \"sample.wav\""			; 音声ファイル保存
mci "close sam"					; 録音終了(デバイスを閉じる)

 実行ファイル作成時にファイル名を特定しておく

#packopt name "postoffice01"


 文字を順番に表示する

text ミリ秒
mes "文字列"

text で設定したミリ秒ずつwaitがかかってmesで指定した文字列が順に表示されていく。

HSP3では、#include "hsp3util.as" して、mes ではなく emes を使うことになったので注意。


 データを保存する

notesel 変数名 ; データを保存する特別な変数を設定
noteadd "データ" ; データを追加
notesave "ファイル名" ; データを「ファイル名」で保存する

 オブジェクト




 ボタンの大きさを変える objsize 横, 縦

objsize 200, 20
button "ちょっと長い名前", *nextstep

 配列 (配列変数)

複数の変数を順に並べて番号を付けたもの。
番号で変数を指定できるので、順番に処理するのに便利。

変数と同様に、配列に名前をつける。(kamoku)
名前のうしろに括弧で番号をつける。
番号は 0 から始まる。

kamoku(0)

値は変数と同様に = で代入する。(「配列変数kamokuの要素0に39を代入する」という)

kamoku(0) = 39
kamoku(1) = 29
kamoku(2) = 32

配列の数を調べる length(配列名)

kamokusuu = length(kamoku)

HSP2.61でのこと

配列の後ろに、番号を付ける。(kamoku.0)
15個以上使うときは、最初にdimで使う数を設定する。
dim kamoku,20

文字を扱うときは、sdim で設定する。
sdim 配列名,文字数,要素数

ひとつの科目名の文字数は20文字以下で、科目は10科目あるとすると、
sdim kamoku,20,10



 テキストを読み込む

notesel 変数名
noteload "ファイル名"
mes 変数名

変数名は何でも良い。bun とか、、、
一行が長い場合、自動的に改行はしてくれないので注意。

 画像を読み込む

picload "ファイル名"

ウインドウサイズは、読みこんだ画像の大きさになる。

事前にウインドウを表示して、その中に画像を位置づけるには、

pos 100, 200
picload "ファイル名", 1



 getkey と stick の違い

getkeyは連続してキーの値を受け付ける。
stickはキーを押したときに一度だけ値を受け取る。

repeat
;	getkey a, 32    ; 特定のキーを先に想定
;	if a&1 : break  ; a には、そのキーが押されたという意味の「1」が入っている。

	stick a, 0      ; 何が押されるかはわからない
	if a&16 : break ; a には押されたキーのコードが入っている。

loop

mes "Hit"

stop

 キーボードやマウスボタンのコード (stick)

「ヘルプ」の「HSP命令リファレンスを開く」でstickの項目を見る。

       1 : カーソルキー左(←)
       2 : カーソルキー上(↑)
       4 : カーソルキー右(→)
       8 : カーソルキー下(↓)
      16 : スペースキー
      32 : Enterキー
      64 : Ctrlキー
     128 : ESCキー
     256 : マウスの左ボタン
     512 : マウスの右ボタン
    1024 : TABキー

 キーボードやマウスボタンのコード (getkey)

「ヘルプ」の「HSP命令リファレンスを開く」でgetkeyの項目を見る。


           1    : マウスの左ボタン
           2    : マウスの右ボタン
           3    : キャンセル([CTRL]+[BREAK])
           4    : 3ボタンマウスのまん中のボタン
           8    : [BACKSPACE](PC98の[BS])
           9    : [TAB]
          13    : [ENTER]
          16    : [SHIFT]
          17    : [CTRL]
          18    : [ALT](PC98の[GRPH])
          20    : [CAPSLOCK]
          27    : [ESC]
          32    : スペースキー
          33    : [PAGEUP](PC98の[ROLLDOWN])
          34    : [PAGEDOWN](PC98の[ROLLUP])
          35    : [END](PC98の[HELP])
          36    : [HOME](PC98の[HOMECLR])
          37    : カーソルキー[←]
          38    : カーソルキー[↑]
          39    : カーソルキー[→]
          40    : カーソルキー[↓]
      48〜57    : [0]〜[9](メインキーボード)
      65〜90    : [A]〜[Z]

 動きを一時停止する

wait 300 ; 300 x 10ミリ秒 = 3秒 待つ


 画面の色を変える

=画面と同じ大きさの四角を、色で塗りつぶす

color 0,255,255 : boxf 0,0,640,480

colorコマンドで色を指定し、直後に、boxfコマンドで範囲を指定する。

boxf: 四角い範囲を指定して色で塗りつぶす。
四角い範囲=ウィンドウの大きさ にすると画面全体の色が変わる。

boxf は、範囲を指定しなければ、ウインドウ全体を塗りつぶす。だから、結論としては、画面の色を変えるには、

color 0,255,0 : boxf

とするだけでよい。


 色を設定する


RGB値で指定する

color 0,200,0
color Red, Green, Blue

0(暗い) - 255(明るい)で値を決める。

  0,   0,   0; black

255,   0,   0; red
  0, 255,   0; green
  0,   0, 255; blue

  0, 255, 255; light blue
255,   0, 255; purple
255, 255,   0; yellow

255, 255, 255; white

255, 165,   0; orange
255, 200, 200; pink



 フォントを指定する

font "MS ゴシック", 32, 1

font "フォント名", サイズ, スタイル

スタイルの設定

1 太字
2 イタリック
4 下線
8 打ち消し線
16 アンチエイリアス

スタイルを組み合わせたい場合は、数字を足す。

 位置を指定する

pos 左上横, 左上縦

ウィンドウの広さはデフォルトでは 640 x 480

 実際に実験する際に注意すること

プログラムの実行中にHSPのプログラム以外のものが動いたりして、測定に影響を与えるといけないので、以下の点に注意すること。
1)スクリーンセーバーを切っておく
2)電源の設定で、節電にしないこと。(処理能力最優先にする)
3)ネットワークの接続をすべて無効にしておく。
4)ウイルスチェックのプログラムを止めておく。
5)WindowsUpdate?などの自動更新を止めておく。
6)画面の色を必要最低限にする。
7)デスクトップの背景に何もないようにする。


 str

変数を文字列型に変更。
オプションで、ゼロを含めた桁数にできる。

str 数値を含む変数, オプション

suuji= 7
str suuji, 2

これによりsuujiには「07」という文字列が入る。


 strlen

文字列の長さを調べる。

strlen 結果の変数名, 調べたい文字列

全角は2文字分。

 strmid

部分的に文字列を取り出す。
何文字目から何文字取り出すか、と指定する。

strmid 結果を保存する変数, 取り出し元の変数, 何文字目から, 何文字分を

text='When I was a child, I lived in Tokyo.'
strmid kekka, text, 7, 3

kekkaには、「was」が入る。
文字の位置は0から始まる。7と指定すると8文字目から。


 特定の文字列以降を取り出すには

text='When I was a child, I lived in Tokyo.'
instr koko, text, "," : getstr kekka, text, koko+2

カンマ以降をとりだし、kekkaには「I lived in Tokyo.」が入る。
前半でinstrでカンマの位置を調べて、後半でgetstrでカンマの位置に直後のスペース一文字分を足して「2」を足した位置から行末までをkekkaに保存する。


 instr

検索文字列が何文字目にあるかを調べる。

instr 結果を保存する変数, 検索対象の変数, "検索文字列", 何文字目から検索するか

第4項目の「何文字目から検索するか」を指定しなければ行頭から。
結果は、数字で保存される。1文字目が「0」となる。
文字列がなければ「-1」が結果となる。

text='When I was a child, I lived in Tokyo.'
instr kekka, text, "was"

kekkaは「7」となる。

 getstr

文字列を取り出す。

getstr 結果を保存する変数, 取り出し元の変数, 何バイト目から, どこまで

第4項目の「どこまで」を指定しなければ行末まで。
「どこまで」は区切りとする文字で指定する。例:','

kekka
text='When I was a child, I lived in Tokyo.'
getstr kekka, 0, text, ','

text中の0文字目からカンマまでを取り出して、kekkaに入れる。
kekkaには「When I was a child」が入る。


 gettime 時間の情報を得る

変数 = gettime (パラメタ)

パラメタで、時間のどの情報を得るかを設定

0 年
1 月
2 曜日
3 日
4 時
5 分
6 秒
7 ミリ秒

現在、何時 何分 何秒か?

ji = gettime(4)
fun = gettime(5)
byo = gettime(6)
mes "今は"+ji+"時"+fun+"分"+byo+"秒です"

 objimage 画像をボタンにする

objimage-sugiura.hsp(92)

	;
	;	画像をボタンにする
	;
	buffer 1					; 画像を事前に読み込んでおく場所の番号
	picload "flower1.jpg"		; 画像を読み込んで、bufferに入れておく

	screen 0,640,480			; ウインドウの初期化 0番、ウインドウの大きさの指定
								; bufferを使って画像を読み込んだときは、明示的にウィンドウを指定する
								
	pos 300, 200				; ボタンの位置
	objsize 180,180				; ボタンにする画像のサイズ(大きな画像を読み込んでおいて、その一部を
								;  ボタンとして使用することもできる。)
	objimage 1					; ボタン画像の指定をする。最初の番号が buffer番号
	
	;objimage 1, 0,0, 0,1, 0,2	; ボタン画像の指定をする。
								; 最初の番号が buffer番号
								; 次の数字の組み合わせが、表示する画像の中の左上の位置
								; その次の数字の組み合わせが、ボタンを押したときの位置
								; 最後の数字の組み合わせが、ボタンの上にマウスが来たときの位置
								
	button gosub "", *say		; ボタン命令で、上で設定した画像がボタンとして使われる。

	stop

*say
	mes "Hello!"
	return

flower1.jpg(398)

二種類の画像のボタンを使うには

  • 事前に二種類の画像を合わせた一枚の画像を用意する。
  • 二種類の画像を左右に並べたとして、
  • 左側と右側の画像をそれぞれ左上隅の座標で指定することによって、
  • 二つの画像のボタンを配置したように表示できる。

objimage-sugiura-2.hsp(95)