Re: ToolLib_StringInput改造 ( No.1 ) |
- 名前:管理人 日時:2017/10/18 01:12
> まず、変換ウィンドウ、IME入力モード表示はSetDrawAreaの描画制限領域の設定の影響を受けずに表示できるようにしたいのですが、可能でしょうか。
DrawKeyInputModeString でIME入力モードを描画するサイト同じように自前で SetDrawArea を呼び出して
描画制限領域を解除すれば解決、というわけではないでしょうか?
> そこで、もし入力中文字列の描画用の加工がdxlib.hで公開している関数でできうるのであれば、その表示用の文字列加工の流れを教えていただきたいです。
すみません『入力文字列の描画用の加工』とは具体的にはどのようなことでしょうか?
とりあえず DrawKeyInputString や DrawObtainsString_CharClip の中で行っていることは DxLib.h に
載っている関数だけで実現していますので、よろしければDXライブラリのソースの DxInputString.cpp の
中にある関数 NS_DrawKeyInputString や DrawObtainsString_CharClip_WCHAR_T のコードをご覧になってみてください
> @関数RectClippingは具体的にどういうことをしている関数なのか
引数 Rect が示す矩形が引数 ClippuRect が示す矩形よりはみ出ていたら、はみ出ている部分を ClippuRect が示す
矩形に収まるように補正する、という処理を行う関数です
DxMath.cpp に実際の処理が書かれていますので、よろしければご覧ください
> AIMEモード表示について、例えば全角ひらがなにして一度変換→確定を行うと一旦表示が消え、再度入力を再開すると表示されるが
> これを継続的に表示にするのは難しいか
できました
ただ、今からDxLib.libファイルを作成すると睡眠時間が危険なことになってしまうので明日修正版をアップします m(_ _;m
> BIMEで変換の際、単語または文節ごとに下線が引かれ、変換中のものには左にカーソルが出現するが、変換中のものの下線はほかの下線より
> 太く表示し、カーソルは一番右に表示するといったような表示にしてほしい。
カーソルについてですが、あのカーソルは IME入力中の文字列を抜いた文字列の入力位置なので今の位置から動かすことはできません
( IME入力の文字列は、決定した瞬間にその文字列がキー入力された、という体で処理されています )
変換中のものの下線を太くする事についてですが、色が変わるだけでは不十分でしょうか? (・・;
> CMakeKeyInputで文字数(MaxStrLength)を0に設定し入力しようとすると例外エラーになる。念のため報告
ご報告ありがとうございます
MaxStrLength に 0 が渡された場合はエラーになる( 戻り値が -1 になる )ようにしました
こちらの変更も明日アップする修正版に反映されます m(_ _;m
 |
Re: ToolLib_StringInput改造 ( No.2 ) |
- 名前:管理人 日時:2017/10/19 00:36
|
Re: ToolLib_StringInput改造 ( No.3 ) |
- 名前:gmo 日時:2017/10/19 20:37
ご回答およびご対応、ありがとうございます。
テストバージョンにて、MakeKeyInputのエラー処理、およびIME変換モードの継続表示を確認いたしました。
> DrawKeyInputModeString でIME入力モードを描画するサイト同じように自前で SetDrawArea を呼び出して
> 描画制限領域を解除すれば解決、というわけではないでしょうか?
一番最初にそのような形にしましたが、入力の時に文字列がウィンドウからはみ出る表示となります。
現状ですと、入力文字列の表示制限を優先して変換ウィンドウは表示自体をやめるか、変換ウィンドウの表示を優先して
入力文字列の表示制限をあきらめるか、という選択肢になってます。
(機能的には後者で問題はないのですが・・)
できれば入力文字列以外の表示の制限は、入力文字列の表示制限と別にもできるオプションが欲しいと思った次第です。
> 中にある関数 NS_DrawKeyInputString や DrawObtainsString_CharClip_WCHAR_T のコードをご覧になってみてください
はい、ソースを見てできそうなことを探ることにします。
> 引数 Rect が示す矩形が引数 ClippuRect が示す矩形よりはみ出ていたら、はみ出ている部分を ClippuRect が示す
> 矩形に収まるように補正する、という処理を行う関数です
> DxMath.cpp に実際の処理が書かれていますので、よろしければご覧ください
ありがとうございます。
知らなかったので、似たようなものを自分で作ってました・・・
ライブラリで用意されているのならこちらに替えようと思います。
> カーソルについてですが、あのカーソルは IME入力中の文字列を抜いた文字列の入力位置なので今の位置から動かすことはできません
> ( IME入力の文字列は、決定した瞬間にその文字列がキー入力された、という体で処理されています )
>
承知しました。
重要な役目を持ってるならおいそれと動かせないですね。
> 変換中のものの下線を太くする事についてですが、色が変わるだけでは不十分でしょうか? (・・;
変換箇所を識別することに関してはもちろん色で十分なのですが、一応は汎用的な使い方ができるように構築しており、
その入力文字の色がらみの設定は、文字色と背景色、文字選択時の文字色と背景色くらいの設定に極力抑えたいと思っています。
というのも、文字色関連の設定は単独の設定で済まない場合も多く、「見やすさ」や「それと区別するためにそれに被らない色」などの
色設定全体を見る調整が出てしまうためです。
(キーインプットを初めて触ったときに、カラフル過ぎるという印象を持ってしまったというのもありますが、)
それでキーインプット関連の全体の色数を落として調整をし、入力文字については通常の文字列とIME文字列の差を
なくしていったのですが、変換についてはせっかく下線が表示されているのだから、それで変換中とそれ以外の識別ができれば・・・
と思いました。
キーインプットにおいて、細かく色を設定できるのはカラフルにもシンプルにもできるので非常にありがたく、
実際それを多く利用して構築しているのですが、カラフルにした場合の「色に寄せた」表示だけでなく、
色数を少なくした場合の、下線の太さなどでのいわば「形に寄せた」表示もできるようになったらうれしいです。
 |
Re: ToolLib_StringInput改造 ( No.4 ) |
- 名前:管理人 日時:2017/10/21 00:49
 |
Re: ToolLib_StringInput改造 ( No.5 ) |
- 名前:gmo(解決) 日時:2017/10/22 13:23
対応ありがとうございます。
> 変換時の選択中の文節の下線について太く描画されるように処理を変更してみましたので、
> よろしければご確認ください m(_ _)m
テストバージョンにて変換時の「太線の下線」を確認しました。ありがとうございます!
> // キー入力ハンドルの入力中文字列を描画する際の描画範囲を設定する
> int SetKeyInputDrawArea( int x1, int y1, int x2, int y2, int InputHandle ) ;
> こちらを使用することで入力中の文字列のみ描画範囲を制限することができます
> ( ただしIME入力中の文字列は描画範囲を無視します )
ありがとうございます。
この関数を組み込んだところ、表示制限を別個にできることを確認しました。
掲示板でこの関数のトピックをざっと読んだときにもっと深く内容読めばよかったと反省してます・・
文字列末尾の見切れ対応としか把握してませんでした。
細かいところですがこの関数について、KeyInputに設定してる領域がスクロールの結果実質描画されないようなとき、
(例えばRectClippingの結果矩形の座標が50,50,50,100のようなとき)
描画処理を進めてしまった場合、新たにSetDrawArea(0, 0, 999999, 999999)が呼ばれるまで、(通常の?)描画制限が
残り、ほかのオブジェクトの描画がされないということがありました。
すなわち、上記の状況の時にも問題なく描画を通したい場合は、
// 入力文字列制限の設定
SetKeyInputDrawArea(temp.left, temp.top, temp.right, temp.bottom, inputHandle);
// 変換ウィンドウは制限なしにする
SetDrawArea(0, 0, 999999, 999999);
// 入力中文字列の描画
DrawKeyInputString(temp.left, temp.top, inputHandle);
// 設定を元に戻す
SetDrawArea(0, 0, 999999, 999999);
としなければならないみたいです。
矩形が特殊な状況ですし、SetDrawAreaを同じ設定でDrawKeyInputString前後で呼び出すことに
個人的に少しモヤモヤしただけではありますが、一応報告します。
(構築中のものは矩形がスクロールの結果一定幅の表示領域を持たない場合は描画プロセス自体を通さないように
する予定です。負荷の削減や、この関数と関係のない問題もあったので)
対応していただき本当にありがとうございました。
次に進めそうなので解決とさせていただきます。
 |
Re: ToolLib_StringInput改造 ( No.6 ) |
- 名前:管理人 日時:2017/10/24 00:28
|
Re: ToolLib_StringInput改造 ( No.7 ) |
- 名前:gmo(解決) 日時:2017/10/24 19:05
ご対応ありがとうございます。
テストバージョンにて、上記の描画プロセスからDrawKeyInputStringの後のSetDrawArea(0, 0, 999999, 999999)を
削除した状態で実行しても、ほかの描画プロセスには影響がないことを確認しました。
|