goo blog サービス終了のお知らせ 
goo

多分動作してるはず(HSP)

一覧リスト:HSP Ver2.61 ブログ関連 ・・・ 人気blogランキング



◆HSPプログラミングメモ

●「dllproc」の「SendMessageA」命令
命令
dllproc "SendMessageA",Ⅰ,4,D_USER
引数説明Ⅰ=① , ② , ③ , ④
ウィンドウハンドル
①に送るウィンドウメッセージ
③ , ④
①のパラメータ
//★文字列を取得するサンプル
#include "llmod.as"

//文字列を表示するテキストボックスの作成
screen 0,600,300

//gsel ①,②
//ウィンドウを操作、指定します
//①ウィンドウIDを指定
//②0:影響無し 1:アクティブ
// 2:最善面 -1:非表示
gsel 0,2

title "左クリックでテキストを取得します"
sdim getdata,65536

//システム変数「winx」,「winy」には
//現在のウィンドウの横、縦サイズが入っています
mesbox getdata,winx,winy,5    //ID=0

//メインループ
*main
    stick st
    if st=256 : goto *gettext
    wait 10

//goto ①
//処理を指定したラベルに移動します
//①ラベル
goto *main

//左クリックされた時に実行される
*gettext
    ginfo 0
    prm=prmx,prmy
    dllproc "WindowFromPoint",prm,2,D_USER
    if stat!=0{
        //prm=①,②,③,④
        //①statにウィンドウハンドルが入っています
        //②ウィンドウメッセージ「0x000D」はテキストを取得します
        //③65536は「getdata」のサイズ
        //④は「getdata」のポインタ
        prm=stat , 0x000D , 65536
        getptr prm.3,getdata
        dllproc "SendMessageA",prm,4,D_USER
        //オブジェクト0(mesbox)に「getdata」を表示させます
        objprm 0,getdata
    }
goto *main


●文字列の検索について
前回の「editdata」ダイアログ表示の差し替え
            notesel editdata
            //tmpに「editdata」の行数を取得
            notemax tmp
            sdim str1,64
            listdata=""
            repeat tmp
                //1行ずつ「str1」に文字取得
                notesel editdata : noteget str1,cnt

                //instr ① , ② , ③ , ④
                //②の中に③の文字があるかどうか調べる
                //①存在する場合の文字位置
                //②検索対象の文字列
                //③検索する文字列
                //④検索開始する位置
                instr tmp,str1,ftext,0

                //文字が存在した場合(無い場合は-1)
                if tmp!=-1{
                    //発見位置以下は削除する
                    getstr str1,str1,tmp,''
                    tmp=cnt+1
                    //「listdata」に文字列追加
                    notesel listdata : noteadd "["+tmp+"] "+str1,-1
                }
            loop
            //データがある場合、リストボックスへ表示
            if listdata!="" : objprm 4,listdata


●リストボックスの選択変更時の処理
ループ内で監視
sdim str1,1024
sdim str2,1024
//stop
*main
    //「listno2」は以前選択されていた値
    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

        //EM_LINEINDEX (0x00BB)メッセージ
        //行数を指定してそれまでのバイト数を取得
        prm=hedit,0xBB,str1,0
        dllproc "SendMessageA",prm,4,D_USER

       //EM_SETSEL (0x00B1)メッセージ
       //テキストを選択する
        tmp.0+=dllret : tmp.1+=tmp.0
        prm=hedit,0xB1,tmp.0,tmp.1
        dllproc "SendMessageA",prm,4,D_USER

         //EM_SCROLLCARET (0x00B7)メッセージ
         //カーソル位置にスクロール
         prm=hedit,0xB7,0,0
         dllproc "SendMessageA",prm,4,D_USER

         //EM_GETFIRSTVISIBLELINE (0x00CE)メッセージ
         //現在表示されている最上行を取得
         prm=hedit,0xCE,0,0
         dllproc "SendMessageA",prm,4,D_USER

         //EM_LINESCROLL (0x00B6)メッセージ
         //テキストをスクロールする
         //最下位置の場合少し上に移動する
         str1=(str1-dllret)/2
         prm=hedit,0xB6,0,str1
         dllproc "SendMessageA",prm,4,D_USER

         str str1
         listno2=listno
        }
	wait 10
