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
раздел. Мне потребовалось время, чтобы узнать.