FrontPage  Index  Search  Changes  RSS  wikifarm  Login

Canvas_draw_text.rb

概要

Windows APIのラッパーである Phi.draw_text の Phi::Canvas版です。引数を簡略化し、シンボルでも多様な指定が出来るようにしています。左詰め、中央揃え、右詰め、上端、上下中央、下端、長い文字列の途中を「..」で省略する、等々、いろいろな指定が出来ます。


依存性

  1. Apollo 専用です。

利用者


実行見本:

2.jpg

コメントがありましたらどうぞ

(comment plugin is disabled).

説明


ソース:

Canvas_draw_text.rb

#! ruby -Ks
#-- Canvas_draw_text.rb
#-- Canvas_draw_text.pi

require 'phi'

# [ap-dev:1204] Win_draw_text

# http://www2.ocn.ne.jp/~mizu/api/d/d0001.htm
#function DrawText(hDC: HDC; lpString: PChar; nCount: Integer; var lpRect: TRect; uFormat: UINT): Integer;

module Phi
class Canvas
  def draw_text(str,rect,format=0,count=-1)
##    handle2 = (handle > 0x7FFFFFFF) ? (handle - 0x100000000) : handle
    handle2 = handle
    Phi.draw_text(handle2,str,count,rect,format)
  end

  def draw_text_sym_hash
    {
      :top            => Phi::DT_TOP               , # 上揃え。            :single_line も必要。
      :vcenter        => Phi::DT_VCENTER           , # 垂直方向の中央揃え。:single_line も必要。
      :bottom         => Phi::DT_BOTTOM            , # 下揃え。            :single_line も必要。
      #
      :left           => Phi::DT_LEFT              , # 左揃え
      :center         => Phi::DT_CENTER            , # 水平方向の中央揃え
      :right          => Phi::DT_RIGHT             , # 右揃え
      #
      :word_break     => Phi::DT_WORDBREAK         , # 長すぎるとき、折り返しを行う。
      :single_line    => Phi::DT_SINGLELINE        , # 長すぎるとき、改行せず、一行で表示。
      :path_ellipsis  => Phi::DT_PATH_ELLIPSIS     , # 長すぎるとき、テキストの途中を省略符号 (...) に置き換える。
      :end_ellipsis   => Phi::DT_END_ELLIPSIS      , # 長すぎるとき、テキストの最後を省略符号 (...) に置き換える。
      :no_clip        => Phi::DT_NOCLIP            , # クリッピングしない。
      :modify_string  => Phi::DT_MODIFYSTRING      , # END_ELLIPSIS、PATH_ELLIPSISで変更された文字列を返す(使えない)
      #
      :no_prefix      => Phi::DT_NOPREFIX          , # 「&」を変換しない。
      :hide_prefix    => Phi::DT_HIDEPREFIX        , # 文字列の & を無視し、& の次の文字に下線を付けない。
      :prefix_only    => Phi::DT_PREFIXONLY        , # 文字列の & の次に付く下線だけを表示
      #
      :expand_tabs    => Phi::DT_EXPANDTABS        , # タブコードを展開する。
      :tab_stop       => Phi::DT_TABSTOP           , # タブ文字の空白文字数を設定(シンボル方式では使えない)。
                                                     # uFormat パラメータの8ビット目から15ビット目
                                                     # (下位ワードの上位バイト)でタブ文字の文字数を指定する。
      #
      :external_leading => Phi::DT_EXTERNALLEADING , # 行間スペースを追加する。
      :calc_rect      => Phi::DT_CALCRECT          , # 描画に必要なRectを計算して返す(使えない)。戻り値が高さになる?
      :internal       => Phi::DT_INTERNAL          ,
      :edit_control   => Phi::DT_EDITCONTROL       , # Memoクラスの形式で表示
      :rtl_reading    => Phi::DT_RTLREADING        , # アラビア文字用。
      :word_ellipsis  => Phi::DT_WORD_ELLIPSIS     ,
    }
  end

  def draw_text_sym(str,rect,*syms)
    options = 0
    hash = draw_text_sym_hash
    syms.each{|v| options |= hash[v] }
    draw_text(str,rect,options)
  end
end
end

if __FILE__ == $0
require 'phi' ; include  Phi

form = Form.new
form.on_paint=proc{
  option = [:right,:bottom,:single_line]
  form.canvas.draw_text_sym("draw_text(#{option.inspect})",form.client_rect,*option)
  option = [:center,:vcenter,:single_line]
  form.canvas.draw_text_sym("draw_text(#{option.inspect})",form.client_rect,*option)
  option = [:path_ellipsis]
  form.canvas.draw_text_sym("draw_text(#{option.inspect})→→#{__FILE__}",form.client_rect,*option)
}
form.on_resize=proc{form.invalidate}
form.show
mainloop
end # if __FILE__

Last modified:2007/08/01 12:27:11
Keyword(s):
References: