Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, criei uma procedure para chamar meus forms para não ter que ficar repetindo o código sempre que for criar um form
A procedure:
procedure CriaForm(FormName: String);
var FormClass: TFormClass;
Form: TForm;
begin
FormClass := TFormClass(FindClass(FormName));
Form := FormClass.Create(Application);
//Form.Inserir := True;
Form.ShowModal;
Form.Free;
end;
Até ai tudo blz, como podem ver tem um código comentado ali:
Tenho o form de classe TfrmCadItens que estou chamando assim:
CriaForm('TfrmCadItens');
Nesse form tem a variável pública Inserir
Como comentei na procedure eu não consigo acessar essa variável, claro pois não tem como o delphi saber qual form estou chamando e agora como faço pra acessar isso dessa forma?
Obrigado!
Bom dia Thiago.
Então, como esta variável não é comum a todos os formulários, não há outra forma além da segunda solução que postou para criar uma única procedure de criação de formulários que insira valor na variável global do form em questão, pois isso é uma particularidade daquele formulário, não de todos.. a menos que você criasse sempre em todos os forms a variável com o mesmo nome (ai não seria pública, mas no private do form por exemplo) e passasse uma flag na chamada de criação do form pra definir quando atribuir valor a ela ou não.... mas ai teria que ver se realmente valeria a pena isso, pois se esta variável vai existir somente em um único formulário o melhor é deixar como particularidade e tratar como já fez no seu if.
Bom dia Chrnos,
realmente é o jeito.
Agora me deparei com outro problema, geralmente eu usava o seguinte para chamar forms:
Form1 chamando o Form2
Form2 := TForm2.Create(Self);
Form2.ShowModal;
Form2.Free;
No Form2 ele passava algumas variáveis pro Form1, por exemplo no caso deu preencher um Edit
No Form2 eu executava
Form1.MeuEdit.Text := 'MEU TEXTO';
Beleza funcionava perfeitamente.. porém com essa técnica de criar o form dinamicamente esse mesmo procedimento ele da erro de access violation, ou seja não reconhece o Form1 criado em memória, será que tem algum jeito de fazer isso ou vou ter que voltar ao modo tradicional?
Obrigado!
Ai você tem que considerar uma questão: no momento da atribuição do valor ao formulário, o mesmo já está criado? Se sim, não deveria dar erro... note que da forma como está criando seus formulários (pelo código que postou), após sair do form criado você o liberada da memória (free), de modo que qualquer tentativa de acessar o mesmo em outro momento do programa sem o recriá-lo resultará num erro de access violation... na sua situação atual, o form para onde está tentando jogar o valor já está criado antes da atribuição do valor?
Uma alternativa para não voltar ao modo tradicional é, em situações assim, fazer uma chamada com create dentro da tela como uma função local deste formulário... ou terá que criar um método global que receba os possíveis valores para cada form e tratar isso como particularidade saca?
Deu certo, no caso tive que passar uma variável do Form pai ao Form filho.
Passei a variável Form que eu criei dinamicamente pro Form filho e ai consegui realizar as alterações, usando o esquema de criar dinamicamente, valeu pelas dicas e ajuda!
Se alguém se interessar posto o código mais detalhdamente. Abraço!
O único jeito foi fazer o seguinte, caso ajude alguém fica a dica, eu queria uma coisa mais dinâmica, mas assim funciona e ja abstrai muito código:
begin