全然更新しないブログ
HSPメモ帳
設定(INI)ファイルの使用
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
設定(INI)ファイルの使用
設定ファイルにウィンドウのサイズやユーザー設定データなどを
読込、保存することができます。
また、「onexit」命令を使用することで、
プログラム終了前に処理が可能です。
保存ファイル例)
[window]
x=100
[player]
age=20
[ ]の部分をセクションと呼びその下の部分のキーに
保存したい値を保存します。
セクションはキーのタイトルみたいなものです。
◆設定ファイル使用例
- 「llmod.as」をインクルードする。
(APIを使用するため) - 「dllproc」命令を使って、
「GetPrivateProfileStringA」「GetPrivateProfileIntA」関数で
ファイルを読み込み、
「WritePrivateProfileStringA」関数で
ファイルを保存します。
文字列をファイルから読み込みます。
dllproc "GetPrivateProfileStringA",prm,6,D_KERNEL
パラメータ 6
prm.0=セクション名(文字列のポインタ)
prm.1=キーの名前(文字列のポインタ)
prm.2=ファイルにキーが見つからなかった時の
デフォルト文字列(文字列のポインタ)
prm.3=キーのデータを格納する変数(ポインタ)
prm.4=prm.3のサイズ
prm.5=読み込むファイル名(文字列のポインタ)
◆機能
数値をファイルから読み込みます。
dllproc "GetPrivateProfileIntA",prm,4,D_KERNEL
パラメータ 4
prm.0=セクション名(文字列のポインタ)
prm.1=キーの名前(文字列のポインタ)
prm.2=ファイルにキーが見つからなかった時の
デフォルト数値
prm.3=読み込むファイル名
戻り値にキーの数値が入っています。
◆機能
文字列をファイルに保存します。
dllproc "WritePrivateProfileStringA",prm,4,D_KERNEL
パラメータ 4
prm.0=セクション名(文字列のポインタ)
prm.1=キーの名前(文字列のポインタ)
prm.2=保存したい文字列(文字列のポインタ)
prm.3=保存するファイル名(文字列のポインタ)
※数値を保存する関数はありません。
※一度EXEファイルを作成してから実行してください。 また、そのフォルダにinitest.iniファイルが作成されます。 作成されるのは一度起動して終了してからです。 2回起動しないとダイアログは表示されません。 |
#include "llmod.as" #define INIFILE exedir+"initest.ini" screen 0,160,25 title "どちらですか?" objsize winx/2,25 pos 0 , 0 : button "男性",*men pos winx/2 , 0 : button "女性",*women //INIファイルの読込 sdim section,8 sdim key,8 sdim sex,8 sdim filename,1024 section="USER" : getptr prm.0,section key="sex" : getptr prm.1,key prm.2=0 sex="" : getptr prm.3,sex prm.4=8 filename=INIFILE : getptr prm.5,filename dllproc "GetPrivateProfileStringA",prm,6,D_KERNEL if sex!=""{ dialog "あなたは"+sex+"ですね?" } //終了処理でINIファイルに保存します。 onexit *endapli stop *men sex="男性" stop *women sex="女性" stop //終了処理 *endapli section="USER" : getptr prm.0,section key="sex" : getptr prm.1,key getptr prm.2,sex filename=INIFILE : getptr prm.3,filename dllproc "WritePrivateProfileStringA",prm,4,D_KERNEL end |
コメント ( 0 ) | Trackback ( 0 )
テキスト検索ソフト(仮) - 8
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
テキスト検索ソフト(仮) - 8
EDITBOXの作成とファイルの保存
- 「mesbox」から自作のEDITBOXに変更。
(フォーカスが消えないEDITの作成参照)
mesboxへの命令を変更。 - ファイルの保存と設定のボタンを追加。
設定ボタンは未完成。 - 画像ファイルが無くてもエラーがでないようにした。
☆実行画面
☆ソースコード
#include "llmod.as" #include "misc.as" #define BUTTONIMG "btnimg01.JPG" exist BUTTONIMG if strsize!=-1{ btnflag=1 buffer 2 : picload BUTTONIMG } else{ btnflag=-1 } screen 0,dispx,dispy width 200,340 title "テスト" mref bmscr,67 prm = bmscr.13 , -16 dllproc "GetWindowLongA", prm, 2, D_USER prm = bmscr.13 , -16 , dllret | 0x40000 | 0x10000 dllproc "SetWindowLongA", prm, 3, D_USER wndx=winx : wndy=winy //クライアントエリアをグレーに塗りつぶし color 192,192,192 : boxf objsize 20,20 pos 0,0 : button "開",*fileopen //ID:0 if btnflag=1 : btnimg 0,2,0,0,20,20 pos 40,0 : button "選",*textselect //ID:1 if btnflag=1 : btnimg 1,2,20,0,20,20 sdim ftext,64 : pos 60,0 : input ftext,100,20,64 //ID:2 pos 160,0 : button "調",*find //ID:3 if btnflag=1 : btnimg 3,2,40,0,20,20 listno=-1 : listno2=-1 sdim listdata,1024 listx=winx-3 objsize listx,320 pos 0,20 : listbox listno,0,listdata //ID:4 sdim str1,1024 sdim str2,1024 sdim editdata,65536 sdim editdata2,65536 //EDITBOX作成 prm=0x0200 str1="EDIT" : getptr prm.1,str1 prm.2=0,0x503001c4,winx,0,0,0,bmscr.13 prm.9=3000,bmscr.14,0 dllproc "CreateWindowExA",prm,12,D_USER heditbox=dllret //EDITの状態変数 mbflag=0 objsize 20,20 pos 20,0 : button "書",*filesave //ID:5 if btnflag=1 : btnimg 5,2,60,0,20,20 pos 180,0 : button "設",*setting //ID:6 if btnflag=1 : btnimg 6,2,80,0,20,20 onclick *clk *main if (winx!=wndx) | (winy!=wndy){ _hspobjhandle 2 prm=stat,60,0,winx-100,20,1 dllproc "MoveWindow",prm,6,D_USER _hspobjhandle 3 prm=stat,winx-40,0,20,20,1 dllproc "MoveWindow",prm,6,D_USER _hspobjhandle 6 prm=stat,winx-20,0,20,20,1 dllproc "MoveWindow",prm,6,D_USER listx+=winx-wndx _hspobjhandle 4 if listx>0{ prm=stat,0,20,listx,winy-20,1 dllproc "MoveWindow",prm,6,D_USER prm=heditbox,listx+4,20,winx-(listx+4),winy-20,1 dllproc "MoveWindow",prm,6,D_USER } else{ prm=stat,0,20,0,0,1 dllproc "MoveWindow",prm,6,D_USER prm=heditbox,4,20,winx-4,winy-20,1 dllproc "MoveWindow",prm,6,D_USER } wndx=winx : wndy=winy } if listno2!=listno{ notesel listdata : noteget str1,listno getstr str1,str1,1,']':int str1 : str1-- notesel editdata : noteget str2,str1 instr tmp.0,str2,ftext,0 strlen tmp.1,ftext prm=hedit,0xBB,str1,0 dllproc "SendMessageA",prm,4,D_USER tmp.0+=dllret : tmp.1+=tmp.0 prm=hedit,0xB1,tmp.0,tmp.1 dllproc "SendMessageA",prm,4,D_USER prm=hedit,0xB7,0,0 dllproc "SendMessageA",prm,4,D_USER prm=hedit,0xCE,0,0 dllproc "SendMessageA",prm,4,D_USER str1=(str1-dllret)/2 prm=hedit,0xB6,0,str1 dllproc "SendMessageA",prm,4,D_USER str str1 listno2=listno } wait 10 goto *main ///////////////////////////////////////////////////////// // クリックが押された時(onclick) *clk //左クリックされたとき if wparam=1{ ginfo 0 : x=prmx repeat //ボタンを押していない時はループを抜けます stick st,256 if st!=256 : break ginfo 0 if prmx!=x{ tmp=listx+prmx-x //クライアント領域が残るようにする if (tmp>=0) & (tmp < (winx-3)){ listx=tmp _hspobjhandle 4 prm=stat,0,20,listx,winy-20,1 dllproc "MoveWindow",prm,6,D_USER prm=heditbox,listx+4,20,winx-(listx+4),winy-20,1 dllproc "MoveWindow",prm,6,D_USER x=prmx } } wait 1 loop } goto *main *fileopen dialog "*",16,"" if stat=1{ exist refstr if strsize < 0:goto *main if strsize > 65536:goto *main _hspobjhandle 5:hedit=stat //mesbox,listboxを移動 if mbflag=0{ _hspobjhandle 4 listx=winx/2 prm=stat,0,20,listx,winy-20,1 dllproc "MoveWindow",prm,6,D_USER prm=heditbox,listx+4,20,winx-(listx+4),winy-20,1 dllproc "MoveWindow",prm,6,D_USER mbflag=1 : hedit=heditbox } notesel editdata:noteload refstr prm=heditbox,0x000C,0 getptr prm.3,editdata dllproc "SendMessageA",prm,4,D_USER } gosub *findlist goto *main *filesave dialog "",17,"" if stat!=0{ prm=heditbox,0x000D,65536 getptr prm.3,editdata dllproc "SendMessageA",prm,4,D_USER notesel editdata : notesave refstr } goto *main *setting dialog "未完成" goto *main *textselect gsel 0,-1 screen 3,400,225 : title "テキストを左クリックして下さい" gsel 3,2 cls 1 pos 2,3 : mes "取得テキスト:" pos 0,25 : mesbox editdata2,400,200 objsize 60,25 pos 260,0 : button "決定",*wnd3ok pos 330,0 : button "取消",*wnd3cancel mref bmscr,67 *wnd3loop stick st,0,0 prm=0 : dllproc "GetForegroundWindow",prm,0,D_USER if st=256 &(bmscr.13!=dllret){ ginfo 0 prm=prmx,prmy dllproc "WindowFromPoint",prm,2,D_USER hedit=dllret if dllret!=0{ prm=hedit,0x000D,65536 getptr prm.3,editdata2 dllproc "SendMessageA",prm,4,D_USER objprm 0,editdata2 } } wait 10 goto *wnd3loop *wnd3ok //mbflagが1の時はmesboxを隠す if mbflag=1{ gsel 0 : width listx+4 : objprm 5,"" mbflag=0 } editdata=editdata2 gosub *findlist *wnd3cancel gsel 3,-1 : gsel 0,1 goto *main *find gosub *findlist goto *main *findlist notesel editdata : notemax tmp listdata="" repeat tmp notesel editdata : noteget str1,cnt instr tmp,str1,ftext,0 if tmp!=-1{ getstr str1,str1,tmp,'' tmp=cnt+1 notesel listdata : noteadd "["+tmp+"] "+str1,-1 } loop objprm 4,listdata return |
コメント ( 0 ) | Trackback ( 0 )
システム変数
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
システム変数
プログラムが実行された時に用意されている変数です。
通常、この変数は変更できません。
読み取り専用です。(※モジュール内では変更可能)
stat | 色々な命令のステータスなど | |
cmdline | コマンドラインに渡された引数の文字列 | |
err | エラーコード | |
dispx | ディスプレイの X 方向解像度 | |
dispy | ディスプレイの Y 方向解像度 | |
winy | 現在のウィンドウ描画エリア Y サイズ | |
winx | 現在のウィンドウ描画エリア X サイズ | |
csrx | カレントポジションの X 座標 | |
csry | カレントポジションの Y 座標 | |
prmx | ginfo 命令で取得される X 値 | |
prmy | ginfo 命令で取得される Y 値 | |
rval | RGB カラーの R (赤) 輝度情報 | |
gval | RGB カラーの G (緑) 輝度情報 | |
bval | RGB カラーの B (青) 輝度情報 | |
paluse | Windows がパレットモードかどうか | |
mousex | マウスカーソルの X 座標 | |
mousey | マウスカーソルの Y 座標 | |
exedir | 起動した EXE ファイルのあるディレクトリ | |
windir | Windows がインストールされているディレクトリ | |
curdir | カレントディレクトリパス | |
refstr | ファイル選択ダイアログで選択されたファイル名 | |
strsize | getstr 命令で読み出したバイト数 | |
looplev | repeat~loop のネストレベル | |
cnt | repeat~loop ループのカウンター | |
sublev | サブルーチンのネストレベル | |
iparam | 割り込み要因を示す値 | |
lparam | 割り込み時の lParam | |
wparam | 割り込み時の wParam | |
hspstat | HSP ランタイムの情報を取得する 以下の情報がすべて合計された値になります。 ( デバッグモード = 1 ) ( IMEが有効 = 2 ) ( Macintosh版HSP = $80 ) ( IMEをサポートしないOS = $100 ) | |
hspver | HSP のバージョン番号 バージョンコード + マイナーバージョンコード の値になります。 (2.61は$0261になる) |
コメント ( 0 ) | Trackback ( 0 )
「mes」は簡単?
◆一覧リスト:HSP Ver2.61・ブログ関連・その他 ・・・ 人気blogランキング |
「mes」
昔のプログラム入門の最初は、
「Hello World」と出力させることが有名(?)でした。
HSPでは簡単です。mes "Hello World":stop
わずか22文字。
そこで、いろいろな方法で「mes」命令を実行してみます。
◆「mes」使用時の注意点
- 「mes」の最初に数字または、整数変数を指定すると
次に文字列を連結できません。
その場合は空白の""を前につけます。(整数と文字列を混合する場合)
例)
×a=100 : mes a+"円" → 100
○a=200 : mes ""+ a+"円" → 200円
mes 100+200 → 300
mes ""+100+200 → 100200
- 「font」命令を使用して色々な文字、サイズを表示可能です。
◆書式
font "fontname",p1,p2
p1=1~99(12) : フォントの大きさ
p2=0~(0) : 以下スタイルの和
スタイル 1 太文字
スタイル 2 イタリック体
スタイル 4 下線
スタイル 8 打ち消し線
スタイル16 アンチエイリアス
フォントの大きさ99までとHSPヘルプにはありますが・・・
10000を指定しても表示されました。 - 「pos」命令で表示位置を指定できます。
◆書式
pos p1,p2
p1,p2 : カレントポジションのX,Y座標
p1,p2にはマイナスも指定可能です。
※フォントサイズ10000もマイナス指定で端だけ表示してみました。
「mes」を使用したときに自動的に改行された値が
カレントポジションに代入されます。 - 「color」命令で文字の色を指定できます。
◆書式
color p1,p2,p3
p1,p2,p3=0~255(0) : 色コード(R,G,Bの輝度)
color のみは引数が0,0,0となり黒を意味します。 - 「text」でmesのテキスト表示のスピードを変更することができます。
◆書式
text p1
p1=0~(0) : メッセージ表示スピード - 表示メッセージとは関係ありませんが、
「boxf」命令はクライアントエリアを「color」で指定した色で
矩形(四角形)で塗りつぶします。
「mes」の背景色として使います。
◆書式
boxf p1,p2,p3,p4
p1,p2 : 矩形の左上X,Y座標
p3,p4 : 矩形の右下X,Y座標
boxfのみはクライアントエリア全てを塗りつぶします。
boxfで塗りつぶしてからmesで表示した時、colorの指定を忘れると
boxfと同じ色でmesが表示される為に文字が見えません。
以前何色に変えたっけ?フォントなんだっけ?などの場合は
mesの度に指定してあげるのも良いかと思います。
サンプル1は背景黒、文字色白で「mes」表示しています。 サンプル2は文字をずらして2回表示させることで 立体的?に見せています。 サンプル3の落書きのような物も「mes」で フォントのサイズ変更などして描いたものです。 サンプル4は一度「buffer」に サンプル2と同じように出力させて 「gzoom」で変換しています。 | |
////////////////////////////////// //サンプル1 screen 0,160,60 title "mes サンプル 1" font "MS ゴシック",12 color 0,0,0 : boxf color 255,255,255 : pos 10,10 mes "位置 10,10" mes "MS ゴシック 12" mes "color 255,255,255" stop ////////////////////////////////// //サンプル2 screen 0,160,60 title "mes サンプル 2" font "MS 明朝",30,3 color 230,230,230: boxf color 128,128,128: boxf 2,2,winx,winy color 192,192,192: boxf 2,2,winx-2,winy-2 color 0,0,80 : pos 18,16 mes "立体的?" color 0,0,255 : pos 17,15 mes "立体的?" stop ////////////////////////////////// //サンプル3 screen 0,160,60 title "mes サンプル 3" color 0,255,255 boxf 0,0,160,35 font "MS ゴシック",16 pos 40,8 :color 128,0,0 mes "1" font "MS ゴシック",8 pos 48,8 :color 128,255,255 mes "●" font "MS ゴシック",10 pos 50,6 :color 128,255,255 mes "●" font "MS ゴシック",14 pos 55,4 :color 128,255,255 mes "●" font "MS ゴシック",18 pos 62,0 :color 128,255,255 mes "●" font "MS ゴシック",16 pos 35,18 :color 128,0,0 mes "■" font "MS ゴシック",40 pos 20,20 : color 255,32,32 mes "▼" color 32,32,255 boxf 0,35,160,60 font "MS ゴシック",160 pos 90,10 : color 0,255,64 mes "●" font "MS ゴシック",240 pos 60,25 : color 128,128,0 mes "●" stop ////////////////////////////////// //サンプル4 buffer 2,260,80 color : boxf font "MS ゴシック",64,1 color 128,128,0 : pos 7,16 mes "遠近法!" color 255,255,0 : pos 3,12 mes "遠近法!" screen 0,160,60 color : boxf repeat 260 pos cnt+20,5 gzoom 1,60-(cnt/3),2,cnt*2,0,1,80 loop title "mes サンプル 4" stop |