goto *main


●サブルーチン「gosub」について
説明
gosub *label
gosub命令は、*labelで指定した場所にジャンプをします。
その後、return命令があると
gosub命令の次の行に復帰して実行を続けます。
gosub~returnは最大32重までネスティングが可能です。
同じような処理を何度も使用する場合等に
サブルーチンを使います。
gosub *test
stop

*test
    mes "test"
return



★実行画面
 現在
   ①テキストファイルを開き、表示する
   ②マウスクリックにて任意のテキストデータを取得
   ③任意文字を検索して行ごとにリスト可
   ④リストを選択することで指定行にジャンプ
   ※一部動作が不完全
 まで進みました。
 「選」ボタンでHSPエディタを選択して検索文字欄に「sdim」を入力。
 「調」ボタンを押して、リストを選択した状態(下図)。



☆ソースコード
青の部分は追加したコード、赤の部分は変更したコードです。
ソフト名未定
HSP Ver2.61
内容任意のテキストにて文字を検索する準備
ソース
/////////////////////////////////////////////////////////
// APIを使用する為
#include "llmod.as"

/////////////////////////////////////////////////////////
// メインウィンドウの作成
screen 0,160,340
title "テスト"
objsize 20,20
pos 0,0 : button "開",*fileopen
pos 20,0 : button "選",*textselect
sdim ftext,64 : pos 40,0 : input ftext,100,20,64
pos 140,0 : button "調",*find
dim listno
sdim listdata,1024
objsize 160,320
pos 0,20 : listbox listno,0,listdata
//stop
sdim str1,1024
sdim str2,1024

*main
    //リストボックス処理
    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

/////////////////////////////////////////////////////////
// 「開」のボタンを押した時
*fileopen
    //ファイルを開くダイアログの表示
    dialog "*",16,""
    if stat=1{
        exist refstr
        //0以下の場合はファイルがないのでストップさせます
        if strsize < 0:goto *main
        //64K以上は処理しないようにします
        if strsize > 65536:goto *main
        //テキストデータを表示する為にウィンドウ書き直し
        screen 0,460,340
        //タイトルにファイル名を表示
        title "テスト ["+refstr+"]"
        objsize 20,20
        pos 0,0 : button "開",*fileopen  //0
        pos 20,0 : button "選",*textselect  //1
        sdim ftext,64 : pos 40,0 : input ftext,100,20,64  //2
        pos 140,0 : button "調",*find  //3
        dim listno
        sdim listdata,1024
        objsize 160,320
        pos 0,20 : listbox listno,100,listdata  //4
        pos 160,0
        //エディットで使用する文字変数
        sdim editdata,65536
        mesbox editdata,300,340,5,65536  //5
        _hspobjhandle stat:hedit=stat
        notesel editdata
        noteload refstr
        objprm 5,editdata
    }
    gosub *findlist
//stop
goto *main


/////////////////////////////////////////////////////////
// 「選」のボタンを押した時
*textselect
    dialog "OKを押した後、テキストをクリックして下さい",0,"確認"
    repeat
        stick st,0,0
        //左クリックされた時(stに256が入ります)
        if st=256{
            ginfo 0
            //現在のマウス座標の下にあるウィンドウハンドルを取得
            prm=prmx,prmy
            dllproc "WindowFromPoint",prm,2,D_USER
            hedit=dllret

            if dllret=0 : break

            sdim editdata,65536
            prm=hedit,0x000D,65536
            getptr prm.3,editdata
            //ハンドルからテキストを取得します。
            dllproc "SendMessageA",prm,4,D_USER
            gosub *findlist
            break
        }
        wait 10
    loop
//stop
goto *main


// 「調」ボタンを押した時
*find
    gosub *findlist
//stop
goto *main

//テキスト検索+リストアップ
*findlist
    notesel editdata
    //tmpに「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
    if listdata!="" : objprm 4,listdata
return




