コンボボックスの表示名を任意のものに変える

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

コンボボックスの表示名を任意のものに変える

#1 投稿記事 by Sato »

初めまして。お世話になります。
SetWindowText(GetDlgItem(hMainWnd,EditBox1),Moji1)
とすれば、エディットボックスにMoji1を表示できますが、
SetWindowText(GetDlgItem(hMainWnd,ComboBox1),Moji2)
としても、コンボボックスにMoji2を表示できません。
Moji2はコンボボックスのリストに定義された文字です。
マウスでクリックしてコンボボックスの内容を変更することはできますが、
プログラム上からコンボボックスの内容を変更する方法を
教えていただけないでしょうか?
yama
記事: 58
登録日時: 2005年5月31日(火) 21:11
お住まい: 新潟市
連絡する:

#2 投稿記事 by yama »

こんな感じでつかっていますが、セットしてある項目の何個目を表示するか
を指定します。表示内容を変更するには項目に文字をセットしなおしその行
を表示するようにしてやればいいと思います。

Dim hCombo As HWND ' コンボボックスのハンドルを持つ
Dim Nangyoume As Long ' 選択されている項目のインデックスを持つ
Dim s_ToName[4] As String
s_ToName[0]="1共通"
s_ToName[1]="2現場"
s_ToName[2]="3一般"
s_ToName[3]="4仮設"
s_ToName[4]="5管理"

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim cnt As Integer
' コンボボックスのハンドルを取得
hCombo=GetDlgItem(hMainWnd,ComboBox1)
' コンボボックスの項目を設定
For cnt = 0 To 4
SendMessage(hCombo,CB_ADDSTRING,0,s_ToName[cnt])
Next
' 最初の項目を選択
ComboBox_SetCurSel(hCombo,0)
End Sub
Sato

ご丁寧にありがとうございます

#3 投稿記事 by Sato »

おかげさまで解決することができました。

レスしていただけなければいまも悩んでいたところです…。

ひとつだけ。このスレを参考にするひとのために。

SendMessage(hCombo,CB_SETCURSEL,番号,0)

で、任意の内容を選べます~♪
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ご丁寧にありがとうございます

#4 投稿記事 by 7 »

yamaさん さんが書きました:' 最初の項目を選択
ComboBox_SetCurSel(hCombo,0)
Satoさん さんが書きました:SendMessage(hCombo,CB_SETCURSEL,番号,0)
で、任意の内容を選べます~♪
ComboBox_SetCurSel関数を書いたのは自分なので登場...。以下のような定義になります。

コード: 全て選択

' コンボボックスの項目を選択
Function ComboBox_SetCurSel(ByVal hWnd As HWND,ByVal nIndex As Long) As Long
    ComboBox_SetCurSel=SendMessage(hWnd,CB_SETCURSEL,nIndex As WPARAM,0) As Long
End Function
Sato

Re: ご丁寧にありがとうございます

#5 投稿記事 by Sato »

MainWnd.sbp(633) - "ComboBox_SetCurSel" 無効な識別子です

になっちゃうので、その書き方はうちではできないんですよ…。

バージョンは4.24.00です。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ご丁寧にありがとうございます

#6 投稿記事 by 7 »

> MainWnd.sbp(633) - "ComboBox_SetCurSel" 無効な識別子です
>
> になっちゃうので、その書き方はうちではできないんですよ…。
ですから、定義する必要があります。
以下のコードをグローバル領域に置いておけばComboBox_SetCurSel関数が使えるようになります。

コード: 全て選択

' ComboBox_SetCurSel : コンボボックスの項目を選択
' hWnd : コンボボックスのウィンドウハンドル
' nIndex : 0から始まる選択する項目の位置
Function ComboBox_SetCurSel(ByVal hWnd As HWND,ByVal nIndex As Long) As Long
    ComboBox_SetCurSel=SendMessage(hWnd,CB_SETCURSEL,nIndex As WPARAM,0) As Long
