フォントサイズをピクセルで指定するには?

解決


かんとく  2009-09-30 10:46:10  No: 101981  IP: [192.*.*.*]

お世話になっております。
VB6,XPです。

フォントのピクセル数(高さ)を取得するには、TextHeightで取得できますが、逆に、ピクセル数(高さ)を指定してフォントサイズを指定することはできますでしょうか?

よろしくお願いします。

編集 削除
subaru  2009-09-30 14:33:58  No: 101982  IP: [192.*.*.*]

http://msdn.microsoft.com/en-us/library/dd145037(VS.85).aspx
上記ページのlfHeightの説明のところにポイントからピクセルへの変換式が書かれています。
これの逆算を試してみてはいかがでしょうか。

編集 削除
かんとく  2009-10-01 13:00:40  No: 101983  IP: [192.*.*.*]

ありがとうございます。

msdnの日本語版をたどっていったら、
http://msdn.microsoft.com/ja-jp/library/cc428368.aspx
のCreateFontにたどり着いたので、これを参考にしてみようと思います。

まだ思うとおりにできていないので、できたら解決のチェックをしにきます。

編集 削除
Koz  2009-10-06 00:20:43  No: 101984  IP: [192.*.*.*]

1インチ=1440twip=72pt
1ピクセル=Screen.TwipsPerPixelY

という関係になっています。

なので、厳密でなくてよいなら、

Font.Size = ピクセル数 * Screen.TwipsPerPixelY / 20

これで十分実用になるかと思います。

編集 削除
魔界の仮面弁士  2009-10-06 10:46:00  No: 101985  IP: [192.*.*.*]

なお、VB の Font オブジェクトを利用する場合、指定するフォントによっては、
指定できるフォントサイズが限られている可能性がありますので御注意を。

Dim F As Font
Set F = New StdFont
F.Name = "MS ゴシック"
F.Charset = 128
F.Size = 10.75

Set Label1.Font = F

Debug.Print F.Size  '10.75 であるとは限らない

編集 削除
Koz  2009-10-06 12:17:20  No: 101986  IP: [192.*.*.*]

やぁやぁ弁士さん、おひさしぶり

指定できるフォントって、画面の解像度に合ってないですか?

    Dim px As Long
    Dim siz As Single
    Dim f As New StdFont
    
    For px = 1 To 1024
        siz = px * Screen.TwipsPerPixelY / 20
        f.Size = siz
        If siz <> f.Size Then
            Debug.Print px, siz, f.Size
        End If
    Next

結果
1             0.75          1.5 

ディスプレイドライバによるのかしら?

編集 削除
魔界の仮面弁士  2009-10-07 10:41:00  No: 101987  IP: [192.*.*.*]

> やぁやぁ弁士さん、おひさしぶり
おひさ。
当時のメンバーとは、すっかり御無沙汰になってしまいました。


> ディスプレイドライバによるのかしら?
stdole.IFont の SetRatio メソッドを適用したり、
プリンタ指定(例:Printer.TwipsPerPixelY)を用いた場合、あるいは
ビットマップフォント(例:f.Name = "FixedSys")にした場合にも、
結果は変わりますね。

編集 削除
かんとく  2009-10-08 19:08:10  No: 101988  IP: [192.*.*.*]

ありがとうございます。

Font.Size = ピクセル数 * Screen.TwipsPerPixelY / 20
でよかったです。
印刷でも試してみましたが、これでよかったです。

フォントサイズを小数で指定することはあまりないので、これで十分だと思います。

ありがとうございました。

編集 削除