リストビューのコラムクリックからの任意列番の取り込み方法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
me262

リストビューのコラムクリックからの任意列番の取り込み方法

#1 投稿記事 by me262 »

データ表示用としてのリストビューを生成(RADツールは使用しない)
し,任意の列(コラム)が押された時にその列番を知りたいのですが,
列番引数データ(NM_LISTVIEW構造体のiSubItem)が固定データから変
化してくれません。

BackSearchABや“猫でも分かる~”などにいくつかのヒントがあり,
コラムのボタンタイミングから,上記構造体のバッファへlParamをコピー
して読み出していますが,旨く取り込めていないようです。
親ウィンドウのプロシージャ内に以下のコードを置き,コラムボタンの
クリックタイミングでデータを取り込んでいます。
クリックタイミング(Case LVN_COLUMCLICK)の確認は正常に動作。
なお選択された行番号も取り込んでいますが,これは“コードの切れ端”
におけるhira様の投稿を参照しており,勿論ちゃんと読み込めています。

<ご質問内容>
1)考え方に基本的な間違いがありますか。
2)もしあるとすればそのご指摘をお願い致します。
3)特別な関数(マクロ)など他の方法はありますか。
Case WM_NOTIFY
itemcn = FindSelListItem(hListViewWnd(1))
If wParam = ID_ListView(1) Then
memcpy(VarPtr(lvdispinfo), lParam, Len(lvdispinfo))
End If
Select Case (lvdispinfo.hdr.code)
Case LVN_COLUMNCLICK
memcpy(VarPtr(nmlistview), lParam, Len(nmlistview))
subitemcn = (nmlistview.iSubItem)
End Select
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

Re: リストビューのコラムクリックからの任意列番の取り込み方法

#2 投稿記事 by 淡幻星 »

列番引数データ(NM_LISTVIEW構造体のiSubItem)が固定データから変
化してくれません。
If wParam = ID_ListView(1) Then

If LOWORD(wParam) = ID_ListView(1) Then
に代えてみてください。
あと、コラム→カラムだと思います。

(いつものように)蛇足ですが、最初上記のLOWORDに気付かずに書いてしまったコードを、せっかくなので載せておきます(^^;)

コード: 全て選択

Case WM_NOTIFY
	Dim nmHdr As NMHDR
	Dim nmListView As NMLISTVIEW
	Select Case LOWORD(wParam)
		Case ID_ListView
			memcpy( VarPtr(nmHdr), lParam, Len(nmHdr) )
			Select Case nmHdr.code
				Case LVN_COLUMNCLICK
					memcpy( VarPtr(nmListView), lParam, Len(nmListView) )
					debug
			End Select
	End Select
debugの位置で、
NM_LISTVIEW構造体のiItemにIndex番号(行番号)、iSubItemにカラム番号(列番号)が入ると思います。
まぁ、一気に行列の情報を得る例、ってことで^^;
(RADのコピペなんですけどね/爆)
me262

リストビューのカラムクリックからの任意列番の取り込み方法

#3 投稿記事 by me262 »

あーっと,やっぱり淡幻星さんのお世話になってしまいました。
例によって一発で完了です。
何事も先人は賢人ということで,淡幻星さんを含め皆さんのサポートが良い
ので非常に助かります。
この後聞くにしても,一定レベルまで自分で考えてから聞くように心がけ
ますので,宜しくお願い致します。
これでリストビューもRADの手を借りずに,かなり操作が可能になりました。
返信する