RE: [delphi-br] Form Dinamico, erro ao acessar objetos...

2009-02-04 Por tôpico Rubem Nascimento da Rocha

Se vc prestar bem atenção nesse código que vc postou, vai concluir que a 
instância FirstForm não foi inicializada, e sim uma instância interna que fica 
localmente na rotina CreateFormFromName(). E, por conta disso, o erro (exceção 
que vc não mencionou), com toda certeza é um Access Violation!
 
Sds.


 To: delphi-br@yahoogrupos.com.br
 From: contato.pcsolut...@yahoo.com.br
 Date: Wed, 4 Feb 2009 14:27:38 +
 Subject: [delphi-br] Form Dinamico, erro ao acessar objetos...


 Olá Pessoal, tudo bem?



 Tenho uma rotinha que cria os forms dinamicamente com variaveis, no

 qual funciona corretamente..

 Porém não consigo acessar nenhuma propriedade ou objeto deste form

 pelo nome dele...



 procurei bastante na internet mas nao achei nada



 este link tem o exemplo das rotinas que estou usando...



 http://delphi.about.com/library/weekly/aa080905a.htm



 procedure CreateFormFromName(const FormName : string);

 var

 fc : TFormClass;

 f : TForm;

 begin

 fc := TFormClass(FindClass(FormName));

 f := fc.Create(Application);

 f.Show;

 end;



 procedure TMainForm.FormCreate(

 Sender: TObject);

 begin

 RegisterClass(TFirstForm);

 RegisterClass(TSecondForm);

 RegisterClass(TThirdForm);

 end;



 procedure TMainForm.CreateFormButtonClick(

 Sender: TObject);

 var

 s : string;

 begin

 s := 'TFirstForm';

 CreateFormFromName(s);

 end;



 PARTE QUE ACONTECE O ERRO..



 procedure TMainForm.Button1Click(Sender: TObject);

 begin

 FirstForm.Label1.Caption := 'Testando';

 end;

_
Cansado de espaço para só 50 fotos? Conheça o Spaces, o site de relacionamentos 
com até 6,000 fotos!
http://www.amigosdomessenger.com.br

Re: [delphi-br] Form Dinamico, erro ao acessar objetos...

2009-02-04 Por tôpico José Mário Silva Guedes
Aparentemente você tem que fazer um typecast, algo mais ou menos assim:

TFirstForm(FirstForm).Label1.Caption := 'Testando';

Acredito que a variável FirstForm seja do tipo TForm, onde não existe o
Label1.

Certo?


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



RE: [delphi-br] Form Dinamico, erro ao acessar objetos...

2009-02-04 Por tôpico Rubem Nascimento da Rocha

Negativo! Leia a minha resposta e saberá exatamente o q está acontecendo!
Sds.


 To: delphi-br@yahoogrupos.com.br
 From: jmariogue...@gmail.com
 Date: Wed, 4 Feb 2009 12:51:42 -0300
 Subject: Re: [delphi-br] Form Dinamico, erro ao acessar objetos...


 Aparentemente você tem que fazer um typecast, algo mais ou menos assim:



 TFirstForm(FirstForm).Label1.Caption := 'Testando';



 Acredito que a variável FirstForm seja do tipo TForm, onde não existe o

 Label1.



 Certo?



_
Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
http://www.amigosdomessenger.com.br/

Re: [delphi-br] Form Dinamico, erro ao acessar objetos...

2009-02-04 Por tôpico Joao Morais
2009/2/4 contato.pcsolution contato.pcsolut...@yahoo.com.br:
 procedure CreateFormFromName(const FormName : string);
 var
 fc : TFormClass;
 f : TForm;
 begin
 fc := TFormClass(FindClass(FormName));
 f := fc.Create(Application);
 f.Show;
 end;

Essa rotina tá perigosa. Arruma pra algo mais ou menos assim:

function CreateFormFromName(const FormName : string): Boolean;
var
  fc : TClass;
  f : TForm;
begin
  fc := FindClass(FormName);
  Result := Assigned(fc) and fc.InheritsFrom(TForm);
  if Result then
fc.Create(Application).Show;
end;

Se retornar False, o form não foi encontrado.


 PARTE QUE ACONTECE O ERRO..

 procedure TMainForm.Button1Click(Sender: TObject);
 begin
 FirstForm.Label1.Caption := 'Testando';
 end;

Adapte a rotina acima com os truques desse artigo:

http://blog.joaomorais.com.br/2008/08/31/dica-gerenciamento-form.html

Joao Morais