Top_Page

FormulaOneを使ってみる


1.スプレッドシートコンポーネント

古い話だが、Formula One ActiveXコントロールというExcel互換のスプレッドシートコンポーネント(現在はエクセルソフト株式会社の取り扱い)を使う機会があった。
ヘルプを見ると表示だけでなくファイルの入出力や印刷、ODBCの利用などいろいろな機能が用意されている。

しかし、実際に作業で使用したのはグリッド表示に関する部分だけで、その他のいろいろな機能は使用しなかった。

コントロールとしては、その時点で既にバージョンが進んでいて、作業で使ったのはかなり古いバージョン5だったが、ヘルプを見て試してみたい機能が結構あったので、様子見を兼ねて、ちょっと面白そうな部分のみ実行テストをしてみるべく、VB6でMDIフォームを使って適当に組み合わせて見る事にした。

基本的にコントロールの機能を使ってみるのが目的なので、用意されている機能を呼び出す事で実現できる範囲で簡単なアプリを作成してみた。

参考:以前の販売元のFAQページAG-TECH CORP.)

2.入れ物

まずは入れ物の用意。

Excel互換スプレッドシートコンポーネットなので、貼り付けるだけで簡単にExcelもどきの体裁ができそうな事は容易に想像できる。使用方法の確認以外でコードを書く事は予定していないので、コーディングは最小限にする予定とした。

ExcelもどきなのでMDI親フォームを作成。メニューエディタでメニューをExcelにならって適当に追加。
MDI親フォームメニューバー作成
簡単なツールバーも欲しいので、ToolBarコントロールとImageListコントロールを組み合わせてボタンのツールバーを作成。とりあえず新規作成と開く、保存、印刷、印刷プレビューくらいあればOK。
ツールバー追加
後で追加したが、セルに計算式が設定されていると、セル以外に式の表示を行う場所が必要になるので、ToolBarコントロールをもう一つ追加して、表示領域を適当に追加。
式表示領域追加

MDI親フォームとしては、最下部にステータスバーを追加して、とりあえず現在のキー状況などを表示。

VB6には、ロゴ画面とバージョン情報画面用のテンプレートも付いているので、簡単にフォーム追加し、文言だけ変更。
ロゴ画面は数秒で自動的に消えるように修正。
ロゴ画面 バージョン情報画面
まあ、適当に。

3.FormulaOneの操作

本体となるFormulaOneは、MDI子フォームに配置する。
MDI子フォーム追加

フォームのロード時とリサイズ時にFormulaOneのサイズを調整するようにコードを追加。
子フォームをアンロードする時には、Modifiedフラグをチェックし、保存問い合わせを表示する。
フォームがアクティベイトした時やセルチェンジした時は、カーソル位置の式をツールバーに表示する。
子フォームに記述する処理としては、これぐらい。

入力など基本的な操作は、このままでもできるが、マウス右クリックのコンテキストメニューが無い。そこでコンテキストメニューを別途作成する。

FormulaOneの右クリックイベントにコンテキストメニューの呼び出しコードを追加して出来上がり。
右クリックコンテキストメニュー追加
後は、FormulaOneを配置したMDI子フォームを雛形として、必要な数だけインスタンスを作ってあげればよし。
インスタンス生成

見かけは出来たので、後はヘルプを見ながら機能の呼び出しを記述する。

右クリックのコンテキストメニューから、基本的なカット、コピー、ペーストなどをアクティブな領域に対して実行するようにメソッド呼び出し。

セルの書式設定も設定用ダイアログを呼び出すだけ。(F1Book.FormatCellsDlg F1AllPages
セルの書式設定
セルの挿入/削除は、他のセルのシフト方向を指定するダイアログ付きの機能を用意してくれているので、それを呼び出す。
F1Book.InsertDlg/F1Book.DeleteDlg
セルの挿入 セルの削除

行単位、列単位の非表示/再表示は可能だが、シート単位の非表示/再表示機能はこのバージョンには無いようだ。

これで基本的な操作はできるようになった。
エラー処理はしていないとは言っても、殆どコーディングしていない。

MDI子フォームの編集機能は、殆どFormulaOneが備えているので、とりあえずそのまま使用する。

後は、MDI親フォームに基本的な処理を追加する。追加するとは言っても、基本的にFormulaOneの備えている機能を使うので、子フォームに対する処理を並べて行く。

ファイルを開いたり、保存したりするには、FormulaOneのダイアログ機能を呼び出し、その結果によってファイルアクセス機能を呼び出す。
F1Book.OpenFileDlg
ファイルを開く
F1Book.SaveFileDlgEx
名前を付けて保存
キャンセルするとコモンダイアログのキャンセルエラーと同じようにエラーが返ってくるので、F1ErrorCancel定数と比較してキャンセルかどうかを確認する。

検索や置換、ジャンプ動作も入力ダイアログ付きの機能が用意されているので、それぞれのメニューから呼び出せるように記述を追加。
F1Book.FindDlg
検索
F1Book.ReplaceDlg
置換
F1Book.GotoDlg
ジャンプ

印刷ダイアログと印刷プレビューもFormulaOneが備えているので、用意したメニューからアクティブなブックのダイアログを呼び出すように記述。
F1Book.FilePageSetupDlg
ページ設定

サンプル入力
F1Book.FilePrintPreview
印刷プレビュー
F1Book.FilePrint
印刷

さて、大分体裁が整ってきたので、機能があるのは知っていたが、使っていなかったオブジェクト関連の機能を使ってみる。
使ってみるといっても単に配置してみるだけだが。

メソッドで指定して配置してもイイが、マウスでの配置モードが用意されているので、モード切替で実装してみる。
それぞれの図形のモードにセットしてマウスを操作すると、選択した矩形内に図形が表示される。
オブジェクト配置例
ボタンやチェックボックスの配置も出来る。
但し、ボタンなどの処理は、別途書いてやらなければならない。
プロパティ画面などを作ってやって、動作を指定できるようにしてやれば、実際に使えるようになるだろうけれども、FormulaOneの機能としては用意されていないようだ。
オブジェクト配置例
グラフの描画もできるらしいが、それにはFirst Impression ActiveXコントロールというのが必要だそうな。この環境には入っていなかった。

きちんと実装してあげれば、開発環境のデザイナーであるFormula One Workbook Designerの機能くらいは使えるようにできるんだろう。

Formula One形式で保存すれば、書式やオブジェクトも保存されるので、単純に標準機能で開いてやれば、保存時の状態が再現される。
基本的な関数は備えているので、凝った使い方をしない簡易スプレッドシートとしてならすぐ使える物が作れるかもしれない。
集計機能など必要な機能を少しずつ実装していくのも面白いかも・・・。
もっとも、新しいバージョンはもっと進んでいるだろうし、個人が遊びで使うようなコントロールでもないので興味本位で触る機会はあまり無いかもしれないが。

ODBC関連のメソッドも用意されているので、コードを書けば連結コントロールとして動作させる事もできる。(らしい。実際にはやってみなかった)

ウインドウに関しては、開く操作をする場合には、子フォームのインスタンスを生成し、最大化や最小化、非表示、整列は、VBの機能を呼び出すだけ。
まあ、この辺はFormulaOneの機能ではないので、簡単に標準機能で実装。
再表示機能は、表示の対象を選択式にするのは面倒なので、全てを表示するように簡易実装。
終了する場合は、一応子フォームを全て閉じてから終了するようにフォームをチェック。

ウィンドウ配置

ウィンドウ整列

って所で、サンプル完成。(メニューの機能は埋まってないけど・・・)


Top_Page
(C) Copyright 2000-2010 KaZuDo