コンボボックスをドロップダウンで開く <TOP>
コンボボックスをドロップダウンで開く
SendMessage ウィンドウにメッセージを送信
CB_SHOWDROPDOWN コンボボックスのリストボックスの表示または非表示を切り替える
コンボボックスの▼をクリックして開き、該当行を選択するのは面倒です。
例では、EditBoxに文字を入力し[Enter]を押下すると、カーソルはComboBoxがドロップダウン状態で移動します。
F-Basicの場合、SendMessageの前にSetMousePointer 0(マウス砂時計解除)を入れないと目的動作ができないようです。
'================================================================
'= コンボボックスをドロップダウンで開く
'= (ComboDropdown.bas)
'================================================================
#include "Windows.bi"
' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam&)
#define CB_SHOWDROPDOWN &H14F 'コンボボックスのリストボックスの表示または非表示を切り替える
Var Shared Edit1 As Object
Var Shared Combo1 As Object
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Combo1.Attach GetDlgItem("Combo1") : Combo1.SetFontSize 14
'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
For i = 1 To 10
Combo1.AddString String$(20, Chr$(&H40 + i))
Next
Edit1.SetFocus
End Sub
'================================================================
'=
'================================================================
Declare Sub Edit1_Change edecl ()
Sub Edit1_Change()
Var Epos As Integer
Var Ret As Long
ED$ = GetDlgItemText("Edit1")
Epos = InStr(ED$, Chr$(13,10))
If Epos <> 0 Then
ED$ = Mid$(ED$, 1, Epos - 1) & Mid$(ED$, Epos + 2)
Edit1.SetWindowText ED$
Combo1.SetFocus
'マウス砂時計解除
SetMousePointer 0
Ret = Api_SendMessage(Combo1.GethWnd, CB_SHOWDROPDOWN, 1, ByVal 0)
End If
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End