• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TextBoxに文字が正しく配置されない)

TextBoxに文字が正しく配置されない

このQ&Aのポイント
  • VB6のTextBoxでスペースや特定の文字を挿入すると、文字の配置が崩れる問題について解説します。
  • 問題が発生する原因や、他のキー操作によっても配置が崩れる可能性があることを紹介します。
  • VB6ではこの問題を回避する方法が限られているため、解決策が少ないことに言及します。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ごめんなさい m(__)m MyBreakProcの最初の引数が String型ではダメでした 標準モジュール側 Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const EM_SETWORDBREAKPROC = &HD0 Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Function myBreakProc(ByRef lpch As Long, ByVal ichCurrent As Long, ByVal cch As Long, ByVal code As Long) As Long   Dim ss As String, arByte() As Byte   ss = Space(cch)   arByte = ss   CopyMemory arByte(0), lpch, cch   ss = StrConv(arByte, vbUnicode)   myBreakProc = 0 End Function Function GetAddr(lpAddr As Long) As Long   GetAddr = lpAddr End Function フォームのLoadイベントも変更が必要でした dim lpProc as Long lpProc = GetAddr( Addressof myBreakProc ) SendMessage Text1.hWnd, EM_SETWORDBREAKPROC, 0, ByVal lpProc といった具合です ・・・

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

TestBoxには『WordWarp』が無いんです Labelにならあるんですが ・・・

  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.3

WordWrapプロパティってありませんでしたっけ? # 記憶違いかも。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

VBというよりWindowsの仕様だったように思います !%?)]などが文字列の途中にあって1行の長さがテキストボックスの横幅より大きい場合 前日の文字で自動的に改行します やるとするなら EM_SETWORDBREAKPROCメッセージをテキストボックスコントロールに送信して 自前の区切りメッセージに対応しましょう 標準モジュールに Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const EM_SETWORDBREAKPROC = &HD0 Public Function myBreakProc( lpStr as String , ichCurrent as Long, cch as Long, code as Long ) as Long myBreakProc = 0 End Function フォームのLoadイベントで SendMessage Text1.hWnd, EM_SETWORDBREAKPROC, 0, addressof MyBreakProc を実行します VB6のIDEから実行すると VB6自体が落ちてしまいますので EXEファイルにして実行しましょう myBreakProc( lpStr as String , ichCurrent as Long, cch as Long, code as Long ) の引数は lpStrがテキストボックス編集対象の文字列 ichCurrent が編集中の開始点 cchが編集テキストの文字数 codeはどうして呼ばれたかのデータ VB6付属のMSDNなどで EM_SETWORDBREAKPROCやEditWordBreakProcなどを調べてみてください

Kuma2000
質問者

お礼

回答ありがとうございます。 難しいことなのですね・・・勉強させていただきます。