Visual Basic 5.0
で拡張されたコントロールとオブジェクトの紹介著/長谷川 勝規 HASEGAWA, Katsunori
有限会社ガリバー http://www.galliver.co.jp/
Microsoft Visual Basic(以下、Visual Basic) 5.0では、コントロールやオブジェクトの機能もかなり拡張されているようです。 必然的に、プロパティ、メソッド、イベントも増えています。
Visual Basic 5.0のBooks Onlineにある「What's New in Visual Basic 5.0?」-「What's New in Controls?」-「New Features of Controls」 には、コントロールの新しい機能として、「OLEドラッグ&ドロップのサポート」「すべてのコントロールにToolTipの機能」 「配置したコントロールのサイズ調整と整列」という3つのトピックスが紹介されてます。
この他にも、インターネットやイントラネットへの対応、データーベースやAdd-inなど、拡張された機能は幅広く、しかも膨大で あるという印象を受けています。
いま思えば、Visual Basic 4.0が登場したときに受けた衝撃は、いったい何だったのでしょうか? Visual Basic 5.0では、その衝 撃が何倍にも膨れあがって、さらに大きな衝撃を与えられたわけです。
さて、このようにVisual Basic 5.0に盛り込まれた機能の拡張は、相当量に及びます。 たとえコントロールとオブジェクトの話題に限ったとしても、とてもすべてを紹介しきれるものではありません。
そこで、今回は、標準コントロールで拡張された機能、新しいActiveXコントロールの概要、オブジェクトで拡張された機能にしぼって、少し紹介します。
OLEドラッグ&ドロップ
OLEドラッグ&ドロップの機能により、Visual Basicで開発するアプリケーションと、他のWindowsアプリケーションとの間で、 テキストやグラフィックスをOLEドラッグ&ドロップすることができるようになりました。
標準コントロール
たとえば、テキストボックス・コントロール内で強調表示したテキストを、Microsoft Wordで編集中の文章へOLEドラッグ&ドロップしたり、 その逆に、Microsoft Wordで編集中の文章から、テキストボックス・コントロール内へOLEドラッグ&ドロップすることができるようになるわけです。
もちろん、テキストボックス・コントロール内で、OLEドラッグ&ドロップすることもできます。しかも、この機能を実現するには、OLEDragModeプロパティとOLEDropModeプロパティを自動に設定するだけで済むということは、とても感動的です。
開発者は、OLEドラッグ&ドロップのイベントに返答するためのコードを、何も書く必要はありません。
ただし、この機能を備えるコントロールは限られています。コントロールによって、OLEドラッグとOLEドロップのいずれの操作も自動に設定できるもの、 OLEドラッグの操作を自動に設定できるもの、OLEドロップの操作を手動に設定できるものに分かれています。
それぞれのコントロールが、どのOLEドラッグ&ドロップの機能を備えるかは、別表を参考にしてください(表1)。[表1]OLEドラッグ&ドロップ機能によるコントロールの分類
OLEドラッグとOLEドロップのいずれの操作も自動に設定できるコントロール OLEドラッグの操作を自動に設定できるコントロール OLEドロップの操作を手動に設定できるコントロール ピクチャーボックス・コントロール コンボボックス・コントロール ラベル・コントロール テキストボックス・コントロール リストボックス・コントロール フレーム・コントロール イメージ・コントロール ディレクトリリストボックス・コントロール コマンドボタン・コントロール リッチテキスト・コントロール ファイルリストボックス・コントロール チェックボックス・コントロール マスクエディット・コントロール DBリストボックス・コントロール オプションボタン・コントロール DBコンボボックス・コントロール ドライブリストボックス・コントロール ツリービュー・コントロール データ・コントロール リストビュー・コントロール ここで、OLEドラッグ&ドロップの操作によって発生するイベントと、そのときに使われるオブジェクトについて、簡単に説明しておきます。 OLEドラッグ&ドロップの操作が行われると、コンポーネントソース側、あるいはコンポーネントターゲット側で、特定のイベントが発生します(図1、表2)。
図1:OLEドラッグ&ドロップの概念図 ![]()
コンポーネントソース側では、OLEDragModeプロパティの設定が自動、手動にかかわらず、OLEStartDragイベント、OLESetDataイベント、 OLEGiveFeedbackイベント、OLECompleteDragイベントが発生します。
ただし、OLEDragModeプロパティの設定が手動のときには、OLEDragメソッドを呼び出さなければならないことは言うまでもありません。
コンポーネントターゲット側では、OLEDropModeが手動のときにしか、OLEDragOverイベント、OLEDragDropイベントは発生しません。 OLEドラッグ&ドロップの操作で使われるオブジェクトは、DataObujectオブジェクトです。このオブジェクトは、コンポーネントソースから コンポーネントターゲットに転送されるデータのコンテナです。データは、DataObjectオブジェクトを使うメソッドによって指定された形式で格納されます。
DataObujectオブジェクトには、DataObjectFilesコレクション、Clearメソッド、GetDataメソッド、GetFormatメソッド、SetDataメソッドがあります(表3)。
[表2]OLEドラッグ&ドロップとして追加された機能
(名前) (種類) (説明) OLEDragMode プロパティ OLEドラッグ&ドロップ操作の処理をコンポーネントが行うか、またはプログラマが行うかの方法を取得、または設定するために使います。 OLEDropMode プロパティ ターゲットコンポーネントがドロップ操作を処理する方法を取得、または設定するために使います。 OLECompleteDrag イベント ソースコンポーネントが、ターゲットコンポーネントにドロップされたときに発生します。ドラッグ操作の実行、または取り消しをソースコンポーネントに通知します。 OLEDragDrop イベント ソースコンポーネントをターゲットコンポーネントにドロップして、ソースコンポーネントでドロップ可能と判断されたときに発生します。 OLEDragOver イベント コンポーネントがほかのコンポーネント上にドラッグされたときに発生します。 OLEGiveFeedback イベント OLEDragOverイベントの後に発生します。OLEGiveFeedbackイベントによって、ソースコンポーネントではユーザーに視覚的なフィードバックを行うことができます。 たとえば、ユーザーがオブジェクトをドロップしたときにマウスカーソルを変更して次の処理を伝えたり、ソースコンポーネントで選択されたオブジェクトを視覚的に変更して、次の処理を伝えることができます。 OLESetData イベント ターゲットコンポーネントがソースのDataObjectオブジェクトにGetDataメソッドを実行したが、指定した形式のデータがまだ ロードされていないときに、ソースコンポーネントで発生します。 OLEStartDrag イベント コンポーネントのOLEDragメソッドが実行されたときに発生します。また、OLEDragModeプロパティが自動に設定されているときに、コンポーネントがOLEドラッグ&ドラッグ 操作を開始したときにも発生します。 [表3]DataObujectオブジェクトとして追加された機能
(名前) (種類) (説明) DataObjectFiles コレクション DataObjectオブジェクトによって使用されるすべてのファイル名(Windowsのエクスプローラでドラッグ操作するファイルの名前など)の一覧を表すコレクションです。 Clear メソッド DataObjectオブジェクトの内容を削除します。 GetData メソッド DataObjectオブジェクトから、指定した形式のデータを取り出します。 GetFormat メソッド 指定した形式と一致するアイテムが、DataObjectオブジェクトにあるかどうかを示す値(Boolean型)を返します。 SetData メソッド DataObjectオブジェクトへ、指定した形式のデータを追加します。 標準コントロールの構成は、従来と変わりありません(図2)。
ActiveXコントロール
しかし、一部のコントロールでは、機能が拡張されています。以下に、主だったところを紹介しておきます。また、拡張された機能を実際に試すために書き下したサンプル・プログラムの中から、標準コントロールを使った簡単なサンプル・プログラムも、記事末に少し紹介しておきます。
図2:標準コントロールのツールボックスの画面例 ![]()
ピクチャーボックス・コントロール、
イメージ・コントロールピクチャーボックス・コントロールとイメージ・コントロールでは、新しい画像形式(GIF形式、JPEG形式)がサポートされました。ただし、SavePictureステートメントでは、新しい画像形式のファイルを保存することはできません。読み込んだ元の画像形式が、GIF形式、またはJPEG形式のときは、ビットマップ・ファイルとして保存されます。
コマンドボタン・コントロール、
チェックボックス・コントロール、
オプションボタン・コントロールコマンドボタン・コントロール、チェックボックス・コントロール、オプションボタン・コントロールは、アイコンやビットマップを貼り付けて、視覚的に拡張できるようになりました。押されていないときに表示するグラフィックスはPictureプロパティで、押されているときに表示するグラフィックスはDownPictureプロパティで、操作不可のときに表示するグラフィックスはDisabledPictureプロパティで、それぞれ設定します。また、マスクを作成するのに使用する色を設定するために、MaskColorプロパティ、UseMaskColorプロパティも備えられています。
テキストボックス・コントロール、
図3:テキストボックス・コントロールで文字化けした画面例 ![]()
コンボボックス・コントロールテキストボックス・コントロール内のテキストを編集できないように設定できるようになりました。編集できないように設定すると、コントロール内のテキストをスクロールしたり、強調表示したりすることはできますが、テキストを変更することはできなくなります。ただし、プログラムからTextプロパティを設定して、テキストを修正することは可能です。なお、テキストボックス・コントロールに水平スクロールバーを付けて、水平にゆっくりスクロールさせたときに、特定のテキスト表示が文字化する問題は、解消されていないようです(図3)。
訂正
Visual Basic 5.0では、コンボボックス・コントロールのテキストボックスを編集できないように設定する機能が新たに追加されましたが、テキストボックス・コントロールを編集できないように設定する機能は、Visual Basic 4.0にも備わっています。
リストボックス・コントロール
リストボックス・コントロールに表示する項目の左隅に、チェックボックスが付けれるようになりました。いずれかの項目のチェックボックスがオン、またはオフになったときには、Clickイベントの前にItemCheckイベントが発生します。チェックボックスが付けられたリストボックス・コントロール(Styleプロパティ=1)では、Selectedプロパティは、チェックボックスがオンに設定されている項目に限って、真(True)になります。強調表示されているだけの項目については、Selectedプロパティは真になりません。また、スクロールバーがスクロールされたときに発生するScrollイベントも追加されています。なお、Scrollイベントは、スクロールバーを備えるコンボボックス・コントロール、ドライブリストボックス・コントロール、ディレクトリリストボックス・コントロール、ファイルリストボックス・コントロールでも、同じように追加されています。
ActiveXコントロールの構成は、大きく変わっています。従来からあったコントロール以外にも、インターネットやイントラネット、データベースなどの機能を備えるコントロールなどが追加されてます(図4)。ActiveXコントロールについては、簡単な説明を、別表にまとめてみました(表4)。
オブジェクト
図4:ActiveXコントロールのツールボックスの画面例
![]()
[表4]ActiveXコントロールの一覧表
(名前) (バージョン) (説明) Crystal Reports OLE Control Version 4.6 Crystal Reports for Visual Basic Version 4.6で作成された帳票を印刷するコントロールです。 DBGrid Version 5.0 Recordsetオブジェクトのレコードとフィールドを表す、一連の行と列のデータに対する操作と表示を行うことができるコントロールです。 Animation ActiveX Control Version 5.0 サウンドデータを含まないAVIファイルのアニメーションを表示するコントロールです。 UpDown ActiveX Control Version 5.0 対になった2つの矢印ボタンが入ったコントロールで、関連付けられているコントロールの値を増減させることができます。Visual Basic 4.0のスピンボタン・コントロールの代替です。 DBList ActiveX Control Version 5.0 連結しているデータコントロールのフィールドから、自動的にデータが設定されるリストボックス・コントロールです。 DBCombo ActiveX Control Version 5.0 連結しているデータコントロールのフィールドから、自動的にデータが設定されるコンボボックス・コントロールです。 Tab Strip ActiveX Control Version 5.0 システム手帳の仕切りシートや書類ホルダーのラベルによく似た形のコントロールです。 Toolbar ActiveX Control Version 5.0 アプリケーションに関連付けられたツールバーを作成するコントロールです。 Status Bar ActiveX Control Version 5.0 通常、親フォームの下端に表示されるウィンドウで、アプリケーションの各種ステータス情報の表示に使われるコントロールです。 Progress Bar ActiveX Control Version 5.0 時間のかかる処理の進行状況を表示するコントロールです。長方形の中を進行状況に応じて、左から右へブロック単位で塗りつぶして行きます。 Tree View ActiveX Control Version 5.0 Nodeオブジェクトの階層リストを表示するコントロールです。文書の見出し、索引の項目、ディスク上のファイルやディレクトリなど、階層表示すると便利なさまざまな情報の表示に使われるコントロールです。 List View ActiveX Control Version 5.0 大きいアイコンで表示、小さいアイコンで表示、一覧表示、詳細表示のうち1つの形式を使って、項目を表示できるコントロールです。 Image List ActiveX Control Version 5.0 単独で使用するものではなく、他のコントロールにイメージを簡単に提供するコントロールです。 Slider ActiveX Control Version 5.0 つまみ、およびオプションの目盛りから構成されるコントロールです。つまみは、ドラッグしたり、つまみのいずれかの側をマウスでクリックしたり、またはキーボードを使用して移動することができます。 MapiSession Control Version 5.0 MAPIセッションにサインインして、セッションを確立するコントロールです。 MapiMessages Control Version 5.0 MAPIセッション・コントロールによってメッセージセッションが確立された後で、メッセージシステムのさまざまな機能を実行できるコントロールです。 Microsoft Winsock ActiveX Control Version 5.0 TCPネットワークサービス、およびUDPネットワークサービスへアクセスするコントロールです。 Picture Clip ActiveX Control Version 5.0 ソースビットマップから必要な領域を選択して、その領域に含まれるピクチャをフォーム、またはピクチャボックス・コントロールに表示するコントロールです。 Microsoft Chart Control Version 5.0 扇形グラフ、棒グラフ、折れ線グラフなどを作成するコントロールです。 RichText Control Version 5.0 テキストを入力して、編集するためのコントロールです。コントロール内のテキストの任意の部分を書式設定するための数多くのプロパティが用意されています。 Microsoft RemoteData Control Version 2.0 リモートのODBCデータソースに保存されたデータにアクセスするコントロールです。 Microsoft Internet Transfer Control Version 5.0 インターネット上で広く使用されているハイパーテキスト転送プロトコル(HTTP)、およびファイル転送プロトコル(FTP)の2つの機能を提供するコントロールです。 Microsoft FlexGrid Control Version 5.0 VideoSoft社のFlexGridコントロールのサブセット・コントロールです。 MSComm32 ActiveX Control Version 5.0 シリアルポートを通じて通信を行う機能を提供するコントロールです。 Sysinfo ActiveX Control Version 5.0 Windowsオペレーティングシステムの各種のパラメータをモニターし、状態の変化をアプリケーションに通知するコントロールです。 Microsoft Tab ActiveX Control Version 5.0 システム手帳の仕切りシートや書類ホルダーのラベルによく似た形のコントロールです。 Microsoft Multimedia ActiveX Control Version 5.0 メディアコントロールインターフェイス(MCI)デバイスでのマルチメディアファイルの再生、録音や録画などを行うコントロールです。 Microsoft Masked Edit ActiveX Control Version 5.0 標準のテキストボックスコントロールに、マスクによる入力と指定された表示形式による出力の拡張機能をオプションとして追加したコントロールです。 Common Dialog Custom ActiveX Control Version 5.0 ファイルを開く、ファイルを保存する、印刷オプションを設定する、色を選択する、フォントを指定するなどダイアログボックスを利用する機能を提供するコントロールです。 インターネットやイントラネット、データーベースやAdd-inなどの新しい機能が追加されていますので、それに関連するオブジェクトもたくさん追加されています。
デザイン環境
これらは、ここで紹介しきれるような量ではありませんので、Visual Basic 5.0のBooks Onlineなどのドキュメントを参照していただきたいと思います。
ここでは、新しくなったオブジェクトブラウザと、Appオブジェクト、ならびに、Fromオブジェクトに追加された機能を紹介しておきます。
オブジェクトブラウザ
図5:オブジェクトブラウザの画面例 ![]()
オブジェクトブラウザは、オブジェクトの項目が検索できるようになり、使い勝手がたいへん良くなりました。 右クリックで表示されるメニューで「非表示メンバーの表示」をチェックしておくと、ObjPtr、StrPir、VarPtrなどの非表示メンバーもヒットできてしまいます(図5)。
また、表示されている項目は、アイコンによって種類を区別できますし、項目を選択すると簡単な説明も表示されます。 さらに詳しい説明が見たいときには、関連するヘルプのトピックスを呼び出すこともできます。
Appオブジェクト
Appオブジェクトには、アプリケーションについての一般的な情報が含まれています。 イベントのログを記録する機能や、フォームを表示できる状態、スレッドIDに関するプロパティやメソッドが追加されています(表5)。[表5]Appオブジェクトへ追加された機能
(名前) (種類) (説明) LogEvent メソッド>/TD> アプリケーションのログターゲットでのイベントを記録します。Microsoft Windows NTではNT Eventログに、Microsoft Windows 95ではLogPathプロパティで指定されたファイルに、それぞれイベントのログを記録します。 StartLogging メソッド>/TD> 操作のログターゲット、およびログモードを設定するために使います。 LogMode プロパティ>/TD> ログの記録方法を表す値の取得、または設定を行うために使います。ログの記録は、LogEventメソッドにより行われます。 LogPath プロパティ>/TD> LogEventメソッドの出力を記録するファイルのパス、およびファイル名を設定するために使います。 NonModalAllowed プロパティ>/TD> フォームをモードレス表示にできるかどうかを表す値を取得するために使います。 ThreadID プロパティ>/TD> 実行中のスレッドのIDを取得するために使います。スレッドのIDは、Win32 APIの呼び出しで使います。 UnattendedApp プロパティ>/TD> ユーザーとのやり取りを行わずに実行されるアプリケーションであるかどうかを表す値を取得、または設定するために使います。 Fromオブジェクト
アプリケーションのユーザーインターフェースの一部となるウィンドウやダイアログボックスです。フォームを表示する状態に関するプロパティが追加されています(表6)。この機能によって、これまではフォームを中央に表示させるために必要だったプログラミングは不要になり、プロパティを設定するだけで実現できるようになりました。また、Windowsの既定値にしたがって、フォームを表示できるようにもなりました。なお、OLEドラッグ&ドロップの機能も追加されています。ただし、ラベル・コントロールなどと同じように、OLEドロップの操作を手動に設定できるだけです。[表6]Fromオブジェクトへ追加された機能
* OLEドラッグ&ドロップとして追加された機能は、[表2]を参照してください。
(名前) (種類) (説明) Moveable プロパティ>/TD> オブジェクトが移動可能であるかどうかを表す値を取得、または設定するために使います。 Palette プロパティ>/TD> コントロールで使うパレットが保存されたイメージファイルを取得、または設定するために使います。 PaletteMode プロパティ>/TD> 配置されたコントロールで使うパレットを指定する値を取得、または設定するために使います。 RightToLeft プロパティ>/TD> 双方向のテキスト表示、ならびに入力をサポートするシステムで、テキストの表示方向またはコントロールの表示を決定します。 StartUpPosition プロパティ>/TD> フォームが最初に表示される位置を指定する値を取得、または設定するために使います。手動、オーナーフォームの中央、画面の中央、Windowsの既定値から、いずれかを選べます。
* MDIFromオブジェクトでは、Moveableプロパティ、RightToLeftプロパティ、StartUpPositionプロパティが追加されています。
デザイン環境では、コントロールを左右や中央、あるいは上下に整列したり、コントロールの幅や高さを同じサイズに揃えたり、コントロールの左右や上下の間隔を調整する[書式]メニューが追加されています(図6)。このようにプロトタイピングを効率よく行える機能は、RADツールとしては望まれていたところですが、ようやく標準的に備えられたことになります。
おわりに
図6:デザイン環境の[書式]メニューの画面例 ![]()
今回の執筆には、Visual Basic 5.0の日本語版ベータを、Windows NT 4.0(SP2)へセットアップして使いました。製品版ではなくベータだからかもしれませんが、Visual Basic 5.0のBooks Onlineは、あまり良い出来だとは言えません。ところどころに、記述の間違いも見受けられます。また、英文のままのトピックスもいたるところにありますし、不整合で飛べないハイパーリンクもあります。このあたりが、製品版では改善されていることを切望します。 なお、私自身が、Visual Basic 5.0の新しい機能を洗いきれていないこともあり、ここで紹介した内容には誤りがあるかもしれません。もし誤りがあれば、後日に訂正させていただくということで、ご了承いただきたいと思います。皆さんがVisual Basic 5.0を手にされたときに、この記事が少しでもお役に立てば、幸いに思います。この記事につきまして、ご意見がありましたら、mado@galliver.co.jpまで、電子メイルでお送りください。
標準コントロールの新しい機能を使うサンプル・プログラム標準コントロールの新しい機能を使った簡単なサンプル・プログラムを、いくつか紹介しておきます。
(本記事中に掲載したサンプル・プログラムは、ここからダウンロードできます。)
VB Magazine ライブラリ | Visual Basicコースホームページ
int21 ホームページ | PCDN ホームページ
![]()