このページはHSP勉強中のメモです
不具合が起こらない様に配慮はしていますが
各ソースの使用は各自の責任においてご利用お願いします
コメント ( 0 ) | Trackback ( 0 )

「llmod.as」の使用 (HSP)

一覧リスト:HSP Ver2.61 ブログ関連 ・・・ 人気blogランキング




前回の続きです。

◆HSPプログラミングメモ
●インクルード
ファイルを指定して結合します。書き方は、
#include "ファイル名"
です。この命令の時点で指定したファイル名を読込みます。
自分でソースを書いていて長くなりファイルを分けたい時に使用します。
また誰かが作ったファイルを指定する事で新しい命令を使用する事もできます。
例1 先に実行する場合
main.as#include "sub.as"
mes "sub.asを読み込みました"
stop
sub.asmes "sub.as"
実行結果sub.as
sub.asを読み込みました
先に「sub.as」を読み込んで次の行の命令を実行しています。

例2 関数を作って後で実行する場合
main.as#include "sub.as"
mes "keisan 関数を使用します"
keisan 3,5
keisan 26,37
stop
sub.as#module
#deffunc keisan int,int
mref x,0
mref y,1
z=x*y
mes ""+x+"×"+y+"="+z
return
#global
実行結果keisan 関数を使用します
3×5=15
26×37=962
「#module」と「#global」の間は実行されません。その間で「#deffunc」という関数を作る命令で、「keisan」という関数を作成してます。
「sub.as」をインクルードすることで、その後「keisan」関数を使用することができます。


●「llmod.as」
インクルード
ファイル名
llmod.as
使用可能
命令
全般
dllproc (WINDOWS APIを使用)
sendmsg (SendMessageAを呼び出す)
オブジェクト
消去関連
_clsobj (IDを指定して削除)
_cls (全削除)
ウィンドウ作成
_makewnd (CreateWindowAを呼び出す)
文字関連
charlower (英字を小文字に変換)
charupper (英字を大文字に変換)
変数関連
getptr (指定変数のポインタを取得)
※「llmod.as」と別のファイルをインクルードする事で
もっと多くの命令が使えます(計81くらい)。
詳細は、ヘルプの検索キーワードに
llmod.asと入力する事で見れます。

●「llmod.as」の「dllproc」命令
命令
dllproc ①,②,③,④
引数説明
関数名
関数に渡すパラメータ
パラメータの数
DLLの種類(6種)から数値かD_で始まる文字を指定します。
kernel32.dll0 (D_KERNEL)
user32.dll1 (D_USER)
shell32.dll2 (D_SHELL)
comctl32.dll3 (D_COMCTL)
comdlg.dll4 (D_COMDLG)
gdi32.dll5 (D_GDI)
//dllprocを使用する為
#include "llmod.as"

//prmは整数変数です。
//例えば、prm=1,2,3,4,5,6とした時
//prm.0に1 prm.1に2・・・prm.5に6が代入されます。
prm=100,120

//①には、④のDLL内の関数名を指定します。
//②は上記で書いた変数を指定します。
// ①の関数によって指定するパラメータは違います。
// 今回は取得したいハンドルの座標位置を指定します。
// prm.0=100は横位置 prm.1=120は縦位置です。
//③は②で使用したパラメータの数を指定します。
// 今回は100と120の2つです。
//④は①が決まれば自動的に決まります。

//WindowFromPointは指定した座標にあるウィンドウハンドルを
//取得する関数です。
//この例では、ディスプレイ上で左上から右に100下に120の場所の
//ハンドルを取得します。
dllproc "WindowFromPoint",prm,2,D_USER

//dllprocを実行したときにdllret変数に値が入ります。
//WindowFromPointの場合はdllretにハンドルが入ります。
//失敗すると0となります。
//mesは画面に文字を表示しますが
//最初が整数変数だとうまく表示されません。
//そこで ""+ と空白文字をつけることで表示させています。
mes ""+dllret
stop

☆ソースコード
ソフト名未定
HSP Ver2.61
内容任意のテキストにて文字を検索する準備
ソース
/////////////////////////////////////////////////////////
// APIを使用する為
#include "llmod.as"

