waiei -blog-

その日の出来事を簡単に紹介する日記

スポンサーサイト

--------------:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

メイン鯖終了のお知らせ

2010-08-26-Thu-23:30
明日誕生日!8/27は誕生日!明日誕生日!

Web拍手レス
お久しぶりです~^^
今作もライバル登録させていただきました~。
よろしくお願いしますー。
ゆんさん
おひさしぶりですー。
こちらからも登録させていただきましたー。
あいかわらずライバルに登録した人の大半に
大差でスコアが負けてるんですよねー…。
だが、今回CANDY☆EXPは996kで
そんじょそこらの筐体トップよりも高くて自信が
…ってうわああああ負けてるううう




こんにちはー、明日誕生日のA.Cです。

明日誕生日!8/27は誕生日!明日誕生日!
ついにインフォサーバーが終わってしまいますねー。
コレを気に有料サーバーへ移動するのもいいかもしれませんねー。
とりあえず、移転先が決まるまではブログのみの運営になります。
正確に言うとチルティの置いてあるヤフーサーバーと
かつてのBMS置き場の忍者サーバーが残っていますが。

明日誕生日!8/27は誕生日!明日誕生日!

DDR X2、sakura stormがコース限定ですが解禁されましたね!
早速明日踏んでこようかと思います。

それにしても一向に888を踏むチャンスががが。

明日誕生日!8/27は誕生日!明日誕生日!
[日記][日記マンガ][誕生日]
スポンサーサイト

HSPでタスクバープログラミング

2010-08-02-Mon-13:00
Web拍手レス
どうも。
Stepmania用の矢印を作ってみたのですが、リフトのデザインを
A.Cさんの「YA_SOLO2」のリフトデザインを
模倣したものにしてしまいました。
すいません
(D.J.Sinさん)
どうもですー。
まあ、矢印を踏むな的な画像と言えばあー言うデザインになるのは
仕方ないと思いますけどねー。




HSPでWindows7のタスクバープログラミング!

はい、どうもこんにちは。A.Cです。
久々の更新ですが今回はHSP系の小ネタを書いていこうかと思います。
たまに参考記事でリンクされることあるみたいなんで
今回からHSP系の話はいつもの日記と混ぜずに別記事にしています。

・タスクバープログラミングとは
Win7からタスクバーのデザインが一新されていろいろ弄れるようになりました。
まあこの辺はMSのサイトでも見てもらったほうが早いんですけどね。
この辺とか。

・COMコンポーネントの登録
このタスクバープログラミング、Aero機能やGDI+などみたいに
Win32 APIを呼び出してうんたらと言うやり方が出来ないんで
COMコンポーネントを利用します。
ちなみに、インターフェースIDやクラスID、メソッドindex値の調べ方は
イノビアさんのHSP3.x講座に載っていたので参考にしました。(ありがたやー)
とりあえず、今回使う分だけ登録するとこんな感じ
#define CLSID_TaskbarList "{56FDF344-FD6D-11d0-958A-006097C9A090}"
#define IID_ITaskbarList3 "{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}"

#include "user32.as"
#usecom ITaskbarList3 IID_ITaskbarList3 CLSID_TaskbarList
#comfunc ITaskbarList3_SetProgressValue 9 int,double,double
#comfunc ITaskbarList3_SetProgressState 10 int,int
#comfunc ITaskbarList3_ThumbBarAddButtons 15 int,int,int
#comfunc ITaskbarList3_SetOverlayIcon 18 int,int,wstr

#define THB_BITMAP    0x00000001
#define THB_ICON      0x00000002
#define THB_TOOLTIP   0x00000004
#define THB_FLAGS     0x00000008
#define THBN_CLICKED        0x1800

#define TBPF_NOPROGRESS     0x00000000
#define TBPF_INDETERMINATE  0x00000001
#define TBPF_NORMAL         0x00000002
#define TBPF_ERROR          0x00000004
#define TBPF_PAUSED         0x00000008

    screen 0,400,80
    pos 10,10:font "meiryo",16
    mes "HSPでタスクバープログラミング!"
    newcom iTask3, ITaskbarList3
    onexit *e
    stop
