何度もclsを使って 画面を描き直したいが、 画面がチラつくのは嫌だ |
「redraw 2」で画面描画を一度止め、 その間に画面を描く命令を出し、 全て描き直してから「redraw 1」で 一気に描く。
その際、画面を一度消去する時にはclsではなくboxfで塗りつぶす。 |
redraw2 ;画面描画を一度止める color 0,0,0 ;塗りつぶしたい色を指定。この例では黒 boxf 0,0,winx,winy ;画面全体を塗りつぶす ;ここで画面を描く redraw 1 ;今まで止めていた画面描画を一気に描く |
スクリーンセーバーの 設定ファイルを 自動で作らせる |
SCRファイル自身をコピーして 中身を書き換える |
exist "test.ini" ;test.iniが同一フォルダ内にあるかどうか調べて、 if strsize=-1 : bcopy "test.scr","test.ini" ;なければiniファイルを作る ;あとはbsaveなどで中身を書き換える |
スタートメニューの 『プログラム』に登録する |
『プログラム』フォルダの位置を
知るための命令「fxdir」、
現在、ファイルを操作する命令が対象として設定しているフォルダ
そのフォルダを変える命令「chdir」、(初期状態ではexeがあるフォルダ) の位置が自動的に代入されている 変数「curdir」、 そしてショートカットを作る命令 「fxlink」を組み合わせる。 |
#include "hspext.as" ;fxdirとfxlinkを使うためにhspext.dllが必要 str name : str forder : str location name=" " ;ショートカットにつける名前を入力(空白じゃダメだよ) fxdir forder,2 ;『プログラム』フォルダの位置を取得 location=curdir ;curdirに入っているカレントフォルダのフルパスを記憶 location+="\\ .exe" ;exeファイルの名前を文字列に追加 chdir forder ;操作対象を『プログラム』フォルダに移動 fxlink name,location ;ショートカットをそこにつくる |
デスクトップに ショートカットを作る |
上の『プログラム』メニュー登録と ほぼ同じ手順で、 fxdir命令のところだけ少し変える |
#include "hspext.as" ;fxdirとfxlinkを使うためにhspext.dllが必要 str name : str forder : str location name=" " ;ショートカットにつける名前を入力(空白じゃダメだよ) fxdir forder,16 ;『デスクトップ』フォルダの位置を取得 location=curdir ;curdirに入っているカレントフォルダのフルパスを記憶 location+="\\ .exe" ;exeファイルの名前を文字列に追加 chdir forder ;操作対象を『デスクトップ』フォルダに移動 fxlink name,location ;ショートカットをそこにつくる |
スタートアップに登録する | 上の『プログラム』メニュー登録と ほぼ同じ手順で、 fxdir命令のところだけ少し変える |
#include "hspext.as" ;fxdirとfxlinkを使うためにhspext.dllが必要 str name : str forder : str location name=" " ;ショートカットにつける名前を入力(空白じゃダメだよ) fxdir forder,7 ;『スタートアップ』フォルダの位置を取得 location=curdir ;curdirに入っているカレントフォルダのフルパスを記憶 location+="\\ .exe" ;exeファイルの名前を文字列に追加 chdir forder ;操作対象を『スタートアップ』フォルダに移動 fxlink name,location ;ショートカットをそこにつくる |
大きい画面を ディスプレイに合わせて 縮小する (screen命令で作った画 面だとディスプレイより 大きくはならないので、 ここではbgscr命令で 画面を作り そこをメイン に作業をしていると 仮定して説明します) |
ウィンドウのサイズが記憶されている 変数「winx」「winy」で 画面の大きさを調べ、 ディスプレイの大きさが記憶されて いる変数「dispx」「dispy」を使って 今の画面をどれだけ縮小しなければ ならないのかを計算し、 「gzoom」で縮小した画面に描き直す |
bgscr 3 ;メイン画面がコレだと仮定して記述します。 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 x=winx : y=winy ;今の画面の縦横のサイズを調べる if x>dispx : x1=dispx*10000/x : else : x1=10000 ;ディスプレイに合わせるためには ;横幅を何%に縮小するのか計算 ;精度を上げるため、xx.xx%まで計算 if y>dispy : y1=dispy*10000/y : else : y1=10000 ;同じく縦を何%に縮小するのか計算 if y1>x1 : y1=x1 : else : x1=y1 ;%が小さいほうにあわせる x=x*x1/10000 : y=y*y1/10000 gzoom x,y,3,0,0,winx,winy ;縮小してコピーする width x,y ;画面のサイズを調整する |
ファイル名から 拡張子を抜き出す |
文字列内を検索する命令 「instr」、 文字列の長さを測る命令 「strlen」、 文字列から一部を取り出す命令 「strmid」 を使う |
dialog "*",16 name=refstr ;nameにファイル名が入っている場合を想定 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 instr m,name,"." ;ファイル名の何文字目に 『 . 』 があるかを検索 strlen n,name ;ファイル名が全部で何文字かを調べる m++ ;拡張子は 『 . 』 の一つ後だから1を足す n=n-m ;拡張子部分が何文字なのかを計算 strmid x,name,m,n ;ファイル名から拡張子部分を取り出す mes x |
半角文字か全角文字か を判断する |
文字列をファイルに書き出し、 数値型変数に1バイトずつ読み出して ASCI I コードをチェックする |
a="〜〜〜〜〜" ;aに文字列が入れられていることとする int b : int c : int d strlen b,a ;aの長さを調べてbに入れる bsave "―",a,b ;aをファイルに出力する repeat b bload "―",d,1,c ;dに1バイト読み出す flag=0 ;目印用の変数 if (d>31)&(d<128) : flag=1 ;アスキーコードが32〜127なら半角文字 if (d>159)&(d<224) : flag=1 ;アスキーコードが160〜223なら半角文字 if d=9 : flag=1 ;アスキーコードが9ならTabで、半角扱い ;ここでflagが1なら半角文字、0なら全角文字だと ;わかるので、自分のやりたい処理をする if flag=1 : c++ : else : c=c+2 ;調べる位置を半角なら1、全角なら2進める if b=c : break ;調べる位置がファイルの最後まで来たら終了 loop |