ASCII文字と日本語とでフォントを変更


Windows XPの標準機能(?)である、font = ["欧文フォント", "日本語フォント"] 指定時に欧文は欧文フォントで、日本語は日本語フォントで表示できた機能の Windows Vistaでの疑似的再現。 ※Vistaでは第1フォントで表示できない場合はそれで終わりになってしまいます。  (第1フォントが存在しない場合のみ、第2フォントが適用される。) draw_textベースモジュールが必要です。 変更点 2008:11:23 ・ベースモジュールを別スクリプトとして定義 2009:04:24 ・draw_text2を別モジュール化
#==============================================================================
# ASCII文字と日本語とでフォントを変更 by 貪藻矢射妥←
#------------------------------------------------------------------------------
# 
# Windows XPの標準機能(?)である、font = ["欧文フォント", "日本語フォント"]
# 指定時に欧文は欧文フォントで、日本語は日本語フォントで表示できた機能の
# Windows Vistaでの疑似的再現。
# 
# ※Vistaでは第1フォントで表示できない場合はそれで終わりになってしまいます。
#  (第1フォントが存在しない場合のみ、第2フォントが適用される。)
# 
#==============================================================================
# 変更履歴
# 
# 2008:11:23
# ・ベースモジュールを別スクリプトとして定義
# 
# 2009:04:24
# ・draw_text2を別モジュール化

module DIAMOND
  include DRAW_MSG
  #--------------------------------------------------------------------------
  # ● 文字の描画 ASCII文字と日本語とでフォントを変更 Ver
  #     rectr : 全体の表示領域
  #     text  : 表示文字
  #     font  : 表示フォント群
  #             ["第1フォント", "第2フォント"(,"デフォルトフォント")]
  #     align : 表示位置
  #--------------------------------------------------------------------------
  def draw_text_twin(rectr, text, font, align=0)
    if font.size != 3
      font[2] = Font.default_name
    end
    font1 = [font[0], font[2]]
    font2 = [font[1], font[2]]
    
    root_font = self.contents.font.name
    # 表示待ちのメッセージがある場合
    if text != nil
      # c に 1 文字を取得 (文字が取得できなくなるまでループ)
      while text != ""
        c = text.slice!(/./m)
        # ASCII文字の場合
        if c[1] == nil
          self.contents.font.name = font1
        else
          self.contents.font.name = font2
        end
        # 文字を描画
        draw_text2(rectr, c, align)
        # x に描画した文字の幅を加算
        rectr[0] += self.contents.text_size(c).width
      end
    end
    self.contents.font.name = root_font
    
  end
end
○使用方法 self.contents.draw_text(x, y, width, heigth, text, align) の代わりに rectr = [x, y, width, heigth] draw_text_twin(rectr, text, font[, align]) を指定する
変数 内容
rectr 文字の描画位置です
※Rect.new()ではなく、ただの配列で持ちます
text 表示文字。説明はいらないかと・・・
font 表示フォント群
["第1フォント", "第2フォント"(,"デフォルトフォント")]
align 表示位置(省略可能です。)
※表示フォント群のデフォルトフォントは省略可能です。  (その場合、デフォルトのフォントが自動的に代入される。) ※実は第4フォント以降を設定しても意味がないという使い勝手の悪い作り・・・ ※ちなみに、日本語でも常用外漢字などで特定のフォントでは表示できない漢字の  場合、やっぱり何も表示されずに終わってしまいます。  (こればっかりは本当にどうしよもない・・・)

戻る