[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; Marcelo
RE: [delphi-br] Form Dinamico, erro ao acessar objetos...
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...
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...
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/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