- PR -

プロポーショナル・固定ピッチフォントの判別

1
投稿者投稿内容
chabo
会議室デビュー日: 2005/02/17
投稿数: 2
投稿日時: 2005-02-17 11:47
ラベルに設定されたフォントがプロポーショナルフォントなのか、固定ピッチフォントなのかを判別する方法がわかりません。
テキストにセットされた文字列の文字幅を比べれば判別可能ですが、テキストに文字列がセットされていない状態で判別する必要があります。
ご存知の方いらっしゃいましたら、ご教授お願いします。
SE卵
大ベテラン
会議室デビュー日: 2004/10/22
投稿数: 135
投稿日時: 2005-02-17 16:18
こんにちは。

期待にそえてないかもしれませんが。。。

ラベルに設定されているフォントを取得して、そのフォントをIF文か何かで
判断すればいいのでは?

コード:
Dim FontName As String

FontName = Label1.Font.Name

If FontName.Equals("MS Pゴシック") Then
    '' プロポーショナルフォント
ElseIf FontName.Equals("MS ゴシック") Then
    '' 固定ピッチフォント
End If



あと、余計ですが環境書いてくださいね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-17 21:03
> テキストにセットされた文字列の文字幅を比べれば判別可能ですが
 テキストにセットされた文字列の文字幅と、何を比べるのですか?
 固定ピッチはどの文字であろうと同じ幅、ですよね。プロポーショナルは文字によって幅が異なる、ですよね。だったらテキストに文字列がセットされている、いないは関係ないでしょう。一番幅が異なりそうな"i","l","1"辺りと、"W","M"辺りの幅を比べればいいと思いますけど?

_________________
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-02-17 21:10
単に、あるfont-familyがプロポーショナルかどうかを取得したいってことですか?
CreateGraphicsでGraphicsオブジェクトを取得して、MeasureStringメソッドで
プロポーショナルフォントなら明らかに幅が異なる2つの文字列同士の幅を比較する
とか。(半角英数と日本語両方考慮する必要があったりするかな)

引用:
テキストに文字列がセットされていない状態で判別する必要があります。

Labelにかかれる前って意味ですか?
どの段階で判別したいのかよくわかりませんが
引用:
テキストにセットされた文字列の文字幅を比べれば判別可能ですが

この場合のコードを見せていただけるといいかも。

逆に私はわからないのですが、フォント自体はプロポーショナルかどうかの情報を
持っているのでしょうかね。

あ、先レスが・・

[ メッセージ編集済み 編集者: べる 編集日時 2005-02-17 21:14 ]
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-02-17 21:57
引用:

べるさんの書き込み (2005-02-17 21:10) より:
逆に私はわからないのですが、フォント自体はプロポーショナルかどうかの情報を
持っているのでしょうかね。


試していませんが、LOGFONT 構造体の lfPitchAndFamily の下位 2bit が FIXED_PITCH なら(VARIABLE_PITCH 以外なら?)固定幅なのでしょうね。
で、LOGFONT は void Font.ToLogFont(object) で取得できるそうです。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-02-18 01:20
引用:
試していませんが、LOGFONT 構造体の lfPitchAndFamily の下位 2bit が FIXED_PITCH なら(VARIABLE_PITCH 以外なら?)固定幅なのでしょうね。
で、LOGFONT は void Font.ToLogFont(object) で取得できるそうです。

ありがとうございます。情報は持ってるんですね。で、少し調べてみたんですが、
ここが参考になりました。
http://www.gdncom.jp/general/mllog/tech/webTech.aspx?ID=2-06
「Fontが固定幅かプロポーショナルかの判断方法は?」を拾い読みしました。
特に、このサンプルは動かしてみたら実際取得できました。.NETの外に出る感じですが。
ToLogFontを使っても情報が全部入ってこないことがある、みたいな話の流れでした。

一応ここにもLOGFONTを扱うサンプルがのっています。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcwlkplatforminvoketutorial.asp
chabo
会議室デビュー日: 2005/02/17
投稿数: 2
投稿日時: 2005-02-18 10:20
情報提供ありがとうございました。
また、説明不足であったことをお詫び申し上げます。

やりたいことは、あるfont-familyがプロポーショナルかどうかを取得したいということです。また、その取得ロジックはマネージコードであることが前提条件です。

「テキストにセットされた文字列の文字幅を比べれば判別可能ですが・・」というのは私の勘違いでした。すみません。

べるさんが返信してくださった、
「CreateGraphicsでGraphicsオブジェクトを取得して、MeasureStringメソッドで
プロポーショナルフォントなら明らかに幅が異なる2つの文字列同士の幅を比較する 」方法での実装を検討いたします。


1

スキルアップ/キャリアアップ(JOB@IT)