; ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
;	exlistview'.hsp (HSP-NEXT さくら様作) [ちょっと改造]
;
;		リストビューモジュール
;_______________________________________

;*******************************************************************************
; (exlistview.as) for HSP3.0  リストビューコントロール関連モジュール
;
;  #include する必要なプラグインやマクロファイル
;  #include "sysval.as"
;  #include "gblconst.as"
;  #include "winapi32.as"
;
;  ※下記のlibraryは、winapi32.asにまとめてあります。
;
;  #include "user32.as"
;  #include "comctl32.as"
;
;  ※モジュール番号の左側に'*'が付いているものは、ユーザー定義関数です。
;    それ以外のものは、モジュール命令となっています。
;
;-------------------------------------------------------------------------------
;
;* 1.  リストビューコントロールを作成                        (Createlstview)
;  2.  リストビューコントロール拡張スタイルの設定            (lsvexset)
;  3.  リストビューコントロールにカラムを追加                (lsvcladd)
;  4.  リストビューコントロールにアイテム追加                (lsvimadd)
;  5.  リストビューコントロールにイメージ設定                (lsvimgset)
;  6.  リストビューコントロールにサブアイテム追加            (lsvsubadd)
;  7.  リストビューコントロール表示スタイル変更              (lsvchengeview)
;  8.  リストビューコントロールの背景色を設定                (lsvsetbkcol)
;  9.  リストビューの項目のテキスト色・背景色を設定          (lsvsettxcol)
;*10.  リストビューコントロールのチエック項目状態を取得      (lsvgetcheck)
; 11.  リストビューコントロールのチエック項目を設定          (lsvsetcheck)
; 12.  リストビューコントロールのカラムを消去                (lsvcldel)
;*13.  リストビューコントロールのアイテムの数を取得          (lsvcount)
;*14.  リストビューコントロールの選択アイテム取得            (lsvfound)
; 15.  リストビューコントロールの項目を消去                  (lsvimdel)
; 16.  リストビューコントロールの項目の文字列を取得          (lsvgetstr)
; 17.  リストビューコントロールの項目の文字列を設定          (lsvsetstr)
; 18.  リストビューコントロールの項目を選択                  (lsvimsel)
; 19.  リストビューコントロールのカラムの順を設定            (lsvcolumorder)
; 20.  リストビューコントロールのカラムの幅を取得            (lsvgetclmwidth)
; 21.  リストビューコントロールのカラムの幅を設定            (lsvsetclmwidth)
;
;                                                最終更新日  2005.09.25 sakura
;*******************************************************************************

#ifdef __hsp30__
#ifndef __EXLISTVIEW__
#define __EXLISTVIEW__
#module
#defcfunc Createlstview int prm1,int prm2,int prm3,int prm4,int prm5
;*******************************************************************************
;   リストビューコントロールを作成 (Createlstview)
;
;   戻り値 : 成功 lvshwnd=リストビューハンドル, 失敗 lvshwnd<=0
;
;   ・書式     lvshwnd=Createlstview(nMode,nPosx,nPosy,nWidth,nHeight)
;   ・引数     nMode   (int) : 0〜1(0)             ソートヘッダ付加
;              nPosx   (int) : 0〜winx(pos x)      位置 x
;              nPosy   (int) : 0〜winy(pos y)      位置 y
;              nWidth  (int) : 0〜winx(objsize x)  幅
;              nHeight (int) : 0〜winy(objsize y)  高さ
;
;              nMode
;             ---------------------------------------
;                0  : LVS_NOSORTHEADERを付加する
;                1  : LVS_NOSORTHEADERを付加しない
;
;   ・タイプ   ユーザー定義関数
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lvshwnd=Createlstview(0,0,0,600,400)
;*******************************************************************************
mref bmscr,67
	nMode  = prm1 ;: if (nMode<=0)|(nMode>1)        : nMode  =0
	nPosx  = prm2 ;: if (nPosx<=0)|(nPosx>winx)     : nPosx  =bmscr(27)
	nPosy  = prm3 ;: if (nPosy<=0)|(nPosy>winy)     : nPosy  =bmscr(28)
	nWidth = prm4 ;: if (nWidth<=0)|(nWidth>winx)   : nWidth =bmscr(29)
	nHeight= prm5 ;: if (nHeight<=0)|(nHeight>winy) : nHeight=bmscr(30)

	;CommonControl初期化
