1/2
#include "windows.bi"
declare sub MAINFORM_START edecl ()
declare sub MAINFORM_SETFOCUS edecl ()
declare function MY_IME_KAISI& lib "imm32" alias "ImmGetContext"(byval HWND&)
declare function MY_IME_OWARI& lib "imm32" alias "ImmReleaseContext"(byval HWND&,byval HIMC&)
declare function MY_IME_SIRABE& lib "imm32" alias "ImmGetCompositionStringA"(byval HIMC&,byval INFOTYPE&,byval BUF$,byval BUFSIZE&)
#define GCS_COMPSTR &H8
BUF$=string$(100,0)
SETMAPMODE 1
'
var shared CNOMAX,CNO 'editコントロールノカズ CNO・・・ニュウリョクバンゴウ
CNOMAX=8 :CNO=0
var shared CWH&(8) 'ウィンドウハンドルチェックヨウ
var shared ECON$(8) 'コントロールノジュンバン
ECON$(1)="EDIT1"
ECON$(2)="EDIT2"
ECON$(3)="EDIT3"
ECON$(4)="EDIT4"
ECON$(5)="EDIT5"
ECON$(6)="EDIT6"
ECON$(7)="EDIT7"
ECON$(8)="EDIT8"
var shared EOBJ(8) as object 'コントロールノオブジェクト
for I=1 to CNOMAX
EOBJ(I).ATTACH GETDLGITEM(ECON$(I))
next I
CALLEVENT
do
gosub *KEYCHECK 'FC,CNOケッテイ
if FC<>-1 then
select case FC
case 0,1
CNO=CNO+1
if CNO>CNOMAX then CNO=1 'CNOMAX
case 12,100
CNO=CNO-1
if CNO<1 then CNO=1
end select
EOBJ(CNO).SETFOCUS
EOBJ(CNO).SETSELTEXT 0,0,0 'カーソル位置を先頭に
'EOBJ(CNO).SETSELTEXT 0,-1,0 'むしろ全て選択にするとか…
IF XKEY=0 THEN XKEY=1
IF GETASYNCKEYSTATE(xkey)=(-1) THEN SETACTIVEWINDOW
endif
if CHECKEVENT=TRUE then CALLEVENT
loop
end
if xkey=0 then xkey=1
'while GETASYNCKEYSTATE(xkey)=-1: wend
IF GETASYNCKEYSTATE(xkey)=-1 THEN
WHILE ( GETASYNCKEYSTATE(xkey)=-1 AND XKEYCC<4 )
WAIT 8 '1/100秒単位
XKEYCC=XKEYCC+1
WEND
IF GETASYNCKEYSTATE(xkey)=-1 THEN WAIT 10
'FC=-1: GOTO *KEYCHK.RET
ELSE
XKEYCC=0
ENDIF
FC=-1
'
WH&=GETFOCUS
W=0 'フォーカスチェック,CNOケッテイ
for I=1 to CNOMAX
if WH&=CWH&(I) then W=I :exit for
next I
if W>0 then
CNO=W
'--- カンジヘンカンチュウノチェック
WI&=MY_IME_KAISI(WH&) 'コンテキストハンドル
WWW&=MY_IME_SIRABE(WI&,GCS_COMPSTR,BUF$,0)
WW&=MY_IME_OWARI(WH&,WI&)
if WWW&<>0 then
while GETASYNCKEYSTATE(&HD) :wend
endif
'
while GETASYNCKEYSTATE(&H10) and GETASYNCKEYSTATE(&HD) :FC=100 :wend 'シフトエンター
while GETASYNCKEYSTATE(&H70) :FC= 1 :wend ' &H70 F1
while GETASYNCKEYSTATE(&H71) :FC= 2 :wend ' &H71 F2
while GETASYNCKEYSTATE(&H72) :FC= 3 :wend ' &H72 F3
'・・・・
while GETASYNCKEYSTATE(&H7B) :FC=12 :wend ' &H7B F12
IF GETASYNCKEYSTATE(&HD) THEN FC= 0:XKEY=&HD ' &HD Enter
IF GETASYNCKEYSTATE(&H26) then FC=100:XKEY=&H26 ' &H26 ↑
IF GETASYNCKEYSTATE(&H28) then FC= 0:XKEY=&H28 ' &H28 ↓
endif
return
sub MAINFORM_START()
EOBJ(1).SETFOCUS
' ウィンドウハンドル決定
for I=1 to CNOMAX
CWH&(I)=EOBJ(I).GETHWND
next I
'
end sub
'
sub MAINFORM_SETFOCUS()
'if CNO>0 then EOBJ(CNO).SETFOCUS
end sub
>sub MAINFORM_KEYDOWN(ScanCode As Long)
>
> < キー押下判定処理 >
>
>end sub
ここの処理を何も考えずに(declareとかsubとか分からずに)
>declare sub MAINFORM_KEYDOWN edecl (ScanCode As Long)
>sub MAINFORM_KEYDOWN(ScanCode As Long)
>
> if scancode = &h70 then EDIT1.SETFOCUS
> if scancode = &h71 then EDIT2.SETFOCUS
> if scancode = &h72 then EDIT3.SETFOCUS
>
>end sub
こんな感じにしたら…動きますね…
う〜ん。ナイス感!>自分(w
main.basでのエディットボックスでのキーの判定を
> Select Case uMsg
> Case WM_KEYDOWN
> Select Case hWnd
> Case Edit1.GetHwnd
> MAINFORM_KEYDOWN( wParam )
> End Select
> End Select
declare sub MAINFORM_KEYDOWN edecl (ScanCode As Long)
common shared MainForm As Object
EOBJMAX%=8
COMMON SHARED EOBJ(8) AS OBJECT
COMMON SHARED CWH&(8) 'ウィンドウハンドルチェックヨウ
VAR EOBJI AS LONG
FOR EOBJI=1 TO EOBJMAX%
EITEM$="EDIT"+MID$(STR$(EOBJI),2)
EOBJ(EOBJI).ATTACH GETDLGITEM(EITEM$)
CWH&(EOBJI)=EOBJ(EOBJI).GETHWND
NEXT EOBJI
var hWnd As Long
var uMsg As Long
var wParam As Long
var lParam As Long
var dwRet As Long
EOBJ(1).SETFOCUS
'
while 1
do while CheckEvent()
CallEvent
loop
do while FbCheckQueMessage()
GetWndProc hWnd, uMsg, wParam, lParam
Select Case uMsg
Case WM_KEYDOWN
EOBJI=0
FOR II%=1 TO EOBJMAX%
IF EOBJ(II%).GETHWND=HWND THEN EOBJI=II%
NEXT II%
''IF EOBJI>0 THEN MAINFORM_KEYDOWN( wParam ,EOBJI )
IF EOBJI>0 THEN MAINFORM_KEYDOWN( wParam )
End Select
loop
wend
COMMON SHARED EOBJ(8) AS OBJECT
COMMON SHARED CWH&(8) 'ウィンドウハンドルチェックヨウ
declare sub MAINFORM_START edecl ()
sub MAINFORM_START()
MainForm.Attach GetHwnd()
FOR J%=1 TO 8
DUMMY = FbInsertHackWnd(EOBJ(J%).GetHwnd, 0)
NEXT J%
end sub
declare sub MAINFORM_KEYDOWN edecl (ScanCode As Long)
sub MAINFORM_KEYDOWN(ScanCode As Long)
WH&=GETFOCUS
W=0
for I=1 to 8
if WH&=CWH&(I) then W=I
next I
IF W>0 THEN
IF SCANCODE=&H26 THEN
W=W-1 : IF W<1 THEN W=1
EOBJ(W).SETFOCUS
EOBJ(W).SETSELTEXT 0,0,0 'カーソル位置を先頭に
ELSE IF SCANCODE=&H28 THEN
W=W+1 : IF W>8 THEN W=8
EOBJ(W).SETFOCUS
EOBJ(W).SETSELTEXT 0,0,0 'カーソル位置を先頭に
ENDIF
ENDIF
if scancode = &h70 then EOBJ(1).SETFOCUS
if scancode = &h71 then EOBJ(2).SETFOCUS
if scancode = &h72 then EOBJ(3).SETFOCUS