Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


548 / 2272 ツリー ←次へ | 前へ→

【11189】リストボックスの表示更新 ほびっと 09/9/23(水) 14:57 質問[未読]
【11191】Re:リストボックスの表示更新 小僧 09/9/25(金) 15:22 回答[未読]
【11193】Re:リストボックスの表示更新 ほびっと 09/9/26(土) 11:02 お礼[未読]
【11194】Re:リストボックスの表示更新 YU-TANG 09/9/26(土) 11:54 発言[未読]

【11189】リストボックスの表示更新
質問  ほびっと  - 09/9/23(水) 14:57 -

引用なし
パスワード
   フォーム上にテキストボックスとリストボックスがあります。
リストボックスにはテーブルより顧客名が表示されるようになっています。
テキストボックスに顧客名の読みを入力していくと、それに合わせリストボックスの顧客名が絞り込まれ表示されるようにしたいと考えています。
「Yahoo!路線」では
http://transit.map.yahoo.co.jp/ (投降の禁止語句となるので、httpは全角にしています)
「出発地」「目的地」の所に、入力するごとに(日本語入力が確定する前に)候補の駅が表示されます。
上記のような感じで、顧客名リストの表示を更新したいのです。
テキストボックス入力した顧客名の読みを確定後であれば、テキストボックスのイベントで、リストボックスのデータソースのWHERE条件を変更してやれば良いかと思います。
日本語入力中に(確定する前に)リストボックスの表示を更新したいのです。
よろしくお願いします。

【11191】Re:リストボックスの表示更新
回答  小僧  - 09/9/25(金) 15:22 -

引用なし
パスワード
   ▼ほびっと さん:
こんにちは。

> 上記のような感じで、
> 顧客名リストの表示を更新したいのです。

Accessに付随している機能だけでは難しい為、
Windowsの機能を借りてくれば可能かもしれません。

Form上にテキストボックスを2つ配置
text1
text2

text1 の キークリック時に以下を記述

Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim lngSize As Long
  Dim strBuf As String
  Dim lngIMC As Long
  Dim lnghWnd As Long
  
    lnghWnd = GetFocus
    lngIMC = ImmGetContext(lnghWnd)
        
    lngSize = ImmGetCompositionString(lngIMC, GCS_COMPSTR, vbNullString, 0)
    strBuf = String(lngSize, vbNullChar)
    
  
    Call ImmGetCompositionString(lngIMC, GCS_COMPSTR, strBuf, lngSize)
    
    Me.text2.Value = Left(strBuf, lngSize)

    Call ImmReleaseContext(lnghWnd, lngIMC)
End Sub

標準モジュールに以下を記述

Declare Function GetFocus Lib "user32" () As Long
Declare Function ImmGetContext Lib "IMM32" (ByVal hWnd As Long) As Long
Declare Function ImmGetCompositionString Lib "IMM32" Alias "ImmGetCompositionStringA" _
   (ByVal hIMC As Long, ByVal dwIndex As Long, ByVal lpBuf As String, ByVal dwBufLen As Long) As Long
Declare Function ImmReleaseContext Lib "IMM32" (ByVal hWnd As Long, ByVal hIMC As Long) As Long

Public Const GCS_COMPATTR = &H10
Public Const GCS_COMPCLAUSE = &H20
Public Const GCS_COMPREADATTR = &H2
Public Const GCS_COMPREADCLAUSE = &H4
Public Const GCS_COMPREADSTR = &H1
Public Const GCS_COMPSTR = &H8
Public Const GCS_CURSORPOS = &H80
Public Const GCS_DELTASTART = &H100
Public Const GCS_RESULTCLAUSE = &H1000
Public Const GCS_RESULTREADCLAUSE = &H400
Public Const GCS_RESULTREADSTR = &H200
Public Const GCS_RESULTSTR = &H800


text1 の確定前の情報が text2 に書き出されるかと思います。

あとは確定した場合の処理をどうするかですね。

Yahoo!路線 を見ていた所
「しんじゅ」 で新宿は表示されますが
「新じゅ」だと表示されません。

その様な仕様で宜しければ
確定前:ふりがなフィールドで抽出
確定後:氏名フィールドで抽出

という様な形になるのでしょうか。

【11193】Re:リストボックスの表示更新
お礼  ほびっと  - 09/9/26(土) 11:02 -

引用なし
パスワード
   小僧さん
回答ありがとうございます。

正に求めていた回答でした。
おかげさまで意図するものを作ることができました。
大変に助かりました。
ありがとうございました。

【11194】Re:リストボックスの表示更新
発言  YU-TANG  - 09/9/26(土) 11:54 -

引用なし
パスワード
   小僧さん、こんにちは。

> text1 の キークリック時に以下を記述

の代わりに、下記でもよいかもしれません。

Me.text2.Value = Me.text1.Text

# Access が内部的に同じことをやってくれているはずなので。

よくなかったらごめんなさい。

それでは。

548 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free