【HSP3.x 移植版】『HSPの裏技』リストビューを作成してみる ACT-1

『HSPの裏技』リストビューを作成してみる ACT-1(HSP2.x 版)をHSP3.x バージョンへ書き換えたものです。
http://chokuto.ifdef.jp/urawaza/listview1.html

前のが間違ってたので書き直し(3回目・・・)

『HSPの裏技』リストビューを作成してみる ACT-1(HSP2.x 版)をHSP3.x バージョンへ書き換えたものです。
http://chokuto.ifdef.jp/urawaza/listview1.html

前のが間違ってたので書き直し(3回目・・・)

  • タグ:
  • タグはありません
;【HSP3.x 移植版】
;『HSPの裏技』リストビューを作成してみる ACT-1
; http://chokuto.ifdef.jp/urawaza/listview1.html

#module ;============= リストビュー操作モジュール ===============

#uselib "comctl32.dll"
#func InitCommonControlsEx "InitCommonControlsEx" int

; 各種定数定義
#define ICC_LISTVIEW_CLASSES    4

#define WS_CHILD    0x40000000
#define WS_VISIBLE  0x10000000
#define LVS_REPORT  0x0001

#define LVM_SETITEM         0x1006
#define LVM_INSERTITEM      0x1007
#define LVM_INSERTCOLUMN    0x101B

#define LVCF_FMT        0x0001
#define LVCF_WIDTH      0x0002
#define LVCF_TEXT       0x0004
#define LVCF_SUBITEM    0x0008

#define LVIF_TEXT       0x0001

; (外部から参照できるように global 指定)
#define global LVCFMT_LEFT      0x0000
#define global LVCFMT_RIGHT     0x0001
#define global LVCFMT_CENTER    0x0002

; リストビュー作成
#deffunc CreateListView int sx, int sy
    ; コモンコントロールライブラリの初期化
    initinfo = 8, ICC_LISTVIEW_CLASSES
    InitCommonControlsEx varptr(initinfo)

    ; リストビューの作成
    styleFlags = WS_CHILD | WS_VISIBLE | LVS_REPORT
    winobj "SysListView32", "", 0, styleFlags, sx, sy
    return

; リストビューに列を追加
#deffunc InsertListViewColumn int objID, int index, str text, int align, int pixels
    textbuf = text
    ; LVCOLUMN 構造体をセット
    dim lvcolumn, 8
    lvcolumn(0) = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM
    lvcolumn(1) = align
    lvcolumn(2) = pixels
    lvcolumn(3) = varptr(textbuf)
    ; LVM_INSERTCOLUMN メッセージ送信
    sendmsg objinfo_hwnd(objID), LVM_INSERTCOLUMN, index, varptr(lvcolumn)
    return

; リストビューに項目追加
#deffunc InsertListViewItem int objID, int index, str text
    textbuf = text
    ; LVITEM 構造体をセット
    dim lvitem, 13
    lvitem(0) = LVIF_TEXT
    lvitem(1) = index
    lvitem(5) = varptr(textbuf)
    ; LVM_INSERTITEM メッセージ送信
    sendmsg objinfo_hwnd(objID), LVM_INSERTITEM, 0, varptr(lvitem)
    return

; リストビューの項目またはサブ項目テキスト設定
#deffunc SetListViewItemText int objID, int index, int subitem, str text
    textbuf = text
    ; LVITEM 構造体をセット
    dim lvitem, 13
    lvitem(0) = LVIF_TEXT
    lvitem(1) = index
    lvitem(2) = subitem
    lvitem(5) = varptr(textbuf)
    ; LVM_SETITEM メッセージ送信
    sendmsg objinfo_hwnd(objID), LVM_SETITEM, 0, varptr(lvitem)
    return

#global ;================= モジュール終わり =====================


    pos 0, 0
    CreateListView ginfo_winx, ginfo_winy
    listviewID = stat

    InsertListViewColumn listviewID, 0, "名前", LVCFMT_LEFT, 100
    InsertListViewColumn listviewID, 1, "読み", LVCFMT_LEFT, 200

    InsertListViewItem listviewID, 0, "在原業平"
    SetListViewItemText listviewID, 0, 1, "ありわらのなりひら"

    InsertListViewItem listviewID, 1, "僧正遍昭"
    SetListViewItemText listviewID, 1, 1, "そうじょうへんじょう"

    InsertListViewItem listviewID, 2, "喜撰法師"
    SetListViewItemText listviewID, 2, 1, "きせんほうし"

    InsertListViewItem listviewID, 3, "大伴黒主"
    SetListViewItemText listviewID, 3, 1, "おおとものくろぬし"

    InsertListViewItem listviewID, 4, "文屋康秀"
    SetListViewItemText listviewID, 4, 1, "ふんやのやすひで"

    InsertListViewItem listviewID, 5, "小野小町"
    SetListViewItemText listviewID, 5, 1, "おののこまち"

    stop