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

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

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

VB6です。 半角文字で65文字が2段に書けるTextBoxを用意しました。 1段目に"*12345678....1234" と65文字書きました。 2段目に"567890" と6文字書きました。 1段目の"*"の前に"a"を書き込む(挿入する)と 1段目の末尾は(66文字は入らないので) 2段目の最初に移動します。 これが普通ですよね。 しかし 1段目の"*"の前に" "(スペース)を書き込むと 1段目は空行になり 1段目の内容は2段目へ移動してしまいます。 これは困ります。 これは一例ですがスペースを挿入したり BackspaceやDeleteキーを使うと変な配置になってしまいます。 これはVBでは仕方のないことでしょうか? 解決の方法がありましたら教えてください。

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

  • ベストアンサー
  • 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
質問者

お礼

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

関連するQ&A

  • TextBox内でのTabキーについて

    visual studio C# 2005 express .net framework 2.0を試用しています。 TextBox内でのTabキーのスペース幅について質問があります。 例えば TextBox内の1番左端でTabキーを押すと 半角スペース14個分のスペースができて、 1番左端から半角スペース1個分のところからTabキーを押したら 半角スペース13個分のスペースができる仕組みのようなのですが、 そうではなく、どの位置でTabキーを押しても固定の半角スペース(例えば4個分など) を確保できるようにすることは可能なのでしょうか?

  • VB2010 TextBoxの文字列に正しく入力されないのは何故ですか

    VB2010 TextBoxの文字列に正しく入力されないのは何故ですか? string型の変数に文字列を入れ、TextBox.Textに代入すると文字列の後ろが切れてしまう。 Dim st As String st="s01114DG000555<0?e09" TextBox.Text = st この場合、TextBox.Textには"s01114DG000555<0"となり、後ろの4文字が切れてしまっている。 ちなみに、 TextBox.Text = "s01114DG000555<0?e09" とすると、正常に全文字数が入る。 半角文字列の塊なのに、どうしてこのようなことが起きるのでしょうか? また、これの対応策は何ですか? 以上、よろしくお願いします。

  • TextBoxに特定の文字のみ入力を許す

    VBの初心者です。 TextBoxに特定の文字は入力させないなどの制限をしたいです。 例えば半角カタカナ(6)の状態で、 1."/+"と入力し、[Enter]にて決定すると、"/"と表示される 2."+"と入力し、[Enter]にて決定すると、"+"と表示される (特定の順番の、特定の文字のみ入力制限をかける) 以上のような動きにするにはどうすればよいのでしょうか? よろしくお願いします。 ちなみにVB6.0で、OSはWinXP Professionalです。

  • UserControl内の複数のTextBoxでKeyDownイベントが使えない

    VB2005の初心者です。 色々調べたつもりなのですが解らなくてよろしくお願いします。 フォームのTab移動を[Enter]きーで移動するようにしているのですが UserControlに複数のTextBoxを配置しUserControlを作成したものを、フォームに配置するとKeyDownイベントが取得できないというか、フォームに配置したTextBoxなどにフォーカスが移動してしまいます。 UserControl内のTextBoxのTabIndex順に移動させる方法などご存知の方いらっしゃいましたらご教授願えないでしょうか。 ProcessDialogKeyのオーバーライト辺りまでは調べたのですがよく解らなくてお願いします。

  • TEXTBOXに文字列を表示させたいのだが、スペースで改行してしまう

    困っています。 VB6にてプログラムを作成しています。 簡単なプログラムでTEXTBOXに、改行のない長い文字列を スクロールバーを使わずに折り返して表示させたい のですが、適当なところで勝手に改行されてしまいます。 いろいろと試してみると、スペースからスペースまでの 文字を1つの文字列としているみたいで、その文字列が なるべく折り返さないように、もしスペースがあったら 改行するようです。 つまり文字列にまったくスペースがなければきれいに 折り返して表示されます。 スペースもその文字列として扱ってくれるような方法 はないでしょうか? よろしくお願い致します。

  • textboxに文字列を挿入したい。

    すみません。 質問があります。 VB6.0 windows2000 AファイルのFormの中にtextBoxを作成します。 BファイルにsendMessageAPIを使ってAファイルのTextBoxに文字列を送りたいのですが、うまくいきません。 sendMessage(hWnd,WM_SETTEXT,0,"テスト") FindWindowを使って、hWndのハンドルを取得したいのですが、うまくいきません。 他にハンドルの取り方ってあるのでしょうか? また、sendMessageのだい4引数は文字列を挿入しても文字化けを起こします。どうしてかよくわかりません。 どうしてもうまくいかないのですみませんが、ご存知の方いたら教えてください。

  • 文字の入力がおかしい

    先ほど、キーボードの入力がおかしくなりました。 キーを押すと別の文字が出るのではなく、 7=7u 5=5t 8=8e など近くの文字が一緒に表示する症状が見当たりました。 また、BackSpace,Deleteキーを押すとIEではアドレスに キーが移動する、というものでした。 その後IMEの辞書ツールで、Deleteを押すと、削除が認識され、 普通に反応しています。 現在は直っていますが、またいつ今回のような事態になるかわからないので、よろしくお願いします。

  • DeleteキーがBackSpaceキーの左側に無い機種を教えて下さい

    BackSpaceキーは左側の文字を消し、Deleteキーは右側の文字を消すキーですから、DeleteキーがBackSpaceの左側に有ると勘違いして押し間違えてしまいます。私が今使っているFijitsuのFMV-BIBLOはDeleteキーがBackSpaceキーの左側に有るので、押し間違えてます。DeleteキーがBackSpaceキーの左側に無い機種を教えて下さい。

  • 文字変換について。

    XPを使っています。 文字の変換がうまくいきません、使ってるのはIMEです、文字を入力しスペースキーで変換後し間違えたのでbackspace押すとひらがなに戻りません backspaceを押すと文字1つ消えてしまいます、いろいろ試しましたがわかりませんどこをどう変えれはよいのでしょうか?

  • 【EXCEL】TextBox間の移動と複写の方法を教えてください。

    エクセルVB関数にて、 1.TextBox間の移動をTabで行う。 2.複数のTextBoxがある場合、一つのTextBoxに入力した文字や値 が、残りのTextBoxにも複写される。 のやり方を教えてください。どちらか一つでも、構いません。 どうぞよろしくお願いいたします!

専門家に質問してみよう