/////////////////////////////////////////////////////////
// メインウィンドウの作成
screen 0,160,340
title "テスト"
objsize 20,20
pos 0,0 : button "開",*fileopen
pos 20,0 : button "選",*textselect
sdim ftext,64 : pos 40,0 : input ftext,100,20,64
pos 140,0 : button "調",*find
dim listno
sdim listdata,1024
objsize 160,320
pos 0,20 : listbox listno,100,listdata
stop

/////////////////////////////////////////////////////////
// 「開」のボタンを押した時
*fileopen
    //dialog ①,②,③
    //ダイアログを表示します
    //①表示する文字またはファイルの種類を指定
    //②ダイアログの種類を指定
    //③タイトルバーに表示する文字を指定
    // またはファイルの説明
    //★ファイルを開くダイアログの表示
    dialog "*",16,""

    //ダイアログで正常にファイルが選択された場合
    //statに1が入ります。失敗すると0が入ります。
    //また、成功すると文字変数「refstr」にファイル名が入ります
    if stat=1{
        //ファイルのサイズをstrsize変数に格納します。
        //exist ①
        //①ファイル名を指定
        //ファイルが無い場合、strsizeは-1になります。
        exist refstr

        //0以下の場合はファイルがないのでストップさせます
        if strsize<0 : stop65536 : stop

        //テキストデータを表示する為にウィンドウ書き直し
        screen 0,460,340
        //タイトルにファイル名を表示
        title "テスト ["+refstr+"]"
        objsize 20,20
        pos 0,0 : button "開",*fileopen  //0
        pos 20,0 : button "選",*textselect  //1
        sdim ftext,64 : pos 40,0 : input ftext,100,20,64  //2
        pos 140,0 : button "調",*find  //3
        dim listno
        sdim listdata,1024
        objsize 160,320
        pos 0,20 : listbox listno,100,listdata  //4
        pos 160,0
        //エディットで使用する文字変数
        sdim editdata,65536
        //複数行入力できるエディットを表示
        //mesbox ①,②,③,④,⑤
        //①表示文字を格納している変数
        //②エディットの横サイズ ③エディットの縦サイズ
        //④スタイル ⑤入力できる最大文字数
        mesbox editdata,300,340,5,65536  //5

        //メモリノートパッド命令を使用
        //文字変数を指定することで、行の追加、削除等の
        //機能が使用することができます。
        //notesel ①
        //①変数名
        notesel editdata

        //ファイルの内容をnoteselで指定した変数に読み込む
        //noteload ①
        //①ファイル名を指定
        noteload refstr

        //オブジェクトの内容を変更します。
        //objprm ①,②
        //①オブジェクトID
        // HSP標準命令で作成されたオブジェクトは
        // その作成された順番に番号がつきます(0~)
        //②変更する内容
        objprm 5,editdata
    }
stop

