Unicodeのフォント名をセットするには?

解決


ぱお  2005-03-16 11:00:50  No: 13782

TCanvas.Font.NameをUnicode文字列で指定したいです。
ShiftJISに変換不可能なUnicodeのフォント名です。
ダイアログは使わずにプログラム内から任意のフォント名を指定します。
わかっているのはフォント名のみです。

TFontはどうしようもないのでAPIになるかと思いますがご教授お願いします。


意味不明  2005-03-16 15:05:39  No: 13783

文字コードとフォント名を混同してる?
UNICODEでフォント名を指定しても文字コードがUNICODEになるわけじゃない。
StringToWideChar関数を使いたくない?なぜ?
例えば、UNICODEで「MS 明朝」を指定したいなら、

var
  szFontName: array[0..5] of WideChar = (#$FF2D,#$FF33,#$0020,#$660E,#$671D,#$0000);

TCanvas.Font.Name := szFontName;

でも、ナンの意味がある?


ぱお  2005-03-16 21:51:08  No: 13784

外国のフォントファイルの中にはShiftJISで表せないUnicodeのフォント名しか
もっていないものがあります。
Tfont.NameはString型なのでこれは受け付けてくれません。
String型に変換されるとダメで、Unicodeのままフォント名を受け入れてくれな
いと(APIに渡さないと)プログラム内からフォントを指定できません。


にしの  2005-03-16 22:29:31  No: 13785

できるかどうか解りませんが、APIのCreateFontIndirectを利用してフォントのハンドルを取得し、TFont.Handleに入れ込んでみてはどうでしょう。
だめであれば、描画系すべて自前で処理する必要があります。


にしの  2005-03-16 22:30:04  No: 13786

間違えました。
CreateFontIndirectWですね。
CreateFontIndirectは、CreateFontIndirectAと同等なので。


ぱお  2005-03-19 11:03:13  No: 13787

返答遅くなりました。
教えていただいた方法でうまくいきました。
ハンドルの反映の仕方でいろいろ悩んでいたのですがTFont.Handleに
直接入れるのは気がつきませんでした。
メモリリークを心配したのですが大丈夫のようです。
ありがとうございました。

以下、参考までに簡単に書きます。

EnumFontFamExProc  と  EnumFontFamiliesExW  により
TLogFontWを取得

Font.Handle:= CreateFontIndirectW(LogFontW);


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加