1

ラザロ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、それとも条項またはプロジェクトに必要なユニットを含める別の方法がありますか?

4

0 に答える 0