0 votes

Enregistrer un formulaire personnalisé dans delphi 2010 avec ToolsApi

J'ai un formulaire personnalisé qui est un descendant de TForm. J'ai utilisé ToolApi pour enregistrer le module personnalisé et l'ajouter au référentiel. Jusqu'ici tout va bien. Mais lorsque je clique sur Fichier->Nouveau, je peux voir ma catégorie avec l'icône de mon formulaire personnalisé mais il est désactivé. L'icône est grisée et je ne peux pas la sélectionner pour créer mon formulaire personnalisé à partir du menu et l'ajouter au projet.

Avez-vous des suggestions et des conseils sur ce qui ne va pas et ce que je dois essayer ?

Cliquez ici pour transférer mon code source...

Merci d'avance.

Edit :

Il y a également une liste de code pour laquelle je pense qu'elle est importante :

unit CustomFormFrame_Design;    

interface

{$Include jvcl.inc}

uses Windows, Classes, ToolsAPI;

type
    TPoCustomFormWizard = class(TNotifierObject, IOTAWizard, IOTARepositoryWizard,    
    IOTAFormWizard, IOTACreator, IOTAModuleCreator,    
    IOTARepositoryWizard60   
    {$IFDEF COMPILER8_UP}, IOTARepositoryWizard80 {$ENDIF COMPILER8_UP}   
    {$IFDEF COMPILER10_UP}, IOTAProjectWizard100 {$ENDIF COMPILER10_UP})   
  private
     FUnitIdent: string;
     FClassName: string;
     FFileName: string;
  protected
    // IOTAWizard methods
    function GetIDString: string;
    function GetName: string;
    function GetState: TWizardState;
    procedure Execute;
    // IOTARepositoryWizard / IOTAFormWizard methods
    function GetAuthor: string;
    function GetComment: string;
    function GetPage: string;
    function GetGlyph: Cardinal;
    // IOTACreator methods
    function GetCreatorType: string;
    function GetExisting: Boolean;
    function GetFileSystem: string;
    function GetOwner: IOTAModule;
    function GetUnnamed: Boolean;
    // IOTAModuleCreator methods
    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);

    { IOTARepositoryWizard60 }
    function GetDesigner: string;

    {$IFDEF COMPILER8_UP}
    { IOTARepositoryWizard80 }
    function GetGalleryCategory: IOTAGalleryCategory; virtual;
    function GetPersonality: string; virtual;
    {$ENDIF COMPILER8_UP}

    {$IFDEF COMPILER10_UP}
    { IOTAProjectWizard100 }
    function IsVisible(Project: IOTAProject): Boolean;
    {$ENDIF COMPILER10_UP}

    {$IFDEF COMPILER8_UP}
    property Personality: string read GetPersonality;
    {$ENDIF}

    end;

    procedure Register;    

implementation

  uses Forms, PoCustomForm,  SysUtils, DesignIntf, DesignEditors;

  {$R *.res}

type
  TBaseFile = class(TInterfacedObject)
  private
    FModuleName: string;
    FFormName: string;
    FAncestorName: string;
  public
    constructor Create(const ModuleName, FormName, AncestorName: string);
  end;

  TUnitFile = class(TBaseFile, IOTAFile)
  protected
    function GetSource: string;
    function GetAge: TDateTime;
  end;

  TFormFile = class(TBaseFile, IOTAFile)
  protected
    function GetSource: string;
    function GetAge: TDateTime;
  end;

 procedure Register;
 begin
   RegisterCustomModule(TPoCustomForm, TCustomModule);
   RegisterPackageWizard(TPoCustomFormWizard.Create);
 end;

{ TBaseFile }
constructor TBaseFile.Create(const ModuleName, FormName, AncestorName: string);
begin
  inherited Create;
  FModuleName := ModuleName;
  FFormName := FormName;
  FAncestorName := AncestorName;
end;

{ TUnitFile }
function TUnitFile.GetSource: string;
var
  Text: string;
  ResInstance: THandle;
  HRes: HRSRC;
begin
  ResInstance := FindResourceHInstance(HInstance);
  HRes := FindResource(ResInstance, 'CODEGEN', RT_RCDATA);
  Text := PChar(LockResource(LoadResource(ResInstance, HRes)));
  SetLength(Text, SizeOfResource(ResInstance, HRes));
  Result := Format(Text, [FModuleName, FFormName, FAncestorName]);
end;

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

{ TFormFile }
function TFormFile.GetSource: string;
const FormText = 'object %0:s: T%0:s'#13#10'end';
begin
  Result := Format(FormText, [FFormName]);
end;

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

{ TAppBarWizard }

{ TAppBarWizard.IOTAWizard }
function TPoCustomFormWizard.GetIDString: string;
begin
  Result := 'XFORM.PoCustomForm';
