كيفية الحصول على اسم ملف المصدر الرئيسي من iotaproject؟

StackOverflow https://stackoverflow.com/questions/2028046

  •  19-09-2019
  •  | 
  •  

سؤال

نظرا لأن 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: كيفية إنشاء واحدة من هذه المواقف:

  1. إنشاء تطبيق VCL جديد.
  2. حفظ باسم myproject.dproj.
  3. إغلاق المشروع في IDE.
  4. في مستكشف Windows، أعد تسمية MyProject.dproj إلى MyProjectD11.DProj.
  5. من الآن فصاعدا تأكد من فتح 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top