- PR -

VB.NETで縦書きフォントの一覧を取得する方法

投稿者投稿内容
マリテス
会議室デビュー日: 2004/02/14
投稿数: 9
投稿日時: 2004-02-14 17:28
VB.NETで開発している者です。

VB.NETでフォントの一覧を取得することは簡単ですが、フォント名の先頭に@の付いたフォントまたは、縦書きフォントの存在するフォント名の取得はどうすればよいのでしょうか。ご存知の方教えてください。
よろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-14 18:16
諸農です。

単純に思い付くのは、FontFamily.Familiesコレクションの
FontFamily.Nameプロパティの先頭文字が@かそうでないかを
判定することになるのではないかと思います。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
マリテス
会議室デビュー日: 2004/02/14
投稿数: 9
投稿日時: 2004-02-14 18:37
返事ありがとうございます。
やってみるとですね、@付きのフォント名は取得できないのです。
下記プログラムです。
installedFontCollection

GetFamilies
を使っても結果は変わりませんでした。


Dim ffs As FontFamily() = FontFamily.Families
Dim ff As FontFamily
Dim NameList(ffs.Length) As String

Dim idx As Integer = 0
For Each ff In ffs
NameList(idx) = ff.Name()
idx = idx + 1
Next ff
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-15 00:45
諸農です。

引用:

やってみるとですね、@付きのフォント名は取得できないのです。



あららら。そうでしたか。
.NET/GDI+になってから変わったのでしょうか。

となると、昔ながらのWin32でCallBack関数を使うとかですかね。。
SDK
[Callback のサンプル]
ms-help://MS.NETFrameworkSDKv1.1.JA/cpguidenf/html/cpconcallbacksample.htm

Win32
[EnumFontFamiliesEx]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_4mk8.asp

[EnumFontFamExProc]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_9rmr.asp

等が参考になるかと思います。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
マリテス
会議室デビュー日: 2004/02/14
投稿数: 9
投稿日時: 2004-02-16 11:52
どうやらその通りのようです。
vb.netで
dim nFont = new Font("@MS ゴシック" ...)
としても、後続のパラメータをどう変えようと、縦書きフォントは選択されません。
現時点では、vb.netは縦書きフォント未対応のようです。

がんばってAPIにチャレンジしてみます。これがまた、LOGFONTをやった時に
苦労したのですが、vb.netはユニコードなので、Wの方を呼び出す必要があり、
資料が乏しく四苦八苦です。
soramimi
会議室デビュー日: 2003/10/29
投稿数: 19
投稿日時: 2004-02-16 13:07
もう解決されたかも知れませんが…
引用:

vb.netで
dim nFont = new Font("@MS ゴシック" ...)
としても、後続のパラメータをどう変えようと、縦書きフォントは選択されません。
現時点では、vb.netは縦書きフォント未対応のようです。


new Font("@MS ゴシック" ...)とした場合は
GdiVerticalFont プロパティが True になっていて
縦書きフォントになるようです。
# Name プロパティは "MS ゴシック" です。
マリテス
会議室デビュー日: 2004/02/14
投稿数: 9
投稿日時: 2004-02-16 14:31
soramimi さん
ありがとうございます。

書かれたとおりですね。フラグは自動的に立ちました。
ただ、そのフォントで描画しても縦書きにはならないのです。
LOGFONTで@書体を指定しCreateFontIndirectを使うと縦書き書体になるのですが
FONT("@書体名"...)
で作っても縦書きにならないのです。
また。FONT.fromLOGFONT を使っても結果はうまくいきません。

想像するに、vb.netで実装されているfontはLOGFONTの一部なのではないでしょうか?
縦書きに限らず長体や平体も同じ結果になります。全てを調べたわけでないですが
かなり機能が削られているように思われます。

また、今回の目的は縦書きフォントの一覧の作成なのでwin32api以外では現在の所全くお手上げです。
Hirashige
常連さん
会議室デビュー日: 2002/10/26
投稿数: 29
投稿日時: 2004-02-16 15:15
縦書きフォントの一覧取得ではありませんが

引用:

マリテスさんの書き込み (2004-02-16 14:31) より:

ただ、そのフォントで描画しても縦書きにはならないのです。
LOGFONTで@書体を指定しCreateFontIndirectを使うと縦書き書体になるのですが
FONT("@書体名"...)
で作っても縦書きにならないのです。




.NETで縦書きを行うためには「StringFormat」の「FormatFlags」に
StringFormatFlags.DirectionVerticalをセットしてStringDrawに指定します。

コード:
Dim drawFormat As New StringFormat()
一部省略
drawFormat.FormatFlags = StringFormatFlags.DirectionVertical
e.Graphics.DrawString(drawString, drawFont, drawBrush,drawPoint,drawFormat)



引用:


また、今回の目的は縦書きフォントの一覧の作成なのでwin32api以外では現在の所全くお手上げです。




 前記の方法で一応英文なども縦書きにはなりますが、文字は回転しませんので
(ハイフンなどは横のまま)解決策にはなりませんね...

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