- 作成者投稿
- 2014年5月5日 4:45 am #19494星くず 彼方に参加者
開発お疲れ様です。
EmEditor Pro v14.4.2 (64bit) を、Win8.1 Pro 64bit上で使ってて不具合と思われるのがあります。・かなり行数が多いファイルを開いている。(最初に発生した時は14043行の文書でしたが、実験では7000行くらいの文書でも起こりました。)
・最後の行が改行だけではなく、何か文字があってから改行がある。
foo[EOF]
のような。
・ルーラーを表示している。上記条件で、文頭から「文末へ」コマンドで移動して、プラグインのOnEventsにEVENT_CARET_MOVEDが来たときタイミングで、
Editor_GetCaretPos( hWnd, POS_VIEW, &view_pos ); Editor_ViewToDev( hWnd, &view_pos, &dev_pos );
を行うと、デバイス座標を正しく取得できないようです。
(カーソルの表示座標は正しい値が取得できていました。)
具体的には
カーソルの表示座標 (1, 14042 )
デバイス座標 ( 14, -2147483648 ) // ※0xffffffff80000000
といった具合です。
「文末へ」ではなく、例えば (0, 14042)から、(1,14042) へ移動したときは、デバイス座標として ( 14, 867 ) といった妥当な値が取得できています。では確認お願いします。
2014年5月6日 7:47 am #19500Yutaka Emuraキーマスター星くず彼方に 様
いつもお世話になっております。
これは、こちらでは再現できなかったのですが、最終行に文字がある場合ということでヒントを得て、問題の部分が特定できたと思います。0xffffffff80000000 (INT_MIN) というのは、32ビット整数の最小値になります。デバイス座標の場合、無効な値を意味します。画面に入りきらない非常に大きな、またはマイナスの非常に小さな値の場合に、この値になります。文末へ移動するコマンドの途中では、カーソル移動とスクロールの2段階があります。カーソル移動の後、スクロールを行う前の間に、なんらかの理由で EVENT_CARET_MOVED が発行されてしまうと、この状態になってしまいます。(つまり、カーソルは一番下なのに、スクロール バーは一番上なので、カーソル位置が画面の非常に下の方になってしまいます)問題は修正できていると思いますので、次のベータ版が公開されたらお試しいただけると幸いです。
ご報告ありがとうございました。
今度もよろしくお願い申し上げます。2014年5月6日 11:56 am #19501星くず 彼方に参加者次のベータの修正で直るかもしれませんが、一応追加の情報です。
表示/非表示を切り替えられるものはいくつかありますが、
各種ツールバーの有無は影響しない
タブの有無/スタイルは影響しない
スクロールバーの有無は影響しない
ステータスバーの有無は影響しない
ルーラーを非表示にしてる時は発生しない
ルーラーを表示しているときだけおかしくなるルーラーを表示しているときの「文末へ」コマンド時、OnEventsに EVENT_CARET_MOVED が、2回やってくる。
そのうち1回目でやると、0xffffffff80000000へ変換される。 2回目でやった時は正常値へ変換される。
ルーラーを表示してないときの「文末へ」コマンド時、OnEventsのEVENT_CARET_MOVEDは1回だけ。逆に「文頭へ」コマンドの場合は、ルーラーの有無にかかわらず、OnEventsのEVENT_CARET_MOVEDは1回だけ。
2014年5月7日 7:51 am #19503Yutaka Emuraキーマスター星くず彼方に 様
いつも EmEditor Professional をお使いいただき、誠にありがとうございます。
先ほど、v14.4.3 beta 1 を公開しましたので、お試しいただけると幸いです。
http://jp.emeditor.com/forums/topic/emeditor-v14-4-3-beta-1-%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/EE_VIEW_TO_DEV メッセージ (Editor_ViewToDev インライン関数) の後に、dev_pos の x と y の値が LONG_PTR_MIN または LONG_PTR_MAX かどうかをチェックしていただくことをおすすめします。例えば、カーソルが文書の一番上にある状態で、スクロール バーを下にドラッグして一番下を表示した状態で現在のカーソル位置 (0,0) をデバイス座標に変換しようとすると、dev_pos の結果は LONG_PTR_MIN または LONG_PTR_MAX になり無効だとわかります。
前回、0xffffffff80000000 (INT_MIN) と書きましたが、これは正しくありませんでした。32ビットと64ビットの場合で、この値は異なり、正しくは以下のようになります。(新しい plugin.h に定義を追加しました)
#if (defined(_WIN64) || defined(_W64)) #define LONG_PTR_MIN LLONG_MIN // (-9223372036854775807i64 - 1) #define LONG_PTR_MAX LLONG_MAX // 9223372036854775807i64 #else #define LONG_PTR_MIN LONG_MIN // (-2147483647L - 1) #define LONG_PTR_MAX LONG_MAX // 2147483647L #endif
ヘルプの EE_VIEW_TO_DEV メッセージ (Editor_ViewToDev インライン関数) には説明を追加しました。
この度は詳細なご報告をいただき、ありがとうございました。Yutaka
2014年5月7日 9:06 am #19505星くず 彼方に参加者v14.4.3 beta 1で問題が修正されてるのを確認しました。
ありがとうございました。 - 作成者投稿
- このトピックに返信するにはログインしてください。