كيفية الحصول على اسم ملف المصدر الرئيسي من iotaproject؟
سؤال
نظرا لأن D2007 على الأقل يمكن أن يحتوي ملف المشروع على ملف مصدر رئيسي مع اسم أساسي مختلف. تتفصل DEVEXPRESS DEMROS على هذا: على سبيل المثال، هناك ملف DPR واحد غير محدد unboundlistDemo.dpr الذي يعمل كمصدر رئيسي لكل من unboundlistemodmod11.dproj و UnboundListDemod12.dproj.
الآن إذا كان لدي Project: IOTAProject
ومن بعد Project.FileName
إرجاع اسم ملف DPROJ. لم أستطع العثور على طريقة "رسمية" للحصول على اسم ملف DPR. هل هنالك أي؟ يمكن للمرء الحصول عليه من تحليل ملف dproj (انظر هنا) لكنني أفضل طريقة ucessapi.
يحرر: لقد توصلت إلى هذا الرمز بناء على إجابة جون:
function IsProjectSource(const FileName: string): Boolean;
begin
Result := IsDpr(FileName) or IsBpr(FileName) or IsPackage(FileName);
end;
function GxOtaGetProjectFileName2(Project: IOTAProject; NormalizeBdsProj: Boolean = False): string;
var
i: Integer;
Module: IOTAModule;
Editor: IOTAEditor;
begin
Result := '';
if Assigned(Project) then begin
Result := Project.FileName;
if NormalizeBdsProj and IsBdsprojOrDproj(Result) then begin
Module := Project as IOTAModule;
for i := 0 to Module.ModuleFileCount - 1 do
begin
Editor := Module.ModuleFileEditors[i];
if IsProjectSource(Editor.FileName) then begin
Result := Editor.FileName;
Exit;
end;
end;
end;
end;
end;
حيث هو ... الروتينات من gx_genericutils..
تحرير 2: كيفية إنشاء واحدة من هذه المواقف:
- إنشاء تطبيق VCL جديد.
- حفظ باسم myproject.dproj.
- إغلاق المشروع في IDE.
- في مستكشف Windows، أعد تسمية MyProject.dproj إلى MyProjectD11.DProj.
- من الآن فصاعدا تأكد من فتح MyProjectD11.DProj، ليس myproject.dpr!
المحلول
إذا قمت بتكرار المحررين على مثيل iotaproject، فمن المحتمل أن تجد DPR.
var
Module: IOTAModule;
Project: IOTAProject;
Editor: IOTAEditor;
begin
// Set Project Here....
Module := Project as IOTAModule;
for I := 0 to Module.ModuleFileCount - 1 do
begin
Editor := Module.ModuleFileEditors[I];
end;
end;
لا تنتمي إلى StackOverflow