InstallShield Tips
InstallShield を使ったTipsを紹介。
Visual C++ 6.0には、おまけとして InstallShield Visual C++ Edtionが付いてきます。
これを使えば、製品版のInstallShieldでなくてもかなりのことができます。
JPGファイルを表示してひとあじ違ったインストーラを作成しましょう。
JPGファイルを表示するには
InstallShieldでは、PlaceBitmap関数を使えば ビットマップファイル(BMP)を表示できますが、
JPGファイルの表示はできません。
=================== InstallShield プログラミングガイド 引用開始 =========
InstallShieldのサポートするグラフィック形式
InstallShieldを使用したセットアッププロセスでは、ビットマップ、ビルボード、
およびビデオファイルを表示できます。
InstallShieldは、以下のような画像形式をサポートしています。
●16色、256色、true color(24ビットの)ビットマップ
●16色と24色の透過ビットマップ
●Placeable Windowsメタファイル(.wmfファイル)
●AVIファイル
InstallShieldを使用すると、セットアップ中、様々なタイミングで上のような形式の
画像を表示できます。また、各種の特殊効果を設定することも可能です。
=================== InstallShield プログラミングガイド 引用終了 =========
これでは、いちいちBMPファイルに変換してセットアップしなければならず不便です。
特にtrue color のBMPファイルは、ファイルサイズも大きくなってしまうので実用的ではありません。
ここでは、JPGファイルを表示する方法を紹介します。
インストールパッケージにはJPGファイルを組込み、表示する直前に JPGからBMPに変換して
表示することにします。
InstallShield での外部DLL呼出し
InstallShield のCallDLLFx 関数を使えば外部DLLを呼出せます。
=================== InstallShield のCallDLLFx 関数 引用開始 =========
構文
CallDLLFx (szDLL, szFunction, lvValue, svValue);
解説
CallDLLFx関数は、特定のDLLから関数を呼び出します。
この関数は、固定定義を使用する必要があり、この場合、
hwndがメインInstallShieldウィンドウのメインウィンドウハンドルになります。
LONG APIENTRY YourFunction (HWND hwnd, LPLONG lpIValue, LPSTR lpszValue);
パラメータ
szDLL
実行する関数を含むDLLの完全修飾ファイル名を指定します。
szFunction
szDLLで指定したDLLで呼び出す関数の名前を指定します。
IvValue
DLL関数に渡すLONG整数を指定します。
svValue
DLL関数に渡す文字列変数を指定します。
戻り値
CallDLLFx関数は、DLLの関数からLONG整数を返します。
=================== InstallShield のCallDLLFx 関数 引用終了 =========
JPG変換 DLL jpg2bmp.dll
DLLの呼出し方法がわかったところで、次はJPGファイルをBMPに変換する DLL が必要になります。
ここではInstallShield用に作成した jpg2bmp.dll のConvBmpIS2関数を使います。
ダウンロードは、こちら。
ConvBmpIS2関数は、JPGファイルを BMPファイルに変換します。入力JPGファイルは、インデックス番号を
指定します。インデックス番号は、ディレクトリ内で名前順に並べたときの 0 から始まる数です。
出力BMPファイルは、入力ディレクトリ内にtarget.bmp という固定名で作成されます。
このConvBmpIS2関数は、InstallShieldのCallDLLFx関数で呼べる形式で作成してあります。
●int APIENTRY ConvBmpIS2(HWND hwnd,long* lpindex,LPSTR lpdir);
パラメータ:
hwnd
InstallShieldのWindowsハンドル。ConvBmpIS2関数では使用しません。
lpindex
JPGファイルを示すインデックス番号。0が先頭。ディレクトリ内で名前でソートした順番です。
lpdir
ディレクトリ名+ファイル拡張子。例: c:\temp\*.jpg
戻り値
1: BMPファイルは作成された。
0: エラーまたはインデックスオーバー。
InstallShieldでの使用例:
szDLL = SUPPORTDIR ^ "jpg2bmp.dll";
szPara = SUPPORTDIR ^ "*.jpg";
nVal = nIndex;
nResult = CallDLLFx(szDLL, "ConvBmpIS2", nVal, szPara); // 外部DLLのコール
●int APIENTRY ConvBmpIS(HWND hwnd,long* lpcolor,LPSTR lpname);
ConvBmpIS関数は、JPGファイル名を指定して変換したいときに使います。
パラメータ:
hwnd
InstallShieldのWindowsハンドル。ConvBmpIS関数では使用しません。
lpcolor
カラー数を指定。0を指定するとそのまま。減色したいときに0以外を指定します。
lpname
JPGファイル名。例: c:\temp\abc.jpg
戻り値
1: BMPファイルは作成された。出力ファイル名は、入力ファイル名の後ろに ".bmp" を付けた名前で作成されます。
0: エラー。
InstallShieldでの使用例:
szDLL = SUPPORTDIR ^ "jpg2bmp.dll";
szPara = SUPPORTDIR ^ "abc.jpg";
nVal = 0;
nResult = CallDLLFx(szDLL, "ConvBmpIS", nVal, szPara); // 外部DLLのコール
PlaceBitmap(szPara + ".bmp",0,0,0,UPPER_LEFT); // イメージの表示
セットアップファイルのコピー
次にInstallShieldの[セットアップファイル]の[言語非依存]-[オペレーティングシステム言語非依存]に
jpg2bmp.dll と表示したいJPGファイルをコピーします。
表示する順番は、名前順にしたほうが
スクリプトが単純になるので、JPGファイルをリネームしてコピーします。
コピーしたファイルは、スクリプトの中でSUPPORTDIR変数でアクセスできます。
InstallShieldは、セットアップ初期化中、一時ファイルおよび _sys1.cabや _user1.cabに
圧縮されたファイルをコピーできるターゲットシステム上のフォルダを設定します。
InstallShieldでは、そのフォルダへのフルパスをSUPPORTDIRに割り当てます。
インストール終了後には、これらのファイルはすべてInstallShieldが削除します。
スクリプトの作成
●InstallShieldのスクリプトで次のような ShowImage関数を作成します。
function ShowImage(nIndex)
STRING szDLL,szPara;
NUMBER nResult,nVal;
begin
// DLLの場所を設定
szDLL = SUPPORTDIR ^ "jpg2bmp.dll"; // DLLのフルパス
szPara = SUPPORTDIR ^ "*.jpg"; // 表示したいファイルの指定
nVal = nIndex;
nResult = CallDLLFx(szDLL, "ConvBmpIS2", nVal, szPara); // 外部DLLのコール
if (nResult > 0 ) then
//SetDisplayEffect(EFF_BOXSTRIPE); // 表示効果 製品版のみ
PlaceBitmap(SUPPORTDIR ^ "target.bmp",nIndex,0,0,UPPER_LEFT); // イメージの表示
if (nIndex > 0) then
PlaceBitmap("",nIndex-1,0,0,REMOVE); // 前のイメージを消去
endif;
//SetDisplayEffect(EFF_NONE); // 製品版のみ
Delay(3); // 表示時間の設定 表示時間を変更するときはここを修正します。
endif;
return nResult;
end;
●プロトタイプ宣言とグローバル変数を定義します。
//プロトタイプ宣言:
prototype ShowImage(NUMBER); // show jpg image function
//グローバル変数
NUMBER nBMP;
●スライドショーを開始するにはShowImage関数を次のように呼出します。
nBMP = 0; // slide show index
while (ShowImage(nBMP) > 0) // JPGファイルを名前順に表示
nBMP = nBMP + 1;
endwhile;
babaqフリーソフトのご使用上の注意
●プログラムを使って発生した損害に関しては、一切の責任を負いません。
●使用、配布に制限はありません。自由にお使いください。
●動作の保証はありません。
●動作を確認したOSは、Windows NT 4.0 とWindows 95/98のみです。
Home
Copyright 1999 Tatsuo Baba,All rights reserved.