É possível definir evento OnCreate em tempo de exec.?
Olá
É 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
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é+
É 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
Curtidas 0
Respostas
Inutaishou
20/07/2004
Não entendi o que você quer, mas atribuir um evento em tempo de execução é possível sim... Crie uma procedure com os parâmetros que o evento usa...
Aí, só faça assim:
Depois, para desatribuir, troque o Sua_Procedure por Nil e pronto...
[]´s,
Aí, só faça assim:
Form.OnCreate := Sua_Procedure;
Depois, para desatribuir, troque o Sua_Procedure por Nil e pronto...
[]´s,
GOSTEI 0
Paulo_amorim
20/07/2004
Não entendi o que você quer, mas atribuir um evento em tempo de execução é possível sim... Crie uma procedure com os parâmetros que o evento usa...
Aí, só faça assim:
Depois, para desatribuir, troque o Sua_Procedure por Nil e pronto...
Form.OnCreate := Sua_Procedure;
Olá
eu tiver uma procedure do tipo TNotifyEvent
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
Inutaishou
20/07/2004
Hmmm... Agora entendi...
Tenta fazer assim:
Não encontrei nenhum outro jeito aqui...
Mas se eu conseguir, te aviso... Se conseguir não esqueça de postar também...
[]´s,
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
Paulo_amorim
20/07/2004
Tenta fazer assim:
Não encontrei nenhum outro jeito aqui...
Mas se eu conseguir, te aviso... Se conseguir não esqueça de postar também...
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
Marcelo Saviski
20/07/2004
va podia fazer assim tb:
.....
tem o mesmo efeito do OnCreate
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
Persist
20/07/2004
Exceto pelo fato que não existe a procedure DoCreate em TForm2.
GOSTEI 0
Marcelo Saviski
20/07/2004
sim existe, ele vem do TCustomForm
GOSTEI 0
Persist
20/07/2004
TForm2 = class
.............
private
{private declaration}
public
procedure DoCreate; override;
end
TForm2 é de TObject e não possui DoCreate
GOSTEI 0
Paulo_amorim
20/07/2004
TForm2 é de TObject e não possui DoCreate
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
Persist
20/07/2004
Olá, acho que vc não viu o código direito.
O código exposto pelo Marcelo Saviski foi:
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.
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
Paulo_amorim
20/07/2004
Olá, acho que vc não viu o código direito.
O código exposto pelo Marcelo Saviski foi:
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.
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
Marcelo Saviski
20/07/2004
vc pode redefinir o método [color=green:f524044146]AfterConstruction[/color:f524044146] quando a classe não for de um form
GOSTEI 0