Fórum É possível definir evento OnCreate em tempo de exec.? #243796
20/07/2004
0
É possível definir um evento OnCreate em tempo de execução a partir de outra Unit?
Por exemplo:
Se eu tiver, no meu Form1, um botão que cria outro Form2
Form2 := TForm2.Create(Self); Form2.ShowModal; Form2.Free;
Daí se eu tiver uma procedure do tipo TNotifyEvent, que deve ser colocada no OnCreate do Form2, mas como fazer durante esse procedimento? Se eu colocar antes, ele deve dar AccessViolation, pois não existe Form2. Se eu colocar depois, olé! ele já foi criado!
É, de fato, impossível?
Obrigado
Até+
Paulo_amorim
Curtir tópico
+ 0Posts
20/07/2004
Inutaishou
Aí, só faça assim:
Form.OnCreate := Sua_Procedure;
Depois, para desatribuir, troque o Sua_Procedure por Nil e pronto...
[]´s,
Gostei + 0
20/07/2004
Paulo_amorim
Form.OnCreate := Sua_Procedure;
Olá
Eu ja tenho a procedure, e já atribuo... o problema não eh como atribuir, mas sim [b:498cfad496]onde[/b:498cfad496] atribuir
pois eu tenho, por exemplo:
procedure Form1.Button1Click(Sender:TObject); begin Form2 := TForm2.Create(Self); Form2.ShowModal; Form2.Free; end;
Essa eh minha chamada ao Form2.
No Create do Form2 eu quero colocar a procedure FazAlgo (qe jah eh do tipo TNotifyEvent). Mas, no código acima, onde devo incluir essa linha?
Form2.OnCreate := FazAlgo;
Se eu fizer
Form2.OnCreate := FazAlgo; Form2 := TForm2.Create(Self);
então irá gerar Access Violation, pois acessei Form2 antes dele exisitr
Por outro lado, se eu fizer
Form2 := TForm2.Create(Self); Form2.OnCreate := FazAlgo;
então a procedure eh inútil, já que o Form2 eh criado antes da procedure ser atribuída (ou seja, ela não será executada).
Pensando assim, eh [i:498cfad496]inviável [/i:498cfad496](e não impossível, como disse no post anterior) atribuir um OnCreate a um outro Form ?
Obrigado
Até+
Gostei + 0
20/07/2004
Inutaishou
Tenta fazer assim:
Form2 := TForm2.Create( Self ); FazAlgo; Form2.ShowModal; FreeAndNil( Form2 );
Não encontrei nenhum outro jeito aqui...
Mas se eu conseguir, te aviso... Se conseguir não esqueça de postar também...
[]´s,
Gostei + 0
20/07/2004
Paulo_amorim
Form2 := TForm2.Create( Self ); FazAlgo; Form2.ShowModal; FreeAndNil( Form2 );
Olá
Isso que eu pensei também...
Só queria saber se dava pra setar o evento em si... mas acho que vc ta certo
Claro, se houver jeito, ele vai aparecer :wink:
Até+
Gostei + 0
20/07/2004
Marcelo Saviski
TForm2 = class
.............
private
{private declaration}
public
procedure DoCreate; override;
end;.....
procedure TForm2.DoCreate; begin inherited; //faz alguma coisa end;
tem o mesmo efeito do OnCreate
Gostei + 0
20/07/2004
Persist
Gostei + 0
20/07/2004
Marcelo Saviski
Gostei + 0
20/07/2004
Persist
TForm2 é de TObject e não possui DoCreate
Gostei + 0
21/07/2004
Paulo_amorim
Olá
Pra começar, [b:5778379895]todos[/b:5778379895] os objetos descendem de TObject...
A hierarquia de um form que vc cria eh
TForm2 - TForm - TCustomForm
Procure no Help por DoCreate, vc vai achar que ele eh evento de TCustomForm, que eh de onde vem seu Form2...
Até+
Gostei + 0
21/07/2004
Persist
O código exposto pelo Marcelo Saviski foi:
TForm2 = class
.............
private
{private declaration}
public
procedure DoCreate; override;
end;
Com isto caro colega, TForm2 é descendente direto de TObject e não de TForm ou TCustomForm; portanto volto a dizer que neste caso, TForm2 não possui o método DoCreate.
Gostei + 0
21/07/2004
Paulo_amorim
TForm2 = class
.............
private
{private declaration}
public
procedure DoCreate; override;
end;
Olá
Sim, se vc levar ao pe da letra
Acho que ele soh quis mostrar em que parte da Unit estava a declaração... não tem porque declarar como descendente de TOBject já que assim ele nem seria um form...
Até+
Gostei + 0
21/07/2004
Marcelo Saviski
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)