Fórum Erro ao abrir Form pela classe #484954
08/07/2014
0
Tenho uma função para abrir form dinamicamente pela classe, funciona, o form abre, porém, no evento onshow do form tenho um codigo
ex: Nome do Form FOrcamento
FOrcamento.Edit1.Text := '1';
Quando passa por essa parte da erro de access violation porque o FOrcamento não está aberto, ou instanciado, não sei pq, é ai que está meu problema.
o código para abrir o form é o seguinte:
procedure abrirtela;
var
Tela : TForm;
TClasse : TFormClass;
begin
TClasse := TFormClass(FindClass('TFOrcamento'));
application.CreateForm(TClasse,tela);
Tela.Show;
end;Por favor quem puder ajudar, estou precisando com certa urgencia.
Everton Carlesso
Curtir tópico
+ 0Posts
14/07/2014
Valquiria Silva
Self.Edit1.Text := '1';
Gostei + 0
15/07/2014
Everton Carlesso
Desse jeito tbm ficaria complicado para mim, pq eu teria que alterar todas as telas do sistema, e são mais de 900 formulários.
Obrigado pela atenção... Estou disposto a novos testes, mandem idéias por favor.
Gostei + 0
17/07/2014
Valquiria Silva
Sim continua nil, faça um teste com o Self, e com o FOrçamento.
Exemplo: Onshow do FOrcamento
Self.Edit1.Text := '1'; Self.Caption:= Self.name; Forcamento.Edit1.Text := '1';
FOrcamento continuara nil, pois não foi criado. Antes da sessão "implementation" verá algo assim:
var
Forcamento: TForcamento;
implementation
Esse var é do um obejto da classe TForcamento que não foi criado.
Quando você usa a função abretela ela instancia um outro objeto dessa mesma classe.
application.CreateForm(TClasse,tela);
Tela então é uma instancia do TForcamento.
Tudo isso pra te dizer que quando for fazer referencia ao form dentro do próprio form como no caso
Forcamento.Edit1.Text := '1';
use o Self, pois o Self é uma referência da classe que está se chamando ou declarando.
Self.Edit1.Text := '1';
Abs.
Gostei + 0
22/07/2014
Everton Carlesso
Você saberia alguma forma do FOrcamento não ficar nil? para eu não precisar alterar todo o sistema.
Ex: tenho várias telas de consulta, consulta clientes, consulta loja, consulta fornecedores, etc.... e elas tem um código que usam os nomes dos forms.
Exemplo da consulta de cliente:
if f2Principal.label1.caption = 'Orçamento.Cliente' then
FOrcamento.DBEdit3.text := QGen.fieldbyname ('Cliente').asstring;
if f2Principal.label1.caption = 'Export.Edit1' then
FExportarDados.Edit1.text := QGen.fieldbyname ('Cliente').asstring;
if f2Principal.label1.caption = 'Export.Edit2' then
FExportarDados.Edit2.text := QGen.fieldbyname ('Cliente').asstring;
if f2Principal.label1.caption = 'Email.Cliente' then
FEmail.EditPara.text := QGen.fieldbyname ('email').asstring;
if f2Principal.label1.caption = 'GeraServ.Edit1' then
FGera_Servicos.Edit1.text := QGen.fieldbyname ('Cliente').asstring;
if f2Principal.label1.caption = 'GeraServ.Edit2' then
FGera_Servicos.Edit2.text := QGen.fieldbyname ('Cliente').asstring;
if f2Principal.label1.caption = 'ReciboCob.Edit1' then
FCR_ReciboCob.Edit1.text := QGen.fieldbyname ('Cliente').asstring;...
...
Cada tela de consulta tem esse tipo de código, e só nessa tela de consulta cliente tem mais umas 400 linhas desse tipo, fora as outras telas.
Se o Form 'FOrcamento', por exemplo, não ficasse nil não precisaria alterar todas as outras telas.
Desde já agradeço!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)