タイトル : Re^7: Windowsのシステムで使用しているフォントの取得。 投稿日 : 2009/11/24(Tue) 17:54 投稿者 : ヨシ
ご返信ありがとうございます。 下記のようなコードで動作確認をしています。 Private Const LF_FACESIZE = &H20 Private Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName(LF_FACESIZE) As Byte End Type dim strResult as string dim lngRet as long dim A as LOGFONT dim i as integer 'システムフォントを取得 lngRet = SystemParametersInfo(31, Len(A), A, 0) '取得したフォントをバイトからストリングへ For i = 0 To 32 strResult = strResult & Chr(A.lfFaceName(I)) Next i Text1.Font.Charset = 128 Text1.Font = strResult 日本語OSでこれを実行すると、Text1.Fontに MS UI Gothicが セットされ、文字のフォントが変更されます。 中国語OSでこれを実行すると、文字のフォントは変更されますが、 中国語を貼り付けると文字化けします。 (現仕様では、SimSunなどのフォントをあらかじめ各コントロールのフォント に設定しておけば正常に表示できています。) A.lfFaceName に格納される値は、バイト型で下記になります。 183 76 63 182 174 182 192 中国語OSで、プリントアウトで出力された変換後のstrResultの値は ·L??R?A です。 中国語OSのシステムフォント名が2バイト文字であることが、 フォント名文字化けの原因ではないかと考えております。(おそらく「微軟正K體」) また、下記のようなものも試してみました。 lngRet = SystemParametersInfo(31, Len(A), A, 0) font1 = CreateFontIndirect(A) ret = SelectObject(Form1.hdc, font1) ret = DeleteObject(font1) Text1.Font = Form1.hdc これを日本語OSでおこなうとき、 Text1.Font.Charset = 128 を実行した場合はMSPゴシックをフォントとして取得し、 Charsetを行わないとArialを取得します。 これらが何のフォントを取得しているのか、追い切れておりません。 以上、たびたび申し訳ありませんが、よろしくおねがいいたします。 |