Конференция "Компоненты" » Создание формы из эксперта проекта - как? [D7, WinXP]
 
  • Korney San © (31.03.09 16:06) [20]
    Вы упускаете из виду, что как минимум одно событие должно быть назначено "вживую", для того, чтобы поназначать остальные события.
    Например, генерируется:

    procedure TForm.FormCreate;
    begin
    OnDestroy:=FormDestroy;
    end;

    procedure TForm.FormDestroy;
    begin
    //bla bla bla
    end;


    И чтобы FormCreate сработало, его нужно "повесить" как раз во время работы эксперта.

    Или я что-то упускаю?
  • Игорь Шевченко © (31.03.09 18:16) [21]
    Вот у меня в эксперте есть генерация формы:

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



    если я FormText заменю на

    inherited %0:s: T%0:s'#13#10'   OnCreate = FormCreate end';

    а в генерируемом тексте добавлю

    type
     T%1:s = class (%2:s)
       procedure FormCreate (Sender: TObject);
     private
       {Private declarations}
     protected
       {Protected declarations}
     public
       procedure RunTests; override;
       {Public declarations}
     end;



    и, соответственно, реализацию, разве этого не будет достаточно ?
  • Korney San © (17.04.09 15:21) [22]
    Спасибо, Вы всё-таки толкнули меня на правильный путь. Я разобрался и сделал следующее:

     // creates source file
     TFormFile = class(TInterfacedObject, IInterface, IOTAFile)
     private
      FOptions:TDMPluginWizardOptions;
     protected
       function GetSource : String;
       function GetAge : TDateTime;
     public
       constructor Create(Options:TDMPluginWizardOptions);
     end;

    function TFormCreator.NewFormFile(const FormIdent, AncestorIdent:string):IOTAFile;
    begin
     //Result := nil;
     Result:= TFormFile.Create(FOptions);
    end;

    { TFormFile }

    constructor TFormFile.Create(Options:TDMPluginWizardOptions);
    begin
     FOptions := Options;
    end;

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

    function TFormFile.GetSource: String;
    const
    FormText = 'inherited %0:s: %1:s'#13#10'OnCreate = FormCreate'#13#10'end';
    begin
    Result := Format(FormText, [Copy(FOptions.FormClassName, 2, 255), FOptions.FormClassName]);
    end;


    Форма генерируется с прописанным свойством OnCreate.
    Для меня данная тема завершена успешно.

    Огромное Вам спасибо! Надеюсь, озвученные здесь Ваши подсказки и мой опыт помогут избежать подобных "граблей" кому-то ещё... ;)
 
Конференция "Компоненты" » Создание формы из эксперта проекта - как? [D7, WinXP]
Есть новые Нет новых   [134466   +3][b:0][p:0.001]