end;

function TPoCustomFormWizard.GetName: string;
begin
  Result := 'XFORM PoCustom Form Wizard';
end;

function TPoCustomFormWizard.GetState: TWizardState;
begin
  Result := [wsEnabled];
end;

procedure TPoCustomFormWizard.Execute;
begin
  (BorlandIDEServices as IOTAModuleServices).GetNewModuleAndClassName(
  'PoCustomForm', FUnitIdent, FClassName, FFileName);
  (BorlandIDEServices as IOTAModuleServices).CreateModule(Self);
end;

{ TPoCustomFormWizard.IOTARepositoryWizard / TPoCustomFormWizard.IOTAFormWizard }
function TPoCustomFormWizard.GetGlyph: Cardinal;
begin
  Result := 0; // use standard icon
end;

function TPoCustomFormWizard.GetPage: string;
begin
  Result := 'XFORM';
end;

function TPoCustomFormWizard.GetAuthor: string;
begin
  Result := 'XFORM';
end;

function TPoCustomFormWizard.GetComment: string;
begin
  Result := 'Creates a new PoCustom form.'
end;

{ TPoCustomFormWizard.IOTACreator }
function TPoCustomFormWizard.GetCreatorType: string;
begin
  Result := '';
end;

function TPoCustomFormWizard.GetDesigner: string;
begin
  Result := dVCL;
end;

{$IFDEF COMPILER8_UP}
function TPoCustomFormWizard.GetGalleryCategory: IOTAGalleryCategory;
begin
  Result := (BorlandIDEServices as IOTAGalleryCategoryManager).FindCategory('Borland.Delphi.New.Expert');
end;

function TPoCustomFormWizard.GetPersonality: string;
begin
  Result := sDelphiPersonality;
end;
{$ENDIF COMPILER8_UP}

{$IFDEF COMPILER10_UP}
function TPoCustomFormWizard.IsVisible(Project: IOTAProject): Boolean;
begin
  Result := True;
end;
{$ENDIF COMPILER10_UP}

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

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

function TPoCustomFormWizard.GetOwner: IOTAModule;
var
  I: Integer;
  ModServ: IOTAModuleServices;
  Module: IOTAModule;
  ProjGrp: IOTAProjectGroup;
begin
  Result := nil;
  ModServ := BorlandIDEServices as IOTAModuleServices;
  for I := 0 to ModServ.ModuleCount - 1 do
  begin
    Module := ModSErv.Modules[I];
    // find current project group
    if CompareText(ExtractFileExt(Module.FileName), '.bpg') = 0 then
    if Module.QueryInterface(IOTAProjectGroup, ProjGrp) = S_OK then
    begin
      // return active project of group
     Result := ProjGrp.GetActiveProject;
     Exit;
   end;
  end;
end;

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

{ TPoCustomFormWizard.IOTAModuleCreator }
function TPoCustomFormWizard.GetAncestorName: string;
begin
  Result := 'TPoCustomForm';
end;

function TPoCustomFormWizard.GetImplFileName: string;
var
CurrDir: array[0..MAX_PATH] of Char;
begin
  // Note: full path name required!
  GetCurrentDirectory(SizeOf(CurrDir), CurrDir);
  Result := Format('%s\%s.pas', [CurrDir, FUnitIdent, '.pas']);
end;

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

function TPoCustomFormWizard.GetFormName: string;
begin
  Result := FClassName;
end;

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

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

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

function TPoCustomFormWizard.NewFormFile(const FormIdent,
AncestorIdent: string): IOTAFile;
begin
  Result := TFormFile.Create('', FormIdent, AncestorIdent);
end;

function TPoCustomFormWizard.NewImplSource(const ModuleIdent, FormIdent,
AncestorIdent: string): IOTAFile;
begin
  Result := TUnitFile.Create(ModuleIdent, FormIdent, AncestorIdent);
end;

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

procedure TPoCustomFormWizard.FormCreated(const FormEditor: IOTAFormEditor);
begin
// do nothing
end;

end.

2voto

LaKraven Points 3815

Un assistant de référentiel complet (avec un formulaire personnalisé) est présenté dans le livre blanc de Bruno Fierens, que vous pouvez obtenir ici : http://forms.embarcadero.com/forms/AMUSCA1104BrunoFierensOTAPIWhitepaper à travers Embarcadero.

La raison pour laquelle je vous donne le lien plutôt que la réponse est que j'ai remarqué plus d'un problème avec votre code, vous aurez tout intérêt à lire le livre blanc ! Cela ne vous prendra pas longtemps, les applications de démonstration sont fournies avec, et cela ne résoudra pas seulement ce problème, mais la plupart des problèmes que vous pouvez rencontrer en jouant avec l'OTAPI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X