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


HSPTV!掲示板


未解決 解決 停止 削除要請

2026
0312
Area39HSPにてベクトル文字の表示は可能ですか?5未解決


Area39

リンク

2026/3/12(Thu) 11:19:55|NO.104819

HSPにおいて、𝕏←このような(表示されているか不安ですが・・・)
ベクトル文字といいますか、
https://monsgrax.com/wp-content/uploads/2024/11/image-77-1024x344.png
このような文字列は表示可能でしょうか?

ベクトル図を扱うプログラムを書いており、ベクトル名称をうまく表示できたらいいと思って居ます。
上記を、

mes "𝕏"
として命令を記述しても、画面上では、??となってしまい表示できません。

他の代替策として、

・ X
のような文字や、

→ X
のような文字列でもいいかと思っております。

ただし、


mes "→\n" mes "X"
のような表記や、画像を作っての貼り付けは本来の趣旨と違ってしまうので、解答外とさせていただきます。



この記事に返信する


0x0-nyan

リンク

2026/3/12(Thu) 19:51:42|NO.104820

標準のmes命令やスクリプトエディタはShift_JISしか対応していないので文字化け
してしまいますがWindows APIのDrawTextW関数またはTextOutW関数を使えば表示できます。

𝕏の文字コードはUTF-16(wchar_t)では0xD835, 0xDD4Fの4バイトです。
参考-> https://unicodeplus.com/U+1D54F

wchar_t型のサイズは2バイトですがHSPの配列のサイズは4バイトですのでエンディアンを
考慮して4バイト型にはめると0xDD4FD835となります。(Windowsは基本リトルエンディアンです)

DrawTextWまたはTextOutWに指定する文字数のパラメータは本来は実際の文字数を指定しますが
𝕏はどうやら2文字分を消費するようです。(私はこれに気付くまでに時間がかかりました)
メモ帳にペーストして選択すると選択箇所が半分に分かれていることが確認できます。



#uselib "Gdi32.dll" #func TextOutW "TextOutW" int, int, int, wptr, int #uselib "User32.dll" #func InvalidateRect "InvalidateRect" int, int, int *main // 文字コードとnull終端を代入 charCode = 0xDD4FD835, 0 // TextOutW関数の第4パラメータにcharCodeのポインタを渡してUnicode文字を出力する font "Lucida Sans Unicode", 16 TextOutW hDC, 0, 0, varptr(charCode), 2 // 通常の文字なら第4パラメータに直接指定できる TextOutW hDC, 0, 14, "wchar_t", 7 // 描画領域を更新 dim rect, 4 rect.0 = 0 rect.1 = 0 rect.2 = 64 rect.3 = 128 InvalidateRect hWnd, varptr(rect), 0



zakki

リンク

2026/3/12(Thu) 22:55:06|NO.104821

hsp3utfランタイムを使うと普通に `mes "𝕏"` 出来ますがデフォルトだと無理で、
別途テキストエディタでUTF-8のhspファイル作ってhspcmpコマンドでコンパイルする感じです。
使ってないので詳細分かりませんがこういった開発環境を使うと楽かも。
https://hsp.tv/play/pforum.php?mode=pastwch&num=93112



Area39

リンク

2026/3/12(Thu) 23:32:40|NO.104822

0x0-nyan 様

返信ありがとうございます。
プログラムの方、動作確認させていただきました。

そちらのプログラムを元にとりあえず、大文字のA〜Zまでの文字列を表示するように作ってみました。

#uselib "Gdi32.dll" #func TextOutW "TextOutW" int, int, int, wptr, int #uselib "User32.dll" #func InvalidateRect "InvalidateRect" int, int, int *main // 文字コードとnull終端を代入 charCode(01) = 0xDD38D835,0 // A charCode(02) = 0xDD39D835,0 // B charCode(03) = 0x2102 ,0 // C charCode(04) = 0xDD3BD835,0 // D charCode(05) = 0xDD3CD835,0 // E charCode(06) = 0xDD3DD835,0 // F charCode(07) = 0xDD3ED835,0 // G charCode(08) = 0x210D ,0 // H charCode(09) = 0xDD40D835,0 // I charCode(10) = 0xDD41D835,0 // J charCode(11) = 0xDD42D835,0 // K charCode(12) = 0xDD43D835,0 // L charCode(13) = 0xDD44D835,0 // M charCode(14) = 0x2115 ,0 // N charCode(15) = 0xDD46D835,0 // O charCode(16) = 0x2119 ,0 // P charCode(17) = 0x211A ,0 // Q charCode(18) = 0x211D ,0 // R charCode(19) = 0xDD4AD835,0 // S charCode(20) = 0xDD4BD835,0 // T charCode(21) = 0xDD4CD835,0 // U charCode(22) = 0xDD4DD835,0 // V charCode(23) = 0xDD4ED835,0 // W charCode(24) = 0xDD4FD835,0 // X charCode(25) = 0xDD50D835,0 // Y charCode(26) = 0x2124 ,0 // Z screen 0,900 // TextOutW関数の第4パラメータにcharCodeのポインタを渡してUnicode文字を出力する boxf color 255,255,255 font "Lucida Sans Unicode", 30 repeat 27 TextOutW hDC, 030*cnt, 0, varptr(charCode(cnt)), 2 loop // 描画領域を更新 dim rect, 4 rect.0 = 0 rect.1 = 0 rect.2 = ginfo_winx rect.3 = ginfo_winy InvalidateRect hWnd, varptr(rect), 0

これで実行してみると分かるかと思いますが、
C,H,N,P,Q,R,Zが他と比べて大きくなってしまいます。
いただきました参考URLのほうにもこの文字列が無かったので似たような文字を拾ってきた次第です。
この問題は文字コードの問題なので本来ここでの質問とは関係なくなってしまうかもしれませんが
同じように表示する方法は何かありますでしょうか?

ご確認よろしくお願いいたします。



Area39

リンク

2026/3/12(Thu) 23:50:59|NO.104823

zakki さま

返信ありがとうございます。
こういった開発環境があるのですね。
今後の参考にさせていただきます、ありがとうございます。



沢渡

リンク

2026/3/13(Fri) 14:35:46|NO.104825

Unicodeの文字用記号ブロックと数学用英数字記号ブロックは別カテゴリ扱いで、
そのくせ「文字用記号ブロックにある文字は
数学用英数字記号ブロックには含めなくてもいいだろ」と該当する文字を
欠番にしているあたり、話がだいぶややこしくなっているようで。

フォントの問題かと思って色々試してみたところ、
Windows標準フォントの中ではCambriaがなかなか良い感じでした。
(ただし、Cambriaはロケールの問題でかShift_JISに対応しておらず、
 mes命令で日本語を表示すると文字化けするので、日本語を表示する場合は
 適宜フォントを変えるか、もしくはcnvstowでUTF-16に変換してから
 TextOutW等で表示する、といった対策が必要になります。
 以下、TextOutWで日本語出力してみた例)

#uselib "Gdi32.dll" #func TextOutW "TextOutW" int, int, int, wptr, int font "Cambria", 30 sdim buf,16 //変換後の文字数×2+2。 //(バッファ量は多くても特に問題はないので、strlenでのバイト数×2+2だけ確保すれば確実) cnvstow buf,"東京特許許可局" TextOutW hDC,0,0,varptr(buf),7 redraw 1



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.104819への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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