32767文字以降のテキストボックスのカーソル位置の取得

解決


めさちゃん  2006-12-09 02:58:37  No: 134514

テキストボックスのカーソル位置を取得しているのですが
TEXT.SelStartだと32768文字目にカーソルがある場合、0が返ってきます。
これを32768で取得したいのですが、取得する方法はあるのでしょうか?


GOD  2006-12-11 09:10:08  No: 134515

SendMessageのEM_GETSELは使えますか?


我龍院  2006-12-12 01:11:18  No: 134516

普通はそうはならないのですが、
On Error Resume Next
Dim i As Integer
Text1.SelStart = 32768
Text1.SelLength = 1
Text1.SetFocus
i = Text1.SelStart
Debug.Print i
こうすると、i = 0 になりますね。
これは  
Dim i As Long
とすれば直ります、何故かは自分で考えてください。


めさちゃん  2006-12-12 03:30:09  No: 134517

みなさんありがとうございます。
上記補足です。

確認中なのですが、半角の場合は、1234567890・・・5678
の場合に、8が32768文字目だとしたら8の後ろにカーソルがある場合に、32768が返ってきました。
問題は、全角の場合に、1234567890・・・5678
の場合に、0が返ってきます。

On Error Resume Next
dim i as Long 
i = Text1.SelStart
とした場合のiの値となります。
>SendMessageのEM_GETSELは使えますか?
 EM_GETSELは使用可能です。

引き続き色々試してみます。


GOD  2006-12-13 00:16:21  No: 134518

とりあえず「EM_GETSEL」はバイト数を返してきますね。
テキストボックスは32K文字以上の文字列を扱うのは向かないかも。(.Textプロパティ参照)
リッチテキストボックスなら32768も返せますよ。


めさちゃん  2006-12-13 07:14:54  No: 134519

なんとか「EM_GETSEL」にてバイト数にて判断しようと思います。
リッチテキストボックスには、変更できなかったので。
ありがとうございました。


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

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






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