3

アプリケーションに test.bpl パッケージがあり、myPackageForm という名前のフォームがあります。myPackageForm を閉じたいときにパッケージを読み込んだ後、アプリケーションが終了します。

メイン プロジェクトの初期化:

Application.Initialize;
Application.CreateForm(TMainForm,MainForm);
Application.Run;

MainForm FormCreate :

aPackage := LoadPackage('my bpl path'+test.bpl);
@P_ItemClick := GetProcAddress(aPackage,'ItemClickExcecute');

MainForm ボタンクリック:

P_ItemClick(Sender);

testPackage CommandsUnit :

Procedure ItemClickExecute(Sender : TObject)
begin
   TmyPackageForm.ShowForm();
end;

exports
  ItemClickExecute;

end.

myPackagForm には、それを示すクラス プロシージャがあります。

Class Procedure TmyPackagForm.ShowForm;
begin
 if not Assigned(myPackagForm)
    myPackagForm := Application.CreateForm(TmyPackagForm ,myPackagForm );
 myPackagForm.Show;
end;

そして、OnClose プロシージャには次のものがあります。

Release;

解決策として、別のコマンドを試します:

myPackagForm := TmyPackagForm.Create(Application); 

myPackagForm の作成に。

パッケージでCreateFormコマンドを使用してDelphi XE4で何が起こったのか知っている人はいますか?

4

2 に答える 2

3

TApplication.CreateFormフォームを作成するだけでなく、このメソッドによって作成された最初のフォームをTApplication.MainForm.

また、MainForm を閉じると、アプリケーションが閉じられます。

アップデート

アプリケーション内に2 つTApplicationのインスタンスがあります。

  1. あなたの通常のアプリケーション
  2. BPL内部

したがって、BPL 内のフォームは BPL の MainForm になります。Applicationこのフォームを閉じるとPostQuitMessage(0)、メインのアプリケーション プロセスのコンテキストで実行され、アプリケーション全体が強制的に終了します。

于 2013-12-22T06:48:18.003 に答える