/////////////////////////////////////////////////////////
// 「選」のボタンを押した時
*textselect
    //説明の為ダイアログ表示
    //nは改行、tはタブ、はを表します
    dialog "OKを押した後、nテキストをクリックして下さい",0,"確認"

    //左クリックを押すまでループします
    //repeat と loopで囲まれた部分を繰り返し実行します。
    //repeat ①,②
    //loop
    //①ループ回数
    // 0または-1または省略すると無限に繰り返します
    //②cntのスタート値を指定。省略すると0です。
    // ループされる度に変数cntが1加算されます
    repeat
        //キーまたはマウスの状態を取得します
        //stick ①,②,③
        //①キーの状態を読み込む為の変数
        //②押しっぱなし検知するキーコードを指定
        //③ソフトが非アクティブでもキーを取得する場合、0
        // 取得しない場合は1を指定。
        // dim stとしなくても変数stは使用可能です
        stick st,0,0

        //左クリックされた時(stに256が入ります)
        if st=256{
            //各種情報を取得
            //ginfo ①
            //①0の時マウス座標取得
            // 1の時アクティブウィンドウIDと、操作先ウィンドウID取得
            // 2の時ウィンドウ左上座標取得
            // 3の時ウィンドウ右下座標取得
            // 4の時ウィンドウスクロール座標取得
            // 5の時ウィンドウ全体のサイズ取得
            // 6の時ウィンドウ初期化サイズ取得
            // 7の時メッセージの出力サイズ取得
            // 各情報は、prmxとprmyに格納されます。
            //★現在のマウス位置を取得します。
            ginfo 0

            //現在のマウス座標の下にあるウィンドウハンドルを取得
            //WindowFromPoint
            //成功するとdllretにハンドルを取得
            //失敗すると0
            prm=prmx,prmy
            dllproc "WindowFromPoint",prm,2,D_USER
            //後で使うためにhedit変数に確保
            hedit=dllret

            //ハンドル取得失敗した時
            //break リピートを抜け出します
            if dllret=0 : break

            //テキストを格納する為の文字変数
            sdim editdata,65536

            //0xと先頭につけると16進数扱いになります。
            //0x000Dの10進数は13です。
            prm=hedit,0x000D,65536
            //テキストデータを入れる変数のポインタを取得
            //getptr ①,②
            //①取得するポインタが入る変数
            //②ポインタを取得したい変数
            getptr prm.3,editdata
            //★ハンドルからテキストを取得します。
            dllproc "SendMessageA",prm,4,D_USER

            //中途半端ですが、今回はここで終わりとします
            //以下のダイアログは本当にテキストが取得できたか
            //どうかのテストです。
            dialog editdata

            break
        }

        //一定時間停止します
        //wait ①
        //①待ち時間(単位10ms)
        //長く繰り返しの処理をする場合waitを使用しないと
        //OSに処理が回らない為に、不安定になります。
        wait 10
    loop
stop

// 「調」ボタンを押した時
*find

stop


★実行画面
※まだ途中で機能はしていません。
 現在
   ①テキストファイルを開き、表示する
   ②マウスクリックにて任意のテキストデータを取得
 まで進みました。

「開」ボタンでテキストを開いた状態です。


「選」ボタンを押してダイアログのOKボタンを押します。
その後、HSPのヘルプのテキスト欄をクリックした時のダイアログです。
(ヘルプの内容はmes命令です)
※文字列を取得できたかどうかの確認ダイアログです。





このページはHSP勉強中のメモです
不具合が起こらない様に配慮はしていますが
各ソースの使用は各自の責任においてご利用お願いします
コメント ( 0 ) | Trackback ( 0 )

見かけだけ(HSP)

一覧リスト:HSP Ver2.61 ブログ関連 ・・・ 人気blogランキング


・・・前回の続きです。
#include <llmod.as>と前回書きましたが
実はllmod.as の機能は使って無かったので書かなくてもよかったのでした。
今回も同様です・・・。

◆HSPプログラミングメモ

任意のテキストを取得したいと思います。

ところで、任意のテキストとは?

① まだ開かれていないテキストファイルを自分で開く場合
② 既にメモ帳等で開いているテキストの場合

この2つの処理をしていきます。

ここまでで、必要なオブジェクトは
①テキストファイルを開くボタン
②既に開いているテキストを選択するボタン
③検索文字列を入力する場所
④検索を実行する為のボタン
⑤検索結果を表示する場所
まず、この5つのオブジェクトを作成します。


ソフト名未定
HSP Ver2.61
内容任意のテキストにて文字を検索する準備
ソース
// これはAPIを使う為のおまじないです 
// APIとは・・・ウィンドウズが用意してくれてる命令です 
#include "llmod.as" 

// screen は画面を作る命令です。0 と 2~31までの31個のウィンドウを 
// 作成する事ができます。 
// screen 1,2,3,4,5,6,7,8 
// 1はスクリーンの番号です。0~31(1は使わない事)が使えます。 
// 2は横幅 3は縦幅 ・・・後はヘルプ参照 1以外は省略可能です。
screen 0,160,340

// title ①
// ①タイトルに表示する文字列
// 文字を指定する場合、""で囲みます。
title "テスト"

