こんにちは ぺぱおと申します。
#VB6
複数行入力可能なテキストボックス(MultiLine = True)
において、文字列A(半角)+文字列B(全角)+文字列C(半角)
を入力した場合、文字列A・B・Cの総長がテキストボックスを
超えた時点で、文字列C(半角)が次の行へ送られてしまいます。
※改行がはいったわけではないようです。
こちらとしては、純粋にあふれた文字だけ次の行にでてくれれば
いいのですが、その方法がわかりません。
申し訳ありませんが、お教え願えますでしょうか?
APIの「EM_SETWORDBREAKPROCメッセージ」で、ワード区切り処理を握りつぶす
(何をしない処理を登録する)と言う方法があります。
>テキストボックスを超えた時点
という意味がよくわかりませんが、テキストボックスの横幅を超えた時点で、ということであれば
テキストボックス.ScrollBars = 1
とするとか
>APIの「EM_SETWORDBREAKPROCメッセージ」で、ワード区切り処理を握りつぶす
>(何をしない処理を登録する)と言う方法があります。
大吉末吉さん。回答ありがとうございます。
対処方法のキーワードをいただいたので、WEBで検索して見たいと思います。
>>テキストボックスを超えた時点
>という意味がよくわかりませんが、テキストボックスの横幅を超えた時点
>で、ということであれば
>
>テキストボックス.ScrollBars = 1
>
>とするとか
通ってみたさん。回答ありがとうございます。
ご指摘のとおり、「超えた時点」といっていたのは、入力文字列がテキスト
ボックス枠の横幅に収まりきらなくなったケースです。
(説明が悪かったですね。。すいません。)
で、横方向の入力可能バイト数は固定で考えていますので、スクロールバー
は使用しない方向で考えています。
EM_SETWORDBREAKPROC ワードでWeb検索したところ、下記
のサンプルPGがありました。
Const EM_SETWORDBREAKPROC = &HD0&
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Function EditNoWordBreakProc(lpch As Long, _
ichCurrent As Long, cch As Long, action As Long) As Long
EditNoWordBreakProc = 0 '何もしないで 0 を返す
End Function
' TextBox/RichTextBoxのワードラップを無効にする
'
' lngHWnd : TextBox/RichTextBox のウィンドウハンドル
'
' 戻り値 : 正常 - 行数
' 異常 - -1
'
Public Sub SetNoneWRap(ByVal lngHWnd As Long)
Dim lngRetCd As Long
lngRetCd = SendMessageLong(lngHWnd, EM_SETWORDBREAKPROC, 0&, _
AddressOf EditNoWordBreakProc)
End Sub
ウィンドウハンドルは Form1.Text1.hWnd みたいな形で取得すれば、
いけました。
大吉末吉さん、通ってみたさん ありがとうございました。
ツイート | ![]() |