Carregar Variável no On Create do Form Delphi
14/11/2021
0
Em uma procedure eu faço o create do form, e acho os campos para preenchimentos caso seja uma edição de dados, porém preciso carregar uma variável inteira que é a chave primária da tabela que deverá ser alterada.
Depois do :
Application.CreateForm(TForm1, Form1);
Para executar um botão por exemplo eu faço isso.
Var vBotaoForm : TComponent;
if botao <> '' then
begin
vBotaoForm := telaDestino.FindComponent(Botao);
if vBotaoForm.classname = 'TSpeedButton' then
begin
with telaDestino do
begin
(vBotaoForm as TSpeedButton).Click;
end;
end;
end;
Mas nesse caso eu quero preencher uma variável então tentei:
Var vVariavel : TComponent;
vVariavel := telaDestino.FindComponent('CodigoPK');
// Dúvida aqui
if vVariavel.className = 'Aqui a minha dúvida' then
Como destinar os dados para a variável encontrada??
Ajuda ai boys, vocês são feras, com componentes eu consigo fazer as coisas mas quando é variável... batendo cabeça.
Anderson Gonçalves
Posts
15/11/2021
Paulo
Em uma procedure eu faço o create do form, e acho os campos para preenchimentos caso seja uma edição de dados, porém preciso carregar uma variável inteira que é a chave primária da tabela que deverá ser alterada.
Depois do :
Application.CreateForm(TForm1, Form1);
Para executar um botão por exemplo eu faço isso.
Var vBotaoForm : TComponent;
if botao <> '''''''' then
begin
vBotaoForm := telaDestino.FindComponent(Botao);
if vBotaoForm.classname = ''''TSpeedButton'''' then
begin
with telaDestino do
begin
(vBotaoForm as TSpeedButton).Click;
end;
end;
end;
Mas nesse caso eu quero preencher uma variável então tentei:
Var vVariavel : TComponent;
vVariavel := telaDestino.FindComponent(''''CodigoPK'''');
// Dúvida aqui
if vVariavel.className = ''''Aqui a minha dúvida'''' then
Como destinar os dados para a variável encontrada??
Ajuda ai boys, vocês são feras, com componentes eu consigo fazer as coisas mas quando é variável... batendo cabeça.
O jeito mais fácil é
Nomeform.nomevariavel:=valor;
15/11/2021
Emerson Nascimento
16/11/2021
Anderson Gonçalves
Eu teria um trabalho tremendo porque vários forms estão com variáveis identificando as chaves primárias, por exemplo:
Se eu clicar em um botão novo usuário ele atribui para o formUsuario que contém uma variável vCodUsuario : Integer o valor ZERO e depois de eu preencher a tela toda para gravar se essa variável for zero é uma inclusão ai ele faz o procedimento de gravar com autoincremento.
Caso eu click no botão editar ele pega o registro selecionado no dbgrid, no campo chave primária, e atribui a mesma variável o código do registro para edição e preenche a tela toda com os dados e o usuário modifica o que quiser e grava e a variável com valor diferente de ZERO inicia o procedimento de update na tabela.
Todas as telas de CADASTROS tem uma variável do tipo inteiro para verificar se é ZERO ou diferente disso para saber se é INCLUSÃO OU ALTERAÇÃO, entendeu agora o trabalho que vou ter para trocar todas as variáveis por propriedades?
Mais alguém tem alguma idéia?
16/11/2021
Anderson Gonçalves
Em uma procedure eu faço o create do form, e acho os campos para preenchimentos caso seja uma edição de dados, porém preciso carregar uma variável inteira que é a chave primária da tabela que deverá ser alterada.
Depois do :
Application.CreateForm(TForm1, Form1);
Para executar um botão por exemplo eu faço isso.
Var vBotaoForm : TComponent;
if botao <> '''''''' then
begin
vBotaoForm := telaDestino.FindComponent(Botao);
if vBotaoForm.classname = ''''TSpeedButton'''' then
begin
with telaDestino do
begin
(vBotaoForm as TSpeedButton).Click;
end;
end;
end;
Mas nesse caso eu quero preencher uma variável então tentei:
Var vVariavel : TComponent;
vVariavel := telaDestino.FindComponent(''''CodigoPK'''');
// Dúvida aqui
if vVariavel.className = ''''Aqui a minha dúvida'''' then
Como destinar os dados para a variável encontrada??
Ajuda ai boys, vocês são feras, com componentes eu consigo fazer as coisas mas quando é variável... batendo cabeça.
O jeito mais fácil é
Nomeform.nomevariavel:=valor;
dentro do instanciamento da tela não é acessível assim o objeto irmão, quem dera que fosse tão fácil assim, somente depois do show posso atribuir esse valor porém depois do show ele não recebe o valor vindo de outra tela, não sei porque mas é assim.
20/11/2021
Emerson Nascimento
Provavelmente tua variável é private.
Se for, deixe como está.
Daí crie o propriedade no form, na seção public.
property PropCodUsuario: integer read vCodUsuario write vCodUsuario;
Assim você mantém o uso da variável vCodUsuario dentro do form como já é feito. Não precisa alterar nada.
Mas para acessar ou modificar o conteúdo da variável, basta fazer, a partir de um elemento externo, utilize a propriedade:
Form.PropCodUsuario := x // atribui um conteúdo à propriedade e, por consequência, à variável vCodUsuario
ou
ShowMessage( IntTostr( Form.PropCodUsuario) ); // recupera o valor da propriedade, que é o mesmo valor de vCodUsuario.
21/11/2021
Emerson Nascimento
30/11/2021
Anderson Gonçalves
Consegui sim, vou colocar como solucionei aqui:
Procedure showForm(ccForm:TComponentClass; fForm:TForm);
begin
// -- Instanciando o formulário.
application.createform(ccForm, fForm);
// -- Depois de instanciar eu verifico qual tela está abrindo e envio para a variável PK de checagem do formulário.
(ccForm as TfrmImpostoAdd).vCodImposto := codigoPk;
end;
Obrigado a todos por terem tentado me ajudar.
Quem conseguiu for um outro desenvolvedor da empresa que eu trabalho.
Clique aqui para fazer login e interagir na Comunidade :)