ラザロ0.9.30.4
uses
コンポーネントをフォームにドロップするときに、ユニット句に複数のユニットを追加する必要があるコンポーネントを開発しています。
この記事から、デザイナーフックを設定し、必要なファイルをプロジェクトに追加して、ユニットをuses
句に追加する方法を発見しました。
コードサンプル:
procedure TTestComponent.DoCompAdded(APersistent: TPersistent; Select: boolean);
var
oProj: TLazProject;
oFile: TLazProjectFile;
begin
oProj := LazarusIDE.ActiveProject;
oFile := oProj.CreateProjectFile('X:\Unit path\AddonUnit.pas');
oFile.IsPartOfProject := True;
oProj.AddFile(oFile, True);
end;
constructor TTestComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
GlobalDesignHook.AddHandlerPersistentAdded(@DoCompAdded);
end;
procedure Register;
begin
RegisterComponents('AAA',[TTestComponent]);
end;
デバッグ時に、ハンドラーが呼び出され、ユニットAddonUnit
がプロジェクトに追加されたことを確認しました(オブジェクト内のすべてのファイルを繰り返し処理しましたoProj
)が、結果はゼロになりました。実際には、プロジェクトまたはuses
句に何も追加されませんでした。
さらに、プロジェクトファイルコレクションoProj.Files[index]
は、プロジェクトに含まれているファイルではなく、現在開いているエディターファイルを返すことがわかりました。
私は何かが足りないのですかuses
、それとも条項またはプロジェクトに必要なユニットを含める別の方法がありますか?