お世話になっております。
VB6,XPです。
フォントのピクセル数(高さ)を取得するには、TextHeightで取得できますが、逆に、ピクセル数(高さ)を指定してフォントサイズを指定することはできますでしょうか?
よろしくお願いします。
http://msdn.microsoft.com/en-us/library/dd145037(VS.85).aspx
上記ページのlfHeightの説明のところにポイントからピクセルへの変換式が書かれています。
これの逆算を試してみてはいかがでしょうか。
ありがとうございます。
msdnの日本語版をたどっていったら、
http://msdn.microsoft.com/ja-jp/library/cc428368.aspx
のCreateFontにたどり着いたので、これを参考にしてみようと思います。
まだ思うとおりにできていないので、できたら解決のチェックをしにきます。
1インチ=1440twip=72pt
1ピクセル=Screen.TwipsPerPixelY
という関係になっています。
なので、厳密でなくてよいなら、
Font.Size = ピクセル数 * Screen.TwipsPerPixelY / 20
これで十分実用になるかと思います。
なお、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 であるとは限らない
やぁやぁ弁士さん、おひさしぶり
指定できるフォントって、画面の解像度に合ってないですか?
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
ディスプレイドライバによるのかしら?
> やぁやぁ弁士さん、おひさしぶり
おひさ。
当時のメンバーとは、すっかり御無沙汰になってしまいました。
> ディスプレイドライバによるのかしら?
stdole.IFont の SetRatio メソッドを適用したり、
プリンタ指定(例:Printer.TwipsPerPixelY)を用いた場合、あるいは
ビットマップフォント(例:f.Name = "FixedSys")にした場合にも、
結果は変わりますね。
ありがとうございます。
Font.Size = ピクセル数 * Screen.TwipsPerPixelY / 20
でよかったです。
印刷でも試してみましたが、これでよかったです。
フォントサイズを小数で指定することはあまりないので、これで十分だと思います。
ありがとうございました。
ツイート | ![]() |