tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルテキストボックスのSelStartについて
記事No12877
投稿日: 2008/08/10(Sun) 21:07
投稿者みなな
テキストボックスのSelStartプロパティは 12282 以上は設定できないようなのですが、
それ以上の値を設定することはできませんでしょうか?

EM_SETSELはSelStartの2倍程度の値までしか設定できませんでした。
できればもっと大きい値も設定できればと思っています。
何か良い方法はありませんでしょうか?

よろしくお願い致します。

[ツリー表示へ]
タイトルRe: テキストボックスのSelStartについて
記事No12879
投稿日: 2008/08/11(Mon) 01:45
投稿者花ちゃん
> テキストボックスのSelStartプロパティは 12282 以上は設定できないようなのですが、
> それ以上の値を設定することはできませんでしょうか?

詳しい理由は知りませんが(バグか?仕様か?)、64KB の制限がいきているようです。
(固定長文字列の制限と同じじゃないのかな)

ヘルプの記載には、テキスト ボックス コントロールの Text プロパティに設定する
文字列は、MultiLine プロパティが真 の場合は最大で約 32KB まで、に制限されています。
とは書いてあるのですが。(VB5.0 の時から同じ内容)
実際に表示できる文字数は、OS 等によっても違ってきます。

Private Sub Command1_Click()
   Dim s As String
   s = String$(100000, "a")
   Text1.Text = s
   Debug.Print Len(Text1.Text)
   Text1.SelStart = Len(Text1.Text)
   Debug.Print Text1.SelStart
   Debug.Print LenB(StrConv(Text1.Text, vbFromUnicode)) & vbCrLf
      
  
   s = String$(100000, "花")
   Text1.Text = s
   Debug.Print Len(Text1.Text)
   Text1.SelStart = Len(Text1.Text)
   Debug.Print Text1.SelStart
   Debug.Print LenB(StrConv(Text1.Text, vbFromUnicode))
End Sub

上記を実行した後、表示しているテキストボックスに直接文字を書き足してから
下記を実行して見て下さい。

Private Sub Command2_Click()
On Error Resume Next 
   Debug.Print Len(Text1.Text)
   Text1.SelStart = Len(Text1.Text)
   Debug.Print Text1.SelStart
End Sub

即ち、64KB 以上表示させた場合、64KB を除いた文字数が SelStart の値になって
しまいます。(実際は、SelStart プロパティ でエラーが発生しますが)

ファイルサイズの大きいファイルを扱うなら RichTextBox を使用するようにしたら
どうでしょうか。

[ツリー表示へ]