2010年12月30日木曜日

Ruby/Tkで進数変換2

 前回「進数変換」で半月以上試行錯誤と書きましたが、その大部分の時間を費やしたのが実は今回のコードです。このコードのパターンを諦めて、違う方法で割と早くできたのが前のコードだったのです。不思議なもので、ひとつ事が片付くと何か頭の中がすっきりして、さんざん苦労していた今回のコードですが、再び取り組んでから3日ぐらいで思っていた通りになりました。
 ボタンひとつで、各進数の変換結果を表示します。

#!/usr/bin/env ruby

require 'tk'

root = TkRoot.new
root.title = "進数変換"
root.bg '#FFFFFF'

TkLabel.new {
nil
text "数字を入力してください。"
font TkFont.new(['times', 14, ['bold']])
bg '#EEEEFF'
relief 'ridge'
pack
}

f = TkFrame.new.pack

e = TkEntry.new( f,
:font=>"Times 14",
:width=>"16",
:bg=>'#FFFFBF'
).pack('side'=>'right')

e.focus

el = TkLabel.new(f, 'text'=>'10進数: ',:font=>"メイリオ 10",:bg=>'#FFFFFF').pack('side'=>'left')

l = TkLabel.new {
bg '#FFFFFF'
pack
}
TkButton.new(nil,
:font=>"メイリオ 10",
'text'=>'クリア',
:foreground=>"white",
:bg=>'#000000',
'command'=>proc{e.value=""}
).pack('side'=>'right')

SINSU = (e.value).to_i

myFont = TkFont.new("family" => 'メイリオ', # Helvetica
"size" => 12,
"weight" => 'normal')

TkButton.new(nil,
:font=>"メイリオ 10",
'text'=>'変換',
'bd'=>6,
:foreground=>"yellow",
:bg=>'#0000FF',
'command'=>proc{l.
text("2進数 = #{((e.value).to_i).to_s(2)}\n8進数 = #{((e.value).to_i).to_s(8)}\n16進数 = #{((e.value).to_i).to_s(16)}").font myFont
}).pack('side'=>'left')

Tk.mainloop

最後に、Ruby/Tkについて非常によく分かったのが次のサイトです。
 http://www.mnet.ne.jp/~tnomura/rubytk.html「やってみようRuby/Tk」
ありがとうございました。

2010年12月14日火曜日

Ruby/Tkで進数変換

 Rubyを使ってコンソール上で10進数を2進数などに変換する方法を参考に、Ruby/Tkのウィジットを使ってGUIでやってみました。Ruby/Tkで進数変換しているサンプルがあればと思い、探しましたが見つかりません。
そこで、 「①Entryウィジットの入力値を取り出し、②その値をLabelウィジットに表示する」 というようなサンプルはよくあるので、①と②のあいだに例えば 「to_s(2)を使って2進数変換」 してから 「Labelウィジットに表示する」 というようにすれば、割と早くできる感じでした。
 しかし、そこから半月以上試行錯誤でたどり着いたのが次のスクリプトです。
'Return' を一度押すだけで各進数を一発表示できるようにしたかったのですが、うまくいきません。結局、各進数に対して異なったキーを割り当てることにしました。

require 'tk'
txt = TkText.new.pack

TkLabel.new(txt) { text '※数字を入力して各キーを押します。'; width 30; anchor 'w'; font 'メイリオ 14'; bg '#FFEFBF'; place 'x'=>10, 'y'=>20 }
TkLabel.new(txt) { text '10進数:'; width 9; anchor 'w'; font 'メイリオ 14'; bg '#FFFFFF'; place 'x'=>10, 'y'=>60 }
TkLabel.new(txt) { text ' 2進数:F7'; width 9; anchor 'w'; font 'メイリオ 14'; bg '#2BFFCA'; place 'x'=>10, 'y'=>100 }
TkLabel.new(txt) { text ' 8進数:F8'; width 9; anchor 'w'; font 'メイリオ 14'; bg '#FFFF95'; place 'x'=>10, 'y'=>140 }
TkLabel.new(txt) { text '16進数:F9'; width 9; anchor 'w'; font 'メイリオ 14'; bg '#55D9FF'; place 'x'=>10, 'y'=>180 }

a = TkEntry.new(txt) { width 19; font 'メイリオ 14'; place 'x'=>136, 'y'=>60 }
c = TkLabel.new(txt) { width 20; anchor 'w'; font 'メイリオ 14'; bg '#2BFFCA'; place 'x'=>140, 'y'=>100 }
d = TkLabel.new(txt) { width 20; anchor 'w'; font 'メイリオ 14'; bg '#FFFF95'; place 'x'=>140, 'y'=>140 }
e = TkLabel.new(txt) { width 20; anchor 'w'; font 'メイリオ 14'; bg '#55D9FF'; place 'x'=>140, 'y'=>180 }

a.focus
a.bind 'F7', proc { c.text( ((a.value).to_i).to_s(2) ) }
a.bind 'F8', proc { d.text( ((a.value).to_i).to_s(8) ) }
a.bind 'F9', proc { e.text( ((a.value).to_i).to_s(16) ) }
Tk.mainloop

2010年11月24日水曜日

rubygems-1.3.7,setup.rb

Windows VistaでRuby1.8.7にrubygems-1.3.7をセットアップするため、このフォルダの中にあるsetup.rbを使ってコマンドプロンプトから実行した。
  C:\rubygems-1.3.7>ruby setup.rb

そして、gemのバージョンを確かめる。
  C:\ruby>gem -v

すると、次のエラーが出た。
  

エラー画面を閉じると、さらにコマンドプロンプトにメッセージが・・・
  「アクセスが拒否されました。」

C:\ruby\ruby.exeのプロパティをみると、なんとサイズが 0バイトになっている。

   

C:\ruby\binにruby.exe(20KB)があり、C:\rubyの方のruby.exeを削除してみたら・・・
   
   エラーは無くなり、gemのバージョンが表示されました。
なぜ、C:\ruby\ruby.exe(0バイト)があったのか不明です。

なお、Ruby1.9.2にはrubygems-1.3.7が含まれていて、セットアップの必要はない。

2010年11月5日金曜日

XPSViewer

XPSViewer.exeクリックしても反応なし
C:\Windows\System32\XPSViewer
 → ファイルをIE8にD&Dすると拡張子xpsファイルが開いた。
 → 既定のブラウザをFfになっているのをIEにするとxpsファイルをクリックすれば開く。
 → ただ、System32\XPSViewerをクリックしても反応がないのは同じ。
 → Ffの「ファイル」「印刷」から利用でき、画面に隠れているページの最後まで保存できて便利。

2010年10月28日木曜日

KanaBoard

KanaBoardが表示されない。
 スプラッシュスクリーンやタスクバーの通知領域にアイコンは表示されているのに本体が出てこない。 しばらく使ってなかったけど、どうしてなんだろう? ソフトウェアキーボードとしては使い方が少し変わっていて、慣れるまで少し時間がかかったのを覚えている。クィック起動にまで登録しているのに?

 → ダウンロードしたフォルダにあるReadmeでもなければ正式なヘルプでもない(作者)「セットアップは不要です.txt」で原因がわかりました。
テキスト入力したい場所でマウスの左ボタンを3秒間押し続けることでKanaBoardを開くことができました。文字入力の方式がウィンドウズ付属のスクリーンキーボードなんかとずいぶん違っている事ばかり印象に残っていて、開く方法も普通にクリックしただけではダメなんだということをすっかり忘れていた。