• ベストアンサー

VBテキストの折り返し

いつもお世話になります。 複数行の入るテキストボックスがあります。 ああああああああああ と入れるとテキストボックスの大きさの関係で ああああ ああああ ああ となります。この自動で改行されている部分は どんな変数が割り当てられているのでしょうか? chr(13) chr(10)は改行ですが、それとは 違いますよね?

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

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.6

#4です どうも勘違いがあるようなのでわかりやすいサンプルをば。<#5 テキストボックスを一つ配置、(MultiLine=Trueに変更)大きさはテストしやすいように、横方向を小さめに リストボックスを一つ配置 ソフト改行で分割したあとのデータを一覧するために必要 コマンドボタンを2つ配置 それぞれのコントロールは、デフォルト名称で(変更した場合、コードの変更が必要) そのあと、下のコードをコピペしてください。 実行したら、テキストボックスに適当に何行も入力してください。 とくに、改行をいれずにウィンドウの端まで行って折り返される行は必須。サンプルの意味が無いので。 Command1を押すと、ソフト改行を改行に変換、さらに改行で分割してリストボックスにデータを叩き込みます。 Command2を押すと、現在の総行数がメッセージボックスで表示されます。 もし、質問者の言っているのが、総行数が知りたいというのであれば、こっちの方が簡単かつ早いですね。 動作がよく理解できなければ、SendMessage部分をコメントアウトして実行してみると違いがわかります。 '以下コード-------------------------- Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const EM_FMTLINES = &HC8 'ソフト改行文字を設定/削除する定数 Private Const EM_GETLINECOUNT = &HBA '総行数を取得する定数 'ソフト改行文字で分割してリストボックスにデータを放り込む Private Sub Command1_Click() Dim tmpText As String Dim TextArray() As String Dim i As Long With Text1 'ソフト改行文字を付加 Call SendMessage(.hwnd, EM_FMTLINES, 1&, ByVal 0&) 'ソフト改行文字を含む文字をString変数に保存 tmpText = .Text 'ソフト改行文字を削除 Call SendMessage(.hwnd, EM_FMTLINES, 0&, ByVal 0&) 'ソフト改行文字を改行に変換 tmpText = Replace(tmpText, vbCr & vbCr & vbLf, vbCrLf) '文字列を改行で分割 TextArray = Split(tmpText, vbCrLf) 'リストをクリア List1.Clear 'リストに分割した文字列を追加 For i = 0 To UBound(TextArray) List1.AddItem TextArray(i) Next End With End Sub 'テキストボックスの行数をカウントして、メッセージボックスで表示 Private Sub Command2_Click() Dim ret As Long With Text1 ret = SendMessage(.hwnd, EM_GETLINECOUNT, 0&, ByVal 0&) MsgBox "テキストボックスは" & ret & "行です。" End With End Sub

noname#60350
質問者

お礼

かなり参考になりました! さすが専門家さんです!

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

(1)ファイルレコード内容や変数の内容に改行コードや復帰コードがある場合、表示で改行復帰して表示される場合 (2)ファイルレコード内容や変数の内容に改行コードや復帰コードがあるのに、表示で改行復帰されないで表示さる場合(・など1文字か2文字に置き換わる) エクセルで="A"&CHAR(10)&"B"で書式・配置で「おり返して全体を表示する」になっていないときなど。 (3)ファイルレコード内容や変数の内容に改行コードや復帰コードないのに、表示や印刷で改行して表示印刷する場合。 の3つがあります。 表示するソフトでそのように自分がプログラムを組む(3)はわかりやすいですが、コード13と10は文字コードとしては、昔から歴史的に特殊で、働き(タイプライタやプリンタや画面表示でそのように作動する約束が取り入れられている)がくっついたコードです。だから逆に文字コードで0A、0Dを扱いたい時は、なにか工夫が必要になります。 質問のタイプは(3)に該当するでしょう。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.5

1番さんの方法はウィンドウに直接メッセージを送って行数を取得しているのであって、文字列から改行を判定している訳ではありません。 2番さんの言うとおり、見た目の改行は改行コードが入っている訳ではありませんので、文字列から全体で何行あるかなどは判定できません。 表示の状態はウィンドウ側で管理しているものですので、もし改行の判定がしたければ直接メッセージを送って取得するか、あるいは例えばテキストボックスであれば、表示されている行数は、LineCountプロパティで公開されているのでそちらから取得する事が出来るようです(VBAではそうヘルプに書いてます)。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.4

Textプロパティには改行が入っていない、が、Ribenrenさんの説明のAPIを使用することで、改行部分にソフト改行文字を挿入することが可能。です。 Ribenrenさんの説明のAPIは、各行の終わりに vbCr & vbCr & vbLf (ソフト改行文字)を追加/削除します。 http://www.vbvbvb.com/jp/gtips/0701/gSendMessageEmFmtlines.html vbCr = Chr(13) vbLf = Chr(10) 上のリンク内では説明がありませんので、補足として。 wParam に1&を渡すことで追加、0&を渡すことで削除です。 目的は達せられますので、撤回の必要はないと思いますよ。<#3

参考URL:
http://www.vbvbvb.com/jp/gtips/0701/gSendMessageEmFmtlines.html
noname#5584
noname#5584
回答No.3

専門家のコメントが「自信あり」となっていますので、No.1のコメントは誤りのようです。 撤回させて頂きます。m(_ _)m

noname#60350
質問者

お礼

どうもありがとうございます。 出来そうです^^

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.2

変数?? テキストボックスのTextプロパティの値と解釈してよろしいですよね? ああああああああああ とはいってます。 明示的に改行を入力しない限り改行コードは挿入されません。

noname#5584
noname#5584
回答No.1

試してませんが、ターゲットのテキストボックスに EM_FMTLINES (= &HC8) を SendMessage すればよいそうです。 http://www.bcap.co.jp/hanafusa/VBdengon/log_651to700.htm http://homepage1.nifty.com/MADIA/vb/vb_bbs/200302_03020044.html

参考URL:
http://www.bcap.co.jp/hanafusa/VBdengon/log_651to700.htm,http://homepage1.nifty.com/MADIA/vb/vb_bbs/200302_03020044.html

関連するQ&A