EnterキーによるEdit間フォーカス移動(T)          <TOP>


複数のエディットボックス間を「Enter」キーでフォーカス移動させます。

keybd_event 特殊キーの状態を設定
VK_TAB(&H9) [TAB]
KEYEVENTF_KEYUP(&H2) キーを放す
 

例では、「Enter」が押下されたとき、TabキーのKeyDownおよびKeyUpをシミュレートしています。

Shift + Enter で逆方向に移動します。

条件

EditBoxは、全て複数行入力 → あり、垂直オートスクロール → あり

EditBoxのコントロールIDは、4個とも「EDIT」とする。

文字数制限は、必要文字数+2(CrLfの2文字分)とする。

 

 

'================================================================
'= EnterKeyによるEditBox間移動 
'= Edit1、Edit2、Edit3、Edit4はコントロールIDを全て「Edit」とする
'= 複数行入力(あり)、垂直オートスクロール(あり)
'= IMEモードを適宜設定。文字制限は必要最大文字数+2とする
'================================================================
#include "Windows.bi"

' 特殊キーの状態を設定
Declare Sub Api_keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As byte, ByVal bScan As byte, ByVal dwFlags&, ByVal dwExtraInfo&)

#define VK_TAB &H9                      '[TAB]
#define KEYEVENTF_KEYUP &H2             'キーを放す

Var Shared Edit As Object

Edit.Attach GetDlgItem("Edit") : Edit.SetFontSize 14

'================================================================
'=  
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Edit.SetFocus
End Sub

'================================================================
'= Enterを検知しTabを送る
'================================================================
Declare Sub EditControl_Change (hWnd As Long)
Sub EditControl_Change(hWnd As Long)
    Var Obj As Object
    Var Str As String
    Var EPos As Integer

    Obj.Attach hWnd
    Str = Obj.GetWindowText
    EPos = InStr(Str, Chr$(13))
    If EPos <> 0 Then
        Str = Mid$(Str, 1, EPos - 1) & Mid$(Str, EPos + 2)
        Obj.SetWindowText Str

        'TABをシミュレート
        Api_keybd_event VK_TAB, 0, 0, 0
        Wait 1
        Api_keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
    End If
End Sub

'================================================================
'= フォーカスのあるコントロールのハンドルを取得
'================================================================
Declare Sub Edit_Change edecl ()
Sub Edit_Change()
    EditControl_Change GetFocus
End Sub

'================================================================
While 1
    WaitEvent
Wend
Stop
End