realmente, eu tb não consegui descobrir o motivo..

vou continuar usando a rotina que eu criei, pq ficar registrando os forms
pra min não compensa.

de qualquer forma vou tentar + aqui, se eu descobrir algo te aviso.


Em 14/03/07, Adriano Santos <[EMAIL PROTECTED]> escreveu:
>
>   Eduardo,
>
> Matei o problema retornando um TForm na function e fazendo um typecast
> na chamada dele. Eu crio uma variável do mesmo tipo (classe do form) que
> será chamado e aponto pra funtion. Veja:
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> Form : TfrmMeuForm;
> begin
> Form := TfrmMeuForm('frmMeuForm');
> Form.BotaoTal.Enabled := True;
> Form.BotaoX.Caption := True;
> end;
>
> E etc. Este problema que tive eu descobri pq. Se liga:
>
> No form principal da minha aplicação eu fazia assim como descrito acima.
> E dado momento do form aberto ele entrava em um uma procedure que
> tentava atualizar um botão nele mesmo, asim:
>
> procedure TForm2.Button1Click(Sender: TObject);
> procedure Reinicia;
> begin
> with Form2 do
> begin
> btnLocalizar.Enabled:= True;
> ...
> end;
> end;
> begin
> ...codigo deste objeto
> ...codigo deste objeto
> ...codigo deste objeto
> ...codigo deste objeto
>
> Reinicia;
> end;
>
> Pois bem, lá em cima no With Form2 do, dava erro na atribuição dos
> valores para o btnLocalizar. Se coloco Self, tipo:
>
> Self.btnLocalizar.Enabled:= True; //Isso funciona
>
> procedure TForm2.Button1Click(Sender: TObject);
> procedure Reinicia;
> begin
> with Form2 do
> begin
> Self.btnLocalizar.Enabled:= True;
> ...
> end;
> end;
> begin
> ...codigo deste objeto
> ...codigo deste objeto
> ...codigo deste objeto
> ...codigo deste objeto
>
> Reinicia;
> end;
>
> Funciona, mas não dá pra sair atualizando tudo que é form. Bem, nesta
> tela em particular o que ele fazia no Reinicia podia ser passado para o
> final do procedimento e retirar a procedure.
>
> Eu gostaria de saber o porque do erro. E não consegui.
>
> -------- Mensagem original --------
> De: "Eduardo Silva dos Santos" <[EMAIL PROTECTED]<eduardo.drd%40gmail.com>
> >
> Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
> Assunto: Re:[delphi-br] Função AbrirForm
> Data: 14-03-2007 18:49
> >
> > acabei de verificar isso aqui..
> >
> > fiz um teste na função que eu fiz mudei para Show..
> > quando eu tento fazer uma referencia ao form Criado tb da violação de
> > acesso.
> >
> > agora lascou;;
> >
> > Em 14/03/07, Thiago Filiano (America Soft) <[EMAIL 
> > PROTECTED]<thiago%40americasoft.com.br>
> > <mailto:thiago% <thiago%25>40americasoft.com.br>>
> > escreveu:
> > >
> > > pra vc usar essa função, no seu form tem que ter as seguintes
> linhas...
> > >
> > > initialization
> > > RegisterClass(NomeDaClasseDoForm)
> > > finalization
> > > UnRegisterClass(NomeDaClasseDoForm)
> > >
> > > Eduardo Silva dos Santos escreveu:
> > > > Interessante a sua rotina, eu tentei testar aqui mas
> > > > na linha Pc := GetClass('T' + AForm);
> > > > mesmo com um Nome de Form Certinho PC sempre fica como Nil.. dai não
> > > > executa o resto.
> > > >
> > > >
> > > > eu fiz uma rotina generica so que bem mais simples que pra min
> > > > provisoriamente ta resolvendo, mas to tentando chamar o form so pelo
> > > nome
> > > > tb..
> > > >
> > > >
> > > > ShowForm( TFrmCliente, FrmClientes );
> > > >
> > > > **************
> > > >
> > > > procedure ShowForm( TFrm:TFormClass; Frm:TForm );
> > > > begin
> > > > try
> > > > if not Assigned( Frm ) then
> > > > Frm := TFrm.Create( Application );
> > > > Frm.ShowModal;
> > > > finally
> > > > FreeAndNil( Frm );
> > > > end;
> > > >
> > > > end;
> > > >
> > > >
> > > >
> > > > Em 14/03/07, Adriano Santos - Direção de Arte
> > <[EMAIL PROTECTED] <artes%40doiscliques.com>
> > <mailto:artes% <artes%25>40doiscliques.com><artes%40doiscliques.com>
> > > >
> > > > escreveu:
> > > >> Pessoal, alguém pode ver se consegue dar um help pra gente?
> > > >> Estamos tentando terminar a função para abrir form pelo nome.
> > > >> Já está funcionando em partes.
> > > >>
> > > >> Quando chamamos o form assim:
> > > >> AbrirForm('frmMatCol06', frmMatCol06);
> > > >>
> > > >> O form abre, porém se este mesmo form faz alguma referência a algum
> > > >> componente visual em tela tipo um:
> > > >> btnCancelar.Enabled := True;
> > > >>
> > > >> Dá AccessViolation, se alteramos para
> > > >> Self.btnCancelar.Enabled := True;
> > > >>
> > > >> Funciona. Tem alguma coisa a ver com o Dono do objeto. Não consigo
> > > >> descobrir.
> > > >> Já tentamos de tudo que é jeito:
> > > >>
> > > >> 1º AbrirForm('frmMatCol06', Self);
> > > >> 2º AbrirForm('frmMatCol06', Application);
> > > >> 3º AbrirForm('frmMatCol06', frmMatOpe01); //frmMatOpe01 é o form
> > > chamador.
> > > >>
> > > >> ou ainda:
> > > >>
> > > >> procedure TfrmMatOpe01.N110Click(Sender: TObject);
> > > >> var
> > > >> frmMatCol06 : TfrmMatCol06;
> > > >> begin
> > > >> frmMatCol06 := TfrmMatCol06(AbrirForm('frmMatCol06', Self));
> > > >> .....
> > > >> end;
> > > >>
> > > >> A função completa AbrirForm é esta. Vlw.
> > > >>
> > > >> function AbrirForm(AForm: string; ADono: TComponent; AEstilo:
> > > >> TFormBorderStyle = bsSingle;
> > > >> AShow: Boolean = True): TForm;
> > > >> var
> > > >> Pc : TPersistentClass;
> > > >> Nome : TForm;
> > > >> I : Integer;
> > > >> begin
> > > >> try
> > > >> Pc := GetClass('T' + AForm);
> > > >> if (Pc <> nil) then
> > > >> begin
> > > >> Nome := nil;
> > > >> I := 0;
> > > >> while I < Screen.FormCount do
> > > >> begin
> > > >> if Screen.Forms[I] is Pc then
> > > >> Nome := Screen.Forms[I];
> > > >> Inc(I);
> > > >> end;
> > > >> if Nome = nil then
> > > >> begin
> > > >> try
> > > >> Nome := TFormClass(Pc).Create(ADono);
> > > >> Nome.KeyPreview := True;
> > > >> Nome.OnKeyDown := frmAmerica.AdicionarAtalho;
> > > >> Result := Nome;
> > > >>
> > > >> if AShow then
> > > >> Nome.Show
> > > >> else
> > > >> Nome.ShowModal;
> > > >>
> > > >> except on E: Exception do
> > > >> begin
> > > >> MessageDlg('Ocorreu um erro ao carregar esta função.' + #13 +
> > > >> 'Erro original: ' + #13#13 +
> > > >> E.Message, mtWarning, [mbOk], 0);
> > > >> Result := nil;
> > > >> Exit;
> > > >> end;
> > > >> end;
> > > >> end
> > > >> else
> > > >> begin
> > > >> if AShow then
> > > >> Nome.Show
> > > >> else
> > > >> Nome.ShowModal;
> > > >> Result := Nome;
> > > >> end;
> > > >> end
> > > >> else
> > > >> begin
> > > >> MessageDlg('Ocorreu um erro ao carregar esta função.' + #13 +
> > > >> 'Janela: ' + AForm, mtWarning, [mbOk], 0);
> > > >> Result := nil;
> > > >> end;
> > > >> except
> > > >> Result := nil;
> > > >> end;
> > > >> end;
> > > >> --
> > > >>
> > > >> ----------------------------------------------------------
> > > >> *Adriano Santos*
> > > >>
> > > >>
> > > >
> > > >
> > > >
> > >
> > >
> > >
> >
> > --
> > Eduardo Silva dos Santos
> > DRD Sistemas.
> > (27) 3218-4201
> > MSN: [EMAIL PROTECTED] <eduardo.drd%40gmail.com> <mailto:eduardo
> .drd%40gmail.com>
> > Site: http://www.drdsistemas.com/ <http://www.drdsistemas.com/>
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
>
> --
>
> ----------------------------------------------------------
> *Adriano Santos*
> Direção de Arte
> Doiscliques.com Identidade Visual e Propaganda
> www.doiscliques.com <http://www.doiscliques.com>
>
> Sua empresa de mãos dadas com a mídia.
> <http://www.doiscliques.com>
>
> 
>



-- 
Eduardo Silva dos Santos
DRD Sistemas.
(27) 3218-4201
MSN: [EMAIL PROTECTED]
Site: http://www.drdsistemas.com/


[As partes desta mensagem que não continham texto foram removidas]

Responder a