-
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.
Для меня данная тема завершена успешно.
Огромное Вам спасибо! Надеюсь, озвученные здесь Ваши подсказки и мой опыт помогут избежать подобных "граблей" кому-то ещё... ;)