改行について

解決


あんず  2003-10-06 10:24:56  No: 79659  IP: [192.*.*.*]

こんにちは!
どうしても行き詰まってしまって困っています。
テキストボックスのなかのテキストをPrinterオブジェクトを使って印刷するに当たり、一行52文字づつ、40行まで入れられる大きさを持った四角型のラインをひきました。このなかにテキストをいれて印刷したいのですが、ループ関数、Left関数を使って52文字取り出して、53文字目からは次の行に表示されるように処理をしました.ところが、途中に改行があるとうまく表示されません.このような場合、改行の処理はどうしたらよいでしょうか?いろいろ考えてみましたがお手上げです。どなたかご教示ください!!

編集 削除
イトウ  2003-10-06 14:26:16  No: 79660  IP: [192.*.*.*]

…例外処理としてはじき出す(黒ポチで出力とか)か、改行処理を追加するか。
面倒なら、はじくだけでもいいかもしれない。

編集 削除
あんず  2003-10-06 15:59:04  No: 79661  IP: [192.*.*.*]

>イトウさま
お返事ありがとうございます。
はじき出すのにあたり、ループでまわして、一文字づつ検索しようと思います。
しかし,この方法だと、改行(Chr(13) & Chr(10))は二文字になってしまい認識されないので、どうすればいいでしょうか?

編集 削除
イトウ  2003-10-07 09:57:24  No: 79662  IP: [192.*.*.*]

一文字ずつMid$関数でみてvbCRがあったら、ループ変数をひとつ増加してやる、という方法があります。
ループをするのは面倒なので、InStr関数を使ったほうが楽かもしれません。

dim i as integer
dim st as string
dim length as integer

st="aiueo"+VbCrlf+"kakikukeko"
length=Len(st)

'for
for i=1 to length
if Mid$(st,i,1)=vbCr then
  'ここに目的の処理を書く
  i=i+1
end if
Next

'Instr
do
  i=Instr(i,st,VbCrLf)
  if i<>0 then
    'ここに目的の処理を書く
  else
    exit do
  end if
loop

編集 削除
あんず  2003-10-07 17:00:49  No: 79663  IP: [192.*.*.*]

>イトウさま
本当に,ありがとうございます!!
早速試してみます!!

編集 削除
k.k  2003-10-08 12:09:23  No: 79664  IP: [192.*.*.*]

1行に53文字以上ある行は、改行させる方法として
(ノートパッドの「右端で折り返す」というのとほぼ同じようなもの)
VB6.0であれば、Split関数使った方法もありますね。

Dim strBuf As String
Dim varData As Variant
Dim cnt As Long
Dim pos As Long
'Text1の内容を1行52文字とし、右端で折り返したものをText2に表示
strBuf = StrConv(Text1.Text, vbUnicode)
varData = Split(strData, vbCrLf)
For cnt = 0 To UBound(varData)
    strBuf = varData(cnt)
    pos = 1
    While pos < Len(strBuf)
        Text2.Text = Text2.Text & Mid(strBuf, pos, 52) & vbCrLf
        pos = pos + 52
    Wend
Next

編集 削除
あんず  2003-10-08 14:37:22  No: 79665  IP: [192.*.*.*]

>イトウさま、k.kさま

お返事ありがとうございます!!
お二人の方法、ともに試してみましたら、うまくいきました!!
さすがです!!
本当にありがとうございました!!感謝いたします!!
またご教示ください!!

編集 削除