Carregar Variável no On Create do Form Delphi

14/11/2021

0

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

Responder

Posts

15/11/2021

Paulo

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;
Responder

15/11/2021

Emerson Nascimento

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

16/11/2021

Anderson Gonçalves

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?
Responder

16/11/2021

Anderson Gonçalves

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.
Responder

20/11/2021

Emerson Nascimento

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.




Responder

21/11/2021

Emerson Nascimento

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.
Responder

29/11/2021

Emerson Nascimento

Anderson, conseguiu resolver o problema?

Responder

30/11/2021

Anderson Gonçalves

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.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar