Carregar Variável no On Create do Form Delphi

Delphi

14/11/2021

Eu estou usando o comando findComponent mas não sei como funcionaria para uma variável, eu consigo carregar para componentes mas para uma variável vou precisar de vocês.

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

Anderson Gonçalves

Curtidas 0

Respostas

Paulo

Paulo

14/11/2021

Eu estou usando o comando findComponent mas não sei como funcionaria para uma variável, eu consigo carregar para componentes mas para uma variável vou precisar de vocês.

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;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/11/2021

Você não pode trocar a variável por uma propriedade no Form?
GOSTEI 0
Anderson Gonçalves

Anderson Gonçalves

14/11/2021

Você não pode trocar a variável por uma propriedade no Form?

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?
GOSTEI 0
Anderson Gonçalves

Anderson Gonçalves

14/11/2021

Eu estou usando o comando findComponent mas não sei como funcionaria para uma variável, eu consigo carregar para componentes mas para uma variável vou precisar de vocês.

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.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/11/2021

Anderson Gonçalves, acredito que você não teria problema em fazer como propriedade do form.
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.




GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/11/2021

Para facilitar a abstração, crie a propriedade de todos os formulários com o mesmo nome, mesmo que internamente a variável seja diferente.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/11/2021

Anderson, conseguiu resolver o problema?

GOSTEI 0
Anderson Gonçalves

Anderson Gonçalves

14/11/2021

Anderson, conseguiu resolver o problema?



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.
GOSTEI 0
POSTAR