|
|
2008/5/4(Sun) 12:18:07|NO.15624
input命令を使うと入力ボックスが表示されますよね
その入力ボックスを使わずに、できれば独自のインターフェイスで日本語入力がしたいのですが…
可能でしょうか?
よければご助力お願いします
|
|
2008/5/4(Sun) 16:08:14|NO.15625
API を使って IME を制御すればできます。
#module
#uselib "imm32.dll"
#cfunc ImmCreateContext "ImmCreateContext"
#cfunc ImmAssociateContext "ImmAssociateContext" int, int
#func ImmSetCompositionWindow "ImmSetCompositionWindow" int,int,int
#func ImmGetCompositionString "ImmGetCompositionStringA" int,int,var,int
#func ImmSetCompositionFont "ImmSetCompositionFontA" int,int
#func ImmReleaseContext "ImmReleaseContext" int,int
#func ImmDestroyContext "ImmDestroyContext" int
#cfunc ImmGetContext "ImmGetContext" int
#deffunc ime_dest
//ウィンドウに関係づけられたIMEを削除
defime=ImmGetContext(hwnd)
if defime!0{
ImmReleaseContext hwnd,defime
ImmDestroyContext defime
}
return
#deffunc ime_hwnd
//ウィンドウに関係づけられたIMEのハンドルを取得
defime=ImmGetContext(hwnd)
return defime
#deffunc ime_creat
//ウィンドウにIMEを割り当て
hwnd_ime=ImmCreateContext()
k=ImmAssociateContext(hwnd,hwnd_ime)
return hwnd_ime
#deffunc ime_pos int hwnd2_ime,int com_posx, int com_posy
//IMEの出現場所指定 標準0,0
compositionform = 0x0002 ,com_posx ,com_posy
ImmSetCompositionWindow hwnd2_ime,varptr(compositionform)
return
#deffunc ime_getstr int hwnd2_ime,var buf,var str_size
//IMEに入力されている文字をリアルタイムに取得
str_size=0
ImmGetCompositionString hwnd2_ime,8,buf,str_size
str_size=stat
sdim buf,str_size+1
ImmGetCompositionString hwnd2_ime,8,buf,str_size
return
#deffunc ime_font int hwnd4_ime,str font_name,int font_size
//IMEフォント指定
dim logfont,20
lfFaceName =font_name
logfont(0)=font_size
poke logfont,23,1
memcpy logfont, lfFaceName, strlen(lfFaceName), 28, 0
ImmSetCompositionFont hwnd4_ime,varptr(logfont)
return
#global
ime_hwnd
hwnd_ime=stat
if hwnd_ime=0{
ime_creat//IME割り当て(既存する場合は上書き)
hwnd_ime=stat//ハンドル格納
}
str1_=""
sdim buf,256*256
sdim str1_,256*256//初期化がちゃんとできていないのが原因かと思ったが違うようだ
font_name="MS P明朝":font_size=13
ime_font hwnd_ime,font_name,font_size//IMEとmesでのフォントを合わせる
font font_name,font_size//mesでのフォントも指定
ime_pos hwnd_ime,0,40//IME出現場所
repeat
ime_getstr hwnd_ime,buf,s//IMEに入力されている文字と長さを取得
if s!0:str1_=buf
color 255,255,255:boxf
color
pos 0,0:mes "全角モードにしてください。"
pos 0,20:mes buf+" ←入力された文字 "//リアルタイム取得
redraw 1
wait 3
redraw 0
loop
| |
|
2008/5/4(Sun) 22:15:29|NO.15640
独自にコントロールを作らなくてもGUIの外観は変えることができます。
#module
#define GWL_EXSTYLE $FFFFFFEC
#enum BOX_X1 =0
#enum BOX_Y1
#enum BOX_X2
#enum BOX_Y2
#enum BOX_R
#enum BOX_G
#enum BOX_B
#define COLOR_WINDOW $00000005
#uselib "user32"
#func SetWindowLongA "SetWindowLongA" sptr,sptr,sptr
#func InvalidateRect "InvalidateRect" sptr,sptr,sptr
#func SetWindowPos "SetWindowPos" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func UpdateWindow "UpdateWindow" int
//simpleinput
//枠がないinputbox
#deffunc simpleinput var _var, int _w, int _h, int _max
input _var, _w, _h, _max
wnd=objinfo(stat,2)
SetWindowLongA wnd,GWL_EXSTYLE,$0
SetWindowPos wnd,0,0,0,0,0,$27
return
//boxinput
//カレントカラーをつかって箱を描画します。
#deffunc boxinput var _var, int _w, int _h, int _max
if length(data)=1:dim data,256,7
data(count,BOX_X1)=ginfo_cx+1
data(count,BOX_Y1)=ginfo_cy+1
data(count,BOX_X2)=_w+ginfo_cx-1
data(count,BOX_Y2)=_h+ginfo_cy-1
data(count,BOX_R)=ginfo_r
data(count,BOX_G)=ginfo_g
data(count,BOX_B)=ginfo_b
pos ginfo_cx+2,ginfo_cy+2
input _var, _w-3, _h-3, _max
wnd=objinfo(stat,2)
SetWindowLongA wnd,GWL_EXSTYLE,$0
SetWindowPos wnd,0,0,0,0,0,$27
InvalidateRect wnd, -1, 1
UpdateWindow wnd
color data(count,BOX_R),data(count,BOX_G),data(count,BOX_B)
boxf data(count,BOX_X1),data(count,BOX_Y1),data(count,BOX_X2),data(count,BOX_Y2)
boxf data(count,BOX_X1)+1,data(count,BOX_Y1)+1,data(count,BOX_X2)-1,data(count,BOX_Y2)-1
count+
return
//枠のみを再描画します。
#deffunc draw_boxinput
repeat length(data)
color data(cnt,BOX_R),data(cnt,BOX_G),data(cnt,BOX_B)
boxf data(cnt,BOX_X1),data(cnt,BOX_Y1),data(cnt,BOX_X2),data(cnt,BOX_Y2)
boxf data(cnt,BOX_X1)+1,data(cnt,BOX_Y1)+1,data(cnt,BOX_X2)-1,data(cnt,BOX_Y2)-1
loop
return
#global
#if 1
objsize 100,21
repeat 10
color rnd(255), rnd(255), rnd(255)
A.cnt=""+ginfo_r+","+ginfo_g+","+ginfo_b
pos 100,100+25*cnt:boxinput A.cnt,100,21
loop
//draw_boxinput
#endif
| |
|
2008/5/5(Mon) 00:41:33|NO.15652
早速お返事ありがとうございます!
しかも2パターンも…
おかげさまで助かりました
|
|