HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0124
あんどろ全角・半角の数8解決


あんどろ

リンク

2009/1/24(Sat) 14:08:55|NO.23012

例えば
こんにちはhello

という文を、中央や右寄せに表示したいのですが
フォントのサイズが全角・半角と違うので、文の長さがわかりません

全角のフォントの幅のサイズ
半角のフォントの幅のサイズ
全角が何文字
半角が何文字
と調べるにはどうしたらいいでしょうか?



この記事に返信する


丸山

リンク

2009/1/24(Sat) 14:40:51|NO.23013

半角は1文字で全角は半角2文字分だよ。



ひまつぶし

リンク

2009/1/24(Sat) 15:00:17|NO.23014

GetTextExtentPoint32で文字列の幅と高さを取得できます


#include "gdi32.as" screen 0, 640, 480 moji = "こんにちはhello" GetTextExtentPoint32 hdc, varptr(moji), strlen(moji), varptr(size) pos 0, 0 mes "左寄せ mes moji pos (ginfo_winx - size(0)) / 2, 0 mes "中央" mes moji pos ginfo_winx - size(0), 0 mes "右寄せ" mes moji



あり

リンク

2009/1/24(Sat) 15:50:53|NO.23020

APIを使わなくてもginfo14と15でメッセージの幅と高さは取得できますよ。

color 255 :line 320,0,320,480 :color 0 :pos 0,0 ;センターライン a="ABCDEFG" mes a mlen=ginfo(14) mes "文字の描画幅 "+mlen pos 640-mlen,0 :mes a ;右寄せ pos 320-mlen/2,0 :mes a ;センタリング a="ABCDEFG" pos 0,36 :mes a mlen=ginfo(14) mes "文字の描画幅 "+mlen pos 640-mlen,36 :mes a ;右寄せ pos 320-mlen/2,36 :mes a ;センタリング font msmincho,20,1 a="新春シャンソンショー" pos 0,72 :mes a mlen=ginfo(14) mes "文字の描画幅 "+mlen pos 640-mlen,72 :mes a ;右寄せ pos 320-mlen/2,72 :mes a ;センタリング



荒河 軒持

リンク

2009/1/24(Sat) 16:13:57|NO.23022

bufferに出力→ginfo_mesx ginfo_mesy



あんどろ

リンク

2009/1/24(Sat) 17:37:33|NO.23024

文字1つずつを計算するのではなく、文字列の長さをginfoで求めることが
できたんですね。
勉強になりました、皆さんありがとうございます。



ほげ

リンク

2009/1/24(Sat) 18:17:24|NO.23025

右寄せとかをやりたいなら、WinAPIのDrawTextEx関数を使う手もあるよ



Kpan

リンク

2009/1/24(Sat) 18:19:22|NO.23026

参考までに、DrawText関数にブン投げる方法〜。


#include "user32.as" string = "こんにちはhello" color $FF font "MS UI Gothic", 40, 1 | 16 RECT = 0, 0, 640, 480 DrawText hdc, string, -1, varptr(RECT), $1 DrawText hdc, "\n" + string, -1, varptr(RECT), $2 DrawText hdc, "\n\n" + string, -1, varptr(RECT), $0 redraw



GENKI

リンク

2009/1/24(Sat) 21:12:26|NO.23031

みなさん回答速いな…。
私からはいつものようにこの資料:
http://hspdev-wiki.net/?cmd=read&page=String%2F%B6%EB%B7%C1#g095da3b

こういうサイトもありますんで活用してくださいね。



ONION software Copyright 1997-2023(c) All rights reserved.