Carregar Variável no On Create do Form Delphi

14/11/2021

10

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

Posts

15/11/2021

Paulo Felipe

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
Você não pode trocar a variável por uma propriedade no Form?
Responder
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
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
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
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
Anderson, conseguiu resolver o problema?

Responder
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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar