ruby-****@sourc*****
ruby-****@sourc*****
2003年 8月 15日 (金) 12:23:49 JST
------------------------- REMOTE_ADDR = 163.135.10.34 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?ruby-gtk-Tutorials+Rulers ------------------------- + = ルーラ ルーラウィジェットはあるウィンドウ内でのマウスポインタの位置を表示するために用いられる. ウィンドウは幅方向に沿って計測する垂直ルーラと高さ方向に下って計測する水平ルーラを持つことができる. ルーラ上の小さな三角形のインジケータが,ルーラに対応するポインタの正確な位置を示す. まず最初にルーラを作成しなければならない. Gtk::HRuler.new # 水平ルーラ Gtk::VRuler.new # 垂直ルーラ ルーラを作成したら計測の単位を定義することができる. ルーラの計測の単位にはGtk::PIXELS, Gtk::INCHESあるいはGtk::CENTIMETERSを指定できる. 次のメソッドで単位の指定を行う: Gtk::Ruler#metric=(metric) Gtk::Ruler#set_metric(metric) デフォルトはGtk::PIXELSである. ルーラの他の重要な特徴はスケールの目盛線の付け方と,位置インジケータの最初の位置である. これらは次のメソッドで指定する: Gtk::Ruler#set_range(lower, upper, position, max_size) lowerとupper引数はルーラの範囲を定義し,max_sizeは表示できる最大の数値である. positionはルーラの位置インジケータの最初の位置を定義する 800ピクセル幅のウィンドウに垂直ルーラを渡すには vruler = Gtk::VRuler.new vruler.set_range(0, 800, 0, 800) のようにすればよい. ルーラ上に表示される目盛りは0から800で100ピクセルごとに数が振られる. もし代わりにルーラを7から16の範囲にしたければ,次のようにすればよい: vruler.set_range(7, 16, 0, 20) ルーラ上のインジケータは小さな三角印をしていて,このルーラに対応するポインタの位置を示す. もしルーラをマウスポインタを追跡するために使うなら,motion_notify_eventシグナルをルーラのGtk::Ruler#motion_notify_eventに接続する必要がある. ウィンドウ領域中の全てのマウスの移動を追跡するためには次のようにする: ((-これ動きません.どうやればいいか分かる方,教えて下さい.-)) area.signal_connect("motion_notify_event") do |w, e| vruler.signal_connect("motion_notify_event", e) end 以下の例は上に水平ルーラ,左に垂直ルーラの付いたドローイングエリアを作成する. ドローイングエリアのサイズは幅が600ピクセル,高さが400ピクセルである. 水平ルーラは7から13までの区間で100 ピクセル毎に目盛りが付いている. また垂直ルーラは0から400までの区間で100ピクセル毎に目盛りが付いている. ドローイングエリアとルーラの配置はテーブルを用いて行われる. + {{image_right "rulers.png"}}{{br}} #! /usr/bin/env ruby require 'gtk2' Gtk.init window = Gtk::Window.new window.signal_connect("delete_event") {Gtk.main_quit} window.border_width = 10 table = Gtk::Table.new(3, 2, false) window.add(table) area = Gtk::DrawingArea.new area.set_size_request(600, 400) table.attach(area, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0) area.set_events(Gdk::EventMotion::POINTER_MOTION_MASK|Gdk::EventMotion::POINTER_MOTION_HINT_MASK) hrule = Gtk::HRuler.new hrule.metric = Gtk::PIXELS hrule.set_range(7, 13, 0, 20) area.signal_connect("motion_notify_event") do |w, e| # FIX ME! # hrule.signal_emit("motion_notify_event", e) end table.attach(hrule, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0) vrule = Gtk::VRuler.new vrule.metric = Gtk::PIXELS vrule.set_range(0, 400, 10, 400) area.signal_connect("motion_notify_event") do |w, e| # FIX ME! # vrule.signal_emit("motion_notify_event", e) end table.attach(vrule, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0) window.show_all Gtk.main