特にテーマは無く雑記かな。 最近は自分用メモが増えてきましたけど。
スポンサーサイト
--年--月--日 (--) | 編集 |
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


HSP2.61の小技その3
2006年04月08日 (土) | 編集 |
今回はリストビュー上でのクリックを認識する方法です。
ここではウィンドウメッセージを取得します。少し難しくなるかもしれません。

ウィンドウメッセージの取得は、HSP2.61では難しい(今回の内容はプラグイン無しでは無理のようです)ので、そこで「HSP拡張プラグイン hsgetmsg Ver1.41」を使用します。
このプラグインは、ちょくとさんのページよりダウンロードできます。私もいつも使用させて頂いています。

ちょくとさんによる「HSPの裏技??」というページに、ウィンドウメッセージについても詳しく書いてあります。
今回の小技はここに書いてある知識を利用したものです。

ちょくとのページ

それでは、HSP2.61の記事ですが、宜しければ続きをどうぞ。

まずは具体的なスクリプトを示します。
#include "llmod.as"
#include "listview.as"
#include "hsgetmsg.as"
#include "menu.as"
#define WM_NOTIFY $0000004E
#define NM_CLICK $FFFFFFFE ; ユーザーがコントロール内で左クリックした
#define NM_DBLCLK $FFFFFFFD ; ユーザーがコントロール内で左ダブルクリックした
#define NM_RETURN $FFFFFFFC ; コントロールが入力フォーカスを持った状態でユーザーがリターンキーを押した
#define NM_RCLICK $FFFFFFFB ; ユーザーがコントロール内で右クリックした
#define NM_RDBLCLK $FFFFFFFA ; ユーザーがコントロール内で右ダブルクリックした

    screen 0,640,480,0
    set_subclass:hwnd=stat
    set_notify NM_RCLICK
    listview 320,240,1:hlistview=stat

*msgloop
    wait 1
    get_message msgval
    if msgval.0==hwnd{
        if msgval.1==WM_NOTIFY{
            if msgval.4==hlistview{
                if msgval.6==NM_RCLICK{
                    ginfo 0:track_sysmenu prmx,prmy
                }
            }
        }
    }
    goto msgloop
#includeで使用しているスクリプトのうち、llmod.asとlistview.asはHSP2.61に添付されているもので、hsgetmsg.asとmenu.asはhsgetmsgのものを使用しています。

このスクリプトを実際に実行し、ウィンドウの左上部分に表示されたリストビューを右クリックしてみて下さい。するとシステムメニューが表示されたと思います。
リストビュー上で右クリックされたと認識した時に、メニューが表示されるようになっています。

スクリプトでは最初にset_subclassでウィンドウをサブクラス化し、set_notifyで受信できるメッセージを指定しています。ここでは右クリックだけしか認識できなくて良いので、左クリック等は指定していません。
なお、set_subclass命令やset_notify命令についての説明は省きます。詳しくは「HSPの裏技??」の「ウィンドウメッセージを取得してみる」という記事を読んで貰えれば良いかな。私は説明できる程に分かっていませんしね。
そしてget_message命令でメッセージを取得しmsgvalに代入しています。ここでmsgval.4以降はNMHDR構造体の内容が代入されます。

動作はまず、リストビュー等のオブジェクトがクリックされると、親ウィンドウにはWM_NOTIFYメッセージが送られます。そしてNMHDR構造体にオブジェクトが操作された内容が代入されます。
今回は、メッセージとNMHDR構造体内の内容から、リストビューがクリックされたと判断しています。
msgval.0には親ウィンドウハンドルが、msgval.1にはWM_NOTIFYが代入されます。そしてNMHDR構造体の内容であるmsgval.4には右クリックされたオブジェクトのハンドルが、msgval.6にはNM_RCLICKが代入されます。

もし左クリックやダブルクリックなどを認識したい場合は、NM_CLICKやNM_DBLCLKなどをset_notify命令で指定すれば、後は同様にして認識する事ができるようになります。

ちなみにこの小技は、「HSPの裏技??」の「タブコントロールを作成してみる」という記事での内容と同じような事をしています。
詳しい説明は、やはりこちらを読んだ方が良いかもしれません。
とりあえず使いたいだけであれば、スクリプトの必要な部分を真似してしまえば良いですけど。分からなければ、まずはそのままスクリプトを使ってみて下さい。

最近はWin32APIを調べてみて自分でスクリプトを書いたりもしますが、私も最初はどこかから拾ってきたスクリプトを適当に書き換えて使っていました。
このとき、スクリプトがどんな事をやっているのか、何となくでも良いから目を通してから使うようにしていれば、そのうちだんだんと分かってくると思います。趣味でやるだけなら、それでも良いと思いますしね。

…と書いて、分かりやすい説明をするのは逃げておきます。
この小技はそもそも、ふかふかが実現させたいと言っていた内容なので書いてみましたけど、説明をするには難しいですね。
スポンサーサイト

コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。