Delphi OpenTools API - редактирование проекта требует предложения

Я написал мастер OpenTools для создания каркаса для пользовательского типа проекта. Это работает, и проект и подразделения созданы правильно. Но как мне отредактировать файл.dpk или.dpk в файле require?

Вызов ModuleServices.CreateModule(MyIOTAProjectCreatorInterface) дает мне только файл.dproj.

1 ответ

Решение

В моем установщике компонентов VCL (поскольку XE - это часть Delphi IDE), я делаю это следующим образом:

procedure TCompInstallWizard.AddReferenceFiles(InstallProject: IOTAProject;
  const FileNames: array of string);
var
  ReferenceFile: string;
begin
  WriteDebugMessage('AddReferenceFiles');
  for ReferenceFile in FileNames do
    if not ContainsFile(InstallProject, ReferenceFile) then
      InstallProject.AddFile(ReferenceFile, False);
end;

с помощью функции IOTAProject.AddFile(FileName, IsUnitOrForm), Обратите внимание, что я называю это так:

if FPersonality = ppCppBuilder then
  AddReferenceFiles(InstallProject,
    ['rtl.bpi', 'designide.bpi', 'vcl.bpi', 'vclactnband.bpi',
     'vclx.bpi', 'xmlrtl.bpi'])
else
  AddReferenceFiles(InstallProject,
    ['rtl.dcp', 'designide.dcp', 'vcl.dcp', 'vclactnband.dcp',
     'vclx.dcp', 'xmlrtl.dcp']);

Обратите внимание, что документы говорят:

{ Call this function to add an arbitrary file to the project.  NOTE: some
  files have special meaning to different projects.  For example: adding
  VCL60.DCP will cause a new entry in a package project's "requires" list
  while it will be a raw file to any other project type.  Set IsUnitOrForm
  to true for files that are considered items that the project would
  process directly or indirectly (ie. .pas, .cpp, .rc, etc..) or can be
  opened in the code editor. For all others, including binary files
  (.res, .bpi, .dcp, etc..) set this to False. }
procedure AddFile(const AFileName: string; IsUnitOrForm: Boolean);

Это означает, что если вы добавите 'bla.dcp' он автоматически приземлится в requires раздел, и если вы добавите 'bla.pas' файл, он попадет в contains раздел. Мне потребовалось время, чтобы узнать.

Другие вопросы по тегам