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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1123
ふにくらHGIMG4で文字列矩形のサイズ取得2解決


ふにくら

リンク

2020/11/23(Mon) 12:49:46|NO.91839

お世話になります。
HGIMG4で文字列矩形の幅・高さを取得しようとGetTextExtentPoint()やGetTextMetrics()を使ってみたのですが、おそらくデバイスコンテキストが(GDIとOpenGLで)違うため正常な値が返ってきませんでした。
ならばと以下のようにデバイスコンテキストから作ってみましたが、font命令でフォントやサイズの変更した際に反映できなかったりと、どうにも上手いやり方が思いつきません。

なにか良いお知恵をお貸し頂きたい次第です。よろしくお願いいたします。


#cfunc CreateCompatibleDC "CreateCompatibleDC" int #func SelectObject "SelectObject" int,int #func GetTextExtentPoint32 "GetTextExtentPoint32A" int, str, int, var dc1 = GetDC(hwnd) hMemDC = CreateCompatibleDC(dc1) SelectObject hMemDC, hFont tmpStr1 = "あいうa" dim rect,2 GetTextExtentPoint32 hMemDC, tmpStr1, strlen(tmpStr1), rect



この記事に返信する


K-s

リンク

2020/11/25(Wed) 01:44:15|NO.91852

mes命令でしたら描画後にginfo_mesx, ginfo_mesyで幅、高さが得られます。
HSP3.6β4でしか試していませんが標準のHSPと違ってdish版は複数行の高さが得られるようです。

#include "hgimg4.as" screen 0, 960, 540 randomize fontname = msgothic, msmincho, "メイリオ", "游ゴシック" txt(0) = {"あのイーハトーヴォのすきとおった風、 夏でも底に冷たさをもつ青いそら、 うつくしい森で飾られたモリーオ市、 郊外のぎらぎらひかる草の波。"} txt(1) = {"HSP is a development language of the interpreter type. The world can be constructed by expanding the wing of the creation."} c = 0 *mainLoop redraw 0 color 30, 30, 30 : boxf repeat 2 if c \ 60 == 0 { fi(cnt) = rnd(length(fontname)) sz(cnt) = 18 + rnd(10) ti(cnt) = rnd(length(txt)) } font fontname(fi(cnt)), sz(cnt) mx = 10 my = 30 + cnt * 270 color 220, 220, 220 pos mx, my mes txt(ti(cnt)) sx = ginfo_mesx sy = ginfo_mesy color 255, 64, 200 pos mx , my line mx + sx, my line mx + sx, my + sy line mx , my + sy line mx , my font msgothic, 16 color 255, 255, 255 pos mx, my - 20 mes fontname(fi(cnt)) + ", " + sz(cnt) loop redraw 1 await 30 c++ goto *mainLoop



ふにくら

リンク

2020/12/6(Sun) 23:03:51|NO.91875

>> K-s 様
ありがとうございます。こんなシステムマクロがあったとは知りませんでした……。
確かに仰る通り、十分なサイズのバッファを用意してあれば複数行のサイズを取得できるようです。

大変助かりました。解決とさせて頂きます。



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