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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0824
RuthlessDragon文字列の幅もしくは右端の座標6解決


RuthlessDragon

リンク

2006/8/24(Thu) 15:17:06|NO.2122

現在、アドベンチャーゲームを作成していて、そのために
バイナリファイルから読み込んだデータを画面に表示する、というプログラムの中で、
文字が一定の場所に来たら改行させたいのですが、
fontで指定されるのは文字の高さですよね。
そのせいで改行(\n)を入れるところがうまくできないのです。

文字の一文字づつの幅、もしくは文字列の右端のX座標を取得できる方法を
どなたかご存じないでしょうか?



この記事に返信する


ゆちボン

リンク

2006/8/24(Thu) 16:00:00|NO.2123

>現在、アドベンチャーゲームを作成していて、そのために
>バイナリファイルから読み込んだデータを画面に表示する、というプログラムの中で、
>文字が一定の場所に来たら改行させたいのですが、
>fontで指定されるのは文字の高さですよね。
>そのせいで改行(\n)を入れるところがうまくできないのです。
もし、「MS ゴシック」をご利用なら、高さ=幅 です。

文字の一文字づつの幅、もしくは文字列の右端のX座標を取得できる方法を
どなたかご存じないでしょうか?
「P」がつくのはわかりませんが、「MS ゴシック」などならわかる方法があります。

;MS ゴシックやMS 明朝の場合 Mojiret="あいうえお" ;文字列 H = 16 ;高さ NAGA = strlen(Mojiret) * H ;計算
NAGAに横の長さの合計が入れられます。
ただし、「プロポーショナル」(?)フォントは使用できません。
(「{会社名}P {フォント名}」見たいなやつ)



ゆちボン

リンク

2006/8/24(Thu) 16:01:52|NO.2124

修正。
文中にミスがありました

文字の一文字づつの幅、もしくは文字列の右端のX座標を取得できる方法を
どなたかご存じないでしょうか?
「P」がつくのはわかりませんが、「MS ゴシック」などならわかる方法があります。



>文字の一文字づつの幅、もしくは文字列の右端のX座標を取得できる方法を
>どなたかご存じないでしょうか?
「P」がつくのはわかりませんが、「MS ゴシック」などならわかる方法があります。

すみませんでした。



Mizki_F

リンク

2006/8/24(Thu) 16:09:37|NO.2125

画面外にmesで出力してginfo_mesx,ginfo_mesyを使う、という手もありますが、
GetTextExtentPoint32を使えば事前に文字列の表示サイズを調べられます。

#module #uselib "gdi32.dll" #func GetTextExtentPoint32 "GetTextExtentPoint32A" int,int,int,int #deffunc GetTxtExtPoint var tBuf,array tSize txtLen=strlen(tBuf) dim tSize,2 GetTextExtentPoint32 hdc,varptr(tBuf),txtLen,varptr(tSize) return #global textBuf="test" GetTxtExtPoint textBuf,textSize mes "x="+textSize(0)+" y="+textSize(1)



Irisawa

リンク

2006/8/24(Thu) 17:08:00|NO.2127

付属のサンプルスクリプト(mesinfo.hsp)にmes命令で表示した文字列の範囲を調べるものが
あります。

あと、適切な位置に半角スペースなどがあればDrawTextなどを使用するという手も
ありますが少し面倒だし制限があるみたいですね。



RuthlessDragon

リンク

2006/8/24(Thu) 19:21:27|NO.2128

なるほど、そのような手段があるのですか。

今回はginfo_mesxを使おうと思います。
皆さん、情報提供まことにありがとうございました。



GENKI

リンク

2006/8/24(Thu) 21:17:38|NO.2131




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