[#5782] 多元配列の初期化と fill — Kikutani Makoto <kikutani@...>
あ、こっちは送りそこなっていたのか。
[#5792] can't resolve symbol — tateishi@... (Takaaki.Tateishi)
まつもと ゆきひろです
[#5821] Re: 退会方法 — takagi@... (TAKAGI Hiromitsu)
> |もっともいつぞや話の出ていたニューズグループをつくってしまえ
前田です。
前田です。
わたなべです.
[#5822] Is ruby not able to treat 'nil' as 1st arugument for method call ? — Nobuyoshi Miyokawa <nmiyo@...>
はじめまして。
[#5825] Rimnet de Ruby — Tsuyoshi Sasagawa <sasa2@...>
笹川 剛と申します
[#5830] CGI script in Ruby — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#5841] ftplib.rb (ruby-1.1) — 助田 雅紀 <masaki.suketa@...>
助田です。
[#5846] ruby 1.1b4 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#5867] patches for 1.0 — Eiji-usagi-MATSUmoto <ematsu@...>
うさぎです
[#5873] Are there any sample programs for UDP socket ? — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...>
はじめまして。としちゃん、こと下川と申します。最近 ruby に興味をもってい
まつもと ゆきひろです
[#5877] Ruby/Gtk module — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#5880] "Linux Journal Vol.6" carries an article on Ruby — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
井上@NaClです。
まつもと ゆきひろです
[#5882] ruby 1.1b5 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#5900] read config file — Yasunari Momoi <conan@...>
ももい@あるもにこすです.
[#5905] win and unix, and so on — TAKAHASHI Masayoshi <maki@...>
高橋と申します。はじめまして。しばらくROMしてました。
まつもと ゆきひろです
わたなべです.
原です。
わたなべです.
うさぎです.
中田@Vectorです。
[#5951] How to use TkMenu ? — Kikutani Makoto <kikutani@...>
きくたにです。
まつもと ゆきひろです
きくたにです。
前田です。
[#5972] [BUG?] singleton object — Kazuhisa YANAGAWA <katze@...>
silver% ruby
[#5977] dserver module ? — Noritsugu Nakamura <nnakamur@...>
[#5982] Ruby連載 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#5988] MLへの参加 — Masaru UCHIDA <uchi@...>
内田@北海道大学 といいます。rubyについて知りたいのでメーリングリスト
[#5995] fold — toyofuku@...
豊福@パパイヤです。
[#6002] question about ruby-tutorial — tei@... (TEI meiki)
始めまして、鄭と申します。
わたなべです.
鄭です。
まつもと ゆきひろです
[#6006] ruby 1.1b6 & gtk module — densuke@...2.so-net.or.jp
佐藤@東邦大です。1.0から1.1b6に乗り換えようとしています。
[#6008] Re: tcltklib.dll LoadError on cygwin32(1.1b5) — "Michinori Amemori" <ame@...>
>わたなべです.
あ伊藤です.
[#6023] Comparison with Other Languages (Re: [python-ml-jp 54] Re: Reasons why I prefer to use Python) — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
In message <199801260713.QAA04888@picachu.netlab.co.jp>
まつもと ゆきひろです
[#6055] Ruby連載 第3回 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
きくたにです。
まつもと ゆきひろです
高橋です。
前田です。
たぶんおひさしぶりの小澤さくです.
まつもと ゆきひろです
松尾です。こんばんは。
まつもと ゆきひろです
松尾です。おはようございます。
まつもと ゆきひろです
[#6096] パースエラー等の嵐をDos窓で受けるには...? — Masao Kanemitsu <masao-k@...>
[#6119] man/date/time — Tadayoshi Funaba <tadf@...>
こんにちは、ちょっと訊きたいことがあります。
まつもと ゆきひろです
まつもと ゆきひろです
>私が作るかどうかはともかく、資料がある程度まとまったらまた出します。
まつもと ゆきひろです
>いや,もっともです.どのような書式を認識すべきかもうすこし具
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
>すいません. ruby-devにだけポストしていました.
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
わたなべです.
[ruby-list:5966] Re: How to use TkMenu ?
前田です。
In message "[ruby-list:5956] Re: How to use TkMenu ?"
Kikutani Makoto <kikutani@po.eis.or.jp> wrote:
|> menu_spec = [
|> ["File",
|> ["Open", lambda { openFile }],
|> "---",
|> ["Exit", lambda { exit }]],
|> ["Edit",
|> ["Cut", lambda { cut }],
|> ["Copy", lambda { copy }]]
|> ]
|>
|> menubar = TkMenubar.new(menu_spec)
|>
|> みたいなクラスがあると便利かもしれません。
|
|良いですねえ。
|# TkCompositeですぐにできるかな。
すぐできました(^^;
使い方は以下のような感じです。
menu_spec = [
[['File', 0],
['Open', proc{puts('Open clicked')}, 0],
'---',
['Quit', proc{exit}, 0]],
[['Edit', 0],
['Cut', proc{puts('Cut clicked')}, 2],
['Copy', proc{puts('Copy clicked')}, 0],
['Paste', proc{puts('Paste clicked')}, 0]]
]
menubar = TkMenubar.new(nil, menu_spec,
'tearoff'=>false,
'foreground'=>'grey40',
'activeforeground'=>'red',
'font'=>'-adobe-helvetica-bold-r-*--12-*-iso8859-1')
menubar.pack('side'=>'top', 'fill'=>'x')
あるいは、
menubar = TkMenubar.new
menubar.add_menu([['File', 0],
['Open', proc{puts('Open clicked')}, 0],
'---',
['Quit', proc{exit}, 0]])
menubar.add_menu([['Edit', 0],
['Cut', proc{puts('Cut clicked')}, 2],
['Copy', proc{puts('Copy clicked')}, 0],
['Paste', proc{puts('Paste clicked')}, 0]])
menubar.configure('tearoff', false)
menubar.configure('foreground', 'grey40')
menubar.configure('activeforeground', 'red')
menubar.configure('font', '-adobe-helvetica-bold-r-*--12-*-iso8859-1')
menubar.pack('side'=>'top', 'fill'=>'x')
specのフォーマットは
[
[
[ボタンのtext, underline, accelerator],
[メニューのlabel, command, underline, accelerator],
'---', # セパレータ
...
],
...
]
のようになっています。
オプションは省略できます。
配列の代りにHashを使ってもOKです。
add_menuを使う場合はコンストラクタでオプションを指定する代りに
すべてのメニューをadd_menuしてからconfigureする必要があります。
--
前田 修吾
Attachments (1)
# tkmenubar.rb
require "tk"
class TkMenubar
include TkComposite
def initialize(parent = nil, spec = nil, options = nil)
super(parent, options)
@menus = []
if spec
for menu_info in spec
add_menu(menu_info)
end
end
if options
for key, value in options
configure(key, value)
end
end
end
def add_menu(menu_info)
btn_info = menu_info.shift
mbtn = TkMenubutton.new(@frame)
if btn_info.kind_of?(Hash)
for key, value in btn_info
mbtn.configure(key, value)
end
elsif btn_info.kind_of?(Array)
mbtn.configure('text', btn_info[0]) if btn_info[0]
mbtn.configure('underline', btn_info[1]) if btn_info[1]
mbtn.configure('accelerator', btn_info[2]) if btn_info[2]
else
mbtn.configure('text', btn_info)
end
menu = TkMenu.new(mbtn)
for item_info in menu_info
if item_info.kind_of?(Hash)
menu.add('command', item_info)
elsif item_info.kind_of?(Array)
options = {}
options['label'] = item_info[0] if item_info[0]
options['command'] = item_info[1] if item_info[1]
options['underline'] = item_info[2] if item_info[2]
options['accelerator'] = item_info[3] if item_info[3]
menu.add('command', options)
elsif /^-+$/ =~ item_info
menu.add('sep')
else
menu.add('command', 'label' => item_info)
end
end
mbtn.menu(menu)
@menus.push([mbtn, menu])
add_delegates('tearoff', menu)
add_delegates('foreground', mbtn, menu)
add_delegates('background', mbtn, menu)
add_delegates('disabledforeground', mbtn, menu)
add_delegates('activeforeground', mbtn, menu)
add_delegates('activebackground', mbtn, menu)
add_delegates('font', mbtn, menu)
add_delegates('kanjifont', mbtn, menu)
mbtn.pack('side' => 'left')
end
def add_delegates(option, *wins)
unless @delegates
@delegates = {}
@delegates['DEFAULT'] = @frame
end
if @delegates[option].kind_of?(Array)
for i in wins
@delegates[option].push(i)
end
else
@delegates[option] = wins
end
end
def [](index)
return @menus[index]
end
def method_missing(msg, *args)
@frame.send(msg, *args)
end
end