hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
リストビューいろいろ - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

リストビューいろいろ [hsp3]

リストビューの使い方についてのまとめ。
ちょくとさんのサイトへのリンクがメインで、ここでは補足を行います。

winobjを使って作成

HSP3.1にはリストビューを作る専用の命令は用意されていません。 winobj命令またはWin32API(CreateWindowEx?)を利用する必要があります。通常はwinobjで充分でしょう。

  1
 
    winobj "SysListView32", "ListView", <拡張ウィンドウスタイル>, <ウィンドウスタイル>

拡張ウィンドウスタイルおよびウィンドウスタイルについては、ちょくとさんのサイトに詳しい説明があります。 通常はウィンドウスタイルとしてWS_VISIBLEおよびWS_CHILDを指定すれば良いでしょう。

ウィンドウスタイル(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/prm/window_style.html
拡張ウィンドウスタイル(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/prm/extended_window_style.html

ただ作成しただけでは行も桁もないので利用できません。 まず桁を追加し、その後でアイテム(行)を追加していきます。

カラム(桁)の追加

カラムの追加にはLVM_INSERTCOLUMNメッセージおよびLVCOLUMN構造体を利用します。

LVM_INSERTCOLUMN(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/message/LVM_INSERTCOLUMN.html
LVCOLUMN構造体(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/struct/LVCOLUMN.html
  1
  2
  3
 
 
 
#define LVM_INSERTCOLUMN        $0000101B
 
    sendmsg <リストビューのハンドル>, LVM_INSERTCOLUMN, <新しく挿入するカラムの位置>, <新しいカラムの情報を格納したLVCOLUMN構造体のアドレス>

アイテムの追加

アイテムの追加にはLVM_INSERTITEMメッセージおよびLVITEM構造体を利用します。

LVM_INSERTITEM(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/message/LVM_INSERTITEM.html
LVITEM構造体(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/struct/LVITEM.html
  1
  2
  3
 
 
 
#define LVM_INSERTITEM          $00001007
 
    sendmsg <リストビューのハンドル>, LVM_INSERTITEM, 0, <新しいアイテムの情報を格納したLVITEM構造体のアドレス>

サブアイテムの追加

サブアイテムの追加はLVM_SETITEMメッセージおよびLVITEM構造体を利用します。

LVM_SETITEM(ちょくとのページ)
http://chokuto.ifdef.jp/urawaza/message/LVM_SETITEM.html
  1
  2
  3
 
 
 
#define LVM_SETITEM             $00001006
 
    sendmsg <リストビューのハンドル>, LVM_SETITEM, 0, <新しいサブアイテムの情報を格納したLVITEM構造体のアドレス>

リストビューの項目を取得

リストビューの項目を取得するにはLVM_GETITEMTEXT(A)メッセージおよびLVITEM構造体を利用します。

LVM_GETITEMTEXT(A) $0000102D

wparam
取得したいアイテムのインデックス
lparam
取得結果が格納されるLVITEM構造体のアドレス

lparamで指定するLVITEM構造体には、取得した文字列を代入する変数のアドレスおよびサイズを代入しておく必要があります。
具体的には

  • pszTextメンバにvarptr(<代入先変数>)を代入
  • cchTextMax?メンバに<代入先変数のサイズ>を代入

すればOKです。

  1
  2
  3
  4
  5
  6
 
 
 
 
 
 
#define LVM_GETITEMTEXTA        $0000102D
 
    <代入先変数> = ""        // 文字列型として初期化
    <取得結果が格納されるLVITEM構造体のpszTextメンバ> = varptr(<代入先変数>)
    <取得結果が格納されるLVITEM構造体のcchTextMaxメンバ> = <代入先変数のサイズ>
    sendmsg <リストビューのハンドル>, LVM_GETITEMTEXTA, <アイテムのインデックス>, <取得結果が格納されるLVITEM構造体のアドレス>

アイテムの並べ替え(ソート)

ソートに利用できる主なメッセージには2種類ありますが、ここではLVM_SORTITEMSEXメッセージについて扱います。

なお、HSP3.1から利用するにはコールバック関数DLL「hscallbk.dll」が必要です。

コールバック関数実装プラグイン hscallbk.dll for HSP3(ちょくとのページ)
http://yokohama.cool.ne.jp/chokuto/download/index.html#hscallbk

LVM_SORTITEMSEX $00001051

wparam
比較する関数に渡す数値(任意)
lparam
比較する関数のアドレス

リストビューにLVM_SORTITEMSEX関数を送る際、lparam(sendmsg命令の第4引数)に比較する関数のアドレスを指定しなければなりません。

比較する関数は3つの引数(すべて整数型)を受け取り、比較した結果を整数で返す必要があります。

第1引数&第2引数
比較するアイテムのインデックス
第3引数
LVM_SORTITEMSEXメッセージのlparam
戻り値
比較した結果

リストビューにLVM_SORTITEMSEXメッセージを送ると、すべてのアイテムから自動的に比較すべき2つを選び出して比較・並べ替えを行います。

比較する関数の戻り値が0より大きい場合のみ、2つのアイテムは交換されます。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#define LVM_SORTITEMSEX         $00001051
#include "hscallbk.as"
#uselib ""
#func _compare "" int, int, int
    // リストビューの作成
    // カラムの追加
    // アイテム・サブアイテムの追加
    setcallbk proc, _compare, *compare
    sendmsg <リストビューのハンドル>, LVM_SORTITEMSEX, <任意の値>, varptr(proc)
    stop
 
// 常に交換する = 逆に並べ替える
*compare
    return 1

アイテムの検索

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2012-01-27 (金) 14:54:07 (681d)