サンプルと説明

サンプル中のスクリプトだけ見てみようという人はどうぞ。
基本的にはswin/vrubyの最新版に対応です。 また、コンソールに文字を表示する物もあるので、普通のコンソール版のrubyを利用して下さい。



基本(利用)

dw sample.rb / dw sample2.rb
アーカイブ添付のサンプル。デフォルトの窓のサイズで開きます。
dw Groupboxを左右に動かし、ウインドウサイズの変更をとらえる
dw チェックボックスの機能拡張
反転するたびに確認してくるめんどくさいコントロールです。 部品側で機能拡張可能ということです。
dw ツリービューとリストビューの例
エクスプローラっぽいものです。このサンプルスクリプトは引数を取って、トップとなるディレクトリを指定できます。デフォルトでは"c:/mydocu~1" (c:\My Documents)です。特に凝ったことはしていないのでc:\windowsなどのファイルの多いところを指定するとやたらと時間がかかります。また、ドライブのルートを指定するとスタックオーバーで死にました。
リストビューのアイテムをダブルクリックするとメッセージボックス出します。
一応、2ペインにしてます。
アイコンが出るようになりました(000909)
ruby-1.6.x以降ではMarshalのフォーマットが古いといってwarningが出ます

各種ウインドウのサンプル

dw コモンコントロールのサンプル
コモンコントロールのいろいろ。
dw メニューのサンプル
名の通り、メニューを出したりグレーにしたりテキストを変更したりします。
dw コモンダイアログのサンプル
メニュー[File]->[Open]からビットマップファイルを選ぶと表示できます。
dw VRBitmapPanelとVRCommonDialog利用のサンプル
VRBitmapPanelは見たまんまです。VRCommonDialogはVRFormにくっつけちゃったので、VRCommonDialogのテストのようには見えませんが、コモンダイアログが開きます。
dw マルチメディア再生例
つまるところMCIです。 当方の環境では、AVI,MPG,MOV,MID,MP3,WAVの再生を確認しています。 メディアプレーヤで再生出来るものならなんでもOKでしょう。
dw モーダルダイアログを開く
ダイアログを使うサンプルです。同じウインドウが4回出てきますが、それぞれが、クラス利用・モジュール利用それぞれのモーダルダイアログ,モードレスダイアログです。
4つの次に、テンプレート利用の例が続きます。
dw タブコントロールを使う
タブコントロールを使っています。厳密にはタブコントロールクラス(VRTabControl)から派生したVRTabbedPanelというクラスの利用例です。親フォームから見てタブ上のコントロールは、ひ孫に当たるため、いつものやり方だとイベントを拾うのが多少めんどくさくなっています(イベントハンドラの名前が長い)。この例ではタブ上のボタンの押下をフォームで捉える例を2つ挙げています。しかし、実際にはこのタブコントロールからさらにクラスを派生させてそっちで処理しちゃうのが常套でしょう。(親フォームには独自のイベント(もどき)で通知する)
dw RichEditコントロールを使う
リッチエディットを使って書式付きテキストを表示します。現状では書式を設定できても書式の取得はとても苦労します。なぜならRTFとして内容を取ることが出来ないからです。
dw ツールチップ利用例
画面上の各コントロールにtooltipを割り当てています。また、ちょっと背景色を赤っぽくしてあります。コントロールだけでなく、ウインドウ上の特定の領域にtooltipを割り当てることもできますので、青く塗られた四角の部分にもtoolを割り当てています。右上のボタンのtooltipはボタンが押された回数を表示します。
dw rebar利用例
Rebarの上にボタン、ツールバーなどを置いています。また、rebarとレイアウトフレームを併用して、rebarの高さ変更に応じて他のコントロールの配置変更を行っています。
Rebarって呼ばずにCoolbarって呼んだりもするみたいです。
dw スクロールバー
スクロールバー(コントロールとして使う場合)の利用例です。changedイベントが何故か2回飛んできますが...
dw ActiveXコントロール
インターネットエクスプローラのコンポーネントを使います。イベントもコンポーネントに対応するクラスも自動でvrubyに登録はされませんので、ProgIDによる手動での登録になります。ここでの手法は他のActiveXコントロールに対しても有効です。

イベント取得

dw フォームの上に貼ったPanelの上に、 さらに貼り付けたボタンのイベントに反応する例
レイアウトマネージャの例の最後のウインドウと同じですが、 一番上と左下のボタンを押すとメッセージボックスが出ます。
ちょっと新しくしました。パネルの上のボタンクリックをパネルの下の フォームで受けます。
dw キー入力を捉えるEditコントロール
Editコントロールに送られるWM_CHARを捉える例です。2byteコードは 1byteずつ飛んでくるようです。この例では化けます。 あとメッセージハンドラの付いたウインドウの列挙を行ってみました。 (デバッグ用途かなあ)
dw イベントの転送
PanelやGroupboxの上に載せたコントロールのイベントを、親そしてその親へと転送していくサンプルです。ボタンとエディットボックスを載せたPanelを定義し、それをFormに直に載せたもの、一旦別のPanelに載せてからFormに載せたものと、複数作ります。
Formからするとボタンは子、孫に当たるわけですが、これらをすべてForm側のメソッドでイベント受けします。
dw コントロール配列
コントロールの配列を作成する例です。VisualBasicと同じく、ハンドラの第1引数に配列要素番号が追加されます。
この例ではレイアウトマネージャと併用し、通常のコントロールやオリジナルのコントロール(Panel利用)を併用しています。
dw WM_CTLCOLORでコントロールの色を変える
鴫谷さんからVRCtlColorを頂いた際に一緒に送ってくださったものです。
VREditの文字色、背景色を替えます。この例ではフォーカスが当たっているかどうかでVREditの色を変化させています。

自動レイアウト

dw レイアウトマネージャを使ったウインドウを3つ出す
実行例はこれ
dw GridLayoutManagerのサンプル
タイトルのまんまですが、その他にもアイドルイベントを拾って タイトルに現在の時間を表示します。
dw 画面を2分割(分割線移動可能)にするもの
近頃のメールソフトは3ペインなどになっていますが、これは2ペインにするものです。3ペイン以上は組み合わせて実現できます。この例は横分割2ペイン。分割線の太さはかえられます。分割線って実は、単に地のウインドウが見えてるだけなのですが。
移動できる境界ではマウスカーソルが変化します。
dw レイアウトフレーム利用例
レイアウトフレームというのはレイアウトマネージャの親戚です。ウインドウのサイズ変更を捉えて自動的にコントロールを再配置したりはしませんが、ウインドウ内の特定の領域だけを利用してコントロールの配置領域と出来ます。レイアウトフレームをレイアウトフレームで再配置することもできます。
この例では、自力でウインドウのサイズ変更を捉えて最外殻のレイアウトフレームのサイズを変更しています。
dw ペーンフレーム利用例
レイアウトフレーム系の2pane実現クラスです。これは組み合わせて使うことにより、3-paneでも4-paneでもいくらでも作成できます。この例では3つ使って4-paneになっています。
また、自力でウインドウのリサイズにも対応しています。レイアウトフレーム系なので、自動的に再配置は行いません。

描画

dw GraphExplorer(笑)
画面が上下に2分割され、上がグラフを描画します。下は描画範囲を移動 するためのボタンです。レイアウトマネージャを使ったので画面が正しく 2分割されてしまっており、少々変な感じですがご容赦願います。
自分のサイズを元に描画するので、ウインドウサイズ変更に追従します。 描画が重いときには、138行目あたりの@graph1.xstepを大きくすると、 描画が荒くなって速くなります。
描画例はこれ
dw いわゆるメモリDCっぽいもの(キャンバスと命名)の例
適当に白い部分をクリックしていって下さい。線が描画されると思います。色と太さは変更できるようにしました。WM_PAINTが来たときに描画されたキャンバスを表示します。しかし、ちらつきますね。ちらつきの原因はウインドウクラス背景色が灰色のせいでしょう。
しかし懐かしい雰囲気(昔のBASICみたい)
dw フォントを選べる時計
フォントを選べる時計です。FileメニューからFontSetを選ぶとダイアログが 出てきます。まだ手抜きなのでデフォルトの値がセットされず、めんどくさい 状態ですが...
フォントを替えて見て下さい。密かに独自のWindowClassなどを作っておりますが、 まあ、そこは気にしないと言うことで。
dw オーナードローのボタン
オーナードローでボタンを作っています。とはいえ、普通のボタンと 違うのは、左上に色つきの四角があることと、フォーカスが当たってるときの 内枠が変なことくらいですけど。
dw プリンタ利用例
プリンタを使ってみます。
利用可能なプリンタの列挙、デフォルトのプリンタの取得、ページ設定などのダイアログもガンガン開きますので、なかなか厄介です。
実際の描画は、直径10cmの丸印を書き、直径を示して「diameter=100mm」と書くだけです。描画メソッドは今までの描画メソッドと同じです。

その他

dw Editの変化通知、Listboxにファイル設定、 Groupbox利用のサンプル
独立したサンプルにする理由があったのかどうか謎ですが、これ以上大きいと嫌だしなあ、ということで。
dw Interruptを捉える例
ボタンを押すと時間の掛かる処理をするのでCtrl-Cで止めようとして下さい。
dw ドラッグ&ドロップの例
エクスプローラなどからファイルをドロップすると、内容を表示します。例のテキストコントロールなのでWin9x系では64KB以上のファイルは開けないでしょう。複数のファイルをドロップすると、ウインドウも複数開きますが、Z-ORDERが変です(やってみるとわかります)。ドロップ動作の本質と関わりないので対処は略。
dw NetscapeNavigator Navigator(おおげさ)
DDEを使ってNetscapeNavigatorをコントロールします。
まずネットスケーブとこのサンプルを起動し、サンプル側の コンボボックスから適当にURLを選ぶと、ネットスケーブがそのURLへ移動します。
dw DDEサーバ(execute)と、DDEクライアントとexcelとの会話例
起動すると2つウインドウが出ます。左側にはボタンがあり、右は無地です。 無地の方がDDEサーバで、左側一番下の"test"ボタンを押すと、DDE_EXECUTEが 左のウインドウ側に送られます。サーバ側は送られた文字を表示するだけです。
上3つのボタンはExcelをサーバとして接続するクライアントの例です。 DDE_REQUEST/DDE_EXECUTE_DDE_POKEがそれぞれボタンに割り当てられてます。 Excelは引数無しで起動した状態にして置いて下さい。Book1のSheet1を対象に しています。
POKEはR1C1に"POKE"という文字を書き込みます。REQUESTはR1C1に入っているデータを読み出します。(ただしゴミも付いてきます)。EXECUTEはキーボードから"1243"と 打ったのと同様の動作をしますが、Excelにフォーカスが当たるまで動作は待機になります。
dw コントロールのフォントを変更する
ボタンのフォントを大きくしてみました。それだけですが、オーナードローでは ありません。
dw クリップボード監視(テキストだけ)
クリップボードを監視してテキストがクリップボードにセットされるとそれをListboxのテキストとして追加します。また、Listboxのアイテムを選択するとそのテキストをクリップボードにセットします。(つまるところ、履歴付きクリップボードユーティリティもどき)
エディタによっては独自のクリップボードの扱いがある場合があります。私が使ってるエディタがそうらしく、このエディタ自身にペーストする内容とnotepad.exeにペーストする内容が異なる場合があります。ご注意。(よくわからん...こちらのバグ?)
dw OLEドラッグドロップのテスト
swin/vrubyがOLE ドラッグドロップを試験的に組み込んだのを受けて、それの 利用のテストです。上側がドロップするところで、テキスト、ファイル、ネットスケープのブックマークなどをドロップできます。下の枠がドラッグできるところで、テキストまたはファイルをコピーします(デスクトップにドロップするとファイルがコピーされます)。現状、コピー/移動/リンクの切り替えは実装してないので全部コピーになります。ドラッグされるファイルはC:\Autoexec.batなので、NT系などのOSで、Autoexec.batが無い場合は適当に書き換えてください。
dw トレイアイコンの利用
タスクトレイのアイコンを操作します。起動するとボタンが4つあって、上から3つタスクアイコンの「追加」「削除」「アイコン変更」です。いくつでも(そりゃ上限はあるでしょうが)タスクトレイに追加できます。一番下のボタンが「タスクトレイにしまう」機能の例です。
各トレイアイコンを右クリックするとメニューが出ますが、一番最初に追加したものと、「タスクトレイにしまう」で作られたアイコン以外はダミーのメニューしか出ません。ちなみに、トレイアイコンのメニューから終了しないと、追加したトレイアイコンを削除することはしません。スクリプト終了後、これらは適当なタイミングでシステムが消してくれますが、トレイアイコンのメニューから終了することを推奨します。(要は手抜き)

その他、以下のようなものもあります(vrsamples.lzhには未収録)
dw ビットマップファイルをRubyスクリプトに変換
ruby bmp2rb.rb file1.bmp file2.bmp
などとすると、ビットマップファイルをrubyスクリプトに落としたものを標準出力に吐きます。デフォルトではLoadedBitmapsというモジュール内にビットマップが埋め込まれ、LoadedBitmaps["file1.bmp"]としてファイル名でアクセスするかLoadedBitmaps[2]などと整数で指定して取得します。複数のLoadedBitmapsをrequireしても大丈夫なはず。もちろんファイル名の上書きは駄目ですけど。
dw プロトタイピングな使い方
新規クラス/モジュールを一つも作らず既存のクラスのインスタンスに手を加えていくやり方でpeventtest.rb(フォームの上に貼ったPanelの上に...の例)を書き直してみました。そのまんまだと楽しくないのでメニューを追加してみたところ、メニュー回りでとても厄介な事をせねばならない事がわかりました。そのうちこれは変わるでしょうが、とりあえず現状はこんなもんと言うことで。

戻る
使い方へ進む
Email: nyasu@osk.3web.ne.jp