Bom dia a todos
 
Implementei da seguinte maneira:
 
No form, criei um novo constructor chamado CriarFormNF(Documento:
TNotaFiscal), sendo que estou passando por referência os dados da classe
TNotaFiscal que chamou o form para uma nova instância do TNotaFiscal dentro
do form
 
TfrmVisualizaNota = class(TForm)
...
  private
    pNotaFiscal: TNotaFiscal;
  public
...
constructor TfrmVisualizaNota.CriarFormNF(Documento: TNotaFiscal);
begin
  inherited Create(Application);
  pNotaFiscal:= TNotaFiscal.Create;
  pNotaFiscal:= Documento;
end;
...
 
E na classe TNotaFiscal eu chamo da seguinte forma:
 
TNotaFiscal = class
...
  procedure MostrarNota;
...
procedure TNotaFiscal.MostrarNota;
begin
  frmVisualizaNota:= TfrmVisualizaNota.CriarFormNF(Self);
...
 
A princípio funcionou direito (implementei em um projeto de testes). Vou
fazer mais testes para ver se ocorre algum problema.
 
Grato a todos
Dirceu Jr.
 

  _____  

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Joao Morais
Enviada em: sexta-feira, 29 de setembro de 2006 09:04
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] POO - Objeto controlando TForm


Dirceu Vasson wrote:

> Bom dia a todos
>  
> Estou tentando fazer o seguinte
>  
> TNotaFiscal = class
> ...
>  
> procedure TNotaFiscal.MostrarNota;
> begin
>     frmVisualizaNota:= TfrmVisualizaNota.Create(Self); //
>     ...
> end;
>  
> E, dentro do form gostaria de acessar os atributos e métodos da classe que
> chamou o form, sendo alguma coisa do tipo
>  
> TfrmVisualiza = class(TForm)
> ...
>  
> procedure TfrmVisualizaNota.RecuperaInfo;
> begin
>   edNumeroNota.Text:= <Instancia que chamou o form>.NumeroNota;//dá para
> usar o owner do form?
>   edDataNota.Text:= <Instancia que chamou o form>.DataEmissao;
>   ...
> end;

Dá, para isto você precisa fazer um cast:

   edNumeroNota.Text := (Owner as TNotaFiscal).Numero;
   ...

Para isto o seu TNotaFiscal tem que ser decendente de TComponent, o que 
não é uma idéia muito legal.

Para não usar TComponent como a classe base do seu TNotaFiscal, então 
você pode criar uma propriedade que aponte para o seu objeto de negócio:

   frmVisualizaNota:= TfrmVisualizaNota.Create(nil);
   frmVisualizaNota.Subject := Self;

esse subject aponta para um TNotaFiscal. Daí você pode fazer assim:

   edNumeroNota.Text := (Subject as TNotaFiscal).Numero;
   ...

Ainda assim isto não é uma abordagem legal. GUI (forms e componentes 
visuais) não deve conhecer nada relacionado com objetos de negócio, você 
precisaria criar outras classes que controlam tanto os objetos de 
negócio quanto a sua GUI a fim de evitar acoplamento e principalmente 
aumentar a coesão -- por consequência evitando dores de cabeça e 
aumentando muito a sua produtividade.

Um framework MVP faz exatamente o que você quer e de forma bastante 
eficiente e produtiva.

Se eu puder ajudar, manda um alô.

Às ordens,
--
João Morais
 


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



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a