◀ANSI版開発トップへ
  • 3432 カーソルがルーラーに重なる。
    • 3433 RE: カーソルがルーラーに重なる。
      • 3435 Re2: カーソルがルーラーに重なる。
        • 3436 Re3: カーソルがルーラーに重なる。
      • 3687 Re2: 最後の3行目から2行目へ移動
        • 3696 画面の高さが3ライン以下でも良い
          • 3714 Re: 画面の高さが3ライン以下でも良い
            • 3718 Re2: 画面の高さが3ライン以下でも良い
              • 3730 Re3: 画面の高さが3ライン以下でも良い
                • 3732 Re4: 画面の高さが3ライン以下でも良い
            • 3751 Re2: 画面の高さが3ライン以下でも良い
        • 3697 Re3: 上下のマージンを自動設定しない
  • [3432] カーソルがルーラーに重なる。 じゅうじ 2004年02月21日 19:20

    バグ報告はこちら、DEVで良かったでしょうか?
    3行ほどの入力をして、ウィンドウの高さを4行以下にすると、
    カーソルが上のルーラーに重なります。
    また、この3行目に文字を入力すると、テキストが上下に移動します。

    自信のある方、試してみて下さい。よろしくお願いします。

    Ver.1.4.3.7
    Windows 2000
    • [3433] RE: カーソルがルーラーに重なる。 げんた 2004年02月22日 01:20

      >3行ほどの入力をして、ウィンドウの高さを4行以下にすると、
      >カーソルが上のルーラーに重なります。
      やってみましたが,うまく再現しませんでした.

      >また、この3行目に文字を入力すると、テキストが上下に移動します。
      こちらは再現しました.高さを2行分くらいにしてキャレットを右に移動すると1行目では普通ですが2行目では1桁動かすごとに上下にスクロールしますね.

      どこかで計算式を間違えている方に3カノッサ.
      #というときの「カノッサ」って何に由来しているんだろう?
      • [3435] Re2: カーソルがルーラーに重なる。 じゅうじ 2004年02月22日 04:40

        ▼ げんたさん
        > >3行ほどの入力をして、ウィンドウの高さを4行以下にすると、
        > >カーソルが上のルーラーに重なります。
        > やってみましたが,うまく再現しませんでした.

        すみません、何行のファイルでも良いのですが、
        ウィンドウの高さは3行以下です。

        共通設定→全般→スクロール→行数→3に設定して、
        キャレットIを上から下に移動してゆくと、
        偶数行で、テキストエリアから外れてしまいます。
        • [3436] Re3: カーソルがルーラーに重なる。 げんた 2004年02月22日 17:47

          >共通設定→全般→スクロール→行数→3に設定して、
          >キャレットIを上から下に移動してゆくと、
          >偶数行で、テキストエリアから外れてしまいます。
          再現しました.文字が重なるわけではなく,キャレット位置だけがおかしくなるんですね.

          CEditView::MoveCursor()のカーソル位置設定処理の中であわせて必要なスクロール量を計算しています.エディタの一番下に2行のマージンを取っていて,ファイルの末尾の場合にも一番下を2行あけるようになっています.このファイル末尾処理がどうも問題のようです.

          画面に入りきらない行数のファイルの末尾付近でカーソルの下矢印を押して画面がスクロールしながら最終行に近づいていくとき,最終行の2行前に移ったところで上方向に画面がスクロールする現象が出ますが,これも同じ原因です.

          ファイル末尾の余白行数を変えて試してみたんですが,表示部分が2行しかないような場合だとやっぱりだめです.
      • [3687] Re2: 最後の3行目から2行目へ移動 じゅうじ 2004年07月31日 06:32

        [暑中見舞い]
        ウィンドウサイズを4行以上にして、
        最後の3行目から2行目に移動する時の、表示ぶれが無くなりました。

        --- コピー ~ CEditView.cpp Sun May 30 02:23:20 2004
        +++ CEditView.cpp Sat Jul 31 06:04:26 2004
        @@ -2707,13 +2707,15 @@
        if( nWk_CaretPosY >= m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) ){
        if( nWk_CaretPosY > m_pcEditDoc->m_cLayoutMgr.GetLineCount() - ( nCaretMarginY + 2 ) ){
        if( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 > m_nViewRowNum ){
        - nScrollRowNum = m_nViewTopLine - ( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 - m_nViewRowNum );
        +// nScrollRowNum = m_nViewTopLine - ( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 - m_nViewRowNum );
        + nScrollRowNum =
        + m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) - nWk_CaretPosY;
        }else{
        nScrollRowNum = 0;
        }
        }else{
        nScrollRowNum =
        - m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY ) - ( nWk_CaretPosY + 2 );
        + m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) - nWk_CaretPosY;
        }
        }
        if( bDraw ){

        (ssrc_2004-06-05を使用)
        • [3696] 画面の高さが3ライン以下でも良い じゅうじ 2004年08月07日 18:48

          画面の高さを3ライン以下にした時に、カーソルが上にはみ出す問題の修正です。
          コメントも追加しました。左右キーにも対応しています。
          --- コピー ~ CEditView.cpp Sun May 30 02:23:20 2004
          +++ CEditView.cpp Sun Aug 08 01:23:50 2004
          @@ -2697,23 +2697,30 @@
          m_nViewLeftCol -= nScrollColNum;

          - /* 垂直スクロール量(行数)の算出 */
          + /* 垂直スクロール量(行数)の算出 */ // 移動先は、画面の最大行数-2より下か?(下スクロール)
          + if( nWk_CaretPosY >= m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) ){
          +/* if( nWk_CaretPosY > m_pcEditDoc->m_cLayoutMgr.GetLineCount() - ( nCaretMarginY + 2 ) ){
          + * if( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 > m_nViewRowNum ){
          + * nScrollRowNum = m_nViewTopLine - ( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 - m_nViewRowNum );
          + * }else{
          + * nScrollRowNum = 0;
          + * }
          + * }else{ */
          + if( m_nViewRowNum <= nCaretMarginY + 2 ){
          + nScrollRowNum = m_nViewTopLine - nWk_CaretPosY;
          + }else{
          + nScrollRowNum =
          + m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) - nWk_CaretPosY;
          + }
          + }else // 移動先は、画面のスクロールラインより上か?(上スクロール)
          if( nWk_CaretPosY < m_nViewTopLine + ( nCaretMarginY ) ){
          - if( nWk_CaretPosY < ( nCaretMarginY ) ){
          + if( m_nViewRowNum == ( nCaretMarginY + 2 ) ){ // 画面が3行の時の処理を追加
          + nScrollRowNum = m_nViewTopLine - nWk_CaretPosY;
          + }else
          + if( nWk_CaretPosY <= ( nCaretMarginY ) ){
          nScrollRowNum = m_nViewTopLine;
          }else{
          nScrollRowNum = m_nViewTopLine + ( nCaretMarginY ) - nWk_CaretPosY;
          }
          - }else
          - if( nWk_CaretPosY >= m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) ){
          - if( nWk_CaretPosY > m_pcEditDoc->m_cLayoutMgr.GetLineCount() - ( nCaretMarginY + 2 ) ){
          - if( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 > m_nViewRowNum ){
          - nScrollRowNum = m_nViewTopLine - ( m_pcEditDoc->m_cLayoutMgr.GetLineCount() + 2 - m_nViewRowNum );
          - }else{
          - nScrollRowNum = 0;
          - }
          - }else{
          - nScrollRowNum =
          - m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY ) - ( nWk_CaretPosY + 2 );
          - }
          +
          }
          if( bDraw ){
          以上[修正しました]
          • [3714] Re: 画面の高さが3ライン以下でも良い げんた 2004年08月18日 23:21

            画面の高さを2ラインくらいにするとやっぱりカーソルがキャレット位置に行くことがあるようです.
            そのときの全体の行数は4行

            一応確認ですが,パッチ適用後は

            /* 垂直スクロール量(行数)の算出 */ // 移動先は、画面の最大行数-2より下か?(下スクロール)
            if( nWk_CaretPosY >= m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) ){
            if( m_nViewRowNum <= nCaretMarginY + 2 ){
            nScrollRowNum = m_nViewTopLine - nWk_CaretPosY;
            }else{
            nScrollRowNum =
            m_nViewTopLine + m_nViewRowNum - ( nCaretMarginY + 2 ) - nWk_CaretPosY;
            }
            }else // 移動先は、画面のスクロールラインより上か?(上スクロール)
            if( nWk_CaretPosY < m_nViewTopLine + ( nCaretMarginY ) ){
            if( nWk_CaretPosY <= nCaretMarginY ){
            nScrollRowNum = m_nViewTopLine;
            }else{
            nScrollRowNum = m_nViewTopLine + ( nCaretMarginY ) - nWk_CaretPosY;
            }
            }

            でいいんですよね?
            中身はまだ理解していません...(^^ゞ
            • [3718] Re2: 画面の高さが3ライン以下でも良い じゅうじ 2004年08月19日 02:49

              ▼ げんたさん
              先週よりも少し古いです。
              - if( nWk_CaretPosY < ( nCaretMarginY ) ){
              + if( m_nViewRowNum == ( nCaretMarginY + 2 ) ){ // 画面が3行の時の処理を追加
              + nScrollRowNum = m_nViewTopLine - nWk_CaretPosY;
              + }else
              + if( nWk_CaretPosY <= ( nCaretMarginY ) ){
              先週何回か修正したのが原因のようで、すみません。
              • [3730] Re3: 画面の高さが3ライン以下でも良い げんた 2004年08月30日 22:11

                じゅうじさんの案では画面下2ラインのマージンが死守されるようですが,たとえば3行のサイズのウィンドウを新たに作ってそこに行を加えていくと,必ず下の2行が空白となるためにEnterを押すごとに入力部分が画面から消えてしまいあたかも文字が消えてしまうかのように見えます.

                マージンがウィンドウの高さによって変わるのが奇妙だとのことですが,高さが極端に低い場合にはマージン=0とする方が見た目が自然で扱いも簡単ではないかと思いますがどうでしょうか.
                • [3732] Re4: 画面の高さが3ライン以下でも良い じゅうじ 2004年08月30日 23:24

                  ▼ げんたさん
                  ウィンドウの高さが3と2の時は、下に2行空けるよりも、上に1行有ったほうが良さそうです。
                  (しばらくお待ちくださいooo)

                  前にも書きましたが、ウィンドウの行数が20以上の時に、空白行が増える必要は、無いと思います。
            • [3751] Re2: 画面の高さが3ライン以下でも良い じゅうじ 2004年09月27日 01:28

              少しソースを圧縮してみました。
              +++ CEditView.cpp Aug 18 23:55:14 2004
              int CEditView::MoveCursor() 行番号 2705,2724 です。

              ▼ げんたさん
              > 画面の高さを2ラインくらいにするとやっぱりカーソルがキャレット位置に行くことがあるようです.
              > そのときの全体の行数は4行
              >
              > 一応確認ですが,パッチ適用後は
              > でいいんですよね?
              > 中身はまだ理解していません...(^^ゞ

              /* 垂直スクロール量(行数)の算出 */ // 移動先は、画面の最大行数-2より下か?(Downキー)
              if( nWk_CaretPosY > m_nViewTopLine + (m_nViewRowNum - 2) - nCaretMarginY ){
              nScrollRowNum = (m_nViewRowNum - 2) - nCaretMarginY;
              if( (m_nViewRowNum - 2) <= nCaretMarginY ) // 画面が3行以下の時
              nScrollRowNum = 0;
              nScrollRowNum += m_nViewTopLine - nWk_CaretPosY;
              }else // 移動先は、画面のスクロールラインより上か?(Upキー)
              if( nWk_CaretPosY < m_nViewTopLine + nCaretMarginY ){
              nScrollRowNum = min(nWk_CaretPosY, nCaretMarginY);
              if( (m_nViewRowNum - 2) <= nCaretMarginY ) // 画面が3行以下の時
              nScrollRowNum = 0;
              nScrollRowNum += m_nViewTopLine - nWk_CaretPosY;
              }
        • [3697] Re3: 上下のマージンを自動設定しない じゅうじ 2004年08月08日 01:39

          ▼げんたさんへ
          上下のスクロールマージンが、画面の高さによって変わるのが変なので、
          修正を希望します。
          --- コピー ~ CEditView.cpp Sun May 30 02:23:20 2004
          +++ CEditView.cpp Sun Aug 08 01:23:50 2004
          @@ -2666,9 +2666,9 @@
          nCaretMarginY = 0;
          }else{
          - // 2001/10/20 novice
          - nCaretMarginY = m_nViewRowNum / nCaretMarginRate;
          - if( 1 > nCaretMarginY ){
          +
          +// nCaretMarginY = m_nViewRowNum / nCaretMarginRate;
          +// if( 1 > nCaretMarginY ){
          nCaretMarginY = 1;
          - }
          +// }
          }
          // 2004.04.02 Moca 行だけ有効な座標に修正するのを厳密に処理する
          以上