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

解決


kumanoko  2005-02-04 16:32:56  No: 88219  IP: [192.*.*.*]

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

編集 削除
じゃんぬねっと  URL  2005-02-04 16:55:43  No: 88220  IP: [192.*.*.*]

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

編集 削除
kumanoko  2005-02-04 17:10:01  No: 88221  IP: [192.*.*.*]

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

編集 削除
LESIA  2005-02-04 18:08:57  No: 88222  IP: [192.*.*.*]

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

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

編集 削除
じゃんぬねっと  URL  2005-02-04 18:47:35  No: 88223  IP: [192.*.*.*]

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

編集 削除
Say  2005-02-04 19:19:12  No: 88224  IP: [192.*.*.*]

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

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

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

編集 削除
kumanoko  2005-02-05 17:21:26  No: 88225  IP: [192.*.*.*]

たくさんのお返事有難うございます!
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 06:47:27  No: 88226  IP: [192.*.*.*]

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

編集 削除
kumanoko  2005-02-06 17:39:53  No: 88227  IP: [192.*.*.*]

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

編集 削除