Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

Release und Build Nummer vom Projekt auslesen

  Alt 11. Okt 2011, 19:19
Hallo zusammen,

ich wollte mir einen kleinen Experten basteln für die Option "Auto generate build number". Nur leider schaffe ich es nicht, die Werte aus den Projektoptionen auszulesen. Bis jetzt habe ich den folgenden Quelltext :
Delphi-Quellcode:
unit IdeNotifier;

interface

procedure Register;

implementation

uses SysUtils, TypInfo, ToolsApi;

var
  NotifierIndex: Integer;

type
  TIdeNotifier = class(TNotifierObject, IOTANotifier, IOTAIDENotifier)
  protected
    procedure AfterCompile(Succeeded: Boolean);
    procedure BeforeCompile(const Project: IOTAProject; var Cancel: Boolean);
    procedure FileNotification(NotifyCode: TOTAFileNotification;
      const FileName: string; var Cancel: Boolean);
  end;

function VariantToString(V: Variant): String;
begin
  Result := V;
end;

procedure Register;
var
  Services: IOTAServices;
begin
  Services := BorlandIDEServices as IOTAServices;
  Assert(Assigned(Services), 'IOTAServices not available');
  NotifierIndex := Services.AddNotifier(TIdeNotifier.Create);
end;

procedure RemoveNotifier;
var
  Services: IOTAServices;
begin
  if NotifierIndex <> -1 then
  begin
    Services := BorlandIDEServices as IOTAServices;
    Assert(Assigned(Services), 'IOTAServices not available');
    Services.RemoveNotifier(NotifierIndex);
  end;
end;

function MsgServices: IOTAMessageServices;
begin
  Result := (BorlandIDEServices as IOTAMessageServices);
  Assert(Result <> nil, 'IOTAMessageServices not available');
end;

procedure TIdeNotifier.AfterCompile(Succeeded: Boolean);
begin
  MsgServices.AddTitleMessage('After Compile');
  MsgServices.AddTitleMessage('Platform : ' + (BorlandIDEServices as IOTAModuleServices).GetActiveProject.GetPlatform);
  MsgServices.AddTitleMessage('Configuration : ' + (BorlandIDEServices as IOTAModuleServices).GetActiveProject.GetConfiguration);
  (BorlandIDEServices as IOTAModuleServices).GetActiveProject.SetPlatform('Win32');
  (BorlandIDEServices as IOTAModuleServices).GetActiveProject.SetConfiguration('Debug');
  MsgServices.AddTitleMessage('Release : ' + VariantToString((BorlandIDEServices as IOTAModuleServices).GetActiveProject.ProjectOptions.Values['Release']));
  MsgServices.AddTitleMessage('BuildNo : ' + VariantToString((BorlandIDEServices as IOTAModuleServices).GetActiveProject.ProjectOptions.Values['Build']));
end;

procedure TIdeNotifier.BeforeCompile(const Project: IOTAProject; var Cancel: Boolean);
var
  ReleaseNo: Double;
  BuildNo: Double;
begin
  MsgServices.AddTitleMessage('Before Compile');
  MsgServices.AddTitleMessage('Platform : ' + Project.GetPlatform);
  MsgServices.AddTitleMessage('Configuration : ' + Project.GetConfiguration);
  Project.SetPlatform('Win32');
  Project.SetConfiguration('Debug');
  MsgServices.AddTitleMessage('Release : ' + VariantToString(Project.ProjectOptions.Values['Release']));
  MsgServices.AddTitleMessage('BuildNo : ' + VariantToString(Project.ProjectOptions.Values['Build']));
end;

procedure TIdeNotifier.FileNotification(NotifyCode: TOTAFileNotification;
  const FileName: string; var Cancel: Boolean);
begin
  MsgServices.AddTitleMessage(Format('%s: %s',
    [GetEnumName(TypeInfo(TOTAFIleNotification), Ord(NotifyCode)), FileName]));
end;

initialization

finalization
  RemoveNotifier;

end.
Wenn ich jetzt die Zeilen für die Configuration und für die Platform auskommentiere funktioniert der Experte zum Auslesen der beiden Werte hervorragend auf Delphi XE oder kleiner. Wenn ich den Experten unter XE2 ausführe, dann wird mir immer nur der Wert 0 für Release und Build angezeigt.

Ich weiß jetzt nicht mehr weiter, wie ich an die Werte unter XE2 rankomme. Könnt Ihr mir da helfen ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat