◀一般トップへ
  • 4943 (無題)
    • 4944 Re:(無題)
    • 4947 Re: クリップアウト2000
      • 4950 Re2: クリップアウト2000
        • 4951 Re3: クリップアウト2000
        • 4952 Re3: クリップアウト2000
          • 4953 Re4: クリップアウト2000
  • [4943] (無題) かずかず 2006年01月02日 02:33

    なにが問題なのか不明なのですが、サクラエディタにからんだ
    自分の環境で困ってる事を報告します。OSはwindows XP SP2です。

    もともとsakura.exe 1.5.21を使用していたのですが最新版の1.5.8.1にexeファイルを
    置き換えました。

    また、私は、クリップボード管理に「クリップアウト2000」を使用しています。

    1.5.21のsakura.exeを使用中にクリップアウト2000をalt + x で呼び出しクリップボード内容を
    変更した場合、アクティブなウィンドウが直前に使用していたサクラエディタウィンドウに戻されるていた
    のですが、1.5.8.1のsakura.exe ではアクティブなウィンドウがサクラエディタに戻りません。
    他のエディタやアプリケーションではこの事象は発生せずサクラエディタのみで発生するみたいです。
    何が原因なのでしょうか?また、過去と同様の操作感を保つ良い方法は無いでしょうか?

    • [4944] Re:(無題) かずかず 2006年01月02日 02:34

      手がすべって無題でいれてしまいました。。すみません。。
    • [4947] Re: クリップアウト2000 げんた 2006年01月09日 00:48

      調べたところ1.5.5.0までは正常で1.5.6.0より動作しなくなっていました.
      このソフトは貼り付け時にWM_KEYDOWN/WM_KEYUPメッセージを送ってCtrl+Vをエミュレートするように作られているのですが,最新版で挙動を調べるとCTipWndというツールチップのウィンドウへメッセージを送っているためにサクラエディタがアクティブにならず,送ったメッセージも無視されているようです.

      1.5.5.0ではTextEditorWindow (CEditWnd)へメッセージが送られており,期待通り処理されています.

      で,問題は何故その差が出たのかですが...
      TabのDrag & Dropとかが入っていますが,何か関係あるのかなぁ...

      クリップアウト2000はDLLを使っていないのでキーボードフック等でウィンドウ状態を監視してはいないと考えられます.ということは何らかの手段で自分の直前のウィンドウを取得しているのではないかと思います.しかし,何故変わってしまったのか...は識者の方にバトンタッチ..(((^^)
      • [4950] Re2: クリップアウト2000 (全略) 2006年01月09日 14:13

        ▼ げんたさん
        > 調べたところ1.5.5.0までは正常で1.5.6.0より動作しなくなっていました.
        サクラエディタ側で対処したいなら
        CEditWndでWM_ACTIVATEを処理している箇所をコメントアウトしたのが原因じゃないでしょうか?
        試しにコメント解除してみると1.5.5.0同様の貼り付けができました

        >このソフトは貼り付け時にWM_KEYDOWN/WM_KEYUPメッセージを送ってCtrl+Vをエミュレートするように作られているのですが
        よく調べましたね (^-^;;

        WM_KEYDOWN/WM_KEYUPを使っているなら、クリップアウト2000側の問題じゃないのかとも思いますけど
        例えばSendInputを使う方法ならこんな事はおこらないですし
        • [4951] Re3: クリップアウト2000 げんた 2006年01月09日 15:29

          >CEditWndでWM_ACTIVATEを処理している箇所をコメントアウトしたのが原因じゃないでしょうか?
          >試しにコメント解除してみると1.5.5.0同様の貼り付けができました
          おお,本当だ.しか~し,しかしです.残念ながら別の問題が...

          これを入れるとモードレスダイアログ(検索とか)への貼り付けが出来なくなるんです.

          例えば検索ダイアログ→クリップアウト2000 として貼り付けを行うと
          WM_ACTIVATEAPP処理無し: 検索ボックスへ
          処理有り: エディタへ

          フォーカスがエディタに戻ったときに必ず編集エリアがアクティブになるのでこのようになってしまいます.

          と考えると,CTipWndにWM_KEYDOWN/WM_KEYUPを親であるCEditViewへ転送させるのがよいのかなと思います.
          (入力ボックスを持たない全てのウィンドウでやらないとダメなのか...?)
        • [4952] Re3: クリップアウト2000 ryoji 2006年01月09日 15:37

          ▼ (全略)さん
          > CEditWndでWM_ACTIVATEを処理している箇所をコメントアウトしたのが原因じゃないでしょうか?
          > 試しにコメント解除してみると1.5.5.0同様の貼り付けができました

          ちょうど確認しようと思っていた箇所です。
          手間が省けました。確認ありがとうございます。m(__)m
          ここは、起動時の画面ちらつき抑止のために除去したところです。
          #WM_ACTIVATEAPP で強制的に SetFocus() するのもやや不自然と思いましたし。

          > >このソフトは貼り付け時にWM_KEYDOWN/WM_KEYUPメッセージを送ってCtrl+Vをエミュレートするように作られているのですが
          > よく調べましたね (^-^;;

          たぶん、自画面よりも後ろにある最初の可視画面をフォアグラウンド化して
          キーボードイベントを発生させているのだと思います。
          で、CTipWnd は初期化時に可視になっていますね(サイズは0)。
          初期化時は不可視にしておくのがいいんじゃないかと。

          diff -ur --dos sakura_core_org/CTipWnd.cpp sakura_core/CTipWnd.cpp
          --- sakura_core_org/CTipWnd.cpp Sun Oct 30 15:56:16 2005
          +++ sakura_core/CTipWnd.cpp Mon Jan 09 15:09:24 2006
          @@ -77,6 +77,8 @@
          NULL // handle to menu, or child-window identifier
          );

          + Hide(); // 2006.01.09 ryoji Create直後は不可視にする
          +
          if( NULL != m_hFont ){
          ::DeleteObject( m_hFont );
          m_hFont = NULL;

          #CTipWnd は現状でも辞書Tipを1度表示すればその後は
          #可視/不可視の切り替え動作になってるみたいですね
          • [4953] Re4: クリップアウト2000 げんた 2006年01月09日 19:18

            >で、CTipWnd は初期化時に可視になっていますね(サイズは0)。
            >初期化時は不可視にしておくのがいいんじゃないかと。
            一応動作的にはOKになりましたが,Hide()の副作用かウィンドウを開く際に開く直前にActiveだったウィンドウがActive-Deactiveを2回ほど繰り返してタイトルバーがチカチカっとなるようです.

            なので,最初から表示しないで作成するようにしたらうまく行きました.