//--------------------------------------------------------------------------- ■ SL4 SamplePlugin for C++Builder4,5 について ・C++Builder5.0で作成したSL4プラグインサンプルです。 Delphiで書かれたソースを元にC++Builder用にコンバートした物です。 内容は沢田@作者さんの Sample.slx とほぼ同じです。 ・C++Builder5.0でコンパイルするときは NO_WIN32_LEAN_AND_MEAN を定義する 必要があります。 どこで定義しても大丈夫だと思いますが、プロジェクト→オプションの 「ディレクトリ/条件」タブの条件定義に追加するのが良いと思います。 ・プラグインに必要な構造体や関数の定義は"SLXFunc.h"にまとめました。 関数の説明なども出来るだけ詳しく付けてみました。 ・SL4が提供している API は "ALApi.h" にまとめました。 関数の説明なども出来るだけ詳しく付けてみました。 //--------------------------------------------------------------------------- ■ 梱包内容 bcb_sample.bpr ... プロジェクトファイル(C++Builder5) bcb_sample.cpp ... メインのソース bcb_sample.res ... リソースファイル bcb_sample.slx ... プラグイン(DLL) Develop.txt ... このファイル icon.rc ... アイコン定義ファイル main.ico ... メインアイコン num1.ico ... 数字アイコン1 num2.ico ... 数字アイコン2 SLApi.h ... SL4 の API をまとめたヘッダファイル SLXFunc.h ... SL4 が 呼び出す関数などをまとめたヘッダファイル //--------------------------------------------------------------------------- ■ 以下の解説文は 作者:沢田氏の Develop.txt から一部を除いて引用しています。 【概要】 ・ プラグインは、Special Launch 4(以下 SL4)に、拡張された ボタンとメニューを追加することができます。プラグインを使 用することによって、SL4 に Windows の終了メニューを追加し たり、時計ボタンを追加したりすることが可能になります。 ・ プラグインは、特定のプログラムを持つ DLL であり、他の DLL と区別するために拡張子を slx に変更したものです。 ・ DLL を作成することができるほぼすべてのコンパイラで作成可 能です。 ・ プラグインは、SL4 に組み込まれている API(以下 SLAPI)を 使うことで、SL4 を操作したり必要な情報を取得することがで きます。 ・ 構文はすべて C++Builder の文法で記述してあります。 【実装】 ・ プラグインはすべてのプラグイン関数を実装する必要はありま せんが、関数 SLXGetName だけは実装する必要があります。プ ラグインで実装されていないプラグイン関数は SL4 で無視しま す。 ・ 関数 SLXGetName で取得するプラグインの名前は、他のプラグ インと重複することは出来ません。ユニークな名前を付けるよ うにしてください。日本語の名前も使えます。 ・ SLAPI をマップする際は Win32API の LoadLibrary は使わずに GetModuleHandle を使ってマップする必要があります。 【SL4 の呼び出し手順】 SL4 は以下の手順でプラグインを組み込みます。 [SL4 起動] 1. SL4 は、起動時に Plugins フォルダを検索し、プラグインフ ァイルをロードします。 2. 関数 SLXGetName を実行し、プラグインの名前を取得します。 もし同じ名前のプラグインが既に組み込まれている場合はエ ラーになり、その旨がユーザーに通知されます。 3. プラグインファイルをアンロードします。 [プラグイン起動] 1. プラグインファイルをロードします。 2. 関数 SLXSetInitFile を実行し、プラグインに設定ファイル の名前を通知します。 3. 関数 SLXGetButton を実行し、プラグインが持つボタンをロ ードします。 4. 関数 SLXGetMenu を実行し、プラグインが持つメニューをロ ードします。 5. 関数 SLXBeginPlugin を実行し、プラグインに開始を通知し ます。通常このときにプラグインは関数 SLXSetInitFile で 取得したファイルから設定を読み込みます。 [プラグイン停止] 1. 関数 SLXEndPlugin を実行し、プラグインに終了を知らせま す。通常このときにプラグインは関数 SLXSetInitFile で取 得したファイルに設定を保存します。 2. プラグインファイルをアンロードします。 [ボタン] 1. ボタンがパッドに作成される際に、関数 SLXButtonCreate を 実行します。 2. ボタンがパッドから削除される際に、関数 SLXButtonDestroy を実行します。 3. ボタンをクリックで関数 SLXButtonClick を実行します。 4. ボタンでファイルを開く際に、関数 SLXButtonDropFiles を 実行します。 5. 構造体 TSLXButtonInfo メンバ OwnerDraw が True の場合、 ボタン描画時に関数 SLXButtonDraw と関数 SLXButtonDrawEx を実行します。 6. 構造体 TSLXButtonInfo のメンバ UpdateInterval が 1 以上 のボタンの場合、指定の間隔で関数 SLXButtonUpdate を実行 します。また、関数 SLXButtonUpdate の戻り値が True だっ た場合、ボタンを再描画します。 7. 構造体 TSLXButtonInfo のメンバ OwnerChip が True のボタ ンの場合、ボタンにカーソル通過で SLXButtonChip を実行し、 チップを表示します。 8. ボタンの追加/変更ダイアログの設定ボタンのクリックで関 数 SLXButtonOptions を実行します。 [メニュー] 1. メニューの選択で関数 SLXMenuClick を実行します。 2. メニュー表示時に関数 SLXMenuCheck を実行し、戻り値が True の場合メニューにチェックマークを付けます。 [オプション] 1. プラグインの情報で、関数 SLXGetExplanation を実行します。 2. プラグインの設定で、関数 SLXChangeOptions を実行します。 戻り値が True の場合、関数 SLXButtonUpdate を実行します。 [その他] 構造体などは各ヘッダファイルに説明を付加してありますので、 そちらを参照してください。 //--------------------------------------------------------------------------- ■ 更新履歴 1.0.0 Build1 2000/02/03? ひとます完成 1.0.0 Build4 2000/03/07 アイコンがあまりに適当だったので変更しました。 あと設定ボタンを押したときのメッセージを変更。 バージョン情報をつけました。 1.0.0 Build5 2000/07/21 SL4 Build 204 に対応しました。 SLXChangeOptions(void) ↓ SLXChangeOptions(HWND hWnd) "SLXFunc.h"に関数の説明をつけました。 1.0.0 Build12 2001/01/28 SL4 Build 225 に対応しました。 SLXButtonDrawEx を追加しました。 SLXButtonCreate を追加しました。 SLXButtonDestroy を追加しました。 Special Launch API を追加しました。 1.0.0 Build14 2002/04/14 正式版 Special Launch 4.0.2 Build 240 以降に対応しました。 SLXButtonOptions を追加しました。 SLAGetIcon を追加しました。 //--------------------------------------------------------------------------- ■その他 ・このサンプルに関するご意見や質問などがありましたら、 メールか下記のHPの掲示板にてお願いします。 Mail : y.asano@sky.zero.ad.jp HomePage : http://sky.zero.ad.jp/~zad04201/main.html //--------------------------------------------------------------------------- Copyright(C)2000-2002 Y.Asano All rights reserved.