*e
    delcom iTask3
    end


ITaskbarList3のメソッドインデック値は
ITaskbarListとITaskbarList2も含めて数えるので9からになります。
さて、登録してる命令からわかるように、
今回はオーバーレイアイコンとプログレスバー、
縮小表示ツールバーを実装してみます。

・オーバーレイアイコン
タスクバーのアイコンサイズが32x32以上の場合、
その上に小さなアイコンを重ねて表示させることができます。
たとえば、お馴染みメッセンジャーの場合
オンライン時
オンライン
取り込み中
取り込み中
とまあ、本来の人型アイコンの上に色のついた四角形アイコンを重ねています。
これは、LoadImageなどで読み込んだアイコンを
SetOverlayIconで登録させるだけです。
#define CLSID_TaskbarList "{56FDF344-FD6D-11d0-958A-006097C9A090}"
#define IID_ITaskbarList3 "{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}"

#include "user32.as"
#usecom ITaskbarList3 IID_ITaskbarList3 CLSID_TaskbarList
#comfunc ITaskbarList3_SetProgressValue 9 int,double,double
#comfunc ITaskbarList3_SetProgressState 10 int,int
#comfunc ITaskbarList3_ThumbBarAddButtons 15 int,int,int
#comfunc ITaskbarList3_SetOverlayIcon 18 int,int,wstr

#define THB_BITMAP    0x00000001
#define THB_ICON      0x00000002
#define THB_TOOLTIP   0x00000004
#define THB_FLAGS     0x00000008
#define THBN_CLICKED      0x1800

#define TBPF_NOPROGRESS     0x00000000
#define TBPF_INDETERMINATE  0x00000001
#define TBPF_NORMAL         0x00000002
#define TBPF_ERROR          0x00000004
#define TBPF_PAUSED         0x00000008

    screen 0,400,80
    pos 10,10:font "meiryo",16
    mes "HSPでタスクバープログラミング!"
    newcom iTask3, ITaskbarList3

    ;----アイコンハンドルの取得
    LoadImage 0,32513,1,16,16,0x8000
    hIco=stat

    ;----オーバーレイアイコン
    ITaskbarList3_SetOverlayIcon iTask3,hwnd,hIco,""

    onexit *e

    stop
*e
    delcom iTask3
    DestroyIcon hIco
    end


実行結果はこちら
オーバーレイアイコン
ね、簡単でしょ?
ホントは、ハンドルの取得に成功しているかどうか
チェックするべきなんですけど長くなるんで省略。





続きー。

・プログレスバー
作業が何%完了したのか示すアレです。
最近のMediaPlayerClassicでも採用されています。
(あれは使い方間違ってるような気がしないでもないが)
task_prg.jpg
これはSetProgressValueというそのまんまな物を使います。
ただ、現在の値と最大値の指定はULONGLONG型、
つまり64ビット符号なし整数という誰得な型を使うため
HSP側からの指定には少し工夫が要ります。
簡単に言うと、lpokeで直接書き込む。
#define CLSID_TaskbarList "{56FDF344-FD6D-11d0-958A-006097C9A090}"
#define IID_ITaskbarList3 "{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}"

#include "user32.as"
#usecom ITaskbarList3 IID_ITaskbarList3 CLSID_TaskbarList
#comfunc ITaskbarList3_SetProgressValue 9 int,double,double
#comfunc ITaskbarList3_SetProgressState 10 int,int
#comfunc ITaskbarList3_ThumbBarAddButtons 15 int,int,int
#comfunc ITaskbarList3_SetOverlayIcon 18 int,int,wstr

#define THB_BITMAP    0x00000001
#define THB_ICON      0x00000002
#define THB_TOOLTIP   0x00000004
#define THB_FLAGS     0x00000008
#define THBN_CLICKED      0x1800