;	#undef  ICC_LISTVIEW_CLASSES
;	#define ICC_LISTVIEW_CLASSES    $00000001
;	icx(0) = 8 : icx(1) = ICC_LISTVIEW_CLASSES
;	InitCommonControlsEx varptr(icx)

	;LVS_NOSORTHEADERを付加
	if nMode==1 : nStyle=LVS_NOSORTHEADER : else : nStyle=0
	dwStyle =WS_CHILD|WS_VISIBLE|LVS_REPORT|nStyle
	class ="SysListView32" : pClass=varptr(class)
	CreateWindowEx 0,pClass,0,dwStyle,nPosx,nPosy,nWidth,nHeight,hwnd,0,hinstance,0
	lvshwnd=stat : if lvshwnd==0 : return -1
return lvshwnd

#deffunc lsvexset int prm1,int prm2
;*******************************************************************************
;   リストビューコントロール拡張スタイルの設定 (lsvexset)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvexset lvshwnd,nStyle
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nStyle  (int) : 0〜(0) 拡張スタイル (const値で指定)
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvexset lvshwnd,$0005
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nStyle  = prm2 : if nStyle<=0  : nStyle=0

	; nStyle : 拡張スタイル (組合せて指定可)
	; <<<nStyleに値を直接指定すること>>>
	;---------------------------------------
	; LVS_EX_GRIDLINES         $0001
	; LVS_EX_SUBITEMIMAGES     $0002
	; LVS_EX_CHECKBOXES        $0004
	; LVS_EX_TRACKSELECT       $0008
	; LVS_EX_HEADERDRAGDROP    $0010
	; LVS_EX_FULLROWSELECT     $0020
	; LVS_EX_ONECLICKACTIVATE  $0040
	; LVS_EX_TWOCLICKACTIVATE  $0080
	; LVS_EX_FLATSB            $0100
	; LVS_EX_REGIONAL          $0200
	; LVS_EX_INFOTIP           $0400
	; LVS_EX_UNDERLINEHOT      $0800
	; LVS_EX_UNDERLINECOLD     $1000
	; LVS_EX_MULTIWORKAREAS    $2000

	;拡張スタイルを取得 (ListView_GetExtendedListViewStyle)
	SendMessage lvshwnd,LVM_GETEXTENDEDLISTVIEWSTYLE,0,0
	dwExstyle=stat : dwExstyle+=nStyle

	;拡張スタイルを設定 (ListView_SetExtendedListViewStyle)
	SendMessage lvshwnd,LVM_SETEXTENDEDLISTVIEWSTYLE,0,dwExstyle
return 0

#deffunc lsvcladd int prm1,str prm2,int prm3,int prm4,int prm5,int prm6,int prm7
;*******************************************************************************
;   リストビューコントロールにカラムを追加 (lsvcladd)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvcladd lvshwnd,String,nIndex,Image,cwidth,cfmt,Imadd
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              String  (str) : カラムヘッダー文字列 or 文字列変数
;              nIndex  (int) : 0〜(0)   項目のインデックス番号(左から0,1,2,3,...)
;              Image   (int) : 0〜(0)   追加するイメージリストの番号(通常は0)
;              cwidth  (int) : 0〜(100) カラムの幅 (const値を直接指定も可)
;              cfmt    (int) : 0〜2(0)  配置フォーマット
;              Imadd   (int) : 0〜(0)   イメージフラグ(通常は0)
;
;              cfmt
;             ---------------------
;               0  : 左に配置
;               1  : 右に配置
;               2  : 中央に配置
;
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvcladd lvshwnd,"サイト名",0,0,200,0,0
;   lsvcladd lvshwnd,"作者",1,0,100,0,0
;   lsvcladd lvshwnd,"アドレス",2,0,300,0,0
;*******************************************************************************
	lvshwnd = prm1  : if lvshwnd==0 : return -1
	ls=strlen(prm2) : if ls==0 : return -1 : else : sdim String,ls+1
	String  = prm2
	nIndex  = prm3  : if nIndex<=0          : nIndex=0
	Image   = prm4  : if Image<=0           : Image=0
	cwidth  = prm5  : if cwidth<=0          : cwidth=100
	cfmt    = prm6  : if (cfmt<=0)|(cfmt>2) : cfmt=0 
	Imadd   = prm7  : if Imadd<=0           : Imadd=0

	;  cwidth
	;  数値で直接指定 : 0〜
	;  $FFFFFFFF      : アイテムのサイズに応じて調整
	;  $FFFFFFFE      : ヘッダの文字列サイズに合わせる

	;LVCOLUMN構造体
	dim tcl,7
	; $000F = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM
	tcl(0)  = $000F|Imadd       ;mask
	tcl(1)  = cfmt|Imadd        ;fmt
	tcl(2)  = cwidth            ;cx
	tcl(3)  = varptr(String)    ;pszText
	tcl(4)  = strlen(String)    ;cchTextMax
	tcl(5)  = nIndex            ;iSubItem
	tcl(6)  = Image             ;iImage

	SendMessage lvshwnd,LVM_INSERTCOLUMN,nIndex,varptr(tcl)
	sdim String,0 : dim tcl,0