// objsize ①,②,③
// この命令以降に作られるオブジェクトのサイズを決定。
// ①横幅 ②縦幅 ③最低縦幅
objsize 20,20

// posはオブジェクトを配置する場所を指定します。
// また多くのウィンドウを作成できることから、
// 現在のウィンドウと配置位置を把握しておく事も必要です。
// 上にて、screenで作成したので現在のウィンドウ番号は0、位置は0,0です。
pos 0,0

// button ①,②
// ボタンを作成します。
// ①ボタンに表示される文字を指定 ②このボタンを押した時にジャンプする
// ラベルを指定
// ②のラベルとは 頭に「*」がつきその後に名前をつけて表します。
// ★ファイルを開くボタン作成
button "開",*fileopen

// 上記と違い1行で表したい場合はつなぎ目に「:」を付ける事で可能です。
// ★他のテキストを選択する時のボタン作成
pos 20,0 : button "選",*textselect

// sdim ①,②,③・・・
// 文字列を格納する変数を作成します。
// ①変数名 ②格納できる文字のサイズ ③要素の数
// 例)sdim test,64,3,3 は、
// 文字変数「test」64バイトが3×3ある文字変数を作成します。
// test.0.0~test.2.2の9つ×64バイト=576バイト確保します。
// ★検索する文字列確保
sdim ftext,64

// input ①,②,③,④
// 1行だけ入力できるエディットボックスを作成します。
// ①入力された文字を格納する変数
// ②オブジェクトの横幅 ③オブジェクトの縦幅 ④入力可能な文字数制限
// objsizeのサイズは反映されません。
// ★検索する文字列入力するオブジェクトの作成
pos 40,0 : input ftext,100,20,64

// ★入力文字を検索するボタンの作成
pos 140,0 : button "調",*find


// dim ①,②・・・
// 整数の変数を作成します。HSPではこの命令無しで自由に変数作成できます。
// ①変数名 ②要素の数
// 要素の数はsdimと同様です。
// ★リストボックス用の選択位置変数
dim listno

// ★リストボックス用の文字列変数
sdim listdata,1024

// ★リストボックスのサイズ指定
objsize 160,320

// listbox ①,②,③
// ①リストボックスの現在選択位置を入れる整数変数
// ②拡張Yサイズ(表示がおかしい場合調整する程度でいいと思います)
// ③リストボックスに表示する文字列を格納している変数
// ★検索結果を表示
pos 0,20 : listbox listno,100,listdata

//stop ここでプログラムが停止したままになります。
//ボタンが押された等で別の命令が出た場合はこの命令は無視されます。
stop

// stopより下にボタン用のラベルを記入します。
// ボタンが押された場合等この下のラベルにジャンプします。

// テキストファイルを開く際、「開」のボタンを押した時
*fileopen

stop

// 他のテキストを選択する際、「選」のボタンを押した時
*textselect

stop

// 検索する際、「調」ボタンを押した時
*find

stop



◆実行画面

左図は上記ソースを実行した画像です。
今のところ、各ボタンを押した時のラベルにはstopを書いているので動作はしません。

ソースの中に「//」というのがありますが、それ以降1行はプログラムとして扱われません。自分で書く場合のちょっとしたメモ等書くのに使われます。
他にも同様に「;」があります。
また、
/*
なんとか
かんとか
*/
と複数行にわたってコメントを書くことも出来ます。

実際コメントが多くて長くなりましたが、以前書いたコメントは極力書かないようにします。

今回は見かけだけ完成?したところで終わります。
コメント ( 0 ) | Trackback ( 0 )

うっかり

一覧リスト:HSP Ver2.61 ブログ関連 ・・・ 人気blogランキング



///////////////////////////////////////////////////////////////////////

前回HSPの記事を書きましたが、環境を書き忘れました。

OSはWINDOWS XPです。

現在のHSP最新バージョンは、Ver3.0ですが、私はVer2.61を使用しています。

以前、使用していたこともあって移行してないだけですが、、、

(※公式ホームページでは、HSP3.0を推奨しています。)

一部命令の書式が変わったり、新しい機能が増えているようです。

