テキストボックス内でのカーソルの行位置の取得

解決


kumanoko  2005-02-05 01:32:56  No: 88219

テキストボックス内でカーソルが動いたとき、
カーソルが今何行目にあるかを表示したいのですが、
どうしたらいいでしょうか?


じゃんぬねっと  URL  2005-02-05 01:55:43  No: 88220

カレット位置で宜しかったでしょうか?
http://f57.aaa.livedoor.jp/~jeanne/tips/textbox/01-selstart.html


kumanoko  2005-02-05 02:10:01  No: 88221

お返事とサンプルありがとうございます。
カレットって言うんですね。
サンプルでは、テキストの文字数がカウントされているんですが、
純粋に行数だけというのは可能でしょうか?
しかも、カレットが動いたときにリアルタイムで表示したいのですが・・・


LESIA  2005-02-05 03:08:57  No: 88222

こんなのとか。
http://www.vbvbvb.com/jp/gtips/0701/gSendMessageEmLinefromchar.html

呼び方は、カーソルでもかまわないと思いますよ。
あと、キャレットとも言いますね。


じゃんぬねっと  URL  2005-02-05 03:47:35  No: 88223

あ、行だったのですね...。
しっかり読んでいませんでした... 申し訳ありません m(_ _)m


Say  2005-02-05 04:19:12  No: 88224

>呼び方は、カーソルでもかまわないと思いますよ。
>あと、キャレットとも言いますね。

「アイビーム」という言い方もあったりする。
目から出る光線のこと

ではなくて形状がI形梁の断面に似ているからですね。


kumanoko  2005-02-06 02:21:26  No: 88225

たくさんのお返事有難うございます!
LESIAさん
  サンプル有難うございます。
  .basの意味も分かってない初心者なのでそこから調べて何とか動きました。
  じゃんぬねっとさんのサンプルとあわせて、カレットの位置を検出して
  表示することには成功したのですが、キャレットが動いたときに作動するようには出来ないのですか?一応プログラムは作ってみたのですが・・・
  (.frm) だけ書いています。
  Option Explicit
Dim v As Double
    Dim lngLineFromCharCharIndex As Long
    Dim lngLineFromCharLineIndex As Long

Private Sub KeyDown()

    v = Text1.SelStart
    ' 先頭からの文字目を指定
    lngLineFromCharCharIndex = v
    ' 指定文字番目が含まれる行番号を取得
    lngLineFromCharLineIndex = _
        SendMessage(Text1.hWnd, _
                    EM_LINEFROMCHAR, _
                    lngLineFromCharCharIndex, _
                    ByVal CLng(0))
    ' 結果を表示
    Label5.Caption = lngLineFromCharLineIndex
End Sub

Private Sub MouseDown()

    v = Text1.SelStart
    ' 先頭からの文字目を指定
    lngLineFromCharCharIndex = v
    ' 指定文字番目が含まれる行番号を取得
    lngLineFromCharLineIndex = _
        SendMessage(Text1.hWnd, _
                    EM_LINEFROMCHAR, _
                    lngLineFromCharCharIndex, _
                    ByVal CLng(0))
    ' 結果を表示
   Label5.Caption = lngLineFromCharLineIndex
End Sub

Private Sub Text1_Change()

    v = Text1.SelStart
    ' 先頭からの文字目を指定
    lngLineFromCharCharIndex = v
    ' 指定文字番目が含まれる行番号を取得
    lngLineFromCharLineIndex = _
        SendMessage(Text1.hWnd, _
                    EM_LINEFROMCHAR, _
                    lngLineFromCharCharIndex, _
                    ByVal CLng(0))
    ' 結果を表示
    Label5.Caption = lngLineFromCharLineIndex + 1
End Sub


LESIA  2005-02-06 15:47:27  No: 88226

キャレットが動いたということは、マウスかキーボードで動かしたという
ことですよね。
テキストボックスのイベントに掲示のコードのプロシージャ名と同じよう
なのがあるので、そこに行番号を取得するコードを書いてみては?


kumanoko  2005-02-07 02:39:53  No: 88227

LESIAさん
  ありがとうございます!早速Textのイベントを使ったのですが、
  手書きで作ってしまったので変数の定義をしておらずコンパイルエラーが出てあせってしまいました。
  でも無事に解決しちゃんと動きました!!
  3日にわたるお付き合いとアドバイスほんとにありがとうございました!!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加