return 0

#deffunc lsvimadd int prm1,str prm2,int prm3,int prm4
;*******************************************************************************
;   リストビューコントロールにアイテム追加 (lsvimadd)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvimadd lvshwnd,String,nIndex,Image
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              String  (str) : カラムヘッダー文字列 or 文字列変数
;              nIndex  (int) : 0〜(0) 項目のインデックス番号(左から0,1,2,3,...)
;              Image   (int) : 0〜(0) 追加するイメージリストの番号(通常は0)
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvimadd lvshwnd,"HSP-NEXT",0,0
;   lsvimadd lvshwnd,"ONION software HOMEPAGE",1,0
;   lsvimadd lvshwnd,"HSP CENTER",2,0
;*******************************************************************************
	lvshwnd   = prm1 : if lvshwnd==0 : return -1
	ls=strlen(prm2)  : if ls==0 : return -1 : else : sdim String,ls+1
	String    = prm2
	nIndex    = prm3 : if nIndex<=0  : nIndex=0
	Image     = prm4 : if Image<=0   : Image=0

	;LVITEM構造体
	dim tim,9
	; $0003 = LVIF_TEXT|LVIF_IMAGE
	tim(0)  = $0003               ;mask
	tim(1)  = nIndex              ;iItem
	tim(2)  = 0                   ;iSubItem
	tim(5)  = varptr(String)      ;pszText
	tim(6)  = strlen(String)      ;cchTextMax
	tim(7)  = Image               ;iImage

	;tim(3)   state
	;tim(4)   stateMask
	;tim(8)   lParam

	SendMessage lvshwnd,LVM_INSERTITEM,0,varptr(tim)
	sdim String,0 : dim tim,0
return 0

#deffunc lsvimgset int prm1,int prm2,int prm3
;*******************************************************************************
;   リストビューコントロールにイメージ設定 (lsvimgset)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvimgset lvshwnd,Imghwnd,Imgmode
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              Imghwnd (int) : Createimglistで作成したハンドル
;              Imgmode (int) : アイコンモード
;
;              Imgmode
;             --------------------------
;                -1  :  非表示
;                 0  :  大きいアイコン
;                 1  :  小さいアイコン
;
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvimgset lvshwnd,himgwnd1,0
;   lsvimgset lvshwnd,himgwnd2,1
;*******************************************************************************
	lvshwnd   = prm1 : if lvshwnd==0 : return -1
	Imghwnd   = prm2 : if Imghwnd==0 : return -1
	Imgmode   = prm3 : if (Imgmode<-1)|(Imgmode>1) : return -1

	;リストビューにイメージリストを設定
	SendMessage lvshwnd,LVM_SETIMAGELIST,Imgmode,Imghwnd
return 0

