|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"[D4][D3]パッケージを使ったAddIn手法"
皆さん、こんにちは。謎の全知師ともうします。
市販のアプリケーションで、後から機能追加出来るように、
アドインが使えるものが有ります。Delphiのパッケージ機能
を使えば、比較的簡単にこれを実現できます。
なお、アドインをパッケージで行う場合、必ず実行時パッケー
ジを使う設定になってないといけません。
イカの例では、通常のプロジェクトでPageControlを使って
いて、この中にアドインで新規のページを作成します。
下記の様な構成になっています。
アドインを管理するパッケージ
AddInBase.dpk
|-ExtTabSheet.Pas //アドインの管理ユニット
こちらのパッケージはDelphiにインストールします。
アドインを読み込む方のプロジェクト
Project1
|-Unit1.Pas
プロジェクトオプションで「実行時パッケージを使う」
がOnになっている事。更に、その下のエディット部で、
上記のAddInBase.dcpが追加されている事。
アドインパッケージ
AddInPack.dpk
|-AddInTabSheet.Pas //アドインするTabSheet
RequiersにAddInBase.bplが追加されている事。
こちらはDelphiにインストールする必要無し。
-----------------ExtTabSheet.Pas始まり------------------
unit ExtTabSheet;
interface
uses
Classes, ComCtrls;
type
TAddTabSheetClass = class of TTabSheet;
var
AddInList : TStringList;
implementation
initialization
AddInList := TStringList.Create;
finalization
AddInList.Free;
end.
-----------------ExtTabSheet.Pas終わり------------------
-----------------AddInTabSheet.Pas始まり----------------
unit AddInTabSheet;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtTabSheet;
type
TAddInTabSheet = class(TTabSheet)
private
{ Private 宣言 }
Btn : TButton;
procedure BtnClick(Sender : TObject);
protected
{ Protected 宣言 }
procedure SetParent(AParent : TWinControl); override;
end;
implementation
{ TAddInTabSheet }
procedure TAddInTabSheet.BtnClick(Sender: TObject);
begin
ShowMessage('AddIn');
end;
procedure TAddInTabSheet.SetParent(AParent: TWinControl);
begin
inherited;
if AParent <> nil then
begin
Caption := 'AddInPage';
Btn := TButton.Create(Self);
Btn.Parent := Self;
Btn.Caption := 'NewButton';
Btn.OnClick := BtnClick;
end;
end;
initialization
AddInList.AddObject('TAddInTabSheet', TObject(TAddInTabSheet));
finalization
AddInList.Delete(AddInList.IndexOf('TAddInTabSheet'));
end.-----------------AddInTabSheet.Pas終わり----------------
-----------------Project1始まり-----------------------------
Form1の上に、PageControlを置き、ページを1つ作っておく。
内容はどうでも良いです。
フォームのprivate部に、
private
{ Private 宣言 }
Module : HModule;
Page : TTabSheet;
ButtonとOpenDialogを置き、ButtonのOnClickイベントで、
procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Module := LoadPackage(OpenDialog1.FileName);
Page := TAddTabSheetClass(AddInList.Objects[AddInList.Count
- 1]).Create(Self);
Page.PageControl := PageControl1;
end;
end;
OnCloseイベントで、
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Module <> 0 then
begin
Page.Free;
UnloadPackage(Module);
end;
end;
これを実行して、Buttonをクリックし、AddInPack.bplを選択して
やるとPageControlに新しいページが作成されています。
なお、AddInTabSheet.pasをフォームで作成すると、イベント
ハンドラなどの作成が楽になります。この場合PageControlに
組み込むには、
AddInForm.ManualDock(PageControl);
等とします。
99/07/14(水) 22:52 謎の全知師(QZE10125)
Original document by 謎の全知師 氏 ID:(QZE10125)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|