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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
1230
敬老IMEで文字を取得する11解決


敬老

リンク

2006/12/30(Sat) 11:59:22|NO.4533

題名通りIMEを使って独自の入力ボックスをつくるにはどうすればいいでしょうか



この記事に返信する


As

リンク

2006/12/30(Sat) 19:07:50|NO.4547

ImmGetCandidateListを使ってみてはどうでしょうか?



敬老

リンク

2006/12/30(Sat) 21:32:28|NO.4550

sendmsgを使ってImmGetCandidateListをつかえばいいんだと思いますが
やり方がわからないです



As

リンク

2006/12/31(Sun) 00:25:22|NO.4554

詳しくはわからなかったのですが
http://www.honet.ne.jp/~tri/program/noime.html
ここなど参考にできませんか??



敬老

リンク

2006/12/31(Sun) 09:16:19|NO.4555

IMEで文字を表示させない方法じゃなくて
IMEで入力された文字とかを取得して変換の文字も取得して
その文字を描画するっていうのはできないでしょうか



As

リンク

2006/12/31(Sun) 12:04:36|NO.4559

↑のURIのメッセージを処理して

変換時に渡されるメッセージ
WM_IME_STARTCOMPOSITION/WM_IME_COMPOSITION/WM_IME_ENDCOMPOSITION
の中でImmGetCandidateListを使い検索リストを受け取ったら
自前の検索結果ウィンドウみたいなものにmes命令で入れておいたらできるのではないでしょうか?

IMEは非表示ですが、IMEから情報を受け取ってるので ちゃんとそれらしく見えるはずです^^;



敬老

リンク

2006/12/31(Sun) 14:25:46|NO.4560

ふむふむ
WM_IME_STARTCOMPOSITION/WM_IME_COMPOSITION/WM_IME_ENDCOMPOSITION
がきたと察知するにはどうやればいいのでしょうか



As

リンク

2007/1/1(Mon) 08:36:46|NO.4578

あけましておめでとうございます^^

ぇーとちょっとやってみたんですが、なかなか難しいようです^^;
オブジェクトのメッセージを受け取ることに対応していないらしく、
もしかしたらですが下の方法でできるかもしれません。


1.HSPでBufferウィンドウを作成
2.そのウィンドウのプロシージャIDを取得 GetClassLong
3.inputボックスのプロシージャIDをBufferのプロシージャIDに置き換える。
  これでinputBOXのメッセージがbufferで定義されたIDを使って受けられるので
  これを使って随時メッセージを受け取ります。



邪道ですが・・(笑)^^;



敬老

リンク

2007/1/1(Mon) 10:37:39|NO.4582

あけましておめでとうございます

難しいですね プロシージャIDを求めようとHSP2で作ったのですが

#include "llmod.as" prm.0 = hwnd prm.1 = GCL_WNDPROC dllproc "GetClassLongA", prm, 2, D_USER mes ""+dllret stop
0になってしまいました
なにがいけないんでしょうか



Irisawa

リンク

2007/1/1(Mon) 11:40:10|NO.4586

>>敬老さん
2.xxですか。こちらではタイトルにもあるように3.xxがメインですので2.xxの質問をする
場合、それ相応のことを書いた方がより的確な回答を得られます。

で、以下は2.xxでの回答になります。

1. HSPウィンドウのHWNDの取得は以下のようにします


mref BMSCR, 67 hwnd = BMSCR.13

2. GCL_WNDPROC は -24 です


#const GCL_WNDPROC -24
参考
http://www.winapi-database.com/Window/Class/SetClassLong.html

HSPではウィンドウのサブクラス化とかコールバック関数の定義とかは標準ではサポート
していないのでプラグインかマシン語を使用するしかありません。
HSP3.xxではコールバック関数を定義できるようになる予定ですが今のところまだいつに
なるかは未定のようです。
なお、HSPのウィンドウプロシージャで他のウィンドウプロシージャを置き換えては
いけません。
サブクラス用のウィンドウプロシージャではないので。



Irisawa

リンク

2007/1/1(Mon) 13:54:52|NO.4591

HSP3でマシン語を使用してサブクラス化してみました。
HSP2では今回の件は根本的に不利なのでHSP3を使用してください。

参考
http://yokohama.cool.ne.jp/chokuto/urawaza/mcn/index.html
http://www.winapi-database.com/Message/WM/WM_IME_STARTCOMPOSITION.html
http://www.winapi-database.com/Message/WM/WM_IME_COMPOSITION.html
http://www.winapi-database.com/Message/WM/WM_IME_ENDCOMPOSITION.html


#uselib "user32.dll" #func CallWindowProc "CallWindowProcA" var, int, int, int, int #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int #func DestroyWindow "DestroyWindow" int #func SendMessage "SendMessageA" int, int, int, int ; 定数の定義 #const GWL_WNDPROC -4 #const WM_IME_STARTCOMPOSITION 0x10d #const WM_IME_ENDCOMPOSITION 0x10e #const WM_IME_COMPOSITION 0x10f ; メッセージフック oncmd gosub *OnImeStartComposition, WM_IME_STARTCOMPOSITION oncmd gosub *OnImeComposition, WM_IME_COMPOSITION oncmd gosub *OnImeEndComposition, WM_IME_ENDCOMPOSITION ; マシン語の作成 dim fncode, 26 fncode( 0) = 0x51ec8b55, 0x45c75756, 0x000000fc, 0xfc758b00, 0x830c7d8b fncode( 5) = 0x2e7402ff, 0x7410ff83, 0x0cff811f, 0x76000001, 0x0fff812c fncode(10) = 0x77000001, 0x1475ff24, 0x571075ff, 0xff1476ff, 0x15eb0c56 fncode(15) = 0xff0875ff, 0xc0330856, 0x76ff1aeb, 0xfffc6a10, 0x56ff0875 fncode(20) = 0x1475ff04, 0x571075ff, 0xff0875ff, 0x16ff1076, 0xc2c95e5f fncode(25) = 0x00000010 ; 関数のポインタを格納 pfn = varptr(fncode) procdata(0) = varptr(CallWindowProc), varptr(SetWindowLong) procdata(2) = varptr(DestroyWindow), varptr(SendMessage) ; インプットボックス作成 sdim buf input buf id = stat ; ウィンドウプロシージャを取得 inp_hwnd = objinfo(id, 2) procdata(4) = GetWindowLong(inp_hwnd, GWL_WNDPROC) procdata(5) = hwnd p = varptr(procdata) memcpy fncode, p, 4, 9 ; サブクラス化 SetWindowLong inp_hwnd, GWL_WNDPROC, pfn stop ; IME 入力開始 *OnImeStartComposition return ; IME 入力中 *OnImeComposition return ; IME 入力終了 *OnImeEndComposition return



敬老

リンク

2007/1/1(Mon) 22:58:24|NO.4615

わかりました がんばってみます



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