テキストボックス入力にて、ワード単位をコントロールに認識させないためには

解決


ぺぱお  2007-04-10 23:10:20  No: 98538

こんにちは  ぺぱおと申します。

#VB6

複数行入力可能なテキストボックス(MultiLine = True)
において、文字列A(半角)+文字列B(全角)+文字列C(半角)

を入力した場合、文字列A・B・Cの総長がテキストボックスを
超えた時点で、文字列C(半角)が次の行へ送られてしまいます。
※改行がはいったわけではないようです。

こちらとしては、純粋にあふれた文字だけ次の行にでてくれれば
いいのですが、その方法がわかりません。

申し訳ありませんが、お教え願えますでしょうか?


大吉末吉  2007-04-11 04:28:23  No: 98539

APIの「EM_SETWORDBREAKPROCメッセージ」で、ワード区切り処理を握りつぶす
(何をしない処理を登録する)と言う方法があります。


通ってみた  2007-04-11 04:28:49  No: 98540

>テキストボックスを超えた時点
という意味がよくわかりませんが、テキストボックスの横幅を超えた時点で、ということであれば

テキストボックス.ScrollBars = 1

とするとか


ぺぱお  2007-04-11 05:11:29  No: 98541

>APIの「EM_SETWORDBREAKPROCメッセージ」で、ワード区切り処理を握りつぶす
>(何をしない処理を登録する)と言う方法があります。

大吉末吉さん。回答ありがとうございます。
対処方法のキーワードをいただいたので、WEBで検索して見たいと思います。
 
>>テキストボックスを超えた時点
>という意味がよくわかりませんが、テキストボックスの横幅を超えた時点
>で、ということであれば
>
>テキストボックス.ScrollBars = 1
>
>とするとか
通ってみたさん。回答ありがとうございます。
ご指摘のとおり、「超えた時点」といっていたのは、入力文字列がテキスト
ボックス枠の横幅に収まりきらなくなったケースです。
(説明が悪かったですね。。すいません。)

で、横方向の入力可能バイト数は固定で考えていますので、スクロールバー
は使用しない方向で考えています。


ぺぱお  2007-04-11 23:56:49  No: 98542

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 みたいな形で取得すれば、
いけました。

大吉末吉さん、通ってみたさん  ありがとうございました。


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

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






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