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

ボタンに画像表示(HSP)

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



◆HSPプログラミングメモ
●ボタンに絵を貼り付ける
① 「misc.as」をインクルードする
② ボタンを作成する
③ 「btnimg」命令を使用する
btnimg n1, n2, n3, n4, n5, n6
n1 : イメージを貼りつけるボタンのID(0~63)
n2 : イメージが描画されているウィンドウのID(0~7)
n3 : イメージの位置
n4 : イメージの位置
n5 : イメージの幅
n6 : イメージの高さ
ボタンに画像を貼り付けるサンプル
使用画像ファイル
ファイル名: btntest.JPG
画像サイズ: 200×50
#include "llmod.as"

// 「btnimg」命令を使用する為
#include "misc.as"
    //ボタンに貼り付ける画像を、buffer 2 に用意する
    buffer  2 : picload "btntest.JPG"
    screen 0,200,100 : title "btnimg TEST"
    color : boxf 0 , 50 , 200 , 100
    objsize 50,50
    repeat 4
        pos cnt*50,0 : button "",*btnclick
        btnimg cnt , 2 , cnt*50 , 0 , 50 , 50
    loop
stop

// ボタンを押した時の処理
*btnclick
    sdim data,64
    //statにボタンIDが代入される
    objsel -1
    if stat=0 : data="丸が押されました"
    if stat=1 : data="三角が押されました"
    if stat=2 : data="四角が押されました"
    if stat=3 : data="星が押されました"
    color : boxf 0 , 50 , 200 , 100
    color 255 , 255 , 255 : pos 10 , 64 : mes ""+data
stop
実行結果



★文字検索ソフト作成記録
◆間違いの手直し
  1. 「*findlist」ルーチン内の if listdata!="" : objprm 4,listdata
    if listdata=!"" は必要ありません。

◆変更点
  1. ボタンに画像を貼り付ける。
  2. ウィンドウの初期化エリアの変更。
    現在ウィンドウのサイズ変更ができません。
    今後可能なようにする為の前準備です。
  3. テキストデータの選択の際、ウィンドウ内で情報表示
    することで判りやすくする。
  4. 現在、テキストファイルを開く際に一度ウィンドウを
    作り直しています。作り直さず、mesboxを使用しない
    場合はウィンドウの奥に隠します(邪道?)。



☆実行画面
起動画面

選ボタンから、HSPヘルプ(width)をクリックした時の画面
※取得したテキストを表示しています。




☆ソースコード
青の部分は追加したコード、赤の部分は変更したコードです。
ソフト名未定
HSP Ver2.61
内容任意のテキストを検索
btnimg.JPG
(60×20)
ソース
/////////////////////////////////////////////////////////
// インクルード
    #include "llmod.as"
    //「btnimg」使用の為
    #include "misc.as"

/////////////////////////////////////////////////////////
// ボタンイメージ読込
    buffer 2 : picload "btnimg.JPG"

/////////////////////////////////////////////////////////
// メインウィンドウの作成
    //dispx:ディスプレイ横幅(システム変数)
    //dispy:ディスプレイ縦幅(システム変数)
    screen 0,dispx,dispy
    width 160,340
    title "テスト"
    objsize 20,20
    pos 0,0 : button "開",*fileopen  //ID:0
    btnimg 0,2,0,0,20,20
    pos 20,0 : button "選",*textselect  //ID:1
    btnimg 1,2,20,0,20,20
    sdim ftext,64 : pos 40,0 : input ftext,100,20,64 //ID:2
    pos 140,0 : button "調",*find  //ID:3
    btnimg 3,2,40,0,20,20
    //dim listno
    listno=-1 : listno2=-1
    sdim listdata,1024
    objsize 160,320
    pos 0,20 : listbox listno,0,listdata  //ID:4
    sdim str1,1024
    sdim str2,1024
    sdim editdata,65536
    sdim editdata2,65536
    //mesbox を作成するが見えないようにする
    pos -10,-10 : mesbox editdata,0,0,5,65536
    //mesboxの状態変数
    mbflag=0

/////////////////////////////////////////////////////////
// メインループ
*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
        if strsize < 0:goto *main
        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 5:hedit=stat
        //mesboxを移動
        if mbflag=0{
            width winx+200
            prm=hedit,160,0,200,winy,1
            dllproc "MoveWindow",prm,6,D_USER
            mbflag=1
        }
        notesel editdata
        noteload refstr
        objprm 5,editdata
    }
    gosub *findlist
goto *main

/////////////////////////////////////////////////////////
// 「選」のボタンを押した時
*textselect
    //dialog "OKを押した後、テキストをクリックして下さい",0,"確認"
    
    //screen 0 を隠す
    gsel 0,-1
    //screen 3 にマウス下の情報を表示
    screen 3,400,225 : title "テキストを左クリックして下さい"
    gsel 3,2
    //cls:ウィンドウのオブジェクトを消去して色を塗りつぶす
    cls 1
    //現在選択しているテキストを取得
    if hedit!=0{
        prm=hedit,0x000D,65536
        getptr prm.3,editdata2
        dllproc "SendMessageA",prm,4,D_USER
    }
    pos 2,3 : mes "取得テキスト:"
    pos 0,25 : mesbox editdata2,400,200
    objsize 60,25
    pos 260,0 : button "決定",*wnd3ok
    pos 330,0 : button "取消",*wnd3cancel

    //bmscrにウィンドウ情報が入ります
    mref bmscr,67

    //repeat ※breakで抜けれない為
    *wnd3loop
        stick st,0,0
        //フォアグラウンドウィンドウハンドル取得
        //screen 3がアクティブの時は何もしない
        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{
                //sdim editdata,65536
                prm=hedit,0x000D,65536
                getptr prm.3,editdata2
                dllproc "SendMessageA",prm,4,D_USER
                objprm 0,editdata2
                //gosub *findlist
                //break
            }
        }
        wait 10
    goto *wnd3loop
    //loop
//goto *main

*wnd3ok
    //mbflagが1の時はmesboxを隠す
    if mbflag=1{
        gsel 0
        width winx-200
        _hspobjhandle 5
        prm=stat,-10,-10,0,0,1
        dllproc "MoveWindow",prm,6,D_USER
        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
    /* if listdata!="" : */objprm 4,listdata
return




このページはHSP勉強中のメモです
不具合が起こらない様に配慮はしていますが
各ソースの使用は各自の責任においてご利用お願いします
コメント ( 0 ) | Trackback ( 0 )
« 前の記事へ ウィンドウサ... »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。