emesは仕様上textでウエイトを指定すると
正確な文字幅が取得出来ません。
なのでemesを少し改造して合計の文字幅を取得できるようにしてみました。
(注.あくまで全文字幅の合計なので改行コードがあると表示がおかしくなります)
; hsp3util.as内のemesを改造
#module
#deffunc text int _p1
stwait=_p1
return
;---------- hsp3util.asのemesと置き換えても動作に支障は出ません ----------
#deffunc emes str _p1
meswidth=0
mesmax=strlen(_p1)
if mesmax<=0 : return
mestmp=_p1
messg=""
mescur=0
a=0
orgx=ginfo_cx
if ( stmode ) {
strval2=ginfo_r
stgval2=ginfo_g
stbval2=ginfo_b
}
if stwait<=0 {
x=ginfo_cx:y=ginfo_cy
messg=mestmp
gosub *emes_aft
return
}
repeat
if mescur>=mesmax : break
x=ginfo_cx:y=ginfo_cy
a=peek(mestmp,mescur)
mescur++
if a<32 {
if a=13 {
if peek(mestmp,mescur)=10 : mescur++
mes "":pos orgx
}
continue
}
poke messg,0,a
poke messg,1,0
if a>=128 {
poke messg,1,peek(mestmp,mescur)
poke messg,2,0
mescur++
}
gosub *emes_aft
pos x+ginfo_mesx,y
await stwait
loop
mes "":pos orgx
return meswidth
*emes_aft
if stmode=0 {
mes messg
meswidth+ginfo(14)
return
}
if stmode=1 {
pos x+stdiff,y+stdiff
color strval,stgval,stbval
mes messg
pos x,y
color strval2,stgval2,stbval2
mes messg
meswidth+ginfo(14)
return
}
if stmode=2 {
color strval,stgval,stbval:
pos x+stdiff,y:mes messg
pos x-stdiff,y:mes messg
pos x,y-stdiff:mes messg
pos x,y+stdiff:mes messg
pos x,y
color strval2,stgval2,stbval2
mes messg
meswidth+ginfo(14)
return
}
return
#global
;---------- モジュールここまで ----------
*main
font "HGPゴシックE",30
text 150
emes "かきくけこ"
x=stat ;statに文字幅が返ってくる
y=(ginfo(23)-ginfo(15))
repeat
pos x,y:emes "◇":wait 50
pos x,y:color 255,255,255
boxf ginfo(22),ginfo(23),ginfo(22)+x,ginfo(23)+ginfo(15)
color:wait 50
loop