End Function
yama
記事: 58
登録日時: 2005年5月31日(火) 21:11
お住まい: 新潟市
連絡する:

#7 投稿記事 by yama »

肝心な部分が欠落していました。7さんホロー感謝です。

satoさん混乱させてしまってすいません。
Sato

Re: ご丁寧にありがとうございます

#8 投稿記事 by Sato »

いえ、レスをつけていただけなければわからなかったので、
すごく感謝しています。このコードは定義すれば使えるとして、
どこかで一括公開されているのでしょうか?探してみます。

あとABHelperは見ることができませんでした。
Web表示するタイプみたいですが…。
そっちも頑張ってみます。
yama
記事: 58
登録日時: 2005年5月31日(火) 21:11
お住まい: 新潟市
連絡する:

#9 投稿記事 by yama »

>あとABHelperは見ることができませんでした。

はじめに出てくるセキュリティダイアログみたいなのでチェックボックスを
チェックすると正常に表示出来るはずです。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ご丁寧にありがとうございます

#10 投稿記事 by 7 »

> すごく感謝しています。このコードは定義すれば使えるとして、
> どこかで一括公開されているのでしょうか?探してみます。
自分の場合、C++言語(C言語?)で定義されているマクロ関数?を参考にして書き写しているだけですので、C++言語(あるいはC言語)を参考にしてご自分で定義することもできます。
ドコかで公開っていう話になると、今さっき件の関数はABHelperにて公開しました。他にも定義した関数が有るのでまたそのうち暇なときにでも載せる予定です...。
ComboBox_***っていう関数は、山本さんが定義してないだけで、これからするのかもしれないし、ちょっと面倒なんですよね。
他にも面倒くさいことになってきてて、自分はBytePtrを要所要所、LPSTRにして定義してたんですけど、山本さんはPSTRで定義なさってるんですよね(汗)
なるべく忠実に行きたいので今まで書いたLPSTRPSTRに変更しようと思ってて...でも暇がない。

> あとABHelperは見ることができませんでした。
これは自分がそうなったことが無くて、チンプンカンプンなんですよねぇ...(涙)
「ヘルプましん」っていうフリーソフトを使って作ってるんですけど、これが影響してるのか?してないような気がするんですけど...。
とりあえず「ヘルプましん」がバージョンアップされてたのでインストールしてコンパイル、それをアップロードしておきました。
Indigo Visualist
記事: 33
登録日時: 2006年5月22日(月) 21:01
お住まい: 山口
連絡する:

ABHelper

#11 投稿記事 by Indigo Visualist »

僕も同じ現象に会いまして、おそらくXPのセキュリティ機能ではないでしょうか?
Helperを保存したあと、ファイルを右クリック>プロパティで「ブロックの解除」をクリックして下さい。
chmファイルが生で配布されているのが原因ではないでしょうか。zipを解凍すれば、中のファイルはブロックされませんし。
スレの趣旨とは違う気もするのですが、一応報告です。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ABHelper

#12 投稿記事 by 7 »

> 僕も同じ現象に会いまして、おそらくXPのセキュリティ機能ではないでしょうか?
> Helperを保存したあと、ファイルを右クリック>プロパティで「ブロックの解除」をクリックして下さい。
XPなんですけど、ファイルの「プロパティ」の中に「ブロックの解除」すら無いんですけど...。

> chmファイルが生で配布されているのが原因ではないでしょうか。zipを解凍すれば、中のファイルはブロックされませんし。
よく考えたらどうして今まで圧縮せずに配布してたのか。
とりあえず今の時間帯、サーバーお休み中でアップロード出来ないので圧縮した物のアップは明日にします。

> スレの趣旨とは違う気もするのですが、一応報告です。
一応自分のサイトにも掲示板有るのでそっちで報告して貰って構わないんですけどね...。
ありがとうございました。
返信する