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

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

LVM_GETITEM の代わりに LVM_GETITEMTEXT を使うなど、一部変更しているところあり。

前のが間違ってたので書き直し

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

LVM_GETITEM の代わりに LVM_GETITEMTEXT を使うなど、一部変更しているところあり。

前のが間違ってたので書き直し

  • タグ:
  • タグはありません
;HSP3.x
;HSP ACT-2
; http://chokuto.ifdef.jp/urawaza/listview2.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_DELETEITEM 0x1008
#define LVM_INSERTCOLUMN 0x101B
#define LVM_GETNEXTITEM 0x100C
#define LVM_GETITEMTEXT 0x102D
#define LVCF_FMT 0x0001
#define LVCF_WIDTH 0x0002
#define LVCF_TEXT 0x0004
#define LVCF_SUBITEM 0x0008
#define LVIF_TEXT 0x0001
#define LVNI_SELECTED 0x0002
; ( 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
;
#defcfunc GetListViewItemText int objID, int index, int subitem
; LVITEM
dim lvitem, 13
lvitem(2) = subitem
textbufsize = 256
;
repeat
sdim textbuf, textbufsize
lvitem(5) = varptr(textbuf)
lvitem(6) = textbufsize
; LVM_GETITEMTEXT
sendmsg objinfo_hwnd(objID), LVM_GETITEMTEXT, index, varptr(lvitem)
if stat < textbufsize - 1 : break
textbufsize *= 2
loop
return textbuf
;
#deffunc DeleteListViewItem int objID, int index
; LVM_DELETEITEM
sendmsg objinfo_hwnd(objID), LVM_DELETEITEM, index, 0
return
;
#defcfunc GetSelectedListViewItem int objID, int startIndex
; LVM_GETNEXTITEM
sendmsg objinfo_hwnd(objID), LVM_GETNEXTITEM, startIndex, LVNI_SELECTED
return stat
#global ;================= =====================
objsize ginfo_winx / 2, 25
pos 0, 0
button gosub "", *OnShowInfoButtonClicked
pos ginfo_winx / 2, 0
button gosub "", *OnDeleteButtonClicked
pos 0, 25
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
*OnShowInfoButtonClicked
;
; ()
index = -1
repeat
index = GetSelectedListViewItem(listviewID, index)
if index == -1 : break
name = GetListViewItemText(listviewID, index, 0)
reading = GetListViewItemText(listviewID, index, 1)
message = "Index: " + index + "\nName: " + name + "\nReading: " + reading
dialog message, 0, ""
loop
return
*OnDeleteButtonClicked
;
; ()
index = -1
repeat
index = GetSelectedListViewItem(listviewID, index)
if index == -1 : break
DeleteListViewItem listviewID, index
index-- ;
loop
return
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX