いかちソフトウェア

VB6テクニック集

トップ> テクニック

Visual Basic 6.0について

1990年代に一世を風靡したVisual Basic 6.0(以下、VB6)は、オブジェクト指向言語「Java」の登場によって人気にかげりが見え始め、さらにオブジェクト指向向けに改めて開発されたVisual Basic .NET(以下、VB.NET)の登場により、完全に過去の遺物と化しました。
1990年代といえば、さまざまな業界がバブル後の不況に喘いでいてもIT業界だけは景気がよかった時代です。
この時代、多くの人材がIT業界へと流れ込みました。
ITバブルともいわれ、多種多様のソフトウェアがVB6で開発された時期でもあります。
そのため、10年以上経った今でもVB6で作成した遺産の保守が残り続けており、今でもVB6ユーザーの必要性が完全に消えたわけではありません。
いかちソフトウェアが開発したソフトウェアも、VB6によって開発したものが多くあります。
VB6は今後ますます廃れ行く言語ではあるのですが、いかちソフトウェアでは不要となったソフトウェアのうちVB6で開発したプログラムに関しては、廃棄するまえに今一度、あらためてVB6での開発テクニックをこのページで公開していきたいと思います。

コンポーネントをレジストリに登録する方法について

.NETユーザーにはなじみがないかもしれませんが、VB6で使用するOCXやDLLといったコンポーネント(いわゆるCOMコンポーネント)は使用するコンピューターのレジストリに登録されていなければ参照することができません。
しかも、COMコンポーネントはインターフェイスが変わってしまうと、コンポーネントが内部で保持しているバージョン情報が変わってしまうため、それまでのコンポーネントとは名前が同じでも別コンポーネントとして取り扱われてしまうのです。
そのため、コンポーネントの修正によってそれまで動いていたソフトウェアが動かなくなってしまうということもありました。
これを防ぐために、コンポーネントのインターフェイスを変えるときはいっそのこと別ファイルとして作成し、修正前と似たような機能を持つ別の名前のコンポーネントを作成し、ユーザーに配布する方法がとられていました。
この方法によって、ユーザーの環境には似たような機能を持つ複数のコンポーネントがバージョンアップのたびに配布されたのです。
この現象は、DLLヘル(DLL地獄)と呼ばれています。
前述のとおり、これらのコンポーネントはファイルを配布するだけでは参照することができず、コンポーネントをレジストリに登録する必要があります。
コンポーネントをレジストリに登録するには、Windowsのコマンドプロンプトよりregsvr32(system32フォルダに存在するアプリ)コマンドを実行します。
ただし、登録したいコンポーネントが複数存在する場合、その都度regsvr32コマンドを実行するのは少々手間がかかります。
そこでいかちソフトウェアでは、コンポーネントをレジストリに登録する作業を複数まとめて実行できるためのツールを開発しました。
現在では、.NETの普及によってコンポーネントをレジストリに登録するといった作業をすること自体、ほとんどなくなってきており、当初はVectorに登録していたレジストリ登録ツールも、年々ダウンロード数が減少していく一方であったため、すでにVectorからは公開を停止しています。
いかちソフトウェアが開発したレジストリ登録ツールは、レジストリに登録したいコンポーネントを複数まとめてツールにドラッグ&ドロップすることで、それらをまとめてレジストリに登録します。
プログラム内部でやっていることといえば、ドラッグ&ドロップされたコンポーネント1つ1つに対し、regsvr32コマンドを実行するだけです。
仕組み自体はとても単純ですが、コマンドプロンプトより手動で実行するよりははるかに作業が楽です。
ソースコードは、下のリンクよりダウンロードすることができます。

レジストリ登録のダウンロードページ

繰り返し明細の入力サンプル

VB6には、DataGridコンポーネントを参照設定することで、データベースの内容をグリッドに表示するための機能を利用することができます。
また、任意のコントロールに複数のレコードを繰り返して表示したい場合は、Data Repeaterコンポーネントを利用します。
しかし、これらのコンポーネントはデータベースに接続して使用することが前提のコンポーネントのため、データベースを利用しないアプリケーションに関しては使用することができません。
データベースを利用せずに繰り返し明細のコントロールを実装するのは多少コツがいります。
それほど難しいことではないのですが、内部的に保持している明細行のカウンタやスクロールバーとの関連、入力された内容の保持と表示など、これらを実装するにはサンプルがあった方が何かと便利です。
いかちソフトウェアでは、データベースを利用せずに繰り返し明細の入力を実装したサンプルコードを開発しましたので、興味があればダウンロードしてソースコードをご覧ください。

繰り返し明細の入力サンプル(ソースコード含む)

スクリーンキーボードのサンプル

VB6のCommandButtonは、クリックするとフォーカスを必ず取得します。
.NETの場合、フォーカスを取得しないフォームを作成することができるので、スクリーンキーボードの作成は容易ですが、VB6の場合はそうはいきません。
VB6の場合、フォーカスの移動に伴うイベントドリブンが複雑化し、スクリーンキーボードの作成は容易ではありません。
そこで考えたのが、CommandButtonのようにフォーカスを取得するコントロールではなく、フォーカスを取得しないコントロールでCommandButtonを代用する方法です。
このサンプルでは、Labelをボタン替わりに使用しています。

スクリーンキーボードのサンプル(ソースコード含む)

指定したウィンドウを最前面にするサンプル

必要に迫られて、作成したツールです。
最大化したWindowと、別のWindowを比較しながら作業しなくてはならない状況が発生したため、比較対象のWindowが最大化したWindowの背面にまわってしまわないために、開発しました。
指定したWindowからWindowハンドルをとり、それをWin32APIで常に最前面にするだけです。
VB6での実装方法は、インターネットで検索すればすぐに見つかりますが、以下のリンクではEXE形式の実行ファイルもダウンロードできます。
私と同じ状況が発生した方へ。

指定したウィンドウを最前面にするサンプル(ソースコード含む)