1

ToolsApi を使用して IDE ウィザードを実装し、GExperts FAQ ( http://www.gexperts.org/examples/GXModuleCreator.pas ) を参照として使用しようとしています。

bpl はコンパイルされますが、ユニットは IDE に表示されません。Delphi 10.3.2 Rio を使用しています。

unit ModuleCreator;

interface

uses
  SysUtils, Windows, Dialogs, ToolsAPI;

type
  TJIdeWizardSourceFile = class(TInterfacedObject, IOTAFile)
  private
    FSource: string;
  public
    function GetSource: string;
    function GetAge: TDateTime;
    constructor Create(const Source: string);
  end;

  TJIdeWizardModuleCreator = class(TInterfacedObject, IOTACreator, IOTAModuleCreator)
  public
    // IOTACreator
    function GetCreatorType: string;
    function GetExisting: Boolean;
    function GetFileSystem: string;
    function GetOwner: IOTAModule;
    function GetUnnamed: Boolean;
    // IOTAModuleCreator
    function GetAncestorName: string;
    function GetImplFileName: string;
    function GetIntfFileName: string;
    function GetFormName: string;
    function GetMainForm: Boolean;
    function GetShowForm: Boolean;
    function GetShowSource: Boolean;
    function NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile;
    function NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
    function NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
    procedure FormCreated(const FormEditor: IOTAFormEditor);
  end;

implementation

{ TJIdeWizardModuleCreator }

procedure TJIdeWizardModuleCreator.FormCreated(const FormEditor: IOTAFormEditor);
begin
  //
end;

function TJIdeWizardModuleCreator.GetAncestorName: string;
begin
  Result := 'Form';
end;

function TJIdeWizardModuleCreator.GetCreatorType: string;
begin
  Result := sUnit;
end;

function TJIdeWizardModuleCreator.GetExisting: Boolean;
begin
  Result := False;
end;

function TJIdeWizardModuleCreator.GetFileSystem: string;
begin
  Result := '';
end;

function TJIdeWizardModuleCreator.GetFormName: string;
begin
  Result := '';
end;

function TJIdeWizardModuleCreator.GetImplFileName: string;
begin
  Result := '';
end;

function TJIdeWizardModuleCreator.GetIntfFileName: string;
begin
  Result := '';
end;

function TJIdeWizardModuleCreator.GetMainForm: Boolean;
begin
  Result := False;
end;

function TJIdeWizardModuleCreator.GetOwner: IOTAModule;
var
  ModuleServices: IOTAModuleServices;
  Module: IOTAModule;
  NewModule: IOTAModule;
begin
  // You may prefer to return the project group's ActiveProject instead
  Result := nil;
  ModuleServices := (BorlandIDEServices as IOTAModuleServices);
  Module := ModuleServices.CurrentModule;

  if Module <> nil then
  begin
    if Module.QueryInterface(IOTAProject, NewModule) = S_OK then
      Result := NewModule

    else if Module.OwnerModuleCount > 0 then
    begin
      NewModule := Module.OwnerModules[0];
      if NewModule <> nil then
        if NewModule.QueryInterface(IOTAProject, Result) <> S_OK then
          Result := nil;
    end;
  end;
end;

function TJIdeWizardModuleCreator.GetShowForm: Boolean;
begin
  Result := True;
end;

function TJIdeWizardModuleCreator.GetShowSource: Boolean;
begin
  Result := True;
end;

function TJIdeWizardModuleCreator.GetUnnamed: Boolean;
begin
  Result := True;
end;

function TJIdeWizardModuleCreator.NewFormFile(const FormIdent, AncestorIdent: string): IOTAFile;
begin
  Result := nil;
end;

function TJIdeWizardModuleCreator.NewImplSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
begin
  // or Result := nil; for the default unit
  Result := nil;
end;

function TJIdeWizardModuleCreator.NewIntfSource(const ModuleIdent, FormIdent, AncestorIdent: string): IOTAFile;
begin
  Result := nil;
end;

{ TJIdeWizardSourceFile }

constructor TJIdeWizardSourceFile.Create(const Source: string);
begin
  FSource := Source;
end;

function TJIdeWizardSourceFile.GetAge: TDateTime;
begin
  Result := -1;
end;

function TJIdeWizardSourceFile.GetSource: string;
begin
  result := FSource;
end;

end.

これは、IOTAModuleCreator からメソッド「NewImplSource」を呼び出す方法の例です。

  procedure TfrmMapearObjetoRelacional.btnSimpleORMDaoClick(Sender: TObject);
  var
    _Mod: TJIdeWizardModuleCreator;
    _Str: string;
  begin
    _Mod := TJIdeWizardModuleCreator.Create;
    try
      _Str := _Mod.NewImplSource('unit1','','');
      ShowMessage(_Str);
    finally
      FreeAndNil(_Mod);
    end;
  end;
4

2 に答える 2