リストボックスのデータを 取得したいのですが・・

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: リストボックスのデータを 取得したいのですが・・

Re: リストボックスのデータを 取得したいのですが・・

by wakaba » 2007年2月18日(日) 11:53

>LB_FINDSTRINGというメッセージを使うとリストボックスに指定された項目が存在するか調べることができます。これを利用して、指定された項目が存在するなら追加しない、指定された項目が存在しないなら追加するという処理にするとお望み通りになると思います。

なるほど そうですね。 indexを 1個づつサーチして 取得し判定しようと考えて
いました。簡単な方法がみつかりました。ありがとうございます。
悩んでいた事が
Dim buf[256] as Byte

if SendMessage(hList,LB_FINDSTRING,0,buf)=LB_ERR Then
   SendMessage (hList, LB_ADDSTRING, 0, buf)
  'syori
End If
で 解決しました。

また LB_GETCARETINDEX は パラメなしとなっていたのですが
test=SendMessage(hList,LB_GETCARETINDEX,0,0)
のように パラメを ”0”で 配置するのさえ 知らないものですから・・・
初歩的な質問に丁寧に答えていただき 毎回感謝します。
ありがとうです。

Re: リストボックスのデータを 取得したいのですが・・

by 7 » 2007年2月18日(日) 09:32

> 初歩的な質問ですが リストボックスデータの取得が うまくいきません
> ヘルプで 調べてましたが 調子よくないので このコミュに あった例を使ってみました。APIも ポインタも良く理解していない事が 原因でしょうが はっきりしません。
> ”NoWest” さんの投稿に 以下があり 使ってみようと思いますが 初期でつまづいてしまいます。
そのやり方ではないのですが、自分はこのようにしています。 > ここで pos は リストボックスのindexと考えて良いのでしょうか
Long型変数posはリストボックスの選択されている項目の位置を操作しています。このことはLB_GETCURSELの説明を読めば分かると思います。

> また GetDlgLisBoxStr() は 何の役目があるのでしょう?
GetDlgListBoxStr関数は、GetListBoxStr関数のようにリストビューのウィンドウハンドルを指定するのではなく、親ウィンドウのウィンドウハンドルとリストビューのコントロールIDを指定する為の関数です。何の役目、適当な説明になるんですけどSendMessage()関数とSendDlgItemMessage()関数の関係と同じものです...。

> やりたい事:
> 文字列を リストボックスに追加したいが 既に 登録されているものは 除きたい
> そのため リストボックスの中身を index毎に 取り出したい
その場合、リストボックスの中身をすべて取得して検査していてはデータの量が多いときに困ります。
LB_FINDSTRINGというメッセージを使うとリストボックスに指定された項目が存在するか調べることができます。これを利用して、指定された項目が存在するなら追加しない、指定された項目が存在しないなら追加するという処理にするとお望み通りになると思います。

リストボックスのデータを 取得したいのですが・・

by wakaba » 2007年2月17日(土) 22:32

初歩的な質問ですが リストボックスデータの取得が うまくいきません
ヘルプで 調べてましたが 調子よくないので このコミュに あった例を使ってみました。APIも ポインタも良く理解していない事が 原因でしょうが はっきりしません。
”NoWest” さんの投稿に 以下があり 使ってみようと思いますが 初期でつまづいてしまいます。

Sub MainWnd_ListBox1_SelChange()
Dim pos As Long
pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0)
Dim Data As String
GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data)
End Sub

Function GetListBoxStr(hLB As HWND, pos As Long, ByRef str As String) As Long
Dim Length As Long
Length = SendMessage(hLB,LB_GETTEXTLEN,pos,0)
str = ZeroString(Length)
If Length = 0 Then
GetListBoxStr = 0
Exit Function
End If
GetListBoxStr = SendMessage(hLB,LB_GETTEXT,pos,StrPtr(str))
SetDWord(StrPtr(str) - SizeOf (DWord), GetListBoxStr)
End Function

Function GetDlgLisBoxStr(hDlg As HWND, idLB As Long, pos As Long, ByRef str As String) As Long
GetDlgLisBoxStr = GetListBoxStr(GetDlgItem(hDlg, idLB), pos, str)
End Function

このコードで Dataに 期待した文字が 返らないのです
ここで pos は リストボックスのindexと考えて良いのでしょうか
また GetDlgLisBoxStr() は 何の役目があるのでしょう?

やりたい事:
文字列を リストボックスに追加したいが 既に 登録されているものは 除きたい
そのため リストボックスの中身を index毎に 取り出したい
複数列のリストボックスは ややこしそうなので 1列に設定しています
(index番号は 不要)

ページトップ