Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Release und Build Nummer vom Projekt auslesen (https://www.delphipraxis.net/163693-release-und-build-nummer-vom-projekt-auslesen.html)

RWarnecke 11. Okt 2011 19:19

Release und Build Nummer vom Projekt auslesen
 
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 ?

Union 11. Okt 2011 19:44

AW: Release und Build Nummer vom Projekt auslesen
 
Du musst wahrscheinlich auf ein Update warten. Die Versioninfo bei XE2 funktioniert generell seltsam, es existieren 13 qc Einträge.

RWarnecke 12. Okt 2011 06:35

AW: Release und Build Nummer vom Projekt auslesen
 
Hast Du dazu ein paar Links ? Irgendwie kapier ich die Suche im QC nicht.

Union 12. Okt 2011 08:28

AW: Release und Build Nummer vom Projekt auslesen
 
Hier der Link zur Suche inklusive Parameter. Die ist eigentlich ganz einfach ;)

RWarnecke 12. Okt 2011 08:46

AW: Release und Build Nummer vom Projekt auslesen
 
Hallo Union,

danke für die Links. Werde die mal durchschauen und eventuell einen neuen QC aufmachen, sofern hier nicht jemand noch sagt, dass ich einen Fehler gemacht habe in meinem Quelltext.

Union 12. Okt 2011 09:24

AW: Release und Build Nummer vom Projekt auslesen
 
Die Frage ist vor allem: Wie debugged man sowas? Ich hab mir mit IOTAServices schon so manches Ei gelegt (IDE in Endlosschleife usw.)

RWarnecke 12. Okt 2011 09:43

AW: Release und Build Nummer vom Projekt auslesen
 
So ich habe beschlossen vorsichtshalber eine QC aufzumachen. Der Fehler ist jetzt an Embarcadero unter der Nummer 99959 gemeldet.

Bernhard Geyer 12. Okt 2011 09:49

AW: Release und Build Nummer vom Projekt auslesen
 
Zitat:

Zitat von Union (Beitrag 1129956)
Die Frage ist vor allem: Wie debugged man sowas? Ich hab mir mit IOTAServices schon so manches Ei gelegt (IDE in Endlosschleife usw.)

Du müsstest die Delphi-IDE als Host-Prozess für dein Experten-Projekt hinterlegen so das eine 2te Instanz der IDE in deiner ersten Instanz als zu Debuggende App geladen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz