過去ログを見たらわかると思ったのですが。
32767bytesで切れてしまうのはHSPのmesboxの問題なので、
回避するモジュールを書いてみました。
使い方がだいぶ違いますので命令一覧を読んでください。
#module mb2
// HSPのオブジェクトIDを保存(直近のみ)
id = 0
#deffunc mesbox2 int x,int y,int s,int p
; バッファの再確保を防ぐため(速度低下防止)大きめに確保
sdim dummy,32768 ; ダミー変数
mesbox dummy,x,y,s,p : id = stat
return objinfo(stat,2)
#deffunc gettxt int h,var buf
; WM_GETTEXTLENGTH
sendmsg h,0x000E,0,0
size = stat
; バッファ確保
sdim buf,size+1
; WM_GETTEXT
sendmsg h,0x000D,size+1,varptr(buf)
return stat
#defcfunc getsize int h
; WM_GETTEXTLENGTH
sendmsg h,0x000E,0,0
return stat
#deffunc settxt int h,var buf
; WM_SETTEXT
sendmsg h,0x000C,0,varptr(buf)
return stat
#global
/*
命令一覧
-----------------------------------------------------
メッセージボックス表示
mesbox2 p1,p2,p3,p4
p1,p2 : メッセージボックスのサイズ(ドット単位)
p3=0〜(1) : メッセージボックスのスタイル
p4=0〜(-1) : 入力できる最大文字数
通常のmesboxの第1パラメータを削除した命令になっています。
通常版との違いは stat に メッセージボックスのハンドルが返ります。
後で必要になりますので適当な数値型変数に保存して置いてください。
HSPのオブジェクトID が必要な場合は、
変数 id@mb2 に格納されています。(直近のみ)
-----------------------------------------------------
メッセージボックスの内容を反映
settxt p1,p2
p1 : mesbox2 で得られたハンドル
p2 : メッセージボックスに反映したいテキストが格納されている変数
-----------------------------------------------------
メッセージボックスの内容を読み取り
gettxt p1,p2
p1 : mesbox2 で得られたハンドル
p2 : メッセージボックスの内容を格納する変数
-----------------------------------------------------
メッセージボックスの現在のテキストサイズ取得(関数)
getsize(p1)
p1 : mesbox2 で得られたハンドル
-----------------------------------------------------
*/
// サンプル開始
txt = "隣の客はよく柿食う客だ"
mes " "+txt +" のテキストサイズは "+strlen(txt)+" bytes"
// 長いテキストの作成
; 100KB ほど確保しておく
sdim buf,100000
repeat 3000
buf+=""+txt+""+cnt+"\n"
loop
mes " 3000 回ループすると テキストサイズは "+strlen(buf)+" bytes"
; メッセージボックスの作成
mesbox2 640,420,1,0
h1 = stat // ハンドルを保存
; objid1 = id@mb2 // オブジェクトID が必要な場合
; メッセージボックスに先ほどの長いテキストを反映
settxt h1,buf
mes " ↑追記してもサイズは反映されます"
; メッセージボックスのテキストをbuf2に格納
;gettxt h1,buf2
repeat
title "メッセージボックスの現在のテキストサイズ "+getsize(h1)+" bytes"
wait 12
loop