ドロップダウン リスト
ドロップダウン リスト
はじめまして
RADツールを使っているのですがコンボボックスを使ったドロップダウンリストの作り方が全然わかりません
過去ログを見ても解決できませんでした
どの部分にどのようなプログラムを書いたら良いのか、どなたか教えて下さい
お願いします
RADツールを使っているのですがコンボボックスを使ったドロップダウンリストの作り方が全然わかりません
過去ログを見ても解決できませんでした
どの部分にどのようなプログラムを書いたら良いのか、どなたか教えて下さい
お願いします
私も、同じことを疑問に思いましたが、下を見て解決してください。
文字列には追加したい文字列を記入、って書いてありましたのでそのまま書きました。それと、Creatメッセージでやりましょう。
もともと、Creatは、ウィンドウが作られたときに送られるコードです。
そこに記入しましょう。
文字列をまだ作りたい、って言う場合は、
cb_addString(hCombo,"
をつぎつぎに足していきましょう。
あまり多く作らないように・・・。
初めて、人に教えました。
わかる範囲での答えです。
コード: 全て選択
Sub /*コマンドボックスを作っているウィンドウのID*/_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hCombo As HWND
hCombo=GetDlgItem(hMission,ComboBox1)
cb_addString(hCombo,"文字列")
'0を選択
SendMessage(hCombo,CB_SETCURSEL,0,NULL)
End Sub
もともと、Creatは、ウィンドウが作られたときに送られるコードです。
そこに記入しましょう。
文字列をまだ作りたい、って言う場合は、
cb_addString(hCombo,"
をつぎつぎに足していきましょう。
あまり多く作らないように・・・。
初めて、人に教えました。
わかる範囲での答えです。
Re: ドロップダウン リスト
> はじめまして
初めまして。
> RADツールを使っているのですがコンボボックスを使ったドロップダウンリストの作り方が全然わかりません
この辺り、始めたばかりの頃分かりませんよね。コンボボックス、自分の一番最初の壁でした...。
> どの部分にどのようなプログラムを書いたら良いのか、どなたか教えて下さい
イベントコードの「ウィンドウ作成時」にSendMessage()関数でCB_ADDSTRING,CB_SETCURSELなどのメッセージを送ることでコンボボックスの設定をします。
ActiveBasic付属のヘルプに"cb"と入力するとコンボボックスに関するメッセージを見ることができます。
初めまして。
> RADツールを使っているのですがコンボボックスを使ったドロップダウンリストの作り方が全然わかりません
この辺り、始めたばかりの頃分かりませんよね。コンボボックス、自分の一番最初の壁でした...。
> どの部分にどのようなプログラムを書いたら良いのか、どなたか教えて下さい
イベントコードの「ウィンドウ作成時」にSendMessage()関数でCB_ADDSTRING,CB_SETCURSELなどのメッセージを送ることでコンボボックスの設定をします。
ActiveBasic付属のヘルプに"cb"と入力するとコンボボックスに関するメッセージを見ることができます。
最後に編集したユーザー 7 [ 2006年4月01日(土) 18:05 ], 累計 1 回
Re:ドロップダウン リスト
はじめまして。
他の方法もあるかと思いますが、私の場合「MainWnd.sbp」内に以下のような形で記述しています。
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hCombo As HANDLE
hCombo = GetDlgItem(hMainWnd,ComboBox1)
SendMessage(hCombo,CB_ADDSTRING,0,"ABC")
End Sub
これでコンパイルすれば、ID「ComboBox1」に「ABC」の文字が表示されるようになっているはずです。
他の方法もあるかと思いますが、私の場合「MainWnd.sbp」内に以下のような形で記述しています。
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hCombo As HANDLE
hCombo = GetDlgItem(hMainWnd,ComboBox1)
SendMessage(hCombo,CB_ADDSTRING,0,"ABC")
End Sub
これでコンパイルすれば、ID「ComboBox1」に「ABC」の文字が表示されるようになっているはずです。
>
cb_addString()関数なんてapi_commctrl.sbpで定義されてたかな、なんて思ったら、以前自分が投稿したコードですね。
コード: 全て選択
Sub /*コマンドボックスを作っているウィンドウのID*/_Create(ByRef CreateStruct As CREATESTRUCT)
> Dim hCombo As HWND
> hCombo=GetDlgItem(h/*コマンドボックスを作っているウィンドウ*/,ComboBox1)
> cb_addString(hCombo,"文字列")
> '0を選択
> SendMessage(hCombo,CB_SETCURSEL,0,NULL)
> End Sub
コード: 全て選択
Function cb_addString(ByVal hWnd As HWND,ByVal lpString As BytePtr) As LRESULT
cb_addString=SendMessage(hWnd,CB_ADDSTRING,NULL,lpString As LPARAM)
End Function
Function cb_setCursel(ByVal hWnd As HWND,ByVal nIndex As Long) As LRESULT
cb_setCursel=SendMessage(hWnd,CB_SETCURSEL,nIndex As WPARAM,NULL)
End Function
cb_addstringはCB_ADDSTRINGを簡単に扱うために作った自作の関数(?)みたいなものですね。
この場合、
の部分だけで追加は可能です。(多少の改良は必要ですが…)
同様に、CB_INSERTSTRINGの場合も、簡単に扱える関数を作ってもいいですが、
index:何番目のリストに追加するのかを指定します(一番上のリストを0とします)。
str:追加する文字列を指定します。
と、これだけですので、普通に書いてもいいと思います。
この場合、
コード: 全て選択
SendMessage(hWnd,CB_ADDSTRING,NULL,lpString)
同様に、CB_INSERTSTRINGの場合も、簡単に扱える関数を作ってもいいですが、
コード: 全て選択
SendMessage(hWnd, CB_INSERTSTRING, index, str)
str:追加する文字列を指定します。
と、これだけですので、普通に書いてもいいと思います。
遅いかもしれませんけど...。
> cb_○○○を使うと文法が正しくない的なことを言われるのですが
> cb_addstringみたいに一つ一つ定義が必要なのでしょうか?
定義するかは関数があるかないかで決まります。
関数名ですが、"cb_○○○"とする必要はありません。関数の処理を表す名であって処理を決めるものじゃないからです。
> もし、そうなのならCB_INSERTSTRINGの定義を教えて頂ければ助かります
> あと、解説の付けて頂ければ今後の役に立ちます
いちいちウィンドウメッセージ書くの嫌じゃないですか。
> cb_○○○を使うと文法が正しくない的なことを言われるのですが
> cb_addstringみたいに一つ一つ定義が必要なのでしょうか?
定義するかは関数があるかないかで決まります。
関数名ですが、"cb_○○○"とする必要はありません。関数の処理を表す名であって処理を決めるものじゃないからです。
> もし、そうなのならCB_INSERTSTRINGの定義を教えて頂ければ助かります
> あと、解説の付けて頂ければ今後の役に立ちます
コード: 全て選択
'コンボボックスのリストの指定した位置に文字列を挿入します。
'nIndex : 何番目のリストに追加するのかを指定します(一番上のリストを0とします)。
'lpString : 追加する文字列を指定します。
Function cb_insertString(ByVal hWnd As HWND,ByVal nIndex As Long,ByVal lpString As BytePtr) As LRESULT
cb_insertString=SendMessage(hWnd,CB_INSERTSTRING,nIndex,lpString As LPARAM)
End Function
少しですが他の関数 [ここをクリックすると内容が表示されます]
プロジェクト内で一度だけの実行ならSendMessage()関数で直接叩いてもいいんですけど、そうじゃないなら関数にしておくと楽になります。コード: 全て選択
Sub cb_resetContent(ByVal hWnd As HWND)
SendMessage(hWnd,CB_RESETCONTENT,NULL,NULL)
End Sub
Function cb_deleteString(ByVal hWnd As HWND,ByVal nIndex As Long) As LRESULT
cb_deleteString=SendMessage(hWnd,CB_DELETESTRING,nIndex,NULL)
End Function
Function cb_getCount(ByVal hWnd As HWND) As LRESULT
cb_getCount=SendMessage(hWnd,CB_GETCOUNT,NULL,NULL)
End Function
いちいちウィンドウメッセージ書くの嫌じゃないですか。