必要なActiveXが実行環境にない場合の起動エラー回避
DelphiでActiveXコントロール(以下ActiveX)を用いたプログラムを作成した場合、実行環境によってはそのActiveXがない場合にプログラムを起動すると(当然ですが)エラーが発生します。ActiveXそのものを動的に生成すれば良いように思えますが、この方法では実際にはうまくいかないようです(インターネットエクスプローラをインストールすると出来上がるTWebBrowserも動的には生成出来ますが、どうやっても表示させることが出来ません)。回避方法としては、あらかじめActiveXを貼付けたフォームを「選択可能なフォーム」として、起動後に動的に生成してその生成に例外処理を行なうといった手段が考えられます。しかしながら、メインフォームでActiveXを使用したい場合にはこの方法は取れませんね。
ここではMiViewで用いた、他のフォームを生成してメインフォームに貼付けるという方法を紹介します。
以下は簡単なサンプルです。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
// Form2を使用する
uses Unit2;
{$R *.DFM}
// Form2を選択可能なフォームにしてここで宣言する
var
Form2: TForm2;
procedure TForm1.FormCreate(Sender: TObject);
begin
try
// Form2を動的に生成する
// Form2のBorderStyleはbsNoneにしておくこと
Form2 := TForm2.Create(self);
// Panel1をParentにすることでForm2をメインフォームの一部にしてしまう
Form2.Parent := Panel1;
// Form2のAlignをalClientにすることによりPanel1に合せる
Form2.Align := alClient;
// Form2を表示させる
Form2.Visible := True;
except
// Form2の生成に失敗した場合の処理
MessageDlg('IEがインストールされていません.', mtWarning, [mbOK], 0);
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
// Form1を閉じるときにForm2が生成されていた場合に破棄する
if Assigned(Form2) then
Form2.Release;
end;
end.