HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0504
やまねこinput以外で日本語入力3解決


やまねこ

リンク

2008/5/4(Sun) 12:18:07|NO.15624

input命令を使うと入力ボックスが表示されますよね
その入力ボックスを使わずに、できれば独自のインターフェイスで日本語入力がしたいのですが…
可能でしょうか?
よければご助力お願いします



この記事に返信する


begriff

リンク

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



As

リンク

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パターンも…
おかげさまで助かりました



ONION software Copyright 1997-2021(c) All rights reserved.