Fórum uso correto de funções genéricas #288898
20/07/2005
0
tenho uma unit chamada uFuncoes a qual coloco todas as funcoes que uso frequentemente (valores extenso, controle de datas, checagens, etc...)
só que no momento quero criar forms, passando os tipos e nomes por parametro, ex:
[b]function CriarForm(TipoForm:TComponentClass ; NomeForm:TForm) :Boolean ;[/b]
e fechar form da mesma maneira...
[b]
function FecharForm(NomeForm:TForm);[/b]
entao para isso implementei da seguinte forma :
[b]//**********************CRIAR FORMS[/b]
function TfrmMenu.CriarFormulario(TFormulario:TComponentclass;NomeForm:TForm):Boolean;
begin
try
NomeForm :=Nomeform.Create(self);
Nomeform.showmodal;
finally
NomeForm.Release;
NomeForm :=Nil;
end;
end;
[b]//********************FECHAR FORMS[/b]
function TfrmFUNCOES.FecharFormulario(Formulario:tform):Boolean;
begin
if Formulario <> Nil then
begin
formulaRIO.Destroy;
formulario :=Nil;
end;
end;
O problema é o seguinte :
CRIA OS FORMS CORRETAMENTE;
AO USAR PROCEDURES E FUNCOES INTERNAS (JÁ NO FORM CRIADO), ESTE ME RETORNA FORM = NIL !!!!, assim não consigo trabalhar com [b]funcoes internas [/b]do form criado pela funcao acima,
para ser mais claro,
eu crio normalmente pela funcao acima,
quando uso funcoes internas dá erro,
ao fechar o form, já é NIL!!! , portanto fica em memória... e não consigo descarrega-lo (a nao ser manualmente)
Alguem pode me ajudar?
Mazzi
Curtir tópico
+ 0Posts
20/07/2005
Beppe
Em vez de
if Formulario <> Nil then begin formulaRIO.Destroy; formulario :=Nil; end;
use apenas FreeAndNil(formulaRIO), que é a msm coisa.
Gostei + 0
20/07/2005
Mazzi
retirei tbm o .Destroy ; e o Nil ; como vc me falou,
Agora eles criaram form, e fecham o form perfeitamente!
porem , as funcoes internas do form criado,ainda nao funcionam..., é como se o form criado, após sua criação, fica imediatamente em NIL, e mesmo depurando-o não consigo achar uma solução.
Ex: No formulario criado, tenho procedures e funcoes que controlam os focos de botoes, e edits (ligaeDesligaCampos), esses por sua vez, ao executarem dão erro por não acessar o form (erro comum em Access Violation, quando algo faz referencia a um form que nao foi criado, ou nao se encontra na memoria)...
ou Seja a causa do erro encontrei nesse Access Violation, mas ñão encontrei a forma dinamica de controlar essas funcoes...
Gostei + 0
21/07/2005
Beppe
function TfrmMenu.CriarFormulario(TFormulario: TComponentclass; var NomeForm): Boolean; var F: TForm begin try F := TFormulario.Create(nil); TForm(NomeForm) := F; F.ShowModal; finally F.Release; TForm(NomeForm) := nil; end; end;
Gostei + 0
21/07/2005
Mazzi
deu certinho
as criações os fechamentos, e as funções geradas !
Obrigado pela atenção e que isso possa ajudar a quem precisar
Deus abençoe a todos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)