///////////////////////////////////////////////////////////////////////

◆プログラミングメモ

前回は、3Dっぽい表示をチャレンジしてみましたが

今回はそれをおいておいてなにやら便利そうなものを

作ってみたいと思います。

今後作るなにかに役立つかな程度のものです。

(※初歩的な事を書きますが、それは自分が後から見るためのメモです。
もし、それが役立つ事ならいいのですが・・)

-----------------------------------------------------------------------
「 目標 」
あるテキストから、ユーザーが選ぶ任意の文字を検索してリストアップする。
入力書式を決めて、リストアップから色々な情報を取得する(これはおまけ)。

「 結局それって何? 」
例 1)
例えば、HSPのエディタを使用しています。
自分で作ったラベルがたくさんあるとします。
そのラベルの位置を取得して、その場所を表示します。
・・・ですが、HSPにもF11キーでその機能はすでにあります。

例 2)
例えば、テキストで日記を書いているとします。
任意のキーワードをリストアップしてその場所を表示します。
・・・ですが、メモ帳の検索でもいいのでは?

と、考えるとろくな事がないので次進みます。
-----------------------------------------------------------------------

①メイン画面を表示させてみる

//以下ソースコード
//これはAPIを使う為のおまじないです
//APIとは・・・ウィンドウズが用意してくれてる命令です
#include "llmod.as"

// screen は画面を作る命令です。0 と 2~31までの31個のウィンドウを
// 作成する事ができます。
// screen 1,2,3,4,5,6,7,8
// 1はスクリーンの番号です。0~31(1は使わない事)が使えます。
// 2は横幅 3は縦幅 ・・・後はヘルプ参照 1以外は省略可能です
screen 0,200,400

//stop ここでプログラムが停止したままになります
//ボタンが押された等で別の命令が出た場合はこの命令は無視されます
stop
//ソースコードここまで


//以下ソースコード から //ソースコードここまでの間をコピーして
F5を押すと
横200 縦400のウィンドウが現れたと思います。
もしstopがなければ、表示した瞬間に(恐らく見えないレベル)
プログラムは終了します。

何もしてませんが・・・今日はこれでおしまいです。
コメント ( 0 ) | Trackback ( 0 )

HSPって?

一覧リスト:HSP Ver2.61 ブログ関連 ・・・ 人気blogランキング



HSPって?
リンク: HSPオフィシャルホームページ

HSP(Hot Soup Processor) はフリーのスクリプト言語システムです
簡単に覚えられる強力な命令セットを付属エディタですぐに使い始めることができます
高速な動作をする中間言語処理インタプリタを搭載
作ったプログラムやデータを一括してEXEファイル、スクリーンセーバーに変換できます
作ったプログラムは自由に再配布が可能、ライセンス料も不要です
拡張プラグイン・モジュールにより数多くの機能を追加可能です
5年以上に渡る多くのユーザー資産と使用実績があります
詳細なマニュアルとリファレンスヘルプシステムを装備
プログラミング初心者にも敷居の低いシンプル設計と操作
インタプリタならではの豊富なデバッグ支援システムを装備
(※一部抜粋)


簡単にソフトを作成することができるようなので

ヘルプを見ながらゆっくりとソフトでも作っていく予定です


プログラミングメモ


◆画像を利用して3Dっぽく表示するテスト

まず1枚の絵を用意します(64×64の画像を横に3つ並べています)
へたくそな絵ですがこの際気にしません


主に使用した命令は
gsel
     作成したウィンドウの指示先変更
buffer
     不透明のウィンドウを作成 主に画像処理等に利用
gmode
     コピーの仕方を指定(透明コピー等ができます)
gcopy
     指定先ウィンドウに画像を表示   
gzoom
     画像を変倍コピー
・・・等です

以下 テスト画像


repeat~loopとif文を多用しまくってしまったので

動くか疑問でしたがどうやら大丈夫のようです

(キーボード又はマウスでマップ移動できるようになっています)

今後 小さなバグや計算ミスがあるので見直していく予定です

コメント ( 0 ) | Trackback ( 0 )
« 前ページ 次ページ »