#define TBPF_NOPROGRESS     0x00000000
#define TBPF_INDETERMINATE  0x00000001
#define TBPF_NORMAL         0x00000002
#define TBPF_ERROR          0x00000004
#define TBPF_PAUSED         0x00000008

    screen 0,400,80
    pos 10,10:font "meiryo",16
    mes "HSPでタスクバープログラミング!"
    newcom iTask3, ITaskbarList3

    onexit *e

    ddim c,1    ;現在位置
    ddim m,1    ;最大値
    lpoke m,0,100   ;直接書き込む
    repeat 100
    lpoke c,0,cnt
    ITaskbarList3_SetProgressValue iTask3,hwnd,c,m
    title ""+lpeek(c,0)+"%"
    wait 10
    loop
    lpoke c,0,lpeek(m,0)
    ITaskbarList3_SetProgressValue iTask3,hwnd,c,m
    title "完了"

    stop
*e
    delcom iTask3
    DestroyIcon hIco
    end


実行結果
task_prg_hsp.jpg

エラー時など、特殊状態にしたい場合はSetProgressStateメソッドを呼ぶ。
    ITaskbarList3__SetProgressState iTask3,hwnd,TBPF_INDETERMINATE

未確定時

    ITaskbarList3__SetProgressState iTask3,hwnd,TBPF_PAUSED

一時停止時

    ITaskbarList3__SetProgressState iTask3,hwnd,TBPF_ERROR

エラー時

・縮小表示ツールバー
メッセンジャーなど、サムネイルプレビュー上でボタン操作が出来るアレです。
task_tool.jpg
これは、まずThumbBarAddButtonsメソッドで登録し、
ボタンを押されたときにWM_COMMANDメッセージを処理します。
ただ、これに関しては2つ以上のボタンを表示しようとすると
エラーが発生するのでとりあえず1つの状態のみ。
誰か2つ以上のボタン表示解読してー(投げやり)
#define CLSID_TaskbarList "{56FDF344-FD6D-11d0-958A-006097C9A090}"
#define IID_ITaskbarList3 "{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}"

#include "user32.as"
#usecom ITaskbarList3 IID_ITaskbarList3 CLSID_TaskbarList
#comfunc ITaskbarList3_SetProgressValue 9 int,double,double
#comfunc ITaskbarList3_SetProgressState 10 int,int
#comfunc ITaskbarList3_ThumbBarAddButtons 15 int,int,int
#comfunc ITaskbarList3_SetOverlayIcon 18 int,int,wstr

#define THB_BITMAP    0x00000001
#define THB_ICON      0x00000002
#define THB_TOOLTIP   0x00000004
#define THB_FLAGS     0x00000008
#define THBN_CLICKED      0x1800

#define TBPF_NOPROGRESS     0x00000000
#define TBPF_INDETERMINATE  0x00000001
#define TBPF_NORMAL         0x00000002
#define TBPF_ERROR          0x00000004
#define TBPF_PAUSED         0x00000008


    screen 0,400,80
    pos 10,10:font "meiryo",16
    mes "HSPでタスクバープログラミング!"
    newcom iTask3, ITaskbarList3

    LoadImage 0,32513,1,16,16,0x8000
    hIco=stat

    onexit *e

    ;----サムネイルツールバー
    sdim tip,260    ;ツールチップに表示させる文字
    cnvstow tip,"押すなよ!"    ;Unicode文字で登録
    dim buttons,115
    buttons=THB_ICON|THB_TOOLTIP|THB_FLAGS, 0,0,hIco
    ;                   ここの値がボタンID ┘
    memcpy buttons,tip,260,16,0 ;ツールチップ内容をメモリコピー
    ITaskbarList3_ThumbBarAddButtons iTask3,hwnd,1,varptr(buttons)

    oncmd gosub *WM_COMMAND,0x111
    stop

*WM_COMMAND
    if ((wparam>>16)&0x0000FFFF)=THBN_CLICKED{
        if (wparam&0x0000FFFF)=0{   ;ボタンID
            dialog "ボタンが押されました!"
        }
    }
    return

*e
    delcom iTask3
    DestroyIcon hIco
    end


実行結果
task_tool_hsp.jpg

これでツール系ソフト作るときに
ちょっと便利な機能を付けることができるかもですね!




あー、それにしても久しぶりにまともな日記だw

[HSP]
HOME
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。