- - PR -
VB.NETで縦書きフォントの一覧を取得する方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-14 17:28
VB.NETで開発している者です。
VB.NETでフォントの一覧を取得することは簡単ですが、フォント名の先頭に@の付いたフォントまたは、縦書きフォントの存在するフォント名の取得はどうすればよいのでしょうか。ご存知の方教えてください。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 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 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 | ||||||||||||
|
投稿日時: 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-16 11:52
どうやらその通りのようです。
vb.netで dim nFont = new Font("@MS ゴシック" ...) としても、後続のパラメータをどう変えようと、縦書きフォントは選択されません。 現時点では、vb.netは縦書きフォント未対応のようです。 がんばってAPIにチャレンジしてみます。これがまた、LOGFONTをやった時に 苦労したのですが、vb.netはユニコードなので、Wの方を呼び出す必要があり、 資料が乏しく四苦八苦です。 | ||||||||||||
|
投稿日時: 2004-02-16 13:07
もう解決されたかも知れませんが…
new Font("@MS ゴシック" ...)とした場合は GdiVerticalFont プロパティが True になっていて 縦書きフォントになるようです。 # Name プロパティは "MS ゴシック" です。 | ||||||||||||
|
投稿日時: 2004-02-16 14:31
soramimi さん
ありがとうございます。 書かれたとおりですね。フラグは自動的に立ちました。 ただ、そのフォントで描画しても縦書きにはならないのです。 LOGFONTで@書体を指定しCreateFontIndirectを使うと縦書き書体になるのですが FONT("@書体名"...) で作っても縦書きにならないのです。 また。FONT.fromLOGFONT を使っても結果はうまくいきません。 想像するに、vb.netで実装されているfontはLOGFONTの一部なのではないでしょうか? 縦書きに限らず長体や平体も同じ結果になります。全てを調べたわけでないですが かなり機能が削られているように思われます。 また、今回の目的は縦書きフォントの一覧の作成なのでwin32api以外では現在の所全くお手上げです。 | ||||||||||||
|
投稿日時: 2004-02-16 15:15
縦書きフォントの一覧取得ではありませんが
.NETで縦書きを行うためには「StringFormat」の「FormatFlags」に StringFormatFlags.DirectionVerticalをセットしてStringDrawに指定します。
前記の方法で一応英文なども縦書きにはなりますが、文字は回転しませんので (ハイフンなどは横のまま)解決策にはなりませんね... |