どもども、初心者です。早速ですが矢印・enterキーにて画面上のtext・edit等の欄を移動する方法を教えてください。
例えば、text欄①入力後enterキーにて次の入力欄②に移動し、上または左矢印キーにて①に戻る。
矢印、enterキーでのtext間移動?
RADツールでウィンドウにエディットボックスを2個(EditBox1・EditBox2)配置し、
の下に
を記述。
MainWnd_Createイベントを下のように変更。
MainWnd_Destroyイベントを下のように変更。
そしてMainWndProcを下のように変更。
何でこれでうまく動くのかは考えてみて下さい(コールバック関数なので難しいかもしれませんが)。
コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
コード: 全て選択
Dim lpOldWndProc[1] As VoidPtr
MainWnd_Createイベントを下のように変更。
コード: 全て選択
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
lpOldWndProc[0]=SetWindowLong(GetDlgItem(hMainWnd,EditBox1),GWL_WNDPROC,AddressOf(MainWndProc) As LONG_PTR) As VoidPtr
lpOldWndProc[1]=SetWindowLong(GetDlgItem(hMainWnd,EditBox2),GWL_WNDPROC,AddressOf(MainWndProc) As LONG_PTR) As VoidPtr
End Sub
コード: 全て選択
Sub MainWnd_Destroy()
SetWindowLong(GetDlgItem(hMainWnd,EditBox1),GWL_WNDPROC,lpOldWndProc[0] As LONG_PTR)
SetWindowLong(GetDlgItem(hMainWnd,EditBox2),GWL_WNDPROC,lpOldWndProc[1] As LONG_PTR)
xxx_DestroyObjects() 'xxxにはプロジェクト名が入る
PostQuitMessage(0)
End Sub
コード: 全て選択
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Select Case hWnd
Case GetDlgItem(hMainWnd,EditBox1)
If dwMsg=WM_KEYDOWN And wParam=VK_RETURN Then
SetFocus(GetDlgItem(hMainWnd,EditBox2))
End If
MainWndProc=CallWindowProc(lpOldWndProc[0],hWnd,dwMsg,wParam,lParam)
Case GetDlgItem(hMainWnd,EditBox2)
If dwMsg=WM_KEYDOWN And (wParam=VK_LEFT Or wParam=VK_UP) Then
SetFocus(GetDlgItem(hMainWnd,EditBox1))
End If
MainWndProc=CallWindowProc(lpOldWndProc[1],hWnd,dwMsg,wParam,lParam)
Case Else
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Select
End Function
[hira]
http://hira.hopto.org/
http://hira.hopto.org/