
CreateWindowExでLISTVIEW(チェックボックス付きのレポートビュー)を作ったのですが、「山田花子」行にソースでチェックを付ける方法が分かりません。
Form1のソース
↓
Option Explicit
Private Sub Form_Load()
Dim lngRet As Long
Dim lvcol As LV_COLUMN
Dim rStyle As Long
Dim item As LV_ITEM
'-- リストビューの作成
hList = CreateWindowEx(WS_EX_CLIENTEDGE, _
WC_LISTVIEW, "", _
WS_CHILD Or WS_VISIBLE Or WS_BORDER Or _
WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or _
LVS_REPORT, _
0&, 0&, Me.ScaleWidth / Screen.TwipsPerPixelX, 200&, _
Me.hwnd, _
0&, _
App.HINSTANCE, _
ByVal 0&)
'拡張スタイルを設定
rStyle = rStyle Or LVS_EX_FULLROWSELECT Or LVS_EX_GRIDLINES Or LVS_EX_CHECKBOXES
SendMessageByNum hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0&, rStyle
'-- カラムヘッダーの追加
With lvcol
.mask = LVCF_FMT Or LVCF_WIDTH Or LVCF_TEXT Or LVCF_SUBITEM
.fmt = LVCFMT_LEFT
.cx = 100
.pszText = "名前"
.iSubItem = 0
lngRet = ListView_InsertColumn(hList, 0&, lvcol)
End With
'-- リストアイテムの追加
With item
.mask = LVIF_TEXT Or LVIF_IMAGE
' 1つめ
.pszText = "山田 太郎"
.iItem = 0
.iSubItem = 0
.iImage = 0
lngRet = ListView_InsertItem(hList, item)
' 2つめ
.pszText = "山田 花子"
.iItem = 1
.iSubItem = 0
.iImage = 1
lngRet = ListView_InsertItem(hList, item)
End With
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'-- リストビューを破棄
DestroyWindow hList
End Sub
標準モジュールは補足に書きます
No.3ベストアンサー
- 回答日時:
LVITEMのstateMaskとstateメンバを適切に設定してLVM_SETITEMSTATEメッセージを送ればいいようです
Pubic Sub ListView_SetCheckState( hWnd as long, n as long, bflag as integer)
Const LVM_SETITMSTATE = (LVM_FIRST + 43)
dim oItem as LVITEM
dim bit as integer
if bflag then
bit = &h2000
else
bit = &h1000
end if
oItem.stateMask = &HF000
oItem.state = bit
SendMessage hWnd, LVM_SETITEMSTATE, n, oItem
End Sub
チェック状態の取得は
Pubic Function ListView_GetCheckState( hWnd as long, n as long ) as integer
Const LVM_GETITMSTATE = (LVM_FIRST + 44)
dim state as long
state = SendMessage( hWnd, LVM_GETITEMSTATE, n, &HF000) / 4096
ListView_GetCheckState = state - 1
End Function
といった具合だと思います
上記のとおりで出来ました。
LVM_SETITEMSTATEメッセージのパラメータにビットを設定するんですね。
ありがとうございました。
No.2
- 回答日時:
VCだと
ListView_GetCheckStateというマクロで値を取得
ListView_SetCheckStateというマクロで値を設定しているようですが
VBに移植するのがめんどくさいです。。
動作未確認ですがListView_GetCheckStateだけは移植してみましたので張っておきます。
cmmctrl.hのマクロ(抜粋)
#define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
#define ListView_SetCheckState(hwndLV, i, fCheck) \
ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
#define LVM_GETITEMSTATE 0x1000+44
#define LVIS_STATEIMAGEMASK 0xF000
#define ListView_GetCheckState(hwndLV, i) \
((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)(i), LVIS_STATEIMAGEMASK))) >> 12) -1)
'---------------------------------------------
' ListView_GetCheckState
'---------------------------------------------
Function ListView_GetCheckState(hwndLV As Long, i As Long) As Integer
ListView_GetCheckState = (SendMessage(hwnd, &h102C, 0, &hF000) \ (2 ^ &hC)) - 1
Enf Function
No.1
- 回答日時:
標準モジュール
↓
Public hList As Long
Public Type LV_COLUMN
mask As Long
fmt As Long
cx As Long
pszText As String
cchTextMax As Long
iSubItem As Long
iImage As Long
iOrder As Long
End Type
Public Type LV_ITEM
mask As Long
iItem As Long
iSubItem As Long
state As Long
stateMask As Long
pszText As String
cchTextMa As Long
iImage As Long
lParam As Long
iInden As Long
End Type
Public Const LVM_FIRST = &H1000
Public Const WS_EX_CLIENTEDGE = &H200&
Public Const WC_LISTVIEW = "SysListView32"
Public Const WS_CHILD = &H40000000
Public Const WS_VISIBLE = &H10000000
Public Const WS_BORDER = &H800000
Public Const WS_CLIPSIBLINGS = &H4000000
Public Const WS_CLIPCHILDREN = &H2000000
Public Const LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54
Public Const LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55
Public Const LVS_ICON = &H0
Public Const LVS_REPORT = &H1
Public Const LVS_SMALLICON = &H2
Public Const LVS_LIST = &H3
Public Const LVS_TYPEMASK = &H3
Public Const LVS_SINGLESEL = &H4
Public Const LVS_SHOWSELALWAYS = &H8
Public Const LVS_SORTASCENDING = &H10
Public Const LVS_SORTDESCENDING = &H20
Public Const LVS_SHAREIMAGELISTS = &H40
Public Const LVS_NOLABELWRAP = &H80
Public Const LVS_AUTOARRANGE = &H100
Public Const LVS_EDITLABELS = &H200
Public Const LVS_OWNERDATA = &H1000
Public Const LVS_NOSCROLL = &H2000
Public Const LVS_EX_GRIDLINES = &H1 'グリッドライン
Public Const LVS_EX_SUBITEMIMAGES = &H2 'サブアイテムイメージ
Public Const LVS_EX_CHECKBOXES = &H4 'チェックボックス追加
Public Const LVS_EX_TRACKSELECT = &H8 'トラックセレクト
Public Const LVS_EX_HEADERDRAGDROP = &H10 'ヘッダードラッグ&ドロップ
Public Const LVS_EX_FULLROWSELECT = &H20 '一行選択
Public Const LVS_EX_ONECLICKACTIVATE = &H40 '1クリック選択
Public Const LVS_EX_TWOCLICKACTIVATE = &H80 '2クリック選択
Public Const LVS_TYPESTYLEMASK = &HFC00
Public Const LVS_ALIGNTOP = &H0
Public Const LVS_ALIGNLEFT = &H800
Public Const LVS_ALIGNMASK = &HC00
Public Const LVS_OWNERDRAWFIXED = &H400
Public Const LVS_NOCOLUMNHEADER = &H4000
Public Const LVS_NOSORTHEADER = &H8000
Public Const LVCF_FMT = &H1
Public Const LVCF_WIDTH = &H2
Public Const LVCF_TEXT = &H4
Public Const LVCF_SUBITEM = &H8
Public Const LVCF_IMAGE = &H10
Public Const LVCF_ORDER = &H20
Public Const LVCFMT_LEFT = &H0
Public Const LVCFMT_RIGHT = &H1
Public Const LVCFMT_CENTER = &H2
Public Const LVCFMT_JUSTIFYMASK = &H3
Public Const LVCFMT_IMAGE = &H800
Public Const LVCFMT_BITMAP_ON_RIGHT = &H1000
Public Const LVCFMT_COL_HAS_IMAGES = &H8000
Public Const LVIF_TEXT = &H1
Public Const LVIF_IMAGE = &H2
Public Const LVIF_PARAM = &H4
Public Const LVIF_STATE = &H8
Public Const LVIF_INDENT = &H10
Public Const LVIF_NORECOMPUTE = &H800
Public Const LVIS_FOCUSED = &H1
Public Const LVIS_SELECTED = &H2
Public Const LVIS_CUT = &H4
Public Const LVIS_DROPHILITED = &H8
Public Const LVIS_OVERLAYMASK = &HF00
Public Const LVIS_STATEIMAGEMASK = &HF000
Public Const LVSIL_NORMAL = 0
Public Const LVSIL_SMALL = 1
Public Const LVSIL_STATE = 2
Declare Function CreateWindowEx Lib "USER32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal HINSTANCE As Long, lpParam As Any) As Long
Declare Function SendMessageByNum Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "USER32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Declare Function DestroyWindow Lib "USER32" (ByVal hwnd As Long) As Long
Public Function ListView_InsertColumn(ByVal hwnd As Long, ByVal iCol As Long, pcol As LV_COLUMN) As Long
Const LVM_INSERTCOLUMN = (LVM_FIRST + 27)
ListView_InsertColumn = SendMessage(hwnd, LVM_INSERTCOLUMN, iCol, pcol)
End Function
Public Function ListView_SetColumn(ByVal hwnd As Long, ByVal iCol As Long, pcol As LV_COLUMN) As Long
Const LVM_SETCOLUMN = (LVM_FIRST + 26)
ListView_SetColumn = SendMessage(hwnd, LVM_SETCOLUMN, iCol, pcol)
End Function
Public Function ListView_InsertItem(ByVal hwnd As Long, pitem As LV_ITEM) As Long
Const LVM_INSERTITEM = (LVM_FIRST + 7)
ListView_InsertItem = SendMessage(hwnd, LVM_INSERTITEM, 0&, pitem)
End Function
Public Function ListView_SetItem(ByVal hwnd As Long, pitem As LV_ITEM) As Long
Const LVM_SETITEM = (LVM_FIRST + 6)
ListView_SetItem = SendMessage(hwnd, LVM_SETITEM, 0&, pitem)
End Function
Public Function ListView_SetImageList(ByVal hwnd As Long, ByVal himl As Long, ByVal iImageList As Long) As Long
Const LVM_SETIMAGELIST = (LVM_FIRST + 3)
ListView_SetImageList = SendMessage(hwnd, LVM_SETIMAGELIST, iImageList, ByVal himl)
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
マクロ実行時、ユーザーフォー...
-
Excelのセル値に基づいて図形の...
-
公務員試験のマクロ経済の問題...
-
エクセルでキーリストからデー...
-
Excel・Word リサーチ機能を無...
-
TERA TERM のマクロを教えてく...
-
UWLSの記録でマクロを作成し使...
-
エクセルのマクロについて教え...
-
マクロで自動入力がしたいのですが
-
エクセルに張り付けた写真のフ...
-
excel vbaを見る
-
秀丸マクロのautocomplete文に...
-
マクロ 条件にあった数字を連続...
-
エクセル
-
VBA 条件付き書式
-
IF関数を使ってマクロを実行さ...
-
エクセルでマクロをし始めたば...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報