Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: IDE Plugin / IDE ansteuern...

  Alt 5. Apr 2013, 23:22
Ich kapere mal den Thread

Ich kann jetzt ein neues Projekt erzeugen, komme dann aber noch nicht ausreichend weiter...

Der Packagename "TestBL" incl. FileName und Ordner wird schon mal zugewiesen (noch etwas provisorisch). Das Package wird erzeugt.
Ich möchte nun noch dass das Package
- gleich noch gespeichert wird
- sofort installiert wird.

Vorläufig habe ich das speichern und Installieren von Hand durchgeführt.

Bei weiteren Aufrufen werden dann aber TestBL1, TestBL2 usw. erzeugt, also eine bestehende Installation nicht erkannt.

Wenn die beiden offenen Punkte erledigt sind will ich noch dem Package noch im Dateisystem existierende Units hinzu fügen oder auch wieder Units entfernen.

Das Ganze ist etwas schwierig nachzuvollziehen, da das Debugen eines Designtimepackages etwas langwierig ist und Hilfe im Detail etwas löchrig.
Hat jemand Tipps?


Delphi-Quellcode:
procedure TFormSsFWEditor.CornerButton1Click(Sender: TObject);
var
  PackageTest: IOTAPackageServices;
  I: Integer;
  ProjectCreator: TGxProjectCreator;
  F: Boolean;
begin
  ssFWPM.ssFWP.CreateUnits;

  F := False;
  PackageTest := (BorlandIDEServices as IOTAPackageServices);
  for I := 0 to PackageTest.GetPackageCount - 1 do
    if PackageTest.GetPackageName(I) = 'TestBLthen // alternate: 'TestBL.bpl'
    begin
      F := True;
      Break;
    end;
  if not F then
    (BorlandIDEServices as IOTAModuleServices).CreateModule(TGxProjectCreator.Create)
  else
    Beep;

  exit;

  PackageTest := (BorlandIDEServices as IOTAPackageServices);
  for I := 0 to PackageTest.GetPackageCount - 1 do
    if PackageTest.GetPackageName(I) = 'ssPackagethen
      exit;
  PackageTest.InstallPackage('ssPackage');
end;

////////////////////////////////////////////

unit ssFWProjectCreator;

interface

uses Windows, ToolsApi;

type

  // TProjectWizard = class(TNotifierObject, IOTAMenuWizard, IOTAWizard)
  // public
  // procedure Execute;
  // function GetIDString: string;
  // function GetMenuText: string;
  // function GetName: string;
  // function GetState: TWizardState;
  // end;

  TGxProjectCreator = class(TInterfacedObject, IOTACreator, IOTAProjectCreator)
  public
    // IOTACreator
    function GetCreatorType: string;
    function GetExisting: Boolean;
    function GetFileSystem: string;
    function GetOwner: IOTAModule;
    function GetUnnamed: Boolean;
    // IOTAProjectCreator
    function GetFileName: string;
    function GetOptionFileName: string;
    function GetShowSource: Boolean;
    procedure NewDefaultModule;
    function NewOptionSource(const ProjectName: string): IOTAFile;
    procedure NewProjectResource(const Project: IOTAProject);
    function NewProjectSource(const ProjectName: string): IOTAFile;
  end;

  // procedure Register;

implementation

// procedure Register;
// begin
// RegisterPackageWizard(TProjectWizard.Create);
// end;

// procedure TProjectWizard.Execute;
// begin
// (BorlandIDEServices as IOTAModuleServices).CreateModule(TGxProjectCreator.Create);
// end;
//
// function TProjectWizard.GetIDString: string;
// begin
// Result := 'GX.ProjectCreator';
// end;
//
// function TProjectWizard.GetMenuText: string;
// begin
// Result := '&GX Project Creator';
// end;
//
// function TProjectWizard.GetName: string;
// begin
// Result := 'GX Project Creator';
// end;
//
// function TProjectWizard.GetState: TWizardState;
// begin
// Result := [wsEnabled];
// end;

{ TGxProjectCreator }

function TGxProjectCreator.GetCreatorType: string;
begin
  Result := sPackage; // Create an application project
end;

function TGxProjectCreator.GetExisting: Boolean;
begin
  Result := False; // Create a new project
end;

function TGxProjectCreator.GetFileName: string;
begin
  Result := 'C:\users\as\Documents\RAD Studio\Projekte\TestBL\' + 'TestBL.dpk'; // Default const
end;

function TGxProjectCreator.GetFileSystem: string;
begin
  Result := ''; // Default
end;

function TGxProjectCreator.GetOptionFileName: string;
begin
  Result := ''; // Default
end;

function GetCurrentProjectGroup: IOTAProjectGroup;
var
  IModuleServices: IOTAModuleServices;
  IModule: IOTAModule;
  IProjectGroup: IOTAProjectGroup;
  i: Integer;
begin
  Result := nil;
  IModuleServices := BorlandIDEServices as IOTAModuleServices;
  for i := 0 to IModuleServices.ModuleCount - 1 do
  begin
    IModule := IModuleServices.Modules[i];
    if IModule.QueryInterface(IOTAProjectGroup, IProjectGroup) = S_OK then
    begin
      Result := IProjectGroup;
      Break;
    end;
  end;
end;

function TGxProjectCreator.GetOwner: IOTAModule;
begin
  Result := GetCurrentProjectGroup; // Owned by current project group
end;

function TGxProjectCreator.GetShowSource: Boolean;
begin
  Result := False; // Show the source in the editor
end;

function TGxProjectCreator.GetUnnamed: Boolean;
begin
  Result := False; // Project needs to be named/saved
end;

procedure TGxProjectCreator.NewDefaultModule;
begin
  // No default modules are created
end;

function TGxProjectCreator.NewOptionSource(const ProjectName: string): IOTAFile;
begin
  Result := nil; // For BCB only
end;

procedure TGxProjectCreator.NewProjectResource(const Project: IOTAProject);
begin
  // No resources needed
end;

function TGxProjectCreator.NewProjectSource(const ProjectName: string): IOTAFile;
begin
  // Create the default source code for a new application
  Result := nil;
end;

end.

EDIT1: Installierte Packages werden mit Kleinschreibung gefunden:
if PackageTest.GetPackageName(I) = 'testbl.bplthen // Kleinschreibung

EDIT2: Screenshot

EDIT3: Geil! Jetzt kann ich mein neu erzeugtes Package schon speichern und kompilieren. Fehlt jetzt noch das Hinzufügen der Units (und natürlich das Aufräumen der Testzeilen).
Delphi-Quellcode:
procedure TFormSsFWEditor.CornerButton1Click(Sender: TObject);
var
  PackageTest: IOTAPackageServices;
  I: Integer;
  ProjectCreator: TGxProjectCreator;
  F: Boolean;
  OTAModule: IOTAModule;
begin
  ssFWPM.ssFWP.CreateUnits;

  F := False;
  PackageTest := (BorlandIDEServices as IOTAPackageServices);
  for I := 0 to PackageTest.GetPackageCount - 1 do
    if PackageTest.GetPackageName(I) = 'testbl.bplthen // Kleinschreibung
    begin
      F := True;
      Break;
    end;
  if not F then
  begin
    OTAModule := (BorlandIDEServices as IOTAModuleServices).CreateModule(TGxProjectCreator.Create);
    OTAModule.Save(False, True);
    PackageTest.InstallPackage('testbl.bpl');
    OTAModule.Save(False, True);
  end
  else
    Beep;
end;
Miniaturansicht angehängter Grafiken
pe.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 6. Apr 2013 um 12:54 Uhr)
  Mit Zitat antworten Zitat