[#5492] X Toolkit module — shugo@... (Shugo Maeda)
前田です。
16 messages
1997/12/01
[#5493] Re: X Toolkit module
— matz@... (Yukihiro Matsumoto)
1997/12/01
まつもと ゆきひろです
[#5503] Re: X Toolkit module
— shugo@... (Shugo Maeda)
1997/12/02
前田です。
[#5521] Re: X Toolkit module
— Noritsugu Nakamura <nnakamur@...>
1997/12/03
[#5532] Re: X Toolkit module
— shugo@... (Shugo Maeda)
1997/12/04
前田です。
[#5541] Re: X Toolkit module
— Noritsugu Nakamura <nnakamur@...>
1997/12/05
[#5498] postscript — Kikutani Makoto <kikutani@...>
TkCanvasの
23 messages
1997/12/02
[#5499] Re: postscript
— matz@... (Yukihiro Matsumoto)
1997/12/02
まつもと ゆきひろです
[#5502] Re: postscript
— Kikutani Makoto <kikutani@...>
1997/12/02
きくたにです。
[#5535] wave viewer (Re: postscript)
— Kikutani Makoto <kikutani@...>
1997/12/05
きくたにです。
[#5536] Re: wave viewer (Re: postscript)
— Kikutani Makoto <kikutani@...>
1997/12/05
きくたにです。
[#5538] Re: wave viewer (Re: postscript)
— matz@... (Yukihiro Matsumoto)
1997/12/05
まつもと ゆきひろです
[#5547] Re: wave viewer (Re: postscript)
— Kikutani Makoto <kikutani@...>
1997/12/06
きくたにです。
[#5556] Re: wave viewer (Re: postscript)
— matz@... (Yukihiro Matsumoto)
1997/12/06
まつもと ゆきひろです
[#5574] tcltklib error (Re: wave viewer)
— Kikutani Makoto <kikutani@...>
1997/12/08
きくたにです。
[#5589] Re: tcltklib error (Re: wave viewer)
— Kikutani Makoto <kikutani@...>
1997/12/08
Mon, Dec 08, 1997 at 11:42:23AM +0900 において
[#5595] Re: tcltklib error (Re: wave viewer)
— Kikutani Makoto <kikutani@...>
1997/12/08
Mon, Dec 08, 1997 at 03:23:53PM +0900 において
[#5596] Re: tcltklib error (Re: wave viewer)
— WATANABE Hirofumi <watanabe@...>
1997/12/08
わたなべです.
[#5504] cgi-lib.rb — 青山 和光 <PXN11625@...>
cgi-lib.rb, shellwords.rb の新版です。
22 messages
1997/12/02
[#5505] Re: cgi-lib.rb
— matz@... (Yukihiro Matsumoto)
1997/12/03
まつもと ゆきひろです
[#5506] Re: cgi-lib.rb
— keiju@... (石塚圭樹 )
1997/12/03
けいじゅ@日本ラショナルソフトウェアです.
[#5508] Re: cgi-lib.rb
— matz@... (Yukihiro Matsumoto)
1997/12/03
まつもと ゆきひろです
[#5512] Re: cgi-lib.rb
— Shin-ichiro HARA <sinara@...>
1997/12/03
原です。
[#5513] nil =~ regexp (Re: cgi-lib.rb)
— matz@... (Yukihiro Matsumoto)
1997/12/03
まつもと ゆきひろです
[#5514] Re: nil =~ regexp (Re: cgi-lib.rb)
— Shin-ichiro HARA <sinara@...>
1997/12/03
原です。
[#5515] Re: nil =~ regexp (Re: cgi-lib.rb)
— matz@... (Yukihiro Matsumoto)
1997/12/03
まつもと ゆきひろです
[#5517] Re: nil =~ regexp (Re: cgi-lib.rb)
— Shin-ichiro HARA <sinara@...>
1997/12/03
原です。
[#5519] Re: nil =~ regexp (Re: cgi-lib.rb)
— matz@... (Yukihiro Matsumoto)
1997/12/03
まつもと ゆきひろです
[#5539] ruby 1.0-971204 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
25 messages
1997/12/05
[#5542] Re: ruby 1.0-971204 released
— Noritsugu Nakamura <nnakamur@...>
1997/12/05
[#5544] Re: ruby 1.0-971204 released
— shugo@... (Shugo Maeda)
1997/12/06
前田です。
[#5572] Re: ruby 1.0-971204 released
— Shoichi OZAWA <ozawa@...>
1997/12/08
こんにちは 小澤@日立 です。
[#5603] Re: ruby 1.0-971204 released
— Noritsugu Nakamura <nnakamur@...>
1997/12/08
[#5604] Re: ruby 1.0-971204 released
— WATANABE Hirofumi <watanabe@...>
1997/12/09
わたなべです.
[#5624] Re: ruby 1.0-971204 released
— Noritsugu Nakamura <nnakamur@...>
1997/12/10
[#5627] Re: ruby 1.0-971204 released
— matz@... (Yukihiro Matsumoto)
1997/12/11
まつもと ゆきひろです
[#5630] Re: ruby 1.0-971204 released
— WATANABE Hirofumi <watanabe@...>
1997/12/11
わたなべです.
[#5570] OSP'97 — WATANABE Hirofumi <watanabe@...>
わたなべです.
9 messages
1997/12/08
[#5578] cannot make GD-1.3 — Shoichi OZAWA <ozawa@...>
小澤@日立 です。
5 messages
1997/12/08
[#5607] megawidgets — Kikutani Makoto <kikutani@...>
きくたにです。
5 messages
1997/12/09
[#5615] bug in String#scan ?? — Yuji Shigehiro <sigehiro@...>
しげひろです.
17 messages
1997/12/10
[#5616] Re: bug in String#scan ??
— matz@... (Yukihiro Matsumoto)
1997/12/10
まつもと ゆきひろです
[#5617] Re: bug in String#scan ??
— Shin-ichiro HARA <sinara@...>
1997/12/10
原です。
[#5632] undef method — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
6 messages
1997/12/11
[#5652] How to distinguish 1.1 or lower (was Re: bug in String#scan ??) — Eiji-usagi-MATSUmoto <ematsu@...>
うさぎです
6 messages
1997/12/12
[#5657] Is there alternative way? — KIMURA Koichi <kkimura@...>
5 messages
1997/12/12
[#5660] Re: [ruby-dev:1065] Re: Postgres module — Eiji-usagi-MATSUmoto <ematsu@...>
うさぎです
5 messages
1997/12/12
[#5668] Re: ObjectDBM — 青山 和光 <PXN11625@...>
石塚さん(B... さんですよね?)、おはようございます。
14 messages
1997/12/13
[#5672] Re: ObjectDBM
— keiju@... (石塚圭樹 )
1997/12/14
けいじゅ@日本ラショナルソフトウェアです.
[#5677] Re: ObjectDBM
— WATANABE Hirofumi <watanabe@...>
1997/12/15
わたなべです.
[#5686] uumerge.rb — Masaki Suketa <masaki.suketa@...>
sample に入っている uumerge.rb ですが
7 messages
1997/12/15
[#5701] get a password — tateishi@... (Takaaki TATEISHI)
立石@理科大です。
12 messages
1997/12/16
[#5704] Re: get a password
— Kikutani Makoto <kikutani@...>
1997/12/17
[#5718] Re: get a password
— matz@... (Yukihiro Matsumoto)
1997/12/18
まつもと ゆきひろです
[#5712] script to rewrite a pap-secrets — tateishi@... (Takaaki.Tateishi)
立石です。
1 message
1997/12/17
[#5732] ruby 1.1b2 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
12 messages
1997/12/19
[#5739] Re: ruby 1.1b2 released
— shugo@... (Shugo Maeda)
1997/12/20
前田です。
[#5751] ruby 1.1b3 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
11 messages
1997/12/24
[#5761] ruby 1.0-971225 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
6 messages
1997/12/25
[ruby-list:5610] How to make Composite Widget (Re: megawidgets)
From:
matz@... (Yukihiro Matsumoto)
Date:
1997-12-09 05:14:18 UTC
List:
ruby-list #5610
まつもと ゆきひろです
In message "[ruby-list:5609] Re: megawidgets"
on 97/12/09, Kikutani Makoto <kikutani@jdc.ericsson.se> writes:
|きくたにです。
|> # 乗る人がいれば,TkCompositeの使い方を説明しますけど.
|
|お願いします。ぼちぼちでよろしければやってみたいと思います。
了解です.このメールは保存版ですね(長いです).
= Composite Widgetの作り方
== Composite Widgetとは
複数のウィンドウ部品がまとまってできているウィンドウ部品のこ
とです.Ruby/TkではTkCompositeモジュールを使うことによって比
較的簡単にComposite Widgetを作ることができます.
# Ruby/TkのComposite Widgetの作り方はSTkのSTklosが元になって
# います.
== 作り方
実例を見ながら作ってみましょう.Composite Widgetの実例として
TkScrollBoxを見てみます.これはScrollbarが付随したListboxに
なります.プログラムは以下の通りです.
1 #
2 # tkscrollbox.rb - Tk Listbox with Scrollbar
3 # as an example of Composite Widget
4 # $Date: 1995/12/12 18:21:01 $
5 # by Yukihiro Matsumoto <matz@caelum.co.jp>
6
7 require 'tk.rb'
8
9 class TkScrollbox<TkListbox
10 include TkComposite
11 def initialize_composite
12 list = TkListbox.new(@frame)
13 scroll = TkScrollbar.new(@frame)
14 @path = list.path
15
16 list.configure 'yscroll', scroll.path+" set"
17 list.pack 'side'=>'left','fill'=>'both','expand'=>'yes'
18 scroll.configure 'command', list.path+" yview"
19 scroll.pack 'side'=>'right','fill'=>'y'
20
21 delegate('DEFAULT', list)
22 delegate('foreground', list)
23 delegate('background', list, scroll)
24 delegate('borderwidth', @frame)
25 delegate('relief', @frame)
26 end
27 end
まず,tkモジュールをrequireして,それからクラスTkScrollbarを
定義しています(7,9行目).
TkScrollbarはTkListboxのサブクラスとして定義していますが,こ
れはTkScrollbarがTkListboxの振舞い(特にメソッド)を引き継ぎた
いからです.特にそのようなクラスが存在しない場合,TkWindowの
サブクラスにします.Tkクラスの構造の違いについて考える必要は
ありません(実は全てのTkクラスは同じ構造を持っています).
それから,TkCompositeモジュールをincludeします.これは
Compsite Widgetを定義する際に必須です.
次にinitialize_compositeメソッドを定義します.これは通常のク
ラスにおけるinitializeに相当する初期化メソッドです.なお,
Composite Widgetのクラスはinitializeを再定義してはいけません.
このinitialize_compositeメソッドではCompositeの内部部品を生
成し,配置します.このメソッドの中では,内部部品を囲むフレー
ムとしてインスタンス変数 @frame にTkFrameオブジェクトが与え
られていますから,それを使って生成と配置を行います(12〜19行
目まで).
14行目ではインスタンス変数 @path にlistのパスを設定していま
す.これは継承したTkListboxのメソッドを動作させるために必要
です.TkWindowクラス以外のクラスから継承したComposite Widget
を定義する場合にはこのようにして @path にそのクラスのオブジェ
クトのpathを代入しておく必要があります.
さて,次に「属性の委譲」を行います(21〜25行目).これは
configureなどで設定される属性をどのオブジェクトに投げるかを
設定します.例ではforegroundなどはlistに,borderwidthや
reliefは@frameに,backgroundはlistとscrollに,残りの属性
(DEFAULTで指定)はlistに委譲しています.
これでinitialize_compositeの定義は終りです.newへの引数は(親
を指定した第1引数以外は)initialize_compositeにも引き渡されま
すから,ここでconfigureを呼んでおいた方が良いかも知れません.
その場合は
def initialize_composite(keys=nil)
...
tk_send 'configure' *hash_kv(keys) if keys
end
となるでしょう.
さて,例はここで終りですが,必要によってはそのクラスに特有の
メソッドを定義する必要があるでしょう.後で参照する必要のある
内部部品はインスタンス変数に代入してとっておきましょう.メソッ
ドの書き方はtk.rbの他のメソッドを参照して下さい.@path(基本
的なメソッドを引き受けるTkの実体)と@epath(外側を囲むTkの実体)
に気をつければそんなに難しくないはずです.
まつもと ゆきひろ /:|)