#deffunc lsvsubadd int prm1,str prm2,int prm3,int prm4
;*******************************************************************************
;   リストビューコントロールにサブアイテム追加 (lsvsubadd)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvsubadd lvshwnd,String,nIndex,SubIndex
;   ・引数     lvshwnd  (int) : Createlstviewで作成したハンドル
;              String   (str) : サブ項目の文字列 or 文字列変数
;              nIndex   (int) : 0〜(0) 項目のインデックス番号(左から0,1,2,3,...)
;              SubIndex (int) : 1〜(1) サブ項目のインデックス番号
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvsubadd lvshwnd,"さくら",0,1
;   lsvsubadd lvshwnd,"おにたま",1,1
;   lsvsubadd lvshwnd,"うすあじ",2,1
;
;   lsvsubadd lvshwnd,"http://www.silkroad.ne.jp/sakura",0,2
;   lsvsubadd lvshwnd,"http://www.onionsoft.net/",1,2
;   lsvsubadd lvshwnd,"http://hspcenter.com/",2,2
;*******************************************************************************
	lvshwnd   = prm1 : if lvshwnd==0 : return -1
	ls=strlen(prm2)  : if ls==0 : return -1 : else : sdim String,ls+1
	String    = prm2
	nIndex    = prm3 : if nIndex<=0   : nIndex=0
	SubIndex  = prm4 : if SubIndex<=0 : SubIndex=1

	;LVITEM構造体
	dim tim,9
	; $0001 = LVIF_TEXT
	tim(0)  = $0001               ;mask
	tim(1)  = nIndex              ;iItem
	tim(2)  = SubIndex            ;iSubItem
	tim(5)  = varptr(String)      ;pszText

	SendMessage lvshwnd,LVM_SETITEM,0,varptr(tim)
	sdim String,0 : dim tim,0
return 0

#deffunc lsvchengeview int prm1,int prm2
;*******************************************************************************
;   リストビューコントロール表示スタイル変更 (lsvchengeview)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvchengeview lvshwnd,nType
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nType   (int) : 0〜3(0) 表示スタイル番号
;
;              nType
;             ------------------------------------------------------------
;                0  : 大きいアイコン (Image Listに大きいアイコン設定必要)
;                1  : 詳細表示
;                2  : 小さいアイコン
;                3  : 一覧表示
;
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvchengeview lvshwnd,0
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nType   = prm2 : if (nType<=0)|(nType>3) : nType=0

	GetWindowLong lvshwnd,GWL_STYLE : dwstyle=stat
	dwstyle=dwstyle&$FFFFFFFC|nType
	SetWindowLong lvshwnd,GWL_STYLE,dwstyle
	InvalidateRect lvshwnd,0,TRUE
return 0

#deffunc lsvsetbkcol int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールの背景色を設定 (lsvsetbkcol)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvsetbkcol lvshwnd,RGB(r,g,b)
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              col     (int) : 背景色 RGB(r,g,b)形式で指定
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvsetbkcol lvshwnd,RGB(0,0,255)
;*******************************************************************************
mref bmscr,67
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	col     = prm2 : if col<0 : col=bmscr(40)
	SendMessage lvshwnd,LVM_SETBKCOLOR,0,col
	InvalidateRect lvshwnd,0,TRUE
return 0

#deffunc lsvsettxcol int prm1,int prm2,int prm3
;*******************************************************************************
;   リストビューの項目のテキスト色・背景色を設定 (lsvsettxcol)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvsettxcol lvshwnd,RGB(r,g,b),RGB(r,g,b)
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              coltext (int) : 項目のテキスト色 RGB(r,g,b)形式で指定
;              colback (int) : 項目の背景色 RGB(r,g,b)形式で指定
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvsettxcol lvshwnd,RGB(255,255,255),RGB(0,0,255)
;*******************************************************************************
mref bmscr,67
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	coltext = prm2 : if coltext<0 : col=bmscr(40)
	colback = prm3 : if colback<0 : col=bmscr(40)
	SendMessage lvshwnd,LVM_SETTEXTCOLOR,0,coltext
	SendMessage lvshwnd,LVM_SETTEXTBKCOLOR,0,colback
	InvalidateRect lvshwnd,0,TRUE
return 0

#defcfunc lsvgetcheck int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールのチエック項目状態を取得 (lsvgetcheck)
;
;   戻り値 : チエック ON ret=1, チエックOFF ret=0, 失敗 ret=-1
;
;   ※この関数は、拡張スタイルで LVS_EX_CHECKBOXES が設定されている時のみ有効
;
;   ・書式     ret=lsvgetcheck(lvshwnd,nIndex)
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nIndex  (int) : 0〜(0) 項目のインデックス番号
;   ・タイプ   ユーザー定義関数
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   ret=lsvgetcheck(lvshwnd,2)
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nIndex  = prm2 : if nIndex<=0  : nIndex=0

	;ListView_GetCheckState
	#undef  LVIS_STATEIMAGEMASK
	#define LVIS_STATEIMAGEMASK    $0000F000

	SendMessage lvshwnd,LVM_GETITEMSTATE,nIndex,LVIS_STATEIMAGEMASK
	ret=(stat>>12)-1
return ret

#deffunc lsvsetcheck int prm1,int prm2,int prm3
;*******************************************************************************
;   リストビューコントロールのチエック項目を設定 (lsvsetcheck)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ※この命令は、拡張スタイルで LVS_EX_CHECKBOXES が設定されている時のみ有効
;
;   ・書式     lsvsetcheck lvshwnd,nIndex,fCheck
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              Index   (int) : 0〜(0)  項目のインデックス番号
;              fCheck  (int) : 0〜1(0) チエックフラグ
;
;              fCheck
;             -------------------------
;                1  :  チェック設定
;                0  :  チェック解除
;
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvsetcheck lvshwnd,2,1
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nIndex  = prm2 : if nIndex<=0  : nIndex=0
	fCheck  = prm3 : if (fCheck<=0)|(fCheck>1) : fCheck=0

	;ListView_SetCheckState
	#undef  LVIS_STATEIMAGEMASK
	#define LVIS_STATEIMAGEMASK    $0000F000

	;LVITEM構造体
	dim tim,9
	tim(3) = (fCheck+1)<<12 
	tim(4) = LVIS_STATEIMAGEMASK
	SendMessage lvshwnd,LVM_SETITEMSTATE,nIndex,varptr(tim)
	dim tim,0
return 0

#deffunc lsvcldel int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールのカラムを消去 (lsvcldel)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvcldel lvshwnd,nIndex
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nIndex  (int) : 0〜(0) カラムのインデックス番号
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvcldel lvshwnd,1
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nIndex  = prm2 : if nIndex<=0  : nIndex=0
	SendMessage lvshwnd,LVM_DELETECOLUMN,nIndex,0
return 0

#defcfunc lsvcount int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールのアイテムの数を取得 (lsvcount)
;
;   戻り値 : 項目数 ret=count, 失敗 ret=-1
;
;   ・書式     ret=lsvcount(lvshwnd,nflag)
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nflag   (int) :  0〜1(0) 取得フラグ
;
;              nflag
;             ------------------------------------------
;                0  :  LVM_GETITEMCOUNT
;                1  :  LVM_GETCOUNTPERPAGE
;
;   ・タイプ   ユーザー定義関数
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   mes "アイテムの数 : "+lsvcount(lvshwnd,0)
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nflag   = prm2 : if (nflag<=0)|(nflag>1) : nflag=0

	if nflag==0 : nMsg=LVM_GETITEMCOUNT
	if nflag==1 : nMsg=LVM_GETCOUNTPERPAGE
	SendMessage lvshwnd,nMsg,0,0
return stat

#defcfunc lsvfound int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールの選択アイテム取得 (lsvfound)
;
;   戻り値 : 選択項目 ret=選択項目Index, 失敗 ret=-1
;
;   ・書式     ret=lsvfound(lvshwnd,nIndex)
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nIndex  (int) : -1〜(-1) 項目インデックス番号
;   ・タイプ   ユーザー定義関数
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   SelItem=lsvfound(lvshwnd,2)
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nIndex  = prm2 : if nIndex<=-1  : nIndex=-1
	SendMessage lvshwnd,LVM_GETNEXTITEM,nIndex,$2
return stat

#deffunc lsvimdel int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールの項目を消去 (lsvimdel)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvimdel lvshwnd,nIndex
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nIndex  (int) : -1 or -1以外  操作モード
;
;              nIndex
;             ---------------------------
;               -1     :  全項目の消去
;               -1以外 :  指定Index項目
;
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvimdel lvshwnd,1
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nIndex  = prm2

	if nIndex==-1 {
		SendMessage lvshwnd,LVM_DELETEALLITEMS,-1,0
	}else{
		SendMessage lvshwnd,LVM_DELETEITEM,nIndex,0
	}
return 0

#deffunc lsvgetstr var prm1,int prm2,int prm3,int prm4
;*******************************************************************************
;   リストビューコントロールの項目の文字列を取得 (lsvgetstr)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1, Value=取得文字列
;
;   ・書式     lsvgetstr Value,lvshwnd,nIndex,SubIndex
;   ・引数     Value    (var) : 文字列型変数
;              lvshwnd  (int) : Createlstviewで作成したハンドル
;              nIndex   (int) : 0〜(0) 項目のインデックス番号(左から0,1,2,3,...)
;              SubIndex (int) : 0〜(0) サブ項目のインデックス番号
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvgetstr s,lvshwnd,0,1
;*******************************************************************************
	if vartype(prm1)!2 : prm1 = ""
	lvshwnd = prm2 : if lvshwnd==0 : return -1
	nIndex  = prm3 : if nIndex<=0  : nIndex=0
	suIndex = prm4 : if suIndex<=0 : suIndex=0

	sdim String,512

	#undef  LVIF_TEXT
	#define LVIF_TEXT    $00000001

	;LVITEM構造体
	dim tim,9
	tim(0)  = LVIF_TEXT           ;mask
	tim(1)  = nIndex              ;iItem
	tim(2)  = suIndex             ;iSubItem
	tim(5)  = varptr(String)      ;pszText
	tim(6)  = 512                 ;cchTextMax

	SendMessage lvshwnd,LVM_GETITEM,0,varptr(tim)
	prm1=String : sdim String,0
return 0

#deffunc lsvsetstr int prm1,str prm2,int prm3,int prm4
;*******************************************************************************
;   リストビューコントロールの項目の文字列を設定 (lsvsetstr)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvsetstr lvshwnd,String,nIndex,SubIndex
;   ・引数     lvshwnd  (int) : Createlstviewで作成したハンドル
;              String   (str) : 文字列 or 文字列型変数
;              nIndex   (int) : 0〜(0) 項目のインデックス番号(左から0,1,2,3,...)
;              SubIndex (int) : 0〜(0) サブ項目のインデックス番号
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvsetstr lvshwnd,"sample",2,1
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	ls=strlen(prm2): if ls==-1 : return -1 : else : sdim String,ls+1
	String  = prm2
	nIndex  = prm3 : if nIndex<=0  : nIndex=0
	suIndex = prm4 : if suIndex<=0 : suIndex=1

	#undef  LVIF_TEXT
	#define LVIF_TEXT    $00000001

	;LVITEM構造体
	dim tim,9
	tim(0)  = LVIF_TEXT           ;mask
	tim(1)  = nIndex              ;iItem
	tim(2)  = suIndex             ;iSubItem
	tim(5)  = varptr(String)      ;pszText
	tim(6)  = ls                  ;cchTextMax

	SendMessage lvshwnd,LVM_SETITEM,0,varptr(tim)
	sdim String,0
return 0

#deffunc lsvimsel int prm1,int prm2,int prm3
;*******************************************************************************
;   リストビューコントロールの項目を選択 (lsvimsel)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvimsel lvshwnd,nIndex,nflag
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nIndex  (int) : 0〜(0) 項目のインデックス番号(左から0,1,2,3,...)
;              nflag   (int) : -1〜(3)61440 (通常は3を指定する)
;
;              nflag
;             ---------------------------------------------------------
;                -1                         0
;                 0                         LVIS_FOCUSED|LVIS_SELECTED
;                 LVIS_FOCUSED              1
;                 LVIS_SELECTED             2
;                 LVIS_CUT                  4
;                 LVIS_DROPHILITED          8
;                 LVIS_OVERLAYMASK       3840
;                 LVIS_STATEIMAGEMASK   61440
;
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvimsel lvshwnd,2,3
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0 : return -1
	nIndex  = prm2 : if nIndex<=0  : nIndex=0
	nflag   = prm3 : if nflag<0    : nflag=3

	if nflag=-1 : nflag=0
	if nflag==0 : nflag=3

	#undef  LVIF_STATE
	#define LVIF_STATE    $00000008

	;LVITEM構造体
	dim tim,9
	tim(0)  = LVIF_STATE          ;mask
	tim(1)  = nIndex              ;iItem
	tim(2)  = 0                   ;iSubItem
	tim(3)  = nflag               ;state
	tim(4)  = $ffffffff           ;stateMask

	SendMessage lvshwnd,LVM_SETITEMA,0,varptr(tim)
	SetFocus lvshwnd
return 0

#deffunc lsvcolumorder int prm1,array prm2,int prm3
;*******************************************************************************
;   リストビューコントロールのカラムの並び順を設定 (lsvcolumorder)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ※この命令は、拡張スタイルで LVS_EX_HEADERDRAGDROP が設定されている時のみ有効
;
;   ・書式     lsvcolumorder lvshwnd,Columarray,Columnum
;   ・引数     lvshwnd    (int)   : Createlstviewで作成したハンドル
;              Columarray (array) : 設定するカラム順序を配列の形式で指定
;                                   例 : Columarray=3,2,0,1
;              Columnum   (int)   : カラムの数
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   Columarray=3,2,0,1
;   lsvcolumorder lvshwnd,Columarray,4
;*******************************************************************************
	lvshwnd  = prm1 : if lvshwnd==0  : return -1
	Columnum = prm3 : if Columnum<=0 : Columnum=0
	OrderArray = prm2
	SendMessage lvshwnd,LVM_SETCOLUMNORDERARRAY,Columnum,varptr(OrderArray)
return 0

#deffunc lsvgetclmwidth int prm1,int prm2
;*******************************************************************************
;   リストビューコントロールのカラムの幅を取得 (lsvgetclmwidth)
;
;   戻り値 : カラム幅 stat=ColomuWidth, 失敗 stat=-1
;
;   ・書式     lsvgetclmwidth lvshwnd,nColomu
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nColomu (int) : 0〜(0)  カラム幅を取得するカラム番号
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvgetclmwidth lvshwnd,2 : ColomuWidth=stat : mes ColomuWidth
;*******************************************************************************
	lvshwnd  = prm1 : if lvshwnd==0  : return -1
	nColomu  = prm2 : if nColomu<=0  : nColomu=0
	SendMessage lvshwnd,LVM_GETCOLUMNWIDTH,nColomu,0
return stat

#deffunc lsvsetclmwidth int prm1,int prm2,int prm3
;*******************************************************************************
;   リストビューコントロールのカラムの幅を設定 (lsvsetclmwidth)
;
;   戻り値 : 成功 stat=0, 失敗 stat=-1
;
;   ・書式     lsvsetclmwidth lvshwnd,nColomu,nColwid
;   ・引数     lvshwnd (int) : Createlstviewで作成したハンドル
;              nColomu (int) : 0〜(0)   カラム幅を設定するカラム番号
;              nColwid (int) : 0〜(100) カラムの幅(const値を直接指定も可)
;   ・タイプ   モジュール命令
;
;-- (NOTE) ---------------------------------------------------------------------
;
;   (使用例)
;   lsvsetclmwidth lvshwnd,2,70
;*******************************************************************************
	lvshwnd = prm1 : if lvshwnd==0  : return -1
	nColomu = prm2 : if nColomu<=0  : nColomu=0
	lvAUTOSIZE=0
	nColwid = prm3 : if nColwid<0  : nColwid=-nColwid :lvAUTOSIZE=1

	;nColwidに直接、下記の値を設定することもできる。
	;#define LVSCW_AUTOSIZE             $FFFFFFFF  アイテムのサイズに応じて調整
	;#define LVSCW_AUTOSIZE_USEHEADER   $FFFFFFFE  ヘッダの文字列サイズに合わせる

	if lvAUTOSIZE=1 {
		SendMessage lvshwnd,LVM_SETCOLUMNWIDTH,nColomu,$FFFFFFFF
		SendMessage lvshwnd,LVM_GETCOLUMNWIDTH,nColomu,0
		if nColwid < stat :return 0
	}
	SendMessage lvshwnd,LVM_SETCOLUMNWIDTH,nColomu,nColwid

	
return 0
#undef  ICC_LISTVIEW_CLASSES
#undef  LVIS_STATEIMAGEMASK
#undef  LVIF_STATE
#undef  LVIF_TEXT
#global
#endif
#endif

;--------------------------------------------------------------- (EOF) ---------



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-14 (日) 16:43:24 (944d)