Como usar NULL para um parâmetro tipo quot;varquot;
Bom amigos, tenho uma função genérica para chamada das rotinas do sistema, na qual faço as validações de acesso e abertura de arquivos.
Preciso usar na função um parâmetro tipo ´var´.
Como faço para poder não passar o parâmetro FormChamou, já que em determinadas partes do sistema, não vou utilizá-lo?
A chamada com parâmetro seria assim:
Sem parâmetro
Em parâmetros ´normais´ utilizo:
Mas nesse caso não sem como colocar que esse parâmetro pode ser deixado em branco.
Obrigado a todos
Mario[/code]
Preciso usar na função um parâmetro tipo ´var´.
procedure ChamaForm(nNivel: integer; var FormChamou );
Como faço para poder não passar o parâmetro FormChamou, já que em determinadas partes do sistema, não vou utilizá-lo?
A chamada com parâmetro seria assim:
ChamaForm(1001,fCadPro)
Sem parâmetro
ChamaForm(1001)
Em parâmetros ´normais´ utilizo:
Teste: string = ´´ Teste2: integer = 0
Mas nesse caso não sem como colocar que esse parâmetro pode ser deixado em branco.
Obrigado a todos
Mario[/code]
Aldus
Curtidas 0
Respostas
Marco Salles
28/10/2006
amigo aldus , porque voce não usa a directiva overload;
GOSTEI 0
Siam
28/10/2006
E pq vc precisa passar como [b:f03d8a299e]var[/b:f03d8a299e] um objeto ?
GOSTEI 0
Tnaires
28/10/2006
Olá
Como nosso colega [b:52574289f8]siam[/b:52574289f8] falou, você não precisa passar uma referência a um objeto usando [b:52574289f8]var[/b:52574289f8]. Basta fazer:
Para escrever a função de forma que nem sempre seja necessário passar o segundo parâmetro, basta fazer:
Abraços
Como nosso colega [b:52574289f8]siam[/b:52574289f8] falou, você não precisa passar uma referência a um objeto usando [b:52574289f8]var[/b:52574289f8]. Basta fazer:
procedure ChamaForm(nNivel: integer; FormChamou: TForm );
Para escrever a função de forma que nem sempre seja necessário passar o segundo parâmetro, basta fazer:
procedure ChamaForm(nNivel: integer; FormChamou: TForm = nil );
Abraços
GOSTEI 0
Aldus
28/10/2006
Bom dia amigos, coloquei como TForm = nil e funcionou como queria.
O objetivo dessa funcao é fazer com que determinadas partes do sistema quando estiver em um cadastro e chamar um outro, fazer com o que chamou ´já que vou passar´quem chamou fique transparente:
A funcao ficara mais ou menos assim:
Obrigado a todos e bom fim de semana
Mario
O objetivo dessa funcao é fazer com que determinadas partes do sistema quando estiver em um cadastro e chamar um outro, fazer com o que chamou ´já que vou passar´quem chamou fique transparente:
A funcao ficara mais ou menos assim:
procedure tform1.chamaform(nform: integer; formchamou: TForm = nil); begin // Primeiro faco a validacao if Pode acessar o form chamado then begin if FormChamou <> nil then begin formchamou.AlphaBlend := true; formchamou.AlphaBlendvalue := 120; end; if nForm = 1 then form2.ShowModal else if nform = 2 then form3.ShowModal ; if FormChamou <> nil then begin formchamou.AlphaBlendvalue := 255; formchamou.AlphaBlend := false; end; end; end;
Obrigado a todos e bom fim de semana
Mario
GOSTEI 0
Marco Salles
28/10/2006
procedure tform1.chamaform(nform: integer; formchamou: TForm = nil); begin // Primeiro faco a validacao if Pode acessar o form chamado then begin if FormChamou <> nil then begin formchamou.AlphaBlend := true; formchamou.AlphaBlendvalue := 120; end; if nForm = 1 then form2.ShowModal else if nform = 2 then form3.ShowModal ; if FormChamou <> nil then begin formchamou.AlphaBlendvalue := 255; formchamou.AlphaBlend := false; end; end; end;
Não teria jeito de melhorar isto não ???? Pelo que to entendendo o valor
nform ja define o Formularoi ique sera chamado.. Alem disso o fato de voce ter duplicidade de codigos , por exemplo
if FormChamou <> nil then aparece duas vezes
sugere refactoring...
Alem do mais voce esta dentro de uma procedure do privativa do form1 tratando explicitamente com objetos (Form2 e Form3)... Veja se voce fizer disso uma prática , imagine que caso voce altere o nome dos Form do projeto , em consequencia voce ira ter que alterar o nome desse formularios em cada procedure.. Imagine ainda que essas proceudres são muitas ... Enfim , para mim , não constitui boa parte de POO , em termos de visuabilidade , reuso, encapsulamento etc.... é so uma opinião
GOSTEI 0
Aldus
28/10/2006
Bom dia Marco, obrigado pela preocupação, mas essa rotina é responsável pela abertura e encerramento de todos os meus forms, não tenho citação de nomes dos forms no projeto, apenas nessa função, pois nela coloco minhas validações, abertura e fechamento de arquivos, portanto, qualquer mudança de nessas funções, altere somente aqui.
Obrigado pela atenção
Mario
Obrigado pela atenção
Mario
GOSTEI 0