tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルInputManのimTextについて
記事No15323
投稿日: 2011/08/29(Mon) 15:47
投稿者たひり
imTextをマルチラインで使った時、途中まで全角入力をして
途中から半角入力すると自動的に改行されてしまいます。
これを改行されないようにする方法はないでしょうか?

ex)横幅半角10文字の時、(入力文字列「あああaaaaaaaaaa」)
あああ
aaaaaaaaaa

これを

あああaaaa
aaaaaa

このようにしたいです。


よろしくお願いします。

[ツリー表示へ]
タイトルRe: InputManのimTextについて
記事No15324
投稿日: 2011/08/29(Mon) 16:23
投稿者魔界の仮面弁士
> imTextをマルチラインで使った時、

普通のテキストボックスであれば、EM_SETWORDBREAKPROC メッセージで
禁則処理を制御できますが… InputMan に該当機能があるかどうかは分かりません。
メーカーに問い合わせてみては如何でしょう。


参考までに、普通の TextBox の場合:

'---- Form1 ----
Option Explicit

Private Sub Form_Load()
    Text1.Text = ""
    SetWordbreakProc Text1
    Text1.Text = "あああaaaaaaaaaa"
End Sub


'---- Module1 ----
Option Explicit

Private Const EM_SETWORDBREAKPROC = &HD0&
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As OLE_HANDLE, ByVal wMsg As Long, _
     ByVal wParam As Long, ByVal lParam As Long) As Long
Public Enum WordBreak
    WB_LEFT = 0
    WB_RIGHT = 1
    WB_ISDELIMITER = 2
    WB_CLASSIFY = 3
    WB_MOVEWORDLEFT = 4
    WB_MOVEWORDRIGHT = 5
    WB_LEFTBREAK = 6
    WB_RIGHTBREAK = 7
End Enum

'Private Declare Function SysAllocStringByteLen Lib "oleaut32" _
'    (ByVal psz As Long, ByVal length As Long) As String

Public Sub SetWordbreakProc(ByVal txt As TextBox)
    Const EM_SETWORDBREAKPROC As Long = &HD0&
    SendMessage txt.hWnd, EM_SETWORDBREAKPROC, 0&, AddressOf EditWordBreakProc
End Sub

'単語の区切り位置をカスタマイズするためのコールバックプロシージャ
Public Function EditWordBreakProc( _
    ByVal lpch As Long, _
    ByVal charCurrent As Long, _
    ByVal charLength As Long, _
    ByVal action As WordBreak) As Long

    'Debug.Print charCurrent, action, "["; SysAllocStringByteLen(lpch, charLength); "]"
    
    '戻り値 0 は「区切り文字でない」の意味
    EditWordBreakProc = 0
End Function